unbound-1.13.1/0000755000175000017500000000000014010434646012705 5ustar wouterwouterunbound-1.13.1/validator/0000755000175000017500000000000014010434640014664 5ustar wouterwouterunbound-1.13.1/validator/val_nsec.c0000644000175000017500000004072414010434640016631 0ustar wouterwouter/* * validator/val_nsec.c - validator NSEC denial of existence functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with NSEC checking, the different NSEC proofs * for denial of existence, and proofs for presence of types. */ #include "config.h" #include "validator/val_nsec.h" #include "validator/val_utils.h" #include "util/data/msgreply.h" #include "util/data/dname.h" #include "util/net_help.h" #include "util/module.h" #include "services/cache/rrset.h" /** get ttl of rrset */ static uint32_t rrset_get_ttl(struct ub_packed_rrset_key* k) { struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; return d->ttl; } int nsecbitmap_has_type_rdata(uint8_t* bitmap, size_t len, uint16_t type) { /* Check type present in NSEC typemap with bitmap arg */ /* bitmasks for determining type-lowerbits presence */ uint8_t masks[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; uint8_t type_window = type>>8; uint8_t type_low = type&0xff; uint8_t win, winlen; /* read each of the type bitmap windows and see if the searched * type is amongst it */ while(len > 0) { if(len < 3) /* bad window, at least window# winlen bitmap */ return 0; win = *bitmap++; winlen = *bitmap++; len -= 2; if(len < winlen || winlen < 1 || winlen > 32) return 0; /* bad window length */ if(win == type_window) { /* search window bitmap for the correct byte */ /* mybyte is 0 if we need the first byte */ size_t mybyte = type_low>>3; if(winlen <= mybyte) return 0; /* window too short */ return (int)(bitmap[mybyte] & masks[type_low&0x7]); } else { /* not the window we are looking for */ bitmap += winlen; len -= winlen; } } /* end of bitmap reached, no type found */ return 0; } int nsec_has_type(struct ub_packed_rrset_key* nsec, uint16_t type) { struct packed_rrset_data* d = (struct packed_rrset_data*)nsec-> entry.data; size_t len; if(!d || d->count == 0 || d->rr_len[0] < 2+1) return 0; len = dname_valid(d->rr_data[0]+2, d->rr_len[0]-2); if(!len) return 0; return nsecbitmap_has_type_rdata(d->rr_data[0]+2+len, d->rr_len[0]-2-len, type); } /** * Get next owner name from nsec record * @param nsec: the nsec RRset. * If there are multiple RRs, then this will only return one of them. * @param nm: the next name is returned. * @param ln: length of nm is returned. * @return false on a bad NSEC RR (too short, malformed dname). */ static int nsec_get_next(struct ub_packed_rrset_key* nsec, uint8_t** nm, size_t* ln) { struct packed_rrset_data* d = (struct packed_rrset_data*)nsec-> entry.data; if(!d || d->count == 0 || d->rr_len[0] < 2+1) { *nm = 0; *ln = 0; return 0; } *nm = d->rr_data[0]+2; *ln = dname_valid(*nm, d->rr_len[0]-2); if(!*ln) { *nm = 0; *ln = 0; return 0; } return 1; } /** * For an NSEC that matches the DS queried for, check absence of DS type. * * @param nsec: NSEC for proof, must be trusted. * @param qinfo: what is queried for. * @return if secure the nsec proves that no DS is present, or * insecure if it proves it is not a delegation point. * or bogus if something was wrong. */ static enum sec_status val_nsec_proves_no_ds(struct ub_packed_rrset_key* nsec, struct query_info* qinfo) { log_assert(qinfo->qtype == LDNS_RR_TYPE_DS); log_assert(ntohs(nsec->rk.type) == LDNS_RR_TYPE_NSEC); if(nsec_has_type(nsec, LDNS_RR_TYPE_SOA) && qinfo->qname_len != 1) { /* SOA present means that this is the NSEC from the child, * not the parent (so it is the wrong one). */ return sec_status_bogus; } if(nsec_has_type(nsec, LDNS_RR_TYPE_DS)) { /* DS present means that there should have been a positive * response to the DS query, so there is something wrong. */ return sec_status_bogus; } if(!nsec_has_type(nsec, LDNS_RR_TYPE_NS)) { /* If there is no NS at this point at all, then this * doesn't prove anything one way or the other. */ return sec_status_insecure; } /* Otherwise, this proves no DS. */ return sec_status_secure; } /** check security status from cache or verify rrset, returns true if secure */ static int nsec_verify_rrset(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* nsec, struct key_entry_key* kkey, char** reason, struct module_qstate* qstate) { struct packed_rrset_data* d = (struct packed_rrset_data*) nsec->entry.data; if(d->security == sec_status_secure) return 1; rrset_check_sec_status(env->rrset_cache, nsec, *env->now); if(d->security == sec_status_secure) return 1; d->security = val_verify_rrset_entry(env, ve, nsec, kkey, reason, LDNS_SECTION_AUTHORITY, qstate); if(d->security == sec_status_secure) { rrset_update_sec_status(env->rrset_cache, nsec, *env->now); return 1; } return 0; } enum sec_status val_nsec_prove_nodata_dsreply(struct module_env* env, struct val_env* ve, struct query_info* qinfo, struct reply_info* rep, struct key_entry_key* kkey, time_t* proof_ttl, char** reason, struct module_qstate* qstate) { struct ub_packed_rrset_key* nsec = reply_find_rrset_section_ns( rep, qinfo->qname, qinfo->qname_len, LDNS_RR_TYPE_NSEC, qinfo->qclass); enum sec_status sec; size_t i; uint8_t* wc = NULL, *ce = NULL; int valid_nsec = 0; struct ub_packed_rrset_key* wc_nsec = NULL; /* If we have a NSEC at the same name, it must prove one * of two things * -- * 1) this is a delegation point and there is no DS * 2) this is not a delegation point */ if(nsec) { if(!nsec_verify_rrset(env, ve, nsec, kkey, reason, qstate)) { verbose(VERB_ALGO, "NSEC RRset for the " "referral did not verify."); return sec_status_bogus; } sec = val_nsec_proves_no_ds(nsec, qinfo); if(sec == sec_status_bogus) { /* something was wrong. */ *reason = "NSEC does not prove absence of DS"; return sec; } else if(sec == sec_status_insecure) { /* this wasn't a delegation point. */ return sec; } else if(sec == sec_status_secure) { /* this proved no DS. */ *proof_ttl = ub_packed_rrset_ttl(nsec); return sec; } /* if unchecked, fall through to next proof */ } /* Otherwise, there is no NSEC at qname. This could be an ENT. * (ENT=empty non terminal). If not, this is broken. */ /* verify NSEC rrsets in auth section */ for(i=rep->an_numrrsets; i < rep->an_numrrsets+rep->ns_numrrsets; i++) { if(rep->rrsets[i]->rk.type != htons(LDNS_RR_TYPE_NSEC)) continue; if(!nsec_verify_rrset(env, ve, rep->rrsets[i], kkey, reason, qstate)) { verbose(VERB_ALGO, "NSEC for empty non-terminal " "did not verify."); return sec_status_bogus; } if(nsec_proves_nodata(rep->rrsets[i], qinfo, &wc)) { verbose(VERB_ALGO, "NSEC for empty non-terminal " "proved no DS."); *proof_ttl = rrset_get_ttl(rep->rrsets[i]); if(wc && dname_is_wild(rep->rrsets[i]->rk.dname)) wc_nsec = rep->rrsets[i]; valid_nsec = 1; } if(val_nsec_proves_name_error(rep->rrsets[i], qinfo->qname)) { ce = nsec_closest_encloser(qinfo->qname, rep->rrsets[i]); } } if(wc && !ce) valid_nsec = 0; else if(wc && ce) { /* ce and wc must match */ if(query_dname_compare(wc, ce) != 0) valid_nsec = 0; else if(!wc_nsec) valid_nsec = 0; } if(valid_nsec) { if(wc) { /* check if this is a delegation */ *reason = "NSEC for wildcard does not prove absence of DS"; return val_nsec_proves_no_ds(wc_nsec, qinfo); } /* valid nsec proves empty nonterminal */ return sec_status_insecure; } /* NSEC proof did not conclusively point to DS or no DS */ return sec_status_unchecked; } int nsec_proves_nodata(struct ub_packed_rrset_key* nsec, struct query_info* qinfo, uint8_t** wc) { log_assert(wc); if(query_dname_compare(nsec->rk.dname, qinfo->qname) != 0) { uint8_t* nm; size_t ln; /* empty-non-terminal checking. * Done before wildcard, because this is an exact match, * and would prevent a wildcard from matching. */ /* If the nsec is proving that qname is an ENT, the nsec owner * will be less than qname, and the next name will be a child * domain of the qname. */ if(!nsec_get_next(nsec, &nm, &ln)) return 0; /* bad nsec */ if(dname_strict_subdomain_c(nm, qinfo->qname) && dname_canonical_compare(nsec->rk.dname, qinfo->qname) < 0) { return 1; /* proves ENT */ } /* wildcard checking. */ /* If this is a wildcard NSEC, make sure that a) it was * possible to have generated qname from the wildcard and * b) the type map does not contain qtype. Note that this * does NOT prove that this wildcard was the applicable * wildcard. */ if(dname_is_wild(nsec->rk.dname)) { /* the purported closest encloser. */ uint8_t* ce = nsec->rk.dname; size_t ce_len = nsec->rk.dname_len; dname_remove_label(&ce, &ce_len); /* The qname must be a strict subdomain of the * closest encloser, for the wildcard to apply */ if(dname_strict_subdomain_c(qinfo->qname, ce)) { /* here we have a matching NSEC for the qname, * perform matching NSEC checks */ if(nsec_has_type(nsec, LDNS_RR_TYPE_CNAME)) { /* should have gotten the wildcard CNAME */ return 0; } if(nsec_has_type(nsec, LDNS_RR_TYPE_NS) && !nsec_has_type(nsec, LDNS_RR_TYPE_SOA)) { /* wrong parentside (wildcard) NSEC used */ return 0; } if(nsec_has_type(nsec, qinfo->qtype)) { return 0; } *wc = ce; return 1; } } else { /* See if the next owner name covers a wildcard * empty non-terminal. */ while (dname_canonical_compare(nsec->rk.dname, nm) < 0) { /* wildcard does not apply if qname below * the name that exists under the '*' */ if (dname_subdomain_c(qinfo->qname, nm)) break; /* but if it is a wildcard and qname is below * it, then the wildcard applies. The wildcard * is an empty nonterminal. nodata proven. */ if (dname_is_wild(nm)) { size_t ce_len = ln; uint8_t* ce = nm; dname_remove_label(&ce, &ce_len); if(dname_strict_subdomain_c(qinfo->qname, ce)) { *wc = ce; return 1; } } dname_remove_label(&nm, &ln); } } /* Otherwise, this NSEC does not prove ENT and is not a * wildcard, so it does not prove NODATA. */ return 0; } /* If the qtype exists, then we should have gotten it. */ if(nsec_has_type(nsec, qinfo->qtype)) { return 0; } /* if the name is a CNAME node, then we should have gotten the CNAME*/ if(nsec_has_type(nsec, LDNS_RR_TYPE_CNAME)) { return 0; } /* If an NS set exists at this name, and NOT a SOA (so this is a * zone cut, not a zone apex), then we should have gotten a * referral (or we just got the wrong NSEC). * The reverse of this check is used when qtype is DS, since that * must use the NSEC from above the zone cut. */ if(qinfo->qtype != LDNS_RR_TYPE_DS && nsec_has_type(nsec, LDNS_RR_TYPE_NS) && !nsec_has_type(nsec, LDNS_RR_TYPE_SOA)) { return 0; } else if(qinfo->qtype == LDNS_RR_TYPE_DS && nsec_has_type(nsec, LDNS_RR_TYPE_SOA) && !dname_is_root(qinfo->qname)) { return 0; } return 1; } int val_nsec_proves_name_error(struct ub_packed_rrset_key* nsec, uint8_t* qname) { uint8_t* owner = nsec->rk.dname; uint8_t* next; size_t nlen; if(!nsec_get_next(nsec, &next, &nlen)) return 0; /* If NSEC owner == qname, then this NSEC proves that qname exists. */ if(query_dname_compare(qname, owner) == 0) { return 0; } /* If NSEC is a parent of qname, we need to check the type map * If the parent name has a DNAME or is a delegation point, then * this NSEC is being misused. */ if(dname_subdomain_c(qname, owner) && (nsec_has_type(nsec, LDNS_RR_TYPE_DNAME) || (nsec_has_type(nsec, LDNS_RR_TYPE_NS) && !nsec_has_type(nsec, LDNS_RR_TYPE_SOA)) )) { return 0; } if(query_dname_compare(owner, next) == 0) { /* this nsec is the only nsec */ /* zone.name NSEC zone.name, disproves everything else */ /* but only for subdomains of that zone */ if(dname_strict_subdomain_c(qname, next)) return 1; } else if(dname_canonical_compare(owner, next) > 0) { /* this is the last nsec, ....(bigger) NSEC zonename(smaller) */ /* the names after the last (owner) name do not exist * there are no names before the zone name in the zone * but the qname must be a subdomain of the zone name(next). */ if(dname_canonical_compare(owner, qname) < 0 && dname_strict_subdomain_c(qname, next)) return 1; } else { /* regular NSEC, (smaller) NSEC (larger) */ if(dname_canonical_compare(owner, qname) < 0 && dname_canonical_compare(qname, next) < 0) { return 1; } } return 0; } int val_nsec_proves_insecuredelegation(struct ub_packed_rrset_key* nsec, struct query_info* qinfo) { if(nsec_has_type(nsec, LDNS_RR_TYPE_NS) && !nsec_has_type(nsec, LDNS_RR_TYPE_DS) && !nsec_has_type(nsec, LDNS_RR_TYPE_SOA)) { /* see if nsec signals an insecure delegation */ if(qinfo->qtype == LDNS_RR_TYPE_DS) { /* if type is DS and qname is equal to nsec, then it * is an exact match nsec, result not insecure */ if(dname_strict_subdomain_c(qinfo->qname, nsec->rk.dname)) return 1; } else { if(dname_subdomain_c(qinfo->qname, nsec->rk.dname)) return 1; } } return 0; } uint8_t* nsec_closest_encloser(uint8_t* qname, struct ub_packed_rrset_key* nsec) { uint8_t* next; size_t nlen; uint8_t* common1, *common2; if(!nsec_get_next(nsec, &next, &nlen)) return NULL; /* longest common with owner or next name */ common1 = dname_get_shared_topdomain(nsec->rk.dname, qname); common2 = dname_get_shared_topdomain(next, qname); if(dname_count_labels(common1) > dname_count_labels(common2)) return common1; return common2; } int val_nsec_proves_positive_wildcard(struct ub_packed_rrset_key* nsec, struct query_info* qinf, uint8_t* wc) { uint8_t* ce; /* 1) prove that qname doesn't exist and * 2) that the correct wildcard was used * nsec has been verified already. */ if(!val_nsec_proves_name_error(nsec, qinf->qname)) return 0; /* check wildcard name */ ce = nsec_closest_encloser(qinf->qname, nsec); if(!ce) return 0; if(query_dname_compare(wc, ce) != 0) { return 0; } return 1; } int val_nsec_proves_no_wc(struct ub_packed_rrset_key* nsec, uint8_t* qname, size_t qnamelen) { /* Determine if a NSEC record proves the non-existence of a * wildcard that could have produced qname. */ int labs; uint8_t* ce = nsec_closest_encloser(qname, nsec); uint8_t* strip; size_t striplen; uint8_t buf[LDNS_MAX_DOMAINLEN+3]; if(!ce) return 0; /* we can subtract the closest encloser count - since that is the * largest shared topdomain with owner and next NSEC name, * because the NSEC is no proof for names shorter than the owner * and next names. */ labs = dname_count_labels(qname) - dname_count_labels(ce); if(labs > 0) { /* i is number of labels to strip off qname, prepend * wild */ strip = qname; striplen = qnamelen; dname_remove_labels(&strip, &striplen, labs); if(striplen > LDNS_MAX_DOMAINLEN-2) return 0; /* too long to prepend wildcard */ buf[0] = 1; buf[1] = (uint8_t)'*'; memmove(buf+2, strip, striplen); if(val_nsec_proves_name_error(nsec, buf)) { return 1; } } return 0; } unbound-1.13.1/validator/val_nsec3.h0000644000175000017500000003477414010434640016731 0ustar wouterwouter/* * validator/val_nsec3.h - validator NSEC3 denial of existence functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with NSEC3 checking, the different NSEC3 proofs * for denial of existence, and proofs for presence of types. * * NSEC3 * 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Hash Alg. | Flags | Iterations | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Salt Length | Salt / * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Hash Length | Next Hashed Owner Name / * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * / Type Bit Maps / * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * * NSEC3PARAM * 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Hash Alg. | Flags | Iterations | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Salt Length | Salt / * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * */ #ifndef VALIDATOR_VAL_NSEC3_H #define VALIDATOR_VAL_NSEC3_H #include "util/rbtree.h" #include "util/data/packed_rrset.h" struct val_env; struct regional; struct module_env; struct module_qstate; struct ub_packed_rrset_key; struct reply_info; struct query_info; struct key_entry_key; struct sldns_buffer; /** * 0 1 2 3 4 5 6 7 * +-+-+-+-+-+-+-+-+ * | |O| * +-+-+-+-+-+-+-+-+ * The OPT-OUT bit in the NSEC3 flags field. * If enabled, there can be zero or more unsigned delegations in the span. * If disabled, there are zero unsigned delegations in the span. */ #define NSEC3_OPTOUT 0x01 /** * The unknown flags in the NSEC3 flags field. * They must be zero, or the NSEC3 is ignored. */ #define NSEC3_UNKNOWN_FLAGS 0xFE /** The SHA1 hash algorithm for NSEC3 */ #define NSEC3_HASH_SHA1 0x01 /** * Determine if the set of NSEC3 records provided with a response prove NAME * ERROR. This means that the NSEC3s prove a) the closest encloser exists, * b) the direct child of the closest encloser towards qname doesn't exist, * and c) *.closest encloser does not exist. * * @param env: module environment with temporary region and buffer. * @param ve: validator environment, with iteration count settings. * @param list: array of RRsets, some of which are NSEC3s. * @param num: number of RRsets in the array to examine. * @param qinfo: query that is verified for. * @param kkey: key entry that signed the NSEC3s. * @return: * sec_status SECURE of the Name Error is proven by the NSEC3 RRs, * BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. */ enum sec_status nsec3_prove_nameerror(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey); /** * Determine if the NSEC3s provided in a response prove the NOERROR/NODATA * status. There are a number of different variants to this: * * 1) Normal NODATA -- qname is matched to an NSEC3 record, type is not * present. * * 2) ENT NODATA -- because there must be NSEC3 record for * empty-non-terminals, this is the same as #1. * * 3) NSEC3 ownername NODATA -- qname matched an existing, lone NSEC3 * ownername, but qtype was not NSEC3. NOTE: as of nsec-05, this case no * longer exists. * * 4) Wildcard NODATA -- A wildcard matched the name, but not the type. * * 5) Opt-In DS NODATA -- the qname is covered by an opt-in span and qtype == * DS. (or maybe some future record with the same parent-side-only property) * * @param env: module environment with temporary region and buffer. * @param ve: validator environment, with iteration count settings. * @param list: array of RRsets, some of which are NSEC3s. * @param num: number of RRsets in the array to examine. * @param qinfo: query that is verified for. * @param kkey: key entry that signed the NSEC3s. * @return: * sec_status SECURE of the proposition is proven by the NSEC3 RRs, * BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. */ enum sec_status nsec3_prove_nodata(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey); /** * Prove that a positive wildcard match was appropriate (no direct match * RRset). * * @param env: module environment with temporary region and buffer. * @param ve: validator environment, with iteration count settings. * @param list: array of RRsets, some of which are NSEC3s. * @param num: number of RRsets in the array to examine. * @param qinfo: query that is verified for. * @param kkey: key entry that signed the NSEC3s. * @param wc: The purported wildcard that matched. This is the wildcard name * as *.wildcard.name., with the *. label already removed. * @return: * sec_status SECURE of the proposition is proven by the NSEC3 RRs, * BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. */ enum sec_status nsec3_prove_wildcard(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey, uint8_t* wc); /** * Prove that a DS response either had no DS, or wasn't a delegation point. * * Fundamentally there are two cases here: normal NODATA and Opt-In NODATA. * * @param env: module environment with temporary region and buffer. * @param ve: validator environment, with iteration count settings. * @param list: array of RRsets, some of which are NSEC3s. * @param num: number of RRsets in the array to examine. * @param qinfo: query that is verified for. * @param kkey: key entry that signed the NSEC3s. * @param reason: string for bogus result. * @param qstate: qstate with region. * @return: * sec_status SECURE of the proposition is proven by the NSEC3 RRs, * BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. * or if there was no DS in an insecure (i.e., opt-in) way, * INDETERMINATE if it was clear that this wasn't a delegation point. */ enum sec_status nsec3_prove_nods(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey, char** reason, struct module_qstate* qstate); /** * Prove NXDOMAIN or NODATA. * * @param env: module environment with temporary region and buffer. * @param ve: validator environment, with iteration count settings. * @param list: array of RRsets, some of which are NSEC3s. * @param num: number of RRsets in the array to examine. * @param qinfo: query that is verified for. * @param kkey: key entry that signed the NSEC3s. * @param nodata: if return value is secure, this indicates if nodata or * nxdomain was proven. * @return: * sec_status SECURE of the proposition is proven by the NSEC3 RRs, * BOGUS if not, INSECURE if all of the NSEC3s could be validly ignored. */ enum sec_status nsec3_prove_nxornodata(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey, int* nodata); /** * The NSEC3 hash result storage. * Consists of an rbtree, with these nodes in it. * The nodes detail how a set of parameters (from nsec3 rr) plus * a dname result in a hash. */ struct nsec3_cached_hash { /** rbtree node, key is this structure */ rbnode_type node; /** where are the parameters for conversion, in this rrset data */ struct ub_packed_rrset_key* nsec3; /** where are the parameters for conversion, this RR number in data */ int rr; /** the name to convert */ uint8_t* dname; /** length of the dname */ size_t dname_len; /** the hash result (not base32 encoded) */ uint8_t* hash; /** length of hash in bytes */ size_t hash_len; /** the hash result in base32 encoding */ uint8_t* b32; /** length of base32 encoding (as a label) */ size_t b32_len; }; /** * Rbtree for hash cache comparison function. * @param c1: key 1. * @param c2: key 2. * @return: comparison code, -1, 0, 1, of the keys. */ int nsec3_hash_cmp(const void* c1, const void* c2); /** * Obtain the hash of an owner name. * Used internally by the nsec3 proof functions in this file. * published to enable unit testing of hash algorithms and cache. * * @param table: the cache table. Must be initialised at start. * @param region: scratch region to use for allocation. * This region holds the tree, if you wipe the region, reinit the tree. * @param buf: temporary buffer. * @param nsec3: the rrset with parameters * @param rr: rr number from d that has the NSEC3 parameters to hash to. * @param dname: name to hash * This pointer is used inside the tree, assumed region-alloced. * @param dname_len: the length of the name. * @param hash: the hash node is returned on success. * @return: * 1 on success, either from cache or newly hashed hash is returned. * 0 on a malloc failure. * -1 if the NSEC3 rr was badly formatted (i.e. formerr). */ int nsec3_hash_name(rbtree_type* table, struct regional* region, struct sldns_buffer* buf, struct ub_packed_rrset_key* nsec3, int rr, uint8_t* dname, size_t dname_len, struct nsec3_cached_hash** hash); /** * Get next owner name, converted to base32 encoding and with the * zone name (taken from the nsec3 owner name) appended. * @param rrset: the NSEC3 rrset. * @param r: the rr num of the nsec3 in the rrset. * @param buf: buffer to store name in * @param max: size of buffer. * @return length of name on success. 0 on failure (buffer too short or * bad format nsec3 record). */ size_t nsec3_get_nextowner_b32(struct ub_packed_rrset_key* rrset, int r, uint8_t* buf, size_t max); /** * Convert hash into base32 encoding and with the * zone name appended. * @param hash: hashed buffer * @param hashlen: length of hash * @param zone: name of zone * @param zonelen: length of zonename. * @param buf: buffer to store name in * @param max: size of buffer. * @return length of name on success. 0 on failure (buffer too short or * bad format nsec3 record). */ size_t nsec3_hash_to_b32(uint8_t* hash, size_t hashlen, uint8_t* zone, size_t zonelen, uint8_t* buf, size_t max); /** * Get NSEC3 parameters out of rr. * @param rrset: the NSEC3 rrset. * @param r: the rr num of the nsec3 in the rrset. * @param algo: nsec3 hash algo. * @param iter: iteration count. * @param salt: ptr to salt inside rdata. * @param saltlen: length of salt. * @return 0 if bad formatted, unknown nsec3 hash algo, or unknown flags set. */ int nsec3_get_params(struct ub_packed_rrset_key* rrset, int r, int* algo, size_t* iter, uint8_t** salt, size_t* saltlen); /** * Get NSEC3 hashed in a buffer * @param buf: buffer for temp use. * @param nm: name to hash * @param nmlen: length of nm. * @param algo: algo to use, must be known. * @param iter: iterations * @param salt: salt for nsec3 * @param saltlen: length of salt. * @param res: result of hash stored here. * @param max: maximum space for result. * @return 0 on failure, otherwise bytelength stored. */ size_t nsec3_get_hashed(struct sldns_buffer* buf, uint8_t* nm, size_t nmlen, int algo, size_t iter, uint8_t* salt, size_t saltlen, uint8_t* res, size_t max); /** * see if NSEC3 RR contains given type * @param rrset: NSEC3 rrset * @param r: RR in rrset * @param type: in host order to check bit for. * @return true if bit set, false if not or error. */ int nsec3_has_type(struct ub_packed_rrset_key* rrset, int r, uint16_t type); /** * return if nsec3 RR has the optout flag * @param rrset: NSEC3 rrset * @param r: RR in rrset * @return true if optout, false on error or not optout */ int nsec3_has_optout(struct ub_packed_rrset_key* rrset, int r); /** * Return nsec3 RR next hashed owner name * @param rrset: NSEC3 rrset * @param r: RR in rrset * @param next: ptr into rdata to next owner hash * @param nextlen: length of hash. * @return false on malformed */ int nsec3_get_nextowner(struct ub_packed_rrset_key* rrset, int r, uint8_t** next, size_t* nextlen); /** * nsec3Covers * Given a hash and a candidate NSEC3Record, determine if that NSEC3Record * covers the hash. Covers specifically means that the hash is in between * the owner and next hashes and does not equal either. * * @param zone: the zone name. * @param hash: the hash of the name * @param rrset: the rrset of the NSEC3. * @param rr: which rr in the rrset. * @param buf: temporary buffer. * @return true if covers, false if not. */ int nsec3_covers(uint8_t* zone, struct nsec3_cached_hash* hash, struct ub_packed_rrset_key* rrset, int rr, struct sldns_buffer* buf); #endif /* VALIDATOR_VAL_NSEC3_H */ unbound-1.13.1/validator/validator.h0000644000175000017500000001667414010434640017040 0ustar wouterwouter/* * validator/validator.h - secure validator DNS query response module * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that performs validation of DNS queries. * According to RFC 4034. */ #ifndef VALIDATOR_VALIDATOR_H #define VALIDATOR_VALIDATOR_H #include "util/module.h" #include "util/data/msgreply.h" #include "validator/val_utils.h" struct val_anchors; struct key_cache; struct key_entry_key; struct val_neg_cache; struct config_strlist; /** * This is the TTL to use when a trust anchor fails to prime. A trust anchor * will be primed no more often than this interval. Used when harden- * dnssec-stripped is off and the trust anchor fails. */ #define NULL_KEY_TTL 60 /* seconds */ /** * TTL for bogus key entries. When a DS or DNSKEY fails in the chain of * trust the entire zone for that name is blacked out for this TTL. */ #define BOGUS_KEY_TTL 60 /* seconds */ /** max number of query restarts, number of IPs to probe */ #define VAL_MAX_RESTART_COUNT 5 /** Root key sentinel is ta preamble */ #define SENTINEL_IS "root-key-sentinel-is-ta-" /** Root key sentinel is not ta preamble */ #define SENTINEL_NOT "root-key-sentinel-not-ta-" /** Root key sentinal keytag length */ #define SENTINEL_KEYTAG_LEN 5 /** * Global state for the validator. */ struct val_env { /** key cache; these are validated keys. trusted keys only * end up here after being primed. */ struct key_cache* kcache; /** aggressive negative cache. index into NSECs in rrset cache. */ struct val_neg_cache* neg_cache; /** for debug testing a fixed validation date can be entered. * if 0, current time is used for rrsig validation */ int32_t date_override; /** clock skew min for signatures */ int32_t skew_min; /** clock skew max for signatures */ int32_t skew_max; /** TTL for bogus data; used instead of untrusted TTL from data. * Bogus data will not be verified more often than this interval. * seconds. */ uint32_t bogus_ttl; /** * Number of entries in the NSEC3 maximum iteration count table. * Keep this table short, and sorted by size */ int nsec3_keyiter_count; /** * NSEC3 maximum iteration count per signing key size. * This array contains key size values (in increasing order) */ size_t* nsec3_keysize; /** * NSEC3 maximum iteration count per signing key size. * This array contains the maximum iteration count for the keysize * in the keysize array. */ size_t* nsec3_maxiter; /** lock on bogus counter */ lock_basic_type bogus_lock; /** number of times rrsets marked bogus */ size_t num_rrset_bogus; }; /** * State of the validator for a query. */ enum val_state { /** initial state for validation */ VAL_INIT_STATE = 0, /** find the proper keys for validation, follow trust chain */ VAL_FINDKEY_STATE, /** validate the answer, using found key entry */ VAL_VALIDATE_STATE, /** finish up */ VAL_FINISHED_STATE, }; /** * Per query state for the validator module. */ struct val_qstate { /** * State of the validator module. */ enum val_state state; /** * The original message we have been given to validate. */ struct dns_msg* orig_msg; /** * The query restart count */ int restart_count; /** The blacklist saved for chainoftrust elements */ struct sock_list* chain_blacklist; /** * The query name we have chased to; qname after following CNAMEs */ struct query_info qchase; /** * The chased reply, extract from original message. Can be: * o CNAME * o DNAME + CNAME * o answer * plus authority, additional (nsecs) that have same signature. */ struct reply_info* chase_reply; /** * The cname skip value; the number of rrsets that have been skipped * due to chasing cnames. This is the offset into the * orig_msg->rep->rrsets array, into the answer section. * starts at 0 - for the full original message. * if it is >0 - qchase followed the cname, chase_reply setup to be * that message and relevant authority rrsets. * * The skip is also used for referral messages, where it will * range from 0, over the answer, authority and additional sections. */ size_t rrset_skip; /** trust anchor name */ uint8_t* trust_anchor_name; /** trust anchor labels */ int trust_anchor_labs; /** trust anchor length */ size_t trust_anchor_len; /** the DS rrset */ struct ub_packed_rrset_key* ds_rrset; /** domain name for empty nonterminal detection */ uint8_t* empty_DS_name; /** length of empty_DS_name */ size_t empty_DS_len; /** the current key entry */ struct key_entry_key* key_entry; /** subtype */ enum val_classification subtype; /** signer name */ uint8_t* signer_name; /** length of signer_name */ size_t signer_len; /** true if this state is waiting to prime a trust anchor */ int wait_prime_ta; }; /** * Get the validator function block. * @return: function block with function pointers to validator methods. */ struct module_func_block* val_get_funcblock(void); /** * Get validator state as a string * @param state: to convert * @return constant string that is printable. */ const char* val_state_to_string(enum val_state state); /** validator init */ int val_init(struct module_env* env, int id); /** validator deinit */ void val_deinit(struct module_env* env, int id); /** validator operate on a query */ void val_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** * inform validator super. * * @param qstate: query state that finished. * @param id: module id. * @param super: the qstate to inform. */ void val_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** validator cleanup query state */ void val_clear(struct module_qstate* qstate, int id); /** * Debug helper routine that assists worker in determining memory in * use. * @param env: module environment * @param id: module id. * @return memory in use in bytes. */ size_t val_get_mem(struct module_env* env, int id); #endif /* VALIDATOR_VALIDATOR_H */ unbound-1.13.1/validator/val_anchor.h0000644000175000017500000001756214010434640017164 0ustar wouterwouter/* * validator/val_anchor.h - validator trust anchor storage. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains storage for the trust anchors for the validator. */ #ifndef VALIDATOR_VAL_ANCHOR_H #define VALIDATOR_VAL_ANCHOR_H #include "util/rbtree.h" #include "util/locks.h" struct trust_anchor; struct config_file; struct ub_packed_rrset_key; struct autr_point_data; struct autr_global_data; struct sldns_buffer; /** * Trust anchor store. * The tree must be locked, while no other locks (from trustanchors) are held. * And then an anchor searched for. Which can be locked or deleted. Then * the tree can be unlocked again. This means you have to release the lock * on a trust anchor and look it up again to delete it. */ struct val_anchors { /** lock on trees */ lock_basic_type lock; /** * Anchors are store in this tree. Sort order is chosen, so that * dnames are in nsec-like order. A lookup on class, name will return * an exact match of the closest match, with the ancestor needed. * contents of type trust_anchor. */ rbtree_type* tree; /** Autotrust global data, anchors sorted by next probe time */ struct autr_global_data* autr; }; /** * Trust anchor key */ struct ta_key { /** next in list */ struct ta_key* next; /** rdata, in wireformat of the key RR. starts with rdlength. */ uint8_t* data; /** length of the rdata (including rdlength). */ size_t len; /** DNS type (host format) of the key, DS or DNSKEY */ uint16_t type; }; /** * A trust anchor in the trust anchor store. * Unique by name, class. */ struct trust_anchor { /** rbtree node, key is this structure */ rbnode_type node; /** lock on the entire anchor and its keys; for autotrust changes */ lock_basic_type lock; /** name of this trust anchor */ uint8_t* name; /** length of name */ size_t namelen; /** number of labels in name of rrset */ int namelabs; /** the ancestor in the trustanchor tree */ struct trust_anchor* parent; /** * List of DS or DNSKEY rrs that form the trust anchor. */ struct ta_key* keylist; /** Autotrust anchor point data, or NULL */ struct autr_point_data* autr; /** number of DSs in the keylist */ size_t numDS; /** number of DNSKEYs in the keylist */ size_t numDNSKEY; /** the DS RRset */ struct ub_packed_rrset_key* ds_rrset; /** The DNSKEY RRset */ struct ub_packed_rrset_key* dnskey_rrset; /** class of the trust anchor */ uint16_t dclass; }; /** * Create trust anchor storage * @return new storage or NULL on error. */ struct val_anchors* anchors_create(void); /** * Delete trust anchor storage. * @param anchors: to delete. */ void anchors_delete(struct val_anchors* anchors); /** * Process trust anchor config. * @param anchors: struct anchor storage * @param cfg: config options. * @return 0 on error. */ int anchors_apply_cfg(struct val_anchors* anchors, struct config_file* cfg); /** * Recalculate parent pointers. The caller must hold the lock on the * anchors structure (say after removing an item from the rbtree). * Caller must not hold any locks on trust anchors. * After the call is complete the parent pointers are updated and an item * just removed is no longer referenced in parent pointers. * @param anchors: the structure to update. */ void anchors_init_parents_locked(struct val_anchors* anchors); /** * Given a qname/qclass combination, find the trust anchor closest above it. * Or return NULL if none exists. * * @param anchors: struct anchor storage * @param qname: query name, uncompressed wireformat. * @param qname_len: length of qname. * @param qclass: class to query for. * @return the trust anchor or NULL if none is found. The anchor is locked. */ struct trust_anchor* anchors_lookup(struct val_anchors* anchors, uint8_t* qname, size_t qname_len, uint16_t qclass); /** * Find a trust anchor. Exact matching. * @param anchors: anchor storage. * @param name: name of trust anchor (wireformat) * @param namelabs: labels in name * @param namelen: length of name * @param dclass: class of trust anchor * @return NULL if not found. The anchor is locked. */ struct trust_anchor* anchor_find(struct val_anchors* anchors, uint8_t* name, int namelabs, size_t namelen, uint16_t dclass); /** * Store one string as trust anchor RR. * @param anchors: anchor storage. * @param buffer: parsing buffer, to generate the RR wireformat in. * @param str: string. * @return NULL on error. */ struct trust_anchor* anchor_store_str(struct val_anchors* anchors, struct sldns_buffer* buffer, const char* str); /** * Get memory in use by the trust anchor storage * @param anchors: anchor storage. * @return memory in use in bytes. */ size_t anchors_get_mem(struct val_anchors* anchors); /** compare two trust anchors */ int anchor_cmp(const void* k1, const void* k2); /** * Add insecure point trust anchor. For external use (locks and init_parents) * @param anchors: anchor storage. * @param c: class. * @param nm: name of insecure trust point. * @return false on alloc failure. */ int anchors_add_insecure(struct val_anchors* anchors, uint16_t c, uint8_t* nm); /** * Delete insecure point trust anchor. Does not remove if no such point. * For external use (locks and init_parents) * @param anchors: anchor storage. * @param c: class. * @param nm: name of insecure trust point. */ void anchors_delete_insecure(struct val_anchors* anchors, uint16_t c, uint8_t* nm); /** * Get a list of keytags for the trust anchor. Zero tags for insecure points. * @param ta: trust anchor (locked by caller). * @param list: array of uint16_t. * @param num: length of array. * @return number of keytags filled into array. If total number of keytags is * bigger than the array, it is truncated at num. On errors, less keytags * are filled in. The array is sorted. */ size_t anchor_list_keytags(struct trust_anchor* ta, uint16_t* list, size_t num); /** * Check if there is a trust anchor for given zone with this keytag. * * @param anchors: anchor storage * @param name: name of trust anchor (wireformat) * @param namelabs: labels in name * @param namelen: length of name * @param dclass: class of trust anchor * @param keytag: keytag * @return 1 if there is a trust anchor in the trustachor store for this zone * and keytag, else 0. */ int anchor_has_keytag(struct val_anchors* anchors, uint8_t* name, int namelabs, size_t namelen, uint16_t dclass, uint16_t keytag); #endif /* VALIDATOR_VAL_ANCHOR_H */ unbound-1.13.1/validator/val_utils.c0000644000175000017500000011051014010434640017030 0ustar wouterwouter/* * validator/val_utils.c - validator utility functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. */ #include "config.h" #include "validator/val_utils.h" #include "validator/validator.h" #include "validator/val_kentry.h" #include "validator/val_sigcrypt.h" #include "validator/val_anchor.h" #include "validator/val_nsec.h" #include "validator/val_neg.h" #include "services/cache/rrset.h" #include "services/cache/dns.h" #include "util/data/msgreply.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "util/net_help.h" #include "util/module.h" #include "util/regional.h" #include "util/config_file.h" #include "sldns/wire2str.h" #include "sldns/parseutil.h" enum val_classification val_classify_response(uint16_t query_flags, struct query_info* origqinf, struct query_info* qinf, struct reply_info* rep, size_t skip) { int rcode = (int)FLAGS_GET_RCODE(rep->flags); size_t i; /* Normal Name Error's are easy to detect -- but don't mistake a CNAME * chain ending in NXDOMAIN. */ if(rcode == LDNS_RCODE_NXDOMAIN && rep->an_numrrsets == 0) return VAL_CLASS_NAMEERROR; /* check for referral: nonRD query and it looks like a nodata */ if(!(query_flags&BIT_RD) && rep->an_numrrsets == 0 && rcode == LDNS_RCODE_NOERROR) { /* SOA record in auth indicates it is NODATA instead. * All validation requiring NODATA messages have SOA in * authority section. */ /* uses fact that answer section is empty */ int saw_ns = 0; for(i=0; ins_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_SOA) return VAL_CLASS_NODATA; if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_DS) return VAL_CLASS_REFERRAL; if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS) saw_ns = 1; } return saw_ns?VAL_CLASS_REFERRAL:VAL_CLASS_NODATA; } /* root referral where NS set is in the answer section */ if(!(query_flags&BIT_RD) && rep->ns_numrrsets == 0 && rep->an_numrrsets == 1 && rcode == LDNS_RCODE_NOERROR && ntohs(rep->rrsets[0]->rk.type) == LDNS_RR_TYPE_NS && query_dname_compare(rep->rrsets[0]->rk.dname, origqinf->qname) != 0) return VAL_CLASS_REFERRAL; /* dump bad messages */ if(rcode != LDNS_RCODE_NOERROR && rcode != LDNS_RCODE_NXDOMAIN) return VAL_CLASS_UNKNOWN; /* next check if the skip into the answer section shows no answer */ if(skip>0 && rep->an_numrrsets <= skip) return VAL_CLASS_CNAMENOANSWER; /* Next is NODATA */ if(rcode == LDNS_RCODE_NOERROR && rep->an_numrrsets == 0) return VAL_CLASS_NODATA; /* We distinguish between CNAME response and other positive/negative * responses because CNAME answers require extra processing. */ /* We distinguish between ANY and CNAME or POSITIVE because * ANY responses are validated differently. */ if(rcode == LDNS_RCODE_NOERROR && qinf->qtype == LDNS_RR_TYPE_ANY) return VAL_CLASS_ANY; /* Note that DNAMEs will be ignored here, unless qtype=DNAME. Unless * qtype=CNAME, this will yield a CNAME response. */ for(i=skip; ian_numrrsets; i++) { if(rcode == LDNS_RCODE_NOERROR && ntohs(rep->rrsets[i]->rk.type) == qinf->qtype) return VAL_CLASS_POSITIVE; if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_CNAME) return VAL_CLASS_CNAME; } log_dns_msg("validator: error. failed to classify response message: ", qinf, rep); return VAL_CLASS_UNKNOWN; } /** Get signer name from RRSIG */ static void rrsig_get_signer(uint8_t* data, size_t len, uint8_t** sname, size_t* slen) { /* RRSIG rdata is not allowed to be compressed, it is stored * uncompressed in memory as well, so return a ptr to the name */ if(len < 21) { /* too short RRSig: * short, byte, byte, long, long, long, short, "." is * 2 1 1 4 4 4 2 1 = 19 * and a skip of 18 bytes to the name. * +2 for the rdatalen is 21 bytes len for root label */ *sname = NULL; *slen = 0; return; } data += 20; /* skip the fixed size bits */ len -= 20; *slen = dname_valid(data, len); if(!*slen) { /* bad dname in this rrsig. */ *sname = NULL; return; } *sname = data; } void val_find_rrset_signer(struct ub_packed_rrset_key* rrset, uint8_t** sname, size_t* slen) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; /* return signer for first signature, or NULL */ if(d->rrsig_count == 0) { *sname = NULL; *slen = 0; return; } /* get rrsig signer name out of the signature */ rrsig_get_signer(d->rr_data[d->count], d->rr_len[d->count], sname, slen); } /** * Find best signer name in this set of rrsigs. * @param rrset: which rrsigs to look through. * @param qinf: the query name that needs validation. * @param signer_name: the best signer_name. Updated if a better one is found. * @param signer_len: length of signer name. * @param matchcount: count of current best name (starts at 0 for no match). * Updated if match is improved. */ static void val_find_best_signer(struct ub_packed_rrset_key* rrset, struct query_info* qinf, uint8_t** signer_name, size_t* signer_len, int* matchcount) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; uint8_t* sign; size_t i; int m; for(i=d->count; icount+d->rrsig_count; i++) { sign = d->rr_data[i]+2+18; /* look at signatures that are valid (long enough), * and have a signer name that is a superdomain of qname, * and then check the number of labels in the shared topdomain * improve the match if possible */ if(d->rr_len[i] > 2+19 && /* rdata, sig + root label*/ dname_subdomain_c(qinf->qname, sign)) { (void)dname_lab_cmp(qinf->qname, dname_count_labels(qinf->qname), sign, dname_count_labels(sign), &m); if(m > *matchcount) { *matchcount = m; *signer_name = sign; (void)dname_count_size_labels(*signer_name, signer_len); } } } } void val_find_signer(enum val_classification subtype, struct query_info* qinf, struct reply_info* rep, size_t skip, uint8_t** signer_name, size_t* signer_len) { size_t i; if(subtype == VAL_CLASS_POSITIVE) { /* check for the answer rrset */ for(i=skip; ian_numrrsets; i++) { if(query_dname_compare(qinf->qname, rep->rrsets[i]->rk.dname) == 0) { val_find_rrset_signer(rep->rrsets[i], signer_name, signer_len); return; } } *signer_name = NULL; *signer_len = 0; } else if(subtype == VAL_CLASS_CNAME) { /* check for the first signed cname/dname rrset */ for(i=skip; ian_numrrsets; i++) { val_find_rrset_signer(rep->rrsets[i], signer_name, signer_len); if(*signer_name) return; if(ntohs(rep->rrsets[i]->rk.type) != LDNS_RR_TYPE_DNAME) break; /* only check CNAME after a DNAME */ } *signer_name = NULL; *signer_len = 0; } else if(subtype == VAL_CLASS_NAMEERROR || subtype == VAL_CLASS_NODATA) { /*Check to see if the AUTH section NSEC record(s) have rrsigs*/ for(i=rep->an_numrrsets; i< rep->an_numrrsets+rep->ns_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC || ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC3) { val_find_rrset_signer(rep->rrsets[i], signer_name, signer_len); return; } } } else if(subtype == VAL_CLASS_CNAMENOANSWER) { /* find closest superdomain signer name in authority section * NSEC and NSEC3s */ int matchcount = 0; *signer_name = NULL; *signer_len = 0; for(i=rep->an_numrrsets; ian_numrrsets+rep-> ns_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC || ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC3) { val_find_best_signer(rep->rrsets[i], qinf, signer_name, signer_len, &matchcount); } } } else if(subtype == VAL_CLASS_ANY) { /* check for one of the answer rrset that has signatures, * or potentially a DNAME is in use with a different qname */ for(i=skip; ian_numrrsets; i++) { if(query_dname_compare(qinf->qname, rep->rrsets[i]->rk.dname) == 0) { val_find_rrset_signer(rep->rrsets[i], signer_name, signer_len); if(*signer_name) return; } } /* no answer RRSIGs with qname, try a DNAME */ if(skip < rep->an_numrrsets && ntohs(rep->rrsets[skip]->rk.type) == LDNS_RR_TYPE_DNAME) { val_find_rrset_signer(rep->rrsets[skip], signer_name, signer_len); if(*signer_name) return; } *signer_name = NULL; *signer_len = 0; } else if(subtype == VAL_CLASS_REFERRAL) { /* find keys for the item at skip */ if(skip < rep->rrset_count) { val_find_rrset_signer(rep->rrsets[skip], signer_name, signer_len); return; } *signer_name = NULL; *signer_len = 0; } else { verbose(VERB_QUERY, "find_signer: could not find signer name" " for unknown type response"); *signer_name = NULL; *signer_len = 0; } } /** return number of rrs in an rrset */ static size_t rrset_get_count(struct ub_packed_rrset_key* rrset) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; if(!d) return 0; return d->count; } /** return TTL of rrset */ static uint32_t rrset_get_ttl(struct ub_packed_rrset_key* rrset) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; if(!d) return 0; return d->ttl; } enum sec_status val_verify_rrset(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* keys, uint8_t* sigalg, char** reason, sldns_pkt_section section, struct module_qstate* qstate) { enum sec_status sec; struct packed_rrset_data* d = (struct packed_rrset_data*)rrset-> entry.data; if(d->security == sec_status_secure) { /* re-verify all other statuses, because keyset may change*/ log_nametypeclass(VERB_ALGO, "verify rrset cached", rrset->rk.dname, ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class)); return d->security; } /* check in the cache if verification has already been done */ rrset_check_sec_status(env->rrset_cache, rrset, *env->now); if(d->security == sec_status_secure) { log_nametypeclass(VERB_ALGO, "verify rrset from cache", rrset->rk.dname, ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class)); return d->security; } log_nametypeclass(VERB_ALGO, "verify rrset", rrset->rk.dname, ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class)); sec = dnskeyset_verify_rrset(env, ve, rrset, keys, sigalg, reason, section, qstate); verbose(VERB_ALGO, "verify result: %s", sec_status_to_string(sec)); regional_free_all(env->scratch); /* update rrset security status * only improves security status * and bogus is set only once, even if we rechecked the status */ if(sec > d->security) { d->security = sec; if(sec == sec_status_secure) d->trust = rrset_trust_validated; else if(sec == sec_status_bogus) { size_t i; /* update ttl for rrset to fixed value. */ d->ttl = ve->bogus_ttl; for(i=0; icount+d->rrsig_count; i++) d->rr_ttl[i] = ve->bogus_ttl; /* leave RR specific TTL: not used for determine * if RRset timed out and clients see proper value. */ lock_basic_lock(&ve->bogus_lock); ve->num_rrset_bogus++; lock_basic_unlock(&ve->bogus_lock); } /* if status updated - store in cache for reuse */ rrset_update_sec_status(env->rrset_cache, rrset, *env->now); } return sec; } enum sec_status val_verify_rrset_entry(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* rrset, struct key_entry_key* kkey, char** reason, sldns_pkt_section section, struct module_qstate* qstate) { /* temporary dnskey rrset-key */ struct ub_packed_rrset_key dnskey; struct key_entry_data* kd = (struct key_entry_data*)kkey->entry.data; enum sec_status sec; dnskey.rk.type = htons(kd->rrset_type); dnskey.rk.rrset_class = htons(kkey->key_class); dnskey.rk.flags = 0; dnskey.rk.dname = kkey->name; dnskey.rk.dname_len = kkey->namelen; dnskey.entry.key = &dnskey; dnskey.entry.data = kd->rrset_data; sec = val_verify_rrset(env, ve, rrset, &dnskey, kd->algo, reason, section, qstate); return sec; } /** verify that a DS RR hashes to a key and that key signs the set */ static enum sec_status verify_dnskeys_with_ds_rr(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset, struct ub_packed_rrset_key* ds_rrset, size_t ds_idx, char** reason, struct module_qstate* qstate) { enum sec_status sec = sec_status_bogus; size_t i, num, numchecked = 0, numhashok = 0; num = rrset_get_count(dnskey_rrset); for(i=0; i digest_algo) digest_algo = d; } return digest_algo; } enum sec_status val_verify_DNSKEY_with_DS(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset, struct ub_packed_rrset_key* ds_rrset, uint8_t* sigalg, char** reason, struct module_qstate* qstate) { /* as long as this is false, we can consider this DS rrset to be * equivalent to no DS rrset. */ int has_useful_ds = 0, digest_algo, alg; struct algo_needs needs; size_t i, num; enum sec_status sec; if(dnskey_rrset->rk.dname_len != ds_rrset->rk.dname_len || query_dname_compare(dnskey_rrset->rk.dname, ds_rrset->rk.dname) != 0) { verbose(VERB_QUERY, "DNSKEY RRset did not match DS RRset " "by name"); *reason = "DNSKEY RRset did not match DS RRset by name"; return sec_status_bogus; } if(sigalg) { /* harden against algo downgrade is enabled */ digest_algo = val_favorite_ds_algo(ds_rrset); algo_needs_init_ds(&needs, ds_rrset, digest_algo, sigalg); } else { /* accept any key algo, any digest algo */ digest_algo = -1; } num = rrset_get_count(ds_rrset); for(i=0; irk.dname, ds_rrset->rk.dname_len, ntohs(ds_rrset->rk.rrset_class), dnskey_rrset, downprot?sigalg:NULL, *env->now); } else if(sec == sec_status_insecure) { return key_entry_create_null(region, ds_rrset->rk.dname, ds_rrset->rk.dname_len, ntohs(ds_rrset->rk.rrset_class), rrset_get_ttl(ds_rrset), *env->now); } return key_entry_create_bad(region, ds_rrset->rk.dname, ds_rrset->rk.dname_len, ntohs(ds_rrset->rk.rrset_class), BOGUS_KEY_TTL, *env->now); } enum sec_status val_verify_DNSKEY_with_TA(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset, struct ub_packed_rrset_key* ta_ds, struct ub_packed_rrset_key* ta_dnskey, uint8_t* sigalg, char** reason, struct module_qstate* qstate) { /* as long as this is false, we can consider this anchor to be * equivalent to no anchor. */ int has_useful_ta = 0, digest_algo = 0, alg; struct algo_needs needs; size_t i, num; enum sec_status sec; if(ta_ds && (dnskey_rrset->rk.dname_len != ta_ds->rk.dname_len || query_dname_compare(dnskey_rrset->rk.dname, ta_ds->rk.dname) != 0)) { verbose(VERB_QUERY, "DNSKEY RRset did not match DS RRset " "by name"); *reason = "DNSKEY RRset did not match DS RRset by name"; return sec_status_bogus; } if(ta_dnskey && (dnskey_rrset->rk.dname_len != ta_dnskey->rk.dname_len || query_dname_compare(dnskey_rrset->rk.dname, ta_dnskey->rk.dname) != 0)) { verbose(VERB_QUERY, "DNSKEY RRset did not match anchor RRset " "by name"); *reason = "DNSKEY RRset did not match anchor RRset by name"; return sec_status_bogus; } if(ta_ds) digest_algo = val_favorite_ds_algo(ta_ds); if(sigalg) { if(ta_ds) algo_needs_init_ds(&needs, ta_ds, digest_algo, sigalg); else memset(&needs, 0, sizeof(needs)); if(ta_dnskey) algo_needs_init_dnskey_add(&needs, ta_dnskey, sigalg); } if(ta_ds) { num = rrset_get_count(ta_ds); for(i=0; irk.dname, dnskey_rrset->rk.dname_len, ntohs(dnskey_rrset->rk.rrset_class), dnskey_rrset, downprot?sigalg:NULL, *env->now); } else if(sec == sec_status_insecure) { return key_entry_create_null(region, dnskey_rrset->rk.dname, dnskey_rrset->rk.dname_len, ntohs(dnskey_rrset->rk.rrset_class), rrset_get_ttl(dnskey_rrset), *env->now); } return key_entry_create_bad(region, dnskey_rrset->rk.dname, dnskey_rrset->rk.dname_len, ntohs(dnskey_rrset->rk.rrset_class), BOGUS_KEY_TTL, *env->now); } int val_dsset_isusable(struct ub_packed_rrset_key* ds_rrset) { size_t i; for(i=0; iname); else snprintf(herr, sizeof(herr), "%d", (int)ds_get_digest_algo(ds_rrset, i)); lt = sldns_lookup_by_id(sldns_algorithms, (int)ds_get_key_algo(ds_rrset, i)); if(lt) snprintf(aerr, sizeof(aerr), "%s", lt->name); else snprintf(aerr, sizeof(aerr), "%d", (int)ds_get_key_algo(ds_rrset, i)); verbose(VERB_ALGO, "DS unsupported, hash %s %s, " "key algorithm %s %s", herr, (ds_digest_algo_is_supported(ds_rrset, 0)? "(supported)":"(unsupported)"), aerr, (ds_key_algo_is_supported(ds_rrset, 0)? "(supported)":"(unsupported)")); } return 0; } /** get label count for a signature */ static uint8_t rrsig_get_labcount(struct packed_rrset_data* d, size_t sig) { if(d->rr_len[sig] < 2+4) return 0; /* bad sig length */ return d->rr_data[sig][2+3]; } int val_rrset_wildcard(struct ub_packed_rrset_key* rrset, uint8_t** wc, size_t* wc_len) { struct packed_rrset_data* d = (struct packed_rrset_data*)rrset-> entry.data; uint8_t labcount; int labdiff; uint8_t* wn; size_t i, wl; if(d->rrsig_count == 0) { return 1; } labcount = rrsig_get_labcount(d, d->count + 0); /* check rest of signatures identical */ for(i=1; irrsig_count; i++) { if(labcount != rrsig_get_labcount(d, d->count + i)) { return 0; } } /* OK the rrsigs check out */ /* if the RRSIG label count is shorter than the number of actual * labels, then this rrset was synthesized from a wildcard. * Note that the RRSIG label count doesn't count the root label. */ wn = rrset->rk.dname; wl = rrset->rk.dname_len; /* skip a leading wildcard label in the dname (RFC4035 2.2) */ if(dname_is_wild(wn)) { wn += 2; wl -= 2; } labdiff = (dname_count_labels(wn) - 1) - (int)labcount; if(labdiff > 0) { *wc = wn; dname_remove_labels(wc, &wl, labdiff); *wc_len = wl; return 1; } return 1; } int val_chase_cname(struct query_info* qchase, struct reply_info* rep, size_t* cname_skip) { size_t i; /* skip any DNAMEs, go to the CNAME for next part */ for(i = *cname_skip; i < rep->an_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_CNAME && query_dname_compare(qchase->qname, rep->rrsets[i]-> rk.dname) == 0) { qchase->qname = NULL; get_cname_target(rep->rrsets[i], &qchase->qname, &qchase->qname_len); if(!qchase->qname) return 0; /* bad CNAME rdata */ (*cname_skip) = i+1; return 1; } } return 0; /* CNAME classified but no matching CNAME ?! */ } /** see if rrset has signer name as one of the rrsig signers */ static int rrset_has_signer(struct ub_packed_rrset_key* rrset, uint8_t* name, size_t len) { struct packed_rrset_data* d = (struct packed_rrset_data*)rrset-> entry.data; size_t i; for(i = d->count; i< d->count+d->rrsig_count; i++) { if(d->rr_len[i] > 2+18+len) { /* at least rdatalen + signature + signame (+1 sig)*/ if(!dname_valid(d->rr_data[i]+2+18, d->rr_len[i]-2-18)) continue; if(query_dname_compare(name, d->rr_data[i]+2+18) == 0) { return 1; } } } return 0; } void val_fill_reply(struct reply_info* chase, struct reply_info* orig, size_t skip, uint8_t* name, size_t len, uint8_t* signer) { size_t i; int seen_dname = 0; chase->rrset_count = 0; chase->an_numrrsets = 0; chase->ns_numrrsets = 0; chase->ar_numrrsets = 0; /* ANSWER section */ for(i=skip; ian_numrrsets; i++) { if(!signer) { if(query_dname_compare(name, orig->rrsets[i]->rk.dname) == 0) chase->rrsets[chase->an_numrrsets++] = orig->rrsets[i]; } else if(seen_dname && ntohs(orig->rrsets[i]->rk.type) == LDNS_RR_TYPE_CNAME) { chase->rrsets[chase->an_numrrsets++] = orig->rrsets[i]; seen_dname = 0; } else if(rrset_has_signer(orig->rrsets[i], name, len)) { chase->rrsets[chase->an_numrrsets++] = orig->rrsets[i]; if(ntohs(orig->rrsets[i]->rk.type) == LDNS_RR_TYPE_DNAME) { seen_dname = 1; } } } /* AUTHORITY section */ for(i = (skip > orig->an_numrrsets)?skip:orig->an_numrrsets; ian_numrrsets+orig->ns_numrrsets; i++) { if(!signer) { if(query_dname_compare(name, orig->rrsets[i]->rk.dname) == 0) chase->rrsets[chase->an_numrrsets+ chase->ns_numrrsets++] = orig->rrsets[i]; } else if(rrset_has_signer(orig->rrsets[i], name, len)) { chase->rrsets[chase->an_numrrsets+ chase->ns_numrrsets++] = orig->rrsets[i]; } } /* ADDITIONAL section */ for(i= (skip>orig->an_numrrsets+orig->ns_numrrsets)? skip:orig->an_numrrsets+orig->ns_numrrsets; irrset_count; i++) { if(!signer) { if(query_dname_compare(name, orig->rrsets[i]->rk.dname) == 0) chase->rrsets[chase->an_numrrsets +orig->ns_numrrsets+chase->ar_numrrsets++] = orig->rrsets[i]; } else if(rrset_has_signer(orig->rrsets[i], name, len)) { chase->rrsets[chase->an_numrrsets+orig->ns_numrrsets+ chase->ar_numrrsets++] = orig->rrsets[i]; } } chase->rrset_count = chase->an_numrrsets + chase->ns_numrrsets + chase->ar_numrrsets; } void val_reply_remove_auth(struct reply_info* rep, size_t index) { log_assert(index < rep->rrset_count); log_assert(index >= rep->an_numrrsets); log_assert(index < rep->an_numrrsets+rep->ns_numrrsets); memmove(rep->rrsets+index, rep->rrsets+index+1, sizeof(struct ub_packed_rrset_key*)* (rep->rrset_count - index - 1)); rep->ns_numrrsets--; rep->rrset_count--; } void val_check_nonsecure(struct module_env* env, struct reply_info* rep) { size_t i; /* authority */ for(i=rep->an_numrrsets; ian_numrrsets+rep->ns_numrrsets; i++) { if(((struct packed_rrset_data*)rep->rrsets[i]->entry.data) ->security != sec_status_secure) { /* because we want to return the authentic original * message when presented with CD-flagged queries, * we need to preserve AUTHORITY section data. * However, this rrset is not signed or signed * with the wrong keys. Validation has tried to * verify this rrset with the keysets of import. * But this rrset did not verify. * Therefore the message is bogus. */ /* check if authority has an NS record * which is bad, and there is an answer section with * data. In that case, delete NS and additional to * be lenient and make a minimal response */ if(rep->an_numrrsets != 0 && ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS) { verbose(VERB_ALGO, "truncate to minimal"); rep->ar_numrrsets = 0; rep->rrset_count = rep->an_numrrsets + rep->ns_numrrsets; /* remove this unneeded authority rrset */ memmove(rep->rrsets+i, rep->rrsets+i+1, sizeof(struct ub_packed_rrset_key*)* (rep->rrset_count - i - 1)); rep->ns_numrrsets--; rep->rrset_count--; i--; return; } log_nametypeclass(VERB_QUERY, "message is bogus, " "non secure rrset", rep->rrsets[i]->rk.dname, ntohs(rep->rrsets[i]->rk.type), ntohs(rep->rrsets[i]->rk.rrset_class)); rep->security = sec_status_bogus; return; } } /* additional */ if(!env->cfg->val_clean_additional) return; for(i=rep->an_numrrsets+rep->ns_numrrsets; irrset_count; i++) { if(((struct packed_rrset_data*)rep->rrsets[i]->entry.data) ->security != sec_status_secure) { /* This does not cause message invalidation. It was * simply unsigned data in the additional. The * RRSIG must have been truncated off the message. * * However, we do not want to return possible bogus * data to clients that rely on this service for * their authentication. */ /* remove this unneeded additional rrset */ memmove(rep->rrsets+i, rep->rrsets+i+1, sizeof(struct ub_packed_rrset_key*)* (rep->rrset_count - i - 1)); rep->ar_numrrsets--; rep->rrset_count--; i--; } } } /** check no anchor and unlock */ static int check_no_anchor(struct val_anchors* anchors, uint8_t* nm, size_t l, uint16_t c) { struct trust_anchor* ta; if((ta=anchors_lookup(anchors, nm, l, c))) { lock_basic_unlock(&ta->lock); } return !ta; } void val_mark_indeterminate(struct reply_info* rep, struct val_anchors* anchors, struct rrset_cache* r, struct module_env* env) { size_t i; struct packed_rrset_data* d; for(i=0; irrset_count; i++) { d = (struct packed_rrset_data*)rep->rrsets[i]->entry.data; if(d->security == sec_status_unchecked && check_no_anchor(anchors, rep->rrsets[i]->rk.dname, rep->rrsets[i]->rk.dname_len, ntohs(rep->rrsets[i]->rk.rrset_class))) { /* mark as indeterminate */ d->security = sec_status_indeterminate; rrset_update_sec_status(r, rep->rrsets[i], *env->now); } } } void val_mark_insecure(struct reply_info* rep, uint8_t* kname, struct rrset_cache* r, struct module_env* env) { size_t i; struct packed_rrset_data* d; for(i=0; irrset_count; i++) { d = (struct packed_rrset_data*)rep->rrsets[i]->entry.data; if(d->security == sec_status_unchecked && dname_subdomain_c(rep->rrsets[i]->rk.dname, kname)) { /* mark as insecure */ d->security = sec_status_insecure; rrset_update_sec_status(r, rep->rrsets[i], *env->now); } } } size_t val_next_unchecked(struct reply_info* rep, size_t skip) { size_t i; struct packed_rrset_data* d; for(i=skip+1; irrset_count; i++) { d = (struct packed_rrset_data*)rep->rrsets[i]->entry.data; if(d->security == sec_status_unchecked) { return i; } } return rep->rrset_count; } const char* val_classification_to_string(enum val_classification subtype) { switch(subtype) { case VAL_CLASS_UNTYPED: return "untyped"; case VAL_CLASS_UNKNOWN: return "unknown"; case VAL_CLASS_POSITIVE: return "positive"; case VAL_CLASS_CNAME: return "cname"; case VAL_CLASS_NODATA: return "nodata"; case VAL_CLASS_NAMEERROR: return "nameerror"; case VAL_CLASS_CNAMENOANSWER: return "cnamenoanswer"; case VAL_CLASS_REFERRAL: return "referral"; case VAL_CLASS_ANY: return "qtype_any"; default: return "bad_val_classification"; } } /** log a sock_list entry */ static void sock_list_logentry(enum verbosity_value v, const char* s, struct sock_list* p) { if(p->len) log_addr(v, s, &p->addr, p->len); else verbose(v, "%s cache", s); } void val_blacklist(struct sock_list** blacklist, struct regional* region, struct sock_list* origin, int cross) { /* debug printout */ if(verbosity >= VERB_ALGO) { struct sock_list* p; for(p=*blacklist; p; p=p->next) sock_list_logentry(VERB_ALGO, "blacklist", p); if(!origin) verbose(VERB_ALGO, "blacklist add: cache"); for(p=origin; p; p=p->next) sock_list_logentry(VERB_ALGO, "blacklist add", p); } /* blacklist the IPs or the cache */ if(!origin) { /* only add if nothing there. anything else also stops cache*/ if(!*blacklist) sock_list_insert(blacklist, NULL, 0, region); } else if(!cross) sock_list_prepend(blacklist, origin); else sock_list_merge(blacklist, region, origin); } int val_has_signed_nsecs(struct reply_info* rep, char** reason) { size_t i, num_nsec = 0, num_nsec3 = 0; struct packed_rrset_data* d; for(i=rep->an_numrrsets; ian_numrrsets+rep->ns_numrrsets; i++) { if(rep->rrsets[i]->rk.type == htons(LDNS_RR_TYPE_NSEC)) num_nsec++; else if(rep->rrsets[i]->rk.type == htons(LDNS_RR_TYPE_NSEC3)) num_nsec3++; else continue; d = (struct packed_rrset_data*)rep->rrsets[i]->entry.data; if(d && d->rrsig_count != 0) { return 1; } } if(num_nsec == 0 && num_nsec3 == 0) *reason = "no DNSSEC records"; else if(num_nsec != 0) *reason = "no signatures over NSECs"; else *reason = "no signatures over NSEC3s"; return 0; } struct dns_msg* val_find_DS(struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t c, struct regional* region, uint8_t* topname) { struct dns_msg* msg; struct query_info qinfo; struct ub_packed_rrset_key *rrset = rrset_cache_lookup( env->rrset_cache, nm, nmlen, LDNS_RR_TYPE_DS, c, 0, *env->now, 0); if(rrset) { /* DS rrset exists. Return it to the validator immediately*/ struct ub_packed_rrset_key* copy = packed_rrset_copy_region( rrset, region, *env->now); lock_rw_unlock(&rrset->entry.lock); if(!copy) return NULL; msg = dns_msg_create(nm, nmlen, LDNS_RR_TYPE_DS, c, region, 1); if(!msg) return NULL; msg->rep->rrsets[0] = copy; msg->rep->rrset_count++; msg->rep->an_numrrsets++; return msg; } /* lookup in rrset and negative cache for NSEC/NSEC3 */ qinfo.qname = nm; qinfo.qname_len = nmlen; qinfo.qtype = LDNS_RR_TYPE_DS; qinfo.qclass = c; qinfo.local_alias = NULL; /* do not add SOA to reply message, it is going to be used internal */ msg = val_neg_getmsg(env->neg_cache, &qinfo, region, env->rrset_cache, env->scratch_buffer, *env->now, 0, topname, env->cfg); return msg; } unbound-1.13.1/validator/validator.c0000644000175000017500000030042614010434640017022 0ustar wouterwouter/* * validator/validator.c - secure validator DNS query response module * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that performs validation of DNS queries. * According to RFC 4034. */ #include "config.h" #include #include "validator/validator.h" #include "validator/val_anchor.h" #include "validator/val_kcache.h" #include "validator/val_kentry.h" #include "validator/val_utils.h" #include "validator/val_nsec.h" #include "validator/val_nsec3.h" #include "validator/val_neg.h" #include "validator/val_sigcrypt.h" #include "validator/autotrust.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" #include "util/data/dname.h" #include "util/module.h" #include "util/log.h" #include "util/net_help.h" #include "util/regional.h" #include "util/config_file.h" #include "util/fptr_wlist.h" #include "sldns/rrdef.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" /* forward decl for cache response and normal super inform calls of a DS */ static void process_ds_response(struct module_qstate* qstate, struct val_qstate* vq, int id, int rcode, struct dns_msg* msg, struct query_info* qinfo, struct sock_list* origin); /** fill up nsec3 key iterations config entry */ static int fill_nsec3_iter(struct val_env* ve, char* s, int c) { char* e; int i; free(ve->nsec3_keysize); free(ve->nsec3_maxiter); ve->nsec3_keysize = (size_t*)calloc(sizeof(size_t), (size_t)c); ve->nsec3_maxiter = (size_t*)calloc(sizeof(size_t), (size_t)c); if(!ve->nsec3_keysize || !ve->nsec3_maxiter) { log_err("out of memory"); return 0; } for(i=0; insec3_keysize[i] = (size_t)strtol(s, &e, 10); if(s == e) { log_err("cannot parse: %s", s); return 0; } s = e; ve->nsec3_maxiter[i] = (size_t)strtol(s, &e, 10); if(s == e) { log_err("cannot parse: %s", s); return 0; } s = e; if(i>0 && ve->nsec3_keysize[i-1] >= ve->nsec3_keysize[i]) { log_err("nsec3 key iterations not ascending: %d %d", (int)ve->nsec3_keysize[i-1], (int)ve->nsec3_keysize[i]); return 0; } verbose(VERB_ALGO, "validator nsec3cfg keysz %d mxiter %d", (int)ve->nsec3_keysize[i], (int)ve->nsec3_maxiter[i]); } return 1; } /** apply config settings to validator */ static int val_apply_cfg(struct module_env* env, struct val_env* val_env, struct config_file* cfg) { int c; val_env->bogus_ttl = (uint32_t)cfg->bogus_ttl; if(!env->anchors) env->anchors = anchors_create(); if(!env->anchors) { log_err("out of memory"); return 0; } if (env->key_cache) val_env->kcache = env->key_cache; if(!val_env->kcache) val_env->kcache = key_cache_create(cfg); if(!val_env->kcache) { log_err("out of memory"); return 0; } env->key_cache = val_env->kcache; if(!anchors_apply_cfg(env->anchors, cfg)) { log_err("validator: error in trustanchors config"); return 0; } val_env->date_override = cfg->val_date_override; val_env->skew_min = cfg->val_sig_skew_min; val_env->skew_max = cfg->val_sig_skew_max; c = cfg_count_numbers(cfg->val_nsec3_key_iterations); if(c < 1 || (c&1)) { log_err("validator: unparseable or odd nsec3 key " "iterations: %s", cfg->val_nsec3_key_iterations); return 0; } val_env->nsec3_keyiter_count = c/2; if(!fill_nsec3_iter(val_env, cfg->val_nsec3_key_iterations, c/2)) { log_err("validator: cannot apply nsec3 key iterations"); return 0; } if (env->neg_cache) val_env->neg_cache = env->neg_cache; if(!val_env->neg_cache) val_env->neg_cache = val_neg_create(cfg, val_env->nsec3_maxiter[val_env->nsec3_keyiter_count-1]); if(!val_env->neg_cache) { log_err("out of memory"); return 0; } env->neg_cache = val_env->neg_cache; return 1; } #ifdef USE_ECDSA_EVP_WORKAROUND void ecdsa_evp_workaround_init(void); #endif int val_init(struct module_env* env, int id) { struct val_env* val_env = (struct val_env*)calloc(1, sizeof(struct val_env)); if(!val_env) { log_err("malloc failure"); return 0; } env->modinfo[id] = (void*)val_env; env->need_to_validate = 1; lock_basic_init(&val_env->bogus_lock); lock_protect(&val_env->bogus_lock, &val_env->num_rrset_bogus, sizeof(val_env->num_rrset_bogus)); #ifdef USE_ECDSA_EVP_WORKAROUND ecdsa_evp_workaround_init(); #endif if(!val_apply_cfg(env, val_env, env->cfg)) { log_err("validator: could not apply configuration settings."); return 0; } return 1; } void val_deinit(struct module_env* env, int id) { struct val_env* val_env; if(!env || !env->modinfo[id]) return; val_env = (struct val_env*)env->modinfo[id]; lock_basic_destroy(&val_env->bogus_lock); anchors_delete(env->anchors); env->anchors = NULL; key_cache_delete(val_env->kcache); env->key_cache = NULL; neg_cache_delete(val_env->neg_cache); env->neg_cache = NULL; free(val_env->nsec3_keysize); free(val_env->nsec3_maxiter); free(val_env); env->modinfo[id] = NULL; } /** fill in message structure */ static struct val_qstate* val_new_getmsg(struct module_qstate* qstate, struct val_qstate* vq) { if(!qstate->return_msg || qstate->return_rcode != LDNS_RCODE_NOERROR) { /* create a message to verify */ verbose(VERB_ALGO, "constructing reply for validation"); vq->orig_msg = (struct dns_msg*)regional_alloc(qstate->region, sizeof(struct dns_msg)); if(!vq->orig_msg) return NULL; vq->orig_msg->qinfo = qstate->qinfo; vq->orig_msg->rep = (struct reply_info*)regional_alloc( qstate->region, sizeof(struct reply_info)); if(!vq->orig_msg->rep) return NULL; memset(vq->orig_msg->rep, 0, sizeof(struct reply_info)); vq->orig_msg->rep->flags = (uint16_t)(qstate->return_rcode&0xf) |BIT_QR|BIT_RA|(qstate->query_flags|(BIT_CD|BIT_RD)); vq->orig_msg->rep->qdcount = 1; } else { vq->orig_msg = qstate->return_msg; } vq->qchase = qstate->qinfo; /* chase reply will be an edited (sub)set of the orig msg rrset ptrs */ vq->chase_reply = regional_alloc_init(qstate->region, vq->orig_msg->rep, sizeof(struct reply_info) - sizeof(struct rrset_ref)); if(!vq->chase_reply) return NULL; if(vq->orig_msg->rep->rrset_count > RR_COUNT_MAX) return NULL; /* protect against integer overflow */ vq->chase_reply->rrsets = regional_alloc_init(qstate->region, vq->orig_msg->rep->rrsets, sizeof(struct ub_packed_rrset_key*) * vq->orig_msg->rep->rrset_count); if(!vq->chase_reply->rrsets) return NULL; vq->rrset_skip = 0; return vq; } /** allocate new validator query state */ static struct val_qstate* val_new(struct module_qstate* qstate, int id) { struct val_qstate* vq = (struct val_qstate*)regional_alloc( qstate->region, sizeof(*vq)); log_assert(!qstate->minfo[id]); if(!vq) return NULL; memset(vq, 0, sizeof(*vq)); qstate->minfo[id] = vq; vq->state = VAL_INIT_STATE; return val_new_getmsg(qstate, vq); } /** * Exit validation with an error status * * @param qstate: query state * @param id: validator id. * @return false, for use by caller to return to stop processing. */ static int val_error(struct module_qstate* qstate, int id) { qstate->ext_state[id] = module_error; qstate->return_rcode = LDNS_RCODE_SERVFAIL; return 0; } /** * Check to see if a given response needs to go through the validation * process. Typical reasons for this routine to return false are: CD bit was * on in the original request, or the response is a kind of message that * is unvalidatable (i.e., SERVFAIL, REFUSED, etc.) * * @param qstate: query state. * @param ret_rc: rcode for this message (if noerror - examine ret_msg). * @param ret_msg: return msg, can be NULL; look at rcode instead. * @return true if the response could use validation (although this does not * mean we can actually validate this response). */ static int needs_validation(struct module_qstate* qstate, int ret_rc, struct dns_msg* ret_msg) { int rcode; /* If the CD bit is on in the original request, then you could think * that we don't bother to validate anything. * But this is signalled internally with the valrec flag. * User queries are validated with BIT_CD to make our cache clean * so that bogus messages get retried by the upstream also for * downstream validators that set BIT_CD. * For DNS64 bit_cd signals no dns64 processing, but we want to * provide validation there too */ /* if(qstate->query_flags & BIT_CD) { verbose(VERB_ALGO, "not validating response due to CD bit"); return 0; } */ if(qstate->is_valrec) { verbose(VERB_ALGO, "not validating response, is valrec" "(validation recursion lookup)"); return 0; } if(ret_rc != LDNS_RCODE_NOERROR || !ret_msg) rcode = ret_rc; else rcode = (int)FLAGS_GET_RCODE(ret_msg->rep->flags); if(rcode != LDNS_RCODE_NOERROR && rcode != LDNS_RCODE_NXDOMAIN) { if(verbosity >= VERB_ALGO) { char rc[16]; rc[0]=0; (void)sldns_wire2str_rcode_buf(rcode, rc, sizeof(rc)); verbose(VERB_ALGO, "cannot validate non-answer, rcode %s", rc); } return 0; } /* cannot validate positive RRSIG response. (negatives can) */ if(qstate->qinfo.qtype == LDNS_RR_TYPE_RRSIG && rcode == LDNS_RCODE_NOERROR && ret_msg && ret_msg->rep->an_numrrsets > 0) { verbose(VERB_ALGO, "cannot validate RRSIG, no sigs on sigs."); return 0; } return 1; } /** * Check to see if the response has already been validated. * @param ret_msg: return msg, can be NULL * @return true if the response has already been validated */ static int already_validated(struct dns_msg* ret_msg) { /* validate unchecked, and re-validate bogus messages */ if (ret_msg && ret_msg->rep->security > sec_status_bogus) { verbose(VERB_ALGO, "response has already been validated: %s", sec_status_to_string(ret_msg->rep->security)); return 1; } return 0; } /** * Generate a request for DNS data. * * @param qstate: query state that is the parent. * @param id: module id. * @param name: what name to query for. * @param namelen: length of name. * @param qtype: query type. * @param qclass: query class. * @param flags: additional flags, such as the CD bit (BIT_CD), or 0. * @param newq: If the subquery is newly created, it is returned, * otherwise NULL is returned * @param detached: true if this qstate should not attach to the subquery * @return false on alloc failure. */ static int generate_request(struct module_qstate* qstate, int id, uint8_t* name, size_t namelen, uint16_t qtype, uint16_t qclass, uint16_t flags, struct module_qstate** newq, int detached) { struct val_qstate* vq = (struct val_qstate*)qstate->minfo[id]; struct query_info ask; int valrec; ask.qname = name; ask.qname_len = namelen; ask.qtype = qtype; ask.qclass = qclass; ask.local_alias = NULL; log_query_info(VERB_ALGO, "generate request", &ask); /* enable valrec flag to avoid recursion to the same validation * routine, this lookup is simply a lookup. */ valrec = 1; fptr_ok(fptr_whitelist_modenv_detect_cycle(qstate->env->detect_cycle)); if((*qstate->env->detect_cycle)(qstate, &ask, (uint16_t)(BIT_RD|flags), 0, valrec)) { verbose(VERB_ALGO, "Could not generate request: cycle detected"); return 0; } if(detached) { struct mesh_state* sub = NULL; fptr_ok(fptr_whitelist_modenv_add_sub( qstate->env->add_sub)); if(!(*qstate->env->add_sub)(qstate, &ask, (uint16_t)(BIT_RD|flags), 0, valrec, newq, &sub)){ log_err("Could not generate request: out of memory"); return 0; } } else { fptr_ok(fptr_whitelist_modenv_attach_sub( qstate->env->attach_sub)); if(!(*qstate->env->attach_sub)(qstate, &ask, (uint16_t)(BIT_RD|flags), 0, valrec, newq)){ log_err("Could not generate request: out of memory"); return 0; } } /* newq; validator does not need state created for that * query, and its a 'normal' for iterator as well */ if(*newq) { /* add our blacklist to the query blacklist */ sock_list_merge(&(*newq)->blacklist, (*newq)->region, vq->chain_blacklist); } qstate->ext_state[id] = module_wait_subquery; return 1; } /** * Generate, send and detach key tag signaling query. * * @param qstate: query state. * @param id: module id. * @param ta: trust anchor, locked. * @return false on a processing error. */ static int generate_keytag_query(struct module_qstate* qstate, int id, struct trust_anchor* ta) { /* 3 bytes for "_ta", 5 bytes per tag (4 bytes + "-") */ #define MAX_LABEL_TAGS (LDNS_MAX_LABELLEN-3)/5 size_t i, numtag; uint16_t tags[MAX_LABEL_TAGS]; char tagstr[LDNS_MAX_LABELLEN+1] = "_ta"; /* +1 for NULL byte */ size_t tagstr_left = sizeof(tagstr) - strlen(tagstr); char* tagstr_pos = tagstr + strlen(tagstr); uint8_t dnamebuf[LDNS_MAX_DOMAINLEN+1]; /* +1 for label length byte */ size_t dnamebuf_len = sizeof(dnamebuf); uint8_t* keytagdname; struct module_qstate* newq = NULL; enum module_ext_state ext_state = qstate->ext_state[id]; numtag = anchor_list_keytags(ta, tags, MAX_LABEL_TAGS); if(numtag == 0) return 0; for(i=0; iname, ta->namelen); if(!(keytagdname = (uint8_t*)regional_alloc_init(qstate->region, dnamebuf, dnamebuf_len))) { log_err("could not generate key tag query: out of memory"); return 0; } log_nametypeclass(VERB_OPS, "generate keytag query", keytagdname, LDNS_RR_TYPE_NULL, ta->dclass); if(!generate_request(qstate, id, keytagdname, dnamebuf_len, LDNS_RR_TYPE_NULL, ta->dclass, 0, &newq, 1)) { verbose(VERB_ALGO, "failed to generate key tag signaling request"); return 0; } /* Not interrested in subquery response. Restore the ext_state, * that might be changed by generate_request() */ qstate->ext_state[id] = ext_state; return 1; } /** * Get keytag as uint16_t from string * * @param start: start of string containing keytag * @param keytag: pointer where to store the extracted keytag * @return: 1 if keytag was extracted, else 0. */ static int sentinel_get_keytag(char* start, uint16_t* keytag) { char* keytag_str; char* e = NULL; keytag_str = calloc(1, SENTINEL_KEYTAG_LEN + 1 /* null byte */); if(!keytag_str) return 0; memmove(keytag_str, start, SENTINEL_KEYTAG_LEN); keytag_str[SENTINEL_KEYTAG_LEN] = '\0'; *keytag = (uint16_t)strtol(keytag_str, &e, 10); if(!e || *e != '\0') { free(keytag_str); return 0; } free(keytag_str); return 1; } /** * Prime trust anchor for use. * Generate and dispatch a priming query for the given trust anchor. * The trust anchor can be DNSKEY or DS and does not have to be signed. * * @param qstate: query state. * @param vq: validator query state. * @param id: module id. * @param toprime: what to prime. * @return false on a processing error. */ static int prime_trust_anchor(struct module_qstate* qstate, struct val_qstate* vq, int id, struct trust_anchor* toprime) { struct module_qstate* newq = NULL; int ret = generate_request(qstate, id, toprime->name, toprime->namelen, LDNS_RR_TYPE_DNSKEY, toprime->dclass, BIT_CD, &newq, 0); if(newq && qstate->env->cfg->trust_anchor_signaling && !generate_keytag_query(qstate, id, toprime)) { verbose(VERB_ALGO, "keytag signaling query failed"); return 0; } if(!ret) { verbose(VERB_ALGO, "Could not prime trust anchor"); return 0; } /* ignore newq; validator does not need state created for that * query, and its a 'normal' for iterator as well */ vq->wait_prime_ta = 1; /* to elicit PRIME_RESP_STATE processing from the validator inform_super() routine */ /* store trust anchor name for later lookup when prime returns */ vq->trust_anchor_name = regional_alloc_init(qstate->region, toprime->name, toprime->namelen); vq->trust_anchor_len = toprime->namelen; vq->trust_anchor_labs = toprime->namelabs; if(!vq->trust_anchor_name) { log_err("Could not prime trust anchor: out of memory"); return 0; } return 1; } /** * Validate if the ANSWER and AUTHORITY sections contain valid rrsets. * They must be validly signed with the given key. * Tries to validate ADDITIONAL rrsets as well, but only to check them. * Allows unsigned CNAME after a DNAME that expands the DNAME. * * Note that by the time this method is called, the process of finding the * trusted DNSKEY rrset that signs this response must already have been * completed. * * @param qstate: query state. * @param env: module env for verify. * @param ve: validator env for verify. * @param qchase: query that was made. * @param chase_reply: answer to validate. * @param key_entry: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). * @return false if any of the rrsets in the an or ns sections of the message * fail to verify. The message is then set to bogus. */ static int validate_msg_signatures(struct module_qstate* qstate, struct module_env* env, struct val_env* ve, struct query_info* qchase, struct reply_info* chase_reply, struct key_entry_key* key_entry) { uint8_t* sname; size_t i, slen; struct ub_packed_rrset_key* s; enum sec_status sec; int dname_seen = 0; char* reason = NULL; /* validate the ANSWER section */ for(i=0; ian_numrrsets; i++) { s = chase_reply->rrsets[i]; /* Skip the CNAME following a (validated) DNAME. * Because of the normalization routines in the iterator, * there will always be an unsigned CNAME following a DNAME * (unless qtype=DNAME). */ if(dname_seen && ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME) { dname_seen = 0; /* CNAME was synthesized by our own iterator */ /* since the DNAME verified, mark the CNAME as secure */ ((struct packed_rrset_data*)s->entry.data)->security = sec_status_secure; ((struct packed_rrset_data*)s->entry.data)->trust = rrset_trust_validated; continue; } /* Verify the answer rrset */ sec = val_verify_rrset_entry(env, ve, s, key_entry, &reason, LDNS_SECTION_ANSWER, qstate); /* If the (answer) rrset failed to validate, then this * message is BAD. */ if(sec != sec_status_secure) { log_nametypeclass(VERB_QUERY, "validator: response " "has failed ANSWER rrset:", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); errinf(qstate, reason); if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME) errinf(qstate, "for CNAME"); else if(ntohs(s->rk.type) == LDNS_RR_TYPE_DNAME) errinf(qstate, "for DNAME"); errinf_origin(qstate, qstate->reply_origin); chase_reply->security = sec_status_bogus; return 0; } /* Notice a DNAME that should be followed by an unsigned * CNAME. */ if(qchase->qtype != LDNS_RR_TYPE_DNAME && ntohs(s->rk.type) == LDNS_RR_TYPE_DNAME) { dname_seen = 1; } } /* validate the AUTHORITY section */ for(i=chase_reply->an_numrrsets; ian_numrrsets+ chase_reply->ns_numrrsets; i++) { s = chase_reply->rrsets[i]; sec = val_verify_rrset_entry(env, ve, s, key_entry, &reason, LDNS_SECTION_AUTHORITY, qstate); /* If anything in the authority section fails to be secure, * we have a bad message. */ if(sec != sec_status_secure) { log_nametypeclass(VERB_QUERY, "validator: response " "has failed AUTHORITY rrset:", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); errinf(qstate, reason); errinf_origin(qstate, qstate->reply_origin); errinf_rrset(qstate, s); chase_reply->security = sec_status_bogus; return 0; } } /* If set, the validator should clean the additional section of * secure messages. */ if(!env->cfg->val_clean_additional) return 1; /* attempt to validate the ADDITIONAL section rrsets */ for(i=chase_reply->an_numrrsets+chase_reply->ns_numrrsets; irrset_count; i++) { s = chase_reply->rrsets[i]; /* only validate rrs that have signatures with the key */ /* leave others unchecked, those get removed later on too */ val_find_rrset_signer(s, &sname, &slen); if(sname && query_dname_compare(sname, key_entry->name)==0) (void)val_verify_rrset_entry(env, ve, s, key_entry, &reason, LDNS_SECTION_ADDITIONAL, qstate); /* the additional section can fail to be secure, * it is optional, check signature in case we need * to clean the additional section later. */ } return 1; } /** * Detect wrong truncated response (say from BIND 9.6.1 that is forwarding * and saw the NS record without signatures from a referral). * The positive response has a mangled authority section. * Remove that authority section and the additional section. * @param rep: reply * @return true if a wrongly truncated response. */ static int detect_wrongly_truncated(struct reply_info* rep) { size_t i; /* only NS in authority, and it is bogus */ if(rep->ns_numrrsets != 1 || rep->an_numrrsets == 0) return 0; if(ntohs(rep->rrsets[ rep->an_numrrsets ]->rk.type) != LDNS_RR_TYPE_NS) return 0; if(((struct packed_rrset_data*)rep->rrsets[ rep->an_numrrsets ] ->entry.data)->security == sec_status_secure) return 0; /* answer section is present and secure */ for(i=0; ian_numrrsets; i++) { if(((struct packed_rrset_data*)rep->rrsets[ i ] ->entry.data)->security != sec_status_secure) return 0; } verbose(VERB_ALGO, "truncating to minimal response"); return 1; } /** * For messages that are not referrals, if the chase reply contains an * unsigned NS record in the authority section it could have been * inserted by a (BIND) forwarder that thinks the zone is insecure, and * that has an NS record without signatures in cache. Remove the NS * record since the reply does not hinge on that record (in the authority * section), but do not remove it if it removes the last record from the * answer+authority sections. * @param chase_reply: the chased reply, we have a key for this contents, * so we should have signatures for these rrsets and not having * signatures means it will be bogus. * @param orig_reply: original reply, remove NS from there as well because * we cannot mark the NS record as DNSSEC valid because it is not * validated by signatures. */ static void remove_spurious_authority(struct reply_info* chase_reply, struct reply_info* orig_reply) { size_t i, found = 0; int remove = 0; /* if no answer and only 1 auth RRset, do not remove that one */ if(chase_reply->an_numrrsets == 0 && chase_reply->ns_numrrsets == 1) return; /* search authority section for unsigned NS records */ for(i = chase_reply->an_numrrsets; i < chase_reply->an_numrrsets+chase_reply->ns_numrrsets; i++) { struct packed_rrset_data* d = (struct packed_rrset_data*) chase_reply->rrsets[i]->entry.data; if(ntohs(chase_reply->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS && d->rrsig_count == 0) { found = i; remove = 1; break; } } /* see if we found the entry */ if(!remove) return; log_rrset_key(VERB_ALGO, "Removing spurious unsigned NS record " "(likely inserted by forwarder)", chase_reply->rrsets[found]); /* find rrset in orig_reply */ for(i = orig_reply->an_numrrsets; i < orig_reply->an_numrrsets+orig_reply->ns_numrrsets; i++) { if(ntohs(orig_reply->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS && query_dname_compare(orig_reply->rrsets[i]->rk.dname, chase_reply->rrsets[found]->rk.dname) == 0) { /* remove from orig_msg */ val_reply_remove_auth(orig_reply, i); break; } } /* remove rrset from chase_reply */ val_reply_remove_auth(chase_reply, found); } /** * Given a "positive" response -- a response that contains an answer to the * question, and no CNAME chain, validate this response. * * The answer and authority RRsets must already be verified as secure. * * @param env: module env for verify. * @param ve: validator env for verify. * @param qchase: query that was made. * @param chase_reply: answer to that query to validate. * @param kkey: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). */ static void validate_positive_response(struct module_env* env, struct val_env* ve, struct query_info* qchase, struct reply_info* chase_reply, struct key_entry_key* kkey) { uint8_t* wc = NULL; size_t wl; int wc_cached = 0; int wc_NSEC_ok = 0; int nsec3s_seen = 0; size_t i; struct ub_packed_rrset_key* s; /* validate the ANSWER section - this will be the answer itself */ for(i=0; ian_numrrsets; i++) { s = chase_reply->rrsets[i]; /* Check to see if the rrset is the result of a wildcard * expansion. If so, an additional check will need to be * made in the authority section. */ if(!val_rrset_wildcard(s, &wc, &wl)) { log_nametypeclass(VERB_QUERY, "Positive response has " "inconsistent wildcard sigs:", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); chase_reply->security = sec_status_bogus; return; } if(wc && !wc_cached && env->cfg->aggressive_nsec) { rrset_cache_update_wildcard(env->rrset_cache, s, wc, wl, env->alloc, *env->now); wc_cached = 1; } } /* validate the AUTHORITY section as well - this will generally be * the NS rrset (which could be missing, no problem) */ for(i=chase_reply->an_numrrsets; ian_numrrsets+ chase_reply->ns_numrrsets; i++) { s = chase_reply->rrsets[i]; /* If this is a positive wildcard response, and we have a * (just verified) NSEC record, try to use it to 1) prove * that qname doesn't exist and 2) that the correct wildcard * was used. */ if(wc != NULL && ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC) { if(val_nsec_proves_positive_wildcard(s, qchase, wc)) { wc_NSEC_ok = 1; } /* if not, continue looking for proof */ } /* Otherwise, if this is a positive wildcard response and * we have NSEC3 records */ if(wc != NULL && ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC3) { nsec3s_seen = 1; } } /* If this was a positive wildcard response that we haven't already * proven, and we have NSEC3 records, try to prove it using the NSEC3 * records. */ if(wc != NULL && !wc_NSEC_ok && nsec3s_seen) { enum sec_status sec = nsec3_prove_wildcard(env, ve, chase_reply->rrsets+chase_reply->an_numrrsets, chase_reply->ns_numrrsets, qchase, kkey, wc); if(sec == sec_status_insecure) { verbose(VERB_ALGO, "Positive wildcard response is " "insecure"); chase_reply->security = sec_status_insecure; return; } else if(sec == sec_status_secure) wc_NSEC_ok = 1; } /* If after all this, we still haven't proven the positive wildcard * response, fail. */ if(wc != NULL && !wc_NSEC_ok) { verbose(VERB_QUERY, "positive response was wildcard " "expansion and did not prove original data " "did not exist"); chase_reply->security = sec_status_bogus; return; } verbose(VERB_ALGO, "Successfully validated positive response"); chase_reply->security = sec_status_secure; } /** * Validate a NOERROR/NODATA signed response -- a response that has a * NOERROR Rcode but no ANSWER section RRsets. This consists of making * certain that the authority section NSEC/NSEC3s proves that the qname * does exist and the qtype doesn't. * * The answer and authority RRsets must already be verified as secure. * * @param env: module env for verify. * @param ve: validator env for verify. * @param qchase: query that was made. * @param chase_reply: answer to that query to validate. * @param kkey: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). */ static void validate_nodata_response(struct module_env* env, struct val_env* ve, struct query_info* qchase, struct reply_info* chase_reply, struct key_entry_key* kkey) { /* Since we are here, there must be nothing in the ANSWER section to * validate. */ /* (Note: CNAME/DNAME responses will not directly get here -- * instead, they are chased down into individual CNAME validations, * and at the end of the cname chain a POSITIVE, or CNAME_NOANSWER * validation.) */ /* validate the AUTHORITY section */ int has_valid_nsec = 0; /* If true, then the NODATA has been proven.*/ uint8_t* ce = NULL; /* for wildcard nodata responses. This is the proven closest encloser. */ uint8_t* wc = NULL; /* for wildcard nodata responses. wildcard nsec */ int nsec3s_seen = 0; /* nsec3s seen */ struct ub_packed_rrset_key* s; size_t i; for(i=chase_reply->an_numrrsets; ian_numrrsets+ chase_reply->ns_numrrsets; i++) { s = chase_reply->rrsets[i]; /* If we encounter an NSEC record, try to use it to prove * NODATA. * This needs to handle the ENT NODATA case. */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC) { if(nsec_proves_nodata(s, qchase, &wc)) { has_valid_nsec = 1; /* sets wc-encloser if wildcard applicable */ } if(val_nsec_proves_name_error(s, qchase->qname)) { ce = nsec_closest_encloser(qchase->qname, s); } if(val_nsec_proves_insecuredelegation(s, qchase)) { verbose(VERB_ALGO, "delegation is insecure"); chase_reply->security = sec_status_insecure; return; } } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC3) { nsec3s_seen = 1; } } /* check to see if we have a wildcard NODATA proof. */ /* The wildcard NODATA is 1 NSEC proving that qname does not exist * (and also proving what the closest encloser is), and 1 NSEC * showing the matching wildcard, which must be *.closest_encloser. */ if(wc && !ce) has_valid_nsec = 0; else if(wc && ce) { if(query_dname_compare(wc, ce) != 0) { has_valid_nsec = 0; } } if(!has_valid_nsec && nsec3s_seen) { enum sec_status sec = nsec3_prove_nodata(env, ve, chase_reply->rrsets+chase_reply->an_numrrsets, chase_reply->ns_numrrsets, qchase, kkey); if(sec == sec_status_insecure) { verbose(VERB_ALGO, "NODATA response is insecure"); chase_reply->security = sec_status_insecure; return; } else if(sec == sec_status_secure) has_valid_nsec = 1; } if(!has_valid_nsec) { verbose(VERB_QUERY, "NODATA response failed to prove NODATA " "status with NSEC/NSEC3"); if(verbosity >= VERB_ALGO) log_dns_msg("Failed NODATA", qchase, chase_reply); chase_reply->security = sec_status_bogus; return; } verbose(VERB_ALGO, "successfully validated NODATA response."); chase_reply->security = sec_status_secure; } /** * Validate a NAMEERROR signed response -- a response that has a NXDOMAIN * Rcode. * This consists of making certain that the authority section NSEC proves * that the qname doesn't exist and the covering wildcard also doesn't exist.. * * The answer and authority RRsets must have already been verified as secure. * * @param env: module env for verify. * @param ve: validator env for verify. * @param qchase: query that was made. * @param chase_reply: answer to that query to validate. * @param kkey: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). * @param rcode: adjusted RCODE, in case of RCODE/proof mismatch leniency. */ static void validate_nameerror_response(struct module_env* env, struct val_env* ve, struct query_info* qchase, struct reply_info* chase_reply, struct key_entry_key* kkey, int* rcode) { int has_valid_nsec = 0; int has_valid_wnsec = 0; int nsec3s_seen = 0; struct ub_packed_rrset_key* s; size_t i; uint8_t* ce; int ce_labs = 0; int prev_ce_labs = 0; for(i=chase_reply->an_numrrsets; ian_numrrsets+ chase_reply->ns_numrrsets; i++) { s = chase_reply->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC) { if(val_nsec_proves_name_error(s, qchase->qname)) has_valid_nsec = 1; ce = nsec_closest_encloser(qchase->qname, s); ce_labs = dname_count_labels(ce); /* Use longest closest encloser to prove wildcard. */ if(ce_labs > prev_ce_labs || (ce_labs == prev_ce_labs && has_valid_wnsec == 0)) { if(val_nsec_proves_no_wc(s, qchase->qname, qchase->qname_len)) has_valid_wnsec = 1; else has_valid_wnsec = 0; } prev_ce_labs = ce_labs; if(val_nsec_proves_insecuredelegation(s, qchase)) { verbose(VERB_ALGO, "delegation is insecure"); chase_reply->security = sec_status_insecure; return; } } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC3) nsec3s_seen = 1; } if((!has_valid_nsec || !has_valid_wnsec) && nsec3s_seen) { /* use NSEC3 proof, both answer and auth rrsets, in case * NSEC3s end up in the answer (due to qtype=NSEC3 or so) */ chase_reply->security = nsec3_prove_nameerror(env, ve, chase_reply->rrsets, chase_reply->an_numrrsets+ chase_reply->ns_numrrsets, qchase, kkey); if(chase_reply->security != sec_status_secure) { verbose(VERB_QUERY, "NameError response failed nsec, " "nsec3 proof was %s", sec_status_to_string( chase_reply->security)); return; } has_valid_nsec = 1; has_valid_wnsec = 1; } /* If the message fails to prove either condition, it is bogus. */ if(!has_valid_nsec) { verbose(VERB_QUERY, "NameError response has failed to prove: " "qname does not exist"); chase_reply->security = sec_status_bogus; /* Be lenient with RCODE in NSEC NameError responses */ validate_nodata_response(env, ve, qchase, chase_reply, kkey); if (chase_reply->security == sec_status_secure) *rcode = LDNS_RCODE_NOERROR; return; } if(!has_valid_wnsec) { verbose(VERB_QUERY, "NameError response has failed to prove: " "covering wildcard does not exist"); chase_reply->security = sec_status_bogus; /* Be lenient with RCODE in NSEC NameError responses */ validate_nodata_response(env, ve, qchase, chase_reply, kkey); if (chase_reply->security == sec_status_secure) *rcode = LDNS_RCODE_NOERROR; return; } /* Otherwise, we consider the message secure. */ verbose(VERB_ALGO, "successfully validated NAME ERROR response."); chase_reply->security = sec_status_secure; } /** * Given a referral response, validate rrsets and take least trusted rrset * as the current validation status. * * Note that by the time this method is called, the process of finding the * trusted DNSKEY rrset that signs this response must already have been * completed. * * @param chase_reply: answer to validate. */ static void validate_referral_response(struct reply_info* chase_reply) { size_t i; enum sec_status s; /* message security equals lowest rrset security */ chase_reply->security = sec_status_secure; for(i=0; irrset_count; i++) { s = ((struct packed_rrset_data*)chase_reply->rrsets[i] ->entry.data)->security; if(s < chase_reply->security) chase_reply->security = s; } verbose(VERB_ALGO, "validated part of referral response as %s", sec_status_to_string(chase_reply->security)); } /** * Given an "ANY" response -- a response that contains an answer to a * qtype==ANY question, with answers. This does no checking that all * types are present. * * NOTE: it may be possible to get parent-side delegation point records * here, which won't all be signed. Right now, this routine relies on the * upstream iterative resolver to not return these responses -- instead * treating them as referrals. * * NOTE: RFC 4035 is silent on this issue, so this may change upon * clarification. Clarification draft -05 says to not check all types are * present. * * Note that by the time this method is called, the process of finding the * trusted DNSKEY rrset that signs this response must already have been * completed. * * @param env: module env for verify. * @param ve: validator env for verify. * @param qchase: query that was made. * @param chase_reply: answer to that query to validate. * @param kkey: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). */ static void validate_any_response(struct module_env* env, struct val_env* ve, struct query_info* qchase, struct reply_info* chase_reply, struct key_entry_key* kkey) { /* all answer and auth rrsets already verified */ /* but check if a wildcard response is given, then check NSEC/NSEC3 * for qname denial to see if wildcard is applicable */ uint8_t* wc = NULL; size_t wl; int wc_NSEC_ok = 0; int nsec3s_seen = 0; size_t i; struct ub_packed_rrset_key* s; if(qchase->qtype != LDNS_RR_TYPE_ANY) { log_err("internal error: ANY validation called for non-ANY"); chase_reply->security = sec_status_bogus; return; } /* validate the ANSWER section - this will be the answer itself */ for(i=0; ian_numrrsets; i++) { s = chase_reply->rrsets[i]; /* Check to see if the rrset is the result of a wildcard * expansion. If so, an additional check will need to be * made in the authority section. */ if(!val_rrset_wildcard(s, &wc, &wl)) { log_nametypeclass(VERB_QUERY, "Positive ANY response" " has inconsistent wildcard sigs:", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); chase_reply->security = sec_status_bogus; return; } } /* if it was a wildcard, check for NSEC/NSEC3s in both answer * and authority sections (NSEC may be moved to the ANSWER section) */ if(wc != NULL) for(i=0; ian_numrrsets+chase_reply->ns_numrrsets; i++) { s = chase_reply->rrsets[i]; /* If this is a positive wildcard response, and we have a * (just verified) NSEC record, try to use it to 1) prove * that qname doesn't exist and 2) that the correct wildcard * was used. */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC) { if(val_nsec_proves_positive_wildcard(s, qchase, wc)) { wc_NSEC_ok = 1; } /* if not, continue looking for proof */ } /* Otherwise, if this is a positive wildcard response and * we have NSEC3 records */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC3) { nsec3s_seen = 1; } } /* If this was a positive wildcard response that we haven't already * proven, and we have NSEC3 records, try to prove it using the NSEC3 * records. */ if(wc != NULL && !wc_NSEC_ok && nsec3s_seen) { /* look both in answer and auth section for NSEC3s */ enum sec_status sec = nsec3_prove_wildcard(env, ve, chase_reply->rrsets, chase_reply->an_numrrsets+chase_reply->ns_numrrsets, qchase, kkey, wc); if(sec == sec_status_insecure) { verbose(VERB_ALGO, "Positive ANY wildcard response is " "insecure"); chase_reply->security = sec_status_insecure; return; } else if(sec == sec_status_secure) wc_NSEC_ok = 1; } /* If after all this, we still haven't proven the positive wildcard * response, fail. */ if(wc != NULL && !wc_NSEC_ok) { verbose(VERB_QUERY, "positive ANY response was wildcard " "expansion and did not prove original data " "did not exist"); chase_reply->security = sec_status_bogus; return; } verbose(VERB_ALGO, "Successfully validated positive ANY response"); chase_reply->security = sec_status_secure; } /** * Validate CNAME response, or DNAME+CNAME. * This is just like a positive proof, except that this is about a * DNAME+CNAME. Possible wildcard proof. * Difference with positive proof is that this routine refuses * wildcarded DNAMEs. * * The answer and authority rrsets must already be verified as secure. * * @param env: module env for verify. * @param ve: validator env for verify. * @param qchase: query that was made. * @param chase_reply: answer to that query to validate. * @param kkey: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). */ static void validate_cname_response(struct module_env* env, struct val_env* ve, struct query_info* qchase, struct reply_info* chase_reply, struct key_entry_key* kkey) { uint8_t* wc = NULL; size_t wl; int wc_NSEC_ok = 0; int nsec3s_seen = 0; size_t i; struct ub_packed_rrset_key* s; /* validate the ANSWER section - this will be the CNAME (+DNAME) */ for(i=0; ian_numrrsets; i++) { s = chase_reply->rrsets[i]; /* Check to see if the rrset is the result of a wildcard * expansion. If so, an additional check will need to be * made in the authority section. */ if(!val_rrset_wildcard(s, &wc, &wl)) { log_nametypeclass(VERB_QUERY, "Cname response has " "inconsistent wildcard sigs:", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); chase_reply->security = sec_status_bogus; return; } /* Refuse wildcarded DNAMEs rfc 4597. * Do not follow a wildcarded DNAME because * its synthesized CNAME expansion is underdefined */ if(qchase->qtype != LDNS_RR_TYPE_DNAME && ntohs(s->rk.type) == LDNS_RR_TYPE_DNAME && wc) { log_nametypeclass(VERB_QUERY, "cannot validate a " "wildcarded DNAME:", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); chase_reply->security = sec_status_bogus; return; } /* If we have found a CNAME, stop looking for one. * The iterator has placed the CNAME chain in correct * order. */ if (ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME) { break; } } /* AUTHORITY section */ for(i=chase_reply->an_numrrsets; ian_numrrsets+ chase_reply->ns_numrrsets; i++) { s = chase_reply->rrsets[i]; /* If this is a positive wildcard response, and we have a * (just verified) NSEC record, try to use it to 1) prove * that qname doesn't exist and 2) that the correct wildcard * was used. */ if(wc != NULL && ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC) { if(val_nsec_proves_positive_wildcard(s, qchase, wc)) { wc_NSEC_ok = 1; } /* if not, continue looking for proof */ } /* Otherwise, if this is a positive wildcard response and * we have NSEC3 records */ if(wc != NULL && ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC3) { nsec3s_seen = 1; } } /* If this was a positive wildcard response that we haven't already * proven, and we have NSEC3 records, try to prove it using the NSEC3 * records. */ if(wc != NULL && !wc_NSEC_ok && nsec3s_seen) { enum sec_status sec = nsec3_prove_wildcard(env, ve, chase_reply->rrsets+chase_reply->an_numrrsets, chase_reply->ns_numrrsets, qchase, kkey, wc); if(sec == sec_status_insecure) { verbose(VERB_ALGO, "wildcard CNAME response is " "insecure"); chase_reply->security = sec_status_insecure; return; } else if(sec == sec_status_secure) wc_NSEC_ok = 1; } /* If after all this, we still haven't proven the positive wildcard * response, fail. */ if(wc != NULL && !wc_NSEC_ok) { verbose(VERB_QUERY, "CNAME response was wildcard " "expansion and did not prove original data " "did not exist"); chase_reply->security = sec_status_bogus; return; } verbose(VERB_ALGO, "Successfully validated CNAME response"); chase_reply->security = sec_status_secure; } /** * Validate CNAME NOANSWER response, no more data after a CNAME chain. * This can be a NODATA or a NAME ERROR case, but not both at the same time. * We don't know because the rcode has been set to NOERROR by the CNAME. * * The answer and authority rrsets must already be verified as secure. * * @param env: module env for verify. * @param ve: validator env for verify. * @param qchase: query that was made. * @param chase_reply: answer to that query to validate. * @param kkey: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). */ static void validate_cname_noanswer_response(struct module_env* env, struct val_env* ve, struct query_info* qchase, struct reply_info* chase_reply, struct key_entry_key* kkey) { int nodata_valid_nsec = 0; /* If true, then NODATA has been proven.*/ uint8_t* ce = NULL; /* for wildcard nodata responses. This is the proven closest encloser. */ uint8_t* wc = NULL; /* for wildcard nodata responses. wildcard nsec */ int nxdomain_valid_nsec = 0; /* if true, nameerror has been proven */ int nxdomain_valid_wnsec = 0; int nsec3s_seen = 0; /* nsec3s seen */ struct ub_packed_rrset_key* s; size_t i; uint8_t* nsec_ce; /* Used to find the NSEC with the longest ce */ int ce_labs = 0; int prev_ce_labs = 0; /* the AUTHORITY section */ for(i=chase_reply->an_numrrsets; ian_numrrsets+ chase_reply->ns_numrrsets; i++) { s = chase_reply->rrsets[i]; /* If we encounter an NSEC record, try to use it to prove * NODATA. This needs to handle the ENT NODATA case. * Also try to prove NAMEERROR, and absence of a wildcard */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC) { if(nsec_proves_nodata(s, qchase, &wc)) { nodata_valid_nsec = 1; /* set wc encloser if wildcard applicable */ } if(val_nsec_proves_name_error(s, qchase->qname)) { ce = nsec_closest_encloser(qchase->qname, s); nxdomain_valid_nsec = 1; } nsec_ce = nsec_closest_encloser(qchase->qname, s); ce_labs = dname_count_labels(nsec_ce); /* Use longest closest encloser to prove wildcard. */ if(ce_labs > prev_ce_labs || (ce_labs == prev_ce_labs && nxdomain_valid_wnsec == 0)) { if(val_nsec_proves_no_wc(s, qchase->qname, qchase->qname_len)) nxdomain_valid_wnsec = 1; else nxdomain_valid_wnsec = 0; } prev_ce_labs = ce_labs; if(val_nsec_proves_insecuredelegation(s, qchase)) { verbose(VERB_ALGO, "delegation is insecure"); chase_reply->security = sec_status_insecure; return; } } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC3) { nsec3s_seen = 1; } } /* check to see if we have a wildcard NODATA proof. */ /* The wildcard NODATA is 1 NSEC proving that qname does not exists * (and also proving what the closest encloser is), and 1 NSEC * showing the matching wildcard, which must be *.closest_encloser. */ if(wc && !ce) nodata_valid_nsec = 0; else if(wc && ce) { if(query_dname_compare(wc, ce) != 0) { nodata_valid_nsec = 0; } } if(nxdomain_valid_nsec && !nxdomain_valid_wnsec) { /* name error is missing wildcard denial proof */ nxdomain_valid_nsec = 0; } if(nodata_valid_nsec && nxdomain_valid_nsec) { verbose(VERB_QUERY, "CNAMEchain to noanswer proves that name " "exists and not exists, bogus"); chase_reply->security = sec_status_bogus; return; } if(!nodata_valid_nsec && !nxdomain_valid_nsec && nsec3s_seen) { int nodata; enum sec_status sec = nsec3_prove_nxornodata(env, ve, chase_reply->rrsets+chase_reply->an_numrrsets, chase_reply->ns_numrrsets, qchase, kkey, &nodata); if(sec == sec_status_insecure) { verbose(VERB_ALGO, "CNAMEchain to noanswer response " "is insecure"); chase_reply->security = sec_status_insecure; return; } else if(sec == sec_status_secure) { if(nodata) nodata_valid_nsec = 1; else nxdomain_valid_nsec = 1; } } if(!nodata_valid_nsec && !nxdomain_valid_nsec) { verbose(VERB_QUERY, "CNAMEchain to noanswer response failed " "to prove status with NSEC/NSEC3"); if(verbosity >= VERB_ALGO) log_dns_msg("Failed CNAMEnoanswer", qchase, chase_reply); chase_reply->security = sec_status_bogus; return; } if(nodata_valid_nsec) verbose(VERB_ALGO, "successfully validated CNAME chain to a " "NODATA response."); else verbose(VERB_ALGO, "successfully validated CNAME chain to a " "NAMEERROR response."); chase_reply->security = sec_status_secure; } /** * Process init state for validator. * Process the INIT state. First tier responses start in the INIT state. * This is where they are vetted for validation suitability, and the initial * key search is done. * * Currently, events the come through this routine will be either promoted * to FINISHED/CNAME_RESP (no validation needed), FINDKEY (next step to * validation), or will be (temporarily) retired and a new priming request * event will be generated. * * @param qstate: query state. * @param vq: validator query state. * @param ve: validator shared global environment. * @param id: module id. * @return true if the event should be processed further on return, false if * not. */ static int processInit(struct module_qstate* qstate, struct val_qstate* vq, struct val_env* ve, int id) { uint8_t* lookup_name; size_t lookup_len; struct trust_anchor* anchor; enum val_classification subtype = val_classify_response( qstate->query_flags, &qstate->qinfo, &vq->qchase, vq->orig_msg->rep, vq->rrset_skip); if(vq->restart_count > VAL_MAX_RESTART_COUNT) { verbose(VERB_ALGO, "restart count exceeded"); return val_error(qstate, id); } verbose(VERB_ALGO, "validator classification %s", val_classification_to_string(subtype)); if(subtype == VAL_CLASS_REFERRAL && vq->rrset_skip < vq->orig_msg->rep->rrset_count) { /* referral uses the rrset name as qchase, to find keys for * that rrset */ vq->qchase.qname = vq->orig_msg->rep-> rrsets[vq->rrset_skip]->rk.dname; vq->qchase.qname_len = vq->orig_msg->rep-> rrsets[vq->rrset_skip]->rk.dname_len; vq->qchase.qtype = ntohs(vq->orig_msg->rep-> rrsets[vq->rrset_skip]->rk.type); vq->qchase.qclass = ntohs(vq->orig_msg->rep-> rrsets[vq->rrset_skip]->rk.rrset_class); } lookup_name = vq->qchase.qname; lookup_len = vq->qchase.qname_len; /* for type DS look at the parent side for keys/trustanchor */ /* also for NSEC not at apex */ if(vq->qchase.qtype == LDNS_RR_TYPE_DS || (vq->qchase.qtype == LDNS_RR_TYPE_NSEC && vq->orig_msg->rep->rrset_count > vq->rrset_skip && ntohs(vq->orig_msg->rep->rrsets[vq->rrset_skip]->rk.type) == LDNS_RR_TYPE_NSEC && !(vq->orig_msg->rep->rrsets[vq->rrset_skip]-> rk.flags&PACKED_RRSET_NSEC_AT_APEX))) { dname_remove_label(&lookup_name, &lookup_len); } val_mark_indeterminate(vq->chase_reply, qstate->env->anchors, qstate->env->rrset_cache, qstate->env); vq->key_entry = NULL; vq->empty_DS_name = NULL; vq->ds_rrset = 0; anchor = anchors_lookup(qstate->env->anchors, lookup_name, lookup_len, vq->qchase.qclass); /* Determine the signer/lookup name */ val_find_signer(subtype, &vq->qchase, vq->orig_msg->rep, vq->rrset_skip, &vq->signer_name, &vq->signer_len); if(vq->signer_name != NULL && !dname_subdomain_c(lookup_name, vq->signer_name)) { log_nametypeclass(VERB_ALGO, "this signer name is not a parent " "of lookupname, omitted", vq->signer_name, 0, 0); vq->signer_name = NULL; } if(vq->signer_name == NULL) { log_nametypeclass(VERB_ALGO, "no signer, using", lookup_name, 0, 0); } else { lookup_name = vq->signer_name; lookup_len = vq->signer_len; log_nametypeclass(VERB_ALGO, "signer is", lookup_name, 0, 0); } /* for NXDOMAIN it could be signed by a parent of the trust anchor */ if(subtype == VAL_CLASS_NAMEERROR && vq->signer_name && anchor && dname_strict_subdomain_c(anchor->name, lookup_name)){ lock_basic_unlock(&anchor->lock); anchor = anchors_lookup(qstate->env->anchors, lookup_name, lookup_len, vq->qchase.qclass); if(!anchor) { /* unsigned parent denies anchor*/ verbose(VERB_QUERY, "unsigned parent zone denies" " trust anchor, indeterminate"); vq->chase_reply->security = sec_status_indeterminate; vq->state = VAL_FINISHED_STATE; return 1; } verbose(VERB_ALGO, "trust anchor NXDOMAIN by signed parent"); } else if(subtype == VAL_CLASS_POSITIVE && qstate->qinfo.qtype == LDNS_RR_TYPE_DNSKEY && query_dname_compare(lookup_name, qstate->qinfo.qname) == 0) { /* is a DNSKEY so lookup a bit higher since we want to * get it from a parent or from trustanchor */ dname_remove_label(&lookup_name, &lookup_len); } if(vq->rrset_skip > 0 || subtype == VAL_CLASS_CNAME || subtype == VAL_CLASS_REFERRAL) { /* extract this part of orig_msg into chase_reply for * the eventual VALIDATE stage */ val_fill_reply(vq->chase_reply, vq->orig_msg->rep, vq->rrset_skip, lookup_name, lookup_len, vq->signer_name); if(verbosity >= VERB_ALGO) log_dns_msg("chased extract", &vq->qchase, vq->chase_reply); } vq->key_entry = key_cache_obtain(ve->kcache, lookup_name, lookup_len, vq->qchase.qclass, qstate->region, *qstate->env->now); /* there is no key and no trust anchor */ if(vq->key_entry == NULL && anchor == NULL) { /*response isn't under a trust anchor, so we cannot validate.*/ vq->chase_reply->security = sec_status_indeterminate; /* go to finished state to cache this result */ vq->state = VAL_FINISHED_STATE; return 1; } /* if not key, or if keyentry is *above* the trustanchor, i.e. * the keyentry is based on another (higher) trustanchor */ else if(vq->key_entry == NULL || (anchor && dname_strict_subdomain_c(anchor->name, vq->key_entry->name))) { /* trust anchor is an 'unsigned' trust anchor */ if(anchor && anchor->numDS == 0 && anchor->numDNSKEY == 0) { vq->chase_reply->security = sec_status_insecure; val_mark_insecure(vq->chase_reply, anchor->name, qstate->env->rrset_cache, qstate->env); lock_basic_unlock(&anchor->lock); /* go to finished state to cache this result */ vq->state = VAL_FINISHED_STATE; return 1; } /* fire off a trust anchor priming query. */ verbose(VERB_DETAIL, "prime trust anchor"); if(!prime_trust_anchor(qstate, vq, id, anchor)) { lock_basic_unlock(&anchor->lock); return val_error(qstate, id); } lock_basic_unlock(&anchor->lock); /* and otherwise, don't continue processing this event. * (it will be reactivated when the priming query returns). */ vq->state = VAL_FINDKEY_STATE; return 0; } if(anchor) { lock_basic_unlock(&anchor->lock); } if(key_entry_isnull(vq->key_entry)) { /* response is under a null key, so we cannot validate * However, we do set the status to INSECURE, since it is * essentially proven insecure. */ vq->chase_reply->security = sec_status_insecure; val_mark_insecure(vq->chase_reply, vq->key_entry->name, qstate->env->rrset_cache, qstate->env); /* go to finished state to cache this result */ vq->state = VAL_FINISHED_STATE; return 1; } else if(key_entry_isbad(vq->key_entry)) { /* key is bad, chain is bad, reply is bogus */ errinf_dname(qstate, "key for validation", vq->key_entry->name); errinf(qstate, "is marked as invalid"); if(key_entry_get_reason(vq->key_entry)) { errinf(qstate, "because of a previous"); errinf(qstate, key_entry_get_reason(vq->key_entry)); } /* no retries, stop bothering the authority until timeout */ vq->restart_count = VAL_MAX_RESTART_COUNT; vq->chase_reply->security = sec_status_bogus; vq->state = VAL_FINISHED_STATE; return 1; } /* otherwise, we have our "closest" cached key -- continue * processing in the next state. */ vq->state = VAL_FINDKEY_STATE; return 1; } /** * Process the FINDKEY state. Generally this just calculates the next name * to query and either issues a DS or a DNSKEY query. It will check to see * if the correct key has already been reached, in which case it will * advance the event to the next state. * * @param qstate: query state. * @param vq: validator query state. * @param id: module id. * @return true if the event should be processed further on return, false if * not. */ static int processFindKey(struct module_qstate* qstate, struct val_qstate* vq, int id) { uint8_t* target_key_name, *current_key_name; size_t target_key_len; int strip_lab; struct module_qstate* newq = NULL; log_query_info(VERB_ALGO, "validator: FindKey", &vq->qchase); /* We know that state.key_entry is not 0 or bad key -- if it were, * then previous processing should have directed this event to * a different state. * It could be an isnull key, which signals the DNSKEY failed * with retry and has to be looked up again. */ log_assert(vq->key_entry && !key_entry_isbad(vq->key_entry)); if(key_entry_isnull(vq->key_entry)) { if(!generate_request(qstate, id, vq->ds_rrset->rk.dname, vq->ds_rrset->rk.dname_len, LDNS_RR_TYPE_DNSKEY, vq->qchase.qclass, BIT_CD, &newq, 0)) { verbose(VERB_ALGO, "error generating DNSKEY request"); return val_error(qstate, id); } return 0; } target_key_name = vq->signer_name; target_key_len = vq->signer_len; if(!target_key_name) { target_key_name = vq->qchase.qname; target_key_len = vq->qchase.qname_len; } current_key_name = vq->key_entry->name; /* If our current key entry matches our target, then we are done. */ if(query_dname_compare(target_key_name, current_key_name) == 0) { vq->state = VAL_VALIDATE_STATE; return 1; } if(vq->empty_DS_name) { /* if the last empty nonterminal/emptyDS name we detected is * below the current key, use that name to make progress * along the chain of trust */ if(query_dname_compare(target_key_name, vq->empty_DS_name) == 0) { /* do not query for empty_DS_name again */ verbose(VERB_ALGO, "Cannot retrieve DS for signature"); errinf(qstate, "no signatures"); errinf_origin(qstate, qstate->reply_origin); vq->chase_reply->security = sec_status_bogus; vq->state = VAL_FINISHED_STATE; return 1; } current_key_name = vq->empty_DS_name; } log_nametypeclass(VERB_ALGO, "current keyname", current_key_name, LDNS_RR_TYPE_DNSKEY, LDNS_RR_CLASS_IN); log_nametypeclass(VERB_ALGO, "target keyname", target_key_name, LDNS_RR_TYPE_DNSKEY, LDNS_RR_CLASS_IN); /* assert we are walking down the DNS tree */ if(!dname_subdomain_c(target_key_name, current_key_name)) { verbose(VERB_ALGO, "bad signer name"); vq->chase_reply->security = sec_status_bogus; vq->state = VAL_FINISHED_STATE; return 1; } /* so this value is >= -1 */ strip_lab = dname_count_labels(target_key_name) - dname_count_labels(current_key_name) - 1; log_assert(strip_lab >= -1); verbose(VERB_ALGO, "striplab %d", strip_lab); if(strip_lab > 0) { dname_remove_labels(&target_key_name, &target_key_len, strip_lab); } log_nametypeclass(VERB_ALGO, "next keyname", target_key_name, LDNS_RR_TYPE_DNSKEY, LDNS_RR_CLASS_IN); /* The next step is either to query for the next DS, or to query * for the next DNSKEY. */ if(vq->ds_rrset) log_nametypeclass(VERB_ALGO, "DS RRset", vq->ds_rrset->rk.dname, LDNS_RR_TYPE_DS, LDNS_RR_CLASS_IN); else verbose(VERB_ALGO, "No DS RRset"); if(vq->ds_rrset && query_dname_compare(vq->ds_rrset->rk.dname, vq->key_entry->name) != 0) { if(!generate_request(qstate, id, vq->ds_rrset->rk.dname, vq->ds_rrset->rk.dname_len, LDNS_RR_TYPE_DNSKEY, vq->qchase.qclass, BIT_CD, &newq, 0)) { verbose(VERB_ALGO, "error generating DNSKEY request"); return val_error(qstate, id); } return 0; } if(!vq->ds_rrset || query_dname_compare(vq->ds_rrset->rk.dname, target_key_name) != 0) { /* check if there is a cache entry : pick up an NSEC if * there is no DS, check if that NSEC has DS-bit unset, and * thus can disprove the secure delegation we seek. * We can then use that NSEC even in the absence of a SOA * record that would be required by the iterator to supply * a completely protocol-correct response. * Uses negative cache for NSEC3 lookup of DS responses. */ /* only if cache not blacklisted, of course */ struct dns_msg* msg; if(!qstate->blacklist && !vq->chain_blacklist && (msg=val_find_DS(qstate->env, target_key_name, target_key_len, vq->qchase.qclass, qstate->region, vq->key_entry->name)) ) { verbose(VERB_ALGO, "Process cached DS response"); process_ds_response(qstate, vq, id, LDNS_RCODE_NOERROR, msg, &msg->qinfo, NULL); return 1; /* continue processing ds-response results */ } if(!generate_request(qstate, id, target_key_name, target_key_len, LDNS_RR_TYPE_DS, vq->qchase.qclass, BIT_CD, &newq, 0)) { verbose(VERB_ALGO, "error generating DS request"); return val_error(qstate, id); } return 0; } /* Otherwise, it is time to query for the DNSKEY */ if(!generate_request(qstate, id, vq->ds_rrset->rk.dname, vq->ds_rrset->rk.dname_len, LDNS_RR_TYPE_DNSKEY, vq->qchase.qclass, BIT_CD, &newq, 0)) { verbose(VERB_ALGO, "error generating DNSKEY request"); return val_error(qstate, id); } return 0; } /** * Process the VALIDATE stage, the init and findkey stages are finished, * and the right keys are available to validate the response. * Or, there are no keys available, in order to invalidate the response. * * After validation, the status is recorded in the message and rrsets, * and finished state is started. * * @param qstate: query state. * @param vq: validator query state. * @param ve: validator shared global environment. * @param id: module id. * @return true if the event should be processed further on return, false if * not. */ static int processValidate(struct module_qstate* qstate, struct val_qstate* vq, struct val_env* ve, int id) { enum val_classification subtype; int rcode; if(!vq->key_entry) { verbose(VERB_ALGO, "validate: no key entry, failed"); return val_error(qstate, id); } /* This is the default next state. */ vq->state = VAL_FINISHED_STATE; /* Unsigned responses must be underneath a "null" key entry.*/ if(key_entry_isnull(vq->key_entry)) { verbose(VERB_DETAIL, "Verified that %sresponse is INSECURE", vq->signer_name?"":"unsigned "); vq->chase_reply->security = sec_status_insecure; val_mark_insecure(vq->chase_reply, vq->key_entry->name, qstate->env->rrset_cache, qstate->env); key_cache_insert(ve->kcache, vq->key_entry, qstate); return 1; } if(key_entry_isbad(vq->key_entry)) { log_nametypeclass(VERB_DETAIL, "Could not establish a chain " "of trust to keys for", vq->key_entry->name, LDNS_RR_TYPE_DNSKEY, vq->key_entry->key_class); vq->chase_reply->security = sec_status_bogus; errinf(qstate, "while building chain of trust"); if(vq->restart_count >= VAL_MAX_RESTART_COUNT) key_cache_insert(ve->kcache, vq->key_entry, qstate); return 1; } /* signerName being null is the indicator that this response was * unsigned */ if(vq->signer_name == NULL) { log_query_info(VERB_ALGO, "processValidate: state has no " "signer name", &vq->qchase); verbose(VERB_DETAIL, "Could not establish validation of " "INSECURE status of unsigned response."); errinf(qstate, "no signatures"); errinf_origin(qstate, qstate->reply_origin); vq->chase_reply->security = sec_status_bogus; return 1; } subtype = val_classify_response(qstate->query_flags, &qstate->qinfo, &vq->qchase, vq->orig_msg->rep, vq->rrset_skip); if(subtype != VAL_CLASS_REFERRAL) remove_spurious_authority(vq->chase_reply, vq->orig_msg->rep); /* check signatures in the message; * answer and authority must be valid, additional is only checked. */ if(!validate_msg_signatures(qstate, qstate->env, ve, &vq->qchase, vq->chase_reply, vq->key_entry)) { /* workaround bad recursor out there that truncates (even * with EDNS4k) to 512 by removing RRSIG from auth section * for positive replies*/ if((subtype == VAL_CLASS_POSITIVE || subtype == VAL_CLASS_ANY || subtype == VAL_CLASS_CNAME) && detect_wrongly_truncated(vq->orig_msg->rep)) { /* truncate the message some more */ vq->orig_msg->rep->ns_numrrsets = 0; vq->orig_msg->rep->ar_numrrsets = 0; vq->orig_msg->rep->rrset_count = vq->orig_msg->rep->an_numrrsets; vq->chase_reply->ns_numrrsets = 0; vq->chase_reply->ar_numrrsets = 0; vq->chase_reply->rrset_count = vq->chase_reply->an_numrrsets; qstate->errinf = NULL; } else { verbose(VERB_DETAIL, "Validate: message contains " "bad rrsets"); return 1; } } switch(subtype) { case VAL_CLASS_POSITIVE: verbose(VERB_ALGO, "Validating a positive response"); validate_positive_response(qstate->env, ve, &vq->qchase, vq->chase_reply, vq->key_entry); verbose(VERB_DETAIL, "validate(positive): %s", sec_status_to_string( vq->chase_reply->security)); break; case VAL_CLASS_NODATA: verbose(VERB_ALGO, "Validating a nodata response"); validate_nodata_response(qstate->env, ve, &vq->qchase, vq->chase_reply, vq->key_entry); verbose(VERB_DETAIL, "validate(nodata): %s", sec_status_to_string( vq->chase_reply->security)); break; case VAL_CLASS_NAMEERROR: rcode = (int)FLAGS_GET_RCODE(vq->orig_msg->rep->flags); verbose(VERB_ALGO, "Validating a nxdomain response"); validate_nameerror_response(qstate->env, ve, &vq->qchase, vq->chase_reply, vq->key_entry, &rcode); verbose(VERB_DETAIL, "validate(nxdomain): %s", sec_status_to_string( vq->chase_reply->security)); FLAGS_SET_RCODE(vq->orig_msg->rep->flags, rcode); FLAGS_SET_RCODE(vq->chase_reply->flags, rcode); break; case VAL_CLASS_CNAME: verbose(VERB_ALGO, "Validating a cname response"); validate_cname_response(qstate->env, ve, &vq->qchase, vq->chase_reply, vq->key_entry); verbose(VERB_DETAIL, "validate(cname): %s", sec_status_to_string( vq->chase_reply->security)); break; case VAL_CLASS_CNAMENOANSWER: verbose(VERB_ALGO, "Validating a cname noanswer " "response"); validate_cname_noanswer_response(qstate->env, ve, &vq->qchase, vq->chase_reply, vq->key_entry); verbose(VERB_DETAIL, "validate(cname_noanswer): %s", sec_status_to_string( vq->chase_reply->security)); break; case VAL_CLASS_REFERRAL: verbose(VERB_ALGO, "Validating a referral response"); validate_referral_response(vq->chase_reply); verbose(VERB_DETAIL, "validate(referral): %s", sec_status_to_string( vq->chase_reply->security)); break; case VAL_CLASS_ANY: verbose(VERB_ALGO, "Validating a positive ANY " "response"); validate_any_response(qstate->env, ve, &vq->qchase, vq->chase_reply, vq->key_entry); verbose(VERB_DETAIL, "validate(positive_any): %s", sec_status_to_string( vq->chase_reply->security)); break; default: log_err("validate: unhandled response subtype: %d", subtype); } if(vq->chase_reply->security == sec_status_bogus) { if(subtype == VAL_CLASS_POSITIVE) errinf(qstate, "wildcard"); else errinf(qstate, val_classification_to_string(subtype)); errinf(qstate, "proof failed"); errinf_origin(qstate, qstate->reply_origin); } return 1; } /** * The Finished state. The validation status (good or bad) has been determined. * * @param qstate: query state. * @param vq: validator query state. * @param ve: validator shared global environment. * @param id: module id. * @return true if the event should be processed further on return, false if * not. */ static int processFinished(struct module_qstate* qstate, struct val_qstate* vq, struct val_env* ve, int id) { enum val_classification subtype = val_classify_response( qstate->query_flags, &qstate->qinfo, &vq->qchase, vq->orig_msg->rep, vq->rrset_skip); /* store overall validation result in orig_msg */ if(vq->rrset_skip == 0) vq->orig_msg->rep->security = vq->chase_reply->security; else if(subtype != VAL_CLASS_REFERRAL || vq->rrset_skip < vq->orig_msg->rep->an_numrrsets + vq->orig_msg->rep->ns_numrrsets) { /* ignore sec status of additional section if a referral * type message skips there and * use the lowest security status as end result. */ if(vq->chase_reply->security < vq->orig_msg->rep->security) vq->orig_msg->rep->security = vq->chase_reply->security; } if(subtype == VAL_CLASS_REFERRAL) { /* for a referral, move to next unchecked rrset and check it*/ vq->rrset_skip = val_next_unchecked(vq->orig_msg->rep, vq->rrset_skip); if(vq->rrset_skip < vq->orig_msg->rep->rrset_count) { /* and restart for this rrset */ verbose(VERB_ALGO, "validator: go to next rrset"); vq->chase_reply->security = sec_status_unchecked; vq->state = VAL_INIT_STATE; return 1; } /* referral chase is done */ } if(vq->chase_reply->security != sec_status_bogus && subtype == VAL_CLASS_CNAME) { /* chase the CNAME; process next part of the message */ if(!val_chase_cname(&vq->qchase, vq->orig_msg->rep, &vq->rrset_skip)) { verbose(VERB_ALGO, "validator: failed to chase CNAME"); vq->orig_msg->rep->security = sec_status_bogus; } else { /* restart process for new qchase at rrset_skip */ log_query_info(VERB_ALGO, "validator: chased to", &vq->qchase); vq->chase_reply->security = sec_status_unchecked; vq->state = VAL_INIT_STATE; return 1; } } if(vq->orig_msg->rep->security == sec_status_secure) { /* If the message is secure, check that all rrsets are * secure (i.e. some inserted RRset for CNAME chain with * a different signer name). And drop additional rrsets * that are not secure (if clean-additional option is set) */ /* this may cause the msg to be marked bogus */ val_check_nonsecure(qstate->env, vq->orig_msg->rep); if(vq->orig_msg->rep->security == sec_status_secure) { log_query_info(VERB_DETAIL, "validation success", &qstate->qinfo); if(!qstate->no_cache_store) { val_neg_addreply(qstate->env->neg_cache, vq->orig_msg->rep); } } } /* if the result is bogus - set message ttl to bogus ttl to avoid * endless bogus revalidation */ if(vq->orig_msg->rep->security == sec_status_bogus) { /* see if we can try again to fetch data */ if(vq->restart_count < VAL_MAX_RESTART_COUNT) { int restart_count = vq->restart_count+1; verbose(VERB_ALGO, "validation failed, " "blacklist and retry to fetch data"); val_blacklist(&qstate->blacklist, qstate->region, qstate->reply_origin, 0); qstate->reply_origin = NULL; qstate->errinf = NULL; memset(vq, 0, sizeof(*vq)); vq->restart_count = restart_count; vq->state = VAL_INIT_STATE; verbose(VERB_ALGO, "pass back to next module"); qstate->ext_state[id] = module_restart_next; return 0; } vq->orig_msg->rep->ttl = ve->bogus_ttl; vq->orig_msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(vq->orig_msg->rep->ttl); vq->orig_msg->rep->serve_expired_ttl = vq->orig_msg->rep->ttl + qstate->env->cfg->serve_expired_ttl; if((qstate->env->cfg->val_log_level >= 1 || qstate->env->cfg->log_servfail) && !qstate->env->cfg->val_log_squelch) { if(qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) log_query_info(NO_VERBOSE, "validation failure", &qstate->qinfo); else { char* err = errinf_to_str_bogus(qstate); if(err) log_info("%s", err); free(err); } } /* * If set, the validator will not make messages bogus, instead * indeterminate is issued, so that no clients receive SERVFAIL. * This allows an operator to run validation 'shadow' without * hurting responses to clients. */ /* If we are in permissive mode, bogus gets indeterminate */ if(qstate->env->cfg->val_permissive_mode) vq->orig_msg->rep->security = sec_status_indeterminate; } if(vq->orig_msg->rep->security == sec_status_secure && qstate->env->cfg->root_key_sentinel && (qstate->qinfo.qtype == LDNS_RR_TYPE_A || qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA)) { char* keytag_start; uint16_t keytag; if(*qstate->qinfo.qname == strlen(SENTINEL_IS) + SENTINEL_KEYTAG_LEN && dname_lab_startswith(qstate->qinfo.qname, SENTINEL_IS, &keytag_start)) { if(sentinel_get_keytag(keytag_start, &keytag) && !anchor_has_keytag(qstate->env->anchors, (uint8_t*)"", 1, 0, vq->qchase.qclass, keytag)) { vq->orig_msg->rep->security = sec_status_secure_sentinel_fail; } } else if(*qstate->qinfo.qname == strlen(SENTINEL_NOT) + SENTINEL_KEYTAG_LEN && dname_lab_startswith(qstate->qinfo.qname, SENTINEL_NOT, &keytag_start)) { if(sentinel_get_keytag(keytag_start, &keytag) && anchor_has_keytag(qstate->env->anchors, (uint8_t*)"", 1, 0, vq->qchase.qclass, keytag)) { vq->orig_msg->rep->security = sec_status_secure_sentinel_fail; } } } /* store results in cache */ if(qstate->query_flags&BIT_RD) { /* if secure, this will override cache anyway, no need * to check if from parentNS */ if(!qstate->no_cache_store) { if(!dns_cache_store(qstate->env, &vq->orig_msg->qinfo, vq->orig_msg->rep, 0, qstate->prefetch_leeway, 0, NULL, qstate->query_flags)) { log_err("out of memory caching validator results"); } } } else { /* for a referral, store the verified RRsets */ /* and this does not get prefetched, so no leeway */ if(!dns_cache_store(qstate->env, &vq->orig_msg->qinfo, vq->orig_msg->rep, 1, 0, 0, NULL, qstate->query_flags)) { log_err("out of memory caching validator results"); } } qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = vq->orig_msg; qstate->ext_state[id] = module_finished; return 0; } /** * Handle validator state. * If a method returns true, the next state is started. If false, then * processing will stop. * @param qstate: query state. * @param vq: validator query state. * @param ve: validator shared global environment. * @param id: module id. */ static void val_handle(struct module_qstate* qstate, struct val_qstate* vq, struct val_env* ve, int id) { int cont = 1; while(cont) { verbose(VERB_ALGO, "val handle processing q with state %s", val_state_to_string(vq->state)); switch(vq->state) { case VAL_INIT_STATE: cont = processInit(qstate, vq, ve, id); break; case VAL_FINDKEY_STATE: cont = processFindKey(qstate, vq, id); break; case VAL_VALIDATE_STATE: cont = processValidate(qstate, vq, ve, id); break; case VAL_FINISHED_STATE: cont = processFinished(qstate, vq, ve, id); break; default: log_warn("validator: invalid state %d", vq->state); cont = 0; break; } } } void val_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct val_env* ve = (struct val_env*)qstate->env->modinfo[id]; struct val_qstate* vq = (struct val_qstate*)qstate->minfo[id]; verbose(VERB_QUERY, "validator[module %d] operate: extstate:%s " "event:%s", id, strextstate(qstate->ext_state[id]), strmodulevent(event)); log_query_info(VERB_QUERY, "validator operate: query", &qstate->qinfo); if(vq && qstate->qinfo.qname != vq->qchase.qname) log_query_info(VERB_QUERY, "validator operate: chased to", &vq->qchase); (void)outbound; if(event == module_event_new || (event == module_event_pass && vq == NULL)) { /* pass request to next module, to get it */ verbose(VERB_ALGO, "validator: pass to next module"); qstate->ext_state[id] = module_wait_module; return; } if(event == module_event_moddone) { /* check if validation is needed */ verbose(VERB_ALGO, "validator: nextmodule returned"); if(!needs_validation(qstate, qstate->return_rcode, qstate->return_msg)) { /* no need to validate this */ if(qstate->return_msg) qstate->return_msg->rep->security = sec_status_indeterminate; qstate->ext_state[id] = module_finished; return; } if(already_validated(qstate->return_msg)) { qstate->ext_state[id] = module_finished; return; } /* qclass ANY should have validation result from spawned * queries. If we get here, it is bogus or an internal error */ if(qstate->qinfo.qclass == LDNS_RR_CLASS_ANY) { verbose(VERB_ALGO, "cannot validate classANY: bogus"); if(qstate->return_msg) qstate->return_msg->rep->security = sec_status_bogus; qstate->ext_state[id] = module_finished; return; } /* create state to start validation */ qstate->ext_state[id] = module_error; /* override this */ if(!vq) { vq = val_new(qstate, id); if(!vq) { log_err("validator: malloc failure"); qstate->ext_state[id] = module_error; return; } } else if(!vq->orig_msg) { if(!val_new_getmsg(qstate, vq)) { log_err("validator: malloc failure"); qstate->ext_state[id] = module_error; return; } } val_handle(qstate, vq, ve, id); return; } if(event == module_event_pass) { qstate->ext_state[id] = module_error; /* override this */ /* continue processing, since val_env exists */ val_handle(qstate, vq, ve, id); return; } log_err("validator: bad event %s", strmodulevent(event)); qstate->ext_state[id] = module_error; return; } /** * Evaluate the response to a priming request. * * @param dnskey_rrset: DNSKEY rrset (can be NULL if none) in prime reply. * (this rrset is allocated in the wrong region, not the qstate). * @param ta: trust anchor. * @param qstate: qstate that needs key. * @param id: module id. * @return new key entry or NULL on allocation failure. * The key entry will either contain a validated DNSKEY rrset, or * represent a Null key (query failed, but validation did not), or a * Bad key (validation failed). */ static struct key_entry_key* primeResponseToKE(struct ub_packed_rrset_key* dnskey_rrset, struct trust_anchor* ta, struct module_qstate* qstate, int id) { struct val_env* ve = (struct val_env*)qstate->env->modinfo[id]; struct key_entry_key* kkey = NULL; enum sec_status sec = sec_status_unchecked; char* reason = NULL; int downprot = qstate->env->cfg->harden_algo_downgrade; if(!dnskey_rrset) { log_nametypeclass(VERB_OPS, "failed to prime trust anchor -- " "could not fetch DNSKEY rrset", ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass); if(qstate->env->cfg->harden_dnssec_stripped) { errinf(qstate, "no DNSKEY rrset"); kkey = key_entry_create_bad(qstate->region, ta->name, ta->namelen, ta->dclass, BOGUS_KEY_TTL, *qstate->env->now); } else kkey = key_entry_create_null(qstate->region, ta->name, ta->namelen, ta->dclass, NULL_KEY_TTL, *qstate->env->now); if(!kkey) { log_err("out of memory: allocate fail prime key"); return NULL; } return kkey; } /* attempt to verify with trust anchor DS and DNSKEY */ kkey = val_verify_new_DNSKEYs_with_ta(qstate->region, qstate->env, ve, dnskey_rrset, ta->ds_rrset, ta->dnskey_rrset, downprot, &reason, qstate); if(!kkey) { log_err("out of memory: verifying prime TA"); return NULL; } if(key_entry_isgood(kkey)) sec = sec_status_secure; else sec = sec_status_bogus; verbose(VERB_DETAIL, "validate keys with anchor(DS): %s", sec_status_to_string(sec)); if(sec != sec_status_secure) { log_nametypeclass(VERB_OPS, "failed to prime trust anchor -- " "DNSKEY rrset is not secure", ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass); /* NOTE: in this case, we should probably reject the trust * anchor for longer, perhaps forever. */ if(qstate->env->cfg->harden_dnssec_stripped) { errinf(qstate, reason); kkey = key_entry_create_bad(qstate->region, ta->name, ta->namelen, ta->dclass, BOGUS_KEY_TTL, *qstate->env->now); } else kkey = key_entry_create_null(qstate->region, ta->name, ta->namelen, ta->dclass, NULL_KEY_TTL, *qstate->env->now); if(!kkey) { log_err("out of memory: allocate null prime key"); return NULL; } return kkey; } log_nametypeclass(VERB_DETAIL, "Successfully primed trust anchor", ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass); return kkey; } /** * In inform supers, with the resulting message and rcode and the current * keyset in the super state, validate the DS response, returning a KeyEntry. * * @param qstate: query state that is validating and asked for a DS. * @param vq: validator query state * @param id: module id. * @param rcode: rcode result value. * @param msg: result message (if rcode is OK). * @param qinfo: from the sub query state, query info. * @param ke: the key entry to return. It returns * is_bad if the DS response fails to validate, is_null if the * DS response indicated an end to secure space, is_good if the DS * validated. It returns ke=NULL if the DS response indicated that the * request wasn't a delegation point. * @return 0 on servfail error (malloc failure). */ static int ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq, int id, int rcode, struct dns_msg* msg, struct query_info* qinfo, struct key_entry_key** ke) { struct val_env* ve = (struct val_env*)qstate->env->modinfo[id]; char* reason = NULL; enum val_classification subtype; if(rcode != LDNS_RCODE_NOERROR) { char rc[16]; rc[0]=0; (void)sldns_wire2str_rcode_buf(rcode, rc, sizeof(rc)); /* errors here pretty much break validation */ verbose(VERB_DETAIL, "DS response was error, thus bogus"); errinf(qstate, rc); errinf(qstate, "no DS"); goto return_bogus; } subtype = val_classify_response(BIT_RD, qinfo, qinfo, msg->rep, 0); if(subtype == VAL_CLASS_POSITIVE) { struct ub_packed_rrset_key* ds; enum sec_status sec; ds = reply_find_answer_rrset(qinfo, msg->rep); /* If there was no DS rrset, then we have mis-classified * this message. */ if(!ds) { log_warn("internal error: POSITIVE DS response was " "missing DS."); errinf(qstate, "no DS record"); goto return_bogus; } /* Verify only returns BOGUS or SECURE. If the rrset is * bogus, then we are done. */ sec = val_verify_rrset_entry(qstate->env, ve, ds, vq->key_entry, &reason, LDNS_SECTION_ANSWER, qstate); if(sec != sec_status_secure) { verbose(VERB_DETAIL, "DS rrset in DS response did " "not verify"); errinf(qstate, reason); goto return_bogus; } /* If the DS rrset validates, we still have to make sure * that they are usable. */ if(!val_dsset_isusable(ds)) { /* If they aren't usable, then we treat it like * there was no DS. */ *ke = key_entry_create_null(qstate->region, qinfo->qname, qinfo->qname_len, qinfo->qclass, ub_packed_rrset_ttl(ds), *qstate->env->now); return (*ke) != NULL; } /* Otherwise, we return the positive response. */ log_query_info(VERB_DETAIL, "validated DS", qinfo); *ke = key_entry_create_rrset(qstate->region, qinfo->qname, qinfo->qname_len, qinfo->qclass, ds, NULL, *qstate->env->now); return (*ke) != NULL; } else if(subtype == VAL_CLASS_NODATA || subtype == VAL_CLASS_NAMEERROR) { /* NODATA means that the qname exists, but that there was * no DS. This is a pretty normal case. */ time_t proof_ttl = 0; enum sec_status sec; /* make sure there are NSECs or NSEC3s with signatures */ if(!val_has_signed_nsecs(msg->rep, &reason)) { verbose(VERB_ALGO, "no NSECs: %s", reason); errinf(qstate, reason); goto return_bogus; } /* For subtype Name Error. * attempt ANS 2.8.1.0 compatibility where it sets rcode * to nxdomain, but really this is an Nodata/Noerror response. * Find and prove the empty nonterminal in that case */ /* Try to prove absence of the DS with NSEC */ sec = val_nsec_prove_nodata_dsreply( qstate->env, ve, qinfo, msg->rep, vq->key_entry, &proof_ttl, &reason, qstate); switch(sec) { case sec_status_secure: verbose(VERB_DETAIL, "NSEC RRset for the " "referral proved no DS."); *ke = key_entry_create_null(qstate->region, qinfo->qname, qinfo->qname_len, qinfo->qclass, proof_ttl, *qstate->env->now); return (*ke) != NULL; case sec_status_insecure: verbose(VERB_DETAIL, "NSEC RRset for the " "referral proved not a delegation point"); *ke = NULL; return 1; case sec_status_bogus: verbose(VERB_DETAIL, "NSEC RRset for the " "referral did not prove no DS."); errinf(qstate, reason); goto return_bogus; case sec_status_unchecked: default: /* NSEC proof did not work, try next */ break; } sec = nsec3_prove_nods(qstate->env, ve, msg->rep->rrsets + msg->rep->an_numrrsets, msg->rep->ns_numrrsets, qinfo, vq->key_entry, &reason, qstate); switch(sec) { case sec_status_insecure: /* case insecure also continues to unsigned * space. If nsec3-iter-count too high or * optout, then treat below as unsigned */ case sec_status_secure: verbose(VERB_DETAIL, "NSEC3s for the " "referral proved no DS."); *ke = key_entry_create_null(qstate->region, qinfo->qname, qinfo->qname_len, qinfo->qclass, proof_ttl, *qstate->env->now); return (*ke) != NULL; case sec_status_indeterminate: verbose(VERB_DETAIL, "NSEC3s for the " "referral proved no delegation"); *ke = NULL; return 1; case sec_status_bogus: verbose(VERB_DETAIL, "NSEC3s for the " "referral did not prove no DS."); errinf(qstate, reason); goto return_bogus; case sec_status_unchecked: default: /* NSEC3 proof did not work */ break; } /* Apparently, no available NSEC/NSEC3 proved NODATA, so * this is BOGUS. */ verbose(VERB_DETAIL, "DS %s ran out of options, so return " "bogus", val_classification_to_string(subtype)); errinf(qstate, "no DS but also no proof of that"); goto return_bogus; } else if(subtype == VAL_CLASS_CNAME || subtype == VAL_CLASS_CNAMENOANSWER) { /* if the CNAME matches the exact name we want and is signed * properly, then also, we are sure that no DS exists there, * much like a NODATA proof */ enum sec_status sec; struct ub_packed_rrset_key* cname; cname = reply_find_rrset_section_an(msg->rep, qinfo->qname, qinfo->qname_len, LDNS_RR_TYPE_CNAME, qinfo->qclass); if(!cname) { errinf(qstate, "validator classified CNAME but no " "CNAME of the queried name for DS"); goto return_bogus; } if(((struct packed_rrset_data*)cname->entry.data)->rrsig_count == 0) { if(msg->rep->an_numrrsets != 0 && ntohs(msg->rep-> rrsets[0]->rk.type)==LDNS_RR_TYPE_DNAME) { errinf(qstate, "DS got DNAME answer"); } else { errinf(qstate, "DS got unsigned CNAME answer"); } goto return_bogus; } sec = val_verify_rrset_entry(qstate->env, ve, cname, vq->key_entry, &reason, LDNS_SECTION_ANSWER, qstate); if(sec == sec_status_secure) { verbose(VERB_ALGO, "CNAME validated, " "proof that DS does not exist"); /* and that it is not a referral point */ *ke = NULL; return 1; } errinf(qstate, "CNAME in DS response was not secure."); errinf(qstate, reason); goto return_bogus; } else { verbose(VERB_QUERY, "Encountered an unhandled type of " "DS response, thus bogus."); errinf(qstate, "no DS and"); if(FLAGS_GET_RCODE(msg->rep->flags) != LDNS_RCODE_NOERROR) { char rc[16]; rc[0]=0; (void)sldns_wire2str_rcode_buf((int)FLAGS_GET_RCODE( msg->rep->flags), rc, sizeof(rc)); errinf(qstate, rc); } else errinf(qstate, val_classification_to_string(subtype)); errinf(qstate, "message fails to prove that"); goto return_bogus; } return_bogus: *ke = key_entry_create_bad(qstate->region, qinfo->qname, qinfo->qname_len, qinfo->qclass, BOGUS_KEY_TTL, *qstate->env->now); return (*ke) != NULL; } /** * Process DS response. Called from inform_supers. * Because it is in inform_supers, the mesh itself is busy doing callbacks * for a state that is to be deleted soon; don't touch the mesh; instead * set a state in the super, as the super will be reactivated soon. * Perform processing to determine what state to set in the super. * * @param qstate: query state that is validating and asked for a DS. * @param vq: validator query state * @param id: module id. * @param rcode: rcode result value. * @param msg: result message (if rcode is OK). * @param qinfo: from the sub query state, query info. * @param origin: the origin of msg. */ static void process_ds_response(struct module_qstate* qstate, struct val_qstate* vq, int id, int rcode, struct dns_msg* msg, struct query_info* qinfo, struct sock_list* origin) { struct key_entry_key* dske = NULL; uint8_t* olds = vq->empty_DS_name; vq->empty_DS_name = NULL; if(!ds_response_to_ke(qstate, vq, id, rcode, msg, qinfo, &dske)) { log_err("malloc failure in process_ds_response"); vq->key_entry = NULL; /* make it error */ vq->state = VAL_VALIDATE_STATE; return; } if(dske == NULL) { vq->empty_DS_name = regional_alloc_init(qstate->region, qinfo->qname, qinfo->qname_len); if(!vq->empty_DS_name) { log_err("malloc failure in empty_DS_name"); vq->key_entry = NULL; /* make it error */ vq->state = VAL_VALIDATE_STATE; return; } vq->empty_DS_len = qinfo->qname_len; vq->chain_blacklist = NULL; /* ds response indicated that we aren't on a delegation point. * Keep the forState.state on FINDKEY. */ } else if(key_entry_isgood(dske)) { vq->ds_rrset = key_entry_get_rrset(dske, qstate->region); if(!vq->ds_rrset) { log_err("malloc failure in process DS"); vq->key_entry = NULL; /* make it error */ vq->state = VAL_VALIDATE_STATE; return; } vq->chain_blacklist = NULL; /* fresh blacklist for next part*/ /* Keep the forState.state on FINDKEY. */ } else if(key_entry_isbad(dske) && vq->restart_count < VAL_MAX_RESTART_COUNT) { vq->empty_DS_name = olds; val_blacklist(&vq->chain_blacklist, qstate->region, origin, 1); qstate->errinf = NULL; vq->restart_count++; } else { if(key_entry_isbad(dske)) { errinf_origin(qstate, origin); errinf_dname(qstate, "for DS", qinfo->qname); } /* NOTE: the reason for the DS to be not good (that is, * either bad or null) should have been logged by * dsResponseToKE. */ vq->key_entry = dske; /* The FINDKEY phase has ended, so move on. */ vq->state = VAL_VALIDATE_STATE; } } /** * Process DNSKEY response. Called from inform_supers. * Sets the key entry in the state. * Because it is in inform_supers, the mesh itself is busy doing callbacks * for a state that is to be deleted soon; don't touch the mesh; instead * set a state in the super, as the super will be reactivated soon. * Perform processing to determine what state to set in the super. * * @param qstate: query state that is validating and asked for a DNSKEY. * @param vq: validator query state * @param id: module id. * @param rcode: rcode result value. * @param msg: result message (if rcode is OK). * @param qinfo: from the sub query state, query info. * @param origin: the origin of msg. */ static void process_dnskey_response(struct module_qstate* qstate, struct val_qstate* vq, int id, int rcode, struct dns_msg* msg, struct query_info* qinfo, struct sock_list* origin) { struct val_env* ve = (struct val_env*)qstate->env->modinfo[id]; struct key_entry_key* old = vq->key_entry; struct ub_packed_rrset_key* dnskey = NULL; int downprot; char* reason = NULL; if(rcode == LDNS_RCODE_NOERROR) dnskey = reply_find_answer_rrset(qinfo, msg->rep); if(dnskey == NULL) { /* bad response */ verbose(VERB_DETAIL, "Missing DNSKEY RRset in response to " "DNSKEY query."); if(vq->restart_count < VAL_MAX_RESTART_COUNT) { val_blacklist(&vq->chain_blacklist, qstate->region, origin, 1); qstate->errinf = NULL; vq->restart_count++; return; } vq->key_entry = key_entry_create_bad(qstate->region, qinfo->qname, qinfo->qname_len, qinfo->qclass, BOGUS_KEY_TTL, *qstate->env->now); if(!vq->key_entry) { log_err("alloc failure in missing dnskey response"); /* key_entry is NULL for failure in Validate */ } errinf(qstate, "No DNSKEY record"); errinf_origin(qstate, origin); errinf_dname(qstate, "for key", qinfo->qname); vq->state = VAL_VALIDATE_STATE; return; } if(!vq->ds_rrset) { log_err("internal error: no DS rrset for new DNSKEY response"); vq->key_entry = NULL; vq->state = VAL_VALIDATE_STATE; return; } downprot = qstate->env->cfg->harden_algo_downgrade; vq->key_entry = val_verify_new_DNSKEYs(qstate->region, qstate->env, ve, dnskey, vq->ds_rrset, downprot, &reason, qstate); if(!vq->key_entry) { log_err("out of memory in verify new DNSKEYs"); vq->state = VAL_VALIDATE_STATE; return; } /* If the key entry isBad or isNull, then we can move on to the next * state. */ if(!key_entry_isgood(vq->key_entry)) { if(key_entry_isbad(vq->key_entry)) { if(vq->restart_count < VAL_MAX_RESTART_COUNT) { val_blacklist(&vq->chain_blacklist, qstate->region, origin, 1); qstate->errinf = NULL; vq->restart_count++; vq->key_entry = old; return; } verbose(VERB_DETAIL, "Did not match a DS to a DNSKEY, " "thus bogus."); errinf(qstate, reason); errinf_origin(qstate, origin); errinf_dname(qstate, "for key", qinfo->qname); } vq->chain_blacklist = NULL; vq->state = VAL_VALIDATE_STATE; return; } vq->chain_blacklist = NULL; qstate->errinf = NULL; /* The DNSKEY validated, so cache it as a trusted key rrset. */ key_cache_insert(ve->kcache, vq->key_entry, qstate); /* If good, we stay in the FINDKEY state. */ log_query_info(VERB_DETAIL, "validated DNSKEY", qinfo); } /** * Process prime response * Sets the key entry in the state. * * @param qstate: query state that is validating and primed a trust anchor. * @param vq: validator query state * @param id: module id. * @param rcode: rcode result value. * @param msg: result message (if rcode is OK). * @param origin: the origin of msg. */ static void process_prime_response(struct module_qstate* qstate, struct val_qstate* vq, int id, int rcode, struct dns_msg* msg, struct sock_list* origin) { struct val_env* ve = (struct val_env*)qstate->env->modinfo[id]; struct ub_packed_rrset_key* dnskey_rrset = NULL; struct trust_anchor* ta = anchor_find(qstate->env->anchors, vq->trust_anchor_name, vq->trust_anchor_labs, vq->trust_anchor_len, vq->qchase.qclass); if(!ta) { /* trust anchor revoked, restart with less anchors */ vq->state = VAL_INIT_STATE; if(!vq->trust_anchor_name) vq->state = VAL_VALIDATE_STATE; /* break a loop */ vq->trust_anchor_name = NULL; return; } /* Fetch and validate the keyEntry that corresponds to the * current trust anchor. */ if(rcode == LDNS_RCODE_NOERROR) { dnskey_rrset = reply_find_rrset_section_an(msg->rep, ta->name, ta->namelen, LDNS_RR_TYPE_DNSKEY, ta->dclass); } if(ta->autr) { if(!autr_process_prime(qstate->env, ve, ta, dnskey_rrset, qstate)) { /* trust anchor revoked, restart with less anchors */ vq->state = VAL_INIT_STATE; vq->trust_anchor_name = NULL; return; } } vq->key_entry = primeResponseToKE(dnskey_rrset, ta, qstate, id); lock_basic_unlock(&ta->lock); if(vq->key_entry) { if(key_entry_isbad(vq->key_entry) && vq->restart_count < VAL_MAX_RESTART_COUNT) { val_blacklist(&vq->chain_blacklist, qstate->region, origin, 1); qstate->errinf = NULL; vq->restart_count++; vq->key_entry = NULL; vq->state = VAL_INIT_STATE; return; } vq->chain_blacklist = NULL; errinf_origin(qstate, origin); errinf_dname(qstate, "for trust anchor", ta->name); /* store the freshly primed entry in the cache */ key_cache_insert(ve->kcache, vq->key_entry, qstate); } /* If the result of the prime is a null key, skip the FINDKEY state.*/ if(!vq->key_entry || key_entry_isnull(vq->key_entry) || key_entry_isbad(vq->key_entry)) { vq->state = VAL_VALIDATE_STATE; } /* the qstate will be reactivated after inform_super is done */ } /* * inform validator super. * * @param qstate: query state that finished. * @param id: module id. * @param super: the qstate to inform. */ void val_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { struct val_qstate* vq = (struct val_qstate*)super->minfo[id]; log_query_info(VERB_ALGO, "validator: inform_super, sub is", &qstate->qinfo); log_query_info(VERB_ALGO, "super is", &super->qinfo); if(!vq) { verbose(VERB_ALGO, "super: has no validator state"); return; } if(vq->wait_prime_ta) { vq->wait_prime_ta = 0; process_prime_response(super, vq, id, qstate->return_rcode, qstate->return_msg, qstate->reply_origin); return; } if(qstate->qinfo.qtype == LDNS_RR_TYPE_DS) { process_ds_response(super, vq, id, qstate->return_rcode, qstate->return_msg, &qstate->qinfo, qstate->reply_origin); return; } else if(qstate->qinfo.qtype == LDNS_RR_TYPE_DNSKEY) { process_dnskey_response(super, vq, id, qstate->return_rcode, qstate->return_msg, &qstate->qinfo, qstate->reply_origin); return; } log_err("internal error in validator: no inform_supers possible"); } void val_clear(struct module_qstate* qstate, int id) { if(!qstate) return; /* everything is allocated in the region, so assign NULL */ qstate->minfo[id] = NULL; } size_t val_get_mem(struct module_env* env, int id) { struct val_env* ve = (struct val_env*)env->modinfo[id]; if(!ve) return 0; return sizeof(*ve) + key_cache_get_mem(ve->kcache) + val_neg_get_mem(ve->neg_cache) + sizeof(size_t)*2*ve->nsec3_keyiter_count; } /** * The validator function block */ static struct module_func_block val_block = { "validator", &val_init, &val_deinit, &val_operate, &val_inform_super, &val_clear, &val_get_mem }; struct module_func_block* val_get_funcblock(void) { return &val_block; } const char* val_state_to_string(enum val_state state) { switch(state) { case VAL_INIT_STATE: return "VAL_INIT_STATE"; case VAL_FINDKEY_STATE: return "VAL_FINDKEY_STATE"; case VAL_VALIDATE_STATE: return "VAL_VALIDATE_STATE"; case VAL_FINISHED_STATE: return "VAL_FINISHED_STATE"; } return "UNKNOWN VALIDATOR STATE"; } unbound-1.13.1/validator/val_neg.h0000644000175000017500000002367714010434640016467 0ustar wouterwouter/* * validator/val_neg.h - validator aggressive negative caching functions. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with aggressive negative caching. * This creates new denials of existence, and proofs for absence of types * from cached NSEC records. */ #ifndef VALIDATOR_VAL_NEG_H #define VALIDATOR_VAL_NEG_H #include "util/locks.h" #include "util/rbtree.h" struct sldns_buffer; struct val_neg_data; struct config_file; struct reply_info; struct rrset_cache; struct regional; struct query_info; struct dns_msg; struct ub_packed_rrset_key; /** * The negative cache. It is shared between the threads, so locked. * Kept as validator-environ-state. It refers back to the rrset cache for * data elements. It can be out of date and contain conflicting data * from zone content changes. * It contains a tree of zones, every zone has a tree of data elements. * The data elements are part of one big LRU list, with one memory counter. */ struct val_neg_cache { /** the big lock on the negative cache. Because we use a rbtree * for the data (quick lookup), we need a big lock */ lock_basic_type lock; /** The zone rbtree. contents sorted canonical, type val_neg_zone */ rbtree_type tree; /** the first in linked list of LRU of val_neg_data */ struct val_neg_data* first; /** last in lru (least recently used element) */ struct val_neg_data* last; /** current memory in use (bytes) */ size_t use; /** max memory to use (bytes) */ size_t max; /** max nsec3 iterations allowed */ size_t nsec3_max_iter; /** number of times neg cache records were used to generate NOERROR * responses. */ size_t num_neg_cache_noerror; /** number of times neg cache records were used to generate NXDOMAIN * responses. */ size_t num_neg_cache_nxdomain; }; /** * Per Zone aggressive negative caching data. */ struct val_neg_zone { /** rbtree node element, key is this struct: the name, class */ rbnode_type node; /** name; the key */ uint8_t* name; /** length of name */ size_t len; /** labels in name */ int labs; /** pointer to parent zone in the negative cache */ struct val_neg_zone* parent; /** the number of elements, including this one and the ones whose * parents (-parents) include this one, that are in_use * No elements have a count of zero, those are removed. */ int count; /** if 0: NSEC zone, else NSEC3 hash algorithm in use */ int nsec3_hash; /** nsec3 iteration count in use */ size_t nsec3_iter; /** nsec3 salt in use */ uint8_t* nsec3_salt; /** length of salt in bytes */ size_t nsec3_saltlen; /** tree of NSEC data for this zone, sorted canonical * by NSEC owner name */ rbtree_type tree; /** class of node; host order */ uint16_t dclass; /** if this element is in use, boolean */ uint8_t in_use; }; /** * Data element for aggressive negative caching. * The tree of these elements acts as an index onto the rrset cache. * It shows the NSEC records that (may) exist and are (possibly) secure. * The rbtree allows for logN search for a covering NSEC record. * To make tree insertion and deletion logN too, all the parent (one label * less than the name) data elements are also in the rbtree, with a usage * count for every data element. * There is no actual data stored in this data element, if it is in_use, * then the data can (possibly) be found in the rrset cache. */ struct val_neg_data { /** rbtree node element, key is this struct: the name */ rbnode_type node; /** name; the key */ uint8_t* name; /** length of name */ size_t len; /** labels in name */ int labs; /** pointer to parent node in the negative cache */ struct val_neg_data* parent; /** the number of elements, including this one and the ones whose * parents (-parents) include this one, that are in use * No elements have a count of zero, those are removed. */ int count; /** the zone that this denial is part of */ struct val_neg_zone* zone; /** previous in LRU */ struct val_neg_data* prev; /** next in LRU (next element was less recently used) */ struct val_neg_data* next; /** if this element is in use, boolean */ uint8_t in_use; }; /** * Create negative cache * @param cfg: config options. * @param maxiter: max nsec3 iterations allowed. * @return neg cache, empty or NULL on failure. */ struct val_neg_cache* val_neg_create(struct config_file* cfg, size_t maxiter); /** * see how much memory is in use by the negative cache. * @param neg: negative cache * @return number of bytes in use. */ size_t val_neg_get_mem(struct val_neg_cache* neg); /** * Destroy negative cache. There must no longer be any other threads. * @param neg: negative cache. */ void neg_cache_delete(struct val_neg_cache* neg); /** * Comparison function for rbtree val neg data elements */ int val_neg_data_compare(const void* a, const void* b); /** * Comparison function for rbtree val neg zone elements */ int val_neg_zone_compare(const void* a, const void* b); /** * Insert NSECs from this message into the negative cache for reference. * @param neg: negative cache * @param rep: reply with NSECs. * Errors are ignored, means that storage is omitted. */ void val_neg_addreply(struct val_neg_cache* neg, struct reply_info* rep); /** * Insert NSECs from this referral into the negative cache for reference. * @param neg: negative cache * @param rep: referral reply with NS, NSECs. * @param zone: bailiwick for the referral. * Errors are ignored, means that storage is omitted. */ void val_neg_addreferral(struct val_neg_cache* neg, struct reply_info* rep, uint8_t* zone); /** * For the given query, try to get a reply out of the negative cache. * The reply still needs to be validated. * @param neg: negative cache. * @param qinfo: query * @param region: where to allocate reply. * @param rrset_cache: rrset cache. * @param buf: temporary buffer. * @param now: to check TTLs against. * @param addsoa: if true, produce result for external consumption. * if false, do not add SOA - for unbound-internal consumption. * @param topname: do not look higher than this name, * so that the result cannot be taken from a zone above the current * trust anchor. Which could happen with multiple islands of trust. * if NULL, then no trust anchor is used, but also the algorithm becomes * more conservative, especially for opt-out zones, since the receiver * may have a trust-anchor below the optout and thus the optout cannot * be used to create a proof from the negative cache. * @param cfg: config options. * @return a reply message if something was found. * This reply may still need validation. * NULL if nothing found (or out of memory). */ struct dns_msg* val_neg_getmsg(struct val_neg_cache* neg, struct query_info* qinfo, struct regional* region, struct rrset_cache* rrset_cache, struct sldns_buffer* buf, time_t now, int addsoa, uint8_t* topname, struct config_file* cfg); /**** functions exposed for unit test ****/ /** * Insert data into the data tree of a zone * Does not do locking. * @param neg: negative cache * @param zone: zone to insert into * @param nsec: record to insert. */ void neg_insert_data(struct val_neg_cache* neg, struct val_neg_zone* zone, struct ub_packed_rrset_key* nsec); /** * Delete a data element from the negative cache. * May delete other data elements to keep tree coherent, or * only mark the element as 'not in use'. * Does not do locking. * @param neg: negative cache. * @param el: data element to delete. */ void neg_delete_data(struct val_neg_cache* neg, struct val_neg_data* el); /** * Find the given zone, from the SOA owner name and class * Does not do locking. * @param neg: negative cache * @param nm: what to look for. * @param len: length of nm * @param dclass: class to look for. * @return zone or NULL if not found. */ struct val_neg_zone* neg_find_zone(struct val_neg_cache* neg, uint8_t* nm, size_t len, uint16_t dclass); /** * Create a new zone. * Does not do locking. * @param neg: negative cache * @param nm: what to look for. * @param nm_len: length of name. * @param dclass: class of zone, host order. * @return zone or NULL if out of memory. */ struct val_neg_zone* neg_create_zone(struct val_neg_cache* neg, uint8_t* nm, size_t nm_len, uint16_t dclass); /** * take a zone into use. increases counts of parents. * Does not do locking. * @param zone: zone to take into use. */ void val_neg_zone_take_inuse(struct val_neg_zone* zone); #endif /* VALIDATOR_VAL_NEG_H */ unbound-1.13.1/validator/autotrust.c0000644000175000017500000021257314010434640017114 0ustar wouterwouter/* * validator/autotrust.c - RFC5011 trust anchor management for unbound. * * Copyright (c) 2009, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * Contains autotrust implementation. The implementation was taken from * the autotrust daemon (BSD licensed), written by Matthijs Mekking. * It was modified to fit into unbound. The state table process is the same. */ #include "config.h" #include "validator/autotrust.h" #include "validator/val_anchor.h" #include "validator/val_utils.h" #include "validator/val_sigcrypt.h" #include "util/data/dname.h" #include "util/data/packed_rrset.h" #include "util/log.h" #include "util/module.h" #include "util/net_help.h" #include "util/config_file.h" #include "util/regional.h" #include "util/random.h" #include "util/data/msgparse.h" #include "services/mesh.h" #include "services/cache/rrset.h" #include "validator/val_kcache.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" #include "sldns/keyraw.h" #include "sldns/rrdef.h" #include #include /** number of times a key must be seen before it can become valid */ #define MIN_PENDINGCOUNT 2 /** Event: Revoked */ static void do_revoked(struct module_env* env, struct autr_ta* anchor, int* c); struct autr_global_data* autr_global_create(void) { struct autr_global_data* global; global = (struct autr_global_data*)malloc(sizeof(*global)); if(!global) return NULL; rbtree_init(&global->probe, &probetree_cmp); return global; } void autr_global_delete(struct autr_global_data* global) { if(!global) return; /* elements deleted by parent */ free(global); } int probetree_cmp(const void* x, const void* y) { struct trust_anchor* a = (struct trust_anchor*)x; struct trust_anchor* b = (struct trust_anchor*)y; log_assert(a->autr && b->autr); if(a->autr->next_probe_time < b->autr->next_probe_time) return -1; if(a->autr->next_probe_time > b->autr->next_probe_time) return 1; /* time is equal, sort on trust point identity */ return anchor_cmp(x, y); } size_t autr_get_num_anchors(struct val_anchors* anchors) { size_t res = 0; if(!anchors) return 0; lock_basic_lock(&anchors->lock); if(anchors->autr) res = anchors->autr->probe.count; lock_basic_unlock(&anchors->lock); return res; } /** Position in string */ static int position_in_string(char *str, const char* sub) { char* pos = strstr(str, sub); if(pos) return (int)(pos-str)+(int)strlen(sub); return -1; } /** Debug routine to print pretty key information */ static void verbose_key(struct autr_ta* ta, enum verbosity_value level, const char* format, ...) ATTR_FORMAT(printf, 3, 4); /** * Implementation of debug pretty key print * @param ta: trust anchor key with DNSKEY data. * @param level: verbosity level to print at. * @param format: printf style format string. */ static void verbose_key(struct autr_ta* ta, enum verbosity_value level, const char* format, ...) { va_list args; va_start(args, format); if(verbosity >= level) { char* str = sldns_wire2str_dname(ta->rr, ta->dname_len); int keytag = (int)sldns_calc_keytag_raw(sldns_wirerr_get_rdata( ta->rr, ta->rr_len, ta->dname_len), sldns_wirerr_get_rdatalen(ta->rr, ta->rr_len, ta->dname_len)); char msg[MAXSYSLOGMSGLEN]; vsnprintf(msg, sizeof(msg), format, args); verbose(level, "%s key %d %s", str?str:"??", keytag, msg); free(str); } va_end(args); } /** * Parse comments * @param str: to parse * @param ta: trust key autotrust metadata * @return false on failure. */ static int parse_comments(char* str, struct autr_ta* ta) { int len = (int)strlen(str), pos = 0, timestamp = 0; char* comment = (char*) malloc(sizeof(char)*len+1); char* comments = comment; if(!comment) { log_err("malloc failure in parse"); return 0; } /* skip over whitespace and data at start of line */ while (*str != '\0' && *str != ';') str++; if (*str == ';') str++; /* copy comments */ while (*str != '\0') { *comments = *str; comments++; str++; } *comments = '\0'; comments = comment; /* read state */ pos = position_in_string(comments, "state="); if (pos >= (int) strlen(comments)) { log_err("parse error"); free(comment); return 0; } if (pos <= 0) ta->s = AUTR_STATE_VALID; else { int s = (int) comments[pos] - '0'; switch(s) { case AUTR_STATE_START: case AUTR_STATE_ADDPEND: case AUTR_STATE_VALID: case AUTR_STATE_MISSING: case AUTR_STATE_REVOKED: case AUTR_STATE_REMOVED: ta->s = s; break; default: verbose_key(ta, VERB_OPS, "has undefined " "state, considered NewKey"); ta->s = AUTR_STATE_START; break; } } /* read pending count */ pos = position_in_string(comments, "count="); if (pos >= (int) strlen(comments)) { log_err("parse error"); free(comment); return 0; } if (pos <= 0) ta->pending_count = 0; else { comments += pos; ta->pending_count = (uint8_t)atoi(comments); } /* read last change */ pos = position_in_string(comments, "lastchange="); if (pos >= (int) strlen(comments)) { log_err("parse error"); free(comment); return 0; } if (pos >= 0) { comments += pos; timestamp = atoi(comments); } if (pos < 0 || !timestamp) ta->last_change = 0; else ta->last_change = (time_t)timestamp; free(comment); return 1; } /** Check if a line contains data (besides comments) */ static int str_contains_data(char* str, char comment) { while (*str != '\0') { if (*str == comment || *str == '\n') return 0; if (*str != ' ' && *str != '\t') return 1; str++; } return 0; } /** Get DNSKEY flags * rdata without rdatalen in front of it. */ static int dnskey_flags(uint16_t t, uint8_t* rdata, size_t len) { uint16_t f; if(t != LDNS_RR_TYPE_DNSKEY) return 0; if(len < 2) return 0; memmove(&f, rdata, 2); f = ntohs(f); return (int)f; } /** Check if KSK DNSKEY. * pass rdata without rdatalen in front of it */ static int rr_is_dnskey_sep(uint16_t t, uint8_t* rdata, size_t len) { return (dnskey_flags(t, rdata, len)&DNSKEY_BIT_SEP); } /** Check if TA is KSK DNSKEY */ static int ta_is_dnskey_sep(struct autr_ta* ta) { return (dnskey_flags( sldns_wirerr_get_type(ta->rr, ta->rr_len, ta->dname_len), sldns_wirerr_get_rdata(ta->rr, ta->rr_len, ta->dname_len), sldns_wirerr_get_rdatalen(ta->rr, ta->rr_len, ta->dname_len) ) & DNSKEY_BIT_SEP); } /** Check if REVOKED DNSKEY * pass rdata without rdatalen in front of it */ static int rr_is_dnskey_revoked(uint16_t t, uint8_t* rdata, size_t len) { return (dnskey_flags(t, rdata, len)&LDNS_KEY_REVOKE_KEY); } /** create ta */ static struct autr_ta* autr_ta_create(uint8_t* rr, size_t rr_len, size_t dname_len) { struct autr_ta* ta = (struct autr_ta*)calloc(1, sizeof(*ta)); if(!ta) { free(rr); return NULL; } ta->rr = rr; ta->rr_len = rr_len; ta->dname_len = dname_len; return ta; } /** create tp */ static struct trust_anchor* autr_tp_create(struct val_anchors* anchors, uint8_t* own, size_t own_len, uint16_t dc) { struct trust_anchor* tp = (struct trust_anchor*)calloc(1, sizeof(*tp)); if(!tp) return NULL; tp->name = memdup(own, own_len); if(!tp->name) { free(tp); return NULL; } tp->namelen = own_len; tp->namelabs = dname_count_labels(tp->name); tp->node.key = tp; tp->dclass = dc; tp->autr = (struct autr_point_data*)calloc(1, sizeof(*tp->autr)); if(!tp->autr) { free(tp->name); free(tp); return NULL; } tp->autr->pnode.key = tp; lock_basic_lock(&anchors->lock); if(!rbtree_insert(anchors->tree, &tp->node)) { lock_basic_unlock(&anchors->lock); log_err("trust anchor presented twice"); free(tp->name); free(tp->autr); free(tp); return NULL; } if(!rbtree_insert(&anchors->autr->probe, &tp->autr->pnode)) { (void)rbtree_delete(anchors->tree, tp); lock_basic_unlock(&anchors->lock); log_err("trust anchor in probetree twice"); free(tp->name); free(tp->autr); free(tp); return NULL; } lock_basic_init(&tp->lock); lock_protect(&tp->lock, tp, sizeof(*tp)); lock_protect(&tp->lock, tp->autr, sizeof(*tp->autr)); lock_basic_unlock(&anchors->lock); return tp; } /** delete assembled rrsets */ static void autr_rrset_delete(struct ub_packed_rrset_key* r) { if(r) { free(r->rk.dname); free(r->entry.data); free(r); } } void autr_point_delete(struct trust_anchor* tp) { if(!tp) return; lock_unprotect(&tp->lock, tp); lock_unprotect(&tp->lock, tp->autr); lock_basic_destroy(&tp->lock); autr_rrset_delete(tp->ds_rrset); autr_rrset_delete(tp->dnskey_rrset); if(tp->autr) { struct autr_ta* p = tp->autr->keys, *np; while(p) { np = p->next; free(p->rr); free(p); p = np; } free(tp->autr->file); free(tp->autr); } free(tp->name); free(tp); } /** find or add a new trust point for autotrust */ static struct trust_anchor* find_add_tp(struct val_anchors* anchors, uint8_t* rr, size_t rr_len, size_t dname_len) { struct trust_anchor* tp; tp = anchor_find(anchors, rr, dname_count_labels(rr), dname_len, sldns_wirerr_get_class(rr, rr_len, dname_len)); if(tp) { if(!tp->autr) { log_err("anchor cannot be with and without autotrust"); lock_basic_unlock(&tp->lock); return NULL; } return tp; } tp = autr_tp_create(anchors, rr, dname_len, sldns_wirerr_get_class(rr, rr_len, dname_len)); if(!tp) return NULL; lock_basic_lock(&tp->lock); return tp; } /** Add trust anchor from RR */ static struct autr_ta* add_trustanchor_frm_rr(struct val_anchors* anchors, uint8_t* rr, size_t rr_len, size_t dname_len, struct trust_anchor** tp) { struct autr_ta* ta = autr_ta_create(rr, rr_len, dname_len); if(!ta) return NULL; *tp = find_add_tp(anchors, rr, rr_len, dname_len); if(!*tp) { free(ta->rr); free(ta); return NULL; } /* add ta to tp */ ta->next = (*tp)->autr->keys; (*tp)->autr->keys = ta; lock_basic_unlock(&(*tp)->lock); return ta; } /** * Add new trust anchor from a string in file. * @param anchors: all anchors * @param str: string with anchor and comments, if any comments. * @param tp: trust point returned. * @param origin: what to use for @ * @param origin_len: length of origin * @param prev: previous rr name * @param prev_len: length of prev * @param skip: if true, the result is NULL, but not an error, skip it. * @return new key in trust point. */ static struct autr_ta* add_trustanchor_frm_str(struct val_anchors* anchors, char* str, struct trust_anchor** tp, uint8_t* origin, size_t origin_len, uint8_t** prev, size_t* prev_len, int* skip) { uint8_t rr[LDNS_RR_BUF_SIZE]; size_t rr_len = sizeof(rr), dname_len; uint8_t* drr; int lstatus; if (!str_contains_data(str, ';')) { *skip = 1; return NULL; /* empty line */ } if(0 != (lstatus = sldns_str2wire_rr_buf(str, rr, &rr_len, &dname_len, 0, origin, origin_len, *prev, *prev_len))) { log_err("ldns error while converting string to RR at%d: %s: %s", LDNS_WIREPARSE_OFFSET(lstatus), sldns_get_errorstr_parse(lstatus), str); return NULL; } free(*prev); *prev = memdup(rr, dname_len); *prev_len = dname_len; if(!*prev) { log_err("malloc failure in add_trustanchor"); return NULL; } if(sldns_wirerr_get_type(rr, rr_len, dname_len)!=LDNS_RR_TYPE_DNSKEY && sldns_wirerr_get_type(rr, rr_len, dname_len)!=LDNS_RR_TYPE_DS) { *skip = 1; return NULL; /* only DS and DNSKEY allowed */ } drr = memdup(rr, rr_len); if(!drr) { log_err("malloc failure in add trustanchor"); return NULL; } return add_trustanchor_frm_rr(anchors, drr, rr_len, dname_len, tp); } /** * Load single anchor * @param anchors: all points. * @param str: comments line * @param fname: filename * @param origin: the $ORIGIN. * @param origin_len: length of origin * @param prev: passed to ldns. * @param prev_len: length of prev * @param skip: if true, the result is NULL, but not an error, skip it. * @return false on failure, otherwise the tp read. */ static struct trust_anchor* load_trustanchor(struct val_anchors* anchors, char* str, const char* fname, uint8_t* origin, size_t origin_len, uint8_t** prev, size_t* prev_len, int* skip) { struct autr_ta* ta = NULL; struct trust_anchor* tp = NULL; ta = add_trustanchor_frm_str(anchors, str, &tp, origin, origin_len, prev, prev_len, skip); if(!ta) return NULL; lock_basic_lock(&tp->lock); if(!parse_comments(str, ta)) { lock_basic_unlock(&tp->lock); return NULL; } if(!tp->autr->file) { tp->autr->file = strdup(fname); if(!tp->autr->file) { lock_basic_unlock(&tp->lock); log_err("malloc failure"); return NULL; } } lock_basic_unlock(&tp->lock); return tp; } /** iterator for DSes from keylist. return true if a next element exists */ static int assemble_iterate_ds(struct autr_ta** list, uint8_t** rr, size_t* rr_len, size_t* dname_len) { while(*list) { if(sldns_wirerr_get_type((*list)->rr, (*list)->rr_len, (*list)->dname_len) == LDNS_RR_TYPE_DS) { *rr = (*list)->rr; *rr_len = (*list)->rr_len; *dname_len = (*list)->dname_len; *list = (*list)->next; return 1; } *list = (*list)->next; } return 0; } /** iterator for DNSKEYs from keylist. return true if a next element exists */ static int assemble_iterate_dnskey(struct autr_ta** list, uint8_t** rr, size_t* rr_len, size_t* dname_len) { while(*list) { if(sldns_wirerr_get_type((*list)->rr, (*list)->rr_len, (*list)->dname_len) != LDNS_RR_TYPE_DS && ((*list)->s == AUTR_STATE_VALID || (*list)->s == AUTR_STATE_MISSING)) { *rr = (*list)->rr; *rr_len = (*list)->rr_len; *dname_len = (*list)->dname_len; *list = (*list)->next; return 1; } *list = (*list)->next; } return 0; } /** see if iterator-list has any elements in it, or it is empty */ static int assemble_iterate_hasfirst(int iter(struct autr_ta**, uint8_t**, size_t*, size_t*), struct autr_ta* list) { uint8_t* rr = NULL; size_t rr_len = 0, dname_len = 0; return iter(&list, &rr, &rr_len, &dname_len); } /** number of elements in iterator list */ static size_t assemble_iterate_count(int iter(struct autr_ta**, uint8_t**, size_t*, size_t*), struct autr_ta* list) { uint8_t* rr = NULL; size_t i = 0, rr_len = 0, dname_len = 0; while(iter(&list, &rr, &rr_len, &dname_len)) { i++; } return i; } /** * Create a ub_packed_rrset_key allocated on the heap. * It therefore does not have the correct ID value, and cannot be used * inside the cache. It can be used in storage outside of the cache. * Keys for the cache have to be obtained from alloc.h . * @param iter: iterator over the elements in the list. It filters elements. * @param list: the list. * @return key allocated or NULL on failure. */ static struct ub_packed_rrset_key* ub_packed_rrset_heap_key(int iter(struct autr_ta**, uint8_t**, size_t*, size_t*), struct autr_ta* list) { uint8_t* rr = NULL; size_t rr_len = 0, dname_len = 0; struct ub_packed_rrset_key* k; if(!iter(&list, &rr, &rr_len, &dname_len)) return NULL; k = (struct ub_packed_rrset_key*)calloc(1, sizeof(*k)); if(!k) return NULL; k->rk.type = htons(sldns_wirerr_get_type(rr, rr_len, dname_len)); k->rk.rrset_class = htons(sldns_wirerr_get_class(rr, rr_len, dname_len)); k->rk.dname_len = dname_len; k->rk.dname = memdup(rr, dname_len); if(!k->rk.dname) { free(k); return NULL; } return k; } /** * Create packed_rrset data on the heap. * @param iter: iterator over the elements in the list. It filters elements. * @param list: the list. * @return data allocated or NULL on failure. */ static struct packed_rrset_data* packed_rrset_heap_data(int iter(struct autr_ta**, uint8_t**, size_t*, size_t*), struct autr_ta* list) { uint8_t* rr = NULL; size_t rr_len = 0, dname_len = 0; struct packed_rrset_data* data; size_t count=0, rrsig_count=0, len=0, i, total; uint8_t* nextrdata; struct autr_ta* list_i; time_t ttl = 0; list_i = list; while(iter(&list_i, &rr, &rr_len, &dname_len)) { if(sldns_wirerr_get_type(rr, rr_len, dname_len) == LDNS_RR_TYPE_RRSIG) rrsig_count++; else count++; /* sizeof the rdlength + rdatalen */ len += 2 + sldns_wirerr_get_rdatalen(rr, rr_len, dname_len); ttl = (time_t)sldns_wirerr_get_ttl(rr, rr_len, dname_len); } if(count == 0 && rrsig_count == 0) return NULL; /* allocate */ total = count + rrsig_count; len += sizeof(*data) + total*(sizeof(size_t) + sizeof(time_t) + sizeof(uint8_t*)); data = (struct packed_rrset_data*)calloc(1, len); if(!data) return NULL; /* fill it */ data->ttl = ttl; data->count = count; data->rrsig_count = rrsig_count; data->rr_len = (size_t*)((uint8_t*)data + sizeof(struct packed_rrset_data)); data->rr_data = (uint8_t**)&(data->rr_len[total]); data->rr_ttl = (time_t*)&(data->rr_data[total]); nextrdata = (uint8_t*)&(data->rr_ttl[total]); /* fill out len, ttl, fields */ list_i = list; i = 0; while(iter(&list_i, &rr, &rr_len, &dname_len)) { data->rr_ttl[i] = (time_t)sldns_wirerr_get_ttl(rr, rr_len, dname_len); if(data->rr_ttl[i] < data->ttl) data->ttl = data->rr_ttl[i]; data->rr_len[i] = 2 /* the rdlength */ + sldns_wirerr_get_rdatalen(rr, rr_len, dname_len); i++; } /* fixup rest of ptrs */ for(i=0; irr_data[i] = nextrdata; nextrdata += data->rr_len[i]; } /* copy data in there */ list_i = list; i = 0; while(iter(&list_i, &rr, &rr_len, &dname_len)) { log_assert(data->rr_data[i]); memmove(data->rr_data[i], sldns_wirerr_get_rdatawl(rr, rr_len, dname_len), data->rr_len[i]); i++; } if(data->rrsig_count && data->count == 0) { data->count = data->rrsig_count; /* rrset type is RRSIG */ data->rrsig_count = 0; } return data; } /** * Assemble the trust anchors into DS and DNSKEY packed rrsets. * Uses only VALID and MISSING DNSKEYs. * Read the sldns_rrs and builds packed rrsets * @param tp: the trust point. Must be locked. * @return false on malloc failure. */ static int autr_assemble(struct trust_anchor* tp) { struct ub_packed_rrset_key* ubds=NULL, *ubdnskey=NULL; /* make packed rrset keys - malloced with no ID number, they * are not in the cache */ /* make packed rrset data (if there is a key) */ if(assemble_iterate_hasfirst(assemble_iterate_ds, tp->autr->keys)) { ubds = ub_packed_rrset_heap_key( assemble_iterate_ds, tp->autr->keys); if(!ubds) goto error_cleanup; ubds->entry.data = packed_rrset_heap_data( assemble_iterate_ds, tp->autr->keys); if(!ubds->entry.data) goto error_cleanup; } /* make packed DNSKEY data */ if(assemble_iterate_hasfirst(assemble_iterate_dnskey, tp->autr->keys)) { ubdnskey = ub_packed_rrset_heap_key( assemble_iterate_dnskey, tp->autr->keys); if(!ubdnskey) goto error_cleanup; ubdnskey->entry.data = packed_rrset_heap_data( assemble_iterate_dnskey, tp->autr->keys); if(!ubdnskey->entry.data) { error_cleanup: autr_rrset_delete(ubds); autr_rrset_delete(ubdnskey); return 0; } } /* we have prepared the new keys so nothing can go wrong any more. * And we are sure we cannot be left without trustanchor after * any errors. Put in the new keys and remove old ones. */ /* free the old data */ autr_rrset_delete(tp->ds_rrset); autr_rrset_delete(tp->dnskey_rrset); /* assign the data to replace the old */ tp->ds_rrset = ubds; tp->dnskey_rrset = ubdnskey; tp->numDS = assemble_iterate_count(assemble_iterate_ds, tp->autr->keys); tp->numDNSKEY = assemble_iterate_count(assemble_iterate_dnskey, tp->autr->keys); return 1; } /** parse integer */ static unsigned int parse_int(char* line, int* ret) { char *e; unsigned int x = (unsigned int)strtol(line, &e, 10); if(line == e) { *ret = -1; /* parse error */ return 0; } *ret = 1; /* matched */ return x; } /** parse id sequence for anchor */ static struct trust_anchor* parse_id(struct val_anchors* anchors, char* line) { struct trust_anchor *tp; int r; uint16_t dclass; uint8_t* dname; size_t dname_len; /* read the owner name */ char* next = strchr(line, ' '); if(!next) return NULL; next[0] = 0; dname = sldns_str2wire_dname(line, &dname_len); if(!dname) return NULL; /* read the class */ dclass = parse_int(next+1, &r); if(r == -1) { free(dname); return NULL; } /* find the trust point */ tp = autr_tp_create(anchors, dname, dname_len, dclass); free(dname); return tp; } /** * Parse variable from trustanchor header * @param line: to parse * @param anchors: the anchor is added to this, if "id:" is seen. * @param anchor: the anchor as result value or previously returned anchor * value to read the variable lines into. * @return: 0 no match, -1 failed syntax error, +1 success line read. * +2 revoked trust anchor file. */ static int parse_var_line(char* line, struct val_anchors* anchors, struct trust_anchor** anchor) { struct trust_anchor* tp = *anchor; int r = 0; if(strncmp(line, ";;id: ", 6) == 0) { *anchor = parse_id(anchors, line+6); if(!*anchor) return -1; else return 1; } else if(strncmp(line, ";;REVOKED", 9) == 0) { if(tp) { log_err("REVOKED statement must be at start of file"); return -1; } return 2; } else if(strncmp(line, ";;last_queried: ", 16) == 0) { if(!tp) return -1; lock_basic_lock(&tp->lock); tp->autr->last_queried = (time_t)parse_int(line+16, &r); lock_basic_unlock(&tp->lock); } else if(strncmp(line, ";;last_success: ", 16) == 0) { if(!tp) return -1; lock_basic_lock(&tp->lock); tp->autr->last_success = (time_t)parse_int(line+16, &r); lock_basic_unlock(&tp->lock); } else if(strncmp(line, ";;next_probe_time: ", 19) == 0) { if(!tp) return -1; lock_basic_lock(&anchors->lock); lock_basic_lock(&tp->lock); (void)rbtree_delete(&anchors->autr->probe, tp); tp->autr->next_probe_time = (time_t)parse_int(line+19, &r); (void)rbtree_insert(&anchors->autr->probe, &tp->autr->pnode); lock_basic_unlock(&tp->lock); lock_basic_unlock(&anchors->lock); } else if(strncmp(line, ";;query_failed: ", 16) == 0) { if(!tp) return -1; lock_basic_lock(&tp->lock); tp->autr->query_failed = (uint8_t)parse_int(line+16, &r); lock_basic_unlock(&tp->lock); } else if(strncmp(line, ";;query_interval: ", 18) == 0) { if(!tp) return -1; lock_basic_lock(&tp->lock); tp->autr->query_interval = (time_t)parse_int(line+18, &r); lock_basic_unlock(&tp->lock); } else if(strncmp(line, ";;retry_time: ", 14) == 0) { if(!tp) return -1; lock_basic_lock(&tp->lock); tp->autr->retry_time = (time_t)parse_int(line+14, &r); lock_basic_unlock(&tp->lock); } return r; } /** handle origin lines */ static int handle_origin(char* line, uint8_t** origin, size_t* origin_len) { size_t len = 0; while(isspace((unsigned char)*line)) line++; if(strncmp(line, "$ORIGIN", 7) != 0) return 0; free(*origin); line += 7; while(isspace((unsigned char)*line)) line++; *origin = sldns_str2wire_dname(line, &len); *origin_len = len; if(!*origin) log_warn("malloc failure or parse error in $ORIGIN"); return 1; } /** Read one line and put multiline RRs onto one line string */ static int read_multiline(char* buf, size_t len, FILE* in, int* linenr) { char* pos = buf; size_t left = len; int depth = 0; buf[len-1] = 0; while(left > 0 && fgets(pos, (int)left, in) != NULL) { size_t i, poslen = strlen(pos); (*linenr)++; /* check what the new depth is after the line */ /* this routine cannot handle braces inside quotes, say for TXT records, but this routine only has to read keys */ for(i=0; i0) pos[poslen-1] = 0; /* strip newline */ if(strchr(pos, ';')) strchr(pos, ';')[0] = 0; /* strip comments */ /* move to paste other lines behind this one */ poslen = strlen(pos); pos += poslen; left -= poslen; /* the newline is changed into a space */ if(left <= 2 /* space and eos */) { log_err("line too long"); return -1; } pos[0] = ' '; pos[1] = 0; pos += 1; left -= 1; } if(depth != 0) { log_err("mismatch: too many '('"); return -1; } if(pos != buf) return 1; return 0; } int autr_read_file(struct val_anchors* anchors, const char* nm) { /* the file descriptor */ FILE* fd; /* keep track of line numbers */ int line_nr = 0; /* single line */ char line[10240]; /* trust point being read */ struct trust_anchor *tp = NULL, *tp2; int r; /* for $ORIGIN parsing */ uint8_t *origin=NULL, *prev=NULL; size_t origin_len=0, prev_len=0; if (!(fd = fopen(nm, "r"))) { log_err("unable to open %s for reading: %s", nm, strerror(errno)); return 0; } verbose(VERB_ALGO, "reading autotrust anchor file %s", nm); while ( (r=read_multiline(line, sizeof(line), fd, &line_nr)) != 0) { if(r == -1 || (r = parse_var_line(line, anchors, &tp)) == -1) { log_err("could not parse auto-trust-anchor-file " "%s line %d", nm, line_nr); fclose(fd); free(origin); free(prev); return 0; } else if(r == 1) { continue; } else if(r == 2) { log_warn("trust anchor %s has been revoked", nm); fclose(fd); free(origin); free(prev); return 1; } if (!str_contains_data(line, ';')) continue; /* empty lines allowed */ if(handle_origin(line, &origin, &origin_len)) continue; r = 0; if(!(tp2=load_trustanchor(anchors, line, nm, origin, origin_len, &prev, &prev_len, &r))) { if(!r) log_err("failed to load trust anchor from %s " "at line %i, skipping", nm, line_nr); /* try to do the rest */ continue; } if(tp && tp != tp2) { log_err("file %s has mismatching data inside: " "the file may only contain keys for one name, " "remove keys for other domain names", nm); fclose(fd); free(origin); free(prev); return 0; } tp = tp2; } fclose(fd); free(origin); free(prev); if(!tp) { log_err("failed to read %s", nm); return 0; } /* now assemble the data into DNSKEY and DS packed rrsets */ lock_basic_lock(&tp->lock); if(!autr_assemble(tp)) { lock_basic_unlock(&tp->lock); log_err("malloc failure assembling %s", nm); return 0; } lock_basic_unlock(&tp->lock); return 1; } /** string for a trustanchor state */ static const char* trustanchor_state2str(autr_state_type s) { switch (s) { case AUTR_STATE_START: return " START "; case AUTR_STATE_ADDPEND: return " ADDPEND "; case AUTR_STATE_VALID: return " VALID "; case AUTR_STATE_MISSING: return " MISSING "; case AUTR_STATE_REVOKED: return " REVOKED "; case AUTR_STATE_REMOVED: return " REMOVED "; } return " UNKNOWN "; } /** print ID to file */ static int print_id(FILE* out, char* fname, uint8_t* nm, size_t nmlen, uint16_t dclass) { char* s = sldns_wire2str_dname(nm, nmlen); if(!s) { log_err("malloc failure in write to %s", fname); return 0; } if(fprintf(out, ";;id: %s %d\n", s, (int)dclass) < 0) { log_err("could not write to %s: %s", fname, strerror(errno)); free(s); return 0; } free(s); return 1; } static int autr_write_contents(FILE* out, char* fn, struct trust_anchor* tp) { char tmi[32]; struct autr_ta* ta; char* str; /* write pretty header */ if(fprintf(out, "; autotrust trust anchor file\n") < 0) { log_err("could not write to %s: %s", fn, strerror(errno)); return 0; } if(tp->autr->revoked) { if(fprintf(out, ";;REVOKED\n") < 0 || fprintf(out, "; The zone has all keys revoked, and is\n" "; considered as if it has no trust anchors.\n" "; the remainder of the file is the last probe.\n" "; to restart the trust anchor, overwrite this file.\n" "; with one containing valid DNSKEYs or DSes.\n") < 0) { log_err("could not write to %s: %s", fn, strerror(errno)); return 0; } } if(!print_id(out, fn, tp->name, tp->namelen, tp->dclass)) { return 0; } if(fprintf(out, ";;last_queried: %u ;;%s", (unsigned int)tp->autr->last_queried, ctime_r(&(tp->autr->last_queried), tmi)) < 0 || fprintf(out, ";;last_success: %u ;;%s", (unsigned int)tp->autr->last_success, ctime_r(&(tp->autr->last_success), tmi)) < 0 || fprintf(out, ";;next_probe_time: %u ;;%s", (unsigned int)tp->autr->next_probe_time, ctime_r(&(tp->autr->next_probe_time), tmi)) < 0 || fprintf(out, ";;query_failed: %d\n", (int)tp->autr->query_failed)<0 || fprintf(out, ";;query_interval: %d\n", (int)tp->autr->query_interval) < 0 || fprintf(out, ";;retry_time: %d\n", (int)tp->autr->retry_time) < 0) { log_err("could not write to %s: %s", fn, strerror(errno)); return 0; } /* write anchors */ for(ta=tp->autr->keys; ta; ta=ta->next) { /* by default do not store START and REMOVED keys */ if(ta->s == AUTR_STATE_START) continue; if(ta->s == AUTR_STATE_REMOVED) continue; /* only store keys */ if(sldns_wirerr_get_type(ta->rr, ta->rr_len, ta->dname_len) != LDNS_RR_TYPE_DNSKEY) continue; str = sldns_wire2str_rr(ta->rr, ta->rr_len); if(!str || !str[0]) { free(str); log_err("malloc failure writing %s", fn); return 0; } str[strlen(str)-1] = 0; /* remove newline */ if(fprintf(out, "%s ;;state=%d [%s] ;;count=%d " ";;lastchange=%u ;;%s", str, (int)ta->s, trustanchor_state2str(ta->s), (int)ta->pending_count, (unsigned int)ta->last_change, ctime_r(&(ta->last_change), tmi)) < 0) { log_err("could not write to %s: %s", fn, strerror(errno)); free(str); return 0; } free(str); } return 1; } void autr_write_file(struct module_env* env, struct trust_anchor* tp) { FILE* out; char* fname = tp->autr->file; #ifndef S_SPLINT_S long long llvalue; #endif char tempf[2048]; log_assert(tp->autr); if(!env) { log_err("autr_write_file: Module environment is NULL."); return; } /* unique name with pid number, thread number, and struct pointer * (the pointer uniquifies for multiple libunbound contexts) */ #ifndef S_SPLINT_S #if defined(SIZE_MAX) && defined(UINT32_MAX) && (UINT32_MAX == SIZE_MAX || INT32_MAX == SIZE_MAX) /* avoid warning about upcast on 32bit systems */ llvalue = (unsigned long)tp; #else llvalue = (unsigned long long)tp; #endif #ifndef USE_WINSOCK snprintf(tempf, sizeof(tempf), "%s.%d-%d-%llx", fname, (int)getpid(), env->worker?*(int*)env->worker:0, llvalue); #else snprintf(tempf, sizeof(tempf), "%s.%d-%d-%I64x", fname, (int)getpid(), env->worker?*(int*)env->worker:0, llvalue); #endif #endif /* S_SPLINT_S */ verbose(VERB_ALGO, "autotrust: write to disk: %s", tempf); out = fopen(tempf, "w"); if(!out) { fatal_exit("could not open autotrust file for writing, %s: %s", tempf, strerror(errno)); return; } if(!autr_write_contents(out, tempf, tp)) { /* failed to write contents (completely) */ fclose(out); unlink(tempf); fatal_exit("could not completely write: %s", fname); return; } if(fflush(out) != 0) log_err("could not fflush(%s): %s", fname, strerror(errno)); #ifdef HAVE_FSYNC if(fsync(fileno(out)) != 0) log_err("could not fsync(%s): %s", fname, strerror(errno)); #else FlushFileBuffers((HANDLE)_get_osfhandle(_fileno(out))); #endif if(fclose(out) != 0) { fatal_exit("could not complete write: %s: %s", fname, strerror(errno)); unlink(tempf); return; } /* success; overwrite actual file */ verbose(VERB_ALGO, "autotrust: replaced %s", fname); #ifdef UB_ON_WINDOWS (void)unlink(fname); /* windows does not replace file with rename() */ #endif if(rename(tempf, fname) < 0) { fatal_exit("rename(%s to %s): %s", tempf, fname, strerror(errno)); } } /** * Verify if dnskey works for trust point * @param env: environment (with time) for verification * @param ve: validator environment (with options) for verification. * @param tp: trust point to verify with * @param rrset: DNSKEY rrset to verify. * @param qstate: qstate with region. * @return false on failure, true if verification successful. */ static int verify_dnskey(struct module_env* env, struct val_env* ve, struct trust_anchor* tp, struct ub_packed_rrset_key* rrset, struct module_qstate* qstate) { char* reason = NULL; uint8_t sigalg[ALGO_NEEDS_MAX+1]; int downprot = env->cfg->harden_algo_downgrade; enum sec_status sec = val_verify_DNSKEY_with_TA(env, ve, rrset, tp->ds_rrset, tp->dnskey_rrset, downprot?sigalg:NULL, &reason, qstate); /* sigalg is ignored, it returns algorithms signalled to exist, but * in 5011 there are no other rrsets to check. if downprot is * enabled, then it checks that the DNSKEY is signed with all * algorithms available in the trust store. */ verbose(VERB_ALGO, "autotrust: validate DNSKEY with anchor: %s", sec_status_to_string(sec)); return sec == sec_status_secure; } static int32_t rrsig_get_expiry(uint8_t* d, size_t len) { /* rrsig: 2(rdlen), 2(type) 1(alg) 1(v) 4(origttl), then 4(expi), (4)incep) */ if(len < 2+8+4) return 0; return sldns_read_uint32(d+2+8); } /** Find minimum expiration interval from signatures */ static time_t min_expiry(struct module_env* env, struct packed_rrset_data* dd) { size_t i; int32_t t, r = 15 * 24 * 3600; /* 15 days max */ for(i=dd->count; icount+dd->rrsig_count; i++) { t = rrsig_get_expiry(dd->rr_data[i], dd->rr_len[i]); if((int32_t)t - (int32_t)*env->now > 0) { t -= (int32_t)*env->now; if(t < r) r = t; } } return (time_t)r; } /** Is rr self-signed revoked key */ static int rr_is_selfsigned_revoked(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset, size_t i, struct module_qstate* qstate) { enum sec_status sec; char* reason = NULL; verbose(VERB_ALGO, "seen REVOKE flag, check self-signed, rr %d", (int)i); /* no algorithm downgrade protection necessary, if it is selfsigned * revoked it can be removed. */ sec = dnskey_verify_rrset(env, ve, dnskey_rrset, dnskey_rrset, i, &reason, LDNS_SECTION_ANSWER, qstate); return (sec == sec_status_secure); } /** Set fetched value */ static void seen_trustanchor(struct autr_ta* ta, uint8_t seen) { ta->fetched = seen; if(ta->pending_count < 250) /* no numerical overflow, please */ ta->pending_count++; } /** set revoked value */ static void seen_revoked_trustanchor(struct autr_ta* ta, uint8_t revoked) { ta->revoked = revoked; } /** revoke a trust anchor */ static void revoke_dnskey(struct autr_ta* ta, int off) { uint16_t flags; uint8_t* data; if(sldns_wirerr_get_type(ta->rr, ta->rr_len, ta->dname_len) != LDNS_RR_TYPE_DNSKEY) return; if(sldns_wirerr_get_rdatalen(ta->rr, ta->rr_len, ta->dname_len) < 2) return; data = sldns_wirerr_get_rdata(ta->rr, ta->rr_len, ta->dname_len); flags = sldns_read_uint16(data); if (off && (flags&LDNS_KEY_REVOKE_KEY)) flags ^= LDNS_KEY_REVOKE_KEY; /* flip */ else flags |= LDNS_KEY_REVOKE_KEY; sldns_write_uint16(data, flags); } /** Compare two RRs skipping the REVOKED bit. Pass rdata(no len) */ static int dnskey_compare_skip_revbit(uint8_t* a, size_t a_len, uint8_t* b, size_t b_len) { size_t i; if(a_len != b_len) return -1; /* compare RRs RDATA byte for byte. */ for(i = 0; i < a_len; i++) { uint8_t rdf1, rdf2; rdf1 = a[i]; rdf2 = b[i]; if(i==1) { /* this is the second part of the flags field */ rdf1 |= LDNS_KEY_REVOKE_KEY; rdf2 |= LDNS_KEY_REVOKE_KEY; } if (rdf1 < rdf2) return -1; else if (rdf1 > rdf2) return 1; } return 0; } /** compare trust anchor with rdata, 0 if equal. Pass rdata(no len) */ static int ta_compare(struct autr_ta* a, uint16_t t, uint8_t* b, size_t b_len) { if(!a) return -1; else if(!b) return -1; else if(sldns_wirerr_get_type(a->rr, a->rr_len, a->dname_len) != t) return (int)sldns_wirerr_get_type(a->rr, a->rr_len, a->dname_len) - (int)t; else if(t == LDNS_RR_TYPE_DNSKEY) { return dnskey_compare_skip_revbit( sldns_wirerr_get_rdata(a->rr, a->rr_len, a->dname_len), sldns_wirerr_get_rdatalen(a->rr, a->rr_len, a->dname_len), b, b_len); } else if(t == LDNS_RR_TYPE_DS) { if(sldns_wirerr_get_rdatalen(a->rr, a->rr_len, a->dname_len) != b_len) return -1; return memcmp(sldns_wirerr_get_rdata(a->rr, a->rr_len, a->dname_len), b, b_len); } return -1; } /** * Find key * @param tp: to search in * @param t: rr type of the rdata. * @param rdata: to look for (no rdatalen in it) * @param rdata_len: length of rdata * @param result: returns NULL or the ta key looked for. * @return false on malloc failure during search. if true examine result. */ static int find_key(struct trust_anchor* tp, uint16_t t, uint8_t* rdata, size_t rdata_len, struct autr_ta** result) { struct autr_ta* ta; if(!tp || !rdata) { *result = NULL; return 0; } for(ta=tp->autr->keys; ta; ta=ta->next) { if(ta_compare(ta, t, rdata, rdata_len) == 0) { *result = ta; return 1; } } *result = NULL; return 1; } /** add key and clone RR and tp already locked. rdata without rdlen. */ static struct autr_ta* add_key(struct trust_anchor* tp, uint32_t ttl, uint8_t* rdata, size_t rdata_len) { struct autr_ta* ta; uint8_t* rr; size_t rr_len, dname_len; uint16_t rrtype = htons(LDNS_RR_TYPE_DNSKEY); uint16_t rrclass = htons(LDNS_RR_CLASS_IN); uint16_t rdlen = htons(rdata_len); dname_len = tp->namelen; ttl = htonl(ttl); rr_len = dname_len + 10 /* type,class,ttl,rdatalen */ + rdata_len; rr = (uint8_t*)malloc(rr_len); if(!rr) return NULL; memmove(rr, tp->name, tp->namelen); memmove(rr+dname_len, &rrtype, 2); memmove(rr+dname_len+2, &rrclass, 2); memmove(rr+dname_len+4, &ttl, 4); memmove(rr+dname_len+8, &rdlen, 2); memmove(rr+dname_len+10, rdata, rdata_len); ta = autr_ta_create(rr, rr_len, dname_len); if(!ta) { /* rr freed in autr_ta_create */ return NULL; } /* link in, tp already locked */ ta->next = tp->autr->keys; tp->autr->keys = ta; return ta; } /** get TTL from DNSKEY rrset */ static time_t key_ttl(struct ub_packed_rrset_key* k) { struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; return d->ttl; } /** update the time values for the trustpoint */ static void set_tp_times(struct trust_anchor* tp, time_t rrsig_exp_interval, time_t origttl, int* changed) { time_t x, qi = tp->autr->query_interval, rt = tp->autr->retry_time; /* x = MIN(15days, ttl/2, expire/2) */ x = 15 * 24 * 3600; if(origttl/2 < x) x = origttl/2; if(rrsig_exp_interval/2 < x) x = rrsig_exp_interval/2; /* MAX(1hr, x) */ if(!autr_permit_small_holddown) { if(x < 3600) tp->autr->query_interval = 3600; else tp->autr->query_interval = x; } else tp->autr->query_interval = x; /* x= MIN(1day, ttl/10, expire/10) */ x = 24 * 3600; if(origttl/10 < x) x = origttl/10; if(rrsig_exp_interval/10 < x) x = rrsig_exp_interval/10; /* MAX(1hr, x) */ if(!autr_permit_small_holddown) { if(x < 3600) tp->autr->retry_time = 3600; else tp->autr->retry_time = x; } else tp->autr->retry_time = x; if(qi != tp->autr->query_interval || rt != tp->autr->retry_time) { *changed = 1; verbose(VERB_ALGO, "orig_ttl is %d", (int)origttl); verbose(VERB_ALGO, "rrsig_exp_interval is %d", (int)rrsig_exp_interval); verbose(VERB_ALGO, "query_interval: %d, retry_time: %d", (int)tp->autr->query_interval, (int)tp->autr->retry_time); } } /** init events to zero */ static void init_events(struct trust_anchor* tp) { struct autr_ta* ta; for(ta=tp->autr->keys; ta; ta=ta->next) { ta->fetched = 0; } } /** check for revoked keys without trusting any other information */ static void check_contains_revoked(struct module_env* env, struct val_env* ve, struct trust_anchor* tp, struct ub_packed_rrset_key* dnskey_rrset, int* changed, struct module_qstate* qstate) { struct packed_rrset_data* dd = (struct packed_rrset_data*) dnskey_rrset->entry.data; size_t i; log_assert(ntohs(dnskey_rrset->rk.type) == LDNS_RR_TYPE_DNSKEY); for(i=0; icount; i++) { struct autr_ta* ta = NULL; if(!rr_is_dnskey_sep(ntohs(dnskey_rrset->rk.type), dd->rr_data[i]+2, dd->rr_len[i]-2) || !rr_is_dnskey_revoked(ntohs(dnskey_rrset->rk.type), dd->rr_data[i]+2, dd->rr_len[i]-2)) continue; /* not a revoked KSK */ if(!find_key(tp, ntohs(dnskey_rrset->rk.type), dd->rr_data[i]+2, dd->rr_len[i]-2, &ta)) { log_err("malloc failure"); continue; /* malloc fail in compare*/ } if(!ta) continue; /* key not found */ if(rr_is_selfsigned_revoked(env, ve, dnskey_rrset, i, qstate)) { /* checked if there is an rrsig signed by this key. */ /* same keytag, but stored can be revoked already, so * compare keytags, with +0 or +128(REVOKE flag) */ log_assert(dnskey_calc_keytag(dnskey_rrset, i)-128 == sldns_calc_keytag_raw(sldns_wirerr_get_rdata( ta->rr, ta->rr_len, ta->dname_len), sldns_wirerr_get_rdatalen(ta->rr, ta->rr_len, ta->dname_len)) || dnskey_calc_keytag(dnskey_rrset, i) == sldns_calc_keytag_raw(sldns_wirerr_get_rdata( ta->rr, ta->rr_len, ta->dname_len), sldns_wirerr_get_rdatalen(ta->rr, ta->rr_len, ta->dname_len))); /* checks conversion*/ verbose_key(ta, VERB_ALGO, "is self-signed revoked"); if(!ta->revoked) *changed = 1; seen_revoked_trustanchor(ta, 1); do_revoked(env, ta, changed); } } } /** See if a DNSKEY is verified by one of the DSes */ static int key_matches_a_ds(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* dnskey_rrset, size_t key_idx, struct ub_packed_rrset_key* ds_rrset) { struct packed_rrset_data* dd = (struct packed_rrset_data*) ds_rrset->entry.data; size_t ds_idx, num = dd->count; int d = val_favorite_ds_algo(ds_rrset); char* reason = ""; for(ds_idx=0; ds_idxentry.data; size_t i; log_assert(ntohs(dnskey_rrset->rk.type) == LDNS_RR_TYPE_DNSKEY); init_events(tp); for(i=0; icount; i++) { struct autr_ta* ta = NULL; if(!rr_is_dnskey_sep(ntohs(dnskey_rrset->rk.type), dd->rr_data[i]+2, dd->rr_len[i]-2)) continue; if(rr_is_dnskey_revoked(ntohs(dnskey_rrset->rk.type), dd->rr_data[i]+2, dd->rr_len[i]-2)) { /* self-signed revoked keys already detected before, * other revoked keys are not 'added' again */ continue; } /* is a key of this type supported?. Note rr_list and * packed_rrset are in the same order. */ if(!dnskey_algo_is_supported(dnskey_rrset, i)) { /* skip unknown algorithm key, it is useless to us */ log_nametypeclass(VERB_DETAIL, "trust point has " "unsupported algorithm at", tp->name, LDNS_RR_TYPE_DNSKEY, tp->dclass); continue; } /* is it new? if revocation bit set, find the unrevoked key */ if(!find_key(tp, ntohs(dnskey_rrset->rk.type), dd->rr_data[i]+2, dd->rr_len[i]-2, &ta)) { return 0; } if(!ta) { ta = add_key(tp, (uint32_t)dd->rr_ttl[i], dd->rr_data[i]+2, dd->rr_len[i]-2); *changed = 1; /* first time seen, do we have DSes? if match: VALID */ if(ta && tp->ds_rrset && key_matches_a_ds(env, ve, dnskey_rrset, i, tp->ds_rrset)) { verbose_key(ta, VERB_ALGO, "verified by DS"); ta->s = AUTR_STATE_VALID; } } if(!ta) { return 0; } seen_trustanchor(ta, 1); verbose_key(ta, VERB_ALGO, "in DNS response"); } set_tp_times(tp, min_expiry(env, dd), key_ttl(dnskey_rrset), changed); return 1; } /** * Check if the holddown time has already exceeded * setting: add-holddown: add holddown timer * setting: del-holddown: del holddown timer * @param env: environment with current time * @param ta: trust anchor to check for. * @param holddown: the timer value * @return number of seconds the holddown has passed. */ static time_t check_holddown(struct module_env* env, struct autr_ta* ta, unsigned int holddown) { time_t elapsed; if(*env->now < ta->last_change) { log_warn("time goes backwards. delaying key holddown"); return 0; } elapsed = *env->now - ta->last_change; if (elapsed > (time_t)holddown) { return elapsed-(time_t)holddown; } verbose_key(ta, VERB_ALGO, "holddown time " ARG_LL "d seconds to go", (long long) ((time_t)holddown-elapsed)); return 0; } /** Set last_change to now */ static void reset_holddown(struct module_env* env, struct autr_ta* ta, int* changed) { ta->last_change = *env->now; *changed = 1; } /** Set the state for this trust anchor */ static void set_trustanchor_state(struct module_env* env, struct autr_ta* ta, int* changed, autr_state_type s) { verbose_key(ta, VERB_ALGO, "update: %s to %s", trustanchor_state2str(ta->s), trustanchor_state2str(s)); ta->s = s; reset_holddown(env, ta, changed); } /** Event: NewKey */ static void do_newkey(struct module_env* env, struct autr_ta* anchor, int* c) { if (anchor->s == AUTR_STATE_START) set_trustanchor_state(env, anchor, c, AUTR_STATE_ADDPEND); } /** Event: AddTime */ static void do_addtime(struct module_env* env, struct autr_ta* anchor, int* c) { /* This not according to RFC, this is 30 days, but the RFC demands * MAX(30days, TTL expire time of first DNSKEY set with this key), * The value may be too small if a very large TTL was used. */ time_t exceeded = check_holddown(env, anchor, env->cfg->add_holddown); if (exceeded && anchor->s == AUTR_STATE_ADDPEND) { verbose_key(anchor, VERB_ALGO, "add-holddown time exceeded " ARG_LL "d seconds ago, and pending-count %d", (long long)exceeded, anchor->pending_count); if(anchor->pending_count >= MIN_PENDINGCOUNT) { set_trustanchor_state(env, anchor, c, AUTR_STATE_VALID); anchor->pending_count = 0; return; } verbose_key(anchor, VERB_ALGO, "add-holddown time sanity check " "failed (pending count: %d)", anchor->pending_count); } } /** Event: RemTime */ static void do_remtime(struct module_env* env, struct autr_ta* anchor, int* c) { time_t exceeded = check_holddown(env, anchor, env->cfg->del_holddown); if(exceeded && anchor->s == AUTR_STATE_REVOKED) { verbose_key(anchor, VERB_ALGO, "del-holddown time exceeded " ARG_LL "d seconds ago", (long long)exceeded); set_trustanchor_state(env, anchor, c, AUTR_STATE_REMOVED); } } /** Event: KeyRem */ static void do_keyrem(struct module_env* env, struct autr_ta* anchor, int* c) { if(anchor->s == AUTR_STATE_ADDPEND) { set_trustanchor_state(env, anchor, c, AUTR_STATE_START); anchor->pending_count = 0; } else if(anchor->s == AUTR_STATE_VALID) set_trustanchor_state(env, anchor, c, AUTR_STATE_MISSING); } /** Event: KeyPres */ static void do_keypres(struct module_env* env, struct autr_ta* anchor, int* c) { if(anchor->s == AUTR_STATE_MISSING) set_trustanchor_state(env, anchor, c, AUTR_STATE_VALID); } /* Event: Revoked */ static void do_revoked(struct module_env* env, struct autr_ta* anchor, int* c) { if(anchor->s == AUTR_STATE_VALID || anchor->s == AUTR_STATE_MISSING) { set_trustanchor_state(env, anchor, c, AUTR_STATE_REVOKED); verbose_key(anchor, VERB_ALGO, "old id, prior to revocation"); revoke_dnskey(anchor, 0); verbose_key(anchor, VERB_ALGO, "new id, after revocation"); } } /** Do statestable transition matrix for anchor */ static void anchor_state_update(struct module_env* env, struct autr_ta* anchor, int* c) { log_assert(anchor); switch(anchor->s) { /* START */ case AUTR_STATE_START: /* NewKey: ADDPEND */ if (anchor->fetched) do_newkey(env, anchor, c); break; /* ADDPEND */ case AUTR_STATE_ADDPEND: /* KeyRem: START */ if (!anchor->fetched) do_keyrem(env, anchor, c); /* AddTime: VALID */ else do_addtime(env, anchor, c); break; /* VALID */ case AUTR_STATE_VALID: /* RevBit: REVOKED */ if (anchor->revoked) do_revoked(env, anchor, c); /* KeyRem: MISSING */ else if (!anchor->fetched) do_keyrem(env, anchor, c); else if(!anchor->last_change) { verbose_key(anchor, VERB_ALGO, "first seen"); reset_holddown(env, anchor, c); } break; /* MISSING */ case AUTR_STATE_MISSING: /* RevBit: REVOKED */ if (anchor->revoked) do_revoked(env, anchor, c); /* KeyPres */ else if (anchor->fetched) do_keypres(env, anchor, c); break; /* REVOKED */ case AUTR_STATE_REVOKED: if (anchor->fetched) reset_holddown(env, anchor, c); /* RemTime: REMOVED */ else do_remtime(env, anchor, c); break; /* REMOVED */ case AUTR_STATE_REMOVED: default: break; } } /** if ZSK init then trust KSKs */ static int init_zsk_to_ksk(struct module_env* env, struct trust_anchor* tp, int* changed) { /* search for VALID ZSKs */ struct autr_ta* anchor; int validzsk = 0; int validksk = 0; for(anchor = tp->autr->keys; anchor; anchor = anchor->next) { /* last_change test makes sure it was manually configured */ if(sldns_wirerr_get_type(anchor->rr, anchor->rr_len, anchor->dname_len) == LDNS_RR_TYPE_DNSKEY && anchor->last_change == 0 && !ta_is_dnskey_sep(anchor) && anchor->s == AUTR_STATE_VALID) validzsk++; } if(validzsk == 0) return 0; for(anchor = tp->autr->keys; anchor; anchor = anchor->next) { if (ta_is_dnskey_sep(anchor) && anchor->s == AUTR_STATE_ADDPEND) { verbose_key(anchor, VERB_ALGO, "trust KSK from " "ZSK(config)"); set_trustanchor_state(env, anchor, changed, AUTR_STATE_VALID); validksk++; } } return validksk; } /** Remove missing trustanchors so the list does not grow forever */ static void remove_missing_trustanchors(struct module_env* env, struct trust_anchor* tp, int* changed) { struct autr_ta* anchor; time_t exceeded; int valid = 0; /* see if we have anchors that are valid */ for(anchor = tp->autr->keys; anchor; anchor = anchor->next) { /* Only do KSKs */ if (!ta_is_dnskey_sep(anchor)) continue; if (anchor->s == AUTR_STATE_VALID) valid++; } /* if there are no SEP Valid anchors, see if we started out with * a ZSK (last-change=0) anchor, which is VALID and there are KSKs * now that can be made valid. Do this immediately because there * is no guarantee that the ZSKs get announced long enough. Usually * this is immediately after init with a ZSK trusted, unless the domain * was not advertising any KSKs at all. In which case we perfectly * track the zero number of KSKs. */ if(valid == 0) { valid = init_zsk_to_ksk(env, tp, changed); if(valid == 0) return; } for(anchor = tp->autr->keys; anchor; anchor = anchor->next) { /* ignore ZSKs if newly added */ if(anchor->s == AUTR_STATE_START) continue; /* remove ZSKs if a KSK is present */ if (!ta_is_dnskey_sep(anchor)) { if(valid > 0) { verbose_key(anchor, VERB_ALGO, "remove ZSK " "[%d key(s) VALID]", valid); set_trustanchor_state(env, anchor, changed, AUTR_STATE_REMOVED); } continue; } /* Only do MISSING keys */ if (anchor->s != AUTR_STATE_MISSING) continue; if(env->cfg->keep_missing == 0) continue; /* keep forever */ exceeded = check_holddown(env, anchor, env->cfg->keep_missing); /* If keep_missing has exceeded and we still have more than * one valid KSK: remove missing trust anchor */ if (exceeded && valid > 0) { verbose_key(anchor, VERB_ALGO, "keep-missing time " "exceeded " ARG_LL "d seconds ago, [%d key(s) VALID]", (long long)exceeded, valid); set_trustanchor_state(env, anchor, changed, AUTR_STATE_REMOVED); } } } /** Do the statetable from RFC5011 transition matrix */ static int do_statetable(struct module_env* env, struct trust_anchor* tp, int* changed) { struct autr_ta* anchor; for(anchor = tp->autr->keys; anchor; anchor = anchor->next) { /* Only do KSKs */ if(!ta_is_dnskey_sep(anchor)) continue; anchor_state_update(env, anchor, changed); } remove_missing_trustanchors(env, tp, changed); return 1; } /** See if time alone makes ADDPEND to VALID transition */ static void autr_holddown_exceed(struct module_env* env, struct trust_anchor* tp, int* c) { struct autr_ta* anchor; for(anchor = tp->autr->keys; anchor; anchor = anchor->next) { if(ta_is_dnskey_sep(anchor) && anchor->s == AUTR_STATE_ADDPEND) do_addtime(env, anchor, c); } } /** cleanup key list */ static void autr_cleanup_keys(struct trust_anchor* tp) { struct autr_ta* p, **prevp; prevp = &tp->autr->keys; p = tp->autr->keys; while(p) { /* do we want to remove this key? */ if(p->s == AUTR_STATE_START || p->s == AUTR_STATE_REMOVED || sldns_wirerr_get_type(p->rr, p->rr_len, p->dname_len) != LDNS_RR_TYPE_DNSKEY) { struct autr_ta* np = p->next; /* remove */ free(p->rr); free(p); /* snip and go to next item */ *prevp = np; p = np; continue; } /* remove pending counts if no longer pending */ if(p->s != AUTR_STATE_ADDPEND) p->pending_count = 0; prevp = &p->next; p = p->next; } } /** calculate next probe time */ static time_t calc_next_probe(struct module_env* env, time_t wait) { /* make it random, 90-100% */ time_t rnd, rest; if(!autr_permit_small_holddown) { if(wait < 3600) wait = 3600; } else { if(wait == 0) wait = 1; } rnd = wait/10; rest = wait-rnd; rnd = (time_t)ub_random_max(env->rnd, (long int)rnd); return (time_t)(*env->now + rest + rnd); } /** what is first probe time (anchors must be locked) */ static time_t wait_probe_time(struct val_anchors* anchors) { rbnode_type* t = rbtree_first(&anchors->autr->probe); if(t != RBTREE_NULL) return ((struct trust_anchor*)t->key)->autr->next_probe_time; return 0; } /** reset worker timer */ static void reset_worker_timer(struct module_env* env) { struct timeval tv; #ifndef S_SPLINT_S time_t next = (time_t)wait_probe_time(env->anchors); /* in case this is libunbound, no timer */ if(!env->probe_timer) return; if(next > *env->now) tv.tv_sec = (time_t)(next - *env->now); else tv.tv_sec = 0; #endif tv.tv_usec = 0; comm_timer_set(env->probe_timer, &tv); verbose(VERB_ALGO, "scheduled next probe in " ARG_LL "d sec", (long long)tv.tv_sec); } /** set next probe for trust anchor */ static int set_next_probe(struct module_env* env, struct trust_anchor* tp, struct ub_packed_rrset_key* dnskey_rrset) { struct trust_anchor key, *tp2; time_t mold, mnew; /* use memory allocated in rrset for temporary name storage */ key.node.key = &key; key.name = dnskey_rrset->rk.dname; key.namelen = dnskey_rrset->rk.dname_len; key.namelabs = dname_count_labels(key.name); key.dclass = tp->dclass; lock_basic_unlock(&tp->lock); /* fetch tp again and lock anchors, so that we can modify the trees */ lock_basic_lock(&env->anchors->lock); tp2 = (struct trust_anchor*)rbtree_search(env->anchors->tree, &key); if(!tp2) { verbose(VERB_ALGO, "trustpoint was deleted in set_next_probe"); lock_basic_unlock(&env->anchors->lock); return 0; } log_assert(tp == tp2); lock_basic_lock(&tp->lock); /* schedule */ mold = wait_probe_time(env->anchors); (void)rbtree_delete(&env->anchors->autr->probe, tp); tp->autr->next_probe_time = calc_next_probe(env, tp->autr->query_interval); (void)rbtree_insert(&env->anchors->autr->probe, &tp->autr->pnode); mnew = wait_probe_time(env->anchors); lock_basic_unlock(&env->anchors->lock); verbose(VERB_ALGO, "next probe set in %d seconds", (int)tp->autr->next_probe_time - (int)*env->now); if(mold != mnew) { reset_worker_timer(env); } return 1; } /** Revoke and Delete a trust point */ static void autr_tp_remove(struct module_env* env, struct trust_anchor* tp, struct ub_packed_rrset_key* dnskey_rrset) { struct trust_anchor* del_tp; struct trust_anchor key; struct autr_point_data pd; time_t mold, mnew; log_nametypeclass(VERB_OPS, "trust point was revoked", tp->name, LDNS_RR_TYPE_DNSKEY, tp->dclass); tp->autr->revoked = 1; /* use space allocated for dnskey_rrset to save name of anchor */ memset(&key, 0, sizeof(key)); memset(&pd, 0, sizeof(pd)); key.autr = &pd; key.node.key = &key; pd.pnode.key = &key; pd.next_probe_time = tp->autr->next_probe_time; key.name = dnskey_rrset->rk.dname; key.namelen = tp->namelen; key.namelabs = tp->namelabs; key.dclass = tp->dclass; /* unlock */ lock_basic_unlock(&tp->lock); /* take from tree. It could be deleted by someone else,hence (void). */ lock_basic_lock(&env->anchors->lock); del_tp = (struct trust_anchor*)rbtree_delete(env->anchors->tree, &key); mold = wait_probe_time(env->anchors); (void)rbtree_delete(&env->anchors->autr->probe, &key); mnew = wait_probe_time(env->anchors); anchors_init_parents_locked(env->anchors); lock_basic_unlock(&env->anchors->lock); /* if !del_tp then the trust point is no longer present in the tree, * it was deleted by someone else, who will write the zonefile and * clean up the structure */ if(del_tp) { /* save on disk */ del_tp->autr->next_probe_time = 0; /* no more probing for it */ autr_write_file(env, del_tp); /* delete */ autr_point_delete(del_tp); } if(mold != mnew) { reset_worker_timer(env); } } int autr_process_prime(struct module_env* env, struct val_env* ve, struct trust_anchor* tp, struct ub_packed_rrset_key* dnskey_rrset, struct module_qstate* qstate) { int changed = 0; log_assert(tp && tp->autr); /* autotrust update trust anchors */ /* the tp is locked, and stays locked unless it is deleted */ /* we could just catch the anchor here while another thread * is busy deleting it. Just unlock and let the other do its job */ if(tp->autr->revoked) { log_nametypeclass(VERB_ALGO, "autotrust not processed, " "trust point revoked", tp->name, LDNS_RR_TYPE_DNSKEY, tp->dclass); lock_basic_unlock(&tp->lock); return 0; /* it is revoked */ } /* query_dnskeys(): */ tp->autr->last_queried = *env->now; log_nametypeclass(VERB_ALGO, "autotrust process for", tp->name, LDNS_RR_TYPE_DNSKEY, tp->dclass); /* see if time alone makes some keys valid */ autr_holddown_exceed(env, tp, &changed); if(changed) { verbose(VERB_ALGO, "autotrust: morekeys, reassemble"); if(!autr_assemble(tp)) { log_err("malloc failure assembling autotrust keys"); return 1; /* unchanged */ } } /* did we get any data? */ if(!dnskey_rrset) { verbose(VERB_ALGO, "autotrust: no dnskey rrset"); /* no update of query_failed, because then we would have * to write to disk. But we cannot because we maybe are * still 'initializing' with DS records, that we cannot write * in the full format (which only contains KSKs). */ return 1; /* trust point exists */ } /* check for revoked keys to remove immediately */ check_contains_revoked(env, ve, tp, dnskey_rrset, &changed, qstate); if(changed) { verbose(VERB_ALGO, "autotrust: revokedkeys, reassemble"); if(!autr_assemble(tp)) { log_err("malloc failure assembling autotrust keys"); return 1; /* unchanged */ } if(!tp->ds_rrset && !tp->dnskey_rrset) { /* no more keys, all are revoked */ /* this is a success for this probe attempt */ tp->autr->last_success = *env->now; autr_tp_remove(env, tp, dnskey_rrset); return 0; /* trust point removed */ } } /* verify the dnskey rrset and see if it is valid. */ if(!verify_dnskey(env, ve, tp, dnskey_rrset, qstate)) { verbose(VERB_ALGO, "autotrust: dnskey did not verify."); /* only increase failure count if this is not the first prime, * this means there was a previous successful probe */ if(tp->autr->last_success) { tp->autr->query_failed += 1; autr_write_file(env, tp); } return 1; /* trust point exists */ } tp->autr->last_success = *env->now; tp->autr->query_failed = 0; /* Add new trust anchors to the data structure * - note which trust anchors are seen this probe. * Set trustpoint query_interval and retry_time. * - find minimum rrsig expiration interval */ if(!update_events(env, ve, tp, dnskey_rrset, &changed)) { log_err("malloc failure in autotrust update_events. " "trust point unchanged."); return 1; /* trust point unchanged, so exists */ } /* - for every SEP key do the 5011 statetable. * - remove missing trustanchors (if veryold and we have new anchors). */ if(!do_statetable(env, tp, &changed)) { log_err("malloc failure in autotrust do_statetable. " "trust point unchanged."); return 1; /* trust point unchanged, so exists */ } autr_cleanup_keys(tp); if(!set_next_probe(env, tp, dnskey_rrset)) return 0; /* trust point does not exist */ autr_write_file(env, tp); if(changed) { verbose(VERB_ALGO, "autotrust: changed, reassemble"); if(!autr_assemble(tp)) { log_err("malloc failure assembling autotrust keys"); return 1; /* unchanged */ } if(!tp->ds_rrset && !tp->dnskey_rrset) { /* no more keys, all are revoked */ autr_tp_remove(env, tp, dnskey_rrset); return 0; /* trust point removed */ } } else verbose(VERB_ALGO, "autotrust: no changes"); return 1; /* trust point exists */ } /** debug print a trust anchor key */ static void autr_debug_print_ta(struct autr_ta* ta) { char buf[32]; char* str = sldns_wire2str_rr(ta->rr, ta->rr_len); if(!str) { log_info("out of memory in debug_print_ta"); return; } if(str[0]) str[strlen(str)-1]=0; /* remove newline */ ctime_r(&ta->last_change, buf); if(buf[0]) buf[strlen(buf)-1]=0; /* remove newline */ log_info("[%s] %s ;;state:%d ;;pending_count:%d%s%s last:%s", trustanchor_state2str(ta->s), str, ta->s, ta->pending_count, ta->fetched?" fetched":"", ta->revoked?" revoked":"", buf); free(str); } /** debug print a trust point */ static void autr_debug_print_tp(struct trust_anchor* tp) { struct autr_ta* ta; char buf[257]; if(!tp->autr) return; dname_str(tp->name, buf); log_info("trust point %s : %d", buf, (int)tp->dclass); log_info("assembled %d DS and %d DNSKEYs", (int)tp->numDS, (int)tp->numDNSKEY); if(tp->ds_rrset) { log_packed_rrset(NO_VERBOSE, "DS:", tp->ds_rrset); } if(tp->dnskey_rrset) { log_packed_rrset(NO_VERBOSE, "DNSKEY:", tp->dnskey_rrset); } log_info("file %s", tp->autr->file); ctime_r(&tp->autr->last_queried, buf); if(buf[0]) buf[strlen(buf)-1]=0; /* remove newline */ log_info("last_queried: %u %s", (unsigned)tp->autr->last_queried, buf); ctime_r(&tp->autr->last_success, buf); if(buf[0]) buf[strlen(buf)-1]=0; /* remove newline */ log_info("last_success: %u %s", (unsigned)tp->autr->last_success, buf); ctime_r(&tp->autr->next_probe_time, buf); if(buf[0]) buf[strlen(buf)-1]=0; /* remove newline */ log_info("next_probe_time: %u %s", (unsigned)tp->autr->next_probe_time, buf); log_info("query_interval: %u", (unsigned)tp->autr->query_interval); log_info("retry_time: %u", (unsigned)tp->autr->retry_time); log_info("query_failed: %u", (unsigned)tp->autr->query_failed); for(ta=tp->autr->keys; ta; ta=ta->next) { autr_debug_print_ta(ta); } } void autr_debug_print(struct val_anchors* anchors) { struct trust_anchor* tp; lock_basic_lock(&anchors->lock); RBTREE_FOR(tp, struct trust_anchor*, anchors->tree) { lock_basic_lock(&tp->lock); autr_debug_print_tp(tp); lock_basic_unlock(&tp->lock); } lock_basic_unlock(&anchors->lock); } void probe_answer_cb(void* arg, int ATTR_UNUSED(rcode), sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(sec), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { /* retry was set before the query was done, * re-querytime is set when query succeeded, but that may not * have reset this timer because the query could have been * handled by another thread. In that case, this callback would * get called after the original timeout is done. * By not resetting the timer, it may probe more often, but not * less often. * Unless the new lookup resulted in smaller TTLs and thus smaller * timeout values. In that case one old TTL could be mistakenly done. */ struct module_env* env = (struct module_env*)arg; verbose(VERB_ALGO, "autotrust probe answer cb"); reset_worker_timer(env); } /** probe a trust anchor DNSKEY and unlocks tp */ static void probe_anchor(struct module_env* env, struct trust_anchor* tp) { struct query_info qinfo; uint16_t qflags = BIT_RD; struct edns_data edns; sldns_buffer* buf = env->scratch_buffer; qinfo.qname = regional_alloc_init(env->scratch, tp->name, tp->namelen); if(!qinfo.qname) { log_err("out of memory making 5011 probe"); return; } qinfo.qname_len = tp->namelen; qinfo.qtype = LDNS_RR_TYPE_DNSKEY; qinfo.qclass = tp->dclass; qinfo.local_alias = NULL; log_query_info(VERB_ALGO, "autotrust probe", &qinfo); verbose(VERB_ALGO, "retry probe set in %d seconds", (int)tp->autr->next_probe_time - (int)*env->now); edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; /* can't hold the lock while mesh_run is processing */ lock_basic_unlock(&tp->lock); /* delete the DNSKEY from rrset and key cache so an active probe * is done. First the rrset so another thread does not use it * to recreate the key entry in a race condition. */ rrset_cache_remove(env->rrset_cache, qinfo.qname, qinfo.qname_len, qinfo.qtype, qinfo.qclass, 0); key_cache_remove(env->key_cache, qinfo.qname, qinfo.qname_len, qinfo.qclass); if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0, &probe_answer_cb, env)) { log_err("out of memory making 5011 probe"); } } /** fetch first to-probe trust-anchor and lock it and set retrytime */ static struct trust_anchor* todo_probe(struct module_env* env, time_t* next) { struct trust_anchor* tp; rbnode_type* el; /* get first one */ lock_basic_lock(&env->anchors->lock); if( (el=rbtree_first(&env->anchors->autr->probe)) == RBTREE_NULL) { /* in case of revoked anchors */ lock_basic_unlock(&env->anchors->lock); /* signal that there are no anchors to probe */ *next = 0; return NULL; } tp = (struct trust_anchor*)el->key; lock_basic_lock(&tp->lock); /* is it eligible? */ if((time_t)tp->autr->next_probe_time > *env->now) { /* no more to probe */ *next = (time_t)tp->autr->next_probe_time - *env->now; lock_basic_unlock(&tp->lock); lock_basic_unlock(&env->anchors->lock); return NULL; } /* reset its next probe time */ (void)rbtree_delete(&env->anchors->autr->probe, tp); tp->autr->next_probe_time = calc_next_probe(env, tp->autr->retry_time); (void)rbtree_insert(&env->anchors->autr->probe, &tp->autr->pnode); lock_basic_unlock(&env->anchors->lock); return tp; } time_t autr_probe_timer(struct module_env* env) { struct trust_anchor* tp; time_t next_probe = 3600; int num = 0; if(autr_permit_small_holddown) next_probe = 1; verbose(VERB_ALGO, "autotrust probe timer callback"); /* while there are still anchors to probe */ while( (tp = todo_probe(env, &next_probe)) ) { /* make a probe for this anchor */ probe_anchor(env, tp); num++; } regional_free_all(env->scratch); if(next_probe == 0) return 0; /* no trust points to probe */ verbose(VERB_ALGO, "autotrust probe timer %d callbacks done", num); return next_probe; } unbound-1.13.1/validator/val_kentry.h0000644000175000017500000001627214010434640017223 0ustar wouterwouter/* * validator/val_kentry.h - validator key entry definition. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for dealing with validator key entries. */ #ifndef VALIDATOR_VAL_KENTRY_H #define VALIDATOR_VAL_KENTRY_H struct packed_rrset_data; struct regional; struct ub_packed_rrset_key; #include "util/storage/lruhash.h" /** * A key entry for the validator. * This may or may not be a trusted key. * This is what is stored in the key cache. * This is the key part for the cache; the key entry key. */ struct key_entry_key { /** lru hash entry */ struct lruhash_entry entry; /** name of the key */ uint8_t* name; /** length of name */ size_t namelen; /** class of the key, host byteorder */ uint16_t key_class; }; /** * Key entry for the validator. * Contains key status. * This is the data part for the cache, the key entry data. * * Can be in three basic states: * isbad=0: good key * isbad=1: bad key * isbad=0 && rrset=0: insecure space. */ struct key_entry_data { /** the TTL of this entry (absolute time) */ time_t ttl; /** the key rrdata. can be NULL to signal keyless name. */ struct packed_rrset_data* rrset_data; /** not NULL sometimes to give reason why bogus */ char* reason; /** list of algorithms signalled, ends with 0, or NULL */ uint8_t* algo; /** DNS RR type of the rrset data (host order) */ uint16_t rrset_type; /** if the key is bad: Bogus or malformed */ uint8_t isbad; }; /** function for lruhash operation */ size_t key_entry_sizefunc(void* key, void* data); /** function for lruhash operation */ int key_entry_compfunc(void* k1, void* k2); /** function for lruhash operation */ void key_entry_delkeyfunc(void* key, void* userarg); /** function for lruhash operation */ void key_entry_deldatafunc(void* data, void* userarg); /** calculate hash for key entry * @param kk: key entry. The lruhash entry.hash value is filled in. */ void key_entry_hash(struct key_entry_key* kk); /** * Copy a key entry, to be region-allocated. * @param kkey: the key entry key (and data pointer) to copy. * @param region: where to allocate it * @return newly region-allocated entry or NULL on a failure to allocate. */ struct key_entry_key* key_entry_copy_toregion(struct key_entry_key* kkey, struct regional* region); /** * Copy a key entry, malloced. * @param kkey: the key entry key (and data pointer) to copy. * @return newly allocated entry or NULL on a failure to allocate memory. */ struct key_entry_key* key_entry_copy(struct key_entry_key* kkey); /** * See if this is a null entry. Does not do locking. * @param kkey: must have data pointer set correctly * @return true if it is a NULL rrset entry. */ int key_entry_isnull(struct key_entry_key* kkey); /** * See if this entry is good. Does not do locking. * @param kkey: must have data pointer set correctly * @return true if it is good. */ int key_entry_isgood(struct key_entry_key* kkey); /** * See if this entry is bad. Does not do locking. * @param kkey: must have data pointer set correctly * @return true if it is bad. */ int key_entry_isbad(struct key_entry_key* kkey); /** * Set reason why a key is bad. * @param kkey: bad key. * @param reason: string to attach, you must allocate it. * Not safe to call twice unless you deallocate it yourself. */ void key_entry_set_reason(struct key_entry_key* kkey, char* reason); /** * Get reason why a key is bad. * @param kkey: bad key * @return pointer to string. * String is part of key entry and is deleted with it. */ char* key_entry_get_reason(struct key_entry_key* kkey); /** * Create a null entry, in the given region. * @param region: where to allocate * @param name: the key name * @param namelen: length of name * @param dclass: class of key entry. (host order); * @param ttl: what ttl should the key have. relative. * @param now: current time (added to ttl). * @return new key entry or NULL on alloc failure */ struct key_entry_key* key_entry_create_null(struct regional* region, uint8_t* name, size_t namelen, uint16_t dclass, time_t ttl, time_t now); /** * Create a key entry from an rrset, in the given region. * @param region: where to allocate. * @param name: the key name * @param namelen: length of name * @param dclass: class of key entry. (host order); * @param rrset: data for key entry. This is copied to the region. * @param sigalg: signalled algorithm list (or NULL). * @param now: current time (added to ttl of rrset) * @return new key entry or NULL on alloc failure */ struct key_entry_key* key_entry_create_rrset(struct regional* region, uint8_t* name, size_t namelen, uint16_t dclass, struct ub_packed_rrset_key* rrset, uint8_t* sigalg, time_t now); /** * Create a bad entry, in the given region. * @param region: where to allocate * @param name: the key name * @param namelen: length of name * @param dclass: class of key entry. (host order); * @param ttl: what ttl should the key have. relative. * @param now: current time (added to ttl). * @return new key entry or NULL on alloc failure */ struct key_entry_key* key_entry_create_bad(struct regional* region, uint8_t* name, size_t namelen, uint16_t dclass, time_t ttl, time_t now); /** * Obtain rrset from a key entry, allocated in region. * @param kkey: key entry to convert to a rrset. * @param region: where to allocate rrset * @return rrset copy; if no rrset or alloc error returns NULL. */ struct ub_packed_rrset_key* key_entry_get_rrset(struct key_entry_key* kkey, struct regional* region); /** * Get keysize of the keyentry. * @param kkey: key, must be a good key, with contents. * @return size in bits of the key. */ size_t key_entry_keysize(struct key_entry_key* kkey); #endif /* VALIDATOR_VAL_KENTRY_H */ unbound-1.13.1/validator/val_sigcrypt.c0000644000175000017500000012603514010434640017545 0ustar wouterwouter/* * validator/val_sigcrypt.c - validator signature crypto functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with signature verification and checking, the * bridging between RR wireformat data and crypto calls. */ #include "config.h" #include "validator/val_sigcrypt.h" #include "validator/val_secalgo.h" #include "validator/validator.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" #include "util/data/dname.h" #include "util/rbtree.h" #include "util/module.h" #include "util/net_help.h" #include "util/regional.h" #include "util/config_file.h" #include "sldns/keyraw.h" #include "sldns/sbuffer.h" #include "sldns/parseutil.h" #include "sldns/wire2str.h" #include #if !defined(HAVE_SSL) && !defined(HAVE_NSS) && !defined(HAVE_NETTLE) #error "Need crypto library to do digital signature cryptography" #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif /** return number of rrs in an rrset */ static size_t rrset_get_count(struct ub_packed_rrset_key* rrset) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; if(!d) return 0; return d->count; } /** * Get RR signature count */ static size_t rrset_get_sigcount(struct ub_packed_rrset_key* k) { struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; return d->rrsig_count; } /** * Get signature keytag value * @param k: rrset (with signatures) * @param sig_idx: signature index. * @return keytag or 0 if malformed rrsig. */ static uint16_t rrset_get_sig_keytag(struct ub_packed_rrset_key* k, size_t sig_idx) { uint16_t t; struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; log_assert(sig_idx < d->rrsig_count); if(d->rr_len[d->count + sig_idx] < 2+18) return 0; memmove(&t, d->rr_data[d->count + sig_idx]+2+16, 2); return ntohs(t); } /** * Get signature signing algorithm value * @param k: rrset (with signatures) * @param sig_idx: signature index. * @return algo or 0 if malformed rrsig. */ static int rrset_get_sig_algo(struct ub_packed_rrset_key* k, size_t sig_idx) { struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; log_assert(sig_idx < d->rrsig_count); if(d->rr_len[d->count + sig_idx] < 2+3) return 0; return (int)d->rr_data[d->count + sig_idx][2+2]; } /** get rdata pointer and size */ static void rrset_get_rdata(struct ub_packed_rrset_key* k, size_t idx, uint8_t** rdata, size_t* len) { struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; log_assert(d && idx < (d->count + d->rrsig_count)); *rdata = d->rr_data[idx]; *len = d->rr_len[idx]; } uint16_t dnskey_get_flags(struct ub_packed_rrset_key* k, size_t idx) { uint8_t* rdata; size_t len; uint16_t f; rrset_get_rdata(k, idx, &rdata, &len); if(len < 2+2) return 0; memmove(&f, rdata+2, 2); f = ntohs(f); return f; } /** * Get DNSKEY protocol value from rdata * @param k: DNSKEY rrset. * @param idx: which key. * @return protocol octet value */ static int dnskey_get_protocol(struct ub_packed_rrset_key* k, size_t idx) { uint8_t* rdata; size_t len; rrset_get_rdata(k, idx, &rdata, &len); if(len < 2+4) return 0; return (int)rdata[2+2]; } int dnskey_get_algo(struct ub_packed_rrset_key* k, size_t idx) { uint8_t* rdata; size_t len; rrset_get_rdata(k, idx, &rdata, &len); if(len < 2+4) return 0; return (int)rdata[2+3]; } /** get public key rdata field from a dnskey RR and do some checks */ static void dnskey_get_pubkey(struct ub_packed_rrset_key* k, size_t idx, unsigned char** pk, unsigned int* pklen) { uint8_t* rdata; size_t len; rrset_get_rdata(k, idx, &rdata, &len); if(len < 2+5) { *pk = NULL; *pklen = 0; return; } *pk = (unsigned char*)rdata+2+4; *pklen = (unsigned)len-2-4; } int ds_get_key_algo(struct ub_packed_rrset_key* k, size_t idx) { uint8_t* rdata; size_t len; rrset_get_rdata(k, idx, &rdata, &len); if(len < 2+3) return 0; return (int)rdata[2+2]; } int ds_get_digest_algo(struct ub_packed_rrset_key* k, size_t idx) { uint8_t* rdata; size_t len; rrset_get_rdata(k, idx, &rdata, &len); if(len < 2+4) return 0; return (int)rdata[2+3]; } uint16_t ds_get_keytag(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx) { uint16_t t; uint8_t* rdata; size_t len; rrset_get_rdata(ds_rrset, ds_idx, &rdata, &len); if(len < 2+2) return 0; memmove(&t, rdata+2, 2); return ntohs(t); } /** * Return pointer to the digest in a DS RR. * @param k: DS rrset. * @param idx: which DS. * @param digest: digest data is returned. * on error, this is NULL. * @param len: length of digest is returned. * on error, the length is 0. */ static void ds_get_sigdata(struct ub_packed_rrset_key* k, size_t idx, uint8_t** digest, size_t* len) { uint8_t* rdata; size_t rdlen; rrset_get_rdata(k, idx, &rdata, &rdlen); if(rdlen < 2+5) { *digest = NULL; *len = 0; return; } *digest = rdata + 2 + 4; *len = rdlen - 2 - 4; } /** * Return size of DS digest according to its hash algorithm. * @param k: DS rrset. * @param idx: which DS. * @return size in bytes of digest, or 0 if not supported. */ static size_t ds_digest_size_algo(struct ub_packed_rrset_key* k, size_t idx) { return ds_digest_size_supported(ds_get_digest_algo(k, idx)); } /** * Create a DS digest for a DNSKEY entry. * * @param env: module environment. Uses scratch space. * @param dnskey_rrset: DNSKEY rrset. * @param dnskey_idx: index of RR in rrset. * @param ds_rrset: DS rrset * @param ds_idx: index of RR in DS rrset. * @param digest: digest is returned in here (must be correctly sized). * @return false on error. */ static int ds_create_dnskey_digest(struct module_env* env, struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx, struct ub_packed_rrset_key* ds_rrset, size_t ds_idx, uint8_t* digest) { sldns_buffer* b = env->scratch_buffer; uint8_t* dnskey_rdata; size_t dnskey_len; rrset_get_rdata(dnskey_rrset, dnskey_idx, &dnskey_rdata, &dnskey_len); /* create digest source material in buffer * digest = digest_algorithm( DNSKEY owner name | DNSKEY RDATA); * DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key. */ sldns_buffer_clear(b); sldns_buffer_write(b, dnskey_rrset->rk.dname, dnskey_rrset->rk.dname_len); query_dname_tolower(sldns_buffer_begin(b)); sldns_buffer_write(b, dnskey_rdata+2, dnskey_len-2); /* skip rdatalen*/ sldns_buffer_flip(b); return secalgo_ds_digest(ds_get_digest_algo(ds_rrset, ds_idx), (unsigned char*)sldns_buffer_begin(b), sldns_buffer_limit(b), (unsigned char*)digest); } int ds_digest_match_dnskey(struct module_env* env, struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx, struct ub_packed_rrset_key* ds_rrset, size_t ds_idx) { uint8_t* ds; /* DS digest */ size_t dslen; uint8_t* digest; /* generated digest */ size_t digestlen = ds_digest_size_algo(ds_rrset, ds_idx); if(digestlen == 0) { verbose(VERB_QUERY, "DS fail: not supported, or DS RR " "format error"); return 0; /* not supported, or DS RR format error */ } #ifndef USE_SHA1 if(fake_sha1 && ds_get_digest_algo(ds_rrset, ds_idx)==LDNS_SHA1) return 1; #endif /* check digest length in DS with length from hash function */ ds_get_sigdata(ds_rrset, ds_idx, &ds, &dslen); if(!ds || dslen != digestlen) { verbose(VERB_QUERY, "DS fail: DS RR algo and digest do not " "match each other"); return 0; /* DS algorithm and digest do not match */ } digest = regional_alloc(env->scratch, digestlen); if(!digest) { verbose(VERB_QUERY, "DS fail: out of memory"); return 0; /* mem error */ } if(!ds_create_dnskey_digest(env, dnskey_rrset, dnskey_idx, ds_rrset, ds_idx, digest)) { verbose(VERB_QUERY, "DS fail: could not calc key digest"); return 0; /* digest algo failed */ } if(memcmp(digest, ds, dslen) != 0) { verbose(VERB_QUERY, "DS fail: digest is different"); return 0; /* digest different */ } return 1; } int ds_digest_algo_is_supported(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx) { return (ds_digest_size_algo(ds_rrset, ds_idx) != 0); } int ds_key_algo_is_supported(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx) { return dnskey_algo_id_is_supported(ds_get_key_algo(ds_rrset, ds_idx)); } uint16_t dnskey_calc_keytag(struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx) { uint8_t* data; size_t len; rrset_get_rdata(dnskey_rrset, dnskey_idx, &data, &len); /* do not pass rdatalen to ldns */ return sldns_calc_keytag_raw(data+2, len-2); } int dnskey_algo_is_supported(struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx) { return dnskey_algo_id_is_supported(dnskey_get_algo(dnskey_rrset, dnskey_idx)); } void algo_needs_init_dnskey_add(struct algo_needs* n, struct ub_packed_rrset_key* dnskey, uint8_t* sigalg) { uint8_t algo; size_t i, total = n->num; size_t num = rrset_get_count(dnskey); for(i=0; ineeds[algo] == 0) { n->needs[algo] = 1; sigalg[total] = algo; total++; } } sigalg[total] = 0; n->num = total; } void algo_needs_init_list(struct algo_needs* n, uint8_t* sigalg) { uint8_t algo; size_t total = 0; memset(n->needs, 0, sizeof(uint8_t)*ALGO_NEEDS_MAX); while( (algo=*sigalg++) != 0) { log_assert(dnskey_algo_id_is_supported((int)algo)); log_assert(n->needs[algo] == 0); n->needs[algo] = 1; total++; } n->num = total; } void algo_needs_init_ds(struct algo_needs* n, struct ub_packed_rrset_key* ds, int fav_ds_algo, uint8_t* sigalg) { uint8_t algo; size_t i, total = 0; size_t num = rrset_get_count(ds); memset(n->needs, 0, sizeof(uint8_t)*ALGO_NEEDS_MAX); for(i=0; ineeds[algo] == 0) { n->needs[algo] = 1; sigalg[total] = algo; total++; } } sigalg[total] = 0; n->num = total; } int algo_needs_set_secure(struct algo_needs* n, uint8_t algo) { if(n->needs[algo]) { n->needs[algo] = 0; n->num --; if(n->num == 0) /* done! */ return 1; } return 0; } void algo_needs_set_bogus(struct algo_needs* n, uint8_t algo) { if(n->needs[algo]) n->needs[algo] = 2; /* need it, but bogus */ } size_t algo_needs_num_missing(struct algo_needs* n) { return n->num; } int algo_needs_missing(struct algo_needs* n) { int i; /* first check if a needed algo was bogus - report that */ for(i=0; ineeds[i] == 2) return 0; /* now check which algo is missing */ for(i=0; ineeds[i] == 1) return i; return 0; } enum sec_status dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, uint8_t* sigalg, char** reason, sldns_pkt_section section, struct module_qstate* qstate) { enum sec_status sec; size_t i, num; rbtree_type* sortree = NULL; /* make sure that for all DNSKEY algorithms there are valid sigs */ struct algo_needs needs; int alg; num = rrset_get_sigcount(rrset); if(num == 0) { verbose(VERB_QUERY, "rrset failed to verify due to a lack of " "signatures"); *reason = "no signatures"; return sec_status_bogus; } if(sigalg) { algo_needs_init_list(&needs, sigalg); if(algo_needs_num_missing(&needs) == 0) { verbose(VERB_QUERY, "zone has no known algorithms"); *reason = "zone has no known algorithms"; return sec_status_insecure; } } for(i=0; inow, rrset, dnskey, i, &sortree, reason, section, qstate); /* see which algorithm has been fixed up */ if(sec == sec_status_secure) { if(!sigalg) return sec; /* done! */ else if(algo_needs_set_secure(&needs, (uint8_t)rrset_get_sig_algo(rrset, i))) return sec; /* done! */ } else if(sigalg && sec == sec_status_bogus) { algo_needs_set_bogus(&needs, (uint8_t)rrset_get_sig_algo(rrset, i)); } } if(sigalg && (alg=algo_needs_missing(&needs)) != 0) { verbose(VERB_ALGO, "rrset failed to verify: " "no valid signatures for %d algorithms", (int)algo_needs_num_missing(&needs)); algo_needs_reason(env, alg, reason, "no signatures"); } else { verbose(VERB_ALGO, "rrset failed to verify: " "no valid signatures"); } return sec_status_bogus; } void algo_needs_reason(struct module_env* env, int alg, char** reason, char* s) { char buf[256]; sldns_lookup_table *t = sldns_lookup_by_id(sldns_algorithms, alg); if(t&&t->name) snprintf(buf, sizeof(buf), "%s with algorithm %s", s, t->name); else snprintf(buf, sizeof(buf), "%s with algorithm ALG%u", s, (unsigned)alg); *reason = regional_strdup(env->scratch, buf); if(!*reason) *reason = s; } enum sec_status dnskey_verify_rrset(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t dnskey_idx, char** reason, sldns_pkt_section section, struct module_qstate* qstate) { enum sec_status sec; size_t i, num, numchecked = 0; rbtree_type* sortree = NULL; int buf_canon = 0; uint16_t tag = dnskey_calc_keytag(dnskey, dnskey_idx); int algo = dnskey_get_algo(dnskey, dnskey_idx); num = rrset_get_sigcount(rrset); if(num == 0) { verbose(VERB_QUERY, "rrset failed to verify due to a lack of " "signatures"); *reason = "no signatures"; return sec_status_bogus; } for(i=0; iscratch, env->scratch_buffer, ve, *env->now, rrset, dnskey, dnskey_idx, i, &sortree, &buf_canon, reason, section, qstate); if(sec == sec_status_secure) return sec; numchecked ++; } verbose(VERB_ALGO, "rrset failed to verify: all signatures are bogus"); if(!numchecked) *reason = "signature missing"; return sec_status_bogus; } enum sec_status dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t sig_idx, struct rbtree_type** sortree, char** reason, sldns_pkt_section section, struct module_qstate* qstate) { /* find matching keys and check them */ enum sec_status sec = sec_status_bogus; uint16_t tag = rrset_get_sig_keytag(rrset, sig_idx); int algo = rrset_get_sig_algo(rrset, sig_idx); size_t i, num = rrset_get_count(dnskey); size_t numchecked = 0; int buf_canon = 0; verbose(VERB_ALGO, "verify sig %d %d", (int)tag, algo); if(!dnskey_algo_id_is_supported(algo)) { verbose(VERB_QUERY, "verify sig: unknown algorithm"); return sec_status_insecure; } for(i=0; iscratch, env->scratch_buffer, ve, now, rrset, dnskey, i, sig_idx, sortree, &buf_canon, reason, section, qstate); if(sec == sec_status_secure) return sec; } if(numchecked == 0) { *reason = "signatures from unknown keys"; verbose(VERB_QUERY, "verify: could not find appropriate key"); return sec_status_bogus; } return sec_status_bogus; } /** * RR entries in a canonical sorted tree of RRs */ struct canon_rr { /** rbtree node, key is this structure */ rbnode_type node; /** rrset the RR is in */ struct ub_packed_rrset_key* rrset; /** which RR in the rrset */ size_t rr_idx; }; /** * Compare two RR for canonical order, in a field-style sweep. * @param d: rrset data * @param desc: ldns wireformat descriptor. * @param i: first RR to compare * @param j: first RR to compare * @return comparison code. */ static int canonical_compare_byfield(struct packed_rrset_data* d, const sldns_rr_descriptor* desc, size_t i, size_t j) { /* sweep across rdata, keep track of some state: * which rr field, and bytes left in field. * current position in rdata, length left. * are we in a dname, length left in a label. */ int wfi = -1; /* current wireformat rdata field (rdf) */ int wfj = -1; uint8_t* di = d->rr_data[i]+2; /* ptr to current rdata byte */ uint8_t* dj = d->rr_data[j]+2; size_t ilen = d->rr_len[i]-2; /* length left in rdata */ size_t jlen = d->rr_len[j]-2; int dname_i = 0; /* true if these bytes are part of a name */ int dname_j = 0; size_t lablen_i = 0; /* 0 for label length byte,for first byte of rdf*/ size_t lablen_j = 0; /* otherwise remaining length of rdf or label */ int dname_num_i = (int)desc->_dname_count; /* decreased at root label */ int dname_num_j = (int)desc->_dname_count; /* loop while there are rdata bytes available for both rrs, * and still some lowercasing needs to be done; either the dnames * have not been reached yet, or they are currently being processed */ while(ilen > 0 && jlen > 0 && (dname_num_i > 0 || dname_num_j > 0)) { /* compare these two bytes */ /* lowercase if in a dname and not a label length byte */ if( ((dname_i && lablen_i)?(uint8_t)tolower((int)*di):*di) != ((dname_j && lablen_j)?(uint8_t)tolower((int)*dj):*dj) ) { if(((dname_i && lablen_i)?(uint8_t)tolower((int)*di):*di) < ((dname_j && lablen_j)?(uint8_t)tolower((int)*dj):*dj)) return -1; return 1; } ilen--; jlen--; /* bytes are equal */ /* advance field i */ /* lablen 0 means that this byte is the first byte of the * next rdata field; inspect this rdata field and setup * to process the rest of this rdata field. * The reason to first read the byte, then setup the rdf, * is that we are then sure the byte is available and short * rdata is handled gracefully (even if it is a formerr). */ if(lablen_i == 0) { if(dname_i) { /* scan this dname label */ /* capture length to lowercase */ lablen_i = (size_t)*di; if(lablen_i == 0) { /* end root label */ dname_i = 0; dname_num_i--; /* if dname num is 0, then the * remainder is binary only */ if(dname_num_i == 0) lablen_i = ilen; } } else { /* scan this rdata field */ wfi++; if(desc->_wireformat[wfi] == LDNS_RDF_TYPE_DNAME) { dname_i = 1; lablen_i = (size_t)*di; if(lablen_i == 0) { dname_i = 0; dname_num_i--; if(dname_num_i == 0) lablen_i = ilen; } } else if(desc->_wireformat[wfi] == LDNS_RDF_TYPE_STR) lablen_i = (size_t)*di; else lablen_i = get_rdf_size( desc->_wireformat[wfi]) - 1; } } else lablen_i--; /* advance field j; same as for i */ if(lablen_j == 0) { if(dname_j) { lablen_j = (size_t)*dj; if(lablen_j == 0) { dname_j = 0; dname_num_j--; if(dname_num_j == 0) lablen_j = jlen; } } else { wfj++; if(desc->_wireformat[wfj] == LDNS_RDF_TYPE_DNAME) { dname_j = 1; lablen_j = (size_t)*dj; if(lablen_j == 0) { dname_j = 0; dname_num_j--; if(dname_num_j == 0) lablen_j = jlen; } } else if(desc->_wireformat[wfj] == LDNS_RDF_TYPE_STR) lablen_j = (size_t)*dj; else lablen_j = get_rdf_size( desc->_wireformat[wfj]) - 1; } } else lablen_j--; di++; dj++; } /* end of the loop; because we advanced byte by byte; now we have * that the rdata has ended, or that there is a binary remainder */ /* shortest first */ if(ilen == 0 && jlen == 0) return 0; if(ilen == 0) return -1; if(jlen == 0) return 1; /* binary remainder, capture comparison in wfi variable */ if((wfi = memcmp(di, dj, (ilen. */ static int canonical_compare(struct ub_packed_rrset_key* rrset, size_t i, size_t j) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; const sldns_rr_descriptor* desc; uint16_t type = ntohs(rrset->rk.type); size_t minlen; int c; if(i==j) return 0; switch(type) { /* These RR types have only a name as RDATA. * This name has to be canonicalized.*/ case LDNS_RR_TYPE_NS: case LDNS_RR_TYPE_MD: case LDNS_RR_TYPE_MF: case LDNS_RR_TYPE_CNAME: case LDNS_RR_TYPE_MB: case LDNS_RR_TYPE_MG: case LDNS_RR_TYPE_MR: case LDNS_RR_TYPE_PTR: case LDNS_RR_TYPE_DNAME: /* the wireread function has already checked these * dname's for correctness, and this double checks */ if(!dname_valid(d->rr_data[i]+2, d->rr_len[i]-2) || !dname_valid(d->rr_data[j]+2, d->rr_len[j]-2)) return 0; return query_dname_compare(d->rr_data[i]+2, d->rr_data[j]+2); /* These RR types have STR and fixed size rdata fields * before one or more name fields that need canonicalizing, * and after that a byte-for byte remainder can be compared. */ /* type starts with the name; remainder is binary compared */ case LDNS_RR_TYPE_NXT: /* use rdata field formats */ case LDNS_RR_TYPE_MINFO: case LDNS_RR_TYPE_RP: case LDNS_RR_TYPE_SOA: case LDNS_RR_TYPE_RT: case LDNS_RR_TYPE_AFSDB: case LDNS_RR_TYPE_KX: case LDNS_RR_TYPE_MX: case LDNS_RR_TYPE_SIG: /* RRSIG signer name has to be downcased */ case LDNS_RR_TYPE_RRSIG: case LDNS_RR_TYPE_PX: case LDNS_RR_TYPE_NAPTR: case LDNS_RR_TYPE_SRV: desc = sldns_rr_descript(type); log_assert(desc); /* this holds for the types that need canonicalizing */ log_assert(desc->_minimum == desc->_maximum); return canonical_compare_byfield(d, desc, i, j); case LDNS_RR_TYPE_HINFO: /* no longer downcased */ case LDNS_RR_TYPE_NSEC: default: /* For unknown RR types, or types not listed above, * no canonicalization is needed, do binary compare */ /* byte for byte compare, equal means shortest first*/ minlen = d->rr_len[i]-2; if(minlen > d->rr_len[j]-2) minlen = d->rr_len[j]-2; c = memcmp(d->rr_data[i]+2, d->rr_data[j]+2, minlen); if(c!=0) return c; /* rdata equal, shortest is first */ if(d->rr_len[i] < d->rr_len[j]) return -1; if(d->rr_len[i] > d->rr_len[j]) return 1; /* rdata equal, length equal */ break; } return 0; } int canonical_tree_compare(const void* k1, const void* k2) { struct canon_rr* r1 = (struct canon_rr*)k1; struct canon_rr* r2 = (struct canon_rr*)k2; log_assert(r1->rrset == r2->rrset); return canonical_compare(r1->rrset, r1->rr_idx, r2->rr_idx); } /** * Sort RRs for rrset in canonical order. * Does not actually canonicalize the RR rdatas. * Does not touch rrsigs. * @param rrset: to sort. * @param d: rrset data. * @param sortree: tree to sort into. * @param rrs: rr storage. */ static void canonical_sort(struct ub_packed_rrset_key* rrset, struct packed_rrset_data* d, rbtree_type* sortree, struct canon_rr* rrs) { size_t i; /* insert into rbtree to sort and detect duplicates */ for(i=0; icount; i++) { rrs[i].node.key = &rrs[i]; rrs[i].rrset = rrset; rrs[i].rr_idx = i; if(!rbtree_insert(sortree, &rrs[i].node)) { /* this was a duplicate */ } } } /** * Insert canonical owner name into buffer. * @param buf: buffer to insert into at current position. * @param k: rrset with its owner name. * @param sig: signature with signer name and label count. * must be length checked, at least 18 bytes long. * @param can_owner: position in buffer returned for future use. * @param can_owner_len: length of canonical owner name. */ static void insert_can_owner(sldns_buffer* buf, struct ub_packed_rrset_key* k, uint8_t* sig, uint8_t** can_owner, size_t* can_owner_len) { int rrsig_labels = (int)sig[3]; int fqdn_labels = dname_signame_label_count(k->rk.dname); *can_owner = sldns_buffer_current(buf); if(rrsig_labels == fqdn_labels) { /* no change */ sldns_buffer_write(buf, k->rk.dname, k->rk.dname_len); query_dname_tolower(*can_owner); *can_owner_len = k->rk.dname_len; return; } log_assert(rrsig_labels < fqdn_labels); /* *. | fqdn(rightmost rrsig_labels) */ if(rrsig_labels < fqdn_labels) { int i; uint8_t* nm = k->rk.dname; size_t len = k->rk.dname_len; /* so skip fqdn_labels-rrsig_labels */ for(i=0; irk.type)) { case LDNS_RR_TYPE_NXT: case LDNS_RR_TYPE_NS: case LDNS_RR_TYPE_MD: case LDNS_RR_TYPE_MF: case LDNS_RR_TYPE_CNAME: case LDNS_RR_TYPE_MB: case LDNS_RR_TYPE_MG: case LDNS_RR_TYPE_MR: case LDNS_RR_TYPE_PTR: case LDNS_RR_TYPE_DNAME: /* type only has a single argument, the name */ query_dname_tolower(datstart); return; case LDNS_RR_TYPE_MINFO: case LDNS_RR_TYPE_RP: case LDNS_RR_TYPE_SOA: /* two names after another */ query_dname_tolower(datstart); query_dname_tolower(datstart + dname_valid(datstart, len-2)); return; case LDNS_RR_TYPE_RT: case LDNS_RR_TYPE_AFSDB: case LDNS_RR_TYPE_KX: case LDNS_RR_TYPE_MX: /* skip fixed part */ if(len < 2+2+1) /* rdlen, skiplen, 1byteroot */ return; datstart += 2; query_dname_tolower(datstart); return; case LDNS_RR_TYPE_SIG: /* downcase the RRSIG, compat with BIND (kept it from SIG) */ case LDNS_RR_TYPE_RRSIG: /* skip fixed part */ if(len < 2+18+1) return; datstart += 18; query_dname_tolower(datstart); return; case LDNS_RR_TYPE_PX: /* skip, then two names after another */ if(len < 2+2+1) return; datstart += 2; query_dname_tolower(datstart); query_dname_tolower(datstart + dname_valid(datstart, len-2-2)); return; case LDNS_RR_TYPE_NAPTR: if(len < 2+4) return; len -= 2+4; datstart += 4; if(len < (size_t)datstart[0]+1) /* skip text field */ return; len -= (size_t)datstart[0]+1; datstart += (size_t)datstart[0]+1; if(len < (size_t)datstart[0]+1) /* skip text field */ return; len -= (size_t)datstart[0]+1; datstart += (size_t)datstart[0]+1; if(len < (size_t)datstart[0]+1) /* skip text field */ return; len -= (size_t)datstart[0]+1; datstart += (size_t)datstart[0]+1; if(len < 1) /* check name is at least 1 byte*/ return; query_dname_tolower(datstart); return; case LDNS_RR_TYPE_SRV: /* skip fixed part */ if(len < 2+6+1) return; datstart += 6; query_dname_tolower(datstart); return; /* do not canonicalize NSEC rdata name, compat with * from bind 9.4 signer, where it does not do so */ case LDNS_RR_TYPE_NSEC: /* type starts with the name */ case LDNS_RR_TYPE_HINFO: /* not downcased */ /* A6 not supported */ default: /* nothing to do for unknown types */ return; } } int rrset_canonical_equal(struct regional* region, struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2) { struct rbtree_type sortree1, sortree2; struct canon_rr *rrs1, *rrs2, *p1, *p2; struct packed_rrset_data* d1=(struct packed_rrset_data*)k1->entry.data; struct packed_rrset_data* d2=(struct packed_rrset_data*)k2->entry.data; struct ub_packed_rrset_key fk; struct packed_rrset_data fd; size_t flen[2]; uint8_t* fdata[2]; /* basic compare */ if(k1->rk.dname_len != k2->rk.dname_len || k1->rk.flags != k2->rk.flags || k1->rk.type != k2->rk.type || k1->rk.rrset_class != k2->rk.rrset_class || query_dname_compare(k1->rk.dname, k2->rk.dname) != 0) return 0; if(d1->ttl != d2->ttl || d1->count != d2->count || d1->rrsig_count != d2->rrsig_count || d1->trust != d2->trust || d1->security != d2->security) return 0; /* init */ memset(&fk, 0, sizeof(fk)); memset(&fd, 0, sizeof(fd)); fk.entry.data = &fd; fd.count = 2; fd.rr_len = flen; fd.rr_data = fdata; rbtree_init(&sortree1, &canonical_tree_compare); rbtree_init(&sortree2, &canonical_tree_compare); if(d1->count > RR_COUNT_MAX || d2->count > RR_COUNT_MAX) return 1; /* protection against integer overflow */ rrs1 = regional_alloc(region, sizeof(struct canon_rr)*d1->count); rrs2 = regional_alloc(region, sizeof(struct canon_rr)*d2->count); if(!rrs1 || !rrs2) return 1; /* alloc failure */ /* sort */ canonical_sort(k1, d1, &sortree1, rrs1); canonical_sort(k2, d2, &sortree2, rrs2); /* compare canonical-sorted RRs for canonical-equality */ if(sortree1.count != sortree2.count) return 0; p1 = (struct canon_rr*)rbtree_first(&sortree1); p2 = (struct canon_rr*)rbtree_first(&sortree2); while(p1 != (struct canon_rr*)RBTREE_NULL && p2 != (struct canon_rr*)RBTREE_NULL) { flen[0] = d1->rr_len[p1->rr_idx]; flen[1] = d2->rr_len[p2->rr_idx]; fdata[0] = d1->rr_data[p1->rr_idx]; fdata[1] = d2->rr_data[p2->rr_idx]; if(canonical_compare(&fk, 0, 1) != 0) return 0; p1 = (struct canon_rr*)rbtree_next(&p1->node); p2 = (struct canon_rr*)rbtree_next(&p2->node); } return 1; } /** * Create canonical form of rrset in the scratch buffer. * @param region: temporary region. * @param buf: the buffer to use. * @param k: the rrset to insert. * @param sig: RRSIG rdata to include. * @param siglen: RRSIG rdata len excluding signature field, but inclusive * signer name length. * @param sortree: if NULL is passed a new sorted rrset tree is built. * Otherwise it is reused. * @param section: section of packet where this rrset comes from. * @param qstate: qstate with region. * @return false on alloc error. */ static int rrset_canonical(struct regional* region, sldns_buffer* buf, struct ub_packed_rrset_key* k, uint8_t* sig, size_t siglen, struct rbtree_type** sortree, sldns_pkt_section section, struct module_qstate* qstate) { struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; uint8_t* can_owner = NULL; size_t can_owner_len = 0; struct canon_rr* walk; struct canon_rr* rrs; if(!*sortree) { *sortree = (struct rbtree_type*)regional_alloc(region, sizeof(rbtree_type)); if(!*sortree) return 0; if(d->count > RR_COUNT_MAX) return 0; /* integer overflow protection */ rrs = regional_alloc(region, sizeof(struct canon_rr)*d->count); if(!rrs) { *sortree = NULL; return 0; } rbtree_init(*sortree, &canonical_tree_compare); canonical_sort(k, d, *sortree, rrs); } sldns_buffer_clear(buf); sldns_buffer_write(buf, sig, siglen); /* canonicalize signer name */ query_dname_tolower(sldns_buffer_begin(buf)+18); RBTREE_FOR(walk, struct canon_rr*, (*sortree)) { /* see if there is enough space left in the buffer */ if(sldns_buffer_remaining(buf) < can_owner_len + 2 + 2 + 4 + d->rr_len[walk->rr_idx]) { log_err("verify: failed to canonicalize, " "rrset too big"); return 0; } /* determine canonical owner name */ if(can_owner) sldns_buffer_write(buf, can_owner, can_owner_len); else insert_can_owner(buf, k, sig, &can_owner, &can_owner_len); sldns_buffer_write(buf, &k->rk.type, 2); sldns_buffer_write(buf, &k->rk.rrset_class, 2); sldns_buffer_write(buf, sig+4, 4); sldns_buffer_write(buf, d->rr_data[walk->rr_idx], d->rr_len[walk->rr_idx]); canonicalize_rdata(buf, k, d->rr_len[walk->rr_idx]); } sldns_buffer_flip(buf); /* Replace RR owner with canonical owner for NSEC records in authority * section, to prevent that a wildcard synthesized NSEC can be used in * the non-existence proves. */ if(ntohs(k->rk.type) == LDNS_RR_TYPE_NSEC && section == LDNS_SECTION_AUTHORITY) { k->rk.dname = regional_alloc_init(qstate->region, can_owner, can_owner_len); if(!k->rk.dname) return 0; k->rk.dname_len = can_owner_len; } return 1; } /** pretty print rrsig error with dates */ static void sigdate_error(const char* str, int32_t expi, int32_t incep, int32_t now) { struct tm tm; char expi_buf[16]; char incep_buf[16]; char now_buf[16]; time_t te, ti, tn; if(verbosity < VERB_QUERY) return; te = (time_t)expi; ti = (time_t)incep; tn = (time_t)now; memset(&tm, 0, sizeof(tm)); if(gmtime_r(&te, &tm) && strftime(expi_buf, 15, "%Y%m%d%H%M%S", &tm) &&gmtime_r(&ti, &tm) && strftime(incep_buf, 15, "%Y%m%d%H%M%S", &tm) &&gmtime_r(&tn, &tm) && strftime(now_buf, 15, "%Y%m%d%H%M%S", &tm)) { log_info("%s expi=%s incep=%s now=%s", str, expi_buf, incep_buf, now_buf); } else log_info("%s expi=%u incep=%u now=%u", str, (unsigned)expi, (unsigned)incep, (unsigned)now); } /** RFC 1982 comparison, uses unsigned integers, and tries to avoid * compiler optimization (eg. by avoiding a-b<0 comparisons), * this routine matches compare_serial(), for SOA serial number checks */ static int compare_1982(uint32_t a, uint32_t b) { /* for 32 bit values */ const uint32_t cutoff = ((uint32_t) 1 << (32 - 1)); if (a == b) { return 0; } else if ((a < b && b - a < cutoff) || (a > b && a - b > cutoff)) { return -1; } else { return 1; } } /** if we know that b is larger than a, return the difference between them, * that is the distance between them. in RFC1982 arith */ static uint32_t subtract_1982(uint32_t a, uint32_t b) { /* for 32 bit values */ const uint32_t cutoff = ((uint32_t) 1 << (32 - 1)); if(a == b) return 0; if(a < b && b - a < cutoff) { return b-a; } if(a > b && a - b > cutoff) { return ((uint32_t)0xffffffff) - (a-b-1); } /* wrong case, b smaller than a */ return 0; } /** check rrsig dates */ static int check_dates(struct val_env* ve, uint32_t unow, uint8_t* expi_p, uint8_t* incep_p, char** reason) { /* read out the dates */ uint32_t expi, incep, now; memmove(&expi, expi_p, sizeof(expi)); memmove(&incep, incep_p, sizeof(incep)); expi = ntohl(expi); incep = ntohl(incep); /* get current date */ if(ve->date_override) { if(ve->date_override == -1) { verbose(VERB_ALGO, "date override: ignore date"); return 1; } now = ve->date_override; verbose(VERB_ALGO, "date override option %d", (int)now); } else now = unow; /* check them */ if(compare_1982(incep, expi) > 0) { sigdate_error("verify: inception after expiration, " "signature bad", expi, incep, now); *reason = "signature inception after expiration"; return 0; } if(compare_1982(incep, now) > 0) { /* within skew ? (calc here to avoid calculation normally) */ uint32_t skew = subtract_1982(incep, expi)/10; if(skew < (uint32_t)ve->skew_min) skew = ve->skew_min; if(skew > (uint32_t)ve->skew_max) skew = ve->skew_max; if(subtract_1982(now, incep) > skew) { sigdate_error("verify: signature bad, current time is" " before inception date", expi, incep, now); *reason = "signature before inception date"; return 0; } sigdate_error("verify warning suspicious signature inception " " or bad local clock", expi, incep, now); } if(compare_1982(now, expi) > 0) { uint32_t skew = subtract_1982(incep, expi)/10; if(skew < (uint32_t)ve->skew_min) skew = ve->skew_min; if(skew > (uint32_t)ve->skew_max) skew = ve->skew_max; if(subtract_1982(expi, now) > skew) { sigdate_error("verify: signature expired", expi, incep, now); *reason = "signature expired"; return 0; } sigdate_error("verify warning suspicious signature expiration " " or bad local clock", expi, incep, now); } return 1; } /** adjust rrset TTL for verified rrset, compare to original TTL and expi */ static void adjust_ttl(struct val_env* ve, uint32_t unow, struct ub_packed_rrset_key* rrset, uint8_t* orig_p, uint8_t* expi_p, uint8_t* incep_p) { struct packed_rrset_data* d = (struct packed_rrset_data*)rrset->entry.data; /* read out the dates */ int32_t origttl, expittl, expi, incep, now; memmove(&origttl, orig_p, sizeof(origttl)); memmove(&expi, expi_p, sizeof(expi)); memmove(&incep, incep_p, sizeof(incep)); expi = ntohl(expi); incep = ntohl(incep); origttl = ntohl(origttl); /* get current date */ if(ve->date_override) { now = ve->date_override; } else now = (int32_t)unow; expittl = (int32_t)((uint32_t)expi - (uint32_t)now); /* so now: * d->ttl: rrset ttl read from message or cache. May be reduced * origttl: original TTL from signature, authoritative TTL max. * MIN_TTL: minimum TTL from config. * expittl: TTL until the signature expires. * * Use the smallest of these, but don't let origttl set the TTL * below the minimum. */ if(MIN_TTL > (time_t)origttl && d->ttl > MIN_TTL) { verbose(VERB_QUERY, "rrset TTL larger than original and minimum" " TTL, adjusting TTL downwards to minimum ttl"); d->ttl = MIN_TTL; } else if(MIN_TTL <= origttl && d->ttl > (time_t)origttl) { verbose(VERB_QUERY, "rrset TTL larger than original TTL, " "adjusting TTL downwards to original ttl"); d->ttl = origttl; } if(expittl > 0 && d->ttl > (time_t)expittl) { verbose(VERB_ALGO, "rrset TTL larger than sig expiration ttl," " adjusting TTL downwards"); d->ttl = expittl; } } enum sec_status dnskey_verify_rrset_sig(struct regional* region, sldns_buffer* buf, struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t dnskey_idx, size_t sig_idx, struct rbtree_type** sortree, int* buf_canon, char** reason, sldns_pkt_section section, struct module_qstate* qstate) { enum sec_status sec; uint8_t* sig; /* RRSIG rdata */ size_t siglen; size_t rrnum = rrset_get_count(rrset); uint8_t* signer; /* rrsig signer name */ size_t signer_len; unsigned char* sigblock; /* signature rdata field */ unsigned int sigblock_len; uint16_t ktag; /* DNSKEY key tag */ unsigned char* key; /* public key rdata field */ unsigned int keylen; rrset_get_rdata(rrset, rrnum + sig_idx, &sig, &siglen); /* min length of rdatalen, fixed rrsig, root signer, 1 byte sig */ if(siglen < 2+20) { verbose(VERB_QUERY, "verify: signature too short"); *reason = "signature too short"; return sec_status_bogus; } if(!(dnskey_get_flags(dnskey, dnskey_idx) & DNSKEY_BIT_ZSK)) { verbose(VERB_QUERY, "verify: dnskey without ZSK flag"); *reason = "dnskey without ZSK flag"; return sec_status_bogus; } if(dnskey_get_protocol(dnskey, dnskey_idx) != LDNS_DNSSEC_KEYPROTO) { /* RFC 4034 says DNSKEY PROTOCOL MUST be 3 */ verbose(VERB_QUERY, "verify: dnskey has wrong key protocol"); *reason = "dnskey has wrong protocolnumber"; return sec_status_bogus; } /* verify as many fields in rrsig as possible */ signer = sig+2+18; signer_len = dname_valid(signer, siglen-2-18); if(!signer_len) { verbose(VERB_QUERY, "verify: malformed signer name"); *reason = "signer name malformed"; return sec_status_bogus; /* signer name invalid */ } if(!dname_subdomain_c(rrset->rk.dname, signer)) { verbose(VERB_QUERY, "verify: signer name is off-tree"); *reason = "signer name off-tree"; return sec_status_bogus; /* signer name offtree */ } sigblock = (unsigned char*)signer+signer_len; if(siglen < 2+18+signer_len+1) { verbose(VERB_QUERY, "verify: too short, no signature data"); *reason = "signature too short, no signature data"; return sec_status_bogus; /* sig rdf is < 1 byte */ } sigblock_len = (unsigned int)(siglen - 2 - 18 - signer_len); /* verify key dname == sig signer name */ if(query_dname_compare(signer, dnskey->rk.dname) != 0) { verbose(VERB_QUERY, "verify: wrong key for rrsig"); log_nametypeclass(VERB_QUERY, "RRSIG signername is", signer, 0, 0); log_nametypeclass(VERB_QUERY, "the key name is", dnskey->rk.dname, 0, 0); *reason = "signer name mismatches key name"; return sec_status_bogus; } /* verify covered type */ /* memcmp works because type is in network format for rrset */ if(memcmp(sig+2, &rrset->rk.type, 2) != 0) { verbose(VERB_QUERY, "verify: wrong type covered"); *reason = "signature covers wrong type"; return sec_status_bogus; } /* verify keytag and sig algo (possibly again) */ if((int)sig[2+2] != dnskey_get_algo(dnskey, dnskey_idx)) { verbose(VERB_QUERY, "verify: wrong algorithm"); *reason = "signature has wrong algorithm"; return sec_status_bogus; } ktag = htons(dnskey_calc_keytag(dnskey, dnskey_idx)); if(memcmp(sig+2+16, &ktag, 2) != 0) { verbose(VERB_QUERY, "verify: wrong keytag"); *reason = "signature has wrong keytag"; return sec_status_bogus; } /* verify labels is in a valid range */ if((int)sig[2+3] > dname_signame_label_count(rrset->rk.dname)) { verbose(VERB_QUERY, "verify: labelcount out of range"); *reason = "signature labelcount out of range"; return sec_status_bogus; } /* original ttl, always ok */ if(!*buf_canon) { /* create rrset canonical format in buffer, ready for * signature */ if(!rrset_canonical(region, buf, rrset, sig+2, 18 + signer_len, sortree, section, qstate)) { log_err("verify: failed due to alloc error"); return sec_status_unchecked; } *buf_canon = 1; } /* check that dnskey is available */ dnskey_get_pubkey(dnskey, dnskey_idx, &key, &keylen); if(!key) { verbose(VERB_QUERY, "verify: short DNSKEY RR"); return sec_status_unchecked; } /* verify */ sec = verify_canonrrset(buf, (int)sig[2+2], sigblock, sigblock_len, key, keylen, reason); if(sec == sec_status_secure) { /* check if TTL is too high - reduce if so */ adjust_ttl(ve, now, rrset, sig+2+4, sig+2+8, sig+2+12); /* verify inception, expiration dates * Do this last so that if you ignore expired-sigs the * rest is sure to be OK. */ if(!check_dates(ve, now, sig+2+8, sig+2+12, reason)) { return sec_status_bogus; } } return sec; } unbound-1.13.1/validator/val_kcache.h0000644000175000017500000001001014010434640017105 0ustar wouterwouter/* * validator/val_kcache.h - validator key shared cache with validated keys * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for caching validated key entries. */ #ifndef VALIDATOR_VAL_KCACHE_H #define VALIDATOR_VAL_KCACHE_H #include "util/storage/slabhash.h" struct key_entry_key; struct key_entry_data; struct config_file; struct regional; struct module_qstate; /** * Key cache */ struct key_cache { /** uses slabhash for storage, type key_entry_key, key_entry_data */ struct slabhash* slab; }; /** * Create the key cache * @param cfg: config settings for the key cache. * @return new key cache or NULL on malloc failure. */ struct key_cache* key_cache_create(struct config_file* cfg); /** * Delete the key cache * @param kcache: to delete */ void key_cache_delete(struct key_cache* kcache); /** * Insert or update a key cache entry. Note that the insert may silently * fail if there is not enough memory. * * @param kcache: the key cache. * @param kkey: key entry key, assumed malloced in a region, is copied * to perform update or insertion. Its data pointer is also copied. * @param qstate: store errinf reason in case its bad. */ void key_cache_insert(struct key_cache* kcache, struct key_entry_key* kkey, struct module_qstate* qstate); /** * Remove an entry from the key cache. * @param kcache: the key cache. * @param name: for what name to look; uncompressed wireformat * @param namelen: length of the name. * @param key_class: class of the key. */ void key_cache_remove(struct key_cache* kcache, uint8_t* name, size_t namelen, uint16_t key_class); /** * Lookup key entry in the cache. Looks up the closest key entry above the * given name. * @param kcache: the key cache. * @param name: for what name to look; uncompressed wireformat * @param namelen: length of the name. * @param key_class: class of the key. * @param region: a copy of the key_entry is allocated in this region. * @param now: current time. * @return pointer to a newly allocated key_entry copy in the region, if * a key entry could be found, and allocation succeeded and TTL was OK. * Otherwise, NULL is returned. */ struct key_entry_key* key_cache_obtain(struct key_cache* kcache, uint8_t* name, size_t namelen, uint16_t key_class, struct regional* region, time_t now); /** * Get memory in use by the key cache. * @param kcache: the key cache. * @return memory in use in bytes. */ size_t key_cache_get_mem(struct key_cache* kcache); #endif /* VALIDATOR_VAL_KCACHE_H */ unbound-1.13.1/validator/val_nsec.h0000644000175000017500000001462514010434640016637 0ustar wouterwouter/* * validator/val_nsec.h - validator NSEC denial of existence functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with NSEC checking, the different NSEC proofs * for denial of existence, and proofs for presence of types. */ #ifndef VALIDATOR_VAL_NSEC_H #define VALIDATOR_VAL_NSEC_H #include "util/data/packed_rrset.h" struct val_env; struct module_env; struct module_qstate; struct ub_packed_rrset_key; struct reply_info; struct query_info; struct key_entry_key; /** * Check DS absence. * There is a NODATA reply to a DS that needs checking. * NSECs can prove this is not a delegation point, or successfully prove * that there is no DS. Or this fails. * * @param env: module env for rrsig verification routines. * @param ve: validator env for rrsig verification routines. * @param qinfo: the DS queried for. * @param rep: reply received. * @param kkey: key entry to use for verification of signatures. * @param proof_ttl: if secure, the TTL of how long this proof lasts. * @param reason: string explaining why bogus. * @param qstate: qstate with region. * @return security status. * SECURE: proved absence of DS. * INSECURE: proved that this was not a delegation point. * BOGUS: crypto bad, or no absence of DS proven. * UNCHECKED: there was no way to prove anything (no NSECs, unknown algo). */ enum sec_status val_nsec_prove_nodata_dsreply(struct module_env* env, struct val_env* ve, struct query_info* qinfo, struct reply_info* rep, struct key_entry_key* kkey, time_t* proof_ttl, char** reason, struct module_qstate* qstate); /** * nsec typemap check, takes an NSEC-type bitmap as argument, checks for type. * @param bitmap: pointer to the bitmap part of wireformat rdata. * @param len: length of the bitmap, in bytes. * @param type: the type (in host order) to check for. * @return true if the type bit was set in the bitmap. false if not, or * if the bitmap was malformed in some way. */ int nsecbitmap_has_type_rdata(uint8_t* bitmap, size_t len, uint16_t type); /** * Check if type is present in the NSEC typemap * @param nsec: the nsec RRset. * If there are multiple RRs, then each must have the same typemap, * since the typemap represents the types at this domain node. * @param type: type to check for, host order. * @return true if present */ int nsec_has_type(struct ub_packed_rrset_key* nsec, uint16_t type); /** * Determine if a NSEC proves the NOERROR/NODATA conditions. This will also * handle the empty non-terminal (ENT) case and partially handle the * wildcard case. If the ownername of 'nsec' is a wildcard, the validator * must still be provided proof that qname did not directly exist and that * the wildcard is, in fact, *.closest_encloser. * * @param nsec: the nsec record to check against. * @param qinfo: the query info. * @param wc: if the nodata is proven for a wildcard match, the wildcard * closest encloser is returned, else NULL (wc is unchanged). * This closest encloser must then match the nameerror given for the * nextcloser of qname. * @return true if NSEC proves this. */ int nsec_proves_nodata(struct ub_packed_rrset_key* nsec, struct query_info* qinfo, uint8_t** wc); /** * Determine if the given NSEC proves a NameError (NXDOMAIN) for a given * qname. * * @param nsec: the nsec to check * @param qname: what was queried. * @return true if proven. */ int val_nsec_proves_name_error(struct ub_packed_rrset_key* nsec, uint8_t* qname); /** * Determine if the given NSEC proves a positive wildcard response. * @param nsec: the nsec to check * @param qinf: what was queried. * @param wc: wildcard (without *. label) * @return true if proven. */ int val_nsec_proves_positive_wildcard(struct ub_packed_rrset_key* nsec, struct query_info* qinf, uint8_t* wc); /** * Determine closest encloser of a query name and the NSEC that covers it * (and thus disproved it). * A name error must have been proven already, otherwise this will be invalid. * @param qname: the name queried for. * @param nsec: the nsec RRset. * @return closest encloser dname or NULL on error (bad nsec RRset). */ uint8_t* nsec_closest_encloser(uint8_t* qname, struct ub_packed_rrset_key* nsec); /** * Determine if the given NSEC proves that a wildcard match does not exist. * * @param nsec: the nsec RRset. * @param qname: the name queried for. * @param qnamelen: length of qname. * @return true if proven. */ int val_nsec_proves_no_wc(struct ub_packed_rrset_key* nsec, uint8_t* qname, size_t qnamelen); /** * Determine if an nsec proves an insecure delegation towards the qname. * @param nsec: nsec rrset. * @param qinfo: what was queries for. * @return 0 if not, 1 if an NSEC that signals an insecure delegation to * the qname. */ int val_nsec_proves_insecuredelegation(struct ub_packed_rrset_key* nsec, struct query_info* qinfo); #endif /* VALIDATOR_VAL_NSEC_H */ unbound-1.13.1/validator/val_anchor.c0000644000175000017500000010364414010434640017154 0ustar wouterwouter/* * validator/val_anchor.c - validator trust anchor storage. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains storage for the trust anchors for the validator. */ #include "config.h" #include #include "validator/val_anchor.h" #include "validator/val_sigcrypt.h" #include "validator/autotrust.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "util/log.h" #include "util/net_help.h" #include "util/config_file.h" #include "util/as112.h" #include "sldns/sbuffer.h" #include "sldns/rrdef.h" #include "sldns/str2wire.h" #ifdef HAVE_GLOB_H #include #endif int anchor_cmp(const void* k1, const void* k2) { int m; struct trust_anchor* n1 = (struct trust_anchor*)k1; struct trust_anchor* n2 = (struct trust_anchor*)k2; /* no need to ntohs(class) because sort order is irrelevant */ if(n1->dclass != n2->dclass) { if(n1->dclass < n2->dclass) return -1; return 1; } return dname_lab_cmp(n1->name, n1->namelabs, n2->name, n2->namelabs, &m); } struct val_anchors* anchors_create(void) { struct val_anchors* a = (struct val_anchors*)calloc(1, sizeof(*a)); if(!a) return NULL; a->tree = rbtree_create(anchor_cmp); if(!a->tree) { anchors_delete(a); return NULL; } a->autr = autr_global_create(); if(!a->autr) { anchors_delete(a); return NULL; } lock_basic_init(&a->lock); lock_protect(&a->lock, a, sizeof(*a)); lock_protect(&a->lock, a->autr, sizeof(*a->autr)); return a; } /** delete assembled rrset */ static void assembled_rrset_delete(struct ub_packed_rrset_key* pkey) { if(!pkey) return; if(pkey->entry.data) { struct packed_rrset_data* pd = (struct packed_rrset_data*) pkey->entry.data; free(pd->rr_data); free(pd->rr_ttl); free(pd->rr_len); free(pd); } free(pkey->rk.dname); free(pkey); } /** destroy locks in tree and delete autotrust anchors */ static void anchors_delfunc(rbnode_type* elem, void* ATTR_UNUSED(arg)) { struct trust_anchor* ta = (struct trust_anchor*)elem; if(!ta) return; if(ta->autr) { autr_point_delete(ta); } else { struct ta_key* p, *np; lock_basic_destroy(&ta->lock); free(ta->name); p = ta->keylist; while(p) { np = p->next; free(p->data); free(p); p = np; } assembled_rrset_delete(ta->ds_rrset); assembled_rrset_delete(ta->dnskey_rrset); free(ta); } } void anchors_delete(struct val_anchors* anchors) { if(!anchors) return; lock_unprotect(&anchors->lock, anchors->autr); lock_unprotect(&anchors->lock, anchors); lock_basic_destroy(&anchors->lock); if(anchors->tree) traverse_postorder(anchors->tree, anchors_delfunc, NULL); free(anchors->tree); autr_global_delete(anchors->autr); free(anchors); } void anchors_init_parents_locked(struct val_anchors* anchors) { struct trust_anchor* node, *prev = NULL, *p; int m; /* nobody else can grab locks because we hold the main lock. * Thus the previous items, after unlocked, are not deleted */ RBTREE_FOR(node, struct trust_anchor*, anchors->tree) { lock_basic_lock(&node->lock); node->parent = NULL; if(!prev || prev->dclass != node->dclass) { prev = node; lock_basic_unlock(&node->lock); continue; } (void)dname_lab_cmp(prev->name, prev->namelabs, node->name, node->namelabs, &m); /* we know prev is smaller */ /* sort order like: . com. bla.com. zwb.com. net. */ /* find the previous, or parent-parent-parent */ for(p = prev; p; p = p->parent) /* looking for name with few labels, a parent */ if(p->namelabs <= m) { /* ==: since prev matched m, this is closest*/ /* <: prev matches more, but is not a parent, * this one is a (grand)parent */ node->parent = p; break; } lock_basic_unlock(&node->lock); prev = node; } } /** initialise parent pointers in the tree */ static void init_parents(struct val_anchors* anchors) { lock_basic_lock(&anchors->lock); anchors_init_parents_locked(anchors); lock_basic_unlock(&anchors->lock); } struct trust_anchor* anchor_find(struct val_anchors* anchors, uint8_t* name, int namelabs, size_t namelen, uint16_t dclass) { struct trust_anchor key; rbnode_type* n; if(!name) return NULL; key.node.key = &key; key.name = name; key.namelabs = namelabs; key.namelen = namelen; key.dclass = dclass; lock_basic_lock(&anchors->lock); n = rbtree_search(anchors->tree, &key); if(n) { lock_basic_lock(&((struct trust_anchor*)n->key)->lock); } lock_basic_unlock(&anchors->lock); if(!n) return NULL; return (struct trust_anchor*)n->key; } /** create new trust anchor object */ static struct trust_anchor* anchor_new_ta(struct val_anchors* anchors, uint8_t* name, int namelabs, size_t namelen, uint16_t dclass, int lockit) { #ifdef UNBOUND_DEBUG rbnode_type* r; #endif struct trust_anchor* ta = (struct trust_anchor*)malloc( sizeof(struct trust_anchor)); if(!ta) return NULL; memset(ta, 0, sizeof(*ta)); ta->node.key = ta; ta->name = memdup(name, namelen); if(!ta->name) { free(ta); return NULL; } ta->namelabs = namelabs; ta->namelen = namelen; ta->dclass = dclass; lock_basic_init(&ta->lock); if(lockit) { lock_basic_lock(&anchors->lock); } #ifdef UNBOUND_DEBUG r = #else (void) #endif rbtree_insert(anchors->tree, &ta->node); if(lockit) { lock_basic_unlock(&anchors->lock); } log_assert(r != NULL); return ta; } /** find trustanchor key by exact data match */ static struct ta_key* anchor_find_key(struct trust_anchor* ta, uint8_t* rdata, size_t rdata_len, uint16_t type) { struct ta_key* k; for(k = ta->keylist; k; k = k->next) { if(k->type == type && k->len == rdata_len && memcmp(k->data, rdata, rdata_len) == 0) return k; } return NULL; } /** create new trustanchor key */ static struct ta_key* anchor_new_ta_key(uint8_t* rdata, size_t rdata_len, uint16_t type) { struct ta_key* k = (struct ta_key*)malloc(sizeof(*k)); if(!k) return NULL; memset(k, 0, sizeof(*k)); k->data = memdup(rdata, rdata_len); if(!k->data) { free(k); return NULL; } k->len = rdata_len; k->type = type; return k; } /** * This routine adds a new RR to a trust anchor. The trust anchor may not * exist yet, and is created if not. The RR can be DS or DNSKEY. * This routine will also remove duplicates; storing them only once. * @param anchors: anchor storage. * @param name: name of trust anchor (wireformat) * @param type: type or RR * @param dclass: class of RR * @param rdata: rdata wireformat, starting with rdlength. * If NULL, nothing is stored, but an entry is created. * @param rdata_len: length of rdata including rdlength. * @return: NULL on error, else the trust anchor. */ static struct trust_anchor* anchor_store_new_key(struct val_anchors* anchors, uint8_t* name, uint16_t type, uint16_t dclass, uint8_t* rdata, size_t rdata_len) { struct ta_key* k; struct trust_anchor* ta; int namelabs; size_t namelen; namelabs = dname_count_size_labels(name, &namelen); if(type != LDNS_RR_TYPE_DS && type != LDNS_RR_TYPE_DNSKEY) { log_err("Bad type for trust anchor"); return 0; } /* lookup or create trustanchor */ ta = anchor_find(anchors, name, namelabs, namelen, dclass); if(!ta) { ta = anchor_new_ta(anchors, name, namelabs, namelen, dclass, 1); if(!ta) return NULL; lock_basic_lock(&ta->lock); } if(!rdata) { lock_basic_unlock(&ta->lock); return ta; } /* look for duplicates */ if(anchor_find_key(ta, rdata, rdata_len, type)) { lock_basic_unlock(&ta->lock); return ta; } k = anchor_new_ta_key(rdata, rdata_len, type); if(!k) { lock_basic_unlock(&ta->lock); return NULL; } /* add new key */ if(type == LDNS_RR_TYPE_DS) ta->numDS++; else ta->numDNSKEY++; k->next = ta->keylist; ta->keylist = k; lock_basic_unlock(&ta->lock); return ta; } /** * Add new RR. It converts ldns RR to wire format. * @param anchors: anchor storage. * @param rr: the wirerr. * @param rl: length of rr. * @param dl: length of dname. * @return NULL on error, else the trust anchor. */ static struct trust_anchor* anchor_store_new_rr(struct val_anchors* anchors, uint8_t* rr, size_t rl, size_t dl) { struct trust_anchor* ta; if(!(ta=anchor_store_new_key(anchors, rr, sldns_wirerr_get_type(rr, rl, dl), sldns_wirerr_get_class(rr, rl, dl), sldns_wirerr_get_rdatawl(rr, rl, dl), sldns_wirerr_get_rdatalen(rr, rl, dl)+2))) { return NULL; } log_nametypeclass(VERB_QUERY, "adding trusted key", rr, sldns_wirerr_get_type(rr, rl, dl), sldns_wirerr_get_class(rr, rl, dl)); return ta; } /** * Insert insecure anchor * @param anchors: anchor storage. * @param str: the domain name. * @return NULL on error, Else last trust anchor point */ static struct trust_anchor* anchor_insert_insecure(struct val_anchors* anchors, const char* str) { struct trust_anchor* ta; size_t dname_len = 0; uint8_t* nm = sldns_str2wire_dname(str, &dname_len); if(!nm) { log_err("parse error in domain name '%s'", str); return NULL; } ta = anchor_store_new_key(anchors, nm, LDNS_RR_TYPE_DS, LDNS_RR_CLASS_IN, NULL, 0); free(nm); return ta; } struct trust_anchor* anchor_store_str(struct val_anchors* anchors, sldns_buffer* buffer, const char* str) { struct trust_anchor* ta; uint8_t* rr = sldns_buffer_begin(buffer); size_t len = sldns_buffer_capacity(buffer), dname_len = 0; int status = sldns_str2wire_rr_buf(str, rr, &len, &dname_len, 0, NULL, 0, NULL, 0); if(status != 0) { log_err("error parsing trust anchor %s: at %d: %s", str, LDNS_WIREPARSE_OFFSET(status), sldns_get_errorstr_parse(status)); return NULL; } if(!(ta=anchor_store_new_rr(anchors, rr, len, dname_len))) { log_err("out of memory"); return NULL; } return ta; } /** * Read a file with trust anchors * @param anchors: anchor storage. * @param buffer: parsing buffer. * @param fname: string. * @param onlyone: only one trust anchor allowed in file. * @return NULL on error. Else last trust-anchor point. */ static struct trust_anchor* anchor_read_file(struct val_anchors* anchors, sldns_buffer* buffer, const char* fname, int onlyone) { struct trust_anchor* ta = NULL, *tanew; struct sldns_file_parse_state pst; int status; size_t len, dname_len; uint8_t* rr = sldns_buffer_begin(buffer); int ok = 1; FILE* in = fopen(fname, "r"); if(!in) { log_err("error opening file %s: %s", fname, strerror(errno)); return 0; } memset(&pst, 0, sizeof(pst)); pst.default_ttl = 3600; pst.lineno = 1; while(!feof(in)) { len = sldns_buffer_capacity(buffer); dname_len = 0; status = sldns_fp2wire_rr_buf(in, rr, &len, &dname_len, &pst); if(len == 0) /* empty, $TTL, $ORIGIN */ continue; if(status != 0) { log_err("parse error in %s:%d:%d : %s", fname, pst.lineno, LDNS_WIREPARSE_OFFSET(status), sldns_get_errorstr_parse(status)); ok = 0; break; } if(sldns_wirerr_get_type(rr, len, dname_len) != LDNS_RR_TYPE_DS && sldns_wirerr_get_type(rr, len, dname_len) != LDNS_RR_TYPE_DNSKEY) { continue; } if(!(tanew=anchor_store_new_rr(anchors, rr, len, dname_len))) { log_err("mem error at %s line %d", fname, pst.lineno); ok = 0; break; } if(onlyone && ta && ta != tanew) { log_err("error at %s line %d: no multiple anchor " "domains allowed (you can have multiple " "keys, but they must have the same name).", fname, pst.lineno); ok = 0; break; } ta = tanew; } fclose(in); if(!ok) return NULL; /* empty file is OK when multiple anchors are allowed */ if(!onlyone && !ta) return (struct trust_anchor*)1; return ta; } /** skip file to end of line */ static void skip_to_eol(FILE* in) { int c; while((c = getc(in)) != EOF ) { if(c == '\n') return; } } /** true for special characters in bind configs */ static int is_bind_special(int c) { switch(c) { case '{': case '}': case '"': case ';': return 1; } return 0; } /** * Read a keyword skipping bind comments; spaces, specials, restkeywords. * The file is split into the following tokens: * * special characters, on their own, rdlen=1, { } doublequote ; * * whitespace becomes a single ' ' or tab. Newlines become spaces. * * other words ('keywords') * * comments are skipped if desired * / / C++ style comment to end of line * # to end of line * / * C style comment * / * @param in: file to read from. * @param buf: buffer, what is read is stored after current buffer position. * Space is left in the buffer to write a terminating 0. * @param line: line number is increased per line, for error reports. * @param comments: if 0, comments are not possible and become text. * if 1, comments are skipped entirely. * In BIND files, this is when reading quoted strings, for example * " base 64 text with / / in there " * @return the number of character written to the buffer. * 0 on end of file. */ static int readkeyword_bindfile(FILE* in, sldns_buffer* buf, int* line, int comments) { int c; int numdone = 0; while((c = getc(in)) != EOF ) { if(comments && c == '#') { /* # blabla */ skip_to_eol(in); (*line)++; continue; } else if(comments && c=='/' && numdone>0 && /* /_/ bla*/ sldns_buffer_read_u8_at(buf, sldns_buffer_position(buf)-1) == '/') { sldns_buffer_skip(buf, -1); numdone--; skip_to_eol(in); (*line)++; continue; } else if(comments && c=='*' && numdone>0 && /* /_* bla *_/ */ sldns_buffer_read_u8_at(buf, sldns_buffer_position(buf)-1) == '/') { sldns_buffer_skip(buf, -1); numdone--; /* skip to end of comment */ while(c != EOF && (c=getc(in)) != EOF ) { if(c == '*') { if((c=getc(in)) == '/') break; } if(c == '\n') (*line)++; } continue; } /* not a comment, complete the keyword */ if(numdone > 0) { /* check same type */ if(isspace((unsigned char)c)) { ungetc(c, in); return numdone; } if(is_bind_special(c)) { ungetc(c, in); return numdone; } } if(c == '\n') { c = ' '; (*line)++; } /* space for 1 char + 0 string terminator */ if(sldns_buffer_remaining(buf) < 2) { fatal_exit("trusted-keys, %d, string too long", *line); } sldns_buffer_write_u8(buf, (uint8_t)c); numdone++; if(isspace((unsigned char)c)) { /* collate whitespace into ' ' */ while((c = getc(in)) != EOF ) { if(c == '\n') (*line)++; if(!isspace((unsigned char)c)) { ungetc(c, in); break; } } return numdone; } if(is_bind_special(c)) return numdone; } return numdone; } /** skip through file to { or ; */ static int skip_to_special(FILE* in, sldns_buffer* buf, int* line, int spec) { int rdlen; sldns_buffer_clear(buf); while((rdlen=readkeyword_bindfile(in, buf, line, 1))) { if(rdlen == 1 && isspace((unsigned char)*sldns_buffer_begin(buf))) { sldns_buffer_clear(buf); continue; } if(rdlen != 1 || *sldns_buffer_begin(buf) != (uint8_t)spec) { sldns_buffer_write_u8(buf, 0); log_err("trusted-keys, line %d, expected %c", *line, spec); return 0; } return 1; } log_err("trusted-keys, line %d, expected %c got EOF", *line, spec); return 0; } /** * read contents of trusted-keys{ ... ; clauses and insert keys into storage. * @param anchors: where to store keys * @param buf: buffer to use * @param line: line number in file * @param in: file to read from. * @return 0 on error. */ static int process_bind_contents(struct val_anchors* anchors, sldns_buffer* buf, int* line, FILE* in) { /* loop over contents, collate strings before ; */ /* contents is (numbered): 0 1 2 3 4 5 6 7 8 */ /* name. 257 3 5 base64 base64 */ /* quoted value: 0 "111" 0 0 0 0 0 0 0 */ /* comments value: 1 "000" 1 1 1 "0 0 0 0" 1 */ int contnum = 0; int quoted = 0; int comments = 1; int rdlen; char* str = 0; sldns_buffer_clear(buf); while((rdlen=readkeyword_bindfile(in, buf, line, comments))) { if(rdlen == 1 && sldns_buffer_position(buf) == 1 && isspace((unsigned char)*sldns_buffer_begin(buf))) { /* starting whitespace is removed */ sldns_buffer_clear(buf); continue; } else if(rdlen == 1 && sldns_buffer_current(buf)[-1] == '"') { /* remove " from the string */ if(contnum == 0) { quoted = 1; comments = 0; } sldns_buffer_skip(buf, -1); if(contnum > 0 && quoted) { if(sldns_buffer_remaining(buf) < 8+1) { log_err("line %d, too long", *line); return 0; } sldns_buffer_write(buf, " DNSKEY ", 8); quoted = 0; comments = 1; } else if(contnum > 0) comments = !comments; continue; } else if(rdlen == 1 && sldns_buffer_current(buf)[-1] == ';') { if(contnum < 5) { sldns_buffer_write_u8(buf, 0); log_err("line %d, bad key", *line); return 0; } sldns_buffer_skip(buf, -1); sldns_buffer_write_u8(buf, 0); str = strdup((char*)sldns_buffer_begin(buf)); if(!str) { log_err("line %d, allocation failure", *line); return 0; } if(!anchor_store_str(anchors, buf, str)) { log_err("line %d, bad key", *line); free(str); return 0; } free(str); sldns_buffer_clear(buf); contnum = 0; quoted = 0; comments = 1; continue; } else if(rdlen == 1 && sldns_buffer_current(buf)[-1] == '}') { if(contnum > 0) { sldns_buffer_write_u8(buf, 0); log_err("line %d, bad key before }", *line); return 0; } return 1; } else if(rdlen == 1 && isspace((unsigned char)sldns_buffer_current(buf)[-1])) { /* leave whitespace here */ } else { /* not space or whatnot, so actual content */ contnum ++; if(contnum == 1 && !quoted) { if(sldns_buffer_remaining(buf) < 8+1) { log_err("line %d, too long", *line); return 0; } sldns_buffer_write(buf, " DNSKEY ", 8); } } } log_err("line %d, EOF before }", *line); return 0; } /** * Read a BIND9 like file with trust anchors in named.conf format. * @param anchors: anchor storage. * @param buffer: parsing buffer. * @param fname: string. * @return false on error. */ static int anchor_read_bind_file(struct val_anchors* anchors, sldns_buffer* buffer, const char* fname) { int line_nr = 1; FILE* in = fopen(fname, "r"); int rdlen = 0; if(!in) { log_err("error opening file %s: %s", fname, strerror(errno)); return 0; } verbose(VERB_QUERY, "reading in bind-compat-mode: '%s'", fname); /* scan for trusted-keys keyword, ignore everything else */ sldns_buffer_clear(buffer); while((rdlen=readkeyword_bindfile(in, buffer, &line_nr, 1)) != 0) { if(rdlen != 12 || strncmp((char*)sldns_buffer_begin(buffer), "trusted-keys", 12) != 0) { sldns_buffer_clear(buffer); /* ignore everything but trusted-keys */ continue; } if(!skip_to_special(in, buffer, &line_nr, '{')) { log_err("error in trusted key: \"%s\"", fname); fclose(in); return 0; } /* process contents */ if(!process_bind_contents(anchors, buffer, &line_nr, in)) { log_err("error in trusted key: \"%s\"", fname); fclose(in); return 0; } if(!skip_to_special(in, buffer, &line_nr, ';')) { log_err("error in trusted key: \"%s\"", fname); fclose(in); return 0; } sldns_buffer_clear(buffer); } fclose(in); return 1; } /** * Read a BIND9 like files with trust anchors in named.conf format. * Performs wildcard processing of name. * @param anchors: anchor storage. * @param buffer: parsing buffer. * @param pat: pattern string. (can be wildcarded) * @return false on error. */ static int anchor_read_bind_file_wild(struct val_anchors* anchors, sldns_buffer* buffer, const char* pat) { #ifdef HAVE_GLOB glob_t g; size_t i; int r, flags; if(!strchr(pat, '*') && !strchr(pat, '?') && !strchr(pat, '[') && !strchr(pat, '{') && !strchr(pat, '~')) { return anchor_read_bind_file(anchors, buffer, pat); } verbose(VERB_QUERY, "wildcard found, processing %s", pat); flags = 0 #ifdef GLOB_ERR | GLOB_ERR #endif #ifdef GLOB_NOSORT | GLOB_NOSORT #endif #ifdef GLOB_BRACE | GLOB_BRACE #endif #ifdef GLOB_TILDE | GLOB_TILDE #endif ; memset(&g, 0, sizeof(g)); r = glob(pat, flags, NULL, &g); if(r) { /* some error */ if(r == GLOB_NOMATCH) { verbose(VERB_QUERY, "trusted-keys-file: " "no matches for %s", pat); return 1; } else if(r == GLOB_NOSPACE) { log_err("wildcard trusted-keys-file %s: " "pattern out of memory", pat); } else if(r == GLOB_ABORTED) { log_err("wildcard trusted-keys-file %s: expansion " "aborted (%s)", pat, strerror(errno)); } else { log_err("wildcard trusted-keys-file %s: expansion " "failed (%s)", pat, strerror(errno)); } /* ignore globs that yield no files */ return 1; } /* process files found, if any */ for(i=0; i<(size_t)g.gl_pathc; i++) { if(!anchor_read_bind_file(anchors, buffer, g.gl_pathv[i])) { log_err("error reading wildcard " "trusted-keys-file: %s", g.gl_pathv[i]); globfree(&g); return 0; } } globfree(&g); return 1; #else /* not HAVE_GLOB */ return anchor_read_bind_file(anchors, buffer, pat); #endif /* HAVE_GLOB */ } /** * Assemble an rrset structure for the type * @param ta: trust anchor. * @param num: number of items to fetch from list. * @param type: fetch only items of this type. * @return rrset or NULL on error. */ static struct ub_packed_rrset_key* assemble_it(struct trust_anchor* ta, size_t num, uint16_t type) { struct ub_packed_rrset_key* pkey = (struct ub_packed_rrset_key*) malloc(sizeof(*pkey)); struct packed_rrset_data* pd; struct ta_key* tk; size_t i; if(!pkey) return NULL; memset(pkey, 0, sizeof(*pkey)); pkey->rk.dname = memdup(ta->name, ta->namelen); if(!pkey->rk.dname) { free(pkey); return NULL; } pkey->rk.dname_len = ta->namelen; pkey->rk.type = htons(type); pkey->rk.rrset_class = htons(ta->dclass); /* The rrset is build in an uncompressed way. This means it * cannot be copied in the normal way. */ pd = (struct packed_rrset_data*)malloc(sizeof(*pd)); if(!pd) { free(pkey->rk.dname); free(pkey); return NULL; } memset(pd, 0, sizeof(*pd)); pd->count = num; pd->trust = rrset_trust_ultimate; pd->rr_len = (size_t*)reallocarray(NULL, num, sizeof(size_t)); if(!pd->rr_len) { free(pd); free(pkey->rk.dname); free(pkey); return NULL; } pd->rr_ttl = (time_t*)reallocarray(NULL, num, sizeof(time_t)); if(!pd->rr_ttl) { free(pd->rr_len); free(pd); free(pkey->rk.dname); free(pkey); return NULL; } pd->rr_data = (uint8_t**)reallocarray(NULL, num, sizeof(uint8_t*)); if(!pd->rr_data) { free(pd->rr_ttl); free(pd->rr_len); free(pd); free(pkey->rk.dname); free(pkey); return NULL; } /* fill in rrs */ i=0; for(tk = ta->keylist; tk; tk = tk->next) { if(tk->type != type) continue; pd->rr_len[i] = tk->len; /* reuse data ptr to allocation in talist */ pd->rr_data[i] = tk->data; pd->rr_ttl[i] = 0; i++; } pkey->entry.data = (void*)pd; return pkey; } /** * Assemble structures for the trust DS and DNSKEY rrsets. * @param ta: trust anchor * @return: false on error. */ static int anchors_assemble(struct trust_anchor* ta) { if(ta->numDS > 0) { ta->ds_rrset = assemble_it(ta, ta->numDS, LDNS_RR_TYPE_DS); if(!ta->ds_rrset) return 0; } if(ta->numDNSKEY > 0) { ta->dnskey_rrset = assemble_it(ta, ta->numDNSKEY, LDNS_RR_TYPE_DNSKEY); if(!ta->dnskey_rrset) return 0; } return 1; } /** * Check DS algos for support, warn if not. * @param ta: trust anchor * @return number of DS anchors with unsupported algorithms. */ static size_t anchors_ds_unsupported(struct trust_anchor* ta) { size_t i, num = 0; for(i=0; inumDS; i++) { if(!ds_digest_algo_is_supported(ta->ds_rrset, i) || !ds_key_algo_is_supported(ta->ds_rrset, i)) num++; } return num; } /** * Check DNSKEY algos for support, warn if not. * @param ta: trust anchor * @return number of DNSKEY anchors with unsupported algorithms. */ static size_t anchors_dnskey_unsupported(struct trust_anchor* ta) { size_t i, num = 0; for(i=0; inumDNSKEY; i++) { if(!dnskey_algo_is_supported(ta->dnskey_rrset, i)) num++; } return num; } /** * Assemble the rrsets in the anchors, ready for use by validator. * @param anchors: trust anchor storage. * @return: false on error. */ static int anchors_assemble_rrsets(struct val_anchors* anchors) { struct trust_anchor* ta; struct trust_anchor* next; size_t nods, nokey; lock_basic_lock(&anchors->lock); ta=(struct trust_anchor*)rbtree_first(anchors->tree); while((rbnode_type*)ta != RBTREE_NULL) { next = (struct trust_anchor*)rbtree_next(&ta->node); lock_basic_lock(&ta->lock); if(ta->autr || (ta->numDS == 0 && ta->numDNSKEY == 0)) { lock_basic_unlock(&ta->lock); ta = next; /* skip */ continue; } if(!anchors_assemble(ta)) { log_err("out of memory"); lock_basic_unlock(&ta->lock); lock_basic_unlock(&anchors->lock); return 0; } nods = anchors_ds_unsupported(ta); nokey = anchors_dnskey_unsupported(ta); if(nods) { log_nametypeclass(NO_VERBOSE, "warning: unsupported " "algorithm for trust anchor", ta->name, LDNS_RR_TYPE_DS, ta->dclass); } if(nokey) { log_nametypeclass(NO_VERBOSE, "warning: unsupported " "algorithm for trust anchor", ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass); } if(nods == ta->numDS && nokey == ta->numDNSKEY) { char b[257]; dname_str(ta->name, b); log_warn("trust anchor %s has no supported algorithms," " the anchor is ignored (check if you need to" " upgrade unbound and " #ifdef HAVE_LIBRESSL "libressl" #else "openssl" #endif ")", b); (void)rbtree_delete(anchors->tree, &ta->node); lock_basic_unlock(&ta->lock); anchors_delfunc(&ta->node, NULL); ta = next; continue; } lock_basic_unlock(&ta->lock); ta = next; } lock_basic_unlock(&anchors->lock); return 1; } int anchors_apply_cfg(struct val_anchors* anchors, struct config_file* cfg) { struct config_strlist* f; const char** zstr; char* nm; sldns_buffer* parsebuf = sldns_buffer_new(65535); if(cfg->insecure_lan_zones) { for(zstr = as112_zones; *zstr; zstr++) { if(!anchor_insert_insecure(anchors, *zstr)) { log_err("error in insecure-lan-zones: %s", *zstr); sldns_buffer_free(parsebuf); return 0; } } } for(f = cfg->domain_insecure; f; f = f->next) { if(!f->str || f->str[0] == 0) /* empty "" */ continue; if(!anchor_insert_insecure(anchors, f->str)) { log_err("error in domain-insecure: %s", f->str); sldns_buffer_free(parsebuf); return 0; } } for(f = cfg->trust_anchor_file_list; f; f = f->next) { if(!f->str || f->str[0] == 0) /* empty "" */ continue; nm = f->str; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) nm += strlen(cfg->chrootdir); if(!anchor_read_file(anchors, parsebuf, nm, 0)) { log_err("error reading trust-anchor-file: %s", f->str); sldns_buffer_free(parsebuf); return 0; } } for(f = cfg->trusted_keys_file_list; f; f = f->next) { if(!f->str || f->str[0] == 0) /* empty "" */ continue; nm = f->str; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) nm += strlen(cfg->chrootdir); if(!anchor_read_bind_file_wild(anchors, parsebuf, nm)) { log_err("error reading trusted-keys-file: %s", f->str); sldns_buffer_free(parsebuf); return 0; } } for(f = cfg->trust_anchor_list; f; f = f->next) { if(!f->str || f->str[0] == 0) /* empty "" */ continue; if(!anchor_store_str(anchors, parsebuf, f->str)) { log_err("error in trust-anchor: \"%s\"", f->str); sldns_buffer_free(parsebuf); return 0; } } /* do autr last, so that it sees what anchors are filled by other * means can can print errors about double config for the name */ for(f = cfg->auto_trust_anchor_file_list; f; f = f->next) { if(!f->str || f->str[0] == 0) /* empty "" */ continue; nm = f->str; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) nm += strlen(cfg->chrootdir); if(!autr_read_file(anchors, nm)) { log_err("error reading auto-trust-anchor-file: %s", f->str); sldns_buffer_free(parsebuf); return 0; } } /* first assemble, since it may delete useless anchors */ anchors_assemble_rrsets(anchors); init_parents(anchors); sldns_buffer_free(parsebuf); if(verbosity >= VERB_ALGO) autr_debug_print(anchors); return 1; } struct trust_anchor* anchors_lookup(struct val_anchors* anchors, uint8_t* qname, size_t qname_len, uint16_t qclass) { struct trust_anchor key; struct trust_anchor* result; rbnode_type* res = NULL; key.node.key = &key; key.name = qname; key.namelabs = dname_count_labels(qname); key.namelen = qname_len; key.dclass = qclass; lock_basic_lock(&anchors->lock); if(rbtree_find_less_equal(anchors->tree, &key, &res)) { /* exact */ result = (struct trust_anchor*)res; } else { /* smaller element (or no element) */ int m; result = (struct trust_anchor*)res; if(!result || result->dclass != qclass) { lock_basic_unlock(&anchors->lock); return NULL; } /* count number of labels matched */ (void)dname_lab_cmp(result->name, result->namelabs, key.name, key.namelabs, &m); while(result) { /* go up until qname is subdomain of stub */ if(result->namelabs <= m) break; result = result->parent; } } if(result) { lock_basic_lock(&result->lock); } lock_basic_unlock(&anchors->lock); return result; } size_t anchors_get_mem(struct val_anchors* anchors) { struct trust_anchor *ta; size_t s = sizeof(*anchors); if(!anchors) return 0; RBTREE_FOR(ta, struct trust_anchor*, anchors->tree) { s += sizeof(*ta) + ta->namelen; /* keys and so on */ } return s; } int anchors_add_insecure(struct val_anchors* anchors, uint16_t c, uint8_t* nm) { struct trust_anchor key; key.node.key = &key; key.name = nm; key.namelabs = dname_count_size_labels(nm, &key.namelen); key.dclass = c; lock_basic_lock(&anchors->lock); if(rbtree_search(anchors->tree, &key)) { lock_basic_unlock(&anchors->lock); /* nothing to do, already an anchor or insecure point */ return 1; } if(!anchor_new_ta(anchors, nm, key.namelabs, key.namelen, c, 0)) { log_err("out of memory"); lock_basic_unlock(&anchors->lock); return 0; } /* no other contents in new ta, because it is insecure point */ anchors_init_parents_locked(anchors); lock_basic_unlock(&anchors->lock); return 1; } void anchors_delete_insecure(struct val_anchors* anchors, uint16_t c, uint8_t* nm) { struct trust_anchor key; struct trust_anchor* ta; key.node.key = &key; key.name = nm; key.namelabs = dname_count_size_labels(nm, &key.namelen); key.dclass = c; lock_basic_lock(&anchors->lock); if(!(ta=(struct trust_anchor*)rbtree_search(anchors->tree, &key))) { lock_basic_unlock(&anchors->lock); /* nothing there */ return; } /* lock it to drive away other threads that use it */ lock_basic_lock(&ta->lock); /* see if its really an insecure point */ if(ta->keylist || ta->autr || ta->numDS || ta->numDNSKEY) { lock_basic_unlock(&anchors->lock); lock_basic_unlock(&ta->lock); /* its not an insecure point, do not remove it */ return; } /* remove from tree */ (void)rbtree_delete(anchors->tree, &ta->node); anchors_init_parents_locked(anchors); lock_basic_unlock(&anchors->lock); /* actual free of data */ lock_basic_unlock(&ta->lock); anchors_delfunc(&ta->node, NULL); } /** compare two keytags, return -1, 0 or 1 */ static int keytag_compare(const void* x, const void* y) { if(*(uint16_t*)x == *(uint16_t*)y) return 0; if(*(uint16_t*)x > *(uint16_t*)y) return 1; return -1; } size_t anchor_list_keytags(struct trust_anchor* ta, uint16_t* list, size_t num) { size_t i, ret = 0; if(ta->numDS == 0 && ta->numDNSKEY == 0) return 0; /* insecure point */ if(ta->numDS != 0 && ta->ds_rrset) { struct packed_rrset_data* d=(struct packed_rrset_data*) ta->ds_rrset->entry.data; for(i=0; icount; i++) { if(ret == num) continue; list[ret++] = ds_get_keytag(ta->ds_rrset, i); } } if(ta->numDNSKEY != 0 && ta->dnskey_rrset) { struct packed_rrset_data* d=(struct packed_rrset_data*) ta->dnskey_rrset->entry.data; for(i=0; icount; i++) { if(ret == num) continue; list[ret++] = dnskey_calc_keytag(ta->dnskey_rrset, i); } } qsort(list, ret, sizeof(*list), keytag_compare); return ret; } int anchor_has_keytag(struct val_anchors* anchors, uint8_t* name, int namelabs, size_t namelen, uint16_t dclass, uint16_t keytag) { uint16_t* taglist; uint16_t* tl; size_t numtag, i; struct trust_anchor* anchor = anchor_find(anchors, name, namelabs, namelen, dclass); if(!anchor) return 0; if(!anchor->numDS && !anchor->numDNSKEY) { lock_basic_unlock(&anchor->lock); return 0; } taglist = calloc(anchor->numDS + anchor->numDNSKEY, sizeof(*taglist)); if(!taglist) { lock_basic_unlock(&anchor->lock); return 0; } numtag = anchor_list_keytags(anchor, taglist, anchor->numDS+anchor->numDNSKEY); lock_basic_unlock(&anchor->lock); if(!numtag) { free(taglist); return 0; } tl = taglist; for(i=0; irrset_count position to signal * there are no unchecked items. */ size_t val_next_unchecked(struct reply_info* rep, size_t skip); /** * Find the signer name for an RRset. * @param rrset: the rrset. * @param sname: signer name is returned or NULL if not signed. * @param slen: length of sname (or 0). */ void val_find_rrset_signer(struct ub_packed_rrset_key* rrset, uint8_t** sname, size_t* slen); /** * Get string to denote the classification result. * @param subtype: from classification function. * @return static string to describe the classification. */ const char* val_classification_to_string(enum val_classification subtype); /** * Add existing list to blacklist. * @param blacklist: the blacklist with result * @param region: the region where blacklist is allocated. * Allocation failures are logged. * @param origin: origin list to add, if NULL, a cache-entry is added to * the blacklist to stop cache from being used. * @param cross: if true this is a cross-qstate copy, and the 'origin' * list is not allocated in the same region as the blacklist. */ void val_blacklist(struct sock_list** blacklist, struct regional* region, struct sock_list* origin, int cross); /** * check if has dnssec info, and if it has signed nsecs. gives error reason. * @param rep: reply to check. * @param reason: returned on fail. * @return false if message has no signed nsecs. Can not prove negatives. */ int val_has_signed_nsecs(struct reply_info* rep, char** reason); /** * Return algo number for favorite (best) algorithm that we support in DS. * @param ds_rrset: the DSes in this rrset are inspected and best algo chosen. * @return algo number or 0 if none supported. 0 is unused as algo number. */ int val_favorite_ds_algo(struct ub_packed_rrset_key* ds_rrset); /** * Find DS denial message in cache. Saves new qstate allocation and allows * the validator to use partial content which is not enough to construct a * message for network (or user) consumption. Without SOA for example, * which is a common occurrence in the unbound code since the referrals contain * NSEC/NSEC3 rrs without the SOA element, thus do not allow synthesis of a * full negative reply, but do allow synthesis of sufficient proof. * @param env: query env with caches and time. * @param nm: name of DS record sought. * @param nmlen: length of name. * @param c: class of DS RR. * @param region: where to allocate result. * @param topname: name of the key that is currently in use, that will get * used to validate the result, and thus no higher entries from the * negative cache need to be examined. * @return a dns_msg on success. NULL on failure. */ struct dns_msg* val_find_DS(struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t c, struct regional* region, uint8_t* topname); #endif /* VALIDATOR_VAL_UTILS_H */ unbound-1.13.1/validator/val_secalgo.c0000644000175000017500000014141314010434640017313 0ustar wouterwouter/* * validator/val_secalgo.c - validator security algorithm functions. * * Copyright (c) 2012, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * These functions take raw data buffers, formatted for crypto verification, * and do the library calls (for the crypto library in use). */ #include "config.h" /* packed_rrset on top to define enum types (forced by c99 standard) */ #include "util/data/packed_rrset.h" #include "validator/val_secalgo.h" #include "validator/val_nsec3.h" #include "util/log.h" #include "sldns/rrdef.h" #include "sldns/keyraw.h" #include "sldns/sbuffer.h" #if !defined(HAVE_SSL) && !defined(HAVE_NSS) && !defined(HAVE_NETTLE) #error "Need crypto library to do digital signature cryptography" #endif /** fake DSA support for unit tests */ int fake_dsa = 0; /** fake SHA1 support for unit tests */ int fake_sha1 = 0; /* OpenSSL implementation */ #ifdef HAVE_SSL #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #if defined(HAVE_OPENSSL_DSA_H) && defined(USE_DSA) #include #endif /** * Output a libcrypto openssl error to the logfile. * @param str: string to add to it. * @param e: the error to output, error number from ERR_get_error(). */ static void log_crypto_error(const char* str, unsigned long e) { char buf[128]; /* or use ERR_error_string if ERR_error_string_n is not avail TODO */ ERR_error_string_n(e, buf, sizeof(buf)); /* buf now contains */ /* error:[error code]:[library name]:[function name]:[reason string] */ log_err("%s crypto %s", str, buf); } /* return size of digest if supported, or 0 otherwise */ size_t nsec3_hash_algo_size_supported(int id) { switch(id) { case NSEC3_HASH_SHA1: return SHA_DIGEST_LENGTH; default: return 0; } } /* perform nsec3 hash. return false on failure */ int secalgo_nsec3_hash(int algo, unsigned char* buf, size_t len, unsigned char* res) { switch(algo) { case NSEC3_HASH_SHA1: #ifdef OPENSSL_FIPS if(!sldns_digest_evp(buf, len, res, EVP_sha1())) log_crypto_error("could not digest with EVP_sha1", ERR_get_error()); #else (void)SHA1(buf, len, res); #endif return 1; default: return 0; } } void secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) { #ifdef OPENSSL_FIPS if(!sldns_digest_evp(buf, len, res, EVP_sha256())) log_crypto_error("could not digest with EVP_sha256", ERR_get_error()); #else (void)SHA256(buf, len, res); #endif } /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. * @return size in bytes of digest, or 0 if not supported. */ size_t ds_digest_size_supported(int algo) { switch(algo) { case LDNS_SHA1: #if defined(HAVE_EVP_SHA1) && defined(USE_SHA1) return SHA_DIGEST_LENGTH; #else if(fake_sha1) return 20; return 0; #endif #ifdef HAVE_EVP_SHA256 case LDNS_SHA256: return SHA256_DIGEST_LENGTH; #endif #ifdef USE_GOST case LDNS_HASH_GOST: /* we support GOST if it can be loaded */ (void)sldns_key_EVP_load_gost_id(); if(EVP_get_digestbyname("md_gost94")) return 32; else return 0; #endif #ifdef USE_ECDSA case LDNS_SHA384: return SHA384_DIGEST_LENGTH; #endif default: break; } return 0; } #ifdef USE_GOST /** Perform GOST hash */ static int do_gost94(unsigned char* data, size_t len, unsigned char* dest) { const EVP_MD* md = EVP_get_digestbyname("md_gost94"); if(!md) return 0; return sldns_digest_evp(data, (unsigned int)len, dest, md); } #endif int secalgo_ds_digest(int algo, unsigned char* buf, size_t len, unsigned char* res) { switch(algo) { #if defined(HAVE_EVP_SHA1) && defined(USE_SHA1) case LDNS_SHA1: #ifdef OPENSSL_FIPS if(!sldns_digest_evp(buf, len, res, EVP_sha1())) log_crypto_error("could not digest with EVP_sha1", ERR_get_error()); #else (void)SHA1(buf, len, res); #endif return 1; #endif #ifdef HAVE_EVP_SHA256 case LDNS_SHA256: #ifdef OPENSSL_FIPS if(!sldns_digest_evp(buf, len, res, EVP_sha256())) log_crypto_error("could not digest with EVP_sha256", ERR_get_error()); #else (void)SHA256(buf, len, res); #endif return 1; #endif #ifdef USE_GOST case LDNS_HASH_GOST: if(do_gost94(buf, len, res)) return 1; break; #endif #ifdef USE_ECDSA case LDNS_SHA384: #ifdef OPENSSL_FIPS if(!sldns_digest_evp(buf, len, res, EVP_sha384())) log_crypto_error("could not digest with EVP_sha384", ERR_get_error()); #else (void)SHA384(buf, len, res); #endif return 1; #endif default: verbose(VERB_QUERY, "unknown DS digest algorithm %d", algo); break; } return 0; } /** return true if DNSKEY algorithm id is supported */ int dnskey_algo_id_is_supported(int id) { switch(id) { case LDNS_RSAMD5: /* RFC 6725 deprecates RSAMD5 */ return 0; case LDNS_DSA: case LDNS_DSA_NSEC3: #if defined(USE_DSA) && defined(USE_SHA1) return 1; #else if(fake_dsa || fake_sha1) return 1; return 0; #endif case LDNS_RSASHA1: case LDNS_RSASHA1_NSEC3: #ifdef USE_SHA1 return 1; #else if(fake_sha1) return 1; return 0; #endif #if defined(HAVE_EVP_SHA256) && defined(USE_SHA2) case LDNS_RSASHA256: #endif #if defined(HAVE_EVP_SHA512) && defined(USE_SHA2) case LDNS_RSASHA512: #endif #ifdef USE_ECDSA case LDNS_ECDSAP256SHA256: case LDNS_ECDSAP384SHA384: #endif #ifdef USE_ED25519 case LDNS_ED25519: #endif #ifdef USE_ED448 case LDNS_ED448: #endif #if (defined(HAVE_EVP_SHA256) && defined(USE_SHA2)) || (defined(HAVE_EVP_SHA512) && defined(USE_SHA2)) || defined(USE_ECDSA) || defined(USE_ED25519) || defined(USE_ED448) return 1; #endif #ifdef USE_GOST case LDNS_ECC_GOST: /* we support GOST if it can be loaded */ return sldns_key_EVP_load_gost_id(); #endif default: return 0; } } #ifdef USE_DSA /** * Setup DSA key digest in DER encoding ... * @param sig: input is signature output alloced ptr (unless failure). * caller must free alloced ptr if this routine returns true. * @param len: input is initial siglen, output is output len. * @return false on failure. */ static int setup_dsa_sig(unsigned char** sig, unsigned int* len) { unsigned char* orig = *sig; unsigned int origlen = *len; int newlen; BIGNUM *R, *S; DSA_SIG *dsasig; /* extract the R and S field from the sig buffer */ if(origlen < 1 + 2*SHA_DIGEST_LENGTH) return 0; R = BN_new(); if(!R) return 0; (void) BN_bin2bn(orig + 1, SHA_DIGEST_LENGTH, R); S = BN_new(); if(!S) return 0; (void) BN_bin2bn(orig + 21, SHA_DIGEST_LENGTH, S); dsasig = DSA_SIG_new(); if(!dsasig) return 0; #ifdef HAVE_DSA_SIG_SET0 if(!DSA_SIG_set0(dsasig, R, S)) return 0; #else # ifndef S_SPLINT_S dsasig->r = R; dsasig->s = S; # endif /* S_SPLINT_S */ #endif *sig = NULL; newlen = i2d_DSA_SIG(dsasig, sig); if(newlen < 0) { DSA_SIG_free(dsasig); free(*sig); return 0; } *len = (unsigned int)newlen; DSA_SIG_free(dsasig); return 1; } #endif /* USE_DSA */ #ifdef USE_ECDSA /** * Setup the ECDSA signature in its encoding that the library wants. * Converts from plain numbers to ASN formatted. * @param sig: input is signature, output alloced ptr (unless failure). * caller must free alloced ptr if this routine returns true. * @param len: input is initial siglen, output is output len. * @return false on failure. */ static int setup_ecdsa_sig(unsigned char** sig, unsigned int* len) { /* convert from two BIGNUMs in the rdata buffer, to ASN notation. * ASN preamble: 30440220 0220 * the '20' is the length of that field (=bnsize). i * the '44' is the total remaining length. * if negative, start with leading zero. * if starts with 00s, remove them from the number. */ uint8_t pre[] = {0x30, 0x44, 0x02, 0x20}; int pre_len = 4; uint8_t mid[] = {0x02, 0x20}; int mid_len = 2; int raw_sig_len, r_high, s_high, r_rem=0, s_rem=0; int bnsize = (int)((*len)/2); unsigned char* d = *sig; uint8_t* p; /* if too short or not even length, fails */ if(*len < 16 || bnsize*2 != (int)*len) return 0; /* strip leading zeroes from r (but not last one) */ while(r_rem < bnsize-1 && d[r_rem] == 0) r_rem++; /* strip leading zeroes from s (but not last one) */ while(s_rem < bnsize-1 && d[bnsize+s_rem] == 0) s_rem++; r_high = ((d[0+r_rem]&0x80)?1:0); s_high = ((d[bnsize+s_rem]&0x80)?1:0); raw_sig_len = pre_len + r_high + bnsize - r_rem + mid_len + s_high + bnsize - s_rem; *sig = (unsigned char*)malloc((size_t)raw_sig_len); if(!*sig) return 0; p = (uint8_t*)*sig; p[0] = pre[0]; p[1] = (uint8_t)(raw_sig_len-2); p[2] = pre[2]; p[3] = (uint8_t)(bnsize + r_high - r_rem); p += 4; if(r_high) { *p = 0; p += 1; } memmove(p, d+r_rem, (size_t)bnsize-r_rem); p += bnsize-r_rem; memmove(p, mid, (size_t)mid_len-1); p += mid_len-1; *p = (uint8_t)(bnsize + s_high - s_rem); p += 1; if(s_high) { *p = 0; p += 1; } memmove(p, d+bnsize+s_rem, (size_t)bnsize-s_rem); *len = (unsigned int)raw_sig_len; return 1; } #endif /* USE_ECDSA */ #ifdef USE_ECDSA_EVP_WORKAROUND static EVP_MD ecdsa_evp_256_md; static EVP_MD ecdsa_evp_384_md; void ecdsa_evp_workaround_init(void) { /* openssl before 1.0.0 fixes RSA with the SHA256 * hash in EVP. We create one for ecdsa_sha256 */ ecdsa_evp_256_md = *EVP_sha256(); ecdsa_evp_256_md.required_pkey_type[0] = EVP_PKEY_EC; ecdsa_evp_256_md.verify = (void*)ECDSA_verify; ecdsa_evp_384_md = *EVP_sha384(); ecdsa_evp_384_md.required_pkey_type[0] = EVP_PKEY_EC; ecdsa_evp_384_md.verify = (void*)ECDSA_verify; } #endif /* USE_ECDSA_EVP_WORKAROUND */ /** * Setup key and digest for verification. Adjust sig if necessary. * * @param algo: key algorithm * @param evp_key: EVP PKEY public key to create. * @param digest_type: digest type to use * @param key: key to setup for. * @param keylen: length of key. * @return false on failure. */ static int setup_key_digest(int algo, EVP_PKEY** evp_key, const EVP_MD** digest_type, unsigned char* key, size_t keylen) { #if defined(USE_DSA) && defined(USE_SHA1) DSA* dsa; #endif RSA* rsa; switch(algo) { #if defined(USE_DSA) && defined(USE_SHA1) case LDNS_DSA: case LDNS_DSA_NSEC3: *evp_key = EVP_PKEY_new(); if(!*evp_key) { log_err("verify: malloc failure in crypto"); return 0; } dsa = sldns_key_buf2dsa_raw(key, keylen); if(!dsa) { verbose(VERB_QUERY, "verify: " "sldns_key_buf2dsa_raw failed"); return 0; } if(EVP_PKEY_assign_DSA(*evp_key, dsa) == 0) { verbose(VERB_QUERY, "verify: " "EVP_PKEY_assign_DSA failed"); return 0; } #ifdef HAVE_EVP_DSS1 *digest_type = EVP_dss1(); #else *digest_type = EVP_sha1(); #endif break; #endif /* USE_DSA && USE_SHA1 */ #if defined(USE_SHA1) || (defined(HAVE_EVP_SHA256) && defined(USE_SHA2)) || (defined(HAVE_EVP_SHA512) && defined(USE_SHA2)) #ifdef USE_SHA1 case LDNS_RSASHA1: case LDNS_RSASHA1_NSEC3: #endif #if defined(HAVE_EVP_SHA256) && defined(USE_SHA2) case LDNS_RSASHA256: #endif #if defined(HAVE_EVP_SHA512) && defined(USE_SHA2) case LDNS_RSASHA512: #endif *evp_key = EVP_PKEY_new(); if(!*evp_key) { log_err("verify: malloc failure in crypto"); return 0; } rsa = sldns_key_buf2rsa_raw(key, keylen); if(!rsa) { verbose(VERB_QUERY, "verify: " "sldns_key_buf2rsa_raw SHA failed"); return 0; } if(EVP_PKEY_assign_RSA(*evp_key, rsa) == 0) { verbose(VERB_QUERY, "verify: " "EVP_PKEY_assign_RSA SHA failed"); return 0; } /* select SHA version */ #if defined(HAVE_EVP_SHA256) && defined(USE_SHA2) if(algo == LDNS_RSASHA256) *digest_type = EVP_sha256(); else #endif #if defined(HAVE_EVP_SHA512) && defined(USE_SHA2) if(algo == LDNS_RSASHA512) *digest_type = EVP_sha512(); else #endif #ifdef USE_SHA1 *digest_type = EVP_sha1(); #else { verbose(VERB_QUERY, "no digest available"); return 0; } #endif break; #endif /* defined(USE_SHA1) || (defined(HAVE_EVP_SHA256) && defined(USE_SHA2)) || (defined(HAVE_EVP_SHA512) && defined(USE_SHA2)) */ case LDNS_RSAMD5: *evp_key = EVP_PKEY_new(); if(!*evp_key) { log_err("verify: malloc failure in crypto"); return 0; } rsa = sldns_key_buf2rsa_raw(key, keylen); if(!rsa) { verbose(VERB_QUERY, "verify: " "sldns_key_buf2rsa_raw MD5 failed"); return 0; } if(EVP_PKEY_assign_RSA(*evp_key, rsa) == 0) { verbose(VERB_QUERY, "verify: " "EVP_PKEY_assign_RSA MD5 failed"); return 0; } *digest_type = EVP_md5(); break; #ifdef USE_GOST case LDNS_ECC_GOST: *evp_key = sldns_gost2pkey_raw(key, keylen); if(!*evp_key) { verbose(VERB_QUERY, "verify: " "sldns_gost2pkey_raw failed"); return 0; } *digest_type = EVP_get_digestbyname("md_gost94"); if(!*digest_type) { verbose(VERB_QUERY, "verify: " "EVP_getdigest md_gost94 failed"); return 0; } break; #endif #ifdef USE_ECDSA case LDNS_ECDSAP256SHA256: *evp_key = sldns_ecdsa2pkey_raw(key, keylen, LDNS_ECDSAP256SHA256); if(!*evp_key) { verbose(VERB_QUERY, "verify: " "sldns_ecdsa2pkey_raw failed"); return 0; } #ifdef USE_ECDSA_EVP_WORKAROUND *digest_type = &ecdsa_evp_256_md; #else *digest_type = EVP_sha256(); #endif break; case LDNS_ECDSAP384SHA384: *evp_key = sldns_ecdsa2pkey_raw(key, keylen, LDNS_ECDSAP384SHA384); if(!*evp_key) { verbose(VERB_QUERY, "verify: " "sldns_ecdsa2pkey_raw failed"); return 0; } #ifdef USE_ECDSA_EVP_WORKAROUND *digest_type = &ecdsa_evp_384_md; #else *digest_type = EVP_sha384(); #endif break; #endif /* USE_ECDSA */ #ifdef USE_ED25519 case LDNS_ED25519: *evp_key = sldns_ed255192pkey_raw(key, keylen); if(!*evp_key) { verbose(VERB_QUERY, "verify: " "sldns_ed255192pkey_raw failed"); return 0; } *digest_type = NULL; break; #endif /* USE_ED25519 */ #ifdef USE_ED448 case LDNS_ED448: *evp_key = sldns_ed4482pkey_raw(key, keylen); if(!*evp_key) { verbose(VERB_QUERY, "verify: " "sldns_ed4482pkey_raw failed"); return 0; } *digest_type = NULL; break; #endif /* USE_ED448 */ default: verbose(VERB_QUERY, "verify: unknown algorithm %d", algo); return 0; } return 1; } /** * Check a canonical sig+rrset and signature against a dnskey * @param buf: buffer with data to verify, the first rrsig part and the * canonicalized rrset. * @param algo: DNSKEY algorithm. * @param sigblock: signature rdata field from RRSIG * @param sigblock_len: length of sigblock data. * @param key: public key data from DNSKEY RR. * @param keylen: length of keydata. * @param reason: bogus reason in more detail. * @return secure if verification succeeded, bogus on crypto failure, * unchecked on format errors and alloc failures. */ enum sec_status verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen, char** reason) { const EVP_MD *digest_type; EVP_MD_CTX* ctx; int res, dofree = 0, docrypto_free = 0; EVP_PKEY *evp_key = NULL; #ifndef USE_DSA if((algo == LDNS_DSA || algo == LDNS_DSA_NSEC3) &&(fake_dsa||fake_sha1)) return sec_status_secure; #endif #ifndef USE_SHA1 if(fake_sha1 && (algo == LDNS_DSA || algo == LDNS_DSA_NSEC3 || algo == LDNS_RSASHA1 || algo == LDNS_RSASHA1_NSEC3)) return sec_status_secure; #endif if(!setup_key_digest(algo, &evp_key, &digest_type, key, keylen)) { verbose(VERB_QUERY, "verify: failed to setup key"); *reason = "use of key for crypto failed"; EVP_PKEY_free(evp_key); return sec_status_bogus; } #ifdef USE_DSA /* if it is a DSA signature in bind format, convert to DER format */ if((algo == LDNS_DSA || algo == LDNS_DSA_NSEC3) && sigblock_len == 1+2*SHA_DIGEST_LENGTH) { if(!setup_dsa_sig(&sigblock, &sigblock_len)) { verbose(VERB_QUERY, "verify: failed to setup DSA sig"); *reason = "use of key for DSA crypto failed"; EVP_PKEY_free(evp_key); return sec_status_bogus; } docrypto_free = 1; } #endif #if defined(USE_ECDSA) && defined(USE_DSA) else #endif #ifdef USE_ECDSA if(algo == LDNS_ECDSAP256SHA256 || algo == LDNS_ECDSAP384SHA384) { /* EVP uses ASN prefix on sig, which is not in the wire data */ if(!setup_ecdsa_sig(&sigblock, &sigblock_len)) { verbose(VERB_QUERY, "verify: failed to setup ECDSA sig"); *reason = "use of signature for ECDSA crypto failed"; EVP_PKEY_free(evp_key); return sec_status_bogus; } dofree = 1; } #endif /* USE_ECDSA */ /* do the signature cryptography work */ #ifdef HAVE_EVP_MD_CTX_NEW ctx = EVP_MD_CTX_new(); #else ctx = (EVP_MD_CTX*)malloc(sizeof(*ctx)); if(ctx) EVP_MD_CTX_init(ctx); #endif if(!ctx) { log_err("EVP_MD_CTX_new: malloc failure"); EVP_PKEY_free(evp_key); if(dofree) free(sigblock); else if(docrypto_free) OPENSSL_free(sigblock); return sec_status_unchecked; } #ifndef HAVE_EVP_DIGESTVERIFY if(EVP_DigestInit(ctx, digest_type) == 0) { verbose(VERB_QUERY, "verify: EVP_DigestInit failed"); #ifdef HAVE_EVP_MD_CTX_NEW EVP_MD_CTX_destroy(ctx); #else EVP_MD_CTX_cleanup(ctx); free(ctx); #endif EVP_PKEY_free(evp_key); if(dofree) free(sigblock); else if(docrypto_free) OPENSSL_free(sigblock); return sec_status_unchecked; } if(EVP_DigestUpdate(ctx, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf)) == 0) { verbose(VERB_QUERY, "verify: EVP_DigestUpdate failed"); #ifdef HAVE_EVP_MD_CTX_NEW EVP_MD_CTX_destroy(ctx); #else EVP_MD_CTX_cleanup(ctx); free(ctx); #endif EVP_PKEY_free(evp_key); if(dofree) free(sigblock); else if(docrypto_free) OPENSSL_free(sigblock); return sec_status_unchecked; } res = EVP_VerifyFinal(ctx, sigblock, sigblock_len, evp_key); #else /* HAVE_EVP_DIGESTVERIFY */ if(EVP_DigestVerifyInit(ctx, NULL, digest_type, NULL, evp_key) == 0) { verbose(VERB_QUERY, "verify: EVP_DigestVerifyInit failed"); #ifdef HAVE_EVP_MD_CTX_NEW EVP_MD_CTX_destroy(ctx); #else EVP_MD_CTX_cleanup(ctx); free(ctx); #endif EVP_PKEY_free(evp_key); if(dofree) free(sigblock); else if(docrypto_free) OPENSSL_free(sigblock); return sec_status_unchecked; } res = EVP_DigestVerify(ctx, sigblock, sigblock_len, (unsigned char*)sldns_buffer_begin(buf), sldns_buffer_limit(buf)); #endif #ifdef HAVE_EVP_MD_CTX_NEW EVP_MD_CTX_destroy(ctx); #else EVP_MD_CTX_cleanup(ctx); free(ctx); #endif EVP_PKEY_free(evp_key); if(dofree) free(sigblock); else if(docrypto_free) OPENSSL_free(sigblock); if(res == 1) { return sec_status_secure; } else if(res == 0) { verbose(VERB_QUERY, "verify: signature mismatch"); *reason = "signature crypto failed"; return sec_status_bogus; } log_crypto_error("verify:", ERR_get_error()); return sec_status_unchecked; } /**************************************************/ #elif defined(HAVE_NSS) /* libnss implementation */ /* nss3 */ #include "sechash.h" #include "pk11pub.h" #include "keyhi.h" #include "secerr.h" #include "cryptohi.h" /* nspr4 */ #include "prerror.h" /* return size of digest if supported, or 0 otherwise */ size_t nsec3_hash_algo_size_supported(int id) { switch(id) { case NSEC3_HASH_SHA1: return SHA1_LENGTH; default: return 0; } } /* perform nsec3 hash. return false on failure */ int secalgo_nsec3_hash(int algo, unsigned char* buf, size_t len, unsigned char* res) { switch(algo) { case NSEC3_HASH_SHA1: (void)HASH_HashBuf(HASH_AlgSHA1, res, buf, (unsigned long)len); return 1; default: return 0; } } void secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) { (void)HASH_HashBuf(HASH_AlgSHA256, res, buf, (unsigned long)len); } size_t ds_digest_size_supported(int algo) { /* uses libNSS */ switch(algo) { #ifdef USE_SHA1 case LDNS_SHA1: return SHA1_LENGTH; #endif #ifdef USE_SHA2 case LDNS_SHA256: return SHA256_LENGTH; #endif #ifdef USE_ECDSA case LDNS_SHA384: return SHA384_LENGTH; #endif /* GOST not supported in NSS */ case LDNS_HASH_GOST: default: break; } return 0; } int secalgo_ds_digest(int algo, unsigned char* buf, size_t len, unsigned char* res) { /* uses libNSS */ switch(algo) { #ifdef USE_SHA1 case LDNS_SHA1: return HASH_HashBuf(HASH_AlgSHA1, res, buf, len) == SECSuccess; #endif #if defined(USE_SHA2) case LDNS_SHA256: return HASH_HashBuf(HASH_AlgSHA256, res, buf, len) == SECSuccess; #endif #ifdef USE_ECDSA case LDNS_SHA384: return HASH_HashBuf(HASH_AlgSHA384, res, buf, len) == SECSuccess; #endif case LDNS_HASH_GOST: default: verbose(VERB_QUERY, "unknown DS digest algorithm %d", algo); break; } return 0; } int dnskey_algo_id_is_supported(int id) { /* uses libNSS */ switch(id) { case LDNS_RSAMD5: /* RFC 6725 deprecates RSAMD5 */ return 0; #if defined(USE_SHA1) || defined(USE_SHA2) #if defined(USE_DSA) && defined(USE_SHA1) case LDNS_DSA: case LDNS_DSA_NSEC3: #endif #ifdef USE_SHA1 case LDNS_RSASHA1: case LDNS_RSASHA1_NSEC3: #endif #ifdef USE_SHA2 case LDNS_RSASHA256: #endif #ifdef USE_SHA2 case LDNS_RSASHA512: #endif return 1; #endif /* SHA1 or SHA2 */ #ifdef USE_ECDSA case LDNS_ECDSAP256SHA256: case LDNS_ECDSAP384SHA384: return PK11_TokenExists(CKM_ECDSA); #endif case LDNS_ECC_GOST: default: return 0; } } /* return a new public key for NSS */ static SECKEYPublicKey* nss_key_create(KeyType ktype) { SECKEYPublicKey* key; PLArenaPool* arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if(!arena) { log_err("out of memory, PORT_NewArena failed"); return NULL; } key = PORT_ArenaZNew(arena, SECKEYPublicKey); if(!key) { log_err("out of memory, PORT_ArenaZNew failed"); PORT_FreeArena(arena, PR_FALSE); return NULL; } key->arena = arena; key->keyType = ktype; key->pkcs11Slot = NULL; key->pkcs11ID = CK_INVALID_HANDLE; return key; } static SECKEYPublicKey* nss_buf2ecdsa(unsigned char* key, size_t len, int algo) { SECKEYPublicKey* pk; SECItem pub = {siBuffer, NULL, 0}; SECItem params = {siBuffer, NULL, 0}; static unsigned char param256[] = { /* OBJECTIDENTIFIER 1.2.840.10045.3.1.7 (P-256) * {iso(1) member-body(2) us(840) ansi-x962(10045) curves(3) prime(1) prime256v1(7)} */ 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07 }; static unsigned char param384[] = { /* OBJECTIDENTIFIER 1.3.132.0.34 (P-384) * {iso(1) identified-organization(3) certicom(132) curve(0) ansip384r1(34)} */ 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x22 }; unsigned char buf[256+2]; /* sufficient for 2*384/8+1 */ /* check length, which uncompressed must be 2 bignums */ if(algo == LDNS_ECDSAP256SHA256) { if(len != 2*256/8) return NULL; /* ECCurve_X9_62_PRIME_256V1 */ } else if(algo == LDNS_ECDSAP384SHA384) { if(len != 2*384/8) return NULL; /* ECCurve_X9_62_PRIME_384R1 */ } else return NULL; buf[0] = 0x04; /* POINT_FORM_UNCOMPRESSED */ memmove(buf+1, key, len); pub.data = buf; pub.len = len+1; if(algo == LDNS_ECDSAP256SHA256) { params.data = param256; params.len = sizeof(param256); } else { params.data = param384; params.len = sizeof(param384); } pk = nss_key_create(ecKey); if(!pk) return NULL; pk->u.ec.size = (len/2)*8; if(SECITEM_CopyItem(pk->arena, &pk->u.ec.publicValue, &pub)) { SECKEY_DestroyPublicKey(pk); return NULL; } if(SECITEM_CopyItem(pk->arena, &pk->u.ec.DEREncodedParams, ¶ms)) { SECKEY_DestroyPublicKey(pk); return NULL; } return pk; } #if defined(USE_DSA) && defined(USE_SHA1) static SECKEYPublicKey* nss_buf2dsa(unsigned char* key, size_t len) { SECKEYPublicKey* pk; uint8_t T; uint16_t length; uint16_t offset; SECItem Q = {siBuffer, NULL, 0}; SECItem P = {siBuffer, NULL, 0}; SECItem G = {siBuffer, NULL, 0}; SECItem Y = {siBuffer, NULL, 0}; if(len == 0) return NULL; T = (uint8_t)key[0]; length = (64 + T * 8); offset = 1; if (T > 8) { return NULL; } if(len < (size_t)1 + SHA1_LENGTH + 3*length) return NULL; Q.data = key+offset; Q.len = SHA1_LENGTH; offset += SHA1_LENGTH; P.data = key+offset; P.len = length; offset += length; G.data = key+offset; G.len = length; offset += length; Y.data = key+offset; Y.len = length; offset += length; pk = nss_key_create(dsaKey); if(!pk) return NULL; if(SECITEM_CopyItem(pk->arena, &pk->u.dsa.params.prime, &P)) { SECKEY_DestroyPublicKey(pk); return NULL; } if(SECITEM_CopyItem(pk->arena, &pk->u.dsa.params.subPrime, &Q)) { SECKEY_DestroyPublicKey(pk); return NULL; } if(SECITEM_CopyItem(pk->arena, &pk->u.dsa.params.base, &G)) { SECKEY_DestroyPublicKey(pk); return NULL; } if(SECITEM_CopyItem(pk->arena, &pk->u.dsa.publicValue, &Y)) { SECKEY_DestroyPublicKey(pk); return NULL; } return pk; } #endif /* USE_DSA && USE_SHA1 */ static SECKEYPublicKey* nss_buf2rsa(unsigned char* key, size_t len) { SECKEYPublicKey* pk; uint16_t exp; uint16_t offset; uint16_t int16; SECItem modulus = {siBuffer, NULL, 0}; SECItem exponent = {siBuffer, NULL, 0}; if(len == 0) return NULL; if(key[0] == 0) { if(len < 3) return NULL; /* the exponent is too large so it's places further */ memmove(&int16, key+1, 2); exp = ntohs(int16); offset = 3; } else { exp = key[0]; offset = 1; } /* key length at least one */ if(len < (size_t)offset + exp + 1) return NULL; exponent.data = key+offset; exponent.len = exp; offset += exp; modulus.data = key+offset; modulus.len = (len - offset); pk = nss_key_create(rsaKey); if(!pk) return NULL; if(SECITEM_CopyItem(pk->arena, &pk->u.rsa.modulus, &modulus)) { SECKEY_DestroyPublicKey(pk); return NULL; } if(SECITEM_CopyItem(pk->arena, &pk->u.rsa.publicExponent, &exponent)) { SECKEY_DestroyPublicKey(pk); return NULL; } return pk; } /** * Setup key and digest for verification. Adjust sig if necessary. * * @param algo: key algorithm * @param evp_key: EVP PKEY public key to create. * @param digest_type: digest type to use * @param key: key to setup for. * @param keylen: length of key. * @param prefix: if returned, the ASN prefix for the hashblob. * @param prefixlen: length of the prefix. * @return false on failure. */ static int nss_setup_key_digest(int algo, SECKEYPublicKey** pubkey, HASH_HashType* htype, unsigned char* key, size_t keylen, unsigned char** prefix, size_t* prefixlen) { /* uses libNSS */ /* hash prefix for md5, RFC2537 */ static unsigned char p_md5[] = {0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10}; /* hash prefix to prepend to hash output, from RFC3110 */ static unsigned char p_sha1[] = {0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14}; /* from RFC5702 */ static unsigned char p_sha256[] = {0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20}; static unsigned char p_sha512[] = {0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40}; /* from RFC6234 */ /* for future RSASHA384 .. static unsigned char p_sha384[] = {0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30}; */ switch(algo) { #if defined(USE_SHA1) || defined(USE_SHA2) #if defined(USE_DSA) && defined(USE_SHA1) case LDNS_DSA: case LDNS_DSA_NSEC3: *pubkey = nss_buf2dsa(key, keylen); if(!*pubkey) { log_err("verify: malloc failure in crypto"); return 0; } *htype = HASH_AlgSHA1; /* no prefix for DSA verification */ break; #endif #ifdef USE_SHA1 case LDNS_RSASHA1: case LDNS_RSASHA1_NSEC3: #endif #ifdef USE_SHA2 case LDNS_RSASHA256: #endif #ifdef USE_SHA2 case LDNS_RSASHA512: #endif *pubkey = nss_buf2rsa(key, keylen); if(!*pubkey) { log_err("verify: malloc failure in crypto"); return 0; } /* select SHA version */ #ifdef USE_SHA2 if(algo == LDNS_RSASHA256) { *htype = HASH_AlgSHA256; *prefix = p_sha256; *prefixlen = sizeof(p_sha256); } else #endif #ifdef USE_SHA2 if(algo == LDNS_RSASHA512) { *htype = HASH_AlgSHA512; *prefix = p_sha512; *prefixlen = sizeof(p_sha512); } else #endif #ifdef USE_SHA1 { *htype = HASH_AlgSHA1; *prefix = p_sha1; *prefixlen = sizeof(p_sha1); } #else { verbose(VERB_QUERY, "verify: no digest algo"); return 0; } #endif break; #endif /* SHA1 or SHA2 */ case LDNS_RSAMD5: *pubkey = nss_buf2rsa(key, keylen); if(!*pubkey) { log_err("verify: malloc failure in crypto"); return 0; } *htype = HASH_AlgMD5; *prefix = p_md5; *prefixlen = sizeof(p_md5); break; #ifdef USE_ECDSA case LDNS_ECDSAP256SHA256: *pubkey = nss_buf2ecdsa(key, keylen, LDNS_ECDSAP256SHA256); if(!*pubkey) { log_err("verify: malloc failure in crypto"); return 0; } *htype = HASH_AlgSHA256; /* no prefix for DSA verification */ break; case LDNS_ECDSAP384SHA384: *pubkey = nss_buf2ecdsa(key, keylen, LDNS_ECDSAP384SHA384); if(!*pubkey) { log_err("verify: malloc failure in crypto"); return 0; } *htype = HASH_AlgSHA384; /* no prefix for DSA verification */ break; #endif /* USE_ECDSA */ case LDNS_ECC_GOST: default: verbose(VERB_QUERY, "verify: unknown algorithm %d", algo); return 0; } return 1; } /** * Check a canonical sig+rrset and signature against a dnskey * @param buf: buffer with data to verify, the first rrsig part and the * canonicalized rrset. * @param algo: DNSKEY algorithm. * @param sigblock: signature rdata field from RRSIG * @param sigblock_len: length of sigblock data. * @param key: public key data from DNSKEY RR. * @param keylen: length of keydata. * @param reason: bogus reason in more detail. * @return secure if verification succeeded, bogus on crypto failure, * unchecked on format errors and alloc failures. */ enum sec_status verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen, char** reason) { /* uses libNSS */ /* large enough for the different hashes */ unsigned char hash[HASH_LENGTH_MAX]; unsigned char hash2[HASH_LENGTH_MAX*2]; HASH_HashType htype = 0; SECKEYPublicKey* pubkey = NULL; SECItem secsig = {siBuffer, sigblock, sigblock_len}; SECItem sechash = {siBuffer, hash, 0}; SECStatus res; unsigned char* prefix = NULL; /* prefix for hash, RFC3110, RFC5702 */ size_t prefixlen = 0; int err; if(!nss_setup_key_digest(algo, &pubkey, &htype, key, keylen, &prefix, &prefixlen)) { verbose(VERB_QUERY, "verify: failed to setup key"); *reason = "use of key for crypto failed"; SECKEY_DestroyPublicKey(pubkey); return sec_status_bogus; } #if defined(USE_DSA) && defined(USE_SHA1) /* need to convert DSA, ECDSA signatures? */ if((algo == LDNS_DSA || algo == LDNS_DSA_NSEC3)) { if(sigblock_len == 1+2*SHA1_LENGTH) { secsig.data ++; secsig.len --; } else { SECItem* p = DSAU_DecodeDerSig(&secsig); if(!p) { verbose(VERB_QUERY, "verify: failed DER decode"); *reason = "signature DER decode failed"; SECKEY_DestroyPublicKey(pubkey); return sec_status_bogus; } if(SECITEM_CopyItem(pubkey->arena, &secsig, p)) { log_err("alloc failure in DER decode"); SECKEY_DestroyPublicKey(pubkey); SECITEM_FreeItem(p, PR_TRUE); return sec_status_unchecked; } SECITEM_FreeItem(p, PR_TRUE); } } #endif /* USE_DSA */ /* do the signature cryptography work */ /* hash the data */ sechash.len = HASH_ResultLen(htype); if(sechash.len > sizeof(hash)) { verbose(VERB_QUERY, "verify: hash too large for buffer"); SECKEY_DestroyPublicKey(pubkey); return sec_status_unchecked; } if(HASH_HashBuf(htype, hash, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf)) != SECSuccess) { verbose(VERB_QUERY, "verify: HASH_HashBuf failed"); SECKEY_DestroyPublicKey(pubkey); return sec_status_unchecked; } if(prefix) { int hashlen = sechash.len; if(prefixlen+hashlen > sizeof(hash2)) { verbose(VERB_QUERY, "verify: hashprefix too large"); SECKEY_DestroyPublicKey(pubkey); return sec_status_unchecked; } sechash.data = hash2; sechash.len = prefixlen+hashlen; memcpy(sechash.data, prefix, prefixlen); memmove(sechash.data+prefixlen, hash, hashlen); } /* verify the signature */ res = PK11_Verify(pubkey, &secsig, &sechash, NULL /*wincx*/); SECKEY_DestroyPublicKey(pubkey); if(res == SECSuccess) { return sec_status_secure; } err = PORT_GetError(); if(err != SEC_ERROR_BAD_SIGNATURE) { /* failed to verify */ verbose(VERB_QUERY, "verify: PK11_Verify failed: %s", PORT_ErrorToString(err)); /* if it is not supported, like ECC is removed, we get, * SEC_ERROR_NO_MODULE */ if(err == SEC_ERROR_NO_MODULE) return sec_status_unchecked; /* but other errors are commonly returned * for a bad signature from NSS. Thus we return bogus, * not unchecked */ *reason = "signature crypto failed"; return sec_status_bogus; } verbose(VERB_QUERY, "verify: signature mismatch: %s", PORT_ErrorToString(err)); *reason = "signature crypto failed"; return sec_status_bogus; } #elif defined(HAVE_NETTLE) #include "sha.h" #include "bignum.h" #include "macros.h" #include "rsa.h" #include "dsa.h" #ifdef HAVE_NETTLE_DSA_COMPAT_H #include "dsa-compat.h" #endif #include "asn1.h" #ifdef USE_ECDSA #include "ecdsa.h" #include "ecc-curve.h" #endif #ifdef HAVE_NETTLE_EDDSA_H #include "eddsa.h" #endif static int _digest_nettle(int algo, uint8_t* buf, size_t len, unsigned char* res) { switch(algo) { case SHA1_DIGEST_SIZE: { struct sha1_ctx ctx; sha1_init(&ctx); sha1_update(&ctx, len, buf); sha1_digest(&ctx, SHA1_DIGEST_SIZE, res); return 1; } case SHA256_DIGEST_SIZE: { struct sha256_ctx ctx; sha256_init(&ctx); sha256_update(&ctx, len, buf); sha256_digest(&ctx, SHA256_DIGEST_SIZE, res); return 1; } case SHA384_DIGEST_SIZE: { struct sha384_ctx ctx; sha384_init(&ctx); sha384_update(&ctx, len, buf); sha384_digest(&ctx, SHA384_DIGEST_SIZE, res); return 1; } case SHA512_DIGEST_SIZE: { struct sha512_ctx ctx; sha512_init(&ctx); sha512_update(&ctx, len, buf); sha512_digest(&ctx, SHA512_DIGEST_SIZE, res); return 1; } default: break; } return 0; } /* return size of digest if supported, or 0 otherwise */ size_t nsec3_hash_algo_size_supported(int id) { switch(id) { case NSEC3_HASH_SHA1: return SHA1_DIGEST_SIZE; default: return 0; } } /* perform nsec3 hash. return false on failure */ int secalgo_nsec3_hash(int algo, unsigned char* buf, size_t len, unsigned char* res) { switch(algo) { case NSEC3_HASH_SHA1: return _digest_nettle(SHA1_DIGEST_SIZE, (uint8_t*)buf, len, res); default: return 0; } } void secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res) { _digest_nettle(SHA256_DIGEST_SIZE, (uint8_t*)buf, len, res); } /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. * @return size in bytes of digest, or 0 if not supported. */ size_t ds_digest_size_supported(int algo) { switch(algo) { case LDNS_SHA1: #ifdef USE_SHA1 return SHA1_DIGEST_SIZE; #else if(fake_sha1) return 20; return 0; #endif #ifdef USE_SHA2 case LDNS_SHA256: return SHA256_DIGEST_SIZE; #endif #ifdef USE_ECDSA case LDNS_SHA384: return SHA384_DIGEST_SIZE; #endif /* GOST not supported */ case LDNS_HASH_GOST: default: break; } return 0; } int secalgo_ds_digest(int algo, unsigned char* buf, size_t len, unsigned char* res) { switch(algo) { #ifdef USE_SHA1 case LDNS_SHA1: return _digest_nettle(SHA1_DIGEST_SIZE, buf, len, res); #endif #if defined(USE_SHA2) case LDNS_SHA256: return _digest_nettle(SHA256_DIGEST_SIZE, buf, len, res); #endif #ifdef USE_ECDSA case LDNS_SHA384: return _digest_nettle(SHA384_DIGEST_SIZE, buf, len, res); #endif case LDNS_HASH_GOST: default: verbose(VERB_QUERY, "unknown DS digest algorithm %d", algo); break; } return 0; } int dnskey_algo_id_is_supported(int id) { /* uses libnettle */ switch(id) { case LDNS_DSA: case LDNS_DSA_NSEC3: #if defined(USE_DSA) && defined(USE_SHA1) return 1; #else if(fake_dsa || fake_sha1) return 1; return 0; #endif case LDNS_RSASHA1: case LDNS_RSASHA1_NSEC3: #ifdef USE_SHA1 return 1; #else if(fake_sha1) return 1; return 0; #endif #ifdef USE_SHA2 case LDNS_RSASHA256: case LDNS_RSASHA512: #endif #ifdef USE_ECDSA case LDNS_ECDSAP256SHA256: case LDNS_ECDSAP384SHA384: #endif return 1; #ifdef USE_ED25519 case LDNS_ED25519: return 1; #endif case LDNS_RSAMD5: /* RFC 6725 deprecates RSAMD5 */ case LDNS_ECC_GOST: default: return 0; } } #if defined(USE_DSA) && defined(USE_SHA1) static char * _verify_nettle_dsa(sldns_buffer* buf, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen) { uint8_t digest[SHA1_DIGEST_SIZE]; uint8_t key_t_value; int res = 0; size_t offset; struct dsa_public_key pubkey; struct dsa_signature signature; unsigned int expected_len; /* Extract DSA signature from the record */ nettle_dsa_signature_init(&signature); /* Signature length: 41 bytes - RFC 2536 sec. 3 */ if(sigblock_len == 41) { if(key[0] != sigblock[0]) return "invalid T value in DSA signature or pubkey"; nettle_mpz_set_str_256_u(signature.r, 20, sigblock+1); nettle_mpz_set_str_256_u(signature.s, 20, sigblock+1+20); } else { /* DER encoded, decode the ASN1 notated R and S bignums */ /* SEQUENCE { r INTEGER, s INTEGER } */ struct asn1_der_iterator i, seq; if(asn1_der_iterator_first(&i, sigblock_len, (uint8_t*)sigblock) != ASN1_ITERATOR_CONSTRUCTED || i.type != ASN1_SEQUENCE) return "malformed DER encoded DSA signature"; /* decode this element of i using the seq iterator */ if(asn1_der_decode_constructed(&i, &seq) != ASN1_ITERATOR_PRIMITIVE || seq.type != ASN1_INTEGER) return "malformed DER encoded DSA signature"; if(!asn1_der_get_bignum(&seq, signature.r, 20*8)) return "malformed DER encoded DSA signature"; if(asn1_der_iterator_next(&seq) != ASN1_ITERATOR_PRIMITIVE || seq.type != ASN1_INTEGER) return "malformed DER encoded DSA signature"; if(!asn1_der_get_bignum(&seq, signature.s, 20*8)) return "malformed DER encoded DSA signature"; if(asn1_der_iterator_next(&i) != ASN1_ITERATOR_END) return "malformed DER encoded DSA signature"; } /* Validate T values constraints - RFC 2536 sec. 2 & sec. 3 */ key_t_value = key[0]; if (key_t_value > 8) { return "invalid T value in DSA pubkey"; } /* Pubkey minimum length: 21 bytes - RFC 2536 sec. 2 */ if (keylen < 21) { return "DSA pubkey too short"; } expected_len = 1 + /* T */ 20 + /* Q */ (64 + key_t_value*8) + /* P */ (64 + key_t_value*8) + /* G */ (64 + key_t_value*8); /* Y */ if (keylen != expected_len ) { return "invalid DSA pubkey length"; } /* Extract DSA pubkey from the record */ nettle_dsa_public_key_init(&pubkey); offset = 1; nettle_mpz_set_str_256_u(pubkey.q, 20, key+offset); offset += 20; nettle_mpz_set_str_256_u(pubkey.p, (64 + key_t_value*8), key+offset); offset += (64 + key_t_value*8); nettle_mpz_set_str_256_u(pubkey.g, (64 + key_t_value*8), key+offset); offset += (64 + key_t_value*8); nettle_mpz_set_str_256_u(pubkey.y, (64 + key_t_value*8), key+offset); /* Digest content of "buf" and verify its DSA signature in "sigblock"*/ res = _digest_nettle(SHA1_DIGEST_SIZE, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf), (unsigned char*)digest); res &= dsa_sha1_verify_digest(&pubkey, digest, &signature); /* Clear and return */ nettle_dsa_signature_clear(&signature); nettle_dsa_public_key_clear(&pubkey); if (!res) return "DSA signature verification failed"; else return NULL; } #endif /* USE_DSA */ static char * _verify_nettle_rsa(sldns_buffer* buf, unsigned int digest_size, char* sigblock, unsigned int sigblock_len, uint8_t* key, unsigned int keylen) { uint16_t exp_len = 0; size_t exp_offset = 0, mod_offset = 0; struct rsa_public_key pubkey; mpz_t signature; int res = 0; /* RSA pubkey parsing as per RFC 3110 sec. 2 */ if( keylen <= 1) { return "null RSA key"; } if (key[0] != 0) { /* 1-byte length */ exp_len = key[0]; exp_offset = 1; } else { /* 1-byte NUL + 2-bytes exponent length */ if (keylen < 3) { return "incorrect RSA key length"; } exp_len = READ_UINT16(key+1); if (exp_len == 0) return "null RSA exponent length"; exp_offset = 3; } /* Check that we are not over-running input length */ if (keylen < exp_offset + exp_len + 1) { return "RSA key content shorter than expected"; } mod_offset = exp_offset + exp_len; nettle_rsa_public_key_init(&pubkey); pubkey.size = keylen - mod_offset; nettle_mpz_set_str_256_u(pubkey.e, exp_len, &key[exp_offset]); nettle_mpz_set_str_256_u(pubkey.n, pubkey.size, &key[mod_offset]); /* Digest content of "buf" and verify its RSA signature in "sigblock"*/ nettle_mpz_init_set_str_256_u(signature, sigblock_len, (uint8_t*)sigblock); switch (digest_size) { case SHA1_DIGEST_SIZE: { uint8_t digest[SHA1_DIGEST_SIZE]; res = _digest_nettle(SHA1_DIGEST_SIZE, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf), (unsigned char*)digest); res &= rsa_sha1_verify_digest(&pubkey, digest, signature); break; } case SHA256_DIGEST_SIZE: { uint8_t digest[SHA256_DIGEST_SIZE]; res = _digest_nettle(SHA256_DIGEST_SIZE, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf), (unsigned char*)digest); res &= rsa_sha256_verify_digest(&pubkey, digest, signature); break; } case SHA512_DIGEST_SIZE: { uint8_t digest[SHA512_DIGEST_SIZE]; res = _digest_nettle(SHA512_DIGEST_SIZE, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf), (unsigned char*)digest); res &= rsa_sha512_verify_digest(&pubkey, digest, signature); break; } default: break; } /* Clear and return */ nettle_rsa_public_key_clear(&pubkey); mpz_clear(signature); if (!res) { return "RSA signature verification failed"; } else { return NULL; } } #ifdef USE_ECDSA static char * _verify_nettle_ecdsa(sldns_buffer* buf, unsigned int digest_size, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen) { int res = 0; struct ecc_point pubkey; struct dsa_signature signature; /* Always matched strength, as per RFC 6605 sec. 1 */ if (sigblock_len != 2*digest_size || keylen != 2*digest_size) { return "wrong ECDSA signature length"; } /* Parse ECDSA signature as per RFC 6605 sec. 4 */ nettle_dsa_signature_init(&signature); switch (digest_size) { case SHA256_DIGEST_SIZE: { uint8_t digest[SHA256_DIGEST_SIZE]; mpz_t x, y; nettle_ecc_point_init(&pubkey, nettle_get_secp_256r1()); nettle_mpz_init_set_str_256_u(x, SHA256_DIGEST_SIZE, key); nettle_mpz_init_set_str_256_u(y, SHA256_DIGEST_SIZE, key+SHA256_DIGEST_SIZE); nettle_mpz_set_str_256_u(signature.r, SHA256_DIGEST_SIZE, sigblock); nettle_mpz_set_str_256_u(signature.s, SHA256_DIGEST_SIZE, sigblock+SHA256_DIGEST_SIZE); res = _digest_nettle(SHA256_DIGEST_SIZE, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf), (unsigned char*)digest); res &= nettle_ecc_point_set(&pubkey, x, y); res &= nettle_ecdsa_verify (&pubkey, SHA256_DIGEST_SIZE, digest, &signature); mpz_clear(x); mpz_clear(y); nettle_ecc_point_clear(&pubkey); break; } case SHA384_DIGEST_SIZE: { uint8_t digest[SHA384_DIGEST_SIZE]; mpz_t x, y; nettle_ecc_point_init(&pubkey, nettle_get_secp_384r1()); nettle_mpz_init_set_str_256_u(x, SHA384_DIGEST_SIZE, key); nettle_mpz_init_set_str_256_u(y, SHA384_DIGEST_SIZE, key+SHA384_DIGEST_SIZE); nettle_mpz_set_str_256_u(signature.r, SHA384_DIGEST_SIZE, sigblock); nettle_mpz_set_str_256_u(signature.s, SHA384_DIGEST_SIZE, sigblock+SHA384_DIGEST_SIZE); res = _digest_nettle(SHA384_DIGEST_SIZE, (unsigned char*)sldns_buffer_begin(buf), (unsigned int)sldns_buffer_limit(buf), (unsigned char*)digest); res &= nettle_ecc_point_set(&pubkey, x, y); res &= nettle_ecdsa_verify (&pubkey, SHA384_DIGEST_SIZE, digest, &signature); mpz_clear(x); mpz_clear(y); nettle_ecc_point_clear(&pubkey); break; } default: return "unknown ECDSA algorithm"; } /* Clear and return */ nettle_dsa_signature_clear(&signature); if (!res) return "ECDSA signature verification failed"; else return NULL; } #endif #ifdef USE_ED25519 static char * _verify_nettle_ed25519(sldns_buffer* buf, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen) { int res = 0; if(sigblock_len != ED25519_SIGNATURE_SIZE) { return "wrong ED25519 signature length"; } if(keylen != ED25519_KEY_SIZE) { return "wrong ED25519 key length"; } res = ed25519_sha512_verify((uint8_t*)key, sldns_buffer_limit(buf), sldns_buffer_begin(buf), (uint8_t*)sigblock); if (!res) return "ED25519 signature verification failed"; else return NULL; } #endif /** * Check a canonical sig+rrset and signature against a dnskey * @param buf: buffer with data to verify, the first rrsig part and the * canonicalized rrset. * @param algo: DNSKEY algorithm. * @param sigblock: signature rdata field from RRSIG * @param sigblock_len: length of sigblock data. * @param key: public key data from DNSKEY RR. * @param keylen: length of keydata. * @param reason: bogus reason in more detail. * @return secure if verification succeeded, bogus on crypto failure, * unchecked on format errors and alloc failures. */ enum sec_status verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen, char** reason) { unsigned int digest_size = 0; if (sigblock_len == 0 || keylen == 0) { *reason = "null signature"; return sec_status_bogus; } #ifndef USE_DSA if((algo == LDNS_DSA || algo == LDNS_DSA_NSEC3) &&(fake_dsa||fake_sha1)) return sec_status_secure; #endif #ifndef USE_SHA1 if(fake_sha1 && (algo == LDNS_DSA || algo == LDNS_DSA_NSEC3 || algo == LDNS_RSASHA1 || algo == LDNS_RSASHA1_NSEC3)) return sec_status_secure; #endif switch(algo) { #if defined(USE_DSA) && defined(USE_SHA1) case LDNS_DSA: case LDNS_DSA_NSEC3: *reason = _verify_nettle_dsa(buf, sigblock, sigblock_len, key, keylen); if (*reason != NULL) return sec_status_bogus; else return sec_status_secure; #endif /* USE_DSA */ #ifdef USE_SHA1 case LDNS_RSASHA1: case LDNS_RSASHA1_NSEC3: digest_size = (digest_size ? digest_size : SHA1_DIGEST_SIZE); #endif /* double fallthrough annotation to please gcc parser */ /* fallthrough */ #ifdef USE_SHA2 /* fallthrough */ case LDNS_RSASHA256: digest_size = (digest_size ? digest_size : SHA256_DIGEST_SIZE); /* fallthrough */ case LDNS_RSASHA512: digest_size = (digest_size ? digest_size : SHA512_DIGEST_SIZE); #endif *reason = _verify_nettle_rsa(buf, digest_size, (char*)sigblock, sigblock_len, key, keylen); if (*reason != NULL) return sec_status_bogus; else return sec_status_secure; #ifdef USE_ECDSA case LDNS_ECDSAP256SHA256: digest_size = (digest_size ? digest_size : SHA256_DIGEST_SIZE); /* fallthrough */ case LDNS_ECDSAP384SHA384: digest_size = (digest_size ? digest_size : SHA384_DIGEST_SIZE); *reason = _verify_nettle_ecdsa(buf, digest_size, sigblock, sigblock_len, key, keylen); if (*reason != NULL) return sec_status_bogus; else return sec_status_secure; #endif #ifdef USE_ED25519 case LDNS_ED25519: *reason = _verify_nettle_ed25519(buf, sigblock, sigblock_len, key, keylen); if (*reason != NULL) return sec_status_bogus; else return sec_status_secure; #endif case LDNS_RSAMD5: case LDNS_ECC_GOST: default: *reason = "unable to verify signature, unknown algorithm"; return sec_status_bogus; } } #endif /* HAVE_SSL or HAVE_NSS or HAVE_NETTLE */ unbound-1.13.1/validator/val_kcache.c0000644000175000017500000001227014010434640017112 0ustar wouterwouter/* * validator/val_kcache.c - validator key shared cache with validated keys * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for dealing with the validator key cache. */ #include "config.h" #include "validator/val_kcache.h" #include "validator/val_kentry.h" #include "util/log.h" #include "util/config_file.h" #include "util/data/dname.h" #include "util/module.h" struct key_cache* key_cache_create(struct config_file* cfg) { struct key_cache* kcache = (struct key_cache*)calloc(1, sizeof(*kcache)); size_t numtables, start_size, maxmem; if(!kcache) { log_err("malloc failure"); return NULL; } numtables = cfg->key_cache_slabs; start_size = HASH_DEFAULT_STARTARRAY; maxmem = cfg->key_cache_size; kcache->slab = slabhash_create(numtables, start_size, maxmem, &key_entry_sizefunc, &key_entry_compfunc, &key_entry_delkeyfunc, &key_entry_deldatafunc, NULL); if(!kcache->slab) { log_err("malloc failure"); free(kcache); return NULL; } return kcache; } void key_cache_delete(struct key_cache* kcache) { if(!kcache) return; slabhash_delete(kcache->slab); free(kcache); } void key_cache_insert(struct key_cache* kcache, struct key_entry_key* kkey, struct module_qstate* qstate) { struct key_entry_key* k = key_entry_copy(kkey); if(!k) return; if(key_entry_isbad(k) && qstate->errinf && qstate->env->cfg->val_log_level >= 2) { /* on malloc failure there is simply no reason string */ key_entry_set_reason(k, errinf_to_str_bogus(qstate)); } key_entry_hash(k); slabhash_insert(kcache->slab, k->entry.hash, &k->entry, k->entry.data, NULL); } /** * Lookup exactly in the key cache. Returns pointer to locked entry. * Caller must unlock it after use. * @param kcache: the key cache. * @param name: for what name to look; uncompressed wireformat * @param namelen: length of the name. * @param key_class: class of the key. * @param wr: set true to get a writelock. * @return key entry, locked, or NULL if not found. No TTL checking is * performed. */ static struct key_entry_key* key_cache_search(struct key_cache* kcache, uint8_t* name, size_t namelen, uint16_t key_class, int wr) { struct lruhash_entry* e; struct key_entry_key lookfor; lookfor.entry.key = &lookfor; lookfor.name = name; lookfor.namelen = namelen; lookfor.key_class = key_class; key_entry_hash(&lookfor); e = slabhash_lookup(kcache->slab, lookfor.entry.hash, &lookfor, wr); if(!e) return NULL; return (struct key_entry_key*)e->key; } struct key_entry_key* key_cache_obtain(struct key_cache* kcache, uint8_t* name, size_t namelen, uint16_t key_class, struct regional* region, time_t now) { /* keep looking until we find a nonexpired entry */ while(1) { struct key_entry_key* k = key_cache_search(kcache, name, namelen, key_class, 0); if(k) { /* see if TTL is OK */ struct key_entry_data* d = (struct key_entry_data*) k->entry.data; if(now <= d->ttl) { /* copy and return it */ struct key_entry_key* retkey = key_entry_copy_toregion(k, region); lock_rw_unlock(&k->entry.lock); return retkey; } lock_rw_unlock(&k->entry.lock); } /* snip off first label to continue */ if(dname_is_root(name)) break; dname_remove_label(&name, &namelen); } return NULL; } size_t key_cache_get_mem(struct key_cache* kcache) { return sizeof(*kcache) + slabhash_get_mem(kcache->slab); } void key_cache_remove(struct key_cache* kcache, uint8_t* name, size_t namelen, uint16_t key_class) { struct key_entry_key lookfor; lookfor.entry.key = &lookfor; lookfor.name = name; lookfor.namelen = namelen; lookfor.key_class = key_class; key_entry_hash(&lookfor); slabhash_remove(kcache->slab, lookfor.entry.hash, &lookfor); } unbound-1.13.1/validator/val_secalgo.h0000644000175000017500000001001114010434640017305 0ustar wouterwouter/* * validator/val_secalgo.h - validator security algorithm functions. * * Copyright (c) 2012, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions take buffers with raw data and convert to library calls. */ #ifndef VALIDATOR_VAL_SECALGO_H #define VALIDATOR_VAL_SECALGO_H struct sldns_buffer; /** Return size of nsec3 hash algorithm, 0 if not supported */ size_t nsec3_hash_algo_size_supported(int id); /** * Hash a single hash call of an NSEC3 hash algorithm. * Iterations and salt are done by the caller. * @param algo: nsec3 hash algorithm. * @param buf: the buffer to digest * @param len: length of buffer to digest. * @param res: result stored here (must have sufficient space). * @return false on failure. */ int secalgo_nsec3_hash(int algo, unsigned char* buf, size_t len, unsigned char* res); /** * Calculate the sha256 hash for the data buffer into the result. * @param buf: buffer to digest. * @param len: length of the buffer to digest. * @param res: result is stored here (space 256/8 bytes). */ void secalgo_hash_sha256(unsigned char* buf, size_t len, unsigned char* res); /** * Return size of DS digest according to its hash algorithm. * @param algo: DS digest algo. * @return size in bytes of digest, or 0 if not supported. */ size_t ds_digest_size_supported(int algo); /** * @param algo: the DS digest algo * @param buf: the buffer to digest * @param len: length of buffer to digest. * @param res: result stored here (must have sufficient space). * @return false on failure. */ int secalgo_ds_digest(int algo, unsigned char* buf, size_t len, unsigned char* res); /** return true if DNSKEY algorithm id is supported */ int dnskey_algo_id_is_supported(int id); /** * Check a canonical sig+rrset and signature against a dnskey * @param buf: buffer with data to verify, the first rrsig part and the * canonicalized rrset. * @param algo: DNSKEY algorithm. * @param sigblock: signature rdata field from RRSIG * @param sigblock_len: length of sigblock data. * @param key: public key data from DNSKEY RR. * @param keylen: length of keydata. * @param reason: bogus reason in more detail. * @return secure if verification succeeded, bogus on crypto failure, * unchecked on format errors and alloc failures. */ enum sec_status verify_canonrrset(struct sldns_buffer* buf, int algo, unsigned char* sigblock, unsigned int sigblock_len, unsigned char* key, unsigned int keylen, char** reason); #endif /* VALIDATOR_VAL_SECALGO_H */ unbound-1.13.1/validator/val_nsec3.c0000644000175000017500000013146314010434640016715 0ustar wouterwouter/* * validator/val_nsec3.c - validator NSEC3 denial of existence functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with NSEC3 checking, the different NSEC3 proofs * for denial of existence, and proofs for presence of types. */ #include "config.h" #include #include "validator/val_nsec3.h" #include "validator/val_secalgo.h" #include "validator/validator.h" #include "validator/val_kentry.h" #include "services/cache/rrset.h" #include "util/regional.h" #include "util/rbtree.h" #include "util/module.h" #include "util/net_help.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "util/data/msgreply.h" /* we include nsec.h for the bitmap_has_type function */ #include "validator/val_nsec.h" #include "sldns/sbuffer.h" /** * This function we get from ldns-compat or from base system * it returns the number of data bytes stored at the target, or <0 on error. */ int sldns_b32_ntop_extended_hex(uint8_t const *src, size_t srclength, char *target, size_t targsize); /** * This function we get from ldns-compat or from base system * it returns the number of data bytes stored at the target, or <0 on error. */ int sldns_b32_pton_extended_hex(char const *src, size_t hashed_owner_str_len, uint8_t *target, size_t targsize); /** * Closest encloser (ce) proof results * Contains the ce and the next-closer (nc) proof. */ struct ce_response { /** the closest encloser name */ uint8_t* ce; /** length of ce */ size_t ce_len; /** NSEC3 record that proved ce. rrset */ struct ub_packed_rrset_key* ce_rrset; /** NSEC3 record that proved ce. rr number */ int ce_rr; /** NSEC3 record that proved nc. rrset */ struct ub_packed_rrset_key* nc_rrset; /** NSEC3 record that proved nc. rr*/ int nc_rr; }; /** * Filter conditions for NSEC3 proof * Used to iterate over the applicable NSEC3 RRs. */ struct nsec3_filter { /** Zone name, only NSEC3 records for this zone are considered */ uint8_t* zone; /** length of the zonename */ size_t zone_len; /** the list of NSEC3s to filter; array */ struct ub_packed_rrset_key** list; /** number of rrsets in list */ size_t num; /** class of records for the NSEC3, only this class applies */ uint16_t fclass; }; /** return number of rrs in an rrset */ static size_t rrset_get_count(struct ub_packed_rrset_key* rrset) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; if(!d) return 0; return d->count; } /** return if nsec3 RR has unknown flags */ static int nsec3_unknown_flags(struct ub_packed_rrset_key* rrset, int r) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); if(d->rr_len[r] < 2+2) return 0; /* malformed */ return (int)(d->rr_data[r][2+1] & NSEC3_UNKNOWN_FLAGS); } int nsec3_has_optout(struct ub_packed_rrset_key* rrset, int r) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); if(d->rr_len[r] < 2+2) return 0; /* malformed */ return (int)(d->rr_data[r][2+1] & NSEC3_OPTOUT); } /** return nsec3 RR algorithm */ static int nsec3_get_algo(struct ub_packed_rrset_key* rrset, int r) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); if(d->rr_len[r] < 2+1) return 0; /* malformed */ return (int)(d->rr_data[r][2+0]); } /** return if nsec3 RR has known algorithm */ static int nsec3_known_algo(struct ub_packed_rrset_key* rrset, int r) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); if(d->rr_len[r] < 2+1) return 0; /* malformed */ switch(d->rr_data[r][2+0]) { case NSEC3_HASH_SHA1: return 1; } return 0; } /** return nsec3 RR iteration count */ static size_t nsec3_get_iter(struct ub_packed_rrset_key* rrset, int r) { uint16_t i; struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); if(d->rr_len[r] < 2+4) return 0; /* malformed */ memmove(&i, d->rr_data[r]+2+2, sizeof(i)); i = ntohs(i); return (size_t)i; } /** return nsec3 RR salt */ static int nsec3_get_salt(struct ub_packed_rrset_key* rrset, int r, uint8_t** salt, size_t* saltlen) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); if(d->rr_len[r] < 2+5) { *salt = 0; *saltlen = 0; return 0; /* malformed */ } *saltlen = (size_t)d->rr_data[r][2+4]; if(d->rr_len[r] < 2+5+(size_t)*saltlen) { *salt = 0; *saltlen = 0; return 0; /* malformed */ } *salt = d->rr_data[r]+2+5; return 1; } int nsec3_get_params(struct ub_packed_rrset_key* rrset, int r, int* algo, size_t* iter, uint8_t** salt, size_t* saltlen) { if(!nsec3_known_algo(rrset, r) || nsec3_unknown_flags(rrset, r)) return 0; if(!nsec3_get_salt(rrset, r, salt, saltlen)) return 0; *algo = nsec3_get_algo(rrset, r); *iter = nsec3_get_iter(rrset, r); return 1; } int nsec3_get_nextowner(struct ub_packed_rrset_key* rrset, int r, uint8_t** next, size_t* nextlen) { size_t saltlen; struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); if(d->rr_len[r] < 2+5) { *next = 0; *nextlen = 0; return 0; /* malformed */ } saltlen = (size_t)d->rr_data[r][2+4]; if(d->rr_len[r] < 2+5+saltlen+1) { *next = 0; *nextlen = 0; return 0; /* malformed */ } *nextlen = (size_t)d->rr_data[r][2+5+saltlen]; if(d->rr_len[r] < 2+5+saltlen+1+*nextlen) { *next = 0; *nextlen = 0; return 0; /* malformed */ } *next = d->rr_data[r]+2+5+saltlen+1; return 1; } size_t nsec3_hash_to_b32(uint8_t* hash, size_t hashlen, uint8_t* zone, size_t zonelen, uint8_t* buf, size_t max) { /* write b32 of name, leave one for length */ int ret; if(max < hashlen*2+1) /* quick approx of b32, as if hexb16 */ return 0; ret = sldns_b32_ntop_extended_hex(hash, hashlen, (char*)buf+1, max-1); if(ret < 1) return 0; buf[0] = (uint8_t)ret; /* length of b32 label */ ret++; if(max - ret < zonelen) return 0; memmove(buf+ret, zone, zonelen); return zonelen+(size_t)ret; } size_t nsec3_get_nextowner_b32(struct ub_packed_rrset_key* rrset, int r, uint8_t* buf, size_t max) { uint8_t* nm, *zone; size_t nmlen, zonelen; if(!nsec3_get_nextowner(rrset, r, &nm, &nmlen)) return 0; /* append zone name; the owner name must be .zone */ zone = rrset->rk.dname; zonelen = rrset->rk.dname_len; dname_remove_label(&zone, &zonelen); return nsec3_hash_to_b32(nm, nmlen, zone, zonelen, buf, max); } int nsec3_has_type(struct ub_packed_rrset_key* rrset, int r, uint16_t type) { uint8_t* bitmap; size_t bitlen, skiplen; struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; log_assert(d && r < (int)d->count); skiplen = 2+4; /* skip salt */ if(d->rr_len[r] < skiplen+1) return 0; /* malformed, too short */ skiplen += 1+(size_t)d->rr_data[r][skiplen]; /* skip next hashed owner */ if(d->rr_len[r] < skiplen+1) return 0; /* malformed, too short */ skiplen += 1+(size_t)d->rr_data[r][skiplen]; if(d->rr_len[r] < skiplen) return 0; /* malformed, too short */ bitlen = d->rr_len[r] - skiplen; bitmap = d->rr_data[r]+skiplen; return nsecbitmap_has_type_rdata(bitmap, bitlen, type); } /** * Iterate through NSEC3 list, per RR * This routine gives the next RR in the list (or sets rrset null). * Usage: * * size_t rrsetnum; * int rrnum; * struct ub_packed_rrset_key* rrset; * for(rrset=filter_first(filter, &rrsetnum, &rrnum); rrset; * rrset=filter_next(filter, &rrsetnum, &rrnum)) * do_stuff; * * Also filters out * o unknown flag NSEC3s * o unknown algorithm NSEC3s. * @param filter: nsec3 filter structure. * @param rrsetnum: in/out rrset number to look at. * @param rrnum: in/out rr number in rrset to look at. * @returns ptr to the next rrset (or NULL at end). */ static struct ub_packed_rrset_key* filter_next(struct nsec3_filter* filter, size_t* rrsetnum, int* rrnum) { size_t i; int r; uint8_t* nm; size_t nmlen; if(!filter->zone) /* empty list */ return NULL; for(i=*rrsetnum; inum; i++) { /* see if RRset qualifies */ if(ntohs(filter->list[i]->rk.type) != LDNS_RR_TYPE_NSEC3 || ntohs(filter->list[i]->rk.rrset_class) != filter->fclass) continue; /* check RRset zone */ nm = filter->list[i]->rk.dname; nmlen = filter->list[i]->rk.dname_len; dname_remove_label(&nm, &nmlen); if(query_dname_compare(nm, filter->zone) != 0) continue; if(i == *rrsetnum) r = (*rrnum) + 1; /* continue at next RR */ else r = 0; /* new RRset start at first RR */ for(; r < (int)rrset_get_count(filter->list[i]); r++) { /* skip unknown flags, algo */ if(nsec3_unknown_flags(filter->list[i], r) || !nsec3_known_algo(filter->list[i], r)) continue; /* this one is a good target */ *rrsetnum = i; *rrnum = r; return filter->list[i]; } } return NULL; } /** * Start iterating over NSEC3 records. * @param filter: the filter structure, must have been filter_init-ed. * @param rrsetnum: can be undefined on call, initialised. * @param rrnum: can be undefined on call, initialised. * @return first rrset of an NSEC3, together with rrnum this points to * the first RR to examine. Is NULL on empty list. */ static struct ub_packed_rrset_key* filter_first(struct nsec3_filter* filter, size_t* rrsetnum, int* rrnum) { *rrsetnum = 0; *rrnum = -1; return filter_next(filter, rrsetnum, rrnum); } /** see if at least one RR is known (flags, algo) */ static int nsec3_rrset_has_known(struct ub_packed_rrset_key* s) { int r; for(r=0; r < (int)rrset_get_count(s); r++) { if(!nsec3_unknown_flags(s, r) && nsec3_known_algo(s, r)) return 1; } return 0; } /** * Initialize the filter structure. * Finds the zone by looking at available NSEC3 records and best match. * (skips the unknown flag and unknown algo NSEC3s). * * @param filter: nsec3 filter structure. * @param list: list of rrsets, an array of them. * @param num: number of rrsets in list. * @param qinfo: * query name to match a zone for. * query type (if DS a higher zone must be chosen) * qclass, to filter NSEC3s with. */ static void filter_init(struct nsec3_filter* filter, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo) { size_t i; uint8_t* nm; size_t nmlen; filter->zone = NULL; filter->zone_len = 0; filter->list = list; filter->num = num; filter->fclass = qinfo->qclass; for(i=0; irk.type) != LDNS_RR_TYPE_NSEC3 || ntohs(list[i]->rk.rrset_class) != qinfo->qclass) continue; /* skip unknown flags, algo */ if(!nsec3_rrset_has_known(list[i])) continue; /* since NSEC3s are base32.zonename, we can find the zone * name by stripping off the first label of the record */ nm = list[i]->rk.dname; nmlen = list[i]->rk.dname_len; dname_remove_label(&nm, &nmlen); /* if we find a domain that can prove about the qname, * and if this domain is closer to the qname */ if(dname_subdomain_c(qinfo->qname, nm) && (!filter->zone || dname_subdomain_c(nm, filter->zone))) { /* for a type DS do not accept a zone equal to qname*/ if(qinfo->qtype == LDNS_RR_TYPE_DS && query_dname_compare(qinfo->qname, nm) == 0 && !dname_is_root(qinfo->qname)) continue; filter->zone = nm; filter->zone_len = nmlen; } } } /** * Find max iteration count using config settings and key size * @param ve: validator environment with iteration count config settings. * @param bits: key size * @return max iteration count */ static size_t get_max_iter(struct val_env* ve, size_t bits) { int i; log_assert(ve->nsec3_keyiter_count > 0); /* round up to nearest config keysize, linear search, keep it small */ for(i=0; insec3_keyiter_count; i++) { if(bits <= ve->nsec3_keysize[i]) return ve->nsec3_maxiter[i]; } /* else, use value for biggest key */ return ve->nsec3_maxiter[ve->nsec3_keyiter_count-1]; } /** * Determine if any of the NSEC3 rrs iteration count is too high, from key. * @param ve: validator environment with iteration count config settings. * @param filter: what NSEC3s to loop over. * @param kkey: key entry used for verification; used for iteration counts. * @return 1 if some nsec3s are above the max iteration count. */ static int nsec3_iteration_count_high(struct val_env* ve, struct nsec3_filter* filter, struct key_entry_key* kkey) { size_t rrsetnum; int rrnum; struct ub_packed_rrset_key* rrset; /* first determine the max number of iterations */ size_t bits = key_entry_keysize(kkey); size_t max_iter = get_max_iter(ve, bits); verbose(VERB_ALGO, "nsec3: keysize %d bits, max iterations %d", (int)bits, (int)max_iter); for(rrset=filter_first(filter, &rrsetnum, &rrnum); rrset; rrset=filter_next(filter, &rrsetnum, &rrnum)) { if(nsec3_get_iter(rrset, rrnum) > max_iter) return 1; } return 0; } /* nsec3_cache_compare for rbtree */ int nsec3_hash_cmp(const void* c1, const void* c2) { struct nsec3_cached_hash* h1 = (struct nsec3_cached_hash*)c1; struct nsec3_cached_hash* h2 = (struct nsec3_cached_hash*)c2; uint8_t* s1, *s2; size_t s1len, s2len; int c = query_dname_compare(h1->dname, h2->dname); if(c != 0) return c; /* compare parameters */ /* if both malformed, its equal, robustness */ if(nsec3_get_algo(h1->nsec3, h1->rr) != nsec3_get_algo(h2->nsec3, h2->rr)) { if(nsec3_get_algo(h1->nsec3, h1->rr) < nsec3_get_algo(h2->nsec3, h2->rr)) return -1; return 1; } if(nsec3_get_iter(h1->nsec3, h1->rr) != nsec3_get_iter(h2->nsec3, h2->rr)) { if(nsec3_get_iter(h1->nsec3, h1->rr) < nsec3_get_iter(h2->nsec3, h2->rr)) return -1; return 1; } (void)nsec3_get_salt(h1->nsec3, h1->rr, &s1, &s1len); (void)nsec3_get_salt(h2->nsec3, h2->rr, &s2, &s2len); if(s1len == 0 && s2len == 0) return 0; if(!s1) return -1; if(!s2) return 1; if(s1len != s2len) { if(s1len < s2len) return -1; return 1; } return memcmp(s1, s2, s1len); } size_t nsec3_get_hashed(sldns_buffer* buf, uint8_t* nm, size_t nmlen, int algo, size_t iter, uint8_t* salt, size_t saltlen, uint8_t* res, size_t max) { size_t i, hash_len; /* prepare buffer for first iteration */ sldns_buffer_clear(buf); sldns_buffer_write(buf, nm, nmlen); query_dname_tolower(sldns_buffer_begin(buf)); sldns_buffer_write(buf, salt, saltlen); sldns_buffer_flip(buf); hash_len = nsec3_hash_algo_size_supported(algo); if(hash_len == 0) { log_err("nsec3 hash of unknown algo %d", algo); return 0; } if(hash_len > max) return 0; if(!secalgo_nsec3_hash(algo, (unsigned char*)sldns_buffer_begin(buf), sldns_buffer_limit(buf), (unsigned char*)res)) return 0; for(i=0; insec3, c->rr); size_t iter = nsec3_get_iter(c->nsec3, c->rr); uint8_t* salt; size_t saltlen, i; if(!nsec3_get_salt(c->nsec3, c->rr, &salt, &saltlen)) return -1; /* prepare buffer for first iteration */ sldns_buffer_clear(buf); sldns_buffer_write(buf, c->dname, c->dname_len); query_dname_tolower(sldns_buffer_begin(buf)); sldns_buffer_write(buf, salt, saltlen); sldns_buffer_flip(buf); c->hash_len = nsec3_hash_algo_size_supported(algo); if(c->hash_len == 0) { log_err("nsec3 hash of unknown algo %d", algo); return -1; } c->hash = (uint8_t*)regional_alloc(region, c->hash_len); if(!c->hash) return 0; (void)secalgo_nsec3_hash(algo, (unsigned char*)sldns_buffer_begin(buf), sldns_buffer_limit(buf), (unsigned char*)c->hash); for(i=0; ihash, c->hash_len); sldns_buffer_write(buf, salt, saltlen); sldns_buffer_flip(buf); (void)secalgo_nsec3_hash(algo, (unsigned char*)sldns_buffer_begin(buf), sldns_buffer_limit(buf), (unsigned char*)c->hash); } return 1; } /** perform b32 encoding of hash */ static int nsec3_calc_b32(struct regional* region, sldns_buffer* buf, struct nsec3_cached_hash* c) { int r; sldns_buffer_clear(buf); r = sldns_b32_ntop_extended_hex(c->hash, c->hash_len, (char*)sldns_buffer_begin(buf), sldns_buffer_limit(buf)); if(r < 1) { log_err("b32_ntop_extended_hex: error in encoding: %d", r); return 0; } c->b32_len = (size_t)r; c->b32 = regional_alloc_init(region, sldns_buffer_begin(buf), c->b32_len); if(!c->b32) return 0; return 1; } int nsec3_hash_name(rbtree_type* table, struct regional* region, sldns_buffer* buf, struct ub_packed_rrset_key* nsec3, int rr, uint8_t* dname, size_t dname_len, struct nsec3_cached_hash** hash) { struct nsec3_cached_hash* c; struct nsec3_cached_hash looki; #ifdef UNBOUND_DEBUG rbnode_type* n; #endif int r; looki.node.key = &looki; looki.nsec3 = nsec3; looki.rr = rr; looki.dname = dname; looki.dname_len = dname_len; /* lookup first in cache */ c = (struct nsec3_cached_hash*)rbtree_search(table, &looki); if(c) { *hash = c; return 1; } /* create a new entry */ c = (struct nsec3_cached_hash*)regional_alloc(region, sizeof(*c)); if(!c) return 0; c->node.key = c; c->nsec3 = nsec3; c->rr = rr; c->dname = dname; c->dname_len = dname_len; r = nsec3_calc_hash(region, buf, c); if(r != 1) return r; r = nsec3_calc_b32(region, buf, c); if(r != 1) return r; #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(table, &c->node); log_assert(n); /* cannot be duplicate, just did lookup */ *hash = c; return 1; } /** * compare a label lowercased */ static int label_compare_lower(uint8_t* lab1, uint8_t* lab2, size_t lablen) { size_t i; for(i=0; irk.dname; /* compare, does hash of name based on params in this NSEC3 * match the owner name of this NSEC3? * name must be: base32 . zone name * so; first label must not be root label (not zero length), * and match the b32 encoded hash length, * and the label content match the b32 encoded hash * and the rest must be the zone name. */ if(hash->b32_len != 0 && (size_t)nm[0] == hash->b32_len && label_compare_lower(nm+1, hash->b32, hash->b32_len) == 0 && query_dname_compare(nm+(size_t)nm[0]+1, flt->zone) == 0) { return 1; } return 0; } /** * Find matching NSEC3 * Find the NSEC3Record that matches a hash of a name. * @param env: module environment with temporary region and buffer. * @param flt: the NSEC3 RR filter, contains zone name and RRs. * @param ct: cached hashes table. * @param nm: name to look for. * @param nmlen: length of name. * @param rrset: nsec3 that matches is returned here. * @param rr: rr number in nsec3 rrset that matches. * @return true if a matching NSEC3 is found, false if not. */ static int find_matching_nsec3(struct module_env* env, struct nsec3_filter* flt, rbtree_type* ct, uint8_t* nm, size_t nmlen, struct ub_packed_rrset_key** rrset, int* rr) { size_t i_rs; int i_rr; struct ub_packed_rrset_key* s; struct nsec3_cached_hash* hash = NULL; int r; /* this loop skips other-zone and unknown NSEC3s, also non-NSEC3 RRs */ for(s=filter_first(flt, &i_rs, &i_rr); s; s=filter_next(flt, &i_rs, &i_rr)) { /* get name hashed for this NSEC3 RR */ r = nsec3_hash_name(ct, env->scratch, env->scratch_buffer, s, i_rr, nm, nmlen, &hash); if(r == 0) { log_err("nsec3: malloc failure"); break; /* alloc failure */ } else if(r != 1) continue; /* malformed NSEC3 */ else if(nsec3_hash_matches_owner(flt, hash, s)) { *rrset = s; /* rrset with this name */ *rr = i_rr; /* matches hash with these parameters */ return 1; } } *rrset = NULL; *rr = 0; return 0; } int nsec3_covers(uint8_t* zone, struct nsec3_cached_hash* hash, struct ub_packed_rrset_key* rrset, int rr, sldns_buffer* buf) { uint8_t* next, *owner; size_t nextlen; int len; if(!nsec3_get_nextowner(rrset, rr, &next, &nextlen)) return 0; /* malformed RR proves nothing */ /* check the owner name is a hashed value . apex * base32 encoded values must have equal length. * hash_value and next hash value must have equal length. */ if(nextlen != hash->hash_len || hash->hash_len==0||hash->b32_len==0|| (size_t)*rrset->rk.dname != hash->b32_len || query_dname_compare(rrset->rk.dname+1+ (size_t)*rrset->rk.dname, zone) != 0) return 0; /* bad lengths or owner name */ /* This is the "normal case: owner < next and owner < hash < next */ if(label_compare_lower(rrset->rk.dname+1, hash->b32, hash->b32_len) < 0 && memcmp(hash->hash, next, nextlen) < 0) return 1; /* convert owner name from text to binary */ sldns_buffer_clear(buf); owner = sldns_buffer_begin(buf); len = sldns_b32_pton_extended_hex((char*)rrset->rk.dname+1, hash->b32_len, owner, sldns_buffer_limit(buf)); if(len<1) return 0; /* bad owner name in some way */ if((size_t)len != hash->hash_len || (size_t)len != nextlen) return 0; /* wrong length */ /* this is the end of zone case: next <= owner && * (hash > owner || hash < next) * this also covers the only-apex case of next==owner. */ if(memcmp(next, owner, nextlen) <= 0 && ( memcmp(hash->hash, owner, nextlen) > 0 || memcmp(hash->hash, next, nextlen) < 0)) { return 1; } return 0; } /** * findCoveringNSEC3 * Given a name, find a covering NSEC3 from among a list of NSEC3s. * * @param env: module environment with temporary region and buffer. * @param flt: the NSEC3 RR filter, contains zone name and RRs. * @param ct: cached hashes table. * @param nm: name to check if covered. * @param nmlen: length of name. * @param rrset: covering NSEC3 rrset is returned here. * @param rr: rr of cover is returned here. * @return true if a covering NSEC3 is found, false if not. */ static int find_covering_nsec3(struct module_env* env, struct nsec3_filter* flt, rbtree_type* ct, uint8_t* nm, size_t nmlen, struct ub_packed_rrset_key** rrset, int* rr) { size_t i_rs; int i_rr; struct ub_packed_rrset_key* s; struct nsec3_cached_hash* hash = NULL; int r; /* this loop skips other-zone and unknown NSEC3s, also non-NSEC3 RRs */ for(s=filter_first(flt, &i_rs, &i_rr); s; s=filter_next(flt, &i_rs, &i_rr)) { /* get name hashed for this NSEC3 RR */ r = nsec3_hash_name(ct, env->scratch, env->scratch_buffer, s, i_rr, nm, nmlen, &hash); if(r == 0) { log_err("nsec3: malloc failure"); break; /* alloc failure */ } else if(r != 1) continue; /* malformed NSEC3 */ else if(nsec3_covers(flt->zone, hash, s, i_rr, env->scratch_buffer)) { *rrset = s; /* rrset with this name */ *rr = i_rr; /* covers hash with these parameters */ return 1; } } *rrset = NULL; *rr = 0; return 0; } /** * findClosestEncloser * Given a name and a list of NSEC3s, find the candidate closest encloser. * This will be the first ancestor of 'name' (including itself) to have a * matching NSEC3 RR. * @param env: module environment with temporary region and buffer. * @param flt: the NSEC3 RR filter, contains zone name and RRs. * @param ct: cached hashes table. * @param qinfo: query that is verified for. * @param ce: closest encloser information is returned in here. * @return true if a closest encloser candidate is found, false if not. */ static int nsec3_find_closest_encloser(struct module_env* env, struct nsec3_filter* flt, rbtree_type* ct, struct query_info* qinfo, struct ce_response* ce) { uint8_t* nm = qinfo->qname; size_t nmlen = qinfo->qname_len; /* This scans from longest name to shortest, so the first match * we find is the only viable candidate. */ /* (David:) FIXME: modify so that the NSEC3 matching the zone apex need * not be present. (Mark Andrews idea). * (Wouter:) But make sure you check for DNAME bit in zone apex, * if the NSEC3 you find is the only NSEC3 in the zone, then this * may be the case. */ while(dname_subdomain_c(nm, flt->zone)) { if(find_matching_nsec3(env, flt, ct, nm, nmlen, &ce->ce_rrset, &ce->ce_rr)) { ce->ce = nm; ce->ce_len = nmlen; return 1; } dname_remove_label(&nm, &nmlen); } return 0; } /** * Given a qname and its proven closest encloser, calculate the "next * closest" name. Basically, this is the name that is one label longer than * the closest encloser that is still a subdomain of qname. * * @param qname: query name. * @param qnamelen: length of qname. * @param ce: closest encloser * @param nm: result name. * @param nmlen: length of nm. */ static void next_closer(uint8_t* qname, size_t qnamelen, uint8_t* ce, uint8_t** nm, size_t* nmlen) { int strip = dname_count_labels(qname) - dname_count_labels(ce) -1; *nm = qname; *nmlen = qnamelen; if(strip>0) dname_remove_labels(nm, nmlen, strip); } /** * proveClosestEncloser * Given a List of nsec3 RRs, find and prove the closest encloser to qname. * @param env: module environment with temporary region and buffer. * @param flt: the NSEC3 RR filter, contains zone name and RRs. * @param ct: cached hashes table. * @param qinfo: query that is verified for. * @param prove_does_not_exist: If true, then if the closest encloser * turns out to be qname, then null is returned. * If set true, and the return value is true, then you can be * certain that the ce.nc_rrset and ce.nc_rr are set properly. * @param ce: closest encloser information is returned in here. * @return bogus if no closest encloser could be proven. * secure if a closest encloser could be proven, ce is set. * insecure if the closest-encloser candidate turns out to prove * that an insecure delegation exists above the qname. */ static enum sec_status nsec3_prove_closest_encloser(struct module_env* env, struct nsec3_filter* flt, rbtree_type* ct, struct query_info* qinfo, int prove_does_not_exist, struct ce_response* ce) { uint8_t* nc; size_t nc_len; /* robust: clean out ce, in case it gets abused later */ memset(ce, 0, sizeof(*ce)); if(!nsec3_find_closest_encloser(env, flt, ct, qinfo, ce)) { verbose(VERB_ALGO, "nsec3 proveClosestEncloser: could " "not find a candidate for the closest encloser."); return sec_status_bogus; } log_nametypeclass(VERB_ALGO, "ce candidate", ce->ce, 0, 0); if(query_dname_compare(ce->ce, qinfo->qname) == 0) { if(prove_does_not_exist) { verbose(VERB_ALGO, "nsec3 proveClosestEncloser: " "proved that qname existed, bad"); return sec_status_bogus; } /* otherwise, we need to nothing else to prove that qname * is its own closest encloser. */ return sec_status_secure; } /* If the closest encloser is actually a delegation, then the * response should have been a referral. If it is a DNAME, then * it should have been a DNAME response. */ if(nsec3_has_type(ce->ce_rrset, ce->ce_rr, LDNS_RR_TYPE_NS) && !nsec3_has_type(ce->ce_rrset, ce->ce_rr, LDNS_RR_TYPE_SOA)) { if(!nsec3_has_type(ce->ce_rrset, ce->ce_rr, LDNS_RR_TYPE_DS)) { verbose(VERB_ALGO, "nsec3 proveClosestEncloser: " "closest encloser is insecure delegation"); return sec_status_insecure; } verbose(VERB_ALGO, "nsec3 proveClosestEncloser: closest " "encloser was a delegation, bad"); return sec_status_bogus; } if(nsec3_has_type(ce->ce_rrset, ce->ce_rr, LDNS_RR_TYPE_DNAME)) { verbose(VERB_ALGO, "nsec3 proveClosestEncloser: closest " "encloser was a DNAME, bad"); return sec_status_bogus; } /* Otherwise, we need to show that the next closer name is covered. */ next_closer(qinfo->qname, qinfo->qname_len, ce->ce, &nc, &nc_len); if(!find_covering_nsec3(env, flt, ct, nc, nc_len, &ce->nc_rrset, &ce->nc_rr)) { verbose(VERB_ALGO, "nsec3: Could not find proof that the " "candidate encloser was the closest encloser"); return sec_status_bogus; } return sec_status_secure; } /** allocate a wildcard for the closest encloser */ static uint8_t* nsec3_ce_wildcard(struct regional* region, uint8_t* ce, size_t celen, size_t* len) { uint8_t* nm; if(celen > LDNS_MAX_DOMAINLEN - 2) return 0; /* too long */ nm = (uint8_t*)regional_alloc(region, celen+2); if(!nm) { log_err("nsec3 wildcard: out of memory"); return 0; /* alloc failure */ } nm[0] = 1; nm[1] = (uint8_t)'*'; /* wildcard label */ memmove(nm+2, ce, celen); *len = celen+2; return nm; } /** Do the name error proof */ static enum sec_status nsec3_do_prove_nameerror(struct module_env* env, struct nsec3_filter* flt, rbtree_type* ct, struct query_info* qinfo) { struct ce_response ce; uint8_t* wc; size_t wclen; struct ub_packed_rrset_key* wc_rrset; int wc_rr; enum sec_status sec; /* First locate and prove the closest encloser to qname. We will * use the variant that fails if the closest encloser turns out * to be qname. */ sec = nsec3_prove_closest_encloser(env, flt, ct, qinfo, 1, &ce); if(sec != sec_status_secure) { if(sec == sec_status_bogus) verbose(VERB_ALGO, "nsec3 nameerror proof: failed " "to prove a closest encloser"); else verbose(VERB_ALGO, "nsec3 nameerror proof: closest " "nsec3 is an insecure delegation"); return sec; } log_nametypeclass(VERB_ALGO, "nsec3 nameerror: proven ce=", ce.ce,0,0); /* At this point, we know that qname does not exist. Now we need * to prove that the wildcard does not exist. */ log_assert(ce.ce); wc = nsec3_ce_wildcard(env->scratch, ce.ce, ce.ce_len, &wclen); if(!wc || !find_covering_nsec3(env, flt, ct, wc, wclen, &wc_rrset, &wc_rr)) { verbose(VERB_ALGO, "nsec3 nameerror proof: could not prove " "that the applicable wildcard did not exist."); return sec_status_bogus; } if(ce.nc_rrset && nsec3_has_optout(ce.nc_rrset, ce.nc_rr)) { verbose(VERB_ALGO, "nsec3 nameerror proof: nc has optout"); return sec_status_insecure; } return sec_status_secure; } enum sec_status nsec3_prove_nameerror(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey) { rbtree_type ct; struct nsec3_filter flt; if(!list || num == 0 || !kkey || !key_entry_isgood(kkey)) return sec_status_bogus; /* no valid NSEC3s, bogus */ rbtree_init(&ct, &nsec3_hash_cmp); /* init names-to-hash cache */ filter_init(&flt, list, num, qinfo); /* init RR iterator */ if(!flt.zone) return sec_status_bogus; /* no RRs */ if(nsec3_iteration_count_high(ve, &flt, kkey)) return sec_status_insecure; /* iteration count too high */ log_nametypeclass(VERB_ALGO, "start nsec3 nameerror proof, zone", flt.zone, 0, 0); return nsec3_do_prove_nameerror(env, &flt, &ct, qinfo); } /* * No code to handle qtype=NSEC3 specially. * This existed in early drafts, but was later (-05) removed. */ /** Do the nodata proof */ static enum sec_status nsec3_do_prove_nodata(struct module_env* env, struct nsec3_filter* flt, rbtree_type* ct, struct query_info* qinfo) { struct ce_response ce; uint8_t* wc; size_t wclen; struct ub_packed_rrset_key* rrset; int rr; enum sec_status sec; if(find_matching_nsec3(env, flt, ct, qinfo->qname, qinfo->qname_len, &rrset, &rr)) { /* cases 1 and 2 */ if(nsec3_has_type(rrset, rr, qinfo->qtype)) { verbose(VERB_ALGO, "proveNodata: Matching NSEC3 " "proved that type existed, bogus"); return sec_status_bogus; } else if(nsec3_has_type(rrset, rr, LDNS_RR_TYPE_CNAME)) { verbose(VERB_ALGO, "proveNodata: Matching NSEC3 " "proved that a CNAME existed, bogus"); return sec_status_bogus; } /* * If type DS: filter_init zone find already found a parent * zone, so this nsec3 is from a parent zone. * o can be not a delegation (unusual query for normal name, * no DS anyway, but we can verify that). * o can be a delegation (which is the usual DS check). * o may not have the SOA bit set (only the top of the * zone, which must have been above the name, has that). * Except for the root; which is checked by itself. * * If not type DS: matching nsec3 must not be a delegation. */ if(qinfo->qtype == LDNS_RR_TYPE_DS && qinfo->qname_len != 1 && nsec3_has_type(rrset, rr, LDNS_RR_TYPE_SOA) && !dname_is_root(qinfo->qname)) { verbose(VERB_ALGO, "proveNodata: apex NSEC3 " "abused for no DS proof, bogus"); return sec_status_bogus; } else if(qinfo->qtype != LDNS_RR_TYPE_DS && nsec3_has_type(rrset, rr, LDNS_RR_TYPE_NS) && !nsec3_has_type(rrset, rr, LDNS_RR_TYPE_SOA)) { if(!nsec3_has_type(rrset, rr, LDNS_RR_TYPE_DS)) { verbose(VERB_ALGO, "proveNodata: matching " "NSEC3 is insecure delegation"); return sec_status_insecure; } verbose(VERB_ALGO, "proveNodata: matching " "NSEC3 is a delegation, bogus"); return sec_status_bogus; } return sec_status_secure; } /* For cases 3 - 5, we need the proven closest encloser, and it * can't match qname. Although, at this point, we know that it * won't since we just checked that. */ sec = nsec3_prove_closest_encloser(env, flt, ct, qinfo, 1, &ce); if(sec == sec_status_bogus) { verbose(VERB_ALGO, "proveNodata: did not match qname, " "nor found a proven closest encloser."); return sec_status_bogus; } else if(sec==sec_status_insecure && qinfo->qtype!=LDNS_RR_TYPE_DS){ verbose(VERB_ALGO, "proveNodata: closest nsec3 is insecure " "delegation."); return sec_status_insecure; } /* Case 3: removed */ /* Case 4: */ log_assert(ce.ce); wc = nsec3_ce_wildcard(env->scratch, ce.ce, ce.ce_len, &wclen); if(wc && find_matching_nsec3(env, flt, ct, wc, wclen, &rrset, &rr)) { /* found wildcard */ if(nsec3_has_type(rrset, rr, qinfo->qtype)) { verbose(VERB_ALGO, "nsec3 nodata proof: matching " "wildcard had qtype, bogus"); return sec_status_bogus; } else if(nsec3_has_type(rrset, rr, LDNS_RR_TYPE_CNAME)) { verbose(VERB_ALGO, "nsec3 nodata proof: matching " "wildcard had a CNAME, bogus"); return sec_status_bogus; } if(qinfo->qtype == LDNS_RR_TYPE_DS && qinfo->qname_len != 1 && nsec3_has_type(rrset, rr, LDNS_RR_TYPE_SOA)) { verbose(VERB_ALGO, "nsec3 nodata proof: matching " "wildcard for no DS proof has a SOA, bogus"); return sec_status_bogus; } else if(qinfo->qtype != LDNS_RR_TYPE_DS && nsec3_has_type(rrset, rr, LDNS_RR_TYPE_NS) && !nsec3_has_type(rrset, rr, LDNS_RR_TYPE_SOA)) { verbose(VERB_ALGO, "nsec3 nodata proof: matching " "wildcard is a delegation, bogus"); return sec_status_bogus; } /* everything is peachy keen, except for optout spans */ if(ce.nc_rrset && nsec3_has_optout(ce.nc_rrset, ce.nc_rr)) { verbose(VERB_ALGO, "nsec3 nodata proof: matching " "wildcard is in optout range, insecure"); return sec_status_insecure; } return sec_status_secure; } /* Case 5: */ /* Due to forwarders, cnames, and other collating effects, we * can see the ordinary unsigned data from a zone beneath an * insecure delegation under an optout here */ if(!ce.nc_rrset) { verbose(VERB_ALGO, "nsec3 nodata proof: no next closer nsec3"); return sec_status_bogus; } /* We need to make sure that the covering NSEC3 is opt-out. */ log_assert(ce.nc_rrset); if(!nsec3_has_optout(ce.nc_rrset, ce.nc_rr)) { if(qinfo->qtype == LDNS_RR_TYPE_DS) verbose(VERB_ALGO, "proveNodata: covering NSEC3 was not " "opt-out in an opt-out DS NOERROR/NODATA case."); else verbose(VERB_ALGO, "proveNodata: could not find matching " "NSEC3, nor matching wildcard, nor optout NSEC3 " "-- no more options, bogus."); return sec_status_bogus; } /* RFC5155 section 9.2: if nc has optout then no AD flag set */ return sec_status_insecure; } enum sec_status nsec3_prove_nodata(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey) { rbtree_type ct; struct nsec3_filter flt; if(!list || num == 0 || !kkey || !key_entry_isgood(kkey)) return sec_status_bogus; /* no valid NSEC3s, bogus */ rbtree_init(&ct, &nsec3_hash_cmp); /* init names-to-hash cache */ filter_init(&flt, list, num, qinfo); /* init RR iterator */ if(!flt.zone) return sec_status_bogus; /* no RRs */ if(nsec3_iteration_count_high(ve, &flt, kkey)) return sec_status_insecure; /* iteration count too high */ return nsec3_do_prove_nodata(env, &flt, &ct, qinfo); } enum sec_status nsec3_prove_wildcard(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey, uint8_t* wc) { rbtree_type ct; struct nsec3_filter flt; struct ce_response ce; uint8_t* nc; size_t nc_len; size_t wclen; (void)dname_count_size_labels(wc, &wclen); if(!list || num == 0 || !kkey || !key_entry_isgood(kkey)) return sec_status_bogus; /* no valid NSEC3s, bogus */ rbtree_init(&ct, &nsec3_hash_cmp); /* init names-to-hash cache */ filter_init(&flt, list, num, qinfo); /* init RR iterator */ if(!flt.zone) return sec_status_bogus; /* no RRs */ if(nsec3_iteration_count_high(ve, &flt, kkey)) return sec_status_insecure; /* iteration count too high */ /* We know what the (purported) closest encloser is by just * looking at the supposed generating wildcard. * The *. has already been removed from the wc name. */ memset(&ce, 0, sizeof(ce)); ce.ce = wc; ce.ce_len = wclen; /* Now we still need to prove that the original data did not exist. * Otherwise, we need to show that the next closer name is covered. */ next_closer(qinfo->qname, qinfo->qname_len, ce.ce, &nc, &nc_len); if(!find_covering_nsec3(env, &flt, &ct, nc, nc_len, &ce.nc_rrset, &ce.nc_rr)) { verbose(VERB_ALGO, "proveWildcard: did not find a covering " "NSEC3 that covered the next closer name."); return sec_status_bogus; } if(ce.nc_rrset && nsec3_has_optout(ce.nc_rrset, ce.nc_rr)) { verbose(VERB_ALGO, "proveWildcard: NSEC3 optout"); return sec_status_insecure; } return sec_status_secure; } /** test if list is all secure */ static int list_is_secure(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct key_entry_key* kkey, char** reason, struct module_qstate* qstate) { struct packed_rrset_data* d; size_t i; for(i=0; ientry.data; if(list[i]->rk.type != htons(LDNS_RR_TYPE_NSEC3)) continue; if(d->security == sec_status_secure) continue; rrset_check_sec_status(env->rrset_cache, list[i], *env->now); if(d->security == sec_status_secure) continue; d->security = val_verify_rrset_entry(env, ve, list[i], kkey, reason, LDNS_SECTION_AUTHORITY, qstate); if(d->security != sec_status_secure) { verbose(VERB_ALGO, "NSEC3 did not verify"); return 0; } rrset_update_sec_status(env->rrset_cache, list[i], *env->now); } return 1; } enum sec_status nsec3_prove_nods(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey, char** reason, struct module_qstate* qstate) { rbtree_type ct; struct nsec3_filter flt; struct ce_response ce; struct ub_packed_rrset_key* rrset; int rr; log_assert(qinfo->qtype == LDNS_RR_TYPE_DS); if(!list || num == 0 || !kkey || !key_entry_isgood(kkey)) { *reason = "no valid NSEC3s"; return sec_status_bogus; /* no valid NSEC3s, bogus */ } if(!list_is_secure(env, ve, list, num, kkey, reason, qstate)) return sec_status_bogus; /* not all NSEC3 records secure */ rbtree_init(&ct, &nsec3_hash_cmp); /* init names-to-hash cache */ filter_init(&flt, list, num, qinfo); /* init RR iterator */ if(!flt.zone) { *reason = "no NSEC3 records"; return sec_status_bogus; /* no RRs */ } if(nsec3_iteration_count_high(ve, &flt, kkey)) return sec_status_insecure; /* iteration count too high */ /* Look for a matching NSEC3 to qname -- this is the normal * NODATA case. */ if(find_matching_nsec3(env, &flt, &ct, qinfo->qname, qinfo->qname_len, &rrset, &rr)) { /* If the matching NSEC3 has the SOA bit set, it is from * the wrong zone (the child instead of the parent). If * it has the DS bit set, then we were lied to. */ if(nsec3_has_type(rrset, rr, LDNS_RR_TYPE_SOA) && qinfo->qname_len != 1) { verbose(VERB_ALGO, "nsec3 provenods: NSEC3 is from" " child zone, bogus"); *reason = "NSEC3 from child zone"; return sec_status_bogus; } else if(nsec3_has_type(rrset, rr, LDNS_RR_TYPE_DS)) { verbose(VERB_ALGO, "nsec3 provenods: NSEC3 has qtype" " DS, bogus"); *reason = "NSEC3 has DS in bitmap"; return sec_status_bogus; } /* If the NSEC3 RR doesn't have the NS bit set, then * this wasn't a delegation point. */ if(!nsec3_has_type(rrset, rr, LDNS_RR_TYPE_NS)) return sec_status_indeterminate; /* Otherwise, this proves no DS. */ return sec_status_secure; } /* Otherwise, we are probably in the opt-out case. */ if(nsec3_prove_closest_encloser(env, &flt, &ct, qinfo, 1, &ce) != sec_status_secure) { /* an insecure delegation *above* the qname does not prove * anything about this qname exactly, and bogus is bogus */ verbose(VERB_ALGO, "nsec3 provenods: did not match qname, " "nor found a proven closest encloser."); *reason = "no NSEC3 closest encloser"; return sec_status_bogus; } /* robust extra check */ if(!ce.nc_rrset) { verbose(VERB_ALGO, "nsec3 nods proof: no next closer nsec3"); *reason = "no NSEC3 next closer"; return sec_status_bogus; } /* we had the closest encloser proof, then we need to check that the * covering NSEC3 was opt-out -- the proveClosestEncloser step already * checked to see if the closest encloser was a delegation or DNAME. */ log_assert(ce.nc_rrset); if(!nsec3_has_optout(ce.nc_rrset, ce.nc_rr)) { verbose(VERB_ALGO, "nsec3 provenods: covering NSEC3 was not " "opt-out in an opt-out DS NOERROR/NODATA case."); *reason = "covering NSEC3 was not opt-out in an opt-out " "DS NOERROR/NODATA case"; return sec_status_bogus; } /* RFC5155 section 9.2: if nc has optout then no AD flag set */ return sec_status_insecure; } enum sec_status nsec3_prove_nxornodata(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key** list, size_t num, struct query_info* qinfo, struct key_entry_key* kkey, int* nodata) { enum sec_status sec, secnx; rbtree_type ct; struct nsec3_filter flt; *nodata = 0; if(!list || num == 0 || !kkey || !key_entry_isgood(kkey)) return sec_status_bogus; /* no valid NSEC3s, bogus */ rbtree_init(&ct, &nsec3_hash_cmp); /* init names-to-hash cache */ filter_init(&flt, list, num, qinfo); /* init RR iterator */ if(!flt.zone) return sec_status_bogus; /* no RRs */ if(nsec3_iteration_count_high(ve, &flt, kkey)) return sec_status_insecure; /* iteration count too high */ /* try nxdomain and nodata after another, while keeping the * hash cache intact */ secnx = nsec3_do_prove_nameerror(env, &flt, &ct, qinfo); if(secnx==sec_status_secure) return sec_status_secure; sec = nsec3_do_prove_nodata(env, &flt, &ct, qinfo); if(sec==sec_status_secure) { *nodata = 1; } else if(sec == sec_status_insecure) { *nodata = 1; } else if(secnx == sec_status_insecure) { sec = sec_status_insecure; } return sec; } unbound-1.13.1/validator/val_neg.c0000644000175000017500000012571014010434640016451 0ustar wouterwouter/* * validator/val_neg.c - validator aggressive negative caching functions. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with aggressive negative caching. * This creates new denials of existence, and proofs for absence of types * from cached NSEC records. */ #include "config.h" #ifdef HAVE_OPENSSL_SSL_H #include "openssl/ssl.h" #define NSEC3_SHA_LEN SHA_DIGEST_LENGTH #else #define NSEC3_SHA_LEN 20 #endif #include "validator/val_neg.h" #include "validator/val_nsec.h" #include "validator/val_nsec3.h" #include "validator/val_utils.h" #include "util/data/dname.h" #include "util/data/msgreply.h" #include "util/log.h" #include "util/net_help.h" #include "util/config_file.h" #include "services/cache/rrset.h" #include "services/cache/dns.h" #include "sldns/rrdef.h" #include "sldns/sbuffer.h" int val_neg_data_compare(const void* a, const void* b) { struct val_neg_data* x = (struct val_neg_data*)a; struct val_neg_data* y = (struct val_neg_data*)b; int m; return dname_canon_lab_cmp(x->name, x->labs, y->name, y->labs, &m); } int val_neg_zone_compare(const void* a, const void* b) { struct val_neg_zone* x = (struct val_neg_zone*)a; struct val_neg_zone* y = (struct val_neg_zone*)b; int m; if(x->dclass != y->dclass) { if(x->dclass < y->dclass) return -1; return 1; } return dname_canon_lab_cmp(x->name, x->labs, y->name, y->labs, &m); } struct val_neg_cache* val_neg_create(struct config_file* cfg, size_t maxiter) { struct val_neg_cache* neg = (struct val_neg_cache*)calloc(1, sizeof(*neg)); if(!neg) { log_err("Could not create neg cache: out of memory"); return NULL; } neg->nsec3_max_iter = maxiter; neg->max = 1024*1024; /* 1 M is thousands of entries */ if(cfg) neg->max = cfg->neg_cache_size; rbtree_init(&neg->tree, &val_neg_zone_compare); lock_basic_init(&neg->lock); lock_protect(&neg->lock, neg, sizeof(*neg)); return neg; } size_t val_neg_get_mem(struct val_neg_cache* neg) { size_t result; lock_basic_lock(&neg->lock); result = sizeof(*neg) + neg->use; lock_basic_unlock(&neg->lock); return result; } /** clear datas on cache deletion */ static void neg_clear_datas(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct val_neg_data* d = (struct val_neg_data*)n; free(d->name); free(d); } /** clear zones on cache deletion */ static void neg_clear_zones(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct val_neg_zone* z = (struct val_neg_zone*)n; /* delete all the rrset entries in the tree */ traverse_postorder(&z->tree, &neg_clear_datas, NULL); free(z->nsec3_salt); free(z->name); free(z); } void neg_cache_delete(struct val_neg_cache* neg) { if(!neg) return; lock_basic_destroy(&neg->lock); /* delete all the zones in the tree */ traverse_postorder(&neg->tree, &neg_clear_zones, NULL); free(neg); } /** * Put data element at the front of the LRU list. * @param neg: negative cache with LRU start and end. * @param data: this data is fronted. */ static void neg_lru_front(struct val_neg_cache* neg, struct val_neg_data* data) { data->prev = NULL; data->next = neg->first; if(!neg->first) neg->last = data; else neg->first->prev = data; neg->first = data; } /** * Remove data element from LRU list. * @param neg: negative cache with LRU start and end. * @param data: this data is removed from the list. */ static void neg_lru_remove(struct val_neg_cache* neg, struct val_neg_data* data) { if(data->prev) data->prev->next = data->next; else neg->first = data->next; if(data->next) data->next->prev = data->prev; else neg->last = data->prev; } /** * Touch LRU for data element, put it at the start of the LRU list. * @param neg: negative cache with LRU start and end. * @param data: this data is used. */ static void neg_lru_touch(struct val_neg_cache* neg, struct val_neg_data* data) { if(data == neg->first) return; /* nothing to do */ /* remove from current lru position */ neg_lru_remove(neg, data); /* add at front */ neg_lru_front(neg, data); } /** * Delete a zone element from the negative cache. * May delete other zone elements to keep tree coherent, or * only mark the element as 'not in use'. * @param neg: negative cache. * @param z: zone element to delete. */ static void neg_delete_zone(struct val_neg_cache* neg, struct val_neg_zone* z) { struct val_neg_zone* p, *np; if(!z) return; log_assert(z->in_use); log_assert(z->count > 0); z->in_use = 0; /* go up the tree and reduce counts */ p = z; while(p) { log_assert(p->count > 0); p->count --; p = p->parent; } /* remove zones with zero count */ p = z; while(p && p->count == 0) { np = p->parent; (void)rbtree_delete(&neg->tree, &p->node); neg->use -= p->len + sizeof(*p); free(p->nsec3_salt); free(p->name); free(p); p = np; } } void neg_delete_data(struct val_neg_cache* neg, struct val_neg_data* el) { struct val_neg_zone* z; struct val_neg_data* p, *np; if(!el) return; z = el->zone; log_assert(el->in_use); log_assert(el->count > 0); el->in_use = 0; /* remove it from the lru list */ neg_lru_remove(neg, el); log_assert(neg->first != el && neg->last != el); /* go up the tree and reduce counts */ p = el; while(p) { log_assert(p->count > 0); p->count --; p = p->parent; } /* delete 0 count items from tree */ p = el; while(p && p->count == 0) { np = p->parent; (void)rbtree_delete(&z->tree, &p->node); neg->use -= p->len + sizeof(*p); free(p->name); free(p); p = np; } /* check if the zone is now unused */ if(z->tree.count == 0) { neg_delete_zone(neg, z); } } /** * Create more space in negative cache * The oldest elements are deleted until enough space is present. * Empty zones are deleted. * @param neg: negative cache. * @param need: how many bytes are needed. */ static void neg_make_space(struct val_neg_cache* neg, size_t need) { /* delete elements until enough space or its empty */ while(neg->last && neg->max < neg->use + need) { neg_delete_data(neg, neg->last); } } struct val_neg_zone* neg_find_zone(struct val_neg_cache* neg, uint8_t* nm, size_t len, uint16_t dclass) { struct val_neg_zone lookfor; struct val_neg_zone* result; lookfor.node.key = &lookfor; lookfor.name = nm; lookfor.len = len; lookfor.labs = dname_count_labels(lookfor.name); lookfor.dclass = dclass; result = (struct val_neg_zone*) rbtree_search(&neg->tree, lookfor.node.key); return result; } /** * Find the given data * @param zone: negative zone * @param nm: what to look for. * @param len: length of nm * @param labs: labels in nm * @return data or NULL if not found. */ static struct val_neg_data* neg_find_data(struct val_neg_zone* zone, uint8_t* nm, size_t len, int labs) { struct val_neg_data lookfor; struct val_neg_data* result; lookfor.node.key = &lookfor; lookfor.name = nm; lookfor.len = len; lookfor.labs = labs; result = (struct val_neg_data*) rbtree_search(&zone->tree, lookfor.node.key); return result; } /** * Calculate space needed for the data and all its parents * @param rep: NSEC entries. * @return size. */ static size_t calc_data_need(struct reply_info* rep) { uint8_t* d; size_t i, len, res = 0; for(i=rep->an_numrrsets; ian_numrrsets+rep->ns_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC) { d = rep->rrsets[i]->rk.dname; len = rep->rrsets[i]->rk.dname_len; res = sizeof(struct val_neg_data) + len; while(!dname_is_root(d)) { log_assert(len > 1); /* not root label */ dname_remove_label(&d, &len); res += sizeof(struct val_neg_data) + len; } } } return res; } /** * Calculate space needed for zone and all its parents * @param d: name of zone * @param len: length of name * @return size. */ static size_t calc_zone_need(uint8_t* d, size_t len) { size_t res = sizeof(struct val_neg_zone) + len; while(!dname_is_root(d)) { log_assert(len > 1); /* not root label */ dname_remove_label(&d, &len); res += sizeof(struct val_neg_zone) + len; } return res; } /** * Find closest existing parent zone of the given name. * @param neg: negative cache. * @param nm: name to look for * @param nm_len: length of nm * @param labs: labelcount of nm. * @param qclass: class. * @return the zone or NULL if none found. */ static struct val_neg_zone* neg_closest_zone_parent(struct val_neg_cache* neg, uint8_t* nm, size_t nm_len, int labs, uint16_t qclass) { struct val_neg_zone key; struct val_neg_zone* result; rbnode_type* res = NULL; key.node.key = &key; key.name = nm; key.len = nm_len; key.labs = labs; key.dclass = qclass; if(rbtree_find_less_equal(&neg->tree, &key, &res)) { /* exact match */ result = (struct val_neg_zone*)res; } else { /* smaller element (or no element) */ int m; result = (struct val_neg_zone*)res; if(!result || result->dclass != qclass) return NULL; /* count number of labels matched */ (void)dname_lab_cmp(result->name, result->labs, key.name, key.labs, &m); while(result) { /* go up until qname is subdomain of stub */ if(result->labs <= m) break; result = result->parent; } } return result; } /** * Find closest existing parent data for the given name. * @param zone: to look in. * @param nm: name to look for * @param nm_len: length of nm * @param labs: labelcount of nm. * @return the data or NULL if none found. */ static struct val_neg_data* neg_closest_data_parent( struct val_neg_zone* zone, uint8_t* nm, size_t nm_len, int labs) { struct val_neg_data key; struct val_neg_data* result; rbnode_type* res = NULL; key.node.key = &key; key.name = nm; key.len = nm_len; key.labs = labs; if(rbtree_find_less_equal(&zone->tree, &key, &res)) { /* exact match */ result = (struct val_neg_data*)res; } else { /* smaller element (or no element) */ int m; result = (struct val_neg_data*)res; if(!result) return NULL; /* count number of labels matched */ (void)dname_lab_cmp(result->name, result->labs, key.name, key.labs, &m); while(result) { /* go up until qname is subdomain of stub */ if(result->labs <= m) break; result = result->parent; } } return result; } /** * Create a single zone node * @param nm: name for zone (copied) * @param nm_len: length of name * @param labs: labels in name. * @param dclass: class of zone, host order. * @return new zone or NULL on failure */ static struct val_neg_zone* neg_setup_zone_node( uint8_t* nm, size_t nm_len, int labs, uint16_t dclass) { struct val_neg_zone* zone = (struct val_neg_zone*)calloc(1, sizeof(*zone)); if(!zone) { return NULL; } zone->node.key = zone; zone->name = memdup(nm, nm_len); if(!zone->name) { free(zone); return NULL; } zone->len = nm_len; zone->labs = labs; zone->dclass = dclass; rbtree_init(&zone->tree, &val_neg_data_compare); return zone; } /** * Create a linked list of parent zones, starting at longname ending on * the parent (can be NULL, creates to the root). * @param nm: name for lowest in chain * @param nm_len: length of name * @param labs: labels in name. * @param dclass: class of zone. * @param parent: NULL for to root, else so it fits under here. * @return zone; a chain of zones and their parents up to the parent. * or NULL on malloc failure */ static struct val_neg_zone* neg_zone_chain( uint8_t* nm, size_t nm_len, int labs, uint16_t dclass, struct val_neg_zone* parent) { int i; int tolabs = parent?parent->labs:0; struct val_neg_zone* zone, *prev = NULL, *first = NULL; /* create the new subtree, i is labelcount of current creation */ /* this creates a 'first' to z->parent=NULL list of zones */ for(i=labs; i!=tolabs; i--) { /* create new item */ zone = neg_setup_zone_node(nm, nm_len, i, dclass); if(!zone) { /* need to delete other allocations in this routine!*/ struct val_neg_zone* p=first, *np; while(p) { np = p->parent; free(p->name); free(p); p = np; } return NULL; } if(i == labs) { first = zone; } else { prev->parent = zone; } /* prepare for next name */ prev = zone; dname_remove_label(&nm, &nm_len); } return first; } void val_neg_zone_take_inuse(struct val_neg_zone* zone) { if(!zone->in_use) { struct val_neg_zone* p; zone->in_use = 1; /* increase usage count of all parents */ for(p=zone; p; p = p->parent) { p->count++; } } } struct val_neg_zone* neg_create_zone(struct val_neg_cache* neg, uint8_t* nm, size_t nm_len, uint16_t dclass) { struct val_neg_zone* zone; struct val_neg_zone* parent; struct val_neg_zone* p, *np; int labs = dname_count_labels(nm); /* find closest enclosing parent zone that (still) exists */ parent = neg_closest_zone_parent(neg, nm, nm_len, labs, dclass); if(parent && query_dname_compare(parent->name, nm) == 0) return parent; /* already exists, weird */ /* if parent exists, it is in use */ log_assert(!parent || parent->count > 0); zone = neg_zone_chain(nm, nm_len, labs, dclass, parent); if(!zone) { return NULL; } /* insert the list of zones into the tree */ p = zone; while(p) { np = p->parent; /* mem use */ neg->use += sizeof(struct val_neg_zone) + p->len; /* insert in tree */ (void)rbtree_insert(&neg->tree, &p->node); /* last one needs proper parent pointer */ if(np == NULL) p->parent = parent; p = np; } return zone; } /** find zone name of message, returns the SOA record */ static struct ub_packed_rrset_key* reply_find_soa(struct reply_info* rep) { size_t i; for(i=rep->an_numrrsets; i< rep->an_numrrsets+rep->ns_numrrsets; i++){ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_SOA) return rep->rrsets[i]; } return NULL; } /** see if the reply has NSEC records worthy of caching */ static int reply_has_nsec(struct reply_info* rep) { size_t i; struct packed_rrset_data* d; if(rep->security != sec_status_secure) return 0; for(i=rep->an_numrrsets; i< rep->an_numrrsets+rep->ns_numrrsets; i++){ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC) { d = (struct packed_rrset_data*)rep->rrsets[i]-> entry.data; if(d->security == sec_status_secure) return 1; } } return 0; } /** * Create single node of data element. * @param nm: name (copied) * @param nm_len: length of name * @param labs: labels in name. * @return element with name nm, or NULL malloc failure. */ static struct val_neg_data* neg_setup_data_node( uint8_t* nm, size_t nm_len, int labs) { struct val_neg_data* el; el = (struct val_neg_data*)calloc(1, sizeof(*el)); if(!el) { return NULL; } el->node.key = el; el->name = memdup(nm, nm_len); if(!el->name) { free(el); return NULL; } el->len = nm_len; el->labs = labs; return el; } /** * Create chain of data element and parents * @param nm: name * @param nm_len: length of name * @param labs: labels in name. * @param parent: up to where to make, if NULL up to root label. * @return lowest element with name nm, or NULL malloc failure. */ static struct val_neg_data* neg_data_chain( uint8_t* nm, size_t nm_len, int labs, struct val_neg_data* parent) { int i; int tolabs = parent?parent->labs:0; struct val_neg_data* el, *first = NULL, *prev = NULL; /* create the new subtree, i is labelcount of current creation */ /* this creates a 'first' to z->parent=NULL list of zones */ for(i=labs; i!=tolabs; i--) { /* create new item */ el = neg_setup_data_node(nm, nm_len, i); if(!el) { /* need to delete other allocations in this routine!*/ struct val_neg_data* p = first, *np; while(p) { np = p->parent; free(p->name); free(p); p = np; } return NULL; } if(i == labs) { first = el; } else { prev->parent = el; } /* prepare for next name */ prev = el; dname_remove_label(&nm, &nm_len); } return first; } /** * Remove NSEC records between start and end points. * By walking the tree, the tree is sorted canonically. * @param neg: negative cache. * @param zone: the zone * @param el: element to start walking at. * @param nsec: the nsec record with the end point */ static void wipeout(struct val_neg_cache* neg, struct val_neg_zone* zone, struct val_neg_data* el, struct ub_packed_rrset_key* nsec) { struct packed_rrset_data* d = (struct packed_rrset_data*)nsec-> entry.data; uint8_t* end; size_t end_len; int end_labs, m; rbnode_type* walk, *next; struct val_neg_data* cur; uint8_t buf[257]; /* get endpoint */ if(!d || d->count == 0 || d->rr_len[0] < 2+1) return; if(ntohs(nsec->rk.type) == LDNS_RR_TYPE_NSEC) { end = d->rr_data[0]+2; end_len = dname_valid(end, d->rr_len[0]-2); end_labs = dname_count_labels(end); } else { /* NSEC3 */ if(!nsec3_get_nextowner_b32(nsec, 0, buf, sizeof(buf))) return; end = buf; end_labs = dname_count_size_labels(end, &end_len); } /* sanity check, both owner and end must be below the zone apex */ if(!dname_subdomain_c(el->name, zone->name) || !dname_subdomain_c(end, zone->name)) return; /* detect end of zone NSEC ; wipe until the end of zone */ if(query_dname_compare(end, zone->name) == 0) { end = NULL; } walk = rbtree_next(&el->node); while(walk && walk != RBTREE_NULL) { cur = (struct val_neg_data*)walk; /* sanity check: must be larger than start */ if(dname_canon_lab_cmp(cur->name, cur->labs, el->name, el->labs, &m) <= 0) { /* r == 0 skip original record. */ /* r < 0 too small! */ walk = rbtree_next(walk); continue; } /* stop at endpoint, also data at empty nonterminals must be * removed (no NSECs there) so everything between * start and end */ if(end && dname_canon_lab_cmp(cur->name, cur->labs, end, end_labs, &m) >= 0) { break; } /* this element has to be deleted, but we cannot do it * now, because we are walking the tree still ... */ /* get the next element: */ next = rbtree_next(walk); /* now delete the original element, this may trigger * rbtree rebalances, but really, the next element is * the one we need. * But it may trigger delete of other data and the * entire zone. However, if that happens, this is done * by deleting the *parents* of the element for deletion, * and maybe also the entire zone if it is empty. * But parents are smaller in canonical compare, thus, * if a larger element exists, then it is not a parent, * it cannot get deleted, the zone cannot get empty. * If the next==NULL, then zone can be empty. */ if(cur->in_use) neg_delete_data(neg, cur); walk = next; } } void neg_insert_data(struct val_neg_cache* neg, struct val_neg_zone* zone, struct ub_packed_rrset_key* nsec) { struct packed_rrset_data* d; struct val_neg_data* parent; struct val_neg_data* el; uint8_t* nm = nsec->rk.dname; size_t nm_len = nsec->rk.dname_len; int labs = dname_count_labels(nsec->rk.dname); d = (struct packed_rrset_data*)nsec->entry.data; if( !(d->security == sec_status_secure || (d->security == sec_status_unchecked && d->rrsig_count > 0))) return; log_nametypeclass(VERB_ALGO, "negcache rr", nsec->rk.dname, ntohs(nsec->rk.type), ntohs(nsec->rk.rrset_class)); /* find closest enclosing parent data that (still) exists */ parent = neg_closest_data_parent(zone, nm, nm_len, labs); if(parent && query_dname_compare(parent->name, nm) == 0) { /* perfect match already exists */ log_assert(parent->count > 0); el = parent; } else { struct val_neg_data* p, *np; /* create subtree for perfect match */ /* if parent exists, it is in use */ log_assert(!parent || parent->count > 0); el = neg_data_chain(nm, nm_len, labs, parent); if(!el) { log_err("out of memory inserting NSEC negative cache"); return; } el->in_use = 0; /* set on below */ /* insert the list of zones into the tree */ p = el; while(p) { np = p->parent; /* mem use */ neg->use += sizeof(struct val_neg_data) + p->len; /* insert in tree */ p->zone = zone; (void)rbtree_insert(&zone->tree, &p->node); /* last one needs proper parent pointer */ if(np == NULL) p->parent = parent; p = np; } } if(!el->in_use) { struct val_neg_data* p; el->in_use = 1; /* increase usage count of all parents */ for(p=el; p; p = p->parent) { p->count++; } neg_lru_front(neg, el); } else { /* in use, bring to front, lru */ neg_lru_touch(neg, el); } /* if nsec3 store last used parameters */ if(ntohs(nsec->rk.type) == LDNS_RR_TYPE_NSEC3) { int h; uint8_t* s; size_t slen, it; if(nsec3_get_params(nsec, 0, &h, &it, &s, &slen) && it <= neg->nsec3_max_iter && (h != zone->nsec3_hash || it != zone->nsec3_iter || slen != zone->nsec3_saltlen || memcmp(zone->nsec3_salt, s, slen) != 0)) { if(slen > 0) { uint8_t* sa = memdup(s, slen); if(sa) { free(zone->nsec3_salt); zone->nsec3_salt = sa; zone->nsec3_saltlen = slen; zone->nsec3_iter = it; zone->nsec3_hash = h; } } else { free(zone->nsec3_salt); zone->nsec3_salt = NULL; zone->nsec3_saltlen = 0; zone->nsec3_iter = it; zone->nsec3_hash = h; } } } /* wipe out the cache items between NSEC start and end */ wipeout(neg, zone, el, nsec); } /** see if the reply has signed NSEC records and return the signer */ static uint8_t* reply_nsec_signer(struct reply_info* rep, size_t* signer_len, uint16_t* dclass) { size_t i; struct packed_rrset_data* d; uint8_t* s; for(i=rep->an_numrrsets; i< rep->an_numrrsets+rep->ns_numrrsets; i++){ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC || ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC3) { d = (struct packed_rrset_data*)rep->rrsets[i]-> entry.data; /* return first signer name of first NSEC */ if(d->rrsig_count != 0) { val_find_rrset_signer(rep->rrsets[i], &s, signer_len); if(s && *signer_len) { *dclass = ntohs(rep->rrsets[i]-> rk.rrset_class); return s; } } } } return 0; } void val_neg_addreply(struct val_neg_cache* neg, struct reply_info* rep) { size_t i, need; struct ub_packed_rrset_key* soa; uint8_t* dname = NULL; size_t dname_len; uint16_t rrset_class; struct val_neg_zone* zone; /* see if secure nsecs inside */ if(!reply_has_nsec(rep)) return; /* find the zone name in message */ if((soa = reply_find_soa(rep))) { dname = soa->rk.dname; dname_len = soa->rk.dname_len; rrset_class = ntohs(soa->rk.rrset_class); } else { /* No SOA in positive (wildcard) answer. Use signer from the * validated answer RRsets' signature. */ if(!(dname = reply_nsec_signer(rep, &dname_len, &rrset_class))) return; } log_nametypeclass(VERB_ALGO, "negcache insert for zone", dname, LDNS_RR_TYPE_SOA, rrset_class); /* ask for enough space to store all of it */ need = calc_data_need(rep) + calc_zone_need(dname, dname_len); lock_basic_lock(&neg->lock); neg_make_space(neg, need); /* find or create the zone entry */ zone = neg_find_zone(neg, dname, dname_len, rrset_class); if(!zone) { if(!(zone = neg_create_zone(neg, dname, dname_len, rrset_class))) { lock_basic_unlock(&neg->lock); log_err("out of memory adding negative zone"); return; } } val_neg_zone_take_inuse(zone); /* insert the NSECs */ for(i=rep->an_numrrsets; i< rep->an_numrrsets+rep->ns_numrrsets; i++){ if(ntohs(rep->rrsets[i]->rk.type) != LDNS_RR_TYPE_NSEC) continue; if(!dname_subdomain_c(rep->rrsets[i]->rk.dname, zone->name)) continue; /* insert NSEC into this zone's tree */ neg_insert_data(neg, zone, rep->rrsets[i]); } if(zone->tree.count == 0) { /* remove empty zone if inserts failed */ neg_delete_zone(neg, zone); } lock_basic_unlock(&neg->lock); } /** * Lookup closest data record. For NSEC denial. * @param zone: zone to look in * @param qname: name to look for. * @param len: length of name * @param labs: labels in name * @param data: data element, exact or smaller or NULL * @return true if exact match. */ static int neg_closest_data(struct val_neg_zone* zone, uint8_t* qname, size_t len, int labs, struct val_neg_data** data) { struct val_neg_data key; rbnode_type* r; key.node.key = &key; key.name = qname; key.len = len; key.labs = labs; if(rbtree_find_less_equal(&zone->tree, &key, &r)) { /* exact match */ *data = (struct val_neg_data*)r; return 1; } else { /* smaller match */ *data = (struct val_neg_data*)r; return 0; } } void val_neg_addreferral(struct val_neg_cache* neg, struct reply_info* rep, uint8_t* zone_name) { size_t i, need; uint8_t* signer; size_t signer_len; uint16_t dclass; struct val_neg_zone* zone; /* no SOA in this message, find RRSIG over NSEC's signer name. * note the NSEC records are maybe not validated yet */ signer = reply_nsec_signer(rep, &signer_len, &dclass); if(!signer) return; if(!dname_subdomain_c(signer, zone_name)) { /* the signer is not in the bailiwick, throw it out */ return; } log_nametypeclass(VERB_ALGO, "negcache insert referral ", signer, LDNS_RR_TYPE_NS, dclass); /* ask for enough space to store all of it */ need = calc_data_need(rep) + calc_zone_need(signer, signer_len); lock_basic_lock(&neg->lock); neg_make_space(neg, need); /* find or create the zone entry */ zone = neg_find_zone(neg, signer, signer_len, dclass); if(!zone) { if(!(zone = neg_create_zone(neg, signer, signer_len, dclass))) { lock_basic_unlock(&neg->lock); log_err("out of memory adding negative zone"); return; } } val_neg_zone_take_inuse(zone); /* insert the NSECs */ for(i=rep->an_numrrsets; i< rep->an_numrrsets+rep->ns_numrrsets; i++){ if(ntohs(rep->rrsets[i]->rk.type) != LDNS_RR_TYPE_NSEC && ntohs(rep->rrsets[i]->rk.type) != LDNS_RR_TYPE_NSEC3) continue; if(!dname_subdomain_c(rep->rrsets[i]->rk.dname, zone->name)) continue; /* insert NSEC into this zone's tree */ neg_insert_data(neg, zone, rep->rrsets[i]); } if(zone->tree.count == 0) { /* remove empty zone if inserts failed */ neg_delete_zone(neg, zone); } lock_basic_unlock(&neg->lock); } /** * Check that an NSEC3 rrset does not have a type set. * None of the nsec3s in a hash-collision are allowed to have the type. * (since we do not know which one is the nsec3 looked at, flags, ..., we * ignore the cached item and let it bypass negative caching). * @param k: the nsec3 rrset to check. * @param t: type to check * @return true if no RRs have the type. */ static int nsec3_no_type(struct ub_packed_rrset_key* k, uint16_t t) { int count = (int)((struct packed_rrset_data*)k->entry.data)->count; int i; for(i=0; ientry.data; if(d->ttl < now) { lock_rw_unlock(&k->entry.lock); return NULL; } /* only secure or unchecked records that have signatures. */ if( ! ( d->security == sec_status_secure || (d->security == sec_status_unchecked && d->rrsig_count > 0) ) ) { lock_rw_unlock(&k->entry.lock); return NULL; } /* check if checktype is absent */ if(checkbit && ( (qtype == LDNS_RR_TYPE_NSEC && nsec_has_type(k, checktype)) || (qtype == LDNS_RR_TYPE_NSEC3 && !nsec3_no_type(k, checktype)) )) { lock_rw_unlock(&k->entry.lock); return NULL; } /* looks OK! copy to region and return it */ r = packed_rrset_copy_region(k, region, now); /* if it failed, we return the NULL */ lock_rw_unlock(&k->entry.lock); return r; } /** * Get best NSEC record for qname. Might be matching, covering or totally * useless. * @param neg_cache: neg cache * @param qname: to lookup rrset name * @param qname_len: length of qname. * @param qclass: class of rrset to lookup, host order * @param rrset_cache: rrset cache * @param now: to check ttl against * @param region: where to alloc result * @return rrset or NULL */ static struct ub_packed_rrset_key* neg_find_nsec(struct val_neg_cache* neg_cache, uint8_t* qname, size_t qname_len, uint16_t qclass, struct rrset_cache* rrset_cache, time_t now, struct regional* region) { int labs; uint32_t flags; struct val_neg_zone* zone; struct val_neg_data* data; struct ub_packed_rrset_key* nsec; labs = dname_count_labels(qname); lock_basic_lock(&neg_cache->lock); zone = neg_closest_zone_parent(neg_cache, qname, qname_len, labs, qclass); while(zone && !zone->in_use) zone = zone->parent; if(!zone) { lock_basic_unlock(&neg_cache->lock); return NULL; } /* NSEC only for now */ if(zone->nsec3_hash) { lock_basic_unlock(&neg_cache->lock); return NULL; } /* ignore return value, don't care if it is an exact or smaller match */ (void)neg_closest_data(zone, qname, qname_len, labs, &data); if(!data) { lock_basic_unlock(&neg_cache->lock); return NULL; } /* ENT nodes are not in use, try the previous node. If the previous node * is not in use, we don't have an useful NSEC and give up. */ if(!data->in_use) { data = (struct val_neg_data*)rbtree_previous((rbnode_type*)data); if((rbnode_type*)data == RBTREE_NULL || !data->in_use) { lock_basic_unlock(&neg_cache->lock); return NULL; } } flags = 0; if(query_dname_compare(data->name, zone->name) == 0) flags = PACKED_RRSET_NSEC_AT_APEX; nsec = grab_nsec(rrset_cache, data->name, data->len, LDNS_RR_TYPE_NSEC, zone->dclass, flags, region, 0, 0, now); lock_basic_unlock(&neg_cache->lock); return nsec; } /** find nsec3 closest encloser in neg cache */ static struct val_neg_data* neg_find_nsec3_ce(struct val_neg_zone* zone, uint8_t* qname, size_t qname_len, int qlabs, sldns_buffer* buf, uint8_t* hashnc, size_t* nclen) { struct val_neg_data* data; uint8_t hashce[NSEC3_SHA_LEN]; uint8_t b32[257]; size_t celen, b32len; *nclen = 0; while(qlabs > 0) { /* hash */ if(!(celen=nsec3_get_hashed(buf, qname, qname_len, zone->nsec3_hash, zone->nsec3_iter, zone->nsec3_salt, zone->nsec3_saltlen, hashce, sizeof(hashce)))) return NULL; if(!(b32len=nsec3_hash_to_b32(hashce, celen, zone->name, zone->len, b32, sizeof(b32)))) return NULL; /* lookup (exact match only) */ data = neg_find_data(zone, b32, b32len, zone->labs+1); if(data && data->in_use) { /* found ce match! */ return data; } *nclen = celen; memmove(hashnc, hashce, celen); dname_remove_label(&qname, &qname_len); qlabs --; } return NULL; } /** check nsec3 parameters on nsec3 rrset with current zone values */ static int neg_params_ok(struct val_neg_zone* zone, struct ub_packed_rrset_key* rrset) { int h; uint8_t* s; size_t slen, it; if(!nsec3_get_params(rrset, 0, &h, &it, &s, &slen)) return 0; return (h == zone->nsec3_hash && it == zone->nsec3_iter && slen == zone->nsec3_saltlen && memcmp(zone->nsec3_salt, s, slen) == 0); } /** get next closer for nsec3 proof */ static struct ub_packed_rrset_key* neg_nsec3_getnc(struct val_neg_zone* zone, uint8_t* hashnc, size_t nclen, struct rrset_cache* rrset_cache, struct regional* region, time_t now, uint8_t* b32, size_t maxb32) { struct ub_packed_rrset_key* nc_rrset; struct val_neg_data* data; size_t b32len; if(!(b32len=nsec3_hash_to_b32(hashnc, nclen, zone->name, zone->len, b32, maxb32))) return NULL; (void)neg_closest_data(zone, b32, b32len, zone->labs+1, &data); if(!data && zone->tree.count != 0) { /* could be before the first entry ; return the last * entry (possibly the rollover nsec3 at end) */ data = (struct val_neg_data*)rbtree_last(&zone->tree); } while(data && !data->in_use) data = data->parent; if(!data) return NULL; /* got a data element in tree, grab it */ nc_rrset = grab_nsec(rrset_cache, data->name, data->len, LDNS_RR_TYPE_NSEC3, zone->dclass, 0, region, 0, 0, now); if(!nc_rrset) return NULL; if(!neg_params_ok(zone, nc_rrset)) return NULL; return nc_rrset; } /** neg cache nsec3 proof procedure*/ static struct dns_msg* neg_nsec3_proof_ds(struct val_neg_zone* zone, uint8_t* qname, size_t qname_len, int qlabs, sldns_buffer* buf, struct rrset_cache* rrset_cache, struct regional* region, time_t now, uint8_t* topname) { struct dns_msg* msg; struct val_neg_data* data; uint8_t hashnc[NSEC3_SHA_LEN]; size_t nclen; struct ub_packed_rrset_key* ce_rrset, *nc_rrset; struct nsec3_cached_hash c; uint8_t nc_b32[257]; /* for NSEC3 ; determine the closest encloser for which we * can find an exact match. Remember the hashed lower name, * since that is the one we need a closest match for. * If we find a match straight away, then it becomes NODATA. * Otherwise, NXDOMAIN or if OPTOUT, an insecure delegation. * Also check that parameters are the same on closest encloser * and on closest match. */ if(!zone->nsec3_hash) return NULL; /* not nsec3 zone */ if(!(data=neg_find_nsec3_ce(zone, qname, qname_len, qlabs, buf, hashnc, &nclen))) { return NULL; } /* grab the ce rrset */ ce_rrset = grab_nsec(rrset_cache, data->name, data->len, LDNS_RR_TYPE_NSEC3, zone->dclass, 0, region, 1, LDNS_RR_TYPE_DS, now); if(!ce_rrset) return NULL; if(!neg_params_ok(zone, ce_rrset)) return NULL; if(nclen == 0) { /* exact match, just check the type bits */ /* need: -SOA, -DS, +NS */ if(nsec3_has_type(ce_rrset, 0, LDNS_RR_TYPE_SOA) || nsec3_has_type(ce_rrset, 0, LDNS_RR_TYPE_DS) || !nsec3_has_type(ce_rrset, 0, LDNS_RR_TYPE_NS)) return NULL; if(!(msg = dns_msg_create(qname, qname_len, LDNS_RR_TYPE_DS, zone->dclass, region, 1))) return NULL; /* TTL reduced in grab_nsec */ if(!dns_msg_authadd(msg, region, ce_rrset, 0)) return NULL; return msg; } /* optout is not allowed without knowing the trust-anchor in use, * otherwise the optout could spoof away that anchor */ if(!topname) return NULL; /* if there is no exact match, it must be in an optout span * (an existing DS implies an NSEC3 must exist) */ nc_rrset = neg_nsec3_getnc(zone, hashnc, nclen, rrset_cache, region, now, nc_b32, sizeof(nc_b32)); if(!nc_rrset) return NULL; if(!neg_params_ok(zone, nc_rrset)) return NULL; if(!nsec3_has_optout(nc_rrset, 0)) return NULL; c.hash = hashnc; c.hash_len = nclen; c.b32 = nc_b32+1; c.b32_len = (size_t)nc_b32[0]; if(nsec3_covers(zone->name, &c, nc_rrset, 0, buf)) { /* nc_rrset covers the next closer name. * ce_rrset equals a closer encloser. * nc_rrset is optout. * No need to check wildcard for type DS */ /* capacity=3: ce + nc + soa(if needed) */ if(!(msg = dns_msg_create(qname, qname_len, LDNS_RR_TYPE_DS, zone->dclass, region, 3))) return NULL; /* now=0 because TTL was reduced in grab_nsec */ if(!dns_msg_authadd(msg, region, ce_rrset, 0)) return NULL; if(!dns_msg_authadd(msg, region, nc_rrset, 0)) return NULL; return msg; } return NULL; } /** * Add SOA record for external responses. * @param rrset_cache: to look into. * @param now: current time. * @param region: where to perform the allocation * @param msg: current msg with NSEC. * @param zone: val_neg_zone if we have one. * @return false on lookup or alloc failure. */ static int add_soa(struct rrset_cache* rrset_cache, time_t now, struct regional* region, struct dns_msg* msg, struct val_neg_zone* zone) { struct ub_packed_rrset_key* soa; uint8_t* nm; size_t nmlen; uint16_t dclass; if(zone) { nm = zone->name; nmlen = zone->len; dclass = zone->dclass; } else { /* Assumes the signer is the zone SOA to add */ nm = reply_nsec_signer(msg->rep, &nmlen, &dclass); if(!nm) return 0; } soa = rrset_cache_lookup(rrset_cache, nm, nmlen, LDNS_RR_TYPE_SOA, dclass, PACKED_RRSET_SOA_NEG, now, 0); if(!soa) return 0; if(!dns_msg_authadd(msg, region, soa, now)) { lock_rw_unlock(&soa->entry.lock); return 0; } lock_rw_unlock(&soa->entry.lock); return 1; } struct dns_msg* val_neg_getmsg(struct val_neg_cache* neg, struct query_info* qinfo, struct regional* region, struct rrset_cache* rrset_cache, sldns_buffer* buf, time_t now, int addsoa, uint8_t* topname, struct config_file* cfg) { struct dns_msg* msg; struct ub_packed_rrset_key* nsec; /* qname matching/covering nsec */ struct ub_packed_rrset_key* wcrr; /* wildcard record or nsec */ uint8_t* nodata_wc = NULL; uint8_t* ce = NULL; size_t ce_len; uint8_t wc_ce[LDNS_MAX_DOMAINLEN+3]; struct query_info wc_qinfo; struct ub_packed_rrset_key* cache_wc; struct packed_rrset_data* wcrr_data; int rcode = LDNS_RCODE_NOERROR; uint8_t* zname; size_t zname_len; int zname_labs; struct val_neg_zone* zone; /* only for DS queries when aggressive use of NSEC is disabled */ if(qinfo->qtype != LDNS_RR_TYPE_DS && !cfg->aggressive_nsec) return NULL; log_assert(!topname || dname_subdomain_c(qinfo->qname, topname)); /* Get best available NSEC for qname */ nsec = neg_find_nsec(neg, qinfo->qname, qinfo->qname_len, qinfo->qclass, rrset_cache, now, region); /* Matching NSEC, use to generate No Data answer. Not creating answers * yet for No Data proven using wildcard. */ if(nsec && nsec_proves_nodata(nsec, qinfo, &nodata_wc) && !nodata_wc) { if(!(msg = dns_msg_create(qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, region, 2))) return NULL; if(!dns_msg_authadd(msg, region, nsec, 0)) return NULL; if(addsoa && !add_soa(rrset_cache, now, region, msg, NULL)) return NULL; lock_basic_lock(&neg->lock); neg->num_neg_cache_noerror++; lock_basic_unlock(&neg->lock); return msg; } else if(nsec && val_nsec_proves_name_error(nsec, qinfo->qname)) { if(!(msg = dns_msg_create(qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, region, 3))) return NULL; if(!(ce = nsec_closest_encloser(qinfo->qname, nsec))) return NULL; dname_count_size_labels(ce, &ce_len); /* No extra extra NSEC required if both nameerror qname and * nodata *.ce. are proven already. */ if(!nodata_wc || query_dname_compare(nodata_wc, ce) != 0) { /* Qname proven non existing, get wildcard record for * QTYPE or NSEC covering or matching wildcard. */ /* Num labels in ce is always smaller than in qname, * therefore adding the wildcard label cannot overflow * buffer. */ wc_ce[0] = 1; wc_ce[1] = (uint8_t)'*'; memmove(wc_ce+2, ce, ce_len); wc_qinfo.qname = wc_ce; wc_qinfo.qname_len = ce_len + 2; wc_qinfo.qtype = qinfo->qtype; if((cache_wc = rrset_cache_lookup(rrset_cache, wc_qinfo.qname, wc_qinfo.qname_len, wc_qinfo.qtype, qinfo->qclass, 0/*flags*/, now, 0/*read only*/))) { /* Synthesize wildcard answer */ wcrr_data = (struct packed_rrset_data*)cache_wc->entry.data; if(!(wcrr_data->security == sec_status_secure || (wcrr_data->security == sec_status_unchecked && wcrr_data->rrsig_count > 0))) { lock_rw_unlock(&cache_wc->entry.lock); return NULL; } if(!(wcrr = packed_rrset_copy_region(cache_wc, region, now))) { lock_rw_unlock(&cache_wc->entry.lock); return NULL; }; lock_rw_unlock(&cache_wc->entry.lock); wcrr->rk.dname = qinfo->qname; wcrr->rk.dname_len = qinfo->qname_len; if(!dns_msg_ansadd(msg, region, wcrr, 0)) return NULL; /* No SOA needed for wildcard synthesised * answer. */ addsoa = 0; } else { /* Get wildcard NSEC for possible non existence * proof */ if(!(wcrr = neg_find_nsec(neg, wc_qinfo.qname, wc_qinfo.qname_len, qinfo->qclass, rrset_cache, now, region))) return NULL; nodata_wc = NULL; if(val_nsec_proves_name_error(wcrr, wc_ce)) rcode = LDNS_RCODE_NXDOMAIN; else if(!nsec_proves_nodata(wcrr, &wc_qinfo, &nodata_wc) || nodata_wc) /* &nodata_wc shouldn't be set, wc_qinfo * already contains wildcard domain. */ /* NSEC doesn't prove anything for * wildcard. */ return NULL; if(query_dname_compare(wcrr->rk.dname, nsec->rk.dname) != 0) if(!dns_msg_authadd(msg, region, wcrr, 0)) return NULL; } } if(!dns_msg_authadd(msg, region, nsec, 0)) return NULL; if(addsoa && !add_soa(rrset_cache, now, region, msg, NULL)) return NULL; /* Increment statistic counters */ lock_basic_lock(&neg->lock); if(rcode == LDNS_RCODE_NOERROR) neg->num_neg_cache_noerror++; else if(rcode == LDNS_RCODE_NXDOMAIN) neg->num_neg_cache_nxdomain++; lock_basic_unlock(&neg->lock); FLAGS_SET_RCODE(msg->rep->flags, rcode); return msg; } /* No aggressive use of NSEC3 for now, only proceed for DS types. */ if(qinfo->qtype != LDNS_RR_TYPE_DS){ return NULL; } /* check NSEC3 neg cache for type DS */ /* need to look one zone higher for DS type */ zname = qinfo->qname; zname_len = qinfo->qname_len; dname_remove_label(&zname, &zname_len); zname_labs = dname_count_labels(zname); /* lookup closest zone */ lock_basic_lock(&neg->lock); zone = neg_closest_zone_parent(neg, zname, zname_len, zname_labs, qinfo->qclass); while(zone && !zone->in_use) zone = zone->parent; /* check that the zone is not too high up so that we do not pick data * out of a zone that is above the last-seen key (or trust-anchor). */ if(zone && topname) { if(!dname_subdomain_c(zone->name, topname)) zone = NULL; } if(!zone) { lock_basic_unlock(&neg->lock); return NULL; } msg = neg_nsec3_proof_ds(zone, qinfo->qname, qinfo->qname_len, zname_labs+1, buf, rrset_cache, region, now, topname); if(msg && addsoa && !add_soa(rrset_cache, now, region, msg, zone)) { lock_basic_unlock(&neg->lock); return NULL; } lock_basic_unlock(&neg->lock); return msg; } unbound-1.13.1/validator/autotrust.h0000644000175000017500000001455514010434640017121 0ustar wouterwouter/* * validator/autotrust.h - RFC5011 trust anchor management for unbound. * * Copyright (c) 2009, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * Contains autotrust definitions. */ #ifndef VALIDATOR_AUTOTRUST_H #define VALIDATOR_AUTOTRUST_H #include "util/rbtree.h" #include "util/data/packed_rrset.h" struct val_anchors; struct trust_anchor; struct ub_packed_rrset_key; struct module_env; struct module_qstate; struct val_env; struct sldns_buffer; /** Autotrust anchor states */ typedef enum { AUTR_STATE_START = 0, AUTR_STATE_ADDPEND = 1, AUTR_STATE_VALID = 2, AUTR_STATE_MISSING = 3, AUTR_STATE_REVOKED = 4, AUTR_STATE_REMOVED = 5 } autr_state_type; /** * Autotrust metadata for one trust anchor key. */ struct autr_ta { /** next key */ struct autr_ta* next; /** the RR */ uint8_t* rr; /** length of rr */ size_t rr_len, dname_len; /** last update of key state (new pending count keeps date the same) */ time_t last_change; /** 5011 state */ autr_state_type s; /** pending count */ uint8_t pending_count; /** fresh TA was seen */ uint8_t fetched; /** revoked TA was seen */ uint8_t revoked; }; /** * Autotrust metadata for a trust point. * This is part of the struct trust_anchor data. */ struct autr_point_data { /** file to store the trust point in. chrootdir already applied. */ char* file; /** rbtree node for probe sort, key is struct trust_anchor */ rbnode_type pnode; /** the keys */ struct autr_ta* keys; /** last queried DNSKEY set * Not all failures are captured in this entry. * If the validator did not even start (e.g. timeout or localservfail), * then the last_queried and query_failed values are not updated. */ time_t last_queried; /** last successful DNSKEY set */ time_t last_success; /** next probe time */ time_t next_probe_time; /** when to query if !failed */ time_t query_interval; /** when to retry if failed */ time_t retry_time; /** * How many times did it fail. diagnostic only (has no effect). * Only updated if there was a dnskey rrset that failed to verify. */ uint8_t query_failed; /** true if the trust point has been revoked */ uint8_t revoked; }; /** * Autotrust global metadata. */ struct autr_global_data { /** rbtree of autotrust anchors sorted by next probe time. * When time is equal, sorted by anchor class, name. */ rbtree_type probe; }; /** * Create new global 5011 data structure. * @return new structure or NULL on malloc failure. */ struct autr_global_data* autr_global_create(void); /** * Delete global 5011 data structure. * @param global: global autotrust state to delete. */ void autr_global_delete(struct autr_global_data* global); /** * See if autotrust anchors are configured and how many. * @param anchors: the trust anchors structure. * @return number of autotrust trust anchors */ size_t autr_get_num_anchors(struct val_anchors* anchors); /** * Process probe timer. Add new probes if needed. * @param env: module environment with time, with anchors and with the mesh. * @return time of next probe (in seconds from now). * If 0, then there is no next probe anymore (trust points deleted). */ time_t autr_probe_timer(struct module_env* env); /** probe tree compare function */ int probetree_cmp(const void* x, const void* y); /** * Read autotrust file. * @param anchors: the anchors structure. * @param nm: name of the file (copied). * @return false on failure. */ int autr_read_file(struct val_anchors* anchors, const char* nm); /** * Write autotrust file. * @param env: environment with scratch space. * @param tp: trust point to write. */ void autr_write_file(struct module_env* env, struct trust_anchor* tp); /** * Delete autr anchor, deletes the autr data but does not do * unlinking from trees, caller does that. * @param tp: trust point to delete. */ void autr_point_delete(struct trust_anchor* tp); /** * Perform autotrust processing. * @param env: qstate environment with the anchors structure. * @param ve: validator environment for verification of rrsigs. * @param tp: trust anchor to process. * @param dnskey_rrset: DNSKEY rrset probed (can be NULL if bad prime result). * allocated in a region. Has not been validated yet. * @param qstate: qstate with region. * @return false if trust anchor was revoked completely. * Otherwise logs errors to log, does not change return value. * On errors, likely the trust point has been unchanged. */ int autr_process_prime(struct module_env* env, struct val_env* ve, struct trust_anchor* tp, struct ub_packed_rrset_key* dnskey_rrset, struct module_qstate* qstate); /** * Debug printout of rfc5011 tracked anchors * @param anchors: all the anchors. */ void autr_debug_print(struct val_anchors* anchors); /** callback for query answer to 5011 probe */ void probe_answer_cb(void* arg, int rcode, struct sldns_buffer* buf, enum sec_status sec, char* errinf, int was_ratelimited); #endif /* VALIDATOR_AUTOTRUST_H */ unbound-1.13.1/validator/val_kentry.c0000644000175000017500000002477514010434640017225 0ustar wouterwouter/* * validator/val_kentry.c - validator key entry definition. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for dealing with validator key entries. */ #include "config.h" #include "validator/val_kentry.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "util/storage/lookup3.h" #include "util/regional.h" #include "util/net_help.h" #include "sldns/rrdef.h" #include "sldns/keyraw.h" size_t key_entry_sizefunc(void* key, void* data) { struct key_entry_key* kk = (struct key_entry_key*)key; struct key_entry_data* kd = (struct key_entry_data*)data; size_t s = sizeof(*kk) + kk->namelen; s += sizeof(*kd) + lock_get_mem(&kk->entry.lock); if(kd->rrset_data) s += packed_rrset_sizeof(kd->rrset_data); if(kd->reason) s += strlen(kd->reason)+1; if(kd->algo) s += strlen((char*)kd->algo)+1; return s; } int key_entry_compfunc(void* k1, void* k2) { struct key_entry_key* n1 = (struct key_entry_key*)k1; struct key_entry_key* n2 = (struct key_entry_key*)k2; if(n1->key_class != n2->key_class) { if(n1->key_class < n2->key_class) return -1; return 1; } return query_dname_compare(n1->name, n2->name); } void key_entry_delkeyfunc(void* key, void* ATTR_UNUSED(userarg)) { struct key_entry_key* kk = (struct key_entry_key*)key; if(!key) return; lock_rw_destroy(&kk->entry.lock); free(kk->name); free(kk); } void key_entry_deldatafunc(void* data, void* ATTR_UNUSED(userarg)) { struct key_entry_data* kd = (struct key_entry_data*)data; free(kd->reason); free(kd->rrset_data); free(kd->algo); free(kd); } void key_entry_hash(struct key_entry_key* kk) { kk->entry.hash = 0x654; kk->entry.hash = hashlittle(&kk->key_class, sizeof(kk->key_class), kk->entry.hash); kk->entry.hash = dname_query_hash(kk->name, kk->entry.hash); } struct key_entry_key* key_entry_copy_toregion(struct key_entry_key* kkey, struct regional* region) { struct key_entry_key* newk; newk = regional_alloc_init(region, kkey, sizeof(*kkey)); if(!newk) return NULL; newk->name = regional_alloc_init(region, kkey->name, kkey->namelen); if(!newk->name) return NULL; newk->entry.key = newk; if(newk->entry.data) { /* copy data element */ struct key_entry_data *d = (struct key_entry_data*) kkey->entry.data; struct key_entry_data *newd; newd = regional_alloc_init(region, d, sizeof(*d)); if(!newd) return NULL; /* copy rrset */ if(d->rrset_data) { newd->rrset_data = regional_alloc_init(region, d->rrset_data, packed_rrset_sizeof(d->rrset_data)); if(!newd->rrset_data) return NULL; packed_rrset_ptr_fixup(newd->rrset_data); } if(d->reason) { newd->reason = regional_strdup(region, d->reason); if(!newd->reason) return NULL; } if(d->algo) { newd->algo = (uint8_t*)regional_strdup(region, (char*)d->algo); if(!newd->algo) return NULL; } newk->entry.data = newd; } return newk; } struct key_entry_key* key_entry_copy(struct key_entry_key* kkey) { struct key_entry_key* newk; if(!kkey) return NULL; newk = memdup(kkey, sizeof(*kkey)); if(!newk) return NULL; newk->name = memdup(kkey->name, kkey->namelen); if(!newk->name) { free(newk); return NULL; } lock_rw_init(&newk->entry.lock); newk->entry.key = newk; if(newk->entry.data) { /* copy data element */ struct key_entry_data *d = (struct key_entry_data*) kkey->entry.data; struct key_entry_data *newd; newd = memdup(d, sizeof(*d)); if(!newd) { free(newk->name); free(newk); return NULL; } /* copy rrset */ if(d->rrset_data) { newd->rrset_data = memdup(d->rrset_data, packed_rrset_sizeof(d->rrset_data)); if(!newd->rrset_data) { free(newd); free(newk->name); free(newk); return NULL; } packed_rrset_ptr_fixup(newd->rrset_data); } if(d->reason) { newd->reason = strdup(d->reason); if(!newd->reason) { free(newd->rrset_data); free(newd); free(newk->name); free(newk); return NULL; } } if(d->algo) { newd->algo = (uint8_t*)strdup((char*)d->algo); if(!newd->algo) { free(newd->rrset_data); free(newd->reason); free(newd); free(newk->name); free(newk); return NULL; } } newk->entry.data = newd; } return newk; } int key_entry_isnull(struct key_entry_key* kkey) { struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data; return (!d->isbad && d->rrset_data == NULL); } int key_entry_isgood(struct key_entry_key* kkey) { struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data; return (!d->isbad && d->rrset_data != NULL); } int key_entry_isbad(struct key_entry_key* kkey) { struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data; return (int)(d->isbad); } void key_entry_set_reason(struct key_entry_key* kkey, char* reason) { struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data; d->reason = reason; } char* key_entry_get_reason(struct key_entry_key* kkey) { struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data; return d->reason; } /** setup key entry in region */ static int key_entry_setup(struct regional* region, uint8_t* name, size_t namelen, uint16_t dclass, struct key_entry_key** k, struct key_entry_data** d) { *k = regional_alloc(region, sizeof(**k)); if(!*k) return 0; memset(*k, 0, sizeof(**k)); (*k)->entry.key = *k; (*k)->name = regional_alloc_init(region, name, namelen); if(!(*k)->name) return 0; (*k)->namelen = namelen; (*k)->key_class = dclass; *d = regional_alloc(region, sizeof(**d)); if(!*d) return 0; (*k)->entry.data = *d; return 1; } struct key_entry_key* key_entry_create_null(struct regional* region, uint8_t* name, size_t namelen, uint16_t dclass, time_t ttl, time_t now) { struct key_entry_key* k; struct key_entry_data* d; if(!key_entry_setup(region, name, namelen, dclass, &k, &d)) return NULL; d->ttl = now + ttl; d->isbad = 0; d->reason = NULL; d->rrset_type = LDNS_RR_TYPE_DNSKEY; d->rrset_data = NULL; d->algo = NULL; return k; } struct key_entry_key* key_entry_create_rrset(struct regional* region, uint8_t* name, size_t namelen, uint16_t dclass, struct ub_packed_rrset_key* rrset, uint8_t* sigalg, time_t now) { struct key_entry_key* k; struct key_entry_data* d; struct packed_rrset_data* rd = (struct packed_rrset_data*) rrset->entry.data; if(!key_entry_setup(region, name, namelen, dclass, &k, &d)) return NULL; d->ttl = rd->ttl + now; d->isbad = 0; d->reason = NULL; d->rrset_type = ntohs(rrset->rk.type); d->rrset_data = (struct packed_rrset_data*)regional_alloc_init(region, rd, packed_rrset_sizeof(rd)); if(!d->rrset_data) return NULL; if(sigalg) { d->algo = (uint8_t*)regional_strdup(region, (char*)sigalg); if(!d->algo) return NULL; } else d->algo = NULL; packed_rrset_ptr_fixup(d->rrset_data); return k; } struct key_entry_key* key_entry_create_bad(struct regional* region, uint8_t* name, size_t namelen, uint16_t dclass, time_t ttl, time_t now) { struct key_entry_key* k; struct key_entry_data* d; if(!key_entry_setup(region, name, namelen, dclass, &k, &d)) return NULL; d->ttl = now + ttl; d->isbad = 1; d->reason = NULL; d->rrset_type = LDNS_RR_TYPE_DNSKEY; d->rrset_data = NULL; d->algo = NULL; return k; } struct ub_packed_rrset_key* key_entry_get_rrset(struct key_entry_key* kkey, struct regional* region) { struct key_entry_data* d = (struct key_entry_data*)kkey->entry.data; struct ub_packed_rrset_key* rrk; struct packed_rrset_data* rrd; if(!d || !d->rrset_data) return NULL; rrk = regional_alloc(region, sizeof(*rrk)); if(!rrk) return NULL; memset(rrk, 0, sizeof(*rrk)); rrk->rk.dname = regional_alloc_init(region, kkey->name, kkey->namelen); if(!rrk->rk.dname) return NULL; rrk->rk.dname_len = kkey->namelen; rrk->rk.type = htons(d->rrset_type); rrk->rk.rrset_class = htons(kkey->key_class); rrk->entry.key = rrk; rrd = regional_alloc_init(region, d->rrset_data, packed_rrset_sizeof(d->rrset_data)); if(!rrd) return NULL; rrk->entry.data = rrd; packed_rrset_ptr_fixup(rrd); return rrk; } /** Get size of key in keyset */ static size_t dnskey_get_keysize(struct packed_rrset_data* data, size_t idx) { unsigned char* pk; unsigned int pklen = 0; int algo; if(data->rr_len[idx] < 2+5) return 0; algo = (int)data->rr_data[idx][2+3]; pk = (unsigned char*)data->rr_data[idx]+2+4; pklen = (unsigned)data->rr_len[idx]-2-4; return sldns_rr_dnskey_key_size_raw(pk, pklen, algo); } /** get dnskey flags from data */ static uint16_t kd_get_flags(struct packed_rrset_data* data, size_t idx) { uint16_t f; if(data->rr_len[idx] < 2+2) return 0; memmove(&f, data->rr_data[idx]+2, 2); f = ntohs(f); return f; } size_t key_entry_keysize(struct key_entry_key* kkey) { struct packed_rrset_data* d; /* compute size of smallest ZSK key in the rrset */ size_t i; size_t bits = 0; if(!key_entry_isgood(kkey)) return 0; d = ((struct key_entry_data*)kkey->entry.data)->rrset_data; for(i=0; icount; i++) { if(!(kd_get_flags(d, i) & DNSKEY_BIT_ZSK)) continue; if(i==0 || dnskey_get_keysize(d, i) < bits) bits = dnskey_get_keysize(d, i); } return bits; } unbound-1.13.1/validator/val_sigcrypt.h0000644000175000017500000003103114010434640017541 0ustar wouterwouter/* * validator/val_sigcrypt.h - validator signature crypto functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains helper functions for the validator module. * The functions help with signature verification and checking, the * bridging between RR wireformat data and crypto calls. */ #ifndef VALIDATOR_VAL_SIGCRYPT_H #define VALIDATOR_VAL_SIGCRYPT_H #include "util/data/packed_rrset.h" #include "sldns/pkthdr.h" struct val_env; struct module_env; struct module_qstate; struct ub_packed_rrset_key; struct rbtree_type; struct regional; struct sldns_buffer; /** number of entries in algorithm needs array */ #define ALGO_NEEDS_MAX 256 /** * Storage for algorithm needs. DNSKEY algorithms. */ struct algo_needs { /** the algorithms (8-bit) with each a number. * 0: not marked. * 1: marked 'necessary but not yet fulfilled' * 2: marked bogus. * Indexed by algorithm number. */ uint8_t needs[ALGO_NEEDS_MAX]; /** the number of entries in the array that are unfulfilled */ size_t num; }; /** * Initialize algo needs structure, set algos from rrset as needed. * Results are added to an existing need structure. * @param n: struct with storage. * @param dnskey: algos from this struct set as necessary. DNSKEY set. * @param sigalg: adds to signalled algorithm list too. */ void algo_needs_init_dnskey_add(struct algo_needs* n, struct ub_packed_rrset_key* dnskey, uint8_t* sigalg); /** * Initialize algo needs structure from a signalled algo list. * @param n: struct with storage. * @param sigalg: signalled algorithm list, numbers ends with 0. */ void algo_needs_init_list(struct algo_needs* n, uint8_t* sigalg); /** * Initialize algo needs structure, set algos from rrset as needed. * @param n: struct with storage. * @param ds: algos from this struct set as necessary. DS set. * @param fav_ds_algo: filter to use only this DS algo. * @param sigalg: list of signalled algos, constructed as output, * provide size ALGO_NEEDS_MAX+1. list of algonumbers, ends with a zero. */ void algo_needs_init_ds(struct algo_needs* n, struct ub_packed_rrset_key* ds, int fav_ds_algo, uint8_t* sigalg); /** * Mark this algorithm as a success, sec_secure, and see if we are done. * @param n: storage structure processed. * @param algo: the algorithm processed to be secure. * @return if true, processing has finished successfully, we are satisfied. */ int algo_needs_set_secure(struct algo_needs* n, uint8_t algo); /** * Mark this algorithm a failure, sec_bogus. It can later be overridden * by a success for this algorithm (with a different signature). * @param n: storage structure processed. * @param algo: the algorithm processed to be bogus. */ void algo_needs_set_bogus(struct algo_needs* n, uint8_t algo); /** * See how many algorithms are missing (not bogus or secure, but not processed) * @param n: storage structure processed. * @return number of algorithms missing after processing. */ size_t algo_needs_num_missing(struct algo_needs* n); /** * See which algo is missing. * @param n: struct after processing. * @return if 0 an algorithm was bogus, if a number, this algorithm was * missing. So on 0, report why that was bogus, on number report a missing * algorithm. There could be multiple missing, this reports the first one. */ int algo_needs_missing(struct algo_needs* n); /** * Format error reason for algorithm missing. * @param env: module env with scratch for temp storage of string. * @param alg: DNSKEY-algorithm missing. * @param reason: destination. * @param s: string, appended with 'with algorithm ..'. */ void algo_needs_reason(struct module_env* env, int alg, char** reason, char* s); /** * Check if dnskey matches a DS digest * Does not check dnskey-keyid footprint, just the digest. * @param env: module environment. Uses scratch space. * @param dnskey_rrset: DNSKEY rrset. * @param dnskey_idx: index of RR in rrset. * @param ds_rrset: DS rrset * @param ds_idx: index of RR in DS rrset. * @return true if it matches, false on error, not supported or no match. */ int ds_digest_match_dnskey(struct module_env* env, struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx, struct ub_packed_rrset_key* ds_rrset, size_t ds_idx); /** * Get dnskey keytag, footprint value * @param dnskey_rrset: DNSKEY rrset. * @param dnskey_idx: index of RR in rrset. * @return the keytag or 0 for badly formatted DNSKEYs. */ uint16_t dnskey_calc_keytag(struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx); /** * Get DS keytag, footprint value that matches the DNSKEY keytag it signs. * @param ds_rrset: DS rrset * @param ds_idx: index of RR in DS rrset. * @return the keytag or 0 for badly formatted DSs. */ uint16_t ds_get_keytag(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx); /** * See if DNSKEY algorithm is supported * @param dnskey_rrset: DNSKEY rrset. * @param dnskey_idx: index of RR in rrset. * @return true if supported. */ int dnskey_algo_is_supported(struct ub_packed_rrset_key* dnskey_rrset, size_t dnskey_idx); /** * See if DS digest algorithm is supported * @param ds_rrset: DS rrset * @param ds_idx: index of RR in DS rrset. * @return true if supported. */ int ds_digest_algo_is_supported(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx); /** * Get DS RR digest algorithm * @param ds_rrset: DS rrset. * @param ds_idx: which DS. * @return algorithm or 0 if DS too short. */ int ds_get_digest_algo(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx); /** * See if DS key algorithm is supported * @param ds_rrset: DS rrset * @param ds_idx: index of RR in DS rrset. * @return true if supported. */ int ds_key_algo_is_supported(struct ub_packed_rrset_key* ds_rrset, size_t ds_idx); /** * Get DS RR key algorithm. This value should match with the DNSKEY algo. * @param k: DS rrset. * @param idx: which DS. * @return algorithm or 0 if DS too short. */ int ds_get_key_algo(struct ub_packed_rrset_key* k, size_t idx); /** * Get DNSKEY RR signature algorithm * @param k: DNSKEY rrset. * @param idx: which DNSKEY RR. * @return algorithm or 0 if DNSKEY too short. */ int dnskey_get_algo(struct ub_packed_rrset_key* k, size_t idx); /** * Get DNSKEY RR flags * @param k: DNSKEY rrset. * @param idx: which DNSKEY RR. * @return flags or 0 if DNSKEY too short. */ uint16_t dnskey_get_flags(struct ub_packed_rrset_key* k, size_t idx); /** * Verify rrset against dnskey rrset. * @param env: module environment, scratch space is used. * @param ve: validator environment, date settings. * @param rrset: to be validated. * @param dnskey: DNSKEY rrset, keyset to try. * @param sigalg: if nonNULL provide downgrade protection otherwise one * algorithm is enough. * @param reason: if bogus, a string returned, fixed or alloced in scratch. * @param section: section of packet where this rrset comes from. * @param qstate: qstate with region. * @return SECURE if one key in the set verifies one rrsig. * UNCHECKED on allocation errors, unsupported algorithms, malformed data, * and BOGUS on verification failures (no keys match any signatures). */ enum sec_status dnskeyset_verify_rrset(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, uint8_t* sigalg, char** reason, sldns_pkt_section section, struct module_qstate* qstate); /** * verify rrset against one specific dnskey (from rrset) * @param env: module environment, scratch space is used. * @param ve: validator environment, date settings. * @param rrset: to be validated. * @param dnskey: DNSKEY rrset, keyset. * @param dnskey_idx: which key from the rrset to try. * @param reason: if bogus, a string returned, fixed or alloced in scratch. * @param section: section of packet where this rrset comes from. * @param qstate: qstate with region. * @return secure if *this* key signs any of the signatures on rrset. * unchecked on error or and bogus on bad signature. */ enum sec_status dnskey_verify_rrset(struct module_env* env, struct val_env* ve, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t dnskey_idx, char** reason, sldns_pkt_section section, struct module_qstate* qstate); /** * verify rrset, with dnskey rrset, for a specific rrsig in rrset * @param env: module environment, scratch space is used. * @param ve: validator environment, date settings. * @param now: current time for validation (can be overridden). * @param rrset: to be validated. * @param dnskey: DNSKEY rrset, keyset to try. * @param sig_idx: which signature to try to validate. * @param sortree: reused sorted order. Stored in region. Pass NULL at start, * and for a new rrset. * @param reason: if bogus, a string returned, fixed or alloced in scratch. * @param section: section of packet where this rrset comes from. * @param qstate: qstate with region. * @return secure if any key signs *this* signature. bogus if no key signs it, * or unchecked on error. */ enum sec_status dnskeyset_verify_rrset_sig(struct module_env* env, struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t sig_idx, struct rbtree_type** sortree, char** reason, sldns_pkt_section section, struct module_qstate* qstate); /** * verify rrset, with specific dnskey(from set), for a specific rrsig * @param region: scratch region used for temporary allocation. * @param buf: scratch buffer used for canonicalized rrset data. * @param ve: validator environment, date settings. * @param now: current time for validation (can be overridden). * @param rrset: to be validated. * @param dnskey: DNSKEY rrset, keyset. * @param dnskey_idx: which key from the rrset to try. * @param sig_idx: which signature to try to validate. * @param sortree: pass NULL at start, the sorted rrset order is returned. * pass it again for the same rrset. * @param buf_canon: if true, the buffer is already canonical. * pass false at start. pass old value only for same rrset and same * signature (but perhaps different key) for reuse. * @param reason: if bogus, a string returned, fixed or alloced in scratch. * @param section: section of packet where this rrset comes from. * @param qstate: qstate with region. * @return secure if this key signs this signature. unchecked on error or * bogus if it did not validate. */ enum sec_status dnskey_verify_rrset_sig(struct regional* region, struct sldns_buffer* buf, struct val_env* ve, time_t now, struct ub_packed_rrset_key* rrset, struct ub_packed_rrset_key* dnskey, size_t dnskey_idx, size_t sig_idx, struct rbtree_type** sortree, int* buf_canon, char** reason, sldns_pkt_section section, struct module_qstate* qstate); /** * canonical compare for two tree entries */ int canonical_tree_compare(const void* k1, const void* k2); /** * Compare two rrsets and see if they are the same, canonicalised. * The rrsets are not altered. * @param region: temporary region. * @param k1: rrset1 * @param k2: rrset2 * @return true if equal. */ int rrset_canonical_equal(struct regional* region, struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2); #endif /* VALIDATOR_VAL_SIGCRYPT_H */ unbound-1.13.1/services/0000755000175000017500000000000014010434640014522 5ustar wouterwouterunbound-1.13.1/services/modstack.c0000644000175000017500000001700714010434640016500 0ustar wouterwouter/* * services/modstack.c - stack of modules * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to help maintain a stack of modules. */ #include "config.h" #include #include "services/modstack.h" #include "util/module.h" #include "util/fptr_wlist.h" #include "dns64/dns64.h" #include "iterator/iterator.h" #include "validator/validator.h" #include "respip/respip.h" #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif #ifdef WITH_DYNLIBMODULE #include "dynlibmod/dynlibmod.h" #endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif #ifdef USE_IPSECMOD #include "ipsecmod/ipsecmod.h" #endif #ifdef CLIENT_SUBNET #include "edns-subnet/subnetmod.h" #endif #ifdef USE_IPSET #include "ipset/ipset.h" #endif /** count number of modules (words) in the string */ static int count_modules(const char* s) { int num = 0; if(!s) return 0; while(*s) { /* skip whitespace */ while(*s && isspace((unsigned char)*s)) s++; if(*s && !isspace((unsigned char)*s)) { /* skip identifier */ num++; while(*s && !isspace((unsigned char)*s)) s++; } } return num; } void modstack_init(struct module_stack* stack) { stack->num = 0; stack->mod = NULL; } int modstack_config(struct module_stack* stack, const char* module_conf) { int i; verbose(VERB_QUERY, "module config: \"%s\"", module_conf); stack->num = count_modules(module_conf); if(stack->num == 0) { log_err("error: no modules specified"); return 0; } if(stack->num > MAX_MODULE) { log_err("error: too many modules (%d max %d)", stack->num, MAX_MODULE); return 0; } stack->mod = (struct module_func_block**)calloc((size_t) stack->num, sizeof(struct module_func_block*)); if(!stack->mod) { log_err("out of memory"); return 0; } for(i=0; inum; i++) { stack->mod[i] = module_factory(&module_conf); if(!stack->mod[i]) { char md[256]; snprintf(md, sizeof(md), "%s", module_conf); if(strchr(md, ' ')) *(strchr(md, ' ')) = 0; if(strchr(md, '\t')) *(strchr(md, '\t')) = 0; log_err("Unknown value in module-config, module: '%s'." " This module is not present (not compiled in)," " See the list of linked modules with unbound -h", md); return 0; } } return 1; } /** The list of module names */ const char** module_list_avail(void) { /* these are the modules available */ static const char* names[] = { "dns64", #ifdef WITH_PYTHONMODULE "python", #endif #ifdef WITH_DYNLIBMODULE "dynlib", #endif #ifdef USE_CACHEDB "cachedb", #endif #ifdef USE_IPSECMOD "ipsecmod", #endif #ifdef CLIENT_SUBNET "subnetcache", #endif #ifdef USE_IPSET "ipset", #endif "respip", "validator", "iterator", NULL}; return names; } /** func block get function type */ typedef struct module_func_block* (*fbgetfunctype)(void); /** The list of module func blocks */ static fbgetfunctype* module_funcs_avail(void) { static struct module_func_block* (*fb[])(void) = { &dns64_get_funcblock, #ifdef WITH_PYTHONMODULE &pythonmod_get_funcblock, #endif #ifdef WITH_DYNLIBMODULE &dynlibmod_get_funcblock, #endif #ifdef USE_CACHEDB &cachedb_get_funcblock, #endif #ifdef USE_IPSECMOD &ipsecmod_get_funcblock, #endif #ifdef CLIENT_SUBNET &subnetmod_get_funcblock, #endif #ifdef USE_IPSET &ipset_get_funcblock, #endif &respip_get_funcblock, &val_get_funcblock, &iter_get_funcblock, NULL}; return fb; } struct module_func_block* module_factory(const char** str) { int i = 0; const char* s = *str; const char** names = module_list_avail(); fbgetfunctype* fb = module_funcs_avail(); while(*s && isspace((unsigned char)*s)) s++; while(names[i]) { if(strncmp(names[i], s, strlen(names[i])) == 0) { s += strlen(names[i]); *str = s; return (*fb[i])(); } i++; } return NULL; } int modstack_setup(struct module_stack* stack, const char* module_conf, struct module_env* env) { int i; if(stack->num != 0) modstack_desetup(stack, env); /* fixed setup of the modules */ if(!modstack_config(stack, module_conf)) { return 0; } env->need_to_validate = 0; /* set by module init below */ for(i=0; inum; i++) { verbose(VERB_OPS, "init module %d: %s", i, stack->mod[i]->name); fptr_ok(fptr_whitelist_mod_init(stack->mod[i]->init)); if(!(*stack->mod[i]->init)(env, i)) { log_err("module init for module %s failed", stack->mod[i]->name); return 0; } } return 1; } void modstack_desetup(struct module_stack* stack, struct module_env* env) { int i; for(i=0; inum; i++) { fptr_ok(fptr_whitelist_mod_deinit(stack->mod[i]->deinit)); (*stack->mod[i]->deinit)(env, i); } stack->num = 0; free(stack->mod); stack->mod = NULL; } int modstack_find(struct module_stack* stack, const char* name) { int i; for(i=0; inum; i++) { if(strcmp(stack->mod[i]->name, name) == 0) return i; } return -1; } size_t mod_get_mem(struct module_env* env, const char* name) { int m = modstack_find(&env->mesh->mods, name); if(m != -1) { fptr_ok(fptr_whitelist_mod_get_mem(env->mesh-> mods.mod[m]->get_mem)); return (*env->mesh->mods.mod[m]->get_mem)(env, m); } return 0; } unbound-1.13.1/services/view.h0000644000175000017500000000762114010434640015653 0ustar wouterwouter/* * services/view.h - named views containing local zones authority service. * * Copyright (c) 2016, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to enable named views that can hold local zone * authority service. */ #ifndef SERVICES_VIEW_H #define SERVICES_VIEW_H #include "util/rbtree.h" #include "util/locks.h" struct regional; struct config_file; struct config_view; struct respip_set; /** * Views storage, shared. */ struct views { /** lock on the view tree */ lock_rw_type lock; /** rbtree of struct view */ rbtree_type vtree; }; /** * View. Named structure holding local authority zones. */ struct view { /** rbtree node, key is name */ rbnode_type node; /** view name. * Has to be right after rbnode_t due to pointer arithmetic in * view_create's lock protect */ char* name; /** view specific local authority zones */ struct local_zones* local_zones; /** response-ip configuration data for this view */ struct respip_set* respip_set; /** Fallback to global local_zones when there is no match in the view * specific tree. 1 for yes, 0 for no */ int isfirst; /** lock on the data in the structure * For the node and name you need to also hold the views_tree lock to * change them. */ lock_rw_type lock; }; /** * Create views storage * @return new struct or NULL on error. */ struct views* views_create(void); /** * Delete views storage * @param v: views to delete. */ void views_delete(struct views* v); /** * Apply config settings; * Takes care of locking. * @param v: view is set up. * @param cfg: config data. * @return false on error. */ int views_apply_cfg(struct views* v, struct config_file* cfg); /** * Compare two view entries in rbtree. Sort canonical. * @param v1: view 1 * @param v2: view 2 * @return: negative, positive or 0 comparison value. */ int view_cmp(const void* v1, const void* v2); /** * Delete one view * @param v: view to delete. */ void view_delete(struct view* v); /** * Debug helper. Print all views * Takes care of locking. * @param v: the views tree */ void views_print(struct views* v); /* Find a view by name. * @param vs: views * @param name: name of the view we are looking for * @param write: 1 for obtaining write lock on found view, 0 for read lock * @return: locked view or NULL. */ struct view* views_find_view(struct views* vs, const char* name, int write); #endif /* SERVICES_VIEW_H */ unbound-1.13.1/services/localzone.c0000644000175000017500000017252414010434640016667 0ustar wouterwouter/* * services/localzone.c - local zones authority service. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to enable local zone authority service. */ #include "config.h" #include "services/localzone.h" #include "sldns/str2wire.h" #include "util/regional.h" #include "util/config_file.h" #include "util/data/dname.h" #include "util/data/packed_rrset.h" #include "util/data/msgencode.h" #include "util/net_help.h" #include "util/netevent.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" #include "util/as112.h" /* maximum RRs in an RRset, to cap possible 'endless' list RRs. * with 16 bytes for an A record, a 64K packet has about 4000 max */ #define LOCALZONE_RRSET_COUNT_MAX 4096 struct local_zones* local_zones_create(void) { struct local_zones* zones = (struct local_zones*)calloc(1, sizeof(*zones)); if(!zones) return NULL; rbtree_init(&zones->ztree, &local_zone_cmp); lock_rw_init(&zones->lock); lock_protect(&zones->lock, &zones->ztree, sizeof(zones->ztree)); /* also lock protects the rbnode's in struct local_zone */ return zones; } /** helper traverse to delete zones */ static void lzdel(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct local_zone* z = (struct local_zone*)n->key; local_zone_delete(z); } void local_zones_delete(struct local_zones* zones) { if(!zones) return; lock_rw_destroy(&zones->lock); /* walk through zones and delete them all */ traverse_postorder(&zones->ztree, lzdel, NULL); free(zones); } void local_zone_delete(struct local_zone* z) { if(!z) return; lock_rw_destroy(&z->lock); regional_destroy(z->region); free(z->name); free(z->taglist); free(z); } int local_zone_cmp(const void* z1, const void* z2) { /* first sort on class, so that hierarchy can be maintained within * a class */ struct local_zone* a = (struct local_zone*)z1; struct local_zone* b = (struct local_zone*)z2; int m; if(a->dclass != b->dclass) { if(a->dclass < b->dclass) return -1; return 1; } return dname_lab_cmp(a->name, a->namelabs, b->name, b->namelabs, &m); } int local_data_cmp(const void* d1, const void* d2) { struct local_data* a = (struct local_data*)d1; struct local_data* b = (struct local_data*)d2; int m; return dname_canon_lab_cmp(a->name, a->namelabs, b->name, b->namelabs, &m); } /* form wireformat from text format domain name */ int parse_dname(const char* str, uint8_t** res, size_t* len, int* labs) { *res = sldns_str2wire_dname(str, len); *labs = 0; if(!*res) { log_err("cannot parse name %s", str); return 0; } *labs = dname_count_size_labels(*res, len); return 1; } /** create a new localzone */ static struct local_zone* local_zone_create(uint8_t* nm, size_t len, int labs, enum localzone_type t, uint16_t dclass) { struct local_zone* z = (struct local_zone*)calloc(1, sizeof(*z)); if(!z) { return NULL; } z->node.key = z; z->dclass = dclass; z->type = t; z->name = nm; z->namelen = len; z->namelabs = labs; lock_rw_init(&z->lock); z->region = regional_create_nochunk(sizeof(struct regional)); if(!z->region) { free(z); return NULL; } rbtree_init(&z->data, &local_data_cmp); lock_protect(&z->lock, &z->parent, sizeof(*z)-sizeof(rbnode_type)); /* also the zones->lock protects node, parent, name*, class */ return z; } /** enter a new zone with allocated dname returns with WRlock */ static struct local_zone* lz_enter_zone_dname(struct local_zones* zones, uint8_t* nm, size_t len, int labs, enum localzone_type t, uint16_t c) { struct local_zone* z = local_zone_create(nm, len, labs, t, c); if(!z) { free(nm); log_err("out of memory"); return NULL; } /* add to rbtree */ lock_rw_wrlock(&zones->lock); lock_rw_wrlock(&z->lock); if(!rbtree_insert(&zones->ztree, &z->node)) { struct local_zone* oldz; char str[256]; dname_str(nm, str); log_warn("duplicate local-zone %s", str); lock_rw_unlock(&z->lock); /* save zone name locally before deallocation, * otherwise, nm is gone if we zone_delete now. */ oldz = z; /* find the correct zone, so not an error for duplicate */ z = local_zones_find(zones, nm, len, labs, c); lock_rw_wrlock(&z->lock); lock_rw_unlock(&zones->lock); local_zone_delete(oldz); return z; } lock_rw_unlock(&zones->lock); return z; } /** enter a new zone */ static struct local_zone* lz_enter_zone(struct local_zones* zones, const char* name, const char* type, uint16_t dclass) { struct local_zone* z; enum localzone_type t; uint8_t* nm; size_t len; int labs; if(!parse_dname(name, &nm, &len, &labs)) { log_err("bad zone name %s %s", name, type); return NULL; } if(!local_zone_str2type(type, &t)) { log_err("bad lz_enter_zone type %s %s", name, type); free(nm); return NULL; } if(!(z=lz_enter_zone_dname(zones, nm, len, labs, t, dclass))) { log_err("could not enter zone %s %s", name, type); return NULL; } return z; } int rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type, uint16_t* dclass, time_t* ttl, uint8_t* rr, size_t len, uint8_t** rdata, size_t* rdata_len) { size_t dname_len = 0; int e = sldns_str2wire_rr_buf(str, rr, &len, &dname_len, 3600, NULL, 0, NULL, 0); if(e) { log_err("error parsing local-data at %d: '%s': %s", LDNS_WIREPARSE_OFFSET(e), str, sldns_get_errorstr_parse(e)); return 0; } *nm = memdup(rr, dname_len); if(!*nm) { log_err("out of memory"); return 0; } *dclass = sldns_wirerr_get_class(rr, len, dname_len); *type = sldns_wirerr_get_type(rr, len, dname_len); *ttl = (time_t)sldns_wirerr_get_ttl(rr, len, dname_len); *rdata = sldns_wirerr_get_rdatawl(rr, len, dname_len); *rdata_len = sldns_wirerr_get_rdatalen(rr, len, dname_len)+2; return 1; } /** return name and class of rr; parses string */ static int get_rr_nameclass(const char* str, uint8_t** nm, uint16_t* dclass, uint16_t* dtype) { uint8_t rr[LDNS_RR_BUF_SIZE]; size_t len = sizeof(rr), dname_len = 0; int s = sldns_str2wire_rr_buf(str, rr, &len, &dname_len, 3600, NULL, 0, NULL, 0); if(s != 0) { log_err("error parsing local-data at %d '%s': %s", LDNS_WIREPARSE_OFFSET(s), str, sldns_get_errorstr_parse(s)); return 0; } *nm = memdup(rr, dname_len); *dclass = sldns_wirerr_get_class(rr, len, dname_len); *dtype = sldns_wirerr_get_type(rr, len, dname_len); if(!*nm) { log_err("out of memory"); return 0; } return 1; } /** * Find an rrset in local data structure. * @param data: local data domain name structure. * @param type: type to look for (host order). * @param alias_ok: 1 if matching a non-exact, alias type such as CNAME is * allowed. otherwise 0. * @return rrset pointer or NULL if not found. */ static struct local_rrset* local_data_find_type(struct local_data* data, uint16_t type, int alias_ok) { struct local_rrset* p; type = htons(type); for(p = data->rrsets; p; p = p->next) { if(p->rrset->rk.type == type) return p; if(alias_ok && p->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) return p; } return NULL; } /** check for RR duplicates */ static int rr_is_duplicate(struct packed_rrset_data* pd, uint8_t* rdata, size_t rdata_len) { size_t i; for(i=0; icount; i++) { if(pd->rr_len[i] == rdata_len && memcmp(pd->rr_data[i], rdata, rdata_len) == 0) return 1; } return 0; } /** new local_rrset */ static struct local_rrset* new_local_rrset(struct regional* region, struct local_data* node, uint16_t rrtype, uint16_t rrclass) { struct packed_rrset_data* pd; struct local_rrset* rrset = (struct local_rrset*) regional_alloc_zero(region, sizeof(*rrset)); if(!rrset) { log_err("out of memory"); return NULL; } rrset->next = node->rrsets; node->rrsets = rrset; rrset->rrset = (struct ub_packed_rrset_key*) regional_alloc_zero(region, sizeof(*rrset->rrset)); if(!rrset->rrset) { log_err("out of memory"); return NULL; } rrset->rrset->entry.key = rrset->rrset; pd = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(*pd)); if(!pd) { log_err("out of memory"); return NULL; } pd->trust = rrset_trust_prim_noglue; pd->security = sec_status_insecure; rrset->rrset->entry.data = pd; rrset->rrset->rk.dname = node->name; rrset->rrset->rk.dname_len = node->namelen; rrset->rrset->rk.type = htons(rrtype); rrset->rrset->rk.rrset_class = htons(rrclass); return rrset; } /** insert RR into RRset data structure; Wastes a couple of bytes */ int rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr) { size_t* oldlen = pd->rr_len; time_t* oldttl = pd->rr_ttl; uint8_t** olddata = pd->rr_data; /* add RR to rrset */ if(pd->count > LOCALZONE_RRSET_COUNT_MAX) { log_warn("RRset '%s' has more than %d records, record ignored", rrstr, LOCALZONE_RRSET_COUNT_MAX); return 1; } pd->count++; pd->rr_len = regional_alloc(region, sizeof(*pd->rr_len)*pd->count); pd->rr_ttl = regional_alloc(region, sizeof(*pd->rr_ttl)*pd->count); pd->rr_data = regional_alloc(region, sizeof(*pd->rr_data)*pd->count); if(!pd->rr_len || !pd->rr_ttl || !pd->rr_data) { log_err("out of memory"); return 0; } if(pd->count > 1) { memcpy(pd->rr_len+1, oldlen, sizeof(*pd->rr_len)*(pd->count-1)); memcpy(pd->rr_ttl+1, oldttl, sizeof(*pd->rr_ttl)*(pd->count-1)); memcpy(pd->rr_data+1, olddata, sizeof(*pd->rr_data)*(pd->count-1)); } pd->rr_len[0] = rdata_len; pd->rr_ttl[0] = ttl; pd->rr_data[0] = regional_alloc_init(region, rdata, rdata_len); if(!pd->rr_data[0]) { log_err("out of memory"); return 0; } return 1; } /** Delete RR from local-zone RRset, wastes memory as the deleted RRs cannot be * free'd (regionally alloc'd) */ int local_rrset_remove_rr(struct packed_rrset_data* pd, size_t index) { log_assert(pd->count > 0); if(index >= pd->count) { log_warn("Trying to remove RR with out of bound index"); return 0; } if(index + 1 < pd->count) { /* not removing last element */ size_t nexti = index + 1; size_t num = pd->count - nexti; memmove(pd->rr_len+index, pd->rr_len+nexti, sizeof(*pd->rr_len)*num); memmove(pd->rr_ttl+index, pd->rr_ttl+nexti, sizeof(*pd->rr_ttl)*num); memmove(pd->rr_data+index, pd->rr_data+nexti, sizeof(*pd->rr_data)*num); } pd->count--; return 1; } struct local_data* local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs) { struct local_data key; key.node.key = &key; key.name = nm; key.namelen = nmlen; key.namelabs = nmlabs; return (struct local_data*)rbtree_search(&z->data, &key.node); } /** find a node, create it if not and all its empty nonterminal parents */ static int lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, struct local_data** res) { struct local_data* ld = local_zone_find_data(z, nm, nmlen, nmlabs); if(!ld) { /* create a domain name to store rr. */ ld = (struct local_data*)regional_alloc_zero(z->region, sizeof(*ld)); if(!ld) { log_err("out of memory adding local data"); return 0; } ld->node.key = ld; ld->name = regional_alloc_init(z->region, nm, nmlen); if(!ld->name) { log_err("out of memory"); return 0; } ld->namelen = nmlen; ld->namelabs = nmlabs; if(!rbtree_insert(&z->data, &ld->node)) { log_assert(0); /* duplicate name */ } /* see if empty nonterminals need to be created */ if(nmlabs > z->namelabs) { dname_remove_label(&nm, &nmlen); if(!lz_find_create_node(z, nm, nmlen, nmlabs-1, res)) return 0; } } *res = ld; return 1; } /* Mark the SOA record for the zone. This only marks the SOA rrset; the data * for the RR is entered later on local_zone_enter_rr() as with the other * records. An artifical soa_negative record with a modified TTL (minimum of * the TTL and the SOA.MINIMUM) is also created and marked for usage with * negative answers and to avoid allocations during those answers. */ static int lz_mark_soa_for_zone(struct local_zone* z, struct ub_packed_rrset_key* soa_rrset, uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr) { struct packed_rrset_data* pd = (struct packed_rrset_data*) regional_alloc_zero(z->region, sizeof(*pd)); struct ub_packed_rrset_key* rrset_negative = (struct ub_packed_rrset_key*) regional_alloc_zero(z->region, sizeof(*rrset_negative)); time_t minimum; if(!rrset_negative||!pd) { log_err("out of memory"); return 0; } /* Mark the original SOA record and then continue with the negative one. */ z->soa = soa_rrset; rrset_negative->entry.key = rrset_negative; pd->trust = rrset_trust_prim_noglue; pd->security = sec_status_insecure; rrset_negative->entry.data = pd; rrset_negative->rk.dname = soa_rrset->rk.dname; rrset_negative->rk.dname_len = soa_rrset->rk.dname_len; rrset_negative->rk.type = soa_rrset->rk.type; rrset_negative->rk.rrset_class = soa_rrset->rk.rrset_class; if(!rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr)) return 0; /* last 4 bytes are minimum ttl in network format */ if(pd->count == 0 || pd->rr_len[0] < 2+4) return 0; minimum = (time_t)sldns_read_uint32(pd->rr_data[0]+(pd->rr_len[0]-4)); minimum = ttlttl = minimum; pd->rr_ttl[0] = minimum; z->soa_negative = rrset_negative; return 1; } int local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, size_t rdata_len, const char* rrstr) { struct local_data* node; struct local_rrset* rrset; struct packed_rrset_data* pd; if(!lz_find_create_node(z, nm, nmlen, nmlabs, &node)) { return 0; } log_assert(node); /* Reject it if we would end up having CNAME and other data (including * another CNAME) for a redirect zone. */ if((z->type == local_zone_redirect || z->type == local_zone_inform_redirect) && node->rrsets) { const char* othertype = NULL; if (rrtype == LDNS_RR_TYPE_CNAME) othertype = "other"; else if (node->rrsets->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) { othertype = "CNAME"; } if(othertype) { log_err("local-data '%s' in redirect zone must not " "coexist with %s local-data", rrstr, othertype); return 0; } } rrset = local_data_find_type(node, rrtype, 0); if(!rrset) { rrset = new_local_rrset(z->region, node, rrtype, rrclass); if(!rrset) return 0; if(query_dname_compare(node->name, z->name) == 0) { if(rrtype == LDNS_RR_TYPE_NSEC) rrset->rrset->rk.flags = PACKED_RRSET_NSEC_AT_APEX; if(rrtype == LDNS_RR_TYPE_SOA && !lz_mark_soa_for_zone(z, rrset->rrset, rdata, rdata_len, ttl, rrstr)) return 0; } } pd = (struct packed_rrset_data*)rrset->rrset->entry.data; log_assert(rrset && pd); /* check for duplicate RR */ if(rr_is_duplicate(pd, rdata, rdata_len)) { verbose(VERB_ALGO, "ignoring duplicate RR: %s", rrstr); return 1; } return rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr); } /** enter data RR into auth zone */ static int lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) { uint8_t* nm; size_t nmlen; int nmlabs, ret; uint16_t rrtype = 0, rrclass = 0; time_t ttl = 0; uint8_t rr[LDNS_RR_BUF_SIZE]; uint8_t* rdata; size_t rdata_len; if(!rrstr_get_rr_content(rrstr, &nm, &rrtype, &rrclass, &ttl, rr, sizeof(rr), &rdata, &rdata_len)) { log_err("bad local-data: %s", rrstr); return 0; } log_assert(z->dclass == rrclass); if((z->type == local_zone_redirect || z->type == local_zone_inform_redirect) && query_dname_compare(z->name, nm) != 0) { log_err("local-data in redirect zone must reside at top of zone" ", not at %s", rrstr); free(nm); return 0; } nmlabs = dname_count_size_labels(nm, &nmlen); ret = local_zone_enter_rr(z, nm, nmlen, nmlabs, rrtype, rrclass, ttl, rdata, rdata_len, rrstr); free(nm); return ret; } /** enter a data RR into auth data; a zone for it must exist */ static int lz_enter_rr_str(struct local_zones* zones, const char* rr) { uint8_t* rr_name; uint16_t rr_class, rr_type; size_t len; int labs; struct local_zone* z; int r; if(!get_rr_nameclass(rr, &rr_name, &rr_class, &rr_type)) { log_err("bad rr %s", rr); return 0; } labs = dname_count_size_labels(rr_name, &len); lock_rw_rdlock(&zones->lock); z = local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type); if(!z) { lock_rw_unlock(&zones->lock); fatal_exit("internal error: no zone for rr %s", rr); } lock_rw_wrlock(&z->lock); lock_rw_unlock(&zones->lock); free(rr_name); r = lz_enter_rr_into_zone(z, rr); lock_rw_unlock(&z->lock); return r; } /** enter tagstring into zone */ static int lz_enter_zone_tag(struct local_zones* zones, char* zname, uint8_t* list, size_t len, uint16_t rr_class) { uint8_t dname[LDNS_MAX_DOMAINLEN+1]; size_t dname_len = sizeof(dname); int dname_labs, r = 0; struct local_zone* z; if(sldns_str2wire_dname_buf(zname, dname, &dname_len) != 0) { log_err("cannot parse zone name in local-zone-tag: %s", zname); return 0; } dname_labs = dname_count_labels(dname); lock_rw_rdlock(&zones->lock); z = local_zones_find(zones, dname, dname_len, dname_labs, rr_class); if(!z) { lock_rw_unlock(&zones->lock); log_err("no local-zone for tag %s", zname); return 0; } lock_rw_wrlock(&z->lock); lock_rw_unlock(&zones->lock); free(z->taglist); z->taglist = memdup(list, len); z->taglen = len; if(z->taglist) r = 1; lock_rw_unlock(&z->lock); return r; } /** enter override into zone */ static int lz_enter_override(struct local_zones* zones, char* zname, char* netblock, char* type, uint16_t rr_class) { uint8_t dname[LDNS_MAX_DOMAINLEN+1]; size_t dname_len = sizeof(dname); int dname_labs; struct sockaddr_storage addr; int net; socklen_t addrlen; struct local_zone* z; enum localzone_type t; /* parse zone name */ if(sldns_str2wire_dname_buf(zname, dname, &dname_len) != 0) { log_err("cannot parse zone name in local-zone-override: %s %s", zname, netblock); return 0; } dname_labs = dname_count_labels(dname); /* parse netblock */ if(!netblockstrtoaddr(netblock, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse netblock in local-zone-override: %s %s", zname, netblock); return 0; } /* parse zone type */ if(!local_zone_str2type(type, &t)) { log_err("cannot parse type in local-zone-override: %s %s %s", zname, netblock, type); return 0; } /* find localzone entry */ lock_rw_rdlock(&zones->lock); z = local_zones_find(zones, dname, dname_len, dname_labs, rr_class); if(!z) { lock_rw_unlock(&zones->lock); log_err("no local-zone for local-zone-override %s", zname); return 0; } lock_rw_wrlock(&z->lock); lock_rw_unlock(&zones->lock); /* create netblock addr_tree if not present yet */ if(!z->override_tree) { z->override_tree = (struct rbtree_type*)regional_alloc_zero( z->region, sizeof(*z->override_tree)); if(!z->override_tree) { lock_rw_unlock(&z->lock); log_err("out of memory"); return 0; } addr_tree_init(z->override_tree); } /* add new elem to tree */ if(z->override_tree) { struct local_zone_override* n; n = (struct local_zone_override*)regional_alloc_zero( z->region, sizeof(*n)); if(!n) { lock_rw_unlock(&z->lock); log_err("out of memory"); return 0; } n->type = t; if(!addr_tree_insert(z->override_tree, (struct addr_tree_node*)n, &addr, addrlen, net)) { lock_rw_unlock(&z->lock); log_err("duplicate local-zone-override %s %s", zname, netblock); return 1; } } lock_rw_unlock(&z->lock); return 1; } /** parse local-zone: statements */ static int lz_enter_zones(struct local_zones* zones, struct config_file* cfg) { struct config_str2list* p; struct local_zone* z; for(p = cfg->local_zones; p; p = p->next) { if(!(z=lz_enter_zone(zones, p->str, p->str2, LDNS_RR_CLASS_IN))) return 0; lock_rw_unlock(&z->lock); } return 1; } /** lookup a zone in rbtree; exact match only; SLOW due to parse */ static int lz_exists(struct local_zones* zones, const char* name) { struct local_zone z; z.node.key = &z; z.dclass = LDNS_RR_CLASS_IN; if(!parse_dname(name, &z.name, &z.namelen, &z.namelabs)) { log_err("bad name %s", name); return 0; } lock_rw_rdlock(&zones->lock); if(rbtree_search(&zones->ztree, &z.node)) { lock_rw_unlock(&zones->lock); free(z.name); return 1; } lock_rw_unlock(&zones->lock); free(z.name); return 0; } /** lookup a zone in cfg->nodefault list */ static int lz_nodefault(struct config_file* cfg, const char* name) { struct config_strlist* p; size_t len = strlen(name); if(len == 0) return 0; if(name[len-1] == '.') len--; for(p = cfg->local_zones_nodefault; p; p = p->next) { /* compare zone name, lowercase, compare without ending . */ if(strncasecmp(p->str, name, len) == 0 && (strlen(p->str) == len || (strlen(p->str)==len+1 && p->str[len] == '.'))) return 1; } return 0; } /** enter (AS112) empty default zone */ static int add_empty_default(struct local_zones* zones, struct config_file* cfg, const char* name) { struct local_zone* z; char str[1024]; /* known long enough */ if(lz_exists(zones, name) || lz_nodefault(cfg, name)) return 1; /* do not enter default content */ if(!(z=lz_enter_zone(zones, name, "static", LDNS_RR_CLASS_IN))) return 0; snprintf(str, sizeof(str), "%s 10800 IN SOA localhost. " "nobody.invalid. 1 3600 1200 604800 10800", name); if(!lz_enter_rr_into_zone(z, str)) { lock_rw_unlock(&z->lock); return 0; } snprintf(str, sizeof(str), "%s 10800 IN NS localhost. ", name); if(!lz_enter_rr_into_zone(z, str)) { lock_rw_unlock(&z->lock); return 0; } lock_rw_unlock(&z->lock); return 1; } /** enter default zones */ int local_zone_enter_defaults(struct local_zones* zones, struct config_file* cfg) { struct local_zone* z; const char** zstr; /* Do not add any default */ if(cfg->local_zones_disable_default) return 1; /* this list of zones is from RFC 6303 and RFC 7686 */ /* block localhost level zones first, then onion and later the LAN zones */ /* localhost. zone */ if(!lz_exists(zones, "localhost.") && !lz_nodefault(cfg, "localhost.")) { if(!(z=lz_enter_zone(zones, "localhost.", "redirect", LDNS_RR_CLASS_IN)) || !lz_enter_rr_into_zone(z, "localhost. 10800 IN NS localhost.") || !lz_enter_rr_into_zone(z, "localhost. 10800 IN SOA localhost. nobody.invalid. " "1 3600 1200 604800 10800") || !lz_enter_rr_into_zone(z, "localhost. 10800 IN A 127.0.0.1") || !lz_enter_rr_into_zone(z, "localhost. 10800 IN AAAA ::1")) { log_err("out of memory adding default zone"); if(z) { lock_rw_unlock(&z->lock); } return 0; } lock_rw_unlock(&z->lock); } /* reverse ip4 zone */ if(!lz_exists(zones, "127.in-addr.arpa.") && !lz_nodefault(cfg, "127.in-addr.arpa.")) { if(!(z=lz_enter_zone(zones, "127.in-addr.arpa.", "static", LDNS_RR_CLASS_IN)) || !lz_enter_rr_into_zone(z, "127.in-addr.arpa. 10800 IN NS localhost.") || !lz_enter_rr_into_zone(z, "127.in-addr.arpa. 10800 IN SOA localhost. " "nobody.invalid. 1 3600 1200 604800 10800") || !lz_enter_rr_into_zone(z, "1.0.0.127.in-addr.arpa. 10800 IN PTR localhost.")) { log_err("out of memory adding default zone"); if(z) { lock_rw_unlock(&z->lock); } return 0; } lock_rw_unlock(&z->lock); } /* reverse ip6 zone */ if(!lz_exists(zones, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.") && !lz_nodefault(cfg, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.")) { if(!(z=lz_enter_zone(zones, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.", "static", LDNS_RR_CLASS_IN)) || !lz_enter_rr_into_zone(z, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 10800 IN NS localhost.") || !lz_enter_rr_into_zone(z, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 10800 IN SOA localhost. " "nobody.invalid. 1 3600 1200 604800 10800") || !lz_enter_rr_into_zone(z, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 10800 IN PTR localhost.")) { log_err("out of memory adding default zone"); if(z) { lock_rw_unlock(&z->lock); } return 0; } lock_rw_unlock(&z->lock); } /* onion. zone (RFC 7686) */ if(!add_empty_default(zones, cfg, "onion.")) { log_err("out of memory adding default zone"); return 0; } /* test. zone (RFC 6761) */ if(!add_empty_default(zones, cfg, "test.")) { log_err("out of memory adding default zone"); return 0; } /* invalid. zone (RFC 6761) */ if(!add_empty_default(zones, cfg, "invalid.")) { log_err("out of memory adding default zone"); return 0; } /* block AS112 zones, unless asked not to */ if(!cfg->unblock_lan_zones) { for(zstr = as112_zones; *zstr; zstr++) { if(!add_empty_default(zones, cfg, *zstr)) { log_err("out of memory adding default zone"); return 0; } } } return 1; } /** parse local-zone-override: statements */ static int lz_enter_overrides(struct local_zones* zones, struct config_file* cfg) { struct config_str3list* p; for(p = cfg->local_zone_overrides; p; p = p->next) { if(!lz_enter_override(zones, p->str, p->str2, p->str3, LDNS_RR_CLASS_IN)) return 0; } return 1; } /** setup parent pointers, so that a lookup can be done for closest match */ static void init_parents(struct local_zones* zones) { struct local_zone* node, *prev = NULL, *p; int m; lock_rw_wrlock(&zones->lock); RBTREE_FOR(node, struct local_zone*, &zones->ztree) { lock_rw_wrlock(&node->lock); node->parent = NULL; if(!prev || prev->dclass != node->dclass) { prev = node; lock_rw_unlock(&node->lock); continue; } (void)dname_lab_cmp(prev->name, prev->namelabs, node->name, node->namelabs, &m); /* we know prev is smaller */ /* sort order like: . com. bla.com. zwb.com. net. */ /* find the previous, or parent-parent-parent */ for(p = prev; p; p = p->parent) /* looking for name with few labels, a parent */ if(p->namelabs <= m) { /* ==: since prev matched m, this is closest*/ /* <: prev matches more, but is not a parent, * this one is a (grand)parent */ node->parent = p; break; } prev = node; if(node->override_tree) addr_tree_init_parents(node->override_tree); lock_rw_unlock(&node->lock); } lock_rw_unlock(&zones->lock); } /** enter implicit transparent zone for local-data: without local-zone: */ static int lz_setup_implicit(struct local_zones* zones, struct config_file* cfg) { /* walk over all items that have no parent zone and find * the name that covers them all (could be the root) and * add that as a transparent zone */ struct config_strlist* p; int have_name = 0; int have_other_classes = 0; uint16_t dclass = 0; uint8_t* nm = 0; size_t nmlen = 0; int nmlabs = 0; int match = 0; /* number of labels match count */ init_parents(zones); /* to enable local_zones_lookup() */ for(p = cfg->local_data; p; p = p->next) { uint8_t* rr_name; uint16_t rr_class, rr_type; size_t len; int labs; if(!get_rr_nameclass(p->str, &rr_name, &rr_class, &rr_type)) { log_err("Bad local-data RR %s", p->str); return 0; } labs = dname_count_size_labels(rr_name, &len); lock_rw_rdlock(&zones->lock); if(!local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type)) { if(!have_name) { dclass = rr_class; nm = rr_name; nmlen = len; nmlabs = labs; match = labs; have_name = 1; } else { int m; if(rr_class != dclass) { /* process other classes later */ free(rr_name); have_other_classes = 1; lock_rw_unlock(&zones->lock); continue; } /* find smallest shared topdomain */ (void)dname_lab_cmp(nm, nmlabs, rr_name, labs, &m); free(rr_name); if(m < match) match = m; } } else free(rr_name); lock_rw_unlock(&zones->lock); } if(have_name) { uint8_t* n2; struct local_zone* z; /* allocate zone of smallest shared topdomain to contain em */ n2 = nm; dname_remove_labels(&n2, &nmlen, nmlabs - match); n2 = memdup(n2, nmlen); free(nm); if(!n2) { log_err("out of memory"); return 0; } log_nametypeclass(VERB_ALGO, "implicit transparent local-zone", n2, 0, dclass); if(!(z=lz_enter_zone_dname(zones, n2, nmlen, match, local_zone_transparent, dclass))) { return 0; } lock_rw_unlock(&z->lock); } if(have_other_classes) { /* restart to setup other class */ return lz_setup_implicit(zones, cfg); } return 1; } /** enter local-zone-tag info */ static int lz_enter_zone_tags(struct local_zones* zones, struct config_file* cfg) { struct config_strbytelist* p; int c = 0; for(p = cfg->local_zone_tags; p; p = p->next) { if(!lz_enter_zone_tag(zones, p->str, p->str2, p->str2len, LDNS_RR_CLASS_IN)) return 0; c++; } if(c) verbose(VERB_ALGO, "applied tags to %d local zones", c); return 1; } /** enter auth data */ static int lz_enter_data(struct local_zones* zones, struct config_file* cfg) { struct config_strlist* p; for(p = cfg->local_data; p; p = p->next) { if(!lz_enter_rr_str(zones, p->str)) return 0; } return 1; } /** free memory from config */ static void lz_freeup_cfg(struct config_file* cfg) { config_deldblstrlist(cfg->local_zones); cfg->local_zones = NULL; config_delstrlist(cfg->local_zones_nodefault); cfg->local_zones_nodefault = NULL; config_delstrlist(cfg->local_data); cfg->local_data = NULL; } int local_zones_apply_cfg(struct local_zones* zones, struct config_file* cfg) { /* create zones from zone statements. */ if(!lz_enter_zones(zones, cfg)) { return 0; } /* apply default zones+content (unless disabled, or overridden) */ if(!local_zone_enter_defaults(zones, cfg)) { return 0; } /* enter local zone overrides */ if(!lz_enter_overrides(zones, cfg)) { return 0; } /* create implicit transparent zone from data. */ if(!lz_setup_implicit(zones, cfg)) { return 0; } /* setup parent ptrs for lookup during data entry */ init_parents(zones); /* insert local zone tags */ if(!lz_enter_zone_tags(zones, cfg)) { return 0; } /* insert local data */ if(!lz_enter_data(zones, cfg)) { return 0; } /* freeup memory from cfg struct. */ lz_freeup_cfg(cfg); return 1; } struct local_zone* local_zones_lookup(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype) { return local_zones_tags_lookup(zones, name, len, labs, dclass, dtype, NULL, 0, 1); } struct local_zone* local_zones_tags_lookup(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype, uint8_t* taglist, size_t taglen, int ignoretags) { rbnode_type* res = NULL; struct local_zone *result; struct local_zone key; int m; /* for type DS use a zone higher when on a zonecut */ if(dtype == LDNS_RR_TYPE_DS && !dname_is_root(name)) { dname_remove_label(&name, &len); labs--; } key.node.key = &key; key.dclass = dclass; key.name = name; key.namelen = len; key.namelabs = labs; rbtree_find_less_equal(&zones->ztree, &key, &res); result = (struct local_zone*)res; /* exact or smaller element (or no element) */ if(!result || result->dclass != dclass) return NULL; /* count number of labels matched */ (void)dname_lab_cmp(result->name, result->namelabs, key.name, key.namelabs, &m); while(result) { /* go up until qname is zone or subdomain of zone */ if(result->namelabs <= m) if(ignoretags || !result->taglist || taglist_intersect(result->taglist, result->taglen, taglist, taglen)) break; result = result->parent; } return result; } struct local_zone* local_zones_find(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass) { struct local_zone key; key.node.key = &key; key.dclass = dclass; key.name = name; key.namelen = len; key.namelabs = labs; /* exact */ return (struct local_zone*)rbtree_search(&zones->ztree, &key); } struct local_zone* local_zones_find_le(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, int* exact) { struct local_zone key; rbnode_type *node; key.node.key = &key; key.dclass = dclass; key.name = name; key.namelen = len; key.namelabs = labs; *exact = rbtree_find_less_equal(&zones->ztree, &key, &node); return (struct local_zone*)node; } /** print all RRsets in local zone */ static void local_zone_out(struct local_zone* z) { struct local_data* d; struct local_rrset* p; RBTREE_FOR(d, struct local_data*, &z->data) { for(p = d->rrsets; p; p = p->next) { log_nametypeclass(NO_VERBOSE, "rrset", d->name, ntohs(p->rrset->rk.type), ntohs(p->rrset->rk.rrset_class)); } } } void local_zones_print(struct local_zones* zones) { struct local_zone* z; lock_rw_rdlock(&zones->lock); log_info("number of auth zones %u", (unsigned)zones->ztree.count); RBTREE_FOR(z, struct local_zone*, &zones->ztree) { char buf[64]; lock_rw_rdlock(&z->lock); snprintf(buf, sizeof(buf), "%s zone", local_zone_type2str(z->type)); log_nametypeclass(NO_VERBOSE, buf, z->name, 0, z->dclass); local_zone_out(z); lock_rw_unlock(&z->lock); } lock_rw_unlock(&zones->lock); } /** encode answer consisting of 1 rrset */ static int local_encode(struct query_info* qinfo, struct module_env* env, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, struct ub_packed_rrset_key* rrset, int ansec, int rcode) { struct reply_info rep; uint16_t udpsize; /* make answer with time=0 for fixed TTL values */ memset(&rep, 0, sizeof(rep)); rep.flags = (uint16_t)((BIT_QR | BIT_AA | BIT_RA) | rcode); rep.qdcount = 1; if(ansec) rep.an_numrrsets = 1; else rep.ns_numrrsets = 1; rep.rrset_count = 1; rep.rrsets = &rrset; udpsize = edns->udp_size; edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, &rep, rcode, edns, repinfo, temp, env->now_tv) || !reply_info_answer_encode(qinfo, &rep, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), buf, 0, 0, temp, udpsize, edns, (int)(edns->bits&EDNS_DO), 0)) { error_encode(buf, (LDNS_RCODE_SERVFAIL|BIT_AA), qinfo, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), edns); } return 1; } /** encode local error answer */ static void local_error_encode(struct query_info* qinfo, struct module_env* env, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, int rcode, int r) { edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL, rcode, edns, repinfo, temp, env->now_tv)) edns->opt_list = NULL; error_encode(buf, r, qinfo, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), edns); } /** find local data tag string match for the given type in the list */ int local_data_find_tag_datas(const struct query_info* qinfo, struct config_strlist* list, struct ub_packed_rrset_key* r, struct regional* temp) { struct config_strlist* p; char buf[65536]; uint8_t rr[LDNS_RR_BUF_SIZE]; size_t len; int res; struct packed_rrset_data* d; for(p=list; p; p=p->next) { uint16_t rdr_type; len = sizeof(rr); /* does this element match the type? */ snprintf(buf, sizeof(buf), ". %s", p->str); res = sldns_str2wire_rr_buf(buf, rr, &len, NULL, 3600, NULL, 0, NULL, 0); if(res != 0) /* parse errors are already checked before, in * acllist check_data, skip this for robustness */ continue; if(len < 1 /* . */ + 8 /* typeclassttl*/ + 2 /*rdatalen*/) continue; rdr_type = sldns_wirerr_get_type(rr, len, 1); if(rdr_type != qinfo->qtype && rdr_type != LDNS_RR_TYPE_CNAME) continue; /* do we have entries already? if not setup key */ if(r->rk.dname == NULL) { r->entry.key = r; r->rk.dname = qinfo->qname; r->rk.dname_len = qinfo->qname_len; r->rk.type = htons(rdr_type); r->rk.rrset_class = htons(qinfo->qclass); r->rk.flags = 0; d = (struct packed_rrset_data*)regional_alloc_zero( temp, sizeof(struct packed_rrset_data) + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t)); if(!d) return 0; /* out of memory */ r->entry.data = d; d->ttl = sldns_wirerr_get_ttl(rr, len, 1); d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); d->rr_data = (uint8_t**)&(d->rr_len[1]); d->rr_ttl = (time_t*)&(d->rr_data[1]); } d = (struct packed_rrset_data*)r->entry.data; /* add entry to the data */ if(d->count != 0) { size_t* oldlen = d->rr_len; uint8_t** olddata = d->rr_data; time_t* oldttl = d->rr_ttl; /* increase arrays for lookup */ /* this is of course slow for very many records, * but most redirects are expected with few records */ d->rr_len = (size_t*)regional_alloc_zero(temp, (d->count+1)*sizeof(size_t)); d->rr_data = (uint8_t**)regional_alloc_zero(temp, (d->count+1)*sizeof(uint8_t*)); d->rr_ttl = (time_t*)regional_alloc_zero(temp, (d->count+1)*sizeof(time_t)); if(!d->rr_len || !d->rr_data || !d->rr_ttl) return 0; /* out of memory */ /* first one was allocated after struct d, but new * ones get their own array increment alloc, so * copy old content */ memmove(d->rr_len, oldlen, d->count*sizeof(size_t)); memmove(d->rr_data, olddata, d->count*sizeof(uint8_t*)); memmove(d->rr_ttl, oldttl, d->count*sizeof(time_t)); } d->rr_len[d->count] = sldns_wirerr_get_rdatalen(rr, len, 1)+2; d->rr_ttl[d->count] = sldns_wirerr_get_ttl(rr, len, 1); d->rr_data[d->count] = regional_alloc_init(temp, sldns_wirerr_get_rdatawl(rr, len, 1), d->rr_len[d->count]); if(!d->rr_data[d->count]) return 0; /* out of memory */ d->count++; } if(r->rk.dname) return 1; return 0; } static int find_tag_datas(struct query_info* qinfo, struct config_strlist* list, struct ub_packed_rrset_key* r, struct regional* temp) { int result = local_data_find_tag_datas(qinfo, list, r, temp); /* If we've found a non-exact alias type of local data, make a shallow * copy of the RRset and remember it in qinfo to complete the alias * chain later. */ if(result && qinfo->qtype != LDNS_RR_TYPE_CNAME && r->rk.type == htons(LDNS_RR_TYPE_CNAME)) { qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset)); if(!qinfo->local_alias) return 0; /* out of memory */ qinfo->local_alias->rrset = regional_alloc_init(temp, r, sizeof(*r)); if(!qinfo->local_alias->rrset) return 0; /* out of memory */ } return result; } int local_data_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, int labs, struct local_data** ldp, enum localzone_type lz_type, int tag, struct config_strlist** tag_datas, size_t tag_datas_size, char** tagname, int num_tags) { struct local_data key; struct local_data* ld; struct local_rrset* lr; key.node.key = &key; key.name = qinfo->qname; key.namelen = qinfo->qname_len; key.namelabs = labs; if(lz_type == local_zone_redirect || lz_type == local_zone_inform_redirect) { key.name = z->name; key.namelen = z->namelen; key.namelabs = z->namelabs; if(tag != -1 && (size_t)taglocal_alias) return 1; return local_encode(qinfo, env, edns, repinfo, buf, temp, &r, 1, LDNS_RCODE_NOERROR); } } } ld = (struct local_data*)rbtree_search(&z->data, &key.node); *ldp = ld; if(!ld) { return 0; } lr = local_data_find_type(ld, qinfo->qtype, 1); if(!lr) return 0; /* Special case for alias matching. See local_data_answer(). */ if((lz_type == local_zone_redirect || lz_type == local_zone_inform_redirect) && qinfo->qtype != LDNS_RR_TYPE_CNAME && lr->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) { uint8_t* ctarget; size_t ctargetlen = 0; qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset)); if(!qinfo->local_alias) return 0; /* out of memory */ qinfo->local_alias->rrset = regional_alloc_init( temp, lr->rrset, sizeof(*lr->rrset)); if(!qinfo->local_alias->rrset) return 0; /* out of memory */ qinfo->local_alias->rrset->rk.dname = qinfo->qname; qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; get_cname_target(lr->rrset, &ctarget, &ctargetlen); if(!ctargetlen) return 0; /* invalid cname */ if(dname_is_wild(ctarget)) { /* synthesize cname target */ struct packed_rrset_data* d; /* -3 for wildcard label and root label from qname */ size_t newtargetlen = qinfo->qname_len + ctargetlen - 3; log_assert(ctargetlen >= 3); log_assert(qinfo->qname_len >= 1); if(newtargetlen > LDNS_MAX_DOMAINLEN) { qinfo->local_alias = NULL; local_error_encode(qinfo, env, edns, repinfo, buf, temp, LDNS_RCODE_YXDOMAIN, (LDNS_RCODE_YXDOMAIN|BIT_AA)); return 1; } memset(&qinfo->local_alias->rrset->entry, 0, sizeof(qinfo->local_alias->rrset->entry)); qinfo->local_alias->rrset->entry.key = qinfo->local_alias->rrset; qinfo->local_alias->rrset->entry.hash = rrset_key_hash(&qinfo->local_alias->rrset->rk); d = (struct packed_rrset_data*)regional_alloc_zero(temp, sizeof(struct packed_rrset_data) + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t) + newtargetlen); if(!d) return 0; /* out of memory */ qinfo->local_alias->rrset->entry.data = d; d->ttl = 0; /* 0 for synthesized CNAME TTL */ d->count = 1; d->rrsig_count = 0; d->trust = rrset_trust_ans_noAA; d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); d->rr_len[0] = newtargetlen + sizeof(uint16_t); packed_rrset_ptr_fixup(d); d->rr_ttl[0] = d->ttl; sldns_write_uint16(d->rr_data[0], newtargetlen); /* write qname */ memmove(d->rr_data[0] + sizeof(uint16_t), qinfo->qname, qinfo->qname_len - 1); /* write cname target wilcard wildcard label */ memmove(d->rr_data[0] + sizeof(uint16_t) + qinfo->qname_len - 1, ctarget + 2, ctargetlen - 2); } return 1; } if(lz_type == local_zone_redirect || lz_type == local_zone_inform_redirect) { /* convert rrset name to query name; like a wildcard */ struct ub_packed_rrset_key r = *lr->rrset; r.rk.dname = qinfo->qname; r.rk.dname_len = qinfo->qname_len; return local_encode(qinfo, env, edns, repinfo, buf, temp, &r, 1, LDNS_RCODE_NOERROR); } return local_encode(qinfo, env, edns, repinfo, buf, temp, lr->rrset, 1, LDNS_RCODE_NOERROR); } /** * See if the local zone does not cover the name, eg. the name is not * in the zone and the zone is transparent */ static int local_zone_does_not_cover(struct local_zone* z, struct query_info* qinfo, int labs) { struct local_data key; struct local_data* ld = NULL; struct local_rrset* lr = NULL; if(z->type == local_zone_always_transparent) return 1; if(z->type != local_zone_transparent && z->type != local_zone_typetransparent && z->type != local_zone_inform) return 0; key.node.key = &key; key.name = qinfo->qname; key.namelen = qinfo->qname_len; key.namelabs = labs; ld = (struct local_data*)rbtree_search(&z->data, &key.node); if(z->type == local_zone_transparent || z->type == local_zone_inform) return (ld == NULL); if(ld) lr = local_data_find_type(ld, qinfo->qtype, 1); /* local_zone_typetransparent */ return (lr == NULL); } int local_zones_zone_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, struct local_data* ld, enum localzone_type lz_type) { if(lz_type == local_zone_deny || lz_type == local_zone_always_deny || lz_type == local_zone_inform_deny) { /** no reply at all, signal caller by clearing buffer. */ sldns_buffer_clear(buf); sldns_buffer_flip(buf); return 1; } else if(lz_type == local_zone_refuse || lz_type == local_zone_always_refuse) { local_error_encode(qinfo, env, edns, repinfo, buf, temp, LDNS_RCODE_REFUSED, (LDNS_RCODE_REFUSED|BIT_AA)); return 1; } else if(lz_type == local_zone_static || lz_type == local_zone_redirect || lz_type == local_zone_inform_redirect || lz_type == local_zone_always_nxdomain || lz_type == local_zone_always_nodata) { /* for static, reply nodata or nxdomain * for redirect, reply nodata */ /* no additional section processing, * cname, dname or wildcard processing, * or using closest match for NSEC. * or using closest match for returning delegation downwards */ int rcode = (ld || lz_type == local_zone_redirect || lz_type == local_zone_inform_redirect || lz_type == local_zone_always_nodata)? LDNS_RCODE_NOERROR:LDNS_RCODE_NXDOMAIN; if(z->soa && z->soa_negative) return local_encode(qinfo, env, edns, repinfo, buf, temp, z->soa_negative, 0, rcode); local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode, (rcode|BIT_AA)); return 1; } else if(lz_type == local_zone_typetransparent || lz_type == local_zone_always_transparent) { /* no NODATA or NXDOMAINS for this zone type */ return 0; } else if(lz_type == local_zone_always_null) { /* 0.0.0.0 or ::0 or noerror/nodata for this zone type, * used for blocklists. */ if(qinfo->qtype == LDNS_RR_TYPE_A || qinfo->qtype == LDNS_RR_TYPE_AAAA) { struct ub_packed_rrset_key lrr; struct packed_rrset_data d; time_t rr_ttl = 3600; size_t rr_len = 0; uint8_t rr_data[2+16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint8_t* rr_datas = rr_data; memset(&lrr, 0, sizeof(lrr)); memset(&d, 0, sizeof(d)); lrr.entry.data = &d; lrr.rk.dname = qinfo->qname; lrr.rk.dname_len = qinfo->qname_len; lrr.rk.type = htons(qinfo->qtype); lrr.rk.rrset_class = htons(qinfo->qclass); if(qinfo->qtype == LDNS_RR_TYPE_A) { rr_len = 4; sldns_write_uint16(rr_data, rr_len); rr_len += 2; } else { rr_len = 16; sldns_write_uint16(rr_data, rr_len); rr_len += 2; } d.ttl = rr_ttl; d.count = 1; d.rr_len = &rr_len; d.rr_data = &rr_datas; d.rr_ttl = &rr_ttl; return local_encode(qinfo, env, edns, repinfo, buf, temp, &lrr, 1, LDNS_RCODE_NOERROR); } else { local_error_encode(qinfo, env, edns, repinfo, buf, temp, LDNS_RCODE_NOERROR, (LDNS_RCODE_NOERROR|BIT_AA)); } return 1; } /* else lz_type == local_zone_transparent */ /* if the zone is transparent and the name exists, but the type * does not, then we should make this noerror/nodata */ if(ld && ld->rrsets) { int rcode = LDNS_RCODE_NOERROR; if(z->soa && z->soa_negative) return local_encode(qinfo, env, edns, repinfo, buf, temp, z->soa_negative, 0, rcode); local_error_encode(qinfo, env, edns, repinfo, buf, temp, rcode, (rcode|BIT_AA)); return 1; } /* stop here, and resolve further on */ return 0; } /** print log information for an inform zone query */ static void lz_inform_print(struct local_zone* z, struct query_info* qinfo, struct comm_reply* repinfo) { char ip[128], txt[512]; char zname[LDNS_MAX_DOMAINLEN+1]; uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); dname_str(z->name, zname); addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); snprintf(txt, sizeof(txt), "%s %s %s@%u", zname, local_zone_type2str(z->type), ip, (unsigned)port); log_nametypeclass(NO_VERBOSE, txt, qinfo->qname, qinfo->qtype, qinfo->qclass); } static enum localzone_type lz_type(uint8_t *taglist, size_t taglen, uint8_t *taglist2, size_t taglen2, uint8_t *tagactions, size_t tagactionssize, enum localzone_type lzt, struct comm_reply* repinfo, struct rbtree_type* override_tree, int* tag, char** tagname, int num_tags) { struct local_zone_override* lzo; if(repinfo && override_tree) { lzo = (struct local_zone_override*)addr_tree_lookup( override_tree, &repinfo->addr, repinfo->addrlen); if(lzo && lzo->type) { verbose(VERB_ALGO, "local zone override to type %s", local_zone_type2str(lzo->type)); return lzo->type; } } if(!taglist || !taglist2) return lzt; return local_data_find_tag_action(taglist, taglen, taglist2, taglen2, tagactions, tagactionssize, lzt, tag, tagname, num_tags); } enum localzone_type local_data_find_tag_action(const uint8_t* taglist, size_t taglen, const uint8_t* taglist2, size_t taglen2, const uint8_t* tagactions, size_t tagactionssize, enum localzone_type lzt, int* tag, char* const* tagname, int num_tags) { size_t i, j; uint8_t tagmatch; for(i=0; i0; j++) { if((tagmatch & 0x1)) { *tag = (int)(i*8+j); verbose(VERB_ALGO, "matched tag [%d] %s", *tag, (*tag>= 1; } } return lzt; } int local_zones_answer(struct local_zones* zones, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist, size_t taglen, uint8_t* tagactions, size_t tagactionssize, struct config_strlist** tag_datas, size_t tag_datas_size, char** tagname, int num_tags, struct view* view) { /* see if query is covered by a zone, * if so: - try to match (exact) local data * - look at zone type for negative response. */ int labs = dname_count_labels(qinfo->qname); struct local_data* ld = NULL; struct local_zone* z = NULL; enum localzone_type lzt = local_zone_transparent; int r, tag = -1; if(view) { lock_rw_rdlock(&view->lock); if(view->local_zones && (z = local_zones_lookup(view->local_zones, qinfo->qname, qinfo->qname_len, labs, qinfo->qclass, qinfo->qtype))) { lock_rw_rdlock(&z->lock); lzt = z->type; } if(lzt == local_zone_noview) { lock_rw_unlock(&z->lock); z = NULL; } if(z && (lzt == local_zone_transparent || lzt == local_zone_typetransparent || lzt == local_zone_inform || lzt == local_zone_always_transparent) && local_zone_does_not_cover(z, qinfo, labs)) { lock_rw_unlock(&z->lock); z = NULL; } if(view->local_zones && !z && !view->isfirst){ lock_rw_unlock(&view->lock); return 0; } if(z && verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(z->name, zname); verbose(VERB_ALGO, "using localzone %s %s from view %s", zname, local_zone_type2str(lzt), view->name); } lock_rw_unlock(&view->lock); } if(!z) { /* try global local_zones tree */ lock_rw_rdlock(&zones->lock); if(!(z = local_zones_tags_lookup(zones, qinfo->qname, qinfo->qname_len, labs, qinfo->qclass, qinfo->qtype, taglist, taglen, 0))) { lock_rw_unlock(&zones->lock); return 0; } lock_rw_rdlock(&z->lock); lzt = lz_type(taglist, taglen, z->taglist, z->taglen, tagactions, tagactionssize, z->type, repinfo, z->override_tree, &tag, tagname, num_tags); lock_rw_unlock(&zones->lock); if(z && verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(z->name, zname); verbose(VERB_ALGO, "using localzone %s %s", zname, local_zone_type2str(lzt)); } } if((env->cfg->log_local_actions || lzt == local_zone_inform || lzt == local_zone_inform_deny || lzt == local_zone_inform_redirect) && repinfo) lz_inform_print(z, qinfo, repinfo); if(lzt != local_zone_always_refuse && lzt != local_zone_always_transparent && lzt != local_zone_always_nxdomain && lzt != local_zone_always_nodata && lzt != local_zone_always_deny && local_data_answer(z, env, qinfo, edns, repinfo, buf, temp, labs, &ld, lzt, tag, tag_datas, tag_datas_size, tagname, num_tags)) { lock_rw_unlock(&z->lock); /* We should tell the caller that encode is deferred if we found * a local alias. */ return !qinfo->local_alias; } r = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, ld, lzt); lock_rw_unlock(&z->lock); return r && !qinfo->local_alias; /* see above */ } const char* local_zone_type2str(enum localzone_type t) { switch(t) { case local_zone_unset: return "unset"; case local_zone_deny: return "deny"; case local_zone_refuse: return "refuse"; case local_zone_redirect: return "redirect"; case local_zone_transparent: return "transparent"; case local_zone_typetransparent: return "typetransparent"; case local_zone_static: return "static"; case local_zone_nodefault: return "nodefault"; case local_zone_inform: return "inform"; case local_zone_inform_deny: return "inform_deny"; case local_zone_inform_redirect: return "inform_redirect"; case local_zone_always_transparent: return "always_transparent"; case local_zone_always_refuse: return "always_refuse"; case local_zone_always_nxdomain: return "always_nxdomain"; case local_zone_always_nodata: return "always_nodata"; case local_zone_always_deny: return "always_deny"; case local_zone_always_null: return "always_null"; case local_zone_noview: return "noview"; case local_zone_invalid: return "invalid"; } return "badtyped"; } int local_zone_str2type(const char* type, enum localzone_type* t) { if(strcmp(type, "deny") == 0) *t = local_zone_deny; else if(strcmp(type, "refuse") == 0) *t = local_zone_refuse; else if(strcmp(type, "static") == 0) *t = local_zone_static; else if(strcmp(type, "transparent") == 0) *t = local_zone_transparent; else if(strcmp(type, "typetransparent") == 0) *t = local_zone_typetransparent; else if(strcmp(type, "redirect") == 0) *t = local_zone_redirect; else if(strcmp(type, "inform") == 0) *t = local_zone_inform; else if(strcmp(type, "inform_deny") == 0) *t = local_zone_inform_deny; else if(strcmp(type, "inform_redirect") == 0) *t = local_zone_inform_redirect; else if(strcmp(type, "always_transparent") == 0) *t = local_zone_always_transparent; else if(strcmp(type, "always_refuse") == 0) *t = local_zone_always_refuse; else if(strcmp(type, "always_nxdomain") == 0) *t = local_zone_always_nxdomain; else if(strcmp(type, "always_nodata") == 0) *t = local_zone_always_nodata; else if(strcmp(type, "always_deny") == 0) *t = local_zone_always_deny; else if(strcmp(type, "always_null") == 0) *t = local_zone_always_null; else if(strcmp(type, "noview") == 0) *t = local_zone_noview; else if(strcmp(type, "nodefault") == 0) *t = local_zone_nodefault; else return 0; return 1; } /** iterate over the kiddies of the given name and set their parent ptr */ static void set_kiddo_parents(struct local_zone* z, struct local_zone* match, struct local_zone* newp) { /* both zones and z are locked already */ /* in the sorted rbtree, the kiddies of z are located after z */ /* z must be present in the tree */ struct local_zone* p = z; p = (struct local_zone*)rbtree_next(&p->node); while(p!=(struct local_zone*)RBTREE_NULL && p->dclass == z->dclass && dname_strict_subdomain(p->name, p->namelabs, z->name, z->namelabs)) { /* update parent ptr */ /* only when matches with existing parent pointer, so that * deeper child structures are not touched, i.e. * update of x, and a.x, b.x, f.b.x, g.b.x, c.x, y * gets to update a.x, b.x and c.x */ lock_rw_wrlock(&p->lock); if(p->parent == match) p->parent = newp; lock_rw_unlock(&p->lock); p = (struct local_zone*)rbtree_next(&p->node); } } struct local_zone* local_zones_add_zone(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, enum localzone_type tp) { /* create */ struct local_zone* z = local_zone_create(name, len, labs, tp, dclass); if(!z) { free(name); return NULL; } lock_rw_wrlock(&z->lock); /* find the closest parent */ z->parent = local_zones_find(zones, name, len, labs, dclass); /* insert into the tree */ if(!rbtree_insert(&zones->ztree, &z->node)) { /* duplicate entry! */ lock_rw_unlock(&z->lock); local_zone_delete(z); log_err("internal: duplicate entry in local_zones_add_zone"); return NULL; } /* set parent pointers right */ set_kiddo_parents(z, z->parent, z); lock_rw_unlock(&z->lock); return z; } void local_zones_del_zone(struct local_zones* zones, struct local_zone* z) { /* fix up parents in tree */ lock_rw_wrlock(&z->lock); set_kiddo_parents(z, z, z->parent); /* remove from tree */ (void)rbtree_delete(&zones->ztree, z); /* delete the zone */ lock_rw_unlock(&z->lock); local_zone_delete(z); } int local_zones_add_RR(struct local_zones* zones, const char* rr) { uint8_t* rr_name; uint16_t rr_class, rr_type; size_t len; int labs; struct local_zone* z; int r; if(!get_rr_nameclass(rr, &rr_name, &rr_class, &rr_type)) { return 0; } labs = dname_count_size_labels(rr_name, &len); /* could first try readlock then get writelock if zone does not exist, * but we do not add enough RRs (from multiple threads) to optimize */ lock_rw_wrlock(&zones->lock); z = local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type); if(!z) { z = local_zones_add_zone(zones, rr_name, len, labs, rr_class, local_zone_transparent); if(!z) { lock_rw_unlock(&zones->lock); return 0; } } else { free(rr_name); } lock_rw_wrlock(&z->lock); lock_rw_unlock(&zones->lock); r = lz_enter_rr_into_zone(z, rr); lock_rw_unlock(&z->lock); return r; } /** returns true if the node is terminal so no deeper domain names exist */ static int is_terminal(struct local_data* d) { /* for empty nonterminals, the deeper domain names are sorted * right after them, so simply check the next name in the tree */ struct local_data* n = (struct local_data*)rbtree_next(&d->node); if(n == (struct local_data*)RBTREE_NULL) return 1; /* last in tree, no deeper node */ if(dname_strict_subdomain(n->name, n->namelabs, d->name, d->namelabs)) return 0; /* there is a deeper node */ return 1; } /** delete empty terminals from tree when final data is deleted */ static void del_empty_term(struct local_zone* z, struct local_data* d, uint8_t* name, size_t len, int labs) { while(d && d->rrsets == NULL && is_terminal(d)) { /* is this empty nonterminal? delete */ /* note, no memory recycling in zone region */ (void)rbtree_delete(&z->data, d); /* go up and to the next label */ if(dname_is_root(name)) return; dname_remove_label(&name, &len); labs--; d = local_zone_find_data(z, name, len, labs); } } /** find and remove type from list in domain struct */ static void del_local_rrset(struct local_data* d, uint16_t dtype) { struct local_rrset* prev=NULL, *p=d->rrsets; while(p && ntohs(p->rrset->rk.type) != dtype) { prev = p; p = p->next; } if(!p) return; /* rrset type not found */ /* unlink it */ if(prev) prev->next = p->next; else d->rrsets = p->next; /* no memory recycling for zone deletions ... */ } void local_zones_del_data(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass) { /* find zone */ struct local_zone* z; struct local_data* d; /* remove DS */ lock_rw_rdlock(&zones->lock); z = local_zones_lookup(zones, name, len, labs, dclass, LDNS_RR_TYPE_DS); if(z) { lock_rw_wrlock(&z->lock); d = local_zone_find_data(z, name, len, labs); if(d) { del_local_rrset(d, LDNS_RR_TYPE_DS); del_empty_term(z, d, name, len, labs); } lock_rw_unlock(&z->lock); } lock_rw_unlock(&zones->lock); /* remove other types */ lock_rw_rdlock(&zones->lock); z = local_zones_lookup(zones, name, len, labs, dclass, 0); if(!z) { /* no such zone, we're done */ lock_rw_unlock(&zones->lock); return; } lock_rw_wrlock(&z->lock); lock_rw_unlock(&zones->lock); /* find the domain */ d = local_zone_find_data(z, name, len, labs); if(d) { /* no memory recycling for zone deletions ... */ d->rrsets = NULL; /* did we delete the soa record ? */ if(query_dname_compare(d->name, z->name) == 0) { z->soa = NULL; z->soa_negative = NULL; } /* cleanup the empty nonterminals for this name */ del_empty_term(z, d, name, len, labs); } lock_rw_unlock(&z->lock); } unbound-1.13.1/services/mesh.h0000644000175000017500000006021014010434640015626 0ustar wouterwouter/* * services/mesh.h - deal with mesh of query states and handle events for that. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist in dealing with a mesh of * query states. This mesh is supposed to be thread-specific. * It consists of query states (per qname, qtype, qclass) and connections * between query states and the super and subquery states, and replies to * send back to clients. */ #ifndef SERVICES_MESH_H #define SERVICES_MESH_H #include "util/rbtree.h" #include "util/netevent.h" #include "util/data/msgparse.h" #include "util/module.h" #include "services/modstack.h" #include "services/rpz.h" #include "libunbound/unbound.h" struct sldns_buffer; struct mesh_state; struct mesh_reply; struct mesh_cb; struct query_info; struct reply_info; struct outbound_entry; struct timehist; struct respip_client_info; /** * Maximum number of mesh state activations. Any more is likely an * infinite loop in the module. It is then terminated. */ #define MESH_MAX_ACTIVATION 10000 /** * Max number of references-to-references-to-references.. search size. * Any more is treated like 'too large', and the creation of a new * dependency is failed (so that no loops can be created). */ #define MESH_MAX_SUBSUB 1024 /** * Mesh of query states */ struct mesh_area { /** active module stack */ struct module_stack mods; /** environment for new states */ struct module_env* env; /** set of runnable queries (mesh_state.run_node) */ rbtree_type run; /** rbtree of all current queries (mesh_state.node)*/ rbtree_type all; /** count of the total number of mesh_reply entries */ size_t num_reply_addrs; /** count of the number of mesh_states that have mesh_replies * Because a state can send results to multiple reply addresses, * this number must be equal or lower than num_reply_addrs. */ size_t num_reply_states; /** number of mesh_states that have no mesh_replies, and also * an empty set of super-states, thus are 'toplevel' or detached * internal opportunistic queries */ size_t num_detached_states; /** number of reply states in the forever list */ size_t num_forever_states; /** max total number of reply states to have */ size_t max_reply_states; /** max forever number of reply states to have */ size_t max_forever_states; /** stats, cumulative number of reply states jostled out */ size_t stats_jostled; /** stats, cumulative number of incoming client msgs dropped */ size_t stats_dropped; /** stats, number of expired replies sent */ size_t ans_expired; /** number of replies sent */ size_t replies_sent; /** sum of waiting times for the replies */ struct timeval replies_sum_wait; /** histogram of time values */ struct timehist* histogram; /** (extended stats) secure replies */ size_t ans_secure; /** (extended stats) bogus replies */ size_t ans_bogus; /** (extended stats) rcodes in replies */ size_t ans_rcode[UB_STATS_RCODE_NUM]; /** (extended stats) rcode nodata in replies */ size_t ans_nodata; /** (extended stats) type of applied RPZ action */ size_t rpz_action[UB_STATS_RPZ_ACTION_NUM]; /** backup of query if other operations recurse and need the * network buffers */ struct sldns_buffer* qbuf_bak; /** double linked list of the run-to-completion query states. * These are query states with a reply */ struct mesh_state* forever_first; /** last entry in run forever list */ struct mesh_state* forever_last; /** double linked list of the query states that can be jostled out * by new queries if too old. These are query states with a reply */ struct mesh_state* jostle_first; /** last entry in jostle list - this is the entry that is newest */ struct mesh_state* jostle_last; /** timeout for jostling. if age is lower, it does not get jostled. */ struct timeval jostle_max; /** If we need to use response ip (value passed from daemon)*/ int use_response_ip; /** If we need to use RPZ (value passed from daemon) */ int use_rpz; }; /** * A mesh query state * Unique per qname, qtype, qclass (from the qstate). * And RD / CD flag; in case a client turns it off. * And priming queries are different from ordinary queries (because of hints). * * The entire structure is allocated in a region, this region is the qstate * region. All parts (rbtree nodes etc) are also allocated in the region. */ struct mesh_state { /** node in mesh_area all tree, key is this struct. Must be first. */ rbnode_type node; /** node in mesh_area runnable tree, key is this struct */ rbnode_type run_node; /** the query state. Note that the qinfo and query_flags * may not change. */ struct module_qstate s; /** the list of replies to clients for the results */ struct mesh_reply* reply_list; /** the list of callbacks for the results */ struct mesh_cb* cb_list; /** set of superstates (that want this state's result) * contains struct mesh_state_ref* */ rbtree_type super_set; /** set of substates (that this state needs to continue) * contains struct mesh_state_ref* */ rbtree_type sub_set; /** number of activations for the mesh state */ size_t num_activated; /** previous in linked list for reply states */ struct mesh_state* prev; /** next in linked list for reply states */ struct mesh_state* next; /** if this state is in the forever list, jostle list, or neither */ enum mesh_list_select { mesh_no_list, mesh_forever_list, mesh_jostle_list } list_select; /** pointer to this state for uniqueness or NULL */ struct mesh_state* unique; /** true if replies have been sent out (at end for alignment) */ uint8_t replies_sent; }; /** * Rbtree reference to a mesh_state. * Used in super_set and sub_set. */ struct mesh_state_ref { /** node in rbtree for set, key is this structure */ rbnode_type node; /** the mesh state */ struct mesh_state* s; }; /** * Reply to a client */ struct mesh_reply { /** next in reply list */ struct mesh_reply* next; /** the query reply destination, packet buffer and where to send. */ struct comm_reply query_reply; /** edns data from query */ struct edns_data edns; /** the time when request was entered */ struct timeval start_time; /** id of query, in network byteorder. */ uint16_t qid; /** flags of query, for reply flags */ uint16_t qflags; /** qname from this query. len same as mesh qinfo. */ uint8_t* qname; /** same as that in query_info. */ struct local_rrset* local_alias; /** send query to this http2 stream, if set */ struct http2_stream* h2_stream; }; /** * Mesh result callback func. * called as func(cb_arg, rcode, buffer_with_reply, security, why_bogus, * was_ratelimited); */ typedef void (*mesh_cb_func_type)(void* cb_arg, int rcode, struct sldns_buffer*, enum sec_status, char* why_bogus, int was_ratelimited); /** * Callback to result routine */ struct mesh_cb { /** next in list */ struct mesh_cb* next; /** edns data from query */ struct edns_data edns; /** id of query, in network byteorder. */ uint16_t qid; /** flags of query, for reply flags */ uint16_t qflags; /** buffer for reply */ struct sldns_buffer* buf; /** callback routine for results. if rcode != 0 buf has message. * called as cb(cb_arg, rcode, buf, sec_state, why_bogus, was_ratelimited); */ mesh_cb_func_type cb; /** user arg for callback */ void* cb_arg; }; /* ------------------- Functions for worker -------------------- */ /** * Allocate mesh, to empty. * @param stack: module stack to activate, copied (as readonly reference). * @param env: environment for new queries. * @return mesh: the new mesh or NULL on error. */ struct mesh_area* mesh_create(struct module_stack* stack, struct module_env* env); /** * Delete mesh, and all query states and replies in it. * @param mesh: the mesh to delete. */ void mesh_delete(struct mesh_area* mesh); /** * New query incoming from clients. Create new query state if needed, and * add mesh_reply to it. Returns error to client on malloc failures. * Will run the mesh area queries to process if a new query state is created. * * @param mesh: the mesh. * @param qinfo: query from client. * @param cinfo: additional information associated with the query client. * 'cinfo' itself is ephemeral but data pointed to by its members * can be assumed to be valid and unchanged until the query processing is * completed. * @param qflags: flags from client query. * @param edns: edns data from client query. * @param rep: where to reply to. * @param qid: query id to reply with. */ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, struct respip_client_info* cinfo, uint16_t qflags, struct edns_data* edns, struct comm_reply* rep, uint16_t qid); /** * New query with callback. Create new query state if needed, and * add mesh_cb to it. * Will run the mesh area queries to process if a new query state is created. * * @param mesh: the mesh. * @param qinfo: query from client. * @param qflags: flags from client query. * @param edns: edns data from client query. * @param buf: buffer for reply contents. * @param qid: query id to reply with. * @param cb: callback function. * @param cb_arg: callback user arg. * @return 0 on error. */ int mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qflags, struct edns_data* edns, struct sldns_buffer* buf, uint16_t qid, mesh_cb_func_type cb, void* cb_arg); /** * New prefetch message. Create new query state if needed. * Will run the mesh area queries to process if a new query state is created. * * @param mesh: the mesh. * @param qinfo: query from client. * @param qflags: flags from client query. * @param leeway: TTL leeway what to expire earlier for this update. */ void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qflags, time_t leeway); /** * Handle new event from the wire. A serviced query has returned. * The query state will be made runnable, and the mesh_area will process * query states until processing is complete. * * @param mesh: the query mesh. * @param e: outbound entry, with query state to run and reply pointer. * @param reply: the comm point reply info. * @param what: NETEVENT_* error code (if not 0, what is wrong, TIMEOUT). */ void mesh_report_reply(struct mesh_area* mesh, struct outbound_entry* e, struct comm_reply* reply, int what); /* ------------------- Functions for module environment --------------- */ /** * Detach-subqueries. * Remove all sub-query references from this query state. * Keeps super-references of those sub-queries correct. * Updates stat items in mesh_area structure. * @param qstate: used to find mesh state. */ void mesh_detach_subs(struct module_qstate* qstate); /** * Attach subquery. * Creates it if it does not exist already. * Keeps sub and super references correct. * Performs a cycle detection - for double check - and fails if there is one. * Also fails if the sub-sub-references become too large. * Updates stat items in mesh_area structure. * Pass if it is priming query or not. * return: * o if error (malloc) happened. * o need to initialise the new state (module init; it is a new state). * so that the next run of the query with this module is successful. * o no init needed, attachment successful. * * @param qstate: the state to find mesh state, and that wants to receive * the results from the new subquery. * @param qinfo: what to query for (copied). * @param qflags: what flags to use (RD / CD flag or not). * @param prime: if it is a (stub) priming query. * @param valrec: if it is a validation recursion query (lookup of key, DS). * @param newq: If the new subquery needs initialisation, it is returned, * otherwise NULL is returned. * @return: false on error, true if success (and init may be needed). */ int mesh_attach_sub(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq); /** * Add detached query. * Creates it if it does not exist already. * Does not make super/sub references. * Performs a cycle detection - for double check - and fails if there is one. * Updates stat items in mesh_area structure. * Pass if it is priming query or not. * return: * o if error (malloc) happened. * o need to initialise the new state (module init; it is a new state). * so that the next run of the query with this module is successful. * o no init needed, attachment successful. * o added subquery, created if it did not exist already. * * @param qstate: the state to find mesh state, and that wants to receive * the results from the new subquery. * @param qinfo: what to query for (copied). * @param qflags: what flags to use (RD / CD flag or not). * @param prime: if it is a (stub) priming query. * @param valrec: if it is a validation recursion query (lookup of key, DS). * @param newq: If the new subquery needs initialisation, it is returned, * otherwise NULL is returned. * @param sub: The added mesh state, created if it did not exist already. * @return: false on error, true if success (and init may be needed). */ int mesh_add_sub(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq, struct mesh_state** sub); /** * Query state is done, send messages to reply entries. * Encode messages using reply entry values and the querystate (with original * qinfo), using given reply_info. * Pass errcode != 0 if an error reply is needed. * If no reply entries, nothing is done. * Must be called before a module can module_finished or return module_error. * The module must handle the super query states itself as well. * * @param mstate: mesh state that is done. return_rcode and return_msg * are used for replies. * return_rcode: if not 0 (NOERROR) an error is sent back (and * return_msg is ignored). * return_msg: reply to encode and send back to clients. */ void mesh_query_done(struct mesh_state* mstate); /** * Call inform_super for the super query states that are interested in the * results from this query state. These can then be changed for error * or results. * Called when a module is module_finished or returns module_error. * The super query states become runnable with event module_event_pass, * it calls the current module for the super with the inform_super event. * * @param mesh: mesh area to add newly runnable modules to. * @param mstate: the state that has results, used to find mesh state. */ void mesh_walk_supers(struct mesh_area* mesh, struct mesh_state* mstate); /** * Delete mesh state, cleanup and also rbtrees and so on. * Will detach from all super/subnodes. * @param qstate: to remove. */ void mesh_state_delete(struct module_qstate* qstate); /* ------------------- Functions for mesh -------------------- */ /** * Create and initialize a new mesh state and its query state * Does not put the mesh state into rbtrees and so on. * @param env: module environment to set. * @param qinfo: query info that the mesh is for. * @param cinfo: control info for the query client (can be NULL). * @param qflags: flags for query (RD / CD flag). * @param prime: if true, it is a priming query, set is_priming on mesh state. * @param valrec: if true, it is a validation recursion query, and sets * is_valrec on the mesh state. * @return: new mesh state or NULL on allocation error. */ struct mesh_state* mesh_state_create(struct module_env* env, struct query_info* qinfo, struct respip_client_info* cinfo, uint16_t qflags, int prime, int valrec); /** * Check if the mesh state is unique. * A unique mesh state uses it's unique member to point to itself, else NULL. * @param mstate: mesh state to check. * @return true if the mesh state is unique, false otherwise. */ int mesh_state_is_unique(struct mesh_state* mstate); /** * Make a mesh state unique. * A unique mesh state uses it's unique member to point to itself. * @param mstate: mesh state to check. */ void mesh_state_make_unique(struct mesh_state* mstate); /** * Cleanup a mesh state and its query state. Does not do rbtree or * reference cleanup. * @param mstate: mesh state to cleanup. Its pointer may no longer be used * afterwards. Cleanup rbtrees before calling this function. */ void mesh_state_cleanup(struct mesh_state* mstate); /** * Delete all mesh states from the mesh. * @param mesh: the mesh area to clear */ void mesh_delete_all(struct mesh_area* mesh); /** * Find a mesh state in the mesh area. Pass relevant flags. * * @param mesh: the mesh area to look in. * @param cinfo: if non-NULL client specific info that may affect IP-based * actions that apply to the query result. * @param qinfo: what query * @param qflags: if RD / CD bit is set or not. * @param prime: if it is a priming query. * @param valrec: if it is a validation-recursion query. * @return: mesh state or NULL if not found. */ struct mesh_state* mesh_area_find(struct mesh_area* mesh, struct respip_client_info* cinfo, struct query_info* qinfo, uint16_t qflags, int prime, int valrec); /** * Setup attachment super/sub relation between super and sub mesh state. * The relation must not be present when calling the function. * Does not update stat items in mesh_area. * @param super: super state. * @param sub: sub state. * @return: 0 on alloc error. */ int mesh_state_attachment(struct mesh_state* super, struct mesh_state* sub); /** * Create new reply structure and attach it to a mesh state. * Does not update stat items in mesh area. * @param s: the mesh state. * @param edns: edns data for reply (bufsize). * @param rep: comm point reply info. * @param qid: ID of reply. * @param qflags: original query flags. * @param qinfo: original query info. * @return: 0 on alloc error. */ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns, struct comm_reply* rep, uint16_t qid, uint16_t qflags, const struct query_info* qinfo); /** * Create new callback structure and attach it to a mesh state. * Does not update stat items in mesh area. * @param s: the mesh state. * @param edns: edns data for reply (bufsize). * @param buf: buffer for reply * @param cb: callback to call with results. * @param cb_arg: callback user arg. * @param qid: ID of reply. * @param qflags: original query flags. * @return: 0 on alloc error. */ int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns, struct sldns_buffer* buf, mesh_cb_func_type cb, void* cb_arg, uint16_t qid, uint16_t qflags); /** * Run the mesh. Run all runnable mesh states. Which can create new * runnable mesh states. Until completion. Automatically called by * mesh_report_reply and mesh_new_client as needed. * @param mesh: mesh area. * @param mstate: first mesh state to run. * @param ev: event the mstate. Others get event_pass. * @param e: if a reply, its outbound entry. */ void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate, enum module_ev ev, struct outbound_entry* e); /** * Print some stats about the mesh to the log. * @param mesh: the mesh to print it for. * @param str: descriptive string to go with it. */ void mesh_stats(struct mesh_area* mesh, const char* str); /** * Clear the stats that the mesh keeps (number of queries serviced) * @param mesh: the mesh */ void mesh_stats_clear(struct mesh_area* mesh); /** * Print all the states in the mesh to the log. * @param mesh: the mesh to print all states of. */ void mesh_log_list(struct mesh_area* mesh); /** * Calculate memory size in use by mesh and all queries inside it. * @param mesh: the mesh to examine. * @return size in bytes. */ size_t mesh_get_mem(struct mesh_area* mesh); /** * Find cycle; see if the given mesh is in the targets sub, or sub-sub, ... * trees. * If the sub-sub structure is too large, it returns 'a cycle'=2. * @param qstate: given mesh querystate. * @param qinfo: query info for dependency. * @param flags: query flags of dependency. * @param prime: if dependency is a priming query or not. * @param valrec: if it is a validation recursion query (lookup of key, DS). * @return true if the name,type,class exists and the given qstate mesh exists * as a dependency of that name. Thus if qstate becomes dependent on * name,type,class then a cycle is created, this is return value 1. * Too large to search is value 2 (also true). */ int mesh_detect_cycle(struct module_qstate* qstate, struct query_info* qinfo, uint16_t flags, int prime, int valrec); /** compare two mesh_states */ int mesh_state_compare(const void* ap, const void* bp); /** compare two mesh references */ int mesh_state_ref_compare(const void* ap, const void* bp); /** * Make space for another recursion state for a reply in the mesh * @param mesh: mesh area * @param qbuf: query buffer to save if recursion is invoked to make space. * This buffer is necessary, because the following sequence in calls * can result in an overwrite of the incoming query: * delete_other_mesh_query - iter_clean - serviced_delete - waiting * udp query is sent - on error callback - callback sends SERVFAIL reply * over the same network channel, and shared UDP buffer is overwritten. * You can pass NULL if there is no buffer that must be backed up. * @return false if no space is available. */ int mesh_make_new_space(struct mesh_area* mesh, struct sldns_buffer* qbuf); /** * Insert mesh state into a double linked list. Inserted at end. * @param m: mesh state. * @param fp: pointer to the first-elem-pointer of the list. * @param lp: pointer to the last-elem-pointer of the list. */ void mesh_list_insert(struct mesh_state* m, struct mesh_state** fp, struct mesh_state** lp); /** * Remove mesh state from a double linked list. Remove from any position. * @param m: mesh state. * @param fp: pointer to the first-elem-pointer of the list. * @param lp: pointer to the last-elem-pointer of the list. */ void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp, struct mesh_state** lp); /** * Remove mesh reply entry from the reply entry list. Searches for * the comm_point pointer. * @param mesh: to update the counters. * @param m: the mesh state. * @param cp: the comm_point to remove from the list. */ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, struct comm_point* cp); /** Callback for when the serve expired client timer has run out. Tries to * find an expired answer in the cache and reply that to the client. * @param arg: the argument passed to the callback. */ void mesh_serve_expired_callback(void* arg); /** * Try to get a (expired) cached answer. * This needs to behave like the worker's answer_from_cache() in order to have * the same behavior as when replying from cache. * @param qstate: the module qstate. * @param lookup_qinfo: the query info to look for in the cache. * @return dns_msg if a cached answer was found, otherwise NULL. */ struct dns_msg* mesh_serve_expired_lookup(struct module_qstate* qstate, struct query_info* lookup_qinfo); #endif /* SERVICES_MESH_H */ unbound-1.13.1/services/listen_dnsport.c0000644000175000017500000024157414010434640017752 0ustar wouterwouter/* * services/listen_dnsport.c - listen on port 53 for incoming DNS queries. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file has functions to get queries from clients. */ #include "config.h" #ifdef HAVE_SYS_TYPES_H # include #endif #include #include #ifdef USE_TCP_FASTOPEN #include #endif #include "services/listen_dnsport.h" #include "services/outside_network.h" #include "util/netevent.h" #include "util/log.h" #include "util/config_file.h" #include "util/net_help.h" #include "sldns/sbuffer.h" #include "sldns/parseutil.h" #include "services/mesh.h" #include "util/fptr_wlist.h" #include "util/locks.h" #ifdef HAVE_NETDB_H #include #endif #include #ifdef HAVE_SYS_UN_H #include #endif #ifdef HAVE_SYSTEMD #include #endif #ifdef HAVE_IFADDRS_H #include #endif #ifdef HAVE_NET_IF_H #include #endif /** number of queued TCP connections for listen() */ #define TCP_BACKLOG 256 #ifndef THREADS_DISABLED /** lock on the counter of stream buffer memory */ static lock_basic_type stream_wait_count_lock; /** lock on the counter of HTTP2 query buffer memory */ static lock_basic_type http2_query_buffer_count_lock; /** lock on the counter of HTTP2 response buffer memory */ static lock_basic_type http2_response_buffer_count_lock; #endif /** size (in bytes) of stream wait buffers */ static size_t stream_wait_count = 0; /** is the lock initialised for stream wait buffers */ static int stream_wait_lock_inited = 0; /** size (in bytes) of HTTP2 query buffers */ static size_t http2_query_buffer_count = 0; /** is the lock initialised for HTTP2 query buffers */ static int http2_query_buffer_lock_inited = 0; /** size (in bytes) of HTTP2 response buffers */ static size_t http2_response_buffer_count = 0; /** is the lock initialised for HTTP2 response buffers */ static int http2_response_buffer_lock_inited = 0; /** * Debug print of the getaddrinfo returned address. * @param addr: the address returned. */ static void verbose_print_addr(struct addrinfo *addr) { if(verbosity >= VERB_ALGO) { char buf[100]; void* sinaddr = &((struct sockaddr_in*)addr->ai_addr)->sin_addr; #ifdef INET6 if(addr->ai_family == AF_INET6) sinaddr = &((struct sockaddr_in6*)addr->ai_addr)-> sin6_addr; #endif /* INET6 */ if(inet_ntop(addr->ai_family, sinaddr, buf, (socklen_t)sizeof(buf)) == 0) { (void)strlcpy(buf, "(null)", sizeof(buf)); } buf[sizeof(buf)-1] = 0; verbose(VERB_ALGO, "creating %s%s socket %s %d", addr->ai_socktype==SOCK_DGRAM?"udp": addr->ai_socktype==SOCK_STREAM?"tcp":"otherproto", addr->ai_family==AF_INET?"4": addr->ai_family==AF_INET6?"6": "_otherfam", buf, ntohs(((struct sockaddr_in*)addr->ai_addr)->sin_port)); } } #ifdef HAVE_SYSTEMD static int systemd_get_activated(int family, int socktype, int listen, struct sockaddr *addr, socklen_t addrlen, const char *path) { int i = 0; int r = 0; int s = -1; const char* listen_pid, *listen_fds; /* We should use "listen" option only for stream protocols. For UDP it should be -1 */ if((r = sd_booted()) < 1) { if(r == 0) log_warn("systemd is not running"); else log_err("systemd sd_booted(): %s", strerror(-r)); return -1; } listen_pid = getenv("LISTEN_PID"); listen_fds = getenv("LISTEN_FDS"); if (!listen_pid) { log_warn("Systemd mandatory ENV variable is not defined: LISTEN_PID"); return -1; } if (!listen_fds) { log_warn("Systemd mandatory ENV variable is not defined: LISTEN_FDS"); return -1; } if((r = sd_listen_fds(0)) < 1) { if(r == 0) log_warn("systemd: did not return socket, check unit configuration"); else log_err("systemd sd_listen_fds(): %s", strerror(-r)); return -1; } for(i = 0; i < r; i++) { if(sd_is_socket(SD_LISTEN_FDS_START + i, family, socktype, listen)) { s = SD_LISTEN_FDS_START + i; break; } } if (s == -1) { if (addr) log_err_addr("systemd sd_listen_fds()", "no such socket", (struct sockaddr_storage *)addr, addrlen); else log_err("systemd sd_listen_fds(): %s", path); } return s; } #endif int create_udp_sock(int family, int socktype, struct sockaddr* addr, socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv, int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd, int dscp) { int s; char* err; #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined (SO_BINDANY) int on=1; #endif #ifdef IPV6_MTU int mtu = IPV6_MIN_MTU; #endif #if !defined(SO_RCVBUFFORCE) && !defined(SO_RCVBUF) (void)rcv; #endif #if !defined(SO_SNDBUFFORCE) && !defined(SO_SNDBUF) (void)snd; #endif #ifndef IPV6_V6ONLY (void)v6only; #endif #if !defined(IP_TRANSPARENT) && !defined(IP_BINDANY) && !defined(SO_BINDANY) (void)transparent; #endif #if !defined(IP_FREEBIND) (void)freebind; #endif #ifdef HAVE_SYSTEMD int got_fd_from_systemd = 0; if (!use_systemd || (use_systemd && (s = systemd_get_activated(family, socktype, -1, addr, addrlen, NULL)) == -1)) { #else (void)use_systemd; #endif if((s = socket(family, socktype, 0)) == -1) { *inuse = 0; #ifndef USE_WINSOCK if(errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) { *noproto = 1; return -1; } #else if(WSAGetLastError() == WSAEAFNOSUPPORT || WSAGetLastError() == WSAEPROTONOSUPPORT) { *noproto = 1; return -1; } #endif log_err("can't create socket: %s", sock_strerror(errno)); *noproto = 0; return -1; } #ifdef HAVE_SYSTEMD } else { got_fd_from_systemd = 1; } #endif if(listen) { #ifdef SO_REUSEADDR if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s", sock_strerror(errno)); #ifndef USE_WINSOCK if(errno != ENOSYS) { close(s); *noproto = 0; *inuse = 0; return -1; } #else closesocket(s); *noproto = 0; *inuse = 0; return -1; #endif } #endif /* SO_REUSEADDR */ #ifdef SO_REUSEPORT # ifdef SO_REUSEPORT_LB /* on FreeBSD 12 we have SO_REUSEPORT_LB that does loadbalance * like SO_REUSEPORT on Linux. This is what the users want * with the config option in unbound.conf; if we actually * need local address and port reuse they'll also need to * have SO_REUSEPORT set for them, assume it was _LB they want. */ if (reuseport && *reuseport && setsockopt(s, SOL_SOCKET, SO_REUSEPORT_LB, (void*)&on, (socklen_t)sizeof(on)) < 0) { #ifdef ENOPROTOOPT if(errno != ENOPROTOOPT || verbosity >= 3) log_warn("setsockopt(.. SO_REUSEPORT_LB ..) failed: %s", strerror(errno)); #endif /* this option is not essential, we can continue */ *reuseport = 0; } # else /* no SO_REUSEPORT_LB */ /* try to set SO_REUSEPORT so that incoming * queries are distributed evenly among the receiving threads. * Each thread must have its own socket bound to the same port, * with SO_REUSEPORT set on each socket. */ if (reuseport && *reuseport && setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (void*)&on, (socklen_t)sizeof(on)) < 0) { #ifdef ENOPROTOOPT if(errno != ENOPROTOOPT || verbosity >= 3) log_warn("setsockopt(.. SO_REUSEPORT ..) failed: %s", strerror(errno)); #endif /* this option is not essential, we can continue */ *reuseport = 0; } # endif /* SO_REUSEPORT_LB */ #else (void)reuseport; #endif /* defined(SO_REUSEPORT) */ #ifdef IP_TRANSPARENT if (transparent && setsockopt(s, IPPROTO_IP, IP_TRANSPARENT, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_warn("setsockopt(.. IP_TRANSPARENT ..) failed: %s", strerror(errno)); } #elif defined(IP_BINDANY) if (transparent && setsockopt(s, (family==AF_INET6? IPPROTO_IPV6:IPPROTO_IP), (family == AF_INET6? IPV6_BINDANY:IP_BINDANY), (void*)&on, (socklen_t)sizeof(on)) < 0) { log_warn("setsockopt(.. IP%s_BINDANY ..) failed: %s", (family==AF_INET6?"V6":""), strerror(errno)); } #elif defined(SO_BINDANY) if (transparent && setsockopt(s, SOL_SOCKET, SO_BINDANY, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_warn("setsockopt(.. SO_BINDANY ..) failed: %s", strerror(errno)); } #endif /* IP_TRANSPARENT || IP_BINDANY || SO_BINDANY */ } #ifdef IP_FREEBIND if(freebind && setsockopt(s, IPPROTO_IP, IP_FREEBIND, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_warn("setsockopt(.. IP_FREEBIND ..) failed: %s", strerror(errno)); } #endif /* IP_FREEBIND */ if(rcv) { #ifdef SO_RCVBUF int got; socklen_t slen = (socklen_t)sizeof(got); # ifdef SO_RCVBUFFORCE /* Linux specific: try to use root permission to override * system limits on rcvbuf. The limit is stored in * /proc/sys/net/core/rmem_max or sysctl net.core.rmem_max */ if(setsockopt(s, SOL_SOCKET, SO_RCVBUFFORCE, (void*)&rcv, (socklen_t)sizeof(rcv)) < 0) { if(errno != EPERM) { log_err("setsockopt(..., SO_RCVBUFFORCE, " "...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } # endif /* SO_RCVBUFFORCE */ if(setsockopt(s, SOL_SOCKET, SO_RCVBUF, (void*)&rcv, (socklen_t)sizeof(rcv)) < 0) { log_err("setsockopt(..., SO_RCVBUF, " "...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } /* check if we got the right thing or if system * reduced to some system max. Warn if so */ if(getsockopt(s, SOL_SOCKET, SO_RCVBUF, (void*)&got, &slen) >= 0 && got < rcv/2) { log_warn("so-rcvbuf %u was not granted. " "Got %u. To fix: start with " "root permissions(linux) or sysctl " "bigger net.core.rmem_max(linux) or " "kern.ipc.maxsockbuf(bsd) values.", (unsigned)rcv, (unsigned)got); } # ifdef SO_RCVBUFFORCE } # endif #endif /* SO_RCVBUF */ } /* first do RCVBUF as the receive buffer is more important */ if(snd) { #ifdef SO_SNDBUF int got; socklen_t slen = (socklen_t)sizeof(got); # ifdef SO_SNDBUFFORCE /* Linux specific: try to use root permission to override * system limits on sndbuf. The limit is stored in * /proc/sys/net/core/wmem_max or sysctl net.core.wmem_max */ if(setsockopt(s, SOL_SOCKET, SO_SNDBUFFORCE, (void*)&snd, (socklen_t)sizeof(snd)) < 0) { if(errno != EPERM) { log_err("setsockopt(..., SO_SNDBUFFORCE, " "...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } # endif /* SO_SNDBUFFORCE */ if(setsockopt(s, SOL_SOCKET, SO_SNDBUF, (void*)&snd, (socklen_t)sizeof(snd)) < 0) { log_err("setsockopt(..., SO_SNDBUF, " "...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } /* check if we got the right thing or if system * reduced to some system max. Warn if so */ if(getsockopt(s, SOL_SOCKET, SO_SNDBUF, (void*)&got, &slen) >= 0 && got < snd/2) { log_warn("so-sndbuf %u was not granted. " "Got %u. To fix: start with " "root permissions(linux) or sysctl " "bigger net.core.wmem_max(linux) or " "kern.ipc.maxsockbuf(bsd) values.", (unsigned)snd, (unsigned)got); } # ifdef SO_SNDBUFFORCE } # endif #endif /* SO_SNDBUF */ } err = set_ip_dscp(s, family, dscp); if(err != NULL) log_warn("error setting IP DiffServ codepoint %d on UDP socket: %s", dscp, err); if(family == AF_INET6) { # if defined(IPV6_V6ONLY) if(v6only) { int val=(v6only==2)?0:1; if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&val, (socklen_t)sizeof(val)) < 0) { log_err("setsockopt(..., IPV6_V6ONLY" ", ...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } } # endif # if defined(IPV6_USE_MIN_MTU) /* * There is no fragmentation of IPv6 datagrams * during forwarding in the network. Therefore * we do not send UDP datagrams larger than * the minimum IPv6 MTU of 1280 octets. The * EDNS0 message length can be larger if the * network stack supports IPV6_USE_MIN_MTU. */ if (setsockopt(s, IPPROTO_IPV6, IPV6_USE_MIN_MTU, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(..., IPV6_USE_MIN_MTU, " "...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } # elif defined(IPV6_MTU) /* * On Linux, to send no larger than 1280, the PMTUD is * disabled by default for datagrams anyway, so we set * the MTU to use. */ if (setsockopt(s, IPPROTO_IPV6, IPV6_MTU, (void*)&mtu, (socklen_t)sizeof(mtu)) < 0) { log_err("setsockopt(..., IPV6_MTU, ...) failed: %s", sock_strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } # endif /* IPv6 MTU */ } else if(family == AF_INET) { # if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT) /* linux 3.15 has IP_PMTUDISC_OMIT, Hannes Frederic Sowa made it so that * PMTU information is not accepted, but fragmentation is allowed * if and only if the packet size exceeds the outgoing interface MTU * (and also uses the interface mtu to determine the size of the packets). * So there won't be any EMSGSIZE error. Against DNS fragmentation attacks. * FreeBSD already has same semantics without setting the option. */ int omit_set = 0; int action; # if defined(IP_PMTUDISC_OMIT) action = IP_PMTUDISC_OMIT; if (setsockopt(s, IPPROTO_IP, IP_MTU_DISCOVER, &action, (socklen_t)sizeof(action)) < 0) { if (errno != EINVAL) { log_err("setsockopt(..., IP_MTU_DISCOVER, IP_PMTUDISC_OMIT...) failed: %s", strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } } else { omit_set = 1; } # endif if (omit_set == 0) { action = IP_PMTUDISC_DONT; if (setsockopt(s, IPPROTO_IP, IP_MTU_DISCOVER, &action, (socklen_t)sizeof(action)) < 0) { log_err("setsockopt(..., IP_MTU_DISCOVER, IP_PMTUDISC_DONT...) failed: %s", strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } } # elif defined(IP_DONTFRAG) && !defined(__APPLE__) /* the IP_DONTFRAG option if defined in the 11.0 OSX headers, * but does not work on that version, so we exclude it */ int off = 0; if (setsockopt(s, IPPROTO_IP, IP_DONTFRAG, &off, (socklen_t)sizeof(off)) < 0) { log_err("setsockopt(..., IP_DONTFRAG, ...) failed: %s", strerror(errno)); sock_close(s); *noproto = 0; *inuse = 0; return -1; } # endif /* IPv4 MTU */ } if( #ifdef HAVE_SYSTEMD !got_fd_from_systemd && #endif bind(s, (struct sockaddr*)addr, addrlen) != 0) { *noproto = 0; *inuse = 0; #ifndef USE_WINSOCK #ifdef EADDRINUSE *inuse = (errno == EADDRINUSE); /* detect freebsd jail with no ipv6 permission */ if(family==AF_INET6 && errno==EINVAL) *noproto = 1; else if(errno != EADDRINUSE && !(errno == EACCES && verbosity < 4 && !listen) #ifdef EADDRNOTAVAIL && !(errno == EADDRNOTAVAIL && verbosity < 4 && !listen) #endif ) { log_err_addr("can't bind socket", strerror(errno), (struct sockaddr_storage*)addr, addrlen); } #endif /* EADDRINUSE */ #else /* USE_WINSOCK */ if(WSAGetLastError() != WSAEADDRINUSE && WSAGetLastError() != WSAEADDRNOTAVAIL && !(WSAGetLastError() == WSAEACCES && verbosity < 4 && !listen)) { log_err_addr("can't bind socket", wsa_strerror(WSAGetLastError()), (struct sockaddr_storage*)addr, addrlen); } #endif /* USE_WINSOCK */ sock_close(s); return -1; } if(!fd_set_nonblock(s)) { *noproto = 0; *inuse = 0; sock_close(s); return -1; } return s; } int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, int* reuseport, int transparent, int mss, int nodelay, int freebind, int use_systemd, int dscp) { int s; char* err; #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined(SO_BINDANY) int on = 1; #endif #ifdef HAVE_SYSTEMD int got_fd_from_systemd = 0; #endif #ifdef USE_TCP_FASTOPEN int qlen; #endif #if !defined(IP_TRANSPARENT) && !defined(IP_BINDANY) && !defined(SO_BINDANY) (void)transparent; #endif #if !defined(IP_FREEBIND) (void)freebind; #endif verbose_print_addr(addr); *noproto = 0; #ifdef HAVE_SYSTEMD if (!use_systemd || (use_systemd && (s = systemd_get_activated(addr->ai_family, addr->ai_socktype, 1, addr->ai_addr, addr->ai_addrlen, NULL)) == -1)) { #else (void)use_systemd; #endif if((s = socket(addr->ai_family, addr->ai_socktype, 0)) == -1) { #ifndef USE_WINSOCK if(errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) { *noproto = 1; return -1; } #else if(WSAGetLastError() == WSAEAFNOSUPPORT || WSAGetLastError() == WSAEPROTONOSUPPORT) { *noproto = 1; return -1; } #endif log_err("can't create socket: %s", sock_strerror(errno)); return -1; } if(nodelay) { #if defined(IPPROTO_TCP) && defined(TCP_NODELAY) if(setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (void*)&on, (socklen_t)sizeof(on)) < 0) { #ifndef USE_WINSOCK log_err(" setsockopt(.. TCP_NODELAY ..) failed: %s", strerror(errno)); #else log_err(" setsockopt(.. TCP_NODELAY ..) failed: %s", wsa_strerror(WSAGetLastError())); #endif } #else log_warn(" setsockopt(TCP_NODELAY) unsupported"); #endif /* defined(IPPROTO_TCP) && defined(TCP_NODELAY) */ } if (mss > 0) { #if defined(IPPROTO_TCP) && defined(TCP_MAXSEG) if(setsockopt(s, IPPROTO_TCP, TCP_MAXSEG, (void*)&mss, (socklen_t)sizeof(mss)) < 0) { log_err(" setsockopt(.. TCP_MAXSEG ..) failed: %s", sock_strerror(errno)); } else { verbose(VERB_ALGO, " tcp socket mss set to %d", mss); } #else log_warn(" setsockopt(TCP_MAXSEG) unsupported"); #endif /* defined(IPPROTO_TCP) && defined(TCP_MAXSEG) */ } #ifdef HAVE_SYSTEMD } else { got_fd_from_systemd = 1; } #endif #ifdef SO_REUSEADDR if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s", sock_strerror(errno)); sock_close(s); return -1; } #endif /* SO_REUSEADDR */ #ifdef IP_FREEBIND if (freebind && setsockopt(s, IPPROTO_IP, IP_FREEBIND, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_warn("setsockopt(.. IP_FREEBIND ..) failed: %s", strerror(errno)); } #endif /* IP_FREEBIND */ #ifdef SO_REUSEPORT /* try to set SO_REUSEPORT so that incoming * connections are distributed evenly among the receiving threads. * Each thread must have its own socket bound to the same port, * with SO_REUSEPORT set on each socket. */ if (reuseport && *reuseport && setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (void*)&on, (socklen_t)sizeof(on)) < 0) { #ifdef ENOPROTOOPT if(errno != ENOPROTOOPT || verbosity >= 3) log_warn("setsockopt(.. SO_REUSEPORT ..) failed: %s", strerror(errno)); #endif /* this option is not essential, we can continue */ *reuseport = 0; } #else (void)reuseport; #endif /* defined(SO_REUSEPORT) */ #if defined(IPV6_V6ONLY) if(addr->ai_family == AF_INET6 && v6only) { if(setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(..., IPV6_V6ONLY, ...) failed: %s", sock_strerror(errno)); sock_close(s); return -1; } } #else (void)v6only; #endif /* IPV6_V6ONLY */ #ifdef IP_TRANSPARENT if (transparent && setsockopt(s, IPPROTO_IP, IP_TRANSPARENT, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_warn("setsockopt(.. IP_TRANSPARENT ..) failed: %s", strerror(errno)); } #elif defined(IP_BINDANY) if (transparent && setsockopt(s, (addr->ai_family==AF_INET6? IPPROTO_IPV6:IPPROTO_IP), (addr->ai_family == AF_INET6? IPV6_BINDANY:IP_BINDANY), (void*)&on, (socklen_t)sizeof(on)) < 0) { log_warn("setsockopt(.. IP%s_BINDANY ..) failed: %s", (addr->ai_family==AF_INET6?"V6":""), strerror(errno)); } #elif defined(SO_BINDANY) if (transparent && setsockopt(s, SOL_SOCKET, SO_BINDANY, (void*)&on, (socklen_t) sizeof(on)) < 0) { log_warn("setsockopt(.. SO_BINDANY ..) failed: %s", strerror(errno)); } #endif /* IP_TRANSPARENT || IP_BINDANY || SO_BINDANY */ err = set_ip_dscp(s, addr->ai_family, dscp); if(err != NULL) log_warn("error setting IP DiffServ codepoint %d on TCP socket: %s", dscp, err); if( #ifdef HAVE_SYSTEMD !got_fd_from_systemd && #endif bind(s, addr->ai_addr, addr->ai_addrlen) != 0) { #ifndef USE_WINSOCK /* detect freebsd jail with no ipv6 permission */ if(addr->ai_family==AF_INET6 && errno==EINVAL) *noproto = 1; else { log_err_addr("can't bind socket", strerror(errno), (struct sockaddr_storage*)addr->ai_addr, addr->ai_addrlen); } #else log_err_addr("can't bind socket", wsa_strerror(WSAGetLastError()), (struct sockaddr_storage*)addr->ai_addr, addr->ai_addrlen); #endif sock_close(s); return -1; } if(!fd_set_nonblock(s)) { sock_close(s); return -1; } if(listen(s, TCP_BACKLOG) == -1) { log_err("can't listen: %s", sock_strerror(errno)); sock_close(s); return -1; } #ifdef USE_TCP_FASTOPEN /* qlen specifies how many outstanding TFO requests to allow. Limit is a defense against IP spoofing attacks as suggested in RFC7413 */ #ifdef __APPLE__ /* OS X implementation only supports qlen of 1 via this call. Actual value is configured by the net.inet.tcp.fastopen_backlog kernel parm. */ qlen = 1; #else /* 5 is recommended on linux */ qlen = 5; #endif if ((setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen))) == -1 ) { #ifdef ENOPROTOOPT /* squelch ENOPROTOOPT: freebsd server mode with kernel support disabled, except when verbosity enabled for debugging */ if(errno != ENOPROTOOPT || verbosity >= 3) { #endif if(errno == EPERM) { log_warn("Setting TCP Fast Open as server failed: %s ; this could likely be because sysctl net.inet.tcp.fastopen.enabled, net.inet.tcp.fastopen.server_enable, or net.ipv4.tcp_fastopen is disabled", strerror(errno)); } else { log_err("Setting TCP Fast Open as server failed: %s", strerror(errno)); } #ifdef ENOPROTOOPT } #endif } #endif return s; } char* set_ip_dscp(int socket, int addrfamily, int dscp) { int ds; if(dscp == 0) return NULL; ds = dscp << 2; switch(addrfamily) { case AF_INET6: if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; default: if(setsockopt(socket, IPPROTO_IP, IP_TOS, (void*)&ds, sizeof(ds)) < 0) return sock_strerror(errno); break; } return NULL; } int create_local_accept_sock(const char *path, int* noproto, int use_systemd) { #ifdef HAVE_SYSTEMD int ret; if (use_systemd && (ret = systemd_get_activated(AF_LOCAL, SOCK_STREAM, 1, NULL, 0, path)) != -1) return ret; else { #endif #ifdef HAVE_SYS_UN_H int s; struct sockaddr_un usock; #ifndef HAVE_SYSTEMD (void)use_systemd; #endif verbose(VERB_ALGO, "creating unix socket %s", path); #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN /* this member exists on BSDs, not Linux */ usock.sun_len = (unsigned)sizeof(usock); #endif usock.sun_family = AF_LOCAL; /* length is 92-108, 104 on FreeBSD */ (void)strlcpy(usock.sun_path, path, sizeof(usock.sun_path)); if ((s = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1) { log_err("Cannot create local socket %s (%s)", path, strerror(errno)); return -1; } if (unlink(path) && errno != ENOENT) { /* The socket already exists and cannot be removed */ log_err("Cannot remove old local socket %s (%s)", path, strerror(errno)); goto err; } if (bind(s, (struct sockaddr *)&usock, (socklen_t)sizeof(struct sockaddr_un)) == -1) { log_err("Cannot bind local socket %s (%s)", path, strerror(errno)); goto err; } if (!fd_set_nonblock(s)) { log_err("Cannot set non-blocking mode"); goto err; } if (listen(s, TCP_BACKLOG) == -1) { log_err("can't listen: %s", strerror(errno)); goto err; } (void)noproto; /*unused*/ return s; err: sock_close(s); return -1; #ifdef HAVE_SYSTEMD } #endif #else (void)use_systemd; (void)path; log_err("Local sockets are not supported"); *noproto = 1; return -1; #endif } /** * Create socket from getaddrinfo results */ static int make_sock(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, int use_systemd, int dscp) { struct addrinfo *res = NULL; int r, s, inuse, noproto; hints->ai_socktype = stype; *noip6 = 0; if((r=getaddrinfo(ifname, port, hints, &res)) != 0 || !res) { #ifdef USE_WINSOCK if(r == EAI_NONAME && hints->ai_family == AF_INET6){ *noip6 = 1; /* 'Host not found' for IP6 on winXP */ return -1; } #endif log_err("node %s:%s getaddrinfo: %s %s", ifname?ifname:"default", port, gai_strerror(r), #ifdef EAI_SYSTEM r==EAI_SYSTEM?(char*)strerror(errno):"" #else "" #endif ); return -1; } if(stype == SOCK_DGRAM) { verbose_print_addr(res); s = create_udp_sock(res->ai_family, res->ai_socktype, (struct sockaddr*)res->ai_addr, res->ai_addrlen, v6only, &inuse, &noproto, (int)rcv, (int)snd, 1, reuseport, transparent, freebind, use_systemd, dscp); if(s == -1 && inuse) { log_err("bind: address already in use"); } else if(s == -1 && noproto && hints->ai_family == AF_INET6){ *noip6 = 1; } } else { s = create_tcp_accept_sock(res, v6only, &noproto, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp); if(s == -1 && noproto && hints->ai_family == AF_INET6){ *noip6 = 1; } } freeaddrinfo(res); return s; } /** make socket and first see if ifname contains port override info */ static int make_sock_port(int stype, const char* ifname, const char* port, struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd, int* reuseport, int transparent, int tcp_mss, int nodelay, int freebind, int use_systemd, int dscp) { char* s = strchr(ifname, '@'); if(s) { /* override port with ifspec@port */ char p[16]; char newif[128]; if((size_t)(s-ifname) >= sizeof(newif)) { log_err("ifname too long: %s", ifname); *noip6 = 0; return -1; } if(strlen(s+1) >= sizeof(p)) { log_err("portnumber too long: %s", ifname); *noip6 = 0; return -1; } (void)strlcpy(newif, ifname, sizeof(newif)); newif[s-ifname] = 0; (void)strlcpy(p, s+1, sizeof(p)); p[strlen(s+1)]=0; return make_sock(stype, newif, p, hints, v6only, noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp); } return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp); } /** * Add port to open ports list. * @param list: list head. changed. * @param s: fd. * @param ftype: if fd is UDP. * @return false on failure. list in unchanged then. */ static int port_insert(struct listen_port** list, int s, enum listen_type ftype) { struct listen_port* item = (struct listen_port*)malloc( sizeof(struct listen_port)); if(!item) return 0; item->next = *list; item->fd = s; item->ftype = ftype; *list = item; return 1; } /** set fd to receive source address packet info */ static int set_recvpktinfo(int s, int family) { #if defined(IPV6_RECVPKTINFO) || defined(IPV6_PKTINFO) || (defined(IP_RECVDSTADDR) && defined(IP_SENDSRCADDR)) || defined(IP_PKTINFO) int on = 1; #else (void)s; #endif if(family == AF_INET6) { # ifdef IPV6_RECVPKTINFO if(setsockopt(s, IPPROTO_IPV6, IPV6_RECVPKTINFO, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(..., IPV6_RECVPKTINFO, ...) failed: %s", strerror(errno)); return 0; } # elif defined(IPV6_PKTINFO) if(setsockopt(s, IPPROTO_IPV6, IPV6_PKTINFO, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(..., IPV6_PKTINFO, ...) failed: %s", strerror(errno)); return 0; } # else log_err("no IPV6_RECVPKTINFO and no IPV6_PKTINFO option, please " "disable interface-automatic or do-ip6 in config"); return 0; # endif /* defined IPV6_RECVPKTINFO */ } else if(family == AF_INET) { # ifdef IP_PKTINFO if(setsockopt(s, IPPROTO_IP, IP_PKTINFO, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(..., IP_PKTINFO, ...) failed: %s", strerror(errno)); return 0; } # elif defined(IP_RECVDSTADDR) && defined(IP_SENDSRCADDR) if(setsockopt(s, IPPROTO_IP, IP_RECVDSTADDR, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(..., IP_RECVDSTADDR, ...) failed: %s", strerror(errno)); return 0; } # else log_err("no IP_SENDSRCADDR or IP_PKTINFO option, please disable " "interface-automatic or do-ip4 in config"); return 0; # endif /* IP_PKTINFO */ } return 1; } /** see if interface is ssl, its port number == the ssl port number */ static int if_is_ssl(const char* ifname, const char* port, int ssl_port, struct config_strlist* tls_additional_port) { struct config_strlist* s; char* p = strchr(ifname, '@'); if(!p && atoi(port) == ssl_port) return 1; if(p && atoi(p+1) == ssl_port) return 1; for(s = tls_additional_port; s; s = s->next) { if(p && atoi(p+1) == atoi(s->str)) return 1; if(!p && atoi(port) == atoi(s->str)) return 1; } return 0; } /** see if interface is https, its port number == the https port number */ static int if_is_https(const char* ifname, const char* port, int https_port) { char* p = strchr(ifname, '@'); if(!p && atoi(port) == https_port) return 1; if(p && atoi(p+1) == https_port) return 1; return 0; } /** * Helper for ports_open. Creates one interface (or NULL for default). * @param ifname: The interface ip address. * @param do_auto: use automatic interface detection. * If enabled, then ifname must be the wildcard name. * @param do_udp: if udp should be used. * @param do_tcp: if udp should be used. * @param hints: for getaddrinfo. family and flags have to be set by caller. * @param port: Port number to use (as string). * @param list: list of open ports, appended to, changed to point to list head. * @param rcv: receive buffer size for UDP * @param snd: send buffer size for UDP * @param ssl_port: ssl service port number * @param tls_additional_port: list of additional ssl service port numbers. * @param https_port: DoH service port number * @param reuseport: try to set SO_REUSEPORT if nonNULL and true. * set to false on exit if reuseport failed due to no kernel support. * @param transparent: set IP_TRANSPARENT socket option. * @param tcp_mss: maximum segment size of tcp socket. default if zero. * @param freebind: set IP_FREEBIND socket option. * @param http2_nodelay: set TCP_NODELAY on HTTP/2 connection * @param use_systemd: if true, fetch sockets from systemd. * @param dnscrypt_port: dnscrypt service port number * @param dscp: DSCP to use. * @return: returns false on error. */ static int ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, struct addrinfo *hints, const char* port, struct listen_port** list, size_t rcv, size_t snd, int ssl_port, struct config_strlist* tls_additional_port, int https_port, int* reuseport, int transparent, int tcp_mss, int freebind, int http2_nodelay, int use_systemd, int dnscrypt_port, int dscp) { int s, noip6=0; int is_https = if_is_https(ifname, port, https_port); int nodelay = is_https && http2_nodelay; #ifdef USE_DNSCRYPT int is_dnscrypt = ((strchr(ifname, '@') && atoi(strchr(ifname, '@')+1) == dnscrypt_port) || (!strchr(ifname, '@') && atoi(port) == dnscrypt_port)); #else int is_dnscrypt = 0; (void)dnscrypt_port; #endif if(!do_udp && !do_tcp) return 0; if(do_auto) { if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; } return 0; } /* getting source addr packet info is highly non-portable */ if(!set_recvpktinfo(s, hints->ai_family)) { sock_close(s); return 0; } if(!port_insert(list, s, is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil)) { sock_close(s); return 0; } } else if(do_udp) { /* regular udp socket */ if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp)) == -1) { if(noip6) { log_warn("IPv6 protocol not available"); return 1; } return 0; } if(!port_insert(list, s, is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp)) { sock_close(s); return 0; } } if(do_tcp) { int is_ssl = if_is_ssl(ifname, port, ssl_port, tls_additional_port); enum listen_type port_type; if(is_ssl) port_type = listen_type_ssl; else if(is_https) port_type = listen_type_http; else if(is_dnscrypt) port_type = listen_type_tcp_dnscrypt; else port_type = listen_type_tcp; if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp)) == -1) { if(noip6) { /*log_warn("IPv6 protocol not available");*/ return 1; } return 0; } if(is_ssl) verbose(VERB_ALGO, "setup TCP for SSL service"); if(!port_insert(list, s, port_type)) { sock_close(s); return 0; } } return 1; } /** * Add items to commpoint list in front. * @param c: commpoint to add. * @param front: listen struct. * @return: false on failure. */ static int listen_cp_insert(struct comm_point* c, struct listen_dnsport* front) { struct listen_list* item = (struct listen_list*)malloc( sizeof(struct listen_list)); if(!item) return 0; item->com = c; item->next = front->cps; front->cps = item; return 1; } struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, size_t bufsize, int tcp_accept_count, int tcp_idle_timeout, int harden_large_queries, uint32_t http_max_streams, char* http_endpoint, int http_notls, struct tcl_list* tcp_conn_limit, void* sslctx, struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg) { struct listen_dnsport* front = (struct listen_dnsport*) malloc(sizeof(struct listen_dnsport)); if(!front) return NULL; front->cps = NULL; front->udp_buff = sldns_buffer_new(bufsize); #ifdef USE_DNSCRYPT front->dnscrypt_udp_buff = NULL; #endif if(!front->udp_buff) { free(front); return NULL; } if(!stream_wait_lock_inited) { lock_basic_init(&stream_wait_count_lock); stream_wait_lock_inited = 1; } if(!http2_query_buffer_lock_inited) { lock_basic_init(&http2_query_buffer_count_lock); http2_query_buffer_lock_inited = 1; } if(!http2_response_buffer_lock_inited) { lock_basic_init(&http2_response_buffer_count_lock); http2_response_buffer_lock_inited = 1; } /* create comm points as needed */ while(ports) { struct comm_point* cp = NULL; if(ports->ftype == listen_type_udp || ports->ftype == listen_type_udp_dnscrypt) cp = comm_point_create_udp(base, ports->fd, front->udp_buff, cb, cb_arg); else if(ports->ftype == listen_type_tcp || ports->ftype == listen_type_tcp_dnscrypt) cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, harden_large_queries, 0, NULL, tcp_conn_limit, bufsize, front->udp_buff, ports->ftype, cb, cb_arg); else if(ports->ftype == listen_type_ssl || ports->ftype == listen_type_http) { cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, harden_large_queries, http_max_streams, http_endpoint, tcp_conn_limit, bufsize, front->udp_buff, ports->ftype, cb, cb_arg); if(http_notls && ports->ftype == listen_type_http) cp->ssl = NULL; else cp->ssl = sslctx; if(ports->ftype == listen_type_http) { if(!sslctx && !http_notls) { log_warn("HTTPS port configured, but no TLS " "tls-service-key or tls-service-pem " "set"); } #ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB if(!http_notls) log_warn("Unbound is not compiled with an " "OpenSSL version supporting ALPN " " (OpenSSL >= 1.0.2). This is required " "to use DNS-over-HTTPS"); #endif #ifndef HAVE_NGHTTP2_NGHTTP2_H log_warn("Unbound is not compiled with " "nghttp2. This is required to use " "DNS-over-HTTPS."); #endif } } else if(ports->ftype == listen_type_udpancil || ports->ftype == listen_type_udpancil_dnscrypt) cp = comm_point_create_udp_ancil(base, ports->fd, front->udp_buff, cb, cb_arg); if(!cp) { log_err("can't create commpoint"); listen_delete(front); return NULL; } cp->dtenv = dtenv; cp->do_not_close = 1; #ifdef USE_DNSCRYPT if (ports->ftype == listen_type_udp_dnscrypt || ports->ftype == listen_type_tcp_dnscrypt || ports->ftype == listen_type_udpancil_dnscrypt) { cp->dnscrypt = 1; cp->dnscrypt_buffer = sldns_buffer_new(bufsize); if(!cp->dnscrypt_buffer) { log_err("can't alloc dnscrypt_buffer"); comm_point_delete(cp); listen_delete(front); return NULL; } front->dnscrypt_udp_buff = cp->dnscrypt_buffer; } #endif if(!listen_cp_insert(cp, front)) { log_err("malloc failed"); comm_point_delete(cp); listen_delete(front); return NULL; } ports = ports->next; } if(!front->cps) { log_err("Could not open sockets to accept queries."); listen_delete(front); return NULL; } return front; } void listen_list_delete(struct listen_list* list) { struct listen_list *p = list, *pn; while(p) { pn = p->next; comm_point_delete(p->com); free(p); p = pn; } } void listen_delete(struct listen_dnsport* front) { if(!front) return; listen_list_delete(front->cps); #ifdef USE_DNSCRYPT if(front->dnscrypt_udp_buff && front->udp_buff != front->dnscrypt_udp_buff) { sldns_buffer_free(front->dnscrypt_udp_buff); } #endif sldns_buffer_free(front->udp_buff); free(front); if(stream_wait_lock_inited) { stream_wait_lock_inited = 0; lock_basic_destroy(&stream_wait_count_lock); } if(http2_query_buffer_lock_inited) { http2_query_buffer_lock_inited = 0; lock_basic_destroy(&http2_query_buffer_count_lock); } if(http2_response_buffer_lock_inited) { http2_response_buffer_lock_inited = 0; lock_basic_destroy(&http2_response_buffer_count_lock); } } #ifdef HAVE_GETIFADDRS static int resolve_ifa_name(struct ifaddrs *ifas, const char *search_ifa, char ***ip_addresses, int *ip_addresses_size) { struct ifaddrs *ifa; void *tmpbuf; int last_ip_addresses_size = *ip_addresses_size; for(ifa = ifas; ifa != NULL; ifa = ifa->ifa_next) { sa_family_t family; const char* atsign; #ifdef INET6 /* | address ip | % | ifa name | @ | port | nul */ char addr_buf[INET6_ADDRSTRLEN + 1 + IF_NAMESIZE + 1 + 16 + 1]; #else char addr_buf[INET_ADDRSTRLEN + 1 + 16 + 1]; #endif if((atsign=strrchr(search_ifa, '@')) != NULL) { if(strlen(ifa->ifa_name) != (size_t)(atsign-search_ifa) || strncmp(ifa->ifa_name, search_ifa, atsign-search_ifa) != 0) continue; } else { if(strcmp(ifa->ifa_name, search_ifa) != 0) continue; atsign = ""; } if(ifa->ifa_addr == NULL) continue; family = ifa->ifa_addr->sa_family; if(family == AF_INET) { char a4[INET_ADDRSTRLEN + 1]; struct sockaddr_in *in4 = (struct sockaddr_in *) ifa->ifa_addr; if(!inet_ntop(family, &in4->sin_addr, a4, sizeof(a4))) { log_err("inet_ntop failed"); return 0; } snprintf(addr_buf, sizeof(addr_buf), "%s%s", a4, atsign); } #ifdef INET6 else if(family == AF_INET6) { struct sockaddr_in6 *in6 = (struct sockaddr_in6 *) ifa->ifa_addr; char a6[INET6_ADDRSTRLEN + 1]; char if_index_name[IF_NAMESIZE + 1]; if_index_name[0] = 0; if(!inet_ntop(family, &in6->sin6_addr, a6, sizeof(a6))) { log_err("inet_ntop failed"); return 0; } (void)if_indextoname(in6->sin6_scope_id, (char *)if_index_name); if (strlen(if_index_name) != 0) { snprintf(addr_buf, sizeof(addr_buf), "%s%%%s%s", a6, if_index_name, atsign); } else { snprintf(addr_buf, sizeof(addr_buf), "%s%s", a6, atsign); } } #endif else { continue; } verbose(4, "interface %s has address %s", search_ifa, addr_buf); tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); if(!tmpbuf) { log_err("realloc failed: out of memory"); return 0; } else { *ip_addresses = tmpbuf; } (*ip_addresses)[*ip_addresses_size] = strdup(addr_buf); if(!(*ip_addresses)[*ip_addresses_size]) { log_err("strdup failed: out of memory"); return 0; } (*ip_addresses_size)++; } if (*ip_addresses_size == last_ip_addresses_size) { tmpbuf = realloc(*ip_addresses, sizeof(char *) * (*ip_addresses_size + 1)); if(!tmpbuf) { log_err("realloc failed: out of memory"); return 0; } else { *ip_addresses = tmpbuf; } (*ip_addresses)[*ip_addresses_size] = strdup(search_ifa); if(!(*ip_addresses)[*ip_addresses_size]) { log_err("strdup failed: out of memory"); return 0; } (*ip_addresses_size)++; } return 1; } #endif /* HAVE_GETIFADDRS */ int resolve_interface_names(struct config_file* cfg, char*** resif, int* num_resif) { #ifdef HAVE_GETIFADDRS int i; struct ifaddrs *addrs = NULL; if(cfg->num_ifs == 0) { *resif = NULL; *num_resif = 0; return 1; } if(getifaddrs(&addrs) == -1) { log_err("failed to list interfaces: getifaddrs: %s", strerror(errno)); freeifaddrs(addrs); return 0; } for(i=0; inum_ifs; i++) { if(!resolve_ifa_name(addrs, cfg->ifs[i], resif, num_resif)) { freeifaddrs(addrs); config_del_strarray(*resif, *num_resif); *resif = NULL; *num_resif = 0; return 0; } } freeifaddrs(addrs); return 1; #else int i; if(cfg->num_ifs == 0) { *resif = NULL; *num_resif = 0; return 1; } *num_resif = cfg->num_ifs; *resif = calloc(*num_resif, sizeof(**resif)); if(!*resif) { log_err("out of memory"); return 0; } for(i=0; i<*num_resif; i++) { (*resif)[i] = strdup(cfg->ifs[i]); if(!((*resif)[i])) { log_err("out of memory"); config_del_strarray(*resif, *num_resif); *resif = NULL; *num_resif = 0; return 0; } } return 1; #endif /* HAVE_GETIFADDRS */ } struct listen_port* listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, int* reuseport) { struct listen_port* list = NULL; struct addrinfo hints; int i, do_ip4, do_ip6; int do_tcp, do_auto; char portbuf[32]; snprintf(portbuf, sizeof(portbuf), "%d", cfg->port); do_ip4 = cfg->do_ip4; do_ip6 = cfg->do_ip6; do_tcp = cfg->do_tcp; do_auto = cfg->if_automatic && cfg->do_udp; if(cfg->incoming_num_tcp == 0) do_tcp = 0; /* getaddrinfo */ memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_PASSIVE; /* no name lookups on our listening ports */ if(num_ifs > 0) hints.ai_flags |= AI_NUMERICHOST; hints.ai_family = AF_UNSPEC; #ifndef INET6 do_ip6 = 0; #endif if(!do_ip4 && !do_ip6) { return NULL; } /* create ip4 and ip6 ports so that return addresses are nice. */ if(do_auto || num_ifs == 0) { if(do_ip6) { hints.ai_family = AF_INET6; if(!ports_create_if(do_auto?"::0":"::1", do_auto, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } } if(do_ip4) { hints.ai_family = AF_INET; if(!ports_create_if(do_auto?"0.0.0.0":"127.0.0.1", do_auto, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } } } else for(i = 0; ido_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } } else { if(!do_ip4) continue; hints.ai_family = AF_INET; if(!ports_create_if(ifs[i], 0, cfg->do_udp, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { listening_ports_free(list); return NULL; } } } return list; } void listening_ports_free(struct listen_port* list) { struct listen_port* nx; while(list) { nx = list->next; if(list->fd != -1) { sock_close(list->fd); } free(list); list = nx; } } size_t listen_get_mem(struct listen_dnsport* listen) { struct listen_list* p; size_t s = sizeof(*listen) + sizeof(*listen->base) + sizeof(*listen->udp_buff) + sldns_buffer_capacity(listen->udp_buff); #ifdef USE_DNSCRYPT s += sizeof(*listen->dnscrypt_udp_buff); if(listen->udp_buff != listen->dnscrypt_udp_buff){ s += sldns_buffer_capacity(listen->dnscrypt_udp_buff); } #endif for(p = listen->cps; p; p = p->next) { s += sizeof(*p); s += comm_point_get_mem(p->com); } return s; } void listen_stop_accept(struct listen_dnsport* listen) { /* do not stop the ones that have no tcp_free list * (they have already stopped listening) */ struct listen_list* p; for(p=listen->cps; p; p=p->next) { if(p->com->type == comm_tcp_accept && p->com->tcp_free != NULL) { comm_point_stop_listening(p->com); } } } void listen_start_accept(struct listen_dnsport* listen) { /* do not start the ones that have no tcp_free list, it is no * use to listen to them because they have no free tcp handlers */ struct listen_list* p; for(p=listen->cps; p; p=p->next) { if(p->com->type == comm_tcp_accept && p->com->tcp_free != NULL) { comm_point_start_listening(p->com, -1, -1); } } } struct tcp_req_info* tcp_req_info_create(struct sldns_buffer* spoolbuf) { struct tcp_req_info* req = (struct tcp_req_info*)malloc(sizeof(*req)); if(!req) { log_err("malloc failure for new stream outoforder processing structure"); return NULL; } memset(req, 0, sizeof(*req)); req->spool_buffer = spoolbuf; return req; } void tcp_req_info_delete(struct tcp_req_info* req) { if(!req) return; tcp_req_info_clear(req); /* cp is pointer back to commpoint that owns this struct and * called delete on us */ /* spool_buffer is shared udp buffer, not deleted here */ free(req); } void tcp_req_info_clear(struct tcp_req_info* req) { struct tcp_req_open_item* open, *nopen; struct tcp_req_done_item* item, *nitem; if(!req) return; /* free outstanding request mesh reply entries */ open = req->open_req_list; while(open) { nopen = open->next; mesh_state_remove_reply(open->mesh, open->mesh_state, req->cp); free(open); open = nopen; } req->open_req_list = NULL; req->num_open_req = 0; /* free pending writable result packets */ item = req->done_req_list; while(item) { nitem = item->next; lock_basic_lock(&stream_wait_count_lock); stream_wait_count -= (sizeof(struct tcp_req_done_item) +item->len); lock_basic_unlock(&stream_wait_count_lock); free(item->buf); free(item); item = nitem; } req->done_req_list = NULL; req->num_done_req = 0; req->read_is_closed = 0; } void tcp_req_info_remove_mesh_state(struct tcp_req_info* req, struct mesh_state* m) { struct tcp_req_open_item* open, *prev = NULL; if(!req || !m) return; open = req->open_req_list; while(open) { if(open->mesh_state == m) { struct tcp_req_open_item* next; if(prev) prev->next = open->next; else req->open_req_list = open->next; /* caller has to manage the mesh state reply entry */ next = open->next; free(open); req->num_open_req --; /* prev = prev; */ open = next; continue; } prev = open; open = open->next; } } /** setup listening for read or write */ static void tcp_req_info_setup_listen(struct tcp_req_info* req) { int wr = 0; int rd = 0; if(req->cp->tcp_byte_count != 0) { /* cannot change, halfway through */ return; } if(!req->cp->tcp_is_reading) wr = 1; if(!req->read_is_closed) rd = 1; if(wr) { req->cp->tcp_is_reading = 0; comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, adjusted_tcp_timeout(req->cp)); } else if(rd) { req->cp->tcp_is_reading = 1; comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, adjusted_tcp_timeout(req->cp)); /* and also read it (from SSL stack buffers), so * no event read event is expected since the remainder of * the TLS frame is sitting in the buffers. */ req->read_again = 1; } else { comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, adjusted_tcp_timeout(req->cp)); comm_point_listen_for_rw(req->cp, 0, 0); } } /** remove first item from list of pending results */ static struct tcp_req_done_item* tcp_req_info_pop_done(struct tcp_req_info* req) { struct tcp_req_done_item* item; log_assert(req->num_done_req > 0 && req->done_req_list); item = req->done_req_list; lock_basic_lock(&stream_wait_count_lock); stream_wait_count -= (sizeof(struct tcp_req_done_item)+item->len); lock_basic_unlock(&stream_wait_count_lock); req->done_req_list = req->done_req_list->next; req->num_done_req --; return item; } /** Send given buffer and setup to write */ static void tcp_req_info_start_write_buf(struct tcp_req_info* req, uint8_t* buf, size_t len) { sldns_buffer_clear(req->cp->buffer); sldns_buffer_write(req->cp->buffer, buf, len); sldns_buffer_flip(req->cp->buffer); req->cp->tcp_is_reading = 0; /* we are now writing */ } /** pick up the next result and start writing it to the channel */ static void tcp_req_pickup_next_result(struct tcp_req_info* req) { if(req->num_done_req > 0) { /* unlist the done item from the list of pending results */ struct tcp_req_done_item* item = tcp_req_info_pop_done(req); tcp_req_info_start_write_buf(req, item->buf, item->len); free(item->buf); free(item); } } /** the read channel has closed */ int tcp_req_info_handle_read_close(struct tcp_req_info* req) { verbose(VERB_ALGO, "tcp channel read side closed %d", req->cp->fd); /* reset byte count for (potential) partial read */ req->cp->tcp_byte_count = 0; /* if we still have results to write, pick up next and write it */ if(req->num_done_req != 0) { tcp_req_pickup_next_result(req); tcp_req_info_setup_listen(req); return 1; } /* if nothing to do, this closes the connection */ if(req->num_open_req == 0 && req->num_done_req == 0) return 0; /* otherwise, we must be waiting for dns resolve, wait with timeout */ req->read_is_closed = 1; tcp_req_info_setup_listen(req); return 1; } void tcp_req_info_handle_writedone(struct tcp_req_info* req) { /* back to reading state, we finished this write event */ sldns_buffer_clear(req->cp->buffer); if(req->num_done_req == 0 && req->read_is_closed) { /* no more to write and nothing to read, close it */ comm_point_drop_reply(&req->cp->repinfo); return; } req->cp->tcp_is_reading = 1; /* see if another result needs writing */ tcp_req_pickup_next_result(req); /* see if there is more to write, if not stop_listening for writing */ /* see if new requests are allowed, if so, start_listening * for reading */ tcp_req_info_setup_listen(req); } void tcp_req_info_handle_readdone(struct tcp_req_info* req) { struct comm_point* c = req->cp; /* we want to read up several requests, unless there are * pending answers */ req->is_drop = 0; req->is_reply = 0; req->in_worker_handle = 1; sldns_buffer_set_limit(req->spool_buffer, 0); /* handle the current request */ /* this calls the worker handle request routine that could give * a cache response, or localdata response, or drop the reply, * or schedule a mesh entry for later */ fptr_ok(fptr_whitelist_comm_point(c->callback)); if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) { req->in_worker_handle = 0; /* there is an answer, put it up. It is already in the * c->buffer, just send it. */ /* since we were just reading a query, the channel is * clear to write to */ send_it: c->tcp_is_reading = 0; comm_point_stop_listening(c); comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); return; } req->in_worker_handle = 0; /* it should be waiting in the mesh for recursion. * If mesh failed to add a new entry and called commpoint_drop_reply. * Then the mesh state has been cleared. */ if(req->is_drop) { /* the reply has been dropped, stream has been closed. */ return; } /* If mesh failed(mallocfail) and called commpoint_send_reply with * something like servfail then we pick up that reply below. */ if(req->is_reply) { goto send_it; } sldns_buffer_clear(c->buffer); /* if pending answers, pick up an answer and start sending it */ tcp_req_pickup_next_result(req); /* if answers pending, start sending answers */ /* read more requests if we can have more requests */ tcp_req_info_setup_listen(req); } int tcp_req_info_add_meshstate(struct tcp_req_info* req, struct mesh_area* mesh, struct mesh_state* m) { struct tcp_req_open_item* item; log_assert(req && mesh && m); item = (struct tcp_req_open_item*)malloc(sizeof(*item)); if(!item) return 0; item->next = req->open_req_list; item->mesh = mesh; item->mesh_state = m; req->open_req_list = item; req->num_open_req++; return 1; } /** Add a result to the result list. At the end. */ static int tcp_req_info_add_result(struct tcp_req_info* req, uint8_t* buf, size_t len) { struct tcp_req_done_item* last = NULL; struct tcp_req_done_item* item; size_t space; /* see if we have space */ space = sizeof(struct tcp_req_done_item) + len; lock_basic_lock(&stream_wait_count_lock); if(stream_wait_count + space > stream_wait_max) { lock_basic_unlock(&stream_wait_count_lock); verbose(VERB_ALGO, "drop stream reply, no space left, in stream-wait-size"); return 0; } stream_wait_count += space; lock_basic_unlock(&stream_wait_count_lock); /* find last element */ last = req->done_req_list; while(last && last->next) last = last->next; /* create new element */ item = (struct tcp_req_done_item*)malloc(sizeof(*item)); if(!item) { log_err("malloc failure, for stream result list"); return 0; } item->next = NULL; item->len = len; item->buf = memdup(buf, len); if(!item->buf) { free(item); log_err("malloc failure, adding reply to stream result list"); return 0; } /* link in */ if(last) last->next = item; else req->done_req_list = item; req->num_done_req++; return 1; } void tcp_req_info_send_reply(struct tcp_req_info* req) { if(req->in_worker_handle) { /* reply from mesh is in the spool_buffer */ /* copy now, so that the spool buffer is free for other tasks * before the callback is done */ sldns_buffer_clear(req->cp->buffer); sldns_buffer_write(req->cp->buffer, sldns_buffer_begin(req->spool_buffer), sldns_buffer_limit(req->spool_buffer)); sldns_buffer_flip(req->cp->buffer); req->is_reply = 1; return; } /* now that the query has been handled, that mesh_reply entry * should be removed, from the tcp_req_info list, * the mesh state cleanup removes then with region_cleanup and * replies_sent true. */ /* see if we can send it straight away (we are not doing * anything else). If so, copy to buffer and start */ if(req->cp->tcp_is_reading && req->cp->tcp_byte_count == 0) { /* buffer is free, and was ready to read new query into, * but we are now going to use it to send this answer */ tcp_req_info_start_write_buf(req, sldns_buffer_begin(req->spool_buffer), sldns_buffer_limit(req->spool_buffer)); /* switch to listen to write events */ comm_point_stop_listening(req->cp); comm_point_start_listening(req->cp, -1, adjusted_tcp_timeout(req->cp)); return; } /* queue up the answer behind the others already pending */ if(!tcp_req_info_add_result(req, sldns_buffer_begin(req->spool_buffer), sldns_buffer_limit(req->spool_buffer))) { /* drop the connection, we are out of resources */ comm_point_drop_reply(&req->cp->repinfo); } } size_t tcp_req_info_get_stream_buffer_size(void) { size_t s; if(!stream_wait_lock_inited) return stream_wait_count; lock_basic_lock(&stream_wait_count_lock); s = stream_wait_count; lock_basic_unlock(&stream_wait_count_lock); return s; } size_t http2_get_query_buffer_size(void) { size_t s; if(!http2_query_buffer_lock_inited) return http2_query_buffer_count; lock_basic_lock(&http2_query_buffer_count_lock); s = http2_query_buffer_count; lock_basic_unlock(&http2_query_buffer_count_lock); return s; } size_t http2_get_response_buffer_size(void) { size_t s; if(!http2_response_buffer_lock_inited) return http2_response_buffer_count; lock_basic_lock(&http2_response_buffer_count_lock); s = http2_response_buffer_count; lock_basic_unlock(&http2_response_buffer_count_lock); return s; } #ifdef HAVE_NGHTTP2 /** nghttp2 callback. Used to copy response from rbuffer to nghttp2 session */ static ssize_t http2_submit_response_read_callback( nghttp2_session* ATTR_UNUSED(session), int32_t stream_id, uint8_t* buf, size_t length, uint32_t* data_flags, nghttp2_data_source* source, void* ATTR_UNUSED(cb_arg)) { struct http2_stream* h2_stream; struct http2_session* h2_session = source->ptr; size_t copylen = length; if(!(h2_stream = nghttp2_session_get_stream_user_data( h2_session->session, stream_id))) { verbose(VERB_QUERY, "http2: cannot get stream data, closing " "stream"); return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; } if(!h2_stream->rbuffer || sldns_buffer_remaining(h2_stream->rbuffer) == 0) { verbose(VERB_QUERY, "http2: cannot submit buffer. No data " "available in rbuffer"); /* rbuffer will be free'd in frame close cb */ return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; } if(copylen > sldns_buffer_remaining(h2_stream->rbuffer)) copylen = sldns_buffer_remaining(h2_stream->rbuffer); if(copylen > SSIZE_MAX) copylen = SSIZE_MAX; /* will probably never happen */ memcpy(buf, sldns_buffer_current(h2_stream->rbuffer), copylen); sldns_buffer_skip(h2_stream->rbuffer, copylen); if(sldns_buffer_remaining(h2_stream->rbuffer) == 0) { *data_flags |= NGHTTP2_DATA_FLAG_EOF; lock_basic_lock(&http2_response_buffer_count_lock); http2_response_buffer_count -= sldns_buffer_capacity(h2_stream->rbuffer); lock_basic_unlock(&http2_response_buffer_count_lock); sldns_buffer_free(h2_stream->rbuffer); h2_stream->rbuffer = NULL; } return copylen; } /** * Send RST_STREAM frame for stream. * @param h2_session: http2 session to submit frame to * @param h2_stream: http2 stream containing frame ID to use in RST_STREAM * @return 0 on error, 1 otherwise */ static int http2_submit_rst_stream(struct http2_session* h2_session, struct http2_stream* h2_stream) { int ret = nghttp2_submit_rst_stream(h2_session->session, NGHTTP2_FLAG_NONE, h2_stream->stream_id, NGHTTP2_INTERNAL_ERROR); if(ret) { verbose(VERB_QUERY, "http2: nghttp2_submit_rst_stream failed, " "error: %s", nghttp2_strerror(ret)); return 0; } return 1; } /** * DNS response ready to be submitted to nghttp2, to be prepared for sending * out. Response is stored in c->buffer. Copy to rbuffer because the c->buffer * might be used before this will be sent out. * @param h2_session: http2 session, containing c->buffer which contains answer * @return 0 on error, 1 otherwise */ int http2_submit_dns_response(struct http2_session* h2_session) { int ret; nghttp2_data_provider data_prd; char status[4]; nghttp2_nv headers[3]; struct http2_stream* h2_stream = h2_session->c->h2_stream; size_t rlen; char rlen_str[32]; if(h2_stream->rbuffer) { log_err("http2 submit response error: rbuffer already " "exists"); return 0; } if(sldns_buffer_remaining(h2_session->c->buffer) == 0) { log_err("http2 submit response error: c->buffer not complete"); return 0; } if(snprintf(status, 4, "%d", h2_stream->status) != 3) { verbose(VERB_QUERY, "http2: submit response error: " "invalid status"); return 0; } rlen = sldns_buffer_remaining(h2_session->c->buffer); snprintf(rlen_str, sizeof(rlen_str), "%u", (unsigned)rlen); lock_basic_lock(&http2_response_buffer_count_lock); if(http2_response_buffer_count + rlen > http2_response_buffer_max) { lock_basic_unlock(&http2_response_buffer_count_lock); verbose(VERB_ALGO, "reset HTTP2 stream, no space left, " "in https-response-buffer-size"); return http2_submit_rst_stream(h2_session, h2_stream); } http2_response_buffer_count += rlen; lock_basic_unlock(&http2_response_buffer_count_lock); if(!(h2_stream->rbuffer = sldns_buffer_new(rlen))) { lock_basic_lock(&http2_response_buffer_count_lock); http2_response_buffer_count -= rlen; lock_basic_unlock(&http2_response_buffer_count_lock); log_err("http2 submit response error: malloc failure"); return 0; } headers[0].name = (uint8_t*)":status"; headers[0].namelen = 7; headers[0].value = (uint8_t*)status; headers[0].valuelen = 3; headers[0].flags = NGHTTP2_NV_FLAG_NONE; headers[1].name = (uint8_t*)"content-type"; headers[1].namelen = 12; headers[1].value = (uint8_t*)"application/dns-message"; headers[1].valuelen = 23; headers[1].flags = NGHTTP2_NV_FLAG_NONE; headers[2].name = (uint8_t*)"content-length"; headers[2].namelen = 14; headers[2].value = (uint8_t*)rlen_str; headers[2].valuelen = strlen(rlen_str); headers[2].flags = NGHTTP2_NV_FLAG_NONE; sldns_buffer_write(h2_stream->rbuffer, sldns_buffer_current(h2_session->c->buffer), sldns_buffer_remaining(h2_session->c->buffer)); sldns_buffer_flip(h2_stream->rbuffer); data_prd.source.ptr = h2_session; data_prd.read_callback = http2_submit_response_read_callback; ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id, headers, 3, &data_prd); if(ret) { verbose(VERB_QUERY, "http2: set_stream_user_data failed, " "error: %s", nghttp2_strerror(ret)); return 0; } return 1; } #else int http2_submit_dns_response(void* ATTR_UNUSED(v)) { return 0; } #endif #ifdef HAVE_NGHTTP2 /** HTTP status to descriptive string */ static char* http_status_to_str(enum http_status s) { switch(s) { case HTTP_STATUS_OK: return "OK"; case HTTP_STATUS_BAD_REQUEST: return "Bad Request"; case HTTP_STATUS_NOT_FOUND: return "Not Found"; case HTTP_STATUS_PAYLOAD_TOO_LARGE: return "Payload Too Large"; case HTTP_STATUS_URI_TOO_LONG: return "URI Too Long"; case HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: return "Unsupported Media Type"; case HTTP_STATUS_NOT_IMPLEMENTED: return "Not Implemented"; } return "Status Unknown"; } /** nghttp2 callback. Used to copy error message to nghttp2 session */ static ssize_t http2_submit_error_read_callback( nghttp2_session* ATTR_UNUSED(session), int32_t stream_id, uint8_t* buf, size_t length, uint32_t* data_flags, nghttp2_data_source* source, void* ATTR_UNUSED(cb_arg)) { struct http2_stream* h2_stream; struct http2_session* h2_session = source->ptr; char* msg; if(!(h2_stream = nghttp2_session_get_stream_user_data( h2_session->session, stream_id))) { verbose(VERB_QUERY, "http2: cannot get stream data, closing " "stream"); return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; } *data_flags |= NGHTTP2_DATA_FLAG_EOF; msg = http_status_to_str(h2_stream->status); if(length < strlen(msg)) return 0; /* not worth trying over multiple frames */ memcpy(buf, msg, strlen(msg)); return strlen(msg); } /** * HTTP error response ready to be submitted to nghttp2, to be prepared for * sending out. Message body will contain descriptive string for HTTP status. * @param h2_session: http2 session to submit to * @param h2_stream: http2 stream containing HTTP status to use for error * @return 0 on error, 1 otherwise */ static int http2_submit_error(struct http2_session* h2_session, struct http2_stream* h2_stream) { int ret; char status[4]; nghttp2_data_provider data_prd; nghttp2_nv headers[1]; /* will be copied by nghttp */ if(snprintf(status, 4, "%d", h2_stream->status) != 3) { verbose(VERB_QUERY, "http2: submit error failed, " "invalid status"); return 0; } headers[0].name = (uint8_t*)":status"; headers[0].namelen = 7; headers[0].value = (uint8_t*)status; headers[0].valuelen = 3; headers[0].flags = NGHTTP2_NV_FLAG_NONE; data_prd.source.ptr = h2_session; data_prd.read_callback = http2_submit_error_read_callback; ret = nghttp2_submit_response(h2_session->session, h2_stream->stream_id, headers, 1, &data_prd); if(ret) { verbose(VERB_QUERY, "http2: submit error failed, " "error: %s", nghttp2_strerror(ret)); return 0; } return 1; } /** * Start query handling. Query is stored in the stream, and will be free'd here. * @param h2_session: http2 session, containing comm point * @param h2_stream: stream containing buffered query * @return: -1 on error, 1 if answer is stored in c->buffer, 0 if there is no * reply available (yet). */ static int http2_query_read_done(struct http2_session* h2_session, struct http2_stream* h2_stream) { log_assert(h2_stream->qbuffer); if(h2_session->c->h2_stream) { verbose(VERB_ALGO, "http2_query_read_done failure: shared " "buffer already assigned to stream"); return -1; } if(sldns_buffer_remaining(h2_session->c->buffer) < sldns_buffer_remaining(h2_stream->qbuffer)) { /* qbuffer will be free'd in frame close cb */ sldns_buffer_clear(h2_session->c->buffer); verbose(VERB_ALGO, "http2_query_read_done failure: can't fit " "qbuffer in c->buffer"); return -1; } sldns_buffer_write(h2_session->c->buffer, sldns_buffer_current(h2_stream->qbuffer), sldns_buffer_remaining(h2_stream->qbuffer)); lock_basic_lock(&http2_query_buffer_count_lock); http2_query_buffer_count -= sldns_buffer_capacity(h2_stream->qbuffer); lock_basic_unlock(&http2_query_buffer_count_lock); sldns_buffer_free(h2_stream->qbuffer); h2_stream->qbuffer = NULL; sldns_buffer_flip(h2_session->c->buffer); h2_session->c->h2_stream = h2_stream; fptr_ok(fptr_whitelist_comm_point(h2_session->c->callback)); if((*h2_session->c->callback)(h2_session->c, h2_session->c->cb_arg, NETEVENT_NOERROR, &h2_session->c->repinfo)) { return 1; /* answer in c->buffer */ } sldns_buffer_clear(h2_session->c->buffer); h2_session->c->h2_stream = NULL; return 0; /* mesh state added, or dropped */ } /** nghttp2 callback. Used to check if the received frame indicates the end of a * stream. Gather collected request data and start query handling. */ static int http2_req_frame_recv_cb(nghttp2_session* session, const nghttp2_frame* frame, void* cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; struct http2_stream* h2_stream; int query_read_done; if((frame->hd.type != NGHTTP2_DATA && frame->hd.type != NGHTTP2_HEADERS) || !(frame->hd.flags & NGHTTP2_FLAG_END_STREAM)) { return 0; } if(!(h2_stream = nghttp2_session_get_stream_user_data( session, frame->hd.stream_id))) return 0; if(h2_stream->invalid_endpoint) { h2_stream->status = HTTP_STATUS_NOT_FOUND; goto submit_http_error; } if(h2_stream->invalid_content_type) { h2_stream->status = HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE; goto submit_http_error; } if(h2_stream->http_method != HTTP_METHOD_GET && h2_stream->http_method != HTTP_METHOD_POST) { h2_stream->status = HTTP_STATUS_NOT_IMPLEMENTED; goto submit_http_error; } if(h2_stream->query_too_large) { if(h2_stream->http_method == HTTP_METHOD_POST) h2_stream->status = HTTP_STATUS_PAYLOAD_TOO_LARGE; else h2_stream->status = HTTP_STATUS_URI_TOO_LONG; goto submit_http_error; } if(!h2_stream->qbuffer) { h2_stream->status = HTTP_STATUS_BAD_REQUEST; goto submit_http_error; } if(h2_stream->status) { submit_http_error: verbose(VERB_QUERY, "http2 request invalid, returning :status=" "%d", h2_stream->status); if(!http2_submit_error(h2_session, h2_stream)) { return NGHTTP2_ERR_CALLBACK_FAILURE; } return 0; } h2_stream->status = HTTP_STATUS_OK; sldns_buffer_flip(h2_stream->qbuffer); h2_session->postpone_drop = 1; query_read_done = http2_query_read_done(h2_session, h2_stream); if(query_read_done < 0) return NGHTTP2_ERR_CALLBACK_FAILURE; else if(!query_read_done) { if(h2_session->is_drop) { /* connection needs to be closed. Return failure to make * sure no other action are taken anymore on comm point. * failure will result in reclaiming (and closing) * of comm point. */ verbose(VERB_QUERY, "http2 query dropped in worker cb"); h2_session->postpone_drop = 0; return NGHTTP2_ERR_CALLBACK_FAILURE; } /* nothing to submit right now, query added to mesh. */ h2_session->postpone_drop = 0; return 0; } if(!http2_submit_dns_response(h2_session)) { sldns_buffer_clear(h2_session->c->buffer); h2_session->c->h2_stream = NULL; return NGHTTP2_ERR_CALLBACK_FAILURE; } verbose(VERB_QUERY, "http2 query submitted to session"); sldns_buffer_clear(h2_session->c->buffer); h2_session->c->h2_stream = NULL; return 0; } /** nghttp2 callback. Used to detect start of new streams. */ static int http2_req_begin_headers_cb(nghttp2_session* session, const nghttp2_frame* frame, void* cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; struct http2_stream* h2_stream; int ret; if(frame->hd.type != NGHTTP2_HEADERS || frame->headers.cat != NGHTTP2_HCAT_REQUEST) { /* only interrested in request headers */ return 0; } if(!(h2_stream = http2_stream_create(frame->hd.stream_id))) { log_err("malloc failure while creating http2 stream"); return NGHTTP2_ERR_CALLBACK_FAILURE; } http2_session_add_stream(h2_session, h2_stream); ret = nghttp2_session_set_stream_user_data(session, frame->hd.stream_id, h2_stream); if(ret) { /* stream does not exist */ verbose(VERB_QUERY, "http2: set_stream_user_data failed, " "error: %s", nghttp2_strerror(ret)); return NGHTTP2_ERR_CALLBACK_FAILURE; } return 0; } /** * base64url decode, store in qbuffer * @param h2_session: http2 session * @param h2_stream: http2 stream * @param start: start of the base64 string * @param length: length of the base64 string * @return: 0 on error, 1 otherwise. query will be stored in h2_stream->qbuffer, * buffer will be NULL is unparseble. */ static int http2_buffer_uri_query(struct http2_session* h2_session, struct http2_stream* h2_stream, const uint8_t* start, size_t length) { size_t expectb64len; int b64len; if(h2_stream->http_method == HTTP_METHOD_POST) return 1; if(length == 0) return 1; if(h2_stream->qbuffer) { verbose(VERB_ALGO, "http2_req_header fail, " "qbuffer already set"); return 0; } /* calculate size, might be a bit bigger than the real * decoded buffer size */ expectb64len = sldns_b64_pton_calculate_size(length); log_assert(expectb64len > 0); if(expectb64len > h2_session->c->http2_stream_max_qbuffer_size) { h2_stream->query_too_large = 1; return 1; } lock_basic_lock(&http2_query_buffer_count_lock); if(http2_query_buffer_count + expectb64len > http2_query_buffer_max) { lock_basic_unlock(&http2_query_buffer_count_lock); verbose(VERB_ALGO, "reset HTTP2 stream, no space left, " "in http2-query-buffer-size"); return http2_submit_rst_stream(h2_session, h2_stream); } http2_query_buffer_count += expectb64len; lock_basic_unlock(&http2_query_buffer_count_lock); if(!(h2_stream->qbuffer = sldns_buffer_new(expectb64len))) { lock_basic_lock(&http2_query_buffer_count_lock); http2_query_buffer_count -= expectb64len; lock_basic_unlock(&http2_query_buffer_count_lock); log_err("http2_req_header fail, qbuffer " "malloc failure"); return 0; } if(!(b64len = sldns_b64url_pton( (char const *)start, length, sldns_buffer_current(h2_stream->qbuffer), expectb64len)) || b64len < 0) { lock_basic_lock(&http2_query_buffer_count_lock); http2_query_buffer_count -= expectb64len; lock_basic_unlock(&http2_query_buffer_count_lock); sldns_buffer_free(h2_stream->qbuffer); h2_stream->qbuffer = NULL; /* return without error, method can be an * unknown POST */ return 1; } sldns_buffer_skip(h2_stream->qbuffer, (size_t)b64len); return 1; } /** nghttp2 callback. Used to parse headers from HEADER frames. */ static int http2_req_header_cb(nghttp2_session* session, const nghttp2_frame* frame, const uint8_t* name, size_t namelen, const uint8_t* value, size_t valuelen, uint8_t ATTR_UNUSED(flags), void* cb_arg) { struct http2_stream* h2_stream = NULL; struct http2_session* h2_session = (struct http2_session*)cb_arg; /* nghttp2 deals with CONTINUATION frames and provides them as part of * the HEADER */ if(frame->hd.type != NGHTTP2_HEADERS || frame->headers.cat != NGHTTP2_HCAT_REQUEST) { /* only interrested in request headers */ return 0; } if(!(h2_stream = nghttp2_session_get_stream_user_data(session, frame->hd.stream_id))) return 0; /* earlier checks already indicate we can stop handling this query */ if(h2_stream->http_method == HTTP_METHOD_UNSUPPORTED || h2_stream->invalid_content_type || h2_stream->invalid_endpoint) return 0; /* nghttp2 performs some sanity checks in the headers, including: * name and value are guaranteed to be null terminated * name is guaranteed to be lowercase * content-length value is guaranteed to contain digits */ if(!h2_stream->http_method && namelen == 7 && memcmp(":method", name, namelen) == 0) { /* Case insensitive check on :method value to be on the safe * side. I failed to find text about case sensitivity in specs. */ if(valuelen == 3 && strcasecmp("GET", (const char*)value) == 0) h2_stream->http_method = HTTP_METHOD_GET; else if(valuelen == 4 && strcasecmp("POST", (const char*)value) == 0) { h2_stream->http_method = HTTP_METHOD_POST; if(h2_stream->qbuffer) { /* POST method uses query from DATA frames */ lock_basic_lock(&http2_query_buffer_count_lock); http2_query_buffer_count -= sldns_buffer_capacity(h2_stream->qbuffer); lock_basic_unlock(&http2_query_buffer_count_lock); sldns_buffer_free(h2_stream->qbuffer); h2_stream->qbuffer = NULL; } } else h2_stream->http_method = HTTP_METHOD_UNSUPPORTED; return 0; } if(namelen == 5 && memcmp(":path", name, namelen) == 0) { /* :path may contain DNS query, depending on method. Method might * not be known yet here, so check after finishing receiving * stream. */ #define HTTP_QUERY_PARAM "?dns=" size_t el = strlen(h2_session->c->http_endpoint); size_t qpl = strlen(HTTP_QUERY_PARAM); if(valuelen < el || memcmp(h2_session->c->http_endpoint, value, el) != 0) { h2_stream->invalid_endpoint = 1; return 0; } /* larger than endpoint only allowed if it is for the query * parameter */ if(valuelen <= el+qpl || memcmp(HTTP_QUERY_PARAM, value+el, qpl) != 0) { if(valuelen != el) h2_stream->invalid_endpoint = 1; return 0; } if(!http2_buffer_uri_query(h2_session, h2_stream, value+(el+qpl), valuelen-(el+qpl))) { return NGHTTP2_ERR_CALLBACK_FAILURE; } return 0; } /* Content type is a SHOULD (rfc7231#section-3.1.1.5) when using POST, * and not needed when using GET. Don't enfore. * If set only allow lowercase "application/dns-message". * * Clients SHOULD (rfc8484#section-4.1) set an accept header, but MUST * be able to handle "application/dns-message". Since that is the only * content-type supported we can ignore the accept header. */ if((namelen == 12 && memcmp("content-type", name, namelen) == 0)) { if(valuelen != 23 || memcmp("application/dns-message", value, valuelen) != 0) { h2_stream->invalid_content_type = 1; } } /* Only interested in content-lentg for POST (on not yet known) method. */ if((!h2_stream->http_method || h2_stream->http_method == HTTP_METHOD_POST) && !h2_stream->content_length && namelen == 14 && memcmp("content-length", name, namelen) == 0) { if(valuelen > 5) { h2_stream->query_too_large = 1; return 0; } /* guaranteed to only contian digits and be null terminated */ h2_stream->content_length = atoi((const char*)value); if(h2_stream->content_length > h2_session->c->http2_stream_max_qbuffer_size) { h2_stream->query_too_large = 1; return 0; } } return 0; } /** nghttp2 callback. Used to get data from DATA frames, which can contain * queries in POST requests. */ static int http2_req_data_chunk_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t ATTR_UNUSED(flags), int32_t stream_id, const uint8_t* data, size_t len, void* cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; struct http2_stream* h2_stream; size_t qlen = 0; if(!(h2_stream = nghttp2_session_get_stream_user_data( h2_session->session, stream_id))) { return 0; } if(h2_stream->query_too_large) return 0; if(!h2_stream->qbuffer) { if(h2_stream->content_length) { if(h2_stream->content_length < len) /* getting more data in DATA frame than * advertised in content-length header. */ return NGHTTP2_ERR_CALLBACK_FAILURE; qlen = h2_stream->content_length; } else if(len <= h2_session->c->http2_stream_max_qbuffer_size) { /* setting this to msg-buffer-size can result in a lot * of memory consuption. Most queries should fit in a * single DATA frame, and most POST queries will * containt content-length which does not impose this * limit. */ qlen = len; } } if(!h2_stream->qbuffer && qlen) { lock_basic_lock(&http2_query_buffer_count_lock); if(http2_query_buffer_count + qlen > http2_query_buffer_max) { lock_basic_unlock(&http2_query_buffer_count_lock); verbose(VERB_ALGO, "reset HTTP2 stream, no space left, " "in http2-query-buffer-size"); return http2_submit_rst_stream(h2_session, h2_stream); } http2_query_buffer_count += qlen; lock_basic_unlock(&http2_query_buffer_count_lock); if(!(h2_stream->qbuffer = sldns_buffer_new(qlen))) { lock_basic_lock(&http2_query_buffer_count_lock); http2_query_buffer_count -= qlen; lock_basic_unlock(&http2_query_buffer_count_lock); } } if(!h2_stream->qbuffer || sldns_buffer_remaining(h2_stream->qbuffer) < len) { verbose(VERB_ALGO, "http2 data_chunck_recv failed. Not enough " "buffer space for POST query. Can happen on multi " "frame requests without content-length header"); h2_stream->query_too_large = 1; return 0; } sldns_buffer_write(h2_stream->qbuffer, data, len); return 0; } void http2_req_stream_clear(struct http2_stream* h2_stream) { if(h2_stream->qbuffer) { lock_basic_lock(&http2_query_buffer_count_lock); http2_query_buffer_count -= sldns_buffer_capacity(h2_stream->qbuffer); lock_basic_unlock(&http2_query_buffer_count_lock); sldns_buffer_free(h2_stream->qbuffer); h2_stream->qbuffer = NULL; } if(h2_stream->rbuffer) { lock_basic_lock(&http2_response_buffer_count_lock); http2_response_buffer_count -= sldns_buffer_capacity(h2_stream->rbuffer); lock_basic_unlock(&http2_response_buffer_count_lock); sldns_buffer_free(h2_stream->rbuffer); h2_stream->rbuffer = NULL; } } nghttp2_session_callbacks* http2_req_callbacks_create(void) { nghttp2_session_callbacks *callbacks; if(nghttp2_session_callbacks_new(&callbacks) == NGHTTP2_ERR_NOMEM) { log_err("failed to initialize nghttp2 callback"); return NULL; } /* reception of header block started, used to create h2_stream */ nghttp2_session_callbacks_set_on_begin_headers_callback(callbacks, http2_req_begin_headers_cb); /* complete frame received, used to get data from stream if frame * has end stream flag, and start processing query */ nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks, http2_req_frame_recv_cb); /* get request info from headers */ nghttp2_session_callbacks_set_on_header_callback(callbacks, http2_req_header_cb); /* get data from DATA frames, containing POST query */ nghttp2_session_callbacks_set_on_data_chunk_recv_callback(callbacks, http2_req_data_chunk_recv_cb); /* generic HTTP2 callbacks */ nghttp2_session_callbacks_set_recv_callback(callbacks, http2_recv_cb); nghttp2_session_callbacks_set_send_callback(callbacks, http2_send_cb); nghttp2_session_callbacks_set_on_stream_close_callback(callbacks, http2_stream_close_cb); return callbacks; } #endif /* HAVE_NGHTTP2 */ unbound-1.13.1/services/view.c0000644000175000017500000001451314010434640015644 0ustar wouterwouter/* * services/view.c - named views containing local zones authority service. * * Copyright (c) 2016, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to enable named views that can hold local zone * authority service. */ #include "config.h" #include "services/view.h" #include "services/localzone.h" #include "util/config_file.h" int view_cmp(const void* v1, const void* v2) { struct view* a = (struct view*)v1; struct view* b = (struct view*)v2; return strcmp(a->name, b->name); } struct views* views_create(void) { struct views* v = (struct views*)calloc(1, sizeof(*v)); if(!v) return NULL; rbtree_init(&v->vtree, &view_cmp); lock_rw_init(&v->lock); lock_protect(&v->lock, &v->vtree, sizeof(v->vtree)); return v; } /** This prototype is defined in in respip.h, but we want to avoid * unnecessary dependencies */ void respip_set_delete(struct respip_set *set); void view_delete(struct view* v) { if(!v) return; lock_rw_destroy(&v->lock); local_zones_delete(v->local_zones); respip_set_delete(v->respip_set); free(v->name); free(v); } static void delviewnode(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct view* v = (struct view*)n; view_delete(v); } void views_delete(struct views* v) { if(!v) return; lock_rw_destroy(&v->lock); traverse_postorder(&v->vtree, delviewnode, NULL); free(v); } /** create a new view */ static struct view* view_create(char* name) { struct view* v = (struct view*)calloc(1, sizeof(*v)); if(!v) return NULL; v->node.key = v; if(!(v->name = strdup(name))) { free(v); return NULL; } lock_rw_init(&v->lock); lock_protect(&v->lock, &v->name, sizeof(*v)-sizeof(rbnode_type)); return v; } /** enter a new view returns with WRlock */ static struct view* views_enter_view_name(struct views* vs, char* name) { struct view* v = view_create(name); if(!v) { log_err("out of memory"); return NULL; } /* add to rbtree */ lock_rw_wrlock(&vs->lock); lock_rw_wrlock(&v->lock); if(!rbtree_insert(&vs->vtree, &v->node)) { log_warn("duplicate view: %s", name); lock_rw_unlock(&v->lock); view_delete(v); lock_rw_unlock(&vs->lock); return NULL; } lock_rw_unlock(&vs->lock); return v; } int views_apply_cfg(struct views* vs, struct config_file* cfg) { struct config_view* cv; struct view* v; struct config_file lz_cfg; /* Check existence of name in first view (last in config). Rest of * views are already checked when parsing config. */ if(cfg->views && !cfg->views->name) { log_err("view without a name"); return 0; } for(cv = cfg->views; cv; cv = cv->next) { /* create and enter view */ if(!(v = views_enter_view_name(vs, cv->name))) return 0; v->isfirst = cv->isfirst; if(cv->local_zones || cv->local_data) { if(!(v->local_zones = local_zones_create())){ lock_rw_unlock(&v->lock); return 0; } memset(&lz_cfg, 0, sizeof(lz_cfg)); lz_cfg.local_zones = cv->local_zones; lz_cfg.local_data = cv->local_data; lz_cfg.local_zones_nodefault = cv->local_zones_nodefault; if(v->isfirst) { /* Do not add defaults to view-specific * local-zone when global local zone will be * used. */ struct config_strlist* nd; lz_cfg.local_zones_disable_default = 1; /* Add nodefault zones to list of zones to add, * so they will be used as if they are * configured as type transparent */ for(nd = cv->local_zones_nodefault; nd; nd = nd->next) { char* nd_str, *nd_type; nd_str = strdup(nd->str); if(!nd_str) { log_err("out of memory"); lock_rw_unlock(&v->lock); return 0; } nd_type = strdup("nodefault"); if(!nd_type) { log_err("out of memory"); free(nd_str); lock_rw_unlock(&v->lock); return 0; } if(!cfg_str2list_insert( &lz_cfg.local_zones, nd_str, nd_type)) { log_err("failed to insert " "default zones into " "local-zone list"); lock_rw_unlock(&v->lock); return 0; } } } if(!local_zones_apply_cfg(v->local_zones, &lz_cfg)){ lock_rw_unlock(&v->lock); return 0; } /* local_zones, local_zones_nodefault and local_data * are free'd from config_view by local_zones_apply_cfg. * Set pointers to NULL. */ cv->local_zones = NULL; cv->local_data = NULL; cv->local_zones_nodefault = NULL; } lock_rw_unlock(&v->lock); } return 1; } /** find a view by name */ struct view* views_find_view(struct views* vs, const char* name, int write) { struct view* v; struct view key; key.node.key = &v; key.name = (char *)name; lock_rw_rdlock(&vs->lock); if(!(v = (struct view*)rbtree_search(&vs->vtree, &key.node))) { lock_rw_unlock(&vs->lock); return 0; } if(write) { lock_rw_wrlock(&v->lock); } else { lock_rw_rdlock(&v->lock); } lock_rw_unlock(&vs->lock); return v; } void views_print(struct views* v) { /* TODO implement print */ (void)v; } unbound-1.13.1/services/listen_dnsport.h0000644000175000017500000003515114010434640017747 0ustar wouterwouter/* * services/listen_dnsport.h - listen on port 53 for incoming DNS queries. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file has functions to get queries from clients. */ #ifndef LISTEN_DNSPORT_H #define LISTEN_DNSPORT_H #include "util/netevent.h" #ifdef HAVE_NGHTTP2_NGHTTP2_H #include #endif struct listen_list; struct config_file; struct addrinfo; struct sldns_buffer; struct tcl_list; /** * Listening for queries structure. * Contains list of query-listen sockets. */ struct listen_dnsport { /** Base for select calls */ struct comm_base* base; /** buffer shared by UDP connections, since there is only one datagram at any time. */ struct sldns_buffer* udp_buff; #ifdef USE_DNSCRYPT struct sldns_buffer* dnscrypt_udp_buff; #endif /** list of comm points used to get incoming events */ struct listen_list* cps; }; /** * Single linked list to store event points. */ struct listen_list { /** next in list */ struct listen_list* next; /** event info */ struct comm_point* com; }; /** * type of ports */ enum listen_type { /** udp type */ listen_type_udp, /** tcp type */ listen_type_tcp, /** udp ipv6 (v4mapped) for use with ancillary data */ listen_type_udpancil, /** ssl over tcp type */ listen_type_ssl, /** udp type + dnscrypt*/ listen_type_udp_dnscrypt, /** tcp type + dnscrypt */ listen_type_tcp_dnscrypt, /** udp ipv6 (v4mapped) for use with ancillary data + dnscrypt*/ listen_type_udpancil_dnscrypt, /** HTTP(2) over TLS over TCP */ listen_type_http }; /** * Single linked list to store shared ports that have been * opened for use by all threads. */ struct listen_port { /** next in list */ struct listen_port* next; /** file descriptor, open and ready for use */ int fd; /** type of file descriptor, udp or tcp */ enum listen_type ftype; }; /** * Create shared listening ports * Getaddrinfo, create socket, bind and listen to zero or more * interfaces for IP4 and/or IP6, for UDP and/or TCP. * On the given port number. It creates the sockets. * @param cfg: settings on what ports to open. * @param ifs: interfaces to open, array of IP addresses, "ip[@port]". * @param num_ifs: length of ifs. * @param reuseport: set to true if you want reuseport, or NULL to not have it, * set to false on exit if reuseport failed to apply (because of no * kernel support). * @return: linked list of ports or NULL on error. */ struct listen_port* listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, int* reuseport); /** * Close and delete the (list of) listening ports. */ void listening_ports_free(struct listen_port* list); /** * Resolve interface names in config and store result IP addresses * @param cfg: config * @param resif: string array (malloced array of malloced strings) with * result. NULL if cfg has none. * @param num_resif: length of resif. Zero if cfg has zero num_ifs. * @return 0 on failure. */ int resolve_interface_names(struct config_file* cfg, char*** resif, int* num_resif); /** * Create commpoints with for this thread for the shared ports. * @param base: the comm_base that provides event functionality. * for default all ifs. * @param ports: the list of shared ports. * @param bufsize: size of datagram buffer. * @param tcp_accept_count: max number of simultaneous TCP connections * from clients. * @param tcp_idle_timeout: idle timeout for TCP connections in msec. * @param harden_large_queries: whether query size should be limited. * @param http_max_streams: maximum number of HTTP/2 streams per connection. * @param http_endpoint: HTTP endpoint to service queries on * @param http_notls: no TLS for http downstream * @param tcp_conn_limit: TCP connection limit info. * @param sslctx: nonNULL if ssl context. * @param dtenv: nonNULL if dnstap enabled. * @param cb: callback function when a request arrives. It is passed * the packet and user argument. Return true to send a reply. * @param cb_arg: user data argument for callback function. * @return: the malloced listening structure, ready for use. NULL on error. */ struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ports, size_t bufsize, int tcp_accept_count, int tcp_idle_timeout, int harden_large_queries, uint32_t http_max_streams, char* http_endpoint, int http_notls, struct tcl_list* tcp_conn_limit, void* sslctx, struct dt_env* dtenv, comm_point_callback_type* cb, void *cb_arg); /** * delete the listening structure * @param listen: listening structure. */ void listen_delete(struct listen_dnsport* listen); /** * delete listen_list of commpoints. Calls commpointdelete() on items. * This may close the fds or not depending on flags. * @param list: to delete. */ void listen_list_delete(struct listen_list* list); /** * get memory size used by the listening structs * @param listen: listening structure. * @return: size in bytes. */ size_t listen_get_mem(struct listen_dnsport* listen); /** * stop accept handlers for TCP (until enabled again) * @param listen: listening structure. */ void listen_stop_accept(struct listen_dnsport* listen); /** * start accept handlers for TCP (was stopped before) * @param listen: listening structure. */ void listen_start_accept(struct listen_dnsport* listen); /** * Create and bind nonblocking UDP socket * @param family: for socket call. * @param socktype: for socket call. * @param addr: for bind call. * @param addrlen: for bind call. * @param v6only: if enabled, IP6 sockets get IP6ONLY option set. * if enabled with value 2 IP6ONLY option is disabled. * @param inuse: on error, this is set true if the port was in use. * @param noproto: on error, this is set true if cause is that the IPv6 proto (family) is not available. * @param rcv: set size on rcvbuf with socket option, if 0 it is not set. * @param snd: set size on sndbuf with socket option, if 0 it is not set. * @param listen: if true, this is a listening UDP port, eg port 53, and * set SO_REUSEADDR on it. * @param reuseport: if nonNULL and true, try to set SO_REUSEPORT on * listening UDP port. Set to false on return if it failed to do so. * @param transparent: set IP_TRANSPARENT socket option. * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. * @param dscp: DSCP to use. * @return: the socket. -1 on error. */ int create_udp_sock(int family, int socktype, struct sockaddr* addr, socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv, int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd, int dscp); /** * Create and bind TCP listening socket * @param addr: address info ready to make socket. * @param v6only: enable ip6 only flag on ip6 sockets. * @param noproto: if error caused by lack of protocol support. * @param reuseport: if nonNULL and true, try to set SO_REUSEPORT on * listening UDP port. Set to false on return if it failed to do so. * @param transparent: set IP_TRANSPARENT socket option. * @param mss: maximum segment size of the socket. if zero, leaves the default. * @param nodelay: if true set TCP_NODELAY and TCP_QUICKACK socket options. * @param freebind: set IP_FREEBIND socket option. * @param use_systemd: if true, fetch sockets from systemd. * @param dscp: DSCP to use. * @return: the socket. -1 on error. */ int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, int* reuseport, int transparent, int mss, int nodelay, int freebind, int use_systemd, int dscp); /** * Create and bind local listening socket * @param path: path to the socket. * @param noproto: on error, this is set true if cause is that local sockets * are not supported. * @param use_systemd: if true, fetch sockets from systemd. * @return: the socket. -1 on error. */ int create_local_accept_sock(const char* path, int* noproto, int use_systemd); /** * TCP request info. List of requests outstanding on the channel, that * are asked for but not yet answered back. */ struct tcp_req_info { /** the TCP comm point for this. Its buffer is used for read/write */ struct comm_point* cp; /** the buffer to use to spool reply from mesh into, * it can then be copied to the result list and written. * it is a pointer to the shared udp buffer. */ struct sldns_buffer* spool_buffer; /** are we in worker_handle function call (for recursion callback)*/ int in_worker_handle; /** is the comm point dropped (by worker handle). * That means we have to disconnect the channel. */ int is_drop; /** is the comm point set to send_reply (by mesh new client in worker * handle), if so answer is available in c.buffer */ int is_reply; /** read channel has closed, just write pending results */ int read_is_closed; /** read again */ int read_again; /** number of outstanding requests */ int num_open_req; /** list of outstanding requests */ struct tcp_req_open_item* open_req_list; /** number of pending writeable results */ int num_done_req; /** list of pending writable result packets, malloced one at a time */ struct tcp_req_done_item* done_req_list; }; /** * List of open items in TCP channel */ struct tcp_req_open_item { /** next in list */ struct tcp_req_open_item* next; /** the mesh area of the mesh_state */ struct mesh_area* mesh; /** the mesh state */ struct mesh_state* mesh_state; }; /** * List of done items in TCP channel */ struct tcp_req_done_item { /** next in list */ struct tcp_req_done_item* next; /** the buffer with packet contents */ uint8_t* buf; /** length of the buffer */ size_t len; }; /** * Create tcp request info structure that keeps track of open * requests on the TCP channel that are resolved at the same time, * and the pending results that have to get written back to that client. * @param spoolbuf: shared buffer * @return new structure or NULL on alloc failure. */ struct tcp_req_info* tcp_req_info_create(struct sldns_buffer* spoolbuf); /** * Delete tcp request structure. Called by owning commpoint. * Removes mesh entry references and stored results from the lists. * @param req: the tcp request info */ void tcp_req_info_delete(struct tcp_req_info* req); /** * Clear tcp request structure. Removes list entries, sets it up ready * for the next connection. * @param req: tcp request info structure. */ void tcp_req_info_clear(struct tcp_req_info* req); /** * Remove mesh state entry from list in tcp_req_info. * caller has to manage the mesh state reply entry in the mesh state. * @param req: the tcp req info that has the entry removed from the list. * @param m: the state removed from the list. */ void tcp_req_info_remove_mesh_state(struct tcp_req_info* req, struct mesh_state* m); /** * Handle write done of the last result packet * @param req: the tcp req info. */ void tcp_req_info_handle_writedone(struct tcp_req_info* req); /** * Handle read done of a new request from the client * @param req: the tcp req info. */ void tcp_req_info_handle_readdone(struct tcp_req_info* req); /** * Add mesh state to the tcp req list of open requests. * So the comm_reply can be removed off the mesh reply list when * the tcp channel has to be closed (for other reasons then that that * request was done, eg. channel closed by client or some format error). * @param req: tcp req info structure. It keeps track of the simultaneous * requests and results on a tcp (or TLS) channel. * @param mesh: mesh area for the state. * @param m: mesh state to add. * @return 0 on failure (malloc failure). */ int tcp_req_info_add_meshstate(struct tcp_req_info* req, struct mesh_area* mesh, struct mesh_state* m); /** * Send reply on tcp simultaneous answer channel. May queue it up. * @param req: request info structure. */ void tcp_req_info_send_reply(struct tcp_req_info* req); /** the read channel has closed * @param req: request. remaining queries are looked up and answered. * @return zero if nothing to do, just close the tcp. */ int tcp_req_info_handle_read_close(struct tcp_req_info* req); /** get the size of currently used tcp stream wait buffers (in bytes) */ size_t tcp_req_info_get_stream_buffer_size(void); /** get the size of currently used HTTP2 query buffers (in bytes) */ size_t http2_get_query_buffer_size(void); /** get the size of currently used HTTP2 response buffers (in bytes) */ size_t http2_get_response_buffer_size(void); #ifdef HAVE_NGHTTP2 /** * Create nghttp2 callbacks to handle HTTP2 requests. * @return malloc'ed struct, NULL on failure */ nghttp2_session_callbacks* http2_req_callbacks_create(void); /** Free http2 stream buffers and decrease buffer counters */ void http2_req_stream_clear(struct http2_stream* h2_stream); /** * DNS response ready to be submitted to nghttp2, to be prepared for sending * out. Response is stored in c->buffer. Copy to rbuffer because the c->buffer * might be used before this will be send out. * @param h2_session: http2 session, containing c->buffer which contains answer * @param h2_stream: http2 stream, containing buffer to store answer in * @return 0 on error, 1 otherwise */ int http2_submit_dns_response(struct http2_session* h2_session); #else int http2_submit_dns_response(void* v); #endif /* HAVE_NGHTTP2 */ char* set_ip_dscp(int socket, int addrfamily, int ds); #endif /* LISTEN_DNSPORT_H */ unbound-1.13.1/services/cache/0000755000175000017500000000000014010434640015565 5ustar wouterwouterunbound-1.13.1/services/cache/infra.h0000644000175000017500000003777414010434640017057 0ustar wouterwouter/* * services/cache/infra.h - infrastructure cache, server rtt and capabilities * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the infrastructure cache, as well as rate limiting. * Note that there are two sorts of rate-limiting here: * - Pre-cache, per-query rate limiting (query ratelimits) * - Post-cache, per-domain name rate limiting (infra-ratelimits) */ #ifndef SERVICES_CACHE_INFRA_H #define SERVICES_CACHE_INFRA_H #include "util/storage/lruhash.h" #include "util/storage/dnstree.h" #include "util/rtt.h" #include "util/netevent.h" #include "util/data/msgreply.h" struct slabhash; struct config_file; /** * Host information kept for every server, per zone. */ struct infra_key { /** the host address. */ struct sockaddr_storage addr; /** length of addr. */ socklen_t addrlen; /** zone name in wireformat */ uint8_t* zonename; /** length of zonename */ size_t namelen; /** hash table entry, data of type infra_data. */ struct lruhash_entry entry; }; /** * Host information encompasses host capabilities and retransmission timeouts. * And lameness information (notAuthoritative, noEDNS, Recursive) */ struct infra_data { /** TTL value for this entry. absolute time. */ time_t ttl; /** time in seconds (absolute) when probing re-commences, 0 disabled */ time_t probedelay; /** round trip times for timeout calculation */ struct rtt_info rtt; /** edns version that the host supports, -1 means no EDNS */ int edns_version; /** if the EDNS lameness is already known or not. * EDNS lame is when EDNS queries or replies are dropped, * and cause a timeout */ uint8_t edns_lame_known; /** is the host lame (does not serve the zone authoritatively), * or is the host dnssec lame (does not serve DNSSEC data) */ uint8_t isdnsseclame; /** is the host recursion lame (not AA, but RA) */ uint8_t rec_lame; /** the host is lame (not authoritative) for A records */ uint8_t lame_type_A; /** the host is lame (not authoritative) for other query types */ uint8_t lame_other; /** timeouts counter for type A */ uint8_t timeout_A; /** timeouts counter for type AAAA */ uint8_t timeout_AAAA; /** timeouts counter for others */ uint8_t timeout_other; }; /** * Infra cache */ struct infra_cache { /** The hash table with hosts */ struct slabhash* hosts; /** TTL value for host information, in seconds */ int host_ttl; /** the hosts that are down are kept probed for recovery */ int infra_keep_probing; /** hash table with query rates per name: rate_key, rate_data */ struct slabhash* domain_rates; /** ratelimit settings for domains, struct domain_limit_data */ rbtree_type domain_limits; /** hash table with query rates per client ip: ip_rate_key, ip_rate_data */ struct slabhash* client_ip_rates; }; /** ratelimit, unless overridden by domain_limits, 0 is off */ extern int infra_dp_ratelimit; /** * ratelimit settings for domains */ struct domain_limit_data { /** key for rbtree, must be first in struct, name of domain */ struct name_tree_node node; /** ratelimit for exact match with this name, -1 if not set */ int lim; /** ratelimit for names below this name, -1 if not set */ int below; }; /** * key for ratelimit lookups, a domain name */ struct rate_key { /** lruhash key entry */ struct lruhash_entry entry; /** domain name in uncompressed wireformat */ uint8_t* name; /** length of name */ size_t namelen; }; /** ip ratelimit, 0 is off */ extern int infra_ip_ratelimit; /** * key for ip_ratelimit lookups, a source IP. */ struct ip_rate_key { /** lruhash key entry */ struct lruhash_entry entry; /** client ip information */ struct sockaddr_storage addr; /** length of address */ socklen_t addrlen; }; /** number of seconds to track qps rate */ #define RATE_WINDOW 2 /** * Data for ratelimits per domain name * It is incremented when a non-cache-lookup happens for that domain name. * The name is the delegation point we have for the name. * If a new delegation point is found (a referral reply), the previous * delegation point is decremented, and the new one is charged with the query. */ struct rate_data { /** queries counted, for that second. 0 if not in use. */ int qps[RATE_WINDOW]; /** what the timestamp is of the qps array members, counter is * valid for that timestamp. Usually now and now-1. */ time_t timestamp[RATE_WINDOW]; }; #define ip_rate_data rate_data /** infra host cache default hash lookup size */ #define INFRA_HOST_STARTSIZE 32 /** bytes per zonename reserved in the hostcache, dnamelen(zonename.com.) */ #define INFRA_BYTES_NAME 14 /** * Create infra cache. * @param cfg: config parameters or NULL for defaults. * @return: new infra cache, or NULL. */ struct infra_cache* infra_create(struct config_file* cfg); /** * Delete infra cache. * @param infra: infrastructure cache to delete. */ void infra_delete(struct infra_cache* infra); /** * Adjust infra cache to use updated configuration settings. * This may clean the cache. Operates a bit like realloc. * There may be no threading or use by other threads. * @param infra: existing cache. If NULL a new infra cache is returned. * @param cfg: config options. * @return the new infra cache pointer or NULL on error. */ struct infra_cache* infra_adjust(struct infra_cache* infra, struct config_file* cfg); /** * Plain find infra data function (used by the the other functions) * @param infra: infrastructure cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: domain name of zone. * @param namelen: length of domain name. * @param wr: if true, writelock, else readlock. * @return the entry, could be expired (this is not checked) or NULL. */ struct lruhash_entry* infra_lookup_nottl(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, int wr); /** * Find host information to send a packet. Creates new entry if not found. * Lameness is empty. EDNS is 0 (try with first), and rtt is returned for * the first message to it. * Use this to send a packet only, because it also locks out others when * probing is restricted. * @param infra: infrastructure cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: domain name of zone. * @param namelen: length of domain name. * @param timenow: what time it is now. * @param edns_vs: edns version it supports, is returned. * @param edns_lame_known: if EDNS lame (EDNS is dropped in transit) has * already been probed, is returned. * @param to: timeout to use, is returned. * @return: 0 on error. */ int infra_host(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, time_t timenow, int* edns_vs, uint8_t* edns_lame_known, int* to); /** * Set a host to be lame for the given zone. * @param infra: infrastructure cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: domain name of zone apex. * @param namelen: length of domain name. * @param timenow: what time it is now. * @param dnsseclame: if true the host is set dnssec lame. * if false, the host is marked lame (not serving the zone). * @param reclame: if true host is a recursor not AA server. * if false, dnsseclame or marked lame. * @param qtype: the query type for which it is lame. * @return: 0 on error. */ int infra_set_lame(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, time_t timenow, int dnsseclame, int reclame, uint16_t qtype); /** * Update rtt information for the host. * @param infra: infrastructure cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: zone name * @param namelen: zone name length * @param qtype: query type. * @param roundtrip: estimate of roundtrip time in milliseconds or -1 for * timeout. * @param orig_rtt: original rtt for the query that timed out (roundtrip==-1). * ignored if roundtrip != -1. * @param timenow: what time it is now. * @return: 0 on error. new rto otherwise. */ int infra_rtt_update(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, int qtype, int roundtrip, int orig_rtt, time_t timenow); /** * Update information for the host, store that a TCP transaction works. * @param infra: infrastructure cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: name of zone * @param namelen: length of name */ void infra_update_tcp_works(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen); /** * Update edns information for the host. * @param infra: infrastructure cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: name of zone * @param namelen: length of name * @param edns_version: the version that it publishes. * If it is known to support EDNS then no-EDNS is not stored over it. * @param timenow: what time it is now. * @return: 0 on error. */ int infra_edns_update(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, int edns_version, time_t timenow); /** * Get Lameness information and average RTT if host is in the cache. * This information is to be used for server selection. * @param infra: infrastructure cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: zone name. * @param namelen: zone name length. * @param qtype: the query to be made. * @param lame: if function returns true, this returns lameness of the zone. * @param dnsseclame: if function returns true, this returns if the zone * is dnssec-lame. * @param reclame: if function returns true, this is if it is recursion lame. * @param rtt: if function returns true, this returns avg rtt of the server. * The rtt value is unclamped and reflects recent timeouts. * @param timenow: what time it is now. * @return if found in cache, or false if not (or TTL bad). */ int infra_get_lame_rtt(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, uint16_t qtype, int* lame, int* dnsseclame, int* reclame, int* rtt, time_t timenow); /** * Get additional (debug) info on timing. * @param infra: infra cache. * @param addr: host address. * @param addrlen: length of addr. * @param name: zone name * @param namelen: zone name length * @param rtt: the rtt_info is copied into here (caller alloced return struct). * @param delay: probe delay (if any). * @param timenow: what time it is now. * @param tA: timeout counter on type A. * @param tAAAA: timeout counter on type AAAA. * @param tother: timeout counter on type other. * @return TTL the infra host element is valid for. If -1: not found in cache. * TTL -2: found but expired. */ long long infra_get_host_rto(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, struct rtt_info* rtt, int* delay, time_t timenow, int* tA, int* tAAAA, int* tother); /** * Increment the query rate counter for a delegation point. * @param infra: infra cache. * @param name: zone name * @param namelen: zone name length * @param timenow: what time it is now. * @param qinfo: for logging, query name. * @param replylist: for logging, querier's address (if any). * @return 1 if it could be incremented. 0 if the increment overshot the * ratelimit or if in the previous second the ratelimit was exceeded. * Failures like alloc failures are not returned (probably as 1). */ int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, size_t namelen, time_t timenow, struct query_info* qinfo, struct comm_reply* replylist); /** * Decrement the query rate counter for a delegation point. * Because the reply received for the delegation point was pleasant, * we do not charge this delegation point with it (i.e. it was a referral). * Should call it with same second as when inc() was called. * @param infra: infra cache. * @param name: zone name * @param namelen: zone name length * @param timenow: what time it is now. */ void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name, size_t namelen, time_t timenow); /** * See if the query rate counter for a delegation point is exceeded. * So, no queries are going to be allowed. * @param infra: infra cache. * @param name: zone name * @param namelen: zone name length * @param timenow: what time it is now. * @return true if exceeded. */ int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, size_t namelen, time_t timenow); /** find the maximum rate stored, not too old. 0 if no information. */ int infra_rate_max(void* data, time_t now); /** find the ratelimit in qps for a domain. 0 if no limit for domain. */ int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, size_t namelen); /** Update query ratelimit hash and decide * whether or not a query should be dropped. * @param infra: infra cache * @param repinfo: information about client * @param timenow: what time it is now. * @param buffer: with query for logging. * @return 1 if it could be incremented. 0 if the increment overshot the * ratelimit and the query should be dropped. */ int infra_ip_ratelimit_inc(struct infra_cache* infra, struct comm_reply* repinfo, time_t timenow, struct sldns_buffer* buffer); /** * Get memory used by the infra cache. * @param infra: infrastructure cache. * @return memory in use in bytes. */ size_t infra_get_mem(struct infra_cache* infra); /** calculate size for the hashtable, does not count size of lameness, * so the hashtable is a fixed number of items */ size_t infra_sizefunc(void* k, void* d); /** compare two addresses, returns -1, 0, or +1 */ int infra_compfunc(void* key1, void* key2); /** delete key, and destroy the lock */ void infra_delkeyfunc(void* k, void* arg); /** delete data and destroy the lameness hashtable */ void infra_deldatafunc(void* d, void* arg); /** calculate size for the hashtable */ size_t rate_sizefunc(void* k, void* d); /** compare two names, returns -1, 0, or +1 */ int rate_compfunc(void* key1, void* key2); /** delete key, and destroy the lock */ void rate_delkeyfunc(void* k, void* arg); /** delete data */ void rate_deldatafunc(void* d, void* arg); /* calculate size for the client ip hashtable */ size_t ip_rate_sizefunc(void* k, void* d); /* compare two addresses */ int ip_rate_compfunc(void* key1, void* key2); /* delete key, and destroy the lock */ void ip_rate_delkeyfunc(void* d, void* arg); /* delete data */ #define ip_rate_deldatafunc rate_deldatafunc #endif /* SERVICES_CACHE_INFRA_H */ unbound-1.13.1/services/cache/dns.c0000644000175000017500000010164414010434640016523 0ustar wouterwouter/* * services/cache/dns.c - Cache services for DNS using msg and rrset caches. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the DNS cache. */ #include "config.h" #include "iterator/iter_delegpt.h" #include "iterator/iter_utils.h" #include "validator/val_nsec.h" #include "validator/val_utils.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "util/module.h" #include "util/net_help.h" #include "util/regional.h" #include "util/config_file.h" #include "sldns/sbuffer.h" /** store rrsets in the rrset cache. * @param env: module environment with caches. * @param rep: contains list of rrsets to store. * @param now: current time. * @param leeway: during prefetch how much leeway to update TTLs. * This makes rrsets (other than type NS) timeout sooner so they get * updated with a new full TTL. * Type NS does not get this, because it must not be refreshed from the * child domain, but keep counting down properly. * @param pside: if from parentside discovered NS, so that its NS is okay * in a prefetch situation to be updated (without becoming sticky). * @param qrep: update rrsets here if cache is better * @param region: for qrep allocs. */ static void store_rrsets(struct module_env* env, struct reply_info* rep, time_t now, time_t leeway, int pside, struct reply_info* qrep, struct regional* region) { size_t i; /* see if rrset already exists in cache, if not insert it. */ for(i=0; irrset_count; i++) { rep->ref[i].key = rep->rrsets[i]; rep->ref[i].id = rep->rrsets[i]->id; /* update ref if it was in the cache */ switch(rrset_cache_update(env->rrset_cache, &rep->ref[i], env->alloc, now + ((ntohs(rep->ref[i].key->rk.type)== LDNS_RR_TYPE_NS && !pside)?0:leeway))) { case 0: /* ref unchanged, item inserted */ break; case 2: /* ref updated, cache is superior */ if(region) { struct ub_packed_rrset_key* ck; lock_rw_rdlock(&rep->ref[i].key->entry.lock); /* if deleted rrset, do not copy it */ if(rep->ref[i].key->id == 0) ck = NULL; else ck = packed_rrset_copy_region( rep->ref[i].key, region, now); lock_rw_unlock(&rep->ref[i].key->entry.lock); if(ck) { /* use cached copy if memory allows */ qrep->rrsets[i] = ck; } } /* no break: also copy key item */ /* the line below is matched by gcc regex and silences * the fallthrough warning */ /* fallthrough */ case 1: /* ref updated, item inserted */ rep->rrsets[i] = rep->ref[i].key; } } } /** delete message from message cache */ void msg_cache_remove(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags) { struct query_info k; hashvalue_type h; k.qname = qname; k.qname_len = qnamelen; k.qtype = qtype; k.qclass = qclass; k.local_alias = NULL; h = query_info_hash(&k, flags); slabhash_remove(env->msg_cache, h, &k); } /** remove servfail msg cache entry */ static void msg_del_servfail(struct module_env* env, struct query_info* qinfo, uint32_t flags) { struct msgreply_entry* e; /* see if the entry is servfail, and then remove it, so that * lookups move from the cacheresponse stage to the recursionresponse * stage */ e = msg_cache_lookup(env, qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, flags, 0, 0); if(!e) return; /* we don't check for the ttl here, also expired servfail entries * are removed. If the user uses serve-expired, they would still be * used to answer from cache */ if(FLAGS_GET_RCODE(((struct reply_info*)e->entry.data)->flags) != LDNS_RCODE_SERVFAIL) { lock_rw_unlock(&e->entry.lock); return; } lock_rw_unlock(&e->entry.lock); msg_cache_remove(env, qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, flags); } void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside, struct reply_info* qrep, uint32_t flags, struct regional* region) { struct msgreply_entry* e; time_t ttl = rep->ttl; size_t i; /* store RRsets */ for(i=0; irrset_count; i++) { rep->ref[i].key = rep->rrsets[i]; rep->ref[i].id = rep->rrsets[i]->id; } /* there was a reply_info_sortref(rep) here but it seems to be * unnecessary, because the cache gets locked per rrset. */ reply_info_set_ttls(rep, *env->now); store_rrsets(env, rep, *env->now, leeway, pside, qrep, region); if(ttl == 0 && !(flags & DNSCACHE_STORE_ZEROTTL)) { /* we do not store the message, but we did store the RRs, * which could be useful for delegation information */ verbose(VERB_ALGO, "TTL 0: dropped msg from cache"); free(rep); /* if the message is SERVFAIL in cache, remove that SERVFAIL, * so that the TTL 0 response can be returned for future * responses (i.e. don't get answered by the servfail from * cache, but instead go to recursion to get this TTL0 * response). */ msg_del_servfail(env, qinfo, flags); return; } /* store msg in the cache */ reply_info_sortref(rep); if(!(e = query_info_entrysetup(qinfo, rep, hash))) { log_err("store_msg: malloc failed"); return; } slabhash_insert(env->msg_cache, hash, &e->entry, rep, env->alloc); } /** find closest NS or DNAME and returns the rrset (locked) */ static struct ub_packed_rrset_key* find_closest_of_type(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qclass, time_t now, uint16_t searchtype, int stripfront) { struct ub_packed_rrset_key *rrset; uint8_t lablen; if(stripfront) { /* strip off so that DNAMEs have strict subdomain match */ lablen = *qname; qname += lablen + 1; qnamelen -= lablen + 1; } /* snip off front part of qname until the type is found */ while(qnamelen > 0) { if((rrset = rrset_cache_lookup(env->rrset_cache, qname, qnamelen, searchtype, qclass, 0, now, 0))) return rrset; /* snip off front label */ lablen = *qname; qname += lablen + 1; qnamelen -= lablen + 1; } return NULL; } /** add addr to additional section */ static void addr_to_additional(struct ub_packed_rrset_key* rrset, struct regional* region, struct dns_msg* msg, time_t now) { if((msg->rep->rrsets[msg->rep->rrset_count] = packed_rrset_copy_region(rrset, region, now))) { msg->rep->ar_numrrsets++; msg->rep->rrset_count++; } } /** lookup message in message cache */ struct msgreply_entry* msg_cache_lookup(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, time_t now, int wr) { struct lruhash_entry* e; struct query_info k; hashvalue_type h; k.qname = qname; k.qname_len = qnamelen; k.qtype = qtype; k.qclass = qclass; k.local_alias = NULL; h = query_info_hash(&k, flags); e = slabhash_lookup(env->msg_cache, h, &k, wr); if(!e) return NULL; if( now > ((struct reply_info*)e->data)->ttl ) { lock_rw_unlock(&e->lock); return NULL; } return (struct msgreply_entry*)e->key; } /** find and add A and AAAA records for nameservers in delegpt */ static int find_add_addrs(struct module_env* env, uint16_t qclass, struct regional* region, struct delegpt* dp, time_t now, struct dns_msg** msg) { struct delegpt_ns* ns; struct msgreply_entry* neg; struct ub_packed_rrset_key* akey; for(ns = dp->nslist; ns; ns = ns->next) { akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { if(!delegpt_add_rrset_A(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } if(msg) addr_to_additional(akey, region, *msg, now); lock_rw_unlock(&akey->entry.lock); } else { /* BIT_CD on false because delegpt lookup does * not use dns64 translation */ neg = msg_cache_lookup(env, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(neg) { delegpt_add_neg_msg(dp, neg); lock_rw_unlock(&neg->entry.lock); } } akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { if(!delegpt_add_rrset_AAAA(dp, region, akey, 0, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } if(msg) addr_to_additional(akey, region, *msg, now); lock_rw_unlock(&akey->entry.lock); } else { /* BIT_CD on false because delegpt lookup does * not use dns64 translation */ neg = msg_cache_lookup(env, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(neg) { delegpt_add_neg_msg(dp, neg); lock_rw_unlock(&neg->entry.lock); } } } return 1; } /** find and add A and AAAA records for missing nameservers in delegpt */ int cache_fill_missing(struct module_env* env, uint16_t qclass, struct regional* region, struct delegpt* dp) { struct delegpt_ns* ns; struct msgreply_entry* neg; struct ub_packed_rrset_key* akey; time_t now = *env->now; for(ns = dp->nslist; ns; ns = ns->next) { akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { if(!delegpt_add_rrset_A(dp, region, akey, ns->lame, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } log_nametypeclass(VERB_ALGO, "found in cache", ns->name, LDNS_RR_TYPE_A, qclass); lock_rw_unlock(&akey->entry.lock); } else { /* BIT_CD on false because delegpt lookup does * not use dns64 translation */ neg = msg_cache_lookup(env, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(neg) { delegpt_add_neg_msg(dp, neg); lock_rw_unlock(&neg->entry.lock); } } akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(akey) { if(!delegpt_add_rrset_AAAA(dp, region, akey, ns->lame, NULL)) { lock_rw_unlock(&akey->entry.lock); return 0; } log_nametypeclass(VERB_ALGO, "found in cache", ns->name, LDNS_RR_TYPE_AAAA, qclass); lock_rw_unlock(&akey->entry.lock); } else { /* BIT_CD on false because delegpt lookup does * not use dns64 translation */ neg = msg_cache_lookup(env, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qclass, 0, now, 0); if(neg) { delegpt_add_neg_msg(dp, neg); lock_rw_unlock(&neg->entry.lock); } } } return 1; } /** find and add DS or NSEC to delegation msg */ static void find_add_ds(struct module_env* env, struct regional* region, struct dns_msg* msg, struct delegpt* dp, time_t now) { /* Lookup the DS or NSEC at the delegation point. */ struct ub_packed_rrset_key* rrset = rrset_cache_lookup( env->rrset_cache, dp->name, dp->namelen, LDNS_RR_TYPE_DS, msg->qinfo.qclass, 0, now, 0); if(!rrset) { /* NOTE: this won't work for alternate NSEC schemes * (opt-in, NSEC3) */ rrset = rrset_cache_lookup(env->rrset_cache, dp->name, dp->namelen, LDNS_RR_TYPE_NSEC, msg->qinfo.qclass, 0, now, 0); /* Note: the PACKED_RRSET_NSEC_AT_APEX flag is not used. * since this is a referral, we need the NSEC at the parent * side of the zone cut, not the NSEC at apex side. */ if(rrset && nsec_has_type(rrset, LDNS_RR_TYPE_DS)) { lock_rw_unlock(&rrset->entry.lock); rrset = NULL; /* discard wrong NSEC */ } } if(rrset) { /* add it to auth section. This is the second rrset. */ if((msg->rep->rrsets[msg->rep->rrset_count] = packed_rrset_copy_region(rrset, region, now))) { msg->rep->ns_numrrsets++; msg->rep->rrset_count++; } lock_rw_unlock(&rrset->entry.lock); } } struct dns_msg* dns_msg_create(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct regional* region, size_t capacity) { struct dns_msg* msg = (struct dns_msg*)regional_alloc(region, sizeof(struct dns_msg)); if(!msg) return NULL; msg->qinfo.qname = regional_alloc_init(region, qname, qnamelen); if(!msg->qinfo.qname) return NULL; msg->qinfo.qname_len = qnamelen; msg->qinfo.qtype = qtype; msg->qinfo.qclass = qclass; msg->qinfo.local_alias = NULL; /* non-packed reply_info, because it needs to grow the array */ msg->rep = (struct reply_info*)regional_alloc_zero(region, sizeof(struct reply_info)-sizeof(struct rrset_ref)); if(!msg->rep) return NULL; if(capacity > RR_COUNT_MAX) return NULL; /* integer overflow protection */ msg->rep->flags = BIT_QR; /* with QR, no AA */ msg->rep->qdcount = 1; msg->rep->rrsets = (struct ub_packed_rrset_key**) regional_alloc(region, capacity*sizeof(struct ub_packed_rrset_key*)); if(!msg->rep->rrsets) return NULL; return msg; } int dns_msg_authadd(struct dns_msg* msg, struct regional* region, struct ub_packed_rrset_key* rrset, time_t now) { if(!(msg->rep->rrsets[msg->rep->rrset_count++] = packed_rrset_copy_region(rrset, region, now))) return 0; msg->rep->ns_numrrsets++; return 1; } int dns_msg_ansadd(struct dns_msg* msg, struct regional* region, struct ub_packed_rrset_key* rrset, time_t now) { if(!(msg->rep->rrsets[msg->rep->rrset_count++] = packed_rrset_copy_region(rrset, region, now))) return 0; msg->rep->an_numrrsets++; return 1; } struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct regional* region, struct dns_msg** msg, time_t now) { /* try to find closest NS rrset */ struct ub_packed_rrset_key* nskey; struct packed_rrset_data* nsdata; struct delegpt* dp; nskey = find_closest_of_type(env, qname, qnamelen, qclass, now, LDNS_RR_TYPE_NS, 0); if(!nskey) /* hope the caller has hints to prime or something */ return NULL; nsdata = (struct packed_rrset_data*)nskey->entry.data; /* got the NS key, create delegation point */ dp = delegpt_create(region); if(!dp || !delegpt_set_name(dp, region, nskey->rk.dname)) { lock_rw_unlock(&nskey->entry.lock); log_err("find_delegation: out of memory"); return NULL; } /* create referral message */ if(msg) { /* allocate the array to as much as we could need: * NS rrset + DS/NSEC rrset + * A rrset for every NS RR * AAAA rrset for every NS RR */ *msg = dns_msg_create(qname, qnamelen, qtype, qclass, region, 2 + nsdata->count*2); if(!*msg || !dns_msg_authadd(*msg, region, nskey, now)) { lock_rw_unlock(&nskey->entry.lock); log_err("find_delegation: out of memory"); return NULL; } } if(!delegpt_rrset_add_ns(dp, region, nskey, 0)) log_err("find_delegation: addns out of memory"); lock_rw_unlock(&nskey->entry.lock); /* first unlock before next lookup*/ /* find and add DS/NSEC (if any) */ if(msg) find_add_ds(env, region, *msg, dp, now); /* find and add A entries */ if(!find_add_addrs(env, qclass, region, dp, now, msg)) log_err("find_delegation: addrs out of memory"); return dp; } /** allocate dns_msg from query_info and reply_info */ static struct dns_msg* gen_dns_msg(struct regional* region, struct query_info* q, size_t num) { struct dns_msg* msg = (struct dns_msg*)regional_alloc(region, sizeof(struct dns_msg)); if(!msg) return NULL; memcpy(&msg->qinfo, q, sizeof(struct query_info)); msg->qinfo.qname = regional_alloc_init(region, q->qname, q->qname_len); if(!msg->qinfo.qname) return NULL; /* allocate replyinfo struct and rrset key array separately */ msg->rep = (struct reply_info*)regional_alloc(region, sizeof(struct reply_info) - sizeof(struct rrset_ref)); if(!msg->rep) return NULL; if(num > RR_COUNT_MAX) return NULL; /* integer overflow protection */ msg->rep->rrsets = (struct ub_packed_rrset_key**) regional_alloc(region, num * sizeof(struct ub_packed_rrset_key*)); if(!msg->rep->rrsets) return NULL; return msg; } struct dns_msg* tomsg(struct module_env* env, struct query_info* q, struct reply_info* r, struct regional* region, time_t now, int allow_expired, struct regional* scratch) { struct dns_msg* msg; size_t i; int is_expired = 0; time_t now_control = now; if(now > r->ttl) { /* Check if we are allowed to serve expired */ if(allow_expired) { if(env->cfg->serve_expired_ttl && r->serve_expired_ttl < now) { return NULL; } } else { return NULL; } /* Change the current time so we can pass the below TTL checks when * serving expired data. */ now_control = r->ttl - env->cfg->serve_expired_reply_ttl; is_expired = 1; } msg = gen_dns_msg(region, q, r->rrset_count); if(!msg) return NULL; msg->rep->flags = r->flags; msg->rep->qdcount = r->qdcount; msg->rep->ttl = is_expired ?SERVE_EXPIRED_REPLY_TTL :r->ttl - now; if(r->prefetch_ttl > now) msg->rep->prefetch_ttl = r->prefetch_ttl - now; else msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; msg->rep->security = r->security; msg->rep->an_numrrsets = r->an_numrrsets; msg->rep->ns_numrrsets = r->ns_numrrsets; msg->rep->ar_numrrsets = r->ar_numrrsets; msg->rep->rrset_count = r->rrset_count; msg->rep->authoritative = r->authoritative; if(!rrset_array_lock(r->ref, r->rrset_count, now_control)) { return NULL; } if(r->an_numrrsets > 0 && (r->rrsets[0]->rk.type == htons( LDNS_RR_TYPE_CNAME) || r->rrsets[0]->rk.type == htons( LDNS_RR_TYPE_DNAME)) && !reply_check_cname_chain(q, r)) { /* cname chain is now invalid, reconstruct msg */ rrset_array_unlock(r->ref, r->rrset_count); return NULL; } if(r->security == sec_status_secure && !reply_all_rrsets_secure(r)) { /* message rrsets have changed status, revalidate */ rrset_array_unlock(r->ref, r->rrset_count); return NULL; } for(i=0; irep->rrset_count; i++) { msg->rep->rrsets[i] = packed_rrset_copy_region(r->rrsets[i], region, now); if(!msg->rep->rrsets[i]) { rrset_array_unlock(r->ref, r->rrset_count); return NULL; } } if(env) rrset_array_unlock_touch(env->rrset_cache, scratch, r->ref, r->rrset_count); else rrset_array_unlock(r->ref, r->rrset_count); return msg; } /** synthesize RRset-only response from cached RRset item */ static struct dns_msg* rrset_msg(struct ub_packed_rrset_key* rrset, struct regional* region, time_t now, struct query_info* q) { struct dns_msg* msg; struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; if(now > d->ttl) return NULL; msg = gen_dns_msg(region, q, 1); /* only the CNAME (or other) RRset */ if(!msg) return NULL; msg->rep->flags = BIT_QR; /* reply, no AA, no error */ msg->rep->authoritative = 0; /* reply stored in cache can't be authoritative */ msg->rep->qdcount = 1; msg->rep->ttl = d->ttl - now; msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; msg->rep->security = sec_status_unchecked; msg->rep->an_numrrsets = 1; msg->rep->ns_numrrsets = 0; msg->rep->ar_numrrsets = 0; msg->rep->rrset_count = 1; msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now); if(!msg->rep->rrsets[0]) /* copy CNAME */ return NULL; return msg; } /** synthesize DNAME+CNAME response from cached DNAME item */ static struct dns_msg* synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region, time_t now, struct query_info* q, enum sec_status* sec_status) { struct dns_msg* msg; struct ub_packed_rrset_key* ck; struct packed_rrset_data* newd, *d = (struct packed_rrset_data*) rrset->entry.data; uint8_t* newname, *dtarg = NULL; size_t newlen, dtarglen; if(now > d->ttl) return NULL; /* only allow validated (with DNSSEC) DNAMEs used from cache * for insecure DNAMEs, query again. */ *sec_status = d->security; /* return sec status, so the status of the CNAME can be checked * by the calling routine. */ msg = gen_dns_msg(region, q, 2); /* DNAME + CNAME RRset */ if(!msg) return NULL; msg->rep->flags = BIT_QR; /* reply, no AA, no error */ msg->rep->authoritative = 0; /* reply stored in cache can't be authoritative */ msg->rep->qdcount = 1; msg->rep->ttl = d->ttl - now; msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; msg->rep->security = sec_status_unchecked; msg->rep->an_numrrsets = 1; msg->rep->ns_numrrsets = 0; msg->rep->ar_numrrsets = 0; msg->rep->rrset_count = 1; msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now); if(!msg->rep->rrsets[0]) /* copy DNAME */ return NULL; /* synth CNAME rrset */ get_cname_target(rrset, &dtarg, &dtarglen); if(!dtarg) return NULL; newlen = q->qname_len + dtarglen - rrset->rk.dname_len; if(newlen > LDNS_MAX_DOMAINLEN) { msg->rep->flags |= LDNS_RCODE_YXDOMAIN; return msg; } newname = (uint8_t*)regional_alloc(region, newlen); if(!newname) return NULL; /* new name is concatenation of qname front (without DNAME owner) * and DNAME target name */ memcpy(newname, q->qname, q->qname_len-rrset->rk.dname_len); memmove(newname+(q->qname_len-rrset->rk.dname_len), dtarg, dtarglen); /* create rest of CNAME rrset */ ck = (struct ub_packed_rrset_key*)regional_alloc(region, sizeof(struct ub_packed_rrset_key)); if(!ck) return NULL; memset(&ck->entry, 0, sizeof(ck->entry)); msg->rep->rrsets[1] = ck; ck->entry.key = ck; ck->rk.type = htons(LDNS_RR_TYPE_CNAME); ck->rk.rrset_class = rrset->rk.rrset_class; ck->rk.flags = 0; ck->rk.dname = regional_alloc_init(region, q->qname, q->qname_len); if(!ck->rk.dname) return NULL; ck->rk.dname_len = q->qname_len; ck->entry.hash = rrset_key_hash(&ck->rk); newd = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(struct packed_rrset_data) + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t) + newlen); if(!newd) return NULL; ck->entry.data = newd; newd->ttl = 0; /* 0 for synthesized CNAME TTL */ newd->count = 1; newd->rrsig_count = 0; newd->trust = rrset_trust_ans_noAA; newd->rr_len = (size_t*)((uint8_t*)newd + sizeof(struct packed_rrset_data)); newd->rr_len[0] = newlen + sizeof(uint16_t); packed_rrset_ptr_fixup(newd); newd->rr_ttl[0] = newd->ttl; msg->rep->ttl = newd->ttl; msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(newd->ttl); msg->rep->serve_expired_ttl = newd->ttl + SERVE_EXPIRED_TTL; sldns_write_uint16(newd->rr_data[0], newlen); memmove(newd->rr_data[0] + sizeof(uint16_t), newname, newlen); msg->rep->an_numrrsets ++; msg->rep->rrset_count ++; return msg; } /** Fill TYPE_ANY response with some data from cache */ static struct dns_msg* fill_any(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct regional* region) { time_t now = *env->now; struct dns_msg* msg = NULL; uint16_t lookup[] = {LDNS_RR_TYPE_A, LDNS_RR_TYPE_AAAA, LDNS_RR_TYPE_MX, LDNS_RR_TYPE_SOA, LDNS_RR_TYPE_NS, LDNS_RR_TYPE_DNAME, 0}; int i, num=6; /* number of RR types to look up */ log_assert(lookup[num] == 0); if(env->cfg->deny_any) { /* return empty message */ msg = dns_msg_create(qname, qnamelen, qtype, qclass, region, 0); if(!msg) { return NULL; } /* set NOTIMPL for RFC 8482 */ msg->rep->flags |= LDNS_RCODE_NOTIMPL; msg->rep->security = sec_status_indeterminate; return msg; } for(i=0; irrset_cache, qname, qnamelen, lookup[i], qclass, 0, now, 0); struct packed_rrset_data *d; if(!rrset) continue; /* only if rrset from answer section */ d = (struct packed_rrset_data*)rrset->entry.data; if(d->trust == rrset_trust_add_noAA || d->trust == rrset_trust_auth_noAA || d->trust == rrset_trust_add_AA || d->trust == rrset_trust_auth_AA) { lock_rw_unlock(&rrset->entry.lock); continue; } /* create msg if none */ if(!msg) { msg = dns_msg_create(qname, qnamelen, qtype, qclass, region, (size_t)(num-i)); if(!msg) { lock_rw_unlock(&rrset->entry.lock); return NULL; } } /* add RRset to response */ if(!dns_msg_ansadd(msg, region, rrset, now)) { lock_rw_unlock(&rrset->entry.lock); return NULL; } lock_rw_unlock(&rrset->entry.lock); } return msg; } struct dns_msg* dns_cache_lookup(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, struct regional* region, struct regional* scratch, int no_partial) { struct lruhash_entry* e; struct query_info k; hashvalue_type h; time_t now = *env->now; struct ub_packed_rrset_key* rrset; /* lookup first, this has both NXdomains and ANSWER responses */ k.qname = qname; k.qname_len = qnamelen; k.qtype = qtype; k.qclass = qclass; k.local_alias = NULL; h = query_info_hash(&k, flags); e = slabhash_lookup(env->msg_cache, h, &k, 0); if(e) { struct msgreply_entry* key = (struct msgreply_entry*)e->key; struct reply_info* data = (struct reply_info*)e->data; struct dns_msg* msg = tomsg(env, &key->key, data, region, now, 0, scratch); if(msg) { lock_rw_unlock(&e->lock); return msg; } /* could be msg==NULL; due to TTL or not all rrsets available */ lock_rw_unlock(&e->lock); } /* see if a DNAME exists. Checked for first, to enforce that DNAMEs * are more important, the CNAME is resynthesized and thus * consistent with the DNAME */ if(!no_partial && (rrset=find_closest_of_type(env, qname, qnamelen, qclass, now, LDNS_RR_TYPE_DNAME, 1))) { /* synthesize a DNAME+CNAME message based on this */ enum sec_status sec_status = sec_status_unchecked; struct dns_msg* msg = synth_dname_msg(rrset, region, now, &k, &sec_status); if(msg) { struct ub_packed_rrset_key* cname_rrset; lock_rw_unlock(&rrset->entry.lock); /* now, after unlocking the DNAME rrset lock, * check the sec_status, and see if we need to look * up the CNAME record associated before it can * be used */ /* normally, only secure DNAMEs allowed from cache*/ if(sec_status == sec_status_secure) return msg; /* but if we have a CNAME cached with this name, then we * have previously already allowed this name to pass. * the next cache lookup is going to fetch that CNAME itself, * but it is better to have the (unsigned)DNAME + CNAME in * that case */ cname_rrset = rrset_cache_lookup( env->rrset_cache, qname, qnamelen, LDNS_RR_TYPE_CNAME, qclass, 0, now, 0); if(cname_rrset) { /* CNAME already synthesized by * synth_dname_msg routine, so we can * straight up return the msg */ lock_rw_unlock(&cname_rrset->entry.lock); return msg; } } else { lock_rw_unlock(&rrset->entry.lock); } } /* see if we have CNAME for this domain, * but not for DS records (which are part of the parent) */ if(!no_partial && qtype != LDNS_RR_TYPE_DS && (rrset=rrset_cache_lookup(env->rrset_cache, qname, qnamelen, LDNS_RR_TYPE_CNAME, qclass, 0, now, 0))) { uint8_t* wc = NULL; size_t wl; /* if the rrset is not a wildcard expansion, with wcname */ /* because, if we return that CNAME rrset on its own, it is * missing the NSEC or NSEC3 proof */ if(!(val_rrset_wildcard(rrset, &wc, &wl) && wc != NULL)) { struct dns_msg* msg = rrset_msg(rrset, region, now, &k); if(msg) { lock_rw_unlock(&rrset->entry.lock); return msg; } } lock_rw_unlock(&rrset->entry.lock); } /* construct DS, DNSKEY messages from rrset cache. */ if((qtype == LDNS_RR_TYPE_DS || qtype == LDNS_RR_TYPE_DNSKEY) && (rrset=rrset_cache_lookup(env->rrset_cache, qname, qnamelen, qtype, qclass, 0, now, 0))) { /* if the rrset is from the additional section, and the * signatures have fallen off, then do not synthesize a msg * instead, allow a full query for signed results to happen. * Forego all rrset data from additional section, because * some signatures may not be present and cause validation * failure. */ struct packed_rrset_data *d = (struct packed_rrset_data*) rrset->entry.data; if(d->trust != rrset_trust_add_noAA && d->trust != rrset_trust_add_AA && (qtype == LDNS_RR_TYPE_DS || (d->trust != rrset_trust_auth_noAA && d->trust != rrset_trust_auth_AA) )) { struct dns_msg* msg = rrset_msg(rrset, region, now, &k); if(msg) { lock_rw_unlock(&rrset->entry.lock); return msg; } } lock_rw_unlock(&rrset->entry.lock); } /* stop downwards cache search on NXDOMAIN. * Empty nonterminals are NOERROR, so an NXDOMAIN for foo * means bla.foo also does not exist. The DNSSEC proofs are * the same. We search upwards for NXDOMAINs. */ if(env->cfg->harden_below_nxdomain) { while(!dname_is_root(k.qname)) { dname_remove_label(&k.qname, &k.qname_len); h = query_info_hash(&k, flags); e = slabhash_lookup(env->msg_cache, h, &k, 0); if(!e && k.qtype != LDNS_RR_TYPE_A && env->cfg->qname_minimisation) { k.qtype = LDNS_RR_TYPE_A; h = query_info_hash(&k, flags); e = slabhash_lookup(env->msg_cache, h, &k, 0); } if(e) { struct reply_info* data = (struct reply_info*)e->data; struct dns_msg* msg; if(FLAGS_GET_RCODE(data->flags) == LDNS_RCODE_NXDOMAIN && data->security == sec_status_secure && (data->an_numrrsets == 0 || ntohs(data->rrsets[0]->rk.type) != LDNS_RR_TYPE_CNAME) && (msg=tomsg(env, &k, data, region, now, 0, scratch))) { lock_rw_unlock(&e->lock); msg->qinfo.qname=qname; msg->qinfo.qname_len=qnamelen; /* check that DNSSEC really works out */ msg->rep->security = sec_status_unchecked; iter_scrub_nxdomain(msg); return msg; } lock_rw_unlock(&e->lock); } k.qtype = qtype; } } /* fill common RR types for ANY response to avoid requery */ if(qtype == LDNS_RR_TYPE_ANY) { return fill_any(env, qname, qnamelen, qtype, qclass, region); } return NULL; } int dns_cache_store(struct module_env* env, struct query_info* msgqinf, struct reply_info* msgrep, int is_referral, time_t leeway, int pside, struct regional* region, uint32_t flags) { struct reply_info* rep = NULL; /* alloc, malloc properly (not in region, like msg is) */ rep = reply_info_copy(msgrep, env->alloc, NULL); if(!rep) return 0; /* ttl must be relative ;i.e. 0..86400 not time(0)+86400. * the env->now is added to message and RRsets in this routine. */ /* the leeway is used to invalidate other rrsets earlier */ if(is_referral) { /* store rrsets */ struct rrset_ref ref; size_t i; for(i=0; irrset_count; i++) { packed_rrset_ttl_add((struct packed_rrset_data*) rep->rrsets[i]->entry.data, *env->now); ref.key = rep->rrsets[i]; ref.id = rep->rrsets[i]->id; /*ignore ret: it was in the cache, ref updated */ /* no leeway for typeNS */ (void)rrset_cache_update(env->rrset_cache, &ref, env->alloc, *env->now + ((ntohs(ref.key->rk.type)==LDNS_RR_TYPE_NS && !pside) ? 0:leeway)); } free(rep); return 1; } else { /* store msg, and rrsets */ struct query_info qinf; hashvalue_type h; qinf = *msgqinf; qinf.qname = memdup(msgqinf->qname, msgqinf->qname_len); if(!qinf.qname) { reply_info_parsedelete(rep, env->alloc); return 0; } /* fixup flags to be sensible for a reply based on the cache */ /* this module means that RA is available. It is an answer QR. * Not AA from cache. Not CD in cache (depends on client bit). */ rep->flags |= (BIT_RA | BIT_QR); rep->flags &= ~(BIT_AA | BIT_CD); h = query_info_hash(&qinf, (uint16_t)flags); dns_cache_store_msg(env, &qinf, h, rep, leeway, pside, msgrep, flags, region); /* qname is used inside query_info_entrysetup, and set to * NULL. If it has not been used, free it. free(0) is safe. */ free(qinf.qname); } return 1; } int dns_cache_prefetch_adjust(struct module_env* env, struct query_info* qinfo, time_t adjust, uint16_t flags) { struct msgreply_entry* msg; msg = msg_cache_lookup(env, qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, flags, *env->now, 1); if(msg) { struct reply_info* rep = (struct reply_info*)msg->entry.data; if(rep) { rep->prefetch_ttl += adjust; lock_rw_unlock(&msg->entry.lock); return 1; } lock_rw_unlock(&msg->entry.lock); } return 0; } unbound-1.13.1/services/cache/dns.h0000644000175000017500000002507614010434640016534 0ustar wouterwouter/* * services/cache/dns.h - Cache services for DNS using msg and rrset caches. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the DNS cache. */ #ifndef SERVICES_CACHE_DNS_H #define SERVICES_CACHE_DNS_H #include "util/storage/lruhash.h" #include "util/data/msgreply.h" struct module_env; struct query_info; struct reply_info; struct regional; struct delegpt; /** Flags to control behavior of dns_cache_store() and dns_cache_store_msg(). * Must be an unsigned 32-bit value larger than 0xffff */ /** Allow caching a DNS message with a zero TTL. */ #define DNSCACHE_STORE_ZEROTTL 0x100000 /** * Region allocated message reply */ struct dns_msg { /** query info */ struct query_info qinfo; /** reply info - ptr to packed repinfo structure */ struct reply_info *rep; }; /** * Allocate a dns_msg with malloc/alloc structure and store in dns cache. * * @param env: environment, with alloc structure and dns cache. * @param qinf: query info, the query for which answer is stored. * this is allocated in a region, and will be copied to malloc area * before insertion. * @param rep: reply in dns_msg from dns_alloc_msg for example. * this is allocated in a region, and will be copied to malloc area * before insertion. * @param is_referral: If true, then the given message to be stored is a * referral. The cache implementation may use this as a hint. * It will store only the RRsets, not the message. * @param leeway: TTL value, if not 0, other rrsets are considered expired * that many seconds before actual TTL expiry. * @param pside: if true, information came from a server which was fetched * from the parentside of the zonecut. This means that the type NS * can be updated to full TTL even in prefetch situations. * @param region: region to allocate better entries from cache into. * (used when is_referral is false). * @param flags: flags with BIT_CD for AAAA queries in dns64 translation. * The higher 16 bits are used internally to customize the cache policy. * (See DNSCACHE_STORE_xxx flags). * @return 0 on alloc error (out of memory). */ int dns_cache_store(struct module_env* env, struct query_info* qinf, struct reply_info* rep, int is_referral, time_t leeway, int pside, struct regional* region, uint32_t flags); /** * Store message in the cache. Stores in message cache and rrset cache. * Both qinfo and rep should be malloced and are put in the cache. * They should not be used after this call, as they are then in shared cache. * Does not return errors, they are logged and only lead to less cache. * * @param env: module environment with the DNS cache. * @param qinfo: query info * @param hash: hash over qinfo. * @param rep: reply info, together with qinfo makes up the message. * Adjusts the reply info TTLs to absolute time. * @param leeway: TTL value, if not 0, other rrsets are considered expired * that many seconds before actual TTL expiry. * @param pside: if true, information came from a server which was fetched * from the parentside of the zonecut. This means that the type NS * can be updated to full TTL even in prefetch situations. * @param qrep: message that can be altered with better rrs from cache. * @param flags: customization flags for the cache policy. * @param region: to allocate into for qmsg. */ void dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, hashvalue_type hash, struct reply_info* rep, time_t leeway, int pside, struct reply_info* qrep, uint32_t flags, struct regional* region); /** * Find a delegation from the cache. * @param env: module environment with the DNS cache. * @param qname: query name. * @param qnamelen: length of qname. * @param qtype: query type. * @param qclass: query class. * @param region: where to allocate result delegation. * @param msg: if not NULL, delegation message is returned here, synthesized * from the cache. * @param timenow: the time now, for checking if TTL on cache entries is OK. * @return new delegation or NULL on error or if not found in cache. */ struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct regional* region, struct dns_msg** msg, time_t timenow); /** * generate dns_msg from cached message * @param env: module environment with the DNS cache. NULL if the LRU from cache * does not need to be touched. * @param q: query info, contains qname that will make up the dns message. * @param r: reply info that, together with qname, will make up the dns message. * @param region: where to allocate dns message. * @param now: the time now, for check if TTL on cache entry is ok. * @param allow_expired: if true and serve-expired is enabled, it will allow * for expired dns_msg to be generated based on the configured serve-expired * logic. * @param scratch: where to allocate temporary data. * */ struct dns_msg* tomsg(struct module_env* env, struct query_info* q, struct reply_info* r, struct regional* region, time_t now, int allow_expired, struct regional* scratch); /** * Find cached message * @param env: module environment with the DNS cache. * @param qname: query name. * @param qnamelen: length of qname. * @param qtype: query type. * @param qclass: query class. * @param flags: flags with BIT_CD for AAAA queries in dns64 translation. * @param region: where to allocate result. * @param scratch: where to allocate temporary data. * @param no_partial: if true, only complete messages and not a partial * one (with only the start of the CNAME chain and not the rest). * @return new response message (alloced in region, rrsets do not have IDs). * or NULL on error or if not found in cache. * TTLs are made relative to the current time. */ struct dns_msg* dns_cache_lookup(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, struct regional* region, struct regional* scratch, int no_partial); /** * find and add A and AAAA records for missing nameservers in delegpt * @param env: module environment with rrset cache * @param qclass: which class to look in. * @param region: where to store new dp info. * @param dp: delegation point to fill missing entries. * @return false on alloc failure. */ int cache_fill_missing(struct module_env* env, uint16_t qclass, struct regional* region, struct delegpt* dp); /** * Utility, create new, unpacked data structure for cache response. * QR bit set, no AA. Query set as indicated. Space for number of rrsets. * @param qname: query section name * @param qnamelen: len of qname * @param qtype: query section type * @param qclass: query section class * @param region: where to alloc. * @param capacity: number of rrsets space to create in the array. * @return new dns_msg struct or NULL on mem fail. */ struct dns_msg* dns_msg_create(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct regional* region, size_t capacity); /** * Add rrset to authority section in unpacked dns_msg message. Must have enough * space left, does not grow the array. * @param msg: msg to put it in. * @param region: region to alloc in * @param rrset: to add in authority section * @param now: now. * @return true if worked, false on fail */ int dns_msg_authadd(struct dns_msg* msg, struct regional* region, struct ub_packed_rrset_key* rrset, time_t now); /** * Add rrset to authority section in unpacked dns_msg message. Must have enough * space left, does not grow the array. * @param msg: msg to put it in. * @param region: region to alloc in * @param rrset: to add in authority section * @param now: now. * @return true if worked, false on fail */ int dns_msg_ansadd(struct dns_msg* msg, struct regional* region, struct ub_packed_rrset_key* rrset, time_t now); /** * Adjust the prefetch_ttl for a cached message. This adds a value to the * prefetch ttl - postponing the time when it will be prefetched for future * incoming queries. * @param env: module environment with caches and time. * @param qinfo: query info for the query that needs adjustment. * @param adjust: time in seconds to add to the prefetch_leeway. * @param flags: flags with BIT_CD for AAAA queries in dns64 translation. * @return false if not in cache. true if added. */ int dns_cache_prefetch_adjust(struct module_env* env, struct query_info* qinfo, time_t adjust, uint16_t flags); /** lookup message in message cache * the returned nonNULL entry is locked and has to be unlocked by the caller */ struct msgreply_entry* msg_cache_lookup(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, time_t now, int wr); /** * Remove entry from the message cache. For unwanted entries. * @param env: with message cache. * @param qname: query name, in wireformat * @param qnamelen: length of qname, including terminating 0. * @param qtype: query type, host order. * @param qclass: query class, host order. * @param flags: flags */ void msg_cache_remove(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags); #endif /* SERVICES_CACHE_DNS_H */ unbound-1.13.1/services/cache/rrset.c0000644000175000017500000003423414010434640017076 0ustar wouterwouter/* * services/cache/rrset.c - Resource record set cache. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the rrset cache. */ #include "config.h" #include "services/cache/rrset.h" #include "sldns/rrdef.h" #include "util/storage/slabhash.h" #include "util/config_file.h" #include "util/data/packed_rrset.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" #include "util/regional.h" #include "util/alloc.h" #include "util/net_help.h" void rrset_markdel(void* key) { struct ub_packed_rrset_key* r = (struct ub_packed_rrset_key*)key; r->id = 0; } struct rrset_cache* rrset_cache_create(struct config_file* cfg, struct alloc_cache* alloc) { size_t slabs = (cfg?cfg->rrset_cache_slabs:HASH_DEFAULT_SLABS); size_t startarray = HASH_DEFAULT_STARTARRAY; size_t maxmem = (cfg?cfg->rrset_cache_size:HASH_DEFAULT_MAXMEM); struct rrset_cache *r = (struct rrset_cache*)slabhash_create(slabs, startarray, maxmem, ub_rrset_sizefunc, ub_rrset_compare, ub_rrset_key_delete, rrset_data_delete, alloc); slabhash_setmarkdel(&r->table, &rrset_markdel); return r; } void rrset_cache_delete(struct rrset_cache* r) { if(!r) return; slabhash_delete(&r->table); /* slabhash delete also does free(r), since table is first in struct*/ } struct rrset_cache* rrset_cache_adjust(struct rrset_cache *r, struct config_file* cfg, struct alloc_cache* alloc) { if(!r || !cfg || !slabhash_is_size(&r->table, cfg->rrset_cache_size, cfg->rrset_cache_slabs)) { rrset_cache_delete(r); r = rrset_cache_create(cfg, alloc); } return r; } void rrset_cache_touch(struct rrset_cache* r, struct ub_packed_rrset_key* key, hashvalue_type hash, rrset_id_type id) { struct lruhash* table = slabhash_gettable(&r->table, hash); /* * This leads to locking problems, deadlocks, if the caller is * holding any other rrset lock. * Because a lookup through the hashtable does: * tablelock -> entrylock (for that entry caller holds) * And this would do * entrylock(already held) -> tablelock * And if two threads do this, it results in deadlock. * So, the caller must not hold entrylock. */ lock_quick_lock(&table->lock); /* we have locked the hash table, the item can still be deleted. * because it could already have been reclaimed, but not yet set id=0. * This is because some lruhash routines have lazy deletion. * so, we must acquire a lock on the item to verify the id != 0. * also, with hash not changed, we are using the right slab. */ lock_rw_rdlock(&key->entry.lock); if(key->id == id && key->entry.hash == hash) { lru_touch(table, &key->entry); } lock_rw_unlock(&key->entry.lock); lock_quick_unlock(&table->lock); } /** see if rrset needs to be updated in the cache */ static int need_to_update_rrset(void* nd, void* cd, time_t timenow, int equal, int ns) { struct packed_rrset_data* newd = (struct packed_rrset_data*)nd; struct packed_rrset_data* cached = (struct packed_rrset_data*)cd; /* o store if rrset has been validated * everything better than bogus data * secure is preferred */ if( newd->security == sec_status_secure && cached->security != sec_status_secure) return 1; if( cached->security == sec_status_bogus && newd->security != sec_status_bogus && !equal) return 1; /* o if current RRset is more trustworthy - insert it */ if( newd->trust > cached->trust ) { /* if the cached rrset is bogus, and this one equal, * do not update the TTL - let it expire. */ if(equal && cached->ttl >= timenow && cached->security == sec_status_bogus) return 0; return 1; } /* o item in cache has expired */ if( cached->ttl < timenow ) return 1; /* o same trust, but different in data - insert it */ if( newd->trust == cached->trust && !equal ) { /* if this is type NS, do not 'stick' to owner that changes * the NS RRset, but use the old TTL for the new data, and * update to fetch the latest data. ttl is not expired, because * that check was before this one. */ if(ns) { size_t i; newd->ttl = cached->ttl; for(i=0; i<(newd->count+newd->rrsig_count); i++) if(newd->rr_ttl[i] > newd->ttl) newd->rr_ttl[i] = newd->ttl; } return 1; } return 0; } /** Update RRSet special key ID */ static void rrset_update_id(struct rrset_ref* ref, struct alloc_cache* alloc) { /* this may clear the cache and invalidate lock below */ uint64_t newid = alloc_get_id(alloc); /* obtain writelock */ lock_rw_wrlock(&ref->key->entry.lock); /* check if it was deleted in the meantime, if so, skip update */ if(ref->key->id == ref->id) { ref->key->id = newid; ref->id = newid; } lock_rw_unlock(&ref->key->entry.lock); } int rrset_cache_update(struct rrset_cache* r, struct rrset_ref* ref, struct alloc_cache* alloc, time_t timenow) { struct lruhash_entry* e; struct ub_packed_rrset_key* k = ref->key; hashvalue_type h = k->entry.hash; uint16_t rrset_type = ntohs(k->rk.type); int equal = 0; log_assert(ref->id != 0 && k->id != 0); log_assert(k->rk.dname != NULL); /* looks up item with a readlock - no editing! */ if((e=slabhash_lookup(&r->table, h, k, 0)) != 0) { /* return id and key as they will be used in the cache * since the lruhash_insert, if item already exists, deallocs * the passed key in favor of the already stored key. * because of the small gap (see below) this key ptr and id * may prove later to be already deleted, which is no problem * as it only makes a cache miss. */ ref->key = (struct ub_packed_rrset_key*)e->key; ref->id = ref->key->id; equal = rrsetdata_equal((struct packed_rrset_data*)k->entry. data, (struct packed_rrset_data*)e->data); if(!need_to_update_rrset(k->entry.data, e->data, timenow, equal, (rrset_type==LDNS_RR_TYPE_NS))) { /* cache is superior, return that value */ lock_rw_unlock(&e->lock); ub_packed_rrset_parsedelete(k, alloc); if(equal) return 2; return 1; } lock_rw_unlock(&e->lock); /* Go on and insert the passed item. * small gap here, where entry is not locked. * possibly entry is updated with something else. * we then overwrite that with our data. * this is just too bad, its cache anyway. */ /* use insert to update entry to manage lruhash * cache size values nicely. */ } log_assert(ref->key->id != 0); slabhash_insert(&r->table, h, &k->entry, k->entry.data, alloc); if(e) { /* For NSEC, NSEC3, DNAME, when rdata is updated, update * the ID number so that proofs in message cache are * invalidated */ if((rrset_type == LDNS_RR_TYPE_NSEC || rrset_type == LDNS_RR_TYPE_NSEC3 || rrset_type == LDNS_RR_TYPE_DNAME) && !equal) { rrset_update_id(ref, alloc); } return 1; } return 0; } void rrset_cache_update_wildcard(struct rrset_cache* rrset_cache, struct ub_packed_rrset_key* rrset, uint8_t* ce, size_t ce_len, struct alloc_cache* alloc, time_t timenow) { struct rrset_ref ref; uint8_t wc_dname[LDNS_MAX_DOMAINLEN+3]; rrset = packed_rrset_copy_alloc(rrset, alloc, timenow); if(!rrset) { log_err("malloc failure in rrset_cache_update_wildcard"); return; } /* ce has at least one label less then qname, we can therefore safely * add the wildcard label. */ wc_dname[0] = 1; wc_dname[1] = (uint8_t)'*'; memmove(wc_dname+2, ce, ce_len); free(rrset->rk.dname); rrset->rk.dname_len = ce_len + 2; rrset->rk.dname = (uint8_t*)memdup(wc_dname, rrset->rk.dname_len); if(!rrset->rk.dname) { alloc_special_release(alloc, rrset); log_err("memdup failure in rrset_cache_update_wildcard"); return; } rrset->entry.hash = rrset_key_hash(&rrset->rk); ref.key = rrset; ref.id = rrset->id; /* ignore ret: if it was in the cache, ref updated */ (void)rrset_cache_update(rrset_cache, &ref, alloc, timenow); } struct ub_packed_rrset_key* rrset_cache_lookup(struct rrset_cache* r, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint32_t flags, time_t timenow, int wr) { struct lruhash_entry* e; struct ub_packed_rrset_key key; key.entry.key = &key; key.entry.data = NULL; key.rk.dname = qname; key.rk.dname_len = qnamelen; key.rk.type = htons(qtype); key.rk.rrset_class = htons(qclass); key.rk.flags = flags; key.entry.hash = rrset_key_hash(&key.rk); if((e = slabhash_lookup(&r->table, key.entry.hash, &key, wr))) { /* check TTL */ struct packed_rrset_data* data = (struct packed_rrset_data*)e->data; if(timenow > data->ttl) { lock_rw_unlock(&e->lock); return NULL; } /* we're done */ return (struct ub_packed_rrset_key*)e->key; } return NULL; } int rrset_array_lock(struct rrset_ref* ref, size_t count, time_t timenow) { size_t i; for(i=0; i0 && ref[i].key == ref[i-1].key) continue; /* only lock items once */ lock_rw_rdlock(&ref[i].key->entry.lock); if(ref[i].id != ref[i].key->id || timenow > ((struct packed_rrset_data*)(ref[i].key->entry.data)) ->ttl) { /* failure! rollback our readlocks */ rrset_array_unlock(ref, i+1); return 0; } } return 1; } void rrset_array_unlock(struct rrset_ref* ref, size_t count) { size_t i; for(i=0; i0 && ref[i].key == ref[i-1].key) continue; /* only unlock items once */ lock_rw_unlock(&ref[i].key->entry.lock); } } void rrset_array_unlock_touch(struct rrset_cache* r, struct regional* scratch, struct rrset_ref* ref, size_t count) { hashvalue_type* h; size_t i; if(count > RR_COUNT_MAX || !(h = (hashvalue_type*)regional_alloc( scratch, sizeof(hashvalue_type)*count))) { log_warn("rrset LRU: memory allocation failed"); h = NULL; } else /* store hash values */ for(i=0; ientry.hash; /* unlock */ for(i=0; i0 && ref[i].key == ref[i-1].key) continue; /* only unlock items once */ lock_rw_unlock(&ref[i].key->entry.lock); } if(h) { /* LRU touch, with no rrset locks held */ for(i=0; i0 && ref[i].key == ref[i-1].key) continue; /* only touch items once */ rrset_cache_touch(r, ref[i].key, h[i], ref[i].id); } } } void rrset_update_sec_status(struct rrset_cache* r, struct ub_packed_rrset_key* rrset, time_t now) { struct packed_rrset_data* updata = (struct packed_rrset_data*)rrset->entry.data; struct lruhash_entry* e; struct packed_rrset_data* cachedata; /* hash it again to make sure it has a hash */ rrset->entry.hash = rrset_key_hash(&rrset->rk); e = slabhash_lookup(&r->table, rrset->entry.hash, rrset, 1); if(!e) return; /* not in the cache anymore */ cachedata = (struct packed_rrset_data*)e->data; if(!rrsetdata_equal(updata, cachedata)) { lock_rw_unlock(&e->lock); return; /* rrset has changed in the meantime */ } /* update the cached rrset */ if(updata->security > cachedata->security) { size_t i; if(updata->trust > cachedata->trust) cachedata->trust = updata->trust; cachedata->security = updata->security; /* for NS records only shorter TTLs, other types: update it */ if(ntohs(rrset->rk.type) != LDNS_RR_TYPE_NS || updata->ttl+now < cachedata->ttl || cachedata->ttl < now || updata->security == sec_status_bogus) { cachedata->ttl = updata->ttl + now; for(i=0; icount+cachedata->rrsig_count; i++) cachedata->rr_ttl[i] = updata->rr_ttl[i]+now; cachedata->ttl_add = now; } } lock_rw_unlock(&e->lock); } void rrset_check_sec_status(struct rrset_cache* r, struct ub_packed_rrset_key* rrset, time_t now) { struct packed_rrset_data* updata = (struct packed_rrset_data*)rrset->entry.data; struct lruhash_entry* e; struct packed_rrset_data* cachedata; /* hash it again to make sure it has a hash */ rrset->entry.hash = rrset_key_hash(&rrset->rk); e = slabhash_lookup(&r->table, rrset->entry.hash, rrset, 0); if(!e) return; /* not in the cache anymore */ cachedata = (struct packed_rrset_data*)e->data; if(now > cachedata->ttl || !rrsetdata_equal(updata, cachedata)) { lock_rw_unlock(&e->lock); return; /* expired, or rrset has changed in the meantime */ } if(cachedata->security > updata->security) { updata->security = cachedata->security; if(cachedata->security == sec_status_bogus) { size_t i; updata->ttl = cachedata->ttl - now; for(i=0; icount+cachedata->rrsig_count; i++) if(cachedata->rr_ttl[i] < now) updata->rr_ttl[i] = 0; else updata->rr_ttl[i] = cachedata->rr_ttl[i]-now; } if(cachedata->trust > updata->trust) updata->trust = cachedata->trust; } lock_rw_unlock(&e->lock); } void rrset_cache_remove(struct rrset_cache* r, uint8_t* nm, size_t nmlen, uint16_t type, uint16_t dclass, uint32_t flags) { struct ub_packed_rrset_key key; key.entry.key = &key; key.rk.dname = nm; key.rk.dname_len = nmlen; key.rk.rrset_class = htons(dclass); key.rk.type = htons(type); key.rk.flags = flags; key.entry.hash = rrset_key_hash(&key.rk); slabhash_remove(&r->table, key.entry.hash, &key); } unbound-1.13.1/services/cache/infra.c0000644000175000017500000007522614010434640017044 0ustar wouterwouter/* * services/cache/infra.c - infrastructure cache, server rtt and capabilities * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the infrastructure cache. */ #include "config.h" #include "sldns/rrdef.h" #include "sldns/str2wire.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "services/cache/infra.h" #include "util/storage/slabhash.h" #include "util/storage/lookup3.h" #include "util/data/dname.h" #include "util/log.h" #include "util/net_help.h" #include "util/config_file.h" #include "iterator/iterator.h" /** Timeout when only a single probe query per IP is allowed. */ #define PROBE_MAXRTO 12000 /* in msec */ /** number of timeouts for a type when the domain can be blocked ; * even if another type has completely rtt maxed it, the different type * can do this number of packets (until those all timeout too) */ #define TIMEOUT_COUNT_MAX 3 /** ratelimit value for delegation point */ int infra_dp_ratelimit = 0; /** ratelimit value for client ip addresses, * in queries per second. */ int infra_ip_ratelimit = 0; size_t infra_sizefunc(void* k, void* ATTR_UNUSED(d)) { struct infra_key* key = (struct infra_key*)k; return sizeof(*key) + sizeof(struct infra_data) + key->namelen + lock_get_mem(&key->entry.lock); } int infra_compfunc(void* key1, void* key2) { struct infra_key* k1 = (struct infra_key*)key1; struct infra_key* k2 = (struct infra_key*)key2; int r = sockaddr_cmp(&k1->addr, k1->addrlen, &k2->addr, k2->addrlen); if(r != 0) return r; if(k1->namelen != k2->namelen) { if(k1->namelen < k2->namelen) return -1; return 1; } return query_dname_compare(k1->zonename, k2->zonename); } void infra_delkeyfunc(void* k, void* ATTR_UNUSED(arg)) { struct infra_key* key = (struct infra_key*)k; if(!key) return; lock_rw_destroy(&key->entry.lock); free(key->zonename); free(key); } void infra_deldatafunc(void* d, void* ATTR_UNUSED(arg)) { struct infra_data* data = (struct infra_data*)d; free(data); } size_t rate_sizefunc(void* k, void* ATTR_UNUSED(d)) { struct rate_key* key = (struct rate_key*)k; return sizeof(*key) + sizeof(struct rate_data) + key->namelen + lock_get_mem(&key->entry.lock); } int rate_compfunc(void* key1, void* key2) { struct rate_key* k1 = (struct rate_key*)key1; struct rate_key* k2 = (struct rate_key*)key2; if(k1->namelen != k2->namelen) { if(k1->namelen < k2->namelen) return -1; return 1; } return query_dname_compare(k1->name, k2->name); } void rate_delkeyfunc(void* k, void* ATTR_UNUSED(arg)) { struct rate_key* key = (struct rate_key*)k; if(!key) return; lock_rw_destroy(&key->entry.lock); free(key->name); free(key); } void rate_deldatafunc(void* d, void* ATTR_UNUSED(arg)) { struct rate_data* data = (struct rate_data*)d; free(data); } /** find or create element in domainlimit tree */ static struct domain_limit_data* domain_limit_findcreate( struct infra_cache* infra, char* name) { uint8_t* nm; int labs; size_t nmlen; struct domain_limit_data* d; /* parse name */ nm = sldns_str2wire_dname(name, &nmlen); if(!nm) { log_err("could not parse %s", name); return NULL; } labs = dname_count_labels(nm); /* can we find it? */ d = (struct domain_limit_data*)name_tree_find(&infra->domain_limits, nm, nmlen, labs, LDNS_RR_CLASS_IN); if(d) { free(nm); return d; } /* create it */ d = (struct domain_limit_data*)calloc(1, sizeof(*d)); if(!d) { free(nm); return NULL; } d->node.node.key = &d->node; d->node.name = nm; d->node.len = nmlen; d->node.labs = labs; d->node.dclass = LDNS_RR_CLASS_IN; d->lim = -1; d->below = -1; if(!name_tree_insert(&infra->domain_limits, &d->node, nm, nmlen, labs, LDNS_RR_CLASS_IN)) { log_err("duplicate element in domainlimit tree"); free(nm); free(d); return NULL; } return d; } /** insert rate limit configuration into lookup tree */ static int infra_ratelimit_cfg_insert(struct infra_cache* infra, struct config_file* cfg) { struct config_str2list* p; struct domain_limit_data* d; for(p = cfg->ratelimit_for_domain; p; p = p->next) { d = domain_limit_findcreate(infra, p->str); if(!d) return 0; d->lim = atoi(p->str2); } for(p = cfg->ratelimit_below_domain; p; p = p->next) { d = domain_limit_findcreate(infra, p->str); if(!d) return 0; d->below = atoi(p->str2); } return 1; } /** setup domain limits tree (0 on failure) */ static int setup_domain_limits(struct infra_cache* infra, struct config_file* cfg) { name_tree_init(&infra->domain_limits); if(!infra_ratelimit_cfg_insert(infra, cfg)) { return 0; } name_tree_init_parents(&infra->domain_limits); return 1; } struct infra_cache* infra_create(struct config_file* cfg) { struct infra_cache* infra = (struct infra_cache*)calloc(1, sizeof(struct infra_cache)); size_t maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+ sizeof(struct infra_data)+INFRA_BYTES_NAME); infra->hosts = slabhash_create(cfg->infra_cache_slabs, INFRA_HOST_STARTSIZE, maxmem, &infra_sizefunc, &infra_compfunc, &infra_delkeyfunc, &infra_deldatafunc, NULL); if(!infra->hosts) { free(infra); return NULL; } infra->host_ttl = cfg->host_ttl; infra->infra_keep_probing = cfg->infra_keep_probing; infra_dp_ratelimit = cfg->ratelimit; infra->domain_rates = slabhash_create(cfg->ratelimit_slabs, INFRA_HOST_STARTSIZE, cfg->ratelimit_size, &rate_sizefunc, &rate_compfunc, &rate_delkeyfunc, &rate_deldatafunc, NULL); if(!infra->domain_rates) { infra_delete(infra); return NULL; } /* insert config data into ratelimits */ if(!setup_domain_limits(infra, cfg)) { infra_delete(infra); return NULL; } infra_ip_ratelimit = cfg->ip_ratelimit; infra->client_ip_rates = slabhash_create(cfg->ip_ratelimit_slabs, INFRA_HOST_STARTSIZE, cfg->ip_ratelimit_size, &ip_rate_sizefunc, &ip_rate_compfunc, &ip_rate_delkeyfunc, &ip_rate_deldatafunc, NULL); if(!infra->client_ip_rates) { infra_delete(infra); return NULL; } return infra; } /** delete domain_limit entries */ static void domain_limit_free(rbnode_type* n, void* ATTR_UNUSED(arg)) { if(n) { free(((struct domain_limit_data*)n)->node.name); free(n); } } void infra_delete(struct infra_cache* infra) { if(!infra) return; slabhash_delete(infra->hosts); slabhash_delete(infra->domain_rates); traverse_postorder(&infra->domain_limits, domain_limit_free, NULL); slabhash_delete(infra->client_ip_rates); free(infra); } struct infra_cache* infra_adjust(struct infra_cache* infra, struct config_file* cfg) { size_t maxmem; if(!infra) return infra_create(cfg); infra->host_ttl = cfg->host_ttl; infra->infra_keep_probing = cfg->infra_keep_probing; infra_dp_ratelimit = cfg->ratelimit; infra_ip_ratelimit = cfg->ip_ratelimit; maxmem = cfg->infra_cache_numhosts * (sizeof(struct infra_key)+ sizeof(struct infra_data)+INFRA_BYTES_NAME); /* divide cachesize by slabs and multiply by slabs, because if the * cachesize is not an even multiple of slabs, that is the resulting * size of the slabhash */ if(!slabhash_is_size(infra->hosts, maxmem, cfg->infra_cache_slabs) || !slabhash_is_size(infra->domain_rates, cfg->ratelimit_size, cfg->ratelimit_slabs) || !slabhash_is_size(infra->client_ip_rates, cfg->ip_ratelimit_size, cfg->ip_ratelimit_slabs)) { infra_delete(infra); infra = infra_create(cfg); } else { /* reapply domain limits */ traverse_postorder(&infra->domain_limits, domain_limit_free, NULL); if(!setup_domain_limits(infra, cfg)) { infra_delete(infra); return NULL; } } return infra; } /** calculate the hash value for a host key * set use_port to a non-0 number to use the port in * the hash calculation; 0 to ignore the port.*/ static hashvalue_type hash_addr(struct sockaddr_storage* addr, socklen_t addrlen, int use_port) { hashvalue_type h = 0xab; /* select the pieces to hash, some OS have changing data inside */ if(addr_is_ip6(addr, addrlen)) { struct sockaddr_in6* in6 = (struct sockaddr_in6*)addr; h = hashlittle(&in6->sin6_family, sizeof(in6->sin6_family), h); if(use_port){ h = hashlittle(&in6->sin6_port, sizeof(in6->sin6_port), h); } h = hashlittle(&in6->sin6_addr, INET6_SIZE, h); } else { struct sockaddr_in* in = (struct sockaddr_in*)addr; h = hashlittle(&in->sin_family, sizeof(in->sin_family), h); if(use_port){ h = hashlittle(&in->sin_port, sizeof(in->sin_port), h); } h = hashlittle(&in->sin_addr, INET_SIZE, h); } return h; } /** calculate infra hash for a key */ static hashvalue_type hash_infra(struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name) { return dname_query_hash(name, hash_addr(addr, addrlen, 1)); } /** lookup version that does not check host ttl (you check it) */ struct lruhash_entry* infra_lookup_nottl(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, int wr) { struct infra_key k; k.addrlen = addrlen; memcpy(&k.addr, addr, addrlen); k.namelen = namelen; k.zonename = name; k.entry.hash = hash_infra(addr, addrlen, name); k.entry.key = (void*)&k; k.entry.data = NULL; return slabhash_lookup(infra->hosts, k.entry.hash, &k, wr); } /** init the data elements */ static void data_entry_init(struct infra_cache* infra, struct lruhash_entry* e, time_t timenow) { struct infra_data* data = (struct infra_data*)e->data; data->ttl = timenow + infra->host_ttl; rtt_init(&data->rtt); data->edns_version = 0; data->edns_lame_known = 0; data->probedelay = 0; data->isdnsseclame = 0; data->rec_lame = 0; data->lame_type_A = 0; data->lame_other = 0; data->timeout_A = 0; data->timeout_AAAA = 0; data->timeout_other = 0; } /** * Create and init a new entry for a host * @param infra: infra structure with config parameters. * @param addr: host address. * @param addrlen: length of addr. * @param name: name of zone * @param namelen: length of name. * @param tm: time now. * @return: the new entry or NULL on malloc failure. */ static struct lruhash_entry* new_entry(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, time_t tm) { struct infra_data* data; struct infra_key* key = (struct infra_key*)malloc(sizeof(*key)); if(!key) return NULL; data = (struct infra_data*)malloc(sizeof(struct infra_data)); if(!data) { free(key); return NULL; } key->zonename = memdup(name, namelen); if(!key->zonename) { free(key); free(data); return NULL; } key->namelen = namelen; lock_rw_init(&key->entry.lock); key->entry.hash = hash_infra(addr, addrlen, name); key->entry.key = (void*)key; key->entry.data = (void*)data; key->addrlen = addrlen; memcpy(&key->addr, addr, addrlen); data_entry_init(infra, &key->entry, tm); return &key->entry; } int infra_host(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* nm, size_t nmlen, time_t timenow, int* edns_vs, uint8_t* edns_lame_known, int* to) { struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 0); struct infra_data* data; int wr = 0; if(e && ((struct infra_data*)e->data)->ttl < timenow) { /* it expired, try to reuse existing entry */ int old = ((struct infra_data*)e->data)->rtt.rto; time_t tprobe = ((struct infra_data*)e->data)->probedelay; uint8_t tA = ((struct infra_data*)e->data)->timeout_A; uint8_t tAAAA = ((struct infra_data*)e->data)->timeout_AAAA; uint8_t tother = ((struct infra_data*)e->data)->timeout_other; lock_rw_unlock(&e->lock); e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1); if(e) { /* if its still there we have a writelock, init */ /* re-initialise */ /* do not touch lameness, it may be valid still */ data_entry_init(infra, e, timenow); wr = 1; /* TOP_TIMEOUT remains on reuse */ if(old >= USEFUL_SERVER_TOP_TIMEOUT) { ((struct infra_data*)e->data)->rtt.rto = USEFUL_SERVER_TOP_TIMEOUT; ((struct infra_data*)e->data)->probedelay = tprobe; ((struct infra_data*)e->data)->timeout_A = tA; ((struct infra_data*)e->data)->timeout_AAAA = tAAAA; ((struct infra_data*)e->data)->timeout_other = tother; } } } if(!e) { /* insert new entry */ if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow))) return 0; data = (struct infra_data*)e->data; *edns_vs = data->edns_version; *edns_lame_known = data->edns_lame_known; *to = rtt_timeout(&data->rtt); slabhash_insert(infra->hosts, e->hash, e, data, NULL); return 1; } /* use existing entry */ data = (struct infra_data*)e->data; *edns_vs = data->edns_version; *edns_lame_known = data->edns_lame_known; *to = rtt_timeout(&data->rtt); if(*to >= PROBE_MAXRTO && (infra->infra_keep_probing || rtt_notimeout(&data->rtt)*4 <= *to)) { /* delay other queries, this is the probe query */ if(!wr) { lock_rw_unlock(&e->lock); e = infra_lookup_nottl(infra, addr,addrlen,nm,nmlen, 1); if(!e) { /* flushed from cache real fast, no use to allocate just for the probedelay */ return 1; } data = (struct infra_data*)e->data; } /* add 999 to round up the timeout value from msec to sec, * then add a whole second so it is certain that this probe * has timed out before the next is allowed */ data->probedelay = timenow + ((*to)+1999)/1000; } lock_rw_unlock(&e->lock); return 1; } int infra_set_lame(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* nm, size_t nmlen, time_t timenow, int dnsseclame, int reclame, uint16_t qtype) { struct infra_data* data; struct lruhash_entry* e; int needtoinsert = 0; e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1); if(!e) { /* insert it */ if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow))) { log_err("set_lame: malloc failure"); return 0; } needtoinsert = 1; } else if( ((struct infra_data*)e->data)->ttl < timenow) { /* expired, reuse existing entry */ data_entry_init(infra, e, timenow); } /* got an entry, now set the zone lame */ data = (struct infra_data*)e->data; /* merge data (if any) */ if(dnsseclame) data->isdnsseclame = 1; if(reclame) data->rec_lame = 1; if(!dnsseclame && !reclame && qtype == LDNS_RR_TYPE_A) data->lame_type_A = 1; if(!dnsseclame && !reclame && qtype != LDNS_RR_TYPE_A) data->lame_other = 1; /* done */ if(needtoinsert) slabhash_insert(infra->hosts, e->hash, e, e->data, NULL); else { lock_rw_unlock(&e->lock); } return 1; } void infra_update_tcp_works(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* nm, size_t nmlen) { struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1); struct infra_data* data; if(!e) return; /* doesn't exist */ data = (struct infra_data*)e->data; if(data->rtt.rto >= RTT_MAX_TIMEOUT) /* do not disqualify this server altogether, it is better * than nothing */ data->rtt.rto = RTT_MAX_TIMEOUT-1000; lock_rw_unlock(&e->lock); } int infra_rtt_update(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* nm, size_t nmlen, int qtype, int roundtrip, int orig_rtt, time_t timenow) { struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1); struct infra_data* data; int needtoinsert = 0, expired = 0; int rto = 1; time_t oldprobedelay = 0; if(!e) { if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow))) return 0; needtoinsert = 1; } else if(((struct infra_data*)e->data)->ttl < timenow) { oldprobedelay = ((struct infra_data*)e->data)->probedelay; data_entry_init(infra, e, timenow); expired = 1; } /* have an entry, update the rtt */ data = (struct infra_data*)e->data; if(roundtrip == -1) { if(needtoinsert || expired) { /* timeout on entry that has expired before the timer * keep old timeout from the function caller */ data->rtt.rto = orig_rtt; data->probedelay = oldprobedelay; } rtt_lost(&data->rtt, orig_rtt); if(qtype == LDNS_RR_TYPE_A) { if(data->timeout_A < TIMEOUT_COUNT_MAX) data->timeout_A++; } else if(qtype == LDNS_RR_TYPE_AAAA) { if(data->timeout_AAAA < TIMEOUT_COUNT_MAX) data->timeout_AAAA++; } else { if(data->timeout_other < TIMEOUT_COUNT_MAX) data->timeout_other++; } } else { /* if we got a reply, but the old timeout was above server * selection height, delete the timeout so the server is * fully available again */ if(rtt_unclamped(&data->rtt) >= USEFUL_SERVER_TOP_TIMEOUT) rtt_init(&data->rtt); rtt_update(&data->rtt, roundtrip); data->probedelay = 0; if(qtype == LDNS_RR_TYPE_A) data->timeout_A = 0; else if(qtype == LDNS_RR_TYPE_AAAA) data->timeout_AAAA = 0; else data->timeout_other = 0; } if(data->rtt.rto > 0) rto = data->rtt.rto; if(needtoinsert) slabhash_insert(infra->hosts, e->hash, e, e->data, NULL); else { lock_rw_unlock(&e->lock); } return rto; } long long infra_get_host_rto(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* nm, size_t nmlen, struct rtt_info* rtt, int* delay, time_t timenow, int* tA, int* tAAAA, int* tother) { struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 0); struct infra_data* data; long long ttl = -2; if(!e) return -1; data = (struct infra_data*)e->data; if(data->ttl >= timenow) { ttl = (long long)(data->ttl - timenow); memmove(rtt, &data->rtt, sizeof(*rtt)); if(timenow < data->probedelay) *delay = (int)(data->probedelay - timenow); else *delay = 0; } *tA = (int)data->timeout_A; *tAAAA = (int)data->timeout_AAAA; *tother = (int)data->timeout_other; lock_rw_unlock(&e->lock); return ttl; } int infra_edns_update(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* nm, size_t nmlen, int edns_version, time_t timenow) { struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, nm, nmlen, 1); struct infra_data* data; int needtoinsert = 0; if(!e) { if(!(e = new_entry(infra, addr, addrlen, nm, nmlen, timenow))) return 0; needtoinsert = 1; } else if(((struct infra_data*)e->data)->ttl < timenow) { data_entry_init(infra, e, timenow); } /* have an entry, update the rtt, and the ttl */ data = (struct infra_data*)e->data; /* do not update if noEDNS and stored is yesEDNS */ if(!(edns_version == -1 && (data->edns_version != -1 && data->edns_lame_known))) { data->edns_version = edns_version; data->edns_lame_known = 1; } if(needtoinsert) slabhash_insert(infra->hosts, e->hash, e, e->data, NULL); else { lock_rw_unlock(&e->lock); } return 1; } int infra_get_lame_rtt(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* name, size_t namelen, uint16_t qtype, int* lame, int* dnsseclame, int* reclame, int* rtt, time_t timenow) { struct infra_data* host; struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, name, namelen, 0); if(!e) return 0; host = (struct infra_data*)e->data; *rtt = rtt_unclamped(&host->rtt); if(host->rtt.rto >= PROBE_MAXRTO && timenow >= host->probedelay && infra->infra_keep_probing) { /* single probe, keep probing */ if(*rtt >= USEFUL_SERVER_TOP_TIMEOUT) *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; } else if(host->rtt.rto >= PROBE_MAXRTO && timenow < host->probedelay && rtt_notimeout(&host->rtt)*4 <= host->rtt.rto) { /* single probe for this domain, and we are not probing */ /* unless the query type allows a probe to happen */ if(qtype == LDNS_RR_TYPE_A) { if(host->timeout_A >= TIMEOUT_COUNT_MAX) *rtt = USEFUL_SERVER_TOP_TIMEOUT; else *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; } else if(qtype == LDNS_RR_TYPE_AAAA) { if(host->timeout_AAAA >= TIMEOUT_COUNT_MAX) *rtt = USEFUL_SERVER_TOP_TIMEOUT; else *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; } else { if(host->timeout_other >= TIMEOUT_COUNT_MAX) *rtt = USEFUL_SERVER_TOP_TIMEOUT; else *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; } } if(timenow > host->ttl) { /* expired entry */ /* see if this can be a re-probe of an unresponsive server */ /* minus 1000 because that is outside of the RTTBAND, so * blacklisted servers stay blacklisted if this is chosen */ if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT || infra->infra_keep_probing) { lock_rw_unlock(&e->lock); *rtt = USEFUL_SERVER_TOP_TIMEOUT-1000; *lame = 0; *dnsseclame = 0; *reclame = 0; return 1; } lock_rw_unlock(&e->lock); return 0; } /* check lameness first */ if(host->lame_type_A && qtype == LDNS_RR_TYPE_A) { lock_rw_unlock(&e->lock); *lame = 1; *dnsseclame = 0; *reclame = 0; return 1; } else if(host->lame_other && qtype != LDNS_RR_TYPE_A) { lock_rw_unlock(&e->lock); *lame = 1; *dnsseclame = 0; *reclame = 0; return 1; } else if(host->isdnsseclame) { lock_rw_unlock(&e->lock); *lame = 0; *dnsseclame = 1; *reclame = 0; return 1; } else if(host->rec_lame) { lock_rw_unlock(&e->lock); *lame = 0; *dnsseclame = 0; *reclame = 1; return 1; } /* no lameness for this type of query */ lock_rw_unlock(&e->lock); *lame = 0; *dnsseclame = 0; *reclame = 0; return 1; } int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, size_t namelen) { int labs = dname_count_labels(name); struct domain_limit_data* d = (struct domain_limit_data*) name_tree_lookup(&infra->domain_limits, name, namelen, labs, LDNS_RR_CLASS_IN); if(!d) return infra_dp_ratelimit; if(d->node.labs == labs && d->lim != -1) return d->lim; /* exact match */ /* find 'below match' */ if(d->node.labs == labs) d = (struct domain_limit_data*)d->node.parent; while(d) { if(d->below != -1) return d->below; d = (struct domain_limit_data*)d->node.parent; } return infra_dp_ratelimit; } size_t ip_rate_sizefunc(void* k, void* ATTR_UNUSED(d)) { struct ip_rate_key* key = (struct ip_rate_key*)k; return sizeof(*key) + sizeof(struct ip_rate_data) + lock_get_mem(&key->entry.lock); } int ip_rate_compfunc(void* key1, void* key2) { struct ip_rate_key* k1 = (struct ip_rate_key*)key1; struct ip_rate_key* k2 = (struct ip_rate_key*)key2; return sockaddr_cmp_addr(&k1->addr, k1->addrlen, &k2->addr, k2->addrlen); } void ip_rate_delkeyfunc(void* k, void* ATTR_UNUSED(arg)) { struct ip_rate_key* key = (struct ip_rate_key*)k; if(!key) return; lock_rw_destroy(&key->entry.lock); free(key); } /** find data item in array, for write access, caller unlocks */ static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra, uint8_t* name, size_t namelen, int wr) { struct rate_key key; hashvalue_type h = dname_query_hash(name, 0xab); memset(&key, 0, sizeof(key)); key.name = name; key.namelen = namelen; key.entry.hash = h; return slabhash_lookup(infra->domain_rates, h, &key, wr); } /** find data item in array for ip addresses */ static struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra, struct comm_reply* repinfo, int wr) { struct ip_rate_key key; hashvalue_type h = hash_addr(&(repinfo->addr), repinfo->addrlen, 0); memset(&key, 0, sizeof(key)); key.addr = repinfo->addr; key.addrlen = repinfo->addrlen; key.entry.hash = h; return slabhash_lookup(infra->client_ip_rates, h, &key, wr); } /** create rate data item for name, number 1 in now */ static void infra_create_ratedata(struct infra_cache* infra, uint8_t* name, size_t namelen, time_t timenow) { hashvalue_type h = dname_query_hash(name, 0xab); struct rate_key* k = (struct rate_key*)calloc(1, sizeof(*k)); struct rate_data* d = (struct rate_data*)calloc(1, sizeof(*d)); if(!k || !d) { free(k); free(d); return; /* alloc failure */ } k->namelen = namelen; k->name = memdup(name, namelen); if(!k->name) { free(k); free(d); return; /* alloc failure */ } lock_rw_init(&k->entry.lock); k->entry.hash = h; k->entry.key = k; k->entry.data = d; d->qps[0] = 1; d->timestamp[0] = timenow; slabhash_insert(infra->domain_rates, h, &k->entry, d, NULL); } /** create rate data item for ip address */ static void infra_ip_create_ratedata(struct infra_cache* infra, struct comm_reply* repinfo, time_t timenow) { hashvalue_type h = hash_addr(&(repinfo->addr), repinfo->addrlen, 0); struct ip_rate_key* k = (struct ip_rate_key*)calloc(1, sizeof(*k)); struct ip_rate_data* d = (struct ip_rate_data*)calloc(1, sizeof(*d)); if(!k || !d) { free(k); free(d); return; /* alloc failure */ } k->addr = repinfo->addr; k->addrlen = repinfo->addrlen; lock_rw_init(&k->entry.lock); k->entry.hash = h; k->entry.key = k; k->entry.data = d; d->qps[0] = 1; d->timestamp[0] = timenow; slabhash_insert(infra->client_ip_rates, h, &k->entry, d, NULL); } /** find the second and return its rate counter, if none, remove oldest */ static int* infra_rate_find_second(void* data, time_t t) { struct rate_data* d = (struct rate_data*)data; int i, oldest; for(i=0; itimestamp[i] == t) return &(d->qps[i]); } /* remove oldest timestamp, and insert it at t with 0 qps */ oldest = 0; for(i=0; itimestamp[i] < d->timestamp[oldest]) oldest = i; } d->timestamp[oldest] = t; d->qps[oldest] = 0; return &(d->qps[oldest]); } int infra_rate_max(void* data, time_t now) { struct rate_data* d = (struct rate_data*)data; int i, max = 0; for(i=0; itimestamp[i] <= RATE_WINDOW) { if(d->qps[i] > max) max = d->qps[i]; } } return max; } int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, size_t namelen, time_t timenow, struct query_info* qinfo, struct comm_reply* replylist) { int lim, max; struct lruhash_entry* entry; if(!infra_dp_ratelimit) return 1; /* not enabled */ /* find ratelimit */ lim = infra_find_ratelimit(infra, name, namelen); if(!lim) return 1; /* disabled for this domain */ /* find or insert ratedata */ entry = infra_find_ratedata(infra, name, namelen, 1); if(entry) { int premax = infra_rate_max(entry->data, timenow); int* cur = infra_rate_find_second(entry->data, timenow); (*cur)++; max = infra_rate_max(entry->data, timenow); lock_rw_unlock(&entry->lock); if(premax < lim && max >= lim) { char buf[257], qnm[257], ts[12], cs[12], ip[128]; dname_str(name, buf); dname_str(qinfo->qname, qnm); sldns_wire2str_type_buf(qinfo->qtype, ts, sizeof(ts)); sldns_wire2str_class_buf(qinfo->qclass, cs, sizeof(cs)); ip[0]=0; if(replylist) { addr_to_str((struct sockaddr_storage *)&replylist->addr, replylist->addrlen, ip, sizeof(ip)); verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s from %s", buf, lim, qnm, cs, ts, ip); } else { verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s", buf, lim, qnm, cs, ts); } } return (max < lim); } /* create */ infra_create_ratedata(infra, name, namelen, timenow); return (1 < lim); } void infra_ratelimit_dec(struct infra_cache* infra, uint8_t* name, size_t namelen, time_t timenow) { struct lruhash_entry* entry; int* cur; if(!infra_dp_ratelimit) return; /* not enabled */ entry = infra_find_ratedata(infra, name, namelen, 1); if(!entry) return; /* not cached */ cur = infra_rate_find_second(entry->data, timenow); if((*cur) > 0) (*cur)--; lock_rw_unlock(&entry->lock); } int infra_ratelimit_exceeded(struct infra_cache* infra, uint8_t* name, size_t namelen, time_t timenow) { struct lruhash_entry* entry; int lim, max; if(!infra_dp_ratelimit) return 0; /* not enabled */ /* find ratelimit */ lim = infra_find_ratelimit(infra, name, namelen); if(!lim) return 0; /* disabled for this domain */ /* find current rate */ entry = infra_find_ratedata(infra, name, namelen, 0); if(!entry) return 0; /* not cached */ max = infra_rate_max(entry->data, timenow); lock_rw_unlock(&entry->lock); return (max >= lim); } size_t infra_get_mem(struct infra_cache* infra) { size_t s = sizeof(*infra) + slabhash_get_mem(infra->hosts); if(infra->domain_rates) s += slabhash_get_mem(infra->domain_rates); if(infra->client_ip_rates) s += slabhash_get_mem(infra->client_ip_rates); /* ignore domain_limits because walk through tree is big */ return s; } int infra_ip_ratelimit_inc(struct infra_cache* infra, struct comm_reply* repinfo, time_t timenow, struct sldns_buffer* buffer) { int max; struct lruhash_entry* entry; /* not enabled */ if(!infra_ip_ratelimit) { return 1; } /* find or insert ratedata */ entry = infra_find_ip_ratedata(infra, repinfo, 1); if(entry) { int premax = infra_rate_max(entry->data, timenow); int* cur = infra_rate_find_second(entry->data, timenow); (*cur)++; max = infra_rate_max(entry->data, timenow); lock_rw_unlock(&entry->lock); if(premax < infra_ip_ratelimit && max >= infra_ip_ratelimit) { char client_ip[128], qnm[LDNS_MAX_DOMAINLEN+1+12+12]; addr_to_str((struct sockaddr_storage *)&repinfo->addr, repinfo->addrlen, client_ip, sizeof(client_ip)); qnm[0]=0; if(sldns_buffer_limit(buffer)>LDNS_HEADER_SIZE && LDNS_QDCOUNT(sldns_buffer_begin(buffer))!=0) { (void)sldns_wire2str_rrquestion_buf( sldns_buffer_at(buffer, LDNS_HEADER_SIZE), sldns_buffer_limit(buffer)-LDNS_HEADER_SIZE, qnm, sizeof(qnm)); if(strlen(qnm)>0 && qnm[strlen(qnm)-1]=='\n') qnm[strlen(qnm)-1] = 0; /*remove newline*/ if(strchr(qnm, '\t')) *strchr(qnm, '\t') = ' '; if(strchr(qnm, '\t')) *strchr(qnm, '\t') = ' '; verbose(VERB_OPS, "ip_ratelimit exceeded %s %d %s", client_ip, infra_ip_ratelimit, qnm); } else { verbose(VERB_OPS, "ip_ratelimit exceeded %s %d (no query name)", client_ip, infra_ip_ratelimit); } } return (max <= infra_ip_ratelimit); } /* create */ infra_ip_create_ratedata(infra, repinfo, timenow); return 1; } unbound-1.13.1/services/cache/rrset.h0000644000175000017500000002342414010434640017102 0ustar wouterwouter/* * services/cache/rrset.h - Resource record set cache. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the rrset cache. */ #ifndef SERVICES_CACHE_RRSET_H #define SERVICES_CACHE_RRSET_H #include "util/storage/lruhash.h" #include "util/storage/slabhash.h" #include "util/data/packed_rrset.h" struct config_file; struct alloc_cache; struct rrset_ref; struct regional; /** * The rrset cache * Thin wrapper around hashtable, like a typedef. */ struct rrset_cache { /** uses partitioned hash table */ struct slabhash table; }; /** * Create rrset cache * @param cfg: config settings or NULL for defaults. * @param alloc: initial default rrset key allocation. * @return: NULL on error. */ struct rrset_cache* rrset_cache_create(struct config_file* cfg, struct alloc_cache* alloc); /** * Delete rrset cache * @param r: rrset cache to delete. */ void rrset_cache_delete(struct rrset_cache* r); /** * Adjust settings of the cache to settings from the config file. * May purge the cache. May recreate the cache. * There may be no threading or use by other threads. * @param r: rrset cache to adjust (like realloc). * @param cfg: config settings or NULL for defaults. * @param alloc: initial default rrset key allocation. * @return 0 on error, or new rrset cache pointer on success. */ struct rrset_cache* rrset_cache_adjust(struct rrset_cache* r, struct config_file* cfg, struct alloc_cache* alloc); /** * Touch rrset, with given pointer and id. * Caller may not hold a lock on ANY rrset, this could give deadlock. * * This routine is faster than a hashtable lookup: * o no bin_lock is acquired. * o no walk through the bin-overflow-list. * o no comparison of the entry key to find it. * * @param r: rrset cache. * @param key: rrset key. Marked recently used (if it was not deleted * before the lock is acquired, in that case nothing happens). * @param hash: hash value of the item. Please read it from the key when * you have it locked. Used to find slab from slabhash. * @param id: used to check that the item is unchanged and not deleted. */ void rrset_cache_touch(struct rrset_cache* r, struct ub_packed_rrset_key* key, hashvalue_type hash, rrset_id_type id); /** * Update an rrset in the rrset cache. Stores the information for later use. * Will lookup if the rrset is in the cache and perform an update if necessary. * If the item was present, and superior, references are returned to that. * The passed item is then deallocated with rrset_parsedelete. * * A superior rrset is: * o rrset with better trust value. * o same trust value, different rdata, newly passed rrset is inserted. * If rdata is the same, TTL in the cache is updated. * * @param r: the rrset cache. * @param ref: reference (ptr and id) to the rrset. Pass reference setup for * the new rrset. The reference may be changed if the cached rrset is * superior. * Before calling the rrset is presumed newly allocated and changeable. * Afer calling you do not hold a lock, and the rrset is inserted in * the hashtable so you need a lock to change it. * @param alloc: how to allocate (and deallocate) the special rrset key. * @param timenow: current time (to see if ttl in cache is expired). * @return: true if the passed reference is updated, false if it is unchanged. * 0: reference unchanged, inserted in cache. * 1: reference updated, item is inserted in cache. * 2: reference updated, item in cache is considered superior. * also the rdata is equal (but other parameters in cache are superior). */ int rrset_cache_update(struct rrset_cache* r, struct rrset_ref* ref, struct alloc_cache* alloc, time_t timenow); /** * Update or add an rrset in the rrset cache using a wildcard dname. * Generates wildcard dname by prepending the wildcard label to the closest * encloser. Will lookup if the rrset is in the cache and perform an update if * necessary. * * @param rrset_cache: the rrset cache. * @param rrset: which rrset to cache as wildcard. This rrset is left * untouched. * @param ce: the closest encloser, will be uses to generate the wildcard dname. * @param ce_len: the closest encloser lenght. * @param alloc: how to allocate (and deallocate) the special rrset key. * @param timenow: current time (to see if ttl in cache is expired). */ void rrset_cache_update_wildcard(struct rrset_cache* rrset_cache, struct ub_packed_rrset_key* rrset, uint8_t* ce, size_t ce_len, struct alloc_cache* alloc, time_t timenow); /** * Lookup rrset. You obtain read/write lock. You must unlock before lookup * anything of else. * @param r: the rrset cache. * @param qname: name of rrset to lookup. * @param qnamelen: length of name of rrset to lookup. * @param qtype: type of rrset to lookup (host order). * @param qclass: class of rrset to lookup (host order). * @param flags: rrset flags, or 0. * @param timenow: used to compare with TTL. * @param wr: set true to get writelock. * @return packed rrset key pointer. Remember to unlock the key.entry.lock. * or NULL if could not be found or it was timed out. */ struct ub_packed_rrset_key* rrset_cache_lookup(struct rrset_cache* r, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint32_t flags, time_t timenow, int wr); /** * Obtain readlock on a (sorted) list of rrset references. * Checks TTLs and IDs of the rrsets and rollbacks locking if not Ok. * @param ref: array of rrset references (key pointer and ID value). * duplicate references are allowed and handled. * @param count: size of array. * @param timenow: used to compare with TTL. * @return true on success, false on a failure, which can be that some * RRsets have timed out, or that they do not exist any more, the * RRsets have been purged from the cache. * If true, you hold readlocks on all the ref items. */ int rrset_array_lock(struct rrset_ref* ref, size_t count, time_t timenow); /** * Unlock array (sorted) of rrset references. * @param ref: array of rrset references (key pointer and ID value). * duplicate references are allowed and handled. * @param count: size of array. */ void rrset_array_unlock(struct rrset_ref* ref, size_t count); /** * Unlock array (sorted) of rrset references and at the same time * touch LRU on the rrsets. It needs the scratch region for temporary * storage as it uses the initial locks to obtain hash values. * @param r: the rrset cache. In this cache LRU is updated. * @param scratch: region for temporary storage of hash values. * if memory allocation fails, the lru touch fails silently, * but locks are released. memory errors are logged. * @param ref: array of rrset references (key pointer and ID value). * duplicate references are allowed and handled. * @param count: size of array. */ void rrset_array_unlock_touch(struct rrset_cache* r, struct regional* scratch, struct rrset_ref* ref, size_t count); /** * Update security status of an rrset. Looks up the rrset. * If found, checks if rdata is equal. * If so, it will update the security, trust and rrset-ttl values. * The values are only updated if security is increased (towards secure). * @param r: the rrset cache. * @param rrset: which rrset to attempt to update. This rrset is left * untouched. The rrset in the cache is updated in-place. * @param now: current time. */ void rrset_update_sec_status(struct rrset_cache* r, struct ub_packed_rrset_key* rrset, time_t now); /** * Looks up security status of an rrset. Looks up the rrset. * If found, checks if rdata is equal, and entry did not expire. * If so, it will update the security, trust and rrset-ttl values. * @param r: the rrset cache. * @param rrset: This rrset may change security status due to the cache. * But its status will only improve, towards secure. * @param now: current time. */ void rrset_check_sec_status(struct rrset_cache* r, struct ub_packed_rrset_key* rrset, time_t now); /** * Remove an rrset from the cache, by name and type and flags * @param r: rrset cache * @param nm: name of rrset * @param nmlen: length of name * @param type: type of rrset * @param dclass: class of rrset, host order * @param flags: flags of rrset, host order */ void rrset_cache_remove(struct rrset_cache* r, uint8_t* nm, size_t nmlen, uint16_t type, uint16_t dclass, uint32_t flags); /** mark rrset to be deleted, set id=0 */ void rrset_markdel(void* key); #endif /* SERVICES_CACHE_RRSET_H */ unbound-1.13.1/services/outside_network.c0000644000175000017500000032012314010434640020114 0ustar wouterwouter/* * services/outside_network.c - implement sending of queries and wait answer. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file has functions to send queries to authoritative servers and * wait for the pending answer events. */ #include "config.h" #include #ifdef HAVE_SYS_TYPES_H # include #endif #include #include "services/outside_network.h" #include "services/listen_dnsport.h" #include "services/cache/infra.h" #include "iterator/iterator.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/msgencode.h" #include "util/data/dname.h" #include "util/netevent.h" #include "util/log.h" #include "util/net_help.h" #include "util/random.h" #include "util/fptr_wlist.h" #include "util/edns.h" #include "sldns/sbuffer.h" #include "dnstap/dnstap.h" #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_X509_VERIFY_PARAM_SET1_HOST #include #endif #ifdef HAVE_NETDB_H #include #endif #include /** number of times to retry making a random ID that is unique. */ #define MAX_ID_RETRY 1000 /** number of times to retry finding interface, port that can be opened. */ #define MAX_PORT_RETRY 10000 /** number of retries on outgoing UDP queries */ #define OUTBOUND_UDP_RETRY 1 /** initiate TCP transaction for serviced query */ static void serviced_tcp_initiate(struct serviced_query* sq, sldns_buffer* buff); /** with a fd available, randomize and send UDP */ static int randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout); /** remove waiting tcp from the outnet waiting list */ static void waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w); /** remove reused element from tree and lru list */ static void reuse_tcp_remove_tree_list(struct outside_network* outnet, struct reuse_tcp* reuse); int pending_cmp(const void* key1, const void* key2) { struct pending *p1 = (struct pending*)key1; struct pending *p2 = (struct pending*)key2; if(p1->id < p2->id) return -1; if(p1->id > p2->id) return 1; log_assert(p1->id == p2->id); return sockaddr_cmp(&p1->addr, p1->addrlen, &p2->addr, p2->addrlen); } int serviced_cmp(const void* key1, const void* key2) { struct serviced_query* q1 = (struct serviced_query*)key1; struct serviced_query* q2 = (struct serviced_query*)key2; int r; if(q1->qbuflen < q2->qbuflen) return -1; if(q1->qbuflen > q2->qbuflen) return 1; log_assert(q1->qbuflen == q2->qbuflen); log_assert(q1->qbuflen >= 15 /* 10 header, root, type, class */); /* alternate casing of qname is still the same query */ if((r = memcmp(q1->qbuf, q2->qbuf, 10)) != 0) return r; if((r = memcmp(q1->qbuf+q1->qbuflen-4, q2->qbuf+q2->qbuflen-4, 4)) != 0) return r; if(q1->dnssec != q2->dnssec) { if(q1->dnssec < q2->dnssec) return -1; return 1; } if((r = query_dname_compare(q1->qbuf+10, q2->qbuf+10)) != 0) return r; if((r = edns_opt_list_compare(q1->opt_list, q2->opt_list)) != 0) return r; return sockaddr_cmp(&q1->addr, q1->addrlen, &q2->addr, q2->addrlen); } /** compare if the reuse element has the same address, port and same ssl-is * used-for-it characteristic */ static int reuse_cmp_addrportssl(const void* key1, const void* key2) { struct reuse_tcp* r1 = (struct reuse_tcp*)key1; struct reuse_tcp* r2 = (struct reuse_tcp*)key2; int r; /* compare address and port */ r = sockaddr_cmp(&r1->addr, r1->addrlen, &r2->addr, r2->addrlen); if(r != 0) return r; /* compare if SSL-enabled */ if(r1->is_ssl && !r2->is_ssl) return 1; if(!r1->is_ssl && r2->is_ssl) return -1; return 0; } int reuse_cmp(const void* key1, const void* key2) { int r; r = reuse_cmp_addrportssl(key1, key2); if(r != 0) return r; /* compare ptr value */ if(key1 < key2) return -1; if(key1 > key2) return 1; return 0; } int reuse_id_cmp(const void* key1, const void* key2) { struct waiting_tcp* w1 = (struct waiting_tcp*)key1; struct waiting_tcp* w2 = (struct waiting_tcp*)key2; if(w1->id < w2->id) return -1; if(w1->id > w2->id) return 1; return 0; } /** delete waiting_tcp entry. Does not unlink from waiting list. * @param w: to delete. */ static void waiting_tcp_delete(struct waiting_tcp* w) { if(!w) return; if(w->timer) comm_timer_delete(w->timer); free(w); } /** * Pick random outgoing-interface of that family, and bind it. * port set to 0 so OS picks a port number for us. * if it is the ANY address, do not bind. * @param w: tcp structure with destination address. * @param s: socket fd. * @return false on error, socket closed. */ static int pick_outgoing_tcp(struct waiting_tcp* w, int s) { struct port_if* pi = NULL; int num; #ifdef INET6 if(addr_is_ip6(&w->addr, w->addrlen)) num = w->outnet->num_ip6; else #endif num = w->outnet->num_ip4; if(num == 0) { log_err("no TCP outgoing interfaces of family"); log_addr(VERB_OPS, "for addr", &w->addr, w->addrlen); sock_close(s); return 0; } #ifdef INET6 if(addr_is_ip6(&w->addr, w->addrlen)) pi = &w->outnet->ip6_ifs[ub_random_max(w->outnet->rnd, num)]; else #endif pi = &w->outnet->ip4_ifs[ub_random_max(w->outnet->rnd, num)]; log_assert(pi); if(addr_is_any(&pi->addr, pi->addrlen)) { /* binding to the ANY interface is for listening sockets */ return 1; } /* set port to 0 */ if(addr_is_ip6(&pi->addr, pi->addrlen)) ((struct sockaddr_in6*)&pi->addr)->sin6_port = 0; else ((struct sockaddr_in*)&pi->addr)->sin_port = 0; if(bind(s, (struct sockaddr*)&pi->addr, pi->addrlen) != 0) { log_err("outgoing tcp: bind: %s", sock_strerror(errno)); sock_close(s); return 0; } log_addr(VERB_ALGO, "tcp bound to src", &pi->addr, pi->addrlen); return 1; } /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp) { int s; int af; char* err; #ifdef SO_REUSEADDR int on = 1; #endif #ifdef INET6 if(addr_is_ip6(addr, addrlen)){ s = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); af = AF_INET6; } else { #else { #endif af = AF_INET; s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); } if(s == -1) { log_err_addr("outgoing tcp: socket", sock_strerror(errno), addr, addrlen); return -1; } #ifdef SO_REUSEADDR if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, (socklen_t)sizeof(on)) < 0) { verbose(VERB_ALGO, "outgoing tcp:" " setsockopt(.. SO_REUSEADDR ..) failed"); } #endif err = set_ip_dscp(s, af, dscp); if(err != NULL) { verbose(VERB_ALGO, "outgoing tcp:" "error setting IP DiffServ codepoint on socket"); } if(tcp_mss > 0) { #if defined(IPPROTO_TCP) && defined(TCP_MAXSEG) if(setsockopt(s, IPPROTO_TCP, TCP_MAXSEG, (void*)&tcp_mss, (socklen_t)sizeof(tcp_mss)) < 0) { verbose(VERB_ALGO, "outgoing tcp:" " setsockopt(.. TCP_MAXSEG ..) failed"); } #else verbose(VERB_ALGO, "outgoing tcp:" " setsockopt(TCP_MAXSEG) unsupported"); #endif /* defined(IPPROTO_TCP) && defined(TCP_MAXSEG) */ } return s; } /** connect tcp connection to addr, 0 on failure */ int outnet_tcp_connect(int s, struct sockaddr_storage* addr, socklen_t addrlen) { if(connect(s, (struct sockaddr*)addr, addrlen) == -1) { #ifndef USE_WINSOCK #ifdef EINPROGRESS if(errno != EINPROGRESS) { #endif if(tcp_connect_errno_needs_log( (struct sockaddr*)addr, addrlen)) log_err_addr("outgoing tcp: connect", strerror(errno), addr, addrlen); close(s); return 0; #ifdef EINPROGRESS } #endif #else /* USE_WINSOCK */ if(WSAGetLastError() != WSAEINPROGRESS && WSAGetLastError() != WSAEWOULDBLOCK) { closesocket(s); return 0; } #endif } return 1; } /** log reuse item addr and ptr with message */ static void log_reuse_tcp(enum verbosity_value v, const char* msg, struct reuse_tcp* reuse) { uint16_t port; char addrbuf[128]; if(verbosity < v) return; addr_to_str(&reuse->addr, reuse->addrlen, addrbuf, sizeof(addrbuf)); port = ntohs(((struct sockaddr_in*)&reuse->addr)->sin_port); verbose(v, "%s %s#%u fd %d", msg, addrbuf, (unsigned)port, reuse->pending->c->fd); } /** pop the first element from the writewait list */ static struct waiting_tcp* reuse_write_wait_pop(struct reuse_tcp* reuse) { struct waiting_tcp* w = reuse->write_wait_first; if(!w) return NULL; log_assert(w->write_wait_queued); log_assert(!w->write_wait_prev); reuse->write_wait_first = w->write_wait_next; if(w->write_wait_next) w->write_wait_next->write_wait_prev = NULL; else reuse->write_wait_last = NULL; w->write_wait_queued = 0; return w; } /** remove the element from the writewait list */ static void reuse_write_wait_remove(struct reuse_tcp* reuse, struct waiting_tcp* w) { if(!w) return; if(!w->write_wait_queued) return; if(w->write_wait_prev) w->write_wait_prev->write_wait_next = w->write_wait_next; else reuse->write_wait_first = w->write_wait_next; if(w->write_wait_next) w->write_wait_next->write_wait_prev = w->write_wait_prev; else reuse->write_wait_last = w->write_wait_prev; w->write_wait_queued = 0; } /** push the element after the last on the writewait list */ static void reuse_write_wait_push_back(struct reuse_tcp* reuse, struct waiting_tcp* w) { if(!w) return; log_assert(!w->write_wait_queued); if(reuse->write_wait_last) { reuse->write_wait_last->write_wait_next = w; w->write_wait_prev = reuse->write_wait_last; } else { reuse->write_wait_first = w; } reuse->write_wait_last = w; w->write_wait_queued = 1; } /** insert element in tree by id */ void reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w) { log_assert(w->id_node.key == NULL); w->id_node.key = w; rbtree_insert(&reuse->tree_by_id, &w->id_node); } /** find element in tree by id */ struct waiting_tcp* reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id) { struct waiting_tcp key_w; rbnode_type* n; memset(&key_w, 0, sizeof(key_w)); key_w.id_node.key = &key_w; key_w.id = id; n = rbtree_search(&reuse->tree_by_id, &key_w); if(!n) return NULL; return (struct waiting_tcp*)n->key; } /** return ID value of rbnode in tree_by_id */ static uint16_t tree_by_id_get_id(rbnode_type* node) { struct waiting_tcp* w = (struct waiting_tcp*)node->key; return w->id; } /** insert into reuse tcp tree and LRU, false on failure (duplicate) */ static int reuse_tcp_insert(struct outside_network* outnet, struct pending_tcp* pend_tcp) { log_reuse_tcp(VERB_CLIENT, "reuse_tcp_insert", &pend_tcp->reuse); if(pend_tcp->reuse.item_on_lru_list) { if(!pend_tcp->reuse.node.key) log_err("internal error: reuse_tcp_insert: on lru list without key"); return 1; } pend_tcp->reuse.node.key = &pend_tcp->reuse; pend_tcp->reuse.pending = pend_tcp; if(!rbtree_insert(&outnet->tcp_reuse, &pend_tcp->reuse.node)) { /* this is a duplicate connection, close this one */ verbose(VERB_CLIENT, "reuse_tcp_insert: duplicate connection"); pend_tcp->reuse.node.key = NULL; return 0; } /* insert into LRU, first is newest */ pend_tcp->reuse.lru_prev = NULL; if(outnet->tcp_reuse_first) { pend_tcp->reuse.lru_next = outnet->tcp_reuse_first; outnet->tcp_reuse_first->lru_prev = &pend_tcp->reuse; } else { pend_tcp->reuse.lru_next = NULL; outnet->tcp_reuse_last = &pend_tcp->reuse; } outnet->tcp_reuse_first = &pend_tcp->reuse; pend_tcp->reuse.item_on_lru_list = 1; return 1; } /** find reuse tcp stream to destination for query, or NULL if none */ static struct reuse_tcp* reuse_tcp_find(struct outside_network* outnet, struct sockaddr_storage* addr, socklen_t addrlen, int use_ssl) { struct waiting_tcp key_w; struct pending_tcp key_p; struct comm_point c; rbnode_type* result = NULL, *prev; verbose(VERB_CLIENT, "reuse_tcp_find"); memset(&key_w, 0, sizeof(key_w)); memset(&key_p, 0, sizeof(key_p)); memset(&c, 0, sizeof(c)); key_p.query = &key_w; key_p.c = &c; key_p.reuse.pending = &key_p; key_p.reuse.node.key = &key_p.reuse; if(use_ssl) key_p.reuse.is_ssl = 1; if(addrlen > (socklen_t)sizeof(key_p.reuse.addr)) return NULL; memmove(&key_p.reuse.addr, addr, addrlen); key_p.reuse.addrlen = addrlen; verbose(VERB_CLIENT, "reuse_tcp_find: num reuse streams %u", (unsigned)outnet->tcp_reuse.count); if(outnet->tcp_reuse.root == NULL || outnet->tcp_reuse.root == RBTREE_NULL) return NULL; if(rbtree_find_less_equal(&outnet->tcp_reuse, &key_p.reuse, &result)) { /* exact match */ /* but the key is on stack, and ptr is compared, impossible */ log_assert(&key_p.reuse != (struct reuse_tcp*)result); log_assert(&key_p != ((struct reuse_tcp*)result)->pending); } /* not found, return null */ if(!result || result == RBTREE_NULL) return NULL; verbose(VERB_CLIENT, "reuse_tcp_find check inexact match"); /* inexact match, find one of possibly several connections to the * same destination address, with the correct port, ssl, and * also less than max number of open queries, or else, fail to open * a new one */ /* rewind to start of sequence of same address,port,ssl */ prev = rbtree_previous(result); while(prev && prev != RBTREE_NULL && reuse_cmp_addrportssl(prev->key, &key_p.reuse) == 0) { result = prev; prev = rbtree_previous(result); } /* loop to find first one that has correct characteristics */ while(result && result != RBTREE_NULL && reuse_cmp_addrportssl(result->key, &key_p.reuse) == 0) { if(((struct reuse_tcp*)result)->tree_by_id.count < MAX_REUSE_TCP_QUERIES) { /* same address, port, ssl-yes-or-no, and has * space for another query */ return (struct reuse_tcp*)result; } result = rbtree_next(result); } return NULL; } /** use the buffer to setup writing the query */ static void outnet_tcp_take_query_setup(int s, struct pending_tcp* pend, struct waiting_tcp* w) { struct timeval tv; verbose(VERB_CLIENT, "outnet_tcp_take_query_setup: setup packet to write " "len %d timeout %d msec", (int)w->pkt_len, w->timeout); pend->c->tcp_write_pkt = w->pkt; pend->c->tcp_write_pkt_len = w->pkt_len; pend->c->tcp_write_and_read = 1; pend->c->tcp_write_byte_count = 0; pend->c->tcp_is_reading = 0; comm_point_start_listening(pend->c, s, -1); /* set timer on the waiting_tcp entry, this is the write timeout * for the written packet. The timer on pend->c is the timer * for when there is no written packet and we have readtimeouts */ #ifndef S_SPLINT_S tv.tv_sec = w->timeout/1000; tv.tv_usec = (w->timeout%1000)*1000; #endif /* if the waiting_tcp was previously waiting for a buffer in the * outside_network.tcpwaitlist, then the timer is reset now that * we start writing it */ comm_timer_set(w->timer, &tv); } /** use next free buffer to service a tcp query */ static int outnet_tcp_take_into_use(struct waiting_tcp* w) { struct pending_tcp* pend = w->outnet->tcp_free; int s; log_assert(pend); log_assert(w->pkt); log_assert(w->pkt_len > 0); log_assert(w->addrlen > 0); pend->c->tcp_do_toggle_rw = 0; pend->c->tcp_do_close = 0; /* open socket */ s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss, w->outnet->ip_dscp); if(s == -1) return 0; if(!pick_outgoing_tcp(w, s)) return 0; fd_set_nonblock(s); #ifdef USE_OSX_MSG_FASTOPEN /* API for fast open is different here. We use a connectx() function and then writes can happen as normal even using SSL.*/ /* connectx requires that the len be set in the sockaddr struct*/ struct sockaddr_in *addr_in = (struct sockaddr_in *)&w->addr; addr_in->sin_len = w->addrlen; sa_endpoints_t endpoints; endpoints.sae_srcif = 0; endpoints.sae_srcaddr = NULL; endpoints.sae_srcaddrlen = 0; endpoints.sae_dstaddr = (struct sockaddr *)&w->addr; endpoints.sae_dstaddrlen = w->addrlen; if (connectx(s, &endpoints, SAE_ASSOCID_ANY, CONNECT_DATA_IDEMPOTENT | CONNECT_RESUME_ON_READ_WRITE, NULL, 0, NULL, NULL) == -1) { /* if fails, failover to connect for OSX 10.10 */ #ifdef EINPROGRESS if(errno != EINPROGRESS) { #else if(1) { #endif if(connect(s, (struct sockaddr*)&w->addr, w->addrlen) == -1) { #else /* USE_OSX_MSG_FASTOPEN*/ #ifdef USE_MSG_FASTOPEN pend->c->tcp_do_fastopen = 1; /* Only do TFO for TCP in which case no connect() is required here. Don't combine client TFO with SSL, since OpenSSL can't currently support doing a handshake on fd that already isn't connected*/ if (w->outnet->sslctx && w->ssl_upstream) { if(connect(s, (struct sockaddr*)&w->addr, w->addrlen) == -1) { #else /* USE_MSG_FASTOPEN*/ if(connect(s, (struct sockaddr*)&w->addr, w->addrlen) == -1) { #endif /* USE_MSG_FASTOPEN*/ #endif /* USE_OSX_MSG_FASTOPEN*/ #ifndef USE_WINSOCK #ifdef EINPROGRESS if(errno != EINPROGRESS) { #else if(1) { #endif if(tcp_connect_errno_needs_log( (struct sockaddr*)&w->addr, w->addrlen)) log_err_addr("outgoing tcp: connect", strerror(errno), &w->addr, w->addrlen); close(s); #else /* USE_WINSOCK */ if(WSAGetLastError() != WSAEINPROGRESS && WSAGetLastError() != WSAEWOULDBLOCK) { closesocket(s); #endif return 0; } } #ifdef USE_MSG_FASTOPEN } #endif /* USE_MSG_FASTOPEN */ #ifdef USE_OSX_MSG_FASTOPEN } } #endif /* USE_OSX_MSG_FASTOPEN */ if(w->outnet->sslctx && w->ssl_upstream) { pend->c->ssl = outgoing_ssl_fd(w->outnet->sslctx, s); if(!pend->c->ssl) { pend->c->fd = s; comm_point_close(pend->c); return 0; } verbose(VERB_ALGO, "the query is using TLS encryption, for %s", (w->tls_auth_name?w->tls_auth_name:"an unauthenticated connection")); #ifdef USE_WINSOCK comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl); #endif pend->c->ssl_shake_state = comm_ssl_shake_write; if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name, w->outnet->tls_use_sni)) { pend->c->fd = s; #ifdef HAVE_SSL SSL_free(pend->c->ssl); #endif pend->c->ssl = NULL; comm_point_close(pend->c); return 0; } } w->next_waiting = (void*)pend; w->outnet->num_tcp_outgoing++; w->outnet->tcp_free = pend->next_free; pend->next_free = NULL; pend->query = w; pend->reuse.outnet = w->outnet; pend->c->repinfo.addrlen = w->addrlen; pend->c->tcp_more_read_again = &pend->reuse.cp_more_read_again; pend->c->tcp_more_write_again = &pend->reuse.cp_more_write_again; pend->reuse.cp_more_read_again = 0; pend->reuse.cp_more_write_again = 0; memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen); pend->reuse.pending = pend; /* Remove from tree in case the is_ssl will be different and causes the * identity of the reuse_tcp to change; could result in nodes not being * deleted from the tree (because the new identity does not match the * previous node) but their ->key would be changed to NULL. */ if(pend->reuse.node.key) reuse_tcp_remove_tree_list(w->outnet, &pend->reuse); if(pend->c->ssl) pend->reuse.is_ssl = 1; else pend->reuse.is_ssl = 0; /* insert in reuse by address tree if not already inserted there */ (void)reuse_tcp_insert(w->outnet, pend); reuse_tree_by_id_insert(&pend->reuse, w); outnet_tcp_take_query_setup(s, pend, w); return 1; } /** Touch the lru of a reuse_tcp element, it is in use. * This moves it to the front of the list, where it is not likely to * be closed. Items at the back of the list are closed to make space. */ static void reuse_tcp_lru_touch(struct outside_network* outnet, struct reuse_tcp* reuse) { if(!reuse->item_on_lru_list) { log_err("internal error: we need to touch the lru_list but item not in list"); return; /* not on the list, no lru to modify */ } if(!reuse->lru_prev) return; /* already first in the list */ /* remove at current position */ /* since it is not first, there is a previous element */ reuse->lru_prev->lru_next = reuse->lru_next; if(reuse->lru_next) reuse->lru_next->lru_prev = reuse->lru_prev; else outnet->tcp_reuse_last = reuse->lru_prev; /* insert at the front */ reuse->lru_prev = NULL; reuse->lru_next = outnet->tcp_reuse_first; /* since it is not first, it is not the only element and * lru_next is thus not NULL and thus reuse is now not the last in * the list, so outnet->tcp_reuse_last does not need to be modified */ outnet->tcp_reuse_first = reuse; } /** call callback on waiting_tcp, if not NULL */ static void waiting_tcp_callback(struct waiting_tcp* w, struct comm_point* c, int error, struct comm_reply* reply_info) { if(w->cb) { fptr_ok(fptr_whitelist_pending_tcp(w->cb)); (void)(*w->cb)(c, w->cb_arg, error, reply_info); } } /** see if buffers can be used to service TCP queries */ static void use_free_buffer(struct outside_network* outnet) { struct waiting_tcp* w; while(outnet->tcp_free && outnet->tcp_wait_first && !outnet->want_to_quit) { struct reuse_tcp* reuse = NULL; w = outnet->tcp_wait_first; outnet->tcp_wait_first = w->next_waiting; if(outnet->tcp_wait_last == w) outnet->tcp_wait_last = NULL; w->on_tcp_waiting_list = 0; reuse = reuse_tcp_find(outnet, &w->addr, w->addrlen, w->ssl_upstream); if(reuse) { log_reuse_tcp(VERB_CLIENT, "use free buffer for waiting tcp: " "found reuse", reuse); reuse_tcp_lru_touch(outnet, reuse); comm_timer_disable(w->timer); w->next_waiting = (void*)reuse->pending; reuse_tree_by_id_insert(reuse, w); if(reuse->pending->query) { /* on the write wait list */ reuse_write_wait_push_back(reuse, w); } else { /* write straight away */ /* stop the timer on read of the fd */ comm_point_stop_listening(reuse->pending->c); reuse->pending->query = w; outnet_tcp_take_query_setup( reuse->pending->c->fd, reuse->pending, w); } } else { struct pending_tcp* pend = w->outnet->tcp_free; rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); pend->reuse.pending = pend; memcpy(&pend->reuse.addr, &w->addr, w->addrlen); pend->reuse.addrlen = w->addrlen; if(!outnet_tcp_take_into_use(w)) { waiting_tcp_callback(w, NULL, NETEVENT_CLOSED, NULL); waiting_tcp_delete(w); } } } } /** add waiting_tcp element to the outnet tcp waiting list */ static void outnet_add_tcp_waiting(struct outside_network* outnet, struct waiting_tcp* w) { struct timeval tv; if(w->on_tcp_waiting_list) return; w->next_waiting = NULL; if(outnet->tcp_wait_last) outnet->tcp_wait_last->next_waiting = w; else outnet->tcp_wait_first = w; outnet->tcp_wait_last = w; w->on_tcp_waiting_list = 1; #ifndef S_SPLINT_S tv.tv_sec = w->timeout/1000; tv.tv_usec = (w->timeout%1000)*1000; #endif comm_timer_set(w->timer, &tv); } /** delete element from tree by id */ static void reuse_tree_by_id_delete(struct reuse_tcp* reuse, struct waiting_tcp* w) { log_assert(w->id_node.key != NULL); rbtree_delete(&reuse->tree_by_id, w); w->id_node.key = NULL; } /** move writewait list to go for another connection. */ static void reuse_move_writewait_away(struct outside_network* outnet, struct pending_tcp* pend) { /* the writewait list has not been written yet, so if the * stream was closed, they have not actually been failed, only * the queries written. Other queries can get written to another * stream. For upstreams that do not support multiple queries * and answers, the stream can get closed, and then the queries * can get written on a new socket */ struct waiting_tcp* w; if(pend->query && pend->query->error_count == 0 && pend->c->tcp_write_pkt == pend->query->pkt && pend->c->tcp_write_pkt_len == pend->query->pkt_len) { /* since the current query is not written, it can also * move to a free buffer */ if(verbosity >= VERB_CLIENT && pend->query->pkt_len > 12+2+2 && LDNS_QDCOUNT(pend->query->pkt) > 0 && dname_valid(pend->query->pkt+12, pend->query->pkt_len-12)) { char buf[LDNS_MAX_DOMAINLEN+1]; dname_str(pend->query->pkt+12, buf); verbose(VERB_CLIENT, "reuse_move_writewait_away current %s %d bytes were written", buf, (int)pend->c->tcp_write_byte_count); } pend->c->tcp_write_pkt = NULL; pend->c->tcp_write_pkt_len = 0; pend->c->tcp_write_and_read = 0; pend->reuse.cp_more_read_again = 0; pend->reuse.cp_more_write_again = 0; pend->c->tcp_is_reading = 1; w = pend->query; pend->query = NULL; /* increase error count, so that if the next socket fails too * the server selection is run again with this query failed * and it can select a different server (if possible), or * fail the query */ w->error_count ++; reuse_tree_by_id_delete(&pend->reuse, w); outnet_add_tcp_waiting(outnet, w); } while((w = reuse_write_wait_pop(&pend->reuse)) != NULL) { if(verbosity >= VERB_CLIENT && w->pkt_len > 12+2+2 && LDNS_QDCOUNT(w->pkt) > 0 && dname_valid(w->pkt+12, w->pkt_len-12)) { char buf[LDNS_MAX_DOMAINLEN+1]; dname_str(w->pkt+12, buf); verbose(VERB_CLIENT, "reuse_move_writewait_away item %s", buf); } reuse_tree_by_id_delete(&pend->reuse, w); outnet_add_tcp_waiting(outnet, w); } } /** remove reused element from tree and lru list */ static void reuse_tcp_remove_tree_list(struct outside_network* outnet, struct reuse_tcp* reuse) { verbose(VERB_CLIENT, "reuse_tcp_remove_tree_list"); if(reuse->node.key) { /* delete it from reuse tree */ (void)rbtree_delete(&outnet->tcp_reuse, reuse); reuse->node.key = NULL; } /* delete from reuse list */ if(reuse->item_on_lru_list) { if(reuse->lru_prev) { /* assert that members of the lru list are waiting * and thus have a pending pointer to the struct */ log_assert(reuse->lru_prev->pending); reuse->lru_prev->lru_next = reuse->lru_next; } else { log_assert(!reuse->lru_next || reuse->lru_next->pending); outnet->tcp_reuse_first = reuse->lru_next; } if(reuse->lru_next) { /* assert that members of the lru list are waiting * and thus have a pending pointer to the struct */ log_assert(reuse->lru_next->pending); reuse->lru_next->lru_prev = reuse->lru_prev; } else { log_assert(!reuse->lru_prev || reuse->lru_prev->pending); outnet->tcp_reuse_last = reuse->lru_prev; } reuse->item_on_lru_list = 0; } } /** helper function that deletes an element from the tree of readwait * elements in tcp reuse structure */ static void reuse_del_readwait_elem(rbnode_type* node, void* ATTR_UNUSED(arg)) { struct waiting_tcp* w = (struct waiting_tcp*)node->key; waiting_tcp_delete(w); } /** delete readwait waiting_tcp elements, deletes the elements in the list */ void reuse_del_readwait(rbtree_type* tree_by_id) { if(tree_by_id->root == NULL || tree_by_id->root == RBTREE_NULL) return; traverse_postorder(tree_by_id, &reuse_del_readwait_elem, NULL); rbtree_init(tree_by_id, reuse_id_cmp); } /** decommission a tcp buffer, closes commpoint and frees waiting_tcp entry */ static void decommission_pending_tcp(struct outside_network* outnet, struct pending_tcp* pend) { verbose(VERB_CLIENT, "decommission_pending_tcp"); pend->next_free = outnet->tcp_free; outnet->tcp_free = pend; if(pend->reuse.node.key) { /* needs unlink from the reuse tree to get deleted */ reuse_tcp_remove_tree_list(outnet, &pend->reuse); } /* free SSL structure after remove from outnet tcp reuse tree, * because the c->ssl null or not is used for sorting in the tree */ if(pend->c->ssl) { #ifdef HAVE_SSL SSL_shutdown(pend->c->ssl); SSL_free(pend->c->ssl); pend->c->ssl = NULL; #endif } comm_point_close(pend->c); pend->reuse.cp_more_read_again = 0; pend->reuse.cp_more_write_again = 0; /* unlink the query and writewait list, it is part of the tree * nodes and is deleted */ pend->query = NULL; pend->reuse.write_wait_first = NULL; pend->reuse.write_wait_last = NULL; reuse_del_readwait(&pend->reuse.tree_by_id); } /** perform failure callbacks for waiting queries in reuse read rbtree */ static void reuse_cb_readwait_for_failure(rbtree_type* tree_by_id, int err) { rbnode_type* node; if(tree_by_id->root == NULL || tree_by_id->root == RBTREE_NULL) return; node = rbtree_first(tree_by_id); while(node && node != RBTREE_NULL) { struct waiting_tcp* w = (struct waiting_tcp*)node->key; waiting_tcp_callback(w, NULL, err, NULL); node = rbtree_next(node); } } /** perform callbacks for failure and also decommission pending tcp. * the callbacks remove references in sq->pending to the waiting_tcp * members of the tree_by_id in the pending tcp. The pending_tcp is * removed before the callbacks, so that the callbacks do not modify * the pending_tcp due to its reference in the outside_network reuse tree */ static void reuse_cb_and_decommission(struct outside_network* outnet, struct pending_tcp* pend, int error) { rbtree_type store; store = pend->reuse.tree_by_id; pend->query = NULL; rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); pend->reuse.write_wait_first = NULL; pend->reuse.write_wait_last = NULL; decommission_pending_tcp(outnet, pend); reuse_cb_readwait_for_failure(&store, error); reuse_del_readwait(&store); } /** set timeout on tcp fd and setup read event to catch incoming dns msgs */ static void reuse_tcp_setup_timeout(struct pending_tcp* pend_tcp) { log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_timeout", &pend_tcp->reuse); comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT); } /** set timeout on tcp fd and setup read event to catch incoming dns msgs */ static void reuse_tcp_setup_read_and_timeout(struct pending_tcp* pend_tcp) { log_reuse_tcp(VERB_CLIENT, "reuse_tcp_setup_readtimeout", &pend_tcp->reuse); sldns_buffer_clear(pend_tcp->c->buffer); pend_tcp->c->tcp_is_reading = 1; pend_tcp->c->tcp_byte_count = 0; comm_point_stop_listening(pend_tcp->c); comm_point_start_listening(pend_tcp->c, -1, REUSE_TIMEOUT); } int outnet_tcp_cb(struct comm_point* c, void* arg, int error, struct comm_reply *reply_info) { struct pending_tcp* pend = (struct pending_tcp*)arg; struct outside_network* outnet = pend->reuse.outnet; struct waiting_tcp* w = NULL; verbose(VERB_ALGO, "outnettcp cb"); if(error == NETEVENT_TIMEOUT) { if(pend->c->tcp_write_and_read) { verbose(VERB_QUERY, "outnettcp got tcp timeout " "for read, ignored because write underway"); /* if we are writing, ignore readtimer, wait for write timer * or write is done */ return 0; } else { verbose(VERB_QUERY, "outnettcp got tcp timeout %s", (pend->reuse.tree_by_id.count?"for reading pkt": "for keepalive for reuse")); } /* must be timeout for reading or keepalive reuse, * close it. */ reuse_tcp_remove_tree_list(outnet, &pend->reuse); } else if(error == NETEVENT_PKT_WRITTEN) { /* the packet we want to write has been written. */ verbose(VERB_ALGO, "outnet tcp pkt was written event"); log_assert(c == pend->c); log_assert(pend->query->pkt == pend->c->tcp_write_pkt); log_assert(pend->query->pkt_len == pend->c->tcp_write_pkt_len); pend->c->tcp_write_pkt = NULL; pend->c->tcp_write_pkt_len = 0; /* the pend.query is already in tree_by_id */ log_assert(pend->query->id_node.key); pend->query = NULL; /* setup to write next packet or setup read timeout */ if(pend->reuse.write_wait_first) { verbose(VERB_ALGO, "outnet tcp setup next pkt"); /* we can write it straight away perhaps, set flag * because this callback called after a tcp write * succeeded and likely more buffer space is available * and we can write some more. */ pend->reuse.cp_more_write_again = 1; pend->query = reuse_write_wait_pop(&pend->reuse); comm_point_stop_listening(pend->c); outnet_tcp_take_query_setup(pend->c->fd, pend, pend->query); } else { verbose(VERB_ALGO, "outnet tcp writes done, wait"); pend->c->tcp_write_and_read = 0; pend->reuse.cp_more_read_again = 0; pend->reuse.cp_more_write_again = 0; pend->c->tcp_is_reading = 1; comm_point_stop_listening(pend->c); reuse_tcp_setup_timeout(pend); } return 0; } else if(error != NETEVENT_NOERROR) { verbose(VERB_QUERY, "outnettcp got tcp error %d", error); reuse_move_writewait_away(outnet, pend); /* pass error below and exit */ } else { /* check ID */ if(sldns_buffer_limit(c->buffer) < sizeof(uint16_t)) { log_addr(VERB_QUERY, "outnettcp: bad ID in reply, too short, from:", &pend->reuse.addr, pend->reuse.addrlen); error = NETEVENT_CLOSED; } else { uint16_t id = LDNS_ID_WIRE(sldns_buffer_begin( c->buffer)); /* find the query the reply is for */ w = reuse_tcp_by_id_find(&pend->reuse, id); } } if(error == NETEVENT_NOERROR && !w) { /* no struct waiting found in tree, no reply to call */ log_addr(VERB_QUERY, "outnettcp: bad ID in reply, from:", &pend->reuse.addr, pend->reuse.addrlen); error = NETEVENT_CLOSED; } if(error == NETEVENT_NOERROR) { /* add to reuse tree so it can be reused, if not a failure. * This is possible if the state machine wants to make a tcp * query again to the same destination. */ if(outnet->tcp_reuse.count < outnet->tcp_reuse_max) { (void)reuse_tcp_insert(outnet, pend); } } if(w) { reuse_tree_by_id_delete(&pend->reuse, w); verbose(VERB_CLIENT, "outnet tcp callback query err %d buflen %d", error, (int)sldns_buffer_limit(c->buffer)); waiting_tcp_callback(w, c, error, reply_info); waiting_tcp_delete(w); } verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb"); if(error == NETEVENT_NOERROR && pend->reuse.node.key) { verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: keep it"); /* it is in the reuse_tcp tree, with other queries, or * on the empty list. do not decommission it */ /* if there are more outstanding queries, we could try to * read again, to see if it is on the input, * because this callback called after a successful read * and there could be more bytes to read on the input */ if(pend->reuse.tree_by_id.count != 0) pend->reuse.cp_more_read_again = 1; reuse_tcp_setup_read_and_timeout(pend); return 0; } verbose(VERB_CLIENT, "outnet_tcp_cb reuse after cb: decommission it"); /* no queries on it, no space to keep it. or timeout or closed due * to error. Close it */ reuse_cb_and_decommission(outnet, pend, (error==NETEVENT_TIMEOUT? NETEVENT_TIMEOUT:NETEVENT_CLOSED)); use_free_buffer(outnet); return 0; } /** lower use count on pc, see if it can be closed */ static void portcomm_loweruse(struct outside_network* outnet, struct port_comm* pc) { struct port_if* pif; pc->num_outstanding--; if(pc->num_outstanding > 0) { return; } /* close it and replace in unused list */ verbose(VERB_ALGO, "close of port %d", pc->number); comm_point_close(pc->cp); pif = pc->pif; log_assert(pif->inuse > 0); #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pif->avail_ports[pif->avail_total - pif->inuse] = pc->number; #endif pif->inuse--; pif->out[pc->index] = pif->out[pif->inuse]; pif->out[pc->index]->index = pc->index; pc->next = outnet->unused_fds; outnet->unused_fds = pc; } /** try to send waiting UDP queries */ static void outnet_send_wait_udp(struct outside_network* outnet) { struct pending* pend; /* process waiting queries */ while(outnet->udp_wait_first && outnet->unused_fds && !outnet->want_to_quit) { pend = outnet->udp_wait_first; outnet->udp_wait_first = pend->next_waiting; if(!pend->next_waiting) outnet->udp_wait_last = NULL; sldns_buffer_clear(outnet->udp_buff); sldns_buffer_write(outnet->udp_buff, pend->pkt, pend->pkt_len); sldns_buffer_flip(outnet->udp_buff); free(pend->pkt); /* freeing now makes get_mem correct */ pend->pkt = NULL; pend->pkt_len = 0; if(!randomize_and_send_udp(pend, outnet->udp_buff, pend->timeout)) { /* callback error on pending */ if(pend->cb) { fptr_ok(fptr_whitelist_pending_udp(pend->cb)); (void)(*pend->cb)(outnet->unused_fds->cp, pend->cb_arg, NETEVENT_CLOSED, NULL); } pending_delete(outnet, pend); } } } int outnet_udp_cb(struct comm_point* c, void* arg, int error, struct comm_reply *reply_info) { struct outside_network* outnet = (struct outside_network*)arg; struct pending key; struct pending* p; verbose(VERB_ALGO, "answer cb"); if(error != NETEVENT_NOERROR) { verbose(VERB_QUERY, "outnetudp got udp error %d", error); return 0; } if(sldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) { verbose(VERB_QUERY, "outnetudp udp too short"); return 0; } log_assert(reply_info); /* setup lookup key */ key.id = (unsigned)LDNS_ID_WIRE(sldns_buffer_begin(c->buffer)); memcpy(&key.addr, &reply_info->addr, reply_info->addrlen); key.addrlen = reply_info->addrlen; verbose(VERB_ALGO, "Incoming reply id = %4.4x", key.id); log_addr(VERB_ALGO, "Incoming reply addr =", &reply_info->addr, reply_info->addrlen); /* find it, see if this thing is a valid query response */ verbose(VERB_ALGO, "lookup size is %d entries", (int)outnet->pending->count); p = (struct pending*)rbtree_search(outnet->pending, &key); if(!p) { verbose(VERB_QUERY, "received unwanted or unsolicited udp reply dropped."); log_buf(VERB_ALGO, "dropped message", c->buffer); outnet->unwanted_replies++; if(outnet->unwanted_threshold && ++outnet->unwanted_total >= outnet->unwanted_threshold) { log_warn("unwanted reply total reached threshold (%u)" " you may be under attack." " defensive action: clearing the cache", (unsigned)outnet->unwanted_threshold); fptr_ok(fptr_whitelist_alloc_cleanup( outnet->unwanted_action)); (*outnet->unwanted_action)(outnet->unwanted_param); outnet->unwanted_total = 0; } return 0; } verbose(VERB_ALGO, "received udp reply."); log_buf(VERB_ALGO, "udp message", c->buffer); if(p->pc->cp != c) { verbose(VERB_QUERY, "received reply id,addr on wrong port. " "dropped."); outnet->unwanted_replies++; if(outnet->unwanted_threshold && ++outnet->unwanted_total >= outnet->unwanted_threshold) { log_warn("unwanted reply total reached threshold (%u)" " you may be under attack." " defensive action: clearing the cache", (unsigned)outnet->unwanted_threshold); fptr_ok(fptr_whitelist_alloc_cleanup( outnet->unwanted_action)); (*outnet->unwanted_action)(outnet->unwanted_param); outnet->unwanted_total = 0; } return 0; } comm_timer_disable(p->timer); verbose(VERB_ALGO, "outnet handle udp reply"); /* delete from tree first in case callback creates a retry */ (void)rbtree_delete(outnet->pending, p->node.key); if(p->cb) { fptr_ok(fptr_whitelist_pending_udp(p->cb)); (void)(*p->cb)(p->pc->cp, p->cb_arg, NETEVENT_NOERROR, reply_info); } portcomm_loweruse(outnet, p->pc); pending_delete(NULL, p); outnet_send_wait_udp(outnet); return 0; } /** calculate number of ip4 and ip6 interfaces*/ static void calc_num46(char** ifs, int num_ifs, int do_ip4, int do_ip6, int* num_ip4, int* num_ip6) { int i; *num_ip4 = 0; *num_ip6 = 0; if(num_ifs <= 0) { if(do_ip4) *num_ip4 = 1; if(do_ip6) *num_ip6 = 1; return; } for(i=0; ioutnet; verbose(VERB_ALGO, "timeout udp with delay"); portcomm_loweruse(outnet, p->pc); pending_delete(outnet, p); outnet_send_wait_udp(outnet); } void pending_udp_timer_cb(void *arg) { struct pending* p = (struct pending*)arg; struct outside_network* outnet = p->outnet; /* it timed out */ verbose(VERB_ALGO, "timeout udp"); if(p->cb) { fptr_ok(fptr_whitelist_pending_udp(p->cb)); (void)(*p->cb)(p->pc->cp, p->cb_arg, NETEVENT_TIMEOUT, NULL); } /* if delayclose, keep port open for a longer time. * But if the udpwaitlist exists, then we are struggling to * keep up with demand for sockets, so do not wait, but service * the customer (customer service more important than portICMPs) */ if(outnet->delayclose && !outnet->udp_wait_first) { p->cb = NULL; p->timer->callback = &pending_udp_timer_delay_cb; comm_timer_set(p->timer, &outnet->delay_tv); return; } portcomm_loweruse(outnet, p->pc); pending_delete(outnet, p); outnet_send_wait_udp(outnet); } /** create pending_tcp buffers */ static int create_pending_tcp(struct outside_network* outnet, size_t bufsize) { size_t i; if(outnet->num_tcp == 0) return 1; /* no tcp needed, nothing to do */ if(!(outnet->tcp_conns = (struct pending_tcp **)calloc( outnet->num_tcp, sizeof(struct pending_tcp*)))) return 0; for(i=0; inum_tcp; i++) { if(!(outnet->tcp_conns[i] = (struct pending_tcp*)calloc(1, sizeof(struct pending_tcp)))) return 0; outnet->tcp_conns[i]->next_free = outnet->tcp_free; outnet->tcp_free = outnet->tcp_conns[i]; outnet->tcp_conns[i]->c = comm_point_create_tcp_out( outnet->base, bufsize, outnet_tcp_cb, outnet->tcp_conns[i]); if(!outnet->tcp_conns[i]->c) return 0; } return 1; } /** setup an outgoing interface, ready address */ static int setup_if(struct port_if* pif, const char* addrstr, int* avail, int numavail, size_t numfd) { #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pif->avail_total = numavail; pif->avail_ports = (int*)memdup(avail, (size_t)numavail*sizeof(int)); if(!pif->avail_ports) return 0; #endif if(!ipstrtoaddr(addrstr, UNBOUND_DNS_PORT, &pif->addr, &pif->addrlen) && !netblockstrtoaddr(addrstr, UNBOUND_DNS_PORT, &pif->addr, &pif->addrlen, &pif->pfxlen)) return 0; pif->maxout = (int)numfd; pif->inuse = 0; pif->out = (struct port_comm**)calloc(numfd, sizeof(struct port_comm*)); if(!pif->out) return 0; return 1; } struct outside_network* outside_network_create(struct comm_base *base, size_t bufsize, size_t num_ports, char** ifs, int num_ifs, int do_ip4, int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv, int udp_connect) { struct outside_network* outnet = (struct outside_network*) calloc(1, sizeof(struct outside_network)); size_t k; if(!outnet) { log_err("malloc failed"); return NULL; } comm_base_timept(base, &outnet->now_secs, &outnet->now_tv); outnet->base = base; outnet->num_tcp = num_tcp; outnet->num_tcp_outgoing = 0; outnet->infra = infra; outnet->rnd = rnd; outnet->sslctx = sslctx; outnet->tls_use_sni = tls_use_sni; #ifdef USE_DNSTAP outnet->dtenv = dtenv; #else (void)dtenv; #endif outnet->svcd_overhead = 0; outnet->want_to_quit = 0; outnet->unwanted_threshold = unwanted_threshold; outnet->unwanted_action = unwanted_action; outnet->unwanted_param = unwanted_param; outnet->use_caps_for_id = use_caps_for_id; outnet->do_udp = do_udp; outnet->tcp_mss = tcp_mss; outnet->ip_dscp = dscp; #ifndef S_SPLINT_S if(delayclose) { outnet->delayclose = 1; outnet->delay_tv.tv_sec = delayclose/1000; outnet->delay_tv.tv_usec = (delayclose%1000)*1000; } #endif if(udp_connect) { outnet->udp_connect = 1; } if(numavailports == 0 || num_ports == 0) { log_err("no outgoing ports available"); outside_network_delete(outnet); return NULL; } #ifndef INET6 do_ip6 = 0; #endif calc_num46(ifs, num_ifs, do_ip4, do_ip6, &outnet->num_ip4, &outnet->num_ip6); if(outnet->num_ip4 != 0) { if(!(outnet->ip4_ifs = (struct port_if*)calloc( (size_t)outnet->num_ip4, sizeof(struct port_if)))) { log_err("malloc failed"); outside_network_delete(outnet); return NULL; } } if(outnet->num_ip6 != 0) { if(!(outnet->ip6_ifs = (struct port_if*)calloc( (size_t)outnet->num_ip6, sizeof(struct port_if)))) { log_err("malloc failed"); outside_network_delete(outnet); return NULL; } } if( !(outnet->udp_buff = sldns_buffer_new(bufsize)) || !(outnet->pending = rbtree_create(pending_cmp)) || !(outnet->serviced = rbtree_create(serviced_cmp)) || !create_pending_tcp(outnet, bufsize)) { log_err("malloc failed"); outside_network_delete(outnet); return NULL; } rbtree_init(&outnet->tcp_reuse, reuse_cmp); outnet->tcp_reuse_max = num_tcp; /* allocate commpoints */ for(k=0; kcp = comm_point_create_udp(outnet->base, -1, outnet->udp_buff, outnet_udp_cb, outnet); if(!pc->cp) { log_err("malloc failed"); free(pc); outside_network_delete(outnet); return NULL; } pc->next = outnet->unused_fds; outnet->unused_fds = pc; } /* allocate interfaces */ if(num_ifs == 0) { if(do_ip4 && !setup_if(&outnet->ip4_ifs[0], "0.0.0.0", availports, numavailports, num_ports)) { log_err("malloc failed"); outside_network_delete(outnet); return NULL; } if(do_ip6 && !setup_if(&outnet->ip6_ifs[0], "::", availports, numavailports, num_ports)) { log_err("malloc failed"); outside_network_delete(outnet); return NULL; } } else { size_t done_4 = 0, done_6 = 0; int i; for(i=0; iip6_ifs[done_6], ifs[i], availports, numavailports, num_ports)){ log_err("malloc failed"); outside_network_delete(outnet); return NULL; } done_6++; } if(!str_is_ip6(ifs[i]) && do_ip4) { if(!setup_if(&outnet->ip4_ifs[done_4], ifs[i], availports, numavailports, num_ports)){ log_err("malloc failed"); outside_network_delete(outnet); return NULL; } done_4++; } } } return outnet; } /** helper pending delete */ static void pending_node_del(rbnode_type* node, void* arg) { struct pending* pend = (struct pending*)node; struct outside_network* outnet = (struct outside_network*)arg; pending_delete(outnet, pend); } /** helper serviced delete */ static void serviced_node_del(rbnode_type* node, void* ATTR_UNUSED(arg)) { struct serviced_query* sq = (struct serviced_query*)node; struct service_callback* p = sq->cblist, *np; free(sq->qbuf); free(sq->zone); free(sq->tls_auth_name); edns_opt_list_free(sq->opt_list); while(p) { np = p->next; free(p); p = np; } free(sq); } void outside_network_quit_prepare(struct outside_network* outnet) { if(!outnet) return; /* prevent queued items from being sent */ outnet->want_to_quit = 1; } void outside_network_delete(struct outside_network* outnet) { if(!outnet) return; outnet->want_to_quit = 1; /* check every element, since we can be called on malloc error */ if(outnet->pending) { /* free pending elements, but do no unlink from tree. */ traverse_postorder(outnet->pending, pending_node_del, NULL); free(outnet->pending); } if(outnet->serviced) { traverse_postorder(outnet->serviced, serviced_node_del, NULL); free(outnet->serviced); } if(outnet->udp_buff) sldns_buffer_free(outnet->udp_buff); if(outnet->unused_fds) { struct port_comm* p = outnet->unused_fds, *np; while(p) { np = p->next; comm_point_delete(p->cp); free(p); p = np; } outnet->unused_fds = NULL; } if(outnet->ip4_ifs) { int i, k; for(i=0; inum_ip4; i++) { for(k=0; kip4_ifs[i].inuse; k++) { struct port_comm* pc = outnet->ip4_ifs[i]. out[k]; comm_point_delete(pc->cp); free(pc); } #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION free(outnet->ip4_ifs[i].avail_ports); #endif free(outnet->ip4_ifs[i].out); } free(outnet->ip4_ifs); } if(outnet->ip6_ifs) { int i, k; for(i=0; inum_ip6; i++) { for(k=0; kip6_ifs[i].inuse; k++) { struct port_comm* pc = outnet->ip6_ifs[i]. out[k]; comm_point_delete(pc->cp); free(pc); } #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION free(outnet->ip6_ifs[i].avail_ports); #endif free(outnet->ip6_ifs[i].out); } free(outnet->ip6_ifs); } if(outnet->tcp_conns) { size_t i; for(i=0; inum_tcp; i++) if(outnet->tcp_conns[i]) { if(outnet->tcp_conns[i]->query && !outnet->tcp_conns[i]->query-> on_tcp_waiting_list) { /* delete waiting_tcp elements that * the tcp conn is working on */ struct pending_tcp* pend = (struct pending_tcp*)outnet-> tcp_conns[i]->query-> next_waiting; decommission_pending_tcp(outnet, pend); } comm_point_delete(outnet->tcp_conns[i]->c); waiting_tcp_delete(outnet->tcp_conns[i]->query); free(outnet->tcp_conns[i]); } free(outnet->tcp_conns); } if(outnet->tcp_wait_first) { struct waiting_tcp* p = outnet->tcp_wait_first, *np; while(p) { np = p->next_waiting; waiting_tcp_delete(p); p = np; } } /* was allocated in struct pending that was deleted above */ rbtree_init(&outnet->tcp_reuse, reuse_cmp); outnet->tcp_reuse_first = NULL; outnet->tcp_reuse_last = NULL; if(outnet->udp_wait_first) { struct pending* p = outnet->udp_wait_first, *np; while(p) { np = p->next_waiting; pending_delete(NULL, p); p = np; } } free(outnet); } void pending_delete(struct outside_network* outnet, struct pending* p) { if(!p) return; if(outnet && outnet->udp_wait_first && (p->next_waiting || p == outnet->udp_wait_last) ) { /* delete from waiting list, if it is in the waiting list */ struct pending* prev = NULL, *x = outnet->udp_wait_first; while(x && x != p) { prev = x; x = x->next_waiting; } if(x) { log_assert(x == p); if(prev) prev->next_waiting = p->next_waiting; else outnet->udp_wait_first = p->next_waiting; if(outnet->udp_wait_last == p) outnet->udp_wait_last = prev; } } if(outnet) { (void)rbtree_delete(outnet->pending, p->node.key); } if(p->timer) comm_timer_delete(p->timer); free(p->pkt); free(p); } static void sai6_putrandom(struct sockaddr_in6 *sa, int pfxlen, struct ub_randstate *rnd) { int i, last; if(!(pfxlen > 0 && pfxlen < 128)) return; for(i = 0; i < (128 - pfxlen) / 8; i++) { sa->sin6_addr.s6_addr[15-i] = (uint8_t)ub_random_max(rnd, 256); } last = pfxlen & 7; if(last != 0) { sa->sin6_addr.s6_addr[15-i] |= ((0xFF >> last) & ub_random_max(rnd, 256)); } } /** * Try to open a UDP socket for outgoing communication. * Sets sockets options as needed. * @param addr: socket address. * @param addrlen: length of address. * @param pfxlen: length of network prefix (for address randomisation). * @param port: port override for addr. * @param inuse: if -1 is returned, this bool means the port was in use. * @param rnd: random state (for address randomisation). * @param dscp: DSCP to use. * @return fd or -1 */ static int udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen, int port, int* inuse, struct ub_randstate* rnd, int dscp) { int fd, noproto; if(addr_is_ip6(addr, addrlen)) { int freebind = 0; struct sockaddr_in6 sa = *(struct sockaddr_in6*)addr; sa.sin6_port = (in_port_t)htons((uint16_t)port); sa.sin6_flowinfo = 0; sa.sin6_scope_id = 0; if(pfxlen != 0) { freebind = 1; sai6_putrandom(&sa, pfxlen, rnd); } fd = create_udp_sock(AF_INET6, SOCK_DGRAM, (struct sockaddr*)&sa, addrlen, 1, inuse, &noproto, 0, 0, 0, NULL, 0, freebind, 0, dscp); } else { struct sockaddr_in* sa = (struct sockaddr_in*)addr; sa->sin_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET, SOCK_DGRAM, (struct sockaddr*)addr, addrlen, 1, inuse, &noproto, 0, 0, 0, NULL, 0, 0, 0, dscp); } return fd; } /** Select random ID */ static int select_id(struct outside_network* outnet, struct pending* pend, sldns_buffer* packet) { int id_tries = 0; pend->id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff; LDNS_ID_SET(sldns_buffer_begin(packet), pend->id); /* insert in tree */ pend->node.key = pend; while(!rbtree_insert(outnet->pending, &pend->node)) { /* change ID to avoid collision */ pend->id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff; LDNS_ID_SET(sldns_buffer_begin(packet), pend->id); id_tries++; if(id_tries == MAX_ID_RETRY) { pend->id=99999; /* non existant ID */ log_err("failed to generate unique ID, drop msg"); return 0; } } verbose(VERB_ALGO, "inserted new pending reply id=%4.4x", pend->id); return 1; } /** return true is UDP connect error needs to be logged */ static int udp_connect_needs_log(int err) { switch(err) { case ECONNREFUSED: # ifdef ENETUNREACH case ENETUNREACH: # endif # ifdef EHOSTDOWN case EHOSTDOWN: # endif # ifdef EHOSTUNREACH case EHOSTUNREACH: # endif # ifdef ENETDOWN case ENETDOWN: # endif if(verbosity >= VERB_ALGO) return 1; return 0; default: break; } return 1; } /** Select random interface and port */ static int select_ifport(struct outside_network* outnet, struct pending* pend, int num_if, struct port_if* ifs) { int my_if, my_port, fd, portno, inuse, tries=0; struct port_if* pif; /* randomly select interface and port */ if(num_if == 0) { verbose(VERB_QUERY, "Need to send query but have no " "outgoing interfaces of that family"); return 0; } log_assert(outnet->unused_fds); tries = 0; while(1) { my_if = ub_random_max(outnet->rnd, num_if); pif = &ifs[my_if]; #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION if(outnet->udp_connect) { /* if we connect() we cannot reuse fds for a port */ if(pif->inuse >= pif->avail_total) { tries++; if(tries < MAX_PORT_RETRY) continue; log_err("failed to find an open port, drop msg"); return 0; } my_port = pif->inuse + ub_random_max(outnet->rnd, pif->avail_total - pif->inuse); } else { my_port = ub_random_max(outnet->rnd, pif->avail_total); if(my_port < pif->inuse) { /* port already open */ pend->pc = pif->out[my_port]; verbose(VERB_ALGO, "using UDP if=%d port=%d", my_if, pend->pc->number); break; } } /* try to open new port, if fails, loop to try again */ log_assert(pif->inuse < pif->maxout); portno = pif->avail_ports[my_port - pif->inuse]; #else my_port = portno = 0; #endif fd = udp_sockport(&pif->addr, pif->addrlen, pif->pfxlen, portno, &inuse, outnet->rnd, outnet->ip_dscp); if(fd == -1 && !inuse) { /* nonrecoverable error making socket */ return 0; } if(fd != -1) { verbose(VERB_ALGO, "opened UDP if=%d port=%d", my_if, portno); if(outnet->udp_connect) { /* connect() to the destination */ if(connect(fd, (struct sockaddr*)&pend->addr, pend->addrlen) < 0) { if(udp_connect_needs_log(errno)) { log_err_addr("udp connect failed", strerror(errno), &pend->addr, pend->addrlen); } sock_close(fd); return 0; } } /* grab fd */ pend->pc = outnet->unused_fds; outnet->unused_fds = pend->pc->next; /* setup portcomm */ pend->pc->next = NULL; pend->pc->number = portno; pend->pc->pif = pif; pend->pc->index = pif->inuse; pend->pc->num_outstanding = 0; comm_point_start_listening(pend->pc->cp, fd, -1); /* grab port in interface */ pif->out[pif->inuse] = pend->pc; #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pif->avail_ports[my_port - pif->inuse] = pif->avail_ports[pif->avail_total-pif->inuse-1]; #endif pif->inuse++; break; } /* failed, already in use */ verbose(VERB_QUERY, "port %d in use, trying another", portno); tries++; if(tries == MAX_PORT_RETRY) { log_err("failed to find an open port, drop msg"); return 0; } } log_assert(pend->pc); pend->pc->num_outstanding++; return 1; } static int randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout) { struct timeval tv; struct outside_network* outnet = pend->sq->outnet; /* select id */ if(!select_id(outnet, pend, packet)) { return 0; } /* select src_if, port */ if(addr_is_ip6(&pend->addr, pend->addrlen)) { if(!select_ifport(outnet, pend, outnet->num_ip6, outnet->ip6_ifs)) return 0; } else { if(!select_ifport(outnet, pend, outnet->num_ip4, outnet->ip4_ifs)) return 0; } log_assert(pend->pc && pend->pc->cp); /* send it over the commlink */ if(!comm_point_send_udp_msg(pend->pc->cp, packet, (struct sockaddr*)&pend->addr, pend->addrlen, outnet->udp_connect)) { portcomm_loweruse(outnet, pend->pc); return 0; } /* system calls to set timeout after sending UDP to make roundtrip smaller. */ #ifndef S_SPLINT_S tv.tv_sec = timeout/1000; tv.tv_usec = (timeout%1000)*1000; #endif comm_timer_set(pend->timer, &tv); #ifdef USE_DNSTAP if(outnet->dtenv && (outnet->dtenv->log_resolver_query_messages || outnet->dtenv->log_forwarder_query_messages)) dt_msg_send_outside_query(outnet->dtenv, &pend->addr, comm_udp, pend->sq->zone, pend->sq->zonelen, packet); #endif return 1; } struct pending* pending_udp_query(struct serviced_query* sq, struct sldns_buffer* packet, int timeout, comm_point_callback_type* cb, void* cb_arg) { struct pending* pend = (struct pending*)calloc(1, sizeof(*pend)); if(!pend) return NULL; pend->outnet = sq->outnet; pend->sq = sq; pend->addrlen = sq->addrlen; memmove(&pend->addr, &sq->addr, sq->addrlen); pend->cb = cb; pend->cb_arg = cb_arg; pend->node.key = pend; pend->timer = comm_timer_create(sq->outnet->base, pending_udp_timer_cb, pend); if(!pend->timer) { free(pend); return NULL; } if(sq->outnet->unused_fds == NULL) { /* no unused fd, cannot create a new port (randomly) */ verbose(VERB_ALGO, "no fds available, udp query waiting"); pend->timeout = timeout; pend->pkt_len = sldns_buffer_limit(packet); pend->pkt = (uint8_t*)memdup(sldns_buffer_begin(packet), pend->pkt_len); if(!pend->pkt) { comm_timer_delete(pend->timer); free(pend); return NULL; } /* put at end of waiting list */ if(sq->outnet->udp_wait_last) sq->outnet->udp_wait_last->next_waiting = pend; else sq->outnet->udp_wait_first = pend; sq->outnet->udp_wait_last = pend; return pend; } if(!randomize_and_send_udp(pend, packet, timeout)) { pending_delete(sq->outnet, pend); return NULL; } return pend; } void outnet_tcptimer(void* arg) { struct waiting_tcp* w = (struct waiting_tcp*)arg; struct outside_network* outnet = w->outnet; verbose(VERB_CLIENT, "outnet_tcptimer"); if(w->on_tcp_waiting_list) { /* it is on the waiting list */ waiting_list_remove(outnet, w); waiting_tcp_callback(w, NULL, NETEVENT_TIMEOUT, NULL); waiting_tcp_delete(w); } else { /* it was in use */ struct pending_tcp* pend=(struct pending_tcp*)w->next_waiting; reuse_cb_and_decommission(outnet, pend, NETEVENT_TIMEOUT); } use_free_buffer(outnet); } /** close the oldest reuse_tcp connection to make a fd and struct pend * available for a new stream connection */ static void reuse_tcp_close_oldest(struct outside_network* outnet) { struct pending_tcp* pend; verbose(VERB_CLIENT, "reuse_tcp_close_oldest"); if(!outnet->tcp_reuse_last) return; pend = outnet->tcp_reuse_last->pending; /* snip off of LRU */ log_assert(pend->reuse.lru_next == NULL); if(pend->reuse.lru_prev) { outnet->tcp_reuse_last = pend->reuse.lru_prev; pend->reuse.lru_prev->lru_next = NULL; } else { outnet->tcp_reuse_last = NULL; outnet->tcp_reuse_first = NULL; } pend->reuse.item_on_lru_list = 0; /* free up */ reuse_cb_and_decommission(outnet, pend, NETEVENT_CLOSED); } /** find spare ID value for reuse tcp stream. That is random and also does * not collide with an existing query ID that is in use or waiting */ uint16_t reuse_tcp_select_id(struct reuse_tcp* reuse, struct outside_network* outnet) { uint16_t id = 0, curid, nextid; const int try_random = 2000; int i; unsigned select, count, space; rbnode_type* node; /* make really sure the tree is not empty */ if(reuse->tree_by_id.count == 0) { id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff; return id; } /* try to find random empty spots by picking them */ for(i = 0; irnd)>>8) & 0xffff; if(!reuse_tcp_by_id_find(reuse, id)) { return id; } } /* equally pick a random unused element from the tree that is * not in use. Pick a the n-th index of an ununused number, * then loop over the empty spaces in the tree and find it */ log_assert(reuse->tree_by_id.count < 0xffff); select = ub_random_max(outnet->rnd, 0xffff - reuse->tree_by_id.count); /* select value now in 0 .. num free - 1 */ count = 0; /* number of free spaces passed by */ node = rbtree_first(&reuse->tree_by_id); log_assert(node && node != RBTREE_NULL); /* tree not empty */ /* see if select is before first node */ if(select < tree_by_id_get_id(node)) return select; count += tree_by_id_get_id(node); /* perhaps select is between nodes */ while(node && node != RBTREE_NULL) { rbnode_type* next = rbtree_next(node); if(next && next != RBTREE_NULL) { curid = tree_by_id_get_id(node); nextid = tree_by_id_get_id(next); log_assert(curid < nextid); if(curid != 0xffff && curid + 1 < nextid) { /* space between nodes */ space = nextid - curid - 1; log_assert(select >= count); if(select < count + space) { /* here it is */ return curid + 1 + (select - count); } count += space; } } node = next; } /* select is after the last node */ /* count is the number of free positions before the nodes in the * tree */ node = rbtree_last(&reuse->tree_by_id); log_assert(node && node != RBTREE_NULL); /* tree not empty */ curid = tree_by_id_get_id(node); log_assert(count + (0xffff-curid) + reuse->tree_by_id.count == 0xffff); return curid + 1 + (select - count); } struct waiting_tcp* pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, int timeout, comm_point_callback_type* callback, void* callback_arg) { struct pending_tcp* pend = sq->outnet->tcp_free; struct reuse_tcp* reuse = NULL; struct waiting_tcp* w; verbose(VERB_CLIENT, "pending_tcp_query"); if(sldns_buffer_limit(packet) < sizeof(uint16_t)) { verbose(VERB_ALGO, "pending tcp query with too short buffer < 2"); return NULL; } /* find out if a reused stream to the target exists */ /* if so, take it into use */ reuse = reuse_tcp_find(sq->outnet, &sq->addr, sq->addrlen, sq->ssl_upstream); if(reuse) { log_reuse_tcp(VERB_CLIENT, "pending_tcp_query: found reuse", reuse); log_assert(reuse->pending); pend = reuse->pending; reuse_tcp_lru_touch(sq->outnet, reuse); } /* if !pend but we have reuse streams, close a reuse stream * to be able to open a new one to this target, no use waiting * to reuse a file descriptor while another query needs to use * that buffer and file descriptor now. */ if(!pend) { reuse_tcp_close_oldest(sq->outnet); pend = sq->outnet->tcp_free; } /* allocate space to store query */ w = (struct waiting_tcp*)malloc(sizeof(struct waiting_tcp) + sldns_buffer_limit(packet)); if(!w) { return NULL; } if(!(w->timer = comm_timer_create(sq->outnet->base, outnet_tcptimer, w))) { free(w); return NULL; } w->pkt = (uint8_t*)w + sizeof(struct waiting_tcp); w->pkt_len = sldns_buffer_limit(packet); memmove(w->pkt, sldns_buffer_begin(packet), w->pkt_len); if(reuse) w->id = reuse_tcp_select_id(reuse, sq->outnet); else w->id = ((unsigned)ub_random(sq->outnet->rnd)>>8) & 0xffff; LDNS_ID_SET(w->pkt, w->id); memcpy(&w->addr, &sq->addr, sq->addrlen); w->addrlen = sq->addrlen; w->outnet = sq->outnet; w->on_tcp_waiting_list = 0; w->next_waiting = NULL; w->cb = callback; w->cb_arg = callback_arg; w->ssl_upstream = sq->ssl_upstream; w->tls_auth_name = sq->tls_auth_name; w->timeout = timeout; w->id_node.key = NULL; w->write_wait_prev = NULL; w->write_wait_next = NULL; w->write_wait_queued = 0; w->error_count = 0; if(pend) { /* we have a buffer available right now */ if(reuse) { /* reuse existing fd, write query and continue */ /* store query in tree by id */ verbose(VERB_CLIENT, "pending_tcp_query: reuse, store"); w->next_waiting = (void*)pend; reuse_tree_by_id_insert(&pend->reuse, w); /* can we write right now? */ if(pend->query == NULL) { /* write straight away */ /* stop the timer on read of the fd */ comm_point_stop_listening(pend->c); pend->query = w; outnet_tcp_take_query_setup(pend->c->fd, pend, w); } else { /* put it in the waiting list for * this stream */ reuse_write_wait_push_back(&pend->reuse, w); } } else { /* create new fd and connect to addr, setup to * write query */ verbose(VERB_CLIENT, "pending_tcp_query: new fd, connect"); rbtree_init(&pend->reuse.tree_by_id, reuse_id_cmp); pend->reuse.pending = pend; memcpy(&pend->reuse.addr, &sq->addr, sq->addrlen); pend->reuse.addrlen = sq->addrlen; if(!outnet_tcp_take_into_use(w)) { waiting_tcp_delete(w); return NULL; } } } else { /* queue up */ /* waiting for a buffer on the outside network buffer wait * list */ verbose(VERB_CLIENT, "pending_tcp_query: queue to wait"); outnet_add_tcp_waiting(sq->outnet, w); } #ifdef USE_DNSTAP if(sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_query_messages || sq->outnet->dtenv->log_forwarder_query_messages)) dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr, comm_tcp, sq->zone, sq->zonelen, packet); #endif return w; } /** create query for serviced queries */ static void serviced_gen_query(sldns_buffer* buff, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags) { sldns_buffer_clear(buff); /* skip id */ sldns_buffer_write_u16(buff, flags); sldns_buffer_write_u16(buff, 1); /* qdcount */ sldns_buffer_write_u16(buff, 0); /* ancount */ sldns_buffer_write_u16(buff, 0); /* nscount */ sldns_buffer_write_u16(buff, 0); /* arcount */ sldns_buffer_write(buff, qname, qnamelen); sldns_buffer_write_u16(buff, qtype); sldns_buffer_write_u16(buff, qclass); sldns_buffer_flip(buff); } /** lookup serviced query in serviced query rbtree */ static struct serviced_query* lookup_serviced(struct outside_network* outnet, sldns_buffer* buff, int dnssec, struct sockaddr_storage* addr, socklen_t addrlen, struct edns_option* opt_list) { struct serviced_query key; key.node.key = &key; key.qbuf = sldns_buffer_begin(buff); key.qbuflen = sldns_buffer_limit(buff); key.dnssec = dnssec; memcpy(&key.addr, addr, addrlen); key.addrlen = addrlen; key.outnet = outnet; key.opt_list = opt_list; return (struct serviced_query*)rbtree_search(outnet->serviced, &key); } /** Create new serviced entry */ static struct serviced_query* serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, int want_dnssec, int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int qtype, struct edns_option* opt_list, size_t pad_queries_block_size) { struct serviced_query* sq = (struct serviced_query*)malloc(sizeof(*sq)); #ifdef UNBOUND_DEBUG rbnode_type* ins; #endif if(!sq) return NULL; sq->node.key = sq; sq->qbuf = memdup(sldns_buffer_begin(buff), sldns_buffer_limit(buff)); if(!sq->qbuf) { free(sq); return NULL; } sq->qbuflen = sldns_buffer_limit(buff); sq->zone = memdup(zone, zonelen); if(!sq->zone) { free(sq->qbuf); free(sq); return NULL; } sq->zonelen = zonelen; sq->qtype = qtype; sq->dnssec = dnssec; sq->want_dnssec = want_dnssec; sq->nocaps = nocaps; sq->tcp_upstream = tcp_upstream; sq->ssl_upstream = ssl_upstream; if(tls_auth_name) { sq->tls_auth_name = strdup(tls_auth_name); if(!sq->tls_auth_name) { free(sq->zone); free(sq->qbuf); free(sq); return NULL; } } else { sq->tls_auth_name = NULL; } memcpy(&sq->addr, addr, addrlen); sq->addrlen = addrlen; sq->opt_list = NULL; if(opt_list) { sq->opt_list = edns_opt_copy_alloc(opt_list); if(!sq->opt_list) { free(sq->tls_auth_name); free(sq->zone); free(sq->qbuf); free(sq); return NULL; } } sq->outnet = outnet; sq->cblist = NULL; sq->pending = NULL; sq->status = serviced_initial; sq->retry = 0; sq->to_be_deleted = 0; sq->padding_block_size = pad_queries_block_size; #ifdef UNBOUND_DEBUG ins = #else (void) #endif rbtree_insert(outnet->serviced, &sq->node); log_assert(ins != NULL); /* must not be already present */ return sq; } /** remove waiting tcp from the outnet waiting list */ static void waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w) { struct waiting_tcp* p = outnet->tcp_wait_first, *prev = NULL; w->on_tcp_waiting_list = 0; while(p) { if(p == w) { /* remove w */ if(prev) prev->next_waiting = w->next_waiting; else outnet->tcp_wait_first = w->next_waiting; if(outnet->tcp_wait_last == w) outnet->tcp_wait_last = prev; return; } prev = p; p = p->next_waiting; } } /** reuse tcp stream, remove serviced query from stream, * return true if the stream is kept, false if it is to be closed */ static int reuse_tcp_remove_serviced_keep(struct waiting_tcp* w, struct serviced_query* sq) { struct pending_tcp* pend_tcp = (struct pending_tcp*)w->next_waiting; verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep"); /* remove the callback. let query continue to write to not cancel * the stream itself. also keep it as an entry in the tree_by_id, * in case the answer returns (that we no longer want), but we cannot * pick the same ID number meanwhile */ w->cb = NULL; /* see if can be entered in reuse tree * for that the FD has to be non-1 */ if(pend_tcp->c->fd == -1) { verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: -1 fd"); return 0; } /* if in tree and used by other queries */ if(pend_tcp->reuse.node.key) { verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: in use by other queries"); /* do not reset the keepalive timer, for that * we'd need traffic, and this is where the serviced is * removed due to state machine internal reasons, * eg. iterator no longer interested in this query */ return 1; } /* if still open and want to keep it open */ if(pend_tcp->c->fd != -1 && sq->outnet->tcp_reuse.count < sq->outnet->tcp_reuse_max) { verbose(VERB_CLIENT, "reuse_tcp_remove_serviced_keep: keep open"); /* set a keepalive timer on it */ if(!reuse_tcp_insert(sq->outnet, pend_tcp)) { return 0; } reuse_tcp_setup_timeout(pend_tcp); return 1; } return 0; } /** cleanup serviced query entry */ static void serviced_delete(struct serviced_query* sq) { verbose(VERB_CLIENT, "serviced_delete"); if(sq->pending) { /* clear up the pending query */ if(sq->status == serviced_query_UDP_EDNS || sq->status == serviced_query_UDP || sq->status == serviced_query_UDP_EDNS_FRAG || sq->status == serviced_query_UDP_EDNS_fallback) { struct pending* p = (struct pending*)sq->pending; verbose(VERB_CLIENT, "serviced_delete: UDP"); if(p->pc) portcomm_loweruse(sq->outnet, p->pc); pending_delete(sq->outnet, p); /* this call can cause reentrant calls back into the * mesh */ outnet_send_wait_udp(sq->outnet); } else { struct waiting_tcp* w = (struct waiting_tcp*) sq->pending; verbose(VERB_CLIENT, "serviced_delete: TCP"); /* if on stream-write-waiting list then * remove from waiting list and waiting_tcp_delete */ if(w->write_wait_queued) { struct pending_tcp* pend = (struct pending_tcp*)w->next_waiting; verbose(VERB_CLIENT, "serviced_delete: writewait"); reuse_tree_by_id_delete(&pend->reuse, w); reuse_write_wait_remove(&pend->reuse, w); waiting_tcp_delete(w); } else if(!w->on_tcp_waiting_list) { struct pending_tcp* pend = (struct pending_tcp*)w->next_waiting; verbose(VERB_CLIENT, "serviced_delete: tcpreusekeep"); if(!reuse_tcp_remove_serviced_keep(w, sq)) { reuse_cb_and_decommission(sq->outnet, pend, NETEVENT_CLOSED); use_free_buffer(sq->outnet); } sq->pending = NULL; } else { verbose(VERB_CLIENT, "serviced_delete: tcpwait"); waiting_list_remove(sq->outnet, w); waiting_tcp_delete(w); } } } /* does not delete from tree, caller has to do that */ serviced_node_del(&sq->node, NULL); } /** perturb a dname capitalization randomly */ static void serviced_perturb_qname(struct ub_randstate* rnd, uint8_t* qbuf, size_t len) { uint8_t lablen; uint8_t* d = qbuf + 10; long int random = 0; int bits = 0; log_assert(len >= 10 + 5 /* offset qname, root, qtype, qclass */); (void)len; lablen = *d++; while(lablen) { while(lablen--) { /* only perturb A-Z, a-z */ if(isalpha((unsigned char)*d)) { /* get a random bit */ if(bits == 0) { random = ub_random(rnd); bits = 30; } if(random & 0x1) { *d = (uint8_t)toupper((unsigned char)*d); } else { *d = (uint8_t)tolower((unsigned char)*d); } random >>= 1; bits--; } d++; } lablen = *d++; } if(verbosity >= VERB_ALGO) { char buf[LDNS_MAX_DOMAINLEN+1]; dname_str(qbuf+10, buf); verbose(VERB_ALGO, "qname perturbed to %s", buf); } } /** put serviced query into a buffer */ static void serviced_encode(struct serviced_query* sq, sldns_buffer* buff, int with_edns) { /* if we are using 0x20 bits for ID randomness, perturb them */ if(sq->outnet->use_caps_for_id && !sq->nocaps) { serviced_perturb_qname(sq->outnet->rnd, sq->qbuf, sq->qbuflen); } /* generate query */ sldns_buffer_clear(buff); sldns_buffer_write_u16(buff, 0); /* id placeholder */ sldns_buffer_write(buff, sq->qbuf, sq->qbuflen); sldns_buffer_flip(buff); if(with_edns) { /* add edns section */ struct edns_data edns; struct edns_option padding_option; edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = EDNS_ADVERTISED_VERSION; edns.opt_list = sq->opt_list; if(sq->status == serviced_query_UDP_EDNS_FRAG) { if(addr_is_ip6(&sq->addr, sq->addrlen)) { if(EDNS_FRAG_SIZE_IP6 < EDNS_ADVERTISED_SIZE) edns.udp_size = EDNS_FRAG_SIZE_IP6; else edns.udp_size = EDNS_ADVERTISED_SIZE; } else { if(EDNS_FRAG_SIZE_IP4 < EDNS_ADVERTISED_SIZE) edns.udp_size = EDNS_FRAG_SIZE_IP4; else edns.udp_size = EDNS_ADVERTISED_SIZE; } } else { edns.udp_size = EDNS_ADVERTISED_SIZE; } edns.bits = 0; if(sq->dnssec & EDNS_DO) edns.bits = EDNS_DO; if(sq->dnssec & BIT_CD) LDNS_CD_SET(sldns_buffer_begin(buff)); if (sq->ssl_upstream && sq->padding_block_size) { padding_option.opt_code = LDNS_EDNS_PADDING; padding_option.opt_len = 0; padding_option.opt_data = NULL; padding_option.next = edns.opt_list; edns.opt_list = &padding_option; edns.padding_block_size = sq->padding_block_size; } attach_edns_record(buff, &edns); } } /** * Perform serviced query UDP sending operation. * Sends UDP with EDNS, unless infra host marked non EDNS. * @param sq: query to send. * @param buff: buffer scratch space. * @return 0 on error. */ static int serviced_udp_send(struct serviced_query* sq, sldns_buffer* buff) { int rtt, vs; uint8_t edns_lame_known; time_t now = *sq->outnet->now_secs; if(!infra_host(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, now, &vs, &edns_lame_known, &rtt)) return 0; sq->last_rtt = rtt; verbose(VERB_ALGO, "EDNS lookup known=%d vs=%d", edns_lame_known, vs); if(sq->status == serviced_initial) { if(vs != -1) { sq->status = serviced_query_UDP_EDNS; } else { sq->status = serviced_query_UDP; } } serviced_encode(sq, buff, (sq->status == serviced_query_UDP_EDNS) || (sq->status == serviced_query_UDP_EDNS_FRAG)); sq->last_sent_time = *sq->outnet->now_tv; sq->edns_lame_known = (int)edns_lame_known; verbose(VERB_ALGO, "serviced query UDP timeout=%d msec", rtt); sq->pending = pending_udp_query(sq, buff, rtt, serviced_udp_callback, sq); if(!sq->pending) return 0; return 1; } /** check that perturbed qname is identical */ static int serviced_check_qname(sldns_buffer* pkt, uint8_t* qbuf, size_t qbuflen) { uint8_t* d1 = sldns_buffer_begin(pkt)+12; uint8_t* d2 = qbuf+10; uint8_t len1, len2; int count = 0; if(sldns_buffer_limit(pkt) < 12+1+4) /* packet too small for qname */ return 0; log_assert(qbuflen >= 15 /* 10 header, root, type, class */); len1 = *d1++; len2 = *d2++; while(len1 != 0 || len2 != 0) { if(LABEL_IS_PTR(len1)) { /* check if we can read *d1 with compression ptr rest */ if(d1 >= sldns_buffer_at(pkt, sldns_buffer_limit(pkt))) return 0; d1 = sldns_buffer_begin(pkt)+PTR_OFFSET(len1, *d1); /* check if we can read the destination *d1 */ if(d1 >= sldns_buffer_at(pkt, sldns_buffer_limit(pkt))) return 0; len1 = *d1++; if(count++ > MAX_COMPRESS_PTRS) return 0; continue; } if(d2 > qbuf+qbuflen) return 0; if(len1 != len2) return 0; if(len1 > LDNS_MAX_LABELLEN) return 0; /* check len1 + 1(next length) are okay to read */ if(d1+len1 >= sldns_buffer_at(pkt, sldns_buffer_limit(pkt))) return 0; log_assert(len1 <= LDNS_MAX_LABELLEN); log_assert(len2 <= LDNS_MAX_LABELLEN); log_assert(len1 == len2 && len1 != 0); /* compare the labels - bitwise identical */ if(memcmp(d1, d2, len1) != 0) return 0; d1 += len1; d2 += len2; len1 = *d1++; len2 = *d2++; } return 1; } /** call the callbacks for a serviced query */ static void serviced_callbacks(struct serviced_query* sq, int error, struct comm_point* c, struct comm_reply* rep) { struct service_callback* p; int dobackup = (sq->cblist && sq->cblist->next); /* >1 cb*/ uint8_t *backup_p = NULL; size_t backlen = 0; #ifdef UNBOUND_DEBUG rbnode_type* rem = #else (void) #endif /* remove from tree, and schedule for deletion, so that callbacks * can safely deregister themselves and even create new serviced * queries that are identical to this one. */ rbtree_delete(sq->outnet->serviced, sq); log_assert(rem); /* should have been present */ sq->to_be_deleted = 1; verbose(VERB_ALGO, "svcd callbacks start"); if(sq->outnet->use_caps_for_id && error == NETEVENT_NOERROR && c && !sq->nocaps && sq->qtype != LDNS_RR_TYPE_PTR) { /* for type PTR do not check perturbed name in answer, * compatibility with cisco dns guard boxes that mess up * reverse queries 0x20 contents */ /* noerror and nxdomain must have a qname in reply */ if(sldns_buffer_read_u16_at(c->buffer, 4) == 0 && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOERROR || LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NXDOMAIN)) { verbose(VERB_DETAIL, "no qname in reply to check 0x20ID"); log_addr(VERB_DETAIL, "from server", &sq->addr, sq->addrlen); log_buf(VERB_DETAIL, "for packet", c->buffer); error = NETEVENT_CLOSED; c = NULL; } else if(sldns_buffer_read_u16_at(c->buffer, 4) > 0 && !serviced_check_qname(c->buffer, sq->qbuf, sq->qbuflen)) { verbose(VERB_DETAIL, "wrong 0x20-ID in reply qname"); log_addr(VERB_DETAIL, "from server", &sq->addr, sq->addrlen); log_buf(VERB_DETAIL, "for packet", c->buffer); error = NETEVENT_CAPSFAIL; /* and cleanup too */ pkt_dname_tolower(c->buffer, sldns_buffer_at(c->buffer, 12)); } else { verbose(VERB_ALGO, "good 0x20-ID in reply qname"); /* cleanup caps, prettier cache contents. */ pkt_dname_tolower(c->buffer, sldns_buffer_at(c->buffer, 12)); } } if(dobackup && c) { /* make a backup of the query, since the querystate processing * may send outgoing queries that overwrite the buffer. * use secondary buffer to store the query. * This is a data copy, but faster than packet to server */ backlen = sldns_buffer_limit(c->buffer); backup_p = memdup(sldns_buffer_begin(c->buffer), backlen); if(!backup_p) { log_err("malloc failure in serviced query callbacks"); error = NETEVENT_CLOSED; c = NULL; } sq->outnet->svcd_overhead = backlen; } /* test the actual sq->cblist, because the next elem could be deleted*/ while((p=sq->cblist) != NULL) { sq->cblist = p->next; /* remove this element */ if(dobackup && c) { sldns_buffer_clear(c->buffer); sldns_buffer_write(c->buffer, backup_p, backlen); sldns_buffer_flip(c->buffer); } fptr_ok(fptr_whitelist_serviced_query(p->cb)); (void)(*p->cb)(c, p->cb_arg, error, rep); free(p); } if(backup_p) { free(backup_p); sq->outnet->svcd_overhead = 0; } verbose(VERB_ALGO, "svcd callbacks end"); log_assert(sq->cblist == NULL); serviced_delete(sq); } int serviced_tcp_callback(struct comm_point* c, void* arg, int error, struct comm_reply* rep) { struct serviced_query* sq = (struct serviced_query*)arg; struct comm_reply r2; sq->pending = NULL; /* removed after this callback */ if(error != NETEVENT_NOERROR) log_addr(VERB_QUERY, "tcp error for address", &sq->addr, sq->addrlen); if(error==NETEVENT_NOERROR) infra_update_tcp_works(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen); #ifdef USE_DNSTAP if(error==NETEVENT_NOERROR && sq->outnet->dtenv && (sq->outnet->dtenv->log_resolver_response_messages || sq->outnet->dtenv->log_forwarder_response_messages)) dt_msg_send_outside_response(sq->outnet->dtenv, &sq->addr, c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, &sq->last_sent_time, sq->outnet->now_tv, c->buffer); #endif if(error==NETEVENT_NOERROR && sq->status == serviced_query_TCP_EDNS && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_FORMERR || LDNS_RCODE_WIRE(sldns_buffer_begin( c->buffer)) == LDNS_RCODE_NOTIMPL) ) { /* attempt to fallback to nonEDNS */ sq->status = serviced_query_TCP_EDNS_fallback; serviced_tcp_initiate(sq, c->buffer); return 0; } else if(error==NETEVENT_NOERROR && sq->status == serviced_query_TCP_EDNS_fallback && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOERROR || LDNS_RCODE_WIRE( sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NXDOMAIN || LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_YXDOMAIN)) { /* the fallback produced a result that looks promising, note * that this server should be approached without EDNS */ /* only store noEDNS in cache if domain is noDNSSEC */ if(!sq->want_dnssec) if(!infra_edns_update(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, -1, *sq->outnet->now_secs)) log_err("Out of memory caching no edns for host"); sq->status = serviced_query_TCP; } if(sq->tcp_upstream || sq->ssl_upstream) { struct timeval now = *sq->outnet->now_tv; if(error!=NETEVENT_NOERROR) { if(!infra_rtt_update(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, sq->qtype, -1, sq->last_rtt, (time_t)now.tv_sec)) log_err("out of memory in TCP exponential backoff."); } else if(now.tv_sec > sq->last_sent_time.tv_sec || (now.tv_sec == sq->last_sent_time.tv_sec && now.tv_usec > sq->last_sent_time.tv_usec)) { /* convert from microseconds to milliseconds */ int roundtime = ((int)(now.tv_sec - sq->last_sent_time.tv_sec))*1000 + ((int)now.tv_usec - (int)sq->last_sent_time.tv_usec)/1000; verbose(VERB_ALGO, "measured TCP-time at %d msec", roundtime); log_assert(roundtime >= 0); /* only store if less then AUTH_TIMEOUT seconds, it could be * huge due to system-hibernated and we woke up */ if(roundtime < 60000) { if(!infra_rtt_update(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, sq->qtype, roundtime, sq->last_rtt, (time_t)now.tv_sec)) log_err("out of memory noting rtt."); } } } /* insert address into reply info */ if(!rep) { /* create one if there isn't (on errors) */ rep = &r2; r2.c = c; } memcpy(&rep->addr, &sq->addr, sq->addrlen); rep->addrlen = sq->addrlen; serviced_callbacks(sq, error, c, rep); return 0; } static void serviced_tcp_initiate(struct serviced_query* sq, sldns_buffer* buff) { verbose(VERB_ALGO, "initiate TCP query %s", sq->status==serviced_query_TCP_EDNS?"EDNS":""); serviced_encode(sq, buff, sq->status == serviced_query_TCP_EDNS); sq->last_sent_time = *sq->outnet->now_tv; sq->pending = pending_tcp_query(sq, buff, TCP_AUTH_QUERY_TIMEOUT, serviced_tcp_callback, sq); if(!sq->pending) { /* delete from tree so that a retry by above layer does not * clash with this entry */ verbose(VERB_ALGO, "serviced_tcp_initiate: failed to send tcp query"); serviced_callbacks(sq, NETEVENT_CLOSED, NULL, NULL); } } /** Send serviced query over TCP return false on initial failure */ static int serviced_tcp_send(struct serviced_query* sq, sldns_buffer* buff) { int vs, rtt, timeout; uint8_t edns_lame_known; if(!infra_host(sq->outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, *sq->outnet->now_secs, &vs, &edns_lame_known, &rtt)) return 0; sq->last_rtt = rtt; if(vs != -1) sq->status = serviced_query_TCP_EDNS; else sq->status = serviced_query_TCP; serviced_encode(sq, buff, sq->status == serviced_query_TCP_EDNS); sq->last_sent_time = *sq->outnet->now_tv; if(sq->tcp_upstream || sq->ssl_upstream) { timeout = rtt; if(rtt >= UNKNOWN_SERVER_NICENESS && rtt < TCP_AUTH_QUERY_TIMEOUT) timeout = TCP_AUTH_QUERY_TIMEOUT; } else { timeout = TCP_AUTH_QUERY_TIMEOUT; } sq->pending = pending_tcp_query(sq, buff, timeout, serviced_tcp_callback, sq); return sq->pending != NULL; } /* see if packet is edns malformed; got zeroes at start. * This is from servers that return malformed packets to EDNS0 queries, * but they return good packets for nonEDNS0 queries. * We try to detect their output; without resorting to a full parse or * check for too many bytes after the end of the packet. */ static int packet_edns_malformed(struct sldns_buffer* buf, int qtype) { size_t len; if(sldns_buffer_limit(buf) < LDNS_HEADER_SIZE) return 1; /* malformed */ /* they have NOERROR rcode, 1 answer. */ if(LDNS_RCODE_WIRE(sldns_buffer_begin(buf)) != LDNS_RCODE_NOERROR) return 0; /* one query (to skip) and answer records */ if(LDNS_QDCOUNT(sldns_buffer_begin(buf)) != 1 || LDNS_ANCOUNT(sldns_buffer_begin(buf)) == 0) return 0; /* skip qname */ len = dname_valid(sldns_buffer_at(buf, LDNS_HEADER_SIZE), sldns_buffer_limit(buf)-LDNS_HEADER_SIZE); if(len == 0) return 0; if(len == 1 && qtype == 0) return 0; /* we asked for '.' and type 0 */ /* and then 4 bytes (type and class of query) */ if(sldns_buffer_limit(buf) < LDNS_HEADER_SIZE + len + 4 + 3) return 0; /* and start with 11 zeroes as the answer RR */ /* so check the qtype of the answer record, qname=0, type=0 */ if(sldns_buffer_at(buf, LDNS_HEADER_SIZE+len+4)[0] == 0 && sldns_buffer_at(buf, LDNS_HEADER_SIZE+len+4)[1] == 0 && sldns_buffer_at(buf, LDNS_HEADER_SIZE+len+4)[2] == 0) return 1; return 0; } int serviced_udp_callback(struct comm_point* c, void* arg, int error, struct comm_reply* rep) { struct serviced_query* sq = (struct serviced_query*)arg; struct outside_network* outnet = sq->outnet; struct timeval now = *sq->outnet->now_tv; sq->pending = NULL; /* removed after callback */ if(error == NETEVENT_TIMEOUT) { if(sq->status == serviced_query_UDP_EDNS && sq->last_rtt < 5000) { /* fallback to 1480/1280 */ sq->status = serviced_query_UDP_EDNS_FRAG; log_name_addr(VERB_ALGO, "try edns1xx0", sq->qbuf+10, &sq->addr, sq->addrlen); if(!serviced_udp_send(sq, c->buffer)) { serviced_callbacks(sq, NETEVENT_CLOSED, c, rep); } return 0; } if(sq->status == serviced_query_UDP_EDNS_FRAG) { /* fragmentation size did not fix it */ sq->status = serviced_query_UDP_EDNS; } sq->retry++; if(!infra_rtt_update(outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, sq->qtype, -1, sq->last_rtt, (time_t)now.tv_sec)) log_err("out of memory in UDP exponential backoff"); if(sq->retry < OUTBOUND_UDP_RETRY) { log_name_addr(VERB_ALGO, "retry query", sq->qbuf+10, &sq->addr, sq->addrlen); if(!serviced_udp_send(sq, c->buffer)) { serviced_callbacks(sq, NETEVENT_CLOSED, c, rep); } return 0; } } if(error != NETEVENT_NOERROR) { /* udp returns error (due to no ID or interface available) */ serviced_callbacks(sq, error, c, rep); return 0; } #ifdef USE_DNSTAP if(error == NETEVENT_NOERROR && outnet->dtenv && (outnet->dtenv->log_resolver_response_messages || outnet->dtenv->log_forwarder_response_messages)) dt_msg_send_outside_response(outnet->dtenv, &sq->addr, c->type, sq->zone, sq->zonelen, sq->qbuf, sq->qbuflen, &sq->last_sent_time, sq->outnet->now_tv, c->buffer); #endif if( (sq->status == serviced_query_UDP_EDNS ||sq->status == serviced_query_UDP_EDNS_FRAG) && (LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_FORMERR || LDNS_RCODE_WIRE( sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOTIMPL || packet_edns_malformed(c->buffer, sq->qtype) )) { /* try to get an answer by falling back without EDNS */ verbose(VERB_ALGO, "serviced query: attempt without EDNS"); sq->status = serviced_query_UDP_EDNS_fallback; sq->retry = 0; if(!serviced_udp_send(sq, c->buffer)) { serviced_callbacks(sq, NETEVENT_CLOSED, c, rep); } return 0; } else if(sq->status == serviced_query_UDP_EDNS && !sq->edns_lame_known) { /* now we know that edns queries received answers store that */ log_addr(VERB_ALGO, "serviced query: EDNS works for", &sq->addr, sq->addrlen); if(!infra_edns_update(outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, 0, (time_t)now.tv_sec)) { log_err("Out of memory caching edns works"); } sq->edns_lame_known = 1; } else if(sq->status == serviced_query_UDP_EDNS_fallback && !sq->edns_lame_known && (LDNS_RCODE_WIRE( sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NOERROR || LDNS_RCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_RCODE_NXDOMAIN || LDNS_RCODE_WIRE(sldns_buffer_begin( c->buffer)) == LDNS_RCODE_YXDOMAIN)) { /* the fallback produced a result that looks promising, note * that this server should be approached without EDNS */ /* only store noEDNS in cache if domain is noDNSSEC */ if(!sq->want_dnssec) { log_addr(VERB_ALGO, "serviced query: EDNS fails for", &sq->addr, sq->addrlen); if(!infra_edns_update(outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, -1, (time_t)now.tv_sec)) { log_err("Out of memory caching no edns for host"); } } else { log_addr(VERB_ALGO, "serviced query: EDNS fails, but " "not stored because need DNSSEC for", &sq->addr, sq->addrlen); } sq->status = serviced_query_UDP; } if(now.tv_sec > sq->last_sent_time.tv_sec || (now.tv_sec == sq->last_sent_time.tv_sec && now.tv_usec > sq->last_sent_time.tv_usec)) { /* convert from microseconds to milliseconds */ int roundtime = ((int)(now.tv_sec - sq->last_sent_time.tv_sec))*1000 + ((int)now.tv_usec - (int)sq->last_sent_time.tv_usec)/1000; verbose(VERB_ALGO, "measured roundtrip at %d msec", roundtime); log_assert(roundtime >= 0); /* in case the system hibernated, do not enter a huge value, * above this value gives trouble with server selection */ if(roundtime < 60000) { if(!infra_rtt_update(outnet->infra, &sq->addr, sq->addrlen, sq->zone, sq->zonelen, sq->qtype, roundtime, sq->last_rtt, (time_t)now.tv_sec)) log_err("out of memory noting rtt."); } } /* perform TC flag check and TCP fallback after updating our * cache entries for EDNS status and RTT times */ if(LDNS_TC_WIRE(sldns_buffer_begin(c->buffer))) { /* fallback to TCP */ /* this discards partial UDP contents */ if(sq->status == serviced_query_UDP_EDNS || sq->status == serviced_query_UDP_EDNS_FRAG || sq->status == serviced_query_UDP_EDNS_fallback) /* if we have unfinished EDNS_fallback, start again */ sq->status = serviced_query_TCP_EDNS; else sq->status = serviced_query_TCP; serviced_tcp_initiate(sq, c->buffer); return 0; } /* yay! an answer */ serviced_callbacks(sq, error, c, rep); return 0; } struct serviced_query* outnet_serviced_query(struct outside_network* outnet, struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct module_qstate* qstate, comm_point_callback_type* callback, void* callback_arg, sldns_buffer* buff, struct module_env* env) { struct serviced_query* sq; struct service_callback* cb; struct edns_string_addr* client_string_addr; if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen, qstate, qstate->region)) return NULL; if((client_string_addr = edns_string_addr_lookup( &env->edns_strings->client_strings, addr, addrlen))) { edns_opt_list_append(&qstate->edns_opts_back_out, env->edns_strings->client_string_opcode, client_string_addr->string_len, client_string_addr->string, qstate->region); } serviced_gen_query(buff, qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, flags); sq = lookup_serviced(outnet, buff, dnssec, addr, addrlen, qstate->edns_opts_back_out); /* duplicate entries are included in the callback list, because * there is a counterpart registration by our caller that needs to * be doubly-removed (with callbacks perhaps). */ if(!(cb = (struct service_callback*)malloc(sizeof(*cb)))) return NULL; if(!sq) { /* make new serviced query entry */ sq = serviced_create(outnet, buff, dnssec, want_dnssec, nocaps, tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, (int)qinfo->qtype, qstate->edns_opts_back_out, ( ssl_upstream && env->cfg->pad_queries ? env->cfg->pad_queries_block_size : 0 )); if(!sq) { free(cb); return NULL; } /* perform first network action */ if(outnet->do_udp && !(tcp_upstream || ssl_upstream)) { if(!serviced_udp_send(sq, buff)) { (void)rbtree_delete(outnet->serviced, sq); serviced_node_del(&sq->node, NULL); free(cb); return NULL; } } else { if(!serviced_tcp_send(sq, buff)) { (void)rbtree_delete(outnet->serviced, sq); serviced_node_del(&sq->node, NULL); free(cb); return NULL; } } } /* add callback to list of callbacks */ cb->cb = callback; cb->cb_arg = callback_arg; cb->next = sq->cblist; sq->cblist = cb; return sq; } /** remove callback from list */ static void callback_list_remove(struct serviced_query* sq, void* cb_arg) { struct service_callback** pp = &sq->cblist; while(*pp) { if((*pp)->cb_arg == cb_arg) { struct service_callback* del = *pp; *pp = del->next; free(del); return; } pp = &(*pp)->next; } } void outnet_serviced_query_stop(struct serviced_query* sq, void* cb_arg) { if(!sq) return; callback_list_remove(sq, cb_arg); /* if callbacks() routine scheduled deletion, let it do that */ if(!sq->cblist && !sq->to_be_deleted) { (void)rbtree_delete(sq->outnet->serviced, sq); serviced_delete(sq); } } /** create fd to send to this destination */ static int fd_for_dest(struct outside_network* outnet, struct sockaddr_storage* to_addr, socklen_t to_addrlen) { struct sockaddr_storage* addr; socklen_t addrlen; int i, try, pnum, dscp; struct port_if* pif; /* create fd */ dscp = outnet->ip_dscp; for(try = 0; try<1000; try++) { int port = 0; int freebind = 0; int noproto = 0; int inuse = 0; int fd = -1; /* select interface */ if(addr_is_ip6(to_addr, to_addrlen)) { if(outnet->num_ip6 == 0) { char to[64]; addr_to_str(to_addr, to_addrlen, to, sizeof(to)); verbose(VERB_QUERY, "need ipv6 to send, but no ipv6 outgoing interfaces, for %s", to); return -1; } i = ub_random_max(outnet->rnd, outnet->num_ip6); pif = &outnet->ip6_ifs[i]; } else { if(outnet->num_ip4 == 0) { char to[64]; addr_to_str(to_addr, to_addrlen, to, sizeof(to)); verbose(VERB_QUERY, "need ipv4 to send, but no ipv4 outgoing interfaces, for %s", to); return -1; } i = ub_random_max(outnet->rnd, outnet->num_ip4); pif = &outnet->ip4_ifs[i]; } addr = &pif->addr; addrlen = pif->addrlen; #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION pnum = ub_random_max(outnet->rnd, pif->avail_total); if(pnum < pif->inuse) { /* port already open */ port = pif->out[pnum]->number; } else { /* unused ports in start part of array */ port = pif->avail_ports[pnum - pif->inuse]; } #else pnum = port = 0; #endif if(addr_is_ip6(to_addr, to_addrlen)) { struct sockaddr_in6 sa = *(struct sockaddr_in6*)addr; sa.sin6_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET6, SOCK_DGRAM, (struct sockaddr*)&sa, addrlen, 1, &inuse, &noproto, 0, 0, 0, NULL, 0, freebind, 0, dscp); } else { struct sockaddr_in* sa = (struct sockaddr_in*)addr; sa->sin_port = (in_port_t)htons((uint16_t)port); fd = create_udp_sock(AF_INET, SOCK_DGRAM, (struct sockaddr*)addr, addrlen, 1, &inuse, &noproto, 0, 0, 0, NULL, 0, freebind, 0, dscp); } if(fd != -1) { return fd; } if(!inuse) { return -1; } } /* too many tries */ log_err("cannot send probe, ports are in use"); return -1; } struct comm_point* outnet_comm_point_for_udp(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen) { struct comm_point* cp; int fd = fd_for_dest(outnet, to_addr, to_addrlen); if(fd == -1) { return NULL; } cp = comm_point_create_udp(outnet->base, fd, outnet->udp_buff, cb, cb_arg); if(!cp) { log_err("malloc failure"); close(fd); return NULL; } return cp; } /** setup SSL for comm point */ static int setup_comm_ssl(struct comm_point* cp, struct outside_network* outnet, int fd, char* host) { cp->ssl = outgoing_ssl_fd(outnet->sslctx, fd); if(!cp->ssl) { log_err("cannot create SSL object"); return 0; } #ifdef USE_WINSOCK comm_point_tcp_win_bio_cb(cp, cp->ssl); #endif cp->ssl_shake_state = comm_ssl_shake_write; /* https verification */ #ifdef HAVE_SSL if(outnet->tls_use_sni) { (void)SSL_set_tlsext_host_name(cp->ssl, host); } #endif #ifdef HAVE_SSL_SET1_HOST if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) { /* because we set SSL_VERIFY_PEER, in netevent in * ssl_handshake, it'll check if the certificate * verification has succeeded */ /* SSL_VERIFY_PEER is set on the sslctx */ /* and the certificates to verify with are loaded into * it with SSL_load_verify_locations or * SSL_CTX_set_default_verify_paths */ /* setting the hostname makes openssl verify the * host name in the x509 certificate in the * SSL connection*/ if(!SSL_set1_host(cp->ssl, host)) { log_err("SSL_set1_host failed"); return 0; } } #elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) /* openssl 1.0.2 has this function that can be used for * set1_host like verification */ if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) { X509_VERIFY_PARAM* param = SSL_get0_param(cp->ssl); # ifdef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); # endif if(!X509_VERIFY_PARAM_set1_host(param, host, strlen(host))) { log_err("X509_VERIFY_PARAM_set1_host failed"); return 0; } } #else (void)host; #endif /* HAVE_SSL_SET1_HOST */ return 1; } struct comm_point* outnet_comm_point_for_tcp(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen, sldns_buffer* query, int timeout, int ssl, char* host) { struct comm_point* cp; int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp); if(fd == -1) { return 0; } fd_set_nonblock(fd); if(!outnet_tcp_connect(fd, to_addr, to_addrlen)) { /* outnet_tcp_connect has closed fd on error for us */ return 0; } cp = comm_point_create_tcp_out(outnet->base, 65552, cb, cb_arg); if(!cp) { log_err("malloc failure"); close(fd); return 0; } cp->repinfo.addrlen = to_addrlen; memcpy(&cp->repinfo.addr, to_addr, to_addrlen); /* setup for SSL (if needed) */ if(ssl) { if(!setup_comm_ssl(cp, outnet, fd, host)) { log_err("cannot setup XoT"); comm_point_delete(cp); return NULL; } } /* set timeout on TCP connection */ comm_point_start_listening(cp, fd, timeout); /* copy scratch buffer to cp->buffer */ sldns_buffer_copy(cp->buffer, query); return cp; } /** setup http request headers in buffer for sending query to destination */ static int setup_http_request(sldns_buffer* buf, char* host, char* path) { sldns_buffer_clear(buf); sldns_buffer_printf(buf, "GET /%s HTTP/1.1\r\n", path); sldns_buffer_printf(buf, "Host: %s\r\n", host); sldns_buffer_printf(buf, "User-Agent: unbound/%s\r\n", PACKAGE_VERSION); /* We do not really do multiple queries per connection, * but this header setting is also not needed. * sldns_buffer_printf(buf, "Connection: close\r\n") */ sldns_buffer_printf(buf, "\r\n"); if(sldns_buffer_position(buf)+10 > sldns_buffer_capacity(buf)) return 0; /* somehow buffer too short, but it is about 60K and the request is only a couple bytes long. */ sldns_buffer_flip(buf); return 1; } struct comm_point* outnet_comm_point_for_http(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen, int timeout, int ssl, char* host, char* path) { /* cp calls cb with err=NETEVENT_DONE when transfer is done */ struct comm_point* cp; int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp); if(fd == -1) { return 0; } fd_set_nonblock(fd); if(!outnet_tcp_connect(fd, to_addr, to_addrlen)) { /* outnet_tcp_connect has closed fd on error for us */ return 0; } cp = comm_point_create_http_out(outnet->base, 65552, cb, cb_arg, outnet->udp_buff); if(!cp) { log_err("malloc failure"); close(fd); return 0; } cp->repinfo.addrlen = to_addrlen; memcpy(&cp->repinfo.addr, to_addr, to_addrlen); /* setup for SSL (if needed) */ if(ssl) { if(!setup_comm_ssl(cp, outnet, fd, host)) { log_err("cannot setup https"); comm_point_delete(cp); return NULL; } } /* set timeout on TCP connection */ comm_point_start_listening(cp, fd, timeout); /* setup http request in cp->buffer */ if(!setup_http_request(cp->buffer, host, path)) { log_err("error setting up http request"); comm_point_delete(cp); return NULL; } return cp; } /** get memory used by waiting tcp entry (in use or not) */ static size_t waiting_tcp_get_mem(struct waiting_tcp* w) { size_t s; if(!w) return 0; s = sizeof(*w) + w->pkt_len; if(w->timer) s += comm_timer_get_mem(w->timer); return s; } /** get memory used by port if */ static size_t if_get_mem(struct port_if* pif) { size_t s; int i; s = sizeof(*pif) + #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION sizeof(int)*pif->avail_total + #endif sizeof(struct port_comm*)*pif->maxout; for(i=0; iinuse; i++) s += sizeof(*pif->out[i]) + comm_point_get_mem(pif->out[i]->cp); return s; } /** get memory used by waiting udp */ static size_t waiting_udp_get_mem(struct pending* w) { size_t s; s = sizeof(*w) + comm_timer_get_mem(w->timer) + w->pkt_len; return s; } size_t outnet_get_mem(struct outside_network* outnet) { size_t i; int k; struct waiting_tcp* w; struct pending* u; struct serviced_query* sq; struct service_callback* sb; struct port_comm* pc; size_t s = sizeof(*outnet) + sizeof(*outnet->base) + sizeof(*outnet->udp_buff) + sldns_buffer_capacity(outnet->udp_buff); /* second buffer is not ours */ for(pc = outnet->unused_fds; pc; pc = pc->next) { s += sizeof(*pc) + comm_point_get_mem(pc->cp); } for(k=0; knum_ip4; k++) s += if_get_mem(&outnet->ip4_ifs[k]); for(k=0; knum_ip6; k++) s += if_get_mem(&outnet->ip6_ifs[k]); for(u=outnet->udp_wait_first; u; u=u->next_waiting) s += waiting_udp_get_mem(u); s += sizeof(struct pending_tcp*)*outnet->num_tcp; for(i=0; inum_tcp; i++) { s += sizeof(struct pending_tcp); s += comm_point_get_mem(outnet->tcp_conns[i]->c); if(outnet->tcp_conns[i]->query) s += waiting_tcp_get_mem(outnet->tcp_conns[i]->query); } for(w=outnet->tcp_wait_first; w; w = w->next_waiting) s += waiting_tcp_get_mem(w); s += sizeof(*outnet->pending); s += (sizeof(struct pending) + comm_timer_get_mem(NULL)) * outnet->pending->count; s += sizeof(*outnet->serviced); s += outnet->svcd_overhead; RBTREE_FOR(sq, struct serviced_query*, outnet->serviced) { s += sizeof(*sq) + sq->qbuflen; for(sb = sq->cblist; sb; sb = sb->next) s += sizeof(*sb); } return s; } size_t serviced_get_mem(struct serviced_query* sq) { struct service_callback* sb; size_t s; s = sizeof(*sq) + sq->qbuflen; for(sb = sq->cblist; sb; sb = sb->next) s += sizeof(*sb); if(sq->status == serviced_query_UDP_EDNS || sq->status == serviced_query_UDP || sq->status == serviced_query_UDP_EDNS_FRAG || sq->status == serviced_query_UDP_EDNS_fallback) { s += sizeof(struct pending); s += comm_timer_get_mem(NULL); } else { /* does not have size of the pkt pointer */ /* always has a timer except on malloc failures */ /* these sizes are part of the main outside network mem */ /* s += sizeof(struct waiting_tcp); s += comm_timer_get_mem(NULL); */ } return s; } unbound-1.13.1/services/authzone.c0000644000175000017500000062476614010434640016550 0ustar wouterwouter/* * services/authzone.c - authoritative zone that is locally hosted. * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the functions for an authority zone. This zone * is queried by the iterator, just like a stub or forward zone, but then * the data is locally held. */ #include "config.h" #include "services/authzone.h" #include "util/data/dname.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/msgencode.h" #include "util/data/packed_rrset.h" #include "util/regional.h" #include "util/net_help.h" #include "util/netevent.h" #include "util/config_file.h" #include "util/log.h" #include "util/module.h" #include "util/random.h" #include "services/cache/dns.h" #include "services/outside_network.h" #include "services/listen_dnsport.h" #include "services/mesh.h" #include "sldns/rrdef.h" #include "sldns/pkthdr.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #include "sldns/wire2str.h" #include "sldns/parseutil.h" #include "sldns/keyraw.h" #include "validator/val_nsec3.h" #include "validator/val_secalgo.h" #include /** bytes to use for NSEC3 hash buffer. 20 for sha1 */ #define N3HASHBUFLEN 32 /** max number of CNAMEs we are willing to follow (in one answer) */ #define MAX_CNAME_CHAIN 8 /** timeout for probe packets for SOA */ #define AUTH_PROBE_TIMEOUT 100 /* msec */ /** when to stop with SOA probes (when exponential timeouts exceed this) */ #define AUTH_PROBE_TIMEOUT_STOP 1000 /* msec */ /* auth transfer timeout for TCP connections, in msec */ #define AUTH_TRANSFER_TIMEOUT 10000 /* msec */ /* auth transfer max backoff for failed tranfers and probes */ #define AUTH_TRANSFER_MAX_BACKOFF 86400 /* sec */ /* auth http port number */ #define AUTH_HTTP_PORT 80 /* auth https port number */ #define AUTH_HTTPS_PORT 443 /* max depth for nested $INCLUDEs */ #define MAX_INCLUDE_DEPTH 10 /** number of timeouts before we fallback from IXFR to AXFR, * because some versions of servers (eg. dnsmasq) drop IXFR packets. */ #define NUM_TIMEOUTS_FALLBACK_IXFR 3 /** pick up nextprobe task to start waiting to perform transfer actions */ static void xfr_set_timeout(struct auth_xfer* xfr, struct module_env* env, int failure, int lookup_only); /** move to sending the probe packets, next if fails. task_probe */ static void xfr_probe_send_or_end(struct auth_xfer* xfr, struct module_env* env); /** pick up probe task with specified(or NULL) destination first, * or transfer task if nothing to probe, or false if already in progress */ static int xfr_start_probe(struct auth_xfer* xfr, struct module_env* env, struct auth_master* spec); /** delete xfer structure (not its tree entry) */ void auth_xfer_delete(struct auth_xfer* xfr); /** create new dns_msg */ static struct dns_msg* msg_create(struct regional* region, struct query_info* qinfo) { struct dns_msg* msg = (struct dns_msg*)regional_alloc(region, sizeof(struct dns_msg)); if(!msg) return NULL; msg->qinfo.qname = regional_alloc_init(region, qinfo->qname, qinfo->qname_len); if(!msg->qinfo.qname) return NULL; msg->qinfo.qname_len = qinfo->qname_len; msg->qinfo.qtype = qinfo->qtype; msg->qinfo.qclass = qinfo->qclass; msg->qinfo.local_alias = NULL; /* non-packed reply_info, because it needs to grow the array */ msg->rep = (struct reply_info*)regional_alloc_zero(region, sizeof(struct reply_info)-sizeof(struct rrset_ref)); if(!msg->rep) return NULL; msg->rep->flags = (uint16_t)(BIT_QR | BIT_AA); msg->rep->authoritative = 1; msg->rep->qdcount = 1; /* rrsets is NULL, no rrsets yet */ return msg; } /** grow rrset array by one in msg */ static int msg_grow_array(struct regional* region, struct dns_msg* msg) { if(msg->rep->rrsets == NULL) { msg->rep->rrsets = regional_alloc_zero(region, sizeof(struct ub_packed_rrset_key*)*(msg->rep->rrset_count+1)); if(!msg->rep->rrsets) return 0; } else { struct ub_packed_rrset_key** rrsets_old = msg->rep->rrsets; msg->rep->rrsets = regional_alloc_zero(region, sizeof(struct ub_packed_rrset_key*)*(msg->rep->rrset_count+1)); if(!msg->rep->rrsets) return 0; memmove(msg->rep->rrsets, rrsets_old, sizeof(struct ub_packed_rrset_key*)*msg->rep->rrset_count); } return 1; } /** get ttl of rrset */ static time_t get_rrset_ttl(struct ub_packed_rrset_key* k) { struct packed_rrset_data* d = (struct packed_rrset_data*) k->entry.data; return d->ttl; } /** Copy rrset into region from domain-datanode and packet rrset */ static struct ub_packed_rrset_key* auth_packed_rrset_copy_region(struct auth_zone* z, struct auth_data* node, struct auth_rrset* rrset, struct regional* region, time_t adjust) { struct ub_packed_rrset_key key; memset(&key, 0, sizeof(key)); key.entry.key = &key; key.entry.data = rrset->data; key.rk.dname = node->name; key.rk.dname_len = node->namelen; key.rk.type = htons(rrset->type); key.rk.rrset_class = htons(z->dclass); key.entry.hash = rrset_key_hash(&key.rk); return packed_rrset_copy_region(&key, region, adjust); } /** fix up msg->rep TTL and prefetch ttl */ static void msg_ttl(struct dns_msg* msg) { if(msg->rep->rrset_count == 0) return; if(msg->rep->rrset_count == 1) { msg->rep->ttl = get_rrset_ttl(msg->rep->rrsets[0]); msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; } else if(get_rrset_ttl(msg->rep->rrsets[msg->rep->rrset_count-1]) < msg->rep->ttl) { msg->rep->ttl = get_rrset_ttl(msg->rep->rrsets[ msg->rep->rrset_count-1]); msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; } } /** see if rrset is a duplicate in the answer message */ static int msg_rrset_duplicate(struct dns_msg* msg, uint8_t* nm, size_t nmlen, uint16_t type, uint16_t dclass) { size_t i; for(i=0; irep->rrset_count; i++) { struct ub_packed_rrset_key* k = msg->rep->rrsets[i]; if(ntohs(k->rk.type) == type && k->rk.dname_len == nmlen && ntohs(k->rk.rrset_class) == dclass && query_dname_compare(k->rk.dname, nm) == 0) return 1; } return 0; } /** add rrset to answer section (no auth, add rrsets yet) */ static int msg_add_rrset_an(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* node, struct auth_rrset* rrset) { log_assert(msg->rep->ns_numrrsets == 0); log_assert(msg->rep->ar_numrrsets == 0); if(!rrset || !node) return 1; if(msg_rrset_duplicate(msg, node->name, node->namelen, rrset->type, z->dclass)) return 1; /* grow array */ if(!msg_grow_array(region, msg)) return 0; /* copy it */ if(!(msg->rep->rrsets[msg->rep->rrset_count] = auth_packed_rrset_copy_region(z, node, rrset, region, 0))) return 0; msg->rep->rrset_count++; msg->rep->an_numrrsets++; msg_ttl(msg); return 1; } /** add rrset to authority section (no additonal section rrsets yet) */ static int msg_add_rrset_ns(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* node, struct auth_rrset* rrset) { log_assert(msg->rep->ar_numrrsets == 0); if(!rrset || !node) return 1; if(msg_rrset_duplicate(msg, node->name, node->namelen, rrset->type, z->dclass)) return 1; /* grow array */ if(!msg_grow_array(region, msg)) return 0; /* copy it */ if(!(msg->rep->rrsets[msg->rep->rrset_count] = auth_packed_rrset_copy_region(z, node, rrset, region, 0))) return 0; msg->rep->rrset_count++; msg->rep->ns_numrrsets++; msg_ttl(msg); return 1; } /** add rrset to additional section */ static int msg_add_rrset_ar(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* node, struct auth_rrset* rrset) { if(!rrset || !node) return 1; if(msg_rrset_duplicate(msg, node->name, node->namelen, rrset->type, z->dclass)) return 1; /* grow array */ if(!msg_grow_array(region, msg)) return 0; /* copy it */ if(!(msg->rep->rrsets[msg->rep->rrset_count] = auth_packed_rrset_copy_region(z, node, rrset, region, 0))) return 0; msg->rep->rrset_count++; msg->rep->ar_numrrsets++; msg_ttl(msg); return 1; } struct auth_zones* auth_zones_create(void) { struct auth_zones* az = (struct auth_zones*)calloc(1, sizeof(*az)); if(!az) { log_err("out of memory"); return NULL; } rbtree_init(&az->ztree, &auth_zone_cmp); rbtree_init(&az->xtree, &auth_xfer_cmp); lock_rw_init(&az->lock); lock_protect(&az->lock, &az->ztree, sizeof(az->ztree)); lock_protect(&az->lock, &az->xtree, sizeof(az->xtree)); /* also lock protects the rbnode's in struct auth_zone, auth_xfer */ lock_rw_init(&az->rpz_lock); lock_protect(&az->rpz_lock, &az->rpz_first, sizeof(az->rpz_first)); return az; } int auth_zone_cmp(const void* z1, const void* z2) { /* first sort on class, so that hierarchy can be maintained within * a class */ struct auth_zone* a = (struct auth_zone*)z1; struct auth_zone* b = (struct auth_zone*)z2; int m; if(a->dclass != b->dclass) { if(a->dclass < b->dclass) return -1; return 1; } /* sorted such that higher zones sort before lower zones (their * contents) */ return dname_lab_cmp(a->name, a->namelabs, b->name, b->namelabs, &m); } int auth_data_cmp(const void* z1, const void* z2) { struct auth_data* a = (struct auth_data*)z1; struct auth_data* b = (struct auth_data*)z2; int m; /* canonical sort, because DNSSEC needs that */ return dname_canon_lab_cmp(a->name, a->namelabs, b->name, b->namelabs, &m); } int auth_xfer_cmp(const void* z1, const void* z2) { /* first sort on class, so that hierarchy can be maintained within * a class */ struct auth_xfer* a = (struct auth_xfer*)z1; struct auth_xfer* b = (struct auth_xfer*)z2; int m; if(a->dclass != b->dclass) { if(a->dclass < b->dclass) return -1; return 1; } /* sorted such that higher zones sort before lower zones (their * contents) */ return dname_lab_cmp(a->name, a->namelabs, b->name, b->namelabs, &m); } /** delete auth rrset node */ static void auth_rrset_delete(struct auth_rrset* rrset) { if(!rrset) return; free(rrset->data); free(rrset); } /** delete auth data domain node */ static void auth_data_delete(struct auth_data* n) { struct auth_rrset* p, *np; if(!n) return; p = n->rrsets; while(p) { np = p->next; auth_rrset_delete(p); p = np; } free(n->name); free(n); } /** helper traverse to delete zones */ static void auth_data_del(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct auth_data* z = (struct auth_data*)n->key; auth_data_delete(z); } /** delete an auth zone structure (tree remove must be done elsewhere) */ static void auth_zone_delete(struct auth_zone* z, struct auth_zones* az) { if(!z) return; lock_rw_destroy(&z->lock); traverse_postorder(&z->data, auth_data_del, NULL); if(az && z->rpz) { /* keep RPZ linked list intact */ lock_rw_wrlock(&az->rpz_lock); if(z->rpz_az_prev) z->rpz_az_prev->rpz_az_next = z->rpz_az_next; else az->rpz_first = z->rpz_az_next; if(z->rpz_az_next) z->rpz_az_next->rpz_az_prev = z->rpz_az_prev; lock_rw_unlock(&az->rpz_lock); } if(z->rpz) rpz_delete(z->rpz); free(z->name); free(z->zonefile); free(z); } struct auth_zone* auth_zone_create(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass) { struct auth_zone* z = (struct auth_zone*)calloc(1, sizeof(*z)); if(!z) { return NULL; } z->node.key = z; z->dclass = dclass; z->namelen = nmlen; z->namelabs = dname_count_labels(nm); z->name = memdup(nm, nmlen); if(!z->name) { free(z); return NULL; } rbtree_init(&z->data, &auth_data_cmp); lock_rw_init(&z->lock); lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type)- sizeof(&z->rpz_az_next)-sizeof(&z->rpz_az_prev)); lock_rw_wrlock(&z->lock); /* z lock protects all, except rbtree itself and the rpz linked list * pointers, which are protected using az->lock */ if(!rbtree_insert(&az->ztree, &z->node)) { lock_rw_unlock(&z->lock); auth_zone_delete(z, NULL); log_warn("duplicate auth zone"); return NULL; } return z; } struct auth_zone* auth_zone_find(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass) { struct auth_zone key; key.node.key = &key; key.dclass = dclass; key.name = nm; key.namelen = nmlen; key.namelabs = dname_count_labels(nm); return (struct auth_zone*)rbtree_search(&az->ztree, &key); } struct auth_xfer* auth_xfer_find(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass) { struct auth_xfer key; key.node.key = &key; key.dclass = dclass; key.name = nm; key.namelen = nmlen; key.namelabs = dname_count_labels(nm); return (struct auth_xfer*)rbtree_search(&az->xtree, &key); } /** find an auth zone or sorted less-or-equal, return true if exact */ static int auth_zone_find_less_equal(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass, struct auth_zone** z) { struct auth_zone key; key.node.key = &key; key.dclass = dclass; key.name = nm; key.namelen = nmlen; key.namelabs = dname_count_labels(nm); return rbtree_find_less_equal(&az->ztree, &key, (rbnode_type**)z); } /** find the auth zone that is above the given name */ struct auth_zone* auth_zones_find_zone(struct auth_zones* az, uint8_t* name, size_t name_len, uint16_t dclass) { uint8_t* nm = name; size_t nmlen = name_len; struct auth_zone* z; if(auth_zone_find_less_equal(az, nm, nmlen, dclass, &z)) { /* exact match */ return z; } else { /* less-or-nothing */ if(!z) return NULL; /* nothing smaller, nothing above it */ /* we found smaller name; smaller may be above the name, * but not below it. */ nm = dname_get_shared_topdomain(z->name, name); dname_count_size_labels(nm, &nmlen); z = NULL; } /* search up */ while(!z) { z = auth_zone_find(az, nm, nmlen, dclass); if(z) return z; if(dname_is_root(nm)) break; dname_remove_label(&nm, &nmlen); } return NULL; } /** find or create zone with name str. caller must have lock on az. * returns a wrlocked zone */ static struct auth_zone* auth_zones_find_or_add_zone(struct auth_zones* az, char* name) { uint8_t nm[LDNS_MAX_DOMAINLEN+1]; size_t nmlen = sizeof(nm); struct auth_zone* z; if(sldns_str2wire_dname_buf(name, nm, &nmlen) != 0) { log_err("cannot parse auth zone name: %s", name); return 0; } z = auth_zone_find(az, nm, nmlen, LDNS_RR_CLASS_IN); if(!z) { /* not found, create the zone */ z = auth_zone_create(az, nm, nmlen, LDNS_RR_CLASS_IN); } else { lock_rw_wrlock(&z->lock); } return z; } /** find or create xfer zone with name str. caller must have lock on az. * returns a locked xfer */ static struct auth_xfer* auth_zones_find_or_add_xfer(struct auth_zones* az, struct auth_zone* z) { struct auth_xfer* x; x = auth_xfer_find(az, z->name, z->namelen, z->dclass); if(!x) { /* not found, create the zone */ x = auth_xfer_create(az, z); } else { lock_basic_lock(&x->lock); } return x; } int auth_zone_set_zonefile(struct auth_zone* z, char* zonefile) { if(z->zonefile) free(z->zonefile); if(zonefile == NULL) { z->zonefile = NULL; } else { z->zonefile = strdup(zonefile); if(!z->zonefile) { log_err("malloc failure"); return 0; } } return 1; } /** set auth zone fallback. caller must have lock on zone */ int auth_zone_set_fallback(struct auth_zone* z, char* fallbackstr) { if(strcmp(fallbackstr, "yes") != 0 && strcmp(fallbackstr, "no") != 0){ log_err("auth zone fallback, expected yes or no, got %s", fallbackstr); return 0; } z->fallback_enabled = (strcmp(fallbackstr, "yes")==0); return 1; } /** create domain with the given name */ static struct auth_data* az_domain_create(struct auth_zone* z, uint8_t* nm, size_t nmlen) { struct auth_data* n = (struct auth_data*)malloc(sizeof(*n)); if(!n) return NULL; memset(n, 0, sizeof(*n)); n->node.key = n; n->name = memdup(nm, nmlen); if(!n->name) { free(n); return NULL; } n->namelen = nmlen; n->namelabs = dname_count_labels(nm); if(!rbtree_insert(&z->data, &n->node)) { log_warn("duplicate auth domain name"); free(n->name); free(n); return NULL; } return n; } /** find domain with exactly the given name */ static struct auth_data* az_find_name(struct auth_zone* z, uint8_t* nm, size_t nmlen) { struct auth_zone key; key.node.key = &key; key.name = nm; key.namelen = nmlen; key.namelabs = dname_count_labels(nm); return (struct auth_data*)rbtree_search(&z->data, &key); } /** Find domain name (or closest match) */ static void az_find_domain(struct auth_zone* z, struct query_info* qinfo, int* node_exact, struct auth_data** node) { struct auth_zone key; key.node.key = &key; key.name = qinfo->qname; key.namelen = qinfo->qname_len; key.namelabs = dname_count_labels(key.name); *node_exact = rbtree_find_less_equal(&z->data, &key, (rbnode_type**)node); } /** find or create domain with name in zone */ static struct auth_data* az_domain_find_or_create(struct auth_zone* z, uint8_t* dname, size_t dname_len) { struct auth_data* n = az_find_name(z, dname, dname_len); if(!n) { n = az_domain_create(z, dname, dname_len); } return n; } /** find rrset of given type in the domain */ static struct auth_rrset* az_domain_rrset(struct auth_data* n, uint16_t t) { struct auth_rrset* rrset; if(!n) return NULL; rrset = n->rrsets; while(rrset) { if(rrset->type == t) return rrset; rrset = rrset->next; } return NULL; } /** remove rrset of this type from domain */ static void domain_remove_rrset(struct auth_data* node, uint16_t rr_type) { struct auth_rrset* rrset, *prev; if(!node) return; prev = NULL; rrset = node->rrsets; while(rrset) { if(rrset->type == rr_type) { /* found it, now delete it */ if(prev) prev->next = rrset->next; else node->rrsets = rrset->next; auth_rrset_delete(rrset); return; } prev = rrset; rrset = rrset->next; } } /** find an rrsig index in the rrset. returns true if found */ static int az_rrset_find_rrsig(struct packed_rrset_data* d, uint8_t* rdata, size_t len, size_t* index) { size_t i; for(i=d->count; icount + d->rrsig_count; i++) { if(d->rr_len[i] != len) continue; if(memcmp(d->rr_data[i], rdata, len) == 0) { *index = i; return 1; } } return 0; } /** see if rdata is duplicate */ static int rdata_duplicate(struct packed_rrset_data* d, uint8_t* rdata, size_t len) { size_t i; for(i=0; icount + d->rrsig_count; i++) { if(d->rr_len[i] != len) continue; if(memcmp(d->rr_data[i], rdata, len) == 0) return 1; } return 0; } /** get rrsig type covered from rdata. * @param rdata: rdata in wireformat, starting with 16bit rdlength. * @param rdatalen: length of rdata buffer. * @return type covered (or 0). */ static uint16_t rrsig_rdata_get_type_covered(uint8_t* rdata, size_t rdatalen) { if(rdatalen < 4) return 0; return sldns_read_uint16(rdata+2); } /** remove RR from existing RRset. Also sig, if it is a signature. * reallocates the packed rrset for a new one, false on alloc failure */ static int rrset_remove_rr(struct auth_rrset* rrset, size_t index) { struct packed_rrset_data* d, *old = rrset->data; size_t i; if(index >= old->count + old->rrsig_count) return 0; /* index out of bounds */ d = (struct packed_rrset_data*)calloc(1, packed_rrset_sizeof(old) - ( sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + old->rr_len[index])); if(!d) { log_err("malloc failure"); return 0; } d->ttl = old->ttl; d->count = old->count; d->rrsig_count = old->rrsig_count; if(index < d->count) d->count--; else d->rrsig_count--; d->trust = old->trust; d->security = old->security; /* set rr_len, needed for ptr_fixup */ d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); if(index > 0) memmove(d->rr_len, old->rr_len, (index)*sizeof(size_t)); if(index+1 < old->count+old->rrsig_count) memmove(&d->rr_len[index], &old->rr_len[index+1], (old->count+old->rrsig_count - (index+1))*sizeof(size_t)); packed_rrset_ptr_fixup(d); /* move over ttls */ if(index > 0) memmove(d->rr_ttl, old->rr_ttl, (index)*sizeof(time_t)); if(index+1 < old->count+old->rrsig_count) memmove(&d->rr_ttl[index], &old->rr_ttl[index+1], (old->count+old->rrsig_count - (index+1))*sizeof(time_t)); /* move over rr_data */ for(i=0; icount+d->rrsig_count; i++) { size_t oldi; if(i < index) oldi = i; else oldi = i+1; memmove(d->rr_data[i], old->rr_data[oldi], d->rr_len[i]); } /* recalc ttl (lowest of remaining RR ttls) */ if(d->count + d->rrsig_count > 0) d->ttl = d->rr_ttl[0]; for(i=0; icount+d->rrsig_count; i++) { if(d->rr_ttl[i] < d->ttl) d->ttl = d->rr_ttl[i]; } free(rrset->data); rrset->data = d; return 1; } /** add RR to existing RRset. If insert_sig is true, add to rrsigs. * This reallocates the packed rrset for a new one */ static int rrset_add_rr(struct auth_rrset* rrset, uint32_t rr_ttl, uint8_t* rdata, size_t rdatalen, int insert_sig) { struct packed_rrset_data* d, *old = rrset->data; size_t total, old_total; d = (struct packed_rrset_data*)calloc(1, packed_rrset_sizeof(old) + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + rdatalen); if(!d) { log_err("out of memory"); return 0; } /* copy base values */ memcpy(d, old, sizeof(struct packed_rrset_data)); if(!insert_sig) { d->count++; } else { d->rrsig_count++; } old_total = old->count + old->rrsig_count; total = d->count + d->rrsig_count; /* set rr_len, needed for ptr_fixup */ d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); if(old->count != 0) memmove(d->rr_len, old->rr_len, old->count*sizeof(size_t)); if(old->rrsig_count != 0) memmove(d->rr_len+d->count, old->rr_len+old->count, old->rrsig_count*sizeof(size_t)); if(!insert_sig) d->rr_len[d->count-1] = rdatalen; else d->rr_len[total-1] = rdatalen; packed_rrset_ptr_fixup(d); if((time_t)rr_ttl < d->ttl) d->ttl = rr_ttl; /* copy old values into new array */ if(old->count != 0) { memmove(d->rr_ttl, old->rr_ttl, old->count*sizeof(time_t)); /* all the old rr pieces are allocated sequential, so we * can copy them in one go */ memmove(d->rr_data[0], old->rr_data[0], (old->rr_data[old->count-1] - old->rr_data[0]) + old->rr_len[old->count-1]); } if(old->rrsig_count != 0) { memmove(d->rr_ttl+d->count, old->rr_ttl+old->count, old->rrsig_count*sizeof(time_t)); memmove(d->rr_data[d->count], old->rr_data[old->count], (old->rr_data[old_total-1] - old->rr_data[old->count]) + old->rr_len[old_total-1]); } /* insert new value */ if(!insert_sig) { d->rr_ttl[d->count-1] = rr_ttl; memmove(d->rr_data[d->count-1], rdata, rdatalen); } else { d->rr_ttl[total-1] = rr_ttl; memmove(d->rr_data[total-1], rdata, rdatalen); } rrset->data = d; free(old); return 1; } /** Create new rrset for node with packed rrset with one RR element */ static struct auth_rrset* rrset_create(struct auth_data* node, uint16_t rr_type, uint32_t rr_ttl, uint8_t* rdata, size_t rdatalen) { struct auth_rrset* rrset = (struct auth_rrset*)calloc(1, sizeof(*rrset)); struct auth_rrset* p, *prev; struct packed_rrset_data* d; if(!rrset) { log_err("out of memory"); return NULL; } rrset->type = rr_type; /* the rrset data structure, with one RR */ d = (struct packed_rrset_data*)calloc(1, sizeof(struct packed_rrset_data) + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + rdatalen); if(!d) { free(rrset); log_err("out of memory"); return NULL; } rrset->data = d; d->ttl = rr_ttl; d->trust = rrset_trust_prim_noglue; d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); d->rr_data = (uint8_t**)&(d->rr_len[1]); d->rr_ttl = (time_t*)&(d->rr_data[1]); d->rr_data[0] = (uint8_t*)&(d->rr_ttl[1]); /* insert the RR */ d->rr_len[0] = rdatalen; d->rr_ttl[0] = rr_ttl; memmove(d->rr_data[0], rdata, rdatalen); d->count++; /* insert rrset into linked list for domain */ /* find sorted place to link the rrset into the list */ prev = NULL; p = node->rrsets; while(p && p->type<=rr_type) { prev = p; p = p->next; } /* so, prev is smaller, and p is larger than rr_type */ rrset->next = p; if(prev) prev->next = rrset; else node->rrsets = rrset; return rrset; } /** count number (and size) of rrsigs that cover a type */ static size_t rrsig_num_that_cover(struct auth_rrset* rrsig, uint16_t rr_type, size_t* sigsz) { struct packed_rrset_data* d = rrsig->data; size_t i, num = 0; *sigsz = 0; log_assert(d && rrsig->type == LDNS_RR_TYPE_RRSIG); for(i=0; icount+d->rrsig_count; i++) { if(rrsig_rdata_get_type_covered(d->rr_data[i], d->rr_len[i]) == rr_type) { num++; (*sigsz) += d->rr_len[i]; } } return num; } /** See if rrsig set has covered sigs for rrset and move them over */ static int rrset_moveover_rrsigs(struct auth_data* node, uint16_t rr_type, struct auth_rrset* rrset, struct auth_rrset* rrsig) { size_t sigs, sigsz, i, j, total; struct packed_rrset_data* sigold = rrsig->data; struct packed_rrset_data* old = rrset->data; struct packed_rrset_data* d, *sigd; log_assert(rrset->type == rr_type); log_assert(rrsig->type == LDNS_RR_TYPE_RRSIG); sigs = rrsig_num_that_cover(rrsig, rr_type, &sigsz); if(sigs == 0) { /* 0 rrsigs to move over, done */ return 1; } /* allocate rrset sigsz larger for extra sigs elements, and * allocate rrsig sigsz smaller for less sigs elements. */ d = (struct packed_rrset_data*)calloc(1, packed_rrset_sizeof(old) + sigs*(sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t)) + sigsz); if(!d) { log_err("out of memory"); return 0; } /* copy base values */ total = old->count + old->rrsig_count; memcpy(d, old, sizeof(struct packed_rrset_data)); d->rrsig_count += sigs; /* setup rr_len */ d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); if(total != 0) memmove(d->rr_len, old->rr_len, total*sizeof(size_t)); j = d->count+d->rrsig_count-sigs; for(i=0; icount+sigold->rrsig_count; i++) { if(rrsig_rdata_get_type_covered(sigold->rr_data[i], sigold->rr_len[i]) == rr_type) { d->rr_len[j] = sigold->rr_len[i]; j++; } } packed_rrset_ptr_fixup(d); /* copy old values into new array */ if(total != 0) { memmove(d->rr_ttl, old->rr_ttl, total*sizeof(time_t)); /* all the old rr pieces are allocated sequential, so we * can copy them in one go */ memmove(d->rr_data[0], old->rr_data[0], (old->rr_data[total-1] - old->rr_data[0]) + old->rr_len[total-1]); } /* move over the rrsigs to the larger rrset*/ j = d->count+d->rrsig_count-sigs; for(i=0; icount+sigold->rrsig_count; i++) { if(rrsig_rdata_get_type_covered(sigold->rr_data[i], sigold->rr_len[i]) == rr_type) { /* move this one over to location j */ d->rr_ttl[j] = sigold->rr_ttl[i]; memmove(d->rr_data[j], sigold->rr_data[i], sigold->rr_len[i]); if(d->rr_ttl[j] < d->ttl) d->ttl = d->rr_ttl[j]; j++; } } /* put it in and deallocate the old rrset */ rrset->data = d; free(old); /* now make rrsig set smaller */ if(sigold->count+sigold->rrsig_count == sigs) { /* remove all sigs from rrsig, remove it entirely */ domain_remove_rrset(node, LDNS_RR_TYPE_RRSIG); return 1; } log_assert(packed_rrset_sizeof(sigold) > sigs*(sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t)) + sigsz); sigd = (struct packed_rrset_data*)calloc(1, packed_rrset_sizeof(sigold) - sigs*(sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t)) - sigsz); if(!sigd) { /* no need to free up d, it has already been placed in the * node->rrset structure */ log_err("out of memory"); return 0; } /* copy base values */ memcpy(sigd, sigold, sizeof(struct packed_rrset_data)); /* in sigd the RRSIGs are stored in the base of the RR, in count */ sigd->count -= sigs; /* setup rr_len */ sigd->rr_len = (size_t*)((uint8_t*)sigd + sizeof(struct packed_rrset_data)); j = 0; for(i=0; icount+sigold->rrsig_count; i++) { if(rrsig_rdata_get_type_covered(sigold->rr_data[i], sigold->rr_len[i]) != rr_type) { sigd->rr_len[j] = sigold->rr_len[i]; j++; } } packed_rrset_ptr_fixup(sigd); /* copy old values into new rrsig array */ j = 0; for(i=0; icount+sigold->rrsig_count; i++) { if(rrsig_rdata_get_type_covered(sigold->rr_data[i], sigold->rr_len[i]) != rr_type) { /* move this one over to location j */ sigd->rr_ttl[j] = sigold->rr_ttl[i]; memmove(sigd->rr_data[j], sigold->rr_data[i], sigold->rr_len[i]); if(j==0) sigd->ttl = sigd->rr_ttl[j]; else { if(sigd->rr_ttl[j] < sigd->ttl) sigd->ttl = sigd->rr_ttl[j]; } j++; } } /* put it in and deallocate the old rrset */ rrsig->data = sigd; free(sigold); return 1; } /** copy the rrsigs from the rrset to the rrsig rrset, because the rrset * is going to be deleted. reallocates the RRSIG rrset data. */ static int rrsigs_copy_from_rrset_to_rrsigset(struct auth_rrset* rrset, struct auth_rrset* rrsigset) { size_t i; if(rrset->data->rrsig_count == 0) return 1; /* move them over one by one, because there might be duplicates, * duplicates are ignored */ for(i=rrset->data->count; idata->count+rrset->data->rrsig_count; i++) { uint8_t* rdata = rrset->data->rr_data[i]; size_t rdatalen = rrset->data->rr_len[i]; time_t rr_ttl = rrset->data->rr_ttl[i]; if(rdata_duplicate(rrsigset->data, rdata, rdatalen)) { continue; } if(!rrset_add_rr(rrsigset, rr_ttl, rdata, rdatalen, 0)) return 0; } return 1; } /** Add rr to node, ignores duplicate RRs, * rdata points to buffer with rdatalen octets, starts with 2bytelength. */ static int az_domain_add_rr(struct auth_data* node, uint16_t rr_type, uint32_t rr_ttl, uint8_t* rdata, size_t rdatalen, int* duplicate) { struct auth_rrset* rrset; /* packed rrsets have their rrsigs along with them, sort them out */ if(rr_type == LDNS_RR_TYPE_RRSIG) { uint16_t ctype = rrsig_rdata_get_type_covered(rdata, rdatalen); if((rrset=az_domain_rrset(node, ctype))!= NULL) { /* a node of the correct type exists, add the RRSIG * to the rrset of the covered data type */ if(rdata_duplicate(rrset->data, rdata, rdatalen)) { if(duplicate) *duplicate = 1; return 1; } if(!rrset_add_rr(rrset, rr_ttl, rdata, rdatalen, 1)) return 0; } else if((rrset=az_domain_rrset(node, rr_type))!= NULL) { /* add RRSIG to rrset of type RRSIG */ if(rdata_duplicate(rrset->data, rdata, rdatalen)) { if(duplicate) *duplicate = 1; return 1; } if(!rrset_add_rr(rrset, rr_ttl, rdata, rdatalen, 0)) return 0; } else { /* create rrset of type RRSIG */ if(!rrset_create(node, rr_type, rr_ttl, rdata, rdatalen)) return 0; } } else { /* normal RR type */ if((rrset=az_domain_rrset(node, rr_type))!= NULL) { /* add data to existing node with data type */ if(rdata_duplicate(rrset->data, rdata, rdatalen)) { if(duplicate) *duplicate = 1; return 1; } if(!rrset_add_rr(rrset, rr_ttl, rdata, rdatalen, 0)) return 0; } else { struct auth_rrset* rrsig; /* create new node with data type */ if(!(rrset=rrset_create(node, rr_type, rr_ttl, rdata, rdatalen))) return 0; /* see if node of type RRSIG has signatures that * cover the data type, and move them over */ /* and then make the RRSIG type smaller */ if((rrsig=az_domain_rrset(node, LDNS_RR_TYPE_RRSIG)) != NULL) { if(!rrset_moveover_rrsigs(node, rr_type, rrset, rrsig)) return 0; } } } return 1; } /** insert RR into zone, ignore duplicates */ static int az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, size_t dname_len, int* duplicate) { struct auth_data* node; uint8_t* dname = rr; uint16_t rr_type = sldns_wirerr_get_type(rr, rr_len, dname_len); uint16_t rr_class = sldns_wirerr_get_class(rr, rr_len, dname_len); uint32_t rr_ttl = sldns_wirerr_get_ttl(rr, rr_len, dname_len); size_t rdatalen = ((size_t)sldns_wirerr_get_rdatalen(rr, rr_len, dname_len))+2; /* rdata points to rdata prefixed with uint16 rdatalength */ uint8_t* rdata = sldns_wirerr_get_rdatawl(rr, rr_len, dname_len); if(rr_class != z->dclass) { log_err("wrong class for RR"); return 0; } if(!(node=az_domain_find_or_create(z, dname, dname_len))) { log_err("cannot create domain"); return 0; } if(!az_domain_add_rr(node, rr_type, rr_ttl, rdata, rdatalen, duplicate)) { log_err("cannot add RR to domain"); return 0; } if(z->rpz) { if(!(rpz_insert_rr(z->rpz, z->name, z->namelen, dname, dname_len, rr_type, rr_class, rr_ttl, rdata, rdatalen, rr, rr_len))) return 0; } return 1; } /** Remove rr from node, ignores nonexisting RRs, * rdata points to buffer with rdatalen octets, starts with 2bytelength. */ static int az_domain_remove_rr(struct auth_data* node, uint16_t rr_type, uint8_t* rdata, size_t rdatalen, int* nonexist) { struct auth_rrset* rrset; size_t index = 0; /* find the plain RR of the given type */ if((rrset=az_domain_rrset(node, rr_type))!= NULL) { if(packed_rrset_find_rr(rrset->data, rdata, rdatalen, &index)) { if(rrset->data->count == 1 && rrset->data->rrsig_count == 0) { /* last RR, delete the rrset */ domain_remove_rrset(node, rr_type); } else if(rrset->data->count == 1 && rrset->data->rrsig_count != 0) { /* move RRSIGs to the RRSIG rrset, or * this one becomes that RRset */ struct auth_rrset* rrsigset = az_domain_rrset( node, LDNS_RR_TYPE_RRSIG); if(rrsigset) { /* move left over rrsigs to the * existing rrset of type RRSIG */ rrsigs_copy_from_rrset_to_rrsigset( rrset, rrsigset); /* and then delete the rrset */ domain_remove_rrset(node, rr_type); } else { /* no rrset of type RRSIG, this * set is now of that type, * just remove the rr */ if(!rrset_remove_rr(rrset, index)) return 0; rrset->type = LDNS_RR_TYPE_RRSIG; rrset->data->count = rrset->data->rrsig_count; rrset->data->rrsig_count = 0; } } else { /* remove the RR from the rrset */ if(!rrset_remove_rr(rrset, index)) return 0; } return 1; } /* rr not found in rrset */ } /* is it a type RRSIG, look under the covered type */ if(rr_type == LDNS_RR_TYPE_RRSIG) { uint16_t ctype = rrsig_rdata_get_type_covered(rdata, rdatalen); if((rrset=az_domain_rrset(node, ctype))!= NULL) { if(az_rrset_find_rrsig(rrset->data, rdata, rdatalen, &index)) { /* rrsig should have d->count > 0, be * over some rr of that type */ /* remove the rrsig from the rrsigs list of the * rrset */ if(!rrset_remove_rr(rrset, index)) return 0; return 1; } } /* also RRSIG not found */ } /* nothing found to delete */ if(nonexist) *nonexist = 1; return 1; } /** remove RR from zone, ignore if it does not exist, false on alloc failure*/ static int az_remove_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len, size_t dname_len, int* nonexist) { struct auth_data* node; uint8_t* dname = rr; uint16_t rr_type = sldns_wirerr_get_type(rr, rr_len, dname_len); uint16_t rr_class = sldns_wirerr_get_class(rr, rr_len, dname_len); size_t rdatalen = ((size_t)sldns_wirerr_get_rdatalen(rr, rr_len, dname_len))+2; /* rdata points to rdata prefixed with uint16 rdatalength */ uint8_t* rdata = sldns_wirerr_get_rdatawl(rr, rr_len, dname_len); if(rr_class != z->dclass) { log_err("wrong class for RR"); /* really also a nonexisting entry, because no records * of that class in the zone, but return an error because * getting records of the wrong class is a failure of the * zone transfer */ return 0; } node = az_find_name(z, dname, dname_len); if(!node) { /* node with that name does not exist */ /* nonexisting entry, because no such name */ *nonexist = 1; return 1; } if(!az_domain_remove_rr(node, rr_type, rdata, rdatalen, nonexist)) { /* alloc failure or so */ return 0; } /* remove the node, if necessary */ /* an rrsets==NULL entry is not kept around for empty nonterminals, * and also parent nodes are not kept around, so we just delete it */ if(node->rrsets == NULL) { (void)rbtree_delete(&z->data, node); auth_data_delete(node); } if(z->rpz) { rpz_remove_rr(z->rpz, z->namelen, dname, dname_len, rr_type, rr_class, rdata, rdatalen); } return 1; } /** decompress an RR into the buffer where it'll be an uncompressed RR * with uncompressed dname and uncompressed rdata (dnames) */ static int decompress_rr_into_buffer(struct sldns_buffer* buf, uint8_t* pkt, size_t pktlen, uint8_t* dname, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rr_data, uint16_t rr_rdlen) { sldns_buffer pktbuf; size_t dname_len = 0; size_t rdlenpos; size_t rdlen; uint8_t* rd; const sldns_rr_descriptor* desc; sldns_buffer_init_frm_data(&pktbuf, pkt, pktlen); sldns_buffer_clear(buf); /* decompress dname */ sldns_buffer_set_position(&pktbuf, (size_t)(dname - sldns_buffer_current(&pktbuf))); dname_len = pkt_dname_len(&pktbuf); if(dname_len == 0) return 0; /* parse fail on dname */ if(!sldns_buffer_available(buf, dname_len)) return 0; dname_pkt_copy(&pktbuf, sldns_buffer_current(buf), dname); sldns_buffer_skip(buf, (ssize_t)dname_len); /* type, class, ttl and rdatalength fields */ if(!sldns_buffer_available(buf, 10)) return 0; sldns_buffer_write_u16(buf, rr_type); sldns_buffer_write_u16(buf, rr_class); sldns_buffer_write_u32(buf, rr_ttl); rdlenpos = sldns_buffer_position(buf); sldns_buffer_write_u16(buf, 0); /* rd length position */ /* decompress rdata */ desc = sldns_rr_descript(rr_type); rd = rr_data; rdlen = rr_rdlen; if(rdlen > 0 && desc && desc->_dname_count > 0) { int count = (int)desc->_dname_count; int rdf = 0; size_t len; /* how much rdata to plain copy */ size_t uncompressed_len, compressed_len; size_t oldpos; /* decompress dnames. */ while(rdlen > 0 && count) { switch(desc->_wireformat[rdf]) { case LDNS_RDF_TYPE_DNAME: sldns_buffer_set_position(&pktbuf, (size_t)(rd - sldns_buffer_begin(&pktbuf))); oldpos = sldns_buffer_position(&pktbuf); /* moves pktbuf to right after the * compressed dname, and returns uncompressed * dname length */ uncompressed_len = pkt_dname_len(&pktbuf); if(!uncompressed_len) return 0; /* parse error in dname */ if(!sldns_buffer_available(buf, uncompressed_len)) /* dname too long for buffer */ return 0; dname_pkt_copy(&pktbuf, sldns_buffer_current(buf), rd); sldns_buffer_skip(buf, (ssize_t)uncompressed_len); compressed_len = sldns_buffer_position( &pktbuf) - oldpos; rd += compressed_len; rdlen -= compressed_len; count--; len = 0; break; case LDNS_RDF_TYPE_STR: len = rd[0] + 1; break; default: len = get_rdf_size(desc->_wireformat[rdf]); break; } if(len) { if(!sldns_buffer_available(buf, len)) return 0; /* too long for buffer */ sldns_buffer_write(buf, rd, len); rd += len; rdlen -= len; } rdf++; } } /* copy remaining data */ if(rdlen > 0) { if(!sldns_buffer_available(buf, rdlen)) return 0; sldns_buffer_write(buf, rd, rdlen); } /* fixup rdlength */ sldns_buffer_write_u16_at(buf, rdlenpos, sldns_buffer_position(buf)-rdlenpos-2); sldns_buffer_flip(buf); return 1; } /** insert RR into zone, from packet, decompress RR, * if duplicate is nonNULL set the flag but otherwise ignore duplicates */ static int az_insert_rr_decompress(struct auth_zone* z, uint8_t* pkt, size_t pktlen, struct sldns_buffer* scratch_buffer, uint8_t* dname, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rr_data, uint16_t rr_rdlen, int* duplicate) { uint8_t* rr; size_t rr_len; size_t dname_len; if(!decompress_rr_into_buffer(scratch_buffer, pkt, pktlen, dname, rr_type, rr_class, rr_ttl, rr_data, rr_rdlen)) { log_err("could not decompress RR"); return 0; } rr = sldns_buffer_begin(scratch_buffer); rr_len = sldns_buffer_limit(scratch_buffer); dname_len = dname_valid(rr, rr_len); return az_insert_rr(z, rr, rr_len, dname_len, duplicate); } /** remove RR from zone, from packet, decompress RR, * if nonexist is nonNULL set the flag but otherwise ignore nonexisting entries*/ static int az_remove_rr_decompress(struct auth_zone* z, uint8_t* pkt, size_t pktlen, struct sldns_buffer* scratch_buffer, uint8_t* dname, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rr_data, uint16_t rr_rdlen, int* nonexist) { uint8_t* rr; size_t rr_len; size_t dname_len; if(!decompress_rr_into_buffer(scratch_buffer, pkt, pktlen, dname, rr_type, rr_class, rr_ttl, rr_data, rr_rdlen)) { log_err("could not decompress RR"); return 0; } rr = sldns_buffer_begin(scratch_buffer); rr_len = sldns_buffer_limit(scratch_buffer); dname_len = dname_valid(rr, rr_len); return az_remove_rr(z, rr, rr_len, dname_len, nonexist); } /** * Parse zonefile * @param z: zone to read in. * @param in: file to read from (just opened). * @param rr: buffer to use for RRs, 64k. * passed so that recursive includes can use the same buffer and do * not grow the stack too much. * @param rrbuflen: sizeof rr buffer. * @param state: parse state with $ORIGIN, $TTL and 'prev-dname' and so on, * that is kept between includes. * The lineno is set at 1 and then increased by the function. * @param fname: file name. * @param depth: recursion depth for includes * @param cfg: config for chroot. * returns false on failure, has printed an error message */ static int az_parse_file(struct auth_zone* z, FILE* in, uint8_t* rr, size_t rrbuflen, struct sldns_file_parse_state* state, char* fname, int depth, struct config_file* cfg) { size_t rr_len, dname_len; int status; state->lineno = 1; while(!feof(in)) { rr_len = rrbuflen; dname_len = 0; status = sldns_fp2wire_rr_buf(in, rr, &rr_len, &dname_len, state); if(status == LDNS_WIREPARSE_ERR_INCLUDE && rr_len == 0) { /* we have $INCLUDE or $something */ if(strncmp((char*)rr, "$INCLUDE ", 9) == 0 || strncmp((char*)rr, "$INCLUDE\t", 9) == 0) { FILE* inc; int lineno_orig = state->lineno; char* incfile = (char*)rr + 8; if(depth > MAX_INCLUDE_DEPTH) { log_err("%s:%d max include depth" "exceeded", fname, state->lineno); return 0; } /* skip spaces */ while(*incfile == ' ' || *incfile == '\t') incfile++; /* adjust for chroot on include file */ if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(incfile, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) incfile += strlen(cfg->chrootdir); incfile = strdup(incfile); if(!incfile) { log_err("malloc failure"); return 0; } verbose(VERB_ALGO, "opening $INCLUDE %s", incfile); inc = fopen(incfile, "r"); if(!inc) { log_err("%s:%d cannot open include " "file %s: %s", fname, lineno_orig, incfile, strerror(errno)); free(incfile); return 0; } /* recurse read that file now */ if(!az_parse_file(z, inc, rr, rrbuflen, state, incfile, depth+1, cfg)) { log_err("%s:%d cannot parse include " "file %s", fname, lineno_orig, incfile); fclose(inc); free(incfile); return 0; } fclose(inc); verbose(VERB_ALGO, "done with $INCLUDE %s", incfile); free(incfile); state->lineno = lineno_orig; } continue; } if(status != 0) { log_err("parse error %s %d:%d: %s", fname, state->lineno, LDNS_WIREPARSE_OFFSET(status), sldns_get_errorstr_parse(status)); return 0; } if(rr_len == 0) { /* EMPTY line, TTL or ORIGIN */ continue; } /* insert wirerr in rrbuf */ if(!az_insert_rr(z, rr, rr_len, dname_len, NULL)) { char buf[17]; sldns_wire2str_type_buf(sldns_wirerr_get_type(rr, rr_len, dname_len), buf, sizeof(buf)); log_err("%s:%d cannot insert RR of type %s", fname, state->lineno, buf); return 0; } } return 1; } int auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg) { uint8_t rr[LDNS_RR_BUF_SIZE]; struct sldns_file_parse_state state; char* zfilename; FILE* in; if(!z || !z->zonefile || z->zonefile[0]==0) return 1; /* no file, or "", nothing to read */ zfilename = z->zonefile; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(zfilename, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) zfilename += strlen(cfg->chrootdir); if(verbosity >= VERB_ALGO) { char nm[255+1]; dname_str(z->name, nm); verbose(VERB_ALGO, "read zonefile %s for %s", zfilename, nm); } in = fopen(zfilename, "r"); if(!in) { char* n = sldns_wire2str_dname(z->name, z->namelen); if(z->zone_is_slave && errno == ENOENT) { /* we fetch the zone contents later, no file yet */ verbose(VERB_ALGO, "no zonefile %s for %s", zfilename, n?n:"error"); free(n); return 1; } log_err("cannot open zonefile %s for %s: %s", zfilename, n?n:"error", strerror(errno)); free(n); return 0; } /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); /* clear the RPZ policies */ if(z->rpz) rpz_clear(z->rpz); memset(&state, 0, sizeof(state)); /* default TTL to 3600 */ state.default_ttl = 3600; /* set $ORIGIN to the zone name */ if(z->namelen <= sizeof(state.origin)) { memcpy(state.origin, z->name, z->namelen); state.origin_len = z->namelen; } /* parse the (toplevel) file */ if(!az_parse_file(z, in, rr, sizeof(rr), &state, zfilename, 0, cfg)) { char* n = sldns_wire2str_dname(z->name, z->namelen); log_err("error parsing zonefile %s for %s", zfilename, n?n:"error"); free(n); fclose(in); return 0; } fclose(in); if(z->rpz) rpz_finish_config(z->rpz); return 1; } /** write buffer to file and check return codes */ static int write_out(FILE* out, const char* str, size_t len) { size_t r; if(len == 0) return 1; r = fwrite(str, 1, len, out); if(r == 0) { log_err("write failed: %s", strerror(errno)); return 0; } else if(r < len) { log_err("write failed: too short (disk full?)"); return 0; } return 1; } /** convert auth rr to string */ static int auth_rr_to_string(uint8_t* nm, size_t nmlen, uint16_t tp, uint16_t cl, struct packed_rrset_data* data, size_t i, char* s, size_t buflen) { int w = 0; size_t slen = buflen, datlen; uint8_t* dat; if(i >= data->count) tp = LDNS_RR_TYPE_RRSIG; dat = nm; datlen = nmlen; w += sldns_wire2str_dname_scan(&dat, &datlen, &s, &slen, NULL, 0, NULL); w += sldns_str_print(&s, &slen, "\t"); w += sldns_str_print(&s, &slen, "%lu\t", (unsigned long)data->rr_ttl[i]); w += sldns_wire2str_class_print(&s, &slen, cl); w += sldns_str_print(&s, &slen, "\t"); w += sldns_wire2str_type_print(&s, &slen, tp); w += sldns_str_print(&s, &slen, "\t"); datlen = data->rr_len[i]-2; dat = data->rr_data[i]+2; w += sldns_wire2str_rdata_scan(&dat, &datlen, &s, &slen, tp, NULL, 0, NULL); if(tp == LDNS_RR_TYPE_DNSKEY) { w += sldns_str_print(&s, &slen, " ;{id = %u}", sldns_calc_keytag_raw(data->rr_data[i]+2, data->rr_len[i]-2)); } w += sldns_str_print(&s, &slen, "\n"); if(w >= (int)buflen) { log_nametypeclass(NO_VERBOSE, "RR too long to print", nm, tp, cl); return 0; } return 1; } /** write rrset to file */ static int auth_zone_write_rrset(struct auth_zone* z, struct auth_data* node, struct auth_rrset* r, FILE* out) { size_t i, count = r->data->count + r->data->rrsig_count; char buf[LDNS_RR_BUF_SIZE]; for(i=0; iname, node->namelen, r->type, z->dclass, r->data, i, buf, sizeof(buf))) { verbose(VERB_ALGO, "failed to rr2str rr %d", (int)i); continue; } if(!write_out(out, buf, strlen(buf))) return 0; } return 1; } /** write domain to file */ static int auth_zone_write_domain(struct auth_zone* z, struct auth_data* n, FILE* out) { struct auth_rrset* r; /* if this is zone apex, write SOA first */ if(z->namelen == n->namelen) { struct auth_rrset* soa = az_domain_rrset(n, LDNS_RR_TYPE_SOA); if(soa) { if(!auth_zone_write_rrset(z, n, soa, out)) return 0; } } /* write all the RRsets for this domain */ for(r = n->rrsets; r; r = r->next) { if(z->namelen == n->namelen && r->type == LDNS_RR_TYPE_SOA) continue; /* skip SOA here */ if(!auth_zone_write_rrset(z, n, r, out)) return 0; } return 1; } int auth_zone_write_file(struct auth_zone* z, const char* fname) { FILE* out; struct auth_data* n; out = fopen(fname, "w"); if(!out) { log_err("could not open %s: %s", fname, strerror(errno)); return 0; } RBTREE_FOR(n, struct auth_data*, &z->data) { if(!auth_zone_write_domain(z, n, out)) { log_err("could not write domain to %s", fname); fclose(out); return 0; } } fclose(out); return 1; } /** read all auth zones from file (if they have) */ static int auth_zones_read_zones(struct auth_zones* az, struct config_file* cfg) { struct auth_zone* z; lock_rw_wrlock(&az->lock); RBTREE_FOR(z, struct auth_zone*, &az->ztree) { lock_rw_wrlock(&z->lock); if(!auth_zone_read_zonefile(z, cfg)) { lock_rw_unlock(&z->lock); lock_rw_unlock(&az->lock); return 0; } lock_rw_unlock(&z->lock); } lock_rw_unlock(&az->lock); return 1; } /** find serial number of zone or false if none */ int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial) { struct auth_data* apex; struct auth_rrset* soa; struct packed_rrset_data* d; apex = az_find_name(z, z->name, z->namelen); if(!apex) return 0; soa = az_domain_rrset(apex, LDNS_RR_TYPE_SOA); if(!soa || soa->data->count==0) return 0; /* no RRset or no RRs in rrset */ if(soa->data->rr_len[0] < 2+4*5) return 0; /* SOA too short */ d = soa->data; *serial = sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-20)); return 1; } /** Find auth_zone SOA and populate the values in xfr(soa values). */ static int xfr_find_soa(struct auth_zone* z, struct auth_xfer* xfr) { struct auth_data* apex; struct auth_rrset* soa; struct packed_rrset_data* d; apex = az_find_name(z, z->name, z->namelen); if(!apex) return 0; soa = az_domain_rrset(apex, LDNS_RR_TYPE_SOA); if(!soa || soa->data->count==0) return 0; /* no RRset or no RRs in rrset */ if(soa->data->rr_len[0] < 2+4*5) return 0; /* SOA too short */ /* SOA record ends with serial, refresh, retry, expiry, minimum, * as 4 byte fields */ d = soa->data; xfr->have_zone = 1; xfr->serial = sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-20)); xfr->refresh = sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-16)); xfr->retry = sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-12)); xfr->expiry = sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-8)); /* soa minimum at d->rr_len[0]-4 */ return 1; } /** * Setup auth_xfer zone * This populates the have_zone, soa values, and so on times. * Doesn't do network traffic yet, can set option flags. * @param z: locked by caller, and modified for setup * @param x: locked by caller, and modified. * @return false on failure. */ static int auth_xfer_setup(struct auth_zone* z, struct auth_xfer* x) { /* for a zone without zone transfers, x==NULL, so skip them, * i.e. the zone config is fixed with no masters or urls */ if(!z || !x) return 1; if(!xfr_find_soa(z, x)) { return 1; } /* nothing for probe, nextprobe and transfer tasks */ return 1; } /** * Setup all zones * @param az: auth zones structure * @return false on failure. */ static int auth_zones_setup_zones(struct auth_zones* az) { struct auth_zone* z; struct auth_xfer* x; lock_rw_wrlock(&az->lock); RBTREE_FOR(z, struct auth_zone*, &az->ztree) { lock_rw_wrlock(&z->lock); x = auth_xfer_find(az, z->name, z->namelen, z->dclass); if(x) { lock_basic_lock(&x->lock); } if(!auth_xfer_setup(z, x)) { if(x) { lock_basic_unlock(&x->lock); } lock_rw_unlock(&z->lock); lock_rw_unlock(&az->lock); return 0; } if(x) { lock_basic_unlock(&x->lock); } lock_rw_unlock(&z->lock); } lock_rw_unlock(&az->lock); return 1; } /** set config items and create zones */ static int auth_zones_cfg(struct auth_zones* az, struct config_auth* c) { struct auth_zone* z; struct auth_xfer* x = NULL; /* create zone */ if(c->isrpz) { /* if the rpz lock is needed, grab it before the other * locks to avoid a lock dependency cycle */ lock_rw_wrlock(&az->rpz_lock); } lock_rw_wrlock(&az->lock); if(!(z=auth_zones_find_or_add_zone(az, c->name))) { lock_rw_unlock(&az->lock); if(c->isrpz) { lock_rw_unlock(&az->rpz_lock); } return 0; } if(c->masters || c->urls) { if(!(x=auth_zones_find_or_add_xfer(az, z))) { lock_rw_unlock(&az->lock); lock_rw_unlock(&z->lock); if(c->isrpz) { lock_rw_unlock(&az->rpz_lock); } return 0; } } if(c->for_downstream) az->have_downstream = 1; lock_rw_unlock(&az->lock); /* set options */ z->zone_deleted = 0; if(!auth_zone_set_zonefile(z, c->zonefile)) { if(x) { lock_basic_unlock(&x->lock); } lock_rw_unlock(&z->lock); if(c->isrpz) { lock_rw_unlock(&az->rpz_lock); } return 0; } z->for_downstream = c->for_downstream; z->for_upstream = c->for_upstream; z->fallback_enabled = c->fallback_enabled; if(c->isrpz && !z->rpz){ if(!(z->rpz = rpz_create(c))){ fatal_exit("Could not setup RPZ zones"); return 0; } lock_protect(&z->lock, &z->rpz->local_zones, sizeof(*z->rpz)); /* the az->rpz_lock is locked above */ z->rpz_az_next = az->rpz_first; if(az->rpz_first) az->rpz_first->rpz_az_prev = z; az->rpz_first = z; } if(c->isrpz) { lock_rw_unlock(&az->rpz_lock); } /* xfer zone */ if(x) { z->zone_is_slave = 1; /* set options on xfer zone */ if(!xfer_set_masters(&x->task_probe->masters, c, 0)) { lock_basic_unlock(&x->lock); lock_rw_unlock(&z->lock); return 0; } if(!xfer_set_masters(&x->task_transfer->masters, c, 1)) { lock_basic_unlock(&x->lock); lock_rw_unlock(&z->lock); return 0; } lock_basic_unlock(&x->lock); } lock_rw_unlock(&z->lock); return 1; } /** set all auth zones deleted, then in auth_zones_cfg, it marks them * as nondeleted (if they are still in the config), and then later * we can find deleted zones */ static void az_setall_deleted(struct auth_zones* az) { struct auth_zone* z; lock_rw_wrlock(&az->lock); RBTREE_FOR(z, struct auth_zone*, &az->ztree) { lock_rw_wrlock(&z->lock); z->zone_deleted = 1; lock_rw_unlock(&z->lock); } lock_rw_unlock(&az->lock); } /** find zones that are marked deleted and delete them. * This is called from apply_cfg, and there are no threads and no * workers, so the xfr can just be deleted. */ static void az_delete_deleted_zones(struct auth_zones* az) { struct auth_zone* z; struct auth_zone* delete_list = NULL, *next; struct auth_xfer* xfr; lock_rw_wrlock(&az->lock); RBTREE_FOR(z, struct auth_zone*, &az->ztree) { lock_rw_wrlock(&z->lock); if(z->zone_deleted) { /* we cannot alter the rbtree right now, but * we can put it on a linked list and then * delete it */ z->delete_next = delete_list; delete_list = z; } lock_rw_unlock(&z->lock); } /* now we are out of the tree loop and we can loop and delete * the zones */ z = delete_list; while(z) { next = z->delete_next; xfr = auth_xfer_find(az, z->name, z->namelen, z->dclass); if(xfr) { (void)rbtree_delete(&az->xtree, &xfr->node); auth_xfer_delete(xfr); } (void)rbtree_delete(&az->ztree, &z->node); auth_zone_delete(z, az); z = next; } lock_rw_unlock(&az->lock); } int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, int setup, int* is_rpz) { struct config_auth* p; az_setall_deleted(az); for(p = cfg->auths; p; p = p->next) { if(!p->name || p->name[0] == 0) { log_warn("auth-zone without a name, skipped"); continue; } *is_rpz = (*is_rpz || p->isrpz); if(!auth_zones_cfg(az, p)) { log_err("cannot config auth zone %s", p->name); return 0; } } az_delete_deleted_zones(az); if(!auth_zones_read_zones(az, cfg)) return 0; if(setup) { if(!auth_zones_setup_zones(az)) return 0; } return 1; } /** delete chunks * @param at: transfer structure with chunks list. The chunks and their * data are freed. */ static void auth_chunks_delete(struct auth_transfer* at) { if(at->chunks_first) { struct auth_chunk* c, *cn; c = at->chunks_first; while(c) { cn = c->next; free(c->data); free(c); c = cn; } } at->chunks_first = NULL; at->chunks_last = NULL; } /** free master addr list */ static void auth_free_master_addrs(struct auth_addr* list) { struct auth_addr *n; while(list) { n = list->next; free(list); list = n; } } /** free the masters list */ static void auth_free_masters(struct auth_master* list) { struct auth_master* n; while(list) { n = list->next; auth_free_master_addrs(list->list); free(list->host); free(list->file); free(list); list = n; } } /** delete auth xfer structure * @param xfr: delete this xfer and its tasks. */ void auth_xfer_delete(struct auth_xfer* xfr) { if(!xfr) return; lock_basic_destroy(&xfr->lock); free(xfr->name); if(xfr->task_nextprobe) { comm_timer_delete(xfr->task_nextprobe->timer); free(xfr->task_nextprobe); } if(xfr->task_probe) { auth_free_masters(xfr->task_probe->masters); comm_point_delete(xfr->task_probe->cp); comm_timer_delete(xfr->task_probe->timer); free(xfr->task_probe); } if(xfr->task_transfer) { auth_free_masters(xfr->task_transfer->masters); comm_point_delete(xfr->task_transfer->cp); comm_timer_delete(xfr->task_transfer->timer); if(xfr->task_transfer->chunks_first) { auth_chunks_delete(xfr->task_transfer); } free(xfr->task_transfer); } auth_free_masters(xfr->allow_notify_list); free(xfr); } /** helper traverse to delete zones */ static void auth_zone_del(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct auth_zone* z = (struct auth_zone*)n->key; auth_zone_delete(z, NULL); } /** helper traverse to delete xfer zones */ static void auth_xfer_del(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct auth_xfer* z = (struct auth_xfer*)n->key; auth_xfer_delete(z); } void auth_zones_delete(struct auth_zones* az) { if(!az) return; lock_rw_destroy(&az->lock); lock_rw_destroy(&az->rpz_lock); traverse_postorder(&az->ztree, auth_zone_del, NULL); traverse_postorder(&az->xtree, auth_xfer_del, NULL); free(az); } /** true if domain has only nsec3 */ static int domain_has_only_nsec3(struct auth_data* n) { struct auth_rrset* rrset = n->rrsets; int nsec3_seen = 0; while(rrset) { if(rrset->type == LDNS_RR_TYPE_NSEC3) { nsec3_seen = 1; } else if(rrset->type != LDNS_RR_TYPE_RRSIG) { return 0; } rrset = rrset->next; } return nsec3_seen; } /** see if the domain has a wildcard child '*.domain' */ static struct auth_data* az_find_wildcard_domain(struct auth_zone* z, uint8_t* nm, size_t nmlen) { uint8_t wc[LDNS_MAX_DOMAINLEN]; if(nmlen+2 > sizeof(wc)) return NULL; /* result would be too long */ wc[0] = 1; /* length of wildcard label */ wc[1] = (uint8_t)'*'; /* wildcard label */ memmove(wc+2, nm, nmlen); return az_find_name(z, wc, nmlen+2); } /** find wildcard between qname and cename */ static struct auth_data* az_find_wildcard(struct auth_zone* z, struct query_info* qinfo, struct auth_data* ce) { uint8_t* nm = qinfo->qname; size_t nmlen = qinfo->qname_len; struct auth_data* node; if(!dname_subdomain_c(nm, z->name)) return NULL; /* out of zone */ while((node=az_find_wildcard_domain(z, nm, nmlen))==NULL) { /* see if we can go up to find the wildcard */ if(nmlen == z->namelen) return NULL; /* top of zone reached */ if(ce && nmlen == ce->namelen) return NULL; /* ce reached */ if(dname_is_root(nm)) return NULL; /* cannot go up */ dname_remove_label(&nm, &nmlen); } return node; } /** domain is not exact, find first candidate ce (name that matches * a part of qname) in tree */ static struct auth_data* az_find_candidate_ce(struct auth_zone* z, struct query_info* qinfo, struct auth_data* n) { uint8_t* nm; size_t nmlen; if(n) { nm = dname_get_shared_topdomain(qinfo->qname, n->name); } else { nm = qinfo->qname; } dname_count_size_labels(nm, &nmlen); n = az_find_name(z, nm, nmlen); /* delete labels and go up on name */ while(!n) { if(dname_is_root(nm)) return NULL; /* cannot go up */ dname_remove_label(&nm, &nmlen); n = az_find_name(z, nm, nmlen); } return n; } /** go up the auth tree to next existing name. */ static struct auth_data* az_domain_go_up(struct auth_zone* z, struct auth_data* n) { uint8_t* nm = n->name; size_t nmlen = n->namelen; while(!dname_is_root(nm)) { dname_remove_label(&nm, &nmlen); if((n=az_find_name(z, nm, nmlen)) != NULL) return n; } return NULL; } /** Find the closest encloser, an name that exists and is above the * qname. * return true if the node (param node) is existing, nonobscured and * can be used to generate answers from. It is then also node_exact. * returns false if the node is not good enough (or it wasn't node_exact) * in this case the ce can be filled. * if ce is NULL, no ce exists, and likely the zone is completely empty, * not even with a zone apex. * if ce is nonNULL it is the closest enclosing upper name (that exists * itself for answer purposes). That name may have DNAME, NS or wildcard * rrset is the closest DNAME or NS rrset that was found. */ static int az_find_ce(struct auth_zone* z, struct query_info* qinfo, struct auth_data* node, int node_exact, struct auth_data** ce, struct auth_rrset** rrset) { struct auth_data* n = node; *ce = NULL; *rrset = NULL; if(!node_exact) { /* if not exact, lookup closest exact match */ n = az_find_candidate_ce(z, qinfo, n); } else { /* if exact, the node itself is the first candidate ce */ *ce = n; } /* no direct answer from nsec3-only domains */ if(n && domain_has_only_nsec3(n)) { node_exact = 0; *ce = NULL; } /* with exact matches, walk up the labels until we find the * delegation, or DNAME or zone end */ while(n) { /* see if the current candidate has issues */ /* not zone apex and has type NS */ if(n->namelen != z->namelen && (*rrset=az_domain_rrset(n, LDNS_RR_TYPE_NS)) && /* delegate here, but DS at exact the dp has notype */ (qinfo->qtype != LDNS_RR_TYPE_DS || n->namelen != qinfo->qname_len)) { /* referral */ /* this is ce and the lowernode is nonexisting */ *ce = n; return 0; } /* not equal to qname and has type DNAME */ if(n->namelen != qinfo->qname_len && (*rrset=az_domain_rrset(n, LDNS_RR_TYPE_DNAME))) { /* this is ce and the lowernode is nonexisting */ *ce = n; return 0; } if(*ce == NULL && !domain_has_only_nsec3(n)) { /* if not found yet, this exact name must be * our lowest match (but not nsec3onlydomain) */ *ce = n; } /* walk up the tree by removing labels from name and lookup */ n = az_domain_go_up(z, n); } /* found no problems, if it was an exact node, it is fine to use */ return node_exact; } /** add additional A/AAAA from domain names in rrset rdata (+offset) * offset is number of bytes in rdata where the dname is located. */ static int az_add_additionals_from(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_rrset* rrset, size_t offset) { struct packed_rrset_data* d = rrset->data; size_t i; if(!d) return 0; for(i=0; icount; i++) { size_t dlen; struct auth_data* domain; struct auth_rrset* ref; if(d->rr_len[i] < 2+offset) continue; /* too short */ if(!(dlen = dname_valid(d->rr_data[i]+2+offset, d->rr_len[i]-2-offset))) continue; /* malformed */ domain = az_find_name(z, d->rr_data[i]+2+offset, dlen); if(!domain) continue; if((ref=az_domain_rrset(domain, LDNS_RR_TYPE_A)) != NULL) { if(!msg_add_rrset_ar(z, region, msg, domain, ref)) return 0; } if((ref=az_domain_rrset(domain, LDNS_RR_TYPE_AAAA)) != NULL) { if(!msg_add_rrset_ar(z, region, msg, domain, ref)) return 0; } } return 1; } /** add negative SOA record (with negative TTL) */ static int az_add_negative_soa(struct auth_zone* z, struct regional* region, struct dns_msg* msg) { time_t minimum; size_t i; struct packed_rrset_data* d; struct auth_rrset* soa; struct auth_data* apex = az_find_name(z, z->name, z->namelen); if(!apex) return 0; soa = az_domain_rrset(apex, LDNS_RR_TYPE_SOA); if(!soa) return 0; /* must be first to put in message; we want to fix the TTL with * one RRset here, otherwise we'd need to loop over the RRs to get * the resulting lower TTL */ log_assert(msg->rep->rrset_count == 0); if(!msg_add_rrset_ns(z, region, msg, apex, soa)) return 0; /* fixup TTL */ d = (struct packed_rrset_data*)msg->rep->rrsets[msg->rep->rrset_count-1]->entry.data; /* last 4 bytes are minimum ttl in network format */ if(d->count == 0) return 0; if(d->rr_len[0] < 2+4) return 0; minimum = (time_t)sldns_read_uint32(d->rr_data[0]+(d->rr_len[0]-4)); minimum = d->ttlttl:minimum; d->ttl = minimum; for(i=0; i < d->count + d->rrsig_count; i++) d->rr_ttl[i] = minimum; msg->rep->ttl = get_rrset_ttl(msg->rep->rrsets[0]); msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; return 1; } /** See if the query goes to empty nonterminal (that has no auth_data, * but there are nodes underneath. We already checked that there are * not NS, or DNAME above, so that we only need to check if some node * exists below (with nonempty rr list), return true if emptynonterminal */ static int az_empty_nonterminal(struct auth_zone* z, struct query_info* qinfo, struct auth_data* node) { struct auth_data* next; if(!node) { /* no smaller was found, use first (smallest) node as the * next one */ next = (struct auth_data*)rbtree_first(&z->data); } else { next = (struct auth_data*)rbtree_next(&node->node); } while(next && (rbnode_type*)next != RBTREE_NULL && next->rrsets == NULL) { /* the next name has empty rrsets, is an empty nonterminal * itself, see if there exists something below it */ next = (struct auth_data*)rbtree_next(&node->node); } if((rbnode_type*)next == RBTREE_NULL || !next) { /* there is no next node, so something below it cannot * exist */ return 0; } /* a next node exists, if there was something below the query, * this node has to be it. See if it is below the query name */ if(dname_strict_subdomain_c(next->name, qinfo->qname)) return 1; return 0; } /** create synth cname target name in buffer, or fail if too long */ static size_t synth_cname_buf(uint8_t* qname, size_t qname_len, size_t dname_len, uint8_t* dtarg, size_t dtarglen, uint8_t* buf, size_t buflen) { size_t newlen = qname_len + dtarglen - dname_len; if(newlen > buflen) { /* YXDOMAIN error */ return 0; } /* new name is concatenation of qname front (without DNAME owner) * and DNAME target name */ memcpy(buf, qname, qname_len-dname_len); memmove(buf+(qname_len-dname_len), dtarg, dtarglen); return newlen; } /** create synthetic CNAME rrset for in a DNAME answer in region, * false on alloc failure, cname==NULL when name too long. */ static int create_synth_cname(uint8_t* qname, size_t qname_len, struct regional* region, struct auth_data* node, struct auth_rrset* dname, uint16_t dclass, struct ub_packed_rrset_key** cname) { uint8_t buf[LDNS_MAX_DOMAINLEN]; uint8_t* dtarg; size_t dtarglen, newlen; struct packed_rrset_data* d; /* get DNAME target name */ if(dname->data->count < 1) return 0; if(dname->data->rr_len[0] < 3) return 0; /* at least rdatalen +1 */ dtarg = dname->data->rr_data[0]+2; dtarglen = dname->data->rr_len[0]-2; if(sldns_read_uint16(dname->data->rr_data[0]) != dtarglen) return 0; /* rdatalen in DNAME rdata is malformed */ if(dname_valid(dtarg, dtarglen) != dtarglen) return 0; /* DNAME RR has malformed rdata */ if(qname_len == 0) return 0; /* too short */ if(qname_len <= node->namelen) return 0; /* qname too short for dname removal */ /* synthesize a CNAME */ newlen = synth_cname_buf(qname, qname_len, node->namelen, dtarg, dtarglen, buf, sizeof(buf)); if(newlen == 0) { /* YXDOMAIN error */ *cname = NULL; return 1; } *cname = (struct ub_packed_rrset_key*)regional_alloc(region, sizeof(struct ub_packed_rrset_key)); if(!*cname) return 0; /* out of memory */ memset(&(*cname)->entry, 0, sizeof((*cname)->entry)); (*cname)->entry.key = (*cname); (*cname)->rk.type = htons(LDNS_RR_TYPE_CNAME); (*cname)->rk.rrset_class = htons(dclass); (*cname)->rk.flags = 0; (*cname)->rk.dname = regional_alloc_init(region, qname, qname_len); if(!(*cname)->rk.dname) return 0; /* out of memory */ (*cname)->rk.dname_len = qname_len; (*cname)->entry.hash = rrset_key_hash(&(*cname)->rk); d = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(struct packed_rrset_data) + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t) + newlen); if(!d) return 0; /* out of memory */ (*cname)->entry.data = d; d->ttl = 0; /* 0 for synthesized CNAME TTL */ d->count = 1; d->rrsig_count = 0; d->trust = rrset_trust_ans_noAA; d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); d->rr_len[0] = newlen + sizeof(uint16_t); packed_rrset_ptr_fixup(d); d->rr_ttl[0] = d->ttl; sldns_write_uint16(d->rr_data[0], newlen); memmove(d->rr_data[0] + sizeof(uint16_t), buf, newlen); return 1; } /** add a synthesized CNAME to the answer section */ static int add_synth_cname(struct auth_zone* z, uint8_t* qname, size_t qname_len, struct regional* region, struct dns_msg* msg, struct auth_data* dname, struct auth_rrset* rrset) { struct ub_packed_rrset_key* cname; /* synthesize a CNAME */ if(!create_synth_cname(qname, qname_len, region, dname, rrset, z->dclass, &cname)) { /* out of memory */ return 0; } if(!cname) { /* cname cannot be create because of YXDOMAIN */ msg->rep->flags |= LDNS_RCODE_YXDOMAIN; return 1; } /* add cname to message */ if(!msg_grow_array(region, msg)) return 0; msg->rep->rrsets[msg->rep->rrset_count] = cname; msg->rep->rrset_count++; msg->rep->an_numrrsets++; msg_ttl(msg); return 1; } /** Change a dname to a different one, for wildcard namechange */ static void az_change_dnames(struct dns_msg* msg, uint8_t* oldname, uint8_t* newname, size_t newlen, int an_only) { size_t i; size_t start = 0, end = msg->rep->rrset_count; if(!an_only) start = msg->rep->an_numrrsets; if(an_only) end = msg->rep->an_numrrsets; for(i=start; irep->rrsets[i]->rk.dname, oldname) == 0) { msg->rep->rrsets[i]->rk.dname = newname; msg->rep->rrsets[i]->rk.dname_len = newlen; } } } /** find NSEC record covering the query */ static struct auth_rrset* az_find_nsec_cover(struct auth_zone* z, struct auth_data** node) { uint8_t* nm = (*node)->name; size_t nmlen = (*node)->namelen; struct auth_rrset* rrset; /* find the NSEC for the smallest-or-equal node */ /* if node == NULL, we did not find a smaller name. But the zone * name is the smallest name and should have an NSEC. So there is * no NSEC to return (for a properly signed zone) */ /* for empty nonterminals, the auth-data node should not exist, * and thus we don't need to go rbtree_previous here to find * a domain with an NSEC record */ /* but there could be glue, and if this is node, then it has no NSEC. * Go up to find nonglue (previous) NSEC-holding nodes */ while((rrset=az_domain_rrset(*node, LDNS_RR_TYPE_NSEC)) == NULL) { if(dname_is_root(nm)) return NULL; if(nmlen == z->namelen) return NULL; dname_remove_label(&nm, &nmlen); /* adjust *node for the nsec rrset to find in */ *node = az_find_name(z, nm, nmlen); } return rrset; } /** Find NSEC and add for wildcard denial */ static int az_nsec_wildcard_denial(struct auth_zone* z, struct regional* region, struct dns_msg* msg, uint8_t* cenm, size_t cenmlen) { struct query_info qinfo; int node_exact; struct auth_data* node; struct auth_rrset* nsec; uint8_t wc[LDNS_MAX_DOMAINLEN]; if(cenmlen+2 > sizeof(wc)) return 0; /* result would be too long */ wc[0] = 1; /* length of wildcard label */ wc[1] = (uint8_t)'*'; /* wildcard label */ memmove(wc+2, cenm, cenmlen); /* we have '*.ce' in wc wildcard name buffer */ /* get nsec cover for that */ qinfo.qname = wc; qinfo.qname_len = cenmlen+2; qinfo.qtype = 0; qinfo.qclass = 0; az_find_domain(z, &qinfo, &node_exact, &node); if((nsec=az_find_nsec_cover(z, &node)) != NULL) { if(!msg_add_rrset_ns(z, region, msg, node, nsec)) return 0; } return 1; } /** Find the NSEC3PARAM rrset (if any) and if true you have the parameters */ static int az_nsec3_param(struct auth_zone* z, int* algo, size_t* iter, uint8_t** salt, size_t* saltlen) { struct auth_data* apex; struct auth_rrset* param; size_t i; apex = az_find_name(z, z->name, z->namelen); if(!apex) return 0; param = az_domain_rrset(apex, LDNS_RR_TYPE_NSEC3PARAM); if(!param || param->data->count==0) return 0; /* no RRset or no RRs in rrset */ /* find out which NSEC3PARAM RR has supported parameters */ /* skip unknown flags (dynamic signer is recalculating nsec3 chain) */ for(i=0; idata->count; i++) { uint8_t* rdata = param->data->rr_data[i]+2; size_t rdatalen = param->data->rr_len[i]; if(rdatalen < 2+5) continue; /* too short */ if(!nsec3_hash_algo_size_supported((int)(rdata[0]))) continue; /* unsupported algo */ if(rdatalen < (size_t)(2+5+(size_t)rdata[4])) continue; /* salt missing */ if((rdata[1]&NSEC3_UNKNOWN_FLAGS)!=0) continue; /* unknown flags */ *algo = (int)(rdata[0]); *iter = sldns_read_uint16(rdata+2); *saltlen = rdata[4]; if(*saltlen == 0) *salt = NULL; else *salt = rdata+5; return 1; } /* no supported params */ return 0; } /** Hash a name with nsec3param into buffer, it has zone name appended. * return length of hash */ static size_t az_nsec3_hash(uint8_t* buf, size_t buflen, uint8_t* nm, size_t nmlen, int algo, size_t iter, uint8_t* salt, size_t saltlen) { size_t hlen = nsec3_hash_algo_size_supported(algo); /* buffer has domain name, nsec3hash, and 256 is for max saltlen * (salt has 0-255 length) */ unsigned char p[LDNS_MAX_DOMAINLEN+1+N3HASHBUFLEN+256]; size_t i; if(nmlen+saltlen > sizeof(p) || hlen+saltlen > sizeof(p)) return 0; if(hlen > buflen) return 0; /* somehow too large for destination buffer */ /* hashfunc(name, salt) */ memmove(p, nm, nmlen); query_dname_tolower(p); if(salt && saltlen > 0) memmove(p+nmlen, salt, saltlen); (void)secalgo_nsec3_hash(algo, p, nmlen+saltlen, (unsigned char*)buf); for(i=0; i 0) memmove(p+hlen, salt, saltlen); (void)secalgo_nsec3_hash(algo, p, hlen+saltlen, (unsigned char*)buf); } return hlen; } /** Hash name and return b32encoded hashname for lookup, zone name appended */ static int az_nsec3_hashname(struct auth_zone* z, uint8_t* hashname, size_t* hashnmlen, uint8_t* nm, size_t nmlen, int algo, size_t iter, uint8_t* salt, size_t saltlen) { uint8_t hash[N3HASHBUFLEN]; size_t hlen; int ret; hlen = az_nsec3_hash(hash, sizeof(hash), nm, nmlen, algo, iter, salt, saltlen); if(!hlen) return 0; /* b32 encode */ if(*hashnmlen < hlen*2+1+z->namelen) /* approx b32 as hexb16 */ return 0; ret = sldns_b32_ntop_extended_hex(hash, hlen, (char*)(hashname+1), (*hashnmlen)-1); if(ret<1) return 0; hashname[0] = (uint8_t)ret; ret++; if((*hashnmlen) - ret < z->namelen) return 0; memmove(hashname+ret, z->name, z->namelen); *hashnmlen = z->namelen+(size_t)ret; return 1; } /** Find the datanode that covers the nsec3hash-name */ static struct auth_data* az_nsec3_findnode(struct auth_zone* z, uint8_t* hashnm, size_t hashnmlen) { struct query_info qinfo; struct auth_data* node; int node_exact; qinfo.qclass = 0; qinfo.qtype = 0; qinfo.qname = hashnm; qinfo.qname_len = hashnmlen; /* because canonical ordering and b32 nsec3 ordering are the same. * this is a good lookup to find the nsec3 name. */ az_find_domain(z, &qinfo, &node_exact, &node); /* but we may have to skip non-nsec3 nodes */ /* this may be a lot, the way to speed that up is to have a * separate nsec3 tree with nsec3 nodes */ while(node && (rbnode_type*)node != RBTREE_NULL && !az_domain_rrset(node, LDNS_RR_TYPE_NSEC3)) { node = (struct auth_data*)rbtree_previous(&node->node); } if((rbnode_type*)node == RBTREE_NULL) node = NULL; return node; } /** Find cover for hashed(nm, nmlen) (or NULL) */ static struct auth_data* az_nsec3_find_cover(struct auth_zone* z, uint8_t* nm, size_t nmlen, int algo, size_t iter, uint8_t* salt, size_t saltlen) { struct auth_data* node; uint8_t hname[LDNS_MAX_DOMAINLEN]; size_t hlen = sizeof(hname); if(!az_nsec3_hashname(z, hname, &hlen, nm, nmlen, algo, iter, salt, saltlen)) return NULL; node = az_nsec3_findnode(z, hname, hlen); if(node) return node; /* we did not find any, perhaps because the NSEC3 hash is before * the first hash, we have to find the 'last hash' in the zone */ node = (struct auth_data*)rbtree_last(&z->data); while(node && (rbnode_type*)node != RBTREE_NULL && !az_domain_rrset(node, LDNS_RR_TYPE_NSEC3)) { node = (struct auth_data*)rbtree_previous(&node->node); } if((rbnode_type*)node == RBTREE_NULL) node = NULL; return node; } /** Find exact match for hashed(nm, nmlen) NSEC3 record or NULL */ static struct auth_data* az_nsec3_find_exact(struct auth_zone* z, uint8_t* nm, size_t nmlen, int algo, size_t iter, uint8_t* salt, size_t saltlen) { struct auth_data* node; uint8_t hname[LDNS_MAX_DOMAINLEN]; size_t hlen = sizeof(hname); if(!az_nsec3_hashname(z, hname, &hlen, nm, nmlen, algo, iter, salt, saltlen)) return NULL; node = az_find_name(z, hname, hlen); if(az_domain_rrset(node, LDNS_RR_TYPE_NSEC3)) return node; return NULL; } /** Return nextcloser name (as a ref into the qname). This is one label * more than the cenm (cename must be a suffix of qname) */ static void az_nsec3_get_nextcloser(uint8_t* cenm, uint8_t* qname, size_t qname_len, uint8_t** nx, size_t* nxlen) { int celabs = dname_count_labels(cenm); int qlabs = dname_count_labels(qname); int strip = qlabs - celabs -1; log_assert(dname_strict_subdomain(qname, qlabs, cenm, celabs)); *nx = qname; *nxlen = qname_len; if(strip>0) dname_remove_labels(nx, nxlen, strip); } /** Find the closest encloser that has exact NSEC3. * updated cenm to the new name. If it went up no-exact-ce is true. */ static struct auth_data* az_nsec3_find_ce(struct auth_zone* z, uint8_t** cenm, size_t* cenmlen, int* no_exact_ce, int algo, size_t iter, uint8_t* salt, size_t saltlen) { struct auth_data* node; while((node = az_nsec3_find_exact(z, *cenm, *cenmlen, algo, iter, salt, saltlen)) == NULL) { if(*cenmlen == z->namelen) { /* next step up would take us out of the zone. fail */ return NULL; } *no_exact_ce = 1; dname_remove_label(cenm, cenmlen); } return node; } /* Insert NSEC3 record in authority section, if NULL does nothing */ static int az_nsec3_insert(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* node) { struct auth_rrset* nsec3; if(!node) return 1; /* no node, skip this */ nsec3 = az_domain_rrset(node, LDNS_RR_TYPE_NSEC3); if(!nsec3) return 1; /* if no nsec3 RR, skip it */ if(!msg_add_rrset_ns(z, region, msg, node, nsec3)) return 0; return 1; } /** add NSEC3 records to the zone for the nsec3 proof. * Specify with the flags with parts of the proof are required. * the ce is the exact matching name (for notype) but also delegation points. * qname is the one where the nextcloser name can be derived from. * If NSEC3 is not properly there (in the zone) nothing is added. * always enabled: include nsec3 proving about the Closest Encloser. * that is an exact match that should exist for it. * If that does not exist, a higher exact match + nxproof is enabled * (for some sort of opt-out empty nonterminal cases). * nodataproof: search for exact match and include that instead. * ceproof: include ce proof NSEC3 (omitted for wildcard replies). * nxproof: include denial of the qname. * wcproof: include denial of wildcard (wildcard.ce). */ static int az_add_nsec3_proof(struct auth_zone* z, struct regional* region, struct dns_msg* msg, uint8_t* cenm, size_t cenmlen, uint8_t* qname, size_t qname_len, int nodataproof, int ceproof, int nxproof, int wcproof) { int algo; size_t iter, saltlen; uint8_t* salt; int no_exact_ce = 0; struct auth_data* node; /* find parameters of nsec3 proof */ if(!az_nsec3_param(z, &algo, &iter, &salt, &saltlen)) return 1; /* no nsec3 */ if(nodataproof) { /* see if the node has a hash of itself for the nodata * proof nsec3, this has to be an exact match nsec3. */ struct auth_data* match; match = az_nsec3_find_exact(z, qname, qname_len, algo, iter, salt, saltlen); if(match) { if(!az_nsec3_insert(z, region, msg, match)) return 0; /* only nodata NSEC3 needed, no CE or others. */ return 1; } } /* find ce that has an NSEC3 */ if(ceproof) { node = az_nsec3_find_ce(z, &cenm, &cenmlen, &no_exact_ce, algo, iter, salt, saltlen); if(no_exact_ce) nxproof = 1; if(!az_nsec3_insert(z, region, msg, node)) return 0; } if(nxproof) { uint8_t* nx; size_t nxlen; /* create nextcloser domain name */ az_nsec3_get_nextcloser(cenm, qname, qname_len, &nx, &nxlen); /* find nsec3 that matches or covers it */ node = az_nsec3_find_cover(z, nx, nxlen, algo, iter, salt, saltlen); if(!az_nsec3_insert(z, region, msg, node)) return 0; } if(wcproof) { /* create wildcard name *.ce */ uint8_t wc[LDNS_MAX_DOMAINLEN]; size_t wclen; if(cenmlen+2 > sizeof(wc)) return 0; /* result would be too long */ wc[0] = 1; /* length of wildcard label */ wc[1] = (uint8_t)'*'; /* wildcard label */ memmove(wc+2, cenm, cenmlen); wclen = cenmlen+2; /* find nsec3 that matches or covers it */ node = az_nsec3_find_cover(z, wc, wclen, algo, iter, salt, saltlen); if(!az_nsec3_insert(z, region, msg, node)) return 0; } return 1; } /** generate answer for positive answer */ static int az_generate_positive_answer(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* node, struct auth_rrset* rrset) { if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; /* see if we want additional rrs */ if(rrset->type == LDNS_RR_TYPE_MX) { if(!az_add_additionals_from(z, region, msg, rrset, 2)) return 0; } else if(rrset->type == LDNS_RR_TYPE_SRV) { if(!az_add_additionals_from(z, region, msg, rrset, 6)) return 0; } else if(rrset->type == LDNS_RR_TYPE_NS) { if(!az_add_additionals_from(z, region, msg, rrset, 0)) return 0; } return 1; } /** generate answer for type ANY answer */ static int az_generate_any_answer(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* node) { struct auth_rrset* rrset; int added = 0; /* add a couple (at least one) RRs */ if((rrset=az_domain_rrset(node, LDNS_RR_TYPE_SOA)) != NULL) { if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; added++; } if((rrset=az_domain_rrset(node, LDNS_RR_TYPE_MX)) != NULL) { if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; added++; } if((rrset=az_domain_rrset(node, LDNS_RR_TYPE_A)) != NULL) { if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; added++; } if((rrset=az_domain_rrset(node, LDNS_RR_TYPE_AAAA)) != NULL) { if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; added++; } if(added == 0 && node && node->rrsets) { if(!msg_add_rrset_an(z, region, msg, node, node->rrsets)) return 0; } return 1; } /** follow cname chain and add more data to the answer section */ static int follow_cname_chain(struct auth_zone* z, uint16_t qtype, struct regional* region, struct dns_msg* msg, struct packed_rrset_data* d) { int maxchain = 0; /* see if we can add the target of the CNAME into the answer */ while(maxchain++ < MAX_CNAME_CHAIN) { struct auth_data* node; struct auth_rrset* rrset; size_t clen; /* d has cname rdata */ if(d->count == 0) break; /* no CNAME */ if(d->rr_len[0] < 2+1) break; /* too small */ if((clen=dname_valid(d->rr_data[0]+2, d->rr_len[0]-2))==0) break; /* malformed */ if(!dname_subdomain_c(d->rr_data[0]+2, z->name)) break; /* target out of zone */ if((node = az_find_name(z, d->rr_data[0]+2, clen))==NULL) break; /* no such target name */ if((rrset=az_domain_rrset(node, qtype))!=NULL) { /* done we found the target */ if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; break; } if((rrset=az_domain_rrset(node, LDNS_RR_TYPE_CNAME))==NULL) break; /* no further CNAME chain, notype */ if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; d = rrset->data; } return 1; } /** generate answer for cname answer */ static int az_generate_cname_answer(struct auth_zone* z, struct query_info* qinfo, struct regional* region, struct dns_msg* msg, struct auth_data* node, struct auth_rrset* rrset) { if(!msg_add_rrset_an(z, region, msg, node, rrset)) return 0; if(!rrset) return 1; if(!follow_cname_chain(z, qinfo->qtype, region, msg, rrset->data)) return 0; return 1; } /** generate answer for notype answer */ static int az_generate_notype_answer(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* node) { struct auth_rrset* rrset; if(!az_add_negative_soa(z, region, msg)) return 0; /* DNSSEC denial NSEC */ if((rrset=az_domain_rrset(node, LDNS_RR_TYPE_NSEC))!=NULL) { if(!msg_add_rrset_ns(z, region, msg, node, rrset)) return 0; } else if(node) { /* DNSSEC denial NSEC3 */ if(!az_add_nsec3_proof(z, region, msg, node->name, node->namelen, msg->qinfo.qname, msg->qinfo.qname_len, 1, 1, 0, 0)) return 0; } return 1; } /** generate answer for referral answer */ static int az_generate_referral_answer(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* ce, struct auth_rrset* rrset) { struct auth_rrset* ds, *nsec; /* turn off AA flag, referral is nonAA because it leaves the zone */ log_assert(ce); msg->rep->flags &= ~BIT_AA; if(!msg_add_rrset_ns(z, region, msg, ce, rrset)) return 0; /* add DS or deny it */ if((ds=az_domain_rrset(ce, LDNS_RR_TYPE_DS))!=NULL) { if(!msg_add_rrset_ns(z, region, msg, ce, ds)) return 0; } else { /* deny the DS */ if((nsec=az_domain_rrset(ce, LDNS_RR_TYPE_NSEC))!=NULL) { if(!msg_add_rrset_ns(z, region, msg, ce, nsec)) return 0; } else { if(!az_add_nsec3_proof(z, region, msg, ce->name, ce->namelen, msg->qinfo.qname, msg->qinfo.qname_len, 1, 1, 0, 0)) return 0; } } /* add additional rrs for type NS */ if(!az_add_additionals_from(z, region, msg, rrset, 0)) return 0; return 1; } /** generate answer for DNAME answer */ static int az_generate_dname_answer(struct auth_zone* z, struct query_info* qinfo, struct regional* region, struct dns_msg* msg, struct auth_data* ce, struct auth_rrset* rrset) { log_assert(ce); /* add the DNAME and then a CNAME */ if(!msg_add_rrset_an(z, region, msg, ce, rrset)) return 0; if(!add_synth_cname(z, qinfo->qname, qinfo->qname_len, region, msg, ce, rrset)) return 0; if(FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_YXDOMAIN) return 1; if(msg->rep->rrset_count == 0 || !msg->rep->rrsets[msg->rep->rrset_count-1]) return 0; if(!follow_cname_chain(z, qinfo->qtype, region, msg, (struct packed_rrset_data*)msg->rep->rrsets[ msg->rep->rrset_count-1]->entry.data)) return 0; return 1; } /** generate answer for wildcard answer */ static int az_generate_wildcard_answer(struct auth_zone* z, struct query_info* qinfo, struct regional* region, struct dns_msg* msg, struct auth_data* ce, struct auth_data* wildcard, struct auth_data* node) { struct auth_rrset* rrset, *nsec; int insert_ce = 0; if((rrset=az_domain_rrset(wildcard, qinfo->qtype)) != NULL) { /* wildcard has type, add it */ if(!msg_add_rrset_an(z, region, msg, wildcard, rrset)) return 0; az_change_dnames(msg, wildcard->name, msg->qinfo.qname, msg->qinfo.qname_len, 1); } else if((rrset=az_domain_rrset(wildcard, LDNS_RR_TYPE_CNAME))!=NULL) { /* wildcard has cname instead, do that */ if(!msg_add_rrset_an(z, region, msg, wildcard, rrset)) return 0; az_change_dnames(msg, wildcard->name, msg->qinfo.qname, msg->qinfo.qname_len, 1); if(!follow_cname_chain(z, qinfo->qtype, region, msg, rrset->data)) return 0; } else if(qinfo->qtype == LDNS_RR_TYPE_ANY && wildcard->rrsets) { /* add ANY rrsets from wildcard node */ if(!az_generate_any_answer(z, region, msg, wildcard)) return 0; az_change_dnames(msg, wildcard->name, msg->qinfo.qname, msg->qinfo.qname_len, 1); } else { /* wildcard has nodata, notype answer */ /* call other notype routine for dnssec notype denials */ if(!az_generate_notype_answer(z, region, msg, wildcard)) return 0; /* because the notype, there is no positive data with an * RRSIG that indicates the wildcard position. Thus the * wildcard qname denial needs to have a CE nsec3. */ insert_ce = 1; } /* ce and node for dnssec denial of wildcard original name */ if((nsec=az_find_nsec_cover(z, &node)) != NULL) { if(!msg_add_rrset_ns(z, region, msg, node, nsec)) return 0; } else if(ce) { uint8_t* wildup = wildcard->name; size_t wilduplen= wildcard->namelen; dname_remove_label(&wildup, &wilduplen); if(!az_add_nsec3_proof(z, region, msg, wildup, wilduplen, msg->qinfo.qname, msg->qinfo.qname_len, 0, insert_ce, 1, 0)) return 0; } /* fixup name of wildcard from *.zone to qname, use already allocated * pointer to msg qname */ az_change_dnames(msg, wildcard->name, msg->qinfo.qname, msg->qinfo.qname_len, 0); return 1; } /** generate answer for nxdomain answer */ static int az_generate_nxdomain_answer(struct auth_zone* z, struct regional* region, struct dns_msg* msg, struct auth_data* ce, struct auth_data* node) { struct auth_rrset* nsec; msg->rep->flags |= LDNS_RCODE_NXDOMAIN; if(!az_add_negative_soa(z, region, msg)) return 0; if((nsec=az_find_nsec_cover(z, &node)) != NULL) { if(!msg_add_rrset_ns(z, region, msg, node, nsec)) return 0; if(ce && !az_nsec_wildcard_denial(z, region, msg, ce->name, ce->namelen)) return 0; } else if(ce) { if(!az_add_nsec3_proof(z, region, msg, ce->name, ce->namelen, msg->qinfo.qname, msg->qinfo.qname_len, 0, 1, 1, 1)) return 0; } return 1; } /** Create answers when an exact match exists for the domain name */ static int az_generate_answer_with_node(struct auth_zone* z, struct query_info* qinfo, struct regional* region, struct dns_msg* msg, struct auth_data* node) { struct auth_rrset* rrset; /* positive answer, rrset we are looking for exists */ if((rrset=az_domain_rrset(node, qinfo->qtype)) != NULL) { return az_generate_positive_answer(z, region, msg, node, rrset); } /* CNAME? */ if((rrset=az_domain_rrset(node, LDNS_RR_TYPE_CNAME)) != NULL) { return az_generate_cname_answer(z, qinfo, region, msg, node, rrset); } /* type ANY ? */ if(qinfo->qtype == LDNS_RR_TYPE_ANY) { return az_generate_any_answer(z, region, msg, node); } /* NOERROR/NODATA (no such type at domain name) */ return az_generate_notype_answer(z, region, msg, node); } /** Generate answer without an existing-node that we can use. * So it'll be a referral, DNAME or nxdomain */ static int az_generate_answer_nonexistnode(struct auth_zone* z, struct query_info* qinfo, struct regional* region, struct dns_msg* msg, struct auth_data* ce, struct auth_rrset* rrset, struct auth_data* node) { struct auth_data* wildcard; /* we do not have an exact matching name (that exists) */ /* see if we have a NS or DNAME in the ce */ if(ce && rrset && rrset->type == LDNS_RR_TYPE_NS) { return az_generate_referral_answer(z, region, msg, ce, rrset); } if(ce && rrset && rrset->type == LDNS_RR_TYPE_DNAME) { return az_generate_dname_answer(z, qinfo, region, msg, ce, rrset); } /* if there is an empty nonterminal, wildcard and nxdomain don't * happen, it is a notype answer */ if(az_empty_nonterminal(z, qinfo, node)) { return az_generate_notype_answer(z, region, msg, node); } /* see if we have a wildcard under the ce */ if((wildcard=az_find_wildcard(z, qinfo, ce)) != NULL) { return az_generate_wildcard_answer(z, qinfo, region, msg, ce, wildcard, node); } /* generate nxdomain answer */ return az_generate_nxdomain_answer(z, region, msg, ce, node); } /** Lookup answer in a zone. */ static int auth_zone_generate_answer(struct auth_zone* z, struct query_info* qinfo, struct regional* region, struct dns_msg** msg, int* fallback) { struct auth_data* node, *ce; struct auth_rrset* rrset; int node_exact, node_exists; /* does the zone want fallback in case of failure? */ *fallback = z->fallback_enabled; if(!(*msg=msg_create(region, qinfo))) return 0; /* lookup if there is a matching domain name for the query */ az_find_domain(z, qinfo, &node_exact, &node); /* see if node exists for generating answers from (i.e. not glue and * obscured by NS or DNAME or NSEC3-only), and also return the * closest-encloser from that, closest node that should be used * to generate answers from that is above the query */ node_exists = az_find_ce(z, qinfo, node, node_exact, &ce, &rrset); if(verbosity >= VERB_ALGO) { char zname[256], qname[256], nname[256], cename[256], tpstr[32], rrstr[32]; sldns_wire2str_dname_buf(qinfo->qname, qinfo->qname_len, qname, sizeof(qname)); sldns_wire2str_type_buf(qinfo->qtype, tpstr, sizeof(tpstr)); sldns_wire2str_dname_buf(z->name, z->namelen, zname, sizeof(zname)); if(node) sldns_wire2str_dname_buf(node->name, node->namelen, nname, sizeof(nname)); else snprintf(nname, sizeof(nname), "NULL"); if(ce) sldns_wire2str_dname_buf(ce->name, ce->namelen, cename, sizeof(cename)); else snprintf(cename, sizeof(cename), "NULL"); if(rrset) sldns_wire2str_type_buf(rrset->type, rrstr, sizeof(rrstr)); else snprintf(rrstr, sizeof(rrstr), "NULL"); log_info("auth_zone %s query %s %s, domain %s %s %s, " "ce %s, rrset %s", zname, qname, tpstr, nname, (node_exact?"exact":"notexact"), (node_exists?"exist":"notexist"), cename, rrstr); } if(node_exists) { /* the node is fine, generate answer from node */ return az_generate_answer_with_node(z, qinfo, region, *msg, node); } return az_generate_answer_nonexistnode(z, qinfo, region, *msg, ce, rrset, node); } int auth_zones_lookup(struct auth_zones* az, struct query_info* qinfo, struct regional* region, struct dns_msg** msg, int* fallback, uint8_t* dp_nm, size_t dp_nmlen) { int r; struct auth_zone* z; /* find the zone that should contain the answer. */ lock_rw_rdlock(&az->lock); z = auth_zone_find(az, dp_nm, dp_nmlen, qinfo->qclass); if(!z) { lock_rw_unlock(&az->lock); /* no auth zone, fallback to internet */ *fallback = 1; return 0; } lock_rw_rdlock(&z->lock); lock_rw_unlock(&az->lock); /* if not for upstream queries, fallback */ if(!z->for_upstream) { lock_rw_unlock(&z->lock); *fallback = 1; return 0; } if(z->zone_expired) { *fallback = z->fallback_enabled; lock_rw_unlock(&z->lock); return 0; } /* see what answer that zone would generate */ r = auth_zone_generate_answer(z, qinfo, region, msg, fallback); lock_rw_unlock(&z->lock); return r; } /** encode auth answer */ static void auth_answer_encode(struct query_info* qinfo, struct module_env* env, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, struct dns_msg* msg) { uint16_t udpsize; udpsize = edns->udp_size; edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, msg->rep, (int)FLAGS_GET_RCODE(msg->rep->flags), edns, repinfo, temp, env->now_tv) || !reply_info_answer_encode(qinfo, msg->rep, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), buf, 0, 0, temp, udpsize, edns, (int)(edns->bits&EDNS_DO), 0)) { error_encode(buf, (LDNS_RCODE_SERVFAIL|BIT_AA), qinfo, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), edns); } } /** encode auth error answer */ static void auth_error_encode(struct query_info* qinfo, struct module_env* env, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, int rcode) { edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(env, qinfo, NULL, NULL, rcode, edns, repinfo, temp, env->now_tv)) edns->opt_list = NULL; error_encode(buf, rcode|BIT_AA, qinfo, *(uint16_t*)sldns_buffer_begin(buf), sldns_buffer_read_u16_at(buf, 2), edns); } int auth_zones_answer(struct auth_zones* az, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, struct sldns_buffer* buf, struct regional* temp) { struct dns_msg* msg = NULL; struct auth_zone* z; int r; int fallback = 0; lock_rw_rdlock(&az->lock); if(!az->have_downstream) { /* no downstream auth zones */ lock_rw_unlock(&az->lock); return 0; } if(qinfo->qtype == LDNS_RR_TYPE_DS) { uint8_t* delname = qinfo->qname; size_t delnamelen = qinfo->qname_len; dname_remove_label(&delname, &delnamelen); z = auth_zones_find_zone(az, delname, delnamelen, qinfo->qclass); } else { z = auth_zones_find_zone(az, qinfo->qname, qinfo->qname_len, qinfo->qclass); } if(!z) { /* no zone above it */ lock_rw_unlock(&az->lock); return 0; } lock_rw_rdlock(&z->lock); lock_rw_unlock(&az->lock); if(!z->for_downstream) { lock_rw_unlock(&z->lock); return 0; } if(z->zone_expired) { if(z->fallback_enabled) { lock_rw_unlock(&z->lock); return 0; } lock_rw_unlock(&z->lock); lock_rw_wrlock(&az->lock); az->num_query_down++; lock_rw_unlock(&az->lock); auth_error_encode(qinfo, env, edns, repinfo, buf, temp, LDNS_RCODE_SERVFAIL); return 1; } /* answer it from zone z */ r = auth_zone_generate_answer(z, qinfo, temp, &msg, &fallback); lock_rw_unlock(&z->lock); if(!r && fallback) { /* fallback to regular answering (recursive) */ return 0; } lock_rw_wrlock(&az->lock); az->num_query_down++; lock_rw_unlock(&az->lock); /* encode answer */ if(!r) auth_error_encode(qinfo, env, edns, repinfo, buf, temp, LDNS_RCODE_SERVFAIL); else auth_answer_encode(qinfo, env, edns, repinfo, buf, temp, msg); return 1; } int auth_zones_can_fallback(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass) { int r; struct auth_zone* z; lock_rw_rdlock(&az->lock); z = auth_zone_find(az, nm, nmlen, dclass); if(!z) { lock_rw_unlock(&az->lock); /* no such auth zone, fallback */ return 1; } lock_rw_rdlock(&z->lock); lock_rw_unlock(&az->lock); r = z->fallback_enabled || (!z->for_upstream); lock_rw_unlock(&z->lock); return r; } int auth_zone_parse_notify_serial(sldns_buffer* pkt, uint32_t *serial) { struct query_info q; uint16_t rdlen; memset(&q, 0, sizeof(q)); sldns_buffer_set_position(pkt, 0); if(!query_info_parse(&q, pkt)) return 0; if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) == 0) return 0; /* skip name of RR in answer section */ if(sldns_buffer_remaining(pkt) < 1) return 0; if(pkt_dname_len(pkt) == 0) return 0; /* check type */ if(sldns_buffer_remaining(pkt) < 10 /* type,class,ttl,rdatalen*/) return 0; if(sldns_buffer_read_u16(pkt) != LDNS_RR_TYPE_SOA) return 0; sldns_buffer_skip(pkt, 2); /* class */ sldns_buffer_skip(pkt, 4); /* ttl */ rdlen = sldns_buffer_read_u16(pkt); /* rdatalen */ if(sldns_buffer_remaining(pkt) < rdlen) return 0; if(rdlen < 22) return 0; /* bad soa length */ sldns_buffer_skip(pkt, (ssize_t)(rdlen-20)); *serial = sldns_buffer_read_u32(pkt); /* return true when has serial in answer section */ return 1; } /** see if addr appears in the list */ static int addr_in_list(struct auth_addr* list, struct sockaddr_storage* addr, socklen_t addrlen) { struct auth_addr* p; for(p=list; p; p=p->next) { if(sockaddr_cmp_addr(addr, addrlen, &p->addr, p->addrlen)==0) return 1; } return 0; } /** check if an address matches a master specification (or one of its * addresses in the addr list) */ static int addr_matches_master(struct auth_master* master, struct sockaddr_storage* addr, socklen_t addrlen, struct auth_master** fromhost) { struct sockaddr_storage a; socklen_t alen = 0; int net = 0; if(addr_in_list(master->list, addr, addrlen)) { *fromhost = master; return 1; } /* compare address (but not port number, that is the destination * port of the master, the port number of the received notify is * allowed to by any port on that master) */ if(extstrtoaddr(master->host, &a, &alen) && sockaddr_cmp_addr(addr, addrlen, &a, alen)==0) { *fromhost = master; return 1; } /* prefixes, addr/len, like 10.0.0.0/8 */ /* not http and has a / and there is one / */ if(master->allow_notify && !master->http && strchr(master->host, '/') != NULL && strchr(master->host, '/') == strrchr(master->host, '/') && netblockstrtoaddr(master->host, UNBOUND_DNS_PORT, &a, &alen, &net) && alen == addrlen) { if(addr_in_common(addr, (addr_is_ip6(addr, addrlen)?128:32), &a, net, alen) >= net) { *fromhost = NULL; /* prefix does not have destination to send the probe or transfer with */ return 1; /* matches the netblock */ } } return 0; } /** check access list for notifies */ static int az_xfr_allowed_notify(struct auth_xfer* xfr, struct sockaddr_storage* addr, socklen_t addrlen, struct auth_master** fromhost) { struct auth_master* p; for(p=xfr->allow_notify_list; p; p=p->next) { if(addr_matches_master(p, addr, addrlen, fromhost)) { return 1; } } return 0; } /** see if the serial means the zone has to be updated, i.e. the serial * is newer than the zone serial, or we have no zone */ static int xfr_serial_means_update(struct auth_xfer* xfr, uint32_t serial) { if(!xfr->have_zone) return 1; /* no zone, anything is better */ if(xfr->zone_expired) return 1; /* expired, the sent serial is better than expired data */ if(compare_serial(xfr->serial, serial) < 0) return 1; /* our serial is smaller than the sent serial, the data is newer, fetch it */ return 0; } /** note notify serial, updates the notify information in the xfr struct */ static void xfr_note_notify_serial(struct auth_xfer* xfr, int has_serial, uint32_t serial) { if(xfr->notify_received && xfr->notify_has_serial && has_serial) { /* see if this serial is newer */ if(compare_serial(xfr->notify_serial, serial) < 0) xfr->notify_serial = serial; } else if(xfr->notify_received && xfr->notify_has_serial && !has_serial) { /* remove serial, we have notify without serial */ xfr->notify_has_serial = 0; xfr->notify_serial = 0; } else if(xfr->notify_received && !xfr->notify_has_serial) { /* we already have notify without serial, keep it * that way; no serial check when current operation * is done */ } else { xfr->notify_received = 1; xfr->notify_has_serial = has_serial; xfr->notify_serial = serial; } } /** process a notify serial, start new probe or note serial. xfr is locked */ static void xfr_process_notify(struct auth_xfer* xfr, struct module_env* env, int has_serial, uint32_t serial, struct auth_master* fromhost) { /* if the serial of notify is older than we have, don't fetch * a zone, we already have it */ if(has_serial && !xfr_serial_means_update(xfr, serial)) { lock_basic_unlock(&xfr->lock); return; } /* start new probe with this addr src, or note serial */ if(!xfr_start_probe(xfr, env, fromhost)) { /* not started because already in progress, note the serial */ xfr_note_notify_serial(xfr, has_serial, serial); lock_basic_unlock(&xfr->lock); } /* successful end of start_probe unlocked xfr->lock */ } int auth_zones_notify(struct auth_zones* az, struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t dclass, struct sockaddr_storage* addr, socklen_t addrlen, int has_serial, uint32_t serial, int* refused) { struct auth_xfer* xfr; struct auth_master* fromhost = NULL; /* see which zone this is */ lock_rw_rdlock(&az->lock); xfr = auth_xfer_find(az, nm, nmlen, dclass); if(!xfr) { lock_rw_unlock(&az->lock); /* no such zone, refuse the notify */ *refused = 1; return 0; } lock_basic_lock(&xfr->lock); lock_rw_unlock(&az->lock); /* check access list for notifies */ if(!az_xfr_allowed_notify(xfr, addr, addrlen, &fromhost)) { lock_basic_unlock(&xfr->lock); /* notify not allowed, refuse the notify */ *refused = 1; return 0; } /* process the notify */ xfr_process_notify(xfr, env, has_serial, serial, fromhost); return 1; } int auth_zones_startprobesequence(struct auth_zones* az, struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t dclass) { struct auth_xfer* xfr; lock_rw_rdlock(&az->lock); xfr = auth_xfer_find(az, nm, nmlen, dclass); if(!xfr) { lock_rw_unlock(&az->lock); return 0; } lock_basic_lock(&xfr->lock); lock_rw_unlock(&az->lock); xfr_process_notify(xfr, env, 0, 0, NULL); return 1; } /** set a zone expired */ static void auth_xfer_set_expired(struct auth_xfer* xfr, struct module_env* env, int expired) { struct auth_zone* z; /* expire xfr */ lock_basic_lock(&xfr->lock); xfr->zone_expired = expired; lock_basic_unlock(&xfr->lock); /* find auth_zone */ lock_rw_rdlock(&env->auth_zones->lock); z = auth_zone_find(env->auth_zones, xfr->name, xfr->namelen, xfr->dclass); if(!z) { lock_rw_unlock(&env->auth_zones->lock); return; } lock_rw_wrlock(&z->lock); lock_rw_unlock(&env->auth_zones->lock); /* expire auth_zone */ z->zone_expired = expired; lock_rw_unlock(&z->lock); } /** find master (from notify or probe) in list of masters */ static struct auth_master* find_master_by_host(struct auth_master* list, char* host) { struct auth_master* p; for(p=list; p; p=p->next) { if(strcmp(p->host, host) == 0) return p; } return NULL; } /** delete the looked up auth_addrs for all the masters in the list */ static void xfr_masterlist_free_addrs(struct auth_master* list) { struct auth_master* m; for(m=list; m; m=m->next) { if(m->list) { auth_free_master_addrs(m->list); m->list = NULL; } } } /** copy a list of auth_addrs */ static struct auth_addr* auth_addr_list_copy(struct auth_addr* source) { struct auth_addr* list = NULL, *last = NULL; struct auth_addr* p; for(p=source; p; p=p->next) { struct auth_addr* a = (struct auth_addr*)memdup(p, sizeof(*p)); if(!a) { log_err("malloc failure"); auth_free_master_addrs(list); return NULL; } a->next = NULL; if(last) last->next = a; if(!list) list = a; last = a; } return list; } /** copy a master to a new structure, NULL on alloc failure */ static struct auth_master* auth_master_copy(struct auth_master* o) { struct auth_master* m; if(!o) return NULL; m = (struct auth_master*)memdup(o, sizeof(*o)); if(!m) { log_err("malloc failure"); return NULL; } m->next = NULL; if(m->host) { m->host = strdup(m->host); if(!m->host) { free(m); log_err("malloc failure"); return NULL; } } if(m->file) { m->file = strdup(m->file); if(!m->file) { free(m->host); free(m); log_err("malloc failure"); return NULL; } } if(m->list) { m->list = auth_addr_list_copy(m->list); if(!m->list) { free(m->file); free(m->host); free(m); return NULL; } } return m; } /** copy the master addresses from the task_probe lookups to the allow_notify * list of masters */ static void probe_copy_masters_for_allow_notify(struct auth_xfer* xfr) { struct auth_master* list = NULL, *last = NULL; struct auth_master* p; /* build up new list with copies */ for(p = xfr->task_probe->masters; p; p=p->next) { struct auth_master* m = auth_master_copy(p); if(!m) { auth_free_masters(list); /* failed because of malloc failure, use old list */ return; } m->next = NULL; if(last) last->next = m; if(!list) list = m; last = m; } /* success, replace list */ auth_free_masters(xfr->allow_notify_list); xfr->allow_notify_list = list; } /** start the lookups for task_transfer */ static void xfr_transfer_start_lookups(struct auth_xfer* xfr) { /* delete all the looked up addresses in the list */ xfr->task_transfer->scan_addr = NULL; xfr_masterlist_free_addrs(xfr->task_transfer->masters); /* start lookup at the first master */ xfr->task_transfer->lookup_target = xfr->task_transfer->masters; xfr->task_transfer->lookup_aaaa = 0; } /** move to the next lookup of hostname for task_transfer */ static void xfr_transfer_move_to_next_lookup(struct auth_xfer* xfr, struct module_env* env) { if(!xfr->task_transfer->lookup_target) return; /* already at end of list */ if(!xfr->task_transfer->lookup_aaaa && env->cfg->do_ip6) { /* move to lookup AAAA */ xfr->task_transfer->lookup_aaaa = 1; return; } xfr->task_transfer->lookup_target = xfr->task_transfer->lookup_target->next; xfr->task_transfer->lookup_aaaa = 0; if(!env->cfg->do_ip4 && xfr->task_transfer->lookup_target!=NULL) xfr->task_transfer->lookup_aaaa = 1; } /** start the lookups for task_probe */ static void xfr_probe_start_lookups(struct auth_xfer* xfr) { /* delete all the looked up addresses in the list */ xfr->task_probe->scan_addr = NULL; xfr_masterlist_free_addrs(xfr->task_probe->masters); /* start lookup at the first master */ xfr->task_probe->lookup_target = xfr->task_probe->masters; xfr->task_probe->lookup_aaaa = 0; } /** move to the next lookup of hostname for task_probe */ static void xfr_probe_move_to_next_lookup(struct auth_xfer* xfr, struct module_env* env) { if(!xfr->task_probe->lookup_target) return; /* already at end of list */ if(!xfr->task_probe->lookup_aaaa && env->cfg->do_ip6) { /* move to lookup AAAA */ xfr->task_probe->lookup_aaaa = 1; return; } xfr->task_probe->lookup_target = xfr->task_probe->lookup_target->next; xfr->task_probe->lookup_aaaa = 0; if(!env->cfg->do_ip4 && xfr->task_probe->lookup_target!=NULL) xfr->task_probe->lookup_aaaa = 1; } /** start the iteration of the task_transfer list of masters */ static void xfr_transfer_start_list(struct auth_xfer* xfr, struct auth_master* spec) { if(spec) { xfr->task_transfer->scan_specific = find_master_by_host( xfr->task_transfer->masters, spec->host); if(xfr->task_transfer->scan_specific) { xfr->task_transfer->scan_target = NULL; xfr->task_transfer->scan_addr = NULL; if(xfr->task_transfer->scan_specific->list) xfr->task_transfer->scan_addr = xfr->task_transfer->scan_specific->list; return; } } /* no specific (notified) host to scan */ xfr->task_transfer->scan_specific = NULL; xfr->task_transfer->scan_addr = NULL; /* pick up first scan target */ xfr->task_transfer->scan_target = xfr->task_transfer->masters; if(xfr->task_transfer->scan_target && xfr->task_transfer-> scan_target->list) xfr->task_transfer->scan_addr = xfr->task_transfer->scan_target->list; } /** start the iteration of the task_probe list of masters */ static void xfr_probe_start_list(struct auth_xfer* xfr, struct auth_master* spec) { if(spec) { xfr->task_probe->scan_specific = find_master_by_host( xfr->task_probe->masters, spec->host); if(xfr->task_probe->scan_specific) { xfr->task_probe->scan_target = NULL; xfr->task_probe->scan_addr = NULL; if(xfr->task_probe->scan_specific->list) xfr->task_probe->scan_addr = xfr->task_probe->scan_specific->list; return; } } /* no specific (notified) host to scan */ xfr->task_probe->scan_specific = NULL; xfr->task_probe->scan_addr = NULL; /* pick up first scan target */ xfr->task_probe->scan_target = xfr->task_probe->masters; if(xfr->task_probe->scan_target && xfr->task_probe->scan_target->list) xfr->task_probe->scan_addr = xfr->task_probe->scan_target->list; } /** pick up the master that is being scanned right now, task_transfer */ static struct auth_master* xfr_transfer_current_master(struct auth_xfer* xfr) { if(xfr->task_transfer->scan_specific) return xfr->task_transfer->scan_specific; return xfr->task_transfer->scan_target; } /** pick up the master that is being scanned right now, task_probe */ static struct auth_master* xfr_probe_current_master(struct auth_xfer* xfr) { if(xfr->task_probe->scan_specific) return xfr->task_probe->scan_specific; return xfr->task_probe->scan_target; } /** true if at end of list, task_transfer */ static int xfr_transfer_end_of_list(struct auth_xfer* xfr) { return !xfr->task_transfer->scan_specific && !xfr->task_transfer->scan_target; } /** true if at end of list, task_probe */ static int xfr_probe_end_of_list(struct auth_xfer* xfr) { return !xfr->task_probe->scan_specific && !xfr->task_probe->scan_target; } /** move to next master in list, task_transfer */ static void xfr_transfer_nextmaster(struct auth_xfer* xfr) { if(!xfr->task_transfer->scan_specific && !xfr->task_transfer->scan_target) return; if(xfr->task_transfer->scan_addr) { xfr->task_transfer->scan_addr = xfr->task_transfer->scan_addr->next; if(xfr->task_transfer->scan_addr) return; } if(xfr->task_transfer->scan_specific) { xfr->task_transfer->scan_specific = NULL; xfr->task_transfer->scan_target = xfr->task_transfer->masters; if(xfr->task_transfer->scan_target && xfr->task_transfer-> scan_target->list) xfr->task_transfer->scan_addr = xfr->task_transfer->scan_target->list; return; } if(!xfr->task_transfer->scan_target) return; xfr->task_transfer->scan_target = xfr->task_transfer->scan_target->next; if(xfr->task_transfer->scan_target && xfr->task_transfer-> scan_target->list) xfr->task_transfer->scan_addr = xfr->task_transfer->scan_target->list; return; } /** move to next master in list, task_probe */ static void xfr_probe_nextmaster(struct auth_xfer* xfr) { if(!xfr->task_probe->scan_specific && !xfr->task_probe->scan_target) return; if(xfr->task_probe->scan_addr) { xfr->task_probe->scan_addr = xfr->task_probe->scan_addr->next; if(xfr->task_probe->scan_addr) return; } if(xfr->task_probe->scan_specific) { xfr->task_probe->scan_specific = NULL; xfr->task_probe->scan_target = xfr->task_probe->masters; if(xfr->task_probe->scan_target && xfr->task_probe-> scan_target->list) xfr->task_probe->scan_addr = xfr->task_probe->scan_target->list; return; } if(!xfr->task_probe->scan_target) return; xfr->task_probe->scan_target = xfr->task_probe->scan_target->next; if(xfr->task_probe->scan_target && xfr->task_probe-> scan_target->list) xfr->task_probe->scan_addr = xfr->task_probe->scan_target->list; return; } /** create SOA probe packet for xfr */ static void xfr_create_soa_probe_packet(struct auth_xfer* xfr, sldns_buffer* buf, uint16_t id) { struct query_info qinfo; memset(&qinfo, 0, sizeof(qinfo)); qinfo.qname = xfr->name; qinfo.qname_len = xfr->namelen; qinfo.qtype = LDNS_RR_TYPE_SOA; qinfo.qclass = xfr->dclass; qinfo_query_encode(buf, &qinfo); sldns_buffer_write_u16_at(buf, 0, id); } /** create IXFR/AXFR packet for xfr */ static void xfr_create_ixfr_packet(struct auth_xfer* xfr, sldns_buffer* buf, uint16_t id, struct auth_master* master) { struct query_info qinfo; uint32_t serial; int have_zone; have_zone = xfr->have_zone; serial = xfr->serial; memset(&qinfo, 0, sizeof(qinfo)); qinfo.qname = xfr->name; qinfo.qname_len = xfr->namelen; xfr->task_transfer->got_xfr_serial = 0; xfr->task_transfer->rr_scan_num = 0; xfr->task_transfer->incoming_xfr_serial = 0; xfr->task_transfer->on_ixfr_is_axfr = 0; xfr->task_transfer->on_ixfr = 1; qinfo.qtype = LDNS_RR_TYPE_IXFR; if(!have_zone || xfr->task_transfer->ixfr_fail || !master->ixfr) { qinfo.qtype = LDNS_RR_TYPE_AXFR; xfr->task_transfer->ixfr_fail = 0; xfr->task_transfer->on_ixfr = 0; } qinfo.qclass = xfr->dclass; qinfo_query_encode(buf, &qinfo); sldns_buffer_write_u16_at(buf, 0, id); /* append serial for IXFR */ if(qinfo.qtype == LDNS_RR_TYPE_IXFR) { size_t end = sldns_buffer_limit(buf); sldns_buffer_clear(buf); sldns_buffer_set_position(buf, end); /* auth section count 1 */ sldns_buffer_write_u16_at(buf, LDNS_NSCOUNT_OFF, 1); /* write SOA */ sldns_buffer_write_u8(buf, 0xC0); /* compressed ptr to qname */ sldns_buffer_write_u8(buf, 0x0C); sldns_buffer_write_u16(buf, LDNS_RR_TYPE_SOA); sldns_buffer_write_u16(buf, qinfo.qclass); sldns_buffer_write_u32(buf, 0); /* ttl */ sldns_buffer_write_u16(buf, 22); /* rdata length */ sldns_buffer_write_u8(buf, 0); /* . */ sldns_buffer_write_u8(buf, 0); /* . */ sldns_buffer_write_u32(buf, serial); /* serial */ sldns_buffer_write_u32(buf, 0); /* refresh */ sldns_buffer_write_u32(buf, 0); /* retry */ sldns_buffer_write_u32(buf, 0); /* expire */ sldns_buffer_write_u32(buf, 0); /* minimum */ sldns_buffer_flip(buf); } } /** check if returned packet is OK */ static int check_packet_ok(sldns_buffer* pkt, uint16_t qtype, struct auth_xfer* xfr, uint32_t* serial) { /* parse to see if packet worked, valid reply */ /* check serial number of SOA */ if(sldns_buffer_limit(pkt) < LDNS_HEADER_SIZE) return 0; /* check ID */ if(LDNS_ID_WIRE(sldns_buffer_begin(pkt)) != xfr->task_probe->id) return 0; /* check flag bits and rcode */ if(!LDNS_QR_WIRE(sldns_buffer_begin(pkt))) return 0; if(LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_QUERY) return 0; if(LDNS_RCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_RCODE_NOERROR) return 0; /* check qname */ if(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) != 1) return 0; sldns_buffer_skip(pkt, LDNS_HEADER_SIZE); if(sldns_buffer_remaining(pkt) < xfr->namelen) return 0; if(query_dname_compare(sldns_buffer_current(pkt), xfr->name) != 0) return 0; sldns_buffer_skip(pkt, (ssize_t)xfr->namelen); /* check qtype, qclass */ if(sldns_buffer_remaining(pkt) < 4) return 0; if(sldns_buffer_read_u16(pkt) != qtype) return 0; if(sldns_buffer_read_u16(pkt) != xfr->dclass) return 0; if(serial) { uint16_t rdlen; /* read serial number, from answer section SOA */ if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) == 0) return 0; /* read from first record SOA record */ if(sldns_buffer_remaining(pkt) < 1) return 0; if(dname_pkt_compare(pkt, sldns_buffer_current(pkt), xfr->name) != 0) return 0; if(!pkt_dname_len(pkt)) return 0; /* type, class, ttl, rdatalen */ if(sldns_buffer_remaining(pkt) < 4+4+2) return 0; if(sldns_buffer_read_u16(pkt) != qtype) return 0; if(sldns_buffer_read_u16(pkt) != xfr->dclass) return 0; sldns_buffer_skip(pkt, 4); /* ttl */ rdlen = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rdlen) return 0; if(sldns_buffer_remaining(pkt) < 1) return 0; if(!pkt_dname_len(pkt)) /* soa name */ return 0; if(sldns_buffer_remaining(pkt) < 1) return 0; if(!pkt_dname_len(pkt)) /* soa name */ return 0; if(sldns_buffer_remaining(pkt) < 20) return 0; *serial = sldns_buffer_read_u32(pkt); } return 1; } /** read one line from chunks into buffer at current position */ static int chunkline_get_line(struct auth_chunk** chunk, size_t* chunk_pos, sldns_buffer* buf) { int readsome = 0; while(*chunk) { /* more text in this chunk? */ if(*chunk_pos < (*chunk)->len) { readsome = 1; while(*chunk_pos < (*chunk)->len) { char c = (char)((*chunk)->data[*chunk_pos]); (*chunk_pos)++; if(sldns_buffer_remaining(buf) < 2) { /* buffer too short */ verbose(VERB_ALGO, "http chunkline, " "line too long"); return 0; } sldns_buffer_write_u8(buf, (uint8_t)c); if(c == '\n') { /* we are done */ return 1; } } } /* move to next chunk */ *chunk = (*chunk)->next; *chunk_pos = 0; } /* no more text */ if(readsome) return 1; return 0; } /** count number of open and closed parenthesis in a chunkline */ static int chunkline_count_parens(sldns_buffer* buf, size_t start) { size_t end = sldns_buffer_position(buf); size_t i; int count = 0; int squote = 0, dquote = 0; for(i=start; i 0) { chunkline_remove_trailcomment(buf, pos); pos = sldns_buffer_position(buf); if(!chunkline_get_line(chunk, chunk_pos, buf)) { if(sldns_buffer_position(buf) < sldns_buffer_limit(buf)) sldns_buffer_write_u8_at(buf, sldns_buffer_position(buf), 0); else sldns_buffer_write_u8_at(buf, sldns_buffer_position(buf)-1, 0); sldns_buffer_flip(buf); return 0; } parens += chunkline_count_parens(buf, pos); } if(sldns_buffer_remaining(buf) < 1) { verbose(VERB_ALGO, "http chunkline: " "line too long"); return 0; } sldns_buffer_write_u8_at(buf, sldns_buffer_position(buf), 0); sldns_buffer_flip(buf); return 1; } /** process $ORIGIN for http */ static int http_parse_origin(sldns_buffer* buf, struct sldns_file_parse_state* pstate) { char* line = (char*)sldns_buffer_begin(buf); if(strncmp(line, "$ORIGIN", 7) == 0 && isspace((unsigned char)line[7])) { int s; pstate->origin_len = sizeof(pstate->origin); s = sldns_str2wire_dname_buf(sldns_strip_ws(line+8), pstate->origin, &pstate->origin_len); if(s) pstate->origin_len = 0; return 1; } return 0; } /** process $TTL for http */ static int http_parse_ttl(sldns_buffer* buf, struct sldns_file_parse_state* pstate) { char* line = (char*)sldns_buffer_begin(buf); if(strncmp(line, "$TTL", 4) == 0 && isspace((unsigned char)line[4])) { const char* end = NULL; pstate->default_ttl = sldns_str2period( sldns_strip_ws(line+5), &end); return 1; } return 0; } /** find noncomment RR line in chunks, collates lines if ( ) format */ static int chunkline_non_comment_RR(struct auth_chunk** chunk, size_t* chunk_pos, sldns_buffer* buf, struct sldns_file_parse_state* pstate) { while(chunkline_get_line_collated(chunk, chunk_pos, buf)) { if(chunkline_is_comment_line_or_empty(buf)) { /* a comment, go to next line */ continue; } if(http_parse_origin(buf, pstate)) { continue; /* $ORIGIN has been handled */ } if(http_parse_ttl(buf, pstate)) { continue; /* $TTL has been handled */ } return 1; } /* no noncomments, fail */ return 0; } /** check syntax of chunklist zonefile, parse first RR, return false on * failure and return a string in the scratch buffer (first RR string) * on failure. */ static int http_zonefile_syntax_check(struct auth_xfer* xfr, sldns_buffer* buf) { uint8_t rr[LDNS_RR_BUF_SIZE]; size_t rr_len, dname_len = 0; struct sldns_file_parse_state pstate; struct auth_chunk* chunk; size_t chunk_pos; int e; memset(&pstate, 0, sizeof(pstate)); pstate.default_ttl = 3600; if(xfr->namelen < sizeof(pstate.origin)) { pstate.origin_len = xfr->namelen; memmove(pstate.origin, xfr->name, xfr->namelen); } chunk = xfr->task_transfer->chunks_first; chunk_pos = 0; if(!chunkline_non_comment_RR(&chunk, &chunk_pos, buf, &pstate)) { return 0; } rr_len = sizeof(rr); e=sldns_str2wire_rr_buf((char*)sldns_buffer_begin(buf), rr, &rr_len, &dname_len, pstate.default_ttl, pstate.origin_len?pstate.origin:NULL, pstate.origin_len, pstate.prev_rr_len?pstate.prev_rr:NULL, pstate.prev_rr_len); if(e != 0) { log_err("parse failure on first RR[%d]: %s", LDNS_WIREPARSE_OFFSET(e), sldns_get_errorstr_parse(LDNS_WIREPARSE_ERROR(e))); return 0; } /* check that class is correct */ if(sldns_wirerr_get_class(rr, rr_len, dname_len) != xfr->dclass) { log_err("parse failure: first record in downloaded zonefile " "from wrong RR class"); return 0; } return 1; } /** sum sizes of chunklist */ static size_t chunklist_sum(struct auth_chunk* list) { struct auth_chunk* p; size_t s = 0; for(p=list; p; p=p->next) { s += p->len; } return s; } /** remove newlines from collated line */ static void chunkline_newline_removal(sldns_buffer* buf) { size_t i, end=sldns_buffer_limit(buf); for(i=0; idefault_ttl, pstate->origin_len?pstate->origin:NULL, pstate->origin_len, pstate->prev_rr_len?pstate->prev_rr:NULL, pstate->prev_rr_len); if(e != 0) { log_err("%s/%s parse failure RR[%d]: %s in '%s'", xfr->task_transfer->master->host, xfr->task_transfer->master->file, LDNS_WIREPARSE_OFFSET(e), sldns_get_errorstr_parse(LDNS_WIREPARSE_ERROR(e)), line); return 0; } if(rr_len == 0) return 1; /* empty line or so */ /* set prev */ if(dname_len < sizeof(pstate->prev_rr)) { memmove(pstate->prev_rr, rr, dname_len); pstate->prev_rr_len = dname_len; } return az_insert_rr(z, rr, rr_len, dname_len, NULL); } /** RR list iterator, returns RRs from answer section one by one from the * dns packets in the chunklist */ static void chunk_rrlist_start(struct auth_xfer* xfr, struct auth_chunk** rr_chunk, int* rr_num, size_t* rr_pos) { *rr_chunk = xfr->task_transfer->chunks_first; *rr_num = 0; *rr_pos = 0; } /** RR list iterator, see if we are at the end of the list */ static int chunk_rrlist_end(struct auth_chunk* rr_chunk, int rr_num) { while(rr_chunk) { if(rr_chunk->len < LDNS_HEADER_SIZE) return 1; if(rr_num < (int)LDNS_ANCOUNT(rr_chunk->data)) return 0; /* no more RRs in this chunk */ /* continue with next chunk, see if it has RRs */ rr_chunk = rr_chunk->next; rr_num = 0; } return 1; } /** RR list iterator, move to next RR */ static void chunk_rrlist_gonext(struct auth_chunk** rr_chunk, int* rr_num, size_t* rr_pos, size_t rr_nextpos) { /* already at end of chunks? */ if(!*rr_chunk) return; /* move within this chunk */ if((*rr_chunk)->len >= LDNS_HEADER_SIZE && (*rr_num)+1 < (int)LDNS_ANCOUNT((*rr_chunk)->data)) { (*rr_num) += 1; *rr_pos = rr_nextpos; return; } /* no more RRs in this chunk */ /* continue with next chunk, see if it has RRs */ if(*rr_chunk) *rr_chunk = (*rr_chunk)->next; while(*rr_chunk) { *rr_num = 0; *rr_pos = 0; if((*rr_chunk)->len >= LDNS_HEADER_SIZE && LDNS_ANCOUNT((*rr_chunk)->data) > 0) { return; } *rr_chunk = (*rr_chunk)->next; } } /** RR iterator, get current RR information, false on parse error */ static int chunk_rrlist_get_current(struct auth_chunk* rr_chunk, int rr_num, size_t rr_pos, uint8_t** rr_dname, uint16_t* rr_type, uint16_t* rr_class, uint32_t* rr_ttl, uint16_t* rr_rdlen, uint8_t** rr_rdata, size_t* rr_nextpos) { sldns_buffer pkt; /* integrity checks on position */ if(!rr_chunk) return 0; if(rr_chunk->len < LDNS_HEADER_SIZE) return 0; if(rr_num >= (int)LDNS_ANCOUNT(rr_chunk->data)) return 0; if(rr_pos >= rr_chunk->len) return 0; /* fetch rr information */ sldns_buffer_init_frm_data(&pkt, rr_chunk->data, rr_chunk->len); if(rr_pos == 0) { size_t i; /* skip question section */ sldns_buffer_set_position(&pkt, LDNS_HEADER_SIZE); for(i=0; idata); i++) { if(pkt_dname_len(&pkt) == 0) return 0; if(sldns_buffer_remaining(&pkt) < 4) return 0; sldns_buffer_skip(&pkt, 4); /* type and class */ } } else { sldns_buffer_set_position(&pkt, rr_pos); } *rr_dname = sldns_buffer_current(&pkt); if(pkt_dname_len(&pkt) == 0) return 0; if(sldns_buffer_remaining(&pkt) < 10) return 0; *rr_type = sldns_buffer_read_u16(&pkt); *rr_class = sldns_buffer_read_u16(&pkt); *rr_ttl = sldns_buffer_read_u32(&pkt); *rr_rdlen = sldns_buffer_read_u16(&pkt); if(sldns_buffer_remaining(&pkt) < (*rr_rdlen)) return 0; *rr_rdata = sldns_buffer_current(&pkt); sldns_buffer_skip(&pkt, (ssize_t)(*rr_rdlen)); *rr_nextpos = sldns_buffer_position(&pkt); return 1; } /** print log message where we are in parsing the zone transfer */ static void log_rrlist_position(const char* label, struct auth_chunk* rr_chunk, uint8_t* rr_dname, uint16_t rr_type, size_t rr_counter) { sldns_buffer pkt; size_t dlen; uint8_t buf[256]; char str[256]; char typestr[32]; sldns_buffer_init_frm_data(&pkt, rr_chunk->data, rr_chunk->len); sldns_buffer_set_position(&pkt, (size_t)(rr_dname - sldns_buffer_begin(&pkt))); if((dlen=pkt_dname_len(&pkt)) == 0) return; if(dlen >= sizeof(buf)) return; dname_pkt_copy(&pkt, buf, rr_dname); dname_str(buf, str); (void)sldns_wire2str_type_buf(rr_type, typestr, sizeof(typestr)); verbose(VERB_ALGO, "%s at[%d] %s %s", label, (int)rr_counter, str, typestr); } /** check that start serial is OK for ixfr. we are at rr_counter == 0, * and we are going to check rr_counter == 1 (has to be type SOA) serial */ static int ixfr_start_serial(struct auth_chunk* rr_chunk, int rr_num, size_t rr_pos, uint8_t* rr_dname, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint16_t rr_rdlen, uint8_t* rr_rdata, size_t rr_nextpos, uint32_t transfer_serial, uint32_t xfr_serial) { uint32_t startserial; /* move forward on RR */ chunk_rrlist_gonext(&rr_chunk, &rr_num, &rr_pos, rr_nextpos); if(chunk_rrlist_end(rr_chunk, rr_num)) { /* no second SOA */ verbose(VERB_OPS, "IXFR has no second SOA record"); return 0; } if(!chunk_rrlist_get_current(rr_chunk, rr_num, rr_pos, &rr_dname, &rr_type, &rr_class, &rr_ttl, &rr_rdlen, &rr_rdata, &rr_nextpos)) { verbose(VERB_OPS, "IXFR cannot parse second SOA record"); /* failed to parse RR */ return 0; } if(rr_type != LDNS_RR_TYPE_SOA) { verbose(VERB_OPS, "IXFR second record is not type SOA"); return 0; } if(rr_rdlen < 22) { verbose(VERB_OPS, "IXFR, second SOA has short rdlength"); return 0; /* bad SOA rdlen */ } startserial = sldns_read_uint32(rr_rdata+rr_rdlen-20); if(startserial == transfer_serial) { /* empty AXFR, not an IXFR */ verbose(VERB_OPS, "IXFR second serial same as first"); return 0; } if(startserial != xfr_serial) { /* wrong start serial, it does not match the serial in * memory */ verbose(VERB_OPS, "IXFR is from serial %u to %u but %u " "in memory, rejecting the zone transfer", (unsigned)startserial, (unsigned)transfer_serial, (unsigned)xfr_serial); return 0; } /* everything OK in second SOA serial */ return 1; } /** apply IXFR to zone in memory. z is locked. false on failure(mallocfail) */ static int apply_ixfr(struct auth_xfer* xfr, struct auth_zone* z, struct sldns_buffer* scratch_buffer) { struct auth_chunk* rr_chunk; int rr_num; size_t rr_pos; uint8_t* rr_dname, *rr_rdata; uint16_t rr_type, rr_class, rr_rdlen; uint32_t rr_ttl; size_t rr_nextpos; int have_transfer_serial = 0; uint32_t transfer_serial = 0; size_t rr_counter = 0; int delmode = 0; int softfail = 0; /* start RR iterator over chunklist of packets */ chunk_rrlist_start(xfr, &rr_chunk, &rr_num, &rr_pos); while(!chunk_rrlist_end(rr_chunk, rr_num)) { if(!chunk_rrlist_get_current(rr_chunk, rr_num, rr_pos, &rr_dname, &rr_type, &rr_class, &rr_ttl, &rr_rdlen, &rr_rdata, &rr_nextpos)) { /* failed to parse RR */ return 0; } if(verbosity>=7) log_rrlist_position("apply ixfr", rr_chunk, rr_dname, rr_type, rr_counter); /* twiddle add/del mode and check for start and end */ if(rr_counter == 0 && rr_type != LDNS_RR_TYPE_SOA) return 0; if(rr_counter == 1 && rr_type != LDNS_RR_TYPE_SOA) { /* this is an AXFR returned from the IXFR master */ /* but that should already have been detected, by * on_ixfr_is_axfr */ return 0; } if(rr_type == LDNS_RR_TYPE_SOA) { uint32_t serial; if(rr_rdlen < 22) return 0; /* bad SOA rdlen */ serial = sldns_read_uint32(rr_rdata+rr_rdlen-20); if(have_transfer_serial == 0) { have_transfer_serial = 1; transfer_serial = serial; delmode = 1; /* gets negated below */ /* check second RR before going any further */ if(!ixfr_start_serial(rr_chunk, rr_num, rr_pos, rr_dname, rr_type, rr_class, rr_ttl, rr_rdlen, rr_rdata, rr_nextpos, transfer_serial, xfr->serial)) { return 0; } } else if(transfer_serial == serial) { have_transfer_serial++; if(rr_counter == 1) { /* empty AXFR, with SOA; SOA; */ /* should have been detected by * on_ixfr_is_axfr */ return 0; } if(have_transfer_serial == 3) { /* see serial three times for end */ /* eg. IXFR: * SOA 3 start * SOA 1 second RR, followed by del * SOA 2 followed by add * SOA 2 followed by del * SOA 3 followed by add * SOA 3 end */ /* ended by SOA record */ xfr->serial = transfer_serial; break; } } /* twiddle add/del mode */ /* switch from delete part to add part and back again * just before the soa, it gets deleted and added too * this means we switch to delete mode for the final * SOA(so skip that one) */ delmode = !delmode; } /* process this RR */ /* if the RR is deleted twice or added twice, then we * softfail, and continue with the rest of the IXFR, so * that we serve something fairly nice during the refetch */ if(verbosity>=7) log_rrlist_position((delmode?"del":"add"), rr_chunk, rr_dname, rr_type, rr_counter); if(delmode) { /* delete this RR */ int nonexist = 0; if(!az_remove_rr_decompress(z, rr_chunk->data, rr_chunk->len, scratch_buffer, rr_dname, rr_type, rr_class, rr_ttl, rr_rdata, rr_rdlen, &nonexist)) { /* failed, malloc error or so */ return 0; } if(nonexist) { /* it was removal of a nonexisting RR */ if(verbosity>=4) log_rrlist_position( "IXFR error nonexistent RR", rr_chunk, rr_dname, rr_type, rr_counter); softfail = 1; } } else if(rr_counter != 0) { /* skip first SOA RR for addition, it is added in * the addition part near the end of the ixfr, when * that serial is seen the second time. */ int duplicate = 0; /* add this RR */ if(!az_insert_rr_decompress(z, rr_chunk->data, rr_chunk->len, scratch_buffer, rr_dname, rr_type, rr_class, rr_ttl, rr_rdata, rr_rdlen, &duplicate)) { /* failed, malloc error or so */ return 0; } if(duplicate) { /* it was a duplicate */ if(verbosity>=4) log_rrlist_position( "IXFR error duplicate RR", rr_chunk, rr_dname, rr_type, rr_counter); softfail = 1; } } rr_counter++; chunk_rrlist_gonext(&rr_chunk, &rr_num, &rr_pos, rr_nextpos); } if(softfail) { verbose(VERB_ALGO, "IXFR did not apply cleanly, fetching full zone"); return 0; } return 1; } /** apply AXFR to zone in memory. z is locked. false on failure(mallocfail) */ static int apply_axfr(struct auth_xfer* xfr, struct auth_zone* z, struct sldns_buffer* scratch_buffer) { struct auth_chunk* rr_chunk; int rr_num; size_t rr_pos; uint8_t* rr_dname, *rr_rdata; uint16_t rr_type, rr_class, rr_rdlen; uint32_t rr_ttl; uint32_t serial = 0; size_t rr_nextpos; size_t rr_counter = 0; int have_end_soa = 0; /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); /* clear the RPZ policies */ if(z->rpz) rpz_clear(z->rpz); xfr->have_zone = 0; xfr->serial = 0; /* insert all RRs in to the zone */ /* insert the SOA only once, skip the last one */ /* start RR iterator over chunklist of packets */ chunk_rrlist_start(xfr, &rr_chunk, &rr_num, &rr_pos); while(!chunk_rrlist_end(rr_chunk, rr_num)) { if(!chunk_rrlist_get_current(rr_chunk, rr_num, rr_pos, &rr_dname, &rr_type, &rr_class, &rr_ttl, &rr_rdlen, &rr_rdata, &rr_nextpos)) { /* failed to parse RR */ return 0; } if(verbosity>=7) log_rrlist_position("apply_axfr", rr_chunk, rr_dname, rr_type, rr_counter); if(rr_type == LDNS_RR_TYPE_SOA) { if(rr_counter != 0) { /* end of the axfr */ have_end_soa = 1; break; } if(rr_rdlen < 22) return 0; /* bad SOA rdlen */ serial = sldns_read_uint32(rr_rdata+rr_rdlen-20); } /* add this RR */ if(!az_insert_rr_decompress(z, rr_chunk->data, rr_chunk->len, scratch_buffer, rr_dname, rr_type, rr_class, rr_ttl, rr_rdata, rr_rdlen, NULL)) { /* failed, malloc error or so */ return 0; } rr_counter++; chunk_rrlist_gonext(&rr_chunk, &rr_num, &rr_pos, rr_nextpos); } if(!have_end_soa) { log_err("no end SOA record for AXFR"); return 0; } xfr->serial = serial; xfr->have_zone = 1; return 1; } /** apply HTTP to zone in memory. z is locked. false on failure(mallocfail) */ static int apply_http(struct auth_xfer* xfr, struct auth_zone* z, struct sldns_buffer* scratch_buffer) { /* parse data in chunks */ /* parse RR's and read into memory. ignore $INCLUDE from the * downloaded file*/ struct sldns_file_parse_state pstate; struct auth_chunk* chunk; size_t chunk_pos; memset(&pstate, 0, sizeof(pstate)); pstate.default_ttl = 3600; if(xfr->namelen < sizeof(pstate.origin)) { pstate.origin_len = xfr->namelen; memmove(pstate.origin, xfr->name, xfr->namelen); } if(verbosity >= VERB_ALGO) verbose(VERB_ALGO, "http download %s of size %d", xfr->task_transfer->master->file, (int)chunklist_sum(xfr->task_transfer->chunks_first)); if(xfr->task_transfer->chunks_first && verbosity >= VERB_ALGO) { char preview[1024]; if(xfr->task_transfer->chunks_first->len+1 > sizeof(preview)) { memmove(preview, xfr->task_transfer->chunks_first->data, sizeof(preview)-1); preview[sizeof(preview)-1]=0; } else { memmove(preview, xfr->task_transfer->chunks_first->data, xfr->task_transfer->chunks_first->len); preview[xfr->task_transfer->chunks_first->len]=0; } log_info("auth zone http downloaded content preview: %s", preview); } /* perhaps a little syntax check before we try to apply the data? */ if(!http_zonefile_syntax_check(xfr, scratch_buffer)) { log_err("http download %s/%s does not contain a zonefile, " "but got '%s'", xfr->task_transfer->master->host, xfr->task_transfer->master->file, sldns_buffer_begin(scratch_buffer)); return 0; } /* clear the data tree */ traverse_postorder(&z->data, auth_data_del, NULL); rbtree_init(&z->data, &auth_data_cmp); /* clear the RPZ policies */ if(z->rpz) rpz_clear(z->rpz); xfr->have_zone = 0; xfr->serial = 0; chunk = xfr->task_transfer->chunks_first; chunk_pos = 0; pstate.lineno = 0; while(chunkline_get_line_collated(&chunk, &chunk_pos, scratch_buffer)) { /* process this line */ pstate.lineno++; chunkline_newline_removal(scratch_buffer); if(chunkline_is_comment_line_or_empty(scratch_buffer)) { continue; } /* parse line and add RR */ if(http_parse_origin(scratch_buffer, &pstate)) { continue; /* $ORIGIN has been handled */ } if(http_parse_ttl(scratch_buffer, &pstate)) { continue; /* $TTL has been handled */ } if(!http_parse_add_rr(xfr, z, scratch_buffer, &pstate)) { verbose(VERB_ALGO, "error parsing line [%s:%d] %s", xfr->task_transfer->master->file, pstate.lineno, sldns_buffer_begin(scratch_buffer)); return 0; } } return 1; } /** write http chunks to zonefile to create downloaded file */ static int auth_zone_write_chunks(struct auth_xfer* xfr, const char* fname) { FILE* out; struct auth_chunk* p; out = fopen(fname, "w"); if(!out) { log_err("could not open %s: %s", fname, strerror(errno)); return 0; } for(p = xfr->task_transfer->chunks_first; p ; p = p->next) { if(!write_out(out, (char*)p->data, p->len)) { log_err("could not write http download to %s", fname); fclose(out); return 0; } } fclose(out); return 1; } /** write to zonefile after zone has been updated */ static void xfr_write_after_update(struct auth_xfer* xfr, struct module_env* env) { struct config_file* cfg = env->cfg; struct auth_zone* z; char tmpfile[1024]; char* zfilename; lock_basic_unlock(&xfr->lock); /* get lock again, so it is a readlock and concurrently queries * can be answered */ lock_rw_rdlock(&env->auth_zones->lock); z = auth_zone_find(env->auth_zones, xfr->name, xfr->namelen, xfr->dclass); if(!z) { lock_rw_unlock(&env->auth_zones->lock); /* the zone is gone, ignore xfr results */ lock_basic_lock(&xfr->lock); return; } lock_rw_rdlock(&z->lock); lock_basic_lock(&xfr->lock); lock_rw_unlock(&env->auth_zones->lock); if(z->zonefile == NULL || z->zonefile[0] == 0) { lock_rw_unlock(&z->lock); /* no write needed, no zonefile set */ return; } zfilename = z->zonefile; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(zfilename, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) zfilename += strlen(cfg->chrootdir); if(verbosity >= VERB_ALGO) { char nm[255+1]; dname_str(z->name, nm); verbose(VERB_ALGO, "write zonefile %s for %s", zfilename, nm); } /* write to tempfile first */ if((size_t)strlen(zfilename) + 16 > sizeof(tmpfile)) { verbose(VERB_ALGO, "tmpfilename too long, cannot update " " zonefile %s", zfilename); lock_rw_unlock(&z->lock); return; } snprintf(tmpfile, sizeof(tmpfile), "%s.tmp%u", zfilename, (unsigned)getpid()); if(xfr->task_transfer->master->http) { /* use the stored chunk list to write them */ if(!auth_zone_write_chunks(xfr, tmpfile)) { unlink(tmpfile); lock_rw_unlock(&z->lock); return; } } else if(!auth_zone_write_file(z, tmpfile)) { unlink(tmpfile); lock_rw_unlock(&z->lock); return; } if(rename(tmpfile, zfilename) < 0) { log_err("could not rename(%s, %s): %s", tmpfile, zfilename, strerror(errno)); unlink(tmpfile); lock_rw_unlock(&z->lock); return; } lock_rw_unlock(&z->lock); } /** process chunk list and update zone in memory, * return false if it did not work */ static int xfr_process_chunk_list(struct auth_xfer* xfr, struct module_env* env, int* ixfr_fail) { struct auth_zone* z; /* obtain locks and structures */ /* release xfr lock, then, while holding az->lock grab both * z->lock and xfr->lock */ lock_basic_unlock(&xfr->lock); lock_rw_rdlock(&env->auth_zones->lock); z = auth_zone_find(env->auth_zones, xfr->name, xfr->namelen, xfr->dclass); if(!z) { lock_rw_unlock(&env->auth_zones->lock); /* the zone is gone, ignore xfr results */ lock_basic_lock(&xfr->lock); return 0; } lock_rw_wrlock(&z->lock); lock_basic_lock(&xfr->lock); lock_rw_unlock(&env->auth_zones->lock); /* apply data */ if(xfr->task_transfer->master->http) { if(!apply_http(xfr, z, env->scratch_buffer)) { lock_rw_unlock(&z->lock); verbose(VERB_ALGO, "http from %s: could not store data", xfr->task_transfer->master->host); return 0; } } else if(xfr->task_transfer->on_ixfr && !xfr->task_transfer->on_ixfr_is_axfr) { if(!apply_ixfr(xfr, z, env->scratch_buffer)) { lock_rw_unlock(&z->lock); verbose(VERB_ALGO, "xfr from %s: could not store IXFR" " data", xfr->task_transfer->master->host); *ixfr_fail = 1; return 0; } } else { if(!apply_axfr(xfr, z, env->scratch_buffer)) { lock_rw_unlock(&z->lock); verbose(VERB_ALGO, "xfr from %s: could not store AXFR" " data", xfr->task_transfer->master->host); return 0; } } xfr->zone_expired = 0; z->zone_expired = 0; if(!xfr_find_soa(z, xfr)) { lock_rw_unlock(&z->lock); verbose(VERB_ALGO, "xfr from %s: no SOA in zone after update" " (or malformed RR)", xfr->task_transfer->master->host); return 0; } if(xfr->have_zone) xfr->lease_time = *env->now; if(z->rpz) rpz_finish_config(z->rpz); /* unlock */ lock_rw_unlock(&z->lock); if(verbosity >= VERB_QUERY && xfr->have_zone) { char zname[256]; dname_str(xfr->name, zname); verbose(VERB_QUERY, "auth zone %s updated to serial %u", zname, (unsigned)xfr->serial); } /* see if we need to write to a zonefile */ xfr_write_after_update(xfr, env); return 1; } /** disown task_transfer. caller must hold xfr.lock */ static void xfr_transfer_disown(struct auth_xfer* xfr) { /* remove timer (from this worker's event base) */ comm_timer_delete(xfr->task_transfer->timer); xfr->task_transfer->timer = NULL; /* remove the commpoint */ comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; /* we don't own this item anymore */ xfr->task_transfer->worker = NULL; xfr->task_transfer->env = NULL; } /** lookup a host name for its addresses, if needed */ static int xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env) { struct sockaddr_storage addr; socklen_t addrlen = 0; struct auth_master* master = xfr->task_transfer->lookup_target; struct query_info qinfo; uint16_t qflags = BIT_RD; uint8_t dname[LDNS_MAX_DOMAINLEN+1]; struct edns_data edns; sldns_buffer* buf = env->scratch_buffer; if(!master) return 0; if(extstrtoaddr(master->host, &addr, &addrlen)) { /* not needed, host is in IP addr format */ return 0; } if(master->allow_notify) return 0; /* allow-notifies are not transferred from, no lookup is needed */ /* use mesh_new_callback to probe for non-addr hosts, * and then wait for them to be looked up (in cache, or query) */ qinfo.qname_len = sizeof(dname); if(sldns_str2wire_dname_buf(master->host, dname, &qinfo.qname_len) != 0) { log_err("cannot parse host name of master %s", master->host); return 0; } qinfo.qname = dname; qinfo.qclass = xfr->dclass; qinfo.qtype = LDNS_RR_TYPE_A; if(xfr->task_transfer->lookup_aaaa) qinfo.qtype = LDNS_RR_TYPE_AAAA; qinfo.local_alias = NULL; if(verbosity >= VERB_ALGO) { char buf1[512]; char buf2[LDNS_MAX_DOMAINLEN+1]; dname_str(xfr->name, buf2); snprintf(buf1, sizeof(buf1), "auth zone %s: master lookup" " for task_transfer", buf2); log_query_info(VERB_ALGO, buf1, &qinfo); } edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; /* unlock xfr during mesh_new_callback() because the callback can be * called straight away */ lock_basic_unlock(&xfr->lock); if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0, &auth_xfer_transfer_lookup_callback, xfr)) { lock_basic_lock(&xfr->lock); log_err("out of memory lookup up master %s", master->host); return 0; } lock_basic_lock(&xfr->lock); return 1; } /** initiate TCP to the target and fetch zone. * returns true if that was successfully started, and timeout setup. */ static int xfr_transfer_init_fetch(struct auth_xfer* xfr, struct module_env* env) { struct sockaddr_storage addr; socklen_t addrlen = 0; struct auth_master* master = xfr->task_transfer->master; char *auth_name = NULL; struct timeval t; int timeout; if(!master) return 0; if(master->allow_notify) return 0; /* only for notify */ /* get master addr */ if(xfr->task_transfer->scan_addr) { addrlen = xfr->task_transfer->scan_addr->addrlen; memmove(&addr, &xfr->task_transfer->scan_addr->addr, addrlen); } else { if(!authextstrtoaddr(master->host, &addr, &addrlen, &auth_name)) { /* the ones that are not in addr format are supposed * to be looked up. The lookup has failed however, * so skip them */ char zname[255+1]; dname_str(xfr->name, zname); log_err("%s: failed lookup, cannot transfer from master %s", zname, master->host); return 0; } } /* remove previous TCP connection (if any) */ if(xfr->task_transfer->cp) { comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; } if(!xfr->task_transfer->timer) { xfr->task_transfer->timer = comm_timer_create(env->worker_base, auth_xfer_transfer_timer_callback, xfr); if(!xfr->task_transfer->timer) { log_err("malloc failure"); return 0; } } timeout = AUTH_TRANSFER_TIMEOUT; #ifndef S_SPLINT_S t.tv_sec = timeout/1000; t.tv_usec = (timeout%1000)*1000; #endif if(master->http) { /* perform http fetch */ /* store http port number into sockaddr, * unless someone used unbound's host@port notation */ xfr->task_transfer->on_ixfr = 0; if(strchr(master->host, '@') == NULL) sockaddr_store_port(&addr, addrlen, master->port); xfr->task_transfer->cp = outnet_comm_point_for_http( env->outnet, auth_xfer_transfer_http_callback, xfr, &addr, addrlen, -1, master->ssl, master->host, master->file); if(!xfr->task_transfer->cp) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "cannot create http cp " "connection for %s to %s", zname, as); return 0; } comm_timer_set(xfr->task_transfer->timer, &t); if(verbosity >= VERB_ALGO) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "auth zone %s transfer next HTTP fetch from %s started", zname, as); } return 1; } /* perform AXFR/IXFR */ /* set the packet to be written */ /* create new ID */ xfr->task_transfer->id = (uint16_t)(ub_random(env->rnd)&0xffff); xfr_create_ixfr_packet(xfr, env->scratch_buffer, xfr->task_transfer->id, master); /* connect on fd */ xfr->task_transfer->cp = outnet_comm_point_for_tcp(env->outnet, auth_xfer_transfer_tcp_callback, xfr, &addr, addrlen, env->scratch_buffer, -1, auth_name != NULL, auth_name); if(!xfr->task_transfer->cp) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "cannot create tcp cp connection for " "xfr %s to %s", zname, as); return 0; } comm_timer_set(xfr->task_transfer->timer, &t); if(verbosity >= VERB_ALGO) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "auth zone %s transfer next %s fetch from %s started", zname, (xfr->task_transfer->on_ixfr?"IXFR":"AXFR"), as); } return 1; } /** perform next lookup, next transfer TCP, or end and resume wait time task */ static void xfr_transfer_nexttarget_or_end(struct auth_xfer* xfr, struct module_env* env) { log_assert(xfr->task_transfer->worker == env->worker); /* are we performing lookups? */ while(xfr->task_transfer->lookup_target) { if(xfr_transfer_lookup_host(xfr, env)) { /* wait for lookup to finish, * note that the hostname may be in unbound's cache * and we may then get an instant cache response, * and that calls the callback just like a full * lookup and lookup failures also call callback */ if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s transfer next target lookup", zname); } lock_basic_unlock(&xfr->lock); return; } xfr_transfer_move_to_next_lookup(xfr, env); } /* initiate TCP and fetch the zone from the master */ /* and set timeout on it */ while(!xfr_transfer_end_of_list(xfr)) { xfr->task_transfer->master = xfr_transfer_current_master(xfr); if(xfr_transfer_init_fetch(xfr, env)) { /* successfully started, wait for callback */ lock_basic_unlock(&xfr->lock); return; } /* failed to fetch, next master */ xfr_transfer_nextmaster(xfr); } if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s transfer failed, wait", zname); } /* we failed to fetch the zone, move to wait task * use the shorter retry timeout */ xfr_transfer_disown(xfr); /* pick up the nextprobe task and wait */ if(xfr->task_nextprobe->worker == NULL) xfr_set_timeout(xfr, env, 1, 0); lock_basic_unlock(&xfr->lock); } /** add addrs from A or AAAA rrset to the master */ static void xfr_master_add_addrs(struct auth_master* m, struct ub_packed_rrset_key* rrset, uint16_t rrtype) { size_t i; struct packed_rrset_data* data; if(!m || !rrset) return; if(rrtype != LDNS_RR_TYPE_A && rrtype != LDNS_RR_TYPE_AAAA) return; data = (struct packed_rrset_data*)rrset->entry.data; for(i=0; icount; i++) { struct auth_addr* a; size_t len = data->rr_len[i] - 2; uint8_t* rdata = data->rr_data[i]+2; if(rrtype == LDNS_RR_TYPE_A && len != INET_SIZE) continue; /* wrong length for A */ if(rrtype == LDNS_RR_TYPE_AAAA && len != INET6_SIZE) continue; /* wrong length for AAAA */ /* add and alloc it */ a = (struct auth_addr*)calloc(1, sizeof(*a)); if(!a) { log_err("out of memory"); return; } if(rrtype == LDNS_RR_TYPE_A) { struct sockaddr_in* sa; a->addrlen = (socklen_t)sizeof(*sa); sa = (struct sockaddr_in*)&a->addr; sa->sin_family = AF_INET; sa->sin_port = (in_port_t)htons(UNBOUND_DNS_PORT); memmove(&sa->sin_addr, rdata, INET_SIZE); } else { struct sockaddr_in6* sa; a->addrlen = (socklen_t)sizeof(*sa); sa = (struct sockaddr_in6*)&a->addr; sa->sin6_family = AF_INET6; sa->sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT); memmove(&sa->sin6_addr, rdata, INET6_SIZE); } if(verbosity >= VERB_ALGO) { char s[64]; addr_to_str(&a->addr, a->addrlen, s, sizeof(s)); verbose(VERB_ALGO, "auth host %s lookup %s", m->host, s); } /* append to list */ a->next = m->list; m->list = a; } } /** callback for task_transfer lookup of host name, of A or AAAA */ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, sldns_buffer* buf, enum sec_status ATTR_UNUSED(sec), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } /* process result */ if(rcode == LDNS_RCODE_NOERROR) { uint16_t wanted_qtype = LDNS_RR_TYPE_A; struct regional* temp = env->scratch; struct query_info rq; struct reply_info* rep; if(xfr->task_transfer->lookup_aaaa) wanted_qtype = LDNS_RR_TYPE_AAAA; memset(&rq, 0, sizeof(rq)); rep = parse_reply_in_temp_region(buf, temp, &rq); if(rep && rq.qtype == wanted_qtype && FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR) { /* parsed successfully */ struct ub_packed_rrset_key* answer = reply_find_answer_rrset(&rq, rep); if(answer) { xfr_master_add_addrs(xfr->task_transfer-> lookup_target, answer, wanted_qtype); } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has nodata", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A")); } } } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup has no answer", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A")); } } regional_free_all(temp); } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s host %s type %s transfer lookup failed", zname, xfr->task_transfer->lookup_target->host, (xfr->task_transfer->lookup_aaaa?"AAAA":"A")); } } if(xfr->task_transfer->lookup_target->list && xfr->task_transfer->lookup_target == xfr_transfer_current_master(xfr)) xfr->task_transfer->scan_addr = xfr->task_transfer->lookup_target->list; /* move to lookup AAAA after A lookup, move to next hostname lookup, * or move to fetch the zone, or, if nothing to do, end task_transfer */ xfr_transfer_move_to_next_lookup(xfr, env); xfr_transfer_nexttarget_or_end(xfr, env); } /** check if xfer (AXFR or IXFR) packet is OK. * return false if we lost connection (SERVFAIL, or unreadable). * return false if we need to move from IXFR to AXFR, with gonextonfail * set to false, so the same master is tried again, but with AXFR. * return true if fine to link into data. * return true with transferdone=true when the transfer has ended. */ static int check_xfer_packet(sldns_buffer* pkt, struct auth_xfer* xfr, int* gonextonfail, int* transferdone) { uint8_t* wire = sldns_buffer_begin(pkt); int i; if(sldns_buffer_limit(pkt) < LDNS_HEADER_SIZE) { verbose(VERB_ALGO, "xfr to %s failed, packet too small", xfr->task_transfer->master->host); return 0; } if(!LDNS_QR_WIRE(wire)) { verbose(VERB_ALGO, "xfr to %s failed, packet has no QR flag", xfr->task_transfer->master->host); return 0; } if(LDNS_TC_WIRE(wire)) { verbose(VERB_ALGO, "xfr to %s failed, packet has TC flag", xfr->task_transfer->master->host); return 0; } /* check ID */ if(LDNS_ID_WIRE(wire) != xfr->task_transfer->id) { verbose(VERB_ALGO, "xfr to %s failed, packet wrong ID", xfr->task_transfer->master->host); return 0; } if(LDNS_RCODE_WIRE(wire) != LDNS_RCODE_NOERROR) { char rcode[32]; sldns_wire2str_rcode_buf((int)LDNS_RCODE_WIRE(wire), rcode, sizeof(rcode)); /* if we are doing IXFR, check for fallback */ if(xfr->task_transfer->on_ixfr) { if(LDNS_RCODE_WIRE(wire) == LDNS_RCODE_NOTIMPL || LDNS_RCODE_WIRE(wire) == LDNS_RCODE_SERVFAIL || LDNS_RCODE_WIRE(wire) == LDNS_RCODE_REFUSED || LDNS_RCODE_WIRE(wire) == LDNS_RCODE_FORMERR) { verbose(VERB_ALGO, "xfr to %s, fallback " "from IXFR to AXFR (with rcode %s)", xfr->task_transfer->master->host, rcode); xfr->task_transfer->ixfr_fail = 1; *gonextonfail = 0; return 0; } } verbose(VERB_ALGO, "xfr to %s failed, packet with rcode %s", xfr->task_transfer->master->host, rcode); return 0; } if(LDNS_OPCODE_WIRE(wire) != LDNS_PACKET_QUERY) { verbose(VERB_ALGO, "xfr to %s failed, packet with bad opcode", xfr->task_transfer->master->host); return 0; } if(LDNS_QDCOUNT(wire) > 1) { verbose(VERB_ALGO, "xfr to %s failed, packet has qdcount %d", xfr->task_transfer->master->host, (int)LDNS_QDCOUNT(wire)); return 0; } /* check qname */ sldns_buffer_set_position(pkt, LDNS_HEADER_SIZE); for(i=0; i<(int)LDNS_QDCOUNT(wire); i++) { size_t pos = sldns_buffer_position(pkt); uint16_t qtype, qclass; if(pkt_dname_len(pkt) == 0) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "malformed dname", xfr->task_transfer->master->host); return 0; } if(dname_pkt_compare(pkt, sldns_buffer_at(pkt, pos), xfr->name) != 0) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "wrong qname", xfr->task_transfer->master->host); return 0; } if(sldns_buffer_remaining(pkt) < 4) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "truncated query RR", xfr->task_transfer->master->host); return 0; } qtype = sldns_buffer_read_u16(pkt); qclass = sldns_buffer_read_u16(pkt); if(qclass != xfr->dclass) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "wrong qclass", xfr->task_transfer->master->host); return 0; } if(xfr->task_transfer->on_ixfr) { if(qtype != LDNS_RR_TYPE_IXFR) { verbose(VERB_ALGO, "xfr to %s failed, packet " "with wrong qtype, expected IXFR", xfr->task_transfer->master->host); return 0; } } else { if(qtype != LDNS_RR_TYPE_AXFR) { verbose(VERB_ALGO, "xfr to %s failed, packet " "with wrong qtype, expected AXFR", xfr->task_transfer->master->host); return 0; } } } /* check parse of RRs in packet, store first SOA serial * to be able to detect last SOA (with that serial) to see if done */ /* also check for IXFR 'zone up to date' reply */ for(i=0; i<(int)LDNS_ANCOUNT(wire); i++) { size_t pos = sldns_buffer_position(pkt); uint16_t tp, rdlen; if(pkt_dname_len(pkt) == 0) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "malformed dname in answer section", xfr->task_transfer->master->host); return 0; } if(sldns_buffer_remaining(pkt) < 10) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "truncated RR", xfr->task_transfer->master->host); return 0; } tp = sldns_buffer_read_u16(pkt); (void)sldns_buffer_read_u16(pkt); /* class */ (void)sldns_buffer_read_u32(pkt); /* ttl */ rdlen = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rdlen) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "truncated RR rdata", xfr->task_transfer->master->host); return 0; } /* RR parses (haven't checked rdata itself), now look at * SOA records to see serial number */ if(xfr->task_transfer->rr_scan_num == 0 && tp != LDNS_RR_TYPE_SOA) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "malformed zone transfer, no start SOA", xfr->task_transfer->master->host); return 0; } if(xfr->task_transfer->rr_scan_num == 1 && tp != LDNS_RR_TYPE_SOA) { /* second RR is not a SOA record, this is not an IXFR * the master is replying with an AXFR */ xfr->task_transfer->on_ixfr_is_axfr = 1; } if(tp == LDNS_RR_TYPE_SOA) { uint32_t serial; if(rdlen < 22) { verbose(VERB_ALGO, "xfr to %s failed, packet " "with SOA with malformed rdata", xfr->task_transfer->master->host); return 0; } if(dname_pkt_compare(pkt, sldns_buffer_at(pkt, pos), xfr->name) != 0) { verbose(VERB_ALGO, "xfr to %s failed, packet " "with SOA with wrong dname", xfr->task_transfer->master->host); return 0; } /* read serial number of SOA */ serial = sldns_buffer_read_u32_at(pkt, sldns_buffer_position(pkt)+rdlen-20); /* check for IXFR 'zone has SOA x' reply */ if(xfr->task_transfer->on_ixfr && xfr->task_transfer->rr_scan_num == 0 && LDNS_ANCOUNT(wire)==1) { verbose(VERB_ALGO, "xfr to %s ended, " "IXFR reply that zone has serial %u," " fallback from IXFR to AXFR", xfr->task_transfer->master->host, (unsigned)serial); xfr->task_transfer->ixfr_fail = 1; *gonextonfail = 0; return 0; } /* if first SOA, store serial number */ if(xfr->task_transfer->got_xfr_serial == 0) { xfr->task_transfer->got_xfr_serial = 1; xfr->task_transfer->incoming_xfr_serial = serial; verbose(VERB_ALGO, "xfr %s: contains " "SOA serial %u", xfr->task_transfer->master->host, (unsigned)serial); /* see if end of AXFR */ } else if(!xfr->task_transfer->on_ixfr || xfr->task_transfer->on_ixfr_is_axfr) { /* second SOA with serial is the end * for AXFR */ *transferdone = 1; verbose(VERB_ALGO, "xfr %s: last AXFR packet", xfr->task_transfer->master->host); /* for IXFR, count SOA records with that serial */ } else if(xfr->task_transfer->incoming_xfr_serial == serial && xfr->task_transfer->got_xfr_serial == 1) { xfr->task_transfer->got_xfr_serial++; /* if not first soa, if serial==firstserial, the * third time we are at the end, for IXFR */ } else if(xfr->task_transfer->incoming_xfr_serial == serial && xfr->task_transfer->got_xfr_serial == 2) { verbose(VERB_ALGO, "xfr %s: last IXFR packet", xfr->task_transfer->master->host); *transferdone = 1; /* continue parse check, if that succeeds, * transfer is done */ } } xfr->task_transfer->rr_scan_num++; /* skip over RR rdata to go to the next RR */ sldns_buffer_skip(pkt, (ssize_t)rdlen); } /* check authority section */ /* we skip over the RRs checking packet format */ for(i=0; i<(int)LDNS_NSCOUNT(wire); i++) { uint16_t rdlen; if(pkt_dname_len(pkt) == 0) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "malformed dname in authority section", xfr->task_transfer->master->host); return 0; } if(sldns_buffer_remaining(pkt) < 10) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "truncated RR", xfr->task_transfer->master->host); return 0; } (void)sldns_buffer_read_u16(pkt); /* type */ (void)sldns_buffer_read_u16(pkt); /* class */ (void)sldns_buffer_read_u32(pkt); /* ttl */ rdlen = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rdlen) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "truncated RR rdata", xfr->task_transfer->master->host); return 0; } /* skip over RR rdata to go to the next RR */ sldns_buffer_skip(pkt, (ssize_t)rdlen); } /* check additional section */ for(i=0; i<(int)LDNS_ARCOUNT(wire); i++) { uint16_t rdlen; if(pkt_dname_len(pkt) == 0) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "malformed dname in additional section", xfr->task_transfer->master->host); return 0; } if(sldns_buffer_remaining(pkt) < 10) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "truncated RR", xfr->task_transfer->master->host); return 0; } (void)sldns_buffer_read_u16(pkt); /* type */ (void)sldns_buffer_read_u16(pkt); /* class */ (void)sldns_buffer_read_u32(pkt); /* ttl */ rdlen = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rdlen) { verbose(VERB_ALGO, "xfr to %s failed, packet with " "truncated RR rdata", xfr->task_transfer->master->host); return 0; } /* skip over RR rdata to go to the next RR */ sldns_buffer_skip(pkt, (ssize_t)rdlen); } return 1; } /** Link the data from this packet into the worklist of transferred data */ static int xfer_link_data(sldns_buffer* pkt, struct auth_xfer* xfr) { /* alloc it */ struct auth_chunk* e; e = (struct auth_chunk*)calloc(1, sizeof(*e)); if(!e) return 0; e->next = NULL; e->len = sldns_buffer_limit(pkt); e->data = memdup(sldns_buffer_begin(pkt), e->len); if(!e->data) { free(e); return 0; } /* alloc succeeded, link into list */ if(!xfr->task_transfer->chunks_first) xfr->task_transfer->chunks_first = e; if(xfr->task_transfer->chunks_last) xfr->task_transfer->chunks_last->next = e; xfr->task_transfer->chunks_last = e; return 1; } /** task transfer. the list of data is complete. process it and if failed * move to next master, if succeeded, end the task transfer */ static void process_list_end_transfer(struct auth_xfer* xfr, struct module_env* env) { int ixfr_fail = 0; if(xfr_process_chunk_list(xfr, env, &ixfr_fail)) { /* it worked! */ auth_chunks_delete(xfr->task_transfer); /* we fetched the zone, move to wait task */ xfr_transfer_disown(xfr); if(xfr->notify_received && (!xfr->notify_has_serial || (xfr->notify_has_serial && xfr_serial_means_update(xfr, xfr->notify_serial)))) { uint32_t sr = xfr->notify_serial; int has_sr = xfr->notify_has_serial; /* we received a notify while probe/transfer was * in progress. start a new probe and transfer */ xfr->notify_received = 0; xfr->notify_has_serial = 0; xfr->notify_serial = 0; if(!xfr_start_probe(xfr, env, NULL)) { /* if we couldn't start it, already in * progress; restore notify serial, * while xfr still locked */ xfr->notify_received = 1; xfr->notify_has_serial = has_sr; xfr->notify_serial = sr; lock_basic_unlock(&xfr->lock); } return; } else { /* pick up the nextprobe task and wait (normail wait time) */ if(xfr->task_nextprobe->worker == NULL) xfr_set_timeout(xfr, env, 0, 0); } lock_basic_unlock(&xfr->lock); return; } /* processing failed */ /* when done, delete data from list */ auth_chunks_delete(xfr->task_transfer); if(ixfr_fail) { xfr->task_transfer->ixfr_fail = 1; } else { xfr_transfer_nextmaster(xfr); } xfr_transfer_nexttarget_or_end(xfr, env); } /** callback for the task_transfer timer */ void auth_xfer_transfer_timer_callback(void* arg) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; int gonextonfail = 1; log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } verbose(VERB_ALGO, "xfr stopped, connection timeout to %s", xfr->task_transfer->master->host); /* see if IXFR caused the failure, if so, try AXFR */ if(xfr->task_transfer->on_ixfr) { xfr->task_transfer->ixfr_possible_timeout_count++; if(xfr->task_transfer->ixfr_possible_timeout_count >= NUM_TIMEOUTS_FALLBACK_IXFR) { verbose(VERB_ALGO, "xfr to %s, fallback " "from IXFR to AXFR (because of timeouts)", xfr->task_transfer->master->host); xfr->task_transfer->ixfr_fail = 1; gonextonfail = 0; } } /* delete transferred data from list */ auth_chunks_delete(xfr->task_transfer); comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; if(gonextonfail) xfr_transfer_nextmaster(xfr); xfr_transfer_nexttarget_or_end(xfr, env); } /** callback for task_transfer tcp connections */ int auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, struct comm_reply* ATTR_UNUSED(repinfo)) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; int gonextonfail = 1; int transferdone = 0; log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } /* stop the timer */ comm_timer_disable(xfr->task_transfer->timer); if(err != NETEVENT_NOERROR) { /* connection failed, closed, or timeout */ /* stop this transfer, cleanup * and continue task_transfer*/ verbose(VERB_ALGO, "xfr stopped, connection lost to %s", xfr->task_transfer->master->host); /* see if IXFR caused the failure, if so, try AXFR */ if(xfr->task_transfer->on_ixfr) { xfr->task_transfer->ixfr_possible_timeout_count++; if(xfr->task_transfer->ixfr_possible_timeout_count >= NUM_TIMEOUTS_FALLBACK_IXFR) { verbose(VERB_ALGO, "xfr to %s, fallback " "from IXFR to AXFR (because of timeouts)", xfr->task_transfer->master->host); xfr->task_transfer->ixfr_fail = 1; gonextonfail = 0; } } failed: /* delete transferred data from list */ auth_chunks_delete(xfr->task_transfer); comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; if(gonextonfail) xfr_transfer_nextmaster(xfr); xfr_transfer_nexttarget_or_end(xfr, env); return 0; } /* note that IXFR worked without timeout */ if(xfr->task_transfer->on_ixfr) xfr->task_transfer->ixfr_possible_timeout_count = 0; /* handle returned packet */ /* if it fails, cleanup and end this transfer */ /* if it needs to fallback from IXFR to AXFR, do that */ if(!check_xfer_packet(c->buffer, xfr, &gonextonfail, &transferdone)) { goto failed; } /* if it is good, link it into the list of data */ /* if the link into list of data fails (malloc fail) cleanup and end */ if(!xfer_link_data(c->buffer, xfr)) { verbose(VERB_ALGO, "xfr stopped to %s, malloc failed", xfr->task_transfer->master->host); goto failed; } /* if the transfer is done now, disconnect and process the list */ if(transferdone) { comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; process_list_end_transfer(xfr, env); return 0; } /* if we want to read more messages, setup the commpoint to read * a DNS packet, and the timeout */ lock_basic_unlock(&xfr->lock); c->tcp_is_reading = 1; sldns_buffer_clear(c->buffer); comm_point_start_listening(c, -1, AUTH_TRANSFER_TIMEOUT); return 0; } /** callback for task_transfer http connections */ int auth_xfer_transfer_http_callback(struct comm_point* c, void* arg, int err, struct comm_reply* repinfo) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; log_assert(xfr->task_transfer); lock_basic_lock(&xfr->lock); env = xfr->task_transfer->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } verbose(VERB_ALGO, "auth zone transfer http callback"); /* stop the timer */ comm_timer_disable(xfr->task_transfer->timer); if(err != NETEVENT_NOERROR && err != NETEVENT_DONE) { /* connection failed, closed, or timeout */ /* stop this transfer, cleanup * and continue task_transfer*/ verbose(VERB_ALGO, "http stopped, connection lost to %s", xfr->task_transfer->master->host); failed: /* delete transferred data from list */ auth_chunks_delete(xfr->task_transfer); if(repinfo) repinfo->c = NULL; /* signal cp deleted to the routine calling this callback */ comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; xfr_transfer_nextmaster(xfr); xfr_transfer_nexttarget_or_end(xfr, env); return 0; } /* if it is good, link it into the list of data */ /* if the link into list of data fails (malloc fail) cleanup and end */ if(sldns_buffer_limit(c->buffer) > 0) { verbose(VERB_ALGO, "auth zone http queued up %d bytes", (int)sldns_buffer_limit(c->buffer)); if(!xfer_link_data(c->buffer, xfr)) { verbose(VERB_ALGO, "http stopped to %s, malloc failed", xfr->task_transfer->master->host); goto failed; } } /* if the transfer is done now, disconnect and process the list */ if(err == NETEVENT_DONE) { if(repinfo) repinfo->c = NULL; /* signal cp deleted to the routine calling this callback */ comm_point_delete(xfr->task_transfer->cp); xfr->task_transfer->cp = NULL; process_list_end_transfer(xfr, env); return 0; } /* if we want to read more messages, setup the commpoint to read * a DNS packet, and the timeout */ lock_basic_unlock(&xfr->lock); c->tcp_is_reading = 1; sldns_buffer_clear(c->buffer); comm_point_start_listening(c, -1, AUTH_TRANSFER_TIMEOUT); return 0; } /** start transfer task by this worker , xfr is locked. */ static void xfr_start_transfer(struct auth_xfer* xfr, struct module_env* env, struct auth_master* master) { log_assert(xfr->task_transfer != NULL); log_assert(xfr->task_transfer->worker == NULL); log_assert(xfr->task_transfer->chunks_first == NULL); log_assert(xfr->task_transfer->chunks_last == NULL); xfr->task_transfer->worker = env->worker; xfr->task_transfer->env = env; /* init transfer process */ /* find that master in the transfer's list of masters? */ xfr_transfer_start_list(xfr, master); /* start lookup for hostnames in transfer master list */ xfr_transfer_start_lookups(xfr); /* initiate TCP, and set timeout on it */ xfr_transfer_nexttarget_or_end(xfr, env); } /** disown task_probe. caller must hold xfr.lock */ static void xfr_probe_disown(struct auth_xfer* xfr) { /* remove timer (from this worker's event base) */ comm_timer_delete(xfr->task_probe->timer); xfr->task_probe->timer = NULL; /* remove the commpoint */ comm_point_delete(xfr->task_probe->cp); xfr->task_probe->cp = NULL; /* we don't own this item anymore */ xfr->task_probe->worker = NULL; xfr->task_probe->env = NULL; } /** send the UDP probe to the master, this is part of task_probe */ static int xfr_probe_send_probe(struct auth_xfer* xfr, struct module_env* env, int timeout) { struct sockaddr_storage addr; socklen_t addrlen = 0; struct timeval t; /* pick master */ struct auth_master* master = xfr_probe_current_master(xfr); char *auth_name = NULL; if(!master) return 0; if(master->allow_notify) return 0; /* only for notify */ if(master->http) return 0; /* only masters get SOA UDP probe, not urls, if those are in this list */ /* get master addr */ if(xfr->task_probe->scan_addr) { addrlen = xfr->task_probe->scan_addr->addrlen; memmove(&addr, &xfr->task_probe->scan_addr->addr, addrlen); } else { if(!authextstrtoaddr(master->host, &addr, &addrlen, &auth_name)) { /* the ones that are not in addr format are supposed * to be looked up. The lookup has failed however, * so skip them */ char zname[255+1]; dname_str(xfr->name, zname); log_err("%s: failed lookup, cannot probe to master %s", zname, master->host); return 0; } if (auth_name != NULL) { if (addr.ss_family == AF_INET && (int)ntohs(((struct sockaddr_in *)&addr)->sin_port) == env->cfg->ssl_port) ((struct sockaddr_in *)&addr)->sin_port = htons((uint16_t)env->cfg->port); else if (addr.ss_family == AF_INET6 && (int)ntohs(((struct sockaddr_in6 *)&addr)->sin6_port) == env->cfg->ssl_port) ((struct sockaddr_in6 *)&addr)->sin6_port = htons((uint16_t)env->cfg->port); } } /* create packet */ /* create new ID for new probes, but not on timeout retries, * this means we'll accept replies to previous retries to same ip */ if(timeout == AUTH_PROBE_TIMEOUT) xfr->task_probe->id = (uint16_t)(ub_random(env->rnd)&0xffff); xfr_create_soa_probe_packet(xfr, env->scratch_buffer, xfr->task_probe->id); /* we need to remove the cp if we have a different ip4/ip6 type now */ if(xfr->task_probe->cp && ((xfr->task_probe->cp_is_ip6 && !addr_is_ip6(&addr, addrlen)) || (!xfr->task_probe->cp_is_ip6 && addr_is_ip6(&addr, addrlen))) ) { comm_point_delete(xfr->task_probe->cp); xfr->task_probe->cp = NULL; } if(!xfr->task_probe->cp) { if(addr_is_ip6(&addr, addrlen)) xfr->task_probe->cp_is_ip6 = 1; else xfr->task_probe->cp_is_ip6 = 0; xfr->task_probe->cp = outnet_comm_point_for_udp(env->outnet, auth_xfer_probe_udp_callback, xfr, &addr, addrlen); if(!xfr->task_probe->cp) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "cannot create udp cp for " "probe %s to %s", zname, as); return 0; } } if(!xfr->task_probe->timer) { xfr->task_probe->timer = comm_timer_create(env->worker_base, auth_xfer_probe_timer_callback, xfr); if(!xfr->task_probe->timer) { log_err("malloc failure"); return 0; } } /* send udp packet */ if(!comm_point_send_udp_msg(xfr->task_probe->cp, env->scratch_buffer, (struct sockaddr*)&addr, addrlen, 0)) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "failed to send soa probe for %s to %s", zname, as); return 0; } if(verbosity >= VERB_ALGO) { char zname[255+1], as[256]; dname_str(xfr->name, zname); addr_to_str(&addr, addrlen, as, sizeof(as)); verbose(VERB_ALGO, "auth zone %s soa probe sent to %s", zname, as); } xfr->task_probe->timeout = timeout; #ifndef S_SPLINT_S t.tv_sec = timeout/1000; t.tv_usec = (timeout%1000)*1000; #endif comm_timer_set(xfr->task_probe->timer, &t); return 1; } /** callback for task_probe timer */ void auth_xfer_probe_timer_callback(void* arg) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s soa probe timeout", zname); } if(xfr->task_probe->timeout <= AUTH_PROBE_TIMEOUT_STOP) { /* try again with bigger timeout */ if(xfr_probe_send_probe(xfr, env, xfr->task_probe->timeout*2)) { lock_basic_unlock(&xfr->lock); return; } } /* delete commpoint so a new one is created, with a fresh port nr */ comm_point_delete(xfr->task_probe->cp); xfr->task_probe->cp = NULL; /* too many timeouts (or fail to send), move to next or end */ xfr_probe_nextmaster(xfr); xfr_probe_send_or_end(xfr, env); } /** callback for task_probe udp packets */ int auth_xfer_probe_udp_callback(struct comm_point* c, void* arg, int err, struct comm_reply* repinfo) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return 0; /* stop on quit */ } /* the comm_point_udp_callback is in a for loop for NUM_UDP_PER_SELECT * and we set rep.c=NULL to stop if from looking inside the commpoint*/ repinfo->c = NULL; /* stop the timer */ comm_timer_disable(xfr->task_probe->timer); /* see if we got a packet and what that means */ if(err == NETEVENT_NOERROR) { uint32_t serial = 0; if(check_packet_ok(c->buffer, LDNS_RR_TYPE_SOA, xfr, &serial)) { /* successful lookup */ if(verbosity >= VERB_ALGO) { char buf[256]; dname_str(xfr->name, buf); verbose(VERB_ALGO, "auth zone %s: soa probe " "serial is %u", buf, (unsigned)serial); } /* see if this serial indicates that the zone has * to be updated */ if(xfr_serial_means_update(xfr, serial)) { /* if updated, start the transfer task, if needed */ verbose(VERB_ALGO, "auth_zone updated, start transfer"); if(xfr->task_transfer->worker == NULL) { struct auth_master* master = xfr_probe_current_master(xfr); /* if we have download URLs use them * in preference to this master we * just probed the SOA from */ if(xfr->task_transfer->masters && xfr->task_transfer->masters->http) master = NULL; xfr_probe_disown(xfr); xfr_start_transfer(xfr, env, master); return 0; } /* other tasks are running, we don't do this anymore */ xfr_probe_disown(xfr); lock_basic_unlock(&xfr->lock); /* return, we don't sent a reply to this udp packet, * and we setup the tasks to do next */ return 0; } else { verbose(VERB_ALGO, "auth_zone master reports unchanged soa serial"); /* we if cannot find updates amongst the * masters, this means we then have a new lease * on the zone */ xfr->task_probe->have_new_lease = 1; } } else { if(verbosity >= VERB_ALGO) { char buf[256]; dname_str(xfr->name, buf); verbose(VERB_ALGO, "auth zone %s: bad reply to soa probe", buf); } } } else { if(verbosity >= VERB_ALGO) { char buf[256]; dname_str(xfr->name, buf); verbose(VERB_ALGO, "auth zone %s: soa probe failed", buf); } } /* failed lookup or not an update */ /* delete commpoint so a new one is created, with a fresh port nr */ comm_point_delete(xfr->task_probe->cp); xfr->task_probe->cp = NULL; /* if the result was not a successfull probe, we need * to send the next one */ xfr_probe_nextmaster(xfr); xfr_probe_send_or_end(xfr, env); return 0; } /** lookup a host name for its addresses, if needed */ static int xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env) { struct sockaddr_storage addr; socklen_t addrlen = 0; struct auth_master* master = xfr->task_probe->lookup_target; struct query_info qinfo; uint16_t qflags = BIT_RD; uint8_t dname[LDNS_MAX_DOMAINLEN+1]; struct edns_data edns; sldns_buffer* buf = env->scratch_buffer; if(!master) return 0; if(extstrtoaddr(master->host, &addr, &addrlen)) { /* not needed, host is in IP addr format */ return 0; } if(master->allow_notify && !master->http && strchr(master->host, '/') != NULL && strchr(master->host, '/') == strrchr(master->host, '/')) { return 0; /* is IP/prefix format, not something to look up */ } /* use mesh_new_callback to probe for non-addr hosts, * and then wait for them to be looked up (in cache, or query) */ qinfo.qname_len = sizeof(dname); if(sldns_str2wire_dname_buf(master->host, dname, &qinfo.qname_len) != 0) { log_err("cannot parse host name of master %s", master->host); return 0; } qinfo.qname = dname; qinfo.qclass = xfr->dclass; qinfo.qtype = LDNS_RR_TYPE_A; if(xfr->task_probe->lookup_aaaa) qinfo.qtype = LDNS_RR_TYPE_AAAA; qinfo.local_alias = NULL; if(verbosity >= VERB_ALGO) { char buf1[512]; char buf2[LDNS_MAX_DOMAINLEN+1]; dname_str(xfr->name, buf2); snprintf(buf1, sizeof(buf1), "auth zone %s: master lookup" " for task_probe", buf2); log_query_info(VERB_ALGO, buf1, &qinfo); } edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = 0; edns.bits = EDNS_DO; edns.opt_list = NULL; edns.padding_block_size = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; /* unlock xfr during mesh_new_callback() because the callback can be * called straight away */ lock_basic_unlock(&xfr->lock); if(!mesh_new_callback(env->mesh, &qinfo, qflags, &edns, buf, 0, &auth_xfer_probe_lookup_callback, xfr)) { lock_basic_lock(&xfr->lock); log_err("out of memory lookup up master %s", master->host); return 0; } lock_basic_lock(&xfr->lock); return 1; } /** move to sending the probe packets, next if fails. task_probe */ static void xfr_probe_send_or_end(struct auth_xfer* xfr, struct module_env* env) { /* are we doing hostname lookups? */ while(xfr->task_probe->lookup_target) { if(xfr_probe_lookup_host(xfr, env)) { /* wait for lookup to finish, * note that the hostname may be in unbound's cache * and we may then get an instant cache response, * and that calls the callback just like a full * lookup and lookup failures also call callback */ if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s probe next target lookup", zname); } lock_basic_unlock(&xfr->lock); return; } xfr_probe_move_to_next_lookup(xfr, env); } /* probe of list has ended. Create or refresh the list of of * allow_notify addrs */ probe_copy_masters_for_allow_notify(xfr); if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s probe: notify addrs updated", zname); } if(xfr->task_probe->only_lookup) { /* only wanted lookups for copy, stop probe and start wait */ xfr->task_probe->only_lookup = 0; if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s probe: finished only_lookup", zname); } xfr_probe_disown(xfr); if(xfr->task_nextprobe->worker == NULL) xfr_set_timeout(xfr, env, 0, 0); lock_basic_unlock(&xfr->lock); return; } /* send probe packets */ while(!xfr_probe_end_of_list(xfr)) { if(xfr_probe_send_probe(xfr, env, AUTH_PROBE_TIMEOUT)) { /* successfully sent probe, wait for callback */ lock_basic_unlock(&xfr->lock); return; } /* failed to send probe, next master */ xfr_probe_nextmaster(xfr); } /* done with probe sequence, wait */ if(xfr->task_probe->have_new_lease) { /* if zone not updated, start the wait timer again */ if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth_zone %s unchanged, new lease, wait", zname); } xfr_probe_disown(xfr); if(xfr->have_zone) xfr->lease_time = *env->now; if(xfr->task_nextprobe->worker == NULL) xfr_set_timeout(xfr, env, 0, 0); } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s soa probe failed, wait to retry", zname); } /* we failed to send this as well, move to the wait task, * use the shorter retry timeout */ xfr_probe_disown(xfr); /* pick up the nextprobe task and wait */ if(xfr->task_nextprobe->worker == NULL) xfr_set_timeout(xfr, env, 1, 0); } lock_basic_unlock(&xfr->lock); } /** callback for task_probe lookup of host name, of A or AAAA */ void auth_xfer_probe_lookup_callback(void* arg, int rcode, sldns_buffer* buf, enum sec_status ATTR_UNUSED(sec), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; log_assert(xfr->task_probe); lock_basic_lock(&xfr->lock); env = xfr->task_probe->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } /* process result */ if(rcode == LDNS_RCODE_NOERROR) { uint16_t wanted_qtype = LDNS_RR_TYPE_A; struct regional* temp = env->scratch; struct query_info rq; struct reply_info* rep; if(xfr->task_probe->lookup_aaaa) wanted_qtype = LDNS_RR_TYPE_AAAA; memset(&rq, 0, sizeof(rq)); rep = parse_reply_in_temp_region(buf, temp, &rq); if(rep && rq.qtype == wanted_qtype && FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR) { /* parsed successfully */ struct ub_packed_rrset_key* answer = reply_find_answer_rrset(&rq, rep); if(answer) { xfr_master_add_addrs(xfr->task_probe-> lookup_target, answer, wanted_qtype); } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has nodata", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A")); } } } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup has no address", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A")); } } regional_free_all(temp); } else { if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s host %s type %s probe lookup failed", zname, xfr->task_probe->lookup_target->host, (xfr->task_probe->lookup_aaaa?"AAAA":"A")); } } if(xfr->task_probe->lookup_target->list && xfr->task_probe->lookup_target == xfr_probe_current_master(xfr)) xfr->task_probe->scan_addr = xfr->task_probe->lookup_target->list; /* move to lookup AAAA after A lookup, move to next hostname lookup, * or move to send the probes, or, if nothing to do, end task_probe */ xfr_probe_move_to_next_lookup(xfr, env); xfr_probe_send_or_end(xfr, env); } /** disown task_nextprobe. caller must hold xfr.lock */ static void xfr_nextprobe_disown(struct auth_xfer* xfr) { /* delete the timer, because the next worker to pick this up may * not have the same event base */ comm_timer_delete(xfr->task_nextprobe->timer); xfr->task_nextprobe->timer = NULL; xfr->task_nextprobe->next_probe = 0; /* we don't own this item anymore */ xfr->task_nextprobe->worker = NULL; xfr->task_nextprobe->env = NULL; } /** xfer nextprobe timeout callback, this is part of task_nextprobe */ void auth_xfer_timer(void* arg) { struct auth_xfer* xfr = (struct auth_xfer*)arg; struct module_env* env; log_assert(xfr->task_nextprobe); lock_basic_lock(&xfr->lock); env = xfr->task_nextprobe->env; if(!env || env->outnet->want_to_quit) { lock_basic_unlock(&xfr->lock); return; /* stop on quit */ } /* see if zone has expired, and if so, also set auth_zone expired */ if(xfr->have_zone && !xfr->zone_expired && *env->now >= xfr->lease_time + xfr->expiry) { lock_basic_unlock(&xfr->lock); auth_xfer_set_expired(xfr, env, 1); lock_basic_lock(&xfr->lock); } xfr_nextprobe_disown(xfr); if(!xfr_start_probe(xfr, env, NULL)) { /* not started because already in progress */ lock_basic_unlock(&xfr->lock); } } /** return true if there are probe (SOA UDP query) targets in the master list*/ static int have_probe_targets(struct auth_master* list) { struct auth_master* p; for(p=list; p; p = p->next) { if(!p->allow_notify && p->host) return 1; } return 0; } /** start task_probe if possible, if no masters for probe start task_transfer * returns true if task has been started, and false if the task is already * in progress. */ static int xfr_start_probe(struct auth_xfer* xfr, struct module_env* env, struct auth_master* spec) { /* see if we need to start a probe (or maybe it is already in * progress (due to notify)) */ if(xfr->task_probe->worker == NULL) { if(!have_probe_targets(xfr->task_probe->masters) && !(xfr->task_probe->only_lookup && xfr->task_probe->masters != NULL)) { /* useless to pick up task_probe, no masters to * probe. Instead attempt to pick up task transfer */ if(xfr->task_transfer->worker == NULL) { xfr_start_transfer(xfr, env, spec); return 1; } /* task transfer already in progress */ return 0; } /* pick up the probe task ourselves */ xfr->task_probe->worker = env->worker; xfr->task_probe->env = env; xfr->task_probe->cp = NULL; /* start the task */ /* have not seen a new lease yet, this scan */ xfr->task_probe->have_new_lease = 0; /* if this was a timeout, no specific first master to scan */ /* otherwise, spec is nonNULL the notified master, scan * first and also transfer first from it */ xfr_probe_start_list(xfr, spec); /* setup to start the lookup of hostnames of masters afresh */ xfr_probe_start_lookups(xfr); /* send the probe packet or next send, or end task */ xfr_probe_send_or_end(xfr, env); return 1; } return 0; } /** for task_nextprobe. * determine next timeout for auth_xfer. Also (re)sets timer. * @param xfr: task structure * @param env: module environment, with worker and time. * @param failure: set true if timer should be set for failure retry. * @param lookup_only: only perform lookups when timer done, 0 sec timeout */ static void xfr_set_timeout(struct auth_xfer* xfr, struct module_env* env, int failure, int lookup_only) { struct timeval tv; log_assert(xfr->task_nextprobe != NULL); log_assert(xfr->task_nextprobe->worker == NULL || xfr->task_nextprobe->worker == env->worker); /* normally, nextprobe = startoflease + refresh, * but if expiry is sooner, use that one. * after a failure, use the retry timer instead. */ xfr->task_nextprobe->next_probe = *env->now; if(xfr->lease_time && !failure) xfr->task_nextprobe->next_probe = xfr->lease_time; if(!failure) { xfr->task_nextprobe->backoff = 0; } else { if(xfr->task_nextprobe->backoff == 0) xfr->task_nextprobe->backoff = 3; else xfr->task_nextprobe->backoff *= 2; if(xfr->task_nextprobe->backoff > AUTH_TRANSFER_MAX_BACKOFF) xfr->task_nextprobe->backoff = AUTH_TRANSFER_MAX_BACKOFF; } if(xfr->have_zone) { time_t wait = xfr->refresh; if(failure) wait = xfr->retry; if(xfr->expiry < wait) xfr->task_nextprobe->next_probe += xfr->expiry; else xfr->task_nextprobe->next_probe += wait; if(failure) xfr->task_nextprobe->next_probe += xfr->task_nextprobe->backoff; /* put the timer exactly on expiry, if possible */ if(xfr->lease_time && xfr->lease_time+xfr->expiry < xfr->task_nextprobe->next_probe && xfr->lease_time+xfr->expiry > *env->now) xfr->task_nextprobe->next_probe = xfr->lease_time+xfr->expiry; } else { xfr->task_nextprobe->next_probe += xfr->task_nextprobe->backoff; } if(!xfr->task_nextprobe->timer) { xfr->task_nextprobe->timer = comm_timer_create( env->worker_base, auth_xfer_timer, xfr); if(!xfr->task_nextprobe->timer) { /* failed to malloc memory. likely zone transfer * also fails for that. skip the timeout */ char zname[255+1]; dname_str(xfr->name, zname); log_err("cannot allocate timer, no refresh for %s", zname); return; } } xfr->task_nextprobe->worker = env->worker; xfr->task_nextprobe->env = env; if(*(xfr->task_nextprobe->env->now) <= xfr->task_nextprobe->next_probe) tv.tv_sec = xfr->task_nextprobe->next_probe - *(xfr->task_nextprobe->env->now); else tv.tv_sec = 0; if(tv.tv_sec != 0 && lookup_only && xfr->task_probe->masters) { /* don't lookup_only, if lookup timeout is 0 anyway, * or if we don't have masters to lookup */ tv.tv_sec = 0; if(xfr->task_probe->worker == NULL) xfr->task_probe->only_lookup = 1; } if(verbosity >= VERB_ALGO) { char zname[255+1]; dname_str(xfr->name, zname); verbose(VERB_ALGO, "auth zone %s timeout in %d seconds", zname, (int)tv.tv_sec); } tv.tv_usec = 0; comm_timer_set(xfr->task_nextprobe->timer, &tv); } /** initial pick up of worker timeouts, ties events to worker event loop */ void auth_xfer_pickup_initial(struct auth_zones* az, struct module_env* env) { struct auth_xfer* x; lock_rw_wrlock(&az->lock); RBTREE_FOR(x, struct auth_xfer*, &az->xtree) { lock_basic_lock(&x->lock); /* set lease_time, because we now have timestamp in env, * (not earlier during startup and apply_cfg), and this * notes the start time when the data was acquired */ if(x->have_zone) x->lease_time = *env->now; if(x->task_nextprobe && x->task_nextprobe->worker == NULL) { xfr_set_timeout(x, env, 0, 1); } lock_basic_unlock(&x->lock); } lock_rw_unlock(&az->lock); } void auth_zones_cleanup(struct auth_zones* az) { struct auth_xfer* x; lock_rw_wrlock(&az->lock); RBTREE_FOR(x, struct auth_xfer*, &az->xtree) { lock_basic_lock(&x->lock); if(x->task_nextprobe && x->task_nextprobe->worker != NULL) { xfr_nextprobe_disown(x); } if(x->task_probe && x->task_probe->worker != NULL) { xfr_probe_disown(x); } if(x->task_transfer && x->task_transfer->worker != NULL) { auth_chunks_delete(x->task_transfer); xfr_transfer_disown(x); } lock_basic_unlock(&x->lock); } lock_rw_unlock(&az->lock); } /** * malloc the xfer and tasks * @param z: auth_zone with name of zone. */ static struct auth_xfer* auth_xfer_new(struct auth_zone* z) { struct auth_xfer* xfr; xfr = (struct auth_xfer*)calloc(1, sizeof(*xfr)); if(!xfr) return NULL; xfr->name = memdup(z->name, z->namelen); if(!xfr->name) { free(xfr); return NULL; } xfr->node.key = xfr; xfr->namelen = z->namelen; xfr->namelabs = z->namelabs; xfr->dclass = z->dclass; xfr->task_nextprobe = (struct auth_nextprobe*)calloc(1, sizeof(struct auth_nextprobe)); if(!xfr->task_nextprobe) { free(xfr->name); free(xfr); return NULL; } xfr->task_probe = (struct auth_probe*)calloc(1, sizeof(struct auth_probe)); if(!xfr->task_probe) { free(xfr->task_nextprobe); free(xfr->name); free(xfr); return NULL; } xfr->task_transfer = (struct auth_transfer*)calloc(1, sizeof(struct auth_transfer)); if(!xfr->task_transfer) { free(xfr->task_probe); free(xfr->task_nextprobe); free(xfr->name); free(xfr); return NULL; } lock_basic_init(&xfr->lock); lock_protect(&xfr->lock, &xfr->name, sizeof(xfr->name)); lock_protect(&xfr->lock, &xfr->namelen, sizeof(xfr->namelen)); lock_protect(&xfr->lock, xfr->name, xfr->namelen); lock_protect(&xfr->lock, &xfr->namelabs, sizeof(xfr->namelabs)); lock_protect(&xfr->lock, &xfr->dclass, sizeof(xfr->dclass)); lock_protect(&xfr->lock, &xfr->notify_received, sizeof(xfr->notify_received)); lock_protect(&xfr->lock, &xfr->notify_serial, sizeof(xfr->notify_serial)); lock_protect(&xfr->lock, &xfr->zone_expired, sizeof(xfr->zone_expired)); lock_protect(&xfr->lock, &xfr->have_zone, sizeof(xfr->have_zone)); lock_protect(&xfr->lock, &xfr->serial, sizeof(xfr->serial)); lock_protect(&xfr->lock, &xfr->retry, sizeof(xfr->retry)); lock_protect(&xfr->lock, &xfr->refresh, sizeof(xfr->refresh)); lock_protect(&xfr->lock, &xfr->expiry, sizeof(xfr->expiry)); lock_protect(&xfr->lock, &xfr->lease_time, sizeof(xfr->lease_time)); lock_protect(&xfr->lock, &xfr->task_nextprobe->worker, sizeof(xfr->task_nextprobe->worker)); lock_protect(&xfr->lock, &xfr->task_probe->worker, sizeof(xfr->task_probe->worker)); lock_protect(&xfr->lock, &xfr->task_transfer->worker, sizeof(xfr->task_transfer->worker)); lock_basic_lock(&xfr->lock); return xfr; } /** Create auth_xfer structure. * This populates the have_zone, soa values, and so on times. * and sets the timeout, if a zone transfer is needed a short timeout is set. * For that the auth_zone itself must exist (and read in zonefile) * returns false on alloc failure. */ struct auth_xfer* auth_xfer_create(struct auth_zones* az, struct auth_zone* z) { struct auth_xfer* xfr; /* malloc it */ xfr = auth_xfer_new(z); if(!xfr) { log_err("malloc failure"); return NULL; } /* insert in tree */ (void)rbtree_insert(&az->xtree, &xfr->node); return xfr; } /** create new auth_master structure */ static struct auth_master* auth_master_new(struct auth_master*** list) { struct auth_master *m; m = (struct auth_master*)calloc(1, sizeof(*m)); if(!m) { log_err("malloc failure"); return NULL; } /* set first pointer to m, or next pointer of previous element to m */ (**list) = m; /* store m's next pointer as future point to store at */ (*list) = &(m->next); return m; } /** dup_prefix : create string from initial part of other string, malloced */ static char* dup_prefix(char* str, size_t num) { char* result; size_t len = strlen(str); if(len < num) num = len; /* not more than strlen */ result = (char*)malloc(num+1); if(!result) { log_err("malloc failure"); return result; } memmove(result, str, num); result[num] = 0; return result; } /** dup string and print error on error */ static char* dup_all(char* str) { char* result = strdup(str); if(!result) { log_err("malloc failure"); return NULL; } return result; } /** find first of two characters */ static char* str_find_first_of_chars(char* s, char a, char b) { char* ra = strchr(s, a); char* rb = strchr(s, b); if(!ra) return rb; if(!rb) return ra; if(ra < rb) return ra; return rb; } /** parse URL into host and file parts, false on malloc or parse error */ static int parse_url(char* url, char** host, char** file, int* port, int* ssl) { char* p = url; /* parse http://www.example.com/file.htm * or http://127.0.0.1 (index.html) * or https://[::1@1234]/a/b/c/d */ *ssl = 1; *port = AUTH_HTTPS_PORT; /* parse http:// or https:// */ if(strncmp(p, "http://", 7) == 0) { p += 7; *ssl = 0; *port = AUTH_HTTP_PORT; } else if(strncmp(p, "https://", 8) == 0) { p += 8; } else if(strstr(p, "://") && strchr(p, '/') > strstr(p, "://") && strchr(p, ':') >= strstr(p, "://")) { char* uri = dup_prefix(p, (size_t)(strstr(p, "://")-p)); log_err("protocol %s:// not supported (for url %s)", uri?uri:"", p); free(uri); return 0; } /* parse hostname part */ if(p[0] == '[') { char* end = strchr(p, ']'); p++; /* skip over [ */ if(end) { *host = dup_prefix(p, (size_t)(end-p)); if(!*host) return 0; p = end+1; /* skip over ] */ } else { *host = dup_all(p); if(!*host) return 0; p = end; } } else { char* end = str_find_first_of_chars(p, ':', '/'); if(end) { *host = dup_prefix(p, (size_t)(end-p)); if(!*host) return 0; } else { *host = dup_all(p); if(!*host) return 0; } p = end; /* at next : or / or NULL */ } /* parse port number */ if(p && p[0] == ':') { char* end = NULL; *port = strtol(p+1, &end, 10); p = end; } /* parse filename part */ while(p && *p == '/') p++; if(!p || p[0] == 0) *file = strdup("index.html"); else *file = strdup(p); if(!*file) { log_err("malloc failure"); return 0; } return 1; } int xfer_set_masters(struct auth_master** list, struct config_auth* c, int with_http) { struct auth_master* m; struct config_strlist* p; /* list points to the first, or next pointer for the new element */ while(*list) { list = &( (*list)->next ); } if(with_http) for(p = c->urls; p; p = p->next) { m = auth_master_new(&list); m->http = 1; if(!parse_url(p->str, &m->host, &m->file, &m->port, &m->ssl)) return 0; } for(p = c->masters; p; p = p->next) { m = auth_master_new(&list); m->ixfr = 1; /* this flag is not configurable */ m->host = strdup(p->str); if(!m->host) { log_err("malloc failure"); return 0; } } for(p = c->allow_notify; p; p = p->next) { m = auth_master_new(&list); m->allow_notify = 1; m->host = strdup(p->str); if(!m->host) { log_err("malloc failure"); return 0; } } return 1; } #define SERIAL_BITS 32 int compare_serial(uint32_t a, uint32_t b) { const uint32_t cutoff = ((uint32_t) 1 << (SERIAL_BITS - 1)); if (a == b) { return 0; } else if ((a < b && b - a < cutoff) || (a > b && a - b > cutoff)) { return -1; } else { return 1; } } unbound-1.13.1/services/rpz.h0000644000175000017500000001544314010434640015515 0ustar wouterwouter/* * services/rpz.h - rpz service * * Copyright (c) 2019, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to enable RPZ service. */ #ifndef SERVICES_RPZ_H #define SERVICES_RPZ_H #include "services/localzone.h" #include "util/locks.h" #include "util/log.h" #include "util/config_file.h" #include "services/authzone.h" #include "sldns/sbuffer.h" #include "daemon/stats.h" #include "respip/respip.h" /** * RPZ triggers, only the QNAME trigger is currently supported in Unbound. */ enum rpz_trigger { RPZ_QNAME_TRIGGER = 0, /* unsupported triggers */ RPZ_CLIENT_IP_TRIGGER, /* rpz-client-ip */ RPZ_RESPONSE_IP_TRIGGER, /* rpz-ip */ RPZ_NSDNAME_TRIGGER, /* rpz-nsdname */ RPZ_NSIP_TRIGGER, /* rpz-nsip */ RPZ_INVALID_TRIGGER, /* dname does not contain valid trigger */ }; /** * RPZ actions. */ enum rpz_action { RPZ_NXDOMAIN_ACTION = 0,/* CNAME . */ RPZ_NODATA_ACTION, /* CNAME *. */ RPZ_PASSTHRU_ACTION, /* CNAME rpz-passthru. */ RPZ_DROP_ACTION, /* CNAME rpz-drop. */ RPZ_TCP_ONLY_ACTION, /* CNAME rpz-tcp-only. */ RPZ_INVALID_ACTION, /* CNAME with (child of) TLD starting with "rpz-" in target, SOA, NS, DNAME and DNSSEC-related records. */ RPZ_LOCAL_DATA_ACTION, /* anything else */ /* RPZ override actions */ RPZ_DISABLED_ACTION, /* RPZ action disabled using override */ RPZ_NO_OVERRIDE_ACTION, /* RPZ action no override*/ RPZ_CNAME_OVERRIDE_ACTION, /* RPZ CNAME action override*/ }; /** * RPZ containing policies. Pointed to from corresponding auth-zone. Part of a * linked list to keep configuration order. Iterating or changing the linked * list requires the rpz_lock from struct auth_zones. Changing items in this * struct require the lock from struct auth_zone. */ struct rpz { struct local_zones* local_zones; struct respip_set* respip_set; uint8_t* taglist; size_t taglistlen; enum rpz_action action_override; struct ub_packed_rrset_key* cname_override; int log; char* log_name; struct regional* region; int disabled; }; /** * Create policy from RR and add to this RPZ. * @param r: the rpz to add the policy to. * @param azname: dname of the auth-zone * @param aznamelen: the length of the auth-zone name * @param dname: dname of the RR * @param dnamelen: length of the dname * @param rr_type: RR type of the RR * @param rr_class: RR class of the RR * @param rr_ttl: TTL of the RR * @param rdatawl: rdata of the RR, prepended with the rdata size * @param rdatalen: length if the RR, including the prepended rdata size * @param rr: the complete RR, for logging purposes * @param rr_len: the length of the complete RR * @return: 0 on error */ int rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len); /** * Delete policy matching RR, used for IXFR. * @param r: the rpz to add the policy to. * @param aznamelen: the length of the auth-zone name * @param dname: dname of the RR * @param dnamelen: length of the dname * @param rr_type: RR type of the RR * @param rr_class: RR class of the RR * @param rdatawl: rdata of the RR, prepended with the rdata size * @param rdatalen: length if the RR, including the prepended rdata size */ void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, size_t rdatalen); /** * Walk over the RPZ zones to find and apply a QNAME trigger policy. * @param az: auth_zones struct, containing first RPZ item and RPZ lock * @param env: module env * @param qinfo: qinfo containing qname and qtype * @param edns: edns data * @param buf: buffer to write answer to * @param temp: scratchpad * @param repinfo: reply info * @param taglist: taglist to lookup. * @param taglen: lenth of taglist. * @param stats: worker stats struct * @return: 1 if client answer is ready, 0 to continue resolving */ int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist, size_t taglen, struct ub_server_stats* stats); /** * Delete RPZ * @param r: RPZ struct to delete */ void rpz_delete(struct rpz* r); /** * Clear local-zones and respip data in RPZ, used after reloading file or * AXFR/HTTP transfer. * @param r: RPZ to use */ int rpz_clear(struct rpz* r); /** * Create RPZ. RPZ must be added to linked list after creation. * @return: the newly created RPZ */ struct rpz* rpz_create(struct config_auth* p); /** * String for RPZ action enum * @param a: RPZ action to get string for * @return: string for RPZ action */ const char* rpz_action_to_string(enum rpz_action a); enum rpz_action respip_action_to_rpz_action(enum respip_action a); /** * Prepare RPZ after procesing feed content. * @param r: RPZ to use */ void rpz_finish_config(struct rpz* r); /** * Classify respip action for RPZ action * @param a: RPZ action * @return: the respip action */ enum respip_action rpz_action_to_respip_action(enum rpz_action a); /** * Enable RPZ * @param r: RPZ struct to enable */ void rpz_enable(struct rpz* r); /** * Disable RPZ * @param r: RPZ struct to disable */ void rpz_disable(struct rpz* r); #endif /* SERVICES_RPZ_H */ unbound-1.13.1/services/modstack.h0000644000175000017500000000762414010434640016511 0ustar wouterwouter/* * services/modstack.h - stack of modules * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to help maintain a stack of modules. */ #ifndef SERVICES_MODSTACK_H #define SERVICES_MODSTACK_H struct module_func_block; struct module_env; /** * Stack of modules. */ struct module_stack { /** the number of modules */ int num; /** the module callbacks, array of num_modules length (ref only) */ struct module_func_block** mod; }; /** * Init a stack of modules * @param stack: initialised as empty. */ void modstack_init(struct module_stack* stack); /** * Read config file module settings and set up the modfunc block * @param stack: the stack of modules (empty before call). * @param module_conf: string what modules to insert. * @return false on error */ int modstack_config(struct module_stack* stack, const char* module_conf); /** * Get funcblock for module name * @param str: string with module name. Advanced to next value on success. * The string is assumed whitespace separated list of module names. * @return funcblock or NULL on error. */ struct module_func_block* module_factory(const char** str); /** * Get list of modules available. * @return list of modules available. Static strings, ends with NULL. */ const char** module_list_avail(void); /** * Setup modules. Assigns ids and calls module_init. * @param stack: if not empty beforehand, it will be desetup()ed. * It is then modstack_configged(). * @param module_conf: string what modules to insert. * @param env: module environment which is inited by the modules. * environment should have a superalloc, cfg, * env.need_to_validate is set by the modules. * @return on false a module init failed. */ int modstack_setup(struct module_stack* stack, const char* module_conf, struct module_env* env); /** * Desetup the modules, deinit, delete. * @param stack: made empty. * @param env: module env for module deinit() calls. */ void modstack_desetup(struct module_stack* stack, struct module_env* env); /** * Find index of module by name. * @param stack: to look in * @param name: the name to look for * @return -1 on failure, otherwise index number. */ int modstack_find(struct module_stack* stack, const char* name); /** fetch memory for a module by name, returns 0 if module not there */ size_t mod_get_mem(struct module_env* env, const char* name); #endif /* SERVICES_MODSTACK_H */ unbound-1.13.1/services/outbound_list.c0000644000175000017500000000525714010434640017571 0ustar wouterwouter/* * services/outbound_list.c - keep list of outbound serviced queries. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to help a module keep track of the * queries it has outstanding to authoritative servers. */ #include "config.h" #include #include "services/outbound_list.h" #include "services/outside_network.h" void outbound_list_init(struct outbound_list* list) { list->first = NULL; } void outbound_list_clear(struct outbound_list* list) { struct outbound_entry *p, *np; p = list->first; while(p) { np = p->next; outnet_serviced_query_stop(p->qsent, p); /* in region, no free needed */ p = np; } outbound_list_init(list); } void outbound_list_insert(struct outbound_list* list, struct outbound_entry* e) { if(list->first) list->first->prev = e; e->next = list->first; e->prev = NULL; list->first = e; } void outbound_list_remove(struct outbound_list* list, struct outbound_entry* e) { if(!e) return; outnet_serviced_query_stop(e->qsent, e); if(e->next) e->next->prev = e->prev; if(e->prev) e->prev->next = e->next; else list->first = e->next; /* in region, no free needed */ } unbound-1.13.1/services/outbound_list.h0000644000175000017500000000704014010434640017566 0ustar wouterwouter/* * services/outbound_list.h - keep list of outbound serviced queries. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to help a module keep track of the * queries it has outstanding to authoritative servers. */ #ifndef SERVICES_OUTBOUND_LIST_H #define SERVICES_OUTBOUND_LIST_H struct outbound_entry; struct serviced_query; struct module_qstate; /** * The outbound list. This structure is part of the module specific query * state. */ struct outbound_list { /** The linked list of outbound query entries. */ struct outbound_entry* first; }; /** * Outbound list entry. A serviced query sent by a module processing the * query from the qstate. Double linked list to aid removal. */ struct outbound_entry { /** next in list */ struct outbound_entry* next; /** prev in list */ struct outbound_entry* prev; /** The query that was sent out */ struct serviced_query* qsent; /** the module query state that sent it */ struct module_qstate* qstate; }; /** * Init the user allocated outbound list structure * @param list: the list structure. */ void outbound_list_init(struct outbound_list* list); /** * Clear the user owner outbound list structure. * Deletes serviced queries. * @param list: the list structure. It is cleared, but the list struct itself * is callers responsability to delete. */ void outbound_list_clear(struct outbound_list* list); /** * Insert new entry into the list. Caller must allocate the entry with malloc. * qstate and qsent are set by caller. * @param list: the list to add to. * @param e: entry to add, it is only half initialised at call start, fully * initialised at call end. */ void outbound_list_insert(struct outbound_list* list, struct outbound_entry* e); /** * Remove an entry from the list, and deletes it. * Deletes serviced query in the entry. * @param list: the list to remove from. * @param e: the entry to remove. */ void outbound_list_remove(struct outbound_list* list, struct outbound_entry* e); #endif /* SERVICES_OUTBOUND_LIST_H */ unbound-1.13.1/services/outside_network.h0000644000175000017500000007136314010434640020132 0ustar wouterwouter/* * services/outside_network.h - listen to answers from the network * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file has functions to send queries to authoritative servers, * and wait for the pending answer, with timeouts. */ #ifndef OUTSIDE_NETWORK_H #define OUTSIDE_NETWORK_H #include "util/rbtree.h" #include "util/netevent.h" #include "dnstap/dnstap_config.h" struct pending; struct pending_timeout; struct ub_randstate; struct pending_tcp; struct waiting_tcp; struct waiting_udp; struct reuse_tcp; struct infra_cache; struct port_comm; struct port_if; struct sldns_buffer; struct serviced_query; struct dt_env; struct edns_option; struct module_env; struct module_qstate; struct query_info; /** * Send queries to outside servers and wait for answers from servers. * Contains answer-listen sockets. */ struct outside_network { /** Base for select calls */ struct comm_base* base; /** pointer to time in seconds */ time_t* now_secs; /** pointer to time in microseconds */ struct timeval* now_tv; /** buffer shared by UDP connections, since there is only one datagram at any time. */ struct sldns_buffer* udp_buff; /** serviced_callbacks malloc overhead when processing multiple * identical serviced queries to the same server. */ size_t svcd_overhead; /** use x20 bits to encode additional ID random bits */ int use_caps_for_id; /** outside network wants to quit. Stop queued msgs from sent. */ int want_to_quit; /** number of unwanted replies received (for statistics) */ size_t unwanted_replies; /** cumulative total of unwanted replies (for defense) */ size_t unwanted_total; /** threshold when to take defensive action. If 0 then never. */ size_t unwanted_threshold; /** what action to take, called when defensive action is needed */ void (*unwanted_action)(void*); /** user param for action */ void* unwanted_param; /** linked list of available commpoints, unused file descriptors, * for use as outgoing UDP ports. cp.fd=-1 in them. */ struct port_comm* unused_fds; /** if udp is done */ int do_udp; /** if udp is delay-closed (delayed answers do not meet closed port)*/ int delayclose; /** timeout for delayclose */ struct timeval delay_tv; /** if we perform udp-connect, connect() for UDP socket to mitigate * ICMP side channel leakage */ int udp_connect; /** array of outgoing IP4 interfaces */ struct port_if* ip4_ifs; /** number of outgoing IP4 interfaces */ int num_ip4; /** array of outgoing IP6 interfaces */ struct port_if* ip6_ifs; /** number of outgoing IP6 interfaces */ int num_ip6; /** pending udp queries waiting to be sent out, waiting for fd */ struct pending* udp_wait_first; /** last pending udp query in list */ struct pending* udp_wait_last; /** pending udp answers. sorted by id, addr */ rbtree_type* pending; /** serviced queries, sorted by qbuf, addr, dnssec */ rbtree_type* serviced; /** host cache, pointer but not owned by outnet. */ struct infra_cache* infra; /** where to get random numbers */ struct ub_randstate* rnd; /** ssl context to create ssl wrapped TCP with DNS connections */ void* sslctx; /** if SNI will be used for TLS connections */ int tls_use_sni; #ifdef USE_DNSTAP /** dnstap environment */ struct dt_env* dtenv; #endif /** maximum segment size of tcp socket */ int tcp_mss; /** IP_TOS socket option requested on the sockets */ int ip_dscp; /** * Array of tcp pending used for outgoing TCP connections. * Each can be used to establish a TCP connection with a server. * The file descriptors are -1 if they are free, and need to be * opened for the tcp connection. Can be used for ip4 and ip6. */ struct pending_tcp **tcp_conns; /** number of tcp communication points. */ size_t num_tcp; /** number of tcp communication points in use. */ size_t num_tcp_outgoing; /** * tree of still-open and waiting tcp connections for reuse. * can be closed and reopened to get a new tcp connection. * or reused to the same destination again. with timeout to close. * Entries are of type struct reuse_tcp. * The entries are both active and empty connections. */ rbtree_type tcp_reuse; /** max number of tcp_reuse entries we want to keep open */ size_t tcp_reuse_max; /** first and last(oldest) in lru list of reuse connections. * the oldest can be closed to get a new free pending_tcp if needed * The list contains empty connections, that wait for timeout or * a new query that can use the existing connection. */ struct reuse_tcp* tcp_reuse_first, *tcp_reuse_last; /** list of tcp comm points that are free for use */ struct pending_tcp* tcp_free; /** list of tcp queries waiting for a buffer */ struct waiting_tcp* tcp_wait_first; /** last of waiting query list */ struct waiting_tcp* tcp_wait_last; }; /** * Outgoing interface. Ports available and currently used are tracked * per interface */ struct port_if { /** address ready to allocate new socket (except port no). */ struct sockaddr_storage addr; /** length of addr field */ socklen_t addrlen; /** prefix length of network address (in bits), for randomisation. * if 0, no randomisation. */ int pfxlen; #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION /** the available ports array. These are unused. * Only the first total-inuse part is filled. */ int* avail_ports; /** the total number of available ports (size of the array) */ int avail_total; #endif /** array of the commpoints currently in use. * allocated for max number of fds, first part in use. */ struct port_comm** out; /** max number of fds, size of out array */ int maxout; /** number of commpoints (and thus also ports) in use */ int inuse; }; /** * Outgoing commpoint for UDP port. */ struct port_comm { /** next in free list */ struct port_comm* next; /** which port number (when in use) */ int number; /** interface it is used in */ struct port_if* pif; /** index in the out array of the interface */ int index; /** number of outstanding queries on this port */ int num_outstanding; /** UDP commpoint, fd=-1 if not in use */ struct comm_point* cp; }; /** * Reuse TCP connection, still open can be used again. */ struct reuse_tcp { /** rbtree node with links in tcp_reuse tree. key is NULL when not * in tree. Both active and empty connections are in the tree. * key is a pointer to this structure, the members used to compare * are the sockaddr and and then is-ssl bool, and then ptr value is * used in case the same address exists several times in the tree * when there are multiple connections to the same destination to * make the rbtree items unique. */ rbnode_type node; /** the key for the tcp_reuse tree. address of peer, ip4 or ip6, * and port number of peer */ struct sockaddr_storage addr; /** length of addr */ socklen_t addrlen; /** also key for tcp_reuse tree, if ssl is used */ int is_ssl; /** lru chain, so that the oldest can be removed to get a new * connection when all are in (re)use. oldest is last in list. * The lru only contains empty connections waiting for reuse, * the ones with active queries are not on the list because they * do not need to be closed to make space for others. They already * service a query so the close for another query does not help * service a larger number of queries. */ struct reuse_tcp* lru_next, *lru_prev; /** true if the reuse_tcp item is on the lru list with empty items */ int item_on_lru_list; /** the connection to reuse, the fd is non-1 and is open. * the addr and port determine where the connection is going, * and is key to the rbtree. The SSL ptr determines if it is * a TLS connection or a plain TCP connection there. And TLS * or not is also part of the key to the rbtree. * There is a timeout and read event on the fd, to close it. */ struct pending_tcp* pending; /** * The more read again value pointed to by the commpoint * tcp_more_read_again pointer, so that it exists after commpoint * delete */ int cp_more_read_again; /** * The more write again value pointed to by the commpoint * tcp_more_write_again pointer, so that it exists after commpoint * delete */ int cp_more_write_again; /** rbtree with other queries waiting on the connection, by ID number, * of type struct waiting_tcp. It is for looking up received * answers to the structure for callback. And also to see if ID * numbers are unused and can be used for a new query. * The write_wait elements are also in the tree, so that ID numbers * can be looked up also for them. They are bool write_wait_queued. */ rbtree_type tree_by_id; /** list of queries waiting to be written on the channel, * if NULL no queries are waiting to be written and the pending->query * is the query currently serviced. The first is the next in line. * They are also in the tree_by_id. Once written, the are removed * from this list, but stay in the tree. */ struct waiting_tcp* write_wait_first, *write_wait_last; /** the outside network it is part of */ struct outside_network* outnet; }; /** max number of queries on a reuse connection */ #define MAX_REUSE_TCP_QUERIES 200 /** timeout for REUSE entries in milliseconds. */ #define REUSE_TIMEOUT 60000 /** * A query that has an answer pending for it. */ struct pending { /** redblacktree entry, key is the pending struct(id, addr). */ rbnode_type node; /** the ID for the query. int so that a value out of range can * be used to signify a pending that is for certain not present in * the rbtree. (and for which deletion is safe). */ unsigned int id; /** remote address. */ struct sockaddr_storage addr; /** length of addr field in use. */ socklen_t addrlen; /** comm point it was sent on (and reply must come back on). */ struct port_comm* pc; /** timeout event */ struct comm_timer* timer; /** callback for the timeout, error or reply to the message */ comm_point_callback_type* cb; /** callback user argument */ void* cb_arg; /** the outside network it is part of */ struct outside_network* outnet; /** the corresponding serviced_query */ struct serviced_query* sq; /*---- filled if udp pending is waiting -----*/ /** next in waiting list. */ struct pending* next_waiting; /** timeout in msec */ int timeout; /** The query itself, the query packet to send. */ uint8_t* pkt; /** length of query packet. */ size_t pkt_len; }; /** * Pending TCP query to server. */ struct pending_tcp { /** next in list of free tcp comm points, or NULL. */ struct pending_tcp* next_free; /** tcp comm point it was sent on (and reply must come back on). */ struct comm_point* c; /** the query being serviced, NULL if the pending_tcp is unused. */ struct waiting_tcp* query; /** the pre-allocated reuse tcp structure. if ->pending is nonNULL * it is in use and the connection is waiting for reuse. * It is here for memory pre-allocation, and used to make this * pending_tcp wait for reuse. */ struct reuse_tcp reuse; }; /** * Query waiting for TCP buffer. */ struct waiting_tcp { /** * next in waiting list. * if on_tcp_waiting_list==0, this points to the pending_tcp structure. */ struct waiting_tcp* next_waiting; /** if true the item is on the tcp waiting list and next_waiting * is used for that. If false, the next_waiting points to the * pending_tcp */ int on_tcp_waiting_list; /** next and prev in query waiting list for stream connection */ struct waiting_tcp* write_wait_prev, *write_wait_next; /** true if the waiting_tcp structure is on the write_wait queue */ int write_wait_queued; /** entry in reuse.tree_by_id, if key is NULL, not in tree, otherwise, * this struct is key and sorted by ID (from waiting_tcp.id). */ rbnode_type id_node; /** the ID for the query; checked in reply */ uint16_t id; /** timeout event; timer keeps running whether the query is * waiting for a buffer or the tcp reply is pending */ struct comm_timer* timer; /** timeout in msec */ int timeout; /** the outside network it is part of */ struct outside_network* outnet; /** remote address. */ struct sockaddr_storage addr; /** length of addr field in use. */ socklen_t addrlen; /** * The query itself, the query packet to send. * allocated after the waiting_tcp structure. */ uint8_t* pkt; /** length of query packet. */ size_t pkt_len; /** callback for the timeout, error or reply to the message, * or NULL if no user is waiting. the entry uses an ID number. * a query that was written is no longer needed, but the ID number * and a reply will come back and can be ignored if NULL */ comm_point_callback_type* cb; /** callback user argument */ void* cb_arg; /** if it uses ssl upstream */ int ssl_upstream; /** ref to the tls_auth_name from the serviced_query */ char* tls_auth_name; /** the packet was involved in an error, to stop looping errors */ int error_count; }; /** * Callback to party interested in serviced query results. */ struct service_callback { /** next in callback list */ struct service_callback* next; /** callback function */ comm_point_callback_type* cb; /** user argument for callback function */ void* cb_arg; }; /** fallback size for fragmentation for EDNS in IPv4 */ #define EDNS_FRAG_SIZE_IP4 1472 /** fallback size for EDNS in IPv6, fits one fragment with ip6-tunnel-ids */ #define EDNS_FRAG_SIZE_IP6 1232 /** * Query service record. * Contains query and destination. UDP, TCP, EDNS are all tried. * complete with retries and timeouts. A number of interested parties can * receive a callback. */ struct serviced_query { /** The rbtree node, key is this record */ rbnode_type node; /** The query that needs to be answered. Starts with flags u16, * then qdcount, ..., including qname, qtype, qclass. Does not include * EDNS record. */ uint8_t* qbuf; /** length of qbuf. */ size_t qbuflen; /** If an EDNS section is included, the DO/CD bit will be turned on. */ int dnssec; /** We want signatures, or else the answer is likely useless */ int want_dnssec; /** ignore capsforid */ int nocaps; /** tcp upstream used, use tcp, or ssl_upstream for SSL */ int tcp_upstream, ssl_upstream; /** the name of the tls authentication name, eg. 'ns.example.com' * or NULL */ char* tls_auth_name; /** where to send it */ struct sockaddr_storage addr; /** length of addr field in use. */ socklen_t addrlen; /** zone name, uncompressed domain name in wireformat */ uint8_t* zone; /** length of zone name */ size_t zonelen; /** qtype */ int qtype; /** current status */ enum serviced_query_status { /** initial status */ serviced_initial, /** UDP with EDNS sent */ serviced_query_UDP_EDNS, /** UDP without EDNS sent */ serviced_query_UDP, /** TCP with EDNS sent */ serviced_query_TCP_EDNS, /** TCP without EDNS sent */ serviced_query_TCP, /** probe to test noEDNS0 (EDNS gives FORMERRorNOTIMP) */ serviced_query_UDP_EDNS_fallback, /** probe to test TCP noEDNS0 (EDNS gives FORMERRorNOTIMP) */ serviced_query_TCP_EDNS_fallback, /** send UDP query with EDNS1480 (or 1280) */ serviced_query_UDP_EDNS_FRAG } /** variable with current status */ status; /** true if serviced_query is scheduled for deletion already */ int to_be_deleted; /** number of UDP retries */ int retry; /** time last UDP was sent */ struct timeval last_sent_time; /** rtt of last message */ int last_rtt; /** do we know edns probe status already, for UDP_EDNS queries */ int edns_lame_known; /** edns options to use for sending upstream packet */ struct edns_option* opt_list; /** outside network this is part of */ struct outside_network* outnet; /** list of interested parties that need callback on results. */ struct service_callback* cblist; /** the UDP or TCP query that is pending, see status which */ void* pending; /** block size with which to pad encrypted queries (default: 128) */ size_t padding_block_size; }; /** * Create outside_network structure with N udp ports. * @param base: the communication base to use for event handling. * @param bufsize: size for network buffers. * @param num_ports: number of udp ports to open per interface. * @param ifs: interface names (or NULL for default interface). * These interfaces must be able to access all authoritative servers. * @param num_ifs: number of names in array ifs. * @param do_ip4: service IP4. * @param do_ip6: service IP6. * @param num_tcp: number of outgoing tcp buffers to preallocate. * @param dscp: DSCP to use. * @param infra: pointer to infra cached used for serviced queries. * @param rnd: stored to create random numbers for serviced queries. * @param use_caps_for_id: enable to use 0x20 bits to encode id randomness. * @param availports: array of available ports. * @param numavailports: number of available ports in array. * @param unwanted_threshold: when to take defensive action. * @param unwanted_action: the action to take. * @param unwanted_param: user parameter to action. * @param tcp_mss: maximum segment size of tcp socket. * @param do_udp: if udp is done. * @param sslctx: context to create outgoing connections with (if enabled). * @param delayclose: if not 0, udp sockets are delayed before timeout closure. * msec to wait on timeouted udp sockets. * @param tls_use_sni: if SNI is used for TLS connections. * @param dtenv: environment to send dnstap events with (if enabled). * @param udp_connect: if the udp_connect option is enabled. * @return: the new structure (with no pending answers) or NULL on error. */ struct outside_network* outside_network_create(struct comm_base* base, size_t bufsize, size_t num_ports, char** ifs, int num_ifs, int do_ip4, int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra, struct ub_randstate* rnd, int use_caps_for_id, int* availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void (*unwanted_action)(void*), void* unwanted_param, int do_udp, void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv, int udp_connect); /** * Delete outside_network structure. * @param outnet: object to delete. */ void outside_network_delete(struct outside_network* outnet); /** * Prepare for quit. Sends no more queries, even if queued up. * @param outnet: object to prepare for removal */ void outside_network_quit_prepare(struct outside_network* outnet); /** * Send UDP query, create pending answer. * Changes the ID for the query to be random and unique for that destination. * @param sq: serviced query. * @param packet: wireformat query to send to destination. * @param timeout: in milliseconds from now. * @param callback: function to call on error, timeout or reply. * @param callback_arg: user argument for callback function. * @return: NULL on error for malloc or socket. Else the pending query object. */ struct pending* pending_udp_query(struct serviced_query* sq, struct sldns_buffer* packet, int timeout, comm_point_callback_type* callback, void* callback_arg); /** * Send TCP query. May wait for TCP buffer. Selects ID to be random, and * checks id. * @param sq: serviced query. * @param packet: wireformat query to send to destination. copied from. * @param timeout: in milliseconds from now. * Timer starts running now. Timer may expire if all buffers are used, * without any query been sent to the server yet. * @param callback: function to call on error, timeout or reply. * @param callback_arg: user argument for callback function. * @return: false on error for malloc or socket. Else the pending TCP object. */ struct waiting_tcp* pending_tcp_query(struct serviced_query* sq, struct sldns_buffer* packet, int timeout, comm_point_callback_type* callback, void* callback_arg); /** * Delete pending answer. * @param outnet: outside network the pending query is part of. * Internal feature: if outnet is NULL, p is not unlinked from rbtree. * @param p: deleted */ void pending_delete(struct outside_network* outnet, struct pending* p); /** * Perform a serviced query to the authoritative servers. * Duplicate efforts are detected, and EDNS, TCP and UDP retry is performed. * @param outnet: outside network, with rbtree of serviced queries. * @param qinfo: query info. * @param flags: flags u16 (host format), includes opcode, CD bit. * @param dnssec: if set, DO bit is set in EDNS queries. * If the value includes BIT_CD, CD bit is set when in EDNS queries. * If the value includes BIT_DO, DO bit is set when in EDNS queries. * @param want_dnssec: signatures are needed, without EDNS the answer is * likely to be useless. * @param nocaps: ignore use_caps_for_id and use unperturbed qname. * @param tcp_upstream: use TCP for upstream queries. * @param ssl_upstream: use SSL for upstream queries. * @param tls_auth_name: when ssl_upstream is true, use this name to check * the server's peer certificate. * @param addr: to which server to send the query. * @param addrlen: length of addr. * @param zone: name of the zone of the delegation point. wireformat dname. This is the delegation point name for which the server is deemed authoritative. * @param zonelen: length of zone. * @param qstate: module qstate. Mainly for inspecting the available * edns_opts_lists. * @param callback: callback function. * @param callback_arg: user argument to callback function. * @param buff: scratch buffer to create query contents in. Empty on exit. * @param env: the module environment. * @return 0 on error, or pointer to serviced query that is used to answer * this serviced query may be shared with other callbacks as well. */ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, int tcp_upstream, int ssl_upstream, char* tls_auth_name, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct module_qstate* qstate, comm_point_callback_type* callback, void* callback_arg, struct sldns_buffer* buff, struct module_env* env); /** * Remove service query callback. * If that leads to zero callbacks, the query is completely cancelled. * @param sq: serviced query to adjust. * @param cb_arg: callback argument of callback that needs removal. * same as the callback_arg to outnet_serviced_query(). */ void outnet_serviced_query_stop(struct serviced_query* sq, void* cb_arg); /** * Get memory size in use by outside network. * Counts buffers and outstanding query (serviced queries) malloced data. * @param outnet: outside network structure. * @return size in bytes. */ size_t outnet_get_mem(struct outside_network* outnet); /** * Get memory size in use by serviced query while it is servicing callbacks. * This takes into account the pre-deleted status of it; it will be deleted * when the callbacks are done. * @param sq: serviced query. * @return size in bytes. */ size_t serviced_get_mem(struct serviced_query* sq); /** Pick random ID value for a tcp stream, avoids existing IDs. */ uint16_t reuse_tcp_select_id(struct reuse_tcp* reuse, struct outside_network* outnet); /** find element in tree by id */ struct waiting_tcp* reuse_tcp_by_id_find(struct reuse_tcp* reuse, uint16_t id); /** insert element in tree by id */ void reuse_tree_by_id_insert(struct reuse_tcp* reuse, struct waiting_tcp* w); /** delete readwait waiting_tcp elements, deletes the elements in the list */ void reuse_del_readwait(rbtree_type* tree_by_id); /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp); /** * Create udp commpoint suitable for sending packets to the destination. * @param outnet: outside_network with the comm_base it is attached to, * with the outgoing interfaces chosen from, and rnd gen for random. * @param cb: callback function for the commpoint. * @param cb_arg: callback argument for cb. * @param to_addr: intended destination. * @param to_addrlen: length of to_addr. * @return commpoint that you can comm_point_send_udp_msg with, or NULL. */ struct comm_point* outnet_comm_point_for_udp(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen); /** * Create tcp commpoint suitable for communication to the destination. * It also performs connect() to the to_addr. * @param outnet: outside_network with the comm_base it is attached to, * and the tcp_mss. * @param cb: callback function for the commpoint. * @param cb_arg: callback argument for cb. * @param to_addr: intended destination. * @param to_addrlen: length of to_addr. * @param query: initial packet to send writing, in buffer. It is copied * to the commpoint buffer that is created. * @param timeout: timeout for the TCP connection. * timeout in milliseconds, or -1 for no (change to the) timeout. * So seconds*1000. * @param ssl: set to true for TLS. * @param host: hostname for host name verification of TLS (or NULL if no TLS). * @return tcp_out commpoint, or NULL. */ struct comm_point* outnet_comm_point_for_tcp(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen, struct sldns_buffer* query, int timeout, int ssl, char* host); /** * Create http commpoint suitable for communication to the destination. * Creates the http request buffer. It also performs connect() to the to_addr. * @param outnet: outside_network with the comm_base it is attached to, * and the tcp_mss. * @param cb: callback function for the commpoint. * @param cb_arg: callback argument for cb. * @param to_addr: intended destination. * @param to_addrlen: length of to_addr. * @param timeout: timeout for the TCP connection. * timeout in milliseconds, or -1 for no (change to the) timeout. * So seconds*1000. * @param ssl: set to true for https. * @param host: hostname to use for the destination. part of http request. * @param path: pathname to lookup, eg. name of the file on the destination. * @return http_out commpoint, or NULL. */ struct comm_point* outnet_comm_point_for_http(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen, int timeout, int ssl, char* host, char* path); /** connect tcp connection to addr, 0 on failure */ int outnet_tcp_connect(int s, struct sockaddr_storage* addr, socklen_t addrlen); /** callback for incoming udp answers from the network */ int outnet_udp_cb(struct comm_point* c, void* arg, int error, struct comm_reply *reply_info); /** callback for pending tcp connections */ int outnet_tcp_cb(struct comm_point* c, void* arg, int error, struct comm_reply *reply_info); /** callback for udp timeout */ void pending_udp_timer_cb(void *arg); /** callback for udp delay for timeout */ void pending_udp_timer_delay_cb(void *arg); /** callback for outgoing TCP timer event */ void outnet_tcptimer(void* arg); /** callback for serviced query UDP answers */ int serviced_udp_callback(struct comm_point* c, void* arg, int error, struct comm_reply* rep); /** TCP reply or error callback for serviced queries */ int serviced_tcp_callback(struct comm_point* c, void* arg, int error, struct comm_reply* rep); /** compare function of pending rbtree */ int pending_cmp(const void* key1, const void* key2); /** compare function of serviced query rbtree */ int serviced_cmp(const void* key1, const void* key2); /** compare function of reuse_tcp rbtree in outside_network struct */ int reuse_cmp(const void* key1, const void* key2); /** compare function of reuse_tcp tree_by_id rbtree */ int reuse_id_cmp(const void* key1, const void* key2); #endif /* OUTSIDE_NETWORK_H */ unbound-1.13.1/services/rpz.c0000644000175000017500000007156414010434640015516 0ustar wouterwouter/* * services/rpz.c - rpz service * * Copyright (c) 2019, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to enable RPZ service. */ #include "config.h" #include "services/rpz.h" #include "util/config_file.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" #include "util/data/dname.h" #include "util/net_help.h" #include "util/log.h" #include "util/data/dname.h" #include "util/locks.h" #include "util/regional.h" /** string for RPZ action enum */ const char* rpz_action_to_string(enum rpz_action a) { switch(a) { case RPZ_NXDOMAIN_ACTION: return "nxdomain"; case RPZ_NODATA_ACTION: return "nodata"; case RPZ_PASSTHRU_ACTION: return "passthru"; case RPZ_DROP_ACTION: return "drop"; case RPZ_TCP_ONLY_ACTION: return "tcp_only"; case RPZ_INVALID_ACTION: return "invalid"; case RPZ_LOCAL_DATA_ACTION: return "local_data"; case RPZ_DISABLED_ACTION: return "disabled"; case RPZ_CNAME_OVERRIDE_ACTION: return "cname_override"; case RPZ_NO_OVERRIDE_ACTION: return "no_override"; } return "unknown"; } /** RPZ action enum for config string */ static enum rpz_action rpz_config_to_action(char* a) { if(strcmp(a, "nxdomain") == 0) return RPZ_NXDOMAIN_ACTION; else if(strcmp(a, "nodata") == 0) return RPZ_NODATA_ACTION; else if(strcmp(a, "passthru") == 0) return RPZ_PASSTHRU_ACTION; else if(strcmp(a, "drop") == 0) return RPZ_DROP_ACTION; else if(strcmp(a, "tcp_only") == 0) return RPZ_TCP_ONLY_ACTION; else if(strcmp(a, "cname") == 0) return RPZ_CNAME_OVERRIDE_ACTION; else if(strcmp(a, "disabled") == 0) return RPZ_DISABLED_ACTION; return RPZ_INVALID_ACTION; } /** string for RPZ trigger enum */ static const char* rpz_trigger_to_string(enum rpz_trigger r) { switch(r) { case RPZ_QNAME_TRIGGER: return "qname"; case RPZ_CLIENT_IP_TRIGGER: return "client_ip"; case RPZ_RESPONSE_IP_TRIGGER: return "response_ip"; case RPZ_NSDNAME_TRIGGER: return "nsdname"; case RPZ_NSIP_TRIGGER: return "nsip"; case RPZ_INVALID_TRIGGER: return "invalid"; } return "unknown"; } /** * Get the label that is just before the root label. * @param dname: dname to work on * @param maxdnamelen: maximum length of the dname * @return: pointer to TLD label, NULL if not found or invalid dname */ static uint8_t* get_tld_label(uint8_t* dname, size_t maxdnamelen) { uint8_t* prevlab = dname; size_t dnamelen = 0; /* one byte needed for label length */ if(dnamelen+1 > maxdnamelen) return NULL; /* only root label */ if(*dname == 0) return NULL; while(*dname) { dnamelen += ((size_t)*dname)+1; if(dnamelen+1 > maxdnamelen) return NULL; dname = dname+((size_t)*dname)+1; if(*dname != 0) prevlab = dname; } return prevlab; } /** * Classify RPZ action for RR type/rdata * @param rr_type: the RR type * @param rdatawl: RDATA with 2 bytes length * @param rdatalen: the length of rdatawl (including its 2 bytes length) * @return: the RPZ action */ static enum rpz_action rpz_rr_to_action(uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) { char* endptr; uint8_t* rdata; int rdatalabs; uint8_t* tldlab = NULL; switch(rr_type) { case LDNS_RR_TYPE_SOA: case LDNS_RR_TYPE_NS: case LDNS_RR_TYPE_DNAME: /* all DNSSEC-related RRs must be ignored */ case LDNS_RR_TYPE_DNSKEY: case LDNS_RR_TYPE_DS: case LDNS_RR_TYPE_RRSIG: case LDNS_RR_TYPE_NSEC: case LDNS_RR_TYPE_NSEC3: return RPZ_INVALID_ACTION; case LDNS_RR_TYPE_CNAME: break; default: return RPZ_LOCAL_DATA_ACTION; } /* use CNAME target to determine RPZ action */ log_assert(rr_type == LDNS_RR_TYPE_CNAME); if(rdatalen < 3) return RPZ_INVALID_ACTION; rdata = rdatawl + 2; /* 2 bytes of rdata length */ if(dname_valid(rdata, rdatalen-2) != rdatalen-2) return RPZ_INVALID_ACTION; rdatalabs = dname_count_labels(rdata); if(rdatalabs == 1) return RPZ_NXDOMAIN_ACTION; else if(rdatalabs == 2) { if(dname_subdomain_c(rdata, (uint8_t*)&"\001*\000")) return RPZ_NODATA_ACTION; else if(dname_subdomain_c(rdata, (uint8_t*)&"\014rpz-passthru\000")) return RPZ_PASSTHRU_ACTION; else if(dname_subdomain_c(rdata, (uint8_t*)&"\010rpz-drop\000")) return RPZ_DROP_ACTION; else if(dname_subdomain_c(rdata, (uint8_t*)&"\014rpz-tcp-only\000")) return RPZ_TCP_ONLY_ACTION; } /* all other TLDs starting with "rpz-" are invalid */ tldlab = get_tld_label(rdata, rdatalen-2); if(tldlab && dname_lab_startswith(tldlab, "rpz-", &endptr)) return RPZ_INVALID_ACTION; /* no special label found */ return RPZ_LOCAL_DATA_ACTION; } static enum localzone_type rpz_action_to_localzone_type(enum rpz_action a) { switch(a) { case RPZ_NXDOMAIN_ACTION: return local_zone_always_nxdomain; case RPZ_NODATA_ACTION: return local_zone_always_nodata; case RPZ_DROP_ACTION: return local_zone_always_deny; case RPZ_PASSTHRU_ACTION: return local_zone_always_transparent; case RPZ_LOCAL_DATA_ACTION: /* fallthrough */ case RPZ_CNAME_OVERRIDE_ACTION: return local_zone_redirect; case RPZ_INVALID_ACTION: /* fallthrough */ case RPZ_TCP_ONLY_ACTION: /* fallthrough */ default: return local_zone_invalid; } } enum respip_action rpz_action_to_respip_action(enum rpz_action a) { switch(a) { case RPZ_NXDOMAIN_ACTION: return respip_always_nxdomain; case RPZ_NODATA_ACTION: return respip_always_nodata; case RPZ_DROP_ACTION: return respip_always_deny; case RPZ_PASSTHRU_ACTION: return respip_always_transparent; case RPZ_LOCAL_DATA_ACTION: /* fallthrough */ case RPZ_CNAME_OVERRIDE_ACTION: return respip_redirect; case RPZ_INVALID_ACTION: /* fallthrough */ case RPZ_TCP_ONLY_ACTION: /* fallthrough */ default: return respip_invalid; } } static enum rpz_action localzone_type_to_rpz_action(enum localzone_type lzt) { switch(lzt) { case local_zone_always_nxdomain: return RPZ_NXDOMAIN_ACTION; case local_zone_always_nodata: return RPZ_NODATA_ACTION; case local_zone_always_deny: return RPZ_DROP_ACTION; case local_zone_always_transparent: return RPZ_PASSTHRU_ACTION; case local_zone_redirect: return RPZ_LOCAL_DATA_ACTION; case local_zone_invalid: default: return RPZ_INVALID_ACTION; } } enum rpz_action respip_action_to_rpz_action(enum respip_action a) { switch(a) { case respip_always_nxdomain: return RPZ_NXDOMAIN_ACTION; case respip_always_nodata: return RPZ_NODATA_ACTION; case respip_always_deny: return RPZ_DROP_ACTION; case respip_always_transparent: return RPZ_PASSTHRU_ACTION; case respip_redirect: return RPZ_LOCAL_DATA_ACTION; case respip_invalid: default: return RPZ_INVALID_ACTION; } } /** * Get RPZ trigger for dname * @param dname: dname containing RPZ trigger * @param dname_len: length of the dname * @return: RPZ trigger enum */ static enum rpz_trigger rpz_dname_to_trigger(uint8_t* dname, size_t dname_len) { uint8_t* tldlab; char* endptr; if(dname_valid(dname, dname_len) != dname_len) return RPZ_INVALID_TRIGGER; tldlab = get_tld_label(dname, dname_len); if(!tldlab || !dname_lab_startswith(tldlab, "rpz-", &endptr)) return RPZ_QNAME_TRIGGER; if(dname_subdomain_c(tldlab, (uint8_t*)&"\015rpz-client-ip\000")) return RPZ_CLIENT_IP_TRIGGER; else if(dname_subdomain_c(tldlab, (uint8_t*)&"\006rpz-ip\000")) return RPZ_RESPONSE_IP_TRIGGER; else if(dname_subdomain_c(tldlab, (uint8_t*)&"\013rpz-nsdname\000")) return RPZ_NSDNAME_TRIGGER; else if(dname_subdomain_c(tldlab, (uint8_t*)&"\010rpz-nsip\000")) return RPZ_NSIP_TRIGGER; return RPZ_QNAME_TRIGGER; } void rpz_delete(struct rpz* r) { if(!r) return; local_zones_delete(r->local_zones); respip_set_delete(r->respip_set); regional_destroy(r->region); free(r->taglist); free(r->log_name); free(r); } int rpz_clear(struct rpz* r) { /* must hold write lock on auth_zone */ local_zones_delete(r->local_zones); respip_set_delete(r->respip_set); if(!(r->local_zones = local_zones_create())){ return 0; } if(!(r->respip_set = respip_set_create())) { return 0; } return 1; } void rpz_finish_config(struct rpz* r) { lock_rw_wrlock(&r->respip_set->lock); addr_tree_init_parents(&r->respip_set->ip_tree); lock_rw_unlock(&r->respip_set->lock); } /** new rrset containing CNAME override, does not yet contain a dname */ static struct ub_packed_rrset_key* new_cname_override(struct regional* region, uint8_t* ct, size_t ctlen) { struct ub_packed_rrset_key* rrset; struct packed_rrset_data* pd; uint16_t rdlength = htons(ctlen); rrset = (struct ub_packed_rrset_key*)regional_alloc_zero(region, sizeof(*rrset)); if(!rrset) { log_err("out of memory"); return NULL; } rrset->entry.key = rrset; pd = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(*pd)); if(!pd) { log_err("out of memory"); return NULL; } pd->trust = rrset_trust_prim_noglue; pd->security = sec_status_insecure; pd->count = 1; pd->rr_len = regional_alloc_zero(region, sizeof(*pd->rr_len)); pd->rr_ttl = regional_alloc_zero(region, sizeof(*pd->rr_ttl)); pd->rr_data = regional_alloc_zero(region, sizeof(*pd->rr_data)); if(!pd->rr_len || !pd->rr_ttl || !pd->rr_data) { log_err("out of memory"); return NULL; } pd->rr_len[0] = ctlen+2; pd->rr_ttl[0] = 3600; pd->rr_data[0] = regional_alloc_zero(region, 2 /* rdlength */ + ctlen); if(!pd->rr_data[0]) { log_err("out of memory"); return NULL; } memmove(pd->rr_data[0], &rdlength, 2); memmove(pd->rr_data[0]+2, ct, ctlen); rrset->entry.data = pd; rrset->rk.type = htons(LDNS_RR_TYPE_CNAME); rrset->rk.rrset_class = htons(LDNS_RR_CLASS_IN); return rrset; } struct rpz* rpz_create(struct config_auth* p) { struct rpz* r = calloc(1, sizeof(*r)); if(!r) goto err; r->region = regional_create_custom(sizeof(struct regional)); if(!r->region) { goto err; } if(!(r->local_zones = local_zones_create())){ goto err; } if(!(r->respip_set = respip_set_create())) { goto err; } r->taglistlen = p->rpz_taglistlen; r->taglist = memdup(p->rpz_taglist, r->taglistlen); if(p->rpz_action_override) { r->action_override = rpz_config_to_action(p->rpz_action_override); } else r->action_override = RPZ_NO_OVERRIDE_ACTION; if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) { uint8_t nm[LDNS_MAX_DOMAINLEN+1]; size_t nmlen = sizeof(nm); if(!p->rpz_cname) { log_err("RPZ override with cname action found, but no " "rpz-cname-override configured"); goto err; } if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) { log_err("cannot parse RPZ cname override: %s", p->rpz_cname); goto err; } r->cname_override = new_cname_override(r->region, nm, nmlen); if(!r->cname_override) { goto err; } } r->log = p->rpz_log; if(p->rpz_log_name) { if(!(r->log_name = strdup(p->rpz_log_name))) { log_err("malloc failure on RPZ log_name strdup"); goto err; } } return r; err: if(r) { if(r->local_zones) local_zones_delete(r->local_zones); if(r->respip_set) respip_set_delete(r->respip_set); if(r->taglist) free(r->taglist); if(r->region) regional_destroy(r->region); free(r); } return NULL; } /** * Remove RPZ zone name from dname * Copy dname to newdname, without the originlen number of trailing bytes */ static size_t strip_dname_origin(uint8_t* dname, size_t dnamelen, size_t originlen, uint8_t* newdname, size_t maxnewdnamelen) { size_t newdnamelen; if(dnamelen < originlen) return 0; newdnamelen = dnamelen - originlen; if(newdnamelen+1 > maxnewdnamelen) return 0; memmove(newdname, dname, newdnamelen); newdname[newdnamelen] = 0; return newdnamelen + 1; /* + 1 for root label */ } /** Insert RR into RPZ's local-zone */ static void rpz_insert_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) { struct local_zone* z; enum localzone_type tp = local_zone_always_transparent; int dnamelabs = dname_count_labels(dname); char* rrstr; int newzone = 0; if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION) { verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", rpz_action_to_string(a)); free(dname); return; } lock_rw_wrlock(&r->local_zones->lock); /* exact match */ z = local_zones_find(r->local_zones, dname, dnamelen, dnamelabs, LDNS_RR_CLASS_IN); if(z && a != RPZ_LOCAL_DATA_ACTION) { rrstr = sldns_wire2str_rr(rr, rr_len); if(!rrstr) { log_err("malloc error while inserting RPZ qname " "trigger"); free(dname); lock_rw_unlock(&r->local_zones->lock); return; } verbose(VERB_ALGO, "RPZ: skipping duplicate record: '%s'", rrstr); free(rrstr); free(dname); lock_rw_unlock(&r->local_zones->lock); return; } if(!z) { tp = rpz_action_to_localzone_type(a); if(!(z = local_zones_add_zone(r->local_zones, dname, dnamelen, dnamelabs, rrclass, tp))) { log_warn("RPZ create failed"); lock_rw_unlock(&r->local_zones->lock); /* dname will be free'd in failed local_zone_create() */ return; } newzone = 1; } if(a == RPZ_LOCAL_DATA_ACTION) { rrstr = sldns_wire2str_rr(rr, rr_len); if(!rrstr) { log_err("malloc error while inserting RPZ qname " "trigger"); free(dname); lock_rw_unlock(&r->local_zones->lock); return; } lock_rw_wrlock(&z->lock); local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype, rrclass, ttl, rdata, rdata_len, rrstr); lock_rw_unlock(&z->lock); free(rrstr); } if(!newzone) free(dname); lock_rw_unlock(&r->local_zones->lock); return; } /** Insert RR into RPZ's respip_set */ static int rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, enum rpz_action a, uint16_t rrtype, uint16_t rrclass, uint32_t ttl, uint8_t* rdata, size_t rdata_len, uint8_t* rr, size_t rr_len) { struct resp_addr* node; struct sockaddr_storage addr; socklen_t addrlen; int net, af; char* rrstr; enum respip_action respa = rpz_action_to_respip_action(a); if(a == RPZ_TCP_ONLY_ACTION || a == RPZ_INVALID_ACTION || respa == respip_invalid) { verbose(VERB_ALGO, "RPZ: skipping unsupported action: %s", rpz_action_to_string(a)); return 0; } if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) return 0; lock_rw_wrlock(&r->respip_set->lock); rrstr = sldns_wire2str_rr(rr, rr_len); if(!rrstr) { log_err("malloc error while inserting RPZ respip trigger"); lock_rw_unlock(&r->respip_set->lock); return 0; } if(!(node=respip_sockaddr_find_or_create(r->respip_set, &addr, addrlen, net, 1, rrstr))) { lock_rw_unlock(&r->respip_set->lock); free(rrstr); return 0; } lock_rw_wrlock(&node->lock); lock_rw_unlock(&r->respip_set->lock); node->action = respa; if(a == RPZ_LOCAL_DATA_ACTION) { respip_enter_rr(r->respip_set->region, node, rrtype, rrclass, ttl, rdata, rdata_len, rrstr, ""); } lock_rw_unlock(&node->lock); free(rrstr); return 1; } int rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl, uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len) { size_t policydnamelen; /* name is free'd in local_zone delete */ enum rpz_trigger t; enum rpz_action a; uint8_t* policydname; if(!dname_subdomain_c(dname, azname)) { char* dname_str = sldns_wire2str_dname(dname, dnamelen); char* azname_str = sldns_wire2str_dname(azname, aznamelen); if(dname_str && azname_str) { log_err("RPZ: name of record (%s) to insert into RPZ is not a " "subdomain of the configured name of the RPZ zone (%s)", dname_str, azname_str); } else { log_err("RPZ: name of record to insert into RPZ is not a " "subdomain of the configured name of the RPZ zone"); } free(dname_str); free(azname_str); return 0; } log_assert(dnamelen >= aznamelen); if(!(policydname = calloc(1, (dnamelen-aznamelen)+1))) { log_err("malloc error while inserting RPZ RR"); return 0; } a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, policydname, (dnamelen-aznamelen)+1))) { free(policydname); return 0; } t = rpz_dname_to_trigger(policydname, policydnamelen); if(t == RPZ_INVALID_TRIGGER) { free(policydname); verbose(VERB_ALGO, "RPZ: skipping invalid trigger"); return 1; } if(t == RPZ_QNAME_TRIGGER) { rpz_insert_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, rr_len); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { rpz_insert_response_ip_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rr_ttl, rdatawl, rdatalen, rr, rr_len); free(policydname); } else { free(policydname); verbose(VERB_ALGO, "RPZ: skipping unsupported trigger: %s", rpz_trigger_to_string(t)); } return 1; } /** * Find RPZ local-zone by qname. * @param r: rpz containing local-zone tree * @param qname: qname * @param qname_len: length of qname * @param qclass: qclass * @param only_exact: if 1 only excact (non wildcard) matches are returned * @param wr: get write lock for local-zone if 1, read lock if 0 * @param zones_keep_lock: if set do not release the r->local_zones lock, this * makes the caller of this function responsible for releasing the lock. * @return: NULL or local-zone holding rd or wr lock */ static struct local_zone* rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass, int only_exact, int wr, int zones_keep_lock) { uint8_t* ce; size_t ce_len; int ce_labs; uint8_t wc[LDNS_MAX_DOMAINLEN+1]; int exact; struct local_zone* z = NULL; if(wr) { lock_rw_wrlock(&r->local_zones->lock); } else { lock_rw_rdlock(&r->local_zones->lock); } z = local_zones_find_le(r->local_zones, qname, qname_len, dname_count_labels(qname), LDNS_RR_CLASS_IN, &exact); if(!z || (only_exact && !exact)) { lock_rw_unlock(&r->local_zones->lock); return NULL; } if(wr) { lock_rw_wrlock(&z->lock); } else { lock_rw_rdlock(&z->lock); } if(!zones_keep_lock) { lock_rw_unlock(&r->local_zones->lock); } if(exact) return z; /* No exact match found, lookup wildcard. closest encloser must * be the shared parent between the qname and the best local * zone match, append '*' to that and do another lookup. */ ce = dname_get_shared_topdomain(z->name, qname); if(!ce /* should not happen */ || !*ce /* root */) { lock_rw_unlock(&z->lock); if(zones_keep_lock) { lock_rw_unlock(&r->local_zones->lock); } return NULL; } ce_labs = dname_count_size_labels(ce, &ce_len); if(ce_len+2 > sizeof(wc)) { lock_rw_unlock(&z->lock); if(zones_keep_lock) { lock_rw_unlock(&r->local_zones->lock); } return NULL; } wc[0] = 1; /* length of wildcard label */ wc[1] = (uint8_t)'*'; /* wildcard label */ memmove(wc+2, ce, ce_len); lock_rw_unlock(&z->lock); if(!zones_keep_lock) { if(wr) { lock_rw_wrlock(&r->local_zones->lock); } else { lock_rw_rdlock(&r->local_zones->lock); } } z = local_zones_find_le(r->local_zones, wc, ce_len+2, ce_labs+1, qclass, &exact); if(!z || !exact) { lock_rw_unlock(&r->local_zones->lock); return NULL; } if(wr) { lock_rw_wrlock(&z->lock); } else { lock_rw_rdlock(&z->lock); } if(!zones_keep_lock) { lock_rw_unlock(&r->local_zones->lock); } return z; } /** * Remove RR from RPZ's local-data * @param z: local-zone for RPZ, holding write lock * @param policydname: dname of RR to remove * @param policydnamelen: lenth of policydname * @param rr_type: RR type of RR to remove * @param rdata: rdata of RR to remove * @param rdatalen: length of rdata * @return: 1 if zone must be removed after RR deletion */ static int rpz_data_delete_rr(struct local_zone* z, uint8_t* policydname, size_t policydnamelen, uint16_t rr_type, uint8_t* rdata, size_t rdatalen) { struct local_data* ld; struct packed_rrset_data* d; size_t index; ld = local_zone_find_data(z, policydname, policydnamelen, dname_count_labels(policydname)); if(ld) { struct local_rrset* prev=NULL, *p=ld->rrsets; while(p && ntohs(p->rrset->rk.type) != rr_type) { prev = p; p = p->next; } if(!p) return 0; d = (struct packed_rrset_data*)p->rrset->entry.data; if(packed_rrset_find_rr(d, rdata, rdatalen, &index)) { if(d->count == 1) { /* no memory recycling for zone deletions ... */ if(prev) prev->next = p->next; else ld->rrsets = p->next; } if(d->count > 1) { if(!local_rrset_remove_rr(d, index)) return 0; } } } if(ld && ld->rrsets) return 0; return 1; } /** * Remove RR from RPZ's respip set * @param raddr: respip node * @param rr_type: RR type of RR to remove * @param rdata: rdata of RR to remove * @param rdatalen: length of rdata * @return: 1 if zone must be removed after RR deletion */ static int rpz_rrset_delete_rr(struct resp_addr* raddr, uint16_t rr_type, uint8_t* rdata, size_t rdatalen) { size_t index; struct packed_rrset_data* d; if(!raddr->data) return 1; d = raddr->data->entry.data; if(ntohs(raddr->data->rk.type) != rr_type) { return 0; } if(packed_rrset_find_rr(d, rdata, rdatalen, &index)) { if(d->count == 1) { /* regional alloc'd */ raddr->data->entry.data = NULL; raddr->data = NULL; return 1; } if(d->count > 1) { if(!local_rrset_remove_rr(d, index)) return 0; } } return 0; } /** Remove RR from RPZ's local-zone */ static void rpz_remove_qname_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, enum rpz_action a, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, size_t rdatalen) { struct local_zone* z; int delete_zone = 1; z = rpz_find_zone(r, dname, dnamelen, rr_class, 1 /* only exact */, 1 /* wr lock */, 1 /* keep lock*/); if(!z) { verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " "RPZ domain not found"); return; } if(a == RPZ_LOCAL_DATA_ACTION) delete_zone = rpz_data_delete_rr(z, dname, dnamelen, rr_type, rdatawl, rdatalen); else if(a != localzone_type_to_rpz_action(z->type)) { lock_rw_unlock(&z->lock); lock_rw_unlock(&r->local_zones->lock); return; } lock_rw_unlock(&z->lock); if(delete_zone) { local_zones_del_zone(r->local_zones, z); } lock_rw_unlock(&r->local_zones->lock); return; } static void rpz_remove_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen, enum rpz_action a, uint16_t rr_type, uint8_t* rdatawl, size_t rdatalen) { struct resp_addr* node; struct sockaddr_storage addr; socklen_t addrlen; int net, af; int delete_respip = 1; if(!netblockdnametoaddr(dname, dnamelen, &addr, &addrlen, &net, &af)) return; lock_rw_wrlock(&r->respip_set->lock); if(!(node = (struct resp_addr*)addr_tree_find( &r->respip_set->ip_tree, &addr, addrlen, net))) { verbose(VERB_ALGO, "RPZ: cannot remove RR from IXFR, " "RPZ domain not found"); lock_rw_unlock(&r->respip_set->lock); return; } lock_rw_wrlock(&node->lock); if(a == RPZ_LOCAL_DATA_ACTION) { /* remove RR, signal whether RR can be removed */ delete_respip = rpz_rrset_delete_rr(node, rr_type, rdatawl, rdatalen); } lock_rw_unlock(&node->lock); if(delete_respip) respip_sockaddr_delete(r->respip_set, node); lock_rw_unlock(&r->respip_set->lock); } void rpz_remove_rr(struct rpz* r, size_t aznamelen, uint8_t* dname, size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint8_t* rdatawl, size_t rdatalen) { size_t policydnamelen; enum rpz_trigger t; enum rpz_action a; uint8_t* policydname; if(!(policydname = calloc(1, LDNS_MAX_DOMAINLEN + 1))) return; a = rpz_rr_to_action(rr_type, rdatawl, rdatalen); if(a == RPZ_INVALID_ACTION) { free(policydname); return; } if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen, policydname, LDNS_MAX_DOMAINLEN + 1))) { free(policydname); return; } t = rpz_dname_to_trigger(policydname, policydnamelen); if(t == RPZ_QNAME_TRIGGER) { rpz_remove_qname_trigger(r, policydname, policydnamelen, a, rr_type, rr_class, rdatawl, rdatalen); } else if(t == RPZ_RESPONSE_IP_TRIGGER) { rpz_remove_response_ip_trigger(r, policydname, policydnamelen, a, rr_type, rdatawl, rdatalen); } free(policydname); } /** print log information for an applied RPZ policy. Based on local-zone's * lz_inform_print(). */ static void log_rpz_apply(uint8_t* dname, enum rpz_action a, struct query_info* qinfo, struct comm_reply* repinfo, char* log_name) { char ip[128], txt[512]; char dnamestr[LDNS_MAX_DOMAINLEN+1]; uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); dname_str(dname, dnamestr); addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); if(log_name) snprintf(txt, sizeof(txt), "RPZ applied [%s] %s %s %s@%u", log_name, dnamestr, rpz_action_to_string(a), ip, (unsigned)port); else snprintf(txt, sizeof(txt), "RPZ applied %s %s %s@%u", dnamestr, rpz_action_to_string(a), ip, (unsigned)port); log_nametypeclass(0, txt, qinfo->qname, qinfo->qtype, qinfo->qclass); } int rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, sldns_buffer* buf, struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist, size_t taglen, struct ub_server_stats* stats) { struct rpz* r = NULL; struct auth_zone* a; int ret; enum localzone_type lzt; struct local_zone* z = NULL; struct local_data* ld = NULL; lock_rw_rdlock(&az->rpz_lock); for(a = az->rpz_first; a; a = a->rpz_az_next) { lock_rw_rdlock(&a->lock); r = a->rpz; if(!r->disabled && (!r->taglist || taglist_intersect(r->taglist, r->taglistlen, taglist, taglen))) { z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len, qinfo->qclass, 0, 0, 0); if(z && r->action_override == RPZ_DISABLED_ACTION) { if(r->log) log_rpz_apply(z->name, r->action_override, qinfo, repinfo, r->log_name); /* TODO only register stats when stats_extended? * */ stats->rpz_action[r->action_override]++; lock_rw_unlock(&z->lock); z = NULL; } if(z) break; } lock_rw_unlock(&a->lock); /* not found in this auth_zone */ } lock_rw_unlock(&az->rpz_lock); if(!z) return 0; /* not holding auth_zone.lock anymore */ log_assert(r); if(r->action_override == RPZ_NO_OVERRIDE_ACTION) lzt = z->type; else lzt = rpz_action_to_localzone_type(r->action_override); if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) { qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset)); if(!qinfo->local_alias) { lock_rw_unlock(&z->lock); lock_rw_unlock(&a->lock); return 0; /* out of memory */ } qinfo->local_alias->rrset = regional_alloc_init(temp, r->cname_override, sizeof(*r->cname_override)); if(!qinfo->local_alias->rrset) { lock_rw_unlock(&z->lock); lock_rw_unlock(&a->lock); return 0; /* out of memory */ } qinfo->local_alias->rrset->rk.dname = qinfo->qname; qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; if(r->log) log_rpz_apply(z->name, RPZ_CNAME_OVERRIDE_ACTION, qinfo, repinfo, r->log_name); stats->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; lock_rw_unlock(&z->lock); lock_rw_unlock(&a->lock); return 0; } if(lzt == local_zone_redirect && local_data_answer(z, env, qinfo, edns, repinfo, buf, temp, dname_count_labels(qinfo->qname), &ld, lzt, -1, NULL, 0, NULL, 0)) { if(r->log) log_rpz_apply(z->name, localzone_type_to_rpz_action(lzt), qinfo, repinfo, r->log_name); stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); lock_rw_unlock(&a->lock); return !qinfo->local_alias; } ret = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, 0 /* no local data used */, lzt); if(r->log) log_rpz_apply(z->name, localzone_type_to_rpz_action(lzt), qinfo, repinfo, r->log_name); stats->rpz_action[localzone_type_to_rpz_action(lzt)]++; lock_rw_unlock(&z->lock); lock_rw_unlock(&a->lock); return ret; } void rpz_enable(struct rpz* r) { if(!r) return; r->disabled = 0; } void rpz_disable(struct rpz* r) { if(!r) return; r->disabled = 1; } unbound-1.13.1/services/localzone.h0000644000175000017500000005375214010434640016675 0ustar wouterwouter/* * services/localzone.h - local zones authority service. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to enable local zone authority service. */ #ifndef SERVICES_LOCALZONE_H #define SERVICES_LOCALZONE_H #include "util/rbtree.h" #include "util/locks.h" #include "util/storage/dnstree.h" #include "util/module.h" #include "services/view.h" #include "sldns/sbuffer.h" struct packed_rrset_data; struct ub_packed_rrset_key; struct regional; struct config_file; struct edns_data; struct query_info; struct sldns_buffer; struct comm_reply; struct config_strlist; /** * Local zone type * This type determines processing for queries that did not match * local-data directly. */ enum localzone_type { /** unset type, used for unset tag_action elements */ local_zone_unset = 0, /** drop query */ local_zone_deny, /** answer with error */ local_zone_refuse, /** answer nxdomain or nodata */ local_zone_static, /** resolve normally */ local_zone_transparent, /** do not block types at localdata names */ local_zone_typetransparent, /** answer with data at zone apex */ local_zone_redirect, /** remove default AS112 blocking contents for zone * nodefault is used in config not during service. */ local_zone_nodefault, /** log client address, but no block (transparent) */ local_zone_inform, /** log client address, and block (drop) */ local_zone_inform_deny, /** log client address, and direct */ local_zone_inform_redirect, /** resolve normally, even when there is local data */ local_zone_always_transparent, /** answer with error, even when there is local data */ local_zone_always_refuse, /** answer with nxdomain, even when there is local data */ local_zone_always_nxdomain, /** answer with noerror/nodata, even when there is local data */ local_zone_always_nodata, /** drop query, even when there is local data */ local_zone_always_deny, /** answer with 0.0.0.0 or ::0 or noerror/nodata, even when there is * local data */ local_zone_always_null, /** answer not from the view, but global or no-answer */ local_zone_noview, /** Invalid type, cannot be used to generate answer */ local_zone_invalid }; /** * Authoritative local zones storage, shared. */ struct local_zones { /** lock on the localzone tree */ lock_rw_type lock; /** rbtree of struct local_zone */ rbtree_type ztree; }; /** * Local zone. A locally served authoritative zone. */ struct local_zone { /** rbtree node, key is name and class */ rbnode_type node; /** parent zone, if any. */ struct local_zone* parent; /** zone name, in uncompressed wireformat */ uint8_t* name; /** length of zone name */ size_t namelen; /** number of labels in zone name */ int namelabs; /** the class of this zone. * uses 'dclass' to not conflict with c++ keyword class. */ uint16_t dclass; /** lock on the data in the structure * For the node, parent, name, namelen, namelabs, dclass, you * need to also hold the zones_tree lock to change them (or to * delete this zone) */ lock_rw_type lock; /** how to process zone */ enum localzone_type type; /** tag bitlist */ uint8_t* taglist; /** length of the taglist (in bytes) */ size_t taglen; /** netblock addr_tree with struct local_zone_override information * or NULL if there are no override elements */ struct rbtree_type* override_tree; /** in this region the zone's data is allocated. * the struct local_zone itself is malloced. */ struct regional* region; /** local data for this zone * rbtree of struct local_data */ rbtree_type data; /** if data contains zone apex SOA data, this is a ptr to it. */ struct ub_packed_rrset_key* soa; /** if data contains zone apex SOA data, this is a prt to an * artificial negative SOA rrset (TTL is the minimum of the TTL and the * SOA.MINIMUM). */ struct ub_packed_rrset_key* soa_negative; }; /** * Local data. One domain name, and the RRs to go with it. */ struct local_data { /** rbtree node, key is name only */ rbnode_type node; /** domain name */ uint8_t* name; /** length of name */ size_t namelen; /** number of labels in name */ int namelabs; /** the data rrsets, with different types, linked list. * If this list is NULL, the node is an empty non-terminal. */ struct local_rrset* rrsets; }; /** * A local data RRset */ struct local_rrset { /** next in list */ struct local_rrset* next; /** RRset data item */ struct ub_packed_rrset_key* rrset; }; /** * Local zone override information */ struct local_zone_override { /** node in addrtree */ struct addr_tree_node node; /** override for local zone type */ enum localzone_type type; }; /** * Create local zones storage * @return new struct or NULL on error. */ struct local_zones* local_zones_create(void); /** * Delete local zones storage * @param zones: to delete. */ void local_zones_delete(struct local_zones* zones); /** * Apply config settings; setup the local authoritative data. * Takes care of locking. * @param zones: is set up. * @param cfg: config data. * @return false on error. */ int local_zones_apply_cfg(struct local_zones* zones, struct config_file* cfg); /** * Compare two local_zone entries in rbtree. Sort hierarchical but not * canonical * @param z1: zone 1 * @param z2: zone 2 * @return: -1, 0, +1 comparison value. */ int local_zone_cmp(const void* z1, const void* z2); /** * Compare two local_data entries in rbtree. Sort canonical. * @param d1: data 1 * @param d2: data 2 * @return: -1, 0, +1 comparison value. */ int local_data_cmp(const void* d1, const void* d2); /** * Delete one zone * @param z: to delete. */ void local_zone_delete(struct local_zone* z); /** * Lookup zone that contains the given name, class and taglist. * User must lock the tree or result zone. * @param zones: the zones tree * @param name: dname to lookup * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to lookup. * @param dtype: type to lookup, if type DS a zone higher is used for zonecuts. * @param taglist: taglist to lookup. * @param taglen: lenth of taglist. * @param ignoretags: lookup zone by name and class, regardless the * local-zone's tags. * @return closest local_zone or NULL if no covering zone is found. */ struct local_zone* local_zones_tags_lookup(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype, uint8_t* taglist, size_t taglen, int ignoretags); /** * Lookup zone that contains the given name, class. * User must lock the tree or result zone. * @param zones: the zones tree * @param name: dname to lookup * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to lookup. * @param dtype: type of the record, if type DS then a zone higher up is found * pass 0 to just plain find a zone for a name. * @return closest local_zone or NULL if no covering zone is found. */ struct local_zone* local_zones_lookup(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype); /** * Debug helper. Print all zones * Takes care of locking. * @param zones: the zones tree */ void local_zones_print(struct local_zones* zones); /** * Answer authoritatively for local zones. * Takes care of locking. * @param zones: the stored zones (shared, read only). * @param env: the module environment. * @param qinfo: query info (parsed). * @param edns: edns info (parsed). * @param buf: buffer with query ID and flags, also for reply. * @param temp: temporary storage region. * @param repinfo: source address for checks. may be NULL. * @param taglist: taglist for checks. May be NULL. * @param taglen: length of the taglist. * @param tagactions: local zone actions for tags. May be NULL. * @param tagactionssize: length of the tagactions. * @param tag_datas: array per tag of strlist with rdata strings. or NULL. * @param tag_datas_size: size of tag_datas array. * @param tagname: array of tag name strings (for debug output). * @param num_tags: number of items in tagname array. * @param view: answer using this view. May be NULL. * @return true if answer is in buffer. false if query is not answered * by authority data. If the reply should be dropped altogether, the return * value is true, but the buffer is cleared (empty). * It can also return true if a non-exact alias answer is found. In this * case qinfo->local_alias points to the corresponding alias RRset but the * answer is NOT encoded in buffer. It's the caller's responsibility to * complete the alias chain (if needed) and encode the final set of answer. * Data pointed to by qinfo->local_alias is allocated in 'temp' or refers to * configuration data. So the caller will need to make a deep copy of it * if it needs to keep it beyond the lifetime of 'temp' or a dynamic update * to local zone data. */ int local_zones_answer(struct local_zones* zones, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct sldns_buffer* buf, struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist, size_t taglen, uint8_t* tagactions, size_t tagactionssize, struct config_strlist** tag_datas, size_t tag_datas_size, char** tagname, int num_tags, struct view* view); /** * Answer using the local zone only (not local data used). * @param z: zone for query. * @param env: module environment. * @param qinfo: query. * @param edns: edns from query. * @param repinfo: source address for checks. may be NULL. * @param buf: buffer for answer. * @param temp: temp region for encoding. * @param ld: local data, if NULL, no such name exists in localdata. * @param lz_type: type of the local zone. * @return 1 if a reply is to be sent, 0 if not. */ int local_zones_zone_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, struct local_data* ld, enum localzone_type lz_type); /** * Parse the string into localzone type. * * @param str: string to parse * @param t: local zone type returned here. * @return 0 on parse error. */ int local_zone_str2type(const char* str, enum localzone_type* t); /** * Print localzone type to a string. Pointer to a constant string. * * @param t: local zone type. * @return constant string that describes type. */ const char* local_zone_type2str(enum localzone_type t); /** * Find zone that with exactly given name, class. * User must lock the tree or result zone. * @param zones: the zones tree * @param name: dname to lookup * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to lookup. * @return the exact local_zone or NULL. */ struct local_zone* local_zones_find(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass); /** * Find zone that with exactly or smaller name/class * User must lock the tree or result zone. * @param zones: the zones tree * @param name: dname to lookup * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to lookup. * @param exact: 1 on return is this is an exact match. * @return the exact or smaller local_zone or NULL. */ struct local_zone* local_zones_find_le(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, int* exact); /** * Add a new zone. Caller must hold the zones lock. * Adjusts the other zones as well (parent pointers) after insertion. * The zone must NOT exist (returns NULL and logs error). * @param zones: the zones tree * @param name: dname to add * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to add. * @param tp: type. * @return local_zone or NULL on error, caller must printout memory error. */ struct local_zone* local_zones_add_zone(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass, enum localzone_type tp); /** * Delete a zone. Caller must hold the zones lock. * Adjusts the other zones as well (parent pointers) after insertion. * @param zones: the zones tree * @param zone: the zone to delete from tree. Also deletes zone from memory. */ void local_zones_del_zone(struct local_zones* zones, struct local_zone* zone); /** * Add RR data into the localzone data. * Looks up the zone, if no covering zone, a transparent zone with the * name of the RR is created. * @param zones: the zones tree. Not locked by caller. * @param rr: string with on RR. * @return false on failure. */ int local_zones_add_RR(struct local_zones* zones, const char* rr); /** * Remove data from domain name in the tree. * All types are removed. No effect if zone or name does not exist. * @param zones: zones tree. * @param name: dname to remove * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to remove. */ void local_zones_del_data(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass); /** * Form wireformat from text format domain name. * @param str: the domain name in text "www.example.com" * @param res: resulting wireformat is stored here with malloc. * @param len: length of resulting wireformat. * @param labs: number of labels in resulting wireformat. * @return false on error, syntax or memory. Also logged. */ int parse_dname(const char* str, uint8_t** res, size_t* len, int* labs); /** * Find local data tag string match for the given type (in qinfo) in the list. * If found, 'r' will be filled with corresponding rrset information. * @param qinfo: contains name, type, and class for the data * @param list: stores local tag data to be searched * @param r: rrset key to be filled for matched data * @param temp: region to allocate rrset in 'r' * @return 1 if a match is found and rrset is built; otherwise 0 including * errors. */ int local_data_find_tag_datas(const struct query_info* qinfo, struct config_strlist* list, struct ub_packed_rrset_key* r, struct regional* temp); /** * See if two sets of tag lists (in the form of bitmap) have the same tag that * has an action. If so, '*tag' will be set to the found tag index, and the * corresponding action will be returned in the form of local zone type. * Otherwise the passed type (lzt) will be returned as the default action. * Pointers except tagactions must not be NULL. * @param taglist: 1st list of tags * @param taglen: size of taglist in bytes * @param taglist2: 2nd list of tags * @param taglen2: size of taglist2 in bytes * @param tagactions: local data actions for tags. May be NULL. * @param tagactionssize: length of the tagactions. * @param lzt: default action (local zone type) if no tag action is found. * @param tag: see above. * @param tagname: array of tag name strings (for debug output). * @param num_tags: number of items in tagname array. * @return found tag action or the default action. */ enum localzone_type local_data_find_tag_action(const uint8_t* taglist, size_t taglen, const uint8_t* taglist2, size_t taglen2, const uint8_t* tagactions, size_t tagactionssize, enum localzone_type lzt, int* tag, char* const* tagname, int num_tags); /** * Enter defaults to local zone. * @param zones: to add defaults to * @param cfg: containing list of zones to exclude from default set. * @return 1 on success; 0 otherwise. */ int local_zone_enter_defaults(struct local_zones* zones, struct config_file* cfg); /** * Parses resource record string into wire format, also returning its field values. * @param str: input resource record * @param nm: domain name field * @param type: record type field * @param dclass: record class field * @param ttl: ttl field * @param rr: buffer for the parsed rr in wire format * @param len: buffer length * @param rdata: rdata field * @param rdata_len: rdata field length * @return 1 on success; 0 otherwise. */ int rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type, uint16_t* dclass, time_t* ttl, uint8_t* rr, size_t len, uint8_t** rdata, size_t* rdata_len); /** * Insert specified rdata into the specified resource record. * @param region: allocator * @param pd: data portion of the destination resource record * @param rdata: source rdata * @param rdata_len: source rdata length * @param ttl: time to live * @param rrstr: resource record in text form (for logging) * @return 1 on success; 0 otherwise. */ int rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd, uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr); /** * Remove RR from rrset that is created using localzone's rrset_insert_rr. * @param pd: the RRset containing the RR to remove * @param index: index of RR to remove * @return: 1 on success; 0 otherwise. */ int local_rrset_remove_rr(struct packed_rrset_data* pd, size_t index); /** * Valid response ip actions for the IP-response-driven-action feature; * defined here instead of in the respip module to enable sharing of enum * values with the localzone_type enum. * Note that these values except 'none' are the same as localzone types of * the 'same semantics'. It's intentional as we use these values via * access-control-tags, which can be shared for both response ip actions and * local zones. */ enum respip_action { /** no respip action */ respip_none = local_zone_unset, /** don't answer */ respip_deny = local_zone_deny, /** redirect as per provided data */ respip_redirect = local_zone_redirect, /** log query source and answer query */ respip_inform = local_zone_inform, /** log query source and don't answer query */ respip_inform_deny = local_zone_inform_deny, /** log query source and redirect */ respip_inform_redirect = local_zone_inform_redirect, /** resolve normally, even when there is response-ip data */ respip_always_transparent = local_zone_always_transparent, /** answer with 'refused' response */ respip_always_refuse = local_zone_always_refuse, /** answer with 'no such domain' response */ respip_always_nxdomain = local_zone_always_nxdomain, /** answer with nodata response */ respip_always_nodata = local_zone_always_nodata, /** answer with nodata response */ respip_always_deny = local_zone_always_deny, /* The rest of the values are only possible as * access-control-tag-action */ /** serves response data (if any), else, drops queries. */ respip_refuse = local_zone_refuse, /** serves response data, else, nodata answer. */ respip_static = local_zone_static, /** gives response data (if any), else nodata answer. */ respip_transparent = local_zone_transparent, /** gives response data (if any), else nodata answer. */ respip_typetransparent = local_zone_typetransparent, /** type invalid */ respip_invalid = local_zone_invalid, }; /** * Get local data from local zone and encode answer. * @param z: local zone to use * @param env: module env * @param qinfo: qinfo * @param edns: edns data, for message encoding * @param repinfo: reply info, for message encoding * @param buf: commpoint buffer * @param temp: scratchpad region * @param labs: number of labels in qname * @param ldp: where to store local data * @param lz_type: type of local zone * @param tag: matching tag index * @param tag_datas: alc specific tag data list * @param tag_datas_size: size of tag_datas * @param tagname: list of names of tags, for logging purpose * @param num_tags: number of tags * @return 1 on success */ int local_data_answer(struct local_zone* z, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* buf, struct regional* temp, int labs, struct local_data** ldp, enum localzone_type lz_type, int tag, struct config_strlist** tag_datas, size_t tag_datas_size, char** tagname, int num_tags); /** * Add RR to local zone. * @param z: local zone to add RR to * @param nm: dname of RR * @param nmlen: length of nm * @param nmlabs: number of labels of nm * @param rrtype: RR type * @param rrclass: RR class * @param ttl: TTL of RR to add * @param rdata: RDATA of RR to add * @param rdata_len: length of rdata * @param rrstr: RR in string format, for logging * @return: 1 on success */ int local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs, uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, size_t rdata_len, const char* rrstr); /** * Find a data node by exact name for a local zone * @param z: local_zone containing data tree * @param nm: name of local-data element to find * @param nmlen: length of nm * @param nmlabs: labs of nm * @return local_data on exact match, NULL otherwise. */ struct local_data* local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs); #endif /* SERVICES_LOCALZONE_H */ unbound-1.13.1/services/mesh.c0000644000175000017500000017512314010434640015633 0ustar wouterwouter/* * services/mesh.c - deal with mesh of query states and handle events for that. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist in dealing with a mesh of * query states. This mesh is supposed to be thread-specific. * It consists of query states (per qname, qtype, qclass) and connections * between query states and the super and subquery states, and replies to * send back to clients. */ #include "config.h" #include "services/mesh.h" #include "services/outbound_list.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" #include "util/log.h" #include "util/net_help.h" #include "util/module.h" #include "util/regional.h" #include "util/data/msgencode.h" #include "util/timehist.h" #include "util/fptr_wlist.h" #include "util/alloc.h" #include "util/config_file.h" #include "util/edns.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "services/localzone.h" #include "util/data/dname.h" #include "respip/respip.h" #include "services/listen_dnsport.h" /** subtract timers and the values do not overflow or become negative */ static void timeval_subtract(struct timeval* d, const struct timeval* end, const struct timeval* start) { #ifndef S_SPLINT_S time_t end_usec = end->tv_usec; d->tv_sec = end->tv_sec - start->tv_sec; if(end_usec < start->tv_usec) { end_usec += 1000000; d->tv_sec--; } d->tv_usec = end_usec - start->tv_usec; #endif } /** add timers and the values do not overflow or become negative */ static void timeval_add(struct timeval* d, const struct timeval* add) { #ifndef S_SPLINT_S d->tv_sec += add->tv_sec; d->tv_usec += add->tv_usec; if(d->tv_usec >= 1000000 ) { d->tv_usec -= 1000000; d->tv_sec++; } #endif } /** divide sum of timers to get average */ static void timeval_divide(struct timeval* avg, const struct timeval* sum, size_t d) { #ifndef S_SPLINT_S size_t leftover; if(d == 0) { avg->tv_sec = 0; avg->tv_usec = 0; return; } avg->tv_sec = sum->tv_sec / d; avg->tv_usec = sum->tv_usec / d; /* handle fraction from seconds divide */ leftover = sum->tv_sec - avg->tv_sec*d; avg->tv_usec += (leftover*1000000)/d; #endif } /** histogram compare of time values */ static int timeval_smaller(const struct timeval* x, const struct timeval* y) { #ifndef S_SPLINT_S if(x->tv_sec < y->tv_sec) return 1; else if(x->tv_sec == y->tv_sec) { if(x->tv_usec <= y->tv_usec) return 1; else return 0; } else return 0; #endif } /** * Compare two response-ip client info entries for the purpose of mesh state * compare. It returns 0 if ci_a and ci_b are considered equal; otherwise * 1 or -1 (they mean 'ci_a is larger/smaller than ci_b', respectively, but * in practice it should be only used to mean they are different). * We cannot share the mesh state for two queries if different response-ip * actions can apply in the end, even if those queries are otherwise identical. * For this purpose we compare tag lists and tag action lists; they should be * identical to share the same state. * For tag data, we don't look into the data content, as it can be * expensive; unless tag data are not defined for both or they point to the * exact same data in memory (i.e., they come from the same ACL entry), we * consider these data different. * Likewise, if the client info is associated with views, we don't look into * the views. They are considered different unless they are exactly the same * even if the views only differ in the names. */ static int client_info_compare(const struct respip_client_info* ci_a, const struct respip_client_info* ci_b) { int cmp; if(!ci_a && !ci_b) return 0; if(ci_a && !ci_b) return -1; if(!ci_a && ci_b) return 1; if(ci_a->taglen != ci_b->taglen) return (ci_a->taglen < ci_b->taglen) ? -1 : 1; if(ci_a->taglist && !ci_b->taglist) return -1; if(!ci_a->taglist && ci_b->taglist) return 1; if(ci_a->taglist && ci_b->taglist) { cmp = memcmp(ci_a->taglist, ci_b->taglist, ci_a->taglen); if(cmp != 0) return cmp; } if(ci_a->tag_actions_size != ci_b->tag_actions_size) return (ci_a->tag_actions_size < ci_b->tag_actions_size) ? -1 : 1; if(ci_a->tag_actions && !ci_b->tag_actions) return -1; if(!ci_a->tag_actions && ci_b->tag_actions) return 1; if(ci_a->tag_actions && ci_b->tag_actions) { cmp = memcmp(ci_a->tag_actions, ci_b->tag_actions, ci_a->tag_actions_size); if(cmp != 0) return cmp; } if(ci_a->tag_datas != ci_b->tag_datas) return ci_a->tag_datas < ci_b->tag_datas ? -1 : 1; if(ci_a->view != ci_b->view) return ci_a->view < ci_b->view ? -1 : 1; /* For the unbound daemon these should be non-NULL and identical, * but we check that just in case. */ if(ci_a->respip_set != ci_b->respip_set) return ci_a->respip_set < ci_b->respip_set ? -1 : 1; return 0; } int mesh_state_compare(const void* ap, const void* bp) { struct mesh_state* a = (struct mesh_state*)ap; struct mesh_state* b = (struct mesh_state*)bp; int cmp; if(a->unique < b->unique) return -1; if(a->unique > b->unique) return 1; if(a->s.is_priming && !b->s.is_priming) return -1; if(!a->s.is_priming && b->s.is_priming) return 1; if(a->s.is_valrec && !b->s.is_valrec) return -1; if(!a->s.is_valrec && b->s.is_valrec) return 1; if((a->s.query_flags&BIT_RD) && !(b->s.query_flags&BIT_RD)) return -1; if(!(a->s.query_flags&BIT_RD) && (b->s.query_flags&BIT_RD)) return 1; if((a->s.query_flags&BIT_CD) && !(b->s.query_flags&BIT_CD)) return -1; if(!(a->s.query_flags&BIT_CD) && (b->s.query_flags&BIT_CD)) return 1; cmp = query_info_compare(&a->s.qinfo, &b->s.qinfo); if(cmp != 0) return cmp; return client_info_compare(a->s.client_info, b->s.client_info); } int mesh_state_ref_compare(const void* ap, const void* bp) { struct mesh_state_ref* a = (struct mesh_state_ref*)ap; struct mesh_state_ref* b = (struct mesh_state_ref*)bp; return mesh_state_compare(a->s, b->s); } struct mesh_area* mesh_create(struct module_stack* stack, struct module_env* env) { struct mesh_area* mesh = calloc(1, sizeof(struct mesh_area)); if(!mesh) { log_err("mesh area alloc: out of memory"); return NULL; } mesh->histogram = timehist_setup(); mesh->qbuf_bak = sldns_buffer_new(env->cfg->msg_buffer_size); if(!mesh->histogram || !mesh->qbuf_bak) { free(mesh); log_err("mesh area alloc: out of memory"); return NULL; } mesh->mods = *stack; mesh->env = env; rbtree_init(&mesh->run, &mesh_state_compare); rbtree_init(&mesh->all, &mesh_state_compare); mesh->num_reply_addrs = 0; mesh->num_reply_states = 0; mesh->num_detached_states = 0; mesh->num_forever_states = 0; mesh->stats_jostled = 0; mesh->stats_dropped = 0; mesh->ans_expired = 0; mesh->max_reply_states = env->cfg->num_queries_per_thread; mesh->max_forever_states = (mesh->max_reply_states+1)/2; #ifndef S_SPLINT_S mesh->jostle_max.tv_sec = (time_t)(env->cfg->jostle_time / 1000); mesh->jostle_max.tv_usec = (time_t)((env->cfg->jostle_time % 1000) *1000); #endif return mesh; } /** help mesh delete delete mesh states */ static void mesh_delete_helper(rbnode_type* n) { struct mesh_state* mstate = (struct mesh_state*)n->key; /* perform a full delete, not only 'cleanup' routine, * because other callbacks expect a clean state in the mesh. * For 're-entrant' calls */ mesh_state_delete(&mstate->s); /* but because these delete the items from the tree, postorder * traversal and rbtree rebalancing do not work together */ } void mesh_delete(struct mesh_area* mesh) { if(!mesh) return; /* free all query states */ while(mesh->all.count) mesh_delete_helper(mesh->all.root); timehist_delete(mesh->histogram); sldns_buffer_free(mesh->qbuf_bak); free(mesh); } void mesh_delete_all(struct mesh_area* mesh) { /* free all query states */ while(mesh->all.count) mesh_delete_helper(mesh->all.root); mesh->stats_dropped += mesh->num_reply_addrs; /* clear mesh area references */ rbtree_init(&mesh->run, &mesh_state_compare); rbtree_init(&mesh->all, &mesh_state_compare); mesh->num_reply_addrs = 0; mesh->num_reply_states = 0; mesh->num_detached_states = 0; mesh->num_forever_states = 0; mesh->forever_first = NULL; mesh->forever_last = NULL; mesh->jostle_first = NULL; mesh->jostle_last = NULL; } int mesh_make_new_space(struct mesh_area* mesh, sldns_buffer* qbuf) { struct mesh_state* m = mesh->jostle_first; /* free space is available */ if(mesh->num_reply_states < mesh->max_reply_states) return 1; /* try to kick out a jostle-list item */ if(m && m->reply_list && m->list_select == mesh_jostle_list) { /* how old is it? */ struct timeval age; timeval_subtract(&age, mesh->env->now_tv, &m->reply_list->start_time); if(timeval_smaller(&mesh->jostle_max, &age)) { /* its a goner */ log_nametypeclass(VERB_ALGO, "query jostled out to " "make space for a new one", m->s.qinfo.qname, m->s.qinfo.qtype, m->s.qinfo.qclass); /* backup the query */ if(qbuf) sldns_buffer_copy(mesh->qbuf_bak, qbuf); /* notify supers */ if(m->super_set.count > 0) { verbose(VERB_ALGO, "notify supers of failure"); m->s.return_msg = NULL; m->s.return_rcode = LDNS_RCODE_SERVFAIL; mesh_walk_supers(mesh, m); } mesh->stats_jostled ++; mesh_state_delete(&m->s); /* restore the query - note that the qinfo ptr to * the querybuffer is then correct again. */ if(qbuf) sldns_buffer_copy(qbuf, mesh->qbuf_bak); return 1; } } /* no space for new item */ return 0; } struct dns_msg* mesh_serve_expired_lookup(struct module_qstate* qstate, struct query_info* lookup_qinfo) { hashvalue_type h; struct lruhash_entry* e; struct dns_msg* msg; struct reply_info* data; struct msgreply_entry* key; time_t timenow = *qstate->env->now; int must_validate = (!(qstate->query_flags&BIT_CD) || qstate->env->cfg->ignore_cd) && qstate->env->need_to_validate; /* Lookup cache */ h = query_info_hash(lookup_qinfo, qstate->query_flags); e = slabhash_lookup(qstate->env->msg_cache, h, lookup_qinfo, 0); if(!e) return NULL; key = (struct msgreply_entry*)e->key; data = (struct reply_info*)e->data; msg = tomsg(qstate->env, &key->key, data, qstate->region, timenow, qstate->env->cfg->serve_expired, qstate->env->scratch); if(!msg) goto bail_out; /* Check CNAME chain (if any) * This is part of tomsg above; no need to check now. */ /* Check security status of the cached answer. * tomsg above has a subset of these checks, so we are leaving * these as is. * In case of bogus or revalidation we don't care to reply here. */ if(must_validate && (msg->rep->security == sec_status_bogus || msg->rep->security == sec_status_secure_sentinel_fail)) { verbose(VERB_ALGO, "Serve expired: bogus answer found in cache"); goto bail_out; } else if(msg->rep->security == sec_status_unchecked && must_validate) { verbose(VERB_ALGO, "Serve expired: unchecked entry needs " "validation"); goto bail_out; /* need to validate cache entry first */ } else if(msg->rep->security == sec_status_secure && !reply_all_rrsets_secure(msg->rep) && must_validate) { verbose(VERB_ALGO, "Serve expired: secure entry" " changed status"); goto bail_out; /* rrset changed, re-verify */ } lock_rw_unlock(&e->lock); return msg; bail_out: lock_rw_unlock(&e->lock); return NULL; } /** Init the serve expired data structure */ static int mesh_serve_expired_init(struct mesh_state* mstate, int timeout) { struct timeval t; /* Create serve_expired_data if not there yet */ if(!mstate->s.serve_expired_data) { mstate->s.serve_expired_data = (struct serve_expired_data*) regional_alloc_zero( mstate->s.region, sizeof(struct serve_expired_data)); if(!mstate->s.serve_expired_data) return 0; } /* Don't overwrite the function if already set */ mstate->s.serve_expired_data->get_cached_answer = mstate->s.serve_expired_data->get_cached_answer? mstate->s.serve_expired_data->get_cached_answer: mesh_serve_expired_lookup; /* In case this timer already popped, start it again */ if(!mstate->s.serve_expired_data->timer) { mstate->s.serve_expired_data->timer = comm_timer_create( mstate->s.env->worker_base, mesh_serve_expired_callback, mstate); if(!mstate->s.serve_expired_data->timer) return 0; #ifndef S_SPLINT_S t.tv_sec = timeout/1000; t.tv_usec = (timeout%1000)*1000; #endif comm_timer_set(mstate->s.serve_expired_data->timer, &t); } return 1; } void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, struct respip_client_info* cinfo, uint16_t qflags, struct edns_data* edns, struct comm_reply* rep, uint16_t qid) { struct mesh_state* s = NULL; int unique = unique_mesh_state(edns->opt_list, mesh->env); int was_detached = 0; int was_noreply = 0; int added = 0; int timeout = mesh->env->cfg->serve_expired? mesh->env->cfg->serve_expired_client_timeout:0; struct sldns_buffer* r_buffer = rep->c->buffer; if(rep->c->tcp_req_info) { r_buffer = rep->c->tcp_req_info->spool_buffer; } if(!unique) s = mesh_area_find(mesh, cinfo, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); /* does this create a new reply state? */ if(!s || s->list_select == mesh_no_list) { if(!mesh_make_new_space(mesh, rep->c->buffer)) { verbose(VERB_ALGO, "Too many queries. dropping " "incoming query."); comm_point_drop_reply(rep); mesh->stats_dropped++; return; } /* for this new reply state, the reply address is free, * so the limit of reply addresses does not stop reply states*/ } else { /* protect our memory usage from storing reply addresses */ if(mesh->num_reply_addrs > mesh->max_reply_states*16) { verbose(VERB_ALGO, "Too many requests queued. " "dropping incoming query."); comm_point_drop_reply(rep); mesh->stats_dropped++; return; } } /* see if it already exists, if not, create one */ if(!s) { #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif s = mesh_state_create(mesh->env, qinfo, cinfo, qflags&(BIT_RD|BIT_CD), 0, 0); if(!s) { log_err("mesh_state_create: out of memory; SERVFAIL"); if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv)) edns->opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, qinfo, qid, qflags, edns); comm_point_send_reply(rep); return; } if(unique) mesh_state_make_unique(s); /* copy the edns options we got from the front */ if(edns->opt_list) { s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list, s->s.region); if(!s->s.edns_opts_front_in) { log_err("mesh_state_create: out of memory; SERVFAIL"); if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, NULL, NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv)) edns->opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, qinfo, qid, qflags, edns); comm_point_send_reply(rep); return; } } #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(&mesh->all, &s->node); log_assert(n != NULL); /* set detached (it is now) */ mesh->num_detached_states++; added = 1; } if(!s->reply_list && !s->cb_list) { was_noreply = 1; if(s->super_set.count == 0) { was_detached = 1; } } /* add reply to s */ if(!mesh_state_add_reply(s, edns, rep, qid, qflags, qinfo)) { log_err("mesh_new_client: out of memory; SERVFAIL"); goto servfail_mem; } if(rep->c->tcp_req_info) { if(!tcp_req_info_add_meshstate(rep->c->tcp_req_info, mesh, s)) { log_err("mesh_new_client: out of memory add tcpreqinfo"); goto servfail_mem; } } if(rep->c->use_h2) { http2_stream_add_meshstate(rep->c->h2_stream, mesh, s); } /* add serve expired timer if required and not already there */ if(timeout && !mesh_serve_expired_init(s, timeout)) { log_err("mesh_new_client: out of memory initializing serve expired"); goto servfail_mem; } /* update statistics */ if(was_detached) { log_assert(mesh->num_detached_states > 0); mesh->num_detached_states--; } if(was_noreply) { mesh->num_reply_states ++; } mesh->num_reply_addrs++; if(s->list_select == mesh_no_list) { /* move to either the forever or the jostle_list */ if(mesh->num_forever_states < mesh->max_forever_states) { mesh->num_forever_states ++; mesh_list_insert(s, &mesh->forever_first, &mesh->forever_last); s->list_select = mesh_forever_list; } else { mesh_list_insert(s, &mesh->jostle_first, &mesh->jostle_last); s->list_select = mesh_jostle_list; } } if(added) mesh_run(mesh, s, module_event_new, NULL); return; servfail_mem: if(!inplace_cb_reply_servfail_call(mesh->env, qinfo, &s->s, NULL, LDNS_RCODE_SERVFAIL, edns, rep, mesh->env->scratch, mesh->env->now_tv)) edns->opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, qinfo, qid, qflags, edns); comm_point_send_reply(rep); if(added) mesh_state_delete(&s->s); return; } int mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qflags, struct edns_data* edns, sldns_buffer* buf, uint16_t qid, mesh_cb_func_type cb, void* cb_arg) { struct mesh_state* s = NULL; int unique = unique_mesh_state(edns->opt_list, mesh->env); int timeout = mesh->env->cfg->serve_expired? mesh->env->cfg->serve_expired_client_timeout:0; int was_detached = 0; int was_noreply = 0; int added = 0; if(!unique) s = mesh_area_find(mesh, NULL, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); /* there are no limits on the number of callbacks */ /* see if it already exists, if not, create one */ if(!s) { #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif s = mesh_state_create(mesh->env, qinfo, NULL, qflags&(BIT_RD|BIT_CD), 0, 0); if(!s) { return 0; } if(unique) mesh_state_make_unique(s); if(edns->opt_list) { s->s.edns_opts_front_in = edns_opt_copy_region(edns->opt_list, s->s.region); if(!s->s.edns_opts_front_in) { return 0; } } #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(&mesh->all, &s->node); log_assert(n != NULL); /* set detached (it is now) */ mesh->num_detached_states++; added = 1; } if(!s->reply_list && !s->cb_list) { was_noreply = 1; if(s->super_set.count == 0) { was_detached = 1; } } /* add reply to s */ if(!mesh_state_add_cb(s, edns, buf, cb, cb_arg, qid, qflags)) { if(added) mesh_state_delete(&s->s); return 0; } /* add serve expired timer if not already there */ if(timeout && !mesh_serve_expired_init(s, timeout)) { return 0; } /* update statistics */ if(was_detached) { log_assert(mesh->num_detached_states > 0); mesh->num_detached_states--; } if(was_noreply) { mesh->num_reply_states ++; } mesh->num_reply_addrs++; if(added) mesh_run(mesh, s, module_event_new, NULL); return 1; } /* Internal backend routine of mesh_new_prefetch(). It takes one additional * parameter, 'run', which controls whether to run the prefetch state * immediately. When this function is called internally 'run' could be * 0 (false), in which case the new state is only made runnable so it * will not be run recursively on top of the current state. */ static void mesh_schedule_prefetch(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qflags, time_t leeway, int run) { struct mesh_state* s = mesh_area_find(mesh, NULL, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif /* already exists, and for a different purpose perhaps. * if mesh_no_list, keep it that way. */ if(s) { /* make it ignore the cache from now on */ if(!s->s.blacklist) sock_list_insert(&s->s.blacklist, NULL, 0, s->s.region); if(s->s.prefetch_leeway < leeway) s->s.prefetch_leeway = leeway; return; } if(!mesh_make_new_space(mesh, NULL)) { verbose(VERB_ALGO, "Too many queries. dropped prefetch."); mesh->stats_dropped ++; return; } s = mesh_state_create(mesh->env, qinfo, NULL, qflags&(BIT_RD|BIT_CD), 0, 0); if(!s) { log_err("prefetch mesh_state_create: out of memory"); return; } #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(&mesh->all, &s->node); log_assert(n != NULL); /* set detached (it is now) */ mesh->num_detached_states++; /* make it ignore the cache */ sock_list_insert(&s->s.blacklist, NULL, 0, s->s.region); s->s.prefetch_leeway = leeway; if(s->list_select == mesh_no_list) { /* move to either the forever or the jostle_list */ if(mesh->num_forever_states < mesh->max_forever_states) { mesh->num_forever_states ++; mesh_list_insert(s, &mesh->forever_first, &mesh->forever_last); s->list_select = mesh_forever_list; } else { mesh_list_insert(s, &mesh->jostle_first, &mesh->jostle_last); s->list_select = mesh_jostle_list; } } if(!run) { #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(&mesh->run, &s->run_node); log_assert(n != NULL); return; } mesh_run(mesh, s, module_event_new, NULL); } void mesh_new_prefetch(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qflags, time_t leeway) { mesh_schedule_prefetch(mesh, qinfo, qflags, leeway, 1); } void mesh_report_reply(struct mesh_area* mesh, struct outbound_entry* e, struct comm_reply* reply, int what) { enum module_ev event = module_event_reply; e->qstate->reply = reply; if(what != NETEVENT_NOERROR) { event = module_event_noreply; if(what == NETEVENT_CAPSFAIL) event = module_event_capsfail; } mesh_run(mesh, e->qstate->mesh_info, event, e); } struct mesh_state* mesh_state_create(struct module_env* env, struct query_info* qinfo, struct respip_client_info* cinfo, uint16_t qflags, int prime, int valrec) { struct regional* region = alloc_reg_obtain(env->alloc); struct mesh_state* mstate; int i; if(!region) return NULL; mstate = (struct mesh_state*)regional_alloc(region, sizeof(struct mesh_state)); if(!mstate) { alloc_reg_release(env->alloc, region); return NULL; } memset(mstate, 0, sizeof(*mstate)); mstate->node = *RBTREE_NULL; mstate->run_node = *RBTREE_NULL; mstate->node.key = mstate; mstate->run_node.key = mstate; mstate->reply_list = NULL; mstate->list_select = mesh_no_list; mstate->replies_sent = 0; rbtree_init(&mstate->super_set, &mesh_state_ref_compare); rbtree_init(&mstate->sub_set, &mesh_state_ref_compare); mstate->num_activated = 0; mstate->unique = NULL; /* init module qstate */ mstate->s.qinfo.qtype = qinfo->qtype; mstate->s.qinfo.qclass = qinfo->qclass; mstate->s.qinfo.local_alias = NULL; mstate->s.qinfo.qname_len = qinfo->qname_len; mstate->s.qinfo.qname = regional_alloc_init(region, qinfo->qname, qinfo->qname_len); if(!mstate->s.qinfo.qname) { alloc_reg_release(env->alloc, region); return NULL; } if(cinfo) { mstate->s.client_info = regional_alloc_init(region, cinfo, sizeof(*cinfo)); if(!mstate->s.client_info) { alloc_reg_release(env->alloc, region); return NULL; } } /* remove all weird bits from qflags */ mstate->s.query_flags = (qflags & (BIT_RD|BIT_CD)); mstate->s.is_priming = prime; mstate->s.is_valrec = valrec; mstate->s.reply = NULL; mstate->s.region = region; mstate->s.curmod = 0; mstate->s.return_msg = 0; mstate->s.return_rcode = LDNS_RCODE_NOERROR; mstate->s.env = env; mstate->s.mesh_info = mstate; mstate->s.prefetch_leeway = 0; mstate->s.serve_expired_data = NULL; mstate->s.no_cache_lookup = 0; mstate->s.no_cache_store = 0; mstate->s.need_refetch = 0; mstate->s.was_ratelimited = 0; /* init modules */ for(i=0; imesh->mods.num; i++) { mstate->s.minfo[i] = NULL; mstate->s.ext_state[i] = module_state_initial; } /* init edns option lists */ mstate->s.edns_opts_front_in = NULL; mstate->s.edns_opts_back_out = NULL; mstate->s.edns_opts_back_in = NULL; mstate->s.edns_opts_front_out = NULL; return mstate; } int mesh_state_is_unique(struct mesh_state* mstate) { return mstate->unique != NULL; } void mesh_state_make_unique(struct mesh_state* mstate) { mstate->unique = mstate; } void mesh_state_cleanup(struct mesh_state* mstate) { struct mesh_area* mesh; int i; if(!mstate) return; mesh = mstate->s.env->mesh; /* Stop and delete the serve expired timer */ if(mstate->s.serve_expired_data && mstate->s.serve_expired_data->timer) { comm_timer_delete(mstate->s.serve_expired_data->timer); mstate->s.serve_expired_data->timer = NULL; } /* drop unsent replies */ if(!mstate->replies_sent) { struct mesh_reply* rep = mstate->reply_list; struct mesh_cb* cb; /* in tcp_req_info, the mstates linked are removed, but * the reply_list is now NULL, so the remove-from-empty-list * takes no time and also it does not do the mesh accounting */ mstate->reply_list = NULL; for(; rep; rep=rep->next) { comm_point_drop_reply(&rep->query_reply); log_assert(mesh->num_reply_addrs > 0); mesh->num_reply_addrs--; } while((cb = mstate->cb_list)!=NULL) { mstate->cb_list = cb->next; fptr_ok(fptr_whitelist_mesh_cb(cb->cb)); (*cb->cb)(cb->cb_arg, LDNS_RCODE_SERVFAIL, NULL, sec_status_unchecked, NULL, 0); log_assert(mesh->num_reply_addrs > 0); mesh->num_reply_addrs--; } } /* de-init modules */ for(i=0; imods.num; i++) { fptr_ok(fptr_whitelist_mod_clear(mesh->mods.mod[i]->clear)); (*mesh->mods.mod[i]->clear)(&mstate->s, i); mstate->s.minfo[i] = NULL; mstate->s.ext_state[i] = module_finished; } alloc_reg_release(mstate->s.env->alloc, mstate->s.region); } void mesh_state_delete(struct module_qstate* qstate) { struct mesh_area* mesh; struct mesh_state_ref* super, ref; struct mesh_state* mstate; if(!qstate) return; mstate = qstate->mesh_info; mesh = mstate->s.env->mesh; mesh_detach_subs(&mstate->s); if(mstate->list_select == mesh_forever_list) { mesh->num_forever_states --; mesh_list_remove(mstate, &mesh->forever_first, &mesh->forever_last); } else if(mstate->list_select == mesh_jostle_list) { mesh_list_remove(mstate, &mesh->jostle_first, &mesh->jostle_last); } if(!mstate->reply_list && !mstate->cb_list && mstate->super_set.count == 0) { log_assert(mesh->num_detached_states > 0); mesh->num_detached_states--; } if(mstate->reply_list || mstate->cb_list) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; } ref.node.key = &ref; ref.s = mstate; RBTREE_FOR(super, struct mesh_state_ref*, &mstate->super_set) { (void)rbtree_delete(&super->s->sub_set, &ref); } (void)rbtree_delete(&mesh->run, mstate); (void)rbtree_delete(&mesh->all, mstate); mesh_state_cleanup(mstate); } /** helper recursive rbtree find routine */ static int find_in_subsub(struct mesh_state* m, struct mesh_state* tofind, size_t *c) { struct mesh_state_ref* r; if((*c)++ > MESH_MAX_SUBSUB) return 1; RBTREE_FOR(r, struct mesh_state_ref*, &m->sub_set) { if(r->s == tofind || find_in_subsub(r->s, tofind, c)) return 1; } return 0; } /** find cycle for already looked up mesh_state */ static int mesh_detect_cycle_found(struct module_qstate* qstate, struct mesh_state* dep_m) { struct mesh_state* cyc_m = qstate->mesh_info; size_t counter = 0; if(!dep_m) return 0; if(dep_m == cyc_m || find_in_subsub(dep_m, cyc_m, &counter)) { if(counter > MESH_MAX_SUBSUB) return 2; return 1; } return 0; } void mesh_detach_subs(struct module_qstate* qstate) { struct mesh_area* mesh = qstate->env->mesh; struct mesh_state_ref* ref, lookup; #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif lookup.node.key = &lookup; lookup.s = qstate->mesh_info; RBTREE_FOR(ref, struct mesh_state_ref*, &qstate->mesh_info->sub_set) { #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_delete(&ref->s->super_set, &lookup); log_assert(n != NULL); /* must have been present */ if(!ref->s->reply_list && !ref->s->cb_list && ref->s->super_set.count == 0) { mesh->num_detached_states++; log_assert(mesh->num_detached_states + mesh->num_reply_states <= mesh->all.count); } } rbtree_init(&qstate->mesh_info->sub_set, &mesh_state_ref_compare); } int mesh_add_sub(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq, struct mesh_state** sub) { /* find it, if not, create it */ struct mesh_area* mesh = qstate->env->mesh; *sub = mesh_area_find(mesh, NULL, qinfo, qflags, prime, valrec); if(mesh_detect_cycle_found(qstate, *sub)) { verbose(VERB_ALGO, "attach failed, cycle detected"); return 0; } if(!*sub) { #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif /* create a new one */ *sub = mesh_state_create(qstate->env, qinfo, NULL, qflags, prime, valrec); if(!*sub) { log_err("mesh_attach_sub: out of memory"); return 0; } #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(&mesh->all, &(*sub)->node); log_assert(n != NULL); /* set detached (it is now) */ mesh->num_detached_states++; /* set new query state to run */ #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(&mesh->run, &(*sub)->run_node); log_assert(n != NULL); *newq = &(*sub)->s; } else *newq = NULL; return 1; } int mesh_attach_sub(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq) { struct mesh_area* mesh = qstate->env->mesh; struct mesh_state* sub = NULL; int was_detached; if(!mesh_add_sub(qstate, qinfo, qflags, prime, valrec, newq, &sub)) return 0; was_detached = (sub->super_set.count == 0); if(!mesh_state_attachment(qstate->mesh_info, sub)) return 0; /* if it was a duplicate attachment, the count was not zero before */ if(!sub->reply_list && !sub->cb_list && was_detached && sub->super_set.count == 1) { /* it used to be detached, before this one got added */ log_assert(mesh->num_detached_states > 0); mesh->num_detached_states--; } /* *newq will be run when inited after the current module stops */ return 1; } int mesh_state_attachment(struct mesh_state* super, struct mesh_state* sub) { #ifdef UNBOUND_DEBUG struct rbnode_type* n; #endif struct mesh_state_ref* subref; /* points to sub, inserted in super */ struct mesh_state_ref* superref; /* points to super, inserted in sub */ if( !(subref = regional_alloc(super->s.region, sizeof(struct mesh_state_ref))) || !(superref = regional_alloc(sub->s.region, sizeof(struct mesh_state_ref))) ) { log_err("mesh_state_attachment: out of memory"); return 0; } superref->node.key = superref; superref->s = super; subref->node.key = subref; subref->s = sub; if(!rbtree_insert(&sub->super_set, &superref->node)) { /* this should not happen, iterator and validator do not * attach subqueries that are identical. */ /* already attached, we are done, nothing todo. * since superref and subref already allocated in region, * we cannot free them */ return 1; } #ifdef UNBOUND_DEBUG n = #else (void) #endif rbtree_insert(&super->sub_set, &subref->node); log_assert(n != NULL); /* we checked above if statement, the reverse administration should not fail now, unless they are out of sync */ return 1; } /** * callback results to mesh cb entry * @param m: mesh state to send it for. * @param rcode: if not 0, error code. * @param rep: reply to send (or NULL if rcode is set). * @param r: callback entry * @param start_time: the time to pass to callback functions, it is 0 or * a value from one of the packets if the mesh state had packets. */ static void mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep, struct mesh_cb* r, struct timeval* start_time) { int secure; char* reason = NULL; int was_ratelimited = m->s.was_ratelimited; /* bogus messages are not made into servfail, sec_status passed * to the callback function */ if(rep && rep->security == sec_status_secure) secure = 1; else secure = 0; if(!rep && rcode == LDNS_RCODE_NOERROR) rcode = LDNS_RCODE_SERVFAIL; if(!rcode && (rep->security == sec_status_bogus || rep->security == sec_status_secure_sentinel_fail)) { if(!(reason = errinf_to_str_bogus(&m->s))) rcode = LDNS_RCODE_SERVFAIL; } /* send the reply */ if(rcode) { if(rcode == LDNS_RCODE_SERVFAIL) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, &r->edns, NULL, m->s.region, start_time)) r->edns.opt_list = NULL; } else { if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, &r->edns, NULL, m->s.region, start_time)) r->edns.opt_list = NULL; } fptr_ok(fptr_whitelist_mesh_cb(r->cb)); (*r->cb)(r->cb_arg, rcode, r->buf, sec_status_unchecked, NULL, was_ratelimited); } else { size_t udp_size = r->edns.udp_size; sldns_buffer_clear(r->buf); r->edns.edns_version = EDNS_ADVERTISED_VERSION; r->edns.udp_size = EDNS_ADVERTISED_SIZE; r->edns.ext_rcode = 0; r->edns.bits &= EDNS_DO; if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, LDNS_RCODE_NOERROR, &r->edns, NULL, m->s.region, start_time) || !reply_info_answer_encode(&m->s.qinfo, rep, r->qid, r->qflags, r->buf, 0, 1, m->s.env->scratch, udp_size, &r->edns, (int)(r->edns.bits & EDNS_DO), secure)) { fptr_ok(fptr_whitelist_mesh_cb(r->cb)); (*r->cb)(r->cb_arg, LDNS_RCODE_SERVFAIL, r->buf, sec_status_unchecked, NULL, 0); } else { fptr_ok(fptr_whitelist_mesh_cb(r->cb)); (*r->cb)(r->cb_arg, LDNS_RCODE_NOERROR, r->buf, rep->security, reason, was_ratelimited); } } free(reason); log_assert(m->s.env->mesh->num_reply_addrs > 0); m->s.env->mesh->num_reply_addrs--; } /** * Send reply to mesh reply entry * @param m: mesh state to send it for. * @param rcode: if not 0, error code. * @param rep: reply to send (or NULL if rcode is set). * @param r: reply entry * @param r_buffer: buffer to use for reply entry. * @param prev: previous reply, already has its answer encoded in buffer. * @param prev_buffer: buffer for previous reply. */ static void mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, struct mesh_reply* r, struct sldns_buffer* r_buffer, struct mesh_reply* prev, struct sldns_buffer* prev_buffer) { struct timeval end_time; struct timeval duration; int secure; /* Copy the client's EDNS for later restore, to make sure the edns * compare is with the correct edns options. */ struct edns_data edns_bak = r->edns; /* briefly set the replylist to null in case the * meshsendreply calls tcpreqinfo sendreply that * comm_point_drops because of size, and then the * null stops the mesh state remove and thus * reply_list modification and accounting */ struct mesh_reply* rlist = m->reply_list; /* examine security status */ if(m->s.env->need_to_validate && (!(r->qflags&BIT_CD) || m->s.env->cfg->ignore_cd) && rep && (rep->security <= sec_status_bogus || rep->security == sec_status_secure_sentinel_fail)) { rcode = LDNS_RCODE_SERVFAIL; if(m->s.env->cfg->stat_extended) m->s.env->mesh->ans_bogus++; } if(rep && rep->security == sec_status_secure) secure = 1; else secure = 0; if(!rep && rcode == LDNS_RCODE_NOERROR) rcode = LDNS_RCODE_SERVFAIL; if(r->query_reply.c->use_h2) { r->query_reply.c->h2_stream = r->h2_stream; /* Mesh reply won't exist for long anymore. Make it impossible * for HTTP/2 stream to refer to mesh state, in case * connection gets cleanup before HTTP/2 stream close. */ r->h2_stream->mesh_state = NULL; } /* send the reply */ /* We don't reuse the encoded answer if: * - either the previous or current response has a local alias. We could * compare the alias records and still reuse the previous answer if they * are the same, but that would be complicated and error prone for the * relatively minor case. So we err on the side of safety. * - there are registered callback functions for the given rcode, as these * need to be called for each reply. */ if(((rcode != LDNS_RCODE_SERVFAIL && !m->s.env->inplace_cb_lists[inplace_cb_reply]) || (rcode == LDNS_RCODE_SERVFAIL && !m->s.env->inplace_cb_lists[inplace_cb_reply_servfail])) && prev && prev_buffer && prev->qflags == r->qflags && !prev->local_alias && !r->local_alias && prev->edns.edns_present == r->edns.edns_present && prev->edns.bits == r->edns.bits && prev->edns.udp_size == r->edns.udp_size && edns_opt_list_compare(prev->edns.opt_list, r->edns.opt_list) == 0) { /* if the previous reply is identical to this one, fix ID */ if(prev_buffer != r_buffer) sldns_buffer_copy(r_buffer, prev_buffer); sldns_buffer_write_at(r_buffer, 0, &r->qid, sizeof(uint16_t)); sldns_buffer_write_at(r_buffer, 12, r->qname, m->s.qinfo.qname_len); m->reply_list = NULL; comm_point_send_reply(&r->query_reply); m->reply_list = rlist; } else if(rcode) { m->s.qinfo.qname = r->qname; m->s.qinfo.local_alias = r->local_alias; if(rcode == LDNS_RCODE_SERVFAIL) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, &r->edns, &r->query_reply, m->s.region, &r->start_time)) r->edns.opt_list = NULL; } else { if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, &r->edns, &r->query_reply, m->s.region, &r->start_time)) r->edns.opt_list = NULL; } error_encode(r_buffer, rcode, &m->s.qinfo, r->qid, r->qflags, &r->edns); m->reply_list = NULL; comm_point_send_reply(&r->query_reply); m->reply_list = rlist; } else { size_t udp_size = r->edns.udp_size; r->edns.edns_version = EDNS_ADVERTISED_VERSION; r->edns.udp_size = EDNS_ADVERTISED_SIZE; r->edns.ext_rcode = 0; r->edns.bits &= EDNS_DO; m->s.qinfo.qname = r->qname; m->s.qinfo.local_alias = r->local_alias; if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, LDNS_RCODE_NOERROR, &r->edns, &r->query_reply, m->s.region, &r->start_time) || !apply_edns_options(&r->edns, &edns_bak, m->s.env->cfg, r->query_reply.c, m->s.region) || !reply_info_answer_encode(&m->s.qinfo, rep, r->qid, r->qflags, r_buffer, 0, 1, m->s.env->scratch, udp_size, &r->edns, (int)(r->edns.bits & EDNS_DO), secure)) { if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, rep, LDNS_RCODE_SERVFAIL, &r->edns, &r->query_reply, m->s.region, &r->start_time)) r->edns.opt_list = NULL; error_encode(r_buffer, LDNS_RCODE_SERVFAIL, &m->s.qinfo, r->qid, r->qflags, &r->edns); } r->edns = edns_bak; m->reply_list = NULL; comm_point_send_reply(&r->query_reply); m->reply_list = rlist; } /* account */ log_assert(m->s.env->mesh->num_reply_addrs > 0); m->s.env->mesh->num_reply_addrs--; end_time = *m->s.env->now_tv; timeval_subtract(&duration, &end_time, &r->start_time); verbose(VERB_ALGO, "query took " ARG_LL "d.%6.6d sec", (long long)duration.tv_sec, (int)duration.tv_usec); m->s.env->mesh->replies_sent++; timeval_add(&m->s.env->mesh->replies_sum_wait, &duration); timehist_insert(m->s.env->mesh->histogram, &duration); if(m->s.env->cfg->stat_extended) { uint16_t rc = FLAGS_GET_RCODE(sldns_buffer_read_u16_at( r_buffer, 2)); if(secure) m->s.env->mesh->ans_secure++; m->s.env->mesh->ans_rcode[ rc ] ++; if(rc == 0 && LDNS_ANCOUNT(sldns_buffer_begin(r_buffer)) == 0) m->s.env->mesh->ans_nodata++; } /* Log reply sent */ if(m->s.env->cfg->log_replies) { log_reply_info(NO_VERBOSE, &m->s.qinfo, &r->query_reply.addr, r->query_reply.addrlen, duration, 0, r_buffer); } } void mesh_query_done(struct mesh_state* mstate) { struct mesh_reply* r; struct mesh_reply* prev = NULL; struct sldns_buffer* prev_buffer = NULL; struct mesh_cb* c; struct reply_info* rep = (mstate->s.return_msg? mstate->s.return_msg->rep:NULL); struct timeval tv = {0, 0}; /* No need for the serve expired timer anymore; we are going to reply. */ if(mstate->s.serve_expired_data) { comm_timer_delete(mstate->s.serve_expired_data->timer); mstate->s.serve_expired_data->timer = NULL; } if(mstate->s.return_rcode == LDNS_RCODE_SERVFAIL || (rep && FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_SERVFAIL)) { /* we are SERVFAILing; check for expired asnwer here */ mesh_serve_expired_callback(mstate); if((mstate->reply_list || mstate->cb_list) && mstate->s.env->cfg->log_servfail && !mstate->s.env->cfg->val_log_squelch) { char* err = errinf_to_str_servfail(&mstate->s); if(err) log_err("%s", err); free(err); } } for(r = mstate->reply_list; r; r = r->next) { tv = r->start_time; /* if a response-ip address block has been stored the * information should be logged for each client. */ if(mstate->s.respip_action_info && mstate->s.respip_action_info->addrinfo) { respip_inform_print(mstate->s.respip_action_info, r->qname, mstate->s.qinfo.qtype, mstate->s.qinfo.qclass, r->local_alias, &r->query_reply); if(mstate->s.env->cfg->stat_extended && mstate->s.respip_action_info->rpz_used) { if(mstate->s.respip_action_info->rpz_disabled) mstate->s.env->mesh->rpz_action[RPZ_DISABLED_ACTION]++; if(mstate->s.respip_action_info->rpz_cname_override) mstate->s.env->mesh->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; else mstate->s.env->mesh->rpz_action[respip_action_to_rpz_action( mstate->s.respip_action_info->action)]++; } } /* if this query is determined to be dropped during the * mesh processing, this is the point to take that action. */ if(mstate->s.is_drop) { /* briefly set the reply_list to NULL, so that the * tcp req info cleanup routine that calls the mesh * to deregister the meshstate for it is not done * because the list is NULL and also accounting is not * done there, but instead we do that here. */ struct mesh_reply* reply_list = mstate->reply_list; mstate->reply_list = NULL; comm_point_drop_reply(&r->query_reply); mstate->reply_list = reply_list; } else { struct sldns_buffer* r_buffer = r->query_reply.c->buffer; if(r->query_reply.c->tcp_req_info) { r_buffer = r->query_reply.c->tcp_req_info->spool_buffer; prev_buffer = NULL; } mesh_send_reply(mstate, mstate->s.return_rcode, rep, r, r_buffer, prev, prev_buffer); if(r->query_reply.c->tcp_req_info) { tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); r_buffer = NULL; } prev = r; prev_buffer = r_buffer; } } if(mstate->reply_list) { mstate->reply_list = NULL; if(!mstate->reply_list && !mstate->cb_list) { /* was a reply state, not anymore */ log_assert(mstate->s.env->mesh->num_reply_states > 0); mstate->s.env->mesh->num_reply_states--; } if(!mstate->reply_list && !mstate->cb_list && mstate->super_set.count == 0) mstate->s.env->mesh->num_detached_states++; } mstate->replies_sent = 1; while((c = mstate->cb_list) != NULL) { /* take this cb off the list; so that the list can be * changed, eg. by adds from the callback routine */ if(!mstate->reply_list && mstate->cb_list && !c->next) { /* was a reply state, not anymore */ log_assert(mstate->s.env->mesh->num_reply_states > 0); mstate->s.env->mesh->num_reply_states--; } mstate->cb_list = c->next; if(!mstate->reply_list && !mstate->cb_list && mstate->super_set.count == 0) mstate->s.env->mesh->num_detached_states++; mesh_do_callback(mstate, mstate->s.return_rcode, rep, c, &tv); } } void mesh_walk_supers(struct mesh_area* mesh, struct mesh_state* mstate) { struct mesh_state_ref* ref; RBTREE_FOR(ref, struct mesh_state_ref*, &mstate->super_set) { /* make super runnable */ (void)rbtree_insert(&mesh->run, &ref->s->run_node); /* callback the function to inform super of result */ fptr_ok(fptr_whitelist_mod_inform_super( mesh->mods.mod[ref->s->s.curmod]->inform_super)); (*mesh->mods.mod[ref->s->s.curmod]->inform_super)(&mstate->s, ref->s->s.curmod, &ref->s->s); /* copy state that is always relevant to super */ copy_state_to_super(&mstate->s, ref->s->s.curmod, &ref->s->s); } } struct mesh_state* mesh_area_find(struct mesh_area* mesh, struct respip_client_info* cinfo, struct query_info* qinfo, uint16_t qflags, int prime, int valrec) { struct mesh_state key; struct mesh_state* result; key.node.key = &key; key.s.is_priming = prime; key.s.is_valrec = valrec; key.s.qinfo = *qinfo; key.s.query_flags = qflags; /* We are searching for a similar mesh state when we DO want to * aggregate the state. Thus unique is set to NULL. (default when we * desire aggregation).*/ key.unique = NULL; key.s.client_info = cinfo; result = (struct mesh_state*)rbtree_search(&mesh->all, &key); return result; } int mesh_state_add_cb(struct mesh_state* s, struct edns_data* edns, sldns_buffer* buf, mesh_cb_func_type cb, void* cb_arg, uint16_t qid, uint16_t qflags) { struct mesh_cb* r = regional_alloc(s->s.region, sizeof(struct mesh_cb)); if(!r) return 0; r->buf = buf; log_assert(fptr_whitelist_mesh_cb(cb)); /* early failure ifmissing*/ r->cb = cb; r->cb_arg = cb_arg; r->edns = *edns; if(edns->opt_list) { r->edns.opt_list = edns_opt_copy_region(edns->opt_list, s->s.region); if(!r->edns.opt_list) return 0; } r->qid = qid; r->qflags = qflags; r->next = s->cb_list; s->cb_list = r; return 1; } int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns, struct comm_reply* rep, uint16_t qid, uint16_t qflags, const struct query_info* qinfo) { struct mesh_reply* r = regional_alloc(s->s.region, sizeof(struct mesh_reply)); if(!r) return 0; r->query_reply = *rep; r->edns = *edns; if(edns->opt_list) { r->edns.opt_list = edns_opt_copy_region(edns->opt_list, s->s.region); if(!r->edns.opt_list) return 0; } r->qid = qid; r->qflags = qflags; r->start_time = *s->s.env->now_tv; r->next = s->reply_list; r->qname = regional_alloc_init(s->s.region, qinfo->qname, s->s.qinfo.qname_len); if(!r->qname) return 0; if(rep->c->use_h2) r->h2_stream = rep->c->h2_stream; /* Data related to local alias stored in 'qinfo' (if any) is ephemeral * and can be different for different original queries (even if the * replaced query name is the same). So we need to make a deep copy * and store the copy for each reply info. */ if(qinfo->local_alias) { struct packed_rrset_data* d; struct packed_rrset_data* dsrc; r->local_alias = regional_alloc_zero(s->s.region, sizeof(*qinfo->local_alias)); if(!r->local_alias) return 0; r->local_alias->rrset = regional_alloc_init(s->s.region, qinfo->local_alias->rrset, sizeof(*qinfo->local_alias->rrset)); if(!r->local_alias->rrset) return 0; dsrc = qinfo->local_alias->rrset->entry.data; /* In the current implementation, a local alias must be * a single CNAME RR (see worker_handle_request()). */ log_assert(!qinfo->local_alias->next && dsrc->count == 1 && qinfo->local_alias->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)); /* we should make a local copy for the owner name of * the RRset */ r->local_alias->rrset->rk.dname_len = qinfo->local_alias->rrset->rk.dname_len; r->local_alias->rrset->rk.dname = regional_alloc_init( s->s.region, qinfo->local_alias->rrset->rk.dname, qinfo->local_alias->rrset->rk.dname_len); if(!r->local_alias->rrset->rk.dname) return 0; /* the rrset is not packed, like in the cache, but it is * individualy allocated with an allocator from localzone. */ d = regional_alloc_zero(s->s.region, sizeof(*d)); if(!d) return 0; r->local_alias->rrset->entry.data = d; if(!rrset_insert_rr(s->s.region, d, dsrc->rr_data[0], dsrc->rr_len[0], dsrc->rr_ttl[0], "CNAME local alias")) return 0; } else r->local_alias = NULL; s->reply_list = r; return 1; } /* Extract the query info and flags from 'mstate' into '*qinfop' and '*qflags'. * Since this is only used for internal refetch of otherwise-expired answer, * we simply ignore the rare failure mode when memory allocation fails. */ static void mesh_copy_qinfo(struct mesh_state* mstate, struct query_info** qinfop, uint16_t* qflags) { struct regional* region = mstate->s.env->scratch; struct query_info* qinfo; qinfo = regional_alloc_init(region, &mstate->s.qinfo, sizeof(*qinfo)); if(!qinfo) return; qinfo->qname = regional_alloc_init(region, qinfo->qname, qinfo->qname_len); if(!qinfo->qname) return; *qinfop = qinfo; *qflags = mstate->s.query_flags; } /** * Continue processing the mesh state at another module. * Handles module to modules transfer of control. * Handles module finished. * @param mesh: the mesh area. * @param mstate: currently active mesh state. * Deleted if finished, calls _done and _supers to * send replies to clients and inform other mesh states. * This in turn may create additional runnable mesh states. * @param s: state at which the current module exited. * @param ev: the event sent to the module. * returned is the event to send to the next module. * @return true if continue processing at the new module. * false if not continued processing is needed. */ static int mesh_continue(struct mesh_area* mesh, struct mesh_state* mstate, enum module_ext_state s, enum module_ev* ev) { mstate->num_activated++; if(mstate->num_activated > MESH_MAX_ACTIVATION) { /* module is looping. Stop it. */ log_err("internal error: looping module (%s) stopped", mesh->mods.mod[mstate->s.curmod]->name); log_query_info(NO_VERBOSE, "pass error for qstate", &mstate->s.qinfo); s = module_error; } if(s == module_wait_module || s == module_restart_next) { /* start next module */ mstate->s.curmod++; if(mesh->mods.num == mstate->s.curmod) { log_err("Cannot pass to next module; at last module"); log_query_info(VERB_QUERY, "pass error for qstate", &mstate->s.qinfo); mstate->s.curmod--; return mesh_continue(mesh, mstate, module_error, ev); } if(s == module_restart_next) { int curmod = mstate->s.curmod; for(; mstate->s.curmod < mesh->mods.num; mstate->s.curmod++) { fptr_ok(fptr_whitelist_mod_clear( mesh->mods.mod[mstate->s.curmod]->clear)); (*mesh->mods.mod[mstate->s.curmod]->clear) (&mstate->s, mstate->s.curmod); mstate->s.minfo[mstate->s.curmod] = NULL; } mstate->s.curmod = curmod; } *ev = module_event_pass; return 1; } if(s == module_wait_subquery && mstate->sub_set.count == 0) { log_err("module cannot wait for subquery, subquery list empty"); log_query_info(VERB_QUERY, "pass error for qstate", &mstate->s.qinfo); s = module_error; } if(s == module_error && mstate->s.return_rcode == LDNS_RCODE_NOERROR) { /* error is bad, handle pass back up below */ mstate->s.return_rcode = LDNS_RCODE_SERVFAIL; } if(s == module_error) { mesh_query_done(mstate); mesh_walk_supers(mesh, mstate); mesh_state_delete(&mstate->s); return 0; } if(s == module_finished) { if(mstate->s.curmod == 0) { struct query_info* qinfo = NULL; uint16_t qflags; mesh_query_done(mstate); mesh_walk_supers(mesh, mstate); /* If the answer to the query needs to be refetched * from an external DNS server, we'll need to schedule * a prefetch after removing the current state, so * we need to make a copy of the query info here. */ if(mstate->s.need_refetch) mesh_copy_qinfo(mstate, &qinfo, &qflags); mesh_state_delete(&mstate->s); if(qinfo) { mesh_schedule_prefetch(mesh, qinfo, qflags, 0, 1); } return 0; } /* pass along the locus of control */ mstate->s.curmod --; *ev = module_event_moddone; return 1; } return 0; } void mesh_run(struct mesh_area* mesh, struct mesh_state* mstate, enum module_ev ev, struct outbound_entry* e) { enum module_ext_state s; verbose(VERB_ALGO, "mesh_run: start"); while(mstate) { /* run the module */ fptr_ok(fptr_whitelist_mod_operate( mesh->mods.mod[mstate->s.curmod]->operate)); (*mesh->mods.mod[mstate->s.curmod]->operate) (&mstate->s, ev, mstate->s.curmod, e); /* examine results */ mstate->s.reply = NULL; regional_free_all(mstate->s.env->scratch); s = mstate->s.ext_state[mstate->s.curmod]; verbose(VERB_ALGO, "mesh_run: %s module exit state is %s", mesh->mods.mod[mstate->s.curmod]->name, strextstate(s)); e = NULL; if(mesh_continue(mesh, mstate, s, &ev)) continue; /* run more modules */ ev = module_event_pass; if(mesh->run.count > 0) { /* pop random element off the runnable tree */ mstate = (struct mesh_state*)mesh->run.root->key; (void)rbtree_delete(&mesh->run, mstate); } else mstate = NULL; } if(verbosity >= VERB_ALGO) { mesh_stats(mesh, "mesh_run: end"); mesh_log_list(mesh); } } void mesh_log_list(struct mesh_area* mesh) { char buf[30]; struct mesh_state* m; int num = 0; RBTREE_FOR(m, struct mesh_state*, &mesh->all) { snprintf(buf, sizeof(buf), "%d%s%s%s%s%s%s mod%d %s%s", num++, (m->s.is_priming)?"p":"", /* prime */ (m->s.is_valrec)?"v":"", /* prime */ (m->s.query_flags&BIT_RD)?"RD":"", (m->s.query_flags&BIT_CD)?"CD":"", (m->super_set.count==0)?"d":"", /* detached */ (m->sub_set.count!=0)?"c":"", /* children */ m->s.curmod, (m->reply_list)?"rep":"", /*hasreply*/ (m->cb_list)?"cb":"" /* callbacks */ ); log_query_info(VERB_ALGO, buf, &m->s.qinfo); } } void mesh_stats(struct mesh_area* mesh, const char* str) { verbose(VERB_DETAIL, "%s %u recursion states (%u with reply, " "%u detached), %u waiting replies, %u recursion replies " "sent, %d replies dropped, %d states jostled out", str, (unsigned)mesh->all.count, (unsigned)mesh->num_reply_states, (unsigned)mesh->num_detached_states, (unsigned)mesh->num_reply_addrs, (unsigned)mesh->replies_sent, (unsigned)mesh->stats_dropped, (unsigned)mesh->stats_jostled); if(mesh->replies_sent > 0) { struct timeval avg; timeval_divide(&avg, &mesh->replies_sum_wait, mesh->replies_sent); log_info("average recursion processing time " ARG_LL "d.%6.6d sec", (long long)avg.tv_sec, (int)avg.tv_usec); log_info("histogram of recursion processing times"); timehist_log(mesh->histogram, "recursions"); } } void mesh_stats_clear(struct mesh_area* mesh) { if(!mesh) return; mesh->replies_sent = 0; mesh->replies_sum_wait.tv_sec = 0; mesh->replies_sum_wait.tv_usec = 0; mesh->stats_jostled = 0; mesh->stats_dropped = 0; timehist_clear(mesh->histogram); mesh->ans_secure = 0; mesh->ans_bogus = 0; mesh->ans_expired = 0; memset(&mesh->ans_rcode[0], 0, sizeof(size_t)*UB_STATS_RCODE_NUM); memset(&mesh->rpz_action[0], 0, sizeof(size_t)*UB_STATS_RPZ_ACTION_NUM); mesh->ans_nodata = 0; } size_t mesh_get_mem(struct mesh_area* mesh) { struct mesh_state* m; size_t s = sizeof(*mesh) + sizeof(struct timehist) + sizeof(struct th_buck)*mesh->histogram->num + sizeof(sldns_buffer) + sldns_buffer_capacity(mesh->qbuf_bak); RBTREE_FOR(m, struct mesh_state*, &mesh->all) { /* all, including m itself allocated in qstate region */ s += regional_get_mem(m->s.region); } return s; } int mesh_detect_cycle(struct module_qstate* qstate, struct query_info* qinfo, uint16_t flags, int prime, int valrec) { struct mesh_area* mesh = qstate->env->mesh; struct mesh_state* dep_m = NULL; if(!mesh_state_is_unique(qstate->mesh_info)) dep_m = mesh_area_find(mesh, NULL, qinfo, flags, prime, valrec); return mesh_detect_cycle_found(qstate, dep_m); } void mesh_list_insert(struct mesh_state* m, struct mesh_state** fp, struct mesh_state** lp) { /* insert as last element */ m->prev = *lp; m->next = NULL; if(*lp) (*lp)->next = m; else *fp = m; *lp = m; } void mesh_list_remove(struct mesh_state* m, struct mesh_state** fp, struct mesh_state** lp) { if(m->next) m->next->prev = m->prev; else *lp = m->prev; if(m->prev) m->prev->next = m->next; else *fp = m->next; } void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, struct comm_point* cp) { struct mesh_reply* n, *prev = NULL; n = m->reply_list; /* when in mesh_cleanup, it sets the reply_list to NULL, so that * there is no accounting twice */ if(!n) return; /* nothing to remove, also no accounting needed */ while(n) { if(n->query_reply.c == cp) { /* unlink it */ if(prev) prev->next = n->next; else m->reply_list = n->next; /* delete it, but allocated in m region */ log_assert(mesh->num_reply_addrs > 0); mesh->num_reply_addrs--; /* prev = prev; */ n = n->next; continue; } prev = n; n = n->next; } /* it was not detached (because it had a reply list), could be now */ if(!m->reply_list && !m->cb_list && m->super_set.count == 0) { mesh->num_detached_states++; } /* if not replies any more in mstate, it is no longer a reply_state */ if(!m->reply_list && !m->cb_list) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; } } static int apply_respip_action(struct module_qstate* qstate, const struct query_info* qinfo, struct respip_client_info* cinfo, struct respip_action_info* actinfo, struct reply_info* rep, struct ub_packed_rrset_key** alias_rrset, struct reply_info** encode_repp, struct auth_zones* az) { if(qinfo->qtype != LDNS_RR_TYPE_A && qinfo->qtype != LDNS_RR_TYPE_AAAA && qinfo->qtype != LDNS_RR_TYPE_ANY) return 1; if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, actinfo, alias_rrset, 0, qstate->region, az)) return 0; /* xxx_deny actions mean dropping the reply, unless the original reply * was redirected to response-ip data. */ if((actinfo->action == respip_deny || actinfo->action == respip_inform_deny) && *encode_repp == rep) *encode_repp = NULL; return 1; } void mesh_serve_expired_callback(void* arg) { struct mesh_state* mstate = (struct mesh_state*) arg; struct module_qstate* qstate = &mstate->s; struct mesh_reply* r; struct mesh_area* mesh = qstate->env->mesh; struct dns_msg* msg; struct mesh_cb* c; struct mesh_reply* prev = NULL; struct sldns_buffer* prev_buffer = NULL; struct sldns_buffer* r_buffer = NULL; struct reply_info* partial_rep = NULL; struct ub_packed_rrset_key* alias_rrset = NULL; struct reply_info* encode_rep = NULL; struct respip_action_info actinfo; struct query_info* lookup_qinfo = &qstate->qinfo; struct query_info qinfo_tmp; struct timeval tv = {0, 0}; int must_validate = (!(qstate->query_flags&BIT_CD) || qstate->env->cfg->ignore_cd) && qstate->env->need_to_validate; if(!qstate->serve_expired_data) return; verbose(VERB_ALGO, "Serve expired: Trying to reply with expired data"); comm_timer_delete(qstate->serve_expired_data->timer); qstate->serve_expired_data->timer = NULL; /* If is_drop or no_cache_lookup (modules that handle their own cache e.g., * subnetmod) ignore stale data from the main cache. */ if(qstate->no_cache_lookup || qstate->is_drop) { verbose(VERB_ALGO, "Serve expired: Not allowed to look into cache for stale"); return; } /* The following while is used instead of the `goto lookup_cache` * like in the worker. */ while(1) { fptr_ok(fptr_whitelist_serve_expired_lookup( qstate->serve_expired_data->get_cached_answer)); msg = qstate->serve_expired_data->get_cached_answer(qstate, lookup_qinfo); if(!msg) return; /* Reset these in case we pass a second time from here. */ encode_rep = msg->rep; memset(&actinfo, 0, sizeof(actinfo)); actinfo.action = respip_none; alias_rrset = NULL; if((mesh->use_response_ip || mesh->use_rpz) && !partial_rep && !apply_respip_action(qstate, &qstate->qinfo, qstate->client_info, &actinfo, msg->rep, &alias_rrset, &encode_rep, qstate->env->auth_zones)) { return; } else if(partial_rep && !respip_merge_cname(partial_rep, &qstate->qinfo, msg->rep, qstate->client_info, must_validate, &encode_rep, qstate->region, qstate->env->auth_zones)) { return; } if(!encode_rep || alias_rrset) { if(!encode_rep) { /* Needs drop */ return; } else { /* A partial CNAME chain is found. */ partial_rep = encode_rep; } } /* We've found a partial reply ending with an * alias. Replace the lookup qinfo for the * alias target and lookup the cache again to * (possibly) complete the reply. As we're * passing the "base" reply, there will be no * more alias chasing. */ if(partial_rep) { memset(&qinfo_tmp, 0, sizeof(qinfo_tmp)); get_cname_target(alias_rrset, &qinfo_tmp.qname, &qinfo_tmp.qname_len); if(!qinfo_tmp.qname) { log_err("Serve expired: unexpected: invalid answer alias"); return; } qinfo_tmp.qtype = qstate->qinfo.qtype; qinfo_tmp.qclass = qstate->qinfo.qclass; lookup_qinfo = &qinfo_tmp; continue; } break; } if(verbosity >= VERB_ALGO) log_dns_msg("Serve expired lookup", &qstate->qinfo, msg->rep); for(r = mstate->reply_list; r; r = r->next) { tv = r->start_time; /* If address info is returned, it means the action should be an * 'inform' variant and the information should be logged. */ if(actinfo.addrinfo) { respip_inform_print(&actinfo, r->qname, qstate->qinfo.qtype, qstate->qinfo.qclass, r->local_alias, &r->query_reply); if(qstate->env->cfg->stat_extended && actinfo.rpz_used) { if(actinfo.rpz_disabled) qstate->env->mesh->rpz_action[RPZ_DISABLED_ACTION]++; if(actinfo.rpz_cname_override) qstate->env->mesh->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; else qstate->env->mesh->rpz_action[ respip_action_to_rpz_action(actinfo.action)]++; } } r_buffer = r->query_reply.c->buffer; if(r->query_reply.c->tcp_req_info) r_buffer = r->query_reply.c->tcp_req_info->spool_buffer; mesh_send_reply(mstate, LDNS_RCODE_NOERROR, msg->rep, r, r_buffer, prev, prev_buffer); if(r->query_reply.c->tcp_req_info) tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); prev = r; prev_buffer = r_buffer; /* Account for each reply sent. */ mesh->ans_expired++; } if(mstate->reply_list) { mstate->reply_list = NULL; if(!mstate->reply_list && !mstate->cb_list) { log_assert(mesh->num_reply_states > 0); mesh->num_reply_states--; if(mstate->super_set.count == 0) { mesh->num_detached_states++; } } } while((c = mstate->cb_list) != NULL) { /* take this cb off the list; so that the list can be * changed, eg. by adds from the callback routine */ if(!mstate->reply_list && mstate->cb_list && !c->next) { /* was a reply state, not anymore */ log_assert(qstate->env->mesh->num_reply_states > 0); qstate->env->mesh->num_reply_states--; } mstate->cb_list = c->next; if(!mstate->reply_list && !mstate->cb_list && mstate->super_set.count == 0) qstate->env->mesh->num_detached_states++; mesh_do_callback(mstate, LDNS_RCODE_NOERROR, msg->rep, c, &tv); } } unbound-1.13.1/services/authzone.h0000644000175000017500000006045614010434640016543 0ustar wouterwouter/* * services/authzone.h - authoritative zone that is locally hosted. * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the functions for an authority zone. This zone * is queried by the iterator, just like a stub or forward zone, but then * the data is locally held. */ #ifndef SERVICES_AUTHZONE_H #define SERVICES_AUTHZONE_H #include "util/rbtree.h" #include "util/locks.h" #include "services/mesh.h" #include "services/rpz.h" struct ub_packed_rrset_key; struct regional; struct config_file; struct config_auth; struct query_info; struct dns_msg; struct edns_data; struct module_env; struct worker; struct comm_point; struct comm_timer; struct comm_reply; struct auth_rrset; struct auth_nextprobe; struct auth_probe; struct auth_transfer; struct auth_master; struct auth_chunk; /** * Authoritative zones, shared. */ struct auth_zones { /** lock on the authzone trees */ lock_rw_type lock; /** rbtree of struct auth_zone */ rbtree_type ztree; /** rbtree of struct auth_xfer */ rbtree_type xtree; /** do we have downstream enabled */ int have_downstream; /** number of queries upstream */ size_t num_query_up; /** number of queries downstream */ size_t num_query_down; /** first auth zone containing rpz item in linked list */ struct auth_zone* rpz_first; /** rw lock for rpz linked list, needed when iterating or editing linked * list. */ lock_rw_type rpz_lock; }; /** * Auth zone. Authoritative data, that is fetched from instead of sending * packets to the internet. */ struct auth_zone { /** rbtree node, key is name and class */ rbnode_type node; /** zone name, in uncompressed wireformat */ uint8_t* name; /** length of zone name */ size_t namelen; /** number of labels in zone name */ int namelabs; /** the class of this zone, in host byteorder. * uses 'dclass' to not conflict with c++ keyword class. */ uint16_t dclass; /** lock on the data in the structure * For the node, parent, name, namelen, namelabs, dclass, you * need to also hold the zones_tree lock to change them (or to * delete this zone) */ lock_rw_type lock; /** auth data for this zone * rbtree of struct auth_data */ rbtree_type data; /** zonefile name (or NULL for no zonefile) */ char* zonefile; /** fallback to the internet on failure or ttl-expiry of auth zone */ int fallback_enabled; /** the zone has expired (enabled by the xfer worker), fallback * happens if that option is enabled. */ int zone_expired; /** zone is a slave zone (it has masters) */ int zone_is_slave; /** for downstream: this zone answers queries towards the downstream * clients */ int for_downstream; /** for upstream: this zone answers queries that unbound intends to * send upstream. */ int for_upstream; /** RPZ zones */ struct rpz* rpz; /** zone has been deleted */ int zone_deleted; /** deletelist pointer, unused normally except during delete */ struct auth_zone* delete_next; /* not protected by auth_zone lock, must be last items in struct */ /** next auth zone containing RPZ data, or NULL */ struct auth_zone* rpz_az_next; /** previous auth zone containing RPZ data, or NULL */ struct auth_zone* rpz_az_prev; }; /** * Auth data. One domain name, and the RRs to go with it. */ struct auth_data { /** rbtree node, key is name only */ rbnode_type node; /** domain name */ uint8_t* name; /** length of name */ size_t namelen; /** number of labels in name */ int namelabs; /** the data rrsets, with different types, linked list. * if the list if NULL the node would be an empty non-terminal, * but in this data structure such nodes that represent an empty * non-terminal are not needed; they just don't exist. */ struct auth_rrset* rrsets; }; /** * A auth data RRset */ struct auth_rrset { /** next in list */ struct auth_rrset* next; /** RR type in host byteorder */ uint16_t type; /** RRset data item */ struct packed_rrset_data* data; }; /** * Authoritative zone transfer structure. * Create and destroy needs the auth_zones* biglock. * The structure consists of different tasks. Each can be unowned (-1) or * owner by a worker (worker-num). A worker can pick up a task and then do * it. This means the events (timeouts, sockets) are for that worker. * * (move this to tasks). * They don't have locks themselves, the worker (that owns it) uses it, * also as part of callbacks, hence it has separate zonename pointers for * lookup in the main zonetree. If the zone has no transfers, this * structure is not created. */ struct auth_xfer { /** rbtree node, key is name and class */ rbnode_type node; /** lock on this structure, and on the workernum elements of the * tasks. First hold the tree-lock in auth_zones, find the auth_xfer, * lock this lock. Then a worker can reassign itself to fill up * one of the tasks. * Once it has the task assigned to it, the worker can access the * other elements of the task structure without a lock, because that * is necessary for the eventloop and callbacks from that. */ lock_basic_type lock; /** zone name, in uncompressed wireformat */ uint8_t* name; /** length of zone name */ size_t namelen; /** number of labels in zone name */ int namelabs; /** the class of this zone, in host byteorder. * uses 'dclass' to not conflict with c++ keyword class. */ uint16_t dclass; /** task to wait for next-probe-timeout, * once timeouted, see if a SOA probe is needed, or already * in progress */ struct auth_nextprobe* task_nextprobe; /** task for SOA probe. Check if the zone can be updated */ struct auth_probe* task_probe; /** Task for transfer. Transferring and updating the zone. This * includes trying (potentially) several upstream masters. Downloading * and storing the zone */ struct auth_transfer* task_transfer; /** a notify was received, but a zone transfer or probe was already * acted on. * However, the zone transfer could signal a newer serial number. * The serial number of that notify is saved below. The transfer and * probe tasks should check this once done to see if they need to * restart the transfer task for the newer notify serial. * Hold the lock to access this member (and the serial). */ int notify_received; /** true if the notify_received has a serial number */ int notify_has_serial; /** serial number of the notify */ uint32_t notify_serial; /** the list of masters for checking notifies. This list is * empty on start, and a copy of the list from the probe_task when * it is done looking them up. */ struct auth_master* allow_notify_list; /* protected by the lock on the structure, information about * the loaded authority zone. */ /** is the zone currently considered expired? after expiry also older * serial numbers are allowed (not just newer) */ int zone_expired; /** do we have a zone (if 0, no zone data at all) */ int have_zone; /** current serial (from SOA), if we have no zone, 0 */ uint32_t serial; /** retry time (from SOA), time to wait with next_probe * if no master responds */ time_t retry; /** refresh time (from SOA), time to wait with next_probe * if everything is fine */ time_t refresh; /** expiry time (from SOA), time until zone data is not considered * valid any more, if no master responds within this time, either * with the current zone or a new zone. */ time_t expiry; /** zone lease start time (start+expiry is expiration time). * this is renewed every SOA probe and transfer. On zone load * from zonefile it is also set (with probe set soon to check) */ time_t lease_time; }; /** * The next probe task. * This task consists of waiting for the probetimeout. It is a task because * it needs an event in the eventtable. Once the timeout has passed, that * worker can (potentially) become the auth_probe worker, or if another worker * is already doing that, do nothing. Tasks becomes unowned. * The probe worker, if it detects nothing has to be done picks up this task, * if unowned. */ struct auth_nextprobe { /* Worker pointer. NULL means unowned. */ struct worker* worker; /* module env for this task */ struct module_env* env; /** increasing backoff for failures */ time_t backoff; /** Timeout for next probe (for SOA) */ time_t next_probe; /** timeout callback for next_probe or expiry(if that is sooner). * it is on the worker's event_base */ struct comm_timer* timer; }; /** * The probe task. * Send a SOA UDP query to see if the zone needs to be updated (or similar, * potential, HTTP probe query) and check serial number. * If yes, start the auth_transfer task. If no, make sure auth_nextprobe * timeout wait task is running. * Needs to be a task, because the UDP query needs an event entry. * This task could also be started by eg. a NOTIFY being received, even though * another worker is performing the nextprobe task (and that worker keeps * waiting uninterrupted). */ struct auth_probe { /* Worker pointer. NULL means unowned. */ struct worker* worker; /* module env for this task */ struct module_env* env; /** list of upstream masters for this zone, from config */ struct auth_master* masters; /** for the hostname lookups, which master is current */ struct auth_master* lookup_target; /** are we looking up A or AAAA, first A, then AAAA (if ip6 enabled) */ int lookup_aaaa; /** we only want to do lookups for making config work (for notify), * don't proceed with UDP SOA probe queries */ int only_lookup; /** we have seen a new lease this scan, because one of the masters * replied with the current SOA serial version */ int have_new_lease; /** once notified, or the timeout has been reached. a scan starts. */ /** the scan specific target (notify source), or NULL if none */ struct auth_master* scan_specific; /** scan tries all the upstream masters. the scan current target. * or NULL if not working on sequential scan */ struct auth_master* scan_target; /** if not NULL, the specific addr for the current master */ struct auth_addr* scan_addr; /** dns id of packet in flight */ uint16_t id; /** the SOA probe udp event. * on the workers event base. */ struct comm_point* cp; /** is the cp for ip6 or ip4 */ int cp_is_ip6; /** timeout for packets. * on the workers event base. */ struct comm_timer* timer; /** timeout in msec */ int timeout; }; /** * The transfer task. * Once done, make sure the nextprobe waiting task is running, whether done * with failure or success. If failure, use shorter timeout for wait time. */ struct auth_transfer { /* Worker pointer. NULL means unowned. */ struct worker* worker; /* module env for this task */ struct module_env* env; /** xfer data that has been transferred, the data is applied * once the transfer has completed correctly */ struct auth_chunk* chunks_first; /** last element in chunks list (to append new data at the end) */ struct auth_chunk* chunks_last; /** list of upstream masters for this zone, from config */ struct auth_master* masters; /** for the hostname lookups, which master is current */ struct auth_master* lookup_target; /** are we looking up A or AAAA, first A, then AAAA (if ip6 enabled) */ int lookup_aaaa; /** once notified, or the timeout has been reached. a scan starts. */ /** the scan specific target (notify source), or NULL if none */ struct auth_master* scan_specific; /** scan tries all the upstream masters. the scan current target. * or NULL if not working on sequential scan */ struct auth_master* scan_target; /** what address we are scanning for the master, or NULL if the * master is in IP format itself */ struct auth_addr* scan_addr; /** the zone transfer in progress (or NULL if in scan). It is * from this master */ struct auth_master* master; /** failed ixfr transfer, retry with axfr (to the current master), * the IXFR was 'REFUSED', 'SERVFAIL', 'NOTIMPL' or the contents of * the IXFR did not apply cleanly (out of sync, delete of nonexistent * data or add of duplicate data). Flag is cleared once the retry * with axfr is done. */ int ixfr_fail; /** we saw an ixfr-indicating timeout, count of them */ int ixfr_possible_timeout_count; /** we are doing IXFR right now */ int on_ixfr; /** did we detect the current AXFR/IXFR serial number yet, 0 not yet, * 1 we saw the first, 2 we saw the second, 3 must be last SOA in xfr*/ int got_xfr_serial; /** number of RRs scanned for AXFR/IXFR detection */ size_t rr_scan_num; /** we are doing an IXFR but we detected an AXFR contents */ int on_ixfr_is_axfr; /** the serial number for the current AXFR/IXFR incoming reply, * for IXFR, the outermost SOA records serial */ uint32_t incoming_xfr_serial; /** dns id of AXFR query */ uint16_t id; /** the transfer (TCP) to the master. * on the workers event base. */ struct comm_point* cp; /** timeout for the transfer. * on the workers event base. */ struct comm_timer* timer; }; /** list of addresses */ struct auth_addr { /** next in list */ struct auth_addr* next; /** IP address */ struct sockaddr_storage addr; /** addr length */ socklen_t addrlen; }; /** auth zone master upstream, and the config settings for it */ struct auth_master { /** next master in list */ struct auth_master* next; /** master IP address (and port), or hostname, string */ char* host; /** for http, filename */ char* file; /** use HTTP for this master */ int http; /** use IXFR for this master */ int ixfr; /** this is an allow notify member, the master can send notifies * to us, but we don't send SOA probes, or zone transfer from it */ int allow_notify; /** use ssl for channel */ int ssl; /** the port number (for urls) */ int port; /** if the host is a hostname, the list of resolved addrs, if any*/ struct auth_addr* list; }; /** auth zone master zone transfer data chunk */ struct auth_chunk { /** next chunk in list */ struct auth_chunk* next; /** the data from this chunk, this is what was received. * for an IXFR that means results from comm_net tcp actions, * packets. also for an AXFR. For HTTP a zonefile chunk. */ uint8_t* data; /** length of allocated data */ size_t len; }; /** * Create auth zones structure */ struct auth_zones* auth_zones_create(void); /** * Apply configuration to auth zones. Reads zonefiles. * @param az: auth zones structure * @param cfg: config to apply. * @param setup: if true, also sets up values in the auth zones structure * @param is_rpz: set to 1 if at least one RPZ zone is configured. * @return false on failure. */ int auth_zones_apply_cfg(struct auth_zones* az, struct config_file* cfg, int setup, int* is_rpz); /** initial pick up of worker timeouts, ties events to worker event loop * @param az: auth zones structure * @param env: worker env, of first worker that receives the events (if any) * in its eventloop. */ void auth_xfer_pickup_initial(struct auth_zones* az, struct module_env* env); /** * Cleanup auth zones. This removes all events from event bases. * Stops the xfr tasks. But leaves zone data. * @param az: auth zones structure. */ void auth_zones_cleanup(struct auth_zones* az); /** * Delete auth zones structure */ void auth_zones_delete(struct auth_zones* az); /** * Write auth zone data to file, in zonefile format. */ int auth_zone_write_file(struct auth_zone* z, const char* fname); /** * Use auth zones to lookup the answer to a query. * The query is from the iterator. And the auth zones attempts to provide * the answer instead of going to the internet. * * @param az: auth zones structure. * @param qinfo: query info to lookup. * @param region: region to use to allocate the reply in. * @param msg: reply is stored here (if one). * @param fallback: if true, fallback to making a query to the internet. * @param dp_nm: name of delegation point to look for. This zone is used * to answer the query. * If the dp_nm is not found, fallback is set to true and false returned. * @param dp_nmlen: length of dp_nm. * @return 0: failure (an error of some sort, like servfail). * if 0 and fallback is true, fallback to the internet. * if 0 and fallback is false, like getting servfail. * If true, an answer is available. */ int auth_zones_lookup(struct auth_zones* az, struct query_info* qinfo, struct regional* region, struct dns_msg** msg, int* fallback, uint8_t* dp_nm, size_t dp_nmlen); /** * Answer query from auth zone. Create authoritative answer. * @param az: auth zones structure. * @param env: the module environment. * @param qinfo: query info (parsed). * @param edns: edns info (parsed). * @param buf: buffer with query ID and flags, also for reply. * @param repinfo: reply information for a communication point. * @param temp: temporary storage region. * @return false if not answered */ int auth_zones_answer(struct auth_zones* az, struct module_env* env, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, struct sldns_buffer* buf, struct regional* temp); /** * Find the auth zone that is above the given qname. * Return NULL when there is no auth_zone above the give name, otherwise * returns the closest auth_zone above the qname that pertains to it. * @param az: auth zones structure. * @param name: query to look up for. * @param name_len: length of name. * @param dclass: class of zone to find. * @return NULL or auth_zone that pertains to the query. */ struct auth_zone* auth_zones_find_zone(struct auth_zones* az, uint8_t* name, size_t name_len, uint16_t dclass); /** find an auth zone by name (exact match by name or NULL returned) */ struct auth_zone* auth_zone_find(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass); /** find an xfer zone by name (exact match by name or NULL returned) */ struct auth_xfer* auth_xfer_find(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass); /** create an auth zone. returns wrlocked zone. caller must have wrlock * on az. returns NULL on malloc failure */ struct auth_zone* auth_zone_create(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass); /** set auth zone zonefile string. caller must have lock on zone */ int auth_zone_set_zonefile(struct auth_zone* z, char* zonefile); /** set auth zone fallback. caller must have lock on zone. * fallbackstr is "yes" or "no". false on parse failure. */ int auth_zone_set_fallback(struct auth_zone* z, char* fallbackstr); /** see if the auth zone for the name can fallback * @param az: auth zones * @param nm: name of delegation point. * @param nmlen: length of nm. * @param dclass: class of zone to look for. * @return true if fallback_enabled is true. false if not. * if the zone does not exist, fallback is true (more lenient) * also true if zone does not do upstream requests. */ int auth_zones_can_fallback(struct auth_zones* az, uint8_t* nm, size_t nmlen, uint16_t dclass); /** process notify for auth zones. * first checks the access list. Then processes the notify. This starts * the probe sequence or it notes the serial number (if any) * @param az: auth zones structure. * @param env: module env of the worker that is handling the notify. it will * pick up the task probe (or transfer), unless already in progress by * another worker. * @param nm: name of the zone. Uncompressed. from query. * @param nmlen: length of name. * @param dclass: class of zone. * @param addr: source address of notify * @param addrlen: length of addr. * @param has_serial: if true, the notify has a serial attached. * @param serial: the serial number, if has_serial is true. * @param refused: is set to true on failure to note refused access. * @return fail on failures (refused is false) and when access is * denied (refused is true). True when processed. */ int auth_zones_notify(struct auth_zones* az, struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t dclass, struct sockaddr_storage* addr, socklen_t addrlen, int has_serial, uint32_t serial, int* refused); /** process notify packet and read serial number from SOA. * returns 0 if no soa record in the notify */ int auth_zone_parse_notify_serial(struct sldns_buffer* pkt, uint32_t *serial); /** for the zone and if not already going, starts the probe sequence. * false if zone cannot be found. This is like a notify arrived and was * accepted for that zone. */ int auth_zones_startprobesequence(struct auth_zones* az, struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t dclass); /** read auth zone from zonefile. caller must lock zone. false on failure */ int auth_zone_read_zonefile(struct auth_zone* z, struct config_file* cfg); /** find serial number of zone or false if none (no SOA record) */ int auth_zone_get_serial(struct auth_zone* z, uint32_t* serial); /** compare auth_zones for sorted rbtree */ int auth_zone_cmp(const void* z1, const void* z2); /** compare auth_data for sorted rbtree */ int auth_data_cmp(const void* z1, const void* z2); /** compare auth_xfer for sorted rbtree */ int auth_xfer_cmp(const void* z1, const void* z2); /** Create auth_xfer structure. * Caller must have wrlock on az. Returns locked xfer zone. * @param az: zones structure. * @param z: zone with name and class * @return xfer zone or NULL */ struct auth_xfer* auth_xfer_create(struct auth_zones* az, struct auth_zone* z); /** * Set masters in auth xfer structure from config. * @param list: pointer to start of list. The malloced list is returned here. * @param c: the config items to copy over. * @param with_http: if true, http urls are also included, before the masters. * @return false on failure. */ int xfer_set_masters(struct auth_master** list, struct config_auth* c, int with_http); /** xfer nextprobe timeout callback, this is part of task_nextprobe */ void auth_xfer_timer(void* arg); /** callback for commpoint udp replies to task_probe */ int auth_xfer_probe_udp_callback(struct comm_point* c, void* arg, int err, struct comm_reply* repinfo); /** callback for task_transfer tcp connections */ int auth_xfer_transfer_tcp_callback(struct comm_point* c, void* arg, int err, struct comm_reply* repinfo); /** callback for task_transfer http connections */ int auth_xfer_transfer_http_callback(struct comm_point* c, void* arg, int err, struct comm_reply* repinfo); /** xfer probe timeout callback, part of task_probe */ void auth_xfer_probe_timer_callback(void* arg); /** xfer transfer timeout callback, part of task_transfer */ void auth_xfer_transfer_timer_callback(void* arg); /** mesh callback for task_probe on lookup of host names */ void auth_xfer_probe_lookup_callback(void* arg, int rcode, struct sldns_buffer* buf, enum sec_status sec, char* why_bogus, int was_ratelimited); /** mesh callback for task_transfer on lookup of host names */ void auth_xfer_transfer_lookup_callback(void* arg, int rcode, struct sldns_buffer* buf, enum sec_status sec, char* why_bogus, int was_ratelimited); /* * Compares two 32-bit serial numbers as defined in RFC1982. Returns * <0 if a < b, 0 if a == b, and >0 if a > b. The result is undefined * if a != b but neither is greater or smaller (see RFC1982 section * 3.2.). */ int compare_serial(uint32_t a, uint32_t b); #endif /* SERVICES_AUTHZONE_H */ unbound-1.13.1/ac_pkg_swig.m40000644000175000017500000001472314010434640015425 0ustar wouterwouter# =========================================================================== # http://autoconf-archive.cryp.to/ac_pkg_swig.html # =========================================================================== # # SYNOPSIS # # AC_PROG_SWIG([major.minor.micro]) # # DESCRIPTION # # This macro searches for a SWIG installation on your system. If found you # should call SWIG via $(SWIG). You can use the optional first argument to # check if the version of the available SWIG is greater than or equal to # the value of the argument. It should have the format: N[.N[.N]] (N is a # number between 0 and 999. Only the first N is mandatory.) # # If the version argument is given (e.g. 1.3.17), AC_PROG_SWIG checks that # the swig package is this version number or higher. # # In configure.in, use as: # # AC_PROG_SWIG(1.3.17) # SWIG_ENABLE_CXX # SWIG_MULTI_MODULE_SUPPORT # SWIG_PYTHON # # LAST MODIFICATION # # 2008-04-12 # # COPYLEFT # # Copyright (c) 2008 Sebastian Huber # Copyright (c) 2008 Alan W. Irwin # Copyright (c) 2008 Rafael Laboissiere # Copyright (c) 2008 Andrew Collier # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Macro Archive. When you make and # distribute a modified version of the Autoconf Macro, you may extend this # special exception to the GPL to apply to your modified version as well. AC_DEFUN([AC_PROG_SWIG],[ AC_PATH_PROG([SWIG],[swig]) if test -z "$SWIG" ; then AC_MSG_WARN([cannot find 'swig' program. You should look at http://www.swig.org]) SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false' elif test -n "$1" ; then AC_MSG_CHECKING([for SWIG version]) [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] AC_MSG_RESULT([$swig_version]) if test -n "$swig_version" ; then # Calculate the required version number components [required=$1] [required_major=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_major" ; then [required_major=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_minor=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_minor" ; then [required_minor=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_patch=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_patch" ; then [required_patch=0] fi # Calculate the available version number components [available=$swig_version] [available_major=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_major" ; then [available_major=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_minor=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_minor" ; then [available_minor=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_patch=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_patch" ; then [available_patch=0] fi [badversion=0] if test $available_major -lt $required_major ; then [badversion=1] fi if test $available_major -eq $required_major \ -a $available_minor -lt $required_minor ; then [badversion=1] fi if test $available_major -eq $required_major \ -a $available_minor -eq $required_minor \ -a $available_patch -lt $required_patch ; then [badversion=1] fi if test $badversion -eq 1 ; then AC_MSG_WARN([SWIG version >= $1 is required. You have $swig_version. You should look at http://www.swig.org]) SWIG='echo "Error: SWIG version >= $1 is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false' else AC_MSG_NOTICE([SWIG executable is '$SWIG']) SWIG_LIB=`$SWIG -swiglib` AC_MSG_NOTICE([SWIG library directory is '$SWIG_LIB']) fi else AC_MSG_WARN([cannot determine SWIG version]) SWIG='echo "Error: Cannot determine SWIG version. You should look at http://www.swig.org" ; false' fi fi AC_SUBST([SWIG_LIB]) ]) unbound-1.13.1/iterator/0000755000175000017500000000000014010434640014530 5ustar wouterwouterunbound-1.13.1/iterator/iter_resptype.h0000644000175000017500000001046114010434640017601 0ustar wouterwouter/* * iterator/iter_resptype.h - response type information and classification. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file defines the response type. DNS Responses can be classified as * one of the response types. */ #ifndef ITERATOR_ITER_RESPTYPE_H #define ITERATOR_ITER_RESPTYPE_H struct dns_msg; struct query_info; struct delegpt; /** * The response type is used to interpret the response. */ enum response_type { /** * 'untyped' means that the type of this response hasn't been * assigned. */ RESPONSE_TYPE_UNTYPED = 0, /** * 'answer' means that the response terminates the resolution * process. */ RESPONSE_TYPE_ANSWER, /** 'delegation' means that the response is a delegation. */ RESPONSE_TYPE_REFERRAL, /** * 'cname' means that the response is a cname without the final * answer, and thus must be restarted. */ RESPONSE_TYPE_CNAME, /** * 'throwaway' means that this particular response should be * discarded and the next nameserver should be contacted */ RESPONSE_TYPE_THROWAWAY, /** * 'lame' means that this particular response indicates that * the nameserver knew nothing about the question. */ RESPONSE_TYPE_LAME, /** * Recursion lame means that the nameserver is some sort of * open recursor, and not authoritative for the question. * It may know something, but not authoritatively. */ RESPONSE_TYPE_REC_LAME }; /** * Classifies a response message from cache based on the current request. * Note that this routine assumes that THROWAWAY or LAME responses will not * occur. Also, it will not detect REFERRAL type messages, since those are * (currently) automatically classified based on how they came from the * cache (findDelegation() instead of lookup()). * * @param msg: the message from the cache. * @param request: the request that generated the response. * @return the response type (CNAME or ANSWER). */ enum response_type response_type_from_cache(struct dns_msg* msg, struct query_info* request); /** * Classifies a response message (from the wire) based on the current * request. * * NOTE: currently this routine uses the AA bit in the response to help * distinguish between some non-standard referrals and answers. It also * relies somewhat on the originating zone to be accurate (for lameness * detection, mostly). * * @param rdset: if RD bit was sent in query sent by unbound. * @param msg: the message from the cache. * @param request: the request that generated the response. * @param dp: The delegation point that was being queried * when the response was returned. * @return the response type (CNAME or ANSWER). */ enum response_type response_type_from_server(int rdset, struct dns_msg* msg, struct query_info* request, struct delegpt* dp); #endif /* ITERATOR_ITER_RESPTYPE_H */ unbound-1.13.1/iterator/iter_fwd.c0000644000175000017500000003220514010434640016501 0ustar wouterwouter/* * iterator/iter_fwd.c - iterative resolver module forward zones. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Keep track of forward zones and config settings. */ #include "config.h" #include "iterator/iter_fwd.h" #include "iterator/iter_delegpt.h" #include "util/log.h" #include "util/config_file.h" #include "util/net_help.h" #include "util/data/dname.h" #include "sldns/rrdef.h" #include "sldns/str2wire.h" int fwd_cmp(const void* k1, const void* k2) { int m; struct iter_forward_zone* n1 = (struct iter_forward_zone*)k1; struct iter_forward_zone* n2 = (struct iter_forward_zone*)k2; if(n1->dclass != n2->dclass) { if(n1->dclass < n2->dclass) return -1; return 1; } return dname_lab_cmp(n1->name, n1->namelabs, n2->name, n2->namelabs, &m); } struct iter_forwards* forwards_create(void) { struct iter_forwards* fwd = (struct iter_forwards*)calloc(1, sizeof(struct iter_forwards)); if(!fwd) return NULL; return fwd; } static void fwd_zone_free(struct iter_forward_zone* n) { if(!n) return; delegpt_free_mlc(n->dp); free(n->name); free(n); } static void delfwdnode(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct iter_forward_zone* node = (struct iter_forward_zone*)n; fwd_zone_free(node); } static void fwd_del_tree(struct iter_forwards* fwd) { if(fwd->tree) traverse_postorder(fwd->tree, &delfwdnode, NULL); free(fwd->tree); } void forwards_delete(struct iter_forwards* fwd) { if(!fwd) return; fwd_del_tree(fwd); free(fwd); } /** insert info into forward structure */ static int forwards_insert_data(struct iter_forwards* fwd, uint16_t c, uint8_t* nm, size_t nmlen, int nmlabs, struct delegpt* dp) { struct iter_forward_zone* node = (struct iter_forward_zone*)malloc( sizeof(struct iter_forward_zone)); if(!node) { delegpt_free_mlc(dp); return 0; } node->node.key = node; node->dclass = c; node->name = memdup(nm, nmlen); if(!node->name) { delegpt_free_mlc(dp); free(node); return 0; } node->namelen = nmlen; node->namelabs = nmlabs; node->dp = dp; if(!rbtree_insert(fwd->tree, &node->node)) { char buf[257]; dname_str(nm, buf); log_err("duplicate forward zone %s ignored.", buf); delegpt_free_mlc(dp); free(node->name); free(node); } return 1; } /** insert new info into forward structure given dp */ static int forwards_insert(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp) { return forwards_insert_data(fwd, c, dp->name, dp->namelen, dp->namelabs, dp); } /** initialise parent pointers in the tree */ static void fwd_init_parents(struct iter_forwards* fwd) { struct iter_forward_zone* node, *prev = NULL, *p; int m; RBTREE_FOR(node, struct iter_forward_zone*, fwd->tree) { node->parent = NULL; if(!prev || prev->dclass != node->dclass) { prev = node; continue; } (void)dname_lab_cmp(prev->name, prev->namelabs, node->name, node->namelabs, &m); /* we know prev is smaller */ /* sort order like: . com. bla.com. zwb.com. net. */ /* find the previous, or parent-parent-parent */ for(p = prev; p; p = p->parent) /* looking for name with few labels, a parent */ if(p->namelabs <= m) { /* ==: since prev matched m, this is closest*/ /* <: prev matches more, but is not a parent, * this one is a (grand)parent */ node->parent = p; break; } prev = node; } } /** set zone name */ static struct delegpt* read_fwds_name(struct config_stub* s) { struct delegpt* dp; uint8_t* dname; size_t dname_len; if(!s->name) { log_err("forward zone without a name (use name \".\" to forward everything)"); return NULL; } dname = sldns_str2wire_dname(s->name, &dname_len); if(!dname) { log_err("cannot parse forward zone name %s", s->name); return NULL; } if(!(dp=delegpt_create_mlc(dname))) { free(dname); log_err("out of memory"); return NULL; } free(dname); return dp; } /** set fwd host names */ static int read_fwds_host(struct config_stub* s, struct delegpt* dp) { struct config_strlist* p; uint8_t* dname; size_t dname_len; for(p = s->hosts; p; p = p->next) { log_assert(p->str); dname = sldns_str2wire_dname(p->str, &dname_len); if(!dname) { log_err("cannot parse forward %s server name: '%s'", s->name, p->str); return 0; } if(!delegpt_add_ns_mlc(dp, dname, 0)) { free(dname); log_err("out of memory"); return 0; } free(dname); } return 1; } /** set fwd server addresses */ static int read_fwds_addr(struct config_stub* s, struct delegpt* dp) { struct config_strlist* p; struct sockaddr_storage addr; socklen_t addrlen; char* tls_auth_name; for(p = s->addrs; p; p = p->next) { log_assert(p->str); if(!authextstrtoaddr(p->str, &addr, &addrlen, &tls_auth_name)) { log_err("cannot parse forward %s ip address: '%s'", s->name, p->str); return 0; } #if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) if(tls_auth_name) log_err("no name verification functionality in " "ssl library, ignored name for %s", p->str); #endif if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0, tls_auth_name)) { log_err("out of memory"); return 0; } } return 1; } /** read forwards config */ static int read_forwards(struct iter_forwards* fwd, struct config_file* cfg) { struct config_stub* s; for(s = cfg->forwards; s; s = s->next) { struct delegpt* dp; if(!(dp=read_fwds_name(s))) return 0; if(!read_fwds_host(s, dp) || !read_fwds_addr(s, dp)) { delegpt_free_mlc(dp); return 0; } /* set flag that parent side NS information is included. * Asking a (higher up) server on the internet is not useful */ /* the flag is turned off for 'forward-first' so that the * last resort will ask for parent-side NS record and thus * fallback to the internet name servers on a failure */ dp->has_parent_side_NS = (uint8_t)!s->isfirst; /* Do not cache if set. */ dp->no_cache = s->no_cache; /* use SSL for queries to this forwarder */ dp->ssl_upstream = (uint8_t)s->ssl_upstream; verbose(VERB_QUERY, "Forward zone server list:"); delegpt_log(VERB_QUERY, dp); if(!forwards_insert(fwd, LDNS_RR_CLASS_IN, dp)) return 0; } return 1; } /** insert a stub hole (if necessary) for stub name */ static int fwd_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) { struct iter_forward_zone key; key.node.key = &key; key.dclass = c; key.name = nm; key.namelabs = dname_count_size_labels(key.name, &key.namelen); return forwards_insert_data(fwd, key.dclass, key.name, key.namelen, key.namelabs, NULL); } /** make NULL entries for stubs */ static int make_stub_holes(struct iter_forwards* fwd, struct config_file* cfg) { struct config_stub* s; uint8_t* dname; size_t dname_len; for(s = cfg->stubs; s; s = s->next) { if(!s->name) continue; dname = sldns_str2wire_dname(s->name, &dname_len); if(!dname) { log_err("cannot parse stub name '%s'", s->name); return 0; } if(!fwd_add_stub_hole(fwd, LDNS_RR_CLASS_IN, dname)) { free(dname); log_err("out of memory"); return 0; } free(dname); } return 1; } int forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg) { fwd_del_tree(fwd); fwd->tree = rbtree_create(fwd_cmp); if(!fwd->tree) return 0; /* read forward zones */ if(!read_forwards(fwd, cfg)) return 0; if(!make_stub_holes(fwd, cfg)) return 0; fwd_init_parents(fwd); return 1; } struct delegpt* forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass) { rbnode_type* res = NULL; struct iter_forward_zone key; key.node.key = &key; key.dclass = qclass; key.name = qname; key.namelabs = dname_count_size_labels(qname, &key.namelen); res = rbtree_search(fwd->tree, &key); if(res) return ((struct iter_forward_zone*)res)->dp; return NULL; } struct delegpt* forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass) { /* lookup the forward zone in the tree */ rbnode_type* res = NULL; struct iter_forward_zone *result; struct iter_forward_zone key; key.node.key = &key; key.dclass = qclass; key.name = qname; key.namelabs = dname_count_size_labels(qname, &key.namelen); if(rbtree_find_less_equal(fwd->tree, &key, &res)) { /* exact */ result = (struct iter_forward_zone*)res; } else { /* smaller element (or no element) */ int m; result = (struct iter_forward_zone*)res; if(!result || result->dclass != qclass) return NULL; /* count number of labels matched */ (void)dname_lab_cmp(result->name, result->namelabs, key.name, key.namelabs, &m); while(result) { /* go up until qname is subdomain of stub */ if(result->namelabs <= m) break; result = result->parent; } } if(result) return result->dp; return NULL; } struct delegpt* forwards_lookup_root(struct iter_forwards* fwd, uint16_t qclass) { uint8_t root = 0; return forwards_lookup(fwd, &root, qclass); } int forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass) { struct iter_forward_zone key; rbnode_type* n; struct iter_forward_zone* p; if(*dclass == 0) { /* first root item is first item in tree */ n = rbtree_first(fwd->tree); if(n == RBTREE_NULL) return 0; p = (struct iter_forward_zone*)n; if(dname_is_root(p->name)) { *dclass = p->dclass; return 1; } /* root not first item? search for higher items */ *dclass = p->dclass + 1; return forwards_next_root(fwd, dclass); } /* find class n in tree, we may get a direct hit, or if we don't * this is the last item of the previous class so rbtree_next() takes * us to the next root (if any) */ key.node.key = &key; key.name = (uint8_t*)"\000"; key.namelen = 1; key.namelabs = 0; key.dclass = *dclass; n = NULL; if(rbtree_find_less_equal(fwd->tree, &key, &n)) { /* exact */ return 1; } else { /* smaller element */ if(!n || n == RBTREE_NULL) return 0; /* nothing found */ n = rbtree_next(n); if(n == RBTREE_NULL) return 0; /* no higher */ p = (struct iter_forward_zone*)n; if(dname_is_root(p->name)) { *dclass = p->dclass; return 1; } /* not a root node, return next higher item */ *dclass = p->dclass+1; return forwards_next_root(fwd, dclass); } } size_t forwards_get_mem(struct iter_forwards* fwd) { struct iter_forward_zone* p; size_t s; if(!fwd) return 0; s = sizeof(*fwd) + sizeof(*fwd->tree); RBTREE_FOR(p, struct iter_forward_zone*, fwd->tree) { s += sizeof(*p) + p->namelen + delegpt_get_mem(p->dp); } return s; } static struct iter_forward_zone* fwd_zone_find(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) { struct iter_forward_zone key; key.node.key = &key; key.dclass = c; key.name = nm; key.namelabs = dname_count_size_labels(nm, &key.namelen); return (struct iter_forward_zone*)rbtree_search(fwd->tree, &key); } int forwards_add_zone(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp) { struct iter_forward_zone *z; if((z=fwd_zone_find(fwd, c, dp->name)) != NULL) { (void)rbtree_delete(fwd->tree, &z->node); fwd_zone_free(z); } if(!forwards_insert(fwd, c, dp)) return 0; fwd_init_parents(fwd); return 1; } void forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) { struct iter_forward_zone *z; if(!(z=fwd_zone_find(fwd, c, nm))) return; /* nothing to do */ (void)rbtree_delete(fwd->tree, &z->node); fwd_zone_free(z); fwd_init_parents(fwd); } int forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) { if(!fwd_add_stub_hole(fwd, c, nm)) { return 0; } fwd_init_parents(fwd); return 1; } void forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) { struct iter_forward_zone *z; if(!(z=fwd_zone_find(fwd, c, nm))) return; /* nothing to do */ if(z->dp != NULL) return; /* not a stub hole */ (void)rbtree_delete(fwd->tree, &z->node); fwd_zone_free(z); fwd_init_parents(fwd); } unbound-1.13.1/iterator/iter_utils.c0000644000175000017500000012470414010434640017067 0ustar wouterwouter/* * iterator/iter_utils.c - iterative resolver module utility functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Configuration options. Forward zones. */ #include "config.h" #include "iterator/iter_utils.h" #include "iterator/iterator.h" #include "iterator/iter_hints.h" #include "iterator/iter_fwd.h" #include "iterator/iter_donotq.h" #include "iterator/iter_delegpt.h" #include "iterator/iter_priv.h" #include "services/cache/infra.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" #include "util/net_help.h" #include "util/module.h" #include "util/log.h" #include "util/config_file.h" #include "util/regional.h" #include "util/data/msgparse.h" #include "util/data/dname.h" #include "util/random.h" #include "util/fptr_wlist.h" #include "validator/val_anchor.h" #include "validator/val_kcache.h" #include "validator/val_kentry.h" #include "validator/val_utils.h" #include "validator/val_sigcrypt.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" /** time when nameserver glue is said to be 'recent' */ #define SUSPICION_RECENT_EXPIRY 86400 /** penalty to validation failed blacklisted IPs */ #define BLACKLIST_PENALTY (USEFUL_SERVER_TOP_TIMEOUT*4) /** fillup fetch policy array */ static void fetch_fill(struct iter_env* ie, const char* str) { char* s = (char*)str, *e; int i; for(i=0; imax_dependency_depth+1; i++) { ie->target_fetch_policy[i] = strtol(s, &e, 10); if(s == e) fatal_exit("cannot parse fetch policy number %s", s); s = e; } } /** Read config string that represents the target fetch policy */ static int read_fetch_policy(struct iter_env* ie, const char* str) { int count = cfg_count_numbers(str); if(count < 1) { log_err("Cannot parse target fetch policy: \"%s\"", str); return 0; } ie->max_dependency_depth = count - 1; ie->target_fetch_policy = (int*)calloc( (size_t)ie->max_dependency_depth+1, sizeof(int)); if(!ie->target_fetch_policy) { log_err("alloc fetch policy: out of memory"); return 0; } fetch_fill(ie, str); return 1; } /** apply config caps whitelist items to name tree */ static int caps_white_apply_cfg(rbtree_type* ntree, struct config_file* cfg) { struct config_strlist* p; for(p=cfg->caps_whitelist; p; p=p->next) { struct name_tree_node* n; size_t len; uint8_t* nm = sldns_str2wire_dname(p->str, &len); if(!nm) { log_err("could not parse %s", p->str); return 0; } n = (struct name_tree_node*)calloc(1, sizeof(*n)); if(!n) { log_err("out of memory"); free(nm); return 0; } n->node.key = n; n->name = nm; n->len = len; n->labs = dname_count_labels(nm); n->dclass = LDNS_RR_CLASS_IN; if(!name_tree_insert(ntree, n, nm, len, n->labs, n->dclass)) { /* duplicate element ignored, idempotent */ free(n->name); free(n); } } name_tree_init_parents(ntree); return 1; } int iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg) { int i; /* target fetch policy */ if(!read_fetch_policy(iter_env, cfg->target_fetch_policy)) return 0; for(i=0; imax_dependency_depth+1; i++) verbose(VERB_QUERY, "target fetch policy for level %d is %d", i, iter_env->target_fetch_policy[i]); if(!iter_env->donotq) iter_env->donotq = donotq_create(); if(!iter_env->donotq || !donotq_apply_cfg(iter_env->donotq, cfg)) { log_err("Could not set donotqueryaddresses"); return 0; } if(!iter_env->priv) iter_env->priv = priv_create(); if(!iter_env->priv || !priv_apply_cfg(iter_env->priv, cfg)) { log_err("Could not set private addresses"); return 0; } if(cfg->caps_whitelist) { if(!iter_env->caps_white) iter_env->caps_white = rbtree_create(name_tree_compare); if(!iter_env->caps_white || !caps_white_apply_cfg( iter_env->caps_white, cfg)) { log_err("Could not set capsforid whitelist"); return 0; } } iter_env->supports_ipv6 = cfg->do_ip6; iter_env->supports_ipv4 = cfg->do_ip4; return 1; } /** filter out unsuitable targets * @param iter_env: iterator environment with ipv6-support flag. * @param env: module environment with infra cache. * @param name: zone name * @param namelen: length of name * @param qtype: query type (host order). * @param now: current time * @param a: address in delegation point we are examining. * @return an integer that signals the target suitability. * as follows: * -1: The address should be omitted from the list. * Because: * o The address is bogus (DNSSEC validation failure). * o Listed as donotquery * o is ipv6 but no ipv6 support (in operating system). * o is ipv4 but no ipv4 support (in operating system). * o is lame * Otherwise, an rtt in milliseconds. * 0 .. USEFUL_SERVER_TOP_TIMEOUT-1 * The roundtrip time timeout estimate. less than 2 minutes. * Note that util/rtt.c has a MIN_TIMEOUT of 50 msec, thus * values 0 .. 49 are not used, unless that is changed. * USEFUL_SERVER_TOP_TIMEOUT * This value exactly is given for unresponsive blacklisted. * USEFUL_SERVER_TOP_TIMEOUT+1 * For non-blacklisted servers: huge timeout, but has traffic. * USEFUL_SERVER_TOP_TIMEOUT*1 .. * parent-side lame servers get this penalty. A dispreferential * server. (lame in delegpt). * USEFUL_SERVER_TOP_TIMEOUT*2 .. * dnsseclame servers get penalty * USEFUL_SERVER_TOP_TIMEOUT*3 .. * recursion lame servers get penalty * UNKNOWN_SERVER_NICENESS * If no information is known about the server, this is * returned. 376 msec or so. * +BLACKLIST_PENALTY (of USEFUL_TOP_TIMEOUT*4) for dnssec failed IPs. * * When a final value is chosen that is dnsseclame ; dnsseclameness checking * is turned off (so we do not discard the reply). * When a final value is chosen that is recursionlame; RD bit is set on query. * Because of the numbers this means recursionlame also have dnssec lameness * checking turned off. */ static int iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env, uint8_t* name, size_t namelen, uint16_t qtype, time_t now, struct delegpt_addr* a) { int rtt, lame, reclame, dnsseclame; if(a->bogus) return -1; /* address of server is bogus */ if(donotq_lookup(iter_env->donotq, &a->addr, a->addrlen)) { log_addr(VERB_ALGO, "skip addr on the donotquery list", &a->addr, a->addrlen); return -1; /* server is on the donotquery list */ } if(!iter_env->supports_ipv6 && addr_is_ip6(&a->addr, a->addrlen)) { return -1; /* there is no ip6 available */ } if(!iter_env->supports_ipv4 && !addr_is_ip6(&a->addr, a->addrlen)) { return -1; /* there is no ip4 available */ } /* check lameness - need zone , class info */ if(infra_get_lame_rtt(env->infra_cache, &a->addr, a->addrlen, name, namelen, qtype, &lame, &dnsseclame, &reclame, &rtt, now)) { log_addr(VERB_ALGO, "servselect", &a->addr, a->addrlen); verbose(VERB_ALGO, " rtt=%d%s%s%s%s", rtt, lame?" LAME":"", dnsseclame?" DNSSEC_LAME":"", reclame?" REC_LAME":"", a->lame?" ADDR_LAME":""); if(lame) return -1; /* server is lame */ else if(rtt >= USEFUL_SERVER_TOP_TIMEOUT) /* server is unresponsive, * we used to return TOP_TIMEOUT, but fairly useless, * because if == TOP_TIMEOUT is dropped because * blacklisted later, instead, remove it here, so * other choices (that are not blacklisted) can be * tried */ return -1; /* select remainder from worst to best */ else if(reclame) return rtt+USEFUL_SERVER_TOP_TIMEOUT*3; /* nonpref */ else if(dnsseclame || a->dnsseclame) return rtt+USEFUL_SERVER_TOP_TIMEOUT*2; /* nonpref */ else if(a->lame) return rtt+USEFUL_SERVER_TOP_TIMEOUT+1; /* nonpref */ else return rtt; } /* no server information present */ if(a->dnsseclame) return UNKNOWN_SERVER_NICENESS+USEFUL_SERVER_TOP_TIMEOUT*2; /* nonpref */ else if(a->lame) return USEFUL_SERVER_TOP_TIMEOUT+1+UNKNOWN_SERVER_NICENESS; /* nonpref */ return UNKNOWN_SERVER_NICENESS; } /** lookup RTT information, and also store fastest rtt (if any) */ static int iter_fill_rtt(struct iter_env* iter_env, struct module_env* env, uint8_t* name, size_t namelen, uint16_t qtype, time_t now, struct delegpt* dp, int* best_rtt, struct sock_list* blacklist, size_t* num_suitable_results) { int got_it = 0; struct delegpt_addr* a; *num_suitable_results = 0; if(dp->bogus) return 0; /* NS bogus, all bogus, nothing found */ for(a=dp->result_list; a; a = a->next_result) { a->sel_rtt = iter_filter_unsuitable(iter_env, env, name, namelen, qtype, now, a); if(a->sel_rtt != -1) { if(sock_list_find(blacklist, &a->addr, a->addrlen)) a->sel_rtt += BLACKLIST_PENALTY; if(!got_it) { *best_rtt = a->sel_rtt; got_it = 1; } else if(a->sel_rtt < *best_rtt) { *best_rtt = a->sel_rtt; } (*num_suitable_results)++; } } return got_it; } /** compare two rtts, return -1, 0 or 1 */ static int rtt_compare(const void* x, const void* y) { if(*(int*)x == *(int*)y) return 0; if(*(int*)x > *(int*)y) return 1; return -1; } /** get RTT for the Nth fastest server */ static int nth_rtt(struct delegpt_addr* result_list, size_t num_results, size_t n) { int rtt_band; size_t i; int* rtt_list, *rtt_index; if(num_results < 1 || n >= num_results) { return -1; } rtt_list = calloc(num_results, sizeof(int)); if(!rtt_list) { log_err("malloc failure: allocating rtt_list"); return -1; } rtt_index = rtt_list; for(i=0; isel_rtt != -1) { *rtt_index = result_list->sel_rtt; rtt_index++; } result_list=result_list->next_result; } qsort(rtt_list, num_results, sizeof(*rtt_list), rtt_compare); log_assert(n > 0); rtt_band = rtt_list[n-1]; free(rtt_list); return rtt_band; } /** filter the address list, putting best targets at front, * returns number of best targets (or 0, no suitable targets) */ static int iter_filter_order(struct iter_env* iter_env, struct module_env* env, uint8_t* name, size_t namelen, uint16_t qtype, time_t now, struct delegpt* dp, int* selected_rtt, int open_target, struct sock_list* blacklist, time_t prefetch) { int got_num = 0, low_rtt = 0, swap_to_front, rtt_band = RTT_BAND, nth; size_t num_results; struct delegpt_addr* a, *n, *prev=NULL; /* fillup sel_rtt and find best rtt in the bunch */ got_num = iter_fill_rtt(iter_env, env, name, namelen, qtype, now, dp, &low_rtt, blacklist, &num_results); if(got_num == 0) return 0; if(low_rtt >= USEFUL_SERVER_TOP_TIMEOUT && (delegpt_count_missing_targets(dp) > 0 || open_target > 0)) { verbose(VERB_ALGO, "Bad choices, trying to get more choice"); return 0; /* we want more choice. The best choice is a bad one. return 0 to force the caller to fetch more */ } if(env->cfg->fast_server_permil != 0 && prefetch == 0 && num_results > env->cfg->fast_server_num && ub_random_max(env->rnd, 1000) < env->cfg->fast_server_permil) { /* the query is not prefetch, but for a downstream client, * there are more servers available then the fastest N we want * to choose from. Limit our choice to the fastest servers. */ nth = nth_rtt(dp->result_list, num_results, env->cfg->fast_server_num); if(nth > 0) { rtt_band = nth - low_rtt; if(rtt_band > RTT_BAND) rtt_band = RTT_BAND; } } got_num = 0; a = dp->result_list; while(a) { /* skip unsuitable targets */ if(a->sel_rtt == -1) { prev = a; a = a->next_result; continue; } /* classify the server address and determine what to do */ swap_to_front = 0; if(a->sel_rtt >= low_rtt && a->sel_rtt - low_rtt <= rtt_band) { got_num++; swap_to_front = 1; } else if(a->sel_rttsel_rtt<=rtt_band) { got_num++; swap_to_front = 1; } /* swap to front if necessary, or move to next result */ if(swap_to_front && prev) { n = a->next_result; prev->next_result = n; a->next_result = dp->result_list; dp->result_list = a; a = n; } else { prev = a; a = a->next_result; } } *selected_rtt = low_rtt; if (env->cfg->prefer_ip6) { int got_num6 = 0; int low_rtt6 = 0; int i; int attempt = -1; /* filter to make sure addresses have less attempts on them than the first, to force round robin when all the IPv6 addresses fail */ int num4ok = 0; /* number ip4 at low attempt count */ int num4_lowrtt = 0; prev = NULL; a = dp->result_list; for(i = 0; i < got_num; i++) { swap_to_front = 0; if(a->addr.ss_family != AF_INET6 && attempt == -1) { /* if we only have ip4 at low attempt count, * then ip6 is failing, and we need to * select one of the remaining IPv4 addrs */ attempt = a->attempts; num4ok++; num4_lowrtt = a->sel_rtt; } else if(a->addr.ss_family != AF_INET6 && attempt == a->attempts) { num4ok++; if(num4_lowrtt == 0 || a->sel_rtt < num4_lowrtt) { num4_lowrtt = a->sel_rtt; } } if(a->addr.ss_family == AF_INET6) { if(attempt == -1) { attempt = a->attempts; } else if(a->attempts > attempt) { break; } got_num6++; swap_to_front = 1; if(low_rtt6 == 0 || a->sel_rtt < low_rtt6) { low_rtt6 = a->sel_rtt; } } /* swap to front if IPv6, or move to next result */ if(swap_to_front && prev) { n = a->next_result; prev->next_result = n; a->next_result = dp->result_list; dp->result_list = a; a = n; } else { prev = a; a = a->next_result; } } if(got_num6 > 0) { got_num = got_num6; *selected_rtt = low_rtt6; } else if(num4ok > 0) { got_num = num4ok; *selected_rtt = num4_lowrtt; } } else if (env->cfg->prefer_ip4) { int got_num4 = 0; int low_rtt4 = 0; int i; int attempt = -1; /* filter to make sure addresses have less attempts on them than the first, to force round robin when all the IPv4 addresses fail */ int num6ok = 0; /* number ip6 at low attempt count */ int num6_lowrtt = 0; prev = NULL; a = dp->result_list; for(i = 0; i < got_num; i++) { swap_to_front = 0; if(a->addr.ss_family != AF_INET && attempt == -1) { /* if we only have ip6 at low attempt count, * then ip4 is failing, and we need to * select one of the remaining IPv6 addrs */ attempt = a->attempts; num6ok++; num6_lowrtt = a->sel_rtt; } else if(a->addr.ss_family != AF_INET && attempt == a->attempts) { num6ok++; if(num6_lowrtt == 0 || a->sel_rtt < num6_lowrtt) { num6_lowrtt = a->sel_rtt; } } if(a->addr.ss_family == AF_INET) { if(attempt == -1) { attempt = a->attempts; } else if(a->attempts > attempt) { break; } got_num4++; swap_to_front = 1; if(low_rtt4 == 0 || a->sel_rtt < low_rtt4) { low_rtt4 = a->sel_rtt; } } /* swap to front if IPv4, or move to next result */ if(swap_to_front && prev) { n = a->next_result; prev->next_result = n; a->next_result = dp->result_list; dp->result_list = a; a = n; } else { prev = a; a = a->next_result; } } if(got_num4 > 0) { got_num = got_num4; *selected_rtt = low_rtt4; } else if(num6ok > 0) { got_num = num6ok; *selected_rtt = num6_lowrtt; } } return got_num; } struct delegpt_addr* iter_server_selection(struct iter_env* iter_env, struct module_env* env, struct delegpt* dp, uint8_t* name, size_t namelen, uint16_t qtype, int* dnssec_lame, int* chase_to_rd, int open_target, struct sock_list* blacklist, time_t prefetch) { int sel; int selrtt; struct delegpt_addr* a, *prev; int num = iter_filter_order(iter_env, env, name, namelen, qtype, *env->now, dp, &selrtt, open_target, blacklist, prefetch); if(num == 0) return NULL; verbose(VERB_ALGO, "selrtt %d", selrtt); if(selrtt > BLACKLIST_PENALTY) { if(selrtt-BLACKLIST_PENALTY > USEFUL_SERVER_TOP_TIMEOUT*3) { verbose(VERB_ALGO, "chase to " "blacklisted recursion lame server"); *chase_to_rd = 1; } if(selrtt-BLACKLIST_PENALTY > USEFUL_SERVER_TOP_TIMEOUT*2) { verbose(VERB_ALGO, "chase to " "blacklisted dnssec lame server"); *dnssec_lame = 1; } } else { if(selrtt > USEFUL_SERVER_TOP_TIMEOUT*3) { verbose(VERB_ALGO, "chase to recursion lame server"); *chase_to_rd = 1; } if(selrtt > USEFUL_SERVER_TOP_TIMEOUT*2) { verbose(VERB_ALGO, "chase to dnssec lame server"); *dnssec_lame = 1; } if(selrtt == USEFUL_SERVER_TOP_TIMEOUT) { verbose(VERB_ALGO, "chase to blacklisted lame server"); return NULL; } } if(num == 1) { a = dp->result_list; if(++a->attempts < OUTBOUND_MSG_RETRY) return a; dp->result_list = a->next_result; return a; } /* randomly select a target from the list */ log_assert(num > 1); /* grab secure random number, to pick unexpected server. * also we need it to be threadsafe. */ sel = ub_random_max(env->rnd, num); a = dp->result_list; prev = NULL; while(sel > 0 && a) { prev = a; a = a->next_result; sel--; } if(!a) /* robustness */ return NULL; if(++a->attempts < OUTBOUND_MSG_RETRY) return a; /* remove it from the delegation point result list */ if(prev) prev->next_result = a->next_result; else dp->result_list = a->next_result; return a; } struct dns_msg* dns_alloc_msg(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region) { struct dns_msg* m = (struct dns_msg*)regional_alloc(region, sizeof(struct dns_msg)); if(!m) return NULL; memset(m, 0, sizeof(*m)); if(!parse_create_msg(pkt, msg, NULL, &m->qinfo, &m->rep, region)) { log_err("malloc failure: allocating incoming dns_msg"); return NULL; } return m; } struct dns_msg* dns_copy_msg(struct dns_msg* from, struct regional* region) { struct dns_msg* m = (struct dns_msg*)regional_alloc(region, sizeof(struct dns_msg)); if(!m) return NULL; m->qinfo = from->qinfo; if(!(m->qinfo.qname = regional_alloc_init(region, from->qinfo.qname, from->qinfo.qname_len))) return NULL; if(!(m->rep = reply_info_copy(from->rep, NULL, region))) return NULL; return m; } void iter_dns_store(struct module_env* env, struct query_info* msgqinf, struct reply_info* msgrep, int is_referral, time_t leeway, int pside, struct regional* region, uint16_t flags) { if(!dns_cache_store(env, msgqinf, msgrep, is_referral, leeway, pside, region, flags)) log_err("out of memory: cannot store data in cache"); } int iter_ns_probability(struct ub_randstate* rnd, int n, int m) { int sel; if(n == m) /* 100% chance */ return 1; /* we do not need secure random numbers here, but * we do need it to be threadsafe, so we use this */ sel = ub_random_max(rnd, m); return (sel < n); } /** detect dependency cycle for query and target */ static int causes_cycle(struct module_qstate* qstate, uint8_t* name, size_t namelen, uint16_t t, uint16_t c) { struct query_info qinf; qinf.qname = name; qinf.qname_len = namelen; qinf.qtype = t; qinf.qclass = c; qinf.local_alias = NULL; fptr_ok(fptr_whitelist_modenv_detect_cycle( qstate->env->detect_cycle)); return (*qstate->env->detect_cycle)(qstate, &qinf, (uint16_t)(BIT_RD|BIT_CD), qstate->is_priming, qstate->is_valrec); } void iter_mark_cycle_targets(struct module_qstate* qstate, struct delegpt* dp) { struct delegpt_ns* ns; for(ns = dp->nslist; ns; ns = ns->next) { if(ns->resolved) continue; /* see if this ns as target causes dependency cycle */ if(causes_cycle(qstate, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qstate->qinfo.qclass) || causes_cycle(qstate, ns->name, ns->namelen, LDNS_RR_TYPE_A, qstate->qinfo.qclass)) { log_nametypeclass(VERB_QUERY, "skipping target due " "to dependency cycle (harden-glue: no may " "fix some of the cycles)", ns->name, LDNS_RR_TYPE_A, qstate->qinfo.qclass); ns->resolved = 1; } } } void iter_mark_pside_cycle_targets(struct module_qstate* qstate, struct delegpt* dp) { struct delegpt_ns* ns; for(ns = dp->nslist; ns; ns = ns->next) { if(ns->done_pside4 && ns->done_pside6) continue; /* see if this ns as target causes dependency cycle */ if(causes_cycle(qstate, ns->name, ns->namelen, LDNS_RR_TYPE_A, qstate->qinfo.qclass)) { log_nametypeclass(VERB_QUERY, "skipping target due " "to dependency cycle", ns->name, LDNS_RR_TYPE_A, qstate->qinfo.qclass); ns->done_pside4 = 1; } if(causes_cycle(qstate, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qstate->qinfo.qclass)) { log_nametypeclass(VERB_QUERY, "skipping target due " "to dependency cycle", ns->name, LDNS_RR_TYPE_AAAA, qstate->qinfo.qclass); ns->done_pside6 = 1; } } } int iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags, struct delegpt* dp) { struct delegpt_ns* ns; /* check: * o RD qflag is on. * o no addresses are provided. * o all NS items are required glue. * OR * o RD qflag is on. * o no addresses are provided. * o the query is for one of the nameservers in dp, * and that nameserver is a glue-name for this dp. */ if(!(qflags&BIT_RD)) return 0; /* either available or unused targets */ if(dp->usable_list || dp->result_list) return 0; /* see if query is for one of the nameservers, which is glue */ if( (qinfo->qtype == LDNS_RR_TYPE_A || qinfo->qtype == LDNS_RR_TYPE_AAAA) && dname_subdomain_c(qinfo->qname, dp->name) && delegpt_find_ns(dp, qinfo->qname, qinfo->qname_len)) return 1; for(ns = dp->nslist; ns; ns = ns->next) { if(ns->resolved) /* skip failed targets */ continue; if(!dname_subdomain_c(ns->name, dp->name)) return 0; /* one address is not required glue */ } return 1; } int iter_qname_indicates_dnssec(struct module_env* env, struct query_info *qinfo) { struct trust_anchor* a; if(!env || !env->anchors || !qinfo || !qinfo->qname) return 0; /* a trust anchor exists above the name? */ if((a=anchors_lookup(env->anchors, qinfo->qname, qinfo->qname_len, qinfo->qclass))) { if(a->numDS == 0 && a->numDNSKEY == 0) { /* insecure trust point */ lock_basic_unlock(&a->lock); return 0; } lock_basic_unlock(&a->lock); return 1; } /* no trust anchor above it. */ return 0; } int iter_indicates_dnssec(struct module_env* env, struct delegpt* dp, struct dns_msg* msg, uint16_t dclass) { struct trust_anchor* a; /* information not available, !env->anchors can be common */ if(!env || !env->anchors || !dp || !dp->name) return 0; /* a trust anchor exists with this name, RRSIGs expected */ if((a=anchor_find(env->anchors, dp->name, dp->namelabs, dp->namelen, dclass))) { if(a->numDS == 0 && a->numDNSKEY == 0) { /* insecure trust point */ lock_basic_unlock(&a->lock); return 0; } lock_basic_unlock(&a->lock); return 1; } /* see if DS rrset was given, in AUTH section */ if(msg && msg->rep && reply_find_rrset_section_ns(msg->rep, dp->name, dp->namelen, LDNS_RR_TYPE_DS, dclass)) return 1; /* look in key cache */ if(env->key_cache) { struct key_entry_key* kk = key_cache_obtain(env->key_cache, dp->name, dp->namelen, dclass, env->scratch, *env->now); if(kk) { if(query_dname_compare(kk->name, dp->name) == 0) { if(key_entry_isgood(kk) || key_entry_isbad(kk)) { regional_free_all(env->scratch); return 1; } else if(key_entry_isnull(kk)) { regional_free_all(env->scratch); return 0; } } regional_free_all(env->scratch); } } return 0; } int iter_msg_has_dnssec(struct dns_msg* msg) { size_t i; if(!msg || !msg->rep) return 0; for(i=0; irep->an_numrrsets + msg->rep->ns_numrrsets; i++) { if(((struct packed_rrset_data*)msg->rep->rrsets[i]-> entry.data)->rrsig_count > 0) return 1; } /* empty message has no DNSSEC info, with DNSSEC the reply is * not empty (NSEC) */ return 0; } int iter_msg_from_zone(struct dns_msg* msg, struct delegpt* dp, enum response_type type, uint16_t dclass) { if(!msg || !dp || !msg->rep || !dp->name) return 0; /* SOA RRset - always from reply zone */ if(reply_find_rrset_section_an(msg->rep, dp->name, dp->namelen, LDNS_RR_TYPE_SOA, dclass) || reply_find_rrset_section_ns(msg->rep, dp->name, dp->namelen, LDNS_RR_TYPE_SOA, dclass)) return 1; if(type == RESPONSE_TYPE_REFERRAL) { size_t i; /* if it adds a single label, i.e. we expect .com, * and referral to example.com. NS ... , then origin zone * is .com. For a referral to sub.example.com. NS ... then * we do not know, since example.com. may be in between. */ for(i=0; irep->an_numrrsets+msg->rep->ns_numrrsets; i++) { struct ub_packed_rrset_key* s = msg->rep->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_NS && ntohs(s->rk.rrset_class) == dclass) { int l = dname_count_labels(s->rk.dname); if(l == dp->namelabs + 1 && dname_strict_subdomain(s->rk.dname, l, dp->name, dp->namelabs)) return 1; } } return 0; } log_assert(type==RESPONSE_TYPE_ANSWER || type==RESPONSE_TYPE_CNAME); /* not a referral, and not lame delegation (upwards), so, * any NS rrset must be from the zone itself */ if(reply_find_rrset_section_an(msg->rep, dp->name, dp->namelen, LDNS_RR_TYPE_NS, dclass) || reply_find_rrset_section_ns(msg->rep, dp->name, dp->namelen, LDNS_RR_TYPE_NS, dclass)) return 1; /* a DNSKEY set is expected at the zone apex as well */ /* this is for 'minimal responses' for DNSKEYs */ if(reply_find_rrset_section_an(msg->rep, dp->name, dp->namelen, LDNS_RR_TYPE_DNSKEY, dclass)) return 1; return 0; } /** * check equality of two rrsets * @param k1: rrset * @param k2: rrset * @return true if equal */ static int rrset_equal(struct ub_packed_rrset_key* k1, struct ub_packed_rrset_key* k2) { struct packed_rrset_data* d1 = (struct packed_rrset_data*) k1->entry.data; struct packed_rrset_data* d2 = (struct packed_rrset_data*) k2->entry.data; size_t i, t; if(k1->rk.dname_len != k2->rk.dname_len || k1->rk.flags != k2->rk.flags || k1->rk.type != k2->rk.type || k1->rk.rrset_class != k2->rk.rrset_class || query_dname_compare(k1->rk.dname, k2->rk.dname) != 0) return 0; if( /* do not check ttl: d1->ttl != d2->ttl || */ d1->count != d2->count || d1->rrsig_count != d2->rrsig_count || d1->trust != d2->trust || d1->security != d2->security) return 0; t = d1->count + d1->rrsig_count; for(i=0; irr_len[i] != d2->rr_len[i] || /* no ttl check: d1->rr_ttl[i] != d2->rr_ttl[i] ||*/ memcmp(d1->rr_data[i], d2->rr_data[i], d1->rr_len[i]) != 0) return 0; } return 1; } /** compare rrsets and sort canonically. Compares rrset name, type, class. * return 0 if equal, +1 if x > y, and -1 if x < y. */ static int rrset_canonical_sort_cmp(const void* x, const void* y) { struct ub_packed_rrset_key* rrx = *(struct ub_packed_rrset_key**)x; struct ub_packed_rrset_key* rry = *(struct ub_packed_rrset_key**)y; int r = dname_canonical_compare(rrx->rk.dname, rry->rk.dname); if(r != 0) return r; if(rrx->rk.type != rry->rk.type) { if(ntohs(rrx->rk.type) > ntohs(rry->rk.type)) return 1; else return -1; } if(rrx->rk.rrset_class != rry->rk.rrset_class) { if(ntohs(rrx->rk.rrset_class) > ntohs(rry->rk.rrset_class)) return 1; else return -1; } return 0; } int reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region) { size_t i; struct ub_packed_rrset_key** sorted_p, **sorted_q; if(p->flags != q->flags || p->qdcount != q->qdcount || /* do not check TTL, this may differ */ /* p->ttl != q->ttl || p->prefetch_ttl != q->prefetch_ttl || */ p->security != q->security || p->an_numrrsets != q->an_numrrsets || p->ns_numrrsets != q->ns_numrrsets || p->ar_numrrsets != q->ar_numrrsets || p->rrset_count != q->rrset_count) return 0; /* sort the rrsets in the authority and additional sections before * compare, the query and answer sections are ordered in the sequence * they should have (eg. one after the other for aliases). */ sorted_p = (struct ub_packed_rrset_key**)regional_alloc_init( region, p->rrsets, sizeof(*sorted_p)*p->rrset_count); if(!sorted_p) return 0; log_assert(p->an_numrrsets + p->ns_numrrsets + p->ar_numrrsets <= p->rrset_count); qsort(sorted_p + p->an_numrrsets, p->ns_numrrsets, sizeof(*sorted_p), rrset_canonical_sort_cmp); qsort(sorted_p + p->an_numrrsets + p->ns_numrrsets, p->ar_numrrsets, sizeof(*sorted_p), rrset_canonical_sort_cmp); sorted_q = (struct ub_packed_rrset_key**)regional_alloc_init( region, q->rrsets, sizeof(*sorted_q)*q->rrset_count); if(!sorted_q) { regional_free_all(region); return 0; } log_assert(q->an_numrrsets + q->ns_numrrsets + q->ar_numrrsets <= q->rrset_count); qsort(sorted_q + q->an_numrrsets, q->ns_numrrsets, sizeof(*sorted_q), rrset_canonical_sort_cmp); qsort(sorted_q + q->an_numrrsets + q->ns_numrrsets, q->ar_numrrsets, sizeof(*sorted_q), rrset_canonical_sort_cmp); /* compare the rrsets */ for(i=0; irrset_count; i++) { if(!rrset_equal(sorted_p[i], sorted_q[i])) { if(!rrset_canonical_equal(region, sorted_p[i], sorted_q[i])) { regional_free_all(region); return 0; } } } regional_free_all(region); return 1; } void caps_strip_reply(struct reply_info* rep) { size_t i; if(!rep) return; /* see if message is a referral, in which case the additional and * NS record cannot be removed */ /* referrals have the AA flag unset (strict check, not elsewhere in * unbound, but for 0x20 this is very convenient). */ if(!(rep->flags&BIT_AA)) return; /* remove the additional section from the reply */ if(rep->ar_numrrsets != 0) { verbose(VERB_ALGO, "caps fallback: removing additional section"); rep->rrset_count -= rep->ar_numrrsets; rep->ar_numrrsets = 0; } /* is there an NS set in the authority section to remove? */ /* the failure case (Cisco firewalls) only has one rrset in authsec */ for(i=rep->an_numrrsets; ian_numrrsets+rep->ns_numrrsets; i++) { struct ub_packed_rrset_key* s = rep->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_NS) { /* remove NS rrset and break from loop (loop limits * have changed) */ /* move last rrset into this position (there is no * additional section any more) */ verbose(VERB_ALGO, "caps fallback: removing NS rrset"); if(i < rep->rrset_count-1) rep->rrsets[i]=rep->rrsets[rep->rrset_count-1]; rep->rrset_count --; rep->ns_numrrsets --; break; } } } int caps_failed_rcode(struct reply_info* rep) { return !(FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR || FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN); } void iter_store_parentside_rrset(struct module_env* env, struct ub_packed_rrset_key* rrset) { struct rrset_ref ref; rrset = packed_rrset_copy_alloc(rrset, env->alloc, *env->now); if(!rrset) { log_err("malloc failure in store_parentside_rrset"); return; } rrset->rk.flags |= PACKED_RRSET_PARENT_SIDE; rrset->entry.hash = rrset_key_hash(&rrset->rk); ref.key = rrset; ref.id = rrset->id; /* ignore ret: if it was in the cache, ref updated */ (void)rrset_cache_update(env->rrset_cache, &ref, env->alloc, *env->now); } /** fetch NS record from reply, if any */ static struct ub_packed_rrset_key* reply_get_NS_rrset(struct reply_info* rep) { size_t i; for(i=0; irrset_count; i++) { if(rep->rrsets[i]->rk.type == htons(LDNS_RR_TYPE_NS)) { return rep->rrsets[i]; } } return NULL; } void iter_store_parentside_NS(struct module_env* env, struct reply_info* rep) { struct ub_packed_rrset_key* rrset = reply_get_NS_rrset(rep); if(rrset) { log_rrset_key(VERB_ALGO, "store parent-side NS", rrset); iter_store_parentside_rrset(env, rrset); } } void iter_store_parentside_neg(struct module_env* env, struct query_info* qinfo, struct reply_info* rep) { /* TTL: NS from referral in iq->deleg_msg, * or first RR from iq->response, * or servfail5secs if !iq->response */ time_t ttl = NORR_TTL; struct ub_packed_rrset_key* neg; struct packed_rrset_data* newd; if(rep) { struct ub_packed_rrset_key* rrset = reply_get_NS_rrset(rep); if(!rrset && rep->rrset_count != 0) rrset = rep->rrsets[0]; if(rrset) ttl = ub_packed_rrset_ttl(rrset); } /* create empty rrset to store */ neg = (struct ub_packed_rrset_key*)regional_alloc(env->scratch, sizeof(struct ub_packed_rrset_key)); if(!neg) { log_err("out of memory in store_parentside_neg"); return; } memset(&neg->entry, 0, sizeof(neg->entry)); neg->entry.key = neg; neg->rk.type = htons(qinfo->qtype); neg->rk.rrset_class = htons(qinfo->qclass); neg->rk.flags = 0; neg->rk.dname = regional_alloc_init(env->scratch, qinfo->qname, qinfo->qname_len); if(!neg->rk.dname) { log_err("out of memory in store_parentside_neg"); return; } neg->rk.dname_len = qinfo->qname_len; neg->entry.hash = rrset_key_hash(&neg->rk); newd = (struct packed_rrset_data*)regional_alloc_zero(env->scratch, sizeof(struct packed_rrset_data) + sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t) + sizeof(uint16_t)); if(!newd) { log_err("out of memory in store_parentside_neg"); return; } neg->entry.data = newd; newd->ttl = ttl; /* entry must have one RR, otherwise not valid in cache. * put in one RR with empty rdata: those are ignored as nameserver */ newd->count = 1; newd->rrsig_count = 0; newd->trust = rrset_trust_ans_noAA; newd->rr_len = (size_t*)((uint8_t*)newd + sizeof(struct packed_rrset_data)); newd->rr_len[0] = 0 /* zero len rdata */ + sizeof(uint16_t); packed_rrset_ptr_fixup(newd); newd->rr_ttl[0] = newd->ttl; sldns_write_uint16(newd->rr_data[0], 0 /* zero len rdata */); /* store it */ log_rrset_key(VERB_ALGO, "store parent-side negative", neg); iter_store_parentside_rrset(env, neg); } int iter_lookup_parent_NS_from_cache(struct module_env* env, struct delegpt* dp, struct regional* region, struct query_info* qinfo) { struct ub_packed_rrset_key* akey; akey = rrset_cache_lookup(env->rrset_cache, dp->name, dp->namelen, LDNS_RR_TYPE_NS, qinfo->qclass, PACKED_RRSET_PARENT_SIDE, *env->now, 0); if(akey) { log_rrset_key(VERB_ALGO, "found parent-side NS in cache", akey); dp->has_parent_side_NS = 1; /* and mark the new names as lame */ if(!delegpt_rrset_add_ns(dp, region, akey, 1)) { lock_rw_unlock(&akey->entry.lock); return 0; } lock_rw_unlock(&akey->entry.lock); } return 1; } int iter_lookup_parent_glue_from_cache(struct module_env* env, struct delegpt* dp, struct regional* region, struct query_info* qinfo) { struct ub_packed_rrset_key* akey; struct delegpt_ns* ns; size_t num = delegpt_count_targets(dp); for(ns = dp->nslist; ns; ns = ns->next) { /* get cached parentside A */ akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qinfo->qclass, PACKED_RRSET_PARENT_SIDE, *env->now, 0); if(akey) { log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside4 = 1; /* a negative-cache-element has no addresses it adds */ if(!delegpt_add_rrset_A(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } /* get cached parentside AAAA */ akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, qinfo->qclass, PACKED_RRSET_PARENT_SIDE, *env->now, 0); if(akey) { log_rrset_key(VERB_ALGO, "found parent-side", akey); ns->done_pside6 = 1; /* a negative-cache-element has no addresses it adds */ if(!delegpt_add_rrset_AAAA(dp, region, akey, 1, NULL)) log_err("malloc failure in lookup_parent_glue"); lock_rw_unlock(&akey->entry.lock); } } /* see if new (but lame) addresses have become available */ return delegpt_count_targets(dp) != num; } int iter_get_next_root(struct iter_hints* hints, struct iter_forwards* fwd, uint16_t* c) { uint16_t c1 = *c, c2 = *c; int r1 = hints_next_root(hints, &c1); int r2 = forwards_next_root(fwd, &c2); if(!r1 && !r2) /* got none, end of list */ return 0; else if(!r1) /* got one, return that */ *c = c2; else if(!r2) *c = c1; else if(c1 < c2) /* got both take smallest */ *c = c1; else *c = c2; return 1; } void iter_scrub_ds(struct dns_msg* msg, struct ub_packed_rrset_key* ns, uint8_t* z) { /* Only the DS record for the delegation itself is expected. * We allow DS for everything between the bailiwick and the * zonecut, thus DS records must be at or above the zonecut. * And the DS records must be below the server authority zone. * The answer section is already scrubbed. */ size_t i = msg->rep->an_numrrsets; while(i < (msg->rep->an_numrrsets + msg->rep->ns_numrrsets)) { struct ub_packed_rrset_key* s = msg->rep->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_DS && (!ns || !dname_subdomain_c(ns->rk.dname, s->rk.dname) || query_dname_compare(z, s->rk.dname) == 0)) { log_nametypeclass(VERB_ALGO, "removing irrelevant DS", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); memmove(msg->rep->rrsets+i, msg->rep->rrsets+i+1, sizeof(struct ub_packed_rrset_key*) * (msg->rep->rrset_count-i-1)); msg->rep->ns_numrrsets--; msg->rep->rrset_count--; /* stay at same i, but new record */ continue; } i++; } } void iter_scrub_nxdomain(struct dns_msg* msg) { if(msg->rep->an_numrrsets == 0) return; memmove(msg->rep->rrsets, msg->rep->rrsets+msg->rep->an_numrrsets, sizeof(struct ub_packed_rrset_key*) * (msg->rep->rrset_count-msg->rep->an_numrrsets)); msg->rep->rrset_count -= msg->rep->an_numrrsets; msg->rep->an_numrrsets = 0; } void iter_dec_attempts(struct delegpt* dp, int d) { struct delegpt_addr* a; for(a=dp->target_list; a; a = a->next_target) { if(a->attempts >= OUTBOUND_MSG_RETRY) { /* add back to result list */ a->next_result = dp->result_list; dp->result_list = a; } if(a->attempts > d) a->attempts -= d; else a->attempts = 0; } } void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old) { struct delegpt_addr* a, *o, *prev; for(a=dp->target_list; a; a = a->next_target) { o = delegpt_find_addr(old, &a->addr, a->addrlen); if(o) { log_addr(VERB_ALGO, "copy attempt count previous dp", &a->addr, a->addrlen); a->attempts = o->attempts; } } prev = NULL; a = dp->usable_list; while(a) { if(a->attempts >= OUTBOUND_MSG_RETRY) { log_addr(VERB_ALGO, "remove from usable list dp", &a->addr, a->addrlen); /* remove from result list */ if(prev) prev->next_usable = a->next_usable; else dp->usable_list = a->next_usable; /* prev stays the same */ a = a->next_usable; continue; } prev = a; a = a->next_usable; } } int iter_ds_toolow(struct dns_msg* msg, struct delegpt* dp) { /* if for query example.com, there is example.com SOA or a subdomain * of example.com, then we are too low and need to fetch NS. */ size_t i; /* if we have a DNAME or CNAME we are probably wrong */ /* if we have a qtype DS in the answer section, its fine */ for(i=0; i < msg->rep->an_numrrsets; i++) { struct ub_packed_rrset_key* s = msg->rep->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_DNAME || ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME) { /* not the right answer, maybe too low, check the * RRSIG signer name (if there is any) for a hint * that it is from the dp zone anyway */ uint8_t* sname; size_t slen; val_find_rrset_signer(s, &sname, &slen); if(sname && query_dname_compare(dp->name, sname)==0) return 0; /* it is fine, from the right dp */ return 1; } if(ntohs(s->rk.type) == LDNS_RR_TYPE_DS) return 0; /* fine, we have a DS record */ } for(i=msg->rep->an_numrrsets; i < msg->rep->an_numrrsets + msg->rep->ns_numrrsets; i++) { struct ub_packed_rrset_key* s = msg->rep->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_SOA) { if(dname_subdomain_c(s->rk.dname, msg->qinfo.qname)) return 1; /* point is too low */ if(query_dname_compare(s->rk.dname, dp->name)==0) return 0; /* right dp */ } if(ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC || ntohs(s->rk.type) == LDNS_RR_TYPE_NSEC3) { uint8_t* sname; size_t slen; val_find_rrset_signer(s, &sname, &slen); if(sname && query_dname_compare(dp->name, sname)==0) return 0; /* it is fine, from the right dp */ return 1; } } /* we do not know */ return 1; } int iter_dp_cangodown(struct query_info* qinfo, struct delegpt* dp) { /* no delegation point, do not see how we can go down, * robust check, it should really exist */ if(!dp) return 0; /* see if dp equals the qname, then we cannot go down further */ if(query_dname_compare(qinfo->qname, dp->name) == 0) return 0; /* if dp is one label above the name we also cannot go down further */ if(dname_count_labels(qinfo->qname) == dp->namelabs+1) return 0; return 1; } int iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf) { struct iter_hints_stub *stub; struct delegpt *dp; /* Check for stub. */ stub = hints_lookup_stub(qstate->env->hints, qinf->qname, qinf->qclass, NULL); dp = forwards_lookup(qstate->env->fwds, qinf->qname, qinf->qclass); /* see if forward or stub is more pertinent */ if(stub && stub->dp && dp) { if(dname_strict_subdomain(dp->name, dp->namelabs, stub->dp->name, stub->dp->namelabs)) { stub = NULL; /* ignore stub, forward is lower */ } else { dp = NULL; /* ignore forward, stub is lower */ } } /* check stub */ if (stub != NULL && stub->dp != NULL) { if(stub->dp->no_cache) { char qname[255+1]; char dpname[255+1]; dname_str(qinf->qname, qname); dname_str(stub->dp->name, dpname); verbose(VERB_ALGO, "stub for %s %s has no_cache", qname, dpname); } return (stub->dp->no_cache); } /* Check for forward. */ if (dp) { if(dp->no_cache) { char qname[255+1]; char dpname[255+1]; dname_str(qinf->qname, qname); dname_str(dp->name, dpname); verbose(VERB_ALGO, "forward for %s %s has no_cache", qname, dpname); } return (dp->no_cache); } return 0; } unbound-1.13.1/iterator/iterator.c0000644000175000017500000041743714010434640016545 0ustar wouterwouter/* * iterator/iterator.c - iterative resolver DNS query response module * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that performs recursive iterative DNS query * processing. */ #include "config.h" #include "iterator/iterator.h" #include "iterator/iter_utils.h" #include "iterator/iter_hints.h" #include "iterator/iter_fwd.h" #include "iterator/iter_donotq.h" #include "iterator/iter_delegpt.h" #include "iterator/iter_resptype.h" #include "iterator/iter_scrub.h" #include "iterator/iter_priv.h" #include "validator/val_neg.h" #include "services/cache/dns.h" #include "services/cache/infra.h" #include "services/authzone.h" #include "util/module.h" #include "util/netevent.h" #include "util/net_help.h" #include "util/regional.h" #include "util/data/dname.h" #include "util/data/msgencode.h" #include "util/fptr_wlist.h" #include "util/config_file.h" #include "util/random.h" #include "sldns/rrdef.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" #include "sldns/parseutil.h" #include "sldns/sbuffer.h" /* in msec */ int UNKNOWN_SERVER_NICENESS = 376; static void target_count_increase_nx(struct iter_qstate* iq, int num); int iter_init(struct module_env* env, int id) { struct iter_env* iter_env = (struct iter_env*)calloc(1, sizeof(struct iter_env)); if(!iter_env) { log_err("malloc failure"); return 0; } env->modinfo[id] = (void*)iter_env; lock_basic_init(&iter_env->queries_ratelimit_lock); lock_protect(&iter_env->queries_ratelimit_lock, &iter_env->num_queries_ratelimited, sizeof(iter_env->num_queries_ratelimited)); if(!iter_apply_cfg(iter_env, env->cfg)) { log_err("iterator: could not apply configuration settings."); return 0; } return 1; } /** delete caps_whitelist element */ static void caps_free(struct rbnode_type* n, void* ATTR_UNUSED(d)) { if(n) { free(((struct name_tree_node*)n)->name); free(n); } } void iter_deinit(struct module_env* env, int id) { struct iter_env* iter_env; if(!env || !env->modinfo[id]) return; iter_env = (struct iter_env*)env->modinfo[id]; lock_basic_destroy(&iter_env->queries_ratelimit_lock); free(iter_env->target_fetch_policy); priv_delete(iter_env->priv); donotq_delete(iter_env->donotq); if(iter_env->caps_white) { traverse_postorder(iter_env->caps_white, caps_free, NULL); free(iter_env->caps_white); } free(iter_env); env->modinfo[id] = NULL; } /** new query for iterator */ static int iter_new(struct module_qstate* qstate, int id) { struct iter_qstate* iq = (struct iter_qstate*)regional_alloc( qstate->region, sizeof(struct iter_qstate)); qstate->minfo[id] = iq; if(!iq) return 0; memset(iq, 0, sizeof(*iq)); iq->state = INIT_REQUEST_STATE; iq->final_state = FINISHED_STATE; iq->an_prepend_list = NULL; iq->an_prepend_last = NULL; iq->ns_prepend_list = NULL; iq->ns_prepend_last = NULL; iq->dp = NULL; iq->depth = 0; iq->num_target_queries = 0; iq->num_current_queries = 0; iq->query_restart_count = 0; iq->referral_count = 0; iq->sent_count = 0; iq->ratelimit_ok = 0; iq->target_count = NULL; iq->dp_target_count = 0; iq->wait_priming_stub = 0; iq->refetch_glue = 0; iq->dnssec_expected = 0; iq->dnssec_lame_query = 0; iq->chase_flags = qstate->query_flags; /* Start with the (current) qname. */ iq->qchase = qstate->qinfo; outbound_list_init(&iq->outlist); iq->minimise_count = 0; iq->timeout_count = 0; if (qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; else iq->minimisation_state = DONOT_MINIMISE_STATE; memset(&iq->qinfo_out, 0, sizeof(struct query_info)); return 1; } /** * Transition to the next state. This can be used to advance a currently * processing event. It cannot be used to reactivate a forEvent. * * @param iq: iterator query state * @param nextstate The state to transition to. * @return true. This is so this can be called as the return value for the * actual process*State() methods. (Transitioning to the next state * implies further processing). */ static int next_state(struct iter_qstate* iq, enum iter_state nextstate) { /* If transitioning to a "response" state, make sure that there is a * response */ if(iter_state_is_responsestate(nextstate)) { if(iq->response == NULL) { log_err("transitioning to response state sans " "response."); } } iq->state = nextstate; return 1; } /** * Transition an event to its final state. Final states always either return * a result up the module chain, or reactivate a dependent event. Which * final state to transition to is set in the module state for the event when * it was created, and depends on the original purpose of the event. * * The response is stored in the qstate->buf buffer. * * @param iq: iterator query state * @return false. This is so this method can be used as the return value for * the processState methods. (Transitioning to the final state */ static int final_state(struct iter_qstate* iq) { return next_state(iq, iq->final_state); } /** * Callback routine to handle errors in parent query states * @param qstate: query state that failed. * @param id: module id. * @param super: super state. */ static void error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) { struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* super_iq = (struct iter_qstate*)super->minfo[id]; if(qstate->qinfo.qtype == LDNS_RR_TYPE_A || qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) { /* mark address as failed. */ struct delegpt_ns* dpns = NULL; super_iq->num_target_queries--; if(super_iq->dp) dpns = delegpt_find_ns(super_iq->dp, qstate->qinfo.qname, qstate->qinfo.qname_len); if(!dpns) { /* not interested */ /* this can happen, for eg. qname minimisation asked * for an NXDOMAIN to be validated, and used qtype * A for that, and the error of that, the name, is * not listed in super_iq->dp */ verbose(VERB_ALGO, "subq error, but not interested"); log_query_info(VERB_ALGO, "superq", &super->qinfo); return; } else { /* see if the failure did get (parent-lame) info */ if(!cache_fill_missing(super->env, super_iq->qchase.qclass, super->region, super_iq->dp)) log_err("out of memory adding missing"); } delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* mark as failed */ if((dpns->got4 == 2 || !ie->supports_ipv4) && (dpns->got6 == 2 || !ie->supports_ipv6)) target_count_increase_nx(super_iq, 1); } if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS) { /* prime failed to get delegation */ super_iq->dp = NULL; } /* evaluate targets again */ super_iq->state = QUERYTARGETS_STATE; /* super becomes runnable, and will process this change */ } /** * Return an error to the client * @param qstate: our query state * @param id: module id * @param rcode: error code (DNS errcode). * @return: 0 for use by caller, to make notation easy, like: * return error_response(..). */ static int error_response(struct module_qstate* qstate, int id, int rcode) { verbose(VERB_QUERY, "return error response %s", sldns_lookup_by_id(sldns_rcodes, rcode)? sldns_lookup_by_id(sldns_rcodes, rcode)->name:"??"); qstate->return_rcode = rcode; qstate->return_msg = NULL; qstate->ext_state[id] = module_finished; return 0; } /** * Return an error to the client and cache the error code in the * message cache (so per qname, qtype, qclass). * @param qstate: our query state * @param id: module id * @param rcode: error code (DNS errcode). * @return: 0 for use by caller, to make notation easy, like: * return error_response(..). */ static int error_response_cache(struct module_qstate* qstate, int id, int rcode) { if(!qstate->no_cache_store) { /* store in cache */ struct reply_info err; if(qstate->prefetch_leeway > NORR_TTL) { verbose(VERB_ALGO, "error response for prefetch in cache"); /* attempt to adjust the cache entry prefetch */ if(dns_cache_prefetch_adjust(qstate->env, &qstate->qinfo, NORR_TTL, qstate->query_flags)) return error_response(qstate, id, rcode); /* if that fails (not in cache), fall through to store err */ } if(qstate->env->cfg->serve_expired) { /* if serving expired contents, and such content is * already available, don't overwrite this servfail */ struct msgreply_entry* msg; if((msg=msg_cache_lookup(qstate->env, qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, qstate->qinfo.qclass, qstate->query_flags, 0, qstate->env->cfg->serve_expired_ttl_reset)) != NULL) { if(qstate->env->cfg->serve_expired_ttl_reset) { struct reply_info* rep = (struct reply_info*)msg->entry.data; if(rep && *qstate->env->now + qstate->env->cfg->serve_expired_ttl > rep->serve_expired_ttl) { rep->serve_expired_ttl = *qstate->env->now + qstate->env->cfg->serve_expired_ttl; } } lock_rw_unlock(&msg->entry.lock); return error_response(qstate, id, rcode); } /* serving expired contents, but nothing is cached * at all, so the servfail cache entry is useful * (stops waste of time on this servfail NORR_TTL) */ } else { /* don't overwrite existing (non-expired) data in * cache with a servfail */ struct msgreply_entry* msg; if((msg=msg_cache_lookup(qstate->env, qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, qstate->qinfo.qclass, qstate->query_flags, *qstate->env->now, 0)) != NULL) { struct reply_info* rep = (struct reply_info*) msg->entry.data; if(FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR || FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN) { /* we have a good entry, * don't overwrite */ lock_rw_unlock(&msg->entry.lock); return error_response(qstate, id, rcode); } lock_rw_unlock(&msg->entry.lock); } } memset(&err, 0, sizeof(err)); err.flags = (uint16_t)(BIT_QR | BIT_RA); FLAGS_SET_RCODE(err.flags, rcode); err.qdcount = 1; err.ttl = NORR_TTL; err.prefetch_ttl = PREFETCH_TTL_CALC(err.ttl); err.serve_expired_ttl = NORR_TTL; /* do not waste time trying to validate this servfail */ err.security = sec_status_indeterminate; verbose(VERB_ALGO, "store error response in message cache"); iter_dns_store(qstate->env, &qstate->qinfo, &err, 0, 0, 0, NULL, qstate->query_flags); } return error_response(qstate, id, rcode); } /** check if prepend item is duplicate item */ static int prepend_is_duplicate(struct ub_packed_rrset_key** sets, size_t to, struct ub_packed_rrset_key* dup) { size_t i; for(i=0; irk.type == dup->rk.type && sets[i]->rk.rrset_class == dup->rk.rrset_class && sets[i]->rk.dname_len == dup->rk.dname_len && query_dname_compare(sets[i]->rk.dname, dup->rk.dname) == 0) return 1; } return 0; } /** prepend the prepend list in the answer and authority section of dns_msg */ static int iter_prepend(struct iter_qstate* iq, struct dns_msg* msg, struct regional* region) { struct iter_prep_list* p; struct ub_packed_rrset_key** sets; size_t num_an = 0, num_ns = 0;; for(p = iq->an_prepend_list; p; p = p->next) num_an++; for(p = iq->ns_prepend_list; p; p = p->next) num_ns++; if(num_an + num_ns == 0) return 1; verbose(VERB_ALGO, "prepending %d rrsets", (int)num_an + (int)num_ns); if(num_an > RR_COUNT_MAX || num_ns > RR_COUNT_MAX || msg->rep->rrset_count > RR_COUNT_MAX) return 0; /* overflow */ sets = regional_alloc(region, (num_an+num_ns+msg->rep->rrset_count) * sizeof(struct ub_packed_rrset_key*)); if(!sets) return 0; /* ANSWER section */ num_an = 0; for(p = iq->an_prepend_list; p; p = p->next) { sets[num_an++] = p->rrset; if(ub_packed_rrset_ttl(p->rrset) < msg->rep->ttl) msg->rep->ttl = ub_packed_rrset_ttl(p->rrset); } memcpy(sets+num_an, msg->rep->rrsets, msg->rep->an_numrrsets * sizeof(struct ub_packed_rrset_key*)); /* AUTH section */ num_ns = 0; for(p = iq->ns_prepend_list; p; p = p->next) { if(prepend_is_duplicate(sets+msg->rep->an_numrrsets+num_an, num_ns, p->rrset) || prepend_is_duplicate( msg->rep->rrsets+msg->rep->an_numrrsets, msg->rep->ns_numrrsets, p->rrset)) continue; sets[msg->rep->an_numrrsets + num_an + num_ns++] = p->rrset; if(ub_packed_rrset_ttl(p->rrset) < msg->rep->ttl) msg->rep->ttl = ub_packed_rrset_ttl(p->rrset); } memcpy(sets + num_an + msg->rep->an_numrrsets + num_ns, msg->rep->rrsets + msg->rep->an_numrrsets, (msg->rep->ns_numrrsets + msg->rep->ar_numrrsets) * sizeof(struct ub_packed_rrset_key*)); /* NXDOMAIN rcode can stay if we prepended DNAME/CNAMEs, because * this is what recursors should give. */ msg->rep->rrset_count += num_an + num_ns; msg->rep->an_numrrsets += num_an; msg->rep->ns_numrrsets += num_ns; msg->rep->rrsets = sets; return 1; } /** * Find rrset in ANSWER prepend list. * to avoid duplicate DNAMEs when a DNAME is traversed twice. * @param iq: iterator query state. * @param rrset: rrset to add. * @return false if not found */ static int iter_find_rrset_in_prepend_answer(struct iter_qstate* iq, struct ub_packed_rrset_key* rrset) { struct iter_prep_list* p = iq->an_prepend_list; while(p) { if(ub_rrset_compare(p->rrset, rrset) == 0 && rrsetdata_equal((struct packed_rrset_data*)p->rrset ->entry.data, (struct packed_rrset_data*)rrset ->entry.data)) return 1; p = p->next; } return 0; } /** * Add rrset to ANSWER prepend list * @param qstate: query state. * @param iq: iterator query state. * @param rrset: rrset to add. * @return false on failure (malloc). */ static int iter_add_prepend_answer(struct module_qstate* qstate, struct iter_qstate* iq, struct ub_packed_rrset_key* rrset) { struct iter_prep_list* p = (struct iter_prep_list*)regional_alloc( qstate->region, sizeof(struct iter_prep_list)); if(!p) return 0; p->rrset = rrset; p->next = NULL; /* add at end */ if(iq->an_prepend_last) iq->an_prepend_last->next = p; else iq->an_prepend_list = p; iq->an_prepend_last = p; return 1; } /** * Add rrset to AUTHORITY prepend list * @param qstate: query state. * @param iq: iterator query state. * @param rrset: rrset to add. * @return false on failure (malloc). */ static int iter_add_prepend_auth(struct module_qstate* qstate, struct iter_qstate* iq, struct ub_packed_rrset_key* rrset) { struct iter_prep_list* p = (struct iter_prep_list*)regional_alloc( qstate->region, sizeof(struct iter_prep_list)); if(!p) return 0; p->rrset = rrset; p->next = NULL; /* add at end */ if(iq->ns_prepend_last) iq->ns_prepend_last->next = p; else iq->ns_prepend_list = p; iq->ns_prepend_last = p; return 1; } /** * Given a CNAME response (defined as a response containing a CNAME or DNAME * that does not answer the request), process the response, modifying the * state as necessary. This follows the CNAME/DNAME chain and returns the * final query name. * * sets the new query name, after following the CNAME/DNAME chain. * @param qstate: query state. * @param iq: iterator query state. * @param msg: the response. * @param mname: returned target new query name. * @param mname_len: length of mname. * @return false on (malloc) error. */ static int handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq, struct dns_msg* msg, uint8_t** mname, size_t* mname_len) { size_t i; /* Start with the (current) qname. */ *mname = iq->qchase.qname; *mname_len = iq->qchase.qname_len; /* Iterate over the ANSWER rrsets in order, looking for CNAMEs and * DNAMES. */ for(i=0; irep->an_numrrsets; i++) { struct ub_packed_rrset_key* r = msg->rep->rrsets[i]; /* If there is a (relevant) DNAME, add it to the list. * We always expect there to be CNAME that was generated * by this DNAME following, so we don't process the DNAME * directly. */ if(ntohs(r->rk.type) == LDNS_RR_TYPE_DNAME && dname_strict_subdomain_c(*mname, r->rk.dname) && !iter_find_rrset_in_prepend_answer(iq, r)) { if(!iter_add_prepend_answer(qstate, iq, r)) return 0; continue; } if(ntohs(r->rk.type) == LDNS_RR_TYPE_CNAME && query_dname_compare(*mname, r->rk.dname) == 0 && !iter_find_rrset_in_prepend_answer(iq, r)) { /* Add this relevant CNAME rrset to the prepend list.*/ if(!iter_add_prepend_answer(qstate, iq, r)) return 0; get_cname_target(r, mname, mname_len); } /* Other rrsets in the section are ignored. */ } /* add authority rrsets to authority prepend, for wildcarded CNAMEs */ for(i=msg->rep->an_numrrsets; irep->an_numrrsets + msg->rep->ns_numrrsets; i++) { struct ub_packed_rrset_key* r = msg->rep->rrsets[i]; /* only add NSEC/NSEC3, as they may be needed for validation */ if(ntohs(r->rk.type) == LDNS_RR_TYPE_NSEC || ntohs(r->rk.type) == LDNS_RR_TYPE_NSEC3) { if(!iter_add_prepend_auth(qstate, iq, r)) return 0; } } return 1; } /** see if last resort is possible - does config allow queries to parent */ static int can_have_last_resort(struct module_env* env, uint8_t* nm, size_t nmlen, uint16_t qclass, struct delegpt** retdp) { struct delegpt* fwddp; struct iter_hints_stub* stub; int labs = dname_count_labels(nm); /* do not process a last resort (the parent side) if a stub * or forward is configured, because we do not want to go 'above' * the configured servers */ if(!dname_is_root(nm) && (stub = (struct iter_hints_stub*) name_tree_find(&env->hints->tree, nm, nmlen, labs, qclass)) && /* has_parent side is turned off for stub_first, where we * are allowed to go to the parent */ stub->dp->has_parent_side_NS) { if(retdp) *retdp = stub->dp; return 0; } if((fwddp = forwards_find(env->fwds, nm, qclass)) && /* has_parent_side is turned off for forward_first, where * we are allowed to go to the parent */ fwddp->has_parent_side_NS) { if(retdp) *retdp = fwddp; return 0; } return 1; } /** see if target name is caps-for-id whitelisted */ static int is_caps_whitelisted(struct iter_env* ie, struct iter_qstate* iq) { if(!ie->caps_white) return 0; /* no whitelist, or no capsforid */ return name_tree_lookup(ie->caps_white, iq->qchase.qname, iq->qchase.qname_len, dname_count_labels(iq->qchase.qname), iq->qchase.qclass) != NULL; } /** create target count structure for this query */ static void target_count_create(struct iter_qstate* iq) { if(!iq->target_count) { iq->target_count = (int*)calloc(3, sizeof(int)); /* if calloc fails we simply do not track this number */ if(iq->target_count) iq->target_count[0] = 1; } } static void target_count_increase(struct iter_qstate* iq, int num) { target_count_create(iq); if(iq->target_count) iq->target_count[1] += num; iq->dp_target_count++; } static void target_count_increase_nx(struct iter_qstate* iq, int num) { target_count_create(iq); if(iq->target_count) iq->target_count[2] += num; } /** * Generate a subrequest. * Generate a local request event. Local events are tied to this module, and * have a corresponding (first tier) event that is waiting for this event to * resolve to continue. * * @param qname The query name for this request. * @param qnamelen length of qname * @param qtype The query type for this request. * @param qclass The query class for this request. * @param qstate The event that is generating this event. * @param id: module id. * @param iq: The iterator state that is generating this event. * @param initial_state The initial response state (normally this * is QUERY_RESP_STATE, unless it is known that the request won't * need iterative processing * @param finalstate The final state for the response to this request. * @param subq_ret: if newly allocated, the subquerystate, or NULL if it does * not need initialisation. * @param v: if true, validation is done on the subquery. * @param detached: true if this qstate should not attach to the subquery * @return false on error (malloc). */ static int generate_sub_request(uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct module_qstate* qstate, int id, struct iter_qstate* iq, enum iter_state initial_state, enum iter_state finalstate, struct module_qstate** subq_ret, int v, int detached) { struct module_qstate* subq = NULL; struct iter_qstate* subiq = NULL; uint16_t qflags = 0; /* OPCODE QUERY, no flags */ struct query_info qinf; int prime = (finalstate == PRIME_RESP_STATE)?1:0; int valrec = 0; qinf.qname = qname; qinf.qname_len = qnamelen; qinf.qtype = qtype; qinf.qclass = qclass; qinf.local_alias = NULL; /* RD should be set only when sending the query back through the INIT * state. */ if(initial_state == INIT_REQUEST_STATE) qflags |= BIT_RD; /* We set the CD flag so we can send this through the "head" of * the resolution chain, which might have a validator. We are * uninterested in validating things not on the direct resolution * path. */ if(!v) { qflags |= BIT_CD; valrec = 1; } if(detached) { struct mesh_state* sub = NULL; fptr_ok(fptr_whitelist_modenv_add_sub( qstate->env->add_sub)); if(!(*qstate->env->add_sub)(qstate, &qinf, qflags, prime, valrec, &subq, &sub)){ return 0; } } else { /* attach subquery, lookup existing or make a new one */ fptr_ok(fptr_whitelist_modenv_attach_sub( qstate->env->attach_sub)); if(!(*qstate->env->attach_sub)(qstate, &qinf, qflags, prime, valrec, &subq)) { return 0; } } *subq_ret = subq; if(subq) { /* initialise the new subquery */ subq->curmod = id; subq->ext_state[id] = module_state_initial; subq->minfo[id] = regional_alloc(subq->region, sizeof(struct iter_qstate)); if(!subq->minfo[id]) { log_err("init subq: out of memory"); fptr_ok(fptr_whitelist_modenv_kill_sub( qstate->env->kill_sub)); (*qstate->env->kill_sub)(subq); return 0; } subiq = (struct iter_qstate*)subq->minfo[id]; memset(subiq, 0, sizeof(*subiq)); subiq->num_target_queries = 0; target_count_create(iq); subiq->target_count = iq->target_count; if(iq->target_count) iq->target_count[0] ++; /* extra reference */ subiq->dp_target_count = 0; subiq->num_current_queries = 0; subiq->depth = iq->depth+1; outbound_list_init(&subiq->outlist); subiq->state = initial_state; subiq->final_state = finalstate; subiq->qchase = subq->qinfo; subiq->chase_flags = subq->query_flags; subiq->refetch_glue = 0; if(qstate->env->cfg->qname_minimisation) subiq->minimisation_state = INIT_MINIMISE_STATE; else subiq->minimisation_state = DONOT_MINIMISE_STATE; memset(&subiq->qinfo_out, 0, sizeof(struct query_info)); } return 1; } /** * Generate and send a root priming request. * @param qstate: the qtstate that triggered the need to prime. * @param iq: iterator query state. * @param id: module id. * @param qclass: the class to prime. * @return 0 on failure */ static int prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, uint16_t qclass) { struct delegpt* dp; struct module_qstate* subq; verbose(VERB_DETAIL, "priming . %s NS", sldns_lookup_by_id(sldns_rr_classes, (int)qclass)? sldns_lookup_by_id(sldns_rr_classes, (int)qclass)->name:"??"); dp = hints_lookup_root(qstate->env->hints, qclass); if(!dp) { verbose(VERB_ALGO, "Cannot prime due to lack of hints"); return 0; } /* Priming requests start at the QUERYTARGETS state, skipping * the normal INIT state logic (which would cause an infloop). */ if(!generate_sub_request((uint8_t*)"\000", 1, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime root"); return 0; } if(subq) { struct iter_qstate* subiq = (struct iter_qstate*)subq->minfo[id]; /* Set the initial delegation point to the hint. * copy dp, it is now part of the root prime query. * dp was part of in the fixed hints structure. */ subiq->dp = delegpt_copy(dp, subq->region); if(!subiq->dp) { log_err("out of memory priming root, copydp"); fptr_ok(fptr_whitelist_modenv_kill_sub( qstate->env->kill_sub)); (*qstate->env->kill_sub)(subq); return 0; } /* there should not be any target queries. */ subiq->num_target_queries = 0; subiq->dnssec_expected = iter_indicates_dnssec( qstate->env, subiq->dp, NULL, subq->qinfo.qclass); } /* this module stops, our submodule starts, and does the query. */ qstate->ext_state[id] = module_wait_subquery; return 1; } /** * Generate and process a stub priming request. This method tests for the * need to prime a stub zone, so it is safe to call for every request. * * @param qstate: the qtstate that triggered the need to prime. * @param iq: iterator query state. * @param id: module id. * @param qname: request name. * @param qclass: request class. * @return true if a priming subrequest was made, false if not. The will only * issue a priming request if it detects an unprimed stub. * Uses value of 2 to signal during stub-prime in root-prime situation * that a noprime-stub is available and resolution can continue. */ static int prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, uint8_t* qname, uint16_t qclass) { /* Lookup the stub hint. This will return null if the stub doesn't * need to be re-primed. */ struct iter_hints_stub* stub; struct delegpt* stub_dp; struct module_qstate* subq; if(!qname) return 0; stub = hints_lookup_stub(qstate->env->hints, qname, qclass, iq->dp); /* The stub (if there is one) does not need priming. */ if(!stub) return 0; stub_dp = stub->dp; /* if we have an auth_zone dp, and stub is equal, don't prime stub * yet, unless we want to fallback and avoid the auth_zone */ if(!iq->auth_zone_avoid && iq->dp && iq->dp->auth_dp && query_dname_compare(iq->dp->name, stub_dp->name) == 0) return 0; /* is it a noprime stub (always use) */ if(stub->noprime) { int r = 0; if(iq->dp == NULL) r = 2; /* copy the dp out of the fixed hints structure, so that * it can be changed when servicing this query */ iq->dp = delegpt_copy(stub_dp, qstate->region); if(!iq->dp) { log_err("out of memory priming stub"); errinf(qstate, "malloc failure, priming stub"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return 1; /* return 1 to make module stop, with error */ } log_nametypeclass(VERB_DETAIL, "use stub", stub_dp->name, LDNS_RR_TYPE_NS, qclass); return r; } /* Otherwise, we need to (re)prime the stub. */ log_nametypeclass(VERB_DETAIL, "priming stub", stub_dp->name, LDNS_RR_TYPE_NS, qclass); /* Stub priming events start at the QUERYTARGETS state to avoid the * redundant INIT state processing. */ if(!generate_sub_request(stub_dp->name, stub_dp->namelen, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0, 0)) { verbose(VERB_ALGO, "could not prime stub"); errinf(qstate, "could not generate lookup for stub prime"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return 1; /* return 1 to make module stop, with error */ } if(subq) { struct iter_qstate* subiq = (struct iter_qstate*)subq->minfo[id]; /* Set the initial delegation point to the hint. */ /* make copy to avoid use of stub dp by different qs/threads */ subiq->dp = delegpt_copy(stub_dp, subq->region); if(!subiq->dp) { log_err("out of memory priming stub, copydp"); fptr_ok(fptr_whitelist_modenv_kill_sub( qstate->env->kill_sub)); (*qstate->env->kill_sub)(subq); errinf(qstate, "malloc failure, in stub prime"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return 1; /* return 1 to make module stop, with error */ } /* there should not be any target queries -- although there * wouldn't be anyway, since stub hints never have * missing targets. */ subiq->num_target_queries = 0; subiq->wait_priming_stub = 1; subiq->dnssec_expected = iter_indicates_dnssec( qstate->env, subiq->dp, NULL, subq->qinfo.qclass); } /* this module stops, our submodule starts, and does the query. */ qstate->ext_state[id] = module_wait_subquery; return 1; } /** * Generate a delegation point for an auth zone (unless cached dp is better) * false on alloc failure. */ static int auth_zone_delegpt(struct module_qstate* qstate, struct iter_qstate* iq, uint8_t* delname, size_t delnamelen) { struct auth_zone* z; if(iq->auth_zone_avoid) return 1; if(!delname) { delname = iq->qchase.qname; delnamelen = iq->qchase.qname_len; } lock_rw_rdlock(&qstate->env->auth_zones->lock); z = auth_zones_find_zone(qstate->env->auth_zones, delname, delnamelen, qstate->qinfo.qclass); if(!z) { lock_rw_unlock(&qstate->env->auth_zones->lock); return 1; } lock_rw_rdlock(&z->lock); lock_rw_unlock(&qstate->env->auth_zones->lock); if(z->for_upstream) { if(iq->dp && query_dname_compare(z->name, iq->dp->name) == 0 && iq->dp->auth_dp && qstate->blacklist && z->fallback_enabled) { /* cache is blacklisted and fallback, and we * already have an auth_zone dp */ if(verbosity>=VERB_ALGO) { char buf[255+1]; dname_str(z->name, buf); verbose(VERB_ALGO, "auth_zone %s " "fallback because cache blacklisted", buf); } lock_rw_unlock(&z->lock); iq->dp = NULL; return 1; } if(iq->dp==NULL || dname_subdomain_c(z->name, iq->dp->name)) { struct delegpt* dp; if(qstate->blacklist && z->fallback_enabled) { /* cache is blacklisted because of a DNSSEC * validation failure, and the zone allows * fallback to the internet, query there. */ if(verbosity>=VERB_ALGO) { char buf[255+1]; dname_str(z->name, buf); verbose(VERB_ALGO, "auth_zone %s " "fallback because cache blacklisted", buf); } lock_rw_unlock(&z->lock); return 1; } dp = (struct delegpt*)regional_alloc_zero( qstate->region, sizeof(*dp)); if(!dp) { log_err("alloc failure"); if(z->fallback_enabled) { lock_rw_unlock(&z->lock); return 1; /* just fallback */ } lock_rw_unlock(&z->lock); errinf(qstate, "malloc failure"); return 0; } dp->name = regional_alloc_init(qstate->region, z->name, z->namelen); if(!dp->name) { log_err("alloc failure"); if(z->fallback_enabled) { lock_rw_unlock(&z->lock); return 1; /* just fallback */ } lock_rw_unlock(&z->lock); errinf(qstate, "malloc failure"); return 0; } dp->namelen = z->namelen; dp->namelabs = z->namelabs; dp->auth_dp = 1; iq->dp = dp; } } lock_rw_unlock(&z->lock); return 1; } /** * Generate A and AAAA checks for glue that is in-zone for the referral * we just got to obtain authoritative information on the addresses. * * @param qstate: the qtstate that triggered the need to prime. * @param iq: iterator query state. * @param id: module id. */ static void generate_a_aaaa_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) { struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct module_qstate* subq; size_t i; struct reply_info* rep = iq->response->rep; struct ub_packed_rrset_key* s; log_assert(iq->dp); if(iq->depth == ie->max_dependency_depth) return; /* walk through additional, and check if in-zone, * only relevant A, AAAA are left after scrub anyway */ for(i=rep->an_numrrsets+rep->ns_numrrsets; irrset_count; i++) { s = rep->rrsets[i]; /* check *ALL* addresses that are transmitted in additional*/ /* is it an address ? */ if( !(ntohs(s->rk.type)==LDNS_RR_TYPE_A || ntohs(s->rk.type)==LDNS_RR_TYPE_AAAA)) { continue; } /* is this query the same as the A/AAAA check for it */ if(qstate->qinfo.qtype == ntohs(s->rk.type) && qstate->qinfo.qclass == ntohs(s->rk.rrset_class) && query_dname_compare(qstate->qinfo.qname, s->rk.dname)==0 && (qstate->query_flags&BIT_RD) && !(qstate->query_flags&BIT_CD)) continue; /* generate subrequest for it */ log_nametypeclass(VERB_ALGO, "schedule addr fetch", s->rk.dname, ntohs(s->rk.type), ntohs(s->rk.rrset_class)); if(!generate_sub_request(s->rk.dname, s->rk.dname_len, ntohs(s->rk.type), ntohs(s->rk.rrset_class), qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate addr check"); return; } /* ignore subq - not need for more init */ } } /** * Generate a NS check request to obtain authoritative information * on an NS rrset. * * @param qstate: the qtstate that triggered the need to prime. * @param iq: iterator query state. * @param id: module id. */ static void generate_ns_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) { struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct module_qstate* subq; log_assert(iq->dp); if(iq->depth == ie->max_dependency_depth) return; if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, NULL)) return; /* is this query the same as the nscheck? */ if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS && query_dname_compare(iq->dp->name, qstate->qinfo.qname)==0 && (qstate->query_flags&BIT_RD) && !(qstate->query_flags&BIT_CD)){ /* spawn off A, AAAA queries for in-zone glue to check */ generate_a_aaaa_check(qstate, iq, id); return; } /* no need to get the NS record for DS, it is above the zonecut */ if(qstate->qinfo.qtype == LDNS_RR_TYPE_DS) return; log_nametypeclass(VERB_ALGO, "schedule ns fetch", iq->dp->name, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate ns check"); return; } if(subq) { struct iter_qstate* subiq = (struct iter_qstate*)subq->minfo[id]; /* make copy to avoid use of stub dp by different qs/threads */ /* refetch glue to start higher up the tree */ subiq->refetch_glue = 1; subiq->dp = delegpt_copy(iq->dp, subq->region); if(!subiq->dp) { log_err("out of memory generating ns check, copydp"); fptr_ok(fptr_whitelist_modenv_kill_sub( qstate->env->kill_sub)); (*qstate->env->kill_sub)(subq); return; } } } /** * Generate a DNSKEY prefetch query to get the DNSKEY for the DS record we * just got in a referral (where we have dnssec_expected, thus have trust * anchors above it). Note that right after calling this routine the * iterator detached subqueries (because of following the referral), and thus * the DNSKEY query becomes detached, its return stored in the cache for * later lookup by the validator. This cache lookup by the validator avoids * the roundtrip incurred by the DNSKEY query. The DNSKEY query is now * performed at about the same time the original query is sent to the domain, * thus the two answers are likely to be returned at about the same time, * saving a roundtrip from the validated lookup. * * @param qstate: the qtstate that triggered the need to prime. * @param iq: iterator query state. * @param id: module id. */ static void generate_dnskey_prefetch(struct module_qstate* qstate, struct iter_qstate* iq, int id) { struct module_qstate* subq; log_assert(iq->dp); /* is this query the same as the prefetch? */ if(qstate->qinfo.qtype == LDNS_RR_TYPE_DNSKEY && query_dname_compare(iq->dp->name, qstate->qinfo.qname)==0 && (qstate->query_flags&BIT_RD) && !(qstate->query_flags&BIT_CD)){ return; } /* if the DNSKEY is in the cache this lookup will stop quickly */ log_nametypeclass(VERB_ALGO, "schedule dnskey prefetch", iq->dp->name, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass); if(!generate_sub_request(iq->dp->name, iq->dp->namelen, LDNS_RR_TYPE_DNSKEY, iq->qchase.qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { /* we'll be slower, but it'll work */ verbose(VERB_ALGO, "could not generate dnskey prefetch"); return; } if(subq) { struct iter_qstate* subiq = (struct iter_qstate*)subq->minfo[id]; /* this qstate has the right delegation for the dnskey lookup*/ /* make copy to avoid use of stub dp by different qs/threads */ subiq->dp = delegpt_copy(iq->dp, subq->region); /* if !subiq->dp, it'll start from the cache, no problem */ } } /** * See if the query needs forwarding. * * @param qstate: query state. * @param iq: iterator query state. * @return true if the request is forwarded, false if not. * If returns true but, iq->dp is NULL then a malloc failure occurred. */ static int forward_request(struct module_qstate* qstate, struct iter_qstate* iq) { struct delegpt* dp; uint8_t* delname = iq->qchase.qname; size_t delnamelen = iq->qchase.qname_len; if(iq->refetch_glue && iq->dp) { delname = iq->dp->name; delnamelen = iq->dp->namelen; } /* strip one label off of DS query to lookup higher for it */ if( (iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->refetch_glue) && !dname_is_root(iq->qchase.qname)) dname_remove_label(&delname, &delnamelen); dp = forwards_lookup(qstate->env->fwds, delname, iq->qchase.qclass); if(!dp) return 0; /* send recursion desired to forward addr */ iq->chase_flags |= BIT_RD; iq->dp = delegpt_copy(dp, qstate->region); /* iq->dp checked by caller */ verbose(VERB_ALGO, "forwarding request"); return 1; } /** * Process the initial part of the request handling. This state roughly * corresponds to resolver algorithms steps 1 (find answer in cache) and 2 * (find the best servers to ask). * * Note that all requests start here, and query restarts revisit this state. * * This state either generates: 1) a response, from cache or error, 2) a * priming event, or 3) forwards the request to the next state (init2, * generally). * * @param qstate: query state. * @param iq: iterator query state. * @param ie: iterator shared global environment. * @param id: module id. * @return true if the event needs more request processing immediately, * false if not. */ static int processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id) { uint8_t* delname; size_t delnamelen; struct dns_msg* msg = NULL; log_query_info(VERB_DETAIL, "resolving", &qstate->qinfo); /* check effort */ /* We enforce a maximum number of query restarts. This is primarily a * cheap way to prevent CNAME loops. */ if(iq->query_restart_count > MAX_RESTART_COUNT) { verbose(VERB_QUERY, "request has exceeded the maximum number" " of query restarts with %d", iq->query_restart_count); errinf(qstate, "request has exceeded the maximum number " "restarts (eg. indirections)"); if(iq->qchase.qname) errinf_dname(qstate, "stop at", iq->qchase.qname); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* We enforce a maximum recursion/dependency depth -- in general, * this is unnecessary for dependency loops (although it will * catch those), but it provides a sensible limit to the amount * of work required to answer a given query. */ verbose(VERB_ALGO, "request has dependency depth of %d", iq->depth); if(iq->depth > ie->max_dependency_depth) { verbose(VERB_QUERY, "request has exceeded the maximum " "dependency depth with depth of %d", iq->depth); errinf(qstate, "request has exceeded the maximum dependency " "depth (eg. nameserver lookup recursion)"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* If the request is qclass=ANY, setup to generate each class */ if(qstate->qinfo.qclass == LDNS_RR_CLASS_ANY) { iq->qchase.qclass = 0; return next_state(iq, COLLECT_CLASS_STATE); } /* * If we are restricted by a forward-zone or a stub-zone, we * can't re-fetch glue for this delegation point. * we won’t try to re-fetch glue if the iq->dp is null. */ if (iq->refetch_glue && iq->dp && !can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, NULL)) { iq->refetch_glue = 0; } /* Resolver Algorithm Step 1 -- Look for the answer in local data. */ /* This either results in a query restart (CNAME cache response), a * terminating response (ANSWER), or a cache miss (null). */ if (iter_stub_fwd_no_cache(qstate, &iq->qchase)) { /* Asked to not query cache. */ verbose(VERB_ALGO, "no-cache set, going to the network"); qstate->no_cache_lookup = 1; qstate->no_cache_store = 1; msg = NULL; } else if(qstate->blacklist) { /* if cache, or anything else, was blacklisted then * getting older results from cache is a bad idea, no cache */ verbose(VERB_ALGO, "cache blacklisted, going to the network"); msg = NULL; } else if(!qstate->no_cache_lookup) { msg = dns_cache_lookup(qstate->env, iq->qchase.qname, iq->qchase.qname_len, iq->qchase.qtype, iq->qchase.qclass, qstate->query_flags, qstate->region, qstate->env->scratch, 0); if(!msg && qstate->env->neg_cache && iter_qname_indicates_dnssec(qstate->env, &iq->qchase)) { /* lookup in negative cache; may result in * NOERROR/NODATA or NXDOMAIN answers that need validation */ msg = val_neg_getmsg(qstate->env->neg_cache, &iq->qchase, qstate->region, qstate->env->rrset_cache, qstate->env->scratch_buffer, *qstate->env->now, 1/*add SOA*/, NULL, qstate->env->cfg); } /* item taken from cache does not match our query name, thus * security needs to be re-examined later */ if(msg && query_dname_compare(qstate->qinfo.qname, iq->qchase.qname) != 0) msg->rep->security = sec_status_unchecked; } if(msg) { /* handle positive cache response */ enum response_type type = response_type_from_cache(msg, &iq->qchase); if(verbosity >= VERB_ALGO) { log_dns_msg("msg from cache lookup", &msg->qinfo, msg->rep); verbose(VERB_ALGO, "msg ttl is %d, prefetch ttl %d", (int)msg->rep->ttl, (int)msg->rep->prefetch_ttl); } if(type == RESPONSE_TYPE_CNAME) { uint8_t* sname = 0; size_t slen = 0; verbose(VERB_ALGO, "returning CNAME response from " "cache"); if(!handle_cname_response(qstate, iq, msg, &sname, &slen)) { errinf(qstate, "failed to prepend CNAME " "components, malloc failure"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } iq->qchase.qname = sname; iq->qchase.qname_len = slen; /* This *is* a query restart, even if it is a cheap * one. */ iq->dp = NULL; iq->refetch_glue = 0; iq->query_restart_count++; iq->sent_count = 0; iq->dp_target_count = 0; sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; return next_state(iq, INIT_REQUEST_STATE); } /* if from cache, NULL, else insert 'cache IP' len=0 */ if(qstate->reply_origin) sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); if(FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_SERVFAIL) errinf(qstate, "SERVFAIL in cache"); /* it is an answer, response, to final state */ verbose(VERB_ALGO, "returning answer from cache."); iq->response = msg; return final_state(iq); } /* attempt to forward the request */ if(forward_request(qstate, iq)) { if(!iq->dp) { log_err("alloc failure for forward dp"); errinf(qstate, "malloc failure for forward zone"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } iq->refetch_glue = 0; iq->minimisation_state = DONOT_MINIMISE_STATE; /* the request has been forwarded. * forwarded requests need to be immediately sent to the * next state, QUERYTARGETS. */ return next_state(iq, QUERYTARGETS_STATE); } /* Resolver Algorithm Step 2 -- find the "best" servers. */ /* first, adjust for DS queries. To avoid the grandparent problem, * we just look for the closest set of server to the parent of qname. * When re-fetching glue we also need to ask the parent. */ if(iq->refetch_glue) { if(!iq->dp) { log_err("internal or malloc fail: no dp for refetch"); errinf(qstate, "malloc failure, for delegation info"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } delname = iq->dp->name; delnamelen = iq->dp->namelen; } else { delname = iq->qchase.qname; delnamelen = iq->qchase.qname_len; } if(iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->refetch_glue || (iq->qchase.qtype == LDNS_RR_TYPE_NS && qstate->prefetch_leeway && can_have_last_resort(qstate->env, delname, delnamelen, iq->qchase.qclass, NULL))) { /* remove first label from delname, root goes to hints, * but only to fetch glue, not for qtype=DS. */ /* also when prefetching an NS record, fetch it again from * its parent, just as if it expired, so that you do not * get stuck on an older nameserver that gives old NSrecords */ if(dname_is_root(delname) && (iq->refetch_glue || (iq->qchase.qtype == LDNS_RR_TYPE_NS && qstate->prefetch_leeway))) delname = NULL; /* go to root priming */ else dname_remove_label(&delname, &delnamelen); } /* delname is the name to lookup a delegation for. If NULL rootprime */ while(1) { /* Lookup the delegation in the cache. If null, then the * cache needs to be primed for the qclass. */ if(delname) iq->dp = dns_cache_find_delegation(qstate->env, delname, delnamelen, iq->qchase.qtype, iq->qchase.qclass, qstate->region, &iq->deleg_msg, *qstate->env->now+qstate->prefetch_leeway); else iq->dp = NULL; /* If the cache has returned nothing, then we have a * root priming situation. */ if(iq->dp == NULL) { int r; /* if under auth zone, no prime needed */ if(!auth_zone_delegpt(qstate, iq, delname, delnamelen)) return error_response(qstate, id, LDNS_RCODE_SERVFAIL); if(iq->dp) /* use auth zone dp */ return next_state(iq, INIT_REQUEST_2_STATE); /* if there is a stub, then no root prime needed */ r = prime_stub(qstate, iq, id, delname, iq->qchase.qclass); if(r == 2) break; /* got noprime-stub-zone, continue */ else if(r) return 0; /* stub prime request made */ if(forwards_lookup_root(qstate->env->fwds, iq->qchase.qclass)) { /* forward zone root, no root prime needed */ /* fill in some dp - safety belt */ iq->dp = hints_lookup_root(qstate->env->hints, iq->qchase.qclass); if(!iq->dp) { log_err("internal error: no hints dp"); errinf(qstate, "no hints for this class"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } iq->dp = delegpt_copy(iq->dp, qstate->region); if(!iq->dp) { log_err("out of memory in safety belt"); errinf(qstate, "malloc failure, in safety belt"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } return next_state(iq, INIT_REQUEST_2_STATE); } /* Note that the result of this will set a new * DelegationPoint based on the result of priming. */ if(!prime_root(qstate, iq, id, iq->qchase.qclass)) return error_response(qstate, id, LDNS_RCODE_REFUSED); /* priming creates and sends a subordinate query, with * this query as the parent. So further processing for * this event will stop until reactivated by the * results of priming. */ return 0; } if(!iq->ratelimit_ok && qstate->prefetch_leeway) iq->ratelimit_ok = 1; /* allow prefetches, this keeps otherwise valid data in the cache */ if(!iq->ratelimit_ok && infra_ratelimit_exceeded( qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, *qstate->env->now)) { /* and increment the rate, so that the rate for time * now will also exceed the rate, keeping cache fresh */ (void)infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, *qstate->env->now, &qstate->qinfo, qstate->reply); /* see if we are passed through with slip factor */ if(qstate->env->cfg->ratelimit_factor != 0 && ub_random_max(qstate->env->rnd, qstate->env->cfg->ratelimit_factor) == 1) { iq->ratelimit_ok = 1; log_nametypeclass(VERB_ALGO, "ratelimit allowed through for " "delegation point", iq->dp->name, LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); } else { lock_basic_lock(&ie->queries_ratelimit_lock); ie->num_queries_ratelimited++; lock_basic_unlock(&ie->queries_ratelimit_lock); log_nametypeclass(VERB_ALGO, "ratelimit exceeded with " "delegation point", iq->dp->name, LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); qstate->was_ratelimited = 1; errinf(qstate, "query was ratelimited"); errinf_dname(qstate, "for zone", iq->dp->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } } /* see if this dp not useless. * It is useless if: * o all NS items are required glue. * or the query is for NS item that is required glue. * o no addresses are provided. * o RD qflag is on. * Instead, go up one level, and try to get even further * If the root was useless, use safety belt information. * Only check cache returns, because replies for servers * could be useless but lead to loops (bumping into the * same server reply) if useless-checked. */ if(iter_dp_is_useless(&qstate->qinfo, qstate->query_flags, iq->dp)) { struct delegpt* retdp = NULL; if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, &retdp)) { if(retdp) { verbose(VERB_QUERY, "cache has stub " "or fwd but no addresses, " "fallback to config"); iq->dp = delegpt_copy(retdp, qstate->region); if(!iq->dp) { log_err("out of memory in " "stub/fwd fallback"); errinf(qstate, "malloc failure, for fallback to config"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } break; } verbose(VERB_ALGO, "useless dp " "but cannot go up, servfail"); delegpt_log(VERB_ALGO, iq->dp); errinf(qstate, "no useful nameservers, " "and cannot go up"); errinf_dname(qstate, "for zone", iq->dp->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(dname_is_root(iq->dp->name)) { /* use safety belt */ verbose(VERB_QUERY, "Cache has root NS but " "no addresses. Fallback to the safety belt."); iq->dp = hints_lookup_root(qstate->env->hints, iq->qchase.qclass); /* note deleg_msg is from previous lookup, * but RD is on, so it is not used */ if(!iq->dp) { log_err("internal error: no hints dp"); return error_response(qstate, id, LDNS_RCODE_REFUSED); } iq->dp = delegpt_copy(iq->dp, qstate->region); if(!iq->dp) { log_err("out of memory in safety belt"); errinf(qstate, "malloc failure, in safety belt, for root"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } break; } else { verbose(VERB_ALGO, "cache delegation was useless:"); delegpt_log(VERB_ALGO, iq->dp); /* go up */ delname = iq->dp->name; delnamelen = iq->dp->namelen; dname_remove_label(&delname, &delnamelen); } } else break; } verbose(VERB_ALGO, "cache delegation returns delegpt"); delegpt_log(VERB_ALGO, iq->dp); /* Otherwise, set the current delegation point and move on to the * next state. */ return next_state(iq, INIT_REQUEST_2_STATE); } /** * Process the second part of the initial request handling. This state * basically exists so that queries that generate root priming events have * the same init processing as ones that do not. Request events that reach * this state must have a valid currentDelegationPoint set. * * This part is primarily handling stub zone priming. Events that reach this * state must have a current delegation point. * * @param qstate: query state. * @param iq: iterator query state. * @param id: module id. * @return true if the event needs more request processing immediately, * false if not. */ static int processInitRequest2(struct module_qstate* qstate, struct iter_qstate* iq, int id) { uint8_t* delname; size_t delnamelen; log_query_info(VERB_QUERY, "resolving (init part 2): ", &qstate->qinfo); delname = iq->qchase.qname; delnamelen = iq->qchase.qname_len; if(iq->refetch_glue) { struct iter_hints_stub* stub; if(!iq->dp) { log_err("internal or malloc fail: no dp for refetch"); errinf(qstate, "malloc failure, no delegation info"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* Do not send queries above stub, do not set delname to dp if * this is above stub without stub-first. */ stub = hints_lookup_stub( qstate->env->hints, iq->qchase.qname, iq->qchase.qclass, iq->dp); if(!stub || !stub->dp->has_parent_side_NS || dname_subdomain_c(iq->dp->name, stub->dp->name)) { delname = iq->dp->name; delnamelen = iq->dp->namelen; } } if(iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->refetch_glue) { if(!dname_is_root(delname)) dname_remove_label(&delname, &delnamelen); iq->refetch_glue = 0; /* if CNAME causes restart, no refetch */ } /* see if we have an auth zone to answer from, improves dp from cache * (if any dp from cache) with auth zone dp, if that is lower */ if(!auth_zone_delegpt(qstate, iq, delname, delnamelen)) return error_response(qstate, id, LDNS_RCODE_SERVFAIL); /* Check to see if we need to prime a stub zone. */ if(prime_stub(qstate, iq, id, delname, iq->qchase.qclass)) { /* A priming sub request was made */ return 0; } /* most events just get forwarded to the next state. */ return next_state(iq, INIT_REQUEST_3_STATE); } /** * Process the third part of the initial request handling. This state exists * as a separate state so that queries that generate stub priming events * will get the tail end of the init process but not repeat the stub priming * check. * * @param qstate: query state. * @param iq: iterator query state. * @param id: module id. * @return true, advancing the event to the QUERYTARGETS_STATE. */ static int processInitRequest3(struct module_qstate* qstate, struct iter_qstate* iq, int id) { log_query_info(VERB_QUERY, "resolving (init part 3): ", &qstate->qinfo); /* if the cache reply dp equals a validation anchor or msg has DS, * then DNSSEC RRSIGs are expected in the reply */ iq->dnssec_expected = iter_indicates_dnssec(qstate->env, iq->dp, iq->deleg_msg, iq->qchase.qclass); /* If the RD flag wasn't set, then we just finish with the * cached referral as the response. */ if(!(qstate->query_flags & BIT_RD) && iq->deleg_msg) { iq->response = iq->deleg_msg; if(verbosity >= VERB_ALGO && iq->response) log_dns_msg("no RD requested, using delegation msg", &iq->response->qinfo, iq->response->rep); if(qstate->reply_origin) sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); return final_state(iq); } /* After this point, unset the RD flag -- this query is going to * be sent to an auth. server. */ iq->chase_flags &= ~BIT_RD; /* if dnssec expected, fetch key for the trust-anchor or cached-DS */ if(iq->dnssec_expected && qstate->env->cfg->prefetch_key && !(qstate->query_flags&BIT_CD)) { generate_dnskey_prefetch(qstate, iq, id); fptr_ok(fptr_whitelist_modenv_detach_subs( qstate->env->detach_subs)); (*qstate->env->detach_subs)(qstate); } /* Jump to the next state. */ return next_state(iq, QUERYTARGETS_STATE); } /** * Given a basic query, generate a parent-side "target" query. * These are subordinate queries for missing delegation point target addresses, * for which only the parent of the delegation provides correct IP addresses. * * @param qstate: query state. * @param iq: iterator query state. * @param id: module id. * @param name: target qname. * @param namelen: target qname length. * @param qtype: target qtype (either A or AAAA). * @param qclass: target qclass. * @return true on success, false on failure. */ static int generate_parentside_target_query(struct module_qstate* qstate, struct iter_qstate* iq, int id, uint8_t* name, size_t namelen, uint16_t qtype, uint16_t qclass) { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; if(subq) { struct iter_qstate* subiq = (struct iter_qstate*)subq->minfo[id]; /* blacklist the cache - we want to fetch parent stuff */ sock_list_insert(&subq->blacklist, NULL, 0, subq->region); subiq->query_for_pside_glue = 1; if(dname_subdomain_c(name, iq->dp->name)) { subiq->dp = delegpt_copy(iq->dp, subq->region); subiq->dnssec_expected = iter_indicates_dnssec( qstate->env, subiq->dp, NULL, subq->qinfo.qclass); subiq->refetch_glue = 1; } else { subiq->dp = dns_cache_find_delegation(qstate->env, name, namelen, qtype, qclass, subq->region, &subiq->deleg_msg, *qstate->env->now+subq->prefetch_leeway); /* if no dp, then it's from root, refetch unneeded */ if(subiq->dp) { subiq->dnssec_expected = iter_indicates_dnssec( qstate->env, subiq->dp, NULL, subq->qinfo.qclass); subiq->refetch_glue = 1; } } } log_nametypeclass(VERB_QUERY, "new pside target", name, qtype, qclass); return 1; } /** * Given a basic query, generate a "target" query. These are subordinate * queries for missing delegation point target addresses. * * @param qstate: query state. * @param iq: iterator query state. * @param id: module id. * @param name: target qname. * @param namelen: target qname length. * @param qtype: target qtype (either A or AAAA). * @param qclass: target qclass. * @return true on success, false on failure. */ static int generate_target_query(struct module_qstate* qstate, struct iter_qstate* iq, int id, uint8_t* name, size_t namelen, uint16_t qtype, uint16_t qclass) { struct module_qstate* subq; if(!generate_sub_request(name, namelen, qtype, qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) return 0; log_nametypeclass(VERB_QUERY, "new target", name, qtype, qclass); return 1; } /** * Given an event at a certain state, generate zero or more target queries * for it's current delegation point. * * @param qstate: query state. * @param iq: iterator query state. * @param ie: iterator shared global environment. * @param id: module id. * @param maxtargets: The maximum number of targets to query for. * if it is negative, there is no maximum number of targets. * @param num: returns the number of queries generated and processed, * which may be zero if there were no missing targets. * @return false on error. */ static int query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id, int maxtargets, int* num) { int query_count = 0; struct delegpt_ns* ns; int missing; int toget = 0; if(iq->depth == ie->max_dependency_depth) return 0; if(iq->depth > 0 && iq->target_count && iq->target_count[1] > MAX_TARGET_COUNT) { char s[LDNS_MAX_DOMAINLEN+1]; dname_str(qstate->qinfo.qname, s); verbose(VERB_QUERY, "request %s has exceeded the maximum " "number of glue fetches %d", s, iq->target_count[1]); return 0; } if(iq->dp_target_count > MAX_DP_TARGET_COUNT) { char s[LDNS_MAX_DOMAINLEN+1]; dname_str(qstate->qinfo.qname, s); verbose(VERB_QUERY, "request %s has exceeded the maximum " "number of glue fetches %d to a single delegation point", s, iq->dp_target_count); return 0; } iter_mark_cycle_targets(qstate, iq->dp); missing = (int)delegpt_count_missing_targets(iq->dp); log_assert(maxtargets != 0); /* that would not be useful */ /* Generate target requests. Basically, any missing targets * are queried for here, regardless if it is necessary to do * so to continue processing. */ if(maxtargets < 0 || maxtargets > missing) toget = missing; else toget = maxtargets; if(toget == 0) { *num = 0; return 1; } /* select 'toget' items from the total of 'missing' items */ log_assert(toget <= missing); /* loop over missing targets */ for(ns = iq->dp->nslist; ns; ns = ns->next) { if(ns->resolved) continue; /* randomly select this item with probability toget/missing */ if(!iter_ns_probability(qstate->env->rnd, toget, missing)) { /* do not select this one, next; select toget number * of items from a list one less in size */ missing --; continue; } if(ie->supports_ipv6 && !ns->got6) { /* Send the AAAA request. */ if(!generate_target_query(qstate, iq, id, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, iq->qchase.qclass)) { *num = query_count; if(query_count > 0) qstate->ext_state[id] = module_wait_subquery; return 0; } query_count++; } /* Send the A request. */ if(ie->supports_ipv4 && !ns->got4) { if(!generate_target_query(qstate, iq, id, ns->name, ns->namelen, LDNS_RR_TYPE_A, iq->qchase.qclass)) { *num = query_count; if(query_count > 0) qstate->ext_state[id] = module_wait_subquery; return 0; } query_count++; } /* mark this target as in progress. */ ns->resolved = 1; missing--; toget--; if(toget == 0) break; } *num = query_count; if(query_count > 0) qstate->ext_state[id] = module_wait_subquery; return 1; } /** * Called by processQueryTargets when it would like extra targets to query * but it seems to be out of options. At last resort some less appealing * options are explored. If there are no more options, the result is SERVFAIL * * @param qstate: query state. * @param iq: iterator query state. * @param ie: iterator shared global environment. * @param id: module id. * @return true if the event requires more request processing immediately, * false if not. */ static int processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id) { struct delegpt_ns* ns; int query_count = 0; verbose(VERB_ALGO, "No more query targets, attempting last resort"); log_assert(iq->dp); if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, NULL)) { /* fail -- no more targets, no more hope of targets, no hope * of a response. */ errinf(qstate, "all the configured stub or forward servers failed,"); errinf_dname(qstate, "at zone", iq->dp->name); verbose(VERB_QUERY, "configured stub or forward servers failed -- returning SERVFAIL"); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } if(!iq->dp->has_parent_side_NS && dname_is_root(iq->dp->name)) { struct delegpt* p = hints_lookup_root(qstate->env->hints, iq->qchase.qclass); if(p) { struct delegpt_addr* a; iq->chase_flags &= ~BIT_RD; /* go to authorities */ for(ns = p->nslist; ns; ns=ns->next) { (void)delegpt_add_ns(iq->dp, qstate->region, ns->name, ns->lame); } for(a = p->target_list; a; a=a->next_target) { (void)delegpt_add_addr(iq->dp, qstate->region, &a->addr, a->addrlen, a->bogus, a->lame, a->tls_auth_name, NULL); } } iq->dp->has_parent_side_NS = 1; } else if(!iq->dp->has_parent_side_NS) { if(!iter_lookup_parent_NS_from_cache(qstate->env, iq->dp, qstate->region, &qstate->qinfo) || !iq->dp->has_parent_side_NS) { /* if: malloc failure in lookup go up to try */ /* if: no parent NS in cache - go up one level */ verbose(VERB_ALGO, "try to grab parent NS"); iq->store_parent_NS = iq->dp; iq->chase_flags &= ~BIT_RD; /* go to authorities */ iq->deleg_msg = NULL; iq->refetch_glue = 1; iq->query_restart_count++; iq->sent_count = 0; iq->dp_target_count = 0; if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; return next_state(iq, INIT_REQUEST_STATE); } } /* see if that makes new names available */ if(!cache_fill_missing(qstate->env, iq->qchase.qclass, qstate->region, iq->dp)) log_err("out of memory in cache_fill_missing"); if(iq->dp->usable_list) { verbose(VERB_ALGO, "try parent-side-name, w. glue from cache"); return next_state(iq, QUERYTARGETS_STATE); } /* try to fill out parent glue from cache */ if(iter_lookup_parent_glue_from_cache(qstate->env, iq->dp, qstate->region, &qstate->qinfo)) { /* got parent stuff from cache, see if we can continue */ verbose(VERB_ALGO, "try parent-side glue from cache"); return next_state(iq, QUERYTARGETS_STATE); } /* query for an extra name added by the parent-NS record */ if(delegpt_count_missing_targets(iq->dp) > 0) { int qs = 0; verbose(VERB_ALGO, "try parent-side target name"); if(!query_for_targets(qstate, iq, ie, id, 1, &qs)) { errinf(qstate, "could not fetch nameserver"); errinf_dname(qstate, "at zone", iq->dp->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } iq->num_target_queries += qs; target_count_increase(iq, qs); if(qs != 0) { qstate->ext_state[id] = module_wait_subquery; return 0; /* and wait for them */ } } if(iq->depth == ie->max_dependency_depth) { verbose(VERB_QUERY, "maxdepth and need more nameservers, fail"); errinf(qstate, "cannot fetch more nameservers because at max dependency depth"); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } if(iq->depth > 0 && iq->target_count && iq->target_count[1] > MAX_TARGET_COUNT) { char s[LDNS_MAX_DOMAINLEN+1]; dname_str(qstate->qinfo.qname, s); verbose(VERB_QUERY, "request %s has exceeded the maximum " "number of glue fetches %d", s, iq->target_count[1]); errinf(qstate, "exceeded the maximum number of glue fetches"); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } /* mark cycle targets for parent-side lookups */ iter_mark_pside_cycle_targets(qstate, iq->dp); /* see if we can issue queries to get nameserver addresses */ /* this lookup is not randomized, but sequential. */ for(ns = iq->dp->nslist; ns; ns = ns->next) { /* if this nameserver is at a delegation point, but that * delegation point is a stub and we cannot go higher, skip*/ if( ((ie->supports_ipv6 && !ns->done_pside6) || (ie->supports_ipv4 && !ns->done_pside4)) && !can_have_last_resort(qstate->env, ns->name, ns->namelen, iq->qchase.qclass, NULL)) { log_nametypeclass(VERB_ALGO, "cannot pside lookup ns " "because it is also a stub/forward,", ns->name, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(ie->supports_ipv6) ns->done_pside6 = 1; if(ie->supports_ipv4) ns->done_pside4 = 1; continue; } /* query for parent-side A and AAAA for nameservers */ if(ie->supports_ipv6 && !ns->done_pside6) { /* Send the AAAA request. */ if(!generate_parentside_target_query(qstate, iq, id, ns->name, ns->namelen, LDNS_RR_TYPE_AAAA, iq->qchase.qclass)) { errinf_dname(qstate, "could not generate nameserver AAAA lookup for", ns->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } ns->done_pside6 = 1; query_count++; } if(ie->supports_ipv4 && !ns->done_pside4) { /* Send the A request. */ if(!generate_parentside_target_query(qstate, iq, id, ns->name, ns->namelen, LDNS_RR_TYPE_A, iq->qchase.qclass)) { errinf_dname(qstate, "could not generate nameserver A lookup for", ns->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } ns->done_pside4 = 1; query_count++; } if(query_count != 0) { /* suspend to await results */ verbose(VERB_ALGO, "try parent-side glue lookup"); iq->num_target_queries += query_count; target_count_increase(iq, query_count); qstate->ext_state[id] = module_wait_subquery; return 0; } } /* if this was a parent-side glue query itself, then store that * failure in cache. */ if(!qstate->no_cache_store && iq->query_for_pside_glue && !iq->pside_glue) iter_store_parentside_neg(qstate->env, &qstate->qinfo, iq->deleg_msg?iq->deleg_msg->rep: (iq->response?iq->response->rep:NULL)); errinf(qstate, "all servers for this domain failed,"); errinf_dname(qstate, "at zone", iq->dp->name); verbose(VERB_QUERY, "out of query targets -- returning SERVFAIL"); /* fail -- no more targets, no more hope of targets, no hope * of a response. */ return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } /** * Try to find the NS record set that will resolve a qtype DS query. Due * to grandparent/grandchild reasons we did not get a proper lookup right * away. We need to create type NS queries until we get the right parent * for this lookup. We remove labels from the query to find the right point. * If we end up at the old dp name, then there is no solution. * * @param qstate: query state. * @param iq: iterator query state. * @param id: module id. * @return true if the event requires more immediate processing, false if * not. This is generally only true when forwarding the request to * the final state (i.e., on answer). */ static int processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) { struct module_qstate* subq = NULL; verbose(VERB_ALGO, "processDSNSFind"); if(!iq->dsns_point) { /* initialize */ iq->dsns_point = iq->qchase.qname; iq->dsns_point_len = iq->qchase.qname_len; } /* robustcheck for internal error: we are not underneath the dp */ if(!dname_subdomain_c(iq->dsns_point, iq->dp->name)) { errinf_dname(qstate, "for DS query parent-child nameserver search the query is not under the zone", iq->dp->name); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } /* go up one (more) step, until we hit the dp, if so, end */ dname_remove_label(&iq->dsns_point, &iq->dsns_point_len); if(query_dname_compare(iq->dsns_point, iq->dp->name) == 0) { /* there was no inbetween nameserver, use the old delegation * point again. And this time, because dsns_point is nonNULL * we are going to accept the (bad) result */ iq->state = QUERYTARGETS_STATE; return 1; } iq->state = DSNS_FIND_STATE; /* spawn NS lookup (validation not needed, this is for DS lookup) */ log_nametypeclass(VERB_ALGO, "fetch nameservers", iq->dsns_point, LDNS_RR_TYPE_NS, iq->qchase.qclass); if(!generate_sub_request(iq->dsns_point, iq->dsns_point_len, LDNS_RR_TYPE_NS, iq->qchase.qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 0, 0)) { errinf_dname(qstate, "for DS query parent-child nameserver search, could not generate NS lookup for", iq->dsns_point); return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } return 0; } /** * This is the request event state where the request will be sent to one of * its current query targets. This state also handles issuing target lookup * queries for missing target IP addresses. Queries typically iterate on * this state, both when they are just trying different targets for a given * delegation point, and when they change delegation points. This state * roughly corresponds to RFC 1034 algorithm steps 3 and 4. * * @param qstate: query state. * @param iq: iterator query state. * @param ie: iterator shared global environment. * @param id: module id. * @return true if the event requires more request processing immediately, * false if not. This state only returns true when it is generating * a SERVFAIL response because the query has hit a dead end. */ static int processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id) { int tf_policy; struct delegpt_addr* target; struct outbound_entry* outq; int auth_fallback = 0; uint8_t* qout_orig = NULL; size_t qout_orig_len = 0; /* NOTE: a request will encounter this state for each target it * needs to send a query to. That is, at least one per referral, * more if some targets timeout or return throwaway answers. */ log_query_info(VERB_QUERY, "processQueryTargets:", &qstate->qinfo); verbose(VERB_ALGO, "processQueryTargets: targetqueries %d, " "currentqueries %d sentcount %d", iq->num_target_queries, iq->num_current_queries, iq->sent_count); /* Make sure that we haven't run away */ /* FIXME: is this check even necessary? */ if(iq->referral_count > MAX_REFERRAL_COUNT) { verbose(VERB_QUERY, "request has exceeded the maximum " "number of referrrals with %d", iq->referral_count); errinf(qstate, "exceeded the maximum of referrals"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(iq->sent_count > MAX_SENT_COUNT) { verbose(VERB_QUERY, "request has exceeded the maximum " "number of sends with %d", iq->sent_count); errinf(qstate, "exceeded the maximum number of sends"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(iq->target_count && iq->target_count[2] > MAX_TARGET_NX) { verbose(VERB_QUERY, "request has exceeded the maximum " " number of nxdomain nameserver lookups with %d", iq->target_count[2]); errinf(qstate, "exceeded the maximum nameserver nxdomains"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* Make sure we have a delegation point, otherwise priming failed * or another failure occurred */ if(!iq->dp) { verbose(VERB_QUERY, "Failed to get a delegation, giving up"); errinf(qstate, "failed to get a delegation (eg. prime failure)"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(!ie->supports_ipv6) delegpt_no_ipv6(iq->dp); if(!ie->supports_ipv4) delegpt_no_ipv4(iq->dp); delegpt_log(VERB_ALGO, iq->dp); if(iq->num_current_queries>0) { /* already busy answering a query, this restart is because * more delegpt addrs became available, wait for existing * query. */ verbose(VERB_ALGO, "woke up, but wait for outstanding query"); qstate->ext_state[id] = module_wait_reply; return 0; } if(iq->minimisation_state == INIT_MINIMISE_STATE && !(iq->chase_flags & BIT_RD)) { /* (Re)set qinfo_out to (new) delegation point, except when * qinfo_out is already a subdomain of dp. This happens when * increasing by more than one label at once (QNAMEs with more * than MAX_MINIMISE_COUNT labels). */ if(!(iq->qinfo_out.qname_len && dname_subdomain_c(iq->qchase.qname, iq->qinfo_out.qname) && dname_subdomain_c(iq->qinfo_out.qname, iq->dp->name))) { iq->qinfo_out.qname = iq->dp->name; iq->qinfo_out.qname_len = iq->dp->namelen; iq->qinfo_out.qtype = LDNS_RR_TYPE_A; iq->qinfo_out.qclass = iq->qchase.qclass; iq->qinfo_out.local_alias = NULL; iq->minimise_count = 0; } iq->minimisation_state = MINIMISE_STATE; } if(iq->minimisation_state == MINIMISE_STATE) { int qchaselabs = dname_count_labels(iq->qchase.qname); int labdiff = qchaselabs - dname_count_labels(iq->qinfo_out.qname); qout_orig = iq->qinfo_out.qname; qout_orig_len = iq->qinfo_out.qname_len; iq->qinfo_out.qname = iq->qchase.qname; iq->qinfo_out.qname_len = iq->qchase.qname_len; iq->minimise_count++; iq->timeout_count = 0; iter_dec_attempts(iq->dp, 1); /* Limit number of iterations for QNAMEs with more * than MAX_MINIMISE_COUNT labels. Send first MINIMISE_ONE_LAB * labels of QNAME always individually. */ if(qchaselabs > MAX_MINIMISE_COUNT && labdiff > 1 && iq->minimise_count > MINIMISE_ONE_LAB) { if(iq->minimise_count < MAX_MINIMISE_COUNT) { int multilabs = qchaselabs - 1 - MINIMISE_ONE_LAB; int extralabs = multilabs / MINIMISE_MULTIPLE_LABS; if (MAX_MINIMISE_COUNT - iq->minimise_count >= multilabs % MINIMISE_MULTIPLE_LABS) /* Default behaviour is to add 1 label * every iteration. Therefore, decrement * the extralabs by 1 */ extralabs--; if (extralabs < labdiff) labdiff -= extralabs; else labdiff = 1; } /* Last minimised iteration, send all labels with * QTYPE=NS */ else labdiff = 1; } if(labdiff > 1) { verbose(VERB_QUERY, "removing %d labels", labdiff-1); dname_remove_labels(&iq->qinfo_out.qname, &iq->qinfo_out.qname_len, labdiff-1); } if(labdiff < 1 || (labdiff < 2 && (iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->qchase.qtype == LDNS_RR_TYPE_A))) /* Stop minimising this query, resolve "as usual" */ iq->minimisation_state = DONOT_MINIMISE_STATE; else if(!qstate->no_cache_lookup) { struct dns_msg* msg = dns_cache_lookup(qstate->env, iq->qinfo_out.qname, iq->qinfo_out.qname_len, iq->qinfo_out.qtype, iq->qinfo_out.qclass, qstate->query_flags, qstate->region, qstate->env->scratch, 0); if(msg && FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NOERROR) /* no need to send query if it is already * cached as NOERROR */ return 1; if(msg && FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NXDOMAIN && qstate->env->need_to_validate && qstate->env->cfg->harden_below_nxdomain) { if(msg->rep->security == sec_status_secure) { iq->response = msg; return final_state(iq); } if(msg->rep->security == sec_status_unchecked) { struct module_qstate* subq = NULL; if(!generate_sub_request( iq->qinfo_out.qname, iq->qinfo_out.qname_len, iq->qinfo_out.qtype, iq->qinfo_out.qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 1)) verbose(VERB_ALGO, "could not validate NXDOMAIN " "response"); } } if(msg && FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NXDOMAIN) { /* return and add a label in the next * minimisation iteration. */ return 1; } } } if(iq->minimisation_state == SKIP_MINIMISE_STATE) { if(iq->timeout_count < MAX_MINIMISE_TIMEOUT_COUNT) /* Do not increment qname, continue incrementing next * iteration */ iq->minimisation_state = MINIMISE_STATE; else if(!qstate->env->cfg->qname_minimisation_strict) /* Too many time-outs detected for this QNAME and QTYPE. * We give up, disable QNAME minimisation. */ iq->minimisation_state = DONOT_MINIMISE_STATE; } if(iq->minimisation_state == DONOT_MINIMISE_STATE) iq->qinfo_out = iq->qchase; /* now find an answer to this query */ /* see if authority zones have an answer */ /* now we know the dp, we can check the auth zone for locally hosted * contents */ if(!iq->auth_zone_avoid && qstate->blacklist) { if(auth_zones_can_fallback(qstate->env->auth_zones, iq->dp->name, iq->dp->namelen, iq->qinfo_out.qclass)) { /* if cache is blacklisted and this zone allows us * to fallback to the internet, then do so, and * fetch results from the internet servers */ iq->auth_zone_avoid = 1; } } if(iq->auth_zone_avoid) { iq->auth_zone_avoid = 0; auth_fallback = 1; } else if(auth_zones_lookup(qstate->env->auth_zones, &iq->qinfo_out, qstate->region, &iq->response, &auth_fallback, iq->dp->name, iq->dp->namelen)) { /* use this as a response to be processed by the iterator */ if(verbosity >= VERB_ALGO) { log_dns_msg("msg from auth zone", &iq->response->qinfo, iq->response->rep); } if((iq->chase_flags&BIT_RD) && !(iq->response->rep->flags&BIT_AA)) { verbose(VERB_ALGO, "forwarder, ignoring referral from auth zone"); } else { lock_rw_wrlock(&qstate->env->auth_zones->lock); qstate->env->auth_zones->num_query_up++; lock_rw_unlock(&qstate->env->auth_zones->lock); iq->num_current_queries++; iq->chase_to_rd = 0; iq->dnssec_lame_query = 0; iq->auth_zone_response = 1; return next_state(iq, QUERY_RESP_STATE); } } iq->auth_zone_response = 0; if(auth_fallback == 0) { /* like we got servfail from the auth zone lookup, and * no internet fallback */ verbose(VERB_ALGO, "auth zone lookup failed, no fallback," " servfail"); errinf(qstate, "auth zone lookup failed, fallback is off"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(iq->dp->auth_dp) { /* we wanted to fallback, but had no delegpt, only the * auth zone generated delegpt, create an actual one */ iq->auth_zone_avoid = 1; return next_state(iq, INIT_REQUEST_STATE); } /* but mostly, fallback==1 (like, when no such auth zone exists) * and we continue with lookups */ tf_policy = 0; /* < not <=, because although the array is large enough for <=, the * generated query will immediately be discarded due to depth and * that servfail is cached, which is not good as opportunism goes. */ if(iq->depth < ie->max_dependency_depth && iq->num_target_queries == 0 && (!iq->target_count || iq->target_count[2]==0) && iq->sent_count < TARGET_FETCH_STOP) { tf_policy = ie->target_fetch_policy[iq->depth]; } /* if in 0x20 fallback get as many targets as possible */ if(iq->caps_fallback) { int extra = 0; size_t naddr, nres, navail; if(!query_for_targets(qstate, iq, ie, id, -1, &extra)) { errinf(qstate, "could not fetch nameservers for 0x20 fallback"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } iq->num_target_queries += extra; target_count_increase(iq, extra); if(iq->num_target_queries > 0) { /* wait to get all targets, we want to try em */ verbose(VERB_ALGO, "wait for all targets for fallback"); qstate->ext_state[id] = module_wait_reply; /* undo qname minimise step because we'll get back here * to do it again */ if(qout_orig && iq->minimise_count > 0) { iq->minimise_count--; iq->qinfo_out.qname = qout_orig; iq->qinfo_out.qname_len = qout_orig_len; } return 0; } /* did we do enough fallback queries already? */ delegpt_count_addr(iq->dp, &naddr, &nres, &navail); /* the current caps_server is the number of fallbacks sent. * the original query is one that matched too, so we have * caps_server+1 number of matching queries now */ if(iq->caps_server+1 >= naddr*3 || iq->caps_server*2+2 >= MAX_SENT_COUNT) { /* *2 on sentcount check because ipv6 may fail */ /* we're done, process the response */ verbose(VERB_ALGO, "0x20 fallback had %d responses " "match for %d wanted, done.", (int)iq->caps_server+1, (int)naddr*3); iq->response = iq->caps_response; iq->caps_fallback = 0; iter_dec_attempts(iq->dp, 3); /* space for fallback */ iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } verbose(VERB_ALGO, "0x20 fallback number %d", (int)iq->caps_server); /* if there is a policy to fetch missing targets * opportunistically, do it. we rely on the fact that once a * query (or queries) for a missing name have been issued, * they will not show up again. */ } else if(tf_policy != 0) { int extra = 0; verbose(VERB_ALGO, "attempt to get extra %d targets", tf_policy); (void)query_for_targets(qstate, iq, ie, id, tf_policy, &extra); /* errors ignored, these targets are not strictly necessary for * this result, we do not have to reply with SERVFAIL */ iq->num_target_queries += extra; target_count_increase(iq, extra); } /* Add the current set of unused targets to our queue. */ delegpt_add_unused_targets(iq->dp); /* Select the next usable target, filtering out unsuitable targets. */ target = iter_server_selection(ie, qstate->env, iq->dp, iq->dp->name, iq->dp->namelen, iq->qchase.qtype, &iq->dnssec_lame_query, &iq->chase_to_rd, iq->num_target_queries, qstate->blacklist, qstate->prefetch_leeway); /* If no usable target was selected... */ if(!target) { /* Here we distinguish between three states: generate a new * target query, just wait, or quit (with a SERVFAIL). * We have the following information: number of active * target queries, number of active current queries, * the presence of missing targets at this delegation * point, and the given query target policy. */ /* Check for the wait condition. If this is true, then * an action must be taken. */ if(iq->num_target_queries==0 && iq->num_current_queries==0) { /* If there is nothing to wait for, then we need * to distinguish between generating (a) new target * query, or failing. */ if(delegpt_count_missing_targets(iq->dp) > 0) { int qs = 0; verbose(VERB_ALGO, "querying for next " "missing target"); if(!query_for_targets(qstate, iq, ie, id, 1, &qs)) { errinf(qstate, "could not fetch nameserver"); errinf_dname(qstate, "at zone", iq->dp->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(qs == 0 && delegpt_count_missing_targets(iq->dp) == 0){ /* it looked like there were missing * targets, but they did not turn up. * Try the bad choices again (if any), * when we get back here missing==0, * so this is not a loop. */ return 1; } iq->num_target_queries += qs; target_count_increase(iq, qs); } /* Since a target query might have been made, we * need to check again. */ if(iq->num_target_queries == 0) { /* if in capsforid fallback, instead of last * resort, we agree with the current reply * we have (if any) (our count of addrs bad)*/ if(iq->caps_fallback && iq->caps_reply) { /* we're done, process the response */ verbose(VERB_ALGO, "0x20 fallback had %d responses, " "but no more servers except " "last resort, done.", (int)iq->caps_server+1); iq->response = iq->caps_response; iq->caps_fallback = 0; iter_dec_attempts(iq->dp, 3); /* space for fallback */ iq->num_current_queries++; /* RespState decrements it*/ iq->referral_count++; /* make sure we don't loop */ iq->sent_count = 0; iq->dp_target_count = 0; iq->state = QUERY_RESP_STATE; return 1; } return processLastResort(qstate, iq, ie, id); } } /* otherwise, we have no current targets, so submerge * until one of the target or direct queries return. */ if(iq->num_target_queries>0 && iq->num_current_queries>0) { verbose(VERB_ALGO, "no current targets -- waiting " "for %d targets to resolve or %d outstanding" " queries to respond", iq->num_target_queries, iq->num_current_queries); qstate->ext_state[id] = module_wait_reply; } else if(iq->num_target_queries>0) { verbose(VERB_ALGO, "no current targets -- waiting " "for %d targets to resolve.", iq->num_target_queries); qstate->ext_state[id] = module_wait_subquery; } else { verbose(VERB_ALGO, "no current targets -- waiting " "for %d outstanding queries to respond.", iq->num_current_queries); qstate->ext_state[id] = module_wait_reply; } /* undo qname minimise step because we'll get back here * to do it again */ if(qout_orig && iq->minimise_count > 0) { iq->minimise_count--; iq->qinfo_out.qname = qout_orig; iq->qinfo_out.qname_len = qout_orig_len; } return 0; } /* if not forwarding, check ratelimits per delegationpoint name */ if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { if(!infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, *qstate->env->now, &qstate->qinfo, qstate->reply)) { lock_basic_lock(&ie->queries_ratelimit_lock); ie->num_queries_ratelimited++; lock_basic_unlock(&ie->queries_ratelimit_lock); verbose(VERB_ALGO, "query exceeded ratelimits"); qstate->was_ratelimited = 1; errinf_dname(qstate, "exceeded ratelimit for zone", iq->dp->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } } /* We have a valid target. */ if(verbosity >= VERB_QUERY) { log_query_info(VERB_QUERY, "sending query:", &iq->qinfo_out); log_name_addr(VERB_QUERY, "sending to target:", iq->dp->name, &target->addr, target->addrlen); verbose(VERB_ALGO, "dnssec status: %s%s", iq->dnssec_expected?"expected": "not expected", iq->dnssec_lame_query?" but lame_query anyway": ""); } fptr_ok(fptr_whitelist_modenv_send_query(qstate->env->send_query)); outq = (*qstate->env->send_query)(&iq->qinfo_out, iq->chase_flags | (iq->chase_to_rd?BIT_RD:0), /* unset CD if to forwarder(RD set) and not dnssec retry * (blacklist nonempty) and no trust-anchors are configured * above the qname or on the first attempt when dnssec is on */ EDNS_DO| ((iq->chase_to_rd||(iq->chase_flags&BIT_RD)!=0)&& !qstate->blacklist&&(!iter_qname_indicates_dnssec(qstate->env, &iq->qinfo_out)||target->attempts==1)?0:BIT_CD), iq->dnssec_expected, iq->caps_fallback || is_caps_whitelisted( ie, iq), &target->addr, target->addrlen, iq->dp->name, iq->dp->namelen, (iq->dp->ssl_upstream || qstate->env->cfg->ssl_upstream), target->tls_auth_name, qstate); if(!outq) { log_addr(VERB_DETAIL, "error sending query to auth server", &target->addr, target->addrlen); if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) infra_ratelimit_dec(qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, *qstate->env->now); if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = SKIP_MINIMISE_STATE; return next_state(iq, QUERYTARGETS_STATE); } outbound_list_insert(&iq->outlist, outq); iq->num_current_queries++; iq->sent_count++; qstate->ext_state[id] = module_wait_reply; return 0; } /** find NS rrset in given list */ static struct ub_packed_rrset_key* find_NS(struct reply_info* rep, size_t from, size_t to) { size_t i; for(i=from; irrsets[i]->rk.type) == LDNS_RR_TYPE_NS) return rep->rrsets[i]; } return NULL; } /** * Process the query response. All queries end up at this state first. This * process generally consists of analyzing the response and routing the * event to the next state (either bouncing it back to a request state, or * terminating the processing for this event). * * @param qstate: query state. * @param iq: iterator query state. * @param id: module id. * @return true if the event requires more immediate processing, false if * not. This is generally only true when forwarding the request to * the final state (i.e., on answer). */ static int processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, int id) { int dnsseclame = 0; enum response_type type; iq->num_current_queries--; if(!inplace_cb_query_response_call(qstate->env, qstate, iq->response)) log_err("unable to call query_response callback"); if(iq->response == NULL) { /* Don't increment qname when QNAME minimisation is enabled */ if(qstate->env->cfg->qname_minimisation) { iq->minimisation_state = SKIP_MINIMISE_STATE; } iq->timeout_count++; iq->chase_to_rd = 0; iq->dnssec_lame_query = 0; verbose(VERB_ALGO, "query response was timeout"); return next_state(iq, QUERYTARGETS_STATE); } iq->timeout_count = 0; type = response_type_from_server( (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd), iq->response, &iq->qinfo_out, iq->dp); iq->chase_to_rd = 0; if(type == RESPONSE_TYPE_REFERRAL && (iq->chase_flags&BIT_RD) && !iq->auth_zone_response) { /* When forwarding (RD bit is set), we handle referrals * differently. No queries should be sent elsewhere */ type = RESPONSE_TYPE_ANSWER; } if(!qstate->env->cfg->disable_dnssec_lame_check && iq->dnssec_expected && !iq->dnssec_lame_query && !(iq->chase_flags&BIT_RD) && iq->sent_count < DNSSEC_LAME_DETECT_COUNT && type != RESPONSE_TYPE_LAME && type != RESPONSE_TYPE_REC_LAME && type != RESPONSE_TYPE_THROWAWAY && type != RESPONSE_TYPE_UNTYPED) { /* a possible answer, see if it is missing DNSSEC */ /* but not when forwarding, so we dont mark fwder lame */ if(!iter_msg_has_dnssec(iq->response)) { /* Mark this address as dnsseclame in this dp, * because that will make serverselection disprefer * it, but also, once it is the only final option, * use dnssec-lame-bypass if it needs to query there.*/ if(qstate->reply) { struct delegpt_addr* a = delegpt_find_addr( iq->dp, &qstate->reply->addr, qstate->reply->addrlen); if(a) a->dnsseclame = 1; } /* test the answer is from the zone we expected, * otherwise, (due to parent,child on same server), we * might mark the server,zone lame inappropriately */ if(!iter_msg_from_zone(iq->response, iq->dp, type, iq->qchase.qclass)) qstate->reply = NULL; type = RESPONSE_TYPE_LAME; dnsseclame = 1; } } else iq->dnssec_lame_query = 0; /* see if referral brings us close to the target */ if(type == RESPONSE_TYPE_REFERRAL) { struct ub_packed_rrset_key* ns = find_NS( iq->response->rep, iq->response->rep->an_numrrsets, iq->response->rep->an_numrrsets + iq->response->rep->ns_numrrsets); if(!ns) ns = find_NS(iq->response->rep, 0, iq->response->rep->an_numrrsets); if(!ns || !dname_strict_subdomain_c(ns->rk.dname, iq->dp->name) || !dname_subdomain_c(iq->qchase.qname, ns->rk.dname)){ verbose(VERB_ALGO, "bad referral, throwaway"); type = RESPONSE_TYPE_THROWAWAY; } else iter_scrub_ds(iq->response, ns, iq->dp->name); } else iter_scrub_ds(iq->response, NULL, NULL); if(type == RESPONSE_TYPE_THROWAWAY && FLAGS_GET_RCODE(iq->response->rep->flags) == LDNS_RCODE_YXDOMAIN) { /* YXDOMAIN is a permanent error, no need to retry */ type = RESPONSE_TYPE_ANSWER; } if(type == RESPONSE_TYPE_CNAME && iq->response->rep->an_numrrsets >= 1 && ntohs(iq->response->rep->rrsets[0]->rk.type) == LDNS_RR_TYPE_DNAME) { uint8_t* sname = NULL; size_t snamelen = 0; get_cname_target(iq->response->rep->rrsets[0], &sname, &snamelen); if(snamelen && dname_subdomain_c(sname, iq->response->rep->rrsets[0]->rk.dname)) { /* DNAME to a subdomain loop; do not recurse */ type = RESPONSE_TYPE_ANSWER; } } else if(type == RESPONSE_TYPE_CNAME && iq->qchase.qtype == LDNS_RR_TYPE_CNAME && iq->minimisation_state == MINIMISE_STATE && query_dname_compare(iq->qchase.qname, iq->qinfo_out.qname) == 0) { /* The minimised query for full QTYPE and hidden QTYPE can be * classified as CNAME response type, even when the original * QTYPE=CNAME. This should be treated as answer response type. */ type = RESPONSE_TYPE_ANSWER; } /* handle each of the type cases */ if(type == RESPONSE_TYPE_ANSWER) { /* ANSWER type responses terminate the query algorithm, * so they sent on their */ if(verbosity >= VERB_DETAIL) { verbose(VERB_DETAIL, "query response was %s", FLAGS_GET_RCODE(iq->response->rep->flags) ==LDNS_RCODE_NXDOMAIN?"NXDOMAIN ANSWER": (iq->response->rep->an_numrrsets?"ANSWER": "nodata ANSWER")); } /* if qtype is DS, check we have the right level of answer, * like grandchild answer but we need the middle, reject it */ if(iq->qchase.qtype == LDNS_RR_TYPE_DS && !iq->dsns_point && !(iq->chase_flags&BIT_RD) && iter_ds_toolow(iq->response, iq->dp) && iter_dp_cangodown(&iq->qchase, iq->dp)) { /* close down outstanding requests to be discarded */ outbound_list_clear(&iq->outlist); iq->num_current_queries = 0; fptr_ok(fptr_whitelist_modenv_detach_subs( qstate->env->detach_subs)); (*qstate->env->detach_subs)(qstate); iq->num_target_queries = 0; return processDSNSFind(qstate, iq, id); } if(!qstate->no_cache_store) iter_dns_store(qstate->env, &iq->response->qinfo, iq->response->rep, 0, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, qstate->region, qstate->query_flags); /* close down outstanding requests to be discarded */ outbound_list_clear(&iq->outlist); iq->num_current_queries = 0; fptr_ok(fptr_whitelist_modenv_detach_subs( qstate->env->detach_subs)); (*qstate->env->detach_subs)(qstate); iq->num_target_queries = 0; if(qstate->reply) sock_list_insert(&qstate->reply_origin, &qstate->reply->addr, qstate->reply->addrlen, qstate->region); if(iq->minimisation_state != DONOT_MINIMISE_STATE && !(iq->chase_flags & BIT_RD)) { if(FLAGS_GET_RCODE(iq->response->rep->flags) != LDNS_RCODE_NOERROR) { if(qstate->env->cfg->qname_minimisation_strict) { if(FLAGS_GET_RCODE(iq->response->rep->flags) == LDNS_RCODE_NXDOMAIN) { iter_scrub_nxdomain(iq->response); return final_state(iq); } return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* Best effort qname-minimisation. * Stop minimising and send full query when * RCODE is not NOERROR. */ iq->minimisation_state = DONOT_MINIMISE_STATE; } if(FLAGS_GET_RCODE(iq->response->rep->flags) == LDNS_RCODE_NXDOMAIN) { /* Stop resolving when NXDOMAIN is DNSSEC * signed. Based on assumption that nameservers * serving signed zones do not return NXDOMAIN * for empty-non-terminals. */ if(iq->dnssec_expected) return final_state(iq); /* Make subrequest to validate intermediate * NXDOMAIN if harden-below-nxdomain is * enabled. */ if(qstate->env->cfg->harden_below_nxdomain && qstate->env->need_to_validate) { struct module_qstate* subq = NULL; log_query_info(VERB_QUERY, "schedule NXDOMAIN validation:", &iq->response->qinfo); if(!generate_sub_request( iq->response->qinfo.qname, iq->response->qinfo.qname_len, iq->response->qinfo.qtype, iq->response->qinfo.qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 1)) verbose(VERB_ALGO, "could not validate NXDOMAIN " "response"); } } return next_state(iq, QUERYTARGETS_STATE); } return final_state(iq); } else if(type == RESPONSE_TYPE_REFERRAL) { /* REFERRAL type responses get a reset of the * delegation point, and back to the QUERYTARGETS_STATE. */ verbose(VERB_DETAIL, "query response was REFERRAL"); if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { /* we have a referral, no ratelimit, we can send * our queries to the given name */ infra_ratelimit_dec(qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, *qstate->env->now); } /* if hardened, only store referral if we asked for it */ if(!qstate->no_cache_store && (!qstate->env->cfg->harden_referral_path || ( qstate->qinfo.qtype == LDNS_RR_TYPE_NS && (qstate->query_flags&BIT_RD) && !(qstate->query_flags&BIT_CD) /* we know that all other NS rrsets are scrubbed * away, thus on referral only one is left. * see if that equals the query name... */ && ( /* auth section, but sometimes in answer section*/ reply_find_rrset_section_ns(iq->response->rep, iq->qchase.qname, iq->qchase.qname_len, LDNS_RR_TYPE_NS, iq->qchase.qclass) || reply_find_rrset_section_an(iq->response->rep, iq->qchase.qname, iq->qchase.qname_len, LDNS_RR_TYPE_NS, iq->qchase.qclass) ) ))) { /* Store the referral under the current query */ /* no prefetch-leeway, since its not the answer */ iter_dns_store(qstate->env, &iq->response->qinfo, iq->response->rep, 1, 0, 0, NULL, 0); if(iq->store_parent_NS) iter_store_parentside_NS(qstate->env, iq->response->rep); if(qstate->env->neg_cache) val_neg_addreferral(qstate->env->neg_cache, iq->response->rep, iq->dp->name); } /* store parent-side-in-zone-glue, if directly queried for */ if(!qstate->no_cache_store && iq->query_for_pside_glue && !iq->pside_glue) { iq->pside_glue = reply_find_rrset(iq->response->rep, iq->qchase.qname, iq->qchase.qname_len, iq->qchase.qtype, iq->qchase.qclass); if(iq->pside_glue) { log_rrset_key(VERB_ALGO, "found parent-side " "glue", iq->pside_glue); iter_store_parentside_rrset(qstate->env, iq->pside_glue); } } /* Reset the event state, setting the current delegation * point to the referral. */ iq->deleg_msg = iq->response; iq->dp = delegpt_from_message(iq->response, qstate->region); if (qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; if(!iq->dp) { errinf(qstate, "malloc failure, for delegation point"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(!cache_fill_missing(qstate->env, iq->qchase.qclass, qstate->region, iq->dp)) { errinf(qstate, "malloc failure, copy extra info into delegation point"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } if(iq->store_parent_NS && query_dname_compare(iq->dp->name, iq->store_parent_NS->name) == 0) iter_merge_retry_counts(iq->dp, iq->store_parent_NS); delegpt_log(VERB_ALGO, iq->dp); /* Count this as a referral. */ iq->referral_count++; iq->sent_count = 0; iq->dp_target_count = 0; /* see if the next dp is a trust anchor, or a DS was sent * along, indicating dnssec is expected for next zone */ iq->dnssec_expected = iter_indicates_dnssec(qstate->env, iq->dp, iq->response, iq->qchase.qclass); /* if dnssec, validating then also fetch the key for the DS */ if(iq->dnssec_expected && qstate->env->cfg->prefetch_key && !(qstate->query_flags&BIT_CD)) generate_dnskey_prefetch(qstate, iq, id); /* spawn off NS and addr to auth servers for the NS we just * got in the referral. This gets authoritative answer * (answer section trust level) rrset. * right after, we detach the subs, answer goes to cache. */ if(qstate->env->cfg->harden_referral_path) generate_ns_check(qstate, iq, id); /* stop current outstanding queries. * FIXME: should the outstanding queries be waited for and * handled? Say by a subquery that inherits the outbound_entry. */ outbound_list_clear(&iq->outlist); iq->num_current_queries = 0; fptr_ok(fptr_whitelist_modenv_detach_subs( qstate->env->detach_subs)); (*qstate->env->detach_subs)(qstate); iq->num_target_queries = 0; verbose(VERB_ALGO, "cleared outbound list for next round"); return next_state(iq, QUERYTARGETS_STATE); } else if(type == RESPONSE_TYPE_CNAME) { uint8_t* sname = NULL; size_t snamelen = 0; /* CNAME type responses get a query restart (i.e., get a * reset of the query state and go back to INIT_REQUEST_STATE). */ verbose(VERB_DETAIL, "query response was CNAME"); if(verbosity >= VERB_ALGO) log_dns_msg("cname msg", &iq->response->qinfo, iq->response->rep); /* if qtype is DS, check we have the right level of answer, * like grandchild answer but we need the middle, reject it */ if(iq->qchase.qtype == LDNS_RR_TYPE_DS && !iq->dsns_point && !(iq->chase_flags&BIT_RD) && iter_ds_toolow(iq->response, iq->dp) && iter_dp_cangodown(&iq->qchase, iq->dp)) { outbound_list_clear(&iq->outlist); iq->num_current_queries = 0; fptr_ok(fptr_whitelist_modenv_detach_subs( qstate->env->detach_subs)); (*qstate->env->detach_subs)(qstate); iq->num_target_queries = 0; return processDSNSFind(qstate, iq, id); } /* Process the CNAME response. */ if(!handle_cname_response(qstate, iq, iq->response, &sname, &snamelen)) { errinf(qstate, "malloc failure, CNAME info"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* cache the CNAME response under the current query */ /* NOTE : set referral=1, so that rrsets get stored but not * the partial query answer (CNAME only). */ /* prefetchleeway applied because this updates answer parts */ if(!qstate->no_cache_store) iter_dns_store(qstate->env, &iq->response->qinfo, iq->response->rep, 1, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, NULL, qstate->query_flags); /* set the current request's qname to the new value. */ iq->qchase.qname = sname; iq->qchase.qname_len = snamelen; /* Clear the query state, since this is a query restart. */ iq->deleg_msg = NULL; iq->dp = NULL; iq->dsns_point = NULL; iq->auth_zone_response = 0; iq->sent_count = 0; iq->dp_target_count = 0; if(iq->minimisation_state != MINIMISE_STATE) /* Only count as query restart when it is not an extra * query as result of qname minimisation. */ iq->query_restart_count++; if(qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; /* stop current outstanding queries. * FIXME: should the outstanding queries be waited for and * handled? Say by a subquery that inherits the outbound_entry. */ outbound_list_clear(&iq->outlist); iq->num_current_queries = 0; fptr_ok(fptr_whitelist_modenv_detach_subs( qstate->env->detach_subs)); (*qstate->env->detach_subs)(qstate); iq->num_target_queries = 0; if(qstate->reply) sock_list_insert(&qstate->reply_origin, &qstate->reply->addr, qstate->reply->addrlen, qstate->region); verbose(VERB_ALGO, "cleared outbound list for query restart"); /* go to INIT_REQUEST_STATE for new qname. */ return next_state(iq, INIT_REQUEST_STATE); } else if(type == RESPONSE_TYPE_LAME) { /* Cache the LAMEness. */ verbose(VERB_DETAIL, "query response was %sLAME", dnsseclame?"DNSSEC ":""); if(!dname_subdomain_c(iq->qchase.qname, iq->dp->name)) { log_err("mark lame: mismatch in qname and dpname"); /* throwaway this reply below */ } else if(qstate->reply) { /* need addr for lameness cache, but we may have * gotten this from cache, so test to be sure */ if(!infra_set_lame(qstate->env->infra_cache, &qstate->reply->addr, qstate->reply->addrlen, iq->dp->name, iq->dp->namelen, *qstate->env->now, dnsseclame, 0, iq->qchase.qtype)) log_err("mark host lame: out of memory"); } } else if(type == RESPONSE_TYPE_REC_LAME) { /* Cache the LAMEness. */ verbose(VERB_DETAIL, "query response REC_LAME: " "recursive but not authoritative server"); if(!dname_subdomain_c(iq->qchase.qname, iq->dp->name)) { log_err("mark rec_lame: mismatch in qname and dpname"); /* throwaway this reply below */ } else if(qstate->reply) { /* need addr for lameness cache, but we may have * gotten this from cache, so test to be sure */ verbose(VERB_DETAIL, "mark as REC_LAME"); if(!infra_set_lame(qstate->env->infra_cache, &qstate->reply->addr, qstate->reply->addrlen, iq->dp->name, iq->dp->namelen, *qstate->env->now, 0, 1, iq->qchase.qtype)) log_err("mark host lame: out of memory"); } } else if(type == RESPONSE_TYPE_THROWAWAY) { /* LAME and THROWAWAY responses are handled the same way. * In this case, the event is just sent directly back to * the QUERYTARGETS_STATE without resetting anything, * because, clearly, the next target must be tried. */ verbose(VERB_DETAIL, "query response was THROWAWAY"); } else { log_warn("A query response came back with an unknown type: %d", (int)type); } /* LAME, THROWAWAY and "unknown" all end up here. * Recycle to the QUERYTARGETS state to hopefully try a * different target. */ if (qstate->env->cfg->qname_minimisation && !qstate->env->cfg->qname_minimisation_strict) iq->minimisation_state = DONOT_MINIMISE_STATE; if(iq->auth_zone_response) { /* can we fallback? */ iq->auth_zone_response = 0; if(!auth_zones_can_fallback(qstate->env->auth_zones, iq->dp->name, iq->dp->namelen, qstate->qinfo.qclass)) { verbose(VERB_ALGO, "auth zone response bad, and no" " fallback possible, servfail"); errinf_dname(qstate, "response is bad, no fallback, " "for auth zone", iq->dp->name); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } verbose(VERB_ALGO, "auth zone response was bad, " "fallback enabled"); iq->auth_zone_avoid = 1; if(iq->dp->auth_dp) { /* we are using a dp for the auth zone, with no * nameservers, get one first */ iq->dp = NULL; return next_state(iq, INIT_REQUEST_STATE); } } return next_state(iq, QUERYTARGETS_STATE); } /** * Return priming query results to interested super querystates. * * Sets the delegation point and delegation message (not nonRD queries). * This is a callback from walk_supers. * * @param qstate: priming query state that finished. * @param id: module id. * @param forq: the qstate for which priming has been done. */ static void prime_supers(struct module_qstate* qstate, int id, struct module_qstate* forq) { struct iter_qstate* foriq = (struct iter_qstate*)forq->minfo[id]; struct delegpt* dp = NULL; log_assert(qstate->is_priming || foriq->wait_priming_stub); log_assert(qstate->return_rcode == LDNS_RCODE_NOERROR); /* Convert our response to a delegation point */ dp = delegpt_from_message(qstate->return_msg, forq->region); if(!dp) { /* if there is no convertable delegation point, then * the ANSWER type was (presumably) a negative answer. */ verbose(VERB_ALGO, "prime response was not a positive " "ANSWER; failing"); foriq->dp = NULL; foriq->state = QUERYTARGETS_STATE; return; } log_query_info(VERB_DETAIL, "priming successful for", &qstate->qinfo); delegpt_log(VERB_ALGO, dp); foriq->dp = dp; foriq->deleg_msg = dns_copy_msg(qstate->return_msg, forq->region); if(!foriq->deleg_msg) { log_err("copy prime response: out of memory"); foriq->dp = NULL; foriq->state = QUERYTARGETS_STATE; return; } /* root priming responses go to init stage 2, priming stub * responses to to stage 3. */ if(foriq->wait_priming_stub) { foriq->state = INIT_REQUEST_3_STATE; foriq->wait_priming_stub = 0; } else foriq->state = INIT_REQUEST_2_STATE; /* because we are finished, the parent will be reactivated */ } /** * This handles the response to a priming query. This is used to handle both * root and stub priming responses. This is basically the equivalent of the * QUERY_RESP_STATE, but will not handle CNAME responses and will treat * REFERRALs as ANSWERS. It will also update and reactivate the originating * event. * * @param qstate: query state. * @param id: module id. * @return true if the event needs more immediate processing, false if not. * This state always returns false. */ static int processPrimeResponse(struct module_qstate* qstate, int id) { struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; enum response_type type; iq->response->rep->flags &= ~(BIT_RD|BIT_RA); /* ignore rec-lame */ type = response_type_from_server( (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd), iq->response, &iq->qchase, iq->dp); if(type == RESPONSE_TYPE_ANSWER) { qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = iq->response; } else { errinf(qstate, "prime response did not get an answer"); errinf_dname(qstate, "for", qstate->qinfo.qname); qstate->return_rcode = LDNS_RCODE_SERVFAIL; qstate->return_msg = NULL; } /* validate the root or stub after priming (if enabled). * This is the same query as the prime query, but with validation. * Now that we are primed, the additional queries that validation * may need can be resolved. */ if(qstate->env->cfg->harden_referral_path) { struct module_qstate* subq = NULL; log_nametypeclass(VERB_ALGO, "schedule prime validation", qstate->qinfo.qname, qstate->qinfo.qtype, qstate->qinfo.qclass); if(!generate_sub_request(qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, qstate->qinfo.qclass, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { verbose(VERB_ALGO, "could not generate prime check"); } generate_a_aaaa_check(qstate, iq, id); } /* This event is finished. */ qstate->ext_state[id] = module_finished; return 0; } /** * Do final processing on responses to target queries. Events reach this * state after the iterative resolution algorithm terminates. This state is * responsible for reactivating the original event, and housekeeping related * to received target responses (caching, updating the current delegation * point, etc). * Callback from walk_supers for every super state that is interested in * the results from this query. * * @param qstate: query state. * @param id: module id. * @param forq: super query state. */ static void processTargetResponse(struct module_qstate* qstate, int id, struct module_qstate* forq) { struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; struct iter_qstate* foriq = (struct iter_qstate*)forq->minfo[id]; struct ub_packed_rrset_key* rrset; struct delegpt_ns* dpns; log_assert(qstate->return_rcode == LDNS_RCODE_NOERROR); foriq->state = QUERYTARGETS_STATE; log_query_info(VERB_ALGO, "processTargetResponse", &qstate->qinfo); log_query_info(VERB_ALGO, "processTargetResponse super", &forq->qinfo); /* Tell the originating event that this target query has finished * (regardless if it succeeded or not). */ foriq->num_target_queries--; /* check to see if parent event is still interested (in orig name). */ if(!foriq->dp) { verbose(VERB_ALGO, "subq: parent not interested, was reset"); return; /* not interested anymore */ } dpns = delegpt_find_ns(foriq->dp, qstate->qinfo.qname, qstate->qinfo.qname_len); if(!dpns) { /* If not interested, just stop processing this event */ verbose(VERB_ALGO, "subq: parent not interested anymore"); /* could be because parent was jostled out of the cache, and a new identical query arrived, that does not want it*/ return; } /* if iq->query_for_pside_glue then add the pside_glue (marked lame) */ if(iq->pside_glue) { /* if the pside_glue is NULL, then it could not be found, * the done_pside is already set when created and a cache * entry created in processFinished so nothing to do here */ log_rrset_key(VERB_ALGO, "add parentside glue to dp", iq->pside_glue); if(!delegpt_add_rrset(foriq->dp, forq->region, iq->pside_glue, 1, NULL)) log_err("out of memory adding pside glue"); } /* This response is relevant to the current query, so we * add (attempt to add, anyway) this target(s) and reactivate * the original event. * NOTE: we could only look for the AnswerRRset if the * response type was ANSWER. */ rrset = reply_find_answer_rrset(&iq->qchase, qstate->return_msg->rep); if(rrset) { int additions = 0; /* if CNAMEs have been followed - add new NS to delegpt. */ /* BTW. RFC 1918 says NS should not have got CNAMEs. Robust. */ if(!delegpt_find_ns(foriq->dp, rrset->rk.dname, rrset->rk.dname_len)) { /* if dpns->lame then set newcname ns lame too */ if(!delegpt_add_ns(foriq->dp, forq->region, rrset->rk.dname, dpns->lame)) log_err("out of memory adding cnamed-ns"); } /* if dpns->lame then set the address(es) lame too */ if(!delegpt_add_rrset(foriq->dp, forq->region, rrset, dpns->lame, &additions)) log_err("out of memory adding targets"); if(!additions) { /* no new addresses, increase the nxns counter, like * this could be a list of wildcards with no new * addresses */ target_count_increase_nx(foriq, 1); } verbose(VERB_ALGO, "added target response"); delegpt_log(VERB_ALGO, foriq->dp); } else { verbose(VERB_ALGO, "iterator TargetResponse failed"); delegpt_mark_neg(dpns, qstate->qinfo.qtype); dpns->resolved = 1; /* fail the target */ if((dpns->got4 == 2 || !ie->supports_ipv4) && (dpns->got6 == 2 || !ie->supports_ipv6)) target_count_increase_nx(foriq, 1); } } /** * Process response for DS NS Find queries, that attempt to find the delegation * point where we ask the DS query from. * * @param qstate: query state. * @param id: module id. * @param forq: super query state. */ static void processDSNSResponse(struct module_qstate* qstate, int id, struct module_qstate* forq) { struct iter_qstate* foriq = (struct iter_qstate*)forq->minfo[id]; /* if the finished (iq->response) query has no NS set: continue * up to look for the right dp; nothing to change, do DPNSstate */ if(qstate->return_rcode != LDNS_RCODE_NOERROR) return; /* seek further */ /* find the NS RRset (without allowing CNAMEs) */ if(!reply_find_rrset(qstate->return_msg->rep, qstate->qinfo.qname, qstate->qinfo.qname_len, LDNS_RR_TYPE_NS, qstate->qinfo.qclass)){ return; /* seek further */ } /* else, store as DP and continue at querytargets */ foriq->state = QUERYTARGETS_STATE; foriq->dp = delegpt_from_message(qstate->return_msg, forq->region); if(!foriq->dp) { log_err("out of memory in dsns dp alloc"); errinf(qstate, "malloc failure, in DS search"); return; /* dp==NULL in QUERYTARGETS makes SERVFAIL */ } /* success, go query the querytargets in the new dp (and go down) */ } /** * Process response for qclass=ANY queries for a particular class. * Append to result or error-exit. * * @param qstate: query state. * @param id: module id. * @param forq: super query state. */ static void processClassResponse(struct module_qstate* qstate, int id, struct module_qstate* forq) { struct iter_qstate* foriq = (struct iter_qstate*)forq->minfo[id]; struct dns_msg* from = qstate->return_msg; log_query_info(VERB_ALGO, "processClassResponse", &qstate->qinfo); log_query_info(VERB_ALGO, "processClassResponse super", &forq->qinfo); if(qstate->return_rcode != LDNS_RCODE_NOERROR) { /* cause servfail for qclass ANY query */ foriq->response = NULL; foriq->state = FINISHED_STATE; return; } /* append result */ if(!foriq->response) { /* allocate the response: copy RCODE, sec_state */ foriq->response = dns_copy_msg(from, forq->region); if(!foriq->response) { log_err("malloc failed for qclass ANY response"); foriq->state = FINISHED_STATE; return; } foriq->response->qinfo.qclass = forq->qinfo.qclass; /* qclass ANY does not receive the AA flag on replies */ foriq->response->rep->authoritative = 0; } else { struct dns_msg* to = foriq->response; /* add _from_ this response _to_ existing collection */ /* if there are records, copy RCODE */ /* lower sec_state if this message is lower */ if(from->rep->rrset_count != 0) { size_t n = from->rep->rrset_count+to->rep->rrset_count; struct ub_packed_rrset_key** dest, **d; /* copy appropriate rcode */ to->rep->flags = from->rep->flags; /* copy rrsets */ if(from->rep->rrset_count > RR_COUNT_MAX || to->rep->rrset_count > RR_COUNT_MAX) { log_err("malloc failed (too many rrsets) in collect ANY"); foriq->state = FINISHED_STATE; return; /* integer overflow protection */ } dest = regional_alloc(forq->region, sizeof(dest[0])*n); if(!dest) { log_err("malloc failed in collect ANY"); foriq->state = FINISHED_STATE; return; } d = dest; /* copy AN */ memcpy(dest, to->rep->rrsets, to->rep->an_numrrsets * sizeof(dest[0])); dest += to->rep->an_numrrsets; memcpy(dest, from->rep->rrsets, from->rep->an_numrrsets * sizeof(dest[0])); dest += from->rep->an_numrrsets; /* copy NS */ memcpy(dest, to->rep->rrsets+to->rep->an_numrrsets, to->rep->ns_numrrsets * sizeof(dest[0])); dest += to->rep->ns_numrrsets; memcpy(dest, from->rep->rrsets+from->rep->an_numrrsets, from->rep->ns_numrrsets * sizeof(dest[0])); dest += from->rep->ns_numrrsets; /* copy AR */ memcpy(dest, to->rep->rrsets+to->rep->an_numrrsets+ to->rep->ns_numrrsets, to->rep->ar_numrrsets * sizeof(dest[0])); dest += to->rep->ar_numrrsets; memcpy(dest, from->rep->rrsets+from->rep->an_numrrsets+ from->rep->ns_numrrsets, from->rep->ar_numrrsets * sizeof(dest[0])); /* update counts */ to->rep->rrsets = d; to->rep->an_numrrsets += from->rep->an_numrrsets; to->rep->ns_numrrsets += from->rep->ns_numrrsets; to->rep->ar_numrrsets += from->rep->ar_numrrsets; to->rep->rrset_count = n; } if(from->rep->security < to->rep->security) /* lowest sec */ to->rep->security = from->rep->security; if(from->rep->qdcount != 0) /* insert qd if appropriate */ to->rep->qdcount = from->rep->qdcount; if(from->rep->ttl < to->rep->ttl) /* use smallest TTL */ to->rep->ttl = from->rep->ttl; if(from->rep->prefetch_ttl < to->rep->prefetch_ttl) to->rep->prefetch_ttl = from->rep->prefetch_ttl; if(from->rep->serve_expired_ttl < to->rep->serve_expired_ttl) to->rep->serve_expired_ttl = from->rep->serve_expired_ttl; } /* are we done? */ foriq->num_current_queries --; if(foriq->num_current_queries == 0) foriq->state = FINISHED_STATE; } /** * Collect class ANY responses and make them into one response. This * state is started and it creates queries for all classes (that have * root hints). The answers are then collected. * * @param qstate: query state. * @param id: module id. * @return true if the event needs more immediate processing, false if not. */ static int processCollectClass(struct module_qstate* qstate, int id) { struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; struct module_qstate* subq; /* If qchase.qclass == 0 then send out queries for all classes. * Otherwise, do nothing (wait for all answers to arrive and the * processClassResponse to put them together, and that moves us * towards the Finished state when done. */ if(iq->qchase.qclass == 0) { uint16_t c = 0; iq->qchase.qclass = LDNS_RR_CLASS_ANY; while(iter_get_next_root(qstate->env->hints, qstate->env->fwds, &c)) { /* generate query for this class */ log_nametypeclass(VERB_ALGO, "spawn collect query", qstate->qinfo.qname, qstate->qinfo.qtype, c); if(!generate_sub_request(qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, c, qstate, id, iq, INIT_REQUEST_STATE, FINISHED_STATE, &subq, (int)!(qstate->query_flags&BIT_CD), 0)) { errinf(qstate, "could not generate class ANY" " lookup query"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* ignore subq, no special init required */ iq->num_current_queries ++; if(c == 0xffff) break; else c++; } /* if no roots are configured at all, return */ if(iq->num_current_queries == 0) { verbose(VERB_ALGO, "No root hints or fwds, giving up " "on qclass ANY"); return error_response(qstate, id, LDNS_RCODE_REFUSED); } /* return false, wait for queries to return */ } /* if woke up here because of an answer, wait for more answers */ return 0; } /** * This handles the final state for first-tier responses (i.e., responses to * externally generated queries). * * @param qstate: query state. * @param iq: iterator query state. * @param id: module id. * @return true if the event needs more processing, false if not. Since this * is the final state for an event, it always returns false. */ static int processFinished(struct module_qstate* qstate, struct iter_qstate* iq, int id) { log_query_info(VERB_QUERY, "finishing processing for", &qstate->qinfo); /* store negative cache element for parent side glue. */ if(!qstate->no_cache_store && iq->query_for_pside_glue && !iq->pside_glue) iter_store_parentside_neg(qstate->env, &qstate->qinfo, iq->deleg_msg?iq->deleg_msg->rep: (iq->response?iq->response->rep:NULL)); if(!iq->response) { verbose(VERB_ALGO, "No response is set, servfail"); errinf(qstate, "(no response found at query finish)"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* Make sure that the RA flag is set (since the presence of * this module means that recursion is available) */ iq->response->rep->flags |= BIT_RA; /* Clear the AA flag */ /* FIXME: does this action go here or in some other module? */ iq->response->rep->flags &= ~BIT_AA; /* make sure QR flag is on */ iq->response->rep->flags |= BIT_QR; /* we have finished processing this query */ qstate->ext_state[id] = module_finished; /* TODO: we are using a private TTL, trim the response. */ /* if (mPrivateTTL > 0){IterUtils.setPrivateTTL(resp, mPrivateTTL); } */ /* prepend any items we have accumulated */ if(iq->an_prepend_list || iq->ns_prepend_list) { if(!iter_prepend(iq, iq->response, qstate->region)) { log_err("prepend rrsets: out of memory"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } /* reset the query name back */ iq->response->qinfo = qstate->qinfo; /* the security state depends on the combination */ iq->response->rep->security = sec_status_unchecked; /* store message with the finished prepended items, * but only if we did recursion. The nonrecursion referral * from cache does not need to be stored in the msg cache. */ if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) { iter_dns_store(qstate->env, &qstate->qinfo, iq->response->rep, 0, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, qstate->region, qstate->query_flags); } } qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = iq->response; return 0; } /* * Return priming query results to interested super querystates. * * Sets the delegation point and delegation message (not nonRD queries). * This is a callback from walk_supers. * * @param qstate: query state that finished. * @param id: module id. * @param super: the qstate to inform. */ void iter_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { if(!qstate->is_priming && super->qinfo.qclass == LDNS_RR_CLASS_ANY) processClassResponse(qstate, id, super); else if(super->qinfo.qtype == LDNS_RR_TYPE_DS && ((struct iter_qstate*) super->minfo[id])->state == DSNS_FIND_STATE) processDSNSResponse(qstate, id, super); else if(qstate->return_rcode != LDNS_RCODE_NOERROR) error_supers(qstate, id, super); else if(qstate->is_priming) prime_supers(qstate, id, super); else processTargetResponse(qstate, id, super); } /** * Handle iterator state. * Handle events. This is the real processing loop for events, responsible * for moving events through the various states. If a processing method * returns true, then it will be advanced to the next state. If false, then * processing will stop. * * @param qstate: query state. * @param ie: iterator shared global environment. * @param iq: iterator query state. * @param id: module id. */ static void iter_handle(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id) { int cont = 1; while(cont) { verbose(VERB_ALGO, "iter_handle processing q with state %s", iter_state_to_string(iq->state)); switch(iq->state) { case INIT_REQUEST_STATE: cont = processInitRequest(qstate, iq, ie, id); break; case INIT_REQUEST_2_STATE: cont = processInitRequest2(qstate, iq, id); break; case INIT_REQUEST_3_STATE: cont = processInitRequest3(qstate, iq, id); break; case QUERYTARGETS_STATE: cont = processQueryTargets(qstate, iq, ie, id); break; case QUERY_RESP_STATE: cont = processQueryResponse(qstate, iq, id); break; case PRIME_RESP_STATE: cont = processPrimeResponse(qstate, id); break; case COLLECT_CLASS_STATE: cont = processCollectClass(qstate, id); break; case DSNS_FIND_STATE: cont = processDSNSFind(qstate, iq, id); break; case FINISHED_STATE: cont = processFinished(qstate, iq, id); break; default: log_warn("iterator: invalid state: %d", iq->state); cont = 0; break; } } } /** * This is the primary entry point for processing request events. Note that * this method should only be used by external modules. * @param qstate: query state. * @param ie: iterator shared global environment. * @param iq: iterator query state. * @param id: module id. */ static void process_request(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id) { /* external requests start in the INIT state, and finish using the * FINISHED state. */ iq->state = INIT_REQUEST_STATE; iq->final_state = FINISHED_STATE; verbose(VERB_ALGO, "process_request: new external request event"); iter_handle(qstate, iq, ie, id); } /** process authoritative server reply */ static void process_response(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id, struct outbound_entry* outbound, enum module_ev event) { struct msg_parse* prs; struct edns_data edns; sldns_buffer* pkt; verbose(VERB_ALGO, "process_response: new external response event"); iq->response = NULL; iq->state = QUERY_RESP_STATE; if(event == module_event_noreply || event == module_event_error) { if(event == module_event_noreply && iq->timeout_count >= 3 && qstate->env->cfg->use_caps_bits_for_id && !iq->caps_fallback && !is_caps_whitelisted(ie, iq)) { /* start fallback */ iq->caps_fallback = 1; iq->caps_server = 0; iq->caps_reply = NULL; iq->caps_response = NULL; iq->caps_minimisation_state = DONOT_MINIMISE_STATE; iq->state = QUERYTARGETS_STATE; iq->num_current_queries--; /* need fresh attempts for the 0x20 fallback, if * that was the cause for the failure */ iter_dec_attempts(iq->dp, 3); verbose(VERB_DETAIL, "Capsforid: timeouts, starting fallback"); goto handle_it; } goto handle_it; } if( (event != module_event_reply && event != module_event_capsfail) || !qstate->reply) { log_err("Bad event combined with response"); outbound_list_remove(&iq->outlist, outbound); errinf(qstate, "module iterator received wrong internal event with a response message"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } /* parse message */ prs = (struct msg_parse*)regional_alloc(qstate->env->scratch, sizeof(struct msg_parse)); if(!prs) { log_err("out of memory on incoming message"); /* like packet got dropped */ goto handle_it; } memset(prs, 0, sizeof(*prs)); memset(&edns, 0, sizeof(edns)); pkt = qstate->reply->c->buffer; sldns_buffer_set_position(pkt, 0); if(parse_packet(pkt, prs, qstate->env->scratch) != LDNS_RCODE_NOERROR) { verbose(VERB_ALGO, "parse error on reply packet"); goto handle_it; } /* edns is not examined, but removed from message to help cache */ if(parse_extract_edns(prs, &edns, qstate->env->scratch) != LDNS_RCODE_NOERROR) goto handle_it; /* Copy the edns options we may got from the back end */ if(edns.opt_list) { qstate->edns_opts_back_in = edns_opt_copy_region(edns.opt_list, qstate->region); if(!qstate->edns_opts_back_in) { log_err("out of memory on incoming message"); /* like packet got dropped */ goto handle_it; } if(!inplace_cb_edns_back_parsed_call(qstate->env, qstate)) { log_err("unable to call edns_back_parsed callback"); goto handle_it; } } /* remove CD-bit, we asked for in case we handle validation ourself */ prs->flags &= ~BIT_CD; /* normalize and sanitize: easy to delete items from linked lists */ if(!scrub_message(pkt, prs, &iq->qinfo_out, iq->dp->name, qstate->env->scratch, qstate->env, ie)) { /* if 0x20 enabled, start fallback, but we have no message */ if(event == module_event_capsfail && !iq->caps_fallback) { iq->caps_fallback = 1; iq->caps_server = 0; iq->caps_reply = NULL; iq->caps_response = NULL; iq->caps_minimisation_state = DONOT_MINIMISE_STATE; iq->state = QUERYTARGETS_STATE; iq->num_current_queries--; verbose(VERB_DETAIL, "Capsforid: scrub failed, starting fallback with no response"); } goto handle_it; } /* allocate response dns_msg in region */ iq->response = dns_alloc_msg(pkt, prs, qstate->region); if(!iq->response) goto handle_it; log_query_info(VERB_DETAIL, "response for", &qstate->qinfo); log_name_addr(VERB_DETAIL, "reply from", iq->dp->name, &qstate->reply->addr, qstate->reply->addrlen); if(verbosity >= VERB_ALGO) log_dns_msg("incoming scrubbed packet:", &iq->response->qinfo, iq->response->rep); if(event == module_event_capsfail || iq->caps_fallback) { if(qstate->env->cfg->qname_minimisation && iq->minimisation_state != DONOT_MINIMISE_STATE) { /* Skip QNAME minimisation for next query, since that * one has to match the current query. */ iq->minimisation_state = SKIP_MINIMISE_STATE; } /* for fallback we care about main answer, not additionals */ /* removing that makes comparison more likely to succeed */ caps_strip_reply(iq->response->rep); if(iq->caps_fallback && iq->caps_minimisation_state != iq->minimisation_state) { /* QNAME minimisation state has changed, restart caps * fallback. */ iq->caps_fallback = 0; } if(!iq->caps_fallback) { /* start fallback */ iq->caps_fallback = 1; iq->caps_server = 0; iq->caps_reply = iq->response->rep; iq->caps_response = iq->response; iq->caps_minimisation_state = iq->minimisation_state; iq->state = QUERYTARGETS_STATE; iq->num_current_queries--; verbose(VERB_DETAIL, "Capsforid: starting fallback"); goto handle_it; } else { /* check if reply is the same, otherwise, fail */ if(!iq->caps_reply) { iq->caps_reply = iq->response->rep; iq->caps_response = iq->response; iq->caps_server = -1; /*become zero at ++, so that we start the full set of trials */ } else if(caps_failed_rcode(iq->caps_reply) && !caps_failed_rcode(iq->response->rep)) { /* prefer to upgrade to non-SERVFAIL */ iq->caps_reply = iq->response->rep; iq->caps_response = iq->response; } else if(!caps_failed_rcode(iq->caps_reply) && caps_failed_rcode(iq->response->rep)) { /* if we have non-SERVFAIL as answer then * we can ignore SERVFAILs for the equality * comparison */ /* no instructions here, skip other else */ } else if(caps_failed_rcode(iq->caps_reply) && caps_failed_rcode(iq->response->rep)) { /* failure is same as other failure in fallbk*/ /* no instructions here, skip other else */ } else if(!reply_equal(iq->response->rep, iq->caps_reply, qstate->env->scratch)) { verbose(VERB_DETAIL, "Capsforid fallback: " "getting different replies, failed"); outbound_list_remove(&iq->outlist, outbound); errinf(qstate, "0x20 failed, then got different replies in fallback"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } /* continue the fallback procedure at next server */ iq->caps_server++; iq->state = QUERYTARGETS_STATE; iq->num_current_queries--; verbose(VERB_DETAIL, "Capsforid: reply is equal. " "go to next fallback"); goto handle_it; } } iq->caps_fallback = 0; /* if we were in fallback, 0x20 is OK now */ handle_it: outbound_list_remove(&iq->outlist, outbound); iter_handle(qstate, iq, ie, id); } void iter_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id]; struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id]; verbose(VERB_QUERY, "iterator[module %d] operate: extstate:%s event:%s", id, strextstate(qstate->ext_state[id]), strmodulevent(event)); if(iq) log_query_info(VERB_QUERY, "iterator operate: query", &qstate->qinfo); if(iq && qstate->qinfo.qname != iq->qchase.qname) log_query_info(VERB_QUERY, "iterator operate: chased to", &iq->qchase); /* perform iterator state machine */ if((event == module_event_new || event == module_event_pass) && iq == NULL) { if(!iter_new(qstate, id)) { errinf(qstate, "malloc failure, new iterator module allocation"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } iq = (struct iter_qstate*)qstate->minfo[id]; process_request(qstate, iq, ie, id); return; } if(iq && event == module_event_pass) { iter_handle(qstate, iq, ie, id); return; } if(iq && outbound) { process_response(qstate, iq, ie, id, outbound, event); return; } if(event == module_event_error) { verbose(VERB_ALGO, "got called with event error, giving up"); errinf(qstate, "iterator module got the error event"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } log_err("bad event for iterator"); errinf(qstate, "iterator module received wrong event"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); } void iter_clear(struct module_qstate* qstate, int id) { struct iter_qstate* iq; if(!qstate) return; iq = (struct iter_qstate*)qstate->minfo[id]; if(iq) { outbound_list_clear(&iq->outlist); if(iq->target_count && --iq->target_count[0] == 0) free(iq->target_count); iq->num_current_queries = 0; } qstate->minfo[id] = NULL; } size_t iter_get_mem(struct module_env* env, int id) { struct iter_env* ie = (struct iter_env*)env->modinfo[id]; if(!ie) return 0; return sizeof(*ie) + sizeof(int)*((size_t)ie->max_dependency_depth+1) + donotq_get_mem(ie->donotq) + priv_get_mem(ie->priv); } /** * The iterator function block */ static struct module_func_block iter_block = { "iterator", &iter_init, &iter_deinit, &iter_operate, &iter_inform_super, &iter_clear, &iter_get_mem }; struct module_func_block* iter_get_funcblock(void) { return &iter_block; } const char* iter_state_to_string(enum iter_state state) { switch (state) { case INIT_REQUEST_STATE : return "INIT REQUEST STATE"; case INIT_REQUEST_2_STATE : return "INIT REQUEST STATE (stage 2)"; case INIT_REQUEST_3_STATE: return "INIT REQUEST STATE (stage 3)"; case QUERYTARGETS_STATE : return "QUERY TARGETS STATE"; case PRIME_RESP_STATE : return "PRIME RESPONSE STATE"; case COLLECT_CLASS_STATE : return "COLLECT CLASS STATE"; case DSNS_FIND_STATE : return "DSNS FIND STATE"; case QUERY_RESP_STATE : return "QUERY RESPONSE STATE"; case FINISHED_STATE : return "FINISHED RESPONSE STATE"; default : return "UNKNOWN ITER STATE"; } } int iter_state_is_responsestate(enum iter_state s) { switch(s) { case INIT_REQUEST_STATE : case INIT_REQUEST_2_STATE : case INIT_REQUEST_3_STATE : case QUERYTARGETS_STATE : case COLLECT_CLASS_STATE : return 0; default: break; } return 1; } unbound-1.13.1/iterator/iter_scrub.h0000644000175000017500000000546514010434640017054 0ustar wouterwouter/* * iterator/iter_scrub.h - scrubbing, normalization, sanitization of DNS msgs. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file has routine(s) for cleaning up incoming DNS messages from * possible useless or malicious junk in it. */ #ifndef ITERATOR_ITER_SCRUB_H #define ITERATOR_ITER_SCRUB_H struct sldns_buffer; struct msg_parse; struct query_info; struct regional; struct module_env; struct iter_env; /** * Cleanup the passed dns message. * @param pkt: the packet itself, for resolving name compression pointers. * the packet buffer is unaltered. * @param msg: the parsed packet, this structure is cleaned up. * @param qinfo: the query info that was sent to the server. Checked. * @param zonename: the name of the last delegation point. * Used to determine out of bailiwick information. * @param regional: where to allocate (new) parts of the message. * @param env: module environment with config settings and cache. * @param ie: iterator module environment data. * @return: false if the message is total waste. true if scrubbed with success. */ int scrub_message(struct sldns_buffer* pkt, struct msg_parse* msg, struct query_info* qinfo, uint8_t* zonename, struct regional* regional, struct module_env* env, struct iter_env* ie); #endif /* ITERATOR_ITER_SCRUB_H */ unbound-1.13.1/iterator/iter_resptype.c0000644000175000017500000002442214010434640017576 0ustar wouterwouter/* * iterator/iter_resptype.c - response type information and classification. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file defines the response type. DNS Responses can be classified as * one of the response types. */ #include "config.h" #include "iterator/iter_resptype.h" #include "iterator/iter_delegpt.h" #include "services/cache/dns.h" #include "util/net_help.h" #include "util/data/dname.h" #include "sldns/rrdef.h" #include "sldns/pkthdr.h" enum response_type response_type_from_cache(struct dns_msg* msg, struct query_info* request) { /* If the message is NXDOMAIN, then it is an ANSWER. */ if(FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NXDOMAIN) return RESPONSE_TYPE_ANSWER; if(request->qtype == LDNS_RR_TYPE_ANY) return RESPONSE_TYPE_ANSWER; /* First we look at the answer section. This can tell us if this is * CNAME or positive ANSWER. */ if(msg->rep->an_numrrsets > 0) { /* Now look at the answer section first. 3 states: * o our answer is there directly, * o our answer is there after a cname, * o or there is just a cname. */ uint8_t* mname = request->qname; size_t mname_len = request->qname_len; size_t i; for(i=0; irep->an_numrrsets; i++) { struct ub_packed_rrset_key* s = msg->rep->rrsets[i]; /* If we have encountered an answer (before or * after a CNAME), then we are done! Note that * if qtype == CNAME then this will be noted as * an ANSWER before it gets treated as a CNAME, * as it should */ if(ntohs(s->rk.type) == request->qtype && ntohs(s->rk.rrset_class) == request->qclass && query_dname_compare(mname, s->rk.dname) == 0) { return RESPONSE_TYPE_ANSWER; } /* If we have encountered a CNAME, make sure that * it is relevant. */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && query_dname_compare(mname, s->rk.dname) == 0) { get_cname_target(s, &mname, &mname_len); } } /* if we encountered a CNAME (or a bunch of CNAMEs), and * still got to here, then it is a CNAME response. (i.e., * the CNAME chain didn't terminate in an answer rrset.) */ if(mname != request->qname) { return RESPONSE_TYPE_CNAME; } } /* At this point, since we don't need to detect REFERRAL or LAME * messages, it can only be an ANSWER. */ return RESPONSE_TYPE_ANSWER; } enum response_type response_type_from_server(int rdset, struct dns_msg* msg, struct query_info* request, struct delegpt* dp) { uint8_t* origzone = (uint8_t*)"\000"; /* the default */ struct ub_packed_rrset_key* s; size_t i; if(!msg || !request) return RESPONSE_TYPE_THROWAWAY; /* If the message is NXDOMAIN, then it answers the question. */ if(FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NXDOMAIN) { /* make sure its not recursive when we don't want it to */ if( (msg->rep->flags&BIT_RA) && !(msg->rep->flags&BIT_AA) && !rdset) return RESPONSE_TYPE_REC_LAME; /* it could be a CNAME with NXDOMAIN rcode */ for(i=0; irep->an_numrrsets; i++) { s = msg->rep->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && query_dname_compare(request->qname, s->rk.dname) == 0) { return RESPONSE_TYPE_CNAME; } } return RESPONSE_TYPE_ANSWER; } /* Other response codes mean (so far) to throw the response away as * meaningless and move on to the next nameserver. */ if(FLAGS_GET_RCODE(msg->rep->flags) != LDNS_RCODE_NOERROR) return RESPONSE_TYPE_THROWAWAY; /* Note: TC bit has already been handled */ if(dp) { origzone = dp->name; } /* First we look at the answer section. This can tell us if this is a * CNAME or ANSWER or (provisional) ANSWER. */ if(msg->rep->an_numrrsets > 0) { uint8_t* mname = request->qname; size_t mname_len = request->qname_len; /* Now look at the answer section first. 3 states: our * answer is there directly, our answer is there after * a cname, or there is just a cname. */ for(i=0; irep->an_numrrsets; i++) { s = msg->rep->rrsets[i]; /* if the answer section has NS rrset, and qtype ANY * and the delegation is lower, and no CNAMEs followed, * this is a referral where the NS went to AN section */ if((request->qtype == LDNS_RR_TYPE_ANY || request->qtype == LDNS_RR_TYPE_NS) && ntohs(s->rk.type) == LDNS_RR_TYPE_NS && ntohs(s->rk.rrset_class) == request->qclass && dname_strict_subdomain_c(s->rk.dname, origzone)) { if((msg->rep->flags&BIT_AA)) return RESPONSE_TYPE_ANSWER; return RESPONSE_TYPE_REFERRAL; } /* If we have encountered an answer (before or * after a CNAME), then we are done! Note that * if qtype == CNAME then this will be noted as an * ANSWER before it gets treated as a CNAME, as * it should. */ if(ntohs(s->rk.type) == request->qtype && ntohs(s->rk.rrset_class) == request->qclass && query_dname_compare(mname, s->rk.dname) == 0) { if((msg->rep->flags&BIT_AA)) return RESPONSE_TYPE_ANSWER; /* If the AA bit isn't on, and we've seen * the answer, we only provisionally say * 'ANSWER' -- it very well could be a * REFERRAL. */ break; } /* If we have encountered a CNAME, make sure that * it is relevant. */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && query_dname_compare(mname, s->rk.dname) == 0) { get_cname_target(s, &mname, &mname_len); } } /* not a referral, and qtype any, thus an answer */ if(request->qtype == LDNS_RR_TYPE_ANY) return RESPONSE_TYPE_ANSWER; /* if we encountered a CNAME (or a bunch of CNAMEs), and * still got to here, then it is a CNAME response. * (This is regardless of the AA bit at this point) */ if(mname != request->qname) { return RESPONSE_TYPE_CNAME; } } /* Looking at the authority section, we just look and see if * there is a SOA record, that means a NOERROR/NODATA */ for(i = msg->rep->an_numrrsets; i < (msg->rep->an_numrrsets + msg->rep->ns_numrrsets); i++) { s = msg->rep->rrsets[i]; /* The normal way of detecting NOERROR/NODATA. */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_SOA && dname_subdomain_c(request->qname, s->rk.dname)) { /* we do our own recursion, thank you */ if( (msg->rep->flags&BIT_RA) && !(msg->rep->flags&BIT_AA) && !rdset) return RESPONSE_TYPE_REC_LAME; return RESPONSE_TYPE_ANSWER; } } /* Looking at the authority section, we just look and see if * there is a delegation NS set, turning it into a delegation. * Otherwise, we will have to conclude ANSWER (either it is * NOERROR/NODATA, or an non-authoritative answer). */ for(i = msg->rep->an_numrrsets; i < (msg->rep->an_numrrsets + msg->rep->ns_numrrsets); i++) { s = msg->rep->rrsets[i]; /* Detect REFERRAL/LAME/ANSWER based on the relationship * of the NS set to the originating zone name. */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_NS) { /* If we are getting an NS set for the zone we * thought we were contacting, then it is an answer.*/ if(query_dname_compare(s->rk.dname, origzone) == 0) { /* see if mistakenly a recursive server was * deployed and is responding nonAA */ if( (msg->rep->flags&BIT_RA) && !(msg->rep->flags&BIT_AA) && !rdset) return RESPONSE_TYPE_REC_LAME; /* Or if a lame server is deployed, * which gives ns==zone delegation from cache * without AA bit as well, with nodata nosoa*/ /* real answer must be +AA and SOA RFC(2308), * so this is wrong, and we SERVFAIL it if * this is the only possible reply, if it * is misdeployed the THROWAWAY makes us pick * the next server from the selection */ if(msg->rep->an_numrrsets==0 && !(msg->rep->flags&BIT_AA) && !rdset) return RESPONSE_TYPE_THROWAWAY; return RESPONSE_TYPE_ANSWER; } /* If we are getting a referral upwards (or to * the same zone), then the server is 'lame'. */ if(dname_subdomain_c(origzone, s->rk.dname)) { if(rdset) /* forward or reclame not LAME */ return RESPONSE_TYPE_THROWAWAY; return RESPONSE_TYPE_LAME; } /* If the NS set is below the delegation point we * are on, and it is non-authoritative, then it is * a referral, otherwise it is an answer. */ if(dname_subdomain_c(s->rk.dname, origzone)) { /* NOTE: I no longer remember in what case * we would like this to be an answer. * NODATA should have a SOA or nothing, * not an NS rrset. * True, referrals should not have the AA * bit set, but... */ /* if((msg->rep->flags&BIT_AA)) return RESPONSE_TYPE_ANSWER; */ return RESPONSE_TYPE_REFERRAL; } /* Otherwise, the NS set is irrelevant. */ } } /* If we've gotten this far, this is NOERROR/NODATA (which could * be an entirely empty message) */ /* check if recursive answer; saying it has empty cache */ if( (msg->rep->flags&BIT_RA) && !(msg->rep->flags&BIT_AA) && !rdset) return RESPONSE_TYPE_REC_LAME; return RESPONSE_TYPE_ANSWER; } unbound-1.13.1/iterator/iter_delegpt.c0000644000175000017500000004405114010434640017347 0ustar wouterwouter/* * iterator/iter_delegpt.c - delegation point with NS and address information. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file implements the Delegation Point. It contains a list of name servers * and their addresses if known. */ #include "config.h" #include "iterator/iter_delegpt.h" #include "services/cache/dns.h" #include "util/regional.h" #include "util/data/dname.h" #include "util/data/packed_rrset.h" #include "util/data/msgreply.h" #include "util/net_help.h" #include "sldns/rrdef.h" #include "sldns/sbuffer.h" struct delegpt* delegpt_create(struct regional* region) { struct delegpt* dp=(struct delegpt*)regional_alloc( region, sizeof(*dp)); if(!dp) return NULL; memset(dp, 0, sizeof(*dp)); return dp; } struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) { struct delegpt* copy = delegpt_create(region); struct delegpt_ns* ns; struct delegpt_addr* a; if(!copy) return NULL; if(!delegpt_set_name(copy, region, dp->name)) return NULL; copy->bogus = dp->bogus; copy->has_parent_side_NS = dp->has_parent_side_NS; copy->ssl_upstream = dp->ssl_upstream; for(ns = dp->nslist; ns; ns = ns->next) { if(!delegpt_add_ns(copy, region, ns->name, ns->lame)) return NULL; copy->nslist->resolved = ns->resolved; copy->nslist->got4 = ns->got4; copy->nslist->got6 = ns->got6; copy->nslist->done_pside4 = ns->done_pside4; copy->nslist->done_pside6 = ns->done_pside6; } for(a = dp->target_list; a; a = a->next_target) { if(!delegpt_add_addr(copy, region, &a->addr, a->addrlen, a->bogus, a->lame, a->tls_auth_name, NULL)) return NULL; } return copy; } int delegpt_set_name(struct delegpt* dp, struct regional* region, uint8_t* name) { log_assert(!dp->dp_type_mlc); dp->namelabs = dname_count_size_labels(name, &dp->namelen); dp->name = regional_alloc_init(region, name, dp->namelen); return dp->name != 0; } int delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name, uint8_t lame) { struct delegpt_ns* ns; size_t len; (void)dname_count_size_labels(name, &len); log_assert(!dp->dp_type_mlc); /* slow check for duplicates to avoid counting failures when * adding the same server as a dependency twice */ if(delegpt_find_ns(dp, name, len)) return 1; ns = (struct delegpt_ns*)regional_alloc(region, sizeof(struct delegpt_ns)); if(!ns) return 0; ns->next = dp->nslist; ns->namelen = len; dp->nslist = ns; ns->name = regional_alloc_init(region, name, ns->namelen); ns->resolved = 0; ns->got4 = 0; ns->got6 = 0; ns->lame = lame; ns->done_pside4 = 0; ns->done_pside6 = 0; return ns->name != 0; } struct delegpt_ns* delegpt_find_ns(struct delegpt* dp, uint8_t* name, size_t namelen) { struct delegpt_ns* p = dp->nslist; while(p) { if(namelen == p->namelen && query_dname_compare(name, p->name) == 0) { return p; } p = p->next; } return NULL; } struct delegpt_addr* delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr, socklen_t addrlen) { struct delegpt_addr* p = dp->target_list; while(p) { if(sockaddr_cmp_addr(addr, addrlen, &p->addr, p->addrlen)==0 && ((struct sockaddr_in*)addr)->sin_port == ((struct sockaddr_in*)&p->addr)->sin_port) { return p; } p = p->next_target; } return NULL; } int delegpt_add_target(struct delegpt* dp, struct regional* region, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions) { struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen); log_assert(!dp->dp_type_mlc); if(!ns) { /* ignore it */ return 1; } if(!lame) { if(addr_is_ip6(addr, addrlen)) ns->got6 = 1; else ns->got4 = 1; if(ns->got4 && ns->got6) ns->resolved = 1; } return delegpt_add_addr(dp, region, addr, addrlen, bogus, lame, NULL, additions); } int delegpt_add_addr(struct delegpt* dp, struct regional* region, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name, int* additions) { struct delegpt_addr* a; log_assert(!dp->dp_type_mlc); /* check for duplicates */ if((a = delegpt_find_addr(dp, addr, addrlen))) { if(bogus) a->bogus = bogus; if(!lame) a->lame = 0; return 1; } if(additions) *additions = 1; a = (struct delegpt_addr*)regional_alloc(region, sizeof(struct delegpt_addr)); if(!a) return 0; a->next_target = dp->target_list; dp->target_list = a; a->next_result = 0; a->next_usable = dp->usable_list; dp->usable_list = a; memcpy(&a->addr, addr, addrlen); a->addrlen = addrlen; a->attempts = 0; a->bogus = bogus; a->lame = lame; a->dnsseclame = 0; if(tls_auth_name) { a->tls_auth_name = regional_strdup(region, tls_auth_name); if(!a->tls_auth_name) return 0; } else { a->tls_auth_name = NULL; } return 1; } void delegpt_count_ns(struct delegpt* dp, size_t* numns, size_t* missing) { struct delegpt_ns* ns; *numns = 0; *missing = 0; for(ns = dp->nslist; ns; ns = ns->next) { (*numns)++; if(!ns->resolved) (*missing)++; } } void delegpt_count_addr(struct delegpt* dp, size_t* numaddr, size_t* numres, size_t* numavail) { struct delegpt_addr* a; *numaddr = 0; *numres = 0; *numavail = 0; for(a = dp->target_list; a; a = a->next_target) { (*numaddr)++; } for(a = dp->result_list; a; a = a->next_result) { (*numres)++; } for(a = dp->usable_list; a; a = a->next_usable) { (*numavail)++; } } void delegpt_log(enum verbosity_value v, struct delegpt* dp) { char buf[LDNS_MAX_DOMAINLEN+1]; struct delegpt_ns* ns; struct delegpt_addr* a; size_t missing=0, numns=0, numaddr=0, numres=0, numavail=0; if(verbosity < v) return; dname_str(dp->name, buf); if(dp->nslist == NULL && dp->target_list == NULL) { log_info("DelegationPoint<%s>: empty", buf); return; } delegpt_count_ns(dp, &numns, &missing); delegpt_count_addr(dp, &numaddr, &numres, &numavail); log_info("DelegationPoint<%s>: %u names (%u missing), " "%u addrs (%u result, %u avail)%s", buf, (unsigned)numns, (unsigned)missing, (unsigned)numaddr, (unsigned)numres, (unsigned)numavail, (dp->has_parent_side_NS?" parentNS":" cacheNS")); if(verbosity >= VERB_ALGO) { for(ns = dp->nslist; ns; ns = ns->next) { dname_str(ns->name, buf); log_info(" %s %s%s%s%s%s%s%s", buf, (ns->resolved?"*":""), (ns->got4?" A":""), (ns->got6?" AAAA":""), (dp->bogus?" BOGUS":""), (ns->lame?" PARENTSIDE":""), (ns->done_pside4?" PSIDE_A":""), (ns->done_pside6?" PSIDE_AAAA":"")); } for(a = dp->target_list; a; a = a->next_target) { char s[128]; const char* str = " "; if(a->bogus && a->lame) str = " BOGUS ADDR_LAME "; else if(a->bogus) str = " BOGUS "; else if(a->lame) str = " ADDR_LAME "; if(a->tls_auth_name) snprintf(s, sizeof(s), "%s[%s]", str, a->tls_auth_name); else snprintf(s, sizeof(s), "%s", str); log_addr(VERB_ALGO, s, &a->addr, a->addrlen); } } } void delegpt_add_unused_targets(struct delegpt* dp) { struct delegpt_addr* usa = dp->usable_list; dp->usable_list = NULL; while(usa) { usa->next_result = dp->result_list; dp->result_list = usa; usa = usa->next_usable; } } size_t delegpt_count_targets(struct delegpt* dp) { struct delegpt_addr* a; size_t n = 0; for(a = dp->target_list; a; a = a->next_target) n++; return n; } size_t delegpt_count_missing_targets(struct delegpt* dp) { struct delegpt_ns* ns; size_t n = 0; for(ns = dp->nslist; ns; ns = ns->next) if(!ns->resolved) n++; return n; } /** find NS rrset in given list */ static struct ub_packed_rrset_key* find_NS(struct reply_info* rep, size_t from, size_t to) { size_t i; for(i=from; irrsets[i]->rk.type) == LDNS_RR_TYPE_NS) return rep->rrsets[i]; } return NULL; } struct delegpt* delegpt_from_message(struct dns_msg* msg, struct regional* region) { struct ub_packed_rrset_key* ns_rrset = NULL; struct delegpt* dp; size_t i; /* look for NS records in the authority section... */ ns_rrset = find_NS(msg->rep, msg->rep->an_numrrsets, msg->rep->an_numrrsets+msg->rep->ns_numrrsets); /* In some cases (even legitimate, perfectly legal cases), the * NS set for the "referral" might be in the answer section. */ if(!ns_rrset) ns_rrset = find_NS(msg->rep, 0, msg->rep->an_numrrsets); /* If there was no NS rrset in the authority section, then this * wasn't a referral message. (It might not actually be a * referral message anyway) */ if(!ns_rrset) return NULL; /* If we found any, then Yay! we have a delegation point. */ dp = delegpt_create(region); if(!dp) return NULL; dp->has_parent_side_NS = 1; /* created from message */ if(!delegpt_set_name(dp, region, ns_rrset->rk.dname)) return NULL; if(!delegpt_rrset_add_ns(dp, region, ns_rrset, 0)) return NULL; /* add glue, A and AAAA in answer and additional section */ for(i=0; irep->rrset_count; i++) { struct ub_packed_rrset_key* s = msg->rep->rrsets[i]; /* skip auth section. FIXME really needed?*/ if(msg->rep->an_numrrsets <= i && i < (msg->rep->an_numrrsets+msg->rep->ns_numrrsets)) continue; if(ntohs(s->rk.type) == LDNS_RR_TYPE_A) { if(!delegpt_add_rrset_A(dp, region, s, 0, NULL)) return NULL; } else if(ntohs(s->rk.type) == LDNS_RR_TYPE_AAAA) { if(!delegpt_add_rrset_AAAA(dp, region, s, 0, NULL)) return NULL; } } return dp; } int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* region, struct ub_packed_rrset_key* ns_rrset, uint8_t lame) { struct packed_rrset_data* nsdata = (struct packed_rrset_data*) ns_rrset->entry.data; size_t i; log_assert(!dp->dp_type_mlc); if(nsdata->security == sec_status_bogus) dp->bogus = 1; for(i=0; icount; i++) { if(nsdata->rr_len[i] < 2+1) continue; /* len + root label */ if(dname_valid(nsdata->rr_data[i]+2, nsdata->rr_len[i]-2) != (size_t)sldns_read_uint16(nsdata->rr_data[i])) continue; /* bad format */ /* add rdata of NS (= wirefmt dname), skip rdatalen bytes */ if(!delegpt_add_ns(dp, region, nsdata->rr_data[i]+2, lame)) return 0; } return 1; } int delegpt_add_rrset_A(struct delegpt* dp, struct regional* region, struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; struct sockaddr_in sa; socklen_t len = (socklen_t)sizeof(sa); log_assert(!dp->dp_type_mlc); memset(&sa, 0, len); sa.sin_family = AF_INET; sa.sin_port = (in_port_t)htons(UNBOUND_DNS_PORT); for(i=0; icount; i++) { if(d->rr_len[i] != 2 + INET_SIZE) continue; memmove(&sa.sin_addr, d->rr_data[i]+2, INET_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; } int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* region, struct ub_packed_rrset_key* ak, uint8_t lame, int* additions) { struct packed_rrset_data* d=(struct packed_rrset_data*)ak->entry.data; size_t i; struct sockaddr_in6 sa; socklen_t len = (socklen_t)sizeof(sa); log_assert(!dp->dp_type_mlc); memset(&sa, 0, len); sa.sin6_family = AF_INET6; sa.sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT); for(i=0; icount; i++) { if(d->rr_len[i] != 2 + INET6_SIZE) /* rdatalen + len of IP6 */ continue; memmove(&sa.sin6_addr, d->rr_data[i]+2, INET6_SIZE); if(!delegpt_add_target(dp, region, ak->rk.dname, ak->rk.dname_len, (struct sockaddr_storage*)&sa, len, (d->security==sec_status_bogus), lame, additions)) return 0; } return 1; } int delegpt_add_rrset(struct delegpt* dp, struct regional* region, struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions) { if(!rrset) return 1; if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_NS) return delegpt_rrset_add_ns(dp, region, rrset, lame); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_A) return delegpt_add_rrset_A(dp, region, rrset, lame, additions); else if(ntohs(rrset->rk.type) == LDNS_RR_TYPE_AAAA) return delegpt_add_rrset_AAAA(dp, region, rrset, lame, additions); log_warn("Unknown rrset type added to delegpt"); return 1; } void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype) { if(ns) { if(qtype == LDNS_RR_TYPE_A) ns->got4 = 2; else if(qtype == LDNS_RR_TYPE_AAAA) ns->got6 = 2; if(ns->got4 && ns->got6) ns->resolved = 1; } } void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg) { struct reply_info* rep = (struct reply_info*)msg->entry.data; if(!rep) return; /* if error or no answers */ if(FLAGS_GET_RCODE(rep->flags) != 0 || rep->an_numrrsets == 0) { struct delegpt_ns* ns = delegpt_find_ns(dp, msg->key.qname, msg->key.qname_len); delegpt_mark_neg(ns, msg->key.qtype); } } void delegpt_no_ipv6(struct delegpt* dp) { struct delegpt_ns* ns; for(ns = dp->nslist; ns; ns = ns->next) { /* no ipv6, so only ipv4 is enough to resolve a nameserver */ if(ns->got4) ns->resolved = 1; } } void delegpt_no_ipv4(struct delegpt* dp) { struct delegpt_ns* ns; for(ns = dp->nslist; ns; ns = ns->next) { /* no ipv4, so only ipv6 is enough to resolve a nameserver */ if(ns->got6) ns->resolved = 1; } } struct delegpt* delegpt_create_mlc(uint8_t* name) { struct delegpt* dp=(struct delegpt*)calloc(1, sizeof(*dp)); if(!dp) return NULL; dp->dp_type_mlc = 1; if(name) { dp->namelabs = dname_count_size_labels(name, &dp->namelen); dp->name = memdup(name, dp->namelen); if(!dp->name) { free(dp); return NULL; } } return dp; } void delegpt_free_mlc(struct delegpt* dp) { struct delegpt_ns* n, *nn; struct delegpt_addr* a, *na; if(!dp) return; log_assert(dp->dp_type_mlc); n = dp->nslist; while(n) { nn = n->next; free(n->name); free(n); n = nn; } a = dp->target_list; while(a) { na = a->next_target; free(a->tls_auth_name); free(a); a = na; } free(dp->name); free(dp); } int delegpt_set_name_mlc(struct delegpt* dp, uint8_t* name) { log_assert(dp->dp_type_mlc); dp->namelabs = dname_count_size_labels(name, &dp->namelen); dp->name = memdup(name, dp->namelen); return (dp->name != NULL); } int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame) { struct delegpt_ns* ns; size_t len; (void)dname_count_size_labels(name, &len); log_assert(dp->dp_type_mlc); /* slow check for duplicates to avoid counting failures when * adding the same server as a dependency twice */ if(delegpt_find_ns(dp, name, len)) return 1; ns = (struct delegpt_ns*)malloc(sizeof(struct delegpt_ns)); if(!ns) return 0; ns->namelen = len; ns->name = memdup(name, ns->namelen); if(!ns->name) { free(ns); return 0; } ns->next = dp->nslist; dp->nslist = ns; ns->resolved = 0; ns->got4 = 0; ns->got6 = 0; ns->lame = (uint8_t)lame; ns->done_pside4 = 0; ns->done_pside6 = 0; return 1; } int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name) { struct delegpt_addr* a; log_assert(dp->dp_type_mlc); /* check for duplicates */ if((a = delegpt_find_addr(dp, addr, addrlen))) { if(bogus) a->bogus = bogus; if(!lame) a->lame = 0; return 1; } a = (struct delegpt_addr*)malloc(sizeof(struct delegpt_addr)); if(!a) return 0; a->next_target = dp->target_list; dp->target_list = a; a->next_result = 0; a->next_usable = dp->usable_list; dp->usable_list = a; memcpy(&a->addr, addr, addrlen); a->addrlen = addrlen; a->attempts = 0; a->bogus = bogus; a->lame = lame; a->dnsseclame = 0; if(tls_auth_name) { a->tls_auth_name = strdup(tls_auth_name); if(!a->tls_auth_name) { free(a); return 0; } } else { a->tls_auth_name = NULL; } return 1; } int delegpt_add_target_mlc(struct delegpt* dp, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame) { struct delegpt_ns* ns = delegpt_find_ns(dp, name, namelen); log_assert(dp->dp_type_mlc); if(!ns) { /* ignore it */ return 1; } if(!lame) { if(addr_is_ip6(addr, addrlen)) ns->got6 = 1; else ns->got4 = 1; if(ns->got4 && ns->got6) ns->resolved = 1; } return delegpt_add_addr_mlc(dp, addr, addrlen, bogus, lame, NULL); } size_t delegpt_get_mem(struct delegpt* dp) { struct delegpt_ns* ns; size_t s; if(!dp) return 0; s = sizeof(*dp) + dp->namelen + delegpt_count_targets(dp)*sizeof(struct delegpt_addr); for(ns=dp->nslist; ns; ns=ns->next) s += sizeof(*ns)+ns->namelen; return s; } unbound-1.13.1/iterator/iter_fwd.h0000644000175000017500000001450214010434640016506 0ustar wouterwouter/* * iterator/iter_fwd.h - iterative resolver module forward zones. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Keep track of forward zones, and read those from config. */ #ifndef ITERATOR_ITER_FWD_H #define ITERATOR_ITER_FWD_H #include "util/rbtree.h" struct config_file; struct delegpt; /** * Iterator forward zones structure */ struct iter_forwards { /** * Zones are stored in this tree. Sort order is specially chosen. * first sorted on qclass. Then on dname in nsec-like order, so that * a lookup on class, name will return an exact match or the closest * match which gives the ancestor needed. * contents of type iter_forward_zone. */ rbtree_type* tree; }; /** * Iterator forward servers for a particular zone. */ struct iter_forward_zone { /** redblacktree node, key is this structure: class and name */ rbnode_type node; /** name */ uint8_t* name; /** length of name */ size_t namelen; /** number of labels in name */ int namelabs; /** delegation point with forward server information for this zone. * If NULL then this forward entry is used to indicate that a * stub-zone with the same name exists, and should be used. * This delegation point is malloced. */ struct delegpt* dp; /** pointer to parent in tree (or NULL if none) */ struct iter_forward_zone* parent; /** class. host order. */ uint16_t dclass; }; /** * Create forwards * @return new forwards or NULL on error. */ struct iter_forwards* forwards_create(void); /** * Delete forwards. * @param fwd: to delete. */ void forwards_delete(struct iter_forwards* fwd); /** * Process forwards config. * @param fwd: where to store. * @param cfg: config options. * @return 0 on error. */ int forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg); /** * Find forward zone exactly by name * @param fwd: forward storage. * @param qname: The qname of the query. * @param qclass: The qclass of the query. * @return: A delegation point or null. */ struct delegpt* forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass); /** * Find forward zone information * For this qname/qclass find forward zone information, returns delegation * point with server names and addresses, or NULL if no forwarding is needed. * * @param fwd: forward storage. * @param qname: The qname of the query. * @param qclass: The qclass of the query. * @return: A delegation point if the query has to be forwarded to that list, * otherwise null. */ struct delegpt* forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass); /** * Same as forwards_lookup, but for the root only * @param fwd: forward storage. * @param qclass: The qclass of the query. * @return: A delegation point if root forward exists, otherwise null. */ struct delegpt* forwards_lookup_root(struct iter_forwards* fwd, uint16_t qclass); /** * Find next root item in forwards lookup tree. * @param fwd: the forward storage * @param qclass: class to look at next, or higher. * @return false if none found, or if true stored in qclass. */ int forwards_next_root(struct iter_forwards* fwd, uint16_t* qclass); /** * Get memory in use by forward storage * @param fwd: forward storage. * @return bytes in use */ size_t forwards_get_mem(struct iter_forwards* fwd); /** compare two fwd entries */ int fwd_cmp(const void* k1, const void* k2); /** * Add zone to forward structure. For external use since it recalcs * the tree parents. * @param fwd: the forward data structure * @param c: class of zone * @param dp: delegation point with name and target nameservers for new * forward zone. malloced. * @return false on failure (out of memory); */ int forwards_add_zone(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp); /** * Remove zone from forward structure. For external use since it * recalcs the tree parents. * @param fwd: the forward data structure * @param c: class of zone * @param nm: name of zone (in uncompressed wireformat). */ void forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, uint8_t* nm); /** * Add stub hole (empty entry in forward table, that makes resolution skip * a forward-zone because the stub zone should override the forward zone). * Does not add one if not necessary. * @param fwd: the forward data structure * @param c: class of zone * @param nm: name of zone (in uncompressed wireformat). * @return false on failure (out of memory); */ int forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm); /** * Remove stub hole, if one exists. * @param fwd: the forward data structure * @param c: class of zone * @param nm: name of zone (in uncompressed wireformat). */ void forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm); #endif /* ITERATOR_ITER_FWD_H */ unbound-1.13.1/iterator/iter_hints.h0000644000175000017500000001271014010434640017052 0ustar wouterwouter/* * iterator/iter_hints.h - iterative resolver module stub and root hints. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Keep track of stub and root hints, and read those from config. */ #ifndef ITERATOR_ITER_HINTS_H #define ITERATOR_ITER_HINTS_H #include "util/storage/dnstree.h" struct iter_env; struct config_file; struct delegpt; /** * Iterator hints structure */ struct iter_hints { /** * Hints are stored in this tree. Sort order is specially chosen. * first sorted on qclass. Then on dname in nsec-like order, so that * a lookup on class, name will return an exact match or the closest * match which gives the ancestor needed. * contents of type iter_hints_stub. The class IN root is in here. * uses name_tree_node from dnstree.h. */ rbtree_type tree; }; /** * Iterator hints for a particular stub. */ struct iter_hints_stub { /** tree sorted by name, class */ struct name_tree_node node; /** delegation point with hint information for this stub. malloced. */ struct delegpt* dp; /** does the stub need to forego priming (like on other ports) */ uint8_t noprime; }; /** * Create hints * @return new hints or NULL on error. */ struct iter_hints* hints_create(void); /** * Delete hints. * @param hints: to delete. */ void hints_delete(struct iter_hints* hints); /** * Process hints config. Sets default values for root hints if no config. * @param hints: where to store. * @param cfg: config options. * @return 0 on error. */ int hints_apply_cfg(struct iter_hints* hints, struct config_file* cfg); /** * Find root hints for the given class. * @param hints: hint storage. * @param qclass: class for which root hints are requested. host order. * @return: NULL if no hints, or a ptr to stored hints. */ struct delegpt* hints_lookup_root(struct iter_hints* hints, uint16_t qclass); /** * Find next root hints (to cycle through all root hints). * @param hints: hint storage * @param qclass: class for which root hints are sought. * 0 means give the first available root hints class. * x means, give class x or a higher class if any. * returns the found class in this variable. * @return true if a root hint class is found. * false if not root hint class is found (qclass may have been changed). */ int hints_next_root(struct iter_hints* hints, uint16_t* qclass); /** * Given a qname/qclass combination, and the delegation point from the cache * for this qname/qclass, determine if this combination indicates that a * stub hint exists and must be primed. * * @param hints: hint storage. * @param qname: The qname that generated the delegation point. * @param qclass: The qclass that generated the delegation point. * @param dp: The cache generated delegation point. * @return: A priming delegation point if there is a stub hint that must * be primed, otherwise null. */ struct iter_hints_stub* hints_lookup_stub(struct iter_hints* hints, uint8_t* qname, uint16_t qclass, struct delegpt* dp); /** * Get memory in use by hints * @param hints: hint storage. * @return bytes in use */ size_t hints_get_mem(struct iter_hints* hints); /** * Add stub to hints structure. For external use since it recalcs * the tree parents. * @param hints: the hints data structure * @param c: class of zone * @param dp: delegation point with name and target nameservers for new * hints stub. malloced. * @param noprime: set noprime option to true or false on new hint stub. * @return false on failure (out of memory); */ int hints_add_stub(struct iter_hints* hints, uint16_t c, struct delegpt* dp, int noprime); /** * Remove stub from hints structure. For external use since it * recalcs the tree parents. * @param hints: the hints data structure * @param c: class of stub zone * @param nm: name of stub zone (in uncompressed wireformat). */ void hints_delete_stub(struct iter_hints* hints, uint16_t c, uint8_t* nm); #endif /* ITERATOR_ITER_HINTS_H */ unbound-1.13.1/iterator/iter_scrub.c0000644000175000017500000006503714010434640017050 0ustar wouterwouter/* * iterator/iter_scrub.c - scrubbing, normalization, sanitization of DNS msgs. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file has routine(s) for cleaning up incoming DNS messages from * possible useless or malicious junk in it. */ #include "config.h" #include "iterator/iter_scrub.h" #include "iterator/iterator.h" #include "iterator/iter_priv.h" #include "services/cache/rrset.h" #include "util/log.h" #include "util/net_help.h" #include "util/regional.h" #include "util/config_file.h" #include "util/module.h" #include "util/data/msgparse.h" #include "util/data/dname.h" #include "util/data/msgreply.h" #include "util/alloc.h" #include "sldns/sbuffer.h" /** RRset flag used during scrubbing. The RRset is OK. */ #define RRSET_SCRUB_OK 0x80 /** remove rrset, update loop variables */ static void remove_rrset(const char* str, sldns_buffer* pkt, struct msg_parse* msg, struct rrset_parse* prev, struct rrset_parse** rrset) { if(verbosity >= VERB_QUERY && str && (*rrset)->dname_len <= LDNS_MAX_DOMAINLEN) { uint8_t buf[LDNS_MAX_DOMAINLEN+1]; dname_pkt_copy(pkt, buf, (*rrset)->dname); log_nametypeclass(VERB_QUERY, str, buf, (*rrset)->type, ntohs((*rrset)->rrset_class)); } if(prev) prev->rrset_all_next = (*rrset)->rrset_all_next; else msg->rrset_first = (*rrset)->rrset_all_next; if(msg->rrset_last == *rrset) msg->rrset_last = prev; msg->rrset_count --; switch((*rrset)->section) { case LDNS_SECTION_ANSWER: msg->an_rrsets--; break; case LDNS_SECTION_AUTHORITY: msg->ns_rrsets--; break; case LDNS_SECTION_ADDITIONAL: msg->ar_rrsets--; break; default: log_assert(0); } msgparse_bucket_remove(msg, *rrset); *rrset = (*rrset)->rrset_all_next; } /** return true if rr type has additional names in it */ static int has_additional(uint16_t t) { switch(t) { case LDNS_RR_TYPE_MB: case LDNS_RR_TYPE_MD: case LDNS_RR_TYPE_MF: case LDNS_RR_TYPE_NS: case LDNS_RR_TYPE_MX: case LDNS_RR_TYPE_KX: case LDNS_RR_TYPE_SRV: return 1; case LDNS_RR_TYPE_NAPTR: /* TODO: NAPTR not supported, glue stripped off */ return 0; } return 0; } /** get additional name from rrset RR, return false if no name present */ static int get_additional_name(struct rrset_parse* rrset, struct rr_parse* rr, uint8_t** nm, size_t* nmlen, sldns_buffer* pkt) { size_t offset = 0; size_t len, oldpos; switch(rrset->type) { case LDNS_RR_TYPE_MB: case LDNS_RR_TYPE_MD: case LDNS_RR_TYPE_MF: case LDNS_RR_TYPE_NS: offset = 0; break; case LDNS_RR_TYPE_MX: case LDNS_RR_TYPE_KX: offset = 2; break; case LDNS_RR_TYPE_SRV: offset = 6; break; case LDNS_RR_TYPE_NAPTR: /* TODO: NAPTR not supported, glue stripped off */ return 0; default: return 0; } len = sldns_read_uint16(rr->ttl_data+sizeof(uint32_t)); if(len < offset+1) return 0; /* rdata field too small */ *nm = rr->ttl_data+sizeof(uint32_t)+sizeof(uint16_t)+offset; oldpos = sldns_buffer_position(pkt); sldns_buffer_set_position(pkt, (size_t)(*nm - sldns_buffer_begin(pkt))); *nmlen = pkt_dname_len(pkt); sldns_buffer_set_position(pkt, oldpos); if(*nmlen == 0) return 0; return 1; } /** Place mark on rrsets in additional section they are OK */ static void mark_additional_rrset(sldns_buffer* pkt, struct msg_parse* msg, struct rrset_parse* rrset) { /* Mark A and AAAA for NS as appropriate additional section info. */ uint8_t* nm = NULL; size_t nmlen = 0; struct rr_parse* rr; if(!has_additional(rrset->type)) return; for(rr = rrset->rr_first; rr; rr = rr->next) { if(get_additional_name(rrset, rr, &nm, &nmlen, pkt)) { /* mark A */ hashvalue_type h = pkt_hash_rrset(pkt, nm, LDNS_RR_TYPE_A, rrset->rrset_class, 0); struct rrset_parse* r = msgparse_hashtable_lookup( msg, pkt, h, 0, nm, nmlen, LDNS_RR_TYPE_A, rrset->rrset_class); if(r && r->section == LDNS_SECTION_ADDITIONAL) { r->flags |= RRSET_SCRUB_OK; } /* mark AAAA */ h = pkt_hash_rrset(pkt, nm, LDNS_RR_TYPE_AAAA, rrset->rrset_class, 0); r = msgparse_hashtable_lookup(msg, pkt, h, 0, nm, nmlen, LDNS_RR_TYPE_AAAA, rrset->rrset_class); if(r && r->section == LDNS_SECTION_ADDITIONAL) { r->flags |= RRSET_SCRUB_OK; } } } } /** Get target name of a CNAME */ static int parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname, size_t* snamelen, sldns_buffer* pkt) { size_t oldpos, dlen; if(rrset->rr_count != 1) { struct rr_parse* sig; verbose(VERB_ALGO, "Found CNAME rrset with " "size > 1: %u", (unsigned)rrset->rr_count); /* use the first CNAME! */ rrset->rr_count = 1; rrset->size = rrset->rr_first->size; for(sig=rrset->rrsig_first; sig; sig=sig->next) rrset->size += sig->size; rrset->rr_last = rrset->rr_first; rrset->rr_first->next = NULL; } if(rrset->rr_first->size < sizeof(uint16_t)+1) return 0; /* CNAME rdata too small */ *sname = rrset->rr_first->ttl_data + sizeof(uint32_t) + sizeof(uint16_t); /* skip ttl, rdatalen */ *snamelen = rrset->rr_first->size - sizeof(uint16_t); if(rrset->rr_first->outside_packet) { if(!dname_valid(*sname, *snamelen)) return 0; return 1; } oldpos = sldns_buffer_position(pkt); sldns_buffer_set_position(pkt, (size_t)(*sname - sldns_buffer_begin(pkt))); dlen = pkt_dname_len(pkt); sldns_buffer_set_position(pkt, oldpos); if(dlen == 0) return 0; /* parse fail on the rdata name */ *snamelen = dlen; return 1; } /** Synthesize CNAME from DNAME, false if too long */ static int synth_cname(uint8_t* qname, size_t qnamelen, struct rrset_parse* dname_rrset, uint8_t* alias, size_t* aliaslen, sldns_buffer* pkt) { /* we already know that sname is a strict subdomain of DNAME owner */ uint8_t* dtarg = NULL; size_t dtarglen; if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen, pkt)) return 0; if(qnamelen <= dname_rrset->dname_len) return 0; if(qnamelen == 0) return 0; log_assert(qnamelen > dname_rrset->dname_len); /* DNAME from com. to net. with qname example.com. -> example.net. */ /* so: \3com\0 to \3net\0 and qname \7example\3com\0 */ *aliaslen = qnamelen + dtarglen - dname_rrset->dname_len; if(*aliaslen > LDNS_MAX_DOMAINLEN) return 0; /* should have been RCODE YXDOMAIN */ /* decompress dnames into buffer, we know it fits */ dname_pkt_copy(pkt, alias, qname); dname_pkt_copy(pkt, alias+(qnamelen-dname_rrset->dname_len), dtarg); return 1; } /** synthesize a CNAME rrset */ static struct rrset_parse* synth_cname_rrset(uint8_t** sname, size_t* snamelen, uint8_t* alias, size_t aliaslen, struct regional* region, struct msg_parse* msg, struct rrset_parse* rrset, struct rrset_parse* prev, struct rrset_parse* nx, sldns_buffer* pkt) { struct rrset_parse* cn = (struct rrset_parse*)regional_alloc(region, sizeof(struct rrset_parse)); if(!cn) return NULL; memset(cn, 0, sizeof(*cn)); cn->rr_first = (struct rr_parse*)regional_alloc(region, sizeof(struct rr_parse)); if(!cn->rr_first) return NULL; cn->rr_last = cn->rr_first; /* CNAME from sname to alias */ cn->dname = (uint8_t*)regional_alloc(region, *snamelen); if(!cn->dname) return NULL; dname_pkt_copy(pkt, cn->dname, *sname); cn->dname_len = *snamelen; cn->type = LDNS_RR_TYPE_CNAME; cn->section = rrset->section; cn->rrset_class = rrset->rrset_class; cn->rr_count = 1; cn->size = sizeof(uint16_t) + aliaslen; cn->hash=pkt_hash_rrset(pkt, cn->dname, cn->type, cn->rrset_class, 0); /* allocate TTL + rdatalen + uncompressed dname */ memset(cn->rr_first, 0, sizeof(struct rr_parse)); cn->rr_first->outside_packet = 1; cn->rr_first->ttl_data = (uint8_t*)regional_alloc(region, sizeof(uint32_t)+sizeof(uint16_t)+aliaslen); if(!cn->rr_first->ttl_data) return NULL; sldns_write_uint32(cn->rr_first->ttl_data, 0); /* TTL = 0 */ sldns_write_uint16(cn->rr_first->ttl_data+4, aliaslen); memmove(cn->rr_first->ttl_data+6, alias, aliaslen); cn->rr_first->size = sizeof(uint16_t)+aliaslen; /* link it in */ cn->rrset_all_next = nx; if(prev) prev->rrset_all_next = cn; else msg->rrset_first = cn; if(nx == NULL) msg->rrset_last = cn; msg->rrset_count ++; msg->an_rrsets++; /* it is not inserted in the msg hashtable. */ *sname = cn->rr_first->ttl_data + sizeof(uint32_t)+sizeof(uint16_t); *snamelen = aliaslen; return cn; } /** check if DNAME applies to a name */ static int pkt_strict_sub(sldns_buffer* pkt, uint8_t* sname, uint8_t* dr) { uint8_t buf1[LDNS_MAX_DOMAINLEN+1]; uint8_t buf2[LDNS_MAX_DOMAINLEN+1]; /* decompress names */ dname_pkt_copy(pkt, buf1, sname); dname_pkt_copy(pkt, buf2, dr); return dname_strict_subdomain_c(buf1, buf2); } /** check subdomain with decompression */ static int pkt_sub(sldns_buffer* pkt, uint8_t* comprname, uint8_t* zone) { uint8_t buf[LDNS_MAX_DOMAINLEN+1]; dname_pkt_copy(pkt, buf, comprname); return dname_subdomain_c(buf, zone); } /** check subdomain with decompression, compressed is parent */ static int sub_of_pkt(sldns_buffer* pkt, uint8_t* zone, uint8_t* comprname) { uint8_t buf[LDNS_MAX_DOMAINLEN+1]; dname_pkt_copy(pkt, buf, comprname); return dname_subdomain_c(zone, buf); } /** Check if there are SOA records in the authority section (negative) */ static int soa_in_auth(struct msg_parse* msg) { struct rrset_parse* rrset; for(rrset = msg->rrset_first; rrset; rrset = rrset->rrset_all_next) if(rrset->type == LDNS_RR_TYPE_SOA && rrset->section == LDNS_SECTION_AUTHORITY) return 1; return 0; } /** * This routine normalizes a response. This includes removing "irrelevant" * records from the answer and additional sections and (re)synthesizing * CNAMEs from DNAMEs, if present. * * @param pkt: packet. * @param msg: msg to normalize. * @param qinfo: original query. * @param region: where to allocate synthesized CNAMEs. * @return 0 on error. */ static int scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, struct query_info* qinfo, struct regional* region) { uint8_t* sname = qinfo->qname; size_t snamelen = qinfo->qname_len; struct rrset_parse* rrset, *prev, *nsset=NULL; if(FLAGS_GET_RCODE(msg->flags) != LDNS_RCODE_NOERROR && FLAGS_GET_RCODE(msg->flags) != LDNS_RCODE_NXDOMAIN) return 1; /* For the ANSWER section, remove all "irrelevant" records and add * synthesized CNAMEs from DNAMEs * This will strip out-of-order CNAMEs as well. */ /* walk through the parse packet rrset list, keep track of previous * for insert and delete ease, and examine every RRset */ prev = NULL; rrset = msg->rrset_first; while(rrset && rrset->section == LDNS_SECTION_ANSWER) { if(rrset->type == LDNS_RR_TYPE_DNAME && pkt_strict_sub(pkt, sname, rrset->dname)) { /* check if next rrset is correct CNAME. else, * synthesize a CNAME */ struct rrset_parse* nx = rrset->rrset_all_next; uint8_t alias[LDNS_MAX_DOMAINLEN+1]; size_t aliaslen = 0; if(rrset->rr_count != 1) { verbose(VERB_ALGO, "Found DNAME rrset with " "size > 1: %u", (unsigned)rrset->rr_count); return 0; } if(!synth_cname(sname, snamelen, rrset, alias, &aliaslen, pkt)) { verbose(VERB_ALGO, "synthesized CNAME " "too long"); return 0; } if(nx && nx->type == LDNS_RR_TYPE_CNAME && dname_pkt_compare(pkt, sname, nx->dname) == 0) { /* check next cname */ uint8_t* t = NULL; size_t tlen = 0; if(!parse_get_cname_target(nx, &t, &tlen, pkt)) return 0; if(dname_pkt_compare(pkt, alias, t) == 0) { /* it's OK and better capitalized */ prev = rrset; rrset = nx; continue; } /* synth ourselves */ } /* synth a CNAME rrset */ prev = synth_cname_rrset(&sname, &snamelen, alias, aliaslen, region, msg, rrset, rrset, nx, pkt); if(!prev) { log_err("out of memory synthesizing CNAME"); return 0; } /* FIXME: resolve the conflict between synthesized * CNAME ttls and the cache. */ rrset = nx; continue; } /* The only records in the ANSWER section not allowed to */ if(dname_pkt_compare(pkt, sname, rrset->dname) != 0) { remove_rrset("normalize: removing irrelevant RRset:", pkt, msg, prev, &rrset); continue; } /* Follow the CNAME chain. */ if(rrset->type == LDNS_RR_TYPE_CNAME) { struct rrset_parse* nx = rrset->rrset_all_next; uint8_t* oldsname = sname; /* see if the next one is a DNAME, if so, swap them */ if(nx && nx->section == LDNS_SECTION_ANSWER && nx->type == LDNS_RR_TYPE_DNAME && nx->rr_count == 1 && pkt_strict_sub(pkt, sname, nx->dname)) { /* there is a DNAME after this CNAME, it * is in the ANSWER section, and the DNAME * applies to the name we cover */ /* check if the alias of the DNAME equals * this CNAME */ uint8_t alias[LDNS_MAX_DOMAINLEN+1]; size_t aliaslen = 0; uint8_t* t = NULL; size_t tlen = 0; if(synth_cname(sname, snamelen, nx, alias, &aliaslen, pkt) && parse_get_cname_target(rrset, &t, &tlen, pkt) && dname_pkt_compare(pkt, alias, t) == 0) { /* the synthesized CNAME equals the * current CNAME. This CNAME is the * one that the DNAME creates, and this * CNAME is better capitalised */ verbose(VERB_ALGO, "normalize: re-order of DNAME and its CNAME"); if(prev) prev->rrset_all_next = nx; else msg->rrset_first = nx; if(nx->rrset_all_next == NULL) msg->rrset_last = rrset; rrset->rrset_all_next = nx->rrset_all_next; nx->rrset_all_next = rrset; /* prev = nx; unused, enable if there * is other rrset removal code after * this */ } } /* move to next name in CNAME chain */ if(!parse_get_cname_target(rrset, &sname, &snamelen, pkt)) return 0; prev = rrset; rrset = rrset->rrset_all_next; /* in CNAME ANY response, can have data after CNAME */ if(qinfo->qtype == LDNS_RR_TYPE_ANY) { while(rrset && rrset->section == LDNS_SECTION_ANSWER && dname_pkt_compare(pkt, oldsname, rrset->dname) == 0) { prev = rrset; rrset = rrset->rrset_all_next; } } continue; } /* Otherwise, make sure that the RRset matches the qtype. */ if(qinfo->qtype != LDNS_RR_TYPE_ANY && qinfo->qtype != rrset->type) { remove_rrset("normalize: removing irrelevant RRset:", pkt, msg, prev, &rrset); continue; } /* Mark the additional names from relevant rrset as OK. */ /* only for RRsets that match the query name, other ones * will be removed by sanitize, so no additional for them */ if(dname_pkt_compare(pkt, qinfo->qname, rrset->dname) == 0) mark_additional_rrset(pkt, msg, rrset); prev = rrset; rrset = rrset->rrset_all_next; } /* Mark additional names from AUTHORITY */ while(rrset && rrset->section == LDNS_SECTION_AUTHORITY) { if(rrset->type==LDNS_RR_TYPE_DNAME || rrset->type==LDNS_RR_TYPE_CNAME || rrset->type==LDNS_RR_TYPE_A || rrset->type==LDNS_RR_TYPE_AAAA) { remove_rrset("normalize: removing irrelevant " "RRset:", pkt, msg, prev, &rrset); continue; } /* only one NS set allowed in authority section */ if(rrset->type==LDNS_RR_TYPE_NS) { /* NS set must be pertinent to the query */ if(!sub_of_pkt(pkt, qinfo->qname, rrset->dname)) { remove_rrset("normalize: removing irrelevant " "RRset:", pkt, msg, prev, &rrset); continue; } /* we don't want NS sets for NXDOMAIN answers, * because they could contain poisonous contents, * from. eg. fragmentation attacks, inserted after * long RRSIGs in the packet get to the packet * border and such */ /* also for NODATA answers */ if(FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NXDOMAIN || (FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NOERROR && soa_in_auth(msg) && msg->an_rrsets == 0)) { remove_rrset("normalize: removing irrelevant " "RRset:", pkt, msg, prev, &rrset); continue; } if(nsset == NULL) { nsset = rrset; } else { remove_rrset("normalize: removing irrelevant " "RRset:", pkt, msg, prev, &rrset); continue; } } /* if this is type DS and we query for type DS we just got * a referral answer for our type DS query, fix packet */ if(rrset->type==LDNS_RR_TYPE_DS && qinfo->qtype == LDNS_RR_TYPE_DS && dname_pkt_compare(pkt, qinfo->qname, rrset->dname) == 0) { rrset->section = LDNS_SECTION_ANSWER; msg->ancount = rrset->rr_count + rrset->rrsig_count; msg->nscount = 0; msg->arcount = 0; msg->an_rrsets = 1; msg->ns_rrsets = 0; msg->ar_rrsets = 0; msg->rrset_count = 1; msg->rrset_first = rrset; msg->rrset_last = rrset; rrset->rrset_all_next = NULL; return 1; } mark_additional_rrset(pkt, msg, rrset); prev = rrset; rrset = rrset->rrset_all_next; } /* For each record in the additional section, remove it if it is an * address record and not in the collection of additional names * found in ANSWER and AUTHORITY. */ /* These records have not been marked OK previously */ while(rrset && rrset->section == LDNS_SECTION_ADDITIONAL) { /* FIXME: what about other types? */ if(rrset->type==LDNS_RR_TYPE_A || rrset->type==LDNS_RR_TYPE_AAAA) { if((rrset->flags & RRSET_SCRUB_OK)) { /* remove flag to clean up flags variable */ rrset->flags &= ~RRSET_SCRUB_OK; } else { remove_rrset("normalize: removing irrelevant " "RRset:", pkt, msg, prev, &rrset); continue; } } if(rrset->type==LDNS_RR_TYPE_DNAME || rrset->type==LDNS_RR_TYPE_CNAME || rrset->type==LDNS_RR_TYPE_NS) { remove_rrset("normalize: removing irrelevant " "RRset:", pkt, msg, prev, &rrset); continue; } prev = rrset; rrset = rrset->rrset_all_next; } return 1; } /** * Store potential poison in the cache (only if hardening disabled). * The rrset is stored in the cache but removed from the message. * So that it will be used for infrastructure purposes, but not be * returned to the client. * @param pkt: packet * @param msg: message parsed * @param env: environment with cache * @param rrset: to store. */ static void store_rrset(sldns_buffer* pkt, struct msg_parse* msg, struct module_env* env, struct rrset_parse* rrset) { struct ub_packed_rrset_key* k; struct packed_rrset_data* d; struct rrset_ref ref; time_t now = *env->now; k = alloc_special_obtain(env->alloc); if(!k) return; k->entry.data = NULL; if(!parse_copy_decompress_rrset(pkt, msg, rrset, NULL, k)) { alloc_special_release(env->alloc, k); return; } d = (struct packed_rrset_data*)k->entry.data; packed_rrset_ttl_add(d, now); ref.key = k; ref.id = k->id; /*ignore ret: it was in the cache, ref updated */ (void)rrset_cache_update(env->rrset_cache, &ref, env->alloc, now); } /** * Check if right hand name in NSEC is within zone * @param rrset: the NSEC rrset * @param zonename: the zone name. * @return true if BAD. */ static int sanitize_nsec_is_overreach(struct rrset_parse* rrset, uint8_t* zonename) { struct rr_parse* rr; uint8_t* rhs; size_t len; log_assert(rrset->type == LDNS_RR_TYPE_NSEC); for(rr = rrset->rr_first; rr; rr = rr->next) { rhs = rr->ttl_data+4+2; len = sldns_read_uint16(rr->ttl_data+4); if(!dname_valid(rhs, len)) { /* malformed domain name in rdata */ return 1; } if(!dname_subdomain_c(rhs, zonename)) { /* overreaching */ return 1; } } /* all NSEC RRs OK */ return 0; } /** * Given a response event, remove suspect RRsets from the response. * "Suspect" rrsets are potentially poison. Note that this routine expects * the response to be in a "normalized" state -- that is, all "irrelevant" * RRsets have already been removed, CNAMEs are in order, etc. * * @param pkt: packet. * @param msg: msg to normalize. * @param qinfo: the question originally asked. * @param zonename: name of server zone. * @param env: module environment with config and cache. * @param ie: iterator environment with private address data. * @return 0 on error. */ static int scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, struct query_info* qinfo, uint8_t* zonename, struct module_env* env, struct iter_env* ie) { int del_addi = 0; /* if additional-holding rrsets are deleted, we do not trust the normalized additional-A-AAAA any more */ struct rrset_parse* rrset, *prev; prev = NULL; rrset = msg->rrset_first; /* the first DNAME is allowed to stay. It needs checking before * it can be used from the cache. After normalization, an initial * DNAME will have a correctly synthesized CNAME after it. */ if(rrset && rrset->type == LDNS_RR_TYPE_DNAME && rrset->section == LDNS_SECTION_ANSWER && pkt_strict_sub(pkt, qinfo->qname, rrset->dname) && pkt_sub(pkt, rrset->dname, zonename)) { prev = rrset; /* DNAME allowed to stay in answer section */ rrset = rrset->rrset_all_next; } /* remove all records from the answer section that are * not the same domain name as the query domain name. * The answer section should contain rrsets with the same name * as the question. For DNAMEs a CNAME has been synthesized. * Wildcards have the query name in answer section. * ANY queries get query name in answer section. * Remainders of CNAME chains are cut off and resolved by iterator. */ while(rrset && rrset->section == LDNS_SECTION_ANSWER) { if(dname_pkt_compare(pkt, qinfo->qname, rrset->dname) != 0) { if(has_additional(rrset->type)) del_addi = 1; remove_rrset("sanitize: removing extraneous answer " "RRset:", pkt, msg, prev, &rrset); continue; } prev = rrset; rrset = rrset->rrset_all_next; } /* At this point, we brutally remove ALL rrsets that aren't * children of the originating zone. The idea here is that, * as far as we know, the server that we contacted is ONLY * authoritative for the originating zone. It, of course, MAY * be authoritative for any other zones, and of course, MAY * NOT be authoritative for some subdomains of the originating * zone. */ prev = NULL; rrset = msg->rrset_first; while(rrset) { /* remove private addresses */ if( (rrset->type == LDNS_RR_TYPE_A || rrset->type == LDNS_RR_TYPE_AAAA)) { /* do not set servfail since this leads to too * many drops of other people using rfc1918 space */ /* also do not remove entire rrset, unless all records * in it are bad */ if(priv_rrset_bad(ie->priv, pkt, rrset)) { remove_rrset(NULL, pkt, msg, prev, &rrset); continue; } } /* skip DNAME records -- they will always be followed by a * synthesized CNAME, which will be relevant. * FIXME: should this do something differently with DNAME * rrsets NOT in Section.ANSWER? */ /* But since DNAME records are also subdomains of the zone, * same check can be used */ if(!pkt_sub(pkt, rrset->dname, zonename)) { if(msg->an_rrsets == 0 && rrset->type == LDNS_RR_TYPE_NS && rrset->section == LDNS_SECTION_AUTHORITY && FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NOERROR && !soa_in_auth(msg) && sub_of_pkt(pkt, zonename, rrset->dname)) { /* noerror, nodata and this NS rrset is above * the zone. This is LAME! * Leave in the NS for lame classification. */ /* remove everything from the additional * (we dont want its glue that was approved * during the normalize action) */ del_addi = 1; } else if(!env->cfg->harden_glue && ( rrset->type == LDNS_RR_TYPE_A || rrset->type == LDNS_RR_TYPE_AAAA)) { /* store in cache! Since it is relevant * (from normalize) it will be picked up * from the cache to be used later */ store_rrset(pkt, msg, env, rrset); remove_rrset("sanitize: storing potential " "poison RRset:", pkt, msg, prev, &rrset); continue; } else { if(has_additional(rrset->type)) del_addi = 1; remove_rrset("sanitize: removing potential " "poison RRset:", pkt, msg, prev, &rrset); continue; } } if(del_addi && rrset->section == LDNS_SECTION_ADDITIONAL) { remove_rrset("sanitize: removing potential " "poison reference RRset:", pkt, msg, prev, &rrset); continue; } /* check if right hand side of NSEC is within zone */ if(rrset->type == LDNS_RR_TYPE_NSEC && sanitize_nsec_is_overreach(rrset, zonename)) { remove_rrset("sanitize: removing overreaching NSEC " "RRset:", pkt, msg, prev, &rrset); continue; } prev = rrset; rrset = rrset->rrset_all_next; } return 1; } int scrub_message(sldns_buffer* pkt, struct msg_parse* msg, struct query_info* qinfo, uint8_t* zonename, struct regional* region, struct module_env* env, struct iter_env* ie) { /* basic sanity checks */ log_nametypeclass(VERB_ALGO, "scrub for", zonename, LDNS_RR_TYPE_NS, qinfo->qclass); if(msg->qdcount > 1) return 0; if( !(msg->flags&BIT_QR) ) return 0; msg->flags &= ~(BIT_AD|BIT_Z); /* force off bit AD and Z */ /* make sure that a query is echoed back when NOERROR or NXDOMAIN */ /* this is not required for basic operation but is a forgery * resistance (security) feature */ if((FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NOERROR || FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NXDOMAIN) && msg->qdcount == 0) return 0; /* if a query is echoed back, make sure it is correct. Otherwise, * this may be not a reply to our query. */ if(msg->qdcount == 1) { if(dname_pkt_compare(pkt, msg->qname, qinfo->qname) != 0) return 0; if(msg->qtype != qinfo->qtype || msg->qclass != qinfo->qclass) return 0; } /* normalize the response, this cleans up the additional. */ if(!scrub_normalize(pkt, msg, qinfo, region)) return 0; /* delete all out-of-zone information */ if(!scrub_sanitize(pkt, msg, qinfo, zonename, env, ie)) return 0; return 1; } unbound-1.13.1/iterator/iter_donotq.h0000644000175000017500000000636414010434640017241 0ustar wouterwouter/* * iterator/iter_donotq.h - iterative resolver donotqueryaddresses storage. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Keep track of the donotquery addresses and lookup fast. */ #ifndef ITERATOR_ITER_DONOTQ_H #define ITERATOR_ITER_DONOTQ_H #include "util/storage/dnstree.h" struct iter_env; struct config_file; struct regional; /** * Iterator donotqueryaddresses structure */ struct iter_donotq { /** regional for allocation */ struct regional* region; /** * Tree of the address spans that are blocked. * contents of type addr_tree_node. Each node is an address span * that must not be used to send queries to. */ rbtree_type tree; }; /** * Create donotqueryaddresses structure * @return new structure or NULL on error. */ struct iter_donotq* donotq_create(void); /** * Delete donotqueryaddresses structure. * @param donotq: to delete. */ void donotq_delete(struct iter_donotq* donotq); /** * Process donotqueryaddresses config. * @param donotq: where to store. * @param cfg: config options. * @return 0 on error. */ int donotq_apply_cfg(struct iter_donotq* donotq, struct config_file* cfg); /** * See if an address is blocked. * @param donotq: structure for address storage. * @param addr: address to check * @param addrlen: length of addr. * @return: true if the address must not be queried. false if unlisted. */ int donotq_lookup(struct iter_donotq* donotq, struct sockaddr_storage* addr, socklen_t addrlen); /** * Get memory used by donotqueryaddresses structure. * @param donotq: structure for address storage. * @return bytes in use. */ size_t donotq_get_mem(struct iter_donotq* donotq); #endif /* ITERATOR_ITER_DONOTQ_H */ unbound-1.13.1/iterator/iter_priv.c0000644000175000017500000002070614010434640016704 0ustar wouterwouter/* * iterator/iter_priv.c - iterative resolver private address and domain store * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Keep track of the private addresses and lookup fast. */ #include "config.h" #include "iterator/iter_priv.h" #include "util/regional.h" #include "util/log.h" #include "util/config_file.h" #include "util/data/dname.h" #include "util/data/msgparse.h" #include "util/net_help.h" #include "util/storage/dnstree.h" #include "sldns/str2wire.h" #include "sldns/sbuffer.h" struct iter_priv* priv_create(void) { struct iter_priv* priv = (struct iter_priv*)calloc(1, sizeof(*priv)); if(!priv) return NULL; priv->region = regional_create(); if(!priv->region) { priv_delete(priv); return NULL; } addr_tree_init(&priv->a); name_tree_init(&priv->n); return priv; } void priv_delete(struct iter_priv* priv) { if(!priv) return; regional_destroy(priv->region); free(priv); } /** Read private-addr declarations from config */ static int read_addrs(struct iter_priv* priv, struct config_file* cfg) { /* parse addresses, report errors, insert into tree */ struct config_strlist* p; struct addr_tree_node* n; struct sockaddr_storage addr; int net; socklen_t addrlen; for(p = cfg->private_address; p; p = p->next) { log_assert(p->str); if(!netblockstrtoaddr(p->str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse private-address: %s", p->str); return 0; } n = (struct addr_tree_node*)regional_alloc(priv->region, sizeof(*n)); if(!n) { log_err("out of memory"); return 0; } if(!addr_tree_insert(&priv->a, n, &addr, addrlen, net)) { verbose(VERB_QUERY, "ignoring duplicate " "private-address: %s", p->str); } } return 1; } /** Read private-domain declarations from config */ static int read_names(struct iter_priv* priv, struct config_file* cfg) { /* parse names, report errors, insert into tree */ struct config_strlist* p; struct name_tree_node* n; uint8_t* nm, *nmr; size_t nm_len; int nm_labs; for(p = cfg->private_domain; p; p = p->next) { log_assert(p->str); nm = sldns_str2wire_dname(p->str, &nm_len); if(!nm) { log_err("cannot parse private-domain: %s", p->str); return 0; } nm_labs = dname_count_size_labels(nm, &nm_len); nmr = (uint8_t*)regional_alloc_init(priv->region, nm, nm_len); free(nm); if(!nmr) { log_err("out of memory"); return 0; } n = (struct name_tree_node*)regional_alloc(priv->region, sizeof(*n)); if(!n) { log_err("out of memory"); return 0; } if(!name_tree_insert(&priv->n, n, nmr, nm_len, nm_labs, LDNS_RR_CLASS_IN)) { verbose(VERB_QUERY, "ignoring duplicate " "private-domain: %s", p->str); } } return 1; } int priv_apply_cfg(struct iter_priv* priv, struct config_file* cfg) { /* empty the current contents */ regional_free_all(priv->region); addr_tree_init(&priv->a); name_tree_init(&priv->n); /* read new contents */ if(!read_addrs(priv, cfg)) return 0; if(!read_names(priv, cfg)) return 0; /* prepare for lookups */ addr_tree_init_parents(&priv->a); name_tree_init_parents(&priv->n); return 1; } /** * See if an address is blocked. * @param priv: structure for address storage. * @param addr: address to check * @param addrlen: length of addr. * @return: true if the address must not be queried. false if unlisted. */ static int priv_lookup_addr(struct iter_priv* priv, struct sockaddr_storage* addr, socklen_t addrlen) { return addr_tree_lookup(&priv->a, addr, addrlen) != NULL; } /** * See if a name is whitelisted. * @param priv: structure for address storage. * @param pkt: the packet (for compression ptrs). * @param name: name to check. * @param name_len: uncompressed length of the name to check. * @param dclass: class to check. * @return: true if the name is OK. false if unlisted. */ static int priv_lookup_name(struct iter_priv* priv, sldns_buffer* pkt, uint8_t* name, size_t name_len, uint16_t dclass) { size_t len; uint8_t decomp[256]; int labs; if(name_len >= sizeof(decomp)) return 0; dname_pkt_copy(pkt, decomp, name); labs = dname_count_size_labels(decomp, &len); log_assert(name_len == len); return name_tree_lookup(&priv->n, decomp, len, labs, dclass) != NULL; } size_t priv_get_mem(struct iter_priv* priv) { if(!priv) return 0; return sizeof(*priv) + regional_get_mem(priv->region); } /** remove RR from msgparse RRset, return true if rrset is entirely bad */ static int remove_rr(const char* str, sldns_buffer* pkt, struct rrset_parse* rrset, struct rr_parse* prev, struct rr_parse** rr, struct sockaddr_storage* addr, socklen_t addrlen) { if(verbosity >= VERB_QUERY && rrset->dname_len <= LDNS_MAX_DOMAINLEN && str) { uint8_t buf[LDNS_MAX_DOMAINLEN+1]; dname_pkt_copy(pkt, buf, rrset->dname); log_name_addr(VERB_QUERY, str, buf, addr, addrlen); } if(prev) prev->next = (*rr)->next; else rrset->rr_first = (*rr)->next; if(rrset->rr_last == *rr) rrset->rr_last = prev; rrset->rr_count --; rrset->size -= (*rr)->size; /* rr struct still exists, but is unlinked, so that in the for loop * the rr->next works fine to continue. */ return rrset->rr_count == 0; } int priv_rrset_bad(struct iter_priv* priv, sldns_buffer* pkt, struct rrset_parse* rrset) { if(priv->a.count == 0) return 0; /* there are no blocked addresses */ /* see if it is a private name, that is allowed to have any */ if(priv_lookup_name(priv, pkt, rrset->dname, rrset->dname_len, ntohs(rrset->rrset_class))) { return 0; } else { /* so its a public name, check the address */ socklen_t len; struct rr_parse* rr, *prev = NULL; if(rrset->type == LDNS_RR_TYPE_A) { struct sockaddr_storage addr; struct sockaddr_in sa; len = (socklen_t)sizeof(sa); memset(&sa, 0, len); sa.sin_family = AF_INET; sa.sin_port = (in_port_t)htons(UNBOUND_DNS_PORT); for(rr = rrset->rr_first; rr; rr = rr->next) { if(sldns_read_uint16(rr->ttl_data+4) != INET_SIZE) { prev = rr; continue; } memmove(&sa.sin_addr, rr->ttl_data+4+2, INET_SIZE); memmove(&addr, &sa, len); if(priv_lookup_addr(priv, &addr, len)) { if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len)) return 1; continue; } prev = rr; } } else if(rrset->type == LDNS_RR_TYPE_AAAA) { struct sockaddr_storage addr; struct sockaddr_in6 sa; len = (socklen_t)sizeof(sa); memset(&sa, 0, len); sa.sin6_family = AF_INET6; sa.sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT); for(rr = rrset->rr_first; rr; rr = rr->next) { if(sldns_read_uint16(rr->ttl_data+4) != INET6_SIZE) { prev = rr; continue; } memmove(&sa.sin6_addr, rr->ttl_data+4+2, INET6_SIZE); memmove(&addr, &sa, len); if(priv_lookup_addr(priv, &addr, len)) { if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len)) return 1; continue; } prev = rr; } } } return 0; } unbound-1.13.1/iterator/iter_hints.c0000644000175000017500000003630514010434640017053 0ustar wouterwouter/* * iterator/iter_hints.c - iterative resolver module stub and root hints. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Keep track of stub and root hints, and read those from config. */ #include "config.h" #include "iterator/iter_hints.h" #include "iterator/iter_delegpt.h" #include "util/log.h" #include "util/config_file.h" #include "util/net_help.h" #include "util/data/dname.h" #include "sldns/rrdef.h" #include "sldns/str2wire.h" #include "sldns/wire2str.h" struct iter_hints* hints_create(void) { struct iter_hints* hints = (struct iter_hints*)calloc(1, sizeof(struct iter_hints)); if(!hints) return NULL; return hints; } static void hints_stub_free(struct iter_hints_stub* s) { if(!s) return; delegpt_free_mlc(s->dp); free(s); } static void delhintnode(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct iter_hints_stub* node = (struct iter_hints_stub*)n; hints_stub_free(node); } static void hints_del_tree(struct iter_hints* hints) { traverse_postorder(&hints->tree, &delhintnode, NULL); } void hints_delete(struct iter_hints* hints) { if(!hints) return; hints_del_tree(hints); free(hints); } /** add hint to delegation hints */ static int ah(struct delegpt* dp, const char* sv, const char* ip) { struct sockaddr_storage addr; socklen_t addrlen; size_t dname_len; uint8_t* dname = sldns_str2wire_dname(sv, &dname_len); if(!dname) { log_err("could not parse %s", sv); return 0; } if(!delegpt_add_ns_mlc(dp, dname, 0) || !extstrtoaddr(ip, &addr, &addrlen) || !delegpt_add_target_mlc(dp, dname, dname_len, &addr, addrlen, 0, 0)) { free(dname); return 0; } free(dname); return 1; } /** obtain compiletime provided root hints */ static struct delegpt* compile_time_root_prime(int do_ip4, int do_ip6) { /* from: ; This file is made available by InterNIC ; under anonymous FTP as ; file /domain/named.cache ; on server FTP.INTERNIC.NET ; -OR- RS.INTERNIC.NET ; ; related version of root zone: changes-on-20120103 */ struct delegpt* dp = delegpt_create_mlc((uint8_t*)"\000"); if(!dp) return NULL; dp->has_parent_side_NS = 1; if(do_ip4) { if(!ah(dp, "A.ROOT-SERVERS.NET.", "198.41.0.4")) goto failed; if(!ah(dp, "B.ROOT-SERVERS.NET.", "199.9.14.201")) goto failed; if(!ah(dp, "C.ROOT-SERVERS.NET.", "192.33.4.12")) goto failed; if(!ah(dp, "D.ROOT-SERVERS.NET.", "199.7.91.13")) goto failed; if(!ah(dp, "E.ROOT-SERVERS.NET.", "192.203.230.10")) goto failed; if(!ah(dp, "F.ROOT-SERVERS.NET.", "192.5.5.241")) goto failed; if(!ah(dp, "G.ROOT-SERVERS.NET.", "192.112.36.4")) goto failed; if(!ah(dp, "H.ROOT-SERVERS.NET.", "198.97.190.53")) goto failed; if(!ah(dp, "I.ROOT-SERVERS.NET.", "192.36.148.17")) goto failed; if(!ah(dp, "J.ROOT-SERVERS.NET.", "192.58.128.30")) goto failed; if(!ah(dp, "K.ROOT-SERVERS.NET.", "193.0.14.129")) goto failed; if(!ah(dp, "L.ROOT-SERVERS.NET.", "199.7.83.42")) goto failed; if(!ah(dp, "M.ROOT-SERVERS.NET.", "202.12.27.33")) goto failed; } if(do_ip6) { if(!ah(dp, "A.ROOT-SERVERS.NET.", "2001:503:ba3e::2:30")) goto failed; if(!ah(dp, "B.ROOT-SERVERS.NET.", "2001:500:200::b")) goto failed; if(!ah(dp, "C.ROOT-SERVERS.NET.", "2001:500:2::c")) goto failed; if(!ah(dp, "D.ROOT-SERVERS.NET.", "2001:500:2d::d")) goto failed; if(!ah(dp, "E.ROOT-SERVERS.NET.", "2001:500:a8::e")) goto failed; if(!ah(dp, "F.ROOT-SERVERS.NET.", "2001:500:2f::f")) goto failed; if(!ah(dp, "G.ROOT-SERVERS.NET.", "2001:500:12::d0d")) goto failed; if(!ah(dp, "H.ROOT-SERVERS.NET.", "2001:500:1::53")) goto failed; if(!ah(dp, "I.ROOT-SERVERS.NET.", "2001:7fe::53")) goto failed; if(!ah(dp, "J.ROOT-SERVERS.NET.", "2001:503:c27::2:30")) goto failed; if(!ah(dp, "K.ROOT-SERVERS.NET.", "2001:7fd::1")) goto failed; if(!ah(dp, "L.ROOT-SERVERS.NET.", "2001:500:9f::42")) goto failed; if(!ah(dp, "M.ROOT-SERVERS.NET.", "2001:dc3::35")) goto failed; } return dp; failed: delegpt_free_mlc(dp); return 0; } /** insert new hint info into hint structure */ static int hints_insert(struct iter_hints* hints, uint16_t c, struct delegpt* dp, int noprime) { struct iter_hints_stub* node = (struct iter_hints_stub*)malloc( sizeof(struct iter_hints_stub)); if(!node) { delegpt_free_mlc(dp); return 0; } node->dp = dp; node->noprime = (uint8_t)noprime; if(!name_tree_insert(&hints->tree, &node->node, dp->name, dp->namelen, dp->namelabs, c)) { char buf[257]; dname_str(dp->name, buf); log_err("second hints for zone %s ignored.", buf); delegpt_free_mlc(dp); free(node); } return 1; } /** set stub name */ static struct delegpt* read_stubs_name(struct config_stub* s) { struct delegpt* dp; size_t dname_len; uint8_t* dname; if(!s->name) { log_err("stub zone without a name"); return NULL; } dname = sldns_str2wire_dname(s->name, &dname_len); if(!dname) { log_err("cannot parse stub zone name %s", s->name); return NULL; } if(!(dp=delegpt_create_mlc(dname))) { free(dname); log_err("out of memory"); return NULL; } free(dname); return dp; } /** set stub host names */ static int read_stubs_host(struct config_stub* s, struct delegpt* dp) { struct config_strlist* p; size_t dname_len; uint8_t* dname; for(p = s->hosts; p; p = p->next) { log_assert(p->str); dname = sldns_str2wire_dname(p->str, &dname_len); if(!dname) { log_err("cannot parse stub %s nameserver name: '%s'", s->name, p->str); return 0; } if(!delegpt_add_ns_mlc(dp, dname, 0)) { free(dname); log_err("out of memory"); return 0; } free(dname); } return 1; } /** set stub server addresses */ static int read_stubs_addr(struct config_stub* s, struct delegpt* dp) { struct config_strlist* p; struct sockaddr_storage addr; socklen_t addrlen; char* auth_name; for(p = s->addrs; p; p = p->next) { log_assert(p->str); if(!authextstrtoaddr(p->str, &addr, &addrlen, &auth_name)) { log_err("cannot parse stub %s ip address: '%s'", s->name, p->str); return 0; } #if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) if(auth_name) log_err("no name verification functionality in " "ssl library, ignored name for %s", p->str); #endif if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0, auth_name)) { log_err("out of memory"); return 0; } } return 1; } /** read stubs config */ static int read_stubs(struct iter_hints* hints, struct config_file* cfg) { struct config_stub* s; struct delegpt* dp; for(s = cfg->stubs; s; s = s->next) { if(!(dp=read_stubs_name(s))) return 0; if(!read_stubs_host(s, dp) || !read_stubs_addr(s, dp)) { delegpt_free_mlc(dp); return 0; } /* the flag is turned off for 'stub-first' so that the * last resort will ask for parent-side NS record and thus * fallback to the internet name servers on a failure */ dp->has_parent_side_NS = (uint8_t)!s->isfirst; /* Do not cache if set. */ dp->no_cache = s->no_cache; /* ssl_upstream */ dp->ssl_upstream = (uint8_t)s->ssl_upstream; delegpt_log(VERB_QUERY, dp); if(!hints_insert(hints, LDNS_RR_CLASS_IN, dp, !s->isprime)) return 0; } return 1; } /** read root hints from file */ static int read_root_hints(struct iter_hints* hints, char* fname) { struct sldns_file_parse_state pstate; struct delegpt* dp; uint8_t rr[LDNS_RR_BUF_SIZE]; size_t rr_len, dname_len; int status; uint16_t c = LDNS_RR_CLASS_IN; FILE* f = fopen(fname, "r"); if(!f) { log_err("could not read root hints %s: %s", fname, strerror(errno)); return 0; } dp = delegpt_create_mlc(NULL); if(!dp) { log_err("out of memory reading root hints"); fclose(f); return 0; } verbose(VERB_QUERY, "Reading root hints from %s", fname); memset(&pstate, 0, sizeof(pstate)); pstate.lineno = 1; dp->has_parent_side_NS = 1; while(!feof(f)) { rr_len = sizeof(rr); dname_len = 0; status = sldns_fp2wire_rr_buf(f, rr, &rr_len, &dname_len, &pstate); if(status != 0) { log_err("reading root hints %s %d:%d: %s", fname, pstate.lineno, LDNS_WIREPARSE_OFFSET(status), sldns_get_errorstr_parse(status)); goto stop_read; } if(rr_len == 0) continue; /* EMPTY line, TTL or ORIGIN */ if(sldns_wirerr_get_type(rr, rr_len, dname_len) == LDNS_RR_TYPE_NS) { if(!delegpt_add_ns_mlc(dp, sldns_wirerr_get_rdata(rr, rr_len, dname_len), 0)) { log_err("out of memory reading root hints"); goto stop_read; } c = sldns_wirerr_get_class(rr, rr_len, dname_len); if(!dp->name) { if(!delegpt_set_name_mlc(dp, rr)) { log_err("out of memory."); goto stop_read; } } } else if(sldns_wirerr_get_type(rr, rr_len, dname_len) == LDNS_RR_TYPE_A && sldns_wirerr_get_rdatalen(rr, rr_len, dname_len) == INET_SIZE) { struct sockaddr_in sa; socklen_t len = (socklen_t)sizeof(sa); memset(&sa, 0, len); sa.sin_family = AF_INET; sa.sin_port = (in_port_t)htons(UNBOUND_DNS_PORT); memmove(&sa.sin_addr, sldns_wirerr_get_rdata(rr, rr_len, dname_len), INET_SIZE); if(!delegpt_add_target_mlc(dp, rr, dname_len, (struct sockaddr_storage*)&sa, len, 0, 0)) { log_err("out of memory reading root hints"); goto stop_read; } } else if(sldns_wirerr_get_type(rr, rr_len, dname_len) == LDNS_RR_TYPE_AAAA && sldns_wirerr_get_rdatalen(rr, rr_len, dname_len) == INET6_SIZE) { struct sockaddr_in6 sa; socklen_t len = (socklen_t)sizeof(sa); memset(&sa, 0, len); sa.sin6_family = AF_INET6; sa.sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT); memmove(&sa.sin6_addr, sldns_wirerr_get_rdata(rr, rr_len, dname_len), INET6_SIZE); if(!delegpt_add_target_mlc(dp, rr, dname_len, (struct sockaddr_storage*)&sa, len, 0, 0)) { log_err("out of memory reading root hints"); goto stop_read; } } else { char buf[17]; sldns_wire2str_type_buf(sldns_wirerr_get_type(rr, rr_len, dname_len), buf, sizeof(buf)); log_warn("root hints %s:%d skipping type %s", fname, pstate.lineno, buf); } } fclose(f); if(!dp->name) { log_warn("root hints %s: no NS content", fname); delegpt_free_mlc(dp); return 1; } if(!hints_insert(hints, c, dp, 0)) { return 0; } delegpt_log(VERB_QUERY, dp); return 1; stop_read: delegpt_free_mlc(dp); fclose(f); return 0; } /** read root hints list */ static int read_root_hints_list(struct iter_hints* hints, struct config_file* cfg) { struct config_strlist* p; for(p = cfg->root_hints; p; p = p->next) { log_assert(p->str); if(p->str && p->str[0]) { char* f = p->str; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(p->str, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) f += strlen(cfg->chrootdir); if(!read_root_hints(hints, f)) return 0; } } return 1; } int hints_apply_cfg(struct iter_hints* hints, struct config_file* cfg) { hints_del_tree(hints); name_tree_init(&hints->tree); /* read root hints */ if(!read_root_hints_list(hints, cfg)) return 0; /* read stub hints */ if(!read_stubs(hints, cfg)) return 0; /* use fallback compiletime root hints */ if(!hints_lookup_root(hints, LDNS_RR_CLASS_IN)) { struct delegpt* dp = compile_time_root_prime(cfg->do_ip4, cfg->do_ip6); verbose(VERB_ALGO, "no config, using builtin root hints."); if(!dp) return 0; if(!hints_insert(hints, LDNS_RR_CLASS_IN, dp, 0)) return 0; } name_tree_init_parents(&hints->tree); return 1; } struct delegpt* hints_lookup_root(struct iter_hints* hints, uint16_t qclass) { uint8_t rootlab = 0; struct iter_hints_stub *stub; stub = (struct iter_hints_stub*)name_tree_find(&hints->tree, &rootlab, 1, 1, qclass); if(!stub) return NULL; return stub->dp; } struct iter_hints_stub* hints_lookup_stub(struct iter_hints* hints, uint8_t* qname, uint16_t qclass, struct delegpt* cache_dp) { size_t len; int labs; struct iter_hints_stub *r; /* first lookup the stub */ labs = dname_count_size_labels(qname, &len); r = (struct iter_hints_stub*)name_tree_lookup(&hints->tree, qname, len, labs, qclass); if(!r) return NULL; /* If there is no cache (root prime situation) */ if(cache_dp == NULL) { if(r->dp->namelabs != 1) return r; /* no cache dp, use any non-root stub */ return NULL; } /* * If the stub is same as the delegation we got * And has noprime set, we need to 'prime' to use this stub instead. */ if(r->noprime && query_dname_compare(cache_dp->name, r->dp->name)==0) return r; /* use this stub instead of cached dp */ /* * If our cached delegation point is above the hint, we need to prime. */ if(dname_strict_subdomain(r->dp->name, r->dp->namelabs, cache_dp->name, cache_dp->namelabs)) return r; /* need to prime this stub */ return NULL; } int hints_next_root(struct iter_hints* hints, uint16_t* qclass) { return name_tree_next_root(&hints->tree, qclass); } size_t hints_get_mem(struct iter_hints* hints) { size_t s; struct iter_hints_stub* p; if(!hints) return 0; s = sizeof(*hints); RBTREE_FOR(p, struct iter_hints_stub*, &hints->tree) { s += sizeof(*p) + delegpt_get_mem(p->dp); } return s; } int hints_add_stub(struct iter_hints* hints, uint16_t c, struct delegpt* dp, int noprime) { struct iter_hints_stub *z; if((z=(struct iter_hints_stub*)name_tree_find(&hints->tree, dp->name, dp->namelen, dp->namelabs, c)) != NULL) { (void)rbtree_delete(&hints->tree, &z->node); hints_stub_free(z); } if(!hints_insert(hints, c, dp, noprime)) return 0; name_tree_init_parents(&hints->tree); return 1; } void hints_delete_stub(struct iter_hints* hints, uint16_t c, uint8_t* nm) { struct iter_hints_stub *z; size_t len; int labs = dname_count_size_labels(nm, &len); if(!(z=(struct iter_hints_stub*)name_tree_find(&hints->tree, nm, len, labs, c))) return; /* nothing to do */ (void)rbtree_delete(&hints->tree, &z->node); hints_stub_free(z); name_tree_init_parents(&hints->tree); } unbound-1.13.1/iterator/iterator.h0000644000175000017500000003542514010434640016543 0ustar wouterwouter/* * iterator/iterator.h - iterative resolver DNS query response module * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that performs recursive iterative DNS query * processing. */ #ifndef ITERATOR_ITERATOR_H #define ITERATOR_ITERATOR_H #include "services/outbound_list.h" #include "util/data/msgreply.h" #include "util/module.h" struct delegpt; struct iter_hints; struct iter_forwards; struct iter_donotq; struct iter_prep_list; struct iter_priv; struct rbtree_type; /** max number of targets spawned for a query and its subqueries */ #define MAX_TARGET_COUNT 64 /** max number of target lookups per qstate, per delegation point */ #define MAX_DP_TARGET_COUNT 16 /** max number of nxdomains allowed for target lookups for a query and * its subqueries */ #define MAX_TARGET_NX 5 /** max number of query restarts. Determines max number of CNAME chain. */ #define MAX_RESTART_COUNT 8 /** max number of referrals. Makes sure resolver does not run away */ #define MAX_REFERRAL_COUNT 130 /** max number of queries-sent-out. Make sure large NS set does not loop */ #define MAX_SENT_COUNT 32 /** max number of queries for which to perform dnsseclameness detection, * (rrsigs missing detection) after that, just pick up that response */ #define DNSSEC_LAME_DETECT_COUNT 4 /** * max number of QNAME minimisation iterations. Limits number of queries for * QNAMEs with a lot of labels. */ #define MAX_MINIMISE_COUNT 10 /* max number of time-outs for minimised query. Prevents resolving failures * when the QNAME minimisation QTYPE is blocked. */ #define MAX_MINIMISE_TIMEOUT_COUNT 3 /** * number of labels from QNAME that are always send individually when using * QNAME minimisation, even when the number of labels of the QNAME is bigger * tham MAX_MINIMISE_COUNT */ #define MINIMISE_ONE_LAB 4 #define MINIMISE_MULTIPLE_LABS (MAX_MINIMISE_COUNT - MINIMISE_ONE_LAB) /** at what query-sent-count to stop target fetch policy */ #define TARGET_FETCH_STOP 3 /** how nice is a server without further information, in msec * Equals rtt initial timeout value. */ extern int UNKNOWN_SERVER_NICENESS; /** maximum timeout before a host is deemed unsuitable, in msec. * After host_ttl this will be timed out and the host will be tried again. * Equals RTT_MAX_TIMEOUT */ #define USEFUL_SERVER_TOP_TIMEOUT 120000 /** number of retries on outgoing queries */ #define OUTBOUND_MSG_RETRY 5 /** RTT band, within this amount from the best, servers are chosen randomly. * Chosen so that the UNKNOWN_SERVER_NICENESS falls within the band of a * fast server, this causes server exploration as a side benefit. msec. */ #define RTT_BAND 400 /** Start value for blacklisting a host, 2*USEFUL_SERVER_TOP_TIMEOUT in sec */ #define INFRA_BACKOFF_INITIAL 240 /** * Global state for the iterator. */ struct iter_env { /** A flag to indicate whether or not we have an IPv6 route */ int supports_ipv6; /** A flag to indicate whether or not we have an IPv4 route */ int supports_ipv4; /** A set of inetaddrs that should never be queried. */ struct iter_donotq* donotq; /** private address space and private domains */ struct iter_priv* priv; /** whitelist for capsforid names */ struct rbtree_type* caps_white; /** The maximum dependency depth that this resolver will pursue. */ int max_dependency_depth; /** * The target fetch policy for each dependency level. This is * described as a simple number (per dependency level): * negative numbers (usually just -1) mean fetch-all, * 0 means only fetch on demand, and * positive numbers mean to fetch at most that many targets. * array of max_dependency_depth+1 size. */ int* target_fetch_policy; /** lock on ratelimit counter */ lock_basic_type queries_ratelimit_lock; /** number of queries that have been ratelimited */ size_t num_queries_ratelimited; }; /** * QNAME minimisation state */ enum minimisation_state { /** * (Re)start minimisation. Outgoing QNAME should be set to dp->name. * State entered on new query or after following referral or CNAME. */ INIT_MINIMISE_STATE = 0, /** * QNAME minimisation ongoing. Increase QNAME on every iteration. */ MINIMISE_STATE, /** * Don't increment QNAME this iteration */ SKIP_MINIMISE_STATE, /** * Send out full QNAME + original QTYPE */ DONOT_MINIMISE_STATE, }; /** * State of the iterator for a query. */ enum iter_state { /** * Externally generated queries start at this state. Query restarts are * reset to this state. */ INIT_REQUEST_STATE = 0, /** * Root priming events reactivate here, most other events pass * through this naturally as the 2nd part of the INIT_REQUEST_STATE. */ INIT_REQUEST_2_STATE, /** * Stub priming events reactivate here, most other events pass * through this naturally as the 3rd part of the INIT_REQUEST_STATE. */ INIT_REQUEST_3_STATE, /** * Each time a delegation point changes for a given query or a * query times out and/or wakes up, this state is (re)visited. * This state is responsible for iterating through a list of * nameserver targets. */ QUERYTARGETS_STATE, /** * Responses to queries start at this state. This state handles * the decision tree associated with handling responses. */ QUERY_RESP_STATE, /** Responses to priming queries finish at this state. */ PRIME_RESP_STATE, /** Collecting query class information, for qclass=ANY, when * it spawns off queries for every class, it returns here. */ COLLECT_CLASS_STATE, /** Find NS record to resolve DS record from, walking to the right * NS spot until we find it */ DSNS_FIND_STATE, /** Responses that are to be returned upstream end at this state. * As well as responses to target queries. */ FINISHED_STATE }; /** * Per query state for the iterator module. */ struct iter_qstate { /** * State of the iterator module. * This is the state that event is in or should sent to -- all * requests should start with the INIT_REQUEST_STATE. All * responses should start with QUERY_RESP_STATE. Subsequent * processing of the event will change this state. */ enum iter_state state; /** * Final state for the iterator module. * This is the state that responses should be routed to once the * response is final. For externally initiated queries, this * will be FINISHED_STATE, locally initiated queries will have * different final states. */ enum iter_state final_state; /** * The depth of this query, this means the depth of recursion. * This address is needed for another query, which is an address * needed for another query, etc. Original client query has depth 0. */ int depth; /** * The response */ struct dns_msg* response; /** * This is a list of RRsets that must be prepended to the * ANSWER section of a response before being sent upstream. */ struct iter_prep_list* an_prepend_list; /** Last element of the prepend list */ struct iter_prep_list* an_prepend_last; /** * This is the list of RRsets that must be prepended to the * AUTHORITY section of the response before being sent upstream. */ struct iter_prep_list* ns_prepend_list; /** Last element of the authority prepend list */ struct iter_prep_list* ns_prepend_last; /** query name used for chasing the results. Initially the same as * the state qinfo, but after CNAMEs this will be different. * The query info used to elicit the results needed. */ struct query_info qchase; /** query flags to use when chasing the answer (i.e. RD flag) */ uint16_t chase_flags; /** true if we set RD bit because of last resort recursion lame query*/ int chase_to_rd; /** * This is the current delegation point for an in-progress query. This * object retains state as to which delegation targets need to be * (sub)queried for vs which ones have already been visited. */ struct delegpt* dp; /** state for 0x20 fallback when capsfail happens, 0 not a fallback */ int caps_fallback; /** state for capsfail: current server number to try */ size_t caps_server; /** state for capsfail: stored query for comparisons. Can be NULL if * no response had been seen prior to starting the fallback. */ struct reply_info* caps_reply; struct dns_msg* caps_response; /** Current delegation message - returned for non-RD queries */ struct dns_msg* deleg_msg; /** number of outstanding target sub queries */ int num_target_queries; /** outstanding direct queries */ int num_current_queries; /** the number of times this query has been restarted. */ int query_restart_count; /** the number of times this query as followed a referral. */ int referral_count; /** number of queries fired off */ int sent_count; /** number of target queries spawned in [1], for this query and its * subqueries, the malloced-array is shared, [0] refcount. * in [2] the number of nxdomains is counted. */ int* target_count; /** number of target lookups per delegation point. Reset to 0 after * receiving referral answer. Not shared with subqueries. */ int dp_target_count; /** if true, already tested for ratelimiting and passed the test */ int ratelimit_ok; /** * The query must store NS records from referrals as parentside RRs * Enabled once it hits resolution problems, to throttle retries. * If enabled it is the pointer to the old delegation point with * the old retry counts for bad-nameserver-addresses. */ struct delegpt* store_parent_NS; /** * The query is for parent-side glue(A or AAAA) for a nameserver. * If the item is seen as glue in a referral, and pside_glue is NULL, * then it is stored in pside_glue for later. * If it was never seen, at the end, then a negative caching element * must be created. * The (data or negative) RR cache element then throttles retries. */ int query_for_pside_glue; /** the parent-side-glue element (NULL if none, its first match) */ struct ub_packed_rrset_key* pside_glue; /** If nonNULL we are walking upwards from DS query to find NS */ uint8_t* dsns_point; /** length of the dname in dsns_point */ size_t dsns_point_len; /** * expected dnssec information for this iteration step. * If dnssec rrsigs are expected and not given, the server is marked * lame (dnssec-lame). */ int dnssec_expected; /** * We are expecting dnssec information, but we also know the server * is DNSSEC lame. The response need not be marked dnssec-lame again. */ int dnssec_lame_query; /** * This is flag that, if true, means that this event is * waiting for a stub priming query. */ int wait_priming_stub; /** * This is a flag that, if true, means that this query is * for (re)fetching glue from a zone. Since the address should * have been glue, query again to the servers that should have * been returning it as glue. * The delegation point must be set to the one that should *not* * be used when creating the state. A higher one will be attempted. */ int refetch_glue; /** list of pending queries to authoritative servers. */ struct outbound_list outlist; /** QNAME minimisation state, RFC7816 */ enum minimisation_state minimisation_state; /** State for capsfail: QNAME minimisation state for comparisons. */ enum minimisation_state caps_minimisation_state; /** * The query info that is sent upstream. Will be a subset of qchase * when qname minimisation is enabled. */ struct query_info qinfo_out; /** * Count number of QNAME minimisation iterations. Used to limit number of * outgoing queries when QNAME minimisation is enabled. */ int minimise_count; /** * Count number of time-outs. Used to prevent resolving failures when * the QNAME minimisation QTYPE is blocked. Used to determine if * capsforid fallback should be started.*/ int timeout_count; /** True if the current response is from auth_zone */ int auth_zone_response; /** True if the auth_zones should not be consulted for the query */ int auth_zone_avoid; }; /** * List of prepend items */ struct iter_prep_list { /** next in list */ struct iter_prep_list* next; /** rrset */ struct ub_packed_rrset_key* rrset; }; /** * Get the iterator function block. * @return: function block with function pointers to iterator methods. */ struct module_func_block* iter_get_funcblock(void); /** * Get iterator state as a string * @param state: to convert * @return constant string that is printable. */ const char* iter_state_to_string(enum iter_state state); /** * See if iterator state is a response state * @param s: to inspect * @return true if response state. */ int iter_state_is_responsestate(enum iter_state s); /** iterator init */ int iter_init(struct module_env* env, int id); /** iterator deinit */ void iter_deinit(struct module_env* env, int id); /** iterator operate on a query */ void iter_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** * Return priming query results to interested super querystates. * * Sets the delegation point and delegation message (not nonRD queries). * This is a callback from walk_supers. * * @param qstate: query state that finished. * @param id: module id. * @param super: the qstate to inform. */ void iter_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** iterator cleanup query state */ void iter_clear(struct module_qstate* qstate, int id); /** iterator alloc size routine */ size_t iter_get_mem(struct module_env* env, int id); #endif /* ITERATOR_ITERATOR_H */ unbound-1.13.1/iterator/iter_priv.h0000644000175000017500000000673214010434640016714 0ustar wouterwouter/* * iterator/iter_priv.h - iterative resolver private address and domain store * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Keep track of the private addresses and lookup fast. */ #ifndef ITERATOR_ITER_PRIV_H #define ITERATOR_ITER_PRIV_H #include "util/rbtree.h" struct sldns_buffer; struct iter_env; struct config_file; struct regional; struct rrset_parse; /** * Iterator priv structure */ struct iter_priv { /** regional for allocation */ struct regional* region; /** * Tree of the address spans that are blocked. * contents of type addr_tree_node. * No further data need, only presence or absence. */ rbtree_type a; /** * Tree of the domains spans that are allowed to contain * the blocked address spans. * contents of type name_tree_node. * No further data need, only presence or absence. */ rbtree_type n; }; /** * Create priv structure * @return new structure or NULL on error. */ struct iter_priv* priv_create(void); /** * Delete priv structure. * @param priv: to delete. */ void priv_delete(struct iter_priv* priv); /** * Process priv config. * @param priv: where to store. * @param cfg: config options. * @return 0 on error. */ int priv_apply_cfg(struct iter_priv* priv, struct config_file* cfg); /** * See if rrset is bad. * Will remove individual RRs that are bad (if possible) to * sanitize the RRset without removing it completely. * @param priv: structure for private address storage. * @param pkt: packet to decompress rrset name in. * @param rrset: the rrset to examine, A or AAAA. * @return true if the rrset is bad and should be removed. */ int priv_rrset_bad(struct iter_priv* priv, struct sldns_buffer* pkt, struct rrset_parse* rrset); /** * Get memory used by priv structure. * @param priv: structure for address storage. * @return bytes in use. */ size_t priv_get_mem(struct iter_priv* priv); #endif /* ITERATOR_ITER_PRIV_H */ unbound-1.13.1/iterator/iter_donotq.c0000644000175000017500000001032514010434640017224 0ustar wouterwouter/* * iterator/iter_donotq.c - iterative resolver donotqueryaddresses storage. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * The donotqueryaddresses are stored and looked up. These addresses * (like 127.0.0.1) must not be used to send queries to, and can be * discarded immediately from the server selection. */ #include "config.h" #include "iterator/iter_donotq.h" #include "util/regional.h" #include "util/log.h" #include "util/config_file.h" #include "util/net_help.h" struct iter_donotq* donotq_create(void) { struct iter_donotq* dq = (struct iter_donotq*)calloc(1, sizeof(struct iter_donotq)); if(!dq) return NULL; dq->region = regional_create(); if(!dq->region) { donotq_delete(dq); return NULL; } return dq; } void donotq_delete(struct iter_donotq* dq) { if(!dq) return; regional_destroy(dq->region); free(dq); } /** insert new address into donotq structure */ static int donotq_insert(struct iter_donotq* dq, struct sockaddr_storage* addr, socklen_t addrlen, int net) { struct addr_tree_node* node = (struct addr_tree_node*)regional_alloc( dq->region, sizeof(*node)); if(!node) return 0; if(!addr_tree_insert(&dq->tree, node, addr, addrlen, net)) { verbose(VERB_QUERY, "duplicate donotquery address ignored."); } return 1; } /** apply donotq string */ static int donotq_str_cfg(struct iter_donotq* dq, const char* str) { struct sockaddr_storage addr; int net; socklen_t addrlen; verbose(VERB_ALGO, "donotq: %s", str); if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse donotquery netblock: %s", str); return 0; } if(!donotq_insert(dq, &addr, addrlen, net)) { log_err("out of memory"); return 0; } return 1; } /** read donotq config */ static int read_donotq(struct iter_donotq* dq, struct config_file* cfg) { struct config_strlist* p; for(p = cfg->donotqueryaddrs; p; p = p->next) { log_assert(p->str); if(!donotq_str_cfg(dq, p->str)) return 0; } return 1; } int donotq_apply_cfg(struct iter_donotq* dq, struct config_file* cfg) { regional_free_all(dq->region); addr_tree_init(&dq->tree); if(!read_donotq(dq, cfg)) return 0; if(cfg->donotquery_localhost) { if(!donotq_str_cfg(dq, "127.0.0.0/8")) return 0; if(cfg->do_ip6) { if(!donotq_str_cfg(dq, "::1")) return 0; } } addr_tree_init_parents(&dq->tree); return 1; } int donotq_lookup(struct iter_donotq* donotq, struct sockaddr_storage* addr, socklen_t addrlen) { return addr_tree_lookup(&donotq->tree, addr, addrlen) != NULL; } size_t donotq_get_mem(struct iter_donotq* donotq) { if(!donotq) return 0; return sizeof(*donotq) + regional_get_mem(donotq->region); } unbound-1.13.1/iterator/iter_utils.h0000644000175000017500000003560014010434640017070 0ustar wouterwouter/* * iterator/iter_utils.h - iterative resolver module utility functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to assist the iterator module. * Configuration options. Forward zones. */ #ifndef ITERATOR_ITER_UTILS_H #define ITERATOR_ITER_UTILS_H #include "iterator/iter_resptype.h" struct sldns_buffer; struct iter_env; struct iter_hints; struct iter_forwards; struct config_file; struct module_env; struct delegpt_addr; struct delegpt; struct regional; struct msg_parse; struct ub_randstate; struct query_info; struct reply_info; struct module_qstate; struct sock_list; struct ub_packed_rrset_key; /** * Process config options and set iterator module state. * Sets default values if no config is found. * @param iter_env: iterator module state. * @param cfg: config options. * @return 0 on error. */ int iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg); /** * Select a valid, nice target to send query to. * Sorting and removing unsuitable targets is combined. * * @param iter_env: iterator module global state, with ip6 enabled and * do-not-query-addresses. * @param env: environment with infra cache (lameness, rtt info). * @param dp: delegation point with result list. * @param name: zone name (for lameness check). * @param namelen: length of name. * @param qtype: query type that we want to send. * @param dnssec_lame: set to 1, if a known dnssec-lame server is selected * these are not preferred, but are used as a last resort. * @param chase_to_rd: set to 1 if a known recursion lame server is selected * these are not preferred, but are used as a last resort. * @param open_target: number of currently outstanding target queries. * If we wait for these, perhaps more server addresses become available. * @param blacklist: the IP blacklist to use. * @param prefetch: if not 0, prefetch is in use for this query. * This means the query can have different timing, because prefetch is * not waited upon by the downstream client, and thus a good time to * perform exploration of other targets. * @return best target or NULL if no target. * if not null, that target is removed from the result list in the dp. */ struct delegpt_addr* iter_server_selection(struct iter_env* iter_env, struct module_env* env, struct delegpt* dp, uint8_t* name, size_t namelen, uint16_t qtype, int* dnssec_lame, int* chase_to_rd, int open_target, struct sock_list* blacklist, time_t prefetch); /** * Allocate dns_msg from parsed msg, in regional. * @param pkt: packet. * @param msg: parsed message (cleaned and ready for regional allocation). * @param regional: regional to use for allocation. * @return newly allocated dns_msg, or NULL on memory error. */ struct dns_msg* dns_alloc_msg(struct sldns_buffer* pkt, struct msg_parse* msg, struct regional* regional); /** * Copy a dns_msg to this regional. * @param from: dns message, also in regional. * @param regional: regional to use for allocation. * @return newly allocated dns_msg, or NULL on memory error. */ struct dns_msg* dns_copy_msg(struct dns_msg* from, struct regional* regional); /** * Allocate a dns_msg with malloc/alloc structure and store in dns cache. * @param env: environment, with alloc structure and dns cache. * @param qinf: query info, the query for which answer is stored. * @param rep: reply in dns_msg from dns_alloc_msg for example. * @param is_referral: If true, then the given message to be stored is a * referral. The cache implementation may use this as a hint. * @param leeway: prefetch TTL leeway to expire old rrsets quicker. * @param pside: true if dp is parentside, thus message is 'fresh' and NS * can be prefetch-updates. * @param region: to copy modified (cache is better) rrs back to. * @param flags: with BIT_CD for dns64 AAAA translated queries. * @return void, because we are not interested in alloc errors, * the iterator and validator can operate on the results in their * scratch space (the qstate.region) and are not dependent on the cache. * It is useful to log the alloc failure (for the server operator), * but the query resolution can continue without cache storage. */ void iter_dns_store(struct module_env* env, struct query_info* qinf, struct reply_info* rep, int is_referral, time_t leeway, int pside, struct regional* region, uint16_t flags); /** * Select randomly with n/m probability. * For shuffle NS records for address fetching. * @param rnd: random table * @param n: probability. * @param m: divisor for probability. * @return true with n/m probability. */ int iter_ns_probability(struct ub_randstate* rnd, int n, int m); /** * Mark targets that result in a dependency cycle as done, so they * will not get selected as targets. * @param qstate: query state. * @param dp: delegpt to mark ns in. */ void iter_mark_cycle_targets(struct module_qstate* qstate, struct delegpt* dp); /** * Mark targets that result in a dependency cycle as done, so they * will not get selected as targets. For the parent-side lookups. * @param qstate: query state. * @param dp: delegpt to mark ns in. */ void iter_mark_pside_cycle_targets(struct module_qstate* qstate, struct delegpt* dp); /** * See if delegation is useful or offers immediately no targets for * further recursion. * @param qinfo: query name and type * @param qflags: query flags with RD flag * @param dp: delegpt to check. * @return true if dp is useless. */ int iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags, struct delegpt* dp); /** * See if qname has DNSSEC needs. This is true if there is a trust anchor above * it. Whether there is an insecure delegation to the data is unknown. * @param env: environment with anchors. * @param qinfo: query name and class. * @return true if trust anchor above qname, false if no anchor or insecure * point above qname. */ int iter_qname_indicates_dnssec(struct module_env* env, struct query_info *qinfo); /** * See if delegation is expected to have DNSSEC information (RRSIGs) in * its answers, or not. Inspects delegation point (name), trust anchors, * and delegation message (DS RRset) to determine this. * @param env: module env with trust anchors. * @param dp: delegation point. * @param msg: delegation message, with DS if a secure referral. * @param dclass: class of query. * @return 1 if dnssec is expected, 0 if not or insecure point above qname. */ int iter_indicates_dnssec(struct module_env* env, struct delegpt* dp, struct dns_msg* msg, uint16_t dclass); /** * See if a message contains DNSSEC. * This is examined by looking for RRSIGs. With DNSSEC a valid answer, * nxdomain, nodata, referral or cname reply has RRSIGs in answer or auth * sections, sigs on answer data, SOA, DS, or NSEC/NSEC3 records. * @param msg: message to examine. * @return true if DNSSEC information was found. */ int iter_msg_has_dnssec(struct dns_msg* msg); /** * See if a message is known to be from a certain zone. * This looks for SOA or NS rrsets, for answers. * For referrals, when one label is delegated, the zone is detected. * Does not look at signatures. * @param msg: the message to inspect. * @param dp: delegation point with zone name to look for. * @param type: type of message. * @param dclass: class of query. * @return true if message is certain to be from zone in dp->name. * false if not sure (empty msg), or not from the zone. */ int iter_msg_from_zone(struct dns_msg* msg, struct delegpt* dp, enum response_type type, uint16_t dclass); /** * Check if two replies are equal * For fallback procedures * @param p: reply one. The reply has rrset data pointers in region. * Does not check rrset-IDs * @param q: reply two * @param region: scratch buffer. * @return if one and two are equal. */ int reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region); /** * Remove unused bits from the reply if possible. * So that caps-for-id (0x20) fallback is more likely to be successful. * This removes like, the additional section, and NS record in the authority * section if those records are gratuitous (not for a referral). * @param rep: the reply to strip stuff out of. */ void caps_strip_reply(struct reply_info* rep); /** * see if reply has a 'useful' rcode for capsforid comparison, so * not SERVFAIL or REFUSED, and thus NOERROR or NXDOMAIN. * @param rep: reply to check. * @return true if the rcode is a bad type of message. */ int caps_failed_rcode(struct reply_info* rep); /** * Store parent-side rrset in separate rrset cache entries for later * last-resort * lookups in case the child-side versions of this information * fails. * @param env: environment with cache, time, ... * @param rrset: the rrset to store (copied). * Failure to store is logged, but otherwise ignored. */ void iter_store_parentside_rrset(struct module_env* env, struct ub_packed_rrset_key* rrset); /** * Store parent-side NS records from a referral message * @param env: environment with cache, time, ... * @param rep: response with NS rrset. * Failure to store is logged, but otherwise ignored. */ void iter_store_parentside_NS(struct module_env* env, struct reply_info* rep); /** * Store parent-side negative element, the parentside rrset does not exist, * creates an rrset with empty rdata in the rrset cache with PARENTSIDE flag. * @param env: environment with cache, time, ... * @param qinfo: the identity of the rrset that is missing. * @param rep: delegation response or answer response, to glean TTL from. * (malloc) failure is logged but otherwise ignored. */ void iter_store_parentside_neg(struct module_env* env, struct query_info* qinfo, struct reply_info* rep); /** * Add parent NS record if that exists in the cache. This is both new * information and acts like a timeout throttle on retries. * @param env: query env with rrset cache and time. * @param dp: delegation point to store result in. Also this dp is used to * see which NS name is needed. * @param region: region to alloc result in. * @param qinfo: pertinent information, the qclass. * @return false on malloc failure. * if true, the routine worked and if such cached information * existed dp->has_parent_side_NS is set true. */ int iter_lookup_parent_NS_from_cache(struct module_env* env, struct delegpt* dp, struct regional* region, struct query_info* qinfo); /** * Add parent-side glue if that exists in the cache. This is both new * information and acts like a timeout throttle on retries to fetch them. * @param env: query env with rrset cache and time. * @param dp: delegation point to store result in. Also this dp is used to * see which NS name is needed. * @param region: region to alloc result in. * @param qinfo: pertinent information, the qclass. * @return: true, it worked, no malloc failures, and new addresses (lame) * have been added, giving extra options as query targets. */ int iter_lookup_parent_glue_from_cache(struct module_env* env, struct delegpt* dp, struct regional* region, struct query_info* qinfo); /** * Lookup next root-hint or root-forward entry. * @param hints: the hints. * @param fwd: the forwards. * @param c: the class to start searching at. 0 means find first one. * @return false if no classes found, true if found and returned in c. */ int iter_get_next_root(struct iter_hints* hints, struct iter_forwards* fwd, uint16_t* c); /** * Remove DS records that are inappropriate before they are cached. * @param msg: the response to scrub. * @param ns: RRSET that is the NS record for the referral. * if NULL, then all DS records are removed from the authority section. * @param z: zone name that the response is from. */ void iter_scrub_ds(struct dns_msg* msg, struct ub_packed_rrset_key* ns, uint8_t* z); /** * Prepare an NXDOMAIN message to be used for a subdomain answer by removing all * RRs from the ANSWER section. * @param msg: the response to scrub. */ void iter_scrub_nxdomain(struct dns_msg* msg); /** * Remove query attempts from all available ips. For 0x20. * @param dp: delegpt. * @param d: decrease. */ void iter_dec_attempts(struct delegpt* dp, int d); /** * Add retry counts from older delegpt to newer delegpt. * Does not waste time on timeout'd (or other failing) addresses. * @param dp: new delegationpoint. * @param old: old delegationpoint. */ void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old); /** * See if a DS response (type ANSWER) is too low: a nodata answer with * a SOA record in the authority section at-or-below the qchase.qname. * Also returns true if we are not sure (i.e. empty message, CNAME nosig). * @param msg: the response. * @param dp: the dp name is used to check if the RRSIG gives a clue that * it was originated from the correct nameserver. * @return true if too low. */ int iter_ds_toolow(struct dns_msg* msg, struct delegpt* dp); /** * See if delegpt can go down a step to the qname or not * @param qinfo: the query name looked up. * @param dp: checked if the name can go lower to the qname * @return true if can go down, false if that would not be possible. * the current response seems to be the one and only, best possible, response. */ int iter_dp_cangodown(struct query_info* qinfo, struct delegpt* dp); /** * Lookup if no_cache is set in stub or fwd. * @param qstate: query state with env with hints and fwds. * @param qinf: query name to lookup for. * @return true if no_cache is set in stub or fwd. */ int iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf); #endif /* ITERATOR_ITER_UTILS_H */ unbound-1.13.1/iterator/iter_delegpt.h0000644000175000017500000003613314010434640017356 0ustar wouterwouter/* * iterator/iter_delegpt.h - delegation point with NS and address information. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file implements the Delegation Point. It contains a list of name servers * and their addresses if known. */ #ifndef ITERATOR_ITER_DELEGPT_H #define ITERATOR_ITER_DELEGPT_H #include "util/log.h" struct regional; struct delegpt_ns; struct delegpt_addr; struct dns_msg; struct ub_packed_rrset_key; struct msgreply_entry; /** * Delegation Point. * For a domain name, the NS rrset, and the A and AAAA records for those. */ struct delegpt { /** the domain name of the delegation point. */ uint8_t* name; /** length of the delegation point name */ size_t namelen; /** number of labels in delegation point */ int namelabs; /** the nameservers, names from the NS RRset rdata. */ struct delegpt_ns* nslist; /** the target addresses for delegation */ struct delegpt_addr* target_list; /** the list of usable targets; subset of target_list * the items in this list are not part of the result list. */ struct delegpt_addr* usable_list; /** the list of returned targets; subset of target_list */ struct delegpt_addr* result_list; /** if true, the NS RRset was bogus. All info is bad. */ int bogus; /** if true, the parent-side NS record has been applied: * its names have been added and their addresses can follow later. * Also true if the delegationpoint was created from a delegation * message and thus contains the parent-side-info already. */ uint8_t has_parent_side_NS; /** for assertions on type of delegpt */ uint8_t dp_type_mlc; /** use SSL for upstream query */ uint8_t ssl_upstream; /** delegpt from authoritative zone that is locally hosted */ uint8_t auth_dp; /*** no cache */ int no_cache; }; /** * Nameservers for a delegation point. */ struct delegpt_ns { /** next in list */ struct delegpt_ns* next; /** name of nameserver */ uint8_t* name; /** length of name */ size_t namelen; /** * If the name has been resolved. false if not queried for yet. * true if the A, AAAA queries have been generated. * marked true if those queries fail. * and marked true if got4 and got6 are both true. */ int resolved; /** if the ipv4 address is in the delegpt, 0=not, 1=yes 2=negative, * negative means it was done, but no content. */ uint8_t got4; /** if the ipv6 address is in the delegpt, 0=not, 1=yes 2=negative */ uint8_t got6; /** * If the name is parent-side only and thus dispreferred. * Its addresses become dispreferred as well */ uint8_t lame; /** if the parent-side ipv4 address has been looked up (last resort). * Also enabled if a parent-side cache entry exists, or a parent-side * negative-cache entry exists. */ uint8_t done_pside4; /** if the parent-side ipv6 address has been looked up (last resort). * Also enabled if a parent-side cache entry exists, or a parent-side * negative-cache entry exists. */ uint8_t done_pside6; }; /** * Address of target nameserver in delegation point. */ struct delegpt_addr { /** next delegation point in results */ struct delegpt_addr* next_result; /** next delegation point in usable list */ struct delegpt_addr* next_usable; /** next delegation point in all targets list */ struct delegpt_addr* next_target; /** delegation point address */ struct sockaddr_storage addr; /** length of addr */ socklen_t addrlen; /** number of attempts for this addr */ int attempts; /** rtt stored here in the selection algorithm */ int sel_rtt; /** if true, the A or AAAA RR was bogus, so this address is bad. * Also check the dp->bogus to see if everything is bogus. */ uint8_t bogus; /** if true, this address is dispreferred: it is a lame IP address */ uint8_t lame; /** if the address is dnsseclame, but this cannot be cached, this * option is useful to mark the address dnsseclame. * This value is not copied in addr-copy and dp-copy. */ uint8_t dnsseclame; /** the TLS authentication name, (if not NULL) to use. */ char* tls_auth_name; }; /** * Create new delegation point. * @param regional: where to allocate it. * @return new delegation point or NULL on error. */ struct delegpt* delegpt_create(struct regional* regional); /** * Create a copy of a delegation point. * @param dp: delegation point to copy. * @param regional: where to allocate it. * @return new delegation point or NULL on error. */ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* regional); /** * Set name of delegation point. * @param dp: delegation point. * @param regional: where to allocate the name copy. * @param name: name to use. * @return false on error. */ int delegpt_set_name(struct delegpt* dp, struct regional* regional, uint8_t* name); /** * Add a name to the delegation point. * @param dp: delegation point. * @param regional: where to allocate the info. * @param name: domain name in wire format. * @param lame: name is lame, disprefer it. * @return false on error. */ int delegpt_add_ns(struct delegpt* dp, struct regional* regional, uint8_t* name, uint8_t lame); /** * Add NS rrset; calls add_ns repeatedly. * @param dp: delegation point. * @param regional: where to allocate the info. * @param ns_rrset: NS rrset. * @param lame: rrset is lame, disprefer it. * @return 0 on alloc error. */ int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* regional, struct ub_packed_rrset_key* ns_rrset, uint8_t lame); /** * Add target address to the delegation point. * @param dp: delegation point. * @param regional: where to allocate the info. * @param name: name for which target was found (must be in nslist). * This name is marked resolved. * @param namelen: length of name. * @param addr: the address. * @param addrlen: the length of addr. * @param bogus: security status for the address, pass true if bogus. * @param lame: address is lame. * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_target(struct delegpt* dp, struct regional* regional, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, int* additions); /** * Add A RRset to delegpt. * @param dp: delegation point. * @param regional: where to allocate the info. * @param rrset: RRset A to add. * @param lame: rrset is lame, disprefer it. * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional, struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add AAAA RRset to delegpt. * @param dp: delegation point. * @param regional: where to allocate the info. * @param rrset: RRset AAAA to add. * @param lame: rrset is lame, disprefer it. * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional, struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add any RRset to delegpt. * Does not check for duplicates added. * @param dp: delegation point. * @param regional: where to allocate the info. * @param rrset: RRset to add, NS, A, AAAA. * @param lame: rrset is lame, disprefer it. * @param additions: will be set to 1 if a new address is added * @return 0 on alloc error. */ int delegpt_add_rrset(struct delegpt* dp, struct regional* regional, struct ub_packed_rrset_key* rrset, uint8_t lame, int* additions); /** * Add address to the delegation point. No servername is associated or checked. * @param dp: delegation point. * @param regional: where to allocate the info. * @param addr: the address. * @param addrlen: the length of addr. * @param bogus: if address is bogus. * @param lame: if address is lame. * @param tls_auth_name: TLS authentication name (or NULL). * @param additions: will be set to 1 if a new address is added * @return false on error. */ int delegpt_add_addr(struct delegpt* dp, struct regional* regional, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name, int* additions); /** * Find NS record in name list of delegation point. * @param dp: delegation point. * @param name: name of nameserver to look for, uncompressed wireformat. * @param namelen: length of name. * @return the ns structure or NULL if not found. */ struct delegpt_ns* delegpt_find_ns(struct delegpt* dp, uint8_t* name, size_t namelen); /** * Find address record in total list of delegation point. * @param dp: delegation point. * @param addr: address * @param addrlen: length of addr * @return the addr structure or NULL if not found. */ struct delegpt_addr* delegpt_find_addr(struct delegpt* dp, struct sockaddr_storage* addr, socklen_t addrlen); /** * Print the delegation point to the log. For debugging. * @param v: verbosity value that is needed to emit to log. * @param dp: delegation point. */ void delegpt_log(enum verbosity_value v, struct delegpt* dp); /** count NS and number missing for logging */ void delegpt_count_ns(struct delegpt* dp, size_t* numns, size_t* missing); /** count addresses, and number in result and available lists, for logging */ void delegpt_count_addr(struct delegpt* dp, size_t* numaddr, size_t* numres, size_t* numavail); /** * Add all usable targets to the result list. * @param dp: delegation point. */ void delegpt_add_unused_targets(struct delegpt* dp); /** * Count number of missing targets. These are ns names with no resolved flag. * @param dp: delegation point. * @return number of missing targets (or 0). */ size_t delegpt_count_missing_targets(struct delegpt* dp); /** count total number of targets in dp */ size_t delegpt_count_targets(struct delegpt* dp); /** * Create new delegation point from a dns message * * Note that this method does not actually test to see if the message is an * actual referral. It really is just checking to see if it can construct a * delegation point, so the message could be of some other type (some ANSWER * messages, some CNAME messages, generally.) Note that the resulting * DelegationPoint will contain targets for all "relevant" glue (i.e., * address records whose ownernames match the target of one of the NS * records), so if policy dictates that some glue should be discarded beyond * that, discard it before calling this method. Note that this method will * find "glue" in either the ADDITIONAL section or the ANSWER section. * * @param msg: the dns message, referral. * @param regional: where to allocate delegation point. * @return new delegation point or NULL on alloc error, or if the * message was not appropriate. */ struct delegpt* delegpt_from_message(struct dns_msg* msg, struct regional* regional); /** * Mark negative return in delegation point for specific nameserver. * sets the got4 or got6 to negative, updates the ns->resolved. * @param ns: the nameserver in the delegpt. * @param qtype: A or AAAA (host order). */ void delegpt_mark_neg(struct delegpt_ns* ns, uint16_t qtype); /** * Add negative message to delegation point. * @param dp: delegation point. * @param msg: the message added, marks off A or AAAA from an NS entry. */ void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg); /** * Register the fact that there is no ipv6 and thus AAAAs are not going * to be queried for or be useful. * @param dp: the delegation point. Updated to reflect no ipv6. */ void delegpt_no_ipv6(struct delegpt* dp); /** * Register the fact that there is no ipv4 and thus As are not going * to be queried for or be useful. * @param dp: the delegation point. Updated to reflect no ipv4. */ void delegpt_no_ipv4(struct delegpt* dp); /** * create malloced delegation point, with the given name * @param name: uncompressed wireformat of delegpt name. * @return NULL on alloc failure */ struct delegpt* delegpt_create_mlc(uint8_t* name); /** * free malloced delegation point. * @param dp: must have been created with delegpt_create_mlc, free'd. */ void delegpt_free_mlc(struct delegpt* dp); /** * Set name of delegation point. * @param dp: delegation point. malloced. * @param name: name to use. * @return false on error. */ int delegpt_set_name_mlc(struct delegpt* dp, uint8_t* name); /** * add a name to malloced delegation point. * @param dp: must have been created with delegpt_create_mlc. * @param name: the name to add. * @param lame: the name is lame, disprefer. * @return false on error. */ int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame); /** * add an address to a malloced delegation point. * @param dp: must have been created with delegpt_create_mlc. * @param addr: the address. * @param addrlen: the length of addr. * @param bogus: if address is bogus. * @param lame: if address is lame. * @param tls_auth_name: TLS authentication name (or NULL). * @return false on error. */ int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name); /** * Add target address to the delegation point. * @param dp: must have been created with delegpt_create_mlc. * @param name: name for which target was found (must be in nslist). * This name is marked resolved. * @param namelen: length of name. * @param addr: the address. * @param addrlen: the length of addr. * @param bogus: security status for the address, pass true if bogus. * @param lame: address is lame. * @return false on error. */ int delegpt_add_target_mlc(struct delegpt* dp, uint8_t* name, size_t namelen, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus, uint8_t lame); /** get memory in use by dp */ size_t delegpt_get_mem(struct delegpt* dp); #endif /* ITERATOR_ITER_DELEGPT_H */ unbound-1.13.1/.gitattributes0000644000175000017500000000005014010434640015565 0ustar wouterwoutertestdata/*.[0-9] linguist-documentation unbound-1.13.1/doc/0000755000175000017500000000000014010434646013452 5ustar wouterwouterunbound-1.13.1/doc/requirements.txt0000644000175000017500000003557614010434640016750 0ustar wouterwouterRequirements for Recursive Caching Resolver (a.k.a. Treeshrew, Unbound-C) By W.C.A. Wijngaards, NLnet Labs, October 2006. Contents 1. Introduction 2. History 3. Goals 4. Non-Goals 1. Introduction --------------- This is the requirements document for a DNS name server and aims to document the goals and non-goals of the project. The DNS (the Domain Name System) is a global, replicated database that uses a hierarchical structure for queries. Data in the DNS is stored in Resource Record sets (RR sets), and has a time to live (TTL). During this time the data can be cached. It is thus useful to cache data to speed up future lookups. A server that looks up data in the DNS for clients and caches previous answers to speed up processing is called a caching, recursive nameserver. This project aims to develop such a nameserver in modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but a linked into an application) are easily possible. The main components are the Validator that validates the security fingerprints on data sets, the Iterator that sends queries to the hierarchical DNS servers that own the data and the Cache that stores data from previous queries. The networking and query management code then interface with the modules to perform the necessary processing. In Section 2 the origins of the Unbound project are documented. Section 3 lists the goals, while Section 4 lists the explicit non-goals of the project. Section 5 discusses choices made during development. 2. History ---------- The unbound resolver project started by Bill Manning, David Blacka, and Matt Larson (from the University of California and from Verisign), that created a Java based prototype resolver called Unbound. The basic design decisions of clean modules was executed. The Java prototype worked very well, with contributions from Geoff Sisson and Roy Arends from Nominet. Around 2006 the idea came to create a full-fledged C implementation ready for deployed use. NLnet Labs volunteered to write this implementation. 3. Goals -------- o A validating recursive DNS resolver. o Code diversity in the DNS resolver monoculture. o Drop-in replacement for BIND apart from config. o DNSSEC support. o Fully RFC compliant. o High performance * even with validation. o Used as * stub resolver. * full caching name server. * resolver library. o Elegant design of validator, resolver, cache modules. * provide the ability to pick and choose modules. o Robust. o In C, open source: The BSD license. o Highly portable, targets include modern Unix systems, such as *BSD, solaris, linux, and maybe also the windows platform. o Smallest as possible component that does the job. o Stub-zones can be configured (local data or AS112 zones). 4. Non-Goals ------------ o An authoritative name server. o Too many Features. 5. Choices ---------- o rfc2181 discourages duplicates RRs in RRsets. unbound does not create duplicates, but when presented with duplicates on the wire from the authoritative servers, does not perform duplicate removal. It does do some rrsig duplicate removal, in the msgparser, for dnssec qtype rrsig and any, because of special rrsig processing in the msgparser. o The harden-glue feature, when yes all out of zone glue is deleted, when no out of zone glue is used for further resolving, is more complicated than that, see below. Main points: * rfc2182 trust handling is used. * data is let through only in very specific cases * spoofability remains possible. Not all glue is let through (despite the name of the option). Only glue which is present in a delegation, of type A and AAAA, where the name is present in the NS record in the authority section is let through. The glue that is let through is stored in the cache (marked as 'from the additional section'). And will then be used for sending queries to. It will not be present in the reply to the client (if RD is off). A direct query for that name will attempt to get a msg into the message cache. Since A and AAAA queries are not synthesized by the unbound cache, this query will be (eventually) sent to the authoritative server and its answer will be put in the cache, marked as 'from the answer section' and thus remove the 'from the additional section' data, and this record is returned to the client. The message has a TTL smaller or equal to the TTL of the answer RR. If the cache memory is low; the answer RR may be dropped, and a glue RR may be inserted, within the message TTL time, and thus return the spoofed glue to a client. When the message expires, it is refetched and the cached RR is updated with the correct content. The server can be spoofed by getting it to visit a especially prepared domain. This domain then inserts an address for another authoritative server into the cache, when visiting that other domain, this address may then be used to send queries to. And fake answers may be returned. If the other domain is signed by DNSSEC, the fakes will be detected. In summary, the harden glue feature presents a security risk if disabled. Disabling the feature leads to possible better performance as more glue is present for the recursive service to use. The feature is implemented so as to minimise the security risk, while trying to keep this performance gain. o The method by which dnssec-lameness is detected is not secure. DNSSEC lame is when a server has the zone in question, but lacks dnssec data, such as signatures. The method to detect dnssec lameness looks at nonvalidated data from the parent of a zone. This can be used, by spoofing the parent, to create a false sense of dnssec-lameness in the child, or a false sense or dnssec-non-lameness in the child. The first results in the server marked lame, and not used for 900 seconds, and the second will result in a validator failure (SERVFAIL again), when the query is validated later on. Concluding, a spoof of the parent delegation can be used for many cases of denial of service. I.e. a completely different NS set could be returned, or the information withheld. All of these alterations can be caught by the validator if the parent is signed, and result in 900 seconds bogus. The dnssec-lameness detection is used to detect operator failures, before the validator will properly verify the messages. Also for zones for which no chain of trust exists, but a DS is given by the parent, dnssec-lameness detection enables. This delivers dnssec to our clients when possible (for client validators). The following issue needs to be resolved: a server that serves both a parent and child zone, where parent is signed, but child is not. The server must not be marked lame for the parent zone, because the child answer is not signed. Instead of a false positive, we want false negatives; failure to detect dnssec-lameness is less of a problem than marking honest servers lame. dnssec-lameness is a config error and deserves the trouble. So, only messages that identify the zone are used to mark the zone lame. The zone is identified by SOA or NS RRsets in the answer/auth. That includes almost all negative responses and also A, AAAA qtypes. That would be most responses from servers. For referrals, delegations that add a single label can be checked to be from their zone, this covers most delegation-centric zones. So possibly, for complicated setups, with multiple (parent-child) zones on a server, dnssec-lameness detection does not work - no dnssec-lameness is detected. Instead the zone that is dnssec-lame becomes bogus. o authority features. This is a recursive server, and authority features are out of scope. However, some authority features are expected in a recursor. Things like localhost, reverse lookup for 127.0.0.1, or blocking AS112 traffic. Also redirection of domain names with fixed data is needed by service providers. Limited support is added specifically to address this. Adding full authority support, requires much more code, and more complex maintenance. The limited support allows adding some static data (for localhost and so), and to respond with a fixed rcode (NXDOMAIN) for domains (such as AS112). You can put authority data on a separate server, and set the server in unbound.conf as stub for those zones, this allows clients to access data from the server without making unbound authoritative for the zones. o the access control denies queries before any other processing. This denies queries that are not authoritative, or version.bind, or any. And thus prevents cache-snooping (denied hosts cannot make non-recursive queries and get answers from the cache). o If a client makes a query without RD bit, in the case of a returned message from cache which is: answer section: empty auth section: NS record present, no SOA record, no DS record, maybe NSEC or NSEC3 records present. additional: A records or other relevant records. A SOA record would indicate that this was a NODATA answer. A DS records would indicate a referral. Absence of NS record would indicate a NODATA answer as well. Then the receiver does not know whether this was a referral with attempt at no-DS proof) or a nodata answer with attempt at no-data proof. It could be determined by attempting to prove either condition; and looking if only one is valid, but both proofs could be valid, or neither could be valid, which creates doubt. This case is validated by unbound as a 'referral' which ascertains that RRSIGs are OK (and not omitted), but does not check NSEC/NSEC3. o Case preservation Unbound preserves the casing received from authority servers as best as possible. It compresses without case, so case can get lost there. The casing from the query name is used in preference to the casing of the authority server. This is the same as BIND. RFC4343 allows either behaviour. o Denial of service protection If many queries are made, and they are made to names for which the authority servers do not respond, then the requestlist for unbound fills up fast. This results in denial of service for new queries. To combat this the first 50% of the requestlist can run to completion. The last 50% of the requestlist get (200 msec) at least and are replaced by newer queries when older (LIFO). When a new query comes in, and a place in the first 50% is available, this is preferred. Otherwise, it can replace older queries out of the last 50%. Thus, even long queries get a 50% chance to be resolved. And many 'short' one or two round-trip resolves can be done in the last 50% of the list. The timeout can be configured. o EDNS fallback. Is done according to the EDNS RFC (and update draft-00). Unbound assumes EDNS 0 support for the first query. Then it can detect support (if the servers replies) or non-support (on a NOTIMPL or FORMERR). Some middleboxes drop EDNS 0 queries, mainly when forwarding, not when routing packets. To detect this, when timeouts keep happening, as the timeout approached 5-10 seconds, and EDNS status has not been detected yet, a single probe query is sent. This probe has a sub-second timeout, and if the server responds (quickly) without EDNS, this is cached for 15 min. This works very well when detecting an address that you use much - like a forwarder address - which is where the middleboxes need to be detected. Otherwise, it results in a 5 second wait time before EDNS timeout is detected, which is slow but it works at least. It minimizes the chances of a dropped query making a (DNSSEC) EDNS server falsely EDNS-nonsupporting, and thus DNSSEC-bogus, works well with middleboxes, and can detect the occasional authority that drops EDNS. For some boxes it is necessary to probe for every failing query, a reassurance that the DNS server does EDNS does not mean that path can take large DNS answers. o 0x20 backoff. The draft describes to back off to the next server, and go through all servers several times. Unbound goes on get the full list of nameserver addresses, and then makes 3 * number of addresses queries. They are sent to a random server, but no one address more than 4 times. It succeeds if one has 0x20 intact, or else all are equal. Otherwise, servfail is returned to the client. o NXDOMAIN and SOA serial numbers. Unbound keeps TTL values for message formats, and thus rcodes, such as NXDOMAIN. Also it keeps the latest rrsets in the rrset cache. So it will faithfully negative cache for the exact TTL as originally specified for an NXDOMAIN message, but send a newer SOA record if this has been found in the mean time. In point, this could lead to a negative cached NXDOMAIN reply with a SOA RR where the serial number indicates a zone version where this domain is not any longer NXDOMAIN. These situations become consistent once the original TTL expires. If the domain is DNSSEC signed, by the way, then NSEC records are updated more carefully. If one of the NSEC records in an NXDOMAIN is updated from another query, the NXDOMAIN is dropped from the cache, and queried for again, so that its proof can be checked again. o SOA records in negative cached answers for DS queries. The current unbound code uses a negative cache for queries for type DS. This speeds up building chains of trust, and uses NSEC and NSEC3 (optout) information to speed up lookups. When used internally, the bare NSEC(3) information is sufficient, probably picked up from a referral. When answering to clients, a SOA record is needed for the correct message format, a SOA record is picked from the cache (and may not actually match the serial number of the SOA for which the NSEC and NSEC3 records were obtained) if available otherwise network queries are performed to get the data. o Parent and child with different nameserver information. A misconfiguration that sometimes happens is where the parent and child have different NS, glue information. The child is authoritative, and unbound will not trust information from the parent nameservers as the final answer. To help lookups, unbound will however use the parent-side version of the glue as a last resort lookup. This resolves lookups for those misconfigured domains where the servers reported by the parent are the only ones working, and servers reported by the child do not. o Failure of validation and probing. Retries on a validation failure are now 5x to a different nameserver IP (if possible), and then it gives up, for one name, type, class entry in the message cache. If a DNSKEY or DS fails in the chain of trust in the key cache additionally, after the probing, a bad key entry is created that makes the entire zone bogus for 900 seconds. This is a fixed value at this time and is conservative in sending probes. It makes the compound effect of many resolvers less and easier to handle, but penalizes individual resolvers by having less probes and a longer time before fixes are picked up. unbound-1.13.1/doc/unbound-checkconf.8.in0000644000175000017500000000247114010434646017547 0ustar wouterwouter.TH "unbound-checkconf" "8" "Feb 9, 2021" "NLnet Labs" "unbound 1.13.1" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" .\" Copyright (c) 2007, NLnet Labs. All rights reserved. .\" .\" See LICENSE for the license. .\" .\" .SH "NAME" unbound\-checkconf \- Check unbound configuration file for errors. .SH "SYNOPSIS" .B unbound\-checkconf .RB [ \-h ] .RB [ \-f ] .RB [ \-o .IR option ] .RI [ cfgfile ] .SH "DESCRIPTION" .B Unbound\-checkconf checks the configuration file for the \fIunbound\fR(8) DNS resolver for syntax and other errors. The config file syntax is described in \fIunbound.conf\fR(5). .P The available options are: .TP .B \-h Show the version and commandline option help. .TP .B \-f Print full pathname, with chroot applied to it. Use with the \-o option. .TP .B \-o\fI option If given, after checking the config file the value of this option is printed to stdout. For "" (disabled) options an empty line is printed. .TP .I cfgfile The config file to read with settings for unbound. It is checked. If omitted, the config file at the default location is checked. .SH "EXIT CODE" The unbound\-checkconf program exits with status code 1 on error, 0 for a correct config file. .SH "FILES" .TP .I @ub_conf_file@ unbound configuration file. .SH "SEE ALSO" \fIunbound.conf\fR(5), \fIunbound\fR(8). unbound-1.13.1/doc/FEATURES0000644000175000017500000000717014010434640014612 0ustar wouterwouterUnbound Features (C) Copyright 2008, Wouter Wijngaards, NLnet Labs. This document describes the features and RFCs that unbound adheres to, and which ones are decided to be out of scope. Big Features ------------ Recursive service. Caching service. Forwarding and stub zones. Very limited authoritative service. DNSSEC Validation options. EDNS0, NSEC3, IPv6, DNAME, Unknown-RR-types. RSASHA256, GOST, ECDSA, SHA384 DNSSEC algorithms. Details ------- Processing support RFC 1034-1035: as a recursive, caching server. Not authoritative. including CNAMEs, referrals, wildcards, classes, ... AAAA type, and IP6 dual stack support. type ANY queries are supported, class ANY queries are supported. RFC 1123, 6.1 Requirements for DNS of internet hosts. RFC 4033-4035: as a validating caching server (unbound daemon). as a validating stub (libunbound). RFC 1918. RFC 1995, 1996, 2136: not authoritative, so no AXFR, IXFR, NOTIFY or dynamic update services are appropriate. RFC 2181: completely, including the trust model, keeping rrsets together. RFC 2308: TTL directive, and the rest of the RFC too. RFC 2671: EDNS0 support, default advertisement 4Kb size. RFC 2672: DNAME support. RFC 3597: Unknown RR type support. RFC 4343: case insensitive handling of domain names. RFC 4509: SHA256 DS hash. RFC 4592: wildcards. RFC 4697: No DNS Resolution Misbehavior. RFC 5001: DNS Name Server Identifier (NSID) Option RFC 5011: update of trust anchors with timers. RFC 5155: NSEC3, NSEC3PARAM types RFC 5358: reflectors-are-evil: access control list for recursive service. In fact for all DNS service so cache snooping is halted. RFC 5452: forgery resilience. all recommendations followed. RFC 5702: RSASHA256 signature algorithm. RFC 5933: GOST signature algorithm. RFC 6303: default local zones. It is possible to block zones or return an address for localhost. This is a very limited authoritative service. Defaults as in draft. RFC 6604: xNAME RCODE and status bits. RFC 6605: ECDSA signature algorithm, SHA384 DS hash. chroot and drop-root-privileges support, default enabled in config file. AD bit in query can be used to request AD bit in response (w/o using DO bit). CD bit in query can be used to request bogus data. UDP and TCP service is provided downstream. UDP and TCP are used to request from upstream servers. SSL wrapped TCP service can be used upstream and provided downstream. Multiple queries can be made over a TCP stream. No TSIG support at this time. No SIG0 support at this time. No dTLS support at this time. This is not a DNS statistics package, but some operationally useful values are provided via unbound-control stats. TXT RRs from the Chaos class (id.server, hostname.bind, ...) are supported. draft-0x20: implemented, use caps-for-id option to enable use. Also implements bitwise echo of the query to support downstream 0x20. draft-ietf-dnsop-resolver-priming(-00): can prime and can fallback to a safety belt list. draft-ietf-dnsop-dnssec-trust-anchor(-01): DS records can be configured as trust anchors. Also DNSKEYs are allowed, by the way. draft-ietf-dnsext-dnssec-bis-updates: supported. Record type syntax support, extensive, from lib ldns. For these types only syntax and parsing support is needed. RFC 1034-1035: basic RR types. RFC 1183: RP, AFSDB, X25, ISDN, RT RFC 1706: NSAP RFC 2535: KEY, SIG, NXT: treated as unknown data, syntax is parsed (obsolete). 2163: PX AAAA type 1876: LOC type 2782: SRV type 2915: NAPTR type. 2230: KX type. 2538: CERT type. 2672: DNAME type. OPT type 3123: APL 3596: AAAA SSHFP type 4025: IPSECKEY 4033-4035: DS, RRSIG, NSEC, DNSKEY 4701: DHCID 5155: NSEC3, NSEC3PARAM 4408: SPF 6944: DNSKEY algorithm status unbound-1.13.1/doc/ietf67-design-02.odp0000644000175000017500000120741214010434640016751 0ustar wouterwouterPKIga53&¬¨//mimetypeapplication/vnd.oasis.opendocument.presentationPKIga5Configurations2/statusbar/PKIga5'Configurations2/accelerator/current.xmlPKPKIga5Configurations2/floater/PKIga5Configurations2/popupmenu/PKIga5Configurations2/progressbar/PKIga5Configurations2/menubar/PKIga5Configurations2/toolbar/PKIga5Configurations2/images/Bitmaps/PKIga5ÄZ-)PP-Pictures/10000000000001F4000001F3F339BE04.jpgÿØÿàJFIFXXÿÛCÿÛCÿÀóô"ÿÄ ÿÄj !1"AQa#2q$B‘¡ %3R±ÁÑð&4Cbr³áñ'56cdefst¢¤²´(DET‚ƒ’£¥Â7Sguv†¶U„…•¦§µÃÓÿÄÿÄ?!1"AQaq‘¡±ð#2ÁÑ$Bá3Rñbr‚%C’¢DÒÿÚ ?þ²qÿú¯¬4{±ÿS‘Õ† ®z~÷û#ÊCÝŽ}®ï »Ã¹ÃèåÇÆ¾3ÊzMñ/û¤?}E½Ê£õ7áß©ÝFé'ÂÕõFYQž‚‡þŸÔe5ù&%ºÊ-kVÙvo.EÆQ:Æ$µÚW©ê(ˆê+ŸÙþ8›ø¢ùåèŠ~—ÐcöìFJr%uPç¿:ö>WòO–ÿ2áê=®ú»=¯_.õgàŸâ%Ü¿âFŸáó¬;À:+ñ“.5¯Zë²ìS#¹Ïú‘ZcððΡä—Wg†Dî bXfl\µ¤1Op\²‚êÊ‚ÕX7ÁÒ£;탒>‘ß_Ì8¿¾žÞäOÂgâvüEÇnÛ‡ÆÖåæ|2h8]ðY¦Š2°Þ2„fq%¤²G|M¨–?˜úIQMýÓ®«Ò1ñ.ŦA€ôçà“á=«ÀkïnqzƒÖOˆÚ kü¿ª=Š ÕË~úŽ-#x‹ï—¢Ñ¥Ç_HuKVÑ{œ‡âð||)uç!¾Íz{ŠÕü^Yõa‰7VUïõÅ߆ީGè÷Kcf¶5RaXÛWÅ‹`ÆCyÊBon µ.À¼´‚>ÿÌþº½ÒüûêOÁFoÓl ÍŽâ Ùv/Ö"Æ'áÝ7C­ôÇ4ª{•r3œ!‰s¡¢4æ—I} ô33ÓÖ^ˆOÀ>aÒ|á†ÃáÓ¨xä~¸ü53Ôä½U¤³›‡u†Z%.ë«ÐsxXÌ–®ª}–­Eº‡å¿G&30T$¶¯RÕÔ¸ëöÆ“¥²N:eqóîÛåáÞ4$þ³‡Myq’7ñÚµ³¯ñ-“qîwijæW¼[Ni}jÖ÷IÆ«5’ˆgÄÎȪsÆ[—Eé3¿ÝÄzÑœŠÌ䵟 ¹WHäuâϤQ2Çr娈‘ì>¯[ó&1‰ÎÖwÔÇl'îo†,J§áÃã+­¿ Ý6Dº¾ˆ[ôO¦ýÃ0g­m-«:w“Xåxc_Ž.Údù*r…VÖ^=Z©+ŽÕ‹2$FCBC¡Vð š¿ÑÛI3º©KþËOˆØ_'«Q±™?¡ºÃPÂiª1¸øÃÒªúe Jðc sE³ÕÒ_¶X2{p“Þ¾:Ô¬O¨ýSë÷_rŒ/)ëOT«ñ)mĸd³ð颒+´žÖñžÝ—… n*‰ü?#¬Ï x{hÞÖ%’ÚG’ –Y=‡\_;|6g6}8øyþè7Q`ò™g€|MüieõLÊ*’Ú¥âì"Þº2êÈô¾¦#AL¤†ÃeiJ@;k„ã]&ƒðë‰||Qâ÷¹,Þ²õ¯©ÝÅþ"²»†îÝÞ³TüGÒÉŸ7‘VO°‘Vâñk¹P'aâ¾/“5ZÛL}<•¯Ñ>‡|7ÉÀpˆ\<ŸO’SuÇ­pêÑé„öÎÕÅ´È¡°\ÖZX¶b¼Ébs±CÂÝB£8âHà5ø;ë”^á=]êÆ—ô#áW k&é< ¾­ê.kkÁ™MÓ'º§6|ù '§µSUéÓŒ²¯žÏDÞÎĆ¡¾ûg'ÌiÆ>=Çnþêë/âmoÁcn,³Áhb´”°êÿE®z‡Õ†Œâ¢Ò𲝢=AÉrÛªù­Lí+îpœJ,*Q…FjDyVL>ç­S,zF–”(½Á=5c®ÊTa{ºn1û×NÁ¸”VsÆle‚Foá5¼ aÏâÜ?›ž5ÆD­Ì6í ­u.‰çH„nš­ÕGÌGéæ5ñMñ‰•ô«lX^t«¢ý ÂòJŒ!‹«jz»,ÿªüG³+“Ì…"m†;EBÝ}yå3Y*Sók¾â”tlw.Ê/ÿ¹¯ñI“ÝØ_Ýt¯ø’éy<ùN½mwWÓ‰×ÔXõ”ù¼ƒ’lHŠørfòïHzŸyj}n-_Ou¡½\þWaõßáã-À±¬ê˧ǥ¹Å?RéníqLƒ‡hõæ/XóìYDÉñ;)sŒD:—kí Ê0¥–Ú»¾ÃøZwøAÌ~(rF,2l¿Ïë­ó‹èÏÇužuV–YQe©~<97¶Ï¼ˆq‹ïF¯n‚êIìs|«¡7Tóªë+úOÔS—ØÃ–‰]Ùµ‰Å­èUéÚ[h’Û¶ ,JiŸNÒÇ>盨do°$úÃ÷øæ¼¶¼.ú;{•ö9"Ž·$˜³Ä-8«ÏÄxŠ•ë@cÏ&‰eP±2æÝTqN â4yø›s¥}Cfe·N:uÑÚÌͬI63ëk®s,Ï$°¦fîËå²!Èšh**VÕJñjÙnÉ@,"æöWÂÄ3wm6îWKÚëÿKëï'IrE.Ö>>ôÉŠWvL¸µOÄ€¹JWyÓ .8²éRkêgJº„÷Qiº½Ñ̇¥ÍZÄ%ôÿ$­Îk,çc94å‡Îje)Tޱeç¶Sò`¬w#Í%È’KHO×rƒ¡ã?ÙgHâ^µg“f8þxorËîÇb×4ÏÛ²~ÞòLHæC‘àüÆÃ‹1Y.¼Í|fÝÇB”fFÞŒ u>ÿŸº½¿Ëîý¶þAlâY!âÂK½Q鼊á-G·S¬ÈÆÝQ£U‘Q`h¥+sªN‹Ñ¢OHºTTJ”zo‚•)D©J'¬Ü©J%J$ù$’IòNúøëÌo0O€k ®†SŒ_×VgŒÕOR”ëÐgÚuêš%‚áQ.W®ze´UºP¦¸âµ÷&ÉÅ0Œ7˜ûeãx®9A*LPâcH‘MM¹÷ã‡R—C»N2Hp6¤…€ F¸ÎÐQááþ†fV1,c]—VØYÒ&BZi9 ý­Ì)p„Ô4è•ZgEy=Ô„qvO&È&;ÿܸg5¼uµ+G*p'h²j ɼ›ù_³‚ÀäPÊC.p#mÆÙ⒰ʆlë¤6X*ìûY¾=Ðu$ËkFó+Œ{—šUå–(Ÿ&G÷ñ6Õ²Ñ&t`— ÁØÛ%¾)Ö£KŒ#é·D~#bØÚHêž_™à9õû¶³ßý-¤ê…Ëp-ñ©°¸²¶5œ4RÇb3_-]kKgeòV¾ˆÄ:;Ôk «¾ë.UŠäñ:qÜc¸„ b¦Î¼ÛJ¿¯E¶S–*ÊCà[È¡B«Ñ¯ù‹.J“%ï²W Ž|?çpAðKüóè÷L²ˆùF1-\ö³KdÒÊ‘7¢Éf:úª~YŽJ•‡à4_³DHˆy¦HÝ»Ÿ? ]{CÃÏÐþ•ò–\Æ.$ìòÿ.ƒððÛ’œ%Ví‘e+ã[^Ldˆ»àÈpZð«ñë\m9NºÑñ .ÂÑ®§by¦{;»nÒs#¥é•ãµÕ8ì HD—YE«–.X~;Ÿ1]“«|•¨oÑ1j¿ˆ|Ǫv9š¬K8uI‚Cg:µ¬NÚ÷ ‡—Ydð[…!îM¥ŒdG™#ºQ ll¤rÚ¯: œÉ9®E—ÐWtƒ¨ùTœ§#"®s™Rn¥1;+ Çf´òj¾WKaNz‰Í ­Ë”Û-»îæÍ“ô£<“e](Éq¼vPhj(²¨9 e„åUÉ£¯U%nG‹ª̃fÕ"‘p¬¿š8ähòé;„Û®ã§]¿/—‘ó]‡\¦[$…^/oƒð[ù…ʧW» e (2Ïk/2B¯ŽY @‹`O¹ñ eÒì{©NH¹ ¨è¸Ì®j=T¸Qr\ºNQ7fÞÌÁ~3Ò„H”ïÎŒÙp4Ôùî<NÇTQ¹g“« èU彜üZWz¥ŠÛ¼äÙH°È1›×1sAØÙ4ësŒ³iâC²cV²ÚÜ;¨ë¶=Ñ{¼9x¯I-é«î°¼5ΟʗÅ*›#Ç\y»=5UN·65¤K¤½lËŒseç%ÈaÀ–öÞÓ} ·¨ÆqWèrHŠêV/–Ügnd–_4÷×ÙH}¼ªŒ¯ Qéìâ<ˆLzwU*+P¢9õ/Ó#ÝÑGñ?g¯•mx}ðUÀòΫ·O­_[)áåíCÕ!) èEUÊɸ|îEN#œõ[¦5®H8¦3+¿Å ¾ûÒ…L²±çì)b¿%n¾+ØŸ raG[« &C¡­ É,q?†,§"­qBÒ±þ¤»^û„¸X˜îao,Ÿ¬¯Hãè})VéÝ  xî5ÛºqƒÛãr2œ“*³ƒm™fö±l/$TÇ‘ž JȉMKPÔµ¹-P«¢…ï"Rƒò}Ç”„‚c1– î–Ùôã$•{7 Ë›—"¸<„".Ima=•3ê…‰1˜ÑÝI-ú–·O&üêd|ÔŸ< þûëèÇit#ˆF­œa!ÉQìÞÕu–Q$…1¡@]B!@p£<Ö!_Ò|·£Ó1·§³iñŒåRlfMý'•'væ=ôäÊyä|Î-¤gL–C{G’¸ûv¼k¦*=Ì·R¸ÿ&¸äx«ÈNû7#mÉñµ¬c§Y¢¯q;÷"¤¹…ÓØ2ââìÓW̉&Ât¨i«ùöD©n¸ØžÅbK E‚ a!礗Ü/tƒˆÌ‹Ô»ÜÕr¢ª®)G@Ì4¥ïXÔŠÉóeºó¤ 1Øq–ÂV\ J¹%#c§qïÛ¯¼`{¿ÇujÞÚUh·kxEür¬@1F¶")…f<áÎlÆS¼„g*åü³ô£e('ä}D䥨ú*¾<’G‰¶²ú©Ë»Ó*Rë­Šq$rObËp­ˆÝ'Æàî¶ œV]Žy†åmJŒÜLn¿'‰*+‰xÊ»Æ"5QÊPZeQ–^î)$…'¶wÕìË—‘¯TY1£Œ3¥É$ú€é/Å­nRŽÇi*C†B{eÎ-ì•rPñ©ŸËåòÜשᔧ 2ÝE$cnÒ,jHß hÜo¾TùV—–ÖFÍ:‘M†Þ$cØŒì®]Jd?=­›öÔÂõ¦38óUíže®a÷BÔÄkŸATÛ”ô¶\ùÏRGênMŽIyRæâØýR/ RÈš•¦BÛ&SPÞ=ÀââÆm¢¾;ë³eXµÜ›êŒ»›Yþ®ÚwÙ¹bSÕVtóÜnB£HôKnS/D–Ò$Æq¢R¥X VúOLì#QÖ9å“™×dÒó%ÝIŠá¯›uhͤg¡¶àyº¹0–˜H ¸_i¶t­Ñ ?{ì|}~5çžÚfšVXX“!i$1qk›oéÔ’©"„`sœK–Э\“‰+7À¨%IƒS.Ïjœ¥÷\]\Ê[.£Á}Õ-Ö"+ŽDIshÊâ›Øu1nÓ=-µ¶‹Š¡Ø•¶?¿·Mzß~Sïh\a¸Öú•º¤½!©`Kú¸¾¶’µÆãlþN§ZUåä‘•“äò«&ü®3©LåBèX¯fJËï3 Ô©ÇÖúÐä’óƒé (æÃÂí­åÚYfÓkgJ›ÈÅâǤ&<(•ÓIr|®RÔ·—>kÁ '`Ìt6„ ¨¦ä}3çÓÄc®ÿ{äZ϶˜Š9ÞÚBT Xù×c8bcÕÄš)Ò,b%l*O-*Ý”©yÆ©²‡^—"A½rαÙÞ¾Z]qh2cÎd¼Ë­¥ ¬µå5¸0 ꇓÄàÕÃmÏ~w#ÎÛí¾Þçmöí¬jlC!õøúòKzû‹n&™¸1d1&l“ÐÇŸn§œSBDhd¡ Eµ<¥<¥;ìÍÑÈF_+"ï2c¿E¨Lpõ }‰îKS¤ñíö”‡GÕÌ(ÀOOÿ=÷Ü}ü«Õ .¡4ÄÑ ¹ÄgNTÈç õ 9ÁË6\ä¾k›H©o"‰å2ß’›Š[;ˆ¸ä¦ä¼Ñ¥ge Ž#4…¥ ©o%Ç&²ò\ êF63ëYk½¹¿ÇW #o=¸ö7° ùvHK+G)MÛL-{†’I:˜°Än”õì*«Hq(²‰&]£oÆ}ËnÈm¶¬þV¶Ö–,lrõ#v¥”ƒ°ß6^5kz§bòàÁõUQ*&G±fCí%¸ -@›°¤ŸW•»nŽÓ©J #m3çÝ÷ûVD¨„”›…ìŸh9›Ké,C,Ú …ðÀ…;ŽåŠÅé®Ýr\(Õ7,.8ص•Whiá®RÛRòPÚ …'—¾¢µò jû]õ†°åHk“˜Êª.×ê£^-Q\doÝ)ÝiŒ¥s,§·ËŽûí‘VÅ´R˜nÂ’,ˆJ]ƒN.=ŒyªËC ¶¥LÞSJl«Š”[W¨TœRJ+›Rg6o›¹^@«0¯L僻¶ëE€®b£$(¸”%.m¾à¾Ç—žÕV @”—Âs*y‘ˆá Kd’U¶Ùr dkß_œ§(EEV뱡¾Š „¸µª´ÜLô“kR”ÚT”—[iŧmHÊa¬Fs‰¨KE—Am!ÈêqÇ‘ëêЗ™úÕ,‡\ )|‚°7#•N5"lk‡-e4«+JКZX€šâ€ˆ©x— < ®)•8¥)#ñ91éfË’ô»×âÉY®z­–¡6ël¥‰^%¾²ñRŒ‰$m´†ÿgßí÷ó®¢'Îɤärg¯6F+€{9”Áz&;ÍÓœjÆ3Ž™V2cD¶qn¸á°ùŒe<§JÔRVËà-¥%)(OÓí©ÿ?¥^çoÑáãí¿®>vößV!ÓX‡«Qa.<ˆ”ä˜Ie—ûî%²Ìwf•¨¶’BC^±ÈŸ:—ô.|ãæÑÛùg¢íý]Î~£»Ï}¸ðØíï˶ڕр0…G22ã#JÄà‘¹z“–ß9¬;þsùÿ²ßÏ¿ó1ý~uUææ4]‰ß:ß¹;ÃqãY’¡-éÕ²BДÃvRÖ’T°û¤ðØl O•rØqö:öÂ¥´Ê´§·.+ç—-ˆa|”‘ÄÈíôû ýÈÒº•$K·æ`GŸaÔ·sÿbçmïéÝÿÚÌGû™?ùÿÈ S::¤Ã‘*JTëK@R·â ÈØ;~; ^Kd2Ün ßÏÙ¾í¶þþv÷ÛóÒ·ƒ¬ží {òk m[ nNÍ#Éóþø­QJm‰ÎtJœ´ïçÈ §øöü³!0¨ñYaE*-¡)%;€vQ;Ž^}ßüš¥˜åy !A×ßYqô;·Óä¨á¾Þt¨ á|“‡ü÷Öl¦:aÈIQuÕ¡TOt>žJ*ÿD‘Äìv¿^„n¦n}G5,(á sˆl ÀãÀìFÞÿ޲[Žè,¡Ç¦ãÛ* $Ü'ÇÐ?Å?V½ôëØµÈvK…|xžà\Šö)åç—áàéL:|1×\ç~µçl<§Ö¢B® lNÍ„ /t€GÔUîO¸ñªÐ;Å<ü€Ógo`T³²•ù‘°Ûð'U©µ‚¾¹å^ í±(>Û”¶#Ç¿‘¹Õ| ããè ÛÜxý“ùÐ û),øùœƒŸw\yàf©öÎû’Ó¹û„þ¯¿ù¶ÕjþˆÒ èƒý¿à~Ú÷àFþàý¹#s·ðöÿ Ví¿Ûb?¨¿îýúV‡w§í^%;ya¸#úõ{ÿÓïªôÓJ¢ši¦”¯—×Ûtüf·ð¿ú7]ò%ü3/®ç-ù”Ï› dõ7ô ô{å>›Ðü¿Ò˜üÃÖz¯QüßÓ†¿Z]cëõ¿Lºïð«Ò(8åuµwÄ.WÔÜzâê]ŒÈ³q¦p>ŸHÌ¢I¬„Äg£Ù;c%”ÁÜÇâ·…ÚSŽìÙàî$ÕgŽ­Ç/úžŽ'mÆû² ö÷Û¾ÛoûµOÅpãGûš¤íã©_û¶ÿýãg{~còûkx¿´Ÿ~>x¯ÅÏÄïÖÉL·,$ƒøÇ†pè›D]‹¸÷µ–ÜšJ½½Äñ`dBÁÃ…a·uÏâc¬µýcÿ =)Äz§Ô|s§ õs©33üÚv‰ãÅ•”ÊœK…6®žæu†uœÎ¬²ñžf-Ul(©Ÿg!L>¥1~Ïã:À¶Oñƒâ†Dš.šdÙs˜Mb¸OVe˜|¹tÙ6ycZÌ—Yz›"­±«zth»Èn;sŒ„H.ê¾ð‰ñÕÖî£uÖßô3§~èOI¦`™ÄÚû³2¾ŒIÉë2~³.9)NS.ºöºò–™ÂÛ×}MÁîÈÙ³ÇYÂr\CûŽòêiØÍ·Q0Ÿˆ^® jÕ‡!ÙcÕRÍïs z¶Æ+¡Dšš éR¢8”;éJŽòók@ÐQÙÛmH3ãŸÌ=ß/}|yxß[Ž>ˆ;MoË%–Ç—mŽ Ü*kXø Â(„L§ˆÚK-÷õo2Ý—/¬åèZ¾%&t«£?ÍêpßÓ>¤õvÛ§¸?L:uÙ5‘ò¢uS WM¼Ã«¬Çéâ¦ÆÚêÜÂyÆ*ë(gÔ>€1~þ 3¼ë6ê_Dúß„ã½?ëoKcbù øXnE;(Â3 5nYÇòüJÚÒ¶¦×°Ôúë Kªë(-ȃeµ!Ç•ÁŸž>(#ÉÆºYðI×7¡XØaýê·I3¾¤ È2läSà6ý:°Ân2å@†ÛÒdEÅ_¿ƒg?Ó´ë±à R¸†™uIøxÊ):õñ›Ö¯ˆN›KMÿH1þ‰ôß¡”¹ÔHÒÚ¡Íòø¹=Öu’¯™)ˆââ/}uTËé\Q:R£²ëœuœ 9ÇŽþyQ‡§]óÒ¾—ó[ÿýAgjoYKÉÃâ^¦ 7|>ã„Ý]]ñC˜½§TWÑòyÉ*[Çì‚ÜÇ̺%¾šøuë]Ÿ[+º·6Άºq×¾©t~p'Êœ›JÜÂ8wr•%ˆæ,ë$É.I„Èz£aŸP+¦õšîë1‘ŽÜXØË¦NSeˆtκ=M„kl‡ÅT‹k'nd‚¹O5RÀÚÞʼNÿÝÀüùÿaîvãç«îßÀo¶¸þ¬âß 9OÇ Ô“.KղϪ=¬MU”É]X‹Ÿôö³‡â>–#ȵ¸¬Ê«Ga\…‡á6ú%8ØŠè¡FFÙʃßÔ ë÷á^.!Å.ã[•“‰?·^=}j×Á-³o  ÝZÛ†ž"K°§2#<Ä{2¶©”WÑÙoÅc•ß`xoÃŽu##˺OY×;ã'“ˆc>¿Z#â‘“[ÞlŒ¯-ê!WW†Ú‡]èäJ°‘éÒ¥#k‹ñ;ûáK(øÇ±µ5gŒa­Õ– w9M=S˜`1…bV“á2âÀ…wU&žÄnOÄ,Mn2;Ý¡ñFÜ­ø*Ï0úó=8†;–üts g*Ÿkôð:…Ò‰wRò|ù°ãÉKW+ƒ’7*ª"¶6ªˆã‹¯¤6w o»¨þçoÄEõýTÚM¦øŒê´;8îðª¡ÏçÞÜcìN†òäI)•ÁÈëH[B`K‰Kœ’G¨Ô¸?îÏQŸ/.ž¦¼Ö¼gŠÊ/k—KÁÂøÄ÷\7—ž%¤v_Ë¥Uås”ܬ²Ï‹™%[ƒ!娎تýyÔ¿=ƒtS ê;8²ò˨Èéõ‚ÁŸéQyžu$7jhþm!…úJØ«~T¹öNF[ŒÖWÈx0]RPhèÇYsl—4Í:GÕüF‹ ê–UC•!¬RöfC‰å8fH옯(§Ø×ÖØ¶íu¤)4÷0¦Å™iaæq‰<á=d.¯  ½MD ÖTÌzÔ<Ê=tWgÊ‹†±ˆ ˦¡ÇK’$¦»¦md!†œ[q#È“·TFÑÒ<ž—­¹ÏXz},^ô×è®;ÒhùŒFßE6I–XåÒs8Ô²_i‘dÞ=\˜qç¾À[1æMKù’5œ 9õßÀåvëƒ×ïôǼX+¬e?X·â&qXt,áô?“”á¿ø¼ÜÌ—â¯Ô1\RÂÔ«œv®º:Ô½þ€‡¤ ©[ý#sãoF£8¨êKþ¾èYšŽ«a™×JÓÔŒMuÓcØôê¿¢Ë+Êmró 3_Cµq˜§xº¤Û6“ N¨¨ Ü<3žà@9úä÷zW x¥ðƒ‡¹¼h¥’™aMÿîW‰Ä ·ŽÉµÆÙ Dprå"C0oé˼íz£>»®ø‡H“QÚì—§vnýÒåÈDزñ˪Z¶kÚ„–LwX”Ý£:úßC­-”!¶Ô•’›Oê|ì +èÞ=¦%‹=Nê ðÙÒdˑژÈÇ-®ýtF™eÔJ»\† ©–»n©Îç$€yvJ‘þÌþ—+î: Õ ÷ÙY~&OõöÕ߈‘¿RþOrxùÿó &ëöÐøÇºbßöáÒïoBÆÏùµG\æÆÂ:©Ðž¬Þ÷X±™Yö'”Û†\z.7úoM ª[›Ê\r=i°­ù|¹Ê@f/ªhº´¥ÍAÝêÞý†Æ­ýÝÄSñÒs QÁÀÏ0ÿ¥ŽïˆÝÛß\‚èÊ [ rÒjŽ.P®ç¤tƒ©–™ã9U&UEϺ~æ4p§¹iX~6u7¶ÇŠüškºé“ RXjKJCñßJ”ÐZ³z+Ô9Réµs>²5D«wïYv¾$§åÇdTäTÍ©¹¶Ë«/5¬)´ðqÅ!;¥!G™ôSy†}×~¬T!ÕaùÆGˆÓâV+eØí_ÃÁq³Ua}·ÐÓ®Ö˱’ìhS8ILGÙRFã7á ô Èõ¹Ÿöæùÿ>„uõ샑ñ­ðû«‰¥°W˜Ë–¼eƒ•Aí)kÄl ²º%TdµÈ=1H'2*…(|éÿRËçuQ‹(1*bôï?µÄZ”Ô§ž`VTÖÙ®Î`u¶Óݦº—d¸Ò[d(9ÉD'—cý~ʬebMÆ«¤]DÉQ‹â9/'bEƒò"cw9 "¢5>M*2šˆ˜Ó“?É<’âyºMV»…üRT2àmÛn®fU͸NÁ·gâѲG‘ÅN¥Dý¶üµÇêòH9gLz+ÐØMIGRqü¿¬Ë±µB”ÜÜRMî™{uiÉ„µ‘ªÚ]|®ányžÒc)ÅóH yxgÈ`ý}1ŽúñÉv"¶ohdv[׈i‹ú˘x„PÁhuFvh™ÓDze`y³#´^õç(ƒ+,É©ð¨V}'éöJæ/–d.]¸ÆI"E|˜ðò+|z•‰.§• 5+ÕMjDàÌ•Æ Kk(ê¹Æ~î-+¦ÍWËg;Íêñg$9%Ö½$+*ÙóÓc6Û‚C€Dl!—Km©·J”àRvWÉÓrX¿MzÇÑ)H_Qïs,î·ÇRæäðú‰ví…ÝoKR+›‰fã“¥÷ÜÔÈ(W{OS+WR>*p:å_T1:áÇ bö±V°NÄóSECîAßP€1·žãmú÷ÖᾺhî[Ú Œ«dò 1Is5ëÅ= Òƒb º%×*éæ3(5¼gYöK[’Rà˜mþ_kS7"•ó»)T”Øü Ãõ“¤Å‹2[²,gº˜5ñÙhâyå†Û Ý êi¿é­ælÝJ Ûã°²†n±ér Í~GŠ3,XU91¦Çq…HŒ’Ì¦Ú r#í=ÚK…HÖ—•ÝÖt÷­°sLªGË1\—§ Å›½}·Uí-òîScÍ!ÏLl`ÉZ⇣­¤rZvÔnSêþG",ˆ1³«©f51¥6¦$&–Ò¶C¯»À—3cÃP‡•–Ÿmd}{èÛm²7ßrz¯Â½>Õ?µÜ§=‹*Þm¥1qE[NN`2'21Gæáa{ÖxöK‰ã9ñÛˆõõE»ÑZqnµË(LË[ º°…¸†”éBV¤¥JHIÃNÅ:–Õ¯N¬:{ª¨µne+˜ÄG—$¸åœø!M)ä´¥¿)¸IRZ $>ðh(§êT¿KFÝ4éèü0Ü\UD]qRŠnGðã“ÑÖ6^Ÿ=Þ " ý©Êlå5?Ф)žÊGÝKûꟈøæ½/=­¹B]Û†]O €y“ƶf2pÎdq…À:ÎÝ1бž£å/\ãÐ3l^9 72Óáv0¸qE’ê2Ýlœ«>µ ˆ·Xä‡c+õ‰W *þ¬ÝÊr£"•E‹ÓŒŠøcõ_3qwˆT‰NÀ¬¹±«1“Š›9š J\ˆèq—œÝ+HV¶æCWÕ¾–×cN­ç¨‘e}“ŸM!£ÿµ™4VYw[@bsÖSTÀ‹¹t¦:âZâ³®D²kÓŒ3¤¬!äfðo1úKzSôÉ©cºDÛ ™J-öÛ®0â"CùöäKEJäqÝŽ½zöwùwþ†¼>×6á.ÚD]mo)æîa‹-¹+VI§B‘“ªƒ˜M}k”È®Í1<]uŒŽE)éjyĽt¬Fy¤4ÒP[u/™ KŠRÐ[â’€­þ›ùVHþ<¼a,ÅjWϲʜyâë®5阱nB×)°„«¸ëE€Ò¸¡\% ¼êy «=4?…6u·ñ‰]¬¾¤ Üéç·Ž¥cGÏþFöÿ¯ç©áç×ã_Iå”%ñÖAŽæ$òö¡´bÛäÈçµ“ÚØôÆÉ›dOb¸ÅµûZ˜ísqֈθ¶[t½:;àymTTNU•dëm-*\f_SiR””<”¥JØ>Ä€OÜ}µÛÔ™1ô%„D•`ʸ©K˜N÷ >¥!;”Gˆ'ïocõðPÔeleÉ¢¹ŒûÌ»m½ˆòµ¼®#}ürVÉþ:VC¾˜RÑ3{Ø*Ÿy=1Ö³aÜL[°•2cD´ä ¸—Ë®¡EÖQ-([í´Ê‚Uô«}JzÅüÏÐðOAêûœ•Ë—{µÃìí·Õ¾ûý¶ûë^n[V"†$}Ëñ_&j T 0ã”-î-ÃÛBwÝCÈm¼¶ßßâð8úÉÒª1#óê׵Ш,6uϘéÝY’%©©pc„$¦S’¥ QÙh86¹{üíª¦J\fÚZP\‘’ P<®*PÛü_°ö'Üë`ÞÆ£Ç³ó‡ó}\³³þy þTéZ$&àŒyvWËÄ“ßÖ¯J’ãki†>ñ_¥”! ¶>·P[ À¨ïöÕ¡9eË[H=)cŸ‚÷¸ÙÏ~ÙOÕ¹¶ñç}$ÌÖ$,ñh´üu(ƒ²¥¤¨ìvm·ü}ÏÛXàn¥Lâ®Ñœ—}"Ê[,÷xø‚ŽçÏ/ò QÝY%@~¯Ÿ\/B‚|{ï÷ß^£`óÇóFÿÖ5âví‘çu'mâ;}Ç:UÉñÿwwÀñ¹«ÅGtø÷VÞçð¶ú)Dvÿñûïì~Ú¤û£þ?ù?Ôjàû‡öiZñù}ú×£üçûÚ÷M4¥4ÓM)M4ÓJV¨r<0fƒùæ7ü œ`ä#3ë\págòãt*¹|ãôwç?̽kå¿2þoÜõ?Fµœ»ªýÃ2ÌOÎz…ÓÌc5É^)±ìŸ'Ç*2K·¤(Ã?£µ¶’ر–¹. *‚Ùõ/ŸHÚœsõzù ÔúªŒ/À?ìq¶þÈÃï··ß_0×t›§}sÆ?º«õf†›!Ì£õKªÝ8¨Èn¡D•u€á½ém4îœ ZÊCk›7[bû¹SNÕ=ÔY¯Ö¼§–†Â²N0¾»œ~çåç_»þ ¼E–+KKG¹SŠZ ¸–Hà0p»6½y‘¹ó•ŽÀÓÜbÀb“õ{©}HéN`UKêæo€aU––D¥‘Ÿäý9÷ q[LÖ®þDv¤Ocš\›“Ñ’´¸¥4’Ùò ‹¦Åì²l¦î‚³ ‡T»KkûÛ èØÜj^Ú^]„û9Î ÖëC+Kª•!ïL[RV\R U¯Ço„ªÚߊ.³7ñ CUÔ cà7á>% 6k]îg¬´W]KÉã@³eöZ¶ÊfÖÁ‡alÒ8Å@ˆ‰ hñÔu…„Ïî>uî‚d¹65Ø.3ñÓ|^tÇW%é8f Ô,ŠƒlÉp­RK=TUòX ²Ø;6hÜ ï•õ¸Ç¥y!þ,šxn¯VÆg/ ã—¼<Ú™øÛÁ >R`„l¶¯°ñ¬÷gÌ~¿µ~™oØñ >Rbï…^_´›êF¶Ÿ…Ä"^í/™›;ƒxšúã¿Äï›·^'qApÕ]ý­êè&×ÎE~Q\ãmÝUZ*½KLkÈ.­´YC•Æs) ’ØYZýRºY‘eù!Œg5ÖuFrœn“!¢Ÿ“Õ¦2ÄqóºÈR]²éV´Ç_¬hzGCv–´¤üÐÛë|GáããÛ)ÇVãWøç_~0ò GY­jÞª¯¯} ’¶e°ÓÉØoÉ\Óù5Â:QÑîtu§tõÕÙëQè}düª²ûoöü†¸åWNpޱÛt!êm%FAw,¸é­Të˜Q¥MÄpÌ/¦5–˜ØÇ¤ÈB£ÚÚÂVIêk×oÙ%ZÖØVFw'a¾ä |óò¯MǹØmímÚàq;»8ùò:Bc³°í$…U˜I&*Äe¹Ä8‰£oÑìžã£®jnagCST»È,ÊÈåÀ‡VÓæ7¢#NÙGU„¹Î5½”“%ùN!–RRs®ìiiéìí2Õµ´5ð¥K¸°¸‘-T:èí•Ì“c&aDF!²ÊV¹.ÉZYCaEÅ ÇæPò+ÌËàáÇ#É]zUí½÷ÂÄ»9ry.DÙIÎ1–•>B׺œ~jD·]$—yNîJ·?f|X'ŸÃ'^Ѱ<ºQž ·ýƒ›©§¦{Ø©÷iýë¼|dÍôÉ„ƒ‚ÙqXƒ’ý®É„2àl[¨Û~Ûx ï1$×ͯ. ñ$ÖJ†Ä˜rb8Ó°¤@~:]ŒüwZ݇";Iq—*il©%¡[j;µÆ®é`ZâVÖ¸ôĺºÛ ~L)”òP‰.°òáI®*†êQ-§št²¢„:•ýhVÚ‡KÝ!éâ}¶é¾=½¿Ú¥xöÿ6¸ïÁB~ºF6²ÿØl?íÓ"û Nìù×ö¯z^º°ƒ– ]pë«Æ}ò† 8r,kâ¯íŒNw5ñ5ô5¾9l«„ãöTö*«º›Sz*%C”¨@Ù°®µ³Ú8q“.,®2Û o¼€è‡iH½·©aJöI[µûÚè²a9u-‚]K¶±Z&k Km—•^¹iJCN QOÍŸ )ã/â_À¾)z¨¯oxô>NÞäíï÷Õ]8HŸjÛʰ¾‡nv÷Ú³%ÛÏßmÿ†úc¯ ?~õ狉4‘p© ( ýäÖì8ˆEô¡ÓmØ›U]ñ€íå_J»mµ}•ë†òYU³'À«rT4ÝH©Šû,Η­r½‰GjSÍ ÇmçCªæ¤{imA].š5ÅL)¶Ö& 2¢G•ch#; Ä©nIK²§>ñf [á†ÝY´¨œ²$ïñ…Ó5ìú«â<ºðºvßZžWîÿhÙÿ>®Ç˜ÏÈÖ¤â.‘_IÊBmx•µšŒžÚÌÖ*doú×ÚŽ1·a|ëèËËZzåOÈì*«*’ô6W.æLH&T–ãÁiOM(`="c¬³…¹!m¶Ðî) åYH­‡_:e³ðãUÄ‹"MŒ›jxQÛS²Ÿšì˜j3,¥N>ãÄ4†Ò¥8x§ùÇâá<ú%`6ßý¶ôÐþ>Ùî=þ}tε]ꪞæƒÏ·ý¯Îýú€ggOÞ»ÉxÉ=ü\µ"ÒÆ ¥lœ¹”Þ‚à«ìË‚7í·•oÍXÔ7TÕ«3kÓH 7`ÕŠ$GEZkHjcr“0Le%äH Ã8w1ØÎKŠdõ¦~#wE}RÓÎÇ2±ùð, µ!›Ì©È q–ÞIW5¶¢•ýaÂ’•kå¬ù‘aÐχ¬ZRÔš<Ï"èv/“´Pܺ 5‘¦Ê¯AÆŸ"¾,gÛ'ƒ­­M+_¤õµ éÆWÕxøvqÈ™?Ãâ,®!ѲÕt8¶psXx´[ÄEˆ–™0PÛ·êm) ¡eD´Ÿ¿0?Zñ\qw·c4ÁO†"neÄÌ¢%#O-9q«=®c§DŸkPe˜vE"Ò63ã·R«¤”\3Ii]=ør•º¯n®-§TP[äøúÔÚ› *B“¤<Ÿ•‘M ƒ}HÊb´ …Dk*ç/e­ó¸M:©ÈC<)uª%a@Ÿ™3 z“¥ÙD§àP*%/Ï1yMUFj7Ω+°ÐMˆŽ”zõ¸®‹=¹{®ú‰)KWu[éññúzˆt3=¨‰9¯éwO¯žÈe±qqgšÛ†r†'Î õS›³fÆS2Xã¨-ÇiBY\të¾Ã×Ïßò=ø"²ÜRâ6’'‚e¦¹nt»è0¤vRŸgʆæè½#µÙÕË£íç§R·m ½ùu­ÝÊ‹.E|'_Œ‹GáFSbs°Ø_ó·#2§–ÊKm—#šw®|ú˜.×7g2¾+³§· ©ŸŽË’ì–ÚÜj,¿²žš¦›um³wв‘Å'n+’§ˆ~˜+aôà]ENÿ÷]Çí¬¾±§•ßE¿àõv‘_ý§¹ÿN§‡ŸîGé^÷¼eKÇ©ö{¨`]ÏlH–­¶Ù‡´‚-uûY•0 ».êLuÍ)Žü‹7c± µ:òcºì˜Jœ¶Ûh,‚^Z­@¹/ECòÝe˜Œ0ó²^’¤7˜ì´¥¾ãî9³he¶’¥:·B[¨ñ8ÿ_’Ò|Œ¿óœkßÿΚo9àßÍãŠä£úé¦hqæqôýë³NÂ[¤ ?Úƒgvi Ð*|òF?îjÙaȉ*$Y0^"†zñVÛ±žŒâBØv;nÓŒ­²Ò›% A'c¾¬VÍ«°Š™2¡M„]Ò^®y‡ã˜yMIl9–‹­¾‡y óCÉRVÒxêÝ4tï†%ꪎ5Åèg̪øxÊfW8¦f2¬ð2ó{¥Æ;ù-‹>Ú“å e§–âTŠT¤FúŸŽ>5Í®Ê,NÈ0öSÝ0VÝ´.và XoЪù×ЕW˜Ý¤©ñé­j'ˆîÖL×M‡%øïQ¼Æã-KBÂG'íîù5œÜšÅX¿ ¹•hÔf$IЇY3Û†êÔˆî¾Ðþp˜ëq K+pvÔ¤($î“·“AO‰_ôeìrX.¼ô¬rZ¡²†UeQ'\·LÕ6e–åÆjj^{šÒûŠs*'[E`ÿ¯L­¼œÿæ¶G÷ýÏîÓÇË÷ÇŸßÎGs'e$Ž0þÒ¶‚JbK~xe$‘=pXcP¤»*½©±"=&"'ÉnJáGuÖS1öØ 2Õ¥þ¹Ô4• ¾Z$—<¾5Í%YŠ-¬«k̇Ba‹ Q£ÞIâB’V´òHÝQÉ HѲ¿Súx ¬×ûbÀþ?ëûµ‡¢·#Î:†/b1= ÐÑÁjkhyëfV=6Rã%ÔÂåJqKSÍñ^í'êFÌ~çãŠÛ\I­ãDBþÒ MD…ÀµK¢í€Nq”P;ô“°5ÔfJƒ+²g¿<6Ò…<ü·j2µ¡(.8ñí$)Å!)ä|­IÛÉ^Ë“,g$L}ˆñZG'Ÿ’ãmGm³°*uÇJ[J n­‚· ؀Ꮎü¾…s’âžqìÄK®kqˆ9 Pâ­J>TLvÙDùØnÙs-Ï·Àª%¡.VÌ·“&dwS2]¬ª\˜L>ƒô¸ß¨=ÞÒÁJÔÚwm´ûû>5Ñ*Pv൑?Ýu#FªÇ•N’Hß°:Vñ ml¸H—TIJ¦äÄ}—"„7¿"‡ZWi)oÏ íìy«u¶V 8º¹f2ÛŠCŠ‚üwÛC§Ê’®Á)KŠ÷ÙCu¸ÜkŒß2ˆ} "ÔÚY`ʘôÃÞR£Ú%´£d4'3®òPÈ“áGyœ™Çmç®– ú¼ìÈj#ie¾åkŒ¦ ®ÛA)0—ÜmìÇdîvÓÞŸ:žÖÃ$ƺb!%Á9Ôd’ cÿ§Taˆmô·ŠïÓ¢YUË‘%ˆs`ȇ«j4ˆï<Êà;èiEi ý¯öT q¬€ì3)LXõa”¼¦BÛõ":—Á)¿ð¡‚à) ?«æ6÷ñ®tºÈ4Îôýú¶aåIjµ×B¹æÖ8ìŸP¤€§÷u “Ée\\Ýcbu:Ðÿo3ã‹Ãóÿñ'|oü7Ô®É3T71é$®—@à‚@ÜgIñÆvÎÖ·c!öqÆRû¡ßNÚÔ€ó½´ò{²•}kà”çá;x>O» Ù}Æ[ u¶Úî© æò÷ !¾cêu[ Hæ|ñÖ»f7ɱc·°½óøo ½2Q»tß–EN©Ni[2%8†ázõÊFÙ>ŸêØßq†š[’Ól¡$¸·ŠÒSÈV¥Ž oãÏ‚uYR8r*O<ŠŽÜvá¾ûí·>wöÛòñ¨ oCh?Çþ]”_û_ùª¿÷c¥kWm—6}K xwÖ²Y[N6…²¶ÖÒ’’Úš)SjI'‰B8”Ÿ±>ãñ׌¸Ë‰Rš[kH[‰Ql¥I IĨ¤lá`ùßßÏ´]ŠZÁÿyÇÕº!´YCÿXŸë|ùþ½(­žYÀí¦¯M”àmçåÒ¥ÐY+q)R РJT Ò¥ ÓÜØùO#¾ÞGÛUsk¹Ã’;œ9ðñχ·.;ráößÛú‹„6±·?ŒˆÙj½¿¾ÄíÿÉ oÿÕ‰Ûüÿê4 l€qÕ±ó#ô¬õ¼ÊBãiZЕ- Z÷ÿ*ò ÆÛûªÖ¤$JJARR9'p”Áú‰ÜᄀÃ-¼›G@Rûζ•(yBoõAÝ ËéÛr~ûù¼áRâCR÷+.CR‰òJ·Ûsùýÿ~”Ôzãnï¸ßÏ¡ùTšÊ*Q É'`6c¾à¼ýÆŸNÛÿoÿGÃÛoËoËí«¿ÜïäÜÿ(ÕÑû÷ù=+]øòûûõª‘ÄÁ6#Ûoa±·¾ÿÃDñòAÎßÕùl<ùØûŸ¶¬Ç2Øÿ‚ý£¢œÉÉ)“Y9O!UŽ·jÒ!Ô4ñ’Àôê–·Úßû~C|zíñ¯Ê]ÇÀ.m.½¢ÎW‚><¶Ó„ybñ;ùàárJ¯Ìr'â”,rÚÉg#Ê1¼ë£TË~³N›5Ñ‹ L Ÿ»…Ò¨ŠçOK¦É¢K‰ÇqN¯Éâ-´Š}ÐŽúC!®ãáK_•ÇÂf+aiŠav=<±ÀX½ bîõl\~Ó"™ë í/,ì¤L¶²uàËR§ËàC-” Zø¶êÆgÒ½Â$WF±È:ïÑ\ÍvU¨³ixÞmšB¤Èa•ºÈbcµï¸ˆ“”¨Žò[YNÍñYÔLŸ¤ßgêVôÙ^€äöPQe«:ö‚ã.T¸Ê%²ûl©ÖÂþêƒQÓ¾ú°ivýez*à»,[XÄ ¼ˆ­ö#4iuc—%òÝ^'w–Gëþkê+Øÿ0°U‰ý­¸]ãÚɾ˜ìV~."oÄÆ·‘ì™rŽq~"î{¤ý¦é'T(fþS]Õ¨õ©7í`EŽÌåæ\²ÇRÔwLºøÍ6¨ÉÿZu}䃰<[§ø>S€I¶ê¶wtï¢ó­,ú%ÒìŠ-tØû%C‹&]ÔlÝeîãU³eWbJ»wz8ÎŽçJõ²tc®W—8ÄNuÔIÞ¯éYzãEU]sUëké¯jT@yÄ˲D4>—&¨¶©N–ÊšFÛk‹ánø‹£w }TêÌì_K¾%2J|eŒz²ë¤RsØíºdùÊÝ´’¼µ6 0Å~R'×ÂDi“íp 7ÃZív·ãÞq¶6ëŒøuÆwßáÉ7ðù„±²¸xÐsmÊs4ÙÛ›ëU_hQ%±¿öiN.‚ɺå*Û<±}u/£ð¥õâ—®j»˜‹ n–\ôÁêaÇTâ[ä°rEÛ®qpJD¦]‚˜ˆŒ–Ë mÂâÖHä½MøNo8˳|ƒê¶oÓ:n¯VUSu£Å¢Ñ??…QU³&<û8oÎÄ®¦Qÿx­n)UÞ°« mÖ’ïqÇvë¥åQ¾+q®’¶ü…Ùt'%ÏfFT*Èäu™µ]g›²îóD4×Ë}C ©.îñÇŽõè¾~ ÐÜ$ÖW7ñK…hmÌ‹q%âX—ºš&[˜JÅìÄ™D±¬Ñ-„R4â)~‚êoBqî t×é| ¯âö)}Ó»jdUCbh‹ §5–µTͳ-Ä¥1_j­˜>V§šiEäswÁÞ:ŸƒGê_NsŽžJ°‘S5Åï1—ìâ°Ì©í]Bzå±õ%—a/ÓªJRÈù覆oáï§déÚ¢@s=È:3ÛjÒ-Z|û$¥sÆÔ¶fG‹:T4JOø ú„¡Dq;o[ºœÂÊúgÒ—ͦ¥Íº+%#,½¬]ì;Ã!12öݪ&vÖÓ$N¯¬©‹"SQ¯>ìÙI}¼‰÷ŒŸ§Â½2\ð‘팰´¼ë‚ÚêÚúIíøu¼É)w’DRy(‚Ug•QKGÜ1¬y¼o ÅÚ’ä¦h±êšæ8Óm;%ºª¶+Q%Æ¢Ûn<–ªm$¡ QBIHZŸFºi£ý5źq ÚUä\b4èíZÌŒÄ92Äë‰öÊS±£-l´Z\å2j!Hm+ý¥>X?O¦Ä²|Î.5iת>²ã¨µnˆ8Ô¼Ú/q¼ò]:e9*$Fqq>ÆÒ•‰E¯˜×v}ä¢NO^:ƒÑ„õƒêÌšl÷#Á0ޤa9 )ÅYËëoíN,Å5¥;sg³]6¿/rÉ…!Äɬš‡ÔÚd´®m'éïé‚<»UÍxÇ W‚sñ‹kY 7‡E`ÒMe>$cÏÏ :´¤Ê­ ¨˜ãý'ÓN™EéýDv-´«SÔ¥d½G’$Æb0¬•’7 ÕGì­FDhž‰%¹/¼çq\Ò81þ™Å¡êPºšÝ´©2óúŒ2¦MC‘Xn-b0øöÙz<¤,¿!s“`¥¼‡’”²ZHh«‘× £ê?Wza™ct=sºÆ2Zž aY^Q_aŒcËÇÜÄ2,&¥A‰­XÍMÝZ¨–ó•¶² yîK‚´¼ßFÐxÇWzÏ?Jz«œÊÅ\é·YrZªðºúW¢\ôþh8²²EMyWîÉ-Åk"bDì´g$ÀØ °Þ=p3ãå¿§‡˜É/øb h¥ÔMgpò¾̈=ÉYÙyoFs¢ræ1ÈÃô½‡MãOê¾;Õ5ZÊn^=†d8{téŒÊ¢JfþÒ¶ÍÉÎK+¶ôeÖ¥¦ÙB n%å)j JF½Îzq6È:m|ý¤š÷:u—¯-ˆÌ>ݣʦŸO褸꒸̄OSýæBæÒQÇ‚”u®ZçN¾aÝ>eØc¹é¶_’ÏeQ¹ª¶§¼¥ƒmM.ri„Ç› :ÀmAÕ©++Rͯñ\³¢õ4îÄnmÔ71ÛôȆ™.»VœnÞÈ"+ªq#þ® /¥.ØS|~­õ7ÈôÛ¿mÇJ÷;Ør¯uBåˆ@·#~ÝÙk.T‹øƒ²¬ÖÄà¨ì7`îcê—O#u?—g&¡—í1Û36,fe<•ã÷pnÛd2ú’ÙL— &;‹'“hqKFëHÖÅ—ã带Mн)ØLä´7NÌe¶Þv+vÐ^‚¹ 4âƒn¸Ê^.!µ•”„¨€u uÛ2¾Àúu+#Ljͫ7¸|92"f1é®2Šª©É,)m‚µC–úZ_=Úp¥ÀS±Ûú‰u?Àsl‚­M"ÎÈ­«–û)}”M®«“.*eE!æÒûH+l©!Äî’¡¾à3·®Þ»Ší#Zs¯ƒFÆU²…®Žÿ‰lMç-¶;JVã8{kÚ;i»éU6CÓJΛØÍŸééê±Øu—°ËQ-ëí1vaŠ{ø*ÙÖ£Ï*R‚8­’ ±ÔÒÎð4=€ÛY”Œë!³ê-îuJÖ1yso¾¯†3§›MY]TÓQk™¾ìçßo›ò, %)AM¤k¤a6³/0ìJæÁM®}¾3ÚNS-ZTË ˆ²å)¦Piµ>êÊ PBv@Q}qüK«VhèýUÊPÄû8²yNǃAfkõ×ö5U1ÚVàgÔ)˜QÜt)G’ÖðNû${¼@÷ŸøúW ‡k†Ybÿø%Yõŵ²Æ‡›¢Žéã*GeW”+ D4ÆÑ¥c×µ·¹i}ž?ŒÒÉÆðÖ/bÖGc§š–Ù˜+Øgæö²â2Ì Ó÷}ÈH,öÇ=ÆAáÓÚQ¶îYg„âWr2ë û,Ѹºåh™Ÿœ³4ÝpÜç2ÆÐÃnÁ$yPràBŠb ÕŽņyç*žûR1ÚKúV«’ÃJbZ/\„ã’TmÈæB„”¹Ü%e$ ]Ë0ær©˜„ǧ? âYT<”2ËO&k±"KŠ˜ -,KRË­‚âJc¾¸­ŸQ:„ü,èÔoÒ'Â/çU~Œ?ZãÖ™-V?)¸y%À»òÙ »êU¨®2¦âTI^Ëé™–]>µî™¹Hó‹-Ìêjæ©øÁå=OaW6vÌ’¤˜ï«²Âƒ£‘@ä’‰ŽŸõÇλ¬öR%ÇáHä†gÈ O®D‚ãÃÿ¦Zv” SK©}‹9ÄÙÍq‰øÔ‰¯W³=Êç-†[yÖÍ}”[$„´ê‚Ü\T´­ÏÒ••'r6ÔÕÝR.©­éÜyl"ڲƵo¡ ZÙE„Gb©Ô!D%kh:V”¨„¨€Àëže—¹Lì¶·çWÓNUŒšêö¼Z¦z&&º¾Zòüvœ‘a3¹Þuç?Q’¦ÒV¡¥kqgÓì–Þc1bäø«yUU¢mKóÌr<‚$ÇiÕ•˜r‚#KK/t¥å2VBB‹}¾>7òî®Æ{c4êQõÚ9$ÇbU·Þ$:¿4bvÏeC`Œm£~Ç©‘ÐÒÑ4úä·MW_X‰! ¸ú FDdº¶ÐJ§ajBIJIÙ;êÁ«©1)8Œ‡œ¶®šåé–d´Û y‹Ù’åH`¡¥($6%­¦ÜI Ù wÂýà¦æ¶zmŽd(f4Ì“"ƒŒC€ÊÐY„íîDˆÍ¡Ç[i\‘—vJÚm|”ÛE¤­<Š„`Ìr 6VCWšKƒzå~(ö_Ue]ÕmÄ{ÑΩ~'zKhq©®Çd¡AKŽñS¨æ€g»ïï5“=¢˜µ#i[p¡ÈÌqE:†ÉÚ'2ü¯‚ª kªséѧ³­°²Èíò4ã°Ÿ­Æ#Y7 ¦é¢ÈBYujr+M®ÆqŠ„CLé_¬Ldñ $‚6xøÛQò˨JuOXSWSªi°ËH¯“"J_KÀ÷· ‚… Ž)$“­ž÷3ª¸ÅÙËeUN‡š3!,5_È+Ç­›‰ók‹Êyãcè¡lú‡Co‰M ý[DK»³Ëš©£[ ¨²Ž€ÊRð—2d¶^Rß ä¤2ØC|@A@ùðñôýªÂmB¢¬R! HIu”Á©É‘É*¹f ºcÒ¥4¬œüy©¹B©.¶íkxÍEKhSr«l¶µ­Â®h,†A@H!|ˆQˆ¼Â×edý­míŽ?*Æ*­Õ¨¯&Ê J_gtÉBý4Öã35’CKã±ÛZÄìŸ,}9&GPíj1üVÆLTü5».ñª’u+ׇ`”8˜ ¶ÊÒ{'¿¿" ¬«¼ŠþÎtLRTj*ë¬~t#5vSmb™Ðë’óB,H§ä#“Á×@@Ù:oîùwý2>•[iŽT¬d‘]Bä4­¤Æ%‰„€…ÂÀö£%öHq¯b°Ä ÊʼnÅZà@"ÂaM!/8ËQ_aäœ!.¸²Ïë­¹)k_¾²ïh»‹£!øRëå3>ºÆ0lÈ…1„%Ô¡À¦ÝBÛZÛy…Ž¡E'b­k³r¹o`(¯B"Ë\(@}¶$úöaËh¥DwÚûÈA$xQó©|ŠÖtDÔ×Õöiy51#=!²ãiƒ&dµ´•'¼Ye6×$¥n-<‰JvÒºæÜ©!  Õ3òF6tþR /knÎ;8lEVÛñ—*Ê]ë­É±´t2Ä¥¿#Ñ.2Hj* öÐb¶ÚT”\· #Wë±t´ìÙVÓäÞÌ›åK~cL0–ë~®q[f2P„—”®ä—·.:æÊðAÞä–µq®ëìi×U’+cÀ}¦•=’nÔ¯yÖרS.) 8R ßÒA$ê^²m¼KsIu&,ç$תÆØÑŒ@TË©jd7î8•v‹ˆq‡A [d‡þ§¿Ó×ïüT_gÕ°+Ù9Ü#—¶C9H}¦,·–ö³ô2¡¿&Îm“U,»ž4¤0”@mԆʻ!+”ò†ÞwÊäja5HM˶ýÕóvµªâÇð jB¤B÷åÈ•” ÁßߦÂL»<‚3ŲÕ|øìE l%ImÈM¾ µnJÕÜZˆW‡¿Q:IÈ_¯%‘ºxó;c¹ê-M(—7ýžÚ@Û`Fàé÷÷÷ç]PDªºT€eÀÉ$ë\¦I$‚iŒ É5É‘c[<º´ª»Öñl »ë +’‰Ý=°NÀò>–Éž˜‰SŠoÒω5¥üCÇ‚w×¶³ŠˆE’_³ƒÎh ݗʃ€{l¢…Gì5+GF$È8Ô5ù¶”Æ7ðÒ;º{ÎMŒ$Ï…&œSißl­ R~°½ÂIŸyýúÈ,‚Ágs±l·¾Ã}‹]½ößmþÿ¿òó¬;Y/E¯—!’ë- ­!i¸‘å$ÆßmƲ”â„u86ä+ör òöü7þÏÚVû:ŽÝ­#'þœœ‰=ÕD‚Hñµ-1Úm µ•(#$@'î>Úò1·JÔ°ãòÝ@ ëæSàÂO€}È÷üðQ=ÔÔ31iJßu–vBG­÷—Á#a¾Èä­Õ±öo}]Žì¶dÒÜmâó*u·[o´Û :ÉNä¹!~ä ƒ°VA^ÎÀ ß¿w÷tȬ¶b†Ÿ”øR‰’ãK) lžÓ}°AÜîþ@Û^úaê}G#¿c±Ça¶Ü¹rß}÷ûm¶ßž­²ó‹“1µmÁ§YK{$²Ûä­Ïº·>Çø UÝ_ªín8znç°ßŸ-·ßßm¾ÞÚV» Žm×®NÿÕBæ·T—míÞBxqt¶ûŸ($lSû[{½÷ J¹HBÛX ÇoØ Èñ·Çï¬u¸ú”úÛ(`”qRyT‘É`þ½“·Üy'Î×”ê»m­>BÔ×í öJÏŸâ=·þÏ:S³ƒáïî=Þÿ^ú¼ã|ФnG ¡ãmþ£¿Üíã^„ì¿/þçã¶­8¥rJ¶ä©D‘¸JRvöû“ößìz“ ³\ee(GeKt„ëé£Ôü(u@tpÛ¬u XêRh¾_eÀá¢÷ôdÚüÐFùG1uüÓÐzÑa·óKéÿ]®UÔÏ‹¯‡þç:yŸg­SäαU2Ñ–)rjÌR ì’vo{QY6› ‡o$†ëäd“kú’xDZ_:Ü‘±ü¸ÝŒüëó76Ü*;±qÅ-íà›ÛßË<³AG{mg~,‹;…Íf¨ÊÄH¨ÌÚFšÐ~8q|+éÏL!c4Y ÈŸ—³bÑÖL´“š›¨5Óm­¤³ —œb¶²#k•a5Ħ<8èSϸ†ÒN¶ÿZ ¼§á;âÆéí/ï®ze”@ª¥¥&ÎÖÎk섳|6Þ•2KÇÃL0ÓŽ¸|%$øÖÑÖ/‰žt%t1ú•¹_a’F™aQSKEe—/ÒÕ¥µZd.ÕbÕÖÓ¢cµˆu ›y-–kšåÅ/¸´)#s»êïNèz_7¬órhôÎ,3G2ª¦åÜÂ{\tLE¤6jÙ•2kKŒâCQc»![”‚Ò¤$iÛ8lº¶óé].`á—ÿFÜJ–ë†GmÄ"A®ÂÝ ºâU/ª0cº2.• ªs†Í1è3é5s±$5=žžÖBvŒ¸‰mËob:â®:’L„> *d 8—AAO F¸·ÀÖ=}Š|'t?Éé-qËê¬?ÓYÒ^WÊ«¶®‘ó»W{kæ´Ì¨¯vÜmÎÛÍ!\…mÅ@žã–uKÁpNËr(”XDjÈÎ]ND¤¥QmQå± ¶œ±“>ÁÉq˜…[+¶¥>ÜVc.B¸ê'¤Ýké×[)ìn:{xí›t–_'¾¬±ª·Ç² 2Ê$·ï¿‰_sXäˆÎ"LEʈ†fGWr3®¥ ›éé¶zúžãìר-ˆâ–'Û¡öȸeÍ´fX¹Ó[ÜKg+\õsHSa€UJe9ì|ÑÑ.—ßÞtâß§÷õ–˜ËKëĤJ§î«¦×úšlÑ´WÕä0Ðû-¹2¢HdE.Ç–ÓN)‡\‹MêÕ/ÂÇA¯:IŸa–½ ̰,—¬YVGFåv˪‘•Œ;$æä<±ÌÞɺù5Æ£º"@/½0´––uú+…õ ê ŒNÍVlâ™}þ zµÂŸ ÑäøÃÍGº¯HžÄuILG]m)™; ýùGâB•®m…|NôG¨YÃÝ=ijFm20«dWUw›"] Šnõ¼O!_‹(]:б`š9óKM¡×’a§\N²wÛ¦ÀíÜÃÇjùoÃxh†EüÚ8ÒXý‰W™mÿºB/"ºäE©‰Ö&Qh57*ycÀ•â’=*×¾wã[Ê[¥µ^6ÇÃn[I#!E|¥R1s'¨tÓXªzÐ5èÛ±z#nÊjÞµ¼–Ëi*jöfÑ §âk¬éf}ž'®—Rs~”\b4K¶¢s%ʱ˜µÝ_hÛ¡ŒM4¶ð´\Û^ÜIÎ8ë.wWÓó>&:-¨ã¥Rs6Q—|Þ>8òSYtåLžkAèx´Ü­¸*Æ¢d²›RK4²-šV¤Æ-¦RÉéw‹bטn9y`¨wý¼Ú;P›zT€˜éZ» ²¹IXSòTÞ™;m‘“ïÔ?JèÖ;]Ô_G¶öü(rù³Ø/‘®m&•Ðu§4K¥Z ¥×ª¾ ™Óþ¤d²Ÿˆ¨Ø-ónüCà]YÇúo>2aæ–9éö6î¶]«[¤CÉn*gÙ]Ħâd„G̉B¥s<2ø•Ö|ò›Èq é>;Óî›@ÎªÞÆ¯2kÊ ÁŽ£XM~¢b½Mm[–•Ð1øRg†‘%Ç_’ijOè%m¬ z˜uïëlë¢ZÂZu²ôÑQ23Å—R‡›.0â-¸„:„­;¬71Çsüj«.ÅfªÊ‚é·Þ®œ¨²á ǘü”cNf<¶¸IŒó{<Ê ‚y¤-%MGáòè@ù}kŸò7þïdx®ãšæâby3 ÒkÕ` *êâc5qjPeùkY'Äžo…;'ÌúA‚`ÝEc&™œQ¿D·s~ b‡nŽ—T¥ÛÆ¥fDû)V±A€âd!Ò·ƒ¯ÑÅÎól[¡ µéæ_AkÓ§ ™ÔLšÒ©qpöéz\¥ª¹ürÿš¢ß½–;´×µ“‘ÛrJ¥¡´´U¯·±œÇË—‘"‚r¦«Élñ À¨²ãz;út²¹ð’e´È––H“»Þ_ªy|O~cŽÙå jžÈqXtÓ¯ ³L8¹r«q2œi1$z–â¾Tˆ¯<¶xlúPT¦|ºn:íçïóÛ§¿Ê`‰Ÿˆ™$¾‘’æ@ |¡m¿5²ÅÕ ˆ³h7,@b­$»¦¶wâc¾n²ÁÊh&Ϋå[·õÖF/"ÇŸ Dä ÆjT†™yÆ#­ÄºêqhIJE}e¦¶´Í¾åWVOŸ›ªnX[H‡ ù,ÖA8äq2{­!H‡¾óLß(lºêåÉif°ëLk3$àsrfÚÈ=tJ—ÀƒfåL+› RØßµt-æ%i1ëåNjA+Ce)uHAÉÍ:ÏÓœÞ5Qz'ã7=毵²M]sÏzf­/­‰%šZ×$Ò%Ù¹¥¥$”%j¸z¤[èkøˆC4ï͈'‰­ˆÎ¼)cj C O·dÖ¯ñ#QiyÒ¹µôõ³­g/#Á_D:èÍ”¦bf4Ò¤º–#¡n–ãÇiÇßXO™mn,„%Do]S‡*æ}C4‰“&áyLX‘"´ãòeI‘M)¦cÇa¤©ÇŸyÅ%¶šm*ZÖ¤¥ ’©Ìú¥„àQªääw¿÷Q²…äûi2$L‰ž<ÙOAÄ?"poÒ´ÒÐ¥;»ˆI»gÔ짯Íå_Å^5oéDøH“=Ëw§é"ÖB†ÓÓ¦Íx¥ÄˆlGT†‹o%öÚì;žÛwíë·í]äfkæk¸•䳊)ÐÉ0Dœò%`[*\ç-…ƃýÃ9}<"ƒÃ–ÃÑeDÄ1ˆÒcHmlÈ!Š8m<Ãí8ãO2âTÛ­­!hZT•Aà8¦}{ð¿+v š¬‚t,§ÒAµaØ&{ye½[r[’–ÖÃSf7HAfB]¶Bu¯ê^eˆKΣ_EN1^$¦ÆÂSra®¹økKRaÏ…)¦§E°eÕ¶Ñ€ôtË[®²†šp¾×+¸wPq\ñ‰ÏcvJ]cÍ3cdõvPU!¾ìUI®³cLËh#†ÒøKRXz9q…l••%A5FȪe_YcLJRîj`×ØÏˆX’”³ÍO¢¢B#:]TgÁm§Vã|7u) O&|»€ùƒŸyúÖ¢¶‰L25ЖF»çó? ¥KWµ¨^ÈÓe‚ä—G$ ¿2Kƒ”Rã÷Hbâ—óçåEú5} s]caëdXYÛòëÞ¦D©­ËŠþÏ­ÆÙ ¥aÎC¨fôWG`×E—:>?œÐz§cÇuá YÑ ÉE´¨GŽÛ yÒ”%N%%@¨k¥ÉÈ*"Þ×cÉ(¸µ…> ^Ä…¢Ö©¤Ët¾„Í–•! ëˆqÎG¶•­¡2^¢bX”Èð/- Yr2Ë,Ã9Qaw;^¾Ãаú`AîîU,´ÑP_ …¨OÇ>¹Ûô¬{-¼QÍ̺Ã.ѪۤRsㄜ€\™ÔØc/l‚ϨäÆ~)Ô8YÊin.é,±5âö¨¡„åtÈvfÒ¶I‚Ñ9Xuø«u¾IeЂï¬XÇhîcôç:‘e^ü[œÉìÛ$4á=ÙÕu ö W8Û\ùMšÝe¾JKî–|­$k¨ÚäÕ ¾°––ê›LE™Œ¡ÙHR':ËVØŠ—VêrC!+l)% $ Ÿo/êq¸ ²·”˜qëQÒ®Û¯:ô‡”RÄhÑØC’$Èy@†™aµ¸­”­‚R¥iŸ/,õÏM¼<>^þÞÏÉ,8I9d X}¡B¼¥¶:[–Å5`e݆rÛ ‰]-ÂS ÎÝbìáwÈ©u™R¢n:¥×vÝà[–¦ „6Ó*/¥-ukSeÔ¹Ù ”z«JH àÓqªƒ} u²¦ÜÙMfÅç=+ĸÜH†hÊ}{!n¸µ6¥!$ë«ÁÌ1Ë 99 LŠ˜]ôΑ%/E\#‘ßbly(nLy • l:¢¦ûI_qPåÔS«˜Wèx*cRãɯ‘§[.4ûÑç´Ã¨ŽóiRÚSÙR² T4ß:ytéû}kÞÚCûB”’Ç,2fe…X$Šs¨cV[NAл€W>†ý®_u„‰ýÅ3X’Ÿ´½zÒˆÏÍQZºèÐ+œRˆž•<ëÒ!ŽL¦0A*æ®:ÙáC”ޤÞÏTgÓ ìRŽ;RÔÊÓ×ÚŸ9n2‡Ê{ju´­ [aEIJ æV4Æò ŽBªŸê$6ÒŸm+.8• í.LÉe´MŒ—BŒ§7ý$U3ÇdÛšVl眊ŸÔÉ]–ÀÝèlOSbòÚ•°ÛÊs“±P#O±°忼þÕ¸ÖÍÊHÍ8q&¨À‘Ò.J¢€qºN$¶ÿÜs§Ù¸©®ËðØôvrä_ÙÛ=I`Äe9T¨Y ’§Ü7pÜ5Ö—$wÐîÊXJ;aA[êa†æá6–œ*¬­áÛUR¦Õ‘W+kJzÑV¨’ÂH1‘%(eöß^Í•[¤Ñž³‚ÄøUŽºS2Á©OEd6ꃭÂJTù.%=¤pJÒ@p¤¯}’ û|ž–‘Ö™±”ZyæÔðm¨òd­¸Á\U&Bc6áb2W¸SÎñFû„ò⣧—ü÷~ÛUäGoŸ¤Âʱ³hÄ «þg’“õl<³ÔÚdºÐ:bºNÃ’,S —b*úÌ™6¬ÍÛIl(¸.-$ ³jP%>u±d‘å6þ=u3ó ו2;’\…6‹!Èín ®±º-'ëRyqÔÍý]dhÒdÉ©¤z1·e9,ŒÔd­ÇR!jZG ¤’ ‚uêïj“VÝÁ–Ù¯p ·!!j.)J(Km´ß[üÁG`#º•$q:VùP€TJˆaP5)(°1xä9óe$œãZ$šÛ‘y|Ì 8¹T.ÔB–O*S.™)ÆWõ0©kqѳÅ;Èk`„§®oÚ¸ô3`î¬~#Bs Œûòæ:…¼Ê.ÔvÛ SŸ²§²w÷‘n«%ÁzÁ™(c÷•¼—Te698™ ¼”:ÊÒ6ÃsàX—c!B_p ­%a)CŽ(!'e-Ih(¡´Ÿ Z¾ÿv•¢–,¤äŽÉ{ð<:ùÕ›†ÖílÖÛBœZÙPJ’¥(÷AØ$IÛì5š }2’ß´@yß±¶Û~?mµCó£°Ûn-ÁÁâ;EN)ÝÓÈvÒØ*_¨6 òHö‰‘Ìq$8’ɶß~<@Û™_/§†Ü÷ÇJ×gQ:†tŒŒ€ß?:‹LWWM…šj;µ*.2ç>Ù ò’v oý-‡ßY+•-·ûN´Ôv]H–ëÄrJAóÅ´*ð öÖkR˜u¥8…‚„o̬)y<Ò±É;>}Ç·á¯X’ÓÛöÎå#r T•ö;/bR~Ê4¬…¹vÛµ£¡øõÇ€e”(J˜¢ u‚’Añkc±ö;ocàê®ÖrØíéxo±Û—-ößÛ–ßoÃW’Ò×Å*ÜýGÙ@“䤫€ûñÕÞâyðÜòãËmìþ?‡ðÛá¥oluïùç?ZÃú›/ !K/,­²‘ºwq ÷¸ÿ®Þuèßê;~Ñ'÷$ ÿ¿ù~ÛÜQoøoçoÀ€~àÿV½ôþýÒ®>ýت[$~à?ËþW¦šU¦ši¥)¦šiJi¦šRši¦”¦ši¥+á'¿÷JQ;ö8?þ÷«Ûï¾Ûql.&1?þêS™Òa»:WUzÅ.U§iN§ ­é%Bp¼d ÄõnÑòÙ´<¥®&Î’OèIéV$z¾ž¶–ì?NSÓƒÒàïÌùOè¡ÈÿJKf«‡dØ|Øòù‡.ç¦ýG:ä½Nø<è‡VsiYÖYW‘"Æö=,<⢇1ȱÜ[©P±ÇRåN£c•3c×elU”!˜Þ¹°â⡤»"#m´†uè÷|G…~:ë‚ñ%’³šCÅ8µÂÁq3ÇÛñ;,ÖFu·˜¬±2éË`Ð4Ê®”¾„û¯¿#¨)Sùc?Ÿ‘éþh;’-:¢íü° > -JÈç¾8®R[7^µ|a.ÿÔ®ë„v¹œv=gÄ\L(ýEŸÐÆ:“#L2j"[ % oõa:ýêÿÃK:Ë6†Û#g% ¼Çiçbð¯ú–]`—/aö|Mžc7‘Sñi¼ržBVÔr§ Q”óÅ;ó¢}:¹èìþ„&”RôÒn ptÑãò]«\,yQÓE1¾ä†í§‘˜¥;%ה䇜uç\Yº†Ç~«;´í·¯ŸBO­y`þ¿Š ›Böï\3Z[\™dç^KÆÞÚe7HaÄ)jÖæ6"YÌ«ÉuÑ¡|£×vÃôß1-R•â2:éÒož¢@J ½>?On¤âLÎJÇem+$j*ÙmàP©±à¨'mÏClüxu…4åI‡/áï¥R³43¸iYc9fGvhOƒ`q€âS¿®0’ØòÐN¾‡Í:Gõ§g¦eIµÄĈ‘ÚTÙQ¬à;Aé•Kk[qÆ,+®ªß‰L;Ho5%© •n¤8ãjé'E0ŽA¼gMÜûLªÍ«|¯*Ër ,«/ɬ#0"Bzï ·yé²Ñ_ù­|`[‹ •9Ùe.>óŽg#N7ÎøÛmÈ=sä{¼+ê(»þg߀m…Åì“Ú"’Ó†Í`mb‹”TÇ#H²‰ ÊËt¦,²—ù/¥KµÐ/·¨‹©»o¬¯T*9W¨M’kÖ¨jÇewÒðIgÕÜ ãçmköñ1Øþç¢ðôBM„n¦ô8º¢lTiøÄÏÓ”¥MlçbLÙ9zG…j‘õîu÷ŽÓ\_§qr¸xãS|Ë6Éóë´XÍ]€vÿ,}—îÇy1ki=˜)¦É£®g‚ü,ô‡§™„lǬ»2©œ¸w£µÊ.íñ< Ì…kUÛ˜>5>[Õ¸Û–]ÇZypÛ*e—b!ŽÊÔÙ¥=ýs€Áûéšóž | ²…}¿¥ö;‡y\P8„¢{lDy¬V"4㥻kÒ¬WâÅbÿ¹ÝÔ‰rûg+s<έ,_XÐuM¾·8šÇ¹çí2Z©f:‡ó¡4„nÐ ×ÕiUÕ¯ƒ…MLGÉÕ(lÒUÒ»ÏPl{ÅÍü{ëv—ð½Ò)¹úó÷ê® ·òF3i˜º2K”`3óx€ùŒì)2E¬‰•%/®Gí»))–óIäêº~MÓìw,ÈpLšáWkÓË» ìqQ¦¹„XYSJ£’g0„”ÍhÀ˜ðm— R‡x<éÛSPÎw=sïÅjÛ‚ÞÇnb“ÙÃE³DŽÂx¸?k§»—1'.Yã‘âh‘[30pÂP6™=CU²{’¢ô§íbÉ}!\)%e—êÉŒ$¨švÕ<£`­šCÛ§ˆ×ÑÃà—¯q¢ïú?GÄTlD ý8Æ|½0ÿ£èò¥¦7löÃcdø>»êgDp~©Ê¨³¿ùõeå,YÕ°rK#µÅ¯¾Mj-(¤ÙÔ<ËÒé¬RdÀ’l/wX,¸âʧŸé~®šÉé4Z±UƒÈÆdâBª©÷".=4¸ËŠûq¥ãè’âqÕÍqNÈvK‹’óŽ<âÔY5Ïþ?~Uè<&ìËwþ‡-¡ã yÍ™ø³A I——ˆÒÙ¢1’Bè° ¥”WÓ¡ÿ[ â.6ÿônð×,øEO‡n™§ð¯ºÿõ²ðë¿TÔC¦¥­¢„L ª¸U®—àBnpãÄrqÐÃiæá­[¬ûí¨\ £éÞ'M†ãh–Ý-R€‰Ò×6RQ&t›{ÒœH[ÄÈ”ñJ”È)G²wÔÎØóë_Q-d[«‰]6ü:êÖAù’ÉÙ Œn¸µ—QÛFÇQÇøvNÒzûùüDõGø³Mª°Q·ÄŸ^UçÎ-Ò¿î{ÿ>»'„Ña«ÊH‰hV]–[fWªZäòº¹K š¸Áiš)šíEFèke|+pª:¬¿'Íb&P¼Ë`Ð×Ü-Ùkr"£ãJf¸FŠRiD·»ëB·|ñ*§}3×І?jãŒÉ C£6wrÍ.ãCÃ{èìö›UÄyjÜãŠÌ7>:ÄýˆOÏÌ:“.Ý×òÆhÎz±R¥+ü žÛS¢³©o²–þƒçª`ŒÇ•uñ8æZ–×`ë”Qo Ĥ©8ÚzaQÛsžü`÷là†‹½ÕmÍ'naÐŽÙe®å² X™íâdv4mÝY5‰ZäpDKûLi ¹¶¬пPã<^u´½!·]ÝJËÌú/ƒg7&òé‹VgJ‚ÅMÒiïlé¢äµ1žSñêòXÕï²Õ¼\R‚!!aµ)‚ágdjùß}½W¦þUà…ÞDap¶îÖ‘Ám4®á"†þ|È<·om SL˜ÄãY.¦¾zøwÞ˰5ßrTèÿ ‚h=VåáܪÅ6³Üƒ«ŒÕ;rVƒÍQà Yí5Ó†£œß¦q”qhÝSø‰^*…‘èĆ )ô©?ªýHvíUý±ô¬¿Ù;ƒ·ÕYK1ÁºoZÍ…L¬z;Ð)¬±‹IxíœÉ ·UK3+ÊþW!†›iذ„–¹5Xt« ‰Óᩬ]u>:äy8û•3e×YÒMŠVZ°­µaÑ5™êSÏ)ù*yÅËT‡•(º\:j'~[coððï­' ºaŒ4.¶¬²Ç#;‡¹a=ŒÆ)G,ò×úFMZ¥r –汸ߧÙÄTñý‘׎‰ªõý©ÏRºå°<4{¶ Rªp^áOö{žvߺ¥ GÄ<…Bâ;ý%B¯ƒ~žg*(¥\¼Ã*˜† ¾¾ÀPNèß[\.–aq1 øOË.’Ý×åÛ*|Ùs,ììd¸‡Üµ›jë¦s¶æ˜y¹ÁäºÂØg±ÛKiHÍÃð  Õ|Æ\ûe°«;‹»Iw73Q ²Ô6°š·ô°Ú%££ƒM…©|JÔTa#ÿaFÿò¯D>â9T°‹L—îFWbаšæcoPk@n+’™S1Ð5:gHÆ×c?UmOÿiê5~'ùmê ¾ÇÁ‡õIº?ç×B¢Æ*±é7ò«CáÜ’íûë>ü…<•XHŽÌw RGažÜfø²’RRòuT\n®&Gk“²ù­Å}elÕ*B•Ū\…Ä 0SÁ·9Jw¸´’\úަzúðÇí^¸ídXìÔéÌ2Êø'ò¸¹NÛŸÅ\ƒŽýÎ0yíðÿ¯NG¸Ãó`?ŒŠáöÕŒy¨®æ}jU²[R”ªî÷‚NØïè”Ò~±â"œ\Õ¬oÚ.••}^uÒec•’ò*¼™àñµ©c] I}IŽ#Z)…Ê0ÁÇcµÛY; n;ê$éæ7”NM…‹s𔏩®šºÛ9•©µ®JË©®¶DG¡¥j%(wëJV¤%À‚g»Ëþ³G¶›[Èûi¸Tg*®d¶Ø-¡´Ä·B ‚3–äKï¯áʤH.ú´\ܬÅFO0ÔwÛц8Áã·µÒs¶¼ã¥è“æµÈÝà£t§å¤ï㼩*cîȧÈñ·Ûãu7jÇ¥2Zª(‚Ò#ÃpÅí5\û"4Ê›¶ÛkŽÈHض8Mwøõ^IB³mÅ!¹ LŒüyÅ™c–eB”Âìy î •¡^R¥!aI$iŸ©ø—éAg"&UÊAÃÑu5½”¯#Ù°$W8=NWmø>L†ÆK˜2Ÿ“=št´Ü%?àúÒ³8šô­ ‘û; eòÐÎrãçÛ}A[5˜l­FùxãØO9 ø¨í†”Û²BÒÒÛ BÛ<’¤€Häµê¨+ cuaŽPqžÛ®%æŸBŠÄ”HIî‰<ÊÖ§¹)JPP);jW5¶uU\©UƒdåÙD@+ l? Œäí§c¸MʾWèHÚæbFÃo+2{¹±÷SAîþãnZ•ÈÂÓc!QZÙ/”=ë}’­¿]á¿ü lqé+Ø…"l¼ÌµKT‡\}éKp—}Â][ŸJB [â8lFªOxµÜyr–vSË”ê™@)CÝßfPÁ°;îIñ¥o’ûçHÖu“”:Ýð½žÐíý£ónCÊKiýô!Iy Çÿ›åwvØÐ@AW؉óçX¡¢ŠGëýDe ÿLÍùæw÷îrçËï·¿lP© Â{¼Â\+BÛ!ÇÝy1›YÝmÅK„¥”(ûñÜ‘ôï¶½E<Iõ J¹•!,÷\ôè­ù>ˆûö’é÷ßmÝ@o¶Ê×-ÎrH` ƹÏc§äU¹ƒûïL˜ÿkIÛ^Ç 6¶…͉ìAJ7ÿæüV6?Ñ+'ŸÛ}H9•ÈŽú÷îFîö/¼ž+ä6óà ·#cçV¤Á!i[œÒ°‚ÙSn­¥©¢w-¬£ö›'s±ûÚWR§$Œ~pÃ=ã@_ƒî¨Z´þ¶¼+ÊQ§'ÿ; qüû@m÷㶯! Im˜?£Ï±¸ü¶îî3ößRîCam´¸ví)¥©µ6Ø->@#`AÜ(y>|ëÑ€ÀcˆíƒÈ}Gp­÷çÏö»›ŸÛûûm¶•„`m±©ßFÝ6>ì u¨é#õÒÿÅRaw|øß¹±ßÿ¢ÿÛ¬™CgA@ú½,vxxáü7ýŸìÖSq›Kk@úƒ›••(­K$mõ¨ý[¶Ûmï¯ZކùîJ€NêQpñÉÝ^ÉâýþçJØâAëÓœ}ùÕ‚€…¶ÿ·õr=]ÛõûÿÜvßU6­Æþ7•ïöH>ü<þjçòßs¿>ÿÃð÷þ?ÃJ`ãÞõR±õ þ ?Ú‘¢ÿdõ?ò\)ƒ÷ß}¾À~|hSíùmç÷gõï¥\uõ÷¥6ÜÞÊuVšiVši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥+äUåùXøêk¯èIøQ^XqoSýå9@êÁ©Æ/û'ò¿æ£¹þåÙ¾>7×Ï][zÇgñQÔÜ/¬™N!ü8d·¸WIð¬qUIÅ2l¦ØÔ›.°ê\•²ŸÊaä¶Ü ‡J„ÅL&C¤sRþž_N3ñ–ެФþ†utðÝúè<ÆZz˜¬‹åŸ-õ3ãò‚%zÑÐòýG¿ú½p<æ?¸%¿Ä~Ò<‹/Ã>%îì2šŒæÇ0­¡o¤™&kEÅóç²Z mKø(DDßÐ+^vBý¦’¯¨tÈéùG\xŒõïÆså_†â^˜§çGÅØñž(Å,Åï´ktߎm–ëO-“úxî92ÈU#i>—9êÆmOGŒõ/4讎ü>ô·ªV¯tâTW¶ýFë –T°gÙYA°S¸®%¹Å½JÚZùÌ—”™r{a¾Ô!ÖNªü@×|†ôû£÷øä¼ª« ²­ÈzUø8~d©™Ict¨·ð¢¾lâ­ ~* â!è~ú­Ñ:~gømE_Rº€Fê„>«b‘¯"cˆËcõ¢èeÙ#˜µÍÊQ^Ô¬c(DeW"ÐÆnÒµ¥’¦^)mLŽìcû.s§|÷õï>[ׄCÅõRœM§ÖßÏZ/m0OiüÛ…5ªØÿR¼-oTáÀÊÚã•}¢XÃëG«ý_Iiðâ3ëú’ÏÄõ?A+ú»*{Ù::m{Š«¨Í峨æÐqF%Q ʉÙvqjÉl‰H.+ènŠZeø'ZºÐ›5Éú‹I]†â}PÀ2|ÖTK º-5ÝŒüzû»¶‰ -Ñærêå¹·Ú-è«+m ù'û:½+°êãµxû|•ñYñ ]ãnÒ1[MHp¨2{(m±Í{ rCo]¡³\›§[JT˜¨TƒÜº5…õÛª@ë·T1†0K\Æ:}‡à­ÞÀÉ'ÑbXä©¶óg]ÛÕVíí탵®¢8¥ç뇉±±ç€ýžž]zm^Þ[Û#2ñ âpmÚok0GÁ97ºa¼.L"ð1·¥Á7Í0µfÔ!fI†|Ÿ#ÉëzÊæGwcvå/ÄGVñÊ…Ø¿ßUmE”&ª©â)í@¯mkDV~®ÚTG#¾®t×%Ȭþ"¾%ñË« ¸þ2ÏFÎ9O!þp)UsˆN™nkÙâ;ÆZ"_Ô®ë© Øm©‡¼'Ákú°ÆOZ+ɺíÔüÒ•)—g«Ç2)ñ¨žL7žÕ-¦–£An[q}–Ô@70 &£ë¿Äig\#ã™Ë])F3`%ÃyV*Æqy•·!QyráúI! f2È\Ž\l œe±Ó*û6Éx-¿‡Ã­Î´¾”ÝêêÅUMÆw Íhæöy†/ïÑQ–9.DßÅ–1‰7ubŒZWAòKù4 j·îãfõPcÚ¹Õ9˜o;·yý,¸¤ñûë'¬AOÕ/†úª›› êÌ“¨9-~C#ý¨×0#`w3ãD°o‰ï°ÄæY”Ú7OÛB÷;lrç`ù3ß8÷PÛ® Ä t_ Ä¥Zz¸MßÍÌ+mcAô%á9aÈ1Þ{Ô¢:£$§¶·Râ’“ªxVG’õ wôõâ]Vœd9$“.$s__; µ¨ŒøfCͽ/¹>K,–¡¶ó¨çÜZRÚT Û#§åß×âjº]›ká‹gY´Xê6Â놙 }ü 6½?‡ I«³ª´|ÝÌ»ª]jÒª\÷(éÖ1ƒôþ¯-»²Ã‡ ºÉ²»)ðqøŽÏ—Yj’¢%d‰ò¡²Ú œ‡’ćiB‘[ÔÜÊóáS¨ù£±:…ƒÒu3²È*Òˆ.»‘àïÙV5 $·DÆãıR@i™N»ÚB[âµfø×Q°Þ¬¿Õ~œb³æ2œ”cKÈkñ¹Ñ,qû)VÞAe¨$@íØK®¶Š•ú¶Ú ÉŒÛÄ”§ GòŠO†Œß§übÜu1¡Ï­­›‡%¦+åf9ÃÖR Õ0°Ò"F‘-ªædÉ[hq½BËh^É£z®:åŸóå«Èc½7¾îu»Yz“3{Jj-™†f°õji³8(r2ã’¤ÂV~¯m‚,¹jÌí!ªCʆÕ[íF*ýKo».J\u)û8â”­[ù QP`d6–]×±^Æ8‡]SÌjY´±ToFÓÌ%¡É˜¨l­õ¸º\Xl$ìN§#×Ko*°³S[C‘M]§¹ •>Ä™:‚ØWq4­€øN¹å09ÿáã>yÏ_?:ÇgÖAr¹×æ½%3ÉjR)àÓÎ3Þmq‚RžÒR[(Ü…'b|íµz`ŠÍº¤ºC¯¶¥Ãú}2bº÷e(JxòK©/¹Ë~[ﬦcÎäLa 7•©iy.z§’Ñeµ6‘±BwZ¹ìw<@öÕ‰00Ýj›O¦mô“(8Ÿ®;n—PØdŽ}ÝöB·Ù; ÁÛJÀ ƒý¹ÕØMÎs€®»~ošÖd¾'ÊnK­ŽºÜvS°i~˜é|’²ê·ãˆööÕ𧦺 ÛÎGm¸ì8;D-çÑÌs$n[l8øÉ:ñLJoÖ0ÓhSRÖ·¥a!’øä©êöä‚ÁÜÈ^ ½Å)†Ã©[-6APAB™IBçÁINÅ@ym¥oõc=®»ñ—åÛ`¼ﺺâ÷"—Cd(§ÆËBÂFÞܶßo¶çmd¼¥ËiQJžZSËsZ“öä@ضäêß§Zavõ/óþ2Ô°µm¾Þ7ßmÀöÕç£ÛZ@äÒÂÀ>9});ý‰íößßí¥o|wô\õñßÏ?:¥’´¸ãJZ–ÛZT£ºø¬ìR¥l9lGƒ··\h¨¥{¨“Íí·û ¸{kÆ¢¥¸¤ñ*à÷┹ö*'s°öÃU6’ FÛ©Â?úDýzPwuÆÿQñà6 **srv yö'}¿öíùkÏ;rßïû;xâI?¿ì|~:¬É~ÄÿXúwþÍôH$möðþÏôÞHßm)ñؑ등îÛþ*  ûŸþÿ#Çñþ^w>u^šiWïÓ§íM4ÓJ´ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)_+ã?ª©Æ#Ÿ«§hÏÓÒ‡:æ*«’äuR…h¢õÿ3ùÊ ‹‚(•’¦¤Ð&䈞¯·üã]Ï2ê½&žt£±®´•iÕËlž¦Žd$BT ×ñ\}ÌŽk–Ê~S2PÔˆ­)ˆ¾‰‰k2H%¦¿X?,c[S#û›Hé+’#©Œøt©X¡[G$=Yþ\Å€cåûúï_ÙÚ÷¿ÚåèGªçÚ<ÇÚumÄüFü‡Ýq¬Ã«IuÀÔ±ÒÙZÿ µ¥Jóï¾úÙQáÌ?úŒƒïÏ¦Õø›>7-¯9æŠG™…îû"‹CÆøŸ²ÞpÒ:¬)…y3p­1i<¼t^¬|CVt×$®Â)ðLïªY´¬z^ga‹ôú¾¶lê 2ŸFöEpýµ\&“-.è€ËïXÛKeæbG%)å‹}ñ;ƒDÂzm—b5™/Q§u€­7ñ8•“dEй—EömeWÁ¥cm§Q‘É´šÃU’ÑéVVê€×9¡¶§Ã~2ºÞþ_> (Ê:1Ò»üZ}¼¦!GædÐòÄD‘)ÆÛRj¬$3:Å–ÖVËN¦RÑÀs×ÌA¼5ø`ʯŠk±Þ³â¾."Åi‰ ‰9oRšÊ1¨­*JÔgïñhò_ªiJB¦ÇWùZF=>¹Rqñô¾µ7â rѬñ"\ÝÜÙ„ä¡n–Üc†pĹ%Ždk˜od¹^xh„m¡L+'7îF¾(z~®•JêƒõùDG dç™Ó÷ªz€ÇR}r*Ñ€ DHS/dËu¥GíMT«ÜMªLPµ'oéGY+ºœîMM#ɰ<× —_)ÁóðcÞV3q̦³iÚɶ¶5ÑÐê¡Ïƒ1ÖˬHŽàCˆIW笩pœêM¿U”ÁéK?ثܥÄ*ˆÉÒ×p©y'«I1 l|ÖLhŽY…˜Âh ïrNãë<-ø—ßU¹ u©•8÷Fú}ˆä“a:ÛðÿJßÈî¯!׺û*[.OƒFàSÍsS‘›„,'žÀTçŒú~]ÇÃ5ÖËß\\[‰&ˆ » ĪoÃ{ âq¶K*ÉìÊè©ø"4¸²Ñ´]Çêu}2±ƒmT\#8Ë0[WmÌ6P¹Ø{­5edÂãÈ}´Ö8î°ì…0úZBÔüv¶\Ç øžÅ³<—©N)›cøöu"ÎMóÌ‚®<[=•R‡ž}Їžõ”5Mùt¿8…çYZâlçÕ̺eYcmÑŸ‹Zšt:»k^«|HA¬C —\Ÿ6b+mq÷yhmyæ ßZĬƒË:OðUA‰M‡"õìï¤ràWC[nO«‹‚PʳÒ#4TüFêĘ–eÔ 6ë¡§v*Í? ôÛ9ûèïéÑø­ï*ÎA,hÞÏí2!‰ ½s§³Ç’ a%Æcíó¥·$è ’ý”ÿQ*˜êuwKÁW6XMŽrÍŠSÕ"º¾æ5+±Y|KõË‘-¶QË)YSÁÍne}@«Ä²^Ÿã3aXI™Ô;Û ¹ƃ&º’Uã¯XŸiä°¸ðÖËf3rï©hK{­<~É?ü/ñuíãýù8oò¨í¸ñ¶²úÎú¯ðÊvßQ2ƒû¿Ú ÐÔǑ韗_Lü«èµíÀ†íÃ.¨xµ­¢#‰nlcqòÅ'“ wƒÜ+qêWá`÷xÅv+•g™m\ËñâáI¯u,I»°zÆdq¢ªJ½{Ë•a0-ˆ¬©IÛRcªø¼ž•Ëêío­´Æbãv)a†fÑLÖ4òç×.,§n=¤Wã? LgÞB˜ËˆS¥ /\¾Ø8÷ÅfþA.-z2âRqévŒÃ°ñ»Û£‘ÇŽü…¡¾pÜ•|ÆR®M°S%iZæØ» sá/¬6,¡H©È[/ñÔR•cö¶××<ÊLyIK²˜Øq[O%hÝ+I:ÀÛ¨ü¾ý_¶õÀñ¡5Ö$B¢.+¢ƒU»pö"•ŽìÂq)••ö*ðòðûF¢Ý‹ŠJËÆy¨ÖµPm™eàß}¶'Bncmº¥·ÝCn%+Z‘Ì+)ؘL4ÔF—0«‰2 ¶d½-€a3Liò«ÖLg_`)NEZÓÛyc‚“¾Êä¼mÓìD~fŽó}fJ¹H›0Óêß—'šÄ¬št“¿ÜJ¼ýÏ06îê;û€Á÷çáZŠúå¢wgF,–Gµ]´2[÷TÒ²áõ’q¥Wx˺Ÿ[KŽï(Èm#J°G@ÄW¦7Y¥¬¥92LXÑã%ÇÃnweIWa„)[‘›:¥°Â_Π‰RªcÔϵr8i Ø7ò¶Þ3kÝŽòÒ†l#½讲ã}õ²•ëGªëœçíd3«~šWµNü§PË.‹ÙoÜFi×T”wZKñ¦<Ø<» :Gï­gG{£QžÂH®º°êµ1òí\¥ÍC²ŽËî2û­ô­*äùjc ñÆýÛýü»¿µOÍ›¶¥BÞi‹HÌ^Ì!Ñ!`I<Þarm/]8bÿ@ÔY5oWYjÃn4Å|+[{€u¶§EnSht6¥ 8„8°…©â¢6&5©¹ÄÆbCÕ• jÊKê° %ØÌUÈ“K®ˆî<ÙÅ[„-kZT„ìW aøü1œ|UDa®#$‰_vâ¶ã®ú+ç”Û`©k'—"ZRÔ®QYx$n6;í øñ®ò\Ê‹› ›’˜üòÄ-ŠÀ<×r<u•-”¸ÓnlNÇ`|AAŽëÝ9¶a”©N+çÄ!;òRSe!Ç<’¦Ò±ãß}+вÉÑñÑÎ1­ •Ý5 “Œ†1[e^PÅŒ¦#*„9…ʬrsM4‹(íìV¶ n-HZP¤½Úx!e•·¹Œª#òÚlE˜˜R%®ke´Ø&Z ’ZBÂËÁ+ZÛ.­°ÛŽ'`|øˆžû2pæëmÇJdÌo´¤’Ô1R¶J—Ä’Ú «m Û¸ž>é G¡l»‡ÐÀiI3LêȈ`(w‘2$ð¹[ }ISa-d P'ö†êÏ6A‘¬6Œ¶BÄÂÂÁ:àdÈFÛãNýsµÉÉbÇ•!¯M1èÐm‰ö ´…D„ë›l‡TV_l-=õ4…%žC‘߯¥¥Ïj!‡Í X™5˜M–ø•¾¤8¢¢?W²<”n£¸!'í§!ÆcÒeQ¤-£æ [J 8âæ¬jJOÔ ðZ;d¾ÇoRó›[q1¦Ü¸ÕJV¸Z#)+ßó}ÿŽ•Ñdrq’º~LÈT¡é‡~ù z` Ùó[ƒéN¡kC!*R[âVy:–‡²¾êÉ7Õ3'7 ”¸´¸µ8¶Ùe–’ëθ>–ÛO„ï¶åD씤}ÀÖ@7©š?7ÿ½5¥†È—Jó„[”â¥~Ê\v)K$“á?P ÷:WVb Ü#Ç–·e'¨è={«!»VLi/¸‡cª"¸HaÔóK;$%Is»É=¢ƒ²÷ûj¸“Ãë[KaèÏ!ÞËéBV¦”HK©(*Iý+òAÛq¨) .E“éÙl4ý:^)ú’K=¹ƒÛJÒþ/ßÛRê)rÙ•6  Ô'˪J·<âK@íãulT¾Þ *lõ?îŠçÝ€vÛ¯»9™(uÙ-%* ŽêZYÛ~þ1™OÑ>ÊmÞ;ûK*϶àÿf®¤}|ÿ£ÞQßoÆÛÿ_·ã¥\œww|ÂïîÉù ¼…ï¸Ø•¶Ç`G·áà?×°ûø©*Üxã~m‡Ø}PŸÛ?¹ø‚7çýÞ}µScÇñWö‘·ù4«ïý3Ý÷ê*¡÷ñ÷>|›øûùÕZi¥_¿¿¿Þši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šR¹Oò'ÒåùWþN0ÿåoûtù /Ÿw{—Õzîß/[鿚üîì~£ÕvþnØŽ/yuŒäVôuÖ7˜l›˜½¬¨ÁÙ”2m šË7ë^$îÍ€¥D’P [ €5ù<ÕLçþ‡Ç1½È—Eæ©ê-ÿH.kxbzŽ1ÒÔãþ»ä_¢g•P¾]ÞTãꌂçu\¾»/⫪yîK*éfW“a™WÜÔ7ÓƒÓlZ¾õ›zêø3£Áv}ýô—$ݽcQ•hŸC)HÖôù¶Î;öëÓ~ûWã¢ãQ ·Þ¬bDÑ"\ZÏÅÔ7·-ÿ60òæÓ9·>×§\±}ßÔ“tϪlÖGê.fmSÉ\ª¤ä1¬×BÞ•Ç“Ýi¹!¶Ó%„¯±(!´¾Ó¼¶vWÓŒ 8Æ[ÃrìGÈ1VOKCeUúÈF½¾Ô@Á(€¸LŽÔW!zuFcvP¤¶¢ƒðn?ÅöiZßTݶ{žúA”Eƪn­qØŽuªÕ³­.3Šipœ~mK5è‰B.E€\qÄ0\Zù@`6·}qèÏQ®n.qʘ}o—ž)»YÕÒºˆ®‘f `¸‹7¶ÏÅ&1D–­mZL„|Êtt½%KXÝ-'Äí¹òÈÎÛõñé¾+§ó‹YËÈœ. S‰æÞÚI5{ö†îׇ¼wÊmØÅ rݵÙhb™„Jܸäýg§¸+8gòxÖ%#ùzªÿDSQ cæ½K.®)«í˜¥ x—ÔTÙpÉ"Ip¾C†¬'ÂúqL1ü¦Å)½K“_K¨,;-î!ÙR;cœ‰.%BŸ}n»ÛCmò ¡(:t ù´ºùÒeXXYRtŸ6ŸU‡I´›&Â|,S"Åbdµ´.ØJ[’¥¢…é’¡CvC®>ˆ}†TáKMµü"¸ëß ý#q÷^}åã$¸ëî¸ûËWÍìî:ò–êÏ·Z‰Ø¿Cß¾wü‚së_RÎî ‰¬‚ÙE ­gz€…­}‚êÞÎkHØF¤ÃΑ´1¡X•¹c^¹Ðãþ2Ý›XýD*t\ÝYdv¨ƒ0™÷¶î!Û;Y!$÷&Íq\‡Ôâ’‚5®Pô§¦Ø¾Mi˜c¸>3K”\÷¾ey]O-Œ¯RàvW) 6 ~©Ð–X ú§?Y#º¡¾¹_Ã[9[Ö.óϦËú„çÑ¡ÅÌñzlš={æDí 53Ò<°⣭c¸Ðy)J_B„ <—S©™tsh߯eUÁ{“\ªw©ŒfÑ\ºµ1é•_ée=?ê{J[K[% 'ßå,ë+²Ëþ:e•ÍqÆm/nú;:ÅÆ¸åÉr2j„NZ{*o‹R^KއêÊ())ñ­ûªÑÆaÔ>™ôÆÅùâ·rì«'ƒd˜ù¬mˆLÕSÉ“ Æ%|¼Î°õ“c´ú=Ga”¬€ÔÇžÛü†Oʆöe–;TwšUΔk‘Ä$h`Žfå³,qöK“ÍÂ3iŒ•ÒÝö,H¡Ç†ãɘq¢´Ž-3†RÃÛFû%¶ÚJ[BG€„€=·Ö%%>;Y–Šº-UT-¸uðš ÅŒ‡rC–ÒJR•¾ëŽ+ou­GúZø¾L‹jsôBÕ´zºÑ‡bóÅ„—-jð|¶‰ÜªÆ‚%«®®j>…úØŽ—Œ†¡Í[!Д¤k±`µ1ð­d> T¦± <·5®§‘6mƒT¶¬Ü;Gdˆ/O~L–˜³oÓÊu‚ò›õ-)Ä„•Øë¿Ç–Ø÷ïõÞñ–X‡³*…sg$œÀZ †2†5å‚ðë¶@Òj:¡"#†ÑÛªèê)•dªšèµê·´•ufc23­¦„ V?¬“ 4ßuÓ±WûŽ¡«°,.¢únOYŒR@È,;¦eÄjØìÍ|¾B¤(¼„…É;Kl!r%å,’N‡ÑÕ¸·úµÜq×8õ‹2J;Ž-Î WqC|Ô® §ú-£d'sÅ#sª±U:zÓÕdSI¡éçË‹- ª%§56ÙQCe[E IQ«s± uôãÞ½ 4R%“û<‹pñÆSÈdŽå̉ØüÇ’Gd!í“°wÉ>+"g+“Ó=’GíönܯaV ©´vÚs¾SȼÊ>†_PŞd¡Ä€6™MUe"®TøæH§šl*Þy®n@šXr1“DŽÓ½‡h¬nx-I>wßä÷à;m‚åýgr}“yµvA{iC-S¦Ÿ¼Ut\yºô¼ ®¨^D掵ÉzJœZнúÞu-r®ú/)ÆS32iõ¶—””¿ŒØ=ÛXJ€q)+%|“ºAÛp„~ßï¿wvyGwŽGöTEÛ\(O9.§åG4Ÿ†4Ì N½´bRs£¤d¦9”Çb.EK_u3½øíOЉ‡H⥲Wõ´V‘ÁÀ…â6C@jAuuª¬]2¡EùRá*¹UÉa‡èVÑaqt6˜å’[í¤„ùç=fRÓÉ-­m«ç®Êmkm[ЏÉ*âFáC}”’A4ÏZUæI„a’Ý-Ó×–·ŒÆ}諲E§cVºüu¶úb¿*J’†ÜIu ¥$€7Ó¸zŸ–+Ñ,±Ç$à@&‹P[² ¦æW‚4vÒHD`5¯ Ç ¶O‰4HÑâDeãEa˜ÑØm<[e†KL´ÚG„¡¶’”!#ÀHí¬jÚªê˜-ÖÖÂ%îÜHíØG¨uo?³~Gë]qÇî¥ü>éûk§ºÍñžyÚ¬zÊ®M*$>ô—!@½¯õj®Kï­Ç•$–Ý1ÒâÔ¤6éG"¯ô™KVL\ZÜ_zçu-jZ÷ò~Û©eJ;rvà 1ú|ÆkqN²4#”š;w–mæŠ#S¤¬ç ör#RW$ÚéñlvéoÒÒ×Ö=5[ÊvFØ[û •-pÐVë '‹AgNûjIºè-N“dÜVQ>[ãI˜–öyö"•ª;N/}Ô†K®$“Í[ïçZ>VlºƒÍKPÌð€¥)\R+àl”÷!)Ù;’vÜ]«+=EÊ’V¾£ø×óQJOvÃu%ñI?r'o>ÃOžÃôút¤r&ˆ ª¯3¢ªé ó²ã Nƒœ{gsß²?ŽPI´fêEL­XáÚ°r+J’‚ØÙ³ÜPÝKhxik [#`•'aµvxýñ޴«ƒ`ôS»JŒÛËkêåÄ)crÙ_×ÚW4\O¹äBU¥Qœ.LÆï«­-ݧ‰rjº ²Ìx ÆBÓLHCú¤¸ÒËêx•Ç™Ö൚ÙäX¹)«‡W¦%?ò¦U·fý‚Ëò“ßy´!nó i®¾¥r+öEº1W@ÅBÈ‘ÃÉøgYÆó'k9ÓÐì©êmØn5œ³˜iAÆÚÊKj`¦÷ضxìƒÁI A}"ãµU² Ç¡Ev½-¡´ÂSôéC[vІ¶ GQÄ$ ìRAÜžcN뙓Ôî–ëÐãã"ÎkyèéŸdä÷+ûêaÆ–°Ú#-ô§@yÒ­µ=Tëÿ¢ù'ŸuõS»Ô³!Õ©O.4hî*)qÒy-m´êZîÈ„$“¿+¢L’e¹K¦D8c‚dЪÅ\iü¸bKn­6Îë¾tfâÁŒÌHÍ’Pà †ÛIR·Qâ·R‰ÝJQQQò¢vÕQaƆÈb+ Æd-Õ†›GóyeÇUÇsåÅ©JQû¨Ÿ¶àÇcûšBI$Õ×nI$“鑹$îI>䓹Ô~I£A*R¬µò¥û þÃuvÀü•ÙXP h‹ m¤_d »CÃò¼&aTV@uç¡A×Ïë–à iNyå±)öO/«Šx§–Çmö×­ÕW71sÛ…¿)A„‡TT6Qæáje¬µ ÁW¾¢èʾa‘îI8A$€=ä€7ÉØõ\}ÿIgy<~UÆç`}CÞxï¶çñÛ¶•L'á¨F 00¤í º'¦ûõ©7k =)¹nÄaÉMñàúÚJœO(úϹGûÙ ”}¶ñ¬—XeÒ×u´¸Zy/·É<¸<Â\OŸ¥Iì|Ÿ'ßΡæoóÊŠ¶ôö›€NÇèomDZü·öûjí®ûÕìHþûCßo¸à½ÁüŽ•¬¨×Ù0þ¢Bœºö±ßÒ¥a§Ú[O6—[XHPä• ¡¸Üo²€?¼hë-:Ò›u qµ…¤)*ÈúOá¶ãÎéÛpG“¨ëþ]+bAâ Ý-þ|ûkÙàºä(œ”–ä¼®÷R¥4Ë=Âß AHYãÈ‚ J¥€$c' ïÉ ïõê}ù¬Æa¦‹-6„5±´¤l¡±Ý>B¹rwÜ~í‹:Ti %^TŽþgñØ{yØo:ƞĉ1PUÙGaæ’IWoº>¶ÒTJ¸rO$‚Nßcªc­MÁyÀIR-Iûùî½÷ý’wþP¶ØÀov’Ç–ûc¸nÚ¤†Â–¤¤8B–@بÄçÉãííãÎÚ 2Ès¸žá'õœ~£¿Úü~Ü€þ:ÂKB:£¸•(©Òu(‡JÑÜäB‰IP;·ƒ¢RC(•º‹ÊRV£ÈìRµ”–ÊIãÄ'í·¿îÒ™òé¾<Ç=:ïõÞ³”ÓJXYB “ì¢T6ó°'ðýÇä5ZÛBö*HVÞÛŽ^ÿÛçïçcî|ë‡sºá'’T¤·çÂ6Ç·Ÿ¿Üû~ÞWÔ”ŸÅHQþµoýgÏñÒ®wÆ<úƒñŸ¡ÿ"®))#cçò;yÿ&Û~;°ü5ï”ì=¼}¼mømø~>þNô+ö€ó·Ô¢7Ûr Ûøj¤7`Hþëíïã}ÎçJ¿ãïöóª’Ÿù†À—ý}½ÎªÓM*øg¯Þi¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJø? ýIM_ò"3LGýŒßÊÍÅwË®¿”ÑCúD3äÈHî~Ž~Žœê7öO儯ñ­›4øêÒo:¹_ÒÜßÇú×ÉŸž5ÕÜËÊ1+iÕLcùU®¸¢®cÙ-4vù±vXöÈeŤì1ÿÙY“—•Ôtâ)øsFz:xz‰úH¿Òu½ó±Œ+7oùo¥8B2CòÒé´¥€lC¿Ô üëâ+6¬È:Šz}ÓHÙ¦ÑCQ¾‘’*žÕÙŸ.jêꧪ²š¸ŸR¼ÜûEXJ‚ï)„¸½ö¼½Øë‘×Ï8È÷b¿øo’å^÷£Hš1Äyëj-ï$³ÒœÖábѯ¹Ok~_5㓘‘²Ü»èV{„dÕgÃåÞI%=3¡éEí&ÞeKôØŠVŒ?#€õ&Ïüþ…§¤Çr,–}œw—Ê’JðZølȰlw£óz[’Ó+¨½(o)b]–e oÈ3ÈýA}V9Ä{ÄT)VÆméE½Sñ ¥×¸Ê#8J»©Ú2ž»dÖ—ÔØ·C°ú¾¡[ËÀ«:¡o.÷!s¦¯Å/íjbü¬‹'àñ®†¦™‹–½D·»J%RúóOÃÍ·]±êeÈù~'kzq»YJˆükzG…kAc&3O©— YÅ• Ù 0®àe/¶ÐK j íÓ¯–ù÷ãÇ—º½|®d»ÒÓD2ܹX X$µ¹¹—‡8“$wÚIp-ÙÈœ"ºå¤F“é?K-°Œo2w%·{Ÿu ºËsŠøÏ§6ö›®…[Qõ9)ªZJØÑ`Â2 ’êPô‡R…:–‘5ÐìÓ¦'Áð+™•óí1Šƒ_2eZ¤*½÷}t©<â™LÇ[àúSúÖ[W ¯§m‰ÂÏ:®æ‚c™Z%ÞäÙœÌf‡ÅcML_šäùCz,',^ib%|6„™sçª:ËPâ8°×qĤÛéRïòKÌ«Ï1ض‡·Qa2E»—tW8ýòU]å%ƒñ Ê[=øÒ`N*+oE–Èú”‡¸¢nA=Þîíº{ëè@xm½Õ¤ém$0’³º»)të,ì¦3s?²ñ$œæ îGlÏé/Oí0™Ûs+æ+*ê†mœBUz¤©1ëriQ߇W¨a‚'0†ˆ”G #´óƒr.b˜Tz±œI™^õv|Œ5‘#ªAŸôZ’EdÓ`eÒ$<ò\‰é{v‚‹ÝµìSu0e4ùýÕ¼8Ô°lç6ÅÞu¹OJCµ˜‚Û+¶|­–‹.¼Áq×£¶C<8¡åîN¹æ)×L¦ÎϱÉð6qΟõJzëp+Ô^×(–ûÌ¡FSQèYb´dÐã8õo£—+Ó8¶cËܹÍ7sž²L‰Óžrd·]J•%¦š#}J`Y´Œ®ÓVµb“&Å­eQä”È—ëcƜà ÊbD¶Œªë3&êi·8©m¸ŽMr1Ô]M/¥u2ꯎš¹öR ÄyrÔ 9ò¡33޶Êz[Œ´ÛAhlwŸJx'rß§é鎞ƒ˜¢áÈ`™ ®"–àki‚Ÿf%%štþxšéĆP$Öİ-””Á1)س™²æÉ‡ dÙÝöS D/Ä+TEKåwšoim–Ý wاƒŠò´Øœêìÿ4Ë‘ ÈY%n/fËÆcQ31¹*’ÒYuRPcöZˆ îµ®ãÝDÈÌJ|÷‹Š®î–nAC"%²íTZÖÑ"ʶИ‘Œ[xD·RÈv3CjJÛ°©z§u:^7ei‹¢³ Í,¾UŒÛ‹2ý¢dHïw®k=2‰ô2±±!åÇR™Kûóå¦ÿ!ðî÷íë·­i&± n Ê¼©£VŽ`ñ»ŒfV@Ѧ›µÃJq*08Á¨ù-ÉÔÕÖ!dY×s˜\Y‡%…täY[P׸ètÔ,¢[Ä?;î·Ûpí¿CÉñI7V¸$ØoDÈM´†_î¥nÅrà!ˆ¶Ö’êTûd‹hí¤ý\¶IÓæuJÕ—­.¢ãÉÀ(®Í ¥ñ²áh§X”Ô XA…6ýUdÇ)ÉH}ô¡×ZHJ½d9;´¶X|bµ)¼žôÔ¸òŸZ=3BºLäÈd! KêQŽ”(¡’Ä–Ö‚Ê…«`ßìø`~µ˜šØ4!µ‘P~²¾·–^̯$,HrR¸ÆH'¢“M/&}÷˜u7Y›xá’áSL=3 mþh@2¢CehâSõo¸C¤‘)¹¼S¬ö5•0™i%fB€¹+un‚ØBƒé qYQ!\ÂFÄÝ¢»rÞMû ކ5ãõ-©.­Ã! GaàòÂ’Ú”^)(O$€BŽþ+‹r䌆Ҕ°„·_²bdVê§-ô©µ6R€ß` µò;·—ì?O¿ó]S“¦9ÓÍ~__õ1.¬ùc™×n˜î­JVp¡kM 8Íå‹“æ6ã/›X©˜â±… I"2˜–âÎ=²ØK® >U'?¸>ÂN;26®bE‹=©­>³ØŒ˜lίìlòb´¦ŸÙ Shs‘Ü›w¿­§ %Mσc-R ‹ iP–ÊR„¶JƒâJŠOý£¬¯ìQ:d:ŠÄX˜ÍI´[²Œ`Žòëq"ÓÙja {e”¡ ¡’tÉû÷~¹˜íÔ7ú™2RŸDxÉ G8]‚³x cþŒÊ«51çâ·"²°Ó¸ÝŠ1¦C*¥nç¸Ü†åsž;¥EÅ ‘¶æFèæÖ™ zdöì•-iSm»:Åw┆R¥% RÃH‚NÚ²îFì¡XÕTN“gÙ$JyQX %(*´!Å÷Tò»m Û¸•’®)^Œ‘O@†ähj]œÉŽ×&½Ç¸&F*õ}÷³ҎeÄ£’Ò¦ø¤)gR´=X•'òàcQ@E"=Šê#–0¹'=2Z¦êâ9 ¶¾ŠB܉,w‚J¶ ©HÜÄ‘ºwíîÖ5kµuâ#«iŇæ;É¢¢¤Éqä Ö”«JÀ_¹o¶ãνª²vg©)tÐ̶Páu­œHq—˜t¥l¼ƒºy$)$¨¹S=v0„¥¶QvS|µ,lÃëd+ulwPG">ÛìÜ«²è<²¹Ù.AP09èA 7߯y_È’mZÛP;Ô¶TT”í³ÅÍÀ\NÉ$mùø×­AqÒg¶[zhé@*î%l8µ©Jvâ ±ÇbNãȹ j¥?`Ò›åúd¨-J.ÊäA$î½¶èÜÅ.Áè]°Ôhï‡9+u\R xûAß}ÎþF”0¸é¬éëù²Ùùçʼ~ݰ…()›–…¤“ÍFBRÇÁ'‰å¹Ûmüí\È«a”©#ÓÍfB¹å-¥I)OƒºŽþ=‡'^»)MÌ‹ !TWÈ‚žÀI'Ù\¹yܶñª¤HS&6É ïIiƒ¹)âI%Cm÷#oø?Ž•{=¾¿˜jõÒ½<±y:2äÆy”))S‰)d„Jüì ö{{ÿ^’£­ÀÒÛPK¬8iDøñZž+Nà‘äxÒD‡ãl2Øqå…¯e,¡mb¥¨|Ÿ ï¹'ØkÖ¤—Rø­Ä­ùK¤îžCmÁ#t«îâ4«…$øàÔtÜ`ùFõäfByÕ%N¼¤òàBPØÙ £¨ì<•sàxó¯Z³ e{¥=¿ýH‘ÿXü<ëßQüÙ/”‘É´($O%’OâHó··öòÁR]HmAÆÊ+#ö¶ÜÉ'Áß¿J ;zÿî9ßþãT6Ë¥M÷V•%ôq¸9¾ûGîNþGT––6op[Jù±ç°Vá'Ül Üm¿ªÛud§šx…‚Ry~{/ÆÀ‘ämíùzƒŠ?VßNûrò~ÀñöØý¿Ë÷ÒƒHñÛ×˯—O*ð¡@¬ ‚Vw#ÎûýøþGúÇåªÔƒÄø§a¿áþsþ]ÿ~½äyãû?ñÕÁäøéWϨñòéåòª8î ~Û(Y?ëýz¯M4«M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò•ù"ÎE¿…¤ü"ïòêŒÄtËô'Ó¾- ””äc5áÚíþ‹~Žmuóîç¡âïók¨½Ÿcýcâçy‹GËs·(˺yN¨Ò$Ïê,.£b*i#c‰i§´¨÷,9Udà ST•-ô!´¬ºŽKŒ¼cÆûÙ…ÈR:•šþýþ_Üù¹‰Àwøö»]±ÞáÀrÕWy. UwI[ÞâÕÙ õ«ôv ÍDK™Ž8®Ò…4i®¢kËqc´L$’êÇou/ÁÞ¯.ò}û›WäÓ‚´(·ÚC ‚F·8í †êÞ8g_jï¬.d´‘ƾΪÌÃ6ŸWðÇšÅc«v ãu™ÃßGëko§¡ÕW»’tβunMŠ5-–ÞmVíúö¥@È;=½„T¸ê‚N[6tßJ~抩YMSódUÍiQåV×åùÝTi,¸¦ùl˜¯¸Ò’ Eþ iPw]HÇâÆŒæC"¢4g,!Fˆ«§ ³ËI.†kãÆTò–—a!õ¡´×ó—]Wm„•ž:òþÛ£«•a“ÙTUR¶ÜÉ·³!B¬J]PJQ!ùën7ëô¥+wx%*>ÕÓmò3ç‡¿ÇÆ½ ÁçƒÚÐ[GgÄ-íÕ£ËqÄÌrO-Ħ\JHKDB3+—*|ÁÕÄ®£ø~êíH~‡§–•*3.ÉU~=?“A*íÆJÜ\j‡¬£Ê”¤¥Jj9qí¸!JL§Mm뺉ל÷©¤–­pº¼éô\Š pÕÞÞµo?!³’T„7=ª†$Æ‹"KÙD‡»IZ¶:úRê›JÖ,+æ@ŸS.(z4Ør#J­‘  €ã2XS‘^Œ¦Â‡4)Mdì)¥‘M.²ª ’ißl¹E;Ѭy’µ¸ŽÁ*ˆãeÀ°TÊŠKœ·<lj±÷Ýû}⽫Ãÿ«Še¸C¨nZ ™’I`¶6¨é(“H€£DÌ¢"u¢â@²¯—zkK'"é§Äf=[}Ôî¸ÔDú‚G«²dDŽ¢vH/:„«r6“¶´¨9…GQq¯‡n›Ð——™cYFešQöjn¦Õî±|»¶Üm˜Ê!À”úåIO§îkíŠÙu0ÔÊ­’˜öâÏ5¯Ä},Ú0¤‰Ñ嘥A»VR%²ÿ ¨€úA j˜¯R®Ê͈OV.Ú(ŠnŠìEYG.Áù›mT×}”©q ½»¶wHÜRsÝÓÃÜ>tù×?噎Ú5º@¼¯f›ðõâ­Î"a*òäìH¬Ø”iv}  ®%?cñ;ŽÆÿȶAã;¸ï·áãßmeuPÔ~Œã Ûr7;á–ÃÀßÏðßaùk«¹‹¢ýªG.(‘“.9,U.}zo`¼KpTç¯,(îÉo‚’žîÄuU¥ö3Y:²ͽ$ ®Ÿ”F³Ÿ_l§•³GåÍJq¼â‰í¥ÞäLïŸ,|±^–¶CÊ›ˆñ%ü7 Ç¢–Õù-ÛÆ¶äœ©ÁÓ¶(ø…àu£p?ÛçO<’ÿ¶ºïÇm[êD¨ø·R:k\¹éq˜òì^ÖÑĨæ•zÄRç8Dh²ž€ä5Ê^Ͷµ6RR Oj±•W:¶‘,S"3(rÉèÌG2u-Äm •ų!×Ô„F@ýbÞ)KC¹ãT[ͨ¯"Uܨ«•"ÑøÑà¥+PH»)I`%Jâ~¥ìêÓ=Þ¿1гZyåç"1[&RË‘YLó£IÛ]Hìt°ÊáCaòr8÷KMÝÏUsˆIY Êò(LÐJSkiñÚ&ªŸ¶Œ—•.$¹aäGˆ%‚¤î<ëI§¨›u𻾱…Kš*_œÄVG7%|§-~ÑÈÍ$n\qö¡¸Ûh©kRR'm}/Æ¥u­ÙE›u7}©ÌIŒªÑ ?®nSk1DfÒ»‰Xi$Ÿ ÓOeKi (§VØW¥kiÔÉ‹*q %Æ’äE)”­*Vël HVÛôÏÔ|¶¨,‘‘ciƒµ¾Ê€ †þX¥–XƦҊÊÚW¶uŽ2ß?]ÜÖug%Å#áÒDöê1ŒÒuĶ’¶Ú¨‘‘㪢­ª˜âҀ̓’Þp½ D<ÛQÖµ $¨è7°r\[¥8$çéEEö(2 žËˆ™3†,.ÞUŠT„ˆÍ“(е%) nvú^•Žz¿—¹ÎÌ·cÎôK޲Üööï³,1û Oy·¿^R6 XÖt/ÚK…}S× ¤Ñ#ʆå“HA}[-,ÉJQàðÙ€vÜiŸ—ßÔý’IÁ±,ÆG¸]É)6˜ô¬‹ˆXA•Š8KlLŸÛNT|ÞåœjîŸå½1|+ôÎUýõ=u/iÓ.ɼ†íÉÐ-c¤ ‡ ṙe…vÙì).)*)§æý5·I#ó1²¶Ø+ßöÔÆ;9¢¡¿“È ŸÇ] Û&íY€ôê´]8Ñôñ“ 6ka[¨öXR„¢Ò¶*Ù â¡È¤³¤=§b"SÑu÷ûp‘!ÆPë²8â%Ï­Ç»IZ¸³ºûaGö៿P3]Ð*2™Ô„öhP…DvÓsQ¶s+jÒDz?) ÁçýXáïÿílkÜíí{ûëÌÉæª2|/%šKu¼«±–RK0o¤Ã•!@Ó z9ao(7ÜÔóЦ= † “ŒÌp¶’W-ÆZgšœJYOlß5:P–;— B>¢òkð£ÆuÙîÇb"ëÝ–¶šŒ”¨úå¼Ca$ì—áD±W³;|~x®òA­¥~`RËlFFBi^efí «1Á•°Ù;p‰…V2os˜L»"’6k‰ÏmÖÛZŒêÜr#l¬cµÄ-è͹1KC‰I7ŧt¤o5Sbd9Ä‹ª§„ºªÌlU*{;˜Ò'Ͱ{ ¸@˜ñÐéI!µ¸~­oŒI‚ì4IŒüg öŠÛìª'aî´<ƒÙ ¹!$¼ƒE|ºÙqË•’!ÉŒ¤s€ë0ðTX%°°väŸ}È$pÏøòûÀòòðÂ[e<Õ!œNêîßRgLz¤œ6Ê®Ñ5ªá  ù··œ¾fûæ0½ÿÑ«•Ãý¼ägþEÇü~¬›­ž$êéK˜R¡È[N9LG˜yMºwNφJŠ\;mõýGm·$m¬„¹Èq¤¸Á†ÛS­¥MÒÚ‰í)Ä'õ‰BŠUÛ*I߇v•Õ#!Á #8#£dH07ê5ï¹ü¦µIà~šÐüxŸ?áb}µ„,"ÐÜäæÅ}‘b"Xו¥DM…é\ŒÎÀ÷môvAäB¶ؓ­ÉÉpQ)¸îHŠ™‹I-0·X”…o¿m¥ê’vþˆÙ[oõjëÊŒ•3ÞS)+u(cº¦ÒTñ¥,…ùS¥ –þ²¸7ïçCË2:†æë˜„eXÛ´7éÛyÕ2?G¦zØúV$c©†·ÝÜ7[sÜŸé]PÜ6¥3#é ےФþÐÛW"Úû÷ж ½{u%JZH,E³i,E’êvä†Ö¦A+#`—NÁZèo–ÙSêi-žJyH ‚TžEÍÓ¹Y;ù+><S-4¥<¦ÐÒGÖ§”¶”û}j_ÐÛcàøxJ‚Ü( LÊîh9c¨de3€©¯Ó­2ì®,™ú¢H\±Ýòù†Òƒ®·¾Ü›æç¬ •±ØŸµÜhmTŸüâÃûeºu6ÃŒ8ÚTÂÛ[GöÚ¦Èo¡IúHÛ'ÛÈñ÷©¥4´nÒ›R7Pݵ!IÜ–7Hã¸VáCì¯:WTL9áÉ>&FV$ydl<1PõCi—_žÿú«CüÚ©‘ýû”øòΣRÈSeN)¥{9Ĥ”¯mö^À®;xVçŽßmRdº[ lº”#¸6 ”þØ}üû{ì4«§Fz1>»¶Ý|þU |ëÏàÌÿíÕÉ£s òÿèë8©Ò G%qÈµÇÆäélçêŠE#’€NäyQöpwQÀlvÒ®?7›ð ·ËçX(558®-®:Øæe+JÊ€'ú<‡¶ÿ}³%ͶKî>â7ñô¥Gî¶$~ZÍqM¤n²”¹Q?¸ï¸ß϶Äýüj RQ¸öÛ}ýþÞûùÜm÷Ûm¿!¶•q¾}võÇíX;o‚üÂ?‚ ñ÷Ø}¾ú­{<¢Pw¥§¶îÀüÈãìvËJFÛlG‚6ö;í·ü<^‰â|øûôý‡ãäÿ *i<†|ñ÷¿Z±¸s¶·ƒÉ_`“¶ß—‘íö÷ú!y ¿q;¾Ûïãý$jð Üùöñü?ÏÄþ:÷ˆßþúvü·Ûíí¥\yõëæp;½ªx’AûyÚv?ŸãùýõsM4«M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥~W3ŽÓ¹ðv:êaÅþW\ÍSÕEfå–¿I†^ž§Š´Áù·^!¦¨ AUÞô‚)-úa¹×R‹„cK©ø¿Êsz¸V9 f[‹VYX°ËÖX. ‡À›Œ¢’[ˆ/ÔzIî¹oÜ‚¶ òÔ^uK>ÝX|0Bß.ÞCü’~šÿ(_É ©ù0É=wÍý8¿í|çô_çßѽý?ªñßíý:”̾?I/²ù´@ÈðÜs©ˆ€Ž¦âµjdÆÊU ;p]‘Êc*›Lµ¬iºÛ‰5ýÓ:2w)Bù)[ÈñïÏ~Ã*qòôó¯ÄÇÁï"×`’¬6–öS[™mñws§‚^'’ú•îâ¦+tc;D]#GæyÍÅ–Mðçðù{v¥=mm˜|=XÙ<ðä䉯ÛÔ¸ü§ ·%Éo!jÿÂFÛë¡u"¾Y×þ‘bYXÖXÕv)Ÿæ­SØ2ÜšË ’ µï̆úUc•0çL“!IJëÊx$+κvqÓ Ì¿Æ1h²×Öâ¹&}\Ü(­ÊBcás£ËƒR–Þu¸Ï5¸¥îKq–öZRµ}:§¨½5Vk'½§È§á¹–2lœw'®‡ ÉqصŽ"[VO«ž“ήɄ4ŠñAC̲ûn%IZUÆ?òù€}i8}ΙC/´a8. ]3uì™.T‰W.½¥æ”Gb™T»/-èÌv¨§|Ba5m¡Œ_Ϧ¹Ae!1*šÈ±XWvu0P>˜ðãY>û­Äo‹QÕ%im #[OÃ}éŠ'Øûç7ì5¹`}7…ƒcvtè´ŸwkXZÞdÙ5šXù•åõÊ8L²}–ˆì! ¡˜ðá0b°Ó)+=Ç#ÓŒ)®žaæŃ֌ãÐ= vÇn+Ò‡©zGqqÚqÆÚ;ºSÅ+PÙ ƒ¹ØBzû½ø'ãï9®ö6sÁ-£ºXíoÑ”2žA¹»µž qƒ¸Š(Ú0S1Ž^ÁLóž$&TöoÖþ¥«ÀrgDܾçîO]ÀÐ\:ô­¶*k¥ÜŽÃÎØÔ°ü|n?-t  k c%e›¬G™dYƒŠz3qŒGršypPqÎëQK|PúÊ\tÉ ØoU&Õ.eœeèžô‡sTãIv £´ÛUÿ£•Î×¶Z|8W#Õ%Òêûˆo²¡Á<ßLõôáÚºEk2CÂÑ“µkròMÚ^›[Øë†íMÂê=¬ã‘òA¤¬—ðû“õ=èÑÏP•Ýf¨ÉTÓfêíVj¸UñYÇÔµ<ÍV·&8aÅ7ÚÙ^z n“;‘×û|²º$ë&ìÆá=5–Ý‘CSQ‰C°€+u=Êõ&Â[Ö=èÊinHJ]Z”S­Ùþ‡ÆzÂ\Då6í`690Ëì:~˜° t›ŸT›šM±GÌX¤•d„Ï‘LÙì­ðB\JU°’ÉúJ»«‹ë Œºçƒ™Æ‰5ª­‹ö¯ZˆÇ£G“% z–tŠÿæåÄæ_·$‚¥k#¸ûü?.Þì}+秸@…­UÄQE‘k‡ú©RØÞðåômr„™H›Æ(YP78Ȭ§^t¦öv‹SÓæXt­ùO;õ-÷Åíb …• Ë„%å+ÝJYW’|ïùÌX÷½Néž=lÃ2èÛ‰—äk¯”ì)ÖõqáÅ®T˜ëÝ©dJe%IK‡™IÛÆá“`P/±Š¼V+맯¨ŸŽJ„#0‰¦1¹‘¥E†”8â6mÄDC t¨­ =Í”­Ó«ù†úLiçµ—Ac³^›Iw ˆòÜŠ©L˜ÓbÈ…(ó`ÎŽCrc8SÈ¡§°RRfz`ãsîÈík9ðá”Mˆ¸X=¥üsi3<éÛ#ó¯Nf”bÀ1Æ¢¿:φÄk›þžÇ@g›Ö¼63õÌþªp®èœ¿³¥Ch B—i •**ZÕ§‡5×(ëáãý_¼«¥¾®ç«½›] ¦ãBnÚÃÕJDfR†YzL%vÝRP‚÷e*_2õžŽ”Öœf}4»K)WwHÊ%åD0Õ¿é34äKfB=3e¸ñॄD È••êwãiwks+#È®‰–Ңłƒ+Ò@… DŒ…­Çâ¥)÷Üî/m€;~Ÿ þ_{‘ ³™$Œ´@~(˜>¤>Ï7ZŒGH•Ph NÐÒ¡ôÌBKÕõa9‰œç3ð<È]æŽßsÜByÖ°Å%m&Òlв;(½]þ(ô›6ДϴVP¢›Æ¦IHJL±%Å-/-a=¤q â6í4»4c#O¨TÔdY ¥óí¼ÂC?3CM¹­}æ–¶î¨%K ¤m­f§¦È®™R—שּׁh1ÉOÇ1ù,ÅK’VÔìÖÒ$Ø"¼:±^Ûå"9PÝKãåéåñûÍlÚÍ¢å‚Dr&u'à;\Ç(˜dïÙ]]Œ¾¥AÉ^pª¸3:m˜eÒYeY2¯¯n›·Rósi¯±˜òˆï2ÔhñZŽÛ ¨7ÛqCæuÑr¥®E—KŸq;8îJÓî6â·h¦)`oì–| ]“ӆߙ5¤ÝØ1ŒÚZ¦îËmˆÞ’Tþê$<”Î)õQáJ’Ú$J„ÞèqÀvZB†Û]Å-¦ãòÕ!qÍ ©³m´4‡ úG¢ö¢ Y@ò@QÝ;mçN¿? Ûöý+QÚÊ”¦“‹T'R~+ÃpÒI?dŸÎWo¨²“®õ8rÄŸûÙcþÿþZ„uVPËvFS1´¿Zã·voFtÇ“.º#~‰/6 PêYSÎ<X)*‘àkcÈèÑUª±ÉFJä@‘Ým¤º `ËjXO)#g ! ;ý![ÈÕ7´"á0Þj[ÕÖ5’ŒÊÛÛ®GuM©§¶ݹä4®2½‚€Aí¦zzŸž>ü«Ó,.ï) ÂÓ‘‡ÌòH˜'½NžÖêÁ8Î9døíǰ½ÆcìÍÌÏCÑZý\vØ·Š©vPÛB6KLÉ~+Em'ŠX±ÇedrfÓEc‘7LÚ 5a‡ä5 a¦d³hÝsrÒÓa(C¦$‡[æ ãÈïÇ[z0ȪªT¹R§YMEœ«…š˜l™RS@íGL^ÚÄt‚„¶‚~³¬ˆ˜º6³rÞc×2í¢¦™/´ÌPˆ …„FŽÃƒ#šËËpn¥½Åd:xzî>~êà-¤Át³’Èú—ð3Ù; \ílº¢¬ƒIw‡|­†cwÛ™U$0„·êᦼIJŸàyM¾Ú]¹É|ÖIWŸ2SþÜ/OãSH?3õËÿŸWk1Ç!Ë.m¤»Uׯ\:Á%¶L6]â—K)D•¶”´©yí§öw:”f±,Úͳ¬®dXq”Ñ@ lDS¤,9È•÷Nà§dñܾž>¸5èHØi:4p}^ʈÚq» €;ŽH8Ñ}yxöGlòl•ci%3‘ÊéúŸ~”X˜1ƒˆÁ9²’/ïûˆlä°'#ÒÊŠ¡ÿï¬ëÛFÑ"š#À.;’e>ëj¡ÅÆc“)ZO…©E|H <{HØB¡¹¸¦Ã…£Í( #´ò]$å!>þ7ß^N‚%¥¢[/0ð~;í¥*[NAúUô­ I(ZáCJêÈIrsÊÛ=t9,<7ãëµ´1cm”„G ‡%- qm·_h÷‚<'™JVR†þvù¹F¯{w¦ÿï.k2/JR[Ͼèy÷Ü JPHJ@B~–ЄŽ(Hßa¾ú®Q€ÈZ–9¼®JHIýk…dqìNÃñJª¤8Æ›xke`=Àcm†=+èzÝCÉJÀüÄd?°k ¡Ñ%$'¼Ëåàqn<ñ…+ö”SĶÛΦ™Œ\•…(ú‡ûÄIà”qÈúA;íøkV„÷\1ÚpºÜrÁ Ü‘úÏÚRIRPvØŸ}*i8]ºjðØ–½MýõëÉþ{þ Ëú†®H˜ß”¦OþˆÕճɿœäV—@ s`I;îü6óùyÕN4[òVâ\ºFÀ#Ç߯•¼uó`~j°´…É@X JZÂT7e[FÛ‘²/>Úõ¡Å¤~Êt'ð )'aùí«®6J‚Á)Ryl¤€NÊ#t”’7}ý÷ü½ýK\SÇÏô‰>7%[îOÛsýCÛÛÙW¼íï÷ÚxmðKåѲú§ùF«Jx¤ÀÿÖÿ¢SÇñ÷>û}ö?b (O!§í^$Jÿ¿ðØú?ëÕÍ4Ò­4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥|@ž¶uYÌùyAÆGEÆb)ˆ|¦IÊ„~‘ QY¿éŸÚMˆ±?0M(¯ô_-ýY|¿³‡½gyµåR:-ŒÖ.Ê3›¬ºðz(}÷#SbîZÀô2¨UêÒ’âø=Ýgõ`'öõò›4ù“}#OŸèFRr$dÿ ý,ù<‘„žŸ~˜þ“~—Œ“oAËåÌþWËæ&Ïù¿c—·ÒI¨°“Õ‡‰p«çJM}œªÂ\x’\ÃØc±c9>KM©¨h}Þ,²¹+m/nþ/”d¸ÏP0ür obtÒ/f@Êq'§³²t8œŸ‹æöÌ9î'Ò&KKm堡ϱœG)é[})êÎ;q`¤FêL|þž‚—VØçò|œª½öëá•IœÕT¦Z®¶ô‰uL-Ei @ßTååâN7ùãcîë½–{¡< Ër£*Þª™U-­²ŽÚHtäB^Á§‘¥ˆ† Í+6¨T§{é¦q}Q˜Õe-×#3éõå–9výc.µWh¦ 7gSw+ëqجZ@’ËÎC[Ë쾇Ѕ†ÊR5êN¬ÛGø}­êäx¶7ïз#ÑEkÐEŸu:ÕuqPÐqåGaéŽÆCÜ\Z’×ui;êÿJê.Õ æÚ¦Â‘þ£d’íêi,˜,ZÅ¡­¤f’™v0”¸“¬ŒìÅC_ëšCÍ%ÁÍD 6› ¿ºøZ¢Æ#WI“C¤¯²…U`Ó°$®Ê‹"ùÛï³) ¹Ù‚/§o¼”·ÛRˆGÕ©¶|²¹ðÜoú÷í^•š÷’…Vå¼QáÔ¬^FŽ{ac$Š@Õ3Buv†¦.ù,+yÅò^¢PfôØoQæÐ\ƆÊâŽÆ‚±ú¤Ö[ҸǤ4ìÉBlfâJKðlwi÷;.¥ö¶Zxm˜ÖOmiÔN¦cRÕÕâèÃUPÛƒwRüÉþ¥þâ½Fï¶‚ÏÐßi§u“Èhtö6]JêN“5Œäxí.E®{¹-TЇäd¹,hÕꨂ̘ÝlfŸzTÖˆV[J²¤ï´â0fÇê·Wç=S0ç£ôRÝŽóq¦zZ9-IZRLwmþÊ×ÚqAqW<|t¨ú­w·yI€$³Inx‹$RH]š[oåÒ;kgÝVM åZПêVxªË.¨D4ŸÉÅVFýWèòà>o,1È6âŽ~J‹Tbb&ÊZ˜j`ÃiIqÂáæ­‚ï.Ï­msW°—¨cÒôì4ĘÖ™#,¶n¹5ìJfK ©­ÇbCm¾ë“\ Xí~Ç?\ Ž. oÐÔc7ŽÛ̽±®zŠ÷UŒ«´ÈUp«÷®|ÅlÆ‚ûÑÞ‚¥&X˜”4†É; ²S×R©cã7×C3”n1 U5ÏN„üûXôòk­e·úªÅ•¹ r_m¥ÃRœJ÷:»yyg¼d`Ÿž}ý1·‘eœ…æMt±”„Ý0æŽôÅvd†2R"ʶø? ·-0DÌrÉóéHéþ;˜ã½–õ†Áõ!¨Wö0ؖ“ɡêi÷YK ì‡SÜâ}Žé›[L¢Ä2[šòÒgUÒÙΈ^h<È‘…ºÑq®Hî#šG$sO!ý!ï®W“b“©úO‡ã 0ý„Ê[,‰I†Ë²ITxÎy)e _§eAå—ˆC(î,¥;‘Òz‰ùx&_3.È‘#¸i–mo<ó«ŠâPÛM6•-Å­D%(BJ”NÀnu¶õßÓoÞÕôÕî4Ü—,$6ï¤dœ¥Á“F6 ¨(8ð_*‰½Ë-k±rdbIÈò‡1êªÔ>•" mnc6벤6ÚÆ$6ĉ*i+A´5̨%f÷ØšrºÜ±P®lhé"d«bªµ«ˆ³¤šÖâ?OÈŸjYާqAl<‡JC‰ÜådUvjÄ0k0$͈ÌÅïªiM“%x‰a–WÄ™±!ÇʶZ–Ê›™Zå½=§P]Ëï VϯŽqzê,}»ˆ®Öʳ›Ýòô¯ñu˜Ê~;0Zuä¡.-kPúRH wøþ£üøü²8Í%ÈcËiLÂ$å Ôcu0H]ØcK0—$êbQ! ´@Èr¬~ÞÚE\È×”övQŸ«„ä3W:¢*gϪq.HxL`BR×RŠ[Œ´qPÛ·)Ëœk#·ù_èî[c 5qã8ÜêFíyü–S³–ò“4½²= e´¶^Ih¸‹OzΡ\S«äöÔÐiiïÓdõÄ Ÿœ]Ö|¥0b¥À ¤ÅJÞô†B˜)d¨'X°…µµn‡?Ik^;gNíôÙÕcq1Å4¸sŽíL6JiLä ²°7ÓìíÓøøÔ&®Ì³˜ƒfb\™_úl«±u Ó.—%t™ÿH’‘•äÊi–Äùwè½=¬ˆ&©qU……| iƒaf™áЈî¡àë‘c¥•6¦Y!ÂUû{í̸Sñ&a-“êçÒJ+k¸¥Ä5ò%$²®Ií¬©´{+dý;míÏk†ïEE‹Ó¬-,Z¯°n*•Rª›{5SÞžeŸHËÏ6ó !îêP”%[·|‚ Þ¿Dv^y¨©ï8ÛKZZeº©,%׊RCH$¤rYJy÷ÛqÇw‰øw{ú×hÞ]/–ŸéŒ™'±3LDÈ™J„Ò ¯d.݉2ym¤ºzW'A- •XÈ/7Ýo·*{ÞÝ“ä´âÂ!Å[+c¶ÆNâSЪmf1ǽÙ óO4wXaN7ÉŽIæãq¸ñ¿ßPYÄwäãî5—_sÖÓ¬6Ëku|[²Œµ«ƒiR¶BRT¥m²R ‰©‹æÖíËM¡N8åm‚BVµ­q–”¥)H*R”H IØu>þÿæ½lX<ûœP¯€oÆÉ{.}FM»™­˜Ûm=ghŠ˜±[RJ#™öM6JÖyÝÇJ­È@G!¾úÖ4˵‰t¸ó^‡V-¢IˆÉˆ™MLuÇ[%ÇjQm q*<›s‘C^·-xå ±ã¸ôºuQÙ%/=é#¶‰ %*â{Áµ¸Rƒ²ŠÑÇnD aM‡#&vÚcdE`R|¶®eQ]“,ËLõ¨4à C([M°½’V¢Fà§ßß}qf—#Imz¢ö´°(ÚÉÛ Ccót:w·“‰aqd®Ü†ë6‘¤:Ú¢²¦L1Ù—|Ü_¨lÇäé _qpAßVã[[p¯¶“é~Wg-¶ ,I†Ì¥©¸rW$¬‡V¥q/¶[ `'ÈØy»÷ó+¡L†Õ{×5rØS2äC0Óž_ḭÕ-³Ã€IßÎÚ²Â%ȃSDä)M¿TA5õ´¡1«î%Ö¤~æHCa¤ •nTyS.:3•ß–Ib]ñÌNäj2 ±« @FkÖ–jLëHþ›åµò`Å[K2%³in\„ÈæJJ¹PRRƒËσ–ôË re7X¸èj,¸²ûJpÊyö½B#£Š‘Ù@d§“€)\Ô6„rÑ*†Š¢˜Óî©×ß‹e€·‰VÊäH;øÎOr¦LИÒncQ—l4§ÌaM8Gø"® q%['‰'¶•°[#,ø:y‡ý¯‡$.3ôl6ưç9oÙ-Tɱ`-hް—Ü+y :‚7¸î¤ƒ¸ò÷ß|©Ò^B£Çÿ-å6…8’¤4†ÑÍ×T WÄ ’À*>}€ÔsÜbø•º„Fä–ÁYæd¥Õñ ܨ •nG’O¶³æ¥iz´6·DW]¡±É}§‘À­ ÷QB¶$<µ]rØß é>Y'^<<~UŽ'He¹,ºrS/0ËjBT†ž¶ì8¤îJOc¬Ö¹?(Éí¸†ÛaM'¸‚…)K_5ìôP¼n|}*ŒøŸúzî¹ÜñœwúüVDwVã²R­¶nGm'cǶ²ÜîIßǃ¶½,ÈZÉúFäýÏ·á«{) u®*%kYAí³‡rJ¾Å'}ÁØý†ú¸‘ÛR†Ä¥INÄyú‚B‡mülwßÛJ›žóÝŸ~;·èsUsRÂvNãrT7 ۿǹöžûÖ ÛoÃ?ÔvñöðûP$ƒ°+o>OöÿÏ¿àv­ÉñÈ’«aíøƒ¿üÄiZ¾¾¸>ûê¤@ýÀþäê½xÞ5î•i¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJÖÿJ¨FV0¯[þÙN?úR+}<­þF'ü¯×z®ß£ß×~£±ßõ;þ³µÛýfµ<£¬}8Ã/ãcYMºÝôDuÆ=5„–+Xžïb ÷SaÅ~#Ù¸ÎZ¿î4yëLRøQ!_þ!Ÿÿ¯IÖEªf=ñjæ@–\þ_šÅ¸T¾*X£‡BâV\òf.@d¥ÂTÖË>tøò<~õñ¥¿¹Ã¤B]]Ä­*»'*Ö6 ¬ˆL’°`¨¥ŸCÒÝç5ê†Óï—§*ºD¬Ðû°âLJai1豂U*y‡Ud–«¢¥IT™ï6ˆ­òغUàÎO˱ºüYìÒE¤s‹ÇªùÚî"¥Ù±•V¦Òòe²˜hyé ©¥…¤2ÚÖ |')2t H™¸þJ’õÃ}èÛÄÀ_ʦBœíÏîÿCö gæ6[¡ýÎÃQÕ)XøMÎØF湈ÝIG¾ü>HÎMfšä³ï¼t¶ˆû}! ¤ 06õ_ÿ[íé÷á\£â·“òâµµüÐFUù‘½ƒD„Ny˜u•¤fì¤F5 rú‡Ö6¹E™Eµ”zú&¢±1v;¨o±)-˜Ü[ T‡§›C1ÐÒ¤:êÐÓm)ÂŒÇzˆåUt÷ »_P§‘n¹I¬~¥QÙõ.‹8–ME•ç¾—$4†Ücw¥¥'\§=@v@ãKHU;ùÞ",à ŽãÌc³^¨ið­Ð¤*É ©^éSÉG‚ 5Ï:ÀžÞKÕv¡•"ì ¦ŠÊ»gŠ9+9DGW 'oÖ®O4â—õ|¹~¬n õÿ ~¦ºÜq á2H&Š%UhÈa#ÈÖ’]kGÕ¤FºU òØ‘Ì}cF“ôž%Ôl77zd|jáäAi©°äIð0ÞQC£³c3’«ÞXâÔØÉv2•Å<ÁRu°C¿©ŸouGWv΀W›h½§ÓéE« “÷\@aàûRÿP· `qs‚¶IåÙQcõ‡¥?-Kmº¼s6‡11ÀJGÙ‡ØXGJÕˆhÅõiY=±¹:ÍÄFÝWêùü[À?²ŽHÓLŽþüo·¯Ê½ÜÏ©"“”î/M¬:#!±k°È#”`JFÀ»ƒ‡ €»#½GÂØÈÆ*åÛ º2‘Löeª+v. -šç¬’É­jÉÔQ ÉI¢B8‡IاÝÕÖM¨¯›'±.ö[ЪÙí>窓3“k›HSmpŽÓŽr|¶ƒÇ€%{$üÎÛQ×ðù‘Hx$Û®þò|—NÆPÊQš¨Gs—øA48ˆ­ øt5Å#dx×VÌ»ŠÊºB§†Ï~‘Y@Μbgp~__-ÿv„™ç§ËʱäÌš˜GÚ[SJ°Ñäæ3åΩ#U?ˆ4‚Äþ ÚÜr<ËÅç–#“{ž–;QåÌ”òRLX,È|GŽ•%OÈR-—Ëa«–~;[OúU£®`@’ÀvYž©Iç¸,ÅC²%:êA)i–Ô´„¯˜@Bµ¨AB]êíò¥¤)ÆpŠ&ëÀÿJVHÛ\ïl*÷aÍ•SߪʡIòÈ[6-¢/d§õ1\™é¸ùBJË{ ôûùg:ý÷Všîa!P±éy^ÁWÔ…. ·/!‡V2³…Q"ê:Ë/tc,ǤÑ9’7gÒ´—ôÕ÷K*iÀËŒ¼ËˆL†¤¡ÝšTU¶$J–Ô¥§{´9%.HËÏÔKõ)ŒòX’یȋ&;«@Z",¶Ú×q›J[a#r…+e qí¶r[x $ѹÕÌMrÐÜÆc”ŠzRŸØ)]’"©ðFÅðŽ_QóÒc%(ê…‘cÀ ¯rÇ„™mZºÜ%:ûï¦.%$ý] Ø¦Øóÿóÿ¨®¥v\ˆô¬¼‰VÔï™TÉ.B¦c)p[·ÙÜàYÀ²3„'»ß.Ÿ"²gêÞo³6(I}ÝJyöÂÐ{riDŽ QcpdXM¬eîskÚŠô¶;nŽËs‚Õ]Å$4¾àBÎÍ©E;l 7êX8ÙyŸçœßëDmWP6βóø×c;ÿe Jî“3%»¹–FFÀ8,§³¿\ ëž§n˜Ûc »jÖîÓ¤F~kQûnqã­ :ïp'²ž+qŠ”­÷ *•aИ’÷iÛ >–"x8®óý¥=Û¥«B•ÉÎ(ñ¶ûޝ,·Êƒÿ‹wÿ^…«™0Þ×ü²û](ŸJÑ•€à$ccù[•’wê9‡}†Ãnµ²NŸº9•1ÒË [-—8¸½–û‰e¡Å ¥ýN-)'bû¨€7äHj3HyE ÇmÇ^ÊWÚÜVÉÝGd‚vH$oãZÆh9P¸?•?ÿ‘©kÏ4Öãñ¯Ÿÿ ­\tó8ú~õ­gTƒl"+¹ÉלïÓ²1ŒwùVZçÄD?\·ˆ„Hﹺq)ZB‡1È);'neD$$¨êÄh ¼ìW‚ÒÁýpq.0¶AX.¶úP⤤¬Ž HQìFµÙÉ ¤Æ[sbÂæcé”ì–ƒ)P öÔ·¾þ=·ÛXù$͵,xS˜á¸x%)°BW°òC t|ö÷þˆÔ¬Xv°4…RGy,¤äì1Ðç Ú`ÜWX8¶âH­ç·[*o—ãEÔ¤:×/ÆÉNäoàƒ¬´IaRŒ•îó-¶ëñWЇ‰ «‘ú"•xIÜlwÛï ) ¢Çôá RÚB@ØÃôIä<½‚ {rò<êüp>{b5àþà·Òt­‡n‡I<À¤€@Á@Ù'}ñצõ˜åœäúU¼öéJ’Cœ·?a8ZmkðR…¨÷ÛÆ²}–ËAÅq/:GÒ¯©Å Â>ŸoùWþÛëHJKl§Gë*Án’"ò^¢á ø ¸øÔœ ¢* Áçë#•oïËÓ«–ÿžäéMmƒ°è¤uÀ ØÁ9ê¨ú”O›íé8mêýgÿç¿kõ|5§e]Áòûé7ÖmÜ2í«PÈëªïgÖSeŒU¨*½œž²+¨bÕ@Ch*í­l%,<·JR8B2¾ ¹ƒ²f6‚ÉD”tô7ô[ù>èâ¢)ŸIëU~cïióYÌHÏdl;–qym¨}®¯²“²úã+nÞ#*Hbκ LxV9„XÏrPì.sW1ØnIO]Ô2¥6“Ì*#‰>Fµ=ì“%°ÍfÕdSéÃ^5ÔÐa·ű´…^ÕŒç®Rû..Tg–êa5µ´–›ÝÀJ÷äëòýu/o%°$ÜQ0^H”OÌܪöq©rs¯’kzȰڌ‘è’å¹a t6ŸŠÕ…E‹õ“Œ)[z¨.È`‚ì7öÝl¬º›(*V“0š Tõ”¨Žì´ŠiÊw«e= ucÌ…$=cjï!Õ…¬>¥©ÏPV¥=Éd«Þäóæ`XþE\ûµÒmfbn;éÈŸa¹Ñ’T»K u¢iMl7ãrËåI…‹dá¼äyQª,_ŽûDy¦¦ÜAPP B€)$ÛO–ÿx­æÙÌïÉVÌ1Êï¡s":–Q¿~"RsÂöF1ÚÂè¡{1Vì .ªT—’ó“¤N[‰}VÎ*õxuu2‚ÂP” ÇfPãuô"Râ®d™SÜmÙ¶2ÝŸ>Qe<KÒ%E¶ºZi!(@RŽÅjRŽUKÏ=OZóÎ)Ǭ‚ë®(ä$-n+m‡%,•€CàófOÅ©åÎì©O4ùy÷H.8¤ÏÚJŠBFá JFÀ} j}>ÿo•tU„I˜•XÂÍ^Â'-t ¦ÀÇ@\g´s5YQ¬Ø˜½Ýì¬åZÉî;Üþu, ;ÛÛ[6ž ùãçÉÒ=THösí[îz»a3$©ÞM”AJÒÇm¾?AÙÅs;žg¶¡ñ‰’å«$¤:ø‹”ZÄÜ öb²†{L7°«A*)r ;“ª«åËw(Èb9!ÅÅ‘q˜Q¶Vûo—Ô¶ûºR’½Éa°u~þŸæ´­XHL#– &O]² ·ízÔÕ‘\´l®~®<9šÙÍšìÉu·\äß+*mU¿ÈluìÚ賟¯ÿ>uÒýdnpO{²¶wq;hàµ}$Ëc¾ãƆ¹¶ïÀ±ÊÚ²Ûp§É*–½ µezWÓ!*Aqrd8è|8 d$$m·W\²¹—pä+)ìÔ¡–¡6ÂZ)“1q5nMî%eÖB\CR*Vûø,}ýúþÕ‘*6Â2K•uŸÄ,²uÇHò3ƒ²í“¶Óc_Ê)‰'™h¹ÃÛs¶®qÝKÍì®'Ç4Co¨nu‘kr5¸¥-k‹kR½ÔµGJ”£ì7R‰'ÀóöÔDIÒÇýk«SòÜ’¿<Ö$­¦‚¶ÛpÒ6ñ¸}Ε;V*3Ë$niÈÿõõñ9Í…Q½ÖËÎ--öZ/È[ý†7²ÀY=¦É÷T@ŸÍDV“!Ù#~ëÍ´Òþ½ÓÁ¢J6NÞÔw;ùÜ{j%‘.¨Hz[²“5.!ÞðGꤡ°êTǧƒj ¶yxë5§]UŒ¦‹Š-&4E!ÑJ–¥…(x÷VÞ|ÀÒŠT4iÃãlÅrÛŽ>]Ôr²+’ Ê ÝkCŽ4ZXuÄmÁÇX‚Ö6÷ð°$~9n°Ûªd¯}Ùt<«ÖO‘·A;ˆ+’ërg!õ¡,<àj8 -)¦¾è#’–çÔwä6 l< dîô§^-¼ã(e öÒž?[‹o»»»‚T„‚Çï¾úU{—ó{†{ówÓÆ³ŠÛ¼ Š’¤oÁhYmiå·$…û*ÊHÛU¥†Ð×i#Š8)·…“çs¹%^äÿ-b©õ®y$¡JKgéñ±çÅ[~Dƒü?†×ÝR¹6ÚTR\Z·P÷J7>û üyÒµ·\n@îßn¾áòªû-–ƒD #bw'Ûr6ò=÷ðGõîm”#–Ä’­QYZŽÞÃsöaÿ>ö9-!ÆÊŠ•É W¿=Їì’;~?†ú¼¤¨¤©J$…+mÆÄ‚<ãÇÃßßm)¶FÞYÇNìÇOJº7Qå\ü°ñ·xóíªCiíà“¶ça¿üãøÿ_¶½I%Jò|/oáÄ.^çÙ><þ[Ÿôþ~>úV¶ïûß÷Å `’OŸ?‰Ö>ÿÖ?†®¶šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥+ätó¨ÈćBÅc…'%æž x=¯Ða ŒVš=þiúAÏû×Ç·è¸8ïöþ­vŒÇ·´Ï:Kq] ½WŒZäïÜHGlAaŽ®%vu¾RÐê‘ûN£êÖ×úYôÐ`þž_ÌÎ.r¿SÁAèŸÊ}?s»ê=_ëáØìö|÷¹~¯U\ep)o±\~LynKËeÚD¯y„2¨ñܪ¯6/ªbœu!2‚†‹-¼¢îÁaú…Éúø÷ÏÃÝ_*;;H¢eçÈȲÙÂ¥ŠfipkjºcBÊÁ2Á¥a!Õ!!JëUÇmòJJ”ñ ɳ|6âKaæí×Õ\5*sü¤8ÒUØa YmO/n-¶µ5)Ôêk‡§Ù}%LoWgiEa nãL÷ä<›oºúÚeôœq åCXùgPàãi˜¥¾Én_€õ»Õxì&eÉOÎÓ–sŒ‰™i•;ɘ­%ÅH–ê†[ÜjBFuFÞö}OØQ5N»¤úFÐ%=wK2ÒQ)µ¥lºËÎ7Û}·Y;è3·®ÞgjìâÑÞõLÄ4¸ÃŽ5pY;'´¢^ßçÒJ£ 6·—â×s±Ü:e4vÉ0›*+È•òd&;6 …P,ªÕ/u4ÂäÅ}ô2ú‰e/¶ß5+Ôç`™6tÞq{w¼bÖêž’›ª‘2=ƒ°ǬãìäÂ+Œ•O·Jj:ÜST­Ô­µÝÙšÓÕíX% »…wnF„ O0ƒÄ€¢ž^Šu®Öæ”óðöse—«é\®vÑÃ5 ‡ØŽÊÜBƒ°·§T¦öm 8áqJBõ«@qû÷÷Ò¤¶¶²7âHÚvˆ²¬n±ÅÈ3±ÒŽ`¹« §R4ÐeÝÌyÙuqx58Íí+QE„;Gì-rX‰¯²žÂ¡©M³_"T˜©yIóŽ$”$Ç®‡5³oƯéã×Õá3àN›zÝ„iMd  ŽäzTWÃoiQÃÛ´üã1 v{jB9Þñ¼êA9uŽÔÝPÏ\Ú‰y˜®YÕ)À×­‡Ù}ô¨!kl?‰ûˆ+A[NÁ¾‰>îö¦d"UË ·\KA‡~kR˜ôêJÔâ‹hA÷ÞËØ#˜úƒqîßÓ8ßéYH-¤Ó žWid*ìJ;(GåÊ¢% ¥-Ô«huPSX¯¨Ð/„bkÃçÕ»+¸Ðã9ëf$¶Çd¯¾y2…/¸–Ëcn%|ˆ×gÕe”Ö„z –m æN ±¦®|x‰£²“Ó×9—¶vDn-¢k ŠZ” *Nç}tßEFC->fH¨~á·é„v%""šR¹÷CÅn$Ê8ºùx0·9Ì ‰Ò¡ü¾ÖÄV2Ä‹©UÑ"536—5Ju RË@ÈS1’ë°;Šh>þ#õ®’Ço¥ØÌñž{1u+©dh´:.Q†9y'²JãXa§".ë–ÖGÕ4e¹S/I<Ûg›5“¢».Fï- ý–Ü{€%d) _ƒµå0¤Øãw!´^•2®|hírJ;<ÒÚ9­IBy(º””r@Õv·ðªë£Ù¸—$Å•"¶;*Š_sæo6Ìw“ÜZYÝ严r*íùJIðs¬ì«®›búq˜1¤Ku Vˆé+R[ )AZ€ÄDáÕÒ걺ªùÌ–%Fiä¼×49À®kî¤smKAÝ J¾•·ØìA`%¢±) R[‘©Jö yêB€Ý!@”#bF±j-·¯‹c·[fRV¤!à„ºž-’RÐ$6Qñ¶ûö•Ð*Œ†ÝbuAâ„Å©ºwAÿ—O¼v¾\_™MÄìŽÊ|cÍ îE–ƒNý We*úÅiþ’FãUA-œŽö{Œ”Å™¡¸îòAî.+n¥äð +O±åiH;ý$ìv’fÄó?´‡ù}„Šç‹¡ v0Jœq WêˆXÙKâ¡ä©#o1°òh’å2ÒcÌj<ÇfƒÌ¥ç:ÖüÂù÷ …K¨Hx$ñ>Ú}ýü+ D«Ôp¬Y‰:—}º~&;·*3ž°+©¹nüqˆˆU|é²jÔÈh&4 ’™ .7øuIl—l!% ä5$ì;JÙV¢²%±l–VÚÕ!¶LHŠ˜k[ép‚ã*Bu%®Jä 6ÖĹí"ÁŠò‡;ÏÅzRV{A - ©*Q!|ÉX í·¹ÚªTÖ¢½ —µ*dŸLÑ@A _mNò_"NÈ#éÜï·ÁS•ß[…TFP`€ƒ³Ó¸$do1.äcѪ¢§¼ä—§Â’€¾Ä†ÝyÀVR;-`Ëm†ÅGmNOiÇ Íe´•-èÒ[Bw’œl¥#r@“¶ä÷ßo:ötÆáG2BÔ€¶RCa%[¼âZIÙe#`¥£¸§ZQ(*oÀ‰ñ¸ðAe—RóM8B\m·Û€âÀ x±ÆþÚ²ÄÆê€-µ³ª%Î ¤4¢•pÜmô’6$ûs°UÒ½Ÿ$*<ÔéÎzx Àe¹’dÄvS WøD9Þ}ÆÃ\Òû-…+êÙ[«mñ¬¶™q3¤ëG}·жW¿å¬”¼•<ãA*ä„¶¢NÜHsØîHÛÎþ=¶ü”p7'´NH î1çQÆ;èDˆ¨@,¼ëŠsHí¡å…8• ýE@…·ƒ¿¶¯vÞaÇ -…¡Ô7°* í­íî }ÒS±Ü÷#YŠu!Ô ƒÉIZñ¶Èðw>ûümãüô8úR¢ž*YJy+ŠAâ“ìU¿ãïÄnvóù0ù;l<°: ¼žÞƒ‹ RÊG"cò$+’Ÿ¶ûÿ߫Ρ\›p Ô…í¸Pú€?ˆ;‘¿¾«Sƒ‡-Šâ|mä+Øü~ýý¼ùñ«‡Øþ_èßJÖÈ|º|þ5‹À¥‘²Š@÷Ø øI?ë·ñÝD’FÛ°ûù÷ßÿ¹óý{®%@¤¶öü>çoúuâãÛo'ðûmøøéLŸ3ãëé¯%¿¥¿ðØòêæšiVši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šR¸¹ü R¯ÿ¤oÿéŽú¯<õ+¢ÇÏÓw˜þï8»£ÎºÉj¾uúAèXù×ÊþMó. õ+õ>³Ðóå·gÕ~¿ùÿKI´ÕSçÕÙL„ĉôI~ªS‰R€ìÈæ4§!@%OÇ*i{…nss¿»,}kÂÖ®c•5.^ö+wÀD¸†b§oÌV2;ÆHÉÆMrºÙ1júËœ.Õæb›3ŸVô§PÒYRõ›VÁ•¸@)‹)izJR£Ä(8°çZ5s.±×,{Š“Æ6mcVƒº½s®æ¿HFÃN´®ë@ n%IúT»æCˆcR"£"¤¯¹œS‘}lpâ˜+â ¯t¬6ï‡ZäZx‡²7Ԕʊ¹ÕORË…ú—âz+ËAU !-ˆÁ¦ø%,¥´„#ŠP6ÛË?À®fÊBf“CGz±Ö²×Î’73l”…Ò\ºHB¸lH#lfü(ãþÖ#\)¶_ýPJ¶ãÀª—1´‚JàDÈÚ“8å ŒÛ‹X#nÚTO¯£PÃŽˆ¨m)a ЊYC} ÞÛï²PvßÛaîAÖŠÊÊÖj Âb-dv˜)ox莲¾löÖVÚù¨) äAð 4~Zí-«K¨ìsÛ‚N©¹8`6@ŒädФ¡@ù)IIò6ÛÆÚßrá¾/~?‹ýl¯Ró`ðe,Ma¹-%æ$%·JCÑܰàIòÛ‰JwÛö#À»&;#½Ci~<†œiæ– C86Z…Aò>þÛ§ïûVÄUÔCA*Ns”W\Ÿ]C¦{ë §ÅEpü+aîHÔ>ÿkù¿÷éÚi¦ZCM !¶Ð†›@d¡BÜøJ|¿·æ Õ¸‘cCŽÔXŒ¡†I 2€R”%K+ú­hCˆRT¤8•%@‚B’¯ ;à+Zwsþåá«÷úÖvk²ço`NÀo÷m«­ÿºß?÷ßåWüÚ¼Ó ´Im´ «Éâž<½â|oçˆØoçm\ @YXu§—Ÿ<}†ûíã÷yüN”Ò|wÔû€¥c¬9hþ ?ÿ´5êvÈå°$¥Cº;e>?ËoÇWÊQÈ(¸;ì|r÷ï÷?—Äh¦Ð¢ ý†éßoâ>ß‘ñãðV±¿¿?,U„‚BO¾ÉúJÛYÑWúÿDmü¶Çò?Õ÷÷ÃÛðÀj­†Û§û}Ž”Çw ¡¿ÙñGùUªÀÛ@6ëþ¿ëøëÝ*ýýü)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJäeÇ?—µÝs³ü”—;=Åö{Ÿ¥\{½®]¾ç§¹ÃŸ§—Ò&Q¯7wªy4ë+XÖx½.¸vSa³@¼nµ‰¾±¨Ì>Üwß²žµ*jå´÷r9 ”„u“ŒÍþQ†_Þ‹òñ…~ú~nzßYó“eÝáÛìúnÏÑ˽Ýîøíðúõ¨Ü`¹j&呱{jxtÛ¢MÏÌZ˜»:yrb¢´ªT±üÞI±Š€ Üµµéäý`”êþÃôÏw¯¨ñïøóA#+†‰äCwpüµÆ[\:ap !Øÿñ±í£PÖéÒ:³q¼Ù©¬¬À±KDWÁ.µµdLg¤ÉµY„ó+qØH`7+R™d’®Ù*P8”S'æ©Áñ éÓ$ÁŒÖbíúÚ”üW¯Î)lšJ¶¦IŒ¶¤-•‡*`K‰2@RÕ¿oÒ°«Ú(–˜š˜êý¯Å§B¾L³QiÒSQdÃ¥™°·[q‡P’Ú€æ“çVÛéí NF9>—øÊlÑ!ëfßDÄ_¹ênQ$Æ ~)vqL¨‹B]ì”%·7ò Û§Ó?¿vüŽÀ=¸ÝØnœ`‹˜ÍÅ»¢ŽÑæ$R‡ K†ÈÁÜ‘ ¼ß\™bâ÷Ä©~SÎ?!º¹õXE†ä‡ wЩ×Ymǧ\NÉNÐÖ³ë:)W2—[±zº$ó²ã¬;eoè âÊ”\a·Ö¶ÔIâ´ ÿG[þ/̧n唘ó.òòí-¤ÆCCL‰ &;¢%Ò]!Çm¦ZSƒ¸²µò Ö )Ïäö6c! ûuޘ̇Émµ-©J—K=Ô6µ_ ,…%²¾*NãptÎûôÈÏë÷ñÞ½+ úÊ}’ñ$’HŒ’̨4ƒœ '}ª. ;8n]VÕ?0×du¶¬XÇ—:TÐí•K,ÊjÔNº[•!*y¹%¢†Ö?V6NÓtJYÍóÄ©k(HÅø!KQB7®t«‚ )G#å\@ä|«s¯*h²îb]äò«‘U\ý}c)“ÙS’Ëbe”¥I RdÈm¤´–Im¤©d¬ýæ+i¤CȲKgeL\ŠNÚ²ó.ж/$ sR‚›à¥î‘õq> o—ŸŽ~›WX£`c+Gºi3ËÙ]W$(iµ67Ýó¶vŠyKþP #’øFzŠ9«·Ë挎eðå·€¢9mã}µ ýwé$̾t©2Úz’J먽<¹ "¹Ø0Q)SÛ.%?"S›º§Ræì§¶Û‹”ò”F»3陣“X¦Š•ß/=5¹)ZSÇh!²’K\ˆúvê&uÓs.M4È1áä! œ%¡õ? O`D~TÖíº§ã„þ­âŽ`‘ãNŸ§®Õdެ£:™ÝŠ dƒT`22˜;þSÛÛND-zŽg.vÊÒGÆ*ìC±RýšœC’œôëmjì¡‚XA<ZÉØÂ³ãÊ”þr‰/¸ôŠönëL’¥w^\u¦^RÁ .–ƒaKß’”žDîIÔ“˜üÚÙ¥ãîCmlT³LûîÓÑâžQd° „†VVT’ž¥\y e"lcr©šy “*,Ä»)Ð[C³f©kyõ¥!E(.¬ñH P@ÉÔ¢G(Õ­I~\¡Üt°NX9%@ ;88Àa«ÅÇ5žq“lõM{ï4²—Sqƒ²x9¿$­Ô5Ûæ v;_¬a5Wrª£)Ï@õs6L0ã®=éžKæ;éin­kxqp¤¨€±¸Ûs¬Ù•/H«…·’ÔÊóDWö+i2¡!)ú“°QeÁÍ ÛeqPPŽÚªºÄÌ“gb¸ê˜ûLÅCq;†þ5üwÃè•M{]‡èW +šèòÚ·Ø{(}TÜBÜGä·ñZÎ㛯V³¾û'sãï°öÒµ¤å¼õoã:G Üyç½øßàXûþ©Ÿ'ïúa²µ7]ÜNü’—6>ûîÀÿ ÷þÏe²†ÛI ”¡´½·J8¿·å«-Ç"7e{Àñ;þÒ¹Ÿàùö÷V°vñÒF|Ýþê·ÛÖÑAQ J’ï%)\Ô”w¿$ìwòÛÆÚ!!§¹(¸¢‚²I!Iq[ñö#ØmãWPÛŠZK¥*í¤„ñßÉPâV­÷Ù\FÜ@üÿw©m_J  (å þ;ûýþßa¥@†pëƒÙóñçã^qÜ-ÍÏ £Ä‚vHB€Ømßü¿…ÓîøßýÈלä‘ìI?Ÿ“¹ñßoqíùyÚ²“º%oü6oø{yþÀt«Ó'ÄõÏîqô¯*#Ü}öüÏ·ðÇíãñØjà¯å¶½ÿ/Üþ:iW-‡¦ßµ4ÓM*ÓM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò•Æ•ÅÓtœw|^þœ”Ù4½êþZm“UéÈ4¢Çù¯{Õ ;È ñúu½\änU_âtÂ"_NI2Ò3’ êmPÅuyš•¥ ÚƒåâžÙI[AëGé<™ñ“Òäô¸¨þš&ßôhÒqW¬çúGó›vö'åÿ/þyë·ìqÿ|ßÁëYZ@ͺZ …–FI«l}CÌ·;~:¸ý~È>úùÜÎÑæë$ðöm£©g¸ smÙKæTÖu>J‘#}•ÛG¹N?RµyhÅh¸²lElXp–ꙊÈ{±!NÏžãn&;<„!Ç\Øî1WŸÕ¸Û¸ýb¬-²q,Ä®—%0‘5 ¦ÙËI)CÅ´W¾=1 2µ>ò“Àuý­~'Ô û é ÀÓ»_:G$°ãôª–ÌÚô9±OªàóRûo}J kTÇq·°ÌŽé*®­²k1mÇ¥%M·V¼‚Õ6õi˜¥ £ QÛãÉÀ”¥j Yéá¶]²G¯vØøÖšâ^cndt‘qôè·FŽ È]ßTš”– T ôçŠù#²\©u97cU$¡jUêÏê™ni@B¡8Áõ‚ahm+t'SXýüË v6õ謺¬~;2½lIæ¥F<È’ L©h*mÆBÛJÚu; Û\´žä‰º⨇QbY’Ó…+©RªGnßjŽ%9Ï»ÇË@¸6Hß[Õ˜÷Y•ÍÝsˆ“Yš¶•3™%QåÌžšðaÁô<˜ÈZZÐT”­|wßM¿Ï~vÏÞ=õ¸g•“9pŠšPsbÓ!çþ]]­*ÙRlíVÉEr»†ìÖ¨éòû«* ªwº˜ BRù*B8)Þ[–Ç ¶ Vûê¸6ë—uyTXKi¨ùoÃ…Eÿ_OÛâ}®a™¶×jñ”#­*[}õG†×mbCíGýsœ”Úw!°w÷¥ÑþÝáüY˜??û"×ÛQÂ|jYdYËí¿6Jì 6¤¨ª{s!!†ÛŒOyi}•¡;©'Üq‰÷ëQ¤a«.Qy®ºð½±‚«¸#vñ=;ÅMɾë±#RÄE‹ò`"ÍEÙ‘†a9°d­a(¿!D¡¶‚@O)JÈÊEÒ^£vá–T{Q_yQW¡øÅIv;‹H;)!H+… ”kU!쨟5XŒ‡ñÊÆó›†Ó*Tˆ¥[àRÉ^Ä$°9qÚZ1KWB›o5 ¬© Êqŵȸòoeíø+säéQ$vÎ[ ËrÉØ*Iéõ¾Cgm…l-=={û%Çe&*#ÆB¾§dÊJJ(l*%NøBIã¹V¹[Hœ›&YYL•¡§}Co0æáµ°²”¢àí) g;ñ;kpá]I(¥JjŠÙ/„‚¢–D~ÒœØnHl­*'ì<ûkpnÙH„{í1[?q½ÊuÓ-m´}–RÚ.;ù!?}+lî:ÐQ„Û •$±ïÙ†68ìùÔÜKJÜy±EÈeOÅâÿ|-(Ø­·p} PR’7A€|k1©jrd¨Ý½½;q–Èžeð¢GO;n ß;{j0JbÆÆ¹È«"3r$>´{6e-!•Ÿ`á^û£}ÀNûk&7‹Kÿq¯þĹ¥l1Ûµ¨k «mÁL÷6o œÕ*²t)×Sª/öÙ|‚ÂââBšmge°HÜí«ïLt8êg¼#¥*}]ÞØ’TØÙEkúÎûa¿ã–àI¯Qþt^}¤´Aæà}îhpº "¯a·f!iˆäÔ:v+àë÷PX ñOؤí°üwÒ‰Çkc‚z 's§§ïñšä®1ÒúG4«´G’Ä$o±û~#ú«yâŽ)Jy-j)Byq’¥²@HòOá¬%6Q^ÛjÜz}ÁûàWû¹mü5’÷Òó‚^mDû$¸>’}ö6ßñÒ·“ —Ý“½^eÕ/’V’…¡e Nûìvä Uý$‘í¾Ç÷ëÆÝ*k¸GÚ$nINÃÉûŸÝ°ßï÷¥Ÿ©Çœ²µ$$þ!#ÉÇÀ?Ç}x”’ǹä?ô’t¦O®ÍïÁ>ú¸‡¸ N܆ãÉW·Øï쯸ÛÁþ­« <ˆü’~ÿÒ {o¶¨Ü(£o;Goø mûüTäâ£û6'ý‡¾•G~ù߯¸xUDžCÇØþ?‰Ûòü ÿNÚ¯M4«÷÷öi¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¨WKó_Kêk~uÙßÓ÷¢|×Óñå¿cWÙÛêÛ?VÛk1ça&DD¾¸©’뎈Iyl%õ­-îøŠ•þ±k n] î Þå_FÇ_;5[].²™oô­W%7\ó™ ÒˆÂNÝáDþgé9ö»dŽÖäë§äÖ_Óu”ì~a|­ºJèÕ¸†Û‘û†®<ü~_{}ãÀ—lɨƣW²HXœÅw7-uvGâ ˆRqƒŒšÞ&zÛfqŠ/4–½b˜ ™+‹ o¿ô”¿¥ Ÿ­DñFþÚ®W¥LgU0°"¥O™E¤ÇIò§TïêÂAú·_„‘î5¥õ<ª©Çþ5cñÛk6üþýHgc|;#TÁý{jW¡¥Òn; ò¢?êʹÁòìc¿­lªTfã•(´ˆÉk‘QSiŽ–BwܨìÒY>wÙ°>ÄoD`= ¯v+±wPmpÖË‘÷ ú‚Á-îå@lyÕçc­# Be@ÃjÞÁ´µªf{{‰ãÁ\´Åt94ó̶ƒáa!'ð9u1˜¬ËíàAi¸ð¥ÔWY¹„ØjhìE8ÛH m¥<ÊP\àY@'r<^ï¿/¿uA)Ö«¤iÊ£A9ƒÓŒ)ÉŸúwÜ#®2þL(%çRïeM+gÆÝä¹ÛðŽêUõƒ·/¶½Bã—ŸJÉy¿P”)²êy'v»ÉOëºA-÷=Æå>5«âƒf¯|¾Qz|~n7«µ`~’åGñùþÚ#Ÿ×üwÔñòÿŠÒÉ•„à~#i8轇 zèj|Ȇ%%‚ôq,¶x²VϪ-ÔJZÿ [ñËÀØíËc±:­ÏOÜg»Úî)d1Ü-ó+ *=ž{¨¨'uvã®t˜¬/™v´$Û*t‹!4ê›Åe¦’èýb[CIK)dNÜw:Úlþ» idlLçÖFÞÅPNÛùrGÛJ‹)#%@ÕÊeßûdm;íù—¯‡AN¿é´Íw‹aÔvFÝϧ™VÁ;}J'a¾«s¶–Ö\) „žeÂŽ#öŠÊþÔO€=ý†Ðy[ÿŸVd´k:ØoYœ1\—ÈZ—-îßyÆÐ ¤††È VÊ*YøÒ² C8VÜ©s2ÊË’pƒI mŒ~]Ædì! Ì%’áo‹ÑÞäÏsÀàNÛ‚¶ØþŸ}¶¯Jêc?¨£¼Óò åǸ6ߎã}¿ ÆÿˆÔI›*kŒ5M7ÊSuôBRñÙ¦”© ­Dk'éHð7:©Èj#m! Ê}o¡ÞàRÛcÒ’—Ö¸+Ý[v?Òó¿Ù[Ô‡WS¨c?îîÀ߯kÝzí¶sÐRìVã•(ƒ%·6Z`‡R‚A”ŸpHßVÛ¯ÜH2\2]’€ÛŽ%¯Õ§~m)ð€ ç¿Ý{€Õ‘2BYq¥¥ ˜‰)Š8…%•©ÁÉlO ‚ŽJRý¤ì<9QÝx:¸ï”)iJK¤¡.!Gcôx©'ÁØùHûéNÁ#bvïü½à“‚q‘Ðú׌DZK>·ÔÛe¦ŠÒ”ðI>I ýµ¨ ŠÏÛóÖBâû®ò߸–“¶ÞÝ¿ÏØïýŸŸÚ˜î©Å?Ëo¢C§a·Ò‘ãÄþ'ÇîרqJyÔ¶BY íä•þÖçïì6ü4­ 21ÔïŒ û¶ª‹@¼—9ÃkFÛxúÕ¾ûý¶ÛÛïù}é[$­E+RC€%`B¶ñ¿‘ô¯‰ Ÿb?«U+º”øÛƒŠ><î“°Øþ[ùñEjR¸ñúvßs¶äöyÜyü|ûªœyõî8ߣ»ï5R›ú8qØy;Ÿñ?ëíì+Rw~ÿí;þz ¨ññã¶ã}Á÷ßøÓªÔNû~>Þ7ÿ˜ÿ{Ÿ± mñÞþj¡ìåþ¿ž€l5îšPž>¿ÃÓM4«M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)ZGaïåJì»éÿCK£¶¾Ç{æüû=î=¾ï¯·ËŸ«ŽÞurõ‡É0Ç[e×>áO8†Ö´2•Ö) S«JJ[J•ô¤¬¤)D¹ÔŸé5Í~Oó~cÝìv6w‡¨ãËÓzŽ—Õqó黽߷^5$üø‘äCŠóÁ¹Öëq)p÷–Ã}×R GðoêÝe un5zw||ûëÎ6WU#ÚØ‚§K¬‘°Œï±%Bàï–é«_ËÙuøÉe§R/¨RZmN¡¹ÈRÖ „¨„! ©K;% n¢¨»Á»©½ H‘ˆÓë§&++ó”¦bBYll:×x%JH ìu5gwYSÚõòÒÁ{‘i<^uÅ%¿ð‹í²…¸oqÜu@6ü«}e;:pÕ`·Ð!¥ŸRd'“ˆì…wÛ R’RAAÜmãÁUdFi1 øLFAÐc:Ô°È89ÜezœÖè§,9‘ú)ŽJͲ Șkˆkù–Ô$)µ*@gÂø ¶ßƶ®äû™×!‰ E0âVÄõ,©‡_ :¹½ÙpÚ\Z[AXD+a­˜-²ÐpÐR ØùIO0¯?W”ùü~Ú·Lyl5&3Ö^O6Ü Ry'‘@ , ˆÕ¥R½¼ïÌ#,à_ÈvÆ@Ø;ó DÛ·gÜBÐWuhâÒ¤òmKO§¡å*¤c«[ZnoR”9òÎ )PJø2°®•ĕă±Ô³X,¹Ü <ë8ºÎÁÄ}^üI÷¤ý‰ÑqçØBù:Ço¼•ôwG&Á'é<€ßéßaï¶•°«ˆÆAr¾}–n{‰=ý+RŠçh=3ÆBä:Ón†•éŒ7¤÷ýJŸ«-¨¥Iß—séÛYêS³Ž#¾÷¬Yzšl­+[Œ%•´â†á¢Ú’yì8n-OÙ漏_­Sj|#м¶•p+ßöGÔ@ØýGܸ²üèŒ8–Ýu(Z€;gd“°RÊA ¤ùK ÜF• 7ׂ¸PÇÒzoÚëé·ŒLv•Vë*[nºÒ«ãÇYe t¢Du)\HNçŠÂÊP­¸î<‘¾ªe‡c’Ümd•ÌT„!<ÖЖ®i5˜ÎîÉ[á+Kim £šJ Ï-Ö®'êx7'øk >Ñh¸žß¹Vço}ŽûýA@ø)Û–ûmªšu·(Vþ@'È þ òáöÛJØ`gÏÔø¿×6£$¥O‚ÞK„nÜv#p¾½@!÷NÇb–?ŽÞû~íÆ¯¥IQPøQI÷÷øòOõ†@¨ü€?¾Û}þÿ¸iWËóÀû5lÖçÂùÛÊ¿«¿Æ›„•ø?Qßø‘¶ÇðÛø·æ.•@yö'ïöß¿ùµîÀÿ®Ûþý½ô§MüÿaV¸ž~GËsþ;íìF¯i¦•qò¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJãm6ßòf—Ï\©Þ´¹þýó£{·=ÿk¿¿Ñ¿ípwã°Öçt Èpâ}Ä»^_¼Ö}_Û¬ŸÑJ¡?Öÿ9ãêþaè=SŸ,ù‡¿¬ô?àûûþ³ÿÁ÷>¾;ê^Mti2ëæ:\ïW8û±ø¸ŽRì9ÜOV8oÇÊvWõsúüþöð¯"@ê 9Qjƒ N¡šÙÎÃ8ÎØÍAEJ\Ën à)MÔUµ,W\}R8ý½°sod…j"0ÿhÖH–ÝÃq¿ódLx2Å ðŸpxÖ×eIÅÖßqrc¾ÛK߇%Q^\gëŽâÓûl¨‚x‘ºI%$nF²YUÊ«J;PÌc6ʸ5°!D+eÂ;’¢J‰'Ä­r›/ÓŸIÎäÌU°F6 Œu;áU²?˜4?ïD?ù°Ôv46¤¬÷¸ÿ—^¦’ÒÈhoÁ-†Æêñ „ ÎÛo·ßo?–­BˆÌ(ÌÅgŸi„ðG5«nER€ÏधÿäÔe(Ù?½‰ü}Ê5rþû\ÇåÿØÒµŸ+QÃÁ¾_®ô…òX_ëدc°Ù>î?¯[ŒÓr$>ž]É®æê~¥g$ø`ì=;‡Ø¯)ùUû¶:÷`Vß‚?°V”€I}ÔUî¾ÿ—çÿ>½ãõøí÷ü>ÛŸJ¸=Ÿ.¿ mTyܱýdíþ¿ÇÛWtÓJ¿~úi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥+›&}º«K={½ƒ7¦à×£ùW¬¶'·Þ3 œwûžº8„ƒ´”‡m,º›ÁØmS¼äxq›CJf[ÑXKòW3’ ÜC¥]¦Ò…#‚|;ë5VɯýôƒÐ ž-»Ípùg«õ}®Ç.÷«ÿyáLJôùmçYïE´†»ˆ°b 1íÝrC{Í´ˆNÉe,ɲ¤§nëE®\¿gÜø}ýýükÄ¡ð5sq…æo&yÚQ\o¤¶’4ö5c—6Å÷*jçFqL*\ª•($ƒ³r]Gy“È+tTÇm¼ƒ©+‡b®s̸¦Ýn3ËmiÛ’T’6#pFãí¸Ö Ú×SY]2 ¾ŽM_·’ÜWÜpò {²ßÎÀoãR6¬;"ºc  ­×Xu@ rRˆØn¢ßó#Jï‡ÃêÎLj6ÏæÒÚ´ã¿'»Ê±fÈ#@i— $Îv3â‹AMwx$ý%a)! ‚•¿¾ª‚·Ø™"Ϲ%(i™,>èHt¶âŠÓ…)W€R­Ø|m¯eÅ}Qá-¤¤È‚ìw’Ú”à×mÖ¹À*B•Å[íÈy>ÚªR”üÙ – Ûf;L%kKM¨­KqHÝ<–³á €ÜéWµ©z÷xãN;YîίJE’àf{έN%Îâ gn ‡€=‡¹“¾¬´©mr]·D§KñÊPk¾ š,ìR[;¹<ÆûûùÉa™:’‘"LÅcú·¶ W‚}ýÀ>|lFþ5m¶¤¸"0óA(Š´)osIvA „$^wòÛŽÇÛJÚW9Î]CózyùÖI[¢jä®ß¥qE;ø+ñ üwÇîÕ /<¹©°Áà„¤'g”sYspI~! †Úº[sÕ¥Î'‡¦q^?l¹È ½ü>Û~z¤¥ä-ðÚ9%ãÈ+¥©Ûï·çãW– B€HXÅCm+C=þã¾j…)\S±ò¢€¾Çˆ*?¿oo¶þ}ö×»”‚7*ð*÷$ùØþCýNÄzR®)üG¿úÐúúvÓb¢£±#o¿áíþ§ÎÊyî>ž~^ÿ-¨9>¢­Æþ~ÄùÇöïûü{êö¼oßþ£üÚ÷Jcå·Óö¦ši¥Zi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥*çñ=Wkµ#±ê}Ì;CÐú¯Ùìw·çË—ÑχoŸÓËo:¹*ê4gÜiMItF ª[ì2f\ò’úŠ‚ØòR[ (G“÷Ö¶‚ß舊H}G¤-íúÓ?æ![q?Q_ôÿ?W·´« m–rDH) Rœt+`VÓÑR–Ø¿ØFÞÇét¯0‘È€YUó€tå]´ußzõÆz;&kQÚiÕ…-¼ÃH-„«uHWÕõ8y¨yâ||i.b#Âã®<²†™en¸Så\A)O¤rZ”vNãï¨WÛq4õM¹¿qÔ…ƒîR|þãÀ?ßYò>›hKQÙ 1¤íÞ*B¶Üø RîFãJ묜÷m»YÁøwVlimÉd¸€°Z…§‚Û[{…¶´ÀP#íºH ƒöÕq¤"C-¼„¨%Ô…$(­ŠŠ~ À>>ÄëÅÛ7wmréRÀK…'råà‘ã}]­aFƒCþTéUX9ï }p@Þk)—Òà_G\hòâ>¦öä|GÏ‚|íöÕ¦¥¡Å¤¬•ÜRmÒ…{þ;rÛ–Ú°ÊIbb@ú”ôÀ6w;i×¾½úTÌ$ ‚y²RÛ¶“Üÿ_±:UÉìïÔdùî>¹ðëߊÍîŽàFÇrÚ–¶§mý÷ýÞ?ÏJÝ[qQã±Q €ÿ…÷ßßÂ|¿Ÿjû¡${vÛÿ¯ÕIØ÷ÛÊÉþíß÷iW'çÿíÍ\SƒÀØ’|ì6>?>ó÷óû¶óé_Ò>ûŸm½üûlwØíøû’ÓcŽÛø<ä·î×üú$nG~{~ò|§ã¥7ÿ6úüªòUÈmü6ÿ1ÿ›Áó·W¶ÞÚð ·üÉ?ׯt«M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJTË ú¿Yéšõ[òïð<ùmÇŸ¿o¹ÇÇw?Ï}Tý|9!÷£´ã¨ÛŠÔÈâwNûxPIؤ/p>ÞÚÃÝ_<ÛsÇå;íÈñåê=øï¶ûxå¶ûxßm\—¿¯«ÙDQ+€¯æç`@;½üï±öÒ±ÙÁìŒkœ«§Q·Ã­H:ÃO$%Ô„­BŽÎ •%_IAò>߈Ûmxüvd#ƒÍ¥ÄoËŠ“Ëêó²†ÞB†þé íãÛXv;öXâH&T1à‘¸.ùm¼¸>?_›¿¤bAí¹±ƒ¿!ìFÛiW#-·@3Ó}ŽÇᆵ¶Óm6BR”$”¥;þGŸ;ùßÉ>Iß^¶ÚBP„„¥#d¤“°ïïçóÕß´ŸÇ€óùö‡ñÕ¸{úfw$ž)òNäýjÛsû´ª1¶vÞCm‡ßu_ChHHߨ þÚð¡$ï°ßØx'm¿1ûüoíöñªOíø‹þÍÿÊ|ê¥É'íËýþm*øü>Ÿ½zPßÞ7ÿ8Û÷{~j ÿ_ìýßëïçAì?p׺U¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJŽô®|ÇÕÓqÜóçÝç¾Ûqá·÷ß¶Þu[ñÖä˜n‚–yjìTo€ããÉß}¼{oªýAõ^ŸÿïóäÆãÇ·çËËo¾¬¹1Àã½¶K±Ä<°°ž'nJKióÜRå{ì>ÞÄýöÕÉ ©Ö\ll д‚O€TFÛÿ¯ú5ãñm H䦀;”‚;r~Îßþú¸ë… ­{oÄ(í¹ñ {m+[oîÏ_ ¾^êRBüûøðÞßåÕ 6[i;”¤nã‰ðwå«D¤Ä~âr÷÷÷Õ p–ˆ#tï·’Fä¼ûŸùÏÛm)¶Þ›zmþ+Ä6@P;yZÉý”öøßíçï÷Ñ!_JOÿyü”>Ûo¿¿ƒRT­ö#bFãÎþßßû¼}¿0J”|ìv ‘ç}ÿxûoì6üÚSo†ßOñëï¯JO!íû$}‡“÷ÛW4ÓJ´ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJToÿ(ïÿxÿþÍ[ K>¹· [«qûº—‘Å<|}Goï°Ô—ÑÏú<¸ÿÀ߇þ×ìÑIA#}·ßaû;ƒ÷Û—v;ž>~úVq¾s¾s¿ž?o…a-1˜lû¡Q’­þÄ+È?»ÛY/ÙpÀsÿhjñã°öÛÇø¿Ãö¿?o¾ú¶ûgãçßÇ¿¿útª6ûèéT ðÿþz´‘³ip¯}‰$ëÿ>¯îÿ£ðÛ÷{Ý Ø¿‡ù ¿?°ûéB3ð#ãVOÔG²O·Ø“¸Þÿoß·ã«Àmþ¿ëäïçú¿=zúó¯t«M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)X?üsÿÝû­\p~¹É×?ö5_h÷{›ÿ½ðÛcý{ûíÕJFêAßöT¥}þãoò~>úTÇ_ûøcöªý”Ækü§U¯öUû—ÿ´5ꓸñ~Çí¿á¿¿ökÕ't‘¿¸?Úwÿ_ÇJµAñbFÿ¸$§Ûï¾Û\JvýçÏîÿOïÿŸ@Ûý}¼þm{¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJ³É\öñ· ý¼ï¶þÿ‡å¡$•±âvüwûøÿÇßí—²÷û„ÿ‘?ëþ»ëÏb¡çñyúyW¥EGéüÜýý€çãÏåíto·Ÿ}R„€¿ñÿ_ò{~;×¥_:i¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”ªy ýþߟßÛÆÛyþ¿¶ªÛïþ¿ôþzóa¾ÿÃ^éO—ß­4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò•ÿÙ Fð•Åg!Ÿ¤‘æœ[ínרÿÿØÿàJFIFXXÿÛCÿÛCÿÀwè"ÿÄPKIga5D,ÝM‘Ø‘Ø-Pictures/10000000000003E800000077364C88EC.jpgÿØÿàJFIFXXÿÛCÿÛCÿÀwè"ÿÄ ÿÄa ! "1#AQað $2q‘%3¡Ñ4B¶&89Cwx±·Áñ'RSb(*67Dv’á)GTWXcgrt‚†”–ÓÕÿÄ ÿÄQ !1AQ"aqð2‘¡#BR±ÁÑ$báñ34r‚%Cv’¢67DSµ'5Tcsu²³´ÂÿÚ ?ïñ¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦¸¤ñÕíjÙ¿[«Œm6âm¦êæ—9F pbY`Íê=lÛûìxpd®E“RÌóì“É;ûQIËœ'R÷ËSá“Û«á?Ćðc[6\kr¶†ã3"Öâ™å³ +m“ƒn*K: ¢áõv÷®{FK(ñë¬,X*†Ì”êèò·»r¹‚œ½tþµòú{è~k…ˆÛØ(6²âSØI·±²âdÈ#„ÈñC9t L™K0¹¹±Ó_QÉÊ~ïùúz𨨨¨ŠŠšµ»ßºÔû³ÛŸ¼¹m¥ÅÖàyNoUIäÖâÆ»¨“q2bXɇgÉWŠ/›—7uÍïlåéŠú©¦‹ ¸‰œG I4²‘D…äs`I ŠXØa 5tô×]þ’?…×*"l/ˆUDýÍ­ûþ¾×6þw÷ñC±i¿¸•-î=Žnv;ôަ—&JÔ½¯Š–3ë»IQ6ƹ$w`Ÿ²M’.ÛÙõ}MM´n‚ì¤mËõ¯›Ø^šú-é.&\ÂÛm£‰‚‰–Vud€IFBeŠ5°’XÓBMØimjüi®¼c{g¶3ÁŽû]ì&sµÖdtXö+‘HºÃÛ‚-¢å•䱆-îYScæ#JÉ]È,qS²B·âÕCàƒÚ÷²Þ:wŠËfvûl7g½¬Á.óâÚæÍÂRœ•ÔvØýDˆC\{(¹çŒl†1A×±»@‘Ü3Úa·Ë›)Ë`o§ßx®Iéç¢/¶èúmÌ+mŒ|¨Äo}r71¼ÜîóV[çË¡9­bylÓM5Šúêi¦šRši¦”¦ši¥)¦šiJi¦­Å®îí¥&åâ{9išãð÷G8Çò,¯Á 9¯Én1¬UÑG}|à´…LLwO™åãÉ“Þ òOP®rM!Zicˆ<‘ĆGT ,αÅ– 4’ÈËh.Î쪠±®>ši¥t¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”®–¤uÿ ý¡ÿ£=ý¦îVºý*sþ ŠŠ¨¨¨¨¨¨­TsUÍsU×"9®kšŽNÀ¿¤uÿ ý¡ÿ£=ý¦îV¸^؇Ü9ù6»i*Eg…ó\ÆŸqÒ4ÌŒx5r*W½Ž2Î:8’‰4ùìËŽI~¿J(I°R|MÏÏÚ^|_í+Ò\.1œF×H`‚2K4²aðËQ"‚Ï#± ˆ ³1  ’v ö4ûZ[Qñß &ònwn qUlöæÞJDvëWCL|'(žw"?sk"Š{#¿«p+@á™Ë—B*ßó í T_~0?ýwý‡·üÿ÷ëÎ RʞDžKkªkNÎTÜS\TÍõôýšÊ¢â¢Ê/¯ú5U”_þ.?ÃÚ a=«¢ñ?ìýñ]á·Äà#øŒÇ<,ï+q<®ycÄøcÕ[}pâ™\ç Ý x‚î_Õ¨ì²Ý“SÒ›{__ÆHlêè;9”°é¨Ôw}8ðáþ³û=ý«œ~ÀÚ~ˆúMˆ?H&ÇÚlm§;kŽUÁL©³ñŽÆþ¼€eÂÌÆøÅ Æl_W1üÇü[ÿZkЯÙÿ焟ù­_ö£#מ ¾cþ,ÿ»^…~Èø·<$ÿÍjÿµµŠöü_‘¯ÂÿGOúݶÝÉ¿ó=™]W}¼ñî'ü×ìÇû1/WKôx?áÝ–Ñ¿pÛ]²Õ­öðÆ?¸Ÿó_³ìĽ]/Ñàÿ‡vYÿFýÁÿmvËZÿ»ŸþZÿö-~> þÝÛýùÆÿû˜Šî馚ø¿%þ ÿV¿>¿·ë7Úwà[Ãþäd{G»þ )p½ÄÄ]ZÌ‹•ˆn=™ëqQöµ :‹´ª:Ê©²ƒ1¾VqÑ: ½³°‚es·<ü!nÆÕæÛÝ„oÆ+iöæÝh3\òý.0z ~çÝmÇ[.FqYŽ”²¤Á³€Hc†+0Ò‡/zb¸ écí£UÿÊaâY9^<ÆØ}¿þÇð=cÇ… >'|l]öÈ6u®-GtMËÈÅy.›j°kkH0ñ”β“ <À¥í…}Lz:6Å®´ÈçGƒ.5&D Ì‘úÆ2+–"áY‰µ€ 4ñ¶½+ù‡ûnôªK¶Ç£˜oG¶vÕõ]­µ¶NÌÃ`¡Ç®ÐÅM„ÅφÂ4¯ë“ÆÀ,[ìVë ¹Õ\/«©2GÜ–_·Ù­õ)?_så Ù}üªÝixã\ŽkT‰hö&ò~/xÃdåeòö8î  Ü»:ùM^ Åp*œ‚tØîEdˆs§F”"Œ¡kÚæ§žß¿ÙÎ ?ðg´y,üYrlL9®ød3Oê^9y*u~+·1¬b¼Rë ]†¶Î÷.ò¥›*µ¢§S¶®}¼i|<{3=™™G´&͈LÑv¿i6ÃÝ12¬®/o,ràJ™W‹bÕ2d¬d¦Àˆû+»{%DI5£|ù6ch2®MäŒUx€8‘óãËNúýßK?jÛb?J‡¡>‚ìl.ØÛI!ƒˆÇ;z²âV#<ðCb0‹— c‰ÅO‹Ž8äIb6LíÛ_k=±>ÎíÛ»‡Òx‰£Æo,e${—e»iaŠîŒW¹-^8Âý,ä\„sÚÖ1ËÊk“(òA("‘£81˜ P˜%bE F®aFA¹¯®aäsæª.º"ûO½’¶žq¼;s± DzÝ=£Ë²$Âlädxü LŸÊå×XZTE±÷I_MyIªÌql°ðl¢6Èr:4¤ä3ô}¼oæv×¹/‚Ä¿—yI±Îö&e¼£K—Ž‚†L0åûwåsÎLy"ÙÄÉñ¸ Deaä!(à¾$3D¹7‘± qºÀò燞}ý¨úA¥±úéöÆÁì­©Š(˜,^Îfõwšh÷¸XäFÅcc’<`¼pâ0ø›&'&XŒ3^Ñh¶ÙøÚöÛY2&a¼¹ŒYÀڬŠîf;'Éòs]"“¡ñ­½¢5%ZJQÐP´ÖrHX}Týž9««½¤rác[íâw|± ìÌÕø†¤Ë· 7Ÿ"³ÆãaÛ•\{iÑkg\8æÜáµÕqÜ:ÚÙÒ•ó'G¶;˜×¸¯Þ×þ ý…ûíáƒÅVËoîS¾;K“ÐmŽIiwgCCæñ.,?É1Ö›6$r.Ã!î“ð(BV·ëÎZòÈ‘‹ k~G§_ÓƒmOKö®ÌÅÏéžÆÂìM¡=¢Âá°€„—êØgYÛ6;Û3¼ñ›Jƒ,kõcÛ~Îúi¦¹×ÚÓM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)M4ÓJSM4Ò”ÓM4¥4ÓM)],ÿHëþûCÿFzûMÜ­cŸ°µ}¥;B‹ê‹‚ïGýŸXë"¿HíìoŒý¡G=_÷3P/r"¯þ“w)=9]cŸ°¬Œw´«hQ¯c—è.ôz#Ú«é·Öú"ó¯xþíþFüMmCÿ¯¸ÿß}ÿçÀƹöÊû%ÿ[±²Þ1”]ܶ»¿¶TqZŽÝzÈ`ꑚcÖ£÷:² z­«€Î½À­P˜ü¾ ÷§Ç¢ª/ª+WîV¹®NZ¼¢¢9®jõ5QQ¯bõ1È×#›¯TþÍD_¹?îþ?_NQQQ]Vý³žÉGÈ\¯Æ7…üaÏ–žw"ߨÇá+Ÿ=­GʵÝl&ª#9uÚ„›¸8Ü!sh&›/©¼ÅwלZÈçM2“Ë ðÓN•÷¿¶OÙFøb½/ôg õÀ4ûseÀŸÛ}©vž%Û _®±H7ûá?Uvz9ŸþóëMz{"?âÜð“ÿ5«þÔdzóЂ®b¡„¨ªÕEB1QQxTTT^=QSÑSÕ5è]ì‡Tw³oÂB¢¢¢íj𨼢ÿ¾œíMoì/ø¿*ùoôtÿ­ÛgýÜ›ÿ3Ù•Õ{ÛÁÿþâÍ~̳õ\þîEã8r»,’ö—¯_Ùìfν¶®¦†ù&Í6ÑÂŒ96rb€’ÁŒã8b)QŠ1Í ý¼D}¤ˆŽ{¿ªý˜ôW"/ÿ&%ýŠºáÀžPÉÒdŒfóÏAPEgR"¢; MêDUDw¢*§:諚 ¤Û2(¿ùWÄmÍ´ÞŽ~Õ¶ÆÜL:âÛfzY´±k†iL 17`Ê#” 7ö„oá^¡¿®m£ÿó£·_ÿœâŸÿ×ÔÞ“qp žjÕ㙾!}d±Í%+érz+i¾\cùJû 2;"R ^×ljF#ÜŠöóå«åªÿü–·ÿí¢þ½suú?†Ïh@0ÆÿÔí' vxàœüCb;¥}9NxùsökÎØ|ªÍžöµ¸è;ü~Uþ×èÏíïé¤b?£8|*íL~Ø”ÚÒLЉÝPÈ";:!&[“”È—¸í ³>Ú?øÌ|KÿüFØØþ®t?FÖ,føhñ-±ÀÙFñæ”Љ$˜v¿ $`B3¼PÆ|¹oŽ'½ÃåÊxšÇH2¿‚Ïm)ßi‰tsØÕóaè®j/ÿ3øü•yù*.¹ÙýG5Þ7ùZæ¹?ݾ­T_ÿ˜Ï…^[“ûºtÈŸÿ?ξCÐ+éßnõgÓ":ÿyÇ_þR}Ǿ©_ÒT—e|0FÅ0÷—. Òl¶æcÊ6»æŒ#Â'=©èçj¿¸Þ8wöÆe±_ýYÞŸû'ÉõÌ_é*½¬Ù ]NkyÞœ©©Q9ÿѽ˕Mpåì6#í2ؤkØåú3½>ˆöªÿóO“ýˆ¼®‰ýÙ¼ñ«é§ý¿lþ»èoá²êgíÕ«´¯ö“îÜ»‘/°]›· yZäa©‡A£{£«‘Âeí-àÑËPì2*õu&¬¾5ñÄÈ+˸Þ7£ ‘"3ê®f)tXÉõ“«/áû¯#ǬØ&2l Q®1Ûp°D’ŒŽvn6ÞDJçP˜^ÙmcoÏÝ_=éÿ£óú)ûDÇm]»„ÚÒú;µö¦+h®;eMê³KÑ2M<8lc¤Ç‹ÁÏ3+agÈgŠ%Š,BN¼»æ>Ç¿köâT%ánny@Ù‘ì[Gšø¨ËrºfØDB$Yí«¿a³b´Ælyh1PDgqüå³;Ù!ãWÂϤß=ϪÛX'p`d’1½ÈAl¡Évÿ" ‚Õ- …æÑöó«T鿇ØJ#ÔHÕãêG·ÓÚ:¨Tñ7gbY(Ú¾«Ú||ù ‚qÓÞlivö4^iëñp u¯ýÈÌoÁ®F=3½¡;óâõþ#[¹C‹`m¿Èí1ÖÄÁðÙBÇj ²]bòXâø±bFÜÉvMSŒfæÛИÆŽ‚úÜÚöµ¸›òâGÐú0?f»SÒÏGO£ØOO¶®Õ‹jlìBâqØŒÂ`W ˆŠq>1¢‹;A !i,Q2f³ó ÷é0òKÁÏÿ\7¡?~Žàžœü¹ãÕ>ôõמÁ™QãûG0A¬gíNòB„Ç*#¤ËJ*Éë)óyR ’zË»1Œþ:FåNÃþÛϹ÷‹ T7;IG3*ÜÝŒÌUâÍBÛ席­4Š<Ηм,ì„1½ÙUV±È{wÑÈ©„ÓX΄ôo®¿Ê¶Ç/‡mUwíÆˆZ$˜3¢XYá™–/u Ît/îUÞÒYÆr$k›Cò€ÌV<ƒv¡³ÀRö=¡á~{ëÍûR|W¢ßµÜ/¥8¬²àN+`í\)Ç16n‡Äá㜫F³¬˜G ‡3F$†GL’¡oRYv  ‡*< <ñ¢°ÒÎ(Át™²f”ïÝ"T£4`£”‡9Fµä{Z­yùø9ÜŸÞ+|ixP™—æþ |CÕaýµY-¡íî3ÂÆñJ<ª}¦Af|Üf‚%d \«iŒˆðˆnzÈWpŠ×–HÌdnH¿…Cú éòúw„Úü6ÉÄìì&ÄÊ%|Vh„’Iõq,I‘˜G‘%›«8,z sÇÏZz“×åéø¯øúÕξ»åùûSûõ²ŠÔG'+ê©ösòû¾ÿ—áò_Oš'>µþ„OêÝW"sʧ¢r¼ªü¾õôôÿ|Wµ¿5Dá½Kʯ¢}ÿ/—ã÷úq­§«W¯•Tåœ/§ØŸ5NxçŽ}Ž´½Fªäs•>­~_F¯WâŠîU>¹SŸUÒ„Ø_ó·Î·^8T^¤W'ªú¢|Õ==Q9D_¹W|ï–'[9zrÄêõrîò‰ÏøjŠ$s8z«º‰ðª"÷©Üýw,w û‘~åTÚVêLäEQ§Ž¦µÊæ+—…íòþxUùþïéRþ¹á¿â~]j/Ìá^àøsº[ñ§«½=ÓçêŸ>Õ8_]|ó@áWº>Ý ½~ˆï_O—ÏÑWîáUSKÑ‘¸o'*äk—¡[˲j§VŸ¾·íê_½¼0:]ÉŸð—ËóПR(û<}ª¨Oï~H¼/غTÌÝÄ~½Nú˜, 7¯’;nF¿—§Â«Ê"/§Ï”Tôå9ENyM}tµ®#Ö¹ê®ôj?÷}>OÿSŽUÞœ'®¥NJ¾eísÒÄí+ºyyzÚÖôýzu8¨¯OÜéá~KÎûŶeiÜb©ÕÐØè® 8ã‚#‘9s~ÞåÊ&” Ýþ!ßßçð˜¡Äï“Ø¿UÞôwÎ]ð§.ôÖ¤’F*j„+€ÅGrŽ+UÈá·ÓÕè¬ztýí]I‡+½Ú­’EG5íqæ1V[z•SêUj«—„ëoÃóÖ¥t1*,§¢2ÆAØå¾"!ŠÂ±è‰ðe7B•xNUœ*£´©œÿ ¬ ó>Ç_ñq·AÞfèåi½hÃùF•îè`ÕQ?yÏø[Ç(åå}_|DS"ÈìꈬOªW;¡üsÇ.øyõDztªó©^Ö•¬šG£f@b*…S¥)îŠ&ü)ÜJâ1d'¼|Ó¥Uu&%¢¾YZÖôŒ¿UÕå’D–ÍV¢¢ruy^ŠŽõèbôüÑWJØ€l¼ïÚöÖü4×â*ÊÔèò«Hc¢»…œŽT#ý>ª ê‹÷5uñó# Ua5Z2î§£Q ç§¼ª©ÂŸN¥_UôãJ¦¤F¾ÙK%ìSAÍh•ê&™d„5ª¦)žG5£N~&§ß¨Y-¬’בó\Œu+ÔÑ»„ŒÉMs$"«W’¡ÚÖvʩҭõÒ…Ø_ÙÒäv€½‰tà.züå- 9DÔ—TãyDæücgW[“ž=Ðþyá~z/Cµ¨VÎи2BFÈya9B¹ýÑþʤl4óŽó<³öö¤²8r*ö¨Õ^S©w]KÖqÎByz©ãx©#¡ à ó°è4l¢Ž8b•јåì)UxTz#Uôši¦ßÚ/V{S¦€tÖ×!+gØCª>HX©g/Q¨‘Q«!US„*¢uªüÕŽU5¶;Jò´¸îl‘Àr8(£tù‡·Ó÷AÔÔ7<(Õxz'¦ì"Ô•Ù3È&ýQ¹{*ˆ[ I¨î•úÖ•£D«úºzWKF˜ú²Mneqc_¶B¾+ãõ>åïó«#êº+ŠÇÄØñȨç(ž‰Ö©Ë•£+Ëõ|®ê´ éšü #MM…øZ‚ÚºSc¾<ÈÆl¢”1ÔeG!J8…==^Á±ÄsW…F'Wîª.¡Ó ¦V4‰gFù>Mó étž{H¿ ×u/À­s\ŽV¹iŠ T*U¼vr$Ö“ÞŠHoŒãI÷*Æ J%c#GZÁŽrrUàˆ«ÜDÔš5-¨ÂìÝË'r\zŽâÂí¸±dDbDhÞ6£ñbŒ‚´D༹ÿ'#QXßËa”BI¿ûE íŸøÀ&Újn ¸Ç¹«Š3Dè¡%$3<¦F4r•'aܧ¡{oi¾½#åîTj*ëK®êZ³Zëhµíkæ§}ª±˜î^9F·—"+‘UåFª£—PVNÇ%ÅVìá{®¤Ìy¦s|Ýa«%°P¯™ˆ‘bÍwb9€ õr ú]òEN?7Œu¼¦…ñÅ^ÑŽ"È$VÜ6LduÜ[Ép†Ap‹Ù=®Oµ.šxëáC<—9D%u±Þ/G"ý®y}Ö/d¿ÿìÝ÷.¶Râ±dŽ"Nв%ˆf÷IYÜC5Ÿ5b±‰þ²®"5XÕ]Qó,qÉ2®Mïwóaކ½ý¨¦ Ð.B9ˆF‹‰S\Ûxʰ™ÔV÷CÔÄêr6Q±öM‹lÛ“ CKï' Ñ•¢pë ’ÓˆUtNe<$Â=òQÓð9«*™ÚöS ¬ßX· œŒÖÌ5°u'¥l—µ èLK(]v ó0Z²Õ’•t]\#†¬kœ×*¢;¥èÞUŽãìkÊ™ŒŒH¶$2d‚Čᇒ<ÄøOˆ­ÞUg¢öÑœµÍU¶N‡‰ÊJHŽ”Њ®=q„ødŽâ¶§Þ!Œ³ ð#ª¤0䞊ô¬§‡¡©Ã9vý[ñˆÍ¦_È9}ôiˆ¥®4e!]T 2P-÷to-&½$½ 9Œ'µü†«˜Ä½Å÷IúÕÐÝ϶~ù¶š’ d¯¾“ãý´/¾+»N™äžl} 3„UWË©¨î¯ÜèTWJó¨Â[ÖˆrŠI±˜82…[ÜN<£¨ *ñð‹&:5‹ê½æë&¬¿»0å†Y<Þžÿ»«Zä¹Ò€‚Pù†2Bh‹ïÞžÚõwzU•u¯ÑðCÉ.Þ@Y7&€Yj8%1#OƒªÃÊCÝ )½$žB#š©œç}W¶ñ½ÈááóÔõª˜‰J±mÀÊ.-*|ŽÂç9ìª<3.+³[WGK4ØãJ¡ˆ¶=dDòc3¢|O«kÆŠöªüÚœüµ©öpI$°0‘!6ÆKDG »½2ˆœ|!U¸zú}[þåÕn¸ñ…™)íÎĹEW—†I޲¡=•Þ@cß8³þê O""ëb]¶'"eÌŸ~¿›R=sÐpÎA¶2´…a"‘©*Á㸌å®b¸ìh¯r"߀?‡ëZ8‚  æÄÊ£@ó/ÞãdKô9ÁáÙ¸l³€BG %ÇqeBuŒq¡¨ÐX¢GJqñªp¢¿äÆúzëhwUEd|W²Ð&“^ô3ze‚8Æ(¼#†!9¤#ýŒ^¥^5CÖÎÆKkBØ×%4âæ¦Š†v0Ã'hª² ¡FF²AÓÊrW‘Ì*´R£êÓ™[>ˆ¶&×§XàÇì#Ã#á”).¾ê $™¦Qvë\FÇ:DC(ûçÖ¯G *IµÁ€‹}ê[Ú€sq´’i©ì§Þ«áå˜Ù› ⻬{gÉ|8jÙcâD¡«ðíëG)ñ#Zå0:U{ÃêŽ[ª¤b¿ÏÅéK4¦Uî§ h¤@¤ôÿJRª3µûÝKƬÍf;‹NQ£ä³ä>u³*Š®«ò¯ž±cTZD¯p:µV?_)“Ѩ’ÀG½«Ìvç³M‹@ŒO7{ LM×rG{¼Ïs,keŽdønhÄåmtDéóNNЄä#ŸòÕ·“ʹ¦&b¥œaÕl,Ûä±6^?X@â4¾—äYšáLÈèëÇ,Óm`Æ Bƒ1æ;X‘åœL(åå><aÑž«ÙU*ð6¹É¡Ù>>ר×ÈJˆÉ2É©(nXQU|êÞQ¢F9ŽsÑUÖ>¾•#9·×ôô3”H-ô¸N”Á“0ì¯I _>}*C`^Ç6`¥A³íå#žK_ÕÒ·R?rá°™W³#œÁCÇnaI «Þ_uD’•­½ HKsÇ‘#q ÍÙsUJÞ‡ŸÃåÒ‰Ä+0ˇ ÊZdÛ{n2 ÅŽš#[¹†òɼ¨†²*Æu‰–’P§k;5ä{Ä9då>‚ ØÿõÞÅcQ]é­±dTg +X Šù6¡*Ib õÐÜÆK˜^‘â¼£d‡¹S²÷t‘È©«ux,ZÒÚæ‹Ù1ç®-!F8$s"²†BdÂ’3¼KLÑDYrjÑî"ÃsXˆET€YˆHZ¼yٳȸÄïa1 ÃæÅšrKqš-i|¤É5õ¤r=Ñ„F¨ßÚøž}ÚZ«be@r·È·™2ïBnížàä%­kæìÚú¥%¡œ8%‰kì³ó‰ÃÕIKjY­<|QX×>C_Òá5ÏDMA5Å 8eARñØL}|'6h¸“0j4tqúú½ÁõTF*:µÊ‡U°®‹‡#ñQ›%™2MÉ/¬ÄOv–+,ߘG}/YaQR°®—­žÇH”71ïWjAôk Œ*RÉËì¶sÏZCû§¡³«él(j)ØÈÎe@"XPTC-ÓúsŸ6H».¿/>r8ÌF[…Ãd›Î€WnNò÷+/,P‚{"[þ·Ôícȶ1ŒµeÜ¥NnBŒ ®_OIn1F$ï+ÞÖü×Rãæ˜¤d±SäBJ‰"‰e×0h°äï€dEUB9ã+8j9ð®V¨H¶¸Á•vO!»‡*s›U1ÄIå× aHýe¤A@+ßrÖ¬f…"—–§2 9É‘Ëc8E¨ŸÜ [SßX-o.cËv¾:2þ9î/làyḄQŒjåPå¶áÇáLJ‰ùu«&6Pìá[²ÄÞxôÊ®ÆÃz4sjG ¤¨&D¿r|~§MÅxEY ©ä|–tFeÖ•å"§(¬œ£zDèêYoG*èì£`ÜW\×4L©e눲ÇÛJr‘×sž…ˆG±ÌaQUôèj+½5jn(±ZÁd1 O„z˜[l6#k_<Ð$QXñe{æE©Úðšš®sÙÂvºÚä§Þ ¶H/­fa)#oë«! ìÁ°nMkå{¶y¤Ç1(Š.ö ŠåD€^ÜO[tÓùÑñ“#à ;œë$¨«ÚA˜å[0ã™Rúƒ(ÇäŽ)q\AM¯—k­”ÎÙ««Ü6Nš×¯ HðžQ²[Þ­òïUiQ®j¦¡#æø”¥«HùAVéçR2pz¦’+»rª¢õˆŸT潪UA·—ª"Ú˜µ8IêáŽFM4±eá;’“d½ðœXV×¥eÖGk£¢UI¨²sÀÊ׬\¼J¨^®¥#RíÔ©…—›YM¼é¸a©‰\³¤F¶ ˆ‚žÇDjâˆÁJu¼:‘Œr¸ˆDãî|ûÈÃcq%†æXÏk‹rë6;Ã¥å êUÅÈT›!áåøÍ€#IƒyY*<Ë?sF0%0Œ=¯h‡H#VóÕ%ñÄùg§p†¸nk–ùö žI2zF‚5’T«`Y9äŠõçÑêÑ•ý~¢AˆÏW£Em£Å+0´@XY\û·?¡tSšœ‹*un$Zú ²ÃXâXñ$cÌæZ«Éÿ †½¨f´Iè¶ÅµÓ™õ£O£ÙDR8Ù«/£IŽ(¾IÞv»f\Ùb1àDïõ+Böo\¹:iúV[‰£ƒ%ƒ|L@h¨E¾»Sv7¬`zÉû ·ª¬nëa ªDX¶/‘)ƒH’f€R¢¼ú¡¤F0Ž!·©Î »‰ð5ʧΰøÄ±òJa’¦ 'Ø1g…V,9]Ÿ,wôªõ0þf2 Ö÷,¨©ÓÌ€õÚ|º»`rƒ)Ÿ\pdØÄ„|jrZ’ ˜ðÀÖÁ‡#g\Žf:SÎ+„Žòêç\ÔŠöê‰uØD‘9°s«&6ž5e…PKdzyðâ¡¡™Õ2y2$Wcl- •χï7¥Šf:2Þ>mÜzþuKÄ£0Qƒ°.;xˆÁì´À^ò®¶Œ,,{7í9ƒ'Á’QJsÚÜJ„¿K ×L¯Q¥›¼£¡©YÞEV£‘Z¾¨º‡]ŒšmMp¯+:öí)â¶XÔö5å˜2â÷ˆ#¯(WÑLÁÂG H­µ˜­Vð’£#—5©µŒ.¨NT-®%H‘xçöXƒ˜–’«á¯7¶¢NSc‡·u—x ãærÆÈ–%b°‚‰c£½ú3iaaå•)M&¾Uܯu<ƒ-—“TÚ±ÜÓ-ÒçÝýk¡ÆÌ&# 3:«ß™@&0r¶ð=³Âç ÆÈ×ö.MC5´ï‰mCoß,tÎÚô³|˜Ó Q>¹c 9È^ŸÜhž«èš3&¡ £–Ð\)wÇã§j°÷QÉ$'¬ññLaÊŸ<EõjêÇcv{y6º\²iÏÙ_‚´Ri¦Å<™WI"£±x7ÅjÑ"˺Œ òK@2t‚Æœä*ªD’FS]ކNU,bêäy S>¦B©maÞÚÆ¶ƒ-£Žä…Q[ctÈF¹7h®ˆå79ÒÜ?*.9Ù3 "—#U%0„ê$ .òiTx,Fý±šíƒ7ĤŽicäUu¤ZYÏѱm'Il(pЬåÒ¦9#Gã–èñ ÎxÈØ•¸8T%¸IY= 0#]4“®‘$ŠC9W!^f¼= G¹†aôkÆö·¡ki«®ÇôòÈ GŠˆ.u —-n[åPƒ@ƒ×mV†úÏÉÚÒFl8ewqžW“L®pl)’3{õÍlⳋj‡8¦ƒ&M<ÙQ[Ú@¯Ò0Ù? {ÀåW,åÑÊ@=Ël.F¼¹xwiç>?HbÊTÁ3c \LLXk_|8„š°¾WRQsÉBIÌ1ˆ`&MíXcÖ×WÛÎ3¥µ²ÕÆd×½9k£Ø'_æˆÎ€£Ü¨‹»)Çf¸-‰s]%Ò)(eîÒ0­ ­¬å ¥{Fã"ðÒ/B¢9ÌÚáøtL¢§é-{ñlnO «\“_K[€N·¶ÇîžÕ±džºOŸ®cyxâ«Ñ)ĺWÔàø[ã8ùL±²¿hl˜WJ¯r0”Wð™¹áKe’Î_hj“¤ãÄåjs-ÃÃÃõü:×[ćÓ ±€w¿@Q„òFF¯¨È—$g ·U¼¬Ê±Â2¬º­QÝÖIº©"ÊG>¦cÈ•cîá‡ãÇå1™r£WJ¢î6 7ÜÞW+¢?Ò gƒJƒ° ºÆdb0Gª¨å3 P‹¡èÅyOlêy´¯ÛÛL²¹Þí­ÛMÁÅXóVž¼ÒiàÖÓÓe³,üÄv¾’Ê"1I âkÐå" ÈÁj’Ç0½¿²‘ŠÙFÎî&Ë·ÈäF°CãþìuÔÌkÜ™ŒzÉ EÆ<„L^®såü²‚B*?ª`5¸ñÐôóçåÅñø¬è±® ƒní|L`œé…&Ã{sÛ•lèQÅÎí'É99æ ‘‰/%¦ŒÉ—R±èÎ4á u BÄ™\Åwȉ)ª (¼0V°Žj½ˆ¿AžaÒ[føù%9›Mi–ÕE8OH³æ6º Þz *{Ò>l,¦ zDkqд{o™WÁt,æÑ;p28{hŠ"Ø.çØGÉÉLÀLˆ2Ň` Ȇ¥ÉXÞË¡±åkÞ§N4t{h8hàg6r¢ƒ&À ¡HV{² Ç›iŽ×Äw•Þ±ÊfZÔ“$b˜]°¹½lXD)hïp-nÿ—_…dmQqeÁš7eqŠˆ–tÃX¾ÕV@U˜_*‹›-ÜdÌ̯¯móæÝWÆf0ȤÈi bT2h&#§ªÿpÙÞà ]ûìr95;?Âë&[×XdôçPÀeÌIÂ3×A"…y#Uêj9dÅDb#‹Ì¸ˆ£E”å¢Îƒ4[Ïß)±„Lœ¸m=Ø"RÉŸ.ªqèÀ:x´ñ£Ç)®dØÄ›x€Âù~ èhÝÓMÞá8Ks–e!ͬF ãÐ÷H ‰PÉ1iÙl*i€ÉÄgƒ¹wX¶ö1@N\ITkåF@¬4ãðî4ï>ïŸI±Ø•fHWî€FÄF*ËŒRHß)$±¸v‘\¬bÈæØ‘@9#ȩߴ&ÉÙ!'ƒ°¸ôrŒ2.;Ý]´€”c1ÜähÊäú_Ê$mÊÀ¦˜Q²ì|¥È#K™L4³Ž×ONÙ… =ÍéHî‹)…i{oi"ÊgOTs#,t¬3n«é=Õg˜Ùö[ t™E¯ì¹Øõ¾Iþ~SÔÈÎ¥²âH›‘÷82NZnŸlöë'—Ž¿‹ËfÊ¥ÛCZ/tȾºÇ¬®æZ8¢4V= †[,G¨sX²ÚÈÃ^· ä2éây>ïê96?#H°EŠÄ]}j<ÁáBÞß.yjÁZåPΩù#sööc)I1ÇŽÜŠqëivq×ÞS£¼C4XéÔŽS0‡ŽÎ—£Ï•¬W:P‘Pw³ dWå4“@ûàc ,iâ3_%WËU5X«Ì¹(ŠèÌDéϬ žÏ‹X˜3jÅô:TíÉ·92«\…Ç–(ok©²LZ¶yh(n>CŠÐÔûèŽÛL&½«,$:¨v¼Uõo«Ïím<¾èmÌx'>>hD1h+äEÁé|ªÃ‰]iZòŸéOO—²oí# ØÞ†­ÃÀõ±óáÔÎ=§gEtÀ Ê ¶.ÚÅŠB‰Íïœ6—[F(‹,Ù'töê ­'4Ç*K0Ó[=ö‘Ѱm¦AB?UB¹cJEéG1žNo[Ûääö¦69îP‰Y-<0Ð%c®Hy¢kkÒèhZ”?üVLTt é-^DŽÖ#d{y¶4‘2YS·ö¼”ùD¼F)-‘éG:£*Ènh <#ù[EžÞÙŸ!{•qÏwö|–ÈŸÙÁÚ™iž6·p,!’6h© iœ[cT‘æÂyb¤\¶;hc݆!è“$„jáYÂÿ—/ð÷wŸ—½ôž1s‰޹¬¾¹ =˜ñMÀÎ.CÅL}œÌYnã“r3¼:(%É‘’ÒŠ4(94¹žÀqû7˜U¶êTU Ø9…ìs’QÛ =ê]úìË·|ÕßUÏ})²*öÄ–3,º8ç SÙƒ£ž¸ “ 1ÌO˜ŽDÚÒ"µ1Ç Â¶ë¯¾Çææ6ÕŸG¶¯kªÕV¥Ö Ì,&á÷hâ¼wW0’h@5Y±Å„’„ä„ÄnvwŸËâÊèk•Ä1gRL£È/eæ×3'X «ÆÈ¨»$\Qê9̇@ÙïŽÅ"Úir|AÜúíôŽ!&Hæõ”¨/|TA•ýdÂÊ¡¥±¾Qõ€¯TdKwy±øíËhÙTÙã£u”v:Þ½ƒyVd>·5 Ã\"ªµ¦Q¡W¸DFëªÜ<"ò5TÊŒ¢–Æ-ݱèªOpÌÉ÷¢yëc+}_0pcog„s¢1$³¨/cÝ‹õ[q¶Ypö¾¶6o}*+ñ—áÞì}ë'_~¬ fw²ÁÒ¢^+gM7#–ë¤`Ý`×FÛÐ'<»Øä-®Å¢mÑåî-Œù7 vIyñÓD”Š:%ÙvƲ'—Çiák+q-c†}ÓÄT2 kZ%¼IécÇ_–ž:|9&ÒÆæF‘0 nËIëpÙC bü‚¬‚ºv÷‘‰±yúÜÛ/+ç¾bþOߟFüϾ"ö}÷ÑÜò}\w;_]ÝÿGì}{µñê •™bÐq&]õdxøý¤*[³SX:»[/w¬ ù®Tà2¥ûÚ³²'|OóÑøþñ5€Ë‰ìKhÜ«»—¨4œ¸ƒ¦}7y0Vã^íXkÝJ¾ëLöÅÜ~ÒCDO7×ÑÈu¹5N Z-áì¶ÆI»›ƒJÉ$˜§} äfmÒTSÄËcÁ±);³˜„h=ë!\öùWtR }ï‡xîï?/|ƒjc%ŽfeÙà¢fL˜È]Oîø™Fr³°[¼(56ï1Å.äýÒÛº³ä1¬3=4ásïóÞ:6ÓÆ™£HS"¸„ÿ|‹96n«¾¹Ï• ˜:0»ˆáÄåiw7 (È\¿2[i´t.%–¶ÕÓßW> >¥NéâY³ÝÇù0s^(®|ÂåÏÞ=¬SN~Š6{ÿ¢æ’똈ßt¹þîsú¸îö†Cw?ÑÐ)”È!½íÅ‹ŒcgKW¶á¹W¡IÉ7­n:e[ÚÉ»Ã_}ÁéŸEàVç°©¨•c„¬’Èì{82/>Çm*&ÿé/#oo:ýL,äÆã9À:4œ%Ø"EX}³L#/^æÊÅíÈp¥¯ÔŒv€Öàß¡ënœyq:ü+‹mM¦Iód´1Hß¾Åu/‡ŠV¸õP3±ŽPéb-¥|ʸܬ ‹s2ï,¢«‹ZĤº4Ùâ kmçÃa¶OW«f¨óX£Ÿå²U,{Û¹e¸¸5Dk©–9UH¸ì:{ ©°f¾AÝ÷ƒ=ªäV\(HÚÎ×qӜޘí#•¨¸£•ÃÚ\’>é’.æÙU滆 <ªÂh1“O,·Ð~¤ Øóavrš“•-©äZB|W_!\CtÁV—UÍ>ÐÆvãÑDÜ[j« Û{CÈ\~E ñ¶l ±ÂÅ‚2òB%­prª¨¤!b\`qÇonXiÇ¿OÃMEú>ÕÅ!Q³·`I¹cŒ‡·•qÛ³ýánYðÑ«)ÈÒœúIêÙhë®Hù%1úq檠œ1q38ÌB¹Žª#£¬–×(ÕDôEøW_W9Ä+œ¹;oKÌkˆIÂåâÐEÓoÄB+Fµ1c²&9͇(/z£]α±¸Î×í³,kfföpÇQáÆ»”ÉU&’öb“²+ˆñrq–4W6U͕ݙáF ŠÇKåB܈êV}–ÃÝAĨ¬·.x`ÅØ»lŒòÑXWµ´vu c6êiëû8æWwxh¸Üîܹ®´ca™±ÆÂ­¯2:Øôé[m©ˆrËô|x‹/Õ>6%ÌñÆÂæLÙ@2Y²jê¯Ø9eI¸ø.F<|´y]£2¢ÚƒXS†e¶=_"àœ=ç­ YsXP :ÞÄENa¤nžÝÄ9efxäqä–Ý+Íh6Êò¦{ê¬ëb«Õ½É0,Ùîùiè0Mx£ˆc Ç «§Ûd¶Ú›ZÍÁ¸¾¿‘™îÕ°›7=o2‰øÀ!dð,ªI ÄýÅO˜Ð¤ ß1Ý$Be5VˆÉq}•5F -Ѻƒ ^mºµjVã'"Û×Úîý]î]U9ËÉŒÖÓg5ÔBÌØŒ£’1w ï,¢üøô<5ý4ónGjã}TÌggʬ3c!Xõ]˜{OëVç?ûF =X†K›1m7SnibÈmšc•Ðâd¦ÃäÉ™fâMŒ,šR¸Š¢…í<¡¯ÃžCƹíݺÜí¿Ç#_K½Ëè*ccõ7Åb 6®ÎÖkè‘Þ­—2¸ó@#Þø„ó(–½íÅ\»l¶Ó*¨Ê:·ö¹eïÎeYÍŽ¶JÇÈ·V¾¯¿ÂCLW°‚<{(`­ÉÚײºQüÛžPˆ£YzM’°vå57RæžÞ&âcbX8}…á«®qü6~Óš sëMôÞ`TäÑ­¦×ù¡Ô[C–c˜iPN?Dü½òm­ˆJJìÔ)€¾6¼]Æ)äk6!.É,Q®BP.L fhræfñmt_G—Ÿb61] ÚôKsÏ®¯²ò¾BQ‘Žw[%¬úö ïï°¯b®lT,ÉÛ—€23æ;0Ç[ ˜«3‡K[HÞY1™ÑÇ‘yŽ¾×ºˆf8,”V8È¢o$øu Û̓Ü¥qíà¼vû{Fæc‹m÷ 6ã$½È#Ù:¹‘óÖÇf/‡IµÇRœWOŒ¬eÆòU=Î;°”lp MϹ¯}NÆVâ’Z)PÈw6%»&2µõÒòs|Fá îJ=Dˆã' É«”+è{¯×…ÿ%Û8ÿ¬gM’¨3ª0Ú0i³Ê#Œ¶ÿínØ\ª›!rªÌðáóZŸp0¼ØûirjkGeUvWXëaMÝqYLx±m¦Bk=J*ÉSbÅž‹ÒH’LÐŒ/-Ih·gmL\HÍñ§—;R¦4µ×‘vL±Ÿî¶ª¢ÈE”‰kð´ÓØRHsF¸«‚d{‰]íµ£·Vl»lkw,&Ó°¨‡*ÇpòiynRl‰}Þ8Øm¬[<'(F'-àœ@UX‚’h¬$‰F€m ù6!(w/"”êÙoÄ¢×JÅK]3(™¶y'ë~=]À, v6ªÀ°’÷°+sNPÅ”êeî8ò=þ€þ\º®ØÅ8ˆEôd’¾è2.6s?ÑŠU@Ä›“.+³9 *%gHçÍVgØi#ÖÊfIPè×<¼2°Í˜Å쮋(“(#;¬´&žÐ&ŠŸ KWÔnÕ8ýíÚAư˜ýÅĪý˜½„…»‰Ú‰|D3›\W£ÕÊÈÒÉÜoTt9…qš8’,w™?g1ÚM» –ãÙ‚,»žVËv5=ë.ö¿2Êërz»F‚£¢È3!Ô›(”±áuû­þeÍ׫Ou´Û'ŒÓݺ~ïd½Í—Ümxd7Iò)ê ã99²LUÕñ«LûfÖc9Ý͆zA¨«@(Òˆîˆr$ç~ëÿ?Ï…b}±Ž@¦Ù–4yóã`]Ñ“ ÉÇ¢ÎÍ.K°Š„0GÞŒá—m-¬œ…Ö78]”¼5#ÅÈŸ-j§‰²$v@)¯0Lð Óà*1Îæ)#¿¢B=‰9i0 ·/ñš¹øÅS..ˆuÐåSÓÌÕdédf4I¯ž¨EwA訨ÕÖ BÅvZ8·n-Ì·,5Ž®{R„Æ9K?pwnê©É ©šéª¾¬Ö`$–Ôt:¼®qã¾óä¶ò~I½P¤eòãÙZmË©²H¨”PSVâõ¶Æ¶›W7Ëyk‹*è™lIuqÌcÃîÁiŠw£Vÿðò÷Ÿ—¿Ñ:GÉSf«–6)‰…îÃ׬ïu9ðÐ*¶…™ÊFÊñÃxÍáÑå’¼ù- fŸßåŒ[ ¢§A!ÖÁíz§@<ºù„W*=cýz3µñkà3¬:[ëG%¦+íâ}s[<(²¢Eïyƒ³©S¥ XÒˆN‡±Ñe5[Ìs£,m®Úáw·Çò«f¾f 'JàÖ¨ÁD¡%dÇ]Ã`G>€Šä$¦¸îD•šÚ‚˜TÓæfF‡“Ð[åóˆêÖAÈ#6ÚÒEê°®¡æ² µiêa¤f9àIR»:jNï?.#¿®có·Ôá2![ÖUÞ"ßZrß:ƒ¡ ¸9I ·b)v¢bV:(ð“¥É˯·™Ë6@Ñ”!o”ER0ú\êyDÆòâ±Tó­‹ŸQ¦ž¢ðFçcà“ 6<â3ZưETkÕôæÂRÔàk/’ÌÊÊTû a¬æšŒ8°mè¤VF›Ñ¸Øýá ž8äµï/7ÐÇrv¼ue…~"è#$˜$Ì÷6°ŽqÛa~äÈ—¬8Ч†$fÛ¯H„×#ºœ‡k’[Ç¿O~œ?¦¼íVD™YÖ<°U±YbæÜèH”€r}¢eP[²òq;ígöÝx@öPå;7K¿»;º{¹m½•Í•$Ý¥Çö¾ñ)·–xõE”\„ùÎcŠIO'"+›³Â­‡9¦|wŒ&X{8ürøtö–ø]¦ñ[´›iu€á9NgŠƒt1ìWfp:k S‹ZdÕ-….AFHD©H¢{R@ÀUí륗éªÇ©¹þÏÁÕYxÅ€øŽÄ,eAYæÞ("¨Ùç“bÌj¹¦Hȩ¢¹üïþŠh2ýŒ8¦Î(Ex|BW‘㎎òƒ—ŸWLz#Qªù/#ÃíÈm+ƈªÕT•ëÑ¢˜ 21bÚ¡M3‡ÌAöA&çí\/k/f¢ÁÒ#­..‡Š‘ ^è¨ëQ¨å!äþµª×;æ¬kØç"#“˜è5¸µtƺ¶¾Ž çFsÚøP E”±HÔ{¸|xÃ*‰èÄz·«‡5jÕFúK%À¬ û“yØçÃ) #õùw^ Uêa=¬WÉyÖØ¼¹FE^yG·¦.,ZãL N)9€ÙMg†¹±ã>¯Ì+•¨ö+F÷1ñ•9ï'R¢#UU@¤PKÍ“6\Ün#Æüƒ\TLš\ZÄí›2¦Šl‰£ï$©5µòM B§4W»iÔç¯C:Q>MFUÅ¥€eDZè@’er²¾4hƒ1Ú4kœæFšò Øˆ®rut5©ÕÓÂja‚±ëY枢m\‘‰Î±MÁ Lgz}S˜>—#UÕß%ã„ûa1#9%<ŽI/. †ªõ #5Δ쳡Âér¢#ÕÜúõz+ Ê6HÃÃ('6LÚß¼žþ?⊱…Mh12Òm€ÆgvY>,iŒ¸í½FÙ +XN9k•¨ŽãÑW…ãPÑhqÊÙ —šš¡¿²Éë+ãHާ1¥ a•½l'KÚ×'SÈîQx]åòjq%ÈŠc*ýZò­;N•NQœt«MòáW××QDkUÝkËfÇW|>ˆ÷?ÃÑ?—É9Eþ^ž«¯Jç 0À Ap¥ï–(Ö5½†¶Pñµëâ§?ŸÏþ:·yFÑm^m9¶yŽÛ`e“ѶÃ'Âñœ‚sXÆ£XÄ™mW.J5­DDNˆš¸ºi{p­K S®I¢ŽT¸9dEu¸àr°"ãÂ¥¸ý&95XýEe\~P´Õðê«ÂŠˆŠ‚…^чèÔO„I舟-57ÓJÚª¢…U  @  …|wËíþ_‡¯Ûü5²ˆßUN}ïûþïO·ŸŸ§Ïä¼ky~_Ÿšú}ŸÇ×[=MáxEõ_½=xçøñòÿïÓ¯ÏÏ… ¬>¶ü¸~5ñèÔêåÏ>ž¿¿÷'§ªñê¿b&¶Üƒ^\½|+ÞŸûËÒŽD^~.QçÂ|þÕãuêßUxk\¾¼sǪqÂ' Ÿý_fÚ«9Vô*§B·æœ|)×ÓÇÍíG}ÿÓJ‡üºð¿]á"¶ÑÕGüiÃ^õç×Ô|£•ÉǫӸäDOŸ>¼*&´µz…¼ŸˆhÕTN{_I=žžyN9ç…Mo#GÈÛÑûÁ"§¯§J«Í_µUÜ¢«¾|¢ñÆ´5ÂjGr1ÉÔ…{©UZ½¾^®Uç­U„Uü>í*i§\æPôó§}l €­÷ª*‰9rråbñÐÿN;iÙN=}=xê^4)ãt»ûî!$ñМ¯YÖß_î‘«Âü~œ|Õ5©$ ‰Ùzt»Ç_=}+Üçý~{í^ÚsÇ.û‘5°¤‰Ò©åßêå"'uyQ#ª¨î¯…¨Ôzv~J«ÇߥKÃ/ÀôÝ|ÞôrBw}ÿ´rÅG£‘ZˆqÞǨ9EøTÏz9œð¼·Ón9ÑZ“½äjFQ¿„ENÜV#^Ъ¯©„j/WåTTôO]Ȩ’¸Žî•F¹~±S­žc¡z•í"õb~÷¢ýºÞ3c1ÓÜà*«®"£Õ;+U^Ö'< ÎíµôN]ÂiPpÓ%­ÈÈü¬/çRŠ7}Î^ïZDS¯«zQ®ÇW£xþõXÞž:º8á~zú-×§»ÕäIØêF§Ôð®ç èN;|qðþ÷ᡌ<Žpžç$*ª?ÕÂyU"ðˆªåõÏ…û8ÔŸŠ'V9[å‚@+‘èîÏ=ÎCÇ<«ÉªwÕøU~nÒ—Q÷F U7·€ãܚѲ ‰+—öž£È'9­^†ÎŽŽ‘ÂóÞªÆtr¼§S½9Ô*–°Œ ;΢4Å{‘­^Ô’†KÜš,g¸€rt/y辨îuwëú£´ˆž[àw&êh[ÞFˆïÚ[Ýz=yè^]÷&‘Ò¼­$"1]0#DqÜåDCPÖ>Μ?„iÇKqövÕBi:|úýxLÔVµËÙˆóIÅòO(Åaܽ|™ZЉëÓ¨©eÑd×ù·ù“ÃaZb¹äòã0R7S‘ªõ½H¨‰ÒôE^SR÷È«Q“Šã/QèžaZçGh¤¹îkúþ¬}±ÈE‰û®ëãýeâa)Ð\+'¾)Ð’ Òg ÄsÀ&…âVª(U‚"1SŸ‰¨ä_ž•Õ-܆W¿.óÈéâúg@”“ä+¥zA9î5ªÑM&)#usõè­sœÒ"·ž–¯¢ªê¢§»äzeóîï+ÏÃÑÓÓï>;¼óç:hç§µþ¯¢új8ÞL>ö•wLz wQ…V´Ñš)HÀ ?ä•cÛ×ó^´^yo:—I›[cÊø&W²3Ýi¾ð˜ö‰¯DëXhVR§Â‹ÑÏ Î”k ÜÇÆÍ£pÌÙ‡vë˧ F­7»ÅûSüí}“ƤVòPÎPc¤¹¼pr)X¬í§Cyz'¢&´ÁsR ¢t×:D¹†Žó+÷ŸÊ”%YJÔj" ¬ >mg<üZ„eÅ|wÄU„qû¼‰Ô†i<¯©˜ F«¿iî-k‘ þ¢t*þóµL7û¨-„P<3fG#¸‘ŠŸ$ŽW¢ª¥ •÷õOõJŠP•±ŽýŽMÖ+ZëÇFúðág´9%TÇdwžV2ætÖª0ns[Ç(¥õãÉŒÒQ§’«ÅDUkµ [*EÆ/¼U fË75‚gYT §Y1Ñ]ÓäX•¥R#Õ ¨Ç#[ËÙ¨Ç6°áˆçÁ"µ×²á1«!è­9eÇ+Õ®Näs:Ñ—–z >JØú9–ït­YU9–ôqa2MxÜÇ0ª±ÁÖé}ØIÃew§Çðß“çßY%´†ÅEW×êÅþÉÒÜ;­Àé[òÅF4¶W%‘VKÁÃꮲrZô@kºQ¨g}yœw|.cuã¤KY¨³œÒÒ’ÄÈÅb ±m#+ hƒIf £ÚUí±ZÕo«ßÎ̹µ$K––¸ê€T‘ÔÉ*'kÚ®ànGÃp_ÀØžŠQ+œïš¦£f–º ,â¥yÓWSÍûl8&È“$Aò¨‘Ðo{‘çUåô^UZš”ÐÜՅϲã_¬*}yžz 4±hòè;¤´ŸÐÚ6À{ÚÆv$ ,D¹«×ïšað”^«ÔºÚ‹YÎ4«mI‰iÞ—½é5ç2Ju’ 8I@=‰û Z%ëõ嬢c¶’Ôã{«®=¤;¹!ý¸ÄZÇ…Ãkú!Gˆsã@¢pîU8Ñ Â¨¨ é RÅ Fu’¤XÏÈ”…F™õ$ÂÈ,7©ä/=¥áyø•Yаfܲ±IV$®hÏ5·°OmuìÞÚëÃJ1Q”N±šŸfhÄ”á=Ä8«¤Â³zQ¨Ñ6W (&¢üW|Jþdq'b±¾þª|÷˜7˜q Cþ‰î‘C’>„Nf9ñµ^ŽÔÅ—ÁD­¬Ð‰ó$‰<Ï_‘l™æ¨!ŽwT¾ñ¥¿‘zöÄårzµ¨°“™3âB[WŒ|â=Ê H¨XnyXW+¡ùPŒo¬röÄŒhúWŽUX¸ì0†6ªúæŽ+‘Ù:›7;‘¡Ô5“àãE9ä÷ßX¬\‰â|€´0eÏ›Rtû¹°l&êUt…ëV zÆFNú9ÑgÓïn¿5Žö’k½æ’½¾é÷gwáåaò§ó_||ýš—Nº¡’)ƒ5$Ã,‰Å³cRweÒXسã˘†aZ±QÐêe„Ux;Öp׫&³FH™$‡Vã„*I¥íÊ$bRßÑ\75Љ.h•Xäêø¹åy½-Æý|>?¥NÖS]H²=ÀÊuìñ ®œ솧“èO.ì{ë·å#ùÇOkÏvéº|‚¿ã÷¿Gº{Þcö^¾¾?åõ4O¢žI½~ôò¿E-»ÞŽç‘÷ ½áÜéúÏ{%ŸÎßÔõuôü=:Ñ'èÀ,-¢{ŒÜC®˜6”rÈ1<´ð+¦œQ‚ÓuC’Øþïk,XÔ!žEwÃË÷Ã'|ØÕ)Je ©}Øâ:J¸Mœä‚A);¥qEå-‡«Û%Q:¾%T[ðãoÖ²¢ÌÀœ7•$¢Ë`F^m¢ê@½IèOr?š÷ïïÈ[_5Ûí¤Ä•iÑïÎ×ÿIó^ðXžGês¯êûz‰­­Äæ%Z±2ô«U¯#'“ îôK÷‚cmI¾G¯–ù¡îùž÷Öª¡{—³¨Ë(R0Ü´sÓ‹¥/<5V°‚mŸ½ºÐŠŠõd„wºùôz«?q«½&Ó´‹zé“4³eÊOxI9Ó§»ó£ „ƒËcœ„ªˆXŽ^¤ê3‘´Zë§¾ãÏ©š¥Q°÷ b@XÚäÙ ˆ¾†Ú_Q˜€c&|LŽKl0ÖÄÆlÈxN IP«Ô”æ©î£ºŠØž†d¶«\çtñꪛÆ1Ò,¢ô\1jñà[¨Ã }˜ÃAŒ,Ÿ ^Õ{®Ê ÷;ÝQ¹c]Ñɉ­©×´ =ýRPË*Úh6M`jú¹"£p¨Oì±EqšÖxS‰ªôN¾”YÀí©l}ë=µ’]æ°(VRéJÇH©7½Tu½¶¹Í «$#¤±U\¥j£•Ý<.4ý?Òµx]¬}\·hÛw'ß™þçBß« 3SC. Ia_Uó´6o+ú ÓeUZÍŒYÝ„}áëdÙ¼M $.Hr4ž!Ø Ö–<¦äCl!TÌ – Œ:ùV€ ‡°®r™“<ë¢:•sÚã/iF‰4BâS1U%t9&½c‰Óqùòàæ|Ž<=±q;PÈAÙU\\"–|‰OàÅ}¬Ÿy4†VÛÈs¤™ÑÉ#­Bg¹ÌèEDGN:üü~UÈ Ü)Áä rXð-` I[¯h_RSV<¸Ÿj‰aý!îý*jƒÞ>]eûÉ1gù?x+>­+¾Ž |ªƒ’"ö{ÿ]æ5!Ÿg€XC3ô¡{Kkr È%eÜ?3k-S•oÑÙ0‚Žr'LF£FÖ•S[Õ¹&+uA7aÐm[ldušÊ}zH‰SYÅçyÞû. _×Åe{U|¨DAµª±ÇÜÑp‹Œqiaa¯èc´3œè9 ¼ÑÉsÇ[åFaH¡U@0\¡Ý]Hæoǧ‘î¬g «¾ý¬ÊÉ-f#ìý U³\qZàVYýò9§˜[~ÇÒLwß]#u%‡N;îïvõ|+ §Ý¾g»õœy®ù>)›3`̳Ë#•™1%Z2ΙÀŽ€p$ʵ°®‹yî¹¼L%‹ ,ÇÎrŽjº2 ZTÕMi.‰óe=<ƒ >O†Ìmœñ­„Ò&;äå‰È©åG¹ pÒùWò‹Þw0±0Ÿ?—&€å‘I ¼ÃÊP ÒÚKD}Z°ÍJ™k"´‘&: ÒѽýH×u‡ò?‡óçðÖ»L¤ƒ”á´Ï|é'ØÆ$Ù$cÐȬÚöCÈu·§³›p¯ÈÞéÕ&F(ÆÄ¯,û JÊù‚'pTÈÉNzà…T‚ß^ Ó.¢©ä`Òr,ia¦BÙñâW×…’&À ¥]måmh.ª¯K°Á‹t1¬eZ÷«Zò9^èË©}¼¬ªÊÆ 1)Oh+…N‚ÁìŽk­¤8â‚:ÉE‡)!K©ä Ö•ËZâ/mHXÙ> S2 “1kš€žBXºG•¶2R´%¤«-f½°oË£ž/=êôiH¡qøÛôG:óg (& ³8g´s $\Ä–Í`lI¶PnmÚ€>ÞÆ\J¿&#TÔɈR |¨àGµ”jdˆ.]ÔˆIt4ƒÊ)Z¾kê©­è@Áo"ãÌk2q52Iu%cG9ɽ¹âF·cí}4ÄleŽæÊcPQŠ­U’Ýj†|,錶V/&;ë>‘T,rX’X«ÙŠD-±!nÍàS¼ã@qÚþÄ‚½èw:׌XbŽ‹Ž&56þ›×Œ5±&,ù¸‰l*¬‹)Ne–cä ÀsÕ°¾#U±Ø÷:ñ>y÷-kIbʧÔò¶íDrÜöp¬WTû,ªyæ$_0Hrâx”“ÊäíkrñáŠAÊŽ’ùnZos…UˆÏ£¯›Æ÷¹Áå+KÝc5Û‘ƒ2(lq’ ‰Øì¶ 3R¡Gú{¹¹bIdÏ;ûOO_a|¿cUfcþRJ­,¥bnÄ(ObX®~Bûx Ê=Ëc2KÂuýÚ´n·‡*ju¶£ÍÞ˜¬ÔaæþÓz%¤afƬ1!µÿrˆy0eØÚ&Ìî:C“¨®c¹ó·ËßÎþM$Xã°_SŠRKG/ºéìpÍ{@µÎU1ùÎ*ß)´Ê=å*U A–¸Q›æ.ñ[Há„mæUc¬`ØÞEdÏx5Ê„åªðˆÚ£ùÙþÚô&Yä„^[£§É­·ºk¸ò½__ôÃÝÞG¯»ý™Üêÿ•îó:¼´Á½ÿ’Ç.#a&ÂuŠÖÔ+rDlûØ÷¦> 6J}3låTH%¨˜7ÍHŠWu(ÚÂé|·ò/±n!)b¿oë­Ï0ÛÛŸ=¸ÌxLšìÙ†$¿jù.Æ•åb«¨·~ºh@è-综ŽRäŽslö˼c¼ŠrB‰$v&ÑõlÇ]ASvYâêdíÝŒšŒ}¬ÉÈùµ9&1-lF°ròùö3-¡^È£Ç{6m ™#’V{jsX©­u8¾ßZ} –Ï¥•šÎH_a&7UËë\K•úLб­FÆ,D|×öQ\ÖýcW&´×NÁ+]S|ÜZl9ÞetW-™å’4œ&ÊEu›d Ò\ ›7˵µt‰ âtJ;Õìï"uŠÛc§. [™[&®Û+£€Úy¶RKƒLù“ºŽÇ¹¶‚™ KF'¿Ô*ü(á"éá{kov¿½¸|+q,lcY½MØî€ –(Í‚XÇj1f1™ͽèHJj¼~2h®ÉŠÓî0¡×ša"–[ï1Êûljy®F´iG¾¬ñ㨓Í­Œc*™æ][£~¨<„®>žzDØòþ{蟺ïüÚ×õ|Cý×ï¾ÿûg§§·õþWWZüik1'Ž‚[mѸ‡^²# õ“òvɸ+ú¹’Ï€¢myQœôþc­Lßq2½q‡5‘Òé‚]ÓÖbµ©»‡\Ÿ!rbÖÓS3¨®ÇgY¿ÜŽ«ˆ•$y"¿7 VÍQC|ËØª Ž„ºð×—Nyyû´ðõ^L#³1l\‚c˜›–Æ0:Fu%°¬H¾fÔ_<ã½ó¶¸tòÂã&»0o£.7dR!”£·)Jæ—© \¢`,[1XÚõó.¶=­’FÔdV˜½1C˜9ËQ[ˆž´k…2®&QÑÂÉÔsÛ~ÇÈÙÕ®X."0Ò­t-k‰{·uãHL2À«k eȳ{B–0ñWY׎Z#'‚‚BL¡UD ¨Äi5²™Ûcsq;¯¡öcò¸Å>BKÛ[áKÈk2l‚¥³â_VAlï/ss!„t ä" ïPOø¯o•þ:W"êÄû8áV{(1Mp¢$kPDDf: \×l„²Ì©ñíµ"`wL‘—=ùûkK±•]j\`¿HyÊš! ü½qñОµ•Í ¹ÀduŒ¦E‡Š-²ÊàÒðÜÈ,>m.€+LÇî#ÅœvlZÞã‹Ü9`P¸v@ƒ®%«8Ç2 @Á¡.):µÔ×­LX¦µ÷€é“wh÷d#ncS`á ¤åBib5®¨šŒão*`U q#^ÖåÎ ¯Y`Wž•”×K(ÒÊél‡M’×DŒ±ýÆ3©Àã-¯?uºñø|õáBaE1ÀˆØ”§íFP7W¾ø´–k¦äd•Ìvˬ;é©eHXžWË$ÿ¢Ž–ûÃ܈ÿ‡èg»×*ó^gûk§§±õþCWJé6÷Ü»µÞ\‹ÝwÒ_ ‘9@{ŠÜG»ÿ6-oóžwãï÷ú}:uCC.×[W]ª`v" äx¯a«}(e—W–ä6øœÅ(&«êj”¥¿óØÃTqßaZñ«¤ýTî×1 Ô‰#²$W’lZ;V™lJî. UŒÀ›¹Gä&Á£‡¤~v ÒJô¹ïj^û_"x¯Ÿ‡}f2‰–mœÇ#)Ž)‘¸ÆDKÞ!¦òÈOÐ]Šo+Ü£èÝy­÷{õm_ô§É¤NßÑÎÆ[Ø÷'qy÷º³ÞÝß3û?WãÓ»ªs+ý\s#ß둨¿S_YÙ@tý÷Åg—Qv¾¿é?½<•FþÉÕûþœê[”î$,9¨•ŠZXJ»„< ÒGh(¢ÈdC=dÓ4jfº” ~~.\ï±ÒœŸXí$ ß̬â@6fPXaRqH•dÎÐY¢VY#|QÈB½E„F‹ÍŒ, ÖÙc§µîÿ/<‡CoD³Àí$K& Èò4j’G1 ͈žÊöŽÄèZÆÌY˜®¬fØånÝ].'NÆe†‘m]»õ¥ Ë¢Q¥O±¯‹¸bÊ „e³ç”-†êµHMj•B½¤ëV-W·¡ÚÈ„L¶[ò £,›L{bÂ4‰Ö­Åmh,Ý‘(Z1²hj‹ 1Žë 7™Î;– ʰšû¯]‰ÚÅ|Ê(bØ’åÓM'vRe“`Ù2*úe´¼vA,íÖèdAª¨r4sšl=+v~DlntHò.3GãÌu©¤:€ðj²™’¤üJëFÍÀaúÐ/–71BÞôk|¹Ÿø|3 „´fø&d0V9x£ì¨»7ŒCXèÄ4Ë8I5ÚÔWÑ:³›¿UךaážK206xÝ<¯ bbÕñ!Hìjؘ]“H{Ìò*Ží­=nd¢\½b@Ü 7šÇÉÂYU‘QVQ¡¨˜Ø¯r–ž[å+ì Ò9 Š‰ ŽfxUÜ µ…æw[¸…×M2‚Û:¯°Êj²gœ#^2Ç”wË¢rôC9{× LzÔsì±Õgï.54€¼XÌp¶Ü£u–Hk oDw0âÄ4Š¢½#3kÊ×5|Ëù ÷òáâ-ü¼G*Ê Aã8+,S")€°²oF±æ XâÙŠ¸ÏaT¦Ooµö“w>Lâg0çVL“ϲ­8ïI›|váÇ™‡èA‘Õ³$:®Ìv‚FH)ÈX¨ðô‘š¬nv£›—b¬Áx5fÖ«!1âϹ´íXoj¢NÚ‹VÁùnÉ £”m´¶X±TÓ9¸y„Ëu¢¿ú‚A÷DûBVD·ˆÌÕüœk1dµ⊿ª½Ûx•øÂKÂ,¢¶¾·|ƒeMÉnIÔ,Ž»€ Ò ŸJM‘/¨¬Us¸_îUîcD[¨4èuãÜyp÷ Ä瑤i¶[2îlé$¶+—1h†€ßwÚÒKý€í'nÉOfZPn U<ÕòàÊ ¸Ö¹ž9׳:hö:Š^S{ɬuAoL†ŽoLqOjV´¸ÞÖÑWÖ:#óBŒ{ÕAŒC4³Á‘$y&&~?CZõV1‰ˆW42#]hhïiŽGÎT·uÒ N)vÊî4ú«èò-TùA§¾¬VW,zI¶RßbõÌ"ûÂã r©ÙP•}ly6Mu‘g˜.=Z×› ·–*ý×Ü ¤áÛèÖxê¿!ËCœ~e *É’ ãŒå‡C81¡ÐÜØ Þò5¶¼zþV© BË+ìϪŽ5â&D^l5Œ€·g!Ïlnê«Éæþõý`,ŸÖ‡Ÿú<•þ÷÷ÿêÀH}ÇÝú•Ç?WþoÞžsö®¿8¿kò:¤‰3aÀìÖ¾´{…$\ŒZ¢c"”{˺ÞBÛĘö*H}à«IjKâ b \ø.ò¨DZ«pn6í3ˆö˜­Á“tæ†\x™!ëcq]¶1ï.îãX6TgUÄv U©¶Š„Šñ£f”ÃÚ³‰´D®Ý‹ðàsœ nƒÉÈø—–g;ºàe0]Ž Ú˜”њ܇,Ø.‚áMQ†s?µ&[WV9¸X)› q -ŨR‚BݶKq[”y8õ< ")Ð×ï™',y’•¯Zа2‘^ã‘­€fâíÝ-Fר°‹¦@¯Èòì¦wÝv+ÓžNÛ»Ã)Ž…¿Y÷YyÊÊa÷4f+܇OXéÇÍΚô×ßÞ/ÈK„Ý#à j‘—¼Så+þ¦YX»JJH 7 ?³Äíÿ"Óú~¶\…“ǧ”KWmÑq¿ŸØ4ÛEÆÝøehÎ8™«±3-Ú êÕ Ý›¶–c…ä¶ç xu¡—Qà”öx‹Èåi1Ödxh Ø6{E9FÒ>Ô˜j¶‰rÍŠ+˜›G}Ò+ÊÖr²¡Sf6¶>u'{ÙjSjCM¹îù^•ò®„R¥ÌÉåív%q…mì¬3pë±Ù°bäeˆËCÑЦõ¬šãÍ–‘ñʈ%[KD¥„ û§Žnr¨´Íï#¨¹ãóáμ8w²LD›u‘–A ’L.)" 7½Éue9R@Š«Ææ8nÑB¶Þëgñ¬pQUæö‡©›ŒzvC5™ilðQHšë+øðäZ†ãÌCG§—ŒÁÇ9[¨k[)Ö÷o^æ:Pí•v#æbyow26Û†>è†-M‰Ò šÕ†êéË0>é’¯~HAÊ¥6û¿¶ùŒò(ð ‚Ûõ¡ ßzÆæÏ®™[¤¢ÊGâ ¬.T6¬÷µ«<s3¨Ã 0—m<³Ûî`vòçäCŒäÎ*Ý;ç q¬VÁ©lK÷meÙ‡][Ui“…¨WÔ„ † ã¯rkü\4ÔqìÛæ|›×w“îíìÏjG”´8p¦\kKªÀC1¶±«˜Zò©öûE¾žáÙá*´ye…„±€ðÖ³u#LÜÙ±n¥Çè’™Åèè,­`{´)Yýqy ÏiQá6GU/o­B]Áq]o½6.PÚ÷ØŠþ%LI;€\ݰ‘@²ÃZ(¨m ,G5ˆŠŠº¥hoög8Ì1*i;]gÜ•En¦È|ã×V[G ÎªkègU‚Eñ¢Ðcy]lLÉ yá‚ÀCZé$|MùþÐÐAÚÙnÛ»ÆWJÆì2©S$ß>âE 7ZU–5%÷ 1ós)×òieE°)TŽ®ŠÐ‹Òö«ûóÔs‡Ì[¨¿8¦Eq9›dˆƒ¢ÄË(2¦³ØƒxGö1e³\,NX’Ha˜ÒÖl¦mY€ˆAÜxf}mŒE¯°Z覛4(÷ÕµùKÝ1;$YyZúòŽÌCH•òˆÇ>ÄzƒvçìjÓJéfå¸RwXÊ‘ÙY^¶tc}5Lº(ÜNÚíëLI/Ö3±|ÉDšœí•ÞÙ’·S·—']à®HÓ2“ÛÈ­½µÚiWøýô«5™-m¡7‘Ä*Š£‘C`Õ•â1!ߊlšRMjí¬ß*-û‰µ½–å6í2É•j I I5  òvç 0Ö=+_‡åúž×#™®#tïêGçE˜Hdg(É348¡xáÃáÕ#Õ×ÎVÄ‹&lÈ(é–þ€ÍÈn”çdVQc‡0éÕU¹öS™Y?nRK†$Æ£æXþW>Ü—Dlõ`þ¨¥­j×6”Û%66øåÝììõòvÐÙJØ&†±#ã{¹VËûi¸LIciEu~V$«[=á‹$1Å¡ä³VÊó'ØâIÌà ho¥X\dR$R¤LÀõ.¶Ow¸°ï§SÌe¨×‚ÛêDŠÞY—l¸ä€þÐ(â];\¿lGŸÅ¬ÛûIвì;bñtª׺’Un Zœ&„o|„,*xRN ­f¹Šb€H·§µ­º?†½}õΉÃ}ʉ&Q¡X6Œ¨0Ê®Ë(Q˜îJäšžu¹ÿª?ye+–®iæRx§›J”‰Óôu3².*´ý?]ôÑrÿ,‘ÐÿÙèÿªïêÏÐPxoÊò,shw@çȢ̧¼ ¹c¤™­€÷J0Ùœš/{Ò]ÅX¤TÇÆæ…äEFÔ¦ªAî¾ÓnM”÷ÌÛ»éq.ö°øù,%Ý62¸¶:-Ô&&£LIeV‚k$ÁËãp¯µ Y¨0Ç3¦ñɳ8A° à[{gðöC#Þ(“a<Ñ"cñ"ؘvp¤ÍXÙ&ZDÜ+¶DÉ,’€û 5Y –¨¦£NÕù[ÀtãñÐ[¾ºH`Åb%cÉ„I@™åƒeÈqQ—Œ9,É2 “•Œró¬&y²”›/.¸»—6ÎÞ}¦aYqp*é+ç÷ZWêú,ýÀ,t@ë‹b¥¥ ;Q fšÁFG™ñDÄ6W#¦ÛÎêî@µÝ½ÆÂk…æk£ÎÞÏ9ºÌrª\™¢kšì4ù> ²ëß GlÀE® ŒÖÊ›ÕFPæ›:|j©ß´÷Ð-𫚬@½Y_œ‹ˆJ>rœ8s6(<î ²ÉคB„람I p]RËÜͲÇ*6ýÉ··®…_¹û›˜€bȺßÌÇ·^‘åÄqä1÷~~÷:|¨xЈ(3Œæµ‹3 élÞò;ø~^=úæ)pí¬òl£Ç‘WŠÛÙ1Ê]^JÞ1 Q¤nåHf6]³½FN“›¸güC^eÖ‘ë¢WJž,¿nR—7Èíb³¨cú M ª$Ém{pxë"(°oWÚYC ÁbN.%u +äÝÈz$ôþè-w›ŒÉ‹‹l7*šÊu{Y-3©Õ–»€jqP±•‘Ø)íÔ&ª/8ðÿ‹ØmñÆMÚÞ?™e—×3r¨µ§›CåÐàíá'îq ªFià°¨¯¡Llghº#IžÁŒrÞè×Yì\¸8îAµvM;´[µtälÁUOáõƒZPM‚)̬Ëglj É$£¤G‹:YPñ-V>½¯Ù ‚Ïk+?T¶µ·…Ï3¼bXí3ש ÿ ¸E>K9,N<þÚÊi5)kæGQ`Á B&ÂV½Ë\ü5ÔXõççNºó'ˆ@Û ¤Â´?»c^Ivt˜ký@ØÈŽ ×iÈ+šGÃR9O†Œš£b=á‹>Q—Ý·å«âKf'¹Y¸w69sò vÒÞÇ Ã&Ã÷sþ“GŒ¡Œæ €¶jÖF>Áî%fVæ»tc²~íÀ¸,èé]_2ÈûÖéNÉtOxDÛì”TöU²XÇ}dM gBs©+™±*–$,¨aÉZQ:,HÕ•Ó {¿¥\ˆ ÈWwÔß÷žßØD†ŽúTÖ{ÖÞÈŒí€FZìŠE}äé3šÕVý˜²«Š4C4}-{‹S‘áuq0ãEÆ,D}óˆ[RM5g¼ì tÉ’wžì²”¬Š±ùzÆ‚Ö9‰ÈXÅ…ƒmùHŒf`Ô¡ÚvÞ£qü[oUÔQOµF)I`É×™Îk6Ä+ ÌGÆ¢Úåy4˜ŽXâ:®±ôÔî’ÝYÖŒásøÿÏöK $e+pÏf«I’eÿª=¿Jbµ4l‚W;xY’º PC""R²wm8XjEV/^ÔdoŒ/l/·Äî1·—‡Á¼êNCš^cl¼‰>~Wå?¡AáœûW:ã7~½þì |0ÂöäÛW+#•¶˜MaåÕ”“OÛ ƒÁÏî,k@gHd{2Gò§W¡BYnT›/¿ˆ¿å]¯|øöðíÛî·„­å¤Ýln¶|:|¢¾+'ÑæxE´Øî,J\翇]“âæ”(òZ[æ@ºI2(ìlã€Åfh·Á?ý:/W¢yÞÓǯîþç<úüõä!ì7Þ­ðöu{l6GhlgËÇæäÞ"×ÁWˆ| SÞJ+°e9Ñv¶Ê›X£ ‚á[ˆ:ŒÃœÆ´ƒ² Ž@=±gÍ'׫¸ÇpÅõºLw;‡z9ì:5Hž¿ 5@åèõå>õÒ· è/ÂÜøq¯ßfåí.1úA›/‘ä—Xþ?CãÏq.//o,aSÓSÔÖåÛ.ÂÎÖÖÄñ WWÁŠ"É—2d€Ç޼¥#XÕ]w¤ñúYÞȆËfáXöa¼¾#¥T+ìr/ûm߸ý,’Êü·qr͸¯É#z»V˜°î©fq× Î@•¤_6;ïÛ›â³Ú%šøuÙº˜W{¼~*·#Ã+¬íaQÖæçsrv ¶vödJêèqÇ"tùDî(¢F2„OÚŽ^ì»)ú»=²‡þ蟛³k¼r !æŸdñL2“lhlŠÅrÀ† ú¦ÿ,Ì`Br´m·“#5›ÞJjŽ´ªì%ìûöóû6ý¤YH¶ßa÷~ËÞ9QÏ.»e·§vÜî%äXÂt‰.ÅK |G5•0¤K›W‡ew—P Å‘a*¬0BI)̲**r‹éóçìãçóù|½yù*z§¦¼k}¬~ÉŸþÄߘ ¤çS²| $²~oá·Ä¦ ,&Æ}®c]6LYQ#XÌ€î¦>U¡âWÞYFò¶4·øýÜ¡H—¯ÒûØIí±öš{:ö¿|ó9P‰½Xu…¶ËïÛ ŒãJÝ-Y • v„ÛŸâW8¶zh1cG®®³Èm*kÙå+‡¥+%|{{O|{5pЬÏÅ®ñÖ`’28ܪ¯°Ëw7=-{‚É¿Dðz!I¶— $G–Cb•xµL‰1£Ú^Ñ$'8¿é{&2 ‘´vØÿ‹Œ©ò̲]›ÄgãâWKåɃ†î¦Q•²;}™)YÊyd ^þÜÏμQûküXÒîæt,n·ñ)/Ãn-y“RâÛg´û{•o±é£ˆçµ+±¸P7p/E ´9ö—÷nW˳4’w °ý ÿg]îÑUÖb$|RÀÜ×SÅ0·\·;_’á÷6R"u­³¶ÜMhŽKy2¶¶¯>Ô¯pX¹,תÍ"•ÚÂoß >9°"î_„ýõÀ7·†X±® ˆÚ½/qy³DCîÌñ PWeØeœ ¦_”QÔÊ’цq1_¦¸ýoc‰dôxðÇ÷#Á÷+l÷v§Ã˶ww0‰D„™`°yûƹ-nI„Z•ùS* <ˆ&=æ?%–iî,žÙÑ,¥+´£¾_.ðUÿ»[ ©ëðµáÏÏîãðôçìû·Ýò_á­¿ýÁSDõþ<üÿÏüt¨xin&ÝÀþ¶¯Dê娿¯ÍWž8ô_¹=}>~ŸÏGª5\½ Uí¢ò¼ú£—§¥WÕQ¿jþ ÇÔõéêãN”õj/£•yåŽQ>ï—ðùëeJï_…¿»òá~\"õ*ý­NU:xôãå÷*Êö¹ÓKôøùé_ÉÖÆô7ž:Qʪˆ½»éêϪõ^yåSŽ8ÖŽûSËýSxí£‘ËÔÞµVp4ã‡|¾.xø~ÿ–µ´®R1½-DãŽQŠžŠøÚ¼ü,øZŠÞ=z“ïáÛjw§cêØªæ"¢tð¼¹UªÑª~çBpå_¹x^>zT¿;ß^–æžÿµ±ß ýœ>G§ Êrî× ×§â*wËÓàôDôÑ„ Úîc…8=Õ93ÜÎ]éèF¢/S>\9~zÔ’_Ã8¸ëEoV£œ½¾XÄçá+{åþ¼ô¯§Ï¤Y_Ò1zI+yíòÕí±ÅTEõ!]ðµÿb§¢iY$ikŒ£»úVÃå ®;R(yy>%WpŽè!SëøoÂåp•ìjz*½SŸUÖ³ô”«‹ÌR=è÷/SÐ#bô8ôc¼ yUTEUù®´>Y~¹!O:Õâr ¸yÔ?þÑÎAµZïNž´TçÓ“¦’}H™ÔÖ!:Äç(šªõyNàÕþ–zpŒùðŠ¨¥ÇÞÿwò÷üõçh‰';QÆþ ëÏÉZâô Ê*vš«Ô«Âª'*ž¨š…i££DE†Y{“£‡zE" ̪pæ©îG;—põõ^§s¥gÈ^\±Äª±ùV¨ž®FöÚîë½yPrç'iÓ…õçZ=ã!®68]ÀˆƒkôS1ÿZçêÂuשœ/îò¬–êÝ8 ã™O¼Øðïë_Bhê°ÿbŽŠÓLT1B®•¨¯R/ áüðôUEôM|‰(dtl(ãGXåV1Ò"¸í+o'²öüš¼£xN_<ÝÈl@ÇèqzöìC#ÌÁ½ÑxUí(˜÷нHäjóðúê-’ÛŠä[ܳ0ˆư’Ò±>ª ª¤õG*¯É8T¬Ü5ö$Z1k=5áRGXDQšÈœ8ë#‡?†/H䤪¬Udµ@½ ¥á}yÞ5°œ²†°cªƒG÷J­jöˆð¢ÎDoÕ¿ötPµ9åÔû=tºÒGlª±"'×õ¯Tg«XtaÞ‘ˆÞ~)NxFÆ›”áJŸ òÞf2%=¡¶zF¸…Ã^¾ê”`{ÿi\7=Q®OÝéEõãJ€“riÿÃôèÄûôºhŠ+#,1sîhÒŠÒ9zŒÂ†I9ýêØsQÞª¨÷¯ òÖ§ùWÌs3œê_0â9¼¹F®í,wrоŸN¯ÞFü)艨IVrG"pšý à/sÀ÷v‚„ŒÄ“%QȆŽöI3†4éF —׎µH¨sÎw I,WS:RýR¢õ¡Ü4+—”ˆV‰}QžºU ›OØcsó½¸ß¾õ- ¸k&œIW ½è‘:WÑH$±§ôÇb³ëB.ÑRCÞ½IßUN:œ«¶ 8ÀJfж(ЯRµõb…Òf­j¬Fô/tßYÜ?R§åìÔÁg•¢­3bå%,É-£šP3Ù Š®Êâ+iË—†ñê‹ÎÝ|òÉZÄ$xŽkçKL(Î{b„ã¡£#ÕÊqyשQÊ7ð½NôV„Ö'-¾¬s0Ûåov6­²À ˆ©2#òCDkQW¥†l‰mYŒôþýÊÇ=SåÔGzêž[ȃd®Šx îJIŽäÝrÇó²X’\‚ø,ðà©ÑÜ3Už®ª“Ê Šÿ/™¡/^6žSCSŸ„êƒG8ëèª÷/©âÞËíJU¯€Ôó]ǸJáŠCY5ì‡!½\–q];!½+%¼1W£—ZŽÚ/n×_ü5?aOù{ú_ Ò:lØa÷¢¶®¸ò+#•ÒÚa¼ìD›×9ÈÇ+7"·†§ÖXçüJ«­÷ØÅ˜I­Žï÷·Ì­2ª¼ì æHI ÓèÀ8j£#~${ÜF£UPD»˜ö]÷ Dú€÷T%Šò8d±Æfªª¶KÌÚB©Ò¬k8j+8TÍš@ôlÍ…F)CWƒ©Lõlï©2òˆP"¨Ñ"7¥ôEø“‡›ü<ûé{܇9´Ý©ÔïHÓÜoð6ÔT¬±‡fC­ˆ4÷k#1ì'IX"W:×¶À£=Þˆ>ˉÕÔ²USìÔ(m!,ìi¾è‚×–¾³²DíYb9(!Áb’G‡åÞ†{œŽLŠÎ•W+¦3l¤Fz”Pb˜¬ÆV{gU'u ¨í^¿*Æ=ÅtvüNF*#¾ï•v%•"‘ ÷‡vÆÊ U(kŽF4.µrÆ,oW¨úœ×"'Bôúª—9‚ç×8knŲ—‰BøƒÌp¸½´­ˆg$x±S¾jm£¢'W‘tv¹ÔébÆùU­QXlr7:ª OIçôà³VNáÈÞP!±ÄEW¼|5Ü´lMS“rJø‘ô~ ÍŽ:0­'LÔi©Íbƽ—f"t3JW)¤sQ;hæ: E¤“OSUD •(‘ŸË ^^®$èï”W»¤ð&É™&(b«Xæ(^n'uj~MccP5$=”" Åä ²H#UyŽ31UYH™ÐѪç«ÕèEcT4¾œºð¿?Ÿ ¯*‘u“(ÞÞû…&åÙ†„^ö¶º5ÇV"µÇµ¬siŽü~µï‡'ŽGT:Xàѽº·<\,¶¼‘¼‰^î”UsÕ~ÐÚ×TC TT\‚\aù¸¡ŸÑfBmŠIŽT¯3^‰Ðö•wKXÔ߃7ËÔ¸u° û>WåÝÂ9L¨hü‘+™Ôõˆ>z^>H…ôQ*újG.²kjX:ª§g9øÕ²Ë˜µ‚¥Ï»Ëõg‘‘:¬‘,úœžrxa„6#’ÎŽŽøÑÛA«ïn:Žz|{úò®i"è7 ’f>¬ƒý“ØðÊ/ ö<‰¨ë¢ÔéùIÕH}\:ÙR\Fðû73¦5%½ÔDÇ4ƒU{œÔ+—­©¨yY ·7ul¡¯íÄÇçAW´½,Zš`[2,ˆÌ 4TÄe£¢Å#«ÝBðÞˆVYm gä}ÝVØì”ÈreH®VWEeˆ`†mÏkg‚lR¾\QµDÐ:ž4zëDL¾Ö\ÉŽ‘G^;•(¡}yÖXÙ–%ˆ (ïw×UΗ(ðC Z×1ÀTëR¡޾¯wž•¦™3YdÊÅõ;…àe˜•¿xeBopCoÔpÍXKŒyéI\ÉR0²Ù[S™À€×Už±ÐSÊ6•Ê„`ùQW¦©øYD6 ˜ý`Ç*®¹Àkd/\dF‘Z ©„©$Û_eÖæqãNŸŸ5d;i±¡ÄÖËÂÏhB2+š@«Dˆõpnï½]yW(…ñ}ZóE}.´â a*Ž$ÑÅ i›$Ç›ç2-9Zª•ì­PH’ÅB©%Œr±:éZ‘‚Øï‚âöIoî‡ã}GÄ…²¨©sèI 0ñŠ`¥†So;ÄVך#­—ÎFr’œ®¦ŒªÂ|VYþŒ7.¢,b:>;Pþ³cR+ŠÆ¬¡X²8mùFzM½H§¹cÔUÕ7:º{)š•4äc¬øŽPU˧œï¦lˆ5LR»ÉYCK«5“-ÊD/»OÔ6#¤«+½”‘Üÿwתþ²™EÇ‘wJÅ[lzz½lФIʽôGôðš¼.<þ_1î½b9#qÙauPîèú¨¶U†™XtÊM4ì¾  eÌr±ìeD£ òõ–EÊŒ‰÷ ìµcYÇZÁNŒ&©±Ûª©Ð®ZŠöÚ tÜÎí%|¯uQUH›Þ{“ßB5}Æüð[Ô½²½U=8Z*vsn£i©Ô´O4sÔJ ëÍMÐâźkHݰšÚŠâÄ—Ö&…lÂæ±üGWÕ’r[¬Î%’¢äVâôVl‹"ÊãÉS.QàÙræºh¢ž]‚Dc†Õ#ñ?Ò ÞÚ_¼qñ>xTIƒ»ÒÌîÇ‚ö×·ù·<¬‡V–Й-…-|ûÓ›¨!¸m<“É? |Û[>°æDNÝ|T y(×±ƒÒ¿GÅ?G‘PXÞãÕ¿ChC× ”=ñ½‡xÙ y•tddÚ2ž[,Žix´Vú£ÏÞŸÍÊìS&¹«Zª²Ç Õé}qŸ)Ñ¢ÐE¶2QÕêÔK°™*¤PQT0^¨E*•‰³[”X$Ä %%HG:‚ÊáVrÄ :k )ҫ䣻q*jæA‹ðUG¾cåa;M|åó½ù[…¼šË:™Á¨]øá–}ðcÛ"ã²Tf¿lÚ¾Õ]T¯o¥¬ìër{G‡Ë\±ê 2Xà#™ûA,š×G;Íñ=¯øº¾Z£+sÚˆ‘ª  Œ8× ¶kaMw–CKúbyF¬¼„²†Æ“ý  È܃Q´Uô žÁõÛ})´õÎ=½VC(±£ÀxV1 ÔX"Ö|NX),¬Häj£ÔŒJ'~ojÉmb ˆH/î¨xÂ"Ýì¹#E¸Œû)[Yi¢÷¦3Pds‘í<·Æ¦bÑÃlëzйç¯'C¤±^¨ÕE³°£…r%·¦rÁ»ÆA9„j‰×²÷ƒeÒ>Dx’mf L|‘÷Ÿõ¥#µ+©Í--a‘ó¨©ýøb1Þ5¨:)ï,‹Î)Ù!î뼤`„âY'GÖJÈ#Q®©®r9‘bn!WVWR^ãq#4Õî+gŽpq÷ÓÛÖžtñÖa9Q[Ù@²¼ßwÏŽ ÛáËßT:º<›àU•ò_ —@0ø°Ü®{H^×Ô.Nj!~>{¤I¥$ÃÓãv“ft–ç¿ÊccÎz \„µ1œÙU3ÜÑ•Ë×J›-Í-#í#;§–»mTtºB7×̽%h)ÌÎÉhe'!ZÇ8MB‘¬G5©åíü¸†ÜÖŽ¶´ÞáÅjì"© 8Ëbi®ŠøÖ*O=NŠ6 ;QŠÆÍåT‰ÄDË© we k«ˆí³n»„€¤!¤:dá-qH®é%wHšï#Ò‹ÔG»«ãôtÒúé©åoË΂»88WUbÒ(oWCf3âÀ¾¬¥lo|Û¼ÇY Zaî=,ÁpŠgG¬¢¸ªtxR{Ï0N™f2Œ‡Ñ?šLM_e0Ü=VhHVÂ*—Ï*¢ÏĪ¡á¸üO'rx,‘[9ÏŽ3ÜÛ€³1‡ùFºÉzf÷®\w1ìŽ2‰îä¸ÔV¯™e€”õm¾ßË·9XÑÚÚìøUw“¯'¼d!!/Z½4W/Cú¤õ¢Õ휶ãôÝûxÙAß%RGò%U>hCNˆ¯Z×MtÄv??Ëǹ;iáÆf‰…i$å&UWIJ+gž'$e*Gcàåâ9Ûχx|Da"&~Á”¯ªFÂFX#PxP­Û9i|‹zª3 ,j±ÙÄwa8´²,Çê%ĉÓÊÇ—%mĆÆ#¢¨]æcGì"!åÊÈätƒuR'ϱ‰Òn]ú¹Æ†·µõ5Šë61ĈlD~NÁÂⲌO¿‚Hc¯xͦc¸c›Ñî†C“LVåÔU}ìQ ‹6­d²rØÖãòïF+“Ïž&˜+z; Žª*‰Qhì‹>·‡‘fu©Žã¾XJ*¹ræÐÉ’ZÊ€ÏÇ!F¿ÈÊÒ0vÔ’ã]XÊ…½†•Núç ’œ;úáï÷åj˜‚œŒB¢–{(ÀÄÜdÆ­®G,’)'RÈÖ\ä…˜ã‘b"€Ò†H¶ 7ítâŒë¥ÆÒ©§ddkiX%ï-ƒF‡ZÏ…YÛøu>ÅìñìŠÛðÜprKA›Ô‚`xš(10Ë8˜ç•¦!@Ä—I` ²Æk^¥xXІ:¾Iî5ý­ÄSqšhc•ˆ™Mi头€ #ï ;,LNÐìf>ïò·²ÜÁ"²|W›;~¡’DjµÒ íPwÇ´ÎëÙ·Ø›qr깓&ÎòÑå-nEeRsæäd':·ÎK«%X„¤IË$;”êâºçÍË'Š«+ÚzW¾¿wi±¡ õOx¤Â“i‹ö’†„æE¨Y`RÁ2FŠEw2ã/™RMÂŽ,a#FÊq ‰6v” °lqÑ[×!^Ç[yiÈ:èosÄȯ•­Îpø}÷rÿÃã§»ðÓXƒdgH«îq5ó q$\Yn‰"ØZîÆÌפ¸ÎE36²“¶ô i›ss-óÈ„·›ôoÇ2'E¿ DjŬšûh1ë,ÂO0rT0ÎEQÆl}W;ƒŒâ×ä|}¸Çjœ&$ò#€³`%â_HF!°œÐâqâôó-zÝ Dq™Ðáu…ñ·7"›/1,Ì:† °m½Í¹ëÍG)Ö1]QŒÒZÕ²öQIJ¤½—oc _l$ *Ê6„IH:»'Ì,j"L,f–ÂPöiù#UÕ$…’¶p!’µÅ©FÒ0õ,E!#HÔçWîÜq·>áǾ_*â¼O Å€É6v—èø³X<„¨K_1cŸï+] ›5PøîàÐN˰ ·ø¸fU¼XŒ+8s;ç†5±Ê(áÈÃðš¶XÜã’K"Q"@ š0+ßyââî]LFmP„Qr.l1sÆJ§[fNÁ ˜¨3¼ý›½î{+P‘ÁF×:SZª¤G¶­Á²©VÖ;nQã£è[‘µÔn„7@Åí+«ê,qä)úЬ‚$’K|N²°íF(¢N§ÑÅÜËñ3lŠã•¤†ApDjMn4:r¿}…Ív‹(€f™2#êP¨*pø@T Šà‚GÚµ†ìZØ?qqœ¦«>KMµÅeÇa†Û,¹k3Í˾ζI+$Ä«r¸‘)-" J92"Ä3Ô.:—FK»´ÀºÜ\qv÷;mìãbr¤X[><9C¢¿ÃîÉSPáÉY8÷eO߀ ôw;¸ÖÙtØ»¡*>7¸´Ûµ‡ã¡cè•YkÒN ßµµcÕ°µŠ·s Ç–¶;âÅ{˜åŽþ¹Fâfó©§nœ@c˜—”‡o¶U3.í±ÂXDfI ç²¹ÊÄ"…o!Ò" A©@8ŠqwŸÃVŽ< ´ç×/¿áÓN2ï2N1V@®$£á»‘ô©$é` G*›(É"F l½ØÔû;œ‰v¯K‰U&\ùèˇ2Ê« $‡e]5Ëå0’EËâCK¶+äML¬ Ð.Œ8ÑBñ U^x‚Ûzd%>:Œ~JÙï³ò±«2 ŽÅü‡6õï„2Ü=Zñ:LBöË9…™SîÞOqe}ïƒ!ûYie6¨ØÜÇZE^G‘ÖH¹—!èÉØ­í½´ú:ú7ˆD«Îù$¶S[Ûguqë§ÀÃ1ë ¢ðëgšÇŒ ¶BYÇ-™ŽÄxzŒ }̲”SR®9X´oEkº†ßw§Úî{¯^x䙳ʛJʲõ\!‹oCËlÌù˜1/{£YÁµ1EšbonÞY“mq7MÆàîÍmdšC%€«…µÐÆa ˜HƒY•Öªb¶ Î6¾¼¯+£òGïÚóS+‡¶^km°¶>éLÇêÉ_%mk©¤Úá'Ý"Zã²ß‘`³ -´2±¡äsËkûÑãtMñ˽un蘮5`Ï)¼¢¬5=&¶Äl*,rQKÄ㸆u,©ëÚSiŽZYd²nd2BHt×¶2B,· „™â7-,£ŸÁˆÁåδSÉÃn_)=•Àöüñ]!J]Å5œ(µ,ÉØæªIš×%jÉPÔ ’mÎÞ×=9ñ¯;㣇¸]Ë.ê&.̈ª¤¸|,Š2å ýŸd“kf Ê)0·Û³Êú»)·dvA“ |‚ÝX6Ršß=ˆòî ™V÷Ðä²M‡ZK¨¯Š¦dÂdlósÏ8’ïÖi‰[bÛq#l±£B¥Ú²ÍdÔÚ}[î£MÆïï©(®Ú(ílã…åëdBj3Šb¡x†šµ×Ûå–5»€  3òXéu.ß ²Ÿ› Ï4‡[W‰‡d¹È1J 4öƒ|1ÂúMì‡äõ+7Ó7ž›Àë €z}­¾È‹A?²<úù˜õf8j„‚˜A¿­Ê“"º}ExÁ ÑbÓJœ^¹e· Ÿkü?Óçҹˉs‡Æ 3,£ÿdÀ—ÍÒAp¡d“xU½«Í“’ªÎ2,½ÈäÄÚÌ8òêö#±ѰUå}^A’® ,vY ƒ…ŒWÃH䟊Q"ew¨vËYµåQÈHñÕÇX[mæÊ1ú|”ø.Ïynæ‰C‰Í`ìì±}Î…USca†f6§0¾Ç­m23^²<Àêg¼Q)¥vmøkÈæ½Éùð÷x×…1*+6-wQ,/2 —ÞFcØè‰`9F]åÉ• ,$Á`{Ÿ…ÛTÝJ´8-;&îîÍØ’=tÞû_/<ÍåVÔϺQWÆX™Ö#.¨ÖÅ©b>YS!ö\ùžúór2ñ䧺ߥ«ÆÓ s‰8õõqŒ¢;ÙZ|T›»å. *H Û:;`²«Š«>œá¸Þ5µvaÚ¼YÐ%ødÜÍÆS_ñ>¶®-^á”Â,Re~P[de¤©ƒqe dI ‡œÉ«e‚oŽ)[qµ˜ÍVÐíýJÓfS*Ã7¼y na’Ô`r-¶È«T2äRZ£Ìå®–à’5d9±Øg£DáƒâGqA/MºÄnŸ ÈA ¯º‹/7¦†=Äbe8A’D†Pᡊ>ƉG5Ó“E`%±žçq«}¸ÝK«ˆûLß Ø5€I˜nÍ5E–9‡žžè8Î'(¯·Á(ÒuÅÒ—°+K$sÍZ Í!ºFµ€ìÿÍn¼»Ï¿Æº.11AêØýÐ ƒ²`$Û*!f °S*¬ƒ.‘FûOVç¹£Û)vY„Jdÿ¹¶_íó ¥³UŸ:Ç.¯qc*–âæÇ­„"C,é.#ÜGÂŒô¥1=ìÇòÚlïÛ J(enþÒÝ’+m‹1 iŸçåÅ¡Üdˆcù ÄÆÍ‰‚Úd÷BÞªv÷YÒçºßÕøšÜy5±¾à§i³Nˆhxeð!\d³àáVV}F$Â:¯qk'æÙM|üœ¯ÙqÉï%pÎKF uþ"ó¸µY4íîS3%ŒÓ» ¸X•¹D8Y•œ, dö›‹>à(Ù“‘E ëÞt¯aO1ÏN× FŸ¾×ÏÒ˜bѲcJZY”l¨õ½E!Ëð ©wmeÍêã1®ò½âÆì­w"†Çkp«µË²®­ÞÈ…—Šß\áa³Ü"%sŸC5àÅûØÂFq_"ºd0<¬äŽ%Ê6âÑ>§'Ÿ Œ+}·ÙF–,ù ;ê÷"M¥< \˜Š£‡Žâ¡”~á#ƒ…ŽyC`€Žoù¤àUoÜÇax¿˜Æ¤íÛÅ ~8’r[¼{´–Ì›¥Í÷ìš™v’£C3{k±Ä×"¼OWI2Í×É`廳ÅÝ[ M(Öìéo¥¡a‰D‡–eDi‡ë›)½•¬,ŠÈÍ£:¤—,7!§Ï±ý-_¢ehL²KWÌgPFÍ…NbûRIÊÚhåÞ÷RKv ŽbñMÊÇò,ª¦Svó…:f ZÕ°Y]Ëq¶6+:õR;<“;ø‰aBu5G5#ÖÚ©•ôÓâ“#€ä±ýï?ºDª¦1Êy ñ'¾;A ÌŒò.~H<@"ÚoçOu«Õ"8ò‰§ßd™Yp(–— }•ÎDn/«ÞE°ÞÕ§²º"7nU0ºwº¤DD/ÅZ“²Öãè:º3–d‘Ë3mæŽD&)˜ˆTi[VC\Ýõ/)F!—qì) ;`þìO†M¶·ÞøÍöÿg6¿Ï'γ[˜TÐäYÇX bêòÅ+…][Q^ù ÑG \)eÞ«^"ÿK—h-òÐl—³Â.ñøÓÝëyŠÛYcY#ˆYؽä'bÛyŽWä[ÉœEèí¡âϧۇ9¥OÛ„Äêo\ïÒpñ‘»/½«™„k|̘ÆÄxeËpšÀ±ÃÈ4LJ¿6É)ñi“»Õ¨ñ„÷'ºÉMÄÏz×áÍ\(+Ó-Í?ÑWÀ?³³Â—³shqÝ¢ð˵¸ö2fWïÎ76U\I[¥»W°†Gæ®ÜYJ²˜[F£d¡bøèΕxå5e`+Ò¶P 7$@QÂܬ?!^Tríáν½›œø„Ã#mÞûeÞÕ]°Ê7“…Y*’&¹×ž(©,óŒN-<û iÕAÇò)6B­›ic2b¤i3dœo+ý•Õìåè‚*Lċʪºwk©ÞžEEññ~*ºò·s“ôŸNåCÓÛnQt«zž3ÅÔ5gµZ¨­Vª"µQQQ5ëĦ{œ­ègBÌzÐj岜Þß'àj£¹øUéÿó+W]|4ã~‡—‡Æ¼„ý˜ ÿÆ%Ø$ùÿøAsößpµëêEþþåŸ5ÿÜj¯òüS…ûùõçÈÙ€ö·ô‰6ÎV·Ÿh.jŸšÔê~q¸ kQ^¨Šç=Ícž§=ÍkQ\¨‹ëì*|°ˆ¨1¢¢€¼¢ôµ”V"¯ özñÇáèª~Ž_*êñú^»eŒf¾È|ƒ4¸‰÷»=¿»%˜bS^Æ$ÐMÉmì¶ÒæcñÝìN¢Ìå–TdwlίŠb5Έg ÿ‘ZÍÙ¿h.r‘Ôt;›áû%®Žç;°Ë\·ÜÚ‹¢1œt! ¢iÕ«ÔöÇZ"1œÛ?Óö¥í>a…`¾ÍM•Ëéó\Ê£r+wOÄ­–5aÒ³ &#[kÚyóàšD#åsn/%eù]3“1Acø¤iý3n¤D…ÈßèvxRÉvGÙËoÞaY*¦ÇÅ–óJÊñ ÉŽøÅ›µ;eRÜ · Œ3Go–¿qf×ÌhfÓ-m”G4à•굂ÿ¤Õú=›³½›•˜{G<bsw*Èêëåø“Ø,z+äæ·¸ÝDjnÖÖÔéDÉøõetLë­dr¬«–c‘r)——° p[ìšý$ï^ÌÂãÛ¼Q-oh3L«FÆ9ÛLÌ68˜/ºi—yÏb?Kï þÑÞ-óýæÚ-œÝÊMäðû¹›ƒµ[³³×e=¹ø¶C¶Ù}Æujþ~ÞxÞ×Îò«þwòÒ¥¸ëÇå§“[OW"“Ž}Šß·×îüyûSíÖŽ¢u*'ž¬r½z¸ôTr5¾žŠ¼'­Ð„‘ÌtáÜ=¤ø>j¯àNã–t3âoªr¾ž¾‰¨îóÏåWñÓ„üªÿçüô©cÔù·è~5.q$¢ ZŽW)‹Àùêà¨ÑµËÇ j‰\î¿EôEUõõÒÂÊV¹\×¢¡€ßQôôµ^¨f§ ØƣU¤õã•^®}RgÂ~U§ðü>ZpŸõ_³ùéRÆ÷Ì.IòjLóÎE25¤F£øU@u(Ó¬ˆÄtª•6‰\îÓÔ«Ê}Ÿ{ó׿ÔÇ#›ŽkP\µ…F Cм/uÏsˆŽ.á[ÇšœpŸ•_Oá÷-:Sò«þS/ñ7ÇÏŸ””Ò,R ˜õj ”úž¦ñÛc»ˆî>"¡AsëÒŸ´Eƒ¤GkÚNÓ½Tðòtqˆî>¤­FGV‰:zºÕz=~ï ùUþÿÇç§ ùUüªéS!½ó·Óˆý-ï5 ó\×¢°ŸXŒS§—N—*Èè3J½)åÐQ¾±ªNÿÖù/ÂɳFFÒ+"S\‰«­-¬Ž2|</Öå7ÃÏB;¯åÍAÂ~UóþzpŸõ_óÿ )ÛÛnoá¯Ëæ}ô›æÝ#½ô/¤4r°¨Ã«c±½¼ F«#‡p_¬E^[º²î¶ Û"8Loi©”Z1tþÐ×Åà¯w/èw¯(«ÂTý)øÿUÿ=8Oʯø}ßËJÎìÿâ?>gõóóªp²­&Éa;b-Ñ‘#"±®„°Ü"qõä;Üdx•^ˆ¬DéoÉÛ’äÙ±H‘Æ÷ñPÓµ;içíkøUoÄV\öƒ«ÕZŸêÂ~U)§žWóÏãóÒ®C¯mµ½øxxyéTŒi—O™ „”WÃí÷ãw&5Òd?¥¾Tì"=‚NßZ•W·ñpÝ):óšŽFo®éó)äÓ‚;Ï ŠÉF'”``«¤ ÉÛê{yåÞ­ZÄüªþWNò«þ?óÒ¦ìéõñÿyû§þ#{›Þ“:õ¬„fW:}׈Hþã1ƒ€'GÕG Ó„üªý¿ÏNñþ«þá¥Mѽ÷²pµ®mìÚüxßµãTÜéV¢úÆaUñ¼—»zcwÝÀ…N£EbùŽâ#—ãVp­N:xI\ùùçØ 7—ü 8T¹61:æä½…ž®õ½†¯i:>:çãýWòŸË_8OʯåJ­n:ë}{›xv€·EÀ"‰m†IåQþ\‹#èü‰(ņU°lÔž­éN$:÷Ö*rõVöÓå©rZe}q ds$vÕÈ&Î `ÖȘîÛ<‰Æ!@xÁû:L¿õðËÂ~UõçíùéÒŸ•_ñÒ²aco®X¡ãkklj¶¼uî̉¬Ÿ~fÖù†È{ e8G! yW–(ê”áqÙÚo•jY#ã0ˆÑwZ6'.ëåÒ¸ÌÒ0ÝØ–¯S¢#–¡™å£½Õi;uí”ém UhÓö•ã©×S„üªÿ¯®)ÿwÍ~_wÏåøiPÀÄ¿”[˜&çDo{vIÔ“v7$ÜšBDۦƷp˜nô|‚X(؈åZ±§sÛúᣠ-VGíô¹Pírß–SnÄ<­b°êèB€ên˜Þ·–+%Š7y¾ ®G#»µåœ5Vê¿ç¯¼ê¿”þZVÌloõ­ùð¸i¯,àŽôZ·òl²fZÝ„;¢Ç®²,6¤°µÁÕ’+¶¾jT©Ï˜CW¥¡jvX©ÔH‰Óò1±« )W<ÔÄEE¼ia£êÄúôä=°º˜„s}XªÔâ·á?*¿žžœ'ãýWóÏãóÒ³¹n××IÚ7â{:ÞË©·OÊ­t lÀ“êQK|3Jèî¥ç«üüÑ\÷vGîÉàŽˆáDßqyí?¯¡§Ûæ(*'2<—Aæ¶K=ÙËdw¬Œ(³]ÚE­Ž”®4¶JNÒ•ÃG÷_êÂ]ò«ö}ÿóÓ„üªÿŸ¯ðÒ²0ï–Ç)=noÆ3¦¼{ ßG9³]³Úú«|ÀÀ̾]ÒÆ;‰T‘Þ8ÒXE¹ŒÑö“˜pNƒlzUÊÕUóã«Si¶âdä)âä5±j‘°QîuaN’Ü&(—̱yÝRU¢DzõµŠÊë„O¿ú¯ÙüÿÃN?õ_óÕª p¹LòÌI¾ªË{ß‘lÃÕuÒ­ååžMÙ!2["F—ŽŽ,˜õ‰,ÑàÊÝq&T/KÈÄs’;çpÄãHá]礑%&Cn=.J*“ˆPébHƒ(2{nSΓnù‘‹X¥" ЀoO[îÿžWü>ïå§ ùUüóøüõ*6Ù³zÄË©9C5vkZü`ƒøF·ìå¶1í²÷ßÓÇ(%6ªàcV­;””Ó$O˜i½¤XÓ¢ÛŽ1×u±3»öwsÖÈ8·y³åaÌ(&tOR[f­;Z2È‘&C.¼ñÐL÷Sëa64˜ÃGGï®gIÑ;M»\'åWúÿÇç§ øÿUû=~ý*z»ÿï{e½£À”9xð»DÃ0kyË&$Ø(™—(±!Û±Üö¸Ý âvï&ÜØÙå"‰–’0ä÷á_ÑÆ¥FW÷UÕ²D¶. T+çFÅ“dŽ”­"õG·°Í¥þ~+Kà€¯5Þ IZºÏzW†=…S–9}õ*]agJ’ó~Yáêì‹·Ú}ìãøÿUÿ=8OʯÛ÷}ßË@{¹þÝß?|3¿ LÉÇÙb8´Œ80á¼ ÇÙEµ˜+-±®¶ÌJ2¬øÇÛ·±-;M®F±™;Ëd…~­ýR{B†÷Öõ½ç¢v¹*•m™2q!Å9æ›nì­ ×£XL¬A©t0:Ø3Èy¼W#Ɔs\ÅgÕ|7;„üªþyü~zp‹ÿŠþž¥_W|¹}bkØ ×í{A‰ér^±:[J°1òMÌtŠ–Š$ùa)ä¤GÊÇ’ÞFe„ã]»°pº5z ñQ Ëwé*»·¨8Ù>é8Uб,ÊÒO`ÐÆÆP°äÇ–U]Œ.Ä«¬ŠéyAl‰¾•ÂU”UoTœŠéOʯ¯ñûÿžœ'åWúÃå«çÏŸ áêRÛûî'—Ú=}ëý’nI:êI2l†G¸Q¡Ì}\yêAåy$(¯ N)aD†Âcp”•þÍ´ž«U¿J9ƒáV`½IíÆdYÉ"†O™®¶ÇC0uˆ~¨’£Ñ>Ù#"ÞðÍ&ɯ;ª‡¢9„èº\'åWóÇáòÓ„üªÿ‡Ýü´¾–°ñøy𮾪ý¿Þ§í Ñì}T‘Ýuãwô"ÁÜä{’ ¬ŒcY²4ÄMl´©§÷¥0cÚÓ—Ëß“åÖžâL¨JÙÞUÑZï.>×Aj:[¬äío½"ÈŽ_Õ¸­^$¬kÜ©fNG=§+e¾(â•]jÑ9ê”êÕÙá?*¿oÝ÷-8üò¿žž—á§EÂÈ®_Öç`od,J‹±D›ü¦<†·i’[aåqáPVÏæ:%U\ÌyÓåºçêEˆ#ùÎ\­‘NIÌ7‰°æ½°­šæX½ªQâM1ãY¤;’GÇbÆòÊ“hM<ÑIô•ÌÇ/¼Y×ÝQpŸ•_éü?–)øÿUÿ=[ðÐióñ¬>V7ìRöTY\Úꊄž×*Y¹Ý‰7hãÜ·w†KäXV‘Àb9¡â­œJ!­¸¢†‰«¿HãN€ƒÌ–¬ŸäÖi מ€i&]¼]ûÉ®±‚ƒ‡\ëÃÆ0T1l]…´¤2Ç?¿lËnJY5nuƒaº½ˆ‘YÙVIÉþ”üªú»ùiÂ~U?ŸÇVã óoÓÇ^=aÀJïø¾íñta÷‡ }«[ê·8´¹Žötªû¦rKú2’|šcMXÍgº~¤•+~–jð®1ÞTôA%ü¢Ü,Bó8;À§, õ¹ÉläÉ¥JòÉmuÕ||Ju€ü°½Ñ:Æ ¦”è lT;œòyfvÐb¼})ùUùýÿÇñùéÂ'þ+ù]K÷?*ÔX)c|lj]NWrGfXäà »J†6ÒÙ]¬ºœi\¯w{X#‡_<Ò,"½öQŸŽ£caô˜¤Â¸‘›ôr4,i=åC|—š3}I#… æ¦Oº SÞ5š¼ùÞ?_<òñ–ÖÉJ‰xñed±_Ë7±[SµkâÝ ÚãlE™#­NL†á?*¿ã÷ÿ=8OÇú¯çù|´¿pøyóC£v(… 2—6k"), K,t›‹1v“©ò­Ø< ²O‰dÉ`ɰ¨¢k±¦ÇXbŸ–H…•UÀg–rZTWc¬-—Ÿ´8~tæIïíñnfY»L.å´¬•*ƒ1Ô Leq$*ò5¨2ÆÒ1ZâªËyÅwò²\­E‹é™+Â~?Õ~Ïç§ øÿUû}~ý/ÎÃÍ¿O=F\ª¾½Š¸FRÙÛ1-¾³“šÙ—x ikFºÉf3KÌêÌÌtƒ°H0jp#VJ‹F–f‹ï,‚Î6c>¸K¾øŸYFMek›-ö éýõhœo-Þ)wÕ1îë¬cE6:y2ôe¡ˆñ7²—öE‚V%ùòÖ×—C5¡ ¢¢×"§y™;Â/þ+ùM8Oʯðçøþ?=/Ü<€?/iðr¼© ÆâQUó•ˆFç—+ ÚŒ¬"·a@ÔX \›—ï@†-}\ùrçà”v3 c Øäi¯‘ûÞðpL¦Ÿ°*šXI,–GWLiD Û| üu©â`dZQ7m{ò&{Ê€3bämHAú-ººNBx6-jÎ÷pž¤•ÓÛ“—])ùUÿ:Sò«ëü~ÿç¥øh4ó¯*ävtÄßé`<·}X°y[QpA˜OŒ˜–[»“`S¾æ-ª¼û‡ŠVXšV*ÊÙ¨I"F]bùFôSÓ^1°a䶸Âj~ß%W¼J¾mþ~:ìÔ±Á=eÀÝ<~žHÒ=øt©¸xìÊ,eóÑ[uâ’ÕZWGhÌþû<’(¯g øÿUüÿ/–œê¿ç¥õ½‡->Ñ0R¤{³Ä±³Œìì[´Ž€‚XžÉ`Ëv'2)½õ¬[°Ë÷ŒRw]±aZ¹”ð.‹ 1F(bM‘†6:YYÿI›uŒ8–öå°Hr‘žUËjãß]fÑíw(5¡šèU[i ÛQÔ$†- ò—HR¬wûÎR>?U[œtb¼H€O6½Ë»Â~?Õ~ß_¿N?õ_ÏóÒü4¯ÓçUpr-ïŒÄµÉ:¹ÓL@°íiýº“m3CPªª©a/ò=Ï®–¾dÉ©™7ÍŽúV½®Ï2¤l¨‡ý È§žQP÷XÙO–^ߤޫ,ÝÒWãOdÊ­Ýâ´–XÓjÏuî6vÞ]ä_-èü»ž§s ©\“‘ÎrˆˆÁ俞WóÏãóÓ„üªÿž—ÒÖŸ yï¨pR—/ëØ A”5”–) ö»ˆÙàö\`\>3aYfëΆ:Ü6çìîâ¶Ê]Ž(ÚIS1°`'³¬á¤û”ÍšjxÖ E–‘“®G˜îȷܪŒWÖÞ¬‡ZŒn+°&2Io–ž¼æÃMÊ7Ë⃺-„åݶ«…¿Ûnþü™ÁÂ~?ÕÇ××N”ÿ»æ¿/»çòü4¿pøyùXwWÙ“²"ý'ŒR·%ÕÚít…lnä•&e¹, ŒK\¾&Væ{ÚXy¹f×ÚŠ\ ‡^¢Më–vãKªÈ)é_åé00aÖ[¾ýÉ-cyä$áô ¢Ë²,ã|ã_æÑbD¼+ÄŒ³aàí°.7ý)¾Ó榭±—ÊÌ·» Ž—Š‚ò똜'ãýWüý?†œ'åWíû¾ïå«qÐy·éóç­éÙ³”UúO ‚ g9ší;\ã_­U=5 ‘„m;Õdû®he¶­™Ê>ÅPäq¢ ‰®w*@rgYÃö 榱ñ*úCb¼Œö…RTt·¹äŒƒ‹`­¬›³¤½»y)š³:IT,hM!#1aÍPI³T§G‰ŠÖ•þ[ötV^^?ñ_ÏóÓãýWóüõ<þ§ã^„ÁÈ™/ŒÄ>B¤–cw]åšÆÆëõgKeÒÖÒ±ÆS»/Ƕ¢W»¦É»¹Às;,²ºDòºüv ¬n’$hþât‹r,ŠÇÁI ¤Jö¸e¨­Ü/$f1Ímü°Ê»`C&fÊùÝ+ m&G 1JZÀXç+!hë–shã‘fÊí»Ïç/ øÿUûtá?*¾¿Çïþz^܇ÃÏŸuyäÙ³È §(Auss’<:nÚ–0¼¦÷úÉX›¡•&Ä?7ß)ÐK¸7Wn^ÜÕÌ|œ5µ¦‹Uns&àÔ?“D5<æÇ <« pŠRûÖBºÝ˜¹Æü>.äEm³dÖ]c!¦áìkK/såSÙÔÑ;É»é=K¶ñ•w².œ“– §œé4JÄ\Äá?ê¿góÓ„üªÿŸ§ðÕ¾¼›~Ÿ3PlÉ¢ý'%RT-¼k±‘$Urs’Z"á’äûûa]qû2Éw2 7ãÜQ¬^¸æ+ŒÌÛŽÎ>Ù¾bæeU±­Ù!}þfÌ $4Gù´Œõ`»lï+]7¹¿ÏÁ“æq+Á9j ìÜ{Ú²•§óÇKȘP‚RÆzÍš€‹T«L¤+Z× þ[ö•WÞ¾?õ_Ê-|ãøÿUüÿ=K÷6ý>f½>©&f>¹ˆÕ™­˜Ø“ QÚ࣑àÃB>Èî2½à bSUÍd¹Lxf kDmÒŒBxOÇú¯øúúéÒŸ÷|×å÷|þ_†­øè5·Ê¹¶ÉÄ4q ÚØõ(î²>g̱( L…Š©Œ•»úƼ™‰c„ÀÏüCº&éõ7™Q*‰)c¦ÎÕ<ù›"žM68e‚äÌjM·l¯¾•rïy,3Ì!’\~–Æu³L—skÛ¿ËAĎưLvÇm;8ógyŒŽUNJ{A×ó «HdصM$ù´ŒçŒH$¥Bd ùUÿ»ùkïÇú¯å?–—›~‡ã]ÓgLˆPícœ¬¹ÙÎmS¡¯›ÚéaŸ Pª¨©ˆ¶y¶øsrZ¨U÷ÆbáöókFÜ=¤¬jƒnë­ªoãä ™¹½Á%ž8L[¾V¶ V?ÝmDó†¸XÆE¸Ò²¢o{*îörÂ÷8q¨Y`΄Ü)cl„ˆ5§˜«a~¦kã´³§–_"«ïÂ~?Õ~î>ÿŸnœ꿟ç¨Mí¥¿:Ôx cyãñN¾îÅQwñK¸A›HòÆÑ[îHཚÁ¢n'‰³h]–Þ\ë¬fºeíqð¡‚æB|ŠtL‚¿(±Hc\$4¸À¡Û×=ªIÒŒð¹Óz|ªQõÛŸâ™õøáV«%’²/DI™¶Lƒ&òÝÑöýÖx•ä¯ѼV²]¦àǃ—´p]4xì~ndv”¶ŠðŸ•_ñûÿž)øÿUÿ=\ÝÃáçú{­ãm‰k[mm%°A¤­®T…I=¾,cf:Zì4¹ÄFnàx„­©¿.;_|…»ÛƒKS&Ë™†Çj±ÀKÛʶ×û½ýì{%Éœê©ùgi_UKXkÄ¡KÓq G»úgh“rw›ÖÍbØCĹÕ=]Â^ëißx²æ›Æ”-×ñjêš#-FPsøb™[XÈr®2V`¦°Á®kýÜ/pa-¬³¸q3”'J ~oÚSϺ™î}⾯,.?ù¯…¼y4¸8+.f»®Â"X`°C]îòyº4¹¬rµ Ÿ#=ç ¶Ù1óg¥?ê¿ç§ øÿUüÿ/–™¸h>”ØØ”ŽD;kh¹Ggi^ñäRO¬Ì’3vã¶d¼‡fî/‰IËY"²öº$[˜ážh ,ɇÅ[Ûˆð‡‡§•ôâ5µ)fÙN{.}Øùå'\/î#ÎYžø†|‹&ØS[W9•4å¶ lÈøÄ3}I˜ô¥'é-ÑÇešV>âÙ¥{êÄ‚4Œ¬™š½)ùUôþwòÓ¥?*¿ž3º<Ûôó­ú “ˆÿ[mÇŒÌÈuíÿû9@³e pÖ+È·*{«S"…2*—jÍq%®¤lT\µ—rcDqU¾ZÆMC"Ê=q­Ìôò¬éélpowj0ò£ZNÛ[ûk˜Æ©@5ùŒjºCTÄ–ˆ û¸¦žyÃò tf—‚ Yû:t^~ñþ«ùçñùéÂ~?ÕÏRúßO^|ñ¯rá$Tqx† œ±Ìlñ5ɽ®Dl§KZG± ÙŒR÷9šÜ_Þ¬±,yy%ÔI²æP¥\™4€Ç*™Ñ0}Ö­»îà Z(Þi‘‹ÜCõTëÜðPá>(&¬‡ßå1ÕJ†ïŠÈÁB’ÞÊ$ZùÕÎ’GÚp%zEYmWª’òðŸõ_óÓ„üªý¿ÏOwŸ>îê£ '­NOßÌsp„hs_ý›Z䟬{’I'¤éa{<|qøìÜÞü9îøÖí&þRå²ðØ´¨Ìyù5ö×ÌÆ1––õF+lcTÚ£ŠHzb a¹½:ê3ÿ›çí—äÉÿ“÷|¹ú¾]•ú_Äǰ¤éÿ[Ž5ìÄá±ß¼ÔwÝÊsÇ?>9ùsö¢kOd_û6öSòŸËR½J¬¢Ù³ju"çROò¸¸[Ç þ¶eöäþÞþFη*}V«xç†=3a_ÿêÆç“ŸNžu—žÏïa_µ¯j¼wx.ÜíÀð3¼8Ö ·~*¼=çyžI`ì%kñìOÝŒNï ¼ŸÙËÌ+QU UŒ¡'– ŒNÄc Oõ£ì‹ÿfÏþÊ—¦ˆ'ª ˆ©òTjz~?/ŸãóÒµçξzWŸ'é*~ߊ½åñ?xüðS¶·á]¼µ8á·ÓhðæÇ>ãbYþ/ŽWbMq\VDˆÒ²ìc3£¦£%­V8Ë –“+´ãVJ¨¹ë-‡„‹ŸÒþß½°Å|$c,Þ-€ÛºêˆX4#6ÇÙÜãÂbu Bî¾cŠ®ñ^ʬ†1Æ‹}‡Ñä”öŽ ÿ|i(~ŠÆ»æœü¾|¯ËÕ?š}št7ž®>.8çíãîçîü>ZT€ïkjx›[yÖþ5ägâ/Ø]í‡ðãb¢ÿe¶O}|JßࡉîÆÏx¥Ùý³¹Ü,«,¦¸¬Í©³+èj\¼¸¾E]–Å*ä4;^I:©Rd\ÓN ŒÎþžÄ¢ö©â{c¾{Çí`Ü)&÷ïî…å~+$¦³“´ø;È„˜Ùq\$m®ÛűŸdkÅ0_6¡pÝ7*˜ü†DÇçc¡¾¾Ÿ4á~~©÷/ÞŸ‚èDN8DáU8Dù"~†•kÊÇÏèÔû^vË~÷osv÷aA¿Ø>MºæsŽæ>sz,†Ü0²,¶×$¨lœæv-¹5÷1¢Ø’…_ŽYÅá­¦±£LOá“ôŒV+öªÕû^bãòµgÃ’/ŠøY!9ˆ'E“Ócâ¾ïQ9ô1R ž¥A£µìVá±ÿ¼Ö»íø“ž?‡?/寽 TáQU8áUU8û¸çðÒ•æ{ì¸ýÏ[Õ¸Öè{H"ÿ¹çc+,âÝ[mLžªï}·Z0ä<ëC0ø¼ûz­ÇíÔjËë»K£çÌŠCD©Æël& "«ô˜ÂpŒOm°ÌWo°,v£Âp|z“ÃñZ!¬£Ç1œr¾-MEtf´0k*«!Å(›ÐÀÕV«kZÔᨈ‰÷'û¥+Ì·ÚÃú:^ÕÝ·ñ¥¿¾4|%Ô}±­ÖßíÓß|^ëÃÆ['ß­6ãfù_ªf!akår-é=ðµb¼Û;l¶MlM“̺º7{“áëô•ühÒÔøyÞ­­ö£næ }k Þz]ã¯ÛçØÀ0Ö®Ç%·Ü$£Ã'¸ìaaÝå—–¸‰æ4.äºõìsÿG5ŸŠs¢±ªœ*ržžŠª©éòôUá4¥u[ý/`¦Y캧Î|Fxž›ŽØxµÞ P(±,^Â=ýÊm“­ ä˜ÂäÑ[ärL×-»©¢•—XS>N=Q«¤Ç­-‡&âÎs]©¸ã妔¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šRši¦”¦ši¥)¦šiJi¦šR¿ÿÙPKIga5)†2•A:A:-Pictures/10000000000000E10000012C7644A857.png‰PNG  IHDRá,ºÐCó pHYs.#.#x¥?v9óIDATxœ¬½wpdI~øü+oQUð¶n í´›é™éñ;ëwv¸Ë¥(‘GQ:òîĸSˆIQ þ¡ ¤;êxwd(HWäžx ‰¢ÝõÜ×¾§} 4¼G¡P…òæùû2³ê¡Ý=ˋРtuáá™|™_~¿ï÷Ë_æ“®Oÿ1ÇqŽã°O¶á»ÌÛøäy~ß'ÛÜãÛ?Ûp¿Û6;Àv8‹eÑ?Û¶mòdÉ'Ò/¹¯¤rÛxSÀÉ8Ýν…$Éä{ó "ûŽOAè§(’ÀKäSÈ-ü/‰"ÙOÏDQƯ¶®áWlE׌Z­m%¿Q¯™µªU)7 …B¹’%Óç—ëužmBÛ†_uËÜ·‡•¶R,ëºnöHnáhš†ëWë9Ó4ñ'<ŽGIØ)¢e$©d¢óÞ½û¯ôõ T«µÇO^œ¹ Egg~öSŸ=îüÅ÷/T˵×_}í»ïë;ßùοøŽw²ÙŒ¦ÕoݺõsÿgoLÞ{éü+^%ÜïÎ¥3÷ï|(K–À[«ÙüK¯~â[ßýAÿP­Rͦ7»:¢‚idÒéãÇg²Ù†®y½ÞîÞž[wîlmm½ú™O\¹r娑£fC+ävg§g^{ù•?üPõ©ºi|ùK_ Gâÿù¿þÙkŸø´âñ=xðàíÞÂC½ñù/Ž84÷p^=ÑpìÂ… ¦ÅÅ£‘R!ÿÅÏîöÍkKs³}}ÅÂ.î5|h¬÷ÀÐ;W.FS‰S§N]»rU«×€ÔÍGÚŽETYûçcÚ\†÷;ýŸ‹o°îŠ»‹d_ó‡ÛW€¶Írp¹°íâ–OpÖº&Ç`úhŸqwŠ-Ü<Å9O{£*{èÓó¦iºY­VËåj½^Ïåò•r½ZAC–e)Š$ˆÀ¥¤ª{R¶¹}€s¡†/²,Óþ ˆœ€6(YÁìÖV×þ£Ž'呤ÕÕÕíôZ+½•-•Jããï¼ûöf­œ „‚—_xùòåË‹‹‹¯½ò‰ÿýÿü?îÍÞü¹Ÿû¹S§žºyënŠrŽŒŒ,--#nܸuúØÙ]>wíÚÕji÷Ü3§®^¹Ð=4¼³³ƒ^çóec‘h­V[Z*twÄ£Ñ(ž=—Ëñ¢@ŠGû":>;“)ŸÇ39;W.û|Á€ßïŸ]˜ýµþ/¼^ÿ[ßü&î+IÂõ¯Z¦ƒëX–Óhè¨4c™kõJUV=›››A¿orúA:»#xÕšcúã±¹û“¦Àͯ¯êÍ2/Ö/Ö«µ|.÷úkŸPŽv„ía‹ßƒÁ\;,šp °æZÇsí`m‡Å+o;äFŒMm [“ß¼jëì,BGÜÇ£n±ÑÍ(;ñäj."çv›WD%—Í[†éÈæò±Ždt7—Lv¢;åóùá‘t:=??{âÄÉ.­[’S7QvyGØÙÞòzUT¶Þ¨w:PÕkþh”×Ôt¹`Ùvª»Çæø……¥¾C^_ \¬ô÷ô–v‹++kR;&KŠá.×v?‘G{.ýBOi(ÇC~Lž° Óüa”k Å(=Ïa0m‹Ñ!³éœD.RRÄ•d9—I?jXÁ`õy& pÍb©%Ö½¡5êzµZÇ~š Œˆ³ÐÄšmÌœL˜jOϰ‹°Íïõ±r6{6šþ¸ l‰±¬íDpQ¬ 8 %xð/dL4ªLMM¥R)ì|ë­¯|(koWw$¼sçN0Â¥¾ú‡øÔSOevƒ“““°ò…á•+—Àd‡ŒWêVg"å÷Ò«ÉX¼Z©¬-¯–KÅ»ËsGOœÿÖ·¾ðù;;b(¡Ä7m @‰›nooƒhQ9øî“=kÅ:ç,[¥[·ï€ª»:{/^¼ÄŽA—N§7»»; £. J4­•I?ÇM%^Èç²]]]µš¤úýÞr£–ìí^ßÚôy$ÜèØ@ÿÖNưP½’¢¨±ptxpX¯ÔMÝ”ÐóÜúm7Žà½v\¶Ð¹‡™±øÝ)Ðï¡R‡IR§õ£Ð©ÁuY[Ö~Ý*è´m{e˜q3Nh×`Š®íhÇÅ E9ùÎL0öX–æÒlÔ5˜9*C ›RõhX"h ÊÄ÷À«ëŠì‘%NaPsUiÓRÓ›±Ž$R< ´Ó‚D]ð¼kýYI2ûɲ «Jn‡ÒÐòI¢§X,F"¾¾¾>˜ÔÕµåë^îíí?’ÙJðÁï¼ûþ¿ü—¿qî¹g3¹ÝHGì¥×ž@¢µzus3ÓÑÑê=räÈ͛ӓ÷¦>ÿ¹Ïœ:y|in>àõ$;R×/]뀭—=@ö,X©TFOòy”@a°§®5Iãm!è Žž9sF3ùùùk7n¦w²‚i/.,ƒt!*õJ²3•êLLOO«Š7ŒÖªí­ÌÆê j'—ÍôõvƒÐ¾ååe^‘±(êóàÄa¯'¸ÉæŠE3,Xv·ÐßÝ“ÏìBÂnlnÂÖ[.@ÛøöÇrqÉzö>̰†w¿·´¦Ìƒ¡¶ž”šc|ßÃh¦ý.>ÑÖ£¡qžc·¡£ÂΤŸ(ŠMíþž†þh§b–s)O©iÅðY-ËåRUÓ€ÒIi×€B5éY†mëy¤£{pb»FçZÚÃgþ Õ®ä)9Ö+$º¹Ýƒ#>ŸØP’¨ÈR•tºáŽh*Ÿ/”ø}A(¹X,òó?ÿ÷¿öµ¯%bñX8øzTØš8|øÄé3ï½÷à ' Š÷ÆÍÁR¯¿þÌ. Ü‚Áøp{kãÊ(íÈÄñŽñîX, ú|>Ü®'•ôÉú î7%—‡̱žÈ8pà{ßø¾"©ƒýCñxÏ:x&“½ÿ`ª+ÔÚÈd²6g .­,ÊÅ@Àkiì»WõA¼–ŠEÈHÒF­,¨ÞˆÎæ2ýC~YLNÏWë»e ;Ô;4/ïÝ»7=ý°º[î€سõ”æ÷°øXè#}Ä©w·13HÊw‡E¿3íè4ïÍ,3½šôXŒ¢œ½ð^§â‰…¤ Ji‹þ°1-çò辸 ½¥—€B¾¤•Ëåünà@e8Ep‹$…$ÃÑ`m€|¯ÏãØ‚ªøTÅo:5V9.ÚXU0Ç­:Æ‹‹d£×”ÚëÊãñ°_I@A’S†uP¶¢põºk Œ&±ã'Ž~áÏ-., á=pŠe~qAägŸ;?<2¬3´ ®01q¨§§Î8À‡Ê½}ëë߸÷晓§‘Ž…¹ÅÎΞ|>ë0캲´ [BÂìïm£»š¶2îär¨Ÿé©) &¼^‡Ç‰ÅPÔgž{vz~Öï¢Ý€õ@ÈÏÞÌÆ“ñѱ‘­å"¬B(ÐÜL¨Ð@ÀW*æ ¥T-+¢ˆFŠ_š|بպ ;q\òªãÇ¢“üÕŸÿÅ'*œ°žÞ”\»ÙÊ&*ÚpÐN±”Û“@˜\ÐÛ®‰Çg‹z[¾ h›}7ÎðÈÖæí+*¿GÛ¸,Õ a¸öbÓ̓-ôìÜ#xEÅ\¾k@¢ ~Y”ÕãeÕ²5쉑¯Š‚HIA~ôâØ¼-=jÑ (a0UÃA—DÙ_=SÔÚP`Ì$†Æ"5ï «÷'ï†BAH˜ûÙÙÙ¯}mûßü›ß\˜ÏÖ5tuc`ª5´wÞy§«·òçãYÂá0®ü'ò'™Læ+?õå€Úó¿¾"ËÖ‘ÃãŽe$;b*ï]YZ ŒDvwwãÉî/|á ßÿî÷ðݨ•ãñ8xÏ‚ëÀ@8…üúúúýû÷ÑiaËK…2Ô´¹\©€Ž´±±‘ê„ïJg6À¯râ©cp¡ \Š»B"‡¡ÂÆözˆ¢H w‹x|­V¯—*}‰ÎõÙ¥ƒýÒ…]X‘åù…/?}úì[ýìØúú&4—DbAÊÌÉ i¤÷3’`¾krW¿¶tßžöX Ç›­cöä)SJîa­ðM¬¢¾SüHLÇÑÝ<ïvG Á&Œv Ánbݶ@Q@ަ(Š­f °¥zÝÒ5KoXŠQ.Bƒš™,q—¨«ú¡êU[4kF¥VÜ!"Rñ‹­T1QS–NËIgä™±4úœn™6Ž%¦‘¸ó`>‚rAë0Ó=Àì¼W9ü(’ã‘5‘3lc+—V¢B£.Y¢,ˆª/ ÿí×~í7ÿé¯ýêÆÌÙÙé¿ûS_iÔ <ÅÈÀðŸÿù_.æç&&Æë¶^®WÊÕR4îéN™º>¿uûð‰·oÜ|ù…O_»|ER%Xœ8Öçø”‘CG4Nšž{ý3Ÿ/dÓ_ý÷¿}êØD¡ZXÝZ´ŒzG¨ëáýý#^}åS¯_÷(™H‡ðî»_ýŸîÌÓ5<3½0>˜íX_ʬ§bùLöÌñ3RCP ™÷4t±^3ËëÛ ÊOœ¶Í§Ïží?<ø¯Ëï ›¢¼ÏšN…t©âÌ—Þ{æ¹Ë™jfl``cuQâ­žTJrQµœµŒn ðÑÍ=÷Q~mzîûtÚ®îM…ÖmnøcÆ>zk PØsáá3ÁˆgÆèŠêIÐ4ê†ÖÐ+åZµ cA€ @ÂX ±Ü^/mn®””¨Õv1ÊQ+ÏþÚÎô.‚Y¸‘†gŠÓµø¼Ý<žÝZ!ÑMÌdPFá9^'Ý’Ã*ç ‰HL«4v³¹k×>”åØº©áÜ•••H(´´´4qhL–„L¶;ŠÂ­îˆÆðWP,n 2KÄ;¼¡ÈÚÚZ±fAÛ†¶²´„›jº ^Ovvv à¿`0°›Ë5,;ð…å®d¢3—-,Ë¥ÆÈð!Ëä¡D:â‘B& R©;±hz'€Ú÷ù½¸è9™LBCr»èiñŽŽ` 6Ü? D"þHzm+»½Y¯âQ¸zÃPøÝR'ÎÌÌøTqp°÷‰âÏ¡±î}lAçñX|2L¿ŸÞ…ã^¯°Í@qã7 @])ÊÁä›Õ #pø•Àƒzñ8 wAÒšv%W>óöÄÕ&ç%Ø™.t)“¹á £ îè¬3ûN°Eí4;†ÌíÏ®8Q¢ ƒ2ÿºz6 mƒûí¦§E⩲ Èëõtð bMΑ°"ñ¨þú¿üù˯¼ †ÖV–îÞ½}ìÔ©H"–êMåWs±X´R*=ûì³·oß 5::ŠëTÊåñññùé‡ñHtqqqmyåÈÄá ¢øÃQA°êå’¥5Âá૟øäÍkW P!¸ëº‘ÏFG#k[›¼$':âõ]=³]„ŠÇKK —.]B/‚9îba¯_æ½ÞE#x®õLÅ>Ö\JIë+«¥RÅÔˆ-=ph<ÙÝóprÙ6¤p R.v²›¶Q‰DHoo&4ôN¾P*• º¤hU„=R»±v7Ö*í„çr{2j?ŽGÛïȾÍXÕG`Ê5G;?ÐÖuš¸äØÁœÅ¢hÓV´‘>‹Íë$x¤å¶ó•Zu·R©ê¦Å 0ä‚$º@lw€ð-±¯±ÞâF×°è ãÊlË6­öÓˆùÖP ‰#´”(+Z—( n1æÀ¦,îÍ ÃÎ%€°,|™¼}}êô©P øÔÉãðÐBaßsçŸñ>Pgf¦¯^½úOþñÿ’JÄÁ|kk¡PÊ’yî¸#.ŠáõööÞ\Z †KäAHØ·¸ üð‡?T¼ÂÜ¢‡'Âd¨¶\ ÇcŽ¡üP–¿/p`tLüpv²¡ÉðÌV—NŸ>ÍKâÃù¹ã='Oœ:ˆEf>,JOŸ>céÖääära­¿·¯oh•uóú}¸wýŠc6P—ªLªÛ²‚6OÂ~!Ÿ|àÀJfc¡÷-öÅšÚ Å?ˆì?†q÷}·¹½XX;vEA|´;5U,Ãv3b ÏŒÀÿ™±¡ZÁ\Àd©X©ÖÐámM·uÃ-Y”.ENp“ØÐ¢ :fy•öŽêti¦ñhyȺéZüöè)SìôöhOãr(7 -ˆ¸“‰iŽ®RWÓfÒ¢gâÈÛ÷b‰ŽSOŸ}îé³üŸÿ¤»'”ܸqCÓ¯½öZwww<þOÿϽùÆhào}û{ÃÃà¥J±È¢@6ŒŒß¿w·xúÌé¾îÔÕ+—&&&Î=ÿ¢e×o\»64ØËV£\#ù¼êÆúÊpßx<‚[XXÐõF*•ˆDC6ýÀ\±R†ß‰Î0~pòº«»ûÞ•Û¸ þÚÓ߇≄ ÊétZo¡®hÀï¯ð¢Â¡@½ZƒZir…âG¡Õ+Ì+lÐù±TÚNû¾? ‘"Ç=i?×ÎX{uoë]fÚG¥NSâK`Ê0@Ì£mÁùmÙ–ièðPË»»%Ëñ›¦²*ʉ?Ãþ!’èÂç£-­|êÔ^;-ÉðG(Ö°²]Uà~qñíÚ(öÀ¥`²1d0§0Yãè4é¤Q«“ø¿iI‚É(¼¾X8_.½÷Þ»‰DB+—¦&‹[›ÇŽ[ZZ„ûmgêC‡¡™ïÞ½ á°ÌVzhhèæõq½R½177wþË?“jjµÏ£×*Ý©á‘QÓ‘6·—'ïM…‚aH™™ô®O‘µFÍ´´Ýí\n§³³S­•ѱð˜½ý[9ìÏ)¸´¸Ð¨TO;1œ¼}÷Îæf:ÚO¦º`s¶³9hYäƒ>¯cZ$’Ð0TImp’©ÛŒD8Qaá-‰ ëÞXˆ8åQVãí ×.ÿ›ð¨ðQ½»g»Yÿ[/~ôȽò°¼‚fx•§ôf‡},:°i›¯kN.k¾d«ÔšË²äñªà]MƒN%Ç‚íÏjmD$‘áн8¨ûÅb-o‰§¡P’Pb%àŽ$¹§0@³Ze;[Y%è{“G…¶h(Š ‹[•ÅR½R5zDµ[­˜8„[§&O—m{íáÓG&vwsÌ!û¿÷{ÿðüý÷ߟ%@ƒ†AVŒþþþR¾ÐÕÕ5¿¼‚²hõễI@-O€ë«¼9;O˜è0t\8•èÐõd,"+NC+I278Ô »ÕkF á}êV&ƒ²œ÷*êÝ·P€d×ààð7¿õÍ´#J±Ž¸¬ªélΰ’G¨7Ê[›õJ>èƒÚV½rP{}@®P©4´õõõh0À‘aë óëÛ¡¶Oíµoí}t{2X¿ŸG¿ïô}ÅøØx=’ SªGm*O¡½dÔ7¨RÑPÀ´V#´T3k„ç¨Ý$y€ÌÈ>ò\.kâF„ÌÔºž“å-jÓ8C‡>ˆWÆ9íÙíÞèkè]åÀY,À œJ¢ä+&‰Š©¶ áH@råxMlxU¤íAÅ+Ã<È^Aò¢x;;;pPÉàþJ1‡ÊÇN Õtû: ƒrÌ-ÝÞ܇Çün‰3Ö–¶S‹ØÐ˜íMî:¼œÑRcMÝ)4°¨¸37ˆmŒ_ùV—k]§nh,4.ð !DNÄ(ÈÅL…d|–õº)XœW3äR/[¼×ià‰-j(˜s-«¤RtKb¬[ƒ‹ËðU=ÀÊëñ7Ë$‚8 ›¯iy²„Œ~á!%Þ‚{.Ú¢Lâ$Á&UIºh”`Ñ’óô¾†Éx—m:'¾š,Óè©CjÌ#Ê^QQƒŸìÁ*)k8Q³¬âÚ4Ðéz³™\Ý†ŽžÚ.]ßiÜþîw £O./¯þú?ÿX4:y÷a__Ÿ™Õb=‡ÏŸ_žÛÜÚŽ{¦n”Í:·›îHdUàC¸ÛÝ[ÆOõ¤’]‘+—.¾}ãº_–#É™…9«RuõÙ0Ç>?|µ¥…ÅD2º›Íy}ž[GÁÐm g^ÿd¡\ù›[·n|ã/áôÕwó#½µLº$ æ®aTe®¤U–. X›Ÿ›ŸyðÔ‘Ñõ…_g<½•‰Æ;lK¢Q+ÀÈû|¡ÕµœôhàÓ…Å>‚l'˜==î˜}ûÛþx^|ìöñX¬·’-‰,¾Ó€)1ëÐLz©\­ë@¤e:Š®PÖµº«›™,`Ô7bäÍÜ&|‘9á±5`¶6Wq2Š5uÛ½ò^£~®Ín°öÝ)÷»Ò¢ù  +Œµ®s¸uŒædÀy‡ˆtS°é¡`p|ì`2Þ1ØÓ§H yêŠOMMÍ?˜†H=44²µKå‹$´“ÝG‚Þ€7ð­,-âüÉX%—?2qö]¯UßÙXɤ·âÉøfn]¨V©“,[Ãöxý>_ Ö°dÉ{çÖÝsþÐ`_X•#T±·{ÒCòq£¾žôÏð„.”JÆcþPÖë››{§úfjqþàè —ÒÖ­l>‰@òúýát&C¼.¯²{rkÕQû¸ó¾æáž€Tî1†~ÿŸ~,:ÛÏr»Ê¾^Ô~$pÑ ¬Xà0”nTÑ0‚¿Xªæ‹µZø58^5l>”eê R®åå›"»5 k“’eè:½¾$·€Å“kN ñÖb”oyî¨4«¡“´pj‰KRk!Êr{=7X¡föC3XÈð¬k£˜‡ËB†âúµZä›hVºœ©W몬`çµkWpæôôÔgO¼ ä…üØ£/^>xð _õ@wZ «Áº¶×~,žÄ£Ñh>ŸÏìj±X¬\­®onª^ïÎööåb1,,/À—;ÍìdvÒ‹+«¯úSÁ‡aäz½Ot€DmÃ,–J ËÛÝݽóó³–yáð‘ñp4ÇW¦î£Ì$!ÆïÇÕà5á)B™àP*KI»§3µ½¹Ñ?2Žy&§n+‘˜âƒåð¢j†Uƒ:ÓvËÅb8É•‹’Ûöí hÇâ>è´y,"÷ít‰bßéK&mwV eP6ûÝdƒ¶¬×´Ý’X­Õº¥'†ŒIÚŽ`Z¶Üf%ÜÞHÆ'm¢ÈíHø$fQ(Ûm7%È!ùûMEÔdD–슖6ÊN$n®èp®½jç]éÀðÍ|,âxY,ͪ9ÌÁFP cËç³x@x'&o£ùáy¼ñùÏ{< öØš±º³¢7×®\}套á_KßÕÛ{mv2ÐÜ]ÙΠ\¯_¿.ûã¡H°#O§7úz`Óe^}8{öé3±@p=½Y.UãÝ#G ~_gwo|uò´°›÷{¼Ù]Í´Š•ªê Æ¢IÀ¾ÏÏÏÌ” ù@Ð×™èH¥R(?8tèQ}’¢†©Ï·µ±Z åêZî:tŒ¥ˆ‘îž\MËžX¢rV¢Vm@[Ÿ9{::0(íêÚ6î3ý1Ôø(.?Ü{ÿqå?º=é02¤$|~xHu€³ª9 Ã*UÉ<ˆ(¡J³-Qn†ë¶ti 5‚v&mÙ`Èá¹f å´R>fg˜ÑwaŠ=­iS-uM§YA™YöGü}¦ˆ ¦ÈlÜûm:Ê&îr4[ÊõØX ×××ð,EdîÜÓ€ÝüÉÿ›³ìL&ôûᦀ5µz}~~Þ¶È0¸Ónh•• 4?NÌårˆÅ[Ý=K‹ó]])¯G øüA¯çØáCgN\Ù\=õôÙµô&ôR8žØÞÉJ•('’ñR…S<^¯×ß‘H©{uu•t$Ú‰pë•Õ¥‰ŸxÓphhöÊ’Nåñùé­k~¯¯XÊ/­®«å­l:»›;ý̳«k›¹Ý€×ÅËÅäñPG&Æ£¥vRqÁÄ·’?ɬïÇÊÇÂtßé?Öâïë6íÅ}'c=Рº]­˜Å|£\Ò uS1mÓ!úN+OÆVAI.ÿ5g‰°ñtgIýŠB Fœ`”æ÷»bÃiǵ§ä1˜â¿zD_{·t ?C$RÙ­¸‘Ñ ¡4žÊXšL°"ƒø¶›oÚR#$•3à ¢ZºVÐ \¬R®_¸ð>ñ‚ë$Á9ÕÕ :T<êôÜCIAf›/žûÌk($ü}’]«mnnöôôت¬[†G†d•‘ÐÐÀ0mAf ÎÍÛ7Ö6·>óùϽøâ«é|ö½÷/Ã!;ž£\«U«5Ã0} Îw$v2sŠ*@A...Šªúé7¿øàÁƒû Ëz¥‚„ÔÐë "Ê• ùˆÇ ïQP…îxçS§Ž÷çG>÷ù7/\¸üÞo;¢RÕt8>ŸßAKoݸqãCã£Îã¢z¢ÓŒ Uu£Vuj^«‹¦æs,Ù¶›—A\$ûß4h@ŠäTÉ¢sã‹§AMv}0vÌ»wY’Ûï¸WtF+ƒQ;%³ñ}¾;“Ú6w|߯o¯F7žê´ÉÀ¢™+N+bF9ŒÀ°<ñ‚c}÷{ßîîîJšª>¯Ïë=xìÈúÊ* Ìïæê»XO[´€ÎF¡†ïõÊ!{}pÙ…þÞm2aCY[Z„ÿ%åÛ“wÂ’ƒ‚ò$£‰þ®>rlêÂÅ…õE¯,@ãG7f—{ºc¡Þu.èðuì“Âb.Ÿ}êä™ÎäÀÝ» +™TOïïÿ_ÿfh¸÷Ì˯^¹qáï|å§g§fä‹ùLa°{d{{;.,­vÅZ±þpnå'¿ò“g7•²â yºûûÞÿàJ*ÙûÒ‹Ÿ¼xé]TùÐ@÷ÚìT½¡'»:ONœù¿ÿ‡'ž:ÕÕÛ×еµÉ)p-‘Lõz0™\ÚLïæK¿ð‹ÿS‘sŸ›Çý8sÜ~ÿ¸A©»í3âîEÐ$t(Æô©gÅ¢>d0/l´£éz]ƒ‡D“×L/”¤D\gÀŽ˜QÈPFlLó¹vàŽTGKÃHÛDz*¼$ÂA!QÁ “4y2ª~tÉ„`pLfúVBÛpeÅëI$9©Ä÷çéÈ5ù`~%Oݸqüøñp8ŒGžššB=õÔSëëëš(=>7ïã±õX€>é:÷˜8+½‹(5Ç–+ÐØâ^ÔIའþX ͬ5´J3à«Xzd }f9"™¥–³4°”¥QÙgh`>‘–‘ÀW× 2—¸<°—ž€_xš¦ "=ÀÒe‡ #щQ‚e“ìÏ'IR­¹ 8À£„‰‚¤)IôÙ!' ïÉ;‘>{"x…á&aÙfŒ¬)F]¡ßhÔöé(ª²Èä@ð žeóÒ ¨"¦VTFG¦§§Ù±‘±……È“Ÿý;?û;¿û»¥Bñàø¡T"¹¶´üÉO~r·ÿ׿ö¯~~þøîw¾tüP±Xššœy•ŽŽ$ž¸ªaJ嬞b'»m‘Å/¿/ Ña­x<ÜÙ™2Líôé³õzyúÞŒ(ÊZ©ðúàò‹ŠZªWv+%p=ðWªÔ–×§`Ü/^øÑ­;w’I__oï¥KWž=׃* £±Ñ­­­@ÀO%c±Ž²¦þ…§N•dýûÂ… ÛM›GßÀ£Á û¾+Á5Œ'bô‰ØåÜ¢ôñ—éà Ð"t¨ ”I·‰yÉM=Ñt¬{¡YåªY® ºARð$[÷Ó0 ,¡:€JÃ6È5’ Œâ|ÐI*ü§ŠVÇ=U¯WñyHpƒA Ö´šÍü¸ú`oà '(¸sªØ¦*ÂÔèd²¨AÊ*ÁËá»Û"ãŸÍ‰ü$–¤iu®å«ÑEut6Õ ²¡Õi[ :ù^UˆfƒDî52%¤ÊWk"/öõô…B$'èÂûÖVÖvvv üîß¹ £7¼÷Ã=u:WÈ÷$àèw/-­|é/Ö »ßØØ!UjÕÊäÔCVl]]\)Ÿ/0<œÀe+•r€¦{„#qô¢íJ® )¿²°½tþüyÅï½péâÌìly§×Þë{}òêÊ<çÔÇ™º“H$ñµZ)ðÀ»D¢hiÅç]ÝÜP½¾;“SÏ=w¾R©%:R²¤÷L¦ÓTÐýP]«ëé=ŸéQ ým¸/=ê1×áÔl²©»“\ÄjÝÖ]hFdÈ\Þ2aŸjݨTñcj%x‰³š°vÆ,jßIî½[¾‚/­ q—4Iûa ˼¼0¿tîÜ9œþÏþÙ?»|ùò+¯¼ò¯óß;q”èó|áøÄ‘«—.{Ey «genáÊ•k½Ý¨¬f:;»Â¡è»?ü,¦è]D„nOoÒçó€Àúúúª5X'Ãç÷hz=›Ûöúúnߺ‹’&âI‚˜åµD2 øºú{óùñX,r׺ŸÞÉüðÞAo¹²Û•ŠÁ{ðpñÈ‘£™´a6Ξ={äèD*•‚ÞØm”¶²;¢(}çû“/U»“ÝËKkÌ4òdahkP)xÏ2??ÿ /x|¡±õOÚÿ˜<üÛœ'ð(/¶KҖ׌£E*é@p ûLäÏ—Êdzèü€ÚŽÄ[¢ —¶5ÓjÈ7Ou! áˆ0” ï¿gèŒVu¯é€6Q–¡^¡¾3hX3͆eÐ\’éá%Ùû”>Ý|g ¢¹v ZGf3±š•IæuXd€æ"0ôøÕp,¾a¸øÌ¸71jïåþQtJtžÙŠtpw;©`J’$Èwoß{ëëßDCBþÌßýYìÿ£ÿøµ/~éóðâ!é¾ô¥/yDùú¥+0— ÿðþBµT=¸:?¿¶P†¡Fã«ËKƒOÀZìæ·“©Xww'jN7\ÀþÞÅ¥ye{{ˆA¯¨×ðM=Š>U¯“µ4¿P¯VŽjbüùSçðƒïÏÎ<ØØ\ }…Ý|_O×öæ–ÏB¿ºsçöÉ“'ž~úÌæf—:tèHM6áÈÊòÚæúÖÕ+×_xî<¯Üή^&V§€>ÑU FQ|~xûÞ1ú¤€O»‡ô·é“x´eëùÖæ¦C¡P‰L)H=1ÐjŒ¿k1týJMkè–ÃAeàfV’uìizÙ,™LÀôˆqŠÐ®ÄþSí4Sœd9¢áa¶ˆ=*q˜,‚Í ÙÕ6oâž¼DøÑ$.íó0מ…Té²38DhÜ!ˢزƒÝ<ì·L–L'Ì yN¦,8¡cc/ZGÜ~“¿ÚÇ)Øãã‘! Ñ®À4ÀÚÛۋǹvíÚ¿ûWÿÛo¼qüèQø(ª,ïlogÒéÓ'O¾ùæ›8ŽTWªóÐè`ôðþÔËÏóÍsþ§ÿõáǀ­[· ËåAÕïöàÅâa¨²fÓnéø‰³€þêÚÂÒòü /žßÚÌ ÎL/ÂÃ’8 Žzçæ-³+•8~üèáñãϽð4®3óàA¼®+N'W«4Rý™Ì6zW"‡Ëd2}½Ûâ¼±P²»'»[êì²™ìÊÊŠ(`)œH `îáfAK@ãâWܺh˜ÿ üz®-Jú·ßõèÙ&µr8Ø'è $Z«Õ-xu´†i˜\[ÈËô)†eCœV9É‘H† þÉ&q¥ §5ÎW$eÓ0ÐäP¥àQ^'ZÓ$K ä)b¡-^¥cåîˆ9S“À¨WaSAdjXÀ£À(NI®´I“,äguJ3%yoôµ½®ÈÚl,›¤–ÁAçŽ0vl=43›é‹ËþÒ‹¯ø¼ŽxòàØ8~›] ˜+¾ôÒKÙ%b"Q€ÎDòÎíÛh˜\6 ß¸q GNL®_º<111;;?b÷ÃËò1@´7Ö·D1·›¯âAqÇùùYtî·ß~û¹s¯ôôh‘X‡m˜¹,™öùàþ¤Ö¨Zãúûÿìÿåäñf3éîT'ú$zT Ü‰Dƒq&“þðÃkÇŽž=zñµ°Ù™ËçUõûíÏøàÝ o~þ™r±RÎ.£6`ÐaÐQlxQÞP@‚ä'UF—”cKrÒJ]Øì ¤;ÖG±Ë7?÷e£¹§Àš1g€-ÊÖ¬ƒc-±x* ®2EËâLŽšŽÛHVòRª59Ÿ÷KN¾^¤·¸$6–cr&\¥"YP@C>’ÇM2ÁP‰ «RÕ4žu!Yô…Â"U©¯Sç¬:ζv£RH\:Hòqœbv×tDª›Ž¼A}ZŠÈɼJQŽ,Ú¬À¤”gI hC4K²’l\GÇõó´Ç+úÔlSGçÀo– ›À?‹³²ì]Bí§Ò¬<A?‰×ʽE> ù×W &?Ü=¨8Ê;—®\º~ï³ÇƬBf.›Ktöuvö„“µãgÿÕ7þâ×ÿç_}íõWu²j”vûÁ#Oí?6ô'ßùÓh ±º±9qüˆG–®ß¹ùüKgøýïø""ç­Õxホwßè:ðüù7.¾sqöaMúö¯ÿóߦkËËÝ7®Íœ<þÒòb.ê-ÖÖÖW׆‡†Öw6såâPÿ€#y~÷÷þ ^çÊÉÓ§ÿ×ûÛSÓ?¼y«³§ûëý–ìÏE½Ãùå¼Â%fׂr2àM†"áÅ›÷—éöéOzcc}¨?5¿0 Io˜ž™‹ÙÙY&¾ñe3]x">‰ü~ì0棧0CF-#Oó2˜ötÇfX‹oNí±yÔ©õF< ³¡ÃD’ôöâÙBQ,¥ƒð£®7ÈÚ&¶³QDæ¯ð]wI¢‘,“ÜAs†v"ýRucCîzw£šî‘\ËXÓ .È#Rêu3˜$×1b Mì»L3VWn¬N!á År@ôzDM×½tñ¢,ŠåzƒWüÙÝ|E#¾\W*5ØÕttâæ­k¾ :0?ÇSPÌØØ aº¸¸83»øc0ÚΈmÎÍѹO­ò­Ì:†QÆ£%#ÇÑ„æÖLþeù«uo4ìj è4LK0,^ÓˆÙv}57žoÍR鯆 Y“€ƒ'+@Pû.{U%–ÚÄ–K`±–Ù(oM/rᨛÿÁµVypç7»t®S…bxTuä ò”äÑl6ICåö1 ÷>¯Ú\¨‚¬aÝw%2Cકšâ—•,^5óðÁ{oÿpxlTðy‹õêæöfœ¬Ûã…SiTëC]ýÙåMݨ̶Ϟ}æùç^¸75yêÌéËÆû/•ku(BÌШGºâã‘îÍÝ—_zý­o¿•ÛÙ†„·ìZ.WûG¿ô˽Ý#ö§ß …"µjMípij»›¶º`ÚãÆŽšTeaixÅbÙÕU~g3ýÁ;ï>ûÜùX¬#èõå'¾tkvòÎí©Ñj¥>8ÞoXÚä½É­í£ÇN£“0RÀãã"%s8M hBÕD£Qp-ê­·'ñDŒ¶ëEî‹ÿñ§´ÃÌÒÄÏrÖ†Q±é½²,$ÊI6Áw¥ÆÁJWN]ƒþ±-“£Ò…}ˆF$‹„µpÏ8L%ÊÆÏü_æÍ°Äu£å‹»ä¯²bÓ_é*Ÿ¤x .‡Aóºó7XŒ‰¹ð8Áíí]Îâvk*)Yb„n$JO0º7·ŽÌ„æm×£w¹7‚Ç@r>l– Hšƒ@ CÖà*:1E‚.¬×*ãCCÉ.M†W$¯WöÈÂúʪQ¯¡¹£±€ÏG†…à£LOO{ü¡k7n–Ê ÞÖ‰D<™z054XÕŠ:Ø=::Ú¨8gžzöèÉ£_ýêWá=¦·Ö;Î\½rÛ2¥€?ú‰×^ïýwš™Ùû>ÔŠ¢Ujý½}Ý}½Ùb¾Sï¶þʵ«P0õz-Š,ÍÎm¬®õô ÀÑ94qxp`T–Þ›œœñ\wgBõ©‘h@ô8,ö‰g‡ehŽî:hõÙgŸ=~üøúú:v·cí °VÛý8},:ŸSá‘uMö]ªµ±uD8‰W¨«!ig–c™ˆ)×Xà†#nd50bë±_–Dæè°< FN€Y(òÓ `9Î.Œ8 ˜ôQ¢£dù'EdùóN+±ƒÏöp­a$wn;¥”í½qŸ¹wšKFÚ,%¥=&êÎtØK%iS ]§Ùh5P!è©ÁPÄÔ-ôMhË—/?4vúØMà°"J¥ba+)—+:_ˆvð`Üíl1ÑÕ^ZZÖøÝßùý_üïªo s`x$àÍÍLÒ$J€‡Í¤w>ý¹Ï\½y5–K9Ià•j<ž¼?sïîäÑc‡Ù€÷ÇÓŒÉÑ£GæKÅ©©)„,ñœN§ÑGcp­†‡át¾ÿÁÅõ­Íz£º¶±~ìüK‡ºwóÆ«/žOvDÁ • + ¹\}½O¸GøÜÝÝééB;wÜ ?77mJ]*þ}ôó±sH¸óµøûðMiUÅ HðuP&ÁGÇAh øêJº!×ðzdRbÝ$‰F00%Éc"uñ#+DPþ–Úêlp‚<ª8CPnλh­»„- z¹6õÌІ¿¢\̹`·rê"Ï2%|I‡@™pÚÙuè<;Ù2‰QQd£ajèÉô+^¯KŠÏæto ¸¼¾–Ïï~ò…—zÉ•t®·#åá¹·ß}m9:zÐï ݹ3é 9ÞêìJ–kµ×?õ†7óøÂ¿÷û444 GqY6™ý¼»‹BúýÞB.735U-Wà?˜¼›ŠFRñäÉ#'/\¸€GXZZBñp}HOö΃I^•ƒ¡0TÌb‘ÈóÏœ»ráb,Õ¡;¦¨ŠÁ`(Ü ‡£C£#ðÜ/_y_áP; ðÖCè]áØÜü*«°)( £YçççaÜÁ¦ cƒlEwR%õÿ7¶ó壷·™û+mQ¡µ¨‹#Õ2¬F]«×Lü–%­É²¬›zM·Ë5£ð:4NUÅ«*pLUr#‡.`ë°XA“V®q3w˜½=„b—:»ºÈî­JìwèÈM±s5h{îl»}wŸ” _—>Ý\iBÌÎÞœöìÍ´:Nt/ÂÐÌFH¦ Üâ;[å•ßŠUd(øÝo}ÛOVml®®TJVqgGPË"„bQ¯/lI’e×+Õ‚íÈ;;Eˆ9^òmnm{=ô1ôÉÜòr½¦Aêõ'z™¬á8::°¾¶ÜÝ• ù}ÉÎióN4óÈY>÷ùOŸ:uª#žœœ$A(ØýôV—+ti Õç…M5 Ê_ѪÁxtes-ïDƒÿjÐﳌJ)_.xÁþ«¿þ‹X(öÜ çÏœ{vèÀ¡ðÕ«ÐxF@ 50>>^Ho‚8Ð= jPfæfPÏAøñzôo¿ßeÐ}”Ö¤Õ}éy¶ˆ¶Ð5‡¾YÆ k™$RŠH¦E–,¬×õ†Î‹‚Ï–—˜•g€pó3:áν¦ PÂdté\Fl†­ñǼqÎ&+a°ÐœwWÌcJ´}Ûö{ûã»ÚÀ½u3`»k>6 3é¶µ·v3sÅXصQkP¦—HPèQžåå™\6Ìë¹ví ZtiqQÒptpjænW¢»3U7œÄÕ-Còû Tc±ÈÊjGæóyN4¾õÍo: Ó Ç8Q #årÙˆF*d½P©´ 'VÓ«.|02<ºµ¹]PJŸùÙ/G"8²2“Í¢¨pê'ƽ_ÿú[ÇÆþ»ðó¦¦îÞ¿ñßçÝ·šGÊõÚÉ“'¡:B±È ×»´²º¾½Q¯k& ½zúôÉËï]äLniiÍnzü~HL6žtíÚ5Ð$\~@HEéS©äéÝ»wÏŸ?˜²1êbÆ–,§@ƒv°ƒRså6:'BŸ¶ ò°¤$n ¡ à´4U?ªflE%p•Ž7³©ÀÌá%Hâ¡À2g‡,dg“µÁº²mËöh¦XҽŚ 6„™Ç«˜œU7õŠVƒçà•ŀϒ¨»Ï¯‡HZ“xZµzÝuÀÙ¸%y6ÎpE'Áy>p®VÝ"ù¨Zq‹š¸à2‡G$K€ „£Ó`ˆ'ñvjvyº¢Ž@Æ,&L9šäÁ¤$/UDž%'K2Lµ×GÂø§pºäØÉ–†’”t‹ö((µFàxS2Œ; øeÃã TÁd[9ÕãQA”<ô޽#ŒŽˆwêÚ5?/$S©ÝÌNC–Wæßíèì,ת ÍîéÅó¦×7â%…ÃgOމäwí+7þà­oDîS¯¾pwrEWûz¥n¤¯ÇïóÀÌW4ëÒí÷Oœ8±½µ’ßY¯²|ª£·¯ss}£+Ø7@7k¡d*O†DwÆG¾øú'Ý©d<õÌ/¼üޥ˹íL®RÜ\ÓKåCG ™âHÿÁt6ޤRÝb±fªž ?ûÄ_Š…ãÁžA»¬}ÿÏ¿9{åÁÏ|ù+¡°Qqô@"|êÜÉ]>Y-8fòÀÀöìúÊÊJ£®ÃáZMg€¤¥õUx>¯Z9(p40D_¨Å|mÂŽÚZñže•Ûl!fŽ.GÄBI”WlšÂ)ªØfâø¦³+±Mžk’]yI Kjrb¹ÊÙ$£‡‡ª$‹s’5l9¤&YìõÀDÐuÈ{Ã4Ü< —Øðé[““€$º·µâ¼_à¡5 )$4NÆëIO,…")à,ËèSº·WbòqÏ·öÖ¤ÞóûˆºõXY,’¬VÂVfHU¸ëé‘^ çdˆGÆh¡¹u  'ÙªìÁµt’*hò¬w@*ˆôQ ެ÷#Cå'¸”Þh ·Ô+e\Wg|Èl±¡5jZôô@ÐïQƒ«+›˜J ^|çRwO2â‘oܺþÜ—j~aîÁƒ¦Vãém ­šÏíÞœšNgvÏž:=qøx•¼É’½µí |ð“?ýwüáèÙ#Êk3ó‹æÂÁ±1ŪÔôr…ô´?üÐ [gÔ!0dU& ^óårÄ0}~?S)—Ï&Gº…`£Ø842Š.Ívóʇ?š»˜¯‰±`¶Q!+öË`ŸR$”<E;Æ"¡ôæÆòâb2•ŒÆÂ·nÜìIuJ"§‹_s4‘¢ùbÞ6½6Y Ô&ÍJ2âIžEªãj²Öb EÉq×!CØ$1ƒäx@gDwšZÝ44˜<™¬³Ìq¥’hZ$HÞ£Vl’÷©?È›Dô!Ô©—zÖF½Ö Ê´Œ2óÞÈzõ­ŒL6»¨)(uQÙòˆœÎé@¾íŒzUòÁz’1b•Ë놩l»*¶Ö»s;ö¦ÕŽQÎuüe/y?ÀOœ:[,zÖž eÓš¤<ÞЫðÖT™˜°p0 Öš`°—x€ª5ú>~$Á¨Àû=@žÊV—5M= ÿ±X‡×ë«ÔÈÈVµÞA]™²*ÕjÜêò¶Ïox¦»+ô›õb6môõõml®oçÉtPÛ"+å6´òË¿våÒåž¾aòþ5[ZœŸ‡Ž%o߸yøÈÍ6y™/ïß¾o2·™þÌ›Ïk^×¹yóƧ_xÚ*K»…òÆÖš1_,+^/È%i¦!ñBfjÑì?è…†ŽLäíb!ýÁ;éå锦 Ÿx¸¸ˆF.¼÷n4zñsŸJÅú½–ÕïêöÍ3 ¨(9xýø¹s’cDéë,XNAD3Xt.¸iÔyJ„ H¢Ã•Œƒ‹$ioÑOÓÕ“êîéìîÝn”¥Êõ[·ú»»ù€Ú¹µ"^èÑh8ÑŒJ@™Q†çž{® Ú¨Ih!:û[¢\Èr"ìZÉj¡õ=^²v=þF¦‘}‰sßú%8,šŽ/𒙥¥ÊU`ù½è÷•j½V5Ke½Q%yòÄê‘QAÜÔ1,fM’L6t‚jl_ †cmúZ8ö £û°B……£J2‹žrtÁ‡,3&Òà¹ÅVè¤Ê@  t°¬@p/OW̉}Þ‹ Ù­uD\'©=dáÞš$6¸E¤SE¸æ¢,RæÐW>ÑEòÉ»JIÕj tPî;.K^ʨը«$ø}!Ωè ¶ )ß\;W¤ ?¨Õôzµ!’t ÎçUÀ«ð†%ÑS®èÞ]2M­’HFzû»AãÅBÕ«(ë«‹Åü´Í3Ï=ß;Ð ä¡$àNŒ’$e¶6#!¼õ¿þË¿ºyõ:êäù§Ï$YúEøÔ£££;›+ÐiÛÙ  þ{Woº´äóÀÝ>zêdA«ÍÍÍ?~WØÞÞÆ5!°š¶[(öؤP,Ã%JÅ;ŒÎÎ;KKúÚÂÌæúÄððÊɘæ„!Ò‘*ÖjÉdçFu ÝfâÐøÃén]VùP^«”"¡`gg']:=Lzsa—̬ ~O £ŠV'E&?8Äh’¥”ˆQ¦ïc%ë Xä-³¢C˜•òd©õº,[)“ür“,iP*:µ*W­ð†&Œ"AbLc’±O H'Œ x¢Cõ&[–Æ¢Ùl˜Çu™MMc¹Æí®4mK¶Xp!iódòÇ{<’I Ìè»O†5{òì½+ïÕªúá‘‘†®BRû6Ö‰;kÙ}=½]©ÎW–J¦Þ•J‚9j•jfmMÔ ¿+’×°ý] ]“) ÝQ§ÃÖéÍõîÎX©T*]¹zidhø—~ùW¥Ý݇ ò¨>Þa³ËÔ6jÀpHþ%™·›oêD¯J ‰Âóƒ ŒÊ o @Ñ©«Ä™Ä3p´\Pƒ]kH—z—#“ipÀ$«)™PܺáÔyÓ1á_ó ñod¯©×e:ÂAÌqkQOˆVsÀƵ¿ ¯!ŸŸ¼´Z²þ½eá‹*;$1BèáiàI…=åÈûq]Ftd¥âÜ™ò®·ÔäQ‡kŸ¸çF|ÅGz‘Œæ‡.äk$¯¾V™:”L–Û–€nEæ@“¡–é&E%4Èš<ŸBœ½ e!yd1@ zçöm´–,J©™{ 7¼0Rk4ˆ=!î Ñ¨V+ÙlÚ5âÎÖ77ÖC¡ˆÍ ÷¦ÉlzEjT+`¾ ,³ö"ãZ=âUÉäû?ü^6¿ Ž yå Oö'bUÛÈWJÇ’ÇNœ:IÄsµòff;Þð”ÌÎæÐÐ!É×Ý5 ¾`Dÿ ƒJnT KÑpxw'»uw.ÕèèDYY[ÕA«\" «p·*ð½Ë9ÜÒÂÜ©žñ¥bZÍ{èСÜÎvÐï{ÿÝw‹ù]}@?»´)U*dƒÀ+äM­°ºŠØkÁ‘T‹Ì\#Yéø52S‘¼ŠÎjdéc“¤/@Ê ¯Du Lƒ798špojUõ@ðrÄ0ÈëbÉ”qHUêóêd"rݰáÇhôÍ ·'lhÓõXŠ'&YžŠŽ²‹‚‹wP‘àÌpãî:ó¸FÍ,ØÄޏ+²4ÆD'l™iDL°D F„¥Ålksv²ÝÌkn®–Ãï½[¢JU•ö#l„°5 OKŠ ‹ªóÑÅMi²/]rš½u’ʼ)±ÅQ|0ä2« Ú$÷ŠÕêÜì‚VoÄCþ®®.£^QÙçóW+uØYP@<7øÑ:œ›H2ÞÝ“*ìfº}êØñ‘‘ѹŠS «wëõZ>ŸƒÜª ,H·±²HÆ?óÉ W.òdA‘Á¡¡íÕ±#ó­ïL>˜úìg?ËÉâ™sÏ<\]úýÿôG?ûÚg‡†ûïÏ/D"¡ùùù` çîOxáÔ¾øFW²{mm}êÞÔÜÜB¸ZZów‡äðúý¹†hί-&‡º$wé©­ÍÓùwˆß_ÚÙö{½ùݬGí™™ÙÞÚèé"oÈèë=pà@µ\ù÷Û’éVè wTž&Jª,¨’ˆ¾l‘.Kf”YºÕ0lÕ$ownj& cizµZ+à‚•¬mò—‹²Ò¦Cò|M]6 𭟳Љö*a# Û1é’³^Q1ào º&Á‹E´aÖW- oŸwt ]BTQQ}Š êõ²,A7 ÍŽf&+»‚z$P¾-KœašUø\†%™ ‹€"¸‘Wð¼dèdú²¦jM÷ŸW8‹¼h±‰?tÀMR UÕ+ˆ)™ÊaXIi®Kß\í‚„  €L ¢£褲Á˰çI“%K$“W<ây‰Zç8Ù1«° ŠWb™ùt>ºb@ÀÞ´tQõtI¢¯V6ÐÝ}ž(²5ýàNÄïCdU’\±ïJ"_µ‰žÎÙåņ^—,> mo-â6×(T´Dª»c`À?¿žÞÎ ŒsÅÚÎNîáÌL8Ì邏ñ0Tf6“KÄâ[ÅÅîÞ‘åzžO$J0I¦ðI•Õt%¶¶3_ùìg‹;9 ´½º£ïh_û­?øÑÍ÷¯OÝå5ûÎ;ïô$»‡‡äËe#´56Ü_*äoÝžòbŽ„Pn”µù%s¨ÖéïÌwÁ…h ¯Õqü©“hùùÍ¥…ÅŠœÜÞJ7léâé¾þñ3Ýï½óNgg²ÛF9-½ª•K¥|v'—!¨°Å†H"MãéÌ5º’<±¯N+KˆùÔ¯&YÇ ·Nw8zž·Bs¥Ñ´P]hPBÌÑ*%g¦™e1”¥f®hž„Ô\ÆÕpó¡L¥CGdžÝ9^ÑuI7è{Ó¼töYöWrš‹-ââM,E‰eVRxúNQ²Pþ‰ŽË»í–⃣ôÚržlµàíÖzwN+³„y`õz•樜6ßÇLž„¤ÈH]UŠxbÐ4¤M’èÍÖÎh^b3y…ˆ}‘XÊýR­Vã-A¡ÔÞ}ouquµ9±ÉÐrÛ«a©Š’ˆw@†l¥7 Õº¹Ä{Ѥœ•ýÁßüÍÊòæØñJ9 )æJ#“Ù‰ƒª=söì̃{ðúŸÝJ¦XAü/ÿl: Þ~çîÝ»òlU°N+±²ÖßÝ ;L¥à!îÏÇ:ææfffNŸ<.“rÈ={öݼy½#âiC 2u kÀfr¤Ã<1± œ¿&ñ¡pA²“tH@”¬9°½¦"mÒ^ .¢ ¸è€–’×n7£–‘C÷–Es7»äw¡<`t*Ê– £¼õ1‘xxÒðk‡ú>§5}tf3KÛ…:°– ,°…톨 KV@¦%X'¿;À®íEÁrl«}#í§ŒÚÛfÞ2µ³=(“3YG175Ún„¡]´cuq´ÚC‘Q6É p04XB|]xûÄåtbˆ¿V/7ÔJ(ŒEv‹‹KeÌ-ò¹\.K×T2_D®Kzµîäźª ›ÈfW©ÕzGFý±pjµ¨ˆÎ®xßÝ[S{÷ŒÁMÍÍÝãù¦ì vÅc@´¯_¾T.æ”tÅá€_ƒ·nÌŠùô#gâ]qP½>x`âøã†ªæ Åñ‰ ØÀíu—ßͧ >ù؇®¼òÆô½»òáýï/.ÞÿWü‡çyâÆ­»Ããû—WÖ¿óÝ¿û¯~5ä’^{ù¥á‘1Ð_3³s@ê?ø ö vÄ:oݺ%½…\nßítÊ=8?×¥88àœ@~ðßîçÏwuÄ`+·“ÉCGŽ-޾ˋ4Ñ,b"ØqP¥BáIèhÔê Я˜¤\›6l¯˜¨÷dši'gÓTd/‚qÎ5Ô5lUG˜%8D€¼EÄ‚Š]ËÒ ´ ¼@Åw·î‚á‡|¿šÏϵ濳-:ß¡ïˆ4õ¢WsØá÷:Ç»™4j½¦ª5À$Š&Ëš ¸í‡&'µó;áÝí(:4Z>&›f#´ÙOÛL³Þ4i«LbÀQKb–– Ìz šû†ÅÄæmþ€ªÕËEt”©ÕZ½P 8ƒ‚‰àxggGò(‘H (Þ‘ÍŸ9yæü™³?ûéOŠÅ|4®W‹ ”ó“8 §;ÞÖ C<ÚðENôúC MW¼Îù™©äæÆ‘G1êf1=þ¤Ûç½xñâìýùñ‰ñJ­¼°87~åÒeζÖWW–‰„½Kk <Ëôvlnï  g²Øá' ñM5 ô u÷õ²¹T*uíÚµîή'bïèØ.þléÐÀ`v'£ˆÒÈÐðòâÜÝá³çï/,D±üà+K‹òÇÔÓÝ ?wzü<)a4¨êDç( ¸ ¤Ô Ø•¢ª5èt tÃ#ƒìähBàhº1Né$ú¸UB‰ÎVA–DYÄT “Öíîö4Dº"ÐW²´uLË„βUâ§5FŽÌ Á€;¶³3I¹B8-fm²E’ŒÀÚq —ÑðƒS ÃÐ_ ¢ ;X›”í*ζs€J<0f,©Ç6!&qa5Iø—¡9íºx†av#®R¶J5(CJ;m¢yôà¶ÒZ(“D•8Ë$™Ñ4"ÐV±èNYUëð-Ir¥R~ð`)™Èø%…'sÙ‡F й&A«‹:œ0•tJ‹7:<+ÙB8q*˜ÐßÛw;³“ÜNuwöüÛÿýO¯O®Ô«UM­õ÷ T‹ÞPiûÆr.nqõ¾¸ [ ×r;¢e)¬ëŒ?z⨅K@ìzz{A°sÅÆûówï^¿) öÄØxC­MLˆ…c7®Þ>vrmc=!È iΞ=ûÖ[oÌß»ýùO”›Óé[³wb?kÚõj£áj¸ž§žxò­W_oÔêùLV‘äF£ñ`uùÃÏ<4l.h½ÃGEã«k`8±¾Å“v!h•°³œS’D^o¨8ÙÈhÁJ¼ÁF v+ðx„&O€sØÈ l‚®à[ÓË(p(dTƒ`V)(2 apEU©Wú•ZÉê4‰Êl ~fX¸k1‚ ÁÓ“ˆÂc8J¶°Ýê0XU+5 = 6Æ“š¶({ÔáŸÐ+ âÓ49›‘ÁžˆBk½"‹”µ³éQ‘¡Ë׉ãb 㠧зó÷Ð@2í)µ‚§„ŠÊw1àw?óÔ“p¾‚Ë·æ¶—íÝ7lÌ?8t48>1zíúÍþ^^Õz%_,€Nå%^ojj£©W†ûû6·Ö®^¹ôå/9à<þèSkkÀ“¢ÝWÞ½ÊØ&uñnmmLÝœ>zøpOW·Â‹/üôg–n€=uúèc§¯_º’XÛˆÀ øý €ôí9qjqqñã¿rüðáÃòÍoþèG?~ì±GÇÇ÷&8©•Yעؠÿ,Õ‚Ypz 6D›€OôE÷ÀæÖuL:NwáY’tÂÒ^H ØXNäáðÀLQ]žSd'ƒneTt&ihG#C"/h´•!æËqdà,í7Ks¤pÒ‡X$IÍHD\.‚=ôh@°³´#8¬G`á h¤˜ÎÀ{tÒ5Nr4mN-&¸d '`Hd¾·£Y§î*£4Ä%{<<Ò³µ8% v ž™]¶ö5Ó›É0|Eã§OŸœº ,GT„P$«½vý’$;úºï$"N¥q •‰}å@dai9LÚO”Kùdîw~aî·¾ñ§wnÝ~ùå—3‰Ôúâòg?ù©×^úe­TžK.§È—WrÒ-‚Ü\_ƒN½üî xÄð¡y½Þ¬®WÔ:†ˆÓàþ4ù X¤ÇÝÈ¥©<ñêY6™´ÝÔs¹œÏ‡I fˆ´©®],6(Ѧj†>KÓj ¡†Bq g;ÿ;L[æEÐŒÀµY¤e1+2гÎ56Ⱥ‹g<SPœv­ª‰‚"éX±U¯`½2©brsðŒê˜áV `–,¸NYµê¶Ðt8±S##9e9Ï•£):‰óާGËÁ‘|È,Aÿ±ÄqdcgÚ¦ äK¥yÇ@·Dl`K4U³f°:V3òJ+£”àslÎP¹Rkú½p4lh¾äšH(’©—ÕZÝçñV‹¥/˜I¦¼ 0sË¥fÒÑrÇܺqã­_¼íW8­–ÔÙ@¼«hr6›…Óê肽…mdl>— Æbƒ½¢ì £~_¸P*Áí¿ucnvv^’=ûãŸÂ»–––L«qôø±™…¹ŠXë><\LåRå`öõW^;óØcûO^¸qgæ—¯]>ôØ£O_XÞ^ʦj•jiusCvû®\»ÙëØÓ7¡×y|nnn~qÅ9\Φȹ‚Þ;Ó“§OtõÄ·×6¦oÜÝ;6º<½¨(,hñz•4Â==ñ[_ù¦ßÛóü«WoÍXæ¦S&ÆúÀÜåjygØ G}áHqi®Ê¸ÁŸüä§¥Rù™?µ¾ö ”O‹ÂûžÅ&ÍÉ °à Œ¢MÚªƒË ¼‡ä×+U ¯ B›vÐÄÚ_©½¤QÒͺ)%,Ù·À+Ã!ýºP’v<¯‰NÒc‡ 6¡H.À)¯¼üJ©TèìŒÏÍ¬9,6€€Í …h]!yÒýÐÜÚJ¼ð ©tnu}KÁ&€¾l.Çá5>·«+ƒMVI²˜Ç©Ä¢`7AÜ]ŠóøÑc'J¬¬—SéµM@o]Ý<ï}Ãí ½²²*û$¯X¯ª xÐÀi²é樑¯W|.7\azzÖ …766`G¾ÿýï/m&·7Sï]~ïô©wïÝ=qêT½VÃc6cþ¬àêß{ÜÏ_üŽ^+t†AÞ]–íèj5à@mÅ–K³£ákwvÉáþäÆNC«YºØ'òí†ðT¶³eä=­éGXA"#ZF¾­;Ûm".:õ§ÐlÈv#ICSé˜3xÑ‚¼LX XF[Ì'±Yšdcž41,“Š>h+x±ÀZ »š½ÛL™ùç%~ìn¯ø¶ËÓÞõïÐQÑ»ãÈú-’…2ÚŠ‹²ÖCåÈ­œxÂÒø¦Š9ߘee‡kb‹»)Ù\»¸¯ÅŸ|6‡ü!âÆåUZ±PêòGeVÔëZÀ,UÊž€ßÎçIÌf ±ˆ Efg§½>çúÆêèèh0ä‡O£û†C˜Ò©z½d´¯]ßµZ÷ĉãÁP6|s;162 kÆÑM²èLdÀïí숥ïH§ï+’xâÈQ¯,_šú½UÖ\|Ãíh4´n¿¯T(¿ýî£Ç4_8wvdløÊ•+jíˆÌãÜeNÐÙ'—tð>÷ù×_}TéÐØ¡ÄfâÁüÂïýîשּׂ/Âs­«šÛ°{#^àY}\vG;¥Ÿÿüù‰¨7 4—[äÞÞÞ;“S@•,î\\˜Ÿ¼zãÂcO‚UYßÜŠEÂÕRRG8633ÃSëIÉ;M€oéTQI:9b‰Œý2 ¦ ’ÈvT“Š pajë)'­¬‰zfÑ}ˆq,‡ R/,Êà¢.nG+[c•¤ç‚¯Ây㇬‹H€ƒÆrÚùömIWû°7ž® Ì;EÆ4ͯíOe¨<‘8KX7µôÖCo§7ØÊù7 j£ ‰l®Épˆ~Œ–§–ÞuÛIØ™A€÷Ö–jMЩð”ËBTj½Z²…}Ñy r ªžP(’û÷gj% æó™¡Þb±X­«B. ;™Éd0ØãñøCÁhG|uyÒ·×c1l±\†¿ÆãaxÒ°ç ÐFa=ð˜b±ÜÈìýEŸÐ…\ÊeßxùåÉ·ßI¯m|öãŸ\߬• ežáòÙBbs{0f;y{²/Òïé ¹oïøëWamËK†=vþôþýûA©_}÷½‘‘8!—/_þâ¿øû_ÿ&ã`ÞüØG¦¦&ûúzÞzû 8Ð…réÑcWÞ¹;Ü(•îÞºm™Z(äcì† »X^œ[ °¤\ÌkÚêÒ‚¬ø;éõÍõ-E‘B¼¶ËåK5žn’åeþÂ}öÈ(é ‡dœÄ¼MÒ¢g»¯q»œˆš@a"µ2µZ­5¯HB Ju-|P­VÁ\*†ñ°Äs„¹›6P‹ÃLJÖ nƦ©:°|‚gXöK¹ž­^¿u·{;Û;8|ïò«=ÿN>ËûyÙ™ÞIŽ ç³; ë[ë'{ê3ŸÏ*–,׀ъBïà€ZÌ-ÏO ñ´×\»ø¦·¤9™ cY2\ûƒi(ÁMœq®“Ùæª¹;“¼W hþ‰VW’ç‡ù¼éî.I¢ª64 [‹2æ‚ 3ž>]€¶æ& Ç  æ@9Ñš¦D‚@v;«ãáÜ9ŠtùÝ!qíPãýf-™£8ÕÞÍ\Þåzï×"·E^Ÿb_†¤¦4›Ôjñ,#’O†oCbiQÀC§”ô7uú“¨œrXV¥X½“Úi²6œ[¸®VÇ2 VâZÚι]"ÖžžÈ½»:bN§<6zn5êD¡öêõ\¡°¹½ÝŒ˜2lrC”¥ž¾¾`8×ߨXlÞ­€ boÀFC§$2¦²güäÖÖFzgÛï÷îßãu°ý‘°Z«êXÀl&R·oÞ™Ø3a«ÍÕM€˜M]mÔ*,c•ªÕ@з07ëqÁ©sܼyÖ?±woOOØ_µÞøò—¾tëÖ­ŸýÓ›ÃÃý½áj¹¬x”ßûÚ×êZSV)ËiÇiÂ/l?6ä$#tâó«”jTãR=Údc`üLM$í• §¤Q/ÀR@dáç6($ý˜66)h{IóNÛã±NÙ‰¥³¦Aј´=üœÝN›jCgªÆv+›í"êÑ´v'!Áïi/;áÿ¿ÏJ»¦ž ®e žÐ&6£B½k‘”R`èN….£],@AE$|¶²½¢5tÐLÅ\V:6e®Q­©¯ŠŸ?“Lý¸àfº”ÙÙ>{þX›ááaøe>SX\\t| j`»áú@žÀ,Ò-õB9ޤ³¨kÝ>·?À$zC+ë­«¢HoÒÜh4‹E¾õí× ; /(m·³Z*Gý~x‡ÖЦ&§Aø>öèS‹wï,ÌÜÜ70;;;·ø``dØðÁƒÛX[¿pöÜâü‚åÄ1(©•*}ä£`-ïÞ½[.0pH:{ƒ+«Kßøæ7 ¥‚n0¿ýÛ¿ýçßýYGw?“ßȬ/Þ3rãÚ•cO|ôÂÓ[»7 0÷Ñ<25=óÈÙS`й\WW×z¥45ÿ™î¾=&|¡ …B¥¬5ìõ;ZÀÆ2˜'™7w›Îñdn•n ìÚèAáà!i5ÌŠª«F­¡Wëºi˜`û@°ŒÉÍãsõëA àa¹9 Ánfë ëÂ8žÌœ¢˜öenªÕbG ÀË¢ z·R-ÒÖfƇ|Ö±q­ ø¬sC+*¤7>F°vy7íz¤È&y«¡ÈÔ« TK^§ˆ@EÑéTÜŠâYÒLšø‡%M~Q B,Œ•c7¬P«Â7NiÂAXˆkeÑ)ÉNœ%¢c5™¦£Ä;yԣź$¯KöpÍl–§n½|ûÖt¥¬nn$|~ïÈho¾˜ðF6NвÅœ÷¢®F†üðxжt8E±n GñÜFª€'Ddýno óEÆØ+Çöv ¦' g ) ~ý½=@%ó©œ$y3ql¼J='ñx'ìÃÎNþ¿øÂ³=½‚^fªÅÎþr:Ûubäúµk̨ò•?ø/ý/¿'6ÙÕWì:øâÿù—Q(Õ¾ÿ½Z Îïíîíj:T;$»«ŒÚÛÓ Ï©žÜ±.—ÊyÃaÝ!Å" a/¿ú’áPFœžœ[ ‡ƒ.¿wOŸçCç?ûâó/Ü_ݪ,¼Áÿôo¿ˆÇKO~¬b0ËË‹&¯p®ÐÕ«7zãC¿üÉ+ÃgãÉdq|hðSŸûÍÿò­?=¾§oÿþÑ\Å@Mi/¿;&k׿تhóå¶Ÿ¥mÑ ‘Vá˜ÌÃH,&´[¬ƒD %^q N—Ðåíð;Ý 48x‰a0éŸs)³Žvœ*H:ÈÇ!ÐCæ@O†s°Há¯ìî$wÚJ„Úws·ýÐÑpÙ's@9‰Å iÒ´‚wüGzR0è j’†zÐ{§F?‘H€$uvâS§M ]¤ÙFÃT°ºnÕ«Z9WØÈƒ½ÝÜÚJˆ²C–d1(÷÷öI²Po”øèùƒLß½“ÞÚ„m¼yïnž5:z‡ 5³PêÈï¤{û ;ÙÕeÈÁÓ–2Ôþruöz˜³3»mjLìÅ›$ZIçÖHa7öw°°!<š_ À¼ßQ_Hwz 2ﺈ üÉÖ«$âJFgPGàÁK.Y$uŠÌífEG£®Ú»ÝèR©oÎ}uìÎã&]£hÞ'fúÙþöi/iLšfE¹vo -Á;1ñެv±ý ü>DxÁ:¼…Â÷R±âu;ᤓ;éd ÄäN»K0×±ü`¥\ü§ëTj+ À ûÃᑳ“R÷ ù¢pãò¢Ç…Ð5¨å*•f¸,=ŸÀ™@rœ” 1 f±²Œ),d"À™"có8—@dOWÈ.üUMeÍz5#º¸¥­¹þ½=Ãcá®H¼û/¼cÏÄ¡w.ÿòÜù×®Ý941ñÞå«Ës ÀЀe‹Œ7£Öi6:¬™—är¥ÈSbþرc°ì|>¿™H"Ä2Ír¡ /“Þaˆ#È"CÂñÂóð”¼øŸý·ÿ¨ÛL2vyÜç{ôÏ~aanâø‘§žx¢ÑdþöÙýÓÿqÏ`|JÀëëÞ×Ïóu@~8xÓö•>œ™†Mµ¼b‘öA$6á žF´$|ðXñŒ9Í6òûÄ*A‘d”!ü^ä½,fp&WÐ¥‚}ÁULU¡©w6iÈßðÈQYJ¬$ˆ8»h éSeïŽã€4Lwm…'¼8«ˆ'Y* ‰²:H±;iŠÃÔyhYS²Pû²Ô¢F؆Фü>©bw»=R_/ %ŸÏϲ¹*ζ¨;ëׯ ¹T"ŸËÚñù<‘P0ñ2’ìóº ï®»]r0à øÝ bi³>‘¤ÐÓx =§Ó ¯w0Vf'e[Íýû÷ƒT‘r%<±•J‰LqQegSÕ4¤üq ÁŽž´¢ #ºÀH]æ[ݹq½»»ËÁ4£=þ œØ\ÞÊo>{(‘,…#;€¥¶’©G ŒUµÑ¨Ô´ÌÌ}/ðGOœ8±µ²lÔàD•õjYöú³Ù|.QDÅn¨‰ìN×@ŸÛï=}úü¹™…Õ|U?pð0Üà[¯½*òÜÂâ<]µºN|LœÀ÷ô¯­­u„ƒ`z3Éô—Þ:qêøÈà‰WÞxSp¹––VÞx嵺a'W—X£qxbßÌ­«“w&‘ËEn›Ž´émÛÐs} 8ΤP•’i›düP(‘ô%&hÀÞ•ø’âtl’áÇgraG «†]'ÁâQ'@»Í¢…IÍ­¦Ä²©ñ¥ª—‚fêêÂ,,»†ÅRþ»•i´ˆ!M@I'È.kßÃ8<ÚI’1£#œ&)Xm¹)Ú‰­$Ž%”J•Z 5YOO æÕÕÕ{÷îMNNa‹ –½ÂazžY«—u½Ê ¡L* kµ,,tgÒI0ñ.Y!%~,íè Ÿ÷®7T­Ž]?ÝJ”#Ý­Ë…¼V—ª¥"ܾžcüô@öEg~jÐz»Z‘Æ[èNÁÚ´¿€( |ttt~ª‡Ì=|Š®™>¯I¶µÌP›››}òÂI ö÷^½z}êîdOoOWw $¬«k^›À*‘.9µ“ÞL&XM²‘Û÷¿wwf¶ŽMÐ3Ÿúø§§o_ï úˆ¸ÍR£4²gdllÌÝ~>ÛJAoõogvÛ2RþÄ즾Ó!–g1ŒzµÖúO¡©€-M°Ù‰E²Jm¡n7 Ãš:¨}ÈÆZš8|Ý[tZ+¨[ø,ê¢BÇVC­ðk·é./btÀt¼ß&R#ý Z´É6¨±2ù¢ÖÔ(Ôõk:y¼`þ¨;0åÑá&'ÁA<ß$´ƒX4`uespp0‰lnn¾óNÛ†c‚¢±*6¦lÖù khX­§Óëu‹6 @j] yâZ- {œ®[·îÀ3ëëë15u£V­Âu`ýA?Nx©W+>Ûïõ¨Øƒ£Dè‡x€Ωðÿx¼‡ab°Ùu2f@»(Ê$äëÀêCV€ÃQÎe³‰­-°6Øó{ttv~Êlݽ} Ãøä'?¯™ÖÒZne«\/”=ý}s«‹z­`Õ€[Z[[}ôÜ©ÑÑaØ‹cÇN,ÌÍz}`Ìý² Æ:8ù`9Ÿ/úܘÅ$Ï ”J…‹¯¾lé¥s<î÷ÇZõdä{{s3 ­.¯ÀÞnmmÁ3< âTøÆÝ›ÿþÏÿï©…NQÆÇöî$Ós“³—Þ|ÇRšœãíwßéŠÇ¾ü•/¹ÝÎùùù¹ÕåÓƒüÃ=¶) £>ÎvÀŠ)åLhûxù?¦i d:2¾Ñ9ÒÔ€F¿ïelbR½É±†eÔ›ðW³^¯q NÉ”u âTïÂó¥HU C’©uAçêhÐÉ\cPI(£ŠÇMQGswÂl+§Ivš ƒÄ™tR¢i‘+¿ÏôIVRkÚqÓ¢Eôˆd0.ÍábDN¤/~Øi ÿß;77÷â‹/ÑôÂH$F J©s8 bOFv zCᄚ$ŠÛsÿÆÔÀPw½RŠÅƒFSK§2}ðPÏž= €&°l¸ ÔVŠc# ¦ Up@ŽaŸáÐn'“ð3p‘îîn¸åD"aa“kÕétÑ’ZI‹VÅFE+rÌêê2¨aØLÀNg¼þþýŸÏïì^Y[ö?üþü/$§ç¿ý¿ù쾜ݞ¼q£\É\Ê«/¾pîü©ÎH°'y°°Ö?Ô,êßöèqÀ"¥bš1ªáp?ï`Q¨aê_éð©£zïæ50Ρhdc{§SpèɧfîL.ÏÍ}àÌ™®¾Þ‹/zá⋽½½µFnöðÉ<Ý3Øûæõwí#_Ê‹ÁÑà?ÿ«ù_ÿâý濹wçö?üà»~ÿùc'ŽþèG?ºu÷·?ô <ÙVõ5¦p«ž‚ÑÑH±Ž¥Y5]•5Œ::xVñº‰Qe±šÄh»öy¼À‡@¡‚Y§ÍÃ,i„eæ )MÅ!†¼!X_ÊLá(Hx¤ö—Ò2ÐVn—W$°¸\ªÖ·&DĈ{êµ XTi¤?(h>“ŒòÖ¿ìô‹JÓãlX€Ñ!°.”(¯ê¤‚…ÔâÙ† k˜Š ~ʹȹxŽoê\£bñVÃ’¥˜•¦‹u½K%wê!ëä%—¬½üæ?€TÁR©Ûñ¸‚N¹;XZZR"Ѱ?xoe ä ×”Î<:K8»ø`¥V3žxòW̦t°fÖ3…JE‰‚ÐÃ?o躜@š‘X>và•W/;w޼û}pœ.yskuhh( îÀNÍ\NÂy¥.à÷Œ.:Ae°T¸qçM¸øøž(óÆã”±ZÊ.ÜÏ ‚gbdïŸëÛ?üñ?…ÝLjí^ï–ò¹dzíþìç§&§%ÖŸÑ,gllyîÞ¾Ñ~ÃÅ6ÍŠfé뉉Ñ1 Û‰mØípG(SÍùàÀgœÅ}ðôùlÞžžZñ†B.÷_ýë=y}òÄÁ“¥B“6úz:šz}¨¯TV%—c™ÙÞüä§?«6¬ '¿¿Àr‚aZNÿMék‹kó GöŸvq‘«oÞÛ\Lõwõzyãv‰oÇ–¨Bµvg¼òŠDµwÛ×Ó2ýÕµµMÛ2šÍVL’Fð¬Ýy1 -ÜdHW+}“ðŠ Š¨ö¢h˜(rÔÖÄdƒVä@_`[8?& ñœ½kôYG+ÍʶMƒ“D'ubõ(K[O1@ÙérQåãˆ&Îé©5ì¤b7+Z`žFYV„H° ”\€ ÛíÏì䦦¦@2 U>o€]ww'¨ðjµØhä@k–Šõjkv§¦îÁÛuõôvÒÔXs,8„§2> ƒ@±jÜ0è­l64 6–ö½5Àñ¦ž)Ý¬ŠœÓlòMÛ‹¢ÃÐêÅbæ]P3Ð&P]°‡ËËË*à&NN§·à¯ZÓ¼}û6'òÃc¯ýâÅîήÑcGÞº}ûµ÷.¹]¾s§N^}ï6àt:uáÜy@GÀÛÕÚ¾‡ªµÜ\9™J °533 …‚ÑÀB{üÛ¿ûÎåË—Ï?ãö8¤ ð6€Ô •))|ù™Ï|&“ËÂñväèñb¹‚Í‚Á͹ÇÇÇo^ºùèéG&ïÝv´½`Õ^|ãÕ÷Û¿SUJÕ*lŸÉ24E­ [Î)ÆÑN¹ DL«gv“Õ/m•°ç¨A¡!é1­H$ñ\bÇFòF‰Ð “Fÿ)N {K ¬$¡7à‚MÒB%l†LBµñ51÷]5T“qÚ.E‚oá<ˆ{“Þ½fÛ;Á2RÓ ŒãçË6TUà%§Û è–ƒM¯\"±53sÿö­»kkk'Kf-ƒxÙäž`Wý~ïúZÂ29Eö†áˆö\ºiÕIêØ[)ìAw&fê4ð^ DCÍð<ÀÜÃ-cĈ|Á‰l•è"÷íÛà§T*+.œŽ[@ËåñÀaª[[_7LV×0/ÜB^+äÒ‰ÄöÈh\œøÕ{á² Ö˜«êt²z&Íú‘J½ñÒ‹ÏwtÇj•ÊÎVò‹Ÿû‘ çÃÃCëµrw¸#ÞÕùý¿úÛ@´k™ã–7Vüïí›·ÈìsÃëtµ3Èh <ñÙÙÙ§>ôÄ'>ñ‰ídìש'•Fi'—M$ºîgpœ {X=Þ‡¼öÚk#c£ µ÷¦¦¦ÊÕÀ¹D"ïôp>Þ+rcc£¼ä8ýȉ«·Þ‹ðíTŒvÆQE¶ôÜ­Mkî:G:I¢5´#È('ìv‰Ç.:(È€D›,¶‰#]¹ÅBˆ 3ò’¨PüdY­OÔpb" ½J8D;„œKÀò°€–åÌÂp;*T–Ž5„)”C8¤W©{_kµŸ£CeèœI’ÃbèÀDE†Å`‰€¢¨À#,gµR'sT¹›ä+›ÍêƒCâñºqB3Çé¨!2~Ü6E 4¨*Kn¹èI(–² VÆ6Ë¥º¡ƒÎh†”œM¯3ªQ­X‡‹“&Üz$ T#|.½>l{£ŽñX0ñd?1RPÈ·"[pë Ú“‰´Ó,æ pT`YXêõJµ–sp:̓$ |®øöT&€Åå¥u*4æ­[7N‹'À(^8~*0Ðg‡ƒ#‡?õ¥ß¼úÊëðDÌÌhìÒè¾=…r¡¦Ö¦&'=’ðùá\zÝO›J“õ0 e@³Þ¼~ ôb±\:¼ÿ`ÐëûÚ¿üÎp4 V2Í@S ÿþ4==Ý?8·|ßçJŠ N*µóò‹¯Œ |äÃO²™õå©™{OŒÄº>þ«¿ÁS¦Òö´‹öý9m[ÜÖLm÷¾µ; dÀ²Ðã /Äö$­_‰o€lÀóÀ ¾Ë#>0¥Í¢xnÖH#8•â ‚h«…÷sQ°ñp¢IÕÄ®[qWøì—ÀƒAobö2dkA8’}‡¥¦¤ô„#]RÀð¡g?ŽFõ¢€åð.ÅH쬯¯¾÷Þ{«««€X€¤+ŠßÁÀ¡åÉÎ4á7gˆM/ƒº‚Ê•|½aFcQ:!ºPÌ­'à¼)N¡]¥ ûÏ&àï„%f¹¤›Ï»íæ£ 7°{ [©T*‰öôÒ±õnŒô`ñ($’9%T«`´x,àT„z=‘×Fü8û ö.!cŒ1Fêóm&“¢¬¨ ¬ü†ƒ[Ìf;»¢!¯wæÞt3ô÷ ?óôÇô\uæÒ;§'ö/ϯ¹¾pG$WÎÃa£^sy`g°˜ÑÑѵµPé•J ŽÖââ¢ËïêéBréÒÛÉÄ–Ïë쌅w’)Î%âôG¿°,S^£Ñ7nÀ»àŸï^¹ú/~ý×5½ X¿P*>ýä‡ô(Ôí/ß}{lÏh¦˜ÿàO¬$tÖÑûãZ¨Ü kƉÂL;XO ;Fe ’[$©±8ÒW×"1 IRÝÄ´ê  @à9šÇ,¢ É‚¿bŸFÓ¦c_¬Vùo«7õsaçÒ'šFçÛõüCsE»•*"/K‚Ö5Й*y+‰.².–Da¦%@~<`Øð©Eíxœê,zàÃ!_Øã Zxçwnܼ"bätÊ`ÁAÎ`»á´p?þ ú “I{=ÀÛ4ëÅRgåºÛJÜ54«VqdrC­Á øÃýý½>oж9Š8aÍh8É ‹eÜ £ D?¡*]YY£ÎT¸Ët:·¯Ç¤¾R9—ËJ2­i†X®?0Ð×ÄG^(à ^‚qaßæ–“éh(`.â÷u œÝÕ}îâó;¥Ú¾ú{›÷–OŸ>ú¯}ý×Þ»2¿±ÚÙßÇ\´«CôÈÝ]¯¾t1[,ÔJeQBÛM3áúÉä6¶«Èd.½ué _ü¹Ógþ÷ÿÃó?{. Ù‰½#ë™ Mvƒdžf ÒG  ”(&Ë[¨›Aù(›š½™Û(2Ïýä‡ÕFíÉ|(ÚÝÍ—%‡À·ý TW1í&‰XqßjÑAE§•iÁ›”׋89óóÑ.ƒ~bYÛ4ÑŽ´y°û€ŸoR€eÈÁ¨’&•ïï©9Ô:Ðá $ežewû‡Ñ”{“Œ†GŠŒ U5°£I;ÜÕ4l8¯{=¬SñðØ} ¿yB•vÃV¥‘“D@¢š¡« ƒýž°m°ë«;KVfff™„#A¬f[Ô šzç„VhÑ„C ËÉu¯o\’Y=£‚½ÞÞJõõõ9l9tZv£Rm˜&&aÕª€M]ȯφzv) ƒ' 7R«6èG,-­ôõ„B/xe>Ÿñ¸}pËðÿJ¹†Ý±-tL¤Ò+ŠÂ†#>@O–­Ãu°Ÿì…w‰] Ë€GÊvoieа )¢`«5[áì2XIÒ™_ÝÎ.o ô˜Ìíé…îþ¡Ñž°¿×bO8ÈydªÚ—,æx‹éôDÿÀá©ÖÐu ÷‹GMMùû¿ÿî_üÕÿHî$GG‡?ôÁNß¾=wÆßÕƒó!ÃW„­ûô§?­Æ•+W¨ýÍßüÍ©Óg'Ì0{óå—_Û·wtd°KùóÇÏ‚ÉÜ»o¿a3;«Û­";šwØvŽÚ˜N¯µ3¡Ì‡fÈ ´$ß²›¼áÀ âŠFqÁ7‰’Þ¼š,GÏ}B4’ Ôˆ 1<*2Sg<¬Ñi6‹õÐ[ Hhdl‡N^àì,6ŽU$•‘x·Sò¶¼‹,jXj”/<ݦ¡YØ'C[[LÞ½33?778ØðàÁZ½¦  Ë0Ñ18Ôv*‘ÀÌ7Y›)šVÌV¥Z„S±“I=òûƒ°…™ÌŽÑÌåSœâØØH¥ÜØØØœŸ[žœœ™„õÃnŒö÷öuf†W$Î † Ì®IzŠÓM%·Tëõ}{÷—‹5‘ãwuÙÊ…"èËÐüæýöŸ õìõ†ÃïN¿÷õÿãëßÛÇéŠèTêF£šÃâ;—Ï‹£QXÕˆåxdiy‘>SЋH}¦6웸zëÚ‘ƒŠ…üË/½Ø÷ôtå5ö†»`»àvzzz~÷÷¿ª™ï]»zúÔÙÿøgvûöíËï¾–÷‰'žzá~!ðRI5VÖV{ãÑJ1“Õ´Žx',ƒiå|®3Cª.êÝA?˜ [Ë{{C››`W3ýãC…2¨LÍdò[ØÒŸþøÕG¹°4 7;½½ E¤@¨Q½”:ºUÿÈ ¯7võ—ovÇR¥ìªÖ7òiÒŠ”›ÆHþØ@,,,”*•D&îˆÅ;»^ºøÊèÈÈ`Ïpq§Zeš·f'Ož>„ïOMÆ"!°õ’[É&O<óÑ{³3+ëk›[Ûœ:£5Œû7§Ê¬ÙïpÊÂá‰^oðøG§OŸ9dßñóã;ÛÉ\R¡VlTó%[ ø¤™{ -ÿ(óPÁC+æéãà0íV€T5µz¨8¤"Y2Â_³¬7PWª6éRŠÓçSà”µ@ æs„]ïXieW(ÓQ]m§)ɾ#£BLýÿ“éB_Æa^²ƒfÀɆO¤3EìÃaãE„Å&ŽéƬP‰UjM=Œs ·¹¹¹½™Log8ÞîìŠxœ­$|àŠ`j|ÒºÉå¬ë_«š¦ „£Z©iª7È%²ð¹À±€nê@P€æ¾õÖkGîÛI2é[õzÀX>ŸUp(Œº¹•ïé-”êÙT0hö¹Ã#ý{öÜÜÞae·f)“—:íW|ˆ¦F¡m4€\Öûº:@“ˆWî4.¨7º{ð±;wî‚ÁJ¥Ó7®Ý>tôˆËã±ytóÑa¡}½ÝÛÕ2¨dꇽ7M”NÔ5'ÁŽ€ÝÄšé•••&Á9ñX¬Þh=tøÚ+8ƒ~ÇÈÓýÙYåÐá .ì\ºt±Z*' -WÈC~P¹&çT@ØlZÅÜÜwß}7›H=õ¹O¹˜™å:88L„þÕ_ý€ú ¥ÊÍ;·;–ÉfãžÞׯË™o' 3ÿ¼m¬‡—L¯s$V2jé”BÑ¢‹æ1¥UP¶ˆí™d'ºhèàâ€æÝö¼RêC¯¯*{œ.…&,Gs@E©•ßd“ñ„™#¯ªÕ4ºZ&ð~J«ÝÊ/i'øÑŒ0ÿ.™ú€X@p8‘p¨›1-xS“÷ÖWVátøIL²PÐIŠqÐâ@á©7í 0»iàJÄ ÃŠ8Ënhx¸»«îqskuss㉧9¸w{¡§·+‘ØÄvàÀ~ fàÿÿ@µ¦-,®såBÅt*`Š¡PS-f‹›S=^?Øùb!ô9Pk¥ õF ¾ ö„òy¨ÛäɉÖq@¨ÍnnnÁß½{o'S LLpûüuµT(—a ¥r^–M%8ÖÝ*'Ôu°;;ú€nÞ¼Y5*ÙŠþ!Qt?:>¸Ûv0÷îÝ#‡ahh–´¾ºF½À{`Çôj•m6•²ÈûxI´X¥f48º¼¶š)äÉ€!–ÒyØÃgŸýþéÓ§A™ôöô­¿;yóð‘ƒ`åYÆ»‰ÇtËìÜÊí6X»¶9~h¬•<ÚöÕ;Ú5hèúıšƒm4uĈ=mrG¥D' I‡7Q–§â24õSph<‰&+ѧÕV“"éþJöι@ЃùÅ‹G`W,¯­¯‚]îíë†ÿÃ9žœœÒTcum=ïîsyÝ8¼± ’öG(Ñò\P ˆDIu+ü`15¸fCgß»|^&p<ì›Ëëq)N¬ÄÌ# ¹øŽ þöÃb–––@@"Áþ€š©*UP @{ú;::¶IA‰¸Ã¸B:|nzz: ôôtlm­vìûÅ/~±oß¾`$ –jdïøðȈi[[ ÞÞ-š{8³ÄAúR[kµ‡ƒnlµ3FŸ6«ÅÉ×6I&qv*^¸†V×ÔFŽ%ò|’0J³ë ÄTZÝI¡ÇJ5’häÉ„¿(N›2aºÖžF3ýœÅÛuÎY§2Z­W¨C‡¶{ z¯€0¤fâ‘î* ¨å•¥µÛ7oÏߟõz”þÞ^ŸG‚¯ë|ÂßëTÁ`'h4+ÍpW­(‚σ—ݽ{”ʉ½{R©¬Ùës­®-ìÙ³geeŒfçØü¬vÿ}Åb¾Q…1”NgïÜ{P¨™ý#Ãþ@$¬;ŒZE·€t§îâ‰cÆÆÁ«Kó§$ò°ÉºËå•©é*¨IPø9 ÷ôVóy/:sÎ*FŸ˜ç_mXŸÿ¹7_èêèº7=sêüáË—/{%ÔOã“lx hxû‚•QÅà"‚n ï©›5)­,.:uÊaZ¥l¾^­=ù¡§Àôl¢ÞÚ% àûÖÍ› jXÖâQl ЄskimìUWg¯Âà wu¬T58âpÞ@5FF†çææ@pý~/h¹ŽÎhzgËí‘&öí{ñѱHÝ2~øÜO¾øÅ/Âö‡ÁþÑ}|;È´.o¹ëÄ?ijfÅ&ÅnX&Üz%±½ÁM‹BLEqÁûd¹ÌÓ.·(Y,MGjûJ©ÞM Åþ‹¢ ¡‡€§ E@úí».å(¤lçä7wg‰Ø»}r(\6t³Áª– ‚ª‰$W”rCÕ·6VA±F#‘®Îh$PÀ ›"‡Þ;8ú…Bð(l@IÔÇ U,†·cÙFµVr°FC…g¶´|tÉH÷@ñÛw®®­n^;xðàÊÂÖÚÚêcŸëꎀÙ=wæ‰á¡ýÿîß|y%±­D"Ùukæþž={ ÉíÔúªO–ƒÞ`]³c!Nhåì¾Þ¸?ˆ9”…Lƒzõ5q­ÏïÜlšì_Q‰ÑÑqìöV)¡¥²œ[› ¯Ï§bmcà ­mmj5Áâà€yAXm2±%û±UìHÏàà ÈŠšÜãÑóT£¢+²;•Lʼ sXüb¡ :¨áÅð{xúÑîx%È7 VUÌù($K=ÝuU·t³;Ö}tâpGÊp똜ž*æòUo1;v,Q¯-ŽDB;2*%§K^\šØH$Ž<ß‹ë«7§&ekieùÁÜüG?ÿ¥÷gƒ;v«~©ÈªH¹mÙÂ¾ß h ÕÈÃÿ±ê\îÀIô%é¼€#ì„d·sQØ8¨„ònj‰•‰—ÓI“F+mì<ç°IÊY+ód׆CŒLó÷¨Ö¤.[ø+†¤É ;š•LsœI\ºÕâÀËVS%ŠÅBÆïsÅ£~Ó¼NU µªƒàGœ­u’ˆHÖ÷ ÇmåÁ(ªX,†Ç‹cŠ L(äÀZYË+óð˜OŸ:‹3@•Ê3³÷ö-•‹@¨#ÞûÊË—6ùÁ½ûD¯wßñã¼?ôÄc]}ãu'Ïɰ« ovîSOxÑñÇ|!ë^ªWÓÛ+@û@&঺»»Â¿nÔSém³®—ËE’¡PÄ ™º¥s9caqyïþý Ëk™\î‹¿ö¥+ׯƒ.¶Aît OŒO¤ªÐÇ„&Ÿ'õ6<Bc &°4¿Ë3yûÎêêêý¹¹Rµä ÎØ°zÉdreiùêÕ« ñ Ù V›œïìÔÌ&ñ—‹t€f·Ôf"•Ü»w¯ È&-ÁsY[[ë;pA-&(:††@XI§vó½+ï~ê Ÿ‹õu;\rÃ4DâQùý¯ÿ1ß&ò-—ûnkc“¥þMT®XTdZ†íÐ óýŒLT¢8˜e.P®bF>™ !J²Û)¢ u€Ó @úYØb„—¨ÿ•TÉÙ»vœiGYÛ‰ÕtOÍf«¿MÛ_Kƒ²SjõKã8ZEK&@ZF£YgئSs‚Àå2ÕÕÕl.j€ãDLà·Y—är˜ŽJ¹lààžn=Hs2¹ WƒS~âèÙðuÎ@x|Ü%ÉùL&™*U3@8tC%F ŒZ­86>ðÑ=={ÿ<ÎS'/\½zó?ýç%WÔbµj½¦Wï~¥iUN€;²‚sNóåï&h½ÛàÜA߇“æ\ŠGvbÃhg ÊMQÈäÁ´T„fŠ·$ ¬ª\~5½±žØÞN=ØÏ±r>WÛÚÈ‚¸ûü®Z½¸‘XÙÊ=èìè“8ïÊò&üTiwO§nÔ–×§s¥þ>’hrgôã]=“““r0«ÑžÁùû÷Ý©Lgwïææ&°ŠP˜¹yýŠW xøXÐÝûó‹ßí鸳ýîoÿ$êé*Š_xæ‘_ýõ¯{-ö•ËoïŸÉ×¶{»%£±îeìl>»æöEe‡`ZEÅTn`hDpzçf7̆UNš[L¦¶Â‘èÌüÒÁC'®Ý¼³ÌºC^_$ÔPR­¶±S–œ¡×ßz!_n&ÖGGöNÞŸ¿=­Öò½±ˆojyö‰g>SÏUÔbSpgï]íóùEÃöûÑ:ù½Á®¸6st­Ð´ÿüß«±•ÕóW?ù¹Ÿ¿ôRßÐðƒ•eV¸+ ÷<ùgþ¯o}kiimxh<‰Þ›œžO¬– r¶<û”B©\}ò£E³i"«Õ*µJih Ç)ìæjj´o@ÀÙž|U3ò…RܶjöÔõÙ¯~î ž¤—S¾ìTdM8 iMÊ ® §èH]äA‚Áöê…\ÛfÔjpJ¥q¼ßб»;ƒ åm;m3@ueÅ„§iØpÄ‘Á€—mø=*E­Iê‡Éô“6D¦‘'Ú;[ÂϦ‰)h†mQ×õ€ÂÞáØpE‘ERdÒÝgsas 1k=[ņ,ãÔ°›\µ‚úh[¹\µÌ,ÕçWÕXu‹#7;º:á5å F&kz]Ô,—ȻɄ\Àd.§»Ìuw‡{{ÜNh2KP3•R¹«½TKK‹>·CSÛ ËË‹ e=ѰQRØ|æÂAŸ•~û'ÿø/>|è¿ç¯bäöj¦P¾pîèðà®élÖt°ËÕõª‰ž{Ø(…6!4--™ÚlªZGG”fìo%3ƒƒÃ+«ë¤÷ºìéò"™ÕõjMu{ƒ¿öºŒj‰Sh4Ñ@¾ †k•Œ+àÛʤ>zíÚ“| ÔMŸ[YYûÀ™#Ì›ÎWËû‚]{­–«À:.¾ü"Ë‹ÇNŸ „üŸüäÇœ8yÿÁ"ðúËo¿ò·ýfÓ\^^þø¯|’ã8À ½½Ý/¿ô"ͽr*Òà@À¯r©°²‚CÈáÙe˜r±äqaï…»·ïŒõõ$Å ¢^œ WΓ1 ½¨Ÿ}¸} Ä„ÓÀwÛÙQ"B³9íݦ4º­Ñd†y¦¡gŽWD$ÎJÓÐlSçY‡Ç —uº8?l¢Žˆ [‚§Õ<) •kp$hŠ>ZýeuO¸ 93"H&PZ,*#“Žmjb5(‘Å’@¿Ýžyì ]ÜE´™2àÊ<ààû ý– ǪAË¡u—+9›Q]1ðÀŠÕhîHiÆ«kNW¨RQaO³™<¼«¯¯¤¤ÔƒìÂEæ2™ž®n¯ÛSÌæ³‚½ÎÚœßt:Ýð‰kë+Àx€|e³YŸª9¬üç¿úQ¦R½óæÛ³SW"}]5VŒzÜ'Ї#©Ô l¤'l4õtR\Ý6ö+`ÁžÔêùh0äõ»ÐõÉ1ªntx|·ïÍ«šéôxlî0¢Þ¯¸A‘_ÿ“?ú#@(Ξ}áGsÝRDáÁòŠÇã2y»gdxëZÊëñ B‰ãlÓ‘ËgûºÍšX)×0XÊQW zg±yt(Nø‹¦ççç7¶·ƒÑX0Ý36ÒÛÕ=2Ð@öç?)Þ-—KÙ\rddÈlh 'Xªî•[+kp¼{b몬T.ÀçLÚØ\ƒÓîó{X޹sçN×ðÀSŸøøV>7µxw ´¯äþàÙóÙlŽ'Þ‡&¡Ã ¶9Àð#Š&6 c&~ØhµÈ#Éuà ÈrOw7<¸U•ú«ZµV-Ô«y³©¹€‰²Âyˆ»ªf’ª#’å„ÃÆAä@Aðd¬ùô&ÌÖk¿ó$° ¼ì¾ƒÖFëë„“ŠðË G–aÞoFu0¬„ö›lÙ¬¦"Áj4êåR ^ðDªÕ2éµQœn3:Ãj˜+™Éå ð[À±ÁPi±ˆ›w‰‰vij6ŸÏ³~ƒûFX AAÇ”‹E@ä`adA øcår]¯oÛ €ÜÇã‘­V³¯_{÷ýýÌõ«ÿô³—Â!a#W¨ÚÂW>ñô¾±‘Z±l¨º¯§[p:׿—VB§ WP­³ZÓªkÝñŽx ŸÞß=€¶žgôOfl˦ö8H÷-R¹%4Ř'=r±”Î’­b{$ ðŠ[¶·*K‘×ÕÐtRû ¢¯]Æ Œ(9qt‹ÃÆ-ì£ó¢`᧤HI£Éx”Na@ “«QEd©‚R„@Ž ¶&õyÝ8¹{ïƒL:°9©u.膠8±û‹¦– ¥Z¹' Ì^©X11˜d€õx%¿?†AúF­¯¸œ>§³•b Ûò ?à§G"pëÀ3@§Ã9M“\nxÙñ£ÇR‰D>›ãû ð¢ƒ‘××ygÊcn‡Yˆ -¶$ÇýÕ|å_ûÆía¼«ZÒ¾þ­o‹²È‹…H¸#à§  ¿@×BCÉ)Áz* T2ch ƒ`Ö”M‘áÁ¬Ã7ËØñ|åw/·“þïÿå?/ÌLy$©¿¯7±¾úÓÿ“fØP¸X.:ÝòêÖÚñ'‚áˆâôafq ¨a°³Ûësí¤¶Ê=ÑŽx×Òr®X,F»;zƒEÎ¥vhên­QzŠýN$ì|zJoÔýþàľCçèë‘Eᥞê÷¹]•b!苃rK¥`…{ìÑ[·nÍÌL‹ÂáY†o‰GÕRþ©Ö«õj¹³oxkvƧ¸üÞÀæò*ÐP—âüÛ¿úk™!þ fwÖ j¨èh#IoX`Üjû¡“ù!4]Ÿ±š£¤©£©€Já/˜&è%! Ø-èQ¬Á´šj‰v{¬ƒ^q:%Ð`£ylêä”—ÇEX|„a–³h`¶]&JB¯°ŠêƧ¨”Š2¼dG—Àâ üø¹z(9®ëL¸ªºªº««sÎar0ÈÁ3iÉZÛ”“¼²Wë û÷þ볎kÙk‰²%J´$Z‘¤ JÌ`ˆŒI˜œ»§§sî®ÕUÕÕ{_0ÒzΜ9ƒÁL÷«÷î»÷ûÞ»÷»»‡h`Cf ø„›)tyOjdto¯c`[Ñ [z¶ÁµÊÅ6IÀÜju ©dõK€"H  ¢dõ*l”ç+0¨Uƒ^¿±¶þ5‚…-a`ôå&2Ñi:­ïñ5’©mX$‰d¸¦¤±:±f‡çJ‘±‘®(¥—Vïzä‰ßxö“—_~®% íòøŠ¹ÊêæZ)[þãöØ0£õ”QÐs\µË·*e•{•ZÃîö•ª œ`ªõV(Ò»syaPV«‰Tz ’4[m× øÎþä}“ñSL»¼®¥õE ÑdOS-qCýQåTË÷æ[?)Wò@_ Xô[,‰b¹3¶µµ¥GÀ£…Bad|¤ÅóÉLrk{Ëns>̤S•rùø±Ãï¿÷V,¶97;³¼²hÈb‚í-äJà鵎ÃòGë€X¹ ¹]Xób!mX¦Ã³àæag¶[­ÌNÒlµg¶w††F>¤gc )¼( ep6à×Ú*H7Z4»š =Ô FI)‘¥×Q•BPŽª ²¹‡²äªàr8áÕÀ]1Œï‘’e»Ý“9%Á™Æ À¬¸–ffnorï…˜¥â0ѵ'+3½Ûåó<*‡P%b”AÍT/®Tô¬æ(É€½Ýƒ*ZéJi ÀP!ø6kuåÊŠ<ÊÕ«0t™$·i-ئÁÁ(»0ZFg%5¨œ]±uôG$5¤–é¡„º’Y~Új"Q>@Wél^àùååeF«C}¼+U-MÃï´Ùår‹Z&ë=~ÇQ‹;zéÊ´F«qíÛ—-W7`÷»çäg~þñsßx7t VG€³l_¾|­ÆÕŒZÆçôÔ90Q“€Ñ€Kƒ€;Ò7Ë–õ&VBMÎi=cXÝ܆°g0˜šíΉ#ffføvÓít|¾X|i~¡Ùí~ed›¶×€Cè¯Ô77¶X²½ôÒ÷ÑaŸß1-±½ó ©Þ[ª7µB‰$4HBgå@ín·Ëãôò¥T"ñÕ¯<?‘D”8Ô?àvxÁ ÃÞ®µ9§ß]¬—Á4ß|ïmTNm1ð²ºYGåÏAñ0ž„`›=àÂ[¿øÂ7‚ÁpG-&3øAØlz\$•E‡¢‚—Š•L&[m¢û\kÜ'n73P÷Õ‹Aõ¶·R©€yÁðzxÙhaµ,I|Kª×:¤b ú„]ÄÜ!ÄÓ¨S²ÒDÈr÷Vc.Š:O÷p$dØSõ£ðµŒRÇÚÔÎc”’Ú§r#åÞVR¥Ñ”CÂ^OéÂ5Ã!Œ |(¾‰uD¡×;¼¤ÁòùŒ$7!n"Ñ%3œ¡@DµR—×Ò˜Ù¢Hýtal('ж ÌLßÀÛ-ˆíéñññS<€ø¶-ééY€V‘pY¦·mpÀ{<ý„Ý7ôÅçþmy}ü›ÙáîŽî¿óàęãï}÷«Ý›·›-ŒIâ€@$g&§|>Ÿ?f«ÕõÀFaêM[*±#6;¡`_«Îq-†W(##ß?ûúàÐ8ø}’Äžÿ׆…(æ²ÜHE]Ùlw±ffÄaƒr|ƒª)]£Üj°P]ˆ §Ý¶ˆYÜ·oßÖÒòH( ?ÌfçìN‡š-TÏçtÃ÷À fÀEHò ~ülT«C2^y"zt$fWåZµ˜á#÷ß ÇM6ÂÑÈÜÜœÁ„H¹Ëãî_©”`LLìàV,æyƒ)ê=þÃL*[ãê«kZ=›Ì¤Ÿ9}‚4õö±.­Áiƒ[ÍBWjñÉ%“ŠU²°^ÊDŀФ«´©<<46Ýh´Àfz2Ž4~zZsþ‰k´V«?îO¥2±­ð Ûñdls£¿ǫç¹j‡$´~Ÿsaáº(jæ¼Ï¶´1ËÜ¥ùªÇÙNDG‹òºû†BwŽÇÏŸ½˜ËÇk3k]@‡ºÀbÔºåØÆøéÇN¡´Nguy5™N-.- Œ„aÛCnxF—Àø|TvÐ# fW¦@´5}óÆÄ¾wÝóÀ7¿õ]AƆ&ÊUn}}3¶¶ ho8yàÁ‡¾ýíoƒu¹Ý€Ñ‡¢¡Ôæf½Ø÷9¿ó?þƒ?ø Æ`„JÇã\¼ô?þò¯‹­ûõÅùÉÍtY9Ðï·L©xr4I ñ‘µÔÎÜœ­¶âùœDƒµwõ.g¶\eXV×Cé™NŸg`hdzö¦Rs†Ÿ|ð¤Ãauv ùBsm3=qð@»Kµk|6Sñ»½˜HYŒ®L© ·X²‚Ô0UÚÕ#{B‘áV½UHe®]<ÿà=÷@X"aÉh×wHEï“ÖQ`ò¤–hä „[m/»­vPN,!X«×îê­¦šÛÁèX¹' ¼X¹hNi用£ôQ&vóT~¶ò„R EÔ4[©dÒÜÒWjzˆÝ&ü¶jŸ¤”ˆônkÝ«…”(çÍáFÒ¼ÒüXI=” –ïÂt#*7n6õ:–¢1“™‰ŽŒVÊH]1{M%3ð `mfÛï ¬¬¬@صÛ¯Mi e‚À æ+^œÆš-^{‹´ ‘) ‡¨¤DŒ«U =xt/°±±Q«—€è §h” ~F$ïwYs% »2W­ÕÌf+ú´X`†1BS¯Œ–‘ôj_MW+µTj§P(íݳgïêê*¸çŸþå—¾í©Çîwèöø þ8p\̪`n7öîÝ{éÒ%xÆ«—¯ƒÁµÕÁÁAY¨´EalßÞcÇŽå+u^êý÷ßþìo¿Û9yù*WkHž¯Vþ¿ßùío}ï;¬(¼~îmW8ô¯ÿú•K—¯.ÌÌ?÷Øì‚hH*•JÁ#‚a›ÓqåÊA¼|úÌR^Ÿ÷óøûf«µP*þÛ¿ý) ]0ˆjðìðõСC®p`qmevöڙǞH¤Ðe…S•\atti ´›dð¼ˆÃ'M݉|ƒŽÆÍF`/@o½Ñ€zÈb=à ¨G#ÊÛ@]C{¨ãe·[Ož¼os3–Ïá¥`¯ „¢~¿w~a)É=úè£ðâ÷Ýw0˜^Æ`½~ýzµ^‡¾±µ92‚ÒPV××î&âéljqqÁã XõìÄØÈO^9 (0J±FC"‘WÊòå/Y9¯~ú—ñå—_÷ EÜ÷Ýw¿{îmt*îvì¤Sélæ÷ÿðž|ü À|×®\½xùr¡TÚÚ‰ËN¤Ïí+·ßbv8pÈÆznÔ‹¬P.‰=™µ˜ìN×;,„ëÉíÃGÝs×½ó7ç ÀÙ­ŽÍ˜>Ì&/hôÖárÕ(…âèp$úÚ«?‚}ô‰Ç|èT­\šºvæÙéõPz”d±Ya倡‹:`ö`+ êÚkq¥£æ7JG¡jM¯#$…q0v§GS›9í¦ñ«]2Ð]~»E(WüJ’H¯+Ê»V¸›þ‡ýL#9L9öRduoµyÝ¥h»Ö¹›|½[:§¦ŽÃ>±°fåÆH%>qt¯Ëji=Äëùùˆ‰¬€£®ZEBZlÉ+¥Àû÷ïSnp-«ÕFÛUø/@,™L lÚá¼K§Ó*t)·D© ![¹EB‡˜ÜãÅ1™¦P^˜†ÄY½Îddkå@$¤8Î`Š„dl(“ÉÄâk`‹ªn „9àF0ˆªñ­½ÁTÏápÁ1™­@C¬VëÂò’rmN…u»ê¹|,-®E£ý¯½ñ6¸aÔÑàÕ;ï¼cöæ|–ª5- ®f6°ÍZÅd4hæ£ÿåc¹BþþøÿñK_ÚÞIŒŽíŸÎÏ-Y¶”Ïmom÷Íÿxq+ëëë”Xkp`¦°ØzƒÁæ°ÇÖ׎> œëÅÞ‡í×;?sp5IiÇ2Šž t0YkÀOëÌ}}—®Li)Ïa3™Ø©ékVó,u¹¡”lOðˆ]¢×¤.VçP™6©T‚Ö㬢oÏb¨ç%I ,ÖÞI*úôȤºj¹òa@ð¥o„e‰ÛÚ;»F¦Ú«|[¼¬¼¼¬QºÂ{àv¾ëM¥‰[iPm\Ô@œA?kƒ—Aš3&›–f/\¹433™É$ƒAWW)nV‘”ÛŠ¦¢­¾ÌŒ,8=kØÜZc‚ñB蓯×`ë.{¨V/p nu "Q×ÝuX«Ùä)6ÒX¯«×i…l ¹Óî Kd$Ü× ë¡2ü,L¨Ùÿ²V*µLÝû!©DNQ&cÔ# ÇkµÙƒ d4Á,°F|Â[ä¶´#%@ ­ÕÒŒzŽá¸ÆÖVpäððP³Õ~ô±3këK&›Ód±I]ùÂ… kK™T`8Þ÷Á]Ÿš4Œ–“'í3Ÿ¹ðÁ/^¼_?Ömµï›°;œ¯¾þ–Ј.5¿²¶é§'§î¹÷Þ|ðïÿá‹BG´-xW.×9¯×רq+Õå 7üÀ§Î_¼”/”¬4OëàI˜L6Ÿ/½ÁÓíº>5eí‘B«535yéêXÙ‰ýû-FtÂ]k7F‡ëùR|;a3[ìnLH4éJ=Ç—Í¢‘®Ø¹97­ÕQ/½ôƒäZ•Ô2F’BÂõªø/òà3qLbä‚ 2:Y¯d#3`Ä:­༬¡”>4Hl"ð,C•w˜Ü£)­ZŸ„Ä!pöu¨ÿÜ"ÛÍîûOU~èR ^ðö¾èjÍRO…q»¢“ê‹Ôë —óË1™Œ€X€XòçÞ}½PLM¨?t¡œëÉ]¯Û©gu°kÕ¼>Áð·ý}*ðÅÅÅÇŸxj{{[î‰.§ }m%™:ê\ÙhÔŽ‡[-Th¢\âjXS—»&ÖÐBm? ø aGhóf“`¥EÝbA§ÐV‹CCèP™‡"½ Oár¹ˆŽ+M¬]]$O¥)–+€Ç3àã]¾XBº*Jk«Ý¤Q§'È-laX‚ý1`€§žzªZ­ïì$Y–:õÔÓ?< ¶Ü•ÏgRÛ=@6 ®Ï–çælHèÂ>82<;;;<8ät»­¾ô­´Ãåz=¶€Ä©·cÇî¼[kd½nwºX ÷E¿òÂצnÎÙ „{â‰}RK˜º1ÍÕÛ÷ž:õáåK-Q8}×Ñrµj4#=’¥Õ5xƾ~pðGO€«ê´Ûãc<²ÓžNíÀvõ½ƒÑ¾­•µr©„_k5ðÝÑ~F£å¸fµŽ:§Õ«et k3ä“;ö€_9=×@FÞQºkÈ@òQG-R÷@§¶¤¢;RRà ޯSÄ‚œ ¶éRkEIµoDª"êo€TÓÀŠQ玟’úÿT2õ³×B*C|H\PÕǶê_m@² v3ê Ë„gôZø¬VªW¯Î\½2µ“TR­‚n8¬@¿ÍV0M›ÓžØÞeóù`Í0›ƒÑápÊôù«)“.l¬o–JŠdà{‡COkÁúõ`ñ]YjÔE×õpT ƒ®L­æB!‡ŽÉˆ¿íŠf£-•ŽŒèÄÃívóœ$j\N³–AM)€i ‡Ãª®ºãÀÑi40\ø/§Ë;Ü’0Qp*à ˘¿ö”¶íöêrjyyµÝ{¥VVV2¹ì?ýÓ?ýéŸþ©ËÁ³˜xýþh°]k+MÛ´w< cfzÆÈÐp¾ˆpÎļ‰ö=ÿËÍæçÿÇÿáÙè°OÍß¼xá¯þæo­mm¿råég>Òäš]¡{sz&4Ò÷öÛç¦gé¿øõÿæï¾û_ýŠÑnõ³FãCGæ––EdÒ±ú#±($H& F=Ë‹èĺR¯µ…"ÄË}ùòåùÅ…Ž$;pDmBòý—_*æ³û÷Oè)LlÕ[8Rñ ÅP¬†06®Å•:<±<) lÍèY¢'!}nÊ€±FóEsÕî´`LЇDª]ð+B—€Ð/é)¢g¢;".v1ˆ±º”º} „|d§‹Tj°Z-”Á€´ÝÀ“ äy=Eò-³Ü52¦£i†¤{‚Ôh×L^}µÊ¡³b-ÌŒ‡Õ[%æKkk»wvz¥OÂÚOMÝxïƒ7¼^'‰ïXMµB·˜k{\^£¥[¬Åáõ¸”ð E,@ìVõ öévº8¿´ÞäÚé´ÑÀD#‹U;: Ð ²àˆ¸ü˜ŒW:¥••%½ŽÍfvÚŽŠôºµ\.o³¹sN䊮üœ€÷tÉDžNÇô ¥ÍðÀ€X(tºØÀÈ€˜\2ssa\ÈÙ2gDkjV8\è5[M¼‡{ûFg~;J¯òAo€qa˜ºùf2Ÿ>pâŽõTi§Ôyä‘éoÿö™GÖßxýýÁH Úîð-›Ý©óù.^¹.º¥ÅwºÅÎN)›¯l'2 ®j²Áâ/Ïß4ûpp"þÙ_ÿù™3gÌÁ „ÔãÇ¿üÒ÷‡††b±Xôà‰­Øp õ6±òákk›[v r›ÓóÅçþ>ÜÞp49‘áä½ðMAiª&¾÷Þ¹F!@ðŸøø'!(®o¬:t¨R.º|ó›ß„)ôì;4333Üwç?ùÉO®^¾<53yàèÁøò<¬#øKxüj­¨‚4ø'Œ!½“`P«7âñE3F‚ôx]!8–Íj¹véâØØ’2›\÷FfG‘EÙËHÎ"Iåâm+×µµzu_@µd + „¬½u¯ÈÊ·¥!0‰ªG°[ H]j¶E%•iw'¨â^*]0(° vuOw'¨bŽjÛ.åRT7Ü7N·©j4<6`DˆtW¯^•Q2«\M¿ÖêðÁa×oÔ1æz…LË®,(W¯pý­¦02<^­V”r‹`¥ZäQ×kDêf Cçs=yÏøØ@_Èd0‚…»]!–1îìlwZíb¡ ‹’Ådl7ÀôŒ1[H—J›ÓÛ°ìv"¶¿0'Ì€‡H$¢6Wë !h ŒB­  ð@UŠ‘@¢‡ÖÂšpj=0“”ÎbÖ7¹š–Òy|þ͵Íh_µ6·º¶Œl_$ p‚ưoýû7R©ì »×£ T«Uõ†¥Tæœ# ï¹™•ò`ùäý÷y½.˜ºññÃç?¸hwyï¸ãŽgžyfpxü{?8+ve_Ô·0»èp¸ðA<™L}¬•éz¹*@ÉKKK&–õù|à5€_Â&´ÕFR;Ò7`0Ÿ|òÉS§Ni(òòäuï ]Dv°„þ¡!X0´?2=;ãõ1’ ùüàÐ0<4@FKv~jòú¾ð¿VËøÈ¨Å8®cÙ?ú$yKŒNÕ £iBÃêhµ€–4ŸívK95þ¦PÅ—êí¹J½Õ.ì¶JK¯ˆª@0”Ʀüñ­2&%Y‰P:°Ã~Pº€ivõz0z-¼3Ín§ì–2›Ag±™2·´´0s\s½^M¦‰XFM65Á÷7^²›ÉmŽìkS¨Gºùq ¸¢·`<•JÂ~C¹^UÖ ¼ýlÖïõ|.-­ÙÚ\o4k{FGg/¢*r@+² ,Þa·ÙmVŠÐMn ¥i öEÕ™é9ZG~$AªÀnx@Ô¥@ù€…™ŸŸG””„q@ö°C(R rïð À,ôà‚T­Õ»=™ h·Ï»JèpÕ¾þةѺtm²Ù¨ü¾V£!È|¹\)æsÃ}}«+KÃÃÃÀüœ6«ßœ„©Žm¬ŽŽŽLŒ ޲µé«³ug¹Óæ¹v³T««a &¶Ó;ï¼£eÌà5B‘h¢¼³?4i™R®Ø×Yn7(^syqÉ`Ô¯.-‹*,ÓòôÌù‹n¬,ïÙ?qÿp|ëù¾þáÕ‹~§ &ÂÈÚÆj‹oŒŽ7›Ü7dQ¦4t&•®–ªà)Á¸0”@Ç_¾t~nfÂ#E¡PHËÐÅJùÊ•+_xáËä­ÀÝRÂºŠ‹à+ÒæDG<¸Øãè¼)|jpÍmIojw=nÅ}åGç÷@žnÉâ©9ü=EX– ~¢6f§%º½àj"üSѲ%à}ááQŸµDùȧQ±X2_¸9ohu$Xf«ÝPT+.‰ÐˆV›Õår¶ùf.[è´QP G’z¢Hg²Yüí–¤!e§Ón³Y­­Ò;;‘hˆÒà[ë4E8l&°¡Z±’I— :»v®^ÍeÓn§ Po4¢!±á‘A0…Éé7¦¯ßy÷ñÃÇ߸qU$Dg09étZMS“o|á0ŠKUN{£I­Æ"’Ö¢k\˜Z O†•Æöäµ|Vh6Õ’¾¾>¤\¯OLL&1Y|µ:_Ê•öŽŽ|ìç?ª7™/OOGÁ#¡C®Pþ‹¿ø «ÝëFÀʪ !'p5I‘h…X1Ø7È)EA܉Ç A¼çÒ¥K³‹$0`#³3S0Kk«çßµMc´äÌVÌžÉbnñ×’1ÍÜì‚×ïEM~EÉi³gÓ)‹Íªgh§ÕC‚ÝûéOÿÒÆêZ|{»Éµ*\ãí·nuÅDIhJŒ”’(¾Õ.× ªgE§tmÔ*N©‚×ZTõ´Ÿ¼~ŠŽñ¥.¡tƒÇo@ßꋬfÐÝÊéT.NUñG°eåÔ5¤“Ñue‡P$Õœ&˜\€,`¤À•‘)`‘àSiTöÊ20o©Ótº‚Ø@Ì*2€±ÐÕ‘ŒÁ_)÷F=¨‡z9+ò'U]#0Åj­BSLƒ²Ùü<ˆr•êz­$‰-¿× f »ÐãôÜýsó³°ÛÚÍV>S‚ç4ÀÁ¹êI1ûÞ}×}›«Þ¨lm&SɢljäîÁ_Â`+ª ýýý)Dy¨(’€ Áü t3o5Û< "­Îdµ‰’œ+” …œßÅ8ƒ€.Ï0â@±Tñ‡¢µÜV_duyðF*™˜Ø·§Z)APÖ:\À”áí`#@èñçö?Á˜âåf¾]D |¨gÆ÷íÜÛ´:ÿ> &W,At.×ZwÝuÐÂÒòJbÕaµPÙ@igâ[jO¢j­600`±XàYò†ƒd2 8-[mð¥´Øk2¹Pºš/=¯•³ðøc£ãð˜~"†Ð‘úûã[ÛÑH¿^§w9N‡­PÌã´Û,¨>x0 ÖäpØa§Üÿýà°Þ~ûm.“%U,¨Š(¡¶P·/rÔruÕeªžò–B‰ ¨©jˆßáAQ é{“êÕ¨ÜÔ<Ô]å[Õ:‰ÛºXõ3¦Ñ0:ú”ÔÞ­®]¥ÿ €¹ååå……¤ÉA4ÁjÁOØmÈp³é*,p(à©ó"R6#1pŠ€öv¹…¹ÖÓB6% ÈzVk³ku  –Ig^Âf7WÊMd¾> ¡€Òêµ%¶7Es{-´–j6ZR·wÏDW"ã±ð Ø06›0LØÄfj³#ôÀò>¸óÄÉýøìÔ?A¯×«¶§ëT5!Ðïd³(G‘1&ˆ  «ÕŽ!U,LêÊJtÒ$Òé^Ï·›|KKj‰l>ÃÍà6c1“ÅÆW°Á:ÛN]Ÿ:¼ÿàÔÔ ¹+Â䀭€óBƒ:—²¨EüÐìfb—wqêÚ·þý…guŒÍåNçò%q;›]>rŒQ2HAê}æ×Ÿý?ú“|¾ˆ÷ø‘¾ kÐ5šø6x)ð|ÃC°ñÔ“p¢•rùÑGøàƒSO?c¶Øˆ~ñÒÕàà}½^÷õÉ› çûOÍݼ‘Mo)£dÑb8éIÊÃNÛŠmÀ³„C5ùýé§ŸæYÆë÷…Áþॷß|k0ÚwïÝ÷|ãë/xBîcGŽ­®¯ùôS‹ 3dÐíU]L+ºÕèð¢Ü•”Œa»Ý ¨¬Z©kPñ›žÀp“¡(òÍzØJF‡÷8PºÙ© |Kµj¶|£Åñ¨EmÃ`ÔJ›ŽÒ«7`]ª§åèžAê`Í:/´‘â2 N¹]IЧ§®‹|ÃfÒ“bÑD“&‹Õ¸p` ´m×:zšÞ¿w,•ˆU‹1³ÞeD©¶¢–ê´i–!Y¯“"Ùb'Ù”+µÌæÈáýÇ®\þ°Q0‘Õ™BºxÇá[›©j¡Œõ˜B&3îeç½^È; !´3S×D^ ŠÝ4ο¶QJ<ù{/œûÑ›¶Ì¶ÙÀ²c Ó®É+³ÇŸ>~òÌ»Wg-žÐ'Þ‘LÇ2…k]\ØÉnÁ6++iàé|ö¾!rÒÀšM& @‘™¹5¥(J°ZéôŽÉl…@êÐQC¦ yˆ c´í“7¦Wf§öíÛo6[,[©á`ŸÅdä7yíª#àeMV£Éìñ*ÕÚà@_|s£/!zR2ž[œ™["WïìÛwdaq-´'Œ_rºn®¬˜4ÔÄèèz:s÷SO|ï[¯´yÌi3‚Só»Ãý^ûÑ«^WÿÖf\¯Ó¹Ì†R6Ù®Õ÷Œƒ§Ììt‡peþf ´'0x棟šßض±Ìÿùâ?ì9xèÄN|ç\êý“Çïý‡?ùä'? /âsØ7×ÞOǦœ&šç±Ëï_>zôðGÿËÏÉMaya*·³cµ¹·œ[wÝýÀ¹w΋÷ Ží'UâܽÝey÷¢RQ/ת*bà``X¬Þ¨`ü®†@òá"Ò$•Q;M]/5•JšÅ«~Ýð

yò4 õê•Kð_Hª©ÓVÓÐù FÁYÐ۶sç. ÖùÖ—¿ú¯ùb.äuR'54 ã…o¼x`ÿ‘‡O?úÖ[oIxyÊj—.¾#¡ƒ{QÜ.J@Ý€~*É|z»Í`0Ñ¢ÅoIWªKmj¨h/6v1ÃÏêíh”SO€ ('E9®BÕH-´eƒA‡i„d)·¾º°“ØÈåã¥R.èèhxUCã[Û¸@À×À×Öz]Ñn¶z¼¡f³]krÙB†<í:¡*ÊzÜ>e±P«”9k4%¹Õìâ]Òd2Š[^¯Ùç·n¬€o’!–®•·ÀP 3„ §ËP©%uf¦\)–J3k³¨WòF˃;'&Ÿ|ùíAÿP‚]]ÝØF7Â&òè±Ãåvv ÏåvZ/¾øý/}áïá!+k]̤҉íF­ÎèÉ‚€:!¶QÉ+ì÷Ôk\,žj·$'pš@×½n¾PÀ Ñî°Ó4S*U76b¢€¹œ¡½Z2¿±²³ãpؼ>K£ °%KA«EW,VaËéõZÀÕûí£0ݹr f¼Ym„ýaF·[à^ínSƒµg.½ã²š“Y®˜Kþ×Ï< <Œ“ì!0è ö Ûôwüõ_ýÝ—þìÛŸÿüŸTŠ™f­Âjuf³ ÐølðØtª­†ÒCµªÓ²¾Ýn̸—Û*´(ñF#>¶Í·ìº§u:<˜IçÀ{¥¢“Èåå'îŠ !?«Éó ìõå:~û­Ô€Ôk×®‚áÅ•Õd&{¤Â˜ìs»â+8€ÃÍ;77(ƒÉåôQ¤vqq©G“„»çž»´øÔPphieúÎc`´GoÎLCè¡ä\êè‰;€ ø#¡f«¤K »¢°¸0{äà¡Áëýõ_íÖÏ~øâ7ÖVV¾ùü×7·ãê¾Rï–P «*’RûË¿ý‡÷Þ}ß–C‘>«Ý¶°¹ŽÜóàýr©Á9ìV@A`-ÿúåš½zÏ=G¯´D²«Þõ®˜ròI’"ŠÚ0 ¸¥Þ ©7"]IÉ9Òh•ÖºŠ¤Òð%Žâ]–ѪVÈ#‘q$*„!5(¬öjⲪÃH+à]‘ÔìÌÔ…Þj¡þZ¢ÅÄàD×È(’r¸‚[Û[Õj9Öš5ëîÙ»7ä´ õb©âS:­Ùni -X¤={GÚmØÙèd>‘t«Õ988<¿–…Ê+9÷DwøÒþý{²^ͽ‡à.JˆùÃJÀŸhVšÐeJk·Zi (_*U>òÑÇ&þò~æKÿü­¿ûê7^øæ}÷=øÙÏüRëŒï1¬ù\ Õ Rò{Ï2_èu9‹Ùc3ÛQ ¤ê³`nQÙ¾Ë59¹Ðå`$X®¶6§%í¿zíÚþèñŽ(¦2éß~øÌCZ`S‡o!QÔÄ¿Uª‹§#Iƒâøn§PA™ô~¨f@ìÞê¡­EjŠÈ®–B¸Uÿ‚-Kè”$pJI"QŸ0•£ë¹ëÂ;ï\½vq{{€„Ù¨C^XêÉ^ªCýA`”É…­}}FEü)ìöuñ¶Îl´Øm)š;­¶J¹À5*ù<ÅìÊè.XMà‡¸™HÄæçìÖ€ÃfSN(í…B¬X¬øÜœàê\Y;0d$‡kÔ2ŸÏË0l­ˆrá¥t$Ñj”ÛéýÇ8mÚµù+¾ùŸÿß=õ‰o|ýËÍ2wü”®‡¯ ktÕF£yÏ#¶•]Úx¬/v{üzÀ¥b®”ït[jOÄ„pM¥’€[Eà´A¸Å6¬„’ÙÔ„],u…L¦xTÏ ^M׮݀Ù{ê©§ t~ï‡ßë3žžVça~TÙ©·ßx]ÑÉÉÝwßÍ5Z¹b©Ñæ‹…ÜìI'«;|p¢R­./-Ôyâ±G¿õü¿>‡£Wg¦à¾ûÚûFüË¿<÷+ŸþE90i$MYlÖß”5¸D`ž ÿ·ÞN&b(×N2÷WJy#MÞyäÈ7ðRt`¸Õ–©=zW¡Pʨ£zþ6Kƒ‡A®¯mS4¾¼°˜/åî{àdÿàØK­Ê½ûþ;ÃCC'ᆱ^•ßøñ«Ï_À`5™§ä›¤ÚjV= U>‘5ÂK¤$É»ÇFè¨Aɨ¤²? £ þ *0E5q$NPÊ…2b¥=RW=ŸR ]l+93¹ðê¿ £Õö!aôš8 Á›‚ÜéÂ|o6›í´:Åìrq]ð•Å”ŽBW°<6ÇÁ±‘ØNÚ`ôÀZª²Œ¨àÇ…#>#€¯~[bkkÈþbaåÀ¡ ùf ¢ÖHëfõŒÑåôò½N àÓºvWˆ¶®ÝЀñýÑ¥}Açoþò¯\_.üý?²wϪÒà™øä/~j}kkeyÁçÓsõr8ÕÇšœ¦aô¦ž†¨4K,«­¶Ê$ Á½V{™ç[4.˜PÙ ÓŽDÞPUAõüÔ’m~ÍØŠE²Óëý~?pðF»–`£~Ÿ—ıB¡`tqa¨=„K ìÉre~aÕÉ€E TtàA"Ÿœ»9tèH|k ´/Úÿúë¯Ã;îº'^.>}ê™Gž¢I½Ž¡“™4|Š…»OÞ T:™Ê8\ÎL*CÅ¥FKîloÞâÄûo½øûûTÔýñ›Ãcãô Ï}AŠêSÀÒ¨ºÇÃ}#só“¹âŽÙn° ;qà»Þ•ž8|áý^ü¯k r¤¿ÏçÀØBšÜ6R©mTzˆ¡ÎôÊõ&Äj Wêo¤Ûumi*É$. èÌ\£ª€SŠO퉘Ìw8Õ Õ+SµÑR¹~¯”Â÷‰D¸$P gºRSì´,vGØiplªÄ˜ô «‹bG û±XleaÙaµéIº-‹V›kâÑç 4kM¬+s9J–ŠÅ¼Ãá‚é(ŠétõÕ#aS‰ÀÐÒ™C™ÒéŠÅŠÒŠ}ä™d¼ØÓ4J÷d"*Ê]"›Í—KõžVpØY)Jþ i‡ÅŒŠï4òv¬ ¥ bûñGžIôÌ;¥ü_ýÝç^þÏ˯¹\ÁÐ¥fÜî¼ûàž§; !­äS“¼w®¯x«Ø#e’È–2\§æ ¸÷ìß“Ï3t’ïvûá„)'³Y vE\(£R®ø[ƒ¨¹íúÚæêê*º$Òt0hPq©l*I‘è> j³Žî2©P(Dku°!çVžý•_mµùvGÔj¼ôˆ.àõQ¤÷´¼¼f­Ã–5Òõ2¼Ý³Ï>;><~æÌÃsssð:zVA5­šÚ ¸0î§>ùñB>ƒšE™ØFƒ+5 ch$ùò;¿ñ[Ùtöü•)“Õ{ìØ‰í8bKð iÔæ'@á•an~òZJ÷è#ôõû©³±¾î÷G#AÛÚfüSÏ~âÜö«/ù¼L"=yu €1Ä1²*{=\ƒÒ”ÀŒ4€$ÓBЮZ-F¥a-wqEtuÅf{õ_5_¹¿Ù%Š Ào¢ÜoŠÉ˜ÐÅè &üB£Î™gÈëé5…«¾7}á¢K¸CúFCpú#¹€ŒË]MµR·¹lMþŒÑ›)-;žó „£C¯¼òîž=¬Û )¶ÉØ2©Ñãm0»vÒÕþ·$â™lJ§[ÅPØk³[·çb ‹…, «”k•ÆÏžgcÅõF»š®æ"“35‘¡ÐÒÍù|;m2µƒèÜ  ¾Î`Édòщ‘s“—7dŒiYœ›ˆŽì¿l9œm]¥;ª“y÷,ÿÌ¿o¼zikψ£Ñê•*;‹‰Y«Ãã‹ ¸˜+×»¤ž»8Œ3¾…ë´@í9Øjó ÔÔ0_„= žRCèô:+ce0¼’ØÎhIã`¿·TJÔÄB|{¼ZiéÕþq'©<AˆfÙÅÑ+,­®Dûú` £ƒ ä?<ûªÑfÖWQoñq=­±õ£{_ûî×ö øC¾ÇŸøD¡Ø.o¿óo_ûã¿ý›åõÍS÷Þûôé'WgƒÑÐÂÂJ(5º®0Yœž ž×Ó:'WçÇÆ®Åcÿê¯›í¾¹¡³œº27™lj` öúùw9òò›¯8tÈh³me—/pÎ$w-C­'Üy÷¼%7ÁÇé²>rÀã°½ôíïßwâžj±²ß¶†IµïRð4!8/S²rÏI 8 u;…UÂ)³ ØôÖÅÒn:½zÕ‰„x¾# gÔ®F¾%I( ÐÝ |îÍ×?|÷ýn‡×j©j¥*ÍÀVS.™©+*›Å–+…#ý&%Á Pš^«;th@ÏjiQ$³?ß–’Él à>|xÿµ›ç€¸„B“ÑAÜ$ U¿q}ª%¡b"p ®+&¡Å5$ ËZ­6å.­®V{‹å\®c0QÖ3WoçóÅf£åó¢}áÑá½t»Õ­$§oLÛMB£»>·Òj7L&µ2Fnïl—kíF›À/tHJ!×PJçf 02@Á0?ò`Æ*•ÊíÆéšb±¸¹¹‰çq¨Ç!Dvˆ‰Ë¥b­*¡†-4ÜŽPšº€G$x|x °wˆûÀீóR^ Â1ÌêÀÀÀù÷Þ?rüX­V;|èÐÆü\6Ÿóƒ}lmerÙ;=¯loc=rÏè˜Ü*¤v’?øÁ÷{@¬Õ†ElžJ”á=/l-pÞŸÿüŸÜ¸2Õl6Qc,±]­qÍß#ˆÕ•å|üjMt>::*´ù¯}ík“×®ž>}&¶‡zÆÓñã'NÀSOÍLëXýüââz"~ßÓ­­­Y(Ƽ?D£&ŠÚP <8<”Ê'{]YgÑ5«u°®”pblËM˜µþ&U¯3æ k¶hÎÎ-Ï‹])žÞju’üÐiÍôî{îDzqF(5ù€7<|ÏàâüÜÖö`A³I_ª6m¹ŽÃá\‹%ÑS`]˜=@ü~ø!lõà™Ç?þKŸ†g|î¹çºÆ@4Šº2»Ý7nÜÐ+Wb°3]Ú™f3À¬Rµbw9·7WÒ¹,….|P¤†uÌ2=¬جÆU "õq J¯'z(ejP’(I6j‚Rþ.‚!¡;G hà7{¸ªû âÑÝBM5£TIäûéu(ü?«cPÞüI`N¸Û‘˦Äv£/à•ù…ÉEJÑ-ˆw¨»z«ƒSóúƒ¿¸F»Ñ¨gRI¢KšXÀ·ÁÁ~»Sg±š²¹å:¸Ñë’=¥» ÄÁb)Ç0zØ(—Úhà $ãˆál_0DÀ¬BG¶Y.—'΂³4°FÉ^Ÿ6YtMY¯)*û ü1 &v£§¦/W›QÀÄÁþ½=YnJ:«wg}]øžLtÚ|e¦KT)À7iÐû¸v³Q@Ý&P½Ðm4x¡ƒõd‚¦ªõ–¤jì+AMòðð° ÀvHÁ7*€€%@‰§Œ“#ëInÇQÿ÷p¨Ýj¨™Í b5[¼Ôå/4¸«× †íúî›çw’ ƒžâšuC¡XL/¬¶ê œÄ<~L@ðXìG?b¤µûÉ3þðìk ¥Û­%S©Œphhˆi6“Uû>F¢aù¾‡<ßüÜŸÝyçÝO=õ ÒÆ¿teggû¿þú§×W–aBÀó¾÷Þ{wÜq li4GØŠ„Sk[›±-£Ùf/síÇŸxüúìM@w&³¡Óqzý•J9Ÿ*˜d†”±¶ÒŽPôoPÏ”b‚ ø®"ŽTrÇ)à„L þ3-ew+ÀxUŸªöÇCí ÑNJôÊÒ2€©þ>ôÚ²ätؔƛÍÑhVêµ:Äën³˜Ü’ŽâId˜ŒB§ÓЦǤôÒkÆ÷öSºvg»"÷$¯Ço2Ø+åÖðØàÊÊ’ÍfmµSSSý£÷ÞóÐåK×{˜€ú6“8ðžZ¹ävùhŠõºÑyP"tdƒLDâù:£3VÊGÀÎlFjÑA‚çpº¬àBY C’Z»oÎÊ]Bh +1äØ l»+’•b·²•õG˜V§B·Ý‹Ñ9Øxà„X“|3l$†ÖtV¤«T€A WŠdòƒ©§ž€îv< îJê¶{˜œ±¨ÖÒ”¡Ûau”ƒe ê„£îu•)ä4X¼>.÷Ô=Ë"íâ^"ÉãG†^jz<.t´¸Ð ð6­Þi ‡Ž ›HtÈóͪ†9zôè÷¾õ­åååÓŸRÅ`ŽÝq”K ¹t píCgNÇ··z‘âÂ¥kO?ýs¿ñÙßµ{ü±dfaeák_E%bgΜú›¿ü»}ûöí¤R€G•Áš‡~öçÍù¹íD$„' F"ð¤óW'¯\¿¦µ›#¶ðØÈÈÕ‹—Åõ©d+,a!¾++Å ¢Àð¼„(ÈŠx"®Î…JÞ¯¨äÕkð]<Úû™NsH6çg®éÁ:á;*±–ƒø ÿvØì¥Ì¶Ãçð¸7®\”Íš}úý  Bßá{€+°áÌå÷4Û¥r¡Òß7ðzÒ‰ÄÜøFêð‘¢ÔÈå2{'†"ÑÐÂÜf&SÐàìåKWO=t_.Ÿ\ßXÐítÚß`Å»¡‘¨Kg³ÚÌããã3“7hZW)§øf‚d)@}Ñ~€’„zÄÃ8QON¤~ 8iðEýÏ Œ tˆ NSúP¿e'Y°]ÍzçÒ…+á`ÈcÇf%¹Ä,6k5YèòRƒîÑصËê*6-Ün‡Ónó€å©íÄœ©âdØ-•j x 0À|°s F!ªk±°F”4£[½Ž2±ðdx5_L&“››uð£øx»àGëÕ ø$ÀúZ|;ÛÜI%ÁdŽ~$íÁó£ãc°SS3Gï´¥›ÛËë [ûGCðŽƒ‰­­è¡#déñ;rÜÞüÌ Ø4Œ°¯¯oÕø`kÍòÀÀƒ.Ûg0[Ö·¶âSWO?þÄòƱ»î}øÔC¨6•:ýà}½®\¹288˜ÉfÏŸ?C½ríë½>týúûûK•J}yYìv¬^Ÿù?ÿëóëë#ýÃ`e±ÕÍd,µrs5àh =²^ªèÑÐZ¤.KR'a½ŽŒÕ5 A”„¶@ËØ³h) %[µ V<yK WmI¯ð€J’Ò¢ëx˜8˜åp ‚üÿ«ß•ËY²'m­¤]nc`—¶6ìáH‰g×·‘ˆTµ\5ɾ€¹Ámï´úâÕk+A¯£Z–vqg¶wÒ¦ƵD¢ês2SÓ+>§Ûkwj{%ÓJÛ'¶ã©r¹øVtÕ’\ȶ}Àæ£V–7´ZýúJ¡\^µ{œÝ3³½R¾&¶Û$Æ´›u‡3P¿Ñi’6»ÃÑ¡)^àšåFàïêuŒ×<$Û@d«ÐnWS<ûìƒ°Ø ±äõèl~§Ïc6º¾[,ŽB~§\HŽŽŽr|¡(-­§‰y‹{Ì`–´úÎS#}€8Œ+k7ѹ›À—ÊÀŠº%7ö̃û!æÔ+eØ3Ùüv0Ôgs†–—·s™zG ïß?¹´ð¸H9–:sòäõË—Ò+Ëw=ô°Íf{óísv‡Ãî°/,n(:´Ç榦ÀhÀúùš ‘(ƒÖ¸¾¶ ÷ŸûãÕåk7·’›/¯3 ê¦U7ȱùý+íb™¯þÂ=÷м°1»ávy9Cax|Bĵ«swybÎÙWÎŽß×êÈŰ€8Ö·2ááqïHdG(¦Ë›wÜw°Ùè˜l†“÷ÝÿíÿxiêÚâïýîç^yñ?¬.[ÿþ=àè>÷»Ÿ?|ðПù=ZˆW; Ìá™Í^p4yQo”Ó$ 5ö"ºìDñPKÙ4X»'¶1„DQót ÐiR˘5j%z»‹GU•UÄ^½â¯(íÀm7Ò¡lqä€Q …6*-ÊWj kf¹®¦Ø¬W YtÙa±EÇ„•kt8®¦!E»ÃöÛ\T(Çèt¥|¡Æ¡b ‘ï@¸Ÿ¾l0êÆöô“T”«7s¹˜(ó}ѱØNbll¬TªNNNú|¨Se«]‹ÅW‹…šÛíEYñ…úìüB©RÔhQþ«-` †ùI]¾Ù) ¥¦vm4ÀÄT+Íh4 W²D¹!›°Éh!p®^«ÀŒ…žZ­D4 ¥®DpIÕèv{z½©X¨=r\%”6š-9ì”× ‹ïT©JðèMåI!›±;¬¬‰íÊX£„² nøè±»c%”ôzP—¡p–¾¥ª™‚ -;ìÝÒáQÛ?€Ó‚Á\¼x¾‡ñ!ƒØr`âÀ‡¼j1á@šþ/Sï$ÉuŸ fVe–÷ÞvUwW{7=Þ $AYФ¸§;µû‡"ö!súC«Ð1b%­xwŠ“¨ÕEZQ$@Ø?Œé™iﻺ¼wY•Y™YyßËqÛL´©ÊÊ|ï÷¾ß÷½÷3…bîîý÷.߸üÂ>ý…/~±ßâJ™œÓdyxÿÞèè8:ÈU¥Ò€Æ'I o¼qäÈÜì~ccãü™—FF¦sÙü@"•7=%uµR™±ÛH£LÉ®Ü'Y5 f“Õdá=ƒ®#vyüR" :0âz³3¨9wÍF5bª¹­O2C´Â‹`HàF‡¹C†Õ™¬–¾aÕ;Uäû¯“ìüÛ-VcDÊÓå::½µV/rmIè•Ýß¹óg u÷ÁÒêú½ îSA·ß`2všf›ÓDƒÙ$Ù……¹Ý½R9‹‡Ã>—Ǹ·{(SÕÙÙYøèFƒ”sUÍæö&:òõyâX¹®ýÁ@Wè¥Óû”DŠQÍÂf)Fàø“£Çë¼^_ì‰2sõúžï,™=sæÔêÚ#Òã0â1Yœ ³Øå`Ôµ´ÜŸŒDb‰Â À Ûíö#‹óׯÝI§3§Nž-:<Ìnmlö …’(ñä “ÔL5AÚcmkÝv´B0Çr¥v˜-‰"{ìⱯ}íkßzå‡3P4Ü^®VÕ+2M:`mE-ßÖŒeLêŒnlXô¤µ6YX à9ÀŽ?þã?Ž%¢¤[r¿ßé4GFV‡ÿý›¼}ù²Ô!‡±õFëÄÂB&›Á*¥Én#u÷þ‡EÖC>Ÿ |¸çd<ÃT¯6EZv9­BŸ«”x^lYû¶'.}J%Ê•_þò5àEÞ{ÿñ‰(øí›7±`ž|æé¹™…›·nŽŽµúæ‡÷*¥bzo÷æ•Ës£0Pp/·ÕÊX-.–eú2‰ÂÅ>>zÎd1ÊŒËbà­F€\G今ØWdô‹ãlZµî£ˆª}li-ã«EõcŒ ãª2&£Ëwû’H "(‹ÕN"óY £ÓÒ ü­V{C ¥ºBï gs¸ÕpÃLï’|,îÿðÆmÏkµÛëàŽ²LÒrºP0+ÝB¡ ÂÆq»=¾#ðb§Ã‘Î)6¥ÕÄ3öñépLùBäg¦â»ë›ÁP¿éöêÉŽi›mv¸^Š"ÁDX‹CCõ'bÌ&µRj©æßóϾ٪`î/=}%-zÐ:“…[É”àòÚXÆÈq½Z­A*Ý‘ã(þ”Íäëµ¶2Ð÷HÐ+~,@KaÌ€¦Ñ¸˜lƒõà‚Ix¤d2YÈf$ÒUÐŽô`¬~ø¡Ï½xþüÖÚj»^#} y>[Èë²ÛëÅËHǯW öµq=RÜ æHkØ4J¦áÈ;w¯z\F×Îæö¦§Î|éw?Ÿxuø{?þ#¥/–Šx-%ÊÝVsg{ÝíòF¢ééÉ¡¡.xüøQuÙ‚IàãÆv¤i¢I÷«^x‚Ð×jo¨Åå>ζÃè±äÛݶڶÞ(S´Õá$mnùMºÎJÅÃcµÁ\úÒ€ ïòx%© Å V9åƒ>œ¾ÇëwºÝ M¹Ü^7© Ïˆ¹R«öÚ&“Á b«ÝÌØH0;(ÙüR_[àþ@ÈŽÌC߸ùþdrÀtªÍ&e¡ßë7%¼`zlêªÐ:šÂ8˜a=AÜ?ܧun XÉ%¢õfÇhbrùêP|4žˆCÃíîmŽðßhu§gç·+x»Z8ÒÖlh²O¾\N’·Y(¸)\ΚÉä° "‘0þÕÈ=x<Þ†1ÄË´4ÚO¢ÚÀ´ýÿx8úÙgŸ{ë×·‹yü¾V)Öõ±‰”æÇ-6«f‘¤ÝB$´Ã•áXU«"åÊðøýø‡Ðë<'N%M6€©PoTê­úésgʇP&p¸¸í½L7ÜévÚ­ ä>iÃýà_<n·÷Á»ï}æ3Ÿ=zlqcw»\,œ=}Ær]¿yu{c3Z_Yþà½÷&'ÇOœ8‘M]½zMÑÑ‘PøÎíáåW×6Œs±^;yâØöújöð Ïµñh6NÄc•r‰ä Õ$ŸAÑ©‰¤Y½‘D…*$„‘!ñM¤ ‰ø«ªÞ²D‹ýû«/-wžÓ«}ÖµšPŸìêã{üÖëwÁù«GÀf–1ôxÁl±RäˆÆbv‘VGN‹ãÚZòGÝc3£Ë÷:¯xxXR àzv©0ØØÈ§RV¹ÓAã¶±¯eBzÍ6¡Û-—«ÍVµX$-4]O—vw·lV—¢v8HsssÀãKwð©pE»:††ÍÙ®žZR™ŸìƒcÅJ$µœLVJOšwÙ\ 4)ÖàƒÊÄó–ÏŸ?»xôÄ•nõûºf«‡]îX§­§åˆI¯Ö´öxÜj¼¬‹Y뾋…2>Åî°§ºÝŽZ€WÆT°á—1\`™ÀvàÜôĸƚd’#jíæOž<¹»µ aªíŒ†ƒ#V‡¢¤)¡ûñ¼ÀaëZ±·3gÎÜúà ‹ðÒ¥KÊâ"Úµ²T+Wøn;8]–íÕ±¹Å¯ý»ßûÞ·þI2ê}^w~uUÇèD¬Ÿ³™åí8kÜÆÞÎŽÛã„é»ÜŽ;ÞJ&¢ÅüÁî®E(™tѲµå¥ó³óï^~ƒeè§Ÿ| ý½ï|ï=}òœÍb=Ìf:]RÆá{ßÿ~(cŒˆ”D8R/eiY¬— ^—“¤j½‘gÍ6üdƒ³:X»Ùoe!矺.‰°'%dd5”𦠩£tÿcMFíÔž”4Ss÷´æ¢ŸDôáIL¤:>)½b+‡âÑ3°lðIð -vªŠÉÌX¬,Ç÷jÍ‚ÃiDI@W£Ù¾r嚬(‹ÇŽy=¡F_t¸\z³.[¥z•ôçŽÆûDz°0R(šÊ•t‡«c.£ ÛºIà奥ÇênÈá­[·Ò‡;¸Û›7î;¹ÆÆi {nè8vêÔ©µå{|_j6¹V§g4ÛíwOK•r8êªÔ”J¹ ¹A4]Wú °³}ØëöÓ9©¯†ô´­QRo 客>xÀÍn·§¢‘¸×ã‡ÿEÞj3´;‡Óg0êAÃ]NÏÇÛ ‰DÆ –K%5ˆL,¾1š,}éðÞ½µ­ôî^öÂ¥g­FCàùv§÷g¶Y«µ>\;[!õµ*üÆ0‘LBå@Eha+=Êår°cGδ¹mÒµ€–Ý»Åé"(›J¾ô»_î´´,5ºíïä´=vg<²BXpJ‹ N_;»víÊX"øþ{o<^[zþ…ÿ ‹A•ƒlþÁG!#>ØK÷¸¶Ç鎉Ã~úÃ_ä‹»pŸŸ}áÅÿôçž+WÑèo¾¹ºñ}±\1ÒâOž_Y~¼¾º,Qºz«;iqF‡# /´ ÓMzK Á¬Ö o0 $°TÒÊïI²ÂXíàls¯üªi“ÅbU5¯ Ù+@MhóRCm°N6œaÀÍFÛh þ(èª7k]Ž4j‡vñø›Ë{û[1o pÙns´Žôo€6š¬­nvCÑn‰DË×;{ƒþÀf¶Ì¾}çæÖ.a‡ÓsC“»XJ?|xßlwŽ k¸CŽÄÛõžÿì§ÞúÙ-€S‡k›HUHÌ ðê¬ß,°0 ƒÂ²ŠÙ‚^’6ÅÐâ ÊšÜâ€h®†êË3³ ;ø"Ä@Çll,/oÃæóuƒ®©vaÔRÃ1 <€yÒ «ß³ÙÌ™ì>hn½Q…݃hbvc±Ðîàà˜ ÈqÙm\—ô|W¨»¬´˜—ž¢¤»=)¯¢£i¬U²¼ó„Ñê ,~ *W+x±Õfä`Ñb¡â-,«jÇfµ&F<;;2m_<‘Zz¼´ÙY˜é*’Ýlœ˜®²p÷p.›«+‰£§ð¼ï¼ó.…‘ðÃ…úýN=C…ÞùÙÉn¯þÒ§76÷w¶r:}ßïw%â< ÒÕoo¥ÁÏü¾\`—ï}ùË_¶»Ü]‘TNøõßúÍ7Þ|û­ÞýË¿üËW^yEsËÁ`èË_ýÝ7ß|³3è2”ÎÁ“r6}ƒQ¦­²dì‘o ÃU8<¿ì10“¤ƒåÆ ŸÈ@úÒzJ¦’Π³{–]$9ìBâ™ V«ÉQÊ4ô¢¥¦ôÆ‚a§ÏÝmWý6ç…™ÑA¯ïuºŠ GKýtæ Õ¢ à±V—Ýžh4%Z·w˜Ñ&$‰‡ýûÛ«AŸ#¤Ö©5•L£\m=ó̳ºëk;¥ü¡ËjwZÜ…tÍbrI]fãñÚ§>õ¬ÉÕ“%Ñf‰ó¹\‡»û³s36ƒkþØp­ž98Ü6› ¤2ÌP QÌFó@WßÛ?pºBãS•0¯yÞ:yæh³âõ¸=&ÅbÑk\ݬÓ9<Ž“ ³¯l¿aµØáÉX­VrûYƒ€r'nݺ0ï½Ë¯w45Ìš «lmßu¹B‡Ï=;—Ù£×¹ FÓìܼN­V22š‚r8œŠÒ…L9Ì+Õ†ÝæuØ]åR#ñþýßýççž{nkåÞ‹/¾¸¹¹ èM¥RXi´‰ç¡G)磇›/½ôùn=ð›ôôt|øñÚª#`+Wµ^ÿÙ_ÿ­£§N´{üëßýA§ÓK2)‡[™òxíŒ^qZj½ÛáøA'ˆ?û”Ðê˜<¦[ùG»ß·9\_ýí_ëíËF–ÇýÙ¿ýÂíñõÛEŸË‰÷þ?ÿ¿øÔêÒUh¸‰  ù··v«•–±ïïeVWWÿðÿÃ~üŠ¾Ð¢{û­_ð2=5·°³µ}ôÄi§Ý-±Ô­û:܎ݶ\&óüHê'ßú'ÎÀS@¨’ƒã¾¨eØQ´^àɱ Uƒ½±:õ&ð_í0CBõôjh)9‡"1x¤¤½‰±©›£´ÚF±K+Ü™ÐïXŒl¯I’D®'wz¼UV:½n•¦r¹Þ?3CrŽ÷öv SS{ÛÛín$Ä/GGGIsG³™Æll»Ü6§Ãíò¸Ÿ{~N’u¥R{rjtùñ•P0B‚>‹e¯—•T(©PȈ¥NµÒˆÇ†Õ€7>?ŸÏ@ËÉêõòèÈX½QY_#³%q Ç ¬µÕ†òjT«•^¿Kª25»{û¹BÑÜëòÁ`j&5­ôëË¿ÚÖçó¬¬>2)‡ÝÞlÖg§gwsZ÷Xð`}}¶K*++Àu‡Ã“Z__óûµz ,ÖÊ;ñ°à¾€|¤Ù ðÁp`äðð×!;:U7ÀÂ`1ƒù}xÿ^·/è ,~dy#žÄWk =11Öj×r¹Âaƒk6[Ûûû-ž?qáÂïýÞïanÁÿ¸K—þþïÿÖbT޾~ýºÂX™:ÆRî6ÈY.ÆZ-o¶»±Õiµ3éÃÙÙÄ…³ç´ùééiµª¢î`nukë›6§°‡ûœMÂ6w×{])14¼µ¹úÌÉsçOܾsƒ%ùèÙ¯üîïž:wéæí •úûWo\¹y2Cç÷xo\¹ „†½þÁ‰™¤/IÏ.’L/€ÞðŠ<`iÒwK%šÁ·jÓ$ÒùCOòò¤Ö²Ž°P?¤¹9Ej:ñ¢ÃJ"É$Áˆ¢¤ DQêÒz>äôH°~Éöº=ÊHÊ51Þ2ò{HI5¨V§P¬NÙr:m˜Hx%€ 3? 'Hç€êÖ0ú®|P(Ö`p¢ ›Ÿ%ͦl5·Û ߺ¤‡;ØÏŸ93š>Ȁݓ†l”P*7\.O§Ó5u&£ë}]E€¯ÏåZv›Û`èZI´KÖjqæry8ín·…ËÚ¦G›I^«©/rÛÛpîX$¹\f(Ñ)t“Tí!m3ÇÇñ'µ@M¸Ù$vvvvÚ­.t[.[t»¼×o\µÙ- ÎXÕÐæ° ¼kRK¢×Ní²EÅ ÞêÍÞ‘#G$I³ŽDB›;Û@ÈaðN(ÁÔîÂÛÓSÉz­#(BÜF»Sgô¬Õåzðø±Ëë{òÜ…‰é™­Ý÷®~yù _(äö7Vï'bquàL$r¸ƒÁ>·,-ƒDñ\7 õZ¿×‹ûéqÝååeŒÌôÔT‡¬ãÚüü<Œ»Ÿ}¡ˆÞdèXðšKO<Õª•;ðîŒÃh–7·÷LË¿½ú¯®yæì±ÉÙ±‹‘çÎ]|:MÄ’µ@$Þ“t[Û»{‡ãûêÊŠ‘aÃÁ×ëî$ ¡ÇC 3¤í±÷ {ëµ;=+ÇèÍ:Y5%dNmÆ@íÁÎ$Y-ŸKƒ·êÕDGN­X m”L°'°%ï*dGy Ó‹f ãµXj|Íd2ê,Ö&EaÅ[l6¾&¬.µH§$¡öyÒÅY$±j< P‡!v*•ŠS7 ½«U;µzÉî¶ÂîµõÕlî@¡°üh@Ý@Ö5Ꙅ2=¾K¢·˜^ç©û2ËÏç‡ ²îTAˆEQW;rd~ggß ÖQ(»ÝæB¾àœ ÀIQ>«Yh `Ø™\Öí²ðB$òJˆtâ³Y$©/‰|¯Ûš.™÷ùÝûû»>·Ýì!¬kogwkqq±ÝnVb.#¡QÜd¹R<~ü¨šª-•JE¹Õʬ¤Y²zÂä–JêòL–zƒ„ó_á^ªµmƒÕ “"[ ŠÜ“ú瞸誵A 6›£V#›$‡™¸ÚJµ„µ×l7d…ú_¿þ§Î¯5[«››´BÛ-¤â^úüŸÜ|ome•’õZíÝw.?ýìçº2©o=è‹«kÊ4A\»ÕFк×ü(÷áéÓ§áß·7·\.÷䨸Dj,hÕÙ]ž™Å“…Z}skköÈ‘þÖß[`% ÜUªTGGV‡ùÄé…'^½öÞoýÎ×ðÑÍîÅ{ŸùÔS§÷õ×ßœ¸0‡Ë¾ô‹»Û;ï¾óŽÓãM¥676H¶²Öà‚5Ér»Ù2²&›ÕÍ’ÀB“Zô‰Ä€Jpñ4È'óÒ€I=F¹Ë÷9k÷ÚÚÙ’y@ctL¬¬•ÑA%àÝø½˜ ¡°֨ׄÄK‡ïÁo粇µŠ`c20™LÖl6ÓÌ`}} Ó=×ê{moo› ÄéCü.¾ýÑ>³Å¡í*ìïïøµšT4ˆæú& Ä„­c¹Š§ÓAèl­6’0a:í6Ž6± ©ÿeKYIx5E[-Ž6ǃSö„~­Ñ ‡b­f/ñ©ùÁf­(>BËÀž›™h¶ê|·573‰Ë²9ÖÞþz­VÁçâõ@Óƒƒ}Z§­J5à_+ï·€¡‚ªÇDÒX­b×SCÓµf|ƒçÚÙ;¤u,ÖÿÁA¾Zm‚aÒ\¯Ñøâ¿¨5´€l¿{÷.¾‡aÄ\A­Î7ô''dz™üÎÎÞæêãÏ|î³O~êS[[»¾`ðØâÑ@ tp˜½·¾öÒç>m`X·Ë535-òÂöÆÎ3ŸR€—ñî7žã»=LŸxC²Ð:-îùÑc‹Í.‹R¥Tþíßü­°ËÊuÜ^Ùúíù—åõ ÁøÄ3OÖËòòò£ÔXÒô.æhZù/û7þç^k€ztI‰Á ›Iû½¾z¹`bôçΜˆ¾ÿî{ÀÜ€Ál•<3#iuít$Ã7Ê·9+k7Hï2M°‹ý>I¬åÅH> <2õXnÐð‰D!uYÝP&ÕVÈÎh¯Ûûɨ€T­%Z¥#Y½iàž!Q9˜Èr±H©½ÅdòºÝC£qm†HÍKÐ2³Y«u1™š,–òþé ³¹±£ž³Ùº¿RªwÐÁXHm;-k‡RF³¾ÀË¢ƒaZ&8Ö?üoî0#¨É¬ŽéÙSÇìfcnÏÑã' i§gƼNÛîzáñŠd01Ní·f‹-,œzíµËÉdRLîÛì6©×^¾ww~"þpöÓg~øÃ‚=zS_­×À:1Ť4.œ9€rŒÕ3 …5øF 6e-מ?>7RÔšäP¥¯UyVwXDI’ ,%ɨ¿fên¿"öé>-VÒ°I’`î¢tyJÅâÔôÖÎn.°Æâ`O&›ÎWr02L_@•J¥FSlµÒ¦¹@ÜÉ à‘ÊÊêc­0 >(>Z(”2•ØÙÞïrýÝÝÝÙ¹±l6Óië0¯á¸vîp\\ ‘°u{{8'ð}(±Oq±ÙÈà›D>‘Ë–I>`”(! 1V/L°F¶Dm¾{xtêµXnšL¯7°½³×ª×ÜçòÃG ±päÎÍ[@Ø“ÕjÇÚŒ )áæ{Ü‘# ~(Å÷®\MgsO=ýL½ÚÆ\[Œ¡×w:kWjÔ¬“"•l£˜I0Œ©PÔŽ=œí‘ÅÅÖöZ³ÞjÖC±ÆðààÀëõ¿ñö[˜h³Ë(ÝÏU@«].çÞîÆ£z¥šmXm&†”Jy›Íú7ý_.žùÅÏ_Çý¤–­Ë䶗w ¼ œrëÆ üÕévaXV«ÞlzÓ¸Œ‚,ÉzEg4MPj 3“º5’Ž šKj°‘ãx©¯ö­¥Hï¾D ˜°, J¥Ï°j;Ú^Í|b€kv£¤AöE¬Bps€¶Ïí¡„Zìlm$j8‘$E`2õ`l[,¤3(—ÈUNÊvö:ÐL¬Á|öìÙFƒï r—Cao:½—Žu9‰k÷áTÕ£Žmf X»£{»¹±Ô”,Á‚뤺l· …B‘±± HrPn¸ìÏ =Hocì …æ£)ÃôÜü~ô£j¥öÿþ÷ÿ?ûˉ©Ésç.°z=Xl¥Xò{,·nÜ4˜Œgxpƒž Íäsx„Äp’œ#Ò4p„zŸonváîý{Fkld´¬ö- úü™ï~ÿ‡ÿñOþdswg{kÓñï~÷ùŸ¿ñG¯’zÁ\>süä‰Ùù…ÍÝÑÔŒØóîlozRÉ¡÷ßßë°8-&ð+k(òƒï¿Tã¹®]»vá˜_6Ÿ ùg»Ý( ô@40ŠÞĘô"Ó*µR£ÀWˆœRA"(ŠïÁðÕnÕ– ÐFˆ†>'ª7ŒBGJ Ͷ¸N®ZÅúî6Á«I¨q5Ð+J1ušýjƒƒ3²9©B£h¤Íw?zh±˜ææc¥jÂ"™ €ŠUF¶ÖRöÒ»¥æÞ Vª¹^‡€ª†C‘ý­"£·ŠB+ìÚ«Š-a÷Í{{ØI §ULfqsãöâ“_¨oe]r·Ôܳ¤ '¨£ØˆÛû˜_ò]]¿ÇõÊë‹ù%ÛCGPš•zwx8„Óû¥ KgÒ1O^<’wòØÉû÷–$Á¨·¹Ç‡‡1é\êÖ‘É„bÁÁjñ†Æ'Ž®foÖºÛét)[ŸHMž8²øpé#0ŠJ³‰Áêœ~Oøé'ŸzôðþÔÔdÀÞn¦TØ;ØßózÝ óS˜!†‘nÝýÐhµ@á‚-ø=^—ÍÛå²ÐúG›ëþHh{——úáphkuýø‘ÅãÏœ)¶ WÞ|ëÔâ¢Ðî^ÿèÄÂ…÷¯\å¥t4lÕÓ—>ûé# ÇΟ?Ü^ûµŸÿÇþëÔø°ÁHûb‘Z¥Þks©˜Ão`6*Ùéñ‘­mF?Ø?ØÒé±HÂV›aóÁ²C?7 Èzœl¯kÖëz¶Òɶ¸ú¾÷qçRA,l§É´üà±Ìå†ã‰©‘ùÅÉ'îÞ[^º³;6> †Úê—%ƒ>ר¶·ûŽhèÍ›7–vw°&N%Ž¿ü¿ŒFMúzjr ýÖÎÊñÉ#$‹s S³EbŸ#ýmD©/ù6Ke ŠŽ°x ¸ÁÊofYíI+ñ¬Õ")—¬¬¥ŽhÁùZØiõdq‰`.’@rÃÕ|=C¹lÐʤ áþ¾ 6VlxcÑJ¹6=õ€7è÷bf€I—.]Â_×mÁKz=A·+TkdëJ¯Óîñ¼,˜H£÷bà:¼$›—>¼;;>é¸ ÔþËl¶uš½¥õ•~/æö0.]fôæõöýû÷q‡ñ¡¨Óáó#«±Cð+õR¯'@9œ6Û§F# *µC+iJÛ‘±hœçIå­{÷î¹Îdløáý5àì0ªÉFGGñép]ŽW=Ló0]¬”«ÃÉ9%g‡ËÙàÚ£c)¸B\3âzþ‡K«¥"Ì›˜$EùêþÃåÈèÉh7›ÕJÅawUÅòµëÀ˜^|é3 Måsi(KÒîÌjºý|¦pÒ‘+ï¿¿°¸XWwvqe0 ©e æ£Ç榦á¸qç‡éýí³ÕV.tÌ&k>ŸoÔ[,c¼sû#·ÛÓë !O¤ß—?¸öÁôÌ|"™üÁ¿~û½[¯Í/̘Ì—ß <»÷héÿÓŸA!}éK_zå•WF“¡Ùù¹B©¼º¶±s¶ØGO_œ?òw.3’*hÔ‚C=¾×lwj½nG±µª¤` Ù•ûj]1-éý¸P#þ%AM°§7iÃ/¬Ié)Ú` åÕ8@J¯3êu†z»F{-æÁ@¦%ÄõÀkYr¼^,ä(>6”À¬Têµû³z€|fos`µ0E?”4õ» ¤¬ÌÙêp툴ž±Åƒîr6¿¹þ89žàuÔþááövõÙçŸÛM06uɤ,JáÐétÀ‡†’4­lmí`bÀ¤“‰q±_$åvÝðð¨^¯°}³Y+†-IІ=ÕëU¼‹ãÚ.§ŸëÔ áâÅìq»IA ÞIÇõž —ï^"xX<î?—ÏBÈ' e@Â`‘´Ž"Y4‰ËÑé)@‹×ä!¥¼9_.§ÊýØÜl¦˜wxÜ/¼ôâ_üÅ_ %“!Ÿß¤Ž^2 ôßü¯ßØ;8˜ŸÌŠ‘DäÑÚÒÉãgÁïA|1>Ÿw0½>ç±ãsƒa×a¿ÿàÎãG+^k÷€köΞ;˜›Toïîîìªgff“õbyeéÑÀÈø£á(ÐÎíÂRñضm&}´µà†µÙì‹‹Gñ˜ÍbIÏö;ö̧ŸéÒ­z«21Ÿ’û¶G+Ë?ÿùÏ¿ñoàñí.ç×®>ÿÂç~öÓïwI9¾žž5&“# ­+JPçðgDZ‰D0o@Ò8Õb$’ȰV+F³B9lR`\d“HÝ–ÓÂÆ´X'­Žó@µ¶5z+‘¶:53¤Gé¿—øS¾ÛW×ëHå3I¤ŒdSÇî´Ûz\§ ±gi6ã"½G3zYê’rtqyu…ëõpåµå•­Må°Vi5bc#Ûéýé…9 5––Ú—b1NŽŽ‡ôû•`0ìry çJWIýÎWOÖ;5®Ïý»ßÿZ¡ZÖ³úrº‰ÇÎ_ºHúÙ/~þòË/»¼ž{õGOŸ†às™m¤˜¡ÙÒlu®\½ EûÜçž`„>é,HÑ Û¤z ê¶jP­ž¶] „#%Ô hmcBm‡,iéZ³dÒë×bº= +è9m5=£I„VU¿„‰œ ²€¹¯õh%íBö#ûµr#:Mvû½v«"Qàg‘Drô­×_M$#;»%‡ƒ4“HäH¼köûì6 C³.C‘FB¢b¶ƒHëáL›\+r¤÷KÑ€?¡$Ž«U[}$ä“Ü·dΨ‰•X,T¼>×P<‰U;Êå2|HHj)noo¬c±ˆËíõZRŒà#`ÕÝ^+ñ %r¦×ñyƒ`<­^Çí6‘vë²"+ƒÃÃ’E=L"õl]., ,þF“ì4™å„²¶·¯Uh…ëµíUØëÝ8ì>FoÞÝÝu:ÝÝT8útæð×ó7ÜvÇ+WsÅÂwòßœv˯½üÂO~ôJ±\}cmv“;pûÕ·óÝøx*§RcSS3·nÝÁè]ùàÚ±Å#à|–à] ìë+ë¤Èmµúå/}©CBrËS3Óë››Û›[gO¾ñÚ;¬Ë–˜Oçs›µÝl¹lö°Ûð‡–¯’æšf³Õb‡ÓO OLÌÈJß ìçªËk)ýäa¾ Pôhd ¢ð©§žzðàÁéóç~öê/€¦ž€¿'JÅj ÐÜl¶xq›ÝÏÌÌõe“£tPM )† ? U-+:…¨N\KC&)´$˜‚« UýÒRš>qýÚ ŠÕagŒ†.­c‚ÁH„‹8Ýd?\âºð® …„J‘qÀWk5¡Ë>¦·¤¦$Œu25Ü—yœx è&ä²& Ü¢z’P©ùýÆFzw0:RvÆ ÅÀ ,^GCÁøƒ¿ýíïØL«Õq9m¡`³ýèÑÒ”Žd.@]å‹äœ–V+œ‘.a2=<:bu:Šd2™X ¤óÜ3Vˆ<‘Öö¤O©©—x €ÏnzÿÃûy#îp,QªvZœ‹sBï¹Ï=ux\¢"?}kÏl·vzÝèP‚Ô[ítÉùq·k`Œë«k䈛ÖI˜!Rr †E1² *‘K­³½–*Ç »UmT­Ú¥×úÏ~¢âq[^‡ êÊætSÓ¾h HeT²·l±Öj…¾ØrÚM‡•ìrÊ´ÉdfŒt¯àÎl*$kír¸NÇf4Û\Ö°ß—)f®Õ­Åf<‘âÉLÒ 3˜Ÿ?廲9ì:ØÏ¹½J›ëÙ/è+%Îl×ùÃ6šíË å÷y­6ÃÐ ø[ÕzØIdÌfçøøÔõëå^W„Çø×ªIåv t³i±Jå1¼G$²˜ùéEm4šÁªëõ–^g©W»³Ó¾|mW­£f:=97#Hâduzýñ ¬þþÄFgö‰'¢Ñ¸¦’»]hvI}íÚéÑ ãúúF°pG‚”D;!i`bŒ"È+ܿɓ'ñÔ#GŽàAôÆéqç39x¶¾ZëÂ…Å­×þõu†n|\Óä‹"µëÁ; :£"êYQÑÁbY½q@ æK€’Â"H4q×´¬J}©G‚úH6£Ú»Uo’î6 z*ˆ}îbiW$QÏ£zίó)•"H`^ª±  š~¶^oóJ[¦oÛL ²øðîcI \6½Ãì´ˆT¯Þ„¿ÿÙkW<3V¤ÍêX<Èe =¾Àõ\‰DìÖ%¾'CyX¬ÆA“·Ù ó)k±ì¥ÛYÅádjSžˆ6äÝLúá gŠFƒ>s6û×®o­Õ㣊اìV_jøÔíÛ7íS4Âlmß·Ù$¼\vÃá¼~ýêøød£Y=zl–ìˬm 'G±˜ïÞ½  ×qýæ»/^åoÕ»N§±[¯åvVà»{<é9pãæM—Û†‰/ª]Žî´Y¾ß›NÍunzzCµ³ƒêä²'Ææz×A¹³»ÛP(êó_ü‡—dº[©ä.|¥Õß7LÌœñDæïl=vR†½B6‰&‡ÞxóU§ÝñWü/?zç­·[½þå·ßùµ—_¶Y¬k«wI¯:]çÔñ™h4:??šûÓŸþT ¿~fäç?UP‹s³îøp yøpeûávj4º²úèÒ…ç¼æðÓG3{¶P»(rƒ›×@.?¼uk/}_«ÀC‹ûÕü½ítz=}ø‡ú§N‡ÏF3/gÓ™àx~Áåp®/¯»]þ°;¾tsÙéôeú;ß)—K£±$(ÍA6Wå:—963ÎhBÇ¢~i‘%¤_(ÏײoŸ‚ªÞ\mØøqÑFúWµêNqÖš×SÔ'¡Hk{õ —%e Á¿ãO·/ˆû{‡,‘^ŒÑ…d.“2ÁV¬ìÐp"Áw{;[»XÙ>Ÿgyuó©ùí½}üµ^o¬®nœ;w6_)Ä?^ÁmX­NŒõ{ï¿ãó;ÊØÏíçKeÞaw{ÜŽ»·³G´ÍéxE4éuàÇ$ZOQìV§Í*G£&¿_ÀÛlVHA &×<îàÞ>iº E &ô¸O($¸àfÓÑ#•tI9;’V@¾ÂøÍÐP ß‘ðþž Õ®¨ys¾û÷IQ\Œ'Œxksïúµ;psCCIµŽP„gÇŠÅ÷@ xÌ"õIökµZG"¥õÕÀ†€?Z«rù\ùD,52ª¦wý>çôTªÕéLF\D®ù×~é²Ú'Scs|"  —%5;T"ŒÕBvÀ£Õ]Æõ—¬`ÄêæÍ›•Zã™g>Õh•·w7¦¦¾^­4W×–Á:|^Ò“”ºh7séô7¿ùMжəél6[ªV&§§&ÇÆÿ÷¯ýö‘“'ÿÏ¿ü«Ñ¹ù+k­väêÄñã\³$÷„ÄP²Ó!As&“ervÔß>´²Æ°?ˆƒè nnøDW‘czŠ6èI!¯Ç7£©.Ëä|Õ@zdqí¥È&–„JDe¯×‡‚ÎŽL˜NW¶ dJÛ·‚v»‡ —a§F’:IršL[k«wznj/{Øè¶æ“[¤­Ñhíì€D@ÙSÚ( ¤ëx(ì`õè‡ÓZ©•óÕÆäØÀç't¹Ü¾Ð·AȇÑ`Xl·º˜§v‹$˜ ‚œÏÕÔŽš€(ž”¤9·8('°®ÏA>cèÀg€‘4|ƒoݺ•HÄaRXä 6›ò®X,Œ¤&Y¥2ätYî?ø}`-°R×`¨‘H{' Hëf4ò^¯ÛíôìífAÁA½ i5R'ÌvîÌëëéW¾ÿ“Z½sñ‰'Œ, Áø²oÜÞúÏßø«hj¸Ë÷îß¿¿³³31’ºvå*¤ç°ZÅntx¤Ój•‹¥n»;ÆiEr`£Z¯ -ÿ„ÕY)¥ÓåH»‡Õ­5ƒÕˆeI¬v'k°_½r+ŽWU…ó5½žoA5Fºïp9¡€÷ö÷_ùÞ÷A7íå_'ã©1ð;‡Ùpùl@4Æ´–+ ãx@Öl*–+‘L·Øæ|ßçñ°Œ¡\«›mV¼‰ÛÙ1p-÷ªevcÄ5¼ÔPPM§|RT$S›5Z úOÊåi¹uׄ(ZÐ(£Ó“抓 ú¹]ZàZ5—V+š€WÕò-`èrq\«Ý©ÃRmvÊbµ*¢â)›-VJëN;ãpÚ,ä<7m3˜l¬q,‘XÙÚ‚‚¦Y=¦íø©ãíFË:}ölnm ëÔƒ±^ß &ʵU#«¤÷×ã1ŸËãÜ=Ø”%íz–Wh=éLA›[Í"­Ôâlˆ¢ú;;ë,cñz.§©Qëru>mŽÕtÂÁÌì”ÑĨ®¦‹‡ŠÅ†t4”2HµQ°x=ŒÇjÄikk°Ê²Î‰‰‰r%vçÎ8>-á©Ùì,!†´ 5Wkêj¾K*oôzmPj©ÍÇâ$.. ‹’Þë U*å7~ùf©T {dЬ퉩I<þ€R0ÍÄ72,l±R,åªÅ€Ïpp …'[RÑ\—J¥¢n«qZ ’.&…h½Óëh)6ŽÄ"sÇg³¹’×ë GCsoïÀÀšrù"ЭÞj=qüîý{kkk@VøJµúü³ÏM¬Åa¿òþÕÈÈp(>¿çu{þí§?òB.,ÝØÛQÝ~.c†1º]n“U/ ,v’K„óx½C¥lþK/¾ÀhH‹¼$ªE-8H"1 ¬#§Y¡ 6 Ä_ýnÇÇ€ú«¯Ë:Ë2«ÓS¤æ'-òlÔj2Ç#Ñe5™Rd™êÔ¼dü®Œh–1b¸à{uz­‡‰ÜjöpðŸÇæ÷¹ˆQÓ2ŒKp(»vûf8g,–û/;ÎØ¥ôRw§Ó¡ž}.22kµkZ&ËúÌ6;ßåÍFÝöÎz2™¨5ÚÅFÉ¢¢{B_£ˆGS™t¹Þ(gÒdOÍh° &¸BZùÔ¥‹èÿ¡7~ÔÎßû”òI<­ò ¾Èɉ\f>ᯚýV7K‰ÓW/§!±×CvmduJO+,<.¥hÕ ng_„6ºWèt¸Y¦¨Ç÷¤,ZÌÈ[ÜðöÖ¦×m'E2"ÑF«CéI­z„9—ípœÑ`„Z*e_[_9wîÔÍ›·B¡p:OŒx‘7°”ÓÆ:­FcÈä*Ápª’©šÌº©™øÊò&r.[©ŽÆB{5¸éHxØé‚Š7–Šec3ù"u“ëu.ðr,-=°ÚL¬Ò*\ fijuÀùº½Z£Q3[ŒXÑ•ŠV½,KdY‚HPŸ|êÒââb!ÿ¦G ±d[t‘\Åðƒþj±'S­×ñY¼Ð®ÕKÉÄ(  ;|bˆC`"§©A)—ŸO §Fß¿qÍæ°[ì6\y(gv‰Ÿ8zô(ˆ“}s…‹Ÿ›ÄŸðxX3°!BÍív9?ÓS‹)56ª@#0ƽt¼pnâô6 ¯Ù>tºmþ €úæL~oe}Íër'C!ÌòÂÜüôØt:ft;±Ç¢+í§ÓF–½ÿðÁ…óç£C‰F³ »œ›™míIüîú:´¦Îf­·[:’yËâÁ‹åý Ûq«ŒVñ3Õjh©eqØOj;þªÖ8qñZܱVAXÛü¸®:gxU{fß$q™D°KZ1 ¥"Ç®â@!I)4­Ö.VÊ@§˜0êIE~Þz½R=.9ôìdÒÁs.ì§?|„+·ZB2åõæ¡DÌç·¾óî-“Ù`2“Nà0^äJŸˆwÚÕx,Ä©u6àiÔ3ž€.r]¿^©RìÃÜû@Š‚HëN‡«ÝiSx—/‘ˆfŠEA0D"¤4EË“dL•µ×UOM:8b¹Âžòù¢zžL2æ0ùB¤N ßc¹>zô¨Ù¬v¸˜"ÙºÏå@|ÛížÝæ°XÍ{{[n#‘Œ6›$+ «…¥’oÍs:½>9_]Ý{öS/îíç!ØáRI=c–áš­r¡pN?7u|þÿýÖ?¾öÚk`rC±80¼×ázv:†“Å…Tr:{Û;Zga­¢>nO«e‚ÇÁ³DýAx7§×;5;%Ñ:VÚáBQ—2 QÞÀu<¢ÛCÞ8œ5­>ÏØÖÖc4f2­zcq~À×3׫‡mÔ1HÄ’±èÖêú½‡÷…&)¸49956:|ùÊ;À×f«qñä©l­Øzfk0²t­b­]¨¤B1›Çͨ•sÌšÞüäÀC«Ë¬%iâ䋪_½vC{ö{-§ž˜¯<жK6»Uí¯LÀ³/’>O„ׂ{P&P9=IÑP£ŠJ¡ Õíö׫ÝV r’™„œJ’ІaÌZËEîý`-¸Þ~ïh8 ¤ûÒ§Ÿ:u÷êFì¢Ôš™ „BAQ¬<¿ß¿u¸›ˆøf'‡®¿c~nÂ`¶êtl©Ü™ú»ÅRvo0rè)¯(l —ÎþÞGwo”*¥hÌ¥ jc³›‡GâK++€(߃ôžÝnó‘|h±NŸ9~óú-Ý€ìKx\^“Á¼tïñOßzõ™g?}òô)Ð’Vµ¾´´ôòó/ô»½ÿ§ÿ1“>üÁ~ åº$“ÉG–ù°K\J\£vxÜ6âÎúò¥'žb @fØÓ/šìžl©p˜gOöI£ÒÊkw'}þìß“û2 êq]Pà:åþÞÞðP.{4‡X·¹™B:97³¿µÕç¤f§½½»Fô¯?ùég?ó,ikeÅ‘Œ˜ÚîrY­6¹-4ªµf±´¹î=|ÄXíî/4¹ŠBS]AliÊÌ0nF­_%É:Jg7Yœ›VÒ·¨ïÓ:†HpØPjÒv`n‹y~ ê„1 ¿nµa  ‹w®ÿÛFî0‰R©Ûé0FS»Õp9œõ>¥7Ø •rµÒÀp:#¸ÔÇËö¸ ¯§“ñ£ÓÃË+½l¾j¶98Þ²ºÛ˜ ödëI‘`(_ÜöÙÑkwÚrƒ øãï^¾Ûë2}±m±ò^“ÑÂ’È|ƬotùNa×m5e3» wéÒ¥7ßøhhÈ'ë…zk‹á¥§_ê2{Õþ–Ñ¥»zãJrhh$>jeÌ[Ë+:;Û’„€ÝµµsûÂÙSCQÍHòû´âx|o%J™n³O‹¬Ëâ“à'•Ä o¿þúüüB,'!)šífjX7·àÇüŒn¼ZùKVjM›ÓàöSÕJzEO›·Öó,륕þæÆ"1&³»V/Ÿ8>sùò{R¯ûèþ­ôöã¯þo¿ÿàÞ}½Ñ°µ·;žÉJýn.52ÚïT‡c§ç¦¦îÜþè­·Þù=5¾þ7ýÇ+ù#óq‹Å÷íï~¢áÈyÓÌù³9¡S¢ŠÆ-SæV½ërÐízÖí³íf¯zåÖÍgž}N/ôõãÍ·ßI§mv{plâñêšž¢!3r‡Ξë•ÈFw¡w€<2=o2è·¶×Ç&'-~÷©sg³­j¡^a9>½xŠj"5Œ'9Ít :£tùÚ[©™1«¢™7²e·ß/Ô»{k{§Ÿíö$JoaŽÃƒ CZkJV®¢$êØÿ¿£½¶©ôIÀ(~i³jÜ áÎ>´,Z¡XöäÀi]'¡~µE˃©Ã¸}IÔªAé}¿OÁ#ãUj…#~woÛëñÇ㑦ÜÒñÔš¤5V¥ÞaÖãq5:mÐ?ºÉ`j³b¾Tv:õÓssþ)CG)@hS—#Ý>=Þ ÓeíµõX µ:馪"ô±ùVCÉåŠ&“´p „†¿ÞÛKãâ²Ð )"IíõIÜ@iÒÉ~okk$™Ñ¬Õ³ãÓŸÛ=Üͯ/LJÂðàþ€Çb¶Ý½w;C}g÷I¤=C„:œµV±’ @Õj®È} ·Ú\¢Ly<¾†Ú$\‘MÅB…ëv‚!·ÑïZ7³nYî“’½Þ»¹±‡·_¼x±Ójî€\’š©]R¯!ˇiÖÀÂ`ô:Š$+R–ôçNBí¿ôÒK÷—î]}ÿƒá±áÏ<÷\³³ÏÕÙí{˜eèjL&îÖd1s"ƒ·?xð`zfîÕÿÌár½øâ‹w>¼+êðéx:°üKƒ^çõ„åaÊh°âyÕPÃA Á5q30›½½=¯×‹A†£†ÃÁ ƒ¥`@êõúèè¨í€s­`4”¥Õé‚xrX-©%Xщ‹ÍÊh¡ `æ€ì9h:-XDÛ¤Ð*¸~Ü6ÄèQ*iÓ¬v #cX¢Ïu2M‘ó(æGÓ5×9zôxUè,ˆ'…ðf³QmT0‚+àælV;$V­ÖÔé)—ËQËVdRSšâHÊžÜã)ºÍæ6 p -µ`e +tÍ^ŸÇ Qf®]PQ‘yH>«Õ<22 -|ïön¤ïñ¡Vˆ^Ç*Tßáb‡üCÆj‡é,Méû‚42œr9=B»c tT_6Y,V» šÉäì&R‰²Þâ©'wv7³û6§KÒÑÅRFÏ”~£Ûãµmm·š­ÊÈèb±˜âÐ×ÄœÙlfZ'ÉR“ÔàwÚ¢DÛ>ƒQ$-lt #C6ð€&2,`{¼Él²Ù,­79•Â|ß¿ ;;; ïl·õݼµ»½ãq¹b¡H«ÑtÙÉ®6Çs¡Ö[3•JC§¥wIŽ×Ý»÷NŸý,9z00ÏŸõúœ×o^ƒ¾)UË£©‰ZšïFµÞ 0zÝaޤp k›ÃÌùú׿ŽZzðˆ”ÚÌWäžH¶>ôFY¡÷3Y«j[˜Mm®”ëz5|* . ~Ž'ð×~—÷€ß·ñÔ"¾ç;]y ˜ F²G ÁŸà<Ž`Hú6§³ÕíšYƒAG?¼w·V)y=î ×G ’ŒeGX£ªÆ!ûõVCMÍ@?‰rÒbð,z‹ºõq'1…tK&uÊ,fÓ@&½6ô$ JÕ•`î©ñiÏÝ¥×$™}:`‹eÐâÚFh7J)—*¹ˆ²XHs¦lîÀÂÀIj߀f=k±IZº\g pña¯¢ï§ F“Èk™¥Gkv}ôð f00þÙa hV-UÜÈçŠán§+ÚÞÙ0Xi‹u{-n_ ëŸØë ­V§ÝæÆÇ@z¨™1HjIRø[Nà;}þÒÑÓÒ@^ÛXÜéC]§7¸TYz°ù€=¾U«Ó‰d>±Ã%@¬+•z±P¦h) Œt­^ƒù„"Q;pÎÝiqÁwU«õÉÔT>W¢høE[Í ÀoìµÉ àjssÝíö‚G.?ÞV­oízÝîp0 QÌçÉ47êøÑápVÓ9ŒÛ¥KO‚ŒŠ½.ü’Àu>x÷2`øÄ©ã@t(ИDbÊRgTŸۨ՛0žpÔàŸº| ºvãz8[ߨª×›¿ý;_ú/õ·ôGô¹Ï@võÖ‡·?ú„ÄXª˜.Ök©Ëv÷º‚ËC õŒó‡Ÿ“©1àºÅ`\ÙÚ^XX€§âšMP±ß‡¹1$Љ\ ‡BAN&@½RýÕ_ˆîp|˜ã[P¦Ä­káôP êšÑ+j9R=)¤÷q;µ£Í'ÍÃÕæK:J`¸%4 €¹ÂZ”š†™Néñƒâñ„¼¾àz¹l2q:†%=Ÿh¥'ˆÂõßv»Õb1©óaüFü¤·X·Ã ,ƒ…o*•R­Ö‹“tM§³LëÌÚ‘˜ØìS¬šÁb1Zm ²{¿±±éñ†àÊq#Ä(z¸cšn²öp} (æXÍ  =ë!ô5Û\ß”Êàexb9F³»»ïó|>ïÖÖ&˜ éÑï›-,®V­åySÓ`ZŸßí2@G[m«ú¬"–¥¾^¯ÐºÃèÕ$ >Ÿ«…¤VEËZê&©``6‹}àÓÐØØ˜ÐãµFMÄã)ƒ@4,­‘‘Q,6Û·³½g6[ÛP%ö~ø žâ«_ûÊ­oý\½$×y&˜•¦ª²¼÷ÕUí{ÚŒéñ˜ @X‚$ Š$J'RÚ]ííjï¤×i¥ˆ»ÛÓímÄEH§ÐJ'­DQ†A‚")~f€Á`lÏLO{_ޛ̬ª4•îþ—9h"¶˜¨®ªÎ|ùÞo¾ï½ß€á˜˜šä=¿×3¤,‘xúÂÅ'¯½ÿ&øI÷¨?ä„úœÌo¼†÷úüsϽpã㛿ú«ÿäüù ÷—ÖàvΟ¨úÖ»ïû8t_S=n A˜ÁF£¢`·[³ÙÇケ.?È{C”#µÒµÓ’À[0àdAo•Cd¸Ýíª.b —`ûpyCÕ0_€ë2(‚³Óm¬Ðƒ‡Ë¡ M"ó ÆÀ ™ššÊ'Õt,‘Œ˜ñ ½~WVÕâ’åè¼ã@éaB½´3’Jìä¶ìn:‘ˆx¦á… Oì—6j»;9p¯»;yвe2£wîÜ3J4J¢44Ë«x=~;ˆìl«µ¡"öz•¶ÉL¦R Ÿ]iØ1Ší»H 3¾ººêøã6º ï´;]£š ž;(ÑvÏÑ£Gmml~îÙgÀ¬2jæîÝ_úå×¾’;(\»víø©3à:‘pXÈùù…f¥ Z.\n¸¬÷¯¾ßê4ßzë­ç^û•jå4>͉ÖY÷Í­ÂùÅS_ÿ$;>˜Ó{ï½÷‡øÿ¸½ôÂ…K@1–­~ÿï¿w÷“;ÉxüéK—o^¿yê™cét<ˆ¼ÿî{…Û›ÛÌ váÞæC`{ f0¤ÝÝ]˜g }õz}Ðì'“ÉAý ~l¼†½µµeV¦Y{žò?2,îWï¯Û¼Ø™gF‹%qï òÔ ·>\8sàþÝS§Æƒnk³º'Š;1?µ³½çHzò·}nE­L³^Úgâ j<ÌNWÊ ‘×sEqHî€oŸžNwXÖb¡ÁDÆùþëoœ²¢.‡.›t…v´3\íu×ÛŸDý“vÒÒí4í´kcwkrnN+”†¨Õþôô‘Z­±¾Rû¢ªbÙÛ^KÇ# AS3 °4,£1]”­ ì{{kÿØÑpÊL§ã÷@uXF×™@ T® ì¿©©™m”"rúôÉ{÷î÷úÚ˜™ô}ûùÂØÌô©'Ÿzÿêµ³Ÿ{¾5Þ»þñH&½½öàÂÙsrŸë5Ú- Ùl6øh™ö¸IU ¢ð“Ÿ¾_k*Gæ 0̓†Ý–±°{XÙÛ¬…b±pà#hT,•V Ëý­µãÇ×·ï?~úw¾ùWß}Ëí¡-LxÒ©…x­R?sòT­V{êùgÛÍæäÔèûoýìý^þ<ÀH# »<6™=uzq¨Š¤ ·´†ýV'–J¢®æžœ[^[µÑönqé‰Óç|g§Ö–6/ž½°¹’§ððé³~þ5íV 7O;M:¯áöéå3?¦‰F…ÂŒ#MxÇnGiK¸Ñny8tЍ'¶†Š–a{7íqûâñ¨{³\BnŽÀA4[L ¸üÄD¶×ç†àÀyf$ƒT>1¼9êæa¤¤PˆŸ)úòòMŽ ý5ÓG˜e¹áîÝnsÐçAƒ¼* ?2äÇS8ÀòùÐ|ÀþÀÏÀt”EVE¢Ô‡wÌþǺ†2þ`³ß=yrL*¢ ·»· 3;7Ùíp XÍÓgÔ@ÐÕîvËÉïwævrgΞ¯5[ Øbk5«—}ckçü1 à›@¥¿ð…‘õõu-Àg†¦’™H8¨QÑpXQäöâ¿\‡çYp&±XÌ,·fâoT—i(ÅtܨÛ(‡ÓNÇ£Ñz³9=5ßjr¥‹OÏ‚¿s÷æ@äAiÑ<^7#î̃x’¢«‰6 3øn2z° Š¦Q6dtÁ{âe·9€àªànÑ' >0Êt DUœ„¬jƒær`> ˆ3Xn£>]½Î °Wµ.rABéÓ8…‹áÉ”Kø±Ùú0òíím×!ð¨Ž8AaBdØæØxFlVœcŠTNÄØ@³Â`êµ.p&—Ó è –­Óa4}èpéÙ3äøõë‚Æùgº X­X,Â26kÀ© )MÕã o½]j4Û‘4 `†vÀ n·7r ޶§U%Ì$@s,6i4î$“¨!›¬ðfuAŸÏÿvZ ÚK¡z‹°Pv»ÃŒCvt‰ü­·Ë H¢:½JµøìK»1€%ÑéDEDaF»]v<ñ8\0×/^l1|¹¸pú¤ÝçÙÙX¡hëÄŬ;þ¥—¾¸ôðþÉ“Oþàû¯?\ºz3 ¶œëvÒét¿‡ŽFQ䃕z°¼üõo|Ãéñ6[­;·oÐîˆÓ[¿pù’Ûéj1\­ÅŽO6»û»ûöùy0HÓÓÓÕVãèâ‰û`M%‹gF¬8ÊÜr»¼€=@Û=#Ù@Íç ðò’"{Ý0ÃéäìÊý‡úïq<Ê7T‡+«K©8|ÒJSFëÛ£yügq¢æF¨ù¾Åx󳑦&»2‚ŸT³u(Q@è\@–;]Çê·|j²Q)7ë ìlG3nX-¦Óbët“ÁCÕe†í&c“ª†ÒN( „i*…£Q•ÉÖF£åd$‡Ë·ÞÂçr9H¥JKr_·€T\n²éóÅB¡ÀîÞv¾PÁ [<Vб RE;¬‡ $–Äíq¢èI• øÂ@[öÉSÇ`H Њ ".8h/®S(KÓIZvy1·¨’L†=‹¨|}"¶S8Ûã²i†±±Q ÔÀÓÇÆb£céJµÜ&$Š5©Vw÷ SÓ³°ÅB9@§ÿ læ<Q+aUÇŠô²Ì¨§.¢M[ PlŽøìVb}cËåñ/,ÌËRuraaáêÕIU»~õZ¾T„YýÞ÷¿íÆõ§>÷tyuYôì6˜ÒT*¥qÀ+)âðä¹YŽ}NôÙn³ÛíxÝNsYZ xÕZ½Òi5;”¤s§NE£1+mß=ÈýÚ?ûzµTûÿöß§ÃáR¹¡•~—}°´”H%¹~otb¼ÞmTJ£áß0Ú!ÙÑ!*ª¬“¤DZ©OnÝ,׫ª›´ÎììcˆˆCð"ZV…@ 3sûÞ] •N—µÝj“¦g7›«šäÝ,—g5šÙ?îòm„5™›öÉ)kœ"Œƒ(£¸¸(tUEu"T‚ PÁNCd„aÐãÝÞé™Y®Ó¾ýI‡t•e‰^Ÿm·›¨ÂŒ"Ø®ÓBVi0@»Ð‰®¢`ÐAßj”òs»iBóÙ„ÞÁÁAµJŽOLx—ïn8(UÌ¡¦‹4 C²ôzŠ`aç+VªÕz+ “6×áu 97?@äµ\ª$S1˜·Ûëa#¨f­ªÊR4Bõí^ŠBéÍNUàxÌ¥ˆëòãã£7n-eGÀ]ø<îF 5Ô ú]U¶M&› t>Y­–ÁÀ™Þ }~~Öf ?X~D‘¶Lvœ È7aµË]D-$1RRQvf£j5a”aÛà+CáX¥R´ZƒñxàÖp‚¸‹xj|ye,B,šh  £GËŽNTËàè‡À ­T< ô&>>9 xƒíváRóíoüx¸~ÐÃ0¿Ÿi5ÌFPhÝíØ Þ²ßaº¡ ÿ½·~Z,Wì¿õ['Î=ywéŽÓa6írÚû\÷äó/Øp«L[ýõZ±V Çc€40+ÉË\ %Sôxuà¬àâðàHš0¢zž $Y¦¨vñP”¦f¦ý>ÛìS¤£T+†Chƒ,+ð-˜‡ï rƒY–á~X*Õàò`á¨8¿`·áÝv«ÕlªÊDMeÇQNÐyÝ|c `"Û;-%€„%¢‘›·îJ" ú0E ),™Š¬®®‚[‚)æ8 -Êİ{a9Ì ˜m@o]¦òé8 û}~8Áº“(7 y1à„¡ÌßöúP·ËÏ2[ÑrÐÃóçÏlíä=z82:ÆP& „@,òæ{ï|qv†J Ã—lçÇ5§}Ô1Ú _CÙNÑØ½{÷4j6( \SNµ ú–M&ÉÝý~Ÿs:ÝÑpD¹P*m®¬,ß»÷`yíʇW>ÿò‹…ƒu”¶ÑV‚ÆIÍéOfG2S:aq{½ÍZ=™NEŽÌ÷x^_6ÓiÆÑ w>vâx6›Õ-Š˜ªE!‘Xƒä€hNŒŒ;Éë Â{¨Šy o`äàzTªIFÚbäîAF‘ÃÇHc/dT59(ÀÀ £þ ¨£€I*…„^Ô²¤Ð$Ø)k,™<ÜZö{½¶(¨V 7ÚÜØ;]NÓH·©ª[ XL•yMT\·ÛéW‹´$Þˆ‘ñ¹<>‡£ë½Sg²‘.ÓhaT:†:ùƒõZ+•HÛ[{›CI‰Æã{{û}^õx#(`–ªc–@$2 úÚjuî-Ýõù\ÙÑ´,qV?€G!· ´zÈ+ù-X*‡ÏöÆKû SüÏöA¯¯Qx¨V¯ƒ~ÔÀA„>y(¸]4vP{})•ò®¨TªLw0’gÔÆµª÷úam%ÁkÍ‚WÊ5Éjt"y…ɵ¢T…aÚaÏôÀ‰,ãíàbÛE•#Ož&m¶õUo0:”I (¯_ùÚk·Ö“c™ŽQ§ Ôàø‘ùÕ¥‡ÁêÍ ?0ê¦õ{¼…\þøå熠[=—Ù£Uz<ˆ91m’d¬ è™í²ÉX´Ç°Û÷t©_Ø]ß;Ø?ЇúÝëWþHlaÊb£bÉXG \<Є!räPÓÃCÓf– G*j³Ò7è›MxáqòùüÃû’ÉTÀ ½üH¬\ª¸u(én¯øùß%Йi!ˆ±+C| ?Ž€F…ñQj3Hëcskæ3§O€Œüqš(JÔt¡XNêÚ({¯ƒâw@Ý£ñ¤ÛãétxxGVûáPÔhÐAæöëÙ3ã¾°ûƒnÃ`m";hÏHzbsý`v~bùÁæÚúJ:9‘ˆ§þ0Žëy}t,8X­ÔÏŸ¿£zð`=ÒìÄ ’BåQum %«åj¥‹êº‡rråÑløäÑc[›«~¯“Ä-­fe$ƒRÄ–—¡›ˆF“z“vz1œ0q”FX\RTžãƒ!¿ÅbMSTÕfs½­Õªs³3±x°Tª ˆI¥²`3™P¹\Dáý¤sccCþP °&år|õ—~1·pí£á×z¹rûÆ'½.ó̳/ …f»555µ±¶Æu™D,ÂqçÎx,J[)s‡Ä8kHŒß"àæúG×Àžù)äö LÿüsϬm¯Œ$Ã`bkùFÀáJÇãŽétÚÅjVÊïõÊ‚4_ŒÅœF6¢ÙÜ Œ´Ñ•³=qv4¦îÈ‘#(¢~F­@R’855ÄW®„Œh0-»$Em¦:a¨T¶êÏ$[TÍS)Ëalr븦[QŠe¨©³£¸ÐQx*êmlHAÛÈ8îzØv×M{zC¦P(¦F§/¿`ûîw¾#Zz¡D ·ŸO%'³ é éqÓ‰0-›t.EÃz¢,[ñx( £ð1àQV‚˜šÆFÀ4=|𖓆›%>ùðA0e{D6Ôì÷[ì‘ñðÖF³Siy¬ôÜdºÕÙ_<ÙYã1ÕN¶PÚÁIyj:cí—swW Á€od"¸¹»×jÔ¿ôò³÷îÝaÊÄG»×Ó™P»Ã¡`¬ÇTáj^/ 6CÕôB©‹ùAáWPî±1”ÎqèìÔŒJt8m£cÙ­œÕ>AЩ©ËN†C>1ƒrʆ…/3lS{¼@‚´E[áM0ü¥ân³ÑÅiÔ«×cyÄ„\0ðAhVF£Að§ssÓ0'€5voµÚ„è÷žGÔ; ;œvx³\9ðíïÞݼtiÑL`ã6¬Ç Ü^éã‹É*jx—ÚÚÙ ‚[¾’Ðæ(P=‹Ëå[}¸×ÞÞŽ Μ9b*òàÎÔ`(¸½µ øÐ8–)ð§ÈÚ­Û×w+åÓ§O§Óéù™I9®!Êû‹_ýr.hµ =°L ñ¬ €Ò;Δç‡=®€öÈq5Ádº,‰\¾°›Ë‡"‰W_}õç¾òÇKN·ë)ße Ã7—–/­WQËÝ—^z ìÔäñl0>ØÍuZÝ\®ð†_ùêÏŽŽÞÞxØï‰à‘Hœ¨–ËélªÕj||ãÊÅ/|Éí¤3™ôöÆ:HHî `£Ð‘ýÑcÓ¼}UjK¸E'm¤†)ÈìNÊkñfˆY~̬1fnãøÏöíÍSûÇ»§¤!Í&åÿtÛ߬aÊña¦žùW.£[°dĘ"H¦RêešZ$µQVŸÛ%‰XfÄ—LD{.$ܾ@ˆázþ€¿ÕaP"›(È<À,Ô#”çy#qŠÆnä¸I0ö|s80Ó„«ªEôn‰DlN§ð¡Šµºi¹TÁFáÍXd"m^0à hÛÙî'u˜Àï~¿w"¯·³Ç™éJ #…Ʊ˜õ`¿/KŠg@ " ìÕn÷@«* «S•¾Y#nA>’°F"Q#‡@•©E³À`<ææ(¨(8Mðû°ðt Àãã£ÍVµV/×Ëf¦£1¿¦êOœ{&_8 ¡\.%’¨ ˜‘âîæ½‚š‰+©žºÞÜmůýãOÛÅ’¸ãP„)n×ãr†BõR‰$í@´aÑípQÔa­ÔGcã3 Þ@lǵkׯ&§^|þ…R³øàî=P๠O6jup'ΜÚÚÙøÖääôʃå‰É#hÅ-ê󝼸á«G¾¶²²rtþÓmÿÝÆÚÍ[×á.O=}¡ÙlìïF‚z¥ bÀ1°¾ÁD2];¨ì¬nŒG³±H Õm›˜›)Õ*l¹Ešj¸iÜŒ-0S“IcrÍãxùšvhY1M}¼3õéêa¢³jü˜aSfv¬®¨fü”iMQ Çù«|p/»V–e c;MMæf¢\3 ¨2ð·ð)×ïMŽFòùR³‰m7ŠG@–µ£‡¶ö0Oßtñ¦)‚÷ÍÖ‡ñüfßAPwk*ºw¿óÉM¿7Þé¶’q×€ë«(–4ó¡<ÔjM·×JIÙ¬ — Gà mêWn¥lN‡T yYÖçæb­6ƒSD6›úø“»4íŒ'³À dyMDCÑ( {ÔW7ŒYvšà¤Œ¥ÇD½öxÕé@ûPÕrÑG ÄAÁØAI õ$ÌZŠ"gçF@æŒZ!ž°=¢Œ\Âö~F³Z(ì¡ÒÆ:lpâv³Ê@… t:-(>®€¾bE¥cÞ‰<=ô …BáÚZigçÀëuÎÌÌÚí@/ý“ˆ§1 V©`4 ýCy°¿Ø7$¥‰ñ1Eµj¥Ûi£Œ…Q‚®ÑÞ³YÂf­V«f';2nT®D=Õm,i´ÄAíÏñCµ[¬JCY*›ugk{meÕê´–óà7kV4Y±çsôèQ7ƒI™Ÿ²¹ð&èý{￳º¶–™ž™úè£ì6&UEkUµNf3”s;h®Ë¡lÄÕUtŒ2Ôž> ´½³ÉKb¯çåäæ÷¹†DÓ”?ݳWMdyˆDM'þ³CÑOÉ®±lša³æ²)ñðoŸд ÌêçtJà†u5†‰æ0¢-J+žJ´-b2)TX°þ`X·à,·k9*ÉtªRÝ…‡©t9=,k–Ö@)u6«£Th¦Ò‰.Ëbs{ì´Œ·âtT­„Z£ ‡vš– ­`Í2A2|ÍŠ“ Xz mèÒe¡p³G¦Mu ñ¸\,ۥݨñóoF"1×o|¼<;Ÿ½î‡Ëa§ƒ‚P"qš(,ÿ L¤T,aäµ*—N;¶¶¶à5NJ¸ª/Ýÿd|b„raáh¥Ö©  °ëŠŠzcõƒ!/<ʱ¹þ¸¦Ê•rÇÁÏð ÿº6D QÝ€9@,×rºPô9¬’ÇíS$åzµzäjl|fpÑ­[·†à1t”O¦ ë¦VwPŽ@"„¡3q(ƒ³‚O0”‰ŒÉêçxü†vš#˜2€)r·Æx®Ïi:`‰™ù¹õ½íÉé)жk×>j²ý|±€ìNM*‚8;1iwƒÝ¼ùñH: øøà 022¢«øÎæÖåËOƒê$ ¾éÒåÍm›ÕùÚ×~Ùé°•êåj£†JUÊHÔcsË.inÝ›0Tÿ´ÀrîØÏZ›2j2!]ûÙáý¡ë7ó˜“Á }³<„I•Ì‹Ë(òU˜ Ò ‚Òez‘X"KwšE£¡”XXú&ψƓl¯oF¸™Iý0.›õOw9}pqX#L'÷÷ò©D²Õ„êq+1l#“µZLµ¡wØTŸG5ÀÎeaÞ<—ƒ!ùüTâ+7^tPf7¨¯ƒldNû •=AðŒ±XÞ©×[FˆÎ úé¦bí˜(¨Ö‹?ä6ûX Äâ€Ô²R©‚ÖÉ*g³;€$ö °ÅµjalÄcâãz½ ƒAå}p¼Ý) ®Uª¹fíwÆcIÜbô%Ð MMOOz¼†éºÜ¨Ð6Ð&œ´)qòì0EµF£ÞfzÂÐM§BOТS×,¤E‘C]RÉð"¸)è³/ ¬*¸`C›²°½^Þíö‚¡ï´Úàm0ó¹ÜÃ|>UF]ß%Y¸±µ $ï¥_t¸œîݾõ¹‹_xá…ï¿}eéÁ'õFù•—_Â1m(ʉx†¶[aÙn§Öh23cµÚƒ!ÇüôØÎæš Áu *!¼Åmuö”A£V"M¡4£HM¥y\Ó? %R7ªâcŸñø‡À”Q0§á·ÌÔ{x †S% ¦9h»ªÈFüž0Çäñ©ÉÛ)8ö!jÜêŽJJ¡r%Êé’QÀN_—%°3@¶×b±Y»Ë²¾¶›IÒ^Zp’t:;_<â·êd°tÐKgF(¢¥»£Q:´zx‚ÓŠ¤ o¶ZV…qEbµY Y0'=(—ê@/F³SLuc~aáÖ1/8þr¥<96.)r§ÙŠG¼â ã¡%Mâ Ùvbemhƒ ÷½2›tÇÃp‹²7à,¼(%““ÍF/ŸW`]Ïž=YA —.Álâ$% –ývÄtöHZ†hfd5;ÃOZ¼Ùa1’á hUJ·oÃÊùâ©ÅE±/q­ÊûñYq—VÌOž<ùÖÔ ä‹_y¤ÂíCYó3S6wÂ,*†„&tÚ•›Ÿ\}å•W•Þ»w$·‹Zºsí|õz¤ÍRí–Œ‚þP´~P®`›½råZ: ÇÑP ìõ견™½ix™÷F üHÉ(‡l~ñ8¬²×a†777÷ïþçÿ…ÓQÿRxÀ=x`s8ÿÉoüË3g΀ò×ëµ+^ûƯ|ýÜų{ÅÝô*㓞ˆ“Àþææ© =þÇÿð˜íS³so¼ñ×Ü RF-—:£³ÓGŽ-{½*OŒxœ¤ÛØBHA1–Lntè°Ìz!æG&2ý8ª‡cD鮡ÇõÚæ&Ž™_fºiTªÄJ7Ã"ÍSV3wO-¾€çÈÜÑ>ÛÞQ–QÓ*‹JQ/ññtŒ ñ^«—J%0+U›6¦èÖÞ˜‡Í,À‹i³ž^>uêT>Øò¸‚{;eð6¨¸Z›ÓT”eïtxuèq‚YU¥X*ÀóÂÿÍf›cÑQÏw`Ø^#ýÐÜ.4ËÑe)”HÈÞˆpƒ7———a$GÏŸ¾{÷î;w`MÁnmlH‡O¿÷?<2> D þdqq±Ç€?½øÒ‹oüÝëósÇŠùB4Y´‚Æ¢AL'&ÆVÈ¢¦« TOœ;_¬ñï°d8Q|ƒY÷Ƽ1*/hœ*M7kÝ£ôKƒŒ‘v3ŠÏ¸ÇsŒg0Ks™XÀåáSó²R_0£\Í_Íêñ¨Z3T4<M»½ÁP$14!·,-{<xøZ}f·9]X:ÂIßûWVAX ª5 ¤R›€}{‡ÍÊ€'¬ŠNÒþH±Á‰²qú3Y¯( Åêª1•®Ö ÉT {¢ ^°„@&#·Ð4:p—- ù^ R¡v·ŽÒNÙ8Vh5‡ãc¸ÇãìQ*ç)›f£±P f–%GMÆ3 P¨û8 pÊV®éf? ‹ËîÉ$S^_Q•Z½¦Š=‹æäÚ°v§)’c: Ç ŠÈ ½:pm›ÿã-[º¦·Ùª—ÊP‰³'¿z÷îmXNÀê "… dmoAˆa Öö-±È(:ÙVÛ(²{¨é®*˜#Á!¬Ê0vñëN‡ËìUpE޶ɬüe.<йi  )#—uæ€v}¯c4KÀ¤‰-Ô÷ÙfûòåË!—·YªÎOÙ^Û€ë,?ztîÉ‹:E,ž8—Œ'‹U2RIÒ2赎N]x≿ÿ›`Ú½T<«Ù¬K|K;¨9ycäߢë&úÔÔÇ5GM¨JÕÌ@·çËMWÍm3l Dƒ~ÁEàRhÃÈ4·¼dÀŸ›-L‰·;K4ØžÉN´j:ô^¿·í² Sc àt`<Ïë÷t:R*E[¥ˆˆä +4âB8. ¤h4¹Ÿ+Í.¿qû–7è.4¹gÎÎå ‰$Ð4òµµ*Ù Jtp°e©Ïõ<ÖíõuœsÚè°CI©7Y7@Y­ü`àv¹†¼¢I²ßçâynÌI6I’X<jT»¦ó /Pÿ1íma¸s„”¼†ª®¢MûËyÝÀNð¾²ÄB>·‡–Å>@õÂþ~µQ·@ÀÿV²Óg[Ýö‘Éäõë×ÿàþàOþäO`ÂÓ©ø~ô#ËBñ ÙB)J©t(Z¥Zìt›š.wºui83?59Èm¹bz$²°í÷ð1CH(9®/íÀN˜UÆf·òZ]FRãã£Ý. €)ãâLv¢R®Ù-‚Ëå†á÷û¼ÍfO&S+”ò›»0é/¾ø"X£F³bòX4 Ö" úBaÏ×aûª¯Ö‚$õ¬¤Á*ê?`;2‰¡m +å‚õ€GAR«ÀZÃ#‹"gº X£¥/Þ9ŒZf:1l€6z,0oVcIŸ7´µµCY‹£ã°¨ù\ÜŸÓI‡bµÊqƒ¾/À1t^5ª&çö·'Ç3ï¾ýó³S<ÐU)öËÒà§oý8öÁÞ¼un #1wBR™ØÎþü:99™Ïï":˜HÀ„·ÛÍ@•P8fÄvpàña¢I [nôãíõÐþ èR§Ó ¼æÚ"4¸8ª‘OÂWÍ=–f³ LÖ6‰i“qåÊxÖÅŒê051 –~þÅ -ž9½}°W­ÕÖ?ZÂ4šM`ºJÛ¨.ÌZ«9è÷ÖÖÖŽ-̦ÆW-UJÅôÄèÂÜl£©êB‹4~LÜiA¥e)sÊf·›ÒiZS—˜)禒™æÐ<Ù7ûŒ™aS¦—ÿÙq”üøßÜ4EDŠç‘Kœ¦XHÂíöøw6ùZƒ#,¬"c' XUÃ+U˜ urÊÓîà|ì$½¹Ùôx1P©P(´}scG&”©™¹b¡ †º­Æ¹G·v×eŸ›eøz Ó™F`™ªà@H’ö&¢Eµ§qÜFXÊšŽ0 ͆êJ†ƒà~.ÚÕíwP ‚ÞÝ+z¼ör¹š‰£¦§†®š†$‹Áä€ nD:<î ¦SºFŠ‚ªÈèl¶ß“BÞ FØnË—€[ 8sõÑŠËi?¾°HbÔÁþÞHlŒiwøA4ƒ±ÐÊòC0;ÕZ‘4]³Y ÷И›æÑ‘™:g~Ç8Vv`Ÿù1Í02ºšlâøÕ,ÂabSQÓâš(ÇÔ¸æ@m’8-«66’?ù¡Ë£[p:²×jL§ó \ýÆ‚ÁŠíò‘YrbÒmÁ­àÄ]³Ùš˜˜ª—À—ŒÒ®ñ}M¸, r¤ðÃ埾ùÎèØˆß.«"¦Ð ZA:Ø>Ûh4FØ­J#â¾pGdTY z½æ¡?ÀE´ø=A‹Í Ã~"bë¢í®z•û+ Þ ž±\.×9#Ø °YÝ×5L¡q‹®*–½"I)w¶9Þ®b¾€f·/‰¼ä §¼ ½×³$f¨†ü¾|>ìØ1°I ¨„ƒö¹]ÞP ×guÀBñp;xá†8ƒ/éUÏ;ï¼c·y§&€Emmæ"q·(õUD. €qW.³«««¨‘C¤Ûí° lN´= Ñ´5f)3~mii ^LLL ¼##f±4xd:äÛ:Ø‹¤ç/_‚Ñ\8q‚ù‡««'Nœxðhù‡?þÑH6³³¶Ñ­7Aߎ›L„··–qÌÒiµI,‡##©H(œÛ)Ò¨7q ä”k•@dÚá1rî0£±™óÚlîð ûlç†B›ïŠ2êÌlüÀ;f Àãè}L3i–ù©™V†`8­É"!²z öùÉxº˜guM:==  TjÛí–€?ú\.!Y–» m“Ó³{pÌŸɀϷ»½ øZ¥¼ upÄZ]åÄñÙv·"IÃJ¥ îÌï=ZÞœ`a¿‹< ‰á\WvÙ±Tèj–Ë„œ@˜À4V*%”Nán\#êÊð$±lwvv&ÀÀÅs_þ­o~ssm­ÓB›AÏ?{î^«ôi—`r`úÉ'ŸÊ¿¾¾Ž}¡zëÖ-P+ÿþ^!ªö耱„§óù|Åb1—Ë™E@áý„ñ“ÍfQ´:‡cïm­Â<|óßükøþîþÛã®ßø¤yîè —rµÚüÒs/´[-€ªÿâ7¾¾òp%žˆ´í^xA‘+EÉ0ŠzÃç÷²ì£bqÏæ”Ÿûâ XÙ‘HÅÉ¡dô²ArlFê‡Í‚!wœ ~CèLÕ&@¸‘ x$3ßVSìà…Ÿ€¸k$‘Aa¢…B=G]]…³¡Þ_VMS À Ê J+{h·8ÝŸ$b“3óKw®f2a¦“ó{â7º,º˜Ng€¿Uòõt*»ÛîN9²¶ºë°z¸€*º\PÝ.Ïìtvkc9D¯s`1ˆáEÖ±z™ãȩɣª¤5ë5M(bûôb¢SXçX©^Oœ¸¸ÇTgOœÞóìËÅ9»«§ }´¯=ì‚Ѩ+8Þ“zpÙ?3:Õ©v`:„AûÒù#Á5”¼°x˜.%“Ñz«öŸtØIÝÂûÁ TyRÚèÚÑí c>¯,ð`-dQÊöÏ嵮ߥDøíÕ_x­Z¯?Z_#6>9nñí×øìs_X~òă}šŸŸùÑ¿?¿0{þ™‘­ÍÝZµOÍÍÏøç¿þ?ýÛó»Áàٵ݇ÿão|}kcóôâI·ÃBhüofãqN§»œ´xúR j+;U…ôñýçþ‡’Ós€ÆØ.3:’ ÿ£?ú£X4ê¶+^_ÜA{§Æ{-奋S"W»~å-&»ðÞ{ïçù¡. ¿öÕ¯LŽfeÅÒé°É#Ä—îk!oâÚ;w6g~· ÒÏ}õÂwþöÇLƒ û"f¤ÛÚÚÖÌÌ ×4‹¸µ»611‰Å—m¼ö•_vØÜû׿³p|Z·Ç\©íh Ö}qoëꉋMÍ$ÃDL»hBDíqìðxéК Y̼¼ÃCùǧù–ŸyÿŸe“Øe>}šeFœ ý,¡oÄÝhæG ”­J|kw:Ut{}…byll|t<|ÿþCÁB娞Чú¤¤ïR[þ0hW7ŸGsÍúü&W3ºâÁ ((ø’§6º?¹&—r;Q¡n+Ît9Ô¡×µÚ`늬Øí¨N0‚KI@1—± Ñ'H‘8-; îÀ ðþˆ: j‡#_(éšEÁ7êMTvÐ(ôbnƒ¯l·ºšÖ¦^’@8^¢&n'Ožþ§¿úk¾p|°·ÜëÜÙ'nß»{ãÖí£G?õ¹§aüL± .Þw9 ËÈ&-¹Ô1¶#\ºðÔÆú6êòèrÝüäcPü'/k´÷Þ{ï½ÇŽÃ×ëu¯Ûƒm ò¥Úèè(Ì@>_ü•oüÓµt63””ñsåý÷Iœ8qôØoÿöoƒü«o}‹P8³üå·¿õß¾ý gΟ>>Ë6sϼü…¯üöïÿôßüäÆõ7¾÷½?þ¯ÿ5Íþoÿë&tg»&îî8lp  %ׯ_‡¡šû©&f8þüæææsÏ=wíÊÍéé¹n‡#-2JN¬•-šEÕÄãÇNýb1?2õ¸ý܃Ùb™^0#ë:™ReÜ#Iµ’f̨¹adòz´—¤‡{¦4?†–ÇØÔüô0Å@·Š±Z’y¸|®öh:€Ò÷HŒ ÈDzdéæÚèHho§rüø8øÌf£>Ô(_ƒ¿êtIqÐq¹m,3ä^µ¾k¥±Á ×n«0Àë‚A´¹­i UIºq]ÅÕ¡À1ÝËKŠÓëQx¾Åv£b¶;}^'H6í X¶ ð˜¾Ü•與úãã“p…¾qª‰` îÜeÁ`ÅÑñ ¢Rª$R1¹£ƒ À„äF­5 Üí{épÇã°A5ò·ÏëÕd…íõ–C˜Og®Þý&ekw§Ë2^'›ÑUíú‡Á\'ÍNŒÂt5QáA´ ‘pzzòèûïÞªtæÌ¹õe¯Ïž‹:œ ÈåxvîÒ¨Ö¶v¶LÏÀ3îïçNŸ=×i3.\KСަ5”Š# ‰Ô‘™9¿×&`w{n16:á%å_ø¥oü‹%ýéŸÿŒªüAN´N?sÞOS‹óGÏŸ<ù/ý×ðƒ×ãÑðôôt½^½qmuáÈ ¶;üÿñ?]}ÿê•Þ:27·0?½tw½ä¸ß~ŠD.t¸‰ÅjõüË_|õõ× xŸÏÛh–%^ÈŒF&ÆØ&66‘|ò©)œ°Ý»ÝšœJU[÷i¢M¸6Ü þ¥,”¹‘‹OÜQ˧mì>kw£îÍ$'ÓŽš²þøÈŠ ÍÝ`¸ØaÚc³ ,è¡:Ô,¤Ó㟼ñá[f£l˜?ªVë‚4´ÚíýÐh¶.ÏhÕžšžàzÀdˆÄÄÓ Ó‘û„Ãaaa·[™Âåáiâ°äVœNÿPÖ(Q GâŠî ØP$ÝNP`zÀóÀKº\WÇ´…I:Ü—ëƒulµëp/tPdÕ=¦£ü>E•,8Ú-·T05˜mPhø¾fÁyA(Š*s¢$ ×'Œ&¿ »ðÌ59˜*€RVx{ˆÛIÊ"ËÉ‘ j–ÐlתS'Ï8i—®èVÂ*S”Qb×EQ*ðè±±1‡­ÂÃ¥Méê;99yúÔâw¿ûwªÂ¿ûî“ÑÔé‹û{{gÏžÅ)òá;gΜYzp¥ËéZ66þ׿Žùª•üv­öÿðö¹sçö÷w“éäïþîï ‚ÿÄS—ľ$ðÃ5qk~nÜïñ§Ò‘¿ÿÞ·5L9sî d ó—3™NHÄzEX\¢ ‹(èVRÉ!Óm6ëÕPØ]-sð"“)C[»ËpýúÌìèN^.ôvÇ”Jêa¨ëyhÍ3sÿöq¼Ö§žýqI9„ Úã6׈˜i= Ž6›>**ªÞ£*„ªc½AŸ"i§Û Gm6w¿¯¥3‰åUÔ`3,¯¬–#°º.ï.Ó²Bñ¼ép‰¨×@Œ{0ªZ­ÇÍæŸeƒ]³ѱ„.ÈF?øÀ‚cNtkÔ3ÿÚÚ}†²" F Õ Bé˜Ú9ÓHJ'H;*€ÿø‡FE.†C‚´bÆ™ÊÀ$«Õ>D§ô¼‘Ò ÌµSärÙóµŠö ðû"Ífwwc+¿½sëî=ðƒ4íÌå@'îܹ礰üÇÍ€$­‰D÷îÝ;sfh>0zYtäör™Tf,“Ý+ú`éèÑ90ÿ½.377îÞܤ̎±ýž¨ÈÚùèÑꫯ¹zå¬оXÒn† ,±Yi†á._~:è|rã0Ë™hêã?ILLu¹v$ɦi—ý ·Czô蘃D"ÎK‚ª£Ð§®tlêäê£UXØ®ÝM¤_þÊËÛëǎϵkÕÑ„Y­VQðPáãs'àÁC#ï'‹@ ›œí1z.¿uâÔɽ*p/QáHë±³g.Þþè*ùÙý#s³Óäõ&77ÞÍ µÇ}˜°Ç!¤‡¼ÞSS>uÏOÙìf/q”WŠ© ”•€Å°ME×x¾g·££m°ºÁPœm5Ãq C‘£ð>6_¯Ï[pˆäNñ–Óén4+ðè=VîvzåR fÙéD;Ìn—ìívKCÁN[AF¶öjð@i0Ì9  ››™ž¸”WÔÛc·³§I]YeO½”+æÈC#jЦ ¡Ìmó¤ÞÜ?Ü4Å>“g÷8ZïS‘ýlL´)£¦s$gVºR5¢ªƒŽ4À!2†«¦ðëžHe•×Dâ±b±,«:›ƒÔù`þè1·cÔïóƒ#°Û\Î8AR˜Ý.x<”ÐSQ¾¨Ï  ¾¾Ýn…´¡fÓ5Y#­°Ja x£ýžD¬ÏƒsWÇbáÍí·7  a y|4Œp41r¶Ðau!ö åLOÒttÈi„%Ä´›5¤Ì,†¡ˆâàu$ÉåÛ`²Q@»/ìǘ ñÆÍ¥^zúøâin Ý[Zw:]Å\þ쉗^~6Nߺy3o®o…Áx4V*”zi( Ìç¡‹C®ýNþ`çĉ íªžhÖ:|Oˆøk+«}¼ >93]iÔM…!u:]gî àt{:  x˜¥;wî0íN8‚6¹&€I'çfyex÷ѯ+_ùê—>|¸ú`åc—ï‰g_¾ý`õÜ¥ ˜Eÿèêu(…{ßÌ—D©Ûê$Ï¿€áHT.>yùÿèÍfƒáðÝ¥%`i0 áhtñä©ïýõ·Ê•<ˆŠ5:ËÞ¿· %ŠÅʃ¥Íéã^–kIbÊfõX‘íÕvw É©9ò³[ñ¦5šX¶knï›^þ­jŸþ†ÜâÑÏ&9'û”‰ÓžL¬ln&‡DmFÀò6]p¹l  `“‰´Ù¦(3’ÝÙÙ¡mšò ¸¾®‘n¿ #¬ýA›¤eÛŸÃÜŽ…f­6·ê$·“°èÇ´š5vÐéH‹ÛíÉX]ßPKƒuíÆCVQ†ÃA 4`ŒBHGÓíÛIã”3L¸]¾b¹ˆ¶X˜ýv‡ñü€ðò…ŽÉ Í= ó‘aÇކ"áî^·P™lú£÷ÞuQpù›ßüæ_üÙŸf:ÝÍ­…“À`À|6MsºÀX­QµÙª”…ÕQd iE.733sU«TšÝΓ™Ë³ss}rHt¥Zí3ÂîÎþâââÆÆÆPÑV×6þÕoþ&ÌÒêÚòÄÄ”ÑË÷?ùñ›°ö`®]¹úÁúÚØÔŒ_Ö†6ÏÆS*'Ös¥ßû?þ÷ÕåG¿ü ¯m>ZÉïî¤ã±t$f#ÈOn^ûÁßù÷ÿá÷þò[k?úÉÛÿåÿìÑêf©XM€T]¹r&á·~ó·ê:Œ{gûOÿß?NÆðÑ¥'.=óìsÂà¿„ü(]p¸Žýü~>WWå Ø"Qµ\ Ì¥I» –W ÓQd«¦JŠáµ­vt™ F'‘q‡;†ª(3ЦàñƒÃnçjêNÜ ƒÏEÏ=TjÇxÒ”íþŽ AÙA¿ÁE¬ ¾i¸žµ¤Á°ÐýW-ï€òö8TÍ”ŠìÊOvT£ªRÀÁG‡± ’Ì#ã²Q–§dÄ­¯¯’R¤VCn7µ\ijjÂeÐ5 hv´(Vã[É¥åõCû\X[´˜Ìu-˜˜;€ LK6›?xà0þÙÜRßÛ¿ Æ(Ö0Œ÷ýèýŸÃ0ÚÕ…íxž_Ùļ½úúk÷nߨÜX‹Fëžzê3Œ7·¼{÷ÐÌÌÌÑG î^NdΜ;ûØñ¿ûûÿ://.õtv  Œ¯OöìÚ»¶¶qöãKEñÂÙ >o°®®Áç±ÍÌàà Ë *]¾rØè÷Eëb-¸z ¶¼²háøK—Î7ìú2Ê@wRšØy Ç2òƒù‡èŽtǵã–Úù§¾]+œö&#…ýŠ™ÀVF>¡Îõ"-¡hæÕHÔ¿’Q©1 8#`[„1.ÁðçLŠ‘®P¤aF§x–…ÂL1Øâ¸w èÏrõ 1›M€å§(I£Æ Ú…ŒRD™’™ âa(àoN 6·ás à:–¶£Œw'rIm=.+õþ#¿085§hfü_Pkz»e«W$Ö¼Òiw˜\‚ÙnÃKÐ 0AY¼^wb3ÞÜX_)ç“ÉÍ×ÑÞÞAgñ®h©œ =VµŒw$¶Ò0³|eãkßî=~øa,Y7™÷ìÛ=4»°‚enii±;ÝöýßïýÓ[^_½ÙQñý˜çX]¸¾!ØÕÖî­oİ ¦ŽýÚk¯MMÎ0&ÍB|zzzbuMѺ˱˜.+k«3¿ñµ¯O­¬¹üÞt!—ÌRv×½[7g¦çnݺƒ­¸kׄøÜùÛÚû+}uõ¼`]‹'Ò[ɾÞÞúÖÖ¢$åDq#Yˆ5ušL©¦¦f½¦Ø-f¯:UÔ+èf|s*®¿ïöØj ·{O!¤á&&f"áz»â´Z¿GÏK&–cqf‹à¥q9µt7½w/'‹b6°ÚÌk+ž:êÉ67?ƒ)eƒ=3??çtÙ<î `µÔ5Ô_»rcÄÃt¨nÝ¿û¹^,–+ åReblÒÌ[^yîåý=.~z!³ºà ElVþ¾ýÍ\<¡T ÃѺ:xäÂ…K˜ r~~LcSl#Aÿ¬¯¯¿9r£L'òêê*W(â·®H̶°¼¼º²º¼Ôßݱß¾øÅ‹—ž|âéööæwß}·³³¶d<¾e24´ërûöíÆööŽJTCFM¼kq1¾µ•Û;¸×.ð™Ä¦I‘o_¹päð)¨™`0ÔØØ0=3îõšúƒAÿG?¹&×LÏ_ý¯ÿÆØØ]Ȩ®Ô>*Áx5?¨›Ç¤“äÚ©]VËvgeÙ0]u£v.÷Ð×Î1ÕÃ5 `jÝbwì$œl×03|à0ÃiVõ<Ž”rY¥ZÑTÙfwò6Ádt“ŒÝ¼Ô4l6V„ Ã+U* ‘&ˆžïó¹Ëåì^ŒÆžÃc†Á]©…ÆÄì766R#t™³Ù­;qXÎd–Áâ¨$¶ÑÀF¥, ®ªs°›`ÀÏT!$.Á’4«ÅÎKÚŽzQ&p;®~¿Í[M;ùûŒ?0œ–ª°²dô¤2ï0QÁ±ÊA_Ð$Iù*•‡½ MÑ+¢\c8+”¯Õ"i³*RU¤<‹ÅÌ™u—Û— >ˆm¬Ê!a…¢$SÉå z HÜX|n·½Ëuaçìl¿±c÷Z­bVz1OÔQÒc“uk}½¥®ëJfYD:¾ ‘s¹”ôµ¦¨n†a@{[&* ;­ Îæ‘ë×yääúêR âîÞÕ9³Ø|êÔ©õõÍPÈWó=}íRUƦÂv²9ŒÑ*ò®þj±|ãúHØÀîš"]ßôÖ[o •Ç é|E–O=õDª˜’5ý½wß7ëüÆF"±ºÖº{?öçÅ‹ñ Ï<ó xŒT¼)æ³®±![ȧÓéC‡ylŽ[W¯Aí¹äÒÂâúæЮ¡A¹Xï¿wóqðàÁ™ÙÉ™™©?üÃ߇ »woÜátSWʵúp]0+ÒÄø”C07Ec¡`!“„UÙÓ»Ëïóô GC¿<ýáÜÜÌþýÚÛz¾÷½ï7†Z<^×ÁƒÃØT¡`s,Ú´¹‘ª&Û‡òÌ]Ï ñ*v„aüÔføô)*ûA¯œ‡Øô ûåo‡dEϤ“‘âWåJžÝX&cÞ*eÙ±SòD‘¨—UÖèVÍrÃÒT([ a5s<Œ$<XÜØ3sv‡{Ñ5>;ÎB´XH9ô>õíUU³s8©Ä©Õj¡ù§¨.ò­b ;1„º‘ZHô­ÖR© ¸¬ä¸(‹…b)Ž8@NdÅfu™Í˜=ªj&êk¯(¸¾ W±ÂWx:5[¼v§–Õí¯¦J@‡ÝjáõB!ÛÓ× ê‰q‚[Ï/ÌtuvcBÐúŠÅë6jHU!²Ë³óØËóssø¾ÿØ#N‡»±±ùöí»?üç•‹•_xi6¾âô¸šÃŽ´Ä" “'Ž=åj¢æ­­­°á°QÇÇ'ó¹"´¿ƒJ O:v¶´Bà‰Äxl¸ñÁàÁG'&Æd¥ÒÐX·xïÞzçì™K¹l©µ¾Q*Šw®ß*•ËŸyæIÕå«#W/_ëii2 ÌÕ ¥Ódó¥{£ãvoh~aª¾!ÛcfvÂåô>\kørùd©œ…˜.­­Â´ ‡ê-‚µ˜¯læ—…Sf§ŠØNB=;¯ß9|Ú$5ôìŽWu‡•>lB1¼dÎÑŠœÁH»9ÓûTÁËBÅ·jD"¨ûö…TÕL“U°8m0Š5*m ˆ·[§SªÚC>·Å¬•ò)’6l3u‚„½¹_SujŠà÷û3 v„¸c´Qgä¸BÁáŸFÊ  Ûˆ×Vð YSM-—ÇÅ’Vúø[ª<Ê™US6žHne2 £.¯O6N_yoÅ`°º ÈØŠ” î4e3y Mç¼nŸÍbtR,’ª8Ü.;œÏ¤)¼7“¹{ÿN{w”E8`ÉÕÄjåÑ£'æf—R©´3f!31[•îܹÓ«Ï$SJMçþÜçž¿{÷.~èïïÇ6xëû?Ð5SÏá}ùëRª>ùä“Ó÷ÆÎüòÜï}ýxXë?ýéO¿þõßÁƒ>ýôÓõÛßÀÓ;:[®Ž\wy=6§€öúwïÞýöýïkÍõÇþƒþùã_®mnP1ë\>àó77·|ðáûÝ…{óÍï ¼·=öè©cûüñÿ1 £ÏÐêÊJ´¾®hð˯¿ñÖ?þ­‘Ñ®Àì;yê zßÑq ìü/ÞÛJnn&¤¦¦†ÎÎnèÓ_Éç*ဠB±µ•0Z©—5Õ|óî=ŸÓk ¨;@ȾÔ‰†9l¢Ô-òúìœ?ñ‚¾K¿ÛÉ0ᬞª*cKUÅ2/v¼®T9µå+Ë5XÌüZPÖ:I©Ù €¶ªÔ>´œË'äZÎí6•Õªê´ÈŠSµQ!Ôb!œltÔç+zÙ¬ù¼dO5A_H°Þâó îÚÍeŠ÷Ïj³F¶Ó–Ça±ñæ ;XÈV¶¶âƒ=+‹ »Z*¬,”C¡:°¯-O€övÞŸ˜ŒF£^/>”ŠÌbUT»ºzRÞ|ýôQ‹M?ùBßP¯Óe‘j©?ügX埞9íp¸ Åäòòò³Ï>ûÞ{ïÁ¾|ä‘G𣩷Yªv‹'¹%Ÿ8þäûï¿ìø“ž «UM…_”‹Z̽·x§XÚò…|Š*P;y¦ñ ;ŸQIfM³Ð'©Vf{;¥öX¸¾¬è;RÎi&Áˆ5ÿË2fô“ÛOÉ©’ê7,hÊ,ó%Þ`³©œ:Ñaµ)j NMû{)-zÝ6€–Ç: "§f0’ÄÆ&öÌüÒ"€$•Ë’ï½½Ýh9”ÄNw•òUáéAFK˜‰ÆZår¹†Æ(^d3¾Ê™xÇçó»€aËËóÔôœÀÔ*‡ár9@•Ré-CÏ”eJZ’8“¬kbM.å«ðQhp7¯ÃI9w´'YÞ…fszüÁˆÕIÜ#Áö(‰¬P¼y``x†Œ—moéÅØ^ýõ÷Þû§+¯½öÆâÜ,n²¼¼"«êêú®a ½++K}}=}|:Ÿ/ݾu§¥¹ w;wî\¥RÚ=011Q.‰÷¾òé•õ•u\ VzéÒ¥=‡ã©Lz+¹Ee§ÌR¹Ó'àñÂ*ìêîèî®ÕøkŸûÞ÷¾×ÜÆr+šžÎæ;9¡¯ÀîrnlnŽM¼ðÒ‹“wκº[Mœ‚—+2¨×ÖVª±) [ wÃBìÙ³ª ««ëÚµkƒ=}3Óóuuu`±}}}¬ˆloßî¢(*šZ,—2™òôì hWGW§Ýa±ºõ_µ¬5=n·sÿ?˜ð¦‡ “3öÆx']©þJþjå¢9[ÿ F¤þ/¿[¥éæí`"µ «©ºæ°9¨8¼¦ZløÜÕƒÑýn‹À•rA⊑wºȬÈM•¦+ù¢ì´ÏÍÍuõöX]· ‚ÈXo¡TÎËŠ%“I1+ä› À¼SPÏC,`@ÄšC0*UÍR¢î}äË„]E”ÔMµÖ ¦µšB9•É儎!bc$0A‹+À{«Üݬk\µÊG· ’1¡`>äî BQU™·ØÁo@¯½ªûå 6RI‹J…å°“³‚Ž…£På?~ò‘C‡ê®~zéßþÉÿòGô‡U%é —VÖV×7¡CéDM£ Hç1'€ÐïÞ·—N†¹·»óðÁýÿæü®]‘ñññ§ kñã¿sòÄ©B&[ÍM×ÒØÔÞÒê±[•Jµ1ZgM HØ——é¹ÐÝbMâÌ”,åt¹ÂÎ)×Ö¤64† E?¦Ìãi ´i»åRï´+€D"ÀEUª‰¶bBǰ`šB¾Â›ÕJ¹Fœ”/óf«`¬Rç^“ªÙ]—Ó¡«Ø±ªŸ3)ºÑžj›±ç\ŽŠ™…4¸©¤V!£%±è ÐÓäÌóÊqFãµt:9¼÷‹¸ÿñ'×Ö×Ǧ¦ZÚ<(~ÖÍÔ¹adäšÅ"x<î‰ÑÑ/¾òÕX¬1,´´´Ü¸v0úÜNÇK/ýÚýû÷ççŽ=:99‹E +—¯\}}ýC•ªRmlˆÆ–ggð6PÙ|2º«c×Ç_„`¹TÍᢴ­úæ–=Áwß}WU´û£ã›››¿þ[_)ÇÜJ’…XcbV)‹Á¨êzùòe¼ÕŒÇY×¼Ï~ö³§?|;°©¥”Îf¨ŒE¾p÷îÄsŸ¸W)W=>—/óÒìÎAsÀ#°Ó?ÓC±v;'¢Œ<ˆ]Úffƒ°³"f=pB‘¬P§Ã-—°ÿjº¶­Èö›î„9³òRDŒ}ŠDHN¾¾®”W–‹”Îaæ-§­VÅZV@©tS¤Vp 䇔¬oåùtrphh#™e#üFŒÅD] ³Ù×ôLÅé´ÊTÁŠt={)ˆ,5–xz<¸r3½ )Édrx‘P0bÌ,n“ð‡[ñdÎã:n¯šTÇ*S‡1ÒöfX‰Ål¸ÔŒú˶Ò¹8 1µ°ÍÏÀU“kÌ=G;ŒK˜tÀT<s %~ýúõž¶>ô£¤È¯|áŸüä'‡ŽÇ'…tžKlÅÂÁP4Âl‰öÖæPÀóÌó/ž9}|ϼsçV&•¼y#ÝÓÙTQx šÑMýb1¿g÷n›Ý"K5`ÞÑc-ܾ¯sB>›½wc€uÐÚÚÊHO¯w¹e¹ôo|ãéçžûö·¿HgŠn/XJ¬&Öîß¹h\\œ Á\l[+ túÞ}»ŒlÁ vVÅp‘Ùj±»½`P]CÌd¦nr ?/¾üª¬š,6G9-WËm­¸a"•èèèJ+Ua'yÇÓiÞî['ïèz¦ÙYY¨25ÝÙ€b’Çæ²J½í-TÎV³¶›¦Ø¡¾" Ë(…S‚^QËÐæÌ*§óB2«ƒhâÊt2‘ÇVÓu Àëf«MDëUAðzÝË+ذÇCnÛ ãæÄm?IgåÁ—ˆ§ö•JuwwÏÏÏá¹Ãû÷®®m„cQ‡× †]‚E Rã÷9=`á °Õ´ÉÈ©ïíÍ.¯ŒÜyõ+¯Bܸsg÷¾}ñÍM˜•0ìîÞ¹wåòÕþ¾=ñø6³ª‘?¤T¬Ê5rø€9rdpp *õÄOÅ©â„+h³:ñ[ªí°=þø“m­Ýè?ÿùÿ‰† ¥âÒÊb[{ËÚæ² Øy‹<Vô¦‡JŠ2IÚqÎï8¤X93§vÐÑ z«Ät=ôCÊAßa¢;¹xe£†¦¨&ª’¼Mà š ro ü‰ÃŽ|âŸõ¡p}S³nµ×·´-,Î5¶4—2[^‡Åß›[]Ž'· wW—Wz»ºår%dwK²Z*çíúŠ×çŒÇ7qót:«H ‰Ig”ÄÇ–¥#%·½¾Þ k 6S>'D16ÌÝÚuBÃ;‰Z,50ˆ G…©ªÔvŤёœVƒ˜ª2§ÈÄÄŠþªªT^Ó@[a¶2y<~ãPÀ(4ç¤âJ·mtR_£QoGGî û [hjjb}}}øð‘Å¥Õ—_ýÂòzÜ ÔÁ  }nܸŽû—+ÅxÜ4;7sifa o€¬Xþh$²{`°”ßò¸¯þÚk}ôÑW¿ôeªÿï[ÿ°±¾vò䉹¹™GO>‘*æ]Ÿ¦r¡úXCc ¢ÍíÌlZ wòsÏ=7wk´°¶㦷·÷¿ÿý?446=~⃟ý|m}óÊ•kÅ\~ïî}÷ïOà( Þé7¡•5*>œÉnâ;@÷wÞikkÛ¿Ÿò¼^/'Ø8ÞRª”VïÜôÙÇÕÄþÅWÁøÆ'¬wï8—«Õªàt6 ë_>bÇ®ßNÜ3ŠIARYH‡¬I|ž§Æ …Nv’\T«”~Qˆ65ç+j÷@÷Üâ\sSëd&Ž]Ϥr1(Vš››ã+k>·g}vÁiwdyAÕDR¦…lssãôôd8DMŽ=Nˆì¤*\œa•Gçç–W–7¨^k(ìõø3é…rf+É”# ë&Y‹‚…DŽÞË&Àz¥@fÍÌsä«%.)Ølº*P%ÄšqšJ‡é#/…xP³,’?O„Vuûœg/Œ°&ˆ` T3Cð³¸ØÞ݃mÓÙiž™«Ö”õÉéc‡ÍLMtµ·‚‚ç3 Ýåw;?üðûž}¡®±ïBIŸ|buiÚé¥ßøòÕ«W{ºû #“É$žûÚk¯Â)Š{ìÿð£Óé|)™Ê:Ü®¡]½ K‹\[ Æ=55uuf±³s°°šhðzÃÑ~pP$ Ëáoÿîï°ð‡÷éì‚ð­®b´t” 0‚}ºBXßXxá•WþË_þåÌÌÌÿñãžW@©ÛモïïH¦èTåÏþâÏ÷ï;ü•/ÿV__U*‚έÔ* q]9sæ Tpø(:VKµ"JÐã¬×‚ŪÔ3¤KJ5á¢Z+rÙH¶Û¬vò=™ RVSdKuC¤þõUV{G5 Êþ*9ç!T ¨ )4:í‰E©éÄÆ‚t– År±$åõÜ ®b·¸¬Ì|Õb Z-æJYPBÖ­L:«×*åá¡ñ±é¶öÃ2O1îíê#}-åïÌܬàqêK¹° (ÒLœ™ó/-æUų´”Áð’V$ù¨C:kzÞL—H˜5 ¥òÖd¤=ÚÔ€q66©‘!¤Z×-PôAˆ¾×OŒ¶±¡9ˆÜ¼q ¤­³£{-µÕ1Ð>½´EûϨʵ¬X©fÒ›žPÔnÒ‰M«Ýzèà#±Ž{c£U>ßÙÞd6éådé±GLÝ»¿{pïOúÓ‰©ûðö–ÙÚܳïÐÈ;½-R}ËúV¼¥£S°ò3‹óM”[R¼vóæoþúÿÔØO@%ÅO/žŸŸhn¨í×ÞX^ÍeRé£G¬­­€9´ttæ¹—a,:º Bð™§ž=sþB![èhn¼}ùü`WãìÔÝ}ý«­ÙLÍÎrš`¯«»pùܱctGýïÿä§õn_,us\9•*ÕE>:÷±2z\nwdä.î|ìØ1À'…Ók«TÊSÓ ÿúwÿg­¦ÏNLUªY·Ë‚ÍßÖxô?yghh76õ‰C`ÑßÿÑwm,*°ˆ?ýwÿ ÷á¹óåRmyyewß¶„iÛ^OõAkFcmÃZç¨à=õgÉòZ•ívÚ‰3¾§[¼ÍâÓ Ï¨¦BCRúÀÃLÔd¤üR܆®HFÓ&]%ئ*YFFžf¦^å^—ðT*‰š뾊A%%˜7^OPókF¬Ç •¾Ü¦aÂ)4€ô×Èí Saå˜ 42gÛ±Y‚ÎÃB£*ÕLqò(o„±d •Í ·{;EÆÖËC2ñ¢FhƒR¡Z^0•ÚqåpصgÏžgŸ}6[V6×ÖKÅÂêÊ Æ RetŸ‡‚ÌpϱÑQX¯Í±0?¿k׈ª[pØ9ëÆFÜÂ[ ¦nïZ|ƒ'ƒ]Q0ÙeìnðK ~¾+•+R)…ýõ==}+ó©ø†×XY[ßõ¨Jyya“Þ)WÅ[·nEÂát±4<< Љ;bía\ƒøªÛÛÛ›ZÛž~úé´ñò3o³áÁïü¾ \3>|xfnim}åÔ©Ç–——°ùae6·nܸ[ ö0D;¶¾žçá¶xÐSO=nŠ%nh‰:t&Ú¹ONãÂ/~ùµ–æØéÓ—»{zoݾ†)× J*1íñWõWû_|„ã!& ª#WG¶ý£ÚŽôAºHE"D¤–ãø7KF±;*j%“!µÅ\÷Ì …+ åÒN.(©63ô­©ŠåÁ 8ûb{€,-E¨ša7è&¬ŸtƨP®&šÃfQj²Á’e‹•³Û-bU´Ûµ&Íâb€aQôyí6{ÀoäaVmù<©ÚZ-ê¡XO*b%bSQ§.Š>€-B§& oÞ©È’ UE…0ò Â”O”Åi³ÂÐÊTÒ¹¼\(æA:yÁewØ¡÷¡Ý€øØnäD«TaçD"‘†ÆºÏ}îsßÿÑ{µ0ý,7\ÅÇ?ÆÊæìê¬)Úâââù³çææÍBÕTÖúÛ::×Ö6îM$Ó)()Ðq‡Ý))ªÍN%kÂá µ½SP‚|.Ã__Ú8{úüK_øµãXX\üî÷ßjíÆ\‚$ß~*ƒ `³:J–¼§» ÔÕÝKxVTÿçÿô6ï¢"ÎÌmÄü}@G°Àƒ'Oa¨0z~þóŸÿæoþ&¢§§‡Åå$Rék×G˜“8¾¹B®e[pWßÐ7ÿþ[»ö÷öuâý3ÙäÍ›7(¬±*b_aòñç0Ø—WV|áP___js ýØc½þúë—/_ƒ„®Ç˜c‘:ŠÖ(–≵ζ¶±±ÛŸ~úéÕ+—ÛÛ¤RÅBQôú(@+#ÖJ‰»rù2°s÷Ð$';޶ÖV‡Ý>5:&ìtÑ [f>üš‘èdÆj„7T×*PEŠ28?\‚¤U 1ˆYQÌñÉä’É‹çg@ÈÌ#|BMaL‰›QAœRšZ*äLºL%Ǽ~üš:ÑxÉ÷)Ë è,UP¨AOÙ€Çý½6{´¡‘:-e³€Í…Ï#1È{žUšÆšYR6^9c˜fJ¹'6O|µR&Kä[®5x3È o3³šäw+—MFì:þÙ¹mÔ’b[ñ! Ls[·Ûa§eÔµL`Çê`W›¥xK[ëÌÔ¬ŸH4a=~ò±Îöî·Þzkqy-VëíêËó>¯wxßžjªZ,–nžµ±Äø÷Jòy‡Ã–Mg,6ë¡Ý.r*xøð?¿ó£Õµ háÍõxÀë››_–“T(½üÊ«¥|1“H€½þâ+§?¸ètPÁ©r‰š{ 0ÜÝÝéqºægfñ-ÐÓlŽ‚¸¿ô•ß|ÿgï±ä'Ì<ÔˆÅL­”1ÑP=¼/ louuu}}ýÔ©SÌ öè£^»v­˜Ë8xðÓ3‚ó&Ÿ/”Él}ræ´?šb‹"8€;¹'¹®CÖ±FlØan›ó‰'žcf5(q†ûø£óá°¿\)56D+¥œËEöÀððáª\Yß\wº\él&‰ÎÎÏE¢!ìÉ”+ÝŽ°µë°‘TYÙÕÛ×ÔÒ$ìœ-Qp¬&ILÝ[LXA äŒ%Ú¥û¶ÞgíؤDòG²È«&ÙDz”=A§ ;aù ªY¾¨M£ŽÍ¤ßÁ75]©º$Õ;¯V1Å:e éRUËU`¯™Ã^Ê‹b…Œ™xc‘ª/ `|]$Æ€Ÿ*žê؈šÅ,¸®ª¦‘Yx»ŠáW  tÌ(@µ9XUuž¯ÂD`®´t&I™-6A¦Q׌ú$[Í0¼ŒmS.«hjkÏ›­ée«y=þJ¥ !€e`ÄûU⛫'˜õ^·«¯Të*Dya™ÀÌ.MN—ÀQ…P ˜ä+GŸ—¥BÌ ¿bMæ­6LûV&›ÉäöïßÕ+¬XËæÚ*̦`€¾ ‹‘,²ødGçÐÚ˜¢½{÷ÎNM²ƒ"êÛ!YÎ_®VeM·šÈüp@æL5…ÎòÉŽ6C“»¡ ‹RJÑPÈ.Ä]ƒ@ÀeQ¯JäágOšL­*8ÃEÏæBMa¨!ìx·¼°•jÚ¤ÂüwéšÏXæ¢hRÊ’¾µæ°†æD·TT©•‡É®˜KØ#¸3¶¯prQ.çÊ?Q/”)Wª"¥Ä™y›+SKUÎëu—k&*Ïdw9]Ф×"N¡TQ“ébCƒÿH_7gò^Ø1Jè[Xš,•³°ï P÷v»{qyÌë‡í_+¤¦Æ6¯Ë“L§&ñõÍg/\(HJsï®Åõõ–æÈj±4:rQ—ŠͱPÐS×XŸH§¾ÿã?Ž(¥§gãã“@¨«é‹/^êîê¾5ëòY9¥–\YÓ%)·•Jn&0½G†— rElHh¾j!v¹FîÝU÷ƒ›«K0ã`wßݽxïÞýŸŽÜ¼?yíØãG5EËfªM‘Ž;\Îäû~÷?ü‡?[\\êÛ·;/êOƒÍº~ùæP_¿×B ­T+†Zûžýò¯û‚á¯Üë­‹½ô…¯ >zæü™Ññ‰G†‡k«jEú䣲é„Ëê\[\yòÔgú»ö¼óÝw oMåW—ý]»f&gNt,½¹bQÄX[3谖ܜ͵°çys˜ðNJ-*ÐA Z¡¢ †á-á?ŸËŒÃçxg¬%uò#_ª`dáG *Ô)•ò nD'–·{ù@ [Ê “KÍd³P-/+¥˜‚ÂZeƒµÄ~V “su/Ù`ެ2 #;ÞUmV°DL!×›É{`ÖíjÍ\¥³û"í7ö˜‹,ÕXª ÈnÉøbí£ŠÕ2…XÌV“k*£ÔÔ­Ðá`ý_ ò0¹<µâmk‹ˆUcôxdvÎN¤ÂaÅeØT@<°DmÀY€‰,»œ°÷2apÙãòÂÈ%[X G$‡—)WÒÉ-`!pwÞ½{7Tè#®§ãoX‡¥’ÓîK›…Ñ7zÿ.FÚ;p ·´´òì³Ïª™¶~üñââ²Å®îÙ=ˆÁC­2wuv2ïïl£¦ö{öŠeüÌøý÷ß§ºQ!ËßüÅ_z +‹›ªT}ô±¹­…Ùeªr³gÏžîÁñé™P8ŠWƒ]jñÁ‡çûé¦HÞ+ µ©±>ŸMOçs`ëõÆ×­‘ õá/ê·zë#_úâ«åb6 ¯nn@œnÛôä,T9gô{ÀkB Œ,†ÖS‘Læ˜7ÓÌëAª*ðyš«@Þl“‘ÒÎ鼦1ÿ(‰&7õ¶©N>o„•IbÎ&LÀ™B&9ìôZYd2*â›ÉÆ™«ÉÌ›eÍjGLºŠå9é”%ØÕðU~Rœ_¬+!sà§-à¸ÙÜ5I5ž"Ââ£Ô%k:ܨV6N‰¦|A•ÒÕyã™3aÛ6/UÌT–ÌD—9Öè‡ü±ãYæˆQ"ß0š°6ó «TRüYÓs¹¬±©lP0xL.•w4Xã3ø­TÓ±s)ƒUW$¹j4ä ¥²Ë'œ@8âÉä¾½{çÑc³óó“cã›Íïõby6מ‘6› vwv^¾~÷ÄÂãþÅb>Ü»;ŠûÃâ9r¢ŽÄnܸÁúÐ ´uÌLNØ·¿­¹ì#Z‹Ö×Ùìö©©) 0ƒ‘5?Á<Ü¿¿ëñG§g_|õp]]Ëf|½»«nyÞ~ñÚU´& êÙÛ×å*nòÄãOBÔFǧ©$·Rûûÿþß^ûÒ—±ãwîeò¹GN• {4” %Ö0³¯ÔĶ®Î·ÞüîøätKc‹7èž]šLu´µ¬l&«²~ãÆuPÌjUliiZ^^Á"ºÝ¾ÆÆ˜Qi¬Êk&±ZÌ¥SB­*îÈot½f6P¹Dëý ÜH£sô¨õ°c ÂjБ_]Ø.—§¨Š…²U\LMRÍF‰SB=F`Ř“&ðVÁ(ÆnµÎ‰_f µ“e8³,@k@•nÒ¬6ÞVáÜjJÕˆ/,ªš\Ñ xœnæ5òå©×P©$Ö˜¢³øW›J)’Œ;Ñiõý²’£*@‚S⥱Ëív²|ñƒóhFËJ2±SC£ ë"Î\’;Ã.W4YªF£nßÍ»¶±®É&/0==i§^Ï’tg[믽üÒíÛ·?øà£û¥òVœÊ.ƒäx½Þéä¹¹¾ ‹!ŽŽÊ²z©pžÚBäÓL°vp ïÚÍ;,¿£££½½3vþ?ñg¼ªÝ©><ô–EH¤’ ýtP ⻫ðÒ•ËÀ-˜áŸ^¹üÉgbA¨Q=ñxúç™ä:péÃ_¼ûåg_Y\]M*käW­c®åOΞ;pàPgg·ßã‹CŸ|röâÙ3»v °¸¼ËÄÄeÉ2þÉ+º7à?üÈYU©ŽG5Y Åü ssM¼¥Û´™¤Cùšh·@“[b±H-u.BrJ娶ÛíŠDÈ›é²;…l:½'Ï=H~7¢G½ðyÊ^6a)™*&˜,&Êc–ÀüµZ“µrE†…‚˜Lœ¶#[`<,LZ°Ù ÿìÛ…·x-VÃx‚•“ÏdYÊ<ËÜ`¶?ëWÆäc£ é Qd˜ÛºIaίR±ª+i•Î…  eE•¨vFá/U*G²íˆ¥¯šÄŽÁœTÊo‹ÅFÛI§ &<ŽåÜ'¢Û<ÔEÜ€v¦œmÊ믙ͤëKåKÕð‘yä`©y޵µµÎžáññ;0º>l¯dz‹7Ùêbžƒ‡`¥U±&˜MŸœþåâÂÂìÜœÓéîëîጒ‚à$œ¦g’):öÌd»3‰*R­¥¹B¶¾º„Ïa?|úi€ë¥O¯8|Xª)GýøôéÏ}îy©œ²r|b3¾´0‡…‡hu:ÇF[Òý0Ý^~õ ÉT†Ž+Ç¥– 5ùä“OaCW¥r¾v:ín§åø±“ÔPY’ðj»†vç»oz\@ äutìn$VßÓ×?:618yü˜ßårÛ-_øÂLÔ ¥¬èÊÁýÃ˳³£·oÁ²éŽEöîÞsõò•CÃ9“¾07•Ë– …P°P uî`ØîtÞÇô®¬.¥òb8 ‡É§ @„ƒò[ZZ=uüQA§È¸íJõúC)"v§7Ž€€ˆŠRc=0)‡ÝåÐt:ˆËdSX*ÆÃ(pS1NMA#ÅT§^Ó¤ÇeHá¨ÜCv§Úéó(&ÉnôÒ…ùÌø‚áF`B¦Zä™àÎUÕpÓê0ó-ez(25,æK”ç©ULÆéÅ iV¼ Q™y@aÓC@ŠËV §¬NŽ ¨j#ÃŽBøýäúÖt%ðAáS “f4vrcl˜ ãPƒ‚î ²!Òù,•Ò¥¯>õát¹  Ùƒ{Ÿ_Ì峯ÍévÖªJµ$'’ÉdzœPSC½]à˜ßh0ÐXO]“gggÃÁP!—ïhk‡ âû¹K—ucó…CApþÍÍu£ ÊvÃ<ô V×PñAàðšË ‹´wÃR¬ØÜÜ\±\ª7Ê^€Ü»wÏÄñ šÌÏ Íeó*gÊ— £#Ÿ߇víÚXZÚÝ;°8>A@çvïÚµ  ËŠõ]:{þÕ7^gciˆÄ€èÍÍø£X¥ÆIFuöìYØL_kˆv·wüì‡?ÆÓ1r‹™ƒÆ®SŽ–úb)_×Ôé xª(]ñ8ì‰D\3»aBã&*‡“jÌ@ù•Š•…ùiÁç 3¿‰ú –3Û¤âh‡«Æ9 €ª Uë ØË¢yOpGÖ:Rç`)¯[-v £ÀÓ'fªÙÙv[8ùÁyý¶ÃßFÉ?Žjå0¨crib-bfY¨ÊN+T3óV‹F8ì³Õ$We¾‹„ç‚4›ðjŽlAò0i,­Ïà!j­J`L;Âbœúå03ÆÂž2¶g í„‘&˜ý5;x¢Õ‘S ²,a‡D¢!›ÅŢݘÂÅ ;öòË/OL—>¨ûÙêZQ–kÍuV«æÓ%Ÿƒ€ÐÒÜê÷K…r:]œ›KmmAà@!ðÛÁÁAÖ‡x,pÂÊâpxOl`JZ[[=LÙK[[‡ rþ’Ãé¶ÚCGï»sæüÙs0Ù°N u1Èö½ÑQð–¦ú —öxþþ¿ýÄ“O×56`3´¶¶Ÿ9wÖ®r]»‡¬.hÎÐÀ@&¾óG–ç0àt¾€G`'<÷Üs¡@èòÅ˰„À†÷§Ÿ~ åqºR[q§R5çl!o÷8`®¬Ð*˜™/erjL²è\9]Pä²ÇbÕÜÎ5YdÌ¡T.j‚u}3Aí-ë4YìèÙ«jâäÔØÊÊ"î@­¬ìöÖÖÎBvKpXÝÆÑÐ6Ú)w/ª¬0 *šSªR¹óå2ÇZÕçòàNØñ…bÚép9tÏbö@CM`;fL&ªC¢0³¨Jü¤ZõÝrCmg?›‚‘±ø)&4ìdÕP¦±a:Á$î(Vd‚•Jïâ©I-ãq&Ý¢©UáÌUŽ!WY”`ÔI¢‘¡¡)ÛTÁÈU2=ìx›Õ²Ÿ#çÕ€† ÖܧÕJéíV‹¶Ù­°Ã0z’]Þäñ¸6V)‰ª‡%œ7 Ñ·wu/­ÏÁÍ}FDðùl ÷¹\‚"Öì®ÎŽ.›Åzs궉ÏíÁoh]þôÓ×_=•Lú¼ÞD<Ζã•W^ô..Í®®.§ÒI'oÊ~ðÁˆ5б¥­½Z«½óÎÖ§ÇOú¨&Ö¶6Ög'¦ ™|,N%å…Ù±R%Q̧ñ"ì- ×ü¬f¯×Iš1H –» Ћuó—/Ù~ùÑG°„V¢ã=­ù…²Íá*”«?ýñ»XC¡,g %J òu¸¸¾ª˜Moþðm€¥Ýë®™´@ƒ¯±¡ù‘S§üþð±'Ÿ¿qkôý´¢óm=•…™ë_yís~WÈ¥*xíïþãwr¥JcÐSËeÌÕ 8›wyüž‘‘‘Ǽj²vôïíæy2¶ú1r À+/½ÜÿÈÉÕZYÔÌ®ù¹Äžáßùá{ц¶šœ€YXïlrX¼f“7™ÅLØWs9«W¿4r±§`+]Ú7üØÚúÊÒÚòGŸœmjoʤVÓÉUp~3>¯é‹‹Ëàìm¹\ñƒ³§×3‰Î®¶•Í9^µ·tvbýTÿwG}Q«bsb$иlÚ …‰S îƒ8ÍN¯k­¬.îÛß¿ëÄã‚+e"©’ÙK‡?tþµPÊhMV%x1QY¬”Èa´†ÁwjÈçpÁ^aq' ÔZ#UÜ@‡Ž«tŽl¸„L5™ÜAÅ’â¦!P£Š‘^"¸œ^Òì*W¥zÞ@w‡d—ªšHMBÌ&‹•c;‡…¬³sö¡€”’¥*5£ 8o4šÑ$UbGµÚC•(Õ þçŽÛHà­*¯ž]sÍfÊOá“Õ"Ûí®ºXÌÈÍ×)b´˜©I&±¢‚xóf2° ñÄz<± v˜ÚJ>û쳫ËË Ú˜œB.W.#ÞöRK¬aqy}zbòñ§?ŠÄÞ~û‡ …d{{;žËRÑa¤cTÐõ\™oïìG#§Ï\¨ˆµ^ú¼Óëý›ÿúß:‘¦Æö¯}í_Ü{(©?sáÓî¾þßùê×Þ{óØ™3pK X†í ¡7eù[¬8&F‹gõõváýÓ[I(È¡Þ]§NžÄÏÐÁç>úvCcÛÌÌZ&•Îd—Zêc[닼®dÓ™ñѱD<ÓÕÕ Õ17?®s¦Ë.án£õòÜâÒW¿úÕñé)‡Ç‰Yš›ž¯Å s°=ÀY!póóÐã€fPyŒ¤¿¿ŸÅRÅÓTv´«« tÂ399944ø_ÞÜvI{¨^8yÂÍTª†­"EœÇO5rF)“EÓØ £‡™ðÐäLðU%#{꘎¯(‰žÔªÌ@—\K&ªSbx `JK3¯×ÏúABŸ:¬vÞ!€Ëj5ÊfR L±¼bÊbÿY&†±+,À0pZÊ‹ÈÎ#2Ì™æ²;Á\,A{P íáS_ o3ꌒKËá0šðj”èpyÊ%YS)d–vˆ\å0ZÑïóÛm.“‰9øú†(ÑS3T‚k*5ùܳÏÞº>r÷ö¼U¤ÔäæÞ ‰™x‡Í¾1mŒÙ?¸¹• ÌXYa­¯~x¯½{÷¶îêyûGïLÍ/>zâ1Mçã©l<½é ûç7‡úú¥êåÉÉ)2ke§‹ÿÉO¿ÕR‘ª9#½*CRdÞJÕzAGGGYŒ,ÄkgTʤ._ƒ Õ‰Á‹o%@Z:ú Ê?úñ·j›i/°¾² ­}ïîíˆ×žLn†ƒÁƒÃÃëk[}¸áøääñGý¡ ßîJÇSr¥&D„®®Ž'Ÿ~rlf651Q­ß³w¨¾¡nÆ ¾@ø…¾ðÁ'#˜yìJê2Z-`T¾C(Á.¾õ­oa_544àéçèÕ+ÿQå lÖ,’ì'³¤HFйuJml(º™dT€D‚@>ª\ltenpC€mºQ+ÊRÈeY@n¹X`}˜,‚X‘Œ”35g4b¬¡ +åªÕæ"Ý­q6ØV‚E5WäjU¬–ÅÒ¶<1^Ë\F‚¿¤ÏYùZpò”±Já,£ (ÿ qŠö Uûb‚«² |ËJ<CÇý²Ù"8JEI¬1P&¦Óes8·½Þ(~E[¥P”C¡€Ó%8]Ö{ ‰ÍÍ|6×ÙÞ1µðB]4¦+ê•ë·‡‡‡‹%ð|­·¯»*–g&÷ô}ösÏB.AŸ€€¢[·naÌ»wï¶<—k (bµ446CßMLcQÔžíûßùn,Ú ÖÞ·Ðf7Å3©–P#Èl«T)ʱ±¹Éíõ°ŠX8€3‹ñî¸Òe¶(•j:¾€ ×E]>¯¤«ùôÖŸü‡ÿxùüŵم۷Fš¢ÁŸÿø--ÁHP±Úææ!£4“ÏuwwûþT:]Mäê¢õímn¿ïîø½+×.ç‹y—ßSÙÜ<5«TÊÉŠèt¹nݹûôgÿÍÓ˜¿ÿ>³ººzõêUL dBJzíÚ5ü°oß>: ‘¤ï~÷»>“*`aµíæ³&ŽÅÔA¹Ã¦†ÍFAì¨ðA GÞ8?”éì”8«`ÃfŽ€M×¶»äÐq0\¨© kW®:ív¨NŸÏôùñýñ)£,¿ÏÀ"EÑr‘RªKKÀ H'K“:yò$,wªb"G‡÷ퟜš9ûÉ麆ƞÞÞlz O6êÉt¸¾« ?ö¨ÅañÍLNß™u{½XÄt6[K€S† gææ*üyà%Þ6ƒ0YÈî&ÂQ[Ì ÐkµÙÜvšoyi±Þç½}ýr$è…‰ëq9Fg–<Þr{G/îŒ?±;mùBÁt/¬¬§rù"g£¬ƒýèG¡hÈÆ›ZÚ:&ÇÆâëëø8B¤µõäù W=Þ஽{O…BP;ÐûÓÓÓÆá³¶¿}?ä5Ã`ÀØ·xVˆSÉÙK‹M}ÖpSìZ‚U“.ÂVe ëeÒjJý@F³Ù‚Á ]¬›Çvh­fÒÂVã?ÜF‡¹ýH­;n·óWíJXŸwز»hd9ŒvöYZ-ƒb‚¬:Ê@°fÖaY“Ídµ2/k`¾1ÍZñen5#*T&%°Ü;Û.¨¶ ó¿úÚá9¸^×Ï1‡¿Ð¼Ãa‡2­ˆy¼l0h$h2¹·t³¢ŠN›Óíñ Tœ¢Tªtwï›fÀ¹07ôS–ºHTSˆTÞ?4;5 •sðÀaš„²hlSóãÉLK¡Áͱö,hhÚÞÝ û©˜Içmv(ÏËçÏC•Ãü?wî“/}é‹÷ïܾ{óúc'(š›ZïŽJE:F‚ó5Ef?¬¬­Æ‹îI±äfsÀ¨ÃŸÓÙ ­ Ãa¶Z²¹ÜÚÆ†ÍaïíßõOÿôm;§{VìÐæúðÐ@7fa|zfb|ü~ÿO=þøÙó—!î9èò:=>§VáÖÖWçVW뤲ÇåÜX[®ïí˜ÞŠûêÃ?øáÛŸùÌ.[=žHÔ76]¾vóöÍ›GΞ}ã7(ÑÙг³³Xöî¸3¶ßøø8Ɖ¨<Ûík‚lȨDUßIÏ™©ï›F¥gk%oõ’©w‚ºÝcIÕ¡((†Ò¨\ Œa4Ôa·ù:,½Îl³Q!Q2tL¤Š3•«¢*ÂÆQŠ[©CÄj –RYçT»SÐԪĊ&S–>!e¶·U¡ø!:ÃKÆ8y3;ƒ¥#:€åLš®HT\z8¿Š @7JK³?ÔTXßN ¤ÎÓ°~l¤Áé”Jœ*ÆKµBM®ømnÊÉçñºfÎÀm¡šhÈ+”•›9|üöíÛM-}sÌ å¹‡Âm-­7oÜ 4¦ö¦ùñÑ•Åt[ûæVjim•Ëb~XHàèB´5¨dŠ ûbÕ®ì¡×®öôõô¶¶è’xàà^h—©é1Î…ŸÿìÃç^|Þå `±!Ó˜Ìúz4÷ÍM$*çf¤àâzFÉ WC"•LÆ“.»©¡Ñ(õ“«æ‹ŸyêÔâøxI¯­LMZ©YšÖ104»´¢‡á½õæ÷¯ßº÷ü+¯œzâ ‡Û6·8hlðFCŽË¦7®]ÚÚX‡Q—w+žPkRKk“Óí¼6rÃl¶›y+oq—––Þ}÷]pVЃ²É@…†ÃÔÈä†ö/Bðô]”Øéh³HDy›_ꚉU µè´;Llz,¤[ïÏÊ~@ ŒB;„MLF©´'%ÂUqTeUWͳÝíðKZœ5µ`§˜w •uš^©YÄÑS |a­ée¹¬=¨ÌÃÆÃ(¦ªèU@¾L§”6r3ÐËt"oŒf9-Ì4ÜySõA[Ô_l,øšN}+:K 1q²jT©"N"B ”Í Êt «]±Z…r¥d³:Þ>4¸÷æ{~¯JÊëö\š™íêè„Ä0–S¤/¿ñj2“Ÿ˜US®Pa¾'H«¥ÏBÍT¨««Ã† cÎÏ;‡sóæMXôî«rÿÞÏuƒíVSi+߃€º–·´“œÄ¼†lg³ƒJóƒ"£Ì‘,•Žç8&쬬— sÀQ4>#‹;5÷XúÑŽùÌ"A™eMø¤ªF½æj6›&*i$+gÅ2+B^Y™rð©¤ì:Åÿù‡ZJ3œÞ†XÝl<”¦¢p*­ŸÊà5¡ BX`ÌÉÇ {ÙÈÃ.`É›šìV—T–zzºJù•xÂjµw´¶áP³¸¶ <—…}@Q#0/l¶T*Þ»oàÙç^ôû}cc£gΞvy¼é,UPÚ3<=3™/äðÄÖ¶f MÏ̬®.cg®_8ÿ¿ÿοääC?ú d[ZX(æ³ûÞ5½=ý3³ó‰Ÿ¾{Ëæ8TV 8XdÐHÑÀÀ‹nb=7v"s÷–k¼õÙtòú«µ5“,•Th+&Tlˆ &1!+í ½¬dÂïN„ÑŒoÙb%1#8S£¢V“ÄrO+ü73`¾ÿÁ dj|Gå&dð€Â’u”Ëç2Ú¼F”¬âjØð¼—ô»y!{™ÑL©‹Ä^O€Šƒ‰ò¤´¦ž•Q`­ÿ^d©tì=º½"XÍ´Úå¯ÂÞÌ*u·Q€ E¶>ÐÈ»EZš¬ã(ŠuX€PRËÍ”òh&›2›ÎÅãÐ1§ÍárzzïÌήll-`£ØÌH± é¤*“,é9}m]MC£{¹±¹‚õ.•õKsKG~ñK¯|ÿ¯ykº{VÉQUc6›ÀðêT«½¸89ûåW^J„ãøÒ¡¡Áé¹Y§Ç¹¶½6uoêüÌÃÃP²¬š*Mý ’¬ ÄŸ@½>6¡Rfyƒ‰×Õ×7Mè‹éÆÖz{Âl³– ÐäúM&ívgGkó»Ó½½½í­&Ɍǰa»mqá^[k³QÃÁL0˧––[ÛoNNèôù'ŽÍL¬àqHaáá EËK%Ü— :·}¾ºz/Ìr¿Û[íä5 ¹ªš…ŠyËü2•xý}#¾Y[qö_¿´7—‚’G=ã ”P«)J¯N¥ ©q¨ÌV+Þ#`ÿþýÑh|msC6Êl’ X9ílhjª»16ÖÝßÿï~þ+0|.|úi6•žžž~û÷z¤È #Å{s÷ ~ß¾aØõssK¢¹üÐC'v6}þÀŽ’ÏZ`iª¥¯¼ò¥ùç×€=ím§=êôj]}-qìÊu‰T&mq@{ê,²Áe•Ÿ8ýÈÑGžF‚±YÌ``»k /vttàf?ùäSu=_ÈŽŒ ú—gzß|ûgŠNŸN»» ãÆúºžîÎX8|{|ü §ÛÙöݸví—~á²™$»9zãzK3EÃæÖª(é]n;Øj[k‡ÍæÜ\ë´ö"¸G†S:­oäõÜ…«6›¡½½¹§«åÆõÏÀXêëškjj½ÕÛHfëI¤9ÉIÅ‹‚~oˆ7î7ÀüD&Ž¥„jM> 4!‹0X6˜+Æ2ƒ7‡„1Gz%€Î¨­ÆJ5ØÎea)$Í%F-  $F”ίiÓÔ=´¡zß½ŠSIËbÙÅHuoZy¯-:Sô U÷ÆFÞ¾ßû¯XaÏt_…c8Œ‘kÊÔ_§3Ѹ]©ÉáQÒŸ†L¯¾ú*¨[$«««‡ á‹::ÛCŸ²ÒØTwìØ±¿ûþ¾mÿÄíIõO?ÿ£'O½öOßû/ÿå¿Lßðm¯h-$”•«*éTavf<‹ílÁhjR#\›¥Þãà Yð‡ýû‡FÃÎŽflvì7èݪßW_[ã„Zšë <×ÚÖò“ïÿ3Ì©N> Áb¼ Æ|:¸£ååeXô¸rÀ0ž³ùUýýý°™Lªšòmlïlm¹¾-ÿ/ík‰L¾¤—Þ{çÝ/>yFä9§Í¶½¶šIÇ«œŽÏ}‚cüö;oáƒ{ܺMI›““·Ì¢SÕ¬6{&Ÿn¬it¸¼‘priÁÇögþúõëGcÙq CÃÝÐ}ýÝ}Ý= ssñXäÈÑcØ É©ÛB~¯S&³™>ç£j™ÉV}ÆFˆÑvæi&Z³žb¡´‹—;ÅÖ×dÒÀz˜‰üîØ¿Šà²*M&‘e…5ŸÏRt©Èó¢ÝJ%"lpÐR¡HÁB·¢¨uA«¤‰TÜò}]Ö:0ÆÂÂÓ¬›Ê .u‚¨ðn¯Ç4v}·¯ïž-¥Û‚ÊVd”è8§“e2Óù"/ …| {ÜÝÛúôé×òcêïñà®wv¶úÇë¢Ñ¾ü/þâ/~÷wwttÔít¥’I\[M]íßÿÃÿ¼yó*V«ÔÐáp%“™d"§–»™Ÿ¸qÕ[S ìàCdƒØTç½~å"¤ ˆücû º ùõßúM\ªËaýûoÿmMsS"ikjüÚoü”8ä©JÒÕ `<«Á¦°¹ÔX–K—.=óÌ3)%ÛÙÓýñ›XÀl6çry}äÌwÿù‡í5gΜ•sñÂDZP`lôê+/½xýêg‰xüÌéÇß}ûƒ÷775,-,>ýÔ“ƒƒƒŸœ»XSSe²J¹`ú™g¾¸°è›žºÒÛ»ÏаÛ7üƯ¼ò ”ɻヒyòù'¡‚?þø£D,Ö4O™¼=ƒ×-NA(súBY¡ü_*@ãØs\ºÇ]WÉ(M'KPX@™x<«K'm»ËÌSõ2õ§1ž‘ðŽ µ€²%™x w˜§‹Jˆ'{0JJh­Íyafõ|(*7›Ì¹|œ5*êpHhè’’åTP‚2~¾¬užY—ÒÙC_æ4es>ñÄív0?¼–¯"” `’VÉâ²Ù)þδ ãÖ ›qúÁ,œà·l;)>i“,#È;à‡Éw:•3A ôÁˆ§ºnknë׿ñŒÁèÝñ'xâþ`N)Vy«W¶7ëaztumîø/^¾–ÊrOžz¶ÎÆÆ–¾¬wÛ«ÏG}dµÊ¸TP‚›·Æ­{gg÷‘£‡>üð#Aõ9=îb6.ñ«Í#‰òÄøÔÐȾhz–Ñs/)‰TUy•RÙ‰µtv ’ÚQ‰ÒÐ᣸kð¼—~u?q’­0Ž0U$Åâ4¿% ˜Hƒª?~74¥*9žïîî~ýõ×_ýÂã¯_~ëúÔ]Éê®w5ù…Í;û¿ôRtiáʸjª›Ú»6—W›:«< “7g[j­×>û°¨æe§ùÜÅO³9åоã÷¦ïzÝN½ÀçRJ!#¼÷ÎÅ…¥€ÍòúÂá^\ Î걇üן½‰-¨®¯…PšE²>×——nŽÞx饗¦îÞ|øá‡©vS›ÅÈR¤ÊÚ¬FFI/x=ÔñP‹\“jVhJ<¬Ó)ÜͫǛƒnwª"õjT(/›/h…š…R8°^ñ71¥ÌþJ_¦¸%KðÀïñCžPÒûùŠÝSuê·Ï|«Тê…bŽqGFˆ2[›†“©®×X53­ ú¹ @²×íUð{£"Õ½‚iFÇy­ÞUÔZS)» u‰ö…—ÉAÚaÖ6 Ù€4ßÎ6§ý9d]”$HòYòÔÔmèå£ GlÓ3~ðƒßÅ÷ûþìZ€]0Ì”™»÷ þ®]» köºÍg"žw»ÝIN¤¢F³ÝÌZêèèš››ƒ–góÐâ©$µoOS=O·PîÔ(¸\Ö@1‹+Ä›ºÊžžªþM§qÂã·'Nœ¸59ùñ• ƒÙÚTã]^Y»1q»ýä¢.m:Ô׿:²„EXÝÚ¤*4ìn.×7пµv¤¼¹­ 83óæ#©tg¯¹³¾¯·?•¡RD‹ÝqàÀ77ßÜÜ ðƒòÅ—&3Šlqg}!$Mj1 ÷EpàAôs9—ÇCži])Kôëë8ÇÑ,‘(SŸM•aËÔzYƒV!ÈÎ?ÃÂŽ([L¼>»´”Ë&좷˜Ž ’¼ïø·tçvSmk2ŸŸ›ëéêœ;vä²Z²[mŸ}²G_üò—ßûðƒ—_~åÎÍÛ7n\«÷Öô7Ž,--í`ž7 8jÑH(°]ШkK(e­¥©)‹¢@XYe0 ņb7Û'°¸#aL©±ÀºÏ·É8u¥Â‰A3Ò™g¾b¬¯Š£oÇÅÆbQv{&#•ä²…x,-ñouuNU"‘¾°½­ýÈ'±‹ kç>údß>ª!NzÖlžšš†e1uVp|·×]â3ùRÆj³K*,’£'FV×6âÉ$up¨Ïj·Äã±€LŽ¡€6,ÀŽOdïlðd0„zeö"L*•däJk b¡dbí–#©L$°eî­u…kcŸNÜ[ZßùOø» ƒ?÷Ê+F£aq~ö¸ÖrK‰'›;]ÝׯS?ÛP(xhd8 Õ ôJ&óN £Öjµ8]öß6°|°¿wqÓ‡£‚ ­ÖÌB`Iž¸$,ÂÅ‹Ÿ{î¹?þxÿþýþÀæçsîØV±%RÅ… '€J>O™A¬à†¸HZÜ“’™* .’o?L¦qLX… ,*¦ ŠïS¿Hªêã˜SÑé!þàÀØWÍa¤g1ÎM /RSÍM«ìÕ2f¬SMõCAkMp¨†™%Œê+r|¿×W*‘ݦçˆEhï¤î•à쀕÷úì¹Né Ú!!o®„\ 5›Õà¢ÏBÄZ¿5#+wüðܹåUšõFƒl“N¥7ÛmÐÚÙd*Oš%c8Jijà±h:à¬ihhq8V9„ýAS¾5ôÁW€øbÍhd‚æ ´jaæÁânm­´Õ?:Ð}zÖ—œßIßüË?ûÓÚÎã###W¯^yãÍ}î…lvURˇ«¡¡éòåË*¯âœh(l¬­Öq|(mo¥0¯çîÍL×xœÍMõÉ¢(Å=ôÐC8™o¿ý6~O)Ï~rvvv¾ñƧOŸ¾yó&k#·´¸.0guŰeõF¤ÑÅÊ‹,|Ï~E:Kë Å T¥&dE…&&–*}¿Xжœæuèù¢’û_r‘Ø;M²‰¥Ìéö2ùœ;.;eqWAk’Oì3ËiMr´%’6u/ °ÛKºc…ùªEk®óTÝ! ÚøF=+>TÝ}{ ’¨(„⢇A-µC¢P‰=n™A;›•ˆÇA­­©Å›m”G‹ÃÉic$èGu,•„úkjó?~<›H³œøP$ Ü•MŠÏ·óÓŸ¾¹ä ðåñÇž¸uû¨9¼sg'žÐÕÕ…ëÇ– ?°°8k²ð*WJ¤â²ÕFCÞ«kÇÆ'š[šÖ×—‡zf0½jQÔGbáÈf–ÐWѦ¦& ô)ŽP(ÎfF*@,6¬Éôô4Ìþþ>ø,µÀÆN#VfpdøìÿÜYœ›Æw©zþ‰/>ÞZòÍß”=ý?üþ²ùÌþÏÿùÎÝ»4%P«~{ýí·¿ýW¹°¶R×\‹í»rñ|­Û ˜Œë© /Nà募¦q,’l6­-¯D“Y6apaao{õÕW±þW¯^­vÙù8]ûöíà LMMAÀl ¬ËZí2 96ˬþ;)$ôo2e잪/ç‹åB‘‚F*o3Z±Š–KÂë5¯OE2J™óTÕÖÕ6Q™N“µ™M‰`ÚÑc]¸9yòô—õ÷g°Ù¢%$Õr4šÏó:‘ߟ(å ?¼75͉F,JÞb»;)ɦdšJðjê<ápÄnwܹCùü ©`«--­°fxSº§µ½Ô9êìJÁweüÍžú¥…’ýâÍŸî8ðµ÷Ûë+]I¼}cÆ¿üâÓg>›¼ȧº{ús‰T&ÊÆtAõ¶Öê 9ƒNÉ&ãá`°½µõÿü“?Å‘eïhõ·}³“w²Äj=Þ‰©[E¥\_±R¨HÜ0™Ib±®žÎ•å9OCY—OŽZ³ÎßÔ„Q-{«ª ¼%%êù2ù!Ó¹b‰bAÚÄb'Xœ¸6n&¥v¤ºl:I ¨«2õÏv»0T´*“ôüÇ?úÖË/ü÷¿þ³Ãûþ?¯ý¸å7êÇÎî<ü¿÷‡óskàµ'P¡Ë[my÷½7 "uë´I¦ZwÕöÎV0èpða·Ã9ww |K ó6;ì9°LP޹ùY·Íqìè;›}½ÿ÷ßéìîòx\¥0éÃ_|±khø·û·ž8ý˜®Äª\¨ Éîx¶Ì*ÂÃmwLIœI¦‹¹bY—ÍS£çˈcž&j÷BLóZ(h]&•Ìç2UüN¦Ò»uQŒ6T¢—Ze}‰‰ CõEmئQ2V>îwr1?”no|™VXLa$«ÅC^³,u #n`dùY8B*Î  ×Lxú"O'Ž:Åe´¡MÔÎÉ@]ùYë5#Ç›©fP ¹"঒ÄðÃYÂQ”¢^àÍZå“–•Zæív'tÓÜütIÉêôE¨œùùù*o59ö,VVÍ 1‚@ߺuËé©úÆ7¾ñwÿï‡:kkjà-8  ¡bmmmŽÇm«k‹àgkx•«Öavðª~vvúÞìÝ­íÍÚz/êŸÉŽ.nysÛǾ&þ MŠS±¾¶ÆØsO?×ÐÐðé§Ÿzkk<IÅ à"=®fRîæÆ4¾ªµ;Ý\Û9òàÑê–¦sŸ~ZÕÓ¶¿·Û·¹ÖÜÖ”.'¦§–&&&?úàÃÃ#¿ÿûÿþüÕ_Ü™ž¨njoª«ƒ(Ðl†d¸È[3sï, ˆËûÑ~ÄÜ85ÕÞÏ.^øÎ·¿óµW_Ý´YŽ9’ΧgnÍXu%0TŸÏMeXžÓèµkƒƒƒ5Þ†Ýî´ŒÏíb «–|nÝ –4°z¨äÓZ–õ»~DykŠÂQßqU)ÂNIó9U!G£ çrZ(H¿7w×!Oµr"ÏÑÜXJej)¥ÓÚ¨%~×÷ÄýÛ cÈq…Ô²¹ºLÄ-²C)é´tafôðä(‹Å‚N µ“ßžݨ JAËAñö&ˆ¿@¹vœ²ÙE‘ý²Þ`,éxÅ ©&¨©š¦X<‰äŠj–¬Dð)«sČ̊ÇãìîîGv`~¦ÒÉR‰ŠIð†ã@5ˆ¦·XÎíM±&’×®]{äñ/àuH­±±qr~Þaç³jR¢”ó8?‘HxyyUm>ÃUèéîÃ¥®®-onoỀ‘‰ ˜áxN“‰´Õ`EQX´¦úš~‘ËÁ.Á9Á5êpIX XQXk,#°íÖÄ|ö×ÉN2>ÖôÙ÷vöã §¾øôØå n;Xç?}ûo^úò¯<}ò¥³ï¿ …!IédøÂÅsŸ^øhdÿ@U]Ëfɧ¢Þ*ÇÊb¹½¥Y)î-üƯÿ6ˆ/è/î îJX äìþ»¿þ+§Ýzìȑٹ™P< òµ³´p걚þð‡.o-ÎÒ•+W¶ÖVžøÂc':)@Ô¬šLË‚¬Ý²J=!êx¯W9ÖJÜ`’í€Uìg¶ÀÔt%ç’™Š‚¦ÀÁd£TÔÃæ dÝ^šs%ݳòЈ&I]>C˜åvgˆ+ÒÌï ÑcÎv–ÃÊ^©ô›`ùÈÔ4…"–Eh"»"y'tZK`Æ# ¦%-Ò›’e³Jé2z“,˜BF•2MLõÖ¶hÖ[‰ú|¨yȨžMÉ%ÅÑË—8I¦k/ušv©ÚíI§zNYYYÙÞ× $Îf“Y¦u,Ð43«Ã]PÈŽæÒ¹<¤óÛßþöÌ©¾ÎP–¦ôypIÁ`ÌçÛ€&…¦ùÞ÷¾÷_ÿüoBáàÄ­q,¶Ûíyú‹Ïßžº56q{ gßNÀû—,¡ ©|5+‡„ØQãf3™T.\8|ø0ÀþÂ¥‹ÐõûF†Yb ‹Ë°1ÀÖ)ÆS_×>½Oé³ÏùËÉ€ŸOeâÁ/éþú¯þö™§ŸL$ÑÈö›o|¿¡Áóçþ_?úè#Þè)¥S5UU¡àöòÒüÀàP$®rWCȰ SÜ&L7ª°Ðzñe hy^QO?þøÍñÑ»ÓS'N=8u箜”ŒÓ b°áÛÂ>âa¹tW.%-¦êJ…b‰'"ˆƒXÈçMf»‘—`Á—¸RI€šä™ß¾¬D*~8èg*CÔª,ÁNRdC>Ã5µRÔÀMñb^̽T@Q8j1BId›SÉ ^«B­ §’‹T 2!f½ôao‹ÑÈaDiW§$—C9S¤¥"ušèFU§õIµ˜©rU_¾R·Jµ”±6§x (Ïçd¾D£h‹éLN' 2ÙɺÝép»\N‡Ýj‘ã±M›(—gïÍÐfKÖêjІ_ýì²ÓíÂâ4¶´vtt˜,öåµuÉ`„Ñ}ûÎ44þìü¤ ÖXã’mh†PâðA£°|ÀÑ·Þ|ýÀG¦³à·òé3O»«ëoŒNQƱfðEâ1¨¾Á¬ôû–ö€Ñ žLÓ~­Vln0ùä“O\V H&€ó´ºº - XeÄÅ')µÞnÔ“‹ŠTß\³¾1Ý骽õéÅ_yå˯zÑî4?õÔSëëkFY¯M+_¿~ÝïÛ†*¼uãj°KÅ…bJàÉ>u9ø4Ø èà'Xùàò’‰XG{›š/þäG?¬«õz«Üá@ «³cgu×vòØ “ÍñÚ¾ÿÂsOoo¬&c‘·ßù©ì„ˆŸŸÓ†­çYZ‰ÝæfŽF‡T4/ –2­$º3£DâÊER7ZkÏ’¾¨ $Ñë ‘Š~¯\¤Ò¾Aówr”B5ý¢Ö§‰×ëxè}AÜíë±KÃCýOrá\•¡¯ßxã fûÎÌÌÔÕÕá"¡¾ôÕŸllM å³™«W/ó÷¾ucbÿÅg€xë­·˜•‚“ƒ½~äÑLV±²Y-‡u%ª0ÈmžÉ˜v,¯9Øÿ—ð#¨ \šš´R«Ò¢þböÓò³2Ý &iÉÿ%= Ç1Öi£ðí«‘‰2óÚ²$ °yFLYh¾‚ͼ Ò™Ð“Õ<-éÃ*#£Ì€Ú1««R ÁuÐÖ/äÂa–ì%ªRž²,n`°ªµƒÖsÄx2O)o+å·À&ô ¶Ö’MñJA×ÒZßÓÓƒbÞhkíL¥r6k¦e9iÝi˜ó±v\6ô>ÌmJkkÑ—§Ezýµ®è ¼Pîìj[5›!åàjWgŸÇuîã³Pëz¤Pânݼkw¸O?ñÌØÕ³Ø9¨ò¡}û¾ôÊËÁpèÿþ‹ÿ†í‡AAØ`²àJZ[È1„cdd˱éÛb±HO LÄ289X"`'ý …X.K_ÓÈÅÉó™íB îïêþöÿø›€$yëªo]Û¸>úi&“jllxìwöìY]1YÌåz[º:ÛïÞ]êê.ë$¨ˆýû÷3¢ (eö.®d|t´³µåç~îçîÞ¾)üÅ_üű±>ßV*BßÌü<ôÃÑÇðW·ÆGÏ<÷¸-“ÄIÖòÒ8üK0)ÌÔl¶ }o—e|T5Ô~4—%E˜ˆ2iAU\f‘µ¤sœò¤eg•lËä€R )†,œÈÆ„â•T&¥¬×ŽÔ]Š¡PlF.“N’6WÊ2¯ºÊt<ÛŸÏíŸP·)ÁBúÉ©¯ãD¼Ræ´~Æ4/8=õ,Áˆ“EÒù²`rkÉP<—Oç@¼¶ZÖ ÀU_N&|Ù`¸¡¾µ®¶|UsS([SC݇ýa–p:ë¬÷¦ã™L^™¼={üÐñÞ–á­pa£Åê0xZ<4Éâ̽ÅÚª†s?;Œ¥÷@=tü‘L<é­ªžœ¸ û)¸;4thrjú­eomýÜöÎúÆFsS„ljöN[[§šÎ®®úÆnÎ&Òe]¦09zKP¸ë7ëjÇ&ocù±]ݾPàûßÿ§##Ñíõ¯~õ«ÿøÿ¦ðÚ?*Ü_ªÛk.W)f¯ø2+•¡¤>털É$¥ÇóEZ]…kjhò,+”YâÿQå¹l/T²µ´ÙÏ:­·¹ªg˜J£¡èAnQQë ÂbTÌ>«|”ÆMKŒ;hMíôŒÚ’m4 Q/ðe ÂQ ?Mœ4Qç•2ubÓá HÐQ‘Ð@ “¹\> kƒILZ‹<£Íf¥–*)à5é“Têøé‡Þ‰ÄÛX.èŽB)m±Éú¼9OÛìfŸ¸ÔƦz*«Åf²´n‡B[Ûn¿ Œ_[Y=uòôõk7]N—$ò£££Ààþ_îîêÇ…9γg?¼zõºb|2îïüûß¹xírCCÓÌÝ{/^üùŸÿÊ—¿üÊ»ï¾_ˆ°TV«=•΄ðn³ â¤Öxq‹S“Ó×®ŽãjO=ò NúÄÍOõÊÜ",¿¡D,YÖ—céøêÖZ"´yãú…tƒ |î,Ö³©©eiu«»º<¡µ±icumhhh~nNkäÁ;×6¶r¹‚Íj¢¯¬¬ÑüÏ\.ŽA*8êmQ»¹é»|å¢d0 Zˆ›ˆñØ>J‹²Ûgggð/~ki~~¾¿¿ßÛ\'ÜæfÅ!LF?g¢{YÉ,}I{ƒZæK•XbEpÿ—ÄdÆS³»½ìôÙbo“ˆSナív_RT-i^ÛZ½6’¦ÀïÎn,æhz¥\ë*ÉJ@dñèµyK< !M*¥7$#,qUR€È”?ªÏó",âÔö„L5½$R@ËîÔêåEÕj6ÁzÁm¸f6²ƒwð¼ •1UUÙë½|íí+Ö‚ÂEÂÉd*"›yÖ Š~'¸­MÇŠ×7µÌÍ-àz{J3÷Òé$d4ôw·5о­­ïðá‡Ì²!§qÑ Ä0J€ý©d1 ØÿÀæÖz õË@ ÆWÊ_ÇÒjÁ!ENˆÉmm-q¿ ’á0Ó¬¦í­––f]9_å±l®‡qMB6Y›jqì›[j›=Û[1Pɨª7›,E¥ÀK‚Ùen¤ìfãì©l¢z ¹M(•æ¦6p,3DáܹsÑC‡Y¬Ö»s÷.]¸ÐÖÖ‘ÊdyA„,..,9v,•HBB¾ýþ@4gãLA–g¦@ÙYû \*¶:£E…h*¶(Âò=`f¬º“'Oæë{)'R_yÐý˜ZI›gÆ5së¾b-‘¿`H:ž 0 iZ_EUKJÒ±!Ε0}ÅÚM)R4KU å½,U›RÇÓåPRœªû’6k:Ï.ŠÁ°Ön‡…RÚŠ ×f0h©t„•¼0¼ÎTv …/)Ô¯ÈÉ gUr¥jŸ@#"e“É L—“Ù ÏÉ6«±XÍMáßL6A&GAON%»\*( ²TÁ¬£ƒ±í ås 2uýÌ&ðíqKpÑXV¦ê J%½{÷NYghïê‘O'ã‘pH8Ð_É Øm,D)Ÿ „’ÇNœ ¶‰ÛݽýÉDpmu ¤<—UÂáàý°öœN‡Óe9ppßµ«c8Q0.q%0,“ß¿ÓÛ×q¥GG¯ƒîà^p`!¸ù|Ên·™$O(0¹º²þÀ‘8ç?9;6qIÏ©_8þ´AÇ%‚áŒ1c²ZJJ.Mr’n »-\9vä¨ÕløÎw¾ÓÞ»ïÄɧVÖý;Û+—{kcszšÂ§°ës…|*êêêÙXß’­–‡>ÙààÚÒ Ï½íËçKÑh`ppÐd’þqÜäꥩ©‘! ¨06 x>|ìX$yï½÷ Á`Ûà ßüæ7û~é÷_´Á.»£¼+“,WêþbKÝ^k¤t.Q ?€–RÖšˆ™OŽÖ2uv åùbi7Ť.ÒÝW§ÅÜKÍÏŠFtï4Hzͬ2hSöT·«9¡`¸Wlyu/EÙbÆßj÷\fÉMZ ’NÞ[…/–yÐÓå`Œ¢EŸÏé´p„(ÂÄ·P NàiÔ) ÇÃ:ð2'[,29m3‰\>£#Ö ÂR½É`9I-QQÀ7jkªµDt…pW»-8œÙ7| ¡©Å]U7yw¦ª¦ž¸ªj×Öü=Êæ¬k,(ŠÕ"«ËÂÜlÌãH$©l?•Éf©‹d:•Éáì€7À0onnüLNÞŒÓÌz# s˜3þ<ÌyÜÛüü"¾Wkç+e5ÕEµ¼±í«õº­v(^ØÆlîjóûƒw¦'¡{zÛ‹¥óÉ;]5ƒÃ†Kx)wôv‡£áëãcøØ§ö œÿ01~ýz±‚r¬­nþ·¿øÛ—Ÿ<ÉÅ£¡ðÓO?ýðÃÿå_þ%b{wghA‚|¼÷ÞY0R×ÐôÒK/'S©ëWoÀ"½1}ír;Î}üáúÆ*s`•`¢±òIÙð àèÔÔ<ì6›ÍÕ¥ÿõ¯]gô LøXt±¢¸ñëR2æúað©ò4@ìß2TòœÀ4ØXÚJj°N›&Æ+{Su*q#Í—%à—¯ì¥# °Ÿ «²ewž6ýQëÿ ¥N[lb¥­î¾‰g€Í ÇÙÀV.qRÊb9_Ê–tyÑ‚>è,éK:‰‡\ %­¿ƒÁh¦^¯&|P^+ê`Ì7g ‹™µÓÈòiˆ xYäL4ÿGOyË·êvãL;Û[Pp-Y.ó0Ú`{ªkpÔfµ= „~~nV4šz‡¢ÉT1ŸÛÙòmooÕÕ¸ç—î%b‘ÎÎŽž¾+—>ÁÉmhj_^^Ô—(WæÆ«±xD;~lÇÙ÷Ï=öʯ߼5ît:)Vtk @ÓPˆÜìÕõÕ뾕ÎC$…sìUyzúÎíÉñííÍ¿«zÇ E”âØcÓs³uÍ‚OeÓæ ãNÀ¿zo&[ÈÛ¢ÛV“ˆÏûðÑÓ_Œ…ãwvÚÚ{ÒI^ !ëjïèìêÊä²­-zbDALæH,þÉù ÍmmgN?ÙÞÕS害¹oýë¿æóYƒH$¼½íkmmÎ8øHÔ=Îþ…¼VÕÖ®¯¯¿øâ‹o¾ù&d‹ÏŠŸIí&h²¢Jfñì–j(ênóÛ=Wån‹Zj1N®M&Ü4Êf>/PÀZ§jF?ZE‡®"ñ—§îó>"PÏŠV˜Á”»ÈZìJûÞ¢žzðS'š·KéÝlf?UŠø€|ÀÙLÎÿtÚHÆ´|òbIŸ)pY•W´ )„±”²j29DO‰¼j¸dƒI¶’†àÂoÐ:k¹Òz͇ KKXÙÌgsxÕjõÆŒ¼M²Zmì6 Ÿã%–ñb·¹qÃÐV:]—‰%Å:ƒFB‰x4ÒÐÜ–E“Jã8ùw|v› €œÉ¥y‰ƒj†Dº«¼¾Í"Î{>Ï·5¹pl>»zš ,Í[]‹õ øã&£˜Neµ8çå¼rª‘3TW{|±ÈÀþ¾¹ùiêŸAM_ L\Y:zìËm~èáC¢4#‹%’ñ±#}÷Úwòžm¬¯ãxýí‰ñ<ÕŠâZ£Ý'œÿð­–æú¦ÆÆæÆ¦êª“£%–º^WíÊãNód+øÁN·ÛévÍ/.8µÑwîÞ<üÀQ“lÅÙøÿá?`?¾ök¿¹oxðôéÓ¸}Ü]M÷üùs ‹sí@%Ö¶­µ­™Æ‡¶éý—.]‚~?vìØ­[·,#ûÌ™3ía/#˜gyF•z#Y21EÏ’Õ™Gš¼ž,*jjGÞME¡6ùMMNE£{Fýî Ùò^Ý\A™ŒîâÕ½>aÚ0ݽ÷P §æøÌ“GBµ¨¦–Ö)Ꙍ²zùJ(š´œkÊM†¥U¤™¢Ø<üµÈ‰äD‡´—õ<[£ÅepeµC€$E/ÈÂ/éJJ^¦4Kn·4”§ãicþ´”AR zÙMT«&s’‘ç 4š‘è§Ý•KåòY* ‹Fb á HX\Yö¶———ÉI^ÈþìgoÂÞÙ¿X–Mn‡<>>Þ¹ÿx[K+¬ŸÅÅyÜ_:•†’ÍMË+×?¤ {zmV—v†ÿNÄ·:qâ¡ÍÍõÛ·oÛl§ËI…p6¢¥ÂPÛ€ÕaÉAŽÒ9( ½N(õ·oOÔÖUµ´y¡îq=Ï<ýÜÚªß"»­N×v|±¿¥¹éÖØu‰3w¶4¯,.¾ñ¯?©¯­œ››íîî~çƒ ·f7‡FŽ=øàƒo¼ñºûÜ…OXÍI8)빞ÿÒí©éÅÅEXN_ûÆo­®®×ÔÕ‚YþÁüÁoþÖ×»»ÛGÇ®ƒ¹´´6­­¯hñz†} Ö@V¾ÿ£½üòË?þñY+gŠ–e³Ãxì{N09ÝP™ÐÏT©@© úBQÍ—3j:§usÎçsLj……Y°q;àÍ¢Fv!ŸÎ›‰ZÈR»ŠökéñeibW*§‰¾–É—xN*+z¥¨çI†hH,‘ßíg†Æ3¥’^³e4qÔF4A%«bF4qz ×XxÑ$9"7YÕVH(15¥£Ô¶ª’ e>“Me…Ñ$–˜EÈ^ÔåÒåˆböÊ\=Œw— ,e3ãXyÌyµdÌ“M-RH ‰oÑË¢ÝÖœJéã±XjÓ œ0J:—.E,Ù"™Ö+;¾µÖ¶z·Çѧ²_C‹Ã·³öÌȹ÷σ±tB&Y>vâÄí»7s‘FtouÝRÕÎäy#רdSJ›—ÇÆßzÿ½?ù“ÿÔÐÖ|ö÷Þ}ä±ÇK]m£Ã¸ýîÇ?héiïî=òñ¹KÓÓ«ý]}Ø·Lx¡¯ÛûÆ¿ü¤wà@KKËðFÀ¿42Ô56óÙ¡ƒGý‰è¾NÌÌ̸ÜÖwÏtwfrÿΕ•Y«Å}`ÿþÏ>»’H`w¥s+3oh ¯¬¥nh­ìÊ%ƒÊïâ+ñTÝntž¢áÚÜN-p_Th ¥8QÉVç©üÛ¡£šÃ’§˜‹Q„‘Dæ¼’Ã/¡%%£\±ôu{-•­±/Ì Û«|gš]4–)@¤ø*(#G*Æ@Ä×j+åËPÎô ¥¼òVðfNÖHᢽ¾NZŸ¦’Å&ãd)e¨0ãyC6SʤK,'ƒXÍžsƒF—Sž”VURPhæˆJá=Íæ’É<ÐñÞÜ 0{Ð×ß»±ðùüñä<>(’Hæ Ë¨Ð^+c·Xlsss:ÃÇ_¾rÞSe7›­¬%*Ì)X5UÕäV R¿‰ú®fV^V_Wg6··¶nÞ¾522Rë®Òææ–ÈñPŽW•ÝhMÄbFE5ˆ£$7öÕÕW×uwuMNMCFßÿàq_7UÓà ¡N¿f³Óa§ø­?YLbïKm_‰¦«SO›ë—V@9jjù` µ[×PK'›êꪫBÀñãÇÏð£’ËëkFI”MÎ/ýú¯Ýó-¯ŸxâtOgëO~ðF ÚµŒïu{ZlÎ,Ñ–ÝžËÚ 'q›¢0i”lÐNÇ]X¼·¸¸400ð“×_ûÆ×ûÊåÑù ª½UÉLÄé²=ôð£?ú§÷£ j"§µi`ÉdØä ÐÑNæ½³¹/æ÷ï?XßP‹ûÝÜ\ wL2 e`ðÀøÄ$uR©ò¬¬,%RIșم}J8Ü×sÔ‚>Ôz¦´Wãq“%Ë©ZkÍ_û‘@”L^_ÉJ®¼Y«íä@g±úM‰Òxòßó"/W"O»U,Ûš5³­ä’Â,VD ¨MÅÛ”ÿd)•M¥£yc…ì wOŸün0LÇíØhâ • äJ•,i.WV wI&KNâ#ØÉ°åU 2ýkëKmíõ7®-0ð±X¸©¹-‘Î(%=ÏáLR:‹@ï…d€1¬‚D<΂+@2û¹4U7¸œž›·{ð‘S\¼|ÉbwÍ–Ož‚1A‰˜4OÛˤp$¨¶ æùà¶ÕÔz=þHÀh•zöÖG­-íIg» ÆÇnàlCû¹›ÚïÝU÷päÐá`À'›äH(l Ţ㶮¾»·ojzª¥³_èΜÝlzîùg êÛØX¯óßúæï¸\çÎ]tyÍf‡%ùýÛ}]Í¥bÎ"ºc©´ é=à <ŸK%×W–¶üëM=eýó?ÿó`Ðo³ÛJ õ•þÕßøÆýá–ÊúŽ®®•Õ%“ÅÔ70”+(­­P—BN‹DQ^…@³/õZÎ=`†YÍ»”‘jìÕJÀI-kþE ê:U,´\~þs­ˆ)›!Gã¸&%š@S¿f‹\ªðW¦Íw«V´Ü= $’¹Ã²ZÌ6‹l'ö¬“^– F³ì0͹WæÀòð&š-ªpSRI)œ` )hzšn¦§9¥|)/XT»ÓŽ¿¥<ÔŠ. ü›œëô•‹§¾ÅdTO°”¬&wIkD Tç³°úD0ZK&›€Ü€˜®®n¦ÓIún×ÙÙ"D™‘h8“UªªjãñÈô» µÐõÝ=ý³3 8onwÕôôôüü<«8ÝØØÀwE%sâÙ³>ùä“·nßš¼óü‹/|øá‡4“(q5ÖþÜ/þ¢. 'ÀSÑ@Äa· zeeqn~fÆbú(éQ6Öq‘°WGGÇõµÕ€`€ÿèS¯l.­Y$^TŠMu[[u õ8K«  m2ØƒÛ ½±µÓ·o„祙©›Ãƒ}0ò.\³Úlw&§ôJáƒ÷ÞŠ&L4 Ã$ø¶×ííuÝz`dxkÕŸË,v›ÓCS6K9Þåò”°ï;ωP8ZÃ"N–W?»>6zc¶X}üñÑ1ùòå‹gž|o B õ-Q-Iô¢@ôZûo½®"=LB´°üºÝÐeYÓ’{ oÅrñ~Э˜M€7£žò;wk’Šp=U`îE*–Ónº´Qb•õXPx–×GµÀ£ÔPà ²© %k±XÉðçŠ4Ž Y€1ŸÈC‰ˆJ\ºž‚¤¸nÖ^ŸLe¼/STó8g9üM¾ 5 UŽ¹Ø¨ZÏÀ}>gŒ:êa/‚TXið}ð,hÞ1ªŽÉd’­ÝßÚÚÚÂÂb4‡vqØàî M­ ý}ƒ‰d!òüQ3åÉŠN§ëY(äE­ÖQ2˜o߹ɊŒÓ§ocKæõTVRP:ø|¨×æÖ–çŸÑ]S/Z]YøøÒ…ƒ§æ RKcSµË=qé:ÍÌ­©Š„wìVŠ#tuõ[?¾xeôÆØ‰ÇcÉR1kµ€Ñ ªž8j1Yó¨2Nܶosnö/J++ëJ)ãñºšZrEr!9úÅìöíÖ–N=~úâÅ‹¡pÄW’ͤ^ûîÿü…_û£\! íÄ“1¯×k7[¶6áÀÅýƒ#‚ÅÞø|›€|®¬8ŠÑ@~ðÁG8“™lçë¹g_ª­iþÓÿë¿î;pTpie%–H$Ò©º†A0NÞ¹÷ÂKÃB©PtÁJ1áy™ÛªïñQjãX ßë÷ú#ƒÐшz^¿Û~'ûyg‘Š€’ì–b4´‘_¤ž£ø£(p{å"å ô2IeõVø/nZ€ ‚¢(4±Óhež3BxŒšs š·PŽÒTÓ|.™ÅIF P€l™ŠˆxÍ'Ϥ_¯PfV è#äb^Ȥpª„R§6œœ¢êLeÙ 1o ™”Ĭž-(²šK%Ïê÷ÉrgÇþ[·G“‰”Óí¨¯¯ƒ©›ÍÐüilÀÃ'O„#!wµr?>>ZR$·«FT G7H*NÖÜÜlßðüÜ;Ь3xd&™’´âU€k[Ï`kkûêêºd2÷öö/­­í9pððõñ+ã3wnW8ÇÞG¶C[kë-mûöõ³©ÅÙ¥·ßz3M¿Åê†úïýà‡.É|è9­yŠŒÛ·©ŽžÊ¹qÏTŽË7Ö¸ F;~ŸuÃØÞÉ'7Ë:Åîv" Þ >tìîÜâÄø”Ãfɦ3ö2X=–ˆúìü;_-f;™Ïe½¿°)›l¢Ý"q&=•(ç‹·&Ù‚ž39¬½B^UJ0óÍj!Z(òé’’ÐGÒ¦UE hy}²Ù ^•áÄ’QÒ®.X¨L Z•=6sÁœOÕ|Ì,»E½3žã㑱 ƒ©ÌSC)êb R’.¥Ó©*·;è¸,t"HñÄØø—¾ô%߯½`h ";½#G~í¿«×$£-¿í_´Š&cQæs’ÍàžZ¸×ÔÖžlsF½Õå±ÚÝáÍ™Mûþahy§Çmw8667Ó©”Ãfo¨­»91QÛP_Û$/-.‡£áîŽö†êjY'.Œž:ùÈþî~oœ¾tµ»»öÅŸþéŸöööÎÎÞ¬­wîŒúýÃ#=¾Í{Ë‹K0(½\QoŠû·Æ—&?³Ëµ½ÛÆ;žxò©­à¶½±dò––ï­ èSóÅ/Ô5;-ö«|ÕExÜ$»c‹áG=x÷Ö­±‰+^ÇC¯þ5çg×o˜D“ÛéôBM}¯bjºvëÒý‡"ÑÄÎV¨«{°«»ïò¥kV»óÓóo>þØcuÞšñk7êœÕwƦ?õH{Kûg—?ZŸšt:p°çà½ù¹t´1‚¥õ¿}ók†‡^ý…/_»n€N7Šrg[÷üüâÿõ_íÎg¢ÔzNoÔzï,îêtêæ¬UÉ:¹,p¼"c™2©Ž*¡X>œ–D§F¦ÌéwÚËG*ÇTt8%¬‚^‹Rª4›I¯ƒ¡RcÞQ£6´ÁÑÈé fƒL?)« `Ѳ°;H‰qb^ûÎbQÏúŸíåL©»‰/8äý7ónÊ{ª R¬RAz¦ÓaöVŠñÙ¯Xí+Þ°í÷ÓüwÙÌÓ X= OؤSSSC“,ëhn¤Ò?0õÃðØv8œPú’AŠDC’d*~äÈ<Ñ;]€½p8jq¸­{®PØÙòá¡Ë$Í6+žô÷õ…ƒ¡>øàÀš™YXXƯ<ñˆ6IP7{oF)x8;; Õ‚dsñFGGA @ÛΟ?øÀAØaƒýE¼-_NS_ž§ù`jùí÷ÞÝwt¤o¨ïêèõ_¸½­{kkË#[ ñ½^OOk_}}ýÏÞz¿­•\ªïŸ}×[ã~ô‘/\¹xi|ôæ@__g{kkG«Ñ,ÍÞ»³od¸©©ujòýžÞI>»r‘*r ê‹O?‹¥»yc, ÎÏÍAX2JñÓÏÇBÃûG XKKK>üðÅËWvþ?úø_ÿZcc#VU§rOœyjuu5*üÚ¯~íÇŸŽ Lt4ÜLó{ín(Ц%˜ ¿Û¨–²5ÒY&´ÛX0ZžŠ×dJ/åJÆä0W(æT†¥(oæNö­ ™Hdsù´``2ª#'Žl–ã«­Ôm7Ê$1éL<žòç• j+G ³ó¹"Ïå "¨‚®¬UÍ÷æ„W$l%’Q­_©ž@]­Hpù¾qö•DA–Šêp8¸½¾¸ÜÞ êÏ-B[>ªÒ\rùl®¶¶6™Nå‹J÷Pи¾¶)HÆæ¶v£Á´º='j-«’ÉøôÝIüÍ©S§nÝ™®öÖæ e=5˜ö(*·¹éËç26“9¯Á;}ôѵå•P$<42 q„õ°¸¾977Wã­ƒ’ùÞ÷¾ÛÙÙûüs/®¯oØ]Ö£‡À¯Š¹<ø+ö¹o“FÙÌØt+KËàÎN§s ¿ßì1~ôÁ¹‘‘‘•íºúúŽ:ÿñG\ºäõ4~ñÉÓÓ·o5TWEvv>½ðŽ~ó¾N׺º:—Ëöw÷7'Nœxì±SÅRN×ÔÐzì艓?˜JDÏ~ðÎüÒ¬·ª*“.ž;û‰(|ðÁËW?[Yëéî»=yc ¡9ˆWU¹××W:¸ÿèÁÅåêj[j2ËwîÜÑÆ—•öí,• àæUÞZ`ãÌ´|;þãÇNIf¼üób̘U÷B>41›WhÊ™¢ò¢fL©L  A”u$}|øW~å—Zšßzë­gŸ}zà‡¯ÿ@•U^/ Ëh2ÿô·</HáW¾òÕàÜ„°;7ƒH§µt,3_ $(ëh$C‘õ©Û…"Ùb.–µ*òþ­ÔÝÿæ) Œ§@7µñ`ÂòTÃ)J”îÎÊߘFëW´ZM…ª(‡RkPÈíi2Á0‚§ 6Zœ ù»x•r ûEA;€QPæó×å´Lj-[•°P÷L7Uÿy×nwjh¹°×>m·÷IY_Ô"ÙœJ¡WÙhb³ròF¾µ£›‰EÁü677aÀ€mjiê„HÁè„Ëæsf‡K6Ù³YšŽPWï]Û\‹ÆBøüŽŽŽ•Õ%‹]†ˆomA㇩/ŠJcìèìÄ.\¸¨óxùø\OOÓí„J';zìÈA§Û=ΤR‰ššê+×®6µµ;._ØñûO=öØ«¯¾j·Û6w|F£!¾÷þÛàßø?~òÉ3o¼ùã;Ó·::þ¿ª¾<¸ì̯/4€7H'Áû’HQÔHÔAŽÑHž±ËG*özvvm'±³Çìn¹j«’J%•¸*©¤jÿI¹â$Þxש±Ö«Õž±4#ytPÒH")Þ·x‚â>èFw#ßëG2³J%J@£û½ï}ßï{ïû~¿ÖßûÎÛ™tÑdâßìÜgV¢µÉÚAìÃ/TDz2¡)Α¬™4SzZ¨æÀ–ÉjÑj5R^Q̪¸¯Ãh€`ÎÁ×kò5Q=±ÃဠQLÑ$áý~¿·\)A:‹E¡¨cimÎʶz CR§æŠÙr©¨§tfƒ5ÐÓì—;XH¯(ªH× ô/®z@…B°3cÅŒVø,7EÉê>£9†³,*ÝÅrózkÔºžEUD ë¨`ÇÄ›aA@D†±ºxáZ,¹—/ yÜ þP£/ ‚óóË“ãÏ^;¬¦¾Onß[Y[6YÜv{½T­ò»°F ý×ÑLµ\Iäs¾–IƒÂh7‹"=>o.iïè袺à^à{aÐz#ÊãmôŠÔ¹ÜVÞÒ }ò›¡§ÝÝÙÝ‹',ÍÍ`úR@”7AŽI¢F"ZG¿:táï®ÿÃÚæF_8¾§­%üñG7¼õ`Gýý»»"©_P”‰øvRY0šµõå?øÃïÎÍÍ žŽÇö>|ÿÝ×^ýkÿæ/7"›uÝá‚™œY|öôá_üùýööí¢P´”Q©¿D‘ ÅÖ¾\*f„ˆö\µ®³çií%Ú¦.¹¦uÈeŽ©„(‘XÂO¯pÑb©Ž­ÁçE¥Öf³Íá@P¡FºÝõE@ç$½±»[ïñ‚þP°eâÅsM/4ë ø‹¥Ü7Â-ÝC—®”K%ÞbLÖä•—‰X±ÂRÈ‘·µ´Þûüs«™ommýä“O ü•K•h4j·;à©!‘‚qºPup¹X²ñø³Þ…ªãðGÀ1·µµÁš…ï øý]í$æffa½Y­ö­­ßûÆg¦0Àƒ€GøÊÕ×·“U¸r&™Oî –pSJ1ÊÙÕµ…áGŸ_¾|‰eu‹KóGzúy³Ó1ÐÎ[õ»Ñ A(íîF[ÛºÖ7"%8sæØØ‹'ëk‹vgÝýÏX¬öcB©27; ¡hc;Pi<Jm¡¦î£™üên¤’±@ÐëtÙæf,-ÏW Þ¿ú«ÿºYýÉþ‰ßßøñí[€% šÙÉÊû‰<`;Fû„¨ü!5amû~_Pð¨‚éjzÞÄHšœ-#Á/m”ƒ}1…XPúŽª‘ ¡JÛZ r<ýRUÊøÌy™Ë5V£5a\ÈÇHJ+â7PœÕ€’Ëq° ,›\!3™dQÿ£¼­† ±«Ø¼ªâ{8´Qd~ÈF™Ã¬ˆ$ÿý˜Ü~ <›« µ.~Ôžµ_G»ß¿E£z[°¹öööd±àBZ yýãÇÏ_ºÈ¨(d~~ÞÌ[ïq9뺻ŽD6¦á©T«p¯GâC—®²Îç Ô¹íÙdrbt$µ—€üÝJ»X]kni 76./,‚9"Úa¡ …áóù<,ïP(ôðá°*oÃJô]]]àçÀkNMMÁEšÁ’dÐçD IÕÌÔôo¼ïýâçÝ}üD 9 òÑ£á×/¿V,ä¼ !¸Ú6Vª…|©½£Çd¶/ÌÍG¶ÖøÃüÛ÷ãŠ(|~%[/æ:ÁïGïëXnè•t¶`sxž<3L¯^»”ÜK··7”AQSxyq¡FéëÂ]¿¾uçÒzcccyqÉ×ÐÐìX&•^,HjîäÙ¡áÇŸqL^_-P’®Îä[]ýíµ¯_]¹ÛÛÕ×ØÖŸ-È:¦öèÁÃæ€u}en`è¿ UŠW ½éì¥37oÞ x}¬žÙ~8vzzj|vz.àóýÖ#Íë3Á kw»ÜôCþèv´˜-0TôÅÈg¼ÿiMaï%ï9~´³UV„äÆ$f„UæqM;ÆgØ!Z׉ùÀHš$Ië`ØhÄæ¬×Ø 1/8¡qƒi,ü<¤®ÆÀLóf«|àÏp‹®©!²=z•ubY‚èNÌ ¬6Ã?*UÑGT‘g­iï#5v\í ( á^«B45šàê+&þiϠƾ¯ùH‚R1æ¦!ß’T‘­²´Làÿ•UEBÂ&zLyØ ŒÓ_CS0Ð\.FÀ±9õàx¤ª@R¨¶Toàfæfá ô3™d#c£´Fï  '`9ºG]ºúUÆÖ–&«ÙødØîr ÑÙ§6ë°5”¥’Ùs*÷zº;Ö «Ýíó––-œBJ.—rZÍ’ÁÝji ·Çc)@Èß]V”J5“ñX÷‘gO&Ö×VþÅ÷¾Ï\ʤv c}ëòWàN°JØÀÀ¸[Ü-´`kë9ÍÌÌÅ’Ýj @¾_ý꽞NªVÑ{XޤÈtßñ³CçÏŽ/B‚׉ÇÖϲòï½÷w.`…ÛíðÛþé§· å:}êÔÄ‹ñ#}½·oßšžšà­¡"ÚöÙ™,Í3xâ•¥¥—¡`XË0éwïÞ}ë­·Ž?|¶¾¾:2úlèü`gW«ÑlG§p¨äKLáûÕqšnç~ŽÏ Íý¢FX§ÖTÌBûb7øXßbB¸U'™­Úf8kâxt,+Õ;pI(îA¥i²ÔÈ^пž«H~‘¦8m$aH§J©„Q%X Œ2.CE˜Eê0y‚5EH„BWó$­åmi¡¦,ø_B¦HHÿM\QD¹¨l Œ¾õxjì)%–Òa˜‹Mk­À={ýMd++Ù Ú3¯Ê•R¹1E¬(=Ý=’¸úhJ·Évww,-/x<øTžÎ¢ÓÑrr/BS?²Ùׯ_?ß;ûêk««ë§Nö÷Á Ødáx@òñÔ.ã"Y=Y²›[kNOóâÒË ç/6‡Ûf&ƤRÎòæR±Í­:7 c 6—6›9ˆ?ðcï<Ñ{\ …dÍVó^|· Š©t« ÚÂ3‚70÷>Bêêê"ØY:™ŒÊ›ÌÉß\½òºÅRW*ÀÔ¾:óµÜ^ ¢ëÖÆºß׉Dž?ÙI%Si«ÅpâÍ«¯%¢Ñ•å厶63Ç%b1ˆˆ3SSßøÆ79¯¬,»ÜÈ„ ù,xPH£³E!“Ê¢ªâR%NÜž|òèñÔÌôÑîÞK¯^úío~sýú §<9`³˜+B‘59±È nžû''ò:‚:¬2&»¢U|è*%QѤDQ*Ò @[úà>]uNx;‡ÚÍÍ` 0m¸:Xgdé%frŸ¸A“Ë‘U†fÑ‘ºvYgV® n—§¡!@“œ^'jqUk¾—ÉÃEÚ ¼Ì(çÆRT’6¨Ötè` CLB•DE¡1™‚‹n V¬d Õ*#ËUk0ÃY$¬ŸS`÷Œ Y`9õtÁr_2qàËÌjM4©ºúŒÊgw'3y±ª¤s)A(§²Él!ŸÊäàñaÝb '0M‚3a|úÜ×ç{òð¸ÈÚÏ ×Öƒ @¯ç67#M²$d²{&އn é|¶ÐÛÓ‘Iª¦ÇQàx“Ãá\ר«€SÁ*¥S¹çŸ”úêWç—Ǧ^ttt­vpÈîÁ:a|†‡‡áÑÀÔûûúÀó ù¬"°ÔPÁ#]ïüÑeIlkï|ôàé¹³ŒþVd0€×ÓË—†‡ÃmᦠXb±D$²==ó‹Öæ&øœ“ËaWåêÛo}ìáÞçweEôx‡u&“™šžèíí…äÕþ‰Ò?ÿgß¾ñ¿†Ù„ ÌäòCç/dò9¥ªÎÎL/ÌO÷ôô„ý=}´çH¨e†ÁÞ‚<Ðs?¬©cÒÈî³!ºvðK m0qeQÑRM¥•Í#o Ìî²Õ\¬û00Yp”V§Œsd¼9°_ÖIÐ`Á_C~–l0*²mr¡ÞR&0qít´ªñ—Ô° ñ¥’Úk$¼¡H0šöA¤&zK²àLµh­ƒþDVµb9E‘”ªõdU‘‡)Õʲ‘râÎ=l©˜êéÅ…#§s¹msóSn· &áÌYxJW»Fªv§µ©å<| ü¸½¼ 6 먬½(MCÆÇŒŽSÍ5EÊîÅgE¡¾ÎÕ{|Àautueh’xöì鵫—Ü»9ÍÉ'à+¦g>95x¶"““ãgOó©n¼÷Úùs}½ HQW(ärY”B9m€v¢»‰@ œL&Ñ¡®Å¡oE æÑÑQ˜)¬×sÿþýÓ§!Ÿ‚´onúÅÿýÛ_^|õø¿?ø°ïw á{úä Müè_ÿ«?þ³¿p8üñd&º½·¼¼Xï᎜ÒMÃ#cÅRü‘ÝV×{´ðô#==»»»ñ莊jÀ)§Ý ¸æ+W._}óM¢FæÒið¦._†¿’©……Þú{ßûx••µõpk›8³8úl„ÕëZ›ƒzQÈ%ï~ö)oâæÌ У䗫?Yî‘P§²¿…xh@]ˆ²P–!™‚|&Òår¡}8­YÛäÑ!ÿTUt(_7AN†3fmÀ”Áðc¡,ô¨$`AÔ ЩZ)V …|%“.ðfë£LÑjÅp;RµÂj­š_ # DšA°¬¯Fj%…¨FE"½2®¼VÁ2Á`D9OèmFÎ`”yµ*Å’*Wèê>eö£XvŒDBdÆ $qÔÔâ+ ¹D"îp؃½1G·¶¾ÕÒÊä“•D…5¶§Syo†#w›UÑŽû+B®ãkðBÄ€@ÉÄà@/ñ‰#-­í¹¼7V,÷’Ñѱ§s€n}~ˆ$}pgwwýÈ‘N›Ûôû :²÷hÿÍ̯öôô!¢qEL§“n·Æ‹$˜RI †[ê=®…Å™‰éq¸ùF¿/ÝóûCŽPrg±Îb5ø_Ç»›«¹LV–¤Hb•A:œ“åJ,koiΦ3#OŸ6·wN¾Xw×{úzšMŠÍæLfÑ‘ÁÌçò™D<êrÕÙL|ds ‚WC}}Z+¾SyœNïlm•%ÈUŠà¿o}z;ÜÜZWW?;»ëtäÁ#XùóË_X,¼ÍêXXšOå²w~÷ùåÓ—‡ÝãL:Þl˜-WËS“càã×Vçì5÷w¶µ6VÄ„¯¢žzé@Ñ }ÃÌô€¡ ™‡ÆQ›Ñ³r}há"qäüà/ª–Bq%©òå ÑC/(!ç„ êEU’µnRºŠx/Xݾ‰kUÈô %êûô€DšÆ¤T¤¶%A§p­4A)šhCëÁ_C³_+¨m4¡"kBÒQEœY±*b‰,eà¹jZó® ±Ùl0ˆø >³³in ùîíÝuw³­­$ÀFÁ]9y«=ØØ˜/rkk«•jÅh66xÙíem`©-Ÿ ËXo0ž?þÖoÞ¬­\:óé½áŸýìgMí݉½øöÖz èÙÝÝ‚ï=õÊ鶦î—K1Y.ÌÎŒ*ÑÒÜœ)Ê©t1îœA#ܬÔÕ»!u³Ù-0þ¡`0—-ïò¼ËVç«_~9—KgzÏö°5C«¿iak–7òñ.×·¾õ-Ôûa·ÃÓŶÖßù“?›{1:ÖÕÞ‘ˆÅ××Ö`ì&½,K·>»óÆW¿s´ïØòÜKȨòéÕ:›j~ÖÝP×ÞÑZïñLOÎ&¢ ºUï–+%4ø’ §ËnÞëóÌ-Nò…ÿù¿þÇòËÕ\a=²½Ù†;yùlüGü£Öæ¶³CgVVÖžŽuÔñèÂ(@yo±”2rlUœ‡ Ðöùsûè°v ôéIñ6J&$Q‚Ø® Ô¡*KÈ{úé0øÃâ¤ðÙÆ@Š1*î‰ÒÎ~°„î gC=\ Ú²@ÛãZë&…Oð«²YQ+PAÕüø¾ ©ybg FÖ¬ÉkÛ{`Ù2y@…r˜×k}ŸÁêKÝ¡ÈÁsfÎ$› ¬ŒøQÊ«qîk]“·«bmµµ¥ŽÎf½ÙØX³Û!Æ9!ÀÉU’·{`´ÀEqfXŸ,^ à‡TM$¤bµáògX¨¸«n'_ØÞÞæM&ª&ïnoÁ= œ>³“H;Ö÷ÿýøVG<{6[ÎSím=³ð÷æû¿8q^©éF¿Mìî ¼r†ç-àÑaþ6#R&“ÚŠì˜MvQ”B>ߨôdOg8òoo¬Û-Ö¢¥¼¹ºa°ü~<‡pÖ á’'ˆ{9m!eRi$ŽR(n%4==]-e¯¾våÁÈ“x"yåòùšDôtvõ»æ²7¥òÙþ3§Ö·"FŽCâ$-K*„ˆúºú¹¹9xjd3:ÑÊ[à:G;6>õÎ;ïÂÍßÿÁ¿´ØÍ­mí.¯")ðqÓk›k­mmv‡IcØ÷ldÑf7657ÂüT%<:ï03Ù\ ¦7¸)*Q)”Š%Y(ë!ÿÆ“„öM5®G…RãÉÑH1"Ø3bùA%,ê<3+e¤ðW*sZe>]£Œ¼)Ë*¢ JÈd ØíU`… B¨&I“…7ÚlnGš”g7VEu·t”„b:›MìE…’RD“ÒJón4b¶›…Rà¨Ùl«† ™#TÒH) U¤$–‡Î@C¸W C‚zøu¤vFÒW‚½Uï"6“Ζ$=<o0Ó:–‘‘°Ÿ\)Ó”’KGyŽ+µ7<;³(W‹6 0†¨sÙ¼/&}>¤#¡pê•N¤4—+³$WÊ h¯7”±ØDUÊg÷”j±¦áæÆD. À ­£ÇìíèêéYœ_è¥emv¦1àMÆ2ŠitùžOŽ×{‚]=J2¶»0³ÐÑݾ»•ZŸ_yøÆóäÉ““Äê zÞj,¶¶£G»R‰½—3Ë“Çw¸l/kD)/[­Á_gI"íÞúÅ/z[ÍVC…°Z}¹2ßÛÑÂ:cˆ6ø?zþbèâEäHLÜÅ‹ŸMŒÛ¶|Iž_IîÇÆ­¼ÉnÑEÖwï?y4ÿöÖ·'ÔÖêÛlI…JïÑ—Ã:>5 C]ç÷Ë¢DV•äV¬ÁäX™š—Teàô©l.ùÁ¿ÙÞìå œ”Øu´©.h°PýÓÿsíÚµt*ª§j«óó~¿…¡ËàÁÔ›JKs}&+‹E‡ÞÊP_za^ŒóDí… .ñQø!åÒOÒ¼¢¢í,â=ÎÀწ&Š9º`pï¤ÛûÕn8¯(”Zª",d´À ^`¥yYÀ–fžƒdŒÕ#æºL!«Ýòø”&6 i†è]V®Ê”E¶(ér2YU‘ÒŠžhˆôè4•Òº—Qk«Fk xÿ„‰PÌ©j¤ì¾J6Œ‘ª€KµðÈs£VØBÖ0€?¬gŒõøT…Ø 4É̓]0ôB•{°ìU4°h1É <øw¿ûû5’žYXFlÃå2ê HÄD!ôÁ8FFGŽô›[XBå)1äóÀûÂP€ ‡Ã0)ðípƒƒƒsK‹f#WÌæ&'' :¶§÷hÉonËJÀ烜=¶… ©š¬op&“Ãá€4‰e_½'äöÄV7ï?¬ëh†Û^__‡e)Ü$Àî©©©¯¼Þt¾ Î‹ñÑï¿ýö/>½5tîŒÏ‹Èî<^wC¼³¤1D#­Ä bÛïECÍúªP.§ã{ÞÆú\©þÕ`5ƒ“îïë“Ëbd}°ÜdîçÎÃ{ÉðqC¿­"FÀ$:Ös^ßFÇ_9à’Á¿š—Hk9/Ù>ÜЩí“4‘¬Vó†æïAj…ÍXU«gc²\¸Î!­Ãa>ŽKãàÁå>Q¡HA‘ o‘IJ€?Pýh ü¢$ÉZÌFÔ‹H'ÂŽþÀ_€Øý Osü¤µÀÙKj!/dzªT®‰2ê«×ÑÈPõ`„* kHÄÕ-` 2QãÒ¨øíj¡~•}bÿý#´+‚‰TÊ*ÞÐÍ&²˜&€&¦¢†4¶„01Ë¢\áåv×Çv¶Å|® YVðËRccS&W…£±|d/¾ƒ(‰(’Ëë¹~ýú;^”wÖ×׃9be˜3.,Ƈ•@öbq‡Ýß‹ËY} €Aˆnï¤â ŽÕ§ö’0¼p«¿»{WÕDU!íÏÙÝÖQ«ÊqW󥞎νLoÈ S1Òƒÿæ›o2™ù…ÙÎö¶TT%b‰mí\[[»yóæk¯_ƒen96=š\_Ó‰õÛã»Q©¡PÈf±"ÆwX¸ÕjCÀ¯dKs3³ðξ#Ga“©DÒ?øàùóç`ÄMáh4:75½¼°ØÝÑiäÍj¹ˆ—:\ fdxx|çüãwßý{YVx“bäѾÞÏn<0ðÊè‹ñÞcV«½*«X‘‹çX-a•:;;SÙÌòò2ب¯¡¡­± °ÚãûÝ’ãȱ¾&SÓöž&–Éó!¯ÿùO) ¨–Ü\çÂ… €ƒaôî~rLwC M4†5›ùL6ûreåÿç±Èl¬;Y¹IEND®B`‚PKIga5E>ÜÄÄ$Ä$-Pictures/10000000000000C80000008D834C9755.png‰PNG  IHDRÈ}¯¢ pHYs\F\F”CAtEXtSoftwareGraphicConverter5]Hî$QIDATxœì TSWþÇ»î홞öt³3í´N™.ç´ÿiíØö_ªÓÅO;cÿmÕÖÖÒÍÚqÜ]”M6‘‘] ìa_– „@ „¼ÿ—<}ÿ¼¼bß÷Üà ɽïÞ¼÷Éïþ~÷Ý{ßM'NÐMsÝN7¦8°8YDXœ,",N'‹ˆ‹“EÄÅÉ"âÀâdq`q²ˆ8°8YDXœ,",N'‹ˆ‹“E¤Ö¿c¯;þÊ6¹kƧSåG§÷2Wt$1Œù Ÿz8²ä»s'¦ÓNNÓ‘>XïÛ¹Àö3æ´-ÜG3*ÿ¶ïGSª`>È›‡6³䃓ÿ™F39MK怅´#ÒO£1“.,+•P*^îb 6È”Ìf‚…äj^û8°¬Qí½ÒW÷ÿ„³jâaJ~óÁB:“kF9°¬N­=]?ø yVg,¤€ÜÔ©¶’˺Ô= _rªÙëÉ-ë¢ù¼)5”ËŠ[õÆ![ݳ:K`!ýaËÚ”j¾émåÀ²iýªMzguöÀBzÖþ«¼Æ›ËeËez¶jÀBú“ý—emM¦TÉ5ÿªþ®ãWÍ%XH/;lõJY«üM56®n“uWµ·TŠš…ÝâáQÕŒW¡Ñhà_׋ÛQE•¨¹E*Îû‡”+n7vVç,¤×üŒóÈ\¥5‚œ—þ¿+CjêîÔÍk|06øc;ÿh÷¹n“~¿yíÒÃ[¢j:[§ÓžÎ>Y /uS Û²#vzU,Ðz½o9mÙêXQ82:5ÈzþytÃY]¼ÿ'æSß1ã`‘Kú{šn`íŒ<Ë\Wqs=™aÔ:ï#¬m{ÂvͶ0Ÿ©^u(·¡ê“3ŽOl^câåxqÏw§R. ©L²”Š‘á÷\wOÕØa °V¸Ø÷*ÆZƒ’Ÿ¾ÐþKÓOÔ{Çwõ(úMlŒâ:ïÃæ]‘%á5T3_>4ø?'öLÿê[,$øÓ~¬ƒq!fœ¨N:¨ÇÙg‹ S{vûWÓ¹"è…ý³“ÎN׌\zË‚…ô©‡#­yC‚5«Âp½Iä¦þÞä¾9ñÒ ß?4øo·}3uÝ-Ò>Îcjµ^7$XÓI¯îÿ‰aŠ[j5Æf¦êzjëçz£BŠ‘!ôÈ3øuf,¤ŸƒÏŒOž`Ãe˜2jËiëí”ËžÛeÃ\ö™m당^‰ò̈wŒ ùèô^f×þC¶º£¼Æš™ý.情o2¥š¶GøéVÁe˜vDúÑÖ»ù‚sÁµ^‡¥r½RÙõUÙù5C)¯Ì*3 ز#vT"çÆ0¤¿ì´ÑÍo˜FÕæ7|{îÄÖ0ï)¸S)ÑT7B…H¨›?¾¬€9XAf¢Ÿ!uöõ0GF»f¾€á; 0-S’ÕEÝ+4¦Î3y{ŒË<°»:L¼Ì°mk9ã¸%Ô ~½¯Ë§V»ˆ,Ên–J>÷>²3ò¬ÍÙãx\Uükˆ"Þ½Ñ$1^™ ¹)ä1Aâá’–kƒ= ]ˆI\Š›ë£Šs’*Š2ë&öˆÊ©¯ÊTfÔ• ¥b¥j$¯±t¢ B;/±GÑ/\ã˜k>‹¬wŽí—€ËZÄ–[jÌrgûU'öìŽ:‡.éWøUÿ:½¼ü°[›‚ÜðfG_O– ý#\®ƒ±!ä³ L«¼­ ]mli^v}%þOéµeé5¥m²®áQþå·6 ÿ…¿Ep`YhÀj–Šq™É[W@äJU 0"ýq €¸ºá +Ç‹zÆI¥¨p«mÌØØuíA °:èΨÍò†•ˆñ&¡½sÕÔ-&ÿUO<|¦ëúF(K^¿y‡fô)É×XóYV<ŽÅ5ŸÅ5ïtÂu©$÷ÎvdÇÁ+ßêM}ú•ïQd ´ËoN§Doð; ŸME/ùŸKçÉlubÑ¡ø ð«ÈŽ}²Á'?E¸ÄKÛx-@ÔÍçµÊ&à°§Õðy5pª4ËÜÚáÚ£ß$7‹GæÆîò XóY,Î;´#ò¬î̾»íCbb3ñJD…1¥¼¯üŽåÔWÚ©-¡^„v0ý`\H /ÕïêeŸ¬D‚ÑyO­æÃQ+jÄ—åÃ…Âk„–ðÙËEB©¢Qa§\ÆoièêŸØûÕçÝÁÁÁRgkVô[ë|n À‚!±9{<8/Ð —{„_^cMZMéØ`äa+¬ qâÊKüÜf©B÷€¼¦£àâ_r ¨5KMÇâÀš2¬s9WÖzFÿdãïJî³M%UÈI°ÒkJ÷ǰ‚•I%ì_«sX¤XV%óÁʨ-ƒÅ:è 3ë*°àrí +Ì ÈMñ̈'»Â+U%0l¥­±¥yãªË•Eµmð«ðXøË×n@p`YhÀŠ(ÊZ|à'Õuç}OÔ¹ݨO?õp /Ì"´N‡B×û8;'†“ž>pûp_2[…H¸/:þ;ùLÛþ!¥kòEX&òÓÆîNÿìdrDª{ ÑÀÅâ2gK¨]T*F†4 +hªÃ_rRyÏà@}×µ-Y9ç}>kºÃ ÆžåBhí–‰ îÂÆ'o@>N·9Á5¿ÅcÍ;ݰ`‰dÒÔj>i'ð7·¡:«®œ¼ý§TdÔ–#d#s¢·*jP÷pà€SW€­‚Ç]'‘Öýf½¤ÚôR68 ·“·ÿˆ Ïi€zÞì\§\FÍæ…E=+{hT…”4„XóY,λOVÒÒÃ[ÿyl¼%ôl›‚Üþ×ýÀG§÷ÁÝ&´›tÁÇ"g_:Î;Q˜åp)n™S×yGÌè“•ˆ ñ éœÁC‡çN„Û¬Q ˜jçÖ7 ø- @ ƒi8þ­=]à5!ùò|K©TÖÖÖòx<€^XXØÒÒºÆY¦ƒ¥V«›ššòòò²²²ø|¾LÆô00ó„*š››óóó333‹ŠŠÚÚÚLüv,`}xj¯Sü…@^ÚÊ£ÛókßwÝ @]ØÄJec`!¸Ûy|—c—#‰É`]TœÏMáÿÞ¨uØ)°@ObEa{¯´¼­ „-|42:ZÖÖ„7ÁScW'ìù7<6š¬Yˆ uZZÚ÷ß¿hÑ¢[n¹E¯÷Þ{ïÛo¿íææ&—Ó”˜l±Rªù!yé°j‹,K…Î`Iä½ ‰×Xݪš .+´S“›¥à…‚ 9g,‘Hôæ›ošrÆuõÌ3ÏTTT˜^‹1°<== íƒn¾ùæÍ›7«éÖ¿ÓÈÈÈ|0Õ/øÐCY›¬›\¼š–žN{"f ¬%K– &BÔM9Èñññ ž ºÖºXÁB,vâÄ 0JÝú‹Å!!!Ë–-c(õ /Œߨ Ç4,n˜¹§§_üùçŸ×ÍÌÜ©—6îˆð{uÿ&r¦Š±Ù p¨×z9ÁåúÊïXIKC/m{„/²­aÞpÕ]’Âq(·Ô˜€ÜxHΉa‰…§S£ó´éÎn tœ÷q&µš_Ü\ŸS_UÝÑÒ§Tà#4Çp’þ>¸_rYSwçØ¸:*!Žö ÎX‹-JKKcÈoooOÛ¶—_~™µ.°`CCCÊFFFþîw¿3Vq%m)x`·ß~»a~| æ¦âWôÜsÏ™Ö7þ®«Ýö Ä¢¿íû1¢è*a,X#€5ªûúìq¼³;êœOVbXd{Á~úö?Àå,Ž$„ ÁhEiƒDc`áÄòB¸ç *·¡º¥§‹n¨5·hÇàȓà  7X,Ö8 ¶äµ×^3l:/ÚG|ëÊX0¬M­ªª2g,\¸¶öþþ~Úüà†µ:•Jåìì|Ï=÷°€õ¹÷‘5žN0+—JË?çÚJh°ˆœÛÂ}ü®^&WB_®,"HÓµ¤x°”ªáЂŒ0í”c`]  H+…ºý&ö µXøY{x˜ôHmóXo¼Ð‚õî»ï ™Xuzz:­ÑŽšÒfF÷jbMMM‰D÷}°`xþqÄ.­¦`e &V+©¢ ¶ ]areññä‹.Ià`5vuì¾x}_dQ6¼.ô\«¥G“†œ„q°Tc£(zø- èÅò^|¤.mm„[&’u7H:`ùìVD\Ìl‚‡#99Ùô"r¹œÖ— Y6±‘›ÐÆúâM›6Ñæà 3¯\¹rJ•êJ,¤ý¿6¿äðæ 7µvFƒ1°àAÛ…ù¬÷q†qÂÅ®—´o õú%ø |vXÛ,AÝ&`~QähR„Gz9èe ,B»‰à˨-ƒõ‚#UÖÖTÐTß}îJ޹RrÊ•Y Ö>**jª¥,X`ؼÊÊJæR3–B¡ Î…wH›ÿwÞ¡=™»wïfí»iE3Ü04ª¢7Cƒ#ÃÔÄBëQ»&“S\¨MžQRk¡þa%µ‚Y31¶9@-)C˜ªÅ£jµîÃBÑ€Ñëq–F;¸JÍõÃ ê ³9Ü/ÄŒR/¾ø¢aóô|CÍÔ´ÚOQ©Tj˜ÙÏÏödB«W¯F´;ÕÚ¹q, 1 aóX7œ)°ø|>íùIJJ2̬T*}ôQclÁ럒@Ђû$·Sæ1šîÆðb¹LqÝ€Áxho°\3!°O“,Ö’2u°4’þ>ÊÔ¡ rRvH©¡vd ´{ÍSf ÍÐݦŽÚ~þƒE;8Äãñ˜KÍX8u>ø á¡\]]ióŸ9sÆX¤>ûì3ZkG+}°ª;Z—ü>üª1µ®ÏÒÃ[áÎSÏô¡|,‚ñ&4¡³Û ÎKƒåž+éïVä¦ÂÇŠ+Í(ÍRqxaVdÑUrd•Юÿ!Ÿô‚ð[ác•‹„À]mÖÇ"§›Î[°º»»ÝÝÝ_ýuZç}ÖÀ"ŒxN¶¶¶´™ÕjõªU«˜Ù‚ïææfÊŒ‰ÿÿÿìyLYÇULä#Qc¢Æ4^]w#‹G6xDO0躚ñXñgqÔAñÀcÄ/@”k¤åt@PF¹G@9TD¹±÷Ûõ´hª«ŠÆP6³©ïF ê½†úÔïxï÷Þc‚u8Ä{‰ƒMÒÓd…øwãÕÓÇÂ|=“cVœ·%•Ä_’Dd…ÈéSL®,¥8ÏûAlMC=þ-­©’f§>(ÊESá™)ÄøÑ`!€C\ßô9+|Ae…­Ÿ²ÂVWW¼ÌúõëY5Ö¾}ûT›Ú²e ×õÍÍÍ .äg Ò××/((àïšcëͧq¬ùñZ¢4ò‰¢ÐÈ¿¬´’§Ô8V+Ǻ›”vÖHQè÷²ߤvôS,X­¥Šâi°xƱàŽX%%%GŽ™8qb¯ä+ƒuêÔ)Õ¦Ö­[ÇsK}}½¡¡a¯¿ÅðáÃýüüxÚayÿ÷•S…U¯ÈÈ;œà•ß#Â2R9uø ÀÊ,ïy•=ŒÍ•d™2ä}‹ì-C~êr/œÎ?ÿSùÜθ¼ R!§rDè ô¤•Fe§U)Ö4“=·Ñ&QÂñÑg²£ €K¾T¤–õµèŽ i ,¤ñ¬é4tèP©TJ ëX‡¾&XvvvªMmݺUÍÛËËËÕ©TFŠ Ê–8ŽÕ7………±®eÐÖÖ¶°°(++S¾Xã`mÛ¶Mµ)kkë>5rçÎÖ)e©fš"X}¯¯¯êäîàÁƒwîÜÉZw q°X‡þáÄûÚ"zàÈ“í"ʼÿ¾ò-L°à§$)÷àûÈšfäö®÷".ÆÝ&~ª¤æõ帰à´d²0úMC½oJ|5s§H¶sÒýýN{Fx7DTäÿÍím÷ò3é™"x7¸EÚß!*§—PÃÍÁÂóvoáW]YóÙKâ§Õ Ÿ*Ç¿2X©©©ªTéèèÄÄÄpÝ¢Y°Þ¾}ËšUðW’ñH&“MŸ>‹­Ù³g+Ï*2Á ‘=øÛÑï6^=mxÖ0¾ã¿ú¢Ýf·_,ý® C o.qEÚˆ´NÞ3x—f§î¿évV(ù¢8òD±±‘2X'Â%n‰Ré?\#›;pÓÃÖÜF­+|Ͳ®ðu}m#Oº:súrä‰ë ##YªUmlløïÒ,X¬ÃQpŽ}m‡!¸¦½{÷²þå•£7&X[ܾuw(­©XÀBy%´7uä‰b%4u䉼'X‚®«yä‰4ë12Äή.–•Ð|+¡åš ¹žjG½VVi,8hÖ?ÎÁƒûÔ«ÚÛÛ'L˜ Úø¢E‹èk˜`Ùy¬8¬ø¼ŒuÎÇîú=Rìݯ°`Hl=)öQVËáns|XÖ‹çT¡Ÿ"’å Äàûï[¨½ª{îÝÐÖúyî½:{7¼¤B7€…ÐaĈŒ^FŽÙëš Ñ×4kÑNzz:²]õÛ‡¶oß®Úø´iÓè ˜`!Üþû±½'-M]í[ÛÛ}Æ-r°^îøó¯Q·`9E­w=iêb8ä=Á‚•²¸Zº;Å„¸› ,Äã7’£aÞ`·HÝ•rŒ%++ŠÏϸWð¤²þ][GðJ/)„ÿE„'×Б'UUUª½Œ;¶×5VGG‡‘‘ë_fÁ‚¬·ó†ÜVým&ÌÍÍUÛŸ:u*}Ëpp‰ËË µ1)b`¥Há ž. €¿#W~hkE0DWó!*§·”SûlU~Îû'Á½¾oùTÎ÷VäÔ;½œU¿¯£‹KÁ`R®·¡wÕúj`•––ªö‚ ±×"ô¯Þ.ªq烴ß?~¼——W¯Å ³òƒû8޵lÙ²³ý$ÒQuu5kG!!!<–cÊ”)ý–©©)ÿ¶A LðÌ2mÚ´‰ë^F@¦§§̳*k°yô5,`Áf(—ÝÁ5·uØÃ>ѵÈ>`ŠèÑ |_ùÊ.ŤÝ]Ý{‹~”lQZ<ÉØƒm*ɨ¹¦¿ä«E÷¨cA3fÌàò @µÍ””ú2Ø<Ä7Œ{yÖ¢¬Y³Ùè¥K—$ È rvv6337nÏ/‚X›§F5ÒŸ4iÒÑ£Gññèmdð<ñáW­ZÅÕK@@Ý&¬Êºw+ÏþÇñïíÃ%rjúï'[Dî1¹Šßß39ÆÄùøÏó¤„F9ÆB mìeuó*9EÎcÔàôäIÑd³?yÏ .2.O–T˜CªOÁ1Â>zSub¬~ýgY½z5ëË—/WŠŠŠÒÕÕåjÓÓÓ“\9yòdÕÉ~ß»^[y„IM°hikkÏœ9sΜ9”5jÔ¨]»vÑ“-Bƒ5dȪzKM¹ºº*·Éë¿77¹yV] °n>J0<û“[¢4âÉ£eއü%¬üв“~;½Î3Àú9Øö¬¨êÀ‘<`E夑ÝGVÎËRe°j›•<8`Áà­¢ AÁ6l<&?Uý–±±1#ba‚µã†Ó®¬ €ð8Ñð¬µ[B$ _¬¼W¥ö~»¼.0À² ö„R¬ÀÏ`!©ìÖVÝ@ BxÁµ¼˜Uk×®]ºti¯— ü¬L&ë•*9µŽ™5US†††ª±&¬ ±¡ NY]Œ ý§½ŒÓ^ßËßù\²»í³Áõä«Ú·k/gðŽÑÁ °n$Gû ¦è§@w2cÍÖ“Ïp1àXÄiÒ`!ÀËËÈ¥„&ÓÒ,9µå†:›5Ž3ÆÝÝ¡nll,ÿÆF„‹ŠŠ½[XXÀc~ñÇFªagg×§Å€°7ˆù–,YÂÿ‚Ÿµ²²R«Ðìö¾¸ÈÁO]N;ø­»l˜¬T±±ÓÝìÔ­çàõj¨a§²šªA¤°îC£cô­Ã!^da¾œ:žžä‰ÃžåQö ôÄæÊ|Sâé#€3ËŠé@¾²þ]âŸY€‰Œr!ÍÌ~ñœì'Hz!{àh,(''a,×õ`ñD•ÃyÖR»AÔJ½ððpž'ÝÞÞ.A’õö¬Y³Î;W[[ËÓ2¿²²²vïÞ­££Ãß‘–––‰‰ ÏâÛ¿ð8ÞH™Àbí·³³y9Þï¹sçΟ?ßÔÔEGG³¾»ð¡x­ÉÅð{öìRÜGŨ  à-rss³±±Ù¼y3RÑyóæ¡5}}ýÅ‹oܸñСC~~~½Î]ª¯–––„„‡;v¬X±‚tg``°råJsssoo þþÂ`‰ÈÁ%ˆD°D ",Q‚HK” Á%ˆD°D ",Q‚HK” Á%ˆD°D ",Q‚HK” Á%ˆD°D ",Q‚HK” Á%ˆD°D ¢ÿÿÿ4/J=S§IEND®B`‚PKIga5Ï£€ï[[-Pictures/10000000000000200000002000309F1C.png‰PNG  IHDR D¤ŠÆPLTE€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ3f™Ìÿ333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌÿ3ÿfÿ™ÿÌÿÿÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌffÿff™f3™ff™f™™fÌ™fÿ™fÌf3ÌffÌf™ÌfÌÌfÿÌfÿf3ÿffÿf™ÿfÌÿfÿÿf™3™f™™™Ì™ÿ™3™33™f3™™3™Ì3™ÿ3™f™3f™ff™™f™Ìf™ÿf™™™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌ™™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿ™Ì3ÌfÌ™ÌÌÌÿÌ3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌffÌ™fÌÌfÌÿfÌ™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÌÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÿ™fÿÌfÿÿfÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿÿÿ¸ÿ¸ÒOIDATxœcà'FŒ*U0RËU<4àðIEND®B`‚PKIga5 content.xmlí}KšãÈ‘æ~NáŠéÖ)x?BÊÌIeVIÕ¯ÎÈRizS‚t’P€ #2j¥Ì÷Í¢³ŸkÌnŽÒ˜3Œ¹ ñ$A€áê®dpn¿›››™›™ÿñõ·•°ç[®óòBàø „©;³œÅË‹¿~?Ñ/^¿ú/tçskŠofît³ÂN0™ºNŸžvü›ðîË‹çܸ¦où7޹ÂþM0½qר‰ŸºI¶¾¡ï ¯øÁ“]ûqÚ8ùt€¿u&mSÏšwõßL'Ÿžyæc݇I[5ùøÜ­ûð7ßžÌ]@}µ6+Ó‹o¶åÜ¿¼XÁúæúúññ‘{”8×[\ †a\Ó»ÛO·íÖϦ­fÓklcò2ÿZà„ë¸í fÝþ‘¶É.9›ÕöjCcfnT×ö¡ K³Þ%ŸIñ×â6w=,J`ž.M¯6ŸÑÆiV‘fõYEš%Ÿ]™Á²d|õëp“þóáýޝ¼UÝw‘¶)¨¦žµ®MfØ:ù¼ëºÛ®’ÂÉN»+ò¼|~O´~ÜÛüѳì%šO÷6Ÿšöt‹¸»* Ú ×Ðb‚Ëo'Â/y@¼ooû³ÒŸþÛ‡÷·Ó%^™»ÆVuã‰åøéìñW–]{ m ÓšŽU›HÛÄÔ‰Ätjmx/áÀû×Û æ&pÉÓÓ Éþ«?†3šþ‹Â¿ÉË_^ÌÖÂEtanBÏŸàR('ks/â'“'k:ìöQj’ß™Óû…çnœÙäÁò-*Ìo0–5sïþާ¿·ùÌò×¶ù"× ˆÛÓ„ö.wsÓöË‚ÓÀZÅoè®íÃK쯸7KlΪzS¿¯MòÃf è—ŽGÿÐáå&ËÂ3×Kkº¥;úž$9¼`õ—¾õk£Wæø-~eüæGt@úe>D„×ÌôfûzEÞç¹÷ð€ã:¬¶Ñ_¶ (þWžþï"l=·l;n»½°m:§ÿ‹îÍúeN–®gý ê©iOLÛZ€ä²ñ<ˆZ15Ið`-–A<¼™›ÖŒ,¹á½¹{³²œíütµ½µ#—à›ãçñ]™Þ=ö& Ü_^¼ñ€–‹ìõm§9‰P’ÀÙwmkV´0ÕŬz Ý&«uºÝéßt×jeÍfv#†”›6Ã>¼ìg‘ÿ9Rn+‘ËñZ=Ž*%3p×MhTŽÏОh°lAï1ÆY²“Ú;•b JwúlÚ¤×Úà¤Æ †N?"#6­6%$•­6‘’]R8M6 –N6ŒfK‹qdÖ†®ÍñM@¾íÃøâÄîÊ^'3ÕÛ­¨M4"¾¯ù›PJ¦ð¿F,ÕÛ:àÔL<¡…RØô„*è®Í©À+DþŸ#J¶—¤í%iÎ`f¥î4!è˜ZØøµ\‰Ó$5/’4NW”†Óµ…ööŒ€–9]׊€ņ8·Ð ›‹ÅpÖ½¼ˆÜ'™¹8Ÿû8˜|#K—À‹[E!}û©ìv<“•†3¹}nˆ„S%ª†#I,”:üßA–Ð)Vê:`k€Âu4‰-ôÇ.:©ÇÔBÓkocJ#šÃVÖÉÊ%»Þ²7 VÈ °×?o›;gúAâÒÂ\­Ì—¿½âáYò¾‡±“ø~go¢_Á5µ-0y<< .ÁdA‰ÿ^DÍ­ñoåyøšÅ•s‹Ài2„‡xc£&¶å§¼¥ìüU«Ã=µâ!F?¾ÌI¢ÜdÖùÝäöÊžAøj6&ùèD¥½»Ã<– l&AÓ2ÊÝË‹%H0ì¤5¾PTµ 9iÐ s×/&`Þ4ƒD•®äæh3H7ÀþñðØ;Ÿ2` 'KYó k¸ræxM¸Þá¹¹±ƒhN• ·fžµ”pª S 9’³]I¦lË HËY¿Ïaâ˜ælÜþØ5ß{Ašõ>g€¶âÈ!²]~ë¡-ß¹ò[ÏAbä70:BµÌ8É ‘ßêèžtõ¤ý,uš¼ÃÿYPý,õ¼«ÿùH¯C•¡ã‘Þ®”÷Ö?vλà3¦Çfç¼K~0¤wÀÎyoõ³`çC¬qR}¨ÖÕ‰Zy4N~–Ú•x¨vUcL5Ò¡=]8¾ª£ŸÒXÕgÆÉX‡ê9ã]ñ¥C•ª¯fçSŒ¸tl7Ó@É~¾~&i~¦ã(ŸóÜlz&íöGÛ+™ˆù•é-àåQ <§©b¼7ÞH„Á#Z ;¤Ò@”YH+1ì¢êHƒ‰åÌדø×êÓ‘gÏ–t”Óíe£ ‹Ïy&j×Aµcõ1¯ù¶ë£ÈñÒfØ]M%[Dײ¹dêì8œ‚–(•Q„Mó*å±­(f±ˆâð÷@ˆøk“D[Y3ì†tšözingùÆ™:ñ'pûåÅÒt ×‹Ý܆ÞÞyؼ'ýò¬é.70ï`Ö»k?{!þm×·‚(']¡áו-eNëµT9U­×ÒàD¾^K7š\³©Ì‰5iTN¯I”`pRMªD3j’%Êœ\“,Q匘¬ëÜ0_—Ï™í/¾KO¥åÓz làÆ9åŸóÆ]» ,qÏ&pû Ìs²¦Öb ‰ã…z-NQêµÔ9Þ¨×Rà9UªÙ”„ÕlªpZM¢kR%€×$Kþ­I–¨pzLÖ&pÞOÑVKö©cl³˜­ÀǘÀy/_Û l° ÌV`¶÷=ón죬ÀífZ}2ò~é¶~…×/‡¢>P1E‚)­äPALnkgœ* ~k†4ÐÌ4 ¦I´›ÁÝí­T­ÁÅëaƒ®v¶}2$u¡|w‰é L_87}¡« Fž3”ýž‡ìl Û7èj}Æpæn¼¿s4 РrÙ炬‚clŸ^ºñL°1ÁvV‚­«=‘ÁÌÜb#ˆM\6qÏkâvµB¬UeØ“wBŒoe°3Øà•š3X–ëµ$¬V¯¥Á)b½–qUÕl*sjMšj3X­I•(rbM²`kª2œiÙÕGµc±ØÉ× «íb EzT+íy‘à[«u2b|'×[™vŸf=Æå¹¦;3ö7U4Ô¸x«j&ò\]¯£ÈÕ\žN¬GH ­="ÏIõy¡×öbÖ릨q†ÜJ¬Ô©>` ¢`¢ìõ…BA¦éÑB½35‹®.H"­Ýñ‚Þ4xqg®¡ÚˆERð@ÀºŠGoÜïÆ†[¢pDå{z½GG þ²ø%¿5ApüáÏ–m£[Óñï۞ìZNØj§ð‚GË÷S-ÖV0]¾¼x0=‹ Ó„è~løú8 ÐjØO¥nRëWLväÖ!¹N 2;‘ºrÌ9WC,@rWŒ0,JºÜÇh©»síYƒž$Qv>1ŽlA2d_iW§›ÁE|вÓeªÕ"O¸:A=¹<1}ˤ–lÑMrD§¿E· QC-Ng;ÓEöï·ÜÊn@Hgaí÷ k­¾gl%qïØÒÛ ©¡Ô`Ä/ìÏ3Zì¥lÐÕ®ÿصxÄ®vå-bÉ3lÇ(Û”íÕuMgKù'F…¶ËYâe¼`é¹›Å2¶T¢S/Ú90ÿmçRC…¯B —2qq3DÉ©d"FÎVz &ÍÆ\@kR¿œÒ¼q^ÿãmÎÞJéÂÌ?§…¹ˆØg½0wµõË[˜Y@ö`²ÙjËV[¶Ú²Õö´«mwŸµáÔTa &æÊ~ήìCfpñçm‚3KiM®ýÍÂÛäî¢ÂTf„ŠÅΰؙÑ,v†Åΰؙ“gY<¾êˆ ¶ˆ³E|X‹ø!S¸«Ä¶uÎ<ôù<}õ RÉù€$˜âÌýÒ^ö½Xœ%w”:¹‡j.ÍË®Ôï¿2Ð\ÝJkRçõTþòy²—ÒC.r+öbãCÆçknx"•ù•ƒ(Åð58QÕ÷¡;rguà®Zˆá\=É™yöŽžBbGíè©/xr{ÈLðÈ­îÜ­ŒÛ»©” 9P:EHê !Ï!¹C„ô³DHé !‘“Ï!µ3„¤³ÄGëŸ3•ÓzgÉg*§•œNÜ®£„Š*¡§Ö#ã¨Sè‘ÿøVZ’6$=¼üеÌz¶LVCPäç‡_±Ú†ÿ$Nž~…êÿý?ÍáS8^~𪯠¾ƒ´[ßAª/ƒï ½øÙÃ×Pi–Všÿß?þGkm±+§nÞ -è ƒ—ß&~t7é©j‚bÙx+T°duêVE:õùCV¨F·‚,R£Ï²B͹dÑòqþjË ²Æ2ƒ¬±VÌ k¬ ?KÈj¿r_Úï¡<Šûlô5¦â2—©¸„Œ©¸LÅe*î!c*nKW9<*âa¥ƒ|ºpœÞBoGŒQoÁ·#ƨ·ðÛcÔ[îˆ1ê)wÄõ„;bŒz Ã1F½â£†J§Ú—Ò9 ðN Zž¯ÚÄTK¦Z2Õ’©–Ã@ˆ©–LµdªeŸª¥vVY^¬ZÀ0æ«0r´±jÑ'G‹«0]r´±jõôHý„%«”3Ê7;P = Ô@¹cHÏÞÎ+”O|Iy~ðv^¨€Á[©;ËËЭԻºÇÔÚºÇÔøºÌZèÕZ0zõ:µVØßËKž»2ñR‰‚ßBmZKlœx®vØ8ñ*QÁ[àÕ´VØ8ñ*öG·Á«iœqâUìfx5óV3¼šù®^ÍtS†W©ÚÉ3ÀZ¨öÛ9E”0gþÀËœùÌ™?^x™3Ÿ9óÇŠ.sæ3gþXѾ3¿’£8ï…ާkŽØ0ÖgH¡d‡„Ÿ½…‡£ÞÄGŒQo!â#ƨ§ ñ#Ô[˜øˆ1ê-P|Äõ¦/£¦dgË=G½©·‚#ƈé–L·dº%Ó-‡Ó-™nÉtË^uËÃ`cÅÒXÞ£ë–#++3<ÝrıbiƒÑ-GŒ+–6 ÝrıbiµuËÃ8;eÞšÎë,ompxOÞZ?xOÞZ?xOÞZ?xOÞZ?xOÞZ?xOÞZ?xOÞZ?xQÞÚA€5Õí;8Ù­u;CidG|5Kz—]Q ï³Ì`Io,ém´è²¤7–ô6VtYÒÛóNzÈV@gò±2Lãgÿhàe?ÓøG‹.Óø™Æ?Vt™ÆÏ4þhü•˜@u¨·?Ç L–]8 ðcIJ >b„Xvá€"ÀGŒË.¬­žòœÃ†ñóì°mvØv§:éhb‡mF-Bì°í袣Eˆ¶==thåµÐkw>·¦øÆÜîÊ ¬ixÃõÇèÆ;{Ú~Y{ØÇNí\çÕgžùx³6Ñ¿BÕ5Ùä"¼ö!¼=[ ÑՕ騛ç£{_­ÀƤè/½?÷à"Jþ\ê‡Ö^üC×ä­ÏbtÇ6Ÿ0àî&P7ÑЈ§däȵ%¶Ë€AÓâ‹ßÈ"lðJüHåd.:©NMmÓ÷aPHç3·`ü¼IàR ܲ³hè"i¿ïÜoã®#þJ²­€ \çäï…û?:wîÆ™!ËAo£ñ%ã±^Ù·]ïà­ µxÔ‚Æizj˜7I¤ãêhç "yŠ"ì›Çâ}ºÖŸàUâ{É­"Ì¥‹W`Æ w^¸h‚DžWXfæ:ñн7{êúO?öÐOÖß…iz3]>ÒKÿíã{ïÍ;Ÿsì]P´—¯RÌä¸È»Y ^$¤È$XnVwŽiÙ•,%rZ–£ N•K Zròn'óî}¼Ž¼A ’³ÞD™gäº-œ,‰‰~Ç!1q·EŽW•2¡CÍÜZÛ°@-]{†½bysªëüXÅ-Ler¾‹ ü;<77vípâKØ:/zèÍ{á«T{QKHh·(Èœ$Ê{cÿ¢Ð©¼ÿ´ lËÁGõÑMÜð-Õ˜¨V$%ÇÕÀµ²²5…Sx© µèå‡,¦%‚V*´Eƒ!W ¯?»¦í— EÛÅ ë>¾Ã¾µp:î¤ÜÑŠ¥TôŸ,ÆØ{€mÖ–Œ1ÐøÁml|»f¶æß]ýàûÜõ¼èq8¾.=lÎÚ0êÞ»SÓF¿ºF>[gJç[wE1O©w8 *ñØçÔ;30ÑmàzeªËØÙívíºsËY Ï~­¥g¶ë‘ÒO 3lל¡¿˜Î 4µE×tÛ²L6]x5”Ü{S­°7åb{S,V{I›ú–¨Â,Ñ„%*õc‰Š_ë»'Õs·D÷?‡»µRøôvðåø{ 6©ÒD_P+†V¿š¶5ƒîÁJäáéÆó­ŒÞ}¼…o¾k·S÷úìÿ˜÷K0øL欄@÷Ý5vïn¼)FÖjmãU<'p¿ýîíúòý[4}Ô¶L'¸BK`I´ÆáÓ™¶Q‰ú¤â;/ ßííÓ>;ûÙõCTº2”ŽþéözoM±ããË×/ÞÙŸ¾vÜCµ#…U«è< ×ÍM°t=+åIÿvoÔ~Í`ãat:z€þóÿfÙ¾}ÀAæ!+Á±õviÀz»Ô…Þ®Aov»§#ÓÛåáéíF×a½êíbÆaªù9?1½×ÍIé¿2Û¦¥q3Tí\o²ŽÂ¿¸(pQ@=ÌÈtfhF¾aôèz÷sÛ}|Ýñ2[J@Ã…Æ|?qñ,»÷˜„¢…6üžG¢>—Ù®‡ë;âɆ¥¡k½·Ï¹Å6ž—/(ÃQ串|˜+­ÌéæO¯;}ÒÃè=Å“niú`\ÚhE7݆AsKö¼ýîÝ›1³ekuÄÑ$C¦7]bHŽ@ï¿mð†Ä‘Æòíº6|]‚š«Ù yrô·dÉw–?ÝÐM7äÎÉÊæc<º±T"žC¾mÍÚM¾ó62dfdtmd(Ã32„òàå3Ùس4u`€”$ RK8XFn€ì˜ÕïÜÛs¥6è…ç>K´Â+×{:ÖW+u`îjâ/Í5.ÐÇ©·úg‘ÿ‡»û‘gÒdͪub™“å|BR…ûFK[¤Ì0xˆóÌJa=ej[Äa¶C‰v;K²s?›,°»Â K~ôÁÂrÉ«t]F`ƪêÓSŒÏZQ… º³ý©µIHù€4CF’¤¡÷Hçy$É|ªHR¤ "’4)ü4xz_U¤i*’á¾&Ãw]Aª!!PW‘*ði •7èwE‹>Ɇ†I í!ºÎ ð7Ü£]‡{*OH@²,†ß=¼ý!í%è)y^"ï7$)"ý]I’ÃO§íDU¢ßE1|Ÿÿɪ†è³,ËHᾟ@uñ§@?d™‡.È”zQ¦`4ð8wT$j ¹'ÕH J„ÿòŸý4Hcx¦!M‡^ñô~‚\ŒAB<C!C¯ e C:‡DE E `4Èžøx¹à°I|ˆ"y\‚TWE'¿)é"yEY  ËZ8—ćjñi©ÐcCEÀ/d¬á®F REò·ªCÕ TiÐB¿”CóðSOBkú ïÖ$9ü„‡ŸjúÓ ÷U¤Ãß‚¬#@C%¨“Ù!ÂðÒï0fä¾h„í%µx|¼Øz’"¤©¢TJ-™¼“*b*KXæ#& ]¯”*¿Ù|M<€Ñòë50"0jôïÖ•,Áöp0]®]Ë &¤‡äx«ÒOéT„› €Uûz.¡×sþSà¿´ óHÖñÄÃÓÀtv,ÊVîÌš[؃‡¥]¯rîõ\ƒîÿ þ{=×AÌ‘Oýwz=$ê=ü-Äþ-ú$ÞoÿÖéâßKbØ@k§Úz 4;BÌðm’tù­3­ð!ûÀ?ñèw¾å\¾žÃ—këZÐù/öÿˆ˜ýè-ú$¨Òµ¦Jêþ‡¥ìÃ6ž¿=Ñþçäìs»®ñ˜’}Ì#Ì>©~PÍ>xçdFV?©R@ïL/"°ò)£¤›• 9Þ ‘I>¸$qð‘ø ÿž¬©Íï:”s ‡©»þ#©wµu¥îy0ŸðäÛde9Öj³‚™^rßüÞgïVHæäÆé:Ú ÜÞbJPÖp©%Þ;A)§]’<§ïÒþ©þ¥Êåyþûgoâ!K„\Iy²tÁŽp)µB(œ¾+Ò­•+ćä^[تÀV¶*ô±*"0«÷%N*Ø}IëÔ*–@J`jBµÀ|3âuÀ&˜L`2Ù§Àtf°ë©Ò%ÊsB„;ÇTô dŸYÜÆÁ>ÑïÒ.Ô⛘Žb¢EôvÓ Âî%]§áå…½! ‚À¢Uƒ#Jg»æbâb²±´_öî\41Ç€ÆàTEÉ`£IIl2&Fœ­Òi$N¤½Œ±+ª8AjÆ ò Ñ!EåRè¨/)tÒMÄc®¹±¥~è¤]’qdÊb‘”48¼ª–£”‚#5™XbKpjº)Ôb˜Rº§ æ¬u‘SŒ¤ò) Ÿ*G(s¼¢6uS|„‹;U´Ò¡Áq\#ŸF§ìrU×÷Šš &U¢¦|2еcQSÉ/Úôvjµ§G†…YÊ.rÞ×“Ü 1N—¨F̳?C¸xµ‹>,Æî$ˆÔDŠ&?ˆD°e‹\¥i62@³Ib¤£øŒ?ÎZaqÖ]ÇY«ELpÌ8ëvžª½úVE"f$41v¹4YCæ$II›B¥ÿeKéW]ý_ܲ$äífJ</¦}Ѫn4ÕòiÀ³‰DVY$rבÈ;+»¯Häó¹û): ¤Û躡ž$Ó(r®Yécà™·66x Máï;Œ6~TW×tžÒGíõW–YˆÕgºÓJ¢× 7áyŒä ±¹ç®ÐÎÑVÑ¿˜fÝ=ÖJNi¹v*œ.¤–NXL#±´sÏñzjíÜ6i¼z¶]àENT+z 2X‘NÜMÓªÀ Î85š§ëén IõˆvSçÔtzë¶MoÝ”@ UuSäõ´ÝTSãYØK%Åu²k/‚s;+ÿSš-úªJIñoÀ¸Tú>â€ÈU/7 B!XÞs;0·s;0·Ãà]³a|ˆÑ‰ˆÕ8!'b«Т?—Eˆ0™Éd&“™c‘™5u„fÆâ ¥fõi?ÐcU™ÐdB“ M&4G 4”’gä¤dÇö;I«¡g¦·H†`B• U&T™P=&Êw#cùŒ&J}×ÕªèÛÄùLd2‘ÉD&™'Oï(9Ô+!r5¥µô˜È©¼šÚ¦ãs{³J\Â'êA*ÇÃH]®,%,¥fpS€$5³û«¤ê²UŽ×Ò@°´2 ¶\X3ÛEÚ"ѱeR3íZ2«¦Z#+’å]³¼k–w=ʼ뎉¥1l#+yNTµ´$¡™ûÉ'–UÏÃÑÚ½Ád“9LæWæ´ŒÜJÅc ™(nZ³?Ù@܆­÷Y–}‘bê_ºXSìuØCQàäôy2y ÓMúGQ”8ÙØ c¦EKÇŸF¡±4Š®Ó(ô‹"&èP žóNÍ:ïäjç]‡u÷NàÊÛ³”ï[¯1]›[¯uNÎîî‹O„þ æ¢å,’ËqKp{°Îáêu–ã”)/{×cê—ªgRç[·ÙºÍÖm¶n%(¹d]NÈ€éÆ{HFã¦×à0œb·Å@6ùµÐ—¶Ýõ—9=ÜHŽÞŸŽÄ-Ž<–WÓѹGˆHn‚ÂiéØl•KDà†qØzº6Ql࣠¢ — p”¸ìæ(¨œ–¨‚,Сô,ÙzW䘵%u=}²@Dj Dâ Jí—F12†‘BHLÅa<‰I *?¨¡x*)ÞJ§¥N±08EÈàcðZ˜|åèÈ¥èö‹ƒæŸ‚܇X1Ý#jHLƒQ‘Z ßH ¢ ”˜ƒbÂj솃´a éÜz-XÅbUÁAå"¨Ù:Ö–ƒ*-ȇŠ)FÊž’3Ž©±eìÀÅz¦af»ø`ÛyO°`Æx®ãJ(LØï˜‘8±ªÌ-6ËŽXð? þdðw2¦$ᳩŒI[tÕ2*Ïd# ,‰I$&‘†(‘ÆŸ¢³$®“@vÕ úJåY„o· À÷[Ñ;º%Lg°œõ&øÍ@cñÛml ±’Ò{j„Ui ×y<âɺH´H¼&ÈiKTL¤Ð•ÄMbƒE©zH?“èûä6z6äªms³žÊÕ=î7â—˜ci¸¼ÖºÎÜZœ5…¦mß™Óû6ÃXWÛÏïÉï¼Z~´YGC<¿Â“a û7ãã y9eN,ñ7sá:ùMxW`™ ]uEÓ2SƒlkG›î(Õz%ÞqßE¨„÷o»Wï¶fŸ /¬Þ¥Ímµ“ýzÐØ¯EIn¸ÏN6®/há–jùs¹}ö°§d„Úï 'fk±O_QÓF¼ÞÍb¦Iíì~å4kY:»å¼á/äÏ+D¤Æ¢ªàY’É{[ŒLï,‰ü袻Í|r]®í_ó¢×UmeyžëM–®gýê‚aƒL4m§o?`/°¦Ù›lEd+âWÄ=ç>fÜÚÕ'Ô¤Ž0++Ögp»R†4D1*ÃNCKìgsX ý._ì$AûÉÎÂJYXiæ9VÊÂJKé¾0•²“hB ]äUOyÒ£ãS%^Sr’~Wd±4BEO]OÆœ$ÃuvíÄÕt<Ë‚xÚ c¤Kª‰œÎ·‡g뚬Ï‘u VÙ:©B¼¬æ×UAN®«‚Áñé”Ã…ðìWÏ•°^Å>oSæ]Ýf¢ŠÕ»X*WP&ô 'ƒ1e•KÕçæ¾zK;Ž€~wÚ…ú‘²@c@;U\'kµ°ýjd5užjm,ˆµéØv0$y=Dä S%CCáõÝÜ(±#b;ag=Ä”Þf¸[Z JC=µ‚ |-6T)(WüžðGC‚¼m²]èÖü’è¢WÀºâ+½œrA_9©îp^¹H¼XDW抗 %LTãí96¢OþŽöþš`Wñ|Žâ7 bŸ–d(zχ«·ƒÛHn%Ê´Ù/¹¿|ñq- Å7ÜLp3ÁÍ÷~Á]]}¬àÖj©Üòý˜Øfb›‰m&¶™ØÞ/¶«kvµÛz-};:ò•Ô©õ:)ÂD7ÝLt3ÑýôÖä'ªuí=92qØÔ5 ¬v[MïsÆ'Ü…¢GaŽcߥzWPà4­2±SÊçu6;e´Ö±’[ì´Œ¿P©Á •v]¨tÃæ‚Î+•Š´ÌP½ÚVåÎQ5Ë«Tiý9\£ é{˹G`ˆ ·îjm•š5E])”ÑXM#’´ß<à_Iö §p /•¡½ûR¯%ë ÞDK¬:½Ym³ÔÁCß)ù )9è# ÷Ì-×A(̅i9@„‰Vð@A£Ý:Ö(;Å#qÜu“µžú |>X3Xiâ DÊØ[ÓÎ+™‚ÞY¤0yj˜}êQ1ï»v0”’ÜPª (°at,ÒèGLTŸoŸ”‚ÍçÚ0©aßyæ6)â é\¹d;åëÛÏ/¶ò+Üð}¶Ã›:÷´Ôõ)™þjÚÖì Ö#`l“ÄlÙš†ÃM”s,ùeÛÈ_ã©eÚ\×.Âñ!Dc>Ü )WqÛ[!²$ŽÕ ú±B„¯R}+¤ü”ï3±B¾.=lÒÒ‰)ŠxûRQÕhjåhVç­ <§äÑdY~ †‰ÒDâ«Uã$Åյʬv´ìjˆ°,ß®1XDæìÁ aþƒmä/a!š¡è!`A%kô²,÷F=L´7>h“Ì_d»$NÚôÑÚõ}ë®Õ¦ã(Hþ‰¸Ç­` Ó !ÿ‚ä‚Þ6òRÌÝÒ¶S ‡ÐB‘ k× " ‚UŽHiàRß¡öÒoµ?j?‰´º"¿xÎT‚l7íÈŽº$þ.XÝÞ ìáGðîñ¯KéBâÛ“6ö)æÏÇ8]Ωè)Í, Ì(E½j'Lw®Æ).;G¢}äç!ç °rå¬\yæ9V®³rå%a·Êëê£DN5rÙÍYy-ò`Y y­qŠ¢.°‰¬FÕLT3QÍDõóÕÕ!gµDµ p’¨§E5mÐ…¨˜¨f¢š‰j&ªŸ·¨®®Ê"rFAà\VTKœ$%÷§ NÕ;ЪCß/ÖLX3aÍ„õ3Ö_)¬%NTr¹„DX§ÎèÒ8^ÕÓÂZ:Ö%Á¿LX3aÍ„5ÖÃÖ{,›“J½ò!}¶¤ súN Ä·Á'"èDº±¨&7Åû#î[úpI5u=Y+Yn×>yäd²5¿hWd¬_èD’ј)`:ù»N-tiž¢¥Û¤˜”ídNä$v±)WŒÖ»²#_Ï;=éÖŒ°£šU'ØI|ÇØU‡¶–g”ÚšÎ)DÎPµi2‚bøIw’¼‹™;væ{׸ÞU•é"n·n’êBžº ‹'¨þSòÅ+™‹» ì-³IT.^EÕ™4±×ÈÂ^ ŽŠÏ )•Áyf¬2Wôë빇qœ=ÛkLá¤l ¬pDç)[âEœ6eË(×Ī·pƲõ–wýç?þ}$5©-ö›£em‰|¹iP}öÑ3ÎÚ’ã¡iF†Å}Žñú2=­vâáµÝkvô}õ6 ~g“{|®þà€ðòa–Oƒ×k]×râ§%öðkô^¸¤ $/®@g¿ uù§ß×ûóh´´Z[háßÒŠ ¡ñž:Øõ©Mý-Ÿ±ƒ=k l=y/¢yTýç­ñUT^£ÕÑ·î ‡ a¯™½mÈlŠ@eÚ à94%usæÖ¢s£|ìè¼'ëÙ¯®º-ºwZ´^ÏÀ£!2Fç ©F“R˜byÍÚsðhÄTJ ·{êªÐvT³Úo¡ ¥¼=ýU õ„äÝeiúËÀ¼-Õɽh„-¾üJÅæÎÞÖÓ¤/}t°ƒ,ç ”d˜”4ÛUXDžë®5GäèSóò­_1rç(XFŠ 7Dͤ ‚¯amqý&{Sèq ¤›S’íŽL‡RŽ&ÈÃs–wôm€\4PáBX^æIÌÄiVOCžSóvdêâ7×"+é%F—ªÂ4:êHËÔëñyMüxøO|Êý"è²_ˆŽ€ ¯Ð“‡B…WÈCá˜9tŠþÍâS!ض­µ!-të|µnQkàUNÕäÀƒB"U貑?áÈWûŽjNyCÖ²#/²‘ðÈËÝŒ¼Â‰é9ØœôÈWoÖ^æµìȳ9ßýÈv r:TKžÏE‚AI¤¶óÐSÅU}×$ ­åE©,TRדñÉPí]û²sÆ¡’sŽrLt ewb1@:ÇKF Ò÷=…•3® &y*Šˆ—µÔ)Ú`ugˆD(g ±!•3> JOŸB€È$4r•3P9@Å TvÊøQH()p”(s»SLÌ $ÊF!5} »¦…V T À"$”±ÐqÂùC¤q’*f¤¬*iˆ$UÎ0Q¸þ6•Bz#&’‡ƒœBHáôÝæu¸Éª”‘ÓŠZ𲥏.Be ™> „Š$u´Žï$µ’A(ÖÞ› "¥‘¤nËCDÒ6'†Bâx9;›RKºÌ%j«‰»õºIºUÕÃ=+ {‹†¬ìíbÜ¢q[œÆ'UW9MÈ¥p‹œÈ'ƒå¸‡žAß`ÿ¢2¡Û Žêâ}‹Ã~Õuï7ë¶"$ÁºóêäøZÖÙ I#«¨õ¹ƒô®nG#+²š#j÷›Oñ,õje –V=ïb‰ÓŽ quéÈ–ƒ,Ä2gb¹£-<ÄJ¤j­çùﲈ«0ûŽƒxç«0ÿZAÜ¡/­ºd`=â`!ÌnÛ:^‡XwÃW]F¬þði {d_(¾™Ü•h‘9AÖ³ÃwÜ-k6|3¹£mg:ûŒÌâ+U\eÃwàðu´wL¼Jvôê¨ lô½Žv© ŸQËD©ŽZö‡o¯‡¯DI¼#SÙEäx)»W%ë)_F± ][J¸ØºøÊk %}æ»öeå˜Ô£8A;€HæÔˆ²žj¸ B¤7„¨¬tÐ@ ’8)·£¦·c2 R‘RŠQŽPá~ŒÌ¢<)œ^ÀEÙM=])õ¥Ëåû1…\$—í6 "ÂE¹ýEÈpQb¡*ݱ’ËwJ¸¨lã| .Jâ‚¥RÖÅ,)i7¿Ê)JéÞùÖ T—‹ÊvõŽQã=+*Œ0’w\ó-\ÀÄL|´/¾`+\ 0j¶¦'À >Ja+`ª‰‰.Æk8-±¯ÏF!£(²žƒ1+Óå=QåUßJ6ÙËÖ½Sؘº”e6]“2(ñ™PÚ”o‘–/}…Á,¥r ›È”“ԌЊRB®+ª–ÁH(ÖË÷ÙÊõc”ŸŽ’j¤¦¡ÌI²˜YUQËNÃ¬Ú Š¥A ry¨Ká|©ÚÐzVîï=˜RÌ'(ÆB'2(·9[±=)p¢¦6Ý#þêaüû½[º¿g£¸n‚[+TŽ/*vž†”lÔƒqøKœMv,0Î qWb‰»'îîôÒÁ$î–W"«¡ÓçíŠÛ*š©*VÝøRl„ãåæÖ¨-sä´[ñf—n{EN‹¾÷Ñ{èn3½ÇAÝÌÔV}j‘|ú›³ôÖ]‡MID%eç7Ñu@Ò{SJ-,;¯ÑO´¼~Gó‡_£7®5C3 —Ð5Èᆄ‚ñôê¯MÏ p&‡šdU“ŸxÝIºð@0h ¼þ{Ë™ms¨7N&' î;Ö¹óù+}%‰×q¾¹³›Åèr:ëDóØÑ ø2æ#ÈmÖ 6€ãràMX³ré>R¸,gñÜ9ðG‡òMÈ4W(ÉH U-oùðgˆ&ã¬OFwÖb ÕnŽþÉœqè2¬‡úâø8¹•"3+¥s+Ež•"JåªøÌ”“ÃêB»"dÞ‘j –r×&°»²;Úy¤•’¥ª’™›´–µ‰ìÌ`ÍÐ%G¯ÍÜ•i9mN2è—Ž7·‚ Rü+мÁX‚U›mê^ö×qªŒÜ‘ƒùhÍM@RÞ ¿<Ä“¦¬Âø0 ÈZöj¹m¹ªœ&øñoï>}xóÃGt9 ?‚Š(Gõz„GŸ4ïz¦7#îåÇÛw/ˆJ·t}øA×eíñ:DÿÉô­é±NòèšÈîÔw¹jµ– ÁG½ýøæÃwWè]øñhÙ³)°ÈÓ·ß½E×y=Ýg ö×¥å#øÿ¼ÄÆl#òÏæ¦#P•åIFà‹¬Ñ£AÙ vßšk×ÿC0 &Öv°ÂìàÎí`u€vpùñâgb¿uWäM>¼åxpùA¢5HËLàDˆÞpLà]@Kµ Ê€Qˆ fÚ8ÓhœEþ´œÝ}»éخĮô]©j•#Q!¡†ï®‡=VÈ-#ÜŸê÷žn‡M­f+qýHöР–0Žî<1”xFÇp¼C ýèc´Ä&,W¿ËÈtfÈó`(ÃÝáG THRªØ]?¦½üM¯6k¿`üÅ5y»)ƒ¾~}L{êÍž'Lq¾ä¿5×!%# RÔ è.ßõYÖŒÊZ4õžÖA¯Gƒt.™ KÿÖ\­ÿÏç+HTAl¿" ÂÃ{î|N¤Üx§<4x†at² r©w-ENj ¢à¥M–²ézs…bôÂKwO 0öz2Nç|ñ¯¯Ñ®fÔIm?¡ÈíÐ+9ù6Ý©Žhx>•ý ôž¸#Š™K&v,ñBYw¶Äþ°ZcoNj«$Ý#²¼s‡Ä™{Ô.<åfi{ÏA:PrTžmxžƒÑÇù¾#ê;5ͺõ”רQ àˆA¾?@R½xõÙ¤§½´=·UW®%•Çj¡~äƒaèáÈ@ ]…*hðõЍçy>"9ÑÓÝØ3tOÕÄ/·?ü¹ÄÅCŽ"¢H ÐÁ¶=ò[²*1}Á2ï|×Þ€ªX«Î¼îsȈ›cºˆ:«®PåÃBѯÅÒõ`ÑT²o>µ$J~ÂR'GYnz»–$ÜR"‰¿¦Â{¡ÑíÞý´ÖVãÓgÿgäOdÂ: }ß Ç+d›wØ>’ã k2ÞÏÿ}t‘Câ¶Hø¼‹ÀþEï>Þ°’F±¹0­²Í†çlhlO±sË@že –Ñ™ì)~ð“P•¡iÞØ+“[˜åvVéËÌ ]V‡gN4ŠT«FI¤ÃtùËï=¼¶Ÿ^Pñ ¿ë“-ªP»éx­é*’®ê€i#´0ÈfSȃ6õÍ_˜¦G2åAo[¹^¯;Œ=’O}Ï¿#I¥áþêÜrf×41†`@üváþÍ[ëƒÎ9ø{˃©òñØ~UpêáP}ýáÝöÛrr°$»g?ƒŠ€.È|q…|üËϡ΀.e\ëÕúè‘ú¥ž¹ÕrjcÓ‹Tûk0/G \S†…üü;º¯òû«ð¼_ø‹ÌaXQzöNç.M#'›¥á„ ¥1Pe?%¬ëñÎÚÇžK†i…aÁW!Ÿ&QXý\„Óª!½sÏ]]ÃâÎÕÙ uð#Çlè™Y¨3³°s³ÐšY½`ZcíìÎP…=f‹È•-Ñ[Û›,eµbÖ.˜Ÿ=ü@R×·"]˜~1`‘½Õ¶>ŒÈ©ÊÃH»vÌ}Â]ôjÄnøŒË4¬ÖRPût|)*j9Ôkpa׃DrÛðÍû]Çõö9H$gÏh Ð|A— _ǦoÙOæ#Ðþ¯¿lð_¡ûµkÛÀ§þ“HXev| Kå«Û©·¹#VQηñçñÞ׈Yõ HprT"hå?ÀŠo®÷}òÐ_Ãí/ø6ˆq;åte†Yúñ™³™E.ÓöiX'±Ë¬¡“ß™*F’/^ýiЪ;SsCÒïîžâÝP`~sÀÌäÎ'ô8¸&&‰^¹³?EŽÂ#8xÄØÙÎê¢qà¢ëÝ÷œ¢Y©H‰7þµp~ùŸ±W ¼F tt.K“VwöÞÎ“ç¬ gde©>Mî¾ÉŠV[*!¨úˆ¼:œÐœ ²´tNOõ©œ5èÅäq¾ué¡R`Ažd/蜜=¯ÀHJœ1Ù$ê@ºzuÃÓeä²JüÒ~ ÚUþnŠصj>éa®ÆgOýB|ôîð9Áüu]ûëD~hþºµ'í©V|aŸ°g»`¿/A»¡³8RGg®<ý܃À‰1þÉ¡ñÂt` gÄ,÷ÜU¸ÑÒ—-ÞÒÃõD׉û?fÏþeƒ¡´+–æ›lVR[5ôäÝ„uìË£þJE:W²ßØvD¶³›r`ôö33‹÷MVÔкDpLï©_£·O™u ´?nÄ0㑺A#æGÀ´²ù>fWè;‡ 3¼=ž„˜D¡7îü@ÇA¿g=`’D½{4ÍÕÆ4‚ è4­€¸¼ «[­<Þ£Àà;rOÈÇ6,Ò7d‡¨=ˆ¿¶ÜN«{Њ ž{g94i)Á¡¦ˆ‘€œrDìÑÌx$†3;6…~ŒGá«TßxÎÝx|ë:S’Íônd¢*ž¥šƒ'w Ý_¿jòô¼î(Šö(Žd¸Â8ŠåãX~@NWËŸm>ÔtæF rðí7È Çjoö¶+gŸ÷ÇcRÌH9ùކ´ö©-ôH3M¹¼þ‚IÖèC˜^Aµ’Nr¦$¿·îq̲„Þ¶.—Ö´ Òñ­A¹ÒŒO õ¸¥­× ­eû3ÎþøP0ûžì÷ø®MÒý禷ØFqõjW~*H Ųl±Kk– J‰c|Çá·ªj:o³ì÷ê#mY¼×â$Å?øë“ÎæÄÒ@o•@?Š"@(:Û܇å¦âÝèÒßøÄ s¶q’1ºÜl?'FAêì“3;FDé1ÜÇaRN¤­ªÞø|o9–¿Ä³K²K÷)ÏÚ«&0¯Zç^5qx!£¯¹w»Y­ÌÔÁɇ+íÇ8USØ—j6½ÆÖßw$m ²à³/•½mXõ³š ÃFÇl`˜¶}gƒ ¼‚uqeÚèÓ§¡kMmé ä$MÈ¡©BcÒ[ç„æÍv_•ú"Û©wbçµ㘑ˆw¯";Ф•χ,G$5ÌÞóQðˆÍû1‡3$޵AÓ¥ÛózýÊKÂ\Ó„%&!­$67§å¨­)­V³)u«À¨ËwtkäjHÜΈµ,…ãSgü¯ˆ %‹@*MÖóBVDKÿªÕý H 9¼Øš˜×ŸüßwáWA|«©²üFW4ní,.¢GÃß"á/ñ5é>¾¼À`LÍâK&ü´@K×yïš³šþ´åZl¬å¬ _ «ÌR.Fäc®:'* \w\QJ¡\)X‹¿7W–ý„Üy1óðã»sz'ÿb>”'TÓ’(ƒr·¿RmAÈœ.å! ©{:g¤Aà4Mëx8½mÒu,ÎÀ!"2‡HK‡Èµ;Ÿƒ6‘r\ì®Þ¹³§Ý·™;Ý̽ÉÔ…µË ^ýPK.æM",B\PPKIga5 styles.xmlí]Ͳ£8–ÞÏS8îDwt/‘ߪ¬Ž®¿îEVMÅdÖf6Ø`›J Àyï­Õ¼A/zÑûÙÍ3ô®ežd$@ þŒÀc¬ìèÊ4 óI::úÐ9çË?½œÙgËlÏ}÷ü4³ÜgÚîîÝÓÏ¿—ô§?}õo_zÛ­½±žMos:Xn(á›c3|³<Ç…ïžN¾ûì<»ÆÁ žÃͳw´\zÓ3[û9zU|%zïíQeöîÐz yo&us÷kþ7G•Ù»Mßxá½™ÔŘ²·o=Þ›_GÚzÒÆ;Ð.´âÕ±ÝOïžöax|žÏ_^^À‹<7‡«Õj•¦ Þ¤õŽ'߉j™›¹åXäeÁ8§uVhð¶Ôe›äžkËç†ÆR¯}+ÀU°¸d\ò=ˆ½'7¾>ï¸G×ç] Ì›½ás³¨r~¨(&ÿPQLöÞƒîkúWŸÿ€ £ÿüð>Wþ÷]¤nªo¹ÅŒk³÷{ž—6•ÜOö¨¹H–Õyü›©ýr¶ú‹o‡–ÏTßœ­¾1œMЏw¨ ׃s\C²>“!ŸÊ}°n©qÝšAb¸67ô¤.3Tµ˜SÅ_Q½«Û¯¾$Zäy禟3‹~‘W¼{úKríoHþÛò).1íàèoR¾ÆŒ'ZëËðÓkxÜbÙÏÞ—£?InZ°þäî±ÝÐr;|Ã-—åß17U—>}íù&Ѹ|žˆ¹7ÂÍž•ñ¯äV Ï`^ºÀ&ïI®UÊ….Y¾d £Í!¹ì{T÷Èi‹¶¶ãH¸ÓvÛ¬¯íð`­ú†%HÓ"mü¼÷­í»§ŸìMxÂkeöbþVäÕ÷ðptwôÖðíIu8©âkÁžÌ" «\“^2ð£×ôÜ÷ža¦ ÿ“å³­ÿ³ï{/O3¬÷ž?ÛÖË×Þ+–x&Ïøš‰–`•Ôœ—@®b3½SH†^:„™¢hH†{ß;íöRº²¤Nü¢lðýn–ΜUÄËÉÅ×蛣I‘Î1Ê9”ZtÂ“Ï M¶Íôq/É,§Ï» ³— –x¥æÄ-=SahŽi5CäÕµ»¦JÔGÖá¸7âÎ.1—¾åØäkG"l ½õ/Ö&|±C¼ÄÆß'*ÂY:Ò3 R[¼œDPkË#¦ŸUÎ0ŒËó cÌ¥Ÿ%; O³k™ÌãÏv`¯Óo}“‡$Çš‘0«W=¦rÛs2}Üñ¬¼¨•kÏ|»eKÏÛɉýºÀÚ­µT¿œ<4¬ÚÏÃIWg%³–+i­½}k/flÅÞLÈþùþþ½ý¾K‹6Û®X%x;¬½Top}ùŒG£ª Àþw!.9Ý—±Æ÷¤KËÝ"TÍ÷wA4I„ªþné“D¨šÓ6ˆÓC¨šÅï‚2I|ªYûNøLTOWóô]R'ª§«™ùnMSO×pñ] ÒîKQ߆}ÏáΈ2¤ÔH÷ŽªÚjïHD‚·©ö¨˜S#-itކ)–iþkLlñvjßè:ÝQÅÊÙa¹\l·›Íj5hŒe_F¦&žZì«Å¾z4‰}µØW‹}µØW‹}õ¸ûêÞ÷Õñ\*﬋שcOÍÙ¶´ bSUyTs§¥´úhº· “œÆ¹ýv¾üMÕÁ‰¸<ºìF)F7ᘠÄUÚùx†Ð³éì ó1= »ªKÖµQ¡–‹VûÉQ½pç)0Ô§ë±áìÝåë±áìÝ#ì±áìÝaì±áìÝŸì±áìÝÝì±áìÝí±áìßYm’x^o×£2 ¶tۗ㤴L¿õ¨³ë[)@…ð~+ÔÞo÷áý¦ ‘Ê CâåCÃr1pçƒU ê9W¸3Ž6¶Áõm÷ä‚zLëj&b²|—õ­-kÿ‘GàŠ—;rïëÂk(ÏÀxàn ‡.Ôµƒd¸îߎ{¼¨…éÄnÍÄ^éhÐXéjXåqk‡ØVØ”çÿÚsL~D–œü!èö [[ßÊìÐTæ;Yy_Χ2»«ƒëjó…À´l¶‘™Ièe \>Pf\mV¨s5Ì£0žåà¹nêr­¯u¶„F£-„™eÑFõ¢p®l¨V6`jY53µ¦߯XFíä¬ôÇöžoÿŠûÌpŠÞt…ŠŸ 8›¬ÚÁ6Íô_ù³J/‚ý®’õøZ©ÁU±r1_Þ'6*aóDؼ{ûÄ2q¼DØ<6﮾‚L/6O„Í»«ÇK„Í›LØ«MèD÷¥TYwg¾Zx—+åñà.oíBÑÞÞ]¼¼ÝÞ2ÝF–O {MNP {MQ {U¾QD¨º -klÜèŒØ15kÒN¦Gº„M¿¿¦ó±R*€œi\`±à«¹HæäÄ XªœUUÜÓœU@ç ®€Â)‚`Å)RÊ)Z€k,ZÎ‰Žˆ–~‹hé¬Câ䣥W +¢¥SEQÊÊš£'©6+§µ,±œ­Lä…ÒÆP·0†ÿlÔ%ßGȜ߯4 i|5u ¯8¿‰‘½gU@N™ –¼åt€8¥B„í䬪…S,¤Š5À²>šµ u²éHq)ÞbþHq±¸—ï8J?еS”dòhm%„¡(‰©®qîT•¯&1Ôùj®€†øjB²ÒqVUÁ‚S&¸S(¼ÿYpJ…@œbáýÏ’ŠõPÚïá*µ¥ö£ý”vÚÎ]îãUËG1‹Ll½™¯¯ýŠÅ½h?­í§¶Ó~tF í'l¿!m?¡Ò@¥-úQišPiB¥ •&TÚTÚ²•¶*M¨4¡Ò„JJÓûQiK¡Ò„J*M¨´¨´U?*M*M¨4¡Ò„J»…JûH²gBI$Ѽº‹ÍÍ{]j¿Û..òDÙW»ÎvAN4‘}µ÷k7„îÊMˆ¡êÀs]Bà¼÷õ½"Tj® BÊ$ñ©-× Ÿ‰êéê`rÝœ§©§…;çýˆ9%ÏVÁϸü6nüŒnj˜Š÷à¶©áú5 Yµ¼’+¤Zr%‰tæÈ}kZ=ºPh OœÖ‚*™H4ŒÞC”q›HÓÀïvÑý§_ïAÆ ¿¾£ˆ=|}‡ {0øúŽö`ðõèëÁ૤~¾ðB}„øÜà†&À Ý{H¯Ï~ (ë~Ø¡šV•Z›O;<‚ÝŒ÷ë• <Ç6Cå§ÔÑÞóí_±PyDW.Š)iL2Ò÷ø¢åf¥ná¬XȺÃè­±6á…Y0ó°%o» °ùôJîè;sEá[e!E^—ÉÿZ‹(’{Ž.ûöt’{ƒ×t’{ƒ×t’{ƒ×t’{ƒ×t’{ƒ×t’{ƒ×t’{ƒ×t’{ƒ×„’{^ØHL‘ÜSp˜‚Ãdf2SQ$÷,©I‘Üó“{&LÔ¹=G”‹s¥¡6†Á¨¿v^Êl‰\œ#%ÂDÒ2ÞLäâ¼"Í&2î]“”è^“Âè^“ðè^•ΛäâŒûêÝI\$‘_“7.’ȯ)ã‰Ãx5ÄÖÆ»0+d‘kµ‰¤5Ÿ[DRH‘rÜ‘ÿ&)d^ÁuÍ YT¶­Ô¤H Yg²‹P¦¼&»H )RB^¨ûºf„,jÐVºO$„¬3EBH^Q$„Ÿ/Ô}]óA5h+Ý'BØ »O„° í ­k6È¢Z M(4¡Ð„B»¹Bëš ²¨…B M(4¡Ðn®Ðºf‚,ªE¡Ð„B M(´›+´®y ‹jQ(4¡Ð„B íê ÕOÒÑØY’c¼a5”Óq~/DdÛÈÖ~>:ÆÆÚ{m–+ˆCµEsÚÄÂmú¼{~ŽÂi‘Ï ùýFæçRUèïäú@9½FU$¤$î„—5Ê : uË&¬€¾PnÛ†bO(`Ñm{âM(öÄ ÚPì ¨±gâízâM(öD§6ÌÏ«´–*~TZk<š†_ß!¬ ,J¥ú´k@b@ž^º¢š!X,VÅ&@ÛG°É¢È«†6ànÔ" ¤® ýö-ú£o«›p5\•í­„»Äµç9“ø» =gæÞvko‹[èÉOã„wƒ¸úF¢Ô¬¯î÷Ÿ~Ÿ*êToYCŽœ‰-‚UE²Æ^§˜$áƒèfoRCÉóm Þ¥{~èvÈ¢V1 j凣ŸŠY?Å¥V~¯ÇÁÆ8Zç(³æ±-†„|Á;ùh¤¥°°K!c² ÏÉfkíùf›š/Þ57_cKn@­Zœ›¿¦à¹ý†‘6pƒ)ñQYeëyaC•èU1’zâUV4ïŠm"Nô8náw~©»2ÕSÇM!†oö’Ì®>V9Ñ:/é¸Í"Ã_æt4§!•ye.uøhd&ä@eÜõX#\™’«Ç-‘Y¯-™8Ÿ4E®ÿå„öö­ B¬h9ð;¦I¦9¥F•TÆ×SÕ\.¢¾æH+P•ŽSòޱ²u½ˆó¬ªßKdù_:Ç~K½¤WSÚy¢Z: {ÚÃl½e¿^½SK‡îÔ3]×!EH„ƒtðL¶™q‘sÂk•án,BÓ§Õ]lw!sigýê]ñ-“-÷-Ëe~¯SòDò%Á±ñÈðñžêØ@ž1ÿÿcRÝ>#Ë;;|£¯‰Q<ؾO:±Ý÷¿_:•5DŽ ÿKºÀ†-ÙÄÒÏ03bÄ·°t d|öYÿ‹ÕØM)Ìä¬×Ú ÇÒ7|1Åp~a9–÷꜇I¾µ¶ÆÉ +’gÝ­iŸ ÏBiÂ{Õï†Ó°^ø:‚Všãæš“Ç2×q¿c&BS šM׈#4<І\æiØt –0ÂaÃÉRô?rd k7p.ô4¯M šEMnx¯Œ[õ¼z‘€ˇMý¸ùÂÆ‘Òç+´eþã|£túüHÇŠ=À@âB¯ª ±jÌ\è¸2¢1#vÃ(Of؈Àpç§2³I=†Úy¾?Wò>ËÜ›jr$ù*ÒLtç£FÅü@”麫‘ `Ë5ïœ2-u pšé§ÒoÇ3 Lùe-s)|²ÆE/¾’™q|)\·xwy;>Î×´¼+䪢ïùß[Þ¯]òÞóýË3_Q»9WÞ;ô>Ú÷z/£¼lá¢jo$m…evmq»«É~$ƨèEõ#poÆCcº¤œ“;•·©}-åÍÙ4ŠMMóò6µëJ\ljsDûbSÓhǼMíkán@}qS/XŽ[ƺ¸¸©¬à¹¦BÐrRµiæÇ’¶#{â³ †³á?–tTS3éžj Y]>¥-ï-’¤¡íÃÝŒEêøwrC¿ãç¡SR‹·G§2Æþ|Ѝ˜_ø’¢å¾&+#º¨_K­Ê™ÜùE+)æ›÷«~ 8ç“Ðè­ )-#„&Î’‚SÊGV}F–Ÿ-»/yXUQ ªÅ‡2ÉÓÊÍ–:$2R³ä¹NyO>~fҕ¦$çu‹í±öÁÊç`-fiõ½ƒá6öá°YZQo¹Ý3?½)ã¥ô†š:}¼j’ÛwÀ+In?q¼*³ÕwÂ+IJ=q¼*óÏ ¼jñªÌ(/ðªÅ«2G¼À«¯ê¬ï¯Z³S€À˜bÓݵi¿ÝÊP˜öcÃk:¦ý0xMÇ´¯é˜öÃà5Ó~¼¦cÚƒ×tLûaðšŽi? ^2í/¬¥i¯ jÚ7g)"¼ØAÀ\ñûŽ0õǰ랎©/Xü1â5S_°øcÄk:¦¾`ñLj×tL}Áâ˜ÅW{5õÏ@L\cK¨#bvØ{û„›žöùGç}B-¼éõG‚·÷mE-¼éñïG‚·fÒaô&»oã¦å·u^º[î57DÝknŸºWÝlýóïíáUÁytÛ`û!4üo‡µ—fn=$'“KBdD5”Ò< Dªv…Ý‚vùnuò_h¶w!ñ ¸›r¡åݡĿqrUÏݺ+-s!iß!ÎoÞî¡jš¾ BÊ$ñ©¦å;á3Q=]MÄw³u¦©§Öä7íªÉö.i÷¥¨Ëó¼6¹mRp0‚ÐòÓ«qjã\"OÌ~Ç!ðbS;ÎJT]ž8ä©Cƒ ÖVÒšxΙËN¾E¢ÔDµæE9bÀ“ìR,t>Ëh]¾`‰fy–?¢Ô‹»\N²ÓXoiÀG’v5ióÖÇWÊ5¢Ü¤iðÅ\´ÈŸhI$Gbl^d EšÏž‰Ï™åk~¥QxâäÊÑ¿sl#Þ=Åi]i»£f­½×d“i’ogRˆ'[./gߎgrý÷‘v^öÞy†_w,QïXB,u…Ð4qm LQ[LÓ—\Vt£!ŠÔ$¾gªqjákÓø ƒâ9À0= *“Œ¹çÁßœ=þ«ß;áñ?¿ ¿ ¸2ºÂ=#Üㇸ†í´Àsä•ZÄSÚ’¸‚ š д¨²WÓ\Ö0]¯®Ú"ÒÁ ¥¢Iƒ¼½ˆn Õ¡Þ^’}Ø×—„_&ñ°o$<óúy•ÅCí Äè#­ËQ¨IŠšsV¬´r`ÞÊÉi¶&Í’@ØmT‚@[•ñPÂV²Æâ \Õiº¤ yÐÁÆÿÞs²¬ö8¯Wó2§7.B *ðŒÜÐäZ Ÿ4£É7§o+¤`o+×9¥vSÛ qG—gƒ tuÁ J͆Պ̆3 —Ò°p¡v&A$’åîIZFSÚYÞÁ ý·¨AŸmëåkØ73y†àBNþKz;Zq¦EÃÝ¥S#}ÔÑ 8ü0#7¿OnÏ=f–ý-Ïþköc¶ bûˆ³ÛÔ~ºm‰µã²¢×Κ{@Em{Mkîµ}Ÿçó——à:®â{€ÿ5¿N¿O Ž!’Ñm;Në§ãX¢Šé¶X°Ê!õSºûpyálÃåÑ’”뤆z³+ïdîÖî)µ}¿h¥k“s{…9»PÙ®Wð…œ"©&mŒ’ÂÎ^ñ2óéyï[[Ü{ž°C™ýóÿ­«+ê7«¥¦£»{Jnq là^ ö$+ƒ…ûѤ— üh¼÷Å+›ûÞ3ÌtH¤(FÍ),_9¥îbœevÁHWa¿ì ûÈÖq >J8ȧ$-icÓXÑkÛ»lÓ^½l”éš–nˆBßpƒ­çÈ1c ·5ûƒ  µZhЦ¯ÐgQ'*Kž8ÃB+«I3ÜrHÁïÕäoå{EY}ý¬‚_Žƒ ©ó¯ú| ôÌôËæ'F“µ!å%3Pð–-Pû ª|—LÐåRY¨ßèúwßÜÍZËúx†ïÓ[)ZiâMÈZÙ’ŒQ……éת7,ŒêuÔ3ÀÖ3T«Þ%ûØÌ¼ï›H]µÅ¶"µ°íï; ±‰V„u´œH#±§»á•¬žãýRÖ‚sC-›­Z­€ò† ´›¥GÛi³Ið{­®ÝI®¿‹?žÙÌ ki‹j¹ŒÖTxk…Ó~Ýú='”Ûí] ,qâ„*`9q¨‹Âú¨(z¿œ8”90„Ÿ—Ý”d˜À&r0N^w17x=Ûh R2GñE¤mÎÙϾÌ/,–öþDE³¤ Vä°ÈÚ¨‘›–™äk†­ÖÀr¹¸>[=g uT¥ˆóœm’×Dp¶\¼Ï™´žûƒ­>9Ô°¶ …í7ÂÚ²äÔ“Ïn½™í°ék½öôÕoÿËO.xÍü†wÎ>„öfOòWÍ~|ïZáì½±ºZEñ °ÒK&'¿Ôßm2Ö“±°ÕrŒÐ+>â-Òå–Äš³*PãÅç¾ÿUOErv°Ü“G|;´ç¦.î÷o{óiz3Ë´ñ÷Ö,yoTFA#d¦JñáÙ…Ž +ÜÚØf¼ª|°6žkÎþ#iè{rÀ’³‰ƒ¶¿­hø÷¶ÉÆ"v[D°âúÞ;ùá~`HPâuõ{{;.$ïæ=ðÁ~½£˜l÷té9ÜWîTúî;¶CŸG¬¸GèòþÇC¹ù£ÝyÛ¤‰Sâ”À=²¸â”@n7^?ñÄ)ÍÇl½†§ú;%Ðõ+ÄM $~°3õú[œ¸\ݤ'ÊðŠCC˜W;ŽÓ˦·9,7¤ÿPK!ÎÞw'PKIga5Cx§§meta.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-90112006-10-26T16:13:502006-11-01T13:58:172006-10-30T17:07:12en-US344PT22H5M20SPKIga5Thumbnails/thumbnail.png—WPÆC U¤Šô^¤*jPPBo¡I=Aªš¡ Dé½ A‚„zï -€"½T pÜýßoîá·;û´;»óÍ7‹42xHGs›ÐééBL®sá5AT×Ñ¿ø¯p#Q¢i”»›KÈÒ êåù:È[ÈBÁ¬©IC*™äËÎXR_ÄÄÈÌ$ÕÞÇŸG")Lejër¥Ž¤Ô1Jí «L§F³Ä¼æ}†Ìf+%gêªÈ¶VÐë¶›ËÚ47‡Ž )å°ø™™ßÃðßÛùYW'‡¿†3T«qªßé4¤<ÂãLÂu ÜT¼¢}¯p^BþãërùõF$0®+F7UT£KìÿÉ´\ÍŒˆhâÆQùä)“|É©‹vŸ·‘™î‡ÇÐ݆Xâ<@¾ß?p,§Œ~^ŽZ}º]R=*Á¡àI…÷Â3Îàeéýëe'É,‰8ìmÖÎGe°t\•·F¥uß´%@¨}­ƒ~‰±Íò†ÀìÈšn¶P}i¥\ô$ÍÔ>éTWûýœX™ñ+ëî EÐö µ¨zØ_ž <§x›[o>J!Ïl¸H 8Tcré¸0âª×“÷Ô,­Om÷j\,®ø<5жÿ€³ÿ„7_\Þxå£]%ÑԆʊ/„ýþº\MÙ̽Ëù—cx~Ð6ü¢oq°¹^@=FX0¸çß’a­K¸ö¿÷‰È~±¾œ#‡ ï5l¡ŸVPÛ[ÿ€ýÖäƒÍ:y`Ø^ 4’Á'‰Xu ÚÓ½rˆ¿J´o’^0Üʪ3» @gïúolŽs'í†VqE†¶.T·ÖZÿ³ÔöÞ1k•üñÖQuUžŸŠñœÖªñ¸îIíßî3Ä¥vê2¢%³‰©;ï\"ãoÓÔM< «RßùDÝS ¤P$D¯©çíÑE©eÔ>£·LSÛ¯ÓY}#*½=y+Øß‡ iy‘òãëj¸­ /ïg_鉉/B·2ù<ßØÙ¬4Ӿ«Ôz<ùÈõ~AòÀ~ßÄ··tɰÒpÃ{Cn,G|GíOö/%>¥q7ÃpÃ${¬Ç¹Og¼ç©wùD}æU»Íú÷9Äæ°åJö¸ðd¶`yÉŽ¾3Ó^p5ŒÄ ôL{l'så8Œ®u·uÌëø5ÌݱiÿqŽØ·ûÙŠ¸HúõçÖ°€aD“ýt9óÌjδí Ù97tÀWk/u‹ £Sq³ÄòC\GTˆbÆî!¹ß4ˆËø-ØB‘©úÆÆÄäyËEÿ%P“áfµeß‚¿”¤pGÐÊtÔA­bÆK°(—,Ñ>~týâò‘ÛR‰\Km@<Ö®ê -ûé.í…û³I˜³>=sÜ vk*nÒã5&U=v/UZÏ‘q¸w¦{rû!Ö1±´5w^Q'µ0…»ñ5î~Ã_ØæB ý¦û3h§%ÆgK=“}‚Cã6ä®V¼2–ŸŽz' f·sAÕØ¾ Û(™òå/ÖB)Q4žXýÓ»—“ÙÚòÀ:FOIlU„?UEL¦ñã)ý·ïúmcn:NÆïEaµä±ñr…UòwmÈ`ˆÔfØWœ1§Ú¿òÍžÊÚ)^Zdʺ¥Š¨Í1C½£•~›¬ehv/ q:K¶¾ s¯`iÑ'µ Š¡º¿—–r·‡×‚šm‰êS]+ Œ¤í³õYœRÙ*)ì¤ðk˜*§® Žgx™¼ù3ßÞE¹ÊZ®al°éå§»ujEv‡¼Ðnj zÖÛ<¶—<¸üÀ35!ÁU¹k Ä‡q¡ïIµÒ(ŸT O|Øoý1L°²ÐÏ¾ëƒæüÓœW…‘µ:ð°ñe'¿Ýë7n‹Ø×òP…ß5ÐJí¡³“']“­V^¹u£Þ†Âñ²gÒ3¸>Tz0 iüì ÆÝ‘êO$F@‹“ǹ°Þâ]½õ?H5"ué ÕGlç¦WíàÆVŒ—˜—Š_Y ¥),—° vž¬Áù» ¶¦QV¿Ä€ÞÍ¢X‡'ä'¦‚TãŠó´GZ©Ô&ß)ó¬h¦å6£¶žä"Û»fÙä›Z„ð  %Ò4-cÔÙé» žZ=̓ÜHRÈ5p K3 ¤N¸ber™ôÍÖÕ_^9{´&UïGìà|´²3ÜcðZÏ쇂’3i冧ô¿b¸F}Ëí–Ç8eÇã›ÇYdÇÙ†£Uì~I›5¸@Ü•ù¾nòÛ”¡ÏÌ ÓÀ˜Š+—]æ´ó‰@~ÖBä Ä¿Ýl^sŽéƒ˜' 6ïßË¿MÝ2Y~CåÌé^tV +xÎóÊ£7ùŽ*;žS³ÖobxÊ•™µùÇlâLù©{µ !܉å~†!ö“ªAr%c+VX<´.RSzLü4±úX©h=µš„;AÆö]Å€΂üÖ˜/[¥ú.#0s¢ncœ<¯Â3#[å¢Lœ©m/úÝ’Ñ0{Ôé[Í'Ôµb)ƒ î,ëÍÕ„pazœŽkGÉçŽêYUEiþ£Ï,VŠRB“Äâã¬Æ=Ü ®‘ÃÝ2 hQÎÇ€¬?YVL,ЫUªLáK±3Ì)¡?úôöœ‹³iš¡yüÐcЀëÄMÆÀ#tê[QÆÕ§©•®ßÑn ¯…ñÜú ј@ â÷¾ˆ€iÐ~;ŸXx“Üü;!`Ÿêç›F~ãp£{¹õŽ‘•äÄPÙsþ?ü%’¾‘¬•wD¼rzÑy0[ï 'T§qà9ðܘ\ﻎâA¨§7l¿ñôîó¶£åY—Iò42ð¶OE·f…7Û¥ÜNw2Á‚ÞG%)6bŠvž7Ò$EvoZBŠÉþ³¤ÿ\ £9õ[.ìPJ£Ñ]]ú|¥fÇnÓÔ€ŽØ &Z K#r®FÂÐÁ®kVþÄi¡AôÇÏ–®Ú.±†58iíÀ¯­®Z .¥DÙ‘?iàèÓiŽ-ç¸Î­ÅÃüè"æôÍêÙ%rˆGhÊ#ëB/…Φ8-ïEŒY­ÔI¿¥k}{Í^'ñhðÎ §/›]'X6_Z«ˆ¿—R¿V ¥ÕâÇr{ž$;óKɈÏ´~B1ñú@†çVÃJF«?0¯[GÇïÁ½˜qr^>3üÞL‡kåJ­fTQ>‹YX]—3fñ»[ö‘²tùTÌk)p'æBÑ!±¾yñyásó"Ç%UÓfâ¿ÎìníêÑV÷eG+èæ`§{”>Í›Ù;›Ž4çSœ”CÝ6nhiÓsT‘¹1ç{÷z˱Óv[ €& ÿANÓ»É!Œ¤ |DåŒØ‘˜¡J=•¨¡AÏQ½‹VµêFGQ””'oϘ–Û­mØãå J[ ò功çÜÐZPIo¶´íŽžþg~É:Í…ÐÐrxšƒ™’æ¬óTé`‚©"9®›®³àk¡šFžœez/J-å´/$Ýë¡Ø :á,›KqA8í´&€~öGêqs´Ú%žy^ø*”|•ÕmÆœÚ1ž‹ßÛ!G²Â;y žKµÕ ÷¢‹ð3Í|4lqåwžÏë’VÓù¯[}8­ö_F±v-_ŠCø!^²È£ñµÇ[[3©]C$P©cÓ¹PØ8)ߎ¸¬îXÄ“ª¾æ”Ÿæ_îŒÄ:Lê2^:eVʻߟG—c¢aîïŠÇÿ²M¾}A’ÍðKr741H÷5 i'¹Þ!ºP“¤AƒZ|ˆ,Ï3Ú÷Ì/Ÿ‹ŸCÕ8OËÙN‚P(I£¶.ÔFRºW¡[LF*¹”²ddWÇ}&Cz¾83\\ST3º—dˤô—Î È ”5úÛðpà_¼áîÚŽvº-³r{îÕ×fúV/5}•³S8¡›û-ï†Ò8Ͳª¿À‰!è I›@éz„±kç‡~ºNZ]¡[I`ÌÛÉÑNJúÊHfý±ü1:™Äz~3Y$áB‡ˆ¶¥ò2=bˆ8sýƒÖìIgÆ¥O¯ÿ° oðu®§ñôõ’x'¨ÆÖŽ·(­ ²A_ˆ›µS5†“šÏ›1ÎxžCc8Š1¬¥Ã]”ÑÔ¯’q4-…c—ÝõиÊÖ’ k³Gªb}»p;Uñtùî€rß›yÁƒ6aÃL˜ŠUÛpÝ€¿=yÌËS\^44 ýìØÙ?^À$˜Làöœm±6gd~(Êjôö|Îù«ÒzÂʰHñ²i~2V¿7£¥G衲ôØ¢Í=tžÑ7¾BŒx‡Âè±[V¯ÿf¹ë›µÝ,iý|mèê£HöôzŸ¬/ky0½öDpø …¸yoçÜ©±Fcî67ÕÒ‡›„©B½X×¹±ô!ð.~Tñè_Ï2ƒßG¹qèå/•r)3ü&s7Vûòç¯fùPü¢‡ü"a~ÆÎ®,Æ/V4bG,чgGM©DB¡®ã"¥'¾ âtäÚ;ð3Î)F¬PDTâ,ø—‚³]½#G ùc®¥$Á+dD 9î!1'Læ'D¿w É"Žà¦ëÙ/l«Ks—2à°‰ò1f@y…˜C±´hˆ–9†¯]øÒh>‚­F“—'}´)ñC 8]FnëÂeiqqçRé³i¦µf_VK´^.ZBâÛÅGùÔ%IJP7~]¤ÓeG¤BŠ6]n/°ó{UŒßCõ¹¥àüŸå±€}Þä”齃=؇Å"Ï„£럈wS¥Ëì”g„)iØÑàñÀ¥”D§#£`èq'Ÿã«Aæë£2ø`›”Ø‹1~Vm‡$¦ù,)2Ðt›ã!_•9˜3¢ÄÁr€Å‡ñ«ü)å nÑ+®ÄòãìÜûZ”\4¤,JRúF“ä&GBâDíKå¯)ãå_ðdݳ¡_9NTüKås6äd­3AkFœìm3-‘Û@¿ãëÌØ‘Ú÷ýÀÃ).òsÍ} 3±Òx)*ÛWÓÿÀŽi>vtdT h1m¦‰lb¥›%õzÇçÞ5‹aM°‚˜‹Û “¤ÛëLü‰ÕáݶՅ@Dtã#m7Ë÷ér"±h!…ŽO‡D¡c “a7¡%ôH(®A¡âr!dp,ŒÓ·-Óò©i åZ C®ÙÉ©ä³tšCx²hrO·€uÓs j•‹G•I®ÖÛék!éæª—“R/üˆª@µ‘Š'\IÌÉÎK.fÄq0{ ƒìmÏ.Pþ ¦èZû³´1hù ¨“QJ‡A{}Î5ê}Ï Ó=ÀÔmæ¼;?ë™úû|ˆ`¹nƒyºÕ¹BÊÎwºiüO,˜%!v³UW}Û‘Q3¬Áù‚â|ÚñÛÈ^äÑ Ø–ñÌB çÓ•Y¡ ê¨ËMÀ%QïQ¯ìâ›ÇóÿU”N´ ¹½^´M0'åCljä±çÓwHÍǺ1Q7ÅØû7“‘ôßµú?PKDbÜÕöý&PKIga5META-INF/manifest.xml½–ËrÛ @÷ù { É’#Yc9Ó¨öº‹ô¾RÈ `xdâ¿/rVSO[yŒµ;ç\^‚ÕÝkÏ£ІIQ£4NP‚Ê]~>lg%º[߬z"X ÆV•È÷æ3¬‘Ó¢’Ä0S Òƒ©,­¤±“Ôõ lõ{ûj0­o¢#¸ef¾¡ÞGGì™Ù½‚¥8£Äú<ñ‹ØÅWÜÄÄ$Ä$-èePictures/10000000000000C80000008D834C9755.pngPKIga5Ï£€ï[[-÷ŠPictures/10000000000000200000002000309F1C.pngPKIga5.æM",B\P Žcontent.xmlPKIga5!ÎÞw' Ñstyles.xmlPKIga5Cx§§Xïmeta.xmlPKIga5¦ßžb± É %ôThumbnails/thumbnail.pngPKIga5DbÜÕöý& settings.xmlPKIga5¬±ÀX° LMETA-INF/manifest.xmlPKµ? unbound-1.13.1/doc/Changelog0000644000175000017500000135146014010434640015270 0ustar wouterwouter2 February 2021: Wouter - branch-1.13.1 is created, with release-1.13.1rc1 tag. - Fix dynlibmod link on rhel8 for -ldl inclusion. - Fix windows dependency on libssp.dll because of default stack protector in mingw. - Fix indentation of root anchor for use by windows install script. 1 February 2021: George - Attempt to fix NULL keys in the reuse_tcp tree; relates to #411. 29 January 2021: Wouter - Fix for doxygen 1.8.20 compatibility. 28 January 2021: Wouter - Annotate that we ignore the return value of if_indextoname. - Fix to use correct type for label count in rpz routine. - Fix empty clause warning in config_file nsid parse. - Fix to use correct type for label count in ipdnametoaddr rpz routine. - Fix empty clause warning in edns pass for padding. - Fix fwd ancil test post script when not supported. 26 January 2021: George - Merge PR #408 from fobser: Prevent a few more yacc clashes. - Merge PR #275 from Roland van Rijswijk-Deij: Add feature to return the original instead of a decrementing TTL ('serve-original-ttl') - Merge PR #355 from noloader: Make ICANN Update CA and DS Trust Anchor static data. - Ignore cache blacklisting when trying to reply with expired data from cache (#394). 26 January 2021: Wouter - Fix compile of unbound-dnstap-socket without dnstap installed. 22 January 2021: Willem - Padding of queries and responses with DNS over TLS as specified in RFC7830 and RFC8467. 22 January 2021: George - Fix TTL of SOA record for negative answers (localzone and authzone data) to be the minimum of the SOA TTL and the SOA.MINIMUM. 19 January 2021: Willem - Support for RFC5001: DNS Name Server Identifier (NSID) Option with the nsid: option in unbound.conf 18 January 2021: Wouter - Fix #404: DNS query with small edns bufsize fail. - Fix declaration before statement and signed comparison warning in dns64. 15 January 2021: Wouter - Merge #402 from fobser: Implement IPv4-Embedded addresses according to RFC6052. 14 January 2021: Wouter - Fix for #93: dynlibmodule import library is named libunbound.dll.a. 13 January 2021: Wouter - Merge #399 from xiangbao227: The lock of lruhash table should unlocked after markdel entry. - Fix for #93: dynlibmodule link fix for Windows. 12 January 2021: Wouter - Fix #397: [Feature request] add new type always_null to local-zone similar to always_nxdomain. - Fix so local zone types always_nodata and always_deny can be used from the config file. 8 January 2021: Wouter - Merge PR #391 from fhriley: Add start_time to reply callbacks so modules can compute the response time. - For #391: use struct timeval* start_time for callback information. - For #391: fix indentation. - For #391: more double casts in python start time calculation. - Add comment documentation. - Fix clang analysis warning. 6 January 2021: Wouter - Fix #379: zone loading over HTTP appears to have buffer issues. - Merge PR #395 from mptre: add missing null check. - Fix #387: client-subnet-always-forward seems to effectively bypass any caching? 5 January 2021: Wouter - Fix #385: autoconf 2.70 impacts unbound build - Merge PR #375 by fhriley: Add rpz_enable and rpz_disable commands to unbound-control. 4 January 2021: Wouter - For #376: Fix that comm point event is not double removed or double added to event map. - iana portlist updated. 16 December 2020: George - Fix error cases when udp-connect is set and send() returns an error (modified patch from Xin Li @delphij). 11 December 2020: Wouter - Fix #371: unbound-control timeout when Unbound is not running. - Fix to squelch permission denied and other errors from remote host, they are logged at higher verbosity but not on low verbosity. - Merge PR #335 from fobser: Sprinkle in some static to prevent missing prototype warnings. - Merge PR #373 from fobser: Warning: arithmetic on a pointer to void is a GNU extension. - Fix missing prototypes in the code. 3 December 2020: Wouter - make depend. - iana portlist updated. 2 December 2020: Wouter - Fix #360: for the additionally reported TCP Fast Open makes TCP connections fail, in that case we print a hint that this is happening with the error in the logs. - Fix #356: deadlock when listening tcp. - Fix unbound-dnstap-socket to not use log routine from interrupt handler and not print so frequently when invoked in sequence. - Fix on windows to ignore connection failure on UDP, unless verbose. - Fix for #283: fix stream reuse and tcp fast open. - Fix update, with write event check with streamreuse and fastopen. 1 December 2020: Wouter - Fix #358: Squelch udp connect 'no route to host' errors on low verbosity. 30 November 2020: Wouter - Fix assertion failure on double callback when iterator loses interest in query at head of line that then has the tcp stream not kept for reuse. - tag for the 1.13.0rc4 release. This also became the 1.13.0 release version on 3 dec 2020 with the streamreuse and fastopen fix from 2 dec 2020. The code repo continues for 1.13.1 in development. 27 November 2020: Wouter - Fix compile warning for type cast in http2_submit_dns_response. - Fix when use free buffer to initialize rbtree for stream reuse. - Fix compile warnings for windows. - Fix compile warnings in rpz initialization. - Fix contrib/metrics.awk for FreeBSD awk compatibility. - tag for the 1.13.0rc3 release. 26 November 2020: Wouter - Fix to omit UDP receive errors from log, if verbosity low. These happen because of udp-connect. - For #352: contrib/metrics.awk for Prometheus style metrics output. - Fix that after failed read, the readagain cannot activate. - Clear readagain upon decommission of pending tcp structure. 25 November 2020: Wouter - with udp-connect ignore connection refused with UDP timeouts. - Fix udp-connect on FreeBSD, do send calls on connected UDP socket. - Better fix for reuse tree comparison for is-tls sockets. Where the tree key identity is preserved after cleanup of the TLS state. - Remove debug commands from reuse tests. - Fix memory leak for edns client tag opcode config element. - Attempt fix for libevent state in tcp reuse cases after a packet is written. - Fix readagain and writeagain callback functions for comm point cleanup. - tag for the 1.13.0rc2 release. 24 November 2020: Wouter - Merge PR #283 : Stream reuse. This implements upstream stream reuse for performing several queries over the same TCP or TLS channel. - set version of main branch to 1.13.0 for upcoming release. - iana portlist updated. - Fix one port unit test for udp-connect. - tag for the 1.13.0rc1 release. - Fix crash when TLS connection is closed prematurely, when reuse tree comparison is not properly identical to insertion. - Fix padding of struct regional for 32bit systems. 23 November 2020: George - Merge PR #313 from Ralph Dolmans: Replace edns-client-tag with edns-client-string option. 23 November 2020: Wouter - Merge #351 from dvzrv: Add AF_NETLINK to set of allowed socket address families. - Fix #350: with the AF_NETLINK permission, to fix 1.12.0 error: failed to list interfaces: getifaddrs: Address family not supported by protocol. - Fix #347: IP_DONTFRAG broken on Apple xcode 12.2. - Option to toggle udp-connect, default is enabled. - Fix for #303 CVE-2020-28935 : Fix that symlink does not interfere with chown of pidfile. - Further fix for it and retvalue 0 fix for it. 12 November 2020: Wouter - Fix to connect() to UDP destinations, default turned on, this lowers vulnerability to ICMP side channels. - Retry for interfaces with unused ports if possible. 10 November 2020: Wouter - Fix #341: fixing a possible memory leak. - Fix memory leak after fix for possible memory leak failure. - Fix #343: Fail to build --with-libnghttp2 with error: 'SSIZE_MAX' undeclared. 27 October 2020: Wouter - In man page note that tls-cert-bundle is read before permission drop and chroot. 22 October 2020: Wouter - Fix #333: Unbound Segmentation Fault w/ log_info Functions From Python Mod. - Fix that minimal-responses does not remove addresses from a priming query response. 21 October 2020: George - Fix #327: net/if.h check fails on some darwin versions; contribution by Joshua Root. - Fix #320: potential memory corruption due to size miscomputation upton custom region alloc init. 21 October 2020: Wouter - Merge PR #228 : infra-keep-probing option to probe hosts that are down. Add infra-keep-probing: yes option. Hosts that are down are probed more frequently. With the option turned on, it probes about every 120 seconds, eventually after exponential backoff, and that keeps that way. If traffic keeps up for the domain. It probes with one at a time, eg. one query is allowed to probe, other queries within that 120 second interval are turned away. 19 October 2020: George - Merge PR #324 from James Renken: Add modern X.509v3 extensions to unbound-control TLS certificates. - Fix for PR #324 to attach the x509v3 extensions to the client certificate. 19 October 2020: Ralph - local-zone regional allocations outside of chunk 19 October 2020: Wouter - Fix that http settings have colon in set_option, for http-endpoint, http-max-streams, http-query-buffer-size, http-response-buffer-size, and http-nodelay. - Fix memory leak of https port string when reading config. - Fix #330: [Feature request] Add unencrypted DNS over HTTPS support. This adds the option http-notls-downstream: yesno to change that, and the dohclient test code has the -n option. - Fix python documentation warning on functions.rst inplace_cb_reply. - Fix dnstap test to wait for log timer to see if queries are logged. - Log ip address when http session recv fails, eg. due to tls fail. - Fix to set the tcp handler event toggle flag back to default when the handler structure is reused. - Clean the fix for out of order TCP processing limits on number of queries. It was tested to work. 16 October 2020: Wouter - Fix that the out of order TCP processing does not limit the number of outstanding queries over a connection. 15 October 2020: George - Fix that if there are reply callbacks for the given rcode, those are called per reply and a new message created if that was modified by the call. - Pass the comm_reply information to the inplace_cb_reply* functions during the mesh state and update the documentation on that. 15 October 2020: Wouter - Merge PR #326 from netblue30: DoH: implement content-length header field - DoH content length, simplify code, remove declaration after statement and fix cast warning. 14 October 2020: Wouter - Fix for python reply callback to see mesh state reply_list member, it only removes it briefly for the commpoint call so that it does not drop it and attempt to modify the reply list during reply. - Fix that if there are on reply callbacks, those are called per reply and a new message created if that was modified by the call. - Free up auth zone parse region after use for lookup of host 13 October 2020: Wouter - Fix #323: unbound testsuite fails on mock build in systemd-nspawn if systemd support is build. 9 October 2020: Wouter - Fix dnstap socket and the chroot not applied properly to the dnstap socket path. - Fix warning in libnss compile, nss_buf2dsa is not used without DSA. 8 October 2020: Wouter - Tag for 1.12.0 release. - Current repo is version 1.12.1 in development. - Fix #319: potential memory leak on config failure, in rpz config. 1 October 2020: Wouter - Current repo is version 1.12.0 for release. Tag for 1.12.0rc1. 30 September 2020: Wouter - Fix doh tests when not compiled in. - Add dohclient test executable to gitignore. - Fix stream_ssl, ssl_req_order and ssl_req_timeout tests for alloc check debug output. - Easier kill of unbound-dnstap-socket tool in test. - Fix memory leak of edns tags at libunbound context delete. - Fix double loopexit for unbound-dnstap-socket after sigterm. 29 September 2020: Ralph - DNS Flag Day 2020: change edns-buffer-size default to 1232. 28 September 2020: Wouter - Fix unit test for dnstap changes, so that it waits for the timer. 23 September 2020: Wouter - Fix #305: dnstap logging significantly affects unbound performance (regression in 1.11). - Fix #305: only wake up thread when threshold reached. - Fix to ifdef fptr wlist item for dnstap. 23 September 2020: Ralph - Fix edns-client-tags get_option typo - Add edns-client-tag-opcode option - Use inclusive language in configuration 21 September 2020: Ralph - Fix #304: dnstap logging not recovering after dnstap process restarts 21 September 2020: Wouter - Merge PR #311 by luismerino: Dynlibmod leak. - Error message is logged for dynlibmod malloc failures. - iana portlist updated. 18 September 2020: Wouter - Fix that prefer-ip4 and prefer-ip6 can be get and set with unbound-control, with libunbound and the unbound-checkconf option output function. - iana portlist updated. 15 September 2020: George - Introduce test for statistics. 15 September 2020: Wouter - Spelling fix. 11 September 2020: Wouter - Remove x file mode on ipset/ipset.c and h files. 9 September 2020: Wouter - Fix num.expired statistics output. 31 August 2020: Wouter - Merge PR #293: Add missing prototype. Also refactor to use the new shorthand function to clean up the code. - Refactor to use sock_strerr shorthand function. - Fix #296: systemd nss-lookup.target is reached before unbound can successfully answer queries. Changed contrib/unbound.service.in. 27 August 2020: Wouter - Similar to NSD PR#113, implement that interface names can be used, eg. something like interface: eth0 is resolved at server start and uses the IP addresses for that named interface. - Review fix, doxygen and assign null in case of error free. 26 August 2020: George - Update documentation in python example code. 24 August 2020: Wouter - Fix that dnstap reconnects do not spam the log with the repeated attempts. Attempts on the timer are only logged on high verbosity, if they produce a connection failure error. - Fix to apply chroot to dnstap-socket-path, if chroot is enabled. - Change configure to use EVP_sha256 instead of HMAC_Update for openssl-3.0.0. 20 August 2020: Ralph - Fix stats double count issue (#289). 13 August 2020: Ralph - Create and init edns tags data for libunbound. 10 August 2020: Ralph - Merge (modified) PR #277, use EVP_MAC_CTX_set_params if available, by VítÄ›zslav Čížek. 10 August 2020: Wouter - Fix #287: doc typo: "Additionaly". - Rerun autoconf 6 August 2020: Wouter - Merge PR #284 and Fix #246: Remove DLV entirely from Unbound. The DLV has been decommisioned and in unbound 1.5.4, in 2015, there was advise to stop using it. The current code base does not contain DLV code any more. The use of dlv options displays a warning. 5 August 2020: Wouter - contrib/aaaa-filter-iterator.patch file renewed diff content to apply cleanly to the current coderepo for the current code version. 5 August 2020: Ralph - Merge PR #272: Add EDNS client tag functionality. 4 August 2020: George - Improve error log message when inserting rpz RR. - Merge PR #280, Make tvOS & watchOS checks verify truthiness as well as definedness, by Felipe Gasper. 4 August 2020: Wouter - Fix mini_event.h on OpenBSD cannot find fd_set. 31 July 2020: Wouter - Fix doxygen comment for no ssl for tls session ticket key callback routine. 27 July 2020: George - Merge PR #268, draft-ietf-dnsop-serve-stale-10 has become RFC 8767 on March 2020, by and0x000. 27 July 2020: Ralph - Merge PR #269, Fix python module len() implementations, by Torbjörn Lönnemark 27 July 2020: Wouter - branch now named 1.11.1. 1.11.0rc1 became the 1.11.0 release. - Merge PR #270 from cgzones: munin plugin: always exit 0 in autoconf 20 July 2020: Wouter - Fix streamtcp to print packet data to stdout. This makes the stdout and stderr not mix together lines, when parsing its output. - Fix contrib/fastrpz.patch to apply cleanly. It fixes for changes due to added libdynmod, but it does not compile, it conflicts with new rpz code. - branch now named 1.11.0 and 1.11.0rc1 tag. 17 July 2020: Wouter - Fix libnettle compile for session ticket key callback function changes. - Fix lock dependency cycle in rpz zone config setup. 17 July 2020: Ralph - Merge PR #234 - Ensure proper alignment of cmsg buffers by Jérémie Courrèges-Anglas. - Fix PR #234 log_assert sizeof to use union buffer. 16 July 2020: Wouter - Fix check conf test for referencing installation paths. - Fix unused variable warning for clang analyzer. 16 July 2020: George - Introduce 'include-toplevel:' configuration option. 16 July 2020: Ralph - Add bidirectional frame streams support. 8 July 2020: Wouter - Fix add missing DSA header, for compilation without deprecated OpenSSL APIs. - Fix to use SSL_CTX_set_tlsext_ticket_key_evp_cb in OpenSSL 3.0.0-alpha4. - Longer keys for the test set, this avoids weak crypto errors. 7 July 2020: Wouter - Fix #259: Fix unbound-checkconf does not check view existence. unbound-checkconf checks access-control-view, access-control-tags, access-control-tag-actions and access-control-tag-datas. - Fix offset of error printout for access-control-tag-datas. - Review fixes for checkconf #259 change. 6 July 2020: Wouter - run_vm cleanup better and removes trailing slash on single argument. 29 June 2020: Wouter - Move reply list clean for serve expired mesh callback to after the reply is sent, so that script callbacks have reply_info. - Also move reply list clean for mesh callbacks to the scrip callback can see the reply_info. - Fix for mesh accounting if the reply list already empty to begin with. - Fix for mesh accounting when rpz decides to drop a reply with a tcp stream waiting for it. - Review fix for number of detached states due to use of variable after end of loop. - Fix tcp req info drop due to size call into mesh accounting removal of mesh state during mesh send reply. 24 June 2020: Wouter - iana portlist updated. - doxygen file comments for dynlibmodule. 17 June 2020: Wouter - Fix default explanation in man page for qname-minimisation-strict. - Fix display of event loop method with libev. 8 June 2020: Wouter - Mention tls name possible when tls is enabled for stub-addr in the man page. 27 May 2020: George - Merge PR #241 by Robert Edmonds: contrib/libunbound.pc.in: Do not use "Requires:". 25 May 2020: George - Update contrib/aaaa-filter-iterator.patch for the recent generate_sub_request() change and to apply cleanly. 21 May 2020: George - Fix for integer overflow when printing RDF_TYPE_TIME. 19 May 2020: Wouter - CVE-2020-12662 Unbound can be tricked into amplifying an incoming query into a large number of queries directed to a target. - CVE-2020-12663 Malformed answers from upstream name servers can be used to make Unbound unresponsive. - Release 1.10.1 is 1.10.0 with fixes, code repository continues, including those fixes, towards the next release. Configure has version 1.10.2 version number in it. - For PR #93: windows compile warnings removal - windows compile warnings removal for ip dscp option code. - For PR #93: unit test for dynlib module. 18 May 2020: Wouter - For PR #93: dynlibmod can handle reloads and deinit and inits again, with dlclose and dlopen of the library again. Also for multiple modules. Fix memory leak by not closing dlopened content. Fix to allow one dynlibmod instance by unbound-checkconf. - For PR #93: checkconf allows multiple dynlib in module-config, for a couple cases. - For PR #93: checkconf allows python dynlib in module-config, for a couple cases. - For PR #93: man page spelling reference fix. - For PR #93: fix link of other executables for dynlibmod dependency. 15 May 2020: Wouter - Merge PR #93: Add dynamic library support. - Fixed conflicts for PR #93 and make configure, yacc, lex. - For PR #93: Fix warnings for dynlibmodule. 15 May 2020: Ralph - Cache ECS answers with longest scope of CNAME chain. 22 April 2020: George - Explicitly use 'rrset-roundrobin: no' for test cases. 21 April 2020: Wouter - Merge #225 from akhait: KSK-2010 has been revoked. It removes the KSK-2010 from the default list in unbound-anchor, now that the revocation period is over. KSK-2017 is the only trust anchor in the shipped default now. 21 April 2020: George - Change default value for 'rrset-roundrobin' to yes. - Fix tests for new rrset-roundrobin default. 20 April 2020: Wouter - Fix #222: --enable-rpath, fails to rpath python lib. - Fix for count of reply states in the mesh. - Remove unneeded was_mesh_reply check. 17 April 2020: George - Add SNI support on more TLS connections (fixes #193). - Add SNI support to unbound-anchor. 16 April 2020: George - Add doxygen documentation for DSCP. 16 April 2020: Wouter - Fix help return code in unbound-control-setup script. - Fix for posix shell syntax for trap in nsd-control-setup. - Fix for posix shell syntax for trap in run_msg.sh test script. 15 April 2020: George - Fix #220: auth-zone section in config may lead to segfault. 7 April 2020: Wouter - Merge PR #214 from gearnode: unbound-control-setup recreate certificates. With the -r option the certificates are created again, without it, only the files that do not exist are created. 6 April 2020: Ralph - Keep track of number of timeouts. Use this counter to determine if capsforid fallback should be started. 6 April 2020: George - More documentation for redis-expire-records option. 1 April 2020: George - Merge PR #206: Redis TTL, by Talkabout. 30 March 2020: Wouter - Merge PR #207: Clarify if-automatic listens on 0.0.0.0 and :: - Merge PR #208: Fix uncached CLIENT_RESPONSE'es on stateful transports. 27 March 2020: Wouter - Merge PR #203 from noloader: Update README-Travis.md with current procedures. 27 March 2020: Ralph - Make unbound-control error returned on missing domain name more user friendly. 26 March 2020: Ralph - Fix RPZ concurrency issue when using auth_zone_reload. 25 March 2020: George - Merge PR #201 from noloader: Fix OpenSSL cross-compaile warnings. - Fix on #201. 24 March 2020: Wouter - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP tag for outgoing packets. - Fixes on #200. - Travis fix for ios by omitting tools from install. 23 March 2020: Wouter - Fix compile on Solaris for unbound-checkconf. 20 March 2020: George - Merge PR #198 from fobser: Declare lz_enter_rr_into_zone() static, it's only used in this file. 20 March 2020: Wouter - Merge PR #197 from fobser: Make log_ident_revert_to_default() a proper prototype. 19 March 2020: Ralph - Merge PR#191: Update iOS testing on Travis, by Jeffrey Walton. - Fix #158: open tls-session-ticket-keys as binary, for Windows. By Daisuke HIGASHI. - Merge PR#134, Allow the kernel to provide random source ports. By Florian Obser. - Log warning when using outgoing-port-permit and outgoing-port-avoid while explicit port randomisation is disabled. - Merge PR#194: Add libevent testing to Travis, by Jeffrey Walton. - Fix .travis.yml error, missing 'env' option. 16 March 2020: Wouter - Fix #192: In the unbound-checkconf tool, the module config of dns64 subnetcache respip validator iterator is whitelisted, it was reported it seems to work. 12 March 2020: Wouter - Fix compile of test tools without protobuf. 11 March 2020: Ralph - Add check to make sure RPZ records are subdomains of configured zone origin. 11 March 2020: George - Fix #189: mini_event.h:142:17: error: field 'ev_timeout' has incomplete type, by noloader. - Changelog entry for (Fix #189, Merge PR #190). 11 March 2020: Wouter - Fix #188: unbound-control.c:882:6: error: 'execlp' is unavailable: not available on tvOS. 6 March 2020: George - Merge PR #186, fix #183: Fix unrecognized 'echo -n' option on OS X, by noloader 5 March 2020: Wouter - Fix PR #182 from noloader: Add iOS testing to Travis. 4 March 2020: Ralph - Update README-Travis.md (from PR #179), by Jeffrey Walton. 4 March 2020: George - Merge PR #181 from noloader: Fix OpenSSL -pie warning on Android. 4 March 2020: Wouter - Merge PR #180 from noloader: Avoid calling exit in Travis script. 3 March 2020: George - Upgrade config.guess(2020-01-01) and config.sub(2020-01-01). 2 March 2020: Ralph - Fix #175, Merge PR #176: fix link error when OpenSSL is configured with no-engine, thanks noloader. 2 March 2020: George - Fix compiler warning in dns64/dns64.c - Merge PR #174: Add Android to Travis testing, by noloader. - Move android build scripts to contrib/ and allow android tests to fail. 2 March 2020: Wouter - Fix #177: dnstap does not build on macOS. 28 February 2020: Ralph - Merge PR #172: Add IBM s390x arch for testing, by noloader. 28 February 2020: Wouter - Merge PR #173: updated makedist.sh for config.guess and config.sub and sha256 digest for gpg, by noloader. - Merge PR #164: Framestreams, this branch implements dnstap unidirectional connectivity in unbound. This has a number of new features. The dependency on libfstrm is removed. The fstrm protocol code resides in dnstap/dnstap_fstrm.h and dnstap/dnstap_fstrm.c. This contains a brief definition of what unbound needs. The make unbound-dnstap-socket builds a debug tool, unbound-dnstap-socket. It can listen, accept multiple DNSTAP streams and print information. Commandline options control it. Unbound can reconnect if the unix domain socket file socket is closed. This uses exponential backoff after which it uses a one second timer to throttle cpu down. There is also support to use TCP and TLS for connecting to the log server. There are new config options to turn them on, in the dnstap section in the man page and example config file. dnstap-ip with IP address of server for TCP or TLS use. dnstap-tls to turn on TLS. And dnstap-tls-server-name, dnstap-tls-cert-bundle, dnstap-tls-client-key-file and dnstap-tls-client-cert-file to configure the certificates for server authentication and client authentication, or leave at "" to not use that. 27 February 2020: George - Merge PR #171: Add additional compilers and platforms to Travis testing, by noloader. 27 February 2020: Wouter - Fix #169: Fix warning for daemon/remote.c output may be truncated from snprintf. - Fix #170: Fix gcc undefined sanitizer signed integer overflow warning in signature expiry RFC1982 serial number arithmetic. - Fix more undefined sanitizer issues, in respip copy_rrset null dname, and in the client_info_compare routine for null memcmp. 26 February 2020: Wouter - iana portlist updated. 25 February 2020: Wouter - Fix #165: Add prefer-ip4: yesno config option to prefer ipv4 for using ipv4 filters, because the hosts ip6 netblock /64 is not owned by one operator, and thus reputation is shared. 24 February 2020: George - Merge PR #166: Fix typo in unbound.service.in, by glitsj16. 20 February 2020: Wouter - Updated contrib/unbound_smf23.tar.gz with Solaris SMF service for Unbound from Yuri Voinov. - master branch has 1.10.1 version. 18 February 2020: Wouter - protect X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS with ifdef for different openssl versions. 17 February 2020: Wouter - changelog point where the tag for 1.10.0rc2 release is. And with the unbound_smf23 commit added to it, that is the 1.10.0 release. 17 February 2020: Ralph - Add respip to supported module-config options in unbound-checkconf. 17 February 2020: George - Remove unused variable. 17 February 2020: Wouter - contrib/drop2rpz: perl script that converts the Spamhaus DROP-List in RPZ-Format, contributed by Andreas Schulze. 14 February 2020: Wouter - Fix spelling in unbound.conf.5.in. - Stop unbound-checkconf from insisting that auth-zone and rpz zonefiles have to exist. They can not exist, and download later. 13 February 2020: Wouter - tag for 1.10.0rc1 release. 12 February 2020: Wouter - Fix with libnettle make test with dsa disabled. - Fix contrib/fastrpz.patch to apply cleanly. Fix for serve-stale fixes, but it does not compile, conflicts with new rpz code. - Fix to clean memory leak of respip_addr.lock when ip_tree deleted. - Fix compile warning when threads disabled. - updated version number to 1.10.0. 10 February 2020: George - Document 'ub_result.was_ratelimited' in libunbound. - Fix use after free on log-identity after a reload; Fixes #163. 6 February 2020: George - Fix num_reply_states and num_detached_states counting with serve_expired_callback. - Cleaner code in mesh_serve_expired_lookup. - Document in unbound.conf manpage that configuration clauses can be repeated in the configuration file. 6 February 2020: Wouter - Fix num_reply_addr counting in mesh and tcp drop due to size after serve_stale commit. - Fix to create and destroy rpz_lock in auth_zones structure. - Fix to lock zone before adding rpz qname trigger. - Fix to lock and release once in mesh_serve_expired_lookup. - Fix to put braces around empty if body when threading is disabled. 5 February 2020: George - Added serve-stale functionality as described in draft-ietf-dnsop-serve-stale-10. `serve-expired-*` options can be used to configure the behavior. - Updated cachedb to honor `serve-expired-ttl`; Fixes #107. - Renamed statistic `num.zero_ttl` to `num.expired` as expired replies come with a configurable TTL value (`serve-expired-reply-ttl`). - Fixed stats when replying with cached, cname-aliased records. - Added missing default values for redis cachedb backend. 3 February 2020: Ralph - Add assertion to please static analyzer 31 January 2020: Wouter - Fix fclose on error in TLS session ticket code. 30 January 2020: Ralph - Fix memory leak in error condition remote.c - Fix double free in error condition view.c - Fix memory leak in do_auth_zone_transfer on success - Merge RPZ support into master. Only QNAME and Response IP triggers are supported. - Stop working on socket when socket() call returns an error. - Check malloc return values in TLS session ticket code 30 January 2020: Wouter - Fix subnet tests for disabled DSA algorithm by default. - Update contrib/fastrpz.patch for clean diff with current code. - Merge PR#151: Fixes for systemd units, by Maryse47, Edmonds and Frzk. Updates the unbound.service systemd file and adds a portable systemd service file. - updated .gitignore for added contrib file. - Add build rule for ipset to Makefile - Add getentropy_freebsd.o to Makefile dependencies. 29 January 2020: Ralph - Merge PR#156 from Alexander Berkes; Added unbound-control view_local_datas_remove command. 29 January 2020: Wouter - Fix #157: undefined reference to `htobe64'. 28 January 2020: Ralph - Merge PR#147; change rfc reference for reserved top level dns names. 28 January 2020: Wouter - iana portlist updated. - Fix to silence the tls handshake errors for broken pipe and reset by peer, unless verbosity is set to 2 or higher. 27 January 2020: Ralph - Merge PR#154; Allow use of libbsd functions with configure option --with-libbsd. By Robert Edmonds and Steven Chamberlain. - Merge PR#148; Add some TLS stats to unbound_munin_. By Fredrik Pettai. 27 January 2020: Wouter - Merge PR#155 from Robert Edmonds: contrib/libunbound.pc.in: Fixes to Libs/Requires for crypto library dependencies. - Fix #153: Disable validation for DSA algorithms. RFC 8624 compliance. 23 January 2020: Wouter - Merge PR#150 from Frzk: Systemd unit without chroot. It add contrib/unbound_nochroot.service.in, a systemd file for use with chroot: "", see comments in the file, it uses systemd protections instead. 14 January 2020: Wouter - Removed the dnscrypt_queries and dnscrypt_queries_chacha tests, because dnscrypt-proxy (2.0.36) does not support the test setup any more, and also the config file format does not seem to have the appropriate keys to recreate that setup. - Fix crash after reload where a stats lookup could reference old key cache and neg cache structures. - Fix for memory leak when edns subnet config options are read when compiled without edns subnet support. - Fix auth zone support for NSEC3 records without salt. 10 January 2020: Wouter - Fix the relationship between serve-expired and prefetch options, patch from Saksham Manchanda from Secure64. - Fix unreachable code in ssl set options code. 8 January 2020: Ralph - Fix #138: stop binding pidfile inside chroot dir in systemd service file. 8 January 2020: Wouter - Fix 'make test' to work for --disable-sha1 configure option. - Fix out-of-bounds null-byte write in sldns_bget_token_par while parsing type WKS, reported by Luis Merino from X41 D-Sec. - Updated sldns_bget_token_par fix for also space for the zero delimiter after the character. And update for more spare space. 6 January 2020: George - Downgrade compat/getentropy_solaris.c to version 1.4 from OpenBSD. The dl_iterate_phdr() function introduced in newer versions raises compilation errors on solaris 10. - Changes to compat/getentropy_solaris.c for, ifdef stdint.h inclusion for older systems. ifdef sha2.h inclusion for older systems. 6 January 2020: Wouter - Merge #135 from Florian Obser: Use passed in neg and key cache if non-NULL. - Fix #140: Document slave not downloading new zonefile upon update. 16 December 2019: George - Update mailing list URL. 12 December 2019: Ralph - Master is 1.9.7 in development. - Fix typo to let serve-expired-ttl work with ub_ctx_set_option(), by Florian Obser 10 December 2019: Wouter - Fix to make auth zone IXFR to fallback to AXFR if a single response RR is received over TCP with the SOA in it. 6 December 2019: Wouter - Fix ipsecmod compile. - Fix Makefile.in for ipset module compile, from Adi Prasaja. - release-1.9.6 tag, which became the 1.9.6 release 5 December 2019: Wouter - unbound-fuzzers.tar.bz2: three programs for fuzzing, that are 1:1 replacements for unbound-fuzzme.c that gets created after applying the contrib/unbound-fuzzme.patch. They are contributed by Eric Sesterhenn from X41 D-Sec. - tag for 1.9.6rc1. 4 December 2019: Wouter - Fix lock type for memory purify log lock deletion. - Fix testbound for alloccheck runs, memory purify and lock checks. - update contrib/fastrpz.patch to apply more cleanly. - Fix Make Test Fails when Configured With --enable-alloc-nonregional, reported by X41 D-Sec. 3 December 2019: Wouter - Merge pull request #124 from rmetrich: Changed log lock from 'quick' to 'basic' because this is an I/O lock. - Fix text around serial arithmatic used for RRSIG times to refer to correct RFC number. - Fix Assert Causing DoS in synth_cname(), reported by X41 D-Sec. - Fix similar code in auth_zone synth cname to add the extra checks. - Fix Assert Causing DoS in dname_pkt_copy(), reported by X41 D-Sec. - Fix OOB Read in sldns_wire2str_dname_scan(), reported by X41 D-Sec. - Fix Out of Bounds Write in sldns_str2wire_str_buf(), reported by X41 D-Sec. - Fix Out of Bounds Write in sldns_b64_pton(), fixed by check in sldns_str2wire_int16_data_buf(), reported by X41 D-Sec. - Fix Insufficient Handling of Compressed Names in dname_pkt_copy(), reported by X41 D-Sec. - Fix Out of Bound Write Compressed Names in rdata_copy(), reported by X41 D-Sec. - Fix Hang in sldns_wire2str_pkt_scan(), reported by X41 D-Sec. This further lowers the max to 256. - Fix snprintf() supports the n-specifier, reported by X41 D-Sec. - Fix Bad Indentation, in dnscrypt.c, reported by X41 D-Sec. - Fix Client NONCE Generation used for Server NONCE, reported by X41 D-Sec. - Fix compile error in dnscrypt. - Fix _vfixed not Used, removed from sbuffer code, reported by X41 D-Sec. - Fix Hardcoded Constant, reported by X41 D-Sec. - make depend 2 December 2019: Wouter - Merge pull request #122 from he32: In tcp_callback_writer(), don't disable time-out when changing to read. 22 November 2019: George - Fix compiler warnings. 22 November 2019: Wouter - Fix dname loop maximum, reported by Eric Sesterhenn from X41 D-Sec. - Add make distclean that removes everything configure produced, and make maintainer-clean that removes bison and flex output. 20 November 2019: Wouter - Fix Out of Bounds Read in rrinternal_get_owner(), reported by X41 D-Sec. - Fix Race Condition in autr_tp_create(), reported by X41 D-Sec. - Fix Shared Memory World Writeable, reported by X41 D-Sec. - Adjust unbound-control to make stats_shm a read only operation. - Fix Weak Entropy Used For Nettle, reported by X41 D-Sec. - Fix Randomness Error not Handled Properly, reported by X41 D-Sec. - Fix Out-of-Bounds Read in dname_valid(), reported by X41 D-Sec. - Fix Config Injection in create_unbound_ad_servers.sh, reported by X41 D-Sec. - Fix Local Memory Leak in cachedb_init(), reported by X41 D-Sec. - Fix Integer Underflow in Regional Allocator, reported by X41 D-Sec. - Upgrade compat/getentropy_linux.c to version 1.46 from OpenBSD. - Synchronize compat/getentropy_win.c with version 1.5 from OpenBSD, no changes but makes the file, comments, identical. - Upgrade compat/getentropy_solaris.c to version 1.13 from OpenBSD. - Upgrade compat/getentropy_osx.c to version 1.12 from OpenBSD. - Changes to compat/getentropy files for, no link to openssl if using nettle, and hence config.h for HAVE_NETTLE variable. compat definition of MAP_ANON, for older systems. ifdef stdint.h inclusion for older systems. ifdef sha2.h inclusion for older systems. - Fixed Compat Code Diverging from Upstream, reported by X41 D-Sec. - Fix compile with --enable-alloc-checks, reported by X41 D-Sec. - Fix Terminating Quotes not Written, reported by X41 D-Sec. - Fix Useless memset() in validator, reported by X41 D-Sec. - Fix Unrequired Checks, reported by X41 D-Sec. - Fix Enum Name not Used, reported by X41 D-Sec. - Fix NULL Pointer Dereference via Control Port, reported by X41 D-Sec. - Fix Bad Randomness in Seed, reported by X41 D-Sec. - Fix python examples/calc.py for eval, reported by X41 D-Sec. - Fix comments for doxygen in dns64. 19 November 2019: Wouter - Fix CVE-2019-18934, shell execution in ipsecmod. - 1.9.5 is 1.9.4 with bugfix, trunk is 1.9.6 in development. - Fix authzone printout buffer length check. - Fixes to please lint checks. - Fix Integer Overflow in Regional Allocator, reported by X41 D-Sec. - Fix Unchecked NULL Pointer in dns64_inform_super() and ipsecmod_new(), reported by X41 D-Sec. - Fix Out-of-bounds Read in rr_comment_dnskey(), reported by X41 D-Sec. - Fix Integer Overflows in Size Calculations, reported by X41 D-Sec. - Fix Integer Overflow to Buffer Overflow in sldns_str2wire_dname_buf_origin(), reported by X41 D-Sec. - Fix Out of Bounds Read in sldns_str2wire_dname(), reported by X41 D-Sec. - Fix Out of Bounds Write in sldns_bget_token_par(), reported by X41 D-Sec. 18 November 2019: Wouter - In unbound-host use separate variable for get_option to please code checkers. - update to bison output of 3.4.1 in code repository. - Provide a prototype for compat malloc to remove compile warning. - Portable grep usage for reuseport configure test. - Check return type of HMAC_Init_ex for openssl 0.9.8. - gitignore .source tempfile used for compatible make. 13 November 2019: Wouter - iana portlist updated. - contrib/fastrpz.patch updated to apply for current code. - fixes for splint cleanliness, long vs int in SSL set_mode. 11 November 2019: Wouter - Fix #109: check number of arguments for stdin-pipes in unbound-control and fail if too many arguments. - Merge #102 from jrtc27: Add getentropy emulation for FreeBSD. 24 October 2019: Wouter - Fix #99: Memory leak in ub_ctx (event_base will never be freed). 23 October 2019: George - Add new configure option `--enable-fully-static` to enable full static build if requested; in relation to #91. 23 October 2019: Wouter - Merge #97: manpage: Add missing word on unbound.conf, from Erethon. 22 October 2019: Wouter - drop-tld.diff: adds option drop-tld: yesno that drops 2 label queries, to stop random floods. Apply with patch -p1 < contrib/drop-tld.diff and compile. From Saksham Manchanda (Secure64). Please note that we think this will drop DNSKEY and DS lookups for tlds and hence break DNSSEC lookups for downstream clients. 7 October 2019: Wouter - Add doxygen comments to unbound-anchor source address code, in #86. 3 October 2019: Wouter - Merge #90 from vcunat: fix build with nettle-3.5. - Merge 1.9.4 release with fix for vulnerability CVE-2019-16866. - Continue with development of 1.9.5. - Merge #86 from psquarejho: Added -b source address option to smallapp/unbound-anchor.c, from Lukas Wunner. 26 September 2019: Wouter - Merge #87 from hardfalcon: Fix contrib/unbound.service.in, Drop CAP_KILL, use + prefix for ExecReload= instead. 25 September 2019: Wouter - The unbound.conf includes are sorted ascending, for include statements with a '*' from glob. 23 September 2019: Wouter - Merge #85 for #84 from sam-lunt: Add kill capability to systemd service file to fix that systemctl reload fails. 20 September 2019: Wouter - Merge #82 from hardfalcon: Downgrade CAP_NET_ADMIN to CAP_NET_RAW in unbound.service. - Merge #81 from Maryse47: Consistently use /dev/urandom instead of /dev/random in scripts and docs. - Merge #83 from Maryse47: contrib/unbound.service.in: do not fork into the background. 19 September 2019: Wouter - Fix #78: Memory leak in outside_network.c. - Merge pull request #76 from Maryse47: Improvements and fixes for systemd unbound.service. - oss-fuzz badge on README.md. - Fix fix for #78 to also free service callback struct. - Fix for oss-fuzz build warning. - Fix wrong response ttl for prepended short CNAME ttls, this would create a wrong zero_ttl response count with serve-expired enabled. - Merge #80 from stasic: Improve wording in man page. 11 September 2019: Wouter - Use explicit bzero for wiping clear buffer of hash in cachedb, reported by Eric Sesterhenn from X41 D-Sec. 9 September 2019: Wouter - Fix #72: configure --with-syslog-facility=LOCAL0-7 with default LOG_DAEMON (as before) can set the syslog facility that the server uses to log messages. 4 September 2019: Wouter - Fix #71: fix openssl error squelch commit compilation error. 3 September 2019: Wouter - squelch DNS over TLS errors 'ssl handshake failed crypto error' on low verbosity, they show on verbosity 3 (query details), because there is a high volume and the operator cannot do anything for the remote failure. Specifically filters the high volume errors. 2 September 2019: Wouter - ipset module #28: log that an address is added, when verbosity high. - ipset: refactor long routine into three smaller ones. - updated Makefile dependencies. 23 August 2019: Wouter - Fix contrib/fastrpz.patch asprintf return value checks. 22 August 2019: Wouter - Fix that pkg-config is setup before --enable-systemd needs it. - 1.9.3rc2 release candidate tag. And this became the 1.9.3 release. Master is 1.9.4 in development. 21 August 2019: Wouter - Fix log_dns_msg to log irrespective of minimal responses config. 19 August 2019: Ralph - Document limitation of pidfile removal outside of chroot directory. 16 August 2019: Wouter - Fix unittest valgrind false positive uninitialised value report, where if gcc 9.1.1 uses -O2 (but not -O1) then valgrind 3.15.0 issues an uninitialised value for the token buffer at the str2wire.c rrinternal_get_owner() strcmp with the '@' value. Rewritten to use straight character comparisons removes the false positive. Also valgrinds --expensive-definedness-checks=yes can stop this false positive. - Please doxygen's parser for "@" occurrence in doxygen comment. - Fixup contrib/fastrpz.patch - Remove warning about unknown cast-function-type warning pragma. 15 August 2019: Wouter - iana portlist updated. - Fix autotrust temp file uniqueness windows compile. - avoid warning about upcast on 32bit systems for autotrust. - escape commandline contents for -V. - Fix character buffer size in ub_ctx_hosts. - 1.9.3rc1 release candidate tag. - Option -V prints if TCP fastopen is available. 14 August 2019: George - Fix #59, when compiled with systemd support check that we can properly communicate with systemd through the `NOTIFY_SOCKET`. 14 August 2019: Wouter - Generate configlexer with newer flex. - Fix warning for unused variable for compilation without systemd. 12 August 2019: George - Introduce `-V` option to print the version number and build options. Previously reported build options like linked libs and linked modules are now moved from `-h` to `-V` as well for consistency. - PACKAGE_BUGREPORT now also includes link to GitHub issues. 1 August 2019: Wouter - For #52 #53, second context does not close logfile override. - Fix #52 #53, fix for example fail program. - Fix to return after failed auth zone http chunk write. - Fix to remove unused test for task_probe existance. - Fix to timeval_add for remaining second in microseconds. - Check repinfo in worker_handle_request, if null, drop it. 29 July 2019: Wouter - Add verbose log message when auth zone file is written, at level 4. - Add hex print of trust anchor pointer to trust anchor file temp name to make it unique, for libunbound created multiple contexts. 23 July 2019: Wouter - Fix question section mismatch in local zone redirect. 19 July 2019: Wouter - Fix #49: Set no renegotiation on the SSL context to stop client session renegotiation. 12 July 2019: Wouter - Fix #48: Unbound returns additional records on NODATA response, if minimal-responses is enabled, also the additional for negative responses is removed. 9 July 2019: Ralph - Fix in respip addrtree selection. Absence of addr_tree_init_parents() call made it impossible to go up the tree when the matching netmask is too specific. 5 July 2019: Ralph - Fix for possible assertion failure when answering respip CNAME from cache. 25 June 2019: Wouter - For #45, check that 127.0.0.1 and ::1 are not used in unbound.conf when do-not-query-localhost is turned on, or at default on, unbound-checkconf prints a warning if it is found in forward-addr or stub-addr statements. 24 June 2019: Wouter - Fix memleak in unit test, reported from the clang 8.0 static analyzer. 18 June 2019: Wouter - PR #28: IPSet module, by Kevin Chou. Created a module to support the ipset that could add the domain's ip to a list easily. Needs libmnl, and --enable-ipset and config it, doc/README.ipset.md. - Fix to omit RRSIGs from addition to the ipset. - Fix to make unbound-control with ipset, remove unused variable, use unsigned type because of comparison, and assign null instead of compare with it. Remade lex and yacc output. - make depend - Added documentation to the ipset files (for doxygen output). - Merge PR #6: Python module: support multiple instances - Merge PR #5: Python module: define constant MODULE_RESTART_NEXT - Merge PR #4: Python module: assign something useful to the per-query data store 'qdata' - Fix python dict reference and double free in config. 17 June 2019: Wouter - Master contains version 1.9.3 in development. - Fix #39: In libunbound, leftover logfile is close()d unpredictably. - Fix for #24: Fix abort due to scan of auth zone masters using old address from previous scan. 12 June 2019: Wouter - Fix another spoolbuf storage code point, in prefetch. - 1.9.2rc3 release candidate tag. Which became the 1.9.2 release on 17 June 2019. 11 June 2019: Wouter - Fix that fixes the Fix that spoolbuf is not used to store tcp pipelined response between mesh send and callback end, this fixes error cases that did not use the correct spoolbuf. - 1.9.2rc2 release candidate tag. 6 June 2019: Wouter - 1.9.2rc1 release candidate tag. 4 June 2019: Wouter - iana portlist updated. 29 May 2019: Wouter - Fix to guard _OPENBSD_SOURCE from redefinition. 28 May 2019: Wouter - Fix to define _OPENBSD_SOURCE to get reallocarray on NetBSD. - gitignore config.h.in~. 27 May 2019: Wouter - Fix double file close in tcp pipelined response code. 24 May 2019: Wouter - Fix that spoolbuf is not used to store tcp pipelined response between mesh send and callback end. 20 May 2019: Wouter - Note that so-reuseport at extreme load is better turned off, otherwise queries are not distributed evenly, on Linux 4.4.x. 16 May 2019: Wouter - Fix #31: swig 4.0 and python module. 13 May 2019: Wouter - Squelch log messages from tcp send about connection reset by peer. They can be enabled with verbosity at higher values for diagnosing network connectivity issues. - Attempt to fix malformed tcp response. 9 May 2019: Wouter - Revert fix for oss-fuzz, error is in that build script that unconditionally includes .o files detected by configure, also when the machine architecture uses different LIBOBJS files. 8 May 2019: Wouter - Attempt to fix build failure in oss-fuzz because of reallocarray. https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14648. Does not omit compile flags from commandline. 7 May 2019: Wouter - Fix edns-subnet locks, in error cases the lock was not unlocked. - Fix doxygen output error on readme markdown vignettes. 6 May 2019: Wouter - Fix #29: Solaris 11.3 and missing symbols be64toh, htobe64. - Fix #30: AddressSanitizer finding in lookup3.c. This sets the hash function to use a slower but better auditable code that does not read beyond array boundaries. This makes code better security checkable, and is better for security. It is fixed to be slower, but not read outside of the array. 2 May 2019: Wouter - contrib/fastrpz.patch updated for code changes, and with git diff. - Fix .gitignore, add pythonmod and dnstap generated files. And unit test generated files, and generated doc files. 1 May 2019: Wouter - Update makedist for git. - Nicer travis output for clang analysis. - PR #16: XoT support, AXFR over TLS, turn it on with master: # in unbound.conf. This uses TLS to download the AXFR (or IXFR). 25 April 2019: Wouter - Fix wrong query name in local zone redirect answers with a CNAME, the copy of the local alias is in unpacked form. 18 April 2019: Ralph - Scrub RRs from answer section when reusing NXDOMAIN message for subdomain answers. - For harden-below-nxdomain: do not consider a name to be non-exitent when message contains a CNAME record. 18 April 2019: Wouter - travis build file. 16 April 2019: Wouter - Better braces in if statement in TCP fastopen code. - iana portlist updated. 15 April 2019: Wouter - Fix tls write event for read state change to re-call SSL_write and not resume the TLS handshake. 11 April 2019: George - Update python documentation for init_standard(). - Typos. 11 April 2019: Wouter - Fix that auth zone uses correct network type for sockets for SOA serial probes. This fixes that probes fail because earlier probe addresses are unreachable. - Fix that auth zone fails over to next master for timeout in tcp. - Squelch SSL read and write connection reset by peer and broken pipe messages. Verbosity 2 and higher enables them. 8 April 2019: Wouter - Fix to use event_assign with libevent for thread-safety. - verbose information about auth zone lookup process, also lookup start, timeout and fail. - Fix #17: Add python module example from Jan Janak, that is a plugin for the Unbound DNS resolver to resolve DNS records in multicast DNS [RFC 6762] via Avahi. The plugin communicates with Avahi via DBus. The comment section at the beginning of the file contains detailed documentation. - Fix to wipe ssl ticket keys from memory with explicit_bzero, if available. 5 April 2019: Wouter - Fix to reinit event structure for accepted TCP (and TLS) sockets. 4 April 2019: Wouter - Fix spelling error in log output for event method. 3 April 2019: Wouter - Move goto label in answer_from_cache to the end of the function where it is more visible. - Fix auth-zone NSEC3 response for wildcard nodata answers, include the closest encloser in the answer. 2 April 2019: Wouter - Fix auth-zone NSEC3 response for empty nonterminals with exact match nsec3 records. - Fix for out of bounds integers, thanks to OSTIF audit. It is in allocation debug code. - Fix for auth zone nsec3 ent fix for wildcard nodata. 25 March 2019: Wouter - Fix that tls-session-ticket-keys: "" on its own in unbound.conf disables the tls session ticker key calls into the OpenSSL API. - Fix crash if tls-servic-pem not filled in when necessary. 21 March 2019: Wouter - Fix #4240: Fix whitespace cleanup in example.conf. 19 March 2019: Wouter - add type CAA to libpyunbound (accessing libunbound from python). 18 March 2019: Wouter - Add log message, at verbosity 4, that says the query is encrypted with TLS, if that is enabled for the query. - Fix #4239: set NOTIMPL when deny-any is enabled, for RFC8482. 7 March 2019: Wouter - Fix for #4233: guard use of NDEBUG, so that it can be passed in CFLAGS into configure. 5 March 2019: Wouter - Tag release 1.9.1rc1. Which became 1.9.1 on 12 March 2019. Trunk has 1.9.2 in development. 1 March 2019: Wouter - output forwarder log in ssl_req_order test. 28 February 2019: Wouter - Remove memory leak on pythonmod python2 script file init. - Remove swig gcc8 python function cast warnings, they are ignored. - Print correct module that failed when module-config is wrong. 27 February 2019: Wouter - Fix #4229: Unbound man pages lack information, about access-control order and local zone tags, and elements in views. - Fix #14: contrib/unbound.init: Fix wrong comparison judgment before copying. - Fix for python module on Windows, fix fopen. 25 February 2019: Wouter - Fix #4227: pair event del and add for libevent for tcp_req_info. 21 February 2019: Wouter - Fix the error for unknown module in module-config is understandable, and explains it was not compiled in and where to see the list. - In example.conf explain where to put cachedb module in module-config. - In man page and example config explain that most modules have to be listed at the start of module-config. 20 February 2019: Wouter - Fix pythonmod include and sockaddr_un ifdefs for compile on Windows, and for libunbound. 18 February 2019: Wouter - Print query name with ip_ratelimit exceeded log lines. - Spaces instead of tabs in that log message. - Print query name and IP address when domain rate limit exceeded. 14 February 2019: Wouter - Fix capsforid canonical sort qsort callback. 11 February 2019: Wouter - Note default for module-config in man page. - Fix recursion lame test for qname minimisation asked queries, that were not present in the set of prepared answers. - Fix #13: Remove left-over requirements on OpenSSL >= 1.1.0 for cert name matching, from man page. - make depend, with newer gcc, nicer layout. 7 February 2019: Wouter - Fix #4206: OpenSSL 1.0.2 hostname verification for FreeBSD 11.2. - Fix that qname minimisation does not skip a label when missing nameserver targets need to be fetched. - Fix #4225: clients seem to erroneously receive no answer with DNS-over-TLS and qname-minimisation. 4 February 2019: Wouter - Fix that log-replies prints the correct name for local-alias names, for names that have a CNAME in local-data configuration. It logs the original query name, not the target of the CNAME. - Add local-zone type inform_redirect, which logs like type inform, and redirects like type redirect. - Perform canonical sort for 0x20 capsforid compare of replies, this sorts rrsets in the authority and additional section before comparison, so that out of order rrsets do not cause failure. 31 January 2019: Wouter - Set ub_ctx_set_tls call signature in ltrace config file for libunbound in contrib/libunbound.so.conf. - improve documentation for tls-service-key and forward-first. - #10: fixed pkg-config operations, PKG_PROG_PKG_CONFIG moved out of conditional section, fixes systemd builds, from Enrico Scholz. - #9: For openssl 1.0.2 use the CRYPTO_THREADID locking callbacks, still supports the set_id_callback previous API. And for 1.1.0 no locking callbacks are needed. - #8: Fix OpenSSL without ENGINE support compilation. - Wipe TLS session key data from memory on exit. 30 January 2019: Ralph - Fix case in which query timeout can result in marking delegation as edns_lame_known. 29 January 2019: Wouter - Fix spelling of tls-ciphers in example.conf.in. - Fix #4224: auth_xfr_notify.rpl test broken due to typo - Fix locking for libunbound context setup with broken port config. 28 January 2019: Wouter - ub_ctx_set_tls call for libunbound that enables DoT for the machines set with ub_ctx_set_fwd. Patch from Florian Obser. - Set build system for added call in the libunbound API. - List example config for root zone copy locally hosted with auth-zone as suggested from draft-ietf-dnsop-7706-bis-02. But with updated B root address. - set version to 1.9.0 for release. And this was released with the spelling for tls-ciphers fix as 1.9.0 on Feb 5. Trunk has 1.9.1 in development. 25 January 2019: Wouter - Fix that tcp for auth zone and outgoing does not remove and then gets the ssl read again applied to the deleted commpoint. - updated contrib/fastrpz.patch to cleanly diff. - no lock when threads disabled in tcp request buffer count. - remove compile warnings from libnettle compile. - output of newer lex 2.6.1 and bison 3.0.5. 24 January 2019: Wouter - Newer aclocal and libtoolize used for generating configure scripts, aclocal 1.16.1 and libtoolize 2.4.6. - Fix unit test for python 3.7 new keyword 'async'. - clang analysis fixes, assert arc4random buffer in init, no check for already checked delegation pointer in iterator, in testcode check for NULL packet matches, in perf do not copy from NULL start list when growing capacity. Adjust host and file only when present in test header read to please checker. In testcode for unknown macro operand give zero result. Initialise the passed argv array in test code. In test code add EDNS data segment copy only when nonempty. - Patch from Florian Obser fixes some compiler warnings: include mini_event.h to have a prototype for mini_ev_cmp include edns.h to have a prototype for apply_edns_options sldns_wire2str_edns_keepalive_print is only called in the wire2str, module declare it static to get rid of compiler warning: no previous prototype for function infra_find_ip_ratedata() is only called in the infra module, declare it static to get rid of compiler warning: no previous prototype for function do not shadow local variable buf in authzone auth_chunks_delete and az_nsec3_findnode are only called in the authzone module, declare them static to get rid of compiler warning: no previous prototype for function... copy_rrset() is only called in the respip module, declare it static to get rid of compiler warning: no previous prototype for function 'copy_rrset' no need for another variable "r"; gets rid of compiler warning: declaration shadows a local variable in libunbound.c no need for another variable "ns"; gets rid of compiler warning: declaration shadows a local variable in iterator.c - Moved includes and make depend. 23 January 2019: Wouter - Patch from Manabu Sonoda with tls-ciphers and tls-ciphersuites options for unbound.conf. - Fixes for the patch, and man page entry. - Fix configure to detect SSL_CTX_set_ciphersuites, for better library compatibility when compiling. - Patch for TLS session resumption from Manabu Sonoda, enable with tls-session-ticket-keys in unbound.conf. - Fixes for patch (includes, declarations, warnings). Free at end and keep config options in order read from file to keep the first one as the first one. - Fix for IXFR fallback to reset counter when IXFR does not timeout. 22 January 2019: Wouter - Fix space calculation for tcp req buffer size. - Doc for stream-wait-size and unit test. - unbound-control stats has mem.streamwait that counts TCP and TLS waiting result buffers. - Fix for #4219: secondaries not updated after serial change, unbound falls back to AXFR after IXFR gives several timeout failures. - Fix that auth zone after IXFR fallback tries the same master. 21 January 2019: Wouter - Fix tcp idle timeout test, for difference in the tcp reply code. - Unit test for tcp request reorder and timeouts. - Unit tests for ssl out of order processing. - Fix that multiple dns fragments can be carried in one TLS frame. - Add stream-wait-size: 4m config option to limit the maximum memory used by waiting tcp and tls stream replies. This avoids a denial of service where these replies use up all of the memory. 17 January 2019: Wouter - For caps-for-id fallback, use the whitelist to avoid timeout starting a fallback sequence for it. - increase mesh max activation count for capsforid long fetches. 16 January 2019: Ralph - Get ready for the DNS flag day: remove EDNS lame procedure, do not re-query without EDNS after timeout. 15 January 2019: Wouter - In the out of order processing, reset byte count for (potential) partial read. - Review fixes in out of order processing. 14 January 2019: Wouter - streamtcp option -a send queries consecutively and prints answers as they arrive. - Fix for out of order processing administration quit cleanup. - unit test for tcp out of order processing. 11 January 2019: Wouter - Initial commit for out-of-order processing for TCP and TLS. 9 January 2019: Wouter - Log query name for looping module errors. 8 January 2019: Wouter - Fix syntax in comment of local alias processing. - Fix NSEC3 record that is returned in wildcard replies from auth-zone zones with NSEC3 and wildcards. 7 January 2019: Wouter - On FreeBSD warn if systcl settings do not allow server TCP FASTOPEN, and server tcp fastopen is enabled at compile time. - Document interaction between the tls-upstream option in the server section and forward-tls-upstream option in the forward-zone sections. - Add contrib/unbound-fuzzme.patch from Jacob Hoffman-Andrews, the patch adds a program used for fuzzing. 12 December 2018: Wouter - Fix for crash in dns64 module if response is null. 10 December 2018: Wouter - Fix config parser memory leaks. - ip-ratelimit-factor of 1 allows all traffic through, instead of the previous blocking everything. - Fix for FreeBSD port make with dnscrypt and dnstap enabled. - Fix #4206: support openssl 1.0.2 for TLS hostname verification, alongside the 1.1.0 and later support that is already there. - Fixup openssl 1.0.2 compile 6 December 2018: Wouter - Fix dns64 allocation in wrong region for returned internal queries. 3 December 2018: Wouter - Fix icon, no ragged edges and nicer resolutions available, for eg. Win 7 and Windows 10 display. - cache-max-ttl also defines upperbound of initial TTL in response. 30 November 2018: Wouter - Patch for typo in unbound.conf man page. - log-tag-queryreply: yes in unbound.conf tags the log-queries and log-replies in the log file for easier log filter maintenance. 29 November 2018: Wouter - iana portlist updated. - Fix chroot auth-zone fix to remove chroot prefix. - tag for 1.8.2rc1, which became 1.8.2 on 4 dec 2018, with icon updated. Trunk contains 1.8.3 in development. Which became 1.8.3 on 11 december with only the dns64 fix of 6 dec. Trunk then became 1.8.4 in development. - Fix that unbound-checkconf does not complains if the config file is not placed inside the chroot. - Refuse to start with no ports. - Remove clang analysis warnings. 28 November 2018: Wouter - Fix leak in chroot fix for auth-zone. - Fix clang analysis for outside directory build test. 27 November 2018: Wouter - Fix DNS64 to not store intermediate results in cache, this avoids other threads from picking up the wrong data. The module restores the previous no_cache_store setting when the the module is finished. - Fix #4208: 'stub-no-cache' and 'forward-no-cache' not work. - New and better fix for Fix #4193: Fix that prefetch failure does not overwrite valid cache entry with SERVFAIL. - auth-zone give SERVFAIL when expired, fallback activates when expired, and this is documented in the man page. - stat count SERVFAIL downstream auth-zone queries for expired zones. - Put new logos into windows installer. - Fix windows compile for new rrset roundrobin fix. - Update contrib fastrpz patch for latest release. 26 November 2018: Wouter - Fix to not set GLOB_NOSORT so the unbound.conf include: files are sorted and in a predictable order. - Fix #4193: Fix that prefetch failure does not overwrite valid cache entry with SERVFAIL. - Add unbound-control view_local_datas command, like local_datas. - Fix that unbound-control can send file for view_local_datas. 22 November 2018: Wouter - With ./configure --with-pyunbound --with-pythonmodule PYTHON_VERSION=3.6 or with 2.7 unbound can compile and unit tests succeed for the python module. - pythonmod logs the python error and traceback on failure. - ignore debug python module for test in doxygen output. - review fixes for python module. - Fix #4209: Crash in libunbound when called from getdns. - auth zone zonefiles can be in a chroot, the chroot directory components are removed before use. - Fix that empty zonefile means the zonefile is not set and not used. - make depend. 21 November 2018: Wouter - Scrub NS records from NODATA responses as well. 20 November 2018: Wouter - Scrub NS records from NXDOMAIN responses to stop fragmentation poisoning of the cache. - Add patch from Jan Vcelak for pythonmod, add sockaddr_storage getters, add support for query callbacks, allow raw address access via comm_reply and update API documentation. - Removed compile warnings in pythonmod sockaddr routines. 19 November 2018: Wouter - Support SO_REUSEPORT_LB in FreeBSD 12 with the so-reuseport: yes option in unbound.conf. 6 November 2018: Ralph - Bugfix min-client-subnet-ipv6 25 October 2018: Ralph - Add min-client-subnet-ipv6 and min-client-subnet-ipv4 options. 25 October 2018: Wouter - Fix #4191: NXDOMAIN vs SERVFAIL during dns64 PTR query. - Fix #4190: Please create a "ANY" deny option, adds the option deny-any: yes in unbound.conf. This responds with an empty message to queries of type ANY. - Fix #4141: More randomness to rrset-roundrobin. - Fix #4132: Openness/closeness of RANGE intervals in rpl files. - Fix #4126: RTT_band too low on VSAT links with 600+ms latency, adds the option unknown-server-time-limit to unbound.conf that can be increased to avoid the problem. - remade makefile dependencies. - Fix #4152: Logs shows wrong time when using log-time-ascii: yes. 24 October 2018: Ralph - Add markdel function to ECS slabhash. - Limit ECS scope returned to client to the scope used for caching. - Make lint like previous #4154 fix. 22 October 2018: Wouter - Fix #4192: unbound-control-setup generates keys not readable by group. - check that the dnstap socket file can be opened and exists, print error if not. - Fix #4154: make ECS_MAX_TREESIZE configurable, with the max-ecs-tree-size-ipv4 and max-ecs-tree-size-ipv6 options. 22 October 2018: Ralph - Change fast-server-num default to 3. 8 October 2018: Ralph - Add fast-server-permil and fast-server-num options. - Deprecate low-rtt and low-rtt-permil options. 8 October 2018: Wouter - Squelch log of failed to tcp initiate after TCP Fastopen failure. 5 October 2018: Wouter - Squelch EADDRNOTAVAIL errors when the interface goes away, this omits 'can't assign requested address' errors unless verbosity is set to a high value. - Set default for so-reuseport to no for FreeBSD. It is enabled by default for Linux and DragonFlyBSD. The setting can be configured in unbound.conf to override the default. - iana port update. 2 October 2018: Wouter - updated contrib/fastrpz.patch to apply for this version - dnscrypt.c removed sizeof to get array bounds. - Fix testlock code to set noreturn on error routine. - Remove unused variable from contrib fastrpz/rpz.c and remove unused diagnostic pragmas that themselves generate warnings - clang analyze test is used only when assertions are enabled. 1 October 2018: Wouter - tag for release 1.8.1rc1. Became release 1.8.1 on 8 oct, with fastrpz.patch fix included. Trunk has 1.8.2 in development. 27 September 2018: Wouter - Fix #4188: IPv6 forwarders without ipv6 result in SERVFAIL, fixes qname minimisation with a forwarder when connectivity has issues from rejecting responses. 25 September 2018: Wouter - Perform TLS SNI indication of the host that is being contacted for DNS over TLS service. It sets the configured tls auth name. This is useful for hosts that apart from the DNS over TLS services also provide other (web) services. - Fix #4149: Add SSL cleanup for tcp timeout. 17 September 2018: Wouter - Fix compile on Mac for unbound, provide explicit_bzero when libc does not have it. - Fix unbound for openssl in FIPS mode, it uses the digests with the EVP call contexts. - Fix that with harden-below-nxdomain and qname minisation enabled some iterator states for nonresponsive domains can get into a state where they waited for an empty list. - Stop UDP to TCP failover after timeouts that causes the ping count to be reset by the TCP time measurement (that exists for TLS), because that causes the UDP part to not be measured as timeout. - Fix #4156: Fix systemd service manager state change notification. 13 September 2018: Wouter - Fix seed for random backup code to use explicit zero when wiped. - exit log routine is annotated as noreturn function. - free memory leaks in config strlist and str2list insert functions. - do not move unused argv variable after getopt. - Remove unused if clause in testcode. - in testcode, free async ids, initialise array, and check for null pointer during test of the test. And use exit for return to note irregular program stop. - Free memory leak in config strlist append. - make sure nsec3 comparison salt is initialized. - unit test has clang analysis. - remove unused variable assignment from iterator scrub routine. - check for null in delegation point during iterator refetch in forward zone. - neater pointer cast in libunbound context quit routine. - initialize statistics totals for printout. - in authzone check that node exists before adding rrset. - in unbound-anchor, use readwrite memory BIO. - assertion in autotrust that packed rrset is formed correctly. - Fix memory leak when message parse fails partway through copy. - remove unused udpsize assignment in message encode. - nicer bio free code in unbound-anchor. - annotate exit functions with noreturn in unbound-control. 11 September 2018: Wouter - Fixed unused return value warnings in contrib/fastrpz.patch for asprintf. - Fix to squelch respip warning in unit test, it is printed at higher verbosity settings. - Fix spelling errors. - Fix initialisation in remote.c 10 September 2018: Wouter - 1.8.1 in svn trunk. (changes from 4,5,.. sep apply). - iana port update. 5 September 2018: Wouter - Fix spelling error in header, from getdns commit by Andreas Gelmini. 4 September 2018: Ralph - More explicitly mention the type of ratelimit when applying ip-ratelimit. 4 September 2018: Wouter - Tag for 1.8.0rc1 release, became 1.8.0 release on 10 Sep 2018. 31 August 2018: Wouter - Disable minimal-responses in subnet unit tests. 30 August 2018: Wouter - Fix that a local-zone with a local-zone-type that is transparent in a view with view-first, makes queries check for answers from the local-zones defined outside of views. 28 August 2018: Ralph - Disable minimal-responses in ipsecmod unit tests. - Added serve-expired-ttl and serve-expired-ttl-reset options. 27 August 2018: Wouter - Set defaults to yes for a number of options to increase speed and resilience of the server. The so-reuseport, harden-below-nxdomain, and minimal-responses options are enabled by default. They used to be disabled by default, waiting to make sure they worked. They are enabled by default now, and can be disabled explicitly by setting them to "no" in the unbound.conf config file. The reuseport and minimal options increases speed of the server, and should be otherwise harmless. The harden-below-nxdomain option works well together with the recently default enabled qname minimisation, this causes more fetches to use information from the cache. - next release is called 1.8.0. - Fix lintflags for lint on FreeBSD. 22 August 2018: George - #4140: Expose repinfo (comm_reply) to the inplace_callbacks. This gives access to reply information for the client's communication point when the callback is called before the mesh state (modules). Changes to C and Python's inplace_callback signatures were also necessary. 21 August 2018: Wouter - log-local-actions: yes option for unbound.conf that logs all the local zone actions, a patch from Saksham Manchanda (Secure64). - #4146: num.query.subnet and num.query.subnet_cache counters. - Fix only misc failure from log-servfail when val-log-level is not enabled. 17 August 2018: Ralph - Fix classification for QTYPE=CNAME queries when QNAME minimisation is enabled. 17 August 2018: Wouter - Set libunbound to increase current, because the libunbound change to the event callback function signature. That needs programs, that use it, to recompile against the new header definition. - print servfail info to log as error. - added more servfail printout statements, to the iterator. - log-servfail: yes prints log lines that say why queries are returning SERVFAIL to clients. 16 August 2018: Wouter - Fix warning on compile without threads. - Fix contrib/fastrpz.patch. 15 August 2018: Wouter - Fix segfault in auth-zone read and reorder of RRSIGs. 14 August 2018: Wouter - Fix that printout of error for cycle targets is a verbosity 4 printout and does not wrongly print it is a memory error. - Upgraded crosscompile script to include libunbound DLL in the zipfile. 10 August 2018: Wouter - Fix #4144: dns64 module caches wrong (negative) information. 9 August 2018: Wouter - unbound-checkconf checks if modules exist and prints if they are not compiled in the name of the wrong module. - document --enable-subnet in doc/README. - Patch for stub-no-cache and forward-no-cache options that disable caching for the contents of that stub or forward, for when you want immediate changes visible, from Bjoern A. Zeeb. 7 August 2018: Ralph - Make capsforid fallback QNAME minimisation aware. 7 August 2018: Wouter - Fix #4142: unbound.service.in: improvements and fixes. Add unit dependency ordering (based on systemd-resolved). Add 'CAP_SYS_RESOURCE' to 'CapabilityBoundingSet' (fixes warnings about missing privileges during startup). Add 'AF_INET6' to 'RestrictAddressFamilies' (without it IPV6 can't work). From Guido Shanahan. - Patch to implement tcp-connection-limit from Jim Hague (Sinodun). This limits the number of simultaneous TCP client connections from a nominated netblock. - make depend, yacc, lex, doc, headers. And log the limit exceeded message only on high verbosity, so as to not spam the logs when it is busy. 6 August 2018: Wouter - Fix for #4136: Fix to unconditionally call destroy in daemon.c. 3 August 2018: George - Expose if a query (or a subquery) was ratelimited (not src IP ratelimiting) to libunbound under 'ub_result.was_ratelimited'. This also introduces a change to 'ub_event_callback_type' in libunbound/unbound-event.h. - Tidy pylib tests. 3 August 2018: Wouter - Revert previous change for #4136: because it introduces build problems. - New fix for #4136: This one ignores lex without without yylex_destroy. 1 August 2018: Wouter - Fix to remove systemd sockaddr function check, that is not always present. Make socket activation more lenient. But not different when socket activation is not used. - iana port list update. 31 July 2018: Wouter - Patches from Jim Hague (Sinodun) for EDNS KeepAlive. - Sort out test runs when the build directory isn't the project root directory. - Add config tcp-idle-timeout (default 30s). This applies to client connections only; the timeout on TCP connections upstream is unaffected. - Error if EDNS Keepalive received over UDP. - Add edns-tcp-keepalive and edns-tcp-keepalive timeout options and implement option in client responses. - Correct and expand manual page entries for keepalive and idle timeout. - Implement progressive backoff of TCP idle/keepalive timeout. - Fix 'make depend' to work when build dir is not project root. - Add delay parameter to streamtcp, -d secs. To be used when testing idle timeout. - From Wouter: make depend, the dependencies in the patches did not apply cleanly. Also remade yacc and lex. - Fix mesh.c incompatible pointer pass. - Please doxygen so it passes. - Fix #4139: Fix unbound-host leaks memory on ANY. 30 July 2018: Wouter - Fix #4136: insufficiency from mismatch of FLEX capability between released tarball and build host. 27 July 2018: Wouter - Fix man page, say that chroot is enabled by default. 26 July 2018: Wouter - Fix #4135: 64-bit Windows Installer Creates Entries Under The Wrong Registry Key, reported by Brian White. 23 July 2018: Wouter - Fix use-systemd readiness signalling, only when use-systemd is yes and not in signal handler. 20 July 2018: Wouter - Fix #4130: print text describing -dd and unbound-checkconf on config file read error at startup, the errors may have been moved away by the startup process. - Fix #4131: for solaris, error YY_CURRENT_BUFFER undeclared. 19 July 2018: Wouter - Fix #4129 unbound-control error message with wrong cert permissions is too cryptic. 17 July 2018: Wouter - Fix #4127 unbound -h does not list -p help. - Print error if SSL name verification configured but not available in the ssl library. - Fix that ratelimit and ip-ratelimit are applied after reload of changed config file. - Resize ratelimit and ip-ratelimit caches if changed on reload. 16 July 2018: Wouter - Fix qname minimisation NXDOMAIN validation lookup failures causing error_supers assertion fails. - Squelch can't bind socket errors with Permission denied unless verbosity is 4 or higher, for UDP outgoing sockets. 12 July 2018: Wouter - Fix to improve systemd socket activation code file descriptor assignment. - Fix for 4126 that the #define for UNKNOWN_SERVER_NICENESS can be more easily changed to adjust default rtt assumptions. 10 July 2018: Wouter - Note in documentation that the cert name match code needs OpenSSL 1.1.0 or later to be enabled. 6 July 2018: Wouter - Fix documentation ambiguity for tls-win-cert in tls-upstream and forward-tls-upstream docs. - iana port update. - Note RFC8162 support. SMIMEA record type can be read in by the zone record parser. - Fix round robin for failed addresses with prefer-ip6: yes 4 July 2018: Wouter - Fix #4112: Fix that unbound-anchor -f /etc/resolv.conf will not pass if DNSSEC is not enabled. New option -R allows fallback from resolv.conf to direct queries. 3 July 2018: Wouter - Better documentation for unblock-lan-zones and insecure-lan-zones config statements. - Fix permission denied printed for auth zone probe random port nrs. 2 July 2018: Wouter - Fix checking for libhiredis printout in configure output. - Fix typo on man page in ip-address description. - Update libunbound/python/examples/dnssec_test.py example code to also set the 20326 trust anchor for the root in the example code. 29 June 2018: Wouter - dns64-ignore-aaaa: config option to list domain names for which the existing AAAA is ignored and dns64 processing is used on the A record. 28 June 2018: Wouter - num.queries.tls counter for queries over TLS. - log port number with err_addr logs. 27 June 2018: Wouter - #4109: Fix that package config depends on python unconditionally. - Patch, do not export python from pkg-config, from Petr Menšík. 26 June 2018: Wouter - Partial fix for permission denied on IPv6 address on FreeBSD. - Fix that auth-zone master reply with current SOA serial does not stop scan of masters for an updated zone. - Fix that auth-zone does not start the wait timer without checking if the wait timer has already been started. 21 June 2018: Wouter - #4108: systemd reload hang fix. - Fix usage printout for unbound-host, hostname has to be last argument on BSDs and Windows. 19 June 2018: Wouter - Fix for unbound-control on Windows and set TCP socket parameters more closely. This fix is part of 1.7.3. - Windows example service.conf edited with more windows specific configuration. - Fix windows unbound-control no cert bad file descriptor error. This fix is part of 1.7.3. 18 June 2018: Wouter - Fix that control-use-cert: no works for 127.0.0.1 to disable certs. This fix is part of 1.7.3rc2. - Fix unbound-checkconf for control-use-cert. This fix is part of 1.7.3. 15 June 2018: Wouter - tag for 1.7.3rc1. - trunk has 1.7.4. - unbound-control auth_zone_reload _zone_ option rereads the zonefile. - unbound-control auth_zone_transfer _zone_ option starts the probe sequence for a master to transfer the zone from and transfers when a new zone version is available. 14 June 2018: Wouter - #4103: Fix that auth-zone does not insist on SOA record first in file for url downloads. - Fix that first control-interface determines if TLS is used. Warn when IP address interfaces are used without TLS. - Fix nettle compile. 12 June 2018: Ralph - Don't count CNAME response types received during qname minimisation as query restart. 12 June 2018: Wouter - #4102 for NSD, but for Unbound. Named unix pipes do not use certificate and key files, access can be restricted with file and directory permissions. The option control-use-cert is no longer used, and ignored if found in unbound.conf. - Rename tls-additional-ports to tls-additional-port, because every line adds one port. - Fix buffer size warning in unit test. - remade dependencies in the Makefile. 6 June 2018: Wouter - Patch to fix openwrt for mac os build darwin detection in configure. 5 June 2018: Wouter - Fix crash if ratelimit taken into use with unbound-control instead of with unbound.conf. 4 June 2018: Wouter - Fix deadlock caused by incoming notify for auth-zone. - tag for 1.7.2rc1, became 1.7.2 release on 11 June 2018, trunk is 1.7.3 in development from this point. - #4100: Fix stub reprime when it becomes useless. 1 June 2018: Wouter - Rename additional-tls-port to tls-additional-ports. The older name is accepted for backwards compatibility. 30 May 2018: Wouter - Patch from Syzdek: Add ability to ignore RD bit and treat all requests as if the RD bit is set. 29 May 2018: Wouter - in compat/arc4random call getentropy_urandom when getentropy fails with ENOSYS. - Fix that fallback for windows port. 28 May 2018: Wouter - Fix windows tcp and tls spin on events. - Add routine from getdns to add windows cert store to the SSL_CTX. - tls-win-cert option that adds the system certificate store for authenticating DNS-over-TLS connections. It can be used instead of the tls-cert-bundle option, or with it to add certificates. 25 May 2018: Wouter - For TCP and TLS connections that don't establish, perform address update in infra cache, so future selections can exclude them. - Fix that tcp sticky events are removed for closed fd on windows. - Fix close events for tcp only. 24 May 2018: Wouter - Fix that libunbound can do DNS-over-TLS, when configured. - Fix that windows unbound service can use DNS-over-TLS. - unbound-host initializes ssl (for potential DNS-over-TLS usage inside libunbound), when ssl upstream or a cert-bundle is configured. 23 May 2018: Wouter - Use accept4 to speed up incoming TCP (and TLS) connections, available on Linux, FreeBSD and OpenBSD. 17 May 2018: Ralph - Qname minimisation default changed to yes. 15 May 2018: Wouter - Fix low-rtt-pct to low-rtt-permil, as it is parts in one thousand. 11 May 2018: Wouter - Fix contrib/libunbound.pc for libssl libcrypto references, from https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=226914 7 May 2018: Wouter - Fix windows to not have sticky TLS events for TCP. - Fix read of DNS over TLS length and data in one read call. - Fix mesh state assertion failure due to callback removal. 3 May 2018: Wouter - Fix that configure --with-libhiredis also turns on cachedb. - Fix gcc 8 buffer warning in testcode. - Fix function type cast warning in libunbound context callback type. 2 May 2018: Wouter - Fix fail to reject dead peers in forward-zone, with ssl-upstream. 1 May 2018: Wouter - Fix that unbound-control reload frees the rrset keys and returns the memory pages to the system. 30 April 2018: Wouter - Fix spelling error in man page and note defaults as no instead of off. 26 April 2018: Wouter - Fix for crash in daemon_cleanup with dnstap during reload, from Saksham Manchanda. - Also that for dnscrypt. - tag for 1.7.1rc1 release. Became 1.7.1 release on 3 May, trunk is from here 1.7.2 in development. 25 April 2018: Ralph - Fix memory leak when caching wildcard records for aggressive NSEC use 24 April 2018: Wouter - Fix contrib/fastrpz.patch for this release. - Fix auth https for libev. 24 April 2018: Ralph - Added root-key-sentinel support 23 April 2018: Wouter - makedist uses bz2 for expat code, instead of tar.gz. - Fix #4092: libunbound: use-caps-for-id lacks colon in config_set_option. - auth zone http download stores exact copy of downloaded file, including comments in the file. - Fix sldns parse failure for CDS alternate delete syntax empty hex. - Attempt for auth zone fix; add of callback in mesh gets from callback does not skip callback of result. - Fix cname classification with qname minimisation enabled. - list_auth_zones unbound-control command. 20 April 2018: Wouter - man page documentation for dns-over-tls forward-addr '#' notation. - removed free from failed parse case. - Fix #4091: Fix that reload of auth-zone does not merge the zonefile with the previous contents. - Delete auth zone when removed from config. 19 April 2018: Wouter - Can set tls authentication with forward-addr: IP#tls.auth.name And put the public cert bundle in tls-cert-bundle: "ca-bundle.pem". such as forward-addr: 9.9.9.9@853#dns.quad9.net or 1.1.1.1@853#cloudflare-dns.com - Fix #658: unbound using TLS in a forwarding configuration does not verify the server's certificate (RFC 8310 support). - For addr with #authname and no @port notation, the default is 853. 18 April 2018: Wouter - Fix auth-zone retry timer to be on schedule with retry timeout, with backoff. Also time a refresh at the zone expiry. 17 April 2018: Wouter - auth zone notify work. - allow-notify: config statement for auth-zones. - unit test for allow-notify 16 April 2018: Wouter - Fix auth zone target lookup iterator. - auth zone notify with prefix - auth zone notify work. 13 April 2018: Wouter - Fix for max include depth for authzones. - Fix memory free on fail for $INCLUDE in authzone. - Fix that an internal error to look up the wrong rr type for auth zone gets stopped, before trying to send there. - auth zone notify work. 10 April 2018: Ralph - num.query.aggressive.NOERROR and num.query.aggressive.NXDOMAIN statistics counters. 10 April 2018: Wouter - documentation for low-rtt and low-rtt-pct. - auth zone notify work. 9 April 2018: Wouter - Fix that flush_zone sets prefetch ttl expired, so that with serve-expired enabled it'll start prefetching those entries. - num.query.authzone.up and num.query.authzone.down statistics counters. - Fix downstream auth zone, only fallback when auth zone fails to answer and fallback is enabled. - Accept both option names with and without colon for get_option and set_option. - low-rtt and low-rtt-pct in unbound.conf enable the server selection of fast servers for some percentage of the time. 5 April 2018: Wouter - Combine write of tcp length and tcp query for dns over tls. - nitpick fixes in example.conf. - Fix above stub queries for type NS and useless delegation point. - Fix unbound-control over pipe with openssl 1.1.1, the TLSv1.3 tls_choose_sigalg routine does not allow the ciphers for the pipe, so use TLSv1.2. - ED448 support. 3 April 2018: Wouter - Fix #4043: make test fails due to v6 presentation issue in macOS. - Fix unable to resolve after new WLAN connection, due to auth-zone failing with a forwarder set. Now, auth-zone is only used for answers (not referrals) when a forwarder is set. 29 March 2018: Ralph - Check "result" in dup_all(), by Florian Obser. 23 March 2018: Ralph - Fix unbound-control get_option aggressive-nsec 21 March 2018: Ralph - Do not use cached NSEC records to generate negative answers for domains under DNSSEC Negative Trust Anchors. 19 March 2018: Wouter - iana port update. 16 March 2018: Wouter - corrected a minor typo in the changelog. - move htobe64/be64toh portability code to cachedb.c. 15 March 2018: Wouter - Add --with-libhiredis, unbound support for a new cachedb backend that uses a Redis server as the storage. This implementation depends on the hiredis client library (https://redislabs.com/lp/hiredis/). And unbound should be built with both --enable-cachedb and --with-libhiredis[=PATH] (where $PATH/include/hiredis/hiredis.h should exist). Patch from Jinmei Tatuya (Infoblox). - Fix #3817: core dump happens in libunbound delete, when queued servfail hits deleted message queue. - Create additional tls service interfaces by opening them on other portnumbers and listing the portnumbers as additional-tls-port: nr. 13 March 2018: Wouter - Fix typo in documentation. - Fix #3736: Fix 0 TTL domains stuck on SERVFAIL unless manually flushed with serve-expired on. 12 March 2018: Wouter - Added documentation for aggressive-nsec: yes. - tag 1.7.0rc3. That became the 1.7.0 release on 15 Mar, trunk now has 1.7.1 in development. - Fix #3727: Protocol name is TLS, options have been renamed but documentation is not consistent. - Check IXFR start serial. 9 March 2018: Wouter - Fix #3598: Fix swig build issue on rhel6 based system. configure --disable-swig-version-check stops the swig version check. 8 March 2018: Wouter - tag 1.7.0rc2. 7 March 2018: Wouter - Fixed contrib/fastrpz.patch, even though this already applied cleanly for me, now also for others. - patch to log creates keytag queries, from A. Schulze. - patch suggested by Debian lintian: allow to -> allow one to, from A. Schulze. - Attempt to remove warning about trailing whitespace. 6 March 2018: Wouter - Reverted fix for #3512, this may not be the best way forward; although it could be changed at a later time, to stay similar to other implementations. - svn trunk contains 1.7.0, this is the number for the next release. - Fix for windows compile. - tag 1.7.0rc1. 5 March 2018: Wouter - Fix to check define of DSA for when openssl is without deprecated. - iana port update. - Fix #3582: Squelch address already in use log when reuseaddr option causes same port to be used twice for tcp connections. 27 February 2018: Wouter - Fixup contrib/fastrpz.patch so that it applies. - Fix compile without threads, and remove unused variable. - Fix compile with staticexe and python module. - Fix nettle compile. 22 February 2018: Ralph - Save wildcard RRset from answer with original owner for use in aggressive NSEC. 21 February 2018: Wouter - Fix #3512: unbound incorrectly reports SERVFAIL for CAA query when there is a CNAME loop. - Fix validation for CNAME loops. When it detects a cname loop, by finding the cname, cname in the existing list, it returns the partial result with the validation result up to then. - more robust cachedump rrset routine. 19 February 2018: Wouter - Fix #3505: Documentation for default local zones references wrong RFC. - Fix #3494: local-zone noview can be used to break out of the view to the global local zone contents, for queries for that zone. - Fix for more maintainable code in localzone. 16 February 2018: Wouter - Fixes for clang static analyzer, the missing ; in edns-subnet/addrtree.c after the assert made clang analyzer produce a failure to analyze it. 13 February 2018: Ralph - Aggressive NSEC tests 13 February 2018: Wouter - tls-cert-bundle option in unbound.conf enables TLS authentication. - iana port update. 12 February 2018: Wouter - Unit test for auth zone https url download. 12 February 2018: Ralph - Added tests with wildcard expanded NSEC records (CVE-2017-15105 test) - Processed aggressive NSEC code review remarks Wouter 8 February 2018: Ralph - Aggressive use of NSEC implementation. Use cached NSEC records to generate NXDOMAIN, NODATA and positive wildcard answers. 8 February 2018: Wouter - iana port update. - auth zone url config. 5 February 2018: Wouter - Fix #3451: dnstap not building when you have a separate build dir. And removed protoc warning, set dnstap.proto syntax to proto2. - auth-zone provides a way to configure RFC7706 from unbound.conf, eg. with auth-zone: name: "." for-downstream: no for-upstream: yes fallback-enabled: yes and masters or a zonefile with data. 2 February 2018: Wouter - Fix unfreed locks in log and arc4random at exit of unbound. - unit test with valgrind - Fix lock race condition in dns cache dname synthesis. - lock subnet new item before insertion to please checklocks, no modification of critical regions outside of lock region. 1 February 2018: Wouter - fix unaligned structure making a false positive in checklock unitialised memory. 29 January 2018: Ralph - Use NSEC with longest ce to prove wildcard absence. - Only use *.ce to prove wildcard absence, no longer names. 25 January 2018: Wouter - ltrace.conf file for libunbound in contrib. 23 January 2018: Wouter - Fix that unbound-checkconf -f flag works with auto-trust-anchor-file for startup scripts to get the full pathname(s) of anchor file(s). - Print fatal errors about remote control setup before log init, so that it is printed to console. 22 January 2018: Wouter - Accept tls-upstream in unbound.conf, the ssl-upstream keyword is also recognized and means the same. Also for tls-port, tls-service-key, tls-service-pem, stub-tls-upstream and forward-tls-upstream. - Fix #3397: Fix that cachedb could return a partial CNAME chain. - Fix #3397: Fix that when the cache contains an unsigned DNAME in the middle of a cname chain, a result without the DNAME could be returned. 19 January 2018: Wouter - tag 1.6.8 for release with CVE fix. - trunk has 1.6.9 with fix and previous commits. - patch for CVE-2017-15105: vulnerability in the processing of wildcard synthesized NSEC records. - iana port update. - make depend: code dependencies updated in Makefile. 4 January 2018: Ralph - Copy query and correctly set flags on REFUSED answers when cache snooping is not allowed. 3 January 2018: Ralph - Fix queries being leaked above stub when refetching glue. 2 January 2017: Wouter - Fix that DS queries with referral replies are answered straight away, without a repeat query picking the DS from cache. The correct reply should have been an answer, the reply is fixed by the scrubber to have the answer in the answer section. - Remove clang optimizer disable, Fix that expiration date checks don't fail with clang -O2. 15 December 2017: Wouter - Fix timestamp failure because of clang optimizer failure, by disabling -O2 when the compiler --version is clang. - iana port update. - Also disable -flto for clang, to make incep-expi signature check work. 12 December 2017: Ralph - Fix qname-minimisation documentation (A QTYPE, not NS) 12 December 2017: Wouter - authzone work, transfer connect. 7 December 2017: Ralph - Check whether --with-libunbound-only is set when using --with-nettle or --with-nss. 4 December 2017: Wouter - Fix link failure on OmniOS. 1 December 2017: Wouter - auth zone work. 30 November 2017: Wouter - Fix #3299 - forward CNAME daisy chain is not working 14 November 2017: Wouter - Fix #2882: Unbound behaviour changes (wrong) when domain-insecure is set for stub zone. It no longer searches for DNSSEC information. - auth xfer work on probe timer and lookup. 13 November 2017: Wouter - Fix #2801: Install libunbound.pc. - Fix qname minimisation to send AAAA queries at zonecut like type A. - reverted AAAA change. 7 November 2017: Wouter - Fix #2492: Documentation libunbound. 3 November 2017: Wouter - Fix #2362: TLS1.3/openssl-1.1.1 not working. - Fix #2034 - Autoconf and -flto. - Fix #2141 - for libsodium detect lack of entropy in chroot, print a message and exit. 2 November 2017: Wouter - Fix #1913: ub_ctx_config is under circumstances thread-safe. - make ip-transparent option work on OpenBSD. 31 October 2017: Wouter - Document that errno is left informative on libunbound config read fail. - lexer output. - iana port update. 25 October 2017: Ralph - Fixed libunbound manual typo. - Fix #1949: [dnscrypt] make provider name mismatch more obvious. - Fix #2031: Double included headers 24 October 2017: Ralph - Update B root ipv4 address. 19 October 2017: Wouter - authzone work, probe timer setup. 18 October 2017: Wouter - lint for recent authzone commit. 17 October 2017: Wouter - Fix #1749: With harden-referral-path: performance drops, due to circular dependency in NS and DS lookups. - [dnscrypt] prevent dnscrypt-secret-key, dnscrypt-provider-cert duplicates - [dnscrypt] introduce dnscrypt-provider-cert-rotated option, from Manu Bretelle. This option allows handling multiple cert/key pairs while only distributing some of them. In order to reliably match a client magic with a given key without strong assumption as to how those were generated, we need both key and cert. Likewise, in order to know which ES version should be used. On the other hand, when rotating a cert, it can be desirable to only serve the new cert but still be able to handle clients that are still using the old certs's public key. The `dnscrypt-provider-cert-rotated` allow to instruct unbound to not publish the cert as part of the DNS's provider_name's TXT answer. - Better documentation for cache-max-negative-ttl. - Work on local root zone code. 10 October 2017: Wouter - tag 1.6.7 - trunk has version 1.6.8. 6 October 2017: Wouter - Fix spelling in unbound-control man page. 5 October 2017: Wouter - Fix trust-anchor-signaling works in libunbound. - Fix some more crpls in testdata for different signaling default. - tag 1.6.7rc1 5 October 2017: Ralph - Set trust-anchor-signaling default to yes - Use RCODE from A query on DNS64 synthesized answer. 2 October 2017: Wouter - Fix param unused warning for windows exportsymbol compile. 25 September 2017: Ralph - Fix #1450: Generate again patch contrib/aaaa-filter-iterator.patch (by Danilo G. Baio). 21 September 2017: Ralph - Log name of looping module 19 September 2017: Wouter - use a cachedb answer even if it's "expired" when serve-expired is yes (patch from Jinmei Tatuya). - trigger refetching of the answer in that case (this will bypass cachedb lookup) - allow storing a 0-TTL answer from cachedb in the in-memory message cache when serve-expired is yes - Fix DNSCACHE_STORE_ZEROTTL to be bigger than 0xffff. 18 September 2017: Ralph - Fix #1400: allowing use of global cache on ECS-forwarding unless always-forward. 18 September 2017: Wouter - tag 1.6.6 (is 1.6.6rc2) - Fix that looping modules always stop the query, and don't pass control. - Fix #1435: Please allow UDP to be disabled separately upstream and downstream. - Fix #1440: [dnscrypt] client nonce cache. 15 September 2017: Wouter - Fix unbound-host to report error for DNSSEC state of failed lookups. - Spelling fixes, from Josh Soref. 13 September 2017: Wouter - tag 1.6.6rc2, became 1.6.6 on 18 sep. trunk 1.6.7 in development. 12 September 2017: Wouter - Add dns64 for client-subnet in unbound-checkconf. 4 September 2017: Ralph - Fix #1412: QNAME minimisation strict mode not honored - Fix #1434: Fix windows openssl 1.1.0 linking. 4 September 2017: Wouter - tag 1.6.6rc1 - makedist fix for windows binaries, with openssl 1.1.0 windres fix, and expat 2.2.4 install target fix. 1 September 2017: Wouter - Recommend 1472 buffer size in unbound.conf 31 August 2017: Wouter - Fix #1424: cachedb:testframe is not thread safe. - For #1417: escape ; in dnscrypt tests. - but reverted that, tests fails with that escape. - Fix #1417: [dnscrypt] shared secret cache counters, and works when dnscrypt is not enabled. And cache size configuration option. - make depend - Fix #1418: [ip ratelimit] initialize slabhash using ip-ratelimit-slabs. 30 August 2017: Wouter - updated contrib/fastrpz.patch to apply with configparser changes. - Fix 1416: qname-minimisation breaks TLSA lookups with CNAMEs. 29 August 2017: Wouter - Fix #1414: fix segfault on parse failure and log_replies. - zero qinfo in handle_request, this zeroes local_alias and also the qname member. - new keys and certs for dnscrypt tests. - fixup WKS test on buildhost without servicebyname. 28 August 2017: Wouter - Fix #1415: patch to free dnscrypt environment on reload. - iana portlist update - Fix #1415: [dnscrypt] shared secret cache, patch from Manu Bretelle. - Small fixes for the shared secret cache patch. - Fix WKS records on kvm autobuild host, with default protobyname entries for udp and tcp. 23 August 2017: Wouter - Fix #1407: Add ECS options check to unbound-checkconf. - make depend - Fix to reclaim tcp handler when it is closed due to dnscrypt buffer allocation failure. 22 August 2017: Wouter - Fix install of trust anchor when two anchors are present, makes both valid. Checks hash of DS but not signature of new key. This fixes the root.key file if created when unbound is installed between sep11 and oct11 2017. - tag 1.6.5 with pointrelease 1.6.5 (1.6.4 plus 5011 fix). - trunk version 1.6.6 in development. - Fix issue on macOX 10.10 where TCP fast open is detected but not implemented causing TCP to fail. The fix allows fallback to regular TCP in this case and is also more robust for cases where connectx() fails for some reason. - Fix #1402: squelch invalid argument error for fd_set_block on windows. 10 August 2017: Wouter - Patch to show DNSCrypt status in help output, from Carsten Strotmann. 8 August 2017: Wouter - Fix #1398: make cachedb secret configurable. - Remove spaces from Makefile. 7 August 2017: Wouter - Fix #1397: Recursive DS lookups for AS112 zones names should recurse. 3 August 2017: Ralph - Remove unused iter_env member (ip6arpa_dname) - Do not reset rrset.bogus stats when called using stats_noreset. - Added stats for queries that have been ratelimited by domain recursion. - Do not add rrset_bogus and query ratelimiting stats per thread, these module stats are global. 3 August 2017: Wouter - Fix #1394: mix of serve-expired and response-ip could cause a crash. 24 July 2017: Wouter - upgrade aclocal(pkg.m4 0.29.1), config.guess(2016-10-02), config.sub(2016-09-05). - annotate case statement fallthrough for gcc 7.1.1. - flex output from flex 2.6.1. - snprintf of thread number does not warn about truncated string. - squelch TCP fast open error on FreeBSD when kernel has it disabled, unless verbosity is high. - remove warning from windows compile. - Fix compile with libnettle - Fix DSA configure switch (--disable dsa) for libnettle and libnss. - Fix #1365: Add Ed25519 support using libnettle. - iana portlist update 17 July 2017: Wouter - Fix #1350: make cachedb backend configurable (from JINMEI Tatuya). - Fix #1349: allow suppression of pidfiles (from Daniel Kahn Gillmor). With the -p option unbound does not create a pidfile. 11 July 2017: Wouter - Fix #1344: RFC6761-reserved domains: test. and invalid. - Redirect all localhost names to localhost address for RFC6761. 6 July 2017: Wouter - Fix tests to use .tdir (from Manu Bretelle) instead of .tpkg. - Fix svn hooks for tdir (selected if testcode/mini_tdir.sh exists).. 4 July 2017: Wouter - Fix 1332: Bump verbosity of failed chown'ing of the control socket. 3 July 2017: Wouter - Fix for unbound-checkconf, check ipsecmod-hook if ipsecmod is turned on. - Fix #1331: libunbound segfault in threaded mode when context is deleted. - Fix pythonmod link line option flag. - Fix openssl 1.1.0 load of ssl error strings from ssl init. 29 June 2017: Wouter - Fix python example0 return module wait instead of error for pass. - iana portlist update - enhancement for hardened-tls for DNS over TLS. Removed duplicated security settings. 27 June 2017: Wouter - Tag 1.6.4 is created with the 1.6.4rc2 contents. - Trunk contains 1.6.5, with changes from 26, 27 june. - Remove signed unsigned warning from authzone. - Fix that infra cache host hash does not change after reconfig. 26 June 2017: Wouter - (for 1.6.5) Better fixup of dnscrypt_cert_chacha test for different escapes. - First fix for zero b64 and hex text zone format in sldns. - unbound-control dump_infra prints port number for address if not 53. 23 June 2017: Wouter - (for 1.6.5): fixup of dnscrypt_cert_chacha test (from Manu Bretelle). 22 June 2017: Wouter - Tag 1.6.4rc2 22 June 2017: Ralph - Added fastrpz patch to contrib 21 June 2017: Wouter - Fix #1316: heap read buffer overflow in parse_edns_options. 20 June 2017: Wouter - Fix warning in pythonmod under clang compiler. - Tag 1.6.4rc1 - Fix lintian typo. 16 June 2017: Ralph - Fix #1277: disable domain ratelimit by setting value to 0. 16 June 2017: Wouter - Fix #1301: memory leak in respip and tests. - Free callback in edns-subnetmod on exit and restart. - Fix memory leak in sldns_buffer_new_frm_data. - Fix memory leak in dnscrypt config read. - Fix dnscrypt chacha cert support ifdefs. - Fix dnscrypt chacha cert unit test escapes in grep. - Remove asynclook tests that cause test and purifier problems. - Fix to unlock view in view test. 15 June 2017: Wouter - Fix stub zone queries leaking to the internet for harden-referral-path ns checks. - Fix query for refetch_glue of stub leaking to internet. 13 June 2017: Wouter - Fix #1279: Memory leak on reload when python module is enabled. - Fix #1280: Unbound fails assert when response from authoritative contains malformed qname. When 0x20 caps-for-id is enabled, when assertions are not enabled the malformed qname is handled correctly. - 1.6.3 tag created, with only #1280 fix, trunk is 1.6.4 development. - More fixes in depth for buffer checks in 0x20 qname checks. 12 June 2017: Wouter - Fix #1278: Incomplete wildcard proof. 8 June 2017: Ralph - Added domain name based ECS whitelist. 8 June 2017: Wouter - Detect chacha for dnscrypt at configure time. - dnscrypt unit tests with chacha. 7 June 2017: Wouter - Fix that unbound-control can set val_clean_additional and val_permissive_mode. - Add dnscrypt XChaCha20 tests. 6 June 2017: Wouter - Add an explicit type cast for TCP FASTOPEN fix. - renumbering B-Root's IPv6 address to 2001:500:200::b. - Fix #1275: cached data in cachedb is never used. - Fix #1276: [dnscrypt] add XChaCha20-Poly1305 cipher. 1 June 2017: Ralph - Fix #1274: automatically trim chroot path from dnscrypt key/cert paths (from Manu Bretelle). 1 June 2017: Wouter - Fix fastopen EPIPE fallthrough to perform connect. 31 May 2017: Ralph - Also use global local-zones when there is a matching view that does not have any local-zone specified. 31 May 2017: Wouter - Fix #1273: cachedb.c doesn't compile with -Wextra. - If MSG_FASTOPEN gives EPIPE fallthrough to try normal tcp write. 30 May 2017: Ralph - Fix #1269: inconsistent use of built-in local zones with views. - Add defaults for new local-zone trees added to views using unbound-control. 30 May 2017: Wouter - Support for openssl EVP_DigestVerify. - Support for the ED25519 algorithm with openssl (from openssl 1.1.1). 29 May 2017: Wouter - Fix assertion for low buffer size and big edns payload when worker overrides udpsize. 26 May 2017: Ralph - Added redirect-bogus.patch to contrib directory. 26 May 2017: Wouter - Fix #1270: unitauth.c doesn't compile with higher warning level and optimization - exec_prefix is by default equal to prefix. - printout localzone for duplicate local-zone warnings. 24 May 2017: Wouter - authzone cname chain, no rrset duplicates, wildcard doesn't change rrsets added for cname chain. 23 May 2017: Wouter - first services/authzone check in, it compiles and reads and writes zonefiles. - iana portlist update 22 May 2017: Wouter - Fix #1268: SIGSEGV after log_reopen. 18 May 2017: Wouter - Fix #1265 to use /bin/kill. - Fix #1267: Libunbound validator/val_secalgo.c uses obsolete APIs, and compatibility with BoringSSL. 17 May 2017: Wouter - Fix #1265: contrib/unbound.service contains hardcoded path. 17 May 2017: George - Use qstate's region for IPSECKEY rrset (ipsecmod). 16 May 2017: George - Implemented opportunistic IPsec support module (ipsecmod). - Some whitespace fixup. 16 May 2017: Wouter - updated dependencies in the makefile. - document trust-anchor-signaling in example config file. - updated configure, dependencies and flex output. - better module memory lookup, fix of unbound-control shm names for module memory printout of statistics. - Fix type AVC sldns rrdef. 12 May 2017: Wouter - Adjust servfail by iterator to not store in cache when serve-expired is enabled, to avoid overwriting useful information there. - Fix queries for nameservers under a stub leaking to the internet. 9 May 2017: Ralph - Add 'c' to getopt() in testbound. - iana portlist update 8 May 2017: Wouter - Fix tcp-mss failure printout text. - Set SO_REUSEADDR on outgoing tcp connections to fix the bind before connect limited tcp connections. With the option tcp connections can share the same source port (for different destinations). 2 May 2017: Ralph - Added mesh_add_sub to add detached mesh entries. - Use mesh_add_sub for key tag signaling query. 2 May 2017: Wouter - Added test for leak of stub information. - Fix sldns wire2str printout of RR type CAA tags. - Fix sldns int16_data parse. - Fix sldns parse and printout of TSIG RRs. - sldns SMIMEA and AVC definitions, same as getdns definitions. 1 May 2017: Wouter - Fix #1259: "--disable-ecdsa" argument overwritten by "#ifdef SHA256_DIGEST_LENGTH@daemon/remote.c". - iana portlist update - Fix #1258: Windows 10 X64 unbound 1.6.2 service will not start. and fix that 64bit getting installed in C:\Program Files (x86). 26 April 2017: Ralph - Implemented trust anchor signaling using key tag query. 26 April 2017: Wouter - Based on #1257: check parse limit before t increment in sldns RR string parse routine. 24 April 2017: Wouter - unbound-checkconf -o allows query of dnstap config variables. Also unbound-control get_option. Also for dnscrypt. - trunk contains 1.6.3 version number (changes from 1.6.2 back from when the 1.6.2rc1 tag has been created). 21 April 2017: Ralph - Fix #1254: clarify ratelimit-{for,below}-domain (from Manu Bretelle). - iana portlist update 18 April 2017: Ralph - Fix #1252: more indentation inconsistencies. - Fix #1253: unused variable in edns-subnet/addrtree.c:getbit(). 13 April 2017: Ralph - Added ECS unit test (from Manu Bretelle). - ECS documentation fix (from Manu Bretelle). 13 April 2017: Wouter - Fix #1250: inconsistent indentation in services/listen_dnsport.c. - tag for 1.6.2rc1 - (for 1.6.3:) unbound.h exports the shm stats structures. They use type long long and no ifdefs, and ub_ before the typenames. 12 April 2017: Wouter - subnet mem value is available in shm, also when not enabled, to make the struct easier to memmap by other applications, independent of the configuration of unbound. 12 April 2017: Ralph - Fix #1247: unbound does not shorten source prefix length when forwarding ECS. - Properly check for allocation failure in local_data_find_tag_datas. - Fix #1249: unbound doesn't return FORMERR to bogus ECS. - Set SHM ECS memory usage to 0 when module not loaded. 11 April 2017: Ralph - Display ECS module memory usage. 10 April 2017: Wouter - harden-algo-downgrade: no also makes unbound more lenient about digest algorithms in DS records. 10 April 2017: Ralph - Remove ECS option after REFUSED answer. - Fix small memory leak in edns_opt_copy_alloc. - Respip dereference after NULL check. - Zero initialize addrtree allocation. - Use correct identifier for SHM destroy. 7 April 2017: George - Fix pythonmod for cb changes. - Some whitespace fixup. 7 April 2017: Ralph - Unlock view in respip unit test 6 April 2017: Ralph - Generalise inplace callback (de)registration - (de)register inplace callbacks for module id - No unbound-control set_option for ECS options - Deprecated client-subnet-opcode config option - Introduced client-subnet-always-forward config option - Changed max-client-subnet-ipv6 default to 56 (as in RFC) - Removed extern ECS config options - module_restart_next now calls clear on all following modules - Also create ECS module qstate on module_event_pass event - remove malloc from inplace_cb_register 6 April 2017: Wouter - Small fixup for documentation. - iana portlist update - Fix respip for braces when locks arent used. - Fix pythonmod for cb changes. 4 April 2017: Wouter - Fix #1244: document that use of chroot requires trust anchor file to be under chroot. - iana portlist update 3 April 2017: Ralph - Do not add current time twice to TTL before ECS cache store. - Do not touch rrset cache after ECS cache message generation. - Use LDNS_EDNS_CLIENT_SUBNET as default ECS opcode. 3 April 2017: Wouter - Fix #1217: Add metrics to unbound-control interface showing crypted, cert request, plaintext and malformed queries (from Manu Bretelle). - iana portlist update 27 March 2017: Wouter - Remove (now unused) event2 include from dnscrypt code. 24 March 2017: George - Fix to prevent non-referal query from being cached as referal when the no_cache_store flag was set. 23 March 2017: Wouter - Fix #1239: configure fails to find python distutils if python prints warning. 22 March 2017: Wouter - Fix #1238: segmentation fault when adding through the remote interface a per-view local zone to a view with no previous (configured) local zones. - Fix #1229: Systemd service sandboxing, options in wrong sections. 21 March 2017: Ralph - Merge EDNS Client subnet implementation from feature branch into main branch, using new EDNS processing framework. 21 March 2017: Wouter - Fix doxygen for dnscrypt files. 20 March 2017: Wouter - #1217. DNSCrypt support, with --enable-dnscrypt, libsodium and then enabled in the config file from Manu Bretelle. - make depend, autoconf, remove warnings about statement before var. - lru_demote and lruhash_insert_or_retrieve functions for getdns. - fixup for lruhash (whitespace and header file comment). - dnscrypt tests. 17 March 2017: Wouter - Patch for view functionality for local-data-ptr from Björn Ketelaars. - Fix #1237 - Wrong resolving in chain, for norec queries that get SERVFAIL returned. 16 March 2017: Wouter - Fix that SHM is not inited if not enabled. - Add trustanchor.unbound CH TXT that gets a response with a number of TXT RRs with a string like "example.com. 2345 1234" with the trust anchors and their keytags. - Fix that looped DNAMEs do not cause unbound to spend effort. - trustanchor tags are sorted. reusable routine to fetch taglist. 13 March 2017: Wouter - testbound understands Deckard MATCH rcode question answer commands. - Fix #1235: Fix too long DNAME expansion produces SERVFAIL instead of YXDOMAIN + query loop, reported by Petr Spacek. 10 March 2017: Wouter - Fix #1234: shortening DNAME loop produces duplicate DNAME records in ANSWER section. 9 March 2017: Wouter - --disable-sha1 disables SHA1 support in RRSIG, so from DNSKEY and DS records. NSEC3 is not disabled. - fake-sha1 test option; print warning if used. To make unit tests. - unbound-control list local zone and data commands listed in the help output. 8 March 2017: Wouter - make depend for build dependencies. - swig version 2.0.1 required. - fix enum conversion warnings 7 March 2017: Wouter - Fix #1230: swig version 2.0.0 is required for pythonmod, with 1.3.40 it crashes when running repeatly unbound-control reload. - Response actions based on IP address from Jinmei Tatuya (Infoblox). 6 March 2017: Wouter - Fix #1229: Systemd service sandboxing in contrib/unbound.service. - iana portlist update 28 February 2017: Ralph - Fix testpkts.c, check if DO bit is set, not only if there is an OPT record. 28 February 2017: Wouter - For #1227: if we have sha256, set the cipher list to have no known vulns. 27 February 2017: Wouter - Fix #1227: Fix that Unbound control allows weak ciphersuits. - Fix #1226: provide official 32bit binary for windows. 24 February 2017: Wouter - include sys/time.h for new shm code on NetBSD. 23 February 2017: Wouter - Fix doc/CNAME-basedRedirectionDesignNotes.pdf zone static to redirect. - Patch from Luiz Fernando Softov for Stats Shared Memory. - unbound-control stats_shm command prints stats using shared memory, which uses less cpu. - make depend, autoconf, doxygen and lint fixed up. 22 February 2017: Wouter - Fix #1224: Fix that defaults should not fall back to "Program Files (x86) if Unbound is 64bit by default on windows. 21 February 2017: Wouter - iana portlist update 16 February 2017: Wouter - sldns updated for vfixed and buffer resize indication from getdns. 15 February 2017: Wouter - sldns has ED25519 and ED448 algorithm number and name for display. 14 February 2017: Wouter - tag 1.6.1rc3. -- which became 1.6.1 on 21feb, trunk has 1.6.2 13 February 2017: Wouter - Fix autoconf of systemd check for lack of pkg-config. 10 February 2017: Wouter - Fix pythonmod for typedef changes. - Fix dnstap for warning of set but not used. - tag 1.6.1rc2. 9 February 2017: Wouter - tag 1.6.1rc1. 8 February 2017: Wouter - Fix for type name change and fix warning on windows compile. 7 February 2017: Wouter - Include root trust anchor id 20326 in unbound-anchor. 6 February 2017: Wouter - Fix compile on solaris of the fix to use $host detect. 4 February 2017: Wouter - fix root_anchor test for updated icannbundle.pem lower certificates. 26 January 2017: Wouter - Fix 1211: Fix can't enable interface-automatic if no IPv6 with more helpful error message. 20 January 2017: Wouter - Increase MAX_MODULE to 16. 19 January 2017: Wouter - Fix to Rename ub_callback_t to ub_callback_type, because POSIX reserves _t typedefs. - Fix to rename internally used types from _t to _type, because _t type names are reserved by POSIX. - iana portlist update 12 January 2017: Wouter - Fix to also block meta types 128 through to 248 with formerr. - Fix #1206: Some view-related commands are missing from 'unbound-control -h' 9 January 2017: Wouter - Fix #1202: Fix code comment that packed_rrset_data is not always 'packed'. 6 January 2017: Wouter - Fix #1201: Fix missing unlock in answer_from_cache error condition. 5 January 2017: Wouter - Fix to return formerr for queries for meta-types, to avoid packet amplification if this meta-type is sent on to upstream. - Fix #1184: Log DNS replies. This includes the same logging information that DNS queries and response code and response size, patch from Larissa Feng. - Fix #1187: Source IP rate limiting, patch from Larissa Feng. 3 January 2017: Wouter - configure --enable-systemd and lets unbound use systemd sockets if you enable use-systemd: yes in unbound.conf. Also there are contrib/unbound.socket and contrib/unbound.service: systemd files for unbound, install them in /usr/lib/systemd/system. Contributed by Sami Kerola and Pavel Odintsov. - Fix reload chdir failure when also chrooted to that directory. 2 January 2017: Wouter - Fix #1194: Cross build fails when $host isn't `uname` for getentropy. 23 December 2016: Ralph - Fix #1190: Do not echo back EDNS options in local-zone error response. - iana portlist update 21 December 2016: Ralph - Fix #1188: Unresolved symbol 'fake_dsa' in libunbound.so when built with Nettle 19 December 2016: Ralph - Fix #1191: remove comment about view deletion. 15 December 2016: Wouter - iana portlist update - 64bit is default for windows builds. - Fix inet_ntop and inet_pton warnings in windows compile. 14 December 2016: Wouter - Fix #1178: attempt to fix setup error at end, pop result values at end of install. 13 December 2016: Wouter - Fix #1182: Fix Resource leak (socket), at startup. - Fix unbound-control and ipv6 only. 9 December 2016: Wouter - Fix #1176: stack size too small for Alpine Linux. 8 December 2016: Wouter - Fix downcast warnings from visual studio in sldns code. - tag 1.6.0rc1 which became 1.6.0 on 15 dec, and trunk is 1.6.1. 7 December 2016: Ralph - Add DSA support for OpenSSL 1.1.0 - Fix remote control without cert for LibreSSL 6 December 2016: George - Added generic EDNS code for registering known EDNS option codes, bypassing the cache response stage and uniquifying mesh states. Four EDNS option lists were added to module_qstate (module_qstate.edns_opts_*) to store EDNS options from/to front/back side. - Added two flags to module_qstate (no_cache_lookup, no_cache_store) that control the modules' cache interactions. - Added code for registering inplace callback functions. The registered functions can be called just before replying with local data or Chaos, replying from cache, replying with SERVFAIL, replying with a resolved query, sending a query to a nameserver. The functions can inspect the available data and maybe change response/query related data (i.e. append EDNS options). - Updated Python module for the above. - Updated Python documentation. 5 December 2016: Ralph - Fix #1173: differ local-zone type deny from unset tag_actions element. 5 December 2016: Wouter - Fix #1170: document that 'inform' local-zone uses local-data. 1 December 2016: Ralph - hyphen as minus fix, by Andreas Schulze 30 November 2016: Ralph - Added local-zones and local-data bulk addition and removal functionality in unbound-control (local_zones, local_zones_remove, local_datas and local_datas_remove). - iana portlist update 29 November 2016: Wouter - version 1.6.0 is in the development branch. - braces in view.c around lock statements. 28 November 2016: Wouter - new install-sh. 25 November 2016: Wouter - Fix that with openssl 1.1 control-use-cert: no uses less cpu, by using no encryption over the unix socket. 22 Novenber 2016: Ralph - Make access-control-tag-data RDATA absolute. This makes the RDATA origin consistent between local-data and access-control-tag-data. - Fix NSEC ENT wildcard check. Matching wildcard does not have to be a subdomain of the NSEC owner. - QNAME minimisation uses QTYPE=A, therefore always check cache for this type in harden-below-nxdomain functionality. - Added unit test for QNAME minimisation + harden below nxdomain synergy. 22 November 2016: Wouter - iana portlist update. - Fix unit tests for DS hash processing for fake-dsa test option. - patch from Dag-Erling Smorgrav that removes code that relies on sbrk(). 21 November 2016: Wouter - Fix #1158: reference RFC 8020 "NXDOMAIN: There Really Is Nothing Underneath" for the harden-below-nxdomain option. 10 November 2016: Ralph - Fix #1155: test status code of unbound-control in 04-checkconf, not the status code from the tee command. 4 November 2016: Ralph - Added stub-ssl-upstream and forward-ssl-upstream options. 4 November 2016: Wouter - configure detects ssl security level API function in the autoconf manner. Every function on its own, so that other libraries (eg. LibreSSL) can develop their API without hindrance. - Fix #1154: segfault when reading config with duplicate zones. - Note that for harden-below-nxdomain the nxdomain must be secure, this means nsec3 with optout is insufficient. 3 November 2016: Ralph - Set OpenSSL security level to 0 when using aNULL ciphers. 3 November 2016: Wouter - .gitattributes line for githubs code language display. - log-identity: config option to set sys log identity, patch from "Robin H. Johnson" 2 November 2016: Wouter - iana portlist update. 31 October 2016: Wouter - Fix failure to build on arm64 with no sbrk. - iana portlist update. 28 October 2016: Wouter - Patch for server.num.zero_ttl stats for count of expired replies, from Pavel Odintsov. 26 October 2016: Wouter - Fix unit tests for openssl 1.1, with no DSA, by faking DSA, enabled with the undocumented switch 'fake-dsa'. It logs a warning. 25 October 2016: Wouter - Fix #1134: unbound-control set_option -- val-override-date: -1 works immediately to ignore datetime, or back to 0 to enable it again. The -- is to ignore the '-1' as an option flag. 24 October 2016: Wouter - serve-expired config option: serve expired responses with TTL 0. - g.root-servers.net has AAAA address. 21 October 2016: Wouter - Ported tests for local_cname unit test to testbound framework. 20 October 2016: Wouter - suppress compile warning in lex files. - init lzt variable, for older gcc compiler warnings. - fix --enable-dsa to work, instead of copying ecdsa enable. - Fix DNSSEC validation of query type ANY with DNAME answers. - Fixup query_info local_alias init. 19 October 2016: Wouter - Fix #1130: whitespace in example.conf.in more consistent. 18 October 2016: Wouter - Patch that resolves CNAMEs entered in local-data conf statements that point to data on the internet, from Jinmei Tatuya (Infoblox). - Removed patch comments from acllist.c and msgencode.c - Added documentation doc/CNAME-basedRedirectionDesignNotes.pdf, from Jinmei Tatuya (Infoblox). - Fix #1125: unbound could reuse an answer packet incorrectly for clients with different EDNS parameters, from Jinmei Tatuya. - Fix #1118: libunbound.pc sets strange Libs, Libs.private values. - Added Requires line to libunbound.pc - Please doxygen by modifying mesh.h 17 October 2016: Wouter - Re-fix #839 from view commit overwrite. - Fixup const void cast warning. 12 October 2016: Ralph - Free view config elements. 11 October 2016: Ralph - Added qname-minimisation-strict config option. - iana portlist update. - fix memoryleak logfile when in debug mode. 5 October 2016: Ralph - Added views functionality. - Fix #1117: spelling errors, from Robert Edmonds. 30 September 2016: Wouter - Fix Nits for 1.5.10 reported by Dag-Erling Smorgrav. 29 September 2016: Wouter - Fix #838: 1.5.10 cannot be built on Solaris, undefined PATH_MAX. - Fix #839: Memory grows unexpectedly with large RPZ files. - Fix #840: infinite loop in unbound_munin_ plugin on unowned lockfile. - Fix #841: big local-zone's make it consume large amounts of memory. 27 September 2016: Wouter - tag for 1.5.10 release - trunk contains 1.5.11 in development. - Fix dnstap relaying "random" messages instead of resolver/forwarder responses, from Nikolay Edigaryev. - Fix #836: unbound could echo back EDNS options in an error response. 20 September 2016: Wouter - iana portlist update. - Fix #835: fix --disable-dsa with nettle verify. - tag for 1.5.10rc1 release. 15 September 2016: Wouter - Fix 883: error for duplicate local zone entry. - Test for openssl init_crypto and init_ssl functions. 15 September 2016: Ralph - fix potential memory leak in daemon/remote.c and nullpointer dereference in validator/autotrust. - iana portlist update. 13 September 2016: Wouter - Silenced flex-generated sign-unsigned warning print with gcc diagnostic pragma. - Fix for new splint on FreeBSD. Fix cast for sockaddr_un.sun_len. 9 September 2016: Wouter - Fix #831: workaround for spurious fread_chk warning against petal.c 5 September 2016: Ralph - Take configured minimum TTL into consideration when reducing TTL to original TTL from RRSIG. 5 September 2016: Wouter - Fix #829: doc of sldns_wire2str_rdata_buf() return value has an off-by-one typo, from Jinmei Tatuya (Infoblox). - Fix incomplete prototypes reported by Dag-Erling Smørgrav. - Fix #828: missing type in access-control-tag-action redirect results in NXDOMAIN. 2 September 2016: Wouter - Fix compile with openssl 1.1.0 with api=1.1.0. 1 September 2016: Wouter - RFC 7958 is now out, updated docs for unbound-anchor. - Fix for compile without warnings with openssl 1.1.0. - Fix #826: Fix refuse_non_local could result in a broken response. - iana portlist update. 29 August 2016: Wouter - Fix #777: OpenSSL 1.1.0 compatibility, patch from Sebastian A. Siewior. - Add default root hints for IPv6 E.ROOT-SERVERS.NET, 2001:500:a8::e. 25 August 2016: Ralph - Clarify local-zone-override entry in unbound.conf.5 25 August 2016: Wouter - 64bit build option for makedist windows compile, -w64. 24 August 2016: Ralph - Fix #820: set sldns_str2wire_rr_buf() dual meaning len parameter in each iteration in find_tag_datas(). - unbound.conf.5 entries for define-tag, access-control-tag, access-control-tag-action, access-control-tag-data, local-zone-tag, and local-zone-override. 23 August 2016: Wouter - Fix #804: unbound stops responding after outage. Fixes queries that attempt to wait for an empty list of subqueries. - Fix #804: lower num_target_queries for iterator also for failed lookups. 8 August 2016: Wouter - Note that OPENPGPKEY type is RFC 7929. 4 August 2016: Wouter - Fix #807: workaround for possible some "unused" function parameters in test code, from Jinmei Tatuya. 3 August 2016: Wouter - use sendmsg instead of sendto for TFO. 28 July 2016: Wouter - Fix #806: wrong comment removed. 26 July 2016: Wouter - nicer ratelimit-below-domain explanation. 22 July 2016: Wouter - Fix #801: missing error condition handling in daemon_create_workers(). - Fix #802: workaround for function parameters that are "unused" without log_assert. - Fix #803: confusing (and incorrect) code comment in daemon_cleanup(). 20 July 2016: Wouter - Fix typo in unbound.conf. 18 July 2016: Wouter - Fix #798: Client-side TCP fast open fails (Linux). 14 July 2016: Wouter - TCP Fast open patch from Sara Dickinson. - Fixed unbound.doxygen for 1.8.11. 7 July 2016: Wouter - access-control-tag-data implemented. verbose(4) prints tag debug. 5 July 2016: Wouter - Fix dynamic link of anchor-update.exe on windows. - Fix detect of mingw for MXE package build. - Fixes for 64bit windows compile. - Fix #788 for nettle 3.0: Failed to build with Nettle >= 3.0 and --with-libunbound-only --with-nettle. 4 July 2016: Wouter - For #787: prefer-ip6 option for unbound.conf prefers to send upstream queries to ipv6 servers. - Fix #787: outgoing-interface netblock/64 ipv6 option to use linux freebind to use 64bits of entropy for every query with random local part. 30 June 2016: Wouter - Document always_transparent, always_refuse, always_nxdomain types. 29 June 2016: Wouter - Fix static compile on windows missing gdi32. 28 June 2016: Wouter - Create a pkg-config file for libunbound in contrib. 27 June 2016: Wouter - Fix #784: Build configure assumess that having getpwnam means there is endpwent function available. - Updated repository with newer flex and bison output. 24 June 2016: Ralph - Possibility to specify local-zone type for an acl/tag pair - Possibility to specify (override) local-zone type for a source address block 16 June 2016: Ralph - Decrease dp attempts at each QNAME minimisation iteration 16 June 2016: Wouter - Fix tcp timeouts in tv.usec. 15 June 2016: Wouter - TCP_TIMEOUT is specified in milliseconds. - If more than half of tcp connections are in use, a shorter timeout is used (200 msec, vs 2 minutes) to pressure tcp for new connects. 14 June 2016: Ralph - QNAME minimisation unit test for dropped QTYPE=A queries. 14 June 2016: Wouter - Fix 775: unbound-host and unbound-anchor crash on windows, ignore null delete for wsaevent. - Fix spelling in freebind option man page text. - Fix windows link of ssl with crypt32. - Fix 779: Union casting is non-portable. - Fix 780: MAP_ANON not defined in HP-UX 11.31. - Fix 781: prealloc() is an HP-UX system library call. 13 June 2016: Ralph - Use QTYPE=A for QNAME minimisation. - Keep track of number of time-outs when performing QNAME minimisation. Stop minimising when number of time-outs for a QNAME/QTYPE pair is more than three. 13 June 2016: Wouter - Fix #778: unbound 1.5.9: -h segfault (null deref). - Fix directory: fix for unbound-checkconf, it restores cwd. 10 June 2016: Wouter - And delete service.conf.shipped on uninstall. - In unbound.conf directory: dir immediately changes to that directory, so that include: file below that is relative to that directory. With chroot, make the directory an absolute path inside chroot. - keep debug symbols in windows build. - do not delete service.conf on windows uninstall. - document directory immediate fix and allow EXECUTABLE syntax in it on windows. 9 June 2016: Wouter - Trunk is called 1.5.10 (with previous fixes already in there to 2 june). - Revert fix for NetworkService account on windows due to breakage it causes. - Fix that windows install will not overwrite existing service.conf file (and ignore gui config choices if it exists). 7 June 2016: Ralph - Lookup localzones by taglist from acl. - Possibility to lookup local_zone, regardless the taglist. - Added local_zone/taglist/acl unit test. 7 June 2016: Wouter - Fix #773: Non-standard Python location build failure with pyunbound. - Improve threadsafety for openssl 0.9.8 ecdsa dnssec signatures. 6 June 2016: Wouter - Better help text from -h (from Ray Griffith). - access-control-tag config directive. - local-zone-override config directive. - access-control-tag-action and access-control-tag-data config directives. - free acl-tags, acltag-action and acltag-data config lists during initialisation to free up memory for more entries. 3 June 2016: Wouter - Fix to not ignore return value of chown() in daemon startup. 2 June 2016: Wouter - Fix libubound for edns optlist feature. - Fix distinction between free and CRYPTO_free in dsa and ecdsa alloc. - Fix #752: retry resource temporarily unavailable on control pipe. - un-document localzone tags. - tag for release 1.5.9rc1. And this also became release 1.5.9. - Fix (for 1.5.10): Fix unbound-anchor.exe file location defaults to Program Files with (x86) appended. - re-documented localzone tags in example.conf. 31 May 2016: Wouter - Fix windows service to be created run with limited rights, as a network service account, from Mario Turschmann. - compat strsep implementation. - generic edns option parse and store code. - and also generic edns options for upstream messages (and replies). after parse use edns_opt_find(edns.opt_list, LDNS_EDNS_NSID), to insert use edns_opt_append(edns, region, code, len, bindata) on the opt_list passed to send_query, or in edns_opt_inplace_reply. 30 May 2016: Wouter - Fix time in case answer comes from cache in ub_resolve_event(). - Attempted fix for #765: _unboundmodule missing for python3. 27 May 2016: Wouter - Fix #770: Small subgroup attack on DH used in unix pipe on localhost if unbound control uses a unix local named pipe. - Document write permission to directory of trust anchor needed. - Fix #768: Unbound Service Sometimes Can Not Shutdown Completely, WER Report Shown Up. Close handle before closing WSA. 26 May 2016: Wouter - Updated patch from Charles Walker. 24 May 2016: Wouter - disable-dnssec-lame-check config option from Charles Walker. - remove memory leak from lame-check patch. - iana portlist update. 23 May 2016: Wouter - Fix #767: Reference to an expired Internet-Draft in harden-below-nxdomain documentation. 20 May 2016: Ralph - No QNAME minimisation fall-back for NXDOMAIN answers from DNSSEC signed zones. - iana portlist update. 19 May 2016: Wouter - Fix #766: dns64 should synthesize results on timeout/errors. 18 May 2016: Wouter - Fix #761: DNSSEC LAME false positive resolving nic.club. 17 May 2016: Wouter - trunk updated with output of flex 2.6.0. 6 May 2016: Wouter - Fix memory leak in out-of-memory conditions of local zone add. 29 April 2016: Wouter - Fix sldns with static checking fixes copied from getdns. 28 April 2016: Wouter - Fix #759: 0x20 capsforid no longer checks type PTR, for compatibility with cisco dns guard. This lowers false positives. 18 April 2016: Wouter - Fix some malformed responses to edns queries get fallback to nonedns. 15 April 2016: Wouter - cachedb module event handling design. 14 April 2016: Wouter - cachedb module framework (empty). - iana portlist update. 12 April 2016: Wouter - Fix #753: document dump_requestlist is for first thread. 24 March 2016: Wouter - Document permit-small-holddown for 5011 debug. - Fix #749: unbound-checkconf gets SIGSEGV when use against a malformatted conf file. 23 March 2016: Wouter - OpenSSL 1.1.0 portability, --disable-dsa configure option. 21 March 2016: Wouter - Fix compile of getentropy_linux for SLES11 servicepack 4. - Fix dnstap-log-resolver-response-messages, from Nikolay Edigaryev. - Fix test for openssl to use HMAC_Update for 1.1.0. - acx_nlnetlabs.m4 to v33, with HMAC_Update. - acx_nlnetlabs.m4 to v34, with -ldl -pthread test for libcrypto. - ERR_remove_state deprecated since openssl 1.0.0. - OPENSSL_config is deprecated, removing. 18 March 2016: Ralph - Validate QNAME minimised NXDOMAIN responses. - If QNAME minimisation is enabled, do cache lookup for QTYPE NS in harden-below-nxdomain. 17 March 2016: Ralph - Limit number of QNAME minimisation iterations. 17 March 2016: Wouter - Fix #746: Fix unbound sets CD bit on all forwards. If no trust anchors, it'll not set CD bit when forwarding to another server. If a trust anchor, no CD bit on the first attempt to a forwarder, but CD bit thereafter on repeated attempts to get DNSSEC. - iana portlist update. 16 March 2016: Wouter - Fix ip-transparent for ipv6 on FreeBSD, thanks to Nick Hibma. - Fix ip-transparent for tcp on freebsd. 15 March 2016: Wouter - ip_freebind: yesno option in unbound.conf sets IP_FREEBIND for binding to an IP address while the interface or address is down. 14 March 2016: Wouter - Fix warnings in ifdef corner case, older or unknown libevent. - Fix compile for ub_event code with older libev. 11 March 2016: Wouter - Remove warning about unused parameter in event_pluggable.c. - Fix libev usage of dispatch return value. - No side effects in tolower() call, in case it is a macro. - For test put free in pluggable api in parenthesis. 10 March 2016: Wouter - Fixup backend2str for libev. 09 March 2016: Willem - User defined pluggable event API for libunbound - Fixup of compile fix for pluggable event API from P.Y. Adi Prasaja. 09 March 2016: Wouter - Updated configure and ltmain.sh. - Updated L root IPv6 address. 07 March 2016: Wouter - Fix #747: assert in outnet_serviced_query_stop. - iana ports fetched via https. - iana portlist update. 03 March 2016: Wouter - configure tests for the weak attribute support by the compiler. 02 March 2016: Wouter - 1.5.8 release tag - trunk contains 1.5.9 in development. - iana portlist update. - Fix #745: unbound.py - idn2dname throws UnicodeError when idnname contains trailing dot. 24 February 2016: Wouter - Fix OpenBSD asynclook lock free that gets used later (fix test code). - Fix that NSEC3 negative cache is used when there is no salt. 23 February 2016: Wouter - ub_ctx_set_stub() function for libunbound to config stub zones. - sorted ubsyms.def file with exported libunbound functions. 19 February 2016: Wouter - Print understandable debug log when unusable DS record is seen. - load gost algorithm if digest is seen before key algorithm. - iana portlist update. 17 February 2016: Wouter - Fix that "make install" fails due to "text file busy" error. 16 February 2016: Wouter - Set IPPROTO_IP6 for ipv6 sockets otherwise invalid argument error. 15 February 2016: Wouter - ip-transparent option for FreeBSD with IP_BINDANY socket option. - wait for sendto to drain socket buffers when they are full. 9 February 2016: Wouter - Test for type OPENPGPKEY. - insecure-lan-zones: yesno config option, patch from Dag-Erling Smørgrav. 8 February 2016: Wouter - Fix patch typo in prevuous commit for 734 from Adi Prasaja. - RR Type CSYNC support RFC 7477, in debug printout and config input. - RR Type OPENPGPKEY support (draft-ietf-dane-openpgpkey-07). 29 January 2016: Wouter - Neater cmdline_verbose increment patch from Edgar Pettijohn. 27 January 2016: Wouter - Made netbsd sendmsg test nonfatal, in case of false positives. - Fix #741: log message for dnstap socket connection is more clear. 26 January 2016: Wouter - Fix #734: chown the pidfile if it resides inside the chroot. - Use arc4random instead of random in tests (because it is available, possibly as compat, anyway). - Fix cmsg alignment for argument to sendmsg on NetBSD. - Fix that unbound complains about unimplemented IP_PKTINFO for sendmsg on NetBSD (for interface-automatic). 25 January 2016: Wouter - Fix #738: Swig should not be invoked with CPPFLAGS. 19 January 2016: Wouter - Squelch 'cannot assign requested address' log messages unless verbosity is high, it was spammed after network down. 14 January 2016: Wouter - Fix to simplify empty string checking from Michael McConville. - iana portlist update. 12 January 2016: Wouter - Fix #734: Do not log an error when the PID file cannot be chown'ed. Patch from Simon Deziel. 11 January 2016: Wouter - Fix test if -pthreads unused to use better grep for portability. 06 January 2016: Wouter - Fix mingw crosscompile for recent mingw. - Update aclocal, autoconf output with new versions (1.15, 2.4.6). 05 January 2016: Wouter - #731: tcp-mss, outgoing-tcp-mss options for unbound.conf, patch from Daisuke Higashi. - Support RFC7686: handle ".onion" Special-Use Domain. It is blocked by default, and can be unblocked with "nodefault" localzone config. 04 January 2016: Wouter - Define DEFAULT_SOURCE together with BSD_SOURCE when that is defined, for Linux glibc 2.20. - Fixup contrib/aaaa-filter-iterator.patch for moved contents in the source code, so it applies cleanly again. Removed unused variable warnings. 15 December 2015: Ralph - Fix #729: omit use of escape sequences in echo since they are not portable (unbound-control-setup). 11 December 2015: Wouter - remove NULL-checks before free, patch from Michael McConville. - updated ax_pthread.m4 to version 21 with clang support, this removes a warning from compilation. - OSX portability, detect if sbrk is deprecated. - OSX clang, stop -pthread unused during link stage warnings. - OSX clang new flto check. 10 December 2015: Wouter - 1.5.7 release - trunk has 1.5.8 in development. 8 December 2015: Wouter - Fixup 724 for unbound-control. 7 December 2015: Ralph - Do not minimise forwarded requests. 4 December 2015: Wouter - Removed unneeded whitespace from example.conf. 3 December 2015: Ralph - (after rc1 tag) - Committed fix to qname minimisation and unit test case for it. 3 December 2015: Wouter - iana portlist update. - 1.5.7rc1 prerelease tag. 2 December 2015: Wouter - Fixup 724: Fix PCA prompt for unbound-service-install.exe. re-enable stdout printout. - For 724: Add Changelog to windows binary dist. 1 December 2015: Ralph - Qname minimisation review fixes 1 December 2015: Wouter - Fixup 724 fix for fname_after_chroot() calls. - Remove stdout printout for unbound-service-install.exe - .gitignore for git users. 30 November 2015: Ralph - Implemented qname minimisation 30 November 2015: Wouter - Fix for #724: conf syntax to read files from run dir (on Windows). 25 November 2015: Wouter - Fix for #720, fix unbound-control-setup windows batch file. 24 November 2015: Wouter - Fix #720: add windows scripts to zip bundle. - iana portlist update. 20 November 2015: Wouter - Added assert on rrset cache correctness. - Fix that malformed EDNS query gets a response without malformed EDNS. 18 November 2015: Wouter - newer acx_nlnetlabs.m4. - spelling fixes from Igor Sobrado Delgado. 17 November 2015: Wouter - Fix #594. libunbound: optionally use libnettle for crypto. Contributed by Luca Bruno. Added --with-nettle for use with --with-libunbound-only. - refactor nsec3 hash implementation to be more library-portable. - iana portlist update. - Fixup DER encoded DSA signatures for libnettle. 16 November 2015: Wouter - Fix for lenient accept of reverse order DNAME and CNAME. 6 November 2015: Wouter - Change example.conf: ftp.internic.net to https://www.internic.net 5 November 2015: Wouter - ACX_SSL_CHECKS no longer adds -ldl needlessly. 3 November 2015: Wouter - Fix #718: Fix unbound-control-setup with support for env without HEREDOC bash support. 29 October 2015: Wouter - patch from Doug Hogan for SSL_OP_NO_SSLvx options. - Fix #716: nodata proof with empty non-terminals and wildcards. 28 October 2015: Wouter - Fix checklock testcode for linux threads on exit. 27 October 2015: Wouter - isblank() compat implementation. - detect libexpat without xml_StopParser function. - portability fixes. - portability, replace snprintf if return value broken. 23 October 2015: Wouter - Fix #714: Document config to block private-address for IPv4 mapped IPv6 addresses. 22 October 2015: Wouter - Fix #712: unbound-anchor appears to not fsync root.key. 20 October 2015: Wouter - 1.5.6 release. - trunk tracks development of 1.5.7. 15 October 2015: Wouter - Fix segfault in the dns64 module in the formaterror error path. - Fix sldns_wire2str_rdata_scan for malformed RRs. - tag for 1.5.6rc1 release. 14 October 2015: Wouter - ANY responses include DNAME records if present, as per Evan Hunt's remark in dnsop. - Fix manpage to suggest using SIGTERM to terminate the server. 9 October 2015: Wouter - Default for ssl-port is port 853, the temporary port assignment for secure domain name system traffic. If you used to rely on the older default of port 443, you have to put a clause in unbound.conf for that. The new value is likely going to be the standardised port number for this traffic. - iana portlist update. 6 October 2015: Wouter - 1.5.5 release. - trunk tracks the development of 1.5.6. 28 September 2015: Wouter - MAX_TARGET_COUNT increased to 64, to fix up sporadic resolution failures. - tag for 1.5.5rc1 release. - makedist.sh: pgp sig echo commands. 25 September 2015: Wouter - Fix unbound-control flush that does not succeed in removing data. 22 September 2015: Wouter - Fix config globbed include chroot treatment, this fixes reload of globs (patch from Dag-Erling Smørgrav). - iana portlist update. - Fix #702: New IPs for for h.root-servers.net. - Remove confusion comment from canonical_compare() function. - Fix #705: ub_ctx_set_fwd() return value mishandled on windows. - testbound selftest also works in non-debug mode. - Fix minor error in unbound.conf.5.in - Fix unbound.conf(5) access-control description for precedence and default. 31 August 2015: Wouter - changed windows setup compression to be more transparent. 28 August 2015: Wouter - Fix #697: Get PY_MAJOR_VERSION failure at configure for python 2.4 to 2.6. - Feature #699: --enable-pie option to that builds PIE binary. - Feature #700: --enable-relro-now option that enables full read-only relocation. 24 August 2015: Wouter - Fix deadlock for local data add and zone add when unbound-control list_local_data printout is interrupted. - iana portlist update. - Change default of harden-algo-downgrade to off. This is lenient for algorithm rollover. 13 August 2015: Wouter - 5011 implementation does not insist on all algorithms, when harden-algo-downgrade is turned off. - Reap the child process that libunbound spawns. 11 August 2015: Wouter - Fix #694: configure script does not detect LibreSSL 2.2.2 4 August 2015: Wouter - Document that local-zone nodefault matches exactly and transparent can be used to release a subzone. 3 August 2015: Wouter - Document in the manual more text about configuring locally served zones. - Fix 5011 anchor update timer after reload. - Fix mktime in unbound-anchor not using UTC. 30 July 2015: Wouter - please afl-gcc (llvm) for uninitialised variable warning. - Added permit-small-holddown config to debug fast 5011 rollover. 24 July 2015: Wouter - Fix #690: Reload fails when so-reuseport is yes after changing num-threads. - iana portlist update. 21 July 2015: Wouter - Fix configure to detect SSL_CTX_set_ecdh_auto. - iana portlist update. 20 July 2015: Wouter - Enable ECDHE for servers. Where available, use SSL_CTX_set_ecdh_auto() for TLS-wrapped server configurations to enable ECDHE. Otherwise, manually offer curve p256. Client connections should automatically use ECDHE when available. (thanks Daniel Kahn Gillmor) 18 July 2015: Willem - Allow certificate chain files to allow for intermediate certificates. (thanks Daniel Kahn Gillmor) 13 July 2015: Wouter - makedist produces sha1 and sha256 files for created binaries too. 9 July 2015: Wouter - 1.5.4 release tag - trunk has 1.5.5 in development. - Fix #681: Setting forwarders with unbound-control forward implicitly turns on forward-first. 29 June 2015: Wouter - iana portlist update. - Fix alloc with log for allocation size checks. 26 June 2015: Wouter - Fix #677 Fix DNAME responses from cache that failed internal chain test. - iana portlist update. 22 June 2015: Wouter - Fix #677 Fix CNAME corresponding to a DNAME was checked incorrectly and was therefore always synthesized (thanks to Valentin Dietrich). 4 June 2015: Wouter - RFC 7553 RR type URI support, is now enabled by default. 2 June 2015: Wouter - Fix #674: Do not free pointers given by getenv. 29 May 2015: Wouter - Fix that unparseable error responses are ratelimited. - SOA negative TTL is capped at minimumttl in its rdata section. - cache-max-negative-ttl config option, default 3600. 26 May 2015: Wouter - Document that ratelimit works with unbound-control set_option. 21 May 2015: Wouter - iana portlist update. - documentation proposes ratelimit of 1000 (closer to what upstream servers expect from us). 20 May 2015: Wouter - DLV is going to be decommissioned. Advice to stop using it, and put text in the example configuration and man page to that effect. 10 May 2015: Wouter - Change syntax of particular validator error to be easier for machine parse, swap rrset and ip adres info so it looks like: validation failure : signature crypto failed from 2001:DB8:7:bba4::53 for <*.example.nl. NSEC IN> 1 May 2015: Wouter - caps-whitelist in unbound.conf allows whitelist of loadbalancers that cannot work with caps-for-id or its fallback. 30 April 2015: Wouter - Unit test for type ANY synthesis. 22 April 2015: Wouter - Removed contrib/unbound_unixsock.diff, because it has been integrated, use control-interface: /path in unbound.conf. - iana portlist update. 17 April 2015: Wouter - Synthesize ANY responses from cache. Does not search exhaustively, but MX,A,AAAA,SOA,NS also CNAME. - Fix leaked dns64prefix configuration string. 16 April 2015: Wouter - Add local-zone type inform_deny, that logs query and drops answer. - Ratelimit does not apply to prefetched queries, and ratelimit-factor is default 10. Repeated normal queries get resolved and with prefetch stay in the cache. - Fix bug#664: libunbound python3 related fixes (from Tomas Hozza) Use print_function also for Python2. libunbound examples: produce sorted output. libunbound-Python: libldns is not used anymore. Fix issue with Python 3 mapping of FILE* using file_py3.i from ldns. 10 April 2015: Wouter - unbound-control ratelimit_list lists high rate domains. - ratelimit feature, ratelimit: 100, or some sensible qps, can be used to turn it on. It ratelimits recursion effort per zone. For particular names you can configure exceptions in unbound.conf. - Fix that get_option for cache-sizes does not print double newline. - Fix#663: ssl handshake fails when using unix socket because dh size is too small. 8 April 2015: Wouter - Fix crash in dnstap: Do not try to log TCP responses after timeout. 7 April 2015: Wouter - Libunbound skips dos-line-endings from etc/hosts. - Unbound exits with a fatal error when the auto-trust-anchor-file fails to be writable. This is seconds after startup. You can load a readonly auto-trust-anchor-file with trust-anchor-file. The file has to be writable to notice the trust anchor change, without it, a trust anchor change will be unnoticed and the system will then become inoperable. - unbound-control list_insecure command shows the negative trust anchors currently configured, patch from Jelte Jansen. 2 April 2015: Wouter - Fix #660: Fix interface-automatic broken in the presence of asymmetric routing. 26 March 2015: Wouter - remote.c probedelay line is easier to read. - rename ldns subdirectory to sldns to avoid name collision. 25 March 2015: Wouter - Fix #657: libunbound(3) recommends deprecated CRYPTO_set_id_callback. - If unknown trust anchor algorithm, and libressl is used, error message encourages upgrade of the libressl package. 23 March 2015: Wouter - Fix segfault on user not found at startup (from Maciej Soltysiak). 20 March 2015: Wouter - Fixed to add integer overflow checks on allocation (defense in depth). 19 March 2015: Wouter - Add ip-transparent config option for bind to non-local addresses. 17 March 2015: Wouter - Use reallocarray for integer overflow protection, patch submitted by Loganaden Velvindron. 16 March 2015: Wouter - Fixup compile on cygwin, more portable openssl thread id. 12 March 2015: Wouter - Updated default keylength in unbound-control-setup to 3k. 10 March 2015: Wouter - Fix lintian warning in unbound-checkconf man page (from Andreas Schulze). - print svnroot when building windows dist. - iana portlist update. - Fix warning on sign compare in getentropy_linux. 9 March 2015: Wouter - Fix #644: harden-algo-downgrade option, if turned off, fixes the reported excessive validation failure when multiple algorithms are present. It allows the weakest algorithm to validate the zone. - iana portlist update. 5 March 2015: Wouter - contrib/unbound_smf22.tar.gz: Solaris SMF installation/removal scripts. Contributed by Yuri Voinov. - Document that incoming-num-tcp increase is good for large servers. - stats reports tcp usage, of incoming-num-tcp buffers. 4 March 2015: Wouter - Patch from Brad Smith that syncs compat/getentropy_linux with OpenBSD's version (2015-03-04). - 0x20 fallback improved: servfail responses do not count as missing comparisons (except if all responses are errors), inability to find nameservers does not fail equality comparisons, many nameservers does not try to compare more than max-sent-count, parse failures start 0x20 fallback procedure. - store caps_response with best response in case downgrade response happens to be the last one. - Document windows 8 tests. 3 March 2015: Wouter - tag 1.5.3rc1 [ This became 1.5.3 on 10 March, trunk is 1.5.4 in development ] 2 March 2015: Wouter - iana portlist update. 20 February 2015: Wouter - Use the getrandom syscall introduced in Linux 3.17 (from Heiner Kallweit). - Fix #645 Portability to Solaris 10, use AF_LOCAL. - Fix #646 Portability to Solaris, -lrt for getentropy_solaris. - Fix #647 crash in 1.5.2 because pwd.db no longer accessible after reload. 19 February 2015: Wouter - 1.5.2 release tag. - svn trunk contains 1.5.3 under development. 13 February 2015: Wouter - Fix #643: doc/example.conf.in: unnecessary whitespace. 12 February 2015: Wouter - tag 1.5.2rc1 11 February 2015: Wouter - iana portlist update. 10 February 2015: Wouter - Fix scrubber with harden-glue turned off to reject NS (and other not-address) records. 9 February 2015: Wouter - Fix validation failure in case upstream forwarder (ISC BIND) does not have the same trust anchors and decides to insert unsigned NS record in authority section. 2 February 2015: Wouter - infra-cache-min-rtt patch from Florian Riehm, for expected long uplink roundtrip times. 30 January 2015: Wouter - Fix 0x20 capsforid fallback to omit gratuitous NS and additional section changes. - Portability fix for Solaris ('sun' is not usable for a variable). 29 January 2015: Wouter - Fix pyunbound byte string representation for python3. 26 January 2015: Wouter - Fix unintended use of gcc extension for incomplete enum types, compile with pedantic c99 compliance (from Daniel Dickman). 23 January 2015: Wouter - windows port fixes, no AF_LOCAL, no chown, no chmod(grp). 16 January 2015: Wouter - unit test for local unix connection. Documentation and log_addr does not inspect port for AF_LOCAL. - unbound-checkconf -f prints chroot with pidfile path. 13 January 2015: Wouter - iana portlist update. 12 January 2015: Wouter - Cast sun_len sizeof to socklen_t. - Fix pyunbound ord call, portable for python 2 and 3. 7 January 2015: Wouter - Fix warnings in pythonmod changes. 6 January 2015: Wouter - iana portlist update. - patch for remote control over local sockets, from Dag-Erling Smorgrav, Ilya Bakulin. Use control-interface: /path/sock and control-use-cert: no. - Fixup that patch and uid lookup (only for daemon). - coded the default of control-use-cert, to yes. 5 January 2015: Wouter - getauxval test for ppc64 linux compatibility. - make strip works for unbound-host and unbound-anchor. - patch from Stephane Lapie that adds to the python API, that exposes struct delegpt, and adds the find_delegation function. - print query name when max target count is exceeded. - patch from Stuart Henderson that fixes DESTDIR in unbound-control-setup for installs where config is not in the prefix location. - Fix #634: fix fail to start on Linux LTS 3.14.X, ignores missing IP_MTU_DISCOVER OMIT option (fix from Remi Gacogne). - Updated contrib warmup.cmd/sh to support two modes - load from pre-defined list of domains or (with filename as argument) load from user-specified list of domains, and updated contrib unbound_cache.sh/cmd to support loading/save/reload cache to/from default path or (with secondary argument) arbitrary path/filename, from Yuri Voinov. - Patch from Philip Paeps to contrib/unbound_munin_ that uses type ABSOLUTE. Allows munin.conf: [idleserver.example.net] unbound_munin_hits.graph_period minute 9 December 2014: Wouter - svn trunk has 1.5.2 in development. - config.guess and config.sub update from libtoolize. - local-zone: example.com inform makes unbound log a message with client IP for queries in that zone. Eg. for finding infected hosts. 8 December 2014: Wouter - Fix CVE-2014-8602: denial of service by making resolver chase endless series of delegations. 1 December 2014: Wouter - Fix bug#632: unbound fails to build on AArch64, protects getentropy compat code from calling sysctl if it is has been removed. 29 November 2014: Wouter - Add include to getentropy_linux.c, hopefully fixing debian build. 28 November 2014: Wouter - Fix makefile for build from noexec source tree. 26 November 2014: Wouter - Fix libunbound undefined symbol errors for main. Referencing main does not seem to be possible for libunbound. 24 November 2014: Wouter - Fix log at high verbosity and memory allocation failure. - iana portlist update. 21 November 2014: Wouter - Fix crash on multiple thread random usage on systems without arc4random. 20 November 2014: Wouter - fix compat/getentropy_win.c check if CryptGenRandom works and no immediate exit on windows. 19 November 2014: Wouter - Fix cdflag dns64 processing. 18 November 2014: Wouter - Fix that CD flag disables DNS64 processing, returning the DNSSEC signed AAAA denial. - iana portlist update. 17 November 2014: Wouter - Fix #627: SSL_CTX_load_verify_locations return code not properly checked. 14 November 2014: Wouter - parser with bison 2.7 13 November 2014: Wouter - Patch from Stephane Lapie for ASAHI Net that implements aaaa-filter, added to contrib/aaaa-filter-iterator.patch. 12 November 2014: Wouter - trunk has 1.5.1 in development. - Patch from Robert Edmonds to build pyunbound python module differently. No versioninfo, with -shared and without $(LIBS). - Patch from Robert Edmonds fixes hyphens in unbound-anchor man page. - Removed 'increased limit open files' log message that is written to console. It is only written on verbosity 4 and higher. This keeps system bootup console cleaner. - Patch from James Raftery, always print stats for rcodes 0..5. 11 November 2014: Wouter - iana portlist update. - Fix bug where forward or stub addresses with same address but different port number were not tried. - version number in svn trunk is 1.5.0 - tag 1.5.0rc1 - review fix from Ralph. 7 November 2014: Wouter - dnstap fixes by Robert Edmonds: dnstap/dnstap.m4: cosmetic fixes dnstap/: Remove compiled protoc-c output files dnstap/dnstap.m4: Error out if required libraries are not found dnstap: Fix ProtobufCBufferSimple usage that is incorrect as of protobuf-c 1.0.0 dnstap/: Adapt to API changes in latest libfstrm (>= 0.2.0) 4 November 2014: Wouter - Add ub_ctx_add_ta_autr function to add a RFC5011 automatically tracked trust anchor to libunbound. - Redefine internal minievent symbols to unique symbols that helps linking on platforms where the linker leaks names across modules. 27 October 2014: Wouter - Disabled use of SSLv3 in remote-control and ssl-upstream. - iana portlist update. 16 October 2014: Wouter - Documented dns64 configuration in unbound.conf man page. 13 October 2014: Wouter - Fix #617: in ldns in unbound, lowercase WKS services. - Fix ctype invocation casts. 10 October 2014: Wouter - Fix unbound-checkconf check for module config with dns64 module. - Fix unbound capsforid fallback, it ignores TTLs in comparison. 6 October 2014: Wouter - Fix #614: man page variable substitution bug. 6 October 2014: Willem - Whitespaces after $ORIGIN are not part of the origin dname (ldns). - $TTL's value starts at position 5 (ldns). 1 October 2014: Wouter - fix #613: Allow tab ws in var length last rdfs (in ldns str2wire). 29 September 2014: Wouter - Fix #612: create service with service.conf in present directory and auto load it. - Fix for mingw compile openssl ranlib. 25 September 2014: Wouter - updated configure and aclocal with newer autoconf 1.13. 22 September 2014: Wouter - Fix swig and python examples for Python 3.x. - Fix for mingw compile with openssl-1.0.1i. 19 September 2014: Wouter - improve python configuration detection to build on Fedora 22. 18 September 2014: Wouter - patches to also build with Python 3.x (from Pavel Simerda). 16 September 2014: Wouter - Fix tcp timer waiting list removal code. - iana portlist update. - Updated the TCP_BACLOG from 5 to 256, so that the tcp accept queue is longer and more tcp connections can be handled. 15 September 2014: Wouter - Fix unit test for CDS typecode. 5 September 2014: Wouter - type CDS and CDNSKEY types in sldns. 25 August 2014: Wouter - Fixup checklock code for log lock and its mutual initialization dependency. - iana portlist update. - Removed necessity for pkg-config from the dnstap.m4, new are the --with-libfstrm and --with-protobuf-c configure options. 19 August 2014: Wouter - Update unbound manpage with more explanation (from Florian Obser). 18 August 2014: Wouter - Fix #603: unbound-checkconf -o

¡k" Û6 þ3Á4À£†®cobI¿™«¨l €ÙÁüçë†Íl‚ç¸ÀÑ3Ûç**ã‹`]™¿ \Ee¯Ø  uŸúWaØÜ¬>×XWQÙQ¿g/ãÀ’2^xwš™Ùø~¡†áé·º– ' @iXútÕåÈÉö_Ü{c){+€°k6zqÏô…뽦;õ0 ~p†øù…­ÁãYf½ä’ô·7¾Öâá—RØaqÅÃSôô7Vîöý²Å8yY¢ ¯KÕTxÏÕÛÈDg§ªûo8”1gmwÈx~9«Y@ð¹ïÈxqÅGžN¿úP6Mi ŸÉF c˜ “'¸–m:…xûíl@pçù“þ;îø’U•ff“6¼`͵ˆñf³KÒmX—>fq…P³óü¼Y] ×5¯Îè)“âS²Ü´b$'üB¶Jÿ<}Á'š·yª6[„pióü{þ›>­h»ï¶VSqYbmx}lËO TÈ:µº{óï;š>­¨#4½Í¨žôÉË–xzüi“tÕkÁ6ÈŒúSÓ—~zÐLN¼‰ ¸°?ai¡kÑ)Ý·CðÀÑL Y+¾®lѰȵhòæ½^jÌFaœWÆ iw¤¿µnŸ¼öŠÁHN|&GÔôrHN¸ÍÛöú½®9« ³ðKgÚ´5Ü¿ ã÷yi鯾÷?³mëòò¤F,÷£{Z€†uŸ\ö|…rüðÝlÀËïš¼l¦Ù¢É½pØÁ#¤œ¹s\ó×íÅÎ}m¾ÙÈ –þôu-ÞàAn³ö°ÛÀsú±¹>€”¤&huÅÿ\‹ÖOÏÐÔgDûÀï3EwÍYùZk£Q;Á¯óÀ˜¯U 9ñsÈý宩ô«ˆô3 š~Ò_’\¯-ÿwé¢AJ:Ë}ú§Èhøï„%*dœã €(‘öüâÿÃÜüchžÚ&¯Û§ŸYHJpàÚb×üµ›]ÿ|¾9 RúÏÌîâZ²áˆ¸êʇçàå»T=)µÝ¸£ÍלU/¤&ü± RŽøv§Íú¨7]ý ’’YîÓE³ÛuQæø&m‚ÇVücçN]ÚnêfqàSIˆƒh•9ɵpݾÔÛû7cXLÀ‘6mÅ>qƒûžÒ£ 0MತFJß;Óò§ßðˆ¦w LQßZ½Wd4mÈ£>Ãqó5sÒ _ÿÀ ÐþÿuëÔ…Ék÷)TN@üúš‰iùÓ~ËçœÿÕwÞ©ÒXöSÈI@´Î~·iÚÝ¡.ûûL©ÿšñ'‘ÞäVøXöS˜$ÄCy¶ïB@ˆíÛCŠ®EPønf /Q/庴gçÞ’Úy¤`„H긹÷Šú)œó“¦Hm8s÷kƒ$ T©›’<&çýd‘þxyú©y¯¶b„@ãë:gŠæiõØíÈ2l*D‹´v €P´uïηðË8ÈRLðù2B2å’7°Ç‘å¦ÍSѰ3‚ý‚5pò¼?Y¯c*°µ{ê&@°•}+{Yo VW^Æz­%<ìmdI»`€ˆDÄ "1ˆˆ@D "b€ˆDÄ "1ˆˆ@D "b€ˆDÄ "1ˆˆ@D "b€ˆ@D "b€ˆDÄ "1ˆˆ@D "b€ˆDÄ "1ˆˆ@D "b€ˆDÄ "1ˆˆ@D "b€ˆDý «<§¹Ûˆbµ¨òTp·q @D "b€ˆDÄ "1ˆˆ@D "bD3ÄÏwŒMÎ ë(ñó•±Éd[Bùd†® Ùì ²†•axÎOØì ²Cצ†ái—°å~o„éyG³é~ãÃTuœ0•ÍÏ ðùÈеµa|þAÜ Ÿ;Ãù䆮íðw€BïnCׇûEº6@)xZ@!3ÆÐµyz=×ø†!À àoèZ?+½ C×*4„1(H:ºöO+¾0C׎¨`w€jV€faºà§:!`ºÖÀ#Üe ºt'üÝе,C×¾ˆ”mèÚµLã.dPõœYH›dèZ-C×^‰Ä0tí¸¡kk¥Ü­ º0+Ô5tíñhØC×>7t-þk¼Ü½ :¿½~mèÚ­†®ŠÂí[dèšÀPîjãÐ×妆®}­ièš ü,Ð|7¡%ØØaõ†¡kÄÚFºv@[WQÙUHeW`K>‹ƒÿ{A°Éе4Ø%±à€¿ºv½¡k»Øgƒ`;€gÙ €hsæ´ÞpC×êº6ŸMrÞðºÖ@€Ul@´X Þе!lŠ ‚݆®µpK b¢ â"`ð|àC×6³).*>PÇUTö8€çØ"¬"Eü—ï^ÉÁ_#A0@xY1Àº³| ØmPŠwo2t->R/ßµpœ0t­“}Á§wˆÝ‡ WN¬Ânƒ²ulã–@¯¸ªefï-Š×¶lËÓŸ³qjNË̾3åâu÷:æ­„ïºæðþã€Mõ‡/±}Ë àDl#fÖ78U ¨ ¤45Ÿ¯bgffßiºë`C]šLí‰'[¶ìcJékÜM»àè:êüµ@œƒÄu«)PÞ(‚ý‘ç lÛ8í?œÀì°cËH3Sëß› V}ZÖÀß·Ì|ÂÒ7Jþÿζ.êü5°u›±é 1ŽÆ)@çùqˆ¢Ø&¿íïñNgç;ЋÀÝ|c3µþý„°u,Û2ò=6äÏ üÁõÏ\ÓôÜt!A,Nœ†mô[W¬†¯çõ’¯ É  &cR…øê¨Ý'A}n‘À_Pq/A`6–Ò»B˰6+;¯.ôGú/IYU.¥Ùæ‚çNiøòÔÏCya‰zÆÉ+€K&På2~>”Ue@|œá©ÚÕƒ?¤4¯*fez!))ëñµk:ðP +{P)Í‘RšÎs /«ßÆv”K!V•Á¼O‡¼óFÿÚ ±¨vg²© >†ÒáiˆO?ƒŒ³×ØCKiv;v¬´BËzê±ØøƒÛhYƒ¶Iiޤ³ÆØ4¡L]ñØ8à³=@‚“}šÀ…ÎóÀú2ˆgß<æ·V™kº¦”6Àœ”•=h ¢(íJЇ¯?$^¹Ð4}¿ûîšI Ò“Tâë£C_ÌÍ€ìÝÞ¿Pè3ÙÏYœ‡ªGN}Æ#§_Hæ‘R"Õ4Í5YÙƒßϽj”=Ú›9;gðxÀ<%¥ùÛà6°?P¤Ã”} <8˜¶ °ó˜Ç8ß@œüdבÀžƒaê$òf¯÷xUVö±Ñ9ð‡vÉÊrDJÙ#p¤á2ÿJM,] Ù¥rÕf § c{ %àtÀ\ò10e>„Ã8­6!{gç y—–ÌŒüŸ5à!¥™ö].PQ9n° ¢G; y*PYňÀi‡,ûæ¿^Ž„pX®ò®ÈÙ9yOâÏ¥%ÃJ"­™µ¬áEñÌ|wÖôÿ’÷¿Ý¹§fï17^¥×ßE‰ÉËŠck   ¢ÞAãá{òYàäiÿÜß’)20‹sÜÃå¸ kEJ3縇=­(žJ@Þaéê°C~Rï}OÂ7oEL^V;`S᛺U÷õƒÜ¶ p8"è»le[Àw<Ç=¬ÀÚ?ÿ®÷°}€ ¾3­±8U9c)<†Ü¸5¦Ö¢{ 8­ç{o ¼ã§B@HˆCd~‹µ †ä¸‡õDç’â¼…:â70 ×ÁRõ~uB@…<| UùÏAɹ¶^!Ö<VÉnƒùÕT>4ž1/ù;åE\`fg¦—rAŽ{XqŽ» ©ŽúoØ àº¨è7Ìí»PùÐ@xÆ¿ê¿òSDïuÅÑWø|¨,såˆø„‹»|7¦Ú€ÜãΟ8:•ô†xà0,ê"gŠ‡Þ«àý`ìoû_nƒ<]Á ÀÒâœðÌY„“m»À·~3àt@"êWvïª<9îü'ü³@wà´ÍqçïP€h_CLU“¦âT×~0¿Ø Øí KÎOœÄÉŽÝQùú<ÿ›vs§tžÉqçÿ§é㈟’ãÎ_ÈEÇL«J6;Ì}å8Õ­?ª¦Î†p:Vbî?€ëyè!bqðŸQ+rÜùܹ)5õ îÜ‚—pCL¶ªð'¨•€ª7æád¿¼¨©">Ìò8Ñ¥; ª ³®pÈ[0Å[ ^ÂÀïéÎ-8àÁo…˜f³ÁW¼'{ ‚HL`„wôûp¢{ˆ8g ôÏwÄ:;N»8æÎ-x,0 Åü6îÜ‚/ŒÈýþ¨QàÛ¶§ÿ=Á 9 }ÜéÀ‰Qž¶$˜äÎ-ø ?sªÎ›ŸäÎ-xÀÇÒÙt?²•o-†gý§ €“@Õʵðm,æÇB_¸†Ö¹s ÞuçÖþáà/œˆcncS]غ€HˆÇ©QÿñW ‘:£‰È¶wØqjìÀéà´´ú~à¨;·p<€x@mÎó«y’€XÅ5€ €ôì`o#+®$&§îgû+qy,8 Ào~3óS@ÐùÖ³³‘Õ¿jK”¯¾*¼ € KJjù‘ä€Èbå¿b|$¾òˆ €Ý»go¶Ù³Ó‘µ*€Zs!¢*Ž'~Í3Yd)¶Ó¾ÿ D¾þzõKŠâ`Ï£ðÿÒ‡#¥ĆW¤¾p›-¹#»…µð€ª&(/ï9@ˆ<øÁtUßà?%ÈEA ÏÜ?>¾AD‚RD_Rwíµ/^¯(ö#RòÚ` y퇣Î{÷.ÚÈ“wÞÉ1ŽË³Eåû(”£6{Ò¸òò£#}K"þ¢zŸ¯rÿå)îzB¨‡Á (lö¤1|Ø+:&1Q¤~ƒ[V›¾Ê„𣫀(ªÿkÁ… !ÿß„ðÿ%ð¥Á*ÿßÏÞ7ðS8ûgB(þŠÿ¾g¾JàŠü{î6<¦øVó‹À»›ÏýíÜï"pñ#»êGvŸ?³cÅÙ~¼â•?yD<_‰|î{ÿ–gn+ÏÜä{¿k=Gš™Û™;HH˜gKÊ3§ƒÍÀýÏÝ^J_àf>ÿ+fàu™Ç?óSBJ¸}àoÒ¸ý™ÿï…*TÅùÛýû—¿-c&ªÞVw üý_Úí—µнâÌ@ º´b?pÔ·%MNkx¿M(ö÷£iû¢î}µvGÒÒåïÅ«j\ž€Âtis}5nM|BmÿWËÛ°ù1ßWû–FUŠêCdËÌ^õŽÝú¢”¾;8àà§>Êa»½v§Ý_Î^Íc$&jdWz­ªêÈrÀ×Dõì@g0¾ ªqƒ÷ìž;"ÆFL|´Ž±kzÙWû7UÕÄ¿ ¡rR@ç 1U³vílg¬ þ˜ €³ëöä™{÷,PÅ9xýP¬PÇÖ¸¸z­÷ì~³Ý¶­ÏTÅV Ĩ+[öi|úôž×¥ôýÚ¿6À)@¬M D•ªÄwݵkê´ØÀ—žÑåÓ¬ü¯”¾ÚB0¢;ü«*öá»vMëý?æ?^WUk¿4f$«jÜã*xÞ0ºçùŠêx'..¥?+€¸öúqñ‡¬Ÿ(a>È º*uMï°cÇäÙÓ?©eË>M«ª-p@2"/—ò EØ{íÜ9e{6 Zš]ñÈ­0½KØÏ„ À;!Ô ;wNéÉžÌ5€‹[PâÞýüó—ŠbÀ¬Œ N­ØWÙl‰ü¬jL¶û©Ë+O3EJó¯gU@PG·íÛÇÏgek} ¥Ïwz €æg ì (¶üíÛ' ce„Ä•-zÜ-…ù&¤d„%ÎÌóm¯Ûìuºn)ͯ`¯ä@è’SµÍûlûD!„ZÈÖCû µTU¯Þ¾}|~Va••óTSOÕ‰—ä­¬‚]à¤PÔ®Û¶ŽÉžÇ°-³ßu>é{uÏž*dÔX¡>³më˜'ÙÓ8°hkÚ6lßöŸzŠb{ÙZƒÍ*”·ívg=~V‘Q d µ’ÒíÇŽîÈîþ#:+€êTþÕ}±SUmm)}š—ï2"t} {°Ë4«fhíÿø!0~>L!”e[FMbbDIU0ðf)å;€tœ[ dœû]úϨ ñBÙ–Q²Çp º’Vˆ¢­e£œB(ÿdkœú±¢Øšrð³ˆzÙ9ÓMóäDÄv ˆrE––Œàå» €X[z¥”Þ·„@V, †n)Á ©±OÝ ˆùþý „xÝëMì¸më@~ü×Huá–ÒáC£6—%ˆÍB¨™¥%Ã;pð³ óÈqk(¥ïe·GQpÝJK fp3èdç uX  i$À¹OåcJŠóûq2袂 ï^!0óü»Ëª ˆ…Rš”–œà^´.›Àêëb6`› xÿ O¼äí€Ò¹¤8o ÷+ªÑõ‚tÀ|À¬*Ñ»¤8o2÷€‚Ãnò¯ˆ$k^.)Î{ˆ{&òð4`dæöÊ’âaµ<æ²M8øYPتÂÚ€ù €n!¬öâï%ÅCÿË=À kAKÀœàªsï6¬Ñ;*)Î{š-Î KA~[!Ä‚ŸžÞ]L`VIñÐûØÂ\ kgú’âÍCUýkè7Ð8øYP„qçÔPøõ ¯6U¼yè›lIE~üÀ]€ÈPï<79 `/ x¦xóÐýl5Ee&ˆûÖŸÌâÍCްeˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÂïÿÊ@®ÀñÀSIEND®B`‚unbound-1.13.1/winrc/w_inst.h0000644000175000017500000000556414010434640015507 0ustar wouterwouter/* * winrc/w_inst.h - install and remove functions * * Copyright (c) 2009, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * Contains install and remove functions that manipulate the * windows services API and windows registry. */ #ifndef WINRC_W_INST_H #define WINRC_W_INST_H /** * Install service in servicecontrolmanager, setup registry * @param out: debug output printed here (errors). or NULL. * @param rename: if nonNULL this executable is not unbound.exe but this name. */ void wsvc_install(FILE* out, const char* rename); /** * Remove installed service from servicecontrolmanager, registry entries * @param out: debug output printed here (errors). or NULL. */ void wsvc_remove(FILE* out); /** * Start the service from servicecontrolmanager, tells OS to start daemon. * @param out: debug output printed here (errors). or NULL. */ void wsvc_rc_start(FILE* out); /** * Stop the service from servicecontrolmanager, tells OS to stop daemon. * @param out: debug output printed here (errors). or NULL. */ void wsvc_rc_stop(FILE* out); /** * Convert windows GetLastError() value to a neat string. * @param str: destination buffer * @param len: length of dest buffer * @param fixed: fixed text to prepend to string. * @param err: the GetLastError() value. */ void wsvc_err2str(char* str, size_t len, const char* fixed, DWORD err); #endif /* WINRC_W_INST_H */ unbound-1.13.1/smallapp/0000755000175000017500000000000014010434640014510 5ustar wouterwouterunbound-1.13.1/smallapp/unbound-control.c0000644000175000017500000007655414010434640020025 0ustar wouterwouter/* * checkconf/unbound-control.c - remote control utility for unbound. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * The remote control utility contacts the unbound server over ssl and * sends the command, receives the answer, and displays the result * from the commandline. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #include "util/log.h" #include "util/config_file.h" #include "util/locks.h" #include "util/net_help.h" #include "util/shm_side/shm_main.h" #include "daemon/stats.h" #include "sldns/wire2str.h" #include "sldns/pkthdr.h" #include "services/rpz.h" #ifdef HAVE_SYS_IPC_H #include "sys/ipc.h" #endif #ifdef HAVE_SYS_SHM_H #include "sys/shm.h" #endif #ifdef HAVE_SYS_UN_H #include #endif #ifdef HAVE_TARGETCONDITIONALS_H #include #endif static void usage(void) ATTR_NORETURN; static void ssl_err(const char* s) ATTR_NORETURN; static void ssl_path_err(const char* s, const char *path) ATTR_NORETURN; /** timeout to wait for connection over stream, in msec */ #define UNBOUND_CONTROL_CONNECT_TIMEOUT 5000 /** Give unbound-control usage, and exit (1). */ static void usage(void) { printf("Usage: unbound-control [options] command\n"); printf(" Remote control utility for unbound server.\n"); printf("Options:\n"); printf(" -c file config file, default is %s\n", CONFIGFILE); printf(" -s ip[@port] server address, if omitted config is used.\n"); printf(" -q quiet (don't print anything if it works ok).\n"); printf(" -h show this usage help.\n"); printf("Commands:\n"); printf(" start start server; runs unbound(8)\n"); printf(" stop stops the server\n"); printf(" reload reloads the server\n"); printf(" (this flushes data, stats, requestlist)\n"); printf(" stats print statistics\n"); printf(" stats_noreset peek at statistics\n"); #ifdef HAVE_SHMGET printf(" stats_shm print statistics using shm\n"); #endif printf(" status display status of server\n"); printf(" verbosity change logging detail\n"); printf(" log_reopen close and open the logfile\n"); printf(" local_zone add new local zone\n"); printf(" local_zone_remove remove local zone and its contents\n"); printf(" local_data add local data, for example\n"); printf(" local_data www.example.com A 192.0.2.1\n"); printf(" local_data_remove remove local RR data from name\n"); printf(" local_zones, local_zones_remove, local_datas, local_datas_remove\n"); printf(" same, but read list from stdin\n"); printf(" (one entry per line).\n"); printf(" dump_cache print cache to stdout\n"); printf(" load_cache load cache from stdin\n"); printf(" lookup print nameservers for name\n"); printf(" flush flushes common types for name from cache\n"); printf(" types: A, AAAA, MX, PTR, NS,\n"); printf(" SOA, CNAME, DNAME, SRV, NAPTR\n"); printf(" flush_type flush name, type from cache\n"); printf(" flush_zone flush everything at or under name\n"); printf(" from rr and dnssec caches\n"); printf(" flush_bogus flush all bogus data\n"); printf(" flush_negative flush all negative data\n"); printf(" flush_stats flush statistics, make zero\n"); printf(" flush_requestlist drop queries that are worked on\n"); printf(" dump_requestlist show what is worked on by first thread\n"); printf(" flush_infra [all | ip] remove ping, edns for one IP or all\n"); printf(" dump_infra show ping and edns entries\n"); printf(" set_option opt: val set option to value, no reload\n"); printf(" get_option opt get option value\n"); printf(" list_stubs list stub-zones and root hints in use\n"); printf(" list_forwards list forward-zones in use\n"); printf(" list_insecure list domain-insecure zones\n"); printf(" list_local_zones list local-zones in use\n"); printf(" list_local_data list local-data RRs in use\n"); printf(" insecure_add zone add domain-insecure zone\n"); printf(" insecure_remove zone remove domain-insecure zone\n"); printf(" forward_add [+i] zone addr.. add forward-zone with servers\n"); printf(" forward_remove [+i] zone remove forward zone\n"); printf(" stub_add [+ip] zone addr.. add stub-zone with servers\n"); printf(" stub_remove [+i] zone remove stub zone\n"); printf(" +i also do dnssec insecure point\n"); printf(" +p set stub to use priming\n"); printf(" forward [off | addr ...] without arg show forward setup\n"); printf(" or off to turn off root forwarding\n"); printf(" or give list of ip addresses\n"); printf(" ratelimit_list [+a] list ratelimited domains\n"); printf(" ip_ratelimit_list [+a] list ratelimited ip addresses\n"); printf(" +a list all, also not ratelimited\n"); printf(" list_auth_zones list auth zones\n"); printf(" auth_zone_reload zone reload auth zone from zonefile\n"); printf(" auth_zone_transfer zone transfer auth zone from master\n"); printf(" view_list_local_zones view list local-zones in view\n"); printf(" view_list_local_data view list local-data RRs in view\n"); printf(" view_local_zone view name type add local-zone in view\n"); printf(" view_local_zone_remove view name remove local-zone in view\n"); printf(" view_local_data view RR... add local-data in view\n"); printf(" view_local_datas view add list of local-data to view\n"); printf(" one entry per line read from stdin\n"); printf(" view_local_data_remove view name remove local-data in view\n"); printf(" view_local_datas_remove view remove list of local-data from view\n"); printf(" one entry per line read from stdin\n"); printf(" rpz_enable zone Enable the RPZ zone if it had previously\n"); printf(" been disabled\n"); printf(" rpz_disable zone Disable the RPZ zone\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); exit(1); } #ifdef HAVE_SHMGET /** what to put on statistics lines between var and value, ": " or "=" */ #define SQ "=" /** if true, inhibits a lot of =0 lines from the stats output */ static const int inhibit_zero = 1; /** divide sum of timers to get average */ static void timeval_divide(struct timeval* avg, const struct timeval* sum, long long d) { #ifndef S_SPLINT_S size_t leftover; if(d == 0) { avg->tv_sec = 0; avg->tv_usec = 0; return; } avg->tv_sec = sum->tv_sec / d; avg->tv_usec = sum->tv_usec / d; /* handle fraction from seconds divide */ leftover = sum->tv_sec - avg->tv_sec*d; avg->tv_usec += (leftover*1000000)/d; #endif } /** print unsigned long stats value */ #define PR_UL_NM(str, var) printf("%s."str SQ"%lu\n", nm, (unsigned long)(var)); #define PR_UL(str, var) printf(str SQ"%lu\n", (unsigned long)(var)); #define PR_UL_SUB(str, nm, var) printf(str".%s"SQ"%lu\n", nm, (unsigned long)(var)); #define PR_TIMEVAL(str, var) printf(str SQ ARG_LL "d.%6.6d\n", \ (long long)var.tv_sec, (int)var.tv_usec); #define PR_STATSTIME(str, var) printf(str SQ ARG_LL "d.%6.6d\n", \ (long long)var ## _sec, (int)var ## _usec); #define PR_LL(str, var) printf(str SQ ARG_LL"d\n", (long long)(var)); /** print stat block */ static void pr_stats(const char* nm, struct ub_stats_info* s) { struct timeval sumwait, avg; PR_UL_NM("num.queries", s->svr.num_queries); PR_UL_NM("num.queries_ip_ratelimited", s->svr.num_queries_ip_ratelimited); PR_UL_NM("num.cachehits", s->svr.num_queries - s->svr.num_queries_missed_cache); PR_UL_NM("num.cachemiss", s->svr.num_queries_missed_cache); PR_UL_NM("num.prefetch", s->svr.num_queries_prefetch); PR_UL_NM("num.expired", s->svr.ans_expired); PR_UL_NM("num.recursivereplies", s->mesh_replies_sent); #ifdef USE_DNSCRYPT PR_UL_NM("num.dnscrypt.crypted", s->svr.num_query_dnscrypt_crypted); PR_UL_NM("num.dnscrypt.cert", s->svr.num_query_dnscrypt_cert); PR_UL_NM("num.dnscrypt.cleartext", s->svr.num_query_dnscrypt_cleartext); PR_UL_NM("num.dnscrypt.malformed", s->svr.num_query_dnscrypt_crypted_malformed); #endif /* USE_DNSCRYPT */ printf("%s.requestlist.avg"SQ"%g\n", nm, (s->svr.num_queries_missed_cache+s->svr.num_queries_prefetch)? (double)s->svr.sum_query_list_size/ (double)(s->svr.num_queries_missed_cache+ s->svr.num_queries_prefetch) : 0.0); PR_UL_NM("requestlist.max", s->svr.max_query_list_size); PR_UL_NM("requestlist.overwritten", s->mesh_jostled); PR_UL_NM("requestlist.exceeded", s->mesh_dropped); PR_UL_NM("requestlist.current.all", s->mesh_num_states); PR_UL_NM("requestlist.current.user", s->mesh_num_reply_states); #ifndef S_SPLINT_S sumwait.tv_sec = s->mesh_replies_sum_wait_sec; sumwait.tv_usec = s->mesh_replies_sum_wait_usec; #endif timeval_divide(&avg, &sumwait, s->mesh_replies_sent); printf("%s.", nm); PR_TIMEVAL("recursion.time.avg", avg); printf("%s.recursion.time.median"SQ"%g\n", nm, s->mesh_time_median); PR_UL_NM("tcpusage", s->svr.tcp_accept_usage); } /** print uptime */ static void print_uptime(struct ub_shm_stat_info* shm_stat) { PR_STATSTIME("time.now", shm_stat->time.now); PR_STATSTIME("time.up", shm_stat->time.up); PR_STATSTIME("time.elapsed", shm_stat->time.elapsed); } /** print memory usage */ static void print_mem(struct ub_shm_stat_info* shm_stat, struct ub_stats_info* s) { PR_LL("mem.cache.rrset", shm_stat->mem.rrset); PR_LL("mem.cache.message", shm_stat->mem.msg); PR_LL("mem.mod.iterator", shm_stat->mem.iter); PR_LL("mem.mod.validator", shm_stat->mem.val); PR_LL("mem.mod.respip", shm_stat->mem.respip); #ifdef CLIENT_SUBNET PR_LL("mem.mod.subnet", shm_stat->mem.subnet); #endif #ifdef USE_IPSECMOD PR_LL("mem.mod.ipsecmod", shm_stat->mem.ipsecmod); #endif #ifdef WITH_DYNLIBMODULE PR_LL("mem.mod.dynlib", shm_stat->mem.dynlib); #endif #ifdef USE_DNSCRYPT PR_LL("mem.cache.dnscrypt_shared_secret", shm_stat->mem.dnscrypt_shared_secret); PR_LL("mem.cache.dnscrypt_nonce", shm_stat->mem.dnscrypt_nonce); #endif PR_LL("mem.streamwait", s->svr.mem_stream_wait); PR_LL("mem.http.query_buffer", s->svr.mem_http2_query_buffer); PR_LL("mem.http.response_buffer", s->svr.mem_http2_response_buffer); } /** print histogram */ static void print_hist(struct ub_stats_info* s) { struct timehist* hist; size_t i; hist = timehist_setup(); if(!hist) fatal_exit("out of memory"); timehist_import(hist, s->svr.hist, NUM_BUCKETS_HIST); for(i=0; inum; i++) { printf("histogram.%6.6d.%6.6d.to.%6.6d.%6.6d=%lu\n", (int)hist->buckets[i].lower.tv_sec, (int)hist->buckets[i].lower.tv_usec, (int)hist->buckets[i].upper.tv_sec, (int)hist->buckets[i].upper.tv_usec, (unsigned long)hist->buckets[i].count); } timehist_delete(hist); } /** print extended */ static void print_extended(struct ub_stats_info* s) { int i; char nm[16]; /* TYPE */ for(i=0; isvr.qtype[i] == 0) continue; sldns_wire2str_type_buf((uint16_t)i, nm, sizeof(nm)); PR_UL_SUB("num.query.type", nm, s->svr.qtype[i]); } if(!inhibit_zero || s->svr.qtype_big) { PR_UL("num.query.type.other", s->svr.qtype_big); } /* CLASS */ for(i=0; isvr.qclass[i] == 0) continue; sldns_wire2str_class_buf((uint16_t)i, nm, sizeof(nm)); PR_UL_SUB("num.query.class", nm, s->svr.qclass[i]); } if(!inhibit_zero || s->svr.qclass_big) { PR_UL("num.query.class.other", s->svr.qclass_big); } /* OPCODE */ for(i=0; isvr.qopcode[i] == 0) continue; sldns_wire2str_opcode_buf(i, nm, sizeof(nm)); PR_UL_SUB("num.query.opcode", nm, s->svr.qopcode[i]); } /* transport */ PR_UL("num.query.tcp", s->svr.qtcp); PR_UL("num.query.tcpout", s->svr.qtcp_outgoing); PR_UL("num.query.tls", s->svr.qtls); PR_UL("num.query.tls_resume", s->svr.qtls_resume); PR_UL("num.query.ipv6", s->svr.qipv6); PR_UL("num.query.https", s->svr.qhttps); /* flags */ PR_UL("num.query.flags.QR", s->svr.qbit_QR); PR_UL("num.query.flags.AA", s->svr.qbit_AA); PR_UL("num.query.flags.TC", s->svr.qbit_TC); PR_UL("num.query.flags.RD", s->svr.qbit_RD); PR_UL("num.query.flags.RA", s->svr.qbit_RA); PR_UL("num.query.flags.Z", s->svr.qbit_Z); PR_UL("num.query.flags.AD", s->svr.qbit_AD); PR_UL("num.query.flags.CD", s->svr.qbit_CD); PR_UL("num.query.edns.present", s->svr.qEDNS); PR_UL("num.query.edns.DO", s->svr.qEDNS_DO); /* RCODE */ for(i=0; i LDNS_RCODE_REFUSED && s->svr.ans_rcode[i] == 0) continue; sldns_wire2str_rcode_buf(i, nm, sizeof(nm)); PR_UL_SUB("num.answer.rcode", nm, s->svr.ans_rcode[i]); } if(!inhibit_zero || s->svr.ans_rcode_nodata) { PR_UL("num.answer.rcode.nodata", s->svr.ans_rcode_nodata); } /* iteration */ PR_UL("num.query.ratelimited", s->svr.queries_ratelimited); /* validation */ PR_UL("num.answer.secure", s->svr.ans_secure); PR_UL("num.answer.bogus", s->svr.ans_bogus); PR_UL("num.rrset.bogus", s->svr.rrset_bogus); PR_UL("num.query.aggressive.NOERROR", s->svr.num_neg_cache_noerror); PR_UL("num.query.aggressive.NXDOMAIN", s->svr.num_neg_cache_nxdomain); /* threat detection */ PR_UL("unwanted.queries", s->svr.unwanted_queries); PR_UL("unwanted.replies", s->svr.unwanted_replies); /* cache counts */ PR_UL("msg.cache.count", s->svr.msg_cache_count); PR_UL("rrset.cache.count", s->svr.rrset_cache_count); PR_UL("infra.cache.count", s->svr.infra_cache_count); PR_UL("key.cache.count", s->svr.key_cache_count); /* applied RPZ actions */ for(i=0; isvr.rpz_action[i] == 0) continue; PR_UL_SUB("num.rpz.action", rpz_action_to_string(i), s->svr.rpz_action[i]); } #ifdef USE_DNSCRYPT PR_UL("dnscrypt_shared_secret.cache.count", s->svr.shared_secret_cache_count); PR_UL("num.query.dnscrypt.shared_secret.cachemiss", s->svr.num_query_dnscrypt_secret_missed_cache); PR_UL("dnscrypt_nonce.cache.count", s->svr.nonce_cache_count); PR_UL("num.query.dnscrypt.replay", s->svr.num_query_dnscrypt_replay); #endif /* USE_DNSCRYPT */ PR_UL("num.query.authzone.up", s->svr.num_query_authzone_up); PR_UL("num.query.authzone.down", s->svr.num_query_authzone_down); #ifdef CLIENT_SUBNET PR_UL("num.query.subnet", s->svr.num_query_subnet); PR_UL("num.query.subnet_cache", s->svr.num_query_subnet_cache); #endif } /** print statistics out of memory structures */ static void do_stats_shm(struct config_file* cfg, struct ub_stats_info* stats, struct ub_shm_stat_info* shm_stat) { int i; char nm[32]; for(i=0; inum_threads; i++) { snprintf(nm, sizeof(nm), "thread%d", i); pr_stats(nm, &stats[i+1]); } pr_stats("total", &stats[0]); print_uptime(shm_stat); if(cfg->stat_extended) { print_mem(shm_stat, &stats[0]); print_hist(stats); print_extended(stats); } } #endif /* HAVE_SHMGET */ /** print statistics from shm memory segment */ static void print_stats_shm(const char* cfgfile) { #ifdef HAVE_SHMGET struct config_file* cfg; struct ub_stats_info* stats; struct ub_shm_stat_info* shm_stat; int id_ctl, id_arr; /* read config */ if(!(cfg = config_create())) fatal_exit("out of memory"); if(!config_read(cfg, cfgfile, NULL)) fatal_exit("could not read config file"); /* get shm segments */ id_ctl = shmget(cfg->shm_key, sizeof(int), SHM_R); if(id_ctl == -1) { fatal_exit("shmget(%d): %s", cfg->shm_key, strerror(errno)); } id_arr = shmget(cfg->shm_key+1, sizeof(int), SHM_R); if(id_arr == -1) { fatal_exit("shmget(%d): %s", cfg->shm_key+1, strerror(errno)); } shm_stat = (struct ub_shm_stat_info*)shmat(id_ctl, NULL, SHM_RDONLY); if(shm_stat == (void*)-1) { fatal_exit("shmat(%d): %s", id_ctl, strerror(errno)); } stats = (struct ub_stats_info*)shmat(id_arr, NULL, SHM_RDONLY); if(stats == (void*)-1) { fatal_exit("shmat(%d): %s", id_arr, strerror(errno)); } /* print the stats */ do_stats_shm(cfg, stats, shm_stat); /* shutdown */ shmdt(shm_stat); shmdt(stats); config_delete(cfg); #else (void)cfgfile; #endif /* HAVE_SHMGET */ } /** exit with ssl error */ static void ssl_err(const char* s) { fprintf(stderr, "error: %s\n", s); ERR_print_errors_fp(stderr); exit(1); } /** exit with ssl error related to a file path */ static void ssl_path_err(const char* s, const char *path) { unsigned long err; err = ERR_peek_error(); if (ERR_GET_LIB(err) == ERR_LIB_SYS && (ERR_GET_FUNC(err) == SYS_F_FOPEN || ERR_GET_FUNC(err) == SYS_F_FREAD) ) { fprintf(stderr, "error: %s\n%s: %s\n", s, path, ERR_reason_error_string(err)); exit(1); } else { ssl_err(s); } } /** setup SSL context */ static SSL_CTX* setup_ctx(struct config_file* cfg) { char* s_cert=NULL, *c_key=NULL, *c_cert=NULL; SSL_CTX* ctx; if(!(options_remote_is_address(cfg) && cfg->control_use_cert)) return NULL; s_cert = fname_after_chroot(cfg->server_cert_file, cfg, 1); c_key = fname_after_chroot(cfg->control_key_file, cfg, 1); c_cert = fname_after_chroot(cfg->control_cert_file, cfg, 1); if(!s_cert || !c_key || !c_cert) fatal_exit("out of memory"); ctx = SSL_CTX_new(SSLv23_client_method()); if(!ctx) ssl_err("could not allocate SSL_CTX pointer"); #if SSL_OP_NO_SSLv2 != 0 if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2) != SSL_OP_NO_SSLv2) ssl_err("could not set SSL_OP_NO_SSLv2"); #endif if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) != SSL_OP_NO_SSLv3) ssl_err("could not set SSL_OP_NO_SSLv3"); #if defined(SSL_OP_NO_RENEGOTIATION) /* disable client renegotiation */ if((SSL_CTX_set_options(ctx, SSL_OP_NO_RENEGOTIATION) & SSL_OP_NO_RENEGOTIATION) != SSL_OP_NO_RENEGOTIATION) ssl_err("could not set SSL_OP_NO_RENEGOTIATION"); #endif if(!SSL_CTX_use_certificate_chain_file(ctx,c_cert)) ssl_path_err("Error setting up SSL_CTX client cert", c_cert); if (!SSL_CTX_use_PrivateKey_file(ctx,c_key,SSL_FILETYPE_PEM)) ssl_path_err("Error setting up SSL_CTX client key", c_key); if (!SSL_CTX_check_private_key(ctx)) ssl_err("Error setting up SSL_CTX client key"); if (SSL_CTX_load_verify_locations(ctx, s_cert, NULL) != 1) ssl_path_err("Error setting up SSL_CTX verify, server cert", s_cert); SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); free(s_cert); free(c_key); free(c_cert); return ctx; } /** check connect error */ static void checkconnecterr(int err, const char* svr, struct sockaddr_storage* addr, socklen_t addrlen, int statuscmd, int useport) { #ifndef USE_WINSOCK if(!useport) log_err("connect: %s for %s", strerror(err), svr); else log_err_addr("connect", strerror(err), addr, addrlen); if(err == ECONNREFUSED && statuscmd) { printf("unbound is stopped\n"); exit(3); } #else int wsaerr = err; if(!useport) log_err("connect: %s for %s", wsa_strerror(wsaerr), svr); else log_err_addr("connect", wsa_strerror(wsaerr), addr, addrlen); if(wsaerr == WSAECONNREFUSED && statuscmd) { printf("unbound is stopped\n"); exit(3); } #endif exit(1); } /** contact the server with TCP connect */ static int contact_server(const char* svr, struct config_file* cfg, int statuscmd) { struct sockaddr_storage addr; socklen_t addrlen; int addrfamily = 0, proto = IPPROTO_TCP; int fd, useport = 1; /* use svr or the first config entry */ if(!svr) { if(cfg->control_ifs.first) { svr = cfg->control_ifs.first->str; } else if(cfg->do_ip4) { svr = "127.0.0.1"; } else { svr = "::1"; } /* config 0 addr (everything), means ask localhost */ if(strcmp(svr, "0.0.0.0") == 0) svr = "127.0.0.1"; else if(strcmp(svr, "::0") == 0 || strcmp(svr, "0::0") == 0 || strcmp(svr, "0::") == 0 || strcmp(svr, "::") == 0) svr = "::1"; } if(strchr(svr, '@')) { if(!extstrtoaddr(svr, &addr, &addrlen)) fatal_exit("could not parse IP@port: %s", svr); #ifdef HAVE_SYS_UN_H } else if(svr[0] == '/') { struct sockaddr_un* usock = (struct sockaddr_un *) &addr; usock->sun_family = AF_LOCAL; #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN usock->sun_len = (unsigned)sizeof(usock); #endif (void)strlcpy(usock->sun_path, svr, sizeof(usock->sun_path)); addrlen = (socklen_t)sizeof(struct sockaddr_un); addrfamily = AF_LOCAL; useport = 0; proto = 0; #endif } else { if(!ipstrtoaddr(svr, cfg->control_port, &addr, &addrlen)) fatal_exit("could not parse IP: %s", svr); } if(addrfamily == 0) addrfamily = addr_is_ip6(&addr, addrlen)?PF_INET6:PF_INET; fd = socket(addrfamily, SOCK_STREAM, proto); if(fd == -1) { fatal_exit("socket: %s", sock_strerror(errno)); } fd_set_nonblock(fd); if(connect(fd, (struct sockaddr*)&addr, addrlen) < 0) { #ifndef USE_WINSOCK #ifdef EINPROGRESS if(errno != EINPROGRESS) { checkconnecterr(errno, svr, &addr, addrlen, statuscmd, useport); } #endif #else if(WSAGetLastError() != WSAEINPROGRESS && WSAGetLastError() != WSAEWOULDBLOCK) { checkconnecterr(WSAGetLastError(), svr, &addr, addrlen, statuscmd, useport); } #endif } while(1) { fd_set rset, wset, eset; struct timeval tv; FD_ZERO(&rset); FD_SET(FD_SET_T fd, &rset); FD_ZERO(&wset); FD_SET(FD_SET_T fd, &wset); FD_ZERO(&eset); FD_SET(FD_SET_T fd, &eset); tv.tv_sec = UNBOUND_CONTROL_CONNECT_TIMEOUT/1000; tv.tv_usec= (UNBOUND_CONTROL_CONNECT_TIMEOUT%1000)*1000; if(select(fd+1, &rset, &wset, &eset, &tv) == -1) { fatal_exit("select: %s", sock_strerror(errno)); } if(!FD_ISSET(fd, &rset) && !FD_ISSET(fd, &wset) && !FD_ISSET(fd, &eset)) { fatal_exit("timeout: could not connect to server"); } else { /* check nonblocking connect error */ int error = 0; socklen_t len = (socklen_t)sizeof(error); if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error, &len) < 0) { #ifndef USE_WINSOCK error = errno; /* on solaris errno is error */ #else error = WSAGetLastError(); #endif } if(error != 0) { #ifndef USE_WINSOCK #ifdef EINPROGRESS if(error == EINPROGRESS) continue; /* try again later */ #endif #ifdef EWOULDBLOCK if(error == EWOULDBLOCK) continue; /* try again later */ #endif #else if(error == WSAEINPROGRESS) continue; /* try again later */ if(error == WSAEWOULDBLOCK) continue; /* try again later */ #endif checkconnecterr(error, svr, &addr, addrlen, statuscmd, useport); } } break; } fd_set_block(fd); return fd; } /** setup SSL on the connection */ static SSL* setup_ssl(SSL_CTX* ctx, int fd) { SSL* ssl; X509* x; int r; if(!ctx) return NULL; ssl = SSL_new(ctx); if(!ssl) ssl_err("could not SSL_new"); SSL_set_connect_state(ssl); (void)SSL_set_mode(ssl, (long)SSL_MODE_AUTO_RETRY); if(!SSL_set_fd(ssl, fd)) ssl_err("could not SSL_set_fd"); while(1) { ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) break; r = SSL_get_error(ssl, r); if(r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) ssl_err("SSL handshake failed"); /* wants to be called again */ } /* check authenticity of server */ if(SSL_get_verify_result(ssl) != X509_V_OK) ssl_err("SSL verification failed"); x = SSL_get_peer_certificate(ssl); if(!x) ssl_err("Server presented no peer certificate"); X509_free(x); return ssl; } /** read from ssl or fd, fatalexit on error, 0 EOF, 1 success */ static int remote_read(SSL* ssl, int fd, char* buf, size_t len) { if(ssl) { int r; ERR_clear_error(); if((r = SSL_read(ssl, buf, (int)len-1)) <= 0) { if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) { /* EOF */ return 0; } ssl_err("could not SSL_read"); } buf[r] = 0; } else { ssize_t rr = recv(fd, buf, len-1, 0); if(rr <= 0) { if(rr == 0) { /* EOF */ return 0; } fatal_exit("could not recv: %s", sock_strerror(errno)); } buf[rr] = 0; } return 1; } /** write to ssl or fd, fatalexit on error */ static void remote_write(SSL* ssl, int fd, const char* buf, size_t len) { if(ssl) { if(SSL_write(ssl, buf, (int)len) <= 0) ssl_err("could not SSL_write"); } else { if(send(fd, buf, len, 0) < (ssize_t)len) { fatal_exit("could not send: %s", sock_strerror(errno)); } } } /** check args, to see if too many args. Because when a file is sent it * would wait for the terminal, and we can check for too many arguments, * eg. user put arguments on the commandline. */ static void check_args_for_listcmd(int argc, char* argv[]) { if(argc >= 1 && (strcmp(argv[0], "local_zones") == 0 || strcmp(argv[0], "local_zones_remove") == 0 || strcmp(argv[0], "local_datas") == 0 || strcmp(argv[0], "local_datas_remove") == 0) && argc >= 2) { fatal_exit("too many arguments for command '%s', " "content is piped in from stdin", argv[0]); } if(argc >= 1 && (strcmp(argv[0], "view_local_datas") == 0 || strcmp(argv[0], "view_local_datas_remove") == 0) && argc >= 3) { fatal_exit("too many arguments for command '%s', " "content is piped in from stdin", argv[0]); } } /** send stdin to server */ static void send_file(SSL* ssl, int fd, FILE* in, char* buf, size_t sz) { while(fgets(buf, (int)sz, in)) { remote_write(ssl, fd, buf, strlen(buf)); } } /** send end-of-file marker to server */ static void send_eof(SSL* ssl, int fd) { char e[] = {0x04, 0x0a}; remote_write(ssl, fd, e, sizeof(e)); } /** send command and display result */ static int go_cmd(SSL* ssl, int fd, int quiet, int argc, char* argv[]) { char pre[10]; const char* space=" "; const char* newline="\n"; int was_error = 0, first_line = 1; int i; char buf[1024]; snprintf(pre, sizeof(pre), "UBCT%d ", UNBOUND_CONTROL_VERSION); remote_write(ssl, fd, pre, strlen(pre)); for(i=0; i= 1 && (strcmp(argv[0], "local_zones") == 0 || strcmp(argv[0], "local_zones_remove") == 0 || strcmp(argv[0], "local_datas") == 0 || strcmp(argv[0], "view_local_datas") == 0 || strcmp(argv[0], "local_datas_remove") == 0 || strcmp(argv[0], "view_local_datas_remove") == 0)) { send_file(ssl, fd, stdin, buf, sizeof(buf)); send_eof(ssl, fd); } while(1) { if(remote_read(ssl, fd, buf, sizeof(buf)) == 0) { break; /* EOF */ } if(first_line && strncmp(buf, "error", 5) == 0) { printf("%s", buf); was_error = 1; } else if (!quiet) printf("%s", buf); first_line = 0; } return was_error; } /** go ahead and read config, contact server and perform command and display */ static int go(const char* cfgfile, char* svr, int quiet, int argc, char* argv[]) { struct config_file* cfg; int fd, ret; SSL_CTX* ctx; SSL* ssl; /* read config */ if(!(cfg = config_create())) fatal_exit("out of memory"); if(!config_read(cfg, cfgfile, NULL)) fatal_exit("could not read config file"); if(!cfg->remote_control_enable) log_warn("control-enable is 'no' in the config file."); #ifdef UB_ON_WINDOWS w_config_adjust_directory(cfg); #endif ctx = setup_ctx(cfg); /* contact server */ fd = contact_server(svr, cfg, argc>0&&strcmp(argv[0],"status")==0); ssl = setup_ssl(ctx, fd); /* send command */ ret = go_cmd(ssl, fd, quiet, argc, argv); if(ssl) SSL_free(ssl); sock_close(fd); if(ctx) SSL_CTX_free(ctx); config_delete(cfg); return ret; } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** Main routine for unbound-control */ int main(int argc, char* argv[]) { int c, ret; int quiet = 0; const char* cfgfile = CONFIGFILE; char* svr = NULL; #ifdef USE_WINSOCK int r; WSADATA wsa_data; #endif #ifdef USE_THREAD_DEBUG /* stop the file output from unbound-control, overwrites the servers */ extern int check_locking_order; check_locking_order = 0; #endif /* USE_THREAD_DEBUG */ log_ident_set("unbound-control"); log_init(NULL, 0, NULL); checklock_start(); #ifdef USE_WINSOCK /* use registry config file in preference to compiletime location */ if(!(cfgfile=w_lookup_reg_str("Software\\Unbound", "ConfigFile"))) cfgfile = CONFIGFILE; #endif /* parse the options */ while( (c=getopt(argc, argv, "c:s:qh")) != -1) { switch(c) { case 'c': cfgfile = optarg; break; case 's': svr = optarg; break; case 'q': quiet = 1; break; case '?': case 'h': default: usage(); } } argc -= optind; argv += optind; if(argc == 0) usage(); if(argc >= 1 && strcmp(argv[0], "start")==0) { #if (defined(TARGET_OS_TV) && TARGET_OS_TV) || (defined(TARGET_OS_WATCH) && TARGET_OS_WATCH) fatal_exit("could not exec unbound: %s", strerror(ENOSYS)); #else if(execlp("unbound", "unbound", "-c", cfgfile, (char*)NULL) < 0) { fatal_exit("could not exec unbound: %s", strerror(errno)); } #endif } if(argc >= 1 && strcmp(argv[0], "stats_shm")==0) { print_stats_shm(cfgfile); return 0; } check_args_for_listcmd(argc, argv); #ifdef USE_WINSOCK if((r = WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0) fatal_exit("WSAStartup failed: %s", wsa_strerror(r)); #endif #ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) # ifndef S_SPLINT_S OpenSSL_add_all_algorithms(); # endif #else OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif if(!RAND_status()) { /* try to seed it */ unsigned char buf[256]; unsigned int seed=(unsigned)time(NULL) ^ (unsigned)getpid(); unsigned int v = seed; size_t i; for(i=0; i<256/sizeof(v); i++) { memmove(buf+i*sizeof(v), &v, sizeof(v)); v = v*seed + (unsigned int)i; } RAND_seed(buf, 256); log_warn("no entropy, seeding openssl PRNG with time\n"); } ret = go(cfgfile, svr, quiet, argc, argv); #ifdef USE_WINSOCK WSACleanup(); #endif checklock_stop(); return ret; } unbound-1.13.1/smallapp/unbound-checkconf.c0000644000175000017500000007562114010434640020262 0ustar wouterwouter/* * checkconf/unbound-checkconf.c - config file checker for unbound.conf file. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * The config checker checks for syntax and other errors in the unbound.conf * file, and can be used to check for errors before the server is started * or sigHUPped. * Exit status 1 means an error. */ #include "config.h" #include #include "util/log.h" #include "util/config_file.h" #include "util/module.h" #include "util/net_help.h" #include "util/regional.h" #include "iterator/iterator.h" #include "iterator/iter_fwd.h" #include "iterator/iter_hints.h" #include "validator/validator.h" #include "services/localzone.h" #include "services/view.h" #include "services/authzone.h" #include "respip/respip.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #ifdef HAVE_GETOPT_H #include #endif #ifdef HAVE_PWD_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_GLOB_H #include #endif #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif #ifdef CLIENT_SUBNET #include "edns-subnet/subnet-whitelist.h" #endif /** Give checkconf usage, and exit (1). */ static void usage(void) { printf("Usage: unbound-checkconf [file]\n"); printf(" Checks unbound configuration file for errors.\n"); printf("file if omitted %s is used.\n", CONFIGFILE); printf("-o option print value of option to stdout.\n"); printf("-f output full pathname with chroot applied, eg. with -o pidfile.\n"); printf("-h show this usage help.\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); exit(1); } /** * Print given option to stdout * @param cfg: config * @param opt: option name without trailing :. * This is different from config_set_option. * @param final: if final pathname with chroot applied has to be printed. */ static void print_option(struct config_file* cfg, const char* opt, int final) { if(strcmp(opt, "pidfile") == 0 && final) { char *p = fname_after_chroot(cfg->pidfile, cfg, 1); if(!p) fatal_exit("out of memory"); printf("%s\n", p); free(p); return; } if(strcmp(opt, "auto-trust-anchor-file") == 0 && final) { struct config_strlist* s = cfg->auto_trust_anchor_file_list; for(; s; s=s->next) { char *p = fname_after_chroot(s->str, cfg, 1); if(!p) fatal_exit("out of memory"); printf("%s\n", p); free(p); } return; } if(!config_get_option(cfg, opt, config_print_func, stdout)) fatal_exit("cannot print option '%s'", opt); } /** check if module works with config */ static void check_mod(struct config_file* cfg, struct module_func_block* fb) { struct module_env env; memset(&env, 0, sizeof(env)); env.cfg = cfg; env.scratch = regional_create(); env.scratch_buffer = sldns_buffer_new(BUFSIZ); if(!env.scratch || !env.scratch_buffer) fatal_exit("out of memory"); if(!edns_known_options_init(&env)) fatal_exit("out of memory"); if(!(*fb->init)(&env, 0)) { fatal_exit("bad config for %s module", fb->name); } (*fb->deinit)(&env, 0); sldns_buffer_free(env.scratch_buffer); regional_destroy(env.scratch); edns_known_options_delete(&env); } /** true if addr is a localhost address, 127.0.0.1 or ::1 (with maybe "@port" * after it) */ static int str_addr_is_localhost(const char* a) { if(strncmp(a, "127.", 4) == 0) return 1; if(strncmp(a, "::1", 3) == 0) return 1; return 0; } /** check do-not-query-localhost */ static void donotquerylocalhostcheck(struct config_file* cfg) { if(cfg->donotquery_localhost) { struct config_stub* p; struct config_strlist* s; for(p=cfg->forwards; p; p=p->next) { for(s=p->addrs; s; s=s->next) { if(str_addr_is_localhost(s->str)) { fprintf(stderr, "unbound-checkconf: warning: forward-addr: '%s' is specified for forward-zone: '%s', but do-not-query-localhost: yes means that the address will not be used for lookups.\n", s->str, p->name); } } } for(p=cfg->stubs; p; p=p->next) { for(s=p->addrs; s; s=s->next) { if(str_addr_is_localhost(s->str)) { fprintf(stderr, "unbound-checkconf: warning: stub-addr: '%s' is specified for stub-zone: '%s', but do-not-query-localhost: yes means that the address will not be used for lookups.\n", s->str, p->name); } } } } } /** check localzones */ static void localzonechecks(struct config_file* cfg) { struct local_zones* zs; if(!(zs = local_zones_create())) fatal_exit("out of memory"); if(!local_zones_apply_cfg(zs, cfg)) fatal_exit("failed local-zone, local-data configuration"); local_zones_delete(zs); } /** checks for acl and views */ static void acl_view_tag_checks(struct config_file* cfg, struct views* views) { int d; struct sockaddr_storage a; socklen_t alen; struct config_str2list* acl; struct config_str3list* s3; struct config_strbytelist* sb; /* acl_view */ for(acl=cfg->acl_view; acl; acl = acl->next) { struct view* v; if(!netblockstrtoaddr(acl->str, UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse access-control-view " "address %s %s", acl->str, acl->str2); } v = views_find_view(views, acl->str2, 0); if(!v) { fatal_exit("cannot find view for " "access-control-view: %s %s", acl->str, acl->str2); } lock_rw_unlock(&v->lock); } /* acl_tags */ for(sb=cfg->acl_tags; sb; sb = sb->next) { if(!netblockstrtoaddr(sb->str, UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse access-control-tags " "address %s", sb->str); } } /* acl_tag_actions */ for(s3=cfg->acl_tag_actions; s3; s3 = s3->next) { enum localzone_type t; if(!netblockstrtoaddr(s3->str, UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse access-control-tag-actions " "address %s %s %s", s3->str, s3->str2, s3->str3); } if(find_tag_id(cfg, s3->str2) == -1) { fatal_exit("cannot parse tag %s (define-tag it), " "for access-control-tag-actions: %s %s %s", s3->str2, s3->str, s3->str2, s3->str3); } if(!local_zone_str2type(s3->str3, &t)) { fatal_exit("cannot parse access control action type %s" " for access-control-tag-actions: %s %s %s", s3->str3, s3->str, s3->str2, s3->str3); } } /* acl_tag_datas */ for(s3=cfg->acl_tag_datas; s3; s3 = s3->next) { char buf[65536]; uint8_t rr[LDNS_RR_BUF_SIZE]; size_t len = sizeof(rr); int res; if(!netblockstrtoaddr(s3->str, UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse access-control-tag-datas address %s %s '%s'", s3->str, s3->str2, s3->str3); } if(find_tag_id(cfg, s3->str2) == -1) { fatal_exit("cannot parse tag %s (define-tag it), " "for access-control-tag-datas: %s %s '%s'", s3->str2, s3->str, s3->str2, s3->str3); } /* '.' is sufficient for validation, and it makes the call to * sldns_wirerr_get_type() simpler below. */ snprintf(buf, sizeof(buf), "%s %s", ".", s3->str3); res = sldns_str2wire_rr_buf(buf, rr, &len, NULL, 3600, NULL, 0, NULL, 0); if(res != 0) { fatal_exit("cannot parse rr data [char %d] parse error %s, for access-control-tag-datas: %s %s '%s'", (int)LDNS_WIREPARSE_OFFSET(res)-2, sldns_get_errorstr_parse(res), s3->str, s3->str2, s3->str3); } } } /** check view and response-ip configuration */ static void view_and_respipchecks(struct config_file* cfg) { struct views* views = NULL; struct respip_set* respip = NULL; int ignored = 0; if(!(views = views_create())) fatal_exit("Could not create views: out of memory"); if(!(respip = respip_set_create())) fatal_exit("Could not create respip set: out of memory"); if(!views_apply_cfg(views, cfg)) fatal_exit("Could not set up views"); if(!respip_global_apply_cfg(respip, cfg)) fatal_exit("Could not setup respip set"); if(!respip_views_apply_cfg(views, cfg, &ignored)) fatal_exit("Could not setup per-view respip sets"); acl_view_tag_checks(cfg, views); views_delete(views); respip_set_delete(respip); } /** emit warnings for IP in hosts */ static void warn_hosts(const char* typ, struct config_stub* list) { struct sockaddr_storage a; socklen_t alen; struct config_stub* s; struct config_strlist* h; for(s=list; s; s=s->next) { for(h=s->hosts; h; h=h->next) { if(extstrtoaddr(h->str, &a, &alen)) { fprintf(stderr, "unbound-checkconf: warning:" " %s %s: \"%s\" is an IP%s address, " "and when looked up as a host name " "during use may not resolve.\n", s->name, typ, h->str, addr_is_ip6(&a, alen)?"6":"4"); } } } } /** check interface strings */ static void interfacechecks(struct config_file* cfg) { int d; struct sockaddr_storage a; socklen_t alen; int i, j; for(i=0; inum_ifs; i++) { if(!extstrtoaddr(cfg->ifs[i], &a, &alen)) { fatal_exit("cannot parse interface specified as '%s'", cfg->ifs[i]); } for(j=0; jnum_ifs; j++) { if(i!=j && strcmp(cfg->ifs[i], cfg->ifs[j])==0) fatal_exit("interface: %s present twice, " "cannot bind same ports twice.", cfg->ifs[i]); } } for(i=0; inum_out_ifs; i++) { if(!ipstrtoaddr(cfg->out_ifs[i], UNBOUND_DNS_PORT, &a, &alen) && !netblockstrtoaddr(cfg->out_ifs[i], UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse outgoing-interface " "specified as '%s'", cfg->out_ifs[i]); } for(j=0; jnum_out_ifs; j++) { if(i!=j && strcmp(cfg->out_ifs[i], cfg->out_ifs[j])==0) fatal_exit("outgoing-interface: %s present " "twice, cannot bind same ports twice.", cfg->out_ifs[i]); } } } /** check acl ips */ static void aclchecks(struct config_file* cfg) { int d; struct sockaddr_storage a; socklen_t alen; struct config_str2list* acl; for(acl=cfg->acls; acl; acl = acl->next) { if(!netblockstrtoaddr(acl->str, UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse access control address %s %s", acl->str, acl->str2); } } } /** check tcp connection limit ips */ static void tcpconnlimitchecks(struct config_file* cfg) { int d; struct sockaddr_storage a; socklen_t alen; struct config_str2list* tcl; for(tcl=cfg->tcp_connection_limits; tcl; tcl = tcl->next) { if(!netblockstrtoaddr(tcl->str, UNBOUND_DNS_PORT, &a, &alen, &d)) { fatal_exit("cannot parse tcp connection limit address %s %s", tcl->str, tcl->str2); } } } /** true if fname is a file */ static int is_file(const char* fname) { struct stat buf; if(stat(fname, &buf) < 0) { if(errno==EACCES) { printf("warning: no search permission for one of the directories in path: %s\n", fname); return 1; } perror(fname); return 0; } if(S_ISDIR(buf.st_mode)) { printf("%s is not a file\n", fname); return 0; } return 1; } /** true if fname is a directory */ static int is_dir(const char* fname) { struct stat buf; if(stat(fname, &buf) < 0) { if(errno==EACCES) { printf("warning: no search permission for one of the directories in path: %s\n", fname); return 1; } perror(fname); return 0; } if(!(S_ISDIR(buf.st_mode))) { printf("%s is not a directory\n", fname); return 0; } return 1; } /** get base dir of a fname */ static char* basedir(char* fname) { char* rev; if(!fname) fatal_exit("out of memory"); rev = strrchr(fname, '/'); if(!rev) return NULL; if(fname == rev) return NULL; rev[0] = 0; return fname; } /** check chroot for a file string */ static void check_chroot_string(const char* desc, char** ss, const char* chrootdir, struct config_file* cfg) { char* str = *ss; if(str && str[0]) { *ss = fname_after_chroot(str, cfg, 1); if(!*ss) fatal_exit("out of memory"); if(!is_file(*ss)) { if(chrootdir && chrootdir[0]) fatal_exit("%s: \"%s\" does not exist in " "chrootdir %s", desc, str, chrootdir); else fatal_exit("%s: \"%s\" does not exist", desc, str); } /* put in a new full path for continued checking */ free(str); } } /** check file list, every file must be inside the chroot location */ static void check_chroot_filelist(const char* desc, struct config_strlist* list, const char* chrootdir, struct config_file* cfg) { struct config_strlist* p; for(p=list; p; p=p->next) { check_chroot_string(desc, &p->str, chrootdir, cfg); } } /** check file list, with wildcard processing */ static void check_chroot_filelist_wild(const char* desc, struct config_strlist* list, const char* chrootdir, struct config_file* cfg) { struct config_strlist* p; for(p=list; p; p=p->next) { #ifdef HAVE_GLOB if(strchr(p->str, '*') || strchr(p->str, '[') || strchr(p->str, '?') || strchr(p->str, '{') || strchr(p->str, '~')) { char* s = p->str; /* adjust whole pattern for chroot and check later */ p->str = fname_after_chroot(p->str, cfg, 1); free(s); } else #endif /* HAVE_GLOB */ check_chroot_string(desc, &p->str, chrootdir, cfg); } } #ifdef CLIENT_SUBNET /** check ECS configuration */ static void ecs_conf_checks(struct config_file* cfg) { struct ecs_whitelist* whitelist = NULL; if(!(whitelist = ecs_whitelist_create())) fatal_exit("Could not create ednssubnet whitelist: out of memory"); if(!ecs_whitelist_apply_cfg(whitelist, cfg)) fatal_exit("Could not setup ednssubnet whitelist"); ecs_whitelist_delete(whitelist); } #endif /* CLIENT_SUBNET */ /** check that the modules exist, are compiled in */ static void check_modules_exist(const char* module_conf) { const char** names = module_list_avail(); const char* s = module_conf; while(*s) { int i = 0; int is_ok = 0; while(*s && isspace((unsigned char)*s)) s++; if(!*s) break; while(names[i]) { if(strncmp(names[i], s, strlen(names[i])) == 0) { is_ok = 1; break; } i++; } if(is_ok == 0) { char n[64]; size_t j; n[0]=0; n[sizeof(n)-1]=0; for(j=0; jstubs); warn_hosts("forward-host", cfg->forwards); interfacechecks(cfg); aclchecks(cfg); tcpconnlimitchecks(cfg); if(cfg->verbosity < 0) fatal_exit("verbosity value < 0"); if(cfg->num_threads <= 0 || cfg->num_threads > 10000) fatal_exit("num_threads value weird"); if(!cfg->do_ip4 && !cfg->do_ip6) fatal_exit("ip4 and ip6 are both disabled, pointless"); if(!cfg->do_ip4 && cfg->prefer_ip4) fatal_exit("cannot prefer and disable ip4, pointless"); if(!cfg->do_ip6 && cfg->prefer_ip6) fatal_exit("cannot prefer and disable ip6, pointless"); if(!cfg->do_udp && !cfg->do_tcp) fatal_exit("udp and tcp are both disabled, pointless"); if(cfg->edns_buffer_size > cfg->msg_buffer_size) fatal_exit("edns-buffer-size larger than msg-buffer-size, " "answers will not fit in processing buffer"); #ifdef UB_ON_WINDOWS w_config_adjust_directory(cfg); #endif if(cfg->chrootdir && cfg->chrootdir[0] && cfg->chrootdir[strlen(cfg->chrootdir)-1] == '/') fatal_exit("chootdir %s has trailing slash '/' please remove.", cfg->chrootdir); if(cfg->chrootdir && cfg->chrootdir[0] && !is_dir(cfg->chrootdir)) { fatal_exit("bad chroot directory"); } if(cfg->directory && cfg->directory[0]) { char* ad = fname_after_chroot(cfg->directory, cfg, 0); if(!ad) fatal_exit("out of memory"); if(!is_dir(ad)) fatal_exit("bad chdir directory"); free(ad); } if( (cfg->chrootdir && cfg->chrootdir[0]) || (cfg->directory && cfg->directory[0])) { if(cfg->pidfile && cfg->pidfile[0]) { char* ad = (cfg->pidfile[0]=='/')?strdup(cfg->pidfile): fname_after_chroot(cfg->pidfile, cfg, 1); char* bd = basedir(ad); if(bd && !is_dir(bd)) fatal_exit("pidfile directory does not exist"); free(ad); } if(cfg->logfile && cfg->logfile[0]) { char* ad = fname_after_chroot(cfg->logfile, cfg, 1); char* bd = basedir(ad); if(bd && !is_dir(bd)) fatal_exit("logfile directory does not exist"); free(ad); } } check_chroot_filelist("file with root-hints", cfg->root_hints, cfg->chrootdir, cfg); check_chroot_filelist("trust-anchor-file", cfg->trust_anchor_file_list, cfg->chrootdir, cfg); check_chroot_filelist("auto-trust-anchor-file", cfg->auto_trust_anchor_file_list, cfg->chrootdir, cfg); check_chroot_filelist_wild("trusted-keys-file", cfg->trusted_keys_file_list, cfg->chrootdir, cfg); #ifdef USE_IPSECMOD if(cfg->ipsecmod_enabled && strstr(cfg->module_conf, "ipsecmod")) { /* only check hook if enabled */ check_chroot_string("ipsecmod-hook", &cfg->ipsecmod_hook, cfg->chrootdir, cfg); } #endif /* remove chroot setting so that modules are not stripping pathnames*/ free(cfg->chrootdir); cfg->chrootdir = NULL; /* check that the modules listed in module_conf exist */ check_modules_exist(cfg->module_conf); /* Respip is known to *not* work with dns64. */ if(strcmp(cfg->module_conf, "iterator") != 0 && strcmp(cfg->module_conf, "validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 iterator") != 0 && strcmp(cfg->module_conf, "respip iterator") != 0 && strcmp(cfg->module_conf, "respip validator iterator") != 0 #ifdef WITH_PYTHONMODULE && strcmp(cfg->module_conf, "python iterator") != 0 && strcmp(cfg->module_conf, "python respip iterator") != 0 && strcmp(cfg->module_conf, "python validator iterator") != 0 && strcmp(cfg->module_conf, "python respip validator iterator") != 0 && strcmp(cfg->module_conf, "validator python iterator") != 0 && strcmp(cfg->module_conf, "dns64 python iterator") != 0 && strcmp(cfg->module_conf, "dns64 python validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator python iterator") != 0 && strcmp(cfg->module_conf, "python dns64 iterator") != 0 && strcmp(cfg->module_conf, "python dns64 validator iterator") != 0 #endif #ifdef WITH_DYNLIBMODULE && strcmp(cfg->module_conf, "dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "python dynlib iterator") != 0 && strcmp(cfg->module_conf, "python dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "python dynlib dynlib dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip iterator") != 0 && strcmp(cfg->module_conf, "dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "python dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "python dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "python dynlib dynlib dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0 && strcmp(cfg->module_conf, "validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib dns64 iterator") != 0 && strcmp(cfg->module_conf, "dynlib dns64 validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib dns64 cachedb iterator") != 0 && strcmp(cfg->module_conf, "dynlib dns64 validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 dynlib validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dynlib cachedb iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip cachedb iterator") != 0 && strcmp(cfg->module_conf, "dynlib validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "cachedb dynlib iterator") != 0 && strcmp(cfg->module_conf, "respip cachedb dynlib iterator") != 0 && strcmp(cfg->module_conf, "validator cachedb dynlib iterator") != 0 && strcmp(cfg->module_conf, "respip validator cachedb dynlib iterator") != 0 && strcmp(cfg->module_conf, "validator dynlib cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip validator dynlib cachedb iterator") != 0 && strcmp(cfg->module_conf, "dynlib subnetcache iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip subnetcache iterator") != 0 && strcmp(cfg->module_conf, "subnetcache dynlib iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib respip subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "subnetcache dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "subnetcache validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "dynlib ipsecmod iterator") != 0 && strcmp(cfg->module_conf, "dynlib ipsecmod respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod dynlib iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod dynlib respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib ipsecmod validator iterator") != 0 && strcmp(cfg->module_conf, "dynlib ipsecmod respip validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod dynlib validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod dynlib respip validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator dynlib iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod respip validator dynlib iterator") != 0 #endif #ifdef USE_CACHEDB && strcmp(cfg->module_conf, "validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 cachedb iterator") != 0 #endif #if defined(WITH_PYTHONMODULE) && defined(USE_CACHEDB) && strcmp(cfg->module_conf, "python dns64 cachedb iterator") != 0 && strcmp(cfg->module_conf, "python dns64 validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 python cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 python validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "python cachedb iterator") != 0 && strcmp(cfg->module_conf, "python respip cachedb iterator") != 0 && strcmp(cfg->module_conf, "python validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "python respip validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "cachedb python iterator") != 0 && strcmp(cfg->module_conf, "respip cachedb python iterator") != 0 && strcmp(cfg->module_conf, "validator cachedb python iterator") != 0 && strcmp(cfg->module_conf, "respip validator cachedb python iterator") != 0 && strcmp(cfg->module_conf, "validator python cachedb iterator") != 0 && strcmp(cfg->module_conf, "respip validator python cachedb iterator") != 0 #endif #ifdef CLIENT_SUBNET && strcmp(cfg->module_conf, "subnetcache iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache iterator") != 0 && strcmp(cfg->module_conf, "subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache respip iterator") != 0 && strcmp(cfg->module_conf, "dns64 subnetcache respip validator iterator") != 0 #endif #if defined(WITH_PYTHONMODULE) && defined(CLIENT_SUBNET) && strcmp(cfg->module_conf, "python subnetcache iterator") != 0 && strcmp(cfg->module_conf, "python respip subnetcache iterator") != 0 && strcmp(cfg->module_conf, "subnetcache python iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache python iterator") != 0 && strcmp(cfg->module_conf, "python subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "python respip subnetcache validator iterator") != 0 && strcmp(cfg->module_conf, "subnetcache python validator iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache python validator iterator") != 0 && strcmp(cfg->module_conf, "subnetcache validator python iterator") != 0 && strcmp(cfg->module_conf, "respip subnetcache validator python iterator") != 0 #endif #ifdef USE_IPSECMOD && strcmp(cfg->module_conf, "ipsecmod iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 #endif #if defined(WITH_PYTHONMODULE) && defined(USE_IPSECMOD) && strcmp(cfg->module_conf, "python ipsecmod iterator") != 0 && strcmp(cfg->module_conf, "python ipsecmod respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod python iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod python respip iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0 && strcmp(cfg->module_conf, "python ipsecmod validator iterator") != 0 && strcmp(cfg->module_conf, "python ipsecmod respip validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod python validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod python respip validator iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod validator python iterator") != 0 && strcmp(cfg->module_conf, "ipsecmod respip validator python iterator") != 0 #endif #ifdef USE_IPSET && strcmp(cfg->module_conf, "validator ipset iterator") != 0 && strcmp(cfg->module_conf, "validator ipset respip iterator") != 0 && strcmp(cfg->module_conf, "ipset iterator") != 0 && strcmp(cfg->module_conf, "ipset respip iterator") != 0 #endif ) { fatal_exit("module conf '%s' is not known to work", cfg->module_conf); } #ifdef HAVE_GETPWNAM if(cfg->username && cfg->username[0]) { if(getpwnam(cfg->username) == NULL) fatal_exit("user '%s' does not exist.", cfg->username); # ifdef HAVE_ENDPWENT endpwent(); # endif } #endif if(cfg->remote_control_enable && options_remote_is_address(cfg) && cfg->control_use_cert) { check_chroot_string("server-key-file", &cfg->server_key_file, cfg->chrootdir, cfg); check_chroot_string("server-cert-file", &cfg->server_cert_file, cfg->chrootdir, cfg); if(!is_file(cfg->control_key_file)) fatal_exit("control-key-file: \"%s\" does not exist", cfg->control_key_file); if(!is_file(cfg->control_cert_file)) fatal_exit("control-cert-file: \"%s\" does not exist", cfg->control_cert_file); } donotquerylocalhostcheck(cfg); localzonechecks(cfg); view_and_respipchecks(cfg); #ifdef CLIENT_SUBNET ecs_conf_checks(cfg); #endif } /** check forwards */ static void check_fwd(struct config_file* cfg) { struct iter_forwards* fwd = forwards_create(); if(!fwd || !forwards_apply_cfg(fwd, cfg)) { fatal_exit("Could not set forward zones"); } forwards_delete(fwd); } /** check hints */ static void check_hints(struct config_file* cfg) { struct iter_hints* hints = hints_create(); if(!hints || !hints_apply_cfg(hints, cfg)) { fatal_exit("Could not set root or stub hints"); } hints_delete(hints); } /** check auth zones */ static void check_auth(struct config_file* cfg) { int is_rpz = 0; struct auth_zones* az = auth_zones_create(); if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz)) { fatal_exit("Could not setup authority zones"); } auth_zones_delete(az); } /** check config file */ static void checkconf(const char* cfgfile, const char* opt, int final) { char oldwd[4096]; struct config_file* cfg = config_create(); if(!cfg) fatal_exit("out of memory"); oldwd[0] = 0; if(!getcwd(oldwd, sizeof(oldwd))) { log_err("cannot getcwd: %s", strerror(errno)); oldwd[0] = 0; } if(!config_read(cfg, cfgfile, NULL)) { /* config_read prints messages to stderr */ config_delete(cfg); exit(1); } if(oldwd[0] && chdir(oldwd) == -1) log_err("cannot chdir(%s): %s", oldwd, strerror(errno)); if(opt) { print_option(cfg, opt, final); config_delete(cfg); return; } morechecks(cfg); check_mod(cfg, iter_get_funcblock()); check_mod(cfg, val_get_funcblock()); #ifdef WITH_PYTHONMODULE if(strstr(cfg->module_conf, "python")) check_mod(cfg, pythonmod_get_funcblock()); #endif check_fwd(cfg); check_hints(cfg); check_auth(cfg); printf("unbound-checkconf: no errors in %s\n", cfgfile); config_delete(cfg); } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** Main routine for checkconf */ int main(int argc, char* argv[]) { int c; int final = 0; const char* f; const char* opt = NULL; const char* cfgfile = CONFIGFILE; log_ident_set("unbound-checkconf"); log_init(NULL, 0, NULL); checklock_start(); #ifdef USE_WINSOCK /* use registry config file in preference to compiletime location */ if(!(cfgfile=w_lookup_reg_str("Software\\Unbound", "ConfigFile"))) cfgfile = CONFIGFILE; #endif /* USE_WINSOCK */ /* parse the options */ while( (c=getopt(argc, argv, "fho:")) != -1) { switch(c) { case 'f': final = 1; break; case 'o': opt = optarg; break; case '?': case 'h': default: usage(); } } argc -= optind; argv += optind; if(argc != 0 && argc != 1) usage(); if(argc == 1) f = argv[0]; else f = cfgfile; checkconf(f, opt, final); checklock_stop(); return 0; } unbound-1.13.1/smallapp/unbound-anchor.c0000644000175000017500000017565314010434640017617 0ustar wouterwouter/* * unbound-anchor.c - update the root anchor if necessary. * * Copyright (c) 2010, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file checks to see that the current 5011 keys work to prime the * current root anchor. If not a certificate is used to update the anchor, * with RFC7958 https xml fetch. * * This is a concept solution for distribution of the DNSSEC root * trust anchor. It is a small tool, called "unbound-anchor", that * runs before the main validator starts. I.e. in the init script: * unbound-anchor; unbound. Thus it is meant to run at system boot time. * * Management-Abstract: * * first run: fill root.key file with hardcoded DS record. * * mostly: use RFC5011 tracking, quick . DNSKEY UDP query. * * failover: use RFC7958 builtin certificate, do https and update. * Special considerations: * * 30-days RFC5011 timer saves a lot of https traffic. * * DNSKEY probe must be NOERROR, saves a lot of https traffic. * * fail if clock before sign date of the root, if cert expired. * * if the root goes back to unsigned, deals with it. * * It has hardcoded the root DS anchors and the ICANN CA root certificate. * It allows with options to override those. It also takes root-hints (it * has to do a DNS resolve), and also has hardcoded defaults for those. * * Once it starts, just before the validator starts, it quickly checks if * the root anchor file needs to be updated. First it tries to use * RFC5011-tracking of the root key. If that fails (and for 30-days since * last successful probe), then it attempts to update using the * certificate. So most of the time, the RFC5011 tracking will work fine, * and within a couple milliseconds, the main daemon can start. It will * have only probed the . DNSKEY, not done expensive https transfers on the * root infrastructure. * * If there is no root key in the root.key file, it bootstraps the * RFC5011-tracking with its builtin DS anchors; if that fails it * bootstraps the RFC5011-tracking using the certificate. (again to avoid * https, and it is also faster). * * It uses the XML file by converting it to DS records and writing that to the * key file. Unbound can detect that the 'special comments' are gone, and * the file contains a list of normal DNSKEY/DS records, and uses that to * bootstrap 5011 (the KSK is made VALID). * * The certificate RFC7958 update is done by fetching root-anchors.xml and * root-anchors.p7s via SSL. The HTTPS certificate can be logged but is * not validated (https for channel security; the security comes from the * certificate). The 'data.iana.org' domain name A and AAAA are resolved * without DNSSEC. It tries a random IP until the transfer succeeds. It * then checks the p7s signature. * * On any failure, it leaves the root key file untouched. The main * validator has to cope with it, it cannot fix things (So a failure does * not go 'without DNSSEC', no downgrade). If it used its builtin stuff or * did the https, it exits with an exit code, so that this can trigger the * init script to log the event and potentially alert the operator that can * do a manual check. * * The date is also checked. Before 2010-07-15 is a failure (root not * signed yet; avoids attacks on system clock). The * last-successful-RFC5011-probe (if available) has to be more than 30 days * in the past (otherwise, RFC5011 should have worked). This keeps * unnecessary https traffic down. If the main certificate is expired, it * fails. * * The dates on the keys in the xml are checked (uses the libexpat xml * parser), only the valid ones are used to re-enstate RFC5011 tracking. * If 0 keys are valid, the zone has gone to insecure (a special marker is * written in the keyfile that tells the main validator daemon the zone is * insecure). * * Only the root ICANN CA is shipped, not the intermediate ones. The * intermediate CAs are included in the p7s file that was downloaded. (the * root cert is valid to 2028 and the intermediate to 2014, today). * * Obviously, the tool also has options so the operator can provide a new * keyfile, a new certificate and new URLs, and fresh root hints. By * default it logs nothing on failure and success; it 'just works'. * */ #include "config.h" #include "libunbound/unbound.h" #include "sldns/rrdef.h" #include "sldns/parseutil.h" #include #ifndef HAVE_EXPAT_H #error "need libexpat to parse root-anchors.xml file." #endif #ifdef HAVE_GETOPT_H #include #endif #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #include #include #include /** name of server in URL to fetch HTTPS from */ #define URLNAME "data.iana.org" /** path on HTTPS server to xml file */ #define XMLNAME "root-anchors/root-anchors.xml" /** path on HTTPS server to p7s file */ #define P7SNAME "root-anchors/root-anchors.p7s" /** name of the signer of the certificate */ #define P7SIGNER "dnssec@iana.org" /** port number for https access */ #define HTTPS_PORT 443 #ifdef USE_WINSOCK /* sneakily reuse the the wsa_strerror function, on windows */ char* wsa_strerror(int err); #endif static const char ICANN_UPDATE_CA[] = /* The ICANN CA fetched at 24 Sep 2010. Valid to 2028 */ "-----BEGIN CERTIFICATE-----\n" "MIIDdzCCAl+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO\n" "TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV\n" "BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA0MTkxMloX\n" "DTI5MTIxODA0MTkxMlowXTEOMAwGA1UEChMFSUNBTk4xJjAkBgNVBAsTHUlDQU5O\n" "IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1JQ0FOTiBSb290IENB\n" "MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDb\n" "cLhPNNqc1NB+u+oVvOnJESofYS9qub0/PXagmgr37pNublVThIzyLPGCJ8gPms9S\n" "G1TaKNIsMI7d+5IgMy3WyPEOECGIcfqEIktdR1YWfJufXcMReZwU4v/AdKzdOdfg\n" "ONiwc6r70duEr1IiqPbVm5T05l1e6D+HkAvHGnf1LtOPGs4CHQdpIUcy2kauAEy2\n" "paKcOcHASvbTHK7TbbvHGPB+7faAztABLoneErruEcumetcNfPMIjXKdv1V1E3C7\n" "MSJKy+jAqqQJqjZoQGB0necZgUMiUv7JK1IPQRM2CXJllcyJrm9WFxY0c1KjBO29\n" "iIKK69fcglKcBuFShUECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B\n" "Af8EBAMCAf4wHQYDVR0OBBYEFLpS6UmDJIZSL8eZzfyNa2kITcBQMA0GCSqGSIb3\n" "DQEBCwUAA4IBAQAP8emCogqHny2UYFqywEuhLys7R9UKmYY4suzGO4nkbgfPFMfH\n" "6M+Zj6owwxlwueZt1j/IaCayoKU3QsrYYoDRolpILh+FPwx7wseUEV8ZKpWsoDoD\n" "2JFbLg2cfB8u/OlE4RYmcxxFSmXBg0yQ8/IoQt/bxOcEEhhiQ168H2yE5rxJMt9h\n" "15nu5JBSewrCkYqYYmaxyOC3WrVGfHZxVI7MpIFcGdvSb2a1uyuua8l0BKgk3ujF\n" "0/wsHNeP22qNyVO+XVBzrM8fk8BSUFuiT/6tZTYXRtEt5aKQZgXbKU5dUF3jT9qg\n" "j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk\n" "-----END CERTIFICATE-----\n"; static const char DS_TRUST_ANCHOR[] = /* The anchors must start on a new line with ". IN DS and end with \n"[;] * because the makedist script greps on the source here */ /* anchor 20326 is from 2017 */ ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n"; /** verbosity for this application */ static int verb = 0; /** list of IP addresses */ struct ip_list { /** next in list */ struct ip_list* next; /** length of addr */ socklen_t len; /** address ready to connect to */ struct sockaddr_storage addr; /** has the address been used */ int used; }; /** Give unbound-anchor usage, and exit (1). */ static void usage(void) { printf("Usage: unbound-anchor [opts]\n"); printf(" Setup or update root anchor. " "Most options have defaults.\n"); printf(" Run this program before you start the validator.\n"); printf("\n"); printf(" The anchor and cert have default builtin content\n"); printf(" if the file does not exist or is empty.\n"); printf("\n"); printf("-a file root key file, default %s\n", ROOT_ANCHOR_FILE); printf(" The key is input and output for this tool.\n"); printf("-c file cert file, default %s\n", ROOT_CERT_FILE); printf("-l list builtin key and cert on stdout\n"); printf("-u name server in https url, default %s\n", URLNAME); printf("-S do not use SNI for the https connection\n"); printf("-x path pathname to xml in url, default %s\n", XMLNAME); printf("-s path pathname to p7s in url, default %s\n", P7SNAME); printf("-n name signer's subject emailAddress, default %s\n", P7SIGNER); printf("-b address source address to bind to\n"); printf("-4 work using IPv4 only\n"); printf("-6 work using IPv6 only\n"); printf("-f resolv.conf use given resolv.conf\n"); printf("-r root.hints use given root.hints\n" " builtin root hints are used by default\n"); printf("-R fallback from -f to root query on error\n"); printf("-v more verbose\n"); printf("-C conf debug, read config\n"); printf("-P port use port for https connect, default 443\n"); printf("-F debug, force update with cert\n"); printf("-h show this usage help\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); exit(1); } /** return the built in root update certificate */ static const char* get_builtin_cert(void) { return ICANN_UPDATE_CA; } /** return the built in root DS trust anchor */ static const char* get_builtin_ds(void) { return DS_TRUST_ANCHOR; } /** print hex data */ static void print_data(const char* msg, const char* data, size_t len) { size_t i; printf("%s: ", msg); for(i=0; iaddr)->sin_addr; if(ip->len != (socklen_t)sizeof(struct sockaddr_in)) a = &((struct sockaddr_in6*)&ip->addr)->sin6_addr; if(inet_ntop((int)((struct sockaddr_in*)&ip->addr)->sin_family, a, out, (socklen_t)sizeof(out))==0) printf("%s (inet_ntop error)\n", msg); else printf("%s %s\n", msg, out); } } /** free ip_list */ static void ip_list_free(struct ip_list* p) { struct ip_list* np; while(p) { np = p->next; free(p); p = np; } } /** create ip_list entry for a RR record */ static struct ip_list* RR_to_ip(int tp, char* data, int len, int port) { struct ip_list* ip = (struct ip_list*)calloc(1, sizeof(*ip)); uint16_t p = (uint16_t)port; if(tp == LDNS_RR_TYPE_A) { struct sockaddr_in* sa = (struct sockaddr_in*)&ip->addr; ip->len = (socklen_t)sizeof(*sa); sa->sin_family = AF_INET; sa->sin_port = (in_port_t)htons(p); if(len != (int)sizeof(sa->sin_addr)) { if(verb) printf("skipped badly formatted A\n"); free(ip); return NULL; } memmove(&sa->sin_addr, data, sizeof(sa->sin_addr)); } else if(tp == LDNS_RR_TYPE_AAAA) { struct sockaddr_in6* sa = (struct sockaddr_in6*)&ip->addr; ip->len = (socklen_t)sizeof(*sa); sa->sin6_family = AF_INET6; sa->sin6_port = (in_port_t)htons(p); if(len != (int)sizeof(sa->sin6_addr)) { if(verb) printf("skipped badly formatted AAAA\n"); free(ip); return NULL; } memmove(&sa->sin6_addr, data, sizeof(sa->sin6_addr)); } else { if(verb) printf("internal error: bad type in RRtoip\n"); free(ip); return NULL; } verb_addr("resolved server address", ip); return ip; } /** Resolve name, type, class and add addresses to iplist */ static void resolve_host_ip(struct ub_ctx* ctx, const char* host, int port, int tp, int cl, struct ip_list** head) { struct ub_result* res = NULL; int r; int i; r = ub_resolve(ctx, host, tp, cl, &res); if(r) { if(verb) printf("error: resolve %s %s: %s\n", host, (tp==LDNS_RR_TYPE_A)?"A":"AAAA", ub_strerror(r)); return; } if(!res) { if(verb) printf("out of memory\n"); ub_ctx_delete(ctx); exit(0); } if(!res->havedata || res->rcode || !res->data) { if(verb) printf("resolve %s %s: no result\n", host, (tp==LDNS_RR_TYPE_A)?"A":"AAAA"); return; } for(i = 0; res->data[i]; i++) { struct ip_list* ip = RR_to_ip(tp, res->data[i], res->len[i], port); if(!ip) continue; ip->next = *head; *head = ip; } ub_resolve_free(res); } /** parse a text IP address into a sockaddr */ static struct ip_list* parse_ip_addr(const char* str, int port) { socklen_t len = 0; union { struct sockaddr_in6 a6; struct sockaddr_in a; } addr; struct ip_list* ip; uint16_t p = (uint16_t)port; memset(&addr, 0, sizeof(addr)); if(inet_pton(AF_INET6, str, &addr.a6.sin6_addr) > 0) { /* it is an IPv6 */ addr.a6.sin6_family = AF_INET6; addr.a6.sin6_port = (in_port_t)htons(p); len = (socklen_t)sizeof(addr.a6); } if(inet_pton(AF_INET, str, &addr.a.sin_addr) > 0) { /* it is an IPv4 */ addr.a.sin_family = AF_INET; addr.a.sin_port = (in_port_t)htons(p); len = (socklen_t)sizeof(struct sockaddr_in); } if(!len) return NULL; ip = (struct ip_list*)calloc(1, sizeof(*ip)); if(!ip) { if(verb) printf("out of memory\n"); exit(0); } ip->len = len; memmove(&ip->addr, &addr, len); if(verb) printf("server address is %s\n", str); return ip; } /** * Resolve a domain name (even though the resolver is down and there is * no trust anchor). Without DNSSEC validation. * @param host: the name to resolve. * If this name is an IP4 or IP6 address this address is returned. * @param port: the port number used for the returned IP structs. * @param res_conf: resolv.conf (if any). * @param root_hints: root hints (if any). * @param debugconf: unbound.conf for debugging options. * @param srcaddr: source address option (if any). * @param ip4only: use only ip4 for resolve and only lookup A * @param ip6only: use only ip6 for resolve and only lookup AAAA * default is to lookup A and AAAA using ip4 and ip6. * @return list of IP addresses. */ static struct ip_list* resolve_name(const char* host, int port, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only) { struct ub_ctx* ctx; struct ip_list* list = NULL; /* first see if name is an IP address itself */ if( (list=parse_ip_addr(host, port)) ) { return list; } /* create resolver context */ ctx = create_unbound_context(res_conf, root_hints, debugconf, srcaddr, ip4only, ip6only); /* try resolution of A */ if(!ip6only) { resolve_host_ip(ctx, host, port, LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN, &list); } /* try resolution of AAAA */ if(!ip4only) { resolve_host_ip(ctx, host, port, LDNS_RR_TYPE_AAAA, LDNS_RR_CLASS_IN, &list); } ub_ctx_delete(ctx); if(!list) { if(verb) printf("%s has no IP addresses I can use\n", host); exit(0); } return list; } /** clear used flags */ static void wipe_ip_usage(struct ip_list* p) { while(p) { p->used = 0; p = p->next; } } /** count unused IPs */ static int count_unused(struct ip_list* p) { int num = 0; while(p) { if(!p->used) num++; p = p->next; } return num; } /** pick random unused element from IP list */ static struct ip_list* pick_random_ip(struct ip_list* list) { struct ip_list* p = list; int num = count_unused(list); int sel; if(num == 0) return NULL; /* not perfect, but random enough */ sel = (int)arc4random_uniform((uint32_t)num); /* skip over unused elements that we did not select */ while(sel > 0 && p) { if(!p->used) sel--; p = p->next; } /* find the next unused element */ while(p && p->used) p = p->next; if(!p) return NULL; /* robustness */ return p; } /** close the fd */ static void fd_close(int fd) { #ifndef USE_WINSOCK close(fd); #else closesocket(fd); #endif } /** printout socket errno */ static void print_sock_err(const char* msg) { #ifndef USE_WINSOCK if(verb) printf("%s: %s\n", msg, strerror(errno)); #else if(verb) printf("%s: %s\n", msg, wsa_strerror(WSAGetLastError())); #endif } /** connect to IP address */ static int connect_to_ip(struct ip_list* ip, struct ip_list* src) { int fd; verb_addr("connect to", ip); fd = socket(ip->len==(socklen_t)sizeof(struct sockaddr_in)? AF_INET:AF_INET6, SOCK_STREAM, 0); if(fd == -1) { print_sock_err("socket"); return -1; } if(src && bind(fd, (struct sockaddr*)&src->addr, src->len) < 0) { print_sock_err("bind"); fd_close(fd); return -1; } if(connect(fd, (struct sockaddr*)&ip->addr, ip->len) < 0) { print_sock_err("connect"); fd_close(fd); return -1; } return fd; } /** create SSL context */ static SSL_CTX* setup_sslctx(void) { SSL_CTX* sslctx = SSL_CTX_new(SSLv23_client_method()); if(!sslctx) { if(verb) printf("SSL_CTX_new error\n"); return NULL; } return sslctx; } /** initiate TLS on a connection */ static SSL* TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni) { X509* x; int r; SSL* ssl = SSL_new(sslctx); if(!ssl) { if(verb) printf("SSL_new error\n"); return NULL; } SSL_set_connect_state(ssl); (void)SSL_set_mode(ssl, (long)SSL_MODE_AUTO_RETRY); if(!SSL_set_fd(ssl, fd)) { if(verb) printf("SSL_set_fd error\n"); SSL_free(ssl); return NULL; } if(use_sni) { (void)SSL_set_tlsext_host_name(ssl, urlname); } while(1) { ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) break; r = SSL_get_error(ssl, r); if(r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) { if(verb) printf("SSL handshake failed\n"); SSL_free(ssl); return NULL; } /* wants to be called again */ } x = SSL_get_peer_certificate(ssl); if(!x) { if(verb) printf("Server presented no peer certificate\n"); SSL_free(ssl); return NULL; } verb_cert("server SSL certificate", x); X509_free(x); return ssl; } /** perform neat TLS shutdown */ static void TLS_shutdown(int fd, SSL* ssl, SSL_CTX* sslctx) { /* shutdown the SSL connection nicely */ if(SSL_shutdown(ssl) == 0) { SSL_shutdown(ssl); } SSL_free(ssl); SSL_CTX_free(sslctx); fd_close(fd); } /** write a line over SSL */ static int write_ssl_line(SSL* ssl, const char* str, const char* sec) { char buf[1024]; size_t l; if(sec) { snprintf(buf, sizeof(buf), str, sec); } else { snprintf(buf, sizeof(buf), "%s", str); } l = strlen(buf); if(l+2 >= sizeof(buf)) { if(verb) printf("line too long\n"); return 0; } if(verb >= 2) printf("SSL_write: %s\n", buf); buf[l] = '\r'; buf[l+1] = '\n'; buf[l+2] = 0; /* add \r\n */ if(SSL_write(ssl, buf, (int)strlen(buf)) <= 0) { if(verb) printf("could not SSL_write %s", str); return 0; } return 1; } /** process header line, check rcode and keeping track of size */ static int process_one_header(char* buf, size_t* clen, int* chunked) { if(verb>=2) printf("header: '%s'\n", buf); if(strncasecmp(buf, "HTTP/1.1 ", 9) == 0) { /* check returncode */ if(buf[9] != '2') { if(verb) printf("bad status %s\n", buf+9); return 0; } } else if(strncasecmp(buf, "Content-Length: ", 16) == 0) { if(!*chunked) *clen = (size_t)atoi(buf+16); } else if(strncasecmp(buf, "Transfer-Encoding: chunked", 19+7) == 0) { *clen = 0; *chunked = 1; } return 1; } /** * Read one line from SSL * zero terminates. * skips "\r\n" (but not copied to buf). * @param ssl: the SSL connection to read from (blocking). * @param buf: buffer to return line in. * @param len: size of the buffer. * @return 0 on error, 1 on success. */ static int read_ssl_line(SSL* ssl, char* buf, size_t len) { size_t n = 0; int r; int endnl = 0; while(1) { if(n >= len) { if(verb) printf("line too long\n"); return 0; } if((r = SSL_read(ssl, buf+n, 1)) <= 0) { if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) { /* EOF */ break; } if(verb) printf("could not SSL_read\n"); return 0; } if(endnl && buf[n] == '\n') { break; } else if(endnl) { /* bad data */ if(verb) printf("error: stray linefeeds\n"); return 0; } else if(buf[n] == '\r') { /* skip \r, and also \n on the wire */ endnl = 1; continue; } else if(buf[n] == '\n') { /* skip the \n, we are done */ break; } else n++; } buf[n] = 0; return 1; } /** read http headers and process them */ static size_t read_http_headers(SSL* ssl, size_t* clen) { char buf[1024]; int chunked = 0; *clen = 0; while(read_ssl_line(ssl, buf, sizeof(buf))) { if(buf[0] == 0) return 1; if(!process_one_header(buf, clen, &chunked)) return 0; } return 0; } /** read a data chunk */ static char* read_data_chunk(SSL* ssl, size_t len) { size_t got = 0; int r; char* data; if((unsigned)len >= (unsigned)0xfffffff0) return NULL; /* to protect against integer overflow in malloc*/ data = malloc(len+1); if(!data) { if(verb) printf("out of memory\n"); return NULL; } while(got < len) { if((r = SSL_read(ssl, data+got, (int)(len-got))) <= 0) { if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) { /* EOF */ if(verb) printf("could not SSL_read: unexpected EOF\n"); free(data); return NULL; } if(verb) printf("could not SSL_read\n"); free(data); return NULL; } if(verb >= 2) printf("at %d/%d\n", (int)got, (int)len); got += r; } if(verb>=2) printf("read %d data\n", (int)len); data[len] = 0; return data; } /** parse chunk header */ static int parse_chunk_header(char* buf, size_t* result) { char* e = NULL; size_t v = (size_t)strtol(buf, &e, 16); if(e == buf) return 0; *result = v; return 1; } /** read chunked data from connection */ static BIO* do_chunked_read(SSL* ssl) { char buf[1024]; size_t len; char* body; BIO* mem = BIO_new(BIO_s_mem()); if(verb>=3) printf("do_chunked_read\n"); if(!mem) { if(verb) printf("out of memory\n"); return NULL; } while(read_ssl_line(ssl, buf, sizeof(buf))) { /* read the chunked start line */ if(verb>=2) printf("chunk header: %s\n", buf); if(!parse_chunk_header(buf, &len)) { BIO_free(mem); if(verb>=3) printf("could not parse chunk header\n"); return NULL; } if(verb>=2) printf("chunk len: %d\n", (int)len); /* are we done? */ if(len == 0) { char z = 0; /* skip end-of-chunk-trailer lines, * until the empty line after that */ do { if(!read_ssl_line(ssl, buf, sizeof(buf))) { BIO_free(mem); return NULL; } } while (strlen(buf) > 0); /* end of chunks, zero terminate it */ if(BIO_write(mem, &z, 1) <= 0) { if(verb) printf("out of memory\n"); BIO_free(mem); return NULL; } return mem; } /* read the chunked body */ body = read_data_chunk(ssl, len); if(!body) { BIO_free(mem); return NULL; } if(BIO_write(mem, body, (int)len) <= 0) { if(verb) printf("out of memory\n"); free(body); BIO_free(mem); return NULL; } free(body); /* skip empty line after data chunk */ if(!read_ssl_line(ssl, buf, sizeof(buf))) { BIO_free(mem); return NULL; } } BIO_free(mem); return NULL; } /** start HTTP1.1 transaction on SSL */ static int write_http_get(SSL* ssl, const char* pathname, const char* urlname) { if(write_ssl_line(ssl, "GET /%s HTTP/1.1", pathname) && write_ssl_line(ssl, "Host: %s", urlname) && write_ssl_line(ssl, "User-Agent: unbound-anchor/%s", PACKAGE_VERSION) && /* We do not really do multiple queries per connection, * but this header setting is also not needed. * write_ssl_line(ssl, "Connection: close", NULL) &&*/ write_ssl_line(ssl, "", NULL)) { return 1; } return 0; } /** read chunked data and zero terminate; len is without zero */ static char* read_chunked_zero_terminate(SSL* ssl, size_t* len) { /* do the chunked version */ BIO* tmp = do_chunked_read(ssl); char* data, *d = NULL; size_t l; if(!tmp) { if(verb) printf("could not read from https\n"); return NULL; } l = (size_t)BIO_get_mem_data(tmp, &d); if(verb>=2) printf("chunked data is %d\n", (int)l); if(l == 0 || d == NULL) { if(verb) printf("out of memory\n"); return NULL; } *len = l-1; data = (char*)malloc(l); if(data == NULL) { if(verb) printf("out of memory\n"); return NULL; } memcpy(data, d, l); BIO_free(tmp); return data; } /** read HTTP result from SSL */ static BIO* read_http_result(SSL* ssl) { size_t len = 0; char* data; BIO* m; if(!read_http_headers(ssl, &len)) { return NULL; } if(len == 0) { data = read_chunked_zero_terminate(ssl, &len); } else { data = read_data_chunk(ssl, len); } if(!data) return NULL; if(verb >= 4) print_data("read data", data, len); m = BIO_new(BIO_s_mem()); if(!m) { if(verb) printf("out of memory\n"); free(data); exit(0); } BIO_write(m, data, (int)len); free(data); return m; } /** https to an IP addr, return BIO with pathname or NULL */ static BIO* https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname, struct ip_list* src, int use_sni) { int fd; SSL* ssl; BIO* bio; SSL_CTX* sslctx = setup_sslctx(); if(!sslctx) { return NULL; } fd = connect_to_ip(ip, src); if(fd == -1) { SSL_CTX_free(sslctx); return NULL; } ssl = TLS_initiate(sslctx, fd, urlname, use_sni); if(!ssl) { SSL_CTX_free(sslctx); fd_close(fd); return NULL; } if(!write_http_get(ssl, pathname, urlname)) { if(verb) printf("could not write to server\n"); SSL_free(ssl); SSL_CTX_free(sslctx); fd_close(fd); return NULL; } bio = read_http_result(ssl); TLS_shutdown(fd, ssl, sslctx); return bio; } /** * Do a HTTPS, HTTP1.1 over TLS, to fetch a file * @param ip_list: list of IP addresses to use to fetch from. * @param pathname: pathname of file on server to GET. * @param urlname: name to pass as the virtual host for this request. * @param src: if nonNULL, source address to bind to. * @param use_sni: if SNI will be used. * @return a memory BIO with the file in it. */ static BIO* https(struct ip_list* ip_list, const char* pathname, const char* urlname, struct ip_list* src, int use_sni) { struct ip_list* ip; BIO* bio = NULL; /* try random address first, and work through the list */ wipe_ip_usage(ip_list); while( (ip = pick_random_ip(ip_list)) ) { ip->used = 1; bio = https_to_ip(ip, pathname, urlname, src, use_sni); if(bio) break; } if(!bio) { if(verb) printf("could not fetch %s\n", pathname); exit(0); } else { if(verb) printf("fetched %s (%d bytes)\n", pathname, (int)BIO_ctrl_pending(bio)); } return bio; } /** XML parse private data during the parse */ struct xml_data { /** the parser, reference */ XML_Parser parser; /** the current tag; malloced; or NULL outside of tags */ char* tag; /** current date to use during the parse */ time_t date; /** number of keys usefully read in */ int num_keys; /** the compiled anchors as DS records */ BIO* ds; /** do we want to use this anchor? */ int use_key; /** the current anchor: Zone */ BIO* czone; /** the current anchor: KeyTag */ BIO* ctag; /** the current anchor: Algorithm */ BIO* calgo; /** the current anchor: DigestType */ BIO* cdigtype; /** the current anchor: Digest*/ BIO* cdigest; }; /** The BIO for the tag */ static BIO* xml_selectbio(struct xml_data* data, const char* tag) { BIO* b = NULL; if(strcasecmp(tag, "KeyTag") == 0) b = data->ctag; else if(strcasecmp(tag, "Algorithm") == 0) b = data->calgo; else if(strcasecmp(tag, "DigestType") == 0) b = data->cdigtype; else if(strcasecmp(tag, "Digest") == 0) b = data->cdigest; return b; } /** * XML handle character data, the data inside an element. * @param userData: xml_data structure * @param s: the character data. May not all be in one callback. * NOT zero terminated. * @param len: length of this part of the data. */ static void xml_charhandle(void *userData, const XML_Char *s, int len) { struct xml_data* data = (struct xml_data*)userData; BIO* b = NULL; /* skip characters outside of elements */ if(!data->tag) return; if(verb>=4) { int i; printf("%s%s charhandle: '", data->use_key?"use ":"", data->tag?data->tag:"none"); for(i=0; itag, "Zone") == 0) { if(BIO_write(data->czone, s, len) < 0) { if(verb) printf("out of memory in BIO_write\n"); exit(0); } return; } /* only store if key is used */ if(!data->use_key) return; b = xml_selectbio(data, data->tag); if(b) { if(BIO_write(b, s, len) < 0) { if(verb) printf("out of memory in BIO_write\n"); exit(0); } } } /** * XML fetch value of particular attribute(by name) or NULL if not present. * @param atts: attribute array (from xml_startelem). * @param name: name of attribute to look for. * @return the value or NULL. (ptr into atts). */ static const XML_Char* find_att(const XML_Char **atts, const XML_Char* name) { int i; for(i=0; atts[i]; i+=2) { if(strcasecmp(atts[i], name) == 0) return atts[i+1]; } return NULL; } /** * XML convert DateTime element to time_t. * [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm] * (with optional .ssssss fractional seconds) * @param str: the string * @return a time_t representation or 0 on failure. */ static time_t xml_convertdate(const char* str) { time_t t = 0; struct tm tm; const char* s; /* for this application, ignore minus in front; * only positive dates are expected */ s = str; if(s[0] == '-') s++; memset(&tm, 0, sizeof(tm)); /* parse initial content of the string (lots of whitespace allowed) */ s = strptime(s, "%t%Y%t-%t%m%t-%t%d%tT%t%H%t:%t%M%t:%t%S%t", &tm); if(!s) { if(verb) printf("xml_convertdate parse failure %s\n", str); return 0; } /* parse remainder of date string */ if(*s == '.') { /* optional '.' and fractional seconds */ int frac = 0, n = 0; if(sscanf(s+1, "%d%n", &frac, &n) < 1) { if(verb) printf("xml_convertdate f failure %s\n", str); return 0; } /* fraction is not used, time_t has second accuracy */ s++; s+=n; } if(*s == 'Z' || *s == 'z') { /* nothing to do for this */ s++; } else if(*s == '+' || *s == '-') { /* optional timezone spec: Z or +hh:mm or -hh:mm */ int hr = 0, mn = 0, n = 0; if(sscanf(s+1, "%d:%d%n", &hr, &mn, &n) < 2) { if(verb) printf("xml_convertdate tz failure %s\n", str); return 0; } if(*s == '+') { tm.tm_hour += hr; tm.tm_min += mn; } else { tm.tm_hour -= hr; tm.tm_min -= mn; } s++; s += n; } if(*s != 0) { /* not ended properly */ /* but ignore, (lenient) */ } t = sldns_mktime_from_utc(&tm); if(t == (time_t)-1) { if(verb) printf("xml_convertdate mktime failure\n"); return 0; } return t; } /** * XML handle the KeyDigest start tag, check validity periods. */ static void handle_keydigest(struct xml_data* data, const XML_Char **atts) { data->use_key = 0; if(find_att(atts, "validFrom")) { time_t from = xml_convertdate(find_att(atts, "validFrom")); if(from == 0) { if(verb) printf("error: xml cannot be parsed\n"); exit(0); } if(data->date < from) return; } if(find_att(atts, "validUntil")) { time_t until = xml_convertdate(find_att(atts, "validUntil")); if(until == 0) { if(verb) printf("error: xml cannot be parsed\n"); exit(0); } if(data->date > until) return; } /* yes we want to use this key */ data->use_key = 1; (void)BIO_reset(data->ctag); (void)BIO_reset(data->calgo); (void)BIO_reset(data->cdigtype); (void)BIO_reset(data->cdigest); } /** See if XML element equals the zone name */ static int xml_is_zone_name(BIO* zone, const char* name) { char buf[1024]; char* z = NULL; long zlen; (void)BIO_seek(zone, 0); zlen = BIO_get_mem_data(zone, &z); if(!zlen || !z) return 0; /* zero terminate */ if(zlen >= (long)sizeof(buf)) return 0; memmove(buf, z, (size_t)zlen); buf[zlen] = 0; /* compare */ return (strncasecmp(buf, name, strlen(name)) == 0); } /** * XML start of element. This callback is called whenever an XML tag starts. * XML_Char is UTF8. * @param userData: the xml_data structure. * @param name: the tag that starts. * @param atts: array of strings, pairs of attr = value, ends with NULL. * i.e. att[0]="att[1]" att[2]="att[3]" att[4]isNull */ static void xml_startelem(void *userData, const XML_Char *name, const XML_Char **atts) { struct xml_data* data = (struct xml_data*)userData; BIO* b; if(verb>=4) printf("xml tag start '%s'\n", name); free(data->tag); data->tag = strdup(name); if(!data->tag) { if(verb) printf("out of memory\n"); exit(0); } if(verb>=4) { int i; for(i=0; atts[i]; i+=2) { printf(" %s='%s'\n", atts[i], atts[i+1]); } } /* handle attributes to particular types */ if(strcasecmp(name, "KeyDigest") == 0) { handle_keydigest(data, atts); return; } else if(strcasecmp(name, "Zone") == 0) { (void)BIO_reset(data->czone); return; } /* for other types we prepare to pick up the data */ if(!data->use_key) return; b = xml_selectbio(data, data->tag); if(b) { /* empty it */ (void)BIO_reset(b); } } /** Append str to bio */ static void xml_append_str(BIO* b, const char* s) { if(BIO_write(b, s, (int)strlen(s)) < 0) { if(verb) printf("out of memory in BIO_write\n"); exit(0); } } /** Append bio to bio */ static void xml_append_bio(BIO* b, BIO* a) { char* z = NULL; long i, len; (void)BIO_seek(a, 0); len = BIO_get_mem_data(a, &z); if(!len || !z) { if(verb) printf("out of memory in BIO_write\n"); exit(0); } /* remove newlines in the data here */ for(i=0; ids, ". IN DS "); xml_append_bio(data->ds, data->ctag); xml_append_str(data->ds, " "); xml_append_bio(data->ds, data->calgo); xml_append_str(data->ds, " "); xml_append_bio(data->ds, data->cdigtype); xml_append_str(data->ds, " "); xml_append_bio(data->ds, data->cdigest); xml_append_str(data->ds, "\n"); data->num_keys++; } /** * XML end of element. This callback is called whenever an XML tag ends. * XML_Char is UTF8. * @param userData: the xml_data structure * @param name: the tag that ends. */ static void xml_endelem(void *userData, const XML_Char *name) { struct xml_data* data = (struct xml_data*)userData; if(verb>=4) printf("xml tag end '%s'\n", name); free(data->tag); data->tag = NULL; if(strcasecmp(name, "KeyDigest") == 0) { if(data->use_key) xml_append_ds(data); data->use_key = 0; } else if(strcasecmp(name, "Zone") == 0) { if(!xml_is_zone_name(data->czone, ".")) { if(verb) printf("xml not for the right zone\n"); exit(0); } } } /* Stop the parser when an entity declaration is encountered. For safety. */ static void xml_entitydeclhandler(void *userData, const XML_Char *ATTR_UNUSED(entityName), int ATTR_UNUSED(is_parameter_entity), const XML_Char *ATTR_UNUSED(value), int ATTR_UNUSED(value_length), const XML_Char *ATTR_UNUSED(base), const XML_Char *ATTR_UNUSED(systemId), const XML_Char *ATTR_UNUSED(publicId), const XML_Char *ATTR_UNUSED(notationName)) { #if HAVE_DECL_XML_STOPPARSER (void)XML_StopParser((XML_Parser)userData, XML_FALSE); #else (void)userData; #endif } /** * XML parser setup of the callbacks for the tags */ static void xml_parse_setup(XML_Parser parser, struct xml_data* data, time_t now) { char buf[1024]; memset(data, 0, sizeof(*data)); XML_SetUserData(parser, data); data->parser = parser; data->date = now; data->ds = BIO_new(BIO_s_mem()); data->ctag = BIO_new(BIO_s_mem()); data->czone = BIO_new(BIO_s_mem()); data->calgo = BIO_new(BIO_s_mem()); data->cdigtype = BIO_new(BIO_s_mem()); data->cdigest = BIO_new(BIO_s_mem()); if(!data->ds || !data->ctag || !data->calgo || !data->czone || !data->cdigtype || !data->cdigest) { if(verb) printf("out of memory\n"); exit(0); } snprintf(buf, sizeof(buf), "; created by unbound-anchor on %s", ctime(&now)); if(BIO_write(data->ds, buf, (int)strlen(buf)) < 0) { if(verb) printf("out of memory\n"); exit(0); } XML_SetEntityDeclHandler(parser, xml_entitydeclhandler); XML_SetElementHandler(parser, xml_startelem, xml_endelem); XML_SetCharacterDataHandler(parser, xml_charhandle); } /** * Perform XML parsing of the root-anchors file * Its format description can be read here * https://data.iana.org/root-anchors/draft-icann-dnssec-trust-anchor.txt * It uses libexpat. * @param xml: BIO with xml data. * @param now: the current time for checking DS validity periods. * @return memoryBIO with the DS data in zone format. * or NULL if the zone is insecure. * (It exit()s on error) */ static BIO* xml_parse(BIO* xml, time_t now) { char* pp; int len; XML_Parser parser; struct xml_data data; parser = XML_ParserCreate(NULL); if(!parser) { if(verb) printf("could not XML_ParserCreate\n"); exit(0); } /* setup callbacks */ xml_parse_setup(parser, &data, now); /* parse it */ (void)BIO_seek(xml, 0); len = (int)BIO_get_mem_data(xml, &pp); if(!len || !pp) { if(verb) printf("out of memory\n"); exit(0); } if(!XML_Parse(parser, pp, len, 1 /*isfinal*/ )) { const char *e = XML_ErrorString(XML_GetErrorCode(parser)); if(verb) printf("XML_Parse failure %s\n", e?e:""); exit(0); } /* parsed */ if(verb) printf("XML was parsed successfully, %d keys\n", data.num_keys); free(data.tag); XML_ParserFree(parser); if(verb >= 4) { (void)BIO_seek(data.ds, 0); len = BIO_get_mem_data(data.ds, &pp); printf("got DS bio %d: '", len); if(!fwrite(pp, (size_t)len, 1, stdout)) /* compilers do not allow us to ignore fwrite .. */ fprintf(stderr, "error writing to stdout\n"); printf("'\n"); } BIO_free(data.czone); BIO_free(data.ctag); BIO_free(data.calgo); BIO_free(data.cdigtype); BIO_free(data.cdigest); if(data.num_keys == 0) { /* the root zone seems to have gone insecure */ BIO_free(data.ds); return NULL; } else { return data.ds; } } /* get key usage out of its extension, returns 0 if no key_usage extension */ static unsigned long get_usage_of_ex(X509* cert) { unsigned long val = 0; ASN1_BIT_STRING* s; if((s=X509_get_ext_d2i(cert, NID_key_usage, NULL, NULL))) { if(s->length > 0) { val = s->data[0]; if(s->length > 1) val |= s->data[1] << 8; } ASN1_BIT_STRING_free(s); } return val; } /** get valid signers from the list of signers in the signature */ static STACK_OF(X509)* get_valid_signers(PKCS7* p7, const char* p7signer) { int i; STACK_OF(X509)* validsigners = sk_X509_new_null(); STACK_OF(X509)* signers = PKCS7_get0_signers(p7, NULL, 0); unsigned long usage = 0; if(!validsigners) { if(verb) printf("out of memory\n"); sk_X509_free(signers); return NULL; } if(!signers) { if(verb) printf("no signers in pkcs7 signature\n"); sk_X509_free(validsigners); return NULL; } for(i=0; i= 3 && X509_NAME_get_text_by_NID(nm, NID_commonName, buf, (int)sizeof(buf))) printf("commonName: %s\n", buf); if(verb >= 3 && X509_NAME_get_text_by_NID(nm, NID_pkcs9_emailAddress, buf, (int)sizeof(buf))) printf("emailAddress: %s\n", buf); } if(verb) { int ku_loc = X509_get_ext_by_NID( sk_X509_value(signers, i), NID_key_usage, -1); if(verb >= 3 && ku_loc >= 0) { X509_EXTENSION *ex = X509_get_ext( sk_X509_value(signers, i), ku_loc); if(ex) { printf("keyUsage: "); X509V3_EXT_print_fp(stdout, ex, 0, 0); printf("\n"); } } } if(!p7signer || strcmp(p7signer, "")==0) { /* there is no name to check, return all records */ if(verb) printf("did not check commonName of signer\n"); } else { if(!X509_NAME_get_text_by_NID(nm, NID_pkcs9_emailAddress, buf, (int)sizeof(buf))) { if(verb) printf("removed cert with no name\n"); continue; /* no name, no use */ } if(strcmp(buf, p7signer) != 0) { if(verb) printf("removed cert with wrong name\n"); continue; /* wrong name, skip it */ } } /* check that the key usage allows digital signatures * (the p7s) */ usage = get_usage_of_ex(sk_X509_value(signers, i)); if(!(usage & KU_DIGITAL_SIGNATURE)) { if(verb) printf("removed cert with no key usage Digital Signature allowed\n"); continue; } /* we like this cert, add it to our list of valid * signers certificates */ sk_X509_push(validsigners, sk_X509_value(signers, i)); } sk_X509_free(signers); return validsigners; } /** verify a PKCS7 signature, false on failure */ static int verify_p7sig(BIO* data, BIO* p7s, STACK_OF(X509)* trust, const char* p7signer) { PKCS7* p7; X509_STORE *store = X509_STORE_new(); STACK_OF(X509)* validsigners; int secure = 0; int i; #ifdef X509_V_FLAG_CHECK_SS_SIGNATURE X509_VERIFY_PARAM* param = X509_VERIFY_PARAM_new(); if(!param) { if(verb) printf("out of memory\n"); X509_STORE_free(store); return 0; } /* do the selfcheck on the root certificate; it checks that the * input is valid */ X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CHECK_SS_SIGNATURE); if(store) X509_STORE_set1_param(store, param); #endif if(!store) { if(verb) printf("out of memory\n"); #ifdef X509_V_FLAG_CHECK_SS_SIGNATURE X509_VERIFY_PARAM_free(param); #endif return 0; } #ifdef X509_V_FLAG_CHECK_SS_SIGNATURE X509_VERIFY_PARAM_free(param); #endif (void)BIO_seek(p7s, 0); (void)BIO_seek(data, 0); /* convert p7s to p7 (the signature) */ p7 = d2i_PKCS7_bio(p7s, NULL); if(!p7) { if(verb) printf("could not parse p7s signature file\n"); X509_STORE_free(store); return 0; } if(verb >= 2) printf("parsed the PKCS7 signature\n"); /* convert trust to trusted certificate store */ for(i=0; i= 2) printf("setup the X509_STORE\n"); /* check what is in the Subject name of the certificates, * and build a stack that contains only the right certificates */ validsigners = get_valid_signers(p7, p7signer); if(!validsigners) { X509_STORE_free(store); PKCS7_free(p7); return 0; } if(PKCS7_verify(p7, validsigners, store, data, NULL, PKCS7_NOINTERN) == 1) { secure = 1; if(verb) printf("the PKCS7 signature verified\n"); } else { if(verb) { ERR_print_errors_fp(stdout); } } sk_X509_free(validsigners); X509_STORE_free(store); PKCS7_free(p7); return secure; } /** write unsigned root anchor file, a 5011 revoked tp */ static void write_unsigned_root(const char* root_anchor_file) { FILE* out; time_t now = time(NULL); out = fopen(root_anchor_file, "w"); if(!out) { if(verb) printf("%s: %s\n", root_anchor_file, strerror(errno)); return; } if(fprintf(out, "; autotrust trust anchor file\n" ";;REVOKED\n" ";;id: . 1\n" "; This file was written by unbound-anchor on %s" "; It indicates that the root does not use DNSSEC\n" "; to restart DNSSEC overwrite this file with a\n" "; valid trustanchor or (empty-it and run unbound-anchor)\n" , ctime(&now)) < 0) { if(verb) printf("failed to write 'unsigned' to %s\n", root_anchor_file); if(verb && errno != 0) printf("%s\n", strerror(errno)); } fflush(out); #ifdef HAVE_FSYNC fsync(fileno(out)); #else FlushFileBuffers((HANDLE)_get_osfhandle(_fileno(out))); #endif fclose(out); } /** write root anchor file */ static void write_root_anchor(const char* root_anchor_file, BIO* ds) { char* pp = NULL; int len; FILE* out; (void)BIO_seek(ds, 0); len = BIO_get_mem_data(ds, &pp); if(!len || !pp) { if(verb) printf("out of memory\n"); return; } out = fopen(root_anchor_file, "w"); if(!out) { if(verb) printf("%s: %s\n", root_anchor_file, strerror(errno)); return; } if(fwrite(pp, (size_t)len, 1, out) != 1) { if(verb) printf("failed to write all data to %s\n", root_anchor_file); if(verb && errno != 0) printf("%s\n", strerror(errno)); } fflush(out); #ifdef HAVE_FSYNC fsync(fileno(out)); #else FlushFileBuffers((HANDLE)_get_osfhandle(_fileno(out))); #endif fclose(out); } /** Perform the verification and update of the trustanchor file */ static void verify_and_update_anchor(const char* root_anchor_file, BIO* xml, BIO* p7s, STACK_OF(X509)* cert, const char* p7signer) { BIO* ds; /* verify xml file */ if(!verify_p7sig(xml, p7s, cert, p7signer)) { printf("the PKCS7 signature failed\n"); exit(0); } /* parse the xml file into DS records */ ds = xml_parse(xml, time(NULL)); if(!ds) { /* the root zone is unsigned now */ write_unsigned_root(root_anchor_file); } else { /* reinstate 5011 tracking */ write_root_anchor(root_anchor_file, ds); } BIO_free(ds); } #ifdef USE_WINSOCK static void do_wsa_cleanup(void) { WSACleanup(); } #endif /** perform actual certupdate work */ static int do_certupdate(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, int port, int use_sni) { STACK_OF(X509)* cert; BIO *xml, *p7s; struct ip_list* ip_list = NULL; struct ip_list* src = NULL; /* read pem file or provide builtin */ cert = read_cert_or_builtin(root_cert_file); /* lookup A, AAAA for the urlname (or parse urlname if IP address) */ ip_list = resolve_name(urlname, port, res_conf, root_hints, debugconf, srcaddr, ip4only, ip6only); if(srcaddr && !(src = parse_ip_addr(srcaddr, 0))) { if(verb) printf("cannot parse source address: %s\n", srcaddr); exit(0); } #ifdef USE_WINSOCK if(1) { /* libunbound finished, startup WSA for the https connection */ WSADATA wsa_data; int r; if((r = WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0) { if(verb) printf("WSAStartup failed: %s\n", wsa_strerror(r)); exit(0); } atexit(&do_wsa_cleanup); } #endif /* fetch the necessary files over HTTPS */ xml = https(ip_list, xmlname, urlname, src, use_sni); p7s = https(ip_list, p7sname, urlname, src, use_sni); /* verify and update the root anchor */ verify_and_update_anchor(root_anchor_file, xml, p7s, cert, p7signer); if(verb) printf("success: the anchor has been updated " "using the cert\n"); BIO_free(xml); BIO_free(p7s); #ifndef S_SPLINT_S sk_X509_pop_free(cert, X509_free); #endif ip_list_free(ip_list); return 1; } /** * Try to read the root RFC5011 autotrust anchor file, * @param file: filename. * @return: * 0 if does not exist or empty * 1 if trust-point-revoked-5011 * 2 if it is OK. */ static int try_read_anchor(const char* file) { int empty = 1; char line[10240]; char* p; FILE* in = fopen(file, "r"); if(!in) { /* only if the file does not exist, can we fix it */ if(errno != ENOENT) { if(verb) printf("%s: %s\n", file, strerror(errno)); if(verb) printf("error: cannot access the file\n"); exit(0); } if(verb) printf("%s does not exist\n", file); return 0; } while(fgets(line, (int)sizeof(line), in)) { line[sizeof(line)-1] = 0; if(strncmp(line, ";;REVOKED", 9) == 0) { fclose(in); if(verb) printf("%s : the trust point is revoked\n" "and the zone is considered unsigned.\n" "if you wish to re-enable, delete the file\n", file); return 1; } p=line; while(*p == ' ' || *p == '\t') p++; if(p[0]==0 || p[0]=='\n' || p[0]==';') continue; /* this line is a line of content */ empty = 0; } fclose(in); if(empty) { if(verb) printf("%s is empty\n", file); return 0; } if(verb) printf("%s has content\n", file); return 2; } /** Write the builtin root anchor to a file */ static void write_builtin_anchor(const char* file) { const char* builtin_root_anchor = get_builtin_ds(); FILE* out = fopen(file, "w"); if(!out) { if(verb) printf("%s: %s\n", file, strerror(errno)); if(verb) printf(" could not write builtin anchor\n"); return; } if(!fwrite(builtin_root_anchor, strlen(builtin_root_anchor), 1, out)) { if(verb) printf("%s: %s\n", file, strerror(errno)); if(verb) printf(" could not complete write builtin anchor\n"); } fclose(out); } /** * Check the root anchor file. * If does not exist, provide builtin and write file. * If empty, provide builtin and write file. * If trust-point-revoked-5011 file: make the program exit. * @param root_anchor_file: filename of the root anchor. * @param used_builtin: set to 1 if the builtin is written. * @return 0 if trustpoint is insecure, 1 on success. Exit on failure. */ static int provide_builtin(const char* root_anchor_file, int* used_builtin) { /* try to read it */ switch(try_read_anchor(root_anchor_file)) { case 0: /* no exist or empty */ write_builtin_anchor(root_anchor_file); *used_builtin = 1; break; case 1: /* revoked tp */ return 0; case 2: /* it is fine */ default: break; } return 1; } /** * add an autotrust anchor for the root to the context */ static void add_5011_probe_root(struct ub_ctx* ctx, const char* root_anchor_file) { int r; r = ub_ctx_set_option(ctx, "auto-trust-anchor-file:", root_anchor_file); if(r) { if(verb) printf("add 5011 probe to ctx: %s\n", ub_strerror(r)); ub_ctx_delete(ctx); exit(0); } } /** * Prime the root key and return the result. Exit on error. * @param ctx: the unbound context to perform the priming with. * @return: the result of the prime, on error it exit()s. */ static struct ub_result* prime_root_key(struct ub_ctx* ctx) { struct ub_result* res = NULL; int r; r = ub_resolve(ctx, ".", LDNS_RR_TYPE_DNSKEY, LDNS_RR_CLASS_IN, &res); if(r) { if(verb) printf("resolve DNSKEY: %s\n", ub_strerror(r)); ub_ctx_delete(ctx); exit(0); } if(!res) { if(verb) printf("out of memory\n"); ub_ctx_delete(ctx); exit(0); } return res; } /** see if ADDPEND keys exist in autotrust file (if possible) */ static int read_if_pending_keys(const char* file) { FILE* in = fopen(file, "r"); char line[8192]; if(!in) { if(verb>=2) printf("%s: %s\n", file, strerror(errno)); return 0; } while(fgets(line, (int)sizeof(line), in)) { if(line[0]==';') continue; if(strstr(line, "[ ADDPEND ]")) { fclose(in); if(verb) printf("RFC5011-state has ADDPEND keys\n"); return 1; } } fclose(in); return 0; } /** read last successful probe time from autotrust file (if possible) */ static int32_t read_last_success_time(const char* file) { FILE* in = fopen(file, "r"); char line[1024]; if(!in) { if(verb) printf("%s: %s\n", file, strerror(errno)); return 0; } while(fgets(line, (int)sizeof(line), in)) { if(strncmp(line, ";;last_success: ", 16) == 0) { char* e; time_t x = (unsigned int)strtol(line+16, &e, 10); fclose(in); if(line+16 == e) { if(verb) printf("failed to parse " "last_success probe time\n"); return 0; } if(verb) printf("last successful probe: %s", ctime(&x)); return (int32_t)x; } } fclose(in); if(verb) printf("no last_success probe time in anchor file\n"); return 0; } /** * Read autotrust 5011 probe file and see if the date * compared to the current date allows a certupdate. * If the last successful probe was recent then 5011 cannot be behind, * and the failure cannot be solved with a certupdate. * The debugconf is to validation-override the date for testing. * @param root_anchor_file: filename of root key * @return true if certupdate is ok. */ static int probe_date_allows_certupdate(const char* root_anchor_file) { int has_pending_keys = read_if_pending_keys(root_anchor_file); int32_t last_success = read_last_success_time(root_anchor_file); int32_t now = (int32_t)time(NULL); int32_t leeway = 30 * 24 * 3600; /* 30 days leeway */ /* if the date is before 2010-07-15:00.00.00 then the root has not * been signed yet, and thus we refuse to take action. */ if(time(NULL) < xml_convertdate("2010-07-15T00:00:00")) { if(verb) printf("the date is before the root was first signed," " please correct the clock\n"); return 0; } if(last_success == 0) return 1; /* no probe time */ if(has_pending_keys) return 1; /* key in ADDPEND state, a previous probe has inserted that, and it was present in all recent probes, but it has not become active. The 30 day timer may not have expired, but we know(for sure) there is a rollover going on. If we only managed to pickup the new key on its last day of announcement (for example) this can happen. */ if(now - last_success < 0) { if(verb) printf("the last successful probe is in the future," " clock was modified\n"); return 0; } if(now - last_success >= leeway) { if(verb) printf("the last successful probe was more than 30 " "days ago\n"); return 1; } if(verb) printf("the last successful probe is recent\n"); return 0; } static struct ub_result * fetch_root_key(const char* root_anchor_file, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only) { struct ub_ctx* ctx; struct ub_result* dnskey; ctx = create_unbound_context(res_conf, root_hints, debugconf, srcaddr, ip4only, ip6only); add_5011_probe_root(ctx, root_anchor_file); dnskey = prime_root_key(ctx); ub_ctx_delete(ctx); return dnskey; } /** perform the unbound-anchor work */ static int do_root_update_work(const char* root_anchor_file, const char* root_cert_file, const char* urlname, const char* xmlname, const char* p7sname, const char* p7signer, const char* res_conf, const char* root_hints, const char* debugconf, const char* srcaddr, int ip4only, int ip6only, int force, int res_conf_fallback, int port, int use_sni) { struct ub_result* dnskey; int used_builtin = 0; int rcode; /* see if builtin rootanchor needs to be provided, or if * rootanchor is 'revoked-trust-point' */ if(!provide_builtin(root_anchor_file, &used_builtin)) return 0; /* make unbound context with 5011-probe for root anchor, * and probe . DNSKEY */ dnskey = fetch_root_key(root_anchor_file, res_conf, root_hints, debugconf, srcaddr, ip4only, ip6only); rcode = dnskey->rcode; if (res_conf_fallback && res_conf && !dnskey->secure) { if (verb) printf("%s failed, retrying direct\n", res_conf); ub_resolve_free(dnskey); /* try direct query without res_conf */ dnskey = fetch_root_key(root_anchor_file, NULL, root_hints, debugconf, srcaddr, ip4only, ip6only); if (rcode != 0 && dnskey->rcode == 0) { res_conf = NULL; rcode = 0; } } /* if secure: exit */ if(dnskey->secure && !force) { if(verb) printf("success: the anchor is ok\n"); ub_resolve_free(dnskey); return used_builtin; } if(force && verb) printf("debug cert update forced\n"); ub_resolve_free(dnskey); /* if not (and NOERROR): check date and do certupdate */ if((rcode == 0 && probe_date_allows_certupdate(root_anchor_file)) || force) { if(do_certupdate(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, debugconf, srcaddr, ip4only, ip6only, port, use_sni)) return 1; return used_builtin; } if(verb) printf("fail: the anchor is NOT ok and could not be fixed\n"); return used_builtin; } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** Main routine for unbound-anchor */ int main(int argc, char* argv[]) { int c; const char* root_anchor_file = ROOT_ANCHOR_FILE; const char* root_cert_file = ROOT_CERT_FILE; const char* urlname = URLNAME; const char* xmlname = XMLNAME; const char* p7sname = P7SNAME; const char* p7signer = P7SIGNER; const char* res_conf = NULL; const char* root_hints = NULL; const char* debugconf = NULL; const char* srcaddr = NULL; int dolist=0, ip4only=0, ip6only=0, force=0, port = HTTPS_PORT; int res_conf_fallback = 0; int use_sni = 1; /* parse the options */ while( (c=getopt(argc, argv, "46C:FRSP:a:b:c:f:hln:r:s:u:vx:")) != -1) { switch(c) { case 'l': dolist = 1; break; case '4': ip4only = 1; break; case '6': ip6only = 1; break; case 'a': root_anchor_file = optarg; break; case 'b': srcaddr = optarg; break; case 'c': root_cert_file = optarg; break; case 'u': urlname = optarg; break; case 'S': use_sni = 0; break; case 'x': xmlname = optarg; break; case 's': p7sname = optarg; break; case 'n': p7signer = optarg; break; case 'f': res_conf = optarg; break; case 'r': root_hints = optarg; break; case 'R': res_conf_fallback = 1; break; case 'C': debugconf = optarg; break; case 'F': force = 1; break; case 'P': port = atoi(optarg); break; case 'v': verb++; break; case '?': case 'h': default: usage(); } } argc -= optind; /* argv += optind; not using further arguments */ if(argc != 0) usage(); #ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) # ifndef S_SPLINT_S OpenSSL_add_all_algorithms(); # endif #else OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif if(dolist) do_list_builtin(); return do_root_update_work(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, p7signer, res_conf, root_hints, debugconf, srcaddr, ip4only, ip6only, force, res_conf_fallback, port, use_sni); } unbound-1.13.1/smallapp/worker_cb.c0000644000175000017500000001636014010434640016637 0ustar wouterwouter/* * checkconf/worker_cb.c - fake callback routines to make fptr_wlist work * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains fake callback functions, so that the symbols exist * and the fptr_wlist continues to work even if the daemon/worker is not * linked into the resulting program. */ #include "config.h" #include "libunbound/context.h" #include "libunbound/worker.h" #include "util/fptr_wlist.h" #include "util/log.h" #include "services/mesh.h" #ifdef USE_DNSTAP #include "dnstap/dtstream.h" #endif void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) { log_assert(0); } int worker_handle_request(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } int worker_handle_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int worker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int remote_accept_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } int remote_control_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg)) { log_assert(0); } struct outbound_entry* worker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) { log_assert(0); return 0; } #ifdef UB_ON_WINDOWS void worker_win_stop_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } void wsvc_cron_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } #endif /* UB_ON_WINDOWS */ void worker_alloc_cleanup(void* ATTR_UNUSED(arg)) { log_assert(0); } struct outbound_entry* libworker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) { log_assert(0); return 0; } int libworker_handle_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int libworker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } void libworker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) { log_assert(0); } void libworker_fg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } void libworker_bg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } void libworker_event_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } int context_query_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } void worker_stat_timer_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_probe_timer_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_start_accept(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_stop_accept(void* ATTR_UNUSED(arg)) { log_assert(0); } /** keep track of lock id in lock-verify application */ struct order_id { /** the thread id that created it */ int thr; /** the instance number of creation */ int instance; }; int order_lock_cmp(const void* e1, const void* e2) { const struct order_id* o1 = e1; const struct order_id* o2 = e2; if(o1->thr < o2->thr) return -1; if(o1->thr > o2->thr) return 1; if(o1->instance < o2->instance) return -1; if(o1->instance > o2->instance) return 1; return 0; } int codeline_cmp(const void* a, const void* b) { return strcmp(a, b); } int replay_var_compare(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } void remote_get_opt_ssl(char* ATTR_UNUSED(str), void* ATTR_UNUSED(arg)) { log_assert(0); } #ifdef USE_DNSTAP void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } #endif #ifdef USE_DNSTAP void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } #endif unbound-1.13.1/smallapp/unbound-host.c0000644000175000017500000003406314010434640017307 0ustar wouterwouter/* * checkconf/unbound-host.c - replacement for host that supports validation. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file performs functionality like 'host', and also supports validation. * It uses the libunbound library. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif /* remove alloc checks, not in this part of the code */ #ifdef UNBOUND_ALLOC_STATS #undef malloc #undef calloc #undef free #undef realloc #endif #ifdef UNBOUND_ALLOC_LITE #undef malloc #undef calloc #undef free #undef realloc #undef strdup #define unbound_lite_wrapstr(s) s #endif #include "libunbound/unbound.h" #include "sldns/rrdef.h" #include "sldns/wire2str.h" #ifdef HAVE_NSS /* nss3 */ #include "nss.h" #endif #ifdef HAVE_SSL #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif #endif /* HAVE_SSL */ /** verbosity for unbound-host app */ static int verb = 0; /** Give unbound-host usage, and exit (1). */ static void usage(void) { printf("Usage: unbound-host [-C configfile] [-vdhr46] [-c class] [-t type]\n"); printf(" [-y key] [-f keyfile] [-F namedkeyfile] hostname\n"); printf(" Queries the DNS for information.\n"); printf(" The hostname is looked up for IP4, IP6 and mail.\n"); printf(" If an ip-address is given a reverse lookup is done.\n"); printf(" Use the -v option to see DNSSEC security information.\n"); printf(" -t type what type to look for.\n"); printf(" -c class what class to look for, if not class IN.\n"); printf(" -y 'keystring' specify trust anchor, DS or DNSKEY, like\n"); printf(" -y 'example.com DS 31560 5 1 1CFED8478...'\n"); printf(" -D DNSSEC enable with default root anchor\n"); printf(" from %s\n", ROOT_ANCHOR_FILE); printf(" -f keyfile read trust anchors from file, with lines as -y.\n"); printf(" -F keyfile read named.conf-style trust anchors.\n"); printf(" -C config use the specified unbound.conf (none read by default)\n"); printf(" pass as first argument if you want to override some\n"); printf(" options with further arguments\n"); printf(" -r read forwarder information from /etc/resolv.conf\n"); printf(" breaks validation if the forwarder does not do DNSSEC.\n"); printf(" -v be more verbose, shows nodata and security.\n"); printf(" -d debug, traces the action, -d -d shows more.\n"); printf(" -4 use ipv4 network, avoid ipv6.\n"); printf(" -6 use ipv6 network, avoid ipv4.\n"); printf(" -h show this usage help.\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); exit(1); } /** determine if str is ip4 and put into reverse lookup format */ static int isip4(const char* nm, char** res) { struct in_addr addr; /* ddd.ddd.ddd.ddd.in-addr.arpa. is less than 32 */ char buf[32]; if(inet_pton(AF_INET, nm, &addr) <= 0) { return 0; } snprintf(buf, sizeof(buf), "%u.%u.%u.%u.in-addr.arpa", (unsigned)((uint8_t*)&addr)[3], (unsigned)((uint8_t*)&addr)[2], (unsigned)((uint8_t*)&addr)[1], (unsigned)((uint8_t*)&addr)[0]); *res = strdup(buf); return 1; } /** determine if str is ip6 and put into reverse lookup format */ static int isip6(const char* nm, char** res) { struct in6_addr addr; /* [nibble.]{32}.ip6.arpa. is less than 128 */ const char* hex = "0123456789abcdef"; char buf[128]; char *p; int i; if(inet_pton(AF_INET6, nm, &addr) <= 0) { return 0; } p = buf; for(i=15; i>=0; i--) { uint8_t b = ((uint8_t*)&addr)[i]; *p++ = hex[ (b&0x0f) ]; *p++ = '.'; *p++ = hex[ (b&0xf0) >> 4 ]; *p++ = '.'; } snprintf(buf+16*4, sizeof(buf)-16*4, "ip6.arpa"); *res = strdup(buf); if(!*res) { fprintf(stderr, "error: out of memory\n"); exit(1); } return 1; } /** massage input name */ static char* massage_qname(const char* nm, int* reverse) { /* recognise IP4 and IP6, create reverse addresses if needed */ char* res; if(isip4(nm, &res)) { *reverse = 1; } else if(isip6(nm, &res)) { *reverse = 1; } else { res = strdup(nm); } if(!res) { fprintf(stderr, "error: out of memory\n"); exit(1); } return res; } /** massage input type */ static int massage_type(const char* t, int reverse, int* multi) { if(t) { int r = sldns_get_rr_type_by_name(t); if(r == 0 && strcasecmp(t, "TYPE0") != 0 && strcmp(t, "") != 0) { fprintf(stderr, "error unknown type %s\n", t); exit(1); } return r; } if(!t && reverse) return LDNS_RR_TYPE_PTR; *multi = 1; return LDNS_RR_TYPE_A; } /** massage input class */ static int massage_class(const char* c) { if(c) { int r = sldns_get_rr_class_by_name(c); if(r == 0 && strcasecmp(c, "CLASS0") != 0 && strcmp(c, "") != 0) { fprintf(stderr, "error unknown class %s\n", c); exit(1); } return r; } return LDNS_RR_CLASS_IN; } /** nice security status string */ static const char* secure_str(struct ub_result* result) { if(result->rcode != 0 && result->rcode != 3) return "(error)"; if(result->secure) return "(secure)"; if(result->bogus) return "(BOGUS (security failure))"; return "(insecure)"; } /** nice string for type */ static void pretty_type(char* s, size_t len, int t) { char d[16]; sldns_wire2str_type_buf((uint16_t)t, d, sizeof(d)); snprintf(s, len, "%s", d); } /** nice string for class */ static void pretty_class(char* s, size_t len, int c) { char d[16]; sldns_wire2str_class_buf((uint16_t)c, d, sizeof(d)); snprintf(s, len, "%s", d); } /** nice string for rcode */ static void pretty_rcode(char* s, size_t len, int r) { char d[16]; sldns_wire2str_rcode_buf(r, d, sizeof(d)); snprintf(s, len, "%s", d); } /** convert and print rdata */ static void print_rd(int t, char* data, size_t len) { char s[65535]; sldns_wire2str_rdata_buf((uint8_t*)data, len, s, sizeof(s), (uint16_t)t); printf(" %s", s); } /** pretty line of RR data for results */ static void pretty_rdata(char* q, char* cstr, char* tstr, int t, const char* sec, char* data, size_t len) { printf("%s", q); if(strcmp(cstr, "IN") != 0) printf(" in class %s", cstr); if(t == LDNS_RR_TYPE_A) printf(" has address"); else if(t == LDNS_RR_TYPE_AAAA) printf(" has IPv6 address"); else if(t == LDNS_RR_TYPE_MX) printf(" mail is handled by"); else if(t == LDNS_RR_TYPE_PTR) printf(" domain name pointer"); else printf(" has %s record", tstr); print_rd(t, data, len); if(verb > 0) printf(" %s", sec); printf("\n"); } /** pretty line of output for results */ static void pretty_output(char* q, int t, int c, struct ub_result* result, int docname) { int i; const char *secstatus = secure_str(result); char tstr[16]; char cstr[16]; char rcodestr[16]; pretty_type(tstr, 16, t); pretty_class(cstr, 16, c); pretty_rcode(rcodestr, 16, result->rcode); if(!result->havedata && result->rcode) { printf("Host %s not found: %d(%s).", q, result->rcode, rcodestr); if(verb > 0) printf(" %s", secstatus); printf("\n"); if(result->bogus && result->why_bogus) printf("%s\n", result->why_bogus); return; } if(docname && result->canonname && result->canonname != result->qname) { printf("%s is an alias for %s", result->qname, result->canonname); if(verb > 0) printf(" %s", secstatus); printf("\n"); } /* remove trailing . from long canonnames for nicer output */ if(result->canonname && strlen(result->canonname) > 1 && result->canonname[strlen(result->canonname)-1] == '.') result->canonname[strlen(result->canonname)-1] = 0; if(!result->havedata) { if(verb > 0) { printf("%s", result->canonname?result->canonname:q); if(strcmp(cstr, "IN") != 0) printf(" in class %s", cstr); if(t == LDNS_RR_TYPE_A) printf(" has no address"); else if(t == LDNS_RR_TYPE_AAAA) printf(" has no IPv6 address"); else if(t == LDNS_RR_TYPE_PTR) printf(" has no domain name ptr"); else if(t == LDNS_RR_TYPE_MX) printf(" has no mail handler record"); else if(t == LDNS_RR_TYPE_ANY) { char* s = sldns_wire2str_pkt( result->answer_packet, (size_t)result->answer_len); if(!s) { fprintf(stderr, "alloc failure\n"); exit(1); } printf("%s\n", s); free(s); } else printf(" has no %s record", tstr); printf(" %s\n", secstatus); } /* else: emptiness to indicate no data */ if(result->bogus && result->why_bogus) printf("%s\n", result->why_bogus); return; } i=0; while(result->data[i]) { pretty_rdata( result->canonname?result->canonname:q, cstr, tstr, t, secstatus, result->data[i], (size_t)result->len[i]); i++; } if(result->bogus && result->why_bogus) printf("%s\n", result->why_bogus); } /** perform a lookup and printout return if domain existed */ static int dnslook(struct ub_ctx* ctx, char* q, int t, int c, int docname) { int ret; struct ub_result* result; ret = ub_resolve(ctx, q, t, c, &result); if(ret != 0) { fprintf(stderr, "resolve error: %s\n", ub_strerror(ret)); exit(1); } pretty_output(q, t, c, result, docname); ret = result->nxdomain; ub_resolve_free(result); return ret; } /** perform host lookup */ static void lookup(struct ub_ctx* ctx, const char* nm, const char* qt, const char* qc) { /* massage input into a query name, type and class */ int multi = 0; /* no type, so do A, AAAA, MX */ int reverse = 0; /* we are doing a reverse lookup */ char* realq = massage_qname(nm, &reverse); int t = massage_type(qt, reverse, &multi); int c = massage_class(qc); /* perform the query */ if(multi) { if(!dnslook(ctx, realq, LDNS_RR_TYPE_A, c, 1)) { /* domain exists, lookup more */ (void)dnslook(ctx, realq, LDNS_RR_TYPE_AAAA, c, 0); (void)dnslook(ctx, realq, LDNS_RR_TYPE_MX, c, 0); } } else { (void)dnslook(ctx, realq, t, c, 1); } ub_ctx_delete(ctx); free(realq); } /** print error if any */ static void check_ub_res(int r) { if(r != 0) { fprintf(stderr, "error: %s\n", ub_strerror(r)); exit(1); } } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** Main routine for unbound-host */ int main(int argc, char* argv[]) { int c; char* qclass = NULL; char* qtype = NULL; char* use_syslog = NULL; struct ub_ctx* ctx = NULL; int debuglevel = 0; ctx = ub_ctx_create(); if(!ctx) { fprintf(stderr, "error: out of memory\n"); exit(1); } /* no need to fetch additional targets, we only do few lookups */ check_ub_res(ub_ctx_set_option(ctx, "target-fetch-policy:", "0 0 0 0 0")); /* parse the options */ while( (c=getopt(argc, argv, "46DF:c:df:hrt:vy:C:")) != -1) { switch(c) { case '4': check_ub_res(ub_ctx_set_option(ctx, "do-ip6:", "no")); break; case '6': check_ub_res(ub_ctx_set_option(ctx, "do-ip4:", "no")); break; case 'c': qclass = optarg; break; case 'C': check_ub_res(ub_ctx_config(ctx, optarg)); break; case 'D': check_ub_res(ub_ctx_add_ta_file(ctx, ROOT_ANCHOR_FILE)); break; case 'd': debuglevel++; if(debuglevel < 2) debuglevel = 2; /* at least VERB_DETAIL */ break; case 'r': check_ub_res(ub_ctx_resolvconf(ctx, "/etc/resolv.conf")); break; case 't': qtype = optarg; break; case 'v': verb++; break; case 'y': check_ub_res(ub_ctx_add_ta(ctx, optarg)); break; case 'f': check_ub_res(ub_ctx_add_ta_file(ctx, optarg)); break; case 'F': check_ub_res(ub_ctx_trustedkeys(ctx, optarg)); break; case '?': case 'h': default: usage(); } } if(debuglevel != 0) /* set after possible -C options */ check_ub_res(ub_ctx_debuglevel(ctx, debuglevel)); if(ub_ctx_get_option(ctx, "use-syslog", &use_syslog) == 0) { if(strcmp(use_syslog, "yes") == 0) /* disable use-syslog */ check_ub_res(ub_ctx_set_option(ctx, "use-syslog:", "no")); free(use_syslog); } argc -= optind; argv += optind; if(argc != 1) usage(); #ifdef HAVE_SSL #ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) # ifndef S_SPLINT_S OpenSSL_add_all_algorithms(); # endif #else OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif #endif /* HAVE_SSL */ #ifdef HAVE_NSS if(NSS_NoDB_Init(".") != SECSuccess) { fprintf(stderr, "could not init NSS\n"); return 1; } #endif lookup(ctx, argv[0], qtype, qclass); return 0; } unbound-1.13.1/smallapp/unbound-control-setup.sh.in0000644000175000017500000001355614010434640021751 0ustar wouterwouter#!/bin/sh # # unbound-control-setup.sh - set up SSL certificates for unbound-control # # Copyright (c) 2008, NLnet Labs. All rights reserved. # # This software is open source. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # Neither the name of the NLNET LABS nor the names of its contributors may # be used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # settings: # directory for files DESTDIR=@ub_conf_dir@ # issuer and subject name for certificates SERVERNAME=unbound CLIENTNAME=unbound-control # validity period for certificates DAYS=7200 # size of keys in bits BITS=3072 # hash algorithm HASH=sha256 # base name for unbound server keys SVR_BASE=unbound_server # base name for unbound-control keys CTL_BASE=unbound_control # flag to recreate generated certificates RECREATE=0 # we want -rw-r----- access (say you run this as root: grp=yes (server), all=no). umask 0027 # end of options set -eu cleanup() { echo "removing artifacts" rm -rf \ server.cnf \ client.cnf \ "${SVR_BASE}_trust.pem" \ "${CTL_BASE}_trust.pem" \ "${SVR_BASE}_trust.srl" } fatal() { printf "fatal error: $*\n" >/dev/stderr exit 1 } usage() { cat < used directory to store keys and certificates (default: $DESTDIR) -h show help notice -r recreate certificates EOF } OPTIND=1 while getopts 'd:hr' arg; do case "$arg" in d) DESTDIR="$OPTARG" ;; h) usage; exit 1 ;; r) RECREATE=1 ;; ?) fatal "'$arg' unknown option" ;; esac done shift $((OPTIND - 1)) echo "setup in directory $DESTDIR" cd "$DESTDIR" trap cleanup INT # === # Generate server certificate # === # generate private key; do no recreate it if they already exist. if [ ! -f "$SVR_BASE.key" ]; then openssl genrsa -out "$SVR_BASE.key" "$BITS" fi cat >server.cnf <client.cnf <> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT -6 fwd_tcp_tc6.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_tcp_tc6.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.post0000644000175000017500000000045514010434640022770 0ustar wouterwouter# #-- fwd_tcp_tc6.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.dsc0000644000175000017500000000045714010434640022556 0ustar wouterwouterBaseName: fwd_tcp_tc6 Version: 1.0 Description: Forward retry in TCP IP6 mode. CreationDate: Mon Oct 15 10:08:08 CEST 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_tcp_tc6.pre Post: fwd_tcp_tc6.post Test: fwd_tcp_tc6.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.testns0000644000175000017500000000061614010434640023322 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA TC NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname TCP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 www IN A 10.20.30.41 www IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.test0000644000175000017500000000107714010434640022763 0ustar wouterwouter# #-- fwd_tcp_tc6.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # do the test echo "> streamtcp www.example.com." $PRE/streamtcp -u -f ::1@$UNBOUND_PORT www.example.com. A IN | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/rpz_axfr.rpl0000644000175000017500000001272714010434640017073 0ustar wouterwouter; config options server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no rrset-roundrobin: no rpz: name: "rpz.example.com." master: 10.20.30.40 zonefile: TEMPFILE_NAME rpz.example.com TEMPFILE_CONTENTS rpz.example.com $ORIGIN rpz.example.com. a IN CNAME *. c IN TXT "hello from initial RPZ" c IN TXT "another hello from initial RPZ" d IN CNAME . 32.1.123.0.10.rpz-ip CNAME *. 32.3.123.0.10.rpz-ip A 10.66.0.3 32.3.123.0.10.rpz-ip A 10.66.0.4 32.4.123.0.10.rpz-ip CNAME . TEMPFILE_END stub-zone: name: "." stub-addr: 10.20.30.40 CONFIG_END SCENARIO_BEGIN Test RPZ QNAME trigger, loaded using AXFR RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS ns. SECTION ADDITIONAL ns. IN NS 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION b. IN TXT SECTION ANSWER b. TXT "hello from upstream" ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION d. IN TXT SECTION ANSWER d. TXT "hello from upstream" ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION a.rpz-ip. IN A SECTION ANSWER a.rpz-ip. IN A 10.0.123.1 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION c.rpz-ip. IN A SECTION ANSWER c.rpz-ip. IN A 10.0.123.3 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION d.rpz-ip. IN A SECTION ANSWER d.rpz-ip. IN A 10.0.123.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION rpz.example.com. IN SOA SECTION ANSWER rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION rpz.example.com. IN AXFR SECTION ANSWER rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 b.rpz.example.com. TXT "hello from RPZ" c.rpz.example.com. TXT "hello from RPZ" a.rpz.example.com. CNAME . 32.1.123.0.10.rpz-ip.rpz.example.com. CNAME . 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.5 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.6 rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION b. IN TXT SECTION ANSWER b. IN TXT "hello from upstream" ENTRY_END STEP 3 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION a. IN TXT SECTION ANSWER ENTRY_END STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.rpz-ip. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION a.rpz-ip. IN A SECTION ANSWER ENTRY_END STEP 7 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION c. IN TXT SECTION ANSWER c. IN TXT "another hello from initial RPZ" c. IN TXT "hello from initial RPZ" ENTRY_END STEP 9 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c.rpz-ip. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION c.rpz-ip. IN A SECTION ANSWER c.rpz-ip. IN A 10.66.0.4 c.rpz-ip. IN A 10.66.0.3 ENTRY_END STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN TXT ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NXDOMAIN SECTION QUESTION d. IN TXT ENTRY_END STEP 13 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d.rpz-ip. IN A ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION d.rpz-ip. IN A ENTRY_END STEP 30 TIME_PASSES ELAPSE 10 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN TXT ENTRY_END STEP 51 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION b. IN TXT SECTION ANSWER b. IN TXT "hello from RPZ" ENTRY_END STEP 52 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN TXT ENTRY_END STEP 53 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NXDOMAIN SECTION QUESTION a. IN TXT SECTION ANSWER ENTRY_END STEP 54 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.rpz-ip. IN A ENTRY_END STEP 55 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION a.rpz-ip. IN A SECTION ANSWER ENTRY_END STEP 56 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN TXT ENTRY_END STEP 57 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION c. IN TXT SECTION ANSWER c. IN TXT "hello from RPZ" ENTRY_END STEP 58 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c.rpz-ip. IN A ENTRY_END STEP 59 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION c.rpz-ip. IN A SECTION ANSWER c.rpz-ip. IN A 10.66.0.6 c.rpz-ip. IN A 10.66.0.5 ENTRY_END STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN TXT ENTRY_END STEP 61 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION d. IN TXT SECTION ANSWER d. IN TXT "hello from upstream" ENTRY_END STEP 62 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d.rpz-ip. IN A ENTRY_END STEP 63 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION d.rpz-ip. IN A SECTION ANSWER d.rpz-ip. IN A 10.0.123.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/local_acl_taglist_action.rpl0000644000175000017500000000436414010434640022233 0ustar wouterwouter; config options server: define-tag: "tag1 tag2 tag3" local-zone: "example." static local-data: 'example. IN TXT "data 0"' local-zone-tag: "example." "tag1 tag2 tag3" access-control: 10.10.10.0/24 allow access-control-tag: 10.10.10.10/32 "tag1" access-control-tag: 10.10.10.20/32 "tag2 tag3" access-control-tag: 10.10.10.30/32 "tag3" access-control-tag: 10.10.10.40/32 "tag3" access-control-tag: 10.10.10.50/32 "tag3" access-control-tag-action: 10.10.10.10/32 tag1 always_refuse access-control-tag-action: 10.10.10.20/32 tag2 always_nxdomain access-control-tag-action: 10.10.10.30/32 tag3 always_refuse access-control-tag-action: 10.10.10.50/32 tag3 always_transparent forward-zone: name: "example." forward-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test local data queries RANGE_BEGIN 0 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN TXT SECTION ANSWER example. IN TXT "data 1" ENTRY_END RANGE_END STEP 1 QUERY ADDRESS 10.10.10.10 ENTRY_BEGIN SECTION QUESTION example. IN TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA REFUSED SECTION QUESTION example. IN TXT ENTRY_END STEP 3 QUERY ADDRESS 10.10.10.20 ENTRY_BEGIN SECTION QUESTION example. IN TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NXDOMAIN SECTION QUESTION example. IN TXT ENTRY_END STEP 5 QUERY ADDRESS 10.10.10.30 ENTRY_BEGIN SECTION QUESTION example. IN TXT ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA REFUSED SECTION QUESTION example. IN TXT ENTRY_END STEP 7 QUERY ADDRESS 10.10.10.40 ENTRY_BEGIN SECTION QUESTION example. IN TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION example. IN TXT SECTION ANSWER example. IN TXT "data 0" ENTRY_END STEP 9 QUERY ADDRESS 10.10.10.50 ENTRY_BEGIN REPLY RD SECTION QUESTION example. IN TXT ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION example. IN TXT SECTION ANSWER example. IN TXT "data 1" ENTRY_END STEP 11 QUERY ADDRESS 10.10.10.60 ENTRY_BEGIN REPLY RD SECTION QUESTION example. IN TXT ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION example. IN TXT SECTION ANSWER example. IN TXT "data 1" ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_unalgo_anchor.rpl0000644000175000017500000001177014010434640020716 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 208 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with unsupported algorithm trust anchor ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_nsec3_ent.rpl0000644000175000017500000002444014010434640020135 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "unbound-auth-test.nlnetlabs.nl." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME unbound-auth-test.nlnetlabs.nl ## this is the inline file /tmp/xxx.unbound-auth-test.nlnetlabs.nl ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS unbound-auth-test.nlnetlabs.nl ;; Zone: unbound-auth-test.nlnetlabs.nl. ; unbound-auth-test.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1554201247 14400 3600 604800 3600 unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG SOA 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. NLFcC2oet+HC+1dhT4D/2JJFIcMiRtTM81KwvT7u8ybF3iDE4bnyrILvQk8DsizpYKwk+D3J3tMC3TV5+//qFw== ; unbound-auth-test.nlnetlabs.nl. 3600 IN NS ns.nlnetlabs.nl. unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NS 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Gm0UF77ljiInG4/HZ6Tkzx7z9N45WwwmbBt9KxeN3z1BkdBLiy10Du71ZBFLP71b+USs1rv5SJQ0hteZFbl8sg== unbound-auth-test.nlnetlabs.nl. 3600 IN DNSKEY 256 3 13 S3Da9HqpFj0pEbI8WXOdkvN3vgZ6qxNSz4XyKkmWWAG28kq5T+/lWp36DUDvnMI9wJNuixzUHtgZ6oZoAaVrPg== ;{id = 15486 (zsk), size = 256b} unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 1cLFaDb6kP8KnRJujW1ieHUdS5Tgdv59TCZ+FloCRJMJBwQAow6UKAIY7HHlTb8IHTajyUrjlxX/dN8S/5VwuA== unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3PARAM 1 0 1 - unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3PARAM 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. GWgtJArNpfJ4ifoinUBUVRTlkk0CMemdozhMKY13dk3EQMP0jb4g49PcTAgEP2dBUs9efttQVQQpmFPyTGfN1w== tvdhfml24jp7cott1qijj9812qu9ibh3.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - 41pcah2j3fr8k99gj5pveh4igrjfc871 NS SOA RRSIG DNSKEY NSEC3PARAM ;{ flags: -, from: unbound-auth-test.nlnetlabs.nl. to: b.b.unbound-auth-test.nlnetlabs.nl.} tvdhfml24jp7cott1qijj9812qu9ibh3.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. DzwQTaZj4j29eHXEKllIFcq4yNWA7VMqkh8+gCrBO+GEek9+hGxL6ANsU0Hv6glyBmPDeYUZcy4xy0EEj1R4hQ== ; ;; Empty nonterminal: b.unbound-auth-test.nlnetlabs.nl. apejmh1fqds9gir0nnsf4d5gtno10tg1.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - dbs0aj50410urbvt3ghfr644n7h06gs5 ;{ flags: -, from: b.unbound-auth-test.nlnetlabs.nl. to: c.b.unbound-auth-test.nlnetlabs.nl.} apejmh1fqds9gir0nnsf4d5gtno10tg1.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. m9B0W8xDZF6ml/m8OujrZZBiF1O0wAeKciK/5FMT/hCjHR0hMrbXBPg/ZntpVJD/Pko2HcBvWKu87U721yTHyQ== ; ;; Empty nonterminal: a.b.unbound-auth-test.nlnetlabs.nl. toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - tvdhfml24jp7cott1qijj9812qu9ibh3 ;{ flags: -, from: a.b.unbound-auth-test.nlnetlabs.nl. to: unbound-auth-test.nlnetlabs.nl.} toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Jr1oPPs+DGBVV13n4gG4AGVFsleItluLbtCIyQDcYZEA+e5JMkrLzfW3rXqXaUSUauR4iEu5FmTfs4GTsumdUw== ; *.a.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.a.b" *.a.b.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG TXT 13 5 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. NrMUaNzZp88lXit/HLL/iDBHspDSfoM//K+/0VwUYRZjmVJQQHCHtHBGgR4NgrLi3ffvCAWq2LNGxDm+YMSl3g== jrtu61ssgd18lfjglqrbbs5b2vmbh6cl.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - k8r2bchsbehs5dbu5d6ivjfnmjb3jc8s TXT RRSIG ;{ flags: -, from: *.a.b.unbound-auth-test.nlnetlabs.nl. to: *.c.b.unbound-auth-test.nlnetlabs.nl.} jrtu61ssgd18lfjglqrbbs5b2vmbh6cl.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. kLIhE9+iz1OybJwXbtRJZst+Mk5u4OAtpZGWSwJUfqD6dXAk+h6msKAR18jpPeL7cCjXjIAKIv3x4oYRkl+uKw== ; ;; Empty nonterminal: b.b.unbound-auth-test.nlnetlabs.nl. 41pcah2j3fr8k99gj5pveh4igrjfc871.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - apejmh1fqds9gir0nnsf4d5gtno10tg1 ;{ flags: -, from: b.b.unbound-auth-test.nlnetlabs.nl. to: b.unbound-auth-test.nlnetlabs.nl.} 41pcah2j3fr8k99gj5pveh4igrjfc871.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. XlIjnuF313w0GXn6vymrAcsyuxZSaN6IShFjxQ5T2HUFePHBNvtRkL+TtMQZNlR8nTR3+MWcON0cOZIGjVCCjg== ; *.b.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.b.b" *.b.b.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG TXT 13 5 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. FkS3ceWpoHyOKaa8OtywIl148Bwo0vkzBd263vqYe0puhuRa6IvNEk5ERdwfWt9eNEq+6IlizPT/dYxA2fXYXA== ft7dasbom0copm9e2ak9k151dj08kjfs.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - jrtu61ssgd18lfjglqrbbs5b2vmbh6cl TXT RRSIG ;{ flags: -, from: *.b.b.unbound-auth-test.nlnetlabs.nl. to: *.a.b.unbound-auth-test.nlnetlabs.nl.} ft7dasbom0copm9e2ak9k151dj08kjfs.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 5QhLGohTRLQSGC8vstzDjqcwfrbOnLUG2OelSjvsZFy1smsWUxJBCQXQdx1+JX7xamZHlZESQtS+cELuZUqpvA== ; ;; Empty nonterminal: c.b.unbound-auth-test.nlnetlabs.nl. dbs0aj50410urbvt3ghfr644n7h06gs5.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - ft7dasbom0copm9e2ak9k151dj08kjfs ;{ flags: -, from: c.b.unbound-auth-test.nlnetlabs.nl. to: *.b.b.unbound-auth-test.nlnetlabs.nl.} dbs0aj50410urbvt3ghfr644n7h06gs5.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. hjk1foJWW68JK3O1Ktf0ZogoXVrMDw3mHVBBYTrpaBKX1gWR5icmJiOCYZWYx3z88PUnGkfH+kx4oDUjioqN+Q== ; *.c.b.unbound-auth-test.nlnetlabs.nl. 3600 IN TXT "*.c.b" *.c.b.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG TXT 13 5 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. b7rFR5tlx5Y5SQqNdYBtfD6DrkNx9h79GCmnZfWrUzRz+A256k2v08IPRJDK+WxEHuYHjfNnVWxjRr9M1OW2Iw== k8r2bchsbehs5dbu5d6ivjfnmjb3jc8s.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - toqivctpt4pdcp5g19neqt19fvtgbgeu TXT RRSIG ;{ flags: -, from: *.c.b.unbound-auth-test.nlnetlabs.nl. to: a.b.unbound-auth-test.nlnetlabs.nl.} k8r2bchsbehs5dbu5d6ivjfnmjb3jc8s.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. 34BS1ajedCNdfXgUfxTyiAK1ichfFLshhJ3TnfplrUps0UsZaQLEG+EIlP4wTBtro2c6V8YCSmOuxuce4gYoDw== ; TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with NSEC3 empty nonterminal ; with exact match NSEC3 in existence (eg. not a CE-proof) ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.b.unbound-auth-test.nlnetlabs.nl. IN TXT ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA DO NOERROR SECTION QUESTION a.b.unbound-auth-test.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY unbound-auth-test.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1554201247 14400 3600 604800 3600 unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG SOA 13 3 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. NLFcC2oet+HC+1dhT4D/2JJFIcMiRtTM81KwvT7u8ybF3iDE4bnyrILv Qk8DsizpYKwk+D3J3tMC3TV5+//qFw== toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN NSEC3 1 0 1 - TVDHFML24JP7COTT1QIJJ9812QU9IBH3 toqivctpt4pdcp5g19neqt19fvtgbgeu.unbound-auth-test.nlnetlabs.nl. 3600 IN RRSIG NSEC3 13 4 3600 20190430103407 20190402103407 15486 unbound-auth-test.nlnetlabs.nl. Jr1oPPs+DGBVV13n4gG4AGVFsleItluLbtCIyQDcYZEA+e5JMkrLzfW3 rXqXaUSUauR4iEu5FmTfs4GTsumdUw== ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+005+16486.private0000644000175000017500000000104514010434640021471 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 5 (RSASHA1) Modulus: qz9wCEIVe8FSBNI1kK9CnSkvHV1j7utdHSEfj/cRSBaayZthSkjWoPTGHAoP+hgYTACbb3V/JYn1zShXFcMQrw== PublicExponent: AQAB PrivateExponent: lT++xpPB4ZAFicojgSweZJbmRzODy1E6YA7kUTbFywrrClEi6vjb88AshqZsPuDnI4iOZ2Cy56qN9SZTD2WokQ== Prime1: 29ChQQp9Dd7jH8L+QxEowJGOxwo2WD8rLOjvdz7FBos= Prime2: x3AbQo22FBaEbB1Z6rM31WsLNhNNgHvD2G1gpXD2Ru0= Exponent1: Sj0eGQ9nyOV8I+ABa7lB4DfI1uRWElvTQymwpr9mX50= Exponent2: ZnWUu6NcKIPM8lI98JK0G4OL1fMivOBYpCbFIRmgnJ0= Coefficient: N2jmFfQh8jhGIlrUvOlJFdDnAFNxEy/C5gXRJpNHHBM= unbound-1.13.1/testdata/val_nsec3_b5_wcnodata_nowc.rpl0000644000175000017500000001117014010434640022400 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata, without wc. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR that matches the closest encloser (w.example) ;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi ) k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== ) ;; NSEC3 RR that covers the "next closer" name (z.w.example) ;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03 q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) ;; NSEC3 RR that matches a wildcard at the closest encloser. ;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en ;r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG ) ;r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== ) SECTION ADDITIONAL ENTRY_END ; catch glue queries ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN A SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN AAAA SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.z.w.example. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ; insecure! not bogus! (due to optout) REPLY QR RD RA NOERROR SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY example. 3600 IN SOA ns1.example. bugs.x.w.example. 1 3600 300 3600000 3600 SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_packets.20000644000175000017500000000321214010434640017262 0ustar wouterwouterb29092340000000000000000 289 98d50000000100000000000003626c3402626c06787334616c6c026e6c0000010001 98d58000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 290 b28f6a4e5011431228310000000000000000 b28fea440000000000000000 291 de6028000001000000010000026e6c0000060001055f6c646170045f746370026463065f6d736463730b6f7372646f6d65696e2d31026e6c00002100010000025800230000006401850c504f574552454447452d53420b6f7372646f6d65696e2d31026e6c00 de60a8040000000000000000 292 b353000000010000000000000450434b4e087963646f6d65696e026e6c0000010001 b353840300010000000100000450434b4e087963646f6d65696e026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 293 b2901243501140a2340b0000000000000000 b29092440000000000000000 294 b28f6a4f5010431228300000000000000000 b28fea440000000000000000 295 e0f600000001000000000000066b6d742d6570026e6c0000020001 e0f680000001000000020002066b6d742d6570026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 296 0000000070024000a52500000204056401010402 000080010000000000000000 297 000000007002400088e600000204059801010402 000080010000000000000000 298 00000000700240001f5900000204059801010402 000080010000000000000000 299 b2901244501040a2340a0000000000000000 b29092440000000000000000 300 b293149b50104320eb2f0000000000000000 b29394940000000000000000 unbound-1.13.1/testdata/Kexample.com.+005+30899.private0000644000175000017500000000104514010434640021475 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 5 (RSASHA1) Modulus: 0ONXIUfQxB7f2iMyBQKmp2w5UX5SaEbOcs9YxbKESE+3Vn9K/j3g7nsHcZLMzR+sJ1OEC/KXyhUYeTyGFQSytw== PublicExponent: Aw== PrivateExponent: i0I6Fi/ggr8/5sIhWKxvGkgmNlQ28C80TIo7LncC2t6ar2Q5rpyiDxEHvFLfphRh108ZOqf2tQdHx7tXTx5Gqw== Prime1: 9WS85Q92ilTAuGiVi+KesKzrFqF98l2Gpu4003hfmbc= Prime2: 2eqsD2jcY4Mgw26A8XFiaLdxx5J4s10Dhd9ur6X3rwE= Exponent1: o5h97gpPBuMrJZsOXUG/IHNHZGupTD5ZxJ7N4lA/u88= Exponent2: kUcdX5s9l6zAgkmrS6DsRc+hL7b7Ij4CWT+fH8P6dKs= Coefficient: PVZrElFmz9tWa4kwu9jArjcocycYu0eBycgguQ03J7w= unbound-1.13.1/testdata/test_packets.80000644000175000017500000000062714010434640017277 0ustar wouterwouter; Test that FORMERR no longer happens. ;-- next packet -- ; bad packet, had arcount=1 but EDNS record is missing. ; from imgw.pl. BIND accepts it (but dig notes 'it is malformed'). ; therefore we leniently accept this. ; header 75D684100001000200000001 ; qd section 04696D677702706C0000010001 ; answer section 04696D677702706C000001000100000E100004C3BB560E 04696D677702706C000001000100000E100004C3BB560D unbound-1.13.1/testdata/local_ds.rpl0000644000175000017500000000357014010434640017014 0ustar wouterwouter; config options ; The island of trust is at example.com server: qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test local data for as112 zone with DS lookup. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION arpa. IN NS SECTION ANSWER SECTION AUTHORITY . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION in-addr.arpa. IN NS SECTION ANSWER SECTION AUTHORITY . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION 10.in-addr.arpa. IN DS SECTION ANSWER SECTION AUTHORITY 10.in-addr.arpa. IN NSEC 11.in-addr.arpa NSEC RRSIG . IN SOA invalid. invalid. 1 2 3 4 5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION 40.30.20.10.in-addr.arpa. IN PTR ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA DO NXDOMAIN SECTION QUESTION 40.30.20.10.in-addr.arpa. IN PTR SECTION ANSWER SECTION AUTHORITY 10.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800 ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION 10.in-addr.arpa. IN DS ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION 10.in-addr.arpa. IN DS SECTION ANSWER SECTION AUTHORITY 10.in-addr.arpa. IN NSEC 11.in-addr.arpa NSEC RRSIG . IN SOA invalid. invalid. 1 2 3 4 5 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ta_algo_missing_dp.rpl0000644000175000017500000002116514010434640021720 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}" trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" trust-anchor: "example.com. 3600 IN DS 30899 7 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" harden-algo-downgrade: no fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with multiple algorithm missing one ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. AKIIYDOGHogglFqJK94ZtOnF7EfGikgAyloMNRSMCrQgFaFkmcOyjrc= ;{id = 2854} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20070926134150 20070829134150 30899 example.com. J55fsz1GGMnngc4r50xvXDUdaVMlfcLKLVsfMhwNLF+ERac5XV/lLRAc/aSER+qQdsSo0CrjYjy1wat7YQpDAA== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899} www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_reclame_one.rpl0000644000175000017500000000651314010434640020530 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterative resolve with a recursion lame server. ; The scenario has a domain with two servers, one is lame the other doesn't ; so depending on the randomly chosen server that goes first, it may ; select the nonlame or the lame server first. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; lame.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/stream_tcp.tdir/0000755000175000017500000000000014010434640017612 5ustar wouterwouterunbound-1.13.1/testdata/stream_tcp.tdir/stream_tcp.pre0000644000175000017500000000162014010434640022462 0ustar wouterwouter# #-- stream_tcp.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT stream_tcp.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stream_tcp.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -v -v -v -v -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/stream_tcp.tdir/stream_tcp.conf0000644000175000017500000000036514010434640022626 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/stream_tcp.tdir/stream_tcp.testns0000644000175000017500000000075614010434640023225 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END unbound-1.13.1/testdata/stream_tcp.tdir/stream_tcp.dsc0000644000175000017500000000046614010434640022454 0ustar wouterwouterBaseName: stream_tcp Version: 1.0 Description: Stream several queries over a TCP channel. CreationDate: Fri Feb 8 11:09:09 CET 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: stream_tcp.pre Post: stream_tcp.post Test: stream_tcp.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/stream_tcp.tdir/stream_tcp.post0000644000175000017500000000045314010434640022664 0ustar wouterwouter# #-- stream_tcp.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/stream_tcp.tdir/stream_tcp.test0000644000175000017500000000272014010434640022655 0ustar wouterwouter# #-- stream_tcp.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # first test a single TCP query. echo "> query www.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "exit status OK" fi echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi # test more echo "" echo "" echo "> query www.example.com www2.example.com www3.example.com" $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN www2.example.com. A IN www3.example.com A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "exit status OK" fi echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi if grep "10.20.30.43" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/val_cnametoposwc.rpl0000644000175000017500000001775514010434640020612 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a cname to positive wildcard ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER ; from *.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 2 3600 20070926134150 20070829134150 30899 example.net. quSyDbSeHRvyMmanqq5rW+APC9MKOswbRLB5QP/G+C2iyokQFLuRTlX9Wmo/jo1Oo1MGBefJUmP9NdRd2EqABA== ;{id = 30899} SECTION AUTHORITY wab.example.net IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 2 3600 20070926134150 20070829134150 30899 example.net. quSyDbSeHRvyMmanqq5rW+APC9MKOswbRLB5QP/G+C2iyokQFLuRTlX9Wmo/jo1Oo1MGBefJUmP9NdRd2EqABA== ;{id = 30899} SECTION AUTHORITY wab.example.net IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_udptmout.tdir/0000755000175000017500000000000014010434640020172 5ustar wouterwouterunbound-1.13.1/testdata/fwd_udptmout.tdir/fwd_udptmout.conf0000644000175000017500000000044514010434640023565 0ustar wouterwouterserver: verbosity: 4 num-threads: 1 interface: 127.0.0.1 port: @PORT@ outgoing-range: 3 directory: "" pidfile: "unbound.pid" chroot: "" username: "" num-queries-per-thread: 1024 use-syslog: no do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_udptmout.tdir/fwd_udptmout.pre0000644000175000017500000000162014010434640023422 0ustar wouterwouter# #-- fwd_udptmout.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT -f 9 fwd_udptmout.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_udptmout.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_udptmout.tdir/fwd_udptmout.test0000644000175000017500000000467414010434640023627 0ustar wouterwouter# #-- fwd_udptmout.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test # skip the single query test # so that all three queries get timeouts during the later test. # #echo "> dig www1.example.com." #dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile #echo "> cat logfiles" #cat fwd.log #cat unbound.log #echo "> check answer for single query" #if grep "10.20.30.40" outfile; then #echo "OK" #else #echo "Not OK" #exit 1 #fi echo "> do queries" dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & digpid1=$! dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & digpid2=$! dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & digpid3=$! dig @localhost -p $UNBOUND_PORT www4.example.com. >outfile4 & digpid4=$! dig @localhost -p $UNBOUND_PORT www5.example.com. >outfile5 & digpid5=$! dig @localhost -p $UNBOUND_PORT www6.example.com. >outfile6 & digpid6=$! sleep 15 # some slow systems need more for processing if grep "10.20.30.40" outfile1 >/dev/null; then :; else sleep 2; fi if grep "10.20.30.50" outfile2 >/dev/null; then :; else sleep 2; fi if grep "10.20.30.60" outfile3 >/dev/null; then :; else sleep 2; fi if grep "10.20.30.70" outfile4 >/dev/null; then :; else sleep 2; fi if grep "10.20.30.80" outfile5 >/dev/null; then :; else sleep 2; fi if grep "10.20.30.90" outfile6 >/dev/null; then :; else sleep 2; fi kill -9 $digpid1 kill -9 $digpid2 kill -9 $digpid3 kill -9 $digpid4 kill -9 $digpid5 kill -9 $digpid6 echo "> cat outfile1" cat outfile1 echo "> cat outfile2" cat outfile2 echo "> cat outfile3" cat outfile3 echo "> cat outfile4" cat outfile4 echo "> cat outfile5" cat outfile5 echo "> cat outfile6" cat outfile6 echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answers for queries" if grep "10.20.30.40" outfile1; then echo "1 is OK" else echo "1 is not OK" exit 1 fi if grep "10.20.30.50" outfile2; then echo "2 is OK" else echo "2 is not OK" exit 1 fi if grep "10.20.30.60" outfile3; then echo "3 is OK" else echo "3 is not OK" exit 1 fi if grep "10.20.30.70" outfile4; then echo "4 is OK" else echo "4 is not OK" exit 1 fi if grep "10.20.30.80" outfile5; then echo "5 is OK" else echo "5 is not OK" exit 1 fi if grep "10.20.30.90" outfile6; then echo "6 is OK" else echo "6 is not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_udptmout.tdir/fwd_udptmout.post0000644000175000017500000000074314010434640023626 0ustar wouterwouter# #-- fwd_udptmout.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh # kill fwder kill_pid $FWD_PID # find all extra forked testns and kill them. pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` for p in $pidlist; do kill_pid $p done # kill unbound kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_udptmout.tdir/fwd_udptmout.testns0000644000175000017500000000173114010434640024157 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www1 IN A SECTION ANSWER www1 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.50 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.60 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.70 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.80 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.90 ENTRY_END unbound-1.13.1/testdata/fwd_udptmout.tdir/fwd_udptmout.dsc0000644000175000017500000000050714010434640023410 0ustar wouterwouterBaseName: fwd_udptmout Version: 1.0 Description: Forward udp queries with timeouts and multiple fds CreationDate: Mon Apr 14 10:26:48 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_udptmout.pre Post: fwd_udptmout.post Test: fwd_udptmout.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/autotrust_10key.rpl0000644000175000017500000002026614010434640020320 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 07:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 07:46:40 2009 ;;next_probe_time: 1258967360 ;;Mon Nov 23 09:09:20 2009 ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with 10 keys ; spec says you must be able to handle at least 5 keys per trust point ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 example.com. 3600 IN DNSKEY 257 3 5 AwEAAaxpsO70/oPdKhulQXVbkLX5V6lyzF7G0gtz0nReLlBmfEk6zQ3WSW8VZ8kdZUCOLQwJl+5nWNfRvFxnqUGwjT8= ;{id = 11146 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAbXPzz66rviAvNKgPV5JNdkOZv9olQwNDFWnxy7p/RtObOL35ahwpamQGL5A5uPOvn1OghQyqiytTFFP8ZM/5Rc= ;{id = 11446 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAdSj6e3XGnFwRNgw6Aifi4Q7SyRIdQ25XVsiWP/N9m7evkN+y6rlnaMP1ELRkhpiwK0bbNTP3DsGXtSMbR/4uzU= ;{id = 20314 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAa8er29rQIzO6+o3D4S8HsTTICTHHzDTeVbY/2kLdR0wwRy2PL8qvgxTX1YZXxEjrGHBhY5jD+aF9y9G3Ztfns8= ;{id = 22402 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAZ25ylUZoX11EeM7aPqJOprcnGFiXgI7P407NMiBVd8Wz5J1aaUuPabfu4f15oLp4/6czzn3iuJp4UJU4ZTjFrc= ;{id = 27586 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAbZxgKqPMoc8E7BqdrT84U7ux57LHMXQJnAogNcobTvC9+e3aeL5YdFSqgf6Em7ICISMzS+Sd0wJqgRoL0ZDhzk= ;{id = 29146 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAbpIKlHvo1Ev4La/eEPoqThtFA8+vLxcjUQaowkkR/Xvvt6fd6iM3vSH6RsyvNgbj5C+HBjkciSeW4KthUuIDUk= ;{id = 51673 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAdzRZ1JnXuspXF03PH6p97f6Xq8JkbZiOZYTCcfBiSFuyq6046Yqhbo3UNpPxMlB0JY52Ffj3gohTZAuClVoIZ8= ;{id = 55999 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAeu99txoU5i2Z4BVatCVi9PTj93oOPft8ZB9ovcjfzRZLpfc/woges07k5Ru+H44qSRxjtDKDqtf4QSo3RkkGLk= ;{id = 56782 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAd9vx7tR9cd9MMDh0gL/qHNTG4ykehjT3UzIIEtAi3Z4DI3/FFw9U/GjpYcqVC6hx2Yo1lbc4tVIa/uA0mbU7uE= ;{id = 58687 (ksk), size = 512b} example.com. 3600 IN DNSKEY 257 3 5 AwEAAdz+Xe5qS3BRnw1hBy2wL2wi0o3Nh94lDxtDtfOsmyJ0WD/25Ova9Pb27Yzh5XW/baENkI+xGJTFsljbi9bdSd0= ;{id = 63067 (ksk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20091124111500 20091018111500 55582 example.com. baTsvlgA0tIVAts9myEBGKP/A7PvPshZfESq/dueRhPGVRwNYEoQACjkqYsIquzOs4sBec9xVH15CXIH+okXYA== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END ; set date/time to Mon Nov 23 09:46:40 2009 STEP 5 TIME_PASSES EVAL ${1258962400 + 7200} STEP 6 TRAFFIC ; do the probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 3200 ${timeout} 5400} STEP 9 ASSIGN tp = ${1258962400} ; the auto probing should have been done now. STEP 11 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 3600 ;;retry_time: 3600 example.com. 3600 IN DNSKEY 257 3 5 AwEAAdz+Xe5qS3BRnw1hBy2wL2wi0o3Nh94lDxtDtfOsmyJ0WD/25Ova9Pb27Yzh5XW/baENkI+xGJTFsljbi9bdSd0= ;{id = 63067 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAd9vx7tR9cd9MMDh0gL/qHNTG4ykehjT3UzIIEtAi3Z4DI3/FFw9U/GjpYcqVC6hx2Yo1lbc4tVIa/uA0mbU7uE= ;{id = 58687 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAeu99txoU5i2Z4BVatCVi9PTj93oOPft8ZB9ovcjfzRZLpfc/woges07k5Ru+H44qSRxjtDKDqtf4QSo3RkkGLk= ;{id = 56782 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAdzRZ1JnXuspXF03PH6p97f6Xq8JkbZiOZYTCcfBiSFuyq6046Yqhbo3UNpPxMlB0JY52Ffj3gohTZAuClVoIZ8= ;{id = 55999 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAbpIKlHvo1Ev4La/eEPoqThtFA8+vLxcjUQaowkkR/Xvvt6fd6iM3vSH6RsyvNgbj5C+HBjkciSeW4KthUuIDUk= ;{id = 51673 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAbZxgKqPMoc8E7BqdrT84U7ux57LHMXQJnAogNcobTvC9+e3aeL5YdFSqgf6Em7ICISMzS+Sd0wJqgRoL0ZDhzk= ;{id = 29146 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAZ25ylUZoX11EeM7aPqJOprcnGFiXgI7P407NMiBVd8Wz5J1aaUuPabfu4f15oLp4/6czzn3iuJp4UJU4ZTjFrc= ;{id = 27586 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAa8er29rQIzO6+o3D4S8HsTTICTHHzDTeVbY/2kLdR0wwRy2PL8qvgxTX1YZXxEjrGHBhY5jD+aF9y9G3Ztfns8= ;{id = 22402 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAdSj6e3XGnFwRNgw6Aifi4Q7SyRIdQ25XVsiWP/N9m7evkN+y6rlnaMP1ELRkhpiwK0bbNTP3DsGXtSMbR/4uzU= ;{id = 20314 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAbXPzz66rviAvNKgPV5JNdkOZv9olQwNDFWnxy7p/RtObOL35ahwpamQGL5A5uPOvn1OghQyqiytTFFP8ZM/5Rc= ;{id = 11446 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 3600 IN DNSKEY 257 3 5 AwEAAaxpsO70/oPdKhulQXVbkLX5V6lyzF7G0gtz0nReLlBmfEk6zQ3WSW8VZ8kdZUCOLQwJl+5nWNfRvFxnqUGwjT8= ;{id = 11146 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 FILE_END SCENARIO_END unbound-1.13.1/testdata/val_negcache_ds.rpl0000644000175000017500000001425014010434640020316 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with negative cache DS response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; query for missing DS record. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; the downstream validator wants the DS record. STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_signatures.90000644000175000017500000000310714010434640020026 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ENTRY_BEGIN SECTION QUESTION nsec.0skar.cz. IN DNSKEY SECTION ANSWER nsec.0skar.cz. 297 IN DNSKEY 257 3 10 AwEAAcfJERXDHOSg4JsxSO8WmFdi/PPbtgB6N6xDyyaDqRzr9QCL4LXH yLYjGmriFn7xhVDQTyQQp/nox5RK8YeAFHoiglQuwQVs2TyZTAZskTRj K4NL3+TuMxtCMObzHkAxa0rYvAV5RBh5tdLHUHJLe33xrFNcVidkHMAP F+kjY/9UNi1at2LTohE8VQD0mcv3Gvm79heIjq8Xt3SuqPpk7eQm1r8m 7cIsuojbCum964/H93LeyafExa1eEMhZIIiSG+ik2jDhdeybmMyeoKsO jIL/9N/Yd6u60VkWvUMennyv9rKQTOY84yg2T9yAVjusepggcxMpCVX5 HdWxakruR80= ENTRY_END ; entry to test ; note timestamp in 2080. ENTRY_BEGIN SECTION QUESTION nsec.0skar.cz. IN DNSKEY SECTION ANSWER nsec.0skar.cz. 297 IN DNSKEY 257 3 10 AwEAAcfJERXDHOSg4JsxSO8WmFdi/PPbtgB6N6xDyyaDqRzr9QCL4LXH yLYjGmriFn7xhVDQTyQQp/nox5RK8YeAFHoiglQuwQVs2TyZTAZskTRj K4NL3+TuMxtCMObzHkAxa0rYvAV5RBh5tdLHUHJLe33xrFNcVidkHMAP F+kjY/9UNi1at2LTohE8VQD0mcv3Gvm79heIjq8Xt3SuqPpk7eQm1r8m 7cIsuojbCum964/H93LeyafExa1eEMhZIIiSG+ik2jDhdeybmMyeoKsO jIL/9N/Yd6u60VkWvUMennyv9rKQTOY84yg2T9yAVjusepggcxMpCVX5 HdWxakruR80= nsec.0skar.cz. 297 IN RRSIG DNSKEY 10 3 300 20800101000000 20140130121330 28887 nsec.0skar.cz. Ef6Jmf/d9BR0VcRakUD8dEjrMmbAF6qqYRBllLOvibFvpgdEJ7egCO9t d8jliD2VRXhqej2lqECNOvARJ+YyYekpniueiYZsBjleU2kJAyFAS2q3 7aBIii1WdM3h+noayDnjiuhEO3GLxxHWc3kyd2yDesPddiFl09fx+rcz 9BwXaS9A/vdWv+92R1j4nijVI5jxZgkQ4lnD0ZtAVRdBRO7qDRpkRHDM pnaSq51B/9XCZEv2CW8UQ5dGd9D20a3uA2lAKHLgj2/Rcuar4o2Y4ERa ms9pyDCQDhGaveZQdx01EXX0ehe5qIKOKk7iFP95TbWPMRyk1bfKTUoT Rq5rhQ== ENTRY_END unbound-1.13.1/testdata/autotrust_revtp_read.rpl0000644000175000017500000000515114010434640021516 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes val-override-date: '20091018111500' fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com ; autotrust trust anchor file ;;REVOKED ; The zone has all keys revoked, and is ; considered as if it has no trust anchors. ; the remainder of the file is the last probe. ; to restart the trust anchor, overwrite this file. ; with one containing valid DNSKEYs or DSes. ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;next_probe_time: ${0} ;;${ctime 0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 example.com. 10800 IN DNSKEY 385 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16614 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with revoked trust point read back from config ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; correct unsigned response works after trust point revocation. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ds_sha2_lenient.crpl0000644000175000017500000001657114010434640021307 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-dsa: yes fake-sha1: yes trust-anchor-signaling: no harden-algo-downgrade: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with SHA256 DS downgrade to SHA1 lenience ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; Downgrade attack: false SHA2, correct SHA1 ; SHA256 DS for sub.example.com. ;sub.example.com. 3600 IN DS 30899 5 2 51be8e847cc663f2775d0f2b6d15e41553c97ecb99b8dd667f18244e2f652033 ; BAD SHA256 DS sub.example.com. 3600 IN DS 30899 5 2 51be8e847cc663f2775d0f2b6d15e41553c97ecb99b8dd667f18244e2f652000 ; SHA1 DS for sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. ACqqpk1ow07XJvN1orEpiWOeqMLdDKQtTgWB8Mp6CF/9VTfHuWWmsu8= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN AAAA ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. ; must servfail, BOGUS STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/serve_expired_reply_ttl.rpl0000644000175000017500000000406214010434640022173 0ustar wouterwouter; config options server: module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-expired: yes serve-expired-reply-ttl: 123 stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test serve-expired with reply-ttl ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - query again right after the TTL expired ; - check that we get the expired cached answer with the configured TTL ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer (should be cached) STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire STEP 11 TIME_PASSES ELAPSE 3601 ; Query again STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got a stale answer STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 123 A 5.6.7.8 SECTION AUTHORITY example.com. 123 NS ns.example.com. SECTION ADDITIONAL ns.example.com. 123 A 1.2.3.4 ENTRY_END ; Give time for the pending query to get answered STEP 41 TRAFFIC SCENARIO_END unbound-1.13.1/testdata/val_unsec_cname.rpl0000644000175000017500000002522614010434640020360 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with DS, unsec, cname sequence. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.b.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.b.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to c.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION c.c.example.com. IN A SECTION ANSWER SECTION AUTHORITY c.example.com. IN NS ns.c.example.com. c.example.com. IN NSEC d.example.com. NS RRSIG NSEC c.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDQ1xBqQ8Yxy7d7MbfAOg9g+dInHAhUAgP2w61bvME+hLWFiNg42Ny02/vo= ;{id = 2854} SECTION ADDITIONAL ns.c.example.com. IN A 1.2.3.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example.com. IN DS SECTION ANSWER SECTION AUTHORITY c.example.com. IN NSEC d.example.com. NS RRSIG NSEC c.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDQ1xBqQ8Yxy7d7MbfAOg9g+dInHAhUAgP2w61bvME+hLWFiNg42Ny02/vo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.b.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ; another delegation, validated unsecure. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.b.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY b.sub.example.com. IN NS ns.b.sub.example.com. b.sub.example.com. IN NSEC c.sub.example.com. NS NSEC RRSIG b.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. KPdURTUrbQvc6OXtDZaH3+14uO2qPUPIFO86aTNZ/Ujy3d2RMSB7fkSSulDO6QDSBEUhr9WgbQr0/YoljCBirA== ;{id = 30899} SECTION ADDITIONAL ns.b.sub.example.com. IN A 1.2.3.7 ENTRY_END ; b DS query. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION b.sub.example.com. IN DS SECTION AUTHORITY b.sub.example.com. IN NSEC c.sub.example.com. NS NSEC RRSIG b.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. KPdURTUrbQvc6OXtDZaH3+14uO2qPUPIFO86aTNZ/Ujy3d2RMSB7fkSSulDO6QDSBEUhr9WgbQr0/YoljCBirA== ;{id = 30899} ENTRY_END RANGE_END ; server ns.b.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION b.sub.example.com. IN NS SECTION ANSWER b.sub.example.com. IN NS ns.b.sub.example.com. SECTION ADDITIONAL ns.b.sub.example.com. IN A 1.2.3.7 ENTRY_END ENTRY_BEGIN ; query of interest, give a cname to another unsecure zone. MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.b.sub.example.com. IN A SECTION ANSWER a.b.sub.example.com. IN CNAME c.c.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.b.sub.example.com. IN DS SECTION AUTHORITY b.sub.example.com. IN SOA B-EXAMPLE. b-example. 1 2 3 7 7 ENTRY_END RANGE_END ; server ns.c.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.sub.example.com. IN NS SECTION ANSWER c.sub.example.com. IN NS ns.c.sub.example.com. SECTION ADDITIONAL ns.c.sub.example.com. IN A 1.2.3.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION c.example.com. IN NS SECTION ANSWER c.example.com. IN NS ns.c.example.com. SECTION ADDITIONAL ns.c.example.com. IN A 1.2.3.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.c.example.com. IN A SECTION ANSWER c.c.example.com. IN A 11.11.11.11 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.c.example.com. IN DS SECTION AUTHORITY c.example.com. IN SOA C-EXAMPLE. c-example. 1 2 3 4 5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.b.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION a.b.sub.example.com. IN A SECTION ANSWER a.b.sub.example.com. IN CNAME c.c.example.com. c.c.example.com. 3600 IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; test that a DS query does not get CNAME redirected, but instead ; asked to the right server that has to respond to it. STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.b.sub.example.com. IN DS ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION a.b.sub.example.com. IN DS SECTION AUTHORITY b.sub.example.com. IN SOA B-EXAMPLE. b-example. 1 2 3 7 7 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_unalgo_ds.rpl0000644000175000017500000001615114010434640020050 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with unknown algorithm delegation ; DS has unknown algo only. ; so subzone has to be treated as unsigned. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; algorithm 208 is unknown. sub.example.com. 3600 IN DS 30899 208 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AEMPMNVJAygL0TyRUU+MVgP4FA7jSIpVj6628IdLe7eY3OwWp3hUTnU= ;{id = 2854} ;sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+008+55566.key0000644000175000017500000000036214010434640020615 0ustar wouterwouterexample.com. IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} unbound-1.13.1/testdata/val_ds_cnamesub.rpl0000644000175000017500000002054514010434640020362 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with CNAME response to DS in chain of trust ; the CNAME is at a nonempty nonterminal name in the parent zone. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ; not legal NOERROR/NODATA response, but leniently accepted (not validated) SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ;example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 ;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DS query for a.example.com, a CNAME ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.example.com. IN DS SECTION ANSWER a.example.com. IN CNAME zzz.example.net. a.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. AKM6/j6yowuwqbazKzi4fEsavcLwXo3PjglhH9KD68ANZOrdN9y1ZCc= SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response to DS query for sub.a.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.a.example.com. IN DS SECTION ANSWER sub.a.example.com. 3600 IN DS 57024 7 1 e54100bff773a794854808694c5d217267a53649 sub.a.example.com. 3600 IN RRSIG DS 3 4 3600 20070926134150 20070829134150 2854 example.com. ALHDGmpgZlXnAb54z4FbBKw/9nXVBdosG0UCEuh4qU7Lm/fs5Dv9aJw= SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; delegation down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.a.example.com. IN NS SECTION ANSWER SECTION AUTHORITY sub.a.example.com. 3600 IN DS 57024 7 1 e54100bff773a794854808694c5d217267a53649 sub.a.example.com. 3600 IN RRSIG DS 3 4 3600 20070926134150 20070829134150 2854 example.com. ALHDGmpgZlXnAb54z4FbBKw/9nXVBdosG0UCEuh4qU7Lm/fs5Dv9aJw= sub.a.example.com. IN NS ns.sub.a.example.com. SECTION ADDITIONAL ns.sub.a.example.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.sub.a.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ; DNSKEY query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.a.example.com. IN DNSKEY SECTION ANSWER sub.a.example.com. 3600 IN DNSKEY 257 3 7 AwEAAbvre/wK/WVeoj0SiwVkTD+NefvHPru9YIqLWY0m+0E5NYOpJZdc+PGQQYRzFNOlugVZtFirmv5Lmz7GNiASXtG/IFi//SlE30DxEKQOjt2F6qSZTZ1nZ5XOIMGTwWyp4OoI0egk5JavC5mQbyXqcj82ywt6F5Z3CmnThVl6MtOv ;{id = 57024 (ksk), size = 1024b} sub.a.example.com. 3600 IN RRSIG DNSKEY 7 4 3600 20070926134150 20070829134150 57024 sub.a.example.com. TB3rkkPBD/ESQR9WBpfq2aV+2howI+EJq2+om2EI6PiemQOdpN6ovLvKwCILb0LOsTEFfPpAvRCOuDzRC24sJqBgWpZ4xLxMTcQJ8hMvv7rIUfZotDPO2JYNHSRmpeQLuDGA6P+AtJLYIr7yfOltJmJ0aCJxy3Fm9RQxJxHVbEQ= SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.a.example.com. IN A SECTION ANSWER www.sub.a.example.com. IN A 10.20.30.40 www.sub.a.example.com. 3600 IN RRSIG A 7 5 3600 20070926134150 20070829134150 57024 sub.a.example.com. az44R7VbfooRtaSOO65W+GP4K/fHlIcKMkF/z3LVvDXOdCK+zuYPJycBCYljH5cAhslMXgDeHMOWdcPhKIZ3EjykYUJIGlMckVIMobBieFKFhIX9r/bRpT0vlsCF2YKbmvyjpeRF/sIg2iSNMf/s6wxpZq02Kq6yuHtUEqgx7uA= SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION zzz.example.net. IN DS SECTION ANSWER SECTION AUTHORITY example.net. IN SOA root. host. 1 2 3 4 5 SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.a.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.a.example.com. IN A SECTION ANSWER www.sub.a.example.com. 3600 IN A 10.20.30.40 www.sub.a.example.com. 3600 IN RRSIG A 7 5 3600 20070926134150 20070829134150 57024 sub.a.example.com. az44R7VbfooRtaSOO65W+GP4K/fHlIcKMkF/z3LVvDXOdCK+zuYPJycBCYljH5cAhslMXgDeHMOWdcPhKIZ3EjykYUJIGlMckVIMobBieFKFhIX9r/bRpT0vlsCF2YKbmvyjpeRF/sIg2iSNMf/s6wxpZq02Kq6yuHtUEqgx7uA= ENTRY_END SCENARIO_END unbound-1.13.1/testdata/stat_values.tdir/0000755000175000017500000000000014010434640020003 5ustar wouterwouterunbound-1.13.1/testdata/stat_values.tdir/stat_values.testns0000644000175000017500000000053014010434640023575 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION 1ttl IN A SECTION ANSWER 1ttl 1 IN A 1.1.1.1 ENTRY_END unbound-1.13.1/testdata/stat_values.tdir/stat_values.dsc0000644000175000017500000000041614010434640023031 0ustar wouterwouterBaseName: stat_values Version: 1.0 Description: Test unbound statistics CreationDate: Mon Sep 09 14:48:03 CEST 2020 Maintainer: Category: Component: CmdDepends: Depends: Help: Pre: stat_values.pre Post: stat_values.post Test: stat_values.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/stat_values.tdir/stat_values.pre0000644000175000017500000000262214010434640023047 0ustar wouterwouter# #-- stat_values.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 4 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) FWD_EXPIRED_PORT=$(($RND_PORT + 2)) CONTROL_PORT=$(($RND_PORT + 3)) FWD_EXPIRED_PORT=$(($RND_PORT + 4)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "FWD_EXPIRED_PORT=$FWD_EXPIRED_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT stat_values.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start expired forwarder $LDNS_TESTNS -p $FWD_EXPIRED_PORT stat_values.testexpiredns >fwd_expired.log 2>&1 & FWD_EXPIRED_PID=$! echo "FWD_EXPIRED_PID=$FWD_EXPIRED_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@EXPIREDPORT\@/'$FWD_EXPIRED_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < stat_values.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_ldns_testns_up fwd_expired.log wait_unbound_up unbound.log unbound-1.13.1/testdata/stat_values.tdir/stat_values.test0000644000175000017500000002154214010434640023242 0ustar wouterwouter# #-- stat_values.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test # We need kill_pid for the serve-expired-client-timeout test . ../common.sh PRE="../.." # Individual thread stats. STATS_IGNORE_THREAD="\ ^thread" # Histogram stats. STATS_IGNORE_HISTOGRAM="\ ^histogram" # Time dependent stats. STATS_IGNORE_TIME_SPECIFIC="\ ^total.recursion.time.avg= ^total.recursion.time.median= ^time.now= ^time.up= ^time.elapsed=" # Usage dependent stats. STATS_IGNORE_USAGE_SPECIFIC="\ ^total.requestlist.avg= ^total.requestlist.max= ^total.requestlist.overwritten= ^total.requestlist.exceeded= ^total.requestlist.current.all= ^total.requestlist.current.user= ^total.tcpusage= ^mem\." # Stats to ignore by default. STATS_IGNORE_DEFAULT="\ $STATS_IGNORE_THREAD $STATS_IGNORE_HISTOGRAM $STATS_IGNORE_TIME_SPECIFIC $STATS_IGNORE_USAGE_SPECIFIC" # Various files to be used while testing. STATS_FILE=stats.$$ EXPECTED_STATS_FILE=expected_stats.$$ IGNORE_REGEX_FILE=ignore_regex.$$ FILTERED_STATS_FILE=filtered_stats.$$ FOUND_STATS_FILE=found_stats.$$ REST_STATS_FILE=rest_stats.$$ DEBUG=0 # Write stats to $STATS_FILE. # Call this when you want to get stats from unbound. get_stats () { echo "> Getting stats" echo "$PRE/unbound-control -c ub.conf stats" $PRE/unbound-control -c ub.conf stats > $STATS_FILE if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi } # Set the expected stat values by writing to $EXPECTED_STATS_FILE. # sort is used for proper diff later. set_expected_stats () { echo "$1" | sort > $EXPECTED_STATS_FILE } # Set the regex to ignore stats by writing to $IGNORE_REGEX_FILE. set_ignore_regex_stats () { echo "$1" > $IGNORE_REGEX_FILE } # Filter the stats by removing any matched regex from $IGNORE_REGEX_FILE, # sorts and writes the left over stats to $FILTERED_STATS_FILE. filter_stats () { grep -v -f $IGNORE_REGEX_FILE $STATS_FILE | sort > $FILTERED_STATS_FILE } # Check that the stats in $FILTERED_STATS_FILE include the expected stats in # $EXPECTED_STATS_FILE. check_expected_stats () { echo "> Checking expected stats" grep -F -x -f $EXPECTED_STATS_FILE $FILTERED_STATS_FILE > $FOUND_STATS_FILE if test $DEBUG -ne 0; then echo "Found:" cat $FOUND_STATS_FILE fi if diff $EXPECTED_STATS_FILE $FOUND_STATS_FILE; then echo "OK" else echo "! bad expected stats:" cat $FILTERED_STATS_FILE exit 1 fi } # Check that the rest (unspecified) stats are all 0 (no surprises). check_rest_stats () { echo "> Checking rest stats" grep -F -x -v -f $EXPECTED_STATS_FILE $FILTERED_STATS_FILE > $REST_STATS_FILE if test $DEBUG -ne 0; then echo "Rest:" cat $REST_STATS_FILE fi if grep -v "=0$" $REST_STATS_FILE; then echo "! bad rest stats" exit 1 else echo "OK" fi } # Main function to check stats by: # - Getting stats from unbound # - Filtering out the stats we are not interested in # - Checking that the expected stats are part of the filtered stats # - The rest of the stats have 0 values. check_stats () { set_expected_stats "$1" if test $DEBUG -ne 0; then echo "Expected:" cat $EXPECTED_STATS_FILE fi get_stats filter_stats if test $DEBUG -ne 0; then echo "Filtered:" cat $FILTERED_STATS_FILE fi check_expected_stats check_rest_stats } # Convenient function to set an option through unbound-control. set_ub_option () { name=$1 value=$2 echo "$PRE/unbound-control -c ub.conf set_option $name: $value" $PRE/unbound-control -c ub.conf set_option $name: $value if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi } # Convenient function to exit the test. end () { echo "> cat logfiles" cat fwd.log cat unbound.log if test $1 -eq 1; then echo "Not OK" else echo "> OK" fi exit $1 } # Ignore all run specific stats. set_ignore_regex_stats "$STATS_IGNORE_DEFAULT" # Check if the server is up. echo "> dig 1ttl.example.com." dig @127.0.0.1 -p $UNBOUND_PORT 1ttl.example.com. | tee outfile echo "> check answer" if grep "1.1.1.1" outfile; then echo "OK" else end 1 fi echo echo "[ Check initial stats based on first query. ]" check_stats "\ total.num.queries=1 total.num.cachemiss=1 total.num.recursivereplies=1 num.query.type.A=1 num.query.class.IN=1 num.query.opcode.QUERY=1 num.query.flags.RD=1 num.query.flags.AD=1 num.query.edns.present=1 msg.cache.count=1 rrset.cache.count=1 infra.cache.count=1 num.answer.rcode.NOERROR=1" echo echo "[ Check stat reset. ]" check_stats "\ msg.cache.count=1 rrset.cache.count=1 infra.cache.count=1" echo echo "[ Enable serve-expired and check. ]" set_ub_option serve-expired yes sleep 2 # make sure the TTL has expired. echo "> dig 1ttl.example.com." dig @127.0.0.1 -p $UNBOUND_PORT 1ttl.example.com. | tee outfile echo "> check answer" if grep "1.1.1.1" outfile; then echo "OK" else end 1 fi check_stats "\ total.num.queries=1 total.num.expired=1 total.num.cachehits=1 total.num.prefetch=1 num.answer.rcode.NOERROR=1 num.query.class.IN=1 num.query.edns.present=1 num.query.flags.AD=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 msg.cache.count=1 rrset.cache.count=1 infra.cache.count=1" echo echo "[ Enable serve-expired-client-timeout and check. ]" set_ub_option serve-expired-client-timeout 1 echo "> dig servfail.expired." dig @127.0.0.1 -p $UNBOUND_PORT servfail.expired. | tee outfile echo "> check answer" if grep "192.0.2.1" outfile; then echo "OK" else end 1 fi check_stats "\ total.num.queries=1 total.num.cachemiss=1 total.num.recursivereplies=1 num.query.type.A=1 num.query.class.IN=1 num.query.opcode.QUERY=1 num.query.flags.RD=1 num.query.flags.AD=1 num.query.edns.present=1 msg.cache.count=2 rrset.cache.count=2 infra.cache.count=2 num.answer.rcode.NOERROR=1" kill_pid $FWD_EXPIRED_PID # kill the expired forwarder to force a servfail from upstream. sleep 2 # make sure the TTL has expired. echo "> dig servfail.expired." dig @127.0.0.1 -p $UNBOUND_PORT servfail.expired. | tee outfile echo "> check answer" if grep "192.0.2.1" outfile; then echo "OK" else end 1 fi check_stats "\ total.num.queries=1 total.num.expired=1 total.num.recursivereplies=1 num.answer.rcode.NOERROR=1 num.query.class.IN=1 num.query.edns.present=1 num.query.flags.AD=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 total.num.cachemiss=1 msg.cache.count=2 rrset.cache.count=2 infra.cache.count=2" # Disable serve-expired set_ub_option serve-expired no echo echo "[ Check REFUSED; try without RD flag. ]" echo "> dig somethingelse.example.com." dig @127.0.0.1 -p $UNBOUND_PORT +nordflag somethingelse.example.com. | tee outfile echo "> check answer" if grep "REFUSED" outfile; then echo "OK" else end 1 fi check_stats "\ num.answer.rcode.REFUSED=1 total.num.cachehits=1 num.query.class.IN=1 num.query.edns.present=1 num.query.flags.AD=1 num.query.opcode.QUERY=1 num.query.type.A=1 total.num.queries=1 msg.cache.count=2 rrset.cache.count=2 infra.cache.count=2" echo echo "[ Check the AD flag. ]" echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT +noadflag www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else end 1 fi check_stats "\ num.query.flags.AD=0 total.num.cachemiss=1 num.answer.rcode.NOERROR=1 num.query.class.IN=1 num.query.edns.present=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 total.num.queries=1 total.num.recursivereplies=1 msg.cache.count=3 rrset.cache.count=3 infra.cache.count=2" echo echo "[ Check local zone. ]" echo "> dig www.local.zone." dig @127.0.0.1 -p $UNBOUND_PORT www.local.zone. | tee outfile echo "> check answer" if grep "192.0.2.1" outfile; then echo "OK" else end 1 fi check_stats "\ num.answer.rcode.NOERROR=1 total.num.cachehits=1 num.query.class.IN=1 num.query.edns.present=1 num.query.flags.AD=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 total.num.queries=1 msg.cache.count=3 rrset.cache.count=3 infra.cache.count=2" echo echo "[ Check NXDOMAIN (with local data). ]" echo "> dig mail.local.zone." dig @127.0.0.1 -p $UNBOUND_PORT mail.local.zone. | tee outfile echo "> check answer" if grep "NXDOMAIN" outfile; then echo "OK" else end 1 fi check_stats "\ num.answer.rcode.NXDOMAIN=1 total.num.cachehits=1 num.query.class.IN=1 num.query.edns.present=1 num.query.flags.AD=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.A=1 total.num.queries=1 msg.cache.count=3 rrset.cache.count=3 infra.cache.count=2" echo echo "[ Check CHAOS. ]" echo "> dig id.server. ch txt" dig @127.0.0.1 -p $UNBOUND_PORT id.server. ch txt | tee outfile echo "> check answer" if grep "stat_values" outfile; then echo "OK" else end 1 fi check_stats "\ num.query.class.CH=1 total.num.cachehits=1 num.answer.rcode.NOERROR=1 num.query.edns.present=1 num.query.flags.AD=1 num.query.flags.RD=1 num.query.opcode.QUERY=1 num.query.type.TXT=1 total.num.queries=1 msg.cache.count=3 rrset.cache.count=3 infra.cache.count=2" end 0 unbound-1.13.1/testdata/stat_values.tdir/unbound_server.key0000644000175000017500000000463314010434640023563 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/stat_values.tdir/stat_values.testexpiredns0000644000175000017500000000032014010434640025153 0ustar wouterwouter; nameserver test file $ORIGIN expired. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION servfail IN A SECTION ANSWER servfail 1 IN A 192.0.2.1 ENTRY_END unbound-1.13.1/testdata/stat_values.tdir/stat_values.conf0000644000175000017500000000132714010434640023207 0ustar wouterwouterserver: verbosity: 2 num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no extended-statistics: yes identity: "stat_values" local-zone: local.zone static local-data: "www.local.zone A 192.0.2.1" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" forward-zone: name: "expired." forward-addr: "127.0.0.1@@EXPIREDPORT@" unbound-1.13.1/testdata/stat_values.tdir/unbound_server.pem0000644000175000017500000000246614010434640023556 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/stat_values.tdir/unbound_control.pem0000644000175000017500000000247614010434640023731 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/stat_values.tdir/unbound_control.key0000644000175000017500000000462714010434640023740 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/stat_values.tdir/stat_values.post0000644000175000017500000000074714010434640023254 0ustar wouterwouter# #-- stat_values.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill $FWD_EXPIRED_PID >/dev/null 2>&1 # This is killed during testing. # it was stopped with unbound-control (if the test succeeded) kill $UNBOUND_PID >/dev/null 2>&1 kill $UNBOUND_PID >/dev/null 2>&1 exit 0 unbound-1.13.1/testdata/edns_client_string_opcode.rpl0000644000175000017500000000471614010434640022445 0ustar wouterwouter; config options server: edns-client-string: 10.0.0.0/24 "abc d" edns-client-string: 10.0.0.10/32 "123AbC!" edns-client-string-opcode: 65432 stub-zone: name: "edns-string-abc." stub-addr: 10.0.0.1 stub-zone: name: "edns-string-123." stub-addr: 10.0.0.10 stub-zone: name: "notag." stub-addr: 10.10.0.1 CONFIG_END SCENARIO_BEGIN Test EDNS string tag option RANGE_BEGIN 0 1000 ADDRESS 10.0.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION edns-string-abc. IN A SECTION ANSWER edns-string-abc. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END RANGE_BEGIN 0 1000 ADDRESS 10.0.0.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION edns-string-123. IN A SECTION ANSWER edns-string-123. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END RANGE_BEGIN 0 1000 ADDRESS 10.10.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION notag. IN A SECTION ANSWER notag. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION edns-string-abc. IN A ENTRY_END STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION edns-string-abc. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ff 98 ; Opcode 65432 00 05 ; Length 5 61 62 63 20 64 ; "abc d" HEX_EDNSDATA_END ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION edns-string-abc. IN A SECTION ANSWER edns-string-abc. IN A 10.20.30.40 ENTRY_END STEP 110 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION edns-string-123. IN A ENTRY_END STEP 120 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION edns-string-123. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ff 98 ; Opcode 65432 00 07 ; Length 7 31 32 33 41 62 ; "123Ab" 43 21 ; "C!" HEX_EDNSDATA_END ENTRY_END STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION edns-string-123. IN A SECTION ANSWER edns-string-123. IN A 10.20.30.40 ENTRY_END STEP 210 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION notag. IN A ENTRY_END STEP 220 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION notag. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN HEX_EDNSDATA_END ENTRY_END STEP 230 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION notag. IN A SECTION ANSWER notag. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b4_wild.rpl0000644000175000017500000001225314010434640020513 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.4 wildcard expansion. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION a.z.w.example. IN MX SECTION ANSWER a.z.w.example. MX 1 ai.example. a.z.w.example. RRSIG MX 7 2 3600 20150420235959 20051021000000 ( 40430 example. CikebjQwGQPwijVcxgcZcSJKtfynugtlBiKb 9FcBTrmOoyQ4InoWVudhCWsh/URX3lc4WRUM ivEBP6+4KS3ldA== ) SECTION AUTHORITY example. NS ns1.example. example. NS ns2.example. example. RRSIG NS 7 1 3600 20150420235959 20051021000000 ( 40430 example. PVOgtMK1HHeSTau+HwDWC8Ts+6C8qtqd4pQJ qOtdEVgg+MA+ai4fWDEhu3qHJyLcQ9tbD2vv CnMXjtz6SyObxA== ) ;; NSEC3 RR that covers the "next closer" name (z.w.example) ;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03 q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) SECTION ADDITIONAL ai.example. A 192.0.2.9 ai.example. RRSIG A 7 2 3600 20150420235959 20051021000000 ( 40430 example. hVe+wKYMlObTRPhX0NL67GxeZfdxqr/QeR6F tfdAj5+FgYxyzPEjIzvKWy00hWIl6wD3Vws+ rznEn8sQ64UdqA== ) ai.example. AAAA 2001:db8:0:0:0:0:f00:baa9 ai.example. RRSIG AAAA 7 2 3600 20150420235959 20051021000000 ( 40430 example. LcdxKaCB5bGZwPDg+3JJ4O02zoMBrjxqlf6W uaHQZZfTUpb9Nf2nxFGe2XRPfR5tpJT6GdRG cHueLuXkMjBArQ== ) ENTRY_END ; catch glue queries ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN A SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN AAAA SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.z.w.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION a.z.w.example. IN MX SECTION ANSWER a.z.w.example. MX 1 ai.example. a.z.w.example. RRSIG MX 7 2 3600 20150420235959 20051021000000 ( 40430 example. CikebjQwGQPwijVcxgcZcSJKtfynugtlBiKb 9FcBTrmOoyQ4InoWVudhCWsh/URX3lc4WRUM ivEBP6+4KS3ldA== ) SECTION AUTHORITY example. NS ns1.example. example. NS ns2.example. example. RRSIG NS 7 1 3600 20150420235959 20051021000000 ( 40430 example. PVOgtMK1HHeSTau+HwDWC8Ts+6C8qtqd4pQJ qOtdEVgg+MA+ai4fWDEhu3qHJyLcQ9tbD2vv CnMXjtz6SyObxA== ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) SECTION ADDITIONAL ai.example. A 192.0.2.9 ai.example. AAAA 2001:db8:0:0:0:0:f00:baa9 ai.example. RRSIG A 7 2 3600 20150420235959 20051021000000 ( 40430 example. hVe+wKYMlObTRPhX0NL67GxeZfdxqr/QeR6F tfdAj5+FgYxyzPEjIzvKWy00hWIl6wD3Vws+ rznEn8sQ64UdqA== ) ai.example. RRSIG AAAA 7 2 3600 20150420235959 20051021000000 ( 40430 example. LcdxKaCB5bGZwPDg+3JJ4O02zoMBrjxqlf6W uaHQZZfTUpb9Nf2nxFGe2XRPfR5tpJT6GdRG cHueLuXkMjBArQ== ) ENTRY_END SCENARIO_END unbound-1.13.1/testdata/09-unbound-control.tdir/0000755000175000017500000000000014010434640021027 5ustar wouterwouterunbound-1.13.1/testdata/09-unbound-control.tdir/bad_server.pem0000644000175000017500000000246614010434640023656 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFFzmVNbhjiApmjK3VeO/j9TBp8yOMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMzA3WhcNNDAwMzI1MTMzMzA3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAr7FId+AlZUWP6MK9xfV0hJ9ooJdcL0sm9yZsWY4UYOlqcTGERah/XvQm sOaKcMg8Wof24LAvo2vmariBYZoS61AAi6MeHHrPh8M2ZDMZQgW4nZC8A0biro93 nMLU1VxgycSVmj29p18IdNzsYWxC7t+/6AWQSlwD+9YFOYrVWQYxEcSZ7gZqoh08 mDsNRjnVs7nagPAbk/B9jj9zhvgp+0d5h25Ms7Td22t7DfsGlL8Ei3ewFwaqjThh hVHEVwARBLYGb2ZsZS5EMJv2W/V0k6yQZ+rV07+i0oZQ0cGxOuUy9TNO7HfiI4ri 2x26Wm0YH1qgK5miUIAkbL2E/iWVxMfQOdEAZuOmUpUFOFpm/XHL1/pCyiqOb98j jLE93UoNPZdsjrbjfQ/WPkap+vtigVZJJPet6F9x4S5XvrhXkV2JWIYMvhnrs9Np veCOe1lcxNVSsIAtMxsZKi2dIq+mRhfm9/UGoOmj8UxIQUepJJv1IHcdASWkTAMm USyF7z7DAgMBAAEwDQYJKoZIhvcNAQELBQADggGBAG+IhOsdEiaVCOB8PBRGJQ8F /kyeQOtE7pPPkH57qYwAW9cxdSoiIxrvase30IGLWmOzjiAc/igf1qz/bVpwFXQr XohzyeQJ2znlGzUbo67c8rocvWxHzvZwFuQEysJp/E9ft5kiWwoU/xVpoK5p9sxW zRTTdpA24x6rqvk1ZFzwWGSg0yhjOYfwvwg3kGCbwe3GzAk1J65E+uJPFoLySbNL p3eUDA2rUKDjVobJOEhtV8k/l+hB0kKwiz/A2sbMT/OoByWMNFKSkmDbNi5m5gJH FHsZsucbL6ppLy7fmOiPlx6xejbiTR3uAn0aQImdHA5kyfAXLKhTkyYdjWHiHqdQ XMxi0Ci7/HO9mRupbcjRZEPs//ozMxjOAg4VNasDLdnDI4EKrClqYPjsfoXXXiZf YTPH9QypxJFGmGEH865BNacEjDBeag8ck1ZTiK/GlrAJMqfV5/60GWBGRQVV/Tvd WXWY2x0gVp2fxtxF8JCvHKAcfUg2+LrUS7fbMx2Niw== -----END CERTIFICATE----- unbound-1.13.1/testdata/09-unbound-control.tdir/09-unbound-control.test0000644000175000017500000002355214010434640025315 0ustar wouterwouter# #-- 09-unbound-control.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # exit value is 1 on usage $PRE/unbound-control -h if test $? -ne 1; then echo "wrong exit value for usage." exit 1 else echo "exit value for usage: OK" fi # use lock-verify if possible # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # exit value is 1 when a bad command is given. echo "$PRE/unbound-control -c ub.conf blablargh" $PRE/unbound-control -c ub.conf blablargh if test $? -ne 1; then echo "wrong exit value on error." echo "> cat logfiles" cat fwd.log cat unbound.lo exit 1 else echo "correct exit value on error" fi # reload the server. test if the server came up by putting a new # local-data element in the server. echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf echo "$PRE/unbound-control -c ub.conf reload" $PRE/unbound-control -c ub.conf reload if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig afterreload." dig @127.0.0.1 -p $UNBOUND_PORT afterreload. | tee outfile echo "> check answer" if grep "5.6.7.8" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # must have had queries now. 1 since reload. echo "$PRE/unbound-control -c ub.conf stats" $PRE/unbound-control -c ub.conf stats > tmp.$$ if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi if grep "^total.num.queries=[1-9][0-9]*$" tmp.$$; then echo "OK" else echo "bad stats" cat tmp.$$ exit 1 fi # verbosity echo "$PRE/unbound-control -c ub.conf verbosity 2" $PRE/unbound-control -c ub.conf verbosity 2 if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # check syntax error in parse echo "$PRE/unbound-control -c ub.conf verbosity jkdf" $PRE/unbound-control -c ub.conf verbosity jkdf if test $? -ne 1; then echo "wrong exit value after failure" exit 1 fi # check bad credentials cp ub.conf bad.conf echo "remote-control:" >> bad.conf echo " server-key-file: bad_server.key" >> bad.conf echo " server-cert-file: bad_server.pem" >> bad.conf echo " control-key-file: bad_control.key" >> bad.conf echo " control-cert-file: bad_control.pem" >> bad.conf echo "$PRE/unbound-control -c bad.conf verbosity 2" $PRE/unbound-control -c bad.conf verbosity 2 if test $? -ne 1; then echo "wrong exit value after failure" exit 1 fi # check spoofedclient credentials rm -f bad.conf cp ub.conf bad.conf echo "remote-control:" >> bad.conf echo " server-key-file: unbound_server.key" >> bad.conf echo " server-cert-file: unbound_server.pem" >> bad.conf echo " control-key-file: bad_control.key" >> bad.conf echo " control-cert-file: bad_control.pem" >> bad.conf echo "$PRE/unbound-control -c bad.conf verbosity 2" $PRE/unbound-control -c bad.conf verbosity 2 if test $? -ne 1; then echo "wrong exit value after failure" exit 1 fi # create a new local zone echo "> test of local zone" echo "$PRE/unbound-control -c ub.conf local_zone example.net static" $PRE/unbound-control -c ub.conf local_zone example.net static if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1" $PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1 if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # check that www.example.net exists echo "> dig www.example.net." dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> check answer" if grep "192.0.2.1" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # check that mail.example.net has nxdomain echo "> dig mail.example.net." dig @127.0.0.1 -p $UNBOUND_PORT mail.example.net. | tee outfile echo "> check answer" if grep "NXDOMAIN" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # remove www.example.net - check it gets nxdomain echo "$PRE/unbound-control -c ub.conf local_data_remove www.example.net" $PRE/unbound-control -c ub.conf local_data_remove www.example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig www.example.net." dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> check answer" if grep "NXDOMAIN" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # remove nonexistent name - check bug#287(segfault) does not happen. echo "$PRE/unbound-control -c ub.conf local_data_remove test.example.net" $PRE/unbound-control -c ub.conf local_data_remove test.example.net # if crash then then we get: error: could not SSL_read from unbound-control if test $? -ne 0; then echo "wrong exit value after success" cat unbound.log echo "Not OK" exit 1 fi # remove example.net - check its gone. echo "$PRE/unbound-control -c ub.conf local_zone_remove example.net" $PRE/unbound-control -c ub.conf local_zone_remove example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig www.example.net." dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> check answer" if grep "SERVFAIL" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # dump the cache echo "> test cache dump" # fillup cache echo "dig www.example.com" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. echo "$PRE/unbound-control -c ub.conf dump_cache" $PRE/unbound-control -c ub.conf dump_cache > tmp.$$ if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi cat tmp.$$ if grep 10.20.30.40 tmp.$$; then echo "OK example.com is in cache dump" else echo "Not OK cache dump" exit 1 fi # test lookup echo "$PRE/unbound-control -c ub.conf lookup www.example.com" $PRE/unbound-control -c ub.conf lookup www.example.com if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # answer to lookup is meaningless because of use a forwarder, oh well. # load the cache dump. echo "$PRE/unbound-control -c ub.conf load_cache < tmp.$$" $PRE/unbound-control -c ub.conf load_cache < tmp.$$ if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # load local-zones from file echo "$PRE/unbound-control -c ub.conf local_zones < local_zones" $PRE/unbound-control -c ub.conf local_zones < local_zones if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig localzonefromfile." dig @127.0.0.1 -p $UNBOUND_PORT localzonefromfile | tee outfile echo "> check answer" if grep "REFUSED" outfile; then echo "OK" else echo "Not OK" exit 1 fi # load local-data from file echo "$PRE/unbound-control -c ub.conf local_datas < local_data" $PRE/unbound-control -c ub.conf local_datas < local_data if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig localdatafromfile." dig @127.0.0.1 -p $UNBOUND_PORT -t txt localdatafromfile | tee outfile echo "> check answer" if grep "local data from file OK" outfile; then echo "OK" else echo "Not OK" exit 1 fi # remove local-zone and local-data from file echo "$PRE/unbound-control -c ub.conf local_zones_remove < local_zones_remove" $PRE/unbound-control -c ub.conf local_zones_remove < local_zones_remove if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "$PRE/unbound-control -c ub.conf local_datas_remove < local_data_remove" $PRE/unbound-control -c ub.conf local_datas_remove < local_data_remove if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> check zone and data removal list_local_zones" $PRE/unbound-control -c ub.conf list_local_zones | tee outfile if grep "localzonefromfile" outfile; then echo "Not OK" exit 1 fi if grep "local data from file OK" outfile; then echo "Not OK" exit 1 fi if grep "otherlocalzone" outfile; then echo "OK" else echo "Not OK" exit 1 fi # flushing echo "$PRE/unbound-control -c ub.conf flush www.example.net" $PRE/unbound-control -c ub.conf flush www.example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "$PRE/unbound-control -c ub.conf flush_type www.example.net TXT" $PRE/unbound-control -c ub.conf flush_type www.example.net TXT if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "$PRE/unbound-control -c ub.conf flush_zone example.net" $PRE/unbound-control -c ub.conf flush_zone example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # now stop the server echo "$PRE/unbound-control -c ub.conf stop" $PRE/unbound-control -c ub.conf stop if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # see if the server has really exited. TRY_MAX=20 for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do if kill -0 $UNBOUND_PID 2>&1 | tee tmp.$$; then echo "not stopped yet, waiting" sleep 1 else echo "stopped OK; break" break; fi if grep "No such process" tmp.$$; then echo "stopped OK; break" break; fi done if kill -0 $UNBOUND_PID; then echo "still up!" echo "> cat logfiles" cat fwd.log cat unbound.log echo "not stopped, failure" exit 1 else echo "stopped OK" if test -f ublocktrace.0; then if $PRE/lock-verify ublocktrace.*; then echo "lock-verify test worked." else echo "lock-verify test failed." cat fwd.log cat unbound.log exit 1 fi fi fi echo "> cat logfiles" cat fwd.log cat unbound.log echo "> OK" exit 0 unbound-1.13.1/testdata/09-unbound-control.tdir/bad_server.key0000644000175000017500000000462714010434640023666 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4wIBAAKCAYEAr7FId+AlZUWP6MK9xfV0hJ9ooJdcL0sm9yZsWY4UYOlqcTGE Rah/XvQmsOaKcMg8Wof24LAvo2vmariBYZoS61AAi6MeHHrPh8M2ZDMZQgW4nZC8 A0biro93nMLU1VxgycSVmj29p18IdNzsYWxC7t+/6AWQSlwD+9YFOYrVWQYxEcSZ 7gZqoh08mDsNRjnVs7nagPAbk/B9jj9zhvgp+0d5h25Ms7Td22t7DfsGlL8Ei3ew FwaqjThhhVHEVwARBLYGb2ZsZS5EMJv2W/V0k6yQZ+rV07+i0oZQ0cGxOuUy9TNO 7HfiI4ri2x26Wm0YH1qgK5miUIAkbL2E/iWVxMfQOdEAZuOmUpUFOFpm/XHL1/pC yiqOb98jjLE93UoNPZdsjrbjfQ/WPkap+vtigVZJJPet6F9x4S5XvrhXkV2JWIYM vhnrs9NpveCOe1lcxNVSsIAtMxsZKi2dIq+mRhfm9/UGoOmj8UxIQUepJJv1IHcd ASWkTAMmUSyF7z7DAgMBAAECggGAKwY+GeURI1C6oiR2drDaPNQQuir2zzoXK7UE GZY6lVTz1Q5sNubBck5V30JFqsLOTNk48uMSd3Gn9oCCZpVlhqyLxaZHbHACvFto yXbd+5YNFMDp2d+VCWxmvUPU/P7nUOHMRP5ToFYcawni9SSe64Jtq3MZV6xa6WQK 2YGPJ4Llp1U+4NQ/br28JgdoA8eL9rxPrv2ds0fUZ25Qa0AAf+GL+Edhjyx+nAoh E1Zi0TBJ+6FuxOTEBVtGPnC8pRWFrYDfiMX4y8qkbbanAQCNgLn0PC0JdKpFAtk/ hnpGsZ4/oh0D3ogi6o5Xnn9Gl5+1uqqaEs/n6A4kojcJ/Z0uO7zJultSUDeggbA9 VoTQucFY1Cqj68d56Rf3kS5FGgAOx7Q6LVCIH7C9+bfs7N6z/2zl6sF72ey88kpK ZxsPjGUw2OHnwdrkfZHVMjiNUgrEH+KYe8EVmoBxoafGvxcs9mppqeczP3zbf5WX 8LBLQcIqNaSWAsuKQbJTNsbKEIT5AoHBANcs1QPluTGTY3BXvGMwjl3dDyf1h10u iaGi1tDB60YtF++RnwOl40Zi1Gu8GqmmzY9j32EG5moRO6IhuZ2U+lZcK/AiwY00 +4hnzc0hBInFlq3lLRa6zVj4rEeQJxuKXykJGLQyKtSqtppcAo7hWE08ZZ6DlnvP 4o4R9ii6gCZcajhr5Bh9FxZOHv+5gMRzOVWmMF0JSjnVToCi0UUY6b3roRdH/U+M 3EOVCOUT1WE7cGuZffkcQ3jQEsC9zRHFFwKBwQDRBsKIfm0FMjP2Z0aQDpHO5wR6 Vcjw2kmVukTPqlYPcDGaYbUVuQJIR7+ffd8xk0YbIeOfO/bXGngLAjKSGz20JIIW E/B5RkVycwjD/WeD5NMvKc3NaiT3aiXmnwz1YUzxDHByAtskAKsoXE/GIsyVCbV2 vDaBn3MCywTvcC9RR4KYeTepKMvd4N8KLgP9n/+hKd1ElsBVnPJUyYabmaOC1tpx DUyWu3dbhKBKcfEcyt1+YT1bPrfRnG9oxyRStzUCgcA8R9sFVH4lXV0mQ+4K+7dm pF9yml5pxHfaSHxVz33SEx/5hZo+s2KQfW91HyV5EbnUye3yiLRUUq+aJEiT1QCs 4PWOOK5wmL8+35XQOcfDsQ8deG7BR2Pv4PqiscfC92jhXiMFmGhXW9v8Mnqk/Ix4 VstBNSwbU4nssyt7DYSJOqqnU9J66dBl90zH53gjkQQm8n/qEIgy24c6kmJ+MRSK mFBw7UIR3yx14nKzenL04moEOuQHvdtJJUGbrZCdwdECgcBCra9cr0fDwpIE5kkC J0OoBtXM2JSzEE8s7jCJNkMhxZ5tKwIDHfN2bzzXeeW7AMn6WcMsxoolcBIfIOJU 7U+vqX294Tpy1VHOApgnPSzKTDJ59xHplxSXwEq62L3fgNx0gI1WMUcKoxP2Wgww nmU4ndI/QCb7Dow3td+rKdROT0t/rBtvYM43x0YfDzLCs0luddZZzOUp6lj7ZxYD iO06DaO9MIrgAok+rn4bgWFy19v0NrzF4KnuucJoYC5cHIkCgcEAzG+0oppa1L+e Tw+511VtO070XJ0Kx4DNKjP2F5nFSqTkDAyEEiLoIArO5dYGG5nHy3lXSoj+wvOe 1+3KTZPeFA7ZByceehFXrULT4GbHwbsimzLWBXAF2Dgzb2OZYMnKuFR/tjlW0+vP OP86cEkQXNJm4SsxxeFjJAcxxif305OzgL8oqndOsohopB+XCbKUP231HBMGJ4MR EljQHXm63wWWiBUmrX0ZYzWkX5KiAbDlfhvde80fKsDOUrzZfoBw -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/09-unbound-control.tdir/local_zones_remove0000644000175000017500000000002214010434640024631 0ustar wouterwouterlocalzonefromfile unbound-1.13.1/testdata/09-unbound-control.tdir/09-unbound-control.testns0000644000175000017500000000050314010434640025645 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/09-unbound-control.tdir/bad_control.key0000644000175000017500000000463314010434640024035 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAt/3PPZGM7eSdCnEQ04f6Y+Xnmp105gtxqoHxHfyGFG8ljNSd T1hKBjrg1BRVszTg+Td5V+Y4vAHW25Etvuvg0DQBNDKtrMTTbTZKQbT6A7Xgyp42 Oj8EyXFWs8BNx/joI1sAMUiCjPKpKAI5bIHV18It4n28MXWTVX5mfwcj82XPTQlO 6OhTXtA45idPLFKkCp4H879EIfIo1sfk+OTLjoSNLXFN3BoI9CIT6WZKrY0pAieL jdotSlirx/UpwpojAp6IVxzjZ2PHnJZbBwHxVPYnysMogcKQ9CyL1jBT2phWVe2J YJFwwGgziJH5CJEGVgWkctEtguKubzSCIf9RuX6j/n32ZRtAechm2Oi2WwxGr9tF uzLXgYsu/MQ+AhzcFP1MEGlyCkyL2fxgDry34Rq7RVQQL9PolhBYk2orYTlsjCVR kGzXvpFIF8OPDEEsXz2TTM2nkiCla1GqsGXL3xuPFjGD+CEMI5jB7U+j1uL2+xb/ gVUMAxvpNHADcW1/AgMBAAECggGAFEXF8N25rniTCRR+KyB/aURqqXGR8MrwAj6B B7HMQDIi7Ap9LsHmnhscrKF08+Luqub+2r2GIMj/GIA9jxzET4x7WXoAAtpJBW6G 7gh3x7LhitG13eMVrvBrAjE9ILx/L24Wblez8r3F/5+HHjqMClLd5We/NZ/j1Pax amup/WaJWc6dwDHhBcBhlJJeOd79LiJNdADuC+N3tnqd8wKanyBhwdELKCZCOEwM 75mSvt6f1xnuWXnhpaBxhP2xVTzQUNz1jxA2j/ybDbnBdhjLn9QlBY604t8nwRz8 dwCV6NRFbj85C1Fkw3FSzLSKzkzLGxYBvLpq6vjXiUHuY17bVDskCrgHOx/q0SXb ivPdmJWhThfPUMRgSTQXXvWpQfEdBP9FDXLFPN6yI9Xocxa4oaalNaK+xIJyXt9w ZkLb+ZB8+m4JqvgdrQiO0yEXM498aCdRfVnZV/e+GdbB90FW9SFf4/guca/I4SPD sFpA96LOyxkX4h5AQxyeoDDriKopAoHBAOEQXDMIXxp9gmkZNRo/mW7RvnmUyDic eCwCbcsLGjay/hKpyOTelXSF7bxdi6GuO5N9UWBQX2FK+//T/uT1kHjmUYTeLa47 iSDJG73TT6ZSwI0D8Ak+4GEneS3xjldpPW1oFZt/kwuji6yfUFw6orsPa/l5Uf7/ MCOzoFObtvDZKgd0BkBrQhlIG+u6jicrGfrVkCDX/ONqoQXr3a21b4nl52/r+ezj N2kKSQOTll5pUQ00+M0SPDwytFJbhbkTpQKBwQDRSCzHPTGVW5R+8BPQY2mRRyjp Pr1BmJXG05f2wjXeGhafWJ91RCwP7mOBbJDA15w3KoY9N64Rk6Mv5q0Ywwna7+Ea pTXCfzeuoC+sLL6llCA4kbpJsvrLAeCYyvMuiPjgXfDo2S8qMqAnZ+ZKD16OjBzE W6H2OI7Zmwjy7+C683Ac2kX+lIvbBeOu9oVtaSw/5nudScUi4njDz89Ha3g3j1AI 98crCLQdjTO94d5k4Mx4FFVdbxPwSa5iZcHWo1MCgcAnHI25PKIyW09Xbk8BIb5L ON3uCQIGfIKRu1ZTK7nBebeXjLPhuiCk4EVhL6x9S2cFCYkjwLPil4JVggTQyy/x Iq1V9rpfhe8dqHVOtrMnx0e4+c8z/B5II/D2H/1JiXtoUOc4X6IxKpmyRPlVHcd7 1IFCGGg8dSJrgeLBxNS05DhelTYk6b7R3+siOwhLHD1mjsh+PKqw5q3W9pdOgbJB d5eRpqOHHDFb6rKnkXVXMNwp/GOkV5/qIjGeAlOpxxUCgcEAlXLFB0Jbthy/3iXz AEz9hhEa1fVHkSA1VNalHkFx1jkrDn9q34LfNEE4LaQpeox9sadcVTr9wu97CSnh Ul11HDNQvIZd7ZaLXNhnMryBKByvJbZrIVX+YhnlGTdUkVae4xoyfxUY6TldxMYd XaW8EG9d25rT/dBFsn9T1KgYA2j0FqaIdVP+y1lZTggdIBSK1NbyT0/uxwqS0sID cyz7nDFrJfxK7iA4/yFmYaJ5/e/KE7Xxf9dilaUIMpwX3/6hAoHBAIYjfpbPfK21 AwHgZiopxOODsjbMuO/f4VCaMhkt8bm7LRmbsNl/Sk9paTNKf20fttKLi2cSUIn8 sP8iuwdrUNNhVd4cfsh+ncF4GitRs3WrZXEz8AB7m8frpzNr2pYcqVTPL8yl9i8t ix0XEoVwMWgFroWaN/G+ujEoPZUgXI9z5DuArkNOiLgbpcqVJ8e/+SWTeKILIkWT ZrFABevmFIaXSZLjI9Avk7cTqEKOVeZy9gag9lmbtVAzFFitdR4aWA== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/09-unbound-control.tdir/09-unbound-control.dsc0000644000175000017500000000053014010434640025076 0ustar wouterwouterBaseName: 09-unbound-control Version: 1.0 Description: 09 test unbound-control remote control tool CreationDate: Mon Sep 15 11:14:08 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: 09-unbound-control.pre Post: 09-unbound-control.post Test: 09-unbound-control.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/09-unbound-control.tdir/unbound_server.key0000644000175000017500000000463314010434640024607 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/09-unbound-control.tdir/local_data0000644000175000017500000000006514010434640023036 0ustar wouterwouterlocaldatafromfile 3600 TXT "local data from file OK" unbound-1.13.1/testdata/09-unbound-control.tdir/09-unbound-control.pre0000644000175000017500000000203114010434640025111 0ustar wouterwouter# #-- 09-unbound-control.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT 09-unbound-control.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < 09-unbound-control.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/09-unbound-control.tdir/unbound_server.pem0000644000175000017500000000246614010434640024602 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/09-unbound-control.tdir/unbound_control.pem0000644000175000017500000000247614010434640024755 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/09-unbound-control.tdir/local_zones0000644000175000017500000000005714010434640023264 0ustar wouterwouterlocalzonefromfile refuse otherlocalzone static unbound-1.13.1/testdata/09-unbound-control.tdir/local_data_remove0000644000175000017500000000002214010434640024404 0ustar wouterwouterlocaldatafromfile unbound-1.13.1/testdata/09-unbound-control.tdir/09-unbound-control.conf0000644000175000017500000000102414010434640025251 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/09-unbound-control.tdir/bad_control.pem0000644000175000017500000000247614010434640024031 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFEm6EpzKglG+V66IyIlx6Q2y3y8nMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMzA3WhcNNDAwMzI1MTMzMzA3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQC3/c89kYzt5J0KcRDTh/pj5eeanXTmC3GqgfEd/IYUbyWM 1J1PWEoGOuDUFFWzNOD5N3lX5ji8AdbbkS2+6+DQNAE0Mq2sxNNtNkpBtPoDteDK njY6PwTJcVazwE3H+OgjWwAxSIKM8qkoAjlsgdXXwi3ifbwxdZNVfmZ/ByPzZc9N CU7o6FNe0DjmJ08sUqQKngfzv0Qh8ijWx+T45MuOhI0tcU3cGgj0IhPpZkqtjSkC J4uN2i1KWKvH9SnCmiMCnohXHONnY8ecllsHAfFU9ifKwyiBwpD0LIvWMFPamFZV 7YlgkXDAaDOIkfkIkQZWBaRy0S2C4q5vNIIh/1G5fqP+ffZlG0B5yGbY6LZbDEav 20W7MteBiy78xD4CHNwU/UwQaXIKTIvZ/GAOvLfhGrtFVBAv0+iWEFiTaithOWyM JVGQbNe+kUgXw48MQSxfPZNMzaeSIKVrUaqwZcvfG48WMYP4IQwjmMHtT6PW4vb7 Fv+BVQwDG+k0cANxbX8CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEATI+xHWEiq3SK 9Dw2FBiD7GPaaPAh/u5h+QxaLS9G5a6Djh6F9RT3To+gRVeiaAaIPg53asGM5TGR ojv9nI8cIvi3dL6VKhHSdomldFjfQYmF/uSKEYsHaggceGE/GsG8J8g79HXGRp2y m5hkACKFh5ZcSHeJBplv7agDbBZ6w5qQaY6QsnYLrAK7B3Jo1Xx+JEKzmgnp4TwV Ni4wezgLiG+buJ5lXEYr2Rm7HR/cxLRN7CFrpUoavFUvqLKNpXO8MJFx+BkO5/JT pgv0O/ll9aT+kuegUpf9kcUzhpsw1N4W/JzZOyJAdxrrQ88aNZm+7d433wDBt/WF BCV4d5wEASxfQALEQa+/1FebIsDfQyBAOHdTAVkupZ00oeNerKe+mHFmNjj04vn8 LwGgVuADCBJVCDhEqHLEXUqiGeSHJhAJO9pjma7r7H81OtAs/xVC8j8hqe8wLBKg XNjWQ9QmNXt9VVQCMomro9lmoDozr9k1vsGtUsT3yQEAABQYwIjp -----END CERTIFICATE----- unbound-1.13.1/testdata/09-unbound-control.tdir/09-unbound-control.post0000644000175000017500000000064614010434640025322 0ustar wouterwouter# #-- 09-unbound-control.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID # it was stopped with unbound-control (if the test succeeded) kill $UNBOUND_PID >/dev/null 2>&1 kill $UNBOUND_PID >/dev/null 2>&1 exit 0 unbound-1.13.1/testdata/09-unbound-control.tdir/unbound_control.key0000644000175000017500000000462714010434640024764 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/fwd_udp.tdir/0000755000175000017500000000000014010434640017101 5ustar wouterwouterunbound-1.13.1/testdata/fwd_udp.tdir/fwd_udp.test0000644000175000017500000000076514010434640021442 0ustar wouterwouter# #-- fwd_udp.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_udp.tdir/fwd_udp.pre0000644000175000017500000000157414010434640021250 0ustar wouterwouter# #-- fwd_udp.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_udp.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_udp.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_udp.tdir/fwd_udp.post0000644000175000017500000000045014010434640021437 0ustar wouterwouter# #-- fwd_udp.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_udp.tdir/fwd_udp.conf0000644000175000017500000000036714010434640021406 0ustar wouterwouterserver: verbosity: 5 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_udp.tdir/fwd_udp.dsc0000644000175000017500000000044714010434640021231 0ustar wouterwouterBaseName: fwd_udp Version: 1.0 Description: Forward an UDP packet and return reply. CreationDate: Wed Feb 7 09:01:25 CET 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_udp.pre Post: fwd_udp.post Test: fwd_udp.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_udp.tdir/fwd_udp.testns0000644000175000017500000000031014010434640021765 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/iter_fwdfirst.rpl0000644000175000017500000000542714010434640020112 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. forward-zone: name: "example.com" forward-addr: 1.2.3.6 # failing resolver forward-first: yes CONFIG_END SCENARIO_BEGIN Test forward-first directive ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; local resolver (that fails a lot) RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA SERVFAIL SECTION QUESTION example.com. IN NS SECTION ANSWER ;example.com. IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ;www.example.com. IN A 10.20.30.50 SECTION AUTHORITY ;example.com. IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_pcttl.rpl0000644000175000017500000001073314010434640017404 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" do-ip6: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test cache ttls where parent child differ in ttl ; and the lameness for parent suddenly becomes the only information point. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.foo.com. SECTION ADDITIONAL ;ns.foo.com. 200 IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION foo.com. IN NS SECTION AUTHORITY foo.com. 200 IN NS ns.foo.com. SECTION ADDITIONAL ns.foo.com. 200 IN A 1.2.3.44 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; ns.foo.com. ; The parent-IP version RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION foo.com. IN NS SECTION ANSWER foo.com. 200 IN NS ns.foo.com. SECTION ADDITIONAL ns.foo.com. 100 IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.foo.com. IN A SECTION ANSWER ns.foo.com. 100 IN A 1.2.3.44 SECTION AUTHORITY foo.com. 200 IN NS ns.foo.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.foo.com. IN AAAA SECTION AUTHORITY foo.com. 100 IN SOA . . 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 200 IN NS ns.foo.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 100 IN A 10.20.30.40 SECTION AUTHORITY example.com. 200 IN NS ns.foo.com. SECTION ADDITIONAL ns.foo.com 100 IN A 1.2.3.44 ENTRY_END RANGE_END ; NOT USED. The parent side equals child side but not in the cache. ; and they have different TTLs only. ; ns.foo.com ; The child IP version. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION foo.com. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 100 IN A 10.20.30.40 SECTION AUTHORITY example.com. 100 IN NS ns.foo.com. ; scrubbed off ;SECTION ADDITIONAL ;ns.foo.com IN A 1.2.3.44 ENTRY_END ; Now we wait 101 seconds, and the child data is gone, ; but the parent-side was cached for 200 and it still there. STEP 30 TIME_PASSES ELAPSE 101 STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 100 IN A 10.20.30.40 SECTION AUTHORITY example.com. 100 IN NS ns.foo.com. ; scrubbed off ;SECTION ADDITIONAL ;ns.foo.com IN A 1.2.3.44 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/pymod_thread.tdir/0000755000175000017500000000000014010434640020130 5ustar wouterwouterunbound-1.13.1/testdata/pymod_thread.tdir/pymod_thread.testns0000644000175000017500000000334414010434640024055 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NXDOMAIN ADJUST copy_id SECTION QUESTION www6 IN A SECTION AUTHORITY example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NXDOMAIN ADJUST copy_id SECTION QUESTION www7 IN A SECTION AUTHORITY example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NXDOMAIN ADJUST copy_id SECTION QUESTION www8 IN A SECTION AUTHORITY example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NXDOMAIN ADJUST copy_id SECTION QUESTION www9 IN A SECTION AUTHORITY example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NXDOMAIN ADJUST copy_id SECTION QUESTION www10 IN A SECTION AUTHORITY example.com. 3600 IN SOA a. b. 2018100719 7200 3600 1209600 3600 ENTRY_END unbound-1.13.1/testdata/pymod_thread.tdir/pymod_thread.pre0000644000175000017500000000277614010434640023333 0ustar wouterwouter# #-- pymod_thread.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # if no python; exit if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else echo "no python module" exit 0 fi # get module python local cp $PRE/pythonmod/unboundmodule.py . if test "`uname 2>&1`" = "Darwin"; then ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" fi get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < pymod_thread.conf > ub.conf # see if config file verifies if $PRE/unbound-checkconf ub.conf 2>&1; then echo "checkconf OK" else echo "checkconf failed" exit 1 fi # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT pymod_thread.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/pymod_thread.tdir/pymod_thread.test0000644000175000017500000000361014010434640023510 0ustar wouterwouter# #-- pymod_thread.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else echo "no python module" exit 0 fi if test "`uname 2>&1`" = "Darwin"; then ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" fi # see if config file verifies if $PRE/unbound-checkconf ub.conf; then echo "checkconf OK" else echo "checkconf failed" exit 1 fi # do the test # generate some load. echo "> dig www[1-10].example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile1 & dig @localhost -p $UNBOUND_PORT www2.example.com. | tee outfile3 & dig @localhost -p $UNBOUND_PORT www3.example.com. | tee outfile2 & dig @localhost -p $UNBOUND_PORT www4.example.com. | tee outfile4 & dig @localhost -p $UNBOUND_PORT www5.example.com. | tee outfile5 & dig @localhost -p $UNBOUND_PORT www6.example.com. | tee outfile6 & dig @localhost -p $UNBOUND_PORT www7.example.com. | tee outfile7 & dig @localhost -p $UNBOUND_PORT www8.example.com. | tee outfile8 & dig @localhost -p $UNBOUND_PORT www9.example.com. | tee outfile9 & dig @localhost -p $UNBOUND_PORT www10.example.com. | tee outfile10 & wait # wait for all jobs to complete. echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" for x in outfile1 outfile2 outfile3 outfile4 outfile5; do if grep "192.168.1.1" $x; then echo "$x OK" else echo "$x Not OK" exit 1 fi done for x in outfile6 outfile7 outfile8 outfile9 outfile10; do if grep "192.168.1.1" $x; then echo "$x OK" else echo "$x Not OK" exit 1 fi done exit 0 unbound-1.13.1/testdata/pymod_thread.tdir/pymod_thread.post0000644000175000017500000000072414010434640023521 0ustar wouterwouter# #-- pymod_thread.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh # if no python; exit if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else echo "no python module" exit 0 fi kill_pid $FWD_PID kill_pid $UNBOUND_PID exit 0 unbound-1.13.1/testdata/pymod_thread.tdir/pymod_thread.conf0000644000175000017500000000046714010434640023465 0ustar wouterwouterserver: verbosity: 2 num-threads: 3 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no module-config: "validator python iterator" python: python-script: "pymod_thread.py" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/pymod_thread.tdir/pymod_thread.py0000644000175000017500000001526714010434640023174 0ustar wouterwouter# -*- coding: utf-8 -*- ''' ubmodule-msg.py: simple response packet logger Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. Modified for unit test by Wouter Wijngaards, NLnet Labs, 2009. ''' import os def init(id, cfg): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) return True def deinit(id): log_info("pythonmod: deinit called, module id is %d" % id) return True def inform_super(id, qstate, superqstate, qdata): return True def setTTL(qstate, ttl): """Sets return_msg TTL and all the RRs TTL""" if qstate.return_msg: qstate.return_msg.rep.ttl = ttl if (qstate.return_msg.rep): for i in range(0,qstate.return_msg.rep.rrset_count): d = qstate.return_msg.rep.rrsets[i].entry.data for j in range(0,d.count+d.rrsig_count): d.rr_ttl[j] = ttl def dataHex(data, prefix=""): res = "" for i in range(0, int((len(data)+15)/16)): res += "%s0x%02X | " % (prefix, i*16) if type(data[0]) == type(1): d = map(lambda x:int(x), data[i*16:i*16+17]) else: d = map(lambda x:ord(x), data[i*16:i*16+17]) for ch in d: res += "%02X " % int(ch) for i in range(0,17-len(data[i*16:i*16+17])): res += " " res += "| " for ch in d: if (ch < 32) or (ch > 127): res += ". " else: res += "%c " % ch res += "\n" return res def printReturnMsg(qstate): print ("Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount, qstate.return_msg.rep.security, qstate.return_msg.rep.ttl)) print (" qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str) if (qstate.return_msg.rep): print ("RRSets:",qstate.return_msg.rep.rrset_count) prevkey = None for i in range(0,qstate.return_msg.rep.rrset_count): r = qstate.return_msg.rep.rrsets[i] rk = r.rk print (i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags) print ("type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class)) d = r.entry.data print (" RRDatas:",d.count+d.rrsig_count) for j in range(0,d.count+d.rrsig_count): print (" ",j,":","TTL=",d.rr_ttl[j],"RR data:") print (dataHex(d.rr_data[j]," ")) def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) #print ("pythonmod: per query data", qdata) print ("Query:", qstate.qinfo.qname, qstate.qinfo.qname_list, qstate.qinfo.qname_str) print ("Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype) print ("Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass) print () if (event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS) and (qstate.qinfo.qname_str.endswith("example.com.")): print (qstate.qinfo.qname_str) qstate.ext_state[id] = MODULE_FINISHED # eat time y = 20 for z in range(2, 10000): y = y*2 - z/2 y = y/2 + z msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300) #msg.authority.append("xxx.seznam.cz. 10 IN A 192.168.1.1") #msg.additional.append("yyy.seznam.cz. 10 IN A 1.1.1.2.") # answer can be returned to the client without further checking. if qstate.qinfo.qtype == RR_TYPE_A: msg.answer.append("%s 10 IN A 192.168.1.1" % qstate.qinfo.qname_str) if (qstate.qinfo.qtype == RR_TYPE_SRV) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN SRV 0 0 80 neinfo.example.com." % qstate.qinfo.qname_str) if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN TXT path=/" % qstate.qinfo.qname_str) if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True #qstate.return_msg.rep.security = 2 #pokud nebude nasledovat validator, je zapotrebi nastavit security, aby nebyl paket zahozen v mesh_send_reply printReturnMsg(qstate) #Authoritative result can't be stored in cache #if (not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0)): # print "Can't store in cache" # qstate.ext_state[id] = MODULE_ERROR # return False #print "Store OK" qstate.return_rcode = RCODE_NOERROR return True if event == MODULE_EVENT_NEW: qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: previous module done") qstate.ext_state[id] = MODULE_FINISHED return True if event == MODULE_EVENT_PASS: log_info("pythonmod: event_pass") qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") qstate.ext_state[id] = MODULE_ERROR return True log_info("pythonmod: script loaded.") unbound-1.13.1/testdata/pymod_thread.tdir/pymod_thread.dsc0000644000175000017500000000045714010434640023310 0ustar wouterwouterBaseName: pymod_thread Version: 1.0 Description: Test python module threaded CreationDate: Fri Mar 12 11:41:03 CET 2010 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: pymod_thread.pre Post: pymod_thread.post Test: pymod_thread.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/autotrust_addpend_early.rpl0000644000175000017500000002251614010434640022162 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with ADDPEND used too early ; this should not work, as the holdown has not expired yet. ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. nDlOZCE24pNtuoYkmmy9cVvtCn7ykdmlhJX9hYcI9b3DzqJjOrGz3GD5RQvti3uxD74gFcFho0g76NwOKFx/qQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. qBHDZu0XQmr6kpt51r1DxT5tuyfwSHcoL8qLpwwhyyNFF13OPlvxgmCVl+1v27A9+h8tcuqaNls5f+tcFBwtRg== ;{id = 60946} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; t3 is removed third poll time. ; only 10 days later: hold down has not lapsed! (need 21 days). STEP 41 TIME_PASSES EVAL ${10*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} ; must fail! STEP 44 ASSIGN probe4 = ${range 3200 ${timeout} 3600} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 6 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END SCENARIO_END unbound-1.13.1/testdata/val_dnametoposwc.rpl0000644000175000017500000002007314010434640020576 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a dname to positive wildcard ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER example.com. IN DNAME example.net. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFH1xw24Hswia3g10AVL1yFUHUPdFAhQDrA+qZJwqXRPg2C1oiNPk9fosGg== ;{id = 2854} ; unsigned CNAME www.example.com. IN CNAME www.example.net. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER ; from *.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 2 3600 20070926134150 20070829134150 30899 example.net. quSyDbSeHRvyMmanqq5rW+APC9MKOswbRLB5QP/G+C2iyokQFLuRTlX9Wmo/jo1Oo1MGBefJUmP9NdRd2EqABA== ;{id = 30899} SECTION AUTHORITY wab.example.net IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER example.com. 3600 IN DNAME example.net. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFH1xw24Hswia3g10AVL1yFUHUPdFAhQDrA+qZJwqXRPg2C1oiNPk9fosGg== ;{id = 2854} www.example.com. 0 IN CNAME www.example.net. www.example.net. 3600 IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 2 3600 20070926134150 20070829134150 30899 example.net. quSyDbSeHRvyMmanqq5rW+APC9MKOswbRLB5QP/G+C2iyokQFLuRTlX9Wmo/jo1Oo1MGBefJUmP9NdRd2EqABA== ;{id = 30899} SECTION AUTHORITY wab.example.net IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_domain_sale_nschange.rpl0000644000175000017500000001563514010434640022405 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver with a domain sale and NS changes ; and the old operator is nasty, keeps running his server with the old data. ; and lots of lookups keep going towards the domain. ; and the old server is changing the NS record of the old domain. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. (before sale of domain) RANGE_BEGIN 0 20 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; a.gtld-servers.net. (after sale of domain) RANGE_BEGIN 30 200 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 8.8.8.8 ENTRY_END RANGE_END ; ns.example.com. first owner RANGE_BEGIN 0 30 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; nxdomains for any name,type ; last in RANGE so that it matches everything left over. ; it includes the NS record. ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR AA NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA a. b. 1 2 3 4 5 example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. first owner, NS changed RANGE_BEGIN 40 200 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS nsb.example.com. SECTION ADDITIONAL nsb.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS nsb.example.com. SECTION ADDITIONAL nsb.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; nxdomains for any name,type ; last in RANGE so that it matches everything left over. ; it includes the NS record. ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR AA NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA a. b. 1 2 3 4 5 example.com. 3600 IN NS nsb.example.com. SECTION ADDITIONAL nsb.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. new owner RANGE_BEGIN 0 200 ADDRESS 8.8.8.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 8.8.8.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 88.88.88.88 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 8.8.8.8 ENTRY_END RANGE_END ; Fetch the old record from the old owner. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 5 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; the domain is sold (right at this time). ; but the information stays in the cache. ; after 1800 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 1800 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 1800 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1800 IN A 1.2.3.4 ENTRY_END ; and ask another query STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx1.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; at TTL 5 because TTL capped at ttl of minttl in rdata of SOA. example.com. 5 IN SOA a. b. 1 2 3 4 5 ;example.com. 3600 IN NS nsb.example.com. SECTION ADDITIONAL ;nsb.example.com. 3600 IN A 1.2.3.4 ENTRY_END STEP 62 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx1.example.com. IN A ENTRY_END ; recursion happens here. STEP 63 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; at TTL 5 because TTL capped at ttl of minttl in rdata of SOA. example.com. 5 IN SOA a. b. 1 2 3 4 5 ;example.com. 1800 IN NS nsb.example.com. SECTION ADDITIONAL ;nsb.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; after another 1900 seconds the domain must have timed out. STEP 70 TIME_PASSES ELAPSE 1900 ; the NS record should have timed out. STEP 80 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 90 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 88.88.88.88 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 8.8.8.8 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+008+29332.ds0000644000175000017500000000013614010434640020422 0ustar wouterwouterexample.com. IN DS 29332 8 2 751f8b755718a7b4ef8920a4b42407520889c3d2142a64f6ffad9e12fa9fc262 unbound-1.13.1/testdata/test_sigs.rsasha512_draft0000644000175000017500000000172114010434640021330 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test RSASHA512 signatures from draft-ietf-dnsext-dnssec-rsasha256-14 ENTRY_BEGIN SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY (256 3 10 AwEAAdHoNTOW+et86KuJOWRD p1pndvwb6Y83nSVXXyLA3DLroROUkN6X0O6pnWnjJQujX/AyhqFD xj13tOnD9u/1kTg7cV6rklMrZDtJCQ5PCl/D7QNPsgVsMu1J2Q8g pMpztNFLpPBz1bWXjDtaR7ZQBlZ3PFY12ZTSncorffcGmhOL);{id = 3740 (zsk), size = 1024b} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. 3600 IN A 192.0.2.91 www.example.net. 3600 IN RRSIG (A 10 3 3600 20300101000000 20000101000000 3740 example.net. tsb4wnjRUDnB1BUi+t 6TMTXThjVnG+eCkWqjvvjhzQL1d0YRoOe0CbxrVDYd0xDtsuJRa eUw1ep94PzEWzr0iGYgZBWm/zpq+9fOuagYJRfDqfReKBzMweOL DiNa8iP5g9vMhpuv6OPlvpXwm9Sa9ZXIbNl1MBGk0fthPgxdDLw =);{id = 3740} ENTRY_END unbound-1.13.1/testdata/test_ldnsrr.40000644000175000017500000000654614010434640017153 0ustar wouterwouter; opendnssec all.rr.org file @ IN SOA ns1 postmaster.all.rr.org. ( 1 3600 600 86400 3600 ) ; min TTL [1h] ns1.all.rr.org. IN A 10.1.0.52 all.rr.org. IN NS ns1.example.com. ; MD ; MF foo.all.rr.org. IN CNAME ns1.all.rr.org. all.rr.org. IN MB mb-madname.example.com. all.rr.org. IN MG mg-mgmname.example.com. all.rr.org. IN MR mr-newname.example.com. ; NULL ; WKS bar.all.rr.org. IN PTR ns1.all.rr.org. all.rr.org. IN HINFO SUN4/110 UNIX helium IN HINFO "Shuttle-ST61G4 Intel PIV3000" "FreeBSD 7.0-STABLE" all.rr.org. IN MINFO minfo-rmailbx.example.com. minfo-emailbx.example.com. all.rr.org. IN MX 10 VENERA.all.rr.org. selector._domainkey.all.rr.org. IN TXT "v=DKIM1; n=Use=20DKIM; p=AwEAAZfbYw8SffZwsbrCLbC+JLErREIF6Yfe9aqsa1Pz6tpGWiLxm9rSL6/YoBvNP3UWX91YDF0JMo6lhu3UIZjITvIwDhx+RJYko9vLzaaJKXGf3ygy6z+deWoZJAV1lTY0Ltx9genboe88CSCHw9aSLkh0obN9Ck8R6zAMYR19ciM/; t=s" all.rr.org. IN RP rp-mbox.example.com. rp-txtdname.example.com. all.rr.org. IN AFSDB 1 afsdb-hostname.example.com. all.rr.org. IN X25 311061700956 all.rr.org. IN ISDN 150862028003217 004 all.rr.org. IN RT 10 NET.Prime.COM. all.rr.org. IN NSAP 0x47.0005.80.005a00.0000.0001.e133.ffffff000161.00 ; NSAP-PTR ; SIG ; KEY all.rr.org. IN PX 10 net2.it. PRMD-net2.ADMD-p400.C-it. ; GPOS all.rr.org. IN AAAA 2001:db8::3 all.rr.org. IN LOC 42 21 54.5 N 71 06 18.3 W -24m 30m ; too lenient LOC record all.rr.org. IN LOC 42N 71 06 18.3W -24m 30m ; NXT ; EID ; NIMLOC _http._tcp.all.rr.org. IN SRV 0 5 80 ns1.example.com. ; ATMA all.rr.org. IN NAPTR 100 10 "" "" "!^urn:cid:.+@([^\\.]+\\.)(.*)$!\\2!i" . all.rr.org. IN KX 2 rt1.example.com. all.rr.org. IN CERT 6 0 0 FFsAyW1dVK7hIGuvhN56r26UwJx/ ; A6 frobozz.all.rr.org. IN DNAME frobozz-division.acme.example. ; SINK ; OPT ; APL sub.all.rr.org. IN DS 12345 3 1 123456789abcdef67890123456789abcdef67890 all.rr.org. IN SSHFP 2 1 123456789abcdef67890123456789abcdef67890 all.rr.org. IN IPSECKEY 10 1 2 192.0.2.38 AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== all.rr.org. IN RRSIG A 5 3 86400 20030322173103 ( 20030220173103 2642 example.com. oJB1W6WNGv+ldvQ3WDG0MQkg5IEhjRip8WTr PYGv07h108dUKGMeDPKijVCHX3DDKdfb+v6o B9wfuh3DTJXUAfI/M0zmO/zz8bW0Rznl8O3t GNazPwQKkRN20XPXV6nwwfoXmJQbsLNrLfkG J5D6fwFm8nN+6pBzeDQfsS3Ap3o= ) all.rr.org. IN NSEC host.example.com. A MX RRSIG NSEC all.rr.org. IN DNSKEY 256 3 5 ( AQPSKmynfzW4kyBv015MUG2DeIQ3 Cbl+BBZH4b/0PY1kxkmvHjcZc8no kfzj31GajIQKY+5CptLr3buXA10h WqTkF7H6RfoRqXQeogmMHfpftf6z Mv1LyBUgia7za6ZEzOJBOztyvhjL 742iU/TpPSEDhm2SNKLijfUppn1U aNvv4w== ) all.rr.org. IN DHCID ( AAIBY2/AuCccgoJbsaxcQc9TUapptP69l OjxfNuVAA2kjEA= ) ee19kl3631qol646kjjrh6lh96pduqii.all.rr.org. IN NSEC3 1 0 5 6467b16f6f36ba4d 13k9b8dv58kcn28us3fc0lqa60jeadp0 A RRSIG all.rr.org. IN NSEC3PARAM 1 0 5 6467b16f6f36ba4d ; 52-54 all.rr.org. IN HIP ( 2 200100107B1A74DF365639CC39F1D578 AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cIvM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ryra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXdXF5D rvs.example.com. ) ; NINFO ; RKEY ; 58-98 all.rr.org. IN SPF "v=spf1 +mx a:colo.example.com/28 -all" ; UINFO ; UID ; GID ; UNSPEC ; 104-248 ; TKEY ; TSIG ; IXFR ; AXFR ; MAILB ; MAILA ; ANY ; 256-32767 ; TA all.rr.org. IN DLV 12345 3 1 123456789abcdef67890123456789abcdef67890 ; 32770-65279 ; 65280-65534 ; 65535 unbound-1.13.1/testdata/val_fwdds.rpl0000644000175000017500000001732214010434640017205 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. forward-zone: name: "sub.example.com" forward-addr: 1.2.3.6 CONFIG_END SCENARIO_BEGIN Test forward-zone with DS query ; The fwd zone is linked validly with a DS to the public internet zone. ; unbound just has to be able to ask the DS from the right server (not ; from the fwd). ; Here the fwd is not even recursive, just the plain server for sub.example.com ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for DS of sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response for qtype DS. This is not available here. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR SERVFAIL SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_packets.70000644000175000017500000003753614010434640017307 0ustar wouterwouter; switch.ch ANY with strange RRSIG ordering. B0518510000100170000001A067377697463680263680000FF0001C00C0006000100015180002A067363736E6D73C00C0A686F73746D6173746572C00C77C09B050000708000001C2000093A80000000B4C00C00230001000151800024006400320173075349502B44325500045F736970045F7564700673776974636802636800C076000100010000003C0004823B8A22C076001C00010000003C0010200106200000001B000000000000000BC076002E000100015180007D00060502000151804B24A0F24AFD13F2FC60067377697463680263680077281AD5F78041CC354CA718703D133A36D0CE63C8E1FA0378DA2B3B4EB935E241225C23F786F5365D2D F39E8A84702BEDA2591A82BCBDF4E8DD9094296CED48301DAA5DD71B0B8E60E69A858B8FD1ABD555C6711911D966FDFED53C9AC5A477C0CB002E00010002A300007D000205020002A3004B11ADE94AEA20E9FC600673776974636802636800BE4DD85BC15B5AB0575FA1E4ACE582D25A853D8A914FE431B2D057D56CE07B8017FC0994664AFB4B3B830B7E9A88B5C3FB7DACA5921B886BF6B20D4A08E24C73FCE86FDC3738DDBAAF8DB36321FABE9DCE94479C752AABB17B7FAF3D1B2B3F53C154002E00010000003C007D000105020000003C4B11ADE94AEA20E9FC60067377697463680263680000F41CF28713DCE591995F7FABB71832669065F359F2BE0F 1369BFA762005BD24ED3B9EB0E3706BC00F38810D2B60389AE55A5481B2662F76D09C632C9A0171F7ECD22D58E99106A1D5F3A4599AAD7287ECD20FB96BD6FBE4ADB87CACE63D358C1DD002E00010000012C007D000F05020000012C4B11ADE94AEA20E9FC600673776974636802636800DD53A4C140E5717101092724AD0CB23D2C47D5486711171C0BCFADA2B161202A964A663419C1A077E6D9ADAFD2749DF11930F03AED5E295A2C592E4EE9816E6AF1BF504DDEC5B99370BFA58330F165807DE37FD96BAFF859F263F37B16A37D4DC266002E00010000003C007D001C05020000003C4B11ADE94AEA20E9FC6006737769746368026368007A30FB0344B3 5150669907042E30A66B1F674DE2E659710BC63B900522C22C209BDE6BBD7660F0BA579E2D497E3BA5C8098EE2B4F6247B6CA182AC9473B47738367FC67AB4D4CD5341B51F50A3AF16BA576E3F3C7C893E44AE04180FF631574DC2EF002E000100015180007D001D0502000151804B11ADE94AEA20E9FC60067377697463680263680028FB119F1E1F9DCDD48F3FC65030CA2AB06700A9331030EE4DFB933C6E6EA93EC22867117951F7E820D9D069DC44F78B7F5C740154AFCC7B8749DA956FFB80A9AEA311D503404A3CB8D771A1486F8E388F8CC410C7C433551FEE2DC8A8B89312C378002E000100015180007D00230502000151804B11ADE94AEA20E9FC 6006737769746368026368004930DC3A37A7BBE7585E62BFC6C024F68A421977CA990DF5D60CB6313A8F24829CAACC70F284DC4184CBA8C774BAFD72D418F81E5E14195BE398CC532824933260536DF58BD66A395D46FFDFF9F9902FD42E7C699A6A3EF50D22D3648829DAB3C401002F0001000000B4001F0672657331303203313032067377697463680263680000076201000C100380C483002E0001000000B4007D002F0502000000B44B12C1EC4AEB34ECFC600673776974636802636800039A5F99A0EAA9F55C2D138044208FC77DC2C0B85968CE642F9D6B1F7D5F83A800FD8908855FC55F7177CFCFCB5F1F2703C2BC5CDDC3346062BD1DFB28CFD91D 7E2B8DF25BEDBD2ADAC1539224DAF7BD8B4CC265955B0169DBFFF55DBEB92E6CC4B5003000010001518001080101030503010001BC06344005077BCC13F4DC094F157C2E49A33E9ED3835E32401A0BE8DB36214601E6D848CEF9A2A34788090081E953DCAD10A8A9B98E5ACBDF0B69AD0F106FC3385C3293253E0A14B78BAD1BD7CCF86B96209EAD12DFEDF02CF5B7BEB524F5753248B4354C5451277AF881CD5A4E1710C3B69ADB4FDD5C5A09B20F3324E658AD29D5E1BD4A1A17853DEF9CFBF1C80718850EE179A4486CA6CFCA577E9CDA80D35AC732D275E6678FDA0F1042880A7F4BCAF49F74CDF948D7E71586B10F9D908DC3C5C81232DC4C36218D7582 E5CD9960272EDFD95CB613352C49393CFC07C94BF871292B8895493731EB8942D0E588DB49BFA4979AF5A7D900DCEE20FE80D6F3C4B5003000010001518000680100030503010001D7AE707CBD0F618702D448E87AF0020008AC85EBA502F5F39D2F396D1581A99F3928CDA7E2FF138224CED79D1F1CE7D303DAEE1A4323F79416FD892D7290FBEA3C00FA5DC25F4BFDA357953A047597F1560D768BCBB367102933102E8353E415C4B5003000010001518000680100030503010001E0835B08C93B89970736B288A7F8A7BC1A27B1307949EC4EC016931A5F10B722E22695741BA0CD83DFB19220F51E9320F932DCBA0F00F9888C27367DB1642A7AC623B849 8D7006311C11248069AC5C78057652B23B2F19BE8C182F9EC474A55FC4B5002E000100015180011D00300502000151804B24A0F24AFD13F2AB3D0673776974636802636800B1F71FCBF44A0FDA3F339DC419113966FCD4DDA1A032681F5018E3FC2E3740105A2A3A3DBC66EE954BB9518C4AFA0F0463001D68BD8578D52085B73CB4777E13C07D3E479F925D3EA2133FA4D6AE1F3FF8AABD9A8CA37501131A5DA53780C6F697EABE2AE5027D96451B82EAE2E0AB9F62BA518D41C49C1D001D15F31B115F7656C6294E23C7F9CBFA7CA28A5B5F6E56A61C08238802F4342B7DF893013328BB638EA81A39ADE7BC737E097EFDA9A1F6E929AE49AE40E275369E48 9E9ACFF2639EF00665FEFC67EB7F384AF0E4C6514445C6F4F8AA0C96137B45CD9FF1E075002FD75060E67AD07430365998CF5AE2AF1D6DC2F10CE7267BF320C40B62CF2C97C73A002E000100015180007D00300502000151804B24A0F24AFD13F2FC6006737769746368026368004AA60548E8E119C5028898B96F3E719947B0E6EE1E867B861022342D79E09B38540ABC2F7D2BE2F257F8B090AD21743A613627F03ECF18FEC2EDEB5225225F431FA76573BB94DADF6FC20FB09896D2C8248FB3DD3F0CD1CEC09CCC918299B23BC863000200010002A3000002C027C863000200010002A3000009066D6572617069C863C863001D0001000151800010001216 138A2AAAA981D5657900994648C863000F00010000012C000C001407616C6574736368C863C863000F00010000012C000A0014056D6564656CC86306616E75626973C86300010001000151800004823B0A5C0865737472656C6C61C86300010001000151800004823B6C6FC8E8000100010002A3000004823BD30AC8E8001C00010002A300001020010620000000000000000000000005C027000100010002A3000004823B011EC027000100010002A3000004823B0A1EC027001C00010002A300001020010620000000000000000000000001C933000100010000012C0004823B6C26C933000100010000012C0004823B6C27C933001C00010000012C001020 0106200000001402144FFFFE754774C933001C00010000012C0010200106200000001402144FFFFE754775C91B000100010000012C0004823B8A1AC91B000100010000012C0004823B8A1BC91B001C00010000012C0010200106200000001B0203BAFFFEBE9059C91B001C00010000012C0010200106200000001B0203BAFFFEBE905AC06C002E00010000012C007D002105040000012C4B11ADE94AEA20E9FC600673776974636802636800976C32190811F36B7EB9AF4D6F0A19E0CEE36B0293D8F956D43CDB55A9E7E07079590DB7EF6BC21E8AB71EEC0C7FEF4F6654C30A594118E0879FE0419B3F081C55C5C79464FB4E22B47A7342117613CA9EFAB15F B6BD39DFC78DE09EDD8C84EEC93B002E000100015180007D00010503000151804B11ADE94AEA20E9FC6006737769746368026368002C0DBE38052528746486C66537C3605EC7B3EDCB661F9833AE84BFFAF581FEE5CE430C349B3F33E9564CFCC5D761F2FE04C7CDACE04543A2BA0386E86A74C2608ACE110A17A3E21342F4D3247D97340C2BF599FF73A46F870EB43D77CFDEA1CFC952002E000100015180007D00010503000151804B11ADE94AEA20E9FC6006737769746368026368005F3C8F014D97512C6EE50BEEB1436B2735438D21383291FC5CFFF824ED091BFBBA2EFB6F375B89CAA75A82DEED0BBDCE9CEDD342D029D7AB934FA41968A561C19840 3FCAB16C7D6145F2F9B864CB73AB12D6BA0E4BF8B57FEF274A638A908E63C8E8002E00010002A300007D000105030002A3004B11ADE94AEA20E9FC600673776974636802636800DCA5BD623C5D2F4F05A9560A1529FD438FBC535898AD50AE9FE275372F18222302FBAA104BF199C119F69ABF8732BBB0123341F6CEDB586CD19918914C04CFBD2EBB8318C28899123F9F0F906275756DF005ACFAAF57DE18DBF32A11CB86F45EC8E8002E00010002A300007D001C05030002A3004B11ADE94AEA20E9FC60067377697463680263680086533D7CE4D47F70A42B4FE06CF2F5B3C30308130533F184D838436E61952148946224F0CEE10A2BE3931A0B2A339385 A608C7155005EBEDCA2176A559EFAF28D5DA1E91F540874BAA1C46BB08B1BAAE1812699A18139CF02851AB058D044DB8C027002E00010002A300007D000105030002A3004B11ADE94AEA20E9FC60067377697463680263680077107EC5D87E073BDE7E022FD121A8E0D6FF851C38633197FC0C16900C916F617EBB895E985476BB68B62025C5378EBC8F6949CF045493041D7E0CBA75BA11F2DE6C0E0CBE40EE77BF9C72CF2D9789DFF31D39CFA37277FEE26D1685CAD8EF13C027002E00010002A300007D001C05030002A3004B11ADE94AEA20E9FC600673776974636802636800AF3A14ECD3CB4138D4335C4C21A8A11938100397E939D167C3AAD6BE357E 13BBDA2EC641FB23993A72ED6606C8C85E0D1660CC1770769697CEE7EB8E6474714984D7FF41FBBE48FF4A70669101BF00320340B82DC590B2C19D0006841121DC6AC933002E00010000012C007D000105030000012C4B11ADE94AEA20E9FC600673776974636802636800561C052414445D427CE00A40ACE2DA2EC168523823830CA724B087B8116F46B3CD051C5EC5874F6FC75CF6BA846279E469C474A75F9334242BB66FDD367C73B8BBC3F8748736BC5E6AED8B9B7C5FB5FE2DEDFBF46B403BC173DE958C038CFCCAC933002E00010000012C007D001C05030000012C4B11ADE94AEA20E9FC600673776974636802636800A6F44063C12A5A8BF5BCFADD 745C5B3915E463DA478131E636347EED414675023BBCA5BA2AABEC2FA3DF976A2343B4AA3403D1AFA3D470D25812BD1A319FBB5B833244D0FA18A59BB69ABB77BBDB3D7F62740D3871A69A5B9D43331D78AB8AE8C91B002E00010000012C007D000105030000012C4B11ADE94AEA20E9FC6006737769746368026368008906D2CFEFC3AA652125DD021CAB6392EBC4A9B4B3CFE3B07E4AFE7DA3263C7B8CE5DC3B66DA45D120E75B3D49ADC1F7D2E9A04A31760698FCFDEAB4AC82915D8E0AD2494DB4F11C02E115C3BD47DC8E57EDA7805BF0E7820A445F93A07698DF0000291000000080000000 ;-- es.net IN ANY about RRSIG ordering. 687D8410000100150000000E026573036E65740000FF0001C00C00060001000151800027036E7331C00C0A686F73746D6173746572C00C77CECF4300001C2000000E100012750000000258C00C002E000100015180011A00300502000151804BE2932A4BD0101A2522026573036E657400AF2107A80A9D98A0712FF20826B95D8E686FFF023BEEAD1019045569D94D1493C84C819446ECB5489EBC6B556F4BE4B51A8E9CAC8BAA69F2B74948B78CBB197044E3D3A9E0E5EA958254637984D34BAE34167E1437D275E01C4B7C04C34053333514E1FE7EAC7C4777B02F24356F1F775526E19F54A21D3A134DC74DE153F9267008F5605D3BE38E61352BA9495D77 97A76735BD68350CD648F40F95ADA4B25464A615E7CD4870E23C21D681F5C68C3DE9477D2EC7216FDF3269F5993428D0F1A4B7E203A04AB6807836263FDD7D6796BE6D84478B906B802DEBDCB1E0870481388503F0396CAD24147BC819A855E6CBCE98526ECAF8423450E30CB4F59C7062C069002E000100015180009A00300502000151804BE2932A4BD0101A4BA3026573036E657400602356C2D379E94F97D2900473D118288D46CFBCAAFF73D8A6FDF0B4305E8B338DD53A90106CDD78BF82A1AEC20B7C02067FDE1BEEC912E5581687BB32DD8BDC7E84B3F844F01E198E75C179194447C13B568886B33933FF35370060440D64E2DB7446962CA348C199 DDFE4AA252AFFDEB3A818D1BF45CD795EA0907332B4508C18F002E000100015180009A00060502000151804BE2932A4BD0101A4BA3026573036E6574004FFB07563C6F88028C0E09CF163BAC777065BDCC826C583A3B3ABD525D6AF5101A6D5533888E5BAAA33DE28B52330815E14034506C4C69EDE8AD1A1F00B486C670FE0DC2F3B5F7210EBAC66695CC8679F2CA2353666A143A2E3E87377DCD8D3E6E450934BBD4CC6F9EE033E11D05CA3F44B1A64A2666E3AF2A8710F16FF8CC33C235002E000100000258009A002F0502000002584BE2932A4BD0101A4BA3026573036E6574003D2DDC713285C7338263BD338AFEEAB77571054B1F483A7BADC87BAF32 0740A8D1B8B28CB23E04A80F90979704B44FE379103F4D91482D0EBC1D7005E326668F30B2A434F9DE76BB90DFEF2BFEDEE8CAD62164CA089651AB31498F18ED9A1E5694B4D460FFA4E667950322B2A75E8FD408B6A54EDB00257CE44AC865D1567346C2DB002E000100000258009A00100502000002584BE2932A4BD0101A4BA3026573036E6574004367180234A327C0AF72B3963518FC6E53A43E92CE6F5560E383FE8E7EF258FEA28BA666C026A90DAB67F46FBA4FF82F2704FEB3A27E25F3A8E6874B78938D70C5A20D94BEC90596B55C594F94A1438B14C8F890CE61D9630EFD897DEA9B3995D2C668469F62DB9346BB6AAF2EB6F3EE20EC31EAC80BCB 962105A64CCD5783EFC381002E000100000258009A000F0502000002584BE2932A4BD0101A4BA3026573036E657400D36D367D4D95060CB2952870BE9E826E6F7835CF6517FF83957F5097B6FC401FE5815B8895D02C68E23A47D7015A3DCE9FDE63AF9D9E1D697016444355633D0BE03177B35BE54980B241C12978A7F3EBF2420861EBFAA028CAF9FCBBF54C069869BFB7F9AB9E60D4791ACCA276AE698EB6EF7582235977E158DA8530EC84327EC427002E000100000258009A00010502000002584BE2932A4BD0101A4BA3026573036E65740068E7176D8561B49621F80DB36DC12A3C5DCD2DE5FE3973F5D7DE15769F099F2A1A9BB088042E794747E3AB BB4AE48651F815D5D38BE7F4FB94F08F51FC209246296BE108111E90A7A5E2A5A79D305F81DBE313569B72598F36F3CFAA02FD9F321FBC2BDA10861F1D537D48DDF80BBF4B228724636FD79C06C4487365F602E6F5C4CD002E000100000258009A00020502000002584BE2932A4BD0101A4BA3026573036E657400BAA98093DDB57F38CA58C599EEED47F16AA20C1CCF668FF0A022AFAAC97059A28C50FE63034E58FBE361059B43FCBAE3876AC6AE8450987B8A00BEC29093267B9B655E645B7478294FF5E149984459A39D191585463BD80F635C21DBCF30462E60E4EACF8EECC25E4D02C181954CCBB8BDF5D19882CF6F9E982B1BEBEF14797DC573003000 0100015180008801000305030100017D08356710D7E8A11F9B4C29E5E0F6B65F18CE64B4AAFAD7EA0E08DB85013CD777436CB8BC4EE33C0B4E6EEDFBE4227B25354F2EA2F978EE3222F3F32C1D4D3AF0F6014A527981FC5A0D2B65BF78B86A1D37965A98CAE3746CBB250655C2200FB9B8EBCC8C0AFD3182738F246AD0DAACA3199C54F08CF5F666477281872710E7C573003000010001518000880100030503010001DF43A43270EA741D5E79034C5E46A8310C9CFC7BD65C532D815D6B8C245EFF8F0C365DE400B6CDAC0124B00E08017DFB98D91133D5C18251EE0868852AD9E7FED091B393DAD1CD57381A5A1E7EA74E8FB4B708DB0F93B9EA4296EA4A71 6E3572F168779CB5288880699413B3FFD4B7432EBE2AA2767B8EA6CB576A65C5163A3DC5730030000100015180010801010305030100017DA2FA058940109205AA36338EB8AA8B5B0D9788C4229368D371DBDE4BD24F0805C60EDD8DF223D250F23D189CDC434F388A91D6CEC1A9D6F305817409ACA784F381DFFD7EC3EC688FFE16D2AC57BD7F0B625EFC3099B3A9A5EDA1742460229669DD67D81F12069877F6AFA497F81EB12D179B183F5C8185B2786B790BEAFB6D02E0F94C780065511CF46AF80D40055022867DF712869CC262C0D315B92DFA96D58BC2336DAB5D1258DD60406913D116DC2EC1135D89C6D2092C35A19C67959743B407A3C30F3C6B8B C4763504FE12541EDD947A5FBE8E402D31816D1824867E2CD89AEE5FF6ED7A2D683B8C5E6B7B5972BDFF355BFD9128F0D0EDB59A60F321C573003000010001518001080101030503010001DD8EC709089B6D74BAF2D294E4C626CF789B89A74B7E320D7002A03D0F94EA62DF1F19717FE8C4BFD732DA495E481353C78167255CC6256A98ACBFF5977B81A48C5E2A5AF23E8377423C4034D5D84E9E3548B9D0A07955586F67324B6B5720CC4456D86AEE3A21A4EBED9BA13358C8127D182A5083739B042D7E06307E417D020DD68EC0628E9C8279AF0F7E608A3C5D51AB33BF7C32EBD27B45D72B1AD5752BB485D52488FBA9A1B5BF3B2B50F074F481171E4B65 3AF846E58FE46DEB3491FA683959B38B893BF55721CED8FC4A64DBEDB6BF1C7FADE650EE219A01E81DD0212B89259319CA5DC81F26821A5CC29B4CC1059AE28227B89B8816039E43C35E33C57300300001000151800108018103050301000188F31BEFA3466D6FCAF11E0D1954D2011D6EAECF922D9E1B8D620095A0D15E7CFF8EA33F8E2A8C3B3F45A1ADACFED62E3E4EDC884AEF8A7CADBCFF8EDF2158730136D01BDB6D057BEBF3D35A92ADB5E8ACB1152FE1244B2D36DCB500E952CFB6D744BF7DBAB24A901B984F869FF47113C9515D53FE1A57293B01C24195A1D40580566CDAE5B04348CB60507267BB38F34839EE959D43FB9605652157014059FDBD 39EB0836D4043A63F8660D241006F757DB92B35B39B5ABCA32A16A81C65C9F53DA79A99F1134CF3ED5304F189434AF787A3A10D63862E6C2E5FBA08B6EF6701783DB00CB41851DF13070947EEC090FCED3539F3F494170BD90E68F99453DF9C573002F00010000025800220B726573657276652D3132380231340131026573036E657400000762018000000380CA7C0010000100000258009C9B763D73706631206D7820613A6D61696C312E65732E6E657420613A6D61696C322E65732E6E657420613A6D61696C332E65732E6E657420613A6D61696C342E65732E6E657420613A6D61696C2E65732E6E657420613A6D61696C67772E65732E6E657420613A 706F7374616C312E65732E6E657420613A706F7374616C322E65732E6E657420613A706F7374616C332E65732E6E6574207E616C6CCA7C000F00010000025800090032046D61696CCA7CCA7C00010001000002580004C6800370CA7C00020001000002580009066E732D616F61CA7CCA7C00020001000002580002C024CA7C00020001000002580009066E732D6C766BCA7CCB4300010001000002580004C0BC1609CB43001C000100000258001020010400FFFFFFFFFFFFFFFFFFFFFF81C02400010001000151800004C680020AC024001C000100000258001020010400001400020000000000000010CB6600010001000002580004C67CFC16CB66001C0001 00000258001020010400600000000000000000000022CB8900010001000002580004C681FC22CB89001C000100000258001020010400091000010000000000000002CB43002E000100000258009A00010503000002584BE2932A4BD0101A4BA3026573036E657400B425467E45E411066B99B85420FB7E844D734F414FFAF6B9528867B3DF808733BF479A0F125C84179401306579994AB8D84DF0173E2824527CEDA45C75ED4D818722EEB2D5A37641108B112D9A6D832D29A507C35DBBEBD46D50DE9915E924F53F55B5A2A263A48B48209FB50A13A7DF40AE697B1BCCE71A2B95C1BB9E47ACCACB43002E000100000258009A001C0503000002584BE2932A 4BD0101A4BA3026573036E6574002588E73F85BE8FAFD09628232906913DB78592B59F9C3C95A4AD1334D383C1326EE0C6FCF38892D8BB74631D680A6E4DB2D603D32394BC7B4EC798A1511667D246A0C30B33D03AB144C3704AA80AFCA27F197B2F83F20A9F0D2835C7C0A9B49E47E7CF2E192DC7DBF4635C39ECCCB291DB4B2832E0B8FF430A75726500194D9EC024002E000100015180009A00010503000151804BE2932A4BD0101A4BA3026573036E6574000E9F4098B1EF4F429B802007E3A9EA8E267A1F78EA7241AADD120A74CEBF70DC1DF76065A2CE0CDAA51AAB2F68411D9DEDC1F9DBEB3AB114A1FCBE122610756DE205EEC576CA5E62BD02497F 84D5DDB7110AC7F2BF02485B3E7B28FC1EB2999724B64D811270B085D1D10E184295D423F0141D652BD7E97633AC2E98C2819EDAC024002E000100000258009A001C0503000002584BE2932A4BD0101A4BA3026573036E657400936ADA283A90836E92BD42E2B6C8A0299147BCB8E47D9D4464C4151FCC99DC4F2D1C39FB691F6E322715B22F61E7BB8D5507982A3119674B350C569BDC2CD95C708EC73B4E5DEA516D053A4FD725326FFC5B0D0562B542BA96124D9FFBBF787CA0BBE6960951CC2FDD074376A1D184287C2C56A93FBBC1C7FFAA6977B30AE808CB66002E000100000258009A00010503000002584BE2932A4BD0101A4BA3026573036E657400 0CE145578E56BB359606C9B85538450D2BCA3E9AD0DEFC8FF865DA646F900B9CBC7325B7F04706B60E2770107E62894FE9CF3B1A432F0FB53C5C7A8F37D0F60354C7D52F4DF88BDD4C46774AA728DFC1C807EF5276641CA28774F323C7326B7C1D99DFCB9498C6E096392009AA972B83F0583A5D1002CA26B59B5C97F6A8309C0000291000000080000000 unbound-1.13.1/testdata/auth_zonefile_root.rpl0000644000175000017500000000724114010434640021132 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: no ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no fallback-enabled: yes ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME root.zone ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS root.zone . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018013100 1800 900 604800 86400 . 518400 IN NS k.root-servers.net. K.ROOT-SERVERS.NET. IN A 193.0.14.129 com. IN NS a.gtld-servers.net. a.gtld-servers.net. IN A 192.5.6.30 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with zonefile for root referrals ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL ; disable this referral for the test, we want to use the builtin copy of the zone ; a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_timeout_ra_aaaa.rpl0000644000175000017500000001027214010434640021367 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator with timeouts on reclame AAAA dropping server ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER SECTION AUTHORITY . IN SOA a. b. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER SECTION AUTHORITY . IN SOA a. b. 1 2 3 4 5 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. 280 IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. ; This server is REC_LAME RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 280 IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 10 IN A 10.20.30.40 SECTION AUTHORITY example.com. 280 IN NS ns.example.net. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. ENTRY_END ; query for (dropped) AAAA record. STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN AAAA ENTRY_END ; the AAAA query times out. STEP 21 TIMEOUT STEP 22 TIMEOUT STEP 23 TIMEOUT STEP 24 TIMEOUT STEP 25 TIMEOUT ; we get servfail, but the AAA arrives again (after the servfail times ; out of the cache) STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 31 TIME_PASSES ELAPSE 6 STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN AAAA ENTRY_END ; timeouts for AAAA keep happening. STEP 41 TIMEOUT STEP 42 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 43 TIME_PASSES ELAPSE 12 STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN AAAA ENTRY_END ; fallback queries STEP 51 TRAFFIC ; and it fails, no parentside entries and so on. STEP 52 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 53 TIME_PASSES ELAPSE 12 STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 61 TIMEOUT STEP 62 TRAFFIC STEP 63 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 70 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 72 TRAFFIC STEP 73 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nx_nodeny.rpl0000644000175000017500000001145114010434640020074 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nxdomain response missing qname denial ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; wildcard denial example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} ; qname denial ;wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG ;wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_negcache_dssoa.rpl0000644000175000017500000002004714010434640021022 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with negative cache DS response with cached SOA ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; query for missing DS record. ; commented out, this query should not happen as negative cache works. ;ENTRY_BEGIN ;MATCH opcode qtype qname ;ADJUST copy_id ;REPLY QR NOERROR ;SECTION QUESTION ;sub.example.com. IN DS ;SECTION ANSWER ;SECTION AUTHORITY ;example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 ;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} ;sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC ;sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} ;SECTION ADDITIONAL ;ns.sub.example.com. IN A 1.2.3.6 ;ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION nx.example.com. IN A SECTION AUTHORITY example.com. 7200 IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 7200 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} nw.example.com. 7200 IN NSEC ny.example.com. A RRSIG nw.example.com. 7200 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AHMp+sqWyR3JL6P0LhJ10fufMFSkW9+DM3QghOokyqgbRu54Q1XrHoE= ;{id = 2854} !.example.com. 7200 IN NSEC +.example.com. A RRSIG !.example.com. 7200 IN RRSIG NSEC 3 3 7200 20070926134150 20070829134150 2854 example.com. AJsNy2VkFTJEMShfEcvIkBe+UViVYDJbNNuGnwf/QecOrhONaVpIXy4= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; put the SOA into the cache STEP 14 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION nx.example.com. IN A ENTRY_END STEP 15 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION nx.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 7200 IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 7200 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} nw.example.com. 7200 IN NSEC ny.example.com. A RRSIG nw.example.com. 7200 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AHMp+sqWyR3JL6P0LhJ10fufMFSkW9+DM3QghOokyqgbRu54Q1XrHoE= ;{id = 2854} !.example.com. 7200 IN NSEC +.example.com. A RRSIG !.example.com. 7200 IN RRSIG NSEC 3 3 7200 20070926134150 20070829134150 2854 example.com. AJsNy2VkFTJEMShfEcvIkBe+UViVYDJbNNuGnwf/QecOrhONaVpIXy4= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; the downstream validator wants the DS record. STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} example.com. 7200 IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 7200 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_signatures.80000644000175000017500000000707414010434640020034 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; RSA Key from ldns tool, key used in the testbound tests. ; RSA key from ldns tool ENTRY_BEGIN SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ENTRY_END ; entry to test -- capitals in signer name. ENTRY_BEGIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sUb.eXamPle.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} ENTRY_END ; another entry. Signed with ldns. ENTRY_BEGIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN A 22.22.22.22 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. A1rCcVWeTZ5u0Fr1IewSOhpZvpSd8jMBsy4zk12LzZbjFK2yINSpClGYoyRvJMySfbNHjFKfufR/YpdsrsjC8A== ;{id = 30899} ENTRY_END ; another entry. Signed with ldns. 10800 ttl ENTRY_BEGIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 10800 IN A 11.11.11.11 www.sub.example.com. 10800 IN A 22.22.22.22 www.sub.example.com. 10800 IN RRSIG A 5 4 10800 20070926134150 20070829134150 30899 sub.example.com. gRrsfYr57vipJHXE21RmXp0Y4cwp9rHyTYeqf1ncBgeipYSPFMILRw21wvAKNKEQ418/0toZOw6Nfmc1gXWS/w== ;{id = 30899} ENTRY_END ; another entry. Signed with ldns. 10800 ttl original, now modified TTLs ENTRY_BEGIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 10800 IN A 22.22.22.22 www.sub.example.com. 10800 IN RRSIG A 5 4 10800 20070926134150 20070829134150 30899 sub.example.com. gRrsfYr57vipJHXE21RmXp0Y4cwp9rHyTYeqf1ncBgeipYSPFMILRw21wvAKNKEQ418/0toZOw6Nfmc1gXWS/w== ;{id = 30899} ENTRY_END ; another entry. Signed with ldns. 10800 ttl original, now modified TTLs ENTRY_BEGIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 10800 IN A 11.11.11.11 www.sub.example.com. 3600 IN A 22.22.22.22 www.sub.example.com. 10800 IN RRSIG A 5 4 10800 20070926134150 20070829134150 30899 sub.example.com. gRrsfYr57vipJHXE21RmXp0Y4cwp9rHyTYeqf1ncBgeipYSPFMILRw21wvAKNKEQ418/0toZOw6Nfmc1gXWS/w== ;{id = 30899} ENTRY_END ; another entry. Signed with ldns. 10800 ttl original, now modified TTLs ENTRY_BEGIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 1234 IN A 11.11.11.11 www.sub.example.com. 3600 IN A 22.22.22.22 www.sub.example.com. 10800 IN RRSIG A 5 4 10800 20070926134150 20070829134150 30899 sub.example.com. gRrsfYr57vipJHXE21RmXp0Y4cwp9rHyTYeqf1ncBgeipYSPFMILRw21wvAKNKEQ418/0toZOw6Nfmc1gXWS/w== ;{id = 30899} ENTRY_END unbound-1.13.1/testdata/autotrust_rollalgo.rpl0000644000175000017500000003523714010434640021206 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with algorithm rollover ; from RSASHA1(5) to DSASHA1(3) ; Note, when both algorithms are present, the zone must be double-signed. ; with a ZSK for RSASHA1(5) and a ZSK for DSASHA1(3). ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and DSAkey 02855 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; and two ZSKs (omitted) for both algorithms. ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. aCZVA+PLXxm15p46499FCPHvhR/MSpMSRTZT6PoUy2e+wdk7bszLdsEmfWym81UN2Xx1JOj5104c43c3QnvjNQ== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20091024111500 20090921111500 2855 example.com. AKdhmjqEbe0STsFNq/UxOidElaWHWCy2hSPQ7oN0Tsq56w6Hsk72PpM= ;{id = 2855} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 02855 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. vpLMiMW+2uxqE1+OpMWipQdyGJ/pOQ63tIhup50WFejPysvlZRZ27XOoB4GVRyCwK9Bv46PrsQf3IsjHZf6jvw== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20091124111500 20091018111500 2855 example.com. ABJyZ97htJyBFk5wsKml3YAz81FpXkQKdJeC++fB5ysvl3i+zKJFzTo= ;{id = 2855} ENTRY_END RANGE_END ; ns.example.com. KSK 55582-REVOKED and 02855 RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; signatures example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20091224111500 20091118111500 2855 example.com. AFAbqLJsTDBfwAipE84ETdFTfzKHs7pzdyzjTKHR2VXygGvHY4QsBaA= ;{id = 2855} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. DqR6BRE9G+kEb+ZorUr3yKKUsCF2TN+vrsNBaLfpHR+Vgv0RgeRCkXki+/FY9b4NEhXkg719dlLSASg4DmyV7g== ;{id = 55710} ; wrong keytag: 55582 ENTRY_END RANGE_END ; ns.example.com. KSK 02855 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; signatures example.com. 10800 IN RRSIG DNSKEY 3 2 10800 20101224111500 20101118111500 2855 example.com. AJv9ujre3iUykHlhJpLYPqsXq12lmQp+AHUPSPpE5zuUhXAPjbnbewk= ;{id = 2855} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${10*24*3600} STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t3} ;;${ctime $t3} ;;last_success: ${$t3} ;;${ctime $t3} ;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=3 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 11 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${11*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, the old key is removed from storage STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} FILE_END SCENARIO_END unbound-1.13.1/testdata/val_secds_nosig.rpl0000644000175000017500000001760414010434640020401 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with no signatures after secure delegation ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; barely valid nodata for AAAA ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; barely valid nodata for AAAA ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.3.6 ;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ;sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ;ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 ;www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.sub.example.com. IN A ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_entnodata_optout_badopt.rpl0000644000175000017500000001456714010434640024121 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 response for NODATA ENT with optout. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ent.example.com. IN DS SECTION AUTHORITY ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; OPTOUT b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= ; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag. ; the span does not have OPTOUT 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AAaGjBrmbElksOWsOAU0vdNwbRKsbsQgOwhFkONaynSk9M+2QpJQ6+k= ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ent.example.com. IN A SECTION AUTHORITY ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; OPTOUT b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= ; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag. ; the span does not have OPTOUT 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AAaGjBrmbElksOWsOAU0vdNwbRKsbsQgOwhFkONaynSk9M+2QpJQ6+k= ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ent.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION ent.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_lame_aaaa.rpl0000644000175000017500000000647314010434640020145 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator lameness detection of AAAA-only lameness ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN AAAA SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; response to AAAA query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY . 3600000 IN NS a.root-servers.net. . 3600000 IN NS b.root-servers.net. . 3600000 IN NS c.root-servers.net. . 3600000 IN NS d.root-servers.net. . 3600000 IN NS e.root-servers.net. . 3600000 IN NS f.root-servers.net. . 3600000 IN NS g.root-servers.net. . 3600000 IN NS h.root-servers.net. . 3600000 IN NS i.root-servers.net. . 3600000 IN NS j.root-servers.net. . 3600000 IN NS k.root-servers.net. . 3600000 IN NS l.root-servers.net. . 3600000 IN NS m.root-servers.net. SECTION ADDITIONAL a.root-servers.net. 3600000 IN A 198.41.0.4 b.root-servers.net. 3600000 IN A 128.9.0.107 c.root-servers.net. 3600000 IN A 192.33.4.12 ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 120 IN A 204.14.213.188 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN MATCH TCP REPLY RD SECTION QUESTION example.com. IN AAAA ENTRY_END ; this fails; it is LAME STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION example.com. IN AAAA SECTION ANSWER ENTRY_END ; Now try the A type, which works, and is not LAME. STEP 20 QUERY ENTRY_BEGIN MATCH TCP REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; this fails; it is LAME STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 120 IN A 204.14.213.188 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_lrudrop.rpl0000644000175000017500000000473314010434640017565 0ustar wouterwouter; This is a comment. ; config options go here. ; extremely small cache to force dropping old records. server: msg-cache-size: 1 # one whole byte! msg-cache-slabs: 1 forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Old answer is dropped from the cache STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; the query is sent to the forwarder - no cache yet. STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 3 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ; another query to force the cache to drop the example.com entry. STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.net. IN A ENTRY_END ; the query is sent to the forwarder - no cache yet. STEP 12 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.net. IN A ENTRY_END STEP 13 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.40 SECTION AUTHORITY www.example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 10.20.30.50 ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.40 ENTRY_END ; query, same as first, but it fell out of the cache. STEP 21 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 22 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 23 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 24 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/speed_cache.tdir/0000755000175000017500000000000014010434640017674 5ustar wouterwouterunbound-1.13.1/testdata/speed_cache.tdir/speed_cache.testns0000644000175000017500000000036314010434640023363 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype REPLY QR AA NOERROR ADJUST copy_id copy_query SECTION QUESTION www IN A SECTION AUTHORITY @ IN SOA ns hostmaster 2008021401 1800 900 604800 86400 ENTRY_END unbound-1.13.1/testdata/speed_cache.tdir/makeqs.sh0000644000175000017500000000120714010434640021511 0ustar wouterwouter# generate query file, $1=number $2=filename. cat >makeqs.c < #include int main(int argc, char** argv) { int i; int max = atoi(argv[1]); for(i=0; i $2 #while test $i -lt $1; do #echo "a$i.example.com IN A" >> $2 #i=`expr $i + 1` #done #} ./makeqs 10 > q10.txt cat q10.txt ./makeqs 100 > q100.txt ./makeqs 1000 > q1000.txt ./makeqs 10000 > q10000.txt ./makeqs 100000 > q100000.txt #./makeqs 1000000 > q1000000.txt #./makeqs 10000000 > q10000000.txt unbound-1.13.1/testdata/speed_cache.tdir/speed_cache.dsc0000644000175000017500000000045314010434640022614 0ustar wouterwouterBaseName: speed_cache Version: 1.0 Description: Speed test with cache sizes CreationDate: Fri Feb 15 15:46:25 CET 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: speed_cache.pre Post: speed_cache.post Test: speed_cache.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/speed_cache.tdir/speed_cache.pre0000644000175000017500000000161014010434640022625 0ustar wouterwouter# #-- speed_cache.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT speed_cache.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < speed_cache.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/speed_cache.tdir/speed_cache.post0000644000175000017500000000045414010434640023031 0ustar wouterwouter# #-- speed_cache.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/speed_cache.tdir/makeqs.c0000644000175000017500000000054314010434640021323 0ustar wouterwouter/** * \file * This file creates queries for the speed test */ #include #include /** main program to create queries, pass the number of them. */ int main(int argc, char** argv) { int i; int max = atoi(argv[1]); for(i=0; i q10.txt cat q10.txt ./makeqs 100 > q100.txt ./makeqs 1000 > q1000.txt ./makeqs 10000 > q10000.txt #./makeqs 100000 > q100000.txt #./makeqs 1000000 > q1000000.txt #./makeqs 10000000 > q10000000.txt # seconds per test dur=1 # do the test echo "> perf test ldns-testns" $PRE/perf -d $dur -a "www.example.com IN A" 127.0.0.1@$FWD_PORT 2>&1 | tee outfile echo "> perf test cache-1" $PRE/perf -d $dur -a "www.example.com IN A" 127.0.0.1@$UNBOUND_PORT 2>&1 | tee outfile echo -n "cache-size-1 " >> ../.perfstats.txt grep "average qps" outfile >> ../.perfstats.txt # with $1=number $2=pretty-str $3=queryfile function perfnum() { echo "" echo "> perf test $1 $2" $PRE/perf -d $dur -f $3 127.0.0.1@$UNBOUND_PORT 2>&1 | tee outfile if test -n "$2"; then echo -n "$2 " >> ../.perfstats.txt grep "average qps" outfile >> ../.perfstats.txt fi } function perftns() { echo "" echo "> perf testns $1 $2" $PRE/perf -d $dur -f $3 127.0.0.1@$FWD_PORT 2>&1 | tee outfile } #perfnum 10 "" q10.txt perfnum 100 "cache-suffices" q100.txt #perfnum 1000 "" q1000.txt perfnum 10000 "cache-toosmall" q10000.txt #perfnum 100000 "100k" q100000.txt #perfnum 1000000 "1m" q1000000.txt #perfnum 1000000 "10m" q10000000.txt #perftns 10 "10" q10.txt #perftns 100 "100" q100.txt perftns 1000 "1k" q1000.txt #perftns 10000 "10k" q10000.txt #perftns 100000 "100k" q100000.txt #perftns 1000000 "1m" q1000000.txt #perftns 1000000 "10m" q10000000.txt echo "> cat logfiles" cat fwd.log cat unbound.log rm -f q*.txt exit 0 unbound-1.13.1/testdata/speed_cache.tdir/speed_cache.conf0000644000175000017500000000044514010434640022771 0ustar wouterwouterserver: verbosity: 0 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no rrset-cache-size: 100k msg-cache-size: 100k forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/val_nx_nsec3_params.rpl0000644000175000017500000001456614010434640021170 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nxdomain NSEC3 several parameters. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; closest encloser, H(example.com). 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j49s SOA NS MX DNSKEY RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCz/LkFOFcaQzVnyySW9ZoVUnxh7gIUdxyS9vqVDzo8pGhFU+3YogN2ZRk= ;{id = 2854} ; wildcard denial, H(*.example.com.) = 4f3cnt8cu22tngec382jj4gde4rb47ub 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb48ub A MX RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFHS+i/OB/V/gYmS1eQTXieXIXGjsAhQQ0Ql7TW/hsUklrb0DfoyhVPG95Q== ;{id = 2854} ; next closer name, H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3. s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j49s SOA NS MX DNSKEY RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCz/LkFOFcaQzVnyySW9ZoVUnxh7gIUdxyS9vqVDzo8pGhFU+3YogN2ZRk= ;{id = 2854} 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb48ub A MX RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFHS+i/OB/V/gYmS1eQTXieXIXGjsAhQQ0Ql7TW/hsUklrb0DfoyhVPG95Q== ;{id = 2854} s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ds.sha10000644000175000017500000000254614010434640016742 0ustar wouterwouter; ; DS match test file. ; test matching of DS hash against DNSKEYs. ; ; enter ENTRYs with a DS and a DNSKEY. ; These are matched against another. ; If the query name starts with 'yes' then it must match. ; If the query name starts with 'no' then it must not match. ENTRY_BEGIN SECTION QUESTION yes. IN A SECTION ANSWER nlnetlabs.nl. 3600 IN DS 43791 RSASHA1 1 81ee88356df3c3077549445ed2fb1c92adc80641 nlnetlabs.nl. DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ== ENTRY_END ENTRY_BEGIN SECTION QUESTION yes. IN A SECTION ANSWER jelte.nlnetlabs.nl. DS 42860 5 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A jelte.nlnetlabs.nl. 3600 IN DNSKEY 256 3 5 AQOraLfzarHAlFskVGwAGnX0LRjlcOiO6y5WM4Kz+QvZ9vX28h4lOvnf d5tkxnZm7ERLTAJoFq+1w/wl7VXs2Isz75BSZ7LQh3OT2xXnS6VT5ZxX ko/UCOdoGiKZZ63jHZ0jNSTCYy8+5rfvwRD8s3gGuErp5KcHg3V8VLUK SDNNEQ== ENTRY_END ENTRY_BEGIN SECTION QUESTION no. IN A SECTION ANSWER nlnetlabs.nl. 3600 IN DS 43791 RSASHA1 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A nlnetlabs.nl. DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ== ENTRY_END unbound-1.13.1/testdata/val_nsec3_b5_wcnodata.rpl0000644000175000017500000001257614010434640021365 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR that matches the closest encloser (w.example) ;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi ) k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== ) ;; NSEC3 RR that covers the "next closer" name (z.w.example) ;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03 q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) ;; NSEC3 RR that matches a wildcard at the closest encloser. ;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG ) r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== ) SECTION ADDITIONAL ENTRY_END ; catch glue queries ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN A SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN AAAA SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.z.w.example. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi ) k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG ) r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== ) SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/black_data.rpl0000644000175000017500000002422214010434640017276 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacklist for data response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ; no ns.blabla.com, try that later ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ; make priming query succeed example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ; remove pending ns.blabla.com AAAA msg STEP 30 QUERY ENTRY_BEGIN REPLY RD DO CD SECTION QUESTION ns.blabla.com. IN AAAA ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD CD RA DO NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION ANSWER SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_sigs.hinfo0000644000175000017500000000506714010434640017551 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test HINFO canonicalisation ; RSA key from ldns tool ENTRY_BEGIN SECTION QUESTION jelte.nlnetlabs.nl. IN DNSKEY SECTION ANSWER jelte.nlnetlabs.nl. 3600 IN DNSKEY 256 3 5 AwEAAawmHBgxeOiaYE4JpNU+CBqEj7xGB1o6ThEsUmtjsbmTnsJ89uWv 2PudzhQKCR1hJtuxVxG0Aw4mwHlAy+SoWHp8NXW1JYVA5qbvYhUUUM3l +ZFImaMhShhlviJJDLla5nmB5pyNYbC4wxqkCs51mzJY1abbCmZepmQL IlprTjUL ENTRY_END ; check that signatures work ENTRY_BEGIN SECTION QUESTION jelte.nlnetlabs.nl. IN NS SECTION ANSWER jelte.nlnetlabs.nl. 3600 IN NS ns1.jelte.nlnetlabs.nl. jelte.nlnetlabs.nl. 3600 IN NS ns2.jelte.nlnetlabs.nl. jelte.nlnetlabs.nl. 3600 IN RRSIG NS 5 3 3600 20090203100022 20090106100022 48885 jelte.nlnetlabs.nl. E3G8ZsCvUw56EKxYA4JzjYaB3ojLpdmQdUHOPSxlWK43haSuxpFERGRc P7AhiMjcYcoJcR+LWQr0uOFVnW8VcFFdy8u7Gs9MNAIWs5+jOaI3WDRC reee7K/NEBiubQCdm7UPA894VNM5oiLCa1waMoMD+LfEeijuN4N09HqY 6eo= ENTRY_END ; currently this fails due to the design of canonicalisation in unbound. ; HINFO record signed with ldns, HINFO in uppercase, signature uppercase ENTRY_BEGIN SECTION QUESTION jelte.nlnetlabs.nl. IN HINFO SECTION ANSWER jelte.nlnetlabs.nl. 3600 IN HINFO "Jelte" "Machine van" jelte.nlnetlabs.nl. 3600 IN RRSIG HINFO 5 3 3600 20090203100022 20090106100022 48885 jelte.nlnetlabs.nl. eRig3NjIIgBTmQiN7AREmplgiY6OOtVwCNZgF5UAoYFAE1K1tl5WLqe9 FmTcVtaNUzFdgYv+TD93NNYdV0uxJkr+rS2sSykGf9OIlxevFm+rW2ya 4/Y+5GIN77eN9q9/6ULQRdsX3p8w1fhloiDXk+tgCaw+cJJElMEE1Avw 2dY= ENTRY_END ; HINFO record signed with ldns, HINFO in lowercase, signature lowercase ENTRY_BEGIN SECTION QUESTION jelte.nlnetlabs.nl. IN HINFO SECTION ANSWER jelte.nlnetlabs.nl. 3600 IN HINFO "jelte" "machine van" jelte.nlnetlabs.nl. 3600 IN RRSIG HINFO 5 3 3600 20090203105558 20090106105558 48885 jelte.nlnetlabs.nl. UwFKSqH9oau3nCdJ4i6iYamo2izgMCKy1K8ec0IkhniUONKaIGiRNz8/ QrLAeBHhMnLQYNV/GBprNjvnPyYLG/6bWYUBxvP6pCG4oDEmNY7QF9di I6So5Ycv0ZWaYoT/NYStUj1fLNZ4xCdNXVLA7Oi5PRMeOvPQIvMG3hHK Ja0= ENTRY_END ; HINFO record signed with ldns, HINFO in uppercase, signature lowercase ; (signer canonicalised) ENTRY_BEGIN SECTION QUESTION bogus.jelte.nlnetlabs.nl. IN HINFO SECTION ANSWER jelte.nlnetlabs.nl. 3600 IN HINFO "Jelte" "Machine van" jelte.nlnetlabs.nl. 3600 IN RRSIG HINFO 5 3 3600 20090203105558 20090106105558 48885 jelte.nlnetlabs.nl. UwFKSqH9oau3nCdJ4i6iYamo2izgMCKy1K8ec0IkhniUONKaIGiRNz8/ QrLAeBHhMnLQYNV/GBprNjvnPyYLG/6bWYUBxvP6pCG4oDEmNY7QF9di I6So5Ycv0ZWaYoT/NYStUj1fLNZ4xCdNXVLA7Oi5PRMeOvPQIvMG3hHK Ja0= ENTRY_END unbound-1.13.1/testdata/iter_ds_referral.rpl0000644000175000017500000001603014010434640020542 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator with DS query and referral reply ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; note, no specific DS answer here, it replies with the referral for ; the type DS query ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; something for wrong type DS query here ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_zero.tdir/0000755000175000017500000000000014010434640017270 5ustar wouterwouterunbound-1.13.1/testdata/fwd_zero.tdir/fwd_zero.conf0000644000175000017500000000036714010434640021764 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_zero.tdir/fwd_zero.pre0000644000175000017500000000157714010434640021631 0ustar wouterwouter# #-- fwd_zero.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_zero.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_zero.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_zero.tdir/fwd_zero.post0000644000175000017500000000045114010434640022016 0ustar wouterwouter# #-- fwd_zero.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_zero.tdir/fwd_zero.testns0000644000175000017500000000031014010434640022343 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_zero.tdir/fwd_zero.test0000644000175000017500000000153614010434640022015 0ustar wouterwouter# #-- fwd_zero.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." OPT="-i" if nc -h 2>&1 | grep -- "-w secs" >/dev/null; then OPT="-w" fi # send query with qname but not qtype , qclass (malformed query) echo "> nc www.example.com. (malformed)" echo "b4380100000100000000000003777777076578616d706c6503636f6d00" | xxd -r -p | nc -un $OPT 2 127.0.0.1 $UNBOUND_PORT 2>/dev/null | xxd | tee outfile # now test that server is still up echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_zero.tdir/fwd_zero.dsc0000644000175000017500000000045714010434640021610 0ustar wouterwouterBaseName: fwd_zero Version: 1.0 Description: Test for zero byte UDP reply assertion fail CreationDate: Tue Jan 6 10:39:28 CET 2009 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_zero.pre Post: fwd_zero.post Test: fwd_zero.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/test_signatures.50000644000175000017500000000414414010434640020024 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; ldns-keygen (svn trunk 1.3.0, 15 april 2008) ; ./ldns-keygen -a DSAMD5 -b 512 nlnetlabs.nl ; Knlnetlabs.nl.+003+08866 ; nlnetlabs.nl. 3600 IN DS 8866 3 1 1300e7258af98cef40a47e6ac1e34ea79cb4b27f ; Private-key-format: v1.2 ; Algorithm: 3 (DSA) ; Prime(p): qp/0xtfW76CbSH29kZmI0iUEhJ9cIs/52WsgqogqBwrY/HpT+D6G2jd66WLi88DF0z/We3/YIjZYkR5PH03IRQ== ; Subprime(q): iTRl4piaQvy9yxIsz/c5pAaVIeM= ; Base(g): RJhjYU22ooiTKltbGmIR6OfXZjKDBfSODrT3e3/IrwiT8oQZriDFZkExYKrKqoqZFn7y0esTf9Bwvx2IhGabQw== ; Private_value(x): gYjuQexf8JiiVBvCcxpXO+QaD88= ; Public_value(y): aPtEU9ui/w2+9aFnCrWUB/fGvMEyAyLyGCCaT/N+l8bPYDPCv+wDxEKHoM3HT/ZOf3RuCE/CYKVK7CDX6+AZrA== ; DSA key from ldns tool ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN DNSKEY SECTION ANSWER nlnetlabs.nl. 3600 IN DNSKEY 256 3 3 AIk0ZeKYmkL8vcsSLM/3OaQGlSHjqp/0xtfW76CbSH29kZmI0iUEhJ9cIs/52WsgqogqBwrY/HpT+D6G2jd66WLi88DF0z/We3/YIjZYkR5PH03IRUSYY2FNtqKIkypbWxpiEejn12YygwX0jg6093t/yK8Ik/KEGa4gxWZBMWCqyqqKmRZ+8tHrE3/QcL8diIRmm0No+0RT26L/Db71oWcKtZQH98a8wTIDIvIYIJpP836Xxs9gM8K/7APEQoegzcdP9k5/dG4IT8JgpUrsINfr4Bms ;{id = 8866 (zsk), size = 512b} ENTRY_END ; entry to test ; from ; ldns-signzone nlnetlabs.nl Knlnetlabs.nl.+003+08866 ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN SOA SECTION ANSWER nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. ( 2008040100 28800 7200 604800 3600 ) nlnetlabs.nl. 10200 IN RRSIG SOA 3 2 10200 20080513173901 20080415173901 8866 nlnetlabs.nl. MC0CFFI7JB0x4xaO0qhe9iQGk0eot8zGAhUAg/SFtf5MrR7DEkmd6vm2xf+SN9M= ;{id = 8866} ENTRY_END ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN NS SECTION ANSWER nlnetlabs.nl. 10200 NS omval.tednet.nl. nlnetlabs.nl. 10200 NS ns7.domain-registry.nl. nlnetlabs.nl. 10200 NS open.nlnetlabs.nl. nlnetlabs.nl. 10200 IN RRSIG NS 3 2 10200 20080513173901 20080415173901 8866 nlnetlabs.nl. MCwCFFHwxz9Kx7Un60vLMMoOrZizagNrAhR6OskQNF/KVL5/xanbOmK3ZUj0vw== ;{id = 8866} ENTRY_END unbound-1.13.1/testdata/local_cname.rpl0000644000175000017500000003064614010434640017475 0ustar wouterwouter; config options server: # put unbound.conf config options here. access-control: 127.0.0.1/32 allow_snoop #allow queries with RD bit trust-anchor-signaling: no # DNSSEC trust anchor taken from a real world example. Used for # DNSSEC-signed CNAME target. trust-anchor: "infoblox.com. 172800 IN DNSKEY 257 3 5 AwEAAerW6xQkJIb5wxm48RoHD/LE8r/GzmdIGOam0lQczIth+I9ctltV dDJXz5BH8j4TOaOH1gBRCXhsPDyPom/eLEkdUuXNuhV6QnWGHOtz1fuY EO+kBqaI79jR0K31OmevR/H/F3C8gi4T6//6G9qsftvcl6m7+V1vI2+c cgxiiOlMrZZb4YAhue1+tRw57f3aVOSNtcrONO/Jffgb9jbDTKRi33oT fDznyPa1lCWMbuybr/LaCU0LP6fG4BII/FDWFi5rQxMHygWfscdYX06c eGUzHqiuNNGL8Jze6johni71T/hJGtLMozkY7qxOLfWBXOu9kr1MBQh5 6hfibOZMZJM=" # Use a fixed and faked date for DNSSEC validation to avoid run-time # re-signing test signatures. val-override-date: "20161001003725" define-tag: "cname cname2 nx servfail sec ambiguous" access-control-tag: 127.0.0.1/32 "cname cname2 nx servfail sec" # Basic case: one CNAME whose target exists. local-zone: example.com static local-zone-tag: example.com "cname" access-control-tag: 127.0.0.1/32 "cname" access-control-tag-action: 127.0.0.1/32 "cname" redirect access-control-tag-data: 127.0.0.1/32 "cname" "CNAME example.org." # Similar to the above, but different original query name. local-zone: another.example.com static local-zone-tag: another.example.com "cname2" access-control-tag: 127.0.0.1/32 "cname2" access-control-tag-action: 127.0.0.1/32 "cname2" redirect access-control-tag-data: 127.0.0.1/32 "cname2" "CNAME example.org." # CNAME target is expected to be nonexistent. local-zone: nx.example.com static local-zone-tag: nx.example.com "nx" access-control-tag: 127.0.0.1/32 "nx" access-control-tag-action: 127.0.0.1/32 "nx" redirect access-control-tag-data: 127.0.0.1/32 "nx" "CNAME nx.example.org." # Resolution of this CNAME target will result in SERVFAIL. local-zone: servfail.example.com static local-zone-tag: servfail.example.com "servfail" access-control-tag-action: 127.0.0.1/32 "servfail" redirect access-control-tag-data: 127.0.0.1/32 "servfail" "CNAME servfail.example.org." # CNAME target is supposed to be DNSSEC-signed. local-zone: sec.example.com static local-zone-tag: sec.example.com "sec" access-control-tag-action: 127.0.0.1/32 "sec" redirect access-control-tag-data: 127.0.0.1/32 "sec" "CNAME www.infoblox.com." # Test setup for non-tag based redirect local-zone: example.net redirect local-data: "example.net. IN CNAME cname.example.org." ### template zone and tag intended to be used for tests with CNAME and ### other data. ##local-zone: ambiguous.example.com redirect ##@LOCALDATA1@ ##@LOCALDATA2@ ##local-zone-tag: ambiguous.example.com "ambiguous" ##access-control-tag-action: 127.0.0.1/32 "ambiguous" redirect ##@TAGDATA1@ ##@TAGDATA2@ target-fetch-policy: "0 0 0 0 0" # send the queries to the test server (see the 10.0.10.3 entries below) forward-zone: name: "." forward-addr: 10.0.10.3 CONFIG_END ; short one-line description of scenario: SCENARIO_BEGIN Test local-data CNAME aliases ; Specification of the answers that the upstream server provides to unbound RANGE_BEGIN 0 1000 ADDRESS 10.0.10.3 ; put entries here with answers to specific qname, qtype ; infoblox.com ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION infoblox.com. IN DNSKEY SECTION ANSWER infoblox.com. 172800 IN DNSKEY 256 3 5 AwEAAbi2VnVHFm5rO2EiawNWhTTRPPzaA+VEdpGOc+CtwIZq86C4Ndbp 0M7XTi0wru0Pgh54oGZ3ty9WllYEnVfoA1rcGwFJmAln7KKAuQP+dlGE yHPJYduAjG/JFA6Qq0zj18AmWgks+qvethASMm3PtihQkNytjmQWjiL6 6h8cQwFP infoblox.com. 172800 IN DNSKEY 257 3 5 AwEAAerW6xQkJIb5wxm48RoHD/LE8r/GzmdIGOam0lQczIth+I9ctltV dDJXz5BH8j4TOaOH1gBRCXhsPDyPom/eLEkdUuXNuhV6QnWGHOtz1fuY EO+kBqaI79jR0K31OmevR/H/F3C8gi4T6//6G9qsftvcl6m7+V1vI2+c cgxiiOlMrZZb4YAhue1+tRw57f3aVOSNtcrONO/Jffgb9jbDTKRi33oT fDznyPa1lCWMbuybr/LaCU0LP6fG4BII/FDWFi5rQxMHygWfscdYX06c eGUzHqiuNNGL8Jze6johni71T/hJGtLMozkY7qxOLfWBXOu9kr1MBQh5 6hfibOZMZJM= infoblox.com. 172800 IN RRSIG DNSKEY 5 2 172800 20161004003725 20160930000830 31651 infoblox.com. Ds7LZY2W59fq9cWgqi3W6so1NGFa7JdjO8zlhK3hGu2a2WG1W/rVftom rCf0gdI5q4BZJnq2o0SdLd/U7he1uWz8ATntEETiNs9/8G7myNK17wQu AN/+3gol+qT4DX0CA3Boz7Z+xFQbTwnnJJvGASa/1jPMIYU8DiyNx3Pe SSh9lbyU/4YI0mshn5ZC2HCFChxr+aVJxk4UHjaPfHhWwVu9oM4IbEfn KD9x4ltKjjy0pXMYqVlNs9+tG2nXdwr/6Q4G+yfRBAcW+cWeW5w4igxf xYFq4Y5gkZetGOReoNODZ9YC9WvcxBo+qY/iUN2k+lEFq+oL8+DthAGH uA1krw== SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.infoblox.com. IN A SECTION ANSWER www.infoblox.com. 3600 IN A 161.47.10.70 www.infoblox.com. 3600 IN RRSIG A 5 3 3600 20161003223322 20160929221122 14916 infoblox.com. WbO9ydRAoRTPvdK18atTdLEkkMGoOjuwbcb6vVI0d6Sea3xkcBMNmtst Wdzr+pKEJqO2bfm167X6uhcOHanHZRnirlTnEbuTdsP0HCiIEGQD5iHg UNH2FJSKGNYBmgZKJpuLhDca7oqtkl8EyGA+UEt6Rtq6aW8V0wpkhPHi Pug=' SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; example.org ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.org. IN A SECTION ANSWER example.org. IN A 192.0.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION cname.example.org. IN A SECTION ANSWER cname.example.org. IN A 192.0.2.2 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.org. IN AAAA SECTION ANSWER SECTION AUTHORITY example.org. IN SOA ns.example.org. hostmaster.example.org. 2016101900 28800 7200 604800 3600 SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION nx.example.org. IN A SECTION ANSWER SECTION AUTHORITY example.org. IN SOA ns.example.org. hostmaster.example.org. 2016101900 28800 7200 604800 3600 SECTION ADDITIONAL ENTRY_END ; for norec query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.org. IN NS SECTION ANSWER example.org. IN NS ns.example. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR SERVFAIL SECTION QUESTION servfail.example.org. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; end of entries with answers from upstream server RANGE_END ; Steps where queries are sent, one at a time, to unbound. ; QUERY is what the downstream client sends to unbound. ; CHECK_ANSWER contains the response from unbound. ; Basic case: both exact and subdomain matches result in the same CNAME STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN CNAME ENTRY_END ; For type-CNAME queries, the CNAME itself will be returned STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION example.com. IN CNAME SECTION ANSWER example.com. IN CNAME example.org. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION alias.example.com. IN CNAME ENTRY_END ; For type-CNAME queries, the CNAME itself will be returned STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION alias.example.com. IN CNAME SECTION ANSWER alias.example.com. IN CNAME example.org. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; Basic case: both exact and subdomain matches result in the same CNAME ; For other types, a complete CNAME chain will have to be returned STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN CNAME example.org. example.org. IN A 192.0.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 70 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION alias.example.com. IN A ENTRY_END STEP 80 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION alias.example.com. IN A SECTION ANSWER alias.example.com. IN CNAME example.org. example.org. IN A 192.0.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; Basic case: both exact and subdomain matches result in the same CNAME. ; The result is the same for non-recursive query as long as a ; complete chain is cached. STEP 90 QUERY ENTRY_BEGIN REPLY SECTION QUESTION example.com. IN A ENTRY_END STEP 100 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN CNAME example.org. example.org. IN A 192.0.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 110 QUERY ENTRY_BEGIN REPLY SECTION QUESTION alias.example.com. IN A ENTRY_END STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NOERROR SECTION QUESTION alias.example.com. IN A SECTION ANSWER alias.example.com. IN CNAME example.org. example.org. IN A 192.0.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; Similar to the above, but these are local-zone redirect, instead of ; tag-based policies. STEP 130 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.net. IN CNAME ENTRY_END ; For type-CNAME queries, the CNAME itself will be returned STEP 140 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION example.net. IN CNAME SECTION ANSWER example.net. IN CNAME cname.example.org. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 150 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION alias.example.net. IN CNAME ENTRY_END ; For type-CNAME queries, the CNAME itself will be returned STEP 160 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION alias.example.net. IN CNAME SECTION ANSWER alias.example.net. IN CNAME cname.example.org. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 170 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.net. IN A ENTRY_END STEP 180 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION example.net. IN A SECTION ANSWER example.net. IN CNAME cname.example.org. cname.example.org. IN A 192.0.2.2 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 190 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION alias.example.net. IN A ENTRY_END STEP 200 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION alias.example.net. IN A SECTION ANSWER alias.example.net. IN CNAME cname.example.org. cname.example.org. IN A 192.0.2.2 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; Relatively minor cases follow ; query type doesn't exist for the CNAME target. The original query ; succeeds with an "incomplete" chain only containing the CNAME. STEP 210 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN AAAA ENTRY_END STEP 220 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION example.com. IN AAAA SECTION ANSWER example.com. IN CNAME example.org. SECTION AUTHORITY example.org. 3600 IN SOA ns.example.org. hostmaster.example.org. 2016101900 28800 7200 604800 3600 SECTION ADDITIONAL ENTRY_END ; The CNAME target name doesn't exist. NXDOMAIN with the CNAME will ; be returned. STEP 230 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx.example.com. IN A ENTRY_END STEP 240 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NXDOMAIN SECTION QUESTION nx.example.com. IN A SECTION ANSWER nx.example.com. IN CNAME nx.example.org. SECTION AUTHORITY example.org. 3600 IN SOA ns.example.org. hostmaster.example.org. 2016101900 28800 7200 604800 3600 SECTION ADDITIONAL ENTRY_END ; Resolution for the CNAME target will result in SERVFAIL. It will ; be forwarded to the original query. The answer section should be ; empty. STEP 250 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION servfail.example.com. IN A ENTRY_END STEP 260 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION servfail.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; The CNAME target is DNSSEC-signed and it's validated. If the original ; query enabled the DNSSEC, the RRSIGs will be included in the answer, ; but the response should have the AD bit off STEP 270 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sec.example.com. IN A ENTRY_END STEP 280 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD DO RA AA NOERROR SECTION QUESTION sec.example.com. IN A SECTION ANSWER sec.example.com. IN CNAME www.infoblox.com. www.infoblox.com. 3600 IN A 161.47.10.70 www.infoblox.com. 3600 IN RRSIG A 5 3 3600 20161003223322 20160929221122 14916 infoblox.com. WbO9ydRAoRTPvdK18atTdLEkkMGoOjuwbcb6vVI0d6Sea3xkcBMNmtst Wdzr+pKEJqO2bfm167X6uhcOHanHZRnirlTnEbuTdsP0HCiIEGQD5iHg UNH2FJSKGNYBmgZKJpuLhDca7oqtkl8EyGA+UEt6Rtq6aW8V0wpkhPHi Pug=' SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_init_ds.rpl0000644000175000017500000001436114010434640021017 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DS > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DS 55582 5 1 66e829ebd8145e6f030b840ae63b77273c9575e1 ; xiniv-mopov-rakoc-galuk-zibeb-ricob-penuf-rutad-lyzan-hetuv-caxox AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with initial trust anchor from DS ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 ASSIGN t0 = ${time} ; get probe time and check it. 4800 is about 10% less than 5400. And more than ; the 3600 that a failure timeout would have. STEP 7 ASSIGN probe = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 8 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ; The autotrust anchor was probed due to the query. STEP 30 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END ; wait and see if autotrust probes (the unchanged) domain again. STEP 40 TIME_PASSES EVAL ${$probe} STEP 50 TRAFFIC STEP 65 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 70 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${time} ;;${ctime ${time}} ;;last_success: ${time} ;;${ctime ${time}} ;;next_probe_time: ${$t0 + $probe + $probe2} ;;${ctime $t0 + $probe + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END SCENARIO_END unbound-1.13.1/testdata/fwd_three.tdir/0000755000175000017500000000000014010434640017420 5ustar wouterwouterunbound-1.13.1/testdata/fwd_three.tdir/fwd_three.test0000644000175000017500000000250414010434640022271 0ustar wouterwouter# #-- fwd_three.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www1.example.com." dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer for single query" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> do three queries" dig @localhost -p $UNBOUND_PORT +retry=10 +time=1 www1.example.com. >outfile1 & digpid1=$! dig @localhost -p $UNBOUND_PORT +retry=10 +time=1 www2.example.com. >outfile2 & digpid2=$! dig @localhost -p $UNBOUND_PORT +retry=10 +time=1 www3.example.com. >outfile3 & digpid3=$! sleep 5 kill -9 $digpid1 kill -9 $digpid2 kill -9 $digpid3 echo "> cat outfile1" cat outfile1 echo "> cat outfile2" cat outfile2 echo "> cat outfile3" cat outfile3 echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answers for three queries" if grep "10.20.30.40" outfile1; then echo "1 is OK" else echo "1 is not OK" exit 1 fi if grep "10.20.30.50" outfile2; then echo "2 is OK" else echo "2 is not OK" exit 1 fi if grep "10.20.30.60" outfile3; then echo "3 is OK" else echo "3 is not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_three.tdir/fwd_three.testns0000644000175000017500000000076014010434640022634 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www1 IN A SECTION ANSWER www1 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.50 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.60 ENTRY_END unbound-1.13.1/testdata/fwd_three.tdir/fwd_three.conf0000644000175000017500000000047714010434640022246 0ustar wouterwouterserver: verbosity: 4 # old 2 num-threads: 5 interface: 127.0.0.1 port: @PORT@ outgoing-range: 2 outgoing-num-tcp: 2 directory: "" pidfile: "unbound.pid" chroot: "" username: "" num-queries-per-thread: 1 use-syslog: no do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_three.tdir/fwd_three.post0000644000175000017500000000075014010434640022300 0ustar wouterwouter# #-- fwd_three.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh # kill fwder kill_pid $FWD_PID # find all extra forked testns and kill them. pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` for p in $pidlist; do kill_pid $p done # kill unbound kill_pid $UNBOUND_PID exit 0 unbound-1.13.1/testdata/fwd_three.tdir/fwd_three.pre0000644000175000017500000000160714010434640022103 0ustar wouterwouter# #-- fwd_three.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT -f 9 fwd_three.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_three.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_three.tdir/fwd_three.dsc0000644000175000017500000000046514010434640022067 0ustar wouterwouterBaseName: fwd_three Version: 1.0 Description: Forward three queries at once, using threads. CreationDate: Tue Feb 27 14:11:44 CET 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_three.pre Post: fwd_three.post Test: fwd_three.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/iter_lamescrub.rpl0000644000175000017500000000751314010434640020235 0ustar wouterwouter; config options server: qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test lameness detection after scrubber. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. ; This server is Lame! RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR RD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY com. 155182 IN NS a.gtld-servers.net. com. 155182 IN NS b.gtld-servers.net. com. 155182 IN NS c.gtld-servers.net. com. 155182 IN NS d.gtld-servers.net. com. 155182 IN NS e.gtld-servers.net. com. 155182 IN NS f.gtld-servers.net. com. 155182 IN NS g.gtld-servers.net. com. 155182 IN NS h.gtld-servers.net. com. 155182 IN NS i.gtld-servers.net. com. 155182 IN NS j.gtld-servers.net. com. 155182 IN NS k.gtld-servers.net. com. 155182 IN NS l.gtld-servers.net. com. 155182 IN NS m.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. 155182 IN A 192.5.6.30 b.gtld-servers.net. 155182 IN A 192.33.14.30 c.gtld-servers.net. 155182 IN A 192.26.92.30 d.gtld-servers.net. 155182 IN A 192.31.80.30 e.gtld-servers.net. 155182 IN A 192.12.94.30 f.gtld-servers.net. 155182 IN A 192.35.51.30 g.gtld-servers.net. 155182 IN A 192.42.93.30 h.gtld-servers.net. 155182 IN A 192.54.112.30 i.gtld-servers.net. 155182 IN A 192.43.172.30 j.gtld-servers.net. 155182 IN A 192.48.79.30 k.gtld-servers.net. 155182 IN A 192.52.178.30 l.gtld-servers.net. 155182 IN A 192.41.162.30 m.gtld-servers.net. 155182 IN A 192.55.83.30 a.gtld-servers.net. 155182 IN AAAA 2001:503:a83e::2:30 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursin happens here ; check that the answer is a failure (lame server) ; and not a nodata-noerror message (false answer classification). STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ta_algo_missing.rpl0000644000175000017500000001661714010434640021243 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}" trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" trust-anchor: "example.com. 3600 IN DS 30899 7 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" harden-algo-downgrade: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with multiple algorithm missing one ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. AKIIYDOGHogglFqJK94ZtOnF7EfGikgAyloMNRSMCrQgFaFkmcOyjrc= ;{id = 2854} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20070926134150 20070829134150 30899 example.com. J55fsz1GGMnngc4r50xvXDUdaVMlfcLKLVsfMhwNLF+ERac5XV/lLRAc/aSER+qQdsSo0CrjYjy1wat7YQpDAA== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametocloser.rpl0000644000175000017500000001160714010434640020734 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" trust-anchor: "a.b.example.com. 3600 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8=" val-override-date: "20091113091234" fake-sha1: yes trust-anchor-signaling: no forward-zone: name: "." forward-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test validator with CNAME to closer anchor under optout. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN CNAME www.a.b.example.com. www.example.com. 3600 IN RRSIG CNAME 5 3 3600 20091213091234 20091111091234 30899 example.com. mfQXJgOsRe8wiqNDZT4+ygSgRqzNowJ20o5+b681Mssp0xc007dq1ZaUYwUCdZjTn/GhF+f74t0UI1oqsFw2XA== ;{id = 30899} SECTION AUTHORITY ;; nsec3param 1 1 1 d399eaab ; example.com. -> l0c0e5lac37ai0lpij31sj699hkktdmb. ; b.example.com. -> 1lq6sb4omkd2vgj0l8lro2cbie223hco. ;; closest encloser: example.com. l0c0e5lac37ai0lpij31sj699hkktdmb.example.com. IN NSEC3 1 1 1 d399eaab l0c0e5lac37ai0lpij31sj699hkktdmc SOA NS DNSKEY NSEC3PARAM RRSIG l0c0e5lac37ai0lpij31sj699hkktdmb.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20091213091234 20091111091234 30899 example.com. qjV0zsbDWLuoOQQ3tgCE2zo1z31bK9nv/Wh6xqKhmhyFI87nw2HM0lZGfRQrpWvWfBDczLRxHH9WNZkeIzv28w== ;{id = 30899} ;; nextcloser is: b.example.com. ; under optout range. ; disproof of DS using the optout range. 1lq4sb4omkd2vgj0l8lro2cbie223hco.example.com. IN NSEC3 1 1 1 d399eaab 1lq8sb4omkd2vgj0l8lro2cbie223hco NS RRSIG 1lq4sb4omkd2vgj0l8lro2cbie223hco.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20091213091234 20091111091234 30899 example.com. ZOJhHYt+YkGHBxHynuXlyZ8PEGg4YyqD/roWiEtBoP2PiGoPNCNqtWd0WjRgsUT0YFp/VqjqAU/RH8D45B8S8A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.a.b.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY ; NSEC that proves there is no AAAA record www.a.b.example.com. IN NSEC zzz.a.b.example.com. A NSEC RRSIG MX www.a.b.example.com. 3600 IN RRSIG NSEC 5 5 3600 20091213091234 20091111091234 16486 a.b.example.com. pOj+aOIolZ8VXlLpaLD1NsYVbl8FW4wmsJbiVTYAMcyDOlgxOsbhTtlB4jQ7uV9pRVAzkvdm1V5wc/1PcncTuw== ;{id = 16486} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20091213091234 20091111091234 30899 example.com. hc+1QLqhy6lcfgH95k6eabsXrYsdH2oTLqDu6BjHYrmLi0kX4ZDiOI+syhIcGw9+hRqW1j8t+lsHvzvi7BgcXg== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.b.example.com. IN DNSKEY SECTION ANSWER a.b.example.com. 3600 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} a.b.example.com. 3600 IN RRSIG DNSKEY 5 4 3600 20091213091234 20091111091234 16486 a.b.example.com. kPftbF2Rut5h2Sc2k/gp27XS+4I9WQ/EYa5NJOnqfJZqpw/es7GuLyWAAZyvNhBDIUEenXtZ8k1H8F8poKdNXw== ;{id = 16486} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN CNAME www.a.b.example.com. www.example.com. 3600 IN RRSIG CNAME 5 3 3600 20091213091234 20091111091234 30899 example.com. mfQXJgOsRe8wiqNDZT4+ygSgRqzNowJ20o5+b681Mssp0xc007dq1ZaUYwUCdZjTn/GhF+f74t0UI1oqsFw2XA== ;{id = 30899} SECTION AUTHORITY l0c0e5lac37ai0lpij31sj699hkktdmb.example.com. 3600 IN NSEC3 1 1 1 d399eaab l0c0e5lac37ai0lpij31sj699hkktdmc NS SOA RRSIG DNSKEY NSEC3PARAM ; flags: optout l0c0e5lac37ai0lpij31sj699hkktdmb.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20091213091234 20091111091234 30899 example.com. qjV0zsbDWLuoOQQ3tgCE2zo1z31bK9nv/Wh6xqKhmhyFI87nw2HM0lZGfRQrpWvWfBDczLRxHH9WNZkeIzv28w== ;{id = 30899} 1lq4sb4omkd2vgj0l8lro2cbie223hco.example.com. 3600 IN NSEC3 1 1 1 d399eaab 1lq8sb4omkd2vgj0l8lro2cbie223hco NS RRSIG ; flags: optout 1lq4sb4omkd2vgj0l8lro2cbie223hco.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20091213091234 20091111091234 30899 example.com. ZOJhHYt+YkGHBxHynuXlyZ8PEGg4YyqD/roWiEtBoP2PiGoPNCNqtWd0WjRgsUT0YFp/VqjqAU/RH8D45B8S8A== ;{id = 30899} www.a.b.example.com. 3600 IN NSEC zzz.a.b.example.com. A MX RRSIG NSEC www.a.b.example.com. 3600 IN RRSIG NSEC 5 5 3600 20091213091234 20091111091234 16486 a.b.example.com. pOj+aOIolZ8VXlLpaLD1NsYVbl8FW4wmsJbiVTYAMcyDOlgxOsbhTtlB4jQ7uV9pRVAzkvdm1V5wc/1PcncTuw== ;{id = 16486} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_ds_locate_ns.rpl0000644000175000017500000000530514010434640020712 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test locate of NS records for parent nameservers of DS ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; content of root-servers.net ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN NS SECTION ANSWER root-servers.net. IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 SECTION AUTHORITY root-servers.net. IN NS K.ROOT-SERVERS.NET. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN AAAA SECTION ANSWER SECTION AUTHORITY root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION ANSWER SECTION AUTHORITY root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION root-servers.net. IN A SECTION AUTHORITY root-servers.net. IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION root-servers.net. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION ANSWER SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/root_key_sentinel.rpl0000755000175000017500000003154514010434640020776 0ustar wouterwouter; config options server: trust-anchor: ". 145907 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=" val-override-date: "20180423171826" target-fetch-policy: "0 0 0 0 0" trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test root key sentinel (draft-ietf-dnsop-kskroll-sentinel) ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN DNSKEY SECTION ANSWER . 172800 IN DNSKEY 256 3 8 AwEAAdU4aKlDgEpXWWpH5aXHJZI1Vm9Cm42mGAsqkz3akFctS6zsZHC3 pNNMug99fKa7OW+tRHIwZEc//mX8Jt6bcw5bPgRHG6u2eT8vUpbXDPVs 1ICGR6FhlwFWEOyxbIIiDfd7Eq6eALk5RNcauyE+/ZP+VdrhWZDeEWZR rPBLjByBWTHl+v/f+xvTJ3Stcq2tEqnzS2CCOr6RTJepprYhu+5Yl6aR ZmEVBK27WCW1Zrk1LekJvJXfcyKSKk19C5M5JWX58px6nB1IS0pMs6aC IK2yaQQVNUEg9XyQzBSv/rMxVNNy3VAqOjvh+OASpLMm4GECbSSe8jtj wG0I78sfMZc= . 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0= . 172800 IN DNSKEY 257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3 +/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kv ArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF 0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+e oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfd RUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwN R1AkUTV74bU= . 172800 IN RRSIG DNSKEY 8 0 172800 20180512000000 20180421000000 19036 . e9I0U9vHrWZQN2v3aqxnHdq9BUCO8NG+4kNsaADxOndT9bJpUneAYfDz 4EJwJggjPjt6ms3Bh2pGJVOmfnRS5LQWLBKCgi+4p/vXVajWlZmIDvRr DhyYAS9ktrRLqHvXVZhx+udfvXoFuZnWSKVDFMI2fIL9wniJKCUdQ+nu 0a/iEsDBEVmwWw7T428yIQ6+NjvYQ36cf5mbchX58CBM7KfUGnsQLIAP 5tnkHM4kdIDbGCr78RCE916blRKETrbqtNi4hHIAscesJfRJsBZ+Tlho uyQie/SjGnvRULjADS5lCWKLDBRUIMzOomK4Tekrdrxk1DwcpL68xAHt 5D19Iw== ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION root-key-sentinel-is-ta-19036. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 room. 86400 IN NSEC rs. NS DS RRSIG NSEC . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== room. 86400 IN RRSIG NSEC 8 1 86400 20180506050000 20180423040000 39570 . Fmhf8s0yVixynVdO6VWLEctcvb7+3UK9gu+9BhUPBS0SNedhMwfyiYaR MzWU9P99gVYUT1G/vXRqbAabtD3Ccnt/ydUBguZq3pV5GL+7czeEbZ5z 8/LlS+wyw2OTe4DOKzBZ7oZAA/r/Tz2bhVA6kNyIKFXAmBXuh7I5Ty7H elbIWh7Lq7QjZwN9LL4M1kSNePH2cmS3Lu/scRf3m3fN/70sgoYzKNB7 +Hbi/YjXBbRIcj7tHA6iMoZLGPXRMJdb6NqJNIaDIDtOA95cFa4oRx2P usBW9lpXG0YY+KDm1J6UjxUP7TIn0yXt+c0vy2cz7zu++ZEkdU29WtBG dUQEaA== . 86400 IN RRSIG NSEC 8 0 86400 20180506050000 20180423040000 39570 . E1FeP4/GvcPksKXgas9pslduWU6+cqqSoJpgtCeymd6t7MORbnsQJdUo rjqbRtxvOOnv5g4uVZdv0krSc/eqw8HWEiCW0oZWYLcz+h8eI4htt4uv 8LciVgQn3Aspic2b8uWdPTJUPuc94esn5AJZDMK9VOTwZD2UVqbv/k9U 4LG0o56yRQshYTG2hiutFXLYmzFe2YmKct6G7W50O7s5hwxTqqRwv9av 1Q3UZUj/ZARNt9z53pygJsDPDX+L2q4lowtiHJCRPjijm8K3Bwb8uFsG 3YB20K9d3krack9c6gAMJzpgeuFQ/b2HxiZMJPvJ3tHqIhDn0U5qoZdT Xq0WTw== ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION root-key-sentinel-is-ta-20326. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 . 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG NSEC 8 0 86400 20180506050000 20180423040000 39570 . E1FeP4/GvcPksKXgas9pslduWU6+cqqSoJpgtCeymd6t7MORbnsQJdUo rjqbRtxvOOnv5g4uVZdv0krSc/eqw8HWEiCW0oZWYLcz+h8eI4htt4uv 8LciVgQn3Aspic2b8uWdPTJUPuc94esn5AJZDMK9VOTwZD2UVqbv/k9U 4LG0o56yRQshYTG2hiutFXLYmzFe2YmKct6G7W50O7s5hwxTqqRwv9av 1Q3UZUj/ZARNt9z53pygJsDPDX+L2q4lowtiHJCRPjijm8K3Bwb8uFsG 3YB20K9d3krack9c6gAMJzpgeuFQ/b2HxiZMJPvJ3tHqIhDn0U5qoZdT Xq0WTw== room. 86400 IN NSEC rs. NS DS RRSIG NSEC room. 86400 IN RRSIG NSEC 8 1 86400 20180506050000 20180423040000 39570 . Fmhf8s0yVixynVdO6VWLEctcvb7+3UK9gu+9BhUPBS0SNedhMwfyiYaR MzWU9P99gVYUT1G/vXRqbAabtD3Ccnt/ydUBguZq3pV5GL+7czeEbZ5z 8/LlS+wyw2OTe4DOKzBZ7oZAA/r/Tz2bhVA6kNyIKFXAmBXuh7I5Ty7H elbIWh7Lq7QjZwN9LL4M1kSNePH2cmS3Lu/scRf3m3fN/70sgoYzKNB7 +Hbi/YjXBbRIcj7tHA6iMoZLGPXRMJdb6NqJNIaDIDtOA95cFa4oRx2P usBW9lpXG0YY+KDm1J6UjxUP7TIn0yXt+c0vy2cz7zu++ZEkdU29WtBG dUQEaA== ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION root-key-sentinel-not-ta-19036. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 room. 86400 IN NSEC rs. NS DS RRSIG NSEC . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== room. 86400 IN RRSIG NSEC 8 1 86400 20180506050000 20180423040000 39570 . Fmhf8s0yVixynVdO6VWLEctcvb7+3UK9gu+9BhUPBS0SNedhMwfyiYaR MzWU9P99gVYUT1G/vXRqbAabtD3Ccnt/ydUBguZq3pV5GL+7czeEbZ5z 8/LlS+wyw2OTe4DOKzBZ7oZAA/r/Tz2bhVA6kNyIKFXAmBXuh7I5Ty7H elbIWh7Lq7QjZwN9LL4M1kSNePH2cmS3Lu/scRf3m3fN/70sgoYzKNB7 +Hbi/YjXBbRIcj7tHA6iMoZLGPXRMJdb6NqJNIaDIDtOA95cFa4oRx2P usBW9lpXG0YY+KDm1J6UjxUP7TIn0yXt+c0vy2cz7zu++ZEkdU29WtBG dUQEaA== . 86400 IN RRSIG NSEC 8 0 86400 20180506050000 20180423040000 39570 . E1FeP4/GvcPksKXgas9pslduWU6+cqqSoJpgtCeymd6t7MORbnsQJdUo rjqbRtxvOOnv5g4uVZdv0krSc/eqw8HWEiCW0oZWYLcz+h8eI4htt4uv 8LciVgQn3Aspic2b8uWdPTJUPuc94esn5AJZDMK9VOTwZD2UVqbv/k9U 4LG0o56yRQshYTG2hiutFXLYmzFe2YmKct6G7W50O7s5hwxTqqRwv9av 1Q3UZUj/ZARNt9z53pygJsDPDX+L2q4lowtiHJCRPjijm8K3Bwb8uFsG 3YB20K9d3krack9c6gAMJzpgeuFQ/b2HxiZMJPvJ3tHqIhDn0U5qoZdT Xq0WTw== ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION root-key-sentinel-not-ta-20326. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 . 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG NSEC 8 0 86400 20180506050000 20180423040000 39570 . E1FeP4/GvcPksKXgas9pslduWU6+cqqSoJpgtCeymd6t7MORbnsQJdUo rjqbRtxvOOnv5g4uVZdv0krSc/eqw8HWEiCW0oZWYLcz+h8eI4htt4uv 8LciVgQn3Aspic2b8uWdPTJUPuc94esn5AJZDMK9VOTwZD2UVqbv/k9U 4LG0o56yRQshYTG2hiutFXLYmzFe2YmKct6G7W50O7s5hwxTqqRwv9av 1Q3UZUj/ZARNt9z53pygJsDPDX+L2q4lowtiHJCRPjijm8K3Bwb8uFsG 3YB20K9d3krack9c6gAMJzpgeuFQ/b2HxiZMJPvJ3tHqIhDn0U5qoZdT Xq0WTw== room. 86400 IN NSEC rs. NS DS RRSIG NSEC room. 86400 IN RRSIG NSEC 8 1 86400 20180506050000 20180423040000 39570 . Fmhf8s0yVixynVdO6VWLEctcvb7+3UK9gu+9BhUPBS0SNedhMwfyiYaR MzWU9P99gVYUT1G/vXRqbAabtD3Ccnt/ydUBguZq3pV5GL+7czeEbZ5z 8/LlS+wyw2OTe4DOKzBZ7oZAA/r/Tz2bhVA6kNyIKFXAmBXuh7I5Ty7H elbIWh7Lq7QjZwN9LL4M1kSNePH2cmS3Lu/scRf3m3fN/70sgoYzKNB7 +Hbi/YjXBbRIcj7tHA6iMoZLGPXRMJdb6NqJNIaDIDtOA95cFa4oRx2P usBW9lpXG0YY+KDm1J6UjxUP7TIn0yXt+c0vy2cz7zu++ZEkdU29WtBG dUQEaA== ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION root-key-sentinel-is-ta-19036. IN A ENTRY_END ; recursion happens here. STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION root-key-sentinel-is-ta-19036. IN A SECTION ANSWER SECTION AUTHORITY . 3600 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 . 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== room. 86400 IN NSEC rs. NS DS RRSIG NSEC room. 86400 IN RRSIG NSEC 8 1 86400 20180506050000 20180423040000 39570 . Fmhf8s0yVixynVdO6VWLEctcvb7+3UK9gu+9BhUPBS0SNedhMwfyiYaR MzWU9P99gVYUT1G/vXRqbAabtD3Ccnt/ydUBguZq3pV5GL+7czeEbZ5z 8/LlS+wyw2OTe4DOKzBZ7oZAA/r/Tz2bhVA6kNyIKFXAmBXuh7I5Ty7H elbIWh7Lq7QjZwN9LL4M1kSNePH2cmS3Lu/scRf3m3fN/70sgoYzKNB7 +Hbi/YjXBbRIcj7tHA6iMoZLGPXRMJdb6NqJNIaDIDtOA95cFa4oRx2P usBW9lpXG0YY+KDm1J6UjxUP7TIn0yXt+c0vy2cz7zu++ZEkdU29WtBG dUQEaA== . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG NSEC 8 0 86400 20180506050000 20180423040000 39570 . E1FeP4/GvcPksKXgas9pslduWU6+cqqSoJpgtCeymd6t7MORbnsQJdUo rjqbRtxvOOnv5g4uVZdv0krSc/eqw8HWEiCW0oZWYLcz+h8eI4htt4uv 8LciVgQn3Aspic2b8uWdPTJUPuc94esn5AJZDMK9VOTwZD2UVqbv/k9U 4LG0o56yRQshYTG2hiutFXLYmzFe2YmKct6G7W50O7s5hwxTqqRwv9av 1Q3UZUj/ZARNt9z53pygJsDPDX+L2q4lowtiHJCRPjijm8K3Bwb8uFsG 3YB20K9d3krack9c6gAMJzpgeuFQ/b2HxiZMJPvJ3tHqIhDn0U5qoZdT Xq0WTw== SECTION ADDITIONAL ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION root-key-sentinel-not-ta-19036. IN A ENTRY_END ; recursion happens here. STEP 22 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION root-key-sentinel-not-ta-19036. IN A ENTRY_END STEP 30 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION root-key-sentinel-is-ta-20326. IN A ENTRY_END ; recursion happens here. STEP 33 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION root-key-sentinel-is-ta-20326. IN A ENTRY_END STEP 40 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION root-key-sentinel-not-ta-20326. IN A ENTRY_END ; recursion happens here. STEP 44 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION root-key-sentinel-not-ta-20326. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018042300 1800 900 604800 86400 . 86400 IN RRSIG SOA 8 0 86400 20180506050000 20180423040000 39570 . LboVfcSRUSuBcZPpkkOO1N6KpGO6DBzOGL6UtSVUssycPzGIZctcIM0s Kb71iBf3rxFjNVlgCuNFb74WpCyRQ2coB2uUQXVA81A+P4Qb62/s3Nr2 pRGxayA1Y0Uq2M4CRkh3bjgn/cEcEFSWTl+xDVjZO8hX98JdQjYmrVui 4zEQhsMM03sqkmjkH88owibWK7HDl6O0n6Imer2hCsVTlFv7PSrBHlXP KntkIMDtbGHZW/BkKnA6P1jfAVfgXr70bRVaDRddLqJp3EX6EuR83osg 8q46170NgCMCKK3ePItJYF16SEADFKdOQs19CMTXAN7M1p4cnGk2yRG/ 68BmCg== . 86400 IN NSEC aaa. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG NSEC 8 0 86400 20180506050000 20180423040000 39570 . E1FeP4/GvcPksKXgas9pslduWU6+cqqSoJpgtCeymd6t7MORbnsQJdUo rjqbRtxvOOnv5g4uVZdv0krSc/eqw8HWEiCW0oZWYLcz+h8eI4htt4uv 8LciVgQn3Aspic2b8uWdPTJUPuc94esn5AJZDMK9VOTwZD2UVqbv/k9U 4LG0o56yRQshYTG2hiutFXLYmzFe2YmKct6G7W50O7s5hwxTqqRwv9av 1Q3UZUj/ZARNt9z53pygJsDPDX+L2q4lowtiHJCRPjijm8K3Bwb8uFsG 3YB20K9d3krack9c6gAMJzpgeuFQ/b2HxiZMJPvJ3tHqIhDn0U5qoZdT Xq0WTw== room. 86400 IN NSEC rs. NS DS RRSIG NSEC room. 86400 IN RRSIG NSEC 8 1 86400 20180506050000 20180423040000 39570 . Fmhf8s0yVixynVdO6VWLEctcvb7+3UK9gu+9BhUPBS0SNedhMwfyiYaR MzWU9P99gVYUT1G/vXRqbAabtD3Ccnt/ydUBguZq3pV5GL+7czeEbZ5z 8/LlS+wyw2OTe4DOKzBZ7oZAA/r/Tz2bhVA6kNyIKFXAmBXuh7I5Ty7H elbIWh7Lq7QjZwN9LL4M1kSNePH2cmS3Lu/scRf3m3fN/70sgoYzKNB7 +Hbi/YjXBbRIcj7tHA6iMoZLGPXRMJdb6NqJNIaDIDtOA95cFa4oRx2P usBW9lpXG0YY+KDm1J6UjxUP7TIn0yXt+c0vy2cz7zu++ZEkdU29WtBG dUQEaA== ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_minimal.rpl0000644000175000017500000000477714010434640017534 0ustar wouterwouter; This is a comment. ; config options go here. server: ; the snoop is to elicit a referral and check the additional ; is fine for that, not removed by minimal-responses. access-control: 127.0.0.1 allow_snoop minimal-responses: yes forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Test minimal-responses RANGE_BEGIN 0 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 txt.example.com. IN TXT "foo" ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION a.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5 example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 txt.example.com. IN TXT "foo" ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NXDOMAIN SECTION QUESTION b.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5 SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 txt.example.com. IN TXT "foo" ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype all REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.example.com. IN A ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype all REPLY QR RD RA SECTION QUESTION a.example.com. IN A SECTION AUTHORITY example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5 ENTRY_END STEP 21 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b.example.com. IN A ENTRY_END STEP 24 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype all REPLY QR RD RA NXDOMAIN SECTION QUESTION b.example.com. IN A SECTION AUTHORITY example.com. IN SOA host.example.com. ns.example.com. 1 2 3 4 5 ENTRY_END ; get a referral, the additional is not removed. STEP 31 QUERY ENTRY_BEGIN REPLY SECTION QUESTION c.example.com. IN A ENTRY_END STEP 34 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype all REPLY QR RA NOERROR SECTION QUESTION c.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_nods_badsig.rpl0000644000175000017500000002025614010434640021445 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 with no DS referral with bad signature. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG ; bad signature: 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20010926135752 20010829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} ;8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG ; bad signature 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20010926135752 20010829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} ;8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_stubds.rpl0000644000175000017500000001716614010434640017410 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. stub-zone: name: "sub.example.com" stub-addr: 1.2.3.6 CONFIG_END SCENARIO_BEGIN Test stub with DS query ; The stub zone is linked validly with a DS to the public internet zone. ; unbound just has to be able to ask the DS from the right server (not ; from the stub). ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for DS of sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response for qtype DS. This is not available here. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR SERVFAIL SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_prefetch_fail.rpl0000644000175000017500000001731414010434640021053 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" prefetch: "yes" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver prefetch where it fails to fetch ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 200 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 200 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 50 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION www.example.com. IN A ;SECTION ANSWER ;www.example.com. 3600 IN A 10.20.30.40 ;SECTION AUTHORITY ;example.com. 3600 IN NS ns.example.com. ;SECTION ADDITIONAL ;ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; note ns.example.com range for steps 100 - 160 is not entered ; no queries should be sent there ; ns.example.com. RANGE_BEGIN 160 200 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; after 1800 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 1800 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 1800 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1800 IN A 1.2.3.4 ENTRY_END ; after 1440 we are 360 seconds before the expiry ; (the authority changes behind the scenes to detect new lookup) STEP 50 TIME_PASSES ELAPSE 1440 STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 360 IN A 10.20.30.40 SECTION AUTHORITY example.com. 360 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 360 IN A 1.2.3.4 ENTRY_END STEP 80 TRAFFIC ; let traffic flow for prefetch to happen ; above a cache reply with 10% of the original TTL ; but the actual cache could have been updated, try to get that STEP 120 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 360 IN A 10.20.30.40 SECTION AUTHORITY example.com. 360 IN NS ns.example.com. SECTION ADDITIONAL ; this is picked up from the parent (because this simulation has the ; parent respond with servfail, not actually timeout) ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; another query to see if there is another lookup towards the authority ; the server should not send too many queries towards the authority STEP 140 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 150 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 360 IN A 10.20.30.40 SECTION AUTHORITY example.com. 360 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; some time later another query, and now it is fine to bother the authority ; with another lookup attempt. STEP 160 TIME_PASSES ELAPSE 30 ; so we are now 330 seconds before expiry. STEP 170 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 180 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 330 IN A 10.20.30.40 SECTION AUTHORITY example.com. 330 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3570 IN A 1.2.3.4 ENTRY_END ; now the just-looked-up entry STEP 190 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 200 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3570 IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/subnet_cached.crpl0000644000175000017500000001743114010434640020167 0ustar wouterwouter; Ask the same question twice. Check to see second is answered ; from cache server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" trust-anchor-signaling: no target-fetch-policy: "0 0 0 0 0" send-client-subnet: 1.2.3.4 max-client-subnet-ipv4: 17 module-config: "subnetcache validator iterator" verbosity: 3 fake-sha1: yes fake-dsa: yes access-control: 127.0.0.1 allow_snoop qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with positive response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id copy_ednsdata_assume_clientsubnet REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN HEX_ANSWER_BEGIN; 00 00 01 00 00 01 00 00 ;ID 0 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01 00 00 29 10 00 00 00 80 00 00 0b 00 08 00 07 ; OPC, optlen 00 01 11 00 ; ip4, scope 17, source 0 7f 00 00 ;127.0.0.0/17 HEX_ANSWER_END ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ednsdata REPLY QR RD RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 11 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END STEP 11 QUERY ENTRY_BEGIN HEX_ANSWER_BEGIN; 00 00 00 00 00 01 00 00 ;ID 0, no RD 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01 00 00 29 10 00 00 00 80 00 00 0b 00 08 00 07 ; OPC, optlen 00 01 12 00 ; ip4, scope 18, source 0 7f 00 00 ;127.0.0.0/18 HEX_ANSWER_END ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all ednsdata REPLY QR RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 12 11 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/nss_compile.tdir/0000755000175000017500000000000014010434640017764 5ustar wouterwouterunbound-1.13.1/testdata/nss_compile.tdir/nss_compile.test0000644000175000017500000000220214010434640023174 0ustar wouterwouter# #-- nss_compile.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test if test "`hostname`" = "open.nlnetlabs.nl"; then echo "on open, continue test" else echo "not on open, no test, do this explicitly" exit 0 fi . ../common.sh get_make PRE="../.." opts=`$PRE/unbound -h | grep configured | sed -e 's/^.*options: //' | sed -e "s/'//g" ` function error_exit () { cat config.log echo "$1" exit 1 } mkdir testdata cp $PRE/testdata/*.rpl testdata/. cp $PRE/testdata/test* testdata/. echo ">>> $PRE/configure $opts --without-ssl --with-nss --with-libunbound-only LDFLAGS=-L/usr/local/lib/nss" 'CPPFLAGS="-I/usr/local/include/nss/nss -I/usr/local/include/nspr"' $PRE/configure $opts --without-ssl --with-nss --with-libunbound-only LDFLAGS=-L/usr/local/lib/nss CPPFLAGS="-I/usr/local/include/nss/nss -I/usr/local/include/nspr" || error_exit "could not configure" echo ">>> $MAKE" $MAKE || error_exit "could not make" echo ">>> $MAKE test" $MAKE test || error_exit "could not make test" exit 0 unbound-1.13.1/testdata/nss_compile.tdir/nss_compile.dsc0000644000175000017500000000037314010434640022775 0ustar wouterwouterBaseName: nss_compile Version: 1.0 Description: Compile with NSS CreationDate: Fri Feb 8 14:40:28 CET 2013 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: nss_compile.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/common.sh0000644000175000017500000001407114010434640016337 0ustar wouterwouter# common.sh - an include file for commonly used functions for test code. # BSD licensed (see LICENSE file). # # Version 3 # 2011-02-23: get_pcat for PCAT, PCAT_DIFF and PCAT_PRINT defines. # 2011-02-18: ports check on BSD,Solaris. wait_nsd_up. # 2011-02-11: first version. # # include this file from a tdir script with # . ../common.sh # # overview of functions available: # error x : print error and exit # info x : print info # test_tool_avail x : see if program in path and complain, exit if not. # get_ldns_testns : set LDNS_TESTNS to executable ldns-testns # get_make : set MAKE to gmake or make tool. # get_gcc : set cc or gcc in CC # get_pcat : set PCAT, PCAT_DIFF and PCAT_PRINT executables. # set_doxygen_path : set doxygen path # skip_if_in_list : set SKIP=1 if name in list and tool not available. # get_random_port x : get RND_PORT a sequence of free random port numbers. # wait_server_up : wait on logfile to see when server comes up. # wait_ldns_testns_up : wait for ldns-testns to come up. # wait_unbound_up : wait for unbound to come up. # wait_petal_up : wait for petal to come up. # wait_nsd_up : wait for nsd to come up. # wait_server_up_or_fail: wait for server to come up or print a failure string # kill_pid : kill a server, make sure and wait for it to go down. # print error and exit # $0: name of program # $1: error to printout. error () { echo "$0: error: $1" >&2 exit 1 } # print info # $0: name of program # $1: to printout. info () { echo "$0: info: $1" } # test if 'tool' is available in path and complain otherwise. # $1: tool test_tool_avail () { if test ! -x "`which $1 2>&1`"; then echo No "$1" in path exit 1 fi } # get ldns-testns tool in LDNS_TESTNS variable. get_ldns_testns () { if test -x "`which ldns-testns 2>&1`"; then LDNS_TESTNS=ldns-testns else LDNS_TESTNS=/home/wouter/bin/ldns-testns fi } # get make tool in MAKE variable, gmake is used if present. get_make () { if test -x "`which gmake 2>&1`"; then MAKE=gmake else MAKE=make fi } # get cc tool in CC variable, gcc is used if present. get_gcc () { if test -x "`which gcc 2>&1`"; then CC=gcc else CC=cc fi } # get pcat, pcat-print and pcat-diff get_pcat () { PCAT=`which pcat` PCAT_PRINT=`which pcat-print` PCAT_DIFF=`which pcat-diff` } # set SKIP=1 if the name is in list and tool is not available. # $1: name of package to check. # $2: list of packages that need the tool. # #3: name of the tool required. skip_if_in_list () { if echo $2 | grep $1 >/dev/null; then if test ! -x "`which $3 2>&1`"; then SKIP=1; fi fi } # function to get a number of random port numbers. # $1: number of random ports. # RND_PORT is returned as the starting port number get_random_port () { local plist local cont local collisions local i local MAXCOLLISION=1000 cont=1 collisions=0 while test "$cont" = 1; do #netstat -n -A ip -A ip6 -a | sed -e "s/^.*:\([0-9]*\) .*$/\1/" RND_PORT=$(( $RANDOM + 5354 )) # depending on uname try to check for collisions in port numbers case "`uname`" in linux|Linux) plist=`netstat -n -A ip -A ip6 -a 2>/dev/null | sed -e 's/^.*:\([0-9]*\) .*$/\1/'` ;; FreeBSD|freebsd|NetBSD|netbsd|OpenBSD|openbsd) plist=`netstat -n -a | grep "^[ut][dc]p[46] " | sed -e 's/^.*\.\([0-9]*\) .*$/\1/'` ;; Solaris|SunOS) plist=`netstat -n -a | sed -e 's/^.*\.\([0-9]*\) .*$/\1/' | grep '^[0-9]*$'` ;; *) plist="" ;; esac cont=0 for (( i=0 ; i < $1 ; i++ )); do if echo "$plist" | grep '^'`expr $i + $RND_PORT`'$' >/dev/null 2>&1; then cont=1; collisions=`expr $collisions + 1` fi done if test $collisions = $MAXCOLLISION; then error "too many collisions getting random port number" fi done } # wait for server to go up, pass # $1 : logfilename # $2 : string to watch for. # exits with failure if it does not come up wait_server_up () { local MAX_UP_TRY=120 local WAIT_THRES=30 local try for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do if test -f $1 && fgrep "$2" $1 >/dev/null; then #echo "done on try $try" break; fi if test $try -eq $MAX_UP_TRY; then echo "Server in $1 did not go up!" cat $1 exit 1; fi if test $try -ge $WAIT_THRES; then sleep 1 fi done } # wait for ldns-testns to come up # $1 : logfilename that is watched. wait_ldns_testns_up () { wait_server_up "$1" "Listening on port" } # wait for unbound to come up # string 'Start of service' in log. # $1 : logfilename that is watched. wait_unbound_up () { wait_server_up "$1" "start of service" } # wait for petal to come up # string 'petal start' in log. # $1 : logfilename that is watched. wait_petal_up () { wait_server_up "$1" "petal start" } # wait for nsd to come up # string nsd start in log. # $1 : logfilename that is watched. wait_nsd_up () { wait_server_up "$1" " started (NSD " } # wait for server to go up, pass # $1 : logfile # $2 : success string # $3 : failure string wait_server_up_or_fail () { local MAX_UP_TRY=120 local WAIT_THRES=30 local try for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do if test -f $1 && fgrep "$2" $1 >/dev/null; then echo "done on try $try" break; fi if test -f $1 && fgrep "$3" $1 >/dev/null; then echo "failed on try $try" break; fi if test $try -eq $MAX_UP_TRY; then echo "Server in $1 did not go up!" cat $1 exit 1; fi if test $try -ge $WAIT_THRES; then sleep 1 fi done } # kill a pid, make sure and wait for it to go down. # $1 : pid to kill kill_pid () { local MAX_DOWN_TRY=120 local WAIT_THRES=30 local try kill $1 for (( try=0 ; try <= $MAX_DOWN_TRY ; try++ )) ; do if kill -0 $1 >/dev/null 2>&1; then : else #echo "done on try $try" break; fi if test $try -eq $MAX_DOWN_TRY; then echo "Server in $1 did not go down! Send SIGKILL" kill -9 $1 >/dev/null 2>&1 fi if test $try -ge $WAIT_THRES; then sleep 1 fi # re-send the signal kill $1 >/dev/null 2>&1 done return 0 } # set doxygen path, so that make doc can find doxygen set_doxygen_path () { if test -x '/home/wouter/bin/doxygen'; then export PATH="/home/wouter/bin:$PATH" fi } unbound-1.13.1/testdata/autotrust_missing_returns.rpl0000644000175000017500000003321114010434640022614 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with missing key that returns ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 missing , 55582 is missing RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. wzXQvn/XBgdkUn0HFl/mzaxZ30k8R9126hCio+gH5MgaFhWIdp8ob0TWRDA5yzrQCKzkyUqqcx+6fUWVOZOtXg== ;{id = 30899} ; includes a signature from 60946. example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. rn/rE/xoqKRbTz1tGUjTESB5e4UrFT5liigwrUi5a6nxn9juhAa+o1VbMXi1zXCAnZwHRE+tGZc8v44zjeioIw== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 30899 example.com. TfFGz1kDtkn3ixbKMJvQDZ0uGw/eW+inIiPqQVPQtO2WiocKrnYnzwv/AqwnFvEar70dF15/zffNIF+ipOS5/g== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 60946 example.com. X0Ci//w0czN/J5RvypHGqp56n1tLdapi92ODAqjM7QpZXbSHaJ7wfPG1PZzvdxHUZUVyf8uy2stjg/XoLGHMWA== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${10*24*3600} STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t3} ;;${ctime $t3} ;;last_success: ${$t3} ;;${ctime $t3} ;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=3 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 11 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${11*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, the old key is removed from storage STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t6} ;;${ctime $t6} FILE_END SCENARIO_END unbound-1.13.1/testdata/auth_zonefile_dnssec_fail.rpl0000644000175000017500000001441714010434640022424 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: no ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no fallback-enabled: yes ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com $ORIGIN example.com. example 3600 IN SOA dns.example.de. hostmaster.dns.example.de. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ; this RR is edited to create the failure ;www.example.com. IN A 10.20.30.40 www.example.com. IN A 127.0.0.1 ; also edits the signature to fail, without needing crypto checks. ;www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 28540 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with zonefile and dnssec failure ; the zone file has signatures, used upstream, unbound validates the reply. ; but that fails and now it tries again, with failover to internet hosted ; (correct) contents. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD DO RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ipsecmod_strict.crpl0000644000175000017500000001102114010434640020560 0ustar wouterwouter; Test ipsecmod-strict option ; config options server: access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: yes ipsecmod-max-ttl: 200 qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test ipsecmod-strict option ; Scenario overview: ; - query for example.com. IN A ; - check that query for example.com. IN IPSECKEY is generated ; - check that we get SERVFAIL as answer (the hook failed) ; - check that the example.com. IN A answer is not cached ; - check that the example.com. IN IPSECKEY answer is cached ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; response to IPSECKEY query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION ANSWER example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION example.com. IN IPSECKEY ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION example.com. IN A ENTRY_END STEP 11 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 21 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN IPSECKEY ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION ANSWER example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_cname_ds.rpl0000644000175000017500000001732514010434640020745 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 CNAME for qtype DS. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN DS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN DS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN DS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN DS SECTION ANSWER ; from *.sub.example.com. IN CNAME sub.example.com. www.sub.example.com. IN CNAME sub.example.com. www.sub.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFFyXwAzONbrkZD3oQ50zRYXOr1vvAhQAmzDTm7YYloe6F96eBS1L+KE9hg== ;{id = 2854} SECTION AUTHORITY ; cover qname next closer name, for the wildcard. ; H(www.sub.example.com.) = ecllopkacmb753v6jlld4d371l1u8gme ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd ecllopkacmb753v6jlld4d371l1u9gme A RRSIG ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFD4bIeWulXj9lhAGsqCfsKg6jQheAhQ9kkYqd9AVdomcl2YzWOupJnV5wQ== ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN DS SECTION ANSWER www.sub.example.com. IN CNAME sub.example.com. www.sub.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFFyXwAzONbrkZD3oQ50zRYXOr1vvAhQAmzDTm7YYloe6F96eBS1L+KE9hg== ;{id = 2854} sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} SECTION AUTHORITY ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd ecllopkacmb753v6jlld4d371l1u9gme A RRSIG ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFD4bIeWulXj9lhAGsqCfsKg6jQheAhQ9kkYqd9AVdomcl2YzWOupJnV5wQ== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_tcp_tc.tdir/0000755000175000017500000000000014010434640017565 5ustar wouterwouterunbound-1.13.1/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.test0000644000175000017500000000077014010434640022606 0ustar wouterwouter# #-- fwd_tcp_tc.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.testns0000644000175000017500000000061614010434640023146 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA TC NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname TCP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 www IN A 10.20.30.41 www IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.post0000644000175000017500000000045414010434640022613 0ustar wouterwouter# #-- fwd_tcp_tc.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.pre0000644000175000017500000000160514010434640022413 0ustar wouterwouter# #-- fwd_tcp_tc.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_tcp_tc.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_tcp_tc.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.conf0000644000175000017500000000036714010434640022556 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.dsc0000644000175000017500000000044614010434640022400 0ustar wouterwouterBaseName: fwd_tcp_tc Version: 1.0 Description: Forward retry in TCP mode CreationDate: Wed May 9 09:11:32 CEST 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_tcp_tc.pre Post: fwd_tcp_tc.post Test: fwd_tcp_tc.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/iter_lame_nosoa.rpl0000644000175000017500000001303614010434640020372 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with lame reply looks like nodata with noSOA ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. ; advertises +RA so it is REC_LAME. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 SECTION AUTHORITY example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ns.example.net IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.com. ; is like a BIND server that is LAME, authoritative for other domains, ; but not this one, and somehow got this NS record in its cache. ; trying to give 'lame referral' but to the same name, not up. RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ENTRY_END RANGE_END ; store bad timing for one server to influence server selection ; 1.2.3.44 (ns.example.net) gets 900 msec. ; so the 376 ns.example.com is preferred. STEP 1 INFRA_RTT 1.2.3.44 example.net. 900 STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ; scrubbed off ;ns.example.net IN A 1.2.3.44 ENTRY_END ; query to recursion-lame server STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.net. example.com. IN NS ns.example.com. SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/localdata.rpl0000644000175000017500000001565714010434640017171 0ustar wouterwouter; config options server: hide-identity: no hide-version: no identity: "test-identity" version: "test-version" rrset-roundrobin: no ; implicit transparent zone should not block id.server local-data: "mydata.server. CH A 10.11.12.13" local-data: "myd2.server. CH A 10.11.12.14" local-data: 'myd3.server. CH TXT "a text record"' ; together implicit CH top domain .server is created transparent. ; static zone local-zone: "local" static local-data: "local SOA nobody nobody 1 2 3 4 5" local-data: "serv.local. A 20.30.40.50" ; multiple RRs in this RRset. local-data: "bla.bla.local. A 20.30.40.51" local-data: "bla.bla.local. A 20.30.40.52" local-data: "bla.bla.local. A 20.30.40.53" ; static zone (no soa) local-zone: "noso.local" static local-data: "bla.bla.noso.local AAAA 2001::2" ; deny zone (no answer) local-zone: "deny.top." deny ; refuse zone (error) local-zone: "refuse.top." refuse ; redirect zone local-zone: "redirect.top." redirect local-data: "redirect.top. A 20.30.40.54" ; null zone local-zone: "null.top." always_null ; create implicit data in the IN domain as well local-data: "a.a.implicit. A 20.30.41.50" local-data: "b.a.implicit. A 20.30.42.50" local-data: "b.b.implicit. A 20.30.43.50" local-data: "b.c.implicit. A 20.30.45.50" local-data: "c.c.implicit. A 20.30.44.50" CONFIG_END SCENARIO_BEGIN Test local data queries ; id.server. STEP 1 QUERY ENTRY_BEGIN SECTION QUESTION id.server. CH TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA SECTION QUESTION id.server. CH TXT SECTION ANSWER id.server. 0 CH TXT "test-identity" ENTRY_END ; mydata.server. STEP 3 QUERY ENTRY_BEGIN SECTION QUESTION mydata.server. CH A ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION mydata.server. CH A SECTION ANSWER mydata.server. 3600 CH A 10.11.12.13 ENTRY_END ; nodata with SOA STEP 5 QUERY ENTRY_BEGIN SECTION QUESTION local. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA AA SECTION QUESTION local. IN A SECTION AUTHORITY local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; positive SOA STEP 7 QUERY ENTRY_BEGIN SECTION QUESTION local. IN SOA ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA AA SECTION QUESTION local. IN SOA SECTION ANSWER local. 3600 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; positive subdomain STEP 9 QUERY ENTRY_BEGIN SECTION QUESTION serv.local. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION serv.local. IN A SECTION ANSWER serv.local. IN A 20.30.40.50 ENTRY_END ; no such type STEP 11 QUERY ENTRY_BEGIN SECTION QUESTION serv.local. IN MX ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA AA SECTION QUESTION serv.local. IN MX SECTION AUTHORITY local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; no such type, empty nonterminal STEP 13 QUERY ENTRY_BEGIN SECTION QUESTION bla.local. IN MX ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA AA SECTION QUESTION bla.local. IN MX SECTION AUTHORITY local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; nxdomain with SOA STEP 15 QUERY ENTRY_BEGIN SECTION QUESTION doing.local. IN MX ENTRY_END STEP 16 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA AA NXDOMAIN SECTION QUESTION doing.local. IN MX SECTION AUTHORITY local. 5 IN SOA nobody nobody 1 2 3 4 5 ENTRY_END ; nxdomain without SOA STEP 17 QUERY ENTRY_BEGIN SECTION QUESTION doing.noso.local. IN MX ENTRY_END STEP 18 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NXDOMAIN SECTION QUESTION doing.noso.local. IN MX ENTRY_END ; positive multiple RR STEP 19 QUERY ENTRY_BEGIN SECTION QUESTION bla.bla.local. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION bla.bla.local. IN A SECTION ANSWER bla.bla.local. IN A 20.30.40.51 bla.bla.local. IN A 20.30.40.52 bla.bla.local. IN A 20.30.40.53 ENTRY_END ; second implicit transparent zone. STEP 21 QUERY ENTRY_BEGIN SECTION QUESTION b.b.implicit. IN A ENTRY_END STEP 22 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION b.b.implicit. IN A SECTION ANSWER b.b.implicit. 3600 IN A 20.30.43.50 ENTRY_END ; localhost A default STEP 30 QUERY ENTRY_BEGIN SECTION QUESTION localhost. IN A ENTRY_END STEP 31 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION localhost. IN A SECTION ANSWER localhost. 10800 IN A 127.0.0.1 ENTRY_END ; localhost AAAA default STEP 32 QUERY ENTRY_BEGIN SECTION QUESTION localhost. IN AAAA ENTRY_END STEP 33 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION localhost. IN AAAA SECTION ANSWER localhost. 10800 IN AAAA ::1 ENTRY_END ; localhost A reverse default STEP 34 QUERY ENTRY_BEGIN SECTION QUESTION 1.0.0.127.in-addr.arpa. IN PTR ENTRY_END STEP 35 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION 1.0.0.127.in-addr.arpa. IN PTR SECTION ANSWER 1.0.0.127.in-addr.arpa. 10800 IN PTR localhost. ENTRY_END ; localhost AAAA reverse default STEP 36 QUERY ENTRY_BEGIN SECTION QUESTION 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. IN PTR ENTRY_END STEP 37 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. IN PTR SECTION ANSWER 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 10800 IN PTR localhost. ENTRY_END ; blocked AS112 reverse default STEP 38 QUERY ENTRY_BEGIN SECTION QUESTION 1.0.0.10.in-addr.arpa. IN PTR ENTRY_END STEP 39 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NXDOMAIN SECTION QUESTION 1.0.0.10.in-addr.arpa. IN PTR SECTION AUTHORITY 10.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800 ENTRY_END ; refuse zone STEP 40 QUERY ENTRY_BEGIN SECTION QUESTION www.refuse.top. IN A ENTRY_END STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA REFUSED SECTION QUESTION www.refuse.top. IN A ENTRY_END ; deny zone STEP 42 QUERY ENTRY_BEGIN SECTION QUESTION www.deny.top. IN A ENTRY_END ; no answer is checked at exit of testbound. ; redirect zone apex STEP 50 QUERY ENTRY_BEGIN SECTION QUESTION redirect.top. IN A ENTRY_END STEP 51 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NOERROR SECTION QUESTION redirect.top. IN A SECTION ANSWER redirect.top. IN A 20.30.40.54 ENTRY_END ; redirect zone STEP 52 QUERY ENTRY_BEGIN SECTION QUESTION www.redirect.top. IN A ENTRY_END STEP 53 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NOERROR SECTION QUESTION www.redirect.top. IN A SECTION ANSWER www.redirect.top. IN A 20.30.40.54 ENTRY_END ; always_null zone STEP 60 QUERY ENTRY_BEGIN SECTION QUESTION null.top. IN A ENTRY_END STEP 61 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NOERROR SECTION QUESTION null.top. IN A SECTION ANSWER null.top. IN A 0.0.0.0 ENTRY_END ; always_null zone AAAA STEP 62 QUERY ENTRY_BEGIN SECTION QUESTION foo.null.top. IN AAAA ENTRY_END STEP 63 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NOERROR SECTION QUESTION foo.null.top. IN AAAA SECTION ANSWER foo.null.top. IN AAAA ::0 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ldnsrr.c10000644000175000017500000360432714010434640017317 0ustar wouterwouter000006000100015180004001610C726F6F742D73657276657273036E657400056E73746C640C766572697369676E2D67727303636F6D00780B66AC000007080000038400093A8000015180 . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2014013100 1800 900 604800 86400 00002E0001000151800093000608000001518052F4220052EAD970837700478E8A50AA07BA6A9D0F14B41EEA65CC4B2AC9131BEF3E451FCF6B663134D7CEE925EEE2D1129727E3E7B6D430CFCC562340EF36306FA985B3DEA91AF6A92EE7A9D96DCE333AB647ED7F6C1DC61B0B2ACADD3ABBCD97695539ECC3163DD81A2552F117FEE63A908F2EAB844D47B5CFC96F83816C0EAADA35970B2F91AC5E9557 . 86400 IN RRSIG SOA 8 0 86400 20140207000000 20140130230000 33655 . R46KUKoHumqdDxS0HuplzEsqyRMb7z5FH89rZjE0187pJe7i0RKXJ+PnttQwz8xWI0DvNjBvqYWz3qka9qku56nZbc4zOrZH7X9sHcYbCyrK3Tq7zZdpVTnswxY92BolUvEX/uY6kI8uq4RNR7XPyW+DgWwOqto1lwsvkaxelVc= ;{id = 33655} 00002E00010007E9000093000208000007E90052F4220052EAD97083770008D9E7FDDF630E8DA8E4ACAF8F6248129175F2BD1993D6C23F264C459478DA8EF4451ED6F33833ACDBD778762C7C7BD51893E0330827BDACC52D79B9749F9765908F500BF11ED76CBA951BDF90A1003B7FC9C53A923DA88D5F101A1558B1F2299A4D5189A87539056973A34FEFB51FC33CBE949487EB6F0C2DE12F8023C13A33 . 518400 IN RRSIG NS 8 0 518400 20140207000000 20140130230000 33655 . CNnn/d9jDo2o5Kyvj2JIEpF18r0Zk9bCPyZMRZR42o70RR7W8zgzrNvXeHYsfHvVGJPgMwgnvazFLXm5dJ+XZZCPUAvxHtdsupUb35ChADt/ycU6kj2ojV8QGhVYsfIpmk1Riah1OQVpc6NP77Ufwzy+lJSH628MLeEvgCPBOjM= ;{id = 33655} 00002E00010002A3000113003008000002A30052FEADFF52EAE7804A5C0009ED79DF2809D3A558F25A02E0D5DDC819EE65E04C9B923D021F6CE483599E31E4969BCCD471EB076C11C4CB79D6B07E22FFB895F123CA0A1200029B4064C0EA7DE630AB7A5A87DA3D9C127957A03808C74894CE5B6C31F16E5FC00DD1642394139C6D8354C1AE633FBD78A9DA8E6E648EDA737319BCA0A84DF6388784A2DDAA116B9538EEDA457C547B950B52B64592FED11E2BFC8058AB35B76495FB5DADA641BC2117ED93C14739EAC32007A7A4967C293129E5982DEC37246218BB7925E31FE0DDF52F13735E20F7723ED1AD7E05CA55CD8365E08287279BE4B940A3E9619374510586A42E7761DAC457074769EAD77806E7875B65D073E5F8EB478AE9AD . 172800 IN RRSIG DNSKEY 8 0 172800 20140214235959 20140131000000 19036 . Ce153ygJ06VY8loC4NXdyBnuZeBMm5I9Ah9s5INZnjHklpvM1HHrB2wRxMt51rB+Iv+4lfEjygoSAAKbQGTA6n3mMKt6WofaPZwSeVegOAjHSJTOW2wx8W5fwA3RZCOUE5xtg1TBrmM/vXip2o5uZI7ac3MZvKCoTfY4h4Si3aoRa5U47tpFfFR7lQtStkWS/tEeK/yAWKs1t2SV+12tpkG8IRftk8FHOerDIAenpJZ8KTEp5Zgt7DckYhi7eSXjH+Dd9S8Tc14g93I+0a1+BcpVzYNl4IKHJ5vkuUCj6WGTdFEFhqQud2HaxFcHR2nq13gG54dbZdBz5fjrR4rprQ== ;{id = 19036} 00002E0001000151800093002F08000001518052F4220052EAD97083770092D2FF7C7CC0D41E1C07729F6B58E5DB8FC9DA8D385FA84172693969C16E2D723CED40F1BBA513F4079EEA1324899D61CF2F01DFB568C288FF632F639A4905A353420AB993D0DE5BB010962ADE567E5C0C487F3F91B72A143BAD8A0DE54E966490D33CF08595CB1287A185E3660AEC728AF6274E7EE8475FA4892732C317FE70 . 86400 IN RRSIG NSEC 8 0 86400 20140207000000 20140130230000 33655 . ktL/fHzA1B4cB3Kfa1jl24/J2o04X6hBcmk5acFuLXI87UDxu6UT9Aee6hMkiZ1hzy8B37Vowoj/Yy9jmkkFo1NCCrmT0N5bsBCWKt5WflwMSH8/kbcqFDutig3lTpZkkNM88IWVyxKHoYXjZgrscor2J05+6EdfpIknMsMX/nA= ;{id = 33655} 00000200010007E900001401610C726F6F742D73657276657273036E657400 . 518400 IN NS a.root-servers.net. 00000200010007E900001401620C726F6F742D73657276657273036E657400 . 518400 IN NS b.root-servers.net. 00000200010007E900001401630C726F6F742D73657276657273036E657400 . 518400 IN NS c.root-servers.net. 00000200010007E900001401640C726F6F742D73657276657273036E657400 . 518400 IN NS d.root-servers.net. 00000200010007E900001401650C726F6F742D73657276657273036E657400 . 518400 IN NS e.root-servers.net. 00000200010007E900001401660C726F6F742D73657276657273036E657400 . 518400 IN NS f.root-servers.net. 00000200010007E900001401670C726F6F742D73657276657273036E657400 . 518400 IN NS g.root-servers.net. 00000200010007E900001401680C726F6F742D73657276657273036E657400 . 518400 IN NS h.root-servers.net. 00000200010007E900001401690C726F6F742D73657276657273036E657400 . 518400 IN NS i.root-servers.net. 00000200010007E9000014016A0C726F6F742D73657276657273036E657400 . 518400 IN NS j.root-servers.net. 00000200010007E9000014016B0C726F6F742D73657276657273036E657400 . 518400 IN NS k.root-servers.net. 00000200010007E9000014016C0C726F6F742D73657276657273036E657400 . 518400 IN NS l.root-servers.net. 00000200010007E9000014016D0C726F6F742D73657276657273036E657400 . 518400 IN NS m.root-servers.net. 00003000010002A30000880100030803010001BF2C53AA5B60C5916E446712E119C3D3528ABEF4ED390E705F942F55E22B834324EBD74725F5F79026E5D43B6D19E7BB2499DDD69FDFBBEF8D4521B88594010E2CB61B7C9C97D8C554170D88D2A461F923A1DFFF409912834FE9C36FAD0EC01662A49AFD34C561312908DBBE744F2386EAA4CC2D1D5CE7E96C9B059EA4BAA103 . 172800 IN DNSKEY 256 3 8 AwEAAb8sU6pbYMWRbkRnEuEZw9NSir707TkOcF+UL1XiK4NDJOvXRyX195Am5dQ7bRnnuySZ3daf37vvjUUhuIWUAQ4stht8nJfYxVQXDYjSpGH5I6Hf/0CZEoNP6cNvrQ7AFmKkmv00xWExKQjbvnRPI4bqpMwtHVzn6WybBZ6kuqED ;{id = 33655 (zsk), size = 1024b} 00003000010002A30001080101030803010001A80020A95566BA42E886BB804CDA84E47EF56DBD7AEC612615552CEC906D2116D0EF207028C51554144DFEAFE7C7CB8F005DD18234133AC0710A81182CE1FD14AD2283BC83435F9DF2F6313251931A176DF0DA51E54F42E604860DFB359580250F559CC543C4FFD51CBE3DE8CFD06719237F9FC47EE729DA06835FA452E825E9A18EBC2ECBCF563474652C33CF56A9033BCDF5D973121797EC8089041B6E03A1B72D0A735B984E03687309332324F27C2DBA85E9DB15E83A0143382E974B0621C18E625ECEC907577D9E7BADE95241A81EBBE8A901D4D3276E40B114C0A2E6FC38D19C2E6AAB02644B2813F575FC21601E0DEE49CD9EE96A43103E524D62873D . 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ;{id = 19036 (ksk), size = 2048b} 00002F000100015180000D02616300000722000000000380 . 86400 IN NSEC ac. NS SOA RRSIG NSEC DNSKEY 02616300000200010002A300000A0161036E696302616300 ac. 172800 IN NS a.nic.ac. 02616300000200010002A300000C0161046E733133036E657400 ac. 172800 IN NS a.ns13.net. 02616300000200010002A300000A0162036E696302616300 ac. 172800 IN NS b.nic.ac. 02616300000200010002A300000A0162036E696302696F00 ac. 172800 IN NS b.nic.io. 02616300000200010002A300000C0162046E733133036E657400 ac. 172800 IN NS b.ns13.net. 02616300000200010002A3000016036E73310C636F6D6D756E697479646E73036E657400 ac. 172800 IN NS ns1.communitydns.net. 02616300000200010002A300000F036E73330369636202636F02756B00 ac. 172800 IN NS ns3.icb.co.uk. 02616300002B0001000151800018384307013884DE2E920F38E01B659CC5F37B6749BB0DC818 ac. 86400 IN DS 14403 7 1 3884DE2E920F38E01B659CC5F37B6749BB0DC818 02616300002B000100015180002438430702584BCEE9B917FC92AFBDD0FC8AF12AB31B3A7B0754894688DA3C57F5CA7D8E56 ac. 86400 IN DS 14403 7 2 584BCEE9B917FC92AFBDD0FC8AF12AB31B3A7B0754894688DA3C57F5CA7D8E56 02616300002E0001000151800093002B08010001518052F4220052EAD9708377009CC1F49D46439997EAB609D6138AF96D636CA5DDFE6535CB1115533DE83EF60480A05E755D73A2385D37F74B0DF894F3AF9BD7F9119585542E5E0A5FAC4F15ED7D3648F45C673707FD0D9A3F830442274E0FB70C5089F78317D49EF7F4322F8E1CACE15816985D4BED848DF419A8134D524D0B1A80D49D714E45FF13315CE002 ac. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nMH0nUZDmZfqtgnWE4r5bWNspd3+ZTXLERVTPeg+9gSAoF51XXOiOF0390sN+JTzr5vX+RGVhVQuXgpfrE8V7X02SPRcZzcH/Q2aP4MEQidOD7cMUIn3gxfUnvf0Mi+OHKzhWBaYXUvthI30GagTTVJNCxqA1J1xTkX/EzFc4AI= ;{id = 33655} 02616300002E0001000151800093002F08010001518052F4220052EAD9708377008841DEC1E224B319C4C2123BA7B5892989C00283E3A64499D1FC434E3BD92298931F896AAC8D01AC0DE82C954946A8DDB66EAB25FA19883322AFD9E177C101ACB6C3D4CFBB106950BA8BB921C7448C14B2EDA5D651CC5778A8E4E8B396053D661519575679735E042EFF36262A7F1E4AE2471C4A2127DD494C9150D9B4222785 ac. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iEHeweIksxnEwhI7p7WJKYnAAoPjpkSZ0fxDTjvZIpiTH4lqrI0BrA3oLJVJRqjdtm6rJfoZiDMir9nhd8EBrLbD1M+7EGlQuou5IcdEjBSy7aXWUcxXeKjk6LOWBT1mFRlXVnlzXgQu/zYmKn8eSuJHHEohJ91JTJFQ2bQiJ4U= ;{id = 33655} 02616300002F00010001518000110761636164656D79000006200000000013 ac. 86400 IN NSEC academy. NS DS RRSIG NSEC 0161036E696302616300000100010002A300000440FB1FB1 a.nic.ac. 172800 IN A 64.251.31.177 0162036E696302616300000100010002A30000044E689125 b.nic.ac. 172800 IN A 78.104.145.37 0761636164656D7900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 academy. 172800 IN NS demand.beta.aridns.net.au. 0761636164656D7900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 academy. 172800 IN NS demand.alpha.aridns.net.au. 0761636164656D7900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 academy. 172800 IN NS demand.delta.aridns.net.au. 0761636164656D7900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 academy. 172800 IN NS demand.gamma.aridns.net.au. 0761636164656D7900002B0001000151800024B7B80802E2A2DAE3CC55E8CE27E9AEA6217BDA4A835BF2270C40749AD278E9A9B4ABA132 academy. 86400 IN DS 47032 8 2 E2A2DAE3CC55E8CE27E9AEA6217BDA4A835BF2270C40749AD278E9A9B4ABA132 0761636164656D7900002E0001000151800093002B08010001518052F4220052EAD970837700437ED23B0126821535C21598FEB507EE0F3B80ADC38BCCC8DA7F3BA8C35A95A9CFBA92EADD0F9B4CC0456FFC853C22122BF4E2FD2C24497EE9467B23FC9B094D6F0F252B5B02704459A05C1E9900C19C7ECFC6046248298CD39BB478643816C2605FDE884346763EA690F045B875481CD8C326F7455974C8797BF3A8FE312F7B academy. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Q37SOwEmghU1whWY/rUH7g87gK3Di8zI2n87qMNalanPupLq3Q+bTMBFb/yFPCISK/Ti/SwkSX7pRnsj/JsJTW8PJStbAnBEWaBcHpkAwZx+z8YEYkgpjNObtHhkOBbCYF/eiENGdj6mkPBFuHVIHNjDJvdFWXTIeXvzqP4xL3s= ;{id = 33655} 0761636164656D7900002E0001000151800093002F08010001518052F4220052EAD9708377008D91FC4ACFA37EC9F4314F59FCB7136F637AA83F15C2D5621412F9CEAAD77C0EC045D47BD1475C18456F400022BCB5032CD594D5D8DC26B03B44751E87177695D605609CF2C26E706B01490CACA37A331B5362E0B840AC75783EF21B0D51194B144531852908B4F17A222A3470F54ACA829911D67DB2BF9B78FC1FA63936CE86 academy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jZH8Ss+jfsn0MU9Z/LcTb2N6qD8VwtViFBL5zqrXfA7ARdR70UdcGEVvQAAivLUDLNWU1djcJrA7RHUehxd2ldYFYJzywm5wawFJDKyjejMbU2LguECsdXg+8hsNURlLFEUxhSkItPF6Iio0cPVKyoKZEdZ9sr+bePwfpjk2zoY= ;{id = 33655} 0761636164656D7900002F000100015180000C026164000006200000000013 academy. 86400 IN NSEC ad. NS DS RRSIG NSEC 02616400000200010002A300000E026164026E73036E696302657300 ad. 172800 IN NS ad.ns.nic.es. 02616400000200010002A300001B026164056363746C640761757468646E730472697065036E657400 ad. 172800 IN NS ad.cctld.authdns.ripe.net. 02616400000200010002A300000C036E7333036E696302667200 ad. 172800 IN NS ns3.nic.fr. 02616400000200010002A300000904646E736302616400 ad. 172800 IN NS dnsc.ad. 02616400000200010002A300000904646E736D02616400 ad. 172800 IN NS dnsm.ad. 02616400000200010002A3000010066E732D65787403697363036F726700 ad. 172800 IN NS ns-ext.isc.org. 02616400002F000100015180000C026165000006200000000003 ad. 86400 IN NSEC ae. NS RRSIG NSEC 02616400002E0001000151800093002F08010001518052F4220052EAD970837700893E1459747DB65F26E38A69E1A1DE4A6ECF3BF59C6A044B0BCCB483199FFD04CAD4B3608551DE023D2AD57579310D8AA7F035DE677C290E26E0BCF09CCC84B5AF5DA1400CCCB8D97B5EC6C77749683565660CF55E1310E5F10590248D262F6D6609E96083608C3C5500F47241EB9F2C5BDD84BEA2B1610D5119CA3136CE98FC ad. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iT4UWXR9tl8m44pp4aHeSm7PO/WcagRLC8y0gxmf/QTK1LNghVHeAj0q1XV5MQ2Kp/A13md8KQ4m4LzwnMyEta9doUAMzLjZe17Gx3dJaDVlZgz1XhMQ5fEFkCSNJi9tZgnpYINgjDxVAPRyQeufLFvdhL6isWENURnKMTbOmPw= ;{id = 33655} 04646E736302616400000100010002A3000004C29E4A0A dnsc.ad. 172800 IN A 194.158.74.10 04646E736302616400001C00010002A30000102A02806032FA0000000000000000000B dnsc.ad. 172800 IN AAAA 2a02:8060:32fa::b 04646E736D02616400000100010002A3000004C29E4A09 dnsm.ad. 172800 IN A 194.158.74.9 04646E736D02616400001C00010002A30000102A02806032FA0000000000000000000A dnsm.ad. 172800 IN AAAA 2a02:8060:32fa::a 02616500002F000100015180000E046165726F000006200000000003 ae. 86400 IN NSEC aero. NS RRSIG NSEC 02616500002E0001000151800093002F08010001518052F4220052EAD9708377000A4E3C90785A2678AB155CFB827F477826B2652F9B6C7F5C2397B07414677D3BA7B04812A17BA0B0474AC10C4CEB303E15D8ED601F62B617512574252E67A41D1ACFAF37E40EC73B48A86D773D252A8EA9188A2677B1ECBEFF9956A8A1E206D8B6F61EDF95C88CDD987AFBCCD4A10C04D7DB271E685EA6603FD6C3E3D4F52245 ae. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ck48kHhaJnirFVz7gn9HeCayZS+bbH9cI5ewdBRnfTunsEgSoXugsEdKwQxM6zA+FdjtYB9ithdRJXQlLmekHRrPrzfkDsc7SKhtdz0lKo6pGIomd7Hsvv+ZVqih4gbYtvYe35XIjN2YevvM1KEMBNfbJx5oXqZgP9bD49T1IkU= ;{id = 33655} 02616500000200010002A300001B026165056363746C640761757468646E730472697065036E657400 ae. 172800 IN NS ae.cctld.authdns.ripe.net. 02616500000200010002A300000E036E7331056165646E7302616500 ae. 172800 IN NS ns1.aedns.ae. 02616500000200010002A300000E036E7332056165646E7302616500 ae. 172800 IN NS ns2.aedns.ae. 02616500000200010002A300001004736563330561706E6963036E657400 ae. 172800 IN NS sec3.apnic.net. 02616500000200010002A300001006736E732D706203697363036F726700 ae. 172800 IN NS sns-pb.isc.org. 02616500000200010002A3000014096E736578742D706368056165646E7302616500 ae. 172800 IN NS nsext-pch.aedns.ae. 036E7331056165646E7302616500000100010002A30000044F627849 ns1.aedns.ae. 172800 IN A 79.98.120.73 036E7332056165646E7302616500000100010002A30000044F627949 ns2.aedns.ae. 172800 IN A 79.98.121.73 096E736578742D706368056165646E7302616500000100010002A3000004C7048901 nsext-pch.aedns.ae. 172800 IN A 199.4.137.1 096E736578742D706368056165646E7302616500001C00010002A300001020010500007D00000000000000000001 nsext-pch.aedns.ae. 172800 IN AAAA 2001:500:7d::1 036E7331067561656E696302616500000100010002A3000004D52A00E2 ns1.uaenic.ae. 172800 IN A 213.42.0.226 036E7332067561656E696302616500000100010002A3000004C3E500BA ns2.uaenic.ae. 172800 IN A 195.229.0.186 046165726F00000200010002A300001A026130046165726F0B6166696C6961732D6E737404696E666F00 aero. 172800 IN NS a0.aero.afilias-nst.info. 046165726F00000200010002A300001A026132046165726F0B6166696C6961732D6E737404696E666F00 aero. 172800 IN NS a2.aero.afilias-nst.info. 046165726F00000200010002A3000019026230046165726F0B6166696C6961732D6E7374036F726700 aero. 172800 IN NS b0.aero.afilias-nst.org. 046165726F00000200010002A3000019026232046165726F0B6166696C6961732D6E7374036F726700 aero. 172800 IN NS b2.aero.afilias-nst.org. 046165726F00000200010002A300001A026330046165726F0B6166696C6961732D6E737404696E666F00 aero. 172800 IN NS c0.aero.afilias-nst.info. 046165726F00000200010002A3000019026430046165726F0B6166696C6961732D6E7374036F726700 aero. 172800 IN NS d0.aero.afilias-nst.org. 046165726F00000200010002A300000F036E73320673776974636802636800 aero. 172800 IN NS ns2.switch.ch. 046165726F00000200010002A300000E036E7335056B6E69707002646500 aero. 172800 IN NS ns5.knipp.de. 046165726F00000200010002A300000F04646E73370564656E696302646500 aero. 172800 IN NS dns7.denic.de. 046165726F00002F000100015180000C026166000006200000000003 aero. 86400 IN NSEC af. NS RRSIG NSEC 046165726F00002E0001000151800093002F08010001518052F4220052EAD9708377004B4FF04EA00E778A54ABBC0CEDEAF604CFE2A08F8AFCE94AC8E6F1B2952B8D005CDB6B3B7E8B83AFA2D1A80BA379835DAC58E841EFD8C74C017E46C45FF2A6CD67D210080D05285FEC0DF7F7108B1B9E8071984770C7A6A3E930779C18D2B4803822E944C5231F4442ED8CF0F115F99B52369BC13039F7DDB4DC5F753FEEEFA7 aero. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S0/wTqAOd4pUq7wM7er2BM/ioI+K/OlKyObxspUrjQBc22s7fouDr6LRqAujeYNdrFjoQe/Yx0wBfkbEX/KmzWfSEAgNBShf7A339xCLG56AcZhHcMemo+kwd5wY0rSAOCLpRMUjH0RC7Yzw8RX5m1I2m8EwOffdtNxfdT/u76c= ;{id = 33655} 02616600000200010002A3000013026E7307616E7963617374036E696302616600 af. 172800 IN NS ns.anycast.nic.af. 02616600000200010002A3000010036166310664796E746C64036E657400 af. 172800 IN NS af1.dyntld.net. 02616600000200010002A3000010036166330664796E746C64036E657400 af. 172800 IN NS af3.dyntld.net. 02616600002B00010001518000240E6B080256C77864A2CD726F252634C8804A2AF33EA2CE70C49091E08C223BD2BB33CF5C af. 86400 IN DS 3691 8 2 56C77864A2CD726F252634C8804A2AF33EA2CE70C49091E08C223BD2BB33CF5C 02616600002E0001000151800093002B08010001518052F4220052EAD9708377007673372BC1FFC5E66FE5089628CB457A6CF4235F07C2165F7690ABFF8DCF4B1B0F0E59B585A0C60B357956BF7316A6D6E065924A71566C0E9289F4B3B2AF6B797740C8907B622836CBC5FEF13EE91273F3208BA33A3C4F56004C98E465D325CF3DA6B1BE3F59CA283EBF45F8F7AB6CA4E23A42D8FBA18FE948568133F85AB440 af. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dnM3K8H/xeZv5QiWKMtFemz0I18HwhZfdpCr/43PSxsPDlm1haDGCzV5Vr9zFqbW4GWSSnFWbA6SifSzsq9reXdAyJB7Yig2y8X+8T7pEnPzIIujOjxPVgBMmORl0yXPPaaxvj9Zyig+v0X496tspOI6Qtj7oY/pSFaBM/hatEA= ;{id = 33655} 02616600002E0001000151800093002F08010001518052F4220052EAD97083770081FAD8263AF7AA686482A10F49AC042EAC03531134EA84DEA85D59AD251BF733FCCE0A34C68C07C5A18925D2225DD2D1649A3EBE4C16AFBFC4C916AE487575CAF3A47B781AA2038397D4F47D9C88941A9F944E30321F3BE67E05C9F0A9DCFAE46530638D42BC522FAEF331DFEBFA7BCA12399D65B037F4E37E680B17CA9A3031 af. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . gfrYJjr3qmhkgqEPSawELqwDUxE06oTeqF1ZrSUb9zP8zgo0xowHxaGJJdIiXdLRZJo+vkwWr7/EyRauSHV1yvOke3gaogODl9T0fZyIlBqflE4wMh875n4FyfCp3PrkZTBjjUK8Ui+u8zHf6/p7yhI5nWWwN/TjfmgLF8qaMDE= ;{id = 33655} 02616600002F000100015180000C026167000006200000000013 af. 86400 IN NSEC ag. NS DS RRSIG NSEC 026E7307616E7963617374036E696302616600000100010002A3000004CC3DD80D ns.anycast.nic.af. 172800 IN A 204.61.216.13 026E7307616E7963617374036E696302616600001C00010002A3000010200105000014601300AD000000000001 ns.anycast.nic.af. 172800 IN AAAA 2001:500:14:6013:ad::1 02616700000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 ag. 172800 IN NS a0.cctld.afilias-nst.info. 02616700000200010002A300001B026132056363746C640B6166696C6961732D6E737404696E666F00 ag. 172800 IN NS a2.cctld.afilias-nst.info. 02616700000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 ag. 172800 IN NS b0.cctld.afilias-nst.org. 02616700000200010002A300001A026232056363746C640B6166696C6961732D6E7374036F726700 ag. 172800 IN NS b2.cctld.afilias-nst.org. 02616700000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 ag. 172800 IN NS c0.cctld.afilias-nst.info. 02616700000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 ag. 172800 IN NS d0.cctld.afilias-nst.org. 02616700002B0001000151800018D968070157F9FF89CE3A02AE33EC017A7C83ED54D925AA13 ag. 86400 IN DS 55656 7 1 57F9FF89CE3A02AE33EC017A7C83ED54D925AA13 02616700002B0001000151800024D9680702B8DC00C070D5BFC5C1C3BA08E5205A1E7F15EABFBFD6359D11E0E62D2FFFA57F ag. 86400 IN DS 55656 7 2 B8DC00C070D5BFC5C1C3BA08E5205A1E7F15EABFBFD6359D11E0E62D2FFFA57F 02616700002E0001000151800093002B08010001518052F4220052EAD970837700323A6C24A2D5E94126A6E20C61DE39E5C680ABACB6AE0ABCB10830AEAA01244AAB65DC02009B52EF8FA5BCE15EB16D908448E67B3FCB53E328D04F3CEC815117E42C12FC30BD76F6395C968D666E9C793104592F0F4ED8BE06264C1A5040CF23455895051CA9D4ADACBD88DFFD40CC7B4CB943002048E934879CF078FEB522DE ag. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MjpsJKLV6UEmpuIMYd455caAq6y2rgq8sQgwrqoBJEqrZdwCAJtS74+lvOFesW2QhEjmez/LU+Mo0E887IFRF+QsEvwwvXb2OVyWjWZunHkxBFkvD07YvgYmTBpQQM8jRViVBRyp1K2svYjf/UDMe0y5QwAgSOk0h5zweP61It4= ;{id = 33655} 02616700002E0001000151800093002F08010001518052F4220052EAD970837700AF14A7A7EA92F4F7571D45B7AEB399343225BC30027D8663315BD95183328670AE78FEEDB365F45048CBCE0CE7E82F287E0B4C5136AAA43D5067534DACED3251074801584B37E6AD86D5E7A5C6A908CC9AE73610A996C866889586572CBD98F36AC494BCA467BEA35BD5426CFAEF4CC62CE2084B34CEEA3CDFADD2799EA52233 ag. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rxSnp+qS9PdXHUW3rrOZNDIlvDACfYZjMVvZUYMyhnCueP7ts2X0UEjLzgzn6C8ofgtMUTaqpD1QZ1NNrO0yUQdIAVhLN+athtXnpcapCMya5zYQqZbIZoiVhlcsvZjzasSUvKRnvqNb1UJs+u9MxiziCEs0zuo8363SeZ6lIjM= ;{id = 33655} 02616700002F0001000151800010066167656E6379000006200000000013 ag. 86400 IN NSEC agency. NS DS RRSIG NSEC 066167656E637900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 agency. 172800 IN NS demand.beta.aridns.net.au. 066167656E637900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 agency. 172800 IN NS demand.alpha.aridns.net.au. 066167656E637900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 agency. 172800 IN NS demand.delta.aridns.net.au. 066167656E637900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 agency. 172800 IN NS demand.gamma.aridns.net.au. 066167656E637900002B0001000151800024AA3E080250CC5CB5EC1AFFF1E70ED524F6DDD4F7978D15B4041FA7C5E5F854343967DDCF agency. 86400 IN DS 43582 8 2 50CC5CB5EC1AFFF1E70ED524F6DDD4F7978D15B4041FA7C5E5F854343967DDCF 066167656E637900002E0001000151800093002B08010001518052F4220052EAD970837700ABD7480D6E79FAE74EEBE85C30990B7B23239BB9E25023D86ECB542ED1DBBFF69C8E25793F6697AFFF20A1C71F494A808CFA7FD47E85EABC08D4EF6595AF70D9A19E62F2E97F12BB311086319CF5652BFBAA2CF03FD388D5313B3A050DFA0CD64D9A32A17DAE1300526D72C543C332AA5C1A20CAEBA5ECEF19D264ABED583F66 agency. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . q9dIDW55+udO6+hcMJkLeyMjm7niUCPYbstULtHbv/acjiV5P2aXr/8goccfSUqAjPp/1H6F6rwI1O9lla9w2aGeYvLpfxK7MRCGMZz1ZSv7qizwP9OI1TE7OgUN+gzWTZoyoX2uEwBSbXLFQ8MyqlwaIMrrpezvGdJkq+1YP2Y= ;{id = 33655} 066167656E637900002E0001000151800093002F08010001518052F4220052EAD970837700B07C442D2A508FAB45EADA734C69E5CB1F85A56245A2FA4A9B14089AF656964D6BE849A7FF67DDD0374B88B76DB1338874C8BBBC56C7D720E33006779A5EE208431DE6CF3F473FA6BAE739C1D9589439FDC9A114044511CC7A5D6D01056126C133B83EAD9B99A30B35FDF4B8FE05CE526151CD9D52CEF6F4B7BA60061179E6E9 agency. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sHxELSpQj6tF6tpzTGnlyx+FpWJFovpKmxQImvZWlk1r6Emn/2fd0DdLiLdtsTOIdMi7vFbH1yDjMAZ3ml7iCEMd5s8/Rz+muuc5wdlYlDn9yaEUBEURzHpdbQEFYSbBM7g+rZuZows1/fS4/gXOUmFRzZ1Szvb0t7pgBhF55uk= ;{id = 33655} 066167656E637900002F000100015180000C026169000006200000000013 agency. 86400 IN NSEC ai. NS DS RRSIG NSEC 02616900000200010002A300000E036E7331047061697203636F6D00 ai. 172800 IN NS ns1.pair.com. 02616900000200010002A3000011036E7332086F666673686F726502616900 ai. 172800 IN NS ns2.offshore.ai. 02616900000200010002A300000A0577686F697302616900 ai. 172800 IN NS whois.ai. 02616900002F000100015180000C02616C000006200000000003 ai. 86400 IN NSEC al. NS RRSIG NSEC 02616900002E0001000151800093002F08010001518052F4220052EAD97083770054E669C23DB965B7642D82C911C622975CD0087071881E7A1FFC34B2E1A0AAB5DB5F1AC443BD0374C1C7CF041D5DEE39552B6AB452399592D69B34BC433BDDC198FE7D35CD611B87CA3471DE55EF1293CA31DD459272EAD7193FFB846AE12490A64E879358AFA7C6C35B26144647155CF5AAED5A0F22DAB4149956D536DB67E2 ai. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VOZpwj25ZbdkLYLJEcYil1zQCHBxiB56H/w0suGgqrXbXxrEQ70DdMHHzwQdXe45VStqtFI5lZLWmzS8QzvdwZj+fTXNYRuHyjRx3lXvEpPKMd1FknLq1xk/+4Rq4SSQpk6Hk1ivp8bDWyYURkcVXPWq7VoPItq0FJlW1TbbZ+I= ;{id = 33655} 036E7332086F666673686F726502616900000100010002A30000046CA671F5 ns2.offshore.ai. 172800 IN A 108.166.113.245 0577686F697302616900000100010002A3000004D13B7701 whois.ai. 172800 IN A 209.59.119.1 02616C00000200010002A300001B02616C056363746C640761757468646E730472697065036E657400 al. 172800 IN NS al.cctld.authdns.ripe.net. 02616C00000200010002A300000C036E7331036E696302616C00 al. 172800 IN NS ns1.nic.al. 02616C00000200010002A300000D037269700370736703636F6D00 al. 172800 IN NS rip.psg.com. 02616C00000200010002A3000013056E732D616C046973746903636E7202697400 al. 172800 IN NS ns-al.isti.cnr.it. 02616C00000200010002A300000F076D756E6E617269026F7A02617500 al. 172800 IN NS munnari.oz.au. 02616C00002F000100015180000C02616D000006200000000003 al. 86400 IN NSEC am. NS RRSIG NSEC 02616C00002E0001000151800093002F08010001518052F4220052EAD970837700AE04A6639508A80C1FB2C5643338D3D7250964DA7AD73923341C871996F825559D50AFE08CA2C3718348930F28FED4961E14FB6174C560F8D681DADBDB7414FF10285EC1C6E9DD061A33B6351451BAA19375F61591175E5308726B7765F1B87931ECA20E05EF8803E57A5D61C96E74513165A211AD5362E9989A0AA410ED010E al. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rgSmY5UIqAwfssVkMzjT1yUJZNp61zkjNByHGZb4JVWdUK/gjKLDcYNIkw8o/tSWHhT7YXTFYPjWgdrb23QU/xAoXsHG6d0GGjO2NRRRuqGTdfYVkRdeUwhya3dl8bh5MeyiDgXviAPlel1hyW50UTFlohGtU2LpmJoKpBDtAQ4= ;{id = 33655} 036E7331036E696302616C00000100010002A3000004C20195E6 ns1.nic.al. 172800 IN A 194.1.149.230 02616D00000200010002A300001B02616D056363746C640761757468646E730472697065036E657400 am. 172800 IN NS am.cctld.authdns.ripe.net. 02616D00000200010002A300000D037269700370736703636F6D00 am. 172800 IN NS rip.psg.com. 02616D00000200010002A300001604666F726B0373746807646E736E6F6465036E657400 am. 172800 IN NS fork.sth.dnsnode.net. 02616D00000200010002A3000012066E732D63646E05616D6E6963036E657400 am. 172800 IN NS ns-cdn.amnic.net. 02616D00000200010002A3000012066E732D70726905616D6E6963036E657400 am. 172800 IN NS ns-pri.amnic.net. 02616D00000200010002A300001006736E732D706203697363036F726700 am. 172800 IN NS sns-pb.isc.org. 02616D00002B0001000151800024C7C50702F14D6ACFC410DE94D18F63A7EDC2779DE70C1D5E9AF0E0EFB4687CC3522E7F4F am. 86400 IN DS 51141 7 2 F14D6ACFC410DE94D18F63A7EDC2779DE70C1D5E9AF0E0EFB4687CC3522E7F4F 02616D00002E0001000151800093002B08010001518052F4220052EAD97083770017C337A9C5FED702F8AECBC86783133A443EBB8CF50B88E7FCC3AC71442119EB152596FF34AD914BC0C47CBC0F54B165297D9C7FC80D3DC7F50A7663AF434CD1E5BB9B8E64DEF1810D7AE861381EBC020E631D365184FB222606B6CD026A00B4EB031F30BEFC4AFDA832FB2CA3D7FADF982ACDA066D2EDAE0031AA51CCE3778E am. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . F8M3qcX+1wL4rsvIZ4MTOkQ+u4z1C4jn/MOscUQhGesVJZb/NK2RS8DEfLwPVLFlKX2cf8gNPcf1CnZjr0NM0eW7m45k3vGBDXroYTgevAIOYx02UYT7IiYGts0CagC06wMfML78Sv2oMvsso9f635gqzaBm0u2uADGqUczjd44= ;{id = 33655} 02616D00002E0001000151800093002F08010001518052F4220052EAD970837700AB79A7CDD13A573928405B394139391B5F0FF190FE7A8B9958AFE862AE2C29207579F5B81664C584CE7C820A0FF19F8255885A5B46D050891B99C2C5C37127C846F221A90946504AF102C72002624A4B5369644466ECA67AB1D8779664474BA280D98E7F59F04A769BA546036301F22175AAE98A9CB40846515D978A5B32DB87 am. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . q3mnzdE6VzkoQFs5QTk5G18P8ZD+eouZWK/oYq4sKSB1efW4FmTFhM58ggoP8Z+CVYhaW0bQUIkbmcLFw3EnyEbyIakJRlBK8QLHIAJiSktTaWREZuymerHYd5ZkR0uigNmOf1nwSnabpUYDYwHyIXWq6YqctAhGUV2Xilsy24c= ;{id = 33655} 02616D00002F000100015180000C02616E000006200000000013 am. 86400 IN NSEC an. NS DS RRSIG NSEC 02616E00000200010002A300001B02616E056363746C640761757468646E730472697065036E657400 an. 172800 IN NS an.cctld.authdns.ripe.net. 02616E00000200010002A300000C036E7330026A61036E657400 an. 172800 IN NS ns0.ja.net. 02616E00000200010002A300001007656E67696E653003756E6102616E00 an. 172800 IN NS engine0.una.an. 02616E00000200010002A300001007656E67696E653203756E6102616E00 an. 172800 IN NS engine2.una.an. 02616E00000200010002A300001007656E67696E653303756E6102616E00 an. 172800 IN NS engine3.una.an. 02616E00000200010002A3000014076B61647573686907637572696E666F02616E00 an. 172800 IN NS kadushi.curinfo.an. 02616E00000200010002A30000180B6E7330312D73657276657207637572696E666F02616E00 an. 172800 IN NS ns01-server.curinfo.an. 02616E00002F000100015180000C02616F000006200000000003 an. 86400 IN NSEC ao. NS RRSIG NSEC 02616E00002E0001000151800093002F08010001518052F4220052EAD97083770014D2D6C1C0593553C3B0BFBBD6FAAC3BD334FD52130AB0D7AD05C56AE220A9AC94F9EE911152F826BCC6C419F34A0C1928EA83ACA547E9CD33E4E47F8C3073B85E9B01EBDAC3757604C033335315B58F40A7A56C6093FABEB7A0A2F5DE3A7CC49F13028D08C6E28AA17D21D7A4909E4FCF9D216975E4D1414550EC058BC9CD99 an. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FNLWwcBZNVPDsL+71vqsO9M0/VITCrDXrQXFauIgqayU+e6REVL4JrzGxBnzSgwZKOqDrKVH6c0z5OR/jDBzuF6bAevaw3V2BMAzM1MVtY9Ap6VsYJP6vregovXeOnzEnxMCjQjG4oqhfSHXpJCeT8+dIWl15NFBRVDsBYvJzZk= ;{id = 33655} 076B61647573686907637572696E666F02616E00000100010002A300000441D07A3F kadushi.curinfo.an. 172800 IN A 65.208.122.63 0B6E7330312D73657276657207637572696E666F02616E00000100010002A300000441D07A24 ns01-server.curinfo.an. 172800 IN A 65.208.122.36 07656E67696E653003756E6102616E00000100010002A3000004C81AC763 engine0.una.an. 172800 IN A 200.26.199.99 07656E67696E653203756E6102616E00000100010002A300000441AEEE64 engine2.una.an. 172800 IN A 65.174.238.100 07656E67696E653303756E6102616E00000100010002A3000004C81AC766 engine3.una.an. 172800 IN A 200.26.199.102 02616F00000200010002A300000D046E73303203646E7302616F00 ao. 172800 IN NS ns02.dns.ao. 02616F00000200010002A300000E046E733032046663636E02707400 ao. 172800 IN NS ns02.fccn.pt. 02616F00000200010002A300000E046E733033046663636E02707400 ao. 172800 IN NS ns03.fccn.pt. 02616F00000200010002A300001206617574683032026E73027575036E657400 ao. 172800 IN NS auth02.ns.uu.net. 02616F00000200010002A3000010066E732D65787403697363036F726700 ao. 172800 IN NS ns-ext.isc.org. 02616F00000200010002A30000100670686F626F73046663636E02707400 ao. 172800 IN NS phobos.fccn.pt. 02616F00002F000100015180000C026171000006200000000003 ao. 86400 IN NSEC aq. NS RRSIG NSEC 02616F00002E0001000151800093002F08010001518052F4220052EAD97083770056685624B0EA7F36ED793E34286E4FE27CA70573C1B0511A81437E33549429F080F460ABAA19F56D3BF24DD2E08B994EC4959041D5321B7EAB406A0D2435C7DF031D401FD634DD6E5C4E0A08D7B6D70E4BEC4A6C5241757D0F1E2B4C7F74456B42B365F6CA382C5586D8756C5DD60DCE1F30CDD9CC1895DF63E4A1A2870F4063 ao. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VmhWJLDqfzbteT40KG5P4nynBXPBsFEagUN+M1SUKfCA9GCrqhn1bTvyTdLgi5lOxJWQQdUyG36rQGoNJDXH3wMdQB/WNN1uXE4KCNe21w5L7EpsUkF1fQ8eK0x/dEVrQrNl9so4LFWG2HVsXdYNzh8wzdnMGJXfY+ShoocPQGM= ;{id = 33655} 046E73303203646E7302616F00000100010002A3000004C595950B ns02.dns.ao. 172800 IN A 197.149.149.11 046E73303203646E7302616F00001C00010002A30000102C0FF82800020000000000000000000B ns02.dns.ao. 172800 IN AAAA 2c0f:f828:2::b 02617100000200010002A300000C036E733103646E7302617100 aq. 172800 IN NS ns1.dns.aq. 02617100000200010002A300001604666F726B0373746807646E736E6F6465036E657400 aq. 172800 IN NS fork.sth.dnsnode.net. 02617100000200010002A3000011046E73393903646E73036E6574026E7A00 aq. 172800 IN NS ns99.dns.net.nz. 02617100000200010002A300001006736E732D706203697363036F726700 aq. 172800 IN NS sns-pb.isc.org. 02617100002F000100015180000C026172000006200000000003 aq. 86400 IN NSEC ar. NS RRSIG NSEC 02617100002E0001000151800093002F08010001518052F4220052EAD97083770058CC1223590D0B5CF538C61BD8EBBD91E579624FDA414D0BAF2ADE9D65F0905A5856DB196E6696B27586DCC0A25C214430663EB2FA3192EDBAF47A054638EE0F47B46E96A7577CD81CB882457A012B82A9D2E2261146A4BD1557AFC261BC16EF8537B707711819C9C35F0B74A00FF801CFF15C7F8DA38E00521B651DCB818E20 aq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WMwSI1kNC1z1OMYb2Ou9keV5Yk/aQU0LryrenWXwkFpYVtsZbmaWsnWG3MCiXCFEMGY+svoxku269HoFRjjuD0e0bpanV3zYHLiCRXoBK4Kp0uImEUakvRVXr8JhvBbvhTe3B3EYGcnDXwt0oA/4Ac/xXH+No44AUhtlHcuBjiA= ;{id = 33655} 036E733103646E7302617100000100010002A3000004CB773884 ns1.dns.aq. 172800 IN A 203.119.56.132 02617200000200010002A300000A016103646E7302617200 ar. 172800 IN NS a.dns.ar. 02617200000200010002A300001B026172056363746C640761757468646E730472697065036E657400 ar. 172800 IN NS ar.cctld.authdns.ripe.net. 02617200000200010002A300000F036E73320673776974636802636800 ar. 172800 IN NS ns2.switch.ch. 02617200000200010002A300000A05617468656102617200 ar. 172800 IN NS athea.ar. 02617200000200010002A300000A056374696E6102617200 ar. 172800 IN NS ctina.ar. 02617200000200010002A30000150672656C617931056D65636F6E03676F7602617200 ar. 172800 IN NS relay1.mecon.gov.ar. 02617200002F000100015180000E0461727061000006200000000003 ar. 86400 IN NSEC arpa. NS RRSIG NSEC 02617200002E0001000151800093002F08010001518052F4220052EAD9708377009322567D53A3FE1916E7CA62100C04E51BD18913A378F277EAED1E0170454AEE9F8B5D35C89E04AF1185591441426C9F92ED1514F8CC4D1433B5AA52CD7FE8E28C249A3490247C0D0AFD8F1878EDB8CF9F076DD9E25B9E24A63C62435788465440FE7806B1B4974167146686EF20E014A034FFC674F6053DBC32021D54E68E7B ar. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kyJWfVOj/hkW58piEAwE5RvRiROjePJ36u0eAXBFSu6fi101yJ4ErxGFWRRBQmyfku0VFPjMTRQztapSzX/o4owkmjSQJHwNCv2PGHjtuM+fB23Z4lueJKY8YkNXiEZUQP54BrG0l0FnFGaG7yDgFKA0/8Z09gU9vDICHVTmjns= ;{id = 33655} 05617468656102617200000100010002A3000004C8106202 athea.ar. 172800 IN A 200.16.98.2 056374696E6102617200000100010002A3000004C8106111 ctina.ar. 172800 IN A 200.16.97.17 016103646E7302617200000100010002A3000004C86C9132 a.dns.ar. 172800 IN A 200.108.145.50 016103646E7302617200001C00010002A300001028010140000000000000000000000010 a.dns.ar. 172800 IN AAAA 2801:140::10 0672656C617931056D65636F6E03676F7602617200000100010002A3000004A865100A relay1.mecon.gov.ar. 172800 IN A 168.101.16.10 046172706100000200010002A300001401610C726F6F742D73657276657273036E657400 arpa. 172800 IN NS a.root-servers.net. 046172706100000200010002A300001401620C726F6F742D73657276657273036E657400 arpa. 172800 IN NS b.root-servers.net. 046172706100000200010002A300001401630C726F6F742D73657276657273036E657400 arpa. 172800 IN NS c.root-servers.net. 046172706100000200010002A300001401640C726F6F742D73657276657273036E657400 arpa. 172800 IN NS d.root-servers.net. 046172706100000200010002A300001401650C726F6F742D73657276657273036E657400 arpa. 172800 IN NS e.root-servers.net. 046172706100000200010002A300001401660C726F6F742D73657276657273036E657400 arpa. 172800 IN NS f.root-servers.net. 046172706100000200010002A300001401670C726F6F742D73657276657273036E657400 arpa. 172800 IN NS g.root-servers.net. 046172706100000200010002A300001401680C726F6F742D73657276657273036E657400 arpa. 172800 IN NS h.root-servers.net. 046172706100000200010002A300001401690C726F6F742D73657276657273036E657400 arpa. 172800 IN NS i.root-servers.net. 046172706100000200010002A3000014016B0C726F6F742D73657276657273036E657400 arpa. 172800 IN NS k.root-servers.net. 046172706100000200010002A3000014016C0C726F6F742D73657276657273036E657400 arpa. 172800 IN NS l.root-servers.net. 046172706100000200010002A3000014016D0C726F6F742D73657276657273036E657400 arpa. 172800 IN NS m.root-servers.net. 046172706100002B0001000151800018A6550801778606D9623F843F156E7D11ACBF815EB67AB516 arpa. 86400 IN DS 42581 8 1 778606D9623F843F156E7D11ACBF815EB67AB516 046172706100002B0001000151800024A6550802F28391C1ED4DC0F151EDD251A3103DCE0B9A5A251ACF6E24073771D71F3C40F9 arpa. 86400 IN DS 42581 8 2 F28391C1ED4DC0F151EDD251A3103DCE0B9A5A251ACF6E24073771D71F3C40F9 046172706100002E0001000151800093002B08010001518052F4220052EAD970837700962E8225624EB7CD47C1921E575C4C193E8EF52939D0FA6E616EC55724A72452B5EB421D9F5F9E44D2300B78BE966CE399410BD2350901218B785E06C9C838CB3D3ED23DC1F552984B4655C8047ED5DBBCCEC3DF8FB23390526155304696B801DA12C0E1B6D00EFA87ACE3F6F2B4ACE8FE91D205BC7626E4DB69258620B0C12F arpa. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . li6CJWJOt81HwZIeV1xMGT6O9Sk50PpuYW7FVySnJFK160Idn1+eRNIwC3i+lmzjmUEL0jUJASGLeF4Gycg4yz0+0j3B9VKYS0ZVyAR+1du8zsPfj7IzkFJhVTBGlrgB2hLA4bbQDvqHrOP28rSs6P6R0gW8dibk22klhiCwwS8= ;{id = 33655} 046172706100002E0001000151800093002F08010001518052F4220052EAD970837700838BB5FD433020E923E05D7FC777EFB4DE396C74EECFA820FDF695DA2412C778F8DAC9B37780B058C3F109BF09FE8CDE68DB30A172C231526288A8890E61EF743EBB1F75AE6018EF5335B3C018E352D3A3DCD8390BAD39114554A9AF8AA314BD247AAD2780601D894E775EB93A42887484263C2394B0FB2908548B68C7A61824 arpa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . g4u1/UMwIOkj4F1/x3fvtN45bHTuz6gg/faV2iQSx3j42smzd4CwWMPxCb8J/ozeaNswoXLCMVJiiKiJDmHvdD67H3WuYBjvUzWzwBjjUtOj3Ng5C605EUVUqa+KoxS9JHqtJ4BgHYlOd165OkKIdIQmPCOUsPspCFSLaMemGCQ= ;{id = 33655} 046172706100002F000100015180000C026173000006200000000013 arpa. 86400 IN NSEC as. NS DS RRSIG NSEC 02617300000200010002A300000E03746C640467646E73036E657400 as. 172800 IN NS tld.gdns.net. 02617300000200010002A300001304746C643108756C747261646E73036E657400 as. 172800 IN NS tld1.ultradns.net. 02617300000200010002A300001304746C643208756C747261646E73036E657400 as. 172800 IN NS tld2.ultradns.net. 02617300000200010002A300001304746C643308756C747261646E73036F726700 as. 172800 IN NS tld3.ultradns.org. 02617300000200010002A300001304746C643408756C747261646E73036F726700 as. 172800 IN NS tld4.ultradns.org. 02617300000200010002A300001404746C643508756C747261646E7304696E666F00 as. 172800 IN NS tld5.ultradns.info. 02617300000200010002A300001504746C643608756C747261646E7302636F02756B00 as. 172800 IN NS tld6.ultradns.co.uk. 02617300002F000100015180000E0461736961000006200000000003 as. 86400 IN NSEC asia. NS RRSIG NSEC 02617300002E0001000151800093002F08010001518052F4220052EAD9708377007F24879943A2DE5C15F2385AFFFF5348757DDFBF70338B7C06BB207BF5F388624F9A8757199EE5D8F695E2310A27005AA35EE110BDB90359E08DE51C479404551ED9B9DF83959CF3A355992D2ABB9ED43CAA929A5F147AEBADD2569CB62740ABA7FC48A1E8CF5C6E3955E76CA0EBD9290B58520C49DEE35747A0B51C399D31C2 as. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fySHmUOi3lwV8jha//9TSHV9379wM4t8Brsge/XziGJPmodXGZ7l2PaV4jEKJwBao17hEL25A1ngjeUcR5QEVR7Zud+DlZzzo1WZLSq7ntQ8qpKaXxR6663SVpy2J0Crp/xIoejPXG45VedsoOvZKQtYUgxJ3uNXR6C1HDmdMcI= ;{id = 33655} 046173696100000200010002A300001A02613004617369610B6166696C6961732D6E737404696E666F00 asia. 172800 IN NS a0.asia.afilias-nst.info. 046173696100000200010002A300001A02613204617369610B6166696C6961732D6E737404696E666F00 asia. 172800 IN NS a2.asia.afilias-nst.info. 046173696100000200010002A300001A02623004617369610B6166696C6961732D6E7374046173696100 asia. 172800 IN NS b0.asia.afilias-nst.asia. 046173696100000200010002A300001902623204617369610B6166696C6961732D6E7374036F726700 asia. 172800 IN NS b2.asia.afilias-nst.org. 046173696100000200010002A300001A02633004617369610B6166696C6961732D6E737404696E666F00 asia. 172800 IN NS c0.asia.afilias-nst.info. 046173696100000200010002A300001A02643004617369610B6166696C6961732D6E7374046173696100 asia. 172800 IN NS d0.asia.afilias-nst.asia. 046173696100002B000100015180001836420701A33A41F9B31E945CB3379FC36663887038927577 asia. 86400 IN DS 13890 7 1 A33A41F9B31E945CB3379FC36663887038927577 046173696100002B000100015180002436420702F7F1B03479CE200A0680158258D1B7925B0A5F273E54E6BDE742D13214DD99CB asia. 86400 IN DS 13890 7 2 F7F1B03479CE200A0680158258D1B7925B0A5F273E54E6BDE742D13214DD99CB 046173696100002E0001000151800093002B08010001518052F4220052EAD97083770026FC2C4418A6CA8F5F1FEBC1831FFDF545F0FE1355A64F9234A52DA31CB8621A4F2D5C708DD588017CF358B97FE9C69D2B5C5EAE6E973880D35C3CF0F872DB856158CBA64B752DF7CD06AF66B18641EF8D3ECDF8EADB053D3E5581ED3A2E6419EC81C6E0F1DEC4C9DA09B8679D18255098ABBF8B0F203F34E156CAE5A2404B35 asia. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . JvwsRBimyo9fH+vBgx/99UXw/hNVpk+SNKUtoxy4YhpPLVxwjdWIAXzzWLl/6cadK1xerm6XOIDTXDzw+HLbhWFYy6ZLdS33zQavZrGGQe+NPs346tsFPT5Vge06LmQZ7IHG4PHexMnaCbhnnRglUJirv4sPID804VbK5aJASzU= ;{id = 33655} 046173696100002E0001000151800093002F08010001518052F4220052EAD97083770091832B683632E60743277E5E9CF360C3B15362273E792B5568DB7FD25F8200795A1C55CC2CCB55ED03EA62B4587227D332B0DD9AAB58A32664EDBDC1815A58E66B5B75AB0AA36ACB6D12FE91BC3322D76E435544F4792A872CC2152A91739DA0E9F6B8CF40508E8BA3489C55D8B6233CBE40E29A833DCC488417CE19C6B83025 asia. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kYMraDYy5gdDJ35enPNgw7FTYic+eStVaNt/0l+CAHlaHFXMLMtV7QPqYrRYcifTMrDdmqtYoyZk7b3BgVpY5mtbdasKo2rLbRL+kbwzItduQ1VE9HkqhyzCFSqRc52g6fa4z0BQjoujSJxV2LYjPL5A4pqDPcxIhBfOGca4MCU= ;{id = 33655} 046173696100002F000100015180000C026174000006200000000013 asia. 86400 IN NSEC at. NS DS RRSIG NSEC 02623004617369610B6166696C6961732D6E7374046173696100000100010002A3000004C7FE1C01 b0.asia.afilias-nst.asia. 172800 IN A 199.254.28.1 02623004617369610B6166696C6961732D6E7374046173696100001C00010002A300001020010500001600000000000000000001 b0.asia.afilias-nst.asia. 172800 IN AAAA 2001:500:16::1 02643004617369610B6166696C6961732D6E7374046173696100000100010002A3000004C7FE1E01 d0.asia.afilias-nst.asia. 172800 IN A 199.254.30.1 02643004617369610B6166696C6961732D6E7374046173696100001C00010002A300001020010500001800000000000000000001 d0.asia.afilias-nst.asia. 172800 IN AAAA 2001:500:18::1 02617400002F000100015180000C026175000006200000000013 at. 86400 IN NSEC au. NS DS RRSIG NSEC 02617400002E0001000151800093002F08010001518052F4220052EAD97083770071D02A20905CA09297D59A4ED91B9B1172FDC14FAA57158C0E1089BBC8BEBDE8F0B29015188F08DA27F25DC168A92F869D75867EE9B1133B50AE1C4269AD79FE0F74FC054D2AAEB5D7FE136E44CCF1821DC3EA05A4CD4475564E2D44ECF55F4D91AA9AD501432B1113D03035C6874E8896376EE34D1EE1ECC2461AE54DA7BF56 at. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cdAqIJBcoJKX1ZpO2RubEXL9wU+qVxWMDhCJu8i+vejwspAVGI8I2ifyXcFoqS+GnXWGfumxEztQrhxCaa15/g90/AVNKq611/4TbkTM8YIdw+oFpM1EdVZOLUTs9V9Nkaqa1QFDKxET0DA1xodOiJY3buNNHuHswkYa5U2nv1Y= ;{id = 33655} 02617400002E0001000151800093002B08010001518052F4220052EAD97083770035DEC08B444280D0D6EBD4DADEEA15E61C2A32DFCDC7B00222E44CFC3E30DE8D294CAF8CD71FBEEC7891127B5F6682919438BC273B119D86EEEA8F61421FEADA1F3494F01ED6AF801690B1866D3DC51C5BE7882168E9AF365F277777FD9BBBBC60F1AA35F06538F3C17B16158124019A5188975E628571B59CB234F53F043562 at. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Nd7Ai0RCgNDW69Ta3uoV5hwqMt/Nx7ACIuRM/D4w3o0pTK+M1x++7HiREntfZoKRlDi8JzsRnYbu6o9hQh/q2h80lPAe1q+AFpCxhm09xRxb54ghaOmvNl8nd3f9m7u8YPGqNfBlOPPBexYVgSQBmlGIl15ihXG1nLI09T8ENWI= ;{id = 33655} 02617400000200010002A30000090164026E7302617400 at. 172800 IN NS d.ns.at. 02617400000200010002A3000009016A026E7302617400 at. 172800 IN NS j.ns.at. 02617400000200010002A3000009016E026E7302617400 at. 172800 IN NS n.ns.at. 02617400000200010002A30000090172026E7302617400 at. 172800 IN NS r.ns.at. 02617400000200010002A30000090175026E7302617400 at. 172800 IN NS u.ns.at. 02617400000200010002A3000012036E733106756E6976696502616302617400 at. 172800 IN NS ns1.univie.ac.at. 02617400000200010002A3000012036E733206756E6976696502616302617400 at. 172800 IN NS ns2.univie.ac.at. 02617400000200010002A3000012036E733906756E6976696502616302617400 at. 172800 IN NS ns9.univie.ac.at. 02617400002B0001000151800024DCA908022E48D4AAE2F5D5022F156516846803A58F3B2F8A854AAD238EC766DE6AD98AF2 at. 86400 IN DS 56489 8 2 2E48D4AAE2F5D5022F156516846803A58F3B2F8A854AAD238EC766DE6AD98AF2 02617400002B0001000151800024EDA408026BB14AC9AB00B37AFE0BB5570048DFD13B16C8BF3512846C627CE560F026CE39 at. 86400 IN DS 60836 8 2 6BB14AC9AB00B37AFE0BB5570048DFD13B16C8BF3512846C627CE560F026CE39 036E733106756E6976696502616302617400000100010002A30000044E689002 ns1.univie.ac.at. 172800 IN A 78.104.144.2 036E733106756E6976696502616302617400001C00010002A300001020010628203043010000000000000002 ns1.univie.ac.at. 172800 IN AAAA 2001:628:2030:4301::2 036E733206756E6976696502616302617400000100010002A3000004C05C7D02 ns2.univie.ac.at. 172800 IN A 192.92.125.2 036E733206756E6976696502616302617400001C00010002A300001020010678001C00000000000000000002 ns2.univie.ac.at. 172800 IN AAAA 2001:678:1c::2 036E733506756E6976696502616302617400000100010002A3000004C1ABFF4D ns5.univie.ac.at. 172800 IN A 193.171.255.77 036E733506756E6976696502616302617400001C00010002A300001020010628045343050000000000000053 ns5.univie.ac.at. 172800 IN AAAA 2001:628:453:4305::53 036E733906756E6976696502616302617400000100010002A3000004C2000A64 ns9.univie.ac.at. 172800 IN A 194.0.10.100 036E733906756E6976696502616302617400001C00010002A300001020010678000D0000000000000000CAFE ns9.univie.ac.at. 172800 IN AAAA 2001:678:d::cafe 0164026E7302617400000100010002A3000004515BA162 d.ns.at. 172800 IN A 81.91.161.98 0164026E7302617400001C00010002A30000102A02056800200001000000000000000D d.ns.at. 172800 IN AAAA 2a02:568:20:1::d 016A026E7302617400000100010002A3000004C2926A32 j.ns.at. 172800 IN A 194.146.106.50 016A026E7302617400001C00010002A30000102001067C101000120000000000000053 j.ns.at. 172800 IN AAAA 2001:67c:1010:12::53 016E026E7302617400000100010002A3000004515BAD82 n.ns.at. 172800 IN A 81.91.173.130 0172026E7302617400000100010002A3000004C200190A r.ns.at. 172800 IN A 194.0.25.10 0172026E7302617400001C00010002A300001020010678002000000000000000000010 r.ns.at. 172800 IN AAAA 2001:678:20::10 0175026E7302617400000100010002A3000004C342F152 u.ns.at. 172800 IN A 195.66.241.82 02617500002F000100015180000C026177000006200000000003 au. 86400 IN NSEC aw. NS RRSIG NSEC 02617500002E0001000151800093002F08010001518052F4220052EAD9708377006D61315111C3E31FB10CECB64B477BEB5CFBF040CF34369A5B2465C7A817941E502A44BF1C83A51CEB9273CF8D35B9BCA9BC331709B17C56FC9FC984565CDA8AD44225AFC1871F23EBBED577CB0859D95CDCF102F32295FF82377ECB3D99FF19E75E8E946DBE2E95F6E9D5A9C1726B9C34AA204B31394F0070955B85B68F3BAD au. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bWExURHD4x+xDOy2S0d761z78EDPNDaaWyRlx6gXlB5QKkS/HIOlHOuSc8+NNbm8qbwzFwmxfFb8n8mEVlzaitRCJa/Bhx8j677Vd8sIWdlc3PEC8yKV/4I3fss9mf8Z516OlG2+LpX26dWpwXJrnDSqIEsxOU8AcJVbhbaPO60= ;{id = 33655} 02617500000200010002A3000006016102617500 au. 172800 IN NS a.au. 02617500000200010002A3000006016202617500 au. 172800 IN NS b.au. 02617500000200010002A3000006017202617500 au. 172800 IN NS r.au. 02617500000200010002A3000006017302617500 au. 172800 IN NS s.au. 02617500000200010002A3000006017502617500 au. 172800 IN NS u.au. 02617500000200010002A3000006017602617500 au. 172800 IN NS v.au. 02617500000200010002A3000006017702617500 au. 172800 IN NS w.au. 02617500000200010002A3000006017802617500 au. 172800 IN NS x.au. 02617500000200010002A3000006017902617500 au. 172800 IN NS y.au. 02617500000200010002A3000006017A02617500 au. 172800 IN NS z.au. 016102617500000100010002A30000043A41FE49 a.au. 172800 IN A 58.65.254.73 016102617500001C00010002A300001024076E00025403060000000000000073 a.au. 172800 IN AAAA 2407:6e00:254:306::73 016202617500000100010002A30000043A41FD49 b.au. 172800 IN A 58.65.253.73 016202617500001C00010002A300001024076E00025303060000000000000073 b.au. 172800 IN AAAA 2407:6e00:253:306::73 0779617272696E6107636F6E6E65637403636F6D02617500000100010002A3000004C0BD3611 yarrina.connect.com.au. 172800 IN A 192.189.54.17 056363746C6405616C70686106617269646E73036E657402617500000100010002A300000425D1C006 cctld.alpha.aridns.net.au. 172800 IN A 37.209.192.6 056363746C6405616C70686106617269646E73036E657402617500001C00010002A300001020010DCD000100000000000000000006 cctld.alpha.aridns.net.au. 172800 IN AAAA 2001:dcd:1::6 0664656D616E6405616C70686106617269646E73036E657402617500000100010002A300000425D1C007 demand.alpha.aridns.net.au. 172800 IN A 37.209.192.7 0664656D616E6405616C70686106617269646E73036E657402617500001C00010002A300001020010DCD000100000000000000000007 demand.alpha.aridns.net.au. 172800 IN AAAA 2001:dcd:1::7 056363746C64046265746106617269646E73036E657402617500000100010002A300000425D1C206 cctld.beta.aridns.net.au. 172800 IN A 37.209.194.6 056363746C64046265746106617269646E73036E657402617500001C00010002A300001020010DCD000200000000000000000006 cctld.beta.aridns.net.au. 172800 IN AAAA 2001:dcd:2::6 0664656D616E64046265746106617269646E73036E657402617500000100010002A300000425D1C207 demand.beta.aridns.net.au. 172800 IN A 37.209.194.7 0664656D616E64046265746106617269646E73036E657402617500001C00010002A300001020010DCD000200000000000000000007 demand.beta.aridns.net.au. 172800 IN AAAA 2001:dcd:2::7 056363746C640564656C746106617269646E73036E657402617500000100010002A300000425D1C606 cctld.delta.aridns.net.au. 172800 IN A 37.209.198.6 056363746C640564656C746106617269646E73036E657402617500001C00010002A300001020010DCD000400000000000000000006 cctld.delta.aridns.net.au. 172800 IN AAAA 2001:dcd:4::6 0664656D616E640564656C746106617269646E73036E657402617500000100010002A300000425D1C607 demand.delta.aridns.net.au. 172800 IN A 37.209.198.7 0664656D616E640564656C746106617269646E73036E657402617500001C00010002A300001020010DCD000400000000000000000007 demand.delta.aridns.net.au. 172800 IN AAAA 2001:dcd:4::7 056363746C640567616D6D6106617269646E73036E657402617500000100010002A300000425D1C406 cctld.gamma.aridns.net.au. 172800 IN A 37.209.196.6 056363746C640567616D6D6106617269646E73036E657402617500001C00010002A300001020010DCD000300000000000000000006 cctld.gamma.aridns.net.au. 172800 IN AAAA 2001:dcd:3::6 0664656D616E640567616D6D6106617269646E73036E657402617500000100010002A300000425D1C407 demand.gamma.aridns.net.au. 172800 IN A 37.209.196.7 0664656D616E640567616D6D6106617269646E73036E657402617500001C00010002A300001020010DCD000300000000000000000007 demand.gamma.aridns.net.au. 172800 IN AAAA 2001:dcd:3::7 076D756E6E617269026F7A02617500000100010002A3000004CA1D9703 munnari.oz.au. 172800 IN A 202.29.151.3 076D756E6E617269026F7A02617500001C00010002A3000010200103C8900700010000000000000021 munnari.oz.au. 172800 IN AAAA 2001:3c8:9007:1::21 076D756E6E617269026F7A02617500001C00010002A3000010200103C8900901810000000000000002 munnari.oz.au. 172800 IN AAAA 2001:3c8:9009:181::2 017202617500000100010002A300000480208803 r.au. 172800 IN A 128.32.136.3 017202617500001C00010002A30000102607F140FFFFFFFE0000000000000003 r.au. 172800 IN AAAA 2607:f140:ffff:fffe::3 017302617500000100010002A30000048020880E s.au. 172800 IN A 128.32.136.14 017302617500001C00010002A30000102607F140FFFFFFFE000000000000000E s.au. 172800 IN AAAA 2607:f140:ffff:fffe::e 017502617500000100010002A3000004D31D8520 u.au. 172800 IN A 211.29.133.32 017602617500000100010002A3000004CA0C1F8D v.au. 172800 IN A 202.12.31.141 017602617500001C00010002A300001020010DC0400100010000183600000141 v.au. 172800 IN AAAA 2001:dc0:4001:1:0:1836:0:141 017702617500000100010002A300000425D1C005 w.au. 172800 IN A 37.209.192.5 017702617500001C00010002A300001020010DCD000100000000000000000005 w.au. 172800 IN AAAA 2001:dcd:1::5 017802617500000100010002A300000425D1C205 x.au. 172800 IN A 37.209.194.5 017802617500001C00010002A300001020010DCD000200000000000000000005 x.au. 172800 IN AAAA 2001:dcd:2::5 017902617500000100010002A300000425D1C405 y.au. 172800 IN A 37.209.196.5 017902617500001C00010002A300001020010DCD000300000000000000000005 y.au. 172800 IN AAAA 2001:dcd:3::5 017A02617500000100010002A300000425D1C605 z.au. 172800 IN A 37.209.198.5 017A02617500001C00010002A300001020010DCD000400000000000000000005 z.au. 172800 IN AAAA 2001:dcd:4::5 02617700000200010002A3000011036E73310873657461726E657402617700 aw. 172800 IN NS ns1.setarnet.aw. 02617700000200010002A3000011036E73320873657461726E657402617700 aw. 172800 IN NS ns2.setarnet.aw. 02617700000200010002A30000140A6E732D61772D65787431047369646E026E6C00 aw. 172800 IN NS ns-aw-ext1.sidn.nl. 02617700002F000100015180000C026178000006200000000003 aw. 86400 IN NSEC ax. NS RRSIG NSEC 02617700002E0001000151800093002F08010001518052F4220052EAD9708377002E366B1BC318F12D72DB967ED8202C7AE5FAE4DEF7574326C75CC44E2AD3DEA8395D2D43F2659824964873B7665C6A8742C33B8646DFADAE1DAF080D321EA7AAB16C975BF362A072DF76077BE2F0DB597E2C659206178321A0BEC6425FC028DBAE0F626722C6ACF011EC200C7B4ABD8286B95B4F4E19B58D6E763958295D9F2A aw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LjZrG8MY8S1y25Z+2CAseuX65N73V0Mmx1zETirT3qg5XS1D8mWYJJZIc7dmXGqHQsM7hkbfra4drwgNMh6nqrFsl1vzYqBy33YHe+Lw21l+LGWSBheDIaC+xkJfwCjbrg9iZyLGrPAR7CAMe0q9goa5W09OGbWNbnY5WCldnyo= ;{id = 33655} 036E73310873657461726E657402617700000100010002A3000004D1588019 ns1.setarnet.aw. 172800 IN A 209.88.128.25 036E73320873657461726E657402617700000100010002A3000004D158801A ns2.setarnet.aw. 172800 IN A 209.88.128.26 02617800000200010002A3000010036E73310661616C6E6574036E657400 ax. 172800 IN NS ns1.aalnet.net. 02617800000200010002A3000010036E73320661616C6E6574036E657400 ax. 172800 IN NS ns2.aalnet.net. 02617800000200010002A3000010036E73330661616C6E6574036E657400 ax. 172800 IN NS ns3.aalnet.net. 02617800002F000100015180000C02617A000006200000000003 ax. 86400 IN NSEC az. NS RRSIG NSEC 02617800002E0001000151800093002F08010001518052F4220052EAD9708377009D94C2403FA9574730484E969565E31850C16D531F85EBF07A21F6F933175116BA98945FB3C3F926190E0E7E1DE144E212DDDD044303355F42A7C29FD898A419E37856E213FD943CB4422568E26C04144997775BBDF25EB02E95B29A75183B809642BCA2AB27169C8A52DE2D1FA4D859F79974E8EE939314006FE9E34B2BB9F5 ax. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nZTCQD+pV0cwSE6WlWXjGFDBbVMfhevweiH2+TMXURa6mJRfs8P5JhkODn4d4UTiEt3dBEMDNV9Cp8Kf2JikGeN4VuIT/ZQ8tEIlaOJsBBRJl3dbvfJesC6Vspp1GDuAlkK8oqsnFpyKUt4tH6TYWfeZdOjuk5MUAG/p40srufU= ;{id = 33655} 02617A00000200010002A300001202617A0A686F73746D617374657202756100 az. 172800 IN NS az.hostmaster.ua. 02617A00000200010002A300000D026E730564656D6F7302737500 az. 172800 IN NS ns.demos.su. 02617A00000200010002A300000D037269700370736703636F6D00 az. 172800 IN NS rip.psg.com. 02617A00002F000100015180000C026261000006200000000003 az. 86400 IN NSEC ba. NS RRSIG NSEC 02617A00002E0001000151800093002F08010001518052F4220052EAD9708377001D0A289AEE33DC6DA22F56EDB1DF6AE12D8E945DA86B352BAE7DF5204E3BB46FF8DF941F695C49B47B092DAF66028C6DDF8F7BEE1FCB445710D63255D80274817BC507C1B756B024739033427E160A8063A96C84CC47499E346CCB77C95DB2F796DCE7B0BAD06AB86CD9D8AD2F43282BDA1F030C08C22BC778BC94FEE36075EB az. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HQoomu4z3G2iL1btsd9q4S2OlF2oazUrrn31IE47tG/435QfaVxJtHsJLa9mAoxt34977h/LRFcQ1jJV2AJ0gXvFB8G3VrAkc5AzQn4WCoBjqWyEzEdJnjRsy3fJXbL3ltznsLrQarhs2ditL0MoK9ofAwwIwivHeLyU/uNgdes= ;{id = 33655} 02626100000200010002A300001B026261056363746C640761757468646E730472697065036E657400 ba. 172800 IN NS ba.cctld.authdns.ripe.net. 02626100000200010002A3000007026E7302626100 ba. 172800 IN NS ns.ba. 02626100000200010002A300001204736176610475746963036E657402626100 ba. 172800 IN NS sava.utic.net.ba. 02626100000200010002A300001206617574683033026E73027575036E657400 ba. 172800 IN NS auth03.ns.uu.net. 02626100000200010002A300000F076D756E6E617269026F7A02617500 ba. 172800 IN NS munnari.oz.au. 02626100002F0001000151800012086261726761696E73000006200000000003 ba. 86400 IN NSEC bargains. NS RRSIG NSEC 02626100002E0001000151800093002F08010001518052F4220052EAD970837700544B506472DD8E817113E5959868D90ACB0FB15183A4D7193DD75914ABF77164A30CAD154180E71D8B3B29D8B1E4D5470A32DF43EBEF91886D637421F6F2018E60D9D3E9F1255EEAC29E714C9886006FE2ABB79283DFABC2908EEDD8780B01F73E81DCAFEEE27722E7B2886718F2B6A81CF48D68CD28BCBC1956ADDD45E2B87B ba. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VEtQZHLdjoFxE+WVmGjZCssPsVGDpNcZPddZFKv3cWSjDK0VQYDnHYs7Kdix5NVHCjLfQ+vvkYhtY3Qh9vIBjmDZ0+nxJV7qwp5xTJiGAG/iq7eSg9+rwpCO7dh4CwH3PoHcr+7idyLnsohnGPK2qBz0jWjNKLy8GVat3UXiuHs= ;{id = 33655} 04736176610475746963036E657402626100000100010002A3000004C3822303 sava.utic.net.ba. 172800 IN A 195.130.35.3 026E7302626100000100010002A3000004C3822305 ns.ba. 172800 IN A 195.130.35.5 086261726761696E7300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 bargains. 172800 IN NS demand.beta.aridns.net.au. 086261726761696E7300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 bargains. 172800 IN NS demand.alpha.aridns.net.au. 086261726761696E7300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 bargains. 172800 IN NS demand.delta.aridns.net.au. 086261726761696E7300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 bargains. 172800 IN NS demand.gamma.aridns.net.au. 086261726761696E7300002B0001000151800024FC460802B5B3BD40B9913CE466F392BE4F1E72316690BE19FD9E1E850CA3380DF1BCF7A2 bargains. 86400 IN DS 64582 8 2 B5B3BD40B9913CE466F392BE4F1E72316690BE19FD9E1E850CA3380DF1BCF7A2 086261726761696E7300002E0001000151800093002B08010001518052F4220052EAD9708377004EEFDEA97A81B556483795FC4B93E33A171664317C949F82D6E198DF5551996F8D9DB278C62D1CD4F1370BB835179FF3E335917A921DBB13BF8C142827C45112725283689C26F89D91D7580645EF72EFE9A8F8C1C73ED399BD9870255EE94ABDE24020E4238A506F92ED4FB1BB6E3A5BEB05B3C5433B82C8F21846E99AF9A894 bargains. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Tu/eqXqBtVZIN5X8S5PjOhcWZDF8lJ+C1uGY31VRmW+NnbJ4xi0c1PE3C7g1F5/z4zWRepIduxO/jBQoJ8RREnJSg2icJvidkddYBkXvcu/pqPjBxz7Tmb2YcCVe6Uq94kAg5COKUG+S7U+xu246W+sFs8VDO4LI8hhG6Zr5qJQ= ;{id = 33655} 086261726761696E7300002E0001000151800093002F08010001518052F4220052EAD9708377004A8A627DE36845D2D415D95B47A93E64867AA0B8A11F61179E6A0932F3D9D70BEDD49B71DDF60CB799584D7EC145DEB208AA597622FE52C808FFC302CDD5C811C7E65C4484E4C6127ADBB6CDFD5CC06E7CBE765F5F478C52CF8DB06BBBEB06346CABE6CCD41B20A8FAC5DE678463F40AEC2705A1EAE5D1B9D2C8D7392CAB0ED4 bargains. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SopifeNoRdLUFdlbR6k+ZIZ6oLihH2EXnmoJMvPZ1wvt1Jtx3fYMt5lYTX7BRd6yCKpZdiL+UsgI/8MCzdXIEcfmXESE5MYSetu2zf1cwG58vnZfX0eMUs+NsGu76wY0bKvmzNQbIKj6xd5nhGP0CuwnBaHq5dG50sjXOSyrDtQ= ;{id = 33655} 086261726761696E7300002F000100015180000C026262000006200000000013 bargains. 86400 IN NSEC bb. NS DS RRSIG NSEC 02626200000200010002A3000018036E73310E6261726261646F73646F6D61696E036E657400 bb. 172800 IN NS ns1.barbadosdomain.net. 02626200000200010002A3000018036E73320E6261726261646F73646F6D61696E036E657400 bb. 172800 IN NS ns2.barbadosdomain.net. 02626200002F000100015180000C026264000006200000000003 bb. 86400 IN NSEC bd. NS RRSIG NSEC 02626200002E0001000151800093002F08010001518052F4220052EAD9708377008F53EEB344A050CEC35AF3F6B5639F84E8FD6545FD66A212B5483EAE49D348E67DDF530C4141B17E5925DE242FA3A3C340AF0D66A6793EBEEFAC334009D9FAFAC9FF93C055FF9F5DB5937CF22719F4D63DB0C2A7B0E15F97734743A648720F92AFE5386B092F1F2856837FCFFF2E512702AD09354FDDE3BE9D2AB220AF4A8918 bb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . j1Pus0SgUM7DWvP2tWOfhOj9ZUX9ZqIStUg+rknTSOZ931MMQUGxflkl3iQvo6PDQK8NZqZ5Pr7vrDNACdn6+sn/k8BV/59dtZN88icZ9NY9sMKnsOFfl3NHQ6ZIcg+Sr+U4awkvHyhWg3/P/y5RJwKtCTVP3eO+nSqyIK9KiRg= ;{id = 33655} 02626400000200010002A300000803646E7302626400 bd. 172800 IN NS dns.bd. 02626400000200010002A3000013057375726D61046274636C036E657402626400 bd. 172800 IN NS surma.btcl.net.bd. 02626400000200010002A3000014066A616D756E61046274636C036E657402626400 bd. 172800 IN NS jamuna.btcl.net.bd. 02626400002F000100015180000C026265000006200000000003 bd. 86400 IN NSEC be. NS RRSIG NSEC 02626400002E0001000151800093002F08010001518052F4220052EAD97083770059C8E4193CC0D9C66CC2DF1503C4C76AFD91EB2CE93BAE48E5DE263522CCCE7D96A312D26290F8F39DDC12D73EDC8FDA7AFC71F5D61DBD06980B90FD7E2167F4A731B03A96748290C03AFE805C8CE190EDDF72F022B8D9BB7B655DA83E5C36B73D08BB3E704032D836BEF5AE60DC6BF631896BB4683BA331AD25697F88851AB3 bd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WcjkGTzA2cZswt8VA8THav2R6yzpO65I5d4mNSLMzn2WoxLSYpD4853cEtc+3I/aevxx9dYdvQaYC5D9fiFn9KcxsDqWdIKQwDr+gFyM4ZDt33LwIrjZu3tlXag+XDa3PQi7PnBAMtg2vvWuYNxr9jGJa7RoO6MxrSVpf4iFGrM= ;{id = 33655} 03646E7302626400000100010002A3000004D13A1803 dns.bd. 172800 IN A 209.58.24.3 066A616D756E61046274636C036E657402626400000100010002A3000004CB70C2E7 jamuna.btcl.net.bd. 172800 IN A 203.112.194.231 057375726D61046274636C036E657402626400000100010002A3000004CB70C2E8 surma.btcl.net.bd. 172800 IN A 203.112.194.232 02626500000200010002A300000D0161026E7303646E7302626500 be. 172800 IN NS a.ns.dns.be. 02626500000200010002A300000D0162026E7303646E7302626500 be. 172800 IN NS b.ns.dns.be. 02626500000200010002A300000D0163026E7303646E7302626500 be. 172800 IN NS c.ns.dns.be. 02626500000200010002A300000D0164026E7303646E7302626500 be. 172800 IN NS d.ns.dns.be. 02626500000200010002A300000D0178026E7303646E7302626500 be. 172800 IN NS x.ns.dns.be. 02626500000200010002A300000D0179026E7303646E7302626500 be. 172800 IN NS y.ns.dns.be. 02626500002B00010001518000183178080159462E9CB5520A36DD248D9DDC4EAA44672A5ED1 be. 86400 IN DS 12664 8 1 59462E9CB5520A36DD248D9DDC4EAA44672A5ED1 02626500002B00010001518000243178080275141E9B1188A95A7A855BF47E278A742A5E3F2DDEED8E995D749D48F2F0E72D be. 86400 IN DS 12664 8 2 75141E9B1188A95A7A855BF47E278A742A5E3F2DDEED8E995D749D48F2F0E72D 02626500002B0001000151800018412C08018BD0806315E077B56D3D0E235727F31D8CB9BF3C be. 86400 IN DS 16684 8 1 8BD0806315E077B56D3D0E235727F31D8CB9BF3C 02626500002B0001000151800024412C08027EF0A483A7A96FCECF3D9067828BAF7F3DF22C3276671C2E88AA4636FD259F34 be. 86400 IN DS 16684 8 2 7EF0A483A7A96FCECF3D9067828BAF7F3DF22C3276671C2E88AA4636FD259F34 02626500002E0001000151800093002B08010001518052F4220052EAD970837700BD77E92C6B5BB8D00EF9FD24CB111A0E1629094927B715F6FADADD840003B99F50DCEC8AE5448C4E67E46C81E45FCAD2A7E244D231945296A4A3DADEE1FCA32D42C96B9C63CEBA0B52CCA16D6C63105E0F2F1632E753E5AF9338C21E8DD701FAFD0F31AFB0D36872232712477B81055FFB80299ED687113F672985EFAE9C688A be. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vXfpLGtbuNAO+f0kyxEaDhYpCUkntxX2+trdhAADuZ9Q3OyK5USMTmfkbIHkX8rSp+JE0jGUUpako9re4fyjLULJa5xjzroLUsyhbWxjEF4PLxYy51Plr5M4wh6N1wH6/Q8xr7DTaHIjJxJHe4EFX/uAKZ7WhxE/ZymF766caIo= ;{id = 33655} 02626500002E0001000151800093002F08010001518052F4220052EAD9708377004981773FC1FE94D0E19812A056A410FCCF52A0FE75B6D0DE3F363F6E37CE13DCE5C301AB2965741E417F3311E6D34756CBD5AFB370116AB8AAB252F0E259F47950EEBA3327E3EACE0A93FBA48BA8FA9BC14E819EE28A2DD4D49A37E6985C2EFB7DDCF7D2DCCC2B1BC88559159A401CE66D0E5A6555F39D283E87D416B1A630CA be. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SYF3P8H+lNDhmBKgVqQQ/M9SoP51ttDePzY/bjfOE9zlwwGrKWV0HkF/MxHm00dWy9Wvs3ARariqslLw4ln0eVDuujMn4+rOCpP7pIuo+pvBToGe4oot1NSaN+aYXC77fdz30tzMKxvIhVkVmkAc5m0OWmVV850oPofUFrGmMMo= ;{id = 33655} 02626500002F0001000151800010066265726C696E000006200000000013 be. 86400 IN NSEC berlin. NS DS RRSIG NSEC 0161026E7303646E7302626500000100010002A3000004C2000601 a.ns.dns.be. 172800 IN A 194.0.6.1 0161026E7303646E7302626500001C00010002A300001020010678000900000000000000000001 a.ns.dns.be. 172800 IN AAAA 2001:678:9::1 0162026E7303646E7302626500000100010002A3000004C2002501 b.ns.dns.be. 172800 IN A 194.0.37.1 0162026E7303646E7302626500001C00010002A300001020010678006400000000000000000001 b.ns.dns.be. 172800 IN AAAA 2001:678:64::1 0163026E7303646E7302626500000100010002A3000004C2002B01 c.ns.dns.be. 172800 IN A 194.0.43.1 0163026E7303646E7302626500001C00010002A300001020010678006800000000000000000001 c.ns.dns.be. 172800 IN AAAA 2001:678:68::1 0164026E7303646E7302626500000100010002A3000004C2002C01 d.ns.dns.be. 172800 IN A 194.0.44.1 0164026E7303646E7302626500001C00010002A300001020010678006C00000000000000000001 d.ns.dns.be. 172800 IN AAAA 2001:678:6c::1 0178026E7303646E7302626500000100010002A3000004C200010A x.ns.dns.be. 172800 IN A 194.0.1.10 0178026E7303646E7302626500001C00010002A30000102001067800040000000000000000000A x.ns.dns.be. 172800 IN AAAA 2001:678:4::a 0179026E7303646E7302626500000100010002A3000004781DFD08 y.ns.dns.be. 172800 IN A 120.29.253.8 0179026E7303646E7302626500001C00010002A300001020010DCD000700000000000000000008 y.ns.dns.be. 172800 IN AAAA 2001:dcd:7::8 066265726C696E00000200010002A3000012016103646E73036E6963066265726C696E00 berlin. 172800 IN NS a.dns.nic.berlin. 066265726C696E00000200010002A3000012016203646E73036E6963066265726C696E00 berlin. 172800 IN NS b.dns.nic.berlin. 066265726C696E00000200010002A3000012016303646E73036E6963066265726C696E00 berlin. 172800 IN NS c.dns.nic.berlin. 066265726C696E00002B0001000151800018289A080141B409894CD48EBBD0877427D5320C92ED2879DD berlin. 86400 IN DS 10394 8 1 41B409894CD48EBBD0877427D5320C92ED2879DD 066265726C696E00002B0001000151800024289A0802B0D792359CB13AB1093CFA9D3754EC6933CAE2B2335A257017BDF63BCB682564 berlin. 86400 IN DS 10394 8 2 B0D792359CB13AB1093CFA9D3754EC6933CAE2B2335A257017BDF63BCB682564 066265726C696E00002B00010001518000183B9B080177F489BD4EA570DF28EA5AE752798AACC900C547 berlin. 86400 IN DS 15259 8 1 77F489BD4EA570DF28EA5AE752798AACC900C547 066265726C696E00002B00010001518000243B9B0802D7B794C41E4F2FFB19B22E307B7D5314C8665A0C77464A471305AC32FC0BDAF3 berlin. 86400 IN DS 15259 8 2 D7B794C41E4F2FFB19B22E307B7D5314C8665A0C77464A471305AC32FC0BDAF3 066265726C696E00002E0001000151800093002B08010001518052F4220052EAD97083770020CBD47BE3B2543F1C85A8434DF16F0ACA7F6974970BEE87F156E8556FC0D44DBB45B6B23EFEE6AB9242AD72AD95582768F7BF7984A2FE6951434C2EE43A426EB077484920B0BD7EC14E738318481E8DC10445F05A66497BD3964139FEAE1C5DF46639F8F2E8F2677F671C98EA040CEF3470D04BC052DD96CC1860DDEF0F50AD berlin. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . IMvUe+OyVD8chahDTfFvCsp/aXSXC+6H8VboVW/A1E27RbayPv7mq5JCrXKtlVgnaPe/eYSi/mlRQ0wu5DpCbrB3SEkgsL1+wU5zgxhIHo3BBEXwWmZJe9OWQTn+rhxd9GY5+PLo8md/ZxyY6gQM7zRw0EvAUt2WzBhg3e8PUK0= ;{id = 33655} 066265726C696E00002E0001000151800093002F08010001518052F4220052EAD9708377009FBBFD741BA793E07404B33C546F2CC14F076FE7B56ED7C19E464A67C79C70AC57BC51077B2812AB9A73C092769B52D56FFFE7CB692ADEAB33D10B35BC611868519CC4E884444F388A4391F793AD3A5163B97EBF278EF658C52E492B3D170E0F942189F13BCBF8EA610F74B281FE9AE382BE3C077205949AF1EAA3E380D2AC8E berlin. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . n7v9dBunk+B0BLM8VG8swU8Hb+e1btfBnkZKZ8eccKxXvFEHeygSq5pzwJJ2m1LVb//ny2kq3qsz0Qs1vGEYaFGcxOiERE84ikOR95OtOlFjuX6/J472WMUuSSs9Fw4PlCGJ8TvL+OphD3Sygf6a44K+PAdyBZSa8eqj44DSrI4= ;{id = 33655} 066265726C696E00002F000100015180000C026266000006200000000013 berlin. 86400 IN NSEC bf. NS DS RRSIG NSEC 016103646E73036E6963066265726C696E00000100010002A3000004C2001910 a.dns.nic.berlin. 172800 IN A 194.0.25.16 016103646E73036E6963066265726C696E00001C00010002A300001020010678002000000000000000000016 a.dns.nic.berlin. 172800 IN AAAA 2001:678:20::16 016203646E73036E6963066265726C696E00000100010002A3000004C1AA3D05 b.dns.nic.berlin. 172800 IN A 193.170.61.5 016203646E73036E6963066265726C696E00001C00010002A30000102001062A000A20000000000000000005 b.dns.nic.berlin. 172800 IN AAAA 2001:62a:a:2000::5 016303646E73036E6963066265726C696E00000100010002A3000004C1AABB05 c.dns.nic.berlin. 172800 IN A 193.170.187.5 016303646E73036E6963066265726C696E00001C00010002A30000102001062A000A30000000000000000005 c.dns.nic.berlin. 172800 IN AAAA 2001:62a:a:3000::5 02626600000200010002A300000C036E73310369726402667200 bf. 172800 IN NS ns1.ird.fr. 02626600000200010002A3000010036E733106617336343533036E657400 bf. 172800 IN NS ns1.as6453.net. 02626600000200010002A3000010036E733206617336343533036E657400 bf. 172800 IN NS ns2.as6453.net. 02626600000200010002A3000013076E61686F757269066F6E6174656C02626600 bf. 172800 IN NS nahouri.onatel.bf. 02626600002F000100015180000C026267000006200000000003 bf. 86400 IN NSEC bg. NS RRSIG NSEC 02626600002E0001000151800093002F08010001518052F4220052EAD970837700ADE929415E15179FA0A602F27265B4ED955B6BF882E38D62AFD285B1A0B3CBA06D51AF0DF7444C09DC937085976B95407EBB7FF7F703633336F0068E1AA40F70CF602C7C336CCBF9095668F3D054BA3C0FFB021FBFD236080A5B59691074D1EBA51965DC41A307CEE78AF3BAF655D443792A541EFFC86EA4124F50A70BBC5430 bf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rekpQV4VF5+gpgLycmW07ZVba/iC441ir9KFsaCzy6BtUa8N90RMCdyTcIWXa5VAfrt/9/cDYzM28AaOGqQPcM9gLHwzbMv5CVZo89BUujwP+wIfv9I2CApbWWkQdNHrpRll3EGjB87nivO69lXUQ3kqVB7/yG6kEk9Qpwu8VDA= ;{id = 33655} 076E61686F757269066F6E6174656C02626600000100010002A3000004CE5282C4 nahouri.onatel.bf. 172800 IN A 206.82.130.196 02626700000200010002A300001B026267056363746C640761757468646E730472697065036E657400 bg. 172800 IN NS bg.cctld.authdns.ripe.net. 02626700000200010002A3000010026E7308726567697374657202626700 bg. 172800 IN NS ns.register.bg. 02626700000200010002A3000011036E733208726567697374657202626700 bg. 172800 IN NS ns2.register.bg. 02626700000200010002A3000011036E733308726567697374657202626700 bg. 172800 IN NS ns3.register.bg. 02626700000200010002A3000011036E733408726567697374657202626700 bg. 172800 IN NS ns4.register.bg. 02626700000200010002A3000010066E732D65787403697363036F726700 bg. 172800 IN NS ns-ext.isc.org. 02626700000200010002A300001006736E732D706203697363036F726700 bg. 172800 IN NS sns-pb.isc.org. 02626700002B0001000151800018B6FE05011D83F503CCED4A4B6F7F8DB1CF43D38F9133A3EA bg. 86400 IN DS 46846 5 1 1D83F503CCED4A4B6F7F8DB1CF43D38F9133A3EA 02626700002B0001000151800024B6FE050226811E459C850F50A85D1EAF589E30DC14D09D1A6E6262E8D36B6BFFC605334C bg. 86400 IN DS 46846 5 2 26811E459C850F50A85D1EAF589E30DC14D09D1A6E6262E8D36B6BFFC605334C 02626700002E0001000151800093002B08010001518052F4220052EAD9708377005044CC62CDA08786B74CFCA0FAB18068A50E47151C9EEE825B2F2795D6B0B0E384589E0D486C3DD3EE057BD86AEDCFFEE4FAFD28F798B01E0CAA0DABA13017247E4FB9074E8DE89C600CCA72B13AF7581E009BA96A431FD9142AFD37AFBB1EC7F8A0D9ECB8137A83D61A7C4A9397E8703E3B88D37ED48BA5213224E4CE658483 bg. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UETMYs2gh4a3TPyg+rGAaKUORxUcnu6CWy8nldawsOOEWJ4NSGw90+4Fe9hq7c/+5Pr9KPeYsB4Mqg2roTAXJH5PuQdOjeicYAzKcrE691geAJupakMf2RQq/Tevux7H+KDZ7LgTeoPWGnxKk5focD47iNN+1IulITIk5M5lhIM= ;{id = 33655} 02626700002E0001000151800093002F08010001518052F4220052EAD9708377005F0918B0D2BD9FEF70DFD9FFB5168A079F864399A0976B7380288928C3AF1CDC994E03FD1EAD831D3C52BDBBC04821AB5977E2740EEB5F4739382EA5B5F803CE99449DFE993A22276DDB3AA677844F0FAD5E1B68BB23C8FCBFFC2CB42C6B55D19E9108A4F3CA02FEA0EB65CEB90058D76FDB2679CB12F53C4ED6D0A88EB2EA15 bg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XwkYsNK9n+9w39n/tRaKB5+GQ5mgl2tzgCiJKMOvHNyZTgP9Hq2DHTxSvbvASCGrWXfidA7rX0c5OC6ltfgDzplEnf6ZOiInbds6pneETw+tXhtouyPI/L/8LLQsa1XRnpEIpPPKAv6g62XOuQBY12/bJnnLEvU8TtbQqI6y6hU= ;{id = 33655} 02626700002F000100015180000C026268000006200000000013 bg. 86400 IN NSEC bh. NS DS RRSIG NSEC 026E7308726567697374657202626700000100010002A3000004C05C8163 ns.register.bg. 172800 IN A 192.92.129.99 026E7308726567697374657202626700001C00010002A30000102A026A80000000000192009201290099 ns.register.bg. 172800 IN AAAA 2a02:6a80::192:92:129:99 036E733208726567697374657202626700000100010002A3000004C14403E8 ns2.register.bg. 172800 IN A 193.68.3.232 036E733208726567697374657202626700001C00010002A30000102A026A80000000000193006800030232 ns2.register.bg. 172800 IN AAAA 2a02:6a80::193:68:3:232 036E733308726567697374657202626700000100010002A3000004C1446363 ns3.register.bg. 172800 IN A 193.68.99.99 036E733308726567697374657202626700001C00010002A30000102A026A80000000000193006800990099 ns3.register.bg. 172800 IN AAAA 2a02:6a80::193:68:99:99 036E733408726567697374657202626700000100010002A3000004C2002001 ns4.register.bg. 172800 IN A 194.0.32.1 036E733408726567697374657202626700001C00010002A300001020010678003C00000000000000000001 ns4.register.bg. 172800 IN AAAA 2001:678:3c::1 02626800000200010002A3000013026E7307626174656C636F03636F6D02626800 bh. 172800 IN NS ns.batelco.com.bh. 02626800000200010002A3000014036E733207626174656C636F03636F6D02626800 bh. 172800 IN NS ns2.batelco.com.bh. 02626800000200010002A3000014036E733307626174656C636F03636F6D02626800 bh. 172800 IN NS ns3.batelco.com.bh. 02626800000200010002A3000014036E733407626174656C636F03636F6D02626800 bh. 172800 IN NS ns4.batelco.com.bh. 02626800002F000100015180000C026269000006200000000003 bh. 86400 IN NSEC bi. NS RRSIG NSEC 02626800002E0001000151800093002F08010001518052F4220052EAD97083770028B6BBC9EDDF2225753E52533DA483398145EAABDA606C25342A50D40AB2946F212086A0B50263976391698E0E7DAFB2D4799F780ABC42FE10B964F150D827D316C2157EFDFA4EE3CF39D1F280AD16BCE3B154D6C67A89D62C09389B05F83B2BF073B4FEF5E99A013A734CA0D7DFA97B1164B2D28702B1C130AC5F7C11EB906E bh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . KLa7ye3fIiV1PlJTPaSDOYFF6qvaYGwlNCpQ1AqylG8hIIagtQJjl2ORaY4Ofa+y1HmfeAq8Qv4QuWTxUNgn0xbCFX79+k7jzznR8oCtFrzjsVTWxnqJ1iwJOJsF+Dsr8HO0/vXpmgE6c0yg19+pexFkstKHArHBMKxffBHrkG4= ;{id = 33655} 026E7307626174656C636F03636F6D02626800000100010002A3000004C1BC61C5 ns.batelco.com.bh. 172800 IN A 193.188.97.197 036E733207626174656C636F03636F6D02626800000100010002A3000004C1BC61D4 ns2.batelco.com.bh. 172800 IN A 193.188.97.212 036E733307626174656C636F03636F6D02626800000100010002A3000004C1BC61C1 ns3.batelco.com.bh. 172800 IN A 193.188.97.193 036E733407626174656C636F03636F6D02626800000100010002A3000004C1BC61D1 ns4.batelco.com.bh. 172800 IN A 193.188.97.209 02626900000200010002A300001B026269056363746C640761757468646E730472697065036E657400 bi. 172800 IN NS bi.cctld.authdns.ripe.net. 02626900000200010002A300000B026E73036E696302626900 bi. 172800 IN NS ns.nic.bi. 02626900000200010002A300001303646E73097072696E6365746F6E0365647500 bi. 172800 IN NS dns.princeton.edu. 02626900000200010002A300000C036E7331036E696302626900 bi. 172800 IN NS ns1.nic.bi. 02626900000200010002A300000E05616E796E73036E696302626900 bi. 172800 IN NS anyns.nic.bi. 02626900000200010002A3000013056E732D626907616672696E6963036E657400 bi. 172800 IN NS ns-bi.afrinic.net. 02626900002F000100015180000E0462696B65000006200000000003 bi. 86400 IN NSEC bike. NS RRSIG NSEC 02626900002E0001000151800093002F08010001518052F4220052EAD9708377004FB37B52ADD647E3D2FD15CBB421864E6A38A1538456C7010DDB531E6DE66723116AC7DCF5005BC30B00621DE07F669A44BDC632512CF36410D8FA93C2A84EA6EEC853F31F64895B96FB0E761DFF68A0063A819B64E2922E7DE7F6094F6F90469F76CCF7F71C68BD60E5C8A7BB3C1C240501E904ACD9687F6DD13BB66A6D41FC bi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . T7N7Uq3WR+PS/RXLtCGGTmo4oVOEVscBDdtTHm3mZyMRasfc9QBbwwsAYh3gf2aaRL3GMlEs82QQ2PqTwqhOpu7IU/MfZIlblvsOdh3/aKAGOoGbZOKSLn3n9glPb5BGn3bM9/ccaL1g5cinuzwcJAUB6QSs2Wh/bdE7tmptQfw= ;{id = 33655} 05616E796E73036E696302626900000100010002A3000004CC3DD83D anyns.nic.bi. 172800 IN A 204.61.216.61 05616E796E73036E696302626900001C00010002A3000010200105000014606100AD000000000001 anyns.nic.bi. 172800 IN AAAA 2001:500:14:6061:ad::1 026E73036E696302626900000100010002A3000004C40208CD ns.nic.bi. 172800 IN A 196.2.8.205 036E7331036E696302626900000100010002A3000004C4020CCD ns1.nic.bi. 172800 IN A 196.2.12.205 0462696B6500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 bike. 172800 IN NS demand.beta.aridns.net.au. 0462696B6500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 bike. 172800 IN NS demand.alpha.aridns.net.au. 0462696B6500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 bike. 172800 IN NS demand.delta.aridns.net.au. 0462696B6500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 bike. 172800 IN NS demand.gamma.aridns.net.au. 0462696B6500002B0001000151800024D3120802747E5D74063A31D2957E308218CFABAB23194B4FB6292FC5168F7B9E5031AFAF bike. 86400 IN DS 54034 8 2 747E5D74063A31D2957E308218CFABAB23194B4FB6292FC5168F7B9E5031AFAF 0462696B6500002E0001000151800093002B08010001518052F4220052EAD97083770085E98E5B30D0E9C029F5C5F4186549D0241B1503DF6DEFCF13A73FA4DE45CC9918F1AFB9A52AC038A093A03F57858F72B0AE1D48DCA7F915526347F45E9BD33C30EB39A6BB246A457A71D430698FFE2ABB33994470740D23A4F40068747CF9A115436E1CA4B48D97AF41B77DFE937DB8F2FB387A197D1FDDCB389F432033E4E7 bike. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hemOWzDQ6cAp9cX0GGVJ0CQbFQPfbe/PE6c/pN5FzJkY8a+5pSrAOKCToD9XhY9ysK4dSNyn+RVSY0f0XpvTPDDrOaa7JGpFenHUMGmP/iq7M5lEcHQNI6T0AGh0fPmhFUNuHKS0jZevQbd9/pN9uPL7OHoZfR/dyzifQyAz5Oc= ;{id = 33655} 0462696B6500002E0001000151800093002F08010001518052F4220052EAD97083770017674A9D823554D367718FEBF2EFE948EE5CA3F78BCB54533A7C895800B46CC13D06A086E0EE0C3B0FF76999B3D93198645408C907926ED799379FCBBCD7366DECF22D1DCF4A50475D487C678A1C81F3DF02FCE987466FC8F3D944FCCE24F5158B6717B3608C80D5B88BBFE6DE9D84F0C77803E8BD253819A7E907CDC7727BF6 bike. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . F2dKnYI1VNNncY/r8u/pSO5co/eLy1RTOnyJWAC0bME9BqCG4O4MOw/3aZmz2TGYZFQIyQeSbteZN5/LvNc2bezyLR3PSlBHXUh8Z4ocgfPfAvzph0ZvyPPZRPzOJPUVi2cXs2CMgNW4i7/m3p2E8Md4A+i9JTgZp+kHzcdye/Y= ;{id = 33655} 0462696B6500002F000100015180000D0362697A000006200000000013 bike. 86400 IN NSEC biz. NS DS RRSIG NSEC 0362697A00000200010002A300000C01610467746C640362697A00 biz. 172800 IN NS a.gtld.biz. 0362697A00000200010002A300000C01620467746C640362697A00 biz. 172800 IN NS b.gtld.biz. 0362697A00000200010002A300000C01630467746C640362697A00 biz. 172800 IN NS c.gtld.biz. 0362697A00000200010002A300000C01650467746C640362697A00 biz. 172800 IN NS e.gtld.biz. 0362697A00000200010002A300000C01660467746C640362697A00 biz. 172800 IN NS f.gtld.biz. 0362697A00000200010002A300000C016B0467746C640362697A00 biz. 172800 IN NS k.gtld.biz. 0362697A00002B0001000151800018559608015EAA597F7A5D92ECB6DB62B04423B5315CC807AB biz. 86400 IN DS 21910 8 1 5EAA597F7A5D92ECB6DB62B04423B5315CC807AB 0362697A00002B0001000151800024559608027C3B5FF5E65827A3D7CE2394B67891477779DCF28AF01BF12422E9EA1A455D73 biz. 86400 IN DS 21910 8 2 7C3B5FF5E65827A3D7CE2394B67891477779DCF28AF01BF12422E9EA1A455D73 0362697A00002E0001000151800093002B08010001518052F4220052EAD970837700A0144A20A135B60D377A75A67684CFF5231A69C5CC9C364C00E125CCAEB2D16DDFB9A9C66CAA593D1F651209D9BFDE15621720BEE8EB4702450C9D49D1079C5B6BE01FE1A47EC1168663BD64112EBFE683A71AB3CD05127A823F5B19419621F8F00082C6E770488DB6AFBFB7B916BB4E94AD27B037B989F84F8A0879899AEBA0 biz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oBRKIKE1tg03enWmdoTP9SMaacXMnDZMAOElzK6y0W3fuanGbKpZPR9lEgnZv94VYhcgvujrRwJFDJ1J0QecW2vgH+GkfsEWhmO9ZBEuv+aDpxqzzQUSeoI/WxlBliH48ACCxudwSI22r7+3uRa7TpStJ7A3uYn4T4oIeYma66A= ;{id = 33655} 0362697A00002E0001000151800093002F08010001518052F4220052EAD9708377002BA4CBDBB37BF0E72DD04793648DC0765C08EE11FE4EED801FFB8B508FB5E2C865A015B718C08766790A798BB3C5361D9AD3BC0069E70C5BF9D0CB95ECB62970B74BDA0C8DA401B8688554E207EFF20C16AB1FCB7344C15A7A1778DA43C3D6F85CFCAD9DFEF6D37D2AA9B4FC9351CC97ACF68922DED210ECD226846B79387B26 biz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K6TL27N78Oct0EeTZI3AdlwI7hH+Tu2AH/uLUI+14shloBW3GMCHZnkKeYuzxTYdmtO8AGnnDFv50MuV7LYpcLdL2gyNpAG4aIVU4gfv8gwWqx/Lc0TBWnoXeNpDw9b4XPytnf72030qqbT8k1HMl6z2iSLe0hDs0iaEa3k4eyY= ;{id = 33655} 0362697A00002F000100015180000C02626A000006200000000013 biz. 86400 IN NSEC bj. NS DS RRSIG NSEC 01610467746C640362697A00000100010002A30000049C9A7C41 a.gtld.biz. 172800 IN A 156.154.124.65 01610467746C640362697A00001C00010002A3000010200105037BBBFFFFFFFFFFFFFFFFFF7E a.gtld.biz. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e 01620467746C640362697A00000100010002A30000049C9A7D41 b.gtld.biz. 172800 IN A 156.154.125.65 01630467746C640362697A00000100010002A30000049C9A7F41 c.gtld.biz. 172800 IN A 156.154.127.65 01650467746C640362697A00000100010002A30000049C9A7E41 e.gtld.biz. 172800 IN A 156.154.126.65 01660467746C640362697A00000100010002A3000004D1AD3A42 f.gtld.biz. 172800 IN A 209.173.58.66 01660467746C640362697A00001C00010002A300001020010500368200000000000000000012 f.gtld.biz. 172800 IN AAAA 2001:500:3682::12 016B0467746C640362697A00000100010002A30000049C9A8041 k.gtld.biz. 172800 IN A 156.154.128.65 016B0467746C640362697A00001C00010002A300001020010503E23900000000000000030002 k.gtld.biz. 172800 IN AAAA 2001:503:e239::3:2 02626A00000200010002A300001B02626A056363746C640761757468646E730472697065036E657400 bj. 172800 IN NS bj.cctld.authdns.ripe.net. 02626A00000200010002A300000D03626F77047261696E02667200 bj. 172800 IN NS bow.rain.fr. 02626A00000200010002A300000F036E733106696E746E657402626A00 bj. 172800 IN NS ns1.intnet.bj. 02626A00000200010002A3000013056E732D626A07616672696E6963036E657400 bj. 172800 IN NS ns-bj.afrinic.net. 02626A00000200010002A3000012066E616B61796F066C656C616E6402626A00 bj. 172800 IN NS nakayo.leland.bj. 02626A00002F000100015180000C02626D000006200000000003 bj. 86400 IN NSEC bm. NS RRSIG NSEC 02626A00002E0001000151800093002F08010001518052F4220052EAD97083770037C6C7124A36236D0F4AFE3FAF993F16E28761E0FFA060B08DC199320C08BE45ADE456196538E703862017288A0C82B2DFCCA287F113BA81AC26F7DCA503C87DCBB24C70E67BF7A36A62DD529C4FF41B4EFB83A27ED899CE57F186C26DBE3AED230ACE0484C4C47BE1C2529E22E3B22283FA37DCD68417659FFCB1792DC408AB bj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . N8bHEko2I20PSv4/r5k/FuKHYeD/oGCwjcGZMgwIvkWt5FYZZTjnA4YgFyiKDIKy38yih/ETuoGsJvfcpQPIfcuyTHDme/ejamLdUpxP9BtO+4OiftiZzlfxhsJtvjrtIwrOBITExHvhwlKeIuOyIoP6N9zWhBdln/yxeS3ECKs= ;{id = 33655} 036E733106696E746E657402626A00000100010002A3000004515BE112 ns1.intnet.bj. 172800 IN A 81.91.225.18 066E616B61796F066C656C616E6402626A00000100010002A3000004515BE101 nakayo.leland.bj. 172800 IN A 81.91.225.1 02626D00000200010002A300000B026E73027575036E657400 bm. 172800 IN NS ns.uu.net. 02626D00000200010002A3000008036E733102626D00 bm. 172800 IN NS ns1.bm. 02626D00000200010002A300000C036E73310369626C02626D00 bm. 172800 IN NS ns1.ibl.bm. 02626D00000200010002A3000008036E733202626D00 bm. 172800 IN NS ns2.bm. 02626D00000200010002A300000C036E73320369626C02626D00 bm. 172800 IN NS ns2.ibl.bm. 02626D00000200010002A3000008036E733302626D00 bm. 172800 IN NS ns3.bm. 02626D00000200010002A30000100573756E69630573756E657402736500 bm. 172800 IN NS sunic.sunet.se. 02626D00000200010002A300001206617574683032026E73027575036E657400 bm. 172800 IN NS auth02.ns.uu.net. 02626D00002F000100015180000C02626E000006200000000003 bm. 86400 IN NSEC bn. NS RRSIG NSEC 02626D00002E0001000151800093002F08010001518052F4220052EAD9708377009875B6EB182E3C86F61B803ACC5C2E046D88198C58915C4146AC6C4DE231E33F097E2DA497C865EF47CAE2A185363D6CFC5659AA3A18BD66BCE80795693F040639D8BEB3CAD44EB86CB24DD9AE18B1F7E931EE9E1B02A2053CA462DA5D1346671EAC504F465B5FCF1B886E5C1A7D71F7165DF686D8F207B8D460D74D50A346AE bm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mHW26xguPIb2G4A6zFwuBG2IGYxYkVxBRqxsTeIx4z8Jfi2kl8hl70fK4qGFNj1s/FZZqjoYvWa86AeVaT8EBjnYvrPK1E64bLJN2a4YsffpMe6eGwKiBTykYtpdE0ZnHqxQT0ZbX88biG5cGn1x9xZd9obY8ge41GDXTVCjRq4= ;{id = 33655} 036E73310369626C02626D00000100010002A3000004C6CF1732 ns1.ibl.bm. 172800 IN A 198.207.23.50 036E73320369626C02626D00000100010002A3000004C7ACC002 ns2.ibl.bm. 172800 IN A 199.172.192.2 036E733102626D00000100010002A3000004CE35BECA ns1.bm. 172800 IN A 206.53.190.202 036E733202626D00000100010002A30000044511C201 ns2.bm. 172800 IN A 69.17.194.1 036E733302626D00000100010002A3000004CFE4860A ns3.bm. 172800 IN A 207.228.134.10 02626E00000200010002A300000F036A7462066272756E657402626E00 bn. 172800 IN NS jtb.brunet.bn. 02626E00000200010002A300000F036E7332066272756E657402626E00 bn. 172800 IN NS ns2.brunet.bn. 02626E00000200010002A3000010056E732D626E0472697065036E657400 bn. 172800 IN NS ns-bn.ripe.net. 02626E00000200010002A300001307646E73312D746C066272756E657402626E00 bn. 172800 IN NS dns1-tl.brunet.bn. 02626E00000200010002A300001307646E73322D746C066272756E657402626E00 bn. 172800 IN NS dns2-tl.brunet.bn. 02626E00002F000100015180000C02626F000006200000000003 bn. 86400 IN NSEC bo. NS RRSIG NSEC 02626E00002E0001000151800093002F08010001518052F4220052EAD97083770001E6983F9156B5113CE243DDE81563EC961BEA801D57B47AA1C4B084C80B63852AAEE81AF55D6A2B939DD34545CBEEC29C3FD7DE4FA6441B0152579386423055B27904E2B5A7F73ACFCF208CC3C0066B89A066928902B0A4978BEEBBC3D18319E8011761F8228197412634B6F1CE53C77D67393E283D894CF975B0B34FFAEA97 bn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . AeaYP5FWtRE84kPd6BVj7JYb6oAdV7R6ocSwhMgLY4Uqruga9V1qK5Od00VFy+7CnD/X3k+mRBsBUleThkIwVbJ5BOK1p/c6z88gjMPABmuJoGaSiQKwpJeL7rvD0YMZ6AEXYfgigZdBJjS28c5Tx31nOT4oPYlM+XWws0/66pc= ;{id = 33655} 07646E73312D746C066272756E657402626E00000100010002A3000004CAA00909 dns1-tl.brunet.bn. 172800 IN A 202.160.9.9 07646E73322D746C066272756E657402626E00000100010002A3000004CAA0090A dns2-tl.brunet.bn. 172800 IN A 202.160.9.10 036A7462066272756E657402626E00000100010002A3000004CAA00802 jtb.brunet.bn. 172800 IN A 202.160.8.2 036E7332066272756E657402626E00000100010002A3000004CAA00814 ns2.brunet.bn. 172800 IN A 202.160.8.20 02626F00000200010002A300000B026E7303646E7302627200 bo. 172800 IN NS ns.dns.br. 02626F00000200010002A3000011057574616D6106626F6C6E657402626F00 bo. 172800 IN NS utama.bolnet.bo. 02626F00000200010002A300001307616E7963617374026E73036E696302626F00 bo. 172800 IN NS anycast.ns.nic.bo. 02626F00002F000100015180001208626F757469717565000006200000000003 bo. 86400 IN NSEC boutique. NS RRSIG NSEC 02626F00002E0001000151800093002F08010001518052F4220052EAD9708377007C3B2CD0213C0F9931316A2F2C3B6A5096EC0EBBBCF4624AE2165733E811F0365FE2D334CACF703DCD85A6B16B32AE0C0E24B1285092B20077634DC463E84284F096F4F5C8A77F454FA72EC2ECF187EA6ADF332DD12E6AAB0229F25194C4DA8964C8E842959F8CE3DE036E1A2F9D5C0D7B84706646E600D595C2C5A99950276B bo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fDss0CE8D5kxMWovLDtqUJbsDru89GJK4hZXM+gR8DZf4tM0ys9wPc2FprFrMq4MDiSxKFCSsgB3Y03EY+hChPCW9PXIp39FT6cuwuzxh+pq3zMt0S5qqwIp8lGUxNqJZMjoQpWfjOPeA24aL51cDXuEcGZG5gDVlcLFqZlQJ2s= ;{id = 33655} 057574616D6106626F6C6E657402626F00000100010002A3000004A6720128 utama.bolnet.bo. 172800 IN A 166.114.1.40 07616E7963617374026E73036E696302626F00000100010002A3000004CC3DD830 anycast.ns.nic.bo. 172800 IN A 204.61.216.48 07616E7963617374026E73036E696302626F00001C00010002A3000010200105000014604800AD000000000001 anycast.ns.nic.bo. 172800 IN AAAA 2001:500:14:6048:ad::1 08626F75746971756500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 boutique. 172800 IN NS demand.beta.aridns.net.au. 08626F75746971756500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 boutique. 172800 IN NS demand.alpha.aridns.net.au. 08626F75746971756500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 boutique. 172800 IN NS demand.delta.aridns.net.au. 08626F75746971756500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 boutique. 172800 IN NS demand.gamma.aridns.net.au. 08626F75746971756500002B0001000151800024BBFF08023400E946A0A57CB11A176DEAC77AB42934513EFE0A8B5BE0203921AB1888EE81 boutique. 86400 IN DS 48127 8 2 3400E946A0A57CB11A176DEAC77AB42934513EFE0A8B5BE0203921AB1888EE81 08626F75746971756500002E0001000151800093002B08010001518052F4220052EAD9708377006CE5CC02F5C809FA28C407FFFAA5E62D857A47DD642F30719E1307FD7B276717BFF3F5B606DA58C6A387890B55472967B5FEA9DBCC509CD4352840C77068016D319EC92D1AB4B08CAE0CE9F6824CDE15941653995D82A1B22F87A80EE8DC744EA49B07D1849CD2F981197393E53BD376EF705B4AC35BF64B49ED75DE4ECFFE09 boutique. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bOXMAvXICfooxAf/+qXmLYV6R91kLzBxnhMH/XsnZxe/8/W2BtpYxqOHiQtVRylntf6p28xQnNQ1KEDHcGgBbTGeyS0atLCMrgzp9oJM3hWUFlOZXYKhsi+HqA7o3HROpJsH0YSc0vmBGXOT5TvTdu9wW0rDW/ZLSe113k7P/gk= ;{id = 33655} 08626F75746971756500002E0001000151800093002F08010001518052F4220052EAD970837700BD04E42F72116BDCEE24335A4E05C6F631050533164B3C7C9D191873A3F6E759F6B37FA2F1F395DA6FFAFB35D7B002314E9C76D6B007C3344AA891938AD101FC290E16CB40D6BFB39CFA5CD4339FC6FDDC368E54DBDE9665E38D8438096AAF8B551D8F7F5EF4B90DF697A09F09053A40828ECCDF3AE08692CBF3A9D21FCE84C8 boutique. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vQTkL3IRa9zuJDNaTgXG9jEFBTMWSzx8nRkYc6P251n2s3+i8fOV2m/6+zXXsAIxTpx21rAHwzRKqJGTitEB/CkOFstA1r+znPpc1DOfxv3cNo5U296WZeONhDgJaq+LVR2Pf170uQ32l6CfCQU6QIKOzN864IaSy/Op0h/OhMg= ;{id = 33655} 08626F75746971756500002F000100015180000C026272000006200000000013 boutique. 86400 IN NSEC br. NS DS RRSIG NSEC 02627200002F000100015180000C026273000006200000000013 br. 86400 IN NSEC bs. NS DS RRSIG NSEC 02627200002E0001000151800093002F08010001518052F4220052EAD9708377006454605A7B4C0A8E9F651006E88261FCC3F9D53D7E654E137B2409EF7FADBC03B5E8ADE7E05AAA055C116E0844554E61FB946CF13625A7015D921EE1CEAF79F8F4B57D99484E6F82F881559823EA10183C5C3C574D2CEF480F02177D3C956ECDCA414A287CF1801ED9E7EFAC6C1432F5D029AFC169080C48F2250F1A837157A7 br. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZFRgWntMCo6fZRAG6IJh/MP51T1+ZU4TeyQJ73+tvAO16K3n4FqqBVwRbghEVU5h+5Rs8TYlpwFdkh7hzq95+PS1fZlITm+C+IFVmCPqEBg8XDxXTSzvSA8CF308lW7NykFKKHzxgB7Z5++sbBQy9dApr8FpCAxI8iUPGoNxV6c= ;{id = 33655} 02627200002E0001000151800093002B08010001518052F4220052EAD9708377006846DEE74AB9BFD03B1E1FAB3B4B29732EA37E9F2188F3CD1666A01448E2AF73F19BC126D7E6D6FB6BF56641C90859BA8FC3A1AE0E07FD03FE390121DD5AFE4BD76D371CAD53A49F0A64E76EFEC1130354A6D05A22549B4877C07B6E4B8EDBC473843E5145C853CAB5194154ED56F06059DF707A91E45B095E90D26E655ACF50 br. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aEbe50q5v9A7Hh+rO0spcy6jfp8hiPPNFmagFEjir3Pxm8Em1+bW+2v1ZkHJCFm6j8Ohrg4H/QP+OQEh3Vr+S9dtNxytU6SfCmTnbv7BEwNUptBaIlSbSHfAe25LjtvEc4Q+UUXIU8q1GUFU7VbwYFnfcHqR5FsJXpDSbmVaz1A= ;{id = 33655} 02627200000200010002A300000A016103646E7302627200 br. 172800 IN NS a.dns.br. 02627200000200010002A300000A016203646E7302627200 br. 172800 IN NS b.dns.br. 02627200000200010002A300000A016303646E7302627200 br. 172800 IN NS c.dns.br. 02627200000200010002A300000A016403646E7302627200 br. 172800 IN NS d.dns.br. 02627200000200010002A300000A016503646E7302627200 br. 172800 IN NS e.dns.br. 02627200000200010002A300000A016603646E7302627200 br. 172800 IN NS f.dns.br. 02627200002B0001000151800018A2CA0501EAA0978F38879DB70A53F9FF1ACF21D046A98B5C br. 86400 IN DS 41674 5 1 EAA0978F38879DB70A53F9FF1ACF21D046A98B5C 016103646E7302627200000100010002A3000004C8A0000A a.dns.br. 172800 IN A 200.160.0.10 016103646E7302627200001C00010002A3000010200112FF000000000000000000000010 a.dns.br. 172800 IN AAAA 2001:12ff::10 016203646E7302627200000100010002A3000004C8BD290A b.dns.br. 172800 IN A 200.189.41.10 016303646E7302627200000100010002A3000004C8C0E90A c.dns.br. 172800 IN A 200.192.233.10 016403646E7302627200000100010002A3000004C8DB9A0A d.dns.br. 172800 IN A 200.219.154.10 016403646E7302627200001C00010002A3000010200112F8000400000000000000000010 d.dns.br. 172800 IN AAAA 2001:12f8:4::10 016503646E7302627200000100010002A3000004C8E5F80A e.dns.br. 172800 IN A 200.229.248.10 016503646E7302627200001C00010002A3000010200112F8000100000000000000000010 e.dns.br. 172800 IN AAAA 2001:12f8:1::10 016603646E7302627200000100010002A3000004C8DB9F0A f.dns.br. 172800 IN A 200.219.159.10 026E7303646E7302627200000100010002A3000004C8A00005 ns.dns.br. 172800 IN A 200.160.0.5 026E7303646E7302627200001C00010002A3000010200112FF00000A200000000000000005 ns.dns.br. 172800 IN AAAA 2001:12ff:0:a20::5 02627300000200010002A300000C03646E73036E696302627300 bs. 172800 IN NS dns.nic.bs. 02627300000200010002A300001204757072310375707203636C750365647500 bs. 172800 IN NS upr1.upr.clu.edu. 02627300000200010002A300000F05616E796E7303706368036E657400 bs. 172800 IN NS anyns.pch.net. 02627300002F000100015180000C026274000006200000000003 bs. 86400 IN NSEC bt. NS RRSIG NSEC 02627300002E0001000151800093002F08010001518052F4220052EAD970837700BB8B3C17EB6C4A5B648C192C3DC7291D8433BADE2DC15C4385B6A91F02163A6813D1428E3341F3A60CFD155504CE49EB741C921426B622F8DFC596883E77E8CC6A61A113828CCD4696C3E20400AA9ED49DC9370AC77696EE724D7D76F7682DCF57EB6BEA1BD2202751FCCA6169A1EA89BA43044CCB1577AFA07D9A07B4202C09 bs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . u4s8F+tsSltkjBksPccpHYQzut4twVxDhbapHwIWOmgT0UKOM0Hzpgz9FVUEzknrdBySFCa2IvjfxZaIPnfozGphoROCjM1GlsPiBACqntSdyTcKx3aW7nJNfXb3aC3PV+tr6hvSICdR/MphaaHqibpDBEzLFXevoH2aB7QgLAk= ;{id = 33655} 03646E73036E696302627300000100010002A3000004CE3003A8 dns.nic.bs. 172800 IN A 206.48.3.168 02627400000200010002A300001B026274056363746C640761757468646E730472697065036E657400 bt. 172800 IN NS bt.cctld.authdns.ripe.net. 02627400000200010002A300000B026E730369747502636800 bt. 172800 IN NS ns.itu.ch. 02627400000200010002A3000010036E7331076472756B6E657402627400 bt. 172800 IN NS ns1.druknet.bt. 02627400000200010002A3000010036E7332076472756B6E657402627400 bt. 172800 IN NS ns2.druknet.bt. 02627400000200010002A3000010036E7333076472756B6E657402627400 bt. 172800 IN NS ns3.druknet.bt. 02627400000200010002A300001206617574683030026E73027575036E657400 bt. 172800 IN NS auth00.ns.uu.net. 02627400000200010002A300001206617574683631026E73027575036E657400 bt. 172800 IN NS auth61.ns.uu.net. 02627400002F000100015180000F056275696C64000006200000000003 bt. 86400 IN NSEC build. NS RRSIG NSEC 02627400002E0001000151800093002F08010001518052F4220052EAD9708377006592927A77C6FF07D2823E82A0A6CDA502F37E98636A5F2CD48A8E11948B573C9EA55D7FA5A08C5F7E363E5B8401A096EE1CED8EA8D3C6D6985B512F9CD4DBCCDB4774CF6F600407F4FD3E18AEE8B919A09B3DC0F79B70E9CE67D6DAC5907456A4F1F22ADDFA4FA8662EF0048E7868F6580D1E1745070CD083439DCB3F6C575E bt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZZKSenfG/wfSgj6CoKbNpQLzfphjal8s1IqOEZSLVzyepV1/paCMX342PluEAaCW7hztjqjTxtaYW1EvnNTbzNtHdM9vYAQH9P0+GK7ouRmgmz3A95tw6c5n1trFkHRWpPHyKt36T6hmLvAEjnho9lgNHhdFBwzQg0Odyz9sV14= ;{id = 33655} 036E7331076472756B6E657402627400000100010002A3000004CA9080C8 ns1.druknet.bt. 172800 IN A 202.144.128.200 036E7331076472756B6E657402627400001C00010002A30000102405D000000001000000000000000200 ns1.druknet.bt. 172800 IN AAAA 2405:d000:0:100::200 036E7332076472756B6E657402627400000100010002A3000004CA9080D2 ns2.druknet.bt. 172800 IN A 202.144.128.210 036E7332076472756B6E657402627400001C00010002A30000102405D000000001000000000000000210 ns2.druknet.bt. 172800 IN AAAA 2405:d000:0:100::210 036E7333076472756B6E657402627400000100010002A3000004CC3DD811 ns3.druknet.bt. 172800 IN A 204.61.216.17 036E7333076472756B6E657402627400001C00010002A3000010200105000014601700AD000000000001 ns3.druknet.bt. 172800 IN AAAA 2001:500:14:6017:ad::1 056275696C6400000200010002A300000D0161036E6963056275696C6400 build. 172800 IN NS a.nic.build. 056275696C6400000200010002A300000D0162036E6963056275696C6400 build. 172800 IN NS b.nic.build. 056275696C6400000200010002A300000D0163036E6963056275696C6400 build. 172800 IN NS c.nic.build. 056275696C6400000200010002A300000D0164036E6963056275696C6400 build. 172800 IN NS d.nic.build. 056275696C6400002B000100015180002448CA080297A275D8F2C987FB681D6E7C650FEFBF8EAE8ED9743822A3D9767F0DC3502938 build. 86400 IN DS 18634 8 2 97A275D8F2C987FB681D6E7C650FEFBF8EAE8ED9743822A3D9767F0DC3502938 056275696C6400002E0001000151800093002B08010001518052F4220052EAD9708377005BA01A0780D6D92B2E1127CEA70BEAA8C2C7D4210EF96DDF575491A0A20A820275CF6CECAF630862A2CFE20FA19CA16DC8A2219995BF25B0270D7850209527DDD6BCEDC91F997D22A45D71B9B678F4496ECEBF2B3F47FD41275FDFB9EA700C5F09752013B1511D0DB613C50903ACCD719F1893D70DFB340C8BC3DD0F2F07B85E build. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . W6AaB4DW2SsuESfOpwvqqMLH1CEO+W3fV1SRoKIKggJ1z2zsr2MIYqLP4g+hnKFtyKIhmZW/JbAnDXhQIJUn3da87ckfmX0ipF1xubZ49Eluzr8rP0f9QSdf37nqcAxfCXUgE7FRHQ22E8UJA6zNcZ8Yk9cN+zQMi8PdDy8HuF4= ;{id = 33655} 056275696C6400002E0001000151800093002F08010001518052F4220052EAD97083770043863EDA8F5A2168155B4E3CCDC635BAF3CBA7D1FA2D90D40D52B6410638D7363619CB07545C40680DE93EB2792E7AD388A937A73E065AD884739A9FC53D5B070AADCB09BBA917B0C4CE7E7025B07614A82E64BB283E454FB35DE85C96CE9E61041ACA4E335276FC17052FAF5F2FD9FB032564978B6A5F8F320BAE82DD9504F4 build. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Q4Y+2o9aIWgVW048zcY1uvPLp9H6LZDUDVK2QQY41zY2GcsHVFxAaA3pPrJ5LnrTiKk3pz4GWtiEc5qfxT1bBwqtywm7qRewxM5+cCWwdhSoLmS7KD5FT7Nd6FyWzp5hBBrKTjNSdvwXBS+vXy/Z+wMlZJeLal+PMguugt2VBPQ= ;{id = 33655} 056275696C6400002F0001000151800012086275696C64657273000006200000000013 build. 86400 IN NSEC builders. NS DS RRSIG NSEC 0161036E6963056275696C6400000100010002A300000425D1C00A a.nic.build. 172800 IN A 37.209.192.10 0161036E6963056275696C6400001C00010002A300001020010DCD000100000000000000000010 a.nic.build. 172800 IN AAAA 2001:dcd:1::10 0162036E6963056275696C6400000100010002A300000425D1C20A b.nic.build. 172800 IN A 37.209.194.10 0162036E6963056275696C6400001C00010002A300001020010DCD000200000000000000000010 b.nic.build. 172800 IN AAAA 2001:dcd:2::10 0163036E6963056275696C6400000100010002A300000425D1C40A c.nic.build. 172800 IN A 37.209.196.10 0163036E6963056275696C6400001C00010002A300001020010DCD000300000000000000000010 c.nic.build. 172800 IN AAAA 2001:dcd:3::10 0164036E6963056275696C6400000100010002A300000425D1C60A d.nic.build. 172800 IN A 37.209.198.10 0164036E6963056275696C6400001C00010002A300001020010DCD000400000000000000000010 d.nic.build. 172800 IN AAAA 2001:dcd:4::10 086275696C6465727300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 builders. 172800 IN NS demand.beta.aridns.net.au. 086275696C6465727300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 builders. 172800 IN NS demand.alpha.aridns.net.au. 086275696C6465727300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 builders. 172800 IN NS demand.delta.aridns.net.au. 086275696C6465727300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 builders. 172800 IN NS demand.gamma.aridns.net.au. 086275696C6465727300002B0001000151800024E587080237BDBEAC742E662C91717356028143903ECD1DE08FA2D8CAA5367790A94D3110 builders. 86400 IN DS 58759 8 2 37BDBEAC742E662C91717356028143903ECD1DE08FA2D8CAA5367790A94D3110 086275696C6465727300002E0001000151800093002B08010001518052F4220052EAD9708377003AE62AD5728252FB39429B8512C746708CE5B6ECAA1CA2514AFD31B2283F521290DAB4039B7A019033EBD888CD6595F64579DA0CD72AC107A72BA4446A9C237112EA34C2FA95AD17693E8D2CCFEEBEC106A416F57E802D9721DEF271F18493D0E1EF78FF2675296D7BE31298A1546A93AE6C648C7CC34010FE4FC912EB408867 builders. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OuYq1XKCUvs5QpuFEsdGcIzltuyqHKJRSv0xsig/UhKQ2rQDm3oBkDPr2IjNZZX2RXnaDNcqwQenK6REapwjcRLqNML6la0XaT6NLM/uvsEGpBb1foAtlyHe8nHxhJPQ4e94/yZ1KW174xKYoVRqk65sZIx8w0AQ/k/JEutAiGc= ;{id = 33655} 086275696C6465727300002E0001000151800093002F08010001518052F4220052EAD97083770068DBF53368C5849CCC4CA270BAE751F05F40E03142BE86CEC37B0429D9DEAA1FC28237FD43B7DF07D040DD7CE5F9E2BDBB90CB14593F78AE4940616A018962E6D7D886322F067E5618BD741DD3006F8DAFEC77A82E68C0FB310E4E7F662A8A7B54E46FDECDF799C369C68B04352AC9B95A55136259E0057A0170BCF3CB2CE3D2 builders. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aNv1M2jFhJzMTKJwuudR8F9A4DFCvobOw3sEKdneqh/Cgjf9Q7ffB9BA3Xzl+eK9u5DLFFk/eK5JQGFqAYli5tfYhjIvBn5WGL10HdMAb42v7HeoLmjA+zEOTn9mKop7VORv3s33mcNpxosENSrJuVpVE2JZ4AV6AXC888ss49I= ;{id = 33655} 086275696C6465727300002F000100015180000E0462757A7A000006200000000013 builders. 86400 IN NSEC buzz. NS DS RRSIG NSEC 0462757A7A00000200010002A3000012036E733103646E73036E69630462757A7A00 buzz. 172800 IN NS ns1.dns.nic.buzz. 0462757A7A00000200010002A3000012036E733203646E73036E69630462757A7A00 buzz. 172800 IN NS ns2.dns.nic.buzz. 0462757A7A00000200010002A3000012036E733303646E73036E69630462757A7A00 buzz. 172800 IN NS ns3.dns.nic.buzz. 0462757A7A00000200010002A3000012036E733403646E73036E69630462757A7A00 buzz. 172800 IN NS ns4.dns.nic.buzz. 0462757A7A00000200010002A3000012036E733503646E73036E69630462757A7A00 buzz. 172800 IN NS ns5.dns.nic.buzz. 0462757A7A00000200010002A3000012036E733603646E73036E69630462757A7A00 buzz. 172800 IN NS ns6.dns.nic.buzz. 0462757A7A00000200010002A3000012036E733703646E73036E69630462757A7A00 buzz. 172800 IN NS ns7.dns.nic.buzz. 0462757A7A00002B0001000151800018BAF80801455F2C4738D8D597E70EE16AD30C249839C13EC9 buzz. 86400 IN DS 47864 8 1 455F2C4738D8D597E70EE16AD30C249839C13EC9 0462757A7A00002B0001000151800024BAF80802A7178B083CB8C38492BBA8B7BF71F2D86B892CD851FECB81EE2FFFB55097F78A buzz. 86400 IN DS 47864 8 2 A7178B083CB8C38492BBA8B7BF71F2D86B892CD851FECB81EE2FFFB55097F78A 0462757A7A00002E0001000151800093002B08010001518052F4220052EAD9708377006BB20A3D9E90F4E94CFE9A61B5545F2EEF1BFD22B43AE542D8FA31E0011D31221B868D22BDA07812DC8DFD4801CBC0959760023BC6EE1F9C34CC6470C19874A6135037F45E5CDA7D1EA943B5C4D2A491789C8F15948AF72AD2499D82AC65E4303744AC919066DBCBC13F76AEFD6B2C92B873446FE01D616E5194148F4F105AC2 buzz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . a7IKPZ6Q9OlM/pphtVRfLu8b/SK0OuVC2Pox4AEdMSIbho0ivaB4EtyN/UgBy8CVl2ACO8buH5w0zGRwwZh0phNQN/ReXNp9HqlDtcTSpJF4nI8VlIr3KtJJnYKsZeQwN0SskZBm28vBP3au/WsskrhzRG/gHWFuUZQUj08QWsI= ;{id = 33655} 0462757A7A00002E0001000151800093002F08010001518052F4220052EAD970837700587A3AE42FDCCDB9D589B31558A0FA904745381380F3F47C2BDE6CE60573E7E1AD4D95938A5BEAB50556E91959A9CE3798AAED94D47D42C09F80D21F779704D419746559AAFEB3F75864EB3EB8808D9E0D8A6324CF061A0734E556132DA7BBC09D93836D4C2C0327FF04AF3C1ED3148C2D264F860668C7367355D55E3FC04E7D buzz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WHo65C/czbnVibMVWKD6kEdFOBOA8/R8K95s5gVz5+GtTZWTilvqtQVW6RlZqc43mKrtlNR9QsCfgNIfd5cE1Bl0ZVmq/rP3WGTrPriAjZ4NimMkzwYaBzTlVhMtp7vAnZODbUwsAyf/BK88HtMUjC0mT4YGaMc2c1XVXj/ATn0= ;{id = 33655} 0462757A7A00002F000100015180000C026276000006200000000013 buzz. 86400 IN NSEC bv. NS DS RRSIG NSEC 036E733103646E73036E69630462757A7A00000100010002A30000049C9A901D ns1.dns.nic.buzz. 172800 IN A 156.154.144.29 036E733103646E73036E69630462757A7A00001C00010002A3000010261000A110710000000000000000001D ns1.dns.nic.buzz. 172800 IN AAAA 2610:a1:1071::1d 036E733203646E73036E69630462757A7A00000100010002A30000049C9A911D ns2.dns.nic.buzz. 172800 IN A 156.154.145.29 036E733203646E73036E69630462757A7A00001C00010002A3000010261000A110720000000000000000001D ns2.dns.nic.buzz. 172800 IN AAAA 2610:a1:1072::1d 036E733303646E73036E69630462757A7A00000100010002A30000049C9A9F1D ns3.dns.nic.buzz. 172800 IN A 156.154.159.29 036E733303646E73036E69630462757A7A00001C00010002A3000010261000A110730000000000000000001D ns3.dns.nic.buzz. 172800 IN AAAA 2610:a1:1073::1d 036E733403646E73036E69630462757A7A00000100010002A30000049C9A9C1D ns4.dns.nic.buzz. 172800 IN A 156.154.156.29 036E733403646E73036E69630462757A7A00001C00010002A3000010261000A110740000000000000000001D ns4.dns.nic.buzz. 172800 IN AAAA 2610:a1:1074::1d 036E733503646E73036E69630462757A7A00000100010002A30000049C9A9D1D ns5.dns.nic.buzz. 172800 IN A 156.154.157.29 036E733503646E73036E69630462757A7A00001C00010002A3000010261000A110750000000000000000001D ns5.dns.nic.buzz. 172800 IN AAAA 2610:a1:1075::1d 036E733603646E73036E69630462757A7A00000100010002A30000049C9A9E1D ns6.dns.nic.buzz. 172800 IN A 156.154.158.29 036E733603646E73036E69630462757A7A00001C00010002A3000010261000A110760000000000000000001D ns6.dns.nic.buzz. 172800 IN AAAA 2610:a1:1076::1d 036E733703646E73036E69630462757A7A00000100010002A3000004CF22050A ns7.dns.nic.buzz. 172800 IN A 207.34.5.10 036E733703646E73036E69630462757A7A00001C00010002A3000010200105037BBBFFFFFFFFFFFFFFFFFF7E ns7.dns.nic.buzz. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e 02627600000200010002A300000F026E6E07756E696E657474026E6F00 bv. 172800 IN NS nn.uninett.no. 02627600000200010002A3000008036E6163026E6F00 bv. 172800 IN NS nac.no. 02627600000200010002A300001206736572766572056E6F726475036E657400 bv. 172800 IN NS server.nordu.net. 02627600002F000100015180000C026277000006200000000003 bv. 86400 IN NSEC bw. NS RRSIG NSEC 02627600002E0001000151800093002F08010001518052F4220052EAD970837700308CE96A1A19E25F767BAF6D0A704CEA5FCB670BA153FD7C24A987CBF66F9BC6E8DC591F9E3EC9D7FA2DEC07C417F09C527823C8007A1E378BFD77C81EFC9456E0B60507DFB9E77441AEC8D4B1AFC86802FD30BFC92C06031C37E5E70EC18E6FA7E8C1C60117D3F184310AF9D6260A52CBD815FF546A5F85B371BF862C005A11 bv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MIzpahoZ4l92e69tCnBM6l/LZwuhU/18JKmHy/Zvm8bo3Fkfnj7J1/ot7AfEF/CcUngjyAB6HjeL/XfIHvyUVuC2BQffued0Qa7I1LGvyGgC/TC/ySwGAxw35ecOwY5vp+jBxgEX0/GEMQr51iYKUsvYFf9Ual+Fs3G/hiwAWhE= ;{id = 33655} 02627700000200010002A300000C036E73310362746302627700 bw. 172800 IN NS ns1.btc.bw. 02627700000200010002A300001003706368036E6963036E657402627700 bw. 172800 IN NS pch.nic.net.bw. 02627700000200010002A300001104646E7331036E6963036E657402627700 bw. 172800 IN NS dns1.nic.net.bw. 02627700000200010002A300001104646E7332036E6963036E657402627700 bw. 172800 IN NS dns2.nic.net.bw. 02627700000200010002A3000013056E732D627707616672696E6963036E657400 bw. 172800 IN NS ns-bw.afrinic.net. 02627700002F000100015180000C026279000006200000000003 bw. 86400 IN NSEC by. NS RRSIG NSEC 02627700002E0001000151800093002F08010001518052F4220052EAD97083770057C274850D0F122B501E478B0EB143DDA0A0309242993423EBC67839E253FC62975AF0D5319C7D51AACE1F273FACE3ECE5D6F3C330172CCE770E8762836BAA14D5FBA4A00C6F3F6F5E070173C71C50A9C592D43FACB36243CAC4569297D4566CAAE3923BE0964AAB9FDF6495C05B086A31086AA108C932D44ED4744A482B6C03 bw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . V8J0hQ0PEitQHkeLDrFD3aCgMJJCmTQj68Z4OeJT/GKXWvDVMZx9UarOHyc/rOPs5dbzwzAXLM53Dodig2uqFNX7pKAMbz9vXgcBc8ccUKnFktQ/rLNiQ8rEVpKX1FZsquOSO+CWSquf32SVwFsIajEIaqEIyTLUTtR0SkgrbAM= ;{id = 33655} 036E73310362746302627700000100010002A3000004A8A7A822 ns1.btc.bw. 172800 IN A 168.167.168.34 04646E7331036E6963036E657402627700000100010002A3000004A8A762E2 dns1.nic.net.bw. 172800 IN A 168.167.98.226 04646E7332036E6963036E657402627700000100010002A3000004A8A762DA dns2.nic.net.bw. 172800 IN A 168.167.98.218 03706368036E6963036E657402627700000100010002A3000004CC3DD846 pch.nic.net.bw. 172800 IN A 204.61.216.70 02627900000200010002A300001404646E733103746C6405747574627903636F6D00 by. 172800 IN NS dns1.tld.tutby.com. 02627900000200010002A300001404646E733203746C6405747574627903636F6D00 by. 172800 IN NS dns2.tld.tutby.com. 02627900000200010002A300001404646E733303746C6405747574627903636F6D00 by. 172800 IN NS dns3.tld.tutby.com. 02627900000200010002A300001404646E733403746C6405747574627903636F6D00 by. 172800 IN NS dns4.tld.tutby.com. 02627900000200010002A300001404646E733503746C6405747574627903636F6D00 by. 172800 IN NS dns5.tld.tutby.com. 02627900000200010002A300001404646E733603746C6405747574627903636F6D00 by. 172800 IN NS dns6.tld.tutby.com. 02627900000200010002A300001404646E733703746C6405747574627903636F6D00 by. 172800 IN NS dns7.tld.tutby.com. 02627900002B0001000151800018AB630701B5667014733F0FD07D096B2FA2AD175186ADF48C by. 86400 IN DS 43875 7 1 B5667014733F0FD07D096B2FA2AD175186ADF48C 02627900002B0001000151800024AB63070227A33067E54A8C4CEE091DB22156EF02A79A76CCC1E48D6D195DFEF6D520C48E by. 86400 IN DS 43875 7 2 27A33067E54A8C4CEE091DB22156EF02A79A76CCC1E48D6D195DFEF6D520C48E 02627900002E0001000151800093002B08010001518052F4220052EAD9708377003E1EBA3627267B788CCBA03DB03DE9B122E0A1726E7CA9E218FD828D0298E5E74C334B7A7AFC16A317CC51BFB588274FAA58016C19A10BC9738CF7FBAAFC8BBCCFE73DC3BDADFF628329764C4D84020CBFC4401BDA4BE67B2A85BEF19D7D1ABDD38B5D5264FD63AFFC573CAA4BB71F595771093D25C95E6C3D0CD81D1FBEEE39 by. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Ph66Nicme3iMy6A9sD3psSLgoXJufKniGP2CjQKY5edMM0t6evwWoxfMUb+1iCdPqlgBbBmhC8lzjPf7qvyLvM/nPcO9rf9igyl2TE2EAgy/xEAb2kvmeyqFvvGdfRq904tdUmT9Y6/8VzyqS7cfWVdxCT0lyV5sPQzYHR++7jk= ;{id = 33655} 02627900002E0001000151800093002F08010001518052F4220052EAD9708377000DD508934BEDBC667D2DE39EE26807EB4A32B7343C084FAE54353BDC019411ABED4A1296DEFFC5DA2961ABDD004E20BC2F06D8D6AE3BD388634AE590B8CF81C015A15B09EDF78FD2B9CD206BAEBDE369E62AF6415802BEDD37D5DF11E4BDC78D8723C1CD6457D724178D1C202ECB78C6B6C7FBF92C790CC940BD1DE5966AB12B by. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DdUIk0vtvGZ9LeOe4mgH60oytzQ8CE+uVDU73AGUEavtShKW3v/F2ilhq90ATiC8LwbY1q4704hjSuWQuM+BwBWhWwnt94/Suc0ga66942nmKvZBWAK+3TfV3xHkvceNhyPBzWRX1yQXjRwgLst4xrbH+/kseQzJQL0d5ZZqsSs= ;{id = 33655} 02627900002F000100015180000C02627A000006200000000013 by. 86400 IN NSEC bz. NS DS RRSIG NSEC 02627A00000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 bz. 172800 IN NS a0.cctld.afilias-nst.info. 02627A00000200010002A300001B026132056363746C640B6166696C6961732D6E737404696E666F00 bz. 172800 IN NS a2.cctld.afilias-nst.info. 02627A00000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 bz. 172800 IN NS b0.cctld.afilias-nst.org. 02627A00000200010002A300001A026232056363746C640B6166696C6961732D6E7374036F726700 bz. 172800 IN NS b2.cctld.afilias-nst.org. 02627A00000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 bz. 172800 IN NS c0.cctld.afilias-nst.info. 02627A00000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 bz. 172800 IN NS d0.cctld.afilias-nst.org. 02627A00002B000100015180001840470701409AA5CD776352AEAB7A46B64EE7BA8061CB9374 bz. 86400 IN DS 16455 7 1 409AA5CD776352AEAB7A46B64EE7BA8061CB9374 02627A00002B000100015180002440470702457C64669C357AF4AABDEB16A6A119B22D3FCB339BBF3C1701AA84CBC3E105F3 bz. 86400 IN DS 16455 7 2 457C64669C357AF4AABDEB16A6A119B22D3FCB339BBF3C1701AA84CBC3E105F3 02627A00002E0001000151800093002B08010001518052F4220052EAD970837700A9980F8BB3D4BF044A8077C9B7CC0A338C8C5F30924614233ED754CE183ACF800509261E408A6524308ADFBBBF36662D14C08B847462FA23CFAE6A962DDD9B2ECA22DF2E5D30CE84AC239EC07EF1E95F246CEAC9E02C10BE88A2FAEC6A8CCA2E3C1AB26093079A900B17B0D11C2DEED4851D45658C555840039EAAEF9A16518E bz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qZgPi7PUvwRKgHfJt8wKM4yMXzCSRhQjPtdUzhg6z4AFCSYeQIplJDCK37u/NmYtFMCLhHRi+iPPrmqWLd2bLsoi3y5dMM6ErCOewH7x6V8kbOrJ4CwQvoii+uxqjMouPBqyYJMHmpALF7DRHC3u1IUdRWWMVVhAA56q75oWUY4= ;{id = 33655} 02627A00002E0001000151800093002F08010001518052F4220052EAD97083770072BEAD02BE1FFC922302567AAE18566EA742DE49F3730111BF6D14F524BBE55BB1C021009B1997917E5117371605CD3E758CAE95816DFE8C34E41D81D2F5AB6D1BEC2EBB89FF4FF552655D84152F0B47CA1751FE79C5C1E27112208DA6F598882A55D9733C7EBA9E76286A562DAF257200F63911091580CF5E978F06F667DF37 bz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cr6tAr4f/JIjAlZ6rhhWbqdC3knzcwERv20U9SS75VuxwCEAmxmXkX5RFzcWBc0+dYyulYFt/ow05B2B0vWrbRvsLruJ/0/1UmVdhBUvC0fKF1H+ecXB4nESII2m9ZiIKlXZczx+up52KGpWLa8lcgD2OREJFYDPXpePBvZn3zc= ;{id = 33655} 02627A00002F000100015180000C026361000006200000000013 bz. 86400 IN NSEC ca. NS DS RRSIG NSEC 02636100002F000100015180000D03636162000006200000000013 ca. 86400 IN NSEC cab. NS DS RRSIG NSEC 02636100002E0001000151800093002F08010001518052F4220052EAD97083770010BA51D4E5F8859320EC5F3F091987EC8F1FBB46FC376E9174D1D875F39B7C21CAAE62C833B198FBBE33331FD1215022F6A20A1C9DE09B8076716943EF07C93B179E28319CE2F936D75EA7B4660F3BB05FA120BAC5A4AB1B5F1F13F58AFA7D828DD17C9AD809554C3285AECE2D558018C81729C081FDDA8742BD07359866C855 ca. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ELpR1OX4hZMg7F8/CRmH7I8fu0b8N26RdNHYdfObfCHKrmLIM7GY+74zMx/RIVAi9qIKHJ3gm4B2cWlD7wfJOxeeKDGc4vk2116ntGYPO7BfoSC6xaSrG18fE/WK+n2CjdF8mtgJVUwyha7OLVWAGMgXKcCB/dqHQr0HNZhmyFU= ;{id = 33655} 02636100002E0001000151800093002B08010001518052F4220052EAD9708377006CD3BB9B2C5B48DA7F336ACFE127707EDCA5BF3A3DD718FE80D964900999E471EF92F587EB49638FDBF74DD8686D59FBCF7A9FA2788A27AD2AC4FD3BECC6972A5337B6D2ED4FD01B3C91EABA524C012ECA9749253690F4B3370060DDE916AC6B7370505168417950B0B6D8625DEB098E4B5EC06D620F6575596E1EDFFB1DB360 ca. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bNO7myxbSNp/M2rP4Sdwftylvzo91xj+gNlkkAmZ5HHvkvWH60ljj9v3TdhobVn7z3qfoniKJ60qxP077MaXKlM3ttLtT9AbPJHqulJMAS7Kl0klNpD0szcAYN3pFqxrc3BQUWhBeVCwtthiXesJjktewG1iD2V1WW4e3/sds2A= ;{id = 33655} 02636100000200010002A300001101630A63612D7365727665727302636100 ca. 172800 IN NS c.ca-servers.ca. 02636100000200010002A300001101650A63612D7365727665727302636100 ca. 172800 IN NS e.ca-servers.ca. 02636100000200010002A3000011016A0A63612D7365727665727302636100 ca. 172800 IN NS j.ca-servers.ca. 02636100000200010002A3000011016B0A63612D7365727665727302636100 ca. 172800 IN NS k.ca-servers.ca. 02636100000200010002A3000011016C0A63612D7365727665727302636100 ca. 172800 IN NS l.ca-servers.ca. 02636100000200010002A3000011017A0A63612D7365727665727302636100 ca. 172800 IN NS z.ca-servers.ca. 02636100000200010002A300001303616E790A63612D7365727665727302636100 ca. 172800 IN NS any.ca-servers.ca. 02636100000200010002A300001103746C64076973632D736E73036E657400 ca. 172800 IN NS tld.isc-sns.net. 02636100000200010002A300001006736E732D706203697363036F726700 ca. 172800 IN NS sns-pb.isc.org. 02636100002B000100015180002427DF08027187A87B74FFF32A8549A05BE7E12F1D8BEDD0DEA9C3D864095D83BF7C542A8F ca. 86400 IN DS 10207 8 2 7187A87B74FFF32A8549A05BE7E12F1D8BEDD0DEA9C3D864095D83BF7C542A8F 03616E790A63612D7365727665727302636100000100010002A3000004C7049002 any.ca-servers.ca. 172800 IN A 199.4.144.2 03616E790A63612D7365727665727302636100001C00010002A30000102001050000A700000000000000000002 any.ca-servers.ca. 172800 IN AAAA 2001:500:a7::2 01630A63612D7365727665727302636100000100010002A3000004C0E41C09 c.ca-servers.ca. 172800 IN A 192.228.28.9 01650A63612D7365727665727302636100000100010002A3000004C0E41E09 e.ca-servers.ca. 172800 IN A 192.228.30.9 016A0A63612D7365727665727302636100000100010002A3000004C6B6A701 j.ca-servers.ca. 172800 IN A 198.182.167.1 016A0A63612D7365727665727302636100001C00010002A300001020010500008300000000000000000001 j.ca-servers.ca. 172800 IN AAAA 2001:500:83::1 016B0A63612D7365727665727302636100000100010002A30000049C9A6404 k.ca-servers.ca. 172800 IN A 156.154.100.4 016C0A63612D7365727665727302636100000100010002A30000049C9A6504 l.ca-servers.ca. 172800 IN A 156.154.101.4 017A0A63612D7365727665727302636100000100010002A3000004C0E41942 z.ca-servers.ca. 172800 IN A 192.228.25.66 07636861726C6573046364656307706F6C796D746C02636100000100010002A300000484CF9002 charles.cdec.polymtl.ca. 172800 IN A 132.207.144.2 0363616200000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 cab. 172800 IN NS demand.beta.aridns.net.au. 0363616200000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 cab. 172800 IN NS demand.alpha.aridns.net.au. 0363616200000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 cab. 172800 IN NS demand.delta.aridns.net.au. 0363616200000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 cab. 172800 IN NS demand.gamma.aridns.net.au. 0363616200002B00010001518000244F0F0802E03C2DF189D39BD14C37695B586DA73C58C89B39050DC9E618A97886B3A757BD cab. 86400 IN DS 20239 8 2 E03C2DF189D39BD14C37695B586DA73C58C89B39050DC9E618A97886B3A757BD 0363616200002E0001000151800093002B08010001518052F4220052EAD970837700791FBC898E17EAEBD92384A5483D3CC2A60C3CCD308D81294BA974922FBFBBCBED2B004CDC93CB1343E55C7078E426AFB75A89D89FE5FB4425ACF2FA9D8C07672085FF96052B1F321AF6BD21E0416CB97492793C8A6258F3991B95A9A2ACE5ED173472E68E133304EB004CB6152FEEDD133F9D11CAFA8E732D5B3EDD86ADDFF9 cab. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eR+8iY4X6uvZI4SlSD08wqYMPM0wjYEpS6l0ki+/u8vtKwBM3JPLE0PlXHB45Cavt1qJ2J/l+0QlrPL6nYwHZyCF/5YFKx8yGva9IeBBbLl0knk8imJY85kblamirOXtFzRy5o4TMwTrAEy2FS/u3RM/nRHK+o5zLVs+3Yat3/k= ;{id = 33655} 0363616200002E0001000151800093002F08010001518052F4220052EAD97083770007606FA23F5BAD2FF7FFEF29CCBC27B461024C8602B5B106F2206F8DA9D6DD51001D645B9AABC7C1742FB196AE461BE62E7AA15F43B40A357A2DFEE480F9A1E0766D44FE3FD177AF9AFBB4B85C9A8DDAEF6860C38C5DA37E490922D303EF99C90A92F271DBC49E9339ECE714B53D16EE56D07B0C1CB47A8D6CA4D49184144F49 cab. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . B2Bvoj9brS/3/+8pzLwntGECTIYCtbEG8iBvjanW3VEAHWRbmqvHwXQvsZauRhvmLnqhX0O0CjV6Lf7kgPmh4HZtRP4/0Xevmvu0uFyajdrvaGDDjF2jfkkJItMD75nJCpLycdvEnpM57OcUtT0W7lbQewwctHqNbKTUkYQUT0k= ;{id = 33655} 0363616200002F00010001518000100663616D657261000006200000000013 cab. 86400 IN NSEC camera. NS DS RRSIG NSEC 0663616D65726100000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 camera. 172800 IN NS demand.beta.aridns.net.au. 0663616D65726100000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 camera. 172800 IN NS demand.alpha.aridns.net.au. 0663616D65726100000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 camera. 172800 IN NS demand.delta.aridns.net.au. 0663616D65726100000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 camera. 172800 IN NS demand.gamma.aridns.net.au. 0663616D65726100002B0001000151800024D4710802DDD1231F35667A209FEAF0749906B8DBDA96CF1F9ED224C519B74FEB22F4888F camera. 86400 IN DS 54385 8 2 DDD1231F35667A209FEAF0749906B8DBDA96CF1F9ED224C519B74FEB22F4888F 0663616D65726100002E0001000151800093002B08010001518052F4220052EAD9708377000BFA8E55C6386036196B0A519287C1FC1468FF599AD4922D5653FB6B6C2B7A536ED7A66F9F48ACC8F4C1528EA0F67DF6FFEB1F7FCB87A1B91EA2BAD336D6B2903D9EB6968A5AA907892F7A3A93BEB5FF5C77C70BA8631BDC62C13ADFF3B3742ED165C8DD7BB5EBC9B1A7F891AFB880E09974191F2E5FDDF57ACD25238C0D6899 camera. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . C/qOVcY4YDYZawpRkofB/BRo/1ma1JItVlP7a2wrelNu16Zvn0isyPTBUo6g9n32/+sff8uHobkeorrTNtaykD2etpaKWqkHiS96OpO+tf9cd8cLqGMb3GLBOt/zs3Qu0WXI3Xu168mxp/iRr7iA4Jl0GR8uX931es0lI4wNaJk= ;{id = 33655} 0663616D65726100002E0001000151800093002F08010001518052F4220052EAD9708377002F17499045E384BFABC8FC45B2E418A1773EB8027D1E64D5722C8D4DD2F1806E746A17B10D189861E80DEBBD26B0F0E3A5ADC42CC68995C8ACD8AB93EC6614FBD5A79E3FB5C0B2A0E6A67BD7EFF5D227A1A0DA206467DC686EEE6DA8C5D07F57A6641007A03DD271DFBAF38D27A831528782B9F8660C9F540F894BD2B883DB10 camera. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LxdJkEXjhL+ryPxFsuQYoXc+uAJ9HmTVciyNTdLxgG50ahexDRiYYegN670msPDjpa3ELMaJlcis2KuT7GYU+9Wnnj+1wLKg5qZ71+/10iehoNogZGfcaG7ubajF0H9XpmQQB6A90nHfuvONJ6gxUoeCufhmDJ9UD4lL0riD2xA= ;{id = 33655} 0663616D65726100002F000100015180000E0463616D70000006200000000013 camera. 86400 IN NSEC camp. NS DS RRSIG NSEC 0463616D7000000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 camp. 172800 IN NS demand.beta.aridns.net.au. 0463616D7000000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 camp. 172800 IN NS demand.alpha.aridns.net.au. 0463616D7000000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 camp. 172800 IN NS demand.delta.aridns.net.au. 0463616D7000000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 camp. 172800 IN NS demand.gamma.aridns.net.au. 0463616D7000002B0001000151800024FB8C0802D2EDC9BFB5D3C98A155ACE7F93957C54EA8938F4E7AEDF32444A8D9E57AE69ED camp. 86400 IN DS 64396 8 2 D2EDC9BFB5D3C98A155ACE7F93957C54EA8938F4E7AEDF32444A8D9E57AE69ED 0463616D7000002E0001000151800093002B08010001518052F4220052EAD9708377007BFA39053FBD90EF69305258AED090F12E985D4CD98285F8339A00691F3C40CA2BE1D7CDEEEDC1674CC12965415524AC45A9608A11073CFDE4628A629ABADCA8217F362BDEEF23B291280F49B8DA9E53D8163310F244833C4D40B2D84C9B3852B78CBE28432C85710EC3326A23460DE34BE478F89AEA452A5D0B91EA7A2A1CFC camp. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . e/o5BT+9kO9pMFJYrtCQ8S6YXUzZgoX4M5oAaR88QMor4dfN7u3BZ0zBKWVBVSSsRalgihEHPP3kYopimrrcqCF/Nive7yOykSgPSbjanlPYFjMQ8kSDPE1AsthMmzhSt4y+KEMshXEOwzJqI0YN40vkePia6kUqXQuR6noqHPw= ;{id = 33655} 0463616D7000002E0001000151800093002F08010001518052F4220052EAD9708377000623398BF403A4C2CC22C9E9CE6DD579CD199F1A88D642CA9B79461F76F14EE1295B0502DA7C3B9970D628BD1A7F7A781013F4CCAF08BE57C5F8332EF2F1E05D2BA63ACF22610930685691658E70E81E85296D608D40CC081089F3A0BF4AB3E72197D8F2342EE5ECBC177E17594D1702A4A9910228FB1E5340406A94EF299767 camp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . BiM5i/QDpMLMIsnpzm3Vec0ZnxqI1kLKm3lGH3bxTuEpWwUC2nw7mXDWKL0af3p4EBP0zK8IvlfF+DMu8vHgXSumOs8iYQkwaFaRZY5w6B6FKW1gjUDMCBCJ86C/SrPnIZfY8jQu5ey8F34XWU0XAqSpkQIo+x5TQEBqlO8pl2c= ;{id = 33655} 0463616D7000002F00010001518000110763617265657273000006200000000013 camp. 86400 IN NSEC careers. NS DS RRSIG NSEC 076361726565727300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 careers. 172800 IN NS demand.beta.aridns.net.au. 076361726565727300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 careers. 172800 IN NS demand.alpha.aridns.net.au. 076361726565727300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 careers. 172800 IN NS demand.delta.aridns.net.au. 076361726565727300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 careers. 172800 IN NS demand.gamma.aridns.net.au. 076361726565727300002B00010001518000245D8808027EE0E65346C011F8EECC3A94C8668EA463CCA44CB8159F0E30D436FE920F0DA7 careers. 86400 IN DS 23944 8 2 7EE0E65346C011F8EECC3A94C8668EA463CCA44CB8159F0E30D436FE920F0DA7 076361726565727300002E0001000151800093002B08010001518052F4220052EAD970837700BCCA757EAEAFD7A56CC3D604F8BF72076500DA140E465102F9EEC8AFD74420916672B995CB51038388A185FF028DC9BE2C1B82B96B0A887F0F7517D1D7D287CF814E6ABDED1E2E1263848DAD5DC1375CEE3299EE0A2E675336D13208A019C10462B308BB706F3B298D25A65FD779DB02FCBF5F9E1ABFA12262A2F9AA8C9106DB careers. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vMp1fq6v16Vsw9YE+L9yB2UA2hQORlEC+e7Ir9dEIJFmcrmVy1EDg4ihhf8Cjcm+LBuCuWsKiH8PdRfR19KHz4FOar3tHi4SY4SNrV3BN1zuMpnuCi5nUzbRMgigGcEEYrMIu3BvOymNJaZf13nbAvy/X54av6EiYqL5qoyRBts= ;{id = 33655} 076361726565727300002E0001000151800093002F08010001518052F4220052EAD9708377002A1219371FB098EC1685DF78B3DC051C58027FC2E1FD7297096C83932FCD713D1B20E9DF792539FD20FFE4423E1B7D8FCD2D57A9FA2A691075F66055792FCFA2D28B74E45B7C0548FD5B8A62221FA6001589EAC3AA670814F6032C1BE9B07181F560C0F99989E8234E4718874EAFEB5049C8C8966C1A6196148D25A3B232BBF6 careers. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . KhIZNx+wmOwWhd94s9wFHFgCf8Lh/XKXCWyDky/NcT0bIOnfeSU5/SD/5EI+G32PzS1XqfoqaRB19mBVeS/PotKLdORbfAVI/VuKYiIfpgAVierDqmcIFPYDLBvpsHGB9WDA+ZmJ6CNORxiHTq/rUEnIyJZsGmGWFI0lo7Iyu/Y= ;{id = 33655} 076361726565727300002F000100015180000D03636174000006200000000013 careers. 86400 IN NSEC cat. NS DS RRSIG NSEC 0363617400000200010002A300000C026E73036E69630363617400 cat. 172800 IN NS ns.nic.cat. 0363617400000200010002A300000D0363617403706368036E657400 cat. 172800 IN NS cat.pch.net. 0363617400000200010002A300000C036E7331036E696302657300 cat. 172800 IN NS ns1.nic.es. 0363617400000200010002A300000C036E7363036E696302646500 cat. 172800 IN NS nsc.nic.de. 0363617400000200010002A300000904646E736302616400 cat. 172800 IN NS dnsc.ad. 0363617400000200010002A300001305616E7963310769726F6E646E73036E657400 cat. 172800 IN NS anyc1.irondns.net. 0363617400000200010002A300001006736E732D706203697363036F726700 cat. 172800 IN NS sns-pb.isc.org. 0363617400000200010002A300001006737769746368036E69630363617400 cat. 172800 IN NS switch.nic.cat. 0363617400002B0001000151800024829C0A02E1A0FC89B87F5E7F6B354D364CF704855A2E9A52B7F39BBE4E2BEA443B81B18E cat. 86400 IN DS 33436 10 2 E1A0FC89B87F5E7F6B354D364CF704855A2E9A52B7F39BBE4E2BEA443B81B18E 0363617400002E0001000151800093002B08010001518052F4220052EAD97083770007815B2CAF88A7568D3CA903016DBBCE12C347A788E1963B9C786768CBBE3F8B79C135DA76F78A767766746963ABD790F568778683F6B2F185C23EED08A943EA9142F35A7F4C2222210C679BEF488A5AA7DA060E96E9CA84943FD936ACE3206E7C53569E73122F10C4B41EB8CF93AF662EAC0269DF7E012B876F907F3EF9CC20 cat. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . B4FbLK+Ip1aNPKkDAW27zhLDR6eI4ZY7nHhnaMu+P4t5wTXadveKdndmdGljq9eQ9Wh3hoP2svGFwj7tCKlD6pFC81p/TCIiIQxnm+9Iilqn2gYOlunKhJQ/2Tas4yBufFNWnnMSLxDEtB64z5OvZi6sAmnffgErh2+Qfz75zCA= ;{id = 33655} 0363617400002E0001000151800093002F08010001518052F4220052EAD97083770042E6107CAD936400633547F0318191A72182A0FEED237FA23194AC33B8CA4B4630621C59CB1A619CF90EA37D74BA7D544B69553F1FDA83971776D19B71FE8E61BCB90F7FAC145F4640FCA150F4837F0635EBFFE283130B5638EFBCA0A5419B377D827FA1CE75DF9F5676C0E7787E15D8AF4679A4EB4ADF40044923E7091222D4 cat. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QuYQfK2TZABjNUfwMYGRpyGCoP7tI3+iMZSsM7jKS0YwYhxZyxphnPkOo310un1US2lVPx/ag5cXdtGbcf6OYby5D3+sFF9GQPyhUPSDfwY16//igxMLVjjvvKClQZs3fYJ/oc51359WdsDneH4V2K9GeaTrSt9ABEkj5wkSItQ= ;{id = 33655} 0363617400002F000100015180000C026363000006200000000013 cat. 86400 IN NSEC cc. NS DS RRSIG NSEC 026E73036E69630363617400000100010002A3000004545800A2 ns.nic.cat. 172800 IN A 84.88.0.162 026E73036E69630363617400001C00010002A3000010200140B0000100030000000000000002 ns.nic.cat. 172800 IN AAAA 2001:40b0:1:3::2 06737769746368036E69630363617400000100010002A3000004823B8A31 switch.nic.cat. 172800 IN A 130.59.138.49 06737769746368036E69630363617400001C00010002A3000010200106200000001B505400FFFE748780 switch.nic.cat. 172800 IN AAAA 2001:620:0:1b:5054:ff:fe74:8780 02636300000200010002A300000E026135056E73746C6403636F6D00 cc. 172800 IN NS a5.nstld.com. 02636300000200010002A300000E026335056E73746C6403636F6D00 cc. 172800 IN NS c5.nstld.com. 02636300000200010002A300000E026435056E73746C6403636F6D00 cc. 172800 IN NS d5.nstld.com. 02636300000200010002A300000E026635056E73746C6403636F6D00 cc. 172800 IN NS f5.nstld.com. 02636300000200010002A300000E026735056E73746C6403636F6D00 cc. 172800 IN NS g5.nstld.com. 02636300000200010002A300000E026835056E73746C6403636F6D00 cc. 172800 IN NS h5.nstld.com. 02636300000200010002A300000E026C35056E73746C6403636F6D00 cc. 172800 IN NS l5.nstld.com. 02636300002B0001000151800018020708017285EF05E1B4E679D4F072EEA9B00953E01F3AE2 cc. 86400 IN DS 519 8 1 7285EF05E1B4E679D4F072EEA9B00953E01F3AE2 02636300002B000100015180002402070802E1EC6495ABD34562E6F433DEE201E6C6A52CB10AF69C04D675DA692D2D566897 cc. 86400 IN DS 519 8 2 E1EC6495ABD34562E6F433DEE201E6C6A52CB10AF69C04D675DA692D2D566897 02636300002E0001000151800093002B08010001518052F4220052EAD9708377008F5AD1724C4645C2B7EBF48ED9EFC82AFB1BD56B4733F2F38F0981555A271DC5DB26EC7A00B7BE7D2A40D942034195EAF81CFB723DE334CDADC57AAD3727748556921F8F01A76C1C45BBEB1798377CF9ECDAE94A7F7D22A4CD4C1AFD22E3BAEBED2A0DBD54A21AA74587DE2313FE93762BA14864D0E21279416101B0CF255B5E cc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . j1rRckxGRcK36/SO2e/IKvsb1WtHM/LzjwmBVVonHcXbJux6ALe+fSpA2UIDQZXq+Bz7cj3jNM2txXqtNyd0hVaSH48Bp2wcRbvrF5g3fPns2ulKf30ipM1MGv0i47rr7SoNvVSiGqdFh94jE/6TdiuhSGTQ4hJ5QWEBsM8lW14= ;{id = 33655} 02636300002E0001000151800093002F08010001518052F4220052EAD970837700BA0ABCEEA48382A40E0598A70823E77A064212BF38B390F7A012ACCD91B24444DD27F49B59FB7DB77DA636593ED0C953AACF7551B336CCC00E16CCA68F51BF2A73F468B4615A1FB96AA70137EA7EAAC947959B0F6F2C772D5F06306D98967F72D3AE9A143656A09A8238C9B9294FF729B084919F6BD8AB24F00D50B05561BE9F cc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ugq87qSDgqQOBZinCCPnegZCEr84s5D3oBKszZGyRETdJ/SbWft9t32mNlk+0MlTqs91UbM2zMAOFsymj1G/KnP0aLRhWh+5aqcBN+p+qslHlZsPbyx3LV8GMG2Yln9y066aFDZWoJqCOMm5KU/3KbCEkZ9r2Ksk8A1QsFVhvp8= ;{id = 33655} 02636300002F000100015180000C026364000006200000000013 cc. 86400 IN NSEC cd. NS DS RRSIG NSEC 02636400000200010002A300001303646E73097072696E6365746F6E0365647500 cd. 172800 IN NS dns.princeton.edu. 02636400000200010002A3000010036E733103706368036E696302636400 cd. 172800 IN NS ns1.pch.nic.cd. 02636400000200010002A30000100569677562750473616978036E657400 cd. 172800 IN NS igubu.saix.net. 02636400000200010002A300001106736162656C610473616978036E657400 cd. 172800 IN NS sabela.saix.net. 02636400002F00010001518000100663656E746572000006200000000003 cd. 86400 IN NSEC center. NS RRSIG NSEC 02636400002E0001000151800093002F08010001518052F4220052EAD9708377004477776738E7D7511A13B54FBD70057800A9D4DBEC59AFB9266758598D4541F33D05A79AB225D1F2E46260AAEAB8AA3A94459FF1EC4CFAB673566044B713DE54238DF4EB256F9F11BA908C6629E64448D389417787EC45AB3C2E293C04F06C4E57F618E0C72784041863503E665DD0D790B7F6EC1FCEEEF39301A5E58A2F2C11 cd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RHd3Zzjn11EaE7VPvXAFeACp1NvsWa+5JmdYWY1FQfM9BaeasiXR8uRiYKrquKo6lEWf8exM+rZzVmBEtxPeVCON9Oslb58RupCMZinmREjTiUF3h+xFqzwuKTwE8GxOV/YY4McnhAQYY1A+Zl3Q15C39uwfzu7zkwGl5YovLBE= ;{id = 33655} 036E733103706368036E696302636400000100010002A3000004CC3DD842 ns1.pch.nic.cd. 172800 IN A 204.61.216.66 036E733103706368036E696302636400001C00010002A3000010200105000014606600AD000000000001 ns1.pch.nic.cd. 172800 IN AAAA 2001:500:14:6066:ad::1 0663656E74657200000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 center. 172800 IN NS demand.beta.aridns.net.au. 0663656E74657200000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 center. 172800 IN NS demand.alpha.aridns.net.au. 0663656E74657200000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 center. 172800 IN NS demand.delta.aridns.net.au. 0663656E74657200000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 center. 172800 IN NS demand.gamma.aridns.net.au. 0663656E74657200002B0001000151800024EE840802F7B5230B71155E51F6E9EBE8467338CA2644DC34B08722E33105D498A9226ACD center. 86400 IN DS 61060 8 2 F7B5230B71155E51F6E9EBE8467338CA2644DC34B08722E33105D498A9226ACD 0663656E74657200002E0001000151800093002B08010001518052F4220052EAD9708377009AF478BFE06F1D78657336BAD10EB03F1F3F283CAF962D52739C16DFAB15CD0EB5D6E95614D84D2B45E91EE75AAEFB4D65C729F5E143B32D60E249B3EFF7816779F2146523B2FC213DB886F49430BC8F7807DF22A5978E1DBF7641F0504AD0C0D7B24D5B945D69E6648AE0BF93A8FF7ACA20DDF85C73D104D2D35B7AF8E529C9 center. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . mvR4v+BvHXhlcza60Q6wPx8/KDyvli1Sc5wW36sVzQ611ulWFNhNK0XpHudarvtNZccp9eFDsy1g4kmz7/eBZ3nyFGUjsvwhPbiG9JQwvI94B98ipZeOHb92QfBQStDA17JNW5RdaeZkiuC/k6j/esog3fhcc9EE0tNbevjlKck= ;{id = 33655} 0663656E74657200002E0001000151800093002F08010001518052F4220052EAD9708377007986FA080B7186D44CFC739624603AF49F6AA9EF301AB16740D04091BD449E4958C0818B3BEDD374E577F2D4D2C65D45F113924090D1981A566C35B56D48146A8398A7A8BC7995824E99E3BE13CB16202988F3EC7F27E12A8015AB6153E280EDE6F66126AC33702DC6F32BC681A3FE5A3C7DE0A7F7CA49F1A74D5C3B5BCA0622 center. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eYb6CAtxhtRM/HOWJGA69J9qqe8wGrFnQNBAkb1EnklYwIGLO+3TdOV38tTSxl1F8ROSQJDRmBpWbDW1bUgUaoOYp6i8eZWCTpnjvhPLFiApiPPsfyfhKoAVq2FT4oDt5vZhJqwzcC3G8yvGgaP+Wjx94Kf3yknxp01cO1vKBiI= ;{id = 33655} 0663656E74657200002F000100015180000D0363656F000006200000000013 center. 86400 IN NSEC ceo. NS DS RRSIG NSEC 0363656F00000200010002A3000011036E733103646E73036E69630363656F00 ceo. 172800 IN NS ns1.dns.nic.ceo. 0363656F00000200010002A3000011036E733203646E73036E69630363656F00 ceo. 172800 IN NS ns2.dns.nic.ceo. 0363656F00000200010002A3000011036E733303646E73036E69630363656F00 ceo. 172800 IN NS ns3.dns.nic.ceo. 0363656F00000200010002A3000011036E733403646E73036E69630363656F00 ceo. 172800 IN NS ns4.dns.nic.ceo. 0363656F00000200010002A3000011036E733503646E73036E69630363656F00 ceo. 172800 IN NS ns5.dns.nic.ceo. 0363656F00000200010002A3000011036E733603646E73036E69630363656F00 ceo. 172800 IN NS ns6.dns.nic.ceo. 0363656F00000200010002A3000011036E733703646E73036E69630363656F00 ceo. 172800 IN NS ns7.dns.nic.ceo. 0363656F00002B0001000151800018F8C90801DB7A8F6AADCEE147D241A9778857E94707234D4E ceo. 86400 IN DS 63689 8 1 DB7A8F6AADCEE147D241A9778857E94707234D4E 0363656F00002B0001000151800024F8C90802F2AB788C2802C3F219D53F37E7E1687ECF2E453E04BC5ABCC0B444FC0E35B1EE ceo. 86400 IN DS 63689 8 2 F2AB788C2802C3F219D53F37E7E1687ECF2E453E04BC5ABCC0B444FC0E35B1EE 0363656F00002E0001000151800093002B08010001518052F4220052EAD9708377003E28A883B44983AEFF935E2AE1ADF4355DB45E7A09A7EB78DA99866D5180758CE87EB3FC61E2CA33AF608457A0E0FEACF0FD069545D9218F6E3C80A31FE5BAF6EB6BBE6C5103FAFA2DFD5E7DE7647DC867FEA4FBA9DE28E13B64BF8861AED9AEE3C5B128932D0B8E86DC775D1E7A6C369D8C8A238AF91B202C8A3FE2BF006EFA ceo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Piiog7RJg67/k14q4a30NV20XnoJp+t42pmGbVGAdYzofrP8YeLKM69ghFeg4P6s8P0GlUXZIY9uPICjH+W69utrvmxRA/r6Lf1efedkfchn/qT7qd4o4Ttkv4hhrtmu48WxKJMtC46G3HddHnpsNp2MiiOK+RsgLIo/4r8Abvo= ;{id = 33655} 0363656F00002E0001000151800093002F08010001518052F4220052EAD9708377002EB284242AA039C0B40F3931EC0E9E30493794B7538CFCAF8F33F488629E3A0DE9BD4E8682789AD51F246479233781CB7B9710F943E298D8D3A7313988CBC6229E61DCE60301DDF91083D7A1DC0E0999CE070AD49849A3DA27B2A252EEB6A6038E6F5F3349D511775F63127C75252559489A863EFE2EAF1356ACF34CE0EE2994 ceo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LrKEJCqgOcC0Dzkx7A6eMEk3lLdTjPyvjzP0iGKeOg3pvU6Ggnia1R8kZHkjN4HLe5cQ+UPimNjTpzE5iMvGIp5h3OYDAd35EIPXodwOCZnOBwrUmEmj2ieyolLutqYDjm9fM0nVEXdfYxJ8dSUlWUiahj7+Lq8TVqzzTODuKZQ= ;{id = 33655} 0363656F00002F000100015180000C026366000006200000000013 ceo. 86400 IN NSEC cf. NS DS RRSIG NSEC 036E733103646E73036E69630363656F00000100010002A30000049C9A9025 ns1.dns.nic.ceo. 172800 IN A 156.154.144.37 036E733103646E73036E69630363656F00001C00010002A3000010261000A1107100000000000000000025 ns1.dns.nic.ceo. 172800 IN AAAA 2610:a1:1071::25 036E733203646E73036E69630363656F00000100010002A30000049C9A9125 ns2.dns.nic.ceo. 172800 IN A 156.154.145.37 036E733203646E73036E69630363656F00001C00010002A3000010261000A1107200000000000000000025 ns2.dns.nic.ceo. 172800 IN AAAA 2610:a1:1072::25 036E733303646E73036E69630363656F00000100010002A30000049C9A9F25 ns3.dns.nic.ceo. 172800 IN A 156.154.159.37 036E733303646E73036E69630363656F00001C00010002A3000010261000A1107300000000000000000025 ns3.dns.nic.ceo. 172800 IN AAAA 2610:a1:1073::25 036E733403646E73036E69630363656F00000100010002A30000049C9A9C25 ns4.dns.nic.ceo. 172800 IN A 156.154.156.37 036E733403646E73036E69630363656F00001C00010002A3000010261000A1107400000000000000000025 ns4.dns.nic.ceo. 172800 IN AAAA 2610:a1:1074::25 036E733503646E73036E69630363656F00000100010002A30000049C9A9D25 ns5.dns.nic.ceo. 172800 IN A 156.154.157.37 036E733503646E73036E69630363656F00001C00010002A3000010261000A1107500000000000000000025 ns5.dns.nic.ceo. 172800 IN AAAA 2610:a1:1075::25 036E733603646E73036E69630363656F00000100010002A30000049C9A9E25 ns6.dns.nic.ceo. 172800 IN A 156.154.158.37 036E733603646E73036E69630363656F00001C00010002A3000010261000A1107600000000000000000025 ns6.dns.nic.ceo. 172800 IN AAAA 2610:a1:1076::25 036E733703646E73036E69630363656F00000100010002A3000004CF22050A ns7.dns.nic.ceo. 172800 IN A 207.34.5.10 036E733703646E73036E69630363656F00001C00010002A3000010200105037BBBFFFFFFFFFFFFFFFFFF7E ns7.dns.nic.ceo. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e 02636600000200010002A30000090161026E7302636600 cf. 172800 IN NS a.ns.cf. 02636600000200010002A30000090162026E7302636600 cf. 172800 IN NS b.ns.cf. 02636600000200010002A30000090163026E7302636600 cf. 172800 IN NS c.ns.cf. 02636600000200010002A30000090164026E7302636600 cf. 172800 IN NS d.ns.cf. 02636600002F000100015180000C026367000006200000000003 cf. 86400 IN NSEC cg. NS RRSIG NSEC 02636600002E0001000151800093002F08010001518052F4220052EAD9708377000891F034881C4A05BB302084454A9476BCFB9D4170CDE24D58FAE2275444C082F659E7D3F37B7983ADC3688072B79E9A9408309E813F7A5BC42B14CE132AE756C596872D1506B3469C386F6B96DA68ED3853B57A4EEEB660F4412045B212BE691F45DF2625CF1380CDD97FC7221CBB816880F8286E78A7FEB87B352CD98F58A7 cf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CJHwNIgcSgW7MCCERUqUdrz7nUFwzeJNWPriJ1REwIL2WefT83t5g63DaIByt56alAgwnoE/elvEKxTOEyrnVsWWhy0VBrNGnDhva5baaO04U7V6Tu62YPRBIEWyEr5pH0XfJiXPE4DN2X/HIhy7gWiA+ChueKf+uHs1LNmPWKc= ;{id = 33655} 0161026E7302636600000100010002A3000004B915A811 a.ns.cf. 172800 IN A 185.21.168.17 0161026E7302636600001C00010002A30000102A041B00000400000000000000000001 a.ns.cf. 172800 IN AAAA 2a04:1b00:4::1 0162026E7302636600000100010002A3000004B915A911 b.ns.cf. 172800 IN A 185.21.169.17 0162026E7302636600001C00010002A30000102A041B00000500000000000000000001 b.ns.cf. 172800 IN AAAA 2a04:1b00:5::1 0163026E7302636600000100010002A3000004B915AA11 c.ns.cf. 172800 IN A 185.21.170.17 0163026E7302636600001C00010002A30000102A041B00000600000000000000000001 c.ns.cf. 172800 IN AAAA 2a04:1b00:6::1 0164026E7302636600000100010002A3000004B915AB11 d.ns.cf. 172800 IN A 185.21.171.17 0164026E7302636600001C00010002A30000102A041B00000700000000000000000001 d.ns.cf. 172800 IN AAAA 2a04:1b00:7::1 02636700000200010002A300001303646E7309646E73616672696361036E657400 cg. 172800 IN NS dns.dnsafrica.net. 02636700000200010002A300001303646E73097072696E6365746F6E0365647500 cg. 172800 IN NS dns.princeton.edu. 02636700000200010002A30000100573756E69630573756E657402736500 cg. 172800 IN NS sunic.sunet.se. 02636700002F000100015180000C026368000006200000000003 cg. 86400 IN NSEC ch. NS RRSIG NSEC 02636700002E0001000151800093002F08010001518052F4220052EAD9708377002AC6F474D9A33313CD9A116AB93DC2A647B5F181AF914D08847078E0605005FAECDFEAFEB258E3BE8A875B059A06E1D1C6ED044D2BD6E4FA76AC2BCFDB9CBEAB425561B6C7FAD00477010915E7EB8F74E78BFB4526DF7E6FA0902DEE461CA62C5423ECDFF2B205B1395058754ABE0D5F7E73754AF586D112438A5A8427E91C78 cg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ksb0dNmjMxPNmhFquT3Cpke18YGvkU0IhHB44GBQBfrs3+r+sljjvoqHWwWaBuHRxu0ETSvW5Pp2rCvP25y+q0JVYbbH+tAEdwEJFefrj3Tni/tFJt9+b6CQLe5GHKYsVCPs3/KyBbE5UFh1Sr4NX35zdUr1htESQ4pahCfpHHg= ;{id = 33655} 02636800002F000100015180000F056368656170000006200000000013 ch. 86400 IN NSEC cheap. NS DS RRSIG NSEC 02636800002E0001000151800093002F08010001518052F4220052EAD9708377003A9F12F842E3DE2B3173CA3FEC4C312D39087B728BE85A4D073CA532E52D64571FFDEB58B733E9D350CC6CA0D86117810E137FAD538DC526FCC7E687BD024E21CA421A566100916D46FB43C750CAB374C63F5CA366836C077EC431F0DA112C13A9EDD10E3D42B40C707FFBA4A4EA555D5F1C965EF5A5B46C9236F129CC58F89C ch. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Op8S+ELj3isxc8o/7EwxLTkIe3KL6FpNBzylMuUtZFcf/etYtzPp01DMbKDYYReBDhN/rVONxSb8x+aHvQJOIcpCGlZhAJFtRvtDx1DKs3TGP1yjZoNsB37EMfDaESwTqe3RDj1CtAxwf/ukpOpVXV8cll71pbRskjbxKcxY+Jw= ;{id = 33655} 02636800002E0001000151800093002B08010001518052F4220052EAD97083770052642402CE60B1A4214441E3023CBEB01D1CF82A5A7D11DB2D825D8A90D3B97AACA0F4EEF231E883D8727455AE7C4C26CDF89DC302A9A839264E34DC8BE6630BB27F00A776E44BD4D8E340E1159C0A2E4784D42495EC99153C6913F4D26B881A8A506467232DF882ABE4484D970D3E8EBCC1A9CEE2186DF6E4C5C77DC4EEA91C ch. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UmQkAs5gsaQhREHjAjy+sB0c+CpafRHbLYJdipDTuXqsoPTu8jHog9hydFWufEwmzfidwwKpqDkmTjTci+ZjC7J/AKd25EvU2ONA4RWcCi5HhNQkleyZFTxpE/TSa4gailBkZyMt+IKr5EhNlw0+jrzBqc7iGG325MXHfcTuqRw= ;{id = 33655} 02636800000200010002A300000A0161036E696302636800 ch. 172800 IN NS a.nic.ch. 02636800000200010002A300000A0162036E696302636800 ch. 172800 IN NS b.nic.ch. 02636800000200010002A300000A0163036E696302636800 ch. 172800 IN NS c.nic.ch. 02636800000200010002A300000A0164036E696302636800 ch. 172800 IN NS d.nic.ch. 02636800000200010002A300000A0165036E696302636800 ch. 172800 IN NS e.nic.ch. 02636800000200010002A300000A0166036E696302636800 ch. 172800 IN NS f.nic.ch. 02636800000200010002A300000A0168036E696302636800 ch. 172800 IN NS h.nic.ch. 02636800002B0001000151800024611B08029AFD21261EAF98AFD7E24E89BE6B25767F93EB401C6C3DF21342F40EE82DCCF0 ch. 86400 IN DS 24859 8 2 9AFD21261EAF98AFD7E24E89BE6B25767F93EB401C6C3DF21342F40EE82DCCF0 026E730369747502636800000100010002A30000049C6AC079 ns.itu.ch. 172800 IN A 156.106.192.121 0161036E696302636800000100010002A3000004823B0150 a.nic.ch. 172800 IN A 130.59.1.80 0161036E696302636800001C00010002A300001020010620000000000000000000000004 a.nic.ch. 172800 IN AAAA 2001:620::4 0162036E696302636800000100010002A3000004823BD30A b.nic.ch. 172800 IN A 130.59.211.10 0162036E696302636800001C00010002A300001020010620000000000000000000000005 b.nic.ch. 172800 IN AAAA 2001:620::5 0163036E696302636800000100010002A3000004931C0027 c.nic.ch. 172800 IN A 147.28.0.39 0163036E696302636800001C00010002A300001020010418000100000000000000000039 c.nic.ch. 172800 IN AAAA 2001:418:1::39 0164036E696302636800000100010002A3000004C8A00005 d.nic.ch. 172800 IN A 200.160.0.5 0164036E696302636800001C00010002A3000010200112FF00000A200000000000000005 d.nic.ch. 172800 IN AAAA 2001:12ff:0:a20::5 0165036E696302636800000100010002A3000004C2001101 e.nic.ch. 172800 IN A 194.0.17.1 0165036E696302636800001C00010002A300001020010678000300000000000000000001 e.nic.ch. 172800 IN AAAA 2001:678:3::1 0166036E696302636800000100010002A3000004C2926A0A f.nic.ch. 172800 IN A 194.146.106.10 0166036E696302636800001C00010002A30000102001067C101000020000000000000053 f.nic.ch. 172800 IN AAAA 2001:67c:1010:2::53 0168036E696302636800000100010002A3000004C22A3078 h.nic.ch. 172800 IN A 194.42.48.120 036E73320673776974636802636800000100010002A3000004823B8A31 ns2.switch.ch. 172800 IN A 130.59.138.49 036E73320673776974636802636800001C00010002A3000010200106200000001B505400FFFE748780 ns2.switch.ch. 172800 IN AAAA 2001:620:0:1b:5054:ff:fe74:8780 05636865617000000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 cheap. 172800 IN NS demand.beta.aridns.net.au. 05636865617000000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 cheap. 172800 IN NS demand.alpha.aridns.net.au. 05636865617000000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 cheap. 172800 IN NS demand.delta.aridns.net.au. 05636865617000000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 cheap. 172800 IN NS demand.gamma.aridns.net.au. 05636865617000002B0001000151800024928308021F76AD552F924D9182B3D34973F8608A14458D8AE0C994C367FF3573289DE494 cheap. 86400 IN DS 37507 8 2 1F76AD552F924D9182B3D34973F8608A14458D8AE0C994C367FF3573289DE494 05636865617000002E0001000151800093002B08010001518052F4220052EAD9708377000005C07945E8B36781D07EEEE6D0D9E8F1495B521856ED26C68366519B383BCE6FBABDFD786D32A402E73582C05E7797F70A0135F53C827C07AFCD44D8E29201B2337834F860D214A2410ADB9393F101EE9F4AD45E4B75C9DF0BEA5C00E9C1232E1394B69D07F2141AEE37324FE18FAE7B9EF1CDD65DE6D7BCF3FFD72CC9F79C cheap. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . AAXAeUXos2eB0H7u5tDZ6PFJW1IYVu0mxoNmUZs4O85vur39eG0ypALnNYLAXneX9woBNfU8gnwHr81E2OKSAbIzeDT4YNIUokEK25OT8QHun0rUXkt1yd8L6lwA6cEjLhOUtp0H8hQa7jcyT+GPrnue8c3WXebXvPP/1yzJ95w= ;{id = 33655} 05636865617000002E0001000151800093002F08010001518052F4220052EAD9708377009FEDCDEAE4C44F511BCD50F12989EFD4B8397B61002FCF2954034E8B1F1727A27E8086F2C6F927E407226C013008B28A8153981D6DC586306FA233EF2455AFA3DCDCC88A2841AA3F0DF31BAF285D44A75B74ABBF86F609789081A40FCC731384D3408892399ACFC57452B5B017B4F1915B9B4B0A2995B91FFBDEF96160D2D58C cheap. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . n+3N6uTET1EbzVDxKYnv1Lg5e2EAL88pVANOix8XJ6J+gIbyxvkn5AcibAEwCLKKgVOYHW3FhjBvojPvJFWvo9zcyIooQao/DfMbryhdRKdbdKu/hvYJeJCBpA/McxOE00CIkjmaz8V0UrWwF7TxkVubSwoplbkf+975YWDS1Yw= ;{id = 33655} 05636865617000002F000100015180000C026369000006200000000013 cheap. 86400 IN NSEC ci. NS DS RRSIG NSEC 02636900000200010002A300001B026369056363746C640761757468646E730472697065036E657400 ci. 172800 IN NS ci.cctld.authdns.ripe.net. 02636900000200010002A300001302636907686F7374696E67036E696302667200 ci. 172800 IN NS ci.hosting.nic.fr. 02636900000200010002A300000B026E73036E696302636900 ci. 172800 IN NS ns.nic.ci. 02636900000200010002A300000C036E73310369726402667200 ci. 172800 IN NS ns1.ird.fr. 02636900000200010002A300000C036E7331036E696302636900 ci. 172800 IN NS ns1.nic.ci. 02636900000200010002A3000013056E732D636907616672696E6963036E657400 ci. 172800 IN NS ns-ci.afrinic.net. 02636900000200010002A30000140670686C6F656D07756F7265676F6E0365647500 ci. 172800 IN NS phloem.uoregon.edu. 02636900002F000100015180000C02636B000006200000000003 ci. 86400 IN NSEC ck. NS RRSIG NSEC 02636900002E0001000151800093002F08010001518052F4220052EAD9708377008BE5B0B77BE6D891983FC7C3ACE27AAF9443FDEE0C35382136A8FBAFFDA6474020934D214C7381C342794ABF22D4088BA175817E97390B506F17F39D4F152ABA6ADE9EA168F50F76EA2680AB2BA9AC3F8959C452B45BDC7A88A0B175D055959FDAEE6B7E5EAB976FE36D9BF7C3686EAE146818A5EF636A805BD58971769B4068 ci. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . i+Wwt3vm2JGYP8fDrOJ6r5RD/e4MNTghNqj7r/2mR0Agk00hTHOBw0J5Sr8i1AiLoXWBfpc5C1BvF/OdTxUqumrenqFo9Q926iaAqyuprD+JWcRStFvceoigsXXQVZWf2u5rfl6rl2/jbZv3w2hurhRoGKXvY2qAW9WJcXabQGg= ;{id = 33655} 026E73036E696302636900000100010002A3000004D5886451 ns.nic.ci. 172800 IN A 213.136.100.81 036E7331036E696302636900000100010002A3000004D5886AD6 ns1.nic.ci. 172800 IN A 213.136.106.214 02636B00000200010002A3000015056369726361036D637303767577026163026E7A00 ck. 172800 IN NS circa.mcs.vuw.ac.nz. 02636B00000200010002A3000015057061726175066F7973746572036E657402636B00 ck. 172800 IN NS parau.oyster.net.ck. 02636B00000200010002A300001808706F697061726175066F7973746572036E657402636B00 ck. 172800 IN NS poiparau.oyster.net.ck. 02636B00000200010002A300001909646F776E7374616765036D637303767577026163026E7A00 ck. 172800 IN NS downstage.mcs.vuw.ac.nz. 02636B00002F000100015180000C02636C000006200000000003 ck. 86400 IN NSEC cl. NS RRSIG NSEC 02636B00002E0001000151800093002F08010001518052F4220052EAD970837700131CB9EBA98E43E3D48B2400B76FD7BEE16871DFD07A4C3E43E7FE3D5CF81EBC780CA29B672A60AEA18653999154C82CBFDC918326477F5A3E96C6EDFE052FE9DC695043A938F6165806DA422A0BC078F793D9085807C9912BF90DEFEF56D368CEEED6BC030267976942D6A597309BE305B3ABE2356A0E1AC91C6EFC8CA27639 ck. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Exy566mOQ+PUiyQAt2/XvuFocd/Qekw+Q+f+PVz4Hrx4DKKbZypgrqGGU5mRVMgsv9yRgyZHf1o+lsbt/gUv6dxpUEOpOPYWWAbaQioLwHj3k9kIWAfJkSv5De/vVtNozu7WvAMCZ5dpQtallzCb4wWzq+I1ag4ayRxu/Iyidjk= ;{id = 33655} 057061726175066F7973746572036E657402636B00000100010002A3000004CA412080 parau.oyster.net.ck. 172800 IN A 202.65.32.128 08706F697061726175066F7973746572036E657402636B00000100010002A3000004CA41207F poiparau.oyster.net.ck. 172800 IN A 202.65.32.127 02636C00002F000100015180001208636C6F7468696E67000006200000000013 cl. 86400 IN NSEC clothing. NS DS RRSIG NSEC 02636C00002E0001000151800093002F08010001518052F4220052EAD970837700AF08C00EC1A397268981E25D34C884C29C59F1FEC7E88C632879E605F7224E72DBE00F23A87CF373D0D3187AE2967C2180023FF364DC2CC198BB67392FB5355004CF9D7987273039D77E785083BB07143FA4F1F8F5B7C29C6DD9CB2A1EBD7351A7533AF26B3D3CD35763F7FD6D3112AD9C19C9345DEF0234207421E349AC675A cl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rwjADsGjlyaJgeJdNMiEwpxZ8f7H6IxjKHnmBfciTnLb4A8jqHzzc9DTGHrilnwhgAI/82TcLMGYu2c5L7U1UATPnXmHJzA51354UIO7BxQ/pPH49bfCnG3ZyyoevXNRp1M68ms9PNNXY/f9bTESrZwZyTRd7wI0IHQh40msZ1o= ;{id = 33655} 02636C00002E0001000151800093002B08010001518052F4220052EAD9708377005DC55B2B69D48FC3E771AB1056F466B8E18D4FCFE1F3B6108C8C22CD0D986C622CB87C93871D2667AA073F59262CC43F5CBF98EDEC478EAC60DC6B9B3D089AEC091691DC1E733EFCB11456F16A89AE4291A5550C2742F1F7629615A6C2A6552B397325FE33E5B2471452A9D536341E211BD0EE30646564795C91FD5D4F920633 cl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . XcVbK2nUj8PncasQVvRmuOGNT8/h87YQjIwizQ2YbGIsuHyThx0mZ6oHP1kmLMQ/XL+Y7exHjqxg3GubPQia7AkWkdwecz78sRRW8WqJrkKRpVUMJ0Lx92KWFabCplUrOXMl/jPlskcUUqnVNjQeIRvQ7jBkZWR5XJH9XU+SBjM= ;{id = 33655} 02636C00000200010002A300000A0161036E696302636C00 cl. 172800 IN NS a.nic.cl. 02636C00000200010002A300000A0162036E696302636C00 cl. 172800 IN NS b.nic.cl. 02636C00000200010002A300000A0163036E696302636C00 cl. 172800 IN NS c.nic.cl. 02636C00000200010002A300001103636C3107646E736E6F6465036E657400 cl. 172800 IN NS cl1.dnsnode.net. 02636C00000200010002A300001705636C2D6E7307616E796361737403706368036E657400 cl. 172800 IN NS cl-ns.anycast.pch.net. 02636C00000200010002A300001006736E732D706203697363036F726700 cl. 172800 IN NS sns-pb.isc.org. 02636C00002B000100015180002452CF08027D756DFFAB6D3CD9C786FF5C659954C22944FAEF9433EEE26F1D84EB5370B394 cl. 86400 IN DS 21199 8 2 7D756DFFAB6D3CD9C786FF5C659954C22944FAEF9433EEE26F1D84EB5370B394 0161036E696302636C00000100010002A3000004C801790A a.nic.cl. 172800 IN A 200.1.121.10 0162036E696302636C00000100010002A3000004C8070407 b.nic.cl. 172800 IN A 200.7.4.7 0162036E696302636C00001C00010002A300001020011398027400000200000700040007 b.nic.cl. 172800 IN AAAA 2001:1398:274:0:200:7:4:7 0163036E696302636C00000100010002A3000004C8107010 c.nic.cl. 172800 IN A 200.16.112.16 066E732D657874036E696302636C00000100010002A3000004C8017B0E ns-ext.nic.cl. 172800 IN A 200.1.123.14 08636C6F7468696E6700000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 clothing. 172800 IN NS demand.beta.aridns.net.au. 08636C6F7468696E6700000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 clothing. 172800 IN NS demand.alpha.aridns.net.au. 08636C6F7468696E6700000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 clothing. 172800 IN NS demand.delta.aridns.net.au. 08636C6F7468696E6700000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 clothing. 172800 IN NS demand.gamma.aridns.net.au. 08636C6F7468696E6700002B00010001518000246D780802A7E284ED01F675CFDB1161FC8B23680B2196CC78FF1D757120E45D28EA02606E clothing. 86400 IN DS 28024 8 2 A7E284ED01F675CFDB1161FC8B23680B2196CC78FF1D757120E45D28EA02606E 08636C6F7468696E6700002E0001000151800093002B08010001518052F4220052EAD970837700711A88C3A3289D0A464B54DF15A60496585AD78C99BA5D82FBE70BED0F3982408A9E291809B19B97785D40B24721BB335FB0B9D0E4C74B620208C5E60A48495BCDAEC19762C6E44738BF9A176BEF90F586BAACF06E6BA78099B028421A01E15340B0156BE8111786437CE59EDA2D830E899A020B41CD30BD130078A26332080A clothing. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cRqIw6MonQpGS1TfFaYEllha14yZul2C++cL7Q85gkCKnikYCbGbl3hdQLJHIbszX7C50OTHS2ICCMXmCkhJW82uwZdixuRHOL+aF2vvkPWGuqzwbmungJmwKEIaAeFTQLAVa+gRF4ZDfOWe2i2DDomaAgtBzTC9EwB4omMyCAo= ;{id = 33655} 08636C6F7468696E6700002E0001000151800093002F08010001518052F4220052EAD970837700794A7E1AFFB32A320E2C878AE193B31094ED31CE0FFF87D46B6D8EB9FBCCD51C1219A385C0F249334409333B52E8BAB42267C55B5B49FACED97208EC93F5753E79B05FF133418422CE4514349A16B7BD451ED29601974597D9E028D2631474E4759B7B55D6A422EDFB8916CAF82B1654896460DEA58CA42B149ED74EEBD89A2B clothing. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eUp+Gv+zKjIOLIeK4ZOzEJTtMc4P/4fUa22OufvM1RwSGaOFwPJJM0QJMztS6Lq0ImfFW1tJ+s7Zcgjsk/V1PnmwX/EzQYQizkUUNJoWt71FHtKWAZdFl9ngKNJjFHTkdZt7VdakIu37iRbK+CsWVIlkYN6ljKQrFJ7XTuvYmis= ;{id = 33655} 08636C6F7468696E6700002F000100015180000E04636C7562000006200000000013 clothing. 86400 IN NSEC club. NS DS RRSIG NSEC 04636C756200000200010002A3000012036E733103646E73036E696304636C756200 club. 172800 IN NS ns1.dns.nic.club. 04636C756200000200010002A3000012036E733203646E73036E696304636C756200 club. 172800 IN NS ns2.dns.nic.club. 04636C756200000200010002A3000012036E733303646E73036E696304636C756200 club. 172800 IN NS ns3.dns.nic.club. 04636C756200000200010002A3000012036E733403646E73036E696304636C756200 club. 172800 IN NS ns4.dns.nic.club. 04636C756200000200010002A3000012036E733503646E73036E696304636C756200 club. 172800 IN NS ns5.dns.nic.club. 04636C756200000200010002A3000012036E733603646E73036E696304636C756200 club. 172800 IN NS ns6.dns.nic.club. 04636C756200000200010002A3000012036E733703646E73036E696304636C756200 club. 172800 IN NS ns7.dns.nic.club. 04636C756200002B0001000151800018248208013E247E0A6BC2660B58ABF34967A2EA60B7944568 club. 86400 IN DS 9346 8 1 3E247E0A6BC2660B58ABF34967A2EA60B7944568 04636C756200002B0001000151800024248208023668A7F42E8BDCE70C17B8A8DE9F4505F8E10D4C1E95BBD3FB0DE6A488450C47 club. 86400 IN DS 9346 8 2 3668A7F42E8BDCE70C17B8A8DE9F4505F8E10D4C1E95BBD3FB0DE6A488450C47 04636C756200002E0001000151800093002B08010001518052F4220052EAD970837700893EF03F9D1143BD77FFC03414F1938F546835463C5E50319E96B20A15D9033C0EED7608E3357CC92A77662D76F498394313F09C1F89EB10ABF4248381CFB07056C4DF5A88BC1E85BB0EF8F7EE7BDBC62C6FFE3C8C26429EA8AB621B74FAD676BDD02564E1285879C0CD711777A19F62B666E750F79DA3B23CF5C1FA0CA76F4A club. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iT7wP50RQ713/8A0FPGTj1RoNUY8XlAxnpayChXZAzwO7XYI4zV8ySp3Zi129Jg5QxPwnB+J6xCr9CSDgc+wcFbE31qIvB6Fuw749+5728Ysb/48jCZCnqirYht0+tZ2vdAlZOEoWHnAzXEXd6GfYrZm51D3naOyPPXB+gynb0o= ;{id = 33655} 04636C756200002E0001000151800093002F08010001518052F4220052EAD970837700B5AFFBFC23CBF4100A6164F3EAA0C76004AB3F830139995877F649F98B93DD78418FAE54D801BD901D64E28F6E7D8791CB75256E6822134201C9DFE0A5C65189395E90535F1F48C98AB6B48C685F4FEA29A22BD376A9698E698C42073C35D874169099F7BEA8E2A5F425D2E347177A03F99B8D04A929D49B5686E540DA99ADF1 club. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ta/7/CPL9BAKYWTz6qDHYASrP4MBOZlYd/ZJ+YuT3XhBj65U2AG9kB1k4o9ufYeRy3UlbmgiE0IByd/gpcZRiTlekFNfH0jJira0jGhfT+opoivTdqlpjmmMQgc8Ndh0FpCZ976o4qX0JdLjRxd6A/mbjQSpKdSbVoblQNqZrfE= ;{id = 33655} 04636C756200002F000100015180000C02636D000006200000000013 club. 86400 IN NSEC cm. NS DS RRSIG NSEC 036E733103646E73036E696304636C756200000100010002A30000049C9A90D7 ns1.dns.nic.club. 172800 IN A 156.154.144.215 036E733103646E73036E696304636C756200001C00010002A3000010261000A11071000000000000000000D7 ns1.dns.nic.club. 172800 IN AAAA 2610:a1:1071::d7 036E733203646E73036E696304636C756200000100010002A30000049C9A91D7 ns2.dns.nic.club. 172800 IN A 156.154.145.215 036E733203646E73036E696304636C756200001C00010002A3000010261000A11072000000000000000000D7 ns2.dns.nic.club. 172800 IN AAAA 2610:a1:1072::d7 036E733303646E73036E696304636C756200000100010002A30000049C9A9FD7 ns3.dns.nic.club. 172800 IN A 156.154.159.215 036E733303646E73036E696304636C756200001C00010002A3000010261000A11073000000000000000000D7 ns3.dns.nic.club. 172800 IN AAAA 2610:a1:1073::d7 036E733403646E73036E696304636C756200000100010002A30000049C9A9CD7 ns4.dns.nic.club. 172800 IN A 156.154.156.215 036E733403646E73036E696304636C756200001C00010002A3000010261000A11074000000000000000000D7 ns4.dns.nic.club. 172800 IN AAAA 2610:a1:1074::d7 036E733503646E73036E696304636C756200000100010002A30000049C9A9DD7 ns5.dns.nic.club. 172800 IN A 156.154.157.215 036E733503646E73036E696304636C756200001C00010002A3000010261000A11075000000000000000000D7 ns5.dns.nic.club. 172800 IN AAAA 2610:a1:1075::d7 036E733603646E73036E696304636C756200000100010002A30000049C9A9ED7 ns6.dns.nic.club. 172800 IN A 156.154.158.215 036E733603646E73036E696304636C756200001C00010002A3000010261000A11076000000000000000000D7 ns6.dns.nic.club. 172800 IN AAAA 2610:a1:1076::d7 036E733703646E73036E696304636C756200000100010002A3000004CF22050A ns7.dns.nic.club. 172800 IN A 207.34.5.10 036E733703646E73036E696304636C756200001C00010002A3000010200105037BBBFFFFFFFFFFFFFFFFFF7E ns7.dns.nic.club. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e 02636D00000200010002A300001B02636D056363746C640761757468646E730472697065036E657400 cm. 172800 IN NS cm.cctld.authdns.ripe.net. 02636D00000200010002A300000B026E730369747502636800 cm. 172800 IN NS ns.itu.ch. 02636D00000200010002A300000F036B696D0663616D6E657402636D00 cm. 172800 IN NS kim.camnet.cm. 02636D00000200010002A300000F036C6F6D0663616D6E657402636D00 cm. 172800 IN NS lom.camnet.cm. 02636D00000200010002A300001206617574683032026E73027575036E657400 cm. 172800 IN NS auth02.ns.uu.net. 02636D00000200010002A30000120673616E6167610663616D6E657402636D00 cm. 172800 IN NS sanaga.camnet.cm. 02636D00002F000100015180000C02636E000006200000000003 cm. 86400 IN NSEC cn. NS RRSIG NSEC 02636D00002E0001000151800093002F08010001518052F4220052EAD97083770095C4CB8C5703144A33883654B1309C9745795C973D4E4E10C556C0F41DD4E25C08B897477DEE9BA4E8ACFFD21067DE39F465D628D13F15BFD2A593588F78EF2352EC7CF68780AAF4EFE7B4D5239730837C15AF9B96455F953C35043C51ECB20A7CD246FF61B9D35D25E5FA8F4E0D6C9741F981C5B51E8CDBCD346CB77A09930E cm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . lcTLjFcDFEoziDZUsTCcl0V5XJc9Tk4QxVbA9B3U4lwIuJdHfe6bpOis/9IQZ9459GXWKNE/Fb/SpZNYj3jvI1LsfPaHgKr07+e01SOXMIN8Fa+blkVflTw1BDxR7LIKfNJG/2G5010l5fqPTg1sl0H5gcW1HozbzTRst3oJkw4= ;{id = 33655} 036B696D0663616D6E657402636D00000100010002A3000004C318C023 kim.camnet.cm. 172800 IN A 195.24.192.35 036C6F6D0663616D6E657402636D00000100010002A3000004C318C022 lom.camnet.cm. 172800 IN A 195.24.192.34 0673616E6167610663616D6E657402636D00000100010002A3000004C318C011 sanaga.camnet.cm. 172800 IN A 195.24.192.17 02636E00002F000100015180000C02636F000006200000000013 cn. 86400 IN NSEC co. NS DS RRSIG NSEC 02636E00002E0001000151800093002F08010001518052F4220052EAD970837700A9D369F572AA9F0F2D0485C63137F4352999C4BCF1414D2A2FD105890CA3525361F3C9B186DE64150C2F02E8D42740681ABD364473FE0E8B82F956823D1FE495FD78AE5E97959A9975064BB27FC6D10A89BC1B886731A42519930613FA9C7B76E520DA4930B3FA27EFFBD1444B7CF0B584BC54F75993250319F6F58BD47E69A0 cn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qdNp9XKqnw8tBIXGMTf0NSmZxLzxQU0qL9EFiQyjUlNh88mxht5kFQwvAujUJ0BoGr02RHP+DouC+VaCPR/klf14rl6XlZqZdQZLsn/G0QqJvBuIZzGkJRmTBhP6nHt25SDaSTCz+ifv+9FES3zwtYS8VPdZkyUDGfb1i9R+aaA= ;{id = 33655} 02636E00002E0001000151800093002B08010001518052F4220052EAD9708377001419FE6251874AEC57F52CCB7A37E790DE9BAD1CE2096107BD5E67DFDC0B54E7E035567D8D6B521481BD7997016DC951BFFD77D7E3B59AA3A62DCAAED1F04470A05619939C5915D2CB20B062C260F3F92BA5DDCE203044758C6BCBE385EEFB082CC53713287A3CC296F56571A7885F7516CE09666CDEB49C58B1EECC159ECFF6 cn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . FBn+YlGHSuxX9SzLejfnkN6brRziCWEHvV5n39wLVOfgNVZ9jWtSFIG9eZcBbclRv/131+O1mqOmLcqu0fBEcKBWGZOcWRXSyyCwYsJg8/krpd3OIDBEdYxry+OF7vsILMU3Eyh6PMKW9WVxp4hfdRbOCWZs3rScWLHuzBWez/Y= ;{id = 33655} 02636E00000200010002A300000A016103646E7302636E00 cn. 172800 IN NS a.dns.cn. 02636E00000200010002A300000A016203646E7302636E00 cn. 172800 IN NS b.dns.cn. 02636E00000200010002A300000A016303646E7302636E00 cn. 172800 IN NS c.dns.cn. 02636E00000200010002A300000A016403646E7302636E00 cn. 172800 IN NS d.dns.cn. 02636E00000200010002A300000A016503646E7302636E00 cn. 172800 IN NS e.dns.cn. 02636E00000200010002A300000F026E73066365726E6574036E657400 cn. 172800 IN NS ns.cernet.net. 02636E00002B0001000151800024D5A60802ED958DDCD959A23D3181CCC4610AE4B2166A072A057B95DDDCCD423256441C1A cn. 86400 IN DS 54694 8 2 ED958DDCD959A23D3181CCC4610AE4B2166A072A057B95DDDCCD423256441C1A 036E733105636F6E616302636E00000100010002A30000046FEBA101 ns1.conac.cn. 172800 IN A 111.235.161.1 036E733105636F6E616302636E00001C00010002A30000102401B400000100000000000000000001 ns1.conac.cn. 172800 IN AAAA 2401:b400:1::1 036E733205636F6E616302636E00000100010002A30000046FEBA201 ns2.conac.cn. 172800 IN A 111.235.162.1 036E733205636F6E616302636E00001C00010002A30000102401B400000800000000000000000001 ns2.conac.cn. 172800 IN AAAA 2401:b400:8::1 036E733305636F6E616302636E00000100010002A30000046FEBA301 ns3.conac.cn. 172800 IN A 111.235.163.1 036E733305636F6E616302636E00001C00010002A30000102401B400000900000000000000000001 ns3.conac.cn. 172800 IN AAAA 2401:b400:9::1 036E733405636F6E616302636E00000100010002A30000046FEBA401 ns4.conac.cn. 172800 IN A 111.235.164.1 036E733505636F6E616302636E00000100010002A30000046FEBA501 ns5.conac.cn. 172800 IN A 111.235.165.1 016103646E7302636E00000100010002A3000004CB771901 a.dns.cn. 172800 IN A 203.119.25.1 016103646E7302636E00001C00010002A300001020010DC7000000000000000000000001 a.dns.cn. 172800 IN AAAA 2001:dc7::1 016203646E7302636E00000100010002A3000004CB771A01 b.dns.cn. 172800 IN A 203.119.26.1 016303646E7302636E00000100010002A3000004CB771B01 c.dns.cn. 172800 IN A 203.119.27.1 016403646E7302636E00000100010002A3000004CB771C01 d.dns.cn. 172800 IN A 203.119.28.1 016403646E7302636E00001C00010002A300001020010DC7100000000000000000000001 d.dns.cn. 172800 IN AAAA 2001:dc7:1000::1 016503646E7302636E00000100010002A3000004CB771D01 e.dns.cn. 172800 IN A 203.119.29.1 016803646E7302636E00000100010002A30000047DD02001 h.dns.cn. 172800 IN A 125.208.32.1 016803646E7302636E00001C00010002A300001020010DC7FFFE00000000000000000001 h.dns.cn. 172800 IN AAAA 2001:dc7:fffe::1 016903646E7302636E00000100010002A30000047DD02101 i.dns.cn. 172800 IN A 125.208.33.1 016903646E7302636E00001C00010002A300001020010DC7FFFF00000000000000000001 i.dns.cn. 172800 IN AAAA 2001:dc7:ffff::1 016A03646E7302636E00000100010002A30000047DD02201 j.dns.cn. 172800 IN A 125.208.34.1 016B03646E7302636E00000100010002A30000047DD02301 k.dns.cn. 172800 IN A 125.208.35.1 016C03646E7302636E00000100010002A30000047DD02401 l.dns.cn. 172800 IN A 125.208.36.1 0161056E67746C6402636E00000100010002A30000047DD02801 a.ngtld.cn. 172800 IN A 125.208.40.1 0161056E67746C6402636E00001C00010002A300001020010DC7FFC100000000000000000001 a.ngtld.cn. 172800 IN AAAA 2001:dc7:ffc1::1 0162056E67746C6402636E00000100010002A30000047DD02901 b.ngtld.cn. 172800 IN A 125.208.41.1 0162056E67746C6402636E00001C00010002A300001020010DC7FFC200000000000000000001 b.ngtld.cn. 172800 IN AAAA 2001:dc7:ffc2::1 0163056E67746C6402636E00000100010002A30000047DD02A01 c.ngtld.cn. 172800 IN A 125.208.42.1 0163056E67746C6402636E00001C00010002A300001020010DC7FFC300000000000000000001 c.ngtld.cn. 172800 IN AAAA 2001:dc7:ffc3::1 0164056E67746C6402636E00000100010002A30000047DD02B01 d.ngtld.cn. 172800 IN A 125.208.43.1 0165056E67746C6402636E00000100010002A30000047DD02C01 e.ngtld.cn. 172800 IN A 125.208.44.1 02636F00000200010002A300000E036E7331056363746C6402636F00 co. 172800 IN NS ns1.cctld.co. 02636F00000200010002A300000E036E7332056363746C6402636F00 co. 172800 IN NS ns2.cctld.co. 02636F00000200010002A300000E036E7333056363746C6402636F00 co. 172800 IN NS ns3.cctld.co. 02636F00000200010002A300000E036E7334056363746C6402636F00 co. 172800 IN NS ns4.cctld.co. 02636F00000200010002A300000E036E7335056363746C6402636F00 co. 172800 IN NS ns5.cctld.co. 02636F00000200010002A300000E036E7336056363746C6402636F00 co. 172800 IN NS ns6.cctld.co. 02636F00002B00010001518000186CD3080163D2DAEB4D479BD4DFF4202D9BDC82B309C2CCD5 co. 86400 IN DS 27859 8 1 63D2DAEB4D479BD4DFF4202D9BDC82B309C2CCD5 02636F00002B00010001518000246CD30802EF8F5B56FA9A79EF29A82330DB625BA19CE3A5B140B24287855DDAAA03EA369B co. 86400 IN DS 27859 8 2 EF8F5B56FA9A79EF29A82330DB625BA19CE3A5B140B24287855DDAAA03EA369B 02636F00002E0001000151800093002B08010001518052F4220052EAD97083770000805CC7BF11E69014BFA69B4F0D9F619F4A99EFD37A97B0749FB229CC8788BB59CEE8B11385A7B2AB082FF05586D92535EF07AB2BB624657FEC312D2E231F8A33D400C40EA680BCD606E86C8A47F1AF5EAB4E330F3A558D5BECE2E7DCC05A7AD0AD1E13FBD323ED4844BD81173736C99917DA793E96B6084FAB52C14DD9956F co. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . AIBcx78R5pAUv6abTw2fYZ9Kme/TepewdJ+yKcyHiLtZzuixE4WnsqsIL/BVhtklNe8Hqyu2JGV/7DEtLiMfijPUAMQOpoC81gbobIpH8a9eq04zDzpVjVvs4ufcwFp60K0eE/vTI+1IRL2BFzc2yZkX2nk+lrYIT6tSwU3ZlW8= ;{id = 33655} 02636F00002E0001000151800093002F08010001518052F4220052EAD9708377006083D9E0EA5E1DEC559C9D6577DF3C446A7E07D28BB4F71CF200035C310E81CECFF565A02872411623EAB9507664E3B4FAE89CC6054FD7A46ECF1657F340653599D7C94AB035FB297744738DFC8CFE0A5E816C0531B55531E8B1CEE19BD8FBD0102B87A4C8AFC377C8D897BDD94DE712DD7194CCBA01DA4EFA61D30ACD31C37D co. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . YIPZ4OpeHexVnJ1ld988RGp+B9KLtPcc8gADXDEOgc7P9WWgKHJBFiPquVB2ZOO0+uicxgVP16RuzxZX80BlNZnXyUqwNfspd0RzjfyM/gpegWwFMbVVMeixzuGb2PvQECuHpMivw3fI2Je92U3nEt1xlMy6AdpO+mHTCs0xw30= ;{id = 33655} 02636F00002F000100015180000F05636F646573000006200000000013 co. 86400 IN NSEC codes. NS DS RRSIG NSEC 036E7331056363746C6402636F00000100010002A30000049C9A6419 ns1.cctld.co. 172800 IN A 156.154.100.25 036E7331056363746C6402636F00001C00010002A3000010200105022EDA00000000000000000021 ns1.cctld.co. 172800 IN AAAA 2001:502:2eda::21 036E7332056363746C6402636F00000100010002A30000049C9A6519 ns2.cctld.co. 172800 IN A 156.154.101.25 036E7332056363746C6402636F00001C00010002A300001020010502AD0900000000000000000021 ns2.cctld.co. 172800 IN AAAA 2001:502:ad09::21 036E7333056363746C6402636F00000100010002A30000049C9A6619 ns3.cctld.co. 172800 IN A 156.154.102.25 036E7333056363746C6402636F00001C00010002A3000010261000A1100900000000000000000021 ns3.cctld.co. 172800 IN AAAA 2610:a1:1009::21 036E7334056363746C6402636F00000100010002A30000049C9A6719 ns4.cctld.co. 172800 IN A 156.154.103.25 036E7334056363746C6402636F00001C00010002A3000010261000A1101000000000000000000021 ns4.cctld.co. 172800 IN AAAA 2610:a1:1010::21 036E7335056363746C6402636F00000100010002A30000049C9A6819 ns5.cctld.co. 172800 IN A 156.154.104.25 036E7335056363746C6402636F00001C00010002A3000010261000A1101100000000000000000021 ns5.cctld.co. 172800 IN AAAA 2610:a1:1011::21 036E7336056363746C6402636F00000100010002A30000049C9A6919 ns6.cctld.co. 172800 IN A 156.154.105.25 036E7336056363746C6402636F00001C00010002A3000010261000A1101200000000000000000021 ns6.cctld.co. 172800 IN AAAA 2610:a1:1012::21 05636F64657300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 codes. 172800 IN NS demand.beta.aridns.net.au. 05636F64657300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 codes. 172800 IN NS demand.alpha.aridns.net.au. 05636F64657300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 codes. 172800 IN NS demand.delta.aridns.net.au. 05636F64657300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 codes. 172800 IN NS demand.gamma.aridns.net.au. 05636F64657300002B00010001518000246A720802FE5F7FDA8B08DB3EF8B4B05DD3ED27C9387DAE66543F9D5870E402D11D7B2DDF codes. 86400 IN DS 27250 8 2 FE5F7FDA8B08DB3EF8B4B05DD3ED27C9387DAE66543F9D5870E402D11D7B2DDF 05636F64657300002E0001000151800093002B08010001518052F4220052EAD9708377005A938D4612747842512C6AA65BC972F5E4BE860CCF4387271C569FA1FD99DDB056DC8C816BC96674532F7EAF171ED14DEC157758ECA2073FA7B448BAFD81A4322D7AB89E2604AE824629C08196878F008D722737419E3E3A95B421DB13FEDC63516293DFEEA63082C26A82E32AEDC70DD70D575F2261AB3B8B4FD3936434F590 codes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WpONRhJ0eEJRLGqmW8ly9eS+hgzPQ4cnHFafof2Z3bBW3IyBa8lmdFMvfq8XHtFN7BV3WOyiBz+ntEi6/YGkMi16uJ4mBK6CRinAgZaHjwCNcic3QZ4+OpW0IdsT/txjUWKT3+6mMILCaoLjKu3HDdcNV18iYas7i0/Tk2Q09ZA= ;{id = 33655} 05636F64657300002E0001000151800093002F08010001518052F4220052EAD9708377008D940F2F50E1866C784C01A6D05BC9C7F5FC6DC70AC42273959FB73990880790AB1118E434FB53C7E77CE0E565CAC522351509F4106D6D4D8409B242DA0B792CAB06CB764B92316511EF46A9B4CDCDCE89B1AA76F3BEC957BB7995CF7887619CA477579B5D9511ADA37B48B6062C277C0A51B783F398E63CCE72C07A356170A7 codes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jZQPL1Dhhmx4TAGm0FvJx/X8bccKxCJzlZ+3OZCIB5CrERjkNPtTx+d84OVlysUiNRUJ9BBtbU2ECbJC2gt5LKsGy3ZLkjFlEe9GqbTNzc6Jsap2877JV7t5lc94h2GcpHdXm12VEa2je0i2BiwnfApRt4PzmOY8znLAejVhcKc= ;{id = 33655} 05636F64657300002F000100015180001006636F66666565000006200000000013 codes. 86400 IN NSEC coffee. NS DS RRSIG NSEC 06636F6666656500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 coffee. 172800 IN NS demand.beta.aridns.net.au. 06636F6666656500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 coffee. 172800 IN NS demand.alpha.aridns.net.au. 06636F6666656500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 coffee. 172800 IN NS demand.delta.aridns.net.au. 06636F6666656500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 coffee. 172800 IN NS demand.gamma.aridns.net.au. 06636F6666656500002B0001000151800024A0A208026CCD81F37B53B3959B28C8BE299BD41FACBE306676E636FFF9556AEAA1948F2C coffee. 86400 IN DS 41122 8 2 6CCD81F37B53B3959B28C8BE299BD41FACBE306676E636FFF9556AEAA1948F2C 06636F6666656500002E0001000151800093002B08010001518052F4220052EAD9708377004FD18F18F43E1C36A18E88A6F74CE1DF06184AE2671D37182E93CC1319E3538B882C29F8C01D2923F9794B88443B561F8DEFF2B23347A2DC23410D4363942364A79CE8300472D0D70FD2AE9BA3F3D7AD15AD2DCC10AD8CC8E2973D30C01B281B12183DBE3CC5E3A07DED286D9DFD0D3EBAABF5DBE234C77ADDDCD8D2EF15A03B coffee. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . T9GPGPQ+HDahjoim90zh3wYYSuJnHTcYLpPMExnjU4uILCn4wB0pI/l5S4hEO1Yfje/ysjNHotwjQQ1DY5QjZKec6DAEctDXD9Kum6Pz160VrS3MEK2MyOKXPTDAGygbEhg9vjzF46B97Shtnf0NPrqr9dviNMd63dzY0u8VoDs= ;{id = 33655} 06636F6666656500002E0001000151800093002F08010001518052F4220052EAD97083770030159CB438CB091A8CC7A1E0DED065A6891BEAF72D4969879BF5EA095586C75F5E96B823B7977BDC9E319407288B22C01F463F520E9F13694B2423483F4841B94EB50DB5595BEF36DB1D03BF9333FDAB80A86DB0DE8FE4B066EE55E08C16445603C4B23635E5C69869440A66119065ABE2AD4A7C941F2C0BD3DD5CFED3429F4D coffee. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MBWctDjLCRqMx6Hg3tBlpokb6vctSWmHm/XqCVWGx19elrgjt5d73J4xlAcoiyLAH0Y/Ug6fE2lLJCNIP0hBuU61DbVZW+822x0Dv5Mz/auAqG2w3o/ksGbuVeCMFkRWA8SyNjXlxphpRApmEZBlq+KtSnyUHywL091c/tNCn00= ;{id = 33655} 06636F6666656500002F000100015180000D03636F6D000006200000000013 coffee. 86400 IN NSEC com. NS DS RRSIG NSEC 03636F6D00002F000100015180001309636F6D6D756E697479000006200000000013 com. 86400 IN NSEC community. NS DS RRSIG NSEC 03636F6D00002E0001000151800093002F08010001518052F4220052EAD97083770055BAFFC5AB58A8AC169EBCE24794EA106D7F75C4001C00EC8C1DE75FFA83595F969139C87C529533212798EFA6E9E0308DD010021735BA55D665950D62B24A5146B306B5C885158C8F2BFA45A3BDCA324154DB3435E95E262F54C2AC6B72D642D0B56D992511CB576D9BC7B0EBFA4B312DA3F5F96BF31FFA159FD3A1E9FD9D10 com. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Vbr/xatYqKwWnrziR5TqEG1/dcQAHADsjB3nX/qDWV+WkTnIfFKVMyEnmO+m6eAwjdAQAhc1ulXWZZUNYrJKUUazBrXIhRWMjyv6RaO9yjJBVNs0NeleJi9UwqxrctZC0LVtmSURy1dtm8ew6/pLMS2j9flr8x/6FZ/Toen9nRA= ;{id = 33655} 03636F6D00002E0001000151800093002B08010001518052F4220052EAD970837700718314C74D404F18FB6949A2DD47003719B8CB94544B6CC25A74D9E3B6C2CE252A44C35F25ECB061FED6A0F0E5F84B631C8D7CC7B844F8FB298D0D2C597A7E1C7205EB54B781E470DC33E993B98E136E76CCBF7E5B917E3BBC37C2072FEAB9E48C81CA5BD0571E85BBAA18212317997FC45DCEB2932C336A1CC0886D8CC9C2FB com. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cYMUx01ATxj7aUmi3UcANxm4y5RUS2zCWnTZ47bCziUqRMNfJeywYf7WoPDl+EtjHI18x7hE+PspjQ0sWXp+HHIF61S3geRw3DPpk7mOE252zL9+W5F+O7w3wgcv6rnkjIHKW9BXHoW7qhghIxeZf8RdzrKTLDNqHMCIbYzJwvs= ;{id = 33655} 03636F6D00000200010002A300001401610C67746C642D73657276657273036E657400 com. 172800 IN NS a.gtld-servers.net. 03636F6D00000200010002A300001401620C67746C642D73657276657273036E657400 com. 172800 IN NS b.gtld-servers.net. 03636F6D00000200010002A300001401630C67746C642D73657276657273036E657400 com. 172800 IN NS c.gtld-servers.net. 03636F6D00000200010002A300001401640C67746C642D73657276657273036E657400 com. 172800 IN NS d.gtld-servers.net. 03636F6D00000200010002A300001401650C67746C642D73657276657273036E657400 com. 172800 IN NS e.gtld-servers.net. 03636F6D00000200010002A300001401660C67746C642D73657276657273036E657400 com. 172800 IN NS f.gtld-servers.net. 03636F6D00000200010002A300001401670C67746C642D73657276657273036E657400 com. 172800 IN NS g.gtld-servers.net. 03636F6D00000200010002A300001401680C67746C642D73657276657273036E657400 com. 172800 IN NS h.gtld-servers.net. 03636F6D00000200010002A300001401690C67746C642D73657276657273036E657400 com. 172800 IN NS i.gtld-servers.net. 03636F6D00000200010002A3000014016A0C67746C642D73657276657273036E657400 com. 172800 IN NS j.gtld-servers.net. 03636F6D00000200010002A3000014016B0C67746C642D73657276657273036E657400 com. 172800 IN NS k.gtld-servers.net. 03636F6D00000200010002A3000014016C0C67746C642D73657276657273036E657400 com. 172800 IN NS l.gtld-servers.net. 03636F6D00000200010002A3000014016D0C67746C642D73657276657273036E657400 com. 172800 IN NS m.gtld-servers.net. 03636F6D00002B000100015180002478BD0802E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CFC41A5766 com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CFC41A5766 026E730C616D61727368616C6C696E6303636F6D00000100010002A300000447A3F961 ns.amarshallinc.com. 172800 IN A 71.163.249.97 026E7313626C61636B6E69676874736F6C7574696F6E7303636F6D00000100010002A3000004D972AD06 ns.blacknightsolutions.com. 172800 IN A 217.114.173.6 026E7313626C61636B6E69676874736F6C7574696F6E7303636F6D00001C00010002A30000102A0100A8FE0000000000000000000002 ns.blacknightsolutions.com. 172800 IN AAAA 2a01:a8:fe00::2 036E733213626C61636B6E69676874736F6C7574696F6E7303636F6D00000100010002A300000452606140 ns2.blacknightsolutions.com. 172800 IN A 82.96.97.64 036E733213626C61636B6E69676874736F6C7574696F6E7303636F6D00001C00010002A300001020011BC000AB00030000000000000002 ns2.blacknightsolutions.com. 172800 IN AAAA 2001:1bc0:ab:3::2 076E732D746C643116636861726C6573746F6E726F6164726567697374727903636F6D00000100010002A3000004D8EF2069 ns-tld1.charlestonroadregistry.com. 172800 IN A 216.239.32.105 076E732D746C643116636861726C6573746F6E726F6164726567697374727903636F6D00001C00010002A300001020014860480200320000000000000069 ns-tld1.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:32::69 076E732D746C643216636861726C6573746F6E726F6164726567697374727903636F6D00000100010002A3000004D8EF2269 ns-tld2.charlestonroadregistry.com. 172800 IN A 216.239.34.105 076E732D746C643216636861726C6573746F6E726F6164726567697374727903636F6D00001C00010002A300001020014860480200340000000000000069 ns-tld2.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:34::69 076E732D746C643316636861726C6573746F6E726F6164726567697374727903636F6D00000100010002A3000004D8EF2469 ns-tld3.charlestonroadregistry.com. 172800 IN A 216.239.36.105 076E732D746C643316636861726C6573746F6E726F6164726567697374727903636F6D00001C00010002A300001020014860480200360000000000000069 ns-tld3.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:36::69 076E732D746C643416636861726C6573746F6E726F6164726567697374727903636F6D00000100010002A3000004D8EF2669 ns-tld4.charlestonroadregistry.com. 172800 IN A 216.239.38.105 076E732D746C643416636861726C6573746F6E726F6164726567697374727903636F6D00001C00010002A300001020014860480200380000000000000069 ns-tld4.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:38::69 076E732D746C643516636861726C6573746F6E726F6164726567697374727903636F6D00000100010002A3000004D8EF3C69 ns-tld5.charlestonroadregistry.com. 172800 IN A 216.239.60.105 076E732D746C643516636861726C6573746F6E726F6164726567697374727903636F6D00001C00010002A300001020014860480500000000000000000069 ns-tld5.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4805::69 09757563702D67772D310270610364656303636F6D00000100010002A3000004CC7B0212 uucp-gw-1.pa.dec.com. 172800 IN A 204.123.2.18 09757563702D67772D320270610364656303636F6D00000100010002A3000004CC7B0213 uucp-gw-2.pa.dec.com. 172800 IN A 204.123.2.19 04646E733306646F74756B7203636F6D00000100010002A300000425BB4B1F dns3.dotukr.com. 172800 IN A 37.187.75.31 04646E733306646F74756B7203636F6D00001C00010002A3000010200141D0000A2B1F0000000000000001 dns3.dotukr.com. 172800 IN AAAA 2001:41d0:a:2b1f::1 0661757374696E02676803636F6D00000100010002A3000004C4034001 austin.gh.com. 172800 IN A 196.3.64.1 066D616E74736502676803636F6D00000100010002A3000004C1C2B902 mantse.gh.com. 172800 IN A 193.194.185.2 036E7331076961667269636103636F6D00000100010002A3000004C407008B ns1.iafrica.com. 172800 IN A 196.7.0.139 05686F70707903696F6D03636F6D00000100010002A3000004D917A38C hoppy.iom.com. 172800 IN A 217.23.163.140 07706562626C657303696F6D03636F6D00000100010002A300000450A853F2 pebbles.iom.com. 172800 IN A 80.168.83.242 03746C64076973632D736E7303636F6D00000100010002A300000426670203 tld.isc-sns.com. 172800 IN A 38.103.2.3 056E732D6D67086D616C616761737903636F6D00000100010002A3000004576284E7 ns-mg.malagasy.com. 172800 IN A 87.98.132.231 036E7331056E656F697003636F6D00000100010002A30000043E5AF776 ns1.neoip.com. 172800 IN A 62.90.247.118 036E7332056E656F697003636F6D00000100010002A3000004D06D1196 ns2.neoip.com. 172800 IN A 208.109.17.150 036E7335076E6F6D696E756D03636F6D00000100010002A30000044A797F23 ns5.nominum.com. 172800 IN A 74.121.127.35 026135056E73746C6403636F6D00000100010002A3000004C0050622 a5.nstld.com. 172800 IN A 192.5.6.34 026136056E73746C6403636F6D00000100010002A3000004C0050623 a6.nstld.com. 172800 IN A 192.5.6.35 026335056E73746C6403636F6D00000100010002A3000004C01A5C22 c5.nstld.com. 172800 IN A 192.26.92.34 026336056E73746C6403636F6D00000100010002A3000004C01A5C23 c6.nstld.com. 172800 IN A 192.26.92.35 026435056E73746C6403636F6D00000100010002A3000004C01F5022 d5.nstld.com. 172800 IN A 192.31.80.34 026436056E73746C6403636F6D00000100010002A3000004C01F5023 d6.nstld.com. 172800 IN A 192.31.80.35 026635056E73746C6403636F6D00000100010002A3000004C0233322 f5.nstld.com. 172800 IN A 192.35.51.34 026635056E73746C6403636F6D00001C00010002A300001020010503D41400000000000000020034 f5.nstld.com. 172800 IN AAAA 2001:503:d414::2:34 026636056E73746C6403636F6D00000100010002A3000004C0233323 f6.nstld.com. 172800 IN A 192.35.51.35 026636056E73746C6403636F6D00001C00010002A300001020010503D41400000000000000020035 f6.nstld.com. 172800 IN AAAA 2001:503:d414::2:35 026735056E73746C6403636F6D00000100010002A3000004C02A5D22 g5.nstld.com. 172800 IN A 192.42.93.34 026736056E73746C6403636F6D00000100010002A3000004C02A5D23 g6.nstld.com. 172800 IN A 192.42.93.35 026835056E73746C6403636F6D00000100010002A3000004C0367022 h5.nstld.com. 172800 IN A 192.54.112.34 026835056E73746C6403636F6D00001C00010002A30000102001050208CC00000000000000020034 h5.nstld.com. 172800 IN AAAA 2001:502:8cc::2:34 026836056E73746C6403636F6D00000100010002A3000004C0367023 h6.nstld.com. 172800 IN A 192.54.112.35 026836056E73746C6403636F6D00001C00010002A30000102001050208CC00000000000000020035 h6.nstld.com. 172800 IN AAAA 2001:502:8cc::2:35 026A36056E73746C6403636F6D00000100010002A3000004C0304F23 j6.nstld.com. 172800 IN A 192.48.79.35 026B36056E73746C6403636F6D00000100010002A3000004C034B223 k6.nstld.com. 172800 IN A 192.52.178.35 026C35056E73746C6403636F6D00000100010002A3000004C029A222 l5.nstld.com. 172800 IN A 192.41.162.34 026C36056E73746C6403636F6D00000100010002A3000004C029A223 l6.nstld.com. 172800 IN A 192.41.162.35 026D36056E73746C6403636F6D00000100010002A3000004C0375323 m6.nstld.com. 172800 IN A 192.55.83.35 036E73310D6F72616E67656361726169626503636F6D00000100010002A3000004C1FBA0DE ns1.orangecaraibe.com. 172800 IN A 193.251.160.222 036E7331047061697203636F6D00000100010002A3000004D144010B ns1.pair.com. 172800 IN A 209.68.1.11 076B796E736530310C706572696D6574657275736103636F6D00000100010002A3000004D836A81A kynse01.perimeterusa.com. 172800 IN A 216.54.168.26 076B796E736530320C706572696D6574657275736103636F6D00000100010002A3000004D836A81B kynse02.perimeterusa.com. 172800 IN A 216.54.168.27 076B796E736530330C706572696D6574657275736103636F6D00000100010002A3000004D836A81C kynse03.perimeterusa.com. 172800 IN A 216.54.168.28 076B796E737730310C706572696D6574657275736103636F6D00000100010002A3000004A5D4A00F kynsw01.perimeterusa.com. 172800 IN A 165.212.160.15 076B796E737730320C706572696D6574657275736103636F6D00000100010002A3000004A5D4A010 kynsw02.perimeterusa.com. 172800 IN A 165.212.160.16 076B796E737730330C706572696D6574657275736103636F6D00000100010002A3000004A5D4A011 kynsw03.perimeterusa.com. 172800 IN A 165.212.160.17 047261696E0370736703636F6D00000100010002A3000004931C0022 rain.psg.com. 172800 IN A 147.28.0.34 037269700370736703636F6D00000100010002A3000004931C0027 rip.psg.com. 172800 IN A 147.28.0.39 037269700370736703636F6D00001C00010002A300001020010418000100000000000000000039 rip.psg.com. 172800 IN AAAA 2001:418:1::39 036E7331036E657405726561636803636F6D00000100010002A3000004869F028C ns1.net.reach.com. 172800 IN A 134.159.2.140 036E73320A746F6A696B6973746F6E03636F6D00000100010002A3000004C16F0B04 ns2.tojikiston.com. 172800 IN A 193.111.11.4 04646E733103746C6405747574627903636F6D00000100010002A3000004B27C8535 dns1.tld.tutby.com. 172800 IN A 178.124.133.53 04646E733203746C6405747574627903636F6D00000100010002A30000045D7D1E2C dns2.tld.tutby.com. 172800 IN A 93.125.30.44 04646E733303746C6405747574627903636F6D00000100010002A3000004C389A00A dns3.tld.tutby.com. 172800 IN A 195.137.160.10 04646E733303746C6405747574627903636F6D00001C00010002A30000102A0100D8000200010000000000000002 dns3.tld.tutby.com. 172800 IN AAAA 2a01:d8:2:1::2 04646E733403746C6405747574627903636F6D00000100010002A30000043ED44965 dns4.tld.tutby.com. 172800 IN A 62.212.73.101 04646E733503746C6405747574627903636F6D00000100010002A30000042EA5D95E dns5.tld.tutby.com. 172800 IN A 46.165.217.94 04646E733603746C6405747574627903636F6D00000100010002A30000046C3B0842 dns6.tld.tutby.com. 172800 IN A 108.59.8.66 04646E733703746C6405747574627903636F6D00000100010002A300000467175D24 dns7.tld.tutby.com. 172800 IN A 103.23.93.36 04646E73310A752D726567697374727903636F6D00000100010002A3000004B816524A dns1.u-registry.com. 172800 IN A 184.22.82.74 04646E73310A752D726567697374727903636F6D00001C00010002A30000102607F8780003039C0000000000000002 dns1.u-registry.com. 172800 IN AAAA 2607:f878:3:39c::2 0161097A646E73636C6F756403636F6D00000100010002A30000040108F001 a.zdnscloud.com. 172800 IN A 1.8.240.1 0162097A646E73636C6F756403636F6D00000100010002A30000040108F101 b.zdnscloud.com. 172800 IN A 1.8.241.1 0163097A646E73636C6F756403636F6D00000100010002A30000040108F201 c.zdnscloud.com. 172800 IN A 1.8.242.1 0164097A646E73636C6F756403636F6D00000100010002A30000040108F301 d.zdnscloud.com. 172800 IN A 1.8.243.1 0165097A646E73636C6F756403636F6D00000100010002A300000477A7F89A e.zdnscloud.com. 172800 IN A 119.167.248.154 0166097A646E73636C6F756403636F6D00000100010002A3000004B6831716 f.zdnscloud.com. 172800 IN A 182.131.23.22 0167097A646E73636C6F756403636F6D00000100010002A30000046F0C946F g.zdnscloud.com. 172800 IN A 111.12.148.111 0169097A646E73636C6F756403636F6D00001C00010002A300001024018D00000100000000000000000001 i.zdnscloud.com. 172800 IN AAAA 2401:8d00:1::1 016A097A646E73636C6F756403636F6D00001C00010002A300001024018D00000200000000000000000001 j.zdnscloud.com. 172800 IN AAAA 2401:8d00:2::1 09636F6D6D756E69747900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 community. 172800 IN NS demand.beta.aridns.net.au. 09636F6D6D756E69747900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 community. 172800 IN NS demand.alpha.aridns.net.au. 09636F6D6D756E69747900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 community. 172800 IN NS demand.delta.aridns.net.au. 09636F6D6D756E69747900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 community. 172800 IN NS demand.gamma.aridns.net.au. 09636F6D6D756E69747900002B0001000151800024D0450802755228E2F18777FFC5DA203D2984565804E3236ABC72B3762E832171E977C423 community. 86400 IN DS 53317 8 2 755228E2F18777FFC5DA203D2984565804E3236ABC72B3762E832171E977C423 09636F6D6D756E69747900002E0001000151800093002B08010001518052F4220052EAD970837700B5D113188028047FB7C162096827CDAA8483E061FF047B92E7913FC4E70506AE899CFF6F5BEAF34B2807917855486FC144D583A4F0BB20E88FFFE04E401FFFFF448CA248B409A8E5D94DF4B5915E808B23B6A88FDEEF85D659F57438E4B2974CDE9CFC47D8B2E2266739EE0B603467985F6E3F733BFEEB8F3DAB31F514E362D2 community. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tdETGIAoBH+3wWIJaCfNqoSD4GH/BHuS55E/xOcFBq6JnP9vW+rzSygHkXhVSG/BRNWDpPC7IOiP/+BOQB///0SMoki0Cajl2U30tZFegIsjtqiP3u+F1ln1dDjkspdM3pz8R9iy4iZnOe4LYDRnmF9uP3M7/uuPPasx9RTjYtI= ;{id = 33655} 09636F6D6D756E69747900002E0001000151800093002F08010001518052F4220052EAD970837700864085E1AB0D5499A3CA40B1A262976E8D730FC42906599EA229BEBE92F9778C94768C18E81F9F092CE06A5B65C3D7190F99BCA1D554A9AC94B46F68E8CDEBAD349619560EE1826B4E281A32EE6A4173C107A6BA25362A2E2BAD446A3D7014D20246AC857CDD28DDC513106CCEC7AB3755CA5D22C954075806C5E2FDD6BF5616 community. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hkCF4asNVJmjykCxomKXbo1zD8QpBlmeoim+vpL5d4yUdowY6B+fCSzgaltlw9cZD5m8odVUqayUtG9o6M3rrTSWGVYO4YJrTigaMu5qQXPBB6a6JTYqLiutRGo9cBTSAkashXzdKN3FExBszserN1XKXSLJVAdYBsXi/da/VhY= ;{id = 33655} 09636F6D6D756E69747900002F000100015180001107636F6D70616E79000006200000000013 community. 86400 IN NSEC company. NS DS RRSIG NSEC 07636F6D70616E7900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 company. 172800 IN NS demand.beta.aridns.net.au. 07636F6D70616E7900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 company. 172800 IN NS demand.alpha.aridns.net.au. 07636F6D70616E7900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 company. 172800 IN NS demand.delta.aridns.net.au. 07636F6D70616E7900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 company. 172800 IN NS demand.gamma.aridns.net.au. 07636F6D70616E7900002B0001000151800024057D0802DD824CAD96C6CBC6A29CF7847CABAD991908ADC0F88EE9EA52763F41C93A99CF company. 86400 IN DS 1405 8 2 DD824CAD96C6CBC6A29CF7847CABAD991908ADC0F88EE9EA52763F41C93A99CF 07636F6D70616E7900002E0001000151800093002B08010001518052F4220052EAD9708377008F02CFE3D2F246CDA7A6B49A6B08DF634DC055E2602FED44CFEDF71E79DBAD104A7081BD0C73956AF7306991809A5BAB1314787045362BC840AF6B39E59A80380CB97E17196B3AA6B17490760792E7FC47E22643D721F32D3D1714FE8940B222001DF8E4085B9FFF0E68FD763C5855A07A574CF1C2677D56995089A318C80B04 company. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jwLP49LyRs2nprSaawjfY03AVeJgL+1Ez+33HnnbrRBKcIG9DHOVavcwaZGAmlurExR4cEU2K8hAr2s55ZqAOAy5fhcZazqmsXSQdgeS5/xH4iZD1yHzLT0XFP6JQLIiAB345Ahbn/8OaP12PFhVoHpXTPHCZ31WmVCJoxjICwQ= ;{id = 33655} 07636F6D70616E7900002E0001000151800093002F08010001518052F4220052EAD9708377006E999B8AF5504E9907DB2934CC5E6232966F31DAD939F903B04BAF99BF0AA3AB19F274882571181A66401865ACC4E5F6AF1E8BA5613847A5BB29964AB1E4DB41AD17F3745AD94453EC779CEE6DC3787A625134F965BA9D43D4F698AF4271EC05E340E5D3567FE73C42D1B984862DF7D0515D3EF6B532CBFA611DE50454E453DD company. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bpmbivVQTpkH2yk0zF5iMpZvMdrZOfkDsEuvmb8Ko6sZ8nSIJXEYGmZAGGWsxOX2rx6LpWE4R6W7KZZKseTbQa0X83Ra2URT7Hec7m3DeHpiUTT5ZbqdQ9T2mK9CcewF40Dl01Z/5zxC0bmEhi330FFdPva1Msv6YR3lBFTkU90= ;{id = 33655} 07636F6D70616E7900002F000100015180001208636F6D7075746572000006200000000013 company. 86400 IN NSEC computer. NS DS RRSIG NSEC 08636F6D707574657200000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 computer. 172800 IN NS demand.beta.aridns.net.au. 08636F6D707574657200000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 computer. 172800 IN NS demand.alpha.aridns.net.au. 08636F6D707574657200000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 computer. 172800 IN NS demand.delta.aridns.net.au. 08636F6D707574657200000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 computer. 172800 IN NS demand.gamma.aridns.net.au. 08636F6D707574657200002B00010001518000241DB908029DE689F8D8A206CDC040867BED094D9095468046181CB2EF827964CA4C1FBED5 computer. 86400 IN DS 7609 8 2 9DE689F8D8A206CDC040867BED094D9095468046181CB2EF827964CA4C1FBED5 08636F6D707574657200002E0001000151800093002B08010001518052F4220052EAD9708377003D2370DF440227F7D2EB48386CFFBCD950143DCA06154F315EED98B9EEF823D3D7949F591D1637BFA378606C63C52FD9740941857255028B8F856CA9204DFC7B3C92685E68AE4E62E7FF54D3C47C11913B33831343F1F811FD9CCE3AA8E1DD5721BC027136F3B31130B0E09F8FE389438608E1B8A026F8EAB9BD0579184E08CB computer. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PSNw30QCJ/fS60g4bP+82VAUPcoGFU8xXu2Yue74I9PXlJ9ZHRY3v6N4YGxjxS/ZdAlBhXJVAouPhWypIE38ezySaF5ork5i5/9U08R8EZE7M4MTQ/H4Ef2czjqo4d1XIbwCcTbzsxEwsOCfj+OJQ4YI4bigJvjqub0FeRhOCMs= ;{id = 33655} 08636F6D707574657200002E0001000151800093002F08010001518052F4220052EAD970837700AF024C470877C0E94DE38820C7796FE58BEF099A7A0294DFA348632BA2C1DD6F5F12817894718D95785FE22730B453BAA6E1CBEC5C58D19E18BA12391F48787B182252C9A5BECC0344BCFC98DF68A6A0B50EDAE093EF138888D2A3E3BAD89F1292506208F772792CD92E314BA0E65D161DF7A7A8188CEC2DABEB09573AD3DA13 computer. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rwJMRwh3wOlN44ggx3lv5YvvCZp6ApTfo0hjK6LB3W9fEoF4lHGNlXhf4icwtFO6puHL7FxY0Z4YuhI5H0h4exgiUsmlvswDRLz8mN9opqC1Dtrgk+8TiIjSo+O62J8SklBiCPdyeSzZLjFLoOZdFh33p6gYjOwtq+sJVzrT2hM= ;{id = 33655} 08636F6D707574657200002F00010001518000160C636F6E737472756374696F6E000006200000000013 computer. 86400 IN NSEC construction. NS DS RRSIG NSEC 0C636F6E737472756374696F6E00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 construction. 172800 IN NS demand.beta.aridns.net.au. 0C636F6E737472756374696F6E00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 construction. 172800 IN NS demand.alpha.aridns.net.au. 0C636F6E737472756374696F6E00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 construction. 172800 IN NS demand.delta.aridns.net.au. 0C636F6E737472756374696F6E00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 construction. 172800 IN NS demand.gamma.aridns.net.au. 0C636F6E737472756374696F6E00002B0001000151800024632B08020E55A903286DA4CCADC2AEDCB01AEC17D9C7DF3AA8199435C6384CD0ACB1544C construction. 86400 IN DS 25387 8 2 0E55A903286DA4CCADC2AEDCB01AEC17D9C7DF3AA8199435C6384CD0ACB1544C 0C636F6E737472756374696F6E00002E0001000151800093002B08010001518052F4220052EAD97083770031B457F09FA0AE8D4D41E40D8EDD165BB44130D4D0565B16A1CDF51B7C9465A022D1663DF8CA23998EFD458A7CA9EF0A6D66F07224E1EACE2C00C3859D313FDFE9D206BE75A615FA5C2C199C77E074E22EA90C54955BD744F8ADF9056C9CF70FCC8B86F2E57070BC5BD3FC3CE78A60EA013643485C303C69DC7332843B5FD3B8 construction. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MbRX8J+gro1NQeQNjt0WW7RBMNTQVlsWoc31G3yUZaAi0WY9+MojmY79RYp8qe8KbWbwciTh6s4sAMOFnTE/3+nSBr51phX6XCwZnHfgdOIuqQxUlVvXRPit+QVsnPcPzIuG8uVwcLxb0/w854pg6gE2Q0hcMDxp3HMyhDtf07g= ;{id = 33655} 0C636F6E737472756374696F6E00002E0001000151800093002F08010001518052F4220052EAD9708377007DB2D1216E466F1DF07F8AFE53A2A2ECD4D931B0917765B9DE7E27EE4E56EA8ADEC772865C7060CB5CD61BEDE0C9A8CAC860DD17EEA7223287DCEBE8EEB1366145854D6D8BDE308D4CB44DAC2E186340AF7FCF91D1E000765C501F01EB2BA493EBAC77E29EBB908D7FD227DBADE6958C8D975F7367B718D1314EB1934CCA9663 construction. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fbLRIW5Gbx3wf4r+U6Ki7NTZMbCRd2W53n4n7k5W6orex3KGXHBgy1zWG+3gyajKyGDdF+6nIjKH3Ovo7rE2YUWFTW2L3jCNTLRNrC4YY0Cvf8+R0eAAdlxQHwHrK6ST66x34p67kI1/0ifbreaVjI2XX3NntxjRMU6xk0zKlmM= ;{id = 33655} 0C636F6E737472756374696F6E00002F00010001518000150B636F6E74726163746F7273000006200000000013 construction. 86400 IN NSEC contractors. NS DS RRSIG NSEC 0B636F6E74726163746F727300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 contractors. 172800 IN NS demand.beta.aridns.net.au. 0B636F6E74726163746F727300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 contractors. 172800 IN NS demand.alpha.aridns.net.au. 0B636F6E74726163746F727300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 contractors. 172800 IN NS demand.delta.aridns.net.au. 0B636F6E74726163746F727300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 contractors. 172800 IN NS demand.gamma.aridns.net.au. 0B636F6E74726163746F727300002B0001000151800024A17108027CEAEF507AFD5AE73139D4D7E66A40C8B779B5360ABDDCFD7E420C503D51A34F contractors. 86400 IN DS 41329 8 2 7CEAEF507AFD5AE73139D4D7E66A40C8B779B5360ABDDCFD7E420C503D51A34F 0B636F6E74726163746F727300002E0001000151800093002B08010001518052F4220052EAD9708377003CC2B2BEC909736938F0A68930A6878FB92B7E36CC076591B5D48E9AB7A142FEA8A744B6256848C61FD2BF5BED701BD0EDF152E0E5A5C124B486247B5A142A55D86B67D8FF4B5D914F2CCF29A4A72E9953BFF9D48D2B3554A724C86377B9A05FECBC55B643D08A9E9BA86A13339EF0D401011398ECA818685C444763541BE046 contractors. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PMKyvskJc2k48KaJMKaHj7krfjbMB2WRtdSOmrehQv6op0S2JWhIxh/Sv1vtcBvQ7fFS4OWlwSS0hiR7WhQqVdhrZ9j/S12RTyzPKaSnLplTv/nUjSs1VKckyGN3uaBf7LxVtkPQip6bqGoTM57w1AEBE5jsqBhoXERHY1Qb4EY= ;{id = 33655} 0B636F6E74726163746F727300002E0001000151800093002F08010001518052F4220052EAD970837700405A085AA4FB642645B3105F4B01830FA5127B875045E29FB8003EE957B0AE68DFA92742124AF4C70109C67426591F4BD6419DEFF9F6F8E4023725C87B6DE114AEAC4FBA34C3730054F0593F60360BE2E3CCB564F630756BC6577BAC70288B59928E390285FC0EA3F4E2A39387F34759C7ADD95D3C5CCBE7726E68B4F8656DFD contractors. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QFoIWqT7ZCZFsxBfSwGDD6USe4dQReKfuAA+6VewrmjfqSdCEkr0xwEJxnQmWR9L1kGd7/n2+OQCNyXIe23hFK6sT7o0w3MAVPBZP2A2C+LjzLVk9jB1a8ZXe6xwKItZko45AoX8DqP04qOTh/NHWcet2V08XMvncm5otPhlbf0= ;{id = 33655} 0B636F6E74726163746F727300002F000100015180000E04636F6F6C000006200000000013 contractors. 86400 IN NSEC cool. NS DS RRSIG NSEC 04636F6F6C00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 cool. 172800 IN NS demand.beta.aridns.net.au. 04636F6F6C00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 cool. 172800 IN NS demand.alpha.aridns.net.au. 04636F6F6C00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 cool. 172800 IN NS demand.delta.aridns.net.au. 04636F6F6C00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 cool. 172800 IN NS demand.gamma.aridns.net.au. 04636F6F6C00002B0001000151800024A6000802A929B4028524A61985D70357680987D69D74444331A25A049A3FE950F8F734A4 cool. 86400 IN DS 42496 8 2 A929B4028524A61985D70357680987D69D74444331A25A049A3FE950F8F734A4 04636F6F6C00002E0001000151800093002B08010001518052F4220052EAD97083770020EED4C88522A3A7D08B99C3C075DC0026CC70F0942D00528387B0942269B020E3381EDFCE6BF99AB0DD3C84A7EA19D15164B35905C59DB6645B31CE63A244CD9E0DF0CD2FDB08F62EAC7F2532D5821BB9A62ECF888FADE35CFBA12ADA783F70CAB2442426470CD9B264C99E91D6A1C326CD3C980C1B05FBE04A0F7E608DDC26 cool. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . IO7UyIUio6fQi5nDwHXcACbMcPCULQBSg4ewlCJpsCDjOB7fzmv5mrDdPISn6hnRUWSzWQXFnbZkWzHOY6JEzZ4N8M0v2wj2Lqx/JTLVghu5pi7PiI+t41z7oSraeD9wyrJEJCZHDNmyZMmekdahwybNPJgMGwX74EoPfmCN3CY= ;{id = 33655} 04636F6F6C00002E0001000151800093002F08010001518052F4220052EAD9708377007F5017088E5F189E4A770720BEA5A455C58ED86C8FF4B8827F53D3878130C263CC83850F35F56E229549335E4D01BBDBFEA6D7E2E42A200DE4B4DB2A2794F80D2B63D35963142156853FFF51258DBE836A5CD5793847F1F1E15D9A4A23BBDE55DD1C981616150D30E5E5F6F5F86936F131D4C66ABA14C6362F755B1D90C08ABE cool. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . f1AXCI5fGJ5KdwcgvqWkVcWO2GyP9LiCf1PTh4EwwmPMg4UPNfVuIpVJM15NAbvb/qbX4uQqIA3ktNsqJ5T4DStj01ljFCFWhT//USWNvoNqXNV5OEfx8eFdmkoju95V3RyYFhYVDTDl5fb1+Gk28THUxmq6FMY2L3VbHZDAir4= ;{id = 33655} 04636F6F6C00002F000100015180000E04636F6F70000006200000000013 cool. 86400 IN NSEC coop. NS DS RRSIG NSEC 04636F6F7000000200010002A300001205636F6F70310664796E746C64036E657400 coop. 172800 IN NS coop1.dyntld.net. 04636F6F7000000200010002A300001205636F6F70320664796E746C64036E657400 coop. 172800 IN NS coop2.dyntld.net. 04636F6F7000000200010002A300001205636F6F70330664796E746C64036E657400 coop. 172800 IN NS coop3.dyntld.net. 04636F6F7000000200010002A300001205636F6F70340664796E746C64036E657400 coop. 172800 IN NS coop4.dyntld.net. 04636F6F7000002F000100015180000C026372000006200000000003 coop. 86400 IN NSEC cr. NS RRSIG NSEC 04636F6F7000002E0001000151800093002F08010001518052F4220052EAD9708377002E71CD2055D8BF150D1AC11951A0D70F54C490F4012965472A5299AFA04C4EFE1921C860BDD415BFAE2169BC7B31A2436C6ABBDF0928D7573AE95643B570C4E267708A65F114B8F129922AD3BBB94BE3B19D2BE8B0CF180D81CA96B1D823FB5C79E3D24802DD32E394D013F763ADD223EBD971ACDDD5E4B63498A43826C71EBF coop. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LnHNIFXYvxUNGsEZUaDXD1TEkPQBKWVHKlKZr6BMTv4ZIchgvdQVv64habx7MaJDbGq73wko11c66VZDtXDE4mdwimXxFLjxKZIq07u5S+OxnSvosM8YDYHKlrHYI/tceePSSALdMuOU0BP3Y63SI+vZcazd1eS2NJikOCbHHr8= ;{id = 33655} 02637200002F000100015180000C026375000006200000000013 cr. 86400 IN NSEC cu. NS DS RRSIG NSEC 02637200002E0001000151800093002F08010001518052F4220052EAD9708377005F57E8982BED23CB54E2953A7376170E24936895EEC81792A8393D0716FD448B14CD6407910C4CA3483DD7108BEC540340C71AA7906B0DD0A4F55DBC57055CEB59F8D48851AC9DA84BFF77C34E9E833021BF24747D2E6F33C32BDD2DA2732B9233BC621EF19EF4C16DA2631C7D992DAC231FE0A806CB5D85895EDD0685A717F1 cr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . X1fomCvtI8tU4pU6c3YXDiSTaJXuyBeSqDk9Bxb9RIsUzWQHkQxMo0g91xCL7FQDQMcap5BrDdCk9V28VwVc61n41IhRrJ2oS/93w06egzAhvyR0fS5vM8Mr3S2icyuSM7xiHvGe9MFtomMcfZktrCMf4KgGy12FiV7dBoWnF/E= ;{id = 33655} 02637200002E0001000151800093002B08010001518052F4220052EAD97083770055A3D411B8E175F9A1176FF21A715E44228EAC4AB81D715B361FC9BB490B74A23DB6DC8B3E2C856A4D3744E01A29F7202F605F936AC46DB06A78E453E9C4CC900C5A6F9E7673DF3B1F0E3670FB068366AC654E6C38EC3DDD6EA86FD6F4BFC45AE446642EA1C89920D82ACFA6D92D9EF6EAD6B29E41CACDDB68547DDC5763F38A cr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VaPUEbjhdfmhF2/yGnFeRCKOrEq4HXFbNh/Ju0kLdKI9ttyLPiyFak03ROAaKfcgL2Bfk2rEbbBqeORT6cTMkAxab552c987Hw42cPsGg2asZU5sOOw93W6ob9b0v8Ra5EZkLqHImSDYKs+m2S2e9urWsp5Bys3baFR93Fdj84o= ;{id = 33655} 02637200000200010002A30000090161026E7302637200 cr. 172800 IN NS a.ns.cr. 02637200000200010002A30000090162026E7302637200 cr. 172800 IN NS b.ns.cr. 02637200000200010002A30000090163026E7302637200 cr. 172800 IN NS c.ns.cr. 02637200000200010002A30000090164026E7302637200 cr. 172800 IN NS d.ns.cr. 02637200000200010002A30000090165026E7302637200 cr. 172800 IN NS e.ns.cr. 02637200000200010002A30000090166026E7302637200 cr. 172800 IN NS f.ns.cr. 02637200000200010002A300000C036E7333036E6963026D7800 cr. 172800 IN NS ns3.nic.mx. 02637200000200010002A300000F066E732D657874036E696302636C00 cr. 172800 IN NS ns-ext.nic.cl. 02637200002B000100015180002474C208020DD32D91CBBBA6890E1AF399519A7AD3646EDF238C7FBFB8C5B500165FBB9299 cr. 86400 IN DS 29890 8 2 0DD32D91CBBBA6890E1AF399519A7AD3646EDF238C7FBFB8C5B500165FBB9299 026E7302637200000100010002A3000004A3B20802 ns.cr. 172800 IN A 163.178.8.2 0161026E7302637200000100010002A3000004C86B5264 a.ns.cr. 172800 IN A 200.107.82.100 0161026E7302637200001C00010002A3000010200113C770040001000000000000D100 a.ns.cr. 172800 IN AAAA 2001:13c7:7004:1::d100 0162026E7302637200000100010002A3000004C639CC62 b.ns.cr. 172800 IN A 198.57.204.98 0163026E7302637200000100010002A3000004C1000945 c.ns.cr. 172800 IN A 193.0.9.69 0164026E7302637200000100010002A300000426670203 d.ns.cr. 172800 IN A 38.103.2.3 0165026E7302637200000100010002A300000448344703 e.ns.cr. 172800 IN A 72.52.71.3 0165026E7302637200001C00010002A300001020010470001A00000000000000000003 e.ns.cr. 172800 IN AAAA 2001:470:1a::3 0166026E7302637200000100010002A30000043FF3C203 f.ns.cr. 172800 IN A 63.243.194.3 0166026E7302637200001C00010002A3000010200105A0001000000000000000000003 f.ns.cr. 172800 IN AAAA 2001:5a0:10::3 02637500000200010002A300001B026375056363746C640761757468646E730472697065036E657400 cu. 172800 IN NS cu.cctld.authdns.ripe.net. 02637500000200010002A300000B026E7303646E7302627200 cu. 172800 IN NS ns.dns.br. 02637500000200010002A3000012026E730663656E696169036E657402637500 cu. 172800 IN NS ns.ceniai.net.cu. 02637500000200010002A300000D036E733203676970036E657400 cu. 172800 IN NS ns2.gip.net. 02637500000200010002A3000013036E73320663656E696169036E657402637500 cu. 172800 IN NS ns2.ceniai.net.cu. 02637500000200010002A300000D037269700370736703636F6D00 cu. 172800 IN NS rip.psg.com. 02637500002F000100015180000C026376000006200000000003 cu. 86400 IN NSEC cv. NS RRSIG NSEC 02637500002E0001000151800093002F08010001518052F4220052EAD97083770001EBC6BDF486FDA084C050AB556968CA357449CF3518542D5D32CF9297542213688D56CB4E612B958506D878F8C7F69A08B2D47DA90930FB8F911829DE06B28E8FF6524CF0338A3979A94E23B47E1CF2DC6F5AD403C7D9CE2DF0D56D7F962A73DACFCA81F219044D3FBDF3217937A7DF9BF5477651D9044ECF478DC60485EEE8 cu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . AevGvfSG/aCEwFCrVWloyjV0Sc81GFQtXTLPkpdUIhNojVbLTmErlYUG2Hj4x/aaCLLUfakJMPuPkRgp3gayjo/2UkzwM4o5ealOI7R+HPLcb1rUA8fZzi3w1W1/lipz2s/KgfIZBE0/vfMheTen35v1R3ZR2QROz0eNxgSF7ug= ;{id = 33655} 026E730663656E696169036E657402637500000100010002A3000004A99E8088 ns.ceniai.net.cu. 172800 IN A 169.158.128.136 026E730663656E696169036E657402637500001C00010002A300001020011340000101280000000000000136 ns.ceniai.net.cu. 172800 IN AAAA 2001:1340:1:128::136 036E73320663656E696169036E657402637500000100010002A3000004A99E8058 ns2.ceniai.net.cu. 172800 IN A 169.158.128.88 02637600000200010002A300000B026E7303646E7302637600 cv. 172800 IN NS ns.dns.cv. 02637600000200010002A300000E046E733031046663636E02707400 cv. 172800 IN NS ns01.fccn.pt. 02637600000200010002A300001206617574683032026E73027575036E657400 cv. 172800 IN NS auth02.ns.uu.net. 02637600000200010002A3000010066E732D65787403697363036F726700 cv. 172800 IN NS ns-ext.isc.org. 02637600000200010002A30000100670686F626F73046663636E02707400 cv. 172800 IN NS phobos.fccn.pt. 02637600000200010002A300001006736E732D706203697363036F726700 cv. 172800 IN NS sns-pb.isc.org. 02637600002F000100015180000C026377000006200000000003 cv. 86400 IN NSEC cw. NS RRSIG NSEC 02637600002E0001000151800093002F08010001518052F4220052EAD97083770069CEBE84558BB4BE570FDADBFDEA12B3299C98E0408488C4AC2564E000D2A49D3A4F802EA6C278F724066D018B1F837E0852B045AE072B3618750D5499961E152D3F72CE0A64B41EF93D818D0E25496216794206C299C80CEA30976FD0AC3F775A7F8D054D81C7A2EB30DAE19A6A5A885048BD00E6CE5DCD867D8D010BCBE8E5 cv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ac6+hFWLtL5XD9rb/eoSsymcmOBAhIjErCVk4ADSpJ06T4AupsJ49yQGbQGLH4N+CFKwRa4HKzYYdQ1UmZYeFS0/cs4KZLQe+T2BjQ4lSWIWeUIGwpnIDOowl2/QrD93Wn+NBU2Bx6LrMNrhmmpaiFBIvQDmzl3Nhn2NAQvL6OU= ;{id = 33655} 026E7303646E7302637600000100010002A300000429DDC0DC ns.dns.cv. 172800 IN A 41.221.192.220 02637700000200010002A300001B026377056363746C640761757468646E730472697065036E657400 cw. 172800 IN NS cw.cctld.authdns.ripe.net. 02637700000200010002A300000C036E7330026A61036E657400 cw. 172800 IN NS ns0.ja.net. 02637700000200010002A300001007656E67696E653003756E6102616E00 cw. 172800 IN NS engine0.una.an. 02637700000200010002A300001007656E67696E653203756E6102616E00 cw. 172800 IN NS engine2.una.an. 02637700000200010002A300001007656E67696E653303756E6102616E00 cw. 172800 IN NS engine3.una.an. 02637700000200010002A3000014076B61647573686907637572696E666F02616E00 cw. 172800 IN NS kadushi.curinfo.an. 02637700000200010002A30000180B6E7330312D73657276657207637572696E666F02616E00 cw. 172800 IN NS ns01-server.curinfo.an. 02637700002F000100015180000C026378000006200000000003 cw. 86400 IN NSEC cx. NS RRSIG NSEC 02637700002E0001000151800093002F08010001518052F4220052EAD97083770035A0310DF9ED44170F8142E148BA241A8CCED6464C5F98F2A9C3E860AEB7260C929E8D2B67998DA00ACE9AC5B01813B293343FED3C82CBD01D7785FAD651D5FFBDAE6B518F3619BA566ED948226500E2588FFF088C179913E5C9D976A85738D654B144C8A8E23A55EB166CE3070106E430CD495D933EEC11C4024F12AE089BDA cw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . NaAxDfntRBcPgULhSLokGozO1kZMX5jyqcPoYK63JgySno0rZ5mNoArOmsWwGBOykzQ/7TyCy9Add4X61lHV/72ua1GPNhm6Vm7ZSCJlAOJYj/8IjBeZE+XJ2XaoVzjWVLFEyKjiOlXrFmzjBwEG5DDNSV2TPuwRxAJPEq4Im9o= ;{id = 33655} 02637800000200010002A3000013026E7307616E7963617374036E696302637800 cx. 172800 IN NS ns.anycast.nic.cx. 02637800000200010002A3000010036378310664796E746C64036E657400 cx. 172800 IN NS cx1.dyntld.net. 02637800000200010002A3000010036378330664796E746C64036E657400 cx. 172800 IN NS cx3.dyntld.net. 02637800000200010002A300001006736E732D706203697363036F726700 cx. 172800 IN NS sns-pb.isc.org. 02637800002B0001000151800024196408024854A102492CE0C50C714F366EBBD520CBA38BBEFC91CF295EEE8E6EF7D48CA5 cx. 86400 IN DS 6500 8 2 4854A102492CE0C50C714F366EBBD520CBA38BBEFC91CF295EEE8E6EF7D48CA5 02637800002E0001000151800093002B08010001518052F4220052EAD9708377004A7D4329B933F9C4B5451E1C5E8B7413705484E0EC0AC1136CFCE848F718B0CA4ADAA3D7E0C1D3CDEAB9B77441166AC5709A8C6CB8E5E5C627378B71771EC4904E4A499C7D13A76418D1B907525CA31B4DC105DF5463674EBA0A6F0082EEA1AB73F3337BE9688CC714FCA93839726407527DBD1F3E2C0D4500FB87D914664CEC cx. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Sn1DKbkz+cS1RR4cXot0E3BUhODsCsETbPzoSPcYsMpK2qPX4MHTzeq5t3RBFmrFcJqMbLjl5cYnN4txdx7EkE5KSZx9E6dkGNG5B1JcoxtNwQXfVGNnTroKbwCC7qGrc/Mze+lojMcU/Kk4OXJkB1J9vR8+LA1FAPuH2RRmTOw= ;{id = 33655} 02637800002E0001000151800093002F08010001518052F4220052EAD970837700BE978DE0CF7F3C20DD74C3DFA6CEDAB65FCCD50CEF9FB4355DCA4F2A66F88C88B88F0E6F4E8E1CC28D2E116CD2B4B6F5AFF6E067A53DB9B42D6B0A90B41D56B682D19DE5E6A4E8CA36F56ABD6D319DE538214B65F7F088370F7EFC8074DF0E120DFE4E5E80DD48B2C95E2C4341C1C79F017E032066C842F826C45DB35C785363 cx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vpeN4M9/PCDddMPfps7atl/M1Qzvn7Q1XcpPKmb4jIi4jw5vTo4cwo0uEWzStLb1r/bgZ6U9ubQtawqQtB1WtoLRneXmpOjKNvVqvW0xneU4IUtl9/CINw9+/IB03w4SDf5OXoDdSLLJXixDQcHHnwF+AyBmyEL4JsRds1x4U2M= ;{id = 33655} 02637800002F000100015180000C026379000006200000000013 cx. 86400 IN NSEC cy. NS DS RRSIG NSEC 026E7307616E7963617374036E696302637800000100010002A3000004CC3DD810 ns.anycast.nic.cx. 172800 IN A 204.61.216.16 026E7307616E7963617374036E696302637800001C00010002A3000010200105000014601600AD000000000001 ns.anycast.nic.cx. 172800 IN AAAA 2001:500:14:6016:ad::1 02637900000200010002A300000F036E73310375637902616302637900 cy. 172800 IN NS ns1.ucy.ac.cy. 02637900000200010002A300000F036E73320375637902616302637900 cy. 172800 IN NS ns2.ucy.ac.cy. 02637900000200010002A3000011046E73303206736176766973036E657400 cy. 172800 IN NS ns02.savvis.net. 02637900000200010002A300001004736563330561706E6963036E657400 cy. 172800 IN NS sec3.apnic.net. 02637900000200010002A30000170563792D6E7307616E796361737403706368036E657400 cy. 172800 IN NS cy-ns.anycast.pch.net. 02637900000200010002A300000E0563796E696303646E7302637900 cy. 172800 IN NS cynic.dns.cy. 02637900000200010002A30000140565737469610369637305666F72746802677200 cy. 172800 IN NS estia.ics.forth.gr. 02637900002F000100015180000C02637A000006200000000003 cy. 86400 IN NSEC cz. NS RRSIG NSEC 02637900002E0001000151800093002F08010001518052F4220052EAD9708377003006FB75ECB6E3525978278676345433D399D2F6F0174A43FFC8595FB8F7F6AD5FCB5A3F03F75085CBAD261238147902324E896067B863A3DF021FA0AB658A2B80FA8871329909D728D7AB3B52F82ACD39313D60064A598161DE5CC66463A74CCDC7984D6DB3925556E85324C127B7306992D1B83DF272806D418DAB1F45D769 cy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MAb7dey241JZeCeGdjRUM9OZ0vbwF0pD/8hZX7j39q1fy1o/A/dQhcutJhI4FHkCMk6JYGe4Y6PfAh+gq2WKK4D6iHEymQnXKNerO1L4Ks05MT1gBkpZgWHeXMZkY6dMzceYTW2zklVW6FMkwSe3MGmS0bg98nKAbUGNqx9F12k= ;{id = 33655} 036E73310375637902616302637900000100010002A3000004C22A0132 ns1.ucy.ac.cy. 172800 IN A 194.42.1.50 036E73320375637902616302637900000100010002A3000004C22A0137 ns2.ucy.ac.cy. 172800 IN A 194.42.1.55 0563796E696303646E7302637900000100010002A3000004C22A1D01 cynic.dns.cy. 172800 IN A 194.42.29.1 02637A00002F000100015180000F0564616E6365000006200000000013 cz. 86400 IN NSEC dance. NS DS RRSIG NSEC 02637A00002E0001000151800093002F08010001518052F4220052EAD97083770082BACE3276C42880DDACE6B2C1C10AA845A96CE8B909F62607ABAC4C174F6B90CDB0FED177E97A400B77E4415CC3BA00EFBD8D0F2B6148991A158777E8AFDF96097E6EB0FCA29D99DF8EA13567D1E010B7E97D48E8E462095F4FD3FDD1A5A19CA90955E47219F2FD26FC1A6B6D2402748FA9B27F3D661BAFA2386D86F8AAAC20 cz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . grrOMnbEKIDdrOaywcEKqEWpbOi5CfYmB6usTBdPa5DNsP7Rd+l6QAt35EFcw7oA772NDythSJkaFYd36K/flgl+brD8op2Z346hNWfR4BC36X1I6ORiCV9P0/3RpaGcqQlV5HIZ8v0m/BprbSQCdI+psn89ZhuvojhthviqrCA= ;{id = 33655} 02637A00002E0001000151800093002B08010001518052F4220052EAD970837700639F274B4A6A831017FBB1D98E0B7751A0FBB7AAE2B93A5BFE89719A4B4A0C9920265FF4CE2BAB550A8C57406856E0331B4F4FBFED57AA2970FD632B5CDB152E084056C4544C7D3AA1335DDF7283E03B96F4E82B34D59ABDDE712C7A30BDAE6855AD393F35942B7383C438087A2E9306E7A72B36F78EDF4A60EAE926B05A97D3 cz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Y58nS0pqgxAX+7HZjgt3UaD7t6riuTpb/olxmktKDJkgJl/0ziurVQqMV0BoVuAzG09Pv+1Xqilw/WMrXNsVLghAVsRUTH06oTNd33KD4DuW9OgrNNWavd5xLHowva5oVa05PzWUK3ODxDgIei6TBuenKzb3jt9KYOrpJrBal9M= ;{id = 33655} 02637A00000200010002A300000D0161026E73036E696302637A00 cz. 172800 IN NS a.ns.nic.cz. 02637A00000200010002A300000D0162026E73036E696302637A00 cz. 172800 IN NS b.ns.nic.cz. 02637A00000200010002A300000D0163026E73036E696302637A00 cz. 172800 IN NS c.ns.nic.cz. 02637A00000200010002A300000D0164026E73036E696302637A00 cz. 172800 IN NS d.ns.nic.cz. 02637A00002B0001000151800024D5300A02397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386869C8F06 cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386869C8F06 016403657874036E696302637A00000100010002A3000004C11DCE02 d.ext.nic.cz. 172800 IN A 193.29.206.2 016403657874036E696302637A00001C00010002A300001020010678000100000000000000000002 d.ext.nic.cz. 172800 IN AAAA 2001:678:1::2 0161026E73036E696302637A00000100010002A3000004C2000C01 a.ns.nic.cz. 172800 IN A 194.0.12.1 0161026E73036E696302637A00001C00010002A300001020010678000F00000000000000000001 a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1 0162026E73036E696302637A00000100010002A3000004C2000D01 b.ns.nic.cz. 172800 IN A 194.0.13.1 0162026E73036E696302637A00001C00010002A300001020010678001000000000000000000001 b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1 0163026E73036E696302637A00000100010002A3000004C2000E01 c.ns.nic.cz. 172800 IN A 194.0.14.1 0163026E73036E696302637A00001C00010002A300001020010678001100000000000000000001 c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1 0164026E73036E696302637A00000100010002A3000004C11DCE01 d.ns.nic.cz. 172800 IN A 193.29.206.1 0164026E73036E696302637A00001C00010002A300001020010678000100000000000000000001 d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1 0564616E636500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 dance. 172800 IN NS demand.beta.aridns.net.au. 0564616E636500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 dance. 172800 IN NS demand.alpha.aridns.net.au. 0564616E636500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 dance. 172800 IN NS demand.delta.aridns.net.au. 0564616E636500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 dance. 172800 IN NS demand.gamma.aridns.net.au. 0564616E636500002B000100015180002424C4080246C6FA36DEC09F2C90C528D30FD86378FAC1F11A1D90AF55C42DA92C1EB19EFF dance. 86400 IN DS 9412 8 2 46C6FA36DEC09F2C90C528D30FD86378FAC1F11A1D90AF55C42DA92C1EB19EFF 0564616E636500002E0001000151800093002B08010001518052F4220052EAD970837700B69D082BADB624B131BFED65ABFFF5B8238BFC7CC986B5EB6147E497BA674F2F39B8ABC81420B2A0EBF48E108ACAE6677735F8DC925EC99B927E59282CBDFAE6231D45007A05FB4319522811F0FF80D227968E28F520B111DEFB33A656AB62E238F9DC3E6731F9E45CDF45474EA6DECE3DD60AA8C417C9EA003746F10BC74480 dance. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tp0IK622JLExv+1lq//1uCOL/HzJhrXrYUfkl7pnTy85uKvIFCCyoOv0jhCKyuZndzX43JJeyZuSflkoLL365iMdRQB6BftDGVIoEfD/gNInlo4o9SCxEd77M6ZWq2LiOPncPmcx+eRc30VHTqbezj3WCqjEF8nqADdG8QvHRIA= ;{id = 33655} 0564616E636500002E0001000151800093002F08010001518052F4220052EAD97083770070EC164233882D90E69A8B0E128279CC1BAD50509274E53EE83FBE9643BDAAFDE1CAD1E1F177DDEB7C1CE0B217690978498FB65D86049977D76628F23C5C6D3B92DBA5F6AF2CA00165770B17E697270150C3684DFC13B2DB61DBE0DE0CD72C6E8DB945018D025160BDBCA46F74F0C7C4EF69739715A2DBCEB3A34034A7BC4CEA dance. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cOwWQjOILZDmmosOEoJ5zButUFCSdOU+6D++lkO9qv3hytHh8Xfd63wc4LIXaQl4SY+2XYYEmXfXZijyPFxtO5LbpfavLKABZXcLF+aXJwFQw2hN/BOy22Hb4N4M1yxujblFAY0CUWC9vKRvdPDHxO9pc5cVotvOs6NANKe8TOo= ;{id = 33655} 0564616E636500002F000100015180001006646174696E67000006200000000013 dance. 86400 IN NSEC dating. NS DS RRSIG NSEC 06646174696E6700000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 dating. 172800 IN NS demand.beta.aridns.net.au. 06646174696E6700000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 dating. 172800 IN NS demand.alpha.aridns.net.au. 06646174696E6700000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 dating. 172800 IN NS demand.delta.aridns.net.au. 06646174696E6700000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 dating. 172800 IN NS demand.gamma.aridns.net.au. 06646174696E6700002B0001000151800024D957080240AE1E3A7DAB8C5285D43ACA37EEC730D5FC604F770AE3B40C4C282A165B3555 dating. 86400 IN DS 55639 8 2 40AE1E3A7DAB8C5285D43ACA37EEC730D5FC604F770AE3B40C4C282A165B3555 06646174696E6700002E0001000151800093002B08010001518052F4220052EAD9708377009DA81FF4964B9BBB30BA47C105A61C3B916771BC91C1DFE4C6FCB9BDBAFE12757A45BFD995053936F081906AEC72B22E2FC6AEE93E57497BAD64202E822704D373CB93C0A46C681218D532337F2670BC8AB2A9F3FA6852A6010AD3A8CE760C8309C4697584BA02580553F5A67BF8E51F711DAEE0AC3796D625518A2E0DA1146E dating. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nagf9JZLm7swukfBBaYcO5FncbyRwd/kxvy5vbr+EnV6Rb/ZlQU5NvCBkGrscrIuL8au6T5XSXutZCAugicE03PLk8CkbGgSGNUyM38mcLyKsqnz+mhSpgEK06jOdgyDCcRpdYS6AlgFU/Wme/jlH3EdruCsN5bWJVGKLg2hFG4= ;{id = 33655} 06646174696E6700002E0001000151800093002F08010001518052F4220052EAD9708377004C9911F02F1F2B86C714282A3E6B93257A2FE62FDFE91037FDE072C1616439AABA7D04DC8DEF6B06D9A0630D123FC3AB4F8A5B773E26F1DAA0DB2D33414B4E9DEE8E53F4DF3C8D2885EDDD25A61A43E291CAA1AD328B027E51383301A95B84A991E39D94CCF88D19D96CE1F94FC6867DBB340B2AA02FA5535E3554B4B12BEDBA dating. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TJkR8C8fK4bHFCgqPmuTJXov5i/f6RA3/eBywWFkOaq6fQTcje9rBtmgYw0SP8OrT4pbdz4m8dqg2y0zQUtOne6OU/TfPI0ohe3dJaYaQ+KRyqGtMosCflE4MwGpW4SpkeOdlMz4jRnZbOH5T8aGfbs0CyqgL6VTXjVUtLEr7bo= ;{id = 33655} 06646174696E6700002F000100015180000C026465000006200000000013 dating. 86400 IN NSEC de. NS DS RRSIG NSEC 02646500002F00010001518000120864656D6F63726174000006200000000013 de. 86400 IN NSEC democrat. NS DS RRSIG NSEC 02646500002E0001000151800093002F08010001518052F4220052EAD97083770007CBDA4CD5990A41D1DCC958052AB71CBF22D501B1EF34F047FF93401AF09456ABA2AF2A2F8C8F2E65FCB9CDB970C9A9992B839EAB9DE7A9E920D634DF602E5A07269AE30022B719CEEFB84E94C1D4C1E093FFC4F91238A12BF13000F5CC0C2953960395F1270DAF31043560C44DE4C1AA7D745268B295E3D7D9B4E92D02F649 de. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . B8vaTNWZCkHR3MlYBSq3HL8i1QGx7zTwR/+TQBrwlFaroq8qL4yPLmX8uc25cMmpmSuDnqud56npINY032AuWgcmmuMAIrcZzu+4TpTB1MHgk//E+RI4oSvxMAD1zAwpU5YDlfEnDa8xBDVgxE3kwap9dFJospXj19m06S0C9kk= ;{id = 33655} 02646500002E0001000151800093002B08010001518052F4220052EAD97083770050F7E3AF6A03582A4946A253E97A2BE6A24ECD7934F9B958A9472C0C5187E9A882D147C7ED23921EEDA7249DBC8F8600EB826122BA39A05F8746C51F177923A81126EDED8C851653EE3C0104EAA11A48BB2C00ED30134ACA2608BB4CFB0029252C970003CB2255D238FBFDDE992E0B874A4E2448953018D7815E797C56BB2494 de. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UPfjr2oDWCpJRqJT6Xor5qJOzXk0+blYqUcsDFGH6aiC0UfH7SOSHu2nJJ28j4YA64JhIro5oF+HRsUfF3kjqBEm7e2MhRZT7jwBBOqhGki7LADtMBNKyiYIu0z7ACklLJcAA8siVdI4+/3emS4Lh0pOJEiVMBjXgV55fFa7JJQ= ;{id = 33655} 02646500000200010002A300000A0161036E696302646500 de. 172800 IN NS a.nic.de. 02646500000200010002A300000A0166036E696302646500 de. 172800 IN NS f.nic.de. 02646500000200010002A300000A016C026465036E657400 de. 172800 IN NS l.de.net. 02646500000200010002A300000A016E026465036E657400 de. 172800 IN NS n.de.net. 02646500000200010002A300000A0173026465036E657400 de. 172800 IN NS s.de.net. 02646500000200010002A300000A017A036E696302646500 de. 172800 IN NS z.nic.de. 02646500002B00010001518000245E9C0802FFE926ACA67ED94089390250F1F294AC84A6D84F9121DF73A79E439F42E820C2 de. 86400 IN DS 24220 8 2 FFE926ACA67ED94089390250F1F294AC84A6D84F9121DF73A79E439F42E820C2 06646E732D726F0564656E696302646500000100010002A3000004515BA163 dns-ro.denic.de. 172800 IN A 81.91.161.99 04646E73370564656E696302646500000100010002A3000004515BA144 dns7.denic.de. 172800 IN A 81.91.161.68 086772646E732D64650564656E696302646500000100010002A3000004515BA150 grdns-de.denic.de. 172800 IN A 81.91.161.80 0670722D646E730564656E696302646500000100010002A3000004515BA152 pr-dns.denic.de. 172800 IN A 81.91.161.82 036E7335056B6E69707002646500000100010002A3000004C3FD063E ns5.knipp.de. 172800 IN A 195.253.6.62 036E7335056B6E69707002646500001C00010002A30000102A0105B000000029000000000000003E ns5.knipp.de. 172800 IN AAAA 2a01:5b0:0:29::3e 0161036E696302646500000100010002A3000004C2000035 a.nic.de. 172800 IN A 194.0.0.53 0161036E696302646500001C00010002A300001020010678000200000000000000000053 a.nic.de. 172800 IN AAAA 2001:678:2::53 0166036E696302646500000100010002A3000004515BA405 f.nic.de. 172800 IN A 81.91.164.5 0166036E696302646500001C00010002A30000102A020568000000020000000000000053 f.nic.de. 172800 IN AAAA 2a02:568:0:2::53 036E7363036E696302646500000100010002A3000004515BA154 nsc.nic.de. 172800 IN A 81.91.161.84 017A036E696302646500000100010002A3000004C2F66001 z.nic.de. 172800 IN A 194.246.96.1 0864656D6F6372617400000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 democrat. 172800 IN NS demand.beta.aridns.net.au. 0864656D6F6372617400000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 democrat. 172800 IN NS demand.alpha.aridns.net.au. 0864656D6F6372617400000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 democrat. 172800 IN NS demand.delta.aridns.net.au. 0864656D6F6372617400000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 democrat. 172800 IN NS demand.gamma.aridns.net.au. 0864656D6F6372617400002B00010001518000247A7D0802FFFEB75D5303AEA99EEDA8535BEDC3672FDF4C49329FF4A2FDCBFBFFA24D1A44 democrat. 86400 IN DS 31357 8 2 FFFEB75D5303AEA99EEDA8535BEDC3672FDF4C49329FF4A2FDCBFBFFA24D1A44 0864656D6F6372617400002E0001000151800093002B08010001518052F4220052EAD9708377008FDA9592DCBD7AEC7FCF77B041EC908BF9576BDAC6267A61158CCC68CA47210ED2BA29A083BA286AC7D67260E7C29BF97769AE93C71256B85FD606E59628FA3FC28B97639B20751A61E6163BD4447967CFAF50A71F4ABAA03DDD60C966ED1B02916481F538DA7447CC3875FB8A548EE19710EE2654589348D379E7866E117CF8 democrat. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . j9qVkty9eux/z3ewQeyQi/lXa9rGJnphFYzMaMpHIQ7Suimgg7ooasfWcmDnwpv5d2muk8cSVrhf1gbllij6P8KLl2ObIHUaYeYWO9REeWfPr1CnH0q6oD3dYMlm7RsCkWSB9TjadEfMOHX7ilSO4ZcQ7iZUWJNI03nnhm4RfPg= ;{id = 33655} 0864656D6F6372617400002E0001000151800093002F08010001518052F4220052EAD97083770033FF2881CEA2C08B3D3BC9749D88AFE7E05D963F0E54E51E2CD6764A9D5373B492783145662027231790BB84498F816364491ACA4C9C2898E01EC312B1D28BE3C0183256F1467DE18E0D0F991996A7A4A15E4F8A84F662CCE2EEE7BE50615407A1FF66D8C86BC4A780DA5A24FE67DCFEC95F544A3C20CAC132CF14CE2EF30C2D democrat. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . M/8ogc6iwIs9O8l0nYiv5+Bdlj8OVOUeLNZ2Sp1Tc7SSeDFFZiAnIxeQu4RJj4FjZEkaykycKJjgHsMSsdKL48AYMlbxRn3hjg0PmRmWp6ShXk+KhPZizOLu575QYVQHof9m2MhrxKeA2lok/mfc/slfVEo8IMrBMs8Uzi7zDC0= ;{id = 33655} 0864656D6F6372617400002F0001000151800012086469616D6F6E6473000006200000000013 democrat. 86400 IN NSEC diamonds. NS DS RRSIG NSEC 086469616D6F6E647300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 diamonds. 172800 IN NS demand.beta.aridns.net.au. 086469616D6F6E647300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 diamonds. 172800 IN NS demand.alpha.aridns.net.au. 086469616D6F6E647300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 diamonds. 172800 IN NS demand.delta.aridns.net.au. 086469616D6F6E647300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 diamonds. 172800 IN NS demand.gamma.aridns.net.au. 086469616D6F6E647300002B00010001518000245D940802A3719C79222E217C7EA8CC55EED0BD23B7769820BDFCFB4A7C6DCFC2F2837697 diamonds. 86400 IN DS 23956 8 2 A3719C79222E217C7EA8CC55EED0BD23B7769820BDFCFB4A7C6DCFC2F2837697 086469616D6F6E647300002E0001000151800093002B08010001518052F4220052EAD97083770052F3763244BC6C65A069D1853FF4BD737FE823BC689BEB5B91CC1C9173568003853F9F402DCAC0BEF2837E6E800CADC180C831316AB35E80A53EDC6776468926505E507DF28EC53D69DE7D785F49EBE88DF4D85BF9B5543D5EDAB56B139F9AE59FBA9EA303E1CF264697278D4D230E0185081582A12F30CF8236EC89222112F7 diamonds. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UvN2MkS8bGWgadGFP/S9c3/oI7xom+tbkcwckXNWgAOFP59ALcrAvvKDfm6ADK3BgMgxMWqzXoClPtxndkaJJlBeUH3yjsU9ad59eF9J6+iN9Nhb+bVUPV7atWsTn5rln7qeowPhzyZGlyeNTSMOAYUIFYKhLzDPgjbsiSIhEvc= ;{id = 33655} 086469616D6F6E647300002E0001000151800093002F08010001518052F4220052EAD97083770095B1CB4F2C9C6FBB7BBADF54459036C6BF0F4CE90FF5A4E7C68BF7614406B35088C7D1374296B7577F2E547ABE1B376415B3161884ADC80DBEF049EAAB05853733FD9A2276F0B66275B3E30C1727FA624B2689E319987D8D0924247C48B31B2C7B1A1DEA8E3BA4CAEAF5B7D4858E3BB473603BCEF4DDD669708C71EC4901A694 diamonds. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . lbHLTyycb7t7ut9URZA2xr8PTOkP9aTnxov3YUQGs1CIx9E3Qpa3V38uVHq+GzdkFbMWGIStyA2+8EnqqwWFNzP9miJ28LZidbPjDBcn+mJLJonjGZh9jQkkJHxIsxssexod6o47pMrq9bfUhY47tHNgO8703dZpcIxx7EkBppQ= ;{id = 33655} 086469616D6F6E647300002F0001000151800013096469726563746F7279000006200000000013 diamonds. 86400 IN NSEC directory. NS DS RRSIG NSEC 096469726563746F727900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 directory. 172800 IN NS demand.beta.aridns.net.au. 096469726563746F727900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 directory. 172800 IN NS demand.alpha.aridns.net.au. 096469726563746F727900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 directory. 172800 IN NS demand.delta.aridns.net.au. 096469726563746F727900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 directory. 172800 IN NS demand.gamma.aridns.net.au. 096469726563746F727900002B0001000151800024615708029B4A3B25AE80501486985390FB3D0004E86E9F67E7DF28659AF1316C0D281DAE directory. 86400 IN DS 24919 8 2 9B4A3B25AE80501486985390FB3D0004E86E9F67E7DF28659AF1316C0D281DAE 096469726563746F727900002E0001000151800093002B08010001518052F4220052EAD970837700B3A92CA4379FD25082AC919FC44D22FA41F916BE39A6550EDB6DD56C424876DDFC3400C9FAE42C4A2F8C8B7C8DA7068050AA9EE4AA0DBCBC64C6370286CF7AE32764155201A571B191B639F2EA52A6DFCAEBC98903A38B4D66D5BBFA616B8913B1377EA195906306473EC537CD13C21B1C3F8B6832F5F9EDA3B376157C7910B3 directory. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . s6kspDef0lCCrJGfxE0i+kH5Fr45plUO223VbEJIdt38NADJ+uQsSi+Mi3yNpwaAUKqe5KoNvLxkxjcChs964ydkFVIBpXGxkbY58upSpt/K68mJA6OLTWbVu/pha4kTsTd+oZWQYwZHPsU3zRPCGxw/i2gy9fnto7N2FXx5ELM= ;{id = 33655} 096469726563746F727900002E0001000151800093002F08010001518052F4220052EAD9708377009F1E726EAA3390004FC712CDC9ED82EAF22D0E8C8865494786AB5352113877C0CDA65694E0F35B5F6A842F80C71DE2B72A3FAF6D37D0EB7D4B88CAA2B6BCE0B50D93A387CCB207472415F40D6A1E63DEE70EF60FE2D0BDB48CDDFFE72F9FBAB3B1DD9A0663BB800E6D5DE296FCA976B7C8C9CE8A501D0326671DAEB5BF3360A1 directory. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nx5ybqozkABPxxLNye2C6vItDoyIZUlHhqtTUhE4d8DNplaU4PNbX2qEL4DHHeK3Kj+vbTfQ631LiMqitrzgtQ2To4fMsgdHJBX0DWoeY97nDvYP4tC9tIzd/+cvn7qzsd2aBmO7gA5tXeKW/Kl2t8jJzopQHQMmZx2utb8zYKE= ;{id = 33655} 096469726563746F727900002F000100015180000C02646A000006200000000013 directory. 86400 IN NSEC dj. NS DS RRSIG NSEC 02646A00000200010002A300000D03626F77047261696E02667200 dj. 172800 IN NS bow.rain.fr. 02646A00000200010002A300000F03626F7706696E746E657402646A00 dj. 172800 IN NS bow.intnet.dj. 02646A00002F000100015180000C02646B000006200000000003 dj. 86400 IN NSEC dk. NS RRSIG NSEC 02646A00002E0001000151800093002F08010001518052F4220052EAD9708377009221E290B8CF63EB3CFC85337439C365791092B790AEE7F92D1122FBCF0B85568C7EC15BAC8A74B51CB3D93AB233C0B5FA51F8E7FC1C9557CEABDBDED0617EAA6DC229F5FE71A4460949A3C3FD5D470463C03F38E9200AEF4CB15EFC4C3D3FCF628373D9E66875B05D4DAFF70FB50B852DFF0B0818DC033C58817658C3720678 dj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kiHikLjPY+s8/IUzdDnDZXkQkreQruf5LREi+88LhVaMfsFbrIp0tRyz2TqyM8C1+lH45/wclVfOq9ve0GF+qm3CKfX+caRGCUmjw/1dRwRjwD846SAK70yxXvxMPT/PYoNz2eZodbBdTa/3D7ULhS3/CwgY3AM8WIF2WMNyBng= ;{id = 33655} 03626F7706696E746E657402646A00000100010002A3000004C1FB8FA2 bow.intnet.dj. 172800 IN A 193.251.143.162 02646B00000200010002A300000A0161036E696302646B00 dk. 172800 IN NS a.nic.dk. 02646B00000200010002A300000A0162036E696302646B00 dk. 172800 IN NS b.nic.dk. 02646B00000200010002A300000A0163036E696302646B00 dk. 172800 IN NS c.nic.dk. 02646B00000200010002A300000A016C036E696302646B00 dk. 172800 IN NS l.nic.dk. 02646B00000200010002A300000A0170036E696302646B00 dk. 172800 IN NS p.nic.dk. 02646B00000200010002A300000A0173036E696302646B00 dk. 172800 IN NS s.nic.dk. 02646B00002B000100015180002469070802A1AB8546B80E438A7DFE0EC559A7088EC5AED3C4E0D26B1B60ED3735F853DFD7 dk. 86400 IN DS 26887 8 2 A1AB8546B80E438A7DFE0EC559A7088EC5AED3C4E0D26B1B60ED3735F853DFD7 02646B00002E0001000151800093002B08010001518052F4220052EAD97083770023C41B086E5AC5E5BB6DB21A567FB4D92469643F8AA3BE337919C72C6467DC0292C9E9DA2D67E5C11DFCAB8E028BA0DF18EDF7DFD3864D133735C22F41E85D8D5FC4DA2DF5CEDB4C82A4F1E480D62E863CFFB757C3A481C50E8E52A21854BF44655CEEC4CDF0E7BBC57DA24683A0AA666B81BD6DE31BAD0A31E9F1BA143D67DA dk. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . I8QbCG5axeW7bbIaVn+02SRpZD+Ko74zeRnHLGRn3AKSyenaLWflwR38q44Ci6DfGO3339OGTRM3NcIvQehdjV/E2i31zttMgqTx5IDWLoY8/7dXw6SBxQ6OUqIYVL9EZVzuxM3w57vFfaJGg6CqZmuBvW3jG60KMenxuhQ9Z9o= ;{id = 33655} 02646B00002E0001000151800093002F08010001518052F4220052EAD9708377006CDAAEC88546E96F53175A496249E0B07F97D8E3B506E236C57D2F983A24432AFA63038A4AC5026C5E73DCC667270D63566D194009473E39C82E6EA448DA2C146E9F2C01B356123CDF48F94DC3B103F785C9F2FD437B94AFD7BD7523739F075CCEC60F9205B625711FA475BC9AC31B2C9D304B662D77A2700B0F482FEA96FCF4 dk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bNquyIVG6W9TF1pJYkngsH+X2OO1BuI2xX0vmDokQyr6YwOKSsUCbF5z3MZnJw1jVm0ZQAlHPjnILm6kSNosFG6fLAGzVhI830j5TcOxA/eFyfL9Q3uUr9e9dSNznwdczsYPkgW2JXEfpHW8msMbLJ0wS2Ytd6JwCw9IL+qW/PQ= ;{id = 33655} 02646B00002F000100015180000C02646D000006200000000013 dk. 86400 IN NSEC dm. NS DS RRSIG NSEC 0161036E696302646B00000100010002A3000004D4584E7A a.nic.dk. 172800 IN A 212.88.78.122 0162036E696302646B00000100010002A3000004C1A366DE b.nic.dk. 172800 IN A 193.163.102.222 0162036E696302646B00001C00010002A30000102A010630000000800000000000000053 b.nic.dk. 172800 IN AAAA 2a01:630:0:80::53 0163036E696302646B00000100010002A3000004D04CA8F4 c.nic.dk. 172800 IN A 208.76.168.244 016C036E696302646B00000100010002A3000004C02607F2 l.nic.dk. 172800 IN A 192.38.7.242 016C036E696302646B00001C00010002A3000010200107F8001F00000000183502420000 l.nic.dk. 172800 IN AAAA 2001:7f8:1f::1835:242:0 0170036E696302646B00000100010002A3000004C2002F2A p.nic.dk. 172800 IN A 194.0.47.42 0170036E696302646B00001C00010002A3000010200106780078004200AD000000000053 p.nic.dk. 172800 IN AAAA 2001:678:78:42:ad::53 0173036E696302646B00000100010002A30000044D48E5FC s.nic.dk. 172800 IN A 77.72.229.252 0173036E696302646B00001C00010002A30000102A0103F0000003030000000000000053 s.nic.dk. 172800 IN AAAA 2a01:3f0:0:303::53 02646D00000200010002A3000013026E7307616E7963617374036E696302646D00 dm. 172800 IN NS ns.anycast.nic.dm. 02646D00000200010002A300001C026E7313626C61636B6E69676874736F6C7574696F6E7303636F6D00 dm. 172800 IN NS ns.blacknightsolutions.com. 02646D00000200010002A300000C036E7332036E696302646D00 dm. 172800 IN NS ns2.nic.dm. 02646D00000200010002A300001D036E733213626C61636B6E69676874736F6C7574696F6E7303636F6D00 dm. 172800 IN NS ns2.blacknightsolutions.com. 02646D00002F000100015180000C02646F000006200000000003 dm. 86400 IN NSEC do. NS RRSIG NSEC 02646D00002E0001000151800093002F08010001518052F4220052EAD9708377008412AD3F6A37FF0FF3348B719EB0ADDB9F6BA44F0B946F263C6699B47577550303D8B8686E04413E691F55FF492D616E94444B4DC969F753140ACF5F5463E7512EB987100E1FAC35FE2213E87682974B627C7726579EF464FB3DF1E15B07E794FF3049EAE8680490423CE6D65979F9883E6D2DBFC104C1BF290C693190FD74D4 dm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hBKtP2o3/w/zNItxnrCt259rpE8LlG8mPGaZtHV3VQMD2LhobgRBPmkfVf9JLWFulERLTclp91MUCs9fVGPnUS65hxAOH6w1/iIT6HaCl0tifHcmV570ZPs98eFbB+eU/zBJ6uhoBJBCPObWWXn5iD5tLb/BBMG/KQxpMZD9dNQ= ;{id = 33655} 026E7307616E7963617374036E696302646D00000100010002A3000004CC3DD812 ns.anycast.nic.dm. 172800 IN A 204.61.216.18 036E7332036E696302646D00000100010002A3000004C77FC545 ns2.nic.dm. 172800 IN A 199.127.197.69 02646F00000200010002A300000B026E73036E696302646F00 do. 172800 IN NS ns.nic.do. 02646F00000200010002A300000C036E7331036E696302646F00 do. 172800 IN NS ns1.nic.do. 02646F00000200010002A300000C036E7332036E696302646F00 do. 172800 IN NS ns2.nic.do. 02646F00000200010002A300000C036E7333036E696302646F00 do. 172800 IN NS ns3.nic.do. 02646F00000200010002A300000C036E7333036E6963026D7800 do. 172800 IN NS ns3.nic.mx. 02646F00000200010002A300000F06646F2D646E73036E696302707200 do. 172800 IN NS do-dns.nic.pr. 02646F00000200010002A30000140670686C6F656D07756F7265676F6E0365647500 do. 172800 IN NS phloem.uoregon.edu. 02646F00000200010002A300001006736E732D706203697363036F726700 do. 172800 IN NS sns-pb.isc.org. 02646F00002F000100015180001107646F6D61696E73000006200000000003 do. 86400 IN NSEC domains. NS RRSIG NSEC 02646F00002E0001000151800093002F08010001518052F4220052EAD97083770052B196015726E0446450604A5A0186C025FAD8DD0BE401CB22BFF83B25A9D998F3B3634615016EB040A57B2BE05E4E6F9C376D95CB291EDC3D2C305E033B9F1C03232096C48C413A6869F9731FC879ECFD71A35C95D82EAF660A0F15E08308CD370942B078F28084014195E90C7301916D2D47CEF0859F1C41D1483EBBB98838 do. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UrGWAVcm4ERkUGBKWgGGwCX62N0L5AHLIr/4OyWp2Zjzs2NGFQFusECleyvgXk5vnDdtlcspHtw9LDBeAzufHAMjIJbEjEE6aGn5cx/Ieez9caNcldgur2YKDxXggwjNNwlCsHjygIQBQZXpDHMBkW0tR87whZ8cQdFIPru5iDg= ;{id = 33655} 026E73036E696302646F00000100010002A3000004C8105BE4 ns.nic.do. 172800 IN A 200.16.91.228 026E73036E696302646F00001C00010002A3000010200113E085D001010000000000000228 ns.nic.do. 172800 IN AAAA 2001:13e0:85d0:101::228 036E7331036E696302646F00000100010002A3000004C8105BE2 ns1.nic.do. 172800 IN A 200.16.91.226 036E7331036E696302646F00001C00010002A3000010200113E085D001010000000000000226 ns1.nic.do. 172800 IN AAAA 2001:13e0:85d0:101::226 036E7332036E696302646F00000100010002A3000004C8105AA2 ns2.nic.do. 172800 IN A 200.16.90.162 036E7332036E696302646F00001C00010002A3000010200113E005D001010000000000000162 ns2.nic.do. 172800 IN AAAA 2001:13e0:5d0:101::162 036E7333036E696302646F00000100010002A300000495143D57 ns3.nic.do. 172800 IN A 149.20.61.87 036E7333036E696302646F00001C00010002A3000010200104F80003003D02E081FFFE4641F2 ns3.nic.do. 172800 IN AAAA 2001:4f8:3:3d:2e0:81ff:fe46:41f2 07646F6D61696E7300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 domains. 172800 IN NS demand.beta.aridns.net.au. 07646F6D61696E7300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 domains. 172800 IN NS demand.alpha.aridns.net.au. 07646F6D61696E7300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 domains. 172800 IN NS demand.delta.aridns.net.au. 07646F6D61696E7300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 domains. 172800 IN NS demand.gamma.aridns.net.au. 07646F6D61696E7300002B00010001518000246E0208025712C07D52BDFB21F425E2DFCE866A42EE94B37D230876FF68A27FA64920C0B9 domains. 86400 IN DS 28162 8 2 5712C07D52BDFB21F425E2DFCE866A42EE94B37D230876FF68A27FA64920C0B9 07646F6D61696E7300002E0001000151800093002B08010001518052F4220052EAD970837700A651C0A0ADABEBE11266FD3372FFEED8AD1F5F2048A049DEADA99E784A9DE515AB0534F27C953A219A8E4B14F16941D79536B2F33459353008AAC00F3BA4904A894577E9A041631B5BA50025181DAAC29F219898A023BA2848DB655F7FCEBFBD6CBF6933D9AA8804C7B95C754B2EF7D5F3DFC63C1C543EA4C3D118D894468AA7 domains. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . plHAoK2r6+ESZv0zcv/u2K0fXyBIoEnerameeEqd5RWrBTTyfJU6IZqOSxTxaUHXlTay8zRZNTAIqsAPO6SQSolFd+mgQWMbW6UAJRgdqsKfIZiYoCO6KEjbZV9/zr+9bL9pM9mqiATHuVx1Sy731fPfxjwcVD6kw9EY2JRGiqc= ;{id = 33655} 07646F6D61696E7300002E0001000151800093002F08010001518052F4220052EAD97083770009F2C066B5174B862001619423E674CD1EFE393949D3D42C830FE78202C5E96DB829A2736A5B20C547FB27F7BEA18B26B63198B4838E8EF6D64A0DC00744A64DD2DC70B01F4EFA7B08A9DCC18722ADC300599801A7C19608D925DB009E191FFD3197447BB71038EDC53611FA784424EC61F99BCCA9E4B6D04270878F1BB46DE4 domains. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CfLAZrUXS4YgAWGUI+Z0zR7+OTlJ09Qsgw/nggLF6W24KaJzalsgxUf7J/e+oYsmtjGYtIOOjvbWSg3AB0SmTdLccLAfTvp7CKncwYcircMAWZgBp8GWCNkl2wCeGR/9MZdEe7cQOO3FNhH6eEQk7GH5m8yp5LbQQnCHjxu0beQ= ;{id = 33655} 07646F6D61696E7300002F000100015180000C02647A000006200000000013 domains. 86400 IN NSEC dz. NS DS RRSIG NSEC 02647A00002F000100015180000C026563000006200000000003 dz. 86400 IN NSEC ec. NS RRSIG NSEC 02647A00002E0001000151800093002F08010001518052F4220052EAD970837700A7BA99FDFE178D6B3B5E55F75469D1050F8477004F0D39688FB0927A2C5CC2CE6DCD423FA47BC99E4F9FE0329B72F38F2653088EBB25A005608DEA15E0527073916DA3E61566F61CAFF5447F911F0CF2F9A4F79F596D42AAC633B29055D8661AB1D9B51D0EF753AD0596ADACB9F23461DBA81E65E6FCD5FC8CD2C13954636F43 dz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . p7qZ/f4XjWs7XlX3VGnRBQ+EdwBPDTloj7CSeixcws5tzUI/pHvJnk+f4DKbcvOPJlMIjrsloAVgjeoV4FJwc5Fto+YVZvYcr/VEf5EfDPL5pPefWW1CqsYzspBV2GYasdm1HQ73U60Flq2sufI0YduoHmXm/NX8jNLBOVRjb0M= ;{id = 33655} 02647A00000200010002A300001B02647A056363746C640761757468646E730472697065036E657400 dz. 172800 IN NS dz.cctld.authdns.ripe.net. 02647A00000200010002A300000C036E7331036E696302647A00 dz. 172800 IN NS ns1.nic.dz. 02647A00000200010002A300000C036E7332036E696302647A00 dz. 172800 IN NS ns2.nic.dz. 02647A00000200010002A300000C036E7333036E696302667200 dz. 172800 IN NS ns3.nic.fr. 02647A00000200010002A3000013056E732D647A07616672696E6963036E657400 dz. 172800 IN NS ns-dz.afrinic.net. 0469646E31036E696302647A00000100010002A3000004C1C240F3 idn1.nic.dz. 172800 IN A 193.194.64.243 0469646E32036E696302647A00000100010002A3000004D5B3A044 idn2.nic.dz. 172800 IN A 213.179.160.68 036E7331036E696302647A00000100010002A3000004C1C240F2 ns1.nic.dz. 172800 IN A 193.194.64.242 036E7331036E696302647A00001C00010002A300001020014340103000020000000000000002 ns1.nic.dz. 172800 IN AAAA 2001:4340:1030:2::2 036E7332036E696302647A00000100010002A3000004D5B3A042 ns2.nic.dz. 172800 IN A 213.179.160.66 02656300000200010002A300000B026E31036E696302656300 ec. 172800 IN NS n1.nic.ec. 02656300000200010002A300000B026E32036E696302656300 ec. 172800 IN NS n2.nic.ec. 02656300000200010002A300000B026E3303646E7302656300 ec. 172800 IN NS n3.dns.ec. 02656300000200010002A300001006736E732D706203697363036F726700 ec. 172800 IN NS sns-pb.isc.org. 02656300002F000100015180000D03656475000006200000000003 ec. 86400 IN NSEC edu. NS RRSIG NSEC 02656300002E0001000151800093002F08010001518052F4220052EAD97083770019C000C699250DA827C34777E1A8DBFE1C5602A2B719B3BB5B6A4EEF8A40C9B296430C7C7B56DA799A9674FB045CE72C510FAD5090B3FDFA4084FDFAA5CA66BA3C0C9E970C7A2D388662796ABC776710B10EA817AB5C60E441E23923E219F82F82B0599D622F4F5D49B7E4C291C8DF01F618AA88F27C712E176B7FB5345FC726 ec. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GcAAxpklDagnw0d34ajb/hxWAqK3GbO7W2pO74pAybKWQwx8e1baeZqWdPsEXOcsUQ+tUJCz/fpAhP36pcpmujwMnpcMei04hmJ5arx3ZxCxDqgXq1xg5EHiOSPiGfgvgrBZnWIvT11Jt+TCkcjfAfYYqojyfHEuF2t/tTRfxyY= ;{id = 33655} 026E3303646E7302656300000100010002A3000004CC3DD827 n3.dns.ec. 172800 IN A 204.61.216.39 026E3303646E7302656300001C00010002A3000010200105000014603900AD000000000001 n3.dns.ec. 172800 IN AAAA 2001:500:14:6039:ad::1 026E31036E696302656300000100010002A3000004C80CC601 n1.nic.ec. 172800 IN A 200.12.198.1 026E31036E696302656300001C00010002A300001028010000006100000000000000000001 n1.nic.ec. 172800 IN AAAA 2801:0:61::1 026E32036E696302656300000100010002A3000004C80CC701 n2.nic.ec. 172800 IN A 200.12.199.1 026E32036E696302656300001C00010002A300001028010000006000000000000000000001 n2.nic.ec. 172800 IN AAAA 2801:0:60::1 0365647500002F000100015180001309656475636174696F6E000006200000000013 edu. 86400 IN NSEC education. NS DS RRSIG NSEC 0365647500002E0001000151800093002F08010001518052F4220052EAD9708377003A0582FD475563E0C700C1DA525B8DBFC4FFFE69211DE45B2246C3A75251245C7C8BF35F4E248E5806D167471042B18CA722AE9068ADB34106D3C6F5E8A7C97F0D0879CCFA9BA7DA7F251921AE5C3D6FD2F4D27EBBA8F586B4F4A1C7A95A108F7737D03F52F8C5434536AB8A1DD5BA0BA37B5628E9EDBF269E7A25894DD3AA10 edu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OgWC/UdVY+DHAMHaUluNv8T//mkhHeRbIkbDp1JRJFx8i/NfTiSOWAbRZ0cQQrGMpyKukGits0EG08b16KfJfw0Iecz6m6fafyUZIa5cPW/S9NJ+u6j1hrT0ocepWhCPdzfQP1L4xUNFNquKHdW6C6N7Vijp7b8mnnoliU3TqhA= ;{id = 33655} 0365647500002E0001000151800093002B08010001518052F4220052EAD97083770034320FADAF9EFDC2D426340CA37164C5CA99409ED066443020E1099208E2C7D5E500847AB98D29852352815F0E0E3A354BFBC3F40F44C9A3B5F03CDD84059C0C6472ED2E7F31FC96C48E2186BB43096A52FCEE15A1DE1693EBA79FFF20DD21E28179E2C7AAE4CFA31C20CF9B70F0176A54B3DCC7D3F22274ACA496F9FA47D2B5 edu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . NDIPra+e/cLUJjQMo3FkxcqZQJ7QZkQwIOEJkgjix9XlAIR6uY0phSNSgV8ODjo1S/vD9A9EyaO18DzdhAWcDGRy7S5/MfyWxI4hhrtDCWpS/O4Vod4Wk+unn/8g3SHigXnix6rkz6McIM+bcPAXalSz3MfT8iJ0rKSW+fpH0rU= ;{id = 33655} 0365647500000200010002A300001301610B6564752D73657276657273036E657400 edu. 172800 IN NS a.edu-servers.net. 0365647500000200010002A300001301630B6564752D73657276657273036E657400 edu. 172800 IN NS c.edu-servers.net. 0365647500000200010002A300001301640B6564752D73657276657273036E657400 edu. 172800 IN NS d.edu-servers.net. 0365647500000200010002A300001301660B6564752D73657276657273036E657400 edu. 172800 IN NS f.edu-servers.net. 0365647500000200010002A300001301670B6564752D73657276657273036E657400 edu. 172800 IN NS g.edu-servers.net. 0365647500000200010002A3000013016C0B6564752D73657276657273036E657400 edu. 172800 IN NS l.edu-servers.net. 0365647500002B00010001518000246DA108024172496CDE85534E51129040355BD04B1FCFEBAE996DFDDE652006F6F8B2CE76 edu. 86400 IN DS 28065 8 2 4172496CDE85534E51129040355BD04B1FCFEBAE996DFDDE652006F6F8B2CE76 0561646E7331086265726B656C65790365647500000100010002A300000480208803 adns1.berkeley.edu. 172800 IN A 128.32.136.3 0561646E7331086265726B656C65790365647500001C00010002A30000102607F140FFFFFFFE0000000000000003 adns1.berkeley.edu. 172800 IN AAAA 2607:f140:ffff:fffe::3 0561646E7332086265726B656C65790365647500000100010002A30000048020880E adns2.berkeley.edu. 172800 IN A 128.32.136.14 04757072310375707203636C750365647500000100010002A300000488910104 upr1.upr.clu.edu. 172800 IN A 136.145.1.4 03646E73097072696E6365746F6E0365647500000100010002A30000048070810F dns.princeton.edu. 172800 IN A 128.112.129.15 0970656E647261676F6E026373067075726475650365647500000100010002A3000004800A0205 pendragon.cs.purdue.edu. 172800 IN A 128.10.2.5 0670686C6F656D07756F7265676F6E0365647500000100010002A300000480DF2023 phloem.uoregon.edu. 172800 IN A 128.223.32.35 0670686C6F656D07756F7265676F6E0365647500001C00010002A3000010200104680D0100200000000080DF2023 phloem.uoregon.edu. 172800 IN AAAA 2001:468:d01:20::80df:2023 09656475636174696F6E00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 education. 172800 IN NS demand.beta.aridns.net.au. 09656475636174696F6E00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 education. 172800 IN NS demand.alpha.aridns.net.au. 09656475636174696F6E00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 education. 172800 IN NS demand.delta.aridns.net.au. 09656475636174696F6E00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 education. 172800 IN NS demand.gamma.aridns.net.au. 09656475636174696F6E00002B000100015180002427370802B3147D88A4193F29D94867E05365EE734BFAD6C1BD480DBF024B974CB03CDDCF education. 86400 IN DS 10039 8 2 B3147D88A4193F29D94867E05365EE734BFAD6C1BD480DBF024B974CB03CDDCF 09656475636174696F6E00002E0001000151800093002B08010001518052F4220052EAD970837700131B3A7BA2D173825A9CE93AC369D9D284D4F2521C4D3E8D5B2215D62A30F9D7BFBEA8C22E8AB64B1A3F0E803ED3CAA02062777A8983DA2219138CACE50515BD2041462D0DCBEDD9CACE477D1920031B5E52A3C01646B07BB1792651787F2E66DE49B884AC2BCDF30D79D7E3447DE7D888731FDE3CB9C2FF65B8F03FDCA374EA education. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Exs6e6LRc4JanOk6w2nZ0oTU8lIcTT6NWyIV1iow+de/vqjCLoq2Sxo/DoA+08qgIGJ3eomD2iIZE4ys5QUVvSBBRi0Ny+3Zys5HfRkgAxteUqPAFkawe7F5JlF4fy5m3km4hKwrzfMNedfjRH3n2IhzH948ucL/ZbjwP9yjdOo= ;{id = 33655} 09656475636174696F6E00002E0001000151800093002F08010001518052F4220052EAD970837700298E0D957046D1AD7BDF1E7E2BB302ED2E374EEA9CBBDEE66D564F540804596B355269A542CADA471ECB6382B4A26AE51FE088DCED3694F2CFF343083FA7268E8746E3A5E54A0ECD9025F2063CA985A1F57820957E6997A7BA950629B7E5D3B54797946A6EB17139A8AFA29CA15F5DA5FCCA97B40AC38AA82B217227AF6F57F0 education. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . KY4NlXBG0a173x5+K7MC7S43Tuqcu97mbVZPVAgEWWs1UmmlQsraRx7LY4K0omrlH+CI3O02lPLP80MIP6cmjodG46XlSg7NkCXyBjyphaH1eCCVfmmXp7qVBim35dO1R5eUam6xcTmor6KcoV9dpfzKl7QKw4qoKyFyJ69vV/A= ;{id = 33655} 09656475636174696F6E00002F000100015180000C026565000006200000000013 education. 86400 IN NSEC ee. NS DS RRSIG NSEC 02656500000200010002A300000A016203746C6402656500 ee. 172800 IN NS b.tld.ee. 02656500000200010002A300000A016503746C6402656500 ee. 172800 IN NS e.tld.ee. 02656500000200010002A300000B0265650361736F02656500 ee. 172800 IN NS ee.aso.ee. 02656500000200010002A300000A026E7302757402656500 ee. 172800 IN NS ns.ut.ee. 02656500000200010002A300000B026E7303746C6402656500 ee. 172800 IN NS ns.tld.ee. 02656500000200010002A300000D026E730565656E657402656500 ee. 172800 IN NS ns.eenet.ee. 02656500000200010002A30000100573756E69630573756E657402736500 ee. 172800 IN NS sunic.sunet.se. 02656500002B0001000151800024864E0802000A3D89DC6CD4BA00EA8AFFEE3967D3A26DE7A545FBEFE16BA07518FC8D54F6 ee. 86400 IN DS 34382 8 2 000A3D89DC6CD4BA00EA8AFFEE3967D3A26DE7A545FBEFE16BA07518FC8D54F6 02656500002E0001000151800093002B08010001518052F4220052EAD9708377001A90FEF42CF9798B936984B7278840E3D0EAC6B1B836DAEFB256750C940EF4787045C320DE3268CC662D6954E44FBF180A8F4498274B637579D785E0B2E628B8C888AF143145E3A04A4F0D7C66EB2F760DD4BCC8FF9B6A397C87B7558A8122134B5264937483570A34F2B6912E4ED2E93CEBC34FE18A74B6C611A367B19432AA ee. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GpD+9Cz5eYuTaYS3J4hA49DqxrG4NtrvslZ1DJQO9HhwRcMg3jJozGYtaVTkT78YCo9EmCdLY3V514XgsuYouMiIrxQxReOgSk8NfGbrL3YN1LzI/5tqOXyHt1WKgSITS1Jkk3SDVwo08raRLk7S6Tzrw0/hinS2xhGjZ7GUMqo= ;{id = 33655} 02656500002E0001000151800093002F08010001518052F4220052EAD9708377004BA9ED42572222D30C2F983B69B4A179298696E47AF315E5C5EB0FA6E919F17734F460C17360118A8BA428050E6C37184BF14B537C12D3131B133D41D841BC0E8762E3170FC00D5EC8AF2C2F76D570245A41AB9741F1AB28726CA7A5EAEEC751D6417E465615A274794CA330EB248B1DAE0F2FACB8CB0916CF30D1EB4CF84599 ee. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S6ntQlciItMML5g7abSheSmGluR68xXlxesPpukZ8Xc09GDBc2ARioukKAUObDcYS/FLU3wS0xMbEz1B2EG8Dodi4xcPwA1eyK8sL3bVcCRaQauXQfGrKHJsp6Xq7sdR1kF+RlYVonR5TKMw6ySLHa4PL6y4ywkWzzDR60z4RZk= ;{id = 33655} 02656500002F000100015180000C026567000006200000000013 ee. 86400 IN NSEC eg. NS DS RRSIG NSEC 0265650361736F02656500000100010002A3000004D5B8337A ee.aso.ee. 172800 IN A 213.184.51.122 0265650361736F02656500001C00010002A30000102A020088000000210000000000000002 ee.aso.ee. 172800 IN AAAA 2a02:88:0:21::2 026E730565656E657402656500000100010002A3000004C12838F5 ns.eenet.ee. 172800 IN A 193.40.56.245 026E730565656E657402656500001C00010002A300001020010BB8000000000000000000000001 ns.eenet.ee. 172800 IN AAAA 2001:bb8::1 016203746C6402656500000100010002A3000004C2926A6E b.tld.ee. 172800 IN A 194.146.106.110 016203746C6402656500001C00010002A30000102001067C101000280000000000000053 b.tld.ee. 172800 IN AAAA 2001:67c:1010:28::53 016503746C6402656500000100010002A3000004CC3DD824 e.tld.ee. 172800 IN A 204.61.216.36 016503746C6402656500001C00010002A300001020010678009400530000000000000053 e.tld.ee. 172800 IN AAAA 2001:678:94:53::53 026E7303746C6402656500000100010002A3000004C32B570A ns.tld.ee. 172800 IN A 195.43.87.10 026E7302757402656500000100010002A3000004C1280563 ns.ut.ee. 172800 IN A 193.40.5.99 02656700002F000100015180000F05656D61696C000006200000000003 eg. 86400 IN NSEC email. NS RRSIG NSEC 02656700002E0001000151800093002F08010001518052F4220052EAD9708377007D7E8DE7681FC7F80704AACE28E42262D1DE224431100A135383C9A53C8E8DFB10F2847C06868456337070A496EC139CC995380CCAEFDBBF069D8FA89992F0E7F2DCA33C7FB418DA19028DD3F6BB939827FFCF580535ED43B6FA508982F3E2C2F0363227F837CC5B8BC0ADA970FD7D5F6B1A94A3D08B209647F14846F7332F74 eg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fX6N52gfx/gHBKrOKOQiYtHeIkQxEAoTU4PJpTyOjfsQ8oR8BoaEVjNwcKSW7BOcyZU4DMrv278GnY+omZLw5/Lcozx/tBjaGQKN0/a7k5gn/89YBTXtQ7b6UImC8+LC8DYyJ/g3zFuLwK2pcP19X2salKPQiyCWR/FIRvczL3Q= ;{id = 33655} 02656700000200010002A3000012036E733506756E6976696502616302617400 eg. 172800 IN NS ns5.univie.ac.at. 02656700000200010002A300000D037269700370736703636F6D00 eg. 172800 IN NS rip.psg.com. 02656700000200010002A300000D04667263750365756E02656700 eg. 172800 IN NS frcu.eun.eg. 036E733107646F746D61737202656700000100010002A30000045115619B ns1.dotmasr.eg. 172800 IN A 81.21.97.155 036E733207646F746D61737202656700000100010002A30000045115630B ns2.dotmasr.eg. 172800 IN A 81.21.99.11 036E733307646F746D61737202656700000100010002A3000004510A260B ns3.dotmasr.eg. 172800 IN A 81.10.38.11 04667263750365756E02656700000100010002A3000004C1E30101 frcu.eun.eg. 172800 IN A 193.227.1.1 05656D61696C00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 email. 172800 IN NS demand.beta.aridns.net.au. 05656D61696C00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 email. 172800 IN NS demand.alpha.aridns.net.au. 05656D61696C00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 email. 172800 IN NS demand.delta.aridns.net.au. 05656D61696C00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 email. 172800 IN NS demand.gamma.aridns.net.au. 05656D61696C00002B0001000151800024C90A08022F1D54E81A3F873361603A8985FB4F19823FA63B9399A9AA5A6A58456C66597F email. 86400 IN DS 51466 8 2 2F1D54E81A3F873361603A8985FB4F19823FA63B9399A9AA5A6A58456C66597F 05656D61696C00002E0001000151800093002B08010001518052F4220052EAD9708377004E049D928A88A2F1B398CCD562A43ACD8953374F4F4A60B480B14BD79726845F96BE1C952C36581EE0E6AC6F2CD1664DA4B13C29E0811C710820335725CE0B4693EED815DEC87EA59F1C48A5CBB4F2FCBB84DBD279DFE5F7ABAF52FD8FB88CC5E568E947DF9EA533B236AC63FADDF156B4A0CF60CB4A0846FD01B4B549249E1D email. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . TgSdkoqIovGzmMzVYqQ6zYlTN09PSmC0gLFL15cmhF+WvhyVLDZYHuDmrG8s0WZNpLE8KeCBHHEIIDNXJc4LRpPu2BXeyH6lnxxIpcu08vy7hNvSed/l96uvUv2PuIzF5WjpR9+epTOyNqxj+t3xVrSgz2DLSghG/QG0tUkknh0= ;{id = 33655} 05656D61696C00002E0001000151800093002F08010001518052F4220052EAD9708377007F5BAC825D5D7CD275D1C9BE0E56A2F35845A706A333B73D6F0593EC6309E93F3DAFB0A9C14E02187E5C821905A9C0CA248F6EECE0812A17F2438031661EA799FB0A5FF113B7B27BBA8E62188273E2918356D50B2186234AAC3E3B30B8B7EE540EF98B2086570BF7EDFC0A90235795A4F3CF7EC6365427348340ED36AE819C10 email. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . f1usgl1dfNJ10cm+Dlai81hFpwajM7c9bwWT7GMJ6T89r7CpwU4CGH5cghkFqcDKJI9u7OCBKhfyQ4AxZh6nmfsKX/ETt7J7uo5iGIJz4pGDVtULIYYjSqw+OzC4t+5UDvmLIIZXC/ft/AqQI1eVpPPPfsY2VCc0g0DtNq6BnBA= ;{id = 33655} 05656D61696C00002F00010001518000150B656E746572707269736573000006200000000013 email. 86400 IN NSEC enterprises. NS DS RRSIG NSEC 0B656E74657270726973657300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 enterprises. 172800 IN NS demand.beta.aridns.net.au. 0B656E74657270726973657300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 enterprises. 172800 IN NS demand.alpha.aridns.net.au. 0B656E74657270726973657300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 enterprises. 172800 IN NS demand.delta.aridns.net.au. 0B656E74657270726973657300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 enterprises. 172800 IN NS demand.gamma.aridns.net.au. 0B656E74657270726973657300002B0001000151800024BD2808027817DF3AD3DA83CDA3728126935F8B892EED5FF59F8809679CA7FB6ACA253137 enterprises. 86400 IN DS 48424 8 2 7817DF3AD3DA83CDA3728126935F8B892EED5FF59F8809679CA7FB6ACA253137 0B656E74657270726973657300002E0001000151800093002B08010001518052F4220052EAD97083770035998581909B7AC70DD4742304F1BDF3C8A4AEECD9A751018E4CA0D4A628555F64240EE34F495590102E762A2003B911B6B302B7A6FB3014F5376EC68A00D1EC376B1B7604DAF70AC0C28C942A2446D88959A8810F4201071712EC9082FA95A2AF32AA7B484166E4C83D7750A32CD544E0103811D7A0F4BDFF78032132DA5AF1 enterprises. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . NZmFgZCbescN1HQjBPG988ikruzZp1EBjkyg1KYoVV9kJA7jT0lVkBAudiogA7kRtrMCt6b7MBT1N27GigDR7DdrG3YE2vcKwMKMlCokRtiJWaiBD0IBBxcS7JCC+pWirzKqe0hBZuTIPXdQoyzVROAQOBHXoPS9/3gDITLaWvE= ;{id = 33655} 0B656E74657270726973657300002E0001000151800093002F08010001518052F4220052EAD9708377007B3D1AD51D475448E24411701965455DC1B4556461EDB2343F94E39116F35367293C0A1F0DDBC673901ECAB78F7E0AC4F8EC530D535714FB3A1659A9F36F4DCDDF2AC0E3BE52E33B200F7171BE38599E2329ED53184E234C12200B4CF398811DFEC46422C27339885943FEB769005519FCE9149889BAB99A9721CFAC0E4ABF11 enterprises. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ez0a1R1HVEjiRBFwGWVFXcG0VWRh7bI0P5TjkRbzU2cpPAofDdvGc5AeyrePfgrE+OxTDVNXFPs6Flmp829Nzd8qwOO+UuM7IA9xcb44WZ4jKe1TGE4jTBIgC0zzmIEd/sRkIsJzOYhZQ/63aQBVGfzpFJiJurmalyHPrA5KvxE= ;{id = 33655} 0B656E74657270726973657300002F00010001518000130965717569706D656E74000006200000000013 enterprises. 86400 IN NSEC equipment. NS DS RRSIG NSEC 0965717569706D656E7400000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 equipment. 172800 IN NS demand.beta.aridns.net.au. 0965717569706D656E7400000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 equipment. 172800 IN NS demand.alpha.aridns.net.au. 0965717569706D656E7400000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 equipment. 172800 IN NS demand.delta.aridns.net.au. 0965717569706D656E7400000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 equipment. 172800 IN NS demand.gamma.aridns.net.au. 0965717569706D656E7400002B000100015180002456B90802A164745D7DAB36BB4F998EFA7D2C375033562D6C9D262B3091E671B6969344EB equipment. 86400 IN DS 22201 8 2 A164745D7DAB36BB4F998EFA7D2C375033562D6C9D262B3091E671B6969344EB 0965717569706D656E7400002E0001000151800093002B08010001518052F4220052EAD9708377002BB443A0BB570FD6E0CAED1FBF9177701C910A2A3F6E2E28A5C4DA64986FD7E3FA06FC33FC176CF31BF19AF75B38902549DFE6D505288CDE64E2DC5C19096F8AF03311516C291BC3178FC28891DE7B07214FF0423DFAD202FCB7588CC07351AE9216D1DE0E02E71DC26865E12BC7535C702B17C543BDD03339702AF69BE24D4A equipment. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . K7RDoLtXD9bgyu0fv5F3cByRCio/bi4opcTaZJhv1+P6Bvwz/Bds8xvxmvdbOJAlSd/m1QUojN5k4txcGQlvivAzEVFsKRvDF4/CiJHeewchT/BCPfrSAvy3WIzAc1GukhbR3g4C5x3CaGXhK8dTXHArF8VDvdAzOXAq9pviTUo= ;{id = 33655} 0965717569706D656E7400002E0001000151800093002F08010001518052F4220052EAD9708377006F3B453AB07763DA87C4441759E927AB8139B541473F5E71012929056FCC0BD7920289C330363040138F8AD345463E55885A34E22FCC8DC62B6AA2122C95269B3EA2F3B80E0361C118F4ADA873ADCCF814B5042E31385CE652BD2324E1AD4153C647B62FAB4E6DDBBEDE32FFDD9B176F6731F8E157F0BE371848E3B5711BADB8 equipment. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bztFOrB3Y9qHxEQXWeknq4E5tUFHP15xASkpBW/MC9eSAonDMDYwQBOPitNFRj5ViFo04i/MjcYraqISLJUmmz6i87gOA2HBGPStqHOtzPgUtQQuMThc5lK9IyThrUFTxke2L6tObdu+3jL/3ZsXb2cx+OFX8L43GEjjtXEbrbg= ;{id = 33655} 0965717569706D656E7400002F000100015180000C026572000006200000000013 equipment. 86400 IN NSEC er. NS DS RRSIG NSEC 02657200000200010002A300001B026572056363746C640761757468646E730472697065036E657400 er. 172800 IN NS er.cctld.authdns.ripe.net. 02657200000200010002A300001407736177616E6577036E6F63036E657402657200 er. 172800 IN NS sawanew.noc.net.er. 02657200000200010002A3000014077A6172616E6577036E6F63036E657402657200 er. 172800 IN NS zaranew.noc.net.er. 02657200002F000100015180000C026573000006200000000003 er. 86400 IN NSEC es. NS RRSIG NSEC 02657200002E0001000151800093002F08010001518052F4220052EAD970837700B77D3662BE3FC1D6538C988DC7E781D5530017A4B72926568269B57DE35BFF326391B8FFF38757A4F7C051F5535144CB61C083F6D89DA6593FDDCA2BA51A7E4EAD31A96AFEE3F73652ADB5AF1871AE9C273D29065C9BA03EF60856276DF917AF8648BB3C709CD30CC71172E4B7632CAD78849C105B76DC18BF1623C0B67073E6 er. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . t302Yr4/wdZTjJiNx+eB1VMAF6S3KSZWgmm1feNb/zJjkbj/84dXpPfAUfVTUUTLYcCD9tidplk/3corpRp+Tq0xqWr+4/c2Uq21rxhxrpwnPSkGXJugPvYIVidt+Revhki7PHCc0wzHEXLkt2MsrXiEnBBbdtwYvxYjwLZwc+Y= ;{id = 33655} 07736177616E6577036E6F63036E657402657200000100010002A3000004C4C86001 sawanew.noc.net.er. 172800 IN A 196.200.96.1 077A6172616E6577036E6F63036E657402657200000100010002A3000004C4C86002 zaranew.noc.net.er. 172800 IN A 196.200.96.2 02657300002F000100015180001006657374617465000006200000000003 es. 86400 IN NSEC estate. NS RRSIG NSEC 02657300002E0001000151800093002F08010001518052F4220052EAD970837700B9F824FB4FE1F2D1CF09E0C8F3D5FBF5CB47438A708B42E51F2238866E544D6153D5049BA282299CCAC38582743EED61D315265EC3D7AB14851B50A812E380B54DCB5D8A262F0A13835D60E1985E270BDFF9620D305F32B7767132BDA78F485DED694AE64600D008D9B569B166A2EEFE44E0E0C36ADD84086213AEA6AEB5A2B7 es. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ufgk+0/h8tHPCeDI89X79ctHQ4pwi0LlHyI4hm5UTWFT1QSbooIpnMrDhYJ0Pu1h0xUmXsPXqxSFG1CoEuOAtU3LXYomLwoTg11g4ZheJwvf+WINMF8yt3ZxMr2nj0hd7WlK5kYA0AjZtWmxZqLu/kTg4MNq3YQIYhOupq61orc= ;{id = 33655} 02657300000200010002A300000A0161036E696302657300 es. 172800 IN NS a.nic.es. 02657300000200010002A300000A0166036E696302657300 es. 172800 IN NS f.nic.es. 02657300000200010002A300000E036E733105636573636102657300 es. 172800 IN NS ns1.cesca.es. 02657300000200010002A300000C036E7333036E696302667200 es. 172800 IN NS ns3.nic.fr. 02657300000200010002A3000017046E7331350C636F6D6D756E697479646E73036E657400 es. 172800 IN NS ns15.communitydns.net. 02657300000200010002A300000F066E732D657874036E696302636C00 es. 172800 IN NS ns-ext.nic.cl. 02657300000200010002A300001006736E732D706203697363036F726700 es. 172800 IN NS sns-pb.isc.org. 036E733105636573636102657300000100010002A300000454580003 ns1.cesca.es. 172800 IN A 84.88.0.3 0161036E696302657300000100010002A3000004C245FE01 a.nic.es. 172800 IN A 194.69.254.1 0161036E696302657300001C00010002A30000102001067C21CC20000000000000640041 a.nic.es. 172800 IN AAAA 2001:67c:21cc:2000::64:41 0166036E696302657300000100010002A300000482CE0102 f.nic.es. 172800 IN A 130.206.1.2 0166036E696302657300001C00010002A3000010200107200418CAF10000000000000002 f.nic.es. 172800 IN AAAA 2001:720:418:caf1::2 046E336E73036E696302657300000100010002A3000004C245FE2A n3ns.nic.es. 172800 IN A 194.69.254.42 046E336E73036E696302657300001C00010002A30000102001067C21CC20000000000000640042 n3ns.nic.es. 172800 IN AAAA 2001:67c:21cc:2000::64:42 026164026E73036E696302657300000100010002A3000004C245FE0F ad.ns.nic.es. 172800 IN A 194.69.254.15 036E7331036E696302657300000100010002A3000004C245FE01 ns1.nic.es. 172800 IN A 194.69.254.1 036E7331036E696302657300001C00010002A30000102001067C21CC20000000000000640041 ns1.nic.es. 172800 IN AAAA 2001:67c:21cc:2000::64:41 0665737461746500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 estate. 172800 IN NS demand.beta.aridns.net.au. 0665737461746500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 estate. 172800 IN NS demand.alpha.aridns.net.au. 0665737461746500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 estate. 172800 IN NS demand.delta.aridns.net.au. 0665737461746500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 estate. 172800 IN NS demand.gamma.aridns.net.au. 0665737461746500002B0001000151800024FB6508021B99951833A83F4A59D027C8117A5597FF969F7A7E2C539ACAD9AA025245A7ED estate. 86400 IN DS 64357 8 2 1B99951833A83F4A59D027C8117A5597FF969F7A7E2C539ACAD9AA025245A7ED 0665737461746500002E0001000151800093002B08010001518052F4220052EAD9708377003E1B6B4102F6BE3206880938A5DEB32F403AD1BB8D6A42DE96B4B79A4BCA2945CEE1411EDA9086430CD70EC909B22E7CAB4DF96ACF73D78426444A4E677CC921411EEE9BC048407C2672501BDCF56D4A31608D76A636ED409AD3E21132EA4E49E326D91366F817C44B312B99BB9A26C1332C7D65BE73F7015D96E07F9218377D estate. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PhtrQQL2vjIGiAk4pd6zL0A60buNakLelrS3mkvKKUXO4UEe2pCGQwzXDskJsi58q035as9z14QmREpOZ3zJIUEe7pvASEB8JnJQG9z1bUoxYI12pjbtQJrT4hEy6k5J4ybZE2b4F8RLMSuZu5omwTMsfWW+c/cBXZbgf5IYN30= ;{id = 33655} 0665737461746500002E0001000151800093002F08010001518052F4220052EAD9708377000FFD128B1444730652DAA4F20F4D9E2253CE249B9DC1DB7263AA4E3B40CA5B312ACFD873E60B25D7BA87FA96ABA5B77CB978650732FCB7C01462317E97F9494F171CED29463028218B6D47B2F3985F0FD7A5B069C4E915487A689764564EF237A3D89DE70841DB5F49EEFA90C3A503EE304BDFFF0699B8C37807D4333401D372 estate. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . D/0SixREcwZS2qTyD02eIlPOJJudwdtyY6pOO0DKWzEqz9hz5gsl17qH+parpbd8uXhlBzL8t8AUYjF+l/lJTxcc7SlGMCghi21HsvOYXw/XpbBpxOkVSHpol2RWTvI3o9id5whB219J7vqQw6UD7jBL3/8GmbjDeAfUMzQB03I= ;{id = 33655} 0665737461746500002F000100015180000C026574000006200000000013 estate. 86400 IN NSEC et. NS DS RRSIG NSEC 02657400000200010002A300001B026574056363746C640761757468646E730472697065036E657400 et. 172800 IN NS et.cctld.authdns.ripe.net. 02657400000200010002A3000014036E73310774656C65636F6D036E657402657400 et. 172800 IN NS ns1.telecom.net.et. 02657400000200010002A3000014036E73320774656C65636F6D036E657402657400 et. 172800 IN NS ns2.telecom.net.et. 02657400000200010002A30000140670686C6F656D07756F7265676F6E0365647500 et. 172800 IN NS phloem.uoregon.edu. 02657400002F000100015180000C026575000006200000000003 et. 86400 IN NSEC eu. NS RRSIG NSEC 02657400002E0001000151800093002F08010001518052F4220052EAD9708377007D51BA7615E04D9D0C0A79A2C615976162B3B92D7D46D40B321B81D703BA85CF663D7920A173E633E1E61F46FB3DB6B1C1DBA1133C9852D95066C0DC47147C21A5F37DC362578D74C9B11B02A21DEA7E31A42E4F949BA6E4864CAC7B798D65E4F4DD94A23211A464A948F66255EFDE3157539E54AEFCFE0CEE7F037B10B48245 et. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fVG6dhXgTZ0MCnmixhWXYWKzuS19RtQLMhuB1wO6hc9mPXkgoXPmM+HmH0b7PbaxwduhEzyYUtlQZsDcRxR8IaXzfcNiV410ybEbAqId6n4xpC5PlJum5IZMrHt5jWXk9N2UojIRpGSpSPZiVe/eMVdTnlSu/P4M7n8DexC0gkU= ;{id = 33655} 036E73310774656C65636F6D036E657402657400000100010002A3000004D5374024 ns1.telecom.net.et. 172800 IN A 213.55.64.36 036E73320774656C65636F6D036E657402657400000100010002A3000004D5374026 ns2.telecom.net.et. 172800 IN A 213.55.64.38 02657500002F000100015180001006657870657274000006200000000013 eu. 86400 IN NSEC expert. NS DS RRSIG NSEC 02657500002E0001000151800093002F08010001518052F4220052EAD9708377000DCF3573F50E97266344B059264FF3149160D5A77ADD5799A4582EEEA6AE8973B591EF9E945E49B02B2F615882721F89204C0E6C139A2D54155D5741C4DFD9D0673174857572DDFBF5E64BF5F9B70478B57DA2D30AB6BA0ECF38C377AFD3375658B99378515B39403C8D8968CF96F00203FFCD54E6345A483E3AF4CCE40FAF28 eu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Dc81c/UOlyZjRLBZJk/zFJFg1ad63VeZpFgu7qauiXO1ke+elF5JsCsvYViCch+JIEwObBOaLVQVXVdBxN/Z0GcxdIV1ct379eZL9fm3BHi1faLTCra6Ds84w3ev0zdWWLmTeFFbOUA8jYloz5bwAgP/zVTmNFpIPjr0zOQPryg= ;{id = 33655} 02657500002E0001000151800093002B08010001518052F4220052EAD9708377001953694002C31CA7FA1994D70D755056028ACE4BC4B63AE44F5DDB3FABB4B2630C68EFA099A602637F8DDF8A8BAD30E5A900AB5BAE61CB53D7D50562A516B2CC9F946113EFAB10ED387409AF84D14674A405BCC7AA4AA78EE479110574354B624E5E5E1B181E58C6809625D9A93E157698D2EAC592DEE338E8A98FFED4F7E462 eu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GVNpQALDHKf6GZTXDXVQVgKKzkvEtjrkT13bP6u0smMMaO+gmaYCY3+N34qLrTDlqQCrW65hy1PX1QVipRayzJ+UYRPvqxDtOHQJr4TRRnSkBbzHqkqnjuR5EQV0NUtiTl5eGxgeWMaAliXZqT4VdpjS6sWS3uM46KmP/tT35GI= ;{id = 33655} 02657500000200010002A300000A017803646E7302657500 eu. 172800 IN NS x.dns.eu. 02657500000200010002A300000A017903646E7302657500 eu. 172800 IN NS y.dns.eu. 02657500000200010002A300000B02637A03646E7302657500 eu. 172800 IN NS cz.dns.eu. 02657500000200010002A300000B026E6C03646E7302657500 eu. 172800 IN NS nl.dns.eu. 02657500000200010002A300000B02736903646E7302657500 eu. 172800 IN NS si.dns.eu. 02657500000200010002A300000B02756B03646E7302657500 eu. 172800 IN NS uk.dns.eu. 02657500002B0001000151800018EEFB070187E2B3544884B45F36A0DA72DADCB0239C4D73D4 eu. 86400 IN DS 61179 7 1 87E2B3544884B45F36A0DA72DADCB0239C4D73D4 02657500002B0001000151800024EEFB07023B526BCC354AE085AD9984C9BE73D271411023EFF421EF184BCE41ACE3DE9F8B eu. 86400 IN DS 61179 7 2 3B526BCC354AE085AD9984C9BE73D271411023EFF421EF184BCE41ACE3DE9F8B 02637A03646E7302657500000100010002A30000045DBE808A cz.dns.eu. 172800 IN A 93.190.128.138 026E6C03646E7302657500000100010002A30000045BC81064 nl.dns.eu. 172800 IN A 91.200.16.100 02736903646E7302657500000100010002A3000004C102DD3C si.dns.eu. 172800 IN A 193.2.221.60 02736903646E7302657500001C00010002A300001020011470800001000000000000000001 si.dns.eu. 172800 IN AAAA 2001:1470:8000:100::1 02756B03646E7302657500000100010002A3000004C342F1B2 uk.dns.eu. 172800 IN A 195.66.241.178 017803646E7302657500000100010002A3000004C2000113 x.dns.eu. 172800 IN A 194.0.1.19 017803646E7302657500001C00010002A300001020010678000400000000000000000013 x.dns.eu. 172800 IN AAAA 2001:678:4::13 017903646E7302657500000100010002A3000004C2926A5A y.dns.eu. 172800 IN A 194.146.106.90 017903646E7302657500001C00010002A30000102001067C101000230000000000000053 y.dns.eu. 172800 IN AAAA 2001:67c:1010:23::53 036E7336076E6F6D696E756D02657500000100010002A300000451C84523 ns6.nominum.eu. 172800 IN A 81.200.69.35 0665787065727400000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 expert. 172800 IN NS demand.beta.aridns.net.au. 0665787065727400000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 expert. 172800 IN NS demand.alpha.aridns.net.au. 0665787065727400000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 expert. 172800 IN NS demand.delta.aridns.net.au. 0665787065727400000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 expert. 172800 IN NS demand.gamma.aridns.net.au. 0665787065727400002B00010001518000245C59080269D4659BE016123C984DB12560A72D36F49104DC165E4CB9A76B5A320BA8A18F expert. 86400 IN DS 23641 8 2 69D4659BE016123C984DB12560A72D36F49104DC165E4CB9A76B5A320BA8A18F 0665787065727400002E0001000151800093002B08010001518052F4220052EAD970837700161E14C62A9C1D8FBF840C016EA6847C4BF879E6C3A0FF15012597A86139F9239CD2A30E6F34369E0E0F2DEA60A1AFDBC57A53B79B1C7A66D2693AF4D1D03E913D26A864731B9B98DCCE242EB453DBFAD8C8AAF225E42C6246463F7BA09EACA028C6AAE6282E01D77878917190302894CA0DACF1BA03B22D2DFC24EE69778802 expert. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Fh4UxiqcHY+/hAwBbqaEfEv4eebDoP8VASWXqGE5+SOc0qMObzQ2ng4PLepgoa/bxXpTt5scembSaTr00dA+kT0mqGRzG5uY3M4kLrRT2/rYyKryJeQsYkZGP3ugnqygKMaq5iguAdd4eJFxkDAolMoNrPG6A7ItLfwk7ml3iAI= ;{id = 33655} 0665787065727400002E0001000151800093002F08010001518052F4220052EAD970837700646C6CE45DB50079B247EBC9E4437569FF1EE7C7C3C4CD37F147E14F94101A442D0F1FCC6619224281D5AD0F4DCBBF332FE23EC47C9320E9A62AB8294835BF271519FAE8E10878FE7710CB6BA5FCD16DBE97BB78E3BE262565E5920D2A06EF94FF1463BB4278881AE4577759F0C009063E409466C7A75296CD78AAF875856BDC expert. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZGxs5F21AHmyR+vJ5EN1af8e58fDxM038UfhT5QQGkQtDx/MZhkiQoHVrQ9Ny78zL+I+xHyTIOmmKrgpSDW/JxUZ+ujhCHj+dxDLa6X80W2+l7t4474mJWXlkg0qBu+U/xRju0J4iBrkV3dZ8MAJBj5AlGbHp1KWzXiq+HWFa9w= ;{id = 33655} 0665787065727400002F000100015180000E046661726D000006200000000013 expert. 86400 IN NSEC farm. NS DS RRSIG NSEC 046661726D00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 farm. 172800 IN NS demand.beta.aridns.net.au. 046661726D00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 farm. 172800 IN NS demand.alpha.aridns.net.au. 046661726D00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 farm. 172800 IN NS demand.delta.aridns.net.au. 046661726D00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 farm. 172800 IN NS demand.gamma.aridns.net.au. 046661726D00002B0001000151800024C3CA08023782D7D15479D12AF978FD07490A34E80ED9254154FC92808ED393F0F8A48604 farm. 86400 IN DS 50122 8 2 3782D7D15479D12AF978FD07490A34E80ED9254154FC92808ED393F0F8A48604 046661726D00002E0001000151800093002B08010001518052F4220052EAD970837700229327609E336D52CF57F4DA8993C2CF0B73351AF16CC0A1BEDF9E355846F6D472067A17B56D17C07558C4361BFCE5E13B4A888F28C89BD8ADC9D2B200C7613EDFC573B23F52A9743002E946A1A1EDD04623AC0E78130E45B2356153C4D0A44D021D02D51A355EA2F9A92C080C19244D23CF99FBF056A8F2CA94AF826C73DC48 farm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . IpMnYJ4zbVLPV/TaiZPCzwtzNRrxbMChvt+eNVhG9tRyBnoXtW0XwHVYxDYb/OXhO0qIjyjIm9itydKyAMdhPt/Fc7I/Uql0MALpRqGh7dBGI6wOeBMORbI1YVPE0KRNAh0C1Ro1XqL5qSwIDBkkTSPPmfvwVqjyypSvgmxz3Eg= ;{id = 33655} 046661726D00002E0001000151800093002F08010001518052F4220052EAD970837700435350A47E9209CCD627AB661D8E1802BFD6815A79F816C9B3B08D33C58B9E63B1485D655CBDE08E7124BD25394A903A68D31BA688BAE08C4971116A7D4966C7AEC80162A36B5BA35CA01B6594E2C626A1FDBF16575C33206413CBA2A35C7C2035A865567C52B9E87D66AD088C2AF748B7731387FE65F7064BEF271A12E62BE0 farm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Q1NQpH6SCczWJ6tmHY4YAr/WgVp5+BbJs7CNM8WLnmOxSF1lXL3gjnEkvSU5SpA6aNMbpoi64IxJcRFqfUlmx67IAWKja1ujXKAbZZTixiah/b8WV1wzIGQTy6KjXHwgNahlVnxSueh9Zq0IjCr3SLdzE4f+ZfcGS+8nGhLmK+A= ;{id = 33655} 046661726D00002F000100015180000C026669000006200000000013 farm. 86400 IN NSEC fi. NS DS RRSIG NSEC 02666900000200010002A3000006016102666900 fi. 172800 IN NS a.fi. 02666900000200010002A3000006016202666900 fi. 172800 IN NS b.fi. 02666900000200010002A3000006016302666900 fi. 172800 IN NS c.fi. 02666900000200010002A3000006016402666900 fi. 172800 IN NS d.fi. 02666900000200010002A3000006016502666900 fi. 172800 IN NS e.fi. 02666900000200010002A3000006016602666900 fi. 172800 IN NS f.fi. 02666900000200010002A3000006016702666900 fi. 172800 IN NS g.fi. 02666900000200010002A3000006016802666900 fi. 172800 IN NS h.fi. 02666900000200010002A3000006016902666900 fi. 172800 IN NS i.fi. 02666900002B00010001518000248A5E08027282CE618E87E06DF5A21956AA54D02A98B8ADA54253A592A88E6AB94D7C1B0C fi. 86400 IN DS 35422 8 2 7282CE618E87E06DF5A21956AA54D02A98B8ADA54253A592A88E6AB94D7C1B0C 02666900002B000100015180002492690802348035176474A7247E7593D2CED09873F42E72FBF823B27328980A1236E75678 fi. 86400 IN DS 37481 8 2 348035176474A7247E7593D2CED09873F42E72FBF823B27328980A1236E75678 02666900002E0001000151800093002B08010001518052F4220052EAD97083770035129A7565826AFF361C9F2ED630282CB4FDBFE0297F5D41DA0B33C0E0870C36C0F3C86E10DC535CBDF6392608818E1A71222B180EFF2A2BC29BE6CD66D0DE7799991E81309A355E653B164AB1663389E24570E93AB488573D8DFF66A0A459FB17E0F127E8D77C0065988E503904EAC801C4A37AA912BE9925CB703E29F500F7 fi. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . NRKadWWCav82HJ8u1jAoLLT9v+Apf11B2gszwOCHDDbA88huENxTXL32OSYIgY4acSIrGA7/KivCm+bNZtDed5mZHoEwmjVeZTsWSrFmM4niRXDpOrSIVz2N/2agpFn7F+DxJ+jXfABlmI5QOQTqyAHEo3qpEr6ZJctwPin1APc= ;{id = 33655} 02666900002E0001000151800093002F08010001518052F4220052EAD970837700B6CEF892D3FA58190B275B214C66CF45C1AE32E0A57646C94E8E697F9D3D80A4959EAF4438EAA16BB5A7632C29A9EF067354BDF44981E590911EA8C477307A5E21B8A3C2D1D7CA3AE96A99095EE3ACD4B2948437483B38B780156ACA2241B63A39B8E7B935861B31017A041292DA1D628C5ABFF6B7A8DA0375E7794142BEBACC fi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ts74ktP6WBkLJ1shTGbPRcGuMuCldkbJTo5pf509gKSVnq9EOOqha7WnYywpqe8Gc1S99EmB5ZCRHqjEdzB6XiG4o8LR18o66WqZCV7jrNSylIQ3SDs4t4AVasoiQbY6ObjnuTWGGzEBegQSktodYoxav/a3qNoDded5QUK+usw= ;{id = 33655} 02666900002F000100015180000C02666A000006200000000013 fi. 86400 IN NSEC fj. NS DS RRSIG NSEC 016102666900000100010002A3000004C1A60401 a.fi. 172800 IN A 193.166.4.1 016102666900001C00010002A300001020010708001000530000000000000053 a.fi. 172800 IN AAAA 2001:708:10:53::53 016202666900000100010002A3000004C2926A1A b.fi. 172800 IN A 194.146.106.26 016202666900001C00010002A30000102001067C101000060000000000000053 b.fi. 172800 IN AAAA 2001:67c:1010:6::53 016302666900000100010002A30000049C9A641A c.fi. 172800 IN A 156.154.100.26 016302666900001C00010002A300001020010502AD0900000000000000000026 c.fi. 172800 IN AAAA 2001:502:ad09::26 016402666900000100010002A30000044D48E5FD d.fi. 172800 IN A 77.72.229.253 016402666900001C00010002A30000102A0103F0000003020000000000000053 d.fi. 172800 IN AAAA 2a01:3f0:0:302::53 016502666900000100010002A3000004C200010E e.fi. 172800 IN A 194.0.1.14 016502666900001C00010002A30000102001067800040000000000000000000E e.fi. 172800 IN AAAA 2001:678:4::e 016602666900000100010002A300000457EF7FC6 f.fi. 172800 IN A 87.239.127.198 016602666900001C00010002A30000102A0013F000000003000000000000AAAA f.fi. 172800 IN AAAA 2a00:13f0:0:3::aaaa 016702666900000100010002A30000049C9A651A g.fi. 172800 IN A 156.154.101.26 016802666900000100010002A30000049C9A661A h.fi. 172800 IN A 156.154.102.26 016902666900000100010002A30000049C9A671A i.fi. 172800 IN A 156.154.103.26 016902666900001C00010002A3000010200105022EDA00000000000000000026 i.fi. 172800 IN AAAA 2001:502:2eda::26 02666A00000200010002A300000D037269700370736703636F6D00 fj. 172800 IN NS rip.psg.com. 02666A00000200010002A3000010046D616E750375737002616302666A00 fj. 172800 IN NS manu.usp.ac.fj. 02666A00000200010002A300001004746572690375737002616302666A00 fj. 172800 IN NS teri.usp.ac.fj. 02666A00000200010002A30000140561646E7331086265726B656C65790365647500 fj. 172800 IN NS adns1.berkeley.edu. 02666A00000200010002A30000140561646E7332086265726B656C65790365647500 fj. 172800 IN NS adns2.berkeley.edu. 02666A00000200010002A300001206617574683030026E73027575036E657400 fj. 172800 IN NS auth00.ns.uu.net. 02666A00002F000100015180000C02666B000006200000000003 fj. 86400 IN NSEC fk. NS RRSIG NSEC 02666A00002E0001000151800093002F08010001518052F4220052EAD970837700B3B9259D2D4AA675B39B6A50DE4C09E08D22751B9642647C2C09EBBBF68C4D233DAAE5D4D5F1A6F1802F1E9F4B3EE9E69E3ED01920BED57C4BB88652867A60E1B97A29770ABD878F03AA1791C8948E910EEFAFD74007E0D0AC8B9A1E210DAA51D545505816518ED2DE9620F65CCD6597FE1C513EACD2E5CC8626ECEB61ECF06F fj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . s7klnS1KpnWzm2pQ3kwJ4I0idRuWQmR8LAnru/aMTSM9quXU1fGm8YAvHp9LPunmnj7QGSC+1XxLuIZShnpg4bl6KXcKvYePA6oXkciUjpEO76/XQAfg0KyLmh4hDapR1UVQWBZRjtLeliD2XM1ll/4cUT6s0uXMhibs62Hs8G8= ;{id = 33655} 046D616E750375737002616302666A00000100010002A30000049078080A manu.usp.ac.fj. 172800 IN A 144.120.8.10 04746572690375737002616302666A00000100010002A300000490780801 teri.usp.ac.fj. 172800 IN A 144.120.8.1 02666B00000200010002A3000013026E7307686F72697A6F6E036E657402666B00 fk. 172800 IN NS ns.horizon.net.fk. 02666B00000200010002A3000011086575726F2D6E7331026377036E657400 fk. 172800 IN NS euro-ns1.cw.net. 02666B00000200010002A3000011086575726F2D6E7332026377036E657400 fk. 172800 IN NS euro-ns2.cw.net. 02666B00000200010002A3000011086575726F2D6E7333026377036E657400 fk. 172800 IN NS euro-ns3.cw.net. 02666B00002F000100015180001107666C6F72697374000006200000000003 fk. 86400 IN NSEC florist. NS RRSIG NSEC 02666B00002E0001000151800093002F08010001518052F4220052EAD9708377002E35FEFC94822E81AB03159EFD27319A0CB46085965FEAC8FF91C3A5F87CB93851C044F118683C3BCE59BC214F46B38D29593E635203460F01E895A9E25A9F61D3184C46C2261EAACF8CF34EFF59441DABD719CDB9F01BE569697966B7814EEBB5D989BE3675C00C5A0A2CF9A4795F40B68051811829F48C088237C3BDB0D618 fk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LjX+/JSCLoGrAxWe/Scxmgy0YIWWX+rI/5HDpfh8uThRwETxGGg8O85ZvCFPRrONKVk+Y1IDRg8B6JWp4lqfYdMYTEbCJh6qz4zzTv9ZRB2r1xnNufAb5WlpeWa3gU7rtdmJvjZ1wAxaCiz5pHlfQLaAUYEYKfSMCII3w72w1hg= ;{id = 33655} 026E7307686F72697A6F6E036E657402666B00000100010002A3000004C3F8C1FA ns.horizon.net.fk. 172800 IN A 195.248.193.250 07666C6F7269737400000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 florist. 172800 IN NS demand.beta.aridns.net.au. 07666C6F7269737400000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 florist. 172800 IN NS demand.alpha.aridns.net.au. 07666C6F7269737400000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 florist. 172800 IN NS demand.delta.aridns.net.au. 07666C6F7269737400000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 florist. 172800 IN NS demand.gamma.aridns.net.au. 07666C6F7269737400002B0001000151800024FFCA0802E3ABDDF92C74C5A28B71A0A51245854F5D702EBCA2B70E535F51144F77EAB6CA florist. 86400 IN DS 65482 8 2 E3ABDDF92C74C5A28B71A0A51245854F5D702EBCA2B70E535F51144F77EAB6CA 07666C6F7269737400002E0001000151800093002B08010001518052F4220052EAD9708377006D0A839AB0CF91D1F29DF9D4FC96BC2B695690DEBD31A2134DC333B75108BCE4609F9D2F1789963A03F1CCDF9335EE8ABD9DC6DA150442E3DF7897ACE26E92245625D4C28AC9CA4BE7F5AEF5B3DACE0CFEF4C9FBED62CBE808B898C69BF453B53BE1172175581FFA8E42072EFDD0E3843E2B6E9E3F9B2B4B1E8D241B843673AF florist. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bQqDmrDPkdHynfnU/Ja8K2lWkN69MaITTcMzt1EIvORgn50vF4mWOgPxzN+TNe6KvZ3G2hUEQuPfeJes4m6SJFYl1MKKycpL5/Wu9bPazgz+9Mn77WLL6Ai4mMab9FO1O+EXIXVYH/qOQgcu/dDjhD4rbp4/mytLHo0kG4Q2c68= ;{id = 33655} 07666C6F7269737400002E0001000151800093002F08010001518052F4220052EAD97083770074C34E95DFE8C2E2A4A830804AD4D8E07BA56C2AAD8D00BCBC83357FC348F77CFBAB5EC61F33FCBE3039B33D69BFCAE5771E2819FE2C7E4F4ADAC89461F72CD73509CD2E33BD81C27D3DBE1155A6D5E57FE76AAEB583DC3E61FE7262F12061B3C63DAE4C32D1FDFE6ECFCEDEE9042B65E4049195E895CE78FFB3101D6C9A96B0 florist. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dMNOld/owuKkqDCAStTY4HulbCqtjQC8vIM1f8NI93z7q17GHzP8vjA5sz1pv8rldx4oGf4sfk9K2siUYfcs1zUJzS4zvYHCfT2+EVWm1eV/52qutYPcPmH+cmLxIGGzxj2uTDLR/f5uz87e6QQrZeQEkZXolc54/7MQHWyalrA= ;{id = 33655} 07666C6F7269737400002F000100015180000C02666D000006200000000013 florist. 86400 IN NSEC fm. NS DS RRSIG NSEC 02666D00000200010002A300001304746C643108756C747261646E73036E657400 fm. 172800 IN NS tld1.ultradns.net. 02666D00000200010002A300001304746C643208756C747261646E73036E657400 fm. 172800 IN NS tld2.ultradns.net. 02666D00000200010002A300001304746C643308756C747261646E73036F726700 fm. 172800 IN NS tld3.ultradns.org. 02666D00000200010002A300001304746C643408756C747261646E73036F726700 fm. 172800 IN NS tld4.ultradns.org. 02666D00000200010002A300001404746C643508756C747261646E7304696E666F00 fm. 172800 IN NS tld5.ultradns.info. 02666D00000200010002A300001504746C643608756C747261646E7302636F02756B00 fm. 172800 IN NS tld6.ultradns.co.uk. 02666D00002F000100015180000C02666F000006200000000003 fm. 86400 IN NSEC fo. NS RRSIG NSEC 02666D00002E0001000151800093002F08010001518052F4220052EAD97083770023142F9CAC28D3B3C7518FD2D5CC733599B5BCE6DF7DC8966547BF480DF12459475D60B2F1711067A86E9390B64EBCAD21445CF8B1481CCCFD4E91113BB68B665D14BDF1D53B75E165CB403E9566C66BB66F4C5630F8DF87CD9BA282C855E55D5FDF8BD3677476CF4B71E2236491F46574A8109445A85D8DC9DB9D7A51940280 fm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IxQvnKwo07PHUY/S1cxzNZm1vObffciWZUe/SA3xJFlHXWCy8XEQZ6huk5C2TrytIURc+LFIHMz9TpERO7aLZl0UvfHVO3XhZctAPpVmxmu2b0xWMPjfh82booLIVeVdX9+L02d0ds9LceIjZJH0ZXSoEJRFqF2NydudelGUAoA= ;{id = 33655} 02666F00000200010002A300000C03706368036E696302666F00 fo. 172800 IN NS pch.nic.fo. 02666F00000200010002A300000F0661726E68656D036E696302666F00 fo. 172800 IN NS arnhem.nic.fo. 02666F00000200010002A3000012096672616E6B66757274036E696302666F00 fo. 172800 IN NS frankfurt.nic.fo. 02666F00000200010002A30000130A636F70656E686167656E036E696302666F00 fo. 172800 IN NS copenhagen.nic.fo. 02666F00002B0001000151800024A23708026E7925D8D6F243EF35381231B955528F25087DBF3E61CC5FCBCFE72948D0470B fo. 86400 IN DS 41527 8 2 6E7925D8D6F243EF35381231B955528F25087DBF3E61CC5FCBCFE72948D0470B 02666F00002E0001000151800093002B08010001518052F4220052EAD9708377006C9EEB93E5602CF2E514F4049070F9FA76C8360139B65F5C29D29EDDF479CAAFC6B350FB9A2C5F794E34BCDB1541D7C8EE83E538F8777231102DA79DB14205A49446D6E2D0BC3F26CF068A9DCB7EC152AC738B7B23FFD319893DC4CC23F8FEDEA928EA1EC7CEA2D582A0B3B6B1A45390B7C1FD69760BAD75333743987DA27977 fo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bJ7rk+VgLPLlFPQEkHD5+nbINgE5tl9cKdKe3fR5yq/Gs1D7mixfeU40vNsVQdfI7oPlOPh3cjEQLaedsUIFpJRG1uLQvD8mzwaKnct+wVKsc4t7I//TGYk9xMwj+P7eqSjqHsfOotWCoLO2saRTkLfB/Wl2C611MzdDmH2ieXc= ;{id = 33655} 02666F00002E0001000151800093002F08010001518052F4220052EAD9708377004A46FF7AAEC9D4DA4D206B4ACAAE47370F4955B4C1834C983ED27763B609E01B3385FF52BF8BABFDFDC106E7E73CB2A19007B2DA1A4FF459BF02A2572CD8F3C038277311570A5092484A6363BB781F893DD442C938049B6A5BE2D77531B8F1CD60AA3662C8F1F6D78CC674CEE19454BF16A426B572D0FEE536174F46C5FE026C fo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Skb/eq7J1NpNIGtKyq5HNw9JVbTBg0yYPtJ3Y7YJ4Bszhf9Sv4ur/f3BBufnPLKhkAey2hpP9Fm/AqJXLNjzwDgncxFXClCSSEpjY7t4H4k91ELJOASbalvi13UxuPHNYKo2Ysjx9teMxnTO4ZRUvxakJrVy0P7lNhdPRsX+Amw= ;{id = 33655} 02666F00002F000100015180000C026672000006200000000013 fo. 86400 IN NSEC fr. NS DS RRSIG NSEC 0661726E68656D036E696302666F00000100010002A3000004C1B09018 arnhem.nic.fo. 172800 IN A 193.176.144.24 0661726E68656D036E696302666F00001C00010002A30000102A000D78000001020193017601440024 arnhem.nic.fo. 172800 IN AAAA 2a00:d78:0:102:193:176:144:24 0A636F70656E686167656E036E696302666F00000100010002A3000004C1A3660C copenhagen.nic.fo. 172800 IN A 193.163.102.12 0A636F70656E686167656E036E696302666F00001C00010002A30000102A010630000000400000000000000012 copenhagen.nic.fo. 172800 IN AAAA 2a01:630:0:40::12 096672616E6B66757274036E696302666F00000100010002A3000004515BA158 frankfurt.nic.fo. 172800 IN A 81.91.161.88 03706368036E696302666F00000100010002A3000004CC3DD841 pch.nic.fo. 172800 IN A 204.61.216.65 03706368036E696302666F00001C00010002A3000010200105000014606500AD000000000001 pch.nic.fo. 172800 IN AAAA 2001:500:14:6065:ad::1 02667200002F000100015180000C026761000006200000000013 fr. 86400 IN NSEC ga. NS DS RRSIG NSEC 02667200002E0001000151800093002F08010001518052F4220052EAD970837700722C3E3AB5BF5E75C17F0828F8EDC53C73875A26EF94C4F7733EB74436F0BF066B75CA47B4E9B5BE771EDAE9F9372F2123AEC6A8445623E925E7393BA1AAE5C1080E8F18C095B529A45BFDED6A81E9A64EE99225AFF08074653F7C974E9C1409DA2E9361E80F6C5A00704F6CCE8D671EE0CB085C6C319D771E963E27A2DF5B82 fr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ciw+OrW/XnXBfwgo+O3FPHOHWibvlMT3cz63RDbwvwZrdcpHtOm1vnce2un5Ny8hI67GqERWI+kl5zk7oarlwQgOjxjAlbUppFv97WqB6aZO6ZIlr/CAdGU/fJdOnBQJ2i6TYegPbFoAcE9szo1nHuDLCFxsMZ13HpY+J6LfW4I= ;{id = 33655} 02667200002E0001000151800093002B08010001518052F4220052EAD970837700BE2180AA1B3325413E21924CA64A3413FB8F63D6BC445954D6631E6D9BAF6B97510FCDBCB917339559277425CED9C7110EF57D00B44FF9A2A72D0DD7CDCB8EEF50346F506B3A32801B7B4A2738EF72A104000095CCC7F6E2F7C656CEEE76B1C547ADC3C3B3BFF4A44195A4421B3CD75EDC0B8EA1E90096953AD341FA64651A9B fr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . viGAqhszJUE+IZJMpko0E/uPY9a8RFlU1mMebZuva5dRD828uRczlVkndCXO2ccRDvV9ALRP+aKnLQ3XzcuO71A0b1BrOjKAG3tKJzjvcqEEAACVzMf24vfGVs7udrHFR63Dw7O/9KRBlaRCGzzXXtwLjqHpAJaVOtNB+mRlGps= ;{id = 33655} 02667200000200010002A300000E016403657874036E696302667200 fr. 172800 IN NS d.ext.nic.fr. 02667200000200010002A300000A0164036E696302667200 fr. 172800 IN NS d.nic.fr. 02667200000200010002A300000E016503657874036E696302667200 fr. 172800 IN NS e.ext.nic.fr. 02667200000200010002A300000E016603657874036E696302667200 fr. 172800 IN NS f.ext.nic.fr. 02667200000200010002A300000E016703657874036E696302667200 fr. 172800 IN NS g.ext.nic.fr. 02667200002B00010001518000244E9A0802A4208B55FFB352EDC816D9329283DD8BBDDE44C585395AF9AA7275ABE3CF6795 fr. 86400 IN DS 20122 8 2 A4208B55FFB352EDC816D9329283DD8BBDDE44C585395AF9AA7275ABE3CF6795 02667200002B00010001518000248917080223C6CAADC9927EE98061F2B52C9B8DA6B53F3F648F814A4A86A0FAF9843E2C4E fr. 86400 IN DS 35095 8 2 23C6CAADC9927EE98061F2B52C9B8DA6B53F3F648F814A4A86A0FAF9843E2C4E 03646E7305696E72696102667200000100010002A3000004C133D00D dns.inria.fr. 172800 IN A 193.51.208.13 0C63656E7376726E73303030310369726402667200000100010002A30000045BCB2093 censvrns0001.ird.fr. 172800 IN A 91.203.32.147 036E73310369726402667200000100010002A3000004C1323503 ns1.ird.fr. 172800 IN A 193.50.53.3 0164036E696302667200000100010002A3000004C2000901 d.nic.fr. 172800 IN A 194.0.9.1 0164036E696302667200001C00010002A300001020010678000C00000000000000000001 d.nic.fr. 172800 IN AAAA 2001:678:c::1 016403657874036E696302667200000100010002A3000004C0050402 d.ext.nic.fr. 172800 IN A 192.5.4.2 016403657874036E696302667200001C00010002A300001020010500002E00000000000000000002 d.ext.nic.fr. 172800 IN AAAA 2001:500:2e::2 016503657874036E696302667200000100010002A3000004C1B09016 e.ext.nic.fr. 172800 IN A 193.176.144.22 016503657874036E696302667200001C00010002A30000102A000D78000001020193017601440022 e.ext.nic.fr. 172800 IN AAAA 2a00:d78:0:102:193:176:144:22 016603657874036E696302667200000100010002A3000004C2926A2E f.ext.nic.fr. 172800 IN A 194.146.106.46 016603657874036E696302667200001C00010002A30000102001067C101000110000000000000053 f.ext.nic.fr. 172800 IN AAAA 2001:67c:1010:11::53 016703657874036E696302667200000100010002A3000004C2002401 g.ext.nic.fr. 172800 IN A 194.0.36.1 016703657874036E696302667200001C00010002A300001020010678004C00000000000000000001 g.ext.nic.fr. 172800 IN AAAA 2001:678:4c::1 02636907686F7374696E67036E696302667200000100010002A3000004C0860031 ci.hosting.nic.fr. 172800 IN A 192.134.0.49 02636907686F7374696E67036E696302667200001C00010002A300001020010660300600010000000000010001 ci.hosting.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 056E732D6965036E696302667200000100010002A3000004C05D0004 ns-ie.nic.fr. 172800 IN A 192.93.0.4 056E732D6D79036E696302667200000100010002A3000004C0860031 ns-my.nic.fr. 172800 IN A 192.134.0.49 056E732D6D79036E696302667200001C00010002A300001020010660300600010000000000010001 ns-my.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 056E732D6E6C036E696302667200000100010002A3000004C05D0004 ns-nl.nic.fr. 172800 IN A 192.93.0.4 056E732D6E6C036E696302667200001C00010002A300001020010660300500010000000000010002 ns-nl.nic.fr. 172800 IN AAAA 2001:660:3005:1::1:2 056E732D7464036E696302667200000100010002A3000004C0860031 ns-td.nic.fr. 172800 IN A 192.134.0.49 056E732D7464036E696302667200001C00010002A300001020010660300600010000000000010001 ns-td.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 036E7332036E696302667200000100010002A3000004C05D0004 ns2.nic.fr. 172800 IN A 192.93.0.4 036E7332036E696302667200001C00010002A300001020010660300500010000000000010002 ns2.nic.fr. 172800 IN AAAA 2001:660:3005:1::1:2 036E7333036E696302667200000100010002A3000004C0860031 ns3.nic.fr. 172800 IN A 192.134.0.49 036E7333036E696302667200001C00010002A300001020010660300600010000000000010001 ns3.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 03626F77047261696E02667200000100010002A3000004C2330331 bow.rain.fr. 172800 IN A 194.51.3.49 02676100000200010002A30000090161026E7302676100 ga. 172800 IN NS a.ns.ga. 02676100000200010002A30000090162026E7302676100 ga. 172800 IN NS b.ns.ga. 02676100000200010002A30000090163026E7302676100 ga. 172800 IN NS c.ns.ga. 02676100000200010002A30000090164026E7302676100 ga. 172800 IN NS d.ns.ga. 02676100002F00010001518000110767616C6C657279000006200000000003 ga. 86400 IN NSEC gallery. NS RRSIG NSEC 02676100002E0001000151800093002F08010001518052F4220052EAD9708377001FD33615B469185ED7999B32AFE831DFA140C2AA89C84B84E290842ACA0BBA1F58875FC52B04A6D4A17EAD57368F89418A2920CFFED1D779678C4653848183D7FB2989D44F7DF31B62C90EC6A792136E7B4A1F9C590B7C6148481AB664EF4111D2D2E6BF385E79A2B7F38BB933F29CEC779E9BA66111F419D600C711CEC74E8E ga. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . H9M2FbRpGF7XmZsyr+gx36FAwqqJyEuE4pCEKsoLuh9Yh1/FKwSm1KF+rVc2j4lBiikgz/7R13lnjEZThIGD1/spidRPffMbYskOxqeSE257Sh+cWQt8YUhIGrZk70ER0tLmvzheeaK384u5M/Kc7Heem6ZhEfQZ1gDHEc7HTo4= ;{id = 33655} 0161026E7302676100000100010002A3000004B915A831 a.ns.ga. 172800 IN A 185.21.168.49 0161026E7302676100001C00010002A30000102A041B00000C00000000000000000001 a.ns.ga. 172800 IN AAAA 2a04:1b00:c::1 0162026E7302676100000100010002A3000004B915A931 b.ns.ga. 172800 IN A 185.21.169.49 0162026E7302676100001C00010002A30000102A041B00000D00000000000000000001 b.ns.ga. 172800 IN AAAA 2a04:1b00:d::1 0163026E7302676100000100010002A3000004B915AA31 c.ns.ga. 172800 IN A 185.21.170.49 0163026E7302676100001C00010002A30000102A041B00000E00000000000000000001 c.ns.ga. 172800 IN AAAA 2a04:1b00:e::1 0164026E7302676100000100010002A3000004B915AB31 d.ns.ga. 172800 IN A 185.21.171.49 0164026E7302676100001C00010002A30000102A041B00000F00000000000000000001 d.ns.ga. 172800 IN AAAA 2a04:1b00:f::1 0767616C6C65727900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 gallery. 172800 IN NS demand.beta.aridns.net.au. 0767616C6C65727900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 gallery. 172800 IN NS demand.alpha.aridns.net.au. 0767616C6C65727900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 gallery. 172800 IN NS demand.delta.aridns.net.au. 0767616C6C65727900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 gallery. 172800 IN NS demand.gamma.aridns.net.au. 0767616C6C65727900002B000100015180002464FC0802ED90BC1757207B806B4FED800EFA19404E990D59BC1758369CA93A4FF5BB6361 gallery. 86400 IN DS 25852 8 2 ED90BC1757207B806B4FED800EFA19404E990D59BC1758369CA93A4FF5BB6361 0767616C6C65727900002E0001000151800093002B08010001518052F4220052EAD97083770066D1CA6D2F40CEA1B65812E37D2195F449D3D50B4E0CF2B002F16D50DFEA105C2B939DDAB5ECF357128EBDA72A1EEE3EAE032BEB332F5EE3D820982CF5F23A26D0514CCE665FA5EF9C4CABAB955EBD722A235765739AFDAF5E2426AC711DDFEA355924F241A50BBCE3BBF6B955F25FA7DC5F5A646D805DEEB7AA7B7A7778C046 gallery. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZtHKbS9AzqG2WBLjfSGV9EnT1QtODPKwAvFtUN/qEFwrk53atezzVxKOvacqHu4+rgMr6zMvXuPYIJgs9fI6JtBRTM5mX6XvnEyrq5VevXIqI1dlc5r9r14kJqxxHd/qNVkk8kGlC7zju/a5VfJfp9xfWmRtgF3ut6p7end4wEY= ;{id = 33655} 0767616C6C65727900002E0001000151800093002F08010001518052F4220052EAD970837700A12C40234BA5D442B076AA4E34A7FD66E38269E64CE7CD154EC7D8CA6F9BE84504BB3D8C7D7E20AA70FA878369C5AE40C3A646D51AD4C44AF48BEFFAE69468F0E136CFCCC95E4EA073BA081FDBAE316520D75B10D0EC219AB0FD9F91EF325B7190D73DDF11A1F1AEEDD18BF0E4989A4CCEA87FCB1D490E090E8B774DEF90D5D7 gallery. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oSxAI0ul1EKwdqpONKf9ZuOCaeZM580VTsfYym+b6EUEuz2MfX4gqnD6h4Npxa5Aw6ZG1RrUxEr0i+/65pRo8OE2z8zJXk6gc7oIH9uuMWUg11sQ0OwhmrD9n5HvMltxkNc93xGh8a7t0Yvw5JiaTM6of8sdSQ4JDot3Te+Q1dc= ;{id = 33655} 0767616C6C65727900002F000100015180000C026762000006200000000013 gallery. 86400 IN NSEC gb. NS DS RRSIG NSEC 02676200000200010002A300000B026E73027575036E657400 gb. 172800 IN NS ns.uu.net. 02676200000200010002A300000C036E7330026A61036E657400 gb. 172800 IN NS ns0.ja.net. 02676200000200010002A300000C036E7334026A61036E657400 gb. 172800 IN NS ns4.ja.net. 02676200002F000100015180000C026764000006200000000003 gb. 86400 IN NSEC gd. NS RRSIG NSEC 02676200002E0001000151800093002F08010001518052F4220052EAD970837700037A3F31AA1E9ED751003AA6BBE99255F0D00A515808B3BD609AB381BA877CC243F32D914397DDCB0F346FE94E80FB86A1516D271401B92BAF513BC973D2165805048F3B6DC5F7FECF6839705F70557DB3D1C3B1CDF45EC76FF616345895F1FBAAB338B920E676CF9459EE7F4AAFC90864F1000783489B5EB84DAA13FB80C089 gb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . A3o/MaoentdRADqmu+mSVfDQClFYCLO9YJqzgbqHfMJD8y2RQ5fdyw80b+lOgPuGoVFtJxQBuSuvUTvJc9IWWAUEjzttxff+z2g5cF9wVX2z0cOxzfRex2/2FjRYlfH7qrM4uSDmds+UWe5/Sq/JCGTxAAeDSJteuE2qE/uAwIk= ;{id = 33655} 02676400000200010002A300001B026764056363746C640761757468646E730472697065036E657400 gd. 172800 IN NS gd.cctld.authdns.ripe.net. 02676400000200010002A30000170567642D6E7307616E796361737403706368036E657400 gd. 172800 IN NS gd-ns.anycast.pch.net. 02676400000200010002A30000160567642D6E730A6B737265676973747279036E657400 gd. 172800 IN NS gd-ns.ksregistry.net. 02676400002F000100015180000C026765000006200000000003 gd. 86400 IN NSEC ge. NS RRSIG NSEC 02676400002E0001000151800093002F08010001518052F4220052EAD970837700893B270688A1C307A10D02F4D95E5CC5CBA824908A6C06361D326AD551CB46F1C7CE57E821EEDD9CF2A46DF9D67EB7A15F01C6B0B4BDEF095ECCED689321B973E6348C875D1134E2FFA60C358934E4BA56EA2B10B4B5E8DCFCFFD3FE1DAA645639F5B74210557B2C0B9A1161036AEBCF5CA0DA44FCC4986B26BEB75E921F8B79 gd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iTsnBoihwwehDQL02V5cxcuoJJCKbAY2HTJq1VHLRvHHzlfoIe7dnPKkbfnWfrehXwHGsLS97wlezO1okyG5c+Y0jIddETTi/6YMNYk05LpW6isQtLXo3Pz/0/4dqmRWOfW3QhBVeywLmhFhA2rrz1yg2kT8xJhrJr63XpIfi3k= ;{id = 33655} 02676500000200010002A30000120267650A686F73746D617374657202756100 ge. 172800 IN NS ge.hostmaster.ua. 02676500000200010002A300000B026E73027575036E657400 ge. 172800 IN NS ns.uu.net. 02676500000200010002A300000B026E73036E696302676500 ge. 172800 IN NS ns.nic.ge. 02676500000200010002A300000C036E7332036E696302667200 ge. 172800 IN NS ns2.nic.fr. 02676500002F000100015180000C026766000006200000000003 ge. 86400 IN NSEC gf. NS RRSIG NSEC 02676500002E0001000151800093002F08010001518052F4220052EAD97083770010B56B8C385E3B05AE5B3F05FF23FE85113EDE6587FA7A544121F5125CA794A2545A70D2EB21AC7A0C9253A7C839198BFB29B8C9353410D773E858B62830093C9BF500F6DD4455DF3D0FE0F57B5991E577008313C69037F79872C64C9FE90EAD315667B9D5805F1EC64FD9CA8B6392D087A80A562FDD2E3FBC840A19F64BFE83 ge. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ELVrjDheOwWuWz8F/yP+hRE+3mWH+npUQSH1ElynlKJUWnDS6yGsegySU6fIORmL+ym4yTU0ENdz6Fi2KDAJPJv1APbdRFXfPQ/g9XtZkeV3AIMTxpA395hyxkyf6Q6tMVZnudWAXx7GT9nKi2OS0IeoClYv3S4/vIQKGfZL/oM= ;{id = 33655} 026E73036E696302676500000100010002A3000004D448820B ns.nic.ge. 172800 IN A 212.72.130.11 02676600000200010002A3000016066E73312D6770096D6564696173657276036E657400 gf. 172800 IN NS ns1-gp.mediaserv.net. 02676600000200010002A3000016066E73312D6D71096D6564696173657276036E657400 gf. 172800 IN NS ns1-mq.mediaserv.net. 02676600002F000100015180000C026767000006200000000003 gf. 86400 IN NSEC gg. NS RRSIG NSEC 02676600002E0001000151800093002F08010001518052F4220052EAD97083770094EBAFE281DAC0A42E8BC172CCA99C3B97DE417D5EC69F46CA72A721C17E23E521FBD4549990DD4CCF9E8033E1201D698663E66FCCC393B938BE29A37835522F88931F6D0343AC02484E8218AB7119218368E20EBB04A1A94608EA18A23E072D2B39BA1ED05AE52B6894C764A341989CA42E846145FA005694D3211A2BB1BCD8 gf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . lOuv4oHawKQui8FyzKmcO5feQX1exp9GynKnIcF+I+Uh+9RUmZDdTM+egDPhIB1phmPmb8zDk7k4vimjeDVSL4iTH20DQ6wCSE6CGKtxGSGDaOIOuwShqUYI6hiiPgctKzm6HtBa5StolMdko0GYnKQuhGFF+gBWlNMhGiuxvNg= ;{id = 33655} 02676700000200010002A300001201610A63692D73657276657273036E657400 gg. 172800 IN NS a.ci-servers.net. 02676700000200010002A300001201620A63692D73657276657273036F726700 gg. 172800 IN NS b.ci-servers.org. 02676700000200010002A300001201630A63692D73657276657273036F726700 gg. 172800 IN NS c.ci-servers.org. 02676700000200010002A300001101640A63692D73657276657273026A6500 gg. 172800 IN NS d.ci-servers.je. 02676700000200010002A300001101650A63692D7365727665727302676700 gg. 172800 IN NS e.ci-servers.gg. 02676700000200010002A300000C036E7330026A61036E657400 gg. 172800 IN NS ns0.ja.net. 02676700000200010002A3000011046E73393903646E73036E6574026E7A00 gg. 172800 IN NS ns99.dns.net.nz. 02676700002F000100015180000C026768000006200000000003 gg. 86400 IN NSEC gh. NS RRSIG NSEC 02676700002E0001000151800093002F08010001518052F4220052EAD9708377005845FA82B87BB4E06EBB70E2E8AD1F1DFDA2113B346D55B1ADA94A9B0E5A6223ECA4ED8F11CCD9873C8B6D5866E24BFBE09189DDA93DAA1A4E35FC8DCF937037E7DBF607832F44EA00A44A0AB8C1B62F4509FAC217FB0752D7CBC4D5C3763B61442B20706AF55377D3EF92227FFBC936C9345B7C631A1BA8266DB1D6ABEE435B gg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WEX6grh7tOBuu3Di6K0fHf2iETs0bVWxralKmw5aYiPspO2PEczZhzyLbVhm4kv74JGJ3ak9qhpONfyNz5NwN+fb9geDL0TqAKRKCrjBti9FCfrCF/sHUtfLxNXDdjthRCsgcGr1U3fT75Iif/vJNsk0W3xjGhuoJm2x1qvuQ1s= ;{id = 33655} 01650A63692D7365727665727302676700000100010002A3000004CC3DD84A e.ci-servers.gg. 172800 IN A 204.61.216.74 01650A63692D7365727665727302676700001C00010002A3000010200105000014607400AD000000000001 e.ci-servers.gg. 172800 IN AAAA 2001:500:14:6074:ad::1 02676800000200010002A300000C036E733103646E7302617100 gh. 172800 IN NS ns1.dns.aq. 02676800000200010002A300000D037269700370736703636F6D00 gh. 172800 IN NS rip.psg.com. 02676800000200010002A300001604666F726B0373746807646E736E6F6465036E657400 gh. 172800 IN NS fork.sth.dnsnode.net. 02676800000200010002A300001005686970706F027275026163027A6100 gh. 172800 IN NS hippo.ru.ac.za. 02676800000200010002A300000F0661757374696E02676803636F6D00 gh. 172800 IN NS austin.gh.com. 02676800000200010002A300000F066D616E74736502676803636F6D00 gh. 172800 IN NS mantse.gh.com. 02676800002F000100015180000C026769000006200000000003 gh. 86400 IN NSEC gi. NS RRSIG NSEC 02676800002E0001000151800093002F08010001518052F4220052EAD970837700BB42CE91433DBAE2DEFD64215B761902ED283694AB2240905F737080372C9685C2537C9C85A8AEB525E190DC86DD13D8BFB0BE3A51A4FDCFF318CB06AB093A6D4C6940953D71E10ECF6D47FA6554D61846FB36519EA5816F2164C1A6F8DBE1AE7F4541DCA90025589B4DC1244A294A81F61D71E84BF0812041D8B936227EB97E gh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . u0LOkUM9uuLe/WQhW3YZAu0oNpSrIkCQX3NwgDcsloXCU3ychaiutSXhkNyG3RPYv7C+OlGk/c/zGMsGqwk6bUxpQJU9ceEOz21H+mVU1hhG+zZRnqWBbyFkwab42+Guf0VB3KkAJVibTcEkSilKgfYdcehL8IEgQdi5NiJ+uX4= ;{id = 33655} 02676900000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 gi. 172800 IN NS a0.cctld.afilias-nst.info. 02676900000200010002A300001B026132056363746C640B6166696C6961732D6E737404696E666F00 gi. 172800 IN NS a2.cctld.afilias-nst.info. 02676900000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 gi. 172800 IN NS b0.cctld.afilias-nst.org. 02676900000200010002A300001A026232056363746C640B6166696C6961732D6E7374036F726700 gi. 172800 IN NS b2.cctld.afilias-nst.org. 02676900000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 gi. 172800 IN NS c0.cctld.afilias-nst.info. 02676900000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 gi. 172800 IN NS d0.cctld.afilias-nst.org. 02676900002B00010001518000189FE70701A6110BBAB0C51F4712CF1DF57F960CC73C7645F6 gi. 86400 IN DS 40935 7 1 A6110BBAB0C51F4712CF1DF57F960CC73C7645F6 02676900002B00010001518000249FE707029F19CCCE0100976D6A4ED5D0AFA3D66E88C6974722D62EE6251F9D3DFA74A23F gi. 86400 IN DS 40935 7 2 9F19CCCE0100976D6A4ED5D0AFA3D66E88C6974722D62EE6251F9D3DFA74A23F 02676900002E0001000151800093002B08010001518052F4220052EAD97083770050B768347E3D075C1067F8C50C91F4DCCBF5C21A28BCAAB6533507E8654FD5ED419662C64003C47AA83EAC7DD459A0FA3B7ED6DCC7A9F92287DCAEFDF4B01D3688FB08B86270D1E2D04FF8A2176E5320330FF4DF9E3A248E6DB66B2240F2920B1F57FFA6607134DAF1CD402EBA53A2C0C2AB0C5C3A5400E3CF23A8D9538AC458 gi. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ULdoNH49B1wQZ/jFDJH03Mv1whoovKq2UzUH6GVP1e1BlmLGQAPEeqg+rH3UWaD6O37W3Mep+SKH3K799LAdNoj7CLhicNHi0E/4ohduUyAzD/Tfnjokjm22ayJA8pILH1f/pmBxNNrxzUAuulOiwMKrDFw6VADjzyOo2VOKxFg= ;{id = 33655} 02676900002E0001000151800093002F08010001518052F4220052EAD970837700548AFB0F0C67449E0394AF31377BC389A64F8862EC530FD8CC79907430713E8BEEEB80DAD1CED92234F40BDE658E4FAD8BA4FB7EE1CC17336C6959309E6488518E8F43EB7665BB70DFB501F8F938CF1A3C13F4013207875F78AD4A6130ABC4304D9144E2D9AD93CA506D5E11260E7F6387F0C3F8F55CE2B909689941615DFF49 gi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VIr7DwxnRJ4DlK8xN3vDiaZPiGLsUw/YzHmQdDBxPovu64Da0c7ZIjT0C95ljk+ti6T7fuHMFzNsaVkwnmSIUY6PQ+t2Zbtw37UB+Pk4zxo8E/QBMgeHX3itSmEwq8QwTZFE4tmtk8pQbV4RJg5/Y4fww/j1XOK5CWiZQWFd/0k= ;{id = 33655} 02676900002F000100015180000E0467696674000006200000000013 gi. 86400 IN NSEC gift. NS DS RRSIG NSEC 046769667400000200010002A30000160161026E730B756E697265676973747279036E657400 gift. 172800 IN NS a.ns.uniregistry.net. 046769667400000200010002A300001103746C64076973632D736E7303636F6D00 gift. 172800 IN NS tld.isc-sns.com. 046769667400000200010002A300001103746C64076973632D736E73036E657400 gift. 172800 IN NS tld.isc-sns.net. 046769667400000200010002A300001203746C64076973632D736E7304696E666F00 gift. 172800 IN NS tld.isc-sns.info. 046769667400002B0001000151800018A4D2050161379C5FD2BA15B4401F9E74D1CCDF613FA469E4 gift. 86400 IN DS 42194 5 1 61379C5FD2BA15B4401F9E74D1CCDF613FA469E4 046769667400002B0001000151800024A4D20502365F45C35B61F891A7111CF3BD587EF8A0088D6EB7286E791F1016B56EA01850 gift. 86400 IN DS 42194 5 2 365F45C35B61F891A7111CF3BD587EF8A0088D6EB7286E791F1016B56EA01850 046769667400002E0001000151800093002B08010001518052F4220052EAD97083770083B6B9F790ECC6D436EA94847B1CFD0928AB7FAC38578629BAD13EC6AB83E0A9605E0E12127427084B6F2775624DD13E66062C4B000DFFEEC9D368F3D10F44D3A2E0372222389939EE04A2DE8F9936121F9561DD496EE2C82FAC749A5B0AC10E5D1E0B1FAA81EA412970D7433CF64D9813E172403836F8D3606141ED8D4DD1F5 gift. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . g7a595DsxtQ26pSEexz9CSirf6w4V4YputE+xquD4KlgXg4SEnQnCEtvJ3ViTdE+ZgYsSwAN/+7J02jz0Q9E06LgNyIiOJk57gSi3o+ZNhIflWHdSW7iyC+sdJpbCsEOXR4LH6qB6kEpcNdDPPZNmBPhckA4NvjTYGFB7Y1N0fU= ;{id = 33655} 046769667400002E0001000151800093002F08010001518052F4220052EAD97083770071E4FEACD140EE2D2E04B92413DD19B4065C52945757DE6CFA463F22FC296A9DACF1657E0F4727B2E697F88313FD44C56F972893C18FFC6CA7CEA87A1461788B84813E8430CE37B76F9058C96EB5EB14A0681832FCAC8990E51FA00D9468E5DA6BB1459CB8C5F472C2339A7415FBF6DB181E960A1AD606947D53017A400C2858 gift. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ceT+rNFA7i0uBLkkE90ZtAZcUpRXV95s+kY/Ivwpap2s8WV+D0cnsuaX+IMT/UTFb5cok8GP/Gynzqh6FGF4i4SBPoQwzje3b5BYyW616xSgaBgy/KyJkOUfoA2UaOXaa7FFnLjF9HLCM5p0Ffv22xgelgoa1gaUfVMBekAMKFg= ;{id = 33655} 046769667400002F000100015180000C02676C000006200000000013 gift. 86400 IN NSEC gl. NS DS RRSIG NSEC 02676C00000200010002A300000F0161046E75756B036E696302676C00 gl. 172800 IN NS a.nuuk.nic.gl. 02676C00000200010002A300000A0162036E696302676C00 gl. 172800 IN NS b.nic.gl. 02676C00000200010002A300000A0164036E696302676C00 gl. 172800 IN NS d.nic.gl. 02676C00000200010002A300001003676C310664796E746C64036E657400 gl. 172800 IN NS gl1.dyntld.net. 02676C00000200010002A300001003676C320664796E746C64036E657400 gl. 172800 IN NS gl2.dyntld.net. 02676C00000200010002A300001003676C330664796E746C64036E657400 gl. 172800 IN NS gl3.dyntld.net. 02676C00000200010002A300001003676C340664796E746C64036E657400 gl. 172800 IN NS gl4.dyntld.net. 02676C00002B00010001518000242D2808023D44DF84C78A82E0E9824440F3E82B402551341DBFF3BCE72CD786435D15F1AA gl. 86400 IN DS 11560 8 2 3D44DF84C78A82E0E9824440F3E82B402551341DBFF3BCE72CD786435D15F1AA 02676C00002E0001000151800093002B08010001518052F4220052EAD97083770088F10A0191DECC75ADE901143EBA3D6045BD58E92DA45364404FA88C2A6B45EBA0E250BF12DB6D5DAB38699EEB701A8C84110A2073B5F2E1999C5F15765284C278A1ECEA1BC48133312115A6331E40506755BBCE441086E360887440A3F0E66CCA52ED481B85826DD00B449B575C20E7D3080DC2FBE5002DA2717E5B13553EB0 gl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iPEKAZHezHWt6QEUPro9YEW9WOktpFNkQE+ojCprReug4lC/EtttXas4aZ7rcBqMhBEKIHO18uGZnF8VdlKEwnih7OobxIEzMSEVpjMeQFBnVbvORBCG42CIdECj8OZsylLtSBuFgm3QC0SbV1wg59MIDcL75QAtonF+WxNVPrA= ;{id = 33655} 02676C00002E0001000151800093002F08010001518052F4220052EAD9708377008C9477690A88377C0A22CA51C87DBB7A3AF38DF988E1E9357FFFA82D87C3A57859DD00E9E99E6702B33350917EF732BDF6D8AB204ADA6C5FC9A1D003AC024192862D3315A1E00784879F27B2103F9D30A109F5015019CB5EF88935E796DD8A65C89E2515312A14C45BEF8DC18C1BE2BA5A64FE5F87DA912780B33A55C3E1C9CC gl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jJR3aQqIN3wKIspRyH27ejrzjfmI4ek1f/+oLYfDpXhZ3QDp6Z5nArMzUJF+9zK99tirIErabF/JodADrAJBkoYtMxWh4AeEh58nshA/nTChCfUBUBnLXviJNeeW3YplyJ4lFTEqFMRb743BjBviulpk/l+H2pEngLM6VcPhycw= ;{id = 33655} 02676C00002F000100015180000F05676C617373000006200000000013 gl. 86400 IN NSEC glass. NS DS RRSIG NSEC 0162036E696302676C00000100010002A30000045BDDC4E4 b.nic.gl. 172800 IN A 91.221.196.228 0162036E696302676C00001C00010002A30000102001067C03C001120000000000000010 b.nic.gl. 172800 IN AAAA 2001:67c:3c0:112::10 0164036E696302676C00000100010002A3000004CC3DD831 d.nic.gl. 172800 IN A 204.61.216.49 0164036E696302676C00001C00010002A3000010200105000014604900AD000000000001 d.nic.gl. 172800 IN AAAA 2001:500:14:6049:ad::1 0161046E75756B036E696302676C00000100010002A3000004C2B1E00D a.nuuk.nic.gl. 172800 IN A 194.177.224.13 05676C61737300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 glass. 172800 IN NS demand.beta.aridns.net.au. 05676C61737300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 glass. 172800 IN NS demand.alpha.aridns.net.au. 05676C61737300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 glass. 172800 IN NS demand.delta.aridns.net.au. 05676C61737300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 glass. 172800 IN NS demand.gamma.aridns.net.au. 05676C61737300002B000100015180002435F80802B8CDEB1147512B2413992A08B6B28DDD6127E18F7E2969F7897D2F348A2C1AF7 glass. 86400 IN DS 13816 8 2 B8CDEB1147512B2413992A08B6B28DDD6127E18F7E2969F7897D2F348A2C1AF7 05676C61737300002E0001000151800093002B08010001518052F4220052EAD9708377000628744712A063B8221476FFE473E0557658BB2140E96C0CDB4A815EFBDA6868CD2769AF9120AA7B2C7C085A708C0441E675ACD789860576D8B9BEF497CADFA4D854EBA255F35D87767AD32904E25C00A857C2A764F785EBCD55104156AC40B6ED9A629504800A1D8F02DB1D1379D4F2F2E48C2A2E6DA45983D6B2447FF9485F glass. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Bih0RxKgY7giFHb/5HPgVXZYuyFA6WwM20qBXvvaaGjNJ2mvkSCqeyx8CFpwjARB5nWs14mGBXbYub70l8rfpNhU66JV812HdnrTKQTiXACoV8KnZPeF681VEEFWrEC27ZpilQSACh2PAtsdE3nU8vLkjCoubaRZg9ayRH/5SF8= ;{id = 33655} 05676C61737300002E0001000151800093002F08010001518052F4220052EAD970837700142B1FFFA086751381E2D0F009F4D3CDB6146BF15C4D3E4CD12E297098C54E09F92FA4D437576CD6FAF2F92BD8CA7F0D12286ED8668504B849877F722339A425FBD25CFB0D098D0FE65E0C046F64D6CA1FC90AA9CC51FC4C071014942A450DDF6D9EAA3FE20321DFAE31AB522CF5485BAC0666FDE73CF641BE9C4F3776E06324 glass. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FCsf/6CGdROB4tDwCfTTzbYUa/FcTT5M0S4pcJjFTgn5L6TUN1ds1vry+SvYyn8NEihu2GaFBLhJh39yIzmkJfvSXPsNCY0P5l4MBG9k1sofyQqpzFH8TAcQFJQqRQ3fbZ6qP+IDId+uMatSLPVIW6wGZv3nPPZBvpxPN3bgYyQ= ;{id = 33655} 05676C61737300002F000100015180000C02676D000006200000000013 glass. 86400 IN NSEC gm. NS DS RRSIG NSEC 02676D00000200010002A300000C036E7331036E696302676D00 gm. 172800 IN NS ns1.nic.gm. 02676D00000200010002A300000C036E7332036E696302676D00 gm. 172800 IN NS ns2.nic.gm. 02676D00000200010002A3000013056E732D676D07616672696E6963036E657400 gm. 172800 IN NS ns-gm.afrinic.net. 02676D00002F000100015180000C02676E000006200000000003 gm. 86400 IN NSEC gn. NS RRSIG NSEC 02676D00002E0001000151800093002F08010001518052F4220052EAD9708377005E44A54E76F6CE12878B80F30F59E183AC417B4571985D51AEB0BF11F41518EA95F94333807EF208516DB6E66DAE8D97AFBC63DA0AE2C722777B44418F8064204E10727972EFBAF63B18A298BAE06E281C455F9E7E7619155A606FFADB0C8848AF6BACF1673BCF3618A3F955CD6927CA96873EE5AEF49BEEAA95995D8AB3C311 gm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XkSlTnb2zhKHi4DzD1nhg6xBe0VxmF1RrrC/EfQVGOqV+UMzgH7yCFFttuZtro2Xr7xj2grixyJ3e0RBj4BkIE4Qcnly77r2OxiimLrgbigcRV+efnYZFVpgb/rbDIhIr2us8Wc7zzYYo/lVzWknypaHPuWu9JvuqpWZXYqzwxE= ;{id = 33655} 036E7331036E696302676D00000100010002A3000004C23FFAD9 ns1.nic.gm. 172800 IN A 194.63.250.217 036E7332036E696302676D00000100010002A3000004C5FFC266 ns2.nic.gm. 172800 IN A 197.255.194.102 02676E00000200010002A300000C036E733103646E7302617100 gn. 172800 IN NS ns1.dns.aq. 02676E00000200010002A300000D037269700370736703636F6D00 gn. 172800 IN NS rip.psg.com. 02676E00000200010002A300001604666F726B0373746807646E736E6F6465036E657400 gn. 172800 IN NS fork.sth.dnsnode.net. 02676E00000200010002A300001005686970706F027275026163027A6100 gn. 172800 IN NS hippo.ru.ac.za. 02676E00002B00010001518000247A72080265E9984147AAF1940DF87B8DBB38190736999249DE0F39B88419147FA4AFD01A gn. 86400 IN DS 31346 8 2 65E9984147AAF1940DF87B8DBB38190736999249DE0F39B88419147FA4AFD01A 02676E00002E0001000151800093002B08010001518052F4220052EAD9708377003A15F2CB67220AEF0D8F21493C12567FC28EE3F1AB052DF9C14AF6568412F01B93089301413CA9D022663024D59F51F71A07BA5A609262A985099903F435768923120C71DA4B79786EAE0574FD3738EF05B4B8A3EC1C5E73D20D7BAEEB282D941A1D24AD7F9482CA7BBF614CF3D7B3D835018EF86EF5B17A583A2D8E45D8F876 gn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OhXyy2ciCu8NjyFJPBJWf8KO4/GrBS35wUr2VoQS8BuTCJMBQTyp0CJmMCTVn1H3Gge6WmCSYqmFCZkD9DV2iSMSDHHaS3l4bq4FdP03OO8FtLij7Bxec9INe67rKC2UGh0krX+Ugsp7v2FM89ez2DUBjvhu9bF6WDotjkXY+HY= ;{id = 33655} 02676E00002E0001000151800093002F08010001518052F4220052EAD970837700595A5AEBE29350ED89BA09016CE233FF53CC5E9550A978EDF92A8AB4143ED01C4D166B66BDE0FDEC9ABAD6E9F43C2C5D7863FFAF4CF39AE6772B46247ADEAF62510FA90BF6AF5DEE22FBDBFF57CF4844B391A4C3A2289FEE668087A6F00AF9E7ED7F05AB2D330899E0F41DD923BC26800873518CD8031D9763E5020161A5A486 gn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WVpa6+KTUO2JugkBbOIz/1PMXpVQqXjt+SqKtBQ+0BxNFmtmveD97Jq61un0PCxdeGP/r0zzmuZ3K0Yket6vYlEPqQv2r13uIvvb/1fPSESzkaTDoiif7maAh6bwCvnn7X8Fqy0zCJng9B3ZI7wmgAhzUYzYAx2XY+UCAWGlpIY= ;{id = 33655} 02676E00002F000100015180000D03676F76000006200000000013 gn. 86400 IN NSEC gov. NS DS RRSIG NSEC 03676F7600000200010002A300001301610B676F762D73657276657273036E657400 gov. 172800 IN NS a.gov-servers.net. 03676F7600000200010002A300001301620B676F762D73657276657273036E657400 gov. 172800 IN NS b.gov-servers.net. 03676F7600002B00010001518000181E1208016F109B46A80CEA9613DC86D5A3E065520505AAFE gov. 86400 IN DS 7698 8 1 6F109B46A80CEA9613DC86D5A3E065520505AAFE 03676F7600002B00010001518000241E1208026BC949E638442EAD0BDAF0935763C8D003760384FF15EBBD5CE86BB5559561F0 gov. 86400 IN DS 7698 8 2 6BC949E638442EAD0BDAF0935763C8D003760384FF15EBBD5CE86BB5559561F0 03676F7600002E0001000151800093002B08010001518052F4220052EAD9708377002529C45AD94789E5475C3F9D19F78B1D65A17FEE81566FB5C428F0ED19B35B18737DD3C0E731D6303BD453490F470C6041B74BB6122527B6E3EEB469A84B4FB81BD74555983A3C613C6065BD628394AD16CC91C50677EE5438C1F1399D67B1762A66D34D7D2E8E41DD5094B0ED470AAE91916EEE939C2E7D991ED8C5688BD182 gov. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . JSnEWtlHieVHXD+dGfeLHWWhf+6BVm+1xCjw7RmzWxhzfdPA5zHWMDvUU0kPRwxgQbdLthIlJ7bj7rRpqEtPuBvXRVWYOjxhPGBlvWKDlK0WzJHFBnfuVDjB8TmdZ7F2KmbTTX0ujkHdUJSw7UcKrpGRbu6TnC59mR7YxWiL0YI= ;{id = 33655} 03676F7600002E0001000151800093002F08010001518052F4220052EAD9708377001F0CA9852B50159F9594AD77E90FC6068B024564AF5B5240AD089CD62D1BB0A377CA12473B99229664F8224559819EF567367699A6478425DE5B2DEB06E6111A6975E8262B15B5C5497ACCBF1254C6D137AC2E71BF0F06B9D696A0B7074E097375917A9B80A7786446C8EDCF81DFC5EEFB5E137FCDA97D5A5E1BF25AB09980E4 gov. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HwyphStQFZ+VlK136Q/GBosCRWSvW1JArQic1i0bsKN3yhJHO5kilmT4IkVZgZ71ZzZ2maZHhCXeWy3rBuYRGml16CYrFbXFSXrMvxJUxtE3rC5xvw8GudaWoLcHTglzdZF6m4CneGRGyO3Pgd/F7vteE3/NqX1aXhvyWrCZgOQ= ;{id = 33655} 03676F7600002F000100015180000C026770000006200000000013 gov. 86400 IN NSEC gp. NS DS RRSIG NSEC 02677000000200010002A300001B026770056363746C640761757468646E730472697065036E657400 gp. 172800 IN NS gp.cctld.authdns.ripe.net. 02677000000200010002A300000C036E7331036E696302677000 gp. 172800 IN NS ns1.nic.gp. 02677000000200010002A3000017036E73310D6F72616E67656361726169626503636F6D00 gp. 172800 IN NS ns1.orangecaraibe.com. 02677000002F000100015180000C026771000006200000000003 gp. 86400 IN NSEC gq. NS RRSIG NSEC 02677000002E0001000151800093002F08010001518052F4220052EAD9708377007951EAD2EA6A71F03301101074F5F565C727B3C1EC3A5A38364079C875B287DE7716528953D61E3122A24881CA86914C956446BB6C02378BE3C43FD37D939E00C91CD5FEBC3043F924507B095F4AE8B311AC35DE00A2155801C3D75B55046FC09A60CED312493EA38C416C7A812B8E9C9F9E955A219A9410958F2F26A5BB9746 gp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eVHq0upqcfAzARAQdPX1Zccns8HsOlo4NkB5yHWyh953FlKJU9YeMSKiSIHKhpFMlWRGu2wCN4vjxD/TfZOeAMkc1f68MEP5JFB7CV9K6LMRrDXeAKIVWAHD11tVBG/AmmDO0xJJPqOMQWx6gSuOnJ+elVohmpQQlY8vJqW7l0Y= ;{id = 33655} 036E7331036E696302677000000100010002A3000004C1DA7202 ns1.nic.gp. 172800 IN A 193.218.114.2 02677100000200010002A3000025016102677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400 gq. 172800 IN NS a.gq.globalanycastcloud.freenom.net. 02677100000200010002A3000025016202677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400 gq. 172800 IN NS b.gq.globalanycastcloud.freenom.net. 02677100000200010002A3000025016302677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400 gq. 172800 IN NS c.gq.globalanycastcloud.freenom.net. 02677100000200010002A3000025016402677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400 gq. 172800 IN NS d.gq.globalanycastcloud.freenom.net. 02677100000200010002A300000C026E73047563616402736E00 gq. 172800 IN NS ns.ucad.sn. 02677100000200010002A300000F03626F7706696E746E657402677100 gq. 172800 IN NS bow.intnet.gq. 02677100000200010002A300000F03646E7306696E746E657402677100 gq. 172800 IN NS dns.intnet.gq. 02677100000200010002A30000140670686C6F656D07756F7265676F6E0365647500 gq. 172800 IN NS phloem.uoregon.edu. 02677100002F000100015180000C026772000006200000000003 gq. 86400 IN NSEC gr. NS RRSIG NSEC 02677100002E0001000151800093002F08010001518052F4220052EAD970837700AE719DDBD1994F111F221A0877A6E1B922368A2D610FB866A8DBE6B14243A9794169E2BE17609CA65A00B110BFD19B3C1F162DA43B775B4378D88203F1EA8185DFF27A0D0877EAA09A21C24FBE1E8D98EF50E7E2613D1B10223F8387FF7BAB499658ACD38B66F3E362170632BF6C7843D861E1CEA1C08BA2BF20A4FF03B7515A gq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rnGd29GZTxEfIhoId6bhuSI2ii1hD7hmqNvmsUJDqXlBaeK+F2CcploAsRC/0Zs8HxYtpDt3W0N42IID8eqBhd/yeg0Id+qgmiHCT74ejZjvUOfiYT0bECI/g4f/e6tJllis04tm8+NiFwYyv2x4Q9hh4c6hwIuivyCk/wO3UVo= ;{id = 33655} 03626F7706696E746E657402677100000100010002A3000004C1FB994E bow.intnet.gq. 172800 IN A 193.251.153.78 03646E7306696E746E657402677100000100010002A3000004C1FB9943 dns.intnet.gq. 172800 IN A 193.251.153.67 02677200000200010002A30000130467722D6D0369637305666F72746802677200 gr. 172800 IN NS gr-m.ics.forth.gr. 02677200000200010002A30000140565737469610369637305666F72746802677200 gr. 172800 IN NS estia.ics.forth.gr. 02677200000200010002A30000140567722D61740369637305666F72746802677200 gr. 172800 IN NS gr-at.ics.forth.gr. 02677200000200010002A30000140567722D62720369637305666F72746802677200 gr. 172800 IN NS gr-br.ics.forth.gr. 02677200000200010002A30000140567722D69780369637305666F72746802677200 gr. 172800 IN NS gr-ix.ics.forth.gr. 02677200000200010002A30000140567722D75730369637305666F72746802677200 gr. 172800 IN NS gr-us.ics.forth.gr. 02677200000200010002A3000014056772646E730369637305666F72746802677200 gr. 172800 IN NS grdns.ics.forth.gr. 02677200000200010002A3000013086772646E732D64650564656E696302646500 gr. 172800 IN NS grdns-de.denic.de. 02677200002B0001000151800024E0AF070289AD46EAD256DA5010F004AEAE31E41FBA15FD91F5F0F85B2FD820C27EEB5CF3 gr. 86400 IN DS 57519 7 2 89AD46EAD256DA5010F004AEAE31E41FBA15FD91F5F0F85B2FD820C27EEB5CF3 02677200002E0001000151800093002B08010001518052F4220052EAD970837700729D2EE1594CA9D1305D7DE5A299ECB8C8441686BE6B9536EE6D39810FEC64A9AB202832BB85D241E9D7595A98383338A11C68F839870FEB782B6560AE804AE0F92B090862F8F57BBDFAEAF077CC30096C384C87E6D84CA64CEFDAECA0E13AC2A23F67C6955BF34750FCA5C7AD97FE5286868E52759C521C698981BD667FB877 gr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cp0u4VlMqdEwXX3lopnsuMhEFoa+a5U27m05gQ/sZKmrICgyu4XSQenXWVqYODM4oRxo+DmHD+t4K2VgroBK4PkrCQhi+PV7vfrq8HfMMAlsOEyH5thMpkzv2uyg4TrCoj9nxpVb80dQ/KXHrZf+UoaGjlJ1nFIcaYmBvWZ/uHc= ;{id = 33655} 02677200002E0001000151800093002F08010001518052F4220052EAD970837700978DD2893BC40F87D7A03AA6FC845A9C7EC69D95DB9A3F5F46D3235B808D33FD43EE4DDA72D8C2CF01757A29DF8B2F6C5EC703D5224AE1BFDAB035E49D956E915C6FBEB1C66896A467FA268D3ADBFD5D630338FD9ABE61263F1FE730ACF4D4A26BE693E35256E493F5BF2E0783181B40569BDDC6F632A65D0F751A0A91669958 gr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . l43SiTvED4fXoDqm/IRanH7GnZXbmj9fRtMjW4CNM/1D7k3actjCzwF1einfiy9sXscD1SJK4b/asDXknZVukVxvvrHGaJakZ/omjTrb/V1jAzj9mr5hJj8f5zCs9NSia+aT41JW5JP1vy4HgxgbQFab3cb2MqZdD3UaCpFmmVg= ;{id = 33655} 02677200002F0001000151800012086772617068696373000006200000000013 gr. 86400 IN NSEC graphics. NS DS RRSIG NSEC 0565737469610369637305666F72746802677200000100010002A30000048B5BBF03 estia.ics.forth.gr. 172800 IN A 139.91.191.3 0565737469610369637305666F72746802677200001C00010002A3000010200106482C3000000000000001910003 estia.ics.forth.gr. 172800 IN AAAA 2001:648:2c30::191:3 0567722D61740369637305666F72746802677200000100010002A30000044E6891E3 gr-at.ics.forth.gr. 172800 IN A 78.104.145.227 0567722D62720369637305666F72746802677200000100010002A3000004C8A007A3 gr-br.ics.forth.gr. 172800 IN A 200.160.7.163 0567722D69780369637305666F72746802677200000100010002A3000004B07E2684 gr-ix.ics.forth.gr. 172800 IN A 176.126.38.132 0567722D69780369637305666F72746802677200001C00010002A3000010200107F8006E00010000000000000132 gr-ix.ics.forth.gr. 172800 IN AAAA 2001:7f8:6e:1::132 0467722D6D0369637305666F72746802677200000100010002A3000004C200040A gr-m.ics.forth.gr. 172800 IN A 194.0.4.10 0467722D6D0369637305666F72746802677200001C00010002A300001020010678000700000000000000040010 gr-m.ics.forth.gr. 172800 IN AAAA 2001:678:7::4:10 0567722D75730369637305666F72746802677200000100010002A3000004C7041CDB gr-us.ics.forth.gr. 172800 IN A 199.4.28.219 0567722D75730369637305666F72746802677200001C00010002A30000102620000022B0000402219BFFFE97DC44 gr-us.ics.forth.gr. 172800 IN AAAA 2620:0:22b0:4:221:9bff:fe97:dc44 056772646E730369637305666F72746802677200000100010002A30000048B5B0101 grdns.ics.forth.gr. 172800 IN A 139.91.1.1 08677261706869637300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 graphics. 172800 IN NS demand.beta.aridns.net.au. 08677261706869637300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 graphics. 172800 IN NS demand.alpha.aridns.net.au. 08677261706869637300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 graphics. 172800 IN NS demand.delta.aridns.net.au. 08677261706869637300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 graphics. 172800 IN NS demand.gamma.aridns.net.au. 08677261706869637300002B0001000151800024D1530802DD8B16BDEDCFBAB5244EB0C0FDC415D52D039D9B225ABCAF4D35B4BACC241033 graphics. 86400 IN DS 53587 8 2 DD8B16BDEDCFBAB5244EB0C0FDC415D52D039D9B225ABCAF4D35B4BACC241033 08677261706869637300002E0001000151800093002B08010001518052F4220052EAD970837700B0C8711BEF8D8B069C946D281153598DD562BE8A5CFD6B19942A7C788D539634E64B2A633B1B18F4BADE35FAD274A4B9C73E421D954697EA558D2007225E8B6BC41A9806C9CE3D3E59CB4D681B6071944AE7036D0E5540BECC20D8FFD8F68DCA4334D5101FD970F3BD43CC45367B5789AAE0F1CF49A3620A329845CBB3B233C4 graphics. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . sMhxG++NiwaclG0oEVNZjdVivopc/WsZlCp8eI1TljTmSypjOxsY9LreNfrSdKS5xz5CHZVGl+pVjSAHIl6La8QamAbJzj0+WctNaBtgcZRK5wNtDlVAvswg2P/Y9o3KQzTVEB/ZcPO9Q8xFNntXiarg8c9Jo2IKMphFy7OyM8Q= ;{id = 33655} 08677261706869637300002E0001000151800093002F08010001518052F4220052EAD970837700309BCDFEFBE0FAD4B3789EA4C5D4A9E07211194568B79D20A7C2A62DCF33B07502BE131C28E7DB9210C486990B5F0EC6CCB6142173BCE71E88DABB3A3AAAA238BF783EC59EC74C18272D4D5F38CAB8702A763359110E3B336308CADA2E9A66D96041902A691A1758EB7B288ADD615C3DC46B0012D7BBC641B4702D0D6A44FBF9 graphics. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MJvN/vvg+tSzeJ6kxdSp4HIRGUVot50gp8KmLc8zsHUCvhMcKOfbkhDEhpkLXw7GzLYUIXO85x6I2rs6OqqiOL94PsWex0wYJy1NXzjKuHAqdjNZEQ47M2MIytoummbZYEGQKmkaF1jreyiK3WFcPcRrABLXu8ZBtHAtDWpE+/k= ;{id = 33655} 08677261706869637300002F000100015180000C026773000006200000000013 graphics. 86400 IN NSEC gs. NS DS RRSIG NSEC 02677300000200010002A300001B026773056363746C640761757468646E730472697065036E657400 gs. 172800 IN NS gs.cctld.authdns.ripe.net. 02677300000200010002A3000013026E7307616E7963617374036E696302677300 gs. 172800 IN NS ns.anycast.nic.gs. 02677300000200010002A3000010036773310664796E746C64036E657400 gs. 172800 IN NS gs1.dyntld.net. 02677300000200010002A3000010036773330664796E746C64036E657400 gs. 172800 IN NS gs3.dyntld.net. 02677300002B00010001518000245DB608022CBC82DA27FDB16662BF359F59DF1B63FA0AB720BFC2120F17BA369A3249FC5E gs. 86400 IN DS 23990 8 2 2CBC82DA27FDB16662BF359F59DF1B63FA0AB720BFC2120F17BA369A3249FC5E 02677300002E0001000151800093002B08010001518052F4220052EAD97083770099D9F3183F81F6E8E03E0B3CBC16E764E30D4C4B447111171AAA3691CA2A9DF120855A438F5538D5C3B866CD5B325F755FD5560A49019B7C048419ECEC16471E43137EFF595A9020838CEE0BD23CCC4C8CEBC9A4AA8B0F12C25C976A39E88D7F9A4DA781BD3795D169B3F6D589F7322D5319BF896624F04C7FE210AFF47B1E9C gs. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . mdnzGD+B9ujgPgs8vBbnZOMNTEtEcREXGqo2kcoqnfEghVpDj1U41cO4Zs1bMl91X9VWCkkBm3wEhBns7BZHHkMTfv9ZWpAgg4zuC9I8zEyM68mkqosPEsJcl2o56I1/mk2ngb03ldFps/bVifcyLVMZv4lmJPBMf+IQr/R7Hpw= ;{id = 33655} 02677300002E0001000151800093002F08010001518052F4220052EAD97083770075AFC83500279BFC98BF379E67D65656C906592C2F7BA918CA462EBF7C0CE6C14688393B5319DB0E16CAADE820D4C8AD74DC054BD73E8DCECF2D9EDE04070A80798B08BAFD0C8C6224E5C4C75EC697D05FFB335521EC1E46FCD589646D8A09F313FA414FAB9F4184E4F7A446A2AC3041118813D24623157A67D140235A6B6B79 gs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . da/INQAnm/yYvzeeZ9ZWVskGWSwve6kYykYuv3wM5sFGiDk7UxnbDhbKregg1MitdNwFS9c+jc7PLZ7eBAcKgHmLCLr9DIxiJOXEx17Gl9Bf+zNVIeweRvzViWRtignzE/pBT6ufQYTk96RGoqwwQRGIE9JGIxV6Z9FAI1pra3k= ;{id = 33655} 02677300002F000100015180000C026774000006200000000013 gs. 86400 IN NSEC gt. NS DS RRSIG NSEC 026E7307616E7963617374036E696302677300000100010002A3000004CC3DD815 ns.anycast.nic.gs. 172800 IN A 204.61.216.21 026E7307616E7963617374036E696302677300001C00010002A3000010200105000014602100AD000000000001 ns.anycast.nic.gs. 172800 IN AAAA 2001:500:14:6021:ad::1 02677400000200010002A300000B026E7303646E7302627200 gt. 172800 IN NS ns.dns.br. 02677400000200010002A300000F026E73037576670365647502677400 gt. 172800 IN NS ns.uvg.edu.gt. 02677400000200010002A300000C036E7333036E6963026D7800 gt. 172800 IN NS ns3.nic.mx. 02677400000200010002A300000E046F73693203677561036E657400 gt. 172800 IN NS osi2.gua.net. 02677400000200010002A300001006736E732D706203697363036F726700 gt. 172800 IN NS sns-pb.isc.org. 02677400002F000100015180000C026775000006200000000003 gt. 86400 IN NSEC gu. NS RRSIG NSEC 02677400002E0001000151800093002F08010001518052F4220052EAD970837700AB48B0A334B3C3C9D38DB23CCEEE7DFD0AFBC01366AB2866077A8C160236E5824376ED5FFE662A904D20034EF0D13266A9CA651C9019F5F1E4F5C882FD08AD906C04845861449A1657413051ED97AC2156ADD6A174F7D8B88155DCA02B83C3244C9F703D5BE19823305ECCF00D1E2B1135DC4CB1EE26250ECC1AF3CF1E780581 gt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . q0iwozSzw8nTjbI8zu59/Qr7wBNmqyhmB3qMFgI25YJDdu1f/mYqkE0gA07w0TJmqcplHJAZ9fHk9ciC/QitkGwEhFhhRJoWV0EwUe2XrCFWrdahdPfYuIFV3KArg8MkTJ9wPVvhmCMwXszwDR4rETXcTLHuJiUOzBrzzx54BYE= ;{id = 33655} 026E73037576670365647502677400000100010002A3000004A8EA4402 ns.uvg.edu.gt. 172800 IN A 168.234.68.2 026E73037576670365647502677400000100010002A3000004C8094A02 ns.uvg.edu.gt. 172800 IN A 200.9.74.2 02677500000200010002A300001B026775056363746C640761757468646E730472697065036E657400 gu. 172800 IN NS gu.cctld.authdns.ripe.net. 02677500000200010002A3000007026E7302677500 gu. 172800 IN NS ns.gu. 02677500000200010002A300000B026E730365647502677500 gu. 172800 IN NS ns.edu.gu. 02677500000200010002A300000E056E73756F670365647502677500 gu. 172800 IN NS nsuog.edu.gu. 02677500002F00010001518000110767756974617273000006200000000003 gu. 86400 IN NSEC guitars. NS RRSIG NSEC 02677500002E0001000151800093002F08010001518052F4220052EAD9708377005E439E626DB5BF447A1892652D507634AA84383669BEBD502972E12465C0FB12ADEA871F517BE7D794FF7F82492BAF743046338E2FD9CC7C5B5232EF0D0D9AD583073014F7E962B0CE86D2F952D59EEFAB3355C53BBE574EF593B8FC5A4034E657C43D57F483E5166C5C37508FD4418C597EE8604886D18D656E95AE2E75FAE5 gu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XkOeYm21v0R6GJJlLVB2NKqEODZpvr1QKXLhJGXA+xKt6ocfUXvn15T/f4JJK690MEYzji/ZzHxbUjLvDQ2a1YMHMBT36WKwzobS+VLVnu+rM1XFO75XTvWTuPxaQDTmV8Q9V/SD5RZsXDdQj9RBjFl+6GBIhtGNZW6Vri51+uU= ;{id = 33655} 026E730365647502677500000100010002A3000004A87B0232 ns.edu.gu. 172800 IN A 168.123.2.50 056E73756F670365647502677500000100010002A30000044362A485 nsuog.edu.gu. 172800 IN A 67.98.164.133 026E7302677500000100010002A3000004A87B040A ns.gu. 172800 IN A 168.123.4.10 076775697461727300000200010002A30000160161026E730B756E697265676973747279036E657400 guitars. 172800 IN NS a.ns.uniregistry.net. 076775697461727300000200010002A300001103746C64076973632D736E7303636F6D00 guitars. 172800 IN NS tld.isc-sns.com. 076775697461727300000200010002A300001103746C64076973632D736E73036E657400 guitars. 172800 IN NS tld.isc-sns.net. 076775697461727300000200010002A300001203746C64076973632D736E7304696E666F00 guitars. 172800 IN NS tld.isc-sns.info. 076775697461727300002B0001000151800018F58105017AFB61D09960E51EF0B0337834B17BA533E26D3F guitars. 86400 IN DS 62849 5 1 7AFB61D09960E51EF0B0337834B17BA533E26D3F 076775697461727300002B0001000151800024F581050284B9ECF472CD56FF8EFDE4FBFEB45C2933369870062A0453E2D7F3A2286F9A5E guitars. 86400 IN DS 62849 5 2 84B9ECF472CD56FF8EFDE4FBFEB45C2933369870062A0453E2D7F3A2286F9A5E 076775697461727300002E0001000151800093002B08010001518052F4220052EAD970837700230FFF3A999DE97233397E12A9F282A81EFAB97425927E1233F0F9B6787EAECFD32D9A4453316A3D8EF37EF84FFE6FF1B0D0806541A95994498A220D83B2F0FA40ACC2A26854E971CDB0C7C81F4199E22EC3CB3E870FCD33801A539EA9A9C9DD815CDBF929AEE6AE8639BF0A504FE97839508027619994B362FC85781FD32E3F guitars. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Iw//Opmd6XIzOX4SqfKCqB76uXQlkn4SM/D5tnh+rs/TLZpEUzFqPY7zfvhP/m/xsNCAZUGpWZRJiiINg7Lw+kCswqJoVOlxzbDHyB9BmeIuw8s+hw/NM4AaU56pqcndgVzb+Smu5q6GOb8KUE/peDlQgCdhmZSzYvyFeB/TLj8= ;{id = 33655} 076775697461727300002E0001000151800093002F08010001518052F4220052EAD9708377004BA081796FAF56383C529F790A702F56E8DF5E769C57264D62790D8D829744CBC622129EFD0161353252C0A47A3825FD07645BE20895CE55ADA6F84D7A7FC022606BDBA9C17010884639F725E552920A2167CFA2A248A583D6BEE92926A28F9CABE9FF5AB2FC354B60BF945FAF4FF4703D3B7EC90745C2DC260ED6AC1748473D guitars. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S6CBeW+vVjg8Up95CnAvVujfXnacVyZNYnkNjYKXRMvGIhKe/QFhNTJSwKR6OCX9B2Rb4giVzlWtpvhNen/AImBr26nBcBCIRjn3JeVSkgohZ8+iokilg9a+6Skmoo+cq+n/WrL8NUtgv5Rfr0/0cD07fskHRcLcJg7WrBdIRz0= ;{id = 33655} 076775697461727300002F000100015180000E0467757275000006200000000013 guitars. 86400 IN NSEC guru. NS DS RRSIG NSEC 046775727500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 guru. 172800 IN NS demand.beta.aridns.net.au. 046775727500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 guru. 172800 IN NS demand.alpha.aridns.net.au. 046775727500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 guru. 172800 IN NS demand.delta.aridns.net.au. 046775727500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 guru. 172800 IN NS demand.gamma.aridns.net.au. 046775727500002B0001000151800024EFDA0802A5A658ABCC39ED42CDA94B7279375D690AFFB28B99A1F326CD20F417B15AAE58 guru. 86400 IN DS 61402 8 2 A5A658ABCC39ED42CDA94B7279375D690AFFB28B99A1F326CD20F417B15AAE58 046775727500002E0001000151800093002B08010001518052F4220052EAD97083770038E0893983F9496248B3A851460A8C1B44015F260A7E3C52B852DFFC9EC54966DADB0DC34F788F5CF2E03BE3AD802926B80BC804F769163CCC46CA7DAD1D4717E5838A875C5D55E3A84410ACC07062D52F16260E7F235A2040E509E2743DCFD8D7AD5402E6ACB8EC6DB0A874CC9DA155EC2E076EBCB29E6304547B1985CDEFA8 guru. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OOCJOYP5SWJIs6hRRgqMG0QBXyYKfjxSuFLf/J7FSWba2w3DT3iPXPLgO+OtgCkmuAvIBPdpFjzMRsp9rR1HF+WDiodcXVXjqEQQrMBwYtUvFiYOfyNaIEDlCeJ0Pc/Y161UAuasuOxtsKh0zJ2hVewuB268sp5jBFR7GYXN76g= ;{id = 33655} 046775727500002E0001000151800093002F08010001518052F4220052EAD9708377008A4A275D5FC588DEEFF3E222234C4FA7631F596B47654DEAC453F747CC50F74E9B9BC5ED85C98160E46640E7700F157BC500C001DC187ADB94AF6EAE61A1704CFDF0F774AEC5B73531B0EB53C7293204F005E180CC15A4DB6A80C9AB29A411602446EEF32DB06736BCA850C6797FA983BAC6E3D1DEBC5E339EB450F7F4216B62 guru. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ikonXV/FiN7v8+IiI0xPp2MfWWtHZU3qxFP3R8xQ906bm8XthcmBYORmQOdwDxV7xQDAAdwYetuUr26uYaFwTP3w93Suxbc1MbDrU8cpMgTwBeGAzBWk22qAyasppBFgJEbu8y2wZza8qFDGeX+pg7rG49HevF4znrRQ9/Qha2I= ;{id = 33655} 046775727500002F000100015180000C026777000006200000000013 guru. 86400 IN NSEC gw. NS DS RRSIG NSEC 02677700000200010002A300000C036E7331036E696302677700 gw. 172800 IN NS ns1.nic.gw. 02677700000200010002A300000C036E7333036E696302677700 gw. 172800 IN NS ns3.nic.gw. 02677700002F000100015180000C026779000006200000000003 gw. 86400 IN NSEC gy. NS RRSIG NSEC 02677700002E0001000151800093002F08010001518052F4220052EAD970837700750639C0D37DE94E6642C985F41E7DA168BA12FE440B4EB98C048F950448D184A29675ABF77B7641EBA23BBDCAE7EB47F0213386A240A926D3F0B0178997889C0CDD13ACC6FFDAAFE13DE5596ED3A117A589DAE3767667C4DC0A698533A3927E55D9CDEC852071CDEBBEB3794FBB3BFDFF30472075B93C4169C053F2B76DD121 gw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dQY5wNN96U5mQsmF9B59oWi6Ev5EC065jASPlQRI0YSilnWr93t2QeuiO73K5+tH8CEzhqJAqSbT8LAXiZeInAzdE6zG/9qv4T3lWW7ToRelidrjdnZnxNwKaYUzo5J+VdnN7IUgcc3rvrN5T7s7/f8wRyB1uTxBacBT8rdt0SE= ;{id = 33655} 036E7331036E696302677700000100010002A3000004515BAA0A ns1.nic.gw. 172800 IN A 81.91.170.10 036E7333036E696302677700000100010002A3000004C1ABFF23 ns3.nic.gw. 172800 IN A 193.171.255.35 02677900000200010002A300001B026779056363746C640761757468646E730472697065036E657400 gy. 172800 IN NS gy.cctld.authdns.ripe.net. 02677900000200010002A300000F036E73310367747402636F02677900 gy. 172800 IN NS ns1.gtt.co.gy. 02677900000200010002A300000F036E73320367747402636F02677900 gy. 172800 IN NS ns2.gtt.co.gy. 02677900000200010002A30000170567792D6E7307616E796361737403706368036E657400 gy. 172800 IN NS gy-ns.anycast.pch.net. 02677900000200010002A30000140670686C6F656D07756F7265676F6E0365647500 gy. 172800 IN NS phloem.uoregon.edu. 02677900000200010002A300001006736E732D706203697363036F726700 gy. 172800 IN NS sns-pb.isc.org. 02677900002F000100015180000C02686B000006200000000003 gy. 86400 IN NSEC hk. NS RRSIG NSEC 02677900002E0001000151800093002F08010001518052F4220052EAD970837700A1EB72080540E06CF165B27D885CD32AFF7479C3C3C20C602034A74EE5B7F17CEC1753DBCA70AF5A18A8DD02F50F695C1AD87475C69859C80D7660F66F01A6B2B029A558A6093729EEBF864CC17F8A162DF7E5562FFB254BB2D419F63765A60BE7F2021DB904A018EE8153E0FAE26751F8810939FA722F13DA0A94D460222528 gy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oetyCAVA4GzxZbJ9iFzTKv90ecPDwgxgIDSnTuW38XzsF1PbynCvWhio3QL1D2lcGth0dcaYWcgNdmD2bwGmsrAppVimCTcp7r+GTMF/ihYt9+VWL/slS7LUGfY3ZaYL5/ICHbkEoBjugVPg+uJnUfiBCTn6ci8T2gqU1GAiJSg= ;{id = 33655} 036E73310367747402636F02677900000100010002A3000004BE500029 ns1.gtt.co.gy. 172800 IN A 190.80.0.41 036E73320367747402636F02677900000100010002A3000004BE50002A ns2.gtt.co.gy. 172800 IN A 190.80.0.42 02686B00002F000100015180000C02686D000006200000000003 hk. 86400 IN NSEC hm. NS RRSIG NSEC 02686B00002E0001000151800093002F08010001518052F4220052EAD9708377002C34FBC340127A50D7210599381D77F3DBAA60C0D0B7052CB6AFF5250A15BB9CC3962B2C99DDFD23E6F4ED67B8D65A037A2C6C87FBE18F18291F583D724EC0C956646A1CB4A46BC8CD8DC5EEA333B73C287BDF3BB39AC54DB47911EBEF8190B096B43797117B871BDC47D38AA892732C7888D470BA6C7884F39F85A8F8208D87 hk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LDT7w0ASelDXIQWZOB1389uqYMDQtwUstq/1JQoVu5zDlissmd39I+b07We41loDeixsh/vhjxgpH1g9ck7AyVZkahy0pGvIzY3F7qMztzwoe987s5rFTbR5EevvgZCwlrQ3lxF7hxvcR9OKqJJzLHiI1HC6bHiE85+FqPggjYc= ;{id = 33655} 02686B00000200010002A3000010016105686B697263036E657402686B00 hk. 172800 IN NS a.hkirc.net.hk. 02686B00000200010002A3000010016205686B697263036E657402686B00 hk. 172800 IN NS b.hkirc.net.hk. 02686B00000200010002A3000010017305686B697263036E657402686B00 hk. 172800 IN NS s.hkirc.net.hk. 02686B00000200010002A3000010017405686B697263036E657402686B00 hk. 172800 IN NS t.hkirc.net.hk. 02686B00000200010002A3000010017505686B697263036E657402686B00 hk. 172800 IN NS u.hkirc.net.hk. 02686B00000200010002A3000010017605686B697263036E657402686B00 hk. 172800 IN NS v.hkirc.net.hk. 02686B00000200010002A3000010017705686B697263036E657402686B00 hk. 172800 IN NS w.hkirc.net.hk. 02686B00000200010002A3000010017805686B697263036E657402686B00 hk. 172800 IN NS x.hkirc.net.hk. 02686B00000200010002A3000010017905686B697263036E657402686B00 hk. 172800 IN NS y.hkirc.net.hk. 02686B00000200010002A3000010017A05686B697263036E657402686B00 hk. 172800 IN NS z.hkirc.net.hk. 036E7332046375686B0365647502686B00000100010002A300000489BD0615 ns2.cuhk.edu.hk. 172800 IN A 137.189.6.21 036E7332046375686B0365647502686B00001C00010002A300001024053000000300060000000000000015 ns2.cuhk.edu.hk. 172800 IN AAAA 2405:3000:3:6::15 016105686B697263036E657402686B00000100010002A3000004CB770212 a.hkirc.net.hk. 172800 IN A 203.119.2.18 016205686B697263036E657402686B00000100010002A3000004CB775713 b.hkirc.net.hk. 172800 IN A 203.119.87.19 016205686B697263036E657402686B00001C00010002A300001020010DCA1000000000000000CB775713 b.hkirc.net.hk. 172800 IN AAAA 2001:dca:1000::cb77:5713 017305686B697263036E657402686B00000100010002A300000480208803 s.hkirc.net.hk. 172800 IN A 128.32.136.3 017305686B697263036E657402686B00001C00010002A30000102607F140FFFFFFFE0000000000000003 s.hkirc.net.hk. 172800 IN AAAA 2607:f140:ffff:fffe::3 017405686B697263036E657402686B00000100010002A30000048020880E t.hkirc.net.hk. 172800 IN A 128.32.136.14 017405686B697263036E657402686B00001C00010002A30000102607F140FFFFFFFE000000000000000E t.hkirc.net.hk. 172800 IN AAAA 2607:f140:ffff:fffe::e 017505686B697263036E657402686B00000100010002A3000004D2C98A3A u.hkirc.net.hk. 172800 IN A 210.201.138.58 017505686B697263036E657402686B00001C00010002A30000102404000010A000000000000000000058 u.hkirc.net.hk. 172800 IN AAAA 2404:0:10a0::58 017605686B697263036E657402686B00000100010002A3000004CC3DD82E v.hkirc.net.hk. 172800 IN A 204.61.216.46 017605686B697263036E657402686B00001C00010002A3000010200105000014604600AD000000000001 v.hkirc.net.hk. 172800 IN AAAA 2001:500:14:6046:ad::1 017705686B697263036E657402686B00000100010002A3000004CA0C1C8C w.hkirc.net.hk. 172800 IN A 202.12.28.140 017705686B697263036E657402686B00001C00010002A300001020010DC0000100004777000000000140 w.hkirc.net.hk. 172800 IN AAAA 2001:dc0:1:0:4777::140 017805686B697263036E657402686B00000100010002A3000004CA2DBC27 x.hkirc.net.hk. 172800 IN A 202.45.188.39 017805686B697263036E657402686B00001C00010002A3000010240530010001003A0000000000000027 x.hkirc.net.hk. 172800 IN AAAA 2405:3001:1:3a::27 017905686B697263036E657402686B00000100010002A300000489BD0615 y.hkirc.net.hk. 172800 IN A 137.189.6.21 017905686B697263036E657402686B00001C00010002A300001024053000000300060000000000000015 y.hkirc.net.hk. 172800 IN AAAA 2405:3000:3:6::15 017A05686B697263036E657402686B00000100010002A3000004C2926A46 z.hkirc.net.hk. 172800 IN A 194.146.106.70 017A05686B697263036E657402686B00001C00010002A30000102001067C101000170000000000000053 z.hkirc.net.hk. 172800 IN AAAA 2001:67c:1010:17::53 02686D00000200010002A3000011036E733108726567697374727902686D00 hm. 172800 IN NS ns1.registry.hm. 02686D00000200010002A3000011036E733208726567697374727902686D00 hm. 172800 IN NS ns2.registry.hm. 02686D00000200010002A3000011036E733308726567697374727902686D00 hm. 172800 IN NS ns3.registry.hm. 02686D00002F000100015180000C02686E000006200000000003 hm. 86400 IN NSEC hn. NS RRSIG NSEC 02686D00002E0001000151800093002F08010001518052F4220052EAD970837700B57F8E00C6B03930F77B6B941DC9142F305AE310DD1E287DC9CFF946FF5679E679D275E7EA7330ECCABCE76309CA8B454C3A53E50F3F791BE6488A5A7856B1ED520900793C86EF7374E71D31A419FA03E8723CD2946D495B9A10278958F79FFF12F547E8B5AD631B9F8348102A267666FAFA928353FC62C3F4CB17DCDFA2A6A4 hm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tX+OAMawOTD3e2uUHckULzBa4xDdHih9yc/5Rv9WeeZ50nXn6nMw7Mq852MJyotFTDpT5Q8/eRvmSIpaeFax7VIJAHk8hu9zdOcdMaQZ+gPocjzSlG1JW5oQJ4lY95//EvVH6LWtYxufg0gQKiZ2Zvr6koNT/GLD9MsX3N+ipqQ= ;{id = 33655} 036E733108726567697374727902686D00000100010002A3000004D0464F19 ns1.registry.hm. 172800 IN A 208.70.79.25 036E733208726567697374727902686D00000100010002A3000004D0464F18 ns2.registry.hm. 172800 IN A 208.70.79.24 036E733308726567697374727902686D00000100010002A3000004CAA96018 ns3.registry.hm. 172800 IN A 202.169.96.24 02686E00000200010002A300001006736E732D706203697363036F726700 hn. 172800 IN NS sns-pb.isc.org. 02686E00000200010002A30000180B7063682D616E796361737403726473036F726702686E00 hn. 172800 IN NS pch-anycast.rds.org.hn. 02686E00000200010002A300001A0D6E69636D782D616E796361737403726473036F726702686E00 hn. 172800 IN NS nicmx-anycast.rds.org.hn. 02686E00002B000100015180002450770802B7CA2A70DEA7188CB7319A8049164EF9D0E3496D8FE4E3C135CBA8452544BA72 hn. 86400 IN DS 20599 8 2 B7CA2A70DEA7188CB7319A8049164EF9D0E3496D8FE4E3C135CBA8452544BA72 02686E00002E0001000151800093002B08010001518052F4220052EAD9708377006A2006516C458CAFC1D2764C5497F17776FEA2C88469D345FDAEA09C17B78BD1385625859520ABA9568A70E58B68A8BB7C1DF181ED7E84DF1DE15FA7B1B3D39A18ED95C8E8101B24227BBD6D9B4202372C9040EA42A110B4B1244D24D17881790832D35E67B6D3B0088230FC88157E64F7A7A98EB21024774481FE339C6223BC hn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aiAGUWxFjK/B0nZMVJfxd3b+osiEadNF/a6gnBe3i9E4ViWFlSCrqVaKcOWLaKi7fB3xge1+hN8d4V+nsbPTmhjtlcjoEBskInu9bZtCAjcskEDqQqEQtLEkTSTReIF5CDLTXme207AIgjD8iBV+ZPenqY6yECR3RIH+M5xiI7w= ;{id = 33655} 02686E00002E0001000151800093002F08010001518052F4220052EAD97083770068A2AF4FCE7B053B95F2E91BB5178EE17A2AF4291CF0DA18F3A8359E4AF424415CB7051F319CCF92F29A8DEC1CE606C10F933D5CA5488D101C8CA0724FE14D965E8D1743EAB1BA48684328FA41D838FA0BE464FBC10A810B84E37CB1FAC4F589FF742481A6BD508617D035D2CA197BF4D6CE426C7EF233BB7D9789B9FBD84811 hn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aKKvT857BTuV8ukbtReO4Xoq9Ckc8NoY86g1nkr0JEFctwUfMZzPkvKajewc5gbBD5M9XKVIjRAcjKByT+FNll6NF0PqsbpIaEMo+kHYOPoL5GT7wQqBC4TjfLH6xPWJ/3Qkgaa9UIYX0DXSyhl79NbOQmx+8jO7fZeJufvYSBE= ;{id = 33655} 02686E00002F000100015180001208686F6C64696E6773000006200000000013 hn. 86400 IN NSEC holdings. NS DS RRSIG NSEC 0D6E69636D782D616E796361737403726473036F726702686E00000100010002A3000004C8216F01 nicmx-anycast.rds.org.hn. 172800 IN A 200.33.111.1 0B7063682D616E796361737403726473036F726702686E00000100010002A3000004CC3DD840 pch-anycast.rds.org.hn. 172800 IN A 204.61.216.64 0B7063682D616E796361737403726473036F726702686E00001C00010002A3000010200105000014606400AD000000000001 pch-anycast.rds.org.hn. 172800 IN AAAA 2001:500:14:6064:ad::1 08686F6C64696E677300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 holdings. 172800 IN NS demand.beta.aridns.net.au. 08686F6C64696E677300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 holdings. 172800 IN NS demand.alpha.aridns.net.au. 08686F6C64696E677300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 holdings. 172800 IN NS demand.delta.aridns.net.au. 08686F6C64696E677300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 holdings. 172800 IN NS demand.gamma.aridns.net.au. 08686F6C64696E677300002B00010001518000242B8D0802CC43CE2E88871B831D3160979357A360F32D2CEF4FC6FC2B013921ACBD6D1BE0 holdings. 86400 IN DS 11149 8 2 CC43CE2E88871B831D3160979357A360F32D2CEF4FC6FC2B013921ACBD6D1BE0 08686F6C64696E677300002E0001000151800093002B08010001518052F4220052EAD9708377000DF02EC995EB77DE5774FA734B1B7C0A57ABB79686AF3B186C4D95B8598FD10FAE0C12FDC3061FD4C979D7FAB8BE4CAF7776BEB99FE7735D3BA3875395B5A1F50B8ABD325586AD48CABA47DB85FB542A69CE714525C4C81CB145753EADF6786D4F1DB2BE58A6D5E11E57916ED2E84CD14A6A0D8BC0A4F0256A6684EF50EFA47E holdings. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . DfAuyZXrd95XdPpzSxt8Clert5aGrzsYbE2VuFmP0Q+uDBL9wwYf1Ml51/q4vkyvd3a+uZ/nc107o4dTlbWh9QuKvTJVhq1IyrpH24X7VCppznFFJcTIHLFFdT6t9nhtTx2yvlim1eEeV5Fu0uhM0UpqDYvApPAlamaE71DvpH4= ;{id = 33655} 08686F6C64696E677300002E0001000151800093002F08010001518052F4220052EAD970837700A50EF714C65415F776BA019AF94D40BF690E48B6D3F0DCC11049344115083A9E951248C359AE7179CA57BA7FCABCBA369DFC2F6BE684F30C55DC8EB158E226F04141EC5C985ADAA03E2E84F37883EA5D5B88B44E16E22D14B80F2C359A858C6192815FD5CEA2BE4429C1D5A8A15E20D782588149199E70ADCFD5D0E8DC1D0A60 holdings. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . pQ73FMZUFfd2ugGa+U1Av2kOSLbT8NzBEEk0QRUIOp6VEkjDWa5xecpXun/KvLo2nfwva+aE8wxV3I6xWOIm8EFB7FyYWtqgPi6E83iD6l1biLROFuItFLgPLDWahYxhkoFf1c6ivkQpwdWooV4g14JYgUkZnnCtz9XQ6NwdCmA= ;{id = 33655} 08686F6C64696E677300002F000100015180001107686F6C69646179000006200000000013 holdings. 86400 IN NSEC holiday. NS DS RRSIG NSEC 07686F6C6964617900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 holiday. 172800 IN NS demand.beta.aridns.net.au. 07686F6C6964617900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 holiday. 172800 IN NS demand.alpha.aridns.net.au. 07686F6C6964617900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 holiday. 172800 IN NS demand.delta.aridns.net.au. 07686F6C6964617900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 holiday. 172800 IN NS demand.gamma.aridns.net.au. 07686F6C6964617900002B000100015180002489890802605926A35E2424BD2C7782F22B5E55157AFA1688AC643C0F45B3B6DEA435D47D holiday. 86400 IN DS 35209 8 2 605926A35E2424BD2C7782F22B5E55157AFA1688AC643C0F45B3B6DEA435D47D 07686F6C6964617900002E0001000151800093002B08010001518052F4220052EAD97083770074DA28BCA64B9102B5F67B05CCEA7CC589BACF3B289D2E3423EA7C3C26B7C8ED60F8106C8B0293961B2EB8421CA8F0EF180229FB4CAC7BCCFB1E414D607D52C0F8F6FF7685544103E93BA7EE1E59170A62CA7F9ADD4A77E04FBEA56983E4DFE890ED7C9BF8D5466FEF56DB109779AF7472CB129AD7BECF5B9DFB6D5FFE91555C holiday. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dNoovKZLkQK19nsFzOp8xYm6zzsonS40I+p8PCa3yO1g+BBsiwKTlhsuuEIcqPDvGAIp+0yse8z7HkFNYH1SwPj2/3aFVEED6Tun7h5ZFwpiyn+a3Up34E++pWmD5N/okO18m/jVRm/vVtsQl3mvdHLLEprXvs9bnfttX/6RVVw= ;{id = 33655} 07686F6C6964617900002E0001000151800093002F08010001518052F4220052EAD9708377007672614F0DE15C394100149D3656C503FFE2900081169B109FE6E5A7A9F9B2DF923614795C0224F6DBF92D550CD2D258092170408F4B175DC4711FBA57534DAD10B82CFEB65F18D6A78B13AAC945D977E741893240CB5175F36058A3771DC8EDB41EEED7FC274D489D7F08E2FF78E40F1DF7D591016A0717A35A16C56B9811B5 holiday. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dnJhTw3hXDlBABSdNlbFA//ikACBFpsQn+blp6n5st+SNhR5XAIk9tv5LVUM0tJYCSFwQI9LF13EcR+6V1NNrRC4LP62XxjWp4sTqslF2XfnQYkyQMtRdfNgWKN3HcjttB7u1/wnTUidfwji/3jkDx331ZEBagcXo1oWxWuYEbU= ;{id = 33655} 07686F6C6964617900002F000100015180000F05686F757365000006200000000013 holiday. 86400 IN NSEC house. NS DS RRSIG NSEC 05686F75736500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 house. 172800 IN NS demand.beta.aridns.net.au. 05686F75736500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 house. 172800 IN NS demand.alpha.aridns.net.au. 05686F75736500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 house. 172800 IN NS demand.delta.aridns.net.au. 05686F75736500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 house. 172800 IN NS demand.gamma.aridns.net.au. 05686F75736500002B0001000151800024B2450802FCE9DE111696A86214B6A3E1EA0FA42A193E1A7756C52187215099E99B7ACAE2 house. 86400 IN DS 45637 8 2 FCE9DE111696A86214B6A3E1EA0FA42A193E1A7756C52187215099E99B7ACAE2 05686F75736500002E0001000151800093002B08010001518052F4220052EAD9708377001F60397A7B2EB8ECDF056703EA7D728DB55D3CB780555B48B553CED013C2360C83224CF8A2340393E89BB8D67D187A4FF71000ABEFECB94679A6F8F4D63A4ED1A16B7D8B02CEB61F0EA72840FFE626868C9EBB0DAD58CE7AE7BB5C4F7DD2A94931A2A8811A11AAB28C3233D06E18A1EC72AE06B02B98727300238FF366DCD8F0 house. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . H2A5ensuuOzfBWcD6n1yjbVdPLeAVVtItVPO0BPCNgyDIkz4ojQDk+ibuNZ9GHpP9xAAq+/suUZ5pvj01jpO0aFrfYsCzrYfDqcoQP/mJoaMnrsNrVjOeue7XE990qlJMaKogRoRqrKMMjPQbhih7HKuBrArmHJzACOP82bc2PA= ;{id = 33655} 05686F75736500002E0001000151800093002F08010001518052F4220052EAD9708377009AA47475620CB233D20737D29F79F5AE165D5B64BAB44A938EDE4ABA740A947297181E14822D1855CF0DDEF7424F81CB0CE0F98F8705BABD0F02BD69D919EE1C227537E252EDC0F1F5F10245FB4CA4B88CCF1BE29CD30E736AB8DD3EF1A8CAC9ECC406A77B0383A6B041DFAE0C5B0F8670C658AA5D94EDE0C303D0D86FD3C77E house. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mqR0dWIMsjPSBzfSn3n1rhZdW2S6tEqTjt5KunQKlHKXGB4Ugi0YVc8N3vdCT4HLDOD5j4cFur0PAr1p2RnuHCJ1N+JS7cDx9fECRftMpLiMzxvinNMOc2q43T7xqMrJ7MQGp3sDg6awQd+uDFsPhnDGWKpdlO3gwwPQ2G/Tx34= ;{id = 33655} 05686F75736500002F000100015180000C026872000006200000000013 house. 86400 IN NSEC hr. NS DS RRSIG NSEC 02687200000200010002A3000012036E733506756E6976696502616302617400 hr. 172800 IN NS ns5.univie.ac.at. 02687200000200010002A300000D046E336E73036E696302657300 hr. 172800 IN NS n3ns.nic.es. 02687200000200010002A300001006736E732D706203697363036F726700 hr. 172800 IN NS sns-pb.isc.org. 02687200000200010002A30000130768722D6E732D31066361726E657402687200 hr. 172800 IN NS hr-ns-1.carnet.hr. 02687200002F000100015180000C026874000006200000000003 hr. 86400 IN NSEC ht. NS RRSIG NSEC 02687200002E0001000151800093002F08010001518052F4220052EAD970837700099598C10DF6913E2F44B880CC97CD6E19121DB794BCEB3836215ED2C250A68C38C7F470B14A5BCB1359947CF3123860776FE577FA3B4543EFB548BF72EBB4ED69209A172FC76B73116A4F515DF4250F6F3E6B8888C93C8CA8D501855A58E9126B7028BDE03D37F05BE5ADB6ECC0DD44F399D7146F51A7E58873E7D04E025CD5 hr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CZWYwQ32kT4vRLiAzJfNbhkSHbeUvOs4NiFe0sJQpow4x/RwsUpbyxNZlHzzEjhgd2/ld/o7RUPvtUi/cuu07Wkgmhcvx2tzEWpPUV30JQ9vPmuIiMk8jKjVAYVaWOkSa3AoveA9N/Bb5a227MDdRPOZ1xRvUafliHPn0E4CXNU= ;{id = 33655} 0768722D6E732D31066361726E657402687200000100010002A3000004A135A064 hr-ns-1.carnet.hr. 172800 IN A 161.53.160.100 0768722D6E732D31066361726E657402687200001C00010002A300001020010B6800FF00010000000000000100 hr-ns-1.carnet.hr. 172800 IN AAAA 2001:b68:ff:1::100 02687400000200010002A300001303646E73097072696E6365746F6E0365647500 ht. 172800 IN NS dns.princeton.edu. 02687400000200010002A300000C036E7333036E696302667200 ht. 172800 IN NS ns3.nic.fr. 02687400000200010002A30000170568742D6E7307616E796361737403706368036E657400 ht. 172800 IN NS ht-ns.anycast.pch.net. 02687400000200010002A300001907636861726C6573046364656307706F6C796D746C02636100 ht. 172800 IN NS charles.cdec.polymtl.ca. 02687400002F000100015180000C026875000006200000000003 ht. 86400 IN NSEC hu. NS RRSIG NSEC 02687400002E0001000151800093002F08010001518052F4220052EAD9708377004E934E3773076698035F1DCAA09D8A42083CCCE7A4849CC27D732602A2127A5D47817B2458CF724A9FAA2B298108851C628A904EC07311A723EE7F975BC50DCA344A97910DC037872E773FF41794D40A30ECFEE003ABB5923D68123F7A7D6F3F5EB3A1BA83A8CDA940FEE2560E04B857EA7F2482D571CEC0D9A4EF37DA3AA1AD ht. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TpNON3MHZpgDXx3KoJ2KQgg8zOekhJzCfXMmAqISel1HgXskWM9ySp+qKymBCIUcYoqQTsBzEacj7n+XW8UNyjRKl5ENwDeHLnc/9BeU1Aow7P7gA6u1kj1oEj96fW8/XrOhuoOozalA/uJWDgS4V+p/JILVcc7A2aTvN9o6oa0= ;{id = 33655} 02687500000200010002A3000006016202687500 hu. 172800 IN NS b.hu. 02687500000200010002A3000006016302687500 hu. 172800 IN NS c.hu. 02687500000200010002A3000006016402687500 hu. 172800 IN NS d.hu. 02687500000200010002A3000006016502687500 hu. 172800 IN NS e.hu. 02687500000200010002A300000B026E73036E696302687500 hu. 172800 IN NS ns.nic.hu. 02687500000200010002A300000C036E7332036E696302667200 hu. 172800 IN NS ns2.nic.fr. 02687500000200010002A300000F066E732D636F6D036E696302687500 hu. 172800 IN NS ns-com.nic.hu. 02687500002F000100015180000C026964000006200000000003 hu. 86400 IN NSEC id. NS RRSIG NSEC 02687500002E0001000151800093002F08010001518052F4220052EAD970837700405D1FECAF2EFB525BFAB7A663ECEEF895CAA0B4B435A2D068B14F05FD544B2DD5733390477F13BBF84D9007881B25D42FE5B28764923A256A180B3FA908D8A51A64BAC370F15C5D98D443AE64E3A6D9089B4D062201641077A66FF5BDF0CC13B8C7D278AF61A8FD09829D86FAD94DAB9FD0D1592ED3F88914DA097A030A6B7A hu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QF0f7K8u+1Jb+remY+zu+JXKoLS0NaLQaLFPBf1USy3VczOQR38Tu/hNkAeIGyXUL+Wyh2SSOiVqGAs/qQjYpRpkusNw8VxdmNRDrmTjptkIm00GIgFkEHemb/W98MwTuMfSeK9hqP0Jgp2G+tlNq5/Q0Vku0/iJFNoJegMKa3o= ;{id = 33655} 016202687500000100010002A3000004C1EF95A1 b.hu. 172800 IN A 193.239.149.161 016202687500001C00010002A300001020010738000440000000000000000003 b.hu. 172800 IN AAAA 2001:738:4:4000::3 016302687500000100010002A3000004C1061001 c.hu. 172800 IN A 193.6.16.1 016402687500000100010002A3000004C34623FA d.hu. 172800 IN A 195.70.35.250 016502687500000100010002A3000004C200190B e.hu. 172800 IN A 194.0.25.11 016502687500001C00010002A300001020010678002000000000000000000011 e.hu. 172800 IN AAAA 2001:678:20::11 026E73036E696302687500000100010002A3000004C1EF9430 ns.nic.hu. 172800 IN A 193.239.148.48 026E73036E696302687500001C00010002A300001020010738000480000000000000000048 ns.nic.hu. 172800 IN AAAA 2001:738:4:8000::48 066E732D636F6D036E696302687500000100010002A3000004C200010C ns-com.nic.hu. 172800 IN A 194.0.1.12 066E732D636F6D036E696302687500001C00010002A30000102001067800040000000000000000000C ns-com.nic.hu. 172800 IN AAAA 2001:678:4::c 02696400000200010002A300000A016703646E7302696400 id. 172800 IN NS g.dns.id. 02696400000200010002A3000008036E733102696400 id. 172800 IN NS ns1.id. 02696400000200010002A3000010036E733103726164036E657402696400 id. 172800 IN NS ns1.rad.net.id. 02696400000200010002A3000011036E733104696E646F036E657402696400 id. 172800 IN NS ns1.indo.net.id. 02696400000200010002A3000010036E73320363626E036E657402696400 id. 172800 IN NS ns2.cbn.net.id. 02696400000200010002A300001004736563330561706E6963036E657400 id. 172800 IN NS sec3.apnic.net. 02696400002F000100015180000C026965000006200000000003 id. 86400 IN NSEC ie. NS RRSIG NSEC 02696400002E0001000151800093002F08010001518052F4220052EAD970837700BC4C598382D66B437DC4C6C046FE097AE679225CBCC7A5A3EF140B1BB1B20C1F29CA5DA89FED8E54ED2235F8054F39E635DA055556E2070B5D6ECAA34448DFA6A66F1F0DB49BCB1492703302B6EFE8CB192BD6EAF0F5F25027751469AA3E4135C0687CE381EAEBDFB5A77AA0AEF68C25542657247C4B5E01908365EDA708D6DB id. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vExZg4LWa0N9xMbARv4JeuZ5Ily8x6Wj7xQLG7GyDB8pyl2on+2OVO0iNfgFTznmNdoFVVbiBwtdbsqjREjfpqZvHw20m8sUknAzArbv6MsZK9bq8PXyUCd1FGmqPkE1wGh844Hq69+1p3qgrvaMJVQmVyR8S14BkINl7acI1ts= ;{id = 33655} 016703646E7302696400000100010002A3000004CB777054 g.dns.id. 172800 IN A 203.119.112.84 016703646E7302696400001C00010002A300001020010DD8001F00040000000000000084 g.dns.id. 172800 IN AAAA 2001:dd8:1f:4::84 036E73320363626E036E657402696400000100010002A3000004CA9E2801 ns2.cbn.net.id. 172800 IN A 202.158.40.1 036E73320363626E036E657402696400001C00010002A300001020010D10000A00530000000000000053 ns2.cbn.net.id. 172800 IN AAAA 2001:d10:a:53::53 036E733104696E646F036E657402696400000100010002A3000004CA9F2002 ns1.indo.net.id. 172800 IN A 202.159.32.2 036E733103726164036E657402696400000100010002A3000004CA9A0102 ns1.rad.net.id. 172800 IN A 202.154.1.2 036E733102696400000100010002A3000004CA9B1EE3 ns1.id. 172800 IN A 202.155.30.227 036E733102696400001C00010002A300001020010E00180000000000000000000002 ns1.id. 172800 IN AAAA 2001:e00:1800::2 02696500002F000100015180000C02696C000006200000000003 ie. 86400 IN NSEC il. NS RRSIG NSEC 02696500002E0001000151800093002F08010001518052F4220052EAD970837700406FF0D658FD6B39E91CC05741BB34F16F7AF76872D8129F0DF38EB429DD18BE122940C40C9AD1BDF2E76ECC5F2C2E4A5772AD109E9AF4400F06F3A51E76C96290D009CFE78EB48CB735675F49E8A9EF9C2A050A0C79F55DA0212EFACD040526FCCFE3D0DE0F1A0B212018476ADE8753EC12C1E64D7C222D70A3D1713C0DCD83 ie. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QG/w1lj9aznpHMBXQbs08W9692hy2BKfDfOOtCndGL4SKUDEDJrRvfLnbsxfLC5KV3KtEJ6a9EAPBvOlHnbJYpDQCc/njrSMtzVnX0noqe+cKgUKDHn1XaAhLvrNBAUm/M/j0N4PGgshIBhHat6HU+wSweZNfCItcKPRcTwNzYM= ;{id = 33655} 02696500000200010002A300000B0161046965647202696500 ie. 172800 IN NS a.iedr.ie. 02696500000200010002A300000B0162046965647202696500 ie. 172800 IN NS b.iedr.ie. 02696500000200010002A300000B0163046965647202696500 ie. 172800 IN NS c.iedr.ie. 02696500000200010002A300000B0164046965647202696500 ie. 172800 IN NS d.iedr.ie. 02696500000200010002A3000011036E7333026E730465736174036E657400 ie. 172800 IN NS ns3.ns.esat.net. 02696500000200010002A300001804676E73310E646F6D61696E726567697374727902696500 ie. 172800 IN NS gns1.domainregistry.ie. 02696500000200010002A300001804676E73320E646F6D61696E726567697374727902696500 ie. 172800 IN NS gns2.domainregistry.ie. 02696500000200010002A300000E056E732D6965036E696302667200 ie. 172800 IN NS ns-ie.nic.fr. 0661757468303107636F6E6E65637402696500000100010002A300000457C6B832 auth01.connect.ie. 172800 IN A 87.198.184.50 04676E73310E646F6D61696E726567697374727902696500000100010002A3000004C685C766 gns1.domainregistry.ie. 172800 IN A 198.133.199.102 04676E73320E646F6D61696E726567697374727902696500000100010002A3000004C685C767 gns2.domainregistry.ie. 172800 IN A 198.133.199.103 0161046965647202696500000100010002A30000044D48482C a.iedr.ie. 172800 IN A 77.72.72.44 0161046965647202696500001C00010002A30000102A0104B0000000000000000000000003 a.iedr.ie. 172800 IN AAAA 2a01:4b0::3 0162046965647202696500000100010002A30000044D484822 b.iedr.ie. 172800 IN A 77.72.72.34 0162046965647202696500001C00010002A30000102A0104B0000000000000000000000002 b.iedr.ie. 172800 IN AAAA 2a01:4b0::2 0163046965647202696500000100010002A3000004C2926A62 c.iedr.ie. 172800 IN A 194.146.106.98 0164046965647202696500000100010002A30000044D48E5F5 d.iedr.ie. 172800 IN A 77.72.229.245 02696C00000200010002A300000B036E7361026E7302696C00 il. 172800 IN NS nsa.ns.il. 02696C00000200010002A300000B036E7362026E7302696C00 il. 172800 IN NS nsb.ns.il. 02696C00000200010002A300000B036E7364026E7302696C00 il. 172800 IN NS nsd.ns.il. 02696C00000200010002A300000B036E7365026E7302696C00 il. 172800 IN NS nse.ns.il. 02696C00000200010002A300000B036E7367026E7302696C00 il. 172800 IN NS nsg.ns.il. 02696C00000200010002A300001205696C646E730468756A6902616302696C00 il. 172800 IN NS ildns.huji.ac.il. 02696C00000200010002A3000013066C6F6F6B7570046975636302616302696C00 il. 172800 IN NS lookup.iucc.ac.il. 02696C00000200010002A300001006736E732D706203697363036F726700 il. 172800 IN NS sns-pb.isc.org. 02696C00002F000100015180000C02696D000006200000000003 il. 86400 IN NSEC im. NS RRSIG NSEC 02696C00002E0001000151800093002F08010001518052F4220052EAD970837700B4FED7062F199E8897D95CFD0DE75AE391F6C3E2E5C2378E8C93C3AE3BBAA33FD42789A03114F621175B258ABF16D3BECCD9A3A7E00E763C8952ED504A7E28767D08AA2E97913E2342EA2537C88810D730E30876D66738A1F0EE8E032121D5B52B29926C8A9D3FABDD9B149332705E94150D5A86F4A83734E5ED2AE7FBDA3EBF il. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tP7XBi8ZnoiX2Vz9Deda45H2w+LlwjeOjJPDrju6oz/UJ4mgMRT2IRdbJYq/FtO+zNmjp+AOdjyJUu1QSn4odn0Iqi6XkT4jQuolN8iIENcw4wh21mc4ofDujgMhIdW1KymSbIqdP6vdmxSTMnBelBUNWob0qDc05e0q5/vaPr8= ;{id = 33655} 05696C646E730468756A6902616302696C00000100010002A3000004808B0642 ildns.huji.ac.il. 172800 IN A 128.139.6.66 066C6F6F6B7570046975636302616302696C00000100010002A3000004808B22F0 lookup.iucc.ac.il. 172800 IN A 128.139.34.240 066C6F6F6B7570046975636302616302696C00001C00010002A300001020010BF80900000600000000808B22F0 lookup.iucc.ac.il. 172800 IN AAAA 2001:bf8:900:6::808b:22f0 036E7361026E7302696C00000100010002A3000004C073D23A nsa.ns.il. 172800 IN A 192.115.210.58 036E7362026E7302696C00000100010002A3000004C073D23C nsb.ns.il. 172800 IN A 192.115.210.60 036E7364026E7302696C00000100010002A300000495143884 nsd.ns.il. 172800 IN A 149.20.56.132 036E7364026E7302696C00001C00010002A3000010200104F8000300370000000000000011 nsd.ns.il. 172800 IN AAAA 2001:4f8:3:37::11 036E7365026E7302696C00000100010002A3000004C0738DFD nse.ns.il. 172800 IN A 192.115.141.253 036E7367026E7302696C00000100010002A3000004515BA1D4 nsg.ns.il. 172800 IN A 81.91.161.212 036E7367026E7302696C00001C00010002A30000102A020568FFFF00080000000000000053 nsg.ns.il. 172800 IN AAAA 2a02:568:ffff:8::53 02696D00000200010002A300000C036E7334026A61036E657400 im. 172800 IN NS ns4.ja.net. 02696D00000200010002A300000F05686F70707903696F6D03636F6D00 im. 172800 IN NS hoppy.iom.com. 02696D00000200010002A3000015066261726E65790661647673797302636F02756B00 im. 172800 IN NS barney.advsys.co.uk. 02696D00000200010002A300001107706562626C657303696F6D03636F6D00 im. 172800 IN NS pebbles.iom.com. 02696D00002F00010001518000140A696D6D6F62696C69656E000006200000000003 im. 86400 IN NSEC immobilien. NS RRSIG NSEC 02696D00002E0001000151800093002F08010001518052F4220052EAD97083770001F4945E415D4BA67996CCB7A1934753B64553B3497B63A500D9E4654748161E727B824D14C3A6EF76FE2FDBBB0F817BF5724F74F135B0A1BF05F57D6B014F568033AD361FE935AEBBE6F843B5C615ED45A65EDF3BC3609E9D33AEA97CC5F2293DC0191C824001952894AA1C1111F842E8F20792C051027887FC8B42B14080BA im. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . AfSUXkFdS6Z5lsy3oZNHU7ZFU7NJe2OlANnkZUdIFh5ye4JNFMOm73b+L9u7D4F79XJPdPE1sKG/BfV9awFPVoAzrTYf6TWuu+b4Q7XGFe1Fpl7fO8Ngnp0zrql8xfIpPcAZHIJAAZUolKocERH4QujyB5LAUQJ4h/yLQrFAgLo= ;{id = 33655} 0A696D6D6F62696C69656E00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 immobilien. 172800 IN NS demand.beta.aridns.net.au. 0A696D6D6F62696C69656E00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 immobilien. 172800 IN NS demand.alpha.aridns.net.au. 0A696D6D6F62696C69656E00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 immobilien. 172800 IN NS demand.delta.aridns.net.au. 0A696D6D6F62696C69656E00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 immobilien. 172800 IN NS demand.gamma.aridns.net.au. 0A696D6D6F62696C69656E00002B0001000151800024EBA208027BB72F07C2FE7F5BB0DF667556FBC9BF5CFB31D66121D4AB5BCFDD0D29D39FCC immobilien. 86400 IN DS 60322 8 2 7BB72F07C2FE7F5BB0DF667556FBC9BF5CFB31D66121D4AB5BCFDD0D29D39FCC 0A696D6D6F62696C69656E00002E0001000151800093002B08010001518052F4220052EAD97083770096B6D93BD6DB126AA06C0B06A1B19F4D01320059CD27AF723CB5C7B72115CF4EA708E62DD074425A1D86B510CBDB792DF33B1EBE231A8E6C0BB2FBC47FEB165903B4BD5CE2AEC03F5B8808E6BC350BD59A8F6E88B718897D0651F797CF8DB01933FDC25AB664FE738600256B057E52AEADF6A0A7A9355A2E9FABCE5750679E55 immobilien. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . lrbZO9bbEmqgbAsGobGfTQEyAFnNJ69yPLXHtyEVz06nCOYt0HRCWh2GtRDL23kt8zseviMajmwLsvvEf+sWWQO0vVzirsA/W4gI5rw1C9Waj26ItxiJfQZR95fPjbAZM/3CWrZk/nOGACVrBX5Srq32oKepNVoun6vOV1BnnlU= ;{id = 33655} 0A696D6D6F62696C69656E00002E0001000151800093002F08010001518052F4220052EAD970837700AA5E4B2AA021AD33B480038326C98293FA1D33332E6E20A2F9CD2E53AF289D0C7F56B4CEC2E7151EC6339EF4F936E8086177EB0B9F540F76B74B782E7E3DBFC5D8F491D76627E0E414E3C9B73B72A441197E5BD6F34DB9CFAF3E9BC86E1D9FD7E08AEE7C4C104218CBFEFCC4841CE1C73353C38604AF5BA76F845E4D54838F1D immobilien. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ql5LKqAhrTO0gAODJsmCk/odMzMubiCi+c0uU68onQx/VrTOwucVHsYznvT5NugIYXfrC59UD3a3S3gufj2/xdj0kddmJ+DkFOPJtztypEEZflvW8025z68+m8huHZ/X4IrufEwQQhjL/vzEhBzhxzNTw4YEr1unb4ReTVSDjx0= ;{id = 33655} 0A696D6D6F62696C69656E00002F000100015180000C02696E000006200000000013 immobilien. 86400 IN NSEC in. NS DS RRSIG NSEC 02696E00000200010002A300001802613002696E0B6166696C6961732D6E737404696E666F00 in. 172800 IN NS a0.in.afilias-nst.info. 02696E00000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 in. 172800 IN NS a1.in.afilias-nst.in. 02696E00000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 in. 172800 IN NS a2.in.afilias-nst.info. 02696E00000200010002A300001702623002696E0B6166696C6961732D6E7374036F726700 in. 172800 IN NS b0.in.afilias-nst.org. 02696E00000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 in. 172800 IN NS b1.in.afilias-nst.in. 02696E00000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 in. 172800 IN NS b2.in.afilias-nst.org. 02696E00000200010002A300001802633002696E0B6166696C6961732D6E737404696E666F00 in. 172800 IN NS c0.in.afilias-nst.info. 02696E00000200010002A300000E036E73370463646E73036E657400 in. 172800 IN NS ns7.cdns.net. 02696E00002B0001000151800018FD14070182E4E46622B646086C1051A6093DEB897BD1C022 in. 86400 IN DS 64788 7 1 82E4E46622B646086C1051A6093DEB897BD1C022 02696E00002B0001000151800024FD1407024021B67522D8935C8D8D7CE32900ACB382F55E3D1A8DE920233CBE70A13DA85B in. 86400 IN DS 64788 7 2 4021B67522D8935C8D8D7CE32900ACB382F55E3D1A8DE920233CBE70A13DA85B 02696E00002E0001000151800093002B08010001518052F4220052EAD97083770067EB49194B7D8483D4DAFA972917161DAF31B67B87C7B5C9E20E1A90F0BA5C3C6076C13D0656F2E0D4D00DAAB6B2CFB40D22E4472FA863BAF718EF634F4381A27A3B86A7BE767E9FD7B5738BCCC4CD82AB4D251E0E42DA94D71986D0856941616E525B0E590EF22C215FB84FF806A41521626558593D49FAF2A35DE2593CBDE7 in. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z+tJGUt9hIPU2vqXKRcWHa8xtnuHx7XJ4g4akPC6XDxgdsE9Blby4NTQDaq2ss+0DSLkRy+oY7r3GO9jT0OBono7hqe+dn6f17Vzi8zEzYKrTSUeDkLalNcZhtCFaUFhblJbDlkO8iwhX7hP+AakFSFiZVhZPUn68qNd4lk8vec= ;{id = 33655} 02696E00002E0001000151800093002F08010001518052F4220052EAD970837700263C51E0128F5034DA3A34EB4B6F01745B69388D66D4C6F6C29F69696F94CDC6ABEF658B13F68EC68ECD33E70A6B5C5B8918E2EFCEF65D8AA3AE446F787E7F44AB4B4D3CF1812819E7FA87AC0E3F0EBE508E5B4A246C075090967A3F4D4D894D82213F60508D10699CBFA5BD5A8916F42C307AF8453E2B3045EF1AD7DCCAA95A in. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . JjxR4BKPUDTaOjTrS28BdFtpOI1m1Mb2wp9paW+Uzcar72WLE/aOxo7NM+cKa1xbiRji7872XYqjrkRveH5/RKtLTTzxgSgZ5/qHrA4/Dr5QjltKJGwHUJCWej9NTYlNgiE/YFCNEGmcv6W9WokW9CwwevhFPiswRe8a19zKqVo= ;{id = 33655} 02696E00002F000100015180000E04696E666F000006200000000013 in. 86400 IN NSEC info. NS DS RRSIG NSEC 02613102696E0B6166696C6961732D6E737402696E00000100010002A300000473F9A48E a1.in.afilias-nst.in. 172800 IN A 115.249.164.142 02613102696E0B6166696C6961732D6E737402696E00001C00010002A3000010200145280FFF00130000000000000142 a1.in.afilias-nst.in. 172800 IN AAAA 2001:4528:fff:13::142 02623102696E0B6166696C6961732D6E737402696E00000100010002A30000047D13285A b1.in.afilias-nst.in. 172800 IN A 125.19.40.90 02623102696E0B6166696C6961732D6E737402696E00001C00010002A30000102404A8000002001E0000000000190090 b1.in.afilias-nst.in. 172800 IN AAAA 2404:a800:2:1e::19:90 04696E666F00002F000100015180001309696E73746974757465000006200000000013 info. 86400 IN NSEC institute. NS DS RRSIG NSEC 04696E666F00002E0001000151800093002F08010001518052F4220052EAD9708377006E2A3D84914FDF1CFABA61E2A4BFD0C2CB02DA352DDADF54D29A4EAD0FB0A8BB17D37DC8904DE633DEADC4A725A870B1446236D3FF3934A70D4583C201D229F1C085C526637E1EF588BD38A01E105B6D8D2FC5F493EEF5717723D2BA07678FFDB96CA009F7F14CD966F80F264FE9AED6FCB3790FF56BEE56279EE1E6C1CF1D05 info. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bio9hJFP3xz6umHipL/QwssC2jUt2t9U0ppOrQ+wqLsX033IkE3mM96txKclqHCxRGI20/85NKcNRYPCAdIp8cCFxSZjfh71iL04oB4QW22NL8X0k+71cXcj0roHZ4/9uWygCffxTNlm+A8mT+mu1vyzeQ/1a+5WJ57h5sHPHQU= ;{id = 33655} 04696E666F00002E0001000151800093002B08010001518052F4220052EAD9708377001344BD168F088D7D5CF2EF6D5E92E69E94A8D0A97D448CA18BE693AC057997B370724E85AF90ED59DC227055B248F614C2C9D2D32BD129FCFAAFC187E31B6719DA52AC636ECBCC4086E61ACFA6D975CA6EEE3215F93BF49589A3214C957C9D0AAED5E73D7B8F762B9C197E7541C0C13A18317A628B107BE2809083DFB8F77229 info. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . E0S9Fo8IjX1c8u9tXpLmnpSo0Kl9RIyhi+aTrAV5l7Nwck6Fr5DtWdwicFWySPYUwsnS0yvRKfz6r8GH4xtnGdpSrGNuy8xAhuYaz6bZdcpu7jIV+Tv0lYmjIUyVfJ0KrtXnPXuPdiucGX51QcDBOhgxemKLEHvigJCD37j3cik= ;{id = 33655} 04696E666F00000200010002A300001A02613004696E666F0B6166696C6961732D6E737404696E666F00 info. 172800 IN NS a0.info.afilias-nst.info. 04696E666F00000200010002A300001A02613204696E666F0B6166696C6961732D6E737404696E666F00 info. 172800 IN NS a2.info.afilias-nst.info. 04696E666F00000200010002A300001902623004696E666F0B6166696C6961732D6E7374036F726700 info. 172800 IN NS b0.info.afilias-nst.org. 04696E666F00000200010002A300001902623204696E666F0B6166696C6961732D6E7374036F726700 info. 172800 IN NS b2.info.afilias-nst.org. 04696E666F00000200010002A300001A02633004696E666F0B6166696C6961732D6E737404696E666F00 info. 172800 IN NS c0.info.afilias-nst.info. 04696E666F00000200010002A300001902643004696E666F0B6166696C6961732D6E7374036F726700 info. 172800 IN NS d0.info.afilias-nst.org. 04696E666F00002B0001000151800018D503070193D30693C59CD11646CEAA77DCED10DA13BEEDE9 info. 86400 IN DS 54531 7 1 93D30693C59CD11646CEAA77DCED10DA13BEEDE9 04696E666F00002B0001000151800024D5030702E2D262469CB998642F772610A77AAEABB84A4F71CF40B9E30C03B9C9E1F6409C info. 86400 IN DS 54531 7 2 E2D262469CB998642F772610A77AAEABB84A4F71CF40B9E30C03B9C9E1F6409C 026130046165726F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE3301 a0.aero.afilias-nst.info. 172800 IN A 199.254.51.1 026130046165726F0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500001D00000000000000000001 a0.aero.afilias-nst.info. 172800 IN AAAA 2001:500:1d::1 026132046165726F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97301 a2.aero.afilias-nst.info. 172800 IN A 199.249.115.1 026132046165726F0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004300000000000000000001 a2.aero.afilias-nst.info. 172800 IN AAAA 2001:500:43::1 026330046165726F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE3501 c0.aero.afilias-nst.info. 172800 IN A 199.254.53.1 026330046165726F0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500001F00000000000000000001 c0.aero.afilias-nst.info. 172800 IN AAAA 2001:500:1f::1 02613004617369610B6166696C6961732D6E737404696E666F00000100010002A3000004C7133701 a0.asia.afilias-nst.info. 172800 IN A 199.19.55.1 02613004617369610B6166696C6961732D6E737404696E666F00001C00010002A300001020010500000D00000000000000000001 a0.asia.afilias-nst.info. 172800 IN AAAA 2001:500:d::1 02613204617369610B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97201 a2.asia.afilias-nst.info. 172800 IN A 199.249.114.1 02613204617369610B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004200000000000000000001 a2.asia.afilias-nst.info. 172800 IN AAAA 2001:500:42::1 02633004617369610B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE1D01 c0.asia.afilias-nst.info. 172800 IN A 199.254.29.1 02633004617369610B6166696C6961732D6E737404696E666F00001C00010002A300001020010500001700000000000000000001 c0.asia.afilias-nst.info. 172800 IN AAAA 2001:500:17::1 026130056363746C640B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE3B01 a0.cctld.afilias-nst.info. 172800 IN A 199.254.59.1 026130056363746C640B6166696C6961732D6E737404696E666F00001C00010002A300001020010500002500000000000000000001 a0.cctld.afilias-nst.info. 172800 IN AAAA 2001:500:25::1 026132056363746C640B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97401 a2.cctld.afilias-nst.info. 172800 IN A 199.249.116.1 026132056363746C640B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004400000000000000000001 a2.cctld.afilias-nst.info. 172800 IN AAAA 2001:500:44::1 026330056363746C640B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE3D01 c0.cctld.afilias-nst.info. 172800 IN A 199.254.61.1 026330056363746C640B6166696C6961732D6E737404696E666F00001C00010002A300001020010500002700000000000000000001 c0.cctld.afilias-nst.info. 172800 IN AAAA 2001:500:27::1 02613002696E0B6166696C6961732D6E737404696E666F00000100010002A3000004C7075701 a0.in.afilias-nst.info. 172800 IN A 199.7.87.1 02613002696E0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500002900000000000000000001 a0.in.afilias-nst.info. 172800 IN AAAA 2001:500:29::1 02613202696E0B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97501 a2.in.afilias-nst.info. 172800 IN A 199.249.117.1 02613202696E0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004500000000000000000001 a2.in.afilias-nst.info. 172800 IN AAAA 2001:500:45::1 02633002696E0B6166696C6961732D6E737404696E666F00000100010002A3000004C7FD3901 c0.in.afilias-nst.info. 172800 IN A 199.253.57.1 02633002696E0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500005100000000000000000001 c0.in.afilias-nst.info. 172800 IN AAAA 2001:500:51::1 02613004696E666F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE1F01 a0.info.afilias-nst.info. 172800 IN A 199.254.31.1 02613004696E666F0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500001900000000000000000001 a0.info.afilias-nst.info. 172800 IN AAAA 2001:500:19::1 02613204696E666F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97101 a2.info.afilias-nst.info. 172800 IN A 199.249.113.1 02613204696E666F0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004100000000000000000001 a2.info.afilias-nst.info. 172800 IN AAAA 2001:500:41::1 02633004696E666F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE3101 c0.info.afilias-nst.info. 172800 IN A 199.254.49.1 02633004696E666F0B6166696C6961732D6E737404696E666F00001C00010002A300001020010500001B00000000000000000001 c0.info.afilias-nst.info. 172800 IN AAAA 2001:500:1b::1 026132026D650B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97701 a2.me.afilias-nst.info. 172800 IN A 199.249.119.1 026132026D650B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004700000000000000000001 a2.me.afilias-nst.info. 172800 IN AAAA 2001:500:47::1 026130046D6F62690B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE3701 a0.mobi.afilias-nst.info. 172800 IN A 199.254.55.1 026130046D6F62690B6166696C6961732D6E737404696E666F00001C00010002A300001020010500002100000000000000000001 a0.mobi.afilias-nst.info. 172800 IN AAAA 2001:500:21::1 026132046D6F62690B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97601 a2.mobi.afilias-nst.info. 172800 IN A 199.249.118.1 026132046D6F62690B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004600000000000000000001 a2.mobi.afilias-nst.info. 172800 IN AAAA 2001:500:46::1 026330046D6F62690B6166696C6961732D6E737404696E666F00000100010002A3000004C7FE3901 c0.mobi.afilias-nst.info. 172800 IN A 199.254.57.1 026330046D6F62690B6166696C6961732D6E737404696E666F00001C00010002A300001020010500002300000000000000000001 c0.mobi.afilias-nst.info. 172800 IN AAAA 2001:500:23::1 026130036F72670B6166696C6961732D6E737404696E666F00000100010002A3000004C7133801 a0.org.afilias-nst.info. 172800 IN A 199.19.56.1 026130036F72670B6166696C6961732D6E737404696E666F00001C00010002A300001020010500000E00000000000000000001 a0.org.afilias-nst.info. 172800 IN AAAA 2001:500:e::1 026132036F72670B6166696C6961732D6E737404696E666F00000100010002A3000004C7F97001 a2.org.afilias-nst.info. 172800 IN A 199.249.112.1 026132036F72670B6166696C6961732D6E737404696E666F00001C00010002A300001020010500004000000000000000000001 a2.org.afilias-nst.info. 172800 IN AAAA 2001:500:40::1 026330036F72670B6166696C6961732D6E737404696E666F00000100010002A3000004C7133501 c0.org.afilias-nst.info. 172800 IN A 199.19.53.1 026330036F72670B6166696C6961732D6E737404696E666F00001C00010002A300001020010500000B00000000000000000001 c0.org.afilias-nst.info. 172800 IN AAAA 2001:500:b::1 02613004706F73740B6166696C6961732D6E737404696E666F00000100010002A300000441160001 a0.post.afilias-nst.info. 172800 IN A 65.22.0.1 02613004706F73740B6166696C6961732D6E737404696E666F00001C00010002A30000102A018840000000000000000000000001 a0.post.afilias-nst.info. 172800 IN AAAA 2a01:8840::1 02613204706F73740B6166696C6961732D6E737404696E666F00000100010002A300000441160401 a2.post.afilias-nst.info. 172800 IN A 65.22.4.1 02613204706F73740B6166696C6961732D6E737404696E666F00001C00010002A30000102A018840000400000000000000000001 a2.post.afilias-nst.info. 172800 IN AAAA 2a01:8840:4::1 02633004706F73740B6166696C6961732D6E737404696E666F00000100010002A300000441160201 c0.post.afilias-nst.info. 172800 IN A 65.22.2.1 02633004706F73740B6166696C6961732D6E737404696E666F00001C00010002A30000102A018840000200000000000000000001 c0.post.afilias-nst.info. 172800 IN AAAA 2a01:8840:2::1 0261300370726F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7B60001 a0.pro.afilias-nst.info. 172800 IN A 199.182.0.1 0261300370726F0B6166696C6961732D6E737404696E666F00001C00010002A30000102001050000C000000000000000000001 a0.pro.afilias-nst.info. 172800 IN AAAA 2001:500:c0::1 0261320370726F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7B62001 a2.pro.afilias-nst.info. 172800 IN A 199.182.32.1 0261320370726F0B6166696C6961732D6E737404696E666F00001C00010002A30000102001050000E000000000000000000001 a2.pro.afilias-nst.info. 172800 IN AAAA 2001:500:e0::1 0263300370726F0B6166696C6961732D6E737404696E666F00000100010002A3000004C7B61001 c0.pro.afilias-nst.info. 172800 IN A 199.182.16.1 0263300370726F0B6166696C6961732D6E737404696E666F00001C00010002A30000102001050000D000000000000000000001 c0.pro.afilias-nst.info. 172800 IN AAAA 2001:500:d0::1 026130037878780B6166696C6961732D6E737404696E666F00000100010002A3000004C7739801 a0.xxx.afilias-nst.info. 172800 IN A 199.115.152.1 026130037878780B6166696C6961732D6E737404696E666F00001C00010002A30000102001050000A000000000000000000001 a0.xxx.afilias-nst.info. 172800 IN AAAA 2001:500:a0::1 026132037878780B6166696C6961732D6E737404696E666F00000100010002A3000004C7739C01 a2.xxx.afilias-nst.info. 172800 IN A 199.115.156.1 026132037878780B6166696C6961732D6E737404696E666F00001C00010002A30000102001050000A400000000000000000001 a2.xxx.afilias-nst.info. 172800 IN AAAA 2001:500:a4::1 026330037878780B6166696C6961732D6E737404696E666F00000100010002A3000004C7739A01 c0.xxx.afilias-nst.info. 172800 IN A 199.115.154.1 026330037878780B6166696C6961732D6E737404696E666F00001C00010002A30000102001050000A200000000000000000001 c0.xxx.afilias-nst.info. 172800 IN AAAA 2001:500:a2::1 03746C64076973632D736E7304696E666F00000100010002A300000448344703 tld.isc-sns.info. 172800 IN A 72.52.71.3 03746C64076973632D736E7304696E666F00001C00010002A300001020010470001A00000000000000000003 tld.isc-sns.info. 172800 IN AAAA 2001:470:1a::3 04746C643508756C747261646E7304696E666F00000100010002A3000004C0643B0B tld5.ultradns.info. 172800 IN A 192.100.59.11 09696E7374697475746500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 institute. 172800 IN NS demand.beta.aridns.net.au. 09696E7374697475746500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 institute. 172800 IN NS demand.alpha.aridns.net.au. 09696E7374697475746500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 institute. 172800 IN NS demand.delta.aridns.net.au. 09696E7374697475746500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 institute. 172800 IN NS demand.gamma.aridns.net.au. 09696E7374697475746500002B000100015180002482840802049FCBEE91ADA923921C8A4204D7AAA3CEABE0ABC33021385EB491D6CB865C15 institute. 86400 IN DS 33412 8 2 049FCBEE91ADA923921C8A4204D7AAA3CEABE0ABC33021385EB491D6CB865C15 09696E7374697475746500002E0001000151800093002B08010001518052F4220052EAD970837700827CB0F2AFA043E151574A5E0DBB8F6A803D252201B48E9EFDC77B8264F2CB0E6FB1FA9BFC3982CF26D133CC20EC1CEA97A412CF978738209117EEC3E8815D13C31103E1ADCEB1C8DEBF7695B75B4F81F689BC425A07D5EED80EE72DB102EB96C8F70EFADBD8BA4230324C17387728ABB3342C9EE1123C0BF6C1B3F0B1BB9ACA institute. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . gnyw8q+gQ+FRV0peDbuPaoA9JSIBtI6e/cd7gmTyyw5vsfqb/DmCzybRM8wg7Bzql6QSz5eHOCCRF+7D6IFdE8MRA+GtzrHI3r92lbdbT4H2ibxCWgfV7tgO5y2xAuuWyPcO+tvYukIwMkwXOHcoq7M0LJ7hEjwL9sGz8LG7mso= ;{id = 33655} 09696E7374697475746500002E0001000151800093002F08010001518052F4220052EAD970837700AD10E62EB3E846A30155B0E917303D0EB8C7C5A2CDAD07BF33B756FDAF849145ABDEB95F58020FCFF811D0B6D4D6F2AB015D4A9578E817E0CEDD3BB6B9BE3043CA0B5B65A8843EC872E70DBC45DE3BC46E0BCC19DF642C171B24CCFDBD4E4EE72177B14B74B56FCD5D1B7F10CEF472CAB3E40155DEA346143EB837C5482B274D institute. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rRDmLrPoRqMBVbDpFzA9DrjHxaLNrQe/M7dW/a+EkUWr3rlfWAIPz/gR0LbU1vKrAV1KlXjoF+DO3Tu2ub4wQ8oLW2WohD7IcucNvEXeO8RuC8wZ32QsFxskzP29Tk7nIXexS3S1b81dG38QzvRyyrPkAVXeo0YUPrg3xUgrJ00= ;{id = 33655} 09696E7374697475746500002F000100015180000D03696E74000006200000000013 institute. 86400 IN NSEC int. NS DS RRSIG NSEC 03696E7400000200010002A300000B026E73027575036E657400 int. 172800 IN NS ns.uu.net. 03696E7400000200010002A300000E026E73056963616E6E036F726700 int. 172800 IN NS ns.icann.org. 03696E7400000200010002A300000C036E7330026A61036E657400 int. 172800 IN NS ns0.ja.net. 03696E7400000200010002A3000012036E73310263730375636C02616302756B00 int. 172800 IN NS ns1.cs.ucl.ac.uk. 03696E7400000200010002A300001704736563320761757468646E730472697065036E657400 int. 172800 IN NS sec2.authdns.ripe.net. 03696E7400002F00010001518000170D696E7465726E6174696F6E616C000006200000000003 int. 86400 IN NSEC international. NS RRSIG NSEC 03696E7400002E0001000151800093002F08010001518052F4220052EAD9708377005B4BC72273592D41B60612E224E59CA4A182013B7BC6AB12E7ADA3AE5ED20BC8DE1B60A890970A5CD9BA16F03769FF21D308124280751B3C30893FEE24496FA831F3B9B57A0D3F7A9C4DC0ACB7384880F170B564F1F9A6349A5DA9C498371F0AD529929E81CA1BC211D43D1B5AB557FE26C4AC92F35ED095E8D7EAA5F3CE4F43 int. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . W0vHInNZLUG2BhLiJOWcpKGCATt7xqsS562jrl7SC8jeG2CokJcKXNm6FvA3af8h0wgSQoB1GzwwiT/uJElvqDHzubV6DT96nE3ArLc4SIDxcLVk8fmmNJpdqcSYNx8K1SmSnoHKG8IR1D0bWrVX/ibErJLzXtCV6NfqpfPOT0M= ;{id = 33655} 0D696E7465726E6174696F6E616C00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 international. 172800 IN NS demand.beta.aridns.net.au. 0D696E7465726E6174696F6E616C00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 international. 172800 IN NS demand.alpha.aridns.net.au. 0D696E7465726E6174696F6E616C00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 international. 172800 IN NS demand.delta.aridns.net.au. 0D696E7465726E6174696F6E616C00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 international. 172800 IN NS demand.gamma.aridns.net.au. 0D696E7465726E6174696F6E616C00002B00010001518000242B810802F09799F34E9A973DBCF4C647D03C6A2C2E41976D04218F41B82ED6F8CCAFB2DC international. 86400 IN DS 11137 8 2 F09799F34E9A973DBCF4C647D03C6A2C2E41976D04218F41B82ED6F8CCAFB2DC 0D696E7465726E6174696F6E616C00002E0001000151800093002B08010001518052F4220052EAD9708377005616174E557E1E116D2A65541412C76DD24CE5FA72B87546C287CEA609DE0FF367565A8BFA4805A308C51D74F3365EBD54357DA6EBF6E32550A989A3410FD5F450C53A3927351F41F11F5D00386887FA24BB7005DE474B0B7863136F3CF480F6C1F61DF7B0E095823090DB4D101A913680BB9F4723DFE79600D748D8D96F7C72 international. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VhYXTlV+HhFtKmVUFBLHbdJM5fpyuHVGwofOpgneD/NnVlqL+kgFowjFHXTzNl69VDV9puv24yVQqYmjQQ/V9FDFOjknNR9B8R9dADhoh/oku3AF3kdLC3hjE2889ID2wfYd97DglYIwkNtNEBqRNoC7n0cj3+eWANdI2NlvfHI= ;{id = 33655} 0D696E7465726E6174696F6E616C00002E0001000151800093002F08010001518052F4220052EAD9708377001387BB59529D09638C57EC2157B1FDA535F65E2879E025BCE228442A118B5E2548F0D4D7039C3B090CAA868989A9CEA161CF6A3427F974370C05FAC31FA34B3EB8E0D6A38897085A6399C28A14B7E707A4EC3ADDF813FDBA0D505948150CADCA45D2485B5027C0C9DD849CF7DD2EF127D760C52A66D21447B465451437B24885 international. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . E4e7WVKdCWOMV+whV7H9pTX2Xih54CW84ihEKhGLXiVI8NTXA5w7CQyqhomJqc6hYc9qNCf5dDcMBfrDH6NLPrjg1qOIlwhaY5nCihS35wek7Drd+BP9ug1QWUgVDK3KRdJIW1AnwMndhJz33S7xJ9dgxSpm0hRHtGVFFDeySIU= ;{id = 33655} 0D696E7465726E6174696F6E616C00002F000100015180000C02696F000006200000000013 international. 86400 IN NSEC io. NS DS RRSIG NSEC 02696F00000200010002A300000A0161036E696302696F00 io. 172800 IN NS a.nic.io. 02696F00000200010002A300000C0161046E733133036E657400 io. 172800 IN NS a.ns13.net. 02696F00000200010002A300000A0162036E696302616300 io. 172800 IN NS b.nic.ac. 02696F00000200010002A300000A0162036E696302696F00 io. 172800 IN NS b.nic.io. 02696F00000200010002A300000C0162046E733133036E657400 io. 172800 IN NS b.ns13.net. 02696F00000200010002A3000016036E73310C636F6D6D756E697479646E73036E657400 io. 172800 IN NS ns1.communitydns.net. 02696F00000200010002A300000F036E73330369636202636F02756B00 io. 172800 IN NS ns3.icb.co.uk. 02696F00002B000100015180001834530701C048489AEC2420E18F5F423192F132106C3691C1 io. 86400 IN DS 13395 7 1 C048489AEC2420E18F5F423192F132106C3691C1 02696F00002B000100015180002434530702070BBE5BE5A4BE6271C543BDE99E9981E5D4191740E531AF2585C5D1619C83F0 io. 86400 IN DS 13395 7 2 070BBE5BE5A4BE6271C543BDE99E9981E5D4191740E531AF2585C5D1619C83F0 02696F00002E0001000151800093002B08010001518052F4220052EAD9708377002E9DAF48DD47E7298FC36ACF43DDFF54590FFB28AECD7BCC8CA2B8625957FA0B335BC9A9E1ADBCC969FB62575C358D40C75319E8B67D560A6C5386371C4526A315504E3D1E1CCE4626BF65F1BC79F8F77C77C61DD7B23D980018F259ADD9CD50D5EA405EFFE2D678F7572CBEDB9A0CDCB9B48F05372DA7097E76A0148A5FA9E2 io. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Lp2vSN1H5ymPw2rPQ93/VFkP+yiuzXvMjKK4YllX+gszW8mp4a28yWn7YldcNY1Ax1MZ6LZ9VgpsU4Y3HEUmoxVQTj0eHM5GJr9l8bx5+Pd8d8Yd17I9mAAY8lmt2c1Q1epAXv/i1nj3Vyy+25oM3Lm0jwU3LacJfnagFIpfqeI= ;{id = 33655} 02696F00002E0001000151800093002F08010001518052F4220052EAD97083770092CC01398DEE90830366A2CACFDE83E192E4E561407CB67A34F74B78D470D5AF86FF493728629373789FF661D103BC6028AC115BEE2252834B52BFFD1562FE1EAEDF673716BC3D3B28600BA972B0815EF850BB9DC9FA4CC3FFB62CCD282E5A889372B9F07323F0118A49588E1C2BC583A2E44BA0D8454FDD6D7EE20DC4ED7701 io. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kswBOY3ukIMDZqLKz96D4ZLk5WFAfLZ6NPdLeNRw1a+G/0k3KGKTc3if9mHRA7xgKKwRW+4iUoNLUr/9FWL+Hq7fZzcWvD07KGALqXKwgV74ULudyfpMw/+2LM0oLlqIk3K58HMj8BGKSViOHCvFg6LkS6DYRU/dbX7iDcTtdwE= ;{id = 33655} 02696F00002F000100015180000C026971000006200000000013 io. 86400 IN NSEC iq. NS DS RRSIG NSEC 0161036E696302696F00000100010002A300000440FB1FB3 a.nic.io. 172800 IN A 64.251.31.179 0162036E696302696F00000100010002A3000004C2000201 b.nic.io. 172800 IN A 194.0.2.1 0162036E696302696F00001C00010002A300001020010678000500000000000000000001 b.nic.io. 172800 IN AAAA 2001:678:5::1 02697100000200010002A300001502697103646E7305636F636361036F7267026E7A00 iq. 172800 IN NS iq.dns.cocca.org.nz. 02697100000200010002A300000C036E733103636D6302697100 iq. 172800 IN NS ns1.cmc.iq. 02697100000200010002A300001006736E732D706203697363036F726700 iq. 172800 IN NS sns-pb.isc.org. 02697100000200010002A30000140B6E73702D616E796361737403636D6302697100 iq. 172800 IN NS nsp-anycast.cmc.iq. 02697100002F000100015180000C026972000006200000000003 iq. 86400 IN NSEC ir. NS RRSIG NSEC 02697100002E0001000151800093002F08010001518052F4220052EAD9708377001DE11CD4E6C2E17E37424FD869204E87DB6E17F2597330EEAD0534E47D3DF06CEF5E22701B528947BAAC20DAD487125D3F70C39B0B82842DBB4D03E1B3EFBEEDA976760DCA61CEAB271EF1D696E4978D2B1DCA2EF39AE86D9B32A5E94E46134E1B5E42664761C8D4BFCB0879CA528B3AFC96810AEC5DC32DBFF7842484E3112F iq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HeEc1ObC4X43Qk/YaSBOh9tuF/JZczDurQU05H098GzvXiJwG1KJR7qsINrUhxJdP3DDmwuChC27TQPhs+++7al2dg3KYc6rJx7x1pbkl40rHcou85robZsypelORhNOG15CZkdhyNS/ywh5ylKLOvyWgQrsXcMtv/eEJITjES8= ;{id = 33655} 036E733103636D6302697100000100010002A3000004C2753964 ns1.cmc.iq. 172800 IN A 194.117.57.100 0B6E73702D616E796361737403636D6302697100000100010002A3000004C2753A2A nsp-anycast.cmc.iq. 172800 IN A 194.117.58.42 0B6E73702D616E796361737403636D6302697100001C00010002A3000010200105000014800100AD000000000042 nsp-anycast.cmc.iq. 172800 IN AAAA 2001:500:14:8001:ad::42 02697200000200010002A300000A0161036E696302697200 ir. 172800 IN NS a.nic.ir. 02697200000200010002A300000D026E730569726E696302697200 ir. 172800 IN NS ns.irnic.ir. 02697200000200010002A3000012036E733506756E6976696502616302617400 ir. 172800 IN NS ns5.univie.ac.at. 02697200002F000100015180000C026973000006200000000003 ir. 86400 IN NSEC is. NS RRSIG NSEC 02697200002E0001000151800093002F08010001518052F4220052EAD970837700A858345A1056BAAE57043919409C1CE888F85CB0F6CE1A2C50D6AABD8EE713542655283A299AE988BEBE5AFEF653FF8A98B1CCEA5A2E9570A93CC4D9FA1084083275A3207B6620EAE7D40199A5D8F530DCD618B366798586C57A46463C5424AD49111AD2099E2A9ABE1E0EBD0E8066F4E69784434794E8096C4BD34CC907280F ir. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qFg0WhBWuq5XBDkZQJwc6Ij4XLD2zhosUNaqvY7nE1QmVSg6KZrpiL6+Wv72U/+KmLHM6loulXCpPMTZ+hCECDJ1oyB7ZiDq59QBmaXY9TDc1hizZnmFhsV6RkY8VCStSREa0gmeKpq+Hg69DoBm9OaXhENHlOgJbEvTTMkHKA8= ;{id = 33655} 026E730569726E696302697200000100010002A3000004C1BD7A53 ns.irnic.ir. 172800 IN A 193.189.122.83 0161036E696302697200000100010002A3000004C1BD7B02 a.nic.ir. 172800 IN A 193.189.123.2 02697300000200010002A300001B026973056363746C640761757468646E730472697065036E657400 is. 172800 IN NS is.cctld.authdns.ripe.net. 02697300000200010002A300000E037361620569736E696302697300 is. 172800 IN NS sab.isnic.is. 02697300000200010002A30000100573756E69630573756E657402736500 is. 172800 IN NS sunic.sunet.se. 02697300000200010002A300001106647572696E6E0572686E657402697300 is. 172800 IN NS durinn.rhnet.is. 02697300000200010002A300000B0669736761746502697300 is. 172800 IN NS isgate.is. 02697300000200010002A300001006736E732D706203697363036F726700 is. 172800 IN NS sns-pb.isc.org. 02697300002B000100015180001868660801B2416A62E8732568826213019E7F09AF108183CE is. 86400 IN DS 26726 8 1 B2416A62E8732568826213019E7F09AF108183CE 02697300002B0001000151800024686608026984FEF569CFDB2CE00AFC62B5763AD50306EB0D4816A7C6CF921BF66B12245A is. 86400 IN DS 26726 8 2 6984FEF569CFDB2CE00AFC62B5763AD50306EB0D4816A7C6CF921BF66B12245A 02697300002E0001000151800093002B08010001518052F4220052EAD970837700B3F176591D5CFD9AC72ABE0110120CF497F25C3C646FEF075F9E878268C3818569ABDDA5B329C99FD3B7709A69B12B5FDDD449E1E097804EE5082DB300BA368CB86D451793F950F33B25274390B49C95AFB57011504813F0F065FA67600E19A955AA2458F67F415F159E18676A0BE63FC71132C2B4BF4C03DAD25402B502FB8F is. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . s/F2WR1c/ZrHKr4BEBIM9JfyXDxkb+8HX56HgmjDgYVpq92lsynJn9O3cJppsStf3dRJ4eCXgE7lCC2zALo2jLhtRReT+VDzOyUnQ5C0nJWvtXARUEgT8PBl+mdgDhmpVaokWPZ/QV8VnhhnagvmP8cRMsK0v0wD2tJUArUC+48= ;{id = 33655} 02697300002E0001000151800093002F08010001518052F4220052EAD970837700B6326C65B514A200DBED37F3CAF80F145F2717AB47B6095BD230E4F995C0E8467444EFDA1F4BED2780B30BDCA08DF451E6A4C5604B392C8331A7F60B87CBD9F3AEE8C7DA7B902619AF586957AD96770C7E549B73F5D85AD9C0F8E67A21962DC8C77EBE288ECC8C6AFD9C61AA55D9276F8397E2B2A7644ECC3BB6C274F759AE76 is. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tjJsZbUUogDb7TfzyvgPFF8nF6tHtglb0jDk+ZXA6EZ0RO/aH0vtJ4CzC9ygjfRR5qTFYEs5LIMxp/YLh8vZ867ox9p7kCYZr1hpV62Wdwx+VJtz9dha2cD45nohli3Ix36+KI7MjGr9nGGqVdknb4OX4rKnZE7MO7bCdPdZrnY= ;{id = 33655} 02697300002F000100015180000C026974000006200000000013 is. 86400 IN NSEC it. NS DS RRSIG NSEC 0669736761746502697300000100010002A3000004C1043A33 isgate.is. 172800 IN A 193.4.58.51 0669736761746502697300001C00010002A30000102001067C006C00580000000000000051 isgate.is. 172800 IN AAAA 2001:67c:6c:58::51 037361620569736E696302697300000100010002A3000004C2926A3A sab.isnic.is. 172800 IN A 194.146.106.58 037361620569736E696302697300001C00010002A30000102001067C101000140000000000000053 sab.isnic.is. 172800 IN AAAA 2001:67c:1010:14::53 06647572696E6E0572686E657402697300000100010002A300000482D01014 durinn.rhnet.is. 172800 IN A 130.208.16.20 02697400002F000100015180000C026A65000006200000000003 it. 86400 IN NSEC je. NS RRSIG NSEC 02697400002E0001000151800093002F08010001518052F4220052EAD9708377005DA4F5C999A6BB9DF16B494E7FC3A50073F45A9A2D293D645931B44E4184F3C88B11751034F1E6955CFAFD0B19C65AF72D181F78D8EA521A5D518376E41F89C760C1E7C34F35CAD77E6E44BDC113CE11049C9BB3E82B9D51483452920BFE1C29E89722BAF30AF1CCDA7A4A622A0661623830362D13B2B3EB67C2476277E9D444 it. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XaT1yZmmu53xa0lOf8OlAHP0WpotKT1kWTG0TkGE88iLEXUQNPHmlVz6/QsZxlr3LRgfeNjqUhpdUYN25B+Jx2DB58NPNcrXfm5EvcETzhEEnJuz6CudUUg0UpIL/hwp6JciuvMK8czaekpiKgZhYjgwNi0TsrPrZ8JHYnfp1EQ= ;{id = 33655} 02697400000200010002A300000A016103646E7302697400 it. 172800 IN NS a.dns.it. 02697400000200010002A300000A016303646E7302697400 it. 172800 IN NS c.dns.it. 02697400000200010002A300000A016D03646E7302697400 it. 172800 IN NS m.dns.it. 02697400000200010002A300000A017203646E7302697400 it. 172800 IN NS r.dns.it. 02697400000200010002A300000C03646E73036E696302697400 it. 172800 IN NS dns.nic.it. 02697400000200010002A30000130A6E616D6573657276657203636E7202697400 it. 172800 IN NS nameserver.cnr.it. 056E732D616C046973746903636E7202697400000100010002A3000004C277C008 ns-al.isti.cnr.it. 172800 IN A 194.119.192.8 0A6E616D6573657276657203636E7202697400000100010002A3000004C277C022 nameserver.cnr.it. 172800 IN A 194.119.192.34 0A6E616D6573657276657203636E7202697400001C00010002A30000102A00162000C002200194011901920034 nameserver.cnr.it. 172800 IN AAAA 2a00:1620:c0:220:194:119:192:34 016103646E7302697400000100010002A3000004C20010D7 a.dns.it. 172800 IN A 194.0.16.215 016103646E7302697400001C00010002A300001020010678001200000194000000160215 a.dns.it. 172800 IN AAAA 2001:678:12:0:194:0:16:215 016303646E7302697400000100010002A3000004C2000116 c.dns.it. 172800 IN A 194.0.1.22 016303646E7302697400001C00010002A300001020010678000400000000000000000016 c.dns.it. 172800 IN AAAA 2001:678:4::16 016D03646E7302697400000100010002A3000004D91D4C04 m.dns.it. 172800 IN A 217.29.76.4 016D03646E7302697400001C00010002A300001020011AC0000002000000A5D160040002 m.dns.it. 172800 IN AAAA 2001:1ac0:0:200:0:a5d1:6004:2 017203646E7302697400000100010002A3000004C1CE8D2E r.dns.it. 172800 IN A 193.206.141.46 017203646E7302697400001C00010002A300001020010760FFFFFFFF00000000000000CA r.dns.it. 172800 IN AAAA 2001:760:ffff:ffff::ca 066F7369726973056E616D657802697400000100010002A3000004C1C92806 osiris.namex.it. 172800 IN A 193.201.40.6 066F7369726973056E616D657802697400001C00010002A3000010200107F80010F00A0000000000000006 osiris.namex.it. 172800 IN AAAA 2001:7f8:10:f00a::6 0473657468056E616D657802697400000100010002A3000004C1C92807 seth.namex.it. 172800 IN A 193.201.40.7 0473657468056E616D657802697400001C00010002A3000010200107F80010F00A0000000000000007 seth.namex.it. 172800 IN AAAA 2001:7f8:10:f00a::7 03646E73036E696302697400000100010002A3000004C00CC005 dns.nic.it. 172800 IN A 192.12.192.5 03646E73036E696302697400001C00010002A30000102A000D40000100010000000000000005 dns.nic.it. 172800 IN AAAA 2a00:d40:1:1::5 026A6500000200010002A300001201610A63692D73657276657273036E657400 je. 172800 IN NS a.ci-servers.net. 026A6500000200010002A300001201620A63692D73657276657273036F726700 je. 172800 IN NS b.ci-servers.org. 026A6500000200010002A300001201630A63692D73657276657273036F726700 je. 172800 IN NS c.ci-servers.org. 026A6500000200010002A300001101640A63692D73657276657273026A6500 je. 172800 IN NS d.ci-servers.je. 026A6500000200010002A300001101650A63692D7365727665727302676700 je. 172800 IN NS e.ci-servers.gg. 026A6500000200010002A300000C036E7330026A61036E657400 je. 172800 IN NS ns0.ja.net. 026A6500000200010002A3000011046E73393903646E73036E6574026E7A00 je. 172800 IN NS ns99.dns.net.nz. 026A6500002F000100015180000C026A6D000006200000000003 je. 86400 IN NSEC jm. NS RRSIG NSEC 026A6500002E0001000151800093002F08010001518052F4220052EAD970837700BA8C779914B0CFC12FE2F01AB1CABDA3FEA0B8D0D840D50B7FDBC22826A45ED10A624D1F1D72089ADBBE0EED439E808B29680C4CF45C00116B7DA552456E57CF7D6B2E5AC972E351181408424BE6FBA44CE320D6D1AC64C6D01EB6B03F10527A7BF3890EA13DA6910713669BE153BEBBA54671ACE6F17339510233792A47B0A9 je. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uox3mRSwz8Ev4vAascq9o/6guNDYQNULf9vCKCakXtEKYk0fHXIImtu+Du1DnoCLKWgMTPRcABFrfaVSRW5Xz31rLlrJcuNRGBQIQkvm+6RM4yDW0axkxtAetrA/EFJ6e/OJDqE9ppEHE2ab4VO+u6VGcazm8XM5UQIzeSpHsKk= ;{id = 33655} 01640A63692D73657276657273026A6500000100010002A3000004C1C92AB2 d.ci-servers.je. 172800 IN A 193.201.42.178 026A6D00000200010002A300001B026A6D056363746C640761757468646E730472697065036E657400 jm. 172800 IN NS jm.cctld.authdns.ripe.net. 026A6D00000200010002A3000007026E73026A6D00 jm. 172800 IN NS ns.jm. 026A6D00000200010002A3000018026E730C75746563686A616D6169636103656475026A6D00 jm. 172800 IN NS ns.utechjamaica.edu.jm. 026A6D00000200010002A3000013066E73332D6A6D0366736C036F7267026A6D00 jm. 172800 IN NS ns3-jm.fsl.org.jm. 026A6D00000200010002A30000140670686C6F656D07756F7265676F6E0365647500 jm. 172800 IN NS phloem.uoregon.edu. 026A6D00002F000100015180000C026A6F000006200000000003 jm. 86400 IN NSEC jo. NS RRSIG NSEC 026A6D00002E0001000151800093002F08010001518052F4220052EAD9708377004742B0B3CB3DE9FD2337AA8D8D18F71BB1F8C9685DDD9D3D7E74665BE94EABE50B6906E13D334DFB50820818829AA1D5995AF5CE421D60736AC87B3AED1EF6EAF8FF9DA84F660628EE79DEAF2EE7A1BAC4B484D51B68D656B20607EE2DFEFA59CC4FEBD4CFF01D351D3392F5A7928B26233274A93B76DFB6656ABFD7C49B7001 jm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . R0Kws8s96f0jN6qNjRj3G7H4yWhd3Z09fnRmW+lOq+ULaQbhPTNN+1CCCBiCmqHVmVr1zkIdYHNqyHs67R726vj/nahPZgYo7nnery7nobrEtITVG2jWVrIGB+4t/vpZzE/r1M/wHTUdM5L1p5KLJiMydKk7dt+2ZWq/18SbcAE= ;{id = 33655} 026E730C75746563686A616D6169636103656475026A6D00000100010002A3000004C8097302 ns.utechjamaica.edu.jm. 172800 IN A 200.9.115.2 026E73026A6D00000100010002A3000004C4020106 ns.jm. 172800 IN A 196.2.1.6 066E73332D6A6D0366736C036F7267026A6D00000100010002A3000004C403BF42 ns3-jm.fsl.org.jm. 172800 IN A 196.3.191.66 026A6F00000200010002A300001B026A6F056363746C640761757468646E730472697065036E657400 jo. 172800 IN NS jo.cctld.authdns.ripe.net. 026A6F00000200010002A300000D037269700370736703636F6D00 jo. 172800 IN NS rip.psg.com. 026A6F00000200010002A300001104616D7261036E696303676F76026A6F00 jo. 172800 IN NS amra.nic.gov.jo. 026A6F00000200010002A3000012057065747261036E696303676F76026A6F00 jo. 172800 IN NS petra.nic.gov.jo. 026A6F00000200010002A3000016096A6F7264616E317374036E696303676F76026A6F00 jo. 172800 IN NS jordan1st.nic.gov.jo. 026A6F00002F000100015180000E046A6F6273000006200000000003 jo. 86400 IN NSEC jobs. NS RRSIG NSEC 026A6F00002E0001000151800093002F08010001518052F4220052EAD97083770093274377A69B025DBE2A666676B5E46DCEF7DBBD2689FEBB1B585652DDF1C41C41C80842E2D69AAA20F6ED04AC7661EA87D2356453AAC735A8DB45A0897EE05FEECD00A6ECB1D07D3877ACA8624B60869DAF2DD252C55095E1085914389D349568B7E5E16A1F23EA46A51313A22272DA33A87EB27E1BDD6DB0E46D4F8F9D2C2B jo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kydDd6abAl2+KmZmdrXkbc73270mif67G1hWUt3xxBxByAhC4taaqiD27QSsdmHqh9I1ZFOqxzWo20WgiX7gX+7NAKbssdB9OHesqGJLYIadry3SUsVQleEIWRQ4nTSVaLfl4WofI+pGpRMToiJy2jOofrJ+G91tsORtT4+dLCs= ;{id = 33655} 04616D7261036E696303676F76026A6F00000100010002A3000004C1BC4267 amra.nic.gov.jo. 172800 IN A 193.188.66.103 096A6F7264616E317374036E696303676F76026A6F00000100010002A3000004C1BC4513 jordan1st.nic.gov.jo. 172800 IN A 193.188.69.19 057065747261036E696303676F76026A6F00000100010002A3000004C1BC4202 petra.nic.gov.jo. 172800 IN A 193.188.66.2 046A6F627300000200010002A300000E026135056E73746C6403636F6D00 jobs. 172800 IN NS a5.nstld.com. 046A6F627300000200010002A300000E026335056E73746C6403636F6D00 jobs. 172800 IN NS c5.nstld.com. 046A6F627300000200010002A300000E026435056E73746C6403636F6D00 jobs. 172800 IN NS d5.nstld.com. 046A6F627300000200010002A300000E026635056E73746C6403636F6D00 jobs. 172800 IN NS f5.nstld.com. 046A6F627300000200010002A300000E026735056E73746C6403636F6D00 jobs. 172800 IN NS g5.nstld.com. 046A6F627300000200010002A300000E026835056E73746C6403636F6D00 jobs. 172800 IN NS h5.nstld.com. 046A6F627300000200010002A300000E026C35056E73746C6403636F6D00 jobs. 172800 IN NS l5.nstld.com. 046A6F627300002F000100015180000C026A70000006200000000003 jobs. 86400 IN NSEC jp. NS RRSIG NSEC 046A6F627300002E0001000151800093002F08010001518052F4220052EAD9708377001A12E5618E5F024749DBEEE341DC9AA386D04E7176AFFE7635A4423C8905C83D491A6339A4F5BEF576164EF204700EC47626DC299390461D0A80998039EB491C677728A75B20FACD94E9AE2FB8B5F007D47C12B8C339553F0F68FD6C4F147ADA757DD2B6A9304FBE99E99DE977F9FFD5B19D8339EFC304F55E0C34FB00909ED7 jobs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GhLlYY5fAkdJ2+7jQdyao4bQTnF2r/52NaRCPIkFyD1JGmM5pPW+9XYWTvIEcA7EdibcKZOQRh0KgJmAOetJHGd3KKdbIPrNlOmuL7i18AfUfBK4wzlVPw9o/WxPFHradX3StqkwT76Z6Z3pd/n/1bGdgznvwwT1Xgw0+wCQntc= ;{id = 33655} 026A7000002F0001000151800010066B617566656E000006200000000013 jp. 86400 IN NSEC kaufen. NS DS RRSIG NSEC 026A7000002E0001000151800093002F08010001518052F4220052EAD9708377008AEF1993DEBC2C0C565A76DC8976F3E2FBE9F154590C6D48C7EECDB4B156FB77C866B94FA077D01127891F7919C3C7CCA4224DCF15A647DF51EA3AE98E5DE188B5CDDCDBA5FEC29EA07406C77E6F783EC33ADBABBD18C2CD7FB96EFDC14231FC92F2CAFFFB0D2E94F52C6ADF18864263185634441F400038B9AEA9C142D864CD jp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iu8Zk968LAxWWnbciXbz4vvp8VRZDG1Ix+7NtLFW+3fIZrlPoHfQESeJH3kZw8fMpCJNzxWmR99R6jrpjl3hiLXN3Nul/sKeoHQGx35veD7DOturvRjCzX+5bv3BQjH8kvLK//sNLpT1LGrfGIZCYxhWNEQfQAA4ua6pwULYZM0= ;{id = 33655} 026A7000002E0001000151800093002B08010001518052F4220052EAD970837700AE1DA71068F696C388143B7597FFD580FF797C1B0FBDDC0FFAC9B5E2D309819089B8C8CA2D70200D243330C5AC71FC08D9B9118CD1681358EC363411536F608E8485E33B41B73CB1587F2BF986612A7D3691CE59E0BA599143608465D8C8440833E466C82E8FDCA09D5298A62A83886A6E8C93E6391F1052DADA9A74F6B748F8 jp. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . rh2nEGj2lsOIFDt1l//VgP95fBsPvdwP+sm14tMJgZCJuMjKLXAgDSQzMMWscfwI2bkRjNFoE1jsNjQRU29gjoSF4ztBtzyxWH8r+YZhKn02kc5Z4LpZkUNghGXYyEQIM+RmyC6P3KCdUpimKoOIam6Mk+Y5HxBS2tqadPa3SPg= ;{id = 33655} 026A7000000200010002A300000A016103646E73026A7000 jp. 172800 IN NS a.dns.jp. 026A7000000200010002A300000A016203646E73026A7000 jp. 172800 IN NS b.dns.jp. 026A7000000200010002A300000A016303646E73026A7000 jp. 172800 IN NS c.dns.jp. 026A7000000200010002A300000A016403646E73026A7000 jp. 172800 IN NS d.dns.jp. 026A7000000200010002A300000A016503646E73026A7000 jp. 172800 IN NS e.dns.jp. 026A7000000200010002A300000A016603646E73026A7000 jp. 172800 IN NS f.dns.jp. 026A7000000200010002A300000A016703646E73026A7000 jp. 172800 IN NS g.dns.jp. 026A7000002B0001000151800018ED1C080196591579EBE5582AF021571AB2359D274A20E62F jp. 86400 IN DS 60700 8 1 96591579EBE5582AF021571AB2359D274A20E62F 026A7000002B0001000151800024ED1C0802FC26CDBBDB18FAB2D9D0DA6933DA77D7384BE4BBC2DAF75AF9CE3CC99797C086 jp. 86400 IN DS 60700 8 2 FC26CDBBDB18FAB2D9D0DA6933DA77D7384BE4BBC2DAF75AF9CE3CC99797C086 046E7332300369696A026164026A7000000100010002A3000004CAE802A1 ns20.iij.ad.jp. 172800 IN A 202.232.2.161 046E7332300369696A026164026A7000001C00010002A300001020010240000000000000000000000161 ns20.iij.ad.jp. 172800 IN AAAA 2001:240::161 016103646E73026A7000000100010002A3000004CB770101 a.dns.jp. 172800 IN A 203.119.1.1 016103646E73026A7000001C00010002A300001020010DC4000000000000000000000001 a.dns.jp. 172800 IN AAAA 2001:dc4::1 016203646E73026A7000000100010002A3000004CA0C1E83 b.dns.jp. 172800 IN A 202.12.30.131 016203646E73026A7000001C00010002A300001020010DC2000000000000000000000001 b.dns.jp. 172800 IN AAAA 2001:dc2::1 016303646E73026A7000000100010002A30000049C9A6405 c.dns.jp. 172800 IN A 156.154.100.5 016303646E73026A7000001C00010002A300001020010502AD0900000000000000000005 c.dns.jp. 172800 IN AAAA 2001:502:ad09::5 016403646E73026A7000000100010002A3000004D28AAFF4 d.dns.jp. 172800 IN A 210.138.175.244 016403646E73026A7000001C00010002A300001020010240000000000000000000000053 d.dns.jp. 172800 IN AAAA 2001:240::53 016503646E73026A7000000100010002A3000004C0322B35 e.dns.jp. 172800 IN A 192.50.43.53 016503646E73026A7000001C00010002A300001020010200C00000000000000000000035 e.dns.jp. 172800 IN AAAA 2001:200:c000::35 016603646E73026A7000000100010002A300000496640608 f.dns.jp. 172800 IN A 150.100.6.8 016603646E73026A7000001C00010002A3000010200102F8000001000000000000000153 f.dns.jp. 172800 IN AAAA 2001:2f8:0:100::153 016703646E73026A7000000100010002A3000004CB772801 g.dns.jp. 172800 IN A 203.119.40.1 066B617566656E00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 kaufen. 172800 IN NS demand.beta.aridns.net.au. 066B617566656E00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 kaufen. 172800 IN NS demand.alpha.aridns.net.au. 066B617566656E00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 kaufen. 172800 IN NS demand.delta.aridns.net.au. 066B617566656E00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 kaufen. 172800 IN NS demand.gamma.aridns.net.au. 066B617566656E00002B00010001518000245D9A0802EF294C18A9BB33EE9D090585EF1C0F1575AA3F7A59CB07DBDDDE9CEC4D67BD93 kaufen. 86400 IN DS 23962 8 2 EF294C18A9BB33EE9D090585EF1C0F1575AA3F7A59CB07DBDDDE9CEC4D67BD93 066B617566656E00002E0001000151800093002B08010001518052F4220052EAD9708377000D8FECEC720ED000285C2EA0B52C051E3FE345E86BED373AF5717C5C506C8FE4200B452A8A71DA7AB780E30717B78826DB75D008DA55F3731D0A67FD8489805C5A2F2AA2B7E7BB455A267BB34880EC34A504D64DE1088C449057BBDDD124210BE4ACCD7C75CAB8D78967FC0D6B45FECC885F1D4311279842E054AF48C6038592 kaufen. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . DY/s7HIO0AAoXC6gtSwFHj/jRehr7Tc69XF8XFBsj+QgC0UqinHaereA4wcXt4gm23XQCNpV83MdCmf9hImAXFovKqK357tFWiZ7s0iA7DSlBNZN4QiMRJBXu93RJCEL5KzNfHXKuNeJZ/wNa0X+zIhfHUMRJ5hC4FSvSMYDhZI= ;{id = 33655} 066B617566656E00002E0001000151800093002F08010001518052F4220052EAD970837700BD2FB1AFCB118AB3DDFE6CA1D1B0DE1F2F736397CF661576D02ED88A9E0ABB7664AAECE5903B1FE76BBDE9486320E9DFCD4AA4BD96ECEAB80EB3E3A75A1D921FB397EC749A32AE75C1AB7FC4187EADA3EF8D856D76E8478D6688288E7DE81AB07A2D98643C49334404CC599C3E1961767A049E4854AD08E9FF4DBE397A4098DC kaufen. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vS+xr8sRirPd/myh0bDeHy9zY5fPZhV20C7Yip4Ku3ZkquzlkDsf52u96UhjIOnfzUqkvZbs6rgOs+OnWh2SH7OX7HSaMq51wat/xBh+raPvjYVtduhHjWaIKI596Bqwei2YZDxJM0QEzFmcPhlhdnoEnkhUrQjp/02+OXpAmNw= ;{id = 33655} 066B617566656E00002F000100015180000C026B65000006200000000013 kaufen. 86400 IN NSEC ke. NS DS RRSIG NSEC 026B6500000200010002A3000018026E7307616E7963617374056B656E6963026F72026B6500 ke. 172800 IN NS ns.anycast.kenic.or.ke. 026B6500000200010002A3000011036E733104636F7A61036E6574027A6100 ke. 172800 IN NS ns1.coza.net.za. 026B6500000200010002A3000013056D7A697A69056B656E6963026F72026B6500 ke. 172800 IN NS mzizi.kenic.or.ke. 026B6500000200010002A3000013056E732D6B6507616672696E6963036E657400 ke. 172800 IN NS ns-ke.afrinic.net. 026B6500002F000100015180000C026B67000006200000000003 ke. 86400 IN NSEC kg. NS RRSIG NSEC 026B6500002E0001000151800093002F08010001518052F4220052EAD97083770014F89E5331D38EA09C31E71505F737C867E0587A29EA0123105B2F3B34E971568D04C23187C2A98588428ACF715AF3A707D211C81A52588650B541E253A6DF84333707F7D09A64075094AE5BED494233E7C30FDB989A159C227F8DE851579689D5D315EDA321BC2C1FFAE30138046DDC4A6B534F6C5F59C29444553636A93C48 ke. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FPieUzHTjqCcMecVBfc3yGfgWHop6gEjEFsvOzTpcVaNBMIxh8KphYhCis9xWvOnB9IRyBpSWIZQtUHiU6bfhDM3B/fQmmQHUJSuW+1JQjPnww/bmJoVnCJ/jehRV5aJ1dMV7aMhvCwf+uMBOARt3EprU09sX1nClERVNjapPEg= ;{id = 33655} 026E7307616E7963617374056B656E6963026F72026B6500000100010002A3000004CC3DD807 ns.anycast.kenic.or.ke. 172800 IN A 204.61.216.7 026E7307616E7963617374056B656E6963026F72026B6500001C00010002A3000010200105000014600700AD000000000001 ns.anycast.kenic.or.ke. 172800 IN AAAA 2001:500:14:6007:ad::1 056D7A697A69056B656E6963026F72026B6500000100010002A3000004C4010482 mzizi.kenic.or.ke. 172800 IN A 196.1.4.130 056D7A697A69056B656E6963026F72026B6500000100010002A3000004C6204309 mzizi.kenic.or.ke. 172800 IN A 198.32.67.9 026B6700000200010002A300001B026B67056363746C640761757468646E730472697065036E657400 kg. 172800 IN NS kg.cctld.authdns.ripe.net. 026B6700000200010002A3000007026E73026B6700 kg. 172800 IN NS ns.kg. 026B6700002B0001000151800018C3220501285C47CA00E9416E0C6BD6F7317BF57B0EE1CC7D kg. 86400 IN DS 49954 5 1 285C47CA00E9416E0C6BD6F7317BF57B0EE1CC7D 026B6700002B0001000151800024C32205029166CA43B29F27BC7CC8B758F7027724EA2B860DBE49CF08A2763EA0E95E8754 kg. 86400 IN DS 49954 5 2 9166CA43B29F27BC7CC8B758F7027724EA2B860DBE49CF08A2763EA0E95E8754 026B6700002E0001000151800093002B08010001518052F4220052EAD9708377008936CBDA36AE705DA31651F76845C568E095EA9462A2F763DB599DB85A9DE657D114CE4EA51BEF9C3EEEB5D065893777CDEEA106A5E0589E545349BC12AA7E4161DA058E2D0A2F402F19EB2BE84D75731A9B46F373294F831BA6F56F5138A2A6277D7F9E4E9D2358153EE68ECE0FE5730F74DCE8C512666B25D4BF50D2E56E00 kg. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iTbL2jaucF2jFlH3aEXFaOCV6pRiovdj21mduFqd5lfRFM5OpRvvnD7utdBliTd3ze6hBqXgWJ5UU0m8Eqp+QWHaBY4tCi9ALxnrK+hNdXMam0bzcylPgxum9W9ROKKmJ31/nk6dI1gVPuaOzg/lcw903OjFEmZrJdS/UNLlbgA= ;{id = 33655} 026B6700002E0001000151800093002F08010001518052F4220052EAD9708377009CAE5758502BB9F0A11C3D929732C1B8437ECF559923724CED0F100C1CB47751C75547CBA97D7B7BDA98FFED1B6A515FDFC4AD228530261A8618CF61A0CD97D32C184CEC35A410B23F17F42C14E7C24E17E8A5D5FA08A1E06ECE1AE9FE08FA9B2F6DB99A003CECB79E20658FFED9800A29A601DD6193F7D9205A86394BC43413 kg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nK5XWFArufChHD2SlzLBuEN+z1WZI3JM7Q8QDBy0d1HHVUfLqX17e9qY/+0balFf38StIoUwJhqGGM9hoM2X0ywYTOw1pBCyPxf0LBTnwk4X6KXV+gih4G7OGun+CPqbL225mgA87LeeIGWP/tmACimmAd1hk/fZIFqGOUvENBM= ;{id = 33655} 026B6700002F000100015180000C026B68000006200000000013 kg. 86400 IN NSEC kh. NS DS RRSIG NSEC 026E73026B6700000100010002A3000004C326A024 ns.kg. 172800 IN A 195.38.160.36 026B6800000200010002A3000012026E730663616D6E657403636F6D026B6800 kh. 172800 IN NS ns.camnet.com.kh. 026B6800000200010002A3000014026E730874656C657375726603636F6D026B6800 kh. 172800 IN NS ns.telesurf.com.kh. 026B6800000200010002A3000010036E733103646E73036E6574026B6800 kh. 172800 IN NS ns1.dns.net.kh. 026B6800000200010002A300001404646E7331066F6E6C696E6503636F6D026B6800 kh. 172800 IN NS dns1.online.com.kh. 026B6800000200010002A300001004736563330561706E6963036E657400 kh. 172800 IN NS sec3.apnic.net. 026B6800000200010002A3000010056E732D6B680472697065036E657400 kh. 172800 IN NS ns-kh.ripe.net. 026B6800002F000100015180000C026B69000006200000000003 kh. 86400 IN NSEC ki. NS RRSIG NSEC 026B6800002E0001000151800093002F08010001518052F4220052EAD9708377003BCBFB316DB8F18B3DA4E7DFEADBEF9276167D5B5CCDD5CB6324115A25870BD4326313EC8A2FAD4CBA878AE455C1A6BB173A6A77446FE84517365D98B8EB02A42B9DEABDBC75D050D33F8AA4450C12D491122842DD6E8CD4CE34799DE1ACB6C30DEE015141E98D3B2E410675DBEA8734DC0E6A3E53105698D42CE576BC344432 kh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . O8v7MW248Ys9pOff6tvvknYWfVtczdXLYyQRWiWHC9QyYxPsii+tTLqHiuRVwaa7Fzpqd0Rv6EUXNl2YuOsCpCud6r28ddBQ0z+KpEUMEtSREihC3W6M1M40eZ3hrLbDDe4BUUHpjTsuQQZ12+qHNNwOaj5TEFaY1Czldrw0RDI= ;{id = 33655} 026E730663616D6E657403636F6D026B6800000100010002A3000004CBDF2003 ns.camnet.com.kh. 172800 IN A 203.223.32.3 04646E7331066F6E6C696E6503636F6D026B6800000100010002A3000004CBBD8001 dns1.online.com.kh. 172800 IN A 203.189.128.1 026E730874656C657375726603636F6D026B6800000100010002A3000004CB904103 ns.telesurf.com.kh. 172800 IN A 203.144.65.3 036E733103646E73036E6574026B6800000100010002A3000004CBDF2015 ns1.dns.net.kh. 172800 IN A 203.223.32.21 026B6900000200010002A3000010036B69310664796E746C64036E657400 ki. 172800 IN NS ki1.dyntld.net. 026B6900000200010002A3000010036B69330664796E746C64036E657400 ki. 172800 IN NS ki3.dyntld.net. 026B6900000200010002A300000C03706368036E6963026B6900 ki. 172800 IN NS pch.nic.ki. 026B6900000200010002A300001006736E732D706203697363036F726700 ki. 172800 IN NS sns-pb.isc.org. 026B6900002B0001000151800024E8940802FD3B27E5C171B883FE2815DDE7FBBE7F2E5AF826BFF47C33B5970F53E2A855DE ki. 86400 IN DS 59540 8 2 FD3B27E5C171B883FE2815DDE7FBBE7F2E5AF826BFF47C33B5970F53E2A855DE 026B6900002E0001000151800093002B08010001518052F4220052EAD9708377001877F890A592B558C22FC511C4B6EB75F6121E4A4863337F557BAF5CEF2861E5FC244E4B96362E47B0999DE75333460D784CC2A1D6D3E8236B84D8A94FE87853F6E6FA096142706C37369D17E65EB269C2B84EBFCEDC54F0E8731D8DB504D785DEC9CCD478FFE244895DABCAA41AE31E816640150327FC1378AF14F6E2259002 ki. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GHf4kKWStVjCL8URxLbrdfYSHkpIYzN/VXuvXO8oYeX8JE5LljYuR7CZnedTM0YNeEzCodbT6CNrhNipT+h4U/bm+glhQnBsNzadF+ZesmnCuE6/ztxU8OhzHY21BNeF3snM1Hj/4kSJXavKpBrjHoFmQBUDJ/wTeK8U9uIlkAI= ;{id = 33655} 026B6900002E0001000151800093002F08010001518052F4220052EAD9708377002B65491AACB4BEBBC8C615F18764002ED074BE34D172658B001D318999E1369FF237B0EC82E3D82A38CA1E20E0CCA2D17C89C587E456678E7B444FD7823D7EBCAE41F4502BC1D991B3F20C75BB03974000A9544FD79F861D1D40A676033D5AFE0FA209C279266C861F996DF2FE485CD923FF12077C2BDFA9DCE41A327AE6628D ki. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K2VJGqy0vrvIxhXxh2QALtB0vjTRcmWLAB0xiZnhNp/yN7DsguPYKjjKHiDgzKLRfInFh+RWZ457RE/Xgj1+vK5B9FArwdmRs/IMdbsDl0AAqVRP15+GHR1ApnYDPVr+D6IJwnkmbIYfmW3y/khc2SP/Egd8K9+p3OQaMnrmYo0= ;{id = 33655} 026B6900002F000100015180000D036B696D000006200000000013 ki. 86400 IN NSEC kim. NS DS RRSIG NSEC 03706368036E6963026B6900000100010002A3000004CC3DD81A pch.nic.ki. 172800 IN A 204.61.216.26 03706368036E6963026B6900001C00010002A3000010200105000014602600AD000000000001 pch.nic.ki. 172800 IN AAAA 2001:500:14:6026:ad::1 036B696D00000200010002A300000C026130036E6963036B696D00 kim. 172800 IN NS a0.nic.kim. 036B696D00000200010002A300000C026132036E6963036B696D00 kim. 172800 IN NS a2.nic.kim. 036B696D00000200010002A300000C026230036E6963036B696D00 kim. 172800 IN NS b0.nic.kim. 036B696D00000200010002A300000C026330036E6963036B696D00 kim. 172800 IN NS c0.nic.kim. 036B696D00002B00010001518000185F9A07012DD484EEF79401CBFCA231E6CBF4F1BB165CCE14 kim. 86400 IN DS 24474 7 1 2DD484EEF79401CBFCA231E6CBF4F1BB165CCE14 036B696D00002B00010001518000245F9A07022384A0380782DA192D1C1F6DA55A106551EF4C5233CD479536101921D35411E5 kim. 86400 IN DS 24474 7 2 2384A0380782DA192D1C1F6DA55A106551EF4C5233CD479536101921D35411E5 036B696D00002E0001000151800093002B08010001518052F4220052EAD9708377001C8D596EA78C3F453CACA4F1BAD2032CB3E0ACF1DEAB04216DCE8C660754B38F5AF459863B8967C5983B22C51DF57644D5FC56CA6596E054AF23E77C0EDC061C1EE5A8A5C0FB189A35FFA34AA8607E52B84089C0AAB89D5A0F6872850F2B3E326487A39A93C43E365BB5803E3D8BE84B9D48F805F335F04C4D128436035C9DF0 kim. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . HI1ZbqeMP0U8rKTxutIDLLPgrPHeqwQhbc6MZgdUs49a9FmGO4lnxZg7IsUd9XZE1fxWymWW4FSvI+d8DtwGHB7lqKXA+xiaNf+jSqhgflK4QInAqridWg9ocoUPKz4yZIejmpPEPjZbtYA+PYvoS51I+AXzNfBMTRKENgNcnfA= ;{id = 33655} 036B696D00002E0001000151800093002F08010001518052F4220052EAD970837700978A7AC12CAD840C7C095BAAFAAB07218F9C9F3C5C53CF213BC21DA6DFC4E303F833BC8827800D46117D4FD1EE2A7EF06431D3C13EE686C97C06E87F4158683AFA085ECAF0FFD321924AD6E0993C63509543B77B90428DDE3E18F849D06B0384E9E7CBB90DB6C4161FE4627951DF0447A37572429229A075CEA0AC0813441566 kim. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . l4p6wSythAx8CVuq+qsHIY+cnzxcU88hO8Idpt/E4wP4M7yIJ4ANRhF9T9HuKn7wZDHTwT7mhsl8Buh/QVhoOvoIXsrw/9MhkkrW4Jk8Y1CVQ7d7kEKN3j4Y+EnQawOE6efLuQ22xBYf5GJ5Ud8ER6N1ckKSKaB1zqCsCBNEFWY= ;{id = 33655} 036B696D00002F0001000151800011076B69746368656E000006200000000013 kim. 86400 IN NSEC kitchen. NS DS RRSIG NSEC 026130036E6963036B696D00000100010002A300000441161C01 a0.nic.kim. 172800 IN A 65.22.28.1 026130036E6963036B696D00001C00010002A30000102A018840001E00000000000000000001 a0.nic.kim. 172800 IN AAAA 2a01:8840:1e::1 026132036E6963036B696D00000100010002A300000441161F01 a2.nic.kim. 172800 IN A 65.22.31.1 026132036E6963036B696D00001C00010002A30000102A018840002100000000000000000001 a2.nic.kim. 172800 IN AAAA 2a01:8840:21::1 026230036E6963036B696D00000100010002A300000441161D01 b0.nic.kim. 172800 IN A 65.22.29.1 026230036E6963036B696D00001C00010002A30000102A018840001F00000000000000000001 b0.nic.kim. 172800 IN AAAA 2a01:8840:1f::1 026330036E6963036B696D00000100010002A300000441161E01 c0.nic.kim. 172800 IN A 65.22.30.1 026330036E6963036B696D00001C00010002A30000102A018840002000000000000000000001 c0.nic.kim. 172800 IN AAAA 2a01:8840:20::1 076B69746368656E00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 kitchen. 172800 IN NS demand.beta.aridns.net.au. 076B69746368656E00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 kitchen. 172800 IN NS demand.alpha.aridns.net.au. 076B69746368656E00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 kitchen. 172800 IN NS demand.delta.aridns.net.au. 076B69746368656E00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 kitchen. 172800 IN NS demand.gamma.aridns.net.au. 076B69746368656E00002B0001000151800024FA0908024B1DD622AF68E8DC6E5CBB00AFE42399B8A15591891203D4B745EF0FA03EA2C9 kitchen. 86400 IN DS 64009 8 2 4B1DD622AF68E8DC6E5CBB00AFE42399B8A15591891203D4B745EF0FA03EA2C9 076B69746368656E00002E0001000151800093002B08010001518052F4220052EAD970837700A99C824954D9DD72466989B6FA56BC7D3A3AF321978E3184CCFA1955ED8680A97547CA56F1B6A652FC187132354463CFD6E28AA98174C064E08BD6FE38AF55CC198EFD4683E22090E76DFF453375CDEB7C38C5BBB2817DAC9CE18CACBFACCD7A41E9F92FBBD8ACE425D5C9FE36D2F264E541C52BD25FA660F65246052E802AF3 kitchen. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qZyCSVTZ3XJGaYm2+la8fTo68yGXjjGEzPoZVe2GgKl1R8pW8bamUvwYcTI1RGPP1uKKqYF0wGTgi9b+OK9VzBmO/UaD4iCQ523/RTN1zet8OMW7soF9rJzhjKy/rM16Qen5L7vYrOQl1cn+NtLyZOVBxSvSX6Zg9lJGBS6AKvM= ;{id = 33655} 076B69746368656E00002E0001000151800093002F08010001518052F4220052EAD9708377009B760542BD492803A2D51F8AFEBC3B15B4251755D4A31B29B2C38DE59EDB5EB068A80AB31A966E4DC7F81EF3024C18E147FD729AC6AE910080E1D6416AC695E399F457FAFD445A4450A5523010C1D5A19213DB801CECC0BD609D15F529647A9F89DC204E3628ABBA3070528D3ED20625603B8253D391E6A35964C26BB1CC6DC3 kitchen. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . m3YFQr1JKAOi1R+K/rw7FbQlF1XUoxspssON5Z7bXrBoqAqzGpZuTcf4HvMCTBjhR/1ymsaukQCA4dZBasaV45n0V/r9RFpEUKVSMBDB1aGSE9uAHOzAvWCdFfUpZHqfidwgTjYoq7owcFKNPtIGJWA7glPTkeajWWTCa7HMbcM= ;{id = 33655} 076B69746368656E00002F000100015180000E046B697769000006200000000013 kitchen. 86400 IN NSEC kiwi. NS DS RRSIG NSEC 046B69776900000200010002A300000F0161026E73036E6963046B69776900 kiwi. 172800 IN NS a.ns.nic.kiwi. 046B69776900000200010002A300000F0162026E73036E6963046B69776900 kiwi. 172800 IN NS b.ns.nic.kiwi. 046B69776900002B0001000151800024169A0802ADFED621AFE74743D01AF9CD0F380F4F95EF756080321CD541A1D6B31B3FDD30 kiwi. 86400 IN DS 5786 8 2 ADFED621AFE74743D01AF9CD0F380F4F95EF756080321CD541A1D6B31B3FDD30 046B69776900002E0001000151800093002B08010001518052F4220052EAD9708377007E35A32BB11738BFA9D9E60B27062D3DFE621E2AD9C8905970399432149ACFFC3FD9E0DDB5B209C8AC6DA5D975463F2F01D5623D7A4B2135704862AA30E9D5D6E08740EEB9791330EEEFC2B8AA4DB5DFC516C8421A355088DBE51FF9E52ADD8EAEF6DB9D35F893046C58AE2DE23765B31124030D4C8E8609144843F8BD1B8A9A kiwi. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . fjWjK7EXOL+p2eYLJwYtPf5iHirZyJBZcDmUMhSaz/w/2eDdtbIJyKxtpdl1Rj8vAdViPXpLITVwSGKqMOnV1uCHQO65eRMw7u/CuKpNtd/FFshCGjVQiNvlH/nlKt2OrvbbnTX4kwRsWK4t4jdlsxEkAw1MjoYJFEhD+L0bipo= ;{id = 33655} 046B69776900002E0001000151800093002F08010001518052F4220052EAD970837700BCE9827878741D33C023336A12DE32607A86B85AA499923873381C53D5EF3ECC141BAA5CB45DA0708DB7594D400D6D31700B1FAC94DBE30BAB613DF1ED76D8FF1C8E67D52D1C8D859B7C4C69B06C277BF00BC61877CF8398D11CB4B88253405FBCE07C6B97724E13268EE74E2F65E015C62E34301B9738E383391A0C22EA2A36 kiwi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vOmCeHh0HTPAIzNqEt4yYHqGuFqkmZI4czgcU9XvPswUG6pctF2gcI23WU1ADW0xcAsfrJTb4wurYT3x7XbY/xyOZ9UtHI2Fm3xMabBsJ3vwC8YYd8+DmNEctLiCU0BfvOB8a5dyThMmjudOL2XgFcYuNDAblzjjgzkaDCLqKjY= ;{id = 33655} 046B69776900002F000100015180000C026B6D000006200000000013 kiwi. 86400 IN NSEC km. NS DS RRSIG NSEC 0161026E73036E6963046B69776900000100010002A300000448003204 a.ns.nic.kiwi. 172800 IN A 72.0.50.4 0161026E73036E6963046B69776900001C00010002A3000010262001710A0200AD0000000000000004 a.ns.nic.kiwi. 172800 IN AAAA 2620:171:a02:ad::4 0162026E73036E6963046B69776900000100010002A3000004482A7204 b.ns.nic.kiwi. 172800 IN A 72.42.114.4 0162026E73036E6963046B69776900001C00010002A3000010262001710D0200DC0000000000000004 b.ns.nic.kiwi. 172800 IN AAAA 2620:171:d02:dc::4 026B6D00000200010002A300000D04646E7331036E6963026B6D00 km. 172800 IN NS dns1.nic.km. 026B6D00000200010002A300000D04646E7332036E6963026B6D00 km. 172800 IN NS dns2.nic.km. 026B6D00000200010002A3000013056E732D6B6D07616672696E6963036E657400 km. 172800 IN NS ns-km.afrinic.net. 026B6D00002F000100015180000C026B6E000006200000000003 km. 86400 IN NSEC kn. NS RRSIG NSEC 026B6D00002E0001000151800093002F08010001518052F4220052EAD970837700384ECC4183607F4DF416A58319690A69D97539EEF639954CEFA7043B6DEDC68AFA7A2B6D3631E7CDF652DC543B25EF2D54D7E86708392E8745D780FD90DABD85639FE3A4D39014BB9868BF0BBBAE8EF90130389262823D0F7F6CC6D9D0E44C79D785F64888F74870F7816BB23F55D96A2438344800D0B995497733447CC48D89 km. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OE7MQYNgf030FqWDGWkKadl1Oe72OZVM76cEO23txor6eittNjHnzfZS3FQ7Je8tVNfoZwg5LodF14D9kNq9hWOf46TTkBS7mGi/C7uujvkBMDiSYoI9D39sxtnQ5Ex514X2SIj3SHD3gWuyP1XZaiQ4NEgA0LmVSXczRHzEjYk= ;{id = 33655} 04646E7331036E6963026B6D00000100010002A3000004C5FFE012 dns1.nic.km. 172800 IN A 197.255.224.18 04646E7332036E6963026B6D00000100010002A3000004C5FFE042 dns2.nic.km. 172800 IN A 197.255.224.66 026B6E00000200010002A300000A016103646E7302747700 kn. 172800 IN NS a.dns.tw. 026B6E00000200010002A300000A016203646E7302747700 kn. 172800 IN NS b.dns.tw. 026B6E00000200010002A300000A016303646E7302747700 kn. 172800 IN NS c.dns.tw. 026B6E00002F000100015180000C026B70000006200000000003 kn. 86400 IN NSEC kp. NS RRSIG NSEC 026B6E00002E0001000151800093002F08010001518052F4220052EAD9708377003883916C773801CFA76947038564491B0FC3476719A6C04FB1DB45F7B4975BE381C6EB66A92A679111399179485A4EDFD5133F4E3BBFF2E4C530E87B51D1292AFF19C15104C73CA9D2533312A8F11BCB1A41FF1EF0EAC406F6720CE21FAC8D6B8DBA1086998990AFE8B5E9198A85ADA78BED33EBCAD2202FCE6A22A44FC9D04C kn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OIORbHc4Ac+naUcDhWRJGw/DR2cZpsBPsdtF97SXW+OBxutmqSpnkRE5kXlIWk7f1RM/Tju/8uTFMOh7UdEpKv8ZwVEExzyp0lMzEqjxG8saQf8e8OrEBvZyDOIfrI1rjboQhpmJkK/otekZioWtp4vtM+vK0iAvzmoipE/J0Ew= ;{id = 33655} 026B7000000200010002A300000D036E7331046B707463026B7000 kp. 172800 IN NS ns1.kptc.kp. 026B7000000200010002A300000D036E7332046B707463026B7000 kp. 172800 IN NS ns2.kptc.kp. 026B7000002F000100015180000C026B72000006200000000003 kp. 86400 IN NSEC kr. NS RRSIG NSEC 026B7000002E0001000151800093002F08010001518052F4220052EAD9708377001E72268939F6EFEDDC9B815604C78E9327EB1F44C4716C8ACE10C80D7295D356658552EC0D9339D3B1F46EB320D7759E36E492037BC8BE54B3B7003F0D6141D4AE2AC4AFF6A545BFBAA3686FBB5565E4D196A6054867D8D11F836C0ADBB298A49582F7165644989FBF17A01D90D175CC2EB36B6C71BD581C81024B2550807D4B kp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HnImiTn27+3cm4FWBMeOkyfrH0TEcWyKzhDIDXKV01ZlhVLsDZM507H0brMg13WeNuSSA3vIvlSztwA/DWFB1K4qxK/2pUW/uqNob7tVZeTRlqYFSGfY0R+DbArbspiklYL3FlZEmJ+/F6AdkNF1zC6za2xxvVgcgQJLJVCAfUs= ;{id = 33655} 036E7331046B707463026B7000000100010002A3000004AF2DB00F ns1.kptc.kp. 172800 IN A 175.45.176.15 036E7332046B707463026B7000000100010002A3000004AF2DB010 ns2.kptc.kp. 172800 IN A 175.45.176.16 026B7200000200010002A300000A016203646E73026B7200 kr. 172800 IN NS b.dns.kr. 026B7200000200010002A300000A016303646E73026B7200 kr. 172800 IN NS c.dns.kr. 026B7200000200010002A300000A016403646E73026B7200 kr. 172800 IN NS d.dns.kr. 026B7200000200010002A300000A016503646E73026B7200 kr. 172800 IN NS e.dns.kr. 026B7200000200010002A300000A016603646E73026B7200 kr. 172800 IN NS f.dns.kr. 026B7200000200010002A300000A016703646E73026B7200 kr. 172800 IN NS g.dns.kr. 026B7200002B000100015180002429FA0702A626C147CF76351B03CD26C03EBCC78C0DE48D87DD81F0919995824336236F96 kr. 86400 IN DS 10746 7 2 A626C147CF76351B03CD26C03EBCC78C0DE48D87DD81F0919995824336236F96 026B7200002B000100015180002444D90702FB939059F4B67BBA1E8AC37E35811E506488B2D8CFF807AF873B2116B5676B5C kr. 86400 IN DS 17625 7 2 FB939059F4B67BBA1E8AC37E35811E506488B2D8CFF807AF873B2116B5676B5C 026B7200002E0001000151800093002B08010001518052F4220052EAD9708377008C838F7F55DDCEFF388634B33D6F81DB86231CB7DF68ECBF740E63CD5A8BFE94B84238FCB66B1C71D22F40563EBEB5AD5E15D94867F0D0B1ACC357942A83D8DD51F1343BD4A58B6032C46BD4DCF62665D06B5FB0EEB530791E380B8F6850C36B0EDCD6AE292AC44B0A089003367DEA9FF0D012DDEC9CF34D381A38C659A64F60 kr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jIOPf1Xdzv84hjSzPW+B24YjHLffaOy/dA5jzVqL/pS4Qjj8tmsccdIvQFY+vrWtXhXZSGfw0LGsw1eUKoPY3VHxNDvUpYtgMsRr1Nz2JmXQa1+w7rUweR44C49oUMNrDtzWrikqxEsKCJADNn3qn/DQEt3snPNNOBo4xlmmT2A= ;{id = 33655} 026B7200002E0001000151800093002F08010001518052F4220052EAD970837700201AB4AA2BDED32000B0175B6F6B843808ADFD029A3351FEBD6A1A47DAFF8D9ADB1DAD91A79614B837FAB3D95C35A926D012132ED073FE46E799AD3F741D1837C64021C8F350D1414AA678AD520BD8CF905C54A0589042CE5E7D36A696B1125293A76BE647F4FD17A9C7A023234E83FA78531BB7DAE6C2429A090AB18B387280 kr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IBq0qive0yAAsBdbb2uEOAit/QKaM1H+vWoaR9r/jZrbHa2Rp5YUuDf6s9lcNakm0BITLtBz/kbnma0/dB0YN8ZAIcjzUNFBSqZ4rVIL2M+QXFSgWJBCzl59NqaWsRJSk6dr5kf0/Repx6AjI06D+nhTG7fa5sJCmgkKsYs4coA= ;{id = 33655} 026B7200002F000100015180000C026B77000006200000000013 kr. 86400 IN NSEC kw. NS DS RRSIG NSEC 016203646E73026B7200000100010002A30000043D4A4B01 b.dns.kr. 172800 IN A 61.74.75.1 016303646E73026B7200000100010002A3000004CBF8F6DC c.dns.kr. 172800 IN A 203.248.246.220 016403646E73026B7200000100010002A3000004CB539F01 d.dns.kr. 172800 IN A 203.83.159.1 016503646E73026B7200000100010002A3000004CA1E7C64 e.dns.kr. 172800 IN A 202.30.124.100 016503646E73026B7200001C00010002A300001020010DCC000500000000000000000100 e.dns.kr. 172800 IN AAAA 2001:dcc:5::100 016603646E73026B7200000100010002A3000004DA26B55A f.dns.kr. 172800 IN A 218.38.181.90 016703646E73026B7200000100010002A3000004CA1FBE01 g.dns.kr. 172800 IN A 202.31.190.1 016703646E73026B7200001C00010002A300001020010DC5000A00000000000000000001 g.dns.kr. 172800 IN AAAA 2001:dc5:a::1 026B7700000200010002A300000904646E7331026B7700 kw. 172800 IN NS dns1.kw. 026B7700000200010002A300000904646E7332026B7700 kw. 172800 IN NS dns2.kw. 026B7700000200010002A300000904646E7333026B7700 kw. 172800 IN NS dns3.kw. 026B7700000200010002A300000F046B776E73046B656D73036E657400 kw. 172800 IN NS kwns.kems.net. 026B7700000200010002A300001004736563310561706E6963036E657400 kw. 172800 IN NS sec1.apnic.net. 026B7700000200010002A300001006736E732D706203697363036F726700 kw. 172800 IN NS sns-pb.isc.org. 026B7700002F000100015180000C026B79000006200000000003 kw. 86400 IN NSEC ky. NS RRSIG NSEC 026B7700002E0001000151800093002F08010001518052F4220052EAD9708377003E0E9F5EAA9AB448B1347B2DB8068AA8559CBA95AE2D109207A3FFBB874012B4AD819FAABFA96A07680C64AE23331F4C82262CDC922E873317A22A9B6CA4A95DBD68B24AA60166BFFEDFF58D69F9BA3817C34ACD259617DF418D2D87FD04E642E7BD2F4463E8F0D011DB910BBA426D7065E9FDDB227A1B8C825407757CAB33E9 kw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Pg6fXqqatEixNHstuAaKqFWcupWuLRCSB6P/u4dAErStgZ+qv6lqB2gMZK4jMx9MgiYs3JIuhzMXoiqbbKSpXb1oskqmAWa//t/1jWn5ujgXw0rNJZYX30GNLYf9BOZC570vRGPo8NAR25ELukJtcGXp/dsiehuMglQHdXyrM+k= ;{id = 33655} 04646E7331026B7700000100010002A3000004A1FC308C dns1.kw. 172800 IN A 161.252.48.140 04646E7332026B7700000100010002A3000004A1FC3096 dns2.kw. 172800 IN A 161.252.48.150 04646E7333026B7700000100010002A3000004A1FC3091 dns3.kw. 172800 IN A 161.252.48.145 026B7900000200010002A300001A076B796E736530310C706572696D6574657275736103636F6D00 ky. 172800 IN NS kynse01.perimeterusa.com. 026B7900000200010002A300001A076B796E736530320C706572696D6574657275736103636F6D00 ky. 172800 IN NS kynse02.perimeterusa.com. 026B7900000200010002A300001A076B796E736530330C706572696D6574657275736103636F6D00 ky. 172800 IN NS kynse03.perimeterusa.com. 026B7900000200010002A300001A076B796E737730310C706572696D6574657275736103636F6D00 ky. 172800 IN NS kynsw01.perimeterusa.com. 026B7900000200010002A300001A076B796E737730320C706572696D6574657275736103636F6D00 ky. 172800 IN NS kynsw02.perimeterusa.com. 026B7900000200010002A300001A076B796E737730330C706572696D6574657275736103636F6D00 ky. 172800 IN NS kynsw03.perimeterusa.com. 026B7900002F000100015180000C026B7A000006200000000003 ky. 86400 IN NSEC kz. NS RRSIG NSEC 026B7900002E0001000151800093002F08010001518052F4220052EAD970837700142685CC07A22DF2C50ACD63470227D02EF3CC61857FB601DEC48E2E53E0F25DA3AD55FC7FF11242BC7F31A0B263524C4375FA441256F23FD81D23FA8ACC98165D6EFFCC34BE19BA22CD5E2A933B1B1FE4F139F690A8D5642CE2FDF9A2216394DDB93312190DF7817E0C6475F219CCA22238426B918F6413D900DEE6190CB2D5 ky. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FCaFzAeiLfLFCs1jRwIn0C7zzGGFf7YB3sSOLlPg8l2jrVX8f/ESQrx/MaCyY1JMQ3X6RBJW8j/YHSP6isyYFl1u/8w0vhm6Is1eKpM7Gx/k8Tn2kKjVZCzi/fmiIWOU3bkzEhkN94F+DGR18hnMoiI4QmuRj2QT2QDe5hkMstU= ;{id = 33655} 026B7A00000200010002A300001B026B7A056363746C640761757468646E730472697065036E657400 kz. 172800 IN NS kz.cctld.authdns.ripe.net. 026B7A00000200010002A300000B026E73036E6963026B7A00 kz. 172800 IN NS ns.nic.kz. 026B7A00002F000100015180000C026C61000006200000000003 kz. 86400 IN NSEC la. NS RRSIG NSEC 026B7A00002E0001000151800093002F08010001518052F4220052EAD9708377003FD1B2EC671762E1A849C6F251B4BA68373D6A40E1694FFBB16CB32B86756CC26A62C4284CE047728E4FD4C357159DA63D2D777B8F3E07FBBC0879A7408F3F03FAB034C1C71C84B42FD2302EE9B321E8CFE87ACAD34F38E0EF63D7DD8CDDEB7E990268B9EDBB00EC69741BA1E343AD301B624F2F07F28484D177BA4C7B429EEB kz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P9Gy7GcXYuGoScbyUbS6aDc9akDhaU/7sWyzK4Z1bMJqYsQoTOBHco5P1MNXFZ2mPS13e48+B/u8CHmnQI8/A/qwNMHHHIS0L9IwLumzIejP6HrK00844O9j192M3et+mQJoue27AOxpdBuh40OtMBtiTy8H8oSE0Xe6THtCnus= ;{id = 33655} 026E73036E6963026B7A00000100010002A3000004C2001505 ns.nic.kz. 172800 IN A 194.0.21.5 026C6100000200010002A300000C036E7331036E6963026C6100 la. 172800 IN NS ns1.nic.la. 026C6100000200010002A300000C036E7332036E6963026C6100 la. 172800 IN NS ns2.nic.la. 026C6100000200010002A300000C036E7333036E6963026C6100 la. 172800 IN NS ns3.nic.la. 026C6100000200010002A300000C036E7334036E6963026C6100 la. 172800 IN NS ns4.nic.la. 026C6100000200010002A300000C036E7335036E6963026C6100 la. 172800 IN NS ns5.nic.la. 026C6100002B0001000151800018D3460701C468E20FD427F2EB5E4658B1E1D24840768DC8E1 la. 86400 IN DS 54086 7 1 C468E20FD427F2EB5E4658B1E1D24840768DC8E1 026C6100002B0001000151800024D346070228339FCEDF2C52583595DD1460A6B07D9FA5692A5BA8E6E5F34EE30635230541 la. 86400 IN DS 54086 7 2 28339FCEDF2C52583595DD1460A6B07D9FA5692A5BA8E6E5F34EE30635230541 026C6100002E0001000151800093002B08010001518052F4220052EAD970837700BA5F6702FB7ACE0985BC296913EB2EA13A73E19E2166ADC541DFD6460F957D1CE1A67B03C491E94384AF17CD1B8F5F59264B24A45F3B9B42A835375C5A70048B22DCA5F338F120379A6352815118AEF2541E4B4B080C529DE650AF0B72E3947C0CA9239A44274A542D95132C4B028EA1F9AC6358EE79D21FC34DA5F078F277F3 la. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ul9nAvt6zgmFvClpE+suoTpz4Z4hZq3FQd/WRg+VfRzhpnsDxJHpQ4SvF80bj19ZJkskpF87m0KoNTdcWnAEiyLcpfM48SA3mmNSgVEYrvJUHktLCAxSneZQrwty45R8DKkjmkQnSlQtlRMsSwKOofmsY1juedIfw02l8Hjyd/M= ;{id = 33655} 026C6100002E0001000151800093002F08010001518052F4220052EAD970837700520B08CA6223A339A23C84CF7869F7F609ADB44BF9723214E3401A51D9FDAF477DF936E828251376B7D7D71F3C64E1F465B40FBD789CF0AF25A9B23F5A811541D897AD0DE71854FA6FC1E05274779DE5BC5AA9D3F85A42790942066E2E48DE781CBFD471BFF2E967633E83097DC3705C6F08C860261BA86A0440E28E4C913A06 la. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UgsIymIjozmiPITPeGn39gmttEv5cjIU40AaUdn9r0d9+TboKCUTdrfX1x88ZOH0ZbQPvXic8K8lqbI/WoEVQdiXrQ3nGFT6b8HgUnR3neW8WqnT+FpCeQlCBm4uSN54HL/Ucb/y6WdjPoMJfcNwXG8IyGAmG6hqBEDijkyROgY= ;{id = 33655} 026C6100002F000100015180000E046C616E64000006200000000013 la. 86400 IN NSEC land. NS DS RRSIG NSEC 036E7331036E6963026C6100000100010002A3000004C2000202 ns1.nic.la. 172800 IN A 194.0.2.2 036E7331036E6963026C6100001C00010002A300001020010678000500000000000000000002 ns1.nic.la. 172800 IN AAAA 2001:678:5::2 036E7332036E6963026C6100000100010002A3000004C2A9DA0E ns2.nic.la. 172800 IN A 194.169.218.14 036E7332036E6963026C6100001C00010002A30000102001067C13CC00000000000000010014 ns2.nic.la. 172800 IN AAAA 2001:67c:13cc::1:14 036E7333036E6963026C6100000100010002A3000004B918400E ns3.nic.la. 172800 IN A 185.24.64.14 036E7333036E6963026C6100001C00010002A30000102A042B0013CC00000000000000010014 ns3.nic.la. 172800 IN AAAA 2a04:2b00:13cc::1:14 036E7334036E6963026C6100000100010002A3000004C2A9DA0F ns4.nic.la. 172800 IN A 194.169.218.15 036E7334036E6963026C6100001C00010002A30000102001067C13CC00000000000000010015 ns4.nic.la. 172800 IN AAAA 2001:67c:13cc::1:15 036E7335036E6963026C6100000100010002A3000004B918400F ns5.nic.la. 172800 IN A 185.24.64.15 036E7335036E6963026C6100001C00010002A30000102A042B0013CC00000000000000010015 ns5.nic.la. 172800 IN AAAA 2a04:2b00:13cc::1:15 046C616E6400000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 land. 172800 IN NS demand.beta.aridns.net.au. 046C616E6400000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 land. 172800 IN NS demand.alpha.aridns.net.au. 046C616E6400000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 land. 172800 IN NS demand.delta.aridns.net.au. 046C616E6400000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 land. 172800 IN NS demand.gamma.aridns.net.au. 046C616E6400002B0001000151800024AAB60802DEEEE8025A8233F002FE834A728C3C218208D04BA7C5344510D6D1B578E0CB6B land. 86400 IN DS 43702 8 2 DEEEE8025A8233F002FE834A728C3C218208D04BA7C5344510D6D1B578E0CB6B 046C616E6400002E0001000151800093002B08010001518052F4220052EAD970837700BCBF26BA84DBF1442F89D0052B8826202090E644ED615CDC15B26AE0A4014BE8BBC62BEAC79D2BCA7FF456F8B22AE0B1481BA4F7BA84F1EEA8812663A5443CE0C5CC72A1DE7474DA2E4E5EA5454C2E6B8992ABD82F28B6668CBCFAE993CDB6E0CB4096ECD624F343C0EA35CDBDB9E505FB38E1824AC8A0707B9508D94B07D23F land. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vL8muoTb8UQvidAFK4gmICCQ5kTtYVzcFbJq4KQBS+i7xivqx50ryn/0VviyKuCxSBuk97qE8e6ogSZjpUQ84MXMcqHedHTaLk5epUVMLmuJkqvYLyi2Zoy8+umTzbbgy0CW7NYk80PA6jXNvbnlBfs44YJKyKBwe5UI2UsH0j8= ;{id = 33655} 046C616E6400002E0001000151800093002F08010001518052F4220052EAD970837700110A08BA61031AA5F9FE1469CAF7203C8D7C1AC41166B512A10D9C01F344F0A81672E45216C92FEE8B18814884957C2F3C801D83426287EE4BC8FD68105527523C35147758881F75917943E31935B8F5216C4A52E0897DF8067A932133B5C9A9C7D956AFFD5C7BCC4D9F42D19CA5A1338CC8F3900A3A09A83E1E582C769B41C1 land. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . EQoIumEDGqX5/hRpyvcgPI18GsQRZrUSoQ2cAfNE8KgWcuRSFskv7osYgUiElXwvPIAdg0Jih+5LyP1oEFUnUjw1FHdYiB91kXlD4xk1uPUhbEpS4Il9+AZ6kyEztcmpx9lWr/1ce8xNn0LRnKWhM4zI85AKOgmoPh5YLHabQcE= ;{id = 33655} 046C616E6400002F000100015180000C026C62000006200000000013 land. 86400 IN NSEC lb. NS DS RRSIG NSEC 026C6200000200010002A300000C036E733103646E7302617100 lb. 172800 IN NS ns1.dns.aq. 026C6200000200010002A300000D037269700370736703636F6D00 lb. 172800 IN NS rip.psg.com. 026C6200000200010002A300001604666F726B0373746807646E736E6F6465036E657400 lb. 172800 IN NS fork.sth.dnsnode.net. 026C6200000200010002A3000012057A65696E610361756203656475026C6200 lb. 172800 IN NS zeina.aub.edu.lb. 026C6200002B0001000151800024412A080240DD7553579354618AAC11783D0385CD6D6B0F31C7FCF6719609B04A08C2F11B lb. 86400 IN DS 16682 8 2 40DD7553579354618AAC11783D0385CD6D6B0F31C7FCF6719609B04A08C2F11B 026C6200002E0001000151800093002B08010001518052F4220052EAD9708377000822B295AA98C9B3B12572AB6B3F521E82DE4C24F21393E9AC7405454697E739BC5F9AB9AA748675650DFB08816EBABF49A0644E67F0C2939CE8968B1BDFF2D7767760EDB76733BC27D2EBEE302F66475CE092168A2EB363469C2DEEF29EE166B2399096B9934B4F4BB44C8CD271E0BE58BDDFCFDB190E70659558D3604BCBDA lb. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CCKylaqYybOxJXKraz9SHoLeTCTyE5PprHQFRUaX5zm8X5q5qnSGdWUN+wiBbrq/SaBkTmfwwpOc6JaLG9/y13Z3YO23ZzO8J9Lr7jAvZkdc4JIWii6zY0acLe7ynuFmsjmQlrmTS09LtEyM0nHgvli938/bGQ5wZZVY02BLy9o= ;{id = 33655} 026C6200002E0001000151800093002F08010001518052F4220052EAD9708377002BCBE7B127EFA369B8600E22B0A3978F46976A74DC962F0D078387BCE4F15885EC6BD4B20C1D14DB556F4C3005DD8B8902AF72F85C1FD90956F402ED4DB5F64C995E98EB57FF728E0E667D9FAA591643E058CDBCEC6952330F38E1C6323DE678D9901F1DE731AB8C485B7E1577C7B1BD50D25677DB9F297E26AA7AD6E9B9F28E lb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K8vnsSfvo2m4YA4isKOXj0aXanTcli8NB4OHvOTxWIXsa9SyDB0U21VvTDAF3YuJAq9y+Fwf2QlW9ALtTbX2TJlemOtX/3KODmZ9n6pZFkPgWM287GlSMw844cYyPeZ42ZAfHecxq4xIW34Vd8exvVDSVnfbnyl+Jqp61um58o4= ;{id = 33655} 026C6200002F000100015180000C026C63000006200000000013 lb. 86400 IN NSEC lc. NS DS RRSIG NSEC 057A65696E610361756203656475026C6200000100010002A3000004C1BC800E zeina.aub.edu.lb. 172800 IN A 193.188.128.14 026C6300000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 lc. 172800 IN NS a0.cctld.afilias-nst.info. 026C6300000200010002A300001B026132056363746C640B6166696C6961732D6E737404696E666F00 lc. 172800 IN NS a2.cctld.afilias-nst.info. 026C6300000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 lc. 172800 IN NS b0.cctld.afilias-nst.org. 026C6300000200010002A300001A026232056363746C640B6166696C6961732D6E7374036F726700 lc. 172800 IN NS b2.cctld.afilias-nst.org. 026C6300000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 lc. 172800 IN NS c0.cctld.afilias-nst.info. 026C6300000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 lc. 172800 IN NS d0.cctld.afilias-nst.org. 026C6300002B00010001518000187A2B07018FFD793EA49828F8FAE71E6EAF8CD2A6A329361F lc. 86400 IN DS 31275 7 1 8FFD793EA49828F8FAE71E6EAF8CD2A6A329361F 026C6300002B00010001518000247A2B0702611D7AF20FB91770B598BFFE4DFDAAFE29F106EFCDE36387F4963700A77622EE lc. 86400 IN DS 31275 7 2 611D7AF20FB91770B598BFFE4DFDAAFE29F106EFCDE36387F4963700A77622EE 026C6300002E0001000151800093002B08010001518052F4220052EAD9708377003983E1521307AB750FBB50864BE8229F03D832704D0B2021C2D236E32864CC0A942EB7AA173BA005DBEEDC8B957D01E4D2A84E2D7777A7F078172353E9ED93E0FAFC95A9FB5FDC7D6E3F24C483C0B0F0BD08DAB61788ABF94065205AE480CD42446FE7A3A7BD3F0228CFCDBB9787D20133C3F90EFAFD02C7700AC15DAFC6E712 lc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OYPhUhMHq3UPu1CGS+ginwPYMnBNCyAhwtI24yhkzAqULreqFzugBdvu3IuVfQHk0qhOLXd3p/B4FyNT6e2T4Pr8lan7X9x9bj8kxIPAsPC9CNq2F4ir+UBlIFrkgM1CRG/no6e9PwIoz827l4fSATPD+Q76/QLHcArBXa/G5xI= ;{id = 33655} 026C6300002E0001000151800093002F08010001518052F4220052EAD970837700B14C2C21672CA707CEAE7D78CB1CFF7E11EF7B769DAA6F1D64D2B89A9538FDA6382746F6F4A3C99201A9729CBD33E5F79141586A3664F9B8A9517F99FAEA7385B03F5DC939BF6E80437ABCA25EDA96E3AED289B6C4031BA3242D862441964FE2381DCFAE01F83CFFCE62C80920DFD6F8501F164E3C48BC9004F1F00BAD6B5D92 lc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sUwsIWcspwfOrn14yxz/fhHve3adqm8dZNK4mpU4/aY4J0b29KPJkgGpcpy9M+X3kUFYajZk+bipUX+Z+upzhbA/Xck5v26AQ3q8ol7aluOu0om2xAMboyQthiRBlk/iOB3PrgH4PP/OYsgJIN/W+FAfFk48SLyQBPHwC61rXZI= ;{id = 33655} 026C6300002F000100015180000C026C69000006200000000013 lc. 86400 IN NSEC li. NS DS RRSIG NSEC 026C6900000200010002A300000A0161036E6963026C6900 li. 172800 IN NS a.nic.li. 026C6900000200010002A300000A0162036E6963026C6900 li. 172800 IN NS b.nic.li. 026C6900000200010002A300000A0163036E6963026C6900 li. 172800 IN NS c.nic.li. 026C6900000200010002A300000A0164036E6963026C6900 li. 172800 IN NS d.nic.li. 026C6900000200010002A300000A0165036E6963026C6900 li. 172800 IN NS e.nic.li. 026C6900000200010002A300000A0166036E6963026C6900 li. 172800 IN NS f.nic.li. 026C6900000200010002A300000A0168036E6963026C6900 li. 172800 IN NS h.nic.li. 026C6900002B00010001518000246F490802C534C12DE564E79C578E6419C57D97629D8BE76C794C026C944F3FC442B63B78 li. 86400 IN DS 28489 8 2 C534C12DE564E79C578E6419C57D97629D8BE76C794C026C944F3FC442B63B78 026C6900002E0001000151800093002B08010001518052F4220052EAD970837700AAD9FB4E40F49CAFC55D889AB6CB8CA68852B48221CA19A82ED54AE029CE50B46891C433E8BF1D55C1E8978D2B3AA6A081318BAD21537786BE00F720D95C2F6CC302BDE70D4038382313DED28D62D6FCF8B99A94E7F3878B145E701E1E53901EB80891888FC1C1890BF7B5E8F8D5B5F67FF0422C98A6876BC2F775D02F007E1B li. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qtn7TkD0nK/FXYiatsuMpohStIIhyhmoLtVK4CnOULRokcQz6L8dVcHol40rOqaggTGLrSFTd4a+APcg2VwvbMMCvecNQDg4IxPe0o1i1vz4uZqU5/OHixRecB4eU5AeuAiRiI/BwYkL97Xo+NW19n/wQiyYpodrwvd10C8Afhs= ;{id = 33655} 026C6900002E0001000151800093002F08010001518052F4220052EAD9708377004CAE5CBF001CE5607E31D517A3E0AB838FEE52DD8CCF8312E5476FD191EF3E167D389106C96AD23E6286DB0845BEB4A0EA9399866EC6C40FD7EEAD81A9122C7ED7A35BCEA175539D590C03C18DF0414A7D4CE781C5602BDFA9E915DBE0B54201876D40B5FEF33DE829638032C87881BCBC0E1CFEBE7EA874CB66F65CC3F81BF7 li. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TK5cvwAc5WB+MdUXo+Crg4/uUt2Mz4MS5Udv0ZHvPhZ9OJEGyWrSPmKG2whFvrSg6pOZhm7GxA/X7q2BqRIsftejW86hdVOdWQwDwY3wQUp9TOeBxWAr36npFdvgtUIBh21Atf7zPegpY4AyyHiBvLwOHP6+fqh0y2b2XMP4G/c= ;{id = 33655} 026C6900002F0001000151800012086C69676874696E67000006200000000013 li. 86400 IN NSEC lighting. NS DS RRSIG NSEC 0161036E6963026C6900000100010002A3000004823B0150 a.nic.li. 172800 IN A 130.59.1.80 0161036E6963026C6900001C00010002A300001020010620000000000000000000000004 a.nic.li. 172800 IN AAAA 2001:620::4 0162036E6963026C6900000100010002A3000004823BD30A b.nic.li. 172800 IN A 130.59.211.10 0162036E6963026C6900001C00010002A300001020010620000000000000000000000005 b.nic.li. 172800 IN AAAA 2001:620::5 0163036E6963026C6900000100010002A3000004931C0027 c.nic.li. 172800 IN A 147.28.0.39 0163036E6963026C6900001C00010002A300001020010418000100000000000000000039 c.nic.li. 172800 IN AAAA 2001:418:1::39 0164036E6963026C6900000100010002A3000004C8A00005 d.nic.li. 172800 IN A 200.160.0.5 0164036E6963026C6900001C00010002A3000010200112FF00000A200000000000000005 d.nic.li. 172800 IN AAAA 2001:12ff:0:a20::5 0165036E6963026C6900000100010002A3000004C2001101 e.nic.li. 172800 IN A 194.0.17.1 0165036E6963026C6900001C00010002A300001020010678000300000000000000000001 e.nic.li. 172800 IN AAAA 2001:678:3::1 0166036E6963026C6900000100010002A3000004C2926A0E f.nic.li. 172800 IN A 194.146.106.14 0166036E6963026C6900001C00010002A30000102001067C101000030000000000000053 f.nic.li. 172800 IN AAAA 2001:67c:1010:3::53 0168036E6963026C6900000100010002A3000004C22A3078 h.nic.li. 172800 IN A 194.42.48.120 086C69676874696E6700000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 lighting. 172800 IN NS demand.beta.aridns.net.au. 086C69676874696E6700000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 lighting. 172800 IN NS demand.alpha.aridns.net.au. 086C69676874696E6700000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 lighting. 172800 IN NS demand.delta.aridns.net.au. 086C69676874696E6700000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 lighting. 172800 IN NS demand.gamma.aridns.net.au. 086C69676874696E6700002B000100015180002405410802AFA5667D4D9B2FBDD72F0C364EE3A3AD3286BAE800DD959E3A28F2E3EA6EFA08 lighting. 86400 IN DS 1345 8 2 AFA5667D4D9B2FBDD72F0C364EE3A3AD3286BAE800DD959E3A28F2E3EA6EFA08 086C69676874696E6700002E0001000151800093002B08010001518052F4220052EAD970837700336EA413CC677FBA28D704F0BDE58C2F59958937EA32E9D6286952A3C9ED01E2679801AFD5D28C768D75C09E16576EDB8600A93105A664C7A0801515FECF2C31693C8361F56C8AA8937126E39937EF678FE56517E8265FC841E0A4187E21E3AAC4352C5E9131F1A98CA3BBC06BBACD28D45B67B9FA5DE4DB9429B9D643111E99 lighting. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . M26kE8xnf7oo1wTwveWML1mViTfqMunWKGlSo8ntAeJnmAGv1dKMdo11wJ4WV27bhgCpMQWmZMeggBUV/s8sMWk8g2H1bIqok3Em45k372eP5WUX6CZfyEHgpBh+IeOqxDUsXpEx8amMo7vAa7rNKNRbZ7n6XeTblCm51kMRHpk= ;{id = 33655} 086C69676874696E6700002E0001000151800093002F08010001518052F4220052EAD97083770051909A9EF16074710966714A22E4227B633BB384879C6934E4F9EBB021AE22A49ACE5819CB20035A89A3A959D328AA9A085903EDBF2C11396721F9E0673BB3344606F1F590D5D17E7DA626DD4FAC761B7B3B68522A5E422A2336FC289A0D2D989C831B2C8BFF0546602104460B0748D3F6414C7B6DBF1C0B1AA64372B86A881A lighting. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UZCanvFgdHEJZnFKIuQie2M7s4SHnGk05PnrsCGuIqSazlgZyyADWomjqVnTKKqaCFkD7b8sETlnIfngZzuzNEYG8fWQ1dF+faYm3U+sdht7O2hSKl5CKiM2/CiaDS2YnIMbLIv/BUZgIQRGCwdI0/ZBTHttvxwLGqZDcrhqiBo= ;{id = 33655} 086C69676874696E6700002F000100015180000E046C696D6F000006200000000013 lighting. 86400 IN NSEC limo. NS DS RRSIG NSEC 046C696D6F00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 limo. 172800 IN NS demand.beta.aridns.net.au. 046C696D6F00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 limo. 172800 IN NS demand.alpha.aridns.net.au. 046C696D6F00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 limo. 172800 IN NS demand.delta.aridns.net.au. 046C696D6F00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 limo. 172800 IN NS demand.gamma.aridns.net.au. 046C696D6F00002B00010001518000241C7508025B4855A49D19A3D8A6BC6D32AAA778D5CC62A186E17303559766C6646428BE0A limo. 86400 IN DS 7285 8 2 5B4855A49D19A3D8A6BC6D32AAA778D5CC62A186E17303559766C6646428BE0A 046C696D6F00002E0001000151800093002B08010001518052F4220052EAD970837700A5E17B79777E66A1E3D7480DC6846DB87971E0126FEF9F1C95A09F2B5BC51C2B6589B4A27CFA7F6E69004842F4BB7CBA23433C735D5B2E3C9495A6326ABC1B24786CCBD19924FB3FE2088D80241A3805EE90C52AD0595B79FC76DCB9A7A276244E93892FD67DE47088ECD25335C04720FC956DB0018FB3C145534746ACAAEA7D limo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . peF7eXd+ZqHj10gNxoRtuHlx4BJv758claCfK1vFHCtlibSifPp/bmkASEL0u3y6I0M8c11bLjyUlaYyarwbJHhsy9GZJPs/4giNgCQaOAXukMUq0Flbefx23LmnonYkTpOJL9Z95HCI7NJTNcBHIPyVbbABj7PBRVNHRqyq6n0= ;{id = 33655} 046C696D6F00002E0001000151800093002F08010001518052F4220052EAD970837700743D4BBED2D08E4DA60109AA0E84073B582620120DD4B5D4D8C54E0BDD1EBC0430FA29E18EB034766B899DAE31A12C56071ADE966BF73AEE5E1F9628A2D109D656058D1AFE98F631AE7DC551B10F1A6B44D2B35732D6B8B626843BCE5336D731A86F293C5D8B5003747B64188EDACA9DCF8CD3E0B3F36E93D6C8C85687E560CC limo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dD1LvtLQjk2mAQmqDoQHO1gmIBIN1LXU2MVOC90evAQw+inhjrA0dmuJna4xoSxWBxrelmv3Ou5eH5YootEJ1lYFjRr+mPYxrn3FUbEPGmtE0rNXMta4tiaEO85TNtcxqG8pPF2LUAN0e2QYjtrKnc+M0+Cz826T1sjIVoflYMw= ;{id = 33655} 046C696D6F00002F000100015180000E046C696E6B000006200000000013 limo. 86400 IN NSEC link. NS DS RRSIG NSEC 046C696E6B00000200010002A30000160161026E730B756E697265676973747279036E657400 link. 172800 IN NS a.ns.uniregistry.net. 046C696E6B00000200010002A300001103746C64076973632D736E7303636F6D00 link. 172800 IN NS tld.isc-sns.com. 046C696E6B00000200010002A300001103746C64076973632D736E73036E657400 link. 172800 IN NS tld.isc-sns.net. 046C696E6B00000200010002A300001203746C64076973632D736E7304696E666F00 link. 172800 IN NS tld.isc-sns.info. 046C696E6B00002B00010001518000183FFA05014BAC0A7FB788380C75B12257AF422CF2F32EE828 link. 86400 IN DS 16378 5 1 4BAC0A7FB788380C75B12257AF422CF2F32EE828 046C696E6B00002B00010001518000243FFA050222F61A68A2F1BFE7A3B8A71DE8DB12BAC9A51D98D8D1F44C1717396E395C180B link. 86400 IN DS 16378 5 2 22F61A68A2F1BFE7A3B8A71DE8DB12BAC9A51D98D8D1F44C1717396E395C180B 046C696E6B00002E0001000151800093002B08010001518052F4220052EAD9708377003BE062B6DF4BFFE0CE978EAFDEE5FAF7897E88560DC96BD7DEE81280C71C7ED59AEC1C14AEBFA8E8D2D7B2B95D89A73B8A2EBB647A22FE2E0CCC6C24A3C5C59B56538FD7D68219E240342BBA17BDFCAED33B32C917B14884221203DCB906F57555175BE3CD09C2910CAED9861AADFE1EDDA56FDF5D427D19B82A36A7B1EEE9C2 link. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . O+Bitt9L/+DOl46v3uX694l+iFYNyWvX3ugSgMccftWa7BwUrr+o6NLXsrldiac7ii67ZHoi/i4MzGwko8XFm1ZTj9fWghniQDQruhe9/K7TOzLJF7FIhCISA9y5BvV1VRdb480JwpEMrtmGGq3+Ht2lb99dQn0ZuCo2p7Hu6cI= ;{id = 33655} 046C696E6B00002E0001000151800093002F08010001518052F4220052EAD970837700A5573248886CF37F21D4852B96295E46E6CC289A1969C5B4AC9E70ED2C17E296617CBB8DF644D86CE57AF66BD2F90932DE37F817FCD17AD47EF458B7EBB42A9551C1671C9196CFE06B68210730C427B6F6464F8777DA1B56ABB2DCD1D1506987CAD7D9710A02A3A36B60F7AF79DA70F0F12D2B9C452D440CDD2440E1D5522690 link. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . pVcySIhs838h1IUrlileRubMKJoZacW0rJ5w7SwX4pZhfLuN9kTYbOV69mvS+Qky3jf4F/zRetR+9Fi367QqlVHBZxyRls/ga2ghBzDEJ7b2Rk+Hd9obVquy3NHRUGmHytfZcQoCo6NrYPevedpw8PEtK5xFLUQM3SRA4dVSJpA= ;{id = 33655} 046C696E6B00002F000100015180000C026C6B000006200000000013 link. 86400 IN NSEC lk. NS DS RRSIG NSEC 026C6B00002F000100015180000C026C72000006200000000013 lk. 86400 IN NSEC lr. NS DS RRSIG NSEC 026C6B00002E0001000151800093002F08010001518052F4220052EAD97083770065367C87CAE02B854A888E06451892A49FF461C912C98AE6DEB510B41B9AED115E0CF7E6CF02D6A9A648F5EE692B25F5716A377FF7D1355525F53C07EB4AFFE36E96635C41918AEE26068DE57911E6B8B325FDF4ECBF6DF2CA40EF03D8462717A490A29FB0FB354FB7836530F2C81BAC42803F77543F3042130277BA20E56F4B lk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZTZ8h8rgK4VKiI4GRRiSpJ/0YckSyYrm3rUQtBua7RFeDPfmzwLWqaZI9e5pKyX1cWo3f/fRNVUl9TwH60r/426WY1xBkYruJgaN5XkR5rizJf307L9t8spA7wPYRicXpJCin7D7NU+3g2Uw8sgbrEKAP3dUPzBCEwJ3uiDlb0s= ;{id = 33655} 026C6B00002E0001000151800093002B08010001518052F4220052EAD9708377000AA001EA77459E28A7B6FFE6A637D179C9E59F0A653403206BA5713F15DC257C98D6EE5E2297A671075026A3F3EB7361C34E5936A732785EFCE134FA60C8E545270082E4A2A649A767E3624CE0E3DA55BB4E9CBA87E3DB8B3D4905CDE4AC694596B17DB76D43DAB48C149CEFC9C53E1225485730C9F31B944A86D450615F2A49 lk. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CqAB6ndFniintv/mpjfRecnlnwplNAMga6VxPxXcJXyY1u5eIpemcQdQJqPz63Nhw05ZNqcyeF784TT6YMjlRScAguSipkmnZ+NiTODj2lW7Tpy6h+Pbiz1JBc3krGlFlrF9t21D2rSMFJzvycU+EiVIVzDJ8xuUSobUUGFfKkk= ;{id = 33655} 026C6B00000200010002A300000A0163036E6963026C6B00 lk. 172800 IN NS c.nic.lk. 026C6B00000200010002A300000A0164036E6963026C6B00 lk. 172800 IN NS d.nic.lk. 026C6B00000200010002A300000A016C036E6963026C6B00 lk. 172800 IN NS l.nic.lk. 026C6B00000200010002A300000A016D036E6963026C6B00 lk. 172800 IN NS m.nic.lk. 026C6B00000200010002A300000A0170036E6963026C6B00 lk. 172800 IN NS p.nic.lk. 026C6B00000200010002A300000A0174036E6963026C6B00 lk. 172800 IN NS t.nic.lk. 026C6B00000200010002A300000B036E7331026163026C6B00 lk. 172800 IN NS ns1.ac.lk. 026C6B00000200010002A300000D0472697065036E6963026C6B00 lk. 172800 IN NS ripe.nic.lk. 026C6B00000200010002A30000190970656E647261676F6E026373067075726475650365647500 lk. 172800 IN NS pendragon.cs.purdue.edu. 026C6B00002B000100015180001800B50501A1907F85D49081239389C216912B8937D0ECEB3D lk. 86400 IN DS 181 5 1 A1907F85D49081239389C216912B8937D0ECEB3D 026C6B00002B000100015180002400B5050287516D56B697CB3F7A7C3EB594EE0E16AE509D16A503089F4FBD4F347B336F93 lk. 86400 IN DS 181 5 2 87516D56B697CB3F7A7C3EB594EE0E16AE509D16A503089F4FBD4F347B336F93 036E7331026163026C6B00000100010002A3000004C0F801A2 ns1.ac.lk. 172800 IN A 192.248.1.162 036E7331026163026C6B00001C00010002A30000102401DD00000100000000000000000162 ns1.ac.lk. 172800 IN AAAA 2401:dd00:1::162 036E7333026163026C6B00000100010002A3000004CA7CA6B2 ns3.ac.lk. 172800 IN A 202.124.166.178 0163036E6963026C6B00000100010002A3000004CB8F1D03 c.nic.lk. 172800 IN A 203.143.29.3 0163036E6963026C6B00001C00010002A300001024055400000300010203014300290003 c.nic.lk. 172800 IN AAAA 2405:5400:3:1:203:143:29:3 0164036E6963026C6B00000100010002A30000047BE70612 d.nic.lk. 172800 IN A 123.231.6.18 016C036E6963026C6B00000100010002A3000004C0F80811 l.nic.lk. 172800 IN A 192.248.8.17 016D036E6963026C6B00000100010002A3000004CA81EBE5 m.nic.lk. 172800 IN A 202.129.235.229 046E732D63036E6963026C6B00000100010002A3000004CB8F1303 ns-c.nic.lk. 172800 IN A 203.143.19.3 046E732D64036E6963026C6B00000100010002A30000047BE70612 ns-d.nic.lk. 172800 IN A 123.231.6.18 046E732D6C036E6963026C6B00000100010002A3000004C0F80811 ns-l.nic.lk. 172800 IN A 192.248.8.17 046E732D74036E6963026C6B00000100010002A3000004CB5E4281 ns-t.nic.lk. 172800 IN A 203.94.66.129 0170036E6963026C6B00000100010002A3000004CC3DD81B p.nic.lk. 172800 IN A 204.61.216.27 0170036E6963026C6B00001C00010002A3000010200105000014602700AD000000000001 p.nic.lk. 172800 IN AAAA 2001:500:14:6027:ad::1 0472697065036E6963026C6B00000100010002A3000004C1000958 ripe.nic.lk. 172800 IN A 193.0.9.88 0472697065036E6963026C6B00001C00010002A30000102001067C00E000000000000000000088 ripe.nic.lk. 172800 IN AAAA 2001:67c:e0::88 0174036E6963026C6B00000100010002A3000004CB5E4281 t.nic.lk. 172800 IN A 203.94.66.129 026C7200000200010002A300000D037269700370736703636F6D00 lr. 172800 IN NS rip.psg.com. 026C7200000200010002A300001604666F726B0373746807646E736E6F6465036E657400 lr. 172800 IN NS fork.sth.dnsnode.net. 026C7200000200010002A300001005686970706F027275026163027A6100 lr. 172800 IN NS hippo.ru.ac.za. 026C7200002F000100015180000C026C73000006200000000003 lr. 86400 IN NSEC ls. NS RRSIG NSEC 026C7200002E0001000151800093002F08010001518052F4220052EAD970837700B73C0C575E653DD09866561B18B3D8F98C32725AF000A969AEE634B5F361917DC52770CAD545C706F19D2AD95FAA69056FEC81A6A9EA331D86B9726FB2307BCBD35146F668156CB9588B4D4C1807FE2A19337F2210BD0535D45EE53645C4C355885650701DF0B4330AC2797593CED66C4C4DA409DBB184EE3FD614458B493B19 lr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tzwMV15lPdCYZlYbGLPY+YwyclrwAKlpruY0tfNhkX3FJ3DK1UXHBvGdKtlfqmkFb+yBpqnqMx2GuXJvsjB7y9NRRvZoFWy5WItNTBgH/ioZM38iEL0FNdRe5TZFxMNViFZQcB3wtDMKwnl1k87WbExNpAnbsYTuP9YURYtJOxk= ;{id = 33655} 026C7300000200010002A300000E047261696E0370736703636F6D00 ls. 172800 IN NS rain.psg.com. 026C7300000200010002A300001005686970706F027275026163027A6100 ls. 172800 IN NS hippo.ru.ac.za. 026C7300000200010002A3000017056C732D6E7307616E796361737403706368036E657400 ls. 172800 IN NS ls-ns.anycast.pch.net. 026C7300000200010002A3000013056E732D6C7307616672696E6963036E657400 ls. 172800 IN NS ns-ls.afrinic.net. 026C7300002F000100015180000C026C74000006200000000003 ls. 86400 IN NSEC lt. NS RRSIG NSEC 026C7300002E0001000151800093002F08010001518052F4220052EAD9708377003AE186C49E363A62FD8FBE38AE4BE544B0A042A167F0D371DC6466F12B580476C94102BC72801120763709ADBDEC40E7DDE071B3D67E128E3E713D0155737DFF56657467FECB6818067AAD9F8613BC1CC9B31C1D92BBBC035D47CA463F61D79BFDC1CB7F42BDAFF1735A90F093FAD335C252EF2BDE308CE93E386E1980F9FE45 ls. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OuGGxJ42OmL9j744rkvlRLCgQqFn8NNx3GRm8StYBHbJQQK8coARIHY3Ca297EDn3eBxs9Z+Eo4+cT0BVXN9/1ZldGf+y2gYBnqtn4YTvBzJsxwdkru8A11HykY/Ydeb/cHLf0K9r/FzWpDwk/rTNcJS7yveMIzpPjhuGYD5/kU= ;{id = 33655} 026C7400000200010002A300000A016103746C64026C7400 lt. 172800 IN NS a.tld.lt. 026C7400000200010002A300000A016203746C64026C7400 lt. 172800 IN NS b.tld.lt. 026C7400000200010002A300000A016303746C64026C7400 lt. 172800 IN NS c.tld.lt. 026C7400000200010002A300000A016403746C64026C7400 lt. 172800 IN NS d.tld.lt. 026C7400000200010002A300000A016503746C64026C7400 lt. 172800 IN NS e.tld.lt. 026C7400000200010002A300000A016603746C64026C7400 lt. 172800 IN NS f.tld.lt. 026C7400002B00010001518000185FEC0801A9D06FA34F1C9D57062899824F5702041188DE97 lt. 86400 IN DS 24556 8 1 A9D06FA34F1C9D57062899824F5702041188DE97 026C7400002B00010001518000245FEC0802DEA1E077D98EA2DE8750281B40ACEBC14687AEB8FE49506333C903D501F6C620 lt. 86400 IN DS 24556 8 2 DEA1E077D98EA2DE8750281B40ACEBC14687AEB8FE49506333C903D501F6C620 026C7400002E0001000151800093002B08010001518052F4220052EAD97083770040AB891055E267DAA8C1AFD89E861CBFF6D7B8D5E96DF4C3F8990B9EF23BAED782805AFAA4642CF5800C13F1BE69EC09D17ECED87D0151F5B5CFD94A9E6A476557542CC63F13863C436D61524D4999929A90BEB39FB442B87EA75CC3806594CF6FADF14F73003D1A8F37AE3C741D35525C54178EDC81CEF4CBA63BCD10C36255 lt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . QKuJEFXiZ9qowa/YnoYcv/bXuNXpbfTD+JkLnvI7rteCgFr6pGQs9YAME/G+aewJ0X7O2H0BUfW1z9lKnmpHZVdULMY/E4Y8Q21hUk1JmZKakL6zn7RCuH6nXMOAZZTPb63xT3MAPRqPN648dB01UlxUF47cgc70y6Y7zRDDYlU= ;{id = 33655} 026C7400002E0001000151800093002F08010001518052F4220052EAD9708377001A2F09ED7E25CC4BA2B27B15FF3D5841F066BF97358447DFBBE11743123E7DAFD25EC3DC7F8C92DA80A4940985270CDA05008FF15AA4DB0E02BB5CA7E5C796EF2C57BE1E78B41980E052BC0562112CED5CBA6710FFC09A236A368A297BCE76C1FE64002CFE15E4622F8DCD7466E8A3E050C7BFD9720238583695890189F74A4F lt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Gi8J7X4lzEuisnsV/z1YQfBmv5c1hEffu+EXQxI+fa/SXsPcf4yS2oCklAmFJwzaBQCP8Vqk2w4Cu1yn5ceW7yxXvh54tBmA4FK8BWIRLO1cumcQ/8CaI2o2iil7znbB/mQALP4V5GIvjc10Zuij4FDHv9lyAjhYNpWJAYn3Sk8= ;{id = 33655} 026C7400002F000100015180000C026C75000006200000000013 lt. 86400 IN NSEC lu. NS DS RRSIG NSEC 016103746C64026C7400000100010002A3000004C308DA83 a.tld.lt. 172800 IN A 195.8.218.131 016203746C64026C7400000100010002A3000004C2001401 b.tld.lt. 172800 IN A 194.0.20.1 016203746C64026C7400001C00010002A300001020010678001900000000000000000001 b.tld.lt. 172800 IN AAAA 2001:678:19::1 016303746C64026C7400000100010002A3000004C2000104 c.tld.lt. 172800 IN A 194.0.1.4 016303746C64026C7400001C00010002A300001020010678000400000000000000000004 c.tld.lt. 172800 IN AAAA 2001:678:4::4 016403746C64026C7400000100010002A3000004C2000301 d.tld.lt. 172800 IN A 194.0.3.1 016403746C64026C7400001C00010002A300001020010678000600000000000000000001 d.tld.lt. 172800 IN AAAA 2001:678:6::1 016503746C64026C7400000100010002A3000004C2001201 e.tld.lt. 172800 IN A 194.0.18.1 016603746C64026C7400000100010002A3000004C2001301 f.tld.lt. 172800 IN A 194.0.19.1 016603746C64026C7400001C00010002A300001020010678008C00000000000000000001 f.tld.lt. 172800 IN AAAA 2001:678:8c::1 026C7500000200010002A300000A016703646E73026C7500 lu. 172800 IN NS g.dns.lu. 026C7500000200010002A300000A016903646E73026C7500 lu. 172800 IN NS i.dns.lu. 026C7500000200010002A300000A016A03646E73026C7500 lu. 172800 IN NS j.dns.lu. 026C7500000200010002A300000A016B03646E73026C7500 lu. 172800 IN NS k.dns.lu. 026C7500000200010002A300000A017003646E73026C7500 lu. 172800 IN NS p.dns.lu. 026C7500000200010002A300000C036E733103646E73026C7500 lu. 172800 IN NS ns1.dns.lu. 026C7500000200010002A300000C036E733503646E73026C7500 lu. 172800 IN NS ns5.dns.lu. 026C7500002B0001000151800024001F08024B0AF8FA533D143C1E7AC4C8FA6DEF4509DE439C0D5403FDC1BAA7860052882B lu. 86400 IN DS 31 8 2 4B0AF8FA533D143C1E7AC4C8FA6DEF4509DE439C0D5403FDC1BAA7860052882B 026C7500002E0001000151800093002B08010001518052F4220052EAD97083770039F7729FB5ECEC36581B2CB644ADB07989D32D9493C7B25F539E829BC51A961F7D2F03EA8300E2F5EE6CFA9855BB2FFEEB27B326D06417272C976897805E8260014D8ABB67150C321E50EF7C355D15103D00E917E25627B31247D513C1BEAF9B6524EC490232737EB533EB1DF3E93B9720AF550F071408ADEE586B4225AFB879 lu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Ofdyn7Xs7DZYGyy2RK2weYnTLZSTx7JfU56Cm8Ualh99LwPqgwDi9e5s+phVuy/+6yezJtBkFycsl2iXgF6CYAFNirtnFQwyHlDvfDVdFRA9AOkX4lYnsxJH1RPBvq+bZSTsSQIyc361M+sd8+k7lyCvVQ8HFAit7lhrQiWvuHk= ;{id = 33655} 026C7500002E0001000151800093002F08010001518052F4220052EAD970837700B842B29CF76C112AE55A0344B779A2E59FC802F6B8631D34D587CF7CB00D1C1B2F0F75BA2D24FC2A3BCB1F1E02AC0E7D006C4C88653FAA7A60C937E1C098E6DCDB30869733035907A9EA23FAF441279FCB177B4FC8CBF428EA5A2794421BFC401C195266629B1A9DB52B5AA45D52992B92C01E3B82FD671781F3203F562A4DCF lu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uEKynPdsESrlWgNEt3mi5Z/IAva4Yx001YfPfLANHBsvD3W6LST8KjvLHx4CrA59AGxMiGU/qnpgyTfhwJjm3NswhpczA1kHqeoj+vRBJ5/LF3tPyMv0KOpaJ5RCG/xAHBlSZmKbGp21K1qkXVKZK5LAHjuC/WcXgfMgP1YqTc8= ;{id = 33655} 026C7500002F0001000151800010066C7578757279000006200000000013 lu. 86400 IN NSEC luxury. NS DS RRSIG NSEC 016703646E73026C7500000100010002A3000004C2001705 g.dns.lu. 172800 IN A 194.0.23.5 016703646E73026C7500001C00010002A300001020010678001B00050000000000000005 g.dns.lu. 172800 IN AAAA 2001:678:1b:5::5 016903646E73026C7500000100010002A3000004C2926A42 i.dns.lu. 172800 IN A 194.146.106.66 016903646E73026C7500001C00010002A30000102001067C101000160000000000000053 i.dns.lu. 172800 IN AAAA 2001:67c:1010:16::53 016A03646E73026C7500000100010002A30000044D48E5F7 j.dns.lu. 172800 IN A 77.72.229.247 016A03646E73026C7500001C00010002A30000102A0103F0000003070000000000000053 j.dns.lu. 172800 IN AAAA 2a01:3f0:0:307::53 016B03646E73026C7500000100010002A3000004C200010D k.dns.lu. 172800 IN A 194.0.1.13 016B03646E73026C7500001C00010002A30000102001067800040000000000000000000D k.dns.lu. 172800 IN AAAA 2001:678:4::d 036E733103646E73026C7500000100010002A30000049E40E512 ns1.dns.lu. 172800 IN A 158.64.229.18 036E733103646E73026C7500001C00010002A300001020010A18000400010000000000000018 ns1.dns.lu. 172800 IN AAAA 2001:a18:4:1::18 036E733503646E73026C7500000100010002A3000004515BA164 ns5.dns.lu. 172800 IN A 81.91.161.100 017003646E73026C7500000100010002A3000004C2002A2A p.dns.lu. 172800 IN A 194.0.42.42 017003646E73026C7500001C00010002A300001020010678006000000000000000420042 p.dns.lu. 172800 IN AAAA 2001:678:60::42:42 066C757875727900000200010002A300000E0161036E6963066C757875727900 luxury. 172800 IN NS a.nic.luxury. 066C757875727900000200010002A300000E0162036E6963066C757875727900 luxury. 172800 IN NS b.nic.luxury. 066C757875727900000200010002A300000E0163036E6963066C757875727900 luxury. 172800 IN NS c.nic.luxury. 066C757875727900000200010002A300000E0164036E6963066C757875727900 luxury. 172800 IN NS d.nic.luxury. 066C757875727900002B00010001518000240E500802D602E8F4FD9729146D1FB1D249544DCEECE615E528EB2E4997FB1760B004D67E luxury. 86400 IN DS 3664 8 2 D602E8F4FD9729146D1FB1D249544DCEECE615E528EB2E4997FB1760B004D67E 066C757875727900002E0001000151800093002B08010001518052F4220052EAD97083770078B4B617122CB411FBBAB30C3EB56D1470575581E957FAE4AB964FE4995829E3F95DD3AC5BF29AEFFD88E1250E3573B8CDAE74F81510B78BEFB9525A37D55EBC110E92532AC21CBEC3DF853096F7F3E2C9689EF0B858D60AEC1ED75ED5CA4FCF3BD7AA119B1FC0D62A9F57994E5B2D3A205391F19FC258C801F8E40BDCDDBE1B luxury. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eLS2FxIstBH7urMMPrVtFHBXVYHpV/rkq5ZP5JlYKeP5XdOsW/Ka7/2I4SUONXO4za50+BUQt4vvuVJaN9VevBEOklMqwhy+w9+FMJb38+LJaJ7wuFjWCuwe117Vyk/PO9eqEZsfwNYqn1eZTlstOiBTkfGfwljIAfjkC9zdvhs= ;{id = 33655} 066C757875727900002E0001000151800093002F08010001518052F4220052EAD97083770084B71C007BF3B405723005843E48FBD04F6386C679FD401DA12754667DADBD43861EEFBC6018843E994117EA278D59ED8D9C5E62D58546D038CE41DB0BB8191CF1F2667306774CEBC1D08F114F1BD60928CE10F1D6BD0791A84DBD7C442DAFB91876518052ACA2B7BA954E544E92A0FAD19977563A098E10664661FA9E980CAA luxury. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hLccAHvztAVyMAWEPkj70E9jhsZ5/UAdoSdUZn2tvUOGHu+8YBiEPplBF+onjVntjZxeYtWFRtA4zkHbC7gZHPHyZnMGd0zrwdCPEU8b1gkozhDx1r0HkahNvXxELa+5GHZRgFKsore6lU5UTpKg+tGZd1Y6CY4QZkZh+p6YDKo= ;{id = 33655} 066C757875727900002F000100015180000C026C76000006200000000013 luxury. 86400 IN NSEC lv. NS DS RRSIG NSEC 0161036E6963066C757875727900000100010002A300000425D1C00A a.nic.luxury. 172800 IN A 37.209.192.10 0161036E6963066C757875727900001C00010002A300001020010DCD000100000000000000000010 a.nic.luxury. 172800 IN AAAA 2001:dcd:1::10 0162036E6963066C757875727900000100010002A300000425D1C20A b.nic.luxury. 172800 IN A 37.209.194.10 0162036E6963066C757875727900001C00010002A300001020010DCD000200000000000000000010 b.nic.luxury. 172800 IN AAAA 2001:dcd:2::10 0163036E6963066C757875727900000100010002A300000425D1C40A c.nic.luxury. 172800 IN A 37.209.196.10 0163036E6963066C757875727900001C00010002A300001020010DCD000300000000000000000010 c.nic.luxury. 172800 IN AAAA 2001:dcd:3::10 0164036E6963066C757875727900000100010002A300000425D1C60A d.nic.luxury. 172800 IN A 37.209.198.10 0164036E6963066C757875727900001C00010002A300001020010DCD000400000000000000000010 d.nic.luxury. 172800 IN AAAA 2001:dcd:4::10 026C7600000200010002A300000A0161036E6963026C7600 lv. 172800 IN NS a.nic.lv. 026C7600000200010002A300000A0162036E6963026C7600 lv. 172800 IN NS b.nic.lv. 026C7600000200010002A300000A0163036E6963026C7600 lv. 172800 IN NS c.nic.lv. 026C7600000200010002A300000A0164036E6963026C7600 lv. 172800 IN NS d.nic.lv. 026C7600000200010002A300001B026C76056363746C640761757468646E730472697065036E657400 lv. 172800 IN NS lv.cctld.authdns.ripe.net. 026C7600000200010002A30000100573756E69630573756E657402736500 lv. 172800 IN NS sunic.sunet.se. 026C7600002B0001000151800024A42208027E932A4F9CF9B1CD047C277E3CD323A53D42347D47C7BF1DD6018FF4B344FC1C lv. 86400 IN DS 42018 8 2 7E932A4F9CF9B1CD047C277E3CD323A53D42347D47C7BF1DD6018FF4B344FC1C 026C7600002E0001000151800093002B08010001518052F4220052EAD9708377002309793B708087F43923E7F6B7DCCBEE35276F8AD62C99B4390A766D2CCC70AADA5C8E9FA531D6CD334BD977CD0B5087A07C7869B9B9EC83D8396D6E743903B476BCD2BA01D709EDEC8AADC5F27066FF336589FF39959DD6DFD1DDCD1E233CDD6D97C0DC7D2B7F3075AD52CC6CC639EC0A3E859289BE7A4820932DAA83AF3618 lv. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Iwl5O3CAh/Q5I+f2t9zL7jUnb4rWLJm0OQp2bSzMcKraXI6fpTHWzTNL2XfNC1CHoHx4abm57IPYOW1udDkDtHa80roB1wnt7IqtxfJwZv8zZYn/OZWd1t/R3c0eIzzdbZfA3H0rfzB1rVLMbMY57Ao+hZKJvnpIIJMtqoOvNhg= ;{id = 33655} 026C7600002E0001000151800093002F08010001518052F4220052EAD9708377006A3F3D5B8F9D6A89BFC1C14DA1A9E76389C9D99F85431EB6AA45EC730930DDF3C296A4424B48362A93E1C1A31CAA958AB272C4FED794DCE71CD8973668073BFB1BD97F849D659169FA0464B23ACAA246AA317DA9D11EE183C9207AFFB7869666E1070B750E9A89F0D7F3EBDB5CD243C851CC815105DB4B90AF9FCF7691234CCA lv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aj89W4+daom/wcFNoannY4nJ2Z+FQx62qkXscwkw3fPClqRCS0g2KpPhwaMcqpWKsnLE/teU3Occ2Jc2aAc7+xvZf4SdZZFp+gRksjrKokaqMX2p0R7hg8kgev+3hpZm4QcLdQ6aifDX8+vbXNJDyFHMgVEF20uQr5/PdpEjTMo= ;{id = 33655} 026C7600002F000100015180000C026C79000006200000000013 lv. 86400 IN NSEC ly. NS DS RRSIG NSEC 0161036E6963026C7600000100010002A30000045BC69C63 a.nic.lv. 172800 IN A 91.198.156.99 0161036E6963026C7600001C00010002A30000102A020500440007000000000000000004 a.nic.lv. 172800 IN AAAA 2a02:500:4400:700::4 0162036E6963026C7600000100010002A30000045CF04601 b.nic.lv. 172800 IN A 92.240.70.1 0163036E6963026C7600000100010002A3000004C2000118 c.nic.lv. 172800 IN A 194.0.1.24 0163036E6963026C7600001C00010002A300001020010678000400000000000000000018 c.nic.lv. 172800 IN AAAA 2001:678:4::18 0164036E6963026C7600000100010002A3000004C2000801 d.nic.lv. 172800 IN A 194.0.8.1 0164036E6963026C7600001C00010002A300001020010678000B00010000000000000001 d.nic.lv. 172800 IN AAAA 2001:678:b:1::1 026C7900000200010002A300001B026C79056363746C640761757468646E730472697065036E657400 ly. 172800 IN NS ly.cctld.authdns.ripe.net. 026C7900000200010002A300001003646E73066C74746E6574036E657400 ly. 172800 IN NS dns.lttnet.net. 026C7900000200010002A300001104646E7331066C74746E6574036E657400 ly. 172800 IN NS dns1.lttnet.net. 026C7900000200010002A3000013056E732D6C7907616672696E6963036E657400 ly. 172800 IN NS ns-ly.afrinic.net. 026C7900000200010002A30000140670686C6F656D07756F7265676F6E0365647500 ly. 172800 IN NS phloem.uoregon.edu. 026C7900002F000100015180000C026D61000006200000000003 ly. 86400 IN NSEC ma. NS RRSIG NSEC 026C7900002E0001000151800093002F08010001518052F4220052EAD9708377002F378CC57603031F0223B1C828384FEE7A53A0EA53ED14F0FB31EDFF262545B2A0A4CE79347ED5B3D6EFC221ECF293784BE5A2BFD85EF4894A3FF27B8F29F4E2263DA781C0E5CAC15FF5D6CEFE471E41F689749A4A3A49C0E70EF9B56D1A32DA1241DC184DDDCB5D635124EE5E7794615982AB0E2BB9C318819CF08D1029C79D ly. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LzeMxXYDAx8CI7HIKDhP7npToOpT7RTw+zHt/yYlRbKgpM55NH7Vs9bvwiHs8pN4S+Wiv9he9IlKP/J7jyn04iY9p4HA5crBX/XWzv5HHkH2iXSaSjpJwOcO+bVtGjLaEkHcGE3dy11jUSTuXneUYVmCqw4rucMYgZzwjRApx50= ;{id = 33655} 026D6100002F00010001518000140A6D616E6167656D656E74000006200000000003 ma. 86400 IN NSEC management. NS RRSIG NSEC 026D6100002E0001000151800093002F08010001518052F4220052EAD97083770087E4AB0513F5E8BC3FAD2719606D806B8F62C912FF6D0B3472C4621737D6830D5C529F3517380D64AE50BFAF479AB9BFFCAA221E0F24B363A7E43D973FEBA3839566BEA8C1CED8A7DE7E5A773409F141F4CCAA4B765746B9045B777140E546A020A06A80917473AC1D229DFDAFE448300997A229EC730271544F6A143655D025 ma. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . h+SrBRP16Lw/rScZYG2Aa49iyRL/bQs0csRiFzfWgw1cUp81FzgNZK5Qv69Hmrm//KoiHg8ks2On5D2XP+ujg5VmvqjBztin3n5adzQJ8UH0zKpLdldGuQRbd3FA5UagIKBqgJF0c6wdIp39r+RIMAmXoinscwJxVE9qFDZV0CU= ;{id = 33655} 026D6100000200010002A300001B026D61056363746C640761757468646E730472697065036E657400 ma. 172800 IN NS ma.cctld.authdns.ripe.net. 026D6100000200010002A300000E03646E7305696E72696102667200 ma. 172800 IN NS dns.inria.fr. 026D6100000200010002A3000010036E73310369616D036E6574026D6100 ma. 172800 IN NS ns1.iam.net.ma. 026D6100000200010002A3000010036E73320369616D036E6574026D6100 ma. 172800 IN NS ns2.iam.net.ma. 026D6100000200010002A300000C036E7332036E696302667200 ma. 172800 IN NS ns2.nic.fr. 026D6100000200010002A3000010036E73330369616D036E6574026D6100 ma. 172800 IN NS ns3.iam.net.ma. 0668617269737304616E7274026D6100000100010002A3000004C2CCF18C hariss.anrt.ma. 172800 IN A 194.204.241.140 04646E7332066D656E617261026D6100000100010002A300000451C06CE4 dns2.menara.ma. 172800 IN A 81.192.108.228 04646E7333066D656E617261026D6100000100010002A300000451C06CA4 dns3.menara.ma. 172800 IN A 81.192.108.164 036E73310369616D036E6574026D6100000100010002A3000004D4D9000A ns1.iam.net.ma. 172800 IN A 212.217.0.10 036E73320369616D036E6574026D6100000100010002A300000451C03517 ns2.iam.net.ma. 172800 IN A 81.192.53.23 036E73330369616D036E6574026D6100000100010002A3000004D4D9010D ns3.iam.net.ma. 172800 IN A 212.217.1.13 0A6D616E6167656D656E7400000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 management. 172800 IN NS demand.beta.aridns.net.au. 0A6D616E6167656D656E7400000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 management. 172800 IN NS demand.alpha.aridns.net.au. 0A6D616E6167656D656E7400000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 management. 172800 IN NS demand.delta.aridns.net.au. 0A6D616E6167656D656E7400000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 management. 172800 IN NS demand.gamma.aridns.net.au. 0A6D616E6167656D656E7400002B000100015180002472EB0802DE87320C9CC67BFF04B718F11EF3B58F3DDE54CB615882F97D2EAB6C295EE843 management. 86400 IN DS 29419 8 2 DE87320C9CC67BFF04B718F11EF3B58F3DDE54CB615882F97D2EAB6C295EE843 0A6D616E6167656D656E7400002E0001000151800093002B08010001518052F4220052EAD9708377005B054303063734AD27BA44655CFA87887473D32784E261FD210EA29C74A4DA51A9904341892FA4E88F2167A6A9F50DFD09B333DFE8916AEA5F99F23F85E827AE30BE2539A3D41BD71FE9EACEB9B47B18E289D6920DD6D64138CCF9934B35935CBF7EFCEE6C52F1DF506B9917CA25605C2ED013934FEE10B980DC63CBA126FDA0 management. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WwVDAwY3NK0nukRlXPqHiHRz0yeE4mH9IQ6inHSk2lGpkENBiS+k6I8hZ6ap9Q39CbMz3+iRaupfmfI/hegnrjC+JTmj1BvXH+nqzrm0exjiidaSDdbWQTjM+ZNLNZNcv3787mxS8d9Qa5kXyiVgXC7QE5NP7hC5gNxjy6Em/aA= ;{id = 33655} 0A6D616E6167656D656E7400002E0001000151800093002F08010001518052F4220052EAD970837700720F9ADBAE7C5B5D689B4DD9C80C66AC0FB0B8A3E3722272F0D9F6E48A3D4F574AEC03C3930561A44063DB252FC9E0B040237452AB2026605CF1AE1561082E7CE90A54299CA76B3EB8DCCD3D33111D9FEE44D7948897BA1ABF10B549C934E07AA9D7D9BDD81A2946CE8775BB2FD9BBDC62FBEA7994877B469264912A6354E68C management. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cg+a2658W11om03ZyAxmrA+wuKPjciJy8Nn25Io9T1dK7APDkwVhpEBj2yUvyeCwQCN0UqsgJmBc8a4VYQgufOkKVCmcp2s+uNzNPTMRHZ/uRNeUiJe6Gr8QtUnJNOB6qdfZvdgaKUbOh3W7L9m73GL76nmUh3tGkmSRKmNU5ow= ;{id = 33655} 0A6D616E6167656D656E7400002F0001000151800013096D61726B6574696E67000006200000000013 management. 86400 IN NSEC marketing. NS DS RRSIG NSEC 096D61726B6574696E6700000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 marketing. 172800 IN NS demand.beta.aridns.net.au. 096D61726B6574696E6700000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 marketing. 172800 IN NS demand.alpha.aridns.net.au. 096D61726B6574696E6700000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 marketing. 172800 IN NS demand.delta.aridns.net.au. 096D61726B6574696E6700000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 marketing. 172800 IN NS demand.gamma.aridns.net.au. 096D61726B6574696E6700002B000100015180002410AB080264CC06CC6F4A935A5319A723AFE75D8BE89ACD73C4A766AB9BDF4E0C02059869 marketing. 86400 IN DS 4267 8 2 64CC06CC6F4A935A5319A723AFE75D8BE89ACD73C4A766AB9BDF4E0C02059869 096D61726B6574696E6700002E0001000151800093002B08010001518052F4220052EAD970837700A05EFE072E38BB31F0F6BF5964684C909B7B4C12C11D6E4CDC8B1B15AC31E9FEACDB8AE79C5CBB3222A983780ACAF3E8122B9725E4612EBC53F08712C3438B1AA732082F689E7DE0BCD58509BB76D7A8F3B61B7104A156A4FA02DB4E050D2B174758E7A1120B5DE11496F0540F7A15A44DADA3398515B9DB7E74F1D7197E8663 marketing. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oF7+By44uzHw9r9ZZGhMkJt7TBLBHW5M3IsbFawx6f6s24rnnFy7MiKpg3gKyvPoEiuXJeRhLrxT8IcSw0OLGqcyCC9onn3gvNWFCbt216jzthtxBKFWpPoC204FDSsXR1jnoRILXeEUlvBUD3oVpE2tozmFFbnbfnTx1xl+hmM= ;{id = 33655} 096D61726B6574696E6700002E0001000151800093002F08010001518052F4220052EAD970837700A328DA0BE0D0C2BE3E79098431CF3E3A287A908ABCFA1F6B1CFFC106A46A3D8E585E090DF62B1FCBDC831AC6CD689F4BB5FC130487EA13DFC88A2E9C9D58D2FEE26A846FD8C8628C83215C7724493F9307D02430501EF696E3CCD17526950E7CEBD85CA8CEE24017EAA3B1E294EBA1093E6524D99A9A5D3AB4D31E2CB2F39D35 marketing. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oyjaC+DQwr4+eQmEMc8+Oih6kIq8+h9rHP/BBqRqPY5YXgkN9isfy9yDGsbNaJ9LtfwTBIfqE9/Iii6cnVjS/uJqhG/YyGKMgyFcdyRJP5MH0CQwUB72luPM0XUmlQ5869hcqM7iQBfqo7HilOuhCT5lJNmaml06tNMeLLLznTU= ;{id = 33655} 096D61726B6574696E6700002F000100015180000C026D63000006200000000013 marketing. 86400 IN NSEC mc. NS DS RRSIG NSEC 026D6300000200010002A300001B026D63056363746C640761757468646E730472697065036E657400 mc. 172800 IN NS mc.cctld.authdns.ripe.net. 026D6300000200010002A300000C036E7331036E6963026D6300 mc. 172800 IN NS ns1.nic.mc. 026D6300000200010002A300000C036E7332036E6963026D6300 mc. 172800 IN NS ns2.nic.mc. 026D6300002F000100015180000C026D64000006200000000003 mc. 86400 IN NSEC md. NS RRSIG NSEC 026D6300002E0001000151800093002F08010001518052F4220052EAD970837700B9C69E4864898C84D03B0E3CEA28473D2C4045FDE86DC39A32C62CD76B5F1A844EC5E20A86885FF0276ED389EF68B28B0D8C9649B64F3FFB08FCB261D93E8F1F7655B6CB46F9409BEAB9AC5BD3E82E49A789309DAF28CC0026653ADBF621474DF0A073FD4BF53294417C8D7533C8207798C56037F977C7D35ADC04E16455472C mc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ucaeSGSJjITQOw486ihHPSxARf3obcOaMsYs12tfGoROxeIKhohf8Cdu04nvaLKLDYyWSbZPP/sI/LJh2T6PH3ZVtstG+UCb6rmsW9PoLkmniTCdryjMACZlOtv2IUdN8KBz/Uv1MpRBfI11M8ggd5jFYDf5d8fTWtwE4WRVRyw= ;{id = 33655} 036E7331036E6963026D6300000100010002A3000004C34E13D8 ns1.nic.mc. 172800 IN A 195.78.19.216 036E7332036E6963026D6300000100010002A3000004551FD983 ns2.nic.mc. 172800 IN A 85.31.217.131 026D6400000200010002A300001B026D64056363746C640761757468646E730472697065036E657400 md. 172800 IN NS md.cctld.authdns.ripe.net. 026D6400000200010002A300000C036E736203646E73026D6400 md. 172800 IN NS nsb.dns.md. 026D6400000200010002A300000C036E736303646E73026D6400 md. 172800 IN NS nsc.dns.md. 026D6400000200010002A300001106646E732D6D6405726F746C6402726F00 md. 172800 IN NS dns-md.rotld.ro. 026D6400000200010002A3000010066E732D65787403697363036F726700 md. 172800 IN NS ns-ext.isc.org. 026D6400000200010002A300000F066E732D696E7403646E73026D6400 md. 172800 IN NS ns-int.dns.md. 026D6400002F000100015180000C026D65000006200000000003 md. 86400 IN NSEC me. NS RRSIG NSEC 026D6400002E0001000151800093002F08010001518052F4220052EAD97083770089D4C45736E206BB9931E3C7DAC499C0397E16C7E274988001CCE5BDA350AC9C0AEF7448EAAA26B095ED842DDF88F2C9053BD597E456FF87D463EF449E47D42C6BBEC119EA1AC49E510EDC0C0DAEF856B1CFF290C896C75C1E16F161B23B775154363FF48E6C92F84BCBA4CAF879284B0C706017D1A9CA68559189BF603B9F72 md. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . idTEVzbiBruZMePH2sSZwDl+FsfidJiAAczlvaNQrJwK73RI6qomsJXthC3fiPLJBTvVl+RW/4fUY+9EnkfULGu+wRnqGsSeUQ7cDA2u+Faxz/KQyJbHXB4W8WGyO3dRVDY/9I5skvhLy6TK+HkoSwxwYBfRqcpoVZGJv2A7n3I= ;{id = 33655} 066E732D696E7403646E73026D6400000100010002A3000004D91A9005 ns-int.dns.md. 172800 IN A 217.26.144.5 036E736203646E73026D6400000100010002A3000004D91A900F nsb.dns.md. 172800 IN A 217.26.144.15 036E736303646E73026D6400000100010002A30000045F410903 nsc.dns.md. 172800 IN A 95.65.9.3 026D6500000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 me. 172800 IN NS a0.cctld.afilias-nst.info. 026D6500000200010002A3000018026132026D650B6166696C6961732D6E737404696E666F00 me. 172800 IN NS a2.me.afilias-nst.info. 026D6500000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 me. 172800 IN NS b0.cctld.afilias-nst.org. 026D6500000200010002A3000017026232026D650B6166696C6961732D6E7374036F726700 me. 172800 IN NS b2.me.afilias-nst.org. 026D6500000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 me. 172800 IN NS c0.cctld.afilias-nst.info. 026D6500000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 me. 172800 IN NS d0.cctld.afilias-nst.org. 026D6500000200010002A300000B026E73036E6963026D6500 me. 172800 IN NS ns.nic.me. 026D6500000200010002A300000C036E7332036E6963026D6500 me. 172800 IN NS ns2.nic.me. 026D6500002B00010001518000180A09070109BA1EB4D20402620881FD9848994417800DB26A me. 86400 IN DS 2569 7 1 09BA1EB4D20402620881FD9848994417800DB26A 026D6500002B00010001518000240A09070294E798106F033500E67567B197AE9132C0E916764DC743C55A9ECA3C7BF559E2 me. 86400 IN DS 2569 7 2 94E798106F033500E67567B197AE9132C0E916764DC743C55A9ECA3C7BF559E2 026D6500002E0001000151800093002B08010001518052F4220052EAD970837700858A39745684070DC9A86D075E763C9F44E6517FB8B38ECB4F76BD20ACCEBC6FE234C03B504C6E8D1ED035D944EF5DAC6209903451BE9AA9603B7BEFDB3EFABD31A2225CA6515C8D8DAB5E578B9A88FA115A6E47EA7E29DCAFFDEB18050D17E0E268FDF5081EC9D84F38A5D1CCC2E8FCCE3501704B90B7BC9F0301ECF874E470 me. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hYo5dFaEBw3JqG0HXnY8n0TmUX+4s47LT3a9IKzOvG/iNMA7UExujR7QNdlE712sYgmQNFG+mqlgO3vv2z76vTGiIlymUVyNjateV4uaiPoRWm5H6n4p3K/96xgFDRfg4mj99QgeydhPOKXRzMLo/M41AXBLkLe8nwMB7Ph05HA= ;{id = 33655} 026D6500002E0001000151800093002F08010001518052F4220052EAD9708377005C2184B57146C6A80E81D6CD40680DF1C5F8FFCD9D44AE800CA17531B88C30BEC5F924011D3A1AC6A8F7797738E4ABB79A1AF07AAD84BAE5C31104F47E1E1ED68C545FEFC60F1D352B1A75647A7A30934BB2BCEBBE1E64890F0DAC25E42A3219355D93018E13D5B440E2C5021E01D27B77F1974E6E35FBDE394916E7FE3F0EED me. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XCGEtXFGxqgOgdbNQGgN8cX4/82dRK6ADKF1MbiMML7F+SQBHToaxqj3eXc45Ku3mhrweq2EuuXDEQT0fh4e1oxUX+/GDx01Kxp1ZHp6MJNLsrzrvh5kiQ8NrCXkKjIZNV2TAY4T1bRA4sUCHgHSe3fxl05uNfveOUkW5/4/Du0= ;{id = 33655} 026D6500002F000100015180000E046D656E75000006200000000013 me. 86400 IN NSEC menu. NS DS RRSIG NSEC 026E73036E6963026D6500000100010002A300000459BC2C2C ns.nic.me. 172800 IN A 89.188.44.44 036E7332036E6963026D6500000100010002A300000459BC2C58 ns2.nic.me. 172800 IN A 89.188.44.88 046D656E7500000200010002A300000C0161036E6963046D656E7500 menu. 172800 IN NS a.nic.menu. 046D656E7500000200010002A300000C0162036E6963046D656E7500 menu. 172800 IN NS b.nic.menu. 046D656E7500000200010002A300000C0163036E6963046D656E7500 menu. 172800 IN NS c.nic.menu. 046D656E7500000200010002A300000C0164036E6963046D656E7500 menu. 172800 IN NS d.nic.menu. 046D656E7500002B0001000151800024CACC0802AA3C98EE447CFA3BBF57D8A2899626324DE2097353FB5DBF031519A4FE6964E6 menu. 86400 IN DS 51916 8 2 AA3C98EE447CFA3BBF57D8A2899626324DE2097353FB5DBF031519A4FE6964E6 046D656E7500002E0001000151800093002B08010001518052F4220052EAD97083770055578ADF0B88335CE9E3D761B62D7FA2451987E1DC45B7C73FAF716A6676FD8C6F799470BCAC6F2D6CB7116190506D1570C6B1589D6707D2154B20FF70DBC90E046B212ABD49D8F3BBBFF419C968A4CA7B8ED5B729EF98FABEDF4CCBF93B4FAF683F15FE19890BD1FC8D242115BF1B298192C681BB13A60CA5B993AD8555DA47 menu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VVeK3wuIM1zp49dhti1/okUZh+HcRbfHP69xamZ2/YxveZRwvKxvLWy3EWGQUG0VcMaxWJ1nB9IVSyD/cNvJDgRrISq9Sdjzu7/0GclopMp7jtW3Ke+Y+r7fTMv5O0+vaD8V/hmJC9H8jSQhFb8bKYGSxoG7E6YMpbmTrYVV2kc= ;{id = 33655} 046D656E7500002E0001000151800093002F08010001518052F4220052EAD970837700226D581DE209743C307261CDD520612C545429EC04ABAB1993AB43AB2888326E1D7BBA2C9F66B108F6B9C034B33B722F540F2CA1651FB9FECF86B62238C6E99F7D890CEA9A1CCBD2CD190B4BA12C4D8D9625A343D7085783A04EE5EA14C26C92B0F88D747AAEC9DCA0EC743F380A3C86E88DFD1373F21D9A70318AE986E1116D menu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Im1YHeIJdDwwcmHN1SBhLFRUKewEq6sZk6tDqyiIMm4de7osn2axCPa5wDSzO3IvVA8soWUfuf7PhrYiOMbpn32JDOqaHMvSzRkLS6EsTY2WJaND1whXg6BO5eoUwmySsPiNdHquydyg7HQ/OAo8huiN/RNz8h2acDGK6YbhEW0= ;{id = 33655} 046D656E7500002F000100015180000C026D67000006200000000013 menu. 86400 IN NSEC mg. NS DS RRSIG NSEC 0161036E6963046D656E7500000100010002A300000425D1C00A a.nic.menu. 172800 IN A 37.209.192.10 0161036E6963046D656E7500001C00010002A300001020010DCD000100000000000000000010 a.nic.menu. 172800 IN AAAA 2001:dcd:1::10 0162036E6963046D656E7500000100010002A300000425D1C20A b.nic.menu. 172800 IN A 37.209.194.10 0162036E6963046D656E7500001C00010002A300001020010DCD000200000000000000000010 b.nic.menu. 172800 IN AAAA 2001:dcd:2::10 0163036E6963046D656E7500000100010002A300000425D1C40A c.nic.menu. 172800 IN A 37.209.196.10 0163036E6963046D656E7500001C00010002A300001020010DCD000300000000000000000010 c.nic.menu. 172800 IN AAAA 2001:dcd:3::10 0164036E6963046D656E7500000100010002A300000425D1C60A d.nic.menu. 172800 IN A 37.209.198.10 0164036E6963046D656E7500001C00010002A300001020010DCD000400000000000000000010 d.nic.menu. 172800 IN AAAA 2001:dcd:4::10 026D6700000200010002A300001B026D67056363746C640761757468646E730472697065036E657400 mg. 172800 IN NS mg.cctld.authdns.ripe.net. 026D6700000200010002A300000B026E7303647473026D6700 mg. 172800 IN NS ns.dts.mg. 026D6700000200010002A300000B026E73036E6963026D6700 mg. 172800 IN NS ns.nic.mg. 026D6700000200010002A3000010036D67310664796E746C64036E657400 mg. 172800 IN NS mg1.dyntld.net. 026D6700000200010002A3000010036D67320664796E746C64036E657400 mg. 172800 IN NS mg2.dyntld.net. 026D6700000200010002A3000010036D67330664796E746C64036E657400 mg. 172800 IN NS mg3.dyntld.net. 026D6700000200010002A3000010036D67340664796E746C64036E657400 mg. 172800 IN NS mg4.dyntld.net. 026D6700000200010002A300000C036E73310369726402667200 mg. 172800 IN NS ns1.ird.fr. 026D6700000200010002A3000014056E732D6D67086D616C616761737903636F6D00 mg. 172800 IN NS ns-mg.malagasy.com. 026D6700002F000100015180000C026D68000006200000000003 mg. 86400 IN NSEC mh. NS RRSIG NSEC 026D6700002E0001000151800093002F08010001518052F4220052EAD970837700491765D2E2806BCA9617DC88F2ADE7E28BFC0778751CA50F3A9D5243EF5DB238DA348B94601F156C0092E0D4ACF957D1052C67E489277A0604446A036CCE72893E8896C15CCE576C2FDC0D0D9E49A7E06C10613FB2C143F5429FA8A794B9E416581DBBFF8BC7D11C9A0568BDDCD98C2ED58597704890034D9A4A66280EAA2395 mg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SRdl0uKAa8qWF9yI8q3n4ov8B3h1HKUPOp1SQ+9dsjjaNIuUYB8VbACS4NSs+VfRBSxn5IknegYERGoDbM5yiT6IlsFczldsL9wNDZ5Jp+BsEGE/ssFD9UKfqKeUueQWWB27/4vH0RyaBWi93NmMLtWFl3BIkANNmkpmKA6qI5U= ;{id = 33655} 026E7303647473026D6700000100010002A3000004C4C02002 ns.dts.mg. 172800 IN A 196.192.32.2 026E73036E6963026D6700000100010002A3000004C4C02A99 ns.nic.mg. 172800 IN A 196.192.42.153 026D6800000200010002A300000F026E73066E74616D6172036E657400 mh. 172800 IN NS ns.ntamar.net. 026D6800000200010002A3000015026E730C616D61727368616C6C696E6303636F6D00 mh. 172800 IN NS ns.amarshallinc.com. 026D6800002F000100015180000D036D696C000006200000000003 mh. 86400 IN NSEC mil. NS RRSIG NSEC 026D6800002E0001000151800093002F08010001518052F4220052EAD970837700675BF951C6D50AC81E70BC35A527CA00ABCCE94C83AA870C0DDAC0E91B4D46156B625E7363D36A85B8F9F5FB4BD8CCF1AD2002761874FAD748973C1FF8F882DD8E93F082655C2EC993DE91EE9966A6A839D6CFB4791AF4DE194CA17E5256195F438FD4CC5E3429CF29D408E0ED79463F14814D632B0709768AFA28C55DD9CF25 mh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Z1v5UcbVCsgecLw1pSfKAKvM6UyDqocMDdrA6RtNRhVrYl5zY9Nqhbj59ftL2MzxrSACdhh0+tdIlzwf+PiC3Y6T8IJlXC7Jk96R7plmpqg51s+0eRr03hlMoX5SVhlfQ4/UzF40Kc8p1Ajg7XlGPxSBTWMrBwl2ivooxV3ZzyU= ;{id = 33655} 036D696C00000200010002A300000F04636F6E31046E697072036D696C00 mil. 172800 IN NS con1.nipr.mil. 036D696C00000200010002A300000F04636F6E32046E697072036D696C00 mil. 172800 IN NS con2.nipr.mil. 036D696C00000200010002A300000F0465757231046E697072036D696C00 mil. 172800 IN NS eur1.nipr.mil. 036D696C00000200010002A300000F0465757232046E697072036D696C00 mil. 172800 IN NS eur2.nipr.mil. 036D696C00000200010002A300000F0470616331046E697072036D696C00 mil. 172800 IN NS pac1.nipr.mil. 036D696C00000200010002A300000F0470616332046E697072036D696C00 mil. 172800 IN NS pac2.nipr.mil. 036D696C00002B000100015180001880E9080102AE8EE2915FF47023EFD96A649D997069196C01 mil. 86400 IN DS 33001 8 1 02AE8EE2915FF47023EFD96A649D997069196C01 036D696C00002B000100015180002480E908027BE472D58626F033479706F80DFBABBDFA3BE748C3E94B7D97E9DD5331A5288E mil. 86400 IN DS 33001 8 2 7BE472D58626F033479706F80DFBABBDFA3BE748C3E94B7D97E9DD5331A5288E 036D696C00002E0001000151800093002B08010001518052F4220052EAD970837700652F54862DD7DC9BA327DD7C9AAA502913E97E24F20BF23B343ABE0A3E032E1D51E974CBD4518B6CF98691BABF61E4CD3712509D307AA138CB5007D044773E7AB9807C76B2293A03B22B826C58CD4D99C3EB9E333F578FD9AEB64B02EBD6394236077AD69F639457E625E35F56C9243F0266EE43F02F8C6E9C90FCE7EF883B5E mil. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZS9Uhi3X3JujJ918mqpQKRPpfiTyC/I7NDq+Cj4DLh1R6XTL1FGLbPmGkbq/YeTNNxJQnTB6oTjLUAfQRHc+ermAfHayKToDsiuCbFjNTZnD654zP1eP2a62SwLr1jlCNgd61p9jlFfmJeNfVskkPwJm7kPwL4xunJD85++IO14= ;{id = 33655} 036D696C00002E0001000151800093002F08010001518052F4220052EAD9708377005ACBAB217A1C37EC603B223CF0FC6BBD6DB8E100D1AD50DABDE7CE02753FF6A8FE4D1042DBB03D8D9B99AF2C6B423206FCB4E43750475CA2E9214B2B08863955E0AB3B87961760B046AF352D303A983074B577233D62DA8FCAC00BBE06618B047A1B27EC7D5CE6DFF2BBE10EB7C8B9109707CF2C21014FD03D74FF38598CD77A mil. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WsurIXocN+xgOyI88PxrvW244QDRrVDavefOAnU/9qj+TRBC27A9jZuZryxrQjIG/LTkN1BHXKLpIUsrCIY5VeCrO4eWF2CwRq81LTA6mDB0tXcjPWLaj8rAC74GYYsEehsn7H1c5t/yu+EOt8i5EJcHzywhAU/QPXT/OFmM13o= ;{id = 33655} 036D696C00002F000100015180000C026D6B000006200000000013 mil. 86400 IN NSEC mk. NS DS RRSIG NSEC 04636F6E31046E697072036D696C00000100010002A3000004C7FC9DEA con1.nipr.mil. 172800 IN A 199.252.157.234 04636F6E32046E697072036D696C00000100010002A3000004C7FCA2EA con2.nipr.mil. 172800 IN A 199.252.162.234 0465757231046E697072036D696C00000100010002A3000004C7FC9AEA eur1.nipr.mil. 172800 IN A 199.252.154.234 0465757232046E697072036D696C00000100010002A3000004C7FC8FEA eur2.nipr.mil. 172800 IN A 199.252.143.234 0470616331046E697072036D696C00000100010002A3000004C7FCB4EA pac1.nipr.mil. 172800 IN A 199.252.180.234 0470616332046E697072036D696C00000100010002A3000004C7FC9BEA pac2.nipr.mil. 172800 IN A 199.252.155.234 026D6B00000200010002A300000E036E73320561726E657302736900 mk. 172800 IN NS ns2.arnes.si. 026D6B00000200010002A3000012036E733506756E6976696502616302617400 mk. 172800 IN NS ns5.univie.ac.at. 026D6B00000200010002A300000D037269700370736703636F6D00 mk. 172800 IN NS rip.psg.com. 026D6B00000200010002A3000015056B69746B61066D61726E6574036E6574026D6B00 mk. 172800 IN NS kitka.marnet.net.mk. 026D6B00002F000100015180000C026D6C000006200000000003 mk. 86400 IN NSEC ml. NS RRSIG NSEC 026D6B00002E0001000151800093002F08010001518052F4220052EAD970837700525319777AF774EADDF95BEE7E617F1E95AAF31DC5B2C4267D1C7EF06CEFD8C830E7F0C20CCC047CCD7D8E30A68F1AF6DEEDD73733B6A934B2B8BD22BC632C7AA9D3BACF606153DF8B200F9DB102F8AA47E5933D6EE65F195BF607711BBBC0B3D1B800DE5EAC02A147BADB95CBDC79B225AC22645A013B7543FD8D435F0C5104 mk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UlMZd3r3dOrd+VvufmF/HpWq8x3FssQmfRx+8Gzv2Mgw5/DCDMwEfM19jjCmjxr23u3XNzO2qTSyuL0ivGMseqnTus9gYVPfiyAPnbEC+KpH5ZM9buZfGVv2B3Ebu8Cz0bgA3l6sAqFHutuVy9x5siWsImRaATt1Q/2NQ18MUQQ= ;{id = 33655} 056B69746B61066D61726E6574036E6574026D6B00000100010002A3000004C2958302 kitka.marnet.net.mk. 172800 IN A 194.149.131.2 056B69746B61066D61726E6574036E6574026D6B00001C00010002A30000102A020E48000000030000000000000002 kitka.marnet.net.mk. 172800 IN AAAA 2a02:e48:0:3::2 026D6C00000200010002A30000090161026E73026D6C00 ml. 172800 IN NS a.ns.ml. 026D6C00000200010002A30000090162026E73026D6C00 ml. 172800 IN NS b.ns.ml. 026D6C00000200010002A30000090163026E73026D6C00 ml. 172800 IN NS c.ns.ml. 026D6C00000200010002A30000090164026E73026D6C00 ml. 172800 IN NS d.ns.ml. 026D6C00002F000100015180000C026D6D000006200000000003 ml. 86400 IN NSEC mm. NS RRSIG NSEC 026D6C00002E0001000151800093002F08010001518052F4220052EAD9708377003B1ED730E03F6D25D24618EAC500D8E3B22C6995D21BC45C5C468699A2CAE980EF3E7EC15729F50A8ED51035DD2CA7A20F9D8E80E9158BB7918774A8F19B2BE2D2DE5E421BD2C3094C3B88A389D59F80A1E5725CB181041480D0E1066E679F3FD803F8209149577F4DEB0ADD50D97C21CE53F3CA295336A2AAC2DC1B074D3320 ml. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ox7XMOA/bSXSRhjqxQDY47IsaZXSG8RcXEaGmaLK6YDvPn7BVyn1Co7VEDXdLKeiD52OgOkVi7eRh3So8Zsr4tLeXkIb0sMJTDuIo4nVn4Ch5XJcsYEEFIDQ4QZuZ58/2AP4IJFJV39N6wrdUNl8Ic5T88opUzaiqsLcGwdNMyA= ;{id = 33655} 0161026E73026D6C00000100010002A3000004B915A801 a.ns.ml. 172800 IN A 185.21.168.1 0161026E73026D6C00001C00010002A30000102A041B00000000000000000000000001 a.ns.ml. 172800 IN AAAA 2a04:1b00::1 0162026E73026D6C00000100010002A3000004B915A901 b.ns.ml. 172800 IN A 185.21.169.1 0162026E73026D6C00001C00010002A30000102A041B00000100000000000000000001 b.ns.ml. 172800 IN AAAA 2a04:1b00:1::1 0163026E73026D6C00000100010002A3000004B915AA01 c.ns.ml. 172800 IN A 185.21.170.1 0163026E73026D6C00001C00010002A30000102A041B00000200000000000000000001 c.ns.ml. 172800 IN AAAA 2a04:1b00:2::1 0164026E73026D6C00000100010002A3000004B915AB01 d.ns.ml. 172800 IN A 185.21.171.1 0164026E73026D6C00001C00010002A30000102A041B00000300000000000000000001 d.ns.ml. 172800 IN AAAA 2a04:1b00:3::1 026D6D00000200010002A300001B026D6D056363746C640761757468646E730472697065036E657400 mm. 172800 IN NS mm.cctld.authdns.ripe.net. 026D6D00000200010002A3000010036E7330036E6963036E6574026D6D00 mm. 172800 IN NS ns0.nic.net.mm. 026D6D00000200010002A3000010036E7331036E6963036E6574026D6D00 mm. 172800 IN NS ns1.nic.net.mm. 026D6D00000200010002A3000010036E7332036E6963036E6574026D6D00 mm. 172800 IN NS ns2.nic.net.mm. 026D6D00002B000100015180001838F508018B0ED592A997E801DAFADA2CD4CC31999BDA8782 mm. 86400 IN DS 14581 8 1 8B0ED592A997E801DAFADA2CD4CC31999BDA8782 026D6D00002E0001000151800093002B08010001518052F4220052EAD9708377003E3470FE02816F78B607FD5C84F6B9DC89B21B9BED86737A2DB5F8EFD264EEB7E78688D258EAAF398E05458662C9140CC5519BA3048D3D6C1CCBF33A4B3EB9EB797397C1B65686754CA13E38677A2E51F9FEBC0F0E9E7E9C66EABD0196299F587C9E099AAC52E28F2B09591DE2AF347B73B5720412E203F43DA23EA870D48F6F mm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PjRw/gKBb3i2B/1chPa53ImyG5vthnN6LbX479Jk7rfnhojSWOqvOY4FRYZiyRQMxVGbowSNPWwcy/M6Sz6563lzl8G2VoZ1TKE+OGd6LlH5/rwPDp5+nGbqvQGWKZ9YfJ4JmqxS4o8rCVkd4q80e3O1cgQS4gP0PaI+qHDUj28= ;{id = 33655} 026D6D00002E0001000151800093002F08010001518052F4220052EAD9708377005AE93F71A91E8BCE190A554FD62660387309A86E5CDD15B474B85375B9FC7FCCEAD696EB06759550F5C9037073035B4C70F9EE5C9BC8675B9D52A4F99C0E75A794978E80063F35C9DF6A3D11329D20357636F318AFF5DD0B63929CB393AD3F8859401256452823CA3933DF8C318E6B982B6DE69B8067C82C34925D5834FE5136 mm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Wuk/cakei84ZClVP1iZgOHMJqG5c3RW0dLhTdbn8f8zq1pbrBnWVUPXJA3BzA1tMcPnuXJvIZ1udUqT5nA51p5SXjoAGPzXJ32o9ETKdIDV2NvMYr/XdC2OSnLOTrT+IWUASVkUoI8o5M9+MMY5rmCtt5puAZ8gsNJJdWDT+UTY= ;{id = 33655} 026D6D00002F000100015180000C026D6E000006200000000013 mm. 86400 IN NSEC mn. NS DS RRSIG NSEC 036E7330036E6963036E6574026D6D00000100010002A3000004CB514014 ns0.nic.net.mm. 172800 IN A 203.81.64.20 036E7331036E6963036E6574026D6D00000100010002A3000004CB515155 ns1.nic.net.mm. 172800 IN A 203.81.81.85 036E7332036E6963036E6574026D6D00000100010002A3000004CB515C0A ns2.nic.net.mm. 172800 IN A 203.81.92.10 026D6E00002F000100015180000C026D6F000006200000000013 mn. 86400 IN NSEC mo. NS DS RRSIG NSEC 026D6E00002E0001000151800093002F08010001518052F4220052EAD970837700399CF5254529B591E73154FB5BB1174243A2CF96F61B34E07EADC78864F679369DF1F66487159CCE7F253F592ED531D136E9FAF043D1A78E42B1AECFF7FEEAAF9618A20532A01F32A268EE4E7A42A25221CD2FC1F7F2AB6041908B9410F427E9C0EE724F3414ACDAAF3F139D93619DCC1A54BA7F1BE89B5F6203F3C68B01BA95 mn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OZz1JUUptZHnMVT7W7EXQkOiz5b2GzTgfq3HiGT2eTad8fZkhxWczn8lP1ku1THRNun68EPRp45Csa7P9/7qr5YYogUyoB8yomjuTnpColIhzS/B9/KrYEGQi5QQ9CfpwO5yTzQUrNqvPxOdk2GdzBpUun8b6JtfYgPzxosBupU= ;{id = 33655} 026D6E00002E0001000151800093002B08010001518052F4220052EAD9708377004168AC1816B36B59642CE278C79A3B4A71D5F7EA893BBEFD9DD54991CDF4DA9E142D2D22A90C53C5484BC3D5F31E159DAF9A2E4B9ED00D954A1A2F088D5585A15209C74DD9D29526BC76E2C534CC946E99ACDD3BEAEFCF6DF74A9A42194A9A1FEFFA80BE461E67994346D4C571273D6ABB60B057E85E2273D39972AA7A1F8E2D mn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . QWisGBaza1lkLOJ4x5o7SnHV9+qJO779ndVJkc302p4ULS0iqQxTxUhLw9XzHhWdr5ouS57QDZVKGi8IjVWFoVIJx03Z0pUmvHbixTTMlG6ZrN076u/PbfdKmkIZSpof7/qAvkYeZ5lDRtTFcSc9artgsFfoXiJz05lyqnofji0= ;{id = 33655} 026D6E00000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 mn. 172800 IN NS a0.cctld.afilias-nst.info. 026D6E00000200010002A300001B026132056363746C640B6166696C6961732D6E737404696E666F00 mn. 172800 IN NS a2.cctld.afilias-nst.info. 026D6E00000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 mn. 172800 IN NS b0.cctld.afilias-nst.org. 026D6E00000200010002A300001A026232056363746C640B6166696C6961732D6E7374036F726700 mn. 172800 IN NS b2.cctld.afilias-nst.org. 026D6E00000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 mn. 172800 IN NS c0.cctld.afilias-nst.info. 026D6E00000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 mn. 172800 IN NS d0.cctld.afilias-nst.org. 026D6E00000200010002A300000E036E7331056D61676963026D6E00 mn. 172800 IN NS ns1.magic.mn. 026D6E00000200010002A300000E036E7332056D61676963026D6E00 mn. 172800 IN NS ns2.magic.mn. 026D6E00000200010002A300000E036E7333056D61676963026D6E00 mn. 172800 IN NS ns3.magic.mn. 026D6E00000200010002A300000E036E7334056D61676963026D6E00 mn. 172800 IN NS ns4.magic.mn. 026D6E00002B0001000151800018EF7307017AED0B5BF96D4A045071FE60B6B1BE8F41A3D8A4 mn. 86400 IN DS 61299 7 1 7AED0B5BF96D4A045071FE60B6B1BE8F41A3D8A4 026D6E00002B0001000151800024EF73070235AD84BA39FF62258FE6052F8E31E67C341D6CFA41D38A4698F9F35FB68E30B6 mn. 86400 IN DS 61299 7 2 35AD84BA39FF62258FE6052F8E31E67C341D6CFA41D38A4698F9F35FB68E30B6 036E73310369646E026D6E00000100010002A3000004CAAA5028 ns1.idn.mn. 172800 IN A 202.170.80.40 036E73320369646E026D6E00000100010002A3000004CA83000B ns2.idn.mn. 172800 IN A 202.131.0.11 036E73330369646E026D6E00000100010002A3000004CAB4D812 ns3.idn.mn. 172800 IN A 202.180.216.18 036E7331056D61676963026D6E00000100010002A3000004CA83000A ns1.magic.mn. 172800 IN A 202.131.0.10 036E7332056D61676963026D6E00000100010002A3000004CA48F105 ns2.magic.mn. 172800 IN A 202.72.241.5 036E7333056D61676963026D6E00000100010002A3000004CA83E050 ns3.magic.mn. 172800 IN A 202.131.224.80 036E7334056D61676963026D6E00000100010002A3000004DA64541A ns4.magic.mn. 172800 IN A 218.100.84.26 026D6F00000200010002A300000C0161056D6F6E6963026D6F00 mo. 172800 IN NS a.monic.mo. 026D6F00000200010002A300000C0162056D6F6E6963026D6F00 mo. 172800 IN NS b.monic.mo. 026D6F00000200010002A300000C0163056D6F6E6963026D6F00 mo. 172800 IN NS c.monic.mo. 026D6F00000200010002A300000C0164056D6F6E6963026D6F00 mo. 172800 IN NS d.monic.mo. 026D6F00000200010002A300000C0165056D6F6E6963026D6F00 mo. 172800 IN NS e.monic.mo. 026D6F00000200010002A3000011036E7332046375686B0365647502686B00 mo. 172800 IN NS ns2.cuhk.edu.hk. 026D6F00000200010002A300000F046E7331370463646E73036E657400 mo. 172800 IN NS ns17.cdns.net. 026D6F00002F000100015180000E046D6F6269000006200000000003 mo. 86400 IN NSEC mobi. NS RRSIG NSEC 026D6F00002E0001000151800093002F08010001518052F4220052EAD97083770073B9D8AF39074194F3C37132834672735FD0D96DFAC36B7461468CDC98DBEFDE50FE1530C3B5E6DAFA6C29749B79A24173A7E65573E09D36BFEBF5F2B0474EA1293E5E3712CE37372C5AA39695A1F4EF1F96DFAEF913DF8FC54D608B31399960257F03DF45A01648387936050A04E2CD427D0B0250AD31FEA65025F931CA4930 mo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . c7nYrzkHQZTzw3Eyg0Zyc1/Q2W36w2t0YUaM3Jjb795Q/hUww7Xm2vpsKXSbeaJBc6fmVXPgnTa/6/XysEdOoSk+XjcSzjc3LFqjlpWh9O8flt+u+RPfj8VNYIsxOZlgJX8D30WgFkg4eTYFCgTizUJ9CwJQrTH+plAl+THKSTA= ;{id = 33655} 0161056D6F6E6963026D6F00000100010002A3000004CAAF572F a.monic.mo. 172800 IN A 202.175.87.47 0162056D6F6E6963026D6F00000100010002A3000004CAAF5730 b.monic.mo. 172800 IN A 202.175.87.48 0163056D6F6E6963026D6F00000100010002A3000004CAAF5731 c.monic.mo. 172800 IN A 202.175.87.49 0164056D6F6E6963026D6F00000100010002A3000004CAAF3373 d.monic.mo. 172800 IN A 202.175.51.115 0165056D6F6E6963026D6F00000100010002A3000004CAAF3374 e.monic.mo. 172800 IN A 202.175.51.116 046D6F626900000200010002A300001A026130046D6F62690B6166696C6961732D6E737404696E666F00 mobi. 172800 IN NS a0.mobi.afilias-nst.info. 046D6F626900000200010002A300001A026132046D6F62690B6166696C6961732D6E737404696E666F00 mobi. 172800 IN NS a2.mobi.afilias-nst.info. 046D6F626900000200010002A3000019026230046D6F62690B6166696C6961732D6E7374036F726700 mobi. 172800 IN NS b0.mobi.afilias-nst.org. 046D6F626900000200010002A3000019026232046D6F62690B6166696C6961732D6E7374036F726700 mobi. 172800 IN NS b2.mobi.afilias-nst.org. 046D6F626900000200010002A300001A026330046D6F62690B6166696C6961732D6E737404696E666F00 mobi. 172800 IN NS c0.mobi.afilias-nst.info. 046D6F626900000200010002A3000019026430046D6F62690B6166696C6961732D6E7374036F726700 mobi. 172800 IN NS d0.mobi.afilias-nst.org. 046D6F626900002F000100015180000E046D6F6461000006200000000003 mobi. 86400 IN NSEC moda. NS RRSIG NSEC 046D6F626900002E0001000151800093002F08010001518052F4220052EAD970837700713CA9BD27C5E5B8516E36B0659CC993A8E81E88153FA57465699C3E9DE2BD2962F876B745DC2DDB8FD730C45866C06CFC591474640BD47275EA22828E40CCBC1A3088E6631C2D568B0EA52A7E01ADC4DF39639A78169EEB2BB7AA17ED98243499E8C732D27DA3F65348153604C2041AC31574F1CEA7EB984766BC4D8C9F2802 mobi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cTypvSfF5bhRbjawZZzJk6joHogVP6V0ZWmcPp3ivSli+Ha3Rdwt24/XMMRYZsBs/FkUdGQL1HJ16iKCjkDMvBowiOZjHC1Wiw6lKn4BrcTfOWOaeBae6yu3qhftmCQ0mejHMtJ9o/ZTSBU2BMIEGsMVdPHOp+uYR2a8TYyfKAI= ;{id = 33655} 046D6F646100000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 moda. 172800 IN NS demand.beta.aridns.net.au. 046D6F646100000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 moda. 172800 IN NS demand.alpha.aridns.net.au. 046D6F646100000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 moda. 172800 IN NS demand.delta.aridns.net.au. 046D6F646100000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 moda. 172800 IN NS demand.gamma.aridns.net.au. 046D6F646100002B000100015180002496C4080263CCF0EB3E518D41F9E52DBE7DC0762567BB8A6CFF1162A3305A445FA42ACDFD moda. 86400 IN DS 38596 8 2 63CCF0EB3E518D41F9E52DBE7DC0762567BB8A6CFF1162A3305A445FA42ACDFD 046D6F646100002E0001000151800093002B08010001518052F4220052EAD970837700AA3AC3BC67AB1FC746D10CE984D9155705698E55B71D98778D35A029A1F14BC83F71C9EA7C549C9A465282F2264D52873410CB979E2275B8FA903C043D6EAC5E32A1BE425AB7335E8C46DAE974F6A6816027E79B6F902BF48E1A0F6116E6DED212C1EC077D38B01A341BCC834E8054FD12525B5513152C45C0C53143424BC32B moda. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qjrDvGerH8dG0QzphNkVVwVpjlW3HZh3jTWgKaHxS8g/ccnqfFScmkZSgvImTVKHNBDLl54idbj6kDwEPW6sXjKhvkJatzNejEba6XT2poFgJ+ebb5Ar9I4aD2EW5t7SEsHsB304sBo0G8yDToBU/RJSW1UTFSxFwMUxQ0JLwys= ;{id = 33655} 046D6F646100002E0001000151800093002F08010001518052F4220052EAD9708377004F425F4894B86920D0136D3353D622CF9206013ED27159752D833E42E9D33D2EAD328524ED10AEBA2EDD63E0B7B7D865D4E334DEDFD30B038DC789F41213C62FF188A817CC06C394D73556ACB128BDD9500E283404D7CCE71C5C3236A2302D2EB693EA3D335A512F84A763C69285E3EE703893F68E3C4880E534A38D57D30EFC moda. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . T0JfSJS4aSDQE20zU9Yiz5IGAT7ScVl1LYM+QunTPS6tMoUk7RCuui7dY+C3t9hl1OM03t/TCwONx4n0EhPGL/GIqBfMBsOU1zVWrLEovdlQDig0BNfM5xxcMjaiMC0utpPqPTNaUS+Ep2PGkoXj7nA4k/aOPEiA5TSjjVfTDvw= ;{id = 33655} 046D6F646100002F0001000151800010066D6F6E617368000006200000000013 moda. 86400 IN NSEC monash. NS DS RRSIG NSEC 066D6F6E61736800000200010002A300000E0161036E6963066D6F6E61736800 monash. 172800 IN NS a.nic.monash. 066D6F6E61736800000200010002A300000E0162036E6963066D6F6E61736800 monash. 172800 IN NS b.nic.monash. 066D6F6E61736800000200010002A300000E0163036E6963066D6F6E61736800 monash. 172800 IN NS c.nic.monash. 066D6F6E61736800000200010002A300000E0164036E6963066D6F6E61736800 monash. 172800 IN NS d.nic.monash. 066D6F6E61736800002B000100015180002418D30802BC8C82B3E65FC95A0610ED0F56190D4D0B78033F437EB48C2DD54F0E0AEB3BBD monash. 86400 IN DS 6355 8 2 BC8C82B3E65FC95A0610ED0F56190D4D0B78033F437EB48C2DD54F0E0AEB3BBD 066D6F6E61736800002E0001000151800093002B08010001518052F4220052EAD97083770030D2A51C35568F238DBDFDCC76DED37EBBAC72760B6BE6411D28BB6002AB91063560E71B29E887052F56E07C87D3BBFD1C5B11D94EDAB3D646413F0B65DA6DC612DDA870A09511CEF5E93A3FE4FA0E8684D1ACD54FF22259BD782BFC7050EC5170E991E3C3B3BD3861B54BD5E2B2643FAE2A2B87B5623B73A334C40037B10E3C monash. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MNKlHDVWjyONvf3Mdt7TfruscnYLa+ZBHSi7YAKrkQY1YOcbKeiHBS9W4HyH07v9HFsR2U7as9ZGQT8LZdptxhLdqHCglRHO9ek6P+T6DoaE0azVT/IiWb14K/xwUOxRcOmR48OzvThhtUvV4rJkP64qK4e1YjtzozTEADexDjw= ;{id = 33655} 066D6F6E61736800002E0001000151800093002F08010001518052F4220052EAD97083770007716CC4DF07DD023B7375E798AA9F991745ABF423A07CE47294361FBE78D4545CF259697B0284851D35F6C63677F3FCA25672FEA3CC975DA74E8F06767944984A511C7E7ED9DC07052FA9520F26731EA194DA6870BF752FEE40C028AE3D2841AA8747324AEFB6673E9E8D3CB4313883E21531178E71E61D873FEF2711BBF218 monash. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . B3FsxN8H3QI7c3XnmKqfmRdFq/QjoHzkcpQ2H7541FRc8llpewKEhR019sY2d/P8olZy/qPMl12nTo8GdnlEmEpRHH5+2dwHBS+pUg8mcx6hlNpocL91L+5AwCiuPShBqodHMkrvtmc+no08tDE4g+IVMReOceYdhz/vJxG78hg= ;{id = 33655} 066D6F6E61736800002F000100015180000C026D70000006200000000013 monash. 86400 IN NSEC mp. NS DS RRSIG NSEC 0161036E6963066D6F6E61736800000100010002A300000425D1C009 a.nic.monash. 172800 IN A 37.209.192.9 0161036E6963066D6F6E61736800001C00010002A300001020010DCD000100000000000000000009 a.nic.monash. 172800 IN AAAA 2001:dcd:1::9 0162036E6963066D6F6E61736800000100010002A300000425D1C209 b.nic.monash. 172800 IN A 37.209.194.9 0162036E6963066D6F6E61736800001C00010002A300001020010DCD000200000000000000000009 b.nic.monash. 172800 IN AAAA 2001:dcd:2::9 0163036E6963066D6F6E61736800000100010002A300000425D1C409 c.nic.monash. 172800 IN A 37.209.196.9 0163036E6963066D6F6E61736800001C00010002A300001020010DCD000300000000000000000009 c.nic.monash. 172800 IN AAAA 2001:dcd:3::9 0164036E6963066D6F6E61736800000100010002A300000425D1C609 d.nic.monash. 172800 IN A 37.209.198.9 0164036E6963066D6F6E61736800001C00010002A300001020010DCD000400000000000000000009 d.nic.monash. 172800 IN AAAA 2001:dcd:4::9 026D7000000200010002A300000C036E7331036E6963026D7000 mp. 172800 IN NS ns1.nic.mp. 026D7000000200010002A300000C036E7332036E6963026D7000 mp. 172800 IN NS ns2.nic.mp. 026D7000000200010002A300000C036E7333036E6963026D7000 mp. 172800 IN NS ns3.nic.mp. 026D7000000200010002A300000C036E7334036E6963026D7000 mp. 172800 IN NS ns4.nic.mp. 026D7000002F000100015180000C026D71000006200000000003 mp. 86400 IN NSEC mq. NS RRSIG NSEC 026D7000002E0001000151800093002F08010001518052F4220052EAD9708377000DA27ABFF6DE32A5BB51AE9E45EFD32B4E51B25A8A428421D990B779C2E5640F6CC253C8FD1F336DD1DE07D4FAA81DAB7050D2835183C7BD80AF33BE07EA51F41048C51405AEA868218E0DEA5B705ECF1D60CDAD29F5772156C42971F29351AD184F1414A82F72F42ABB82BF9C011964FEF29E99E4966D798BDCBFFCC3CF31BD mp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DaJ6v/beMqW7Ua6eRe/TK05RslqKQoQh2ZC3ecLlZA9swlPI/R8zbdHeB9T6qB2rcFDSg1GDx72ArzO+B+pR9BBIxRQFrqhoIY4N6ltwXs8dYM2tKfV3IVbEKXHyk1GtGE8UFKgvcvQqu4K/nAEZZP7ynpnklm15i9y//MPPMb0= ;{id = 33655} 036E7331036E6963026D7000000100010002A3000004CA801D02 ns1.nic.mp. 172800 IN A 202.128.29.2 036E7332036E6963026D7000000100010002A3000004CA801D87 ns2.nic.mp. 172800 IN A 202.128.29.135 036E7333036E6963026D7000000100010002A30000044B658159 ns3.nic.mp. 172800 IN A 75.101.129.89 036E7334036E6963026D7000000100010002A30000044B658565 ns4.nic.mp. 172800 IN A 75.101.133.101 026D7100000200010002A3000016066E73312D6672096D6564696173657276036E657400 mq. 172800 IN NS ns1-fr.mediaserv.net. 026D7100000200010002A3000016066E73312D6770096D6564696173657276036E657400 mq. 172800 IN NS ns1-gp.mediaserv.net. 026D7100000200010002A3000016066E73312D6D71096D6564696173657276036E657400 mq. 172800 IN NS ns1-mq.mediaserv.net. 026D7100002F000100015180000C026D72000006200000000003 mq. 86400 IN NSEC mr. NS RRSIG NSEC 026D7100002E0001000151800093002F08010001518052F4220052EAD9708377001D1C8820C17B02FE6F89244AA9FE8280DFA326816DE8BD4CC31722468CDABA226E22D4AF6F6DE19AD71AF8DAA98AD343802DDB3166B8024A3A55BD507890D17648520EB8EC4212320E7C9B3CD124CFCC5B23B6104C876BD0907EA8550E6886244FF5C7913161445CD4D180B794D42664CA4FD7955DAA6F3D63DDD5F86B583B7E mq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HRyIIMF7Av5viSRKqf6CgN+jJoFt6L1MwxciRozauiJuItSvb23hmtca+NqpitNDgC3bMWa4Ako6Vb1QeJDRdkhSDrjsQhIyDnybPNEkz8xbI7YQTIdr0JB+qFUOaIYkT/XHkTFhRFzU0YC3lNQmZMpP15Vdqm89Y93V+GtYO34= ;{id = 33655} 026D7200000200010002A3000010026E7308756E69762D6E6B63026D7200 mr. 172800 IN NS ns.univ-nkc.mr. 026D7200000200010002A300000C036E7333036E696302667200 mr. 172800 IN NS ns3.nic.fr. 026D7200000200010002A30000150C63656E7376726E73303030310369726402667200 mr. 172800 IN NS censvrns0001.ird.fr. 026D7200002F000100015180000C026D73000006200000000003 mr. 86400 IN NSEC ms. NS RRSIG NSEC 026D7200002E0001000151800093002F08010001518052F4220052EAD9708377003F45F26A11BA93FAE394325B95FDDCA8AF06A2A2087B466066B560A9E60A73427F3EC4A48BC85DC8DB5641AE1F6DD3D9199E9FF7983184EF09A6DAA486D59A1DCFB5160689DD99B006FF5F8684141F60E330D83BA86C5073E1B04F19AE600C02D1A5E87EED8F50ABF675BCA75D4E6E8705C182CA725F28DDCA5B26EDDF0E5888 mr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P0XyahG6k/rjlDJblf3cqK8GoqIIe0ZgZrVgqeYKc0J/PsSki8hdyNtWQa4fbdPZGZ6f95gxhO8JptqkhtWaHc+1FgaJ3ZmwBv9fhoQUH2DjMNg7qGxQc+GwTxmuYAwC0aXofu2PUKv2dbynXU5uhwXBgspyXyjdylsm7d8OWIg= ;{id = 33655} 026E7308756E69762D6E6B63026D7200000100010002A300000452974001 ns.univ-nkc.mr. 172800 IN A 82.151.64.1 026D7300000200010002A3000010036D73310664796E746C64036E657400 ms. 172800 IN NS ms1.dyntld.net. 026D7300000200010002A3000010036D73320664796E746C64036E657400 ms. 172800 IN NS ms2.dyntld.net. 026D7300000200010002A3000010036D73330664796E746C64036E657400 ms. 172800 IN NS ms3.dyntld.net. 026D7300000200010002A3000010036D73340664796E746C64036E657400 ms. 172800 IN NS ms4.dyntld.net. 026D7300000200010002A3000017056D732D6E7307616E796361737403706368036E657400 ms. 172800 IN NS ms-ns.anycast.pch.net. 026D7300000200010002A30000140670686C6F656D07756F7265676F6E0365647500 ms. 172800 IN NS phloem.uoregon.edu. 026D7300000200010002A3000013076D6E69646E7331066D6E696E6574026D7300 ms. 172800 IN NS mnidns1.mninet.ms. 026D7300002F000100015180000C026D74000006200000000003 ms. 86400 IN NSEC mt. NS RRSIG NSEC 026D7300002E0001000151800093002F08010001518052F4220052EAD97083770050CF9BFDA35BA8F84E855EE304B0CFBDD7C3EE895F47E4D49B79DA83BB617811A7E7DC73593E39C69E43EAE5F211EBBCD8F5124A53CDD0284691E4E75DEFE59D2BC2AF8643E938B13D855EDCB7137CD7B25227112910282C699257160EDADF9B2B0225732839EB85C76ED9C60FFB206645B5118CDCEC11C1E17BEFA1C74322E2 ms. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UM+b/aNbqPhOhV7jBLDPvdfD7olfR+TUm3nag7theBGn59xzWT45xp5D6uXyEeu82PUSSlPN0ChGkeTnXe/lnSvCr4ZD6TixPYVe3LcTfNeyUicRKRAoLGmSVxYO2t+bKwIlcyg564XHbtnGD/sgZkW1EYzc7BHB4XvvocdDIuI= ;{id = 33655} 076D6E69646E7331066D6E696E6574026D7300000100010002A3000004C7075A02 mnidns1.mninet.ms. 172800 IN A 199.7.90.2 026D7400000200010002A30000090166026E73026D7400 mt. 172800 IN NS f.ns.mt. 026D7400000200010002A30000090169026E73026D7400 mt. 172800 IN NS i.ns.mt. 026D7400000200010002A30000090170026E73026D7400 mt. 172800 IN NS p.ns.mt. 026D7400000200010002A30000090172026E73026D7400 mt. 172800 IN NS r.ns.mt. 026D7400000200010002A3000007026E73026D7400 mt. 172800 IN NS ns.mt. 026D7400000200010002A3000008036E7331026D7400 mt. 172800 IN NS ns1.mt. 026D7400002F000100015180000C026D75000006200000000003 mt. 86400 IN NSEC mu. NS RRSIG NSEC 026D7400002E0001000151800093002F08010001518052F4220052EAD9708377001A8754D0FB10A9945B315F845D756EBA171B516D1D2BE128F75D011411F0B0241F6531CA0995EA8E0EBDC0B68B5C4A08C7B6841C59F280F0618E90C7342E200A1F903FD2ABE7314C00AABFEE41084B9356F84DD3026DFF9F66CA44C9DA67759C74C38F185B6DBDF9BA3D415D45160111CACBDF7CB031A143015E6E2EA5B7731B mt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GodU0PsQqZRbMV+EXXVuuhcbUW0dK+Eo910BFBHwsCQfZTHKCZXqjg69wLaLXEoIx7aEHFnygPBhjpDHNC4gCh+QP9Kr5zFMAKq/7kEIS5NW+E3TAm3/n2bKRMnaZ3WcdMOPGFttvfm6PUFdRRYBEcrL33ywMaFDAV5uLqW3cxs= ;{id = 33655} 026E73026D7400000100010002A3000004C1BC2FFC ns.mt. 172800 IN A 193.188.47.252 0166026E73026D7400000100010002A3000004C05D0004 f.ns.mt. 172800 IN A 192.93.0.4 0166026E73026D7400001C00010002A300001020010660300500010000000000010002 f.ns.mt. 172800 IN AAAA 2001:660:3005:1::1:2 0169026E73026D7400000100010002A3000004C0050401 i.ns.mt. 172800 IN A 192.5.4.1 0169026E73026D7400001C00010002A300001020010500002E00000000000000000001 i.ns.mt. 172800 IN AAAA 2001:500:2e::1 0170026E73026D7400000100010002A3000004CC3DD82D p.ns.mt. 172800 IN A 204.61.216.45 0172026E73026D7400000100010002A3000004C1000961 r.ns.mt. 172800 IN A 193.0.9.97 0172026E73026D7400001C00010002A30000102001067C00E000000000000000000097 r.ns.mt. 172800 IN AAAA 2001:67c:e0::97 036E7331026D7400000100010002A3000004C1BC22F1 ns1.mt. 172800 IN A 193.188.34.241 026D7500002F0001000151800010066D757365756D000006200000000003 mu. 86400 IN NSEC museum. NS RRSIG NSEC 026D7500002E0001000151800093002F08010001518052F4220052EAD9708377009843C0851960B204E192E55E21B6BFB0B9862D24F7D0F8D4471A079AA938A14EC83B6179C1010ECB5E87E7D586DB6D61B0ED82BCA9760245848C274E989CED82ACDD087BC48B03E920D5CFF4E0199CFAD174C2AF8148600B506FEE76431D4E582C97775E5FED7B63AE3F8C01007EBE782A7277D6A6EB6D0F557900B2042A5DCD mu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mEPAhRlgsgThkuVeIba/sLmGLST30PjURxoHmqk4oU7IO2F5wQEOy16H59WG221hsO2CvKl2AkWEjCdOmJztgqzdCHvEiwPpINXP9OAZnPrRdMKvgUhgC1Bv7nZDHU5YLJd3Xl/te2OuP4wBAH6+eCpyd9am620PVXkAsgQqXc0= ;{id = 33655} 026D7500000200010002A300001604666F726B0373746807646E736E6F6465036E657400 mu. 172800 IN NS fork.sth.dnsnode.net. 026D7500000200010002A300000E0575646E733103746C64026D7500 mu. 172800 IN NS udns1.tld.mu. 026D7500000200010002A300000E0575646E733203746C64026D7500 mu. 172800 IN NS udns2.tld.mu. 026D7500000200010002A300001608616E7963617374310769726F6E646E73036E657400 mu. 172800 IN NS anycast1.irondns.net. 086363746C642D7675066F72616E6765026D7500000100010002A3000004C4C06E0F cctld-vu.orange.mu. 172800 IN A 196.192.110.15 0575646E733103746C64026D7500000100010002A3000004CC3DD80A udns1.tld.mu. 172800 IN A 204.61.216.10 0575646E733103746C64026D7500001C00010002A3000010200105000014601000AD000000000001 udns1.tld.mu. 172800 IN AAAA 2001:500:14:6010:ad::1 0575646E733203746C64026D7500000100010002A3000004C1000962 udns2.tld.mu. 172800 IN A 193.0.9.98 0575646E733203746C64026D7500001C00010002A30000102001067C00E000000000000000000098 udns2.tld.mu. 172800 IN AAAA 2001:67c:e0::98 066D757365756D00000200010002A300000E026E73056963616E6E036F726700 museum. 172800 IN NS ns.icann.org. 066D757365756D00000200010002A300000C036E6963066D757365756D00 museum. 172800 IN NS nic.museum. 066D757365756D00000200010002A300000E036E7335056B6E69707002646500 museum. 172800 IN NS ns5.knipp.de. 066D757365756D00000200010002A300001305616E7963310769726F6E646E73036E657400 museum. 172800 IN NS anyc1.irondns.net. 066D757365756D00000200010002A300001006736E732D706203697363036F726700 museum. 172800 IN NS sns-pb.isc.org. 066D757365756D00002B000100015180002443BD0A0275E82017BAF68EB9BF64C4392B47489DB07317F8D9B522AF644586C264C1B231 museum. 86400 IN DS 17341 10 2 75E82017BAF68EB9BF64C4392B47489DB07317F8D9B522AF644586C264C1B231 066D757365756D00002E0001000151800093002B08010001518052F4220052EAD97083770082D57CA94DC7C862FD37CF6ED8F87F249E20B67A34416A5F0D9E46E2D1E2F987B80BECED15FCFE8AA97BAC57958D327AD3147198F849FCF5FAD2D4B8285CAE3F9C0B301FE7E38B63AE1EE5252BF2A2F156BB3AB45C039A7F80AB2C23FFC298F2917F464A0A0BB2F59CF201A4E59EA7A5A199045A249778D37B529CE28BC26D6B museum. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . gtV8qU3HyGL9N89u2Ph/JJ4gtno0QWpfDZ5G4tHi+Ye4C+ztFfz+iql7rFeVjTJ60xRxmPhJ/PX60tS4KFyuP5wLMB/n44tjrh7lJSvyovFWuzq0XAOaf4CrLCP/wpjykX9GSgoLsvWc8gGk5Z6npaGZBFokl3jTe1Kc4ovCbWs= ;{id = 33655} 066D757365756D00002E0001000151800093002F08010001518052F4220052EAD9708377007FA55F9BED5630EE6B5C16B093C4B7FC30A01BC352A715AF3ECD36E8B4AD37918A67BE5E4F5E3BA8721986D94016F298C37C20FACE314980AE5A4DE029D553E281CE153C872D8CB802CA996D6C0455549EBACBFFC657C9888B6779C240860D44F9E40CA715A4AE14CAB6D8E5133370EFEFB1C23C4FB39398D9F8E6BF858D3832 museum. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . f6Vfm+1WMO5rXBawk8S3/DCgG8NSpxWvPs026LStN5GKZ75eT147qHIZhtlAFvKYw3wg+s4xSYCuWk3gKdVT4oHOFTyHLYy4AsqZbWwEVVSeusv/xlfJiItnecJAhg1E+eQMpxWkrhTKttjlEzNw7++xwjxPs5OY2fjmv4WNODI= ;{id = 33655} 066D757365756D00002F000100015180000C026D76000006200000000013 museum. 86400 IN NSEC mv. NS DS RRSIG NSEC 036E6963066D757365756D00000100010002A300000482F21805 nic.museum. 172800 IN A 130.242.24.5 026D7600000200010002A3000016026E730A646869766568696E6574036E6574026D7600 mv. 172800 IN NS ns.dhivehinet.net.mv. 026D7600000200010002A3000017036E73320A646869766568696E6574036E6574026D7600 mv. 172800 IN NS ns2.dhivehinet.net.mv. 026D7600000200010002A3000017056D762D6E7307616E796361737403706368036E657400 mv. 172800 IN NS mv-ns.anycast.pch.net. 026D7600002F000100015180000C026D77000006200000000003 mv. 86400 IN NSEC mw. NS RRSIG NSEC 026D7600002E0001000151800093002F08010001518052F4220052EAD970837700B9E2256265B0E56B49E7431487B56E1F5A9036E4AE701D781599D8553CFD7E9F23FA2DD4156CDAEFF47472948CC78CC4817C385A4288F157D9B516B3E6D5EF1B338EAD26BFA845AE418915CDCEB28D445A74BB3B231C1DA25F45AB7BE6F3A42C218661A12ADDA254205FDBDE720238D8357DF91BFE242FE25FD18E92B85639F6 mv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ueIlYmWw5WtJ50MUh7VuH1qQNuSucB14FZnYVTz9fp8j+i3UFWza7/R0cpSMx4zEgXw4WkKI8VfZtRaz5tXvGzOOrSa/qEWuQYkVzc6yjURadLs7Ixwdol9Fq3vm86QsIYZhoSrdolQgX9vecgI42DV9+Rv+JC/iX9GOkrhWOfY= ;{id = 33655} 026E730A646869766568696E6574036E6574026D7600000100010002A3000004CA01C0C4 ns.dhivehinet.net.mv. 172800 IN A 202.1.192.196 036E73320A646869766568696E6574036E6574026D7600000100010002A3000004CA01C9C9 ns2.dhivehinet.net.mv. 172800 IN A 202.1.201.201 026D7700000200010002A300001B026D77056363746C640761757468646E730472697065036E657400 mw. 172800 IN NS mw.cctld.authdns.ripe.net. 026D7700000200010002A300000D037269700370736703636F6D00 mw. 172800 IN NS rip.psg.com. 026D7700000200010002A300001004736563330561706E6963036E657400 mw. 172800 IN NS sec3.apnic.net. 026D7700000200010002A300000E05646F6D77650373646E026D7700 mw. 172800 IN NS domwe.sdn.mw. 026D7700000200010002A3000014066368616D626F0473646E70036F7267026D7700 mw. 172800 IN NS chambo.sdnp.org.mw. 026D7700002F000100015180000C026D78000006200000000003 mw. 86400 IN NSEC mx. NS RRSIG NSEC 026D7700002E0001000151800093002F08010001518052F4220052EAD970837700AC2DBF25F1900752CECFD90A4644DF632A7FB6D62F129FF0F2B6458EE88ACD1FA31DD218E15057FA196EAE217618BEFEC4926E0E86F69D0E79443A5BF0E107A153B4EE049F51DBAD3D1DB0E9D2D6AE10CE3A747786E0C0D8C2A2F417BD1B7BAE6D1642152A688721DAFF88799A2554A2D71E871108AB0BCE11A163E3818F4CE9 mw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rC2/JfGQB1LOz9kKRkTfYyp/ttYvEp/w8rZFjuiKzR+jHdIY4VBX+hluriF2GL7+xJJuDob2nQ55RDpb8OEHoVO07gSfUdutPR2w6dLWrhDOOnR3huDA2MKi9Be9G3uubRZCFSpohyHa/4h5miVUotcehxEIqwvOEaFj44GPTOk= ;{id = 33655} 066368616D626F0473646E70036F7267026D7700000100010002A300000429DD6387 chambo.sdnp.org.mw. 172800 IN A 41.221.99.135 066368616D626F0473646E70036F7267026D7700000100010002A3000004C42DBC05 chambo.sdnp.org.mw. 172800 IN A 196.45.188.5 05646F6D77650373646E026D7700000100010002A300000429DD6395 domwe.sdn.mw. 172800 IN A 41.221.99.149 05646F6D77650373646E026D7700000100010002A3000004C42DBE09 domwe.sdn.mw. 172800 IN A 196.45.190.9 026D7800002F000100015180000C026D79000006200000000003 mx. 86400 IN NSEC my. NS RRSIG NSEC 026D7800002E0001000151800093002F08010001518052F4220052EAD970837700409412AF026DD2B1884339B32A9E5472D3CBDEDB5CADA87FA7683E2687B1C7271695CF1822E74705055B86574B1AD8B56398F1CDBBC51F3F5856FEE10BCFFE6C1FD78025A56A14E818EA5B6C4E663C18D66CFBD61E2CA73F65865CBD0CCDD82EF6520FD6BFA238EB87A931FDD975EC7A8D2266A3F79A426AA855A8D9C82C8B5C mx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QJQSrwJt0rGIQzmzKp5UctPL3ttcrah/p2g+JoexxycWlc8YIudHBQVbhldLGti1Y5jxzbvFHz9YVv7hC8/+bB/XgCWlahToGOpbbE5mPBjWbPvWHiynP2WGXL0Mzdgu9lIP1r+iOOuHqTH92XXseo0iZqP3mkJqqFWo2cgsi1w= ;{id = 33655} 026D7800000200010002A300000C0163056D782D6E73026D7800 mx. 172800 IN NS c.mx-ns.mx. 026D7800000200010002A300000C0165056D782D6E73026D7800 mx. 172800 IN NS e.mx-ns.mx. 026D7800000200010002A300000C0169056D782D6E73026D7800 mx. 172800 IN NS i.mx-ns.mx. 026D7800000200010002A300000C016D056D782D6E73026D7800 mx. 172800 IN NS m.mx-ns.mx. 026D7800000200010002A300000C016F056D782D6E73026D7800 mx. 172800 IN NS o.mx-ns.mx. 026D7800000200010002A300000C0178056D782D6E73026D7800 mx. 172800 IN NS x.mx-ns.mx. 0163056D782D6E73026D7800000100010002A3000004C064E001 c.mx-ns.mx. 172800 IN A 192.100.224.1 0163056D782D6E73026D7800001C00010002A300001020011258000000000000000000000001 c.mx-ns.mx. 172800 IN AAAA 2001:1258::1 0165056D782D6E73026D7800000100010002A3000004BDC9F401 e.mx-ns.mx. 172800 IN A 189.201.244.1 0169056D782D6E73026D7800000100010002A3000004CFF84401 i.mx-ns.mx. 172800 IN A 207.248.68.1 016D056D782D6E73026D7800000100010002A3000004C85EB001 m.mx-ns.mx. 172800 IN A 200.94.176.1 016F056D782D6E73026D7800000100010002A3000004C8170101 o.mx-ns.mx. 172800 IN A 200.23.1.1 0178056D782D6E73026D7800000100010002A3000004C983FC01 x.mx-ns.mx. 172800 IN A 201.131.252.1 036E7333036E6963026D7800000100010002A3000004C8216F01 ns3.nic.mx. 172800 IN A 200.33.111.1 026D7900000200010002A300001203646E73056D796E6963036E6574026D7900 my. 172800 IN NS dns.mynic.net.my. 026D7900000200010002A3000011036E7332046375686B0365647502686B00 my. 172800 IN NS ns2.cuhk.edu.hk. 026D7900000200010002A300000F036E7335066A6172696E67026D7900 my. 172800 IN NS ns5.jaring.my. 026D7900000200010002A300000F036E7336066A6172696E67026D7900 my. 172800 IN NS ns6.jaring.my. 026D7900000200010002A300001304646E7332056D796E6963036E6574026D7900 my. 172800 IN NS dns2.mynic.net.my. 026D7900000200010002A3000010046E7332300369696A026164026A7000 my. 172800 IN NS ns20.iij.ad.jp. 026D7900000200010002A300000F046E7333300463646E73036E657400 my. 172800 IN NS ns30.cdns.net. 026D7900000200010002A300000E056E732D6D79036E696302667200 my. 172800 IN NS ns-my.nic.fr. 026D7900002B0001000151800018C18F0801486D0A0DAF13FCE34AEF9BE1B68075B016B84ECF my. 86400 IN DS 49551 8 1 486D0A0DAF13FCE34AEF9BE1B68075B016B84ECF 026D7900002B0001000151800024C18F0802906FB28961CD5A3D1D90782507C471C9F80870E727B9504076BF5288AE3B7DC9 my. 86400 IN DS 49551 8 2 906FB28961CD5A3D1D90782507C471C9F80870E727B9504076BF5288AE3B7DC9 026D7900002B0001000151800018DE69080148A57004990714CA096B7D6FC9B58968C0BE37DB my. 86400 IN DS 56937 8 1 48A57004990714CA096B7D6FC9B58968C0BE37DB 026D7900002B0001000151800024DE690802885B9FAA1749CB502589E0DCF047849013ADA126ABF557D33C704F8CE97C9058 my. 86400 IN DS 56937 8 2 885B9FAA1749CB502589E0DCF047849013ADA126ABF557D33C704F8CE97C9058 026D7900002E0001000151800093002B08010001518052F4220052EAD970837700025763B9ED96F14189AA7CD0C08B82B3C1521BB29896C42C7044797CF6BB80AD398DDC67BB07D171E1482F2F6AEA2101ECEB1A3FF35FF718961D23673F0D7F975A4E930FEE2BFDC39919E472A95F7BE56D5ABD4D9813C59E7A776DDC7F8FE4967A34B7A36784A8A329533C5E6805B29A0BE4BE79B4A405C5F442D3E98599D26E my. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Aldjue2W8UGJqnzQwIuCs8FSG7KYlsQscER5fPa7gK05jdxnuwfRceFILy9q6iEB7OsaP/Nf9xiWHSNnPw1/l1pOkw/uK/3DmRnkcqlfe+VtWr1NmBPFnnp3bdx/j+SWejS3o2eEqKMpUzxeaAWymgvkvnm0pAXF9ELT6YWZ0m4= ;{id = 33655} 026D7900002E0001000151800093002F08010001518052F4220052EAD97083770022137D3D44711902797FB71EE8154E58A23E04F8998656396F929365B4AB66F9F76E7C6B048F44585A69BCF712BC9586C72EBEA553B5F944BF0FA414AFF6C8B8773DB5938FA638663D170CC35DE860C480DF71C82BAE460A2C6AC5637042940FB0DD03C2BFBCB74D655A21608B2354C2300ADEBD815EB1027BB94DC1DFC42153 my. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IhN9PURxGQJ5f7ce6BVOWKI+BPiZhlY5b5KTZbSrZvn3bnxrBI9EWFppvPcSvJWGxy6+pVO1+US/D6QUr/bIuHc9tZOPpjhmPRcMw13oYMSA33HIK65GCixqxWNwQpQPsN0Dwr+8t01lWiFgiyNUwjAK3r2BXrECe7lNwd/EIVM= ;{id = 33655} 026D7900002F000100015180000C026D7A000006200000000013 my. 86400 IN NSEC mz. NS DS RRSIG NSEC 036E7335066A6172696E67026D7900000100010002A30000043D06268B ns5.jaring.my. 172800 IN A 61.6.38.139 036E7335066A6172696E67026D7900001C00010002A300001020010328020000480000000000000400 ns5.jaring.my. 172800 IN AAAA 2001:328:200:48::400 036E7336066A6172696E67026D7900000100010002A3000004C0E48010 ns6.jaring.my. 172800 IN A 192.228.128.16 036E7336066A6172696E67026D7900001C00010002A300001020010328020000AB0000000000000600 ns6.jaring.my. 172800 IN AAAA 2001:328:200:ab::600 03646E73056D796E6963036E6574026D7900000100010002A3000004C0E4B405 dns.mynic.net.my. 172800 IN A 192.228.180.5 03646E73056D796E6963036E6574026D7900001C00010002A300001020010328100000030000000000000005 dns.mynic.net.my. 172800 IN AAAA 2001:328:1000:3::5 04646E7332056D796E6963036E6574026D7900000100010002A3000004CA4B2724 dns2.mynic.net.my. 172800 IN A 202.75.39.36 04646E7332056D796E6963036E6574026D7900001C00010002A30000102401B000000000000000000000000036 dns2.mynic.net.my. 172800 IN AAAA 2401:b000::36 026D7A00000200010002A300000E05616E796E730375656D026D7A00 mz. 172800 IN NS anyns.uem.mz. 026D7A00000200010002A300000E05647A6F776F0375656D026D7A00 mz. 172800 IN NS dzowo.uem.mz. 026D7A00000200010002A3000013056E732D6D7A07616672696E6963036E657400 mz. 172800 IN NS ns-mz.afrinic.net. 026D7A00000200010002A300000E057A656272610375656D026D7A00 mz. 172800 IN NS zebra.uem.mz. 026D7A00000200010002A300000F066F6365616E6F0375656D026D7A00 mz. 172800 IN NS oceano.uem.mz. 026D7A00000200010002A30000140670686C6F656D07756F7265676F6E0365647500 mz. 172800 IN NS phloem.uoregon.edu. 026D7A00002F000100015180000C026E61000006200000000003 mz. 86400 IN NSEC na. NS RRSIG NSEC 026D7A00002E0001000151800093002F08010001518052F4220052EAD970837700B34B95615DA6287A66B946E727542A8A96B288412DEFF34946FAA52DD41146F632379B159457DA263CECBD7356834E8D1F572DC6709C531837CB4CF2B8EF5D26CE7290EC2747947FC0DD368EBE115B59D81D21BC2ED53795926395C48A6B67433515D764BE5BC35FFBEA62D45173B64CC5F87E35294427D40B3C95B469629D8B mz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . s0uVYV2mKHpmuUbnJ1QqipayiEEt7/NJRvqlLdQRRvYyN5sVlFfaJjzsvXNWg06NH1ctxnCcUxg3y0zyuO9dJs5ykOwnR5R/wN02jr4RW1nYHSG8LtU3lZJjlcSKa2dDNRXXZL5bw1/76mLUUXO2TMX4fjUpRCfUCzyVtGlinYs= ;{id = 33655} 05616E796E730375656D026D7A00000100010002A3000004CC3DD80E anyns.uem.mz. 172800 IN A 204.61.216.14 05647A6F776F0375656D026D7A00000100010002A3000004C4036042 dzowo.uem.mz. 172800 IN A 196.3.96.66 066F6365616E6F0375656D026D7A00000100010002A3000004C4036045 oceano.uem.mz. 172800 IN A 196.3.96.69 057A656272610375656D026D7A00000100010002A3000004C4036043 zebra.uem.mz. 172800 IN A 196.3.96.67 026E6100000200010002A3000010036E61310664796E746C64036E657400 na. 172800 IN NS na1.dyntld.net. 026E6100000200010002A3000010036E61320664796E746C64036E657400 na. 172800 IN NS na2.dyntld.net. 026E6100000200010002A3000011036E7335076E6F6D696E756D03636F6D00 na. 172800 IN NS ns5.nominum.com. 026E6100000200010002A3000010036E7336076E6F6D696E756D02657500 na. 172800 IN NS ns6.nominum.eu. 026E6100000200010002A300001305616E7963320769726F6E646E73036E657400 na. 172800 IN NS anyc2.irondns.net. 026E6100000200010002A3000017056E612D6E7307616E796361737403706368036E657400 na. 172800 IN NS na-ns.anycast.pch.net. 026E6100000200010002A300000F066D65726C696E036E6574026E6100 na. 172800 IN NS merlin.net.na. 026E6100000200010002A300001006736E732D706203697363036F726700 na. 172800 IN NS sns-pb.isc.org. 026E6100002B00010001518000185FA40501EFC19D4685751FF8E11F96142A083DCB9C708912 na. 86400 IN DS 24484 5 1 EFC19D4685751FF8E11F96142A083DCB9C708912 026E6100002E0001000151800093002B08010001518052F4220052EAD970837700525FD45A08C045EEAE1162E40FB78701523AB0BC8D2A882CD0ED77F4A02AB692612DD1121F5F634F0E20AA0D2D1C92D96EE1696EEA54AD17E97E339AF5D64F0BD22D16CE1A148A5BB97B108F50912A31AB1E82477B60067427D68C7DDC13CE3763FC650CEC5E17EF2CB60FEBA4D72E2633AB1210160FF53DB7E35252B699E512 na. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Ul/UWgjARe6uEWLkD7eHAVI6sLyNKogs0O139KAqtpJhLdESH19jTw4gqg0tHJLZbuFpbupUrRfpfjOa9dZPC9ItFs4aFIpbuXsQj1CRKjGrHoJHe2AGdCfWjH3cE843Y/xlDOxeF+8stg/rpNcuJjOrEhAWD/U9t+NSUraZ5RI= ;{id = 33655} 026E6100002E0001000151800093002F08010001518052F4220052EAD97083770074F74D77BCD5928E7453E76A883A64155A3887E1BFAD28611757A98F018640283013725A489CF618DCC41809CCA96C2248357BC067485C6E2CCDA12DF49204110F9EC396674DA9020068CCF624ABC30307762D1513A4976298EBC359053713EFE025D9AB827A4CB7AC8DA595F5A9A4535A9EFE8CF1AB5B82FCCF64589E15EC9F na. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dPdNd7zVko50U+dqiDpkFVo4h+G/rShhF1epjwGGQCgwE3JaSJz2GNzEGAnMqWwiSDV7wGdIXG4szaEt9JIEEQ+ew5ZnTakCAGjM9iSrwwMHdi0VE6SXYpjrw1kFNxPv4CXZq4J6TLesjaWV9amkU1qe/ozxq1uC/M9kWJ4V7J8= ;{id = 33655} 026E6100002F0001000151800010066E61676F7961000006200000000013 na. 86400 IN NSEC nagoya. NS DS RRSIG NSEC 066D65726C696E036E6574026E6100000100010002A3000004CC98B860 merlin.net.na. 172800 IN A 204.152.184.96 066E61676F796100000200010002A300001301610B676D6F7265676973747279036E657400 nagoya. 172800 IN NS a.gmoregistry.net. 066E61676F796100000200010002A300001301620B676D6F7265676973747279036E657400 nagoya. 172800 IN NS b.gmoregistry.net. 066E61676F796100000200010002A300001301630B676D6F7265676973747279036E657400 nagoya. 172800 IN NS c.gmoregistry.net. 066E61676F796100000200010002A300001301640B676D6F7265676973747279036E657400 nagoya. 172800 IN NS d.gmoregistry.net. 066E61676F796100000200010002A300001301650B676D6F7265676973747279036E657400 nagoya. 172800 IN NS e.gmoregistry.net. 066E61676F796100002B00010001518000245D1A0802957222A7538919C4B3CCF76010594729E1F16EF36CF266F965F86CD2C06889B4 nagoya. 86400 IN DS 23834 8 2 957222A7538919C4B3CCF76010594729E1F16EF36CF266F965F86CD2C06889B4 066E61676F796100002E0001000151800093002B08010001518052F4220052EAD97083770013CB2636C80F3DA58C9D1DAEB7EF964A796BF58F6C5F1E6158741BEFEF87577AD1AFE02D039582F80B8BC537BD43FCEDBC144C265912FF2501CBAABDCAA61ABECC5CF9D366DDE886998B7AF45400787870B439B882A6E352D28EE84D7AD4A02EC64E62EA36AC75F06236D5102567B2598E84E5E93D5ECACD2FC71D18590780E3 nagoya. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . E8smNsgPPaWMnR2ut++WSnlr9Y9sXx5hWHQb7++HV3rRr+AtA5WC+AuLxTe9Q/ztvBRMJlkS/yUBy6q9yqYavsxc+dNm3eiGmYt69FQAeHhwtDm4gqbjUtKO6E161KAuxk5i6jasdfBiNtUQJWeyWY6E5ek9XsrNL8cdGFkHgOM= ;{id = 33655} 066E61676F796100002E0001000151800093002F08010001518052F4220052EAD97083770071C915389D1B8C46FE478980BCE32CF606FC6D26E8A9447F8328AC914D4C3224FBD37ACB7D2C5447202B329DF386EAB34E97B9DAA42DCB31C0461D0218A6A12F905094243AFC4C827AB0FEDAD67101DEF3F62B6222BBD79030D88775A2517E618C30CC7462EA3ABD82449F9408D8439E2C6339C64ACE8A35B6F0AE0EC7ABF256 nagoya. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cckVOJ0bjEb+R4mAvOMs9gb8bSboqUR/gyiskU1MMiT703rLfSxURyArMp3zhuqzTpe52qQtyzHARh0CGKahL5BQlCQ6/EyCerD+2tZxAd7z9itiIrvXkDDYh3WiUX5hjDDMdGLqOr2CRJ+UCNhDnixjOcZKzoo1tvCuDser8lY= ;{id = 33655} 066E61676F796100002F000100015180000E046E616D65000006200000000013 nagoya. 86400 IN NSEC name. NS DS RRSIG NSEC 046E616D6500000200010002A300000E026136056E73746C6403636F6D00 name. 172800 IN NS a6.nstld.com. 046E616D6500000200010002A300000E026336056E73746C6403636F6D00 name. 172800 IN NS c6.nstld.com. 046E616D6500000200010002A300000E026436056E73746C6403636F6D00 name. 172800 IN NS d6.nstld.com. 046E616D6500000200010002A300000E026636056E73746C6403636F6D00 name. 172800 IN NS f6.nstld.com. 046E616D6500000200010002A300000E026736056E73746C6403636F6D00 name. 172800 IN NS g6.nstld.com. 046E616D6500000200010002A300000E026836056E73746C6403636F6D00 name. 172800 IN NS h6.nstld.com. 046E616D6500000200010002A300000E026A36056E73746C6403636F6D00 name. 172800 IN NS j6.nstld.com. 046E616D6500000200010002A300000E026B36056E73746C6403636F6D00 name. 172800 IN NS k6.nstld.com. 046E616D6500000200010002A300000E026C36056E73746C6403636F6D00 name. 172800 IN NS l6.nstld.com. 046E616D6500000200010002A300000E026D36056E73746C6403636F6D00 name. 172800 IN NS m6.nstld.com. 046E616D6500002B0001000151800024CD5308024E2671F0DBC3927D842053044C6A0CBF8B21E1E657DE8BBA99A4835031A85A41 name. 86400 IN DS 52563 8 2 4E2671F0DBC3927D842053044C6A0CBF8B21E1E657DE8BBA99A4835031A85A41 046E616D6500002E0001000151800093002B08010001518052F4220052EAD9708377009C56666F61D0C75F5B3F2D058D9EC374689F4EC1A565B47936D25ED67CE68FAA8F7973D55D0235BC030051C30D0D273032153D5821D268C35CFE0342CA221C96AA5265FB0F6E44928692627E98880C3F81FF7E8AA434FF54D64FDD31ED3912DAAFDDE76623955838D064FE4CCB1532DF8289842C43BD0247C57309A01E4FBC91 name. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nFZmb2HQx19bPy0FjZ7DdGifTsGlZbR5NtJe1nzmj6qPeXPVXQI1vAMAUcMNDScwMhU9WCHSaMNc/gNCyiIclqpSZfsPbkSShpJifpiIDD+B/36KpDT/VNZP3THtORLar93nZiOVWDjQZP5MyxUy34KJhCxDvQJHxXMJoB5PvJE= ;{id = 33655} 046E616D6500002E0001000151800093002F08010001518052F4220052EAD9708377002F70E5AF1B8265C94C414110007F5F606F12CE4DAC52381EB7A92247DF558D4A9D31127E48C12E1573E1A42FAD1875F67F9FC9E3DF6C542976E25B7A82E537BFE5452BA62A1CE26E620449840CA3F6DC4AC3986A485CBC0BC0DFF58D7BBFEB1F13FA9E2405326497BD9473BE4030F1DC473BCD96A93ABB4A660A34434A559B46 name. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . L3DlrxuCZclMQUEQAH9fYG8Szk2sUjget6kiR99VjUqdMRJ+SMEuFXPhpC+tGHX2f5/J499sVCl24lt6guU3v+VFK6YqHOJuYgRJhAyj9txKw5hqSFy8C8Df9Y17v+sfE/qeJAUyZJe9lHO+QDDx3Ec7zZapOrtKZgo0Q0pVm0Y= ;{id = 33655} 046E616D6500002F000100015180000C026E63000006200000000013 name. 86400 IN NSEC nc. NS DS RRSIG NSEC 026E6300000200010002A300001B026E63056363746C640761757468646E730472697065036E657400 nc. 172800 IN NS nc.cctld.authdns.ripe.net. 026E6300000200010002A3000008036E7331026E6300 nc. 172800 IN NS ns1.nc. 026E6300000200010002A3000008036E7332026E6300 nc. 172800 IN NS ns2.nc. 026E6300000200010002A300000C07616E792D6E7331026E6300 nc. 172800 IN NS any-ns1.nc. 026E6300000200010002A30000150C63656E7376726E73303030310369726402667200 nc. 172800 IN NS censvrns0001.ird.fr. 026E6300002B0001000151800024BFA108025957AB66CF4871C8C39EDEBC78DFAB2B6DCBB3EA5E97278EA27190539410B753 nc. 86400 IN DS 49057 8 2 5957AB66CF4871C8C39EDEBC78DFAB2B6DCBB3EA5E97278EA27190539410B753 026E6300002E0001000151800093002B08010001518052F4220052EAD9708377009134697ADB0EA194C66A4B5392582D13518E50CDA813271B05D094DD7471D5953A75781E953891892341F62DE65F29297351D5FFB9321CE969956FDC565E35B7CBC24F783D68905696B1EA51A0965A545C16E88B32FB5012BED678793E63D38B411714D559ED9E8EBB163601F89EF1586740F35FBB899C2C33C425AE45579C83 nc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . kTRpetsOoZTGaktTklgtE1GOUM2oEycbBdCU3XRx1ZU6dXgelTiRiSNB9i3mXykpc1HV/7kyHOlplW/cVl41t8vCT3g9aJBWlrHqUaCWWlRcFuiLMvtQEr7WeHk+Y9OLQRcU1Vntno67FjYB+J7xWGdA81+7iZwsM8QlrkVXnIM= ;{id = 33655} 026E6300002E0001000151800093002F08010001518052F4220052EAD970837700475C5E6DFD51BA1ABECD9711E40DBD16CA26EBB0A525DF2AB073891AC0E5AD88398A072FCB7593409DE7A7DF6B99CDF35777398BCE510FD5A6825275F2723A0F87A1BDF7825EE8662E33F2302AFF1158342EFF3A7B45DC0177BD24676F87F9405BCD63151A91E379D1C4A557AA135D27C0ECF4E360A57529A1D1CECB842CC6C4 nc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . R1xebf1Ruhq+zZcR5A29Fsom67ClJd8qsHOJGsDlrYg5igcvy3WTQJ3np99rmc3zV3c5i85RD9WmglJ18nI6D4ehvfeCXuhmLjPyMCr/EVg0Lv86e0XcAXe9JGdvh/lAW81jFRqR43nRxKVXqhNdJ8Ds9ONgpXUpodHOy4QsxsQ= ;{id = 33655} 026E6300002F000100015180000C026E65000006200000000013 nc. 86400 IN NSEC ne. NS DS RRSIG NSEC 07616E792D6E7331026E6300000100010002A30000047245DE01 any-ns1.nc. 172800 IN A 114.69.222.1 07616E792D6E7331026E6300001C00010002A300001020010500001480007245DE0000000001 any-ns1.nc. 172800 IN AAAA 2001:500:14:8000:7245:de00:0:1 036E7331026E6300000100010002A3000004CA578110 ns1.nc. 172800 IN A 202.87.129.16 036E7332026E6300000100010002A3000004CA578111 ns2.nc. 172800 IN A 202.87.129.17 026E6500000200010002A300001B026E65056363746C640761757468646E730472697065036E657400 ne. 172800 IN NS ne.cctld.authdns.ripe.net. 026E6500000200010002A300000E026E7306696E746E6574026E6500 ne. 172800 IN NS ns.intnet.ne. 026E6500000200010002A300000D03626F77047261696E02667200 ne. 172800 IN NS bow.rain.fr. 026E6500000200010002A3000013056E732D6E6507616672696E6963036E657400 ne. 172800 IN NS ns-ne.afrinic.net. 026E6500002F000100015180000D036E6574000006200000000003 ne. 86400 IN NSEC net. NS RRSIG NSEC 026E6500002E0001000151800093002F08010001518052F4220052EAD9708377006967DBFAF58105312B79CBDE9941924307C2CFAF99B5AB06C37B7996B62126C6EA053C284AECB7305634EED4000D5BEBC698515232E53F4C69C84517195C4EDFE4F800A59B5D0E39B061F14D8B2E3291FC0970608F49EDFC097DAE2FB36EF6E3B1F2618E33D3D2F40C5A974DE9528A952DCB3B63A071E67E7953D2F3E449035D ne. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aWfb+vWBBTErecvemUGSQwfCz6+ZtasGw3t5lrYhJsbqBTwoSuy3MFY07tQADVvrxphRUjLlP0xpyEUXGVxO3+T4AKWbXQ45sGHxTYsuMpH8CXBgj0nt/Al9ri+zbvbjsfJhjjPT0vQMWpdN6VKKlS3LO2OgceZ+eVPS8+RJA10= ;{id = 33655} 026E7306696E746E6574026E6500000100010002A3000004298A360A ns.intnet.ne. 172800 IN A 41.138.54.10 036E657400002F000100015180000C026E66000006200000000013 net. 86400 IN NSEC nf. NS DS RRSIG NSEC 036E657400002E0001000151800093002F08010001518052F4220052EAD970837700168CEC4F7D03C7BCF60256D4FADD9E27993C71F5C72AFF2E78E850DB8A3CEE8F6A0E056DA56368A1ECCE16C6C4EC4159E124F78F25537FCB7DC51D416B1168C356A69D73C2AC70ACB67338C6E70DB22574CD70ADF13363AD260CEDF9AE0613D8C71A5EAA73DF99F9E2B3C08E3C8CA612520D1145A5C746C398BB6818FE0A88F1 net. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FozsT30Dx7z2AlbU+t2eJ5k8cfXHKv8ueOhQ24o87o9qDgVtpWNooezOFsbE7EFZ4ST3jyVTf8t9xR1BaxFow1amnXPCrHCstnM4xucNsiV0zXCt8TNjrSYM7fmuBhPYxxpeqnPfmfnis8COPIymElINEUWlx0bDmLtoGP4KiPE= ;{id = 33655} 036E657400002E0001000151800093002B08010001518052F4220052EAD97083770097A92F00F06FD2CC3FA628497692667A67919422E90820C3B837725CDDF6977EA3368BA21B82C62036B39B779808EB91539B3DDC41167005FB5493D5A7E4056F98930DDAA48E68C3FF8BE647751F816C7F2B5E7E3205345DDCEC4025ECD0C6A859E433E5E3B8BD651F0AC2D006D5B3887D444D25586FFCF8FFE96EB1A51FD11C net. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . l6kvAPBv0sw/pihJdpJmemeRlCLpCCDDuDdyXN32l36jNouiG4LGIDazm3eYCOuRU5s93EEWcAX7VJPVp+QFb5iTDdqkjmjD/4vmR3UfgWx/K15+MgU0XdzsQCXs0MaoWeQz5eO4vWUfCsLQBtWziH1ETSVYb/z4/+lusaUf0Rw= ;{id = 33655} 036E657400000200010002A300001401610C67746C642D73657276657273036E657400 net. 172800 IN NS a.gtld-servers.net. 036E657400000200010002A300001401620C67746C642D73657276657273036E657400 net. 172800 IN NS b.gtld-servers.net. 036E657400000200010002A300001401630C67746C642D73657276657273036E657400 net. 172800 IN NS c.gtld-servers.net. 036E657400000200010002A300001401640C67746C642D73657276657273036E657400 net. 172800 IN NS d.gtld-servers.net. 036E657400000200010002A300001401650C67746C642D73657276657273036E657400 net. 172800 IN NS e.gtld-servers.net. 036E657400000200010002A300001401660C67746C642D73657276657273036E657400 net. 172800 IN NS f.gtld-servers.net. 036E657400000200010002A300001401670C67746C642D73657276657273036E657400 net. 172800 IN NS g.gtld-servers.net. 036E657400000200010002A300001401680C67746C642D73657276657273036E657400 net. 172800 IN NS h.gtld-servers.net. 036E657400000200010002A300001401690C67746C642D73657276657273036E657400 net. 172800 IN NS i.gtld-servers.net. 036E657400000200010002A3000014016A0C67746C642D73657276657273036E657400 net. 172800 IN NS j.gtld-servers.net. 036E657400000200010002A3000014016B0C67746C642D73657276657273036E657400 net. 172800 IN NS k.gtld-servers.net. 036E657400000200010002A3000014016C0C67746C642D73657276657273036E657400 net. 172800 IN NS l.gtld-servers.net. 036E657400000200010002A3000014016D0C67746C642D73657276657273036E657400 net. 172800 IN NS m.gtld-servers.net. 036E657400002B00010001518000248C2E08027862B27F5F516EBE19680444D4CE5E762981931842C465F00236401D8BD973EE net. 86400 IN DS 35886 8 2 7862B27F5F516EBE19680444D4CE5E762981931842C465F00236401D8BD973EE 036E73310661616C6E6574036E657400000100010002A3000004C2700001 ns1.aalnet.net. 172800 IN A 194.112.0.1 036E73320661616C6E6574036E657400000100010002A3000004C2700005 ns2.aalnet.net. 172800 IN A 194.112.0.5 036E73330661616C6E6574036E657400000100010002A300000452C7BA82 ns3.aalnet.net. 172800 IN A 82.199.186.130 036E73310561646D696E036E657400000100010002A3000004C649BA01 ns1.admin.net. 172800 IN A 198.73.186.1 036E73320561646D696E036E657400000100010002A3000004C64759EC ns2.admin.net. 172800 IN A 198.71.89.236 036E73320561646D696E036E657400001C00010002A30000102605F7000040040000000000196B8127 ns2.admin.net. 172800 IN AAAA 2605:f700:40:400::196b:8127 036E73330561646D696E036E657400000100010002A30000045762B42C ns3.admin.net. 172800 IN A 87.98.180.44 036E73330561646D696E036E657400001C00010002A3000010200141D0000894E40000000000000002 ns3.admin.net. 172800 IN AAAA 2001:41d0:8:94e4::2 036E73340561646D696E036E657400000100010002A300000474FBD2A0 ns4.admin.net. 172800 IN A 116.251.210.160 036E73340561646D696E036E657400001C00010002A3000010240542000202000000000000923AD47B ns4.admin.net. 172800 IN AAAA 2405:4200:202::923a:d47b 036E73350561646D696E036E657400000100010002A3000004BCA5212A ns5.admin.net. 172800 IN A 188.165.33.42 036E73350561646D696E036E657400001C00010002A3000010200141D000085C790000000000000003 ns5.admin.net. 172800 IN AAAA 2001:41d0:8:5c79::3 056E732D626907616672696E6963036E657400000100010002A3000004C4D8A817 ns-bi.afrinic.net. 172800 IN A 196.216.168.23 056E732D626907616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000023 ns-bi.afrinic.net. 172800 IN AAAA 2001:43f8:120::23 056E732D626A07616672696E6963036E657400000100010002A3000004C4D8A821 ns-bj.afrinic.net. 172800 IN A 196.216.168.33 056E732D626A07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000033 ns-bj.afrinic.net. 172800 IN AAAA 2001:43f8:120::33 056E732D627707616672696E6963036E657400000100010002A3000004C4D8A848 ns-bw.afrinic.net. 172800 IN A 196.216.168.72 056E732D627707616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000072 ns-bw.afrinic.net. 172800 IN AAAA 2001:43f8:120::72 056E732D636907616672696E6963036E657400000100010002A3000004C4D8A81E ns-ci.afrinic.net. 172800 IN A 196.216.168.30 056E732D636907616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000030 ns-ci.afrinic.net. 172800 IN AAAA 2001:43f8:120::30 056E732D647A07616672696E6963036E657400000100010002A3000004C4D8A824 ns-dz.afrinic.net. 172800 IN A 196.216.168.36 056E732D647A07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000036 ns-dz.afrinic.net. 172800 IN AAAA 2001:43f8:120::36 056E732D676D07616672696E6963036E657400000100010002A3000004C4D8A81D ns-gm.afrinic.net. 172800 IN A 196.216.168.29 056E732D676D07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000029 ns-gm.afrinic.net. 172800 IN AAAA 2001:43f8:120::29 056E732D6B6507616672696E6963036E657400000100010002A3000004C4D8A816 ns-ke.afrinic.net. 172800 IN A 196.216.168.22 056E732D6B6D07616672696E6963036E657400000100010002A3000004C4D8A82E ns-km.afrinic.net. 172800 IN A 196.216.168.46 056E732D6B6D07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000046 ns-km.afrinic.net. 172800 IN AAAA 2001:43f8:120::46 056E732D6C7307616672696E6963036E657400000100010002A3000004C4D8A846 ns-ls.afrinic.net. 172800 IN A 196.216.168.70 056E732D6C7307616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000070 ns-ls.afrinic.net. 172800 IN AAAA 2001:43f8:120::70 056E732D6C7907616672696E6963036E657400000100010002A3000004C4D8A818 ns-ly.afrinic.net. 172800 IN A 196.216.168.24 056E732D6C7907616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000024 ns-ly.afrinic.net. 172800 IN AAAA 2001:43f8:120::24 056E732D6D7A07616672696E6963036E657400000100010002A3000004C4D8A828 ns-mz.afrinic.net. 172800 IN A 196.216.168.40 056E732D6D7A07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000040 ns-mz.afrinic.net. 172800 IN AAAA 2001:43f8:120::40 056E732D6E6507616672696E6963036E657400000100010002A3000004C4D8A82D ns-ne.afrinic.net. 172800 IN A 196.216.168.45 056E732D6E6507616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000045 ns-ne.afrinic.net. 172800 IN AAAA 2001:43f8:120::45 056E732D727707616672696E6963036E657400000100010002A3000004C4D8A81C ns-rw.afrinic.net. 172800 IN A 196.216.168.28 056E732D727707616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000028 ns-rw.afrinic.net. 172800 IN AAAA 2001:43f8:120::28 056E732D736407616672696E6963036E657400000100010002A3000004C4D8A81A ns-sd.afrinic.net. 172800 IN A 196.216.168.26 056E732D736407616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000026 ns-sd.afrinic.net. 172800 IN AAAA 2001:43f8:120::26 056E732D746407616672696E6963036E657400000100010002A3000004C4D8A81F ns-td.afrinic.net. 172800 IN A 196.216.168.31 056E732D746407616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000031 ns-td.afrinic.net. 172800 IN AAAA 2001:43f8:120::31 056E732D746E07616672696E6963036E657400000100010002A3000004C4D8A819 ns-tn.afrinic.net. 172800 IN A 196.216.168.25 056E732D746E07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000025 ns-tn.afrinic.net. 172800 IN AAAA 2001:43f8:120::25 056E732D747A07616672696E6963036E657400000100010002A3000004C4D8A814 ns-tz.afrinic.net. 172800 IN A 196.216.168.20 056E732D747A07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000020 ns-tz.afrinic.net. 172800 IN AAAA 2001:43f8:120::20 056E732D756707616672696E6963036E657400000100010002A3000004C4D8A82A ns-ug.afrinic.net. 172800 IN A 196.216.168.42 056E732D756707616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000042 ns-ug.afrinic.net. 172800 IN AAAA 2001:43f8:120::42 056E732D7A6D07616672696E6963036E657400000100010002A3000004C4D8A82C ns-zm.afrinic.net. 172800 IN A 196.216.168.44 056E732D7A6D07616672696E6963036E657400001C00010002A3000010200143F8012000000000000000000044 ns-zm.afrinic.net. 172800 IN AAAA 2001:43f8:120::44 066E732D63646E05616D6E6963036E657400000100010002A3000004C200011A ns-cdn.amnic.net. 172800 IN A 194.0.1.26 066E732D63646E05616D6E6963036E657400001C00010002A30000102001067800040000000000000000001A ns-cdn.amnic.net. 172800 IN AAAA 2001:678:4::1a 066E732D70726905616D6E6963036E657400000100010002A3000004C32B4A35 ns-pri.amnic.net. 172800 IN A 195.43.74.53 066E732D70726905616D6E6963036E657400001C00010002A30000102001067C021C00530000000000000001 ns-pri.amnic.net. 172800 IN AAAA 2001:67c:21c:53::1 04736563310561706E6963036E657400000100010002A3000004CA0C1D3B sec1.apnic.net. 172800 IN A 202.12.29.59 04736563310561706E6963036E657400001C00010002A300001020010DC02001000A4608000000000059 sec1.apnic.net. 172800 IN AAAA 2001:dc0:2001:a:4608::59 04736563330561706E6963036E657400000100010002A3000004CA0C1C8C sec3.apnic.net. 172800 IN A 202.12.28.140 04736563330561706E6963036E657400001C00010002A300001020010DC0000100004777000000000140 sec3.apnic.net. 172800 IN AAAA 2001:dc0:1:0:4777::140 04736563340561706E6963036E657400000100010002A3000004CA0C1F8D sec4.apnic.net. 172800 IN A 202.12.31.141 04736563340561706E6963036E657400001C00010002A300001020010DC0400100010000183600000141 sec4.apnic.net. 172800 IN AAAA 2001:dc0:4001:1:0:1836:0:141 036E733106617336343533036E657400000100010002A300000442C69137 ns1.as6453.net. 172800 IN A 66.198.145.55 036E733206617336343533036E657400000100010002A300000442C69163 ns2.as6453.net. 172800 IN A 66.198.145.99 06646E732D7374076261686E686F66036E657400000100010002A30000044F887714 dns-st.bahnhof.net. 172800 IN A 79.136.119.20 036E7331076261686E686F66036E657400000100010002A3000004C3B2A002 ns1.bahnhof.net. 172800 IN A 195.178.160.2 036E73310E6261726261646F73646F6D61696E036E657400000100010002A3000004C8325CC3 ns1.barbadosdomain.net. 172800 IN A 200.50.92.195 036E73320E6261726261646F73646F6D61696E036E657400000100010002A3000004CCD4F271 ns2.barbadosdomain.net. 172800 IN A 204.212.242.113 046E7331370463646E73036E657400000100010002A3000004C2000111 ns17.cdns.net. 172800 IN A 194.0.1.17 046E7331370463646E73036E657400001C00010002A300001020010678000400000000000000000011 ns17.cdns.net. 172800 IN AAAA 2001:678:4::11 046E7333300463646E73036E657400000100010002A3000004C200011E ns30.cdns.net. 172800 IN A 194.0.1.30 046E7333300463646E73036E657400001C00010002A30000102001067800040000000000000000001E ns30.cdns.net. 172800 IN AAAA 2001:678:4::1e 036E73370463646E73036E657400000100010002A3000004C2000107 ns7.cdns.net. 172800 IN A 194.0.1.7 036E73370463646E73036E657400001C00010002A300001020010678000400000000000000000007 ns7.cdns.net. 172800 IN AAAA 2001:678:4::7 026E73066365726E6574036E657400000100010002A3000004CA70002C ns.cernet.net. 172800 IN A 202.112.0.44 01610A63692D73657276657273036E657400000100010002A30000045775C2A0 a.ci-servers.net. 172800 IN A 87.117.194.160 06726F6F742D620C636C6F756439676C6F62616C036E657400000100010002A3000004321652FB root-b.cloud9global.net. 172800 IN A 50.22.82.251 036E733105636F626578036E657400000100010002A3000004D898C047 ns1.cobex.net. 172800 IN A 216.152.192.71 036E733205636F626578036E657400000100010002A3000004D898C048 ns2.cobex.net. 172800 IN A 216.152.192.72 026C6B0C636F6D6D756E697479646E73036E657400000100010002A3000004C200011B lk.communitydns.net. 172800 IN A 194.0.1.27 036E73310C636F6D6D756E697479646E73036E657400000100010002A3000004C2000101 ns1.communitydns.net. 172800 IN A 194.0.1.1 036E73310C636F6D6D756E697479646E73036E657400001C00010002A300001020010678000400000000000000000001 ns1.communitydns.net. 172800 IN AAAA 2001:678:4::1 046E7331350C636F6D6D756E697479646E73036E657400000100010002A3000004C200010F ns15.communitydns.net. 172800 IN A 194.0.1.15 046E7331350C636F6D6D756E697479646E73036E657400001C00010002A30000102001067800040000000000000000000F ns15.communitydns.net. 172800 IN AAAA 2001:678:4::f 0270680C636F6D6D756E697479646E73036E657400000100010002A3000004C2000117 ph.communitydns.net. 172800 IN A 194.0.1.23 086575726F2D6E7331026377036E657400000100010002A30000048D011BF8 euro-ns1.cw.net. 172800 IN A 141.1.27.248 086575726F2D6E7332026377036E657400000100010002A3000004D450AF02 euro-ns2.cw.net. 172800 IN A 212.80.175.2 086575726F2D6E7333026377036E657400000100010002A30000048D011BFB euro-ns3.cw.net. 172800 IN A 141.1.27.251 016C026465036E657400000100010002A30000044D433F69 l.de.net. 172800 IN A 77.67.63.105 016C026465036E657400001C00010002A300001020010668001F00110000000000000105 l.de.net. 172800 IN AAAA 2001:668:1f:11::105 016E026465036E657400000100010002A3000004C2926B06 n.de.net. 172800 IN A 194.146.107.6 016E026465036E657400001C00010002A30000102001067C101100010000000000000053 n.de.net. 172800 IN AAAA 2001:67c:1011:1::53 0173026465036E657400000100010002A3000004C3F3891A s.de.net. 172800 IN A 195.243.137.26 03646E7309646E73616672696361036E657400000100010002A3000004D5C19D1E dns.dnsafrica.net. 172800 IN A 213.193.157.30 03636C3107646E736E6F6465036E657400000100010002A3000004C2926A22 cl1.dnsnode.net. 172800 IN A 194.146.106.34 03636C3107646E736E6F6465036E657400001C00010002A30000102001067C101000080000000000000053 cl1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:8::53 036E6C3107646E736E6F6465036E657400000100010002A3000004C2926A2A nl1.dnsnode.net. 172800 IN A 194.146.106.42 036E6C3107646E736E6F6465036E657400001C00010002A30000102001067C101000100000000000000053 nl1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:10::53 0370653107646E736E6F6465036E657400000100010002A3000004C2926A52 pe1.dnsnode.net. 172800 IN A 194.146.106.82 0370653107646E736E6F6465036E657400001C00010002A30000102001067C101000200000000000000053 pe1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:20::53 04666F726B0373746807646E736E6F6465036E657400000100010002A30000044D48E5FE fork.sth.dnsnode.net. 172800 IN A 77.72.229.254 04666F726B0373746807646E736E6F6465036E657400001C00010002A30000102A0103F0000003060000000000000053 fork.sth.dnsnode.net. 172800 IN AAAA 2a01:3f0:0:306::53 037A613107646E736E6F6465036E657400000100010002A3000004C2926A4E za1.dnsnode.net. 172800 IN A 194.146.106.78 037A613107646E736E6F6465036E657400001C00010002A30000102001067C101000190000000000000053 za1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:19::53 036166310664796E746C64036E657400000100010002A3000004D04E465E af1.dyntld.net. 172800 IN A 208.78.70.94 036166310664796E746C64036E657400001C00010002A300001020010500009000000000000000000094 af1.dyntld.net. 172800 IN AAAA 2001:500:90::94 036166330664796E746C64036E657400000100010002A3000004D04E475E af3.dyntld.net. 172800 IN A 208.78.71.94 036166330664796E746C64036E657400001C00010002A300001020010500009400000000000000000094 af3.dyntld.net. 172800 IN AAAA 2001:500:94::94 05636F6F70310664796E746C64036E657400000100010002A3000004D04E4650 coop1.dyntld.net. 172800 IN A 208.78.70.80 05636F6F70320664796E746C64036E657400000100010002A3000004CC0DFA50 coop2.dyntld.net. 172800 IN A 204.13.250.80 05636F6F70330664796E746C64036E657400000100010002A3000004D04E4750 coop3.dyntld.net. 172800 IN A 208.78.71.80 05636F6F70340664796E746C64036E657400000100010002A3000004CC0DFB50 coop4.dyntld.net. 172800 IN A 204.13.251.80 036378310664796E746C64036E657400000100010002A3000004D04E464D cx1.dyntld.net. 172800 IN A 208.78.70.77 036378310664796E746C64036E657400001C00010002A300001020010500009000000000000000000077 cx1.dyntld.net. 172800 IN AAAA 2001:500:90::77 036378330664796E746C64036E657400000100010002A3000004D04E474D cx3.dyntld.net. 172800 IN A 208.78.71.77 036378330664796E746C64036E657400001C00010002A300001020010500009400000000000000000077 cx3.dyntld.net. 172800 IN AAAA 2001:500:94::77 03676C310664796E746C64036E657400000100010002A3000004D04E4661 gl1.dyntld.net. 172800 IN A 208.78.70.97 03676C320664796E746C64036E657400000100010002A3000004CC0DFA61 gl2.dyntld.net. 172800 IN A 204.13.250.97 03676C330664796E746C64036E657400000100010002A3000004D04E4761 gl3.dyntld.net. 172800 IN A 208.78.71.97 03676C340664796E746C64036E657400000100010002A3000004CC0DFB61 gl4.dyntld.net. 172800 IN A 204.13.251.97 036773310664796E746C64036E657400000100010002A3000004D04E4656 gs1.dyntld.net. 172800 IN A 208.78.70.86 036773310664796E746C64036E657400001C00010002A300001020010500009000000000000000000086 gs1.dyntld.net. 172800 IN AAAA 2001:500:90::86 036773330664796E746C64036E657400000100010002A3000004D04E4756 gs3.dyntld.net. 172800 IN A 208.78.71.86 036773330664796E746C64036E657400001C00010002A300001020010500009400000000000000000086 gs3.dyntld.net. 172800 IN AAAA 2001:500:94::86 036B69310664796E746C64036E657400000100010002A3000004D04E4657 ki1.dyntld.net. 172800 IN A 208.78.70.87 036B69310664796E746C64036E657400001C00010002A300001020010500009000000000000000000087 ki1.dyntld.net. 172800 IN AAAA 2001:500:90::87 036B69330664796E746C64036E657400000100010002A3000004D04E4757 ki3.dyntld.net. 172800 IN A 208.78.71.87 036B69330664796E746C64036E657400001C00010002A300001020010500009400000000000000000087 ki3.dyntld.net. 172800 IN AAAA 2001:500:94::87 036D67310664796E746C64036E657400000100010002A3000004D04E4660 mg1.dyntld.net. 172800 IN A 208.78.70.96 036D67320664796E746C64036E657400000100010002A3000004CC0DFA60 mg2.dyntld.net. 172800 IN A 204.13.250.96 036D67330664796E746C64036E657400000100010002A3000004D04E4760 mg3.dyntld.net. 172800 IN A 208.78.71.96 036D67340664796E746C64036E657400000100010002A3000004CC0DFB60 mg4.dyntld.net. 172800 IN A 204.13.251.96 036D73310664796E746C64036E657400000100010002A3000004D04E4654 ms1.dyntld.net. 172800 IN A 208.78.70.84 036D73320664796E746C64036E657400000100010002A3000004CC0DFA54 ms2.dyntld.net. 172800 IN A 204.13.250.84 036D73330664796E746C64036E657400000100010002A3000004D04E4754 ms3.dyntld.net. 172800 IN A 208.78.71.84 036D73340664796E746C64036E657400000100010002A3000004CC0DFB54 ms4.dyntld.net. 172800 IN A 204.13.251.84 036E61310664796E746C64036E657400000100010002A3000004D04E465A na1.dyntld.net. 172800 IN A 208.78.70.90 036E61320664796E746C64036E657400000100010002A3000004CC0DFA5A na2.dyntld.net. 172800 IN A 204.13.250.90 036E66310664796E746C64036E657400000100010002A3000004D04E4658 nf1.dyntld.net. 172800 IN A 208.78.70.88 036E66310664796E746C64036E657400001C00010002A300001020010500009000000000000000000088 nf1.dyntld.net. 172800 IN AAAA 2001:500:90::88 036E66330664796E746C64036E657400000100010002A3000004D04E4758 nf3.dyntld.net. 172800 IN A 208.78.71.88 036E66330664796E746C64036E657400001C00010002A300001020010500009400000000000000000088 nf3.dyntld.net. 172800 IN AAAA 2001:500:94::88 037362310664796E746C64036E657400000100010002A3000004D04E4653 sb1.dyntld.net. 172800 IN A 208.78.70.83 037362310664796E746C64036E657400001C00010002A300001020010500009000000000000000000083 sb1.dyntld.net. 172800 IN AAAA 2001:500:90::83 037362330664796E746C64036E657400000100010002A3000004D04E4753 sb3.dyntld.net. 172800 IN A 208.78.71.83 037362330664796E746C64036E657400001C00010002A300001020010500009400000000000000000083 sb3.dyntld.net. 172800 IN AAAA 2001:500:94::83 03746C310664796E746C64036E657400000100010002A3000004D04E464E tl1.dyntld.net. 172800 IN A 208.78.70.78 03746C310664796E746C64036E657400001C00010002A300001020010500009000000000000000000078 tl1.dyntld.net. 172800 IN AAAA 2001:500:90::78 03746C330664796E746C64036E657400000100010002A3000004D04E474E tl3.dyntld.net. 172800 IN A 208.78.71.78 03746C330664796E746C64036E657400001C00010002A300001020010500009400000000000000000078 tl3.dyntld.net. 172800 IN AAAA 2001:500:94::78 01610B6564752D73657276657273036E657400000100010002A3000004C005061E a.edu-servers.net. 172800 IN A 192.5.6.30 01630B6564752D73657276657273036E657400000100010002A3000004C01A5C1E c.edu-servers.net. 172800 IN A 192.26.92.30 01640B6564752D73657276657273036E657400000100010002A3000004C01F501E d.edu-servers.net. 172800 IN A 192.31.80.30 01660B6564752D73657276657273036E657400000100010002A3000004C023331E f.edu-servers.net. 172800 IN A 192.35.51.30 01670B6564752D73657276657273036E657400000100010002A3000004C02A5D1E g.edu-servers.net. 172800 IN A 192.42.93.30 01670B6564752D73657276657273036E657400001C00010002A300001020010503CC2C00000000000000020036 g.edu-servers.net. 172800 IN AAAA 2001:503:cc2c::2:36 016C0B6564752D73657276657273036E657400000100010002A3000004C029A21E l.edu-servers.net. 172800 IN A 192.41.162.30 036E7333026E730465736174036E657400000100010002A3000004C06F2764 ns3.ns.esat.net. 172800 IN A 192.111.39.100 036E7333026E730465736174036E657400001C00010002A3000010200107C80002000A0000000000000064 ns3.ns.esat.net. 172800 IN AAAA 2001:7c8:2:a::64 016102677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400000100010002A3000004B915A822 a.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.168.34 016102677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400001C00010002A30000102A041B00000800000000000000000002 a.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:8::2 016202677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400000100010002A3000004B915A922 b.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.169.34 016202677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400001C00010002A30000102A041B00000900000000000000000002 b.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:9::2 016302677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400000100010002A3000004B915AA22 c.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.170.34 016302677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400001C00010002A30000102A041B00000A00000000000000000002 c.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:a::2 016402677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400000100010002A3000004B915AB22 d.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.171.34 016402677112676C6F62616C616E7963617374636C6F756407667265656E6F6D036E657400001C00010002A30000102A041B00000B00000000000000000002 d.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:b::2 03746C640467646E73036E657400000100010002A300000444B28195 tld.gdns.net. 172800 IN A 68.178.129.149 0A6E6577732D746F6B796F03676970036E657400000100010002A3000004CC3B40DE news-tokyo.gip.net. 172800 IN A 204.59.64.222 036E733203676970036E657400000100010002A3000004CC3B01DE ns2.gip.net. 172800 IN A 204.59.1.222 01610B676D6F7265676973747279036E657400000100010002A300000448344709 a.gmoregistry.net. 172800 IN A 72.52.71.9 01610B676D6F7265676973747279036E657400001C00010002A300001020010470001A00000000000000000009 a.gmoregistry.net. 172800 IN AAAA 2001:470:1a::9 01620B676D6F7265676973747279036E657400000100010002A300000426670209 b.gmoregistry.net. 172800 IN A 38.103.2.9 01630B676D6F7265676973747279036E657400000100010002A30000043FF3C209 c.gmoregistry.net. 172800 IN A 63.243.194.9 01630B676D6F7265676973747279036E657400001C00010002A3000010200105A0001000000000000000000009 c.gmoregistry.net. 172800 IN AAAA 2001:5a0:10::9 01640B676D6F7265676973747279036E657400000100010002A3000004781DFC0B d.gmoregistry.net. 172800 IN A 120.29.252.11 01640B676D6F7265676973747279036E657400001C00010002A300001020010DCD000500000000000000000011 d.gmoregistry.net. 172800 IN AAAA 2001:dcd:5::11 01650B676D6F7265676973747279036E657400000100010002A3000004781DFE0B e.gmoregistry.net. 172800 IN A 120.29.254.11 01650B676D6F7265676973747279036E657400001C00010002A300001020010DCD000600000000000000000011 e.gmoregistry.net. 172800 IN AAAA 2001:dcd:6::11 01610B676F762D73657276657273036E657400000100010002A300000445249D1E a.gov-servers.net. 172800 IN A 69.36.157.30 01610B676F762D73657276657273036E657400001C00010002A300001020010500443100000000000000020030 a.gov-servers.net. 172800 IN AAAA 2001:500:4431::2:30 01620B676F762D73657276657273036E657400000100010002A3000004D1707B1E b.gov-servers.net. 172800 IN A 209.112.123.30 01610C67746C642D73657276657273036E657400000100010002A3000004C005061E a.gtld-servers.net. 172800 IN A 192.5.6.30 01610C67746C642D73657276657273036E657400001C00010002A300001020010503A83E00000000000000020030 a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 01620C67746C642D73657276657273036E657400000100010002A3000004C0210E1E b.gtld-servers.net. 172800 IN A 192.33.14.30 01620C67746C642D73657276657273036E657400001C00010002A300001020010503231D00000000000000020030 b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 01630C67746C642D73657276657273036E657400000100010002A3000004C01A5C1E c.gtld-servers.net. 172800 IN A 192.26.92.30 01640C67746C642D73657276657273036E657400000100010002A3000004C01F501E d.gtld-servers.net. 172800 IN A 192.31.80.30 01650C67746C642D73657276657273036E657400000100010002A3000004C00C5E1E e.gtld-servers.net. 172800 IN A 192.12.94.30 01660C67746C642D73657276657273036E657400000100010002A3000004C023331E f.gtld-servers.net. 172800 IN A 192.35.51.30 01670C67746C642D73657276657273036E657400000100010002A3000004C02A5D1E g.gtld-servers.net. 172800 IN A 192.42.93.30 01680C67746C642D73657276657273036E657400000100010002A3000004C036701E h.gtld-servers.net. 172800 IN A 192.54.112.30 01690C67746C642D73657276657273036E657400000100010002A3000004C02BAC1E i.gtld-servers.net. 172800 IN A 192.43.172.30 016A0C67746C642D73657276657273036E657400000100010002A3000004C0304F1E j.gtld-servers.net. 172800 IN A 192.48.79.30 016B0C67746C642D73657276657273036E657400000100010002A3000004C034B21E k.gtld-servers.net. 172800 IN A 192.52.178.30 016C0C67746C642D73657276657273036E657400000100010002A3000004C029A21E l.gtld-servers.net. 172800 IN A 192.41.162.30 016D0C67746C642D73657276657273036E657400000100010002A3000004C037531E m.gtld-servers.net. 172800 IN A 192.55.83.30 046F73693203677561036E657400000100010002A3000004CDA1BC03 osi2.gua.net. 172800 IN A 205.161.188.3 05616E7963310769726F6E646E73036E657400000100010002A3000004C3FD4004 anyc1.irondns.net. 172800 IN A 195.253.64.4 05616E7963310769726F6E646E73036E657400001C00010002A30000102A0105B0000400000000000000000004 anyc1.irondns.net. 172800 IN AAAA 2a01:5b0:4::4 05616E7963320769726F6E646E73036E657400000100010002A3000004C3FD4007 anyc2.irondns.net. 172800 IN A 195.253.64.7 05616E7963320769726F6E646E73036E657400001C00010002A30000102A0105B0000400000000000000000007 anyc2.irondns.net. 172800 IN AAAA 2a01:5b0:4::7 08616E7963617374310769726F6E646E73036E657400000100010002A3000004C3FD4005 anycast1.irondns.net. 172800 IN A 195.253.64.5 08616E7963617374310769726F6E646E73036E657400001C00010002A30000102A0105B0000400000000000000000005 anycast1.irondns.net. 172800 IN AAAA 2a01:5b0:4::5 09616E796361737431300769726F6E646E73036E657400000100010002A3000004C3FD400C anycast10.irondns.net. 172800 IN A 195.253.64.12 09616E796361737431300769726F6E646E73036E657400001C00010002A30000102A0105B000040000000000000000000C anycast10.irondns.net. 172800 IN AAAA 2a01:5b0:4::c 09616E796361737432330769726F6E646E73036E657400000100010002A3000004C3FD410B anycast23.irondns.net. 172800 IN A 195.253.65.11 09616E796361737432330769726F6E646E73036E657400001C00010002A30000102A0105B000050000000000000000000B anycast23.irondns.net. 172800 IN AAAA 2a01:5b0:5::b 09616E796361737432340769726F6E646E73036E657400000100010002A3000004C3FD410C anycast24.irondns.net. 172800 IN A 195.253.65.12 09616E796361737432340769726F6E646E73036E657400001C00010002A30000102A0105B000050000000000000000000C anycast24.irondns.net. 172800 IN AAAA 2a01:5b0:5::c 08616E7963617374390769726F6E646E73036E657400000100010002A3000004C3FD400B anycast9.irondns.net. 172800 IN A 195.253.64.11 08616E7963617374390769726F6E646E73036E657400001C00010002A30000102A0105B000040000000000000000000B anycast9.irondns.net. 172800 IN AAAA 2a01:5b0:4::b 03746C64076973632D736E73036E657400000100010002A30000043FF3C203 tld.isc-sns.net. 172800 IN A 63.243.194.3 03746C64076973632D736E73036E657400001C00010002A3000010200105A0001000000000000000000003 tld.isc-sns.net. 172800 IN AAAA 2001:5a0:10::3 036E7330026A61036E657400000100010002A300000480560114 ns0.ja.net. 172800 IN A 128.86.1.20 036E7330026A61036E657400000100010002A3000004C13F5E14 ns0.ja.net. 172800 IN A 193.63.94.20 036E7330026A61036E657400001C00010002A300001020010630000000080000000000000014 ns0.ja.net. 172800 IN AAAA 2001:630:0:8::14 036E7330026A61036E657400001C00010002A300001020010630000000090000000000000014 ns0.ja.net. 172800 IN AAAA 2001:630:0:9::14 036E7334026A61036E657400000100010002A3000004C13E9D42 ns4.ja.net. 172800 IN A 193.62.157.66 036E7334026A61036E657400001C00010002A300001020010630000000470000000000000042 ns4.ja.net. 172800 IN AAAA 2001:630:0:47::42 046B776E73046B656D73036E657400000100010002A3000004A8BB050C kwns.kems.net. 172800 IN A 168.187.5.12 036E7331056B726E6963036E657400000100010002A3000004CA1E3233 ns1.krnic.net. 172800 IN A 202.30.50.51 0567642D6E730A6B737265676973747279036E657400000100010002A3000004C2000B67 gd-ns.ksregistry.net. 172800 IN A 194.0.11.103 0567642D6E730A6B737265676973747279036E657400001C00010002A300001020010678000E01030000000000000053 gd-ns.ksregistry.net. 172800 IN AAAA 2001:678:e:103::53 03646E73066C74746E6574036E657400000100010002A30000043EF02409 dns.lttnet.net. 172800 IN A 62.240.36.9 04646E7331066C74746E6574036E657400000100010002A30000043E442A09 dns1.lttnet.net. 172800 IN A 62.68.42.9 066E73312D6672096D6564696173657276036E657400000100010002A3000004BCA5260E ns1-fr.mediaserv.net. 172800 IN A 188.165.38.14 066E73312D6770096D6564696173657276036E657400000100010002A3000004D5BCAC01 ns1-gp.mediaserv.net. 172800 IN A 213.188.172.1 066E73312D6D71096D6564696173657276036E657400000100010002A3000004D5101403 ns1-mq.mediaserv.net. 172800 IN A 213.16.20.3 06736572766572056E6F726475036E657400000100010002A3000004C10AFC13 server.nordu.net. 172800 IN A 193.10.252.19 0161046E733133036E657400000100010002A300000431D41FC0 a.ns13.net. 172800 IN A 49.212.31.192 0162046E733133036E657400000100010002A300000431D43355 b.ns13.net. 172800 IN A 49.212.51.85 026E73066E74616D6172036E657400000100010002A300000475675821 ns.ntamar.net. 172800 IN A 117.103.88.33 05636C2D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD81E cl-ns.anycast.pch.net. 172800 IN A 204.61.216.30 05636C2D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014603000AD000000000001 cl-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6030:ad::1 0563792D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD82C cy-ns.anycast.pch.net. 172800 IN A 204.61.216.44 0563792D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014604400AD000000000001 cy-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6044:ad::1 0567642D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD82F gd-ns.anycast.pch.net. 172800 IN A 204.61.216.47 0567642D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014604700AD000000000001 gd-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6047:ad::1 0567792D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD822 gy-ns.anycast.pch.net. 172800 IN A 204.61.216.34 0567792D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014603400AD000000000001 gy-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6034:ad::1 0568742D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD826 ht-ns.anycast.pch.net. 172800 IN A 204.61.216.38 0568742D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014603800AD000000000001 ht-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6038:ad::1 056C732D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD81C ls-ns.anycast.pch.net. 172800 IN A 204.61.216.28 056C732D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014602800AD000000000001 ls-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6028:ad::1 056D732D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD821 ms-ns.anycast.pch.net. 172800 IN A 204.61.216.33 056D762D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD818 mv-ns.anycast.pch.net. 172800 IN A 204.61.216.24 056E612D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD823 na-ns.anycast.pch.net. 172800 IN A 204.61.216.35 056E612D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014603500AD000000000001 na-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6035:ad::1 056E702D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD80B np-ns.anycast.pch.net. 172800 IN A 204.61.216.11 056E702D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014601100AD000000000001 np-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6011:ad::1 0570722D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD817 pr-ns.anycast.pch.net. 172800 IN A 204.61.216.23 0570722D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014602300AD000000000001 pr-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6023:ad::1 0570732D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD81D ps-ns.anycast.pch.net. 172800 IN A 204.61.216.29 0570732D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014602900AD000000000001 ps-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6029:ad::1 0573612D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD829 sa-ns.anycast.pch.net. 172800 IN A 204.61.216.41 0573612D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014604100AD000000000001 sa-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6041:ad::1 0573672D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD839 sg-ns.anycast.pch.net. 172800 IN A 204.61.216.57 0573672D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014605700AD000000000001 sg-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6057:ad::1 057A612D6E7307616E796361737403706368036E657400000100010002A3000004CC3DD837 za-ns.anycast.pch.net. 172800 IN A 204.61.216.55 057A612D6E7307616E796361737403706368036E657400001C00010002A3000010200105000014605500AD000000000001 za-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6055:ad::1 05616E796E7303706368036E657400000100010002A3000004CC3DD804 anyns.pch.net. 172800 IN A 204.61.216.4 0363617403706368036E657400000100010002A3000004CC3DD814 cat.pch.net. 172800 IN A 204.61.216.20 0363617403706368036E657400001C00010002A3000010200105000014602000AD000000000001 cat.pch.net. 172800 IN AAAA 2001:500:14:6020:ad::1 036E69630A6C6B2D616E796361737403706368036E657400000100010002A3000004CC3DD81B nic.lk-anycast.pch.net. 172800 IN A 204.61.216.27 026164056363746C640761757468646E730472697065036E657400000100010002A3000004C1000935 ad.cctld.authdns.ripe.net. 172800 IN A 193.0.9.53 026164056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000053 ad.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::53 026165056363746C640761757468646E730472697065036E657400000100010002A3000004C1000936 ae.cctld.authdns.ripe.net. 172800 IN A 193.0.9.54 026165056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000054 ae.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::54 02616C056363746C640761757468646E730472697065036E657400000100010002A3000004C1000938 al.cctld.authdns.ripe.net. 172800 IN A 193.0.9.56 02616C056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000056 al.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::56 02616D056363746C640761757468646E730472697065036E657400000100010002A3000004C1000939 am.cctld.authdns.ripe.net. 172800 IN A 193.0.9.57 02616D056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000057 am.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::57 02616E056363746C640761757468646E730472697065036E657400000100010002A3000004C100093A an.cctld.authdns.ripe.net. 172800 IN A 193.0.9.58 02616E056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000058 an.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::58 026172056363746C640761757468646E730472697065036E657400000100010002A3000004C100093B ar.cctld.authdns.ripe.net. 172800 IN A 193.0.9.59 026172056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000059 ar.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::59 026261056363746C640761757468646E730472697065036E657400000100010002A3000004C100093C ba.cctld.authdns.ripe.net. 172800 IN A 193.0.9.60 026261056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000060 ba.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::60 026267056363746C640761757468646E730472697065036E657400000100010002A3000004C100093D bg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.61 026267056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000061 bg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::61 026269056363746C640761757468646E730472697065036E657400000100010002A3000004C100093E bi.cctld.authdns.ripe.net. 172800 IN A 193.0.9.62 026269056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000062 bi.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::62 02626A056363746C640761757468646E730472697065036E657400000100010002A3000004C100093F bj.cctld.authdns.ripe.net. 172800 IN A 193.0.9.63 02626A056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000063 bj.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::63 026274056363746C640761757468646E730472697065036E657400000100010002A3000004C1000941 bt.cctld.authdns.ripe.net. 172800 IN A 193.0.9.65 026274056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000065 bt.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::65 026369056363746C640761757468646E730472697065036E657400000100010002A3000004C1000943 ci.cctld.authdns.ripe.net. 172800 IN A 193.0.9.67 026369056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000067 ci.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::67 02636D056363746C640761757468646E730472697065036E657400000100010002A3000004C1000944 cm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.68 02636D056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000068 cm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::68 026375056363746C640761757468646E730472697065036E657400000100010002A3000004C1000946 cu.cctld.authdns.ripe.net. 172800 IN A 193.0.9.70 026375056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000070 cu.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::70 026377056363746C640761757468646E730472697065036E657400000100010002A3000004C1000956 cw.cctld.authdns.ripe.net. 172800 IN A 193.0.9.86 026377056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000086 cw.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::86 02647A056363746C640761757468646E730472697065036E657400000100010002A3000004C1000947 dz.cctld.authdns.ripe.net. 172800 IN A 193.0.9.71 02647A056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000071 dz.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::71 026572056363746C640761757468646E730472697065036E657400000100010002A3000004C1000948 er.cctld.authdns.ripe.net. 172800 IN A 193.0.9.72 026572056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000072 er.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::72 026574056363746C640761757468646E730472697065036E657400000100010002A3000004C1000949 et.cctld.authdns.ripe.net. 172800 IN A 193.0.9.73 026574056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000073 et.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::73 026764056363746C640761757468646E730472697065036E657400000100010002A3000004C100094B gd.cctld.authdns.ripe.net. 172800 IN A 193.0.9.75 026764056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000075 gd.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::75 026770056363746C640761757468646E730472697065036E657400000100010002A3000004C100094C gp.cctld.authdns.ripe.net. 172800 IN A 193.0.9.76 026770056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000076 gp.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::76 026773056363746C640761757468646E730472697065036E657400000100010002A3000004C100094D gs.cctld.authdns.ripe.net. 172800 IN A 193.0.9.77 026773056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000077 gs.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::77 026775056363746C640761757468646E730472697065036E657400000100010002A3000004C100094E gu.cctld.authdns.ripe.net. 172800 IN A 193.0.9.78 026775056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000078 gu.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::78 026779056363746C640761757468646E730472697065036E657400000100010002A3000004C100094F gy.cctld.authdns.ripe.net. 172800 IN A 193.0.9.79 026779056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000079 gy.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::79 026973056363746C640761757468646E730472697065036E657400000100010002A3000004C1000951 is.cctld.authdns.ripe.net. 172800 IN A 193.0.9.81 026973056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000081 is.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::81 026A6D056363746C640761757468646E730472697065036E657400000100010002A3000004C1000952 jm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.82 026A6D056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000082 jm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::82 026A6F056363746C640761757468646E730472697065036E657400000100010002A3000004C1000953 jo.cctld.authdns.ripe.net. 172800 IN A 193.0.9.83 026A6F056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000083 jo.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::83 026B67056363746C640761757468646E730472697065036E657400000100010002A3000004C1000954 kg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.84 026B67056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000084 kg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::84 026B7A056363746C640761757468646E730472697065036E657400000100010002A3000004C1000957 kz.cctld.authdns.ripe.net. 172800 IN A 193.0.9.87 026B7A056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000087 kz.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::87 026C76056363746C640761757468646E730472697065036E657400000100010002A3000004C1000959 lv.cctld.authdns.ripe.net. 172800 IN A 193.0.9.89 026C76056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000089 lv.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::89 026C79056363746C640761757468646E730472697065036E657400000100010002A3000004C100095A ly.cctld.authdns.ripe.net. 172800 IN A 193.0.9.90 026C79056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000090 ly.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::90 026D61056363746C640761757468646E730472697065036E657400000100010002A3000004C100095B ma.cctld.authdns.ripe.net. 172800 IN A 193.0.9.91 026D61056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000091 ma.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::91 026D63056363746C640761757468646E730472697065036E657400000100010002A3000004C100095C mc.cctld.authdns.ripe.net. 172800 IN A 193.0.9.92 026D63056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000092 mc.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::92 026D64056363746C640761757468646E730472697065036E657400000100010002A3000004C100095D md.cctld.authdns.ripe.net. 172800 IN A 193.0.9.93 026D64056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000093 md.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::93 026D67056363746C640761757468646E730472697065036E657400000100010002A3000004C100095E mg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.94 026D67056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000094 mg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::94 026D6D056363746C640761757468646E730472697065036E657400000100010002A3000004C1000960 mm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.96 026D6D056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000096 mm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::96 026D77056363746C640761757468646E730472697065036E657400000100010002A3000004C1000963 mw.cctld.authdns.ripe.net. 172800 IN A 193.0.9.99 026D77056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000099 mw.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::99 026E63056363746C640761757468646E730472697065036E657400000100010002A3000004C1000964 nc.cctld.authdns.ripe.net. 172800 IN A 193.0.9.100 026E63056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000100 nc.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::100 026E65056363746C640761757468646E730472697065036E657400000100010002A3000004C1000965 ne.cctld.authdns.ripe.net. 172800 IN A 193.0.9.101 026E65056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000101 ne.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::101 026E70056363746C640761757468646E730472697065036E657400000100010002A3000004C1000966 np.cctld.authdns.ripe.net. 172800 IN A 193.0.9.102 026E70056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000102 np.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::102 027068056363746C640761757468646E730472697065036E657400000100010002A3000004C1000968 ph.cctld.authdns.ripe.net. 172800 IN A 193.0.9.104 027068056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000104 ph.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::104 027073056363746C640761757468646E730472697065036E657400000100010002A3000004C1000969 ps.cctld.authdns.ripe.net. 172800 IN A 193.0.9.105 027073056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000105 ps.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::105 027079056363746C640761757468646E730472697065036E657400000100010002A3000004C100096A py.cctld.authdns.ripe.net. 172800 IN A 193.0.9.106 027079056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000106 py.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::106 027361056363746C640761757468646E730472697065036E657400000100010002A3000004C100096C sa.cctld.authdns.ripe.net. 172800 IN A 193.0.9.108 027361056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000108 sa.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::108 027364056363746C640761757468646E730472697065036E657400000100010002A3000004C100096D sd.cctld.authdns.ripe.net. 172800 IN A 193.0.9.109 027364056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000109 sd.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::109 02736D056363746C640761757468646E730472697065036E657400000100010002A3000004C100096E sm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.110 02736D056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000110 sm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::110 02736E056363746C640761757468646E730472697065036E657400000100010002A3000004C100096F sn.cctld.authdns.ripe.net. 172800 IN A 193.0.9.111 02736E056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000111 sn.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::111 027376056363746C640761757468646E730472697065036E657400000100010002A3000004C1000970 sv.cctld.authdns.ripe.net. 172800 IN A 193.0.9.112 027376056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000112 sv.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::112 027379056363746C640761757468646E730472697065036E657400000100010002A3000004C1000971 sy.cctld.authdns.ripe.net. 172800 IN A 193.0.9.113 027379056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000113 sy.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::113 02737A056363746C640761757468646E730472697065036E657400000100010002A3000004C1000972 sz.cctld.authdns.ripe.net. 172800 IN A 193.0.9.114 02737A056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000114 sz.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::114 027468056363746C640761757468646E730472697065036E657400000100010002A3000004C1000974 th.cctld.authdns.ripe.net. 172800 IN A 193.0.9.116 027468056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000116 th.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::116 02746A056363746C640761757468646E730472697065036E657400000100010002A3000004C1000975 tj.cctld.authdns.ripe.net. 172800 IN A 193.0.9.117 02746A056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000117 tj.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::117 02746F056363746C640761757468646E730472697065036E657400000100010002A3000004C1000976 to.cctld.authdns.ripe.net. 172800 IN A 193.0.9.118 02746F056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000118 to.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::118 027470056363746C640761757468646E730472697065036E657400000100010002A3000004C1000977 tp.cctld.authdns.ripe.net. 172800 IN A 193.0.9.119 027470056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000119 tp.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::119 027472056363746C640761757468646E730472697065036E657400000100010002A3000004C1000978 tr.cctld.authdns.ripe.net. 172800 IN A 193.0.9.120 027472056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000120 tr.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::120 027567056363746C640761757468646E730472697065036E657400000100010002A3000004C1000934 ug.cctld.authdns.ripe.net. 172800 IN A 193.0.9.52 027567056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000052 ug.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::52 027579056363746C640761757468646E730472697065036E657400000100010002A3000004C100097A uy.cctld.authdns.ripe.net. 172800 IN A 193.0.9.122 027579056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000122 uy.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::122 027661056363746C640761757468646E730472697065036E657400000100010002A3000004C100097B va.cctld.authdns.ripe.net. 172800 IN A 193.0.9.123 027661056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000123 va.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::123 027667056363746C640761757468646E730472697065036E657400000100010002A3000004C100097C vg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.124 027667056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000124 vg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::124 02766E056363746C640761757468646E730472697065036E657400000100010002A3000004C100097E vn.cctld.authdns.ripe.net. 172800 IN A 193.0.9.126 02766E056363746C640761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000126 vn.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::126 04736563320761757468646E730472697065036E657400000100010002A3000004C1000904 sec2.authdns.ripe.net. 172800 IN A 193.0.9.4 04736563320761757468646E730472697065036E657400001C00010002A30000102001067C00E000000000000000000004 sec2.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::4 056E732D626E0472697065036E657400000100010002A3000004C1000C21 ns-bn.ripe.net. 172800 IN A 193.0.12.33 056E732D6B680472697065036E657400000100010002A3000004C1000C25 ns-kh.ripe.net. 172800 IN A 193.0.12.37 056E732D7A770472697065036E657400000100010002A3000004C1000CF9 ns-zw.ripe.net. 172800 IN A 193.0.12.249 016103646E73047269706E036E657400000100010002A3000004C1E88006 a.dns.ripn.net. 172800 IN A 193.232.128.6 016103646E73047269706E036E657400001C00010002A300001020010678001700000193023201280006 a.dns.ripn.net. 172800 IN AAAA 2001:678:17:0:193:232:128:6 016203646E73047269706E036E657400000100010002A3000004C255FC3E b.dns.ripn.net. 172800 IN A 194.85.252.62 016203646E73047269706E036E657400001C00010002A300001020010678001600000194008502520062 b.dns.ripn.net. 172800 IN AAAA 2001:678:16:0:194:85:252:62 016403646E73047269706E036E657400000100010002A3000004C2BE7C11 d.dns.ripn.net. 172800 IN A 194.190.124.17 016403646E73047269706E036E657400001C00010002A300001020010678001800000194019001240017 d.dns.ripn.net. 172800 IN AAAA 2001:678:18:0:194:190:124:17 016503646E73047269706E036E657400000100010002A3000004C1E88E11 e.dns.ripn.net. 172800 IN A 193.232.142.17 016503646E73047269706E036E657400001C00010002A300001020010678001500000193023201420017 e.dns.ripn.net. 172800 IN AAAA 2001:678:15:0:193:232:142:17 016603646E73047269706E036E657400000100010002A3000004C1E89C11 f.dns.ripn.net. 172800 IN A 193.232.156.17 016603646E73047269706E036E657400001C00010002A300001020010678001400000193023201560017 f.dns.ripn.net. 172800 IN AAAA 2001:678:14:0:193:232:156:17 01610C726F6F742D73657276657273036E657400000100010007E9000004C6290004 a.root-servers.net. 518400 IN A 198.41.0.4 01610C726F6F742D73657276657273036E657400001C00010007E900001020010503BA3E00000000000000020030 a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30 01620C726F6F742D73657276657273036E657400000100010007E9000004C0E44FC9 b.root-servers.net. 518400 IN A 192.228.79.201 01630C726F6F742D73657276657273036E657400000100010007E9000004C021040C c.root-servers.net. 518400 IN A 192.33.4.12 01640C726F6F742D73657276657273036E657400000100010007E9000004C7075B0D d.root-servers.net. 518400 IN A 199.7.91.13 01640C726F6F742D73657276657273036E657400001C00010007E900001020010500002D0000000000000000000D d.root-servers.net. 518400 IN AAAA 2001:500:2d::d 01650C726F6F742D73657276657273036E657400000100010007E9000004C0CBE60A e.root-servers.net. 518400 IN A 192.203.230.10 01660C726F6F742D73657276657273036E657400000100010007E9000004C00505F1 f.root-servers.net. 518400 IN A 192.5.5.241 01660C726F6F742D73657276657273036E657400001C00010007E900001020010500002F0000000000000000000F f.root-servers.net. 518400 IN AAAA 2001:500:2f::f 01670C726F6F742D73657276657273036E657400000100010007E9000004C0702404 g.root-servers.net. 518400 IN A 192.112.36.4 01680C726F6F742D73657276657273036E657400000100010007E9000004803F0235 h.root-servers.net. 518400 IN A 128.63.2.53 01680C726F6F742D73657276657273036E657400001C00010007E9000010200105000001000000000000803F0235 h.root-servers.net. 518400 IN AAAA 2001:500:1::803f:235 01690C726F6F742D73657276657273036E657400000100010007E9000004C0249411 i.root-servers.net. 518400 IN A 192.36.148.17 01690C726F6F742D73657276657273036E657400001C00010007E9000010200107FE000000000000000000000053 i.root-servers.net. 518400 IN AAAA 2001:7fe::53 016A0C726F6F742D73657276657273036E657400000100010007E9000004C03A801E j.root-servers.net. 518400 IN A 192.58.128.30 016A0C726F6F742D73657276657273036E657400001C00010007E9000010200105030C2700000000000000020030 j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30 016B0C726F6F742D73657276657273036E657400000100010007E9000004C1000E81 k.root-servers.net. 518400 IN A 193.0.14.129 016B0C726F6F742D73657276657273036E657400001C00010007E9000010200107FD000000000000000000000001 k.root-servers.net. 518400 IN AAAA 2001:7fd::1 016C0C726F6F742D73657276657273036E657400000100010007E9000004C707532A l.root-servers.net. 518400 IN A 199.7.83.42 016C0C726F6F742D73657276657273036E657400001C00010007E900001020010500000300000000000000000042 l.root-servers.net. 518400 IN AAAA 2001:500:3::42 016D0C726F6F742D73657276657273036E657400000100010007E9000004CA0C1B21 m.root-servers.net. 518400 IN A 202.12.27.33 016D0C726F6F742D73657276657273036E657400001C00010007E900001020010DC3000000000000000000000035 m.root-servers.net. 518400 IN AAAA 2001:dc3::35 0569677562750473616978036E657400000100010002A3000004C4190101 igubu.saix.net. 172800 IN A 196.25.1.1 06736162656C610473616978036E657400000100010002A3000004C42B0109 sabela.saix.net. 172800 IN A 196.43.1.9 046E73303206736176766973036E657400000100010002A3000004CC4639F2 ns02.savvis.net. 172800 IN A 204.70.57.242 036E7331027372036E657400000100010002A3000004C8019F94 ns1.sr.net. 172800 IN A 200.1.159.148 036E7332027372036E657400000100010002A3000004C802A21E ns2.sr.net. 172800 IN A 200.2.162.30 026E730574686E6963036E657400000100010002A3000004CA1C0001 ns.thnic.net. 172800 IN A 202.28.0.1 026E730574776E6963036E657400000100010002A3000004C053A60B ns.twnic.net. 172800 IN A 192.83.166.11 026E730574776E6963036E657400001C00010002A300001020010288000110060000000000000011 ns.twnic.net. 172800 IN AAAA 2001:288:1:1006::11 04646E73320A752D7265676973747279036E657400000100010002A3000004C37B0107 dns2.u-registry.net. 172800 IN A 195.123.1.7 04646E73320A752D7265676973747279036E657400001C00010002A30000102A020128000200000000000000000005 dns2.u-registry.net. 172800 IN AAAA 2a02:128:2::5 036E73690575616E6963036E657400000100010002A3000004D40142F7 nsi.uanic.net. 172800 IN A 212.1.66.247 04746C643108756C747261646E73036E657400000100010002A3000004CC4A7001 tld1.ultradns.net. 172800 IN A 204.74.112.1 04746C643108756C747261646E73036E657400001C00010002A300001020010502D39900000000000000000001 tld1.ultradns.net. 172800 IN AAAA 2001:502:d399::1 04746C643208756C747261646E73036E657400000100010002A3000004CC4A7101 tld2.ultradns.net. 172800 IN A 204.74.113.1 0161026E730B756E697265676973747279036E657400000100010002A300000448347EA6 a.ns.uniregistry.net. 172800 IN A 72.52.126.166 0161026E730B756E697265676973747279036E657400001C00010002A30000102001047000A400100000000000000166 a.ns.uniregistry.net. 172800 IN AAAA 2001:470:a4:10::166 026E73027575036E657400000100010002A300000489270103 ns.uu.net. 172800 IN A 137.39.1.3 06617574683030026E73027575036E657400000100010002A3000004C6060141 auth00.ns.uu.net. 172800 IN A 198.6.1.65 06617574683030026E73027575036E657400001C00010002A300001026000803040800020000000000000010 auth00.ns.uu.net. 172800 IN AAAA 2600:803:408:2::10 06617574683032026E73027575036E657400000100010002A3000004C6060152 auth02.ns.uu.net. 172800 IN A 198.6.1.82 06617574683033026E73027575036E657400000100010002A3000004C6060153 auth03.ns.uu.net. 172800 IN A 198.6.1.83 0761757468313030026E73027575036E657400000100010002A3000004C60601CA auth100.ns.uu.net. 172800 IN A 198.6.1.202 0761757468313130026E73027575036E657400000100010002A3000004C6060172 auth110.ns.uu.net. 172800 IN A 198.6.1.114 0761757468323030026E73027575036E657400000100010002A3000004C3810C52 auth200.ns.uu.net. 172800 IN A 195.129.12.82 0761757468323030026E73027575036E657400001C00010002A30000102001060001C0E0000000000000350002 auth200.ns.uu.net. 172800 IN AAAA 2001:600:1c0:e000::35:2 0761757468323130026E73027575036E657400000100010002A3000004C3810C4A auth210.ns.uu.net. 172800 IN A 195.129.12.74 0761757468323130026E73027575036E657400001C00010002A30000102001060001C0E0010000000000350002 auth210.ns.uu.net. 172800 IN AAAA 2001:600:1c0:e001::35:2 06617574683631026E73027575036E657400000100010002A3000004C60601B6 auth61.ns.uu.net. 172800 IN A 198.6.1.182 026E6600000200010002A3000013026E7307616E7963617374036E6963026E6600 nf. 172800 IN NS ns.anycast.nic.nf. 026E6600000200010002A3000010036E66310664796E746C64036E657400 nf. 172800 IN NS nf1.dyntld.net. 026E6600000200010002A3000010036E66330664796E746C64036E657400 nf. 172800 IN NS nf3.dyntld.net. 026E6600000200010002A300001006736E732D706203697363036F726700 nf. 172800 IN NS sns-pb.isc.org. 026E6600002B0001000151800024D3DC0802DD87DD324E8360DEC8DAAF2DB771B8C52024D6CEFEB76F2B855E0FC3B8FDB7D7 nf. 86400 IN DS 54236 8 2 DD87DD324E8360DEC8DAAF2DB771B8C52024D6CEFEB76F2B855E0FC3B8FDB7D7 026E6600002E0001000151800093002B08010001518052F4220052EAD970837700890B6499743F929DDA55CD440AC58520746203E4E535355AD2C9D1191CC7F7770CD65633B219D0D512C57B63A2A6E7A60970185C1A6BCFB4F7BD76E4EC3DD7C244F8B0A7B9D2A243DEAB45977416EE119C6AE8730FDB21B8BB585C0F4D0980D26B49D6DD4DAAA82DD283CBEFF2D3EE0B4DEA7B6D3C685CC9BC58EF0FC8B5924E nf. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iQtkmXQ/kp3aVc1ECsWFIHRiA+TlNTVa0snRGRzH93cM1lYzshnQ1RLFe2OipuemCXAYXBprz7T3vXbk7D3XwkT4sKe50qJD3qtFl3QW7hGcauhzD9shuLtYXA9NCYDSa0nW3U2qqC3Sg8vv8tPuC03qe208aFzJvFjvD8i1kk4= ;{id = 33655} 026E6600002E0001000151800093002F08010001518052F4220052EAD9708377004630AAEFF5B3FC210B140EA3CFBAAE043CDCDE8BFBEEC5ECEF2144010981A17EA3AC1531224F5FEFAAE27F005067CAEA0C5D341E549664FEA0F8D60B1D92CC2EE1A2F9142E901AFE5EEAC107FBB0609273F92AA450DB127E0C698EC5849873645D47713A426050996AB9391F3F99E8AE18F842BFE65F6E4EB1068C7B33300DCD nf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RjCq7/Wz/CELFA6jz7quBDzc3ov77sXs7yFEAQmBoX6jrBUxIk9f76rifwBQZ8rqDF00HlSWZP6g+NYLHZLMLuGi+RQukBr+XurBB/uwYJJz+SqkUNsSfgxpjsWEmHNkXUdxOkJgUJlquTkfP5norhj4Qr/mX25OsQaMezMwDc0= ;{id = 33655} 026E6600002F000100015180000C026E67000006200000000013 nf. 86400 IN NSEC ng. NS DS RRSIG NSEC 026E7307616E7963617374036E6963026E6600000100010002A3000004CC3DD833 ns.anycast.nic.nf. 172800 IN A 204.61.216.51 026E7307616E7963617374036E6963026E6600001C00010002A3000010200105000014605100AD000000000001 ns.anycast.nic.nf. 172800 IN AAAA 2001:500:14:6051:ad::1 026E6700000200010002A3000010036E7331036E6963036E6574026E6700 ng. 172800 IN NS ns1.nic.net.ng. 026E6700000200010002A3000010036E7332036E6963036E6574026E6700 ng. 172800 IN NS ns2.nic.net.ng. 026E6700000200010002A3000010036E7333036E6963036E6574026E6700 ng. 172800 IN NS ns3.nic.net.ng. 026E6700000200010002A3000010036E7334036E6963036E6574026E6700 ng. 172800 IN NS ns4.nic.net.ng. 026E6700000200010002A3000010036E7361036E6963036E6574026E6700 ng. 172800 IN NS nsa.nic.net.ng. 026E6700002F000100015180000C026E69000006200000000003 ng. 86400 IN NSEC ni. NS RRSIG NSEC 026E6700002E0001000151800093002F08010001518052F4220052EAD9708377001CCFB076499CA393662A5966BC58F2262B3DEAA37653386D120B4CA14FE1540835104C154AC1587B81DA4BC4607B6B37E5EB4DEFC3E0C75DDEDB90A3D4D0E270C648AE49666DD664E752B28E2CC800F991938DECB4DB6A9CD8EA038DF621FF7A16D846A80E0F1F8291D25072858C6862612EDD2E234358B22702A5A60CF9EB97 ng. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HM+wdkmco5NmKllmvFjyJis96qN2UzhtEgtMoU/hVAg1EEwVSsFYe4HaS8Rge2s35etN78Pgx13e25Cj1NDicMZIrklmbdZk51KyjizIAPmRk43stNtqnNjqA432If96FthGqA4PH4KR0lByhYxoYmEu3S4jQ1iyJwKlpgz565c= ;{id = 33655} 036E7331036E6963036E6574026E6700000100010002A3000004C200011D ns1.nic.net.ng. 172800 IN A 194.0.1.29 036E7331036E6963036E6574026E6700001C00010002A30000102001067800040000000000000000001D ns1.nic.net.ng. 172800 IN AAAA 2001:678:4::1d 036E7332036E6963036E6574026E6700000100010002A3000004CC3DD828 ns2.nic.net.ng. 172800 IN A 204.61.216.40 036E7333036E6963036E6574026E6700000100010002A3000004D04E465D ns3.nic.net.ng. 172800 IN A 208.78.70.93 036E7334036E6963036E6574026E6700000100010002A3000004CC0DFA5D ns4.nic.net.ng. 172800 IN A 204.13.250.93 036E7361036E6963036E6574026E6700000100010002A300000429DE4F03 nsa.nic.net.ng. 172800 IN A 41.222.79.3 026E6900000200010002A3000007026E7302637200 ni. 172800 IN NS ns.cr. 026E6900000200010002A3000007026E73026E6900 ni. 172800 IN NS ns.ni. 026E6900000200010002A300000B026E73027575036E657400 ni. 172800 IN NS ns.uu.net. 026E6900000200010002A300000F026E730369627703636F6D026E6900 ni. 172800 IN NS ns.ibw.com.ni. 026E6900000200010002A300000F026E7303746D7803636F6D026E6900 ni. 172800 IN NS ns.tmx.com.ni. 026E6900000200010002A3000011026E73056964656179036E6574026E6900 ni. 172800 IN NS ns.ideay.net.ni. 026E6900000200010002A3000008036E7332026E6900 ni. 172800 IN NS ns2.ni. 026E6900002F000100015180000F056E696E6A61000006200000000003 ni. 86400 IN NSEC ninja. NS RRSIG NSEC 026E6900002E0001000151800093002F08010001518052F4220052EAD9708377008E6B7B318164365DB3F21BC924C8FF50644586B0BC58BC23F10164159C0C3C304C120DE1268CB88EB13D25A7F7D68D4EA155091B7247FAB0FF5680245CCBECC8F027E1EB8A7F015FDF23219FA3CA0644196644668333F2B60C64A00B6F0182748ED961871745CE96E048CEC8EC704E4094F4A172CD0F116C40CBEF41DC83F33F ni. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jmt7MYFkNl2z8hvJJMj/UGRFhrC8WLwj8QFkFZwMPDBMEg3hJoy4jrE9Jaf31o1OoVUJG3JH+rD/VoAkXMvsyPAn4euKfwFf3yMhn6PKBkQZZkRmgzPytgxkoAtvAYJ0jtlhhxdFzpbgSM7I7HBOQJT0oXLNDxFsQMvvQdyD8z8= ;{id = 33655} 026E730369627703636F6D026E6900000100010002A3000004C855A002 ns.ibw.com.ni. 172800 IN A 200.85.160.2 026E7303746D7803636F6D026E6900000100010002A3000004C83E4001 ns.tmx.com.ni. 172800 IN A 200.62.64.1 026E73056964656179036E6574026E6900000100010002A3000004C809BE82 ns.ideay.net.ni. 172800 IN A 200.9.190.130 026E73026E6900000100010002A3000004A5620102 ns.ni. 172800 IN A 165.98.1.2 036E7332026E6900000100010002A3000004C809BB02 ns2.ni. 172800 IN A 200.9.187.2 056E696E6A6100000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 ninja. 172800 IN NS demand.beta.aridns.net.au. 056E696E6A6100000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 ninja. 172800 IN NS demand.alpha.aridns.net.au. 056E696E6A6100000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 ninja. 172800 IN NS demand.delta.aridns.net.au. 056E696E6A6100000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 ninja. 172800 IN NS demand.gamma.aridns.net.au. 056E696E6A6100002B0001000151800024D70508025E37FAE7300F5183057D2FAAD662FCCBEC710849DFED3D31E066E36232B1FE07 ninja. 86400 IN DS 55045 8 2 5E37FAE7300F5183057D2FAAD662FCCBEC710849DFED3D31E066E36232B1FE07 056E696E6A6100002E0001000151800093002B08010001518052F4220052EAD9708377005862D7A8EB81AF0860B5748CC4C383DA53F1A88EDF4518AD6A72B6FFB2C7B4C2B87E583C6CC8CB4D53FE3112F249CBA091ACD039FE85C244C0D81ABC97B7F15DCC6CD5117FC09027B8651AEB2EDCDF019AEFE3DFCFBC7371CC50E5B08DFFFB55F01330FC04D6873EB714E41E17A56D4CA2621065A96B0A5E3C8B91A81D2290EC ninja. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WGLXqOuBrwhgtXSMxMOD2lPxqI7fRRitanK2/7LHtMK4flg8bMjLTVP+MRLyScugkazQOf6FwkTA2Bq8l7fxXcxs1RF/wJAnuGUa6y7c3wGa7+Pfz7xzccxQ5bCN//tV8BMw/ATWhz63FOQeF6VtTKJiEGWpawpePIuRqB0ikOw= ;{id = 33655} 056E696E6A6100002E0001000151800093002F08010001518052F4220052EAD97083770018AB753D1DF8AFFA371EC158EDE50209BB62D6F973BDC309A1531F241AEC11A85CAFB78E7FE7CFD824F953C99E9AAD95C4C374E766540AAC27FE19795A09D664AF3F233EDEEE638D288C0F333EE22F999CF3908C2987B793B183006C395E503DD6868B0E8DE12EB4A54E2820ADB22F6611B074B76F59C5BC44F0DA1E6FCD2036 ninja. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GKt1PR34r/o3HsFY7eUCCbti1vlzvcMJoVMfJBrsEahcr7eOf+fP2CT5U8memq2VxMN052ZUCqwn/hl5WgnWZK8/Iz7e7mONKIwPMz7iL5mc85CMKYe3k7GDAGw5XlA91oaLDo3hLrSlTiggrbIvZhGwdLdvWcW8RPDaHm/NIDY= ;{id = 33655} 056E696E6A6100002F000100015180000C026E6C000006200000000013 ninja. 86400 IN NSEC nl. NS DS RRSIG NSEC 026E6C00002F000100015180000C026E6F000006200000000013 nl. 86400 IN NSEC no. NS DS RRSIG NSEC 026E6C00002E0001000151800093002F08010001518052F4220052EAD9708377009EA48CC0DEA769616316C5B97DF255C95E4E3FCC8C48D64EA9FE1FEBAE252F93B1420564B6AF46A9B40A91765D0C5857F5718E10338E3FCE00F5EBE6751A620587244236BC5E5D165C811312BE029B6CA2E032B2364EDDFE49B00D2A891CE66464F45CDF22E9F6D61F2A350088CE0FFDACF3721768BF6CCD3A8E26868DCB2A19 nl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nqSMwN6naWFjFsW5ffJVyV5OP8yMSNZOqf4f664lL5OxQgVktq9GqbQKkXZdDFhX9XGOEDOOP84A9evmdRpiBYckQja8Xl0WXIETEr4Cm2yi4DKyNk7d/kmwDSqJHOZkZPRc3yLp9tYfKjUAiM4P/azzchdov2zNOo4mho3LKhk= ;{id = 33655} 026E6C00002E0001000151800093002B08010001518052F4220052EAD970837700A31C1D0B9CBA230BAB52AEE61CE9C8A7B45EEDFDB35AD9BCB8D4756132B094AC3443CE097F08B931AA355B9A968DE33F3C576A1661236A8DE9E761BDA44102A96684086A3983A21589952A9C78E4845C9E5B7D40B4C7254574A014E97D19D0F0AD59600DA4E0BEC38D2739FE7057EF818F507CAB09FCA1EE292CB09E5BAE7E40 nl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oxwdC5y6IwurUq7mHOnIp7Re7f2zWtm8uNR1YTKwlKw0Q84Jfwi5Mao1W5qWjeM/PFdqFmEjao3p52G9pEECqWaECGo5g6IViZUqnHjkhFyeW31AtMclRXSgFOl9GdDwrVlgDaTgvsONJzn+cFfvgY9QfKsJ/KHuKSywnluufkA= ;{id = 33655} 026E6C00000200010002A3000011036E6C3107646E736E6F6465036E657400 nl. 172800 IN NS nl1.dnsnode.net. 026E6C00000200010002A300000C036E733103646E73026E6C00 nl. 172800 IN NS ns1.dns.nl. 026E6C00000200010002A300000C036E733203646E73026E6C00 nl. 172800 IN NS ns2.dns.nl. 026E6C00000200010002A300000C036E733303646E73026E6C00 nl. 172800 IN NS ns3.dns.nl. 026E6C00000200010002A300000C036E733403646E73026E6C00 nl. 172800 IN NS ns4.dns.nl. 026E6C00000200010002A300000C036E733503646E73026E6C00 nl. 172800 IN NS ns5.dns.nl. 026E6C00000200010002A300000E056E732D6E6C036E696302667200 nl. 172800 IN NS ns-nl.nic.fr. 026E6C00000200010002A300001006736E732D706203697363036F726700 nl. 172800 IN NS sns-pb.isc.org. 026E6C00002B000100015180002453720802881D17ECCD7FD67F1086247611CCB7FB8646E82D0074AA91E980B016FD3EDE98 nl. 86400 IN DS 21362 8 2 881D17ECCD7FD67F1086247611CCB7FB8646E82D0074AA91E980B016FD3EDE98 036E733103646E73026E6C00000100010002A3000004C1B09005 ns1.dns.nl. 172800 IN A 193.176.144.5 036E733103646E73026E6C00001C00010002A30000102A000D78000001020193017601440005 ns1.dns.nl. 172800 IN AAAA 2a00:d78:0:102:193:176:144:5 036E733203646E73026E6C00000100010002A3000004D59AF155 ns2.dns.nl. 172800 IN A 213.154.241.85 036E733203646E73026E6C00001C00010002A3000010200107B8060600000000000000000085 ns2.dns.nl. 172800 IN AAAA 2001:7b8:606::85 036E733303646E73026E6C00000100010002A3000004C2AB110A ns3.dns.nl. 172800 IN A 194.171.17.10 036E733303646E73026E6C00001C00010002A3000010200106100000800D0000000000000010 ns3.dns.nl. 172800 IN AAAA 2001:610:0:800d::10 036E733403646E73026E6C00000100010002A30000045F8E63D4 ns4.dns.nl. 172800 IN A 95.142.99.212 036E733403646E73026E6C00001C00010002A30000102A001188000500000000000000000212 ns4.dns.nl. 172800 IN AAAA 2a00:1188:5::212 036E733503646E73026E6C00000100010002A3000004C2001C35 ns5.dns.nl. 172800 IN A 194.0.28.53 036E733503646E73026E6C00001C00010002A300001020010678002C00000194000000280053 ns5.dns.nl. 172800 IN AAAA 2001:678:2c:0:194:0:28:53 056E732D7074096E6C6E65746C616273026E6C00000100010002A3000004D59AE08D ns-pt.nlnetlabs.nl. 172800 IN A 213.154.224.141 056E732D7074096E6C6E65746C616273026E6C00001C00010002A3000010200107B8020600010000000000040141 ns-pt.nlnetlabs.nl. 172800 IN AAAA 2001:7b8:206:1::4:141 0A6E732D61772D65787431047369646E026E6C00000100010002A3000004C1B09017 ns-aw-ext1.sidn.nl. 172800 IN A 193.176.144.23 0A6E732D61772D65787431047369646E026E6C00001C00010002A30000102A000D78000001020193017601440023 ns-aw-ext1.sidn.nl. 172800 IN AAAA 2a00:d78:0:102:193:176:144:23 026E6F00002F000100015180000C026E70000006200000000003 no. 86400 IN NSEC np. NS RRSIG NSEC 026E6F00002E0001000151800093002F08010001518052F4220052EAD970837700B431154E6D422953469CBE61598C51287B455FDF97ABB6FCC6CB3CCB05C6A4E9BF90642AC41E101104A52AADD33C3382FC3B3C9A0DCC5F58C1967AE674ECCB4DCA4CDB6006B406B397B1ABC21FABE970B707D584ECC1F97A66E1B9F5EE48D90C2813BDCF48039C669E6A552D3A5E28EB6C4C6B08A950CE55F21C4D2E536AF5AB no. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tDEVTm1CKVNGnL5hWYxRKHtFX9+Xq7b8xss8ywXGpOm/kGQqxB4QEQSlKq3TPDOC/Ds8mg3MX1jBlnrmdOzLTcpM22AGtAazl7Grwh+r6XC3B9WE7MH5embhufXuSNkMKBO9z0gDnGaealUtOl4o62xMawipUM5V8hxNLlNq9as= ;{id = 33655} 026E6F00000200010002A300000A0169036E6963026E6F00 no. 172800 IN NS i.nic.no. 026E6F00000200010002A300000A0178036E6963026E6F00 no. 172800 IN NS x.nic.no. 026E6F00000200010002A300000A0179036E6963026E6F00 no. 172800 IN NS y.nic.no. 026E6F00000200010002A300000A017A036E6963026E6F00 no. 172800 IN NS z.nic.no. 026E6F00000200010002A300000E036E6F74056E6F726964026E6F00 no. 172800 IN NS not.norid.no. 026E6F00000200010002A300000F046E6A6574056E6F726964026E6F00 no. 172800 IN NS njet.norid.no. 036E6163026E6F00000100010002A300000480270216 nac.no. 172800 IN A 128.39.2.22 0169036E6963026E6F00000100010002A3000004C2926A06 i.nic.no. 172800 IN A 194.146.106.6 0178036E6963026E6F00000100010002A300000480270828 x.nic.no. 172800 IN A 128.39.8.40 0179036E6963026E6F00000100010002A3000004C14B0416 y.nic.no. 172800 IN A 193.75.4.22 0179036E6963026E6F00001C00010002A3000010200108C0820000010000000000000002 y.nic.no. 172800 IN AAAA 2001:8c0:8200:1::2 017A036E6963026E6F00000100010002A30000049E260885 z.nic.no. 172800 IN A 158.38.8.133 017A036E6963026E6F00001C00010002A3000010200107000000052D0158003800080133 z.nic.no. 172800 IN AAAA 2001:700:0:52d:158:38:8:133 046E6A6574056E6F726964026E6F00000100010002A30000049C9A650C njet.norid.no. 172800 IN A 156.154.101.12 036E6F74056E6F726964026E6F00000100010002A30000049C9A640C not.norid.no. 172800 IN A 156.154.100.12 036E6F74056E6F726964026E6F00001C00010002A300001020010502AD0900000000000000000012 not.norid.no. 172800 IN AAAA 2001:502:ad09::12 026E6E07756E696E657474026E6F00000100010002A30000049E2600B5 nn.uninett.no. 172800 IN A 158.38.0.181 026E7000000200010002A300001B026E70056363746C640761757468646E730472697065036E657400 np. 172800 IN NS np.cctld.authdns.ripe.net. 026E7000000200010002A300001004736563330561706E6963036E657400 np. 172800 IN NS sec3.apnic.net. 026E7000000200010002A3000013056E702D6E73046E706978036E6574026E7000 np. 172800 IN NS np-ns.npix.net.np. 026E7000000200010002A3000017056E702D6E7307616E796361737403706368036E657400 np. 172800 IN NS np-ns.anycast.pch.net. 026E7000000200010002A3000010066E732D65787403697363036F726700 np. 172800 IN NS ns-ext.isc.org. 026E7000000200010002A3000014077368696B686172036D6F7303636F6D026E7000 np. 172800 IN NS shikhar.mos.com.np. 026E7000000200010002A30000180779617272696E6107636F6E6E65637403636F6D02617500 np. 172800 IN NS yarrina.connect.com.au. 026E7000002F000100015180000C026E72000006200000000003 np. 86400 IN NSEC nr. NS RRSIG NSEC 026E7000002E0001000151800093002F08010001518052F4220052EAD9708377005FFB2EF4522DCD2A8C59A28500CC5A1FBE34310C9F19F1921F1BC809F8A2580A75A37C7D3061317F79CBDF10E28ACD61F8B630DA8C525FA9F5E050AF9EBA570C2AB9F0D2147E175D08E1A8F30A2BBAF1838C1D73D8CD49BCB3CE4A495876F0910F717962CD7EBE0765EE1280D35E251C5FBF749D5D1F1345E1D64D0F49755174 np. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . X/su9FItzSqMWaKFAMxaH740MQyfGfGSHxvICfiiWAp1o3x9MGExf3nL3xDiis1h+LYw2oxSX6n14FCvnrpXDCq58NIUfhddCOGo8woruvGDjB1z2M1JvLPOSklYdvCRD3F5Ys1+vgdl7hKA014lHF+/dJ1dHxNF4dZND0l1UXQ= ;{id = 33655} 077368696B686172036D6F7303636F6D026E7000000100010002A3000004CA34FF05 shikhar.mos.com.np. 172800 IN A 202.52.255.5 056E702D6E73046E706978036E6574026E7000000100010002A3000004C6207E32 np-ns.npix.net.np. 172800 IN A 198.32.126.50 026E7200000200010002A3000013036E7331036E657405726561636803636F6D00 nr. 172800 IN NS ns1.net.reach.com. 026E7200000200010002A300001404646E73310663656E706163036E6574026E7200 nr. 172800 IN NS dns1.cenpac.net.nr. 026E7200000200010002A3000015056E727765620663656E706163036E6574026E7200 nr. 172800 IN NS nrweb.cenpac.net.nr. 026E7200000200010002A300001006736E732D706203697363036F726700 nr. 172800 IN NS sns-pb.isc.org. 026E7200002F000100015180000C026E75000006200000000003 nr. 86400 IN NSEC nu. NS RRSIG NSEC 026E7200002E0001000151800093002F08010001518052F4220052EAD9708377008F77C798817EDD7AA1F68B21742940B93BC1D18A2E22695365F207B64E1159ECFB860A80E232C9984905D2DC41057E5AA23F018C7A87C94238E6182DB838920F9E192D74894D857A11D7E9F7695D8699BDE2662FE038040378323EC265AE1A863D1F7E8E124E387D600EDD3B59B70BDAD662DE5C831A91E645FF3F8494BBA5DC nr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . j3fHmIF+3Xqh9oshdClAuTvB0YouImlTZfIHtk4RWez7hgqA4jLJmEkF0txBBX5aoj8BjHqHyUI45hgtuDiSD54ZLXSJTYV6Edfp92ldhpm94mYv4DgEA3gyPsJlrhqGPR9+jhJOOH1gDt07WbcL2tZi3lyDGpHmRf8/hJS7pdw= ;{id = 33655} 04646E73310663656E706163036E6574026E7200000100010002A3000004CB62E109 dns1.cenpac.net.nr. 172800 IN A 203.98.225.9 056E727765620663656E706163036E6574026E7200000100010002A3000004CB62E042 nrweb.cenpac.net.nr. 172800 IN A 203.98.224.66 026E7500000200010002A300000A0161036E6963026E7500 nu. 172800 IN NS a.nic.nu. 026E7500000200010002A300000A0162036E6963026E7500 nu. 172800 IN NS b.nic.nu. 026E7500000200010002A300000A0163036E6963026E7500 nu. 172800 IN NS c.nic.nu. 026E7500002B00010001518000240D7D0702270AAD4FB6BC3AF95CB66B2F9C61F615D4510C5702B54899C26EE2E37DBCA6D8 nu. 86400 IN DS 3453 7 2 270AAD4FB6BC3AF95CB66B2F9C61F615D4510C5702B54899C26EE2E37DBCA6D8 026E7500002E0001000151800093002B08010001518052F4220052EAD9708377005340153192578B86C7331D9B0814B23FDC42877A22289E4CDE7711C06987CC2B0A89FB582E1DF6CBEEE9FAB95D2F3715D9DCF0EB422750D103B5C452135483E869ADD9D9A8577DFED652586CC53CBDEF48BD413E9F9178BF739E114EF4F07CC25183773B086440E74B135A3ACCC798704B6D4D72786F19968AB9C1F790082A67 nu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . U0AVMZJXi4bHMx2bCBSyP9xCh3oiKJ5M3ncRwGmHzCsKiftYLh32y+7p+rldLzcV2dzw60InUNEDtcRSE1SD6Gmt2dmoV33+1lJYbMU8ve9IvUE+n5F4v3OeEU708HzCUYN3OwhkQOdLE1o6zMeYcEttTXJ4bxmWirnB95AIKmc= ;{id = 33655} 026E7500002E0001000151800093002F08010001518052F4220052EAD9708377006B9D4BF8C9E4E9C743CB61A025B6E6D162DD98FFDDBB83F34B83F5E76786E67D209816128E995925F8F5B5DA672B5F09A78EE6B668BEB37ABFBBB99DB9949FCBEA3F3F049EB0310ABE36E2034E3F23C32D4A58C24435C132AF99A3153C22D0916D016D61DB8A4902B36CB4F2775AF7323D989145E588047C4F0770CCAD5EB66D nu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . a51L+Mnk6cdDy2GgJbbm0WLdmP/du4PzS4P152eG5n0gmBYSjplZJfj1tdpnK18Jp47mtmi+s3q/u7mduZSfy+o/PwSesDEKvjbiA04/I8MtSljCRDXBMq+ZoxU8ItCRbQFtYduKSQKzbLTyd1r3Mj2YkUXliAR8TwdwzK1etm0= ;{id = 33655} 026E7500002F000100015180000C026E7A000006200000000013 nu. 86400 IN NSEC nz. NS DS RRSIG NSEC 0161036E6963026E7500000100010002A3000004C2926A16 a.nic.nu. 172800 IN A 194.146.106.22 0161036E6963026E7500001C00010002A30000102001067C101000050000000000000053 a.nic.nu. 172800 IN AAAA 2001:67c:1010:5::53 0162036E6963026E7500000100010002A30000044116A401 b.nic.nu. 172800 IN A 65.22.164.1 0162036E6963026E7500001C00010002A30000102A018840001000000000000000000001 b.nic.nu. 172800 IN AAAA 2a01:8840:10::1 0163036E6963026E7500000100010002A3000004C024906B c.nic.nu. 172800 IN A 192.36.144.107 0163036E6963026E7500001C00010002A30000102A0103F0000003010000000000000053 c.nic.nu. 172800 IN AAAA 2a01:3f0:0:301::53 026E7A00002F000100015180000C026F6D000006200000000013 nz. 86400 IN NSEC om. NS DS RRSIG NSEC 026E7A00002E0001000151800093002F08010001518052F4220052EAD9708377006ACCA3672D64C2A9563101B77937EAB02661B76F297771C9F0CF3B9A3069CE6E944BFAE680C141222B40E8C0BD11093B26A573F1F590FF43BB80E99F1EF2731464E9C5294E1F200205B28810AAF0683E5FA4866C3D4B723185EADD23B1E09FCD897C51B23701B54044C2D94A2D12FD3962461B71E561B50DCC17B1F1F27E1AA3 nz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . asyjZy1kwqlWMQG3eTfqsCZht28pd3HJ8M87mjBpzm6US/rmgMFBIitA6MC9EQk7JqVz8fWQ/0O7gOmfHvJzFGTpxSlOHyACBbKIEKrwaD5fpIZsPUtyMYXq3SOx4J/NiXxRsjcBtUBEwtlKLRL9OWJGG3HlYbUNzBex8fJ+GqM= ;{id = 33655} 026E7A00002E0001000151800093002B08010001518052F4220052EAD970837700831B3EAAC829B58E0FFAC1EA478C483B8E7724DFAFB837BC9C7E0A455800244AED1661157FAE7F20F954CDBC2B46B0A859F93D5830ED599124850095056AEFCF11BCAFD6810F51719D9E90523AE54E7E09855284474C03A7D719A795CE1C05929B60A1B00C9E722A3F435942172B05A2E078173A1A8AA52A244161E8359ED1D1 nz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . gxs+qsgptY4P+sHqR4xIO453JN+vuDe8nH4KRVgAJErtFmEVf65/IPlUzbwrRrCoWfk9WDDtWZEkhQCVBWrvzxG8r9aBD1FxnZ6QUjrlTn4JhVKER0wDp9cZp5XOHAWSm2ChsAyecio/Q1lCFysFouB4FzoaiqUqJEFh6DWe0dE= ;{id = 33655} 026E7A00000200010002A3000010036E733103646E73036E6574026E7A00 nz. 172800 IN NS ns1.dns.net.nz. 026E7A00000200010002A3000010036E733203646E73036E6574026E7A00 nz. 172800 IN NS ns2.dns.net.nz. 026E7A00000200010002A3000010036E733303646E73036E6574026E7A00 nz. 172800 IN NS ns3.dns.net.nz. 026E7A00000200010002A3000010036E733403646E73036E6574026E7A00 nz. 172800 IN NS ns4.dns.net.nz. 026E7A00000200010002A3000010036E733503646E73036E6574026E7A00 nz. 172800 IN NS ns5.dns.net.nz. 026E7A00000200010002A3000010036E733603646E73036E6574026E7A00 nz. 172800 IN NS ns6.dns.net.nz. 026E7A00000200010002A3000010036E733703646E73036E6574026E7A00 nz. 172800 IN NS ns7.dns.net.nz. 026E7A00002B00010001518000184DB10801A67187009210FC3432B2136FE22A82BE5B20CBC4 nz. 86400 IN DS 19889 8 1 A67187009210FC3432B2136FE22A82BE5B20CBC4 026E7A00002B00010001518000244DB108026B4593378969D7077FD31443235A86F0226D3780382143919CF0FF2D62EB47D8 nz. 86400 IN DS 19889 8 2 6B4593378969D7077FD31443235A86F0226D3780382143919CF0FF2D62EB47D8 056369726361036D637303767577026163026E7A00000100010002A300000482C3050C circa.mcs.vuw.ac.nz. 172800 IN A 130.195.5.12 09646F776E7374616765036D637303767577026163026E7A00000100010002A300000482C3060A downstage.mcs.vuw.ac.nz. 172800 IN A 130.195.6.10 036E733103646E73036E6574026E7A00000100010002A3000004CA2EBE82 ns1.dns.net.nz. 172800 IN A 202.46.190.130 036E733103646E73036E6574026E7A00001C00010002A300001020010DCE200000020000000000000130 ns1.dns.net.nz. 172800 IN AAAA 2001:dce:2000:2::130 036E733203646E73036E6574026E7A00000100010002A3000004CA2EBB82 ns2.dns.net.nz. 172800 IN A 202.46.187.130 036E733203646E73036E6574026E7A00001C00010002A300001020010DCE700000020000000000000130 ns2.dns.net.nz. 172800 IN AAAA 2001:dce:7000:2::130 036E733303646E73036E6574026E7A00000100010002A3000004CA2EBC82 ns3.dns.net.nz. 172800 IN A 202.46.188.130 036E733403646E73036E6574026E7A00000100010002A3000004CA2EBD82 ns4.dns.net.nz. 172800 IN A 202.46.189.130 036E733503646E73036E6574026E7A00000100010002A30000049C9A640E ns5.dns.net.nz. 172800 IN A 156.154.100.14 036E733503646E73036E6574026E7A00001C00010002A300001020010502AD0900000000000000000014 ns5.dns.net.nz. 172800 IN AAAA 2001:502:ad09::14 036E733603646E73036E6574026E7A00000100010002A30000049C9A650E ns6.dns.net.nz. 172800 IN A 156.154.101.14 036E733603646E73036E6574026E7A00001C00010002A3000010200105022EDA00000000000000000014 ns6.dns.net.nz. 172800 IN AAAA 2001:502:2eda::14 036E733703646E73036E6574026E7A00000100010002A3000004C2926A36 ns7.dns.net.nz. 172800 IN A 194.146.106.54 036E733703646E73036E6574026E7A00001C00010002A30000102001067C101000130000000000000053 ns7.dns.net.nz. 172800 IN AAAA 2001:67c:1010:13::53 046E73393903646E73036E6574026E7A00000100010002A3000004CA2EBE83 ns99.dns.net.nz. 172800 IN A 202.46.190.131 046E73393903646E73036E6574026E7A00001C00010002A300001020010DCE200000020000000000000131 ns99.dns.net.nz. 172800 IN AAAA 2001:dce:2000:2::131 02697103646E7305636F636361036F7267026E7A00000100010002A3000004CB7754EB iq.dns.cocca.org.nz. 172800 IN A 203.119.84.235 026F6D00000200010002A3000011036E7331087265676973747279026F6D00 om. 172800 IN NS ns1.registry.om. 026F6D00000200010002A3000011036E7332087265676973747279026F6D00 om. 172800 IN NS ns2.registry.om. 026F6D00000200010002A300001A056363746C64046265746106617269646E73036E657402617500 om. 172800 IN NS cctld.beta.aridns.net.au. 026F6D00000200010002A300001B056363746C6405616C70686106617269646E73036E657402617500 om. 172800 IN NS cctld.alpha.aridns.net.au. 026F6D00000200010002A300001B056363746C640564656C746106617269646E73036E657402617500 om. 172800 IN NS cctld.delta.aridns.net.au. 026F6D00000200010002A300001B056363746C640567616D6D6106617269646E73036E657402617500 om. 172800 IN NS cctld.gamma.aridns.net.au. 026F6D00002F000100015180000D036F6E6C000006200000000003 om. 86400 IN NSEC onl. NS RRSIG NSEC 026F6D00002E0001000151800093002F08010001518052F4220052EAD970837700795D5498C44EA16F65E2C17F2E75DD4378991D4E7214E321F01136FEE89829D7AD3D8832B0320F8DAAEBFFAB584B2B3724481013C896A665127BBEB4928CFD1B031AA9252E5D5ADFD12078DFF6E2D8D3CABC6660C889BB6533A30A28D2D97306D2E62B05F97DB79D8042F71239485DE739C825EE5A2F6B24B68EFBBFD1787BFE om. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eV1UmMROoW9l4sF/LnXdQ3iZHU5yFOMh8BE2/uiYKdetPYgysDIPjarr/6tYSys3JEgQE8iWpmUSe760koz9GwMaqSUuXVrf0SB43/bi2NPKvGZgyIm7ZTOjCijS2XMG0uYrBfl9t52AQvcSOUhd5znIJe5aL2skto77v9F4e/4= ;{id = 33655} 036E7331087265676973747279026F6D00000100010002A3000004B91B5A65 ns1.registry.om. 172800 IN A 185.27.90.101 036E7332087265676973747279026F6D00000100010002A3000004B91B5B45 ns2.registry.om. 172800 IN A 185.27.91.69 036F6E6C00000200010002A300000C026130036E6963036F6E6C00 onl. 172800 IN NS a0.nic.onl. 036F6E6C00000200010002A300000C026132036E6963036F6E6C00 onl. 172800 IN NS a2.nic.onl. 036F6E6C00000200010002A300000C026230036E6963036F6E6C00 onl. 172800 IN NS b0.nic.onl. 036F6E6C00000200010002A300000C026330036E6963036F6E6C00 onl. 172800 IN NS c0.nic.onl. 036F6E6C00002B0001000151800018709E070143C8D1479E0457EAD6020024017FDEC8CCE2260D onl. 86400 IN DS 28830 7 1 43C8D1479E0457EAD6020024017FDEC8CCE2260D 036F6E6C00002B0001000151800024709E070218EB9FAA635692104783C62A7F6F51AA17365BB07689093A247183D39B88338D onl. 86400 IN DS 28830 7 2 18EB9FAA635692104783C62A7F6F51AA17365BB07689093A247183D39B88338D 036F6E6C00002E0001000151800093002B08010001518052F4220052EAD970837700A812E8E04FA72FAB745A9E929A9945E79B1DB2E51B367A1D18BE06E9046EB75070F1E266794553495ABC9C1A5E2F3C50E67B955173A5975BE3344352981F7BF6BFB99E45523E8491BDB76E8C8B5AE5254BABC7C295C60A31B3CE7C295AA0D391457612B10EF6BA0C71A6AB45A6898831DB91351EF66084187075A5F0326C0F03 onl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qBLo4E+nL6t0Wp6SmplF55sdsuUbNnodGL4G6QRut1Bw8eJmeUVTSVq8nBpeLzxQ5nuVUXOll1vjNENSmB979r+5nkVSPoSRvbdujIta5SVLq8fClcYKMbPOfClaoNORRXYSsQ72ugxxpqtFpomIMduRNR72YIQYcHWl8DJsDwM= ;{id = 33655} 036F6E6C00002E0001000151800093002F08010001518052F4220052EAD97083770054568FDD9E3CA1BA900C88FF4C5464F20C545F284AF51BDD44385DB16D4230767BCB900482149F776BB72AD55580DA15E00A8F33C607CC2EC6127A7A018BBD757C13EB45287C784615775A7F067F720D02491F5BE424AFBA3E396010AF75A7EFCE3789D6282FA956AD0A9E1E52D934E14077E2883028402BFAFAFCD18FFEAB0C onl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VFaP3Z48obqQDIj/TFRk8gxUXyhK9RvdRDhdsW1CMHZ7y5AEghSfd2u3KtVVgNoV4AqPM8YHzC7GEnp6AYu9dXwT60UofHhGFXdafwZ/cg0CSR9b5CSvuj45YBCvdafvzjeJ1igvqVatCp4eUtk04UB34ogwKEAr+vr80Y/+qww= ;{id = 33655} 036F6E6C00002F000100015180000D036F7267000006200000000013 onl. 86400 IN NSEC org. NS DS RRSIG NSEC 026130036E6963036F6E6C00000100010002A300000441168801 a0.nic.onl. 172800 IN A 65.22.136.1 026130036E6963036F6E6C00001C00010002A30000102A018840008600000000000000000001 a0.nic.onl. 172800 IN AAAA 2a01:8840:86::1 026132036E6963036F6E6C00000100010002A300000441168B01 a2.nic.onl. 172800 IN A 65.22.139.1 026132036E6963036F6E6C00001C00010002A30000102A018840008900000000000000000001 a2.nic.onl. 172800 IN AAAA 2a01:8840:89::1 026230036E6963036F6E6C00000100010002A300000441168901 b0.nic.onl. 172800 IN A 65.22.137.1 026230036E6963036F6E6C00001C00010002A30000102A018840008700000000000000000001 b0.nic.onl. 172800 IN AAAA 2a01:8840:87::1 026330036E6963036F6E6C00000100010002A300000441168A01 c0.nic.onl. 172800 IN A 65.22.138.1 026330036E6963036F6E6C00001C00010002A30000102A018840008800000000000000000001 c0.nic.onl. 172800 IN AAAA 2a01:8840:88::1 036F726700002F000100015180000C027061000006200000000013 org. 86400 IN NSEC pa. NS DS RRSIG NSEC 036F726700002E0001000151800093002F08010001518052F4220052EAD9708377000991CC74101363DC6D2558C34A7B47C4C8A3A4B3F612158FB4900CAA9925DCFE1BDC17CAD459000F89820E638D2F778726EFB6826D1F6C6D83467F043B91A710CA55AD30FA3526E9133F8BC519C0A8D7D70955C4E9FE7CF40DBAFAD3F6C25E45028F8F1653C810509557523445610378F1AE564BB0B422A06E67C1698B63EA4B org. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CZHMdBATY9xtJVjDSntHxMijpLP2EhWPtJAMqpkl3P4b3BfK1FkAD4mCDmONL3eHJu+2gm0fbG2DRn8EO5GnEMpVrTD6NSbpEz+LxRnAqNfXCVXE6f589A26+tP2wl5FAo+PFlPIEFCVV1I0RWEDePGuVkuwtCKgbmfBaYtj6ks= ;{id = 33655} 036F726700002E0001000151800093002B08010001518052F4220052EAD9708377008BB29E4204D0EB3D67258EB70EEE14D0EDA05183E2893CD2CBBE325B33FE5F22630BE14AC0F237B5E28F15C6B2BCCA7D1BD791D32F487D60584EED48CFB8D290A5942E4E544F35131AE53836E029A7C4938B415455154ED101F43E548FBB96E83EDF50E64FA73B0781FE5ED363E864871033B1B4EB3228577EF9E4CED4C46784 org. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . i7KeQgTQ6z1nJY63Du4U0O2gUYPiiTzSy74yWzP+XyJjC+FKwPI3teKPFcayvMp9G9eR0y9IfWBYTu1Iz7jSkKWULk5UTzUTGuU4NuApp8STi0FUVRVO0QH0PlSPu5boPt9Q5k+nOweB/l7TY+hkhxAzsbTrMihXfvnkztTEZ4Q= ;{id = 33655} 036F726700000200010002A3000019026130036F72670B6166696C6961732D6E737404696E666F00 org. 172800 IN NS a0.org.afilias-nst.info. 036F726700000200010002A3000019026132036F72670B6166696C6961732D6E737404696E666F00 org. 172800 IN NS a2.org.afilias-nst.info. 036F726700000200010002A3000018026230036F72670B6166696C6961732D6E7374036F726700 org. 172800 IN NS b0.org.afilias-nst.org. 036F726700000200010002A3000018026232036F72670B6166696C6961732D6E7374036F726700 org. 172800 IN NS b2.org.afilias-nst.org. 036F726700000200010002A3000019026330036F72670B6166696C6961732D6E737404696E666F00 org. 172800 IN NS c0.org.afilias-nst.info. 036F726700000200010002A3000018026430036F72670B6166696C6961732D6E7374036F726700 org. 172800 IN NS d0.org.afilias-nst.org. 036F726700002B000100015180001853760701E6C1716CFB6BDC84E84CE1AB5510DAC69173B5B2 org. 86400 IN DS 21366 7 1 E6C1716CFB6BDC84E84CE1AB5510DAC69173B5B2 036F726700002B00010001518000245376070296EEB2FFD9B00CD4694E78278B5EFDAB0A80446567B69F634DA078F0D90F01BA org. 86400 IN DS 21366 7 2 96EEB2FFD9B00CD4694E78278B5EFDAB0A80446567B69F634DA078F0D90F01BA 026230046165726F0B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3401 b0.aero.afilias-nst.org. 172800 IN A 199.254.52.1 026230046165726F0B6166696C6961732D6E7374036F726700001C00010002A300001020010500001E00000000000000000001 b0.aero.afilias-nst.org. 172800 IN AAAA 2001:500:1e::1 026232046165726F0B6166696C6961732D6E7374036F726700000100010002A3000004C7F97B01 b2.aero.afilias-nst.org. 172800 IN A 199.249.123.1 026232046165726F0B6166696C6961732D6E7374036F726700001C00010002A300001020010500004B00000000000000000001 b2.aero.afilias-nst.org. 172800 IN AAAA 2001:500:4b::1 026430046165726F0B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3601 d0.aero.afilias-nst.org. 172800 IN A 199.254.54.1 026430046165726F0B6166696C6961732D6E7374036F726700001C00010002A300001020010500002000000000000000000001 d0.aero.afilias-nst.org. 172800 IN AAAA 2001:500:20::1 02623204617369610B6166696C6961732D6E7374036F726700000100010002A3000004C7F97A01 b2.asia.afilias-nst.org. 172800 IN A 199.249.122.1 02623204617369610B6166696C6961732D6E7374036F726700001C00010002A300001020010500004A00000000000000000001 b2.asia.afilias-nst.org. 172800 IN AAAA 2001:500:4a::1 026230056363746C640B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3C01 b0.cctld.afilias-nst.org. 172800 IN A 199.254.60.1 026230056363746C640B6166696C6961732D6E7374036F726700001C00010002A300001020010500002600000000000000000001 b0.cctld.afilias-nst.org. 172800 IN AAAA 2001:500:26::1 026232056363746C640B6166696C6961732D6E7374036F726700000100010002A3000004C7F97C01 b2.cctld.afilias-nst.org. 172800 IN A 199.249.124.1 026232056363746C640B6166696C6961732D6E7374036F726700001C00010002A300001020010500004C00000000000000000001 b2.cctld.afilias-nst.org. 172800 IN AAAA 2001:500:4c::1 026430056363746C640B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3E01 d0.cctld.afilias-nst.org. 172800 IN A 199.254.62.1 026430056363746C640B6166696C6961732D6E7374036F726700001C00010002A300001020010500002800000000000000000001 d0.cctld.afilias-nst.org. 172800 IN AAAA 2001:500:28::1 02623002696E0B6166696C6961732D6E7374036F726700000100010002A3000004C7FD3801 b0.in.afilias-nst.org. 172800 IN A 199.253.56.1 02623002696E0B6166696C6961732D6E7374036F726700001C00010002A300001020010500005000000000000000000001 b0.in.afilias-nst.org. 172800 IN AAAA 2001:500:50::1 02623202696E0B6166696C6961732D6E7374036F726700000100010002A3000004C7F97D01 b2.in.afilias-nst.org. 172800 IN A 199.249.125.1 02623202696E0B6166696C6961732D6E7374036F726700001C00010002A300001020010500004D00000000000000000001 b2.in.afilias-nst.org. 172800 IN AAAA 2001:500:4d::1 02623004696E666F0B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3001 b0.info.afilias-nst.org. 172800 IN A 199.254.48.1 02623004696E666F0B6166696C6961732D6E7374036F726700001C00010002A300001020010500001A00000000000000000001 b0.info.afilias-nst.org. 172800 IN AAAA 2001:500:1a::1 02623204696E666F0B6166696C6961732D6E7374036F726700000100010002A3000004C7F97901 b2.info.afilias-nst.org. 172800 IN A 199.249.121.1 02623204696E666F0B6166696C6961732D6E7374036F726700001C00010002A300001020010500004900000000000000000001 b2.info.afilias-nst.org. 172800 IN AAAA 2001:500:49::1 02643004696E666F0B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3201 d0.info.afilias-nst.org. 172800 IN A 199.254.50.1 02643004696E666F0B6166696C6961732D6E7374036F726700001C00010002A300001020010500001C00000000000000000001 d0.info.afilias-nst.org. 172800 IN AAAA 2001:500:1c::1 026232026D650B6166696C6961732D6E7374036F726700000100010002A3000004C7F97F01 b2.me.afilias-nst.org. 172800 IN A 199.249.127.1 026232026D650B6166696C6961732D6E7374036F726700001C00010002A300001020010500004F00000000000000000001 b2.me.afilias-nst.org. 172800 IN AAAA 2001:500:4f::1 026230046D6F62690B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3801 b0.mobi.afilias-nst.org. 172800 IN A 199.254.56.1 026230046D6F62690B6166696C6961732D6E7374036F726700001C00010002A300001020010500002200000000000000000001 b0.mobi.afilias-nst.org. 172800 IN AAAA 2001:500:22::1 026232046D6F62690B6166696C6961732D6E7374036F726700000100010002A3000004C7F97E01 b2.mobi.afilias-nst.org. 172800 IN A 199.249.126.1 026232046D6F62690B6166696C6961732D6E7374036F726700001C00010002A300001020010500004E00000000000000000001 b2.mobi.afilias-nst.org. 172800 IN AAAA 2001:500:4e::1 026430046D6F62690B6166696C6961732D6E7374036F726700000100010002A3000004C7FE3A01 d0.mobi.afilias-nst.org. 172800 IN A 199.254.58.1 026430046D6F62690B6166696C6961732D6E7374036F726700001C00010002A300001020010500002400000000000000000001 d0.mobi.afilias-nst.org. 172800 IN AAAA 2001:500:24::1 026230036F72670B6166696C6961732D6E7374036F726700000100010002A3000004C7133601 b0.org.afilias-nst.org. 172800 IN A 199.19.54.1 026230036F72670B6166696C6961732D6E7374036F726700001C00010002A300001020010500000C00000000000000000001 b0.org.afilias-nst.org. 172800 IN AAAA 2001:500:c::1 026232036F72670B6166696C6961732D6E7374036F726700000100010002A3000004C7F97801 b2.org.afilias-nst.org. 172800 IN A 199.249.120.1 026232036F72670B6166696C6961732D6E7374036F726700001C00010002A300001020010500004800000000000000000001 b2.org.afilias-nst.org. 172800 IN AAAA 2001:500:48::1 026430036F72670B6166696C6961732D6E7374036F726700000100010002A3000004C7133901 d0.org.afilias-nst.org. 172800 IN A 199.19.57.1 026430036F72670B6166696C6961732D6E7374036F726700001C00010002A300001020010500000F00000000000000000001 d0.org.afilias-nst.org. 172800 IN AAAA 2001:500:f::1 02623004706F73740B6166696C6961732D6E7374036F726700000100010002A300000441160101 b0.post.afilias-nst.org. 172800 IN A 65.22.1.1 02623004706F73740B6166696C6961732D6E7374036F726700001C00010002A30000102A018840000100000000000000000001 b0.post.afilias-nst.org. 172800 IN AAAA 2a01:8840:1::1 02623204706F73740B6166696C6961732D6E7374036F726700000100010002A300000441160501 b2.post.afilias-nst.org. 172800 IN A 65.22.5.1 02623204706F73740B6166696C6961732D6E7374036F726700001C00010002A30000102A018840000500000000000000000001 b2.post.afilias-nst.org. 172800 IN AAAA 2a01:8840:5::1 02643004706F73740B6166696C6961732D6E7374036F726700000100010002A300000441160301 d0.post.afilias-nst.org. 172800 IN A 65.22.3.1 02643004706F73740B6166696C6961732D6E7374036F726700001C00010002A30000102A018840000300000000000000000001 d0.post.afilias-nst.org. 172800 IN AAAA 2a01:8840:3::1 0262300370726F0B6166696C6961732D6E7374036F726700000100010002A3000004C7B60101 b0.pro.afilias-nst.org. 172800 IN A 199.182.1.1 0262300370726F0B6166696C6961732D6E7374036F726700001C00010002A30000102001050000C100000000000000000001 b0.pro.afilias-nst.org. 172800 IN AAAA 2001:500:c1::1 0262320370726F0B6166696C6961732D6E7374036F726700000100010002A3000004C7B62801 b2.pro.afilias-nst.org. 172800 IN A 199.182.40.1 0262320370726F0B6166696C6961732D6E7374036F726700001C00010002A30000102001050000E100000000000000000001 b2.pro.afilias-nst.org. 172800 IN AAAA 2001:500:e1::1 0264300370726F0B6166696C6961732D6E7374036F726700000100010002A3000004C7B61101 d0.pro.afilias-nst.org. 172800 IN A 199.182.17.1 0264300370726F0B6166696C6961732D6E7374036F726700001C00010002A30000102001050000D100000000000000000001 d0.pro.afilias-nst.org. 172800 IN AAAA 2001:500:d1::1 026230037878780B6166696C6961732D6E7374036F726700000100010002A3000004C7739901 b0.xxx.afilias-nst.org. 172800 IN A 199.115.153.1 026230037878780B6166696C6961732D6E7374036F726700001C00010002A30000102001050000A100000000000000000001 b0.xxx.afilias-nst.org. 172800 IN AAAA 2001:500:a1::1 026232037878780B6166696C6961732D6E7374036F726700000100010002A3000004C7739D01 b2.xxx.afilias-nst.org. 172800 IN A 199.115.157.1 026232037878780B6166696C6961732D6E7374036F726700001C00010002A30000102001050000A500000000000000000001 b2.xxx.afilias-nst.org. 172800 IN AAAA 2001:500:a5::1 026430037878780B6166696C6961732D6E7374036F726700000100010002A3000004C7739B01 d0.xxx.afilias-nst.org. 172800 IN A 199.115.155.1 026430037878780B6166696C6961732D6E7374036F726700001C00010002A30000102001050000A300000000000000000001 d0.xxx.afilias-nst.org. 172800 IN AAAA 2001:500:a3::1 01620A63692D73657276657273036F726700000100010002A300000452678BDC b.ci-servers.org. 172800 IN A 82.103.139.220 01630A63692D73657276657273036F726700000100010002A3000004C2926A56 c.ci-servers.org. 172800 IN A 194.146.106.86 01630A63692D73657276657273036F726700001C00010002A30000102001067C101000220000000000000053 c.ci-servers.org. 172800 IN AAAA 2001:67c:1010:22::53 026E73056963616E6E036F726700000100010002A3000004C7048A35 ns.icann.org. 172800 IN A 199.4.138.53 026E73056963616E6E036F726700001C00010002A300001020010500008900000000000000000053 ns.icann.org. 172800 IN AAAA 2001:500:89::53 066E732D65787403697363036F726700000100010002A3000004CC98B840 ns-ext.isc.org. 172800 IN A 204.152.184.64 066E732D65787403697363036F726700001C00010002A3000010200104F8000000020000000000000013 ns-ext.isc.org. 172800 IN AAAA 2001:4f8:0:2::13 06736E732D706203697363036F726700000100010002A3000004C0050401 sns-pb.isc.org. 172800 IN A 192.5.4.1 06736E732D706203697363036F726700001C00010002A300001020010500002E00000000000000000001 sns-pb.isc.org. 172800 IN AAAA 2001:500:2e::1 03616D7306736E732D706203697363036F726700000100010002A3000004C706011E ams.sns-pb.isc.org. 172800 IN A 199.6.1.30 03616D7306736E732D706203697363036F726700001C00010002A300001020010500006000000000000000000030 ams.sns-pb.isc.org. 172800 IN AAAA 2001:500:60::30 047366626106736E732D706203697363036F726700000100010002A300000495144003 sfba.sns-pb.isc.org. 172800 IN A 149.20.64.3 047366626106736E732D706203697363036F726700001C00010002A3000010200104F8000000020000000000000019 sfba.sns-pb.isc.org. 172800 IN AAAA 2001:4f8:0:2::19 04746C643308756C747261646E73036F726700000100010002A3000004C7074201 tld3.ultradns.org. 172800 IN A 199.7.66.1 04746C643408756C747261646E73036F726700000100010002A3000004C7074301 tld4.ultradns.org. 172800 IN A 199.7.67.1 04746C643408756C747261646E73036F726700001C00010002A300001020010502100E00000000000000000001 tld4.ultradns.org. 172800 IN AAAA 2001:502:100e::1 02706100000200010002A3000007026E7302637200 pa. 172800 IN NS ns.cr. 02706100000200010002A3000007026E7302706100 pa. 172800 IN NS ns.pa. 02706100000200010002A300000B026E7303646E7302627200 pa. 172800 IN NS ns.dns.br. 02706100000200010002A300000B026E73036E696302706100 pa. 172800 IN NS ns.nic.pa. 02706100000200010002A3000008036E733202706100 pa. 172800 IN NS ns2.pa. 02706100000200010002A300000F066E732D657874036E696302636C00 pa. 172800 IN NS ns-ext.nic.cl. 02706100000200010002A300001006736E732D706203697363036F726700 pa. 172800 IN NS sns-pb.isc.org. 02706100002F000100015180000C027065000006200000000003 pa. 86400 IN NSEC pe. NS RRSIG NSEC 02706100002E0001000151800093002F08010001518052F4220052EAD9708377005F9F48914186B1960493B5CF47DFB394E59E4E0C5627E84AF45D621AF6C47786AA16332E06817AE47547A231F111E684FB1DA2852D37D9A39AEC208D130D3F4253FC998156EE7EA1C9A93F4D5A1234595CE7E31D9F30779D77C4BAB7E1AB4AE16BC26E7C9B2169E79DC9C19048FF215E40F371371B0CDBD672907C2DCE7993AD pa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . X59IkUGGsZYEk7XPR9+zlOWeTgxWJ+hK9F1iGvbEd4aqFjMuBoF65HVHojHxEeaE+x2ihS032aOa7CCNEw0/QlP8mYFW7n6hyak/TVoSNFlc5+MdnzB3nXfEurfhq0rha8JufJshaeedycGQSP8hXkDzcTcbDNvWcpB8Lc55k60= ;{id = 33655} 026E73036E696302706100000100010002A3000004A84D0804 ns.nic.pa. 172800 IN A 168.77.8.4 026E7302706100000100010002A3000004A84D0802 ns.pa. 172800 IN A 168.77.8.2 036E733202706100000100010002A3000004A84D0807 ns2.pa. 172800 IN A 168.77.8.7 02706500000200010002A300000C037063680372637002706500 pe. 172800 IN NS pch.rcp.pe. 02706500000200010002A30000110370653107646E736E6F6465036E657400 pe. 172800 IN NS pe1.dnsnode.net. 02706500000200010002A300001205717569707503726370036E657402706500 pe. 172800 IN NS quipu.rcp.net.pe. 02706500000200010002A300001006736E732D706203697363036F726700 pe. 172800 IN NS sns-pb.isc.org. 02706500002B00010001518000241F2D08027C4B12C0D916694718131C7B7607561393FB86E2A3159CE7A74EA9E29AFB26F3 pe. 86400 IN DS 7981 8 2 7C4B12C0D916694718131C7B7607561393FB86E2A3159CE7A74EA9E29AFB26F3 02706500002E0001000151800093002B08010001518052F4220052EAD970837700B3D6C7E5A356E0F66786C7D68C959367D15557B0E53A81FC1558BE7D1B77D5F3FB5816A7243BF687FD87770A3CF02634DBEBEA9C7F95260B126839F29005E7376D678F674BBA93A73F39E0B28271CF5C6D89E5FD621BF148F6D7D27EDE47F72B339E45AB46F16C6A4AEDB8FD0A78CEE822EF3BBB78989E4ED3AEC374A5919D53 pe. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . s9bH5aNW4PZnhsfWjJWTZ9FVV7DlOoH8FVi+fRt31fP7WBanJDv2h/2Hdwo88CY02+vqnH+VJgsSaDnykAXnN21nj2dLupOnPzngsoJxz1xtieX9YhvxSPbX0n7eR/crM55Fq0bxbGpK7bj9CnjO6CLvO7t4mJ5O067DdKWRnVM= ;{id = 33655} 02706500002E0001000151800093002F08010001518052F4220052EAD97083770070CB9E72211101CED0A10C940C137703663C6F97A57901034C86AC2E6599AF46A8D8DC3FB0C87E40CE504AF2CE78A05E5A787BFFE9EEC7392DB722CD3511C0CBB92E6EA7382B15E2A009BA23A346CD397B127B25F946EAFF845B31B3F2640A6EFACAFBFB1966DA3F60B23A62E95D2DA7FCF7A1CC1BD88155181DB323A66A7BDA pe. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cMueciERAc7QoQyUDBN3A2Y8b5eleQEDTIasLmWZr0ao2Nw/sMh+QM5QSvLOeKBeWnh7/+nuxzkttyLNNRHAy7kubqc4KxXioAm6I6NGzTl7Ensl+Ubq/4RbMbPyZApu+sr7+xlm2j9gsjpi6V0tp/z3ocwb2IFVGB2zI6Zqe9o= ;{id = 33655} 02706500002F000100015180000C027066000006200000000013 pe. 86400 IN NSEC pf. NS DS RRSIG NSEC 05717569707503726370036E657402706500000100010002A3000004C801B004 quipu.rcp.net.pe. 172800 IN A 200.1.176.4 037063680372637002706500000100010002A3000004CC3DD855 pch.rcp.pe. 172800 IN A 204.61.216.85 037063680372637002706500001C00010002A3000010200105000014608500AD000000000001 pch.rcp.pe. 172800 IN AAAA 2001:500:14:6085:ad::1 02706600000200010002A300000D036E7331046D616E6102706600 pf. 172800 IN NS ns1.mana.pf. 02706600000200010002A300000D036E7332046D616E6102706600 pf. 172800 IN NS ns2.mana.pf. 02706600002F000100015180000C027067000006200000000003 pf. 86400 IN NSEC pg. NS RRSIG NSEC 02706600002E0001000151800093002F08010001518052F4220052EAD9708377008EEB4C729FA9A7BDD079A9ECDAAA063812CF2D494A9ECE2A31FAAD14602583B5A6CA1692156C2E6F9D846298EE9CBA1EF49AD4AB2D8C628877A2AC929457D4A0C63274D2D45E69D16C15F6FA1F0C76AD66AD934769FC47C4167778B163FE8D8B203CB327CFBA2A78488C3586EFBC666B40BE7C123EC767129A4A3818244A30D7 pf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jutMcp+pp73Qeans2qoGOBLPLUlKns4qMfqtFGAlg7WmyhaSFWwub52EYpjunLoe9JrUqy2MYoh3oqySlFfUoMYydNLUXmnRbBX2+h8Mdq1mrZNHafxHxBZ3eLFj/o2LIDyzJ8+6KnhIjDWG77xma0C+fBI+x2cSmko4GCRKMNc= ;{id = 33655} 036E7331046D616E6102706600000100010002A3000004CA03E10A ns1.mana.pf. 172800 IN A 202.3.225.10 036E7332046D616E6102706600000100010002A3000004CA03E114 ns2.mana.pf. 172800 IN A 202.3.225.20 02706700000200010002A300000B026E73027575036E657400 pg. 172800 IN NS ns.uu.net. 02706700000200010002A3000012036E7331057469617265036E657402706700 pg. 172800 IN NS ns1.tiare.net.pg. 02706700000200010002A3000013036E733107756E697465636802616302706700 pg. 172800 IN NS ns1.unitech.ac.pg. 02706700000200010002A3000012036E7332057469617265036E657402706700 pg. 172800 IN NS ns2.tiare.net.pg. 02706700000200010002A300000F076D756E6E617269026F7A02617500 pg. 172800 IN NS munnari.oz.au. 02706700002F000100015180000C027068000006200000000003 pg. 86400 IN NSEC ph. NS RRSIG NSEC 02706700002E0001000151800093002F08010001518052F4220052EAD9708377001E7C16D87992FB3189EF131565049A00902FA94A93424E8869E6B417450EFD7FEBB0C59642231A0A451A2CDD4F670A4FFDDEF48CA3284F38BD3D095D000C4A5E1D67A4F75782D35989238CE85E173671D480AB62BB3380BE70AC06B23DD51A18C3A9DADDBB546900BCC22D09E51A41FA50EE271EBBD67FEFB002B025A474132A pg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HnwW2HmS+zGJ7xMVZQSaAJAvqUqTQk6Iaea0F0UO/X/rsMWWQiMaCkUaLN1PZwpP/d70jKMoTzi9PQldAAxKXh1npPdXgtNZiSOM6F4XNnHUgKtiuzOAvnCsBrI91RoYw6na3btUaQC8wi0J5RpB+lDuJx671n/vsAKwJaR0Eyo= ;{id = 33655} 036E733107756E697465636802616302706700000100010002A3000004CA012031 ns1.unitech.ac.pg. 172800 IN A 202.1.32.49 036E7331057469617265036E657402706700000100010002A3000004CAA5C017 ns1.tiare.net.pg. 172800 IN A 202.165.192.23 036E7332057469617265036E657402706700000100010002A3000004CAA5C018 ns2.tiare.net.pg. 172800 IN A 202.165.192.24 02706800000200010002A300001B027068056363746C640761757468646E730472697065036E657400 ph. 172800 IN NS ph.cctld.authdns.ripe.net. 02706800000200010002A30000150270680C636F6D6D756E697479646E73036E657400 ph. 172800 IN NS ph.communitydns.net. 02706800000200010002A3000011036E7332046375686B0365647502686B00 ph. 172800 IN NS ns2.cuhk.edu.hk. 02706800000200010002A300001004736563340561706E6963036E657400 ph. 172800 IN NS sec4.apnic.net. 02706800000200010002A300001006736E732D706203697363036F726700 ph. 172800 IN NS sns-pb.isc.org. 02706800002F000100015180000F0570686F746F000006200000000003 ph. 86400 IN NSEC photo. NS RRSIG NSEC 02706800002E0001000151800093002F08010001518052F4220052EAD9708377005EBD94AE5295F21013658236F16F80EEF182C6412F304DD578AE8B59AFF76C9556219927A7817E9E8A42910B25E3360F3D8FE274ABD50756B9973FAACA1439E2D151418570515AC1431CBDB2C749C2D4A862D9561001B0FB2304EEFF9B81E2B018F3C65F199DAD3026BCB1838AD4C93848C33A04800262243FE1272269A5FE83 ph. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Xr2UrlKV8hATZYI28W+A7vGCxkEvME3VeK6LWa/3bJVWIZknp4F+nopCkQsl4zYPPY/idKvVB1a5lz+qyhQ54tFRQYVwUVrBQxy9ssdJwtSoYtlWEAGw+yME7v+bgeKwGPPGXxmdrTAmvLGDitTJOEjDOgSAAmIkP+EnImml/oM= ;{id = 33655} 0570686F746F00000200010002A30000160161026E730B756E697265676973747279036E657400 photo. 172800 IN NS a.ns.uniregistry.net. 0570686F746F00000200010002A300001103746C64076973632D736E7303636F6D00 photo. 172800 IN NS tld.isc-sns.com. 0570686F746F00000200010002A300001103746C64076973632D736E73036E657400 photo. 172800 IN NS tld.isc-sns.net. 0570686F746F00000200010002A300001203746C64076973632D736E7304696E666F00 photo. 172800 IN NS tld.isc-sns.info. 0570686F746F00002B00010001518000182E6C05015452469C278FB3EF65B9D47B709DBDDA025FD6DA photo. 86400 IN DS 11884 5 1 5452469C278FB3EF65B9D47B709DBDDA025FD6DA 0570686F746F00002B00010001518000242E6C050280ADEC219929825CE490E0B9CAAC5CAD806FC8AD4C4E0D48017F62F5408D6FF5 photo. 86400 IN DS 11884 5 2 80ADEC219929825CE490E0B9CAAC5CAD806FC8AD4C4E0D48017F62F5408D6FF5 0570686F746F00002E0001000151800093002B08010001518052F4220052EAD97083770070FCE74DF30E37CD274AF456FC4B4177DC28FF3825E22582CF55ABC80A65C3F7C8111FFE8D07F2A23391C39B51BFE194C2E3B1CD1A91C1BA3A0857999E27FF905AF846A522064D9D06E34E0365B3755895686A9222BFF703B3D2A4CAD3C56DAACC23F9CD90983B6F4A6268E71985D1A5D3B4AD29F4400CC8CCA13E8B1D8FF3A0 photo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cPznTfMON80nSvRW/EtBd9wo/zgl4iWCz1WryAplw/fIER/+jQfyojORw5tRv+GUwuOxzRqRwbo6CFeZnif/kFr4RqUiBk2dBuNOA2WzdViVaGqSIr/3A7PSpMrTxW2qzCP5zZCYO29KYmjnGYXRpdO0rSn0QAzIzKE+ix2P86A= ;{id = 33655} 0570686F746F00002E0001000151800093002F08010001518052F4220052EAD9708377008B6E0EFDB6F17DD27EC0ED28343DF248D2A19655E6FE6FA3F7FA72BD494149A1A3C6F61BA8A0F4B495195C6BABAF7F13FC7335D3B104628200A71C481A394D22182DA39556A8CF66EF2507044AA327123E25DDB85E3F03156F1676E0498E98B414D0F4340818040A9450A066DADA4E415D72F9DE11631394636FA143D6063235 photo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . i24O/bbxfdJ+wO0oND3ySNKhllXm/m+j9/pyvUlBSaGjxvYbqKD0tJUZXGurr38T/HM107EEYoIApxxIGjlNIhgto5VWqM9m7yUHBEqjJxI+Jd24Xj8DFW8WduBJjpi0FND0NAgYBAqUUKBm2tpOQV1y+d4RYxOUY2+hQ9YGMjU= ;{id = 33655} 0570686F746F00002F00010001518000150B70686F746F677261706879000006200000000013 photo. 86400 IN NSEC photography. NS DS RRSIG NSEC 0B70686F746F67726170687900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 photography. 172800 IN NS demand.beta.aridns.net.au. 0B70686F746F67726170687900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 photography. 172800 IN NS demand.alpha.aridns.net.au. 0B70686F746F67726170687900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 photography. 172800 IN NS demand.delta.aridns.net.au. 0B70686F746F67726170687900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 photography. 172800 IN NS demand.gamma.aridns.net.au. 0B70686F746F67726170687900002B0001000151800024E9800802D456A9A0648D15BA511E0CEC9AE8BE1B39E7F8443FB037E58E9313CE9275F3CC photography. 86400 IN DS 59776 8 2 D456A9A0648D15BA511E0CEC9AE8BE1B39E7F8443FB037E58E9313CE9275F3CC 0B70686F746F67726170687900002E0001000151800093002B08010001518052F4220052EAD97083770079E0C800E48CF0051E31E081F614544FA37906C2855C781798EDEAE1C46FA8BF2ED1D5F4CFC2A3206517889EBAE0DA50F13C61955C476F886FE3644108A6543DD6E34FBBCDE92FE8D193BC93C51B6ADFD97B7674F6494831B8575928AB6BF5402426DE839CECE1FEAC59257F384B5EEFFD3E9B3153AB9D37073A3D7BEC29D328 photography. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eeDIAOSM8AUeMeCB9hRUT6N5BsKFXHgXmO3q4cRvqL8u0dX0z8KjIGUXiJ664NpQ8TxhlVxHb4hv42RBCKZUPdbjT7vN6S/o0ZO8k8Ubat/Ze3Z09klIMbhXWSira/VAJCbeg5zs4f6sWSV/OEte7/0+mzFTq503Bzo9e+wp0yg= ;{id = 33655} 0B70686F746F67726170687900002E0001000151800093002F08010001518052F4220052EAD97083770086C5BAC6642D33699D509A7E0C5FFB7AC34944ED46B2AD0E6CBBE5537B0FE97C0062D43ADB0ACE54FF4251CDC4952CC21885B187474904F71B4AD3A489DFB5B634ADE348754DF81C905ED8ED0654873A7F5ED4BA027C8E339ACA5CA6B6CCA200A919AFE93649799676D961C3B94C8426A2C0223520FD55BEA7F5CE5E8AB649C4 photography. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hsW6xmQtM2mdUJp+DF/7esNJRO1Gsq0ObLvlU3sP6XwAYtQ62wrOVP9CUc3ElSzCGIWxh0dJBPcbStOkid+1tjSt40h1TfgckF7Y7QZUhzp/XtS6AnyOM5rKXKa2zKIAqRmv6TZJeZZ22WHDuUyEJqLAIjUg/VW+p/XOXoq2ScQ= ;{id = 33655} 0B70686F746F67726170687900002F00010001518000100670686F746F73000006200000000013 photography. 86400 IN NSEC photos. NS DS RRSIG NSEC 0670686F746F7300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 photos. 172800 IN NS demand.beta.aridns.net.au. 0670686F746F7300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 photos. 172800 IN NS demand.alpha.aridns.net.au. 0670686F746F7300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 photos. 172800 IN NS demand.delta.aridns.net.au. 0670686F746F7300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 photos. 172800 IN NS demand.gamma.aridns.net.au. 0670686F746F7300002B0001000151800024B1A9080219BD8DD90A5EC536C0474423CDD38E482628539FD8A4B95EBCE1C0B3676F9A68 photos. 86400 IN DS 45481 8 2 19BD8DD90A5EC536C0474423CDD38E482628539FD8A4B95EBCE1C0B3676F9A68 0670686F746F7300002E0001000151800093002B08010001518052F4220052EAD9708377006639913FA8206ED0C9AE0C2E2A9A34A0CEA1535228E2D6A9EECA6A76728E70D427500A1F9E1AA9B8274D34FBB49C81B2BCD0F4E10701AF081164778A868BFA40BE508AF75E80F48F92CEA99A7C2D7BE602D734FF26211486AD750E8D0B4FF23679A0CA3F00B0CBA2D2BFE5BE981ED7D8026D760DAFE2534D6525740C53E4859E photos. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZjmRP6ggbtDJrgwuKpo0oM6hU1Io4tap7spqdnKOcNQnUAofnhqpuCdNNPu0nIGyvND04QcBrwgRZHeKhov6QL5QivdegPSPks6pmnwte+YC1zT/JiEUhq11Do0LT/I2eaDKPwCwy6LSv+W+mB7X2AJtdg2v4lNNZSV0DFPkhZ4= ;{id = 33655} 0670686F746F7300002E0001000151800093002F08010001518052F4220052EAD970837700450043AAE9683AAB5BF3DADC5E358AF60D957BD28DCA55E4CBA862CE7845D91452EE8F7D7F6C2F5F001E5338DBD1FDCD7F3DCB71FACF91650F7B781B8ED567AF0704C220F16D1BD5A3AC2872D2F2BF916CE884E1C68E677C49F3EB96F31451500BE55D702791726B7A9B7A29D2FA160E87695802E10AE0B15205F3A70980FBDF photos. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RQBDquloOqtb89rcXjWK9g2Ve9KNylXky6hiznhF2RRS7o99f2wvXwAeUzjb0f3Nfz3LcfrPkWUPe3gbjtVnrwcEwiDxbRvVo6woctLyv5Fs6IThxo5nfEnz65bzFFFQC+VdcCeRcmt6m3op0voWDodpWALhCuCxUgXzpwmA+98= ;{id = 33655} 0670686F746F7300002F000100015180000E0470696373000006200000000013 photos. 86400 IN NSEC pics. NS DS RRSIG NSEC 047069637300000200010002A30000160161026E730B756E697265676973747279036E657400 pics. 172800 IN NS a.ns.uniregistry.net. 047069637300000200010002A300001103746C64076973632D736E7303636F6D00 pics. 172800 IN NS tld.isc-sns.com. 047069637300000200010002A300001103746C64076973632D736E73036E657400 pics. 172800 IN NS tld.isc-sns.net. 047069637300000200010002A300001203746C64076973632D736E7304696E666F00 pics. 172800 IN NS tld.isc-sns.info. 047069637300002B000100015180001856150501128E4D7B181F80FBEF51811B5396FFE83E6517BD pics. 86400 IN DS 22037 5 1 128E4D7B181F80FBEF51811B5396FFE83E6517BD 047069637300002B000100015180002456150502FAA0D15E50168840E97AAA27E7D6F010ECE0C3BDCFD7F26827DA1B062AAD9291 pics. 86400 IN DS 22037 5 2 FAA0D15E50168840E97AAA27E7D6F010ECE0C3BDCFD7F26827DA1B062AAD9291 047069637300002E0001000151800093002B08010001518052F4220052EAD97083770012E4C186B9F7EA9308974E58123BD4A87D6CA753529FCBC42136C91599B3F342C0F7AE0B2E130C4AE2A912B7F4B374CF0E992D830EE99C619DE98D8AFDF1975D1CC38B6971199212DC8EBACF787979BB1DF847E55DFA0AE87843A6856420C098C23E2E838C4D231E1E6394836DD174086C1E9EBC63F27147934985BB485FFE62 pics. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . EuTBhrn36pMIl05YEjvUqH1sp1NSn8vEITbJFZmz80LA964LLhMMSuKpErf0s3TPDpktgw7pnGGd6Y2K/fGXXRzDi2lxGZIS3I66z3h5ebsd+EflXfoK6HhDpoVkIMCYwj4ug4xNIx4eY5SDbdF0CGwenrxj8nFHk0mFu0hf/mI= ;{id = 33655} 047069637300002E0001000151800093002F08010001518052F4220052EAD970837700736EBEAB4AC65430B7611EA8132530A030D8A4374DAF32B9760483C7870C7C3FDDA14C2E082B69455F92A35F61B832E1371D41D675E19899C6381B4800706EF1325305B924A077207BEC1AD294329FDCEA75C3037B65CF8B1A550D0DB58E9A94E536A245F7664C086EE1E3969D3607A6976F4956FAEDD643368C36FFC595F0BB pics. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . c26+q0rGVDC3YR6oEyUwoDDYpDdNrzK5dgSDx4cMfD/doUwuCCtpRV+So19huDLhNx1B1nXhmJnGOBtIAHBu8TJTBbkkoHcge+wa0pQyn9zqdcMDe2XPixpVDQ21jpqU5TaiRfdmTAhu4eOWnTYHppdvSVb67dZDNow2/8WV8Ls= ;{id = 33655} 047069637300002F000100015180000E0470696E6B000006200000000013 pics. 86400 IN NSEC pink. NS DS RRSIG NSEC 0470696E6B00000200010002A300000D026130036E69630470696E6B00 pink. 172800 IN NS a0.nic.pink. 0470696E6B00000200010002A300000D026132036E69630470696E6B00 pink. 172800 IN NS a2.nic.pink. 0470696E6B00000200010002A300000D026230036E69630470696E6B00 pink. 172800 IN NS b0.nic.pink. 0470696E6B00000200010002A300000D026330036E69630470696E6B00 pink. 172800 IN NS c0.nic.pink. 0470696E6B00002B0001000151800018B2BC0701D4496FF46E35CC9A206DA310B24C36AF205A2BD1 pink. 86400 IN DS 45756 7 1 D4496FF46E35CC9A206DA310B24C36AF205A2BD1 0470696E6B00002B0001000151800024B2BC070271CDA61FCA2B38FD3C93B8A69B2300CD7BC91FF32C306F1F3F831BBA7686A149 pink. 86400 IN DS 45756 7 2 71CDA61FCA2B38FD3C93B8A69B2300CD7BC91FF32C306F1F3F831BBA7686A149 0470696E6B00002E0001000151800093002B08010001518052F4220052EAD970837700A93BC083680A58860C1C0003CFD6F6F38945869FB716C2F90E3996EE14A8A87A5B3E843E3943E5892B16AE600B8E4D39FBDE604A38C9F75F0CE9A596303E7DF75A08DB0A803B38FCE19086BCCBF87E51DB69594017D4346E0AA2DF523D87BCE753160B7E9E26714A27D11E22C92A30CFC2DA042582E90C1DDFCB7C0E9ECE671E pink. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qTvAg2gKWIYMHAADz9b284lFhp+3FsL5DjmW7hSoqHpbPoQ+OUPliSsWrmALjk05+95gSjjJ918M6aWWMD5991oI2wqAOzj84ZCGvMv4flHbaVlAF9Q0bgqi31I9h7znUxYLfp4mcUon0R4iySowz8LaBCWC6Qwd38t8Dp7OZx4= ;{id = 33655} 0470696E6B00002E0001000151800093002F08010001518052F4220052EAD9708377000C2FA9F0CA9E639F3E6E29688C43D483BF0CA5DB15446B05FB6080EABC10CE040DA27F568C50A2806FE27941F789BB806025CC98EED3B78E86ECE3B5B13A496FECE44ABAF0289EDCE636931D8E82DC33A76684E748CE2D5305458EDF4C6DF1F2F38795AAC50ED357AB9339E1C8D64FEF8E496FA8D18265425EAF8D6975335257 pink. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DC+p8MqeY58+bilojEPUg78MpdsVRGsF+2CA6rwQzgQNon9WjFCigG/ieUH3ibuAYCXMmO7Tt46G7OO1sTpJb+zkSrrwKJ7c5jaTHY6C3DOnZoTnSM4tUwVFjt9MbfHy84eVqsUO01erkznhyNZP745Jb6jRgmVCXq+NaXUzUlc= ;{id = 33655} 0470696E6B00002F000100015180000C02706B000006200000000013 pink. 86400 IN NSEC pk. NS DS RRSIG NSEC 026130036E69630470696E6B00000100010002A300000441161C11 a0.nic.pink. 172800 IN A 65.22.28.17 026130036E69630470696E6B00001C00010002A30000102A018840001E00000000000000000017 a0.nic.pink. 172800 IN AAAA 2a01:8840:1e::17 026132036E69630470696E6B00000100010002A300000441161F11 a2.nic.pink. 172800 IN A 65.22.31.17 026132036E69630470696E6B00001C00010002A30000102A018840002100000000000000000017 a2.nic.pink. 172800 IN AAAA 2a01:8840:21::17 026230036E69630470696E6B00000100010002A300000441161D11 b0.nic.pink. 172800 IN A 65.22.29.17 026230036E69630470696E6B00001C00010002A30000102A018840001F00000000000000000017 b0.nic.pink. 172800 IN AAAA 2a01:8840:1f::17 026330036E69630470696E6B00000100010002A300000441161E11 c0.nic.pink. 172800 IN A 65.22.30.17 026330036E69630470696E6B00001C00010002A30000102A018840002000000000000000000017 c0.nic.pink. 172800 IN AAAA 2a01:8840:20::17 02706B00000200010002A300001906726F6F742D620C636C6F756439676C6F62616C036E657400 pk. 172800 IN NS root-b.cloud9global.net. 02706B00000200010002A300001106726F6F742D7005706B6E696302706B00 pk. 172800 IN NS root-p.pknic.pk. 02706B00000200010002A300001106726F6F742D7305706B6E696302706B00 pk. 172800 IN NS root-s.pknic.pk. 02706B00002F000100015180000C02706C000006200000000003 pk. 86400 IN NSEC pl. NS RRSIG NSEC 02706B00002E0001000151800093002F08010001518052F4220052EAD9708377004C71E7319E61146155D384354A14BA68F0CD482527F2AD4C8996BC215EBFF90541FA5355179A62F89B76301120EB93B4A176FBB21B12C78A29DC74B3459F9E9055BBE13416C0F3E1011460EEA30A9F5340DE2804992523269713DC4E03B2C54EA0E11889DE618F0349FAF49A0E3E529E748B206C769C33164E22A83F8D32D8FE pk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . THHnMZ5hFGFV04Q1ShS6aPDNSCUn8q1MiZa8IV6/+QVB+lNVF5pi+Jt2MBEg65O0oXb7shsSx4op3HSzRZ+ekFW74TQWwPPhARRg7qMKn1NA3igEmSUjJpcT3E4DssVOoOEYid5hjwNJ+vSaDj5SnnSLIGx2nDMWTiKoP40y2P4= ;{id = 33655} 06726F6F742D7005706B6E696302706B00000100010002A3000004CB80077B root-p.pknic.pk. 172800 IN A 203.128.7.123 06726F6F742D7305706B6E696302706B00000100010002A30000047751225A root-s.pknic.pk. 172800 IN A 119.81.34.90 02706C00000200010002A300000A05612D646E7302706C00 pl. 172800 IN NS a-dns.pl. 02706C00000200010002A300000A05632D646E7302706C00 pl. 172800 IN NS c-dns.pl. 02706C00000200010002A300000A05642D646E7302706C00 pl. 172800 IN NS d-dns.pl. 02706C00000200010002A300000A05652D646E7302706C00 pl. 172800 IN NS e-dns.pl. 02706C00000200010002A300000A05662D646E7302706C00 pl. 172800 IN NS f-dns.pl. 02706C00000200010002A300000A05672D646E7302706C00 pl. 172800 IN NS g-dns.pl. 02706C00000200010002A300000A05682D646E7302706C00 pl. 172800 IN NS h-dns.pl. 02706C00000200010002A300000A05692D646E7302706C00 pl. 172800 IN NS i-dns.pl. 02706C00002B00010001518000186A640801DC037E771F7C4CEA0C6BB65C6EDA62DAE18693A0 pl. 86400 IN DS 27236 8 1 DC037E771F7C4CEA0C6BB65C6EDA62DAE18693A0 02706C00002B00010001518000246A64080216E41465F64D6FE884E5079FD2781C3C3585E899D7EB495E47138CB1D7DFC98C pl. 86400 IN DS 27236 8 2 16E41465F64D6FE884E5079FD2781C3C3585E899D7EB495E47138CB1D7DFC98C 02706C00002E0001000151800093002B08010001518052F4220052EAD97083770056052DAA84C05AFE8E8EAA80B847FED659FCFACEF9EF88C6A8345EA98CA4F9D0FE585968E1CA71D4D3BFF5D1A86C19E8FA9D215FDE6E022E3F8CDA002CE79EEC02CDD3A2A9FB70213CD772969161940F5A4A3D484A09BCD57EAA4F1A12DEB60E864FEFF09B4DED5FD8287B9F2B009B2BC55436B0BCAFAA719B96AF839F7420D6 pl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VgUtqoTAWv6OjqqAuEf+1ln8+s7574jGqDReqYyk+dD+WFlo4cpx1NO/9dGobBno+p0hX95uAi4/jNoALOee7ALN06Kp+3AhPNdylpFhlA9aSj1ISgm81X6qTxoS3rYOhk/v8JtN7V/YKHufKwCbK8VUNrC8r6pxm5avg590INY= ;{id = 33655} 02706C00002E0001000151800093002F08010001518052F4220052EAD97083770066EAFE552C44D8D93E2F73916451ECA3ECF4D18CE58FA524376965BDAD9FD86ECCF24CBEFA0267BD1586DBAF62AA4E21FC8AC2FBBE0D9D0E55F9B55A73F955B56F5CB63B656C594E56D42F65FCAF8802774688966431067C6D36713E9DA761C09DEAC4955A01B27D0CD9731F3C794C916CE619B737B72F180C04042C850E28AB pl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zur+VSxE2Nk+L3ORZFHso+z00Yzlj6UkN2llva2f2G7M8ky++gJnvRWG269iqk4h/IrC+74NnQ5V+bVac/lVtW9ctjtlbFlOVtQvZfyviAJ3RoiWZDEGfG02cT6dp2HAnerElVoBsn0M2XMfPHlMkWzmGbc3ty8YDAQELIUOKKs= ;{id = 33655} 02706C00002F000100015180001208706C756D62696E67000006200000000013 pl. 86400 IN NSEC plumbing. NS DS RRSIG NSEC 05612D646E7302706C00000100010002A3000004C3BBF52C a-dns.pl. 172800 IN A 195.187.245.44 05632D646E7302706C00000100010002A3000004C32FEBE2 c-dns.pl. 172800 IN A 195.47.235.226 05642D646E7302706C00000100010002A3000004D5ACAE46 d-dns.pl. 172800 IN A 213.172.174.70 05652D646E7302706C00000100010002A3000004C350EDA2 e-dns.pl. 172800 IN A 195.80.237.162 05662D646E7302706C00000100010002A3000004D9112EBD f-dns.pl. 172800 IN A 217.17.46.189 05662D646E7302706C00001C00010002A300001020011A68000000100000000000000189 f-dns.pl. 172800 IN AAAA 2001:1a68:0:10::189 05672D646E7302706C00000100010002A3000004959C0106 g-dns.pl. 172800 IN A 149.156.1.6 05672D646E7302706C00001C00010002A3000010200106D80000000100000000000A0006 g-dns.pl. 172800 IN AAAA 2001:6d8:0:1::a:6 05682D646E7302706C00000100010002A3000004C2000102 h-dns.pl. 172800 IN A 194.0.1.2 05682D646E7302706C00001C00010002A300001020010678000400000000000000000002 h-dns.pl. 172800 IN AAAA 2001:678:4::2 05692D646E7302706C00000100010002A30000049C9A640F i-dns.pl. 172800 IN A 156.154.100.15 08706C756D62696E6700000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 plumbing. 172800 IN NS demand.beta.aridns.net.au. 08706C756D62696E6700000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 plumbing. 172800 IN NS demand.alpha.aridns.net.au. 08706C756D62696E6700000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 plumbing. 172800 IN NS demand.delta.aridns.net.au. 08706C756D62696E6700000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 plumbing. 172800 IN NS demand.gamma.aridns.net.au. 08706C756D62696E6700002B00010001518000240CB80802BB346E545259EA75712223FFD494EABE12726A788828C02BD03B979ED7976BD7 plumbing. 86400 IN DS 3256 8 2 BB346E545259EA75712223FFD494EABE12726A788828C02BD03B979ED7976BD7 08706C756D62696E6700002E0001000151800093002B08010001518052F4220052EAD97083770078A9A325E3463C28183EDDF0DB61300B31907A081DCF7ACE5F2104FADE922E45DF04598713B3400A867D36854B55497A0CEA665FEADC8F1C956FDC5CE14F9CDF8DB7BD3EDA2D56AEA6414EE9B066DE733FF329301EF78F6CA199448B07D88DE007BD0729B85BD6918A0D01530DDCC927A4D5DE962C094809F439E802D14AA797 plumbing. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eKmjJeNGPCgYPt3w22EwCzGQeggdz3rOXyEE+t6SLkXfBFmHE7NACoZ9NoVLVUl6DOpmX+rcjxyVb9xc4U+c3423vT7aLVaupkFO6bBm3nM/8ykwHvePbKGZRIsH2I3gB70HKbhb1pGKDQFTDdzJJ6TV3pYsCUgJ9DnoAtFKp5c= ;{id = 33655} 08706C756D62696E6700002E0001000151800093002F08010001518052F4220052EAD97083770030E5342C744D537B7C08D4B8362CB9C63E33B26995E4C291F71B79EC9AADECF4609E94CC07DCC83DAEFD5D1B306A2C30FE3A1C2832946142656357F2CA4837BA2BCB01B81BF46D495549EBE931DAEB868F3A3596C5AD1CF21A526102D064EF32B09DD8EDFB60EE16554555FB47AD6675A49E4DA3A0FEAF85C2BD7454D0A326F9 plumbing. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MOU0LHRNU3t8CNS4Niy5xj4zsmmV5MKR9xt57Jqt7PRgnpTMB9zIPa79XRswaiww/jocKDKUYUJlY1fyykg3uivLAbgb9G1JVUnr6THa64aPOjWWxa0c8hpSYQLQZO8ysJ3Y7ftg7hZVRVX7R61mdaSeTaOg/q+Fwr10VNCjJvk= ;{id = 33655} 08706C756D62696E6700002F000100015180000C02706D000006200000000013 plumbing. 86400 IN NSEC pm. NS DS RRSIG NSEC 02706D00000200010002A300000E016403657874036E696302667200 pm. 172800 IN NS d.ext.nic.fr. 02706D00000200010002A300000A0164036E696302667200 pm. 172800 IN NS d.nic.fr. 02706D00000200010002A300000E016503657874036E696302667200 pm. 172800 IN NS e.ext.nic.fr. 02706D00000200010002A300000E016603657874036E696302667200 pm. 172800 IN NS f.ext.nic.fr. 02706D00000200010002A300000E016703657874036E696302667200 pm. 172800 IN NS g.ext.nic.fr. 02706D00002B00010001518000248C470802BCCB9BB0CAB68D8C3C64A4FF4ECF3309743D14C5366738F54D4C031E74EA99F1 pm. 86400 IN DS 35911 8 2 BCCB9BB0CAB68D8C3C64A4FF4ECF3309743D14C5366738F54D4C031E74EA99F1 02706D00002B0001000151800024DB800802B49959AB8FFF95A45BF5F7130AB1A64C7EF1CEFB6F50CA1BE003281503325F67 pm. 86400 IN DS 56192 8 2 B49959AB8FFF95A45BF5F7130AB1A64C7EF1CEFB6F50CA1BE003281503325F67 02706D00002E0001000151800093002B08010001518052F4220052EAD97083770067E5DEC6D2AA4C8F31CD7720DECCBEBEC2632A5D0FCF8510637AA30D111E7FBBA80F3D4332C6D876B50D8E7E36347530AA2726B6A17D90409F9EF41A49D22343E0C07B34C8060C6C1F0DB6DE03DD2E4929E9145DFC32949B0F756B166AD17D2206C5A62457B789F100893B69431B597738AAF814C1D886A8DED9F51AE3D6AE1D pm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z+XextKqTI8xzXcg3sy+vsJjKl0Pz4UQY3qjDREef7uoDz1DMsbYdrUNjn42NHUwqicmtqF9kECfnvQaSdIjQ+DAezTIBgxsHw223gPdLkkp6RRd/DKUmw91axZq0X0iBsWmJFe3ifEAiTtpQxtZdziq+BTB2Iao3tn1GuPWrh0= ;{id = 33655} 02706D00002E0001000151800093002F08010001518052F4220052EAD97083770046F3797AEC4480789099A9F1EC204B7D48CDE3249337E6DF78E0BA9AA374628E2B24726F02E0D8851EE81749BF07AFC956C94675E2C65256AE17C2E28E81C6298E8C3AF9F75C1D2340BE0E4EA0B65DA3C332B5518096998533E327BF1A93FE1693E98C0657806458083544442FCE5A03B4639C541662A6C162A5B5CE30F3C52E pm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RvN5euxEgHiQmanx7CBLfUjN4ySTN+bfeOC6mqN0Yo4rJHJvAuDYhR7oF0m/B6/JVslGdeLGUlauF8LijoHGKY6MOvn3XB0jQL4OTqC2XaPDMrVRgJaZhTPjJ78ak/4Wk+mMBleAZFgINUREL85aA7RjnFQWYqbBYqW1zjDzxS4= ;{id = 33655} 02706D00002F000100015180000C02706E000006200000000013 pm. 86400 IN NSEC pn. NS DS RRSIG NSEC 02706E00000200010002A3000015036E733008706974636169726E036E657402706E00 pn. 172800 IN NS ns0.pitcairn.net.pn. 02706E00000200010002A3000015036E733208706974636169726E036E657402706E00 pn. 172800 IN NS ns2.pitcairn.net.pn. 02706E00000200010002A300001604666F726B0373746807646E736E6F6465036E657400 pn. 172800 IN NS fork.sth.dnsnode.net. 02706E00000200010002A300001006736E732D706203697363036F726700 pn. 172800 IN NS sns-pb.isc.org. 02706E00002F000100015180000E04706F7374000006200000000003 pn. 86400 IN NSEC post. NS RRSIG NSEC 02706E00002E0001000151800093002F08010001518052F4220052EAD97083770079CCFF415DE1FF330FF0710A9CDC6B7958377BC089225087D29C470D04B97503221E441EE04DE29A13332A9ECE050C3A7ECA794AA26B41EB4EF3842BC21CBA742C137CA33F299A96D7D1FC0E1C8A1684C46927DD94FC1619A0243B35FDCCC2D0969E31EEF0D480C02675C8ACC3C439CD3FB7042D2F1FF5AA130E6E4DC5411F32 pn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ecz/QV3h/zMP8HEKnNxreVg3e8CJIlCH0pxHDQS5dQMiHkQe4E3imhMzKp7OBQw6fsp5SqJrQetO84Qrwhy6dCwTfKM/KZqW19H8DhyKFoTEaSfdlPwWGaAkOzX9zMLQlp4x7vDUgMAmdcisw8Q5zT+3BC0vH/WqEw5uTcVBHzI= ;{id = 33655} 036E733008706974636169726E036E657402706E00000100010002A3000004ADE699B4 ns0.pitcairn.net.pn. 172800 IN A 173.230.153.180 036E733208706974636169726E036E657402706E00000100010002A300000450445D64 ns2.pitcairn.net.pn. 172800 IN A 80.68.93.100 04706F737400000200010002A300001A02613004706F73740B6166696C6961732D6E737404696E666F00 post. 172800 IN NS a0.post.afilias-nst.info. 04706F737400000200010002A300001A02613204706F73740B6166696C6961732D6E737404696E666F00 post. 172800 IN NS a2.post.afilias-nst.info. 04706F737400000200010002A300001902623004706F73740B6166696C6961732D6E7374036F726700 post. 172800 IN NS b0.post.afilias-nst.org. 04706F737400000200010002A300001902623204706F73740B6166696C6961732D6E7374036F726700 post. 172800 IN NS b2.post.afilias-nst.org. 04706F737400000200010002A300001A02633004706F73740B6166696C6961732D6E737404696E666F00 post. 172800 IN NS c0.post.afilias-nst.info. 04706F737400000200010002A300001902643004706F73740B6166696C6961732D6E7374036F726700 post. 172800 IN NS d0.post.afilias-nst.org. 04706F737400002B0001000151800018806507016BDF7F6E05265E97B88E44C56D86E686FDB75AC7 post. 86400 IN DS 32869 7 1 6BDF7F6E05265E97B88E44C56D86E686FDB75AC7 04706F737400002B0001000151800024806507020333CB4618C912888F923F60E876BA9B160602CCED7B3B8BF35C522289C84DE7 post. 86400 IN DS 32869 7 2 0333CB4618C912888F923F60E876BA9B160602CCED7B3B8BF35C522289C84DE7 04706F737400002E0001000151800093002B08010001518052F4220052EAD9708377001F38936A5982833016E8B2DFD236BDB4ECA2FFF02A316B4A286ACA4FF74D648203BB105AD10F529728DDD5D0273B9F20287CCDD9C4A576360E99E6CC0F2C120D71A00FEEFD78B611B20F51FBF1419EBDC2B98DE2701830DF56D0A017EC84BD8D87121A799C10E1B4323BBA1AA21BC5CBBE6E7EA400287B0661F64536AA48A777 post. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . HziTalmCgzAW6LLf0ja9tOyi//AqMWtKKGrKT/dNZIIDuxBa0Q9Slyjd1dAnO58gKHzN2cSldjYOmebMDywSDXGgD+79eLYRsg9R+/FBnr3CuY3icBgw31bQoBfshL2NhxIaeZwQ4bQyO7oaohvFy75ufqQAKHsGYfZFNqpIp3c= ;{id = 33655} 04706F737400002E0001000151800093002F08010001518052F4220052EAD9708377007646457EE511D24A91DD637943A9CF8C3B61D8F22B2E620F5CEDA005BF9A5AB4B91EC4E76A91A6E273D0B00F91DB5F58346BD50D7B7606BE62C2A00AB264D2DABCFAD9776CD5B0179FBBF2727EFA24337458F0476216D287E889FB1E36ADC75141347553108EC08E7D556DBD7493F3E0735DC48AD5C0EEE9B5488D47EBE60B7C post. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dkZFfuUR0kqR3WN5Q6nPjDth2PIrLmIPXO2gBb+aWrS5HsTnapGm4nPQsA+R219YNGvVDXt2Br5iwqAKsmTS2rz62Xds1bAXn7vycn76JDN0WPBHYhbSh+iJ+x42rcdRQTR1UxCOwI59VW29dJPz4HNdxIrVwO7ptUiNR+vmC3w= ;{id = 33655} 04706F737400002F000100015180000C027072000006200000000013 post. 86400 IN NSEC pr. NS DS RRSIG NSEC 02707200002F000100015180000D0370726F000006200000000013 pr. 86400 IN NSEC pro. NS DS RRSIG NSEC 02707200002E0001000151800093002F08010001518052F4220052EAD9708377002373B06BF5475FE2BD7B4AE2E2E916A00E4EA275C22B3CCFCEF0F4640AD5F09397DC2217CBBB81E2693147BAE6BB3577A20674A4A8193A5B2304B607ECB1DB812B231BE62E959E267119D838E977675ED94DC5F2260B105E719D03116718C0517A01AE57F7481B4BB02F54E496D6E2F257E33097DB9C20DA7B148D8EE3E35508 pr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . I3Owa/VHX+K9e0ri4ukWoA5OonXCKzzPzvD0ZArV8JOX3CIXy7uB4mkxR7rmuzV3ogZ0pKgZOlsjBLYH7LHbgSsjG+YulZ4mcRnYOOl3Z17ZTcXyJgsQXnGdAxFnGMBRegGuV/dIG0uwL1Tkltbi8lfjMJfbnCDaexSNjuPjVQg= ;{id = 33655} 02707200002E0001000151800093002B08010001518052F4220052EAD97083770037661896C70D652192501BBA8E0D17713179BCE7EB54D540D082C4E071D068B98B26E12C4352291CF60A335EEDF353C8E90483D3CF78D9A1FF3284BFEDA20E0F195F91AC0909B388F430D4F843B7F59A9AC5DD83158506F283CBD60AE1AF52BED9A8E35C6477DAAD1EC2C3BCD26FBD6D6FED564CE204853E54951815B29EEE7B pr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . N2YYlscNZSGSUBu6jg0XcTF5vOfrVNVA0ILE4HHQaLmLJuEsQ1IpHPYKM17t81PI6QSD08942aH/MoS/7aIODxlfkawJCbOI9DDU+EO39Zqaxd2DFYUG8oPL1grhr1K+2ajjXGR32q0ewsO80m+9bW/tVkziBIU+VJUYFbKe7ns= ;{id = 33655} 02707200000200010002A30000170570722D6E7307616E796361737403706368036E657400 pr. 172800 IN NS pr-ns.anycast.pch.net. 02707200000200010002A300000F06676F6C6F6D62036E696302707200 pr. 172800 IN NS golomb.nic.pr. 02707200000200010002A300000F0670617363616C036E696302707200 pr. 172800 IN NS pascal.nic.pr. 02707200000200010002A30000110670722D646E730564656E696302646500 pr. 172800 IN NS pr-dns.denic.de. 02707200000200010002A300001209646573636172746573036E696302707200 pr. 172800 IN NS descartes.nic.pr. 02707200002B0001000151800018D2E20501C2B7576022FE56A3340409053A7AA5D6EED8EB09 pr. 86400 IN DS 53986 5 1 C2B7576022FE56A3340409053A7AA5D6EED8EB09 09646573636172746573036E696302707200000100010002A300000486CA0178 descartes.nic.pr. 172800 IN A 134.202.1.120 06646F2D646E73036E696302707200000100010002A300000486CA0179 do-dns.nic.pr. 172800 IN A 134.202.1.121 06676F6C6F6D62036E696302707200000100010002A300000486CA0664 golomb.nic.pr. 172800 IN A 134.202.6.100 06676F6C6F6D62036E696302707200001C00010002A300001020010500001000000000000000060100 golomb.nic.pr. 172800 IN AAAA 2001:500:10::6:100 0670617363616C036E696302707200000100010002A300000486CA0078 pascal.nic.pr. 172800 IN A 134.202.0.120 0670617363616C036E696302707200001C00010002A300001020010500001000000000000000000120 pascal.nic.pr. 172800 IN AAAA 2001:500:10::120 0370726F00000200010002A30000190261300370726F0B6166696C6961732D6E737404696E666F00 pro. 172800 IN NS a0.pro.afilias-nst.info. 0370726F00000200010002A30000190261320370726F0B6166696C6961732D6E737404696E666F00 pro. 172800 IN NS a2.pro.afilias-nst.info. 0370726F00000200010002A30000180262300370726F0B6166696C6961732D6E7374036F726700 pro. 172800 IN NS b0.pro.afilias-nst.org. 0370726F00000200010002A30000180262320370726F0B6166696C6961732D6E7374036F726700 pro. 172800 IN NS b2.pro.afilias-nst.org. 0370726F00000200010002A30000190263300370726F0B6166696C6961732D6E737404696E666F00 pro. 172800 IN NS c0.pro.afilias-nst.info. 0370726F00000200010002A30000180264300370726F0B6166696C6961732D6E7374036F726700 pro. 172800 IN NS d0.pro.afilias-nst.org. 0370726F00002F000100015180000C027073000006200000000003 pro. 86400 IN NSEC ps. NS RRSIG NSEC 0370726F00002E0001000151800093002F08010001518052F4220052EAD9708377003FE357538263A3A11B8F0C98798C6937E70E65DB9AC50B1AB678B95D2CB57BCBAB6727DADD0F6A441169E95AAF1D04EF5A97BFD3C278D9E9B0DC6FE463EDC74BD8572E0A577A1230A440A3C64EB59BFA70C79992097DE7F3699DA202ACE746F1B9CB7BED1962B97546240701DD8380A27F2D638F25F8E88E4EA726DF6246FA31 pro. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P+NXU4Jjo6EbjwyYeYxpN+cOZduaxQsatni5XSy1e8urZyfa3Q9qRBFp6VqvHQTvWpe/08J42emw3G/kY+3HS9hXLgpXehIwpECjxk61m/pwx5mSCX3n82mdogKs50bxuct77RliuXVGJAcB3YOAon8tY48l+OiOTqcm32JG+jE= ;{id = 33655} 02707300002F000100015180000C027074000006200000000003 ps. 86400 IN NSEC pt. NS RRSIG NSEC 02707300002E0001000151800093002F08010001518052F4220052EAD9708377000DD77F9F41F97B903F35FB797DC4DAFDBCEC0A90B5AC1C299F0E8862F98542ECDA62FC1174100ADCB4ADC0997C4CF4411D1C023216A4FCDA957FF1594026485C16BC72A80862FBE4E95A6B66DB706E408DFF3D485E727D02704A8BFF674E33F4F0628A76C9937051CD9F9FE38EA2D620DE3E5B2DBF848D67A8516BF4ADD749B0 ps. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ddd/n0H5e5A/Nft5fcTa/bzsCpC1rBwpnw6IYvmFQuzaYvwRdBAK3LStwJl8TPRBHRwCMhak/NqVf/FZQCZIXBa8cqgIYvvk6VprZttwbkCN/z1IXnJ9AnBKi/9nTjP08GKKdsmTcFHNn5/jjqLWIN4+Wy2/hI1nqFFr9K3XSbA= ;{id = 33655} 02707300000200010002A300001B027073056363746C640761757468646E730472697065036E657400 ps. 172800 IN NS ps.cctld.authdns.ripe.net. 02707300000200010002A300000E036E733105706E696E6102707300 ps. 172800 IN NS ns1.pnina.ps. 02707300000200010002A300000D037269700370736703636F6D00 ps. 172800 IN NS rip.psg.com. 02707300000200010002A300000D04646E733103676F7602707300 ps. 172800 IN NS dns1.gov.ps. 02707300000200010002A300001604666F726B0373746807646E736E6F6465036E657400 ps. 172800 IN NS fork.sth.dnsnode.net. 02707300000200010002A30000170570732D6E7307616E796361737403706368036E657400 ps. 172800 IN NS ps-ns.anycast.pch.net. 04646E733103676F7602707300000100010002A3000004D5F45293 dns1.gov.ps. 172800 IN A 213.244.82.147 04646E733303676F7602707300000100010002A3000004D40EFDF2 dns3.gov.ps. 172800 IN A 212.14.253.242 0369646E05706E696E6102707300000100010002A3000004D0404404 idn.pnina.ps. 172800 IN A 208.64.68.4 036E733105706E696E6102707300000100010002A3000004C206E114 ns1.pnina.ps. 172800 IN A 194.6.225.20 02707400002F000100015180000C027077000006200000000013 pt. 86400 IN NSEC pw. NS DS RRSIG NSEC 02707400002E0001000151800093002F08010001518052F4220052EAD9708377004DCFBB6E84A18834DA82313EF5D7F591FD542810220810D64361C1991C22F24EC0E2EC8E69D6E601AE001EA6E8174D9521C5457DD0E4E1437DCF4B5549677F14762EBBB71AF34E74606BAFBFFFBFD597D44C4B429FCCC510A0E57B28FA05EEF70E3F7D23E64B69BFF1219C0AD7405C8EC811D26437BE87EBD4DFF3CD628474B5 pt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Tc+7boShiDTagjE+9df1kf1UKBAiCBDWQ2HBmRwi8k7A4uyOadbmAa4AHqboF02VIcVFfdDk4UN9z0tVSWd/FHYuu7ca8050YGuvv/+/1ZfUTEtCn8zFEKDleyj6Be73Dj99I+ZLab/xIZwK10BcjsgR0mQ3vofr1N/zzWKEdLU= ;{id = 33655} 02707400002E0001000151800093002B08010001518052F4220052EAD9708377006495C7F3324D7BBC79B67ECF9E3E1DE2F8E7DA55D9AA1821F1CDF3076157844F218230EF896ECAC9D912FA73C80AB27E10B26B7D32CB846C86CD3FB6FCC0056EA1109C7BC8D46B8EAD20904293AFBD52B971A047887304E7AC6724DB6922F40050F6D1C40C6786E764AF58DD04460CC276F856239D388584F8D15C6A8BF926C6 pt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZJXH8zJNe7x5tn7Pnj4d4vjn2lXZqhgh8c3zB2FXhE8hgjDviW7KydkS+nPICrJ+ELJrfTLLhGyGzT+2/MAFbqEQnHvI1GuOrSCQQpOvvVK5caBHiHME56xnJNtpIvQAUPbRxAxnhudkr1jdBEYMwnb4ViOdOIWE+NFcaov5JsY= ;{id = 33655} 02707400000200010002A300000B026E7303646E7302627200 pt. 172800 IN NS ns.dns.br. 02707400000200010002A300000B026E7303646E7302707400 pt. 172800 IN NS ns.dns.pt. 02707400000200010002A300000C036E733203646E7302707400 pt. 172800 IN NS ns2.dns.pt. 02707400000200010002A300000C036E7332036E696302667200 pt. 172800 IN NS ns2.nic.fr. 02707400000200010002A3000014056E732D7074096E6C6E65746C616273026E6C00 pt. 172800 IN NS ns-pt.nlnetlabs.nl. 02707400000200010002A300001006736E732D706203697363036F726700 pt. 172800 IN NS sns-pb.isc.org. 02707400000200010002A30000130761757468323030026E73027575036E657400 pt. 172800 IN NS auth200.ns.uu.net. 02707400000200010002A30000130761757468323130026E73027575036E657400 pt. 172800 IN NS auth210.ns.uu.net. 02707400002B0001000151800018477F0701D071D44BF9DDF70449C5A6C37CADEB3EB3683C74 pt. 86400 IN DS 18303 7 1 D071D44BF9DDF70449C5A6C37CADEB3EB3683C74 02707400002B0001000151800024477F0702B8174233B52988D1A3517C9EF970DF7DF4900B3B211BBF5A931C4FA06C907F6A pt. 86400 IN DS 18303 7 2 B8174233B52988D1A3517C9EF970DF7DF4900B3B211BBF5A931C4FA06C907F6A 026E7303646E7302707400000100010002A3000004C1880001 ns.dns.pt. 172800 IN A 193.136.0.1 026E7303646E7302707400001C00010002A3000010200106900A0010160905000000000001 ns.dns.pt. 172800 IN AAAA 2001:690:a00:1016:905::1 036E733203646E7302707400000100010002A3000004C18802E2 ns2.dns.pt. 172800 IN A 193.136.2.226 036E733203646E7302707400001C00010002A3000010200106900A8040010000000000000100 ns2.dns.pt. 172800 IN AAAA 2001:690:a80:4001::100 046E733031046663636E02707400000100010002A3000004C188C028 ns01.fccn.pt. 172800 IN A 193.136.192.40 046E733031046663636E02707400001C00010002A3000010200106900A0040010000000000000200 ns01.fccn.pt. 172800 IN AAAA 2001:690:a00:4001::200 046E733032046663636E02707400000100010002A3000004C18802E4 ns02.fccn.pt. 172800 IN A 193.136.2.228 046E733032046663636E02707400001C00010002A3000010200106900A8040010000000000000200 ns02.fccn.pt. 172800 IN AAAA 2001:690:a80:4001::200 046E733033046663636E02707400000100010002A30000048AF6FFF9 ns03.fccn.pt. 172800 IN A 138.246.255.249 046E733033046663636E02707400001C00010002A300001020014CA001060000025056FFFEA903FD ns03.fccn.pt. 172800 IN AAAA 2001:4ca0:106:0:250:56ff:fea9:3fd 0670686F626F73046663636E02707400000100010002A3000004C1880711 phobos.fccn.pt. 172800 IN A 193.136.7.17 02707700000200010002A300000C036E7331036E696302707700 pw. 172800 IN NS ns1.nic.pw. 02707700000200010002A300000C036E7332036E696302707700 pw. 172800 IN NS ns2.nic.pw. 02707700000200010002A300000C036E7333036E696302707700 pw. 172800 IN NS ns3.nic.pw. 02707700000200010002A300000C036E7334036E696302707700 pw. 172800 IN NS ns4.nic.pw. 02707700000200010002A300000C036E7335036E696302707700 pw. 172800 IN NS ns5.nic.pw. 02707700002B00010001518000186815070158EE332D303E2A64B7449C43AB770DAA1CA74C40 pw. 86400 IN DS 26645 7 1 58EE332D303E2A64B7449C43AB770DAA1CA74C40 02707700002B0001000151800024681507027EF397EDF4D7CA228C0F5111F5E1696CDBF279C0B6AFA48FC7E71A12E07E5880 pw. 86400 IN DS 26645 7 2 7EF397EDF4D7CA228C0F5111F5E1696CDBF279C0B6AFA48FC7E71A12E07E5880 02707700002E0001000151800093002B08010001518052F4220052EAD970837700678624BF285C00B54D83F19596D40972F452DA4B79B6E935FBA48D8921012DA097326CB8370976A7748F77F7464818323259D7AE97F1EB62CFB6F2B343B10A0DA728CE480003E16C26895771F34D6E34644D55355FB1C62515FB3B955E1522422CAFF81D598EC5685B88859CAE734957F401A14E534011B39CDEA72AE85888F3 pw. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z4YkvyhcALVNg/GVltQJcvRS2kt5tuk1+6SNiSEBLaCXMmy4Nwl2p3SPd/dGSBgyMlnXrpfx62LPtvKzQ7EKDacozkgAA+FsJolXcfNNbjRkTVU1X7HGJRX7O5VeFSJCLK/4HVmOxWhbiIWcrnNJV/QBoU5TQBGznN6nKuhYiPM= ;{id = 33655} 02707700002E0001000151800093002F08010001518052F4220052EAD9708377006A98695455691E403005E02A825E8D8B3C9BDECB7165CC734BE6055A7C957DA7F97275F384AA5854BA694FE78A4A3A825A91E04FAD38F8CDDAAD7589E048DDF0CA6E5AEE563A76488F589AC167338D0307206DAB23ED811B81D133B317399D1290DB562397BDF639E2F4C0AF4FC9C526ED05085E4C9FA09E1189B113D6F03559 pw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aphpVFVpHkAwBeAqgl6Nizyb3stxZcxzS+YFWnyVfaf5cnXzhKpYVLppT+eKSjqCWpHgT604+M3arXWJ4Ejd8MpuWu5WOnZIj1iawWczjQMHIG2rI+2BG4HRM7MXOZ0SkNtWI5e99jni9MCvT8nFJu0FCF5Mn6CeEYmxE9bwNVk= ;{id = 33655} 02707700002F000100015180000C027079000006200000000013 pw. 86400 IN NSEC py. NS DS RRSIG NSEC 036E7331036E696302707700000100010002A3000004C2A9DA0C ns1.nic.pw. 172800 IN A 194.169.218.12 036E7331036E696302707700001C00010002A30000102001067C13CC00000000000000010012 ns1.nic.pw. 172800 IN AAAA 2001:67c:13cc::1:12 036E7332036E696302707700000100010002A3000004B918400C ns2.nic.pw. 172800 IN A 185.24.64.12 036E7332036E696302707700001C00010002A30000102A042B0013CC00000000000000010012 ns2.nic.pw. 172800 IN AAAA 2a04:2b00:13cc::1:12 036E7333036E696302707700000100010002A3000004C2A9DA0D ns3.nic.pw. 172800 IN A 194.169.218.13 036E7333036E696302707700001C00010002A30000102001067C13CC00000000000000010013 ns3.nic.pw. 172800 IN AAAA 2001:67c:13cc::1:13 036E7334036E696302707700000100010002A3000004B918400D ns4.nic.pw. 172800 IN A 185.24.64.13 036E7334036E696302707700001C00010002A30000102A042B0013CC00000000000000010013 ns4.nic.pw. 172800 IN AAAA 2a04:2b00:13cc::1:13 036E7335036E696302707700000100010002A3000004C2000202 ns5.nic.pw. 172800 IN A 194.0.2.2 036E7335036E696302707700001C00010002A300001020010678000500000000000000000002 ns5.nic.pw. 172800 IN AAAA 2001:678:5::2 02707900000200010002A300000F026E7303636E6303756E6102707900 py. 172800 IN NS ns.cnc.una.py. 02707900000200010002A300000B026E7303646E7302627200 py. 172800 IN NS ns.dns.br. 02707900000200010002A300001B027079056363746C640761757468646E730472697065036E657400 py. 172800 IN NS py.cctld.authdns.ripe.net. 02707900000200010002A300000F036E73320673776974636802636800 py. 172800 IN NS ns2.switch.ch. 02707900000200010002A300000C036E7333036E6963026D7800 py. 172800 IN NS ns3.nic.mx. 02707900000200010002A30000100373636503636E6303756E6102707900 py. 172800 IN NS sce.cnc.una.py. 02707900000200010002A300001206617574683030026E73027575036E657400 py. 172800 IN NS auth00.ns.uu.net. 02707900002F000100015180000C027161000006200000000003 py. 86400 IN NSEC qa. NS RRSIG NSEC 02707900002E0001000151800093002F08010001518052F4220052EAD970837700867EC0AA07D3C608AC83343C10FD61E7A17149DD1E8B156AD94F04351AB643AAAF5942945A4B5640E1D28F8A358C7AE97940C5AC2376F62A87E1C3B43CD9C5CAB406A53CB4AB074C2C13CA1915EA2862CBC81D0E0C60C816B8E49F450428A71A09B351426EDA68EAC9065B63797075FA2B5C5D7310C902AEFC7ED30CBB7AA910 py. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hn7AqgfTxgisgzQ8EP1h56FxSd0eixVq2U8ENRq2Q6qvWUKUWktWQOHSj4o1jHrpeUDFrCN29iqH4cO0PNnFyrQGpTy0qwdMLBPKGRXqKGLLyB0ODGDIFrjkn0UEKKcaCbNRQm7aaOrJBltjeXB1+itcXXMQyQKu/H7TDLt6qRA= ;{id = 33655} 026E7303636E6303756E6102707900000100010002A3000004C80AE484 ns.cnc.una.py. 172800 IN A 200.10.228.132 0373636503636E6303756E6102707900000100010002A3000004C80AE485 sce.cnc.una.py. 172800 IN A 200.10.228.133 02716100000200010002A300000F016108726567697374727902716100 qa. 172800 IN NS a.registry.qa. 02716100000200010002A300000F016208726567697374727902716100 qa. 172800 IN NS b.registry.qa. 02716100000200010002A300000F016308726567697374727902716100 qa. 172800 IN NS c.registry.qa. 02716100000200010002A300000F016408726567697374727902716100 qa. 172800 IN NS d.registry.qa. 02716100000200010002A300000F016508726567697374727902716100 qa. 172800 IN NS e.registry.qa. 02716100000200010002A300000F016608726567697374727902716100 qa. 172800 IN NS f.registry.qa. 02716100000200010002A300000F016708726567697374727902716100 qa. 172800 IN NS g.registry.qa. 02716100000200010002A300000F016808726567697374727902716100 qa. 172800 IN NS h.registry.qa. 02716100000200010002A300000F016908726567697374727902716100 qa. 172800 IN NS i.registry.qa. 02716100000200010002A300000F016A08726567697374727902716100 qa. 172800 IN NS j.registry.qa. 02716100000200010002A300000F016B08726567697374727902716100 qa. 172800 IN NS k.registry.qa. 02716100002F000100015180000C027265000006200000000003 qa. 86400 IN NSEC re. NS RRSIG NSEC 02716100002E0001000151800093002F08010001518052F4220052EAD97083770022BBCF8C2242AE9B0382CE979C1C02F4754A0A638340947EB97685AA110565BFA62413D8E173868522E49C0506C6A666E6BACE39F73E5293F8EAAD74BF9697D71FFFDF7526CA63890FD0B03F3D71FD1F743A619E3314AD1E8182DB4BDC7E08F76F0B4A0EC655F0D1838FC0282B467469AFC8DEB981EEB05601D3D011A8E5D895 qa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IrvPjCJCrpsDgs6XnBwC9HVKCmODQJR+uXaFqhEFZb+mJBPY4XOGhSLknAUGxqZm5rrOOfc+UpP46q10v5aX1x//33UmymOJD9CwPz1x/R90OmGeMxStHoGC20vcfgj3bwtKDsZV8NGDj8AoK0Z0aa/I3rmB7rBWAdPQEajl2JU= ;{id = 33655} 016108726567697374727902716100000100010002A3000004B2171068 a.registry.qa. 172800 IN A 178.23.16.104 016208726567697374727902716100000100010002A3000004B2171168 b.registry.qa. 172800 IN A 178.23.17.104 016308726567697374727902716100000100010002A3000004D44DC00A c.registry.qa. 172800 IN A 212.77.192.10 016408726567697374727902716100000100010002A3000004D44DC00D d.registry.qa. 172800 IN A 212.77.192.13 016508726567697374727902716100000100010002A3000004D44DC00F e.registry.qa. 172800 IN A 212.77.192.15 016608726567697374727902716100000100010002A300000425D1C006 f.registry.qa. 172800 IN A 37.209.192.6 016608726567697374727902716100001C00010002A300001020010DCD000100000000000000000006 f.registry.qa. 172800 IN AAAA 2001:dcd:1::6 016708726567697374727902716100000100010002A300000425D1C206 g.registry.qa. 172800 IN A 37.209.194.6 016708726567697374727902716100001C00010002A300001020010DCD000200000000000000000006 g.registry.qa. 172800 IN AAAA 2001:dcd:2::6 016808726567697374727902716100000100010002A3000004C1000933 h.registry.qa. 172800 IN A 193.0.9.51 016808726567697374727902716100001C00010002A30000102001067C00E000000000000000000051 h.registry.qa. 172800 IN AAAA 2001:67c:e0::51 016908726567697374727902716100000100010002A3000004CC3DD83E i.registry.qa. 172800 IN A 204.61.216.62 016908726567697374727902716100001C00010002A3000010200105000014606200AD000000000001 i.registry.qa. 172800 IN AAAA 2001:500:14:6062:ad::1 016A08726567697374727902716100000100010002A300000426670203 j.registry.qa. 172800 IN A 38.103.2.3 016B08726567697374727902716100000100010002A300000448344703 k.registry.qa. 172800 IN A 72.52.71.3 016B08726567697374727902716100001C00010002A300001020010470001A00000000000000000003 k.registry.qa. 172800 IN AAAA 2001:470:1a::3 02726500000200010002A300000E016403657874036E696302667200 re. 172800 IN NS d.ext.nic.fr. 02726500000200010002A300000A0164036E696302667200 re. 172800 IN NS d.nic.fr. 02726500000200010002A300000E016503657874036E696302667200 re. 172800 IN NS e.ext.nic.fr. 02726500000200010002A300000E016603657874036E696302667200 re. 172800 IN NS f.ext.nic.fr. 02726500000200010002A300000E016703657874036E696302667200 re. 172800 IN NS g.ext.nic.fr. 02726500002B00010001518000244657080291325EB53782EB94B7B6EA3B6FD5F05F86A0247858B160883AF018667101AA1A re. 86400 IN DS 18007 8 2 91325EB53782EB94B7B6EA3B6FD5F05F86A0247858B160883AF018667101AA1A 02726500002B000100015180002469920802FC7F430D839FA81CE34FBBC3C687834184685E3312FA3284354B00AFF6C9F2D2 re. 86400 IN DS 27026 8 2 FC7F430D839FA81CE34FBBC3C687834184685E3312FA3284354B00AFF6C9F2D2 02726500002E0001000151800093002B08010001518052F4220052EAD9708377007D5BCB067DBB7C189AD5A1F8441F383E5AA9974E62837A296A4BE5A458A0AB709416685DD74D284092F519B4A07593EA90A0E37804DDC47142DC3BBB7BE4A121003A6F33164297BF9F388AB33C1733868B70E6AC88FE3E05055D6790FA7D7674468879BBEBCCA1CF5398DF310DF4FB2ECF12247C38382B6D6B725D0AFC3573E8 re. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . fVvLBn27fBia1aH4RB84Plqpl05ig3opakvlpFigq3CUFmhd100oQJL1GbSgdZPqkKDjeATdxHFC3Du7e+ShIQA6bzMWQpe/nziKszwXM4aLcOasiP4+BQVdZ5D6fXZ0Roh5u+vMoc9TmN8xDfT7Ls8SJHw4OCtta3JdCvw1c+g= ;{id = 33655} 02726500002E0001000151800093002F08010001518052F4220052EAD97083770070CC5049E2BBDD66F9B11DF4387A5EE498F176014BD816C6FB755ABC334AA7E78B06A6E91071F08D819E4E364FB61BF1A212CC8C3CBC6390C933B39A12335DD8283E00FD7BEE0268CEB9F336F22D76E0AA0F2D5DE3E790B75976FD5D01F4075CFC4E1FCBA32BF87D8B6672BD4833F8FCB22D78E59F848D480DDC7F542F26654C re. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cMxQSeK73Wb5sR30OHpe5JjxdgFL2BbG+3VavDNKp+eLBqbpEHHwjYGeTjZPthvxohLMjDy8Y5DJM7OaEjNd2Cg+AP177gJozrnzNvItduCqDy1d4+eQt1l2/V0B9Adc/E4fy6Mr+H2LZnK9SDP4/LIteOWfhI1IDdx/VC8mZUw= ;{id = 33655} 02726500002F00010001518000110772656369706573000006200000000013 re. 86400 IN NSEC recipes. NS DS RRSIG NSEC 077265636970657300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 recipes. 172800 IN NS demand.beta.aridns.net.au. 077265636970657300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 recipes. 172800 IN NS demand.alpha.aridns.net.au. 077265636970657300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 recipes. 172800 IN NS demand.delta.aridns.net.au. 077265636970657300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 recipes. 172800 IN NS demand.gamma.aridns.net.au. 077265636970657300002B00010001518000241EE80802BD8F8D2BA244B97C11C8D26B8C5BCDA19294C5E2A1B21BF01D029F849F130D3B recipes. 86400 IN DS 7912 8 2 BD8F8D2BA244B97C11C8D26B8C5BCDA19294C5E2A1B21BF01D029F849F130D3B 077265636970657300002E0001000151800093002B08010001518052F4220052EAD9708377006615BA4C8B9A480DF9004A25D263C2FF31C1B351EE040BFE448EA54729338D69929C779CF838C135ED3EEC23A532B491C528CF29B2C4AA5A511D9D37AE70A6C9A275D9903D3CF4E71688BA237FEB0E5E6676B93C0EF3A5B6046760EA98BA237ADC2DC76A1740B2EE9E520312A9E007F5784A3FF25E1638FE52DB22EEBBE86C59 recipes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZhW6TIuaSA35AEol0mPC/zHBs1HuBAv+RI6lRykzjWmSnHec+DjBNe0+7COlMrSRxSjPKbLEqlpRHZ03rnCmyaJ12ZA9PPTnFoi6I3/rDl5mdrk8DvOltgRnYOqYuiN63C3HahdAsu6eUgMSqeAH9XhKP/JeFjj+Utsi7rvobFk= ;{id = 33655} 077265636970657300002E0001000151800093002F08010001518052F4220052EAD970837700A2F70DF0DB128BD7EE681F1D96975FCB31519E9DB4344318AD0BBE17A396BB882ADD505450AAB25927E37EA30D1DE1E3231FDBAAA1AC582A3F77162474E6E949AA3333DCBD6637ED9725314464BE3A41B03EBCE4672B023C87C8CC23CD4895774FD7CF6F3DDE836F4585B278176B41318650009BDE7ED1955CA3D8A3B7C8F446 recipes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ovcN8NsSi9fuaB8dlpdfyzFRnp20NEMYrQu+F6OWu4gq3VBUUKqyWSfjfqMNHeHjIx/bqqGsWCo/dxYkdObpSaozM9y9ZjftlyUxRGS+OkGwPrzkZysCPIfIzCPNSJV3T9fPbz3eg29FhbJ4F2tBMYZQAJveftGVXKPYo7fI9EY= ;{id = 33655} 077265636970657300002F000100015180000D03726564000006200000000013 recipes. 86400 IN NSEC red. NS DS RRSIG NSEC 0372656400000200010002A300000C026130036E69630372656400 red. 172800 IN NS a0.nic.red. 0372656400000200010002A300000C026132036E69630372656400 red. 172800 IN NS a2.nic.red. 0372656400000200010002A300000C026230036E69630372656400 red. 172800 IN NS b0.nic.red. 0372656400000200010002A300000C026330036E69630372656400 red. 172800 IN NS c0.nic.red. 0372656400002B00010001518000184FCF0701429A68CBBF8ACE08D911071D13FD47892B1EFEF7 red. 86400 IN DS 20431 7 1 429A68CBBF8ACE08D911071D13FD47892B1EFEF7 0372656400002B00010001518000244FCF07027ED8016E603F6E4B0AEBDA756B01AAE19AE9C65D9A8DA32C1FD1CC74BCE999F4 red. 86400 IN DS 20431 7 2 7ED8016E603F6E4B0AEBDA756B01AAE19AE9C65D9A8DA32C1FD1CC74BCE999F4 0372656400002E0001000151800093002B08010001518052F4220052EAD97083770077180E3267C9DC4DA737A9E2802DBDED22A2D80231F4A7920B90333925757B7763BDE1D76D1B30A16F83E50E4546C4070B6C007ADA9B43AD1CAE347EF86FDA70EE2A0EBFD2480B84A051AAE5D50C8F4D9D7FC4A632195F9EEB6A0DBC0C177257A925F771DB7015C772A8F8808562A5A2F2ABC9E26168899CDF16C7A84CC25CB6 red. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dxgOMmfJ3E2nN6nigC297SKi2AIx9KeSC5AzOSV1e3djveHXbRswoW+D5Q5FRsQHC2wAetqbQ60crjR++G/acO4qDr/SSAuEoFGq5dUMj02df8SmMhlfnutqDbwMF3JXqSX3cdtwFcdyqPiAhWKlovKryeJhaImc3xbHqEzCXLY= ;{id = 33655} 0372656400002E0001000151800093002F08010001518052F4220052EAD9708377008A0FC9E5A733F93408B60E8E40D83036E7BF7D239F7B640364ADC1BE74C26B5BC8321E62EEF6CC3110638791D12FD5AECA6E5AF9042B33B8FB069B0DE1AE0C3E221BB161FC380ECB7A9EA1F425D23FDC386787142A59164F6EE125EC1DBFACD57D70080136F4336E8E3667A550F1418F3241ADD97BDBB5E992CBDBE92A8C6BC3 red. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ig/J5acz+TQItg6OQNgwNue/fSOfe2QDZK3BvnTCa1vIMh5i7vbMMRBjh5HRL9Wuym5a+QQrM7j7BpsN4a4MPiIbsWH8OA7Lep6h9CXSP9w4Z4cUKlkWT27hJewdv6zVfXAIATb0M26ONmelUPFBjzJBrdl727Xpksvb6SqMa8M= ;{id = 33655} 0372656400002F000100015180001006726570616972000006200000000013 red. 86400 IN NSEC repair. NS DS RRSIG NSEC 026130036E69630372656400000100010002A300000441162419 a0.nic.red. 172800 IN A 65.22.36.25 026130036E69630372656400001C00010002A30000102A018840002600000000000000000025 a0.nic.red. 172800 IN AAAA 2a01:8840:26::25 026132036E69630372656400000100010002A300000441162719 a2.nic.red. 172800 IN A 65.22.39.25 026132036E69630372656400001C00010002A30000102A018840002900000000000000000025 a2.nic.red. 172800 IN AAAA 2a01:8840:29::25 026230036E69630372656400000100010002A300000441162519 b0.nic.red. 172800 IN A 65.22.37.25 026230036E69630372656400001C00010002A30000102A018840002700000000000000000025 b0.nic.red. 172800 IN AAAA 2a01:8840:27::25 026330036E69630372656400000100010002A300000441162619 c0.nic.red. 172800 IN A 65.22.38.25 026330036E69630372656400001C00010002A30000102A018840002800000000000000000025 c0.nic.red. 172800 IN AAAA 2a01:8840:28::25 0672657061697200000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 repair. 172800 IN NS demand.beta.aridns.net.au. 0672657061697200000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 repair. 172800 IN NS demand.alpha.aridns.net.au. 0672657061697200000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 repair. 172800 IN NS demand.delta.aridns.net.au. 0672657061697200000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 repair. 172800 IN NS demand.gamma.aridns.net.au. 0672657061697200002B00010001518000246FE5080267D9F251132F0B9866A5CFDD96CB41D39C5634150852B2B20C4B876C88726BFD repair. 86400 IN DS 28645 8 2 67D9F251132F0B9866A5CFDD96CB41D39C5634150852B2B20C4B876C88726BFD 0672657061697200002E0001000151800093002B08010001518052F4220052EAD970837700BD9EF1A724718BB87DD6793C5BF8C0A4880B783B1EB620A131C8222C54924A0F0596DFBEC0535FE28D1F1E16C6B231C15CE06D25D91CD70C50BE8641764F06E57923878C73217FF1BA842CB76E8BFD03D601FFD64566F8956C0B386E0D22C2B849BE925C9B67492C21EE5DB7B8C71D416590954838E536F43B1CDCCD305CAF23 repair. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vZ7xpyRxi7h91nk8W/jApIgLeDsetiChMcgiLFSSSg8Flt++wFNf4o0fHhbGsjHBXOBtJdkc1wxQvoZBdk8G5Xkjh4xzIX/xuoQst26L/QPWAf/WRWb4lWwLOG4NIsK4Sb6SXJtnSSwh7l23uMcdQWWQlUg45Tb0OxzczTBcryM= ;{id = 33655} 0672657061697200002E0001000151800093002F08010001518052F4220052EAD9708377006C81276DA4C87B31275DF3430FB7B69F76023D706AC6A13ECC96D1E35F5A804BF0134E7A3282BB1C48411B8CC3906D4D9860F8D27882B6BA1E5D4171F5C9519683E83EF8F93330C041D07614BAD6925279BCA183B78116511630847E3DC6842CAA64C3FBF62532F47BB26C493543601D55CBD60B649D43E76E2035237C58BE64 repair. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bIEnbaTIezEnXfNDD7e2n3YCPXBqxqE+zJbR419agEvwE056MoK7HEhBG4zDkG1NmGD40niCtroeXUFx9clRloPoPvj5MzDAQdB2FLrWklJ5vKGDt4EWURYwhH49xoQsqmTD+/YlMvR7smxJNUNgHVXL1gtknUPnbiA1I3xYvmQ= ;{id = 33655} 0672657061697200002F000100015180000E0472696368000006200000000013 repair. 86400 IN NSEC rich. NS DS RRSIG NSEC 047269636800000200010002A300000D026130036E6963047269636800 rich. 172800 IN NS a0.nic.rich. 047269636800000200010002A300000D026132036E6963047269636800 rich. 172800 IN NS a2.nic.rich. 047269636800000200010002A300000D026230036E6963047269636800 rich. 172800 IN NS b0.nic.rich. 047269636800000200010002A300000D026330036E6963047269636800 rich. 172800 IN NS c0.nic.rich. 047269636800002B0001000151800018C264070175DDCB6A3233AD81CD65DF3138D299592937DA35 rich. 86400 IN DS 49764 7 1 75DDCB6A3233AD81CD65DF3138D299592937DA35 047269636800002B0001000151800024C2640702AE19443051C6CBCBB411285F529394ECBAABCC764810B4D1117C76DB6635F74B rich. 86400 IN DS 49764 7 2 AE19443051C6CBCBB411285F529394ECBAABCC764810B4D1117C76DB6635F74B 047269636800002E0001000151800093002B08010001518052F4220052EAD9708377008697F3649273EE647AAFDF10734735EF61FE79B7AF7634FFA205295AC6897DCDE0632F8D13B157F8A5390ED430DAE73CA0D8EB2DB34649498292C0C3B182BBD4B00EE8B12EDFCD039FB318BC82E526A2994A9A96FCAA6771ECD252E2B4E5AB8EFC4FC1EAC237E51ED2FEDE0FDF6242B0FF25A344D5B6FFE71A286DDBC040642E rich. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hpfzZJJz7mR6r98Qc0c172H+ebevdjT/ogUpWsaJfc3gYy+NE7FX+KU5DtQw2uc8oNjrLbNGSUmCksDDsYK71LAO6LEu380Dn7MYvILlJqKZSpqW/KpncezSUuK05auO/E/B6sI35R7S/t4P32JCsP8lo0TVtv/nGiht28BAZC4= ;{id = 33655} 047269636800002E0001000151800093002F08010001518052F4220052EAD9708377003FD0DCF1BDB2BE64AD2281C14E5B65A35B0CB0E87DCCD1CCAE0CDC98876105AEF3A4FC45809C9FFE7C468BAAE46756BE62874F0C60085C32473675AF507DE753DCE069B826D3868AFAEE23F9D765C0F91B1551FD23BE6129F05F99DA76F08571105B2C1A36376952539E2B25E99C92DDC954C30B1CEE149C2C9277E4491958F8 rich. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P9Dc8b2yvmStIoHBTltlo1sMsOh9zNHMrgzcmIdhBa7zpPxFgJyf/nxGi6rkZ1a+YodPDGAIXDJHNnWvUH3nU9zgabgm04aK+u4j+ddlwPkbFVH9I75hKfBfmdp28IVxEFssGjY3aVJTnisl6ZyS3clUwwsc7hScLJJ35EkZWPg= ;{id = 33655} 047269636800002F000100015180000C02726F000006200000000013 rich. 86400 IN NSEC ro. NS DS RRSIG NSEC 026130036E6963047269636800000100010002A300000441168811 a0.nic.rich. 172800 IN A 65.22.136.17 026130036E6963047269636800001C00010002A30000102A018840008600000000000000000017 a0.nic.rich. 172800 IN AAAA 2a01:8840:86::17 026132036E6963047269636800000100010002A300000441168B11 a2.nic.rich. 172800 IN A 65.22.139.17 026132036E6963047269636800001C00010002A30000102A018840008900000000000000000017 a2.nic.rich. 172800 IN AAAA 2a01:8840:89::17 026230036E6963047269636800000100010002A300000441168911 b0.nic.rich. 172800 IN A 65.22.137.17 026230036E6963047269636800001C00010002A30000102A018840008700000000000000000017 b0.nic.rich. 172800 IN AAAA 2a01:8840:87::17 026330036E6963047269636800000100010002A300000441168A11 c0.nic.rich. 172800 IN A 65.22.138.17 026330036E6963047269636800001C00010002A30000102A018840008800000000000000000017 c0.nic.rich. 172800 IN AAAA 2a01:8840:88::17 02726F00002F000100015180000C027273000006200000000003 ro. 86400 IN NSEC rs. NS RRSIG NSEC 02726F00002E0001000151800093002F08010001518052F4220052EAD9708377001C1673004F0306E84FBB8BE9815F71011C8071398B9E32341BF571DE5CAF4F872F14BCB7FCC4FD6EF7F06E2926F4DEDF5DA51D580B1BECBC96DC0D932C9E4A7A385C1B1E09854DC506A9F864A4CB821E08417FB72C70648D485994AABB4C58318408C68D9A7A10B4D402B6414F8FB7F209063E742E1891F5F106B6C14845BFDA ro. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HBZzAE8DBuhPu4vpgV9xARyAcTmLnjI0G/Vx3lyvT4cvFLy3/MT9bvfwbikm9N7fXaUdWAsb7LyW3A2TLJ5KejhcGx4JhU3FBqn4ZKTLgh4IQX+3LHBkjUhZlKq7TFgxhAjGjZp6ELTUArZBT4+38gkGPnQuGJH18Qa2wUhFv9o= ;{id = 33655} 02726F00000200010002A300001106646E732D617405726F746C6402726F00 ro. 172800 IN NS dns-at.rotld.ro. 02726F00000200010002A300001106646E732D726F0564656E696302646500 ro. 172800 IN NS dns-ro.denic.de. 02726F00000200010002A3000010066E732D65787403697363036F726700 ro. 172800 IN NS ns-ext.isc.org. 02726F00000200010002A3000012077072696D61727905726F746C6402726F00 ro. 172800 IN NS primary.rotld.ro. 02726F00000200010002A3000014097365632D646E732D6105726F746C6402726F00 ro. 172800 IN NS sec-dns-a.rotld.ro. 02726F00000200010002A3000014097365632D646E732D6205726F746C6402726F00 ro. 172800 IN NS sec-dns-b.rotld.ro. 06646E732D617405726F746C6402726F00000100010002A30000044E689106 dns-at.rotld.ro. 172800 IN A 78.104.145.6 06646E732D617405726F746C6402726F00001C00010002A300001020010628045300BB0000000000000006 dns-at.rotld.ro. 172800 IN AAAA 2001:628:453:bb::6 06646E732D6D6405726F746C6402726F00000100010002A3000004C0A21013 dns-md.rotld.ro. 172800 IN A 192.162.16.19 06646E732D6D6405726F746C6402726F00001C00010002A30000102A035E80000000040192016200160019 dns-md.rotld.ro. 172800 IN AAAA 2a03:5e80:0:4:192:162:16:19 077072696D61727905726F746C6402726F00000100010002A3000004C0A21012 primary.rotld.ro. 172800 IN A 192.162.16.18 077072696D61727905726F746C6402726F00001C00010002A30000102A035E80000000040192016200160018 primary.rotld.ro. 172800 IN AAAA 2a03:5e80:0:4:192:162:16:18 097365632D646E732D6105726F746C6402726F00000100010002A3000004C0A21014 sec-dns-a.rotld.ro. 172800 IN A 192.162.16.20 097365632D646E732D6105726F746C6402726F00001C00010002A30000102A035E80000000040192016200160020 sec-dns-a.rotld.ro. 172800 IN AAAA 2a03:5e80:0:4:192:162:16:20 097365632D646E732D6205726F746C6402726F00000100010002A3000004C1E61FE6 sec-dns-b.rotld.ro. 172800 IN A 193.230.31.230 097365632D646E732D6205726F746C6402726F00001C00010002A30000102A035E80000000050193023000310230 sec-dns-b.rotld.ro. 172800 IN AAAA 2a03:5e80:0:5:193:230:31:230 02727300000200010002A300000A0161036E696302727300 rs. 172800 IN NS a.nic.rs. 02727300000200010002A300000A0162036E696302727300 rs. 172800 IN NS b.nic.rs. 02727300000200010002A300000A0164036E696302727300 rs. 172800 IN NS d.nic.rs. 02727300000200010002A300000A0166036E696302727300 rs. 172800 IN NS f.nic.rs. 02727300000200010002A300000A0167036E696302727300 rs. 172800 IN NS g.nic.rs. 02727300000200010002A300000A0168036E696302727300 rs. 172800 IN NS h.nic.rs. 02727300000200010002A300000A016B036E696302727300 rs. 172800 IN NS k.nic.rs. 02727300000200010002A300000A016C036E696302727300 rs. 172800 IN NS l.nic.rs. 02727300002F000100015180000C027275000006200000000003 rs. 86400 IN NSEC ru. NS RRSIG NSEC 02727300002E0001000151800093002F08010001518052F4220052EAD9708377002499E68042432EC13F18BC7A10AEE4FAAADEC946FE91B81895039BF84D2AE005542DE567759DF5787C749EA56BBD9EF0570664108F054B213D572767701B29673123DE3C6334601320D17ACD1E0518C703C91B079DA89D657885AB372A1ADB5C254F0D1419B8FCCCA772793C4274CC31C69A5C14879D1A119D8FF751BB021A01 rs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . JJnmgEJDLsE/GLx6EK7k+qreyUb+kbgYlQOb+E0q4AVULeVndZ31eHx0nqVrvZ7wVwZkEI8FSyE9VydncBspZzEj3jxjNGATINF6zR4FGMcDyRsHnaidZXiFqzcqGttcJU8NFBm4/Myncnk8QnTMMcaaXBSHnRoRnY/3UbsCGgE= ;{id = 33655} 0161036E696302727300000100010002A30000045BC7113B a.nic.rs. 172800 IN A 91.199.17.59 0162036E696302727300000100010002A3000004C3B22002 b.nic.rs. 172800 IN A 195.178.32.2 0164036E696302727300000100010002A3000004C100096B d.nic.rs. 172800 IN A 193.0.9.107 0164036E696302727300001C00010002A30000102001067C00E000000000000000000107 d.nic.rs. 172800 IN AAAA 2001:67c:e0::107 0166036E696302727300000100010002A3000004CC3DD820 f.nic.rs. 172800 IN A 204.61.216.32 0166036E696302727300001C00010002A3000010200105000014603200AD000000000001 f.nic.rs. 172800 IN AAAA 2001:500:14:6032:ad::1 0167036E696302727300000100010002A3000004935B0806 g.nic.rs. 172800 IN A 147.91.8.6 0168036E696302727300000100010002A30000045BC7113C h.nic.rs. 172800 IN A 91.199.17.60 016B036E696302727300000100010002A3000004C0050401 k.nic.rs. 172800 IN A 192.5.4.1 016B036E696302727300001C00010002A300001020010500002E00000000000000000001 k.nic.rs. 172800 IN AAAA 2001:500:2e::1 016C036E696302727300000100010002A3000004C2926A72 l.nic.rs. 172800 IN A 194.146.106.114 016C036E696302727300001C00010002A30000102001067C101000290000000000000053 l.nic.rs. 172800 IN AAAA 2001:67c:1010:29::53 02727500000200010002A3000010016103646E73047269706E036E657400 ru. 172800 IN NS a.dns.ripn.net. 02727500000200010002A3000010016203646E73047269706E036E657400 ru. 172800 IN NS b.dns.ripn.net. 02727500000200010002A3000010016403646E73047269706E036E657400 ru. 172800 IN NS d.dns.ripn.net. 02727500000200010002A3000010016503646E73047269706E036E657400 ru. 172800 IN NS e.dns.ripn.net. 02727500000200010002A3000010016603646E73047269706E036E657400 ru. 172800 IN NS f.dns.ripn.net. 02727500002B0001000151800024C848080213ECAF18251EEC90C6BC8F16E2730F1F597F6D7E406C4A8FF1D4FD7D760D6EEE ru. 86400 IN DS 51272 8 2 13ECAF18251EEC90C6BC8F16E2730F1F597F6D7E406C4A8FF1D4FD7D760D6EEE 02727500002E0001000151800093002B08010001518052F4220052EAD97083770047398CA39FB0FA125D024B75B1428B425183292C452F547232C421DEDF9E101215E84440B13F7B99D19FCAB74807F8F6135238D0FB8477D8D34399663456639FC5BFE9D1A37F625AAC8B8542AB5AAC6AD967FE22EEABFA3C50DFD362295498FC08741770FE3E67A8836F0E2F02D2285B6FF1554779D062C293D110E3721751B2 ru. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . RzmMo5+w+hJdAkt1sUKLQlGDKSxFL1RyMsQh3t+eEBIV6ERAsT97mdGfyrdIB/j2E1I40PuEd9jTQ5lmNFZjn8W/6dGjf2JarIuFQqtarGrZZ/4i7qv6PFDf02IpVJj8CHQXcP4+Z6iDbw4vAtIoW2/xVUd50GLCk9EQ43IXUbI= ;{id = 33655} 02727500002E0001000151800093002F08010001518052F4220052EAD9708377009C8F77E156714FBFF9B0C71D1C74F65F851ABFB5215B5167314E85D41A09C4B532B756244C00F092EB112BE95653FCE575DC03B2DEF50786C83F28BB52819CCFA2FC40A908C100CCC1C9E135F9ECC526CCE880D40654AD7ED660ECEA511369D9011406A626DF8EF1F0BA7E2146FD1584F245145CF832635CFC8E66F68ED67F82 ru. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nI934VZxT7/5sMcdHHT2X4Uav7UhW1FnMU6F1BoJxLUyt1YkTADwkusRK+lWU/zlddwDst71B4bIPyi7UoGcz6L8QKkIwQDMwcnhNfnsxSbM6IDUBlStftZg7OpRE2nZARQGpibfjvHwun4hRv0VhPJFFFz4MmNc/I5m9o7Wf4I= ;{id = 33655} 02727500002F000100015180000E0472756872000006200000000013 ru. 86400 IN NSEC ruhr. NS DS RRSIG NSEC 047275687200000200010002A300001608616E7963617374390769726F6E646E73036E657400 ruhr. 172800 IN NS anycast9.irondns.net. 047275687200000200010002A300001709616E796361737431300769726F6E646E73036E657400 ruhr. 172800 IN NS anycast10.irondns.net. 047275687200000200010002A300001709616E796361737432330769726F6E646E73036E657400 ruhr. 172800 IN NS anycast23.irondns.net. 047275687200000200010002A300001709616E796361737432340769726F6E646E73036E657400 ruhr. 172800 IN NS anycast24.irondns.net. 047275687200002B0001000151800024622B0A02EC453960C396742EFA2EF815FA9C9DBA146E838F86F11643704C1630424F4E78 ruhr. 86400 IN DS 25131 10 2 EC453960C396742EFA2EF815FA9C9DBA146E838F86F11643704C1630424F4E78 047275687200002E0001000151800093002B08010001518052F4220052EAD9708377007EE9C5918B4991172864D072A55DF93019DFE556EA18A90DB0BCCFA97CF7D374F9052441230EC049B765D33ECD8EAC9B527196D96E1988644A1D94D9046C2F637DE5630C2470E54E1AC111DFBD63DE617F89B99071ADEAADDDD64172F0E760852A3FA5175234CE269EC15342EA01543FA8A4289ACE7A6EE9466505E07F3C28DC ruhr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . funFkYtJkRcoZNBypV35MBnf5VbqGKkNsLzPqXz303T5BSRBIw7ASbdl0z7NjqybUnGW2W4ZiGRKHZTZBGwvY33lYwwkcOVOGsER371j3mF/ibmQca3qrd3WQXLw52CFKj+lF1I0ziaewVNC6gFUP6ikKJrOem7pRmUF4H88KNw= ;{id = 33655} 047275687200002E0001000151800093002F08010001518052F4220052EAD970837700AD303E367EC34CA886361E8CDBB47E95D2A42DBEE0EC84976AAC5835F26A000A65C19FC9C5303A5A5AFC3DBA43FB706F9EE06D8D9CB454AC9EB9FCD29984C045BF1D6BC185D0B35E7ADD26132C1142A018A953C5930B5EE85C2F179916F2F1654388A623EC15B624EF8F18A13FF5235C1F9DEB07CCBE1A5A260B504A1F1B6123 ruhr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rTA+Nn7DTKiGNh6M27R+ldKkLb7g7ISXaqxYNfJqAAplwZ/JxTA6Wlr8PbpD+3BvnuBtjZy0VKyeufzSmYTARb8da8GF0LNeet0mEywRQqAYqVPFkwte6FwvF5kW8vFlQ4imI+wVtiTvjxihP/UjXB+d6wfMvhpaJgtQSh8bYSM= ;{id = 33655} 047275687200002F000100015180000C027277000006200000000013 ruhr. 86400 IN NSEC rw. NS DS RRSIG NSEC 02727700000200010002A3000012036E7331057269637461036F726702727700 rw. 172800 IN NS ns1.ricta.org.rw. 02727700000200010002A300001604666F726B0373746807646E736E6F6465036E657400 rw. 172800 IN NS fork.sth.dnsnode.net. 02727700000200010002A3000013056E732D727707616672696E6963036E657400 rw. 172800 IN NS ns-rw.afrinic.net. 02727700000200010002A300001006736E732D706203697363036F726700 rw. 172800 IN NS sns-pb.isc.org. 02727700002F000100015180000C027361000006200000000003 rw. 86400 IN NSEC sa. NS RRSIG NSEC 02727700002E0001000151800093002F08010001518052F4220052EAD9708377006CFFD4D5706882224A8511CD8C77132FD62E2F4EBD64E1023BD58CD6F6FAC22FE994EA5BC01412DAB4F511C8E539384575E3A17A5B36BD0BF88600C63C81C9783E417A706C2864DBEC5C52B0EAC577C739C0E5F706C7AA11F93D154711B5393941EA83EA48114E48252E216E3C14C44E62637EB46CBFB3359DC787F04420F7C6 rw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bP/U1XBogiJKhRHNjHcTL9YuL069ZOECO9WM1vb6wi/plOpbwBQS2rT1EcjlOThFdeOhels2vQv4hgDGPIHJeD5BenBsKGTb7FxSsOrFd8c5wOX3BseqEfk9FUcRtTk5QeqD6kgRTkglLiFuPBTETmJjfrRsv7M1nceH8EQg98Y= ;{id = 33655} 036E7331057269637461036F726702727700000100010002A3000004294AADFA ns1.ricta.org.rw. 172800 IN A 41.74.173.250 02736100000200010002A300001B027361056363746C640761757468646E730472697065036E657400 sa. 172800 IN NS sa.cctld.authdns.ripe.net. 02736100000200010002A3000010036E733103697375036E657402736100 sa. 172800 IN NS ns1.isu.net.sa. 02736100000200010002A3000010036E7331036E6963036E657402736100 sa. 172800 IN NS ns1.nic.net.sa. 02736100000200010002A3000010036E7332036E6963036E657402736100 sa. 172800 IN NS ns2.nic.net.sa. 02736100000200010002A300000D037269700370736703636F6D00 sa. 172800 IN NS rip.psg.com. 02736100000200010002A30000170573612D6E7307616E796361737403706368036E657400 sa. 172800 IN NS sa-ns.anycast.pch.net. 02736100002F000100015180000C027362000006200000000003 sa. 86400 IN NSEC sb. NS RRSIG NSEC 02736100002E0001000151800093002F08010001518052F4220052EAD970837700B6CE6C48FB6BFD0EC8CA1F93E27640DB81038A3FCAA80001D1BEF025542DF0B18230A28D58967779825932A7365DBBE04C9E16DD8484D89DFE5AE7399186DF530585A1089CE1C713537DE70EEDB35AF96BD8E15BDCA82705E7B8B0890C04A2A15C020FC7BC00F7755FB42B615F6F321CC03107765E8D29201D94BB507183EA0C sa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ts5sSPtr/Q7Iyh+T4nZA24EDij/KqAAB0b7wJVQt8LGCMKKNWJZ3eYJZMqc2XbvgTJ4W3YSE2J3+Wuc5kYbfUwWFoQic4ccTU33nDu2zWvlr2OFb3KgnBee4sIkMBKKhXAIPx7wA93VftCthX28yHMAxB3ZejSkgHZS7UHGD6gw= ;{id = 33655} 036E733103697375036E657402736100000100010002A3000004D41A1203 ns1.isu.net.sa. 172800 IN A 212.26.18.3 036E733103697375036E657402736100001C00010002A300001020011490000008000000000000000003 ns1.isu.net.sa. 172800 IN AAAA 2001:1490:0:800::3 036E7331036E6963036E657402736100000100010002A3000004566FC009 ns1.nic.net.sa. 172800 IN A 86.111.192.9 036E7331036E6963036E657402736100001C00010002A30000102001067C013004100000000000000009 ns1.nic.net.sa. 172800 IN AAAA 2001:67c:130:410::9 036E7332036E6963036E657402736100000100010002A3000004566FC409 ns2.nic.net.sa. 172800 IN A 86.111.196.9 036E7332036E6963036E657402736100001C00010002A30000102001067C013000100000000000000009 ns2.nic.net.sa. 172800 IN AAAA 2001:67c:130:10::9 02736200000200010002A300000C03706368036E696302736200 sb. 172800 IN NS pch.nic.sb. 02736200000200010002A3000010037362310664796E746C64036E657400 sb. 172800 IN NS sb1.dyntld.net. 02736200000200010002A3000010037362330664796E746C64036E657400 sb. 172800 IN NS sb3.dyntld.net. 02736200000200010002A300001006736E732D706203697363036F726700 sb. 172800 IN NS sns-pb.isc.org. 02736200002B000100015180002444E3080227F59686A15B09DC8293FAC9C31E5BE51ABF214E1E9CD5B21CBE50F0F311C780 sb. 86400 IN DS 17635 8 2 27F59686A15B09DC8293FAC9C31E5BE51ABF214E1E9CD5B21CBE50F0F311C780 02736200002E0001000151800093002B08010001518052F4220052EAD970837700BC3BE0B1FA3AEE7C6B2C7B1B0B7808CC12D6F942B7223F48FACB2CF0E56E174BBF372E4C6068919EACA3BDEA58D7CC52A4E994242634D7550AC28AF4CB570DEA061CB550B697C8DDA079211FA960BBEC081173BCD57A3352116642CFDA0DE2ABA368A81C1C9DE5DFF86464E860FC54566261180CBA68B5B2C45426DEC0A0446A sb. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vDvgsfo67nxrLHsbC3gIzBLW+UK3Ij9I+sss8OVuF0u/Ny5MYGiRnqyjvepY18xSpOmUJCY011UKwor0y1cN6gYctVC2l8jdoHkhH6lgu+wIEXO81XozUhFmQs/aDeKro2ioHByd5d/4ZGToYPxUVmJhGAy6aLWyxFQm3sCgRGo= ;{id = 33655} 02736200002E0001000151800093002F08010001518052F4220052EAD9708377003789474C5CEB8C3C7B692A717D8818FB12090F06AE13D07A8E0C127379D5E8D63800A046A6C8C6E6B8F506FC53CB5400C0FC2F693986D6B4ED3D4FA0DF10A0F54D590AFDC79189B2111337B0D9AE231C30786CDC5699C7581896AD5EDE070110D753BD8A1B984199C5A8738A52060E5A0A6BE895DE8836468C2A4924C042151B sb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . N4lHTFzrjDx7aSpxfYgY+xIJDwauE9B6jgwSc3nV6NY4AKBGpsjG5rj1BvxTy1QAwPwvaTmG1rTtPU+g3xCg9U1ZCv3HkYmyERM3sNmuIxwweGzcVpnHWBiWrV7eBwEQ11O9ihuYQZnFqHOKUgYOWgpr6JXeiDZGjCpJJMBCFRs= ;{id = 33655} 02736200002F000100015180000C027363000006200000000013 sb. 86400 IN NSEC sc. NS DS RRSIG NSEC 03706368036E696302736200000100010002A3000004CC3DD81F pch.nic.sb. 172800 IN A 204.61.216.31 03706368036E696302736200001C00010002A3000010200105000014603100AD000000000001 pch.nic.sb. 172800 IN AAAA 2001:500:14:6031:ad::1 02736300000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 sc. 172800 IN NS a0.cctld.afilias-nst.info. 02736300000200010002A300001B026132056363746C640B6166696C6961732D6E737404696E666F00 sc. 172800 IN NS a2.cctld.afilias-nst.info. 02736300000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 sc. 172800 IN NS b0.cctld.afilias-nst.org. 02736300000200010002A300001A026232056363746C640B6166696C6961732D6E7374036F726700 sc. 172800 IN NS b2.cctld.afilias-nst.org. 02736300000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 sc. 172800 IN NS c0.cctld.afilias-nst.info. 02736300000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 sc. 172800 IN NS d0.cctld.afilias-nst.org. 02736300000200010002A300000C036E7331036E696302736300 sc. 172800 IN NS ns1.nic.sc. 02736300002B000100015180001880B907012989C1B61462537A50928B77A85E2AD373C50B66 sc. 86400 IN DS 32953 7 1 2989C1B61462537A50928B77A85E2AD373C50B66 02736300002B000100015180002480B90702E85C14114B092BF9D0B21C804CA878618BEE750ED714092180D59A2001C3708C sc. 86400 IN DS 32953 7 2 E85C14114B092BF9D0B21C804CA878618BEE750ED714092180D59A2001C3708C 02736300002E0001000151800093002B08010001518052F4220052EAD97083770095A4FC5A946CC811BA68A178CC1A88F845A5E302E25F466672B66815E43DE04680585C12A84C84DD375EE14768D42351968191799CC614025F1116129BCFDD3F79CE88E231FEB88AAF00691180A4FF9211191B7A72AF6380DE9E622DB1CB519445F7AB70ADF21F6C528EC61B6D9C1501E12BF5241D9FB55E70C7593136D1E3B5 sc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . laT8WpRsyBG6aKF4zBqI+EWl4wLiX0ZmcrZoFeQ94EaAWFwSqEyE3Tde4Udo1CNRloGReZzGFAJfERYSm8/dP3nOiOIx/riKrwBpEYCk/5IRGRt6cq9jgN6eYi2xy1GURfercK3yH2xSjsYbbZwVAeEr9SQdn7VecMdZMTbR47U= ;{id = 33655} 02736300002E0001000151800093002F08010001518052F4220052EAD97083770023231D8DEAB39806AC552961530C7929072E439DD274956ABFC256E4F388F5ABD8AB0B8BFACD0472BF77E3212D53EB12965F704C6E99E147C138961FB6FB36E3775A9E2FC2217F8CD150FAD4B56F3D7A01CA02BC11F4CD9A488B5A6C66C88E7BB5E4FC2F64D5A2FEE8082688FBD33F7296B100A7ACC26E732B82A8132858592C sc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IyMdjeqzmAasVSlhUwx5KQcuQ53SdJVqv8JW5POI9avYqwuL+s0Ecr934yEtU+sSll9wTG6Z4UfBOJYftvs243dani/CIX+M0VD61LVvPXoBygK8EfTNmkiLWmxmyI57teT8L2TVov7oCCaI+9M/cpaxAKeswm5zK4KoEyhYWSw= ;{id = 33655} 02736300002F000100015180000C027364000006200000000013 sc. 86400 IN NSEC sd. NS DS RRSIG NSEC 036E7331036E696302736300000100010002A300000429BF7981 ns1.nic.sc. 172800 IN A 41.191.121.129 02736400000200010002A300001B027364056363746C640761757468646E730472697065036E657400 sd. 172800 IN NS sd.cctld.authdns.ripe.net. 02736400000200010002A3000011036E733104636F7A61036E6574027A6100 sd. 172800 IN NS ns1.coza.net.za. 02736400000200010002A300000F036E7331067561656E696302616500 sd. 172800 IN NS ns1.uaenic.ae. 02736400000200010002A300000F036E7332067561656E696302616500 sd. 172800 IN NS ns2.uaenic.ae. 02736400000200010002A300000D04616E73310373697302736400 sd. 172800 IN NS ans1.sis.sd. 02736400000200010002A300000F04616E73310563616E617202736400 sd. 172800 IN NS ans1.canar.sd. 02736400000200010002A300000F04616E73320563616E617202736400 sd. 172800 IN NS ans2.canar.sd. 02736400000200010002A3000013056E732D736407616672696E6963036E657400 sd. 172800 IN NS ns-sd.afrinic.net. 02736400002F000100015180000C027365000006200000000003 sd. 86400 IN NSEC se. NS RRSIG NSEC 02736400002E0001000151800093002F08010001518052F4220052EAD970837700588607A12DA353C59C46235F1029E746B40A44D24558EAF257998F1F729A4D93AAA6B4958648D49BA46C193682B66956F59F2762688C212FF3E26D191984DE1CE45864403C2D044F6065765C23EC23894FE3650D66F03CCEA849673BAC0B52EAD01C40578EC45A4463E8E690500F95FCDE462FE34048F5BD2F70AF7AEC537B39 sd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WIYHoS2jU8WcRiNfECnnRrQKRNJFWOryV5mPH3KaTZOqprSVhkjUm6RsGTaCtmlW9Z8nYmiMIS/z4m0ZGYTeHORYZEA8LQRPYGV2XCPsI4lP42UNZvA8zqhJZzusC1Lq0BxAV47EWkRj6OaQUA+V/N5GL+NASPW9L3CveuxTezk= ;{id = 33655} 04616E73310563616E617202736400000100010002A3000004C41DB40E ans1.canar.sd. 172800 IN A 196.29.180.14 04616E73320563616E617202736400000100010002A3000004C41DA40E ans2.canar.sd. 172800 IN A 196.29.164.14 04616E73310373697302736400000100010002A3000004C41DA686 ans1.sis.sd. 172800 IN A 196.29.166.134 02736500002F000100015180000E0473657879000006200000000013 se. 86400 IN NSEC sexy. NS DS RRSIG NSEC 02736500002E0001000151800093002F08010001518052F4220052EAD970837700488C9F74BF909F75F4978632ACC593A293ADCB253B0A36AB5D19B0DB5CDA088BD282CD8905933F0A9E4977834946088326562594C6655AEA8EA4658F60B4C836B5D6102CEFCED920D3573734310AC7A41FC172F3D8FEA54DE5439AB465445A2B90018569EB4017A2BE18B8048378219DE7FE1E994F6947439B8657D92F302CC6 se. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SIyfdL+Qn3X0l4YyrMWTopOtyyU7CjarXRmw21zaCIvSgs2JBZM/Cp5Jd4NJRgiDJlYllMZlWuqOpGWPYLTINrXWECzvztkg01c3NDEKx6QfwXLz2P6lTeVDmrRlRForkAGFaetAF6K+GLgEg3ghnef+HplPaUdDm4ZX2S8wLMY= ;{id = 33655} 02736500002E0001000151800093002B08010001518052F4220052EAD970837700BCEC5B859D3144FCD70FCEC7D5FA79D19AB86EF0E5390872A32E050A860FB7FD64F96D97EA9E0DB875AF5A1745977C8EA955B1445E945FCA0362CB377C96D475DAE087D183D3926CDCD410C264755CBAD0B285CEA28BDD95B46826359E1A896CDE0A501DC9E16EE6FE0195727ACE7BF3984BBD8D54ED4CADC949E45B9E033D0B se. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vOxbhZ0xRPzXD87H1fp50Zq4bvDlOQhyoy4FCoYPt/1k+W2X6p4NuHWvWhdFl3yOqVWxRF6UX8oDYss3fJbUddrgh9GD05Js3NQQwmR1XLrQsoXOoovdlbRoJjWeGols3gpQHcnhbub+AZVyes5785hLvY1U7UytyUnkW54DPQs= ;{id = 33655} 02736500000200010002A30000090161026E7302736500 se. 172800 IN NS a.ns.se. 02736500000200010002A30000090162026E7302736500 se. 172800 IN NS b.ns.se. 02736500000200010002A30000090163026E7302736500 se. 172800 IN NS c.ns.se. 02736500000200010002A30000090164026E7302736500 se. 172800 IN NS d.ns.se. 02736500000200010002A30000090165026E7302736500 se. 172800 IN NS e.ns.se. 02736500000200010002A30000090166026E7302736500 se. 172800 IN NS f.ns.se. 02736500000200010002A30000090167026E7302736500 se. 172800 IN NS g.ns.se. 02736500000200010002A30000090169026E7302736500 se. 172800 IN NS i.ns.se. 02736500000200010002A3000009016A026E7302736500 se. 172800 IN NS j.ns.se. 02736500002B0001000151800024E963050244388B3DE9A22CAFA8A12883F60A0F984472D0DFEF0F63ED59A29BE018658B28 se. 86400 IN DS 59747 5 2 44388B3DE9A22CAFA8A12883F60A0F984472D0DFEF0F63ED59A29BE018658B28 0161026E7302736500000100010002A3000004C024906B a.ns.se. 172800 IN A 192.36.144.107 0161026E7302736500001C00010002A30000102A0103F0000003010000000000000053 a.ns.se. 172800 IN AAAA 2a01:3f0:0:301::53 0162026E7302736500000100010002A3000004C024856B b.ns.se. 172800 IN A 192.36.133.107 0162026E7302736500001C00010002A30000102001067C254C03010000000000000053 b.ns.se. 172800 IN AAAA 2001:67c:254c:301::53 0163026E7302736500000100010002A3000004C024876B c.ns.se. 172800 IN A 192.36.135.107 0163026E7302736500001C00010002A30000102001067C255403010000000000000053 c.ns.se. 172800 IN AAAA 2001:67c:2554:301::53 0164026E7302736500000100010002A300000451E40810 d.ns.se. 172800 IN A 81.228.8.16 0165026E7302736500000100010002A300000451E40A39 e.ns.se. 172800 IN A 81.228.10.57 0166026E7302736500000100010002A3000004C0473535 f.ns.se. 172800 IN A 192.71.53.53 0166026E7302736500001C00010002A30000102A0103F0000003050000000000000053 f.ns.se. 172800 IN AAAA 2a01:3f0:0:305::53 0167026E7302736500000100010002A300000482EF0572 g.ns.se. 172800 IN A 130.239.5.114 0167026E7302736500001C00010002A3000010200106B0000E00030000000000000001 g.ns.se. 172800 IN AAAA 2001:6b0:e:3::1 0169026E7302736500000100010002A3000004C2926A16 i.ns.se. 172800 IN A 194.146.106.22 0169026E7302736500001C00010002A30000102001067C101000050000000000000053 i.ns.se. 172800 IN AAAA 2001:67c:1010:5::53 016A026E7302736500000100010002A3000004C7FE3F01 j.ns.se. 172800 IN A 199.254.63.1 016A026E7302736500001C00010002A300001020010500002C00000000000000000001 j.ns.se. 172800 IN AAAA 2001:500:2c::1 0573756E69630573756E657402736500000100010002A3000004C0247D02 sunic.sunet.se. 172800 IN A 192.36.125.2 0573756E69630573756E657402736500001C00010002A3000010200106B0000700000000000000000002 sunic.sunet.se. 172800 IN AAAA 2001:6b0:7::2 047365787900000200010002A30000160161026E730B756E697265676973747279036E657400 sexy. 172800 IN NS a.ns.uniregistry.net. 047365787900000200010002A300001103746C64076973632D736E7303636F6D00 sexy. 172800 IN NS tld.isc-sns.com. 047365787900000200010002A300001103746C64076973632D736E73036E657400 sexy. 172800 IN NS tld.isc-sns.net. 047365787900000200010002A300001203746C64076973632D736E7304696E666F00 sexy. 172800 IN NS tld.isc-sns.info. 047365787900002B0001000151800018EC8C05014FF0D3A66811E7DB90CD072F2A042EA0C5F03730 sexy. 86400 IN DS 60556 5 1 4FF0D3A66811E7DB90CD072F2A042EA0C5F03730 047365787900002B0001000151800024EC8C0502FD746B08B105315B2FE64FB8863BE05DAC75AEB0DFFA84567D1CFD2A621657A4 sexy. 86400 IN DS 60556 5 2 FD746B08B105315B2FE64FB8863BE05DAC75AEB0DFFA84567D1CFD2A621657A4 047365787900002E0001000151800093002B08010001518052F4220052EAD9708377002F20889841A2D1865E93B691A8ED9DEC079A2D3939EF749E56C484660604721B35BCF699FC4B7920566F84604C52DD7F423AF33465EDA196F66ACA631D4F35DC4A1E06E597EB55828AC07BB5B053BEEBCA71249AF32F0BAE634750EE678B792B134B5C98DBD99F7460FB1DCEAE5F5E0903E43733B0B70865E1855F72DAEC21D9 sexy. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . LyCImEGi0YZek7aRqO2d7AeaLTk573SeVsSEZgYEchs1vPaZ/Et5IFZvhGBMUt1/QjrzNGXtoZb2aspjHU813EoeBuWX61WCisB7tbBTvuvKcSSa8y8LrmNHUO5ni3krE0tcmNvZn3Rg+x3Orl9eCQPkNzOwtwhl4YVfctrsIdk= ;{id = 33655} 047365787900002E0001000151800093002F08010001518052F4220052EAD970837700BEB8C358A3D510FA7F071931B53C8310418AAC539FDE3D74AD2774D06717052E17BDE0AE0512AE7A2EEE92CFA7336A721AD35273771A4668B9673BD75B6EDD51981B34BE617F778D3296A1A4888852344A157CDCE5D6803F236E3F0B02058116553A04C2FA97271F1E716067699D574839FB961EDE1C3FD809B5CD692A183675 sexy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vrjDWKPVEPp/BxkxtTyDEEGKrFOf3j10rSd00GcXBS4XveCuBRKuei7uks+nM2pyGtNSc3caRmi5ZzvXW27dUZgbNL5hf3eNMpahpIiIUjRKFXzc5daAPyNuPwsCBYEWVToEwvqXJx8ecWBnaZ1XSDn7lh7eHD/YCbXNaSoYNnU= ;{id = 33655} 047365787900002F000100015180000C027367000006200000000013 sexy. 86400 IN NSEC sg. NS DS RRSIG NSEC 02736700000200010002A3000011036E7332046375686B0365647502686B00 sg. 172800 IN NS ns2.cuhk.edu.hk. 02736700000200010002A300001004736563330561706E6963036E657400 sg. 172800 IN NS sec3.apnic.net. 02736700000200010002A3000010056473616E790573676E696302736700 sg. 172800 IN NS dsany.sgnic.sg. 02736700000200010002A30000170573672D6E7307616E796361737403706368036E657400 sg. 172800 IN NS sg-ns.anycast.pch.net. 02736700002F000100015180000C027368000006200000000003 sg. 86400 IN NSEC sh. NS RRSIG NSEC 02736700002E0001000151800093002F08010001518052F4220052EAD970837700669CBB6C50484AA2BBA50BB8DE7C03E98A496670A7847C38B4CBD9E92F52E6AB1AB5015A19AC17426172B868FB0859732D72AB5725F52762E0B3037603AE66BFBF11571F0A076B9C38E55E9B51D1AE5CECCAA38B63BA3FBED46E2FA866257EF90464D9BA4A915074F5A3C8B5202073773D80DD1D63F69E7CE9F4AA283A990BCF sg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zpy7bFBISqK7pQu43nwD6YpJZnCnhHw4tMvZ6S9S5qsatQFaGawXQmFyuGj7CFlzLXKrVyX1J2LgswN2A65mv78RVx8KB2ucOOVem1HRrlzsyqOLY7o/vtRuL6hmJX75BGTZukqRUHT1o8i1ICBzdz2A3R1j9p586fSqKDqZC88= ;{id = 33655} 056473616E790573676E696302736700000100010002A3000004C2000110 dsany.sgnic.sg. 172800 IN A 194.0.1.16 056473616E790573676E696302736700001C00010002A300001020010678000400000000000000000010 dsany.sgnic.sg. 172800 IN AAAA 2001:678:4::10 02736800000200010002A300000A0161036E696302736800 sh. 172800 IN NS a.nic.sh. 02736800000200010002A300000C0161046E733133036E657400 sh. 172800 IN NS a.ns13.net. 02736800000200010002A300000A0162036E696302616300 sh. 172800 IN NS b.nic.ac. 02736800000200010002A300000A0162036E696302696F00 sh. 172800 IN NS b.nic.io. 02736800000200010002A300000C0162046E733133036E657400 sh. 172800 IN NS b.ns13.net. 02736800000200010002A3000016036E73310C636F6D6D756E697479646E73036E657400 sh. 172800 IN NS ns1.communitydns.net. 02736800000200010002A300000F036E73330369636202636F02756B00 sh. 172800 IN NS ns3.icb.co.uk. 02736800002B00010001518000180F0607018E142703EAEABD49F84213E72015350CD3D28DF5 sh. 86400 IN DS 3846 7 1 8E142703EAEABD49F84213E72015350CD3D28DF5 02736800002B00010001518000240F060702493B17DB412EBBA011AF0E596F2424B25C9379A9960586FFC9A2FB774536DE66 sh. 86400 IN DS 3846 7 2 493B17DB412EBBA011AF0E596F2424B25C9379A9960586FFC9A2FB774536DE66 02736800002E0001000151800093002B08010001518052F4220052EAD970837700BED8BC6861C55637451FC4E8A50A5EA3C356A46560E671004444E6AC634CBB4F95C185E207F7BAA369109B63125D617925D5D78135DC1B4F586D907467A0B8697907660EFFF8BDE8C5AB93AA18494FD729C599EB80699588868978088C4252167F7AE58EFA67BF1A1C8A343B1A688EF0D79DB5D0AF5B09691E9199DB4CC21BB3 sh. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vti8aGHFVjdFH8TopQpeo8NWpGVg5nEARETmrGNMu0+VwYXiB/e6o2kQm2MSXWF5JdXXgTXcG09YbZB0Z6C4aXkHZg7/+L3oxauTqhhJT9cpxZnrgGmViIaJeAiMQlIWf3rljvpnvxocijQ7GmiO8NedtdCvWwlpHpGZ20zCG7M= ;{id = 33655} 02736800002E0001000151800093002F08010001518052F4220052EAD9708377007AA2B514617F2C22F2BD050F410662D3AD35DA556A8CFA4AA129D860A0AAC39337E68F53ED09519F2124B943D198CD759654CC663CC8AA99FC0D2D30048A97CB959F5D9ADE5C0D578B45348AD448583FA64B3DE493616960A1E97E93CF06BD7FCE81C34087B9A68E089A6A104A47F0E21D1F98A4BA081C4C965F18AE2CE5C772 sh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eqK1FGF/LCLyvQUPQQZi06012lVqjPpKoSnYYKCqw5M35o9T7QlRnyEkuUPRmM11llTMZjzIqpn8DS0wBIqXy5WfXZreXA1Xi0U0itRIWD+mSz3kk2FpYKHpfpPPBr1/zoHDQIe5po4ImmoQSkfw4h0fmKS6CBxMll8Yrizlx3I= ;{id = 33655} 02736800002F0001000151800011077368696B736861000006200000000013 sh. 86400 IN NSEC shiksha. NS DS RRSIG NSEC 0161036E696302736800000100010002A300000440FB1FB2 a.nic.sh. 172800 IN A 64.251.31.178 077368696B73686100000200010002A3000010026130036E6963077368696B73686100 shiksha. 172800 IN NS a0.nic.shiksha. 077368696B73686100000200010002A3000010026132036E6963077368696B73686100 shiksha. 172800 IN NS a2.nic.shiksha. 077368696B73686100000200010002A3000010026230036E6963077368696B73686100 shiksha. 172800 IN NS b0.nic.shiksha. 077368696B73686100000200010002A3000010026330036E6963077368696B73686100 shiksha. 172800 IN NS c0.nic.shiksha. 077368696B73686100002B00010001518000184B8B0701A8F93C5CA81D7F38880F12CAD5D43F8BC522747C shiksha. 86400 IN DS 19339 7 1 A8F93C5CA81D7F38880F12CAD5D43F8BC522747C 077368696B73686100002B00010001518000244B8B0702CCDBBE400E7FCE7C2CAF32B1315D1CDF09289E69988ABD89A9E0A4280D0752AD shiksha. 86400 IN DS 19339 7 2 CCDBBE400E7FCE7C2CAF32B1315D1CDF09289E69988ABD89A9E0A4280D0752AD 077368696B73686100002E0001000151800093002B08010001518052F4220052EAD970837700768222C76B5393A6020331458BC8B13B4BD8C4D80A691C2F43A7F92E673335F7769367C31BC966EEFB54F05EC6CAFA5D31D25E00AB5633B5DC372EDACB74B4F1767C0EF4D42FE1A872DCA047EF721884AC6CE2B7AB5072A325A5E4F9D487F76554A5142BA865861DCFF37AA0203264FFDA2913883ADA17102CB807F5EB973ACF shiksha. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . doIix2tTk6YCAzFFi8ixO0vYxNgKaRwvQ6f5LmczNfd2k2fDG8lm7vtU8F7GyvpdMdJeAKtWM7XcNy7ay3S08XZ8DvTUL+GoctygR+9yGISsbOK3q1ByoyWl5PnUh/dlVKUUK6hlhh3P83qgIDJk/9opE4g62hcQLLgH9euXOs8= ;{id = 33655} 077368696B73686100002E0001000151800093002F08010001518052F4220052EAD9708377008AE3535DAA1936D653674C82510CBBAB11A0C2C6F3B54BB9E8CC5F7AA74576311D84538C601F949B582E05E54BEE3F63B2BDE861775BE261B3170596870BE38BBC62AA289D3195E4E2E0D2C76F7AD9C8E41E9B9AE10FE32281F4C9E5B28DEE8FDA8912E64645ABBD7F7D5E803E735D035FE6B9E5FE0EC80DFDA7F00A1A8F44C2 shiksha. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iuNTXaoZNtZTZ0yCUQy7qxGgwsbztUu56MxfeqdFdjEdhFOMYB+Um1guBeVL7j9jsr3oYXdb4mGzFwWWhwvji7xiqiidMZXk4uDSx2962cjkHpua4Q/jIoH0yeWyje6P2okS5kZFq71/fV6APnNdA1/mueX+DsgN/afwChqPRMI= ;{id = 33655} 077368696B73686100002F000100015180000F0573686F6573000006200000000013 shiksha. 86400 IN NSEC shoes. NS DS RRSIG NSEC 026130036E6963077368696B73686100000100010002A300000441162021 a0.nic.shiksha. 172800 IN A 65.22.32.33 026130036E6963077368696B73686100001C00010002A30000102A018840002200000000000000000033 a0.nic.shiksha. 172800 IN AAAA 2a01:8840:22::33 026132036E6963077368696B73686100000100010002A300000441162321 a2.nic.shiksha. 172800 IN A 65.22.35.33 026132036E6963077368696B73686100001C00010002A30000102A018840002500000000000000000033 a2.nic.shiksha. 172800 IN AAAA 2a01:8840:25::33 026230036E6963077368696B73686100000100010002A300000441162121 b0.nic.shiksha. 172800 IN A 65.22.33.33 026230036E6963077368696B73686100001C00010002A30000102A018840002300000000000000000033 b0.nic.shiksha. 172800 IN AAAA 2a01:8840:23::33 026330036E6963077368696B73686100000100010002A300000441162221 c0.nic.shiksha. 172800 IN A 65.22.34.33 026330036E6963077368696B73686100001C00010002A30000102A018840002400000000000000000033 c0.nic.shiksha. 172800 IN AAAA 2a01:8840:24::33 0573686F657300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 shoes. 172800 IN NS demand.beta.aridns.net.au. 0573686F657300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 shoes. 172800 IN NS demand.alpha.aridns.net.au. 0573686F657300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 shoes. 172800 IN NS demand.delta.aridns.net.au. 0573686F657300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 shoes. 172800 IN NS demand.gamma.aridns.net.au. 0573686F657300002B0001000151800024BDBE0802FFCCEBC433B0B008AB8D3113A3B009D9F399CA666883CCA43D43699C60AA7E61 shoes. 86400 IN DS 48574 8 2 FFCCEBC433B0B008AB8D3113A3B009D9F399CA666883CCA43D43699C60AA7E61 0573686F657300002E0001000151800093002B08010001518052F4220052EAD9708377005B225B2863AD13B1AC2B26C7A983EC6F83AF420149DBBE37C50B8C2AD6D6B0ABF26FB2D8F732F51FCF8B2480D20749677EC6DC594C057CE7E0810B54F6388D589D0D69420CBEFA0BB7A34F410FD7C39A09CC85CA00FC3395360E6FD96601340A4C4B33188541133E785A330256B3122840CFCA267B13059D0590EAAE3E7F277D shoes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WyJbKGOtE7GsKybHqYPsb4OvQgFJ2743xQuMKtbWsKvyb7LY9zL1H8+LJIDSB0lnfsbcWUwFfOfggQtU9jiNWJ0NaUIMvvoLt6NPQQ/Xw5oJzIXKAPwzlTYOb9lmATQKTEszGIVBEz54WjMCVrMSKEDPyiZ7EwWdBZDqrj5/J30= ;{id = 33655} 0573686F657300002E0001000151800093002F08010001518052F4220052EAD97083770069F5D7472DBDB2F214877E2948E954FC70C462DDF8CE5500CC6E4225F13AB47A28E7B8B436ACDD4D2FCDE57B1E608C736FA00E43C61B057F6A3A19F4201F42632AEB67EBB107A408A035C0CF1D0C215314C71D50D9A0D9CBCF35F6F491A4A205BAEF2D4E3B92DC76A1F8E03754A3A9F80F2922B82A1637421059735B286C14AB shoes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . afXXRy29svIUh34pSOlU/HDEYt34zlUAzG5CJfE6tHoo57i0NqzdTS/N5XseYIxzb6AOQ8YbBX9qOhn0IB9CYyrrZ+uxB6QIoDXAzx0MIVMUxx1Q2aDZy8819vSRpKIFuu8tTjuS3Hah+OA3VKOp+A8pIrgqFjdCEFlzWyhsFKs= ;{id = 33655} 0573686F657300002F000100015180000C027369000006200000000013 shoes. 86400 IN NSEC si. NS DS RRSIG NSEC 02736900002F00010001518000110773696E676C6573000006200000000013 si. 86400 IN NSEC singles. NS DS RRSIG NSEC 02736900002E0001000151800093002F08010001518052F4220052EAD97083770070BEBABEAF52D82527F42773B70D45A0F78711583EB73BB56C5EED2B48CA4B2C267CD180CDA7586298D80AAA1D8F6A858B15F2CB0F334368056B74A8F624E1E6A6F514C0C684C7BFACC9E19A96C8B42E416994C37E74458D4CA6BC5AB2024E5C12A68DD16AF362436B4885F4770EF74FA3F665D4C0C3DCCDAD15313BD5984FE5 si. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cL66vq9S2CUn9Cdztw1FoPeHEVg+tzu1bF7tK0jKSywmfNGAzadYYpjYCqodj2qFixXyyw8zQ2gFa3So9iTh5qb1FMDGhMe/rMnhmpbItC5BaZTDfnRFjUymvFqyAk5cEqaN0WrzYkNrSIX0dw73T6P2ZdTAw9zNrRUxO9WYT+U= ;{id = 33655} 02736900002E0001000151800093002B08010001518052F4220052EAD970837700B5553F32DBE40CE9A55B1D11D7577C095699F285F53EC538608485EFF211EA0806A780A339EBB41ACC5EA73745FB842CCA225B6E7621243EEE5B762E3E11564974CA00F2CD0E0AC92C23703D99D52462712EAC612423D868F8531D1088858B0A512963BA55EF9EF478F09A5A406D0048D20DFCAB3E2BDEEB43D18674371E7D42 si. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tVU/MtvkDOmlWx0R11d8CVaZ8oX1PsU4YISF7/IR6ggGp4CjOeu0GsxepzdF+4QsyiJbbnYhJD7uW3YuPhFWSXTKAPLNDgrJLCNwPZnVJGJxLqxhJCPYaPhTHRCIhYsKUSljulXvnvR48JpaQG0ASNIN/Ks+K97rQ9GGdDcefUI= ;{id = 33655} 02736900000200010002A300000A016203646E7302736900 si. 172800 IN NS b.dns.si. 02736900000200010002A300000A016303646E7302736900 si. 172800 IN NS c.dns.si. 02736900000200010002A300000A016403646E7302736900 si. 172800 IN NS d.dns.si. 02736900000200010002A300000A016503646E7302736900 si. 172800 IN NS e.dns.si. 02736900000200010002A300000A016603646E7302736900 si. 172800 IN NS f.dns.si. 02736900000200010002A300000A016703646E7302736900 si. 172800 IN NS g.dns.si. 02736900000200010002A300000A016803646E7302736900 si. 172800 IN NS h.dns.si. 02736900000200010002A300000C0373737303646E7302736900 si. 172800 IN NS sss.dns.si. 02736900002B0001000151800018456A08017BF07EAD2EBA601C72225CD05C26A8F0A3B37600 si. 86400 IN DS 17770 8 1 7BF07EAD2EBA601C72225CD05C26A8F0A3B37600 02736900002B0001000151800024456A0802306AEC05741E1F03BD3B8DD5B4503F338EFF7F8A5F61D9F6EC19A7FB9DE65FB2 si. 86400 IN DS 17770 8 2 306AEC05741E1F03BD3B8DD5B4503F338EFF7F8A5F61D9F6EC19A7FB9DE65FB2 036E73320561726E657302736900000100010002A3000004C102015B ns2.arnes.si. 172800 IN A 193.2.1.91 036E73320561726E657302736900001C00010002A300001020011470800000000000000000000091 ns2.arnes.si. 172800 IN AAAA 2001:1470:8000::91 016203646E7302736900000100010002A3000004C102015B b.dns.si. 172800 IN A 193.2.1.91 016203646E7302736900001C00010002A300001020011470800000000000000000000091 b.dns.si. 172800 IN AAAA 2001:1470:8000::91 016303646E7302736900000100010002A3000004C05D0004 c.dns.si. 172800 IN A 192.93.0.4 016303646E7302736900001C00010002A300001020010660300500010000000000010002 c.dns.si. 172800 IN AAAA 2001:660:3005:1::1:2 016403646E7302736900000100010002A3000004823B011E d.dns.si. 172800 IN A 130.59.1.30 016403646E7302736900000100010002A3000004823B0A1E d.dns.si. 172800 IN A 130.59.10.30 016403646E7302736900001C00010002A300001020010620000000000000000000000001 d.dns.si. 172800 IN AAAA 2001:620::1 016503646E7302736900000100010002A30000043FF3C203 e.dns.si. 172800 IN A 63.243.194.3 016503646E7302736900001C00010002A3000010200105A0001000000000000000000003 e.dns.si. 172800 IN AAAA 2001:5a0:10::3 016603646E7302736900000100010002A3000004C2926A3E f.dns.si. 172800 IN A 194.146.106.62 016603646E7302736900001C00010002A30000102001067C101000150000000000000053 f.dns.si. 172800 IN AAAA 2001:67c:1010:15::53 016703646E7302736900000100010002A3000004C2000114 g.dns.si. 172800 IN A 194.0.1.20 016703646E7302736900001C00010002A300001020010678000400000000000000000014 g.dns.si. 172800 IN AAAA 2001:678:4::14 016803646E7302736900000100010002A3000004CC3DD836 h.dns.si. 172800 IN A 204.61.216.54 016803646E7302736900001C00010002A3000010200105000014605400AD000000000001 h.dns.si. 172800 IN AAAA 2001:500:14:6054:ad::1 0373737303646E7302736900000100010002A3000004515BA165 sss.dns.si. 172800 IN A 81.91.161.101 0773696E676C657300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 singles. 172800 IN NS demand.beta.aridns.net.au. 0773696E676C657300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 singles. 172800 IN NS demand.alpha.aridns.net.au. 0773696E676C657300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 singles. 172800 IN NS demand.delta.aridns.net.au. 0773696E676C657300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 singles. 172800 IN NS demand.gamma.aridns.net.au. 0773696E676C657300002B000100015180002430430802639127B308DF1CA7A0F1CF1876BA0F72668A75E5816BEF29D256BF54E47A3D8E singles. 86400 IN DS 12355 8 2 639127B308DF1CA7A0F1CF1876BA0F72668A75E5816BEF29D256BF54E47A3D8E 0773696E676C657300002E0001000151800093002B08010001518052F4220052EAD970837700894E8FA4D7D647CA4358D42A7C5115C836290738ABF3D89449F57C4841AE9095104CCD01A43A81519DB8ABCA449961A36E719858180C48CBAE4632F9444A2189E1113303D25795E8EE5D6C17FB65F2600252B4BCEAD8AF70097D04877737CC2C8DA24B2E1B02F7207B0F7F99B08C6638A053A19FBE48EE8DF69C4454D1F948BD singles. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iU6PpNfWR8pDWNQqfFEVyDYpBzir89iUSfV8SEGukJUQTM0BpDqBUZ24q8pEmWGjbnGYWBgMSMuuRjL5REohieERMwPSV5Xo7l1sF/tl8mACUrS86tivcAl9BId3N8wsjaJLLhsC9yB7D3+ZsIxmOKBToZ++SO6N9pxEVNH5SL0= ;{id = 33655} 0773696E676C657300002E0001000151800093002F08010001518052F4220052EAD97083770045EF331794C30FD45A74FDCE80323F7C4874C49BDC13BF2C403A4452001C6679506433F65216DC4C4221BD4A7B99EF1AB2F312CC1AF0B83949BD6EFF20EF67F55620E6A395276942D602E97747EF3FC3A49EB0E3A93C5322918D130689D1D53DA697172B3433DC73825C744AC77B2F8B05A038643E497BA070FD50F0CBF5D672 singles. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Re8zF5TDD9RadP3OgDI/fEh0xJvcE78sQDpEUgAcZnlQZDP2UhbcTEIhvUp7me8asvMSzBrwuDlJvW7/IO9n9VYg5qOVJ2lC1gLpd0fvP8OknrDjqTxTIpGNEwaJ0dU9ppcXKzQz3HOCXHRKx3sviwWgOGQ+SXugcP1Q8Mv11nI= ;{id = 33655} 0773696E676C657300002F000100015180000C02736A000006200000000013 singles. 86400 IN NSEC sj. NS DS RRSIG NSEC 02736A00000200010002A300000F026E6E07756E696E657474026E6F00 sj. 172800 IN NS nn.uninett.no. 02736A00000200010002A3000008036E6163026E6F00 sj. 172800 IN NS nac.no. 02736A00000200010002A300001206736572766572056E6F726475036E657400 sj. 172800 IN NS server.nordu.net. 02736A00002F000100015180000C02736B000006200000000003 sj. 86400 IN NSEC sk. NS RRSIG NSEC 02736A00002E0001000151800093002F08010001518052F4220052EAD97083770031C136F8B29AF6B95253EAF4DF43CE9B48F206AF8630DBD65B8D29D104A719A5FEC6848E9B6A7EE3B3D7B7D03FB359C6EDD000BF5398BFB55575DAFADA1AB5E287EEBC7862E0FF4CC8CED371AD30CB8694571BB9887C4D3AF4805E42992E43EA5E66E3B0FE0850B98110BC0E072C8551E55246744C9A57D29AA0821A9226A51C sj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . McE2+LKa9rlSU+r030POm0jyBq+GMNvWW40p0QSnGaX+xoSOm2p+47PXt9A/s1nG7dAAv1OYv7VVddr62hq14ofuvHhi4P9MyM7Tca0wy4aUVxu5iHxNOvSAXkKZLkPqXmbjsP4IULmBELwOByyFUeVSRnRMmlfSmqCCGpImpRw= ;{id = 33655} 02736B00000200010002A300000A016103746C6402736B00 sk. 172800 IN NS a.tld.sk. 02736B00000200010002A300000A016303746C6402736B00 sk. 172800 IN NS c.tld.sk. 02736B00000200010002A300000D026E730565756E657402736B00 sk. 172800 IN NS ns.eunet.sk. 02736B00000200010002A300000E026E7306736B2D6E696302736B00 sk. 172800 IN NS ns.sk-nic.sk. 02736B00000200010002A300000F036E733106736B2D6E696302736B00 sk. 172800 IN NS ns1.sk-nic.sk. 02736B00000200010002A300000F036E733306736B2D6E696302736B00 sk. 172800 IN NS ns3.sk-nic.sk. 02736B00000200010002A300001006736E732D706203697363036F726700 sk. 172800 IN NS sns-pb.isc.org. 02736B00002F000100015180000C02736C000006200000000003 sk. 86400 IN NSEC sl. NS RRSIG NSEC 02736B00002E0001000151800093002F08010001518052F4220052EAD9708377008760DE57803C059396DC881D1CF2228AA836E73C6A8CBC3F00F194EEDB54DDC266F0C0F412EB5C69F51C002AE7FD817765879FAA23C945AF5FAD1FF2A34BB65F2489F57B19B516025FC53DF8D413014976370B6FC22657B2F1A30943AE543E5100E486E46DD2EA7F41EA506E1E2D7E6FD26CEBFB4B8B84CBAC18AA2B6A6D40BA sk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . h2DeV4A8BZOW3IgdHPIiiqg25zxqjLw/APGU7ttU3cJm8MD0EutcafUcACrn/YF3ZYefqiPJRa9frR/yo0u2XySJ9XsZtRYCX8U9+NQTAUl2NwtvwiZXsvGjCUOuVD5RAOSG5G3S6n9B6lBuHi1+b9Js6/tLi4TLrBiqK2ptQLo= ;{id = 33655} 026E730565756E657402736B00000100010002A3000004D94B49F2 ns.eunet.sk. 172800 IN A 217.75.73.242 026E7306736B2D6E696302736B00000100010002A3000004C30C9F02 ns.sk-nic.sk. 172800 IN A 195.12.159.2 036E733106736B2D6E696302736B00000100010002A3000004C30C9F03 ns1.sk-nic.sk. 172800 IN A 195.12.159.3 036E733306736B2D6E696302736B00000100010002A3000004D94B43EA ns3.sk-nic.sk. 172800 IN A 217.75.67.234 016103746C6402736B00000100010002A3000004C2002D01 a.tld.sk. 172800 IN A 194.0.45.1 016103746C6402736B00001C00010002A300001020010678007000000000000000000001 a.tld.sk. 172800 IN AAAA 2001:678:70::1 016303746C6402736B00000100010002A3000004D94B489D c.tld.sk. 172800 IN A 217.75.72.157 016303746C6402736B00001C00010002A30000102A020770010001000000000000000101 c.tld.sk. 172800 IN AAAA 2a02:770:100:100::101 02736C00000200010002A300000F036E7331056E656F697003636F6D00 sl. 172800 IN NS ns1.neoip.com. 02736C00000200010002A300000F036E7332056E656F697003636F6D00 sl. 172800 IN NS ns2.neoip.com. 02736C00002F000100015180000C02736D000006200000000003 sl. 86400 IN NSEC sm. NS RRSIG NSEC 02736C00002E0001000151800093002F08010001518052F4220052EAD9708377000ED9F89F1DFE27BD9E97FB01CD84FF17DBC292131EF6FCFD8D6E2D0B2819C4E14D33E1A6EA32FFA029FC2FFA86D0DCA4FC3668D56C5AAD4B69543E049CEB37C4BD69FDC3E3CA0AEFEFF462DF637F343A298357C003D3F162EC74F7A9FF48A09E301DC0BAFCC32723DF404B52870F127787EDF34AD8A36E5C0BC50F11DE375034 sl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Dtn4nx3+J72el/sBzYT/F9vCkhMe9vz9jW4tCygZxOFNM+Gm6jL/oCn8L/qG0Nyk/DZo1WxarUtpVD4EnOs3xL1p/cPjygrv7/Ri32N/NDopg1fAA9PxYux096n/SKCeMB3AuvzDJyPfQEtShw8Sd4ft80rYo25cC8UPEd43UDQ= ;{id = 33655} 02736D00000200010002A300001B02736D056363746C640761757468646E730472697065036E657400 sm. 172800 IN NS sm.cctld.authdns.ripe.net. 02736D00000200010002A300001003646E73076F6D6E6977617902736D00 sm. 172800 IN NS dns.omniway.sm. 02736D00000200010002A300001103646E7308696E74656C636F6D02736D00 sm. 172800 IN NS dns.intelcom.sm. 02736D00000200010002A3000016036E73330D74656C65636F6D6974616C696102736D00 sm. 172800 IN NS ns3.telecomitalia.sm. 02736D00002F000100015180000C02736E000006200000000003 sm. 86400 IN NSEC sn. NS RRSIG NSEC 02736D00002E0001000151800093002F08010001518052F4220052EAD97083770002EF52370D32619DFA8F173A34F78C34EEFC47258848AAAA11EE03C2731E7EE1FC20488FFFB3034463CEC168508514699CD9078A1DAC79E71BA13C4470CEA9E3F40CB121253DF4E6046699E959492DE6B15DE03C710C20B1B00E7FC90AD391F6EA09062DCCF8EFAD081F358717917FAE0C3E49219DD7F8A39F637A33C8CB1AA0 sm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Au9SNw0yYZ36jxc6NPeMNO78RyWISKqqEe4DwnMefuH8IEiP/7MDRGPOwWhQhRRpnNkHih2seecboTxEcM6p4/QMsSElPfTmBGaZ6VlJLeaxXeA8cQwgsbAOf8kK05H26gkGLcz4760IHzWHF5F/rgw+SSGd1/ijn2N6M8jLGqA= ;{id = 33655} 03646E7308696E74656C636F6D02736D00000100010002A3000004C2B7400B dns.intelcom.sm. 172800 IN A 194.183.64.11 03646E73076F6D6E6977617902736D00000100010002A3000004C2B7400A dns.omniway.sm. 172800 IN A 194.183.64.10 036E73330D74656C65636F6D6974616C696102736D00000100010002A3000004C2001B0C ns3.telecomitalia.sm. 172800 IN A 194.0.27.12 036E73330D74656C65636F6D6974616C696102736D00001C00010002A3000010200106780028000000C200B700400012 ns3.telecomitalia.sm. 172800 IN AAAA 2001:678:28:0:c2:b7:40:12 02736E00000200010002A300000C026E73047563616402736E00 sn. 172800 IN NS ns.ucad.sn. 02736E00000200010002A300001B02736E056363746C640761757468646E730472697065036E657400 sn. 172800 IN NS sn.cctld.authdns.ripe.net. 02736E00000200010002A300000C036E73310369726402667200 sn. 172800 IN NS ns1.ird.fr. 02736E00000200010002A3000010036E733107736F6E6174656C02736E00 sn. 172800 IN NS ns1.sonatel.sn. 02736E00000200010002A300000C036E7333036E696302667200 sn. 172800 IN NS ns3.nic.fr. 02736E00002F000100015180000C02736F000006200000000003 sn. 86400 IN NSEC so. NS RRSIG NSEC 02736E00002E0001000151800093002F08010001518052F4220052EAD9708377001D08BE72CF6C00F4D9DE4783543097B72AA4A87DF22714F274C2E36F64DE4FDE898ED9186C8EE092890A9F6168E17EEF4C844A4FEE5EC610978C73A70C9BBB7F8EE97820F3E81FDD9F21B18A7B2D67208C9B9762D7552773B9B35A8014D3E8D96637B371DC2527C1557AF1463D127B9BDE10E46BC8D07EEE317AF36645FC0523 sn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HQi+cs9sAPTZ3keDVDCXtyqkqH3yJxTydMLjb2TeT96JjtkYbI7gkokKn2Fo4X7vTIRKT+5exhCXjHOnDJu7f47peCDz6B/dnyGxinstZyCMm5di11Unc7mzWoAU0+jZZjezcdwlJ8FVevFGPRJ7m94Q5GvI0H7uMXrzZkX8BSM= ;{id = 33655} 036E733107736F6E6174656C02736E00000100010002A3000004D59A400B ns1.sonatel.sn. 172800 IN A 213.154.64.11 026E73047563616402736E00000100010002A3000004C4015F01 ns.ucad.sn. 172800 IN A 196.1.95.1 02736F00000200010002A300000A0161036E696302736F00 so. 172800 IN NS a.nic.so. 02736F00000200010002A300000A0162036E696302736F00 so. 172800 IN NS b.nic.so. 02736F00000200010002A300000A0163036E696302736F00 so. 172800 IN NS c.nic.so. 02736F00002F000100015180001006736F6369616C000006200000000003 so. 86400 IN NSEC social. NS RRSIG NSEC 02736F00002E0001000151800093002F08010001518052F4220052EAD970837700B581DB676CD51D398F5C15956D04AB0C2427D87F26CAA936828EAD2B3CC706D235382D28B1640E73FCA6E3AC74E8689425649DD93D646764592A1BFB7D62BAA49868886506A292DC7CDC63BF6B9AAD36AD184EFDB6BDFD5D4265099FEDFF3F52ADFE0152AAC3145FAFBCD7E2071817B6A4C32284A248A9AC1FB29B45838A943F so. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tYHbZ2zVHTmPXBWVbQSrDCQn2H8myqk2go6tKzzHBtI1OC0osWQOc/ym46x06GiUJWSd2T1kZ2RZKhv7fWK6pJhoiGUGopLcfNxjv2uarTatGE79tr39XUJlCZ/t/z9Srf4BUqrDFF+vvNfiBxgXtqTDIoSiSKmsH7KbRYOKlD8= ;{id = 33655} 0161036E696302736F00000100010002A300000448344704 a.nic.so. 172800 IN A 72.52.71.4 0161036E696302736F00001C00010002A300001020010470001A00000000000000000004 a.nic.so. 172800 IN AAAA 2001:470:1a::4 0162036E696302736F00000100010002A300000426670204 b.nic.so. 172800 IN A 38.103.2.4 0163036E696302736F00000100010002A30000043FF3C204 c.nic.so. 172800 IN A 63.243.194.4 0163036E696302736F00001C00010002A3000010200105A0001000000000000000000004 c.nic.so. 172800 IN AAAA 2001:5a0:10::4 06736F6369616C00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 social. 172800 IN NS demand.beta.aridns.net.au. 06736F6369616C00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 social. 172800 IN NS demand.alpha.aridns.net.au. 06736F6369616C00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 social. 172800 IN NS demand.delta.aridns.net.au. 06736F6369616C00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 social. 172800 IN NS demand.gamma.aridns.net.au. 06736F6369616C00002B0001000151800024051408028A42E9D39037DF3605E4DD07BEEA497B9C181FF38AA148FB712DB03C03BEA8AE social. 86400 IN DS 1300 8 2 8A42E9D39037DF3605E4DD07BEEA497B9C181FF38AA148FB712DB03C03BEA8AE 06736F6369616C00002E0001000151800093002B08010001518052F4220052EAD970837700105A9994E4BD8833248B3FE628862D522618F3DDF767D97F3499C58C4F22D059B3CDDA0D7DE3D0551E4E8F3F11B2D553284D5603D9566758BD0B64C44EF050F8E8ABF93A1901F42F42936A02474EF37BBC461237191E4721E143FAA7397E5DD4A0FE7B8158039B808AA920AA6FC07BBD49A480F235B6192F055F268E582E4C29 social. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . EFqZlOS9iDMkiz/mKIYtUiYY8933Z9l/NJnFjE8i0FmzzdoNfePQVR5Ojz8RstVTKE1WA9lWZ1i9C2TETvBQ+Oir+ToZAfQvQpNqAkdO83u8RhI3GR5HIeFD+qc5fl3UoP57gVgDm4CKqSCqb8B7vUmkgPI1thkvBV8mjlguTCk= ;{id = 33655} 06736F6369616C00002E0001000151800093002F08010001518052F4220052EAD970837700B03DE83F47941BA88EC2235D4AB1A039F9A59E04F5D9D15839A22F402FADEF831DCB4689DA3D820E061D87361207569E35BFE70FB31177CA69E3DC28ECFA0E028C51653E8539A41090D102350D06186F83BC0330F818357725BD24E737A04B9057D6F1E5E67A39BA9CD0D1CA76AEA2735E5722661A4849562B9E50A988B848DE social. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sD3oP0eUG6iOwiNdSrGgOfmlngT12dFYOaIvQC+t74Mdy0aJ2j2CDgYdhzYSB1aeNb/nD7MRd8pp49wo7PoOAoxRZT6FOaQQkNECNQ0GGG+DvAMw+Bg1dyW9JOc3oEuQV9bx5eZ6Obqc0NHKdq6ic15XImYaSElWK55QqYi4SN4= ;{id = 33655} 06736F6369616C00002F000100015180000F05736F6C6172000006200000000013 social. 86400 IN NSEC solar. NS DS RRSIG NSEC 05736F6C617200000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 solar. 172800 IN NS demand.beta.aridns.net.au. 05736F6C617200000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 solar. 172800 IN NS demand.alpha.aridns.net.au. 05736F6C617200000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 solar. 172800 IN NS demand.delta.aridns.net.au. 05736F6C617200000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 solar. 172800 IN NS demand.gamma.aridns.net.au. 05736F6C617200002B00010001518000241A530802E72104FA55B919CFAC81D28277FE041BACA75957A0E530FC83827195C5FF89DF solar. 86400 IN DS 6739 8 2 E72104FA55B919CFAC81D28277FE041BACA75957A0E530FC83827195C5FF89DF 05736F6C617200002E0001000151800093002B08010001518052F4220052EAD9708377000BE7D3BDBB1E37BBAC7EF2198F3B214F1113F739D43BB9D018E0C8D927B623791E73F2762ACC90483068E4142D82B1C2AC6AA284B4C1EF77EC84D9ED113C7C1BFD91241E53A1E2B756CD3EA1EFDEA122838ADF3DAD0DB818578AF8A396D1EFA79369AA5BA239B4C62575C2C358229F46E50817672E6A00E7F3791539C7285856 solar. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . C+fTvbseN7usfvIZjzshTxET9znUO7nQGODI2Se2I3kec/J2KsyQSDBo5BQtgrHCrGqihLTB73fshNntETx8G/2RJB5ToeK3Vs0+oe/eoSKDit89rQ24GFeK+KOW0e+nk2mqW6I5tMYldcLDWCKfRuUIF2cuagDn83kVOccoWFY= ;{id = 33655} 05736F6C617200002E0001000151800093002F08010001518052F4220052EAD97083770070EDF26F2648C3335FFC667BC1C7FE57E08DFEC0C1D05CE492B1E610AB711269738D906E843B71347DD2623C77AEC9EB1F95266D390202BACE4B90FF91558747ED86ED7176F77098F13E3239127FA6E2F2CE61CFD628F566614A409BBEEFD0064CB9BA3681086CFC97EC9167F0C9B4268688818A45D904555D74A78776ACDEFC solar. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cO3ybyZIwzNf/GZ7wcf+V+CN/sDB0FzkkrHmEKtxEmlzjZBuhDtxNH3SYjx3rsnrH5UmbTkCArrOS5D/kVWHR+2G7XF293CY8T4yORJ/puLyzmHP1ij1ZmFKQJu+79AGTLm6NoEIbPyX7JFn8Mm0JoaIgYpF2QRVXXSnh3as3vw= ;{id = 33655} 05736F6C617200002F000100015180001309736F6C7574696F6E73000006200000000013 solar. 86400 IN NSEC solutions. NS DS RRSIG NSEC 09736F6C7574696F6E7300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 solutions. 172800 IN NS demand.beta.aridns.net.au. 09736F6C7574696F6E7300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 solutions. 172800 IN NS demand.alpha.aridns.net.au. 09736F6C7574696F6E7300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 solutions. 172800 IN NS demand.delta.aridns.net.au. 09736F6C7574696F6E7300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 solutions. 172800 IN NS demand.gamma.aridns.net.au. 09736F6C7574696F6E7300002B0001000151800024E18E08026536350D40C0AA3DBF8A29604A2291F89966BFC74C363E99D75733885B8AAA49 solutions. 86400 IN DS 57742 8 2 6536350D40C0AA3DBF8A29604A2291F89966BFC74C363E99D75733885B8AAA49 09736F6C7574696F6E7300002E0001000151800093002B08010001518052F4220052EAD970837700432BA7FA95415F03E4B145A8DBA64E377A2F0D59C7AFE63FC0F612462E204C596099F33D70D61DF3A449685DCEF1ECE97BA18857097E966444FF84A59C74773DBD34121DE49E6B4A76C2C205A6F6BBABB4172B3E2C701B2B707C9CF4CF5DFD97585C299AC67CBCF7D90BAD60F3D9365288DB8BD12D27DBB25CE176596D4BD8FA solutions. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Qyun+pVBXwPksUWo26ZON3ovDVnHr+Y/wPYSRi4gTFlgmfM9cNYd86RJaF3O8ezpe6GIVwl+lmRE/4SlnHR3Pb00Eh3knmtKdsLCBab2u6u0Fys+LHAbK3B8nPTPXf2XWFwpmsZ8vPfZC61g89k2Uojbi9EtJ9uyXOF2WW1L2Po= ;{id = 33655} 09736F6C7574696F6E7300002E0001000151800093002F08010001518052F4220052EAD9708377002BAB820DB30B6F8CA8B806BBA0636DA76780C6F24207A7B53497651526AAA734B5AD2EA0446759E66EA8FF8B39A7EBB165261A2F20066C0D83D3E62C8D1584A989EF76A20D400C185B3FA931C149A6D69E1CD41178B1051E20905967D2EE429B132B8286F6CDB16FF225DFECB5FDB25FB7774EFC1FAB030B7231D29F0F9B594D solutions. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K6uCDbMLb4youAa7oGNtp2eAxvJCB6e1NJdlFSaqpzS1rS6gRGdZ5m6o/4s5p+uxZSYaLyAGbA2D0+YsjRWEqYnvdqINQAwYWz+pMcFJptaeHNQReLEFHiCQWWfS7kKbEyuChvbNsW/yJd/stf2yX7d3TvwfqwMLcjHSnw+bWU0= ;{id = 33655} 09736F6C7574696F6E7300002F000100015180000C027372000006200000000013 solutions. 86400 IN NSEC sr. NS DS RRSIG NSEC 02737200000200010002A300000C036E7331027372036E657400 sr. 172800 IN NS ns1.sr.net. 02737200000200010002A300000C036E7332027372036E657400 sr. 172800 IN NS ns2.sr.net. 02737200002F000100015180000C027374000006200000000003 sr. 86400 IN NSEC st. NS RRSIG NSEC 02737200002E0001000151800093002F08010001518052F4220052EAD970837700915B45E6052E74805B00C1F875F4BACD01F71900F8C3120928F7409EE4CF4020FB46CF6EC1805AB158D1ACA16799E5FA60E479CE64B56758DBA6F31C6AA40E5DCFE948D0853126C247B1A8C55C7DE5D4E7C70CA0EC3FE758ECFAE1241C92ADB7FF36BB9BA7A25410389111BC89E1427CE3B5C06C5FACD56C6E95D0D8DBA07C80 sr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kVtF5gUudIBbAMH4dfS6zQH3GQD4wxIJKPdAnuTPQCD7Rs9uwYBasVjRrKFnmeX6YOR5zmS1Z1jbpvMcaqQOXc/pSNCFMSbCR7GoxVx95dTnxwyg7D/nWOz64SQckq23/za7m6eiVBA4kRG8ieFCfOO1wGxfrNVsbpXQ2NugfIA= ;{id = 33655} 02737400000200010002A3000011036E7331076261686E686F66036E657400 st. 172800 IN NS ns1.bahnhof.net. 02737400000200010002A300000B06646E732D617502737400 st. 172800 IN NS dns-au.st. 02737400000200010002A300001406646E732D7374076261686E686F66036E657400 st. 172800 IN NS dns-st.bahnhof.net. 02737400000200010002A300000B06646E732D757302737400 st. 172800 IN NS dns-us.st. 02737400002F000100015180000C027375000006200000000003 st. 86400 IN NSEC su. NS RRSIG NSEC 02737400002E0001000151800093002F08010001518052F4220052EAD9708377007CCF2457F3029D404CF38C98D44D2B457E66B1FE1B0702B76F8147D8C74C388194C9CFC116B8B22E8ECC070C1772B4E3F95CC21347DE1FDED1F4A53DD6BA4223AF6DFDCFE61C7D302FA44A57BCDAED1B3A53B7FA590AE04E5594FBA5359088728C76ECCF51FA7ADFBAF981034C4B52CDF8296829DAD50DE0D19F503B697B2012 st. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fM8kV/MCnUBM84yY1E0rRX5msf4bBwK3b4FH2MdMOIGUyc/BFriyLo7MBwwXcrTj+VzCE0feH97R9KU91rpCI69t/c/mHH0wL6RKV7za7Rs6U7f6WQrgTlWU+6U1kIhyjHbsz1H6et+6+YEDTEtSzfgpaCna1Q3g0Z9QO2l7IBI= ;{id = 33655} 06646E732D617502737400000100010002A300000477FCBC61 dns-au.st. 172800 IN A 119.252.188.97 06646E732D757302737400000100010002A3000004C669DF43 dns-us.st. 172800 IN A 198.105.223.67 02737500002F000100015180001107737570706F7274000006200000000013 su. 86400 IN NSEC support. NS DS RRSIG NSEC 02737500002E0001000151800093002F08010001518052F4220052EAD9708377005DAA67DD873DDEB8046C817D9FCDC37085344AF7494CC64D5674BDF36DB7508FAC28CD633B7279A72CD8994E437499FE28253DBD86662EDEE8BB573A5F4FD1A1150D478A5B0D90E51E073EEBCFD8CB7F700BAAAF03A66DB2DFAA09E6FA3ECCEBC81F1000B5B1A720EFB1F400D13B3721E4D73A25DBA971DC48C45C48D69EA139 su. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Xapn3Yc93rgEbIF9n83DcIU0SvdJTMZNVnS98223UI+sKM1jO3J5pyzYmU5DdJn+KCU9vYZmLt7ou1c6X0/RoRUNR4pbDZDlHgc+68/Yy39wC6qvA6Ztst+qCeb6PszryB8QALWxpyDvsfQA0Ts3IeTXOiXbqXHcSMRcSNaeoTk= ;{id = 33655} 02737500002E0001000151800093002B08010001518052F4220052EAD970837700A0F54EE8C1B6316F8C8FDD5E0C3540CB4854C056DA90E3299BF03FB013A74F674346ACD391506187D65EFF089ACDE9B889F4255B75F44DE90D1EDC95C4A4C58263A29350AAC629DC1A00C47DD5467A4E474917357ECDB6C3786DA5019DF3B10EF7E6864050C7E37542B0201E0B89909E5755B156F8BDCA288DC361B1A92DBA0A su. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oPVO6MG2MW+Mj91eDDVAy0hUwFbakOMpm/A/sBOnT2dDRqzTkVBhh9Ze/wiazem4ifQlW3X0TekNHtyVxKTFgmOik1CqxincGgDEfdVGek5HSRc1fs22w3htpQGd87EO9+aGQFDH43VCsCAeC4mQnldVsVb4vcoojcNhsaktugo= ;{id = 33655} 02737500000200010002A3000010016103646E73047269706E036E657400 su. 172800 IN NS a.dns.ripn.net. 02737500000200010002A3000010016203646E73047269706E036E657400 su. 172800 IN NS b.dns.ripn.net. 02737500000200010002A3000010016403646E73047269706E036E657400 su. 172800 IN NS d.dns.ripn.net. 02737500000200010002A3000010016503646E73047269706E036E657400 su. 172800 IN NS e.dns.ripn.net. 02737500000200010002A3000010016603646E73047269706E036E657400 su. 172800 IN NS f.dns.ripn.net. 02737500002B00010001518000243EE50702951F84877CC34730CCF3DBDB0692BBCDE8E41529A88CD1BDBFEE41D5E629B284 su. 86400 IN DS 16101 7 2 951F84877CC34730CCF3DBDB0692BBCDE8E41529A88CD1BDBFEE41D5E629B284 026E730564656D6F7302737500000100010002A3000004C2570008 ns.demos.su. 172800 IN A 194.87.0.8 026E730564656D6F7302737500000100010002A3000004C2570009 ns.demos.su. 172800 IN A 194.87.0.9 07737570706F727400000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 support. 172800 IN NS demand.beta.aridns.net.au. 07737570706F727400000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 support. 172800 IN NS demand.alpha.aridns.net.au. 07737570706F727400000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 support. 172800 IN NS demand.delta.aridns.net.au. 07737570706F727400000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 support. 172800 IN NS demand.gamma.aridns.net.au. 07737570706F727400002B0001000151800024C24D080207B35DA2B3CDC8457A2532E0893F20672414C797E96731377F7BB87B3ED70AA5 support. 86400 IN DS 49741 8 2 07B35DA2B3CDC8457A2532E0893F20672414C797E96731377F7BB87B3ED70AA5 07737570706F727400002E0001000151800093002B08010001518052F4220052EAD9708377003BED2866080E5A3C7E50ADEC0C63350E1050F8EB059AE702C23DF27A8CC02FBB72E303DDA5C8460BD4A411764BDA7D75FE25ADE34554EC20E6FDE491938B635118C4E71D10FA6EA3E5C9172CE68BBC57434B55CF35016C99ADF7EED460A6EFB5AC5B42AE5E83499107BD03F534E2CBBD2E77738BE6466C24AFF6C28753B98341 support. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . O+0oZggOWjx+UK3sDGM1DhBQ+OsFmucCwj3yeozAL7ty4wPdpchGC9SkEXZL2n11/iWt40VU7CDm/eSRk4tjURjE5x0Q+m6j5ckXLOaLvFdDS1XPNQFsma337tRgpu+1rFtCrl6DSZEHvQP1NOLLvS53c4vmRmwkr/bCh1O5g0E= ;{id = 33655} 07737570706F727400002E0001000151800093002F08010001518052F4220052EAD97083770081F2121A041C87EDB999A70B518F929404EB19E58897C25498B49305ED14596311D7731945E06D459287DB86DC6F6E24A3419AD742C3462D7632A941708D86D79C8A9273C638DF82BE9E1B6A561E75DE49F6CD5E298AC30E7B588609FE2FDDFAC39D0F187388E4629F65558FE2A451253EDCB63B5A599ECC5834F97611339509 support. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . gfISGgQch+25macLUY+SlATrGeWIl8JUmLSTBe0UWWMR13MZReBtRZKH24bcb24ko0Ga10LDRi12MqlBcI2G15yKknPGON+Cvp4balYedd5J9s1eKYrDDntYhgn+L936w50PGHOI5GKfZVWP4qRRJT7ctjtaWZ7MWDT5dhEzlQk= ;{id = 33655} 07737570706F727400002F000100015180000C027376000006200000000013 support. 86400 IN NSEC sv. NS DS RRSIG NSEC 02737600000200010002A3000007026E7302637200 sv. 172800 IN NS ns.cr. 02737600000200010002A300000B026E73027575036E657400 sv. 172800 IN NS ns.uu.net. 02737600000200010002A300000B026E7303646E7302627200 sv. 172800 IN NS ns.dns.br. 02737600000200010002A300001B027376056363746C640761757468646E730472697065036E657400 sv. 172800 IN NS sv.cctld.authdns.ripe.net. 02737600000200010002A300000C036369720372656402737600 sv. 172800 IN NS cir.red.sv. 02737600000200010002A300001206617574683032026E73027575036E657400 sv. 172800 IN NS auth02.ns.uu.net. 02737600002F000100015180000C027378000006200000000003 sv. 86400 IN NSEC sx. NS RRSIG NSEC 02737600002E0001000151800093002F08010001518052F4220052EAD970837700BD05B46F2F3B312F670E190AFA3A6305529A0E6E9DFBB2BF5F143D5D02357B947C71BE901DFDCDBD2EA36AB7812ED48EAD9CE407DC48595D259FA8125CABC018D702389733C9673A3693E200622E866353AF3B5CECBFFADD1C0527F0631F706A4BE09309AB26541BF272D1B9A6E1D0023CDBB4D96BE3F85CE19A7A5BC80D06E5 sv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vQW0by87MS9nDhkK+jpjBVKaDm6d+7K/XxQ9XQI1e5R8cb6QHf3NvS6jareBLtSOrZzkB9xIWV0ln6gSXKvAGNcCOJczyWc6NpPiAGIuhmNTrztc7L/63RwFJ/BjH3BqS+CTCasmVBvyctG5puHQAjzbtNlr4/hc4Zp6W8gNBuU= ;{id = 33655} 036369720372656402737600000100010002A3000004A8F3FE01 cir.red.sv. 172800 IN A 168.243.254.1 02737800000200010002A30000090161026E7302737800 sx. 172800 IN NS a.ns.sx. 02737800000200010002A30000090162026E7302737800 sx. 172800 IN NS b.ns.sx. 02737800000200010002A30000090163026E7302737800 sx. 172800 IN NS c.ns.sx. 02737800002B0001000151800018E77B07017D8C002AC87627953A66C8145C2EBBEB13B8AE64 sx. 86400 IN DS 59259 7 1 7D8C002AC87627953A66C8145C2EBBEB13B8AE64 02737800002B0001000151800024E77B070281CE2B07704CD91951A7AD5A7E88B4426AE57952AE9511521169800FEA137869 sx. 86400 IN DS 59259 7 2 81CE2B07704CD91951A7AD5A7E88B4426AE57952AE9511521169800FEA137869 02737800002E0001000151800093002B08010001518052F4220052EAD97083770095ABF7CEA5005A6042DEE9969AF067A1818E21D69AB00177F86FF41B8E49616745921AAA909C6B9BF9A2FF763E93C205F9B5F0C57DAF53E18D45C0E432250107A719D5AF417D1438B5F7F02C8BE038D5CC3BED7B1B787A697D85B3E5338B29BC22805B9E28ACC25F735C7E301ACA173F55A277627D72C3D9CF786CEFC463C837 sx. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . lav3zqUAWmBC3umWmvBnoYGOIdaasAF3+G/0G45JYWdFkhqqkJxrm/mi/3Y+k8IF+bXwxX2vU+GNRcDkMiUBB6cZ1a9BfRQ4tffwLIvgONXMO+17G3h6aX2Fs+Uziym8IoBbniiswl9zXH4wGsoXP1Wid2J9csPZz3hs78RjyDc= ;{id = 33655} 02737800002E0001000151800093002F08010001518052F4220052EAD97083770053D5BF039D5EBDE1FC530083149ED5AAD367730D31CF217B27287865345E29AAAB90E045B0CCF28703AC60D9853379B5807D60F6971F0EC6D5EE16286704B9F59796AB0001E955041A17E769B6FE7C94E9E5891702FDE67826BA45C3B375AAF7F303A94A2974D5441310578EDDC4BFA542748620225D3A281B5B275ED06B9CF2 sx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . U9W/A51eveH8UwCDFJ7VqtNncw0xzyF7Jyh4ZTReKaqrkOBFsMzyhwOsYNmFM3m1gH1g9pcfDsbV7hYoZwS59ZeWqwAB6VUEGhfnabb+fJTp5YkXAv3meCa6RcOzdar38wOpSil01UQTEFeO3cS/pUJ0hiAiXTooG1snXtBrnPI= ;{id = 33655} 02737800002F000100015180000C027379000006200000000013 sx. 86400 IN NSEC sy. NS DS RRSIG NSEC 0161026E7302737800000100010002A300000459CFB841 a.ns.sx. 172800 IN A 89.207.184.65 0161026E7302737800001C00010002A30000102A0227900000000000000000600DDEED a.ns.sx. 172800 IN AAAA 2a02:2790::600d:deed 0162026E7302737800000100010002A3000004505C5AA0 b.ns.sx. 172800 IN A 80.92.90.160 0163026E7302737800000100010002A3000004C05F136D c.ns.sx. 172800 IN A 192.95.19.109 02737900000200010002A300001B027379056363746C640761757468646E730472697065036E657400 sy. 172800 IN NS sy.cctld.authdns.ripe.net. 02737900000200010002A300000C036E733103746C6402737900 sy. 172800 IN NS ns1.tld.sy. 02737900000200010002A300000C036E733203746C6402737900 sy. 172800 IN NS ns2.tld.sy. 02737900000200010002A30000140370636807616E796361737403746C6402737900 sy. 172800 IN NS pch.anycast.tld.sy. 02737900002F00010001518000110773797374656D73000006200000000003 sy. 86400 IN NSEC systems. NS RRSIG NSEC 02737900002E0001000151800093002F08010001518052F4220052EAD97083770023AD66AB2CFB711DC24A08BCBCFECFDBA2AF6C60FAD371749C314B6F2FA93F20B04457AC98B0EF5A3440D0CD5F6436CB870C3B29F9A4AF95202E33EFABA19FB858F8BF5565E0B458502C905F9D5EA85106B885FCA7698EE6CD477220BF2DD9F4B63FE53D5CAC0813375D628ACFA7CB64EEB90981D178F36571E72704657F5196 sy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . I61mqyz7cR3CSgi8vP7P26KvbGD603F0nDFLby+pPyCwRFesmLDvWjRA0M1fZDbLhww7Kfmkr5UgLjPvq6GfuFj4v1Vl4LRYUCyQX51eqFEGuIX8p2mO5s1HciC/Ldn0tj/lPVysCBM3XWKKz6fLZO65CYHRePNlcecnBGV/UZY= ;{id = 33655} 0370636807616E796361737403746C6402737900000100010002A3000004CC3DD847 pch.anycast.tld.sy. 172800 IN A 204.61.216.71 0370636807616E796361737403746C6402737900001C00010002A3000010200105000014607100AD000000000001 pch.anycast.tld.sy. 172800 IN AAAA 2001:500:14:6071:ad::1 036E733103746C6402737900000100010002A30000045289C855 ns1.tld.sy. 172800 IN A 82.137.200.85 036E733203746C6402737900000100010002A30000045289C091 ns2.tld.sy. 172800 IN A 82.137.192.145 0773797374656D7300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 systems. 172800 IN NS demand.beta.aridns.net.au. 0773797374656D7300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 systems. 172800 IN NS demand.alpha.aridns.net.au. 0773797374656D7300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 systems. 172800 IN NS demand.delta.aridns.net.au. 0773797374656D7300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 systems. 172800 IN NS demand.gamma.aridns.net.au. 0773797374656D7300002B000100015180002461DE0802687ABBCE3773EEA70CF1434E34C2EEF2748BC0DD91A0F5C2416E77431F1C2651 systems. 86400 IN DS 25054 8 2 687ABBCE3773EEA70CF1434E34C2EEF2748BC0DD91A0F5C2416E77431F1C2651 0773797374656D7300002E0001000151800093002B08010001518052F4220052EAD97083770048FF181B833CE0D8206FD0C3F5686FE6BE266041912947F3CE112B3951E8EDE1714DF74D46C1FE3B42323467D02CAFEB12594420F28C4CFFACF5FFBFE5A516D8E2B634ABAF61024DB2CD0EE94C55F6EA553C894944B6C63E957C4D46C4A90ED660F9FC3163C33135DDF8ABC30340C7A2D8997EF3436EFE04DD767A787EBB1A8B systems. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . SP8YG4M84Nggb9DD9Whv5r4mYEGRKUfzzhErOVHo7eFxTfdNRsH+O0IyNGfQLK/rEllEIPKMTP+s9f+/5aUW2OK2NKuvYQJNss0O6UxV9upVPIlJRLbGPpV8TUbEqQ7WYPn8MWPDMTXd+KvDA0DHotiZfvNDbv4E3XZ6eH67Gos= ;{id = 33655} 0773797374656D7300002E0001000151800093002F08010001518052F4220052EAD9708377002CC8D93EF6879F9986F25BABE1392EA4E6E9D45EAE5ABE8B784F89BE528D1370906B4F316DA7B297549831559D4F31C39A92DD169756219D6C8D032E8BD7488CDAA43944CD3F0CCD3AE685164696974D479816EB358DE99CCB63A720AD26A701A80FF3FD909127059781BD273C207B538706FE9D90FCA2AAB775A27EEBCA05EB systems. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LMjZPvaHn5mG8lur4TkupObp1F6uWr6LeE+JvlKNE3CQa08xbaeyl1SYMVWdTzHDmpLdFpdWIZ1sjQMui9dIjNqkOUTNPwzNOuaFFkaWl01HmBbrNY3pnMtjpyCtJqcBqA/z/ZCRJwWXgb0nPCB7U4cG/p2Q/KKqt3WifuvKBes= ;{id = 33655} 0773797374656D7300002F000100015180000C02737A000006200000000013 systems. 86400 IN NSEC sz. NS DS RRSIG NSEC 02737A00000200010002A300001B02737A056363746C640761757468646E730472697065036E657400 sz. 172800 IN NS sz.cctld.authdns.ripe.net. 02737A00000200010002A3000012036E7331057369737061036F726702737A00 sz. 172800 IN NS ns1.sispa.org.sz. 02737A00000200010002A300000D037269700370736703636F6D00 sz. 172800 IN NS rip.psg.com. 02737A00002F000100015180001006746174746F6F000006200000000003 sz. 86400 IN NSEC tattoo. NS RRSIG NSEC 02737A00002E0001000151800093002F08010001518052F4220052EAD970837700446B581EC90D85FDE118AFCF0AB9E7EF7EA722943BAF6CEB97EA59B231C1DFFE827C71C183B14F62325EECD4BC053B19AAA24078033A247729EE8513985E0A214D60E1E250652B3FFB8E79725FF4BBFA8A7A8CF7D79612388B037B209F2995A3D011F762EBBE847F2A24366F280295DE61FC2FA33FDB6A079B73E88BBD0D7C52 sz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RGtYHskNhf3hGK/PCrnn736nIpQ7r2zrl+pZsjHB3/6CfHHBg7FPYjJe7NS8BTsZqqJAeAM6JHcp7oUTmF4KIU1g4eJQZSs/+455cl/0u/qKeoz315YSOIsDeyCfKZWj0BH3Yuu+hH8qJDZvKAKV3mH8L6M/22oHm3Poi70NfFI= ;{id = 33655} 036E7331057369737061036F726702737A00000100010002A3000004294DE804 ns1.sispa.org.sz. 172800 IN A 41.77.232.4 06746174746F6F00000200010002A30000160161026E730B756E697265676973747279036E657400 tattoo. 172800 IN NS a.ns.uniregistry.net. 06746174746F6F00000200010002A300001103746C64076973632D736E7303636F6D00 tattoo. 172800 IN NS tld.isc-sns.com. 06746174746F6F00000200010002A300001103746C64076973632D736E73036E657400 tattoo. 172800 IN NS tld.isc-sns.net. 06746174746F6F00000200010002A300001203746C64076973632D736E7304696E666F00 tattoo. 172800 IN NS tld.isc-sns.info. 06746174746F6F00002B000100015180001815110501AC153D753067B73F852FD617D6D658B2C13EBBAC tattoo. 86400 IN DS 5393 5 1 AC153D753067B73F852FD617D6D658B2C13EBBAC 06746174746F6F00002B00010001518000241511050273BB10F1CEAA45E7896F1A38F8AF5DD7C08C26432BF52C7F47141364F842ACD2 tattoo. 86400 IN DS 5393 5 2 73BB10F1CEAA45E7896F1A38F8AF5DD7C08C26432BF52C7F47141364F842ACD2 06746174746F6F00002E0001000151800093002B08010001518052F4220052EAD970837700577BB699E519A626F81E4A6427085DE94937A4DAADDEC90B44634893568FB7A08976564BFAC165F6D0DD9E2422BBCD0ADC6DFD8EB4CCA9EDCAB8C6901B837717F15E187EBD98587BB5F7E7B6D44EE37BB8C57FB05AD467BE6EFAC0DEAC01D7A61CD733C7BDFA25DBAEB997987E03ED607FCB51CAE992D06CFA61B1043AAEC859 tattoo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . V3u2meUZpib4HkpkJwhd6Uk3pNqt3skLRGNIk1aPt6CJdlZL+sFl9tDdniQiu80K3G39jrTMqe3KuMaQG4N3F/FeGH69mFh7tffnttRO43u4xX+wWtRnvm76wN6sAdemHNczx736JduuuZeYfgPtYH/LUcrpktBs+mGxBDquyFk= ;{id = 33655} 06746174746F6F00002E0001000151800093002F08010001518052F4220052EAD9708377008A55D1984DEEA2583A221F04FDD3EF0C7EAD6ABAAA307B086E931E8CF9E6BF172A2FAB7CBCC1CED1634B7B7BF51C9D4C38C646F30A7B9095320AF117B596A053C6E218336932349F02694A848817F03C897993876837C7B67705B338805D23E0A52AEFEB9949E7AA49EB5538A71B0DE86C54C0ABE4E4829226AB62A6B7544031 tattoo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ilXRmE3uolg6Ih8E/dPvDH6tarqqMHsIbpMejPnmvxcqL6t8vMHO0WNLe3v1HJ1MOMZG8wp7kJUyCvEXtZagU8biGDNpMjSfAmlKhIgX8DyJeZOHaDfHtncFsziAXSPgpSrv65lJ56pJ61U4pxsN6GxUwKvk5IKSJqtiprdUQDE= ;{id = 33655} 06746174746F6F00002F000100015180000C027463000006200000000013 tattoo. 86400 IN NSEC tc. NS DS RRSIG NSEC 02746300000200010002A300000E0461736961047A6F6E6502746300 tc. 172800 IN NS asia.zone.tc. 02746300000200010002A300000E0461736961047A6F6E6502766700 tc. 172800 IN NS asia.zone.vg. 02746300000200010002A3000010066575726F7065047A6F6E6502746300 tc. 172800 IN NS europe.zone.tc. 02746300000200010002A3000010066575726F7065047A6F6E6502766700 tc. 172800 IN NS europe.zone.vg. 02746300000200010002A30000160C6E6F727468616D6572696361047A6F6E6502746300 tc. 172800 IN NS northamerica.zone.tc. 02746300002F000100015180000C027464000006200000000003 tc. 86400 IN NSEC td. NS RRSIG NSEC 02746300002E0001000151800093002F08010001518052F4220052EAD97083770090E26B0501B5746AE09292728C144D841973E90A7C04CAB47E2C12BACC285D86B662F6E470A02AE246E1A61E822E9EFC8FE842FCE9A782F58BF8DF2B9E8D43889DD58E7858BE253EDF73BC94866EE1D9C492A2E36F7DEEEFE1D78E785FB0C9B036777316A387FFC3A9320BD3FAD308D0C5BBC85028EBE13D4DF705C9B8DD7F38 tc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kOJrBQG1dGrgkpJyjBRNhBlz6Qp8BMq0fiwSuswoXYa2YvbkcKAq4kbhph6CLp78j+hC/OmngvWL+N8rno1DiJ3VjnhYviU+33O8lIZu4dnEkqLjb33u7+HXjnhfsMmwNndzFqOH/8OpMgvT+tMI0MW7yFAo6+E9TfcFybjdfzg= ;{id = 33655} 0461736961047A6F6E6502746300000100010002A30000041FA951E1 asia.zone.tc. 172800 IN A 31.169.81.225 066575726F7065047A6F6E6502746300000100010002A30000044D4F68E1 europe.zone.tc. 172800 IN A 77.79.104.225 0C6E6F727468616D6572696361047A6F6E6502746300000100010002A3000004A64EFE91 northamerica.zone.tc. 172800 IN A 166.78.254.145 02746400000200010002A300000C036E7331036E696302746400 td. 172800 IN NS ns1.nic.td. 02746400000200010002A300000E056E732D7464036E696302667200 td. 172800 IN NS ns-td.nic.fr. 02746400000200010002A3000013056E732D746407616672696E6963036E657400 td. 172800 IN NS ns-td.afrinic.net. 02746400002F00010001518000140A746563686E6F6C6F6779000006200000000003 td. 86400 IN NSEC technology. NS RRSIG NSEC 02746400002E0001000151800093002F08010001518052F4220052EAD97083770058DD705FCEA3B9F5DD07D87CFB55F646DE5B7256BA99FC12599D40F66540B37FD936EE95435989BB3E62472EAE2B3E97E51417C853DAB6800C324FE325C3C736B47DB4FDB98B4313329D98837CDAA72EF39F8812D7601A8AE806EE12A83CC1C4110436FFE62DBD693CF44D9AFA2CC09ED3C4B1ABFE26E610CA6F6425BC3A4D19 td. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WN1wX86jufXdB9h8+1X2Rt5bcla6mfwSWZ1A9mVAs3/ZNu6VQ1mJuz5iRy6uKz6X5RQXyFPatoAMMk/jJcPHNrR9tP25i0MTMp2Yg3zapy7zn4gS12AaiugG7hKoPMHEEQQ2/+YtvWk89E2a+izAntPEsav+JuYQym9kJbw6TRk= ;{id = 33655} 036E7331036E696302746400000100010002A3000004294A2C2B ns1.nic.td. 172800 IN A 41.74.44.43 0A746563686E6F6C6F677900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 technology. 172800 IN NS demand.beta.aridns.net.au. 0A746563686E6F6C6F677900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 technology. 172800 IN NS demand.alpha.aridns.net.au. 0A746563686E6F6C6F677900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 technology. 172800 IN NS demand.delta.aridns.net.au. 0A746563686E6F6C6F677900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 technology. 172800 IN NS demand.gamma.aridns.net.au. 0A746563686E6F6C6F677900002B0001000151800024C2500802C3BEEFBB8633323215C56E2B8401CAB71D335A8E146454099D39470734D0630D technology. 86400 IN DS 49744 8 2 C3BEEFBB8633323215C56E2B8401CAB71D335A8E146454099D39470734D0630D 0A746563686E6F6C6F677900002E0001000151800093002B08010001518052F4220052EAD9708377000439BCA766C22CE6DBFA40395412FE7C3D2DD6FE20A28BA998B4596CAE2B3C9CE188AE40462810FC4988A5A0DD9347C03A96C697858ED0E7C9E047E9AFE41B29E03C226EA381D8A910B3BB291AF4F0ADBE9E1E03E65CE0D1A2DB0399161691F5DE3E7C9B8C08B5D9334972117C8A32014B42B6A0FCA3BAE1EBE64E79A92C68AD technology. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BDm8p2bCLObb+kA5VBL+fD0t1v4gooupmLRZbK4rPJzhiK5ARigQ/EmIpaDdk0fAOpbGl4WO0OfJ4Efpr+QbKeA8Im6jgdipELO7KRr08K2+nh4D5lzg0aLbA5kWFpH13j58m4wItdkzSXIRfIoyAUtCtqD8o7rh6+ZOeaksaK0= ;{id = 33655} 0A746563686E6F6C6F677900002E0001000151800093002F08010001518052F4220052EAD97083770064ED9A4CD1AFDF0632DC5A0DAB07A560FC0DBE63EAE358F5715DD5ACF26C225C7ED5E8D9F56EFA33D8F27448CFC934713FD287C26992F5433742F155A6649924BEBE066ABF91A092F725904947AAB7D6C9339397C8F937EB84458A0BB15BAD25730821CB0F53E34DA5787A797AE06A85855FC85BAC34F44B3C3AC7396C23013F technology. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZO2aTNGv3wYy3FoNqwelYPwNvmPq41j1cV3VrPJsIlx+1ejZ9W76M9jydEjPyTRxP9KHwmmS9UM3QvFVpmSZJL6+Bmq/kaCS9yWQSUeqt9bJM5OXyPk364RFiguxW60lcwghyw9T402leHp5euBqhYVfyFusNPRLPDrHOWwjAT8= ;{id = 33655} 0A746563686E6F6C6F677900002F000100015180000D0374656C000006200000000013 technology. 86400 IN NSEC tel. NS DS RRSIG NSEC 0374656C00000200010002A300000F016103646E73036E69630374656C00 tel. 172800 IN NS a.dns.nic.tel. 0374656C00000200010002A300000F016203646E73036E69630374656C00 tel. 172800 IN NS b.dns.nic.tel. 0374656C00000200010002A300000F016303646E73036E69630374656C00 tel. 172800 IN NS c.dns.nic.tel. 0374656C00000200010002A300000F016403646E73036E69630374656C00 tel. 172800 IN NS d.dns.nic.tel. 0374656C00000200010002A300000F016503646E73036E69630374656C00 tel. 172800 IN NS e.dns.nic.tel. 0374656C00000200010002A300000F016603646E73036E69630374656C00 tel. 172800 IN NS f.dns.nic.tel. 0374656C00000200010002A300000F016703646E73036E69630374656C00 tel. 172800 IN NS g.dns.nic.tel. 0374656C00000200010002A300000F016803646E73036E69630374656C00 tel. 172800 IN NS h.dns.nic.tel. 0374656C00002F000100015180000C027466000006200000000003 tel. 86400 IN NSEC tf. NS RRSIG NSEC 0374656C00002E0001000151800093002F08010001518052F4220052EAD9708377001804614D99C0FF74F14F8B175D06C0AB031ADAA46A2E2B5BD5F29C579844FBACD52595774D04A3F4AE9F07EE73A3BCE0777114777EB9461546ABF6FE6DFF8803A24C6119E11944148BD4F93E00BE1A33901D9DEA9E1899513844D1AB4CADF53291623751C26B1B627395E95C4CD04098D12339E27C3C269C7A2833B0D4D55654 tel. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GARhTZnA/3TxT4sXXQbAqwMa2qRqLitb1fKcV5hE+6zVJZV3TQSj9K6fB+5zo7zgd3EUd365RhVGq/b+bf+IA6JMYRnhGUQUi9T5PgC+GjOQHZ3qnhiZUThE0atMrfUykWI3UcJrG2JzlelcTNBAmNEjOeJ8PCaceigzsNTVVlQ= ;{id = 33655} 016103646E73036E69630374656C00000100010002A3000004C2926A26 a.dns.nic.tel. 172800 IN A 194.146.106.38 016203646E73036E69630374656C00000100010002A3000004C0249074 b.dns.nic.tel. 172800 IN A 192.36.144.116 016303646E73036E69630374656C00000100010002A3000004CC4A7001 c.dns.nic.tel. 172800 IN A 204.74.112.1 016303646E73036E69630374656C00001C00010002A300001020010502D39900000000000000000001 c.dns.nic.tel. 172800 IN AAAA 2001:502:d399::1 016403646E73036E69630374656C00000100010002A3000004CC4A7101 d.dns.nic.tel. 172800 IN A 204.74.113.1 016503646E73036E69630374656C00000100010002A3000004C7074201 e.dns.nic.tel. 172800 IN A 199.7.66.1 016603646E73036E69630374656C00000100010002A3000004C7074301 f.dns.nic.tel. 172800 IN A 199.7.67.1 016603646E73036E69630374656C00001C00010002A300001020010502100E00000000000000000001 f.dns.nic.tel. 172800 IN AAAA 2001:502:100e::1 016703646E73036E69630374656C00000100010002A3000004C0643B0B g.dns.nic.tel. 172800 IN A 192.100.59.11 016803646E73036E69630374656C00000100010002A3000004C685C70B h.dns.nic.tel. 172800 IN A 198.133.199.11 02746600000200010002A300000E016403657874036E696302667200 tf. 172800 IN NS d.ext.nic.fr. 02746600000200010002A300000A0164036E696302667200 tf. 172800 IN NS d.nic.fr. 02746600000200010002A300000E016503657874036E696302667200 tf. 172800 IN NS e.ext.nic.fr. 02746600000200010002A300000E016603657874036E696302667200 tf. 172800 IN NS f.ext.nic.fr. 02746600000200010002A300000E016703657874036E696302667200 tf. 172800 IN NS g.ext.nic.fr. 02746600002B0001000151800024357408020D4413F0F5685FD9144C7B7D6FCF6A0CAE6A806A3380164A1EE14FC0232652F8 tf. 86400 IN DS 13684 8 2 0D4413F0F5685FD9144C7B7D6FCF6A0CAE6A806A3380164A1EE14FC0232652F8 02746600002B0001000151800024F9020802C80A503F9A4594065684E1B4C6CD5C9AAACF855A9F3B4D9B4546970C6C37C0E0 tf. 86400 IN DS 63746 8 2 C80A503F9A4594065684E1B4C6CD5C9AAACF855A9F3B4D9B4546970C6C37C0E0 02746600002E0001000151800093002B08010001518052F4220052EAD9708377001EE1A1FC557EC9139F2A0301464F58C20FDA2D78E9FE3D39777D81B89C3041547FB63F6B07C79BFED631AEBF11CBAFBFE30687ED3F0BFF156DD01D0EE141DE6D56E58C31C825A1B04BC8BD2CB9E38BCA471AB2168A43C47CD534E87409A2E398E7683261D888040EC3FDBE509DD508CFDE43AC8BD4F4805DE94A450DA8081844 tf. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . HuGh/FV+yROfKgMBRk9Ywg/aLXjp/j05d32BuJwwQVR/tj9rB8eb/tYxrr8Ry6+/4waH7T8L/xVt0B0O4UHebVbljDHIJaGwS8i9LLnji8pHGrIWikPEfNU06HQJouOY52gyYdiIBA7D/b5QndUIz95DrIvU9IBd6UpFDagIGEQ= ;{id = 33655} 02746600002E0001000151800093002F08010001518052F4220052EAD970837700893A6CFD71555651F6E411111E5AACCACB885D2BC5ABE70C40F7E2A4BF95D37762EB05A106E385DDBD6DAB1D463338E31BF2538AC839BB99899057D845AEF96E0137724976521DECA823700A66C054A940DA7D6BF8C3FF7BA109D82D068A559AADD296CE30531A3A51538F671A33BCD28165113DD06D8DD915531AF6A9B2DD9B tf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iTps/XFVVlH25BERHlqsysuIXSvFq+cMQPfipL+V03di6wWhBuOF3b1tqx1GMzjjG/JTisg5u5mJkFfYRa75bgE3ckl2Uh3sqCNwCmbAVKlA2n1r+MP/e6EJ2C0GilWardKWzjBTGjpRU49nGjO80oFlET3QbY3ZFVMa9qmy3Zs= ;{id = 33655} 02746600002F000100015180000C027467000006200000000013 tf. 86400 IN NSEC tg. NS DS RRSIG NSEC 02746700000200010002A300000F036E73310561646D696E036E657400 tg. 172800 IN NS ns1.admin.net. 02746700000200010002A300000F036E73320561646D696E036E657400 tg. 172800 IN NS ns2.admin.net. 02746700000200010002A300000F036E73330561646D696E036E657400 tg. 172800 IN NS ns3.admin.net. 02746700000200010002A300000F036E73340561646D696E036E657400 tg. 172800 IN NS ns4.admin.net. 02746700000200010002A300000F036E73350561646D696E036E657400 tg. 172800 IN NS ns5.admin.net. 02746700000200010002A300000D03746C64046361666502746700 tg. 172800 IN NS tld.cafe.tg. 02746700002F000100015180000C027468000006200000000003 tg. 86400 IN NSEC th. NS RRSIG NSEC 02746700002E0001000151800093002F08010001518052F4220052EAD970837700980F0A82FBC6427BA6BF86270423B804BCA98E0B5FC779FE857D6EAD187C335806EF1B96E3B746AD42325234475088D0430ED266C89D18BE5D6051AE42D0458FC4BADEB76A9979B23AA768DC11BBA75AEFA844D8678F964083C08C08D28F9F2B3E84115F4CB9537561167FB3FBFBA0D1253F013CF3B81873D3AE27C7DA16B015 tg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mA8KgvvGQnumv4YnBCO4BLypjgtfx3n+hX1urRh8M1gG7xuW47dGrUIyUjRHUIjQQw7SZsidGL5dYFGuQtBFj8S63rdqmXmyOqdo3BG7p1rvqETYZ4+WQIPAjAjSj58rPoQRX0y5U3VhFn+z+/ug0SU/ATzzuBhz064nx9oWsBU= ;{id = 33655} 03746C64046361666502746700000100010002A300000450F84014 tld.cafe.tg. 172800 IN A 80.248.64.20 02746800000200010002A300000E026E730574686E6963036E657400 th. 172800 IN NS ns.thnic.net. 02746800000200010002A300001B027468056363746C640761757468646E730472697065036E657400 th. 172800 IN NS th.cctld.authdns.ripe.net. 02746800000200010002A300001403616D7306736E732D706203697363036F726700 th. 172800 IN NS ams.sns-pb.isc.org. 02746800000200010002A300001204646E73310574686E696302636F02746800 th. 172800 IN NS dns1.thnic.co.th. 02746800000200010002A3000012046E732D610574686E696302636F02746800 th. 172800 IN NS ns-a.thnic.co.th. 02746800000200010002A3000012046E732D650574686E696302636F02746800 th. 172800 IN NS ns-e.thnic.co.th. 02746800000200010002A3000015047366626106736E732D706203697363036F726700 th. 172800 IN NS sfba.sns-pb.isc.org. 02746800002B000100015180002491B10802890C918B568A6E30BF3A54B88C6B5C1838B9137E849EB96581FF36838399C276 th. 86400 IN DS 37297 8 2 890C918B568A6E30BF3A54B88C6B5C1838B9137E849EB96581FF36838399C276 02746800002E0001000151800093002B08010001518052F4220052EAD97083770094BE35534164445FFAEA524626F1A38B4632FB3760CE5F2884D50338751398F7EE0BA37D1B9050CA8FD075D13855594961EC7FAC7E352562DBAFCCE7FDBF661FA14BA6A58A78A27DCC057A7D94332620CBAA1A780AE85D880D3F920A63951E0F2575B13719436A125AB8BE760C24D6CBE98D1342535A75BFC99F41882B9B546A th. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . lL41U0FkRF/66lJGJvGji0Yy+zdgzl8ohNUDOHUTmPfuC6N9G5BQyo/QddE4VVlJYex/rH41JWLbr8zn/b9mH6FLpqWKeKJ9zAV6fZQzJiDLqhp4CuhdiA0/kgpjlR4PJXWxNxlDahJauL52DCTWy+mNE0JTWnW/yZ9BiCubVGo= ;{id = 33655} 02746800002E0001000151800093002F08010001518052F4220052EAD970837700B4A50FA5DA4F3EC679400D3EE979175DE83A778A7CC78CAF2118E8A29CA1C98874C023FEB7F174E54F35DF908C6D0796F6E7C782AFE6211F24083C1521346BA888A6AB87D4B0E6C3F1532E4AEA691D503CB35CA5BDE777126965FE3C7A7B4890FFD1F867B77F87E441081487501456D74BD2B41C255C563DFB91CF5949F129F6 th. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tKUPpdpPPsZ5QA0+6XkXXeg6d4p8x4yvIRjoopyhyYh0wCP+t/F05U8135CMbQeW9ufHgq/mIR8kCDwVITRrqIimq4fUsObD8VMuSuppHVA8s1ylved3Emll/jx6e0iQ/9H4Z7d/h+RBCBSHUBRW10vStBwlXFY9+5HPWUnxKfY= ;{id = 33655} 02746800002F0001000151800010067469656E6461000006200000000013 th. 86400 IN NSEC tienda. NS DS RRSIG NSEC 04646E73310574686E696302636F02746800000100010002A3000004CA1C0116 dns1.thnic.co.th. 172800 IN A 202.28.1.22 04646E73310574686E696302636F02746800001C00010002A3000010200103C8120900010000000000000022 dns1.thnic.co.th. 172800 IN AAAA 2001:3c8:1209:1::22 046E732D610574686E696302636F02746800000100010002A30000043D13F226 ns-a.thnic.co.th. 172800 IN A 61.19.242.38 046E732D650574686E696302636F02746800000100010002A3000004C200011C ns-e.thnic.co.th. 172800 IN A 194.0.1.28 046E732D650574686E696302636F02746800001C00010002A30000102001067800040000000000000000001C ns-e.thnic.co.th. 172800 IN AAAA 2001:678:4::1c 067469656E646100000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 tienda. 172800 IN NS demand.beta.aridns.net.au. 067469656E646100000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 tienda. 172800 IN NS demand.alpha.aridns.net.au. 067469656E646100000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 tienda. 172800 IN NS demand.delta.aridns.net.au. 067469656E646100000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 tienda. 172800 IN NS demand.gamma.aridns.net.au. 067469656E646100002B0001000151800024E46108023609AECF68EF07474D2D9CFC9735DDA2365FBC3C6E4EBC01957E7903E17467A2 tienda. 86400 IN DS 58465 8 2 3609AECF68EF07474D2D9CFC9735DDA2365FBC3C6E4EBC01957E7903E17467A2 067469656E646100002E0001000151800093002B08010001518052F4220052EAD9708377001DEE4912F35FCC46EA6D8358EC2909C2FCF07FE57FB5BCBFA4A86DC6E344A41089CBC65236C75C62EC4D355C8CF7AE91391CCBEC9FADEEE15DDB6DF4A44BF6D7F13C88AABDB7BBEAD785734E1157C6A000F394E9A57533EF5B4EE6C2F4414D8640C59F3EFB08EE1B9364D540E45DBD488724CA477EC97741EDBC4DAEA7E83D0A tienda. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . He5JEvNfzEbqbYNY7CkJwvzwf+V/tby/pKhtxuNEpBCJy8ZSNsdcYuxNNVyM966RORzL7J+t7uFd2230pEv21/E8iKq9t7vq14VzThFXxqAA85TppXUz71tO5sL0QU2GQMWfPvsI7huTZNVA5F29SIckykd+yXdB7bxNrqfoPQo= ;{id = 33655} 067469656E646100002E0001000151800093002F08010001518052F4220052EAD9708377006AF3D6DFAAF3F3AC334C575C80CFB38775F05B0DDAE8B7A6AD9641332A5010A6471ABDFB15EE4D8906D681CFF7DACAF8FB675AC483038DDD67C63EF0A75A1B1DEA5D17613F7CCC929A5C751152C12254C8AF0776406C809339B9E59F69633F22DF6B937C0393CC612CAD000C0A20E278FAC23BE36A06D0FBA4A00E93CAFD4072 tienda. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . avPW36rz86wzTFdcgM+zh3XwWw3a6LemrZZBMypQEKZHGr37Fe5NiQbWgc/32sr4+2daxIMDjd1nxj7wp1obHepdF2E/fMySmlx1EVLBIlTIrwd2QGyAkzm55Z9pYz8i32uTfAOTzGEsrQAMCiDiePrCO+NqBtD7pKAOk8r9QHI= ;{id = 33655} 067469656E646100002F000100015180000E0474697073000006200000000013 tienda. 86400 IN NSEC tips. NS DS RRSIG NSEC 047469707300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 tips. 172800 IN NS demand.beta.aridns.net.au. 047469707300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 tips. 172800 IN NS demand.alpha.aridns.net.au. 047469707300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 tips. 172800 IN NS demand.delta.aridns.net.au. 047469707300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 tips. 172800 IN NS demand.gamma.aridns.net.au. 047469707300002B0001000151800024D70E08025083EDD4FF622CA53C15F91D62C83D08706912A093F49B6DAC85A7B511F545B5 tips. 86400 IN DS 55054 8 2 5083EDD4FF622CA53C15F91D62C83D08706912A093F49B6DAC85A7B511F545B5 047469707300002E0001000151800093002B08010001518052F4220052EAD9708377009F76202E35FF1A0FBA9E09172EEFFE37E688D977F2D832676929A326CFE52C2717E904EBC3DAFAA413432B9953946BCEF230B152D870B460E53635F41171D24B340AADBA795D9D6C8D4E2A3EC07980FA267946B8D0A68A1ABDE9E4E66E9272543CC0B1C75F8BE16D4313245977F6F58565245FCBED6372567CC94819126E7CAC tips. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . n3YgLjX/Gg+6ngkXLu/+N+aI2Xfy2DJnaSmjJs/lLCcX6QTrw9r6pBNDK5lTlGvO8jCxUthwtGDlNjX0EXHSSzQKrbp5XZ1sjU4qPsB5gPomeUa40KaKGr3p5OZuknJUPMCxx1+L4W1DEyRZd/b1hWUkX8vtY3JWfMlIGRJufKw= ;{id = 33655} 047469707300002E0001000151800093002F08010001518052F4220052EAD9708377007771F8E4D9A3CD77BB36362286FC0976699D41AEB75F1C659B22484F92847E24314F15FE81B3BC3DC69CDDDB36FEDF606E951BA496DC9F7BBAD9BE6023143B9325999CD7FA4487745C2A1286F4289F66C615ADA81702FF542076206C62FC63CB110DB7306F3B1F8EF3EC90C4BEF175DDBC79EAF779EAD1D0A9C14A8990C1BFA1 tips. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . d3H45NmjzXe7NjYihvwJdmmdQa63XxxlmyJIT5KEfiQxTxX+gbO8Pcac3ds2/t9gbpUbpJbcn3u62b5gIxQ7kyWZnNf6RId0XCoShvQon2bGFa2oFwL/VCB2IGxi/GPLEQ23MG87H47z7JDEvvF13bx56vd56tHQqcFKiZDBv6E= ;{id = 33655} 047469707300002F000100015180000C02746A000006200000000013 tips. 86400 IN NSEC tj. NS DS RRSIG NSEC 02746A00000200010002A300001B02746A056363746C640761757468646E730472697065036E657400 tj. 172800 IN NS tj.cctld.authdns.ripe.net. 02746A00000200010002A300000C036E7331036E696302746A00 tj. 172800 IN NS ns1.nic.tj. 02746A00000200010002A3000014036E73320A746F6A696B6973746F6E03636F6D00 tj. 172800 IN NS ns2.tojikiston.com. 02746A00000200010002A30000140670686C6F656D07756F7265676F6E0365647500 tj. 172800 IN NS phloem.uoregon.edu. 02746A00002F000100015180000C02746B000006200000000003 tj. 86400 IN NSEC tk. NS RRSIG NSEC 02746A00002E0001000151800093002F08010001518052F4220052EAD97083770000D83221BAF16C7F91E8EB5D518EF9236FA0B2494829FF978F57145994B07231EEEAC3941EBDB4517986131B0E9F5880F3BE85069D8A2A852CF4981149294A96827C6C8C6A8F26D6D97FF1CCEA515C781BBDD3415B6A2CEC2DD60C77C3F9DB74F6B6A0278B7D5787CFBD7E1650CA9A93449ADDCD3688BB1F12C9DDEC3686C95E tj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ANgyIbrxbH+R6OtdUY75I2+gsklIKf+Xj1cUWZSwcjHu6sOUHr20UXmGExsOn1iA876FBp2KKoUs9JgRSSlKloJ8bIxqjybW2X/xzOpRXHgbvdNBW2os7C3WDHfD+dt09ragJ4t9V4fPvX4WUMqak0Sa3c02iLsfEsnd7DaGyV4= ;{id = 33655} 036E7331036E696302746A00000100010002A30000045BDAA0C5 ns1.nic.tj. 172800 IN A 91.218.160.197 02746B00000200010002A30000090161026E7302746B00 tk. 172800 IN NS a.ns.tk. 02746B00000200010002A30000090162026E7302746B00 tk. 172800 IN NS b.ns.tk. 02746B00000200010002A30000090163026E7302746B00 tk. 172800 IN NS c.ns.tk. 02746B00000200010002A30000090164026E7302746B00 tk. 172800 IN NS d.ns.tk. 02746B00002F000100015180000C02746C000006200000000003 tk. 86400 IN NSEC tl. NS RRSIG NSEC 02746B00002E0001000151800093002F08010001518052F4220052EAD97083770057255D73E5495E903D4470F65EA15FF1754A8FEFF210FE803E488FD455965EA768E37DBD88CE49513F2E83DF9F46EA5F40BFDE978B226B7FDE3F126B2EF9EF232C0E0CC57F95385FFD32ED84EE6290EBF0BCC93D574620DCB80F953BFD464D3534BCA2F1461D3E8CE7DE1A25A5C8FB9906D3303C9C48EB0E421DB3E1DB5A4FE8 tk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VyVdc+VJXpA9RHD2XqFf8XVKj+/yEP6APkiP1FWWXqdo4329iM5JUT8ug9+fRupfQL/el4sia3/ePxJrLvnvIywODMV/lThf/TLthO5ikOvwvMk9V0Yg3LgPlTv9Rk01NLyi8UYdPozn3holpcj7mQbTMDycSOsOQh2z4dtaT+g= ;{id = 33655} 0161026E7302746B00000100010002A3000004C2002601 a.ns.tk. 172800 IN A 194.0.38.1 0161026E7302746B00001C00010002A300001020010678005000000000000000000001 a.ns.tk. 172800 IN AAAA 2001:678:50::1 0162026E7302746B00000100010002A3000004C2002701 b.ns.tk. 172800 IN A 194.0.39.1 0162026E7302746B00001C00010002A300001020010678005400000000000000000001 b.ns.tk. 172800 IN AAAA 2001:678:54::1 0163026E7302746B00000100010002A3000004C2002801 c.ns.tk. 172800 IN A 194.0.40.1 0163026E7302746B00001C00010002A300001020010678005800000000000000000001 c.ns.tk. 172800 IN AAAA 2001:678:58::1 0164026E7302746B00000100010002A3000004C2002901 d.ns.tk. 172800 IN A 194.0.41.1 0164026E7302746B00001C00010002A300001020010678005C00000000000000000001 d.ns.tk. 172800 IN AAAA 2001:678:5c::1 02746C00000200010002A3000013026E7307616E7963617374036E696302746C00 tl. 172800 IN NS ns.anycast.nic.tl. 02746C00000200010002A300001003746C310664796E746C64036E657400 tl. 172800 IN NS tl1.dyntld.net. 02746C00000200010002A300001003746C330664796E746C64036E657400 tl. 172800 IN NS tl3.dyntld.net. 02746C00002B000100015180002462DB0802BC0412D59817424A34040676F1AE1205B1F33FC9510E7E30114711851FFCEDE4 tl. 86400 IN DS 25307 8 2 BC0412D59817424A34040676F1AE1205B1F33FC9510E7E30114711851FFCEDE4 02746C00002E0001000151800093002B08010001518052F4220052EAD9708377001A11422911BE68D2127524B0031BA607E768E889ACEEB70245738F43AE1FC3BF90C1CCEEDD69EB2ECDBCA43353E10623EDAD487C601FDBE8C6C2CA8950DDC8B8127BA463B38DC4E968B98BAFB579D3468132C05BFD37781460BA13447AEF258D88FFFB8F418165AC5E8FF47D08F5F201A6B585129C9F9D1CDC48E5B8DFF799E2 tl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GhFCKRG+aNISdSSwAxumB+do6Ims7rcCRXOPQ64fw7+Qwczu3WnrLs28pDNT4QYj7a1IfGAf2+jGwsqJUN3IuBJ7pGOzjcTpaLmLr7V500aBMsBb/Td4FGC6E0R67yWNiP/7j0GBZaxej/R9CPXyAaa1hRKcn50c3EjluN/3meI= ;{id = 33655} 02746C00002E0001000151800093002F08010001518052F4220052EAD970837700599866FEBDA53C4DAED2324E87AD30A814179B4F0E86E47BEDB2D09833DE5B078258B2886DA744BE9A2A21CC9A89514CD5C430F1A209437B2D540793E0B67231B9D6ECFE02F799848E56469EFEA73950356211300FD52497799AB0A9DB0A9F96D89DD58090A5E4EB9F94CFB0E11EB3D4B544B1498216D3C35470CDF3759B0CB6 tl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WZhm/r2lPE2u0jJOh60wqBQXm08OhuR77bLQmDPeWweCWLKIbadEvpoqIcyaiVFM1cQw8aIJQ3stVAeT4LZyMbnW7P4C95mEjlZGnv6nOVA1YhEwD9Ukl3masKnbCp+W2J3VgJCl5OuflM+w4R6z1LVEsUmCFtPDVHDN83WbDLY= ;{id = 33655} 02746C00002F000100015180000C02746D000006200000000013 tl. 86400 IN NSEC tm. NS DS RRSIG NSEC 026E7307616E7963617374036E696302746C00000100010002A3000004CC3DD813 ns.anycast.nic.tl. 172800 IN A 204.61.216.19 026E7307616E7963617374036E696302746C00001C00010002A3000010200105000014601900AD000000000001 ns.anycast.nic.tl. 172800 IN AAAA 2001:500:14:6019:ad::1 02746D00000200010002A300000A0161036E696302746D00 tm. 172800 IN NS a.nic.tm. 02746D00000200010002A300000C0161046E733133036E657400 tm. 172800 IN NS a.ns13.net. 02746D00000200010002A300000A0162036E696302616300 tm. 172800 IN NS b.nic.ac. 02746D00000200010002A300000A0162036E696302696F00 tm. 172800 IN NS b.nic.io. 02746D00000200010002A300000C0162046E733133036E657400 tm. 172800 IN NS b.ns13.net. 02746D00000200010002A3000016036E73310C636F6D6D756E697479646E73036E657400 tm. 172800 IN NS ns1.communitydns.net. 02746D00000200010002A300000F036E73330369636202636F02756B00 tm. 172800 IN NS ns3.icb.co.uk. 02746D00002B000100015180001871070701C9660594EFA1DCCCCA1B6B7359262F2E11052403 tm. 86400 IN DS 28935 7 1 C9660594EFA1DCCCCA1B6B7359262F2E11052403 02746D00002B0001000151800024710707020C30AA64DF5149B0237F0CAD8E6AB22825BDC8CADBD7CC108F6FFC74AC428709 tm. 86400 IN DS 28935 7 2 0C30AA64DF5149B0237F0CAD8E6AB22825BDC8CADBD7CC108F6FFC74AC428709 02746D00002E0001000151800093002B08010001518052F4220052EAD97083770058911DD64AE057F266E76A66759EF464CF3B6BC14A1612B23E2D3F6F5C99DCC4AB6A1A1C94DF95F203A3773AAE938A7D962966AF36CF4CF73C8ED4695948EC7FCCCBA6E7AC1D6AA07F9E5AEF4F0AB1FC05CF739FB3639316A0E5CF2F8EFF60FFBD9E5BF98DEFF69FB53E2C5E72F503B6850370BBE6B4DC41051A36D7EE792FF5 tm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WJEd1krgV/Jm52pmdZ70ZM87a8FKFhKyPi0/b1yZ3MSrahoclN+V8gOjdzquk4p9lilmrzbPTPc8jtRpWUjsf8zLpuesHWqgf55a708KsfwFz3Ofs2OTFqDlzy+O/2D/vZ5b+Y3v9p+1PixecvUDtoUDcLvmtNxBBRo21+55L/U= ;{id = 33655} 02746D00002E0001000151800093002F08010001518052F4220052EAD9708377004B5F2FF74C3E456F9EDBFCDBF91C6E484E8FE27D4C74E9F433D61EB607D609A0BD687B514224B6C2670FCC063A0F34AF7606A7B9A2BF7D736F5BF9122777894A40CC1C7C0CBBC2EE16048DD6AD395F0CAB3AA1C27D991236CA14406CB7B8A0FA4F236F8B0AD8E232A7044AFC7192385BE5E3E4DAAF4FC8A2D0E94D6443194D9B tm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S18v90w+RW+e2/zb+RxuSE6P4n1MdOn0M9YetgfWCaC9aHtRQiS2wmcPzAY6DzSvdganuaK/fXNvW/kSJ3eJSkDMHHwMu8LuFgSN1q05XwyrOqHCfZkSNsoUQGy3uKD6TyNviwrY4jKnBEr8cZI4W+Xj5NqvT8ii0OlNZEMZTZs= ;{id = 33655} 02746D00002F000100015180000C02746E000006200000000013 tm. 86400 IN NSEC tn. NS DS RRSIG NSEC 0161036E696302746D00000100010002A300000440FB1FB4 a.nic.tm. 172800 IN A 64.251.31.180 02746E00000200010002A300000C036E73310361746902746E00 tn. 172800 IN NS ns1.ati.tn. 02746E00000200010002A300000C036E73320361746902746E00 tn. 172800 IN NS ns2.ati.tn. 02746E00000200010002A300000C036E7332036E696302667200 tn. 172800 IN NS ns2.nic.fr. 02746E00000200010002A300000C036E73380361746902746E00 tn. 172800 IN NS ns8.ati.tn. 02746E00000200010002A300000C036E73390361746902746E00 tn. 172800 IN NS ns9.ati.tn. 02746E00000200010002A300000D037269700370736703636F6D00 tn. 172800 IN NS rip.psg.com. 02746E00000200010002A3000013056E732D746E07616672696E6963036E657400 tn. 172800 IN NS ns-tn.afrinic.net. 02746E00002F000100015180000C02746F000006200000000003 tn. 86400 IN NSEC to. NS RRSIG NSEC 02746E00002E0001000151800093002F08010001518052F4220052EAD9708377003CADBB2074E3A72288C80B97AD3A6ADE080CD530E286040A7CC74FBC300AC680368F3A34EF97D7FDF3B4D06811F82E4C019E1D80B477584279B9D07EE723ED228E539F9D5AD9A5BEFDB146121D36DB95BCD5AD17529E46FFC6219D40FB95FBD3D1AC76899B1F3BBDD923D09BBFF37D4206F1C5B3C69D944AEB334B4D3A300480 tn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . PK27IHTjpyKIyAuXrTpq3ggM1TDihgQKfMdPvDAKxoA2jzo075fX/fO00GgR+C5MAZ4dgLR3WEJ5udB+5yPtIo5Tn51a2aW+/bFGEh0225W81a0XUp5G/8YhnUD7lfvT0ax2iZsfO73ZI9Cbv/N9QgbxxbPGnZRK6zNLTTowBIA= ;{id = 33655} 036E73310361746902746E00000100010002A3000004C15F420A ns1.ati.tn. 172800 IN A 193.95.66.10 036E73310361746902746E00001C00010002A300001020014350000100010000000000000010 ns1.ati.tn. 172800 IN AAAA 2001:4350:1:1::10 036E73320361746902746E00000100010002A3000004C15F4316 ns2.ati.tn. 172800 IN A 193.95.67.22 036E73320361746902746E00001C00010002A300001020014350204800010000000000000022 ns2.ati.tn. 172800 IN AAAA 2001:4350:2048:1::22 036E73380361746902746E00000100010002A3000004C15F4206 ns8.ati.tn. 172800 IN A 193.95.66.6 036E73380361746902746E00001C00010002A300001020014350000100010000000000000006 ns8.ati.tn. 172800 IN AAAA 2001:4350:1:1::6 036E73390361746902746E00000100010002A3000004C15F431A ns9.ati.tn. 172800 IN A 193.95.67.26 036E73390361746902746E00001C00010002A300001020014350204800010000000000000026 ns9.ati.tn. 172800 IN AAAA 2001:4350:2048:1::26 02746F00000200010002A300001B02746F056363746C640761757468646E730472697065036E657400 to. 172800 IN NS to.cctld.authdns.ripe.net. 02746F00000200010002A3000011036E7331076961667269636103636F6D00 to. 172800 IN NS ns1.iafrica.com. 02746F00000200010002A300000904636F6C6F02746F00 to. 172800 IN NS colo.to. 02746F00000200010002A300000A05746F6E696302746F00 to. 172800 IN NS tonic.to. 02746F00000200010002A300001206617574683032026E73027575036E657400 to. 172800 IN NS auth02.ns.uu.net. 02746F00002F000100015180000F05746F646179000006200000000003 to. 86400 IN NSEC today. NS RRSIG NSEC 02746F00002E0001000151800093002F08010001518052F4220052EAD970837700668DBDDF19C60C1016E90423FA826E3FBBDB9FF203150838AF97406B1F420736F5B679EF8DB9E92090350A54BE89D157E7EA0356D035284B967D88C89187EB54AB0761D5E3E0EABDB5E1602DAE7134BF99280D6DBC238F00C85288F4536FC0BC0AE0EBFA2CE52A6DF3860A77E00208E8EE05626992DCD7808C92FFF1AFF6A1E0 to. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zo293xnGDBAW6QQj+oJuP7vbn/IDFQg4r5dAax9CBzb1tnnvjbnpIJA1ClS+idFX5+oDVtA1KEuWfYjIkYfrVKsHYdXj4Oq9teFgLa5xNL+ZKA1tvCOPAMhSiPRTb8C8CuDr+izlKm3zhgp34AII6O4FYmmS3NeAjJL/8a/2oeA= ;{id = 33655} 04636F6C6F02746F00000100010002A3000004D84A2068 colo.to. 172800 IN A 216.74.32.104 05746F6E696302746F00000100010002A3000004D84A2064 tonic.to. 172800 IN A 216.74.32.100 05746F64617900000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 today. 172800 IN NS demand.beta.aridns.net.au. 05746F64617900000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 today. 172800 IN NS demand.alpha.aridns.net.au. 05746F64617900000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 today. 172800 IN NS demand.delta.aridns.net.au. 05746F64617900000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 today. 172800 IN NS demand.gamma.aridns.net.au. 05746F64617900002B000100015180002436730802CFED9FB12BD6FF22FF6FC7A6098428062D58B41236279221011BC3FDCCB1F3FF today. 86400 IN DS 13939 8 2 CFED9FB12BD6FF22FF6FC7A6098428062D58B41236279221011BC3FDCCB1F3FF 05746F64617900002E0001000151800093002B08010001518052F4220052EAD9708377004DD38F309B1E137FED723E2C325908B649F9BFEEF6BD74054B35C7E8BBC7C07995BC30FBC7F589213E3446D7804A0AD4F8CC102D84D3793FFEAF88232A6625276C3F44F4870353C3C7DA515E3E44B39B333795F3F5726A7D68B46FC5780B76A18A0509BE9B2548B1038A15DED1CFA39A2048F6C6B476D5386A56602945282BE7 today. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . TdOPMJseE3/tcj4sMlkItkn5v+72vXQFSzXH6LvHwHmVvDD7x/WJIT40RteASgrU+MwQLYTTeT/+r4gjKmYlJ2w/RPSHA1PDx9pRXj5Es5szN5Xz9XJqfWi0b8V4C3ahigUJvpslSLEDihXe0c+jmiBI9sa0dtU4alZgKUUoK+c= ;{id = 33655} 05746F64617900002E0001000151800093002F08010001518052F4220052EAD9708377000D85AA662AD991657E8F4138DB882C2B161B5324B9E9F182190D75A05C85B2464DD6FFC2E1FD446F2E6C69E63D029A4FD42110660090FECF0D557E1B5055FAA302FD56991ED4D2BEA206EC643F8D4F26601E5650650A8CCC7B786951C95D40DAA08EA209CB63E261D588791904866F20D8495BBAB9C0470194FA1E7418656942 today. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DYWqZirZkWV+j0E424gsKxYbUyS56fGCGQ11oFyFskZN1v/C4f1Eby5saeY9AppP1CEQZgCQ/s8NVX4bUFX6owL9Vpke1NK+ogbsZD+NTyZgHlZQZQqMzHt4aVHJXUDaoI6iCctj4mHViHkZBIZvINhJW7q5wEcBlPoedBhlaUI= ;{id = 33655} 05746F64617900002F000100015180000F05746F6B796F000006200000000013 today. 86400 IN NSEC tokyo. NS DS RRSIG NSEC 05746F6B796F00000200010002A300001301610B676D6F7265676973747279036E657400 tokyo. 172800 IN NS a.gmoregistry.net. 05746F6B796F00000200010002A300001301620B676D6F7265676973747279036E657400 tokyo. 172800 IN NS b.gmoregistry.net. 05746F6B796F00000200010002A300001301630B676D6F7265676973747279036E657400 tokyo. 172800 IN NS c.gmoregistry.net. 05746F6B796F00000200010002A300001301640B676D6F7265676973747279036E657400 tokyo. 172800 IN NS d.gmoregistry.net. 05746F6B796F00000200010002A300001301650B676D6F7265676973747279036E657400 tokyo. 172800 IN NS e.gmoregistry.net. 05746F6B796F00002B00010001518000248003080219E0438B0E13DE780175E4BCEBE46432C5287FDB9DFE2B4440FA4E3BFBB20BC6 tokyo. 86400 IN DS 32771 8 2 19E0438B0E13DE780175E4BCEBE46432C5287FDB9DFE2B4440FA4E3BFBB20BC6 05746F6B796F00002E0001000151800093002B08010001518052F4220052EAD9708377006ACD0BF0EBCCFA4C2D625AB53CC96D1BD1036096603AC27F836A4B826D0BF416F907C8A90B1DF29C45221FA40870E8AD0863658C98C5F9556A60A42F630400D78A894D96DF628174E2A204AC70036A710CBA482712BD2E04B820E3BD0211F34234DB7DE5048BFCDDCFE4BFC60A9C7A26FFFCA12AFFFC3323832DDC7BAE11F2C0 tokyo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . as0L8OvM+kwtYlq1PMltG9EDYJZgOsJ/g2pLgm0L9Bb5B8ipCx3ynEUiH6QIcOitCGNljJjF+VVqYKQvYwQA14qJTZbfYoF04qIErHADanEMukgnEr0uBLgg470CEfNCNNt95QSL/N3P5L/GCpx6Jv/8oSr//DMjgy3ce64R8sA= ;{id = 33655} 05746F6B796F00002E0001000151800093002F08010001518052F4220052EAD97083770074D7A79B033A3387A760EFC059CB06197638FD1203C27D40F495399CDC528F6BE017F8D0C685A52DE245ABDD8117263E959DDCFAC8A290B1B77E18CCFA0D706CA33AB521185F1582FA7347BE16686F02A359A4FD5CE913CDAF5FC300996C11959B4AC026CC1A5BC635B491EC753A3B697C22FD1AB05076C46EE283A268CC505E tokyo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dNenmwM6M4enYO/AWcsGGXY4/RIDwn1A9JU5nNxSj2vgF/jQxoWlLeJFq92BFyY+lZ3c+siikLG3fhjM+g1wbKM6tSEYXxWC+nNHvhZobwKjWaT9XOkTza9fwwCZbBGVm0rAJswaW8Y1tJHsdTo7aXwi/RqwUHbEbuKDomjMUF4= ;{id = 33655} 05746F6B796F00002F000100015180000F05746F6F6C73000006200000000013 tokyo. 86400 IN NSEC tools. NS DS RRSIG NSEC 05746F6F6C7300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 tools. 172800 IN NS demand.beta.aridns.net.au. 05746F6F6C7300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 tools. 172800 IN NS demand.alpha.aridns.net.au. 05746F6F6C7300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 tools. 172800 IN NS demand.delta.aridns.net.au. 05746F6F6C7300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 tools. 172800 IN NS demand.gamma.aridns.net.au. 05746F6F6C7300002B0001000151800024F2E008029107EBABED1AE73F93CE28DA7931F52EE237911FB318E0F1BAE6F9AAC73631FE tools. 86400 IN DS 62176 8 2 9107EBABED1AE73F93CE28DA7931F52EE237911FB318E0F1BAE6F9AAC73631FE 05746F6F6C7300002E0001000151800093002B08010001518052F4220052EAD9708377008ED28CDFC6870E7BD61B7B69512D2A86E762BCD09070716FB7D1376F1A2E0D974721A8F600568595A3579E06B63EEC5F526B82438C0D2589E4FB162A4BE76D308F0F4E838143C95DFC423F98FA72491AFFE30A3317DAB5081FF033DA073D3E5BD765F8006BAD64D2949BC5CAE8908F36DB25E6D7D285AC800BE1F70FDCFEEA08 tools. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jtKM38aHDnvWG3tpUS0qhudivNCQcHFvt9E3bxouDZdHIaj2AFaFlaNXnga2PuxfUmuCQ4wNJYnk+xYqS+dtMI8PToOBQ8ld/EI/mPpySRr/4wozF9q1CB/wM9oHPT5b12X4AGutZNKUm8XK6JCPNtsl5tfShayAC+H3D9z+6gg= ;{id = 33655} 05746F6F6C7300002E0001000151800093002F08010001518052F4220052EAD97083770049ADAE73E4D5C8BD190E42D26A571893C28C30A172F703E3B715CD37B764E912FDD0B64D7376CD411B6B05ED52548A0959888D2BC1472CFF7A07CE7F41875FEDB1766B3E76ECAA38A4C5EDCA282C9EFC53DAB202AAC5EC57BCF82BDE45D169ED4BF3C85A52BB73BBF2A4B9B8BC81623BED7DEB0590F76A9427C03277805E0D58 tools. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Sa2uc+TVyL0ZDkLSalcYk8KMMKFy9wPjtxXNN7dk6RL90LZNc3bNQRtrBe1SVIoJWYiNK8FHLP96B85/QYdf7bF2az527Ko4pMXtyigsnvxT2rICqsXsV7z4K95F0WntS/PIWlK7c7vypLm4vIFiO+196wWQ92qUJ8Ayd4BeDVg= ;{id = 33655} 05746F6F6C7300002F000100015180000C027470000006200000000013 tools. 86400 IN NSEC tp. NS DS RRSIG NSEC 02747000000200010002A300001B027470056363746C640761757468646E730472697065036E657400 tp. 172800 IN NS tp.cctld.authdns.ripe.net. 02747000000200010002A3000011036E7333026E730465736174036E657400 tp. 172800 IN NS ns3.ns.esat.net. 02747000000200010002A30000130661757468303107636F6E6E65637402696500 tp. 172800 IN NS auth01.connect.ie. 02747000000200010002A300001206617574683032026E73027575036E657400 tp. 172800 IN NS auth02.ns.uu.net. 02747000000200010002A300001609757563702D67772D310270610364656303636F6D00 tp. 172800 IN NS uucp-gw-1.pa.dec.com. 02747000000200010002A300001609757563702D67772D320270610364656303636F6D00 tp. 172800 IN NS uucp-gw-2.pa.dec.com. 02747000002F000100015180000C027472000006200000000003 tp. 86400 IN NSEC tr. NS RRSIG NSEC 02747000002E0001000151800093002F08010001518052F4220052EAD9708377007EC7D0B8F1E5A3D877E6AC284DB6F43C3295908FCC28DDD90B50D2D25FB8C11977C587AA60038101CEA32C8525A9FB2E58B0231432E8E51A161B6D325EFAB521C2F0342ED982389D7B9115BD0130AFD8F7E1B3B33144D7ED7FE59780DEC8E3E5CF452E05C4FEDE0F9666AF69E46A0739F8C8368C7BBF5032063E83402073BA97 tp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fsfQuPHlo9h35qwoTbb0PDKVkI/MKN3ZC1DS0l+4wRl3xYeqYAOBAc6jLIUlqfsuWLAjFDLo5RoWG20yXvq1IcLwNC7Zgjide5EVvQEwr9j34bOzMUTX7X/ll4DeyOPlz0UuBcT+3g+WZq9p5GoHOfjINox7v1AyBj6DQCBzupc= ;{id = 33655} 02747200000200010002A300001B027472056363746C640761757468646E730472697065036E657400 tr. 172800 IN NS tr.cctld.authdns.ripe.net. 02747200000200010002A300000C036E7331036E696302747200 tr. 172800 IN NS ns1.nic.tr. 02747200000200010002A300000C036E7332036E696302747200 tr. 172800 IN NS ns2.nic.tr. 02747200000200010002A300000C036E7333036E696302747200 tr. 172800 IN NS ns3.nic.tr. 02747200000200010002A300000C036E7334036E696302747200 tr. 172800 IN NS ns4.nic.tr. 02747200000200010002A300000C036E7335036E696302747200 tr. 172800 IN NS ns5.nic.tr. 02747200002F000100015180001208747261696E696E67000006200000000003 tr. 86400 IN NSEC training. NS RRSIG NSEC 02747200002E0001000151800093002F08010001518052F4220052EAD97083770091BE66F21EDFACBA55101CBBDD9AE9749206960DB6E40199583EACE0A70B15A867B8C9FCDFBE6ED9B0779359DD3119066FE796A23540D78181768C000D4E2DBB67BA8CCA4324F20B88DF6F6A293C570E92B70CD3254990E36D39997D7D9428C1C67CDDB87247652211028A40C3ED668BA2AB4072B796C0127DECA4E131E25B63 tr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kb5m8h7frLpVEBy73ZrpdJIGlg225AGZWD6s4KcLFahnuMn8375u2bB3k1ndMRkGb+eWojVA14GBdowADU4tu2e6jMpDJPILiN9vaik8Vw6StwzTJUmQ4205mX19lCjBxnzduHJHZSIRAopAw+1mi6KrQHK3lsASfeyk4THiW2M= ;{id = 33655} 036E7331036E696302747200000100010002A3000004907A5F33 ns1.nic.tr. 172800 IN A 144.122.95.51 036E7331036E696302747200001C00010002A300001020010A98003000AD0000000000000011 ns1.nic.tr. 172800 IN AAAA 2001:a98:30:ad::11 036E7332036E696302747200000100010002A3000004907A5F34 ns2.nic.tr. 172800 IN A 144.122.95.52 036E7332036E696302747200001C00010002A300001020010A98003000AD0000000000000012 ns2.nic.tr. 172800 IN AAAA 2001:a98:30:ad::12 036E7333036E696302747200000100010002A3000004D5F8A283 ns3.nic.tr. 172800 IN A 213.248.162.131 036E7334036E696302747200000100010002A3000004C18C64C8 ns4.nic.tr. 172800 IN A 193.140.100.200 036E7335036E696302747200000100010002A3000004B2FB2A12 ns5.nic.tr. 172800 IN A 178.251.42.18 08747261696E696E6700000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 training. 172800 IN NS demand.beta.aridns.net.au. 08747261696E696E6700000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 training. 172800 IN NS demand.alpha.aridns.net.au. 08747261696E696E6700000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 training. 172800 IN NS demand.delta.aridns.net.au. 08747261696E696E6700000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 training. 172800 IN NS demand.gamma.aridns.net.au. 08747261696E696E6700002B0001000151800024B97D0802C8DE27AC32C7BFBFD8502763B6A472CD4A90F15F4BD1427C712139A23D2C24D0 training. 86400 IN DS 47485 8 2 C8DE27AC32C7BFBFD8502763B6A472CD4A90F15F4BD1427C712139A23D2C24D0 08747261696E696E6700002E0001000151800093002B08010001518052F4220052EAD970837700745480A32D6FBAC519C31EDC6C1F2F5329447841DE4C2CF8479FB7DDFCD8CAC3B7FE269861A99E87E5A63955313295F5ED1DAE28EB6CD54A36518751B19F5453E21C97285BE471C9A7EF21449EC161469AA4A7449D48D7385DE05E8B0F14FA5558929C9F250D81D0578A955198B2650C983338C6BE528F33FD30B09C2A4372F9 training. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dFSAoy1vusUZwx7cbB8vUylEeEHeTCz4R5+33fzYysO3/iaYYameh+WmOVUxMpX17R2uKOts1Uo2UYdRsZ9UU+Iclyhb5HHJp+8hRJ7BYUaapKdEnUjXOF3gXosPFPpVWJKcnyUNgdBXipVRmLJlDJgzOMa+Uo8z/TCwnCpDcvk= ;{id = 33655} 08747261696E696E6700002E0001000151800093002F08010001518052F4220052EAD97083770032AA204F27FD3222C28E89EF4CA8D00B71ACE8E9B003D5C1F8CD4E2A1B98B8AFF27AC1FF2B12DEB5A120C9E38DA03F3F82C7F73E7C34277615BE25722F7C7A8F4AB3323AFE43022BC8A22C7E4D1CF5CF8DA46C81C3C25E2C32DFFB4D573B25C6A8B16696AD6F449C5F0475C4B636AABE496B9A2BF88BA15DA1D8A5435857E3A5 training. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MqogTyf9MiLCjonvTKjQC3Gs6OmwA9XB+M1OKhuYuK/yesH/KxLetaEgyeONoD8/gsf3Pnw0J3YVviVyL3x6j0qzMjr+QwIryKIsfk0c9c+NpGyBw8JeLDLf+01XOyXGqLFmlq1vRJxfBHXEtjaqvklrmiv4i6FdodilQ1hX46U= ;{id = 33655} 08747261696E696E6700002F00010001518000100674726176656C000006200000000013 training. 86400 IN NSEC travel. NS DS RRSIG NSEC 0674726176656C00000200010002A300000F01610467746C640674726176656C00 travel. 172800 IN NS a.gtld.travel. 0674726176656C00000200010002A300000F01620467746C640674726176656C00 travel. 172800 IN NS b.gtld.travel. 0674726176656C00000200010002A300000F01630467746C640674726176656C00 travel. 172800 IN NS c.gtld.travel. 0674726176656C00000200010002A300000F01640467746C640674726176656C00 travel. 172800 IN NS d.gtld.travel. 0674726176656C00000200010002A300000F01650467746C640674726176656C00 travel. 172800 IN NS e.gtld.travel. 0674726176656C00000200010002A300000F01660467746C640674726176656C00 travel. 172800 IN NS f.gtld.travel. 0674726176656C00002F000100015180000C027474000006200000000003 travel. 86400 IN NSEC tt. NS RRSIG NSEC 0674726176656C00002E0001000151800093002F08010001518052F4220052EAD97083770097DDFD3658573F877AD1736F91E94010E62F91BDC9C7DB9D3C4EF88666890CC2E0DA6E205A01DE61F8F7491E70835E44AD66CB8D5076E98183E8C07255FCC8B6D0D1DC3C3CF95A90C69EE5B52B653CF6771275EEDC3755B92BF0927DCD0A9142DB9F9DAE71F8F79CDFAD207BA09D70BB1ECDA7CBD69FEA11F5141E1E0F7A2C1D travel. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . l939NlhXP4d60XNvkelAEOYvkb3Jx9udPE74hmaJDMLg2m4gWgHeYfj3SR5wg15ErWbLjVB26YGD6MByVfzIttDR3Dw8+VqQxp7ltStlPPZ3EnXu3DdVuSvwkn3NCpFC25+drnH495zfrSB7oJ1wux7Np8vWn+oR9RQeHg96LB0= ;{id = 33655} 01610467746C640674726176656C00000100010002A30000049C9A6401 a.gtld.travel. 172800 IN A 156.154.100.1 01610467746C640674726176656C00001C00010002A300001020010502AD0900000000000000000001 a.gtld.travel. 172800 IN AAAA 2001:502:ad09::1 01620467746C640674726176656C00000100010002A30000049C9A6501 b.gtld.travel. 172800 IN A 156.154.101.1 01630467746C640674726176656C00000100010002A30000049C9A6601 c.gtld.travel. 172800 IN A 156.154.102.1 01640467746C640674726176656C00000100010002A30000049C9A6701 d.gtld.travel. 172800 IN A 156.154.103.1 01640467746C640674726176656C00001C00010002A3000010200105022EDA00000000000000000001 d.gtld.travel. 172800 IN AAAA 2001:502:2eda::1 01650467746C640674726176656C00000100010002A30000049C9A6801 e.gtld.travel. 172800 IN A 156.154.104.1 01660467746C640674726176656C00000100010002A30000049C9A6901 f.gtld.travel. 172800 IN A 156.154.105.1 02747400000200010002A300000C036E7333036E6963026D7800 tt. 172800 IN NS ns3.nic.mx. 02747400000200010002A300000C03706368036E696302747400 tt. 172800 IN NS pch.nic.tt. 02747400000200010002A300000D0472697065036E696302747400 tt. 172800 IN NS ripe.nic.tt. 02747400000200010002A300001006736E732D706203697363036F726700 tt. 172800 IN NS sns-pb.isc.org. 02747400002B000100015180002409EB0802B06DFA79674DF3EA8190E7616164414B01E9199B7C94EC1540378A395DAA401F tt. 86400 IN DS 2539 8 2 B06DFA79674DF3EA8190E7616164414B01E9199B7C94EC1540378A395DAA401F 02747400002E0001000151800093002B08010001518052F4220052EAD9708377007D52A393CF28D6C69D3F9ABB3AC1B91D62FE1CC06596B8EBEE27682AE942A50ADC5FE35DFB11B0C609D8E90EF295FBE2FA3544CB490A4B364114ADCE65D8CBC0F894B36E6130CCB09271DCD5E4CC6E724E48FC95A9EE02562E2DB146D788C8F0EDC1099F2E4D94C68B245997C6D79D536EECF8C9D5F52DA8EFA4A58163D487B3 tt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . fVKjk88o1sadP5q7OsG5HWL+HMBllrjr7idoKulCpQrcX+Nd+xGwxgnY6Q7ylfvi+jVEy0kKSzZBFK3OZdjLwPiUs25hMMywknHc1eTMbnJOSPyVqe4CVi4tsUbXiMjw7cEJny5NlMaLJFmXxtedU27s+MnV9S2o76SlgWPUh7M= ;{id = 33655} 02747400002E0001000151800093002F08010001518052F4220052EAD9708377004D3DE2A902FD9148A7625AAA2C196CE2B0310D01B885020964BB95D43C456E18A0ED0E2C21153332A2150FDC3076B86515B0DD27A2F6C72981094146D9DE6E9822C395119405C47616C2F0DAEFA1AF98E630B0645BE583DE58C1EFABAC1D2D441411F3FDB6A4D860417AB447BDA4191A0295670C6C2D7E5B6FF0E2E73F38D57D tt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TT3iqQL9kUinYlqqLBls4rAxDQG4hQIJZLuV1DxFbhig7Q4sIRUzMqIVD9wwdrhlFbDdJ6L2xymBCUFG2d5umCLDlRGUBcR2FsLw2u+hr5jmMLBkW+WD3ljB76usHS1EFBHz/bak2GBBerRHvaQZGgKVZwxsLX5bb/Di5z841X0= ;{id = 33655} 02747400002F000100015180000C027476000006200000000013 tt. 86400 IN NSEC tv. NS DS RRSIG NSEC 03706368036E696302747400000100010002A3000004CC3DD83F pch.nic.tt. 172800 IN A 204.61.216.63 03706368036E696302747400001C00010002A3000010200105000014606300AD000000000001 pch.nic.tt. 172800 IN AAAA 2001:500:14:6063:ad::1 0472697065036E696302747400000100010002A3000004C1000932 ripe.nic.tt. 172800 IN A 193.0.9.50 0472697065036E696302747400001C00010002A30000102001067C00E000000000000000000050 ripe.nic.tt. 172800 IN AAAA 2001:67c:e0::50 02747600000200010002A300000E026135056E73746C6403636F6D00 tv. 172800 IN NS a5.nstld.com. 02747600000200010002A300000E026335056E73746C6403636F6D00 tv. 172800 IN NS c5.nstld.com. 02747600000200010002A300000E026435056E73746C6403636F6D00 tv. 172800 IN NS d5.nstld.com. 02747600000200010002A300000E026635056E73746C6403636F6D00 tv. 172800 IN NS f5.nstld.com. 02747600000200010002A300000E026735056E73746C6403636F6D00 tv. 172800 IN NS g5.nstld.com. 02747600000200010002A300000E026835056E73746C6403636F6D00 tv. 172800 IN NS h5.nstld.com. 02747600000200010002A300000E026C35056E73746C6403636F6D00 tv. 172800 IN NS l5.nstld.com. 02747600002B0001000151800018AF6808013E447F7145888B3137E9D83EEC9FB77671A8647D tv. 86400 IN DS 44904 8 1 3E447F7145888B3137E9D83EEC9FB77671A8647D 02747600002B0001000151800024AF6808021CFE1309925B78F42C8B4862A670B0BAB9FC142ED8B4D41E24C65FE6A0D9DFB4 tv. 86400 IN DS 44904 8 2 1CFE1309925B78F42C8B4862A670B0BAB9FC142ED8B4D41E24C65FE6A0D9DFB4 02747600002E0001000151800093002B08010001518052F4220052EAD97083770024DF5F2BE04525F20D4FE1D904F602730DBE8AF2950FBB5B6CE4C535ED37697D7C6AF0EFD96B477A9D83F04AFB6686C6829B699FB5C6DFF2CE1032AC4B26521157D7403D134DAF1CC9842AA171925D595DC4998136D475C15BC24F218DC7B7BE971356636C44AED35C0F4CE1C42C4B35842AAE84A9709BFC753CC4BC55F10C4A tv. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . JN9fK+BFJfINT+HZBPYCcw2+ivKVD7tbbOTFNe03aX18avDv2WtHep2D8Er7ZobGgptpn7XG3/LOEDKsSyZSEVfXQD0TTa8cyYQqoXGSXVldxJmBNtR1wVvCTyGNx7e+lxNWY2xErtNcD0zhxCxLNYQqroSpcJv8dTzEvFXxDEo= ;{id = 33655} 02747600002E0001000151800093002F08010001518052F4220052EAD97083770029DFB83ECAC427B0210DE25A5C2502826C00A84A805E39A020A36E5A2D118460EA7464A582B7F3C09DB4DCBB7DAF8853F1909E332A8D21E1CEC0050F2988B306F194093E71EF129F4B4EA70A27568F3D9614A6906EECAFF7AA627D7B4EE3CEE861E50FDE355AF35064684445ADE6EE1D0DEB280C5E74E859C837AC2C5A199365 tv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Kd+4PsrEJ7AhDeJaXCUCgmwAqEqAXjmgIKNuWi0RhGDqdGSlgrfzwJ203Lt9r4hT8ZCeMyqNIeHOwAUPKYizBvGUCT5x7xKfS06nCidWjz2WFKaQbuyv96pifXtO487oYeUP3jVa81BkaERFrebuHQ3rKAxedOhZyDesLFoZk2U= ;{id = 33655} 02747600002F000100015180000C027477000006200000000013 tv. 86400 IN NSEC tw. NS DS RRSIG NSEC 02747700000200010002A300000A016103646E7302747700 tw. 172800 IN NS a.dns.tw. 02747700000200010002A300000A016203646E7302747700 tw. 172800 IN NS b.dns.tw. 02747700000200010002A300000A016303646E7302747700 tw. 172800 IN NS c.dns.tw. 02747700000200010002A300000A016403646E7302747700 tw. 172800 IN NS d.dns.tw. 02747700000200010002A300000A016503646E7302747700 tw. 172800 IN NS e.dns.tw. 02747700000200010002A300000A016603646E7302747700 tw. 172800 IN NS f.dns.tw. 02747700000200010002A300000A016703646E7302747700 tw. 172800 IN NS g.dns.tw. 02747700000200010002A300000A016803646E7302747700 tw. 172800 IN NS h.dns.tw. 02747700000200010002A300000E026E730574776E6963036E657400 tw. 172800 IN NS ns.twnic.net. 02747700000200010002A300001004736563340561706E6963036E657400 tw. 172800 IN NS sec4.apnic.net. 02747700002B00010001518000244D440802FB47A76AA51546976D0DFAED95529D072B607B276CAC090DEDF42629FD271B40 tw. 86400 IN DS 19780 8 2 FB47A76AA51546976D0DFAED95529D072B607B276CAC090DEDF42629FD271B40 02747700002E0001000151800093002B08010001518052F4220052EAD970837700A703D034AA00793521122C3B45CDD0D635E48793AC8A310C286552B14F0789A821DEB949D27283C7947A6DB620EC8BC5EB3698F8FDFB2054E2EB399020C1F4EB14674EB203B9908AD52CD55CFA47919762029D054EDE9C2FD242D950ECC40308D3B0F21D6A704890310E1E325549242C369CA78DA690F58CBB50E7F3E43C07C7 tw. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . pwPQNKoAeTUhEiw7Rc3Q1jXkh5OsijEMKGVSsU8Hiagh3rlJ0nKDx5R6bbYg7IvF6zaY+P37IFTi6zmQIMH06xRnTrIDuZCK1SzVXPpHkZdiAp0FTt6cL9JC2VDsxAMI07DyHWpwSJAxDh4yVUkkLDacp42mkPWMu1Dn8+Q8B8c= ;{id = 33655} 02747700002E0001000151800093002F08010001518052F4220052EAD9708377008610C715768C901F6DAE05FB06CF2690CA08A034B85200387EB005B4C434D675096A3659776B88E25F0E3A1BB38DCC8428164C2BE67CEF4985FBB63864FB6C7DAC6968DD8208EF056F8A41A76C076C2EC6BF4B13D60F153E41D5A0100FA3AE4B96468D27058EEEC5D9C66768DC44A5BABFA458C12F408EAD92F96EE60D02E1F6 tw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hhDHFXaMkB9trgX7Bs8mkMoIoDS4UgA4frAFtMQ01nUJajZZd2uI4l8OOhuzjcyEKBZMK+Z870mF+7Y4ZPtsfaxpaN2CCO8Fb4pBp2wHbC7Gv0sT1g8VPkHVoBAPo65LlkaNJwWO7sXZxmdo3ESlur+kWMEvQI6tkvlu5g0C4fY= ;{id = 33655} 02747700002F000100015180000C02747A000006200000000013 tw. 86400 IN NSEC tz. NS DS RRSIG NSEC 016103646E7302747700000100010002A3000004CB491808 a.dns.tw. 172800 IN A 203.73.24.8 016103646E7302747700001C00010002A300001020010CD8080000000000000000000008 a.dns.tw. 172800 IN AAAA 2001:cd8:800::8 016203646E7302747700000100010002A3000004D2C98A3A b.dns.tw. 172800 IN A 210.201.138.58 016203646E7302747700001C00010002A30000102404000010A000000000000000000058 b.dns.tw. 172800 IN AAAA 2404:0:10a0::58 016303646E7302747700000100010002A30000043DDC3001 c.dns.tw. 172800 IN A 61.220.48.1 016303646E7302747700001C00010002A30000102001B020000000770000000000000001 c.dns.tw. 172800 IN AAAA 2001:b020:0:77::1 016403646E7302747700000100010002A3000004D21109E6 d.dns.tw. 172800 IN A 210.17.9.230 016403646E7302747700001C00010002A300001020010C50FFFF00010000000000000230 d.dns.tw. 172800 IN AAAA 2001:c50:ffff:1::230 016503646E7302747700000100010002A3000004D314E70B e.dns.tw. 172800 IN A 211.20.231.11 016503646E7302747700001C00010002A30000102001B00001E0C0000000000000000011 e.dns.tw. 172800 IN AAAA 2001:b000:1e0:c000::11 016603646E7302747700000100010002A3000004A31C010A f.dns.tw. 172800 IN A 163.28.1.10 016703646E7302747700000100010002A3000004DCE5E1C3 g.dns.tw. 172800 IN A 220.229.225.195 016703646E7302747700001C00010002A300001020010CD8040000000000000000000195 g.dns.tw. 172800 IN AAAA 2001:cd8:400::195 016803646E7302747700000100010002A3000004CB770301 h.dns.tw. 172800 IN A 203.119.3.1 016803646E7302747700001C00010002A300001024057E00100100000000000000000111 h.dns.tw. 172800 IN AAAA 2405:7e00:1001::111 02747A00000200010002A300000E016403657874036E696302637A00 tz. 172800 IN NS d.ext.nic.cz. 02747A00000200010002A3000012026E7307616E796361737402636F02747A00 tz. 172800 IN NS ns.anycast.co.tz. 02747A00000200010002A3000011036E733205747A6E6963026F7202747A00 tz. 172800 IN NS ns2.tznic.or.tz. 02747A00000200010002A300000D037269700370736703636F6D00 tz. 172800 IN NS rip.psg.com. 02747A00000200010002A300001604666F726B0373746807646E736E6F6465036E657400 tz. 172800 IN NS fork.sth.dnsnode.net. 02747A00000200010002A3000013056E732D747A07616672696E6963036E657400 tz. 172800 IN NS ns-tz.afrinic.net. 02747A00000200010002A300001006736E732D706203697363036F726700 tz. 172800 IN NS sns-pb.isc.org. 02747A00002B00010001518000184DEC0501F8EECE7181F56EA0C796DF630E648698391F1D66 tz. 86400 IN DS 19948 5 1 F8EECE7181F56EA0C796DF630E648698391F1D66 02747A00002E0001000151800093002B08010001518052F4220052EAD9708377005C559100953DA1CC66E061FD16FCA63BFF16C369E0DE8E6C2815F41BAC2FFFD9D689F62CDD87876A72E2AC53E190CF1FEB5A31218D1F70C831C8BA9D8A12CB6B491AE21FE7D0242C53639F144170BD3D3A4AC3FF1C76420C47CB5CCF3923B420757910A1856989A307F6298C4F67C14F2FA6E6FCBB350398EA05332916102055 tz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . XFWRAJU9ocxm4GH9FvymO/8Ww2ng3o5sKBX0G6wv/9nWifYs3YeHanLirFPhkM8f61oxIY0fcMgxyLqdihLLa0ka4h/n0CQsU2OfFEFwvT06SsP/HHZCDEfLXM85I7QgdXkQoYVpiaMH9imMT2fBTy+m5vy7NQOY6gUzKRYQIFU= ;{id = 33655} 02747A00002E0001000151800093002F08010001518052F4220052EAD9708377004F57DCFCFAAE365D988880304DD9C847367BE46D02E5F0B3E3C47C2680FCEC0561C01580F4411FCD0068DFB478BBDFFFFE59018F2EDB4CBCA8CC32D1105BBA5DD7CAC35F2460C7AF218C86FB45E9B9257F95F0ADACA264DD016AEA6D99F5B4319BAB530A5069F8D0A37A2A74242346D17230E2B2E2A76A4CA563C9B5F9B30B7E tz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . T1fc/PquNl2YiIAwTdnIRzZ75G0C5fCz48R8JoD87AVhwBWA9EEfzQBo37R4u9///lkBjy7bTLyozDLREFu6XdfKw18kYMevIYyG+0XpuSV/lfCtrKJk3QFq6m2Z9bQxm6tTClBp+NCjeip0JCNG0XIw4rLip2pMpWPJtfmzC34= ;{id = 33655} 02747A00002F000100015180000C027561000006200000000013 tz. 86400 IN NSEC ua. NS DS RRSIG NSEC 026E7307616E796361737402636F02747A00000100010002A3000004CC3DD80F ns.anycast.co.tz. 172800 IN A 204.61.216.15 026E7307616E796361737402636F02747A00001C00010002A3000010200105000014601500AD000000000001 ns.anycast.co.tz. 172800 IN AAAA 2001:500:14:6015:ad::1 036E733205747A6E6963026F7202747A00000100010002A3000004C4D8A243 ns2.tznic.or.tz. 172800 IN A 196.216.162.67 036E733205747A6E6963026F7202747A00001C00010002A3000010200143F800E000010000000000000067 ns2.tznic.or.tz. 172800 IN AAAA 2001:43f8:e0:1::67 02756100002F000100015180000C027567000006200000000013 ua. 86400 IN NSEC ug. NS DS RRSIG NSEC 02756100002E0001000151800093002F08010001518052F4220052EAD9708377009906285DF8554FA44FB228F266D699CDBE161CB055D88273057C9A6A45F8BBC94960ED7ECC591661FB8D74C47ED0E655102B0D3B17CD1045083A94859B2FEA95D1F4D190D628F173D64E49F2136BFE2E4BEC7F5362E45CFDDEFE92D88E893640E062299E4FC398264ED0E544B314472A73138A82FB7B61AFB3905197CFD1B538 ua. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mQYoXfhVT6RPsijyZtaZzb4WHLBV2IJzBXyaakX4u8lJYO1+zFkWYfuNdMR+0OZVECsNOxfNEEUIOpSFmy/qldH00ZDWKPFz1k5J8hNr/i5L7H9TYuRc/d7+ktiOiTZA4GIpnk/DmCZO0OVEsxRHKnMTioL7e2Gvs5BRl8/RtTg= ;{id = 33655} 02756100002E0001000151800093002B08010001518052F4220052EAD9708377008FCC1562E2ECD45C413730C7751ED6634C8CB01C81EF73055D6F2BA65D28CE23EB8BDADA690D085F9E3F1928050A0A06CF44B7F5104936B7A3849A7FADE03A2F4FB58F56B422A4BFD1F9FFE3D61B4D283F955AD9B97884C8189078E690FF33E3892324FF81CF9A4ECA1BE9D59F8DAEC9BBA6EBED0E43AE2CF040DD074FD5C644 ua. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . j8wVYuLs1FxBNzDHdR7WY0yMsByB73MFXW8rpl0oziPri9raaQ0IX54/GSgFCgoGz0S39RBJNrejhJp/reA6L0+1j1a0IqS/0fn/49YbTSg/lVrZuXiEyBiQeOaQ/zPjiSMk/4HPmk7KG+nVn42uybum6+0OQ64s8EDdB0/VxkQ= ;{id = 33655} 02756100000200010002A300000B03636431026E7302756100 ua. 172800 IN NS cd1.ns.ua. 02756100000200010002A300000B03686531026E7302756100 ua. 172800 IN NS he1.ns.ua. 02756100000200010002A300000B03686F31026E7302756100 ua. 172800 IN NS ho1.ns.ua. 02756100000200010002A300000B03706368026E7302756100 ua. 172800 IN NS pch.ns.ua. 02756100000200010002A300000C0472697065026E7302756100 ua. 172800 IN NS ripe.ns.ua. 02756100000200010002A300001006736E732D706203697363036F726700 ua. 172800 IN NS sns-pb.isc.org. 02756100002B0001000151800024DCC20A02BDD7A310534F76B2B6B25C94F816F9B9F260A2E35F526A9287E3307FB2CD16D8 ua. 86400 IN DS 56514 10 2 BDD7A310534F76B2B6B25C94F816F9B9F260A2E35F526A9287E3307FB2CD16D8 02617A0A686F73746D617374657202756100000100010002A3000004C32FFD0D az.hostmaster.ua. 172800 IN A 195.47.253.13 02617A0A686F73746D617374657202756100001C00010002A30000102001067C025800000000000000000013 az.hostmaster.ua. 172800 IN AAAA 2001:67c:258::13 0267650A686F73746D617374657202756100000100010002A3000004C32FFD12 ge.hostmaster.ua. 172800 IN A 195.47.253.18 0267650A686F73746D617374657202756100001C00010002A30000102001067C025800000000000000000018 ge.hostmaster.ua. 172800 IN AAAA 2001:67c:258::18 057469657231036E756D036E657402756100000100010002A3000004C16EA386 tier1.num.net.ua. 172800 IN A 193.110.163.134 03636431026E7302756100000100010002A3000004C2000109 cd1.ns.ua. 172800 IN A 194.0.1.9 03636431026E7302756100001C00010002A300001020010678000400000000000000000009 cd1.ns.ua. 172800 IN AAAA 2001:678:4::9 03686531026E7302756100000100010002A3000004D8DAD71B he1.ns.ua. 172800 IN A 216.218.215.27 03686531026E7302756100001C00010002A300001020010470002E00010000000000000027 he1.ns.ua. 172800 IN AAAA 2001:470:2e:1::27 03686F31026E7302756100000100010002A3000004C32FFD01 ho1.ns.ua. 172800 IN A 195.47.253.1 03686F31026E7302756100001C00010002A30000102001067C025800000000000000000001 ho1.ns.ua. 172800 IN AAAA 2001:67c:258::1 03706368026E7302756100000100010002A3000004CC3DD80C pch.ns.ua. 172800 IN A 204.61.216.12 03706368026E7302756100001C00010002A3000010200105000014601200AD000000000001 pch.ns.ua. 172800 IN AAAA 2001:500:14:6012:ad::1 0472697065026E7302756100000100010002A3000004C1000979 ripe.ns.ua. 172800 IN A 193.0.9.121 0472697065026E7302756100001C00010002A30000102001067C00E000000000000000000121 ripe.ns.ua. 172800 IN AAAA 2001:67c:e0::121 02756700000200010002A300000E026E73056963616E6E036F726700 ug. 172800 IN NS ns.icann.org. 02756700000200010002A300001B027567056363746C640761757468646E730472697065036E657400 ug. 172800 IN NS ug.cctld.authdns.ripe.net. 02756700000200010002A300001104726F6F740465616864026F7202756700 ug. 172800 IN NS root.eahd.or.ug. 02756700000200010002A3000013056E732D756707616672696E6963036E657400 ug. 172800 IN NS ns-ug.afrinic.net. 02756700000200010002A300001407616E79636173740465616864026F7202756700 ug. 172800 IN NS anycast.eahd.or.ug. 02756700002B00010001518000240ACF08024278D7C4B2B45738A39F310EAC36558411BD547812517BDF23F95FCBB4796B2E ug. 86400 IN DS 2767 8 2 4278D7C4B2B45738A39F310EAC36558411BD547812517BDF23F95FCBB4796B2E 02756700002E0001000151800093002B08010001518052F4220052EAD970837700316DCECC677C342D731AF1A34B7B78B3A55DD75BA2392E8407FD4C34E8A50BC659E0F037998227F598644E94B9C382965CE98874EE2A41C72A2C8E2F7F03209DBF4C3E90BD1E30D5E52AB4D8927338CD361300F0EC22D8C4DC065C3BBB3B7A92078D87167D88C85B147EAFD7EA7F1F96A5DE320C5646F8A7131376C8BD77FE74 ug. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MW3OzGd8NC1zGvGjS3t4s6Vd11uiOS6EB/1MNOilC8ZZ4PA3mYIn9ZhkTpS5w4KWXOmIdO4qQccqLI4vfwMgnb9MPpC9HjDV5Sq02JJzOM02EwDw7CLYxNwGXDu7O3qSB42HFn2IyFsUfq/X6n8flqXeMgxWRvinExN2yL13/nQ= ;{id = 33655} 02756700002E0001000151800093002F08010001518052F4220052EAD970837700BA12D47EB4C6FDD2BEE1E7425CD84127BA1CC2C6BE4B352D7AC95B32606118DBBECB272CE9C1448CD55064F30A1C34DC774427D63999DBC61F742FC1C9A861D09C4B89F9702C55436D9A579B65B007CE6137063182F426813CA63F3FA23D4720B54F9EAF809D21FAD4177618608D4841D058FE107C9DFABA8DB9F239ACFD4CA2 ug. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uhLUfrTG/dK+4edCXNhBJ7ocwsa+SzUteslbMmBhGNu+yycs6cFEjNVQZPMKHDTcd0Qn1jmZ28YfdC/Byahh0JxLiflwLFVDbZpXm2WwB85hNwYxgvQmgTymPz+iPUcgtU+er4CdIfrUF3YYYI1IQdBY/hB8nfq6jbnyOaz9TKI= ;{id = 33655} 02756700002F000100015180000C02756B000006200000000013 ug. 86400 IN NSEC uk. NS DS RRSIG NSEC 07616E79636173740465616864026F7202756700000100010002A3000004CC3DD83C anycast.eahd.or.ug. 172800 IN A 204.61.216.60 07616E79636173740465616864026F7202756700001C00010002A3000010200105000014606000AD000000000001 anycast.eahd.or.ug. 172800 IN AAAA 2001:500:14:6060:ad::1 04726F6F740465616864026F7202756700000100010002A3000004D4586184 root.eahd.or.ug. 172800 IN A 212.88.97.132 02756B00002F000100015180000D03756E6F000006200000000013 uk. 86400 IN NSEC uno. NS DS RRSIG NSEC 02756B00002E0001000151800093002F08010001518052F4220052EAD9708377009DB356E6FD18D35A026039AEB5BE7AA771F710D2CACD04ACF60329FC3A8BFD9E32B135C42301A52054D284132D0DF964BF8A6DCEC636697C2E6EAB6D4C50CE6CBDC8460EDA57D720A4D7A2A684DE2F5C23FE62BE727E5AAA392A90E49EDDE0F06814FD81DB93830E8D14322E8C28A37559663E20F90D7B97B5DDB927CD833FA2 uk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nbNW5v0Y01oCYDmutb56p3H3ENLKzQSs9gMp/DqL/Z4ysTXEIwGlIFTShBMtDflkv4ptzsY2aXwubqttTFDObL3IRg7aV9cgpNeipoTeL1wj/mK+cn5aqjkqkOSe3eDwaBT9gduTgw6NFDIujCijdVlmPiD5DXuXtd25J82DP6I= ;{id = 33655} 02756B00002E0001000151800093002B08010001518052F4220052EAD9708377008F27F971FC8710A374ECBB7C5E7D3F0C177422800A916E71FE2CD55F97603A71A4D4D27F52DA106C3498739762665365A3C2CB642CE6004BF842BF21B9F3E34DAAE28FB0B45C934475F72E09C8C17D4D698F8EBEA075B84AE9A6F6D9A00A39AD9EBE570EEFA6720D69273E50891AC5814F0ECD1AC978A4C59B07085884DBD627 uk. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jyf5cfyHEKN07Lt8Xn0/DBd0IoAKkW5x/izVX5dgOnGk1NJ/UtoQbDSYc5diZlNlo8LLZCzmAEv4Qr8hufPjTarij7C0XJNEdfcuCcjBfU1pj46+oHW4Summ9tmgCjmtnr5XDu+mcg1pJz5QiRrFgU8OzRrJeKTFmwcIWITb1ic= ;{id = 33655} 02756B00000200010002A300000C036E7331036E696302756B00 uk. 172800 IN NS ns1.nic.uk. 02756B00000200010002A300000C036E7332036E696302756B00 uk. 172800 IN NS ns2.nic.uk. 02756B00000200010002A300000C036E7333036E696302756B00 uk. 172800 IN NS ns3.nic.uk. 02756B00000200010002A300000C036E7334036E696302756B00 uk. 172800 IN NS ns4.nic.uk. 02756B00000200010002A300000C036E7335036E696302756B00 uk. 172800 IN NS ns5.nic.uk. 02756B00000200010002A300000C036E7336036E696302756B00 uk. 172800 IN NS ns6.nic.uk. 02756B00000200010002A300000C036E7337036E696302756B00 uk. 172800 IN NS ns7.nic.uk. 02756B00000200010002A300000C036E7361036E696302756B00 uk. 172800 IN NS nsa.nic.uk. 02756B00000200010002A300000C036E7362036E696302756B00 uk. 172800 IN NS nsb.nic.uk. 02756B00000200010002A300000C036E7363036E696302756B00 uk. 172800 IN NS nsc.nic.uk. 02756B00000200010002A300000C036E7364036E696302756B00 uk. 172800 IN NS nsd.nic.uk. 02756B00002B00010001518000243B570802A057C8553B1DC6CF158A87CD2D0BAA2CDC9C6A14FA03DE02B19AB0DA62AF279E uk. 86400 IN DS 15191 8 2 A057C8553B1DC6CF158A87CD2D0BAA2CDC9C6A14FA03DE02B19AB0DA62AF279E 036E73310263730375636C02616302756B00000100010002A300000480100520 ns1.cs.ucl.ac.uk. 172800 IN A 128.16.5.32 066261726E65790661647673797302636F02756B00000100010002A3000004D917A032 barney.advsys.co.uk. 172800 IN A 217.23.160.50 036E73330369636202636F02756B00000100010002A30000045BD05F82 ns3.icb.co.uk. 172800 IN A 91.208.95.130 04746C643608756C747261646E7302636F02756B00000100010002A3000004C685C70B tld6.ultradns.co.uk. 172800 IN A 198.133.199.11 036E7331036E696302756B00000100010002A3000004C342F082 ns1.nic.uk. 172800 IN A 195.66.240.130 036E7331036E696302756B00001C00010002A30000102A010040100100350000000000000002 ns1.nic.uk. 172800 IN AAAA 2a01:40:1001:35::2 036E7332036E696302756B00000100010002A3000004D94FA483 ns2.nic.uk. 172800 IN A 217.79.164.131 036E7333036E696302756B00000100010002A3000004D5DB0D83 ns3.nic.uk. 172800 IN A 213.219.13.131 036E7334036E696302756B00000100010002A3000004C253F483 ns4.nic.uk. 172800 IN A 194.83.244.131 036E7334036E696302756B00001C00010002A300001020010630018100350000000000000083 ns4.nic.uk. 172800 IN AAAA 2001:630:181:35::83 036E7335036E696302756B00000100010002A3000004D5F6A783 ns5.nic.uk. 172800 IN A 213.246.167.131 036E7336036E696302756B00000100010002A3000004D5F8FE82 ns6.nic.uk. 172800 IN A 213.248.254.130 036E7337036E696302756B00000100010002A3000004D4792882 ns7.nic.uk. 172800 IN A 212.121.40.130 036E7361036E696302756B00000100010002A30000049C9A6403 nsa.nic.uk. 172800 IN A 156.154.100.3 036E7361036E696302756B00001C00010002A300001020010502AD0900000000000000000003 nsa.nic.uk. 172800 IN AAAA 2001:502:ad09::3 036E7362036E696302756B00000100010002A30000049C9A6503 nsb.nic.uk. 172800 IN A 156.154.101.3 036E7363036E696302756B00000100010002A30000049C9A6603 nsc.nic.uk. 172800 IN A 156.154.102.3 036E7364036E696302756B00000100010002A30000049C9A6703 nsd.nic.uk. 172800 IN A 156.154.103.3 03756E6F00000200010002A3000011036E733103646E73036E696303756E6F00 uno. 172800 IN NS ns1.dns.nic.uno. 03756E6F00000200010002A3000011036E733203646E73036E696303756E6F00 uno. 172800 IN NS ns2.dns.nic.uno. 03756E6F00000200010002A3000011036E733303646E73036E696303756E6F00 uno. 172800 IN NS ns3.dns.nic.uno. 03756E6F00000200010002A3000011036E733403646E73036E696303756E6F00 uno. 172800 IN NS ns4.dns.nic.uno. 03756E6F00000200010002A3000011036E733503646E73036E696303756E6F00 uno. 172800 IN NS ns5.dns.nic.uno. 03756E6F00000200010002A3000011036E733603646E73036E696303756E6F00 uno. 172800 IN NS ns6.dns.nic.uno. 03756E6F00000200010002A3000011036E733703646E73036E696303756E6F00 uno. 172800 IN NS ns7.dns.nic.uno. 03756E6F00002B0001000151800018E22408013B49FDC11DAEE5187A4170A5BADF77A917BCE481 uno. 86400 IN DS 57892 8 1 3B49FDC11DAEE5187A4170A5BADF77A917BCE481 03756E6F00002B0001000151800024E2240802C156DD21B3B96A50FA94BE322CDF6F0144E86C9597E4AA56D53E9B490C94A537 uno. 86400 IN DS 57892 8 2 C156DD21B3B96A50FA94BE322CDF6F0144E86C9597E4AA56D53E9B490C94A537 03756E6F00002E0001000151800093002B08010001518052F4220052EAD970837700847D801E60551BE04E5A866237AEF83F0655C0000DA3E119AB5588BFEA2A653BD92F9B8AB7CCB63A370CB7FE5D0F09EFD5A946C6ED7CA15A0099F694DC597A0ADBE677517B440BA84B26FEF175F4B7D87F58328EBDB448100D91B4667075C0089211F03773F9CE48F42DFF0E9A2EE3917B29F465878830A83EA3E5ECBD166920 uno. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hH2AHmBVG+BOWoZiN674PwZVwAANo+EZq1WIv+oqZTvZL5uKt8y2OjcMt/5dDwnv1alGxu18oVoAmfaU3Fl6Ctvmd1F7RAuoSyb+8XX0t9h/WDKOvbRIEA2RtGZwdcAIkhHwN3P5zkj0Lf8Omi7jkXsp9GWHiDCoPqPl7L0WaSA= ;{id = 33655} 03756E6F00002E0001000151800093002F08010001518052F4220052EAD9708377003EB249B7C2C8FAF93558CFBD0E14E204B0072726201E2716B734DDEFE3C708E95B6D68DB95AAC81A19F8E08BC1207CFC7811F5932CA398DDEAEB9DFDFECB9C7D8EC7C0E514BA503F0BDE001762C988B7693A21176CB03885865431C539350D75DAE7E85D74C6834B445462717D63EAB787206CDFD6E0B251FB46E67125850198 uno. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . PrJJt8LI+vk1WM+9DhTiBLAHJyYgHicWtzTd7+PHCOlbbWjblarIGhn44IvBIHz8eBH1kyyjmN3q6539/sucfY7HwOUUulA/C94AF2LJiLdpOiEXbLA4hYZUMcU5NQ112ufoXXTGg0tEVGJxfWPqt4cgbN/W4LJR+0bmcSWFAZg= ;{id = 33655} 03756E6F00002F000100015180000C027573000006200000000013 uno. 86400 IN NSEC us. NS DS RRSIG NSEC 036E733103646E73036E696303756E6F00000100010002A30000049C9A90AD ns1.dns.nic.uno. 172800 IN A 156.154.144.173 036E733103646E73036E696303756E6F00001C00010002A3000010261000A11071000000000000000000AD ns1.dns.nic.uno. 172800 IN AAAA 2610:a1:1071::ad 036E733203646E73036E696303756E6F00000100010002A30000049C9A91AD ns2.dns.nic.uno. 172800 IN A 156.154.145.173 036E733203646E73036E696303756E6F00001C00010002A3000010261000A11072000000000000000000AD ns2.dns.nic.uno. 172800 IN AAAA 2610:a1:1072::ad 036E733303646E73036E696303756E6F00000100010002A30000049C9A9FAD ns3.dns.nic.uno. 172800 IN A 156.154.159.173 036E733303646E73036E696303756E6F00001C00010002A3000010261000A11073000000000000000000AD ns3.dns.nic.uno. 172800 IN AAAA 2610:a1:1073::ad 036E733403646E73036E696303756E6F00000100010002A30000049C9A9CAD ns4.dns.nic.uno. 172800 IN A 156.154.156.173 036E733403646E73036E696303756E6F00001C00010002A3000010261000A11074000000000000000000AD ns4.dns.nic.uno. 172800 IN AAAA 2610:a1:1074::ad 036E733503646E73036E696303756E6F00000100010002A30000049C9A9DAD ns5.dns.nic.uno. 172800 IN A 156.154.157.173 036E733503646E73036E696303756E6F00001C00010002A3000010261000A11075000000000000000000AD ns5.dns.nic.uno. 172800 IN AAAA 2610:a1:1075::ad 036E733603646E73036E696303756E6F00000100010002A30000049C9A9EAD ns6.dns.nic.uno. 172800 IN A 156.154.158.173 036E733603646E73036E696303756E6F00001C00010002A3000010261000A11076000000000000000000AD ns6.dns.nic.uno. 172800 IN AAAA 2610:a1:1076::ad 036E733703646E73036E696303756E6F00000100010002A3000004CF22050A ns7.dns.nic.uno. 172800 IN A 207.34.5.10 036E733703646E73036E696303756E6F00001C00010002A3000010200105037BBBFFFFFFFFFFFFFFFFFF7E ns7.dns.nic.uno. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e 02757300000200010002A300000C0161056363746C6402757300 us. 172800 IN NS a.cctld.us. 02757300000200010002A300000C0162056363746C6402757300 us. 172800 IN NS b.cctld.us. 02757300000200010002A300000C0163056363746C6402757300 us. 172800 IN NS c.cctld.us. 02757300000200010002A300000C0165056363746C6402757300 us. 172800 IN NS e.cctld.us. 02757300000200010002A300000C0166056363746C6402757300 us. 172800 IN NS f.cctld.us. 02757300000200010002A300000C016B056363746C6402757300 us. 172800 IN NS k.cctld.us. 02757300002B0001000151800018D8700501A66648238215F3DD5865471DF37606675FDF85A5 us. 86400 IN DS 55408 5 1 A66648238215F3DD5865471DF37606675FDF85A5 02757300002B0001000151800024D8700502BC044879B104ECACAE7536A070FE3E9C282314A73331095FF267DA901957458B us. 86400 IN DS 55408 5 2 BC044879B104ECACAE7536A070FE3E9C282314A73331095FF267DA901957458B 02757300002E0001000151800093002B08010001518052F4220052EAD9708377006FEB7EAE53D83F9BF40380726F2E621BCEB4266DE39CDE80FDBE3239AEF39456E03E9555D2D5200A52FB465280FE819E20C9064CA44229CC5243F33960283238D0117247AD88A6393CE87B6DE7B4A81C016C5E4F23D458D0EB7A6385490A618A209F15449CED2C789A813D379DAFCD46255C77D5AD3BC6F03021298A75F3D022 us. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . b+t+rlPYP5v0A4Byby5iG860Jm3jnN6A/b4yOa7zlFbgPpVV0tUgClL7RlKA/oGeIMkGTKRCKcxSQ/M5YCgyONARcketiKY5POh7bee0qBwBbF5PI9RY0Ot6Y4VJCmGKIJ8VRJztLHiagT03na/NRiVcd9WtO8bwMCEpinXz0CI= ;{id = 33655} 02757300002E0001000151800093002F08010001518052F4220052EAD97083770032D6DE60D5D4852C0690AC657E4977B6B358046E11C13C54DDEB05982216A36E0053B83483D8D471193CCAF04E7C66FBE9D0EBD5A2923569B8A2B9B644585CEEE12C0BCEAA8628E2CEDDA6E51AC5D061A78650F65CEB4D2665B37AF2BF9783224349163FAAF75681C20C12029BE8EB8ABBC06F66B67CA8A134F9ED6250B31F36 us. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MtbeYNXUhSwGkKxlfkl3trNYBG4RwTxU3esFmCIWo24AU7g0g9jUcRk8yvBOfGb76dDr1aKSNWm4orm2RFhc7uEsC86qhijizt2m5RrF0GGnhlD2XOtNJmWzevK/l4MiQ0kWP6r3VoHCDBICm+jrirvAb2a2fKihNPntYlCzHzY= ;{id = 33655} 02757300002F000100015180000C027579000006200000000013 us. 86400 IN NSEC uy. NS DS RRSIG NSEC 0161056363746C6402757300000100010002A30000049C9A7C46 a.cctld.us. 172800 IN A 156.154.124.70 0162056363746C6402757300000100010002A30000049C9A7D46 b.cctld.us. 172800 IN A 156.154.125.70 0162056363746C6402757300001C00010002A300001020010503D1AEFFFFFFFFFFFFFFFFFF7E b.cctld.us. 172800 IN AAAA 2001:503:d1ae:ffff:ffff:ffff:ffff:ff7e 0163056363746C6402757300000100010002A30000049C9A7F46 c.cctld.us. 172800 IN A 156.154.127.70 0165056363746C6402757300000100010002A30000049C9A7E46 e.cctld.us. 172800 IN A 156.154.126.70 0166056363746C6402757300000100010002A3000004D1AD3A46 f.cctld.us. 172800 IN A 209.173.58.70 0166056363746C6402757300001C00010002A300001020010500368200000000000000000011 f.cctld.us. 172800 IN AAAA 2001:500:3682::11 016B056363746C6402757300000100010002A30000049C9A8046 k.cctld.us. 172800 IN A 156.154.128.70 016B056363746C6402757300001C00010002A300001020010503E23900000000000000030001 k.cctld.us. 172800 IN AAAA 2001:503:e239::3:1 02757900000200010002A300000B026E7303646E7302627200 uy. 172800 IN NS ns.dns.br. 02757900000200010002A300001B027579056363746C640761757468646E730472697065036E657400 uy. 172800 IN NS uy.cctld.authdns.ripe.net. 02757900000200010002A300000C036E7333036E6963026D7800 uy. 172800 IN NS ns3.nic.mx. 02757900000200010002A300000E0573656369750365647502757900 uy. 172800 IN NS seciu.edu.uy. 02757900000200010002A300001005756C74726105736563697502757900 uy. 172800 IN NS ultra.seciu.uy. 02757900000200010002A300001006736E732D706203697363036F726700 uy. 172800 IN NS sns-pb.isc.org. 02757900002F000100015180000C02757A000006200000000003 uy. 86400 IN NSEC uz. NS RRSIG NSEC 02757900002E0001000151800093002F08010001518052F4220052EAD97083770040ED064F8F112822FAADF0979C9000E1C43BC665C6437F433590FE0051EB4F46C7608DF5CB7F4A1FCBB31863F1A822F002D3155D430D635978052E207169763D513A7016EA2F10C4D4003678CD4552C04387494D9ACA2B748917BF50C66566A08A25F24F59F4CDA78B56AF0F7E4E031EDD4B04CD4810B8681F9D85E463262BCC uy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QO0GT48RKCL6rfCXnJAA4cQ7xmXGQ39DNZD+AFHrT0bHYI31y39KH8uzGGPxqCLwAtMVXUMNY1l4BS4gcWl2PVE6cBbqLxDE1AA2eM1FUsBDh0lNmsordIkXv1DGZWagiiXyT1n0zaeLVq8Pfk4DHt1LBM1IELhoH52F5GMmK8w= ;{id = 33655} 0573656369750365647502757900000100010002A3000004A4498005 seciu.edu.uy. 172800 IN A 164.73.128.5 0573656369750365647502757900001C00010002A300001020011328000600000000000000000005 seciu.edu.uy. 172800 IN AAAA 2001:1328:6::5 05756C74726105736563697502757900000100010002A3000004A4498046 ultra.seciu.uy. 172800 IN A 164.73.128.70 02757A00000200010002A3000007026E7302757A00 uz. 172800 IN NS ns.uz. 02757A00000200010002A3000008036E733202757A00 uz. 172800 IN NS ns2.uz. 02757A00000200010002A3000008036E733302757A00 uz. 172800 IN NS ns3.uz. 02757A00000200010002A3000008036E733402757A00 uz. 172800 IN NS ns4.uz. 02757A00000200010002A3000008036E733502757A00 uz. 172800 IN NS ns5.uz. 02757A00000200010002A3000008036E733602757A00 uz. 172800 IN NS ns6.uz. 02757A00000200010002A3000008036E733702757A00 uz. 172800 IN NS ns7.uz. 02757A00002F000100015180000C027661000006200000000003 uz. 86400 IN NSEC va. NS RRSIG NSEC 02757A00002E0001000151800093002F08010001518052F4220052EAD970837700308D8AF44FA98ED76EE2593431FD30F2CD06298359E5B64538C3DCB4F43F860F32912CA2DB8089E7F65C2853DE71C5DBB6EF415D794534C8900491CF106723C21BB74CD68EB9B623450872AD8FFE463FE01BDDBFAC5EB9DDD1D1915CF44231BB553FD4F4E85AD165903EC430653D3A14FE095021EF12ADBA7DE8F4B942986B19 uz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MI2K9E+pjtdu4lk0Mf0w8s0GKYNZ5bZFOMPctPQ/hg8ykSyi24CJ5/ZcKFPeccXbtu9BXXlFNMiQBJHPEGcjwhu3TNaOubYjRQhyrY/+Rj/gG92/rF653dHRkVz0QjG7VT/U9Oha0WWQPsQwZT06FP4JUCHvEq26fej0uUKYaxk= ;{id = 33655} 026E7302757A00000100010002A30000045BD45908 ns.uz. 172800 IN A 91.212.89.8 036E733202757A00000100010002A3000004515FE09E ns2.uz. 172800 IN A 81.95.224.158 036E733302757A00000100010002A3000004C39E0116 ns3.uz. 172800 IN A 195.158.1.22 036E733402757A00000100010002A3000004578B693C ns4.uz. 172800 IN A 87.139.105.60 036E733502757A00000100010002A3000004D90C5181 ns5.uz. 172800 IN A 217.12.81.129 036E733602757A00000100010002A300000453458104 ns6.uz. 172800 IN A 83.69.129.4 036E733702757A00000100010002A300000436C84560 ns7.uz. 172800 IN A 54.200.69.96 02766100000200010002A300001B027661056363746C640761757468646E730472697065036E657400 va. 172800 IN NS va.cctld.authdns.ripe.net. 02766100000200010002A300000C03646E73036E696302697400 va. 172800 IN NS dns.nic.it. 02766100000200010002A3000011046A6F686E077661746963616E02766100 va. 172800 IN NS john.vatican.va. 02766100000200010002A300000F0473657468056E616D657802697400 va. 172800 IN NS seth.namex.it. 02766100000200010002A3000011066F7369726973056E616D657802697400 va. 172800 IN NS osiris.namex.it. 02766100000200010002A3000014076D69636861656C077661746963616E02766100 va. 172800 IN NS michael.vatican.va. 02766100002F000100015180000C027663000006200000000003 va. 86400 IN NSEC vc. NS RRSIG NSEC 02766100002E0001000151800093002F08010001518052F4220052EAD97083770006B476877949543C747F39CBA68E83A85337E7A6176EE10BC04BF10F7A942A60BE91C018BD94DB1A72CC4AC6DE3F447D6FCA3679F21572D071D7DF95900CB84FBAE9529D62535C1F6B545D7B821FB53319C0814CFF639926A8FCC2B89B879A4F8008DFCF1ABDEA588AFA1D06A4465B35A9BEFB3E5CFB16DABCA6ED8C022F5CB8 va. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . BrR2h3lJVDx0fznLpo6DqFM356YXbuELwEvxD3qUKmC+kcAYvZTbGnLMSsbeP0R9b8o2efIVctBx19+VkAy4T7rpUp1iU1wfa1Rde4IftTMZwIFM/2OZJqj8wribh5pPgAjfzxq96liK+h0GpEZbNam++z5c+xbavKbtjAIvXLg= ;{id = 33655} 046A6F686E077661746963616E02766100000100010002A3000004D44D006E john.vatican.va. 172800 IN A 212.77.0.110 046A6F686E077661746963616E02766100001C00010002A30000102A0100B8000000010212007700000110 john.vatican.va. 172800 IN AAAA 2a01:b8:0:1:212:77:0:110 076D69636861656C077661746963616E02766100000100010002A3000004D44D0002 michael.vatican.va. 172800 IN A 212.77.0.2 076D69636861656C077661746963616E02766100001C00010002A30000102A0100B8000000010212007700000002 michael.vatican.va. 172800 IN AAAA 2a01:b8:0:1:212:77:0:2 02766300000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 vc. 172800 IN NS a0.cctld.afilias-nst.info. 02766300000200010002A300001B026132056363746C640B6166696C6961732D6E737404696E666F00 vc. 172800 IN NS a2.cctld.afilias-nst.info. 02766300000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 vc. 172800 IN NS b0.cctld.afilias-nst.org. 02766300000200010002A300001A026232056363746C640B6166696C6961732D6E7374036F726700 vc. 172800 IN NS b2.cctld.afilias-nst.org. 02766300000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 vc. 172800 IN NS c0.cctld.afilias-nst.info. 02766300000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 vc. 172800 IN NS d0.cctld.afilias-nst.org. 02766300002F000100015180000C027665000006200000000003 vc. 86400 IN NSEC ve. NS RRSIG NSEC 02766300002E0001000151800093002F08010001518052F4220052EAD9708377006027EBF19287F9D4D4C1CA3098ADFD5AF26B1FAA730E56508322A89517E4FC3FBF396003E527B9413A04FEA3D90193940FD2A821B0EC0DFE16635861AABA50F54989EAAE880540E6672E4BE642A04854CDD23B49A5EF843579DC580E6CD62D7A9E436300CDC8381A60607FBFC2E0067A936EDCDCBF86D9F762F3045C8B38C7C2 vc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . YCfr8ZKH+dTUwcowmK39WvJrH6pzDlZQgyKolRfk/D+/OWAD5Se5QToE/qPZAZOUD9KoIbDsDf4WY1hhqrpQ9UmJ6q6IBUDmZy5L5kKgSFTN0jtJpe+ENXncWA5s1i16nkNjAM3IOBpgYH+/wuAGepNu3Ny/htn3YvMEXIs4x8I= ;{id = 33655} 02766500000200010002A300000C036E7331036E696302766500 ve. 172800 IN NS ns1.nic.ve. 02766500000200010002A300000C036E7332036E696302766500 ve. 172800 IN NS ns2.nic.ve. 02766500000200010002A300000C036E7333036E696302766500 ve. 172800 IN NS ns3.nic.ve. 02766500000200010002A3000010066E732D65787403697363036F726700 ve. 172800 IN NS ns-ext.isc.org. 02766500000200010002A300000F066E732D657874036E696302636C00 ve. 172800 IN NS ns-ext.nic.cl. 02766500000200010002A300001006736E732D706203697363036F726700 ve. 172800 IN NS sns-pb.isc.org. 02766500000200010002A300001007617A6D6F64616E03756C6102766500 ve. 172800 IN NS azmodan.ula.ve. 02766500002F00010001518000120876656E7475726573000006200000000003 ve. 86400 IN NSEC ventures. NS RRSIG NSEC 02766500002E0001000151800093002F08010001518052F4220052EAD9708377009DF1FD34FFB404A44DA026410688B5E6DFCBAFF8F07B69B7F07E69E1AD8A3EB85BD89FA6CDC89490AC864BB680D803630655824CBAFD03B015D30AA74A7C9E1CC1158EC42D20652D1A0D382ED08EFAA865FFDF80F33B35A75810066FFF4A2929F9FF6341F18E33CB43F2EAE5EFFF4EB07F19F8219506067962F3DBDD75BFEFBD ve. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nfH9NP+0BKRNoCZBBoi15t/Lr/jwe2m38H5p4a2KPrhb2J+mzciUkKyGS7aA2ANjBlWCTLr9A7AV0wqnSnyeHMEVjsQtIGUtGg04LtCO+qhl/9+A8zs1p1gQBm//Sikp+f9jQfGOM8tD8url7/9OsH8Z+CGVBgZ5YvPb3XW/770= ;{id = 33655} 036E7331036E696302766500000100010002A300000496BCE404 ns1.nic.ve. 172800 IN A 150.188.228.4 036E7331036E696302766500001C00010002A300001020011338000000000000000000000002 ns1.nic.ve. 172800 IN AAAA 2001:1338::2 036E7332036E696302766500000100010002A300000496BCE405 ns2.nic.ve. 172800 IN A 150.188.228.5 036E7332036E696302766500001C00010002A300001020011338000000000000000000000003 ns2.nic.ve. 172800 IN AAAA 2001:1338::3 036E7333036E696302766500000100010002A3000004BE098138 ns3.nic.ve. 172800 IN A 190.9.129.56 07617A6D6F64616E03756C6102766500000100010002A300000496B98210 azmodan.ula.ve. 172800 IN A 150.185.130.16 0876656E747572657300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 ventures. 172800 IN NS demand.beta.aridns.net.au. 0876656E747572657300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 ventures. 172800 IN NS demand.alpha.aridns.net.au. 0876656E747572657300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 ventures. 172800 IN NS demand.delta.aridns.net.au. 0876656E747572657300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 ventures. 172800 IN NS demand.gamma.aridns.net.au. 0876656E747572657300002B00010001518000243040080291175878089CE3054D9CA53EA05D2B71D06813D35F25871FB566374C66C213A2 ventures. 86400 IN DS 12352 8 2 91175878089CE3054D9CA53EA05D2B71D06813D35F25871FB566374C66C213A2 0876656E747572657300002E0001000151800093002B08010001518052F4220052EAD9708377005D4C449E2BBDC5699F915B603584D30AD4D8F5FC2D764BF2B04F06EB445CCA501D6AF66D7A5204B88EF5FBDB84B28C9C8763683EAB43B4A2789A1E0D7D9019E9C17AE5076D3AB6ACA6924E86C8AC8DCDBFD1F5C96805BAAFB5738C826E3B8A68BCF3216ACA3989F1CEE61BD276E5809EA15F9B19A17681F4CB7B172C1B5DE3B0 ventures. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . XUxEniu9xWmfkVtgNYTTCtTY9fwtdkvysE8G60RcylAdavZtelIEuI71+9uEsoych2NoPqtDtKJ4mh4NfZAZ6cF65QdtOrasppJOhsisjc2/0fXJaAW6r7VzjIJuO4povPMhaso5ifHO5hvSduWAnqFfmxmhdoH0y3sXLBtd47A= ;{id = 33655} 0876656E747572657300002E0001000151800093002F08010001518052F4220052EAD97083770092A44EEF9BCB578CB09E234542C7642715A82E09CF5CC4AAA66DB3EE5B69F0A4C462502D4E914682E7A2237B922F6C3F87A995EB2AC5ACCBDFD125ABD578D3E9C677738C0F710D80742176B7DA783B35D45DCECCEDA34970294CCEE384563F35CF74618E28341264CDDFBCEE170B95D04E7650C87B130D877F9C2CE9DF4EA376 ventures. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kqRO75vLV4ywniNFQsdkJxWoLgnPXMSqpm2z7ltp8KTEYlAtTpFGgueiI3uSL2w/h6mV6yrFrMvf0SWr1XjT6cZ3c4wPcQ2AdCF2t9p4OzXUXc7M7aNJcClMzuOEVj81z3Rhjig0EmTN37zuFwuV0E52UMh7Ew2Hf5ws6d9Oo3Y= ;{id = 33655} 0876656E747572657300002F000100015180000C027667000006200000000013 ventures. 86400 IN NSEC vg. NS DS RRSIG NSEC 02766700000200010002A300001B027667056363746C640761757468646E730472697065036E657400 vg. 172800 IN NS vg.cctld.authdns.ripe.net. 02766700000200010002A3000015036E73310C726F6F742D7365727665727302766700 vg. 172800 IN NS ns1.root-servers.vg. 02766700000200010002A300000E0461736961047A6F6E6502766700 vg. 172800 IN NS asia.zone.vg. 02766700000200010002A3000010066575726F7065047A6F6E6502766700 vg. 172800 IN NS europe.zone.vg. 02766700002F000100015180000C027669000006200000000003 vg. 86400 IN NSEC vi. NS RRSIG NSEC 02766700002E0001000151800093002F08010001518052F4220052EAD9708377008421D41D9A3B8B6451A3B22A7CB1C1BB315C3185088AB2B5EA1909FE30321FB6EF7997E9634C4CEE2D969E7C62EAAB0C442032934E7FE75474F448E10FCFD5B648473F60E54C78FB706371B8F5AD9721EB546C87EB0359A34F9314CE7F3653562A17A6218A15FF893451CFD8459DAD949C73050AAC714397DB25EBC18188BEC2 vg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hCHUHZo7i2RRo7IqfLHBuzFcMYUIirK16hkJ/jAyH7bveZfpY0xM7i2Wnnxi6qsMRCAyk05/51R09EjhD8/VtkhHP2DlTHj7cGNxuPWtlyHrVGyH6wNZo0+TFM5/NlNWKhemIYoV/4k0Uc/YRZ2tlJxzBQqscUOX2yXrwYGIvsI= ;{id = 33655} 036E73310C726F6F742D7365727665727302766700000100010002A3000004C2000B66 ns1.root-servers.vg. 172800 IN A 194.0.11.102 036E73310C726F6F742D7365727665727302766700001C00010002A300001020010678000E01020000000000000053 ns1.root-servers.vg. 172800 IN AAAA 2001:678:e:102::53 0461736961047A6F6E6502766700000100010002A30000041FA951E2 asia.zone.vg. 172800 IN A 31.169.81.226 066575726F7065047A6F6E6502766700000100010002A30000044D4F68E2 europe.zone.vg. 172800 IN A 77.79.104.226 02766900000200010002A300000F036E733105636F626578036E657400 vi. 172800 IN NS ns1.cobex.net. 02766900000200010002A300000F036E7331056B726E6963036E657400 vi. 172800 IN NS ns1.krnic.net. 02766900000200010002A300000F036E733205636F626578036E657400 vi. 172800 IN NS ns2.cobex.net. 02766900000200010002A30000130761757468313030026E73027575036E657400 vi. 172800 IN NS auth100.ns.uu.net. 02766900000200010002A30000130761757468313130026E73027575036E657400 vi. 172800 IN NS auth110.ns.uu.net. 02766900002F0001000151800010067669616A6573000006200000000003 vi. 86400 IN NSEC viajes. NS RRSIG NSEC 02766900002E0001000151800093002F08010001518052F4220052EAD970837700692D59DC3557C7F6896855B1E1AC7AF824F490CA8AF99952B93A1598114225F7EA09C3CBD832D6782A18138008555B96590AAEB74969DCAC87F19E9669B897C9C60FB4CEB110024C0BB197A4DA2D49CDA27C6B0F704DF776D30F20E893BE659718954852273F7344080363E2BEE312B3CA0ED4648B5D9C0392250EAF289C7DB1 vi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aS1Z3DVXx/aJaFWx4ax6+CT0kMqK+ZlSuToVmBFCJffqCcPL2DLWeCoYE4AIVVuWWQqut0lp3KyH8Z6WabiXycYPtM6xEAJMC7GXpNotSc2ifGsPcE33dtMPIOiTvmWXGJVIUic/c0QIA2PivuMSs8oO1GSLXZwDkiUOryicfbE= ;{id = 33655} 067669616A657300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 viajes. 172800 IN NS demand.beta.aridns.net.au. 067669616A657300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 viajes. 172800 IN NS demand.alpha.aridns.net.au. 067669616A657300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 viajes. 172800 IN NS demand.delta.aridns.net.au. 067669616A657300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 viajes. 172800 IN NS demand.gamma.aridns.net.au. 067669616A657300002B0001000151800024E1FA0802EA1ECA41F59D77BF61A09E8F01297DABB2852D0A4A31D558BFCDB7FFBA8B22D6 viajes. 86400 IN DS 57850 8 2 EA1ECA41F59D77BF61A09E8F01297DABB2852D0A4A31D558BFCDB7FFBA8B22D6 067669616A657300002E0001000151800093002B08010001518052F4220052EAD9708377006820F11D8489D0211C3A1A935E9CF54C7EC22CCD3E66243796FF6C7353D93603F37CE5975DEE991C60ADFB1BF101F17DA45FA529FD297EC8BFD62668B12D057DE5451D55C93CA844E90D7C7F9D7BBB5B6351E01758E2489326A07BBC3BA770DA1D2E931232E70A7437429B18D3A0B51CEC148C726BE6A9FDE6BC101CDC3C3F21 viajes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aCDxHYSJ0CEcOhqTXpz1TH7CLM0+ZiQ3lv9sc1PZNgPzfOWXXe6ZHGCt+xvxAfF9pF+lKf0pfsi/1iZosS0FfeVFHVXJPKhE6Q18f517u1tjUeAXWOJIkyage7w7p3DaHS6TEjLnCnQ3QpsY06C1HOwUjHJr5qn95rwQHNw8PyE= ;{id = 33655} 067669616A657300002E0001000151800093002F08010001518052F4220052EAD9708377002BFA1B64E62EF8D5AE071D0D5C26FDE246ADCAE50879AAA748480553BAD49360352B4360E035A650E3826B6FB6031109B4DB42C3BBCE86ACB884E71095E6036649D70D0C61D16DA88BCA4138043374F3A788AAD44B5729B92680F8E9083DDB57757AF5AE579DD9A745433A2A71469B8745BF8D61A043A4473216F333FB85F5FC viajes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K/obZOYu+NWuBx0NXCb94katyuUIeaqnSEgFU7rUk2A1K0Ng4DWmUOOCa2+2AxEJtNtCw7vOhqy4hOcQleYDZknXDQxh0W2oi8pBOAQzdPOniKrUS1cpuSaA+OkIPdtXdXr1rled2adFQzoqcUabh0W/jWGgQ6RHMhbzM/uF9fw= ;{id = 33655} 067669616A657300002F000100015180000C02766E000006200000000013 viajes. 86400 IN NSEC vn. NS DS RRSIG NSEC 02766E00000200010002A300001201610B646E732D7365727665727302766E00 vn. 172800 IN NS a.dns-servers.vn. 02766E00000200010002A300001201620B646E732D7365727665727302766E00 vn. 172800 IN NS b.dns-servers.vn. 02766E00000200010002A300001201630B646E732D7365727665727302766E00 vn. 172800 IN NS c.dns-servers.vn. 02766E00000200010002A300001201640B646E732D7365727665727302766E00 vn. 172800 IN NS d.dns-servers.vn. 02766E00000200010002A300001201650B646E732D7365727665727302766E00 vn. 172800 IN NS e.dns-servers.vn. 02766E00000200010002A300001201660B646E732D7365727665727302766E00 vn. 172800 IN NS f.dns-servers.vn. 02766E00000200010002A300001B02766E056363746C640761757468646E730472697065036E657400 vn. 172800 IN NS vn.cctld.authdns.ripe.net. 02766E00002F000100015180001006766F74696E67000006200000000003 vn. 86400 IN NSEC voting. NS RRSIG NSEC 02766E00002E0001000151800093002F08010001518052F4220052EAD97083770058F36579124920A6F9395BB785CD5ED8A7C61B4CB10C11946B7E2A05EBF74E84DE3458A8B6156317604EEE277BB50ABBACE35250B3F9ACC31E424E2CFEAB5DD7F44348754EC496C9C73F17F990E97DEDC3E1D26B626AD209E13C0C55E56698404BB1723607118E065539A2A6A4B570B93CACEA7587E0D4174CA6E3E78CE32EA0 vn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WPNleRJJIKb5OVu3hc1e2KfGG0yxDBGUa34qBev3ToTeNFiothVjF2BO7id7tQq7rONSULP5rMMeQk4s/qtd1/RDSHVOxJbJxz8X+ZDpfe3D4dJrYmrSCeE8DFXlZphAS7FyNgcRjgZVOaKmpLVwuTys6nWH4NQXTKbj54zjLqA= ;{id = 33655} 01610B646E732D7365727665727302766E00000100010002A3000004C2000112 a.dns-servers.vn. 172800 IN A 194.0.1.18 01610B646E732D7365727665727302766E00001C00010002A300001020010678000400000000000000000012 a.dns-servers.vn. 172800 IN AAAA 2001:678:4::12 01620B646E732D7365727665727302766E00000100010002A3000004CB770A69 b.dns-servers.vn. 172800 IN A 203.119.10.105 01620B646E732D7365727665727302766E00001C00010002A300001020010DC8000000070000000000000105 b.dns-servers.vn. 172800 IN AAAA 2001:dc8:0:7::105 01630B646E732D7365727665727302766E00000100010002A3000004CB772669 c.dns-servers.vn. 172800 IN A 203.119.38.105 01640B646E732D7365727665727302766E00000100010002A3000004CB772C69 d.dns-servers.vn. 172800 IN A 203.119.44.105 01650B646E732D7365727665727302766E00000100010002A3000004CB773C69 e.dns-servers.vn. 172800 IN A 203.119.60.105 01660B646E732D7365727665727302766E00000100010002A3000004CB774469 f.dns-servers.vn. 172800 IN A 203.119.68.105 06766F74696E6700000200010002A3000012016103646E73036E696306766F74696E6700 voting. 172800 IN NS a.dns.nic.voting. 06766F74696E6700000200010002A3000012016203646E73036E696306766F74696E6700 voting. 172800 IN NS b.dns.nic.voting. 06766F74696E6700000200010002A3000012016303646E73036E696306766F74696E6700 voting. 172800 IN NS c.dns.nic.voting. 06766F74696E6700002B0001000151800018571D0801916F42C6CE97C6CFF9D0545167E2203A179667C2 voting. 86400 IN DS 22301 8 1 916F42C6CE97C6CFF9D0545167E2203A179667C2 06766F74696E6700002B0001000151800024571D0802E505E22BD2DCA54354C9EA9B0F09D4972390C9DCC6F342D9438D47F347A03B7D voting. 86400 IN DS 22301 8 2 E505E22BD2DCA54354C9EA9B0F09D4972390C9DCC6F342D9438D47F347A03B7D 06766F74696E6700002E0001000151800093002B08010001518052F4220052EAD970837700094F0A44AD0F3222E4ED38C166D26C1A06D810269A4D6D3CE777ADAB9A9CC65B33697905972B22EEB2576B9CC81638A21F21734201D071AD42C359EED4E902FCC4A1779B7250C6893D200B59ED7E5703FC1B2CE268CEA0095ED20FBD878F70F20BC705F38E19E7713F1792E56D979C517DEECA549B530C5F3E11BEF6B9FBB950 voting. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CU8KRK0PMiLk7TjBZtJsGgbYECaaTW0853etq5qcxlszaXkFlysi7rJXa5zIFjiiHyFzQgHQca1Cw1nu1OkC/MShd5tyUMaJPSALWe1+VwP8GyziaM6gCV7SD72Hj3DyC8cF844Z53E/F5LlbZecUX3uylSbUwxfPhG+9rn7uVA= ;{id = 33655} 06766F74696E6700002E0001000151800093002F08010001518052F4220052EAD9708377009BC43CE5FD9D3ECAACEFBCF9C8BF1400F8AF8C5ED47A4C4FD1A2904F99F7EC23891AD6768F9BAB636411A5EFF7D6CC2733300CC39BC3ED24BC09AB56B9500696A9CA944FB32D1E536D4C7149426CCF9DBFC350AACE63A24B76E195AFAE860F2BF44159FA32BBEA18A2FBFFEC79D657E35D755CF96A29396EF6876837C3B104C2 voting. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . m8Q85f2dPsqs77z5yL8UAPivjF7UekxP0aKQT5n37COJGtZ2j5urY2QRpe/31swnMzAMw5vD7SS8CatWuVAGlqnKlE+zLR5TbUxxSUJsz52/w1CqzmOiS3bhla+uhg8r9EFZ+jK76hii+//sedZX4111XPlqKTlu9odoN8OxBMI= ;{id = 33655} 06766F74696E6700002F000100015180001006766F79616765000006200000000013 voting. 86400 IN NSEC voyage. NS DS RRSIG NSEC 016103646E73036E696306766F74696E6700000100010002A3000004C2001911 a.dns.nic.voting. 172800 IN A 194.0.25.17 016103646E73036E696306766F74696E6700001C00010002A300001020010678002000000000000000000017 a.dns.nic.voting. 172800 IN AAAA 2001:678:20::17 016203646E73036E696306766F74696E6700000100010002A3000004C1AA3D06 b.dns.nic.voting. 172800 IN A 193.170.61.6 016203646E73036E696306766F74696E6700001C00010002A30000102001062A000A20000000000000000006 b.dns.nic.voting. 172800 IN AAAA 2001:62a:a:2000::6 016303646E73036E696306766F74696E6700000100010002A3000004C1AABB06 c.dns.nic.voting. 172800 IN A 193.170.187.6 016303646E73036E696306766F74696E6700001C00010002A30000102001062A000A30000000000000000006 c.dns.nic.voting. 172800 IN AAAA 2001:62a:a:3000::6 06766F7961676500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 voyage. 172800 IN NS demand.beta.aridns.net.au. 06766F7961676500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 voyage. 172800 IN NS demand.alpha.aridns.net.au. 06766F7961676500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 voyage. 172800 IN NS demand.delta.aridns.net.au. 06766F7961676500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 voyage. 172800 IN NS demand.gamma.aridns.net.au. 06766F7961676500002B00010001518000247D860802F610100634FDC228FF5E4C1846E51D99DC3B0C2B8089933FBBF6D33ED543A332 voyage. 86400 IN DS 32134 8 2 F610100634FDC228FF5E4C1846E51D99DC3B0C2B8089933FBBF6D33ED543A332 06766F7961676500002E0001000151800093002B08010001518052F4220052EAD9708377001F671A9521615FF1795BC27DE171DD03E71DD0EB2F5C21270B9CD5F094C6B0F1D48A787AE5852B141D7D46C72C83BC09F7C7128EC8E6A92968D3173169DFE30A2DACF9020C438AA5EC59FD05CCE28F1B340CC81FEB252FAD327F827C6BAAEFE6BE1E2585F00746B0074CC6BFC2A3C7BFB8F61FBFB3CCFB865C8E56C5BE0B032A voyage. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . H2calSFhX/F5W8J94XHdA+cd0OsvXCEnC5zV8JTGsPHUinh65YUrFB19Rscsg7wJ98cSjsjmqSlo0xcxad/jCi2s+QIMQ4ql7Fn9Bczijxs0DMgf6yUvrTJ/gnxrqu/mvh4lhfAHRrAHTMa/wqPHv7j2H7+zzPuGXI5Wxb4LAyo= ;{id = 33655} 06766F7961676500002E0001000151800093002F08010001518052F4220052EAD970837700858E25D8DD9D6AE0F4C1C02A097AE7D5864E7BF56120F0B22E7210BF6A6F268B5F68DC9B7051765C5158D2BD6158FA0ADFA3A3735DCB79AAA49ABC606113D573CD026F69864A9DA48F6AA8E6F05E017368277DE8CE62BB0810419BF35860BF7F17A9A3B1DEDC188C3B72C410EBCA4B3622489B2295485A722B5E0DDA18FE7FB8 voyage. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hY4l2N2dauD0wcAqCXrn1YZOe/VhIPCyLnIQv2pvJotfaNybcFF2XFFY0r1hWPoK36Ojc13LeaqkmrxgYRPVc80Cb2mGSp2kj2qo5vBeAXNoJ33ozmK7CBBBm/NYYL9/F6mjsd7cGIw7csQQ68pLNiJImyKVSFpyK14N2hj+f7g= ;{id = 33655} 06766F7961676500002F000100015180000C027675000006200000000013 voyage. 86400 IN NSEC vu. NS DS RRSIG NSEC 02767500000200010002A30000160565666174650776616E7561747503636F6D02767500 vu. 172800 IN NS efate.vanuatu.com.vu. 02767500000200010002A30000160573616E746F0776616E7561747503636F6D02767500 vu. 172800 IN NS santo.vanuatu.com.vu. 02767500000200010002A300001706667574756E610776616E7561747503636F6D02767500 vu. 172800 IN NS futuna.vanuatu.com.vu. 02767500000200010002A3000014086363746C642D7675066F72616E6765026D7500 vu. 172800 IN NS cctld-vu.orange.mu. 02767500002F000100015180000E0477616E67000006200000000003 vu. 86400 IN NSEC wang. NS RRSIG NSEC 02767500002E0001000151800093002F08010001518052F4220052EAD9708377007C4A51CDE48FBC30819D63D573F83C0484EF932E88C55BC905F998DEF6801C7A0830F4BB69BF5E91A0B4AF323C91D478A3DF439A1D591645B0341E8EDCADE2D6222236759421E6478DD822F6B39C954AA40205B85D8107A8E9ABFA22F75EF0A185EB496FC78B9C8673090E64D667AAB0AC099C68B6B723C7D059C47EA246FAC7 vu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fEpRzeSPvDCBnWPVc/g8BITvky6IxVvJBfmY3vaAHHoIMPS7ab9ekaC0rzI8kdR4o99Dmh1ZFkWwNB6O3K3i1iIiNnWUIeZHjdgi9rOclUqkAgW4XYEHqOmr+iL3XvChhetJb8eLnIZzCQ5k1meqsKwJnGi2tyPH0FnEfqJG+sc= ;{id = 33655} 0565666174650776616E7561747503636F6D02767500000100010002A3000004CA502005 efate.vanuatu.com.vu. 172800 IN A 202.80.32.5 06667574756E610776616E7561747503636F6D02767500000100010002A3000004CA502003 futuna.vanuatu.com.vu. 172800 IN A 202.80.32.3 0573616E746F0776616E7561747503636F6D02767500000100010002A3000004CA502007 santo.vanuatu.com.vu. 172800 IN A 202.80.32.7 0477616E6700000200010002A30000110161097A646E73636C6F756403636F6D00 wang. 172800 IN NS a.zdnscloud.com. 0477616E6700000200010002A30000110162097A646E73636C6F756403636F6D00 wang. 172800 IN NS b.zdnscloud.com. 0477616E6700000200010002A30000110163097A646E73636C6F756403636F6D00 wang. 172800 IN NS c.zdnscloud.com. 0477616E6700000200010002A30000110164097A646E73636C6F756403636F6D00 wang. 172800 IN NS d.zdnscloud.com. 0477616E6700000200010002A30000110165097A646E73636C6F756403636F6D00 wang. 172800 IN NS e.zdnscloud.com. 0477616E6700000200010002A30000110166097A646E73636C6F756403636F6D00 wang. 172800 IN NS f.zdnscloud.com. 0477616E6700000200010002A30000110167097A646E73636C6F756403636F6D00 wang. 172800 IN NS g.zdnscloud.com. 0477616E6700000200010002A30000110169097A646E73636C6F756403636F6D00 wang. 172800 IN NS i.zdnscloud.com. 0477616E6700000200010002A3000011016A097A646E73636C6F756403636F6D00 wang. 172800 IN NS j.zdnscloud.com. 0477616E6700002B000100015180002468B90802A7FDCE2D689D6C3CDC4275348667E0FE258136B879787E69C89A1C125CF23F67 wang. 86400 IN DS 26809 8 2 A7FDCE2D689D6C3CDC4275348667E0FE258136B879787E69C89A1C125CF23F67 0477616E6700002E0001000151800093002B08010001518052F4220052EAD9708377002B534674AFFD317D629846C780C9CEE7672F10EED4D27D087ADF3D7A1D85AE90FC1B4D701BCFA4393D67A4AE2C7397F6DBCC1B5D19A0E8ADBC5DE07B766B6E3355BB71321BACDD3E1CCC5CC2953BEC9B83B057C3CE86246B2C200B70CF3C6D1096F6A4812EE4D2B799EF5D08EC5D452619D884D4535B548EEFBAD3FFAB45CF19 wang. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . K1NGdK/9MX1imEbHgMnO52cvEO7U0n0Iet89eh2FrpD8G01wG8+kOT1npK4sc5f228wbXRmg6K28XeB7dmtuM1W7cTIbrN0+HMxcwpU77JuDsFfDzoYkaywgC3DPPG0QlvakgS7k0reZ710I7F1FJhnYhNRTW1SO77rT/6tFzxk= ;{id = 33655} 0477616E6700002E0001000151800093002F08010001518052F4220052EAD9708377005C04AE305231F2B339D923FD6C1B30DCAEFF1ACD8B0FEF75655B93F1F3F5D35B7CC1381724CC0AFFB1CC27B46DC8D517EA0236E2CE14EBD356670A1883637535FBB98F3BB4FA79A560F1F132A5187D4529A1C5018BA8788BB7425FE027081CCF382CDB3C64B80E0770B3B83B82EA75575F739A0AFABA225D0F3FD363A71DCC87 wang. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XASuMFIx8rM52SP9bBsw3K7/Gs2LD+91ZVuT8fP101t8wTgXJMwK/7HMJ7RtyNUX6gI24s4U69NWZwoYg2N1Nfu5jzu0+nmlYPHxMqUYfUUpocUBi6h4i7dCX+AnCBzPOCzbPGS4Dgdws7g7gup1V19zmgr6uiJdDz/TY6cdzIc= ;{id = 33655} 0477616E6700002F000100015180000F057761746368000006200000000013 wang. 86400 IN NSEC watch. NS DS RRSIG NSEC 05776174636800000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 watch. 172800 IN NS demand.beta.aridns.net.au. 05776174636800000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 watch. 172800 IN NS demand.alpha.aridns.net.au. 05776174636800000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 watch. 172800 IN NS demand.delta.aridns.net.au. 05776174636800000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 watch. 172800 IN NS demand.gamma.aridns.net.au. 05776174636800002B0001000151800024704E0802104A558919E526604A35B4C96D6832FDD499E5EF07313C628AB27F1E715C39D9 watch. 86400 IN DS 28750 8 2 104A558919E526604A35B4C96D6832FDD499E5EF07313C628AB27F1E715C39D9 05776174636800002E0001000151800093002B08010001518052F4220052EAD97083770041ECE0560141DDF4DA42C1C97E109233A5D06B47F0A0EF608412FA724591FC33BCE65BCFDC8FFF8D0D250DAC03CCF166F1C848B102CEC96F9FDEC6D3489BE94FDDACF9A0EE880250D854EFC4E69800AB8F3A8E1257ECC27BC0E2605DA7C24FF392812C30E37740DFDBCDFEFB3873A7F1173BF406569F8AB7350F2125FA2E9E3D watch. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . QezgVgFB3fTaQsHJfhCSM6XQa0fwoO9ghBL6ckWR/DO85lvP3I//jQ0lDawDzPFm8chIsQLOyW+f3sbTSJvpT92s+aDuiAJQ2FTvxOaYAKuPOo4SV+zCe8DiYF2nwk/zkoEsMON3QN/bzf77OHOn8Rc79AZWn4q3NQ8hJfounj0= ;{id = 33655} 05776174636800002E0001000151800093002F08010001518052F4220052EAD97083770082E4E16E10888DB500A6D07DC43BC06219333206E9147E755660BBC5CC1342B204C68CE26A0F6CF03D2E7F2C63F677131F412C2AEEF04EF5F0BC36998846E99C62557B64AFE79C22F142E705CD69234D728EE0DFCB29CF3E5C195E41D5B83ED6D9F1B854B843BBBC3BFFFA5ABBFDAB3F520A049FEB701D6345F05CEC0795737B watch. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . guThbhCIjbUAptB9xDvAYhkzMgbpFH51VmC7xcwTQrIExoziag9s8D0ufyxj9ncTH0EsKu7wTvXwvDaZiEbpnGJVe2Sv55wi8ULnBc1pI01yjuDfyynPPlwZXkHVuD7W2fG4VLhDu7w7//pau/2rP1IKBJ/rcB1jRfBc7AeVc3s= ;{id = 33655} 05776174636800002F000100015180000D03776564000006200000000013 watch. 86400 IN NSEC wed. NS DS RRSIG NSEC 0377656400000200010002A300000E0161026E73036E69630377656400 wed. 172800 IN NS a.ns.nic.wed. 0377656400000200010002A300000E0162026E73036E69630377656400 wed. 172800 IN NS b.ns.nic.wed. 0377656400000200010002A300001103746C64076973632D736E7303636F6D00 wed. 172800 IN NS tld.isc-sns.com. 0377656400000200010002A300001103746C64076973632D736E73036E657400 wed. 172800 IN NS tld.isc-sns.net. 0377656400000200010002A300001203746C64076973632D736E7304696E666F00 wed. 172800 IN NS tld.isc-sns.info. 0377656400002B00010001518000245CFF0802A1453299115DB6CC44E33B102BDF276CB93A6A103F6502EA5EF1D4ECF2172640 wed. 86400 IN DS 23807 8 2 A1453299115DB6CC44E33B102BDF276CB93A6A103F6502EA5EF1D4ECF2172640 0377656400002E0001000151800093002B08010001518052F4220052EAD970837700070D69FB87A98B8B524334716AEB87CC3805B7E8C220BDF5D97F93485BEF9A92AF893B9C62FE7EC2CAA22F5EBABB2C4927D9828C1138E2A0FC77C0B05AE016DC8417ED0FD11E50E2B609F411EC769ADCA7926B26E740F00ABBD5534E91B8D2AEF97C81DBFF357BE8B8FD40F0F357E04C60533C7483F8E986DB6E5E6C22D433FF wed. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Bw1p+4epi4tSQzRxauuHzDgFt+jCIL312X+TSFvvmpKviTucYv5+wsqiL166uyxJJ9mCjBE44qD8d8CwWuAW3IQX7Q/RHlDitgn0Eex2mtynkmsm50DwCrvVU06RuNKu+XyB2/81e+i4/UDw81fgTGBTPHSD+OmG225ebCLUM/8= ;{id = 33655} 0377656400002E0001000151800093002F08010001518052F4220052EAD9708377002E3FC0D20AD5FAF949217BC0A4E6B932B29FD6C6B021ECC7A53824923684D52B2BA3C8A5EDEBCCFC15B210EE00C5735F095D7B2F6B178533F9C58C621A7AF83D877602BBCC317E2B82A721AB096B709220437718E497FD714ABDA9ED17C8885DED7F516D1CA5FCDE6C3BDF615C4CDD85C05BF73A557CBC01301AE627D662A3E4 wed. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Lj/A0grV+vlJIXvApOa5MrKf1sawIezHpTgkkjaE1Ssro8il7evM/BWyEO4AxXNfCV17L2sXhTP5xYxiGnr4PYd2ArvMMX4rgqchqwlrcJIgQ3cY5Jf9cUq9qe0XyIhd7X9RbRyl/N5sO99hXEzdhcBb9zpVfLwBMBrmJ9Zio+Q= ;{id = 33655} 0377656400002F000100015180000C027766000006200000000013 wed. 86400 IN NSEC wf. NS DS RRSIG NSEC 0161026E73036E69630377656400000100010002A300000448003101 a.ns.nic.wed. 172800 IN A 72.0.49.1 0161026E73036E69630377656400001C00010002A3000010262001710A0100AD0000000000000001 a.ns.nic.wed. 172800 IN AAAA 2620:171:a01:ad::1 0162026E73036E69630377656400000100010002A3000004482A7101 b.ns.nic.wed. 172800 IN A 72.42.113.1 0162026E73036E69630377656400001C00010002A3000010262001710D0100DC0000000000000001 b.ns.nic.wed. 172800 IN AAAA 2620:171:d01:dc::1 02776600000200010002A300000E016403657874036E696302667200 wf. 172800 IN NS d.ext.nic.fr. 02776600000200010002A300000A0164036E696302667200 wf. 172800 IN NS d.nic.fr. 02776600000200010002A300000E016503657874036E696302667200 wf. 172800 IN NS e.ext.nic.fr. 02776600000200010002A300000E016603657874036E696302667200 wf. 172800 IN NS f.ext.nic.fr. 02776600000200010002A300000E016703657874036E696302667200 wf. 172800 IN NS g.ext.nic.fr. 02776600002B0001000151800024384708027DA5F1EBDA6DDCA8B41F753D9C30C36B8D7D21C362819883D0F402A0484A6036 wf. 86400 IN DS 14407 8 2 7DA5F1EBDA6DDCA8B41F753D9C30C36B8D7D21C362819883D0F402A0484A6036 02776600002B0001000151800024831A08028FC2E75050231829A3468F447D14D28C3CB6A7A1DE814FDC6287180B06D23111 wf. 86400 IN DS 33562 8 2 8FC2E75050231829A3468F447D14D28C3CB6A7A1DE814FDC6287180B06D23111 02776600002E0001000151800093002B08010001518052F4220052EAD970837700684B4898999E637EECCD1F0272B660248DAA53E22A74776739A2CD85C37EB1C134AD12B59802CA3FC9F3D7EB393D9C108B6E77DF89B9ED92658AE1609830369F2475A522F77899B9C6ABD147C0A364E8AC898A0D0B65467F7ED80F7398B6B36D8E8AC8DC19016375239B8004E120EADBD2637DA37B81681413709EBCD684B1CB wf. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aEtImJmeY37szR8CcrZgJI2qU+IqdHdnOaLNhcN+scE0rRK1mALKP8nz1+s5PZwQi25334m57ZJliuFgmDA2nyR1pSL3eJm5xqvRR8CjZOisiYoNC2VGf37YD3OYtrNtjorI3BkBY3Ujm4AE4SDq29JjfaN7gWgUE3CevNaEscs= ;{id = 33655} 02776600002E0001000151800093002F08010001518052F4220052EAD970837700825E7C53231930C754E26A21D7BA8230965F789BE7F77A3D3D041B386F2F37CA415A798DAFCE7E3B4CAC1F232A0761693F1F2EDD67D1EE3833CF3197479342728DBA858A93D4010A924C6FB962999D200FFC4827AA4F739788580E3557551F692585CBB022294AA4ADC1977EE5087F9A4F5F18C883F245F89919134B14C76941 wf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . gl58UyMZMMdU4moh17qCMJZfeJvn93o9PQQbOG8vN8pBWnmNr85+O0ysHyMqB2FpPx8u3WfR7jgzzzGXR5NCco26hYqT1AEKkkxvuWKZnSAP/Egnqk9zl4hYDjVXVR9pJYXLsCIpSqStwZd+5Qh/mk9fGMiD8kX4mRkTSxTHaUE= ;{id = 33655} 02776600002F000100015180000E047769656E000006200000000013 wf. 86400 IN NSEC wien. NS DS RRSIG NSEC 047769656E00000200010002A3000010016103646E73036E6963047769656E00 wien. 172800 IN NS a.dns.nic.wien. 047769656E00000200010002A3000010016203646E73036E6963047769656E00 wien. 172800 IN NS b.dns.nic.wien. 047769656E00000200010002A3000010016303646E73036E6963047769656E00 wien. 172800 IN NS c.dns.nic.wien. 047769656E00002B000100015180001837840801C13133146394C4D51F5821A57DF7714C7758B354 wien. 86400 IN DS 14212 8 1 C13133146394C4D51F5821A57DF7714C7758B354 047769656E00002B0001000151800024378408020C2459E744411A5077304E63B4E20E4E877B34F6E1FC3110FEA8133DD894BFBB wien. 86400 IN DS 14212 8 2 0C2459E744411A5077304E63B4E20E4E877B34F6E1FC3110FEA8133DD894BFBB 047769656E00002B00010001518000185A320801955DD806C0A98C7D91296E8C75A1EC636B1A3DD7 wien. 86400 IN DS 23090 8 1 955DD806C0A98C7D91296E8C75A1EC636B1A3DD7 047769656E00002B00010001518000245A3208026A4B8394B41753028F4D627E86CF80EF6DE63FD48447A92E3B46854B9489798F wien. 86400 IN DS 23090 8 2 6A4B8394B41753028F4D627E86CF80EF6DE63FD48447A92E3B46854B9489798F 047769656E00002E0001000151800093002B08010001518052F4220052EAD97083770004F78D6A46EB5D8797B33698ED9B912210F4F299F9BCC21E7CF0A07473D07B3862F2F82E32987B008C2DE58C5C638A5F8F839B7EC87C16D17FA858E3F4CA913C041E78CCE1B90C507F60B8910E2A8715DF252F8448D2F0234A1E7808012B1DFEDA0744622716A434400CFAEF61CF5787CAC9489CD18047860D42691C511FEF16 wien. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BPeNakbrXYeXszaY7ZuRIhD08pn5vMIefPCgdHPQezhi8vguMph7AIwt5YxcY4pfj4Obfsh8FtF/qFjj9MqRPAQeeMzhuQxQf2C4kQ4qhxXfJS+ESNLwI0oeeAgBKx3+2gdEYicWpDRADPrvYc9Xh8rJSJzRgEeGDUJpHFEf7xY= ;{id = 33655} 047769656E00002E0001000151800093002F08010001518052F4220052EAD970837700A2A06B4CC387FA3DFC7B5AE732CB92FACC2BA4067EB9293196CE25E273AC2F4AC250AFEC40B2A477673A31403780DD997441CE958B434D2B2BCF95FE2F8604CB4A548B153A6FD10BC52CF6E5D9C5CF7FA561B739F48E703B04AFA1C3DF9B8283B60E4ED34AD2BEC15643BE5279A81CB87875404951088252823421E4E02099B1 wien. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oqBrTMOH+j38e1rnMsuS+swrpAZ+uSkxls4l4nOsL0rCUK/sQLKkd2c6MUA3gN2ZdEHOlYtDTSsrz5X+L4YEy0pUixU6b9ELxSz25dnFz3+lYbc59I5wOwSvocPfm4KDtg5O00rSvsFWQ75SeagcuHh1QElRCIJSgjQh5OAgmbE= ;{id = 33655} 047769656E00002F000100015180000F05776F726B73000006200000000013 wien. 86400 IN NSEC works. NS DS RRSIG NSEC 016103646E73036E6963047769656E00000100010002A3000004C200190F a.dns.nic.wien. 172800 IN A 194.0.25.15 016103646E73036E6963047769656E00001C00010002A300001020010678002000000000000000000015 a.dns.nic.wien. 172800 IN AAAA 2001:678:20::15 016203646E73036E6963047769656E00000100010002A3000004C1AA3D04 b.dns.nic.wien. 172800 IN A 193.170.61.4 016203646E73036E6963047769656E00001C00010002A30000102001062A000A20000000000000000004 b.dns.nic.wien. 172800 IN AAAA 2001:62a:a:2000::4 016303646E73036E6963047769656E00000100010002A3000004C1AABB04 c.dns.nic.wien. 172800 IN A 193.170.187.4 016303646E73036E6963047769656E00001C00010002A30000102001062A000A30000000000000000004 c.dns.nic.wien. 172800 IN AAAA 2001:62a:a:3000::4 05776F726B7300000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 works. 172800 IN NS demand.beta.aridns.net.au. 05776F726B7300000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 works. 172800 IN NS demand.alpha.aridns.net.au. 05776F726B7300000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 works. 172800 IN NS demand.delta.aridns.net.au. 05776F726B7300000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 works. 172800 IN NS demand.gamma.aridns.net.au. 05776F726B7300002B0001000151800024423A0802E60E67E7D2C27A10DD15E494009CF20208178D7E686EBA5C34AA60CF6BB4157A works. 86400 IN DS 16954 8 2 E60E67E7D2C27A10DD15E494009CF20208178D7E686EBA5C34AA60CF6BB4157A 05776F726B7300002E0001000151800093002B08010001518052F4220052EAD97083770087E57E1EA67E6235F7189C7979372709C35834684D6E626FDFB7FFE4BA93DD7FAAA48F44F7F93CEC8D02852324BA166CD936802512CEFC84B3FC8DE83C165018FAB55C63250D9278C7560BDD9B9DD10CF99E40F0DDC115E58CE9E7CFF9F1BA066553FEBBCD33D6AE879593EB8554B0DF2577556FE2B093E8D5C49817276DEA7B works. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . h+V+HqZ+YjX3GJx5eTcnCcNYNGhNbmJv37f/5LqT3X+qpI9E9/k87I0ChSMkuhZs2TaAJRLO/ISz/I3oPBZQGPq1XGMlDZJ4x1YL3Zud0Qz5nkDw3cEV5Yzp58/58boGZVP+u80z1q6HlZPrhVSw3yV3VW/isJPo1cSYFydt6ns= ;{id = 33655} 05776F726B7300002E0001000151800093002F08010001518052F4220052EAD97083770061BCB7B33E63E154C0E6FE1A28C15AD67DDAC56F5514973F2FBC54F1237C2EF2BDC5E5D455D869CD6BECD0632217B3B44E024BEE18BA3E2D6049111A9BBB19D0204373FCCB6FF2D2F811B21D1B2A12D2205F1C1500CF7B6EEF2B46E55AAB9E7126F7CE9A06EBCD83FC5A918685F9920032278273DE3636CCD471DF6CCE23A1BD works. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Yby3sz5j4VTA5v4aKMFa1n3axW9VFJc/L7xU8SN8LvK9xeXUVdhpzWvs0GMiF7O0TgJL7hi6Pi1gSREam7sZ0CBDc/zLb/LS+BGyHRsqEtIgXxwVAM97bu8rRuVaq55xJvfOmgbrzYP8WpGGhfmSADIngnPeNjbM1HHfbM4job0= ;{id = 33655} 05776F726B7300002F000100015180000C027773000006200000000013 works. 86400 IN NSEC ws. NS DS RRSIG NSEC 02777300000200010002A300000C036E733203646E7302777300 ws. 172800 IN NS ns2.dns.ws. 02777300000200010002A300000C036E733303646E7302777300 ws. 172800 IN NS ns3.dns.ws. 02777300000200010002A300000C036E733403646E7302777300 ws. 172800 IN NS ns4.dns.ws. 02777300000200010002A300000C036E733503646E7302777300 ws. 172800 IN NS ns5.dns.ws. 02777300000200010002A300000C036E733603646E7302777300 ws. 172800 IN NS ns6.dns.ws. 02777300000200010002A300000C036E733703646E7302777300 ws. 172800 IN NS ns7.dns.ws. 02777300002F000100015180001006E99B86E59BA2000006200000000003 ws. 86400 IN NSEC \233\155\134\229\155\162. NS RRSIG NSEC 02777300002E0001000151800093002F08010001518052F4220052EAD97083770076C711EBDE8B4666B60FABD4E402B66835CF070EF3AA23A3B8906807620B71A76F44120F8F7A4D83B5C08E1CDD2F5C5DD5DF4775B7E49B3F8039D5E37A4962D8DDAF1763DA52A25DD9310F5513A499D3963450226AC8DCFB0439122138B5D7A0F54337C564A093E4C11C13892EA7D32BA267536DDE5D9E2D3C22ECFD5F1A415D ws. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dscR696LRma2D6vU5AK2aDXPBw7zqiOjuJBoB2ILcadvRBIPj3pNg7XAjhzdL1xd1d9Hdbfkmz+AOdXjekli2N2vF2PaUqJd2TEPVROkmdOWNFAiasjc+wQ5EiE4tdeg9UM3xWSgk+TBHBOJLqfTK6JnU23eXZ4tPCLs/V8aQV0= ;{id = 33655} 036E733203646E7302777300000100010002A300000440461350 ns2.dns.ws. 172800 IN A 64.70.19.80 036E733303646E7302777300000100010002A300000443DDB234 ns3.dns.ws. 172800 IN A 67.221.178.52 036E733403646E7302777300000100010002A300000443DDB235 ns4.dns.ws. 172800 IN A 67.221.178.53 036E733503646E7302777300000100010002A300000440461346 ns5.dns.ws. 172800 IN A 64.70.19.70 036E733603646E7302777300000100010002A30000044D5C41AC ns6.dns.ws. 172800 IN A 77.92.65.172 036E733703646E7302777300000100010002A30000044D5C41AE ns7.dns.ws. 172800 IN A 77.92.65.174 06E99B86E59BA200000200010002A30000110161097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS a.zdnscloud.com. 06E99B86E59BA200000200010002A30000110162097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS b.zdnscloud.com. 06E99B86E59BA200000200010002A30000110163097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS c.zdnscloud.com. 06E99B86E59BA200000200010002A30000110164097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS d.zdnscloud.com. 06E99B86E59BA200000200010002A30000110165097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS e.zdnscloud.com. 06E99B86E59BA200000200010002A30000110166097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS f.zdnscloud.com. 06E99B86E59BA200000200010002A30000110167097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS g.zdnscloud.com. 06E99B86E59BA200000200010002A30000110169097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS i.zdnscloud.com. 06E99B86E59BA200000200010002A3000011016A097A646E73636C6F756403636F6D00 \233\155\134\229\155\162. 172800 IN NS j.zdnscloud.com. 06E99B86E59BA200002B000100015180002423630802E8079352130447DAA7F3E4809A9D5D208944FE4D99ED148D3BCC933C05D4133E \233\155\134\229\155\162. 86400 IN DS 9059 8 2 E8079352130447DAA7F3E4809A9D5D208944FE4D99ED148D3BCC933C05D4133E 06E99B86E59BA200002E0001000151800093002B08010001518052F4220052EAD9708377003E706A622F5746BBB8A55BD215A9D1C501A5BCD832D49857C3D02593FAC1721BE12E89B48861E6C048719EFCD18FD1FE9CDFC735BF5ED704F0BF7D47D288D0B315C7BACEB8F343BA2596759C7AF877303E8420FC26408832D1028D2DA19AA18EF333762648CD886E33A9568068C95883FAC3BB9CA19577866DDD0029E0F2B823 \233\155\134\229\155\162. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PnBqYi9XRru4pVvSFanRxQGlvNgy1JhXw9Alk/rBchvhLom0iGHmwEhxnvzRj9H+nN/HNb9e1wTwv31H0ojQsxXHus6480O6JZZ1nHr4dzA+hCD8JkCIMtECjS2hmqGO8zN2JkjNiG4zqVaAaMlYg/rDu5yhlXeGbd0AKeDyuCM= ;{id = 33655} 06E99B86E59BA200002E0001000151800093002F08010001518052F4220052EAD970837700BB57791491C9BB0AC6DE87AE304AA2A5FDE0B811EA0B107548125123E332928D0F296EEC5E04AAEA2A5EB89B70070D7547E0A442F7219802C42C15E8D040C34BBB2F75B60A2ECE0E26AA9DA68CEFE6A3AE0B87306462419488B2956EDFAB7318AED9BDB378BE6414D577297444F497AF4F5E3EE1788D0AAF3B1A78FE176E3E7E \233\155\134\229\155\162. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . u1d5FJHJuwrG3oeuMEqipf3guBHqCxB1SBJRI+Myko0PKW7sXgSq6ipeuJtwBw11R+CkQvchmALELBXo0EDDS7svdbYKLs4OJqqdpozv5qOuC4cwZGJBlIiylW7fq3MYrtm9s3i+ZBTVdyl0RPSXr09ePuF4jQqvOxp4/hduPn4= ;{id = 33655} 06E99B86E59BA200002F000100015180001006E59CA8E7BABF000006200000000013 \233\155\134\229\155\162. 86400 IN NSEC \229\156\168\231\186\191. NS DS RRSIG NSEC 06E59CA8E7BABF00000200010002A300000F026130036E696306E59CA8E7BABF00 \229\156\168\231\186\191. 172800 IN NS a0.nic.\229\156\168\231\186\191. 06E59CA8E7BABF00000200010002A300000F026132036E696306E59CA8E7BABF00 \229\156\168\231\186\191. 172800 IN NS a2.nic.\229\156\168\231\186\191. 06E59CA8E7BABF00000200010002A300000F026230036E696306E59CA8E7BABF00 \229\156\168\231\186\191. 172800 IN NS b0.nic.\229\156\168\231\186\191. 06E59CA8E7BABF00000200010002A300000F026330036E696306E59CA8E7BABF00 \229\156\168\231\186\191. 172800 IN NS c0.nic.\229\156\168\231\186\191. 06E59CA8E7BABF00002B0001000151800018421607019A0C050DE2A06E4F656D4AF6E289B8AB76E524B0 \229\156\168\231\186\191. 86400 IN DS 16918 7 1 9A0C050DE2A06E4F656D4AF6E289B8AB76E524B0 06E59CA8E7BABF00002B0001000151800024421607025770C75D8F11887B7845A83A145DE52439BF7D86D3F71F07358112C87EA43B8B \229\156\168\231\186\191. 86400 IN DS 16918 7 2 5770C75D8F11887B7845A83A145DE52439BF7D86D3F71F07358112C87EA43B8B 06E59CA8E7BABF00002E0001000151800093002B08010001518052F4220052EAD9708377002AB1FFB4B2B3BFBDA5392B04DA85D193EB40F46C192467A8631A2D9254516B00F9B0F4B45D1087D0E8340819F32BED21753AAFABDB1DDA0F70669813F988DF0F6D5924987805B720CCF64CCD574F3C259198E02683B748B476F2144A4185830E8D9E2B7151D55A14DBAA20C8539229B4833566A01EDC31C33CB0D46766F4AE99 \229\156\168\231\186\191. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . KrH/tLKzv72lOSsE2oXRk+tA9GwZJGeoYxotklRRawD5sPS0XRCH0Og0CBnzK+0hdTqvq9sd2g9wZpgT+YjfD21ZJJh4BbcgzPZMzVdPPCWRmOAmg7dItHbyFEpBhYMOjZ4rcVHVWhTbqiDIU5IptIM1ZqAe3DHDPLDUZ2b0rpk= ;{id = 33655} 06E59CA8E7BABF00002E0001000151800093002F08010001518052F4220052EAD97083770008B9BFE416B5605F21DFFD99648C61E57A0834E290CDC605C88F737AB995E604D9B176809EA9ADAB606C6B3EF0734A09A40EACF4FEC708DF6C91CEE244FECE8C05AF5881CC32F5F50624D1F4EC6CA81AE60CFDC95602D0D18B7D4E220C3E0EB9E859FF763C7B801F77732014C914ADE4A02E242A136D04D82FBD36D445ED2986 \229\156\168\231\186\191. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CLm/5Ba1YF8h3/2ZZIxh5XoINOKQzcYFyI9zermV5gTZsXaAnqmtq2Bsaz7wc0oJpA6s9P7HCN9skc7iRP7OjAWvWIHMMvX1BiTR9OxsqBrmDP3JVgLQ0Yt9TiIMPg656Fn/djx7gB93cyAUyRSt5KAuJCoTbQTYL7021EXtKYY= ;{id = 33655} 06E59CA8E7BABF00002F000100015180001006ED959CEAB5AD000006200000000013 \229\156\168\231\186\191. 86400 IN NSEC \237\149\156\234\181\173. NS DS RRSIG NSEC 026130036E696306E59CA8E7BABF00000100010002A30000044116BC09 a0.nic.\229\156\168\231\186\191. 172800 IN A 65.22.188.9 026130036E696306E59CA8E7BABF00001C00010002A30000102A01884000B600000000000000000009 a0.nic.\229\156\168\231\186\191. 172800 IN AAAA 2a01:8840:b6::9 026132036E696306E59CA8E7BABF00000100010002A30000044116BF09 a2.nic.\229\156\168\231\186\191. 172800 IN A 65.22.191.9 026132036E696306E59CA8E7BABF00001C00010002A30000102A01884000B900000000000000000009 a2.nic.\229\156\168\231\186\191. 172800 IN AAAA 2a01:8840:b9::9 026230036E696306E59CA8E7BABF00000100010002A30000044116BD09 b0.nic.\229\156\168\231\186\191. 172800 IN A 65.22.189.9 026230036E696306E59CA8E7BABF00001C00010002A30000102A01884000B700000000000000000009 b0.nic.\229\156\168\231\186\191. 172800 IN AAAA 2a01:8840:b7::9 026330036E696306E59CA8E7BABF00000100010002A30000044116BE09 c0.nic.\229\156\168\231\186\191. 172800 IN A 65.22.190.9 026330036E696306E59CA8E7BABF00001C00010002A30000102A01884000B800000000000000000009 c0.nic.\229\156\168\231\186\191. 172800 IN AAAA 2a01:8840:b8::9 06ED959CEAB5AD00000200010002A300000A016203646E73026B7200 \237\149\156\234\181\173. 172800 IN NS b.dns.kr. 06ED959CEAB5AD00000200010002A300000A016303646E73026B7200 \237\149\156\234\181\173. 172800 IN NS c.dns.kr. 06ED959CEAB5AD00000200010002A300000A016403646E73026B7200 \237\149\156\234\181\173. 172800 IN NS d.dns.kr. 06ED959CEAB5AD00000200010002A300000A016503646E73026B7200 \237\149\156\234\181\173. 172800 IN NS e.dns.kr. 06ED959CEAB5AD00000200010002A300000A016603646E73026B7200 \237\149\156\234\181\173. 172800 IN NS f.dns.kr. 06ED959CEAB5AD00000200010002A300000A016703646E73026B7200 \237\149\156\234\181\173. 172800 IN NS g.dns.kr. 06ED959CEAB5AD00002B00010001518000246BB50702A1C0A1B101F2B31DA2DD995BD0994A6C1E9E34E325FA007E2EA8721DFC4C6CB4 \237\149\156\234\181\173. 86400 IN DS 27573 7 2 A1C0A1B101F2B31DA2DD995BD0994A6C1E9E34E325FA007E2EA8721DFC4C6CB4 06ED959CEAB5AD00002B0001000151800024DC0F0702ED307DC0902F1130ADBCB1B6FBA7C16F76927BD3E33D80FED23DAEFEFF2604C8 \237\149\156\234\181\173. 86400 IN DS 56335 7 2 ED307DC0902F1130ADBCB1B6FBA7C16F76927BD3E33D80FED23DAEFEFF2604C8 06ED959CEAB5AD00002E0001000151800093002B08010001518052F4220052EAD97083770062EE21A040DC1D9CA824BCCE176528F1125F4851155233F8789B54C33B29324A3DBC559B88BA1FB0C490AF814FD63D24262D96A6AF6D6B429DE619BD7C26A64593EC282BA13657B262A41331707D745738FB981E8BE9A2B9EA1FE6AD3830D06619BDF65AF7A10918B74D070BDBF4E3806A4B4B68502E4393E30E9D41921428CD \237\149\156\234\181\173. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Yu4hoEDcHZyoJLzOF2Uo8RJfSFEVUjP4eJtUwzspMko9vFWbiLofsMSQr4FP1j0kJi2Wpq9ta0Kd5hm9fCamRZPsKCuhNleyYqQTMXB9dFc4+5gei+miueof5q04MNBmGb32WvehCRi3TQcL2/TjgGpLS2hQLkOT4w6dQZIUKM0= ;{id = 33655} 06ED959CEAB5AD00002E0001000151800093002F08010001518052F4220052EAD97083770031A7B7C82F3C02F29576A00135B21235EEED94327B456E051871D59B6F0B7ABDDBCFDCF6860811A41813739729331E0A9005B9E781D5ED9274010E577607C0B6B97393623BAD94B4DADF38D59EA226E5B2E12A2CF097964A210A70FCE10BE2623F073B3F8D9C2D3F924E2E2E0A5C8D65ADB7AEAFD93879B8605AEBD1614FC076 \237\149\156\234\181\173. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Mae3yC88AvKVdqABNbISNe7tlDJ7RW4FGHHVm28Ler3bz9z2hggRpBgTc5cpMx4KkAW554HV7ZJ0AQ5XdgfAtrlzk2I7rZS02t841Z6iJuWy4Sos8JeWSiEKcPzhC+JiPwc7P42cLT+STi4uClyNZa23rq/ZOHm4YFrr0WFPwHY= ;{id = 33655} 06ED959CEAB5AD00002F00010001518000160CE0A6ADE0A6BEE0A6B0E0A6A4000006200000000013 \237\149\156\234\181\173. 86400 IN NSEC \224\166\173\224\166\190\224\166\176\224\166\164. NS DS RRSIG NSEC 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS a0.cctld.afilias-nst.info. 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS a1.in.afilias-nst.in. 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS a2.in.afilias-nst.info. 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS b0.cctld.afilias-nst.org. 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS b1.in.afilias-nst.in. 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS b2.in.afilias-nst.org. 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS c0.cctld.afilias-nst.info. 0CE0A6ADE0A6BEE0A6B0E0A6A400000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 \224\166\173\224\166\190\224\166\176\224\166\164. 172800 IN NS d0.cctld.afilias-nst.org. 0CE0A6ADE0A6BEE0A6B0E0A6A400002F000100015180001006E585ACE79B8A000006200000000003 \224\166\173\224\166\190\224\166\176\224\166\164. 86400 IN NSEC \229\133\172\231\155\138. NS RRSIG NSEC 0CE0A6ADE0A6BEE0A6B0E0A6A400002E0001000151800093002F08010001518052F4220052EAD9708377000C4AC34988C0DEC8F5F95FEF28AF447773D6645CC6F061F840101D70F21455EF65096E50EFDF19039889DB343E90416A78A42208CEB5D4424E17BCCAEDE600A2F4C601AFB3C472D7FE3A6EC61D0633F2C89F709D7FD43284D7FACE6B3640BC0617C80ABB0CE314AA53AAF5D7F40B76B1C877244B04566E18A264BC55C9B6B3EB \224\166\173\224\166\190\224\166\176\224\166\164. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DErDSYjA3sj1+V/vKK9Ed3PWZFzG8GH4QBAdcPIUVe9lCW5Q798ZA5iJ2zQ+kEFqeKQiCM611EJOF7zK7eYAovTGAa+zxHLX/jpuxh0GM/LIn3Cdf9QyhNf6zms2QLwGF8gKuwzjFKpTqvXX9At2sch3JEsEVm4YomS8Vcm2s+s= ;{id = 33655} 06E585ACE79B8A00000200010002A300000E036E733105636F6E616302636E00 \229\133\172\231\155\138. 172800 IN NS ns1.conac.cn. 06E585ACE79B8A00000200010002A300000E036E733205636F6E616302636E00 \229\133\172\231\155\138. 172800 IN NS ns2.conac.cn. 06E585ACE79B8A00000200010002A300000E036E733305636F6E616302636E00 \229\133\172\231\155\138. 172800 IN NS ns3.conac.cn. 06E585ACE79B8A00000200010002A300000E036E733405636F6E616302636E00 \229\133\172\231\155\138. 172800 IN NS ns4.conac.cn. 06E585ACE79B8A00000200010002A300000E036E733505636F6E616302636E00 \229\133\172\231\155\138. 172800 IN NS ns5.conac.cn. 06E585ACE79B8A00002B0001000151800024BC620802A16754C480E58C0D17126B3BAF93F32BAC39A916CF9D1F6F3A1F5C33687BE80F \229\133\172\231\155\138. 86400 IN DS 48226 8 2 A16754C480E58C0D17126B3BAF93F32BAC39A916CF9D1F6F3A1F5C33687BE80F 06E585ACE79B8A00002E0001000151800093002B08010001518052F4220052EAD97083770005289E44DB84E8446F32CF838B43B9E2983B14BCDC3D88021D0EB4C7BE38372CC60E859A29E298E96DAF2506D0E7CEDD19CE04284915A74391C64EB055961E2E70CFDF9BC128D11F3704DDDA47673C2786AAB7B4B8C5537E1D3751030F169F6B883DAB79CD5CFEB1C77112FDD03A3F400059B8C78B10F5784BE91E2613E4B8EE \229\133\172\231\155\138. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BSieRNuE6ERvMs+Di0O54pg7FLzcPYgCHQ60x744NyzGDoWaKeKY6W2vJQbQ587dGc4EKEkVp0ORxk6wVZYeLnDP35vBKNEfNwTd2kdnPCeGqre0uMVTfh03UQMPFp9riD2rec1c/rHHcRL90Do/QABZuMeLEPV4S+keJhPkuO4= ;{id = 33655} 06E585ACE79B8A00002E0001000151800093002F08010001518052F4220052EAD9708377003D62C79FC977DE655E87CD4C38A7575E6BAB03445603A22F0C24139B248493A3D76EED832B9389C4CE745BCBBDC32B7B8BE514377DE891BEE70712A5B75C63CD37D6BBA5DA5F889C037AB63ACFAF20BD208BAA21CEA8BA2F023AB78BFD4309B064AC85777CE0516A047AC439CF210B6942DADF50E778FBDFC29E3B73BBF2B4AD \229\133\172\231\155\138. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . PWLHn8l33mVeh81MOKdXXmurA0RWA6IvDCQTmySEk6PXbu2DK5OJxM50W8u9wyt7i+UUN33okb7nBxKlt1xjzTfWu6XaX4icA3q2Os+vIL0gi6ohzqi6LwI6t4v9QwmwZKyFd3zgUWoEesQ5zyELaULa31DnePvfwp47c7vytK0= ;{id = 33655} 06E585ACE79B8A00002F000100015180001006E585ACE58FB8000006200000000013 \229\133\172\231\155\138. 86400 IN NSEC \229\133\172\229\143\184. NS DS RRSIG NSEC 06E585ACE58FB800000200010002A300000C0161056E67746C6402636E00 \229\133\172\229\143\184. 172800 IN NS a.ngtld.cn. 06E585ACE58FB800000200010002A300000C0162056E67746C6402636E00 \229\133\172\229\143\184. 172800 IN NS b.ngtld.cn. 06E585ACE58FB800000200010002A300000C0163056E67746C6402636E00 \229\133\172\229\143\184. 172800 IN NS c.ngtld.cn. 06E585ACE58FB800000200010002A300000C0164056E67746C6402636E00 \229\133\172\229\143\184. 172800 IN NS d.ngtld.cn. 06E585ACE58FB800000200010002A300000C0165056E67746C6402636E00 \229\133\172\229\143\184. 172800 IN NS e.ngtld.cn. 06E585ACE58FB800002B0001000151800024B8FF0802D8FE897CE8AC620CB7CB9F6F4E887FC7A14C3ED80CB973DA4E30A17CECA1015B \229\133\172\229\143\184. 86400 IN DS 47359 8 2 D8FE897CE8AC620CB7CB9F6F4E887FC7A14C3ED80CB973DA4E30A17CECA1015B 06E585ACE58FB800002E0001000151800093002B08010001518052F4220052EAD970837700B532C45E9D3CCAD8E02C4CC205D7B75CE3D263CD18FEC4B17B0D5F7FFA94AB1F82BB021F76E4237BE6FF26ED1367963E33CB1D2CFFB5F9D6BDDC0628F3EF32D3084BA7E37C6BA5F29513BEFDC94B222B0535F95B9EDBBCF2E28BA643A37B8EC4817CA5B8DED0E0D4D2D0428BA00CCA72FAA58CAA1B82714CA3236E796D557FA2 \229\133\172\229\143\184. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tTLEXp08ytjgLEzCBde3XOPSY80Y/sSxew1ff/qUqx+CuwIfduQje+b/Ju0TZ5Y+M8sdLP+1+da93AYo8+8y0whLp+N8a6XylRO+/clLIisFNflbntu88uKLpkOje47EgXyluN7Q4NTS0EKLoAzKcvqljKobgnFMoyNueW1Vf6I= ;{id = 33655} 06E585ACE58FB800002E0001000151800093002F08010001518052F4220052EAD9708377005CEE60FBDCF426EBCDE1E6D9BF0AD3BD4B3E14439F50D199093962F7929C71F342FE647F7D7EAB8D62CC505A61FB61ADDBDE65BE57B941C4524D46923DA0471CE44436E885C976BF3375D4E49E2CF1EA8997ECDAA62BD8E1558CE6C78CF31DDF93D06E57AD7164549B9B51FDCDE688D4FA8F671DEB30C84704B016529621B346 \229\133\172\229\143\184. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XO5g+9z0JuvN4ebZvwrTvUs+FEOfUNGZCTli95KccfNC/mR/fX6rjWLMUFph+2Gt295lvle5QcRSTUaSPaBHHORENuiFyXa/M3XU5J4s8eqJl+zapivY4VWM5seM8x3fk9BuV61xZFSbm1H9zeaI1PqPZx3rMMhHBLAWUpYhs0Y= ;{id = 33655} 06E585ACE58FB800002F000100015180001309E68891E788B1E4BDA0000006200000000013 \229\133\172\229\143\184. 86400 IN NSEC \230\136\145\231\136\177\228\189\160. NS DS RRSIG NSEC 09E68891E788B1E4BDA000000200010002A30000110161097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS a.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A30000110162097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS b.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A30000110163097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS c.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A30000110164097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS d.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A30000110165097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS e.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A30000110166097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS f.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A30000110167097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS g.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A30000110169097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS i.zdnscloud.com. 09E68891E788B1E4BDA000000200010002A3000011016A097A646E73636C6F756403636F6D00 \230\136\145\231\136\177\228\189\160. 172800 IN NS j.zdnscloud.com. 09E68891E788B1E4BDA000002B00010001518000249218080207C6728C4F51FFD6B1E829D5AFBDEE24A30E710EBEFC50C8D6AB7785223A0A0C \230\136\145\231\136\177\228\189\160. 86400 IN DS 37400 8 2 07C6728C4F51FFD6B1E829D5AFBDEE24A30E710EBEFC50C8D6AB7785223A0A0C 09E68891E788B1E4BDA000002E0001000151800093002B08010001518052F4220052EAD9708377002EAEE75BABEAC52FBCA5D081FBA046AB3A8672F606DA30CA7A8D8D26D2DE30C8F0FEFB3BED806C658A38A708DA9F7A5EDB65D4EFECC480B8D4D8FF9B9E2D726C29DCFD990AE106B8FA14ED78572E6254A13233807F0FBBDB8312CF2568A98145481C3DB493A57BB87341E8A3BBF24BCF359F598AF2D7CFA93C0051325C362ED5 \230\136\145\231\136\177\228\189\160. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Lq7nW6vqxS+8pdCB+6BGqzqGcvYG2jDKeo2NJtLeMMjw/vs77YBsZYo4pwjan3pe22XU7+zEgLjU2P+bni1ybCnc/ZkK4Qa4+hTteFcuYlShMjOAfw+724MSzyVoqYFFSBw9tJOle7hzQeiju/JLzzWfWYry18+pPABRMlw2LtU= ;{id = 33655} 09E68891E788B1E4BDA000002E0001000151800093002F08010001518052F4220052EAD970837700B6CB4B457F374782ECA896C0A96F35B06889699DF6860BBBFDD8DFE977A6D027436CBB2C63A998295F2EB2E39F89C1EC819CE2B8E5150AC49AEB873BACC49DFEE56D3B653D86E52D71F7805725B4CADB65845F435610F067FAC5BD0C6229DDDEBCE7BF791D6E2CF58920CCAF9E0CD348F2C57685AFB9B41476CC5EE330AB8AAE \230\136\145\231\136\177\228\189\160. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tstLRX83R4LsqJbAqW81sGiJaZ32hgu7/djf6Xem0CdDbLssY6mYKV8usuOficHsgZziuOUVCsSa64c7rMSd/uVtO2U9huUtcfeAVyW0yttlhF9DVhDwZ/rFvQxiKd3evOe/eR1uLPWJIMyvngzTSPLFdoWvubQUdsxe4zCriq4= ;{id = 33655} 09E68891E788B1E4BDA000002F000100015180001006D29BD0B0D0B7000006200000000013 \230\136\145\231\136\177\228\189\160. 86400 IN NSEC \210\155\208\176\208\183. NS DS RRSIG NSEC 06D29BD0B0D0B700000200010002A300001B026B7A056363746C640761757468646E730472697065036E657400 \210\155\208\176\208\183. 172800 IN NS kz.cctld.authdns.ripe.net. 06D29BD0B0D0B700000200010002A300000B026E73036E6963026B7A00 \210\155\208\176\208\183. 172800 IN NS ns.nic.kz. 06D29BD0B0D0B700002F00010001518000160CD0BED0BDD0BBD0B0D0B9D0BD000006200000000003 \210\155\208\176\208\183. 86400 IN NSEC \208\190\208\189\208\187\208\176\208\185\208\189. NS RRSIG NSEC 06D29BD0B0D0B700002E0001000151800093002F08010001518052F4220052EAD97083770011F1B05774DD4FCB1D6E532CBB182A80EA5F1B89EC158B91CF97033AB4C3D2F46BA9716EC4EB6CA12DB1C3FD6E4515AE75618887B29D49453B5F65AB5B5AE4D20244F2612F55B64FA8EECBE7C42BE93C606727F8193CE49CB57B1FB1979442D5F0848FF1AC4D7AD73A16EF9C9CB1B65EE25263C3189A1E356C8981D46CF88605 \210\155\208\176\208\183. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . EfGwV3TdT8sdblMsuxgqgOpfG4nsFYuRz5cDOrTD0vRrqXFuxOtsoS2xw/1uRRWudWGIh7KdSUU7X2WrW1rk0gJE8mEvVbZPqO7L58Qr6TxgZyf4GTzknLV7H7GXlELV8ISP8axNetc6Fu+cnLG2XuJSY8MYmh41bImB1Gz4hgU= ;{id = 33655} 0CD0BED0BDD0BBD0B0D0B9D0BD00000200010002A300001608616E7963617374390769726F6E646E73036E657400 \208\190\208\189\208\187\208\176\208\185\208\189. 172800 IN NS anycast9.irondns.net. 0CD0BED0BDD0BBD0B0D0B9D0BD00000200010002A300001709616E796361737431300769726F6E646E73036E657400 \208\190\208\189\208\187\208\176\208\185\208\189. 172800 IN NS anycast10.irondns.net. 0CD0BED0BDD0BBD0B0D0B9D0BD00000200010002A300001709616E796361737432330769726F6E646E73036E657400 \208\190\208\189\208\187\208\176\208\185\208\189. 172800 IN NS anycast23.irondns.net. 0CD0BED0BDD0BBD0B0D0B9D0BD00000200010002A300001709616E796361737432340769726F6E646E73036E657400 \208\190\208\189\208\187\208\176\208\185\208\189. 172800 IN NS anycast24.irondns.net. 0CD0BED0BDD0BBD0B0D0B9D0BD00002B0001000151800024D54E0A02A1A13FCD0AFB413657352EBA09765C81E0BA0AF0B8452F03EB0D0E4C9661241D \208\190\208\189\208\187\208\176\208\185\208\189. 86400 IN DS 54606 10 2 A1A13FCD0AFB413657352EBA09765C81E0BA0AF0B8452F03EB0D0E4C9661241D 0CD0BED0BDD0BBD0B0D0B9D0BD00002E0001000151800093002B08010001518052F4220052EAD9708377008691204B2F4A7130FAD9DFF0C3AF841838869BE79E76B56FDAC76F22AD6257D85705B416B377F05306EEB6F485D8F86B43084FCCA4A99002D6EC3427F8032811A780E9D3AF1EAB057886D922AED0B0A264C399117BEF8F2C913E98139734F8DF364DE3F9BE756CFFB640FD4C57755B2316F50B3709E77F47A5764817FA50B40C \208\190\208\189\208\187\208\176\208\185\208\189. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hpEgSy9KcTD62d/ww6+EGDiGm+eedrVv2sdvIq1iV9hXBbQWs3fwUwbutvSF2PhrQwhPzKSpkALW7DQn+AMoEaeA6dOvHqsFeIbZIq7QsKJkw5kRe++PLJE+mBOXNPjfNk3j+b51bP+2QP1MV3VbIxb1CzcJ539HpXZIF/pQtAw= ;{id = 33655} 0CD0BED0BDD0BBD0B0D0B9D0BD00002E0001000151800093002F08010001518052F4220052EAD970837700AF55868DA5F68DE82FC7533F56FC08AE0864050666D289AECF7ABB54C05CE151588D4D79ECF24BC8566AAB1AEB9F88C6CD85681EC64D114CF8C74CC889BBA1576F40860AF601E3782415AB3951B907A6BAAE799F161518377BF82F27E6D8EDD7C5E4F7DF3251186309428B74A2F143AA379D3AAB4F6A6B2278DA5F883BFF380C \208\190\208\189\208\187\208\176\208\185\208\189. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . r1WGjaX2jegvx1M/VvwIrghkBQZm0omuz3q7VMBc4VFYjU157PJLyFZqqxrrn4jGzYVoHsZNEUz4x0zIibuhV29Ahgr2AeN4JBWrOVG5B6a6rnmfFhUYN3v4Lyfm2O3XxeT33zJRGGMJQot0ovFDqjedOqtPamsieNpfiDv/OAw= ;{id = 33655} 0CD0BED0BDD0BBD0B0D0B9D0BD00002F000100015180001208D181D0B0D0B9D182000006200000000013 \208\190\208\189\208\187\208\176\208\185\208\189. 86400 IN NSEC \209\129\208\176\208\185\209\130. NS DS RRSIG NSEC 08D181D0B0D0B9D18200000200010002A300001608616E7963617374390769726F6E646E73036E657400 \209\129\208\176\208\185\209\130. 172800 IN NS anycast9.irondns.net. 08D181D0B0D0B9D18200000200010002A300001709616E796361737431300769726F6E646E73036E657400 \209\129\208\176\208\185\209\130. 172800 IN NS anycast10.irondns.net. 08D181D0B0D0B9D18200000200010002A300001709616E796361737432330769726F6E646E73036E657400 \209\129\208\176\208\185\209\130. 172800 IN NS anycast23.irondns.net. 08D181D0B0D0B9D18200000200010002A300001709616E796361737432340769726F6E646E73036E657400 \209\129\208\176\208\185\209\130. 172800 IN NS anycast24.irondns.net. 08D181D0B0D0B9D18200002B0001000151800024EF610A02FD5803E5D6CA1B8B5B3345B8E6AEA0E640988D973AE153713A7BC890A84E3400 \209\129\208\176\208\185\209\130. 86400 IN DS 61281 10 2 FD5803E5D6CA1B8B5B3345B8E6AEA0E640988D973AE153713A7BC890A84E3400 08D181D0B0D0B9D18200002E0001000151800093002B08010001518052F4220052EAD970837700820876EC3BE68E3A87F992C3185D4F888662EFA6D898B036DCDE8B2451AF112736BC3FA4B90B6A653CF56F244BFE2249B213371BD84E387DE8214962EA4FFC3812276B86349581D7BCDF689FB1CE65F6CEBB87193F81C01E95A565DCF8CA6DCCF0F37AEED27A4A77F74460EBBE3616F0F102A5964EAE5EE37A98CEDE670E79D6 \209\129\208\176\208\185\209\130. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ggh27DvmjjqH+ZLDGF1PiIZi76bYmLA23N6LJFGvESc2vD+kuQtqZTz1byRL/iJJshM3G9hOOH3oIUli6k/8OBIna4Y0lYHXvN9on7HOZfbOu4cZP4HAHpWlZdz4ym3M8PN67tJ6Snf3RGDrvjYW8PECpZZOrl7jepjO3mcOedY= ;{id = 33655} 08D181D0B0D0B9D18200002E0001000151800093002F08010001518052F4220052EAD97083770051FEDC7119774952012EC63D6AE5E07D032822C0576BC8F93BE299597E8FE3DB89DD1A4788B1C70AF804CD3AE3E9CE102C570DC0C3D2809C5DB26420C47CC3A89E71F164C6B5DFD5AED5BC26A0DCA62DEACFE16EDEF870FE7C48EA2B9E431DF64A014E6A776EF977F062157E7E3339527031FA704D25EFE35D9F9702172D3231 \209\129\208\176\208\185\209\130. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Uf7ccRl3SVIBLsY9auXgfQMoIsBXa8j5O+KZWX6P49uJ3RpHiLHHCvgEzTrj6c4QLFcNwMPSgJxdsmQgxHzDqJ5x8WTGtd/VrtW8JqDcpi3qz+Fu3vhw/nxI6iueQx32SgFOandu+XfwYhV+fjM5UnAx+nBNJe/jXZ+XAhctMjE= ;{id = 33655} 08D181D0B0D0B9D18200002F000100015180001006D181D180D0B1000006200000000013 \209\129\208\176\208\185\209\130. 86400 IN NSEC \209\129\209\128\208\177. NS DS RRSIG NSEC 06D181D180D0B100000200010002A300000A0161036E696302727300 \209\129\209\128\208\177. 172800 IN NS a.nic.rs. 06D181D180D0B100000200010002A300000A0166036E696302727300 \209\129\209\128\208\177. 172800 IN NS f.nic.rs. 06D181D180D0B100000200010002A300000A0167036E696302727300 \209\129\209\128\208\177. 172800 IN NS g.nic.rs. 06D181D180D0B100000200010002A300000A0168036E696302727300 \209\129\209\128\208\177. 172800 IN NS h.nic.rs. 06D181D180D0B100000200010002A300000A016B036E696302727300 \209\129\209\128\208\177. 172800 IN NS k.nic.rs. 06D181D180D0B100000200010002A300000A016C036E696302727300 \209\129\209\128\208\177. 172800 IN NS l.nic.rs. 06D181D180D0B100002F000100015180002B21E0AE9AE0AEBFE0AE99E0AF8DE0AE95E0AEAAE0AF8DE0AEAAE0AF82E0AEB0E0AF8D000006200000000003 \209\129\209\128\208\177. 86400 IN NSEC \224\174\154\224\174\191\224\174\153\224\175\141\224\174\149\224\174\170\224\175\141\224\174\170\224\175\130\224\174\176\224\175\141. NS RRSIG NSEC 06D181D180D0B100002E0001000151800093002F08010001518052F4220052EAD9708377008B7FF7311F189D114D83A994A3392657F0A1E994208D0A981C87A7A9271012E36D305BAD6E0B9C5BD20DB79D5542744872BF58D0B02B2C6FF051C1204276799ED09556B72EA8E82058ED04FC6A47A670282278561C8C1366FE440574F74037D92F92C92DB384757221A137A4FA2E9A5B79BB187C09837F918F8D9C198C552DCD \209\129\209\128\208\177. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . i3/3MR8YnRFNg6mUozkmV/Ch6ZQgjQqYHIenqScQEuNtMFutbgucW9INt51VQnRIcr9Y0LArLG/wUcEgQnZ5ntCVVrcuqOggWO0E/GpHpnAoInhWHIwTZv5EBXT3QDfZL5LJLbOEdXIhoTek+i6aW3m7GHwJg3+Rj42cGYxVLc0= ;{id = 33655} 21E0AE9AE0AEBFE0AE99E0AF8DE0AE95E0AEAAE0AF8DE0AEAAE0AF82E0AEB0E0AF8D00000200010002A3000011036E7332046375686B0365647502686B00 \224\174\154\224\174\191\224\174\153\224\175\141\224\174\149\224\174\170\224\175\141\224\174\170\224\175\130\224\174\176\224\175\141. 172800 IN NS ns2.cuhk.edu.hk. 21E0AE9AE0AEBFE0AE99E0AF8DE0AE95E0AEAAE0AF8DE0AEAAE0AF82E0AEB0E0AF8D00000200010002A300001004736563330561706E6963036E657400 \224\174\154\224\174\191\224\174\153\224\175\141\224\174\149\224\174\170\224\175\141\224\174\170\224\175\130\224\174\176\224\175\141. 172800 IN NS sec3.apnic.net. 21E0AE9AE0AEBFE0AE99E0AF8DE0AE95E0AEAAE0AF8DE0AEAAE0AF82E0AEB0E0AF8D00000200010002A3000010056473616E790573676E696302736700 \224\174\154\224\174\191\224\174\153\224\175\141\224\174\149\224\174\170\224\175\141\224\174\170\224\175\130\224\174\176\224\175\141. 172800 IN NS dsany.sgnic.sg. 21E0AE9AE0AEBFE0AE99E0AF8DE0AE95E0AEAAE0AF8DE0AEAAE0AF82E0AEB0E0AF8D00000200010002A30000170573672D6E7307616E796361737403706368036E657400 \224\174\154\224\174\191\224\174\153\224\175\141\224\174\149\224\174\170\224\175\141\224\174\170\224\175\130\224\174\176\224\175\141. 172800 IN NS sg-ns.anycast.pch.net. 21E0AE9AE0AEBFE0AE99E0AF8DE0AE95E0AEAAE0AF8DE0AEAAE0AF82E0AEB0E0AF8D00002F000100015180001309E4B8ADE69687E7BD91000006200000000003 \224\174\154\224\174\191\224\174\153\224\175\141\224\174\149\224\174\170\224\175\141\224\174\170\224\175\130\224\174\176\224\175\141. 86400 IN NSEC \228\184\173\230\150\135\231\189\145. NS RRSIG NSEC 21E0AE9AE0AEBFE0AE99E0AF8DE0AE95E0AEAAE0AF8DE0AEAAE0AF82E0AEB0E0AF8D00002E0001000151800093002F08010001518052F4220052EAD9708377006EFB4A92C7619FF2451130E26A59CFEB3C62E2CF00A0EAD5A6DACAB92338786B6E4F5E41EC80E239D9EF6ACEC9CC49DA57BBEDAB99032AEDE369C316F9BB73CC21ED910267234009C060DD385E5AF9815DABDC451EF749F4B15B478D43A60D63343B3D9C279840E6DCD79E67E850BB0ADDD7D23E9E76F223E7C6458162005B08 \224\174\154\224\174\191\224\174\153\224\175\141\224\174\149\224\174\170\224\175\141\224\174\170\224\175\130\224\174\176\224\175\141. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bvtKksdhn/JFETDialnP6zxi4s8AoOrVptrKuSM4eGtuT15B7IDiOdnvas7JzEnaV7vtq5kDKu3jacMW+btzzCHtkQJnI0AJwGDdOF5a+YFdq9xFHvdJ9LFbR41Dpg1jNDs9nCeYQObc155n6FC7Ct3X0j6edvIj58ZFgWIAWwg= ;{id = 33655} 09E4B8ADE69687E7BD9100000200010002A3000012026130036E696309E4B8ADE69687E7BD9100 \228\184\173\230\150\135\231\189\145. 172800 IN NS a0.nic.\228\184\173\230\150\135\231\189\145. 09E4B8ADE69687E7BD9100000200010002A3000012026132036E696309E4B8ADE69687E7BD9100 \228\184\173\230\150\135\231\189\145. 172800 IN NS a2.nic.\228\184\173\230\150\135\231\189\145. 09E4B8ADE69687E7BD9100000200010002A3000012026230036E696309E4B8ADE69687E7BD9100 \228\184\173\230\150\135\231\189\145. 172800 IN NS b0.nic.\228\184\173\230\150\135\231\189\145. 09E4B8ADE69687E7BD9100000200010002A3000012026330036E696309E4B8ADE69687E7BD9100 \228\184\173\230\150\135\231\189\145. 172800 IN NS c0.nic.\228\184\173\230\150\135\231\189\145. 09E4B8ADE69687E7BD9100002B00010001518000189A2307018CBCB513FF4387B8F6A006D414A50E1A5EA178CA \228\184\173\230\150\135\231\189\145. 86400 IN DS 39459 7 1 8CBCB513FF4387B8F6A006D414A50E1A5EA178CA 09E4B8ADE69687E7BD9100002B00010001518000249A2307020CB316717E555D102A2E96D53D32EB0AB0AC73F10D3E66E2D225398C6A30B816 \228\184\173\230\150\135\231\189\145. 86400 IN DS 39459 7 2 0CB316717E555D102A2E96D53D32EB0AB0AC73F10D3E66E2D225398C6A30B816 09E4B8ADE69687E7BD9100002E0001000151800093002B08010001518052F4220052EAD9708377007F7A6A99BBF8D9908132B1263AFDBDF5201D82C719742B9D81FE4762614107BD1A2C99C92355C32B46C9B41975F58125CA8FBE0E5D1A7386223A8C765F03AC223BB461F9ED7C86AD59CE3C809BBD197AF0A64E6A336C2A8303141184AB7925DBCAEE104A6A161D4E27E9ADB9D59A96206C402B1777FA4073C1F8EEC3547395FC \228\184\173\230\150\135\231\189\145. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . f3pqmbv42ZCBMrEmOv299SAdgscZdCudgf5HYmFBB70aLJnJI1XDK0bJtBl19YElyo++Dl0ac4YiOox2XwOsIju0YfntfIatWc48gJu9GXrwpk5qM2wqgwMUEYSreSXbyu4QSmoWHU4n6a251ZqWIGxAKxd3+kBzwfjuw1Rzlfw= ;{id = 33655} 09E4B8ADE69687E7BD9100002E0001000151800093002F08010001518052F4220052EAD970837700541AA4357A976D22466449B754B6C0ED9DD19D3A317201BDF7CF77A02607ED152226B57110E7477485282825AA4863250AB1C511171405E7091C952AD33BB4804D52771CFBD46D964E02BE4E3E647049F6256F8E6A534FFAB50968D84EB22397DBE467DD98722FBA5A0BF95D1AC49C188A26F226E52CAD7986C1828C3DE4A3F4 \228\184\173\230\150\135\231\189\145. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VBqkNXqXbSJGZEm3VLbA7Z3RnToxcgG99893oCYH7RUiJrVxEOdHdIUoKCWqSGMlCrHFERcUBecJHJUq0zu0gE1Sdxz71G2WTgK+Tj5kcEn2JW+OalNP+rUJaNhOsiOX2+Rn3ZhyL7paC/ldGsScGIom8iblLK15hsGCjD3ko/Q= ;{id = 33655} 09E4B8ADE69687E7BD9100002F000100015180001006E4B8ADE4BFA1000006200000000013 \228\184\173\230\150\135\231\189\145. 86400 IN NSEC \228\184\173\228\191\161. NS DS RRSIG NSEC 026130036E696309E4B8ADE69687E7BD9100000100010002A30000044116BC01 a0.nic.\228\184\173\230\150\135\231\189\145. 172800 IN A 65.22.188.1 026130036E696309E4B8ADE69687E7BD9100001C00010002A30000102A01884000B600000000000000000001 a0.nic.\228\184\173\230\150\135\231\189\145. 172800 IN AAAA 2a01:8840:b6::1 026132036E696309E4B8ADE69687E7BD9100000100010002A30000044116BF01 a2.nic.\228\184\173\230\150\135\231\189\145. 172800 IN A 65.22.191.1 026132036E696309E4B8ADE69687E7BD9100001C00010002A30000102A01884000B900000000000000000001 a2.nic.\228\184\173\230\150\135\231\189\145. 172800 IN AAAA 2a01:8840:b9::1 026230036E696309E4B8ADE69687E7BD9100000100010002A30000044116BD01 b0.nic.\228\184\173\230\150\135\231\189\145. 172800 IN A 65.22.189.1 026230036E696309E4B8ADE69687E7BD9100001C00010002A30000102A01884000B700000000000000000001 b0.nic.\228\184\173\230\150\135\231\189\145. 172800 IN AAAA 2a01:8840:b7::1 026330036E696309E4B8ADE69687E7BD9100000100010002A30000044116BE01 c0.nic.\228\184\173\230\150\135\231\189\145. 172800 IN A 65.22.190.1 026330036E696309E4B8ADE69687E7BD9100001C00010002A30000102A01884000B800000000000000000001 c0.nic.\228\184\173\230\150\135\231\189\145. 172800 IN AAAA 2a01:8840:b8::1 06E4B8ADE4BFA100000200010002A30000110161097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS a.zdnscloud.com. 06E4B8ADE4BFA100000200010002A30000110162097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS b.zdnscloud.com. 06E4B8ADE4BFA100000200010002A30000110163097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS c.zdnscloud.com. 06E4B8ADE4BFA100000200010002A30000110164097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS d.zdnscloud.com. 06E4B8ADE4BFA100000200010002A30000110165097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS e.zdnscloud.com. 06E4B8ADE4BFA100000200010002A30000110166097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS f.zdnscloud.com. 06E4B8ADE4BFA100000200010002A30000110167097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS g.zdnscloud.com. 06E4B8ADE4BFA100000200010002A30000110169097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS i.zdnscloud.com. 06E4B8ADE4BFA100000200010002A3000011016A097A646E73636C6F756403636F6D00 \228\184\173\228\191\161. 172800 IN NS j.zdnscloud.com. 06E4B8ADE4BFA100002B0001000151800024C36B0802BABDE7E86DF1408E3AFB68043296A68DDC12ABBA6BFA341C7D06C764E042BEE6 \228\184\173\228\191\161. 86400 IN DS 50027 8 2 BABDE7E86DF1408E3AFB68043296A68DDC12ABBA6BFA341C7D06C764E042BEE6 06E4B8ADE4BFA100002E0001000151800093002B08010001518052F4220052EAD97083770049F90F82264D2BA847FB6B768E7B44D1C780A5F18D649F29A3B3BDE31F075833D909C4BBDEBFF5DF25450A1CF7C558BBBD9EA9C1D2255310AF23FB7123FA8FBBF61DA611B7864E5746312801CA3EE90CC481053EB585077156F9A2F8E6AC5E318F35A218D3770746D6D26EAAA3997A40C28811C56C9C48E5B6B135C58B507047 \228\184\173\228\191\161. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . SfkPgiZNK6hH+2t2jntE0ceApfGNZJ8po7O94x8HWDPZCcS73r/13yVFChz3xVi7vZ6pwdIlUxCvI/txI/qPu/YdphG3hk5XRjEoAco+6QzEgQU+tYUHcVb5ovjmrF4xjzWiGNN3B0bW0m6qo5l6QMKIEcVsnEjltrE1xYtQcEc= ;{id = 33655} 06E4B8ADE4BFA100002E0001000151800093002F08010001518052F4220052EAD970837700873192C82EF4C748719A5E30B1B4E5F50576D0414617D94E9668710B93F3D7B90C8568E2B66157A3FE457191FE3E4866914894101B4C407AF3EF8554B081C1D15C7D0CA1C05011004307037F9E32CB85773F5D4A28B52C413660C1191E3965EED931F59727261B5956F9DA95BABE72382C3B0603D875CCDCDCB8A182E4095B0B \228\184\173\228\191\161. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hzGSyC70x0hxml4wsbTl9QV20EFGF9lOlmhxC5Pz17kMhWjitmFXo/5FcZH+PkhmkUiUEBtMQHrz74VUsIHB0Vx9DKHAUBEAQwcDf54yy4V3P11KKLUsQTZgwRkeOWXu2TH1lycmG1lW+dqVur5yOCw7BgPYdczc3LihguQJWws= ;{id = 33655} 06E4B8ADE4BFA100002F000100015180001006E4B8ADE59BBD000006200000000013 \228\184\173\228\191\161. 86400 IN NSEC \228\184\173\229\155\189. NS DS RRSIG NSEC 06E4B8ADE59BBD00000200010002A300000A016803646E7302636E00 \228\184\173\229\155\189. 172800 IN NS h.dns.cn. 06E4B8ADE59BBD00000200010002A300000A016903646E7302636E00 \228\184\173\229\155\189. 172800 IN NS i.dns.cn. 06E4B8ADE59BBD00000200010002A300000A016A03646E7302636E00 \228\184\173\229\155\189. 172800 IN NS j.dns.cn. 06E4B8ADE59BBD00000200010002A300000A016B03646E7302636E00 \228\184\173\229\155\189. 172800 IN NS k.dns.cn. 06E4B8ADE59BBD00000200010002A300000A016C03646E7302636E00 \228\184\173\229\155\189. 172800 IN NS l.dns.cn. 06E4B8ADE59BBD00002B0001000151800024802C0802F190213A4E48C2832B144487130AAB1B782F9B7AF978056C1BA4FB46302A1B4A \228\184\173\229\155\189. 86400 IN DS 32812 8 2 F190213A4E48C2832B144487130AAB1B782F9B7AF978056C1BA4FB46302A1B4A 06E4B8ADE59BBD00002E0001000151800093002B08010001518052F4220052EAD97083770089DFC4B64DE9F3629A72CCBE5225632B21FA4BE827E979D8FB2625D5268FF33C8C596266758810A680FAADD723E207C534BC5BDC831282F6D764A7F749171BEB180D5CF9BB55EA06C22E1391F0411E72394E0E4C8F512A38D8DA0447D42D8DB51DB1D58FA68A879C837FB47CB56C5A39863ACB89A2CBB948B797E28CED5662DC \228\184\173\229\155\189. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . id/Etk3p82Kacsy+UiVjKyH6S+gn6XnY+yYl1SaP8zyMWWJmdYgQpoD6rdcj4gfFNLxb3IMSgvbXZKf3SRcb6xgNXPm7VeoGwi4TkfBBHnI5Tg5Mj1EqONjaBEfULY21HbHVj6aKh5yDf7R8tWxaOYY6y4miy7lIt5fijO1WYtw= ;{id = 33655} 06E4B8ADE59BBD00002E0001000151800093002F08010001518052F4220052EAD9708377001F5B2BA0BC122527BB83F75B9D23A50BFF3924200BCB4C73121C44BA0A5C09B0FF36A0CBF22C292064854E93AA72C0222A9BB7A2F249BF31C9CAC8A1FADA231C5DFCBC038DFC17B4727EA24C315E912DAE2DC6B55DC01F0ACD0C901E266C30861C36BFD9D68E21BF16A66B9CB11730920D1B0527596733065CEA375CF19C166F \228\184\173\229\155\189. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . H1sroLwSJSe7g/dbnSOlC/85JCALy0xzEhxEugpcCbD/NqDL8iwpIGSFTpOqcsAiKpu3ovJJvzHJysih+tojHF38vAON/Be0cn6iTDFekS2uLca1XcAfCs0MkB4mbDCGHDa/2daOIb8WpmucsRcwkg0bBSdZZzMGXOo3XPGcFm8= ;{id = 33655} 06E4B8ADE59BBD00002F000100015180001006E4B8ADE59C8B000006200000000013 \228\184\173\229\155\189. 86400 IN NSEC \228\184\173\229\156\139. NS DS RRSIG NSEC 06E4B8ADE59C8B00000200010002A300000A016803646E7302636E00 \228\184\173\229\156\139. 172800 IN NS h.dns.cn. 06E4B8ADE59C8B00000200010002A300000A016903646E7302636E00 \228\184\173\229\156\139. 172800 IN NS i.dns.cn. 06E4B8ADE59C8B00000200010002A300000A016A03646E7302636E00 \228\184\173\229\156\139. 172800 IN NS j.dns.cn. 06E4B8ADE59C8B00000200010002A300000A016B03646E7302636E00 \228\184\173\229\156\139. 172800 IN NS k.dns.cn. 06E4B8ADE59C8B00000200010002A300000A016C03646E7302636E00 \228\184\173\229\156\139. 172800 IN NS l.dns.cn. 06E4B8ADE59C8B00002B0001000151800024802C0802BBC7202788555EE77A96BDB7F0B1C91FCA9AFA2982B7AD150F192920103B932E \228\184\173\229\156\139. 86400 IN DS 32812 8 2 BBC7202788555EE77A96BDB7F0B1C91FCA9AFA2982B7AD150F192920103B932E 06E4B8ADE59C8B00002E0001000151800093002B08010001518052F4220052EAD97083770083B75D9E36CA56F532E996AC7881D6A3BB1F22DA29E087C2727B3B53F80F5DFEC7153216FA971F5E4A5AD2987BDDF8096B292A10D106AF831E9F8E49CEF5B3D308BD4681772F5A0A5B99F822D6A82361D1F9F60FAEFEA669362AD18B3B87F4EE3965685F7936D82A04ECF5DA2A3ABEE8D2D367FEE4C19A8B99169DB144BE182D \228\184\173\229\156\139. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . g7ddnjbKVvUy6ZaseIHWo7sfItop4IfCcns7U/gPXf7HFTIW+pcfXkpa0ph73fgJaykqENEGr4Men45JzvWz0wi9RoF3L1oKW5n4ItaoI2HR+fYPrv6maTYq0Ys7h/TuOWVoX3k22CoE7PXaKjq+6NLTZ/7kwZqLmRadsUS+GC0= ;{id = 33655} 06E4B8ADE59C8B00002E0001000151800093002F08010001518052F4220052EAD970837700360E15F16EC06EBE0155E4652618A10C8EB945C3DC3E046E00E15807E76ADEBDC4E86596D9CC37D2C2EDFB0DFBDA09617FD9DE547EE446AF034B0FF2021FE0CA815E9CA0509D6F33F585B2628FF377C2508247A058B4E88B47BCF95FCE972F6FA367CB22759A3733FEBFFC66EB8E3FF76F4AA23948BA66129807063970E91EE7 \228\184\173\229\156\139. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ng4V8W7Abr4BVeRlJhihDI65RcPcPgRuAOFYB+dq3r3E6GWW2cw30sLt+w372glhf9neVH7kRq8DSw/yAh/gyoFenKBQnW8z9YWyYo/zd8JQgkegWLToi0e8+V/Oly9vo2fLInWaNzP+v/xm644/929KojlIumYSmAcGOXDpHuc= ;{id = 33655} 06E4B8ADE59C8B00002F00010001518000190FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D000006200000000013 \228\184\173\229\156\139. 86400 IN NSEC \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. NS DS RRSIG NSEC 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS a0.cctld.afilias-nst.info. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS a1.in.afilias-nst.in. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS a2.in.afilias-nst.info. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS b0.cctld.afilias-nst.org. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS b1.in.afilias-nst.in. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS b2.in.afilias-nst.org. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS c0.cctld.afilias-nst.info. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 172800 IN NS d0.cctld.afilias-nst.org. 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00002F00010001518000160CE0B6BDE0B682E0B69AE0B78F000006200000000003 \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 86400 IN NSEC \224\182\189\224\182\130\224\182\154\224\183\143. NS RRSIG NSEC 0FE0B0ADE0B0BEE0B0B0E0B0A4E0B18D00002E0001000151800093002F08010001518052F4220052EAD970837700A83180DFAEA393F9633790048219DB052579216BB0C7B2AA284B8B626A084BF2D9A1711B21C07AB489519BEDAFA61D4EEAF3E218CCEF172C242BBA81B75B6C53CDB0D53CA65C817768A3F8933B6A5F4DB89AEF7494658FA0473A1DEB9BACD75DA4C364B98EE38DED81DC71205A3D9A30FC49B13D78E6249372D8C3A02A98EF7A \224\176\173\224\176\190\224\176\176\224\176\164\224\177\141. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qDGA366jk/ljN5AEghnbBSV5IWuwx7KqKEuLYmoIS/LZoXEbIcB6tIlRm+2vph1O6vPiGMzvFywkK7qBt1tsU82w1TymXIF3aKP4kztqX024mu90lGWPoEc6HeubrNddpMNkuY7jje2B3HEgWj2aMPxJsT145iSTctjDoCqY73o= ;{id = 33655} 0CE0B6BDE0B682E0B69AE0B78F00000200010002A3000015026C6B0C636F6D6D756E697479646E73036E657400 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS lk.communitydns.net. 0CE0B6BDE0B682E0B69AE0B78F00000200010002A3000018036E69630A6C6B2D616E796361737403706368036E657400 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS nic.lk-anycast.pch.net. 0CE0B6BDE0B682E0B69AE0B78F00000200010002A300000B036E7331026163026C6B00 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS ns1.ac.lk. 0CE0B6BDE0B682E0B69AE0B78F00000200010002A300000B036E7333026163026C6B00 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS ns3.ac.lk. 0CE0B6BDE0B682E0B69AE0B78F00000200010002A300000D046E732D63036E6963026C6B00 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS ns-c.nic.lk. 0CE0B6BDE0B682E0B69AE0B78F00000200010002A300000D046E732D64036E6963026C6B00 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS ns-d.nic.lk. 0CE0B6BDE0B682E0B69AE0B78F00000200010002A300000D046E732D6C036E6963026C6B00 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS ns-l.nic.lk. 0CE0B6BDE0B682E0B69AE0B78F00000200010002A300000D046E732D74036E6963026C6B00 \224\182\189\224\182\130\224\182\154\224\183\143. 172800 IN NS ns-t.nic.lk. 0CE0B6BDE0B682E0B69AE0B78F00002F00010001518000160CE0AAADE0AABEE0AAB0E0AAA4000006200000000003 \224\182\189\224\182\130\224\182\154\224\183\143. 86400 IN NSEC \224\170\173\224\170\190\224\170\176\224\170\164. NS RRSIG NSEC 0CE0B6BDE0B682E0B69AE0B78F00002E0001000151800093002F08010001518052F4220052EAD970837700AEC9459EFA8C2ECDFD11AAA8233CD99EE37E5BB1AB57DBE0A0F9031FE6F0D1DCE4AD08C4CB2DC6722A14D8C264E0D8FAACF77EB946CC1ED3164D8FE425EACFF93C97C09CA224B97F62FCBC81C89ECDAA8CBC162205B88DFFE818A17467D378CC4EE4F3F6B740FDD266580013D8722D7CC6C58C3FD7DE31305D162510C20A24B1 \224\182\189\224\182\130\224\182\154\224\183\143. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rslFnvqMLs39EaqoIzzZnuN+W7GrV9vgoPkDH+bw0dzkrQjEyy3GcioU2MJk4Nj6rPd+uUbMHtMWTY/kJerP+TyXwJyiJLl/Yvy8gciezaqMvBYiBbiN/+gYoXRn03jMTuTz9rdA/dJmWAAT2HItfMbFjD/X3jEwXRYlEMIKJLE= ;{id = 33655} 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS a0.cctld.afilias-nst.info. 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS a1.in.afilias-nst.in. 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS a2.in.afilias-nst.info. 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS b0.cctld.afilias-nst.org. 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS b1.in.afilias-nst.in. 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS b2.in.afilias-nst.org. 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS c0.cctld.afilias-nst.info. 0CE0AAADE0AABEE0AAB0E0AAA400000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 \224\170\173\224\170\190\224\170\176\224\170\164. 172800 IN NS d0.cctld.afilias-nst.org. 0CE0AAADE0AABEE0AAB0E0AAA400002F00010001518000160CE0A4ADE0A4BEE0A4B0E0A4A4000006200000000003 \224\170\173\224\170\190\224\170\176\224\170\164. 86400 IN NSEC \224\164\173\224\164\190\224\164\176\224\164\164. NS RRSIG NSEC 0CE0AAADE0AABEE0AAB0E0AAA400002E0001000151800093002F08010001518052F4220052EAD9708377000663F28265865DBB556BBD72588C02037294C9CC4F86F33F3980C0F86D6AD222FA858229230623398249DB1FE82A4043DC3459C5F1E29A9543CFB726D29B61B7D6B95BE1219AFE88E4D58A1EB70B6E144951EAE017FFE5E3E15B190D4410E1F949FB8AAF4542E999BD3FF407C77D9527A290A56187E4E2D4807D5C032EE329FD \224\170\173\224\170\190\224\170\176\224\170\164. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . BmPygmWGXbtVa71yWIwCA3KUycxPhvM/OYDA+G1q0iL6hYIpIwYjOYJJ2x/oKkBD3DRZxfHimpVDz7cm0ptht9a5W+Ehmv6I5NWKHrcLbhRJUergF//l4+FbGQ1EEOH5SfuKr0VC6Zm9P/QHx32VJ6KQpWGH5OLUgH1cAy7jKf0= ;{id = 33655} 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS a0.cctld.afilias-nst.info. 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS a1.in.afilias-nst.in. 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS a2.in.afilias-nst.info. 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS b0.cctld.afilias-nst.org. 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS b1.in.afilias-nst.in. 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS b2.in.afilias-nst.org. 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS c0.cctld.afilias-nst.info. 0CE0A4ADE0A4BEE0A4B0E0A4A400000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 \224\164\173\224\164\190\224\164\176\224\164\164. 172800 IN NS d0.cctld.afilias-nst.org. 0CE0A4ADE0A4BEE0A4B0E0A4A400002B00010001518000184662070195E310B21C23FC8C6107A186D68C5FAEECA15A9F \224\164\173\224\164\190\224\164\176\224\164\164. 86400 IN DS 18018 7 1 95E310B21C23FC8C6107A186D68C5FAEECA15A9F 0CE0A4ADE0A4BEE0A4B0E0A4A400002B000100015180002446620702582ACB8BCAACC3A0AF31597260B8C8650555AC94DEA17C12110AEA90374559D4 \224\164\173\224\164\190\224\164\176\224\164\164. 86400 IN DS 18018 7 2 582ACB8BCAACC3A0AF31597260B8C8650555AC94DEA17C12110AEA90374559D4 0CE0A4ADE0A4BEE0A4B0E0A4A400002E0001000151800093002B08010001518052F4220052EAD9708377004D1E6AAA5F2716F76701C08C129F69A265BDB81DA21B3EFB06EF995A4082A9C5D7E4B4EE73554C13893CB5DA82D637B818FAA34A623B6DF78F2F4B0E6A3113EB4035F37FAB1B8B28AFD5EE21CAE86758BBA5D94AF0E12977574979FB3F0A3FC09097381409AE8A2A87117CEB6D2C575AF466B2FB8502A5136CE7B1ADB57030C8 \224\164\173\224\164\190\224\164\176\224\164\164. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . TR5qql8nFvdnAcCMEp9pomW9uB2iGz77Bu+ZWkCCqcXX5LTuc1VME4k8tdqC1je4GPqjSmI7bfePL0sOajET60A183+rG4sor9XuIcroZ1i7pdlK8OEpd1dJefs/Cj/AkJc4FAmuiiqHEXzrbSxXWvRmsvuFAqUTbOexrbVwMMg= ;{id = 33655} 0CE0A4ADE0A4BEE0A4B0E0A4A400002E0001000151800093002F08010001518052F4220052EAD9708377006375DB68C005E1B697B6CBD47763988A1DEC32F6C87CD046C523518BB4D2D5C70A3E5D36230DB0AF89F730901B1E32DEA1572F2A6BEB3D9D8EC66A66904E6097A8EBD87703C7AD3AB92C1B2A465B7A58158098E3148E368E906C6AC6FCB97ED41D9B11BC2AC9FA3A3097CDE99010746EFE8D7DCD93DFAE42B9C3FF16BA137AFD \224\164\173\224\164\190\224\164\176\224\164\164. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Y3XbaMAF4baXtsvUd2OYih3sMvbIfNBGxSNRi7TS1ccKPl02Iw2wr4n3MJAbHjLeoVcvKmvrPZ2OxmpmkE5gl6jr2HcDx606uSwbKkZbelgVgJjjFI42jpBsasb8uX7UHZsRvCrJ+jowl83pkBB0bv6Nfc2T365CucP/FroTev0= ;{id = 33655} 0CE0A4ADE0A4BEE0A4B0E0A4A400002F000100015180001006E7BD91E7BB9C000006200000000013 \224\164\173\224\164\190\224\164\176\224\164\164. 86400 IN NSEC \231\189\145\231\187\156. NS DS RRSIG NSEC 06E7BD91E7BB9C00000200010002A300000C0161056E67746C6402636E00 \231\189\145\231\187\156. 172800 IN NS a.ngtld.cn. 06E7BD91E7BB9C00000200010002A300000C0162056E67746C6402636E00 \231\189\145\231\187\156. 172800 IN NS b.ngtld.cn. 06E7BD91E7BB9C00000200010002A300000C0163056E67746C6402636E00 \231\189\145\231\187\156. 172800 IN NS c.ngtld.cn. 06E7BD91E7BB9C00000200010002A300000C0164056E67746C6402636E00 \231\189\145\231\187\156. 172800 IN NS d.ngtld.cn. 06E7BD91E7BB9C00000200010002A300000C0165056E67746C6402636E00 \231\189\145\231\187\156. 172800 IN NS e.ngtld.cn. 06E7BD91E7BB9C00002B0001000151800024B8FF0802426DB7D3FB8E6058BE42D379ECD7742B2EFAB5DD0A7A95494D3518604B715B1E \231\189\145\231\187\156. 86400 IN DS 47359 8 2 426DB7D3FB8E6058BE42D379ECD7742B2EFAB5DD0A7A95494D3518604B715B1E 06E7BD91E7BB9C00002E0001000151800093002B08010001518052F4220052EAD9708377007AFA8B4B642C117CB728E99207F8BF3CADD1E440079521AE5C6C583553F4BA1246F4194A92B48E6536A6ED79C8E1A4CF1ABD8D7A45A516EA9C50E58F6E7B2AA0974DBB5AA314CDA0FD709FCD9CEFC1BE4F9944BFC6C8A1C32A6D01A98516776201FCD14C1BF6A56493A69E5FE41C7BCEF012CC00D14F52F0BF1E924D44A8DF44 \231\189\145\231\187\156. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . evqLS2QsEXy3KOmSB/i/PK3R5EAHlSGuXGxYNVP0uhJG9BlKkrSOZTam7XnI4aTPGr2NekWlFuqcUOWPbnsqoJdNu1qjFM2g/XCfzZzvwb5PmUS/xsihwyptAamFFndiAfzRTBv2pWSTpp5f5Bx7zvASzADRT1Lwvx6STUSo30Q= ;{id = 33655} 06E7BD91E7BB9C00002E0001000151800093002F08010001518052F4220052EAD970837700B95C5B7E7C79EC04700BB7BCFD66C95A1A715BE8245C556E16F279416A374D4BC753394E57211A8080E40A2D0D1C92D09618F12B0CF48B4389C388F3F426FD1D87865B077EF1C55CA61AC0D4D539FD2B52E0790F6E4F50EB019BFD2D531A0B436AC35FC6865391D750B684F02290906C1742A31883A3E87493A9E3E31D52982C \231\189\145\231\187\156. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uVxbfnx57ARwC7e8/WbJWhpxW+gkXFVuFvJ5QWo3TUvHUzlOVyEagIDkCi0NHJLQlhjxKwz0i0OJw4jz9Cb9HYeGWwd+8cVcphrA1NU5/StS4HkPbk9Q6wGb/S1TGgtDasNfxoZTkddQtoTwIpCQbBdCoxiDo+h0k6nj4x1SmCw= ;{id = 33655} 06E7BD91E7BB9C00002F000100015180001006D183D0BAD180000006200000000013 \231\189\145\231\187\156. 86400 IN NSEC \209\131\208\186\209\128. NS DS RRSIG NSEC 06D183D0BAD18000000200010002A300000F036E73690575616E6963036E657400 \209\131\208\186\209\128. 172800 IN NS nsi.uanic.net. 06D183D0BAD18000000200010002A300001504646E73310A752D726567697374727903636F6D00 \209\131\208\186\209\128. 172800 IN NS dns1.u-registry.com. 06D183D0BAD18000000200010002A300001504646E73320A752D7265676973747279036E657400 \209\131\208\186\209\128. 172800 IN NS dns2.u-registry.net. 06D183D0BAD18000000200010002A300001104646E733306646F74756B7203636F6D00 \209\131\208\186\209\128. 172800 IN NS dns3.dotukr.com. 06D183D0BAD18000000200010002A3000012057469657231036E756D036E657402756100 \209\131\208\186\209\128. 172800 IN NS tier1.num.net.ua. 06D183D0BAD18000002F000100015180001006E9A699E6B8AF000006200000000003 \209\131\208\186\209\128. 86400 IN NSEC \233\166\153\230\184\175. NS RRSIG NSEC 06D183D0BAD18000002E0001000151800093002F08010001518052F4220052EAD9708377007E22FBD53A245759CA7BDDFC22CAC3E61216B961C368C3A676C76C68C12CB39B3905EE04D0F85C9CC47BE80870091BFFC7C7D6B70C0113FE696741D110FE466CFF5F85D46EF514EC3219274D14C0FD90B6C6FB50023401C32E40B2105BEF793AE81E51D968DF375B7297E47BEB0FAC2E3F45CA5A6281BB2C01BFDF1AC01FF964 \209\131\208\186\209\128. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fiL71TokV1nKe938IsrD5hIWuWHDaMOmdsdsaMEss5s5Be4E0PhcnMR76AhwCRv/x8fWtwwBE/5pZ0HREP5GbP9fhdRu9RTsMhknTRTA/ZC2xvtQAjQBwy5AshBb73k66B5R2WjfN1tyl+R76w+sLj9FylpigbssAb/fGsAf+WQ= ;{id = 33655} 06E9A699E6B8AF00000200010002A3000010016105686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS a.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010016205686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS b.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017305686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS s.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017405686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS t.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017505686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS u.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017605686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS v.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017705686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS w.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017805686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS x.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017905686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS y.hkirc.net.hk. 06E9A699E6B8AF00000200010002A3000010017A05686B697263036E657402686B00 \233\166\153\230\184\175. 172800 IN NS z.hkirc.net.hk. 06E9A699E6B8AF00002F000100015180001006E58FB0E6B9BE000006200000000003 \233\166\153\230\184\175. 86400 IN NSEC \229\143\176\230\185\190. NS RRSIG NSEC 06E9A699E6B8AF00002E0001000151800093002F08010001518052F4220052EAD9708377004BE14BC6A2706084DFA97FD6DC4CCB351C7810C79516C3E084FA9273120E2E279D0460D307558B88483C199072889FE806B5B7959DA8BEECCD3808BB44BBCC3F07A40AC9418B12BCEA74F47C89B498E9FB9AC2FB30CC429DCE87FEC233C733937580A1952825F858F1639FF7C466124F9ECA6ED87B11D67391723DAB13529E95 \233\166\153\230\184\175. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S+FLxqJwYITfqX/W3EzLNRx4EMeVFsPghPqScxIOLiedBGDTB1WLiEg8GZByiJ/oBrW3lZ2ovuzNOAi7RLvMPwekCslBixK86nT0fIm0mOn7msL7MMxCnc6H/sIzxzOTdYChlSgl+FjxY5/3xGYST57Kbth7EdZzkXI9qxNSnpU= ;{id = 33655} 06E58FB0E6B9BE00000200010002A300000A016403646E7302747700 \229\143\176\230\185\190. 172800 IN NS d.dns.tw. 06E58FB0E6B9BE00000200010002A300000A016503646E7302747700 \229\143\176\230\185\190. 172800 IN NS e.dns.tw. 06E58FB0E6B9BE00000200010002A300000A016603646E7302747700 \229\143\176\230\185\190. 172800 IN NS f.dns.tw. 06E58FB0E6B9BE00000200010002A300000A016703646E7302747700 \229\143\176\230\185\190. 172800 IN NS g.dns.tw. 06E58FB0E6B9BE00000200010002A300000A016803646E7302747700 \229\143\176\230\185\190. 172800 IN NS h.dns.tw. 06E58FB0E6B9BE00000200010002A300001004736563340561706E6963036E657400 \229\143\176\230\185\190. 172800 IN NS sec4.apnic.net. 06E58FB0E6B9BE00002B00010001518000242590080280D599F98E6304BD800DCA9EE0F73EB319414430413A2DFF5C010754D137F1BD \229\143\176\230\185\190. 86400 IN DS 9616 8 2 80D599F98E6304BD800DCA9EE0F73EB319414430413A2DFF5C010754D137F1BD 06E58FB0E6B9BE00002E0001000151800093002B08010001518052F4220052EAD9708377002B4D466233013A4FD9457A7CBE8F3BB7ADEF0F362139D2BF6C5C98CCAD73708104D5983DA4629A05A78C5290C6810D5167C78D75F2386B3100E9A4077819DEAF1100F9D3CD3C41DA5A76FD4BDE5DF24CCABF34BDEC7252181502F1BD18496A83FEC5A9EFE8EA7B5B9112551910ACC1B75793D1B4A9B110CCBE0107ADEDA8F8C2 \229\143\176\230\185\190. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . K01GYjMBOk/ZRXp8vo87t63vDzYhOdK/bFyYzK1zcIEE1Zg9pGKaBaeMUpDGgQ1RZ8eNdfI4azEA6aQHeBnerxEA+dPNPEHaWnb9S95d8kzKvzS97HJSGBUC8b0YSWqD/sWp7+jqe1uRElUZEKzBt1eT0bSpsRDMvgEHre2o+MI= ;{id = 33655} 06E58FB0E6B9BE00002E0001000151800093002F08010001518052F4220052EAD970837700600877E6598686CF64D34333FB1AEC3C575410AA10A42840F24C88E3293F5A8FD1F7388B4A256304C100021CCA9B15B6795B0D12BEF0606F6775EC0C095720AF11592E06272FD53F7E77878645530EDECCA07E5E67DC95061ACF1F46B994295BA863D3174107B8DB6D9BCC8B731176875C660B59DB5F2C5CB95F5C3E4758F153 \229\143\176\230\185\190. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . YAh35lmGhs9k00Mz+xrsPFdUEKoQpChA8kyI4yk/Wo/R9ziLSiVjBMEAAhzKmxW2eVsNEr7wYG9ndewMCVcgrxFZLgYnL9U/fneHhkVTDt7MoH5eZ9yVBhrPH0a5lClbqGPTF0EHuNttm8yLcxF2h1xmC1nbXyxcuV9cPkdY8VM= ;{id = 33655} 06E58FB0E6B9BE00002F000100015180001006E58FB0E781A3000006200000000013 \229\143\176\230\185\190. 86400 IN NSEC \229\143\176\231\129\163. NS DS RRSIG NSEC 06E58FB0E781A300000200010002A300000A016403646E7302747700 \229\143\176\231\129\163. 172800 IN NS d.dns.tw. 06E58FB0E781A300000200010002A300000A016503646E7302747700 \229\143\176\231\129\163. 172800 IN NS e.dns.tw. 06E58FB0E781A300000200010002A300000A016603646E7302747700 \229\143\176\231\129\163. 172800 IN NS f.dns.tw. 06E58FB0E781A300000200010002A300000A016703646E7302747700 \229\143\176\231\129\163. 172800 IN NS g.dns.tw. 06E58FB0E781A300000200010002A300000A016803646E7302747700 \229\143\176\231\129\163. 172800 IN NS h.dns.tw. 06E58FB0E781A300000200010002A300001004736563340561706E6963036E657400 \229\143\176\231\129\163. 172800 IN NS sec4.apnic.net. 06E58FB0E781A300002B0001000151800024E19D080299EE3CDDCD2A85DB01D3A1E13D019821D30E3D4F6B49E4260B402FE7D8A3E85A \229\143\176\231\129\163. 86400 IN DS 57757 8 2 99EE3CDDCD2A85DB01D3A1E13D019821D30E3D4F6B49E4260B402FE7D8A3E85A 06E58FB0E781A300002E0001000151800093002B08010001518052F4220052EAD970837700A573E17D5BB78330C2C78CD7681254C9BA6E8C27CAF713B6F6CFE77F5047306567D9F232155CBC8A9E146FBBA3F76059A39CA832AE78EBCD10B2AEC0838FC8B3F50DC510343B3FCFE0BC38C1C21B55CD0470B16C644B401CB8D30449A7D94BC0FF1FA7F53544D66A9BBC8B75C5F4BF9068E71A093ED8C326A96E04A9DDBE0D38 \229\143\176\231\129\163. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . pXPhfVu3gzDCx4zXaBJUybpujCfK9xO29s/nf1BHMGVn2fIyFVy8ip4Ub7uj92BZo5yoMq54680Qsq7Ag4/Is/UNxRA0Oz/P4Lw4wcIbVc0EcLFsZEtAHLjTBEmn2UvA/x+n9TVE1mqbvIt1xfS/kGjnGgk+2MMmqW4Eqd2+DTg= ;{id = 33655} 06E58FB0E781A300002E0001000151800093002F08010001518052F4220052EAD970837700B26311891716B40691F4D4C7E04EC66D2DB96AE8FACF538F4E7D9DA48C74EA283B0E6D2E5106CCCF6B4F83467A096B399E69027FE57DEBC6D0DD64A36AB7142CB66E3D0F5AB3155052B8987258FADEF1570F2ADF87D98B17343EF00977B209ECF8FE570F1449DF07A110E4BCACBFC4D96FC91BCC9D411FC6C0DCB4D38635E3F6 \229\143\176\231\129\163. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . smMRiRcWtAaR9NTH4E7GbS25auj6z1OPTn2dpIx06ig7Dm0uUQbMz2tPg0Z6CWs5nmkCf+V968bQ3WSjarcULLZuPQ9asxVQUriYclj63vFXDyrfh9mLFzQ+8Al3sgns+P5XDxRJ3wehEOS8rL/E2W/JG8ydQR/GwNy004Y14/Y= ;{id = 33655} 06E58FB0E781A300002F000100015180001006D0BCD0BED0BD000006200000000013 \229\143\176\231\129\163. 86400 IN NSEC \208\188\208\190\208\189. NS DS RRSIG NSEC 06D0BCD0BED0BD00000200010002A300000C036E73310369646E026D6E00 \208\188\208\190\208\189. 172800 IN NS ns1.idn.mn. 06D0BCD0BED0BD00000200010002A300000C036E73320369646E026D6E00 \208\188\208\190\208\189. 172800 IN NS ns2.idn.mn. 06D0BCD0BED0BD00000200010002A300000C036E73330369646E026D6E00 \208\188\208\190\208\189. 172800 IN NS ns3.idn.mn. 06D0BCD0BED0BD00002B0001000151800018737E050107D52F8F36FECED48212940E021C28E40274CFC6 \208\188\208\190\208\189. 86400 IN DS 29566 5 1 07D52F8F36FECED48212940E021C28E40274CFC6 06D0BCD0BED0BD00002B0001000151800024737E05026029C4759FF53E279A93E13C146DC52BD7017291FDFE799C220C17B5EEE95ED6 \208\188\208\190\208\189. 86400 IN DS 29566 5 2 6029C4759FF53E279A93E13C146DC52BD7017291FDFE799C220C17B5EEE95ED6 06D0BCD0BED0BD00002E0001000151800093002B08010001518052F4220052EAD9708377000A32563D0031FAEAFB27AA4873EC55F61EB991C1108DF574AD0DD9525A57BD2CF0D3B27404FCFBCBDB6EDECED9E993D926B8CB70DEAB1E76750F2671BBEA68D561F132BD5C316003D1AA2C63D30D58F8FDAC4418C506C4FFE3130CED925408DEEAFF4B76F2D3524ECC30C2A58BBD0BE775E17A6DBA52CA82B8D039A4AEA24442 \208\188\208\190\208\189. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CjJWPQAx+ur7J6pIc+xV9h65kcEQjfV0rQ3ZUlpXvSzw07J0BPz7y9tu3s7Z6ZPZJrjLcN6rHnZ1DyZxu+po1WHxMr1cMWAD0aosY9MNWPj9rEQYxQbE/+MTDO2SVAje6v9LdvLTUk7MMMKli70L53Xhem26UsqCuNA5pK6iREI= ;{id = 33655} 06D0BCD0BED0BD00002E0001000151800093002F08010001518052F4220052EAD97083770045D4B6791C3D02E9764C61C20BC3543D6A5E454745BDFCA300E16DDC90886C80EFAE9122FF16C81EAE599D758F82B1C858E4A62EF0171E2EA0CE6B36F838A977A3E9796FD09D1B17D5AF1E6ACF279BA9DF9BDF433E893FD245163CD9583E5300755B1FFF8C941E9411C8A816DE1309FDAFA72C3337A631144776CF6D8BB89E8A \208\188\208\190\208\189. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RdS2eRw9Aul2TGHCC8NUPWpeRUdFvfyjAOFt3JCIbIDvrpEi/xbIHq5ZnXWPgrHIWOSmLvAXHi6gzms2+Dipd6PpeW/QnRsX1a8eas8nm6nfm99DPok/0kUWPNlYPlMAdVsf/4yUHpQRyKgW3hMJ/a+nLDM3pjEUR3bPbYu4noo= ;{id = 33655} 06D0BCD0BED0BD00002F00010001518000180ED8A7D984D8ACD8B2D8A7D8A6D8B1000006200000000013 \208\188\208\190\208\189. 86400 IN NSEC \216\167\217\132\216\172\216\178\216\167\216\166\216\177. NS DS RRSIG NSEC 0ED8A7D984D8ACD8B2D8A7D8A6D8B100000200010002A300000D0469646E31036E696302647A00 \216\167\217\132\216\172\216\178\216\167\216\166\216\177. 172800 IN NS idn1.nic.dz. 0ED8A7D984D8ACD8B2D8A7D8A6D8B100000200010002A300000D0469646E32036E696302647A00 \216\167\217\132\216\172\216\178\216\167\216\166\216\177. 172800 IN NS idn2.nic.dz. 0ED8A7D984D8ACD8B2D8A7D8A6D8B100002F000100015180001208D8B9D985D8A7D986000006200000000003 \216\167\217\132\216\172\216\178\216\167\216\166\216\177. 86400 IN NSEC \216\185\217\133\216\167\217\134. NS RRSIG NSEC 0ED8A7D984D8ACD8B2D8A7D8A6D8B100002E0001000151800093002F08010001518052F4220052EAD970837700B1C93B8A1C75B5019558F6164AC92771FC8B644744A8175A32768CE0436BD425B6BB464FD85D13B407E3ADCF07BF0C8171BD16675CEECACF7FB7EEA970625F7BE2D7CDD6517395B683A0FDA0AD583866B5A1A1EE218FD78A6B94944B172B6EBC8F9ECD43DE8F8391C09FADCF6CCA9FB1EF8C12587C14D28E46CBA037E0DA0AE2 \216\167\217\132\216\172\216\178\216\167\216\166\216\177. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sck7ihx1tQGVWPYWSskncfyLZEdEqBdaMnaM4ENr1CW2u0ZP2F0TtAfjrc8HvwyBcb0WZ1zuys9/t+6pcGJfe+LXzdZRc5W2g6D9oK1YOGa1oaHuIY/XimuUlEsXK268j57NQ96Pg5HAn63PbMqfse+MElh8FNKORsugN+DaCuI= ;{id = 33655} 08D8B9D985D8A7D98600000200010002A3000011036E7331087265676973747279026F6D00 \216\185\217\133\216\167\217\134. 172800 IN NS ns1.registry.om. 08D8B9D985D8A7D98600000200010002A3000011036E7332087265676973747279026F6D00 \216\185\217\133\216\167\217\134. 172800 IN NS ns2.registry.om. 08D8B9D985D8A7D98600000200010002A300001A056363746C64046265746106617269646E73036E657402617500 \216\185\217\133\216\167\217\134. 172800 IN NS cctld.beta.aridns.net.au. 08D8B9D985D8A7D98600000200010002A300001B056363746C6405616C70686106617269646E73036E657402617500 \216\185\217\133\216\167\217\134. 172800 IN NS cctld.alpha.aridns.net.au. 08D8B9D985D8A7D98600000200010002A300001B056363746C640564656C746106617269646E73036E657402617500 \216\185\217\133\216\167\217\134. 172800 IN NS cctld.delta.aridns.net.au. 08D8B9D985D8A7D98600000200010002A300001B056363746C640567616D6D6106617269646E73036E657402617500 \216\185\217\133\216\167\217\134. 172800 IN NS cctld.gamma.aridns.net.au. 08D8B9D985D8A7D98600002F00010001518000140AD8A7DB8CD8B1D8A7D986000006200000000003 \216\185\217\133\216\167\217\134. 86400 IN NSEC \216\167\219\140\216\177\216\167\217\134. NS RRSIG NSEC 08D8B9D985D8A7D98600002E0001000151800093002F08010001518052F4220052EAD97083770092F8D070580717E7071544E43D066A680E899D84B1DE3F5883F90C4E5EE8F1C041CE2513B9958327C0C8AB9D541C38C84CEAFF5646750E91DF98FCC76AAADAB6E2FEFF36E5244B0B30C1F23808257D860F77FF66FC5E443E7A13BBA319ED7F033897AF6BA37921147876D42BD4808699ECE07B5FBE58A06FA8B51EE1F1EED480 \216\185\217\133\216\167\217\134. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kvjQcFgHF+cHFUTkPQZqaA6JnYSx3j9Yg/kMTl7o8cBBziUTuZWDJ8DIq51UHDjITOr/VkZ1DpHfmPzHaqratuL+/zblJEsLMMHyOAglfYYPd/9m/F5EPnoTu6MZ7X8DOJeva6N5IRR4dtQr1ICGmezge1++WKBvqLUe4fHu1IA= ;{id = 33655} 0AD8A7DB8CD8B1D8A7D98600000200010002A300000A0161036E696302697200 \216\167\219\140\216\177\216\167\217\134. 172800 IN NS a.nic.ir. 0AD8A7DB8CD8B1D8A7D98600000200010002A300000D026E730569726E696302697200 \216\167\219\140\216\177\216\167\217\134. 172800 IN NS ns.irnic.ir. 0AD8A7DB8CD8B1D8A7D98600002F00010001518000160CD8A7D985D8A7D8B1D8A7D8AA000006200000000003 \216\167\219\140\216\177\216\167\217\134. 86400 IN NSEC \216\167\217\133\216\167\216\177\216\167\216\170. NS RRSIG NSEC 0AD8A7DB8CD8B1D8A7D98600002E0001000151800093002F08010001518052F4220052EAD970837700A4E63C19ED1A2A4F7AA9690DD96CEAB2D9846E2B1BA2B5028536AC654641E7478F24E20B02B6FD41E8FA39C9E4FC502B888F77B745A8E2F6ECD7428785FBC0AC7C472EC4A44B30F8BAEC905AFD2D54AFB0B2B14566E43E53EEDF7FCD038E0530E57E5DC854D4703E1FA330664CA5A126FEB50913C89FF55183EF6A1DF3A22EC6 \216\167\219\140\216\177\216\167\217\134. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . pOY8Ge0aKk96qWkN2WzqstmEbisborUChTasZUZB50ePJOILArb9Qej6Ocnk/FAriI93t0Wo4vbs10KHhfvArHxHLsSkSzD4uuyQWv0tVK+wsrFFZuQ+U+7ff80DjgUw5X5dyFTUcD4fozBmTKWhJv61CRPIn/VRg+9qHfOiLsY= ;{id = 33655} 0CD8A7D985D8A7D8B1D8A7D8AA00000200010002A300000E036E7331056165646E7302616500 \216\167\217\133\216\167\216\177\216\167\216\170. 172800 IN NS ns1.aedns.ae. 0CD8A7D985D8A7D8B1D8A7D8AA00000200010002A300000E036E7332056165646E7302616500 \216\167\217\133\216\167\216\177\216\167\216\170. 172800 IN NS ns2.aedns.ae. 0CD8A7D985D8A7D8B1D8A7D8AA00000200010002A300001006736E732D706203697363036F726700 \216\167\217\133\216\167\216\177\216\167\216\170. 172800 IN NS sns-pb.isc.org. 0CD8A7D985D8A7D8B1D8A7D8AA00000200010002A3000014096E736578742D706368056165646E7302616500 \216\167\217\133\216\167\216\177\216\167\216\170. 172800 IN NS nsext-pch.aedns.ae. 0CD8A7D985D8A7D8B1D8A7D8AA00002F00010001518000160CD8A7D984D8A7D8B1D8AFD986000006200000000003 \216\167\217\133\216\167\216\177\216\167\216\170. 86400 IN NSEC \216\167\217\132\216\167\216\177\216\175\217\134. NS RRSIG NSEC 0CD8A7D985D8A7D8B1D8A7D8AA00002E0001000151800093002F08010001518052F4220052EAD970837700B07A53D290DCA0C832C39E4D12966D7D4B7069C7D1ACCED6C70E2CCF852CCA7BB106788BBA1256449C5EEC8A5A955874426ADC3F8BFFF774BC74AE28D48CF79751266D549E01526D4D1A7F2A9F54A06CE9A846EC00847344EC0234EE8DF91D67085803111D0F4D253D03D52971E82AC9BD1CAC0980D80B4854E21A98EC29BE1D \216\167\217\133\216\167\216\177\216\167\216\170. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sHpT0pDcoMgyw55NEpZtfUtwacfRrM7Wxw4sz4UsynuxBniLuhJWRJxe7IpalVh0QmrcP4v/93S8dK4o1Iz3l1EmbVSeAVJtTRp/Kp9UoGzpqEbsAIRzROwCNO6N+R1nCFgDER0PTSU9A9Upcegqyb0crAmA2AtIVOIamOwpvh0= ;{id = 33655} 0CD8A7D984D8A7D8B1D8AFD98600000200010002A300001B026A6F056363746C640761757468646E730472697065036E657400 \216\167\217\132\216\167\216\177\216\175\217\134. 172800 IN NS jo.cctld.authdns.ripe.net. 0CD8A7D984D8A7D8B1D8AFD98600000200010002A300000D037269700370736703636F6D00 \216\167\217\132\216\167\216\177\216\175\217\134. 172800 IN NS rip.psg.com. 0CD8A7D984D8A7D8B1D8AFD98600000200010002A300001104616D7261036E696303676F76026A6F00 \216\167\217\132\216\167\216\177\216\175\217\134. 172800 IN NS amra.nic.gov.jo. 0CD8A7D984D8A7D8B1D8AFD98600000200010002A3000012057065747261036E696303676F76026A6F00 \216\167\217\132\216\167\216\177\216\175\217\134. 172800 IN NS petra.nic.gov.jo. 0CD8A7D984D8A7D8B1D8AFD98600000200010002A3000016096A6F7264616E317374036E696303676F76026A6F00 \216\167\217\132\216\167\216\177\216\175\217\134. 172800 IN NS jordan1st.nic.gov.jo. 0CD8A7D984D8A7D8B1D8AFD98600002F00010001518000140AD8A8DABED8A7D8B1D8AA000006200000000003 \216\167\217\132\216\167\216\177\216\175\217\134. 86400 IN NSEC \216\168\218\190\216\167\216\177\216\170. NS RRSIG NSEC 0CD8A7D984D8A7D8B1D8AFD98600002E0001000151800093002F08010001518052F4220052EAD9708377008DA41885919DE297632CCBA1B0449591F5740FE340CF727F4874C3ACB5910A878C32A5BF5FDDA47C5AA9E453B1A762A291941E65FBFD2F6CCD19EC5C6937BD13A3AB7AF8489B7E092146A9EE589A10FEAD10691962B96D7F767A40262945EF462413E9DB64806BCAFD95E89B3453BFA474AFF10B73F5AED86425E3B7F1D9184C \216\167\217\132\216\167\216\177\216\175\217\134. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jaQYhZGd4pdjLMuhsESVkfV0D+NAz3J/SHTDrLWRCoeMMqW/X92kfFqp5FOxp2KikZQeZfv9L2zNGexcaTe9E6OrevhIm34JIUap7liaEP6tEGkZYrltf3Z6QCYpRe9GJBPp22SAa8r9leibNFO/pHSv8Qtz9a7YZCXjt/HZGEw= ;{id = 33655} 0AD8A8DABED8A7D8B1D8AA00000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS a0.cctld.afilias-nst.info. 0AD8A8DABED8A7D8B1D8AA00000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS a1.in.afilias-nst.in. 0AD8A8DABED8A7D8B1D8AA00000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS a2.in.afilias-nst.info. 0AD8A8DABED8A7D8B1D8AA00000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS b0.cctld.afilias-nst.org. 0AD8A8DABED8A7D8B1D8AA00000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS b1.in.afilias-nst.in. 0AD8A8DABED8A7D8B1D8AA00000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS b2.in.afilias-nst.org. 0AD8A8DABED8A7D8B1D8AA00000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS c0.cctld.afilias-nst.info. 0AD8A8DABED8A7D8B1D8AA00000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 \216\168\218\190\216\167\216\177\216\170. 172800 IN NS d0.cctld.afilias-nst.org. 0AD8A8DABED8A7D8B1D8AA00002F00010001518000160CD8A7D984D985D8BAD8B1D8A8000006200000000003 \216\168\218\190\216\167\216\177\216\170. 86400 IN NSEC \216\167\217\132\217\133\216\186\216\177\216\168. NS RRSIG NSEC 0AD8A8DABED8A7D8B1D8AA00002E0001000151800093002F08010001518052F4220052EAD970837700707C60D70A479C80BC16D1E8B7929C1AFD7D5BFF9FABD3F1380FB53D85E9F321BA53432A7BFC3E156D036E15D2D11C4410B71A5ABF1F568D4559E4703B46BC669BEED06E7C24ABBA8F9AABDF0C772C60646F5CC9349748FDE797AB0476E618ACCB78BED2D85F6973480FA4F98FBC49731A98CA639748A49F9A7462BD74FD4664 \216\168\218\190\216\167\216\177\216\170. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cHxg1wpHnIC8FtHot5KcGv19W/+fq9PxOA+1PYXp8yG6U0Mqe/w+FW0DbhXS0RxEELcaWr8fVo1FWeRwO0a8Zpvu0G58JKu6j5qr3wx3LGBkb1zJNJdI/eeXqwR25hisy3i+0thfaXNID6T5j7xJcxqYymOXSKSfmnRivXT9RmQ= ;{id = 33655} 0CD8A7D984D985D8BAD8B1D8A800000200010002A300000C036E7332036E696302667200 \216\167\217\132\217\133\216\186\216\177\216\168. 172800 IN NS ns2.nic.fr. 0CD8A7D984D985D8BAD8B1D8A800000200010002A300001004646E7332066D656E617261026D6100 \216\167\217\132\217\133\216\186\216\177\216\168. 172800 IN NS dns2.menara.ma. 0CD8A7D984D985D8BAD8B1D8A800000200010002A300001004646E7333066D656E617261026D6100 \216\167\217\132\217\133\216\186\216\177\216\168. 172800 IN NS dns3.menara.ma. 0CD8A7D984D985D8BAD8B1D8A800000200010002A30000100668617269737304616E7274026D6100 \216\167\217\132\217\133\216\186\216\177\216\168. 172800 IN NS hariss.anrt.ma. 0CD8A7D984D985D8BAD8B1D8A800002F000100015180001A10D8A7D984D8B3D8B9D988D8AFD98AD8A9000006200000000003 \216\167\217\132\217\133\216\186\216\177\216\168. 86400 IN NSEC \216\167\217\132\216\179\216\185\217\136\216\175\217\138\216\169. NS RRSIG NSEC 0CD8A7D984D985D8BAD8B1D8A800002E0001000151800093002F08010001518052F4220052EAD9708377009F0CA28A836E9A4BCD07B3AD501F0F95084CE4032D950ED7365E86681B244A53328976F2197C4DAAA868BA42D7BFB6A80BF067A8D5F8A5D66FB9CB59F8EC35C37911D05548F8FC6BF79FC9C5FC84DC70DF8BDBFE00118B8C0DC2D13CEE5DED11A20BC2409A4E8A1BF4A06B35D41E8E8DBD239BB8FE52BAF26841E8721805BE99 \216\167\217\132\217\133\216\186\216\177\216\168. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nwyiioNumkvNB7OtUB8PlQhM5AMtlQ7XNl6GaBskSlMyiXbyGXxNqqhoukLXv7aoC/BnqNX4pdZvuctZ+Ow1w3kR0FVI+Pxr95/JxfyE3HDfi9v+ABGLjA3C0TzuXe0RogvCQJpOihv0oGs11B6Ojb0jm7j+UrryaEHochgFvpk= ;{id = 33655} 10D8A7D984D8B3D8B9D988D8AFD98AD8A900000200010002A3000010036E733103697375036E657402736100 \216\167\217\132\216\179\216\185\217\136\216\175\217\138\216\169. 172800 IN NS ns1.isu.net.sa. 10D8A7D984D8B3D8B9D988D8AFD98AD8A900000200010002A3000010036E7331036E6963036E657402736100 \216\167\217\132\216\179\216\185\217\136\216\175\217\138\216\169. 172800 IN NS ns1.nic.net.sa. 10D8A7D984D8B3D8B9D988D8AFD98AD8A900000200010002A3000010036E7332036E6963036E657402736100 \216\167\217\132\216\179\216\185\217\136\216\175\217\138\216\169. 172800 IN NS ns2.nic.net.sa. 10D8A7D984D8B3D8B9D988D8AFD98AD8A900000200010002A30000170573612D6E7307616E796361737403706368036E657400 \216\167\217\132\216\179\216\185\217\136\216\175\217\138\216\169. 172800 IN NS sa-ns.anycast.pch.net. 10D8A7D984D8B3D8B9D988D8AFD98AD8A900002F00010001518000160CD985D984D98AD8B3D98AD8A7000006200000000003 \216\167\217\132\216\179\216\185\217\136\216\175\217\138\216\169. 86400 IN NSEC \217\133\217\132\217\138\216\179\217\138\216\167. NS RRSIG NSEC 10D8A7D984D8B3D8B9D988D8AFD98AD8A900002E0001000151800093002F08010001518052F4220052EAD97083770031949EABA3EEC262FE01E763B5A97C759EAE214B7BA3EC25A9FDABA2FB35B5D33E50261062B409ECD543E26FE4D82E72F3AF4BB4B85EA82790B5A4B435CA0F0C287B3C280E2C7D9AEF79DE2BBD41EB1C969FFC236F526ED08B0AEEE38E4407AF479B8F1C175053A27F996384EF657A1ABE75C9BCFF2432A0B2A650E96651EA7C \216\167\217\132\216\179\216\185\217\136\216\175\217\138\216\169. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MZSeq6PuwmL+Aedjtal8dZ6uIUt7o+wlqf2rovs1tdM+UCYQYrQJ7NVD4m/k2C5y869LtLheqCeQtaS0NcoPDCh7PCgOLH2a73neK71B6xyWn/wjb1Ju0IsK7uOORAevR5uPHBdQU6J/mWOE72V6Gr51ybz/JDKgsqZQ6WZR6nw= ;{id = 33655} 0CD985D984D98AD8B3D98AD8A700000200010002A300001203646E73056D796E6963036E6574026D7900 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS dns.mynic.net.my. 0CD985D984D98AD8B3D98AD8A700000200010002A3000011036E7332046375686B0365647502686B00 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS ns2.cuhk.edu.hk. 0CD985D984D98AD8B3D98AD8A700000200010002A300000F036E7335066A6172696E67026D7900 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS ns5.jaring.my. 0CD985D984D98AD8B3D98AD8A700000200010002A300000F036E7336066A6172696E67026D7900 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS ns6.jaring.my. 0CD985D984D98AD8B3D98AD8A700000200010002A300001304646E7332056D796E6963036E6574026D7900 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS dns2.mynic.net.my. 0CD985D984D98AD8B3D98AD8A700000200010002A3000010046E7332300369696A026164026A7000 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS ns20.iij.ad.jp. 0CD985D984D98AD8B3D98AD8A700000200010002A300000F046E7333300463646E73036E657400 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS ns30.cdns.net. 0CD985D984D98AD8B3D98AD8A700000200010002A300000E056E732D6D79036E696302667200 \217\133\217\132\217\138\216\179\217\138\216\167. 172800 IN NS ns-my.nic.fr. 0CD985D984D98AD8B3D98AD8A700002B000100015180001842D2080195B6E1D09E818E13B8FBE777482C69109A614E4B \217\133\217\132\217\138\216\179\217\138\216\167. 86400 IN DS 17106 8 1 95B6E1D09E818E13B8FBE777482C69109A614E4B 0CD985D984D98AD8B3D98AD8A700002B000100015180002442D20802BDB33EA391E14E2535C4F2E3770408D2139A892A1DC8B5CF5EB9DF42FFB6B1B4 \217\133\217\132\217\138\216\179\217\138\216\167. 86400 IN DS 17106 8 2 BDB33EA391E14E2535C4F2E3770408D2139A892A1DC8B5CF5EB9DF42FFB6B1B4 0CD985D984D98AD8B3D98AD8A700002B000100015180001852920801B7B8D9E0586759075371771EC5FE4547438192AA \217\133\217\132\217\138\216\179\217\138\216\167. 86400 IN DS 21138 8 1 B7B8D9E0586759075371771EC5FE4547438192AA 0CD985D984D98AD8B3D98AD8A700002B000100015180002452920802CD5A25C027734679E3701C7C51413C525CBA12EDECD006549F93CE9AB1AC47C5 \217\133\217\132\217\138\216\179\217\138\216\167. 86400 IN DS 21138 8 2 CD5A25C027734679E3701C7C51413C525CBA12EDECD006549F93CE9AB1AC47C5 0CD985D984D98AD8B3D98AD8A700002E0001000151800093002B08010001518052F4220052EAD970837700676E7B108A8BA5E299C0B3C844DB951B797E90249B9FE7B810056169D88390A22E9D066DFB85C6EFF17CBEEB598A6BB3DF64CCAE53FD77C2C0B52901E18C50B42E55CA54B5EAC81FB37D34421F2D795911C3C455BB063AE8D577212325B579BC7D7F68C7FA783B0FB4B91F1E1844C3BE30DC3B3BFF40B3CBF0BC603E4860ABA2 \217\133\217\132\217\138\216\179\217\138\216\167. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z257EIqLpeKZwLPIRNuVG3l+kCSbn+e4EAVhadiDkKIunQZt+4XG7/F8vutZimuz32TMrlP9d8LAtSkB4YxQtC5VylS16sgfs300Qh8teVkRw8RVuwY66NV3ISMltXm8fX9ox/p4Ow+0uR8eGETDvjDcOzv/QLPL8LxgPkhgq6I= ;{id = 33655} 0CD985D984D98AD8B3D98AD8A700002E0001000151800093002F08010001518052F4220052EAD970837700B3717DE9AD6DF9CF9FD4CAED8DE3CE1CC79E00C9DC60CD78517F0547CCA2E63DD07849EE72BC596C2BDD66293632CCA16E682EF23EF3C4DAB3411EF82635FC52D6BCADB6700F9E0EEF8C5CE45F65F8BF9037C4FD51597A904F261CC4754E94E3FB954135B05E28AC1C558CA9DE40CBA0C4AE7F9F645550FF5900B12D96293A65 \217\133\217\132\217\138\216\179\217\138\216\167. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . s3F96a1t+c+f1MrtjePOHMeeAMncYM14UX8FR8yi5j3QeEnucrxZbCvdZik2Msyhbmgu8j7zxNqzQR74JjX8Uta8rbZwD54O74xc5F9l+L+QN8T9UVl6kE8mHMR1TpTj+5VBNbBeKKwcVYyp3kDLoMSuf59kVVD/WQCxLZYpOmU= ;{id = 33655} 0CD985D984D98AD8B3D98AD8A700002F000100015180001208D8B4D8A8D983D8A9000006200000000013 \217\133\217\132\217\138\216\179\217\138\216\167. 86400 IN NSEC \216\180\216\168\217\131\216\169. NS DS RRSIG NSEC 08D8B4D8A8D983D8A900000200010002A30000100161036E696308D8B4D8A8D983D8A900 \216\180\216\168\217\131\216\169. 172800 IN NS a.nic.\216\180\216\168\217\131\216\169. 08D8B4D8A8D983D8A900000200010002A30000100162036E696308D8B4D8A8D983D8A900 \216\180\216\168\217\131\216\169. 172800 IN NS b.nic.\216\180\216\168\217\131\216\169. 08D8B4D8A8D983D8A900000200010002A30000100163036E696308D8B4D8A8D983D8A900 \216\180\216\168\217\131\216\169. 172800 IN NS c.nic.\216\180\216\168\217\131\216\169. 08D8B4D8A8D983D8A900000200010002A30000100164036E696308D8B4D8A8D983D8A900 \216\180\216\168\217\131\216\169. 172800 IN NS d.nic.\216\180\216\168\217\131\216\169. 08D8B4D8A8D983D8A900002B0001000151800018510008010AC95C7D70A0A3CCB3E8351F6416663B941230DD \216\180\216\168\217\131\216\169. 86400 IN DS 20736 8 1 0AC95C7D70A0A3CCB3E8351F6416663B941230DD 08D8B4D8A8D983D8A900002B000100015180002451000802851A2DD716C38C5325818FB56E53D8F2E340C098F8AE9DC531601F49F4D8B943 \216\180\216\168\217\131\216\169. 86400 IN DS 20736 8 2 851A2DD716C38C5325818FB56E53D8F2E340C098F8AE9DC531601F49F4D8B943 08D8B4D8A8D983D8A900002E0001000151800093002B08010001518052F4220052EAD9708377009CCDE0E4175BE0479F9697FB02070E96615CCE1E27585895FC023E9F4001A5F77668CA52462CB0AF85AB92B6D35936062275F54F9073C13D938355A57A80A111E9BAF9A02518989E9F7BB080D052CDB978E981EE8C60A10499767D819700176B2213AD2633EDFD18F63D8FB9292DB6D87B87F57E104B7A2B3C9C6709F4B9B647 \216\180\216\168\217\131\216\169. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nM3g5Bdb4Eeflpf7AgcOlmFczh4nWFiV/AI+n0ABpfd2aMpSRiywr4WrkrbTWTYGInX1T5BzwT2Tg1WleoChEem6+aAlGJien3uwgNBSzbl46YHujGChBJl2fYGXABdrIhOtJjPt/Rj2PY+5KS222HuH9X4QS3orPJxnCfS5tkc= ;{id = 33655} 08D8B4D8A8D983D8A900002E0001000151800093002F08010001518052F4220052EAD97083770058156633229EB7B865B17513C74AE047FE45778DC15D6E1A7346FAA486D054369DCCB485A9AF5A83931A655B1DED8D46D361A20D6F4609568CD196DDF59E208FF873ED54DF938079C935E7551834E925227A656A42B50B545FED5B7BC8A5B3450BA392B1D8ECB4EF4FE36A681C6FBD40941B453C32DDD09A7D3A9AFD01F923E9 \216\180\216\168\217\131\216\169. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WBVmMyKet7hlsXUTx0rgR/5Fd43BXW4ac0b6pIbQVDadzLSFqa9ag5MaZVsd7Y1G02GiDW9GCVaM0Zbd9Z4gj/hz7VTfk4B5yTXnVRg06SUiemVqQrULVF/tW3vIpbNFC6OSsdjstO9P42poHG+9QJQbRTwy3dCafTqa/QH5I+k= ;{id = 33655} 08D8B4D8A8D983D8A900002F000100015180001309E0B984E0B897E0B8A2000006200000000013 \216\180\216\168\217\131\216\169. 86400 IN NSEC \224\185\132\224\184\151\224\184\162. NS DS RRSIG NSEC 0161036E696308D8B4D8A8D983D8A900000100010002A300000425D1C003 a.nic.\216\180\216\168\217\131\216\169. 172800 IN A 37.209.192.3 0161036E696308D8B4D8A8D983D8A900001C00010002A300001020010DCD000100000000000000000003 a.nic.\216\180\216\168\217\131\216\169. 172800 IN AAAA 2001:dcd:1::3 0162036E696308D8B4D8A8D983D8A900000100010002A300000425D1C203 b.nic.\216\180\216\168\217\131\216\169. 172800 IN A 37.209.194.3 0162036E696308D8B4D8A8D983D8A900001C00010002A300001020010DCD000200000000000000000003 b.nic.\216\180\216\168\217\131\216\169. 172800 IN AAAA 2001:dcd:2::3 0163036E696308D8B4D8A8D983D8A900000100010002A300000425D1C403 c.nic.\216\180\216\168\217\131\216\169. 172800 IN A 37.209.196.3 0163036E696308D8B4D8A8D983D8A900001C00010002A300001020010DCD000300000000000000000003 c.nic.\216\180\216\168\217\131\216\169. 172800 IN AAAA 2001:dcd:3::3 0164036E696308D8B4D8A8D983D8A900000100010002A300000425D1C603 d.nic.\216\180\216\168\217\131\216\169. 172800 IN A 37.209.198.3 0164036E696308D8B4D8A8D983D8A900001C00010002A300001020010DCD000400000000000000000003 d.nic.\216\180\216\168\217\131\216\169. 172800 IN AAAA 2001:dcd:4::3 09E0B984E0B897E0B8A200000200010002A300000E026E730574686E6963036E657400 \224\185\132\224\184\151\224\184\162. 172800 IN NS ns.thnic.net. 09E0B984E0B897E0B8A200000200010002A300001204646E73310574686E696302636F02746800 \224\185\132\224\184\151\224\184\162. 172800 IN NS dns1.thnic.co.th. 09E0B984E0B897E0B8A200000200010002A3000012046E732D610574686E696302636F02746800 \224\185\132\224\184\151\224\184\162. 172800 IN NS ns-a.thnic.co.th. 09E0B984E0B897E0B8A200002B0001000151800024476808021C51573C20577DCC978567C0F4F85056A0DDEFEF2DCF4919BAE35BB093EABA12 \224\185\132\224\184\151\224\184\162. 86400 IN DS 18280 8 2 1C51573C20577DCC978567C0F4F85056A0DDEFEF2DCF4919BAE35BB093EABA12 09E0B984E0B897E0B8A200002E0001000151800093002B08010001518052F4220052EAD9708377008B17376B64B7698A71944EF33F6D5EC5973CE1A83B59679FAB50220078EEFAC1396D16F5DAF450DF285E55435B4D00447ABD6B7BCB8A619ECC06BBBE64CE0F7C34C42B7BD091AB51C0065B081849CA1087D309A5C5AB58394B7AFB494FEB745CA473C1810753C1C005B18BF7B56594237C3C861594263E7185D4674D80EC11D9 \224\185\132\224\184\151\224\184\162. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ixc3a2S3aYpxlE7zP21exZc84ag7WWefq1AiAHju+sE5bRb12vRQ3yheVUNbTQBEer1re8uKYZ7MBru+ZM4PfDTEK3vQkatRwAZbCBhJyhCH0wmlxatYOUt6+0lP63RcpHPBgQdTwcAFsYv3tWWUI3w8hhWUJj5xhdRnTYDsEdk= ;{id = 33655} 09E0B984E0B897E0B8A200002E0001000151800093002F08010001518052F4220052EAD9708377005BE350182D54F48A850310A102DDB0F0577FB8DBD9D2A2ED4B7E4122B8A39DC8B324745EA64AF83232F28ACE031449CDC1E29DB3BE4230742605A6669DB9A64B1B36ADB935660E16384779BF58C34DE0FCB1882D216F0391A6729093FF84F824138E76A73808EB34A425DB1096D7B86153BD3840699620EC24A562C0FC1D979C \224\185\132\224\184\151\224\184\162. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . W+NQGC1U9IqFAxChAt2w8Fd/uNvZ0qLtS35BIrijncizJHRepkr4MjLyis4DFEnNweKds75CMHQmBaZmnbmmSxs2rbk1Zg4WOEd5v1jDTeD8sYgtIW8DkaZykJP/hPgkE452pzgI6zSkJdsQlte4YVO9OEBpliDsJKViwPwdl5w= ;{id = 33655} 09E0B984E0B897E0B8A200002F00010001518000140AD8B3D988D8B1D98AD8A9000006200000000013 \224\185\132\224\184\151\224\184\162. 86400 IN NSEC \216\179\217\136\216\177\217\138\216\169. NS DS RRSIG NSEC 0AD8B3D988D8B1D98AD8A900000200010002A300001B027379056363746C640761757468646E730472697065036E657400 \216\179\217\136\216\177\217\138\216\169. 172800 IN NS sy.cctld.authdns.ripe.net. 0AD8B3D988D8B1D98AD8A900000200010002A300000C036E733103746C6402737900 \216\179\217\136\216\177\217\138\216\169. 172800 IN NS ns1.tld.sy. 0AD8B3D988D8B1D98AD8A900000200010002A300000C036E733203746C6402737900 \216\179\217\136\216\177\217\138\216\169. 172800 IN NS ns2.tld.sy. 0AD8B3D988D8B1D98AD8A900000200010002A30000140370636807616E796361737403746C6402737900 \216\179\217\136\216\177\217\138\216\169. 172800 IN NS pch.anycast.tld.sy. 0AD8B3D988D8B1D98AD8A900002F000100015180000E04D180D184000006200000000003 \216\179\217\136\216\177\217\138\216\169. 86400 IN NSEC \209\128\209\132. NS RRSIG NSEC 0AD8B3D988D8B1D98AD8A900002E0001000151800093002F08010001518052F4220052EAD970837700882C88BD587E0CCDA15E10C4E4CEA3443CC29403F8F9BCEEC6D90AFEF70457C2ECAFAD402EC82DBC566769D94EE5C3B4D2AC6C85544FC4CAE1CC4DE5CF6EEE18C07492B8F74BBBDEECA42800BA0CD04332EFBD8139F63D2A27BDA4995991F0354328EFB3CBB25D243224ECC0A0AAA5DF6E4951CEE2489C0D006B2535E78E7B16 \216\179\217\136\216\177\217\138\216\169. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iCyIvVh+DM2hXhDE5M6jRDzClAP4+bzuxtkK/vcEV8Lsr61ALsgtvFZnadlO5cO00qxshVRPxMrhzE3lz27uGMB0krj3S7ve7KQoALoM0EMy772BOfY9Kie9pJlZkfA1Qyjvs8uyXSQyJOzAoKql325JUc7iSJwNAGslNeeOexY= ;{id = 33655} 04D180D18400000200010002A3000010016103646E73047269706E036E657400 \209\128\209\132. 172800 IN NS a.dns.ripn.net. 04D180D18400000200010002A3000010016203646E73047269706E036E657400 \209\128\209\132. 172800 IN NS b.dns.ripn.net. 04D180D18400000200010002A3000010016403646E73047269706E036E657400 \209\128\209\132. 172800 IN NS d.dns.ripn.net. 04D180D18400000200010002A3000010016503646E73047269706E036E657400 \209\128\209\132. 172800 IN NS e.dns.ripn.net. 04D180D18400000200010002A3000010016603646E73047269706E036E657400 \209\128\209\132. 172800 IN NS f.dns.ripn.net. 04D180D18400002B0001000151800024EB09080244F3965D9E0227ED99414740A1C7A7651A60ACBC6C80942C8AE9916FC323649F \209\128\209\132. 86400 IN DS 60169 8 2 44F3965D9E0227ED99414740A1C7A7651A60ACBC6C80942C8AE9916FC323649F 04D180D18400002E0001000151800093002B08010001518052F4220052EAD97083770062BF678328EC757E923ABCDDEC1218081CA5F74E7DFD22E7DD34EF2F418B3A1C8EE3C4C445E78CD54527507A90755A4CD70AEC8087BE131B8427CAB2E125F9D8E47A36BBF866206AE44805A4CD454D97E5952184F134C94F51D7734F3F37A08E0436C03BD94538C10FD35BC014E68DDF947D7227F182F6E0EEF179A6A42A4880 \209\128\209\132. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Yr9ngyjsdX6SOrzd7BIYCByl9059/SLn3TTvL0GLOhyO48TEReeM1UUnUHqQdVpM1wrsgIe+ExuEJ8qy4SX52OR6Nrv4ZiBq5EgFpM1FTZfllSGE8TTJT1HXc08/N6COBDbAO9lFOMEP01vAFOaN35R9cifxgvbg7vF5pqQqSIA= ;{id = 33655} 04D180D18400002E0001000151800093002F08010001518052F4220052EAD97083770050F72D94B74A47860CCEDDF318E8EE6881D5BFFBE4A933EFDFFEFFA5BEF505F4E56680A45B34DBE71670C7D38174E00AE9856C8532527DE68D3F2655B64B22C309F88B85621A015D5462713B4F0C8F0487FFB2F729ABCEF50AB2C7EE49FED02C186704F675C8550200E53F0B3DF1F4573416B00D9AF4B580A754EC14FAB1F4A6 \209\128\209\132. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UPctlLdKR4YMzt3zGOjuaIHVv/vkqTPv3/7/pb71BfTlZoCkWzTb5xZwx9OBdOAK6YVshTJSfeaNPyZVtksiwwn4i4ViGgFdVGJxO08MjwSH/7L3KavO9Qqyx+5J/tAsGGcE9nXIVQIA5T8LPfH0VzQWsA2a9LWAp1TsFPqx9KY= ;{id = 33655} 04D180D18400002F000100015180001208D8AAD988D986D8B3000006200000000013 \209\128\209\132. 86400 IN NSEC \216\170\217\136\217\134\216\179. NS DS RRSIG NSEC 08D8AAD988D986D8B300000200010002A300000C036E73310361746902746E00 \216\170\217\136\217\134\216\179. 172800 IN NS ns1.ati.tn. 08D8AAD988D986D8B300000200010002A300000C036E73320361746902746E00 \216\170\217\136\217\134\216\179. 172800 IN NS ns2.ati.tn. 08D8AAD988D986D8B300000200010002A300000C036E7332036E696302667200 \216\170\217\136\217\134\216\179. 172800 IN NS ns2.nic.fr. 08D8AAD988D986D8B300000200010002A300000C036E73380361746902746E00 \216\170\217\136\217\134\216\179. 172800 IN NS ns8.ati.tn. 08D8AAD988D986D8B300000200010002A300000C036E73390361746902746E00 \216\170\217\136\217\134\216\179. 172800 IN NS ns9.ati.tn. 08D8AAD988D986D8B300000200010002A3000013056E732D746E07616672696E6963036E657400 \216\170\217\136\217\134\216\179. 172800 IN NS ns-tn.afrinic.net. 08D8AAD988D986D8B300002F000100015180001309E381BFE38293E381AA000006200000000003 \216\170\217\136\217\134\216\179. 86400 IN NSEC \227\129\191\227\130\147\227\129\170. NS RRSIG NSEC 08D8AAD988D986D8B300002E0001000151800093002F08010001518052F4220052EAD9708377000AC406CBC3D5D6AEBCD769E6043B5F55DCDE0BD061DC7E34E2EA19E60BC78E05F84CC1837059D11828D4C048CC28A368DC606903276756F4DABFBF4AB54657F9A97BCF1B3B25F946949725BEF8AA53B639D9974CD3D1A582E83DBE47A4768EC7B5A6D259E7473E08B094E91374931F4F79F8F4570D31D8C4C76428AAB41FB28F \216\170\217\136\217\134\216\179. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CsQGy8PV1q6812nmBDtfVdzeC9Bh3H404uoZ5gvHjgX4TMGDcFnRGCjUwEjMKKNo3GBpAydnVvTav79KtUZX+al7zxs7JflGlJclvviqU7Y52ZdM09Glgug9vkekdo7HtabSWedHPgiwlOkTdJMfT3n49FcNMdjEx2QoqrQfso8= ;{id = 33655} 09E381BFE38293E381AA00000200010002A3000024076E732D746C643116636861726C6573746F6E726F6164726567697374727903636F6D00 \227\129\191\227\130\147\227\129\170. 172800 IN NS ns-tld1.charlestonroadregistry.com. 09E381BFE38293E381AA00000200010002A3000024076E732D746C643216636861726C6573746F6E726F6164726567697374727903636F6D00 \227\129\191\227\130\147\227\129\170. 172800 IN NS ns-tld2.charlestonroadregistry.com. 09E381BFE38293E381AA00000200010002A3000024076E732D746C643316636861726C6573746F6E726F6164726567697374727903636F6D00 \227\129\191\227\130\147\227\129\170. 172800 IN NS ns-tld3.charlestonroadregistry.com. 09E381BFE38293E381AA00000200010002A3000024076E732D746C643416636861726C6573746F6E726F6164726567697374727903636F6D00 \227\129\191\227\130\147\227\129\170. 172800 IN NS ns-tld4.charlestonroadregistry.com. 09E381BFE38293E381AA00000200010002A3000024076E732D746C643516636861726C6573746F6E726F6164726567697374727903636F6D00 \227\129\191\227\130\147\227\129\170. 172800 IN NS ns-tld5.charlestonroadregistry.com. 09E381BFE38293E381AA00002B0001000151800024515B0802CFA6056748CB21C3CFE41EC0CDEE6D9FA1B78C0A76133B94393357BB71BE7E02 \227\129\191\227\130\147\227\129\170. 86400 IN DS 20827 8 2 CFA6056748CB21C3CFE41EC0CDEE6D9FA1B78C0A76133B94393357BB71BE7E02 09E381BFE38293E381AA00002E0001000151800093002B08010001518052F4220052EAD970837700045D8BD9C8D0A21870B2FE43052954DD14616B04D85B45A56793B9BD341347816BBC749E0517DCF720F201BFB48BF3B29A85BFC31EBA7FFD07C5BC4830C597DD701216372B288F390FBC61CA31882EAB0146F3B50F603EF196E89A57ACC9D9796344C5FDAC6E068C5933513687F485FA497B84360EA64D26E16E2A6ED8E5CAD9 \227\129\191\227\130\147\227\129\170. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BF2L2cjQohhwsv5DBSlU3RRhawTYW0WlZ5O5vTQTR4FrvHSeBRfc9yDyAb+0i/OymoW/wx66f/0HxbxIMMWX3XASFjcrKI85D7xhyjGILqsBRvO1D2A+8Zbomlesydl5Y0TF/axuBoxZM1E2h/SF+kl7hDYOpk0m4W4qbtjlytk= ;{id = 33655} 09E381BFE38293E381AA00002E0001000151800093002F08010001518052F4220052EAD970837700A8C2EE5E30B36749DA5685FF783F2FC71F2ABBE8C98869B445EF685D50BA72D8B09403E1A42813FEEAA35ABA57EE5483F2DBB3206D0EEA4E4886A72847E17D51DE6F7CAE6CA7E524E80AD484EB33FF88E7738B2E1E0AB1DB7DFE92D74959B4CB505B70D3A7849C97D2F52F6AFB1B789B48EB970A66A5E1700A820B0490278395 \227\129\191\227\130\147\227\129\170. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qMLuXjCzZ0naVoX/eD8vxx8qu+jJiGm0Re9oXVC6ctiwlAPhpCgT/uqjWrpX7lSD8tuzIG0O6k5IhqcoR+F9Ud5vfK5sp+Uk6ArUhOsz/4jnc4suHgqx233+ktdJWbTLUFtw06eEnJfS9S9q+xt4m0jrlwpmpeFwCoILBJAng5U= ;{id = 33655} 09E381BFE38293E381AA00002F00010001518000160CE0A8ADE0A8BEE0A8B0E0A8A4000006200000000013 \227\129\191\227\130\147\227\129\170. 86400 IN NSEC \224\168\173\224\168\190\224\168\176\224\168\164. NS DS RRSIG NSEC 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS a0.cctld.afilias-nst.info. 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS a1.in.afilias-nst.in. 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS a2.in.afilias-nst.info. 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS b0.cctld.afilias-nst.org. 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS b1.in.afilias-nst.in. 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS b2.in.afilias-nst.org. 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS c0.cctld.afilias-nst.info. 0CE0A8ADE0A8BEE0A8B0E0A8A400000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 \224\168\173\224\168\190\224\168\176\224\168\164. 172800 IN NS d0.cctld.afilias-nst.org. 0CE0A8ADE0A8BEE0A8B0E0A8A400002F000100015180001006E6B8B8E6888F000006200000000003 \224\168\173\224\168\190\224\168\176\224\168\164. 86400 IN NSEC \230\184\184\230\136\143. NS RRSIG NSEC 0CE0A8ADE0A8BEE0A8B0E0A8A400002E0001000151800093002F08010001518052F4220052EAD97083770011F946566AC8EA61C678A8F3AC387B035AC1E0BCE77DE03A528B55725CFFE4471A4AC10D46EB7AA0C9E42758983038871A7A94FCB9483554D4A9CCEA0FEC6646376001DC20EE1993C8A6C0D7885DA6C01E24C45024AF3E5B925BE8AC0385D504F0A3F20850841CDF75A979F4692E524A658329590973870FE3C69B06693E2013 \224\168\173\224\168\190\224\168\176\224\168\164. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . EflGVmrI6mHGeKjzrDh7A1rB4LznfeA6UotVclz/5EcaSsENRut6oMnkJ1iYMDiHGnqU/LlINVTUqczqD+xmRjdgAdwg7hmTyKbA14hdpsAeJMRQJK8+W5Jb6KwDhdUE8KPyCFCEHN91qXn0aS5SSmWDKVkJc4cP48abBmk+IBM= ;{id = 33655} 06E6B8B8E6888F00000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 \230\184\184\230\136\143. 172800 IN NS demand.beta.aridns.net.au. 06E6B8B8E6888F00000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 \230\184\184\230\136\143. 172800 IN NS demand.alpha.aridns.net.au. 06E6B8B8E6888F00000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 \230\184\184\230\136\143. 172800 IN NS demand.delta.aridns.net.au. 06E6B8B8E6888F00000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 \230\184\184\230\136\143. 172800 IN NS demand.gamma.aridns.net.au. 06E6B8B8E6888F00002B00010001518000246BD708026C4C1CBD05BCA28A60B397ED8AC77783D7592EB50028FD3AE8A59BB5758984D3 \230\184\184\230\136\143. 86400 IN DS 27607 8 2 6C4C1CBD05BCA28A60B397ED8AC77783D7592EB50028FD3AE8A59BB5758984D3 06E6B8B8E6888F00002E0001000151800093002B08010001518052F4220052EAD97083770019A4E48675B70D2FF7054EEFCA0C1F30480B8A7AA50569469D8B6A81C6164C400E9CD1F58B7B55F2DCB750CB1A03F5F7686D07CD36C74B7024D05020E4CBF4677009E9DA618FB14B853BE2B51E272C3DB4BBE95BEE6F993AD0A80AE7766EF5237DE127458967FBE47DB31D518D99D27EF07EAFC1D592CA5BF2E6BA327D6E8481 \230\184\184\230\136\143. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GaTkhnW3DS/3BU7vygwfMEgLinqlBWlGnYtqgcYWTEAOnNH1i3tV8ty3UMsaA/X3aG0HzTbHS3Ak0FAg5Mv0Z3AJ6dphj7FLhTvitR4nLD20u+lb7m+ZOtCoCud2bvUjfeEnRYln++R9sx1RjZnSfvB+r8HVkspb8ua6Mn1uhIE= ;{id = 33655} 06E6B8B8E6888F00002E0001000151800093002F08010001518052F4220052EAD9708377004A10E8C93E5A2403B79B09D80ECE21D9636454032A640D5A87CC5C45419075BBC671731314EBDF46ADEE9D3FE1AAC49A8336F1997666DBB92433AFCAE25DCDB96AEA92F34EA0154E128223742DCE032AB44C8A66C0F77FC3721D4CA6689E367801C65CD288058B71A2057D0A407FD69FD64BB61488786D222E61DD9AD9BABC75 \230\184\184\230\136\143. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ShDoyT5aJAO3mwnYDs4h2WNkVAMqZA1ah8xcRUGQdbvGcXMTFOvfRq3unT/hqsSagzbxmXZm27kkM6/K4l3NuWrqkvNOoBVOEoIjdC3OAyq0TIpmwPd/w3IdTKZonjZ4AcZc0ogFi3GiBX0KQH/Wn9ZLthSIeG0iLmHdmtm6vHU= ;{id = 33655} 06E6B8B8E6888F00002F000100015180001006D985D8B5D8B1000006200000000013 \230\184\184\230\136\143. 86400 IN NSEC \217\133\216\181\216\177. NS DS RRSIG NSEC 06D985D8B5D8B100000200010002A3000010036E733107646F746D61737202656700 \217\133\216\181\216\177. 172800 IN NS ns1.dotmasr.eg. 06D985D8B5D8B100000200010002A3000010036E733207646F746D61737202656700 \217\133\216\181\216\177. 172800 IN NS ns2.dotmasr.eg. 06D985D8B5D8B100000200010002A3000010036E733307646F746D61737202656700 \217\133\216\181\216\177. 172800 IN NS ns3.dotmasr.eg. 06D985D8B5D8B100002F000100015180001006D982D8B7D8B1000006200000000003 \217\133\216\181\216\177. 86400 IN NSEC \217\130\216\183\216\177. NS RRSIG NSEC 06D985D8B5D8B100002E0001000151800093002F08010001518052F4220052EAD97083770049F15ECB9AD6E324F79793B903E378E99D57C1888026E23E7AEEAEC814AD923998F0D2A9B851626CE3A0EE88CE065D6E931658DF2E858741D8A4062150E82809349CDC7E411FC09BE5D88E27E4A4C8A5377AD0D07BBDA4ACDB45F211345A09E75188037D6F16B33F7B4070E0BDB2C5F64FA19C31B53C28398A100D28A2C6A981 \217\133\216\181\216\177. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SfFey5rW4yT3l5O5A+N46Z1XwYiAJuI+eu6uyBStkjmY8NKpuFFibOOg7ojOBl1ukxZY3y6Fh0HYpAYhUOgoCTSc3H5BH8Cb5diOJ+SkyKU3etDQe72krNtF8hE0WgnnUYgDfW8Wsz97QHDgvbLF9k+hnDG1PCg5ihANKKLGqYE= ;{id = 33655} 06D982D8B7D8B100000200010002A300000F016108726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS a.registry.qa. 06D982D8B7D8B100000200010002A300000F016208726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS b.registry.qa. 06D982D8B7D8B100000200010002A300000F016308726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS c.registry.qa. 06D982D8B7D8B100000200010002A300000F016408726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS d.registry.qa. 06D982D8B7D8B100000200010002A300000F016508726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS e.registry.qa. 06D982D8B7D8B100000200010002A300000F016608726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS f.registry.qa. 06D982D8B7D8B100000200010002A300000F016708726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS g.registry.qa. 06D982D8B7D8B100000200010002A300000F016808726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS h.registry.qa. 06D982D8B7D8B100000200010002A300000F016908726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS i.registry.qa. 06D982D8B7D8B100000200010002A300000F016A08726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS j.registry.qa. 06D982D8B7D8B100000200010002A300000F016B08726567697374727902716100 \217\130\216\183\216\177. 172800 IN NS k.registry.qa. 06D982D8B7D8B100002F000100015180001C12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF88000006200000000003 \217\130\216\183\216\177. 86400 IN NSEC \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. NS RRSIG NSEC 06D982D8B7D8B100002E0001000151800093002F08010001518052F4220052EAD970837700B904BC82201B9A1776E71717790BC4064295BF6513C8FAC1C97200A12209E30A25374AB06B5178B496B59BCB0C783BF373FA370128BD9DA017879565A988D0DA8E7A1853095069F15CC4751649712E213FA31EDFCFFC0846990DCC985F36CCB65471E29395745BFFBDBF6E2E498341C7E301D2D534FEE0D7DF8F705991C34529 \217\130\216\183\216\177. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uQS8giAbmhd25xcXeQvEBkKVv2UTyPrByXIAoSIJ4wolN0qwa1F4tJa1m8sMeDvzc/o3ASi9naAXh5VlqYjQ2o56GFMJUGnxXMR1FklxLiE/ox7fz/wIRpkNzJhfNsy2VHHik5V0W/+9v24uSYNBx+MB0tU0/uDX349wWZHDRSk= ;{id = 33655} 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A3000015026C6B0C636F6D6D756E697479646E73036E657400 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS lk.communitydns.net. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A3000018036E69630A6C6B2D616E796361737403706368036E657400 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS nic.lk-anycast.pch.net. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A300000B036E7331026163026C6B00 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS ns1.ac.lk. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A300000B036E7333026163026C6B00 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS ns3.ac.lk. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A300000D046E732D63036E6963026C6B00 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS ns-c.nic.lk. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A300000D046E732D64036E6963026C6B00 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS ns-d.nic.lk. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A300000D046E732D6C036E6963026C6B00 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS ns-l.nic.lk. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800000200010002A300000D046E732D74036E6963026C6B00 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 172800 IN NS ns-t.nic.lk. 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800002F000100015180001F15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE000006200000000003 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 86400 IN NSEC \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. NS RRSIG NSEC 12E0AE87E0AEB2E0AE99E0AF8DE0AE95E0AF8800002E0001000151800093002F08010001518052F4220052EAD970837700380AD3ACB8CF80FD36F70981ADC1A729060259F0C84501E066380F56F1EC08F64ADA8FD07538AE08C3CF84619BAAED81112A63ADCCA51C4E8F212805AB06108C97268AF87A0320CA41340F8E01307739EEC583C885BE15BB4D85E570065A47D72CA1F606B6C3AD70E04806FA9AA13472EA2A12FC40609D678265AA50C9C571D2 \224\174\135\224\174\178\224\174\153\224\175\141\224\174\149\224\175\136. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OArTrLjPgP029wmBrcGnKQYCWfDIRQHgZjgPVvHsCPZK2o/QdTiuCMPPhGGbqu2BESpjrcylHE6PISgFqwYQjJcmivh6AyDKQTQPjgEwdznuxYPIhb4Vu02F5XAGWkfXLKH2BrbDrXDgSAb6mqE0cuoqEvxAYJ1ngmWqUMnFcdI= ;{id = 33655} 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001B026130056363746C640B6166696C6961732D6E737404696E666F00 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS a0.cctld.afilias-nst.info. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001602613102696E0B6166696C6961732D6E737402696E00 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS a1.in.afilias-nst.in. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001802613202696E0B6166696C6961732D6E737404696E666F00 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS a2.in.afilias-nst.info. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001A026230056363746C640B6166696C6961732D6E7374036F726700 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS b0.cctld.afilias-nst.org. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001602623102696E0B6166696C6961732D6E737402696E00 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS b1.in.afilias-nst.in. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001702623202696E0B6166696C6961732D6E7374036F726700 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS b2.in.afilias-nst.org. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001B026330056363746C640B6166696C6961732D6E737404696E666F00 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS c0.cctld.afilias-nst.info. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00000200010002A300001A026430056363746C640B6166696C6961732D6E7374036F726700 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 172800 IN NS d0.cctld.afilias-nst.org. 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00002F000100015180001309E696B0E58AA0E59DA1000006200000000003 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 86400 IN NSEC \230\150\176\229\138\160\229\157\161. NS RRSIG NSEC 15E0AE87E0AEA8E0AF8DE0AEA4E0AEBFE0AEAFE0AEBE00002E0001000151800093002F08010001518052F4220052EAD970837700638887323341B784E78590EB08BE2ABCF30B3CFBD9C13BF9F49F84AF5F783FCEEA36526C59C48552D615F86145C7123768D39FA63053096B84801FFB385CB2178FEC6DE4BA9E3F11915A354F3FD943B9C79B69C1402C510065C3D1CAD52B9DBACEB9121BB3578B637F2F5DFB5DC7D80B8E6DAFF118EA1A78BE347E561C6A3471 \224\174\135\224\174\168\224\175\141\224\174\164\224\174\191\224\174\175\224\174\190. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Y4iHMjNBt4TnhZDrCL4qvPMLPPvZwTv59J+Er194P87qNlJsWcSFUtYV+GFFxxI3aNOfpjBTCWuEgB/7OFyyF4/sbeS6nj8RkVo1Tz/ZQ7nHm2nBQCxRAGXD0crVK526zrkSG7NXi2N/L137XcfYC45tr/EY6hp4vjR+VhxqNHE= ;{id = 33655} 09E696B0E58AA0E59DA100000200010002A3000011036E7332046375686B0365647502686B00 \230\150\176\229\138\160\229\157\161. 172800 IN NS ns2.cuhk.edu.hk. 09E696B0E58AA0E59DA100000200010002A300001004736563330561706E6963036E657400 \230\150\176\229\138\160\229\157\161. 172800 IN NS sec3.apnic.net. 09E696B0E58AA0E59DA100000200010002A3000010056473616E790573676E696302736700 \230\150\176\229\138\160\229\157\161. 172800 IN NS dsany.sgnic.sg. 09E696B0E58AA0E59DA100000200010002A30000170573672D6E7307616E796361737403706368036E657400 \230\150\176\229\138\160\229\157\161. 172800 IN NS sg-ns.anycast.pch.net. 09E696B0E58AA0E59DA100002F00010001518000160CD981D984D8B3D8B7D98AD986000006200000000003 \230\150\176\229\138\160\229\157\161. 86400 IN NSEC \217\129\217\132\216\179\216\183\217\138\217\134. NS RRSIG NSEC 09E696B0E58AA0E59DA100002E0001000151800093002F08010001518052F4220052EAD97083770029D87DFBA0771C676A13C72495E0473D5E424ED92891169A673FCC48AC1ABD2CB7B71985F9C9D7FACCC9C4B39683B4BD2B0DC23BFF69C824AA0234D1FB5F5070CD5F957E5B1D0FBDEBB4DF2E8FC1E12DDEA58560DA8281B1AA7252FE48BBE3260089ABDBF16D3574CA674A11480EA2EDF66DAD95A9BB88415B929046F121D2C9 \230\150\176\229\138\160\229\157\161. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Kdh9+6B3HGdqE8ckleBHPV5CTtkokRaaZz/MSKwavSy3txmF+cnX+szJxLOWg7S9Kw3CO/9pyCSqAjTR+19QcM1flX5bHQ+967TfLo/B4S3epYVg2oKBsapyUv5Iu+MmAImr2/FtNXTKZ0oRSA6i7fZtrZWpu4hBW5KQRvEh0sk= ;{id = 33655} 0CD981D984D8B3D8B7D98AD98600000200010002A300000E0369646E05706E696E6102707300 \217\129\217\132\216\179\216\183\217\138\217\134. 172800 IN NS idn.pnina.ps. 0CD981D984D8B3D8B7D98AD98600000200010002A300000E036E733105706E696E6102707300 \217\129\217\132\216\179\216\183\217\138\217\134. 172800 IN NS ns1.pnina.ps. 0CD981D984D8B3D8B7D98AD98600000200010002A300000D04646E733103676F7602707300 \217\129\217\132\216\179\216\183\217\138\217\134. 172800 IN NS dns1.gov.ps. 0CD981D984D8B3D8B7D98AD98600000200010002A300000D04646E733303676F7602707300 \217\129\217\132\216\179\216\183\217\138\217\134. 172800 IN NS dns3.gov.ps. 0CD981D984D8B3D8B7D98AD98600002F000100015180001006E694BFE58AA1000006200000000003 \217\129\217\132\216\179\216\183\217\138\217\134. 86400 IN NSEC \230\148\191\229\138\161. NS RRSIG NSEC 0CD981D984D8B3D8B7D98AD98600002E0001000151800093002F08010001518052F4220052EAD97083770016C8DEE2826448C7F562B41FFC9BCC9B01AD31625817283742426E0999289FDBD109993ABAB1E29671788F0FC507787D2B39A3AC985960E82AC28FBC852BB3F26F5AA7131433D700EFDC6D79A9519A7D8431A8521CD33055675CE61849692622CA9BA791FAD00B28FE3D57C17CDF23465832D3A71D74BF1D88FF1E998C599261 \217\129\217\132\216\179\216\183\217\138\217\134. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Fsje4oJkSMf1YrQf/JvMmwGtMWJYFyg3QkJuCZkon9vRCZk6urHilnF4jw/FB3h9KzmjrJhZYOgqwo+8hSuz8m9apxMUM9cA79xtealRmn2EMahSHNMwVWdc5hhJaSYiypunkfrQCyj+PVfBfN8jRlgy06cddL8diP8emYxZkmE= ;{id = 33655} 06E694BFE58AA100000200010002A300000E036E733105636F6E616302636E00 \230\148\191\229\138\161. 172800 IN NS ns1.conac.cn. 06E694BFE58AA100000200010002A300000E036E733205636F6E616302636E00 \230\148\191\229\138\161. 172800 IN NS ns2.conac.cn. 06E694BFE58AA100000200010002A300000E036E733305636F6E616302636E00 \230\148\191\229\138\161. 172800 IN NS ns3.conac.cn. 06E694BFE58AA100000200010002A300000E036E733405636F6E616302636E00 \230\148\191\229\138\161. 172800 IN NS ns4.conac.cn. 06E694BFE58AA100000200010002A300000E036E733505636F6E616302636E00 \230\148\191\229\138\161. 172800 IN NS ns5.conac.cn. 06E694BFE58AA100002B0001000151800024C8DD08029D673623E84D7E10B2AA5B376A3F617665F8B38EF442E8A7E86F0F18161C7801 \230\148\191\229\138\161. 86400 IN DS 51421 8 2 9D673623E84D7E10B2AA5B376A3F617665F8B38EF442E8A7E86F0F18161C7801 06E694BFE58AA100002E0001000151800093002B08010001518052F4220052EAD9708377008CB0AA3B147B9E58C27305A298C02CFD8CE1CCA55204E3A4DF173F51448E7D73A324A1E1E62E5B8294B8776F278E85CA220799CF81EEFE2F9B18FE0FEEF136CF70C98B3C2CA8D54E5767EA9985A5888F77C6BA4B21A9B0947C261BF41BCFA15A359ADD19C6D383117B2CDE1B6E77A5DFCD1F102DF799FE6802A7EB2B28EF61F4 \230\148\191\229\138\161. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jLCqOxR7nljCcwWimMAs/YzhzKVSBOOk3xc/UUSOfXOjJKHh5i5bgpS4d28njoXKIgeZz4Hu/i+bGP4P7vE2z3DJizwsqNVOV2fqmYWliI93xrpLIamwlHwmG/Qbz6FaNZrdGcbTgxF7LN4bbnel380fEC33mf5oAqfrKyjvYfQ= ;{id = 33655} 06E694BFE58AA100002E0001000151800093002F08010001518052F4220052EAD9708377007B05C2212C4FE47D7334DC0AA498600E3AF1D3B544CE22F095528B202D1D696B7C71473CCD384B9BF4606EA70CF6A40F154A7F9CEC828D0898DF5A5DFDF60C86F4BEE559ED0567942D08A81F2384DEEA428754B6B08565BC489757C2DE9C54B5DD43D0809F1E7BEB8F49520C081B15707B9BE52E10D9B6AD9DDBC40E3EFAF674 \230\148\191\229\138\161. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ewXCISxP5H1zNNwKpJhgDjrx07VEziLwlVKLIC0daWt8cUc8zThLm/RgbqcM9qQPFUp/nOyCjQiY31pd/fYMhvS+5VntBWeULQioHyOE3upCh1S2sIVlvEiXV8LenFS13UPQgJ8ee+uPSVIMCBsVcHub5S4Q2batndvEDj769nQ= ;{id = 33655} 06E694BFE58AA100002F000100015180000D03787878000006200000000013 \230\148\191\229\138\161. 86400 IN NSEC xxx. NS DS RRSIG NSEC 0378787800000200010002A3000019026130037878780B6166696C6961732D6E737404696E666F00 xxx. 172800 IN NS a0.xxx.afilias-nst.info. 0378787800000200010002A3000019026132037878780B6166696C6961732D6E737404696E666F00 xxx. 172800 IN NS a2.xxx.afilias-nst.info. 0378787800000200010002A3000018026230037878780B6166696C6961732D6E7374036F726700 xxx. 172800 IN NS b0.xxx.afilias-nst.org. 0378787800000200010002A3000018026232037878780B6166696C6961732D6E7374036F726700 xxx. 172800 IN NS b2.xxx.afilias-nst.org. 0378787800000200010002A3000019026330037878780B6166696C6961732D6E737404696E666F00 xxx. 172800 IN NS c0.xxx.afilias-nst.info. 0378787800000200010002A3000018026430037878780B6166696C6961732D6E7374036F726700 xxx. 172800 IN NS d0.xxx.afilias-nst.org. 0378787800002F000100015180000C027965000006200000000003 xxx. 86400 IN NSEC ye. NS RRSIG NSEC 0378787800002E0001000151800093002F08010001518052F4220052EAD9708377009FBEA4BE5E960846F612AD79CDF4A39233946A4781027BFA7E387FB07C5B2A8B84C93B8D5BF247BC0AEEF5CA04966A2BC5668755411C9917D2016356F571A95A63FB3528F033760BEDABC1B45D2E57D951AFDF400CE1AC58DAD2D5DEADC3106C1F7AA06D64806537566FD5D3270D32DBF8FF2052B725AE204925C29F549F5D21 xxx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . n76kvl6WCEb2Eq15zfSjkjOUakeBAnv6fjh/sHxbKouEyTuNW/JHvAru9coElmorxWaHVUEcmRfSAWNW9XGpWmP7NSjwM3YL7avBtF0uV9lRr99ADOGsWNrS1d6twxBsH3qgbWSAZTdWb9XTJw0y2/j/IFK3Ja4gSSXCn1SfXSE= ;{id = 33655} 02796500000200010002A3000012036E73310579656D656E036E657402796500 ye. 172800 IN NS ns1.yemen.net.ye. 02796500000200010002A3000012036E73320579656D656E036E657402796500 ye. 172800 IN NS ns2.yemen.net.ye. 02796500000200010002A3000009047361683102796500 ye. 172800 IN NS sah1.ye. 02796500000200010002A3000009047361683202796500 ye. 172800 IN NS sah2.ye. 02796500002F000100015180000C027974000006200000000003 ye. 86400 IN NSEC yt. NS RRSIG NSEC 02796500002E0001000151800093002F08010001518052F4220052EAD970837700AAE6966E71108192AE94F374AD40A755DA3EF470524494D5CB5624028FC4E1A3081CA1438C6A85E753308E16EE8619F79F56BED09E2C95CBC65EC276CDAF190DC889C74E4AAC50A9B2D2ECC3060046F41F85ACA1BC42653AA91FE0260111D9D8B052ED1C7716DF8C0677610A191F5E38C289EBDB9320D33BAEE5E6E9744B5622 ye. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . quaWbnEQgZKulPN0rUCnVdo+9HBSRJTVy1YkAo/E4aMIHKFDjGqF51Mwjhbuhhn3n1a+0J4slcvGXsJ2za8ZDciJx05KrFCpstLswwYARvQfhayhvEJlOqkf4CYBEdnYsFLtHHcW34wGd2EKGR9eOMKJ69uTINM7ruXm6XRLViI= ;{id = 33655} 036E73310579656D656E036E657402796500000100010002A300000441A2B821 ns1.yemen.net.ye. 172800 IN A 65.162.184.33 036E73320579656D656E036E657402796500000100010002A300000441A2B822 ns2.yemen.net.ye. 172800 IN A 65.162.184.34 047361683102796500000100010002A3000004C35E0022 sah1.ye. 172800 IN A 195.94.0.34 047361683202796500000100010002A3000004C35E0023 sah2.ye. 172800 IN A 195.94.0.35 02797400000200010002A300000E016403657874036E696302667200 yt. 172800 IN NS d.ext.nic.fr. 02797400000200010002A300000A0164036E696302667200 yt. 172800 IN NS d.nic.fr. 02797400000200010002A300000E016503657874036E696302667200 yt. 172800 IN NS e.ext.nic.fr. 02797400000200010002A300000E016603657874036E696302667200 yt. 172800 IN NS f.ext.nic.fr. 02797400000200010002A300000E016703657874036E696302667200 yt. 172800 IN NS g.ext.nic.fr. 02797400002B0001000151800024475108028109F3831FE1714980A8BD00AC12B56A8F7C2556C6F9FF6C02DAD2785D25B23F yt. 86400 IN DS 18257 8 2 8109F3831FE1714980A8BD00AC12B56A8F7C2556C6F9FF6C02DAD2785D25B23F 02797400002B0001000151800024C5AA080232C66E2C3E3B541B84AB453F7E6E9F12603586422ABD2FAFE3053574A417A403 yt. 86400 IN DS 50602 8 2 32C66E2C3E3B541B84AB453F7E6E9F12603586422ABD2FAFE3053574A417A403 02797400002E0001000151800093002B08010001518052F4220052EAD9708377001B62459B5B354059C401F4783F20AC3659D10EC46166FD3381888F68111D4DC95EA3FC1650191AF3A84398953F946E08FEB3957803745283561C3AEDE174EEC0148D89F60F2FF184D11D5AEA9ACA2B2D62781E0A49FA91012F349FE653F6C1456FCDB775C127414F430957A7314486EE9DF81CE37A5851A9D7A3AA82F1061E6B yt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . G2JFm1s1QFnEAfR4PyCsNlnRDsRhZv0zgYiPaBEdTcleo/wWUBka86hDmJU/lG4I/rOVeAN0UoNWHDrt4XTuwBSNifYPL/GE0R1a6prKKy1ieB4KSfqRAS80n+ZT9sFFb823dcEnQU9DCVenMUSG7p34HON6WFGp16OqgvEGHms= ;{id = 33655} 02797400002E0001000151800093002F08010001518052F4220052EAD97083770066CCF61372285E727F62F87D714A72625F215CF0C53A9787BB49E382F0BA4799363DAC699AACF1C4A921E789B95FDF0DAF9CA43283367DC240374AD9C7BD0E8AE9B394FC7292303C5CB49A26BD8993BBFE0A3C9910DC206B4DFAD728077EC485C0F8CC0A38A96F73D93BC0B7D8D1948163A7EF8C4AC71515E8D1F432ECC740AF yt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zsz2E3IoXnJ/Yvh9cUpyYl8hXPDFOpeHu0njgvC6R5k2PaxpmqzxxKkh54m5X98Nr5ykMoM2fcJAN0rZx70OiumzlPxykjA8XLSaJr2Jk7v+CjyZENwga0361ygHfsSFwPjMCjipb3PZO8C32NGUgWOn74xKxxUV6NH0MuzHQK8= ;{id = 33655} 02797400002F000100015180000C027A61000006200000000013 yt. 86400 IN NSEC za. NS DS RRSIG NSEC 027A6100002F000100015180000C027A6D000006200000000003 za. 86400 IN NSEC zm. NS RRSIG NSEC 027A6100002E0001000151800093002F08010001518052F4220052EAD97083770063F831FBCCFBE79E01291AE1A0A697BE9EDDE85354E9468BAEC2FCB39FF5AC9C78D6818B4862B6B3AB84DF925384208E6865CE78CB57E536C5678A75A86D195C2CBCAB794A2D325C0E4536712B3BF20529423D3C0201C81CF2C6C26EF9638DD23FB7F81ADA98D9C9172DF5BD75A84AE91422737DFEA4B4607199BE90CAF5402D za. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Y/gx+8z7554BKRrhoKaXvp7d6FNU6UaLrsL8s5/1rJx41oGLSGK2s6uE35JThCCOaGXOeMtX5TbFZ4p1qG0ZXCy8q3lKLTJcDkU2cSs78gUpQj08AgHIHPLGwm75Y43SP7f4GtqY2ckXLfW9dahK6RQic33+pLRgcZm+kMr1QC0= ;{id = 33655} 027A6100000200010002A3000011037A613107646E736E6F6465036E657400 za. 172800 IN NS za1.dnsnode.net. 027A6100000200010002A300001204646973610574656E6574026163027A6100 za. 172800 IN NS disa.tenet.ac.za. 027A6100000200010002A300000F046E737A6102697302636F027A6100 za. 172800 IN NS nsza.is.co.za. 027A6100000200010002A3000017057A612D6E7307616E796361737403706368036E657400 za. 172800 IN NS za-ns.anycast.pch.net. 027A6100000200010002A300001006736E732D706203697363036F726700 za. 172800 IN NS sns-pb.isc.org. 05686970706F027275026163027A6100000100010002A300000492E78001 hippo.ru.ac.za. 172800 IN A 146.231.128.1 05686970706F027275026163027A6100001C00010002A300001020014200101000000000000000000001 hippo.ru.ac.za. 172800 IN AAAA 2001:4200:1010::1 04646973610574656E6574026163027A6100000100010002A3000004C4154F32 disa.tenet.ac.za. 172800 IN A 196.21.79.50 04646973610574656E6574026163027A6100001C00010002A300001020014200FFFF000A0000000000000001 disa.tenet.ac.za. 172800 IN AAAA 2001:4200:ffff:a::1 046E737A6102697302636F027A6100000100010002A3000004C404A01B nsza.is.co.za. 172800 IN A 196.4.160.27 036E733104636F7A61036E6574027A6100000100010002A300000442873E14 ns1.coza.net.za. 172800 IN A 66.135.62.20 027A6D00000200010002A300000F036E7331067A616D6E6574027A6D00 zm. 172800 IN NS ns1.zamnet.zm. 027A6D00000200010002A3000012036E733109636F707065726E6574027A6D00 zm. 172800 IN NS ns1.coppernet.zm. 027A6D00000200010002A300000F036E7332067A616D6E6574027A6D00 zm. 172800 IN NS ns2.zamnet.zm. 027A6D00000200010002A300001005686970706F027275026163027A6100 zm. 172800 IN NS hippo.ru.ac.za. 027A6D00000200010002A3000013056E732D7A6D07616672696E6963036E657400 zm. 172800 IN NS ns-zm.afrinic.net. 027A6D00002F000100015180000E047A6F6E65000006200000000003 zm. 86400 IN NSEC zone. NS RRSIG NSEC 027A6D00002E0001000151800093002F08010001518052F4220052EAD9708377007E9634F0A9FDE509B9D017ECFF4A5DA612C0893D799E2380EE6EBDCC239116E344B99CBA3750827620E349DF994B7ED8D172DD5A6A224ABA17E34C1F380BA25183E548029D3E4F6D411ECC6361CC9E51C8B19E3390F32273D74DE371C9B403519CB1028625AA28EE09C13B85618E4E8A52AA1A41BD2E824219DE3441365EB43D zm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fpY08Kn95Qm50Bfs/0pdphLAiT15niOA7m69zCORFuNEuZy6N1CCdiDjSd+ZS37Y0XLdWmoiSroX40wfOAuiUYPlSAKdPk9tQR7MY2HMnlHIsZ4zkPMic9dN43HJtANRnLEChiWqKO4JwTuFYY5OilKqGkG9LoJCGd40QTZetD0= ;{id = 33655} 036E733109636F707065726E6574027A6D00000100010002A300000429DEF00F ns1.coppernet.zm. 172800 IN A 41.222.240.15 036E7331067A616D6E6574027A6D00000100010002A3000004C42EC01A ns1.zamnet.zm. 172800 IN A 196.46.192.26 036E7332067A616D6E6574027A6D00000100010002A3000004C42EC015 ns2.zamnet.zm. 172800 IN A 196.46.192.21 047A6F6E6500000200010002A300001B0664656D616E64046265746106617269646E73036E657402617500 zone. 172800 IN NS demand.beta.aridns.net.au. 047A6F6E6500000200010002A300001C0664656D616E6405616C70686106617269646E73036E657402617500 zone. 172800 IN NS demand.alpha.aridns.net.au. 047A6F6E6500000200010002A300001C0664656D616E640564656C746106617269646E73036E657402617500 zone. 172800 IN NS demand.delta.aridns.net.au. 047A6F6E6500000200010002A300001C0664656D616E640567616D6D6106617269646E73036E657402617500 zone. 172800 IN NS demand.gamma.aridns.net.au. 047A6F6E6500002F000100015180000C027A77000006200000000013 zone. 86400 IN NSEC zw. NS DS RRSIG NSEC 047A6F6E6500002E0001000151800093002F08010001518052F4220052EAD97083770056D1A7BE64475C9387D43B05A6E20D0A4F7DD5C7299262334EA325B620C3E68DE53CF0A1087D4E8719A758FD2C7812295945C0FC19301EEDDD510639F6E1E0241CD46A859B4C0CA35FD06D8CE789FCF73967BAB069BCF8D10BF6FAAF0B7B9E94E42D344218037027A090A066B49608DBE72024B2E580AC8C086541E5C24D965C zone. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VtGnvmRHXJOH1DsFpuINCk991ccpkmIzTqMltiDD5o3lPPChCH1OhxmnWP0seBIpWUXA/BkwHu3dUQY59uHgJBzUaoWbTAyjX9BtjOeJ/Pc5Z7qwabz40Qv2+q8Le56U5C00QhgDcCegkKBmtJYI2+cgJLLlgKyMCGVB5cJNllw= ;{id = 33655} 047A6F6E6500002E0001000151800093002B08010001518052F4220052EAD9708377002E50B50CEEFAAE1F20120697B21FBFDBE609AE4825FEA4CF28FE6EBD000C7DF678E9AF09CB6D232BFC580541D7BA260C38F58C28F3FDF8BAEA3013C2890B42DA03C18958CB7E9CA3BCAD5D5358D55D33473B2FB115ECEEB281D7504C975AC097B67A30512B65EF3A64EB47CC2A5401B8B2AA97E3F658B6D6389B22FC2CE27DCF zone. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . LlC1DO76rh8gEgaXsh+/2+YJrkgl/qTPKP5uvQAMffZ46a8Jy20jK/xYBUHXuiYMOPWMKPP9+LrqMBPCiQtC2gPBiVjLfpyjvK1dU1jVXTNHOy+xFezusoHXUEyXWsCXtnowUStl7zpk60fMKlQBuLKql+P2WLbWOJsi/Czifc8= ;{id = 33655} 047A6F6E6500002B0001000151800024BD010802118C38D7EAFE8361DBA4C1BF929EAE5DFE8F3D0DEF61369478458CD942E14B46 zone. 86400 IN DS 48385 8 2 118C38D7EAFE8361DBA4C1BF929EAE5DFE8F3D0DEF61369478458CD942E14B46 027A7700000200010002A3000012036E73310674656C6F6E6502636F027A7700 zw. 172800 IN NS ns1.telone.co.zw. 027A7700000200010002A300000D036E733203676970036E657400 zw. 172800 IN NS ns2.gip.net. 027A7700000200010002A3000012036E73320674656C6F6E6502636F027A7700 zw. 172800 IN NS ns2.telone.co.zw. 027A7700000200010002A3000010056E732D7A770472697065036E657400 zw. 172800 IN NS ns-zw.ripe.net. 027A7700000200010002A30000140A6E6577732D746F6B796F03676970036E657400 zw. 172800 IN NS news-tokyo.gip.net. 027A7700002F0001000151800009000006200000000003 zw. 86400 IN NSEC . NS RRSIG NSEC 027A7700002E0001000151800093002F08010001518052F4220052EAD97083770056EBDD97847282FED99888619BCA0F98C1490049883C41C2133E2556B2018CF2DB3B94250C4DCAF5AF3B7B3863F79F80C281ACF9BE94712324B3C5D626FE855D409147316EFD50FCB1CAF4137253500DDECFBA6F8727F9FCB69535B1781B9E9FF26012A3BCCBF31989EBD8AD4ED03FB34AFA3F413BEB5B29536352E346D6E1FC zw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Vuvdl4Rygv7ZmIhhm8oPmMFJAEmIPEHCEz4lVrIBjPLbO5QlDE3K9a87ezhj95+AwoGs+b6UcSMks8XWJv6FXUCRRzFu/VD8scr0E3JTUA3ez7pvhyf5/LaVNbF4G56f8mASo7zL8xmJ69itTtA/s0r6P0E761spU2NS40bW4fw= ;{id = 33655} 036E73310674656C6F6E6502636F027A7700000100010002A3000004C2857A2F ns1.telone.co.zw. 172800 IN A 194.133.122.47 036E73320674656C6F6E6502636F027A7700000100010002A3000004C2857A2A ns2.telone.co.zw. 172800 IN A 194.133.122.42 000006000100015180004001610C726F6F742D73657276657273036E657400056E73746C640C766572697369676E2D67727303636F6D00780B66AC000007080000038400093A8000015180 . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2014013100 1800 900 604800 86400 unbound-1.13.1/testdata/val_nsec3_iter_high.rpl0000644000175000017500000001466714010434640021144 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" val-nsec3-keysize-iterations: "1024 100 2048 200 4096 500" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nxdomain NSEC3 with too high iterations ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; closest encloser, H(example.com). 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j49s SOA NS MX DNSKEY RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCz/LkFOFcaQzVnyySW9ZoVUnxh7gIUdxyS9vqVDzo8pGhFU+3YogN2ZRk= ;{id = 2854} ; wildcard denial, H(*.example.com.) = 4f3cnt8cu22tngec382jj4gde4rb47ub 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb48ub A MX RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFHS+i/OB/V/gYmS1eQTXieXIXGjsAhQQ0Ql7TW/hsUklrb0DfoyhVPG95Q== ;{id = 2854} ; next closer name, H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3. s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j49s SOA NS MX DNSKEY RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCz/LkFOFcaQzVnyySW9ZoVUnxh7gIUdxyS9vqVDzo8pGhFU+3YogN2ZRk= ;{id = 2854} 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb48ub A MX RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFHS+i/OB/V/gYmS1eQTXieXIXGjsAhQQ0Ql7TW/hsUklrb0DfoyhVPG95Q== ;{id = 2854} s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_dnsseclame_ds.rpl0000644000175000017500000002477714010434640021077 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test dnssec-lame detection at ds point. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION e.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY ; no NS set. not needed for this test. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. C/0b+sqlsdSTkhd+aDXb6ELyuQreosIGBzLCtWxYGD+Q9QGB5rN8uB+4+48yhw36pd3MfeAn06AgAnJ6eu8tJg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ; fine DNSKEY response. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; correct delegation with DS ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; This server is DNSSEC LAME! ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION ANSWER ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 SECTION AUTHORITY ; dnssec-lameness detection depends on this information sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fetch_glue.rpl0000644000175000017500000000723514010434640017343 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Fetch glue when missing or timed out. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. ; is missing the glue! ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. ; is missing the glue! ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; due to ordering of answer packets, this is still outstanding, remove it STEP 21 CHECK_OUT_QUERY ENTRY_BEGIN ADJUST copy_id MATCH qname qtype REPLY QR SECTION QUESTION ns.example.com IN AAAA ENTRY_END ; some more recursion needed. ; to finish the NS query STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION . IN NS ENTRY_END STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION AUTHORITY SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/rrset_updated.rpl0000644000175000017500000000520514010434640020076 0ustar wouterwouter; This is a comment. ; config options go here. server: minimal-responses: no rrset-roundrobin: no forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN RRset is updated from other message that passes by. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; the query is sent to the forwarder - no cache yet. STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 3 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; authoritative answer REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END ; another query passes along STEP 6 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION bla.example.com. IN A ENTRY_END STEP 7 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION bla.example.com. IN A ENTRY_END STEP 8 REPLY ; This answer has updated information on ns2.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; authoritative answer REPLY QR AA RD RA NOERROR SECTION QUESTION bla.example.com. IN A SECTION ANSWER bla.example.com. IN A 10.20.30.140 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ns2.example.com. IN A 10.20.30.53 ENTRY_END STEP 9 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION bla.example.com. IN A SECTION ANSWER bla.example.com. IN A 10.20.30.140 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ns2.example.com. IN A 10.20.30.53 ENTRY_END ; original www.example.com query STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; immediate answer without an OUT_QUERY happening (checked on exit) ; also, the answer does not have AA set ; NS rrset has been updated. STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/tcp_req_order.tdir/0000755000175000017500000000000014010434640020301 5ustar wouterwouterunbound-1.13.1/testdata/tcp_req_order.tdir/tcp_req_order.test0000644000175000017500000002410314010434640024032 0ustar wouterwouter# #-- tcp_req_order.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # this test query should just work (server is up) echo "> query www1.example.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # multiple requests (from localdata) echo "> query www1.example.net. www2.example.net. www3.example.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.com" outfile | grep "10.20.30.42"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www3.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.com" outfile | grep "10.20.30.43"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query www4.example.com. www3.example.net." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www4.example.com" outfile | grep "10.20.30.44"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query a1.example.com. - a100.example.com." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN a91.a.example.com. A IN a92.a.example.com. A IN a93.a.example.com. A IN a94.a.example.com. A IN a95.a.example.com. A IN a96.a.example.com. A IN a97.a.example.com. A IN a98.a.example.com. A IN a99.a.example.com. A IN a100.a.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi grep "a.example.com. IN A" outfile echo "" echo "> query www5.example.net. www3.example.net. www.drop.net." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN www3.example.net A IN www.drop.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/tcp_req_order.tdir/tcp_req_order.pre0000644000175000017500000000162414010434640023644 0ustar wouterwouter# #-- tcp_req_order.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT tcp_req_order.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_order.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/tcp_req_order.tdir/tcp_req_order.dsc0000644000175000017500000000046614010434640023632 0ustar wouterwouterBaseName: tcp_req_order Version: 1.0 Description: Test tcp request order processing. CreationDate: Mon Jan 14 13:34:00 CET 2018 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: tcp_req_order.pre Post: tcp_req_order.post Test: tcp_req_order.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tcp_req_order.tdir/tcp_req_order.testns0000644000175000017500000000233614010434640024377 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END ; lots of noerror/nodata answers for other queries (a.. queries) ENTRY_BEGIN MATCH opcode qtype subdomain REPLY QR AA NOERROR ADJUST copy_id copy_query SECTION QUESTION a.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600 ENTRY_END unbound-1.13.1/testdata/tcp_req_order.tdir/tcp_req_order.post0000644000175000017500000000047614010434640024047 0ustar wouterwouter# #-- tcp_req_order.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/tcp_req_order.tdir/tcp_req_order.conf0000644000175000017500000000072314010434640024002 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" tcp-upstream: yes local-zone: "drop.net" deny forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/val_cnamewctonodata.rpl0000644000175000017500000001767614010434640021261 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard cname to nodata ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFDwBErFx90ixZDOdIsKz1QaXA1WzAhUAprOUlV1d5fmUiOp7DZ0TWWcM81Q= ;{id = 2854} SECTION AUTHORITY u.example.com. IN NSEC z.example.com. NSEC RRSIG u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCdc/AWOi3BbYLOClSaw7uVkEf0/AhRJLUUXhuvEsdxEXESjotO3tJZyog== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER SECTION AUTHORITY www.example.net. IN NSEC example.net. MX NSEC RRSIG www.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. Z+3/WKJEqhWoMOQLC7Yb1dTVGaqzmU0bZ2cH9jSfNQZiT0O37yzCNNUmMsW4gsJOh3o61iZ+hxpze3aO3aedqQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFDwBErFx90ixZDOdIsKz1QaXA1WzAhUAprOUlV1d5fmUiOp7DZ0TWWcM81Q= ;{id = 2854} SECTION AUTHORITY u.example.com. IN NSEC z.example.com. NSEC RRSIG u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCdc/AWOi3BbYLOClSaw7uVkEf0/AhRJLUUXhuvEsdxEXESjotO3tJZyog== ;{id = 2854} www.example.net. IN NSEC example.net. MX NSEC RRSIG www.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. Z+3/WKJEqhWoMOQLC7Yb1dTVGaqzmU0bZ2cH9jSfNQZiT0O37yzCNNUmMsW4gsJOh3o61iZ+hxpze3aO3aedqQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/black_dnskey.rpl0000644000175000017500000004274714010434640017676 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacklist for DNSKEY response ; DNSKEY not for prime but further down the chain of trust ; data response also needs a blacklist action. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.foo.com. IN A SECTION ANSWER ns.foo.com. IN A 1.2.4.7 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.foo.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ; no ns.blabla.com, try that later ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ; make priming query succeed example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. g+YoDwrCF75YCFyqYoxlF+/mNfcscnuZ6LfmfBgPLohlvCCC7jYj/wkc2fxAl3MEK0CriWkHp1hw0QQYkmbbKw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. VCDq+gfZHuziE81Uypxm2va4eXCtoD8F8YKkwNo8laMNUcXh/hvGdbHKXMMghwuJXgxLh89Diu5kywBVwb/AIg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. l3wjlbDU2y7ECix6t1pp5Rtz+qFlADRMohcRsCrnD9b99IoOL0/cTpvvf2V1VTJveIibFGhbcHTuCqAQ4G4FKA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. l3wjlbDU2y7ECix6t1pp5Rtz+qFlADRMohcRsCrnD9b99IoOL0/cTpvvf2V1VTJveIibFGhbcHTuCqAQ4G4FKA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. eVe3iQS2/a1Y57AA2QSlMU/z31xaJ2mwUU36PZh8vlv6shPpQywAT70JdX6+ZsuliRpsbY6crkVXTXJ2qpKTiQ== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. vEX2n1CksMr5jPq9d2BQJMIDwxaXdWlY5mYg+PBmOFI4xngFMKTsXa/+SfJy2SiqAgHTDI6joIo30AdQJsjdHA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. dBK6JOkKlp2G+f7mhInKnQM6DUBnEziTS+KpXzQ/5HT8/h9XkryOt4vAJKGCz0Ew3qRqjLgylsbGrcuxmIO9jA== ;{id = 30899} ENTRY_END RANGE_END ; ns.foo.com. RANGE_BEGIN 0 100 ADDRESS 1.2.4.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. hJ3nkrfyBwPcfpwc9wEwzhF5+ZKUddKBHQuZuHPZBjBwb1BsT7B7ryadttbGE3keQJiwNmK9AqvE0Zb+WkDceg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. qwUibvlPTFnxgiyCNtEJCYqJIgA8WFDqypmsO6TSYje2Rqhq4AaWEVxQwU4bdjmipCGVqtlP8mMyMQHaYNMGKA== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. sZQEMd0ys2mxPRajzBuvy4XdLNVvXMmJSnmfTHUL41d9IxbGN/ifpiIWs2MXOFPnbab05aYadrzZpT/cpDTxmQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END ; remove pending ns.blabla.com AAAA msg STEP 30 QUERY ENTRY_BEGIN REPLY RD DO CD SECTION QUESTION ns.blabla.com. IN AAAA ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD CD RA DO NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION ANSWER SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_faildnskey_ok.rpl0000644000175000017500000001343014010434640020714 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" harden-dnssec-stripped: no target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with failed DNSKEY request, but not hardened. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ;REPLY QR AA NOERROR REPLY QR AA SERVFAIL SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ;example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ;SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ;SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b1_nameerror_nonc.rpl0000644000175000017500000001021214010434640022551 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm 3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.1 name error without nc NSEC3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89ep O6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8 Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf 3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NXDOMAIN SECTION QUESTION a.c.x.w.example. IN A SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd V I2LmKusbZsT0Q== ) ;; NSEC3 RR that covers the "next closer" name (c.x.w.example) ;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh ;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi 47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRx K9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ;; NSEC3 RR that matches the closest encloser (x.w.example) ;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995 b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUi wtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== ) ;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example) ;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH +z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.c.x.w.example. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION a.c.x.w.example. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_scrub_ns.rpl0000644000175000017500000000324314010434640020072 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test scrubber to scrub NS record for lamelike reply from stub ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; must be scrubbed www.burritolovers.com. IN A 10.20.30.40 SECTION AUTHORITY example1234.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; LAME com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_xfr_ixfrisaxfr.rpl0000644000175000017500000001156514010434640021324 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: master: 1.2.3.44 ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.5 mail.example.com. 3600 IN A 1.2.3.6 mail.example.com. 3600 IN A 1.2.3.7 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with IXFR reply really is an AXFR ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER ; serial, refresh, retry, expire, minimum example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN IXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. IN NS ns.example.net. www.example.com. IN A 1.2.3.6 example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 TIME_PASSES ELAPSE 1 ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END STEP 30 TIME_PASSES ELAPSE 3600 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.6 ENTRY_END ; the zonefile was updated with new contents STEP 70 CHECK_TEMPFILE example.com FILE_BEGIN example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.6 FILE_END SCENARIO_END unbound-1.13.1/testdata/val_spurious_ns.rpl0000644000175000017500000001211114010434640020456 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with spurious unsigned NS in auth section ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY ; removed by spurious NS record removal code ;;example.com. IN NS ns.example.com. ;;example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/dns64_lookup.rpl0000644000175000017500000001343314010434640017562 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" module-config: "dns64 validator iterator" dns64-prefix: 64:ff9b::0/96 minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test dns64 lookup and synthesis. ; normal A lookup should still succeed ; AAAA is synthesized if not present. ; AAAA if present, is passed through unchanged. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 200 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION 7.6.5.in-addr.arpa. IN A SECTION AUTHORITY 7.6.5.in-addr.arpa. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 200 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 200 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ip4.example.com. IN AAAA SECTION ANSWER ; NO AAAA present SECTION AUTHORITY example.com. IN SOA a. b. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ip4.example.com. IN A SECTION ANSWER ip4.example.com. IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION broken.example.com. IN AAAA SECTION ANSWER ; NO AAAA present SECTION AUTHORITY example.com. IN SOA a. b. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION broken.example.com. IN A SECTION ANSWER broken.example.com. IN A 5.6.7.8 broken.example.com. IN A \# 3 030405 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ip6.example.com. IN AAAA SECTION ANSWER ip6.example.com. IN AAAA 1:2:3::4 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 8.7.6.5.in-addr.arpa. IN PTR SECTION ANSWER 8.7.6.5.in-addr.arpa. PTR ip4.example.com. SECTION AUTHORITY 7.6.5.in-addr.arpa. IN NS ns.example.com. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; synthesize from A record 5.6.7.8 STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ip4.example.com. IN AAAA ENTRY_END ; recursion happens here. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ip4.example.com. IN AAAA SECTION ANSWER ip4.example.com. IN AAAA 64:ff9b::506:708 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; this node has its own ipv6 address STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ip6.example.com. IN AAAA ENTRY_END ; recursion happens here. STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ip6.example.com. IN AAAA SECTION ANSWER ip6.example.com. IN AAAA 1:2:3::4 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; test ptr lookup STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION 8.0.7.0.6.0.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.9.f.f.4.6.0.0.ip6.arpa. IN PTR ENTRY_END ; recursion happens here. STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION 8.0.7.0.6.0.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.9.f.f.4.6.0.0.ip6.arpa. IN PTR SECTION ANSWER 8.0.7.0.6.0.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.9.f.f.4.6.0.0.ip6.arpa. IN PTR ip4.example.com. SECTION AUTHORITY 7.6.5.in-addr.arpa. IN NS ns.example.com. ENTRY_END ; synthesize from broken, malformed A records STEP 80 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION broken.example.com. IN AAAA ENTRY_END ; recursion happens here. STEP 90 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION broken.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN SOA a. b. 1 2 3 4 5 SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/views.rpl0000644000175000017500000000757414010434640016401 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no access-control: 10.10.10.0/24 allow access-control-view: 10.10.10.10/32 "view1" access-control-view: 10.10.10.20/32 "view2" access-control-view: 10.10.10.30/32 "view3" access-control-view: 10.10.10.40/32 "view4" local-zone: "example.com." redirect local-data: 'example.com. IN TXT "global"' view: name: "view1" local-zone: "nomatch.example.com." redirect local-data: 'nomatch.example.com. IN TXT "view 1"' view-first: no view: name: "view2" local-zone: "example.com." redirect local-data: 'example.com. IN TXT "view 2"' ; view-first default = no view: name: "view3" local-zone: "nomatch.example.com." redirect local-data: 'nomatch.example.com. IN TXT "view 3"' view-first: yes view: name: "view4" local-zone: "example.com." redirect local-data: 'example.com. IN TXT "view 4"' view-first: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test view specific local-zone and local-data elements ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN TXT SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN TXT SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN TXT SECTION ANSWER example.com. IN TXT "auth data" SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ADDRESS 10.10.10.10 ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION example.com. IN TXT SECTION ANSWER example.com. IN TXT "auth data" SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 3 QUERY ADDRESS 10.10.10.20 ENTRY_BEGIN SECTION QUESTION example.com. IN TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION example.com. IN TXT SECTION ANSWER example.com. IN TXT "view 2" ENTRY_END STEP 5 QUERY ADDRESS 10.10.10.30 ENTRY_BEGIN SECTION QUESTION example.com. IN TXT ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION example.com. IN TXT SECTION ANSWER example.com. IN TXT "global" ENTRY_END STEP 7 QUERY ADDRESS 10.10.10.40 ENTRY_BEGIN SECTION QUESTION example.com. IN TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION example.com. IN TXT SECTION ANSWER example.com. IN TXT "view 4" ENTRY_END STEP 9 QUERY ADDRESS 10.10.10.50 ENTRY_BEGIN SECTION QUESTION example.com. IN TXT ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION example.com. IN TXT SECTION ANSWER example.com. IN TXT "global" ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_noadwhennodo.rpl0000644000175000017500000001111314010434640020551 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test if AD bit is returned on non-DO query. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. ; it is validated, but no AD bit, because no AD was requested. ; (this is a copy of val_positive.rpl). STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_prefetch_change.rpl0000644000175000017500000001632514010434640021366 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" prefetch: "yes" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver prefetch and a moved domain ; for bug #425. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 500 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. (before sale of domain) RANGE_BEGIN 0 30 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. 86400 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 86400 IN A 192.168.0.1 ENTRY_END RANGE_END ; a.gtld-servers.net. (after sale of domain) RANGE_BEGIN 40 500 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END RANGE_END ; ns.example.com. first owner RANGE_BEGIN 0 500 ADDRESS 192.168.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 86400 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 86400 IN A 192.168.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.1.1.1 SECTION AUTHORITY example.com. 86400 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 86400 IN A 192.168.0.1 ENTRY_END RANGE_END ; ns.example.com. new owner RANGE_BEGIN 0 500 ADDRESS 172.16.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION old-ns.example.com. IN A SECTION ANSWER old-ns.example.com. 86400 IN A 172.16.0.1 SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.2.2.2 SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.1.1.1 SECTION AUTHORITY example.com. 86400 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 86400 IN A 192.168.0.1 ENTRY_END ; after 1800 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 1800 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.1.1.1 SECTION AUTHORITY example.com. 84600 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 84600 IN A 192.168.0.1 ENTRY_END ; after 1440 we are 360 seconds before the expiry ; but it still contacts the old-ns STEP 50 TIME_PASSES ELAPSE 1440 STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 360 IN A 10.1.1.1 SECTION AUTHORITY example.com. 83160 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 83160 IN A 192.168.0.1 ENTRY_END STEP 80 TRAFFIC ; let traffic flow for prefetch to happen ; we updated from the old-ns. STEP 90 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 100 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.1.1.1 SECTION AUTHORITY example.com. 83160 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 83160 IN A 192.168.0.1 ENTRY_END ; the NS record is now 10% from expiry (8640 TTL left). ; and the A record has expired completely, retry. STEP 110 TIME_PASSES ELAPSE 74520 ; the NS record should have timed out. ; but you see the full TTL here, this is only for *this query* ; in the cache itself its 8640, not 86400. STEP 120 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.1.1.1 SECTION AUTHORITY example.com. 8640 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 8640 IN A 192.168.0.1 ENTRY_END ; get it from cache STEP 140 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 150 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.1.1.1 SECTION AUTHORITY example.com. 8640 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 8640 IN A 192.168.0.1 ENTRY_END ; the NS record times out after 8640 seconds. STEP 160 TIME_PASSES ELAPSE 8641 ; fetch it STEP 170 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 180 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.2.2.2 SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END ; a reply from cache STEP 190 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 200 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.2.2.2 SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_class_any.rpl0000644000175000017500000001200114010434640020220 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test lookup of class any response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. ANY A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. ANY A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/subnet_val_positive.crpl0000644000175000017500000001417414010434640021465 0ustar wouterwouter; Test subnet option in combination with dnssec server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" trust-anchor-signaling: no target-fetch-policy: "0 0 0 0 0" send-client-subnet: 1.2.3.4 max-client-subnet-ipv4: 17 module-config: "subnetcache validator iterator" verbosity: 3 fake-sha1: yes fake-dsa: yes qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with positive response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ednsdata REPLY QR RD RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+005+60946.key0000644000175000017500000000024214010434640020605 0ustar wouterwouterexample.com. 3600 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} unbound-1.13.1/testdata/fwd_three_service.tdir/0000755000175000017500000000000014010434640021140 5ustar wouterwouterunbound-1.13.1/testdata/fwd_three_service.tdir/fwd_three_service.dsc0000644000175000017500000000053114010434640025321 0ustar wouterwouterBaseName: fwd_three_service Version: 1.0 Description: Forward three queries at once, using one thread. CreationDate: Wed Mar 28 15:26:21 CEST 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_three_service.pre Post: fwd_three_service.post Test: fwd_three_service.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_three_service.tdir/fwd_three_service.testns0000644000175000017500000000101014010434640026061 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www1 IN A SECTION ANSWER www1 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.50 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.60 ENTRY_END unbound-1.13.1/testdata/fwd_three_service.tdir/fwd_three_service.pre0000644000175000017500000000163714010434640025346 0ustar wouterwouter# #-- fwd_three_service.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT -f 9 fwd_three_service.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_three_service.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_three_service.tdir/fwd_three_service.conf0000644000175000017500000000044514010434640025501 0ustar wouterwouterserver: verbosity: 2 num-threads: 1 interface: 127.0.0.1 port: @PORT@ outgoing-range: 2 directory: "" pidfile: "unbound.pid" chroot: "" username: "" num-queries-per-thread: 1024 use-syslog: no do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_three_service.tdir/fwd_three_service.test0000644000175000017500000000242614010434640025534 0ustar wouterwouter# #-- fwd_three_service.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www1.example.com." dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer for single query" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> do three queries" dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & digpid1=$! dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & digpid2=$! dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & digpid3=$! sleep 5 kill -9 $digpid1 kill -9 $digpid2 kill -9 $digpid3 echo "> cat outfile1" cat outfile1 echo "> cat outfile2" cat outfile2 echo "> cat outfile3" cat outfile3 echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answers for three queries" if grep "10.20.30.40" outfile1; then echo "1 is OK" else echo "1 is not OK" exit 1 fi if grep "10.20.30.50" outfile2; then echo "2 is OK" else echo "2 is not OK" exit 1 fi if grep "10.20.30.60" outfile3; then echo "3 is OK" else echo "3 is not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_three_service.tdir/fwd_three_service.post0000644000175000017500000000075114010434640025541 0ustar wouterwouter# #-- fwd_three_service.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh # kill fwder kill_pid $FWD_PID # find all extra forked testns and kill them. pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` for p in $pidlist; do kill_pid $p done # kill unbound kill_pid $UNBOUND_PID unbound-1.13.1/testdata/test_signatures.20000644000175000017500000000201314010434640020012 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; DNSKEY used for testing, from april 2008 ENTRY_BEGIN SECTION QUESTION cesar.sec3.br. IN DNSKEY SECTION ANSWER cesar.sec3.br. 43200 IN DNSKEY 257 3 3 AMAdw+X4IcinbsSOXamwV4BrJVbRjSJ63DYRV0NLR4W5cDMEQGmB3Lci ybjLvaEogs9RDmjhxQrQJRfaIVMG11LtOwlTPBr4yzyeK9zzeZPAQz2F 9yCCPqgUdts51v4XeK5evtn+b4AB7t/j+v7Vb+26k8No6hmJiRJAy59N Fpzrt5FoY5qFZ8QbPl59nzEcXTbOiXBNSu9mQbe/jFH5p9NP4KB0iNL/ oAthNIVVsDG8hQFh1hE5YlDNLxYY3U+TODjWx//DZvkn5Tyyvp7I6b33 oJiq ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION cesar.sec3.br. IN SOA SECTION ANSWER cesar.sec3.br. 43200 IN SOA home.kuroiwa.eng.br. hostmaster.cesar.sec3.br. 2008040903 86400 86400 8640000 600 cesar.sec3.br. 43200 IN RRSIG SOA 3 3 43200 20081010000000 20080410122550 14996 cesar.sec3.br. AJOGbuGOMggPspEBhIc58I8BXUHqR+DKiZqGZRwu9jMTgAX6JCPunSI= ;{id = 14996} ENTRY_END unbound-1.13.1/testdata/black_ds.rpl0000644000175000017500000003414414010434640016777 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacklist for DS response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ; no ns.blabla.com, try that later ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ; make priming query succeed example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. hJ3nkrfyBwPcfpwc9wEwzhF5+ZKUddKBHQuZuHPZBjBwb1BsT7B7ryadttbGE3keQJiwNmK9AqvE0Zb+WkDceg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. qwUibvlPTFnxgiyCNtEJCYqJIgA8WFDqypmsO6TSYje2Rqhq4AaWEVxQwU4bdjmipCGVqtlP8mMyMQHaYNMGKA== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. sZQEMd0ys2mxPRajzBuvy4XdLNVvXMmJSnmfTHUL41d9IxbGN/ifpiIWs2MXOFPnbab05aYadrzZpT/cpDTxmQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END ; remove pending ns.blabla.com AAAA msg STEP 30 QUERY ENTRY_BEGIN REPLY RD DO CD SECTION QUESTION ns.blabla.com. IN AAAA ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD CD RA DO NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION ANSWER SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_fwdstub.rpl0000644000175000017500000000764514010434640017744 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. forward-zone: name: "example.com" forward-addr: 10.0.0.1 stub-zone: name: "sub.example.com" stub-addr: 10.0.0.2 CONFIG_END SCENARIO_BEGIN Test iterative resolve with a stub under a forward zone ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; forwarder for example.com. RANGE_BEGIN 0 100 ADDRESS 10.0.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.0.0.4 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; fail all other queries ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.com. IN A ENTRY_END RANGE_END ; stub for sub.example.com. RANGE_BEGIN 0 100 ADDRESS 10.0.0.2 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.0.0.5 SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; check if forwarder is honored STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.0.0.4 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; try to resolve from stub zone STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.sub.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.0.0.5 SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.44 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_prefetch_childns.rpl0000644000175000017500000001067514010434640021567 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" prefetch: "yes" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver prefetch from child nameserver ; child NS record has longer TTL than A record and is thus valid for prefetch. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 50 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; after 900 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 900 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 900 IN A 10.20.30.40 SECTION AUTHORITY example.com. 2700 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 2700 IN A 1.2.3.4 ENTRY_END ; after 720 we are 180 seconds before the expiry ; (the authority changes behind the scenes to detect new lookup) STEP 50 TIME_PASSES ELAPSE 720 STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 180 IN A 10.20.30.40 SECTION AUTHORITY example.com. 1980 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1980 IN A 1.2.3.4 ENTRY_END STEP 80 TRAFFIC ; let traffic flow for prefetch to happen ; above a cache reply with 10% of the original TTL ; but the actual cache is changed, try to get that STEP 120 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY ; The NS rrset (from the child-side NS) is not updated but keeps counting down example.com. 1980 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1980 IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_stub_noroot.rpl0000644000175000017500000000207314010434640020631 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 81.187.81.187 stub-zone: name: "lp0.eu" stub-addr: 81.2.80.65 stub-prime: no CONFIG_END SCENARIO_BEGIN Test resolve of stub zone without root prime. ; this server does not respond. (for the root) RANGE_BEGIN 0 100 ADDRESS 81.187.81.187 ENTRY_BEGIN MATCH ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION . IN NS ENTRY_END RANGE_END ; lp0.eu server RANGE_BEGIN 0 100 ADDRESS 81.2.80.65 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION proxima.lp0.eu. IN A SECTION ANSWER proxima.lp0.eu. IN A 81.2.80.65 SECTION AUTHORITY lp0.eu. IN NS proxima.lp0.eu. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION proxima.lp0.eu. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION proxima.lp0.eu. IN A SECTION ANSWER proxima.lp0.eu. IN A 81.2.80.65 SECTION AUTHORITY lp0.eu. IN NS proxima.lp0.eu. ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_packets.10000644000175000017500002366667614010434640017323 0ustar wouterwouter25001 00000000700240004aa200000204059801010402 000080010000000000000000 25002 d4df0000000100000000000005686965726f026e6c00000f0001 d4df8000000100000002000005686965726f026e6c00000f0001c00c00020001000151800018036e73310e7765626d61727463656e7472616c03636f6d00c00c00020001000151800006036e7332c02a 25003 2589000000010000000000000c6769657362657273626f7577026e6c0000010001 2589800000010000000200000c6769657362657273626f7577026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 25004 824a000000010000000000000377777703746d66026e6c0000010001 824a800000010000000200000377777703746d66026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c02c 25005 b5c9ca3d50104320f4120000000000000000 25006 b5c9ca3d5018432054550000009010c0000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe52403c4fd20003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000 25007 c8cd00000001000000000000037777770a73706f727468756d6f72026e6c0000010001 c8cd80000001000000030000037777770a73706f727468756d6f72026e6c0000010001c01000020001000151800013036e733109746572612d6279746503636f6d00c01000020001000151800006036e7332c033c01000020001000151800006036e7333c033 25008 a3ad01000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 a3ad81000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 25009 b5c9ca4b50114312f37f0000000000000000 25010 000000007002400026fc00000204059801010402 000080010000000000000000 25011 063d00000001000000000000046f6b656d026e6c00000f0001 063d80000001000000020000046f6b656d026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c029 25012 62d200000001000000000000036e733109756e69736f75726365026e6c0000010001 62d280000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 25013 191d00000001000000000000064c65776d6172026e6c0000ff0001 191d80000001000000020002064c65776d6172026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 25014 b5c9ca4c50104312f37e0000000000000000 25015 b5ca72d85010432027d10000000000000000 b5caf2d40000000000000000 25016 613f000000010000000000000469632d73026e6c00001c0001 613f800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25017 a11200000001000000000000037777770472757669026e6c0000010001 a11280000001000000020002037777770472757669026e6c0000010001c01000020001000151800011036e73320a636c75737465726e6574c015c01000020001000151800006036e7331c02dc02900010001000151800004d5f72f3cc046000100010001518000045054edf5 25018 b5ca72d8501843209a9300000090ff40000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe52403c4fd20003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000 b5caf2d40000000000000000 25019 a5480000000100000000000006787334616c6c026e6c00000f0001 a5488000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 25020 b5ca72e650114312273e0000000000000000 b5caf2e40000000000000000 25021 00000000700240006b1b00000204059801010402 000080010000000000000000 25022 b5ca72e750104312273d0000000000000000 b5caf2e40000000000000000 25023 b5cb35d550104320a8f20000000000000000 b5cbb5d40000000000000000 25024 b5cb35d550184320a275000000907880000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe52403c4fd20003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000 b5cbb5d40000000000000000 25025 b5cb35e350114312a85f0000000000000000 b5cbb5e40000000000000000 25026 b5cb35e450104312a85e0000000000000000 b5cbb5e40000000000000000 25027 2f98000000010000000000000b636c617373696372656e74026e6c00000f0001 2f98800000010000000200000b636c617373696372656e74026e6c00000f0001c00c0002000100015180001004646e73350669706461793102626500c00c0002000100015180000d036e733306697064617932c038 25028 b8cb00000001000000000000026e73076e656473746174026e6c0000010001 b8cb80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25029 b94b00000001000000000000026e73076e656473746174026e6c00001c0001 b94b80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25030 b22300000001000000000000026e73076e656473746174026e6c0000260001 b22380000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25031 06e900000001000000000000036e7332076e656473746174026e6c0000010001 06e980000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25032 3eb900000001000000000000036e7332076e656473746174026e6c00001c0001 3eb980000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25033 6b9f00000001000000000000036e7332076e656473746174026e6c0000260001 6b9f80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25034 cab100000001000000000000036e7333076e656473746174026e6c0000010001 cab180000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25035 0fc200000001000000000000036e7333076e656473746174026e6c00001c0001 0fc280000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25036 c8d000000001000000000000036e7333076e656473746174026e6c0000260001 c8d080000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25037 623800000001000000000000036e7334076e656473746174026e6c0000010001 623880000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25038 0d3900000001000000000000036e7334076e656473746174026e6c00001c0001 0d3980000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25039 671500000001000000000000036e7334076e656473746174026e6c0000260001 671580000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25040 aa9900000001000000000000126a6f6f7374656e626f757773746f6666656e026e6c00000f0001 aa9980000001000000020002126a6f6f7374656e626f757773746f6666656e026e6c00000f0001c00c0002000100015180000c04646e73310470696e73c01fc00c0002000100015180000704646e7332c038c03300010001000151800004d9c26101c04b00010001000151800004d9c26002 25041 1a7900000001000000000000074d4c424d414c4c026e6c0000020001 1a7984030001000000010000074d4c424d414c4c026e6c0000020001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 25042 0e5200000001000000000000046d61696c0b6b61617274656e68756973026e6c0000010001 0e5280000001000000030003046d61696c0b6b61617274656e68756973026e6c0000010001c01100020001000151800009036e7331027a73c01dc01100020001000151800006036e7332c035c01100020001000151800006036e7333c035c03100010001000151800004d5ef829fc04600010001000151800004d5ef8005c05800010001000151800004d5ef82a0 25043 6a3600000001000000000000036e7332027a73026e6c00001c0001 6a3680000001000000030003036e7332027a73026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02700010001000151800004d5ef829fc00c00010001000151800004d5ef8005c04700010001000151800004d5ef82a0 25044 a86500000001000000000000036e7332027a73026e6c0000260001 a86580000001000000030003036e7332027a73026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02700010001000151800004d5ef829fc00c00010001000151800004d5ef8005c04700010001000151800004d5ef82a0 25045 d4ae00000001000000000000036e7333027a73026e6c00001c0001 d4ae80000001000000030003036e7333027a73026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02700010001000151800004d5ef829fc03900010001000151800004d5ef8005c00c00010001000151800004d5ef82a0 25046 118600000001000000000000036e7331027a73026e6c00001c0001 118680000001000000030003036e7331027a73026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef829fc03500010001000151800004d5ef8005c04700010001000151800004d5ef82a0 25047 80e200000001000000000000036e7331027a73026e6c0000260001 80e280000001000000030003036e7331027a73026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef829fc03500010001000151800004d5ef8005c04700010001000151800004d5ef82a0 25048 24dd000000010000000000000565666e657406787334616c6c026e6c0000010001 24dd800000010000000300020565666e657406787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 25049 523c00000001000000000000026e73067a6f6e6e6574026e6c0000010001 523c80000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 25050 35400000000100000000000009652d6c756e61746963026e6c0000010001 35408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 25051 eda10000000100000000000008686172746c696562026e6c00000f0001 eda18000000100000003000308686172746c696562026e6c00000f0001c00c00020001000151800013046e7330310b786c2d696e7465726e6574c015c00c00020001000151800007046e733032c02ec00c00020001000151800007046e733033c02ec0290001000100015180000451045e10c048000100010001518000043eddcf2ec05b00010001000151800004d5540e0e 25052 1999000000010000000000000462617261026e6c00000f0001 1999800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 25053 8f6d00000001000000000000087a77656567657273026e6c00000f0001 8f6d80000001000000020000087a77656567657273026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c034 25054 2f09000000010000000000000377777707766f6c64657273026e6c0000010001 2f09800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 25055 fcfd00000001000000000000036e7331066c616e646973026e6c0000260001 fcfd80000001000000020001036e7331066c616e646973026e6c0000260001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c2b2b6a0 25056 0b990010000100000000000103777777066c7972696373026e6c00000100010000290800000080000000 0b998000000100000003000403777777066c7972696373026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c017c01000020001000151800006036e7330c02ec01000020001000151800006036e7333c02ec02b00010001000151800004c3561682c04b00010001000151800004c3561683c05d00010001000151800004d5de0bfa0000291000000000000000 25057 3fcb00000001000000000000036961650672656d6f7665026e6c0000ff0001 3fcb80000001000000020002036961650672656d6f7665026e6c0000ff0001c0100002000100015180000f036e733108696e7465726d6178c017c01000020001000151800006036e7332c02fc02b00010001000151800004505fa002c04600010001000151800004505fac02 25058 c28f00000001000000000000036d78310b696e7465727374726f6f6d026e6c0000010001 c28f80000001000000020002036d78310b696e7465727374726f6f6d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0300001000100015180000450558121c04200010001000151800004d58141c4 25059 910c000000010000000000000469632d73026e6c00000f0001 910c800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25060 f2f100000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 f2f180000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 25061 02d20000000100000000000006636861726973026e6c0000ff0001 02d28000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25062 e4ce0000000100000000000003777777066c7972696373026e6c0000010001 e4ce8000000100000003000303777777066c7972696373026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c017c01000020001000151800006036e7330c02ec01000020001000151800006036e7333c02ec02b00010001000151800004c3561682c04b00010001000151800004c3561683c05d00010001000151800004d5de0bfa 25063 322a0000000100000000000004696e666f0a65636974656c65636f6d026e6c0000010001 322a8000000100000002000204696e666f0a65636974656c65636f6d026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000e036e733207626265796f6e64c01cc030000100010001518000043eb1a493c042000100010001518000043eb19002 25064 e5af0000000100000000000004616e73330774697363616c69026e6c0000010001 e5af8000000100000003000204616e73330774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 25065 be150000000100000000000003616d6303757661026e6c0000ff0001 be158000000100000002000203616d6303757661026e6c0000ff0001c0100002000100015180000e086261726c61657573026963c010c01000020001000151800006036e7331c010c0280001000100015180000491124432c0420001000100015180000491122710 25066 38d500000001000000000000026e73076575726f6e6574026e6c0000010001 38d580000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 25067 50ad00000001000000000000026e73076575726f6e6574026e6c0000260001 50ad80000001000000020001026e73076575726f6e6574026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 25068 80cf00000001000000000000036e733203757063026e6c0000010001 80cf80000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 25069 ba5900000001000000000000036e733203757063026e6c0000260001 ba5980000001000000030003036e733203757063026e6c0000260001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 25070 c73f000000010000000000000e6d777765626372656174696f6e73026e6c0000ff0001 c73f800000010000000200020e6d777765626372656174696f6e73026e6c0000ff0001c00c0002000100015180000d0a6c656b6b657264696e67c00cc00c0002000100015180000c09626c61636b62697264c00cc02f00010001000151800004d994a332c04800010001000151800004507ed0a6 25071 0aa0000000010000000000000679656c6c6f77026e6c00000f0001 0aa0800000010000000300010679656c6c6f77026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc013c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c045c027000100010001518000043efa0202 25072 55ae00000001000000000000036e7332076e656473746174026e6c0000010001 55ae80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25073 2ad700000001000000000000036e7332076e656473746174026e6c0000260001 2ad780000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25074 60c500000001000000000000036e7334076e656473746174026e6c0000010001 60c580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25075 653e00000001000000000000036e7334076e656473746174026e6c0000260001 653e80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25076 610b00000001000000000000036e7332076e656473746174026e6c0000010001 610b80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25077 841c00000001000000000000036e7334076e656473746174026e6c0000010001 841c80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25078 420e00000001000000000000036e7332076e656473746174026e6c0000260001 420e80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25079 a10700000001000000000000036e7334076e656473746174026e6c0000260001 a10780000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25080 1845000000010000000000000377777708726f6f7362657267026e6c0000010001 1845800000010000000200020377777708726f6f7362657267026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 25081 8dd100000001000000000000026e730462617274026e6c0000010001 8dd180000001000000020002026e730462617274026e6c0000010001c00f00020001000151800012036e73310b7669616e6574776f726b73c014c00f00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 25082 5152000000010000000000000469632d73026e6c00001c0001 5152800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25083 82d10000000100000000000008736368656e6b6276026e6c00000f0001 82d18000000100000002000108736368656e6b6276026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 25084 088300100001000000000001076e65772d776179026e6c00001c00010000290800000080000000 088380000001000000020002076e65772d776179026e6c00001c0001c00c0002000100015180000e026e730873797374656d6563c014c00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004c2e5a4020000291000000000000000 25085 e29800000001000000000000024b47024e4c00001c0001 e29880000001000000020000024b47024e4c00001c0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c027 25086 248900000001000000000000066e61616d6d6f026e6c0000010001 248980000001000000030002066e61616d6d6f026e6c0000010001c00c0002000100015180000e026e730873797374656d6563c013c00c00020001000151800006036e7333c02ac00c00020001000151800006036e7332c02ac02700010001000151800004c2e5a402c05300010001000151800004c2e5a404 25087 10a9000000010000000000000a5354494e472d46524545026e6c0000020001 10a9840300010000000100000a5354494e472d46524545026e6c0000020001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 25088 19a30000000100000000000003746f6e0664756d616e73026e6c0000010001 19a38000000100000002000003746f6e0664756d616e73026e6c0000010001c01000020001000151800011036e733307657873696c6961036e657400c01000020001000151800006036e7332c02f 25089 f55c00000001000000000000037777770a6d65746b6e756666656c026e6c0000010001 f55c80000001000000020002037777770a6d65746b6e756666656c026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c01bc01000020001000151800006036e7332c033c02f000100010001518000045054ed14c04c00010001000151800004d5f72f14 25090 32b30000000100000000000003777777036b6e6f026e6c0000010001 32b38000000100000003000203777777036b6e6f026e6c0000010001c0100002000100015180000d036e733106776964657873c014c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 25091 b903000000010000000000000377777709626d776773636c7562026e6c0000010001 b903800000010000000200000377777709626d776773636c7562026e6c0000010001c01000020001000151800019036e733710666c6178652d776562686f7374696e6702626500c01000020001000151800006036e7338c032 25092 001c00000001000000000000056669716173026e6c0000ff0001 001c80000001000000020000056669716173026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 25093 d11200000001000000000000036d783103626974026e6c0000010001 d11280000001000000030003036d783103626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 25094 81ba0000000100000000000008747269706f646276026e6c00000f0001 81ba8000000100000002000008747269706f646276026e6c00000f0001c00c0002000100015180001504646e73310a65617379736572766572036e657400c00c0002000100015180000704646e7332c02e 25095 7f6f00000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 7f6f80000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 25096 79f80000000100000000000004616e73310774697363616c69026e6c0000260001 79f88000000100000003000204616e73310774697363616c69026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 25097 ed810000000100000000000003626c3102626c06787334616c6c026e6c0000010001 ed818000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25098 b41e0000000100000000000003626c3102626c06787334616c6c026e6c0000260001 b41e8000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25099 35d10000000100000000000006636861726973026e6c00000f0001 35d18000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25100 c42a0000000100000000000006776174736f6e0576616e636f026e6c0000010001 c42a8000000100000002000006776174736f6e0576616e636f026e6c0000010001c01300020001000151800012036e7331086e65746e616d6573036e657400c01300020001000151800006036e7332c031 25101 56f600000001000000000000026e7306766576696461026e6c0000010001 56f680000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 25102 106f0000000100000000000004616e73320774697363616c69026e6c0000260001 106f8000000100000003000204616e73320774697363616c69026e6c0000260001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 25103 902300000001000000000000076e65772d776179026e6c00001c0001 902380000001000000020001076e65772d776179026e6c00001c0001c00c0002000100015180000e026e730873797374656d6563c014c00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004c2e5a402 25104 107700000001000000000000037777770963686174676c6f6265026e6c0000010001 107780000001000000020000037777770963686174676c6f6265026e6c0000010001c0100002000100015180000f036e733105796b6f6f6e036e657400c01000020001000151800006036e7332c032 25105 ab330000000100000000000006787334616c6c026e6c00000f0001 ab338000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 25106 248b0000000100000000000003777777086e6c2d706c617a61026e6c0000010001 248b8000000100000002000003777777086e6c2d706c617a61026e6c0000010001c0100002000100015180000e026e7308696e7465726d6178c019c0100002000100015180000d0670696361726403647376c019 25107 30cc000000010000000000000b6d792d736f756c6d617465026e6c0000ff0001 30cc800000010000000200000b6d792d736f756c6d617465026e6c0000ff0001c00c00020001000151800011036e733207726f6b73636f6d036e657400c00c00020001000151800006036e7333c030 25108 cc0a00000001000000000000037777770b646f6d65696e706c617a61026e6c0000010001 cc0a80000001000000020000037777770b646f6d65696e706c617a61026e6c0000010001c0100002000100015180000e026e7308696e7465726d6178c01cc0100002000100015180000d0670696361726403647376c01c 25109 f63100000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 f63180000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 25110 5b1900000001000000000000037777770d72656461637469657374617274026e6c0000010001 5b1980000001000000030002037777770d72656461637469657374617274026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 25111 70470000000100000000000006787334616c6c026e6c00001c0001 70478000000100000003000206787334616c6c026e6c00001c0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 25112 495c000000010000000000000377777707746d6f6269656c026e6c0000010001 495c800000010000000200000377777707746d6f6269656c026e6c0000010001c01000020001000151800016036e73320c6c6f76656c6c736e616d6573036f726700c01000020001000151800006036e7333c030 25113 f813000000010000000000000864656c6f69747465026e6c00000f0001 f813800000010000000300020864656c6f69747465026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000b026e73026e6c036e657400c02900010001000151800004aac21423c03a00010001000151800004aac21424 25114 a1b000000001000000000000085268656e616e6961026e6c0000010001 a1b080000001000000020001085268656e616e6961026e6c0000010001c00c0002000100015180000d026e7307616e74656e6e61c015c00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02900010001000151800004d995dd13 25115 21ba0000000100000000000006612d6c696e65026e6c00000f0001 21ba8000000100000002000206612d6c696e65026e6c00000f0001c00c00020001000151800010036e733109756e69736572766572c013c00c00020001000151800006036e7332c02bc02700010001000151800004c3454b03c04300010001000151800004d119a2fa 25116 656300000001000000000000036e733109666972737466696e64026e6c0000010001 656380000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25117 3c9f0000000100000000000005736d7470320873797374656d6563026e6c0000010001 3c9f8000000100000003000205736d7470320873797374656d6563026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c01200020001000151800006036e7332c012c02f00010001000151800004c2e5a402c05700010001000151800004c2e5a404 25118 f864000000010000000000000377777709616c62657374656c64026e6c0000010001 f864800000010000000200020377777709616c62657374656c64026e6c0000010001c0100002000100015180000e036e7331076465636c617265c01ac01000020001000151800006036e7332c032c02e000100010001518000043ed4528dc048000100010001518000045054e9de 25119 373f00000001000000000000037777770c6631636f6d70657469746965026e6c0000010001 373f80000001000000030003037777770c6631636f6d70657469746965026e6c0000010001c0100002000100015180000c036e7331056d61786573c01dc01000020001000151800006036e7332c035c01000020001000151800006036e7333c035c031000100010001518000045045402ec049000100010001518000045045402fc05b000100010001518000045045440a 25120 eac900000001000000000000036e733206766576696461026e6c0000010001 eac980000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 25121 dc86000000010000000000000469632d73026e6c00000f0001 dc86800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25122 c1aa0000000100000000000003777777077669646f6d6573026e6c0000010001 c1aa8000000100000003000303777777077669646f6d6573026e6c0000010001c0100002000100015180000c026e73067369676e6574c018c01000020001000151800006036e7331c02fc01000020001000151800006036e7332c02fc02c00010001000151800004c3561242c04400010001000151800004d915f142c05600010001000151800004d915f141 25123 01a4000000010000000000000762617661726961026e6c00000f0001 01a4800000010000000200020762617661726961026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 25124 f7aa00000001000000000000037777770977616464656e7a6565026e6c0000010001 f7aa80000001000000030003037777770977616464656e7a6565026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004c1adf9c3c048000100010001518000043e70ec3cc05a00010001000151800004c1ac0bae 25125 9a960000000100000000000003626c3102626c06787334616c6c026e6c0000010001 9a968000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25126 7edc000000010000000000000773627672696573026e6c00001c0001 7edc800000010000000300020773627672696573026e6c00001c0001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 25127 9ed400000001000000000000026e730b6973642d686f6c6c616e64026e6c0000260001 9ed480000001000000020002026e730b6973642d686f6c6c616e64026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 25128 cf6a00000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000260001 cf6a80000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 25129 e96a000000010000000000000377777707616c6c6173736f026e6c0000010001 e96a800000010000000200020377777707616c6c6173736f026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c018c01000020001000151800006036e7332c02fc02c00010001000151800004d453c005c04a00010001000151800004d453c006 25130 20b700000001000000000000037777770a656d657373656e676572026e6c0000010001 20b784030001000000010000037777770a656d657373656e676572026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 25131 fa820000000100000000000003777777056b616d7066026e6c0000010001 fa828000000100000002000003777777056b616d7066026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c02e 25132 ce7d000000010000000000000377777703616b670473697465026e6c0000010001 ce7d800000010000000300010377777703616b670473697465026e6c0000010001c0140002000100015180000d026e7307696e746f756368c019c01400020001000151800010026e7307696e746f756368036e657400c01400020001000151800007046e733031c049c02d00010001000151800004d413c001 25133 05bb000000010000000000000b72656c617877696a7a6572026e6c0000010001 05bb800000010000000200010b72656c617877696a7a6572026e6c0000010001c00c0002000100015180000c036e7331056b706e6873c018c00c0002000100015180000d03646e73036b706e03636f6d00c02c0001000100015180000491072163 25134 f41e000000010000000000000469632d73026e6c0000ff0001 f41e800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25135 1ff9000000010000000000000a636f6d2d6d756e697479026e6c0000010001 1ff9800000010000000200020a636f6d2d6d756e697479026e6c0000010001c00c0002000100015180000a036e7331036e7873c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 25136 93b40000000100000000000008686f76656c696e67026e6c0000010001 93b48000000100000002000208686f76656c696e67026e6c0000010001c00c0002000100015180000e036e733207737570706f7274c015c00c00020001000151800006036e7334c02dc02900010001000151800004c372e7c8c04300010001000151800004c372e6fe 25137 583f000000010000000000000377777705692d6d6564026e6c0000010001 583f800000010000000300020377777705692d6d6564026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c016c01000020001000151800006036e7332c02ec01000020001000151800012036e7333086c65617365776562036f726700c02a000100010001518000043ed44079c045000100010001518000043ed4407a 25138 de3400100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 de3480000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 25139 6f1a00100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 6f1a80000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 25140 95ba0000000100000000000010436f6c696e612d526f7474657264616d026e6c00000f0001 95ba8000000100000002000010436f6c696e612d526f7474657264616d026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c035 25141 271e000000010000000000000377777707766f6c64657273026e6c0000010001 271e800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 25142 fccd00100001000000000001026e7303786f73026e6c00000100010000290800000080000000 fccd80000001000000020002026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe20000291000000000000000 25143 fbe80000000100000000000004686f6d650774697363616c69026e6c0000010001 fbe88000000100000003000204686f6d650774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 25144 34f300000001000000000000037777770b7761726e65726d75736963026e6c0000010001 34f380000001000000030000037777770b7761726e65726d75736963026e6c0000010001c0100002000100015180001205646e73303106776d672d697303636f6d00c0100002000100015180000805646e733032c036c0100002000100015180000805646e733033c036 25145 db52000000010000000000000a696e7465726472617065026e6c00001c0001 db52800000010000000200020a696e7465726472617065026e6c00001c0001c00c0002000100015180000f026e7309656174736572766572c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d4cb0e42c04600010001000151800004d4cb1221 25146 fb2400000001000000000000086d6c616e73696e6b0564656d6f6e026e6c0000ff0001 fb2480000001000000030002086d6c616e73696e6b0564656d6f6e026e6c0000ff0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 25147 33220010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 33228000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 25148 037f00000001000000000000037777770e64657369676e2d636f6d70616e79026e6c0000010001 037f80000001000000020002037777770e64657369676e2d636f6d70616e79026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01fc01000020001000151800006036e7332c037c033000100010001518000045054f347c04f000100010001518000043e94a047 25149 7bbf00000001000000000000026e6c036b6e6d026e6c0000010001 7bbf80000001000000020002026e6c036b6e6d026e6c0000010001c00f00020001000151800009026e730369736dc013c00f00020001000151800006036e7332c02ac02700010001000151800004d994ab02c03c00010001000151800004d994ab03 25150 8551000000010000000000000977656276697a696f6e026e6c0000010001 8551800000010000000200020977656276697a696f6e026e6c0000010001c00c00020001000151800012026e730c696e746572636f6e6e656374c016c00c00020001000151800006036e7332c02dc02a00010001000151800004d453c005c04800010001000151800004d453c006 25151 e9e50000000100000000000003696d6708796f75727a696e65026e6c0000010001 e9e58000000100000002000203696d6708796f75727a696e65026e6c0000010001c0100002000100015180000e036e7331076c656374726963c019c01000020001000151800006036e7332c031c02d00010001000151800004c297a082c04700010001000151800004c297a083 25152 b78d00000001000000000000036e7333076e656473746174026e6c0000010001 b78d80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25153 79250000000100000000000003696d6708796f75727a696e65026e6c0000010001 79258000000100000002000203696d6708796f75727a696e65026e6c0000010001c0100002000100015180000e036e7331076c656374726963c019c01000020001000151800006036e7332c031c02d00010001000151800004c297a082c04700010001000151800004c297a083 25154 5f800000000100000000000003696d6708796f75727a696e65026e6c0000010001 5f808000000100000002000203696d6708796f75727a696e65026e6c0000010001c0100002000100015180000e036e7331076c656374726963c019c01000020001000151800006036e7332c031c02d00010001000151800004c297a082c04700010001000151800004c297a083 25155 a8f200000001000000000000037777770868767a726f64656e026e6c0000010001 a8f280000001000000030001037777770868767a726f64656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 25156 dcee00000001000000000000037777770c636f6e736f6c696461746564026e6c0000010001 dcee80000001000000020001037777770c636f6e736f6c696461746564026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c01dc04a00010001000151800004c2860043 25157 adc400000001000000000000026e73076e656473746174026e6c0000010001 adc480000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25158 82110000000100000000000003626276026e6c00000f0001 82118000000100000002000203626276026e6c00000f0001c00c0002000100015180000d026e7307656368656c6f6ec010c00c00020001000151800006036e7378c027c02400010001000151800004d977e179c03d00010001000151800004d4ccd10c 25159 98180000000100000000000003706f700c6361626c6577616e61646f6f026e6c0000010001 98188000000100000002000103706f700c6361626c6577616e61646f6f026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c01dc04a00010001000151800004c2860043 25160 144a0000000100000000000006636861726973026e6c00000f0001 144a8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25161 c44d0000000100000000000004777061640661646d696661026e6c0000010001 c44d8000000100000003000304777061640661646d696661026e6c0000010001c0110002000100015180000e076e73617574683103626974c018c0110002000100015180000a076e736175746832c034c0110002000100015180000a076e736175746833c034c02c00010001000151800004d5880c33c04600010001000151800004d5880c3bc05c00010001000151800004d4ccc00b 25162 42bb00000001000000000000026e73076575726f6e6574026e6c0000010001 42bb80000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 25163 907900000001000000000000026e73076575726f6e6574026e6c0000260001 907980000001000000020001026e73076575726f6e6574026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 25164 064400000001000000000000036b7061026e6c00000f0001 064480000001000000020002036b7061026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 25165 4238000000010000000000000163026e6c00000f0001 4238840300010000000100000163026e6c00000f0001c00e00060001000038400036026e730f646f6d61696e2d7265676973747279c00e0a686f73746d6173746572c0250bf1e540000070800000384000278d0000003840 25166 803100000001000000000000037777770767756d74726565026e6c0000010001 803180000001000000020002037777770767756d74726565026e6c0000010001c0100002000100015180000f026e7309656174736572766572c018c01000020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 25167 3c1a00000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373076b6c6a626f7577026e6c0000060001 3c1a84030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373076b6c6a626f7577026e6c0000060001c04c00060001000038400036026e730f646f6d61696e2d7265676973747279c04c0a686f73746d6173746572c0630bf1e540000070800000384000278d0000003840 25168 4ddb00000001000000000000026e7303786f73026e6c0000010001 4ddb80000001000000020001026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe2 25169 a95f000000010000000000000377777705626976616b026e6c0000010001 a95f800000010000000300030377777705626976616b026e6c0000010001c0100002000100015180000e076e73617574683103626974c016c0100002000100015180000a076e736175746832c032c0100002000100015180000a076e736175746833c032c02a00010001000151800004d5880c33c04400010001000151800004d5880c3bc05a00010001000151800004d4ccc00b 25170 6f1e000000010000000000000867696c64656e6572026e6c00000f0001 6f1e800000010000000200000867696c64656e6572026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02f 25171 989300000001000000000000037777770b707572706c65686f757365026e6c0000010001 989380000001000000020002037777770b707572706c65686f757365026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 25172 7c9f00000001000000000000036368720463687269026e6c0000010001 7c9f80000001000000020002036368720463687269026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c015c01000020001000151800006036e7332c02cc02900010001000151800004d453c005c04700010001000151800004d453c006 25173 c7f90000000100000000000004636872320463687269026e6c0000010001 c7f98000000100000002000204636872320463687269026e6c0000010001c01100020001000151800012026e730c696e746572636f6e6e656374c016c01100020001000151800006036e7332c02dc02a00010001000151800004d453c005c04800010001000151800004d453c006 25174 f49700000001000000000000036e7332036e7873026e6c0000010001 f49780000001000000020002036e7332036e7873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d973c015c00c00010001000151800004d973c102 25175 da3b0000000100000000000003777777096c6565667374696a6c026e6c0000010001 da3b8000000100000003000303777777096c6565667374696a6c026e6c0000010001c01000020001000151800011036e73310a74727565736572766572c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ef8003c04b00010001000151800004d5efb004c05d00010001000151800004d5ef8005 25176 f54d00000001000000000000086b65797072657373026e6c0000ff0001 f54d80000001000000020002086b65797072657373026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 25177 56b800000001000000000000037777770763616e69646165026e6c0000010001 56b880000001000000030002037777770763616e69646165026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 25178 97160000000100000000000004646e733208636f6e6365707473026e6c0000010001 97168000000100000002000204646e733208636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac01100020001000151800002c00cc02e00010001000151800004d5c51c03c00c00010001000151800004d5c51e1c 25179 4b8b0000000100000000000004646e733208636f6e6365707473026e6c0000260001 4b8b8000000100000002000204646e733208636f6e6365707473026e6c0000260001c0110002000100015180001103646e730a636f6e63657074736661c01ac01100020001000151800002c00cc02e00010001000151800004d5c51c03c00c00010001000151800004d5c51e1c 25180 fac900000001000000000001036e733107737572666e6574026e6c00000100010000291000000000000000 fac980000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 25181 77fe000000010000000000000462617261026e6c0000ff0001 77fe800000010000000200020462617261026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 25182 1ea500000001000000000000046d61696c06767668776562026e6c0000010001 1ea580000001000000020000046d61696c06767668776562026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c02f 25183 2750000000010000000000000566696c746808767575727765726b026e6c0000010001 2750800000010000000300010566696c746808767575727765726b026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c044c02f000100010001518000043efa0202 25184 5d57000000010000000000000377777713676f65646b6f70656c6173746d696e75746573026e6c0000010001 5d57800000010000000200020377777713676f65646b6f70656c6173746d696e75746573026e6c0000010001c0100002000100015180001a036e733113736d616c6c686f6c642d686f7374696e672d35c024c01000020001000151800006036e7332c03cc03800010001000151800004d5f72ea0c05e00010001000151800004d5f72ea1 25185 922000000001000000000000026e7308767575727765726b026e6c00001c0001 922080000001000000030001026e7308767575727765726b026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 25186 b2cb000000010000000000000566696c746808767575727765726b026e6c0000010001 b2cb800000010000000300010566696c746808767575727765726b026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c044c02f000100010001518000043efa0202 25187 6e4600000001000000000000036e733503777873026e6c0000010001 6e4680000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 25188 671e000000010000000000000d726f6e616c642d6f6e6c696e65026e6c0000010001 671e800000010000000200020d726f6e616c642d6f6e6c696e65026e6c0000010001c00c0002000100015180000c04646e73310471776562c01ac00c0002000100015180000704646e7332c033c02e00010001000151800004d994ac0cc04600010001000151800004d5c42f6c 25189 0c07000000010000000000000b706861726d6173636f7065026e6c00000f0001 0c07800000010000000200020b706861726d6173636f7065026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc018c00c00020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 25190 cc8c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 cc8c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25191 260b000000010000000000000377777703677064026e6c0000010001 260b800000010000000200020377777703677064026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c014c01000020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 25192 a4c600000001000000000000036d783107626265796f6e64026e6c0000010001 a4c680000001000000020002036d783107626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c000100010001518000043eb1900bc03e000100010001518000043eb19002 25193 2f8e00000001000000000000036d783107626265796f6e64026e6c00001c0001 2f8e80000001000000020002036d783107626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c000100010001518000043eb1900bc03e000100010001518000043eb19002 25194 f9f20000000100000000000006706c756b6f6e026e6c0000010001 f9f28000000100000002000006706c756b6f6e026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 25195 969c00000001000000000000037777770b77756c66696e67686f6666026e6c0000010001 969c80000001000000020000037777770b77756c66696e67686f6666026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c033 25196 fac900000001000000000000036e733107737572666e6574026e6c0000010001 fac980000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 25197 2e2d0100000100000000000008736179616e6f7261056d62757975026e6c0000010001 2e2d8100000100000002000008736179616e6f7261056d62757975026e6c0000010001c01500020001000151800010026e73076379736f6e657403636f6d00c01500020001000151800006036e7331c032 25198 437c0000000100000000000006646576616c6b026e6c0000010001 437c8000000100000003000206646576616c6b026e6c0000010001c00c0002000100015180000f036e73310870726f7365727665c013c00c00020001000151800012036e73320970726f2d736572766502626500c00c00020001000151800006036e7333c02bc027000100010001518000045054e055c06000010001000151800004d4ccc655 25199 cfbd00000001000000000000086a616d696e6c6579066e7434616c6c026e6c0000010001 cfbd80000001000000020002086a616d696e6c6579066e7434616c6c026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000d036e733206787334616c6cc01cc03000010001000151800004c26d3402c04100010001000151800004c26d0963 25200 fee8000000010000000000000c70726f6d696e656e74696e6e026e6c00000f0001 fee8800000010000000200000c70726f6d696e656e74696e6e026e6c00000f0001c00c00020001000151800011036e733107726f6b73636f6d036e657400c00c0002000100015180000e036e733207726f6b73636f6dc019 25201 8ca800000001000000000000036e7331066d696e646566026e6c0000010001 8ca880000001000000020002036e7331066d696e646566026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9a9e7c6c03900010001000151800004d9a9e7c5 25202 8f6600000001000000000000036e7332066d696e646566026e6c0000010001 8f6680000001000000020002036e7332066d696e646566026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d9a9e7c6c00c00010001000151800004d9a9e7c5 25203 0fa800000001000000000000036e73340767617574656e67026e6c0000010001 0fa880000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25204 6ddf00000001000000000000036e733407737570706f7274026e6c0000010001 6ddf80000001000000020002036e733407737570706f7274026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe 25205 412d28000001000000010000026e6c0000060001095f6b65726265726f73045f74637009636f726e776f726c64026e6c000021000100000258001b00000064005806746f746f726f09636f726e776f726c64026e6c00 412da8040000000000000000 25206 05cb28000001000200000000026e6c00000600010857524b53544e30360b686f74656c616c6d656c6f026e6c00000500fe000000000000c01400010001000000000004c0a877c0 05cba8040000000000000000 25207 5a4700100001000000000001076f6c697669657202706b03776175026e6c00001c00010000290800000000000000 5a4780000001000000020003076f6c697669657202706b03776175026e6c00001c0001c0170002000100015180000a036e733103777572c01bc01700020001000151800006036e7332c033c02f0001000100015180000489e0f88dc0450001000100015180000489e0f88e0000291000000000000000 25208 9c1300000001000000000000046e73303903777873026e6c0000260001 9c1380000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 25209 ade000000001000000000000046e73303803777873026e6c00001c0001 ade080000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 25210 b6aa00000001000000000000036e733503777873026e6c0000260001 b6aa80000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 25211 ea8100000001000000000000046e73303803777873026e6c0000260001 ea8180000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 25212 d45a00000001000000000000046e73303903777873026e6c00001c0001 d45a80000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 25213 2e8e00000001000000000000036e733503777873026e6c00001c0001 2e8e80000001000000030003036e733503777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 25214 702e00000001000000000000037777770c6b6f6f7065656e6669657473026e6c0000010001 702e80000001000000030003037777770c6b6f6f7065656e6669657473026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c01dc0100002000100015180000e0b6e616d6573657276657232c03dc0100002000100015180000e0b6e616d6573657276657233c03dc0310001000100015180000451ad2020c0550001000100015180000451ad2021c06f0001000100015180000452c049aa 25215 6d750000000100000000000008686f73746e616d650462696e640000100003 6d758000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 25216 28c0000000010000000000000566696c746808767575727765726b026e6c0000010001 28c0800000010000000300010566696c746808767575727765726b026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c044c02f000100010001518000043efa0202 25217 4e700000000100000000000003777777086c65747373746174026e6c0000010001 4e708000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 25218 000000007002faf0362600000204057801010402 000080010000000000000000 25219 0b5300000001000000000000037777770a737061617262656c6567026e6c0000010001 0b5380000001000000020000037777770a737061617262656c6567026e6c0000010001c01000020001000151800015026e730d646f6d61696e6e6574776f726b02736500c01000020001000151800006036e7332c032 25220 dec4000000010000000000000d67656f2d6c6f67697374696373026e6c0000ff0001 dec4800000010000000200020d67656f2d6c6f67697374696373026e6c0000ff0001c00c0002000100015180000c036e73310563736e6574c01ac00c00020001000151800006036e7332c032c02e00010001000151800004c2451012c04600010001000151800004c2451212 25221 3732000000010000000000000377777707766f6c64657273026e6c0000010001 3732800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 25222 b5cf40235010fb906c0b0000000000000000 b5cfc0240000000000000000 25223 0000000070024000671b0000020405b401010402 000080010000000000000000 25224 b5cf40235018fb90fce000000090c500000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afcd1403c4e510003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000057524b53544e3036484f54454c414c4d454c4f0000 b5cfc0240000000000000000 25225 83a1000000010000000000000e616c6d6572652d62657374757572026e6c0000ff0001 83a1800000010000000200010e616c6d6572652d62657374757572026e6c0000ff0001c00c0002000100015180000b036e73330473617261c01bc00c00020001000151800006036e7332c033c046000100010001518000049164052f 25226 b5d0233950104470b6550000000000000000 b5d0a3330000000000000000 25227 3d5e00000001000000000000037777770c6d656573746572646f72757308697364656e61616d026e6c0000010001 3d5e80000001000000020000037777770c6d656573746572646f72757308697364656e61616d026e6c0000010001c01d00020001000151800013036e733009696e7465726c697a65036e657400c01d00020001000151800006036e7331c03e 25228 b5d023395018447066590000008e2a0f000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcd0403c4e5000030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 b5d0a3330000000000000000 25229 b5cf40315011fb826b780000000000000000 b5cfc0340000000000000000 25230 088700000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 088780000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 25231 000000007002faf08db400000204057801010402 000080010000000000000000 25232 b5d0234750114462b5c40000000000000000 b5d0a3430000000000000000 25233 b5cf40325010fb826b770000000000000000 b5cfc0340000000000000000 25234 b5d0234850104462b5c30000000000000000 b5d0a3430000000000000000 25235 b5d0e1385010fb9022830000000000000000 25236 5aa400100001000000000001036e7331096e65646572686f7374026e6c00000100010000290800000000000000 5aa480000001000000020003036e7331096e65646572686f7374026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9302c03c00010001000151800004d5efb2410000291000000000000000 25237 ad5200100001000000000001036e7331096e65646572686f7374026e6c00002600010000290800000000000000 ad5280000001000000020003036e7331096e65646572686f7374026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9302c03c00010001000151800004d5efb2410000291000000000000000 25238 56a900100001000000000001036e7332096e65646572686f7374026e6c00000100010000290800000000000000 56a980000001000000020003036e7332096e65646572686f7374026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9302c00c00010001000151800004d5efb2410000291000000000000000 25239 152b00100001000000000001036e7332096e65646572686f7374026e6c00002600010000290800000000000000 152b80000001000000020003036e7332096e65646572686f7374026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9302c00c00010001000151800004d5efb2410000291000000000000000 25240 de9d00000001000000000000036e73320763697374726f6e026e6c0000010001 de9d80000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 25241 f6d400000001000000000000036e73320763697374726f6e026e6c0000260001 f6d480000001000000020002036e73320763697374726f6e026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 25242 b5d0e1385018fb908a5800000090f000000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afcd1403c4e510003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000057524b53544e3036484f54454c414c4d454c4f0000 25243 774e00000001000000000000037777770a70617274797669626573026e6c0000010001 774e80000001000000020002037777770a70617274797669626573026e6c0000010001c0100002000100015180000a036e733103706777c01bc01000020001000151800006036e7332c033c02f000100010001518000043e818832c04500010001000151800004d4ccc621 25244 f6c500100001000000000001036e733208767575727765726b026e6c00000100010000290800000000000000 f6c580000001000000030002036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa02020000291000000000000000 25245 0000000070024000dff20000020405b401010402 000080010000000000000000 25246 b5d0e1465011fb8221f00000000000000000 25247 455800000001000000000000036e7331096e65646572686f7374026e6c0000010001 455880000001000000020002036e7331096e65646572686f7374026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9302c03c00010001000151800004d5efb241 25248 d13900000001000000000000036e7331096e65646572686f7374026e6c0000260001 d13980000001000000020002036e7331096e65646572686f7374026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9302c03c00010001000151800004d5efb241 25249 fc1200000001000000000000036e7332096e65646572686f7374026e6c0000010001 fc1280000001000000020002036e7332096e65646572686f7374026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9302c00c00010001000151800004d5efb241 25250 ff0a00000001000000000000036e7332096e65646572686f7374026e6c0000260001 ff0a80000001000000020002036e7332096e65646572686f7374026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9302c00c00010001000151800004d5efb241 25251 cc2900000001000000000000026e7303616d730874656c6567617465026e6c0000010001 cc2980000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 25252 000000007002faf0310300000204057801010402 000080010000000000000000 25253 0f5f000000010000000000000661736f706f73026e6c0000ff0001 0f5f800000010000000200000661736f706f73026e6c0000ff0001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 25254 410300000001000000000000046875736b026e6c0000010001 410380000001000000020002046875736b026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c011c00c00020001000151800006036e7332c028c02500010001000151800004d9aa2042c03e00010001000151800004d9aa2c06 25255 0b6800000001000000000000076f6c697669657202706b03776175026e6c00001c0001 0b6880000001000000020002076f6c697669657202706b03776175026e6c00001c0001c0170002000100015180000a036e733103777572c01bc01700020001000151800006036e7332c033c02f0001000100015180000489e0f88dc0450001000100015180000489e0f88e 25256 b5d188c150104470c9a30000000000000000 25257 b5d0e1475010fb8221ef0000000000000000 25258 b27000100001000000000001036e733207737570706f7274026e6c00000100010000290800000080000000 b27080000001000000020003036e733207737570706f7274026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c00010001000151800004c372e7c8c03a00010001000151800004c372e6fe0000291000000000000000 25259 b5d188c1501844701fee0000008e84c9000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcd0403c4e5000030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 25260 0f61000000010000000000000a77616368656e6865696d026e6c00000f0001 0f61800000010000000200020a77616368656e6865696d026e6c00000f0001c00c0002000100015180000f036e73310863616d627269756dc017c00c00020001000151800006036e7332c02fc02b00010001000151800004d9131082c04600010001000151800004d5efb202 25261 6cf300100001000000000001036e733407737570706f7274026e6c00000100010000290800000080000000 6cf380000001000000020003036e733407737570706f7274026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe0000291000000000000000 25262 b5d2225d5010fb9084ab0000000000000000 b5d2a2530000000000000000 25263 37a30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 37a38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25264 78110000000100000000000007746573742d61640e6b6168756e612d746573744c4142026e6c0000060001 78118403000100000001000007746573742d61640e6b6168756e612d746573744c4142026e6c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 25265 b4745fb5501144625f360000000000000000 b474dfb40000000000000000 25266 b5d2225d5018fb909e01000000903e80000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afcd1403c4e510003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000057524b53544e3036484f54454c414c4d454c4f0000 b5d2a2530000000000000000 25267 b5d188cf50114462c9120000000000000000 25268 54620000000100000000000003626c3102626c06787334616c6c026e6c0000010001 54628000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25269 b5d188d050104462c9110000000000000000 25270 e371000000010000000000000e72656365707476616e646564616706706167696e61026e6c0000010001 e371800000010000000300030e72656365707476616e646564616706706167696e61026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc01b00020001000151800006036e7333c01bc036000100010001518000043e45a282c048000100010001518000043e45a283c05a000100010001518000043e45a284 25271 98cf00000001000000000000036e733208767575727765726b026e6c0000010001 98cf80000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 25272 b5d2226b5011fb8284180000000000000000 b5d2a2630000000000000000 25273 0eb400000001000000000000036e733208696e74726f776562026e6c0000010001 0eb480000001000000020002036e733208696e74726f776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 25274 037c00000001000000000000036e733108696e74726f776562026e6c0000010001 037c80000001000000020002036e733108696e74726f776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450416028c03b00010001000151800004c356780c 25275 0e500000000100000000000008696e74726f776562026e6c00000f0001 0e508000000100000002000208696e74726f776562026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc0290001000100015180000450416028c03b00010001000151800004c356780c 25276 399e00000001000000000000026e7303746478026e6c0000010001 399e80000001000000020002026e7303746478026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c389d60ac03500010001000151800004c389d70a 25277 0e2300000001000000000000026e7303746478026e6c0000260001 0e2380000001000000020002026e7303746478026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c389d60ac03500010001000151800004c389d70a 25278 e73000000001000000000000036e733103746478026e6c0000010001 e73080000001000000020002036e733103746478026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004c389d60ac00c00010001000151800004c389d70a 25279 e2f7000000010000000000000673696d706c79026e6c00000f0001 e2f7800000010000000300000673696d706c79026e6c00000f0001c00c00020001000151800016026e730b73696d706c796e616d657302636f02756b00c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02a 25280 f9e900000001000000000000036e733103746478026e6c0000260001 f9e980000001000000020002036e733103746478026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004c389d60ac00c00010001000151800004c389d70a 25281 246000000001000000000000036d783106787334616c6c026e6c0000010001 246080000001000000030002036d783106787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 25282 083a000000010000000000000469632d73026e6c0000010001 083a800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25283 025c0000000100000000000003777777086e2d766973696f6e026e6c0000010001 025c8000000100000003000003777777086e2d766973696f6e026e6c0000010001c01000020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031 25284 e2d20000000100000000000003777777086475696b7370756c026e6c0000010001 e2d28000000100000002000003777777086475696b7370756c026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c031 25285 b5d2226c5010fb8284170000000000000000 b5d2a2630000000000000000 25286 0000000070024000ad730000020405b401010402 000080010000000000000000 25287 98d000000001000000000000037777770b706f726e74726166666963026e6c0000010001 98d080000001000000020000037777770b706f726e74726166666963026e6c0000010001c01000020001000151800019026e73106575726f6d656469617472616666696303636f6d00c01000020001000151800006036e7332c033 25288 b5d3163f5010447009a50000000000000000 b5d396340000000000000000 25289 a8f700000001000000000000036e733209666972737466696e64026e6c0000010001 a8f780000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25290 b4745fb6501044625f350000000000000000 b474dfb40000000000000000 25291 bf0700000001000000000000036e733109666972737466696e64026e6c0000010001 bf0780000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25292 b5d3163f5018447005350000008edf83000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcd0403c4e5000030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 b5d396340000000000000000 25293 83c70000000100000000000009656c616e776f6e656e026e6c0000010001 83c78000000100000002000009656c616e776f6e656e026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c030 25294 b5d3164d5011446209140000000000000000 b5d396440000000000000000 25295 be1400000001000000000000066a657276656e066e7434616c6c026e6c0000010001 be1480000001000000020002066a657276656e066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 25296 944f00000001000000000000037777770c74656c65646973636f756e74026e6c0000010001 944f80000001000000020002037777770c74656c65646973636f756e74026e6c0000010001c0100002000100015180000c026e7306636f6d6e6574c01dc01000020001000151800006036e7332c034c03100010001000151800004d46c106ec04900010001000151800004d46c1078 25297 b5d3164e5010446209130000000000000000 b5d396440000000000000000 25298 dc0e000000010000000000000469632d73026e6c0000ff0001 dc0e800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25299 d99d00000001000000000000037777770f6163687465726e61616d2d70756e74026e6c0000010001 d99d84030001000000010000037777770f6163687465726e61616d2d70756e74026e6c0000010001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 25300 828c00000001000000000000097061696e6669656c64026e6c00000f0001 828c80000001000000030001097061696e6669656c64026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc016c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c048c02a000100010001518000043efa0202 25301 7b840000000100000000000006636861726973026e6c0000010001 7b848000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25302 b09b00000001000000000000037777770b76726f75776f6e6c696e65026e6c0000010001 b09b80000001000000030000037777770b76726f75776f6e6c696e65026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c034c01000020001000151800006036e7333c034 25303 13f6000000010000000000001664696572656e61727473656e6f697374657277696a6b026e6c00000f0001c0 13f6800000010000000200001664696572656e61727473656e6f697374657277696a6b026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c03d 25304 2b94000000010000000000000864796e6162797465026e6c0000010001 2b94800000010000000200000864796e6162797465026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c015c00c0002000100015180000704686e7331c02e 25305 134000000001000000000000026e73076e656473746174026e6c0000010001 134080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25306 668200000001000000000000066b6c6a303031076b6c6a626f7577026e6c0000060001 668284030001000000010000066b6c6a303031076b6c6a626f7577026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 25307 e2fb00000001000000000000036e7332057075786965026e6c0000010001 e2fb80000001000000020002036e7332057075786965026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d4363014c00c00010001000151800004d4363015 25308 15ab00000001000000000000036e7331057075786965026e6c0000260001 15ab80000001000000020002036e7331057075786965026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4363014c03800010001000151800004d4363015 25309 547800000001000000000000036e7331057075786965026e6c0000010001 547880000001000000020002036e7331057075786965026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4363014c03800010001000151800004d4363015 25310 bdb100000001000000000000036e7332057075786965026e6c00001c0001 bdb180000001000000020002036e7332057075786965026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d4363014c00c00010001000151800004d4363015 25311 d89c00000001000000000000036e7331057075786965026e6c00001c0001 d89c80000001000000020002036e7331057075786965026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4363014c03800010001000151800004d4363015 25312 14fb00000001000000000000036e7332057075786965026e6c0000260001 14fb80000001000000020002036e7332057075786965026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d4363014c00c00010001000151800004d4363015 25313 7ce7000000010000000000000776656e73746572026e6c00000f0001 7ce7800000010000000300020776656e73746572026e6c00000f0001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 25314 094400000001000000000000037777770974656d706f7465616d026e6c0000010001 094480000001000000030000037777770974656d706f7465616d026e6c0000010001c0100002000100015180001c09646e733030303030310367656e0872616e647374616403636f6d00c0100002000100015180000c09646e73303030303032c038c0100002000100015180000d036e7332036b706e036e657400 25315 13560000000100000000000002616404696c7365026e6c0000010001 13568000000100000003000302616404696c7365026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 25316 4a3900000001000000000000026e73036d6c63026e6c0000010001 4a3980000001000000030003026e73036d6c63026e6c0000010001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 25317 1b590000000100000000000006636f6f6b696504696c7365026e6c0000010001 1b598000000100000003000306636f6f6b696504696c7365026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 25318 34bb0000000100000000000008616473657276657206776562616473026e6c0000010001 34bb8000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 25319 60fd00000001000000000000086d656469616c6162026e6c00000f0001 60fd80000001000000020001086d656469616c6162026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02900010001000151800004c1ad4e02 25320 81fd00000001000000000000036e7331046372696f026e6c0000010001 81fd80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 25321 f98400000001000000000000036e7332046372696f026e6c0000010001 f98480000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 25322 e756000000010000000000000377777707746d6f6269656c026e6c0000010001 e756800000010000000200000377777707746d6f6269656c026e6c0000010001c01000020001000151800016036e73320c6c6f76656c6c736e616d6573036f726700c01000020001000151800006036e7333c030 25323 f34300000001000000000000034e53320743495354524f4e024e4c0000010001 f34380000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 25324 fd5800000001000000000000026e7308767575727765726b026e6c0000010001 fd5880000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 25325 a58b0000000100000000000003777777047765726b026e6c0000010001 a58b8000000100000002000103777777047765726b026e6c0000010001c0100002000100015180000b026e7305617262766fc015c0100002000100015180000d036e7332036b706e036e657400c02900010001000151800004c2971702 25326 fd21000000010000000000000377777703626973026e6c0000010001 fd21800000010000000200000377777703626973026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02c 25327 358c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 358c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25328 5ef000000001000000000000026e7305617262766f026e6c0000010001 5ef080000001000000020001026e7305617262766f026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c2971702 25329 66540000000100000000000003777777046d672d72026e6c0000010001 66548000000100000002000003777777046d672d72026e6c0000010001c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c01000020001000151800006036e7334c02d 25330 875f000000010000000000000b626c65656b6572626f7577026e6c00000f0001 875f800000010000000200000b626c65656b6572626f7577026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c018c00c0002000100015180000704686e7331c031 25331 75d900000001000000000000037777770b66756e6e696563616d6573026e6c0000010001 75d984030001000000010000037777770b66756e6e696563616d6573026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 25332 56050000000100000000000005646e732d31056c61646f74026e6c0000010001 56058000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25333 ccd90000000100000000000005646e732d32056c61646f74026e6c0000010001 ccd98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25334 339000000001000000000000036e733107737572666e6574026e6c0000010001 339080000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 25335 dd8100000001000000000000036e747006787334616c6c026e6c0000010001 dd8180000001000000030002036e747006787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 25336 2037001000010000000000010673756e646e7303697373026e6c00000100010000290800000080000000 2037800000010000000200030673756e646e7303697373026e6c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c00c00010001000151800004c057a002c03900010001000151800004c0576a650000291000000000000000 25337 c6e200000001000000000000037777770668656964616b026e6c0000010001 c6e280000001000000020000037777770668656964616b026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c02e 25338 fd5d00000001000000000000046d61696c0b626c65656b6572626f7577026e6c0000010001 fd5d80000001000000020000046d61696c0b626c65656b6572626f7577026e6c0000010001c0110002000100015180000f04686e73300774697363616c69c01dc0110002000100015180000704686e7331c036 25339 8df500000001000000000000036e733207737570706f7274026e6c0000010001 8df580000001000000020002036e733207737570706f7274026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c00010001000151800004c372e7c8c03a00010001000151800004c372e6fe 25340 dba900000001000000000000036e733407737570706f7274026e6c0000010001 dba980000001000000020002036e733407737570706f7274026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe 25341 753d000000010000000000000676696e646578026e6c0000010001 753d800000010000000300030676696e646578026e6c0000010001c00c0002000100015180000b036e733104696c7365c013c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02bc027000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 25342 1ee80000000100000000000003706f700677696a6e656e026e6c0000010001 1ee88000000100000003000003706f700677696a6e656e026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c030c01000020001000151800007046e733033c030 25343 02200000000100000000000003777777076c756e61746963026e6c0000010001 02208000000100000003000103777777076c756e61746963026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 25344 8b110000000100000000000003777777076f756468656964026e6c0000010001 8b118000000100000002000003777777076f756468656964026e6c0000010001c01000020001000151800014026e730b7369746570726f7465637403636f6d00c01000020001000151800006036e7332c02f 25345 8cda00000001000000000000026e7307696e746f756368026e6c0000010001 8cda80000001000000030001026e7307696e746f756368026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c001 25346 259d00000001000000000000037777770f686161726c656d73646167626c6164026e6c0000010001 259d80000001000000030003037777770f686161726c656d73646167626c6164026e6c0000010001c0100002000100015180000e076e73617574683103626974c020c0100002000100015180000a076e736175746832c03cc0100002000100015180000a076e736175746833c03cc03400010001000151800004d5880c33c04e00010001000151800004d5880c3bc06400010001000151800004d4ccc00b 25347 6619000000010000000000000b646972656374776f6e656e026e6c0000010001 6619800000010000000200000b646972656374776f6e656e026e6c0000010001c00c0002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c00c0002000100015180000805726f6b696ec033 25348 e2af00000001000000000000026e73036d6c63026e6c00001c0001 e2af80000001000000030003026e73036d6c63026e6c00001c0001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 25349 ad3c000000010000000000000377777706636974726978026e6c0000010001 ad3c800000010000000300000377777706636974726978026e6c0000010001c01000020001000151800011026e730663697472697802636f02756b00c01000020001000151800012047365633103646e73067073696e6574c017c010000200010001518000070473656332c04d 25350 598600000001000000000000046d61696c0b646972656b74776f6e656e026e6c0000010001 598680000001000000020000046d61696c0b646972656b74776f6e656e026e6c0000010001c0110002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0110002000100015180000805726f6b696ec038 25351 1d0000000001000000000000046d61696c0b646972656b74776f6e656e026e6c00001c0001 1d0080000001000000020000046d61696c0b646972656b74776f6e656e026e6c00001c0001c0110002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0110002000100015180000805726f6b696ec038 25352 179200000001000000000000026e73036d6c63026e6c0000260001 179280000001000000030003026e73036d6c63026e6c0000260001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 25353 e1cc00000001000000000000036e733403777873026e6c0000260001 e1cc80000001000000030003036e733403777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 25354 02930000000100000000000005726f6d656f066f6e6c696e65026f32026e6c0000010001 02938000000100000002000205726f6d656f066f6e6c696e65026f32026e6c0000010001c0190002000100015180000d026e73076e65746c616e64c01cc01900020001000151800006036e7332c033c03000010001000151800004d9aa2042c04900010001000151800004d9aa2c06 25355 0e2800000001000000000000037777771261746f736b706d67636f6e73756c74696e67026e6c0000010001 0e2880000001000000030000037777771261746f736b706d67636f6e73756c74696e67026e6c0000010001c01000020001000151800017036e733103657874096f726967696e2d697403636f6d00c01000020001000151800006036e7332c03bc01000020001000151800006036e7333c03b 25356 b79600000001000000000000036e733109666972737466696e64026e6c0000010001 b79680000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25357 f31e00000001000000000000036e733209666972737466696e64026e6c0000010001 f31e80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25358 422c00000001000000000000086d7470693730303302736404626e6574026e6c0000010001 422c80000001000000020000086d7470693730303302736404626e6574026e6c0000010001c0180002000100015180000d03646e73036b706e03636f6d00c0180002000100015180000d036e7332036b706e036e657400 25359 51a8000000010000000000000b6b6c6f6d70652d72757070026e6c00000f0001 51a8800000010000000200020b6b6c6f6d70652d72757070026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000f036e7331086a64696d65646961c018c02c000100010001518000043e3a9862c03e00010001000151800004d4ccc034 25360 702000000001000000000000076864693830303202736404626e6574026e6c0000010001 702080000001000000020000076864693830303202736404626e6574026e6c0000010001c0170002000100015180000d03646e73036b706e03636f6d00c0170002000100015180000d036e7332036b706e036e657400 25361 3a2600000001000000000000077077693830303302736404626e6574026e6c0000010001 3a2680000001000000020000077077693830303302736404626e6574026e6c0000010001c0170002000100015180000d03646e73036b706e03636f6d00c0170002000100015180000d036e7332036b706e036e657400 25362 c96600000001000000000000086d7470693730303202736404626e6574026e6c0000010001 c96680000001000000020000086d7470693730303202736404626e6574026e6c0000010001c0180002000100015180000d03646e73036b706e03636f6d00c0180002000100015180000d036e7332036b706e036e657400 25363 73a70000000100000000000003777777086d687767726f6570026e6c0000010001 73a78000000100000002000203777777086d687767726f6570026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d5c9e8c8c04d00010001000151800004d5c9e8c9 25364 d0c000000001000000000000036e733109666972737466696e64026e6c0000010001 d0c080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25365 d0c100000001000000000000036e733209666972737466696e64026e6c0000010001 d0c180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25366 d0c300000001000000000000036e733109666972737466696e64026e6c0000010001 d0c380000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25367 d0c400000001000000000000036e733209666972737466696e64026e6c0000010001 d0c480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25368 5717000000010000000000000d67656d776f7564656e62657267026e6c0000010001 5717800000010000000200020d67656d776f7564656e62657267026e6c0000010001c00c0002000100015180000e026e73086d656761706c6578c01ac00c00020001000151800006036e7331c031c02e00010001000151800004504f6101c04800010001000151800004504f6102 25369 2a400000000100000000000004777061640a7377697463686a6f6273026e6c0000010001 2a408000000100000002000204777061640a7377697463686a6f6273026e6c0000010001c01100020001000151800009036e7331026973c01cc01100020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 25370 64cc0000000100000000000003777777067a7376737172026e6c0000010001 64cc8403000100000001000003777777067a7376737172026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 25371 0b4600000001000000000000036e73330a787878776562686f7374026e6c0000010001 0b4680000001000000020002036e73330a787878776562686f7374026e6c0000010001c01000020001000151800011036e73350a6f70656e2d646f6f7273c01bc01000020001000151800006036e7336c033c02f000100010001518000045117e85ac04c000100010001518000045117e85b 25372 1d570000000100000000000007636f6f6c636f6d026e6c00000f0001 1d578000000100000002000207636f6f6c636f6d026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc02800010001000151800004c1ad3506c03900010001000151800004c1ad35c1 25373 42fe00000001000000000000036e73330a787878776562686f7374026e6c0000260001 42fe80000001000000020002036e73330a787878776562686f7374026e6c0000260001c01000020001000151800011036e73350a6f70656e2d646f6f7273c01bc01000020001000151800006036e7336c033c02f000100010001518000045117e85ac04c000100010001518000045117e85b 25374 40b500000001000000000000056d61696c31106a616172626575727375747265636874026e6c0000010001 40b580000001000000020002056d61696c31106a616172626575727375747265636874026e6c0000010001c0120002000100015180000e036e73310765766964656e74c023c01200020001000151800006036e7332c03bc03700010001000151800004c36d19c4c05100010001000151800004c36d1942 25375 217f00000001000000000000036e73340a787878776562686f7374026e6c0000010001 217f80000001000000020002036e73340a787878776562686f7374026e6c0000010001c01000020001000151800011036e73350a6f70656e2d646f6f7273c01bc01000020001000151800006036e7336c033c02f000100010001518000045117e85ac04c000100010001518000045117e85b 25376 5a8d00000001000000000000036e73340a787878776562686f7374026e6c0000260001 5a8d80000001000000020002036e73340a787878776562686f7374026e6c0000260001c01000020001000151800011036e73350a6f70656e2d646f6f7273c01bc01000020001000151800006036e7336c033c02f000100010001518000045117e85ac04c000100010001518000045117e85b 25377 222d0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 222d8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25378 01b500000001000000000000036e733103696e67026e6c0000010001 01b580000001000000020002036e733103696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 25379 ea7000000001000000000000036e733203696e67026e6c0000010001 ea7080000001000000020002036e733203696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 25380 0ded00000001000000000000046d61696c066d6165636f6e026e6c0000010001 0ded80000001000000030003046d61696c066d6165636f6e026e6c0000010001c01100020001000151800013036e73310c66657272696e737065657273c018c01100020001000151800006036e7332c030c01100020001000151800006036e7333c030c02c000100010001518000043ed44ecac04b000100010001518000043ed44ecec05d00010001000151800004d554d5aa 25381 17f4000000010000000000000377777709616d62756c616e6365026e6c0000010001 17f4800000010000000200010377777709616d62756c616e6365026e6c0000010001c01000020001000151800009026e7303616161c01ac0100002000100015180000b026e73026e6c036e657400c02e00010001000151800004c2b2a58f 25382 dbbe00000001000000000000046d61696c036d6968026e6c00001c0001 dbbe80000001000000020002046d61696c036d6968026e6c00001c0001c0110002000100015180001004646e73310869636f6d70616e79c015c0110002000100015180000704646e7332c02ec029000100010001518000043e3a890ac045000100010001518000043e3a890b 25383 bff200000001000000000000046d61696c036d6968026e6c0000260001 bff280000001000000020002046d61696c036d6968026e6c0000260001c0110002000100015180001004646e73310869636f6d70616e79c015c0110002000100015180000704646e7332c02ec029000100010001518000043e3a890ac045000100010001518000043e3a890b 25384 3a3c0000000100000000000004777061640a7377697463686a6f6273026e6c0000010001 3a3c8000000100000002000204777061640a7377697463686a6f6273026e6c0000010001c01100020001000151800009036e7331026973c01cc01100020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 25385 a5ce00000001000000000000036e733104656e6f6d026e6c0000010001 a5ce80000001000000030003036e733104656e6f6d026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d9a083d1c03b00010001000151800004d86296b6c00c00010001000151800004d87a0479 25386 c6ea0000000100000000000006636861726973026e6c0000010001 c6ea8000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25387 9e6600000001000000000000046d61696c146e6174696f6e616c652d676f6c667363686f6f6c026e6c00001c0001 9e6680000001000000020000046d61696c146e6174696f6e616c652d676f6c667363686f6f6c026e6c00001c0001c01100020001000151800010036e7331066969686f73740362697a00c01100020001000151800006036e7332c03e 25388 e38900000001000000000000046d61696c146e6174696f6e616c652d676f6c667363686f6f6c026e6c0000260001 e38980000001000000020000046d61696c146e6174696f6e616c652d676f6c667363686f6f6c026e6c0000260001c01100020001000151800010036e7331066969686f73740362697a00c01100020001000151800006036e7332c03e 25389 1f1000000001000000000000095f6b65726265726f73045f746370026463065f6d736463730d76616e5f73746161766572656e026e6c0000060001 1f1084030001000000010000095f6b65726265726f73045f746370026463065f6d736463730d76616e5f73746161766572656e026e6c0000060001c03300060001000038400036026e730f646f6d61696e2d7265676973747279c0330a686f73746d6173746572c04a0bf1e540000070800000384000278d0000003840 25390 748e0000000100000000000010776f6f6e6d616174736368617070696a026e6c0000ff0001 748e8000000100000003000310776f6f6e6d616174736368617070696a026e6c0000ff0001c00c0002000100015180000f036e7331086e6f766178657373c01dc00c00020001000151800006036e7332c035c00c00020001000151800006036e7333c035c03100010001000151800004d5c98015c04c00010001000151800004d5c9bf12c05e00010001000151800004d5ef9c26 25391 e22400000001000000000000037777770538616d6973026e6c0000010001 e22480000001000000020000037777770538616d6973026e6c0000010001c01000020001000151800012036e7335087a6f6e656564697403636f6d00c01000020001000151800006036e7337c02e 25392 d880000000010000000000000870726f647677303704636d7367026e6c00001c0001 d880800000010000000200010870726f647677303704636d7367026e6c00001c0001c01500020001000151800006036e7331c015c0150002000100015180000d036e7332036b706e036e657400c02e00010001000151800004c2976c83 25393 e11f000000010000000000000b6d61696c72656c6179303704636d7367026e6c0000010001 e11f800000010000000200010b6d61696c72656c6179303704636d7367026e6c0000010001c01800020001000151800006036e7331c018c0180002000100015180000d036e7332036b706e036e657400c03100010001000151800004c2976c83 25394 a098000000010000000000000b6d61696c72656c6179303704636d7367026e6c00001c0001 a098800000010000000200010b6d61696c72656c6179303704636d7367026e6c00001c0001c01800020001000151800006036e7331c018c0180002000100015180000d036e7332036b706e036e657400c03100010001000151800004c2976c83 25395 92960000000100000000000006636861726973026e6c0000010001 92968000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25396 b0b900000001000000000000037777770c6772617469732d7365787878026e6c0000010001 b0b980000001000000030000037777770c6772617469732d7365787878026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c037c0100002000100015180000805646e733132c037 25397 4e710000000100000000000003777777047a656e77026e6c0000010001 4e718000000100000002000003777777047a656e77026e6c0000010001c01000020001000151800015026e730d646f6d61696e6e6574776f726b02736500c01000020001000151800006036e7332c02c 25398 2a4900000001000000000000037777770777696e7368656d026e6c0000010001 2a4980000001000000020002037777770777696e7368656d026e6c0000010001c0100002000100015180000903706b3102706bc018c0100002000100015180000603706b32c030c02c00010001000151800004d43d1815c04100010001000151800004d43d1818 25399 3be1000000010000000000000477777731047769776f026e6c0000010001 3be1800000010000000200020477777731047769776f026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02a000100010001518000043eb1a454c03c000100010001518000043eb1a456 25400 a40e00000001000000000000046963697307756e696d616173026e6c00000f0001 a40e80000001000000030003046963697307756e696d616173026e6c00000f0001c0110002000100015180000906726c30303031c011c0110002000100015180000906696361737332c011c0110002000100015180000e036e733107737572666e6574c019c02d0001000100015180000489780101c0420001000100015180000489780105c05700010001000151800004c0576a65 25401 7eda000000010000000000000469632d73026e6c00001c0001 7eda800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25402 2cc000000001000000000000046162656c0564656d6f6e026e6c0000010001 2cc080000001000000030002046162656c0564656d6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 25403 fc5200100001000000000001036e733503777873026e6c00000100010000290800000080000000 fc5280000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 25404 585800000001000000000000037777770f6c65617365636172786368616e6765026e6c0000010001 585880000001000000020000037777770f6c65617365636172786368616e6765026e6c0000010001c01000020001000151800017026e7309726f7474657264616d046c756e61036e657400c0100002000100015180000f026e7309686f6f6664646f7270c041 25405 bf5000000001000000000000036e733503777873026e6c0000010001 bf5080000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 25406 071e00000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730d76616e5f73746161766572656e026e6c0000060001 071e84030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730d76616e5f73746161766572656e026e6c0000060001c05200060001000038400036026e730f646f6d61696e2d7265676973747279c0520a686f73746d6173746572c0690bf1e540000070800000384000278d0000003840 25407 a97100000001000000000000066865746e6574026e6c0000010001 a97180000001000000030003066865746e6574026e6c0000010001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 25408 158e000000010000000000000377777708677261736261616c026e6c0000010001 158e800000010000000200000377777708677261736261616c026e6c0000010001c01000020001000151800012036e733708786c736572766572036e657400c01000020001000151800006036e7338c031 25409 11ce000000010000000000000673756e646e7303697373026e6c0000010001 11ce800000010000000200020673756e646e7303697373026e6c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c00c00010001000151800004c057a002c03900010001000151800004c0576a65 25410 258b00000001000000000000037777770468646369026e6c0000010001 258b80000001000000030003037777770468646369026e6c0000010001c0100002000100015180000e076e73617574683103626974c015c0100002000100015180000a076e736175746832c031c0100002000100015180000a076e736175746833c031c02900010001000151800004d5880c33c04300010001000151800004d5880c3bc05900010001000151800004d4ccc00b 25411 e96e000000010000000000000661636869656c05716d61696c026e6c0000010001 e96e800000010000000200020661636869656c05716d61696c026e6c0000010001c0130002000100015180000d026e7307656d61696c636fc019c0130002000100015180000d036e733206787334616c6cc019c02d00010001000151800004c26dcee2c04600010001000151800004c26d0963 25412 2b100000000100000000000006636f62616c740b666f782d686f7374696e67026e6c0000010001 2b108000000100000002000206636f62616c740b666f782d686f7374696e67026e6c0000010001c01300020001000151800007046e732d31c013c01300020001000151800007046e732d32c013c03300010001000151800004d5bd1374c04600010001000151800004d5bd1675 25413 4ff1000000010000000000000a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000010001 4ff1800000010000000200020a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000010001c01700020001000151800007046e732d31c017c01700020001000151800007046e732d32c017c03700010001000151800004d5bd1374c04a00010001000151800004d5bd1675 25414 73bd000000010000000000000377777705736369746f026e6c0000010001 73bd800000010000000200020377777705736369746f026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800006036e7331c010c02a00010001000151800004d5bd0598c03c00010001000151800004d5bd0599 25415 fe780000000100000000000005736d747031067874646e6574026e6c0000010001 fe788000000100000002000205736d747031067874646e6574026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7331c012c02d00010001000151800004c16e9d02c03e00010001000151800004d9cc165f 25416 fac80000000100000000000005736d747031067874646e6574026e6c00001c0001 fac88000000100000002000205736d747031067874646e6574026e6c00001c0001c01200020001000151800005026e73c012c01200020001000151800006036e7331c012c02d00010001000151800004c16e9d02c03e00010001000151800004d9cc165f 25417 041f00000001000000000000026e73067874646e6574026e6c00001c0001 041f80000001000000020002026e73067874646e6574026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 25418 3a2200000001000000000000036e7331067874646e6574026e6c00001c0001 3a2280000001000000020002036e7331067874646e6574026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004c16e9d02c00c00010001000151800004d9cc165f 25419 064100000001000000000000036e747006787334616c6c026e6c0000010001 064180000001000000030002036e747006787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 25420 71170000000100000000000008706f737464756966096e65746c6f67696373026e6c0000010001 71178000000100000002000208706f737464756966096e65746c6f67696373026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c03300010001000151800004c3c16402c04400010001000151800004c2b2850a 25421 ebda00000001000000000000037777770470696e61026e6c0000010001 ebda80000001000000020000037777770470696e61026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c02c 25422 bced000000010000000000000d7777772c626f6e617061727465026e6c0000010001 bced840300010000000100000d7777772c626f6e617061727465026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 25423 c963000000010000000000000675746f706961076b6e6f77617265026e6c00001c0001 c963800000010000000200020675746f706961076b6e6f77617265026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c02f00010001000151800004c3402003c04000010001000151800004c340202b 25424 c76a000000010000000000000469632d73026e6c00001c0001 c76a800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25425 ab9c00000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 ab9c80000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 25426 e9f6000000010000000000000470696e6b026e6c00000f0001 e9f6800000010000000300020470696e6b026e6c00000f0001c00c00020001000151800015036e73310b70696e6b726f6363616465036e657400c00c0002000100015180000e026e73086d656761706c6578c011c00c00020001000151800006036e7331c049c04600010001000151800004504f6101c06000010001000151800004504f6102 25427 410c000000010000000000000377777709616474726166666963026e6c0000010001 410c800000010000000200000377777709616474726166666963026e6c0000010001c0100002000100015180000f036e7331056279303035036e657400c01000020001000151800006036e7332c032 25428 517a000000010000000000000d737461616c6d65657374657273026e6c00000f0001 517a800000010000000200020d737461616c6d65657374657273026e6c00000f0001c00c0002000100015180000f036e733108636f6d707574656cc01ac00c00020001000151800006036e7332c032c02e00010001000151800004c3568680c04900010001000151800004c3568681 25429 a8e500000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 a8e580000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25430 a78200000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 a78280000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 25431 c0a600000001000000000000037777770773686573706f74026e6c0000010001 c0a680000001000000030002037777770773686573706f74026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 25432 d3840000000100000000000003777777097363686f6f6e657063026e6c0000010001 d3848000000100000002000203777777097363686f6f6e657063026e6c0000010001c01000020001000151800013036e73310c706f77657273657276657232c01ac01000020001000151800006036e7332c032c02e0001000100015180000451047414c04d0001000100015180000451047415 25433 c37a00000001000000000000036e73310c706f77657273657276657232026e6c00001c0001 c37a80000001000000020002036e73310c706f77657273657276657232026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047414c03f0001000100015180000451047415 25434 d10700000001000000000000036e73310c706f77657273657276657232026e6c0000260001 d10780000001000000020002036e73310c706f77657273657276657232026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047414c03f0001000100015180000451047415 25435 5b3600000001000000000000036e73320c706f77657273657276657232026e6c00001c0001 5b3680000001000000020002036e73320c706f77657273657276657232026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0310001000100015180000451047414c00c0001000100015180000451047415 25436 9f0900000001000000000000036e73320c706f77657273657276657232026e6c0000260001 9f0980000001000000020002036e73320c706f77657273657276657232026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0310001000100015180000451047414c00c0001000100015180000451047415 25437 b6fa000000010000000000000f6b616a732d666c7966697368696e67026e6c00000f0001 b6fa800000010000000200010f6b616a732d666c7966697368696e67026e6c00000f0001c00c0002000100015180000e036e733107626c7565646e73c01cc00c00020001000151800006036e7334c034c03000010001000151800004d5c401c0 25438 356a0000000100000000000009676f65647468756973026e6c0000ff0001 356a8000000100000003000309676f65647468756973026e6c0000ff0001c00c00020001000151800010036e733109736974656279746573c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a00010001000151800004c2a55e5ac04600010001000151800004c356781cc058000100010001518000043ec58016 25439 1bc500000001000000000000036e733109736974656279746573026e6c0000010001 1bc580000001000000030003036e733109736974656279746573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c2a55e5ac03c00010001000151800004c356781cc04e000100010001518000043ec58016 25440 7fb300000001000000000000036e733209736974656279746573026e6c0000010001 7fb380000001000000030003036e733209736974656279746573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02e00010001000151800004c2a55e5ac00c00010001000151800004c356781cc04e000100010001518000043ec58016 25441 cf2e00000001000000000000036e733309736974656279746573026e6c0000010001 cf2e80000001000000030003036e733309736974656279746573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02e00010001000151800004c2a55e5ac04000010001000151800004c356781cc00c000100010001518000043ec58016 25442 3d7b0000000100000000000009676f65647468756973026e6c00000f0001 3d7b8000000100000003000309676f65647468756973026e6c00000f0001c00c00020001000151800010036e733109736974656279746573c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a00010001000151800004c2a55e5ac04600010001000151800004c356781cc058000100010001518000043ec58016 25443 0fa300000001000000000000026e7309656174736572766572026e6c0000010001 0fa380000001000000020002026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb1221 25444 23bb000000010000000000000873616e74696e673103746d66026e6c00000f0001 23bb800000010000000200000873616e74696e673103746d66026e6c00000f0001c0150002000100015180000f036e73310571696e6970036e657400c01500020001000151800006036e7332c031 25445 4fa900000001000000000000096e616172686f757365026e6c0000010001 4fa980000001000000030003096e616172686f757365026e6c0000010001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec016c00c00020001000151800006036e7331c033c00c00020001000151800006036e7332c033c02a00010001000151800004d42d2005c04800010001000151800004d42d2003c05a00010001000151800004d42d2103 25446 22bd001000010000000000010469632d73026e6c0000ff00010000290800000000000000 22bd800000010000000200010469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 25447 1628000000010000000000000e6173642d736c6f642d3234323764046164736c0777616e61646f6f026e6c0000010001 1628800000010000000200010e6173642d736c6f642d3234323764046164736c0777616e61646f6f026e6c0000010001c0200002000100015180000d026e73046575726f036e657400c0200002000100015180000d026e73076575726f6e6574c028c05500010001000151800004c2860043 25448 4eb9000000010000000000000d737461616c6d65657374657273026e6c00000f0001 4eb9800000010000000200020d737461616c6d65657374657273026e6c00000f0001c00c0002000100015180000f036e733108636f6d707574656cc01ac00c00020001000151800006036e7332c032c02e00010001000151800004c3568680c04900010001000151800004c3568681 25449 bb4f000000010000000000000d6765626f2d6d6f727368756973026e6c00001c0001 bb4f800000010000000200020d6765626f2d6d6f727368756973026e6c00001c0001c00c0002000100015180000f036e733108696e74726f776562c01ac00c00020001000151800006036e7332c032c02e0001000100015180000450416028c04900010001000151800004c356780c 25450 136600000001000000000000037777770778787866696c6d026e6c0000010001 136680000001000000020000037777770778787866696c6d026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02f 25451 1171000000010000000000000676657261646d026e6c0000060001 1171840300010000000100000676657261646d026e6c0000060001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 25452 d890000000010000000000000377777706696265726961026e6c0000010001 d890800000010000000200010377777706696265726961026e6c0000010001c0100002000100015180000c026e7306636f62776562c017c01000020001000151800011026e73087363686970686f6c036e657400c02b0001000100015180000450f26001 25453 e8cb00000001000000000000026763065f6d736463730676657261646d026e6c0000060001 e8cb84030001000000010000026763065f6d736463730676657261646d026e6c0000060001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 25454 c26d0000000100000000000008726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001 c26d8000000100000002000208726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001c0150002000100015180000e036e7331076e657463617374c023c01500020001000151800006036e7332c03bc03700010001000151800004c2970101c05100010001000151800004c297012d 25455 1fba00000001000000000000036e73330767617574656e67026e6c0000010001 1fba80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25456 63da00000001000000000000037777770967612d6561676c6573026e6c0000010001 63da80000001000000030002037777770967612d6561676c6573026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c01ac01000020001000151800006036e7332c032c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c02e00010001000151800004cf2cd7adc04f0001000100015180000452c04365 25457 2f6e000000010000000000000167036d736e026e6c0000010001 2f6e800000010000000300000167036d736e026e6c0000010001c00e0002000100015180001204646e733302756b046d736674036e657400c00e0002000100015180000a04646e7331026370c02ec00e0002000100015180000a04646e7331026463c02e 25458 03ab000000010000000000000377777707636170656c6c69026e6c0000010001 03ab800000010000000200020377777707636170656c6c69026e6c0000010001c01000020001000151800010036e7331097469736f6e6c696e65c018c01000020001000151800006036e7332c030c02c00010001000151800004d5e382b4c04800010001000151800004d5e38d7c 25459 a844000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 a844800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 25460 e14300000001000000000000037777770e6d657373656e676572746f6f6c73026e6c0000010001 e14380000001000000020000037777770e6d657373656e676572746f6f6c73026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c038 25461 d3f5000000010000000000000377777707747067706f7374026e6c0000010001 d3f5800000010000000200020377777707747067706f7374026e6c0000010001c0100002000100015180000e036e733207737570706f7274c018c01000020001000151800006036e7334c030c02c00010001000151800004c372e7c8c04600010001000151800004c372e6fe 25462 232d00000001000000000000037777770c7367722d6b77616472616e74026e6c0000010001 232d80000001000000020002037777770c7367722d6b77616472616e74026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c01dc01000020001000151800006036e7332c035c03100010001000151800004d4b20403c04a00010001000151800004d5881e45 25463 215b000000010000000000000679656c6c6f77026e6c00000f0001 215b800000010000000300010679656c6c6f77026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc013c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c045c027000100010001518000043efa0202 25464 3160000000010000000000000679656c6c6f77026e6c00000f0001 3160800000010000000300010679656c6c6f77026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc013c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c045c027000100010001518000043efa0202 25465 fd6700000001000000000000037777770573756e6e79026e6c0000010001 fd6780000001000000030002037777770573756e6e79026e6c0000010001c0100002000100015180000d036e733106776964657873c016c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 25466 9266000000010000000000000469632d73026e6c00000f0001 9266800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25467 ddf900000001000000000000037777770e73746172746e656465726c616e64026e6c0000010001 ddf980000001000000020002037777770e73746172746e656465726c616e64026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01fc01000020001000151800006036e7332c037c033000100010001518000045054f347c04f000100010001518000043e94a047 25468 ae9900000001000000000000037777770a6e75747269706c617a61026e6c0000010001 ae9980000001000000020002037777770a6e75747269706c617a61026e6c0000010001c0100002000100015180000d026e7307636f6f6c636f6dc01bc01000020001000151800006036e7332c032c02f00010001000151800004c1ad3506c04800010001000151800004c1ad35c1 25469 d9c4000000010000000000000a736f6e6572616d61696c026e6c00000f0001 d9c4800000010000000200000a736f6e6572616d61696c026e6c00000f0001c00c00020001000151800011036e73310774647364617461036e657400c00c00020001000151800006036e7332c02f 25470 ca6f00000001000000000000084865696e6e6f74650a63617272652d6164616d026e6c0000060001 ca6f84030001000000010000084865696e6e6f74650a63617272652d6164616d026e6c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 25471 e9a40000000100000000000005626c6f656d026e6c00000f0001 e9a48000000100000002000205626c6f656d026e6c00000f0001c00c00020001000151800012036e73310b6963742d636f6e63657074c012c00c00020001000151800006036e7332c02ac02600010001000151800004c26d9983c04400010001000151800004d5544f5d 25472 39170000000100000000000004616e73310774697363616c69026e6c0000010001 39178000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 25473 0aed28000001000000010000024e4c000006000109444d4e4d554c444552024e4c00000100010000025800040a0a1401 0aeda8040000000000000000 25474 bd02000000010000000000000462617274026e6c00000f0001 bd02800000010000000200020462617274026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c011c00c00020001000151800006036e7332c029c02500010001000151800004d43d0f08c04300010001000151800004d43d19e2 25475 0000000070024000c81100000204055001010402 000080010000000000000000 25476 1fcb00000001000000000000036e73330767617574656e67026e6c0000010001 1fcb80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25477 a7ef0000000100000000000003777777046a656e65026e6c0000010001 a7ef8000000100000003000103777777046a656e65026e6c0000010001c0100002000100015180000e026e7308767575727765726bc015c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c047c029000100010001518000043efa0202 25478 b5d6cf7c5010451069fe0000000000000000 25479 e69c00000001000000000000036e7061026e6c0000ff0001 e69c80000001000000020000036e7061026e6c0000ff0001c00c00020001000151800012036e7331086974732d646e733303636f6d00c00c00020001000151800006036e7332c028 25480 255c000000010000000000001074726f7577656e696e6465726567696f026e6c00000f0001 255c800000010000000200001074726f7577656e696e6465726567696f026e6c00000f0001c00c0002000100015180001e036e733114746865627261696e73746f726d666163746f727903636f6d00c00c00020001000151800006036e7332c035 25481 b5d6cf7c501845104c27000000931280000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000 25482 918100000001000000000000037777770c6769726c69656b6973736965046d796964026e6c0000010001 918180000001000000020000037777770c6769726c69656b6973736965046d796964026e6c0000010001c01d00020001000151800010036e733109666972737466696e64c022c01d00020001000151800006036e7332c03a 25483 b5d6cf8a5011450269680000000000000000 25484 000000007002400002c300000204055001010402 000080010000000000000000 25485 5e6900000001000000000000056d6777303103777873026e6c0000010001 5e6980000001000000030003056d6777303103777873026e6c0000010001c01200020001000151800007046e733038c012c01200020001000151800007046e733039c012c01200020001000151800006036e7334c012c02a00010001000151800004c3790128c03d00010001000151800004c3790143c05000010001000151800004d5ef9a65 25486 fe9a00000001000000000000186865742d61646d696e69737472617469656b616e746f6f72026e6c0000010001 fe9a80000001000000020000186865742d61646d696e69737472617469656b616e746f6f72026e6c0000010001c00c00020001000151800017026e7309726f7474657264616d046c756e61036e657400c00c0002000100015180000f026e7309686f6f6664646f7270c046 25487 b5d6cf8b5010450269670000000000000000 25488 f4bc0000000100000000000006636861726973026e6c00000f0001 f4bc8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25489 b5d7afb650104510c4740000000000000000 25490 2db60000000100000000000005646e732d31056c61646f74026e6c0000010001 2db68000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25491 e58300000001000000000000046168626c02626c06787334616c6c026e6c0000010001 e58380000001000000030002046168626c02626c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 25492 b5d7afb650184510e85d00000093d1c0000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000 25493 b5d7afc450114502c3de0000000000000000 25494 7b8a0000000100000000000007706c616e656574026e6c00000f0001 7b8a8000000100000002000207706c616e656574026e6c00000f0001c00c0002000100015180000d026e73076e65746578706fc014c00c00020001000151800006036e7332c02bc028000100010001518000043efa0ac2c041000100010001518000043efa0a82 25495 0000000070024000463d00000204055001010402 000080010000000000000000 25496 8ee400000001000000000000036e733503777873026e6c0000010001 8ee480000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 25497 2db70000000100000000000005646e732d32056c61646f74026e6c0000010001 2db78000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25498 b5d7afc550104502c3dd0000000000000000 25499 ed69000000010000000000000469632d73026e6c0000ff0001 ed69800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25500 b5d8998b501045101e190000000000000000 25501 80840000000100000000000003676266026e6c00000f0001 80848000000100000002000003676266026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 25502 a3180000000100000000000006746865736f72026e6c0000010001 a3188000000100000002000206746865736f72026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c013c00c00020001000151800006036e7332c02ac02700010001000151800004d9aa2042c04000010001000151800004d9aa2c06 25503 b5d8998b5018451082c2000000939100000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000 25504 72e60000000100000000000007746f6b6865696d026e6c00000f0001 72e68000000100000002000207746f6b6865696d026e6c00000f0001c00c0002000100015180000e036e733107626265796f6e64c014c00c00020001000151800006036e7332c02cc028000100010001518000043eb1900bc042000100010001518000043eb19002 25505 000000007002faf04e890000020405b401010402 000080010000000000000000 25506 b5d89999501145021d830000000000000000 25507 3964000000010000000000000377777703656d6f026e6c0000010001 3964800000010000000200000377777703656d6f026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c02c 25508 b66800000001000000000000096a616e6b7265656674026e6c00000f0001 b66880000001000000030001096a616e6b7265656674026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc016c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c048c02a000100010001518000043efa0202 25509 6be4000000010000000000000469632d73026e6c0000ff0001 6be4800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25510 29260000000100000000000003626c3102626c06787334616c6c026e6c0000010001 29268000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25511 b5d8999a501045021d820000000000000000 25512 34bc0000000100000000000008616473657276657206776562616473026e6c0000010001 34bc8000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 25513 0af228000001000000010000024e4c000006000109444d4e4d554c444552024e4c0000010001000002580004c0a80164 0af2a8040000000000000000 25514 89510000000100000000000003616c7409576f7264486f757365026e6c0000010001 89518000000100000003000203616c7409576f7264486f757365026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 25515 1e1f000000010000000000000964736c2d343831393806736f6c636f6e026e6c0000010001 1e1f800000010000000300030964736c2d343831393806736f6c636f6e026e6c0000010001c0160002000100015180000b08736f6c7574696f6ec016c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03100010001000151800004d42d2005c04800010001000151800004d42d2003c05a00010001000151800004d42d2103 25516 000000007002400060f900000204055001010402 000080010000000000000000 25517 1ca20000000100000000000007766e6f2d6e6377026e6c0000010001 1ca28000000100000002000207766e6f2d6e6377026e6c0000010001c00c0002000100015180000f036e733108696e7465726d6178c014c00c00020001000151800006036e7332c02cc02800010001000151800004505fa002c04300010001000151800004505fac02 25518 2e2200000001000000000000036e733109666972737466696e64026e6c0000010001 2e2280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 25519 f48800000001000000000000026e7306766576696461026e6c0000010001 f48880000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 25520 b5d95492501045107dcd0000000000000000 b5d9d4940000000000000000 25521 b5d954925018451062f6000000930f80000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000 b5d9d4940000000000000000 25522 f6ad00000001000000000000106d656573746572736368696c64657273026e6c00000f0001 f6ad80000001000000020002106d656573746572736368696c64657273026e6c00000f0001c00c0002000100015180000e026e7308696e7465726c6162c01dc00c00020001000151800006036e7332c034c03100010001000151800004d4cb0902c04b00010001000151800004d4cb0903 25523 02e500000001000000000000056d61696c3103696e67026e6c0000010001 02e580000001000000020002056d61696c3103696e67026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02a0001000100015180000491dd19c2c03c0001000100015180000491dd5dc2 25524 b5d954a0501145027d370000000000000000 b5d9d4a40000000000000000 25525 93b80000000100000000000006636861726973026e6c0000ff0001 93b88000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25526 0c5900000001000000000000036e733109717569636b686f7374026e6c0000010001 0c5980000001000000020002036e733109717569636b686f7374026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f902c03c000100010001518000045054f181 25527 0000000070024000784600000204055001010402 000080010000000000000000 25528 86ef00000001000000000000036e733209717569636b686f7374026e6c0000010001 86ef80000001000000020002036e733209717569636b686f7374026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054f902c00c000100010001518000045054f181 25529 b78c00000001000000000000037777771a69726973657474652d64656b62656464656e2d6b757373656e73026e6c0000010001 b78c80000001000000030001037777771a69726973657474652d64656b62656464656e2d6b757373656e73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc02bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c05dc03f000100010001518000043efa0202 25530 d62000000001000000000000055f6c646170045f7463700970632d626172656e64026e6c0000060001 d62084030001000000010000055f6c646170045f7463700970632d626172656e64026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 25531 0adb000000010000000000000377777707706974626f7264026e6c0000010001 0adb800000010000000300000377777707706974626f7264026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c031c01000020001000151800007046e733033c031 25532 b5d954a1501045027d360000000000000000 b5d9d4a40000000000000000 25533 b5da034150104510e66a0000000000000000 b5da80010000000000000000 25534 b5da03415018451059540000009382c0000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000 b5da80010000000000000000 25535 a8b80000000100000000000007626f72657474690564656d6f6e026e6c0000010001 a8b88000000100000003000207626f72657474690564656d6f6e026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c0140002000100015180000f036e73320564656d6f6e036e657400c02e00010001000151800004c29f4906c04000010001000151800004c29fb004 25536 b5da034f50114502e5d40000000000000000 b5da80010000000000000000 25537 0000000070024000e0de00000204055001010402 000080010000000000000000 25538 1f64000000010000000000000e6875676f63617273797374656d73026e6c00000f000100 1f64800000010000000200000e6875676f63617273797374656d73026e6c00000f0001c00c0002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c00c00020001000151800015026e730f796f75726e616d65686f7374696e67c045 25539 9a4900000001000000000000037777770c706f727461626c6567656172026e6c0000010001 9a4980000001000000020000037777770c706f727461626c6567656172026e6c0000010001c01000020001000151800010056e73313533047061697203636f6d00c0100002000100015180000c056e73303030036e7330c03c 25540 1cfe000000010000000000000673636f74747903647376026e6c0000010001 1cfe800000010000000200020673636f74747903647376026e6c0000010001c0130002000100015180000f036e733108696e7465726d6178c017c01300020001000151800006036e7332c02fc02b00010001000151800004505fa002c04600010001000151800004505fac02 25541 81ac000000010000000000000a61616e72696368617264026e6c00000f0001 81ac840300010000000100000a61616e72696368617264026e6c00000f0001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 25542 b5da035050104502e5d30000000000000000 b5da80010000000000000000 25543 b5dadc785010451075cb0000000000000000 25544 5501000000010000000000000667616d657273026e6c0000010001 5501800000010000000200020667616d657273026e6c0000010001c00c0002000100015180000b036e73310470696e65c013c00c00020001000151800006036e7332c02bc02700010001000151800004d59c0201c03e00010001000151800004c3c1a303 25545 b5dadc78501845102975000000934200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afed1403c50510003000000344e544c4d535350000100000097b200e0090009002b0000000b000b002000000046494c4553455256455231444d4e4d554c4445520000 25546 b5dadc865011450275350000000000000000 25547 bd0200000001000000000000055f6c646170045f7463700970632d626172656e64026e6c0000060001 bd0284030001000000010000055f6c646170045f7463700970632d626172656e64026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 25548 4bdf0000000100000000000004686f6d65026e6c00000f0001 4bdf8000000100000003000304686f6d65026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02500010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 25549 b5dadc875010450275340000000000000000 25550 8a3c00000001000000000000037777770a746573746d696a6e6971026e6c0000010001 8a3c80000001000000030002037777770a746573746d696a6e6971026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 25551 80640000000100000000000006706c616e65740b6765656e726f747a6f6f69026e6c00000f0001 80648403000100000001000006706c616e65740b6765656e726f747a6f6f69026e6c00000f0001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 25552 c38000000001000000000000037777771777656277696e6b656c64656b6e757473656c6b61617274026e6c0000010001 c38080000001000000020002037777771777656277696e6b656c64656b6e757473656c6b61617274026e6c0000010001c01000020001000151800019036e733112686f737465642d62792d32686f7374696e67c028c01000020001000151800006036e7332c040c03c000100010001518000043ed45934c061000100010001518000043ed45935 25553 c3b300000001000000000000037777771067657a6f6e646865696473706c65696e026e6c0000010001 c3b380000001000000020002037777771067657a6f6e646865696473706c65696e026e6c0000010001c01000020001000151800010026e730a7a65656c616e646e6574c021c01000020001000151800006036e7332c038c03500010001000151800004d473c0c1c05100010001000151800004d473c0c3 25554 c2d30000000100000000000006676565727473026e6c00000f0001 c2d38000000100000002000206676565727473026e6c00000f0001c00c00020001000151800009036e7331026973c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5852102c03c00010001000151800004d5c41503 25555 612d0000000100000000000003777777126b616d657276616e6b6f6f7068616e64656c026e6c0000010001 612d8000000100000002000203777777126b616d657276616e6b6f6f7068616e64656c026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c023c01000020001000151800006036e7332c03ac03700010001000151800004c3402003c05000010001000151800004c340202b 25556 a1d300000001000000000000027073026e6c00000f0001 a1d380000001000000020000027073026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c02a 25557 14f8000000010000000000000377777706666c6f796473026e6c0000010001 14f8800000010000000300010377777706666c6f796473026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 25558 0d1200000001000000000000037777770a6f6d7374616e64657273026e6c0000010001 0d1280000001000000020000037777770a6f6d7374616e64657273026e6c0000010001c0100002000100015180001505646e7332300961637469766569737003636f6d00c0100002000100015180000805646e733231c035 25559 483e0000000100000000000003736e73026e6c00000f0001 483e8000000100000002000003736e73026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c028 25560 1eab0000000100000000000006616d666f7273026e6c0000ff0001 1eab8000000100000002000206616d666f7273026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 25561 2ff900000001000000000000036e73330767617574656e67026e6c0000010001 2ff980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25562 ad200000000100000000000006706c616e65740b6765656e726f747a6f6f69026e6c0000010001 ad208403000100000001000006706c616e65740b6765656e726f747a6f6f69026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 25563 d10700000001000000000000076f707573333931026e6c0000010001 d10780000001000000020002076f707573333931026e6c0000010001c00c0002000100015180000e036e733207737570706f7274c014c00c00020001000151800006036e7334c02cc02800010001000151800004c372e7c8c04200010001000151800004c372e6fe 25564 5d5d0000000100000000000007706c617474656c0a6d6963726f7368617265026e6c00000f0001 5d5d8000000100000002000107706c617474656c0a6d6963726f7368617265026e6c00000f0001c01400020001000151800010036e7331096c73686f7374696e67c01fc01400020001000151800013036e7332096c73686f7374696e67036e657400c03300010001000151800004d420e10a 25565 666500000001000000000000026e73076e656473746174026e6c0000010001 666580000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25566 8aec00000001000000000000036e73310470696e65026e6c00001c0001 8aec80000001000000020002036e73310470696e65026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d59c0201c03700010001000151800004c3c1a303 25567 0ed900000001000000000000036e73310470696e65026e6c0000260001 0ed980000001000000020002036e73310470696e65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d59c0201c03700010001000151800004c3c1a303 25568 591400000001000000000000036e73320470696e65026e6c00001c0001 591480000001000000020002036e73320470696e65026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d59c0201c00c00010001000151800004c3c1a303 25569 858c00000001000000000000036e73320470696e65026e6c0000260001 858c80000001000000020002036e73320470696e65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d59c0201c00c00010001000151800004c3c1a303 25570 3e5e000000010000000000000377777714776f6f6e626f756c65766172647a61616e64616d026e6c0000010001 3e5e800000010000000200010377777714776f6f6e626f756c65766172647a61616e64616d026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c025c01000020001000151800006036e7334c03dc03900010001000151800004d5c401c0 25571 6e610000000100000000000003777777086472756774657874026e6c0000010001 6e618000000100000002000003777777086472756774657874026e6c0000010001c0100002000100015180000a036e7331036c6170c019c0100002000100015180000b026e73026e6c036e657400 25572 59ad00000001000000000000066d696e66696e026e6c0000010001 59ad80000001000000020001066d696e66696e026e6c0000010001c00c00020001000151800006036e7331c00cc00c0002000100015180000b026e73026e6c036e657400c02700010001000151800004c2b2a748 25573 cd8400000001000000000000086261726d61746f6e026e6c0000ff0001 cd8480000001000000020002086261726d61746f6e026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 25574 008d28000001000200000000026e6c00000600010a622d73657276657230310a627572676572746a6573026e6c00000500fe000000000000c014000100010000000000040a8a6ffe 008da8040000000000000000 25575 b45f00000001000000000000046765746f026e6c00001c0001 b45f80000001000000030001046765746f026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc011c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c043c025000100010001518000043efa0202 25576 000000007002faf04ab80000020405b401010402 000080010000000000000000 25577 fed600000001000000000000036e733107626265796f6e64026e6c0000010001 fed680000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 25578 b5dd4b595010faf076350000000000000000 b5ddcb540000000000000000 25579 fe5b0000000100000000000005646e732d31056c61646f74026e6c0000010001 fe5b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25580 a0af0000000100000000000005646e732d32056c61646f74026e6c0000010001 a0af8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25581 b5dd4b595018faf05667000000931680000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afce2403c4e620003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000422d5345525645523031425552474552544a45530000 b5ddcb540000000000000000 25582 817f00000001000000000000037777770f736f6674776172652d77696e6b656c026e6c0000010001 817f80000001000000020002037777770f736f6674776172652d77696e6b656c026e6c0000010001c0100002000100015180000a036e7331036e7873c020c01000020001000151800006036e7332c038c03400010001000151800004d973c015c04a00010001000151800004d973c102 25583 b5dd4b675011fae2759f0000000000000000 b5ddcb640000000000000000 25584 000000007002faf017e30000020405b401010402 000080010000000000000000 25585 b5dd4b685010fae2759e0000000000000000 b5ddcb640000000000000000 25586 4abe000000010000000000000469632d73026e6c0000010001 4abe800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25587 d8cb00000001000000000000037777770567616d6572026e6c0000010001 d8cb80000001000000020002037777770567616d6572026e6c0000010001c0100002000100015180000b036e73310470696e65c016c01000020001000151800006036e7332c02ec02a00010001000151800004d59c0201c04100010001000151800004c3c1a303 25588 b5de11195010faf07d9f0000000000000000 b5de91140000000000000000 25589 aad600000001000000000000036e7331056577656b61026e6c0000010001 aad680000001000000020002036e7331056577656b61026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7333c010c00c0001000100015180000451ab6504c0380001000100015180000451ab660e 25590 b5de11195018faf04852000000932d00000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afce2403c4e620003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000422d5345525645523031425552474552544a45530000 b5de91140000000000000000 25591 594b0000000100000000000008646174616261736506717569726b79026e6c0000010001 594b8000000100000002000008646174616261736506717569726b79026e6c0000010001c01500020001000151800014046e733031096772616669782d697303636f6d00c01500020001000151800007046e733033c035 25592 d40000000001000000000000036e7331036c6170026e6c0000010001 d40080000001000000020000036e7331036c6170026e6c0000010001c01000020001000151800012096d617273657065696e0563616c7978c014c0100002000100015180000e026e730563616c7978036e657400 25593 b5de11275011fae27d090000000000000000 b5de91240000000000000000 25594 e89900000001000000000000037777770b627564656c2d706f737365026e6c0000010001 e89980000001000000020000037777770b627564656c2d706f737365026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 25595 000000007002faf0325f0000020405b401010402 000080010000000000000000 25596 95d100000001000000000000046b6f7374026e6c00000f0001 95d180000001000000020002046b6f7374026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 25597 b5de11285010fae27d080000000000000000 b5de91240000000000000000 25598 b5decd685010faf0dbcb0000000000000000 25599 0729000000010000000000000d6138302d3132362d32372d3537046164736c06787334616c6c026e6c0000010001 0729800000010000000300020d6138302d3132362d32372d3537046164736c06787334616c6c026e6c0000010001c01f00020001000151800005026e73c01fc01f00020001000151800006036e7332c01fc01f0002000100015180000d026e730472697065036e657400c03a00010001000151800004c26d0642c04b00010001000151800004c26d0963 25600 b5decd685018faf08b7e000000934800000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afce2403c4e620003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000422d5345525645523031425552474552544a45530000 25601 35f8000000010000000000000377777711686f74656c2d626f6572656e6b616d6572026e6c0000010001 35f8800000010000000200020377777711686f74656c2d626f6572656e6b616d6572026e6c0000010001c0100002000100015180000c026e7306787334616c6cc022c01000020001000151800006036e7332c039c03600010001000151800004c26d0642c04e00010001000151800004c26d0963 25602 b5decd765011fae2db350000000000000000 25603 7c3600000001000000000000036e733109626f7577666f6e6473026e6c0000010001 7c3680000001000000030000036e733109626f7577666f6e6473026e6c0000010001c01000020001000151800014036e73310a646e736d616e6167656403636f6d00c01000020001000151800006036e7334c032c01000020001000151800006036e7336c032 25604 f97900000001000000000000036e733109626f7577666f6e6473026e6c00001c0001 f97980000001000000030000036e733109626f7577666f6e6473026e6c00001c0001c01000020001000151800014036e73310a646e736d616e6167656403636f6d00c01000020001000151800006036e7334c032c01000020001000151800006036e7336c032 25605 2b0a00000001000000000000036e733109626f7577666f6e6473026e6c0000260001 2b0a80000001000000030000036e733109626f7577666f6e6473026e6c0000260001c01000020001000151800014036e73310a646e736d616e6167656403636f6d00c01000020001000151800006036e7334c032c01000020001000151800006036e7336c032 25606 57f7000000010000000000000663616e646561026e6c0000010001 57f7800000010000000300030663616e646561026e6c0000010001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 25607 64b200000001000000000000046d78303209626f7577666f6e6473026e6c0000010001 64b280000001000000030000046d78303209626f7577666f6e6473026e6c0000010001c01100020001000151800014036e73310a646e736d616e6167656403636f6d00c01100020001000151800006036e7334c033c01100020001000151800006036e7336c033 25608 b5decd775010fae2db340000000000000000 25609 ee29000000010000000000000377777708716d732d63657274026e6c0000010001 ee29800000010000000200020377777708716d732d63657274026e6c0000010001c0100002000100015180000f026e7309656174736572766572c019c01000020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 25610 b3e20000000100000000000003777777066d796c656e73026e6c0000010001 b3e28000000100000003000303777777066d796c656e73026e6c0000010001c0100002000100015180000f04646e7331076d696e64627573c017c0100002000100015180000704646e7332c030c0100002000100015180000704646e7333c030c02b00010001000151800004d44ff4ddc04600010001000151800004d44ff645c05900010001000151800004c3f5c70e 25611 f85600000001000000000000036e733207626265796f6e64026e6c0000010001 f85680000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 25612 fc2b00000001000000000000036e733207626265796f6e64026e6c0000260001 fc2b80000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 25613 34c30010000100000000000106776468303131066e7434616c6c026e6c00000100010000290800000080000000 34c38000000100000002000306776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d09630000291000000000000000 25614 43550000000100000000000004646e7332076d696e64627573026e6c0000010001 43558000000100000003000304646e7332076d696e64627573026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0110002000100015180000704646e7333c011c02d00010001000151800004d44ff4ddc00c00010001000151800004d44ff645c04e00010001000151800004c3f5c70e 25615 2c380000000100000000000004646e7333076d696e64627573026e6c0000010001 2c388000000100000003000304646e7333076d696e64627573026e6c0000010001c0110002000100015180000704646e7331c011c0110002000100015180000704646e7332c011c01100020001000151800002c00cc02d00010001000151800004d44ff4ddc04000010001000151800004d44ff645c00c00010001000151800004c3f5c70e 25616 b4330000000100000000000004646e7331076d696e64627573026e6c0000010001 b4338000000100000003000304646e7331076d696e64627573026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c0110002000100015180000704646e7333c011c00c00010001000151800004d44ff4ddc03b00010001000151800004d44ff645c04e00010001000151800004c3f5c70e 25617 b72f00000001000000000000037777770c6b65726b766f6c656e64616d026e6c0000010001 b72f84030001000000010000037777770c6b65726b766f6c656e64616d026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 25618 b36f0000000100000000000004686e73300774697363616c69026e6c0000010001 b36f8000000100000003000204686e73300774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 25619 1afd0000000100000000000004686e73310774697363616c69026e6c0000010001 1afd8000000100000003000204686e73310774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 25620 53ce00000001000000000000055f6c646170045f74637003706463065f6d736463730a737461686c77696c6c65026e6c0000210001 53ce80000001000000020002055f6c646170045f74637003706463065f6d736463730a737461686c77696c6c65026e6c0000210001c0220002000100015180000d026e73077374616e6e6574c02dc02200020001000151800006036e7332c044c04100010001000151800004d5852414c05a00010001000151800004d5852418 25621 c686000000010000000000000377777708636f6e2d6e656374026e6c0000010001 c686800000010000000200000377777708636f6e2d6e656374026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c043 25622 5f4b00000001000000000000036e7333107365637572656e616d65736572766572026e6c0000010001 5f4b80000001000000020002036e7333107365637572656e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0350001000100015180000442a4f102c0470001000100015180000442a4f105 25623 b58b0000000100000000000003777777106469676974616c6570696f6e69657273026e6c0000010001 b58b8000000100000002000003777777106469676974616c6570696f6e69657273026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c038 25624 41390000000100000000000006776468303131066e7434616c6c026e6c0000010001 41398000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 25625 ee7600000001000000000000046d617365026e6c0000010001 ee7680000001000000030002046d617365026e6c0000010001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 25626 281500000001000000000000046e73303803777873026e6c0000260001 281580000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 25627 22ac00000001000000000000046e73303903777873026e6c0000260001 22ac80000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 25628 931500000001000000000000037777770e6865746d6f6f6973746568756973026e6c0000010001 931580000001000000020002037777770e6865746d6f6f6973746568756973026e6c0000010001c01000020001000151800009036e7331026973c01fc01000020001000151800006036e7332c037c03300010001000151800004d5852102c04800010001000151800004d5c41503 25629 280000000001000000000000036e73340767617574656e67026e6c0000010001 280080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25630 000c00000001000000000000036e73340767617574656e67026e6c0000010001 000c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25631 bcde000000010000000000000377777708636174776f6d616e026e6c0000010001 bcde800000010000000200000377777708636174776f6d616e026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 25632 785700000001000000000000037777770a66726573687472617368026e6c0000010001 785780000001000000030000037777770a66726573687472617368026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c037c0100002000100015180000a076e73686f737433c037 25633 673a000000010000000000000564656b6579026e6c00000f0001 673a800000010000000300030564656b6579026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c012c00c000200010001518000070470726932c02bc00c000200010001518000070470726933c02bc026000100010001518000049a0ff9a6c044000100010001518000049a0ff9aac057000100010001518000049a0ff9ae 25634 a2bc00000001000000000000037777770865726f747261696e026e6c0000010001 a2bc80000001000000020002037777770865726f747261696e026e6c0000010001c0100002000100015180000b036e7331046e732d31c019c01000020001000151800006036e7332c031c02d000100010001518000045045a0cdc04400010001000151800004d4cceec8 25635 dac200000001000000000000037777770d782d73747265616d6d65646961026e6c0000010001 dac280000001000000030000037777770d782d73747265616d6d65646961026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c03ac0100002000100015180000a076e73686f737433c03a 25636 5a530000000100000000000008686f73746e616d650462696e640000100003 5a538000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 25637 ca87000000010000000000000377777710696e6469616e736b696e746174746f6f026e6c0000010001 ca87800000010000000200020377777710696e6469616e736b696e746174746f6f026e6c0000010001c0100002000100015180000f026e7309656174736572766572c021c01000020001000151800006036e7332c038c03500010001000151800004d4cb0e42c05000010001000151800004d4cb1221 25638 c44f0000000100000000000006726f6775653906787334616c6c026e6c0000010001 c44f8000000100000003000206726f6775653906787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25639 32d3000000010000000000000462617261026e6c00000f0001 32d3800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 25640 8d2000000001000000000000036e733109696e686f6c6c616e64026e6c0000010001 8d2080000001000000020002036e733109696e686f6c6c616e64026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c01ac00c00010001000151800004c2ab230bc03c00010001000151800004c0576a65 25641 2eca00000001000000000000036e733109696e686f6c6c616e64026e6c00001c0001 2eca80000001000000020002036e733109696e686f6c6c616e64026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c01ac00c00010001000151800004c2ab230bc03c00010001000151800004c0576a65 25642 133c000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 133c800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 25643 01520000000100000000000008686f73746e616d650462696e640000100003 01528000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 25644 38c200000001000000000000036e73310e666c6578776562686f7374696e67026e6c0000010001 38c280000001000000030002036e73310e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c00c00010001000151800004cf2cd7adc0410001000100015180000452c04365 25645 7fa700000001000000000000036e73310e666c6578776562686f7374696e67026e6c0000010001 7fa780000001000000030002036e73310e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c00c00010001000151800004cf2cd7adc0410001000100015180000452c04365 25646 a08b0000000100000000000008686f73746e616d650462696e640000100003 a08b8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 25647 541a0000000100000000000008686f73746e616d650462696e640000100003 541a8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 25648 00a400000001000000000000097a6f6e6e6576656c64026e6c00000f0001 00a480000001000000020000097a6f6e6e6576656c64026e6c00000f0001c00c0002000100015180000f026e7306777367617465036e657400c00c00020001000151800006036e7332c02d 25649 a47400000001000000000000056d76726476026e6c00000f0001 a47480000001000000020000056d76726476026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c029 25650 77fc000000010000000000000d6a616e7475696e737472616276026e6c00000f0001 77fc800000010000000200000d6a616e7475696e737472616276026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c034 25651 3b9c00000001000000000000027463036164730974656c656772616166026e6c0000010001 3b9c80000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 25652 32ab00000001000000000000026e7306636f6d6e6574026e6c0000010001 32ab80000001000000020002026e7306636f6d6e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d46c106ec03800010001000151800004d46c1078 25653 d6eb00000001000000000000036e733206636f6d6e6574026e6c0000010001 d6eb80000001000000020002036e733206636f6d6e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004d46c106ec00c00010001000151800004d46c1078 25654 1e230000000100000000000003616f6f026e6c00000f0001 1e238000000100000002000003616f6f026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 25655 ee7600000001000000000000057369736b75026e6c00001c0001 ee7680000001000000020002057369736b75026e6c00001c0001c00c0002000100015180000a026e730469636d63c012c00c00020001000151800006036e7332c029c026000100010001518000043e643805c03c000100010001518000043e643806 25656 ebc000000001000000000000037777770f6372697374696e77696c64626f6c7a026e6c0000010001 ebc080000001000000020000037777770f6372697374696e77696c64626f6c7a026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c037 25657 56a8000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 56a8800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 25658 083e0000000100000000000008646f776e6c6f61640363707a026e6c0000010001 083e8000000100000002000208646f776e6c6f61640363707a026e6c0000010001c0150002000100015180000e026e73086e65746177617265c019c01500020001000151800006036e7332c030c02d000100010001518000043eb1db32c047000100010001518000043eb1db3c 25659 7c0400000001000000000000037777770a706f726e706172726f74026e6c0000010001 7c0480000001000000020002037777770a706f726e706172726f74026e6c0000010001c0100002000100015180001104646e733109696e7465726f757465c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d4173f3ec04c00010001000151800004d4173f3d 25660 10a70000000100000000000003777777076d696a6e736578026e6c0000010001 10a78000000100000002000003777777076d696a6e736578026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02f 25661 5a07001000010000000000010377777707746865666c6f77026e6c00000100010000290800000000000000 5a07800000010000000200030377777707746865666c6f77026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb0040000291000000000000000 25662 cbd60000000100000000000003777777086275636b73686f74026e6c0000010001 cbd68000000100000002000003777777086275636b73686f74026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 25663 1f7d000000010000000000000377777707766f6c64657273026e6c0000010001 1f7d800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 25664 ab0e0000000100000000000003777777096171756172656c6c65026e6c0000010001 ab0e8000000100000002000203777777096171756172656c6c65026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01ac01000020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 25665 2f70000000010000000000000377777707766f6c64657273026e6c0000010001 2f70800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 25666 fd91000000010000000000000565666e657408767575727765726b026e6c0000010001 fd91800000010000000300010565666e657408767575727765726b026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c044c02f000100010001518000043efa0202 25667 2f80000000010000000000000377777707766f6c64657273026e6c0000010001 2f80800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 25668 90370000000100000000000005646e732d3808696e7465722d7873026e6c0000260001 90378000000100000002000205646e732d3808696e7465722d7873026e6c0000260001c01200020001000151800006036e7330c012c01200020001000151800006036e7331c012c02f000100010001518000043e0452abc041000100010001518000043e0452ac 25669 3601001000010000000000010565666e657403626974026e6c00000100010000290800000080000000 3601800000010000000300040565666e657403626974026e6c0000010001c0120002000100015180000a076e736175746831c012c0120002000100015180000a076e736175746832c012c0120002000100015180000a076e736175746833c012c02a00010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b0000291000000000000000 25670 468100000001000000000000066e65746e6574026e6c00000f0001 468180000001000000020002066e65746e6574026e6c00000f0001c00c00020001000151800015026e730f6761726e69657270726f6a65637473c013c00c00020001000151800006036e7331c02ac027000100010001518000045117e122c048000100010001518000045117e142 25671 be990000000100000000000003777777086f6e7a657461616c026e6c0000010001 be998000000100000003000103777777086f6e7a657461616c026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 25672 0b99000000010000000000000472656e70026e6c0000010001 0b99800000010000000200020472656e70026e6c0000010001c00c0002000100015180000b026e73057162616c6cc011c00c0002000100015180000f026e7309747269706c652d6974c011c02500010001000151800004d584b024c03c00010001000151800004d584b002 25673 d1ba00000001000000000000037777770a6865746b65727370656c026e6c0000010001 d1ba80000001000000020002037777770a6865746b65727370656c026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c01bc01000020001000151800006036e7332c033c02f00010001000151800004d4b20403c04800010001000151800004d5881e45 25674 bee700000001000000000000037777770966616d696c79776562026e6c0000010001 bee780000001000000020002037777770966616d696c79776562026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c01ac01000020001000151800006036e7332c032c02e0001000100015180000450416028c04900010001000151800004c356780c 25675 e1e20000000100000000000003777777096465736a616d61616e026e6c0000010001 e1e28000000100000002000203777777096465736a616d61616e026e6c0000010001c01000020001000151800009036e7331026973c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5852102c04300010001000151800004d5c41503 25676 ea290000000100000000000005726561616c026e6c00000f0001 ea298000000100000002000005726561616c026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02a 25677 05f9000000010000000000000377777707746865666c6f77026e6c0000010001 05f9800000010000000200020377777707746865666c6f77026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 25678 52a00000000100000000000003777777076e65747765726b026e6c0000010001 52a08000000100000003000303777777076e65747765726b026e6c0000010001c0100002000100015180000e076e73617574683103626974c018c0100002000100015180000a076e736175746832c034c0100002000100015180000a076e736175746833c034c02c00010001000151800004d5880c33c04600010001000151800004d5880c3bc05c00010001000151800004d4ccc00b 25679 ecb900000001000000000000037777771076616b616e7469656b616c656e646572026e6c0000010001 ecb980000001000000020002037777771076616b616e7469656b616c656e646572026e6c0000010001c0100002000100015180000f036e733108636f6d707574656cc021c01000020001000151800006036e7332c039c03500010001000151800004c3568680c05000010001000151800004c3568681 25680 384300000001000000000000066e69656c7331106b72656e73636f6e73756c74616e6379026e6c0000060001 384384030001000000010000066e69656c7331106b72656e73636f6e73756c74616e6379026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 25681 ed9600000001000000000000096c6164796c65616473026e6c0000010001 ed9680000001000000020000096c6164796c65616473026e6c0000010001c00c0002000100015180000f026e7306686f73743475036e657400c00c00020001000151800006036e7332c02d 25682 c83900000001000000000000037777770b686170707974726176656c026e6c0000010001 c83980000001000000020002037777770b686170707974726176656c026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01cc0100002000100015180001004646e733208636f6e6365707473c01cc03000010001000151800004d5c51c03c04d00010001000151800004d5c51e1c 25683 7a5f0000000100000000000003706f7006787334616c6c026e6c0000010001 7a5f8000000100000003000203706f7006787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 25684 d50300000001000000000000076b72656e74616c026e6c00000f0001 d50380000001000000020002076b72656e74616c026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 25685 205d00000001000000000000037777770c67656d65656e74656265656b026e6c0000010001 205d80000001000000020002037777770c67656d65656e74656265656b026e6c0000010001c0100002000100015180000e026e73086d656761706c6578c01dc01000020001000151800006036e7331c034c03100010001000151800004504f6101c04b00010001000151800004504f6102 25686 3dbf0000000100000000000008667265656d61696c026e6c0000010001 3dbf8000000100000003000208667265656d61696c026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 25687 179728000001000200000000026e6c0000060001066e69656c7331106b72656e73636f6e73756c74616e6379026e6c00000500fe000000000000c01400010001000000000004c0a80165 1797a8040000000000000000 25688 8248000000010000000000000970636d7366727430310370636d026e6c0000010001 8248800000010000000200010970636d7366727430310370636d026e6c0000010001c01600020001000151800005026e73c016c0160002000100015180000b026e73026e6c036e657400c02e00010001000151800004c143e6dc 25689 a04000000001000000000000196e656465726c616e647365766f6f726465656c77696e6b656c026e6c0000ff0001 a04080000001000000030002196e656465726c616e647365766f6f726465656c77696e6b656c026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c026c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c03ec03a00010001000151800004d4ccc0fcc06f000100010001518000043efa0703 25690 8cde0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 8cde8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25691 1d2e00000001000000000000036e733109756e69736f75726365026e6c0000010001 1d2e80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 25692 48af00000001000000000000036e7331046a617a65026e6c0000010001 48af80000001000000020000036e7331046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 25693 0000000070024000ae090000020405ac01010402 000080010000000000000000 25694 b5e1b72b5010441069980000000000000000 25695 df4d00000001000000000000037777770c6368726f6f6d76656c67656e026e6c0000010001 df4d80000001000000030003037777770c6368726f6f6d76656c67656e026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c01dc01000020001000151800006036e7330c034c01000020001000151800006036e7333c034c03100010001000151800004c3561682c05100010001000151800004c3561683c06300010001000151800004d5de0bfa 25696 a844000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 a844800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 25697 b5e1b72b501844100ec700000094cb29000000010001000000000f313031333631323238313837342d330000f900010f313031333631323238313837342d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af729403c48a90003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 25698 22a100000001000000000000036e7334093475686f7374696e67026e6c0000010001 22a180000001000000020000036e7334093475686f7374696e67026e6c0000010001c0100002000100015180001104646e73310634752d646e73036e657400c0100002000100015180000704646e7332c033 25699 613800000001000000000000036e7333093475686f7374696e67026e6c0000010001 613880000001000000020000036e7333093475686f7374696e67026e6c0000010001c0100002000100015180001104646e73310634752d646e73036e657400c0100002000100015180000704646e7332c033 25700 d92f00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 d92f80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 25701 ef9e00000001000000000000196e656465726c616e647365766f6f726465656c77696e6b656c026e6c0000010001 ef9e80000001000000030002196e656465726c616e647365766f6f726465656c77696e6b656c026e6c0000010001c00c0002000100015180000d036e733106776964657873c026c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c03ec03a00010001000151800004d4ccc0fcc06f000100010001518000043efa0703 25702 4d9500100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 4d9580000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 25703 922e00000001000000000000026e7306746865626f73026e6c0000010001 922e80000001000000030003026e7306746865626f73026e6c0000010001c00f0002000100015180000b026e73056f70737973c016c00f0002000100015180000e026e730876642d626f736368c016c00f00020001000151800002c00cc02a00010001000151800004507fd623c04100010001000151800004d5540498c00c000100010001518000043eb19695 25704 5fac0000000100000000000005646e732d31056c61646f74026e6c0000010001 5fac8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25705 649100000001000000000000026e730876642d626f736368026e6c0000010001 649180000001000000030003026e730876642d626f736368026e6c0000010001c00f0002000100015180000b026e73056f70737973c018c00f00020001000151800002c00cc00f0002000100015180000c026e7306746865626f73c018c02c00010001000151800004507fd623c00c00010001000151800004d5540498c051000100010001518000043eb19695 25706 b5e1b7395011440269010000000000000000 25707 14ff00000001000000000000037777770a73746172746b6162656c026e6c0000010001 14ff80000001000000030001037777770a73746172746b6162656c026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 25708 0000000070024000be8d0000020405ac01010402 000080010000000000000000 25709 59b50000000100000000000008707263373162353505707263373107747067706f7374026e6c0000010001 59b58000000100000002000208707263373162353505707263373107747067706f7374026e6c0000010001c01b0002000100015180000e036e733207737570706f7274c023c01b00020001000151800006036e7334c03bc03700010001000151800004c372e7c8c05100010001000151800004c372e6fe 25710 7eb80000000100000000000008707263373162353505707263373107747067706f7374026e6c00001c0001 7eb88000000100000002000208707263373162353505707263373107747067706f7374026e6c00001c0001c01b0002000100015180000e036e733207737570706f7274c023c01b00020001000151800006036e7334c03bc03700010001000151800004c372e7c8c05100010001000151800004c372e6fe 25711 79d30000000100000000000008707263373162353505707263373107747067706f7374026e6c0000260001 79d38000000100000002000208707263373162353505707263373107747067706f7374026e6c0000260001c01b0002000100015180000e036e733207737570706f7274c023c01b00020001000151800006036e7334c03bc03700010001000151800004c372e7c8c05100010001000151800004c372e6fe 25712 b5e1b73a5010440269000000000000000000 25713 0ca20000000100000000000005646e732d31056c61646f74026e6c0000010001 0ca28000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25714 06bb0000000100000000000003777777056b6e6c7462026e6c0000010001 06bb8000000100000002000203777777056b6e6c7462026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c016c01000020001000151800006036e7332c02dc02a00010001000151800004d9aa2042c04300010001000151800004d9aa2c06 25715 cc6e0000000100000000000005646e732d32056c61646f74026e6c0000010001 cc6e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25716 d16400000001000000000000097072696e74666f6f64026e6c00001c0001 d16480000001000000020002097072696e74666f6f64026e6c00001c0001c00c0002000100015180000e036e7331077069636f776562c016c00c00020001000151800006036e7332c02ec02a0001000100015180000450642016c04400010001000151800004c3f16fbd 25717 dc3a0000000100000000000007747067706f7374026e6c0000010001 dc3a8000000100000002000207747067706f7374026e6c0000010001c00c0002000100015180000e036e733207737570706f7274c014c00c00020001000151800006036e7334c02cc02800010001000151800004c372e7c8c04200010001000151800004c372e6fe 25718 b5e2af585010441081ee0000000000000000 25719 b5e2af58501844109df6000000945551000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af729403c48a90003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 25720 14140000000100000000000005646e732d31056c61646f74026e6c0000010001 14148000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25721 9778000000010000000000000363686d0463687269026e6c0000010001 9778800000010000000200020363686d0463687269026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c015c01000020001000151800006036e7332c02cc02900010001000151800004d453c005c04700010001000151800004d453c006 25722 b9750000000100000000000005646e732d32056c61646f74026e6c0000010001 b9758000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25723 65f700000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c0000010001 65f780000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25724 b5e2af665011440281570000000000000000 25725 52460000000100000000000007667265656c6572026e6c0000010001 52468000000100000002000007667265656c6572026e6c0000010001c00c000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c00c0002000100015180000e0b65766973702d6e732d3032c034 25726 5fd400000001000000000000037777770473627336026e6c0000010001 5fd480000001000000020000037777770473627336026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 25727 d56d0000000100000000000005646e732d31056c61646f74026e6c0000010001 d56d8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25728 2fcc0000000100000000000003777777126175746f62656472696a666672616e6b656e026e6c0000010001 2fcc8000000100000002000003777777126175746f62656472696a666672616e6b656e026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c023c0100002000100015180000704686e7331c03c 25729 23820000000100000000000005646e732d32056c61646f74026e6c0000010001 23828000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25730 c68700000001000000000000077765626d61696c03776e69026e6c00001c0001 c68780000001000000020002077765626d61696c03776e69026e6c00001c0001c01400020001000151800009026e73036f6b65c018c01400020001000151800006036e7332c02fc02c00010001000151800004c13acc3bc04100010001000151800004c13acc27 25731 d71900000001000000000000077765626d61696c03776e69026e6c0000260001 d71980000001000000020002077765626d61696c03776e69026e6c0000260001c01400020001000151800009026e73036f6b65c018c01400020001000151800006036e7332c02fc02c00010001000151800004c13acc3bc04100010001000151800004c13acc27 25732 07a800000001000000000000046d61696c0464696f6e026e6c0000010001 07a880000001000000020000046d61696c0464696f6e026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c030 25733 4ce0000000010000000000000866616c6c6261636b066174696e6574026e6c0000010001 4ce0800000010000000200020866616c6c6261636b066174696e6574026e6c0000010001c01500020001000151800018067765626e69780e6575726f636f6e73756c74616e74c01cc0150002000100015180000a076d61696c6e6978c037c030000100010001518000045117e555c054000100010001518000045117e556 25734 7757000000010000000000000866616c6c6261636b066174696e6574026e6c00001c0001 7757800000010000000200020866616c6c6261636b066174696e6574026e6c00001c0001c01500020001000151800018067765626e69780e6575726f636f6e73756c74616e74c01cc0150002000100015180000a076d61696c6e6978c037c030000100010001518000045117e555c054000100010001518000045117e556 25735 4860000000010000000000000866616c6c6261636b066174696e6574026e6c0000260001 4860800000010000000200020866616c6c6261636b066174696e6574026e6c0000260001c01500020001000151800018067765626e69780e6575726f636f6e73756c74616e74c01cc0150002000100015180000a076d61696c6e6978c037c030000100010001518000045117e555c054000100010001518000045117e556 25736 2c7100000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 2c7180000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25737 595700000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c0000260001 595780000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25738 66ca0000000100000000000005646e732d31056c61646f74026e6c0000010001 66ca8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25739 b1810000000100000000000005646e732d32056c61646f74026e6c0000010001 b1818000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25740 0550001000010000000000010774697363616c69026e6c0000ff00010000290800000080000000 0550800000010000000300030774697363616c69026e6c0000ff0001c00c0002000100015180000704616e7331c00cc00c0002000100015180000704616e7332c00cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02800010001000151800004c3f14d38c03b00010001000151800004c3f133250000291000000000000000 25741 64840000000100000000000003777777047772696a026e6c0000010001 64848000000100000002000203777777047772696a026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec015c01000020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 25742 f3e000000001000000000000066d69636b6579066e6574636f6d026e6c0000010001 f3e080000001000000020001066d69636b6579066e6574636f6d026e6c0000010001c01300020001000151800002c00cc01300020001000151800010066d696e6e696506787334616c6cc01ac00c00010001000151800004c2863082 25743 2e9d000000010000000000000565666e657403626974026e6c0000010001 2e9d800000010000000300030565666e657403626974026e6c0000010001c0120002000100015180000a076e736175746831c012c0120002000100015180000a076e736175746832c012c0120002000100015180000a076e736175746833c012c02a00010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 25744 58250000000100000000000005646e732d31056c61646f74026e6c0000010001 58258000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25745 bac70000000100000000000005646e732d32056c61646f74026e6c0000010001 bac78000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25746 0171000000010000000000000774697363616c69026e6c0000ff0001 0171800000010000000300020774697363616c69026e6c0000ff0001c00c0002000100015180000704616e7331c00cc00c0002000100015180000704616e7332c00cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02800010001000151800004c3f14d38c03b00010001000151800004c3f13325 25747 15d600000001000000000000026d7804686f6d65026e6c0000010001 15d680000001000000030003026d7804686f6d65026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc02800010001000151800004d47842ccc03a00010001000151800004d5338161c04c00010001000151800004d533804b 25748 021e0000000100000000000003777777066275696b6573026e6c0000010001 021e8000000100000002000003777777066275696b6573026e6c0000010001c01000020001000151800014026e730b6578706c61696e65726463036e657400c0100002000100015180000d026e73056132303030026e7500 25749 42450000000100000000000005646e732d31056c61646f74026e6c0000010001 42458000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25750 9b690000000100000000000005646e732d32056c61646f74026e6c0000010001 9b698000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25751 743300000001000000000000037777770c70756265726d6569736a6573026e6c0000010001 743380000001000000020000037777770c70756265726d6569736a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c034 25752 1a480000000100000000000004777061640a7377697463686a6f6273026e6c0000010001 1a488000000100000002000204777061640a7377697463686a6f6273026e6c0000010001c01100020001000151800009036e7331026973c01cc01100020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 25753 22520000000100000000000004777061640a7377697463686a6f6273026e6c0000010001 22528000000100000002000204777061640a7377697463686a6f6273026e6c0000010001c01100020001000151800009036e7331026973c01cc01100020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 25754 465800000001000000000000076b72656e74616c026e6c0000ff0001 465880000001000000020002076b72656e74616c026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 25755 1f730000000100000000000005646e732d31056c61646f74026e6c0000010001 1f738000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25756 e06b0000000100000000000005646e732d32056c61646f74026e6c0000010001 e06b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25757 529b00100001000000000001026e7308767575727765726b026e6c00000100010000290800000000000000 529b80000001000000030002026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa02020000291000000000000000 25758 270400100001000000000001036e733208767575727765726b026e6c00000100010000290800000000000000 270480000001000000030002036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa02020000291000000000000000 25759 b144000000010000000000000377777707746573746e6574026e6c0000010001 b144800000010000000200020377777707746573746e6574026e6c0000010001c01000020001000151800009036e7331026373c018c01000020001000151800013036e73320c636f6c742d74656c65636f6dc018c02c00010001000151800004d47bfe02c04100010001000151800004d44ea00e 25760 ecc60000000100000000000005646e732d31056c61646f74026e6c0000010001 ecc68000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25761 007b0000000100000000000005646e732d32056c61646f74026e6c0000010001 007b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25762 b5e2af675010440281560000000000000000 25763 c98c00000001000000000000026e7308767575727765726b026e6c0000010001 c98c80000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 25764 721b00000001000000000000036e733208767575727765726b026e6c0000010001 721b80000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 25765 1445000000010000000000000469632d73026e6c0000010001 1445800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25766 2cb10000000100000000000005646e732d31056c61646f74026e6c0000010001 2cb18000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25767 8db90000000100000000000005646e732d32056c61646f74026e6c0000010001 8db98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25768 8a7a00000001000000000000036e733503777873026e6c0000010001 8a7a80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 25769 300b00000001000000000000086476642d686f6d65026e6c0000010001 300b80000001000000020000086476642d686f6d65026e6c0000010001c00c00020001000151800016036e73310c7265616479686f7374696e6703636f6d00c00c00020001000151800006036e7332c02d 25770 c8c900000001000000000000036e73330767617574656e67026e6c0000010001 c8c980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25771 c8ca00000001000000000000036e73340767617574656e67026e6c0000010001 c8ca80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25772 05d10000000100000000000005646e732d31056c61646f74026e6c0000010001 05d18000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25773 d3db0000000100000000000005646e732d32056c61646f74026e6c0000010001 d3db8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25774 17a40000000100000000000003777777066b7a626f7577026e6c0000010001 17a48000000100000002000003777777066b7a626f7577026e6c0000010001c01000020001000151800010036e733106686f73747333036e657400c01000020001000151800006036e7332c02f 25775 803a0000000100000000000005646e732d31056c61646f74026e6c0000010001 803a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25776 7b630000000100000000000005646e732d32056c61646f74026e6c0000010001 7b638000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25777 779f0000000100000000000003777777086a6f686e2d726f6e026e6c0000010001 779f8000000100000002000003777777086a6f686e2d726f6e026e6c0000010001c0100002000100015180000f036e73310561676e2d65036e657400c01000020001000151800006036e7332c031 25778 99e700000001000000000000046d61696c05666573746f026e6c0000010001 99e780000001000000020002046d61696c05666573746f026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000c036e73320563736e6574c017c02b000100010001518000043e3a5c14c03c00010001000151800004c2451212 25779 e82700000001000000000000037777770b6c61757465736c61676572026e6c0000010001 e82780000001000000020002037777770b6c61757465736c61676572026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 25780 72cc0000000100000000000005646e732d31056c61646f74026e6c0000010001 72cc8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25781 738e0000000100000000000005646e732d32056c61646f74026e6c0000010001 738e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25782 779d00000001000000000000026e73036f7568026e6c0000010001 779d80000001000000030003026e73036f7568026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c013c00c0001000100015180000491147e0cc035000100010001518000049114dc06c04700010001000151800004c0576a65 25783 5e2b00000001000000000000026e73036f7568026e6c00001c0001 5e2b80000001000000030003026e73036f7568026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c013c00c0001000100015180000491147e0cc035000100010001518000049114dc06c04700010001000151800004c0576a65 25784 b6de00000001000000000000026e73036f7568026e6c0000260001 b6de80000001000000030003026e73036f7568026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c013c00c0001000100015180000491147e0cc035000100010001518000049114dc06c04700010001000151800004c0576a65 25785 ce1d00000001000000000000036e7332036f7568026e6c0000010001 ce1d80000001000000030003036e7332036f7568026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c0280001000100015180000491147e0cc00c000100010001518000049114dc06c04700010001000151800004c0576a65 25786 92eb0000000100000000000005646e732d31056c61646f74026e6c0000010001 92eb8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25787 c2a400000001000000000000036e7332036f7568026e6c00001c0001 c2a480000001000000030003036e7332036f7568026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c0280001000100015180000491147e0cc00c000100010001518000049114dc06c04700010001000151800004c0576a65 25788 1ad60000000100000000000003626c3102626c06787334616c6c026e6c0000010001 1ad68000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25789 b90d00000001000000000000036e7332036f7568026e6c0000260001 b90d80000001000000030003036e7332036f7568026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c0280001000100015180000491147e0cc00c000100010001518000049114dc06c04700010001000151800004c0576a65 25790 9f7300100001000000000001036e733503777873026e6c00000100010000290800000080000000 9f7380000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 25791 68e000100001000000000001046e73303803777873026e6c00000100010000290800000080000000 68e080000001000000030004046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 25792 b47000100001000000000001046e73303903777873026e6c00000100010000290800000080000000 b47080000001000000030004046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 25793 b611000000010000000000000572656c6179036f7568026e6c0000010001 b611800000010000000300030572656c6179036f7568026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000e036e733107737572666e6574c016c02a0001000100015180000491147e0cc03b000100010001518000049114dc06c04d00010001000151800004c0576a65 25794 48b600000001000000000000036e7331046a617a65026e6c0000010001 48b680000001000000020000036e7331046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 25795 c9ba0000000100000000000005646e732d32056c61646f74026e6c0000010001 c9ba8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25796 081b00000001000000000000036e73330767617574656e67026e6c0000010001 081b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25797 cc5000000001000000000001066865746e6574026e6c00001c00010000291000000000000000 cc5080000001000000030004066865746e6574026e6c00001c0001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a650000291000000000000000 25798 6f870000000100000000000005646e732d31056c61646f74026e6c0000010001 6f878000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25799 6e580000000100000000000005646e732d32056c61646f74026e6c0000010001 6e588000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25800 e522000000010000000000000a616d7374656c72616465026e6c0000010001 e522800000010000000200000a616d7374656c72616465026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 25801 1fb700000001000000000000036e733103696467026e6c0000010001 1fb780000001000000030003036e733103696467026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 25802 3ae000000001000000000000036e733203696467026e6c0000010001 3ae080000001000000030003036e733203696467026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 25803 1e7600000001000000000000036e733303696467026e6c0000010001 1e7680000001000000030003036e733303696467026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 25804 6efa00000001000000000000026e73076e656473746174026e6c0000010001 6efa80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25805 2b6b00000001000000000000036e733103696467026e6c0000010001 2b6b80000001000000030003036e733103696467026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 25806 e1d70000000100000000000005646e732d31056c61646f74026e6c0000010001 e1d78000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25807 656d00000001000000000000036e733203696467026e6c0000010001 656d80000001000000030003036e733203696467026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 25808 0b8e00000001000000000000036e733303696467026e6c0000010001 0b8e80000001000000030003036e733303696467026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 25809 3837000000010000000000000377777709776562776572656c64026e6c0000010001 3837800000010000000300030377777709776562776572656c64026e6c0000010001c0100002000100015180000a036e733103696467c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e0001000100015180000451af4646c0440001000100015180000451af4647c05600010001000151800004d5a0fde6 25810 d39e00000001000000000000076d756c7469666f026e6c0000ff0001 d39e80000001000000020000076d756c7469666f026e6c0000ff0001c00c00020001000151800012036e7337087465646f63776562036e657400c00c00020001000151800006036e7338c02c 25811 7ff800000001000000000000037777770c62656163686d617374657273026e6c0000010001 7ff880000001000000030001037777770c62656163686d617374657273026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01dc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04fc031000100010001518000043efa0202 25812 6fc200000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000010001 6fc280000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25813 193f00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000010001 193f80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25814 f1b200000001000000000000056e65706173026e6c0000ff0001 f1b280000001000000020002056e65706173026e6c0000ff0001c00c0002000100015180000c026e73067574722d6978c012c00c00020001000151800006036e7332c029c0260001000100015180000451113206c03e00010001000151800004d5c42806 25815 04d80000000100000000000003697677026e6c00000f0001 04d88000000100000002000003697677026e6c00000f0001c00c0002000100015180000d0673636f74747903647376c010c00c0002000100015180000906706963617264c02b 25816 377d00000001000000000000036e7333076e656473746174026e6c0000010001 377d80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25817 bb22000000010000000000000469632d73026e6c0000010001 bb22800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25818 ca7a00000001000000000000055f6c646170045f746370026463065f6d73646373076b6c6a626f7577026e6c0000060001 ca7a84030001000000010000055f6c646170045f746370026463065f6d73646373076b6c6a626f7577026e6c0000060001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 25819 998f0000000100000000000006636861726973026e6c0000010001 998f8000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 25820 b900000000010000000000000d76616e676f67686d757365756d026e6c00000f0001 b900800000010000000200020d76616e676f67686d757365756d026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 25821 be2e00000001000000000000036e73310477656233026e6c00001c0001 be2e80000001000000020002036e73310477656233026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d436240ec03700010001000151800004c2b262ef 25822 4ad100000001000000000000036e73310477656233026e6c0000260001 4ad180000001000000020002036e73310477656233026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d436240ec03700010001000151800004c2b262ef 25823 a8d400000001000000000000036e73320477656233026e6c00001c0001 a8d480000001000000020002036e73320477656233026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d436240ec00c00010001000151800004c2b262ef 25824 208e00000001000000000000036e73320477656233026e6c0000260001 208e80000001000000020002036e73320477656233026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d436240ec00c00010001000151800004c2b262ef 25825 efda0000000100000000000003777777067362736e6574026e6c0000010001 efda8000000100000002000103777777067362736e6574026e6c0000010001c0100002000100015180000a036e733303777873c017c01000020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 25826 054a0000000100000000000003777777036d6178036e6667026e6c0000010001 054a8000000100000002000103777777036d6178036e6667026e6c0000010001c01400020001000151800005026e73c014c0140002000100015180000d036e733306636f62776562c018c02c00010001000151800004c26dd603 25827 743a0000000100000000000005646e732d32056c61646f74026e6c0000010001 743a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25828 1d600000000100000000000009652d6c756e61746963026e6c0000010001 1d608000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 25829 73080000000100000000000005646e732d31056c61646f74026e6c0000010001 73088000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25830 49f2000000010000000000000e776f757476616e6c65657577656e026e6c00000f0001 49f2800000010000000200000e776f757476616e6c65657577656e026e6c00000f0001c00c00020001000151800010036e733106686f73747338036e657400c00c00020001000151800006036e7332c033 25831 175e000000010000000000000b6865726d65733130316e6c06766961766961026e6c00000f0001 175e800000010000000200020b6865726d65733130316e6c06766961766961026e6c00000f0001c01800020001000151800009026e730369736dc01fc01800020001000151800006036e7332c036c03300010001000151800004d994ab02c04800010001000151800004d994ab03 25832 c8cc00000001000000000000036e73330767617574656e67026e6c0000010001 c8cc80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25833 c8cd00000001000000000000036e73340767617574656e67026e6c0000010001 c8cd80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 25834 8af3000000010000000000000676697375616c026e6c00000f0001 8af3800000010000000200000676697375616c026e6c00000f0001c00c00020001000151800015026e730c776f726c64686f7374696e67036f726700c00c00020001000151800008026e73026175c02a 25835 10dc00000001000000000000077368652d706f6e026e6c0000010001 10dc80000001000000020000077368652d706f6e026e6c0000010001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c02c 25836 8dbf000000010000000000000377777709646f6c6c67726f6570026e6c0000010001 8dbf800000010000000200000377777709646f6c6c67726f6570026e6c0000010001c0100002000100015180001a036e733110646f6c6c61726368697465637475726503636f6d00c01000020001000151800006036e7332c032 25837 991a0000000100000000000003777777047765726b026e6c0000010001 991a8000000100000002000103777777047765726b026e6c0000010001c0100002000100015180000b026e7305617262766fc015c0100002000100015180000d036e7332036b706e036e657400c02900010001000151800004c2971702 25838 658700000001000000000000036e73310b6d6564696164657369676e026e6c0000010001 658780000001000000020002036e73310b6d6564696164657369676e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3b1f203c03e00010001000151800004d4ccf533 25839 a5fa00000001000000000000036e73320b6d6564696164657369676e026e6c0000010001 a5fa80000001000000020002036e73320b6d6564696164657369676e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004c3b1f203c00c00010001000151800004d4ccf533 25840 410f00000001000000000000037777770663697479666d026e6c0000010001 410f80000001000000020002037777770663697479666d026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c017c01000020001000151800006036e7332c02fc02b00010001000151800004505fa002c04600010001000151800004505fac02 25841 cce200000001000000000000037777770c62657374656c766961677261026e6c0000010001 cce280000001000000020002037777770c62657374656c766961677261026e6c0000010001c0100002000100015180000f036e7331086a64696d65646961c01dc01000020001000151800012036e73310b6b6c6f6d70652d72757070c01dc03100010001000151800004d4ccc034c04c000100010001518000043e3a9862 25842 d1400000000100000000000005646e732d32056c61646f74026e6c0000010001 d1408000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25843 560a00000001000000000000086361726577657374026e6c0000010001 560a80000001000000020002086361726577657374026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 25844 3aab0000000100000000000005646e732d31056c61646f74026e6c0000010001 3aab8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25845 9c5800000001000000000000037777770673756e776562026e6c0000010001 9c5880000001000000020002037777770673756e776562026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c017c01000020001000151800006036e7332c02ec02b00010001000151800004d9aa2042c04400010001000151800004d9aa2c06 25846 9d0a00000001000000000000037777770b7061617264656e666f746f026e6c0000010001 9d0a80000001000000020002037777770b7061617264656e666f746f026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01cc01000020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 25847 02c7000000010000000000000c616c70656e6b7265757a6572026e6c0000ff0001 02c7800000010000000200020c616c70656e6b7265757a6572026e6c0000ff0001c00c0002000100015180000a036e733103677673c019c00c00020001000151800006036e7332c031c02d000100010001518000045054e1aac04300010001000151800004d4ccc646 25848 b6c900000001000000000000117072617869732d6175746f6d6174696f6e026e6c00000f0001 b6c980000001000000020002117072617869732d6175746f6d6174696f6e026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01ec00c00020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 25849 14c2001000010000000000010469632d73026e6c00000f00010000290800000000000000 14c2800000010000000200010469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 25850 235b00000001000000000000116665656e73747261656e76616e676f6f72026e6c0000010001 235b80000001000000030003116665656e73747261656e76616e676f6f72026e6c0000010001c00c00020001000151800011036e73310a74727565736572766572c01ec00c00020001000151800006036e7332c036c00c00020001000151800006036e7333c036c03200010001000151800004d5ef8003c04f00010001000151800004d5efb004c06100010001000151800004d5ef8005 25851 d60c00000001000000000000046d61696c096e6564657272696a6e026e6c00001c0001 d60c80000001000000020002046d61696c096e6564657272696a6e026e6c00001c0001c01100020001000151800015026e730f6761726e69657270726f6a65637473c01bc01100020001000151800006036e7331c032c02f000100010001518000045117e122c050000100010001518000045117e142 25852 ce8100000001000000000000046d61696c096e6564657272696a6e026e6c0000260001 ce8180000001000000020002046d61696c096e6564657272696a6e026e6c0000260001c01100020001000151800015026e730f6761726e69657270726f6a65637473c01bc01100020001000151800006036e7331c032c02f000100010001518000045117e122c050000100010001518000045117e142 25853 cc3b00000001000000000000056e7664736b026e6c00000f0001 cc3b80000001000000020000056e7664736b026e6c00000f0001c00c00020001000151800013036e733109746572612d6279746503636f6d00c00c00020001000151800006036e7332c02a 25854 1f6500100001000000000001036e733103697870026e6c00000100010000290800000080000000 1f6580000001000000020003036e733103697870026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d943e639c036000100010001518000043efa063f0000291000000000000000 25855 ccfc00100001000000000001036e733203697870026e6c00000100010000290800000080000000 ccfc80000001000000020003036e733203697870026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d943e639c00c000100010001518000043efa063f0000291000000000000000 25856 1c9000000001000000000000037777770a78736f6c7574696f6e73026e6c0000010001 1c9080000001000000020002037777770a78736f6c7574696f6e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02f00010001000151800004c3562e38c04100010001000151800004c3562e39 25857 d14400000001000000000000036e73330564656d6f6e026e6c0000010001 d14480000001000000030002036e73330564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c03c00010001000151800004c29fb004 25858 1a8900000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 1a8980000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 25859 5e330000000100000000000003777777077069732d736578026e6c0000010001 5e338000000100000002000003777777077069732d736578026e6c0000010001c01000020001000151800011036e7331087072696f7277656202626500c01000020001000151800006036e7332c030 25860 625c000000010000000000000377777710646572657374617572616e7467696473026e6c0000010001 625c800000010000000300000377777710646572657374617572616e7467696473026e6c0000010001c01000020001000151800012036e73310b64696e65726f6e6c696e65c021c01000020001000151800006036e7332c039c01000020001000151800006036e7333c039 25861 594300000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 594380000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25862 2be600000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 2be680000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25863 cabd00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 cabd80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25864 a5e00000000100000000000005646e732d32056c61646f74026e6c0000010001 a5e08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25865 653300000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 653380000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25866 94f400000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 94f480000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 25867 a55200000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 a55280000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 25868 b62900000001000000000000037777770474726573026e6c0000010001 b62980000001000000020000037777770474726573026e6c0000010001c0100002000100015180000c026e7306766576696461c015c01000020001000151800006036e7332c02c 25869 2d3900000001000000000000036e733503777873026e6c0000010001 2d3980000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 25870 9e0000000001000000000000046e73303803777873026e6c0000010001 9e0080000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 25871 a7a500000001000000000000046e73303903777873026e6c0000010001 a7a580000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 25872 e1a8000000010000000000000a637265646974766965770a6e6d622d68656c6c6572026e6c0000010001 e1a8800000010000000200010a637265646974766965770a6e6d622d68656c6c6572026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000d036e7332036b706e036e657400c03600010001000151800004c2971685 25873 731a00000001000000000000036e733103697870026e6c0000010001 731a80000001000000020002036e733103697870026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d943e639c036000100010001518000043efa063f 25874 398d00000001000000000000036e733203697870026e6c0000010001 398d80000001000000020002036e733203697870026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d943e639c00c000100010001518000043efa063f 25875 237f00000001000000000000037777770c62656e6a696a6f6e6c696e65026e6c0000010001 237f80000001000000020000037777770c62656e6a696a6f6e6c696e65026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c034 25876 cc5000000001000000000000066865746e6574026e6c00001c0001 cc5080000001000000030003066865746e6574026e6c00001c0001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 25877 230900000001000000000000037777771064616e7363656e7472756d766c69656b026e6c0000010001 230984030001000000010000037777771064616e7363656e7472756d766c69656b026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 25878 28800000000100000000000008686f73746e616d650462696e640000100003 28808000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 25879 bf550000000100000000000008686f73746e616d650462696e640000100003 bf558000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 25880 26c800000001000000000000036e73320e666c6578776562686f7374696e67026e6c0000010001 26c880000001000000030002036e73320e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03300010001000151800004cf2cd7adc00c0001000100015180000452c04365 25881 10cf00000001000000000000036e73320e666c6578776562686f7374696e67026e6c0000010001 10cf80000001000000030002036e73320e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03300010001000151800004cf2cd7adc00c0001000100015180000452c04365 25882 267400000001000000000000076369746164656c096e75636c6574726f6e026e6c0000010001 267480000001000000030001076369746164656c096e75636c6574726f6e026e6c0000010001c01400020001000151800007046d61696cc014c01400020001000151800012047365633103646e73067073696e6574c01ec014000200010001518000070473656332c04ac03200010001000151800004c3510f14 25883 621d000000010000000000000469632d73026e6c00000f0001 621d800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 25884 145400000001000000000000037777770873686f7574626f78026e6c0000010001 145480000001000000020000037777770873686f7574626f78026e6c0000010001c0100002000100015180000d026e73046f78656f03636f6d00c01000020001000151800006036e7332c030 25885 610c0000000100000000000005646e732d31056c61646f74026e6c0000010001 610c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25886 7f130000000100000000000005646e732d32056c61646f74026e6c0000010001 7f138000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25887 3ac100000001000000000000037777770461736369026e6c0000010001 3ac180000001000000030003037777770461736369026e6c0000010001c01000020001000151800010036e733109657863657074696f6ec015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004d5c9a38cc04500010001000151800004d5c9a38dc05700010001000151800004d5c9af03 25888 85a30000000100000000000003626c3402626c06787334616c6c026e6c0000010001 85a38000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25889 30530000000100000000000005736d7470310378626e026e6c0000010001 30538000000100000002000005736d7470310378626e026e6c0000010001c0120002000100015180000f036e73310571696e6970036e657400c01200020001000151800006036e7332c02e 25890 e84f0000000100000000000005736d7470310378626e026e6c00001c0001 e84f8000000100000002000005736d7470310378626e026e6c00001c0001c0120002000100015180000f036e73310571696e6970036e657400c01200020001000151800006036e7332c02e 25891 5bc300000001000000000000077665726d6565720874656c6562797465026e6c0000010001 5bc380000001000000020002077665726d6565720874656c6562797465026e6c0000010001c01400020001000151800006036e7333c014c01400020001000151800006036e7334c014c03100010001000151800004d5d38115c04300010001000151800004d5d38116 25892 55c400000001000000000000096d6f6e64726961616e0874656c6562797465026e6c0000010001 55c480000001000000020002096d6f6e64726961616e0874656c6562797465026e6c0000010001c01600020001000151800006036e7333c016c01600020001000151800006036e7334c016c03300010001000151800004d5d38115c04500010001000151800004d5d38116 25893 000600000001000000000000026e73076e656473746174026e6c00001c0001 000680000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25894 a91300000001000000000000026e73076e656473746174026e6c0000260001 a91380000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25895 2daa00000001000000000000036e7332076e656473746174026e6c0000010001 2daa80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25896 3e9300000001000000000000036e7332076e656473746174026e6c00001c0001 3e9380000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25897 efc600000001000000000000036e7332076e656473746174026e6c0000260001 efc680000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25898 8b0400000001000000000000036e7333076e656473746174026e6c00001c0001 8b0480000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25899 0f4d00000001000000000000036e7333076e656473746174026e6c0000260001 0f4d80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25900 ecfb00000001000000000000036e7334076e656473746174026e6c0000010001 ecfb80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25901 97d400000001000000000000036e7334076e656473746174026e6c00001c0001 97d480000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25902 b9bb00000001000000000000036e7334076e656473746174026e6c0000260001 b9bb80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25903 f64300000001000000000000046162656c0564656d6f6e026e6c00000f0001 f64380000001000000030002046162656c0564656d6f6e026e6c00000f0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 25904 15e60000000100000000000005646e732d31056c61646f74026e6c0000010001 15e68000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25905 2a760000000100000000000005646e732d32056c61646f74026e6c0000010001 2a768000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25906 994c000000010000000000000a636f6d7075747261696e026e6c00000f0001 994c800000010000000200010a636f6d7075747261696e026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7334036b706e036e657400c02b00010001000151800004c297b902 25907 9c37000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 9c37800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 25908 fde600000001000000000000056275626c7903313233026e6c0000010001 fde680000001000000020002056275626c7903313233026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c016c00c00020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 25909 70b600000001000000000000046d696b650c6d657373616765626f617264026e6c0000010001 70b680000001000000020000046d696b650c6d657373616765626f617264026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c035 25910 3e0428000001000000010000026e6c0000060001055f6c646170045f746370026463065f6d736463730477617166026e6c0000210001000002580016000000640185067365727665720477617166026e6c00 3e04a8040000000000000000 25911 c2080000000100000000000018727061617264656b6f6f70657233343340667265656c6572026e6c0000010001 c2088403000100000001000018727061617264656b6f6f70657233343340667265656c6572026e6c0000010001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 25912 2496000000010000000000000c70736f7269617369732d666e026e6c00000f0001 2496800000010000000300020c70736f7269617369732d666e026e6c00000f0001c00c0002000100015180000d036e733106776964657873c019c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 25913 58f8000000010000000000000469647476026e6c0000010001 58f8800000010000000200020469647476026e6c0000010001c00c0002000100015180000e036e7331076f726967696e38c011c00c00020001000151800006036e7332c029c02500010001000151800004c26d6e11c03f00010001000151800004d4ccc0f8 25914 6bf300000001000000000000036e733206726f6f736974026e6c0000010001 6bf380000001000000020002036e733206726f6f736974026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d41ac10ac00c00010001000151800004d413c182 25915 074a28000001000200000000026e6c000006000107746573742d61640e6b6168756e612d746573744c4142026e6c00000500fe000000000000c01400010001000000000004c0a80002 074aa8040000000000000000 25916 0000000070024000cc0a0000020405b401010402 000080010000000000000000 25917 60030000000100000000000005646e732d31056c61646f74026e6c0000010001 60038000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25918 10520000000100000000000005646e732d32056c61646f74026e6c0000010001 10528000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 25919 000000007002faf089fb0000020405b401010402 000080010000000000000000 25920 b5e6ab0d50104470935a0000000000000000 25921 318c000000010000000000000833323366636c7562026e6c00000f0001 318c800000010000000200020833323366636c7562026e6c00000f0001c00c0002000100015180000e036e7331076f6d732d6e6574c015c00c00020001000151800006036e7332c02dc02900010001000151800004d5efb22fc04300010001000151800004d5ef9d07 25922 b5e6ab0d5018447076b20000008998c8000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7de0403ccf6000030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 25923 b5e73d7d5010faf0c34a0000000000000000 b5e7bd740000000000000000 25924 b5e73d7d5018faf01ee00000009431b8000000010001000000000f313039393531313632373739342d330000f900010f313039393531313632373739342d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afb18403c4c980003000000354e544c4d535350000100000097b208e00e000e00270000000700070020000000544553542d41444b4148554e412d544553544c41420000 b5e7bd740000000000000000 25925 744a00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 744a80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 25926 3a2500100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 3a2580000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 25927 b5e73d8b5011fae2c2b30000000000000000 b5e7bd840000000000000000 25928 000000007002faf09e490000020405b401010402 000080010000000000000000 25929 b5e6ab1b5011446292ce0000000000000000 25930 502900000001000000000000036e733109756e69736572766572026e6c0000010001 502980000001000000020002036e733109756e69736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3454b03c03c00010001000151800004d119a2fa 25931 0f0400000001000000000000036e733209756e69736572766572026e6c0000010001 0f0480000001000000020002036e733209756e69736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004c3454b03c00c00010001000151800004d119a2fa 25932 0000000070024000d7b30000020405b401010402 000080010000000000000000 25933 755c00000001000000000000036e73310974656c656b6162656c026e6c0000010001 755c80000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 25934 3aae00000001000000000000036e73310974656c656b6162656c026e6c0000260001 3aae80000001000000020002036e73310974656c656b6162656c026e6c0000260001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 25935 b5e73d8c5010fae2c2b20000000000000000 b5e7bd840000000000000000 25936 bbb200000001000000000000076e657470726f66026e6c0000ff0001 bbb280000001000000020002076e657470726f66026e6c0000ff0001c00c0002000100015180000a026e730469636d63c014c00c00020001000151800006036e7332c02bc028000100010001518000043e643805c03e000100010001518000043e643806 25937 b5e829da5010faf0eb3a0000000000000000 b5e8a9d40000000000000000 25938 b5e829da5018faf0c24a00000094b73e000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afb18403c4c980003000000354e544c4d535350000100000097b208e00e000e00270000000700070020000000544553542d41444b4148554e412d544553544c41420000 b5e8a9d40000000000000000 25939 b5e6ab1c5010446292cd0000000000000000 25940 cb3900000001000000000000046d61696c096f6c64656e626f6f6d026e6c0000010001 cb3980000001000000020000046d61696c096f6c64656e626f6f6d026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c035 25941 5759000000010000000000000672656c61793108696e74726f776562026e6c0000010001 5759800000010000000200020672656c61793108696e74726f776562026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c0300001000100015180000450416028c04200010001000151800004c356780c 25942 e7870000000100000000000003626c3102626c06787334616c6c026e6c0000010001 e7878000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 25943 552f000000010000000000000773747564656e7409696e686f6c6c616e64026e6c0000010001 552f800000010000000200020773747564656e7409696e686f6c6c616e64026e6c0000010001c01400020001000151800006036e7331c014c0140002000100015180000e036e733107737572666e6574c01ec03200010001000151800004c2ab230bc04400010001000151800004c0576a65 25944 6216000000010000000000000e726563657074656e7a6f656b6572026e6c00000f0001 6216800000010000000200000e726563657074656e7a6f656b6572026e6c00000f0001c00c00020001000151800015036e73350b686f7374696e67776f7278036e657400c00c00020001000151800006036e7336c033 25945 3836000000010000000000000369776e026e6c0000010001 3836800000010000000200000369776e026e6c0000010001c00c00020001000151800012036e7331087a6f6e656564697403636f6d00c00c00020001000151800006036e7334c028 25946 b5e8ed83501044705c8b0000000000000000 25947 b5e829e85011fae2eaa30000000000000000 b5e8a9e40000000000000000 25948 754400000001000000000000096b65792d73746f6e65026e6c00000f0001 754480000001000000020000096b65792d73746f6e65026e6c00000f0001c00c00020001000151800010026e730a696275696c64696e6773c016c00c0002000100015180000b026e73026e6c036e657400 25949 0f8828000001000000010000026e6c0000060001055f6c646170045f7463702439303836356138372d376466302d343033372d383832382d39366633353137323164376507646f6d61696e73065f6d7364637306546177616e6106746177616e61026e6c00002100010000025800240000006401850b646172796173657276657206546177616e6106746177616e61026e6c00 0f88a8040000000000000000 25950 000000007002faf067190000020405b401010402 000080010000000000000000 25951 b5e8ed8350184470d094000000890918000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7de0403ccf6000030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 25952 b5e829e95010fae2eaa20000000000000000 b5e8a9e40000000000000000 25953 292700000001000000000000037777770a6379636c6f6d65646961026e6c0000010001 292780000001000000020002037777770a6379636c6f6d65646961026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 25954 b5e978885010faf0655b0000000000000000 b5e9f8840000000000000000 25955 b5e978885018faf0052b00000094ee7e000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afb18403c4c980003000000354e544c4d535350000100000097b208e00e000e00270000000700070020000000544553542d41444b4148554e412d544553544c41420000 b5e9f8840000000000000000 25956 44c500000001000000000000026e73076e656473746174026e6c0000010001 44c580000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 25957 344500000001000000000000036e7333076e656473746174026e6c0000010001 344580000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 25958 0000000070024000e51f00000204059801010402 000080010000000000000000 25959 b5e8ed91501144625bff0000000000000000 25960 000000007002400000aa0000020405b401010402 000080010000000000000000 25961 b5e978965011fae264c40000000000000000 b5e9f8940000000000000000 25962 9dfd00000001000000000000086c6f676c696e6573026e6c0000010001 9dfd80000001000000020002086c6f676c696e6573026e6c0000010001c00c00020001000151800010046e733031086e65746c696e6573c015c00c00020001000151800007046e733032c02ec02900010001000151800004d99540f5c04500010001000151800004d99541f5 25963 50b800000001000000000000046d61696c096d616e6a656669656b026e6c0000010001 50b880000001000000020002046d61696c096d616e6a656669656b026e6c0000010001c0110002000100015180000f026e7309656174736572766572c01bc01100020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 25964 ca3800000001000000000000067765616c6572026e6c00000f0001 ca3880000001000000020002067765616c6572026e6c00000f0001c00c0002000100015180000b036e73310477656233c013c00c00020001000151800006036e7332c02bc02700010001000151800004d436240ec03e00010001000151800004c2b262ef 25965 b5ea6c7550104320ec370000000000000000 b5eaec740000000000000000 25966 b5e978975010fae264c30000000000000000 b5e9f8940000000000000000 25967 b5e8ed92501044625bfe0000000000000000 25968 f2e200000001000000000000036e7332066470706c7573026e6c0000010001 f2e280000001000000020001036e7332066470706c7573026e6c0000010001c01000020001000151800014026e730b706c617a6167726f757065036e657400c01000020001000151800002c00cc00c00010001000151800004d5c1ea0d 25969 b5ea6c755018432081b900000090d180000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe57403c4fd70003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000 b5eaec740000000000000000 25970 a97800000001000000000000036e7334076e656473746174026e6c0000010001 a97880000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 25971 d89000000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000010001 d89080000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 25972 b5eb227d5010447050850000000000000000 b5eba2730000000000000000 25973 55ce00000001000000000000037777770b647574636864616b6f7461026e6c0000010001 55ce80000001000000030001037777770b647574636864616b6f7461026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 25974 3bc300000001000000000000036972630565666e6574026e6c0000010001 3bc380000001000000030000036972630565666e6574026e6c0000010001c0100002000100015180000f036e733108696e736563757265c016c01000020001000151800006036e7333c02ec01000020001000151800006036e7334c02e 25975 b5eb227d50184470f82900000089d57c000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7de0403ccf6000030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 b5eba2730000000000000000 25976 b5ea6c8350114312eba40000000000000000 b5eaec840000000000000000 25977 b3ec00000001000000000000077765626d61696c036c65740a6c656964656e756e6976026e6c0000010001 b3ec80000001000000030003077765626d61696c036c65740a6c656964656e756e6976026e6c0000010001c0180002000100015180000b08736865726c6f636bc018c0180002000100015180000906776174736f6ec018c0180002000100015180000e036e733107737572666e6574c023c0370001000100015180000484e50806c04e0001000100015180000484e51602c06300010001000151800004c0576a65 25978 fb4600000001000000000000066c6f676f6c66026e6c00001c0001 fb4680000001000000020000066c6f676f6c66026e6c00001c0001c00c0002000100015180000f04686e73300774697363616c69c013c00c0002000100015180000704686e7331c02c 25979 00c200000001000000000000036e733108696e736563757265026e6c0000010001 00c280000001000000030003036e733108696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 25980 e97600000001000000000000036e733308696e736563757265026e6c0000010001 e97680000001000000030003036e733308696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 25981 741d00000001000000000000036e733408696e736563757265026e6c0000010001 741d80000001000000030003036e733408696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 25982 0000000070024000ad7200000204059801010402 000080010000000000000000 25983 b5eb228b501144624ff90000000000000000 b5eba2830000000000000000 25984 b5ea6c8450104312eba30000000000000000 b5eaec840000000000000000 25985 06f700000001000000000000076e65756b776562026e6c0000ff0001 06f780000001000000030003076e65756b776562026e6c0000ff0001c00c0002000100015180000e076e73617574683103626974c014c00c0002000100015180000a076e736175746832c030c00c0002000100015180000a076e736175746833c030c02800010001000151800004d5880c33c04200010001000151800004d5880c3bc05800010001000151800004d4ccc00b 25986 b5ebebc85010432035360000000000000000 25987 11780000000100000000000007626575727a656e036a656d026e6c0000010001 11788000000100000002000207626575727a656e036a656d026e6c0000010001c0140002000100015180000e036e73310765766964656e74c018c01400020001000151800006036e7332c030c02c00010001000151800004c36d19c4c04600010001000151800004c36d1942 25988 b5ebebc850184320dd3800000090c000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe57403c4fd70003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000 25989 b5eb228c501044624ff80000000000000000 b5eba2830000000000000000 25990 32d20000000100000000000006697769776562026e6c0000ff0001 32d28000000100000002000206697769776562026e6c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 25991 b5ebebd65011431234a30000000000000000 25992 871100000001000000000000036e73300461736d6c026e6c00001c0001 871180000001000000030001036e73300461736d6c026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000d026e730461736d6c03636f6d00c01000020001000151800006036e7331c03ac00c00010001000151800004c26979c2 25993 72ad00000001000000000000036e73300461736d6c026e6c0000260001 72ad80000001000000030001036e73300461736d6c026e6c0000260001c01000020001000151800002c00cc0100002000100015180000d026e730461736d6c03636f6d00c01000020001000151800006036e7331c03ac00c00010001000151800004c26979c2 25994 be9900000001000000000000036e73300461736d6c026e6c0000010001 be9980000001000000030001036e73300461736d6c026e6c0000010001c01000020001000151800002c00cc0100002000100015180000d026e730461736d6c03636f6d00c01000020001000151800006036e7331c03ac00c00010001000151800004c26979c2 25995 0000000070024000ce3800000204059801010402 000080010000000000000000 25996 f22c0000000100000000000008706c6161746a657308686f7573656e6574026e6c0000010001 f22c8000000100000002000008706c6161746a657308686f7573656e6574026e6c0000010001c015000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0150002000100015180000906617574683230c039 25997 723900000001000000000000037777771275747265636874736e6965757773626c6164026e6c0000010001 723980000001000000020002037777771275747265636874736e6965757773626c6164026e6c0000010001c0100002000100015180000e036e7331076e657463617374c023c01000020001000151800006036e7332c03bc03700010001000151800004c2970101c05100010001000151800004c297012d 25998 b5ebebd75010431234a20000000000000000 25999 883000000001000000000000036674701074616172746b756e7374656e61726573026e6c0000010001 883080000001000000020000036674701074616172746b756e7374656e61726573026e6c0000010001c0100002000100015180000c026e7306766576696461c021c01000020001000151800006036e7332c038 26000 d1c000000001000000000000037777771065626e7061726b656572626568656572026e6c0000010001 d1c084030001000000010000037777771065626e7061726b656572626568656572026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 26001 133c000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 133c800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26002 b5ec666650104320db5d0000000000000000 b5ece6640000000000000000 26003 b41500000001000000000000037777771065626e7061726b656572626568656572026e6c0000010001 b41584030001000000010000037777771065626e7061726b656572626568656572026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 26004 b5ec6666501843202b61000000901800000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afe57403c4fd70003000000314e544c4d535350000100000097b208e0060006002b0000000b000b00200000004441525941534552564552544157414e410000 b5ece6640000000000000000 26005 b5ec667450114312daca0000000000000000 b5ece6740000000000000000 26006 0221000000010000000000000473686f70066d656e737973026e6c0000010001 0221800000010000000200020473686f70066d656e737973026e6c0000010001c0110002000100015180000c036e7331056e6574636fc018c01100020001000151800006036e7332c030c02c00010001000151800004c26d4a82c04400010001000151800004c26dd146 26007 734000000001000000000000036c78340469656e6403776175026e6c0000010001 734080000001000000020002036c78340469656e6403776175026e6c0000010001c0150002000100015180000a036e733103777572c019c01500020001000151800006036e7332c031c02d0001000100015180000489e0f88dc0430001000100015180000489e0f88e 26008 1ca800000001000000000000036c78340469656e6403776175026e6c0000260001 1ca880000001000000020002036c78340469656e6403776175026e6c0000260001c0150002000100015180000a036e733103777572c019c01500020001000151800006036e7332c031c02d0001000100015180000489e0f88dc0430001000100015180000489e0f88e 26009 8e5400000001000000000000036c78330469656e6403776175026e6c0000010001 8e5480000001000000020002036c78330469656e6403776175026e6c0000010001c0150002000100015180000a036e733103777572c019c01500020001000151800006036e7332c031c02d0001000100015180000489e0f88dc0430001000100015180000489e0f88e 26010 e3d800000001000000000000036c78330469656e6403776175026e6c0000260001 e3d880000001000000020002036c78330469656e6403776175026e6c0000260001c0150002000100015180000a036e733103777572c019c01500020001000151800006036e7332c031c02d0001000100015180000489e0f88dc0430001000100015180000489e0f88e 26011 b5ec667550104312dac90000000000000000 b5ece6740000000000000000 26012 074b00000001000000000000046d61696c0773696d706c6578026e6c0000010001 074b80000001000000020002046d61696c0773696d706c6578026e6c0000010001c01100020001000151800014036e73310d63656e747269636f6e6c696e65c019c01100020001000151800006036e7332c031c02d00010001000151800004d481ec0cc04d00010001000151800004d590e63a 26013 56a8000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 56a8800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26014 f8ff00000001000000000000036e73320e666c6578776562686f7374696e67026e6c0000010001 f8ff80000001000000030002036e73320e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03300010001000151800004cf2cd7adc00c0001000100015180000452c04365 26015 532000000001000000000000066b6c6a303031076b6c6a626f7577026e6c0000060001 532084030001000000010000066b6c6a303031076b6c6a626f7577026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 26016 b7ad00000001000000000000037777770c766974616d696e73746f7265026e6c0000010001 b7ad80000001000000020000037777770c766974616d696e73746f7265026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c034 26017 cde800000001000000000000037777770a66696e61746162616e6b026e6c0000010001 cde880000001000000020002037777770a66696e61746162616e6b026e6c0000010001c0100002000100015180000c036e73310563736e6574c01bc01000020001000151800006036e7332c033c02f00010001000151800004c2451012c04700010001000151800004c2451212 26018 bbd8000000010000000000000a656464696e676c656761026e6c00000f0001 bbd8800000010000000300030a656464696e676c656761026e6c00000f0001c00c0002000100015180000c036e7331056d61786573c017c00c00020001000151800006036e7332c02fc00c00020001000151800006036e7333c02fc02b000100010001518000045045402ec043000100010001518000045045402fc055000100010001518000045045440a 26019 3d2b0000000100000000000006696e65743031036f7067026e6c00001c0001 3d2b8000000100000002000106696e65743031036f7067026e6c00001c0001c01300020001000151800002c00cc0130002000100015180000b026e73026e6c036e657400c00c00010001000151800004c14eb322 26020 f64f0000000100000000000006696e65743033036f7067026e6c0000010001 f64f8000000100000002000106696e65743033036f7067026e6c0000010001c0130002000100015180000906696e65743031c013c0130002000100015180000b026e73026e6c036e657400c02b00010001000151800004c14eb322 26021 cca800000001000000000000106361706f656972612d73656e7a616c61026e6c0000010001 cca884030001000000010000106361706f656972612d73656e7a616c61026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 26022 2f2000000001000000000000046d61696c077965736f726e6f026e6c00001c0001 2f2080000001000000030002046d61696c077965736f726e6f026e6c00001c0001c0110002000100015180000d036e733106776964657873c019c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 26023 834b0000000100000000000005646e732d31056c61646f74026e6c0000010001 834b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26024 a69d0000000100000000000005646e732d32056c61646f74026e6c0000010001 a69d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26025 063900000001000000000000046d61696c077965736f726e6f026e6c00001c0001 063980000001000000030002046d61696c077965736f726e6f026e6c00001c0001c0110002000100015180000d036e733106776964657873c019c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 26026 234100000001000000000000036e73320e666c6578776562686f7374696e67026e6c0000010001 234180000001000000030002036e73320e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03300010001000151800004cf2cd7adc00c0001000100015180000452c04365 26027 c22000000001000000000000037777770b6f6e6465727a6f656b6572026e6c0000010001 c22080000001000000020002037777770b6f6e6465727a6f656b6572026e6c0000010001c0100002000100015180000c046e7330310462696374c01cc01000020001000151800007046e733032c035c03000010001000151800004d413d6c8c04800010001000151800004d413d604 26028 39c10000000100000000000009776f726c646d61696c026e6c00000f0001 39c18000000100000003000209776f726c646d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c016c00c0002000100015180000704616e7332c02fc00c0002000100015180001404616e73330a74697363616c696e657402626500c02a00010001000151800004c3f14d38c04500010001000151800004c3f13325 26029 fc3400000001000000000000037777770a656d657373656e676572026e6c0000010001 fc3484030001000000010000037777770a656d657373656e676572026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 26030 14f200000001000000000000056e65786573026e6c0000ff0001 14f280000001000000030003056e65786573026e6c0000ff0001c00c0002000100015180000f036e7331086e6f766178657373c012c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02ac02600010001000151800004d5c98015c04100010001000151800004d5c9bf12c05300010001000151800004d5ef9c26 26031 59620000000100000000000003626c3102626c06787334616c6c026e6c0000010001 59628000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26032 68c7000000010000000000000476646770026e6c00000f0001 68c7800000010000000200010476646770026e6c00000f0001c00c0002000100015180000a036e733303777873c011c00c00020001000151800006036e7334c029c03b00010001000151800004d5ef9a65 26033 538b0000000100000000000007736f636961616c026e6c00000f0001 538b8000000100000003000107736f636961616c026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 26034 b16d0000000100000000000008756d636e6574303103617a6e026e6c0000010001 b16d8000000100000003000308756d636e6574303103617a6e026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b08756d636e65743032c015c0150002000100015180000e036e733107737572666e6574c019c00c0001000100015180000483aedc02c03b0001000100015180000483aee402c05200010001000151800004c0576a65 26035 c34f0000000100000000000008756d636e6574303103617a6e026e6c00001c0001 c34f8000000100000003000308756d636e6574303103617a6e026e6c00001c0001c01500020001000151800002c00cc0150002000100015180000b08756d636e65743032c015c0150002000100015180000e036e733107737572666e6574c019c00c0001000100015180000483aedc02c03b0001000100015180000483aee402c05200010001000151800004c0576a65 26036 574a0000000100000000000008756d636e6574303103617a6e026e6c0000260001 574a8000000100000003000308756d636e6574303103617a6e026e6c0000260001c01500020001000151800002c00cc0150002000100015180000b08756d636e65743032c015c0150002000100015180000e036e733107737572666e6574c019c00c0001000100015180000483aedc02c03b0001000100015180000483aee402c05200010001000151800004c0576a65 26037 fd8c0000000100000000000008756d636e6574303203617a6e026e6c0000010001 fd8c8000000100000003000308756d636e6574303203617a6e026e6c0000010001c0150002000100015180000b08756d636e65743031c015c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483aedc02c00c0001000100015180000483aee402c05200010001000151800004c0576a65 26038 76090000000100000000000008756d636e6574303203617a6e026e6c00001c0001 76098000000100000003000308756d636e6574303203617a6e026e6c00001c0001c0150002000100015180000b08756d636e65743031c015c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483aedc02c00c0001000100015180000483aee402c05200010001000151800004c0576a65 26039 02a60000000100000000000008756d636e6574303203617a6e026e6c0000260001 02a68000000100000003000308756d636e6574303203617a6e026e6c0000260001c0150002000100015180000b08756d636e65743031c015c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483aedc02c00c0001000100015180000483aee402c05200010001000151800004c0576a65 26040 8f5500000001000000000000086e65787464617461026e6c0000010001 8f5580000001000000020002086e65787464617461026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 26041 09550000000100000000000003636f61066d696e6a7573026e6c00000f0001 09558000000100000002000003636f61066d696e6a7573026e6c00000f0001c01000020001000151800011036e736a0365736e036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 26042 499d00000001000000000000037777770f6e656465726c616e6473656d756e74026e6c0000010001 499d80000001000000020002037777770f6e656465726c616e6473656d756e74026e6c0000010001c01000020001000151800009026e730369736dc020c01000020001000151800006036e7332c037c03400010001000151800004d994ab02c04900010001000151800004d994ab03 26043 2009000000010000000000000469632d73026e6c0000ff0001 2009800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26044 b6fb0000000100000000000005646e732d31056c61646f74026e6c0000010001 b6fb8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26045 b6fc0000000100000000000005646e732d32056c61646f74026e6c0000010001 b6fc8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26046 13180000000100000000000007616e74656e6e61026e6c0000010001 13188000000100000002000107616e74656e6e61026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 26047 0ce800000001000000000000046e696365026e6c0000ff0001 0ce880000001000000020001046e696365026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c011c03e00010001000151800004c2860043 26048 b6ff0000000100000000000005646e732d31056c61646f74026e6c0000010001 b6ff8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26049 b7000000000100000000000005646e732d32056c61646f74026e6c0000010001 b7008000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26050 034e28000001000200000000026e6c0000060001074d616e75656c61066170686c616e026e6c00000500fe000000000000c01400010001000000000004c0a8010c 034ea8040000000000000000 26051 6647000000010000000000000852617468656e6175026e6c00001c0001 6647800000010000000200020852617468656e6175026e6c00001c0001c00c0002000100015180000d026e73076e65746c616e64c015c00c00020001000151800006036e7332c02cc02900010001000151800004d9aa2042c04200010001000151800004d9aa2c06 26052 acab000000010000000000000c6d61696c2d62617374696f6e04706f727409726f7474657264616d026e6c0000010001 acab800000010000000300030c6d61696c2d62617374696f6e04706f727409726f7474657264616d026e6c0000010001c01e0002000100015180000c0967616e796d65646573c01ec01e00020001000151800007046c656461c01ec01e00020001000151800014036e733203676e7309676574726f6e696373c028c03c00010001000151800004d5c9cf50c05400010001000151800004d5c9cf19c06700010001000151800004910d2a05 26053 6d0b00000001000000000000036e733209666972737466696e64026e6c0000010001 6d0b80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26054 6d0c00000001000000000000036e733109666972737466696e64026e6c0000010001 6d0c80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26055 a13400000001000000000000037777770b736f75736c6172616e6765026e6c0000010001 a13480000001000000020002037777770b736f75736c6172616e6765026e6c0000010001c01000020001000151800012036e73310b6769786e6574776f726b73c01cc01000020001000151800006036e7332c034c03000010001000151800004d5f4b8cfc04e00010001000151800004d5f4b9cf 26056 789a0000000100000000000004706f70330776697a7a617669026e6c0000010001 789a8000000100000003000104706f70330776697a7a617669026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c01100020001000151800007046e733038c043c02d000100010001518000043e48df58 26057 f86b0000000100000000000003777777096d696e647363617065026e6c0000010001 f86b8000000100000003000303777777096d696e647363617065026e6c0000010001c01000020001000151800012047072693103646e73067073696e6574c01ac010000200010001518000070470726932c033c010000200010001518000070470726933c033c02e000100010001518000049a0ff9a6c04c000100010001518000049a0ff9aac05f000100010001518000049a0ff9ae 26058 e6fc00000001000000000000126e696a6768696e746572706172746e657273026e6c0000ff0001 e6fc80000001000000020002126e696a6768696e746572706172746e657273026e6c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c01fc00c00020001000151800006036e7332c037c03300010001000151800004d43d0f08c05100010001000151800004d43d19e2 26059 edaa0000000100000000000003777777036d6d62026e6c0000010001 edaa8000000100000003000203777777036d6d62026e6c0000010001c0100002000100015180000d036e733106776964657873c014c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 26060 f41c0000000100000000000004706f70330776697a7a617669026e6c0000010001 f41c8000000100000003000104706f70330776697a7a617669026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c01100020001000151800007046e733038c043c02d000100010001518000043e48df58 26061 ba4e0000000100000000000005796176696e0d696e7465727370656374697665026e6c0000010001 ba4e8000000100000002000205796176696e0d696e7465727370656374697665026e6c0000010001c01200020001000151800006036e7333c012c01200020001000151800006036e7332c012c03400010001000151800004c14ee108c04600010001000151800004c14ee102 26062 ce8a0000000100000000000005686f666d78066d696e6f6377026e6c0000010001 ce8a8000000100000002000105686f666d78066d696e6f6377026e6c0000010001c01200020001000151800015086e732d69736d30310963617067656d696e69c019c0120002000100015180000b086e732d69736d3032c036c02d00010001000151800004d5f4a024 26063 92c90000000100000000000003777777096769746161726e6574026e6c0000010001 92c98000000100000003000203777777096769746161726e6574026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 26064 ad6800000001000000000000037777770b736f75736c6172616e6765026e6c0000010001 ad6880000001000000020002037777770b736f75736c6172616e6765026e6c0000010001c01000020001000151800012036e73310b6769786e6574776f726b73c01cc01000020001000151800006036e7332c034c03000010001000151800004d5f4b8cfc04e00010001000151800004d5f4b9cf 26065 57a7000000010000000000000963686576616c696572026e6c0000010001 57a7800000010000000200000963686576616c696572026e6c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02e 26066 559100000001000000000000037777770667616d657273026e6c0000010001 559180000001000000020002037777770667616d657273026e6c0000010001c0100002000100015180000b036e73310470696e65c017c01000020001000151800006036e7332c02fc02b00010001000151800004d59c0201c04200010001000151800004c3c1a303 26067 3c4900000001000000000000037777770a77686974652d726f7365026e6c0000010001 3c4980000001000000030003037777770a77686974652d726f7365026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c01bc01000020001000151800006036e7330c032c01000020001000151800006036e7333c032c02f00010001000151800004c3561682c04f00010001000151800004c3561683c06100010001000151800004d5de0bfa 26068 397d000000010000000000000469632d73026e6c0000010001 397d800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26069 cf1000000001000000000000037777770d706c616e65746f7574646f6f72026e6c0000010001 cf1080000001000000030002037777770d706c616e65746f7574646f6f72026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 26070 0000000070024000595000000204055001010402 000080010000000000000000 26071 a9ae00000001000000000000066c656f6e766b026e6c00000f0001 a9ae80000001000000020000066c656f6e766b026e6c00000f0001c00c00020001000151800018036e7330026e6c0b7369746570726f7465637403636f6d00c00c00020001000151800006036e7331c02b 26072 b5ee16d850104510b3c90000000000000000 b5ee96d40000000000000000 26073 a0eb000000010000000000010469632d73026e6c0000ff00010000291000000000000000 a0eb800000010000000200010469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 26074 58a100000001000000000000046e696f6f046b6e6177026e6c0000010001 58a180000001000000020002046e696f6f046b6e6177026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c0576b03c03c00010001000151800004c0576a65 26075 b5ee16d85018451089d00000008a63db000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc58403c4dd800030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004d414e55454c414150484c414e0000 b5ee96d40000000000000000 26076 6d0e00000001000000000000036e733209666972737466696e64026e6c0000010001 6d0e80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26077 6d0f00000001000000000000036e733109666972737466696e64026e6c0000010001 6d0f80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26078 82e800000001000000000000077368652d706f6e026e6c0000010001 82e880000001000000020000077368652d706f6e026e6c0000010001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c02c 26079 006800000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373076b6c6a626f7577026e6c0000060001 006884030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373076b6c6a626f7577026e6c0000060001c04800060001000038400036026e730f646f6d61696e2d7265676973747279c0480a686f73746d6173746572c05f0bf1e540000070800000384000278d0000003840 26080 6fa8000000010000000000000377777709646f6c6c67726f6570026e6c0000010001 6fa8800000010000000200000377777709646f6c6c67726f6570026e6c0000010001c0100002000100015180001a036e733110646f6c6c61726368697465637475726503636f6d00c01000020001000151800006036e7332c032 26081 b5ee16e650114502b33c0000000000000000 b5ee96e40000000000000000 26082 b5ee16e750104502b33b0000000000000000 b5ee96e40000000000000000 26083 0000000070024000b1fd00000204055001010402 000080010000000000000000 26084 b5eecbbd5010451057910000000000000000 26085 0b3000000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 0b3080000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 26086 b5eecbbd50184510b3ed0000008adf85000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc58403c4dd800030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004d414e55454c414150484c414e0000 26087 74540000000100000000000007706f6c79736570026e6c0000010001 74548000000100000002000207706f6c79736570026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 26088 075a00000001000000000000036e733303777873026e6c0000010001 075a80000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 26089 95d2000000010000000000000968616e7367726f6865026e6c0000010001 95d2800000010000000200010968616e7367726f6865026e6c0000010001c00c0002000100015180000a036e733303777873c016c00c00020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 26090 b5eecbcb5011450257040000000000000000 26091 35280000000100000000000009652d6c756e61746963026e6c0000010001 35288000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 26092 29210000000100000000000006696d61676573047670726f026e6c0000010001 29218000000100000002000106696d61676573047670726f026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000b026e73026e6c036e657400c02c00010001000151800004913aa82a 26093 b5eecbcc5010450257030000000000000000 26094 450000000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 450080000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 26095 6d4e00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 6d4e80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 26096 0000000070024000be5c00000204055001010402 000080010000000000000000 26097 1b2a000000010000000000000876616e6578746572026e6c00000f0001 1b2a800000010000000200000876616e6578746572026e6c00000f0001c00c00020001000151800011036e73310a76697375616c686f7374c015c00c000200010001518000070476733031c02d 26098 14d10000000100000000000003706f70077a656566706f70026e6c0000010001 14d18000000100000002000003706f70077a656566706f70026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 26099 346c00000001000000000000037777770773636869736973026e6c0000010001 346c80000001000000020002037777770773636869736973026e6c0000010001c010000200010001518000110a6c65757665686176656e03696772c018c0100002000100015180000d0a64656c6673686176656ec037c02c000100010001518000043e2d5e0dc049000100010001518000043e2d5e82 26100 f83800000001000000000000036e73310a76697375616c686f7374026e6c0000010001 f83880000001000000030002036e73310a76697375616c686f7374026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 26101 f6840000000100000000000004696e666f0a65636974656c65636f6d026e6c0000010001 f6848000000100000002000204696e666f0a65636974656c65636f6d026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000e036e733207626265796f6e64c01cc030000100010001518000043eb1a493c042000100010001518000043eb19002 26102 913500000001000000000000034e53310348534c026e6c0000010001 913580000001000000020002034e53310348534c026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004915b9006c03600010001000151800004c0576a65 26103 b5ef8d0d50104510a29f0000000000000000 26104 b5ef8d0d501845100bfa0000008ad287000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc58403c4dd800030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004d414e55454c414150484c414e0000 26105 94cd00000001000000000000136265656d73746572626f657264657672696573026e6c0000010001 94cd80000001000000020000136265656d73746572626f657264657672696573026e6c0000010001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c038 26106 1c0000000001000000000000036e733109756e69736572766572024e4c0000010001 1c0080000001000000020002036e733109756e69736572766572024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3454b03c03c00010001000151800004d119a2fa 26107 adca00000001000000000000036e7331056d61786573026e6c00001c0001 adca80000001000000030003036e7331056d61786573026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000045045402ec038000100010001518000045045402fc04a000100010001518000045045440a 26108 748a00000001000000000000036e7332056d61786573026e6c00001c0001 748a80000001000000030003036e7332056d61786573026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a000100010001518000045045402ec00c000100010001518000045045402fc04a000100010001518000045045440a 26109 50ae00000001000000000000036e7333056d61786573026e6c00001c0001 50ae80000001000000030003036e7333056d61786573026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02a000100010001518000045045402ec03c000100010001518000045045402fc00c000100010001518000045045440a 26110 b5ef8d1b50114502a2120000000000000000 26111 12ac00000001000000000000036e733109756e69736f75726365026e6c0000010001 12ac80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 26112 b5ef8d1c50104502a2110000000000000000 26113 6b9400000001000000000000037777770a67736d636f7272656374026e6c0000010001 6b9480000001000000020002037777770a67736d636f7272656374026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01bc01000020001000151800006036e7332c033c02f000100010001518000045104580ac04f000100010001518000045104601e 26114 2f26000000010000000000000377777708766961637265616d026e6c0000010001 2f26800000010000000300000377777708766961637265616d026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c032c01000020001000151800007046e733033c032 26115 0a9100000001000000000000036e733109666972737466696e64026e6c0000010001 0a9180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26116 7e5a00000001000000000000036e733209666972737466696e64026e6c0000010001 7e5a80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26117 d3af00000001000000000000036e73320470696e65026e6c0000010001 d3af80000001000000020002036e73320470696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d59c0201c00c00010001000151800004c3c1a303 26118 726e000000010000000000000c6465726f6e646576656e656e026e6c0000010001 726e800000010000000200020c6465726f6e646576656e656e026e6c0000010001c00c0002000100015180000e026e73086d656761706c6578c019c00c00020001000151800006036e7331c030c02d00010001000151800004504f6101c04700010001000151800004504f6102 26119 1d7f0000000100000000000005646e732d31056c61646f74026e6c0000010001 1d7f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26120 973a00000001000000000000036e733207626265796f6e64026e6c00001c0001 973a80000001000000020002036e733207626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 26121 dd320000000100000000000005646e732d32056c61646f74026e6c0000010001 dd328000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26122 3ff400000001000000000000036e733207626265796f6e64026e6c0000260001 3ff480000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 26123 32f70000000100000000000003626c3102626c06787334616c6c026e6c0000010001 32f78000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26124 911b00000001000000000000046d61696c056e65726f63026e6c0000010001 911b80000001000000020002046d61696c056e65726f63026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02b00010001000151800004d434010ac03c00010001000151800004d434000a 26125 91ee000000010000000000000377777706696c6f676963026e6c0000010001 91ee800000010000000200020377777706696c6f676963026e6c0000010001c0100002000100015180000b036e73310476646e73c017c01000020001000151800006036e7332c02fc02b000100010001518000045117f60bc042000100010001518000045117f60c 26126 5e6300000001000000000000037777770e66726565646f6d7361696c696e67026e6c0000010001 5e6380000001000000020002037777770e66726565646f6d7361696c696e67026e6c0000010001c01000020001000151800009036e7331026973c01fc01000020001000151800006036e7332c037c03300010001000151800004d5852102c04800010001000151800004d5c41503 26127 4403000000010000000000000469632d73026e6c00000f0001 4403800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26128 e35e00000001000000000000037777770966756e6d657467736d026e6c0000010001 e35e80000001000000020002037777770966756e6d657467736d026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 26129 e69200000001000000000000036e7334107365637572656e616d65736572766572026e6c0000010001 e69280000001000000020002036e7334107365637572656e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0350001000100015180000442a4f102c0470001000100015180000442a4f105 26130 545600000001000000000000036e7333107365637572656e616d65736572766572026e6c0000010001 545680000001000000020002036e7333107365637572656e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0350001000100015180000442a4f102c0470001000100015180000442a4f105 26131 3dd7000000010000000000000674656c6e6574036d7069026e6c0000010001 3dd7800000010000000200020674656c6e6574036d7069026e6c0000010001c013000200010001518000080573756e3032c013c01300020001000151800006036e7332c013c02b00010001000151800004c0574f3ec03f00010001000151800004c0574f37 26132 4039000000010000000000000469632d73026e6c00000f0001 4039800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26133 fb5900000001000000000000037777770e67656f6e2d73636872696a766572026e6c0000010001 fb5980000001000000020002037777770e67656f6e2d73636872696a766572026e6c0000010001c0100002000100015180000a036e733103686978c01fc01000020001000151800006036e7332c037c03300010001000151800004d5a0da0ac0490001000100015180000451112ec3 26134 a92c00000001000000000000037777770a746376697369656e6574026e6c0000010001 a92c84030001000000010000037777770a746376697369656e6574026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 26135 34b100000001000000000000037777770770616e746f6e65026e6c0000010001 34b180000001000000030000037777770770616e746f6e65026e6c0000010001c01000020001000151800011036e73310770616e746f6e6503636f6d00c0100002000100015180001b0a6463612d616e732d303104696e6574057177657374036e657400c0100002000100015180000d0a73766c2d616e732d3031c054 26136 482300000001000000000000036e733108696e74726f776562026e6c0000010001 482380000001000000020002036e733108696e74726f776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450416028c03b00010001000151800004c356780c 26137 33d200000001000000000000036e733208696e74726f776562026e6c0000010001 33d280000001000000020002036e733208696e74726f776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 26138 465b00000001000000000000036e733109666972737466696e64026e6c0000010001 465b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26139 822200000001000000000000037777770964657a776574736572026e6c0000010001 822280000001000000020002037777770964657a776574736572026e6c0000010001c010000200010001518000100672617069646506726170696465c01ac0100002000100015180000c09687572726963616e65c035c02e00010001000151800004511134a0c04a00010001000151800004511134a4 26140 bffb00000001000000000000036e733103686978026e6c00001c0001 bffb80000001000000020002036e733103686978026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5a0da0ac0360001000100015180000451112ec3 26141 d06b00000001000000000000036e733203686978026e6c00001c0001 d06b80000001000000020002036e733203686978026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d5a0da0ac00c0001000100015180000451112ec3 26142 299500000001000000000000036e733304686f6d65026e6c0000010001 299580000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 26143 72a600000001000000000000036e733204686f6d65026e6c0000010001 72a680000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 26144 09d500000001000000000000036e733104686f6d65026e6c0000010001 09d580000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 26145 c10900000001000000000000037777770d706c616e65746f7574646f6f72026e6c0000010001 c10980000001000000030002037777770d706c616e65746f7574646f6f72026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 26146 3ed600000001000000000000036e733209666972737466696e64026e6c0000010001 3ed680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26147 28ce00000001000000000000036e73320563736e6574026e6c0000010001 28ce80000001000000020002036e73320563736e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004c2451012c00c00010001000151800004c2451212 26148 a31800000001000000000000086861726d6e756973026e6c00000f0001 a31880000001000000020002086861726d6e756973026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 26149 77d300000001000000000000096e6c636330303031300864656c6f69747465026e6c0000010001 77d380000001000000030002096e6c636330303031300864656c6f69747465026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000b026e73026e6c036e657400c03300010001000151800004aac21423c04400010001000151800004aac21424 26150 1113000000010000000000000576726f6f6e026e6c0000010001 1113800000010000000200000576726f6f6e026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 26151 cb370000000100000000000005646e732d31056c61646f74026e6c0000010001 cb378000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26152 9ca50000000100000000000005646e732d32056c61646f74026e6c0000010001 9ca58000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26153 39a8000000010000000000000377777703647664026e6c0000010001 39a8800000010000000200020377777703647664026e6c0000010001c0100002000100015180000f036e73310868776967726f7570c014c01000020001000151800006036e7332c02cc02800010001000151800004d973c15ac04300010001000151800004d973c15b 26154 c50800000001000000000000037777770977696e646972656374026e6c0000010001 c50880000001000000030002037777770977696e646972656374026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 26155 c63128000001000000010000026e6c0000060001085f6b706173737764045f74637007747267726f7570026e6c000021000100000258001b0000006401d0087365727665722d3107747267726f7570026e6c00 c631a8040000000000000000 26156 32d7000000010000000000000b776f726c646f6e6c696e65026e6c0000ff0001 32d7800000010000000300020b776f726c646f6e6c696e65026e6c0000ff0001c00c0002000100015180000f04616e73310774697363616c69c018c00c0002000100015180000704616e7332c031c00c0002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c04700010001000151800004c3f13325 26157 a0eb000000010000000000000469632d73026e6c0000ff0001 a0eb800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26158 aac8000000010000000000000469632d73026e6c00000f0001 aac8800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26159 2e190000000100000000000005646e732d31056c61646f74026e6c0000010001 2e198000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26160 f8fe000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 f8fe800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26161 a81500000001000000000000037777771164656c65756b73746562726f63616e7465026e6c0000010001 a81580000001000000020002037777771164656c65756b73746562726f63616e7465026e6c0000010001c01000020001000151800011036e73320a636c75737465726e6574c022c01000020001000151800006036e7331c03ac03600010001000151800004d5f72f3cc053000100010001518000045054edf5 26162 91540000000100000000000005646e732d32056c61646f74026e6c0000010001 91548000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26163 000000007002faf0c0510000020405b401010402 000080010000000000000000 26164 c33400000001000000000000054d4f4c454e0350434d026e6c0000010001 c33480000001000000020001054d4f4c454e0350434d026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 26165 06140000000100000000000003777777036d736e026e6c0000010001 06148000000100000003000003777777036d736e026e6c0000010001c0100002000100015180001204646e733302756b046d736674036e657400c0100002000100015180000a04646e7331026370c030c0100002000100015180000a04646e7331026463c030 26166 4f1a00000001000000000000037777770367656b026e6c0000010001 4f1a80000001000000020002037777770367656b026e6c0000010001c0100002000100015180000e036e7331076c656374726963c014c01000020001000151800006036e7332c02cc02800010001000151800004c297a082c04200010001000151800004c297a083 26167 753f0000000100000000000003777777066272756e656c026e6c0000010001 753f8000000100000002000003777777066272756e656c026e6c0000010001c01000020001000151800010026e730777697265687562036e657400c01000020001000151800006036e7332c02e 26168 b5f18dd25010faf0a9410000000000000000 26169 b5f18dd25018faf0e1bb0000008eeec4000000010001000000000f313237313331303331393633342d330000f900010f313237313331303331393633342d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04ae403c562e00030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000 26170 b5f18de05011fae2a8b00000000000000000 26171 580d000000010000000000000563696e64790c616374697665646f6d61696e026e6c0000010001 580d800000010000000300000563696e64790c616374697665646f6d61696e026e6c0000010001c01200020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01200020001000151800006036e7332c037c01200020001000151800006036e7333c037 26172 729c0000000100000000000003777777067a6565627261026e6c0000010001 729c8000000100000002000003777777067a6565627261026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c031 26173 580e00000001000000000000076e65656c746a650c616374697665646f6d61696e026e6c0000010001 580e80000001000000030000076e65656c746a650c616374697665646f6d61696e026e6c0000010001c01400020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01400020001000151800006036e7332c039c01400020001000151800006036e7333c039 26174 3750000000010000000000000e613231332d38342d31332d313939046164736c06787334616c6c026e6c0000010001 3750800000010000000300020e613231332d38342d31332d313939046164736c06787334616c6c026e6c0000010001c02000020001000151800005026e73c020c02000020001000151800006036e7332c020c0200002000100015180000d026e730472697065036e657400c03b00010001000151800004c26d0642c04c00010001000151800004c26d0963 26175 dfc500000001000000000000034e53310831454555524f5045024e4c0000010001 dfc580000001000000020000034e53310831454555524f5045024e4c0000010001c01000020001000151800011036e733107696e6469636961036f726700c01000020001000151800006036e7332c031 26176 000000007002faf08ee30000020405b401010402 000080010000000000000000 26177 b5f18de15010fae2a8af0000000000000000 26178 e82200000001000000000000026e730469776179026e6c0000010001 e82280000001000000020001026e730469776179026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000c026e730364796e036f726700c00c00010001000151800004c14e1e04 26179 194f0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 194f8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26180 b5f277b05010faf08df40000000000000000 b5f2f7b40000000000000000 26181 12d200000001000000000000036e733110736361726c65742d696e7465726e6574026e6c0000010001 12d280000001000000030003036e733110736361726c65742d696e7465726e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ccc302c04300010001000151800004d5ccc303c05500010001000151800004c277e953 26182 7ecb000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 7ecb800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26183 b5f277b05018faf064b80000008e517c000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04ae403c562e00030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000 b5f2f7b40000000000000000 26184 c1740000000100000000000006636f62616c740b666f782d686f7374696e67026e6c0000010001 c1748000000100000002000206636f62616c740b666f782d686f7374696e67026e6c0000010001c01300020001000151800007046e732d31c013c01300020001000151800007046e732d32c013c03300010001000151800004d5bd1374c04600010001000151800004d5bd1675 26185 30320000000100000000000006636f62616c740b666f782d686f7374696e67026e6c0000260001 30328000000100000002000206636f62616c740b666f782d686f7374696e67026e6c0000260001c01300020001000151800007046e732d31c013c01300020001000151800007046e732d32c013c03300010001000151800004d5bd1374c04600010001000151800004d5bd1675 26186 9819000000010000000000000a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000010001 9819800000010000000200020a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000010001c01700020001000151800007046e732d31c017c01700020001000151800007046e732d32c017c03700010001000151800004d5bd1374c04a00010001000151800004d5bd1675 26187 f6ab000000010000000000000a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000260001 f6ab800000010000000200020a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000260001c01700020001000151800007046e732d31c017c01700020001000151800007046e732d32c017c03700010001000151800004d5bd1374c04a00010001000151800004d5bd1675 26188 b5f277be5011fae28d630000000000000000 b5f2f7b40000000000000000 26189 000000007002faf06fb10000020405b401010402 000080010000000000000000 26190 dcc4000000010000000000000862727568616d696a026e6c0000010001 dcc4800000010000000200000862727568616d696a026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c015c00c0002000100015180000704686e7331c02e 26191 e3f600000001000000000000026e730374656e026e6c0000010001 e3f680000001000000020001026e730374656e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c36c4b01 26192 fa1e00100001000000000001026e7309656174736572766572026e6c00000100010000290800000000000000 fa1e80000001000000020003026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb12210000291000000000000000 26193 fea800100001000000000001036e733209656174736572766572026e6c00000100010000290800000000000000 fea880000001000000020003036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb12210000291000000000000000 26194 b5f277bf5010fae28d620000000000000000 b5f2f7b40000000000000000 26195 35c300000001000000000000037777770b65617374776172642d676f026e6c0000010001 35c380000001000000020002037777770b65617374776172642d676f026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 26196 65a1000000010000000000000b7365727665722d323030300a73657276657232303030026e6c0a73657276657232303030026e6c0000010001 65a1840300010000000100000b7365727665722d323030300a73657276657232303030026e6c0a73657276657232303030026e6c0000010001c03100060001000038400036026e730f646f6d61696e2d7265676973747279c0310a686f73746d6173746572c0480bf1e540000070800000384000278d0000003840 26197 36f100000001000000000000036e733107747564656c6674026e6c0000010001 36f180000001000000050005036e733107747564656c6674026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c00c0001000100015180000482a1b401c03a0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 26198 f1e80000000100000000000008647574746e63626e02746e07747564656c6674026e6c0000260001 f1e88000000100000005000508647574746e63626e02746e07747564656c6674026e6c0000260001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c01800020001000151800009036e7331026574c018c0180002000100015180000a07647574746e6362c015c0180002000100015180000e036e733107737572666e6574c020c0340001000100015180000482a1b401c0460001000100015180000482a1b441c0580001000100015180000482a12111c06d0001000100015180000482a1bc8cc08300010001000151800004c0576a65 26199 b5f2f44d5010faf0f2240000000000000000 26200 990000000001000000000000037777770b776f726c64636861727473026e6c0000010001 990080000001000000020000037777770b776f726c64636861727473026e6c0000010001c0100002000100015180000f036e7331056d79736d74036e657400c01000020001000151800006036e7332c034 26201 7f5400000001000000000000026e7309656174736572766572026e6c0000010001 7f5480000001000000020002026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb1221 26202 bfaa00000001000000000000036e733209656174736572766572026e6c0000010001 bfaa80000001000000020002036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb1221 26203 b5f2f44d5018faf05e280000008ebc3c000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04ae403c562e00030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000 26204 91710000000100000000000005646e732d31056c61646f74026e6c0000010001 91718000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26205 967600000001000000000000037777770862626f6b6b657273026e6c0000010001 967680000001000000020000037777770862626f6b6b657273026e6c0000010001c0100002000100015180000c036e733103737468026e7500c01000020001000151800006036e7332c031 26206 c7ef0000000100000000000005646e732d32056c61646f74026e6c0000010001 c7ef8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26207 552b000000010000000000000a656d6561736d7470303203616f6e026e6c00001c0001 552b800000010000000200010a656d6561736d7470303203616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26208 335b000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 335b800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26209 9fae000000010000000000000a656d6561736d7470303103616f6e026e6c0000260001 9fae800000010000000200010a656d6561736d7470303103616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26210 27af000000010000000000000a656d6561736d7470303203616f6e026e6c0000010001 27af800000010000000200010a656d6561736d7470303203616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26211 c05600000001000000000000066e69656c7331106b72656e73636f6e73756c74616e6379026e6c0000060001 c05684030001000000010000066e69656c7331106b72656e73636f6e73756c74616e6379026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 26212 89d8000000010000000000000a656d6561736d7470303203616f6e026e6c0000260001 89d8800000010000000200010a656d6561736d7470303203616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26213 c4ec000000010000000000000a656d6561736d7470303103616f6e026e6c00001c0001 c4ec800000010000000200010a656d6561736d7470303103616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26214 628500000001000000000000046d61696c0a6a696e676c6568656c6c026e6c00001c0001 628580000001000000020000046d61696c0a6a696e676c6568656c6c026e6c00001c0001c01100020001000151800011036e73310764697265637435036e657400c01100020001000151800006036e7332c034 26215 b5f2f45b5011fae2f1930000000000000000 26216 c38900000001000000000000037777771267656e6565736d696464656c6e6965757773026e6c0000010001 c38980000001000000020002037777771267656e6565736d696464656c6e6965757773026e6c0000010001c0100002000100015180000a036e7331036e7873c023c01000020001000151800006036e7332c03bc03700010001000151800004d973c015c04d00010001000151800004d973c102 26217 ed8d00000001000000000000076472696d616e73026e6c0000ff0001 ed8d84030001000000010000076472696d616e73026e6c0000ff0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 26218 b34e0000000100000000000006636861726973026e6c0000010001 b34e8000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 26219 34bd0000000100000000000008616473657276657206776562616473026e6c0000010001 34bd8000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 26220 b5f2f45c5010fae2f1920000000000000000 26221 d5d000000001000000000000037777770c62657374656c766961677261026e6c0000010001 d5d080000001000000020002037777770c62657374656c766961677261026e6c0000010001c0100002000100015180000f036e7331086a64696d65646961c01dc01000020001000151800012036e73310b6b6c6f6d70652d72757070c01dc03100010001000151800004d4ccc034c04c000100010001518000043e3a9862 26222 dc27000000010000000000000366747007626c7565666f78026e6c0000010001 dc27800000010000000200010366747007626c7565666f78026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000d036e7332036b706e036e657400c02c00010001000151800004c2972fc3 26223 f9c30000000100000000000003777777106b656e6e65726d6572636f6c6c656765026e6c0000010001 f9c38403000100000001000003777777106b656e6e65726d6572636f6c6c656765026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 26224 4f3700000001000000000000037777770564696c656b026e6c0000010001 4f3780000001000000020002037777770564696c656b026e6c0000010001c0100002000100015180001a036e733113736d616c6c686f6c642d686f7374696e672d34c016c01000020001000151800006036e7332c02ec02a000100010001518000045054ed82c050000100010001518000045054ed83 26225 37f0000000010000000000000469632d73026e6c0000010001 37f0800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26226 9c37000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 9c37800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26227 b95c000000010000000000000469632d73026e6c0000010001 b95c800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26228 8cf0000000010000000000000f726976657276696577626568656572026e6c0000010001 8cf0800000010000000200020f726976657276696577626568656572026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01cc00c00020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 26229 45200000000100000000000004646e73310470696e73026e6c0000010001 45208000000100000002000204646e73310470696e73026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9c26101c03800010001000151800004d9c26002 26230 e5e000000001000000000000036b746e026e6c00000f0001 e5e080000001000000020002036b746e026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c010c00c00020001000151800006036e7332c027c02400010001000151800004d4cb0e42c03f00010001000151800004d4cb1221 26231 349600000001000000000000077368652d706f6e026e6c00001c0001 349680000001000000020000077368652d706f6e026e6c00001c0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c02c 26232 076a000000010000000000000e6875676f63617273797374656d73026e6c00000f000100 076a800000010000000200000e6875676f63617273797374656d73026e6c00000f0001c00c0002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c00c00020001000151800015026e730f796f75726e616d65686f7374696e67c045 26233 22360000000100000000000003777777076c756e61746963026e6c0000010001 22368000000100000003000103777777076c756e61746963026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 26234 fa0f00000001000000000000086c6f676c696e6573026e6c0000010001 fa0f80000001000000020002086c6f676c696e6573026e6c0000010001c00c00020001000151800010046e733031086e65746c696e6573c015c00c00020001000151800007046e733032c02ec02900010001000151800004d99540f5c04500010001000151800004d99541f5 26235 899c00000001000000000000087265642d7377616e026e6c0000010001 899c80000001000000020001087265642d7377616e026e6c0000010001c00c0002000100015180000d06696e65743031036f7067c015c00c0002000100015180000b026e73026e6c036e657400c02900010001000151800004c14eb322 26236 272f00000001000000000000106361706f656972612d73656e7a616c61026e6c0000010001 272f84030001000000010000106361706f656972612d73656e7a616c61026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 26237 472a00000001000000000000036d783306787334616c6c026e6c0000010001 472a80000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 26238 241400000001000000000000096675747572656e6574026e6c00000f0001 241480000001000000020002096675747572656e6574026e6c00000f0001c00c00020001000151800012036e73350b73696c766572706f696e74c016c00c00020001000151800006036e7336c02ec02a0001000100015180000450f7c702c0480001000100015180000450f7c602 26239 59ea0000000100000000000003777777136d6574686f7273742d7665726875697a657273026e6c0000010001 59ea8000000100000002000203777777136d6574686f7273742d7665726875697a657273026e6c0000010001c0100002000100015180000f026e7309656174736572766572c024c01000020001000151800006036e7332c03bc03800010001000151800004d4cb0e42c05300010001000151800004d4cb1221 26240 bab800000001000000000000026e6c0000020001 bab884000001000800000001026e6c0000020001c00c00020001000151800015026e730f646f6d61696e2d7265676973747279c00cc00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c049c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c093c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 26241 c1ed000000010000000000000762616e6e65727303696d73026e6c0000010001 c1ed800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 26242 484b00000001000000000000037777770731327761746368026e6c0000010001 484b80000001000000020000037777770731327761746368026e6c0000010001c0100002000100015180000f036e733306616d6575726f02646500c01000020001000151800010036e733106616d6575726f036e657400 26243 b91628000001000000010000026e6c0000060001095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d73646373074f424856534c53026e6c000021000100000258001b00000064005808646330316876736c074f424856534c53026e6c00 b916a8040000000000000000 26244 4e1700000001000000000000096f6e6574656c6e6574026e6c0000ff0001 4e1780000001000000020000096f6e6574656c6e6574026e6c0000ff0001c00c0002000100015180000f026e73096379626572636f6d6dc016c00c00020001000151800006036e7332c02d 26245 0580000000010000000000000377777707766f6c64657273026e6c0000010001 0580800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26246 000000007002faf0764800000204056401010402 000080010000000000000000 26247 9dbb000000010000000000001167696573626572736d617465726965656c026e6c0000ff0001 9dbb800000010000000200001167696573626572736d617465726965656c026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c038 26248 83ad000000010000000000000669736c696566026e6c00000f0001 83ad800000010000000200000669736c696566026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02b 26249 b2d600000001000000000000055f6c646170045f7463701244656661756c742d46697273742d53697465065f7369746573026463065f6d736463730c76657273616e61617264656e026e6c0000060001 b2d684030001000000010000055f6c646170045f7463701244656661756c742d46697273742d53697465065f7369746573026463065f6d736463730c76657273616e61617264656e026e6c0000060001c04800060001000038400036026e730f646f6d61696e2d7265676973747279c0480a686f73746d6173746572c05f0bf1e540000070800000384000278d0000003840 26250 4fc0000000010000000000000e67616c6c6572796275696c6465720d706172746e6572636c69636b73026e6c0000010001 4fc0800000010000000200020e67616c6c6572796275696c6465720d706172746e6572636c69636b73026e6c0000010001c01b0002000100015180000f036e73310861746c616e74697ac029c01b00020001000151800006036e7332c041c03d00010001000151800004d5efa011c05800010001000151800004d5efa075 26251 46b200000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 46b280000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 26252 a20d000000010000000000000377777709616e746971626f6f6b026e6c0000010001 a20d800000010000000200020377777709616e746971626f6f6b026e6c0000010001c0100002000100015180000a036e7331036e7873c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 26253 3d8528000001000000010000026e6c0000060001035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730c7363616e6469747372763031026e6c0000210001000002580026000000640cc40e7363616e6469742d7365727665720c7363616e6469747372763031026e6c00 3d85a8040000000000000000 26254 b5f550df5010fd5c996b0000000000000000 b5f5d0d40000000000000000 26255 f120000000010000000000000f726976657276696577626568656572026e6c0000010001 f120800000010000000200020f726976657276696577626568656572026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01cc00c00020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 26256 b5f550df5018fd5c34450000008ed972000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd93403c4f1300030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 b5f5d0d40000000000000000 26257 05fc00000001000000000000037777770a67616d65737175617265026e6c0000010001 05fc80000001000000020002037777770a67616d65737175617265026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 26258 2a5f000000010000000000000a746573746d696a6e6971026e6c0000ff0001 2a5f800000010000000300020a746573746d696a6e6971026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c017c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 26259 0308000000010000000000000569736d6166026e6c00000f0001 0308800000010000000200000569736d6166026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02a 26260 f16000000001000000000000037777770a6865746b61737465656c026e6c0000010001 f16080000001000000020002037777770a6865746b61737465656c026e6c0000010001c0100002000100015180000b04646e7331036f3277c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d5e38dd4c04600010001000151800004d5e38dcd 26261 0000000070024000df860000020405b401010402 000080010000000000000000 26262 b5f550ed5011fd4e98da0000000000000000 b5f5d0e40000000000000000 26263 000000007002faf05a7600000204056401010402 000080010000000000000000 26264 f85a00000001000000000000036d783306787334616c6c026e6c0000010001 f85a80000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 26265 cf9600000001000000000000036e73330d686f73746e656465726c616e64026e6c0000010001 cf9680000001000000030002036e73330d686f73746e656465726c616e64026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 26266 063c00000001000000000000037777770965726f646174696e67026e6c0000010001 063c80000001000000020000037777770965726f646174696e67026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 26267 73eb00000001000000000000036e7336086a726f6e6c696e65026e6c0000010001 73eb80000001000000020000036e7336086a726f6e6c696e65026e6c0000010001c01000020001000151800014036e73310d686f73746e656465726c616e64c019c01000020001000151800006036e7333c031 26268 41d3000000010000000000000377777710646973636f766572796368616e6e656c026e6c0000010001 41d3800000010000000200000377777710646973636f766572796368616e6e656c026e6c0000010001c01000020001000151800012036e7331086e65746e616d6573036e657400c01000020001000151800006036e7332c039 26269 b5f5d4c8501044707d0c0000000000000000 26270 b5f5d4c850184470f2d3000000992a30000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda1403c1f2100030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000 26271 b5f550ee5010fd4e98d90000000000000000 b5f5d0e40000000000000000 26272 b5f6a7075010fd5c27700000000000000000 26273 b5f6a7075018fd5c47b70000008e5506000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd93403c4f1300030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 26274 e7c70010000100000000000103777777057377657473026e6c00000100010000290800000080000000 e7c78000000100000002000203777777057377657473026e6c0000010001c010000200010001518000060373756ec010c0100002000100015180001904646e73310e7377657473626c61636b77656c6c03636f6d00c02a00010001000151800004c057323c0000291000000000000000 26275 158d000000010000000000000377777707766f6c64657273026e6c0000010001 158d800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26276 377e0000000100000000000003777777056e76736876026e6c0000010001 377e8000000100000002000203777777056e76736876026e6c0000010001c0100002000100015180000f026e7309656174736572766572c016c01000020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 26277 c07a00000001000000000000066162666c6578066575726f7476026e6c0000010001 c07a80000001000000020002066162666c6578066575726f7476026e6c0000010001c01300020001000151800010036e7331096e657773747265616dc01ac01300020001000151800006036e7332c032c02e00010001000151800004c26d81d3c04a00010001000151800004c26d81d4 26278 4e000000000100000000000009676f7564656e62616c03647365026e6c0000010001 4e008000000100000002000209676f7564656e62616c03647365026e6c0000010001c01600020001000151800012036e73310b7669616e6574776f726b73c01ac01600020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 26279 b5f5d4d6501144627c700000000000000000 26280 ee2d000000010000000000000474726578066e6574726578026e6c0000010001 ee2d800000010000000200020474726578066e6574726578026e6c0000010001c01100020001000151800002c00cc01100020001000151800006036e7332c011c00c00010001000151800004d4cccf1fc03a000100010001518000043eb1a02b 26281 f61c00000001000000000000037777770c6e696a6d6567656e2d6e6563026e6c0000010001 f61c80000001000000030000037777770c6e696a6d6567656e2d6e6563026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c039c0100002000100015180000a076e73686f737433c039 26282 000000007002400033c60000020405b401010402 000080010000000000000000 26283 b5f6a7155011fd4e26df0000000000000000 26284 000000007002faf08f9300000204056401010402 000080010000000000000000 26285 b5f5d4d7501044627c6f0000000000000000 26286 7c7a000000010000000000000a6563687465726e616368026e6c00000f0001 7c7a800000010000000200000a6563687465726e616368026e6c00000f0001c00c0002000100015180001104726171390662697a6e697a036e657400c00c00020001000151800008057261713134c030 26287 b5f74ebe5010447057540000000000000000 b5f7ceb40000000000000000 26288 b5f6a7165010fd4e26de0000000000000000 26289 b5f74ebe5018447031ec00000099c660000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda1403c1f2100030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000 b5f7ceb40000000000000000 26290 b5f822bd5010fd5ce0d50000000000000000 b5f8a2b30000000000000000 26291 c8c100000001000000000000047376636f0c6e6f6f72646572706f6f7274026e6c0000010001 c8c180000001000000020000047376636f0c6e6f6f72646572706f6f7274026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c038 26292 a7cb00000001000000000000056b72656b74026e6c00000f0001 a7cb80000001000000030000056b72656b74026e6c00000f0001c00c0002000100015180001505646e7331300961637469766569737003636f6d00c00c0002000100015180000805646e733131c02cc00c0002000100015180000805646e733132c02c 26293 bc5e00000001000000000000086465766f7372656f026e6c00000f0001 bc5e80000001000000020002086465766f7372656f026e6c00000f0001c00c0002000100015180000c04646e73310470696e73c015c00c0002000100015180000704646e7332c02ec02900010001000151800004d9c26101c04100010001000151800004d9c26002 26294 b5f822bd5018fd5cb3f20000008ea230000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd93403c4f1300030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 b5f8a2b30000000000000000 26295 01b20000000100000000000002343603313437023539033134320770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 01b28000000100000002000202343603313437023539033134320770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 26296 15ba00000001000000000000036e7331096e657467726f756e64026e6c0000010001 15ba80000001000000020002036e7331096e657467726f756e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e415c03c0001000100015180000451046014 26297 58cd00000001000000000000036e7331076f726967696e38026e6c0000010001 58cd80000001000000020002036e7331076f726967696e38026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c26d6e11c03a00010001000151800004d4ccc0f8 26298 bf5100000001000000000000036e7332076f726967696e38026e6c0000010001 bf5180000001000000020002036e7332076f726967696e38026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c26d6e11c00c00010001000151800004d4ccc0f8 26299 231000000001000000000000026e7308767575727765726b026e6c0000010001 231080000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 26300 b5f74ecc5011446256b80000000000000000 b5f7cec40000000000000000 26301 3e5f00000001000000000000037777770f64656a6f6e676d6f64656c626f7577026e6c0000010001 3e5f80000001000000020000037777770f64656a6f6e676d6f64656c626f7577026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c037 26302 0000000070024000ebf80000020405b401010402 000080010000000000000000 26303 b5f822cb5011fd4ee0440000000000000000 b5f8a2c30000000000000000 26304 67af00000001000000000000037777770b6c6573626f62656666656e026e6c0000010001 67af84030001000000010000037777770b6c6573626f62656666656e026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 26305 b4f50000000100000000000008746563736f6e6276026e6c00000f0001 b4f58000000100000002000208746563736f6e6276026e6c00000f0001c00c0002000100015180001104646e733109616464766973696f6ec015c00c0002000100015180000704646e7332c02ec029000100010001518000045054e242c046000100010001518000045054e243 26306 b5f74ecd5010446256b70000000000000000 b5f7cec40000000000000000 26307 b5f8bd2750104470a11c0000000000000000 26308 19c5000000010000000000000468747470077765626e743034067365727665720477656233026e6c0000010001 19c5800000010000000200020468747470077765626e743034067365727665720477656233026e6c0000010001c02000020001000151800006036e7331c020c02000020001000151800006036e7332c020c03900010001000151800004d436240ec04b00010001000151800004c2b262ef 26309 e6da00000001000000000000036e733209616464766973696f6e026e6c0000010001 e6da80000001000000020002036e733209616464766973696f6e026e6c0000010001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02e000100010001518000045054e242c041000100010001518000045054e243 26310 35c700000001000000000000036e733109616464766973696f6e026e6c0000010001 35c780000001000000020002036e733109616464766973696f6e026e6c0000010001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02e000100010001518000045054e242c041000100010001518000045054e243 26311 19b5000000010000000000000562736d747008746563736f6e6276026e6c0000010001 19b5800000010000000200020562736d747008746563736f6e6276026e6c0000010001c0120002000100015180001104646e733109616464766973696f6ec01bc0120002000100015180000704646e7332c034c02f000100010001518000045054e242c04c000100010001518000045054e243 26312 4955000000010000000000000c7a6f726773797374656d656e026e6c0000010001 4955800000010000000200020c7a6f726773797374656d656e026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 26313 b5f8bd27501844703755000000990ac0000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda1403c1f2100030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000 26314 b5f822cc5010fd4ee0430000000000000000 b5f8a2c30000000000000000 26315 9e880000000100000000000009646274656c65636f6d026e6c0000010001 9e888000000100000002000209646274656c65636f6d026e6c0000010001c00c000200010001518000110a6c65757665686176656e03696772c016c00c0002000100015180000d0a64656c6673686176656ec035c02a000100010001518000043e2d5e0dc047000100010001518000043e2d5e82 26316 6c7d00000001000000000000046d61696c086d61727175616765026e6c0000010001 6c7d80000001000000020002046d61696c086d61727175616765026e6c0000010001c0110002000100015180000d036e733106736f6c6c6965c01ac01100020001000151800006036e7332c032c02e00010001000151800004d4ccf609c04700010001000151800004d4ccf60a 26317 b5f8bd3550114462a0800000000000000000 26318 e8c600000001000000000000037777770a20766163616e74696573026e6c0000010001 e8c684030001000000010000037777770a20766163616e74696573026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 26319 15800000000100000000000009652d6c756e61746963026e6c0000010001 15808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 26320 8616000000010000000000000c68656e6e7976616e6b6f6f79026e6c00000f0001 8616800000010000000200000c68656e6e7976616e6b6f6f79026e6c00000f0001c00c00020001000151800017036e7333107365637572656e616d65736572766572c019c00c00020001000151800006036e7334c031 26321 b5f8bd3650104462a07f0000000000000000 26322 8b8000000001000000000000046d61696c07736361726c6574026e6c0000010001 8b8080000001000000030003046d61696c07736361726c6574026e6c0000010001c01100020001000151800017036e733110736361726c65742d696e7465726e6574c019c01100020001000151800006036e7332c031c01100020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 26323 adbb000000010000000000000377777709706174737469636b73026e6c0000010001 adbb800000010000000200020377777709706174737469636b73026e6c0000010001c01000020001000151800010036e733109756e69736572766572c01ac01000020001000151800006036e7332c032c02e00010001000151800004c3454b03c04a00010001000151800004d119a2fa 26324 f4a30000000100000000000005646e732d31056c61646f74026e6c0000010001 f4a38000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26325 aa660000000100000000000005646e732d32056c61646f74026e6c0000010001 aa668000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26326 09540000000100000000000008766574726f746563026e6c00000f0001 09548403000100000001000008766574726f746563026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 26327 a4360000000100000000000003313537033130330232320236390a626c61636b686f6c657307656173796e6574026e6c0000010001 a4368000000100000002000203313537033130330232320236390a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 26328 e83900100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 e83980000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 26329 422f00000001000000000000037777770770726f6c6f6e67026e6c0000010001 422f80000001000000020002037777770770726f6c6f6e67026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c018c01000020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 26330 b33900000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373076b6c6a626f7577026e6c0000060001 b33984030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373076b6c6a626f7577026e6c0000060001c04800060001000038400036026e730f646f6d61696e2d7265676973747279c0480a686f73746d6173746572c05f0bf1e540000070800000384000278d0000003840 26331 ea7a00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 ea7a80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 26332 ea3f00000001000000000000046d61696c0a696e746572706861726d026e6c0000010001 ea3f80000001000000020000046d61696c0a696e746572706861726d026e6c0000010001c0110002000100015180000d036e7331036b706e036e657400c01100020001000151800006036e7332c034 26333 462b000000010000000000000c616d657273666f6f72747365026e6c0000010001 462b800000010000000200000c616d657273666f6f72747365026e6c0000010001c00c00020001000151800015036e73310b656e65726769732d696463036e657400c00c00020001000151800006036e7332c031 26334 1b0e0000000100000000000003777777076e656473746174026e6c0000010001 1b0e8000000100000002000203777777076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 26335 434300000001000000000000026e7303616d730874656c6567617465026e6c0000010001 434380000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 26336 73530000000100000000000004686f6d6506706c616e6574026e6c0000010001 73538000000100000003000304686f6d6506706c616e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a65 26337 f49000000001000000000000035f6763045f746370076465656e6b6161026e6c0000060001 f49084030001000000010000035f6763045f746370076465656e6b6161026e6c0000060001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 26338 7585000000010000000000000a626464617461706c616e026e6c0000010001 7585800000010000000200020a626464617461706c616e026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 26339 c50a00000001000000000000066d6579736f6e026e6c00000f0001 c50a80000001000000020001066d6579736f6e026e6c00000f0001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c02700010001000151800004d4ccc0fc 26340 106400000001000000000000036e73340767617574656e67026e6c0000010001 106480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26341 384e00000001000000000000036e73330767617574656e67026e6c0000010001 384e80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26342 dd8c00000001000000000000056a756e6978056675736978026e6c0000260001 dd8c80000001000000020002056a756e6978056675736978026e6c0000260001c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c02c00010001000151800004c340530bc03e00010001000151800004c355e185 26343 363b0000000100000000000003777777056964657573026e6c0000010001 363b8000000100000002000103777777056964657573026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180001303646e73097365636f6e64617279036f726700c02a000100010001518000043eddc7d1 26344 e4d000000001000000000000036e7332056132303030026e6c00001c0001 e4d080000001000000030002036e7332056132303030026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 26345 c08d00000001000000000000036e7332056132303030026e6c0000260001 c08d80000001000000030002036e7332056132303030026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 26346 e8d400000001000000000000036e7331056132303030026e6c00001c0001 e8d480000001000000030002036e7331056132303030026e6c00001c0001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 26347 cec6000000010000000000000377777707626469736f6b65026e6c0000010001 cec6800000010000000200000377777707626469736f6b65026e6c0000010001c01000020001000151800017036e73310d6465696e7465726e65746d616e036e657400c01000020001000151800006036e7332c030 26348 7ab500100001000000000001036e73310a726564686f7374696e67026e6c00000100010000290800000000000000 7ab580000001000000020003036e73310a726564686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa4050000291000000000000000 26349 baf100000001000000000000036e7331056132303030026e6c0000260001 baf180000001000000030002036e7331056132303030026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 26350 b47400100001000000000001036e73310a726564686f7374696e67026e6c00002600010000290800000000000000 b47480000001000000020003036e73310a726564686f7374696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa4050000291000000000000000 26351 6d6500100001000000000001036e73320a726564686f7374696e67026e6c00000100010000290800000000000000 6d6580000001000000020003036e73320a726564686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa4050000291000000000000000 26352 862d00100001000000000001036e73320a726564686f7374696e67026e6c00002600010000290800000000000000 862d80000001000000020003036e73320a726564686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa4050000291000000000000000 26353 982f28000001000000010000026e6c0000060001035f6763045f746370076465656e6b6161026e6c000021000100000258001a000000640cc4076465656e6b6161076465656e6b6161026e6c00 982fa8040000000000000000 26354 9591000000010000000000000665776562636f026e6c00001c0001 9591840300010000000100000665776562636f026e6c00001c0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 26355 0000000070024000e4bf0000020405b401010402 000080010000000000000000 26356 4307000000010000000000000462757661026e6c00000f0001 4307800000010000000200000462757661026e6c00000f0001c00c0002000100015180000f026e7306636170696361036e657400c00c00020001000151800006036e7332c028 26357 b5f94cd4501044700a360000000000000000 b5f9ccd40000000000000000 26358 67070000000100000000000003777777086575726f6b6c696b026e6c0000010001 67078000000100000002000103777777086575726f6b6c696b026e6c0000010001c0100002000100015180000e026e73086575726f636c6978c019c01000020001000151800012036e7332086575726f636c697803636f6d00c02d00010001000151800004d47bc685 26359 b5f94cd450184470a70a0000008ebfc0000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af9aa403c4b2a00030000002f4e544c4d535350000100000097b200e0080008002700000007000700200000004445454e4b41414445454e4b4141300000 b5f9ccd40000000000000000 26360 53fe00000001000000000000097665636f6e73756c74026e6c0000010001 53fe80000001000000020002097665636f6e73756c74026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 26361 b5f94ce25011446209a50000000000000000 b5f9cce40000000000000000 26362 3a4300000001000000000000036e7331027a73026e6c0000010001 3a4380000001000000030003036e7331027a73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef829fc03500010001000151800004d5ef8005c04700010001000151800004d5ef82a0 26363 d5ad00000001000000000000036e7332027a73026e6c0000010001 d5ad80000001000000030003036e7332027a73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02700010001000151800004d5ef829fc00c00010001000151800004d5ef8005c04700010001000151800004d5ef82a0 26364 b5f94ce35010446209a40000000000000000 b5f9cce40000000000000000 26365 315c00000001000000000000037777770c7374617272656d6564696573026e6c0000010001 315c80000001000000030003037777770c7374617272656d6564696573026e6c0000010001c0100002000100015180000c036e7331053266617374c01dc01000020001000151800006036e7332c035c01000020001000151800006036e7333c035c0310001000100015180000450f7c022c049000100010001518000043e858122c05b000100010001518000045117eb22 26366 000000007002400012600000020405b401010402 000080010000000000000000 26367 b5f9f08b50104470941e0000000000000000 26368 629200000001000000000000037777770676656b61626f026e6c0000010001 629280000001000000020002037777770676656b61626f026e6c0000010001c0100002000100015180000f036e7332087472697070656c77c017c0100002000100015180000a036e7332036e7873c017c02b00010001000151800004d973c3d7c04600010001000151800004d973c102 26369 7b080000000100000000000003777777086e756465626f797a026e6c0000010001 7b088000000100000002000203777777086e756465626f797a026e6c0000010001c0100002000100015180000c04646e73310470696e73c019c0100002000100015180000704646e7332c032c02d00010001000151800004d9c26101c04500010001000151800004d9c26002 26370 9e16000000010000000000000377777705636c756273026e6c0000010001 9e16800000010000000200010377777705636c756273026e6c0000010001c0100002000100015180000a036e733303777873c016c01000020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 26371 b5f9f08b50184470b7f40000008e39c0000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af9aa403c4b2a00030000002f4e544c4d535350000100000097b200e0080008002700000007000700200000004445454e4b41414445454e4b4141300000 26372 2a45000000010000000000001474656e62726f656b2d68656e67656c73706f7274026e6c00000f0001 2a45800000010000000200021474656e62726f656b2d68656e67656c73706f7274026e6c00000f0001c00c00020001000151800011036e73350a6e657461666661697273c021c00c00020001000151800006036e7336c039c03500010001000151800004c1ac2d05c05200010001000151800004c1ac2d06 26373 b5f9f09950114462938d0000000000000000 26374 6c52000000010000000000000377777706732d636f7274026e6c0000010001 6c52800000010000000200020377777706732d636f7274026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c017c01000020001000151800006036e7332c02fc02b0001000100015180000451113264c04700010001000151800004d5c42851 26375 b5f9f09a50104462938c0000000000000000 26376 80d0000000010000000000000776657273696f6e0462696e640000100003 80d0800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 26377 4109000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 4109800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26378 000000007002400009cf0000020405b401010402 000080010000000000000000 26379 374b0000000100000000000003313537033130330232320236390a626c61636b686f6c657307656173796e6574026e6c0000050001 374b8000000100000002000203313537033130330232320236390a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 26380 41c000000001000000000000037777770d64696572656e2d72617373656e026e6c0000010001 41c080000001000000020000037777770d64696572656e2d72617373656e026e6c0000010001c0100002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0100002000100015180000d077669312d6e7330026174c03d 26381 c283000000010000000000000462617261026e6c00000f0001 c283800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 26382 80d100000001000000000000026e6c0000060001 80d184000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 26383 f5fd00000001000000000000037777770d7765726b656e696e73616c6f75026e6c0000010001 f5fd80000001000000020000037777770d7765726b656e696e73616c6f75026e6c0000010001c01000020001000151800018036e73310e66696e616c2d66726f6e74696572036e657400c01000020001000151800006036e7332c036 26384 b5fc831750104470f8fe0000000000000000 26385 b5fc83175018447044550000008e1240000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af9aa403c4b2a00030000002f4e544c4d535350000100000097b200e0080008002700000007000700200000004445454e4b41414445454e4b4141300000 26386 9a2100000001000000000000036e73310c696d70726573736976657873026e6c0000010001 9a2180000001000000020002036e73310c696d70726573736976657873026e6c0000010001c0100002000100015180000a036e733103706777c01dc01000020001000151800006036e7332c035c031000100010001518000043e818832c04700010001000151800004d4ccc621 26387 e82f00000001000000000000036e73320c696d70726573736976657873026e6c0000010001 e82f80000001000000020002036e73320c696d70726573736976657873026e6c0000010001c0100002000100015180000a036e733103706777c01dc01000020001000151800006036e7332c035c031000100010001518000043e818832c04700010001000151800004d4ccc621 26388 fd0a00000001000000000000036e73310c696d70726573736976657873026e6c0000260001 fd0a80000001000000020002036e73310c696d70726573736976657873026e6c0000260001c0100002000100015180000a036e733103706777c01dc01000020001000151800006036e7332c035c031000100010001518000043e818832c04700010001000151800004d4ccc621 26389 3f4c00000001000000000000036e73320c696d70726573736976657873026e6c0000260001 3f4c80000001000000020002036e73320c696d70726573736976657873026e6c0000260001c0100002000100015180000a036e733103706777c01dc01000020001000151800006036e7332c035c031000100010001518000043e818832c04700010001000151800004d4ccc621 26390 25450000000100000000000003777777086d74726565787878026e6c0000010001 25458000000100000002000003777777086d74726565787878026e6c0000010001c01000020001000151800013036e7331097669727475616c787303636f6d00c01000020001000151800006036e7332c031 26391 5d3a00000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000010001 5d3a80000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 26392 64ed00000001000000000000026e730b6973642d686f6c6c616e64026e6c0000010001 64ed80000001000000020002026e730b6973642d686f6c6c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 26393 b5fc832550114462f86d0000000000000000 26394 b5fc832650104462f86c0000000000000000 26395 52840000000100000000000003777777036d736e026e6c0000010001 52848000000100000003000003777777036d736e026e6c0000010001c0100002000100015180001204646e733302756b046d736674036e657400c0100002000100015180000a04646e7331026370c030c0100002000100015180000a04646e7331026463c030 26396 8bb3000000010000000000000d626f7374696b66696e646c6579026e6c00000f0001 8bb3800000010000000200020d626f7374696b66696e646c6579026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c01ac00c00020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 26397 ea8f00000001000000000000026e73066863636e6574026e6c0000010001 ea8f80000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 26398 4fea0000000100000000000003646a6b026e6c00000f0001 4fea8000000100000002000003646a6b026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c028 26399 3b0e000000010000000000000679656c6c6f77026e6c00000f0001 3b0e800000010000000300010679656c6c6f77026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc013c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c045c027000100010001518000043efa0202 26400 b7030000000100000000000005646e732d31056c61646f74026e6c0000010001 b7038000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26401 b7040000000100000000000005646e732d32056c61646f74026e6c0000010001 b7048000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26402 0b16000000010000000000000679656c6c6f77026e6c00000f0001 0b16800000010000000300010679656c6c6f77026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc013c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c045c027000100010001518000043efa0202 26403 c86b00000001000000000000056272696e6b026e6c0000010001 c86b80000001000000020002056272696e6b026e6c0000010001c00c0002000100015180000c036e73310563736e6574c012c00c00020001000151800006036e7332c02ac02600010001000151800004c2451012c03e00010001000151800004c2451212 26404 f958000000010000000000000a6862636f6e7368656572066862636f6e73026e6c0000010001 f958800000010000000200000a6862636f6e7368656572066862636f6e73026e6c0000010001c0170002000100015180000b026e73026e6c036e657400c0170002000100015180001206617574683630026e73026e6c027575c038 26405 550600000001000000000000036e73310568616e7a65026e6c0000010001 550680000001000000030003036e73310568616e7a65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c016c00c00010001000151800004912106efc03800010001000151800004912106eec04a00010001000151800004c0576a65 26406 736700000001000000000000036e73320568616e7a65026e6c0000010001 736780000001000000030003036e73320568616e7a65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004912106efc00c00010001000151800004912106eec04a00010001000151800004c0576a65 26407 314f0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 314f8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26408 d7c4000000010000000000000c6762636f6e6669726d697479026e6c00000f0001 d7c4840300010000000100000c6762636f6e6669726d697479026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 26409 b01900000001000000000000076d696e62757a61026e6c0000010001 b01980000001000000020001076d696e62757a61026e6c0000010001c00c0002000100015180000b087374617267617465c00cc00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004d535a3d2 26410 b7070000000100000000000005646e732d31056c61646f74026e6c0000010001 b7078000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26411 2fbb000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 2fbb800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26412 f5a228000001000000010000026e6c0000060001055f6c646170045f746370026763065f6d7364637306444154455354026e6c000021000100000258001a000000640cc40864636e6c6461303706444154455354026e6c00 f5a2a8040000000000000000 26413 0daa000000010000000000000467726678086d61696c73657276026e6c0000010001 0daa800000010000000200020467726678086d61696c73657276026e6c0000010001c0110002000100015180000c026e73067574722d6978c01ac01100020001000151800006036e7332c031c02e0001000100015180000451113206c04600010001000151800004d5c42806 26414 d1020000000100000000000008736179616e6f7261056d62757975026e6c0000010001 d1028000000100000002000008736179616e6f7261056d62757975026e6c0000010001c01500020001000151800010026e73076379736f6e657403636f6d00c01500020001000151800006036e7331c032 26415 843b00000001000000000000026e7308767575727765726b026e6c0000010001 843b80000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 26416 778100000001000000000000046d61696c0476697065026e6c0000010001 778180000001000000030002046d61696c0476697065026e6c0000010001c0110002000100015180000d036e733106776964657873c016c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 26417 432c000000010000000000000370616d02696d026e6c0000010001 432c800000010000000200010370616d02696d026e6c0000010001c0100002000100015180000a036e733303777873c013c01000020001000151800006036e7334c02bc03d00010001000151800004d5ef9a65 26418 82cd0000000100000000000008726f656e7467656e0a726567696f7669737461026e6c0000010001 82cd8000000100000003000308726f656e7467656e0a726567696f7669737461026e6c0000010001c0150002000100015180000e046865726101780463756369c020c0150002000100015180000c066865726d6573026e6cc03bc01500020001000151800009066865726d6573c039c03400010001000151800004d47d8001c04e00010001000151800004c143ef02c06600010001000151800004d47d8002 26419 91180000000100000000000018727061617264656b6f6f70657233343340667265656c6572026e6c0000010001 91188403000100000001000018727061617264656b6f6f70657233343340667265656c6572026e6c0000010001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 26420 b6cf0000000100000000000003777777086c65747373746174026e6c0000010001 b6cf8000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 26421 d89100000001000000000000036e73310b62756c6b646f6d61696e73026e6c0000010001 d89180000001000000020002036e73310b62756c6b646f6d61696e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccd1b2c03e00010001000151800004d4ccd1b3 26422 7c1200000001000000000000036e73320b62756c6b646f6d61696e73026e6c0000010001 7c1280000001000000020002036e73320b62756c6b646f6d61696e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d4ccd1b2c00c00010001000151800004d4ccd1b3 26423 6cb30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 6cb38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26424 f71f00000001000000000000037777770d6a656e6e696665726c6f70657a026e6c0000010001 f71f80000001000000030003037777770d6a656e6e696665726c6f70657a026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc01ec0100002000100015180000704646e7332c037c0100002000100015180000704646e7333c037c03200010001000151800004d44fe803c04c00010001000151800004c3f5c782c05f00010001000151800004d44ff303 26425 ba9000000001000000000000036e7333076e656473746174026e6c0000010001 ba9080000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 26426 c19a0000000100000000000003777777086865747370616e74026e6c0000010001 c19a8403000100000001000003777777086865747370616e74026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 26427 079b0000000100000000000004766c6965026e6c0000010001 079b8000000100000003000204766c6965026e6c0000010001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 26428 090f000000010000000000000833742d76656c6437026e6c00000f0001 090f800000010000000300000833742d76656c6437026e6c00000f0001c00c00020001000151800017076e73686f73743103737432056c79636575036e657400c00c0002000100015180000a076e73686f737432c031c00c0002000100015180000a076e73686f737433c031 26429 c4e500000001000000000000076d617271616e74026e6c0000010001 c4e580000001000000020000076d617271616e74026e6c0000010001c00c0002000100015180000d046e72313205692d702d64c014c00c00020001000151800006036e7237c02d 26430 5d4800000001000000000000026e73076e656473746174026e6c0000010001 5d4880000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 26431 0a2a0000000100000000000006787334616c6c026e6c0000010001 0a2a8000000100000003000206787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 26432 3d1800000001000000000000036e73310a726564686f7374696e67026e6c0000010001 3d1880000001000000020002036e73310a726564686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 26433 9e8c00000001000000000000036e73310a726564686f7374696e67026e6c0000260001 9e8c80000001000000020002036e73310a726564686f7374696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 26434 92af00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 92af80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 26435 dbb9000000010000000000000377777706736f766f636f026e6c0000010001 dbb9800000010000000200000377777706736f766f636f026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c02e 26436 f3f7000000010000000000000377777703696165026e6c0000010001 f3f7800000010000000200020377777703696165026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c014c01000020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 26437 0b6100000001000000000000036e7331096e657467726f756e64026e6c0000010001 0b6180000001000000020002036e7331096e657467726f756e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e415c03c0001000100015180000451046014 26438 e7ee00000001000000000000036e73320a726564686f7374696e67026e6c0000010001 e7ee80000001000000020002036e73320a726564686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa405 26439 f3f700000001000000000000036e73320a726564686f7374696e67026e6c0000260001 f3f780000001000000020002036e73320a726564686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa405 26440 df950000000100000000000005746576616e026e6c00000f0001 df958000000100000003000305746576616e026e6c00000f0001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec012c00c00020001000151800006036e7331c02fc00c00020001000151800006036e7332c02fc02600010001000151800004d42d2005c04400010001000151800004d42d2003c05600010001000151800004d42d2103 26441 dba900000001000000000000037777770a6c65756b657374617274026e6c0000010001 dba980000001000000030003037777770a6c65756b657374617274026e6c0000010001c0100002000100015180000c036e7331056d61786573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f000100010001518000045045402ec047000100010001518000045045402fc059000100010001518000045045440a 26442 3d8e00000001000000000000046164737004696c7365026e6c0000010001 3d8e80000001000000030003046164737004696c7365026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02a000100010001518000043e45a282c03c000100010001518000043e45a283c04e000100010001518000043e45a284 26443 ef100000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 ef108000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26444 99810000000100000000000003626c3102626c06787334616c6c026e6c0000010001 99818000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26445 1e4b0000000100000000000003777777086765656e70756e74026e6c0000010001 1e4b8000000100000002000203777777086765656e70756e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d4ccd865c03f000100010001518000045054ec34 26446 157c00000001000000000000037777770a65726f74697373696d6f026e6c0000010001 157c80000001000000020002037777770a65726f74697373696d6f026e6c0000010001c01000020001000151800010036e733109756e69736572766572c01bc01000020001000151800006036e7332c033c02f00010001000151800004c3454b03c04b00010001000151800004d119a2fa 26447 10f500000001000000000000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657305656c616e32026e6c0000060001 10f584030001000000010000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657305656c616e32026e6c0000060001c03a00060001000038400036026e730f646f6d61696e2d7265676973747279c03a0a686f73746d6173746572c0510bf1e540000070800000384000278d0000003840 26448 14c00000000100000000000004616e73320774697363616c69026e6c0000010001 14c08000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 26449 21a80000000100000000000003777777076e6f676e696b7a026e6c0000010001 21a88000000100000003000103777777076e6f676e696b7a026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 26450 62f9000000010000000000000773657276657231087369746574726171026e6c0000010001 62f9800000010000000200000773657276657231087369746574726171026e6c0000010001c0140002000100015180000f036e733105796b6f6f6e036e657400c01400020001000151800006036e7332c035 26451 3625000000010000000000000a70656e746173636f7065026e6c00000f0001 3625800000010000000200000a70656e746173636f7065026e6c00000f0001c00c00020001000151800012036e736108696e666f7061637403636f6d00c00c00020001000151800006036e7362c02f 26452 975900000001000000000000036e73320c6d65676170726f7669646572026e6c0000010001 975980000001000000030003036e73320c6d65676170726f7669646572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0310001000100015180000450474002c00c0001000100015180000450474102c05000010001000151800004d943ee57 26453 522300000001000000000000026e730c6d65676170726f7669646572026e6c0000010001 522380000001000000030003026e730c6d65676170726f7669646572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c0001000100015180000450474002c03e0001000100015180000450474102c05000010001000151800004d943ee57 26454 6f4800000001000000000000066865796e656e026e6c00000f0001 6f4880000001000000020000066865796e656e026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 26455 1ccf28000001000000010000026e6c0000060001035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657305656c616e32026e6c000021000100000258001a000000640cc409696e7465726e65743105656c616e32026e6c00 1ccfa8040000000000000000 26456 11d60000000100000000000011636861726c696563726f6f696a6d616e73026e6c00000f0001 11d68000000100000002000011636861726c696563726f6f696a6d616e73026e6c00000f0001c00c0002000100015180001804646e73310d737973696e69746f6e6c696e65036e657400c00c0002000100015180000704646e7333c037 26457 000000007002400018250000020405ac01010402 000080010000000000000000 26458 e86d0000000100000000000003777777057377657473026e6c0000010001 e86d8000000100000002000103777777057377657473026e6c0000010001c010000200010001518000060373756ec010c0100002000100015180001904646e73310e7377657473626c61636b77656c6c03636f6d00c02a00010001000151800004c057323c 26459 1a2d00000001000000000000037777770477756d6e026e6c0000010001 1a2d80000001000000020002037777770477756d6e026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c015c01000020001000151800006036e7332c02dc02900010001000151800004505fa002c04400010001000151800004505fac02 26460 f8fe000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 f8fe800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26461 000000007002faf09f980000020405b401010402 000080010000000000000000 26462 b5fde23c5010fbec33160000000000000000 26463 b5fd4fd4501044103aef0000000000000000 b5fdcfd40000000000000000 26464 b5fde23c5018fbece71a0000008d8180000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff2f403c50af00030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000 26465 b5fd4fd45018441087bb00000094248d000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af729403c48a90003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 b5fdcfd40000000000000000 26466 3ec20000000100000000000007667265656c6572026e6c00000f0001 3ec28000000100000002000007667265656c6572026e6c00000f0001c00c000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c00c0002000100015180000e0b65766973702d6e732d3032c034 26467 b5fde24a5011fbde32860000000000000000 26468 63f30000000100000000000003777777056c79636f73026e6c0000010001 63f38000000100000002000003777777056c79636f73026e6c0000010001c0100002000100015180001106646e73312d31056c79636f7302646500c0100002000100015180000906646e73322d31c031 26469 b5fd4fe2501144023a580000000000000000 b5fdcfe40000000000000000 26470 000000007002faf0eeb60000020405b401010402 000080010000000000000000 26471 b5fde24b5010fbde32850000000000000000 26472 6e6700000001000000000000047376726f026e6c00000f0001 6e6780000001000000030002047376726f026e6c00000f0001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 26473 562700000001000000000000036e733109666972737466696e64026e6c0000010001 562780000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26474 b5fd4fe3501044023a570000000000000000 b5fdcfe40000000000000000 26475 4978000000010000000000000a6f6d616578747265656d03337878026e6c0000010001 4978800000010000000200000a6f6d616578747265656d03337878026e6c0000010001c01700020001000151800012036e73310878656e6f73697465036e657400c01700020001000151800006036e7332c033 26476 b5feceaf5010fbec95c00000000000000000 26477 103700000001000000000000036e733209666972737466696e64026e6c0000010001 103780000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26478 b5feceaf5018fbecfa450000008dd200000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff2f403c50af00030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000 26479 dbea0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 dbea8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26480 3adc00000001000000000000037777770c6d616368696e656b616d6572026e6c0000010001 3adc80000001000000020000037777770c6d616368696e656b616d6572026e6c0000010001c01000020001000151800014036e73310a6272696e6b686f737432036e657400c01000020001000151800006036e7332c035 26481 b5fecebd5011fbde95300000000000000000 26482 24cb0000000100000000000004616e73320774697363616c69026e6c0000010001 24cb8000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 26483 fa41000000010000000000010469632d73026e6c00001c00010000291000000000000000 fa41800000010000000200010469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 26484 000000007002faf0f3a80000020405b401010402 000080010000000000000000 26485 b5fecebe5010fbde952f0000000000000000 26486 96250000000100000000000007696e7369746573026e6c00000f0001 96258000000100000003000107696e7369746573026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 26487 6f8b00000001000000000000126461706f756465726b65726b65726c61616e026e6c0000010001 6f8b80000001000000020001126461706f756465726b65726b65726c61616e026e6c0000010001c00c0002000100015180000a036e733303777873c01fc00c00020001000151800006036e7334c037c04900010001000151800004d5ef9a65 26488 b5ff56835010fbec12de0000000000000000 b5ffd6840000000000000000 26489 b5ff56835018fbec30e40000008d1880000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff2f403c50af00030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000 b5ffd6840000000000000000 26490 7ecb000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 7ecb800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26491 fa41000000010000000000000469632d73026e6c00001c0001 fa41800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26492 b5ff56915011fbde124e0000000000000000 b5ffd6940000000000000000 26493 f82700000001000000000000037777770a6b65756e73747775726b026e6c0000010001 f82780000001000000020000037777770a6b65756e73747775726b026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c032 26494 b5ff56925010fbde124d0000000000000000 b5ffd6940000000000000000 26495 ce8300000001000000000000037777770a6175746f706167696e61026e6c0000010001 ce8380000001000000030003037777770a6175746f706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02f000100010001518000043e45a282c041000100010001518000043e45a283c053000100010001518000043e45a284 26496 a86800000001000000000000036e733109666972737466696e64026e6c0000010001 a86880000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26497 a86900000001000000000000036e733209666972737466696e64026e6c0000010001 a86980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26498 65720000000100000000000003777777067a7376737178026e6c0000010001 65728403000100000001000003777777067a7376737178026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 26499 2d90000000010000000000000377777707766f6c64657273026e6c0000010001 2d90800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26500 259d000000010000000000000377777707766f6c64657273026e6c0000010001 259d800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26501 a86b00000001000000000000036e733109666972737466696e64026e6c0000010001 a86b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26502 a86c00000001000000000000036e733209666972737466696e64026e6c0000010001 a86c80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26503 49f7000000010000000000000c6d61696c7363616e6e6572310b6f75776568616e642d6974026e6c0000010001 49f7800000010000000200020c6d61696c7363616e6e6572310b6f75776568616e642d6974026e6c0000010001c01900020001000151800006036e7331c019c01900020001000151800006036e7333c019c03900010001000151800004d4cccff1c04b00010001000151800004d4ccc4b1 26504 f30700000001000000000000026e7306787334616c6c026e6c00001c0001 f30780000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 26505 53e100000001000000000000036e733206787334616c6c026e6c00001c0001 53e180000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 26506 d08100000001000000000000026e73076e65746c616e64026e6c0000010001 d08180000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 26507 d08100000001000000000000026e73076e65746c616e64026e6c0000010001 d08180000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 26508 d08100000001000000000000026e73076e65746c616e64026e6c0000010001 d08180000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 26509 ae1600000001000000000000036e7332076e65746c616e64026e6c0000010001 ae1680000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 26510 ae1600000001000000000000036e7332076e65746c616e64026e6c0000010001 ae1680000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 26511 57300000000100000000000003777777097669657a65736c6574026e6c0000010001 57308000000100000002000003777777097669657a65736c6574026e6c0000010001c01000020001000151800019026e73106575726f6d656469617472616666696303636f6d00c01000020001000151800006036e7332c031 26512 981800100001000000000001036e7334076e656473746174026e6c00000100010000290800000000000000 981880000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 26513 b7090000000100000000000005646e732d31056c61646f74026e6c0000010001 b7098000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26514 b70a0000000100000000000005646e732d32056c61646f74026e6c0000010001 b70a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26515 7852000000010000000000000e64696572656e6172747368656573026e6c0000010001 7852800000010000000200010e64696572656e6172747368656573026e6c0000010001c00c0002000100015180000d036e733106776964657873c01bc00c00020001000151800010036e733206776964657873036e657400c02f00010001000151800004d4ccc0fc 26516 47d600000001000000000000036e733109666972737466696e64026e6c0000010001 47d680000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26517 124800000001000000000000036e73310a726564686f7374696e67026e6c0000010001 124880000001000000020002036e73310a726564686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 26518 187e000000010000000000000c7664622d736f667477617265026e6c00000f0001 187e800000010000000300010c7664622d736f667477617265026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc019c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04bc02d000100010001518000043efa0202 26519 b1ed0000000100000000000003777777076d617472616465026e6c0000010001 b1ed8000000100000002000103777777076d617472616465026e6c0000010001c0100002000100015180000a036e733303777873c018c01000020001000151800006036e7334c030c04200010001000151800004d5ef9a65 26520 f5d200000001000000000000037777770d73616e64657264657672696573026e6c0000010001 f5d280000001000000020000037777770d73616e64657264657672696573026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c038 26521 09530000000100000000000006636861726973026e6c00000f0001 09538000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 26522 067000000001000000000000036e733209666972737466696e64026e6c0000010001 067080000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26523 74690000000100000000000010706c73696e7465726e6174696f6e616c026e6c00001c0001 74698000000100000002000210706c73696e7465726e6174696f6e616c026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc01dc00c00020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 26524 f848000000010000000000000377777708736e6f7774696d65026e6c0000010001 f848800000010000000300010377777708736e6f7774696d65026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 26525 110700000001000000000000036e7334076e656473746174026e6c0000010001 110780000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 26526 9cb500000001000000000000036e7331056163646973026e6c0000010001 9cb580000001000000020002036e7331056163646973026e6c0000010001c01000020001000151800002c00cc0100002000100015180000a026e7304616e7762c016c00c00010001000151800004c29779fac03800010001000151800004c1ac840a 26527 8ba600000001000000000000036e7331056163646973026e6c00001c0001 8ba680000001000000020002036e7331056163646973026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000a026e7304616e7762c016c00c00010001000151800004c29779fac03800010001000151800004c1ac840a 26528 b70c0000000100000000000005646e732d31056c61646f74026e6c0000010001 b70c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26529 06aa0000000100000000000007616c6c696e6974026e6c00000f0001 06aa8000000100000002000207616c6c696e6974026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 26530 b70d0000000100000000000005646e732d32056c61646f74026e6c0000010001 b70d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26531 1eb400000001000000000001115354494e4745524649424552474c415353026e6c00000200010000290500000000000000 1eb484030001000000010001115354494e4745524649424552474c415353026e6c0000020001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d00000038400000291000000000000000 26532 fba000000001000000000000037777770b6c6174696e637574696573026e6c0000010001 fba080000001000000020002037777770b6c6174696e637574696573026e6c0000010001c0100002000100015180000c04646e73310470696e73c01cc0100002000100015180000704646e7332c035c03000010001000151800004d9c26101c04800010001000151800004d9c26002 26533 aca500000001000000000000036e7332076e656473746174026e6c0000010001 aca580000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 26534 4cf500000001000000000000036e7332076e656473746174026e6c0000260001 4cf580000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 26535 f5d300000001000000000000036e7334076e656473746174026e6c0000010001 f5d380000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 26536 89c500000001000000000000036e7334076e656473746174026e6c0000260001 89c580000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 26537 898c00000001000000000000056973737565026e6c0000010001 898c80000001000000020000056973737565026e6c0000010001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02a 26538 104b0010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 104b8000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 26539 d7c100100001000000000001066d61737465720364746f07747564656c6674026e6c00000100010000290800000080000000 d7c180000001000000050006066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a650000291000000000000000 26540 8499000000010000000000002439646261393061342d353631332d343264322d393732382d336235336637613435393538065f6d73646373084b504e6174414250026e6c0000ff0001 8499840300010000000100002439646261393061342d353631332d343264322d393732382d336235336637613435393538065f6d73646373084b504e6174414250026e6c0000ff0001c04100060001000038400036026e730f646f6d61696e2d7265676973747279c0410a686f73746d6173746572c0580bf1e540000070800000384000278d0000003840 26541 d113000000010000000000000473616261026e6c00000f0001 d113800000010000000200020473616261026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 26542 8c7300000001000000000000037777770d6c61646f7563656672616e6365026e6c0000010001 8c7380000001000000020000037777770d6c61646f7563656672616e6365026e6c0000010001c01000020001000151800014026e730b7369746570726f7465637403636f6d00c01000020001000151800006036e7332c035 26543 2a410000000100000000000014627275696a736d657461616c676965746572696a026e6c0000010001 2a418000000100000002000214627275696a736d657461616c676965746572696a026e6c0000010001c00c00020001000151800009036e7331026973c021c00c00020001000151800006036e7332c039c03500010001000151800004d5852102c04a00010001000151800004d5c41503 26544 444a0000000100000000000003777777046e696969036b756e026e6c0000010001 444a8000000100000003000303777777046e696969036b756e026e6c0000010001c0150002000100015180000f08636170796261726103756369c015c0150002000100015180000a036e733103736369c015c0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483ae3c15c0480001000100015180000483aee004c05e00010001000151800004c0576a65 26545 be3e0000000100000000000003777777046e696969036b756e026e6c0000010001 be3e8000000100000003000303777777046e696969036b756e026e6c0000010001c0150002000100015180000f08636170796261726103756369c015c0150002000100015180000a036e733103736369c015c0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483ae3c15c0480001000100015180000483aee004c05e00010001000151800004c0576a65 26546 3f2100000001000000000000036e73320b7472616374696f6e2d6974026e6c0000010001 3f2180000001000000020000036e73320b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 26547 60a900000001000000000000036e733109666972737466696e64026e6c0000010001 60a980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26548 63fb00000001000000000000036e733209666972737466696e64026e6c0000010001 63fb80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26549 62f7000000010000000000000377777706617265613137026e6c0000010001 62f7800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 26550 154a000000010000000000000377777706617265613137026e6c0000010001 154a800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 26551 88a9000000010000000000000a6d7970726f7669646572026e6c0000010001 88a9800000010000000200010a6d7970726f7669646572026e6c0000010001c00c0002000100015180000c036e7331056d79636f6dc017c00c00020001000151800006036e7332c02fc02b00010001000151800004d4ccc04f 26552 2c7f00000001000000000000087773776f726d6572026e6c0000ff0001 2c7f80000001000000020002087773776f726d6572026e6c0000ff0001c00c00020001000151800012036e73310b6f75776568616e642d6974c015c00c00020001000151800006036e7333c02dc02900010001000151800004d4cccff1c04700010001000151800004d4ccc4b1 26553 2d900000000100000000000009652d6c756e61746963026e6c0000010001 2d908000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 26554 1d9a0000000100000000000009652d6c756e61746963026e6c0000010001 1d9a8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 26555 94e300000001000000000000056973696f6e026e6c00000f0001 94e380000001000000020002056973696f6e026e6c00000f0001c00c0002000100015180000d026e73076b6e6f77617265c012c00c00020001000151800006036e7332c029c02600010001000151800004c3402003c03f00010001000151800004c340202b 26556 a5120000000100000000000003626c3102626c06787334616c6c026e6c0000010001 a5128000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26557 e94a00000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 e94a80000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 26558 98cb0000000100000000000005656c6d656c026e6c00000f0001 98cb8000000100000002000005656c6d656c026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 26559 1eb400000001000000000000115354494e4745524649424552474c415353026e6c0000020001 1eb484030001000000010000115354494e4745524649424552474c415353026e6c0000020001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 26560 188600000001000000000001036e733104686f6d65026e6c00000100010000291000000000000000 188680000001000000030004036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 26561 20b200000001000000000001036e733404686f6d65026e6c00000100010000291000000000000000 20b280000001000000030004036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 26562 160400000001000000000001036e733204686f6d65026e6c00000100010000291000000000000000 160480000001000000030004036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 26563 d34200000001000000000001036e733304686f6d65026e6c00000100010000291000000000000000 d34280000001000000030004036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 26564 24ef0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 24ef8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26565 188600000001000000000000036e733104686f6d65026e6c0000010001 188680000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 26566 20b200000001000000000000036e733404686f6d65026e6c0000010001 20b280000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 26567 160400000001000000000000036e733204686f6d65026e6c0000010001 160480000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 26568 d34200000001000000000000036e733304686f6d65026e6c0000010001 d34280000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 26569 71b000000001000000000000036e733109666972737466696e64026e6c0000010001 71b080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26570 233c00000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 233c80000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 26571 2c6c00000001000000000000036e733209666972737466696e64026e6c0000010001 2c6c80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 26572 d13f0000000100000000000006626f782d303508667265656d61696c026e6c0000010001 d13f8000000100000003000206626f782d303508667265656d61696c026e6c0000010001c0130002000100015180000f04616e73310774697363616c69c01cc0130002000100015180000704616e7332c035c0130002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 26573 7fbf0000000100000000000003777777066368656c6c6f026e6c0000010001 7fbf8000000100000003000303777777066368656c6c6f026e6c0000010001c01000020001000151800007046e733031c010c01000020001000151800007046e733032c010c0100002000100015180000a036e733103757063c017c02b00010001000151800004d4534482c03e00010001000151800004d4534483c05100010001000151800004d48e1c42 26574 0d2400000001000000000000036e733206736f6c636f6e026e6c0000010001 0d2480000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 26575 6fdc00000001000000000000046d61696c0365766f026e6c0000010001 6fdc80000001000000020000046d61696c0365766f026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c02f 26576 b99f0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 b99f8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26577 608a0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 608a8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26578 335200000001000000000000107075626c69656b2d706f6c697469656b026e6c00000f0001 335280000001000000020002107075626c69656b2d706f6c697469656b026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01dc00c00020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 26579 70dc00000001000000000000037777770763616e69656c73026e6c0000010001 70dc84030001000000010000037777770763616e69656c73026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 26580 498f00000001000000000000026e73076e656473746174026e6c0000010001 498f80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 26581 721100000001000000000000036e73340767617574656e67026e6c0000010001 721180000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26582 e87f00000001000000000000026e73076e656473746174026e6c0000010001 e87f80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 26583 1d0a00000001000000000000036e7333076e656473746174026e6c0000010001 1d0a80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 26584 2bec00000001000000000000036e73330767617574656e67026e6c0000010001 2bec80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26585 1a5d00000001000000000000026e73076e65746c616e64026e6c0000010001 1a5d80000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 26586 0cf400000001000000000000026e73096379626572636f6d6d026e6c0000010001 0cf480000001000000030003026e73096379626572636f6d6d026e6c0000010001c00f00020001000151800017036e733110736361726c65742d696e7465726e6574c019c00f00020001000151800006036e7332c031c00f00020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 26587 867a00000001000000000000036e7332096379626572636f6d6d026e6c0000010001 867a80000001000000030003036e7332096379626572636f6d6d026e6c0000010001c01000020001000151800017036e733110736361726c65742d696e7465726e6574c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ccc302c05100010001000151800004d5ccc303c06300010001000151800004c277e953 26588 b6ab00000001000000000000046d61696c17776f6e696e6762656472696a662d616d7374657264616d026e6c00001c0001 b6ab80000001000000020002046d61696c17776f6e696e6762656472696a662d616d7374657264616d026e6c00001c0001c0110002000100015180000c036e73310563736e6574c029c01100020001000151800006036e7332c041c03d00010001000151800004c2451012c05500010001000151800004c2451212 26589 d2980000000100000000000003777777096175746f6c65617365026e6c0000010001 d2988000000100000003000303777777096175746f6c65617365026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 26590 2a8f000000010000000000000761616c6f735f32036c6f73026e6c0000010001 2a8f800000010000000200020761616c6f735f32036c6f73026e6c0000010001c0140002000100015180000c026e7306787334616c6cc018c01400020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 26591 75a30000000100000000000008697373746f6e6564026e6c00000f0001 75a38000000100000002000008697373746f6e6564026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02d 26592 4f000000000100000000000003777777086d6574656f776562026e6c0000010001 4f008000000100000002000203777777086d6574656f776562026e6c0000010001c01000020001000151800009026e73036f6b65c019c01000020001000151800006036e7332c030c02d00010001000151800004c13acc3bc04200010001000151800004c13acc27 26593 c53c0000000100000000000006736973696d310873797374656d6563026e6c0000010001 c53c8000000100000003000206736973696d310873797374656d6563026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000b026e73026e6c036e657400c01300020001000151800006036e7332c013c03000010001000151800004c2e5a402c05800010001000151800004c2e5a404 26594 69930000000100000000000006736973696d310873797374656d6563026e6c00001c0001 69938000000100000003000206736973696d310873797374656d6563026e6c00001c0001c01300020001000151800005026e73c013c0130002000100015180000b026e73026e6c036e657400c01300020001000151800006036e7332c013c03000010001000151800004c2e5a402c05800010001000151800004c2e5a404 26595 dd410000000100000000000005736d7470320873797374656d6563026e6c0000010001 dd418000000100000003000205736d7470320873797374656d6563026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c01200020001000151800006036e7332c012c02f00010001000151800004c2e5a402c05700010001000151800004c2e5a404 26596 4adb00000001000000000000036e73330873797374656d6563026e6c0000010001 4adb80000001000000030002036e73330873797374656d6563026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800006036e7332c010c02d00010001000151800004c2e5a402c05500010001000151800004c2e5a404 26597 a4ea00000001000000000000036e7332086d65646961776562026e6c0000010001 a4ea80000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 26598 6d3100000001000000000000036e7333086d65646961776562026e6c0000010001 6d3180000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 26599 d35e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d35e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26600 e48b00000001000000000000026e73057972616d73026e6c0000010001 e48b80000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 26601 644500000001000000000000026e73057972616d73026e6c0000260001 644580000001000000020000026e73057972616d73026e6c0000260001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 26602 f29b0000000100000000000003777777077a2d696e646578026e6c0000010001 f29b8000000100000002000203777777077a2d696e646578026e6c0000010001c0100002000100015180000c026e7306787334616c6cc018c01000020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 26603 caf100000001000000000000036e7331036e6f62026e6c0000010001 caf180000001000000020002036e7331036e6f62026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004504f22f6c03600010001000151800004504f22fa 26604 074100000001000000000000036e7332036e6f62026e6c0000010001 074180000001000000020002036e7332036e6f62026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004504f22f6c00c00010001000151800004504f22fa 26605 896300000001000000000000036c706d026e6c00000f0001 896380000001000000020002036c706d026e6c00000f0001c00c0002000100015180000e036e73310768656262697a7ac010c00c00020001000151800006036e7332c028c02400010001000151800004c372eb42c03e000100010001518000043e320e91 26606 d09600000001000000000000037777770d62616b6b65722d6f6e6c696e65026e6c0000010001 d09680000001000000020000037777770d62616b6b65722d6f6e6c696e65026e6c0000010001c0100002000100015180000f036e7331056279303037036e657400c01000020001000151800006036e7332c036 26607 b9e00000000100000000000004616e73320774697363616c69026e6c0000010001 b9e08000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 26608 b6d70000000100000000000004616e73310774697363616c69026e6c0000010001 b6d78000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 26609 a4e400000001000000000000056e6b386c6a026e6c00000f0001 a4e484030001000000010000056e6b386c6a026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 26610 155600000001000000000000036e73310774656c666f7274026e6c0000010001 155680000001000000020001036e73310774656c666f7274026e6c0000010001c01000020001000151800002c00cc01000020001000151800014036e733202657507636f6e63657274036e657400c00c00010001000151800004d5c22815 26611 b51a000000010000000000000968616e647966697368026e6c00000f0001 b51a800000010000000300000968616e647966697368026e6c00000f0001c00c00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02e 26612 2b4f000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 2b4f800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26613 0f7e000000010000000000000469632d73026e6c00000f0001 0f7e800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26614 538500000001000000000000056d61696c71077665726f6c6d65026e6c0000010001 538580000001000000020002056d61696c71077665726f6c6d65026e6c0000010001c01200020001000151800012036e73310b7669616e6574776f726b73c01ac01200020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 26615 47ba000000010000000000000570616e656c066e6f74696573026e6c0000010001 47ba800000010000000200020570616e656c066e6f74696573026e6c0000010001c01200020001000151800005026e31c012c01200020001000151800005026e32c012c02d00010001000151800004c26d9483c03e00010001000151800004c26d9484 26616 382400000001000000000000046d61696c0e7365637572657365727669636573026e6c0000010001 382480000001000000020002046d61696c0e7365637572657365727669636573026e6c0000010001c01100020001000151800009036e7331026973c020c01100020001000151800006036e7332c038c03400010001000151800004d5852102c04900010001000151800004d5c41503 26617 ccb80000000100000000000003626c3102626c06787334616c6c026e6c0000010001 ccb88000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26618 ae900000000100000000000003777777116963687765697475746e6565746d696572026e6c0000010001 ae908000000100000002000003777777116963687765697475746e6565746d696572026e6c0000010001c01000020001000151800013036e733009696e7465726c697a65036e657400c01000020001000151800006036e7331c03a 26619 a45500000001000000000000026e7308767575727765726b026e6c0000010001 a45580000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 26620 009f00000001000000000000036e73330767617574656e67026e6c0000010001 009f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26621 765a00000001000000000000037777770e746865617465722d6f6e6c696e65026e6c0000010001 765a80000001000000020002037777770e746865617465722d6f6e6c696e65026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01fc01000020001000151800006036e7332c036c03300010001000151800004d4cb0e42c04e00010001000151800004d4cb1221 26622 07e0000000010000000000000377777707766f6c64657273026e6c0000010001 07e0800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26623 3fec000000010000000000000377777707766f6c64657273026e6c0000010001 3fec800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26624 8fe900000001000000000000186d656e7a696e677761726d7465626568616e64656c696e67026e6c0000010001 8fe980000001000000020002186d656e7a696e677761726d7465626568616e64656c696e67026e6c0000010001c00c00020001000151800013036e73310c666173747365727665723139c025c00c00020001000151800006036e7332c03dc0390001000100015180000442a4f0e1c0580001000100015180000442a4f0ec 26625 0c3f00000001000000000000096165726f7061727473026e6c0000010001 0c3f80000001000000020000096165726f7061727473026e6c0000010001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c02d 26626 cac300000001000000000000036e733103757063026e6c0000010001 cac380000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 26627 0ee800000001000000000000026e75026e6c0000010001 0ee880000001000000030003026e75026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc023000100010001518000043e45a282c035000100010001518000043e45a283c047000100010001518000043e45a284 26628 e74500000001000000000000037777770f6861616773636865636f7572616e74026e6c0000010001 e74580000001000000020002037777770f6861616773636865636f7572616e74026e6c0000010001c0100002000100015180000b036e73310470696e65c020c01000020001000151800006036e7332c038c03400010001000151800004d59c0201c04b00010001000151800004c3c1a303 26629 cf3400000001000000000000037777770a696e746563686e69756d026e6c0000010001 cf3480000001000000020001037777770a696e746563686e69756d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02f00010001000151800004d4cefd31 26630 b4170000000100000000000008756e697665727365086c696e757862616b026e6c0000010001 b4178000000100000002000208756e697665727365086c696e757862616b026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c03200010001000151800004507fd0dec043000100010001518000043e3abe9a 26631 31ab00000001000000000000036e73310564656d6f6e026e6c00001c0001 31ab80000001000000030002036e73310564656d6f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 26632 dbb900000001000000000000036e73310564656d6f6e026e6c0000260001 dbb980000001000000030002036e73310564656d6f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 26633 49ab00000001000000000000036e73320564656d6f6e026e6c00001c0001 49ab80000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 26634 9c9600000001000000000000036e73320564656d6f6e026e6c0000260001 9c9680000001000000030002036e73320564656d6f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 26635 5b9a00000001000000000000036e733107656e6572676973026e6c0000010001 5b9a80000001000000020002036e733107656e6572676973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3079102c03a00010001000151800004c307920a 26636 ae5000000001000000000000036e733104686f6d65026e6c0000010001 ae5080000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 26637 828c00000001000000000000086e69766f6275726f026e6c0000ff0001 828c80000001000000020001086e69766f6275726f026e6c0000ff0001c00c0002000100015180000a036e733303777873c015c00c00020001000151800006036e7334c02dc03f00010001000151800004d5ef9a65 26638 816900000001000000000000036e73310a646e7373657276657273026e6c0000010001 816980000001000000020002036e73310a646e7373657276657273026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054ed14c03d00010001000151800004d5f72f14 26639 618000000001000000000000036e73310a646e7373657276657273026e6c0000260001 618080000001000000020002036e73310a646e7373657276657273026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054ed14c03d00010001000151800004d5f72f14 26640 30c000000001000000000000036e73320a646e7373657276657273026e6c0000010001 30c080000001000000020002036e73320a646e7373657276657273026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f000100010001518000045054ed14c00c00010001000151800004d5f72f14 26641 e781000000010000000000000377777707686f636b656572026e6c0000010001 e781800000010000000200000377777707686f636b656572026e6c0000010001c01000020001000151800013026e730a6275757274706c65696e03636f6d00c01000020001000151800006036e7332c02f 26642 02fe00000001000000000000037777770b7a77616c7577686f657665026e6c0000010001 02fe80000001000000030002037777770b7a77616c7577686f657665026e6c0000010001c01000020001000151800018036e73310761746c616e74610676656c757765036e657400c0100002000100015180000d036e733106736f6c636f6ec01cc01000020001000151800006036e7332c058c05400010001000151800004d42d2003c06d00010001000151800004d42d2103 26643 986000000001000000000000036e73320a646e7373657276657273026e6c0000260001 986080000001000000020002036e73320a646e7373657276657273026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f000100010001518000045054ed14c00c00010001000151800004d5f72f14 26644 c55300000001000000000000036e733203736369036b756e026e6c0000010001 c55380000001000000030003036e733203736369036b756e026e6c0000010001c0140002000100015180000f08636170796261726103756369c014c01400020001000151800006036e7331c010c0140002000100015180000e036e733107737572666e6574c018c02c0001000100015180000483ae3c15c0470001000100015180000483aee004c05900010001000151800004c0576a65 26645 51e90000000100000000000008706f736569646f6e03756369036b756e026e6c0000010001 51e98000000100000003000308706f736569646f6e03756369036b756e026e6c0000010001c0190002000100015180000b086361707962617261c015c0190002000100015180000a036e733103736369c019c0190002000100015180000e036e733107737572666e6574c01dc0310001000100015180000483ae3c15c0480001000100015180000483aee004c05e00010001000151800004c0576a65 26646 3eb3000000010000000000000661736f706f73026e6c00000f0001 3eb3800000010000000200000661736f706f73026e6c00000f0001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 26647 9b0c0000000100000000000008426f7363686d616e024e4c0000010001 9b0c8000000100000002000208426f7363686d616e024e4c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c015c00c00020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 26648 e99d00000001000000000000086c616e63656c6f7406737175697265026e6c0000010001 e99d80000001000000020002086c616e63656c6f7406737175697265026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 26649 8bab000000010000000000000868756974686f6d6506787334616c6c026e6c0000010001 8bab800000010000000300020868756974686f6d6506787334616c6c026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c0150002000100015180000d026e730472697065036e657400c03000010001000151800004c26d0642c04100010001000151800004c26d0963 26650 3106000000010000000000000469632d73026e6c00000f0001 3106800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26651 fd6700000001000000000000036e733503777873026e6c0000010001 fd6780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 26652 4109000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 4109800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26653 a6d400000001000000000000036e73310a747265666e6574646e73026e6c0000010001 a6d480000001000000030002036e73310a747265666e6574646e73026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 26654 ac250000000100000000000003777777087369746563617374026e6c0000010001 ac258000000100000002000203777777087369746563617374026e6c0000010001c0100002000100015180000c04646e73310470696e73c019c0100002000100015180000704646e7332c032c02d00010001000151800004d9c26101c04500010001000151800004d9c26002 26655 a44e000000010000000000000b6c61626f726167726f6570026e6c0000010001 a44e800000010000000200000b6c61626f726167726f6570026e6c0000010001c00c0002000100015180001905646e7330310d636f6d70726173657276657273036e657400c00c0002000100015180000805646e733032c032 26656 4ef300000001000000000000037777770b73696d6f6e6c6576656c74026e6c0000010001 4ef380000001000000020000037777770b73696d6f6e6c6576656c74026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01cc0100002000100015180000704686e7331c035 26657 6d2600000001000000000000046d61696c096d656e67656c657273026e6c0000010001 6d2680000001000000020002046d61696c096d656e67656c657273026e6c0000010001c01100020001000151800011026e730b6973642d686f6c6c616e64c01bc01100020001000151800006036e7332c032c02f00010001000151800004d5e38d0ac04c00010001000151800004d5e38205 26658 2fbb000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 2fbb800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26659 9cb6000000010000000000000377777707313233696e6b74026e6c0000010001 9cb6800000010000000200020377777707313233696e6b74026e6c0000010001c01000020001000151800018036e7331116469676974616c7265766f6c7574696f6ec018c01000020001000151800006036e7332c030c02c000100010001518000045054f103c050000100010001518000045054f181 26660 328300000001000000000000076863636669646f03686363026e6c00000f0001 328380000001000000020000076863636669646f03686363026e6c00000f0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c032 26661 166e00000001000000000000037777770d67656d65656e746562616e656e026e6c0000010001 166e80000001000000020000037777770d67656d65656e746562616e656e026e6c0000010001c01000020001000151800013036e73310368617306686f7374697402626500c0100002000100015180000a036e7332036c7578c03a 26662 f81a0000000100000000000003777777116172726f77726f636b666573746976616c026e6c0000010001 f81a8000000100000002000203777777116172726f77726f636b666573746976616c026e6c0000010001c0100002000100015180000b026e7305706c616e74c022c01000020001000151800006036e7332c039c03600010001000151800004d59f0037c04d00010001000151800004d59f0046 26663 48e900000001000000000000036e7331046a617a65026e6c0000010001 48e980000001000000020000036e7331046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 26664 48ea00000001000000000000036e7332046a617a65026e6c0000010001 48ea80000001000000020000036e7332046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 26665 50560000000100000000000004777777310977756e6465726d616e026e6c0000010001 50568000000100000002000004777777310977756e6465726d616e026e6c0000010001c0110002000100015180000c036e733102797203636f6d00c01100020001000151800006036e7332c033 26666 88c70000000100000000000006787334616c6c026e6c00000f0001 88c78000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 26667 2cc000000001000000000000036e733107737572666e6574026e6c0000010001 2cc080000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 26668 226400000001000000000000026e73076e65746c616e64026e6c0000010001 226480000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 26669 cf1c0000000100000000000002343802383503313239033231370964796e61626c6f636b07656173796e6574026e6c0000100001 cf1c8000000100000002000202343802383503313239033231370964796e61626c6f636b07656173796e6574026e6c0000100001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 26670 e681000000010000000000000a6974656d65646963616c026e6c0000010001 e681800000010000000200020a6974656d65646963616c026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 26671 cb1500000001000000000000036e733107737572666e6574026e6c0000260001 cb1580000001000000040003036e733107737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 26672 03d900000001000000000000026e7306766576696461026e6c0000010001 03d980000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 26673 223500000001000000000000036e733206766576696461026e6c0000010001 223580000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 26674 31380000000100000000000003777777086d616d616d696e69026e6c0000010001 31388000000100000002000203777777086d616d616d696e69026e6c0000010001c0100002000100015180000f026e7309656174736572766572c019c01000020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 26675 d25400000001000000000000036e733207737572666e6574026e6c0000010001 d25480000001000000040003036e733207737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a65 26676 e4f4000000010000000000000377777705656c766961026e6c0000010001 e4f4800000010000000200000377777705656c766961026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c02d 26677 692a00000001000000000000036e733207737572666e6574026e6c0000260001 692a80000001000000040003036e733207737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a65 26678 e24900000001000000000000037777770a6d6363686f6c6c616e64026e6c0000010001 e24980000001000000020000037777770a6d6363686f6c6c616e64026e6c0000010001c0100002000100015180000c026e7306766576696461c01bc01000020001000151800006036e7332c032 26679 b40100000001000000000000036e73320a6d756c74696b6162656c026e6c0000010001 b40180000001000000030002036e73320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 26680 989400000001000000000000036e73310d706f7765727365727665723138026e6c00001c0001 989480000001000000020002036e73310d706f7765727365727665723138026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047111c0400001000100015180000451047112 26681 ef5900000001000000000000036e73310d706f7765727365727665723138026e6c0000260001 ef5980000001000000020002036e73310d706f7765727365727665723138026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047111c0400001000100015180000451047112 26682 015200000001000000000000036e73320d706f7765727365727665723138026e6c00001c0001 015280000001000000020002036e73320d706f7765727365727665723138026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0320001000100015180000451047111c00c0001000100015180000451047112 26683 efca00000001000000000000036e73320d706f7765727365727665723138026e6c0000260001 efca80000001000000020002036e73320d706f7765727365727665723138026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0320001000100015180000451047111c00c0001000100015180000451047112 26684 bbe900000001000000000000026e7306787334616c6c026e6c00001c0001 bbe980000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 26685 f13c00000001000000000000026e7306787334616c6c026e6c0000260001 f13c80000001000000030002026e7306787334616c6c026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 26686 98f500000001000000000000036e733206787334616c6c026e6c00001c0001 98f580000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 26687 fd10000000010000000000000463767373026e6c00000f0001 fd10800000010000000200000463767373026e6c00000f0001c00c0002000100015180001504646e73310a65617379736572766572036e657400c00c0002000100015180000704646e7332c02a 26688 b44a00000001000000000000036e733206787334616c6c026e6c0000260001 b44a80000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 26689 8ec60000000100000000000008616562766d61696c06787334616c6c026e6c0000010001 8ec68000000100000003000208616562766d61696c06787334616c6c026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c0150002000100015180000d026e730472697065036e657400c03000010001000151800004c26d0642c04100010001000151800004c26d0963 26690 316000000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 316080000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 26691 cc3700000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 cc3780000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 26692 daee00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 daee80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 26693 025f0000000100000000000004777061640a7377697463686a6f6273026e6c0000010001 025f8000000100000002000204777061640a7377697463686a6f6273026e6c0000010001c01100020001000151800009036e7331026973c01cc01100020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 26694 0a600000000100000000000004777061640a7377697463686a6f6273026e6c0000010001 0a608000000100000002000204777061640a7377697463686a6f6273026e6c0000010001c01100020001000151800009036e7331026973c01cc01100020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 26695 157800000001000000000000037777770463697465026e6c0000010001 157880000001000000020000037777770463697465026e6c0000010001c01000020001000151800014026e730b6e616d6573657276657273036e657400c01000020001000151800006036e7332c02c 26696 72150000000100000000000004696b6162026e6c0000010001 72158000000100000002000204696b6162026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 26697 dc6a00000001000000000000046d61696c06616c7469756d026e6c0000010001 dc6a80000001000000020002046d61696c06616c7469756d026e6c0000010001c0110002000100015180000b026e7305706c616e74c018c01100020001000151800006036e7332c02fc02c00010001000151800004d59f0037c04300010001000151800004d59f0046 26698 7a1a00000001000000000000056d61696c3405706c616e74026e6c0000010001 7a1a80000001000000020002056d61696c3405706c616e74026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c02c00010001000151800004d59f0037c03d00010001000151800004d59f0046 26699 229800000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 229880000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 26700 2d0800000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 2d0880000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 26701 816d0000000100000000000004646e733107696e666f6e6574026e6c0000010001 816d8000000100000002000204646e733107696e666f6e6574026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d4bd01c4c03b00010001000151800004d4bd7f83 26702 a9b00000000100000000000004646e733207696e666f6e6574026e6c0000010001 a9b08000000100000002000204646e733207696e666f6e6574026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02d00010001000151800004d4bd01c4c00c00010001000151800004d4bd7f83 26703 59e000000001000000000000056d61696c33076e6564636f6d70026e6c0000010001 59e080000001000000020001056d61696c33076e6564636f6d70026e6c0000010001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 26704 aa4400000001000000000000037777771177696e746572776564737472696a64656e026e6c0000010001 aa4480000001000000020000037777771177696e746572776564737472696a64656e026e6c0000010001c0100002000100015180000c026e7306766576696461c022c01000020001000151800006036e7332c039 26705 3caf00000001000000000000056d61696c3405706c616e74026e6c0000010001 3caf80000001000000020002056d61696c3405706c616e74026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c02c00010001000151800004d59f0037c03d00010001000151800004d59f0046 26706 673a000000010000000000000377777706676972646572026e6c0000010001 673a800000010000000200020377777706676972646572026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c017c01000020001000151800006036e7332c02fc02b00010001000151800004d994ae77c049000100010001518000045054ea06 26707 97320000000100000000000006787334616c6c026e6c0000ff0001 97328000000100000003000206787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 26708 092700000001000000000000037777770c64617274737765656b656e64026e6c0000010001 092780000001000000020001037777770c64617274737765656b656e64026e6c0000010001c0100002000100015180000a036e733303777873c01dc01000020001000151800006036e7334c035c04700010001000151800004d5ef9a65 26709 d569000000010000000000000d6c617669656361746572696e67026e6c00000f0001 d569800000010000000200020d6c617669656361746572696e67026e6c00000f0001c00c00020001000151800010026e730a63746d686f7374696e67c01ac00c00020001000151800006036e7332c031c02e000100010001518000043e3ac4c2c04a000100010001518000043e3ac4c3 26710 28c000000001000000000000036e73330767617574656e67026e6c0000010001 28c080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26711 10c800000001000000000000036e73330767617574656e67026e6c0000010001 10c880000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26712 c1040000000100000000000003777777056173696365026e6c0000010001 c1048000000100000003000003777777056173696365026e6c0000010001c0100002000100015180001a036e733110756e696c6f6769636e6574776f726b73036e657400c01000020001000151800006036e7332c02ec01000020001000151800006036e7333c02e 26713 dda400000001000000000000036e7335046372696f026e6c0000010001 dda480000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26714 534f00000001000000000000036e7336046372696f026e6c0000010001 534f80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26715 a12c000000010000000000000377777703776562026e6c0000010001 a12c800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 26716 5c7300000001000000000000036e7331046372696f026e6c0000010001 5c7380000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26717 e5d100000001000000000000036e7332046372696f026e6c0000010001 e5d180000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26718 73cf00000001000000000000037777770a72656372656174696566026e6c0000010001 73cf80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 26719 cf0000000001000000000000036e7335046372696f026e6c0000010001 cf0080000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26720 968600000001000000000000036e7336046372696f026e6c0000010001 968680000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26721 14a600000001000000000000036e7331046372696f026e6c0000010001 14a680000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26722 7c3200000001000000000000036e7332046372696f026e6c0000010001 7c3280000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 26723 cf9000000001000000000000095354494e4b42454154026e6c0000020001 cf9084030001000000010000095354494e4b42454154026e6c0000020001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 26724 2ea900100001000000000001026e7307696e746f756368026e6c00000100010000290800000080000000 2ea980000001000000030002026e7307696e746f756368026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c0010000291000000000000000 26725 7a6200000001000000000000036e733208696e7465726c6162026e6c0000010001 7a6280000001000000020002036e733208696e7465726c6162026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004d4cb0902c00c00010001000151800004d4cb0903 26726 4eb1000000010000000000000377777706686574736377026e6c0000010001 4eb1800000010000000200020377777706686574736377026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c017c01000020001000151800006036e7332c02fc02b00010001000151800004d43d0f08c04900010001000151800004d43d19e2 26727 09ca00000001000000000000026e7308767575727765726b026e6c0000010001 09ca80000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 26728 28b3000000010000000000000c727a7075626c697368657273026e6c0000ff0001 28b3800000010000000200020c727a7075626c697368657273026e6c0000ff0001c00c0002000100015180000c036e733105786d61696cc019c00c00020001000151800006036e7332c031c02d00010001000151800004c3561e1cc04500010001000151800004c3561e1d 26729 264000000001000000000000026e7303616d730874656c6567617465026e6c0000010001 264080000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 26730 0d200000000100000000000009652d6c756e61746963026e6c0000010001 0d208000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 26731 79c300000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d73646373046d6d6931046d6d2d69026e6c0000210001 79c380000001000000020002055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d73646373046d6d6931046d6d2d69026e6c0000210001c0450002000100015180000b026e7305706c616e74c04ac04500020001000151800006036e7332c061c05e00010001000151800004d59f0037c07500010001000151800004d59f0046 26732 362a00000001000000000000036e73310b636f6e766f6c7574696f6e026e6c0000010001 362a80000001000000020002036e73310b636f6e766f6c7574696f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9477a29c03e00010001000151800004d9477a2a 26733 be4a00000001000000000000036e73320b636f6e766f6c7574696f6e026e6c0000010001 be4a80000001000000020002036e73320b636f6e766f6c7574696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d9477a29c00c00010001000151800004d9477a2a 26734 f5c200000001000000000000036e733106736f6c636f6e026e6c0000010001 f5c280000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 26735 fd3400000001000000000000036e733206736f6c636f6e026e6c0000010001 fd3480000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 26736 ff220000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 ff228000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 26737 b43c000000010000000000000463676579026e6c00000f0001 b43c800000010000000300030463676579026e6c00000f0001c00c00020001000151800011046e7365310963617067656d696e69c011c00c00020001000151800007046e736532c02ac00c0002000100015180000b086e732d69736d3031c02ac02500010001000151800004c6b8e70dc04200010001000151800004c6b8e70cc05500010001000151800004d5f4a024 26738 677f00000001000000000000146e69657577736272696576656e73657276696365026e6c00000f0001 677f80000001000000030001146e69657577736272696576656e73657276696365026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 26739 4db00000000100000000000007617261676f726e0b73746172746b6162656c33026e6c0000010001 4db08000000100000003000307617261676f726e0b73746172746b6162656c33026e6c0000010001c0140002000100015180000b04646e733103766970c020c0140002000100015180000704646e7332c039c0140002000100015180000704646e7333c039c03400010001000151800004d44fe803c04b00010001000151800004c3f5c782c05e00010001000151800004d44ff303 26740 017a00000001000000000000036f6167026e6c00000f0001 017a80000001000000020002036f6167026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 26741 edbb000000010000000000000377777707666972656e6574026e6c0000010001 edbb800000010000000300000377777707666972656e6574026e6c0000010001c01000020001000151800012036e73310b66697265686f7374696e67c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030 26742 84dd000000010000000000000970726f78696d617265026e6c00000f0001 84dd800000010000000200000970726f78696d617265026e6c00000f0001c00c0002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c00c00020001000151800015026e730f796f75726e616d65686f7374696e67c040 26743 b2a300000001000000000000036e73320670726f6c616e026e6c00001c0001 b2a380000001000000020002036e73320670726f6c616e026e6c00001c0001c0100002000100015180001404777777320c6e656465726c616e64776562c017c01000020001000151800002c00cc02b00010001000151800004d5d381c2c00c00010001000151800004d4ccd4e7 26744 542d00000001000000000000026e7307696e746f756368026e6c0000010001 542d80000001000000030001026e7307696e746f756368026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c001 26745 0ea90000000100000000000005726f6d656f066f6e6c696e65026f32026e6c0000010001 0ea98000000100000002000205726f6d656f066f6e6c696e65026f32026e6c0000010001c0190002000100015180000d026e73076e65746c616e64c01cc01900020001000151800006036e7332c033c03000010001000151800004d9aa2042c04900010001000151800004d9aa2c06 26746 1f260000000100000000000006636861726973026e6c0000ff0001 1f268000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 26747 d58d000000010000000000001167726f656e686f727374636f6c6c656765026e6c0000ff0001 d58d800000010000000200001167726f656e686f727374636f6c6c656765026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c01ec00c0002000100015180000704686e7331c037 26748 7309000000010000000000000469632d73026e6c00000f0001 7309800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26749 292800000001000000000000046d61696c03777873026e6c0000010001 292880000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 26750 a66b00000001000000000000037777770e6374632d66696e616e636965656c026e6c0000010001 a66b80000001000000020002037777770e6374632d66696e616e636965656c026e6c0000010001c0100002000100015180000d036e7331066b6f766f6b73c01fc01000020001000151800006036e7332c037c033000100010001518000043e3a204cc04c000100010001518000043e3a2049 26751 0018000000010000000000000377777709736f6574656c696566026e6c0000010001 0018840300010000000100000377777709736f6574656c696566026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 26752 5d5a00000001000000000000036e733108696e74656c6c6974026e6c0000010001 5d5a80000001000000030002036e733108696e74656c6c6974026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 26753 180600000001000000000000036e733208696e74656c6c6974026e6c0000010001 180680000001000000030002036e733208696e74656c6c6974026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 26754 f8280000000100000000000008686f75736561647303696467026e6c0000010001 f8288000000100000003000308686f75736561647303696467026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c02d0001000100015180000451af4646c03f0001000100015180000451af4647c05100010001000151800004d5a0fde6 26755 5883000000010000000000000377777709636f756e747279666d026e6c0000010001 5883800000010000000200020377777709636f756e747279666d026e6c0000010001c0100002000100015180000a036e733103686978c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5a0da0ac0440001000100015180000451112ec3 26756 fdc9000000010000000000000a73636869707065726d74026e6c00000f0001 fdc9800000010000000200010a73636869707065726d74026e6c00000f0001c00c0002000100015180000a036e733303777873c017c00c00020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 26757 46ca00000001000000000000047072693203646e73067073696e6574026e6c0000010001 46ca80000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 26758 a36500000001000000000000047072693303646e73067073696e6574026e6c0000010001 a36580000001000000030003047072693303646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c01500020001000151800002c00cc030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac00c000100010001518000049a0ff9ae 26759 4308000000010000000000000377777708736869706d617465026e6c0000010001 4308800000010000000200000377777708736869706d617465026e6c0000010001c01000020001000151800010026e730777697265687562036e657400c01000020001000151800006036e7332c030 26760 20da00000001000000000000036e73340767617574656e67026e6c0000010001 20da80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26761 3fdd0000000100000000000004617369610374656e026e6c0000010001 3fdd8000000100000002000104617369610374656e026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c36c4b01 26762 21840000000100000000000004617369610374656e026e6c0000260001 21848000000100000002000104617369610374656e026e6c0000260001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c36c4b01 26763 18e400000001000000000000036e73340767617574656e67026e6c0000010001 18e480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26764 f91100000001000000000000055f6c646170045f74637003706463065f6d736463730465676c6f06646f6d61696e026e6c0000060001 f91184030001000000010000055f6c646170045f74637003706463065f6d736463730465676c6f06646f6d61696e026e6c0000060001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 26765 651100000001000000000000036e7333076e656473746174026e6c0000010001 651180000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 26766 bded000000010000000000000c66616d666f6c6b6572736d61026e6c0000ff0001 bded800000010000000200000c66616d666f6c6b6572736d61026e6c0000ff0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c038 26767 8b54000000010000000000000764656c74696f6e026e6c0000010001 8b54800000010000000200020764656c74696f6e026e6c0000010001c00c0002000100015180000d036e7331066e6c74726565c014c00c00020001000151800006036e7332c02cc02800010001000151800004d4b20403c04100010001000151800004d5881e45 26768 be3c00000001000000000000086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001 be3c80000001000000020002086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001c0220002000100015180000d036e7331066d696e646566c027c02200020001000151800006036e7332c03fc03b00010001000151800004d9a9e7c6c05400010001000151800004d9a9e7c5 26769 10ce000000010000000000000a73746172746b6162656c026e6c0000010001 10ce800000010000000300010a73746172746b6162656c026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 26770 1a94000000010000000000000761616c6f735f32036c6f73026e6c0000010001 1a94800000010000000200020761616c6f735f32036c6f73026e6c0000010001c0140002000100015180000c026e7306787334616c6cc018c01400020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 26771 7b400000000100000000000008726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001 7b408000000100000002000208726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001c0150002000100015180000e036e7331076e657463617374c023c01500020001000151800006036e7332c03bc03700010001000151800004c2970101c05100010001000151800004c297012d 26772 677f000000010000000000000f6d6f6269656c6f7665727a69636874026e6c00000f0001 677f800000010000000300010f6d6f6269656c6f7665727a69636874026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01cc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ec030000100010001518000043efa0202 26773 639000000001000000000000036e73310b776f726c646f6e6c696e65026e6c0000010001 639080000001000000030002036e73310b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 26774 31c800000001000000000000036e73320b776f726c646f6e6c696e65026e6c0000010001 31c880000001000000030002036e73320b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 26775 cfc400000001000000000000036e7331066e6c74726565026e6c0000010001 cfc480000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 26776 e7e200000001000000000000036e7332066e6c74726565026e6c0000010001 e7e280000001000000020002036e7332066e6c74726565026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d4b20403c00c00010001000151800004d5881e45 26777 a3ea0000000100000000000006787334616c6c026e6c00000f0001 a3ea8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 26778 cdf80000000100000000000003736d730567656e6965026e6c00000f0001 cdf88000000100000002000203736d730567656e6965026e6c00000f0001c0100002000100015180000d026e73076e65746c616e64c016c01000020001000151800006036e7332c02dc02a00010001000151800004d9aa2042c04300010001000151800004d9aa2c06 26779 ea8200000001000000000000037777770e64657369676e2d636f6d70616e79026e6c0000010001 ea8280000001000000020002037777770e64657369676e2d636f6d70616e79026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01fc01000020001000151800006036e7332c037c033000100010001518000045054f347c04f000100010001518000043e94a047 26780 925200000001000000000000046e743036036d7069026e6c0000010001 925280000001000000020002046e743036036d7069026e6c0000010001c011000200010001518000080573756e3032c011c01100020001000151800006036e7332c011c02900010001000151800004c0574f3ec03d00010001000151800004c0574f37 26781 08ef00000001000000000000036e73330767617574656e67026e6c0000010001 08ef80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26782 1b13000000010000000000000377777705626f6b6f65026e6c0000010001 1b13800000010000000200020377777705626f6b6f65026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7334c010c02a00010001000151800004d554b1dcc03c00010001000151800004d5540479 26783 def20000000100000000000008647973746f706961026e6c0000010001 def28000000100000003000208647973746f706961026e6c0000010001c00c0002000100015180000d036e733106776964657873c015c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 26784 cc4700000001000000000000057072757665026e6c00000f0001 cc4780000001000000030003057072757665026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c012c00c0002000100015180000a076e736175746832c02ec00c0002000100015180000a076e736175746833c02ec02600010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 26785 babb0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 babb8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 26786 517b00000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 517b80000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 26787 40ec00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 40ec80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 26788 a07600000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 a07680000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 26789 98c10000000100000000000003617672036b6761026e6c00000f0001 98c18000000100000003000303617672036b6761026e6c00000f0001c0100002000100015180000e04646e733106626c6978656dc014c0100002000100015180000704646e7332c02dc0100002000100015180000704646e7333c02dc02800010001000151800004d44fe803c04200010001000151800004c3f5c782c05500010001000151800004d44ff303 26790 1f9e000000010000000000000469632d73026e6c00001c0001 1f9e800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26791 4a6500000001000000000000095f6b65726265726f73045f746370055a5745524d024e4c0000060001 4a6584030001000000010000095f6b65726265726f73045f746370055a5745524d024e4c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 26792 a26c000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 a26c800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26793 8f560000000100000000000005646e732d31056c61646f74026e6c0000010001 8f568000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26794 48700000000100000000000005646e732d32056c61646f74026e6c0000010001 48708000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26795 c2dc0000000100000000000006636f6d6d6974026e6c0000010001 c2dc8000000100000002000006636f6d6d6974026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 26796 760800000001000000000000037777770d706572736f6e65656c736e6574026e6c0000010001 760880000001000000020002037777770d706572736f6e65656c736e6574026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c01ec01000020001000151800006036e7332c036c03200010001000151800004d4ccd865c04d000100010001518000045054ec34 26797 9d6528000001000000010000024e4c0000060001095f6b65726265726f73045f746370055a5745524d024e4c000021000100000258001c0000006400580b7a7765726d736572766572055a5745524d024e4c00 9d65a8040000000000000000 26798 000000007002faf0467900000204056401010402 000080010000000000000000 26799 b6062f415010fd5c8b290000000000000000 b606af440000000000000000 26800 b6062f415018fd5c71600000008f9dd8000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcc8403c4e480003000000304e544c4d535350000100000097b208e0050005002b0000000b000b00200000005a5745524d5345525645525a5745524d0000 b606af440000000000000000 26801 d5040000000100000000000005736f6c61720776616e74616765026e6c0000010001 d5048000000100000002000205736f6c61720776616e74616765026e6c0000010001c01200020001000151800017036e733110736361726c65742d696e7465726e6574c01ac01200020001000151800006036e7332c032c02e00010001000151800004d5ccc302c05100010001000151800004d5ccc303 26802 4fd300000001000000000000037777770677656263616d026e6c0000010001 4fd380000001000000020002037777770677656263616d026e6c0000010001c01000020001000151800010036e733209756e6c696d69746564c017c0100002000100015180000d036e733206787334616c6cc017c02b00010001000151800004c26d9afac04700010001000151800004c26d0963 26803 7a4f00000001000000000000037777770c6c696d62757267776f6e656e026e6c0000010001 7a4f80000001000000020002037777770c6c696d62757267776f6e656e026e6c0000010001c0100002000100015180000b036e73310477656233c01dc01000020001000151800006036e7332c035c03100010001000151800004d436240ec04800010001000151800004c2b262ef 26804 ec1200000001000000000000046d61696c06626569736569026e6c0000010001 ec1280000001000000020002046d61696c06626569736569026e6c0000010001c0110002000100015180000f026e7309656174736572766572c018c01100020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 26805 25f100000001000000000000037777770c6d6174757265736572766572026e6c0000010001 25f180000001000000020000037777770c6d6174757265736572766572026e6c0000010001c0100002000100015180000d036e7331046564697302617400c01000020001000151800006036e7332c035 26806 b6062f4f5011fd4e8a970000000000000000 b606af440000000000000000 26807 000000007002faf0b12900000204056401010402 000080010000000000000000 26808 6700000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 6700800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26809 190000000001000000000000036e73340767617574656e67026e6c0000010001 190080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26810 b6062f505010fd4e8a960000000000000000 b606af540000000000000000 26811 ded200000001000000000000036e733209756e6c696d69746564026e6c00001c0001 ded280000001000000020002036e733209756e6c696d69746564026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000d036e733206787334616c6cc01ac00c00010001000151800004c26d9afac03c00010001000151800004c26d0963 26812 0d4b00000001000000000000036d783103696166026e6c0000010001 0d4b80000001000000020002036d783103696166026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c028000100010001518000045059e040c03a000100010001518000045059ee03 26813 9780000000010000000000000667776d61696c0573746f6173026e6c0000010001 9780800000010000000300020667776d61696c0573746f6173026e6c0000010001c01300020001000151800006036e7373c013c01300020001000151800006036e7361c013c01300020001000151800010036e73320673697465347503636f6d00c02d00010001000151800004c057c501c03f00010001000151800004c057c401 26814 ff4300000001000000000000036e733209756e6c696d69746564026e6c0000260001 ff4380000001000000020002036e733209756e6c696d69746564026e6c0000260001c01000020001000151800002c00cc0100002000100015180000d036e733206787334616c6cc01ac00c00010001000151800004c26d9afac03c00010001000151800004c26d0963 26815 849300000001000000000000047777773309616c7465726e617465026e6c0000010001 849380000001000000020002047777773309616c7465726e617465026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c01bc01100020001000151800006036e7332c033c02f00010001000151800004d43d0f08c04d00010001000151800004d43d19e2 26816 ebdd00000001000000000000036e73310663617374656c026e6c0000260001 ebdd80000001000000020002036e73310663617374656c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3558244c03900010001000151800004c3558245 26817 b6071d2d5010fd5c07ed0000000000000000 b6079d240000000000000000 26818 b6071d2d5018fd5c32830000008f5a7a000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcc8403c4e480003000000304e544c4d535350000100000097b208e0050005002b0000000b000b00200000005a5745524d5345525645525a5745524d0000 b6079d240000000000000000 26819 048800000001000000000000056d7468636f026e6c0000ff0001 048880000001000000020000056d7468636f026e6c0000ff0001c00c00020001000151800012036e73330b70656c6963616e2d696374c012c00c00020001000151800006036e7335c02a 26820 730b000000010000000000000866696c6167656e74026e6c00000f0001 730b800000010000000200020866696c6167656e74026e6c00000f0001c00c00020001000151800012036e73310b696e7465727374726f6f6dc015c00c00020001000151800006036e7332c02dc0290001000100015180000450558121c04700010001000151800004d58141c4 26821 39a000000001000000000000024e530743495354524f4e024e4c0000010001 39a080000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 26822 1cd000000001000000000000034e53320743495354524f4e024e4c0000010001 1cd080000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 26823 15c700000001000000000000036e733503777873026e6c0000010001 15c780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 26824 b6071d3b5011fd4e075b0000000000000000 b6079d340000000000000000 26825 df0300000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c00001c0001 df0380000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 26826 dc300000000100000000000005646e732d31056c61646f74026e6c0000010001 dc308000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26827 977000000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c0000260001 977080000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 26828 5b4d0000000100000000000005646e732d32056c61646f74026e6c0000010001 5b4d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26829 cff000000001000000000000037777771173746174757371756f2d66616e636c7562026e6c0000010001 cff080000001000000020000037777771173746174757371756f2d66616e636c7562026e6c0000010001c01000020001000151800013036e733109736974652d7061726b03636f6d00c0100002000100015180000f036e7334087a6f6e6565646974c044 26830 851300000001000000000000036e733503777873026e6c0000260001 851380000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 26831 000000007002faf08f9300000204056401010402 000080010000000000000000 26832 b6071d3c5010fd4e075a0000000000000000 b6079d340000000000000000 26833 30e900000001000000000000034e533207535552464e4554024e4c0000010001 30e980000001000000040003034e533207535552464e4554024e4c0000010001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a65 26834 09800000000100000000000007626575727a656e036a656d026e6c0000010001 09808000000100000002000207626575727a656e036a656d026e6c0000010001c0140002000100015180000e036e73310765766964656e74c018c01400020001000151800006036e7332c030c02c00010001000151800004c36d19c4c04600010001000151800004c36d1942 26835 e48c00000001000000000000037777770e657474656e2d746563686e69656b026e6c0000010001 e48c80000001000000020002037777770e657474656e2d746563686e69656b026e6c0000010001c01000020001000151800002c010c0100002000100015180000d04646e733105692d702d64c01fc01000010001000151800004d912405fc04100010001000151800004d9124003 26836 0bef00000001000000000000034e533207535552464e4554024e4c0000260001 0bef80000001000000040003034e533207535552464e4554024e4c0000260001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a65 26837 b607bf705010fd5c44130000000000000000 26838 b607bf705018fd5c5fe70000008f693c000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcc8403c4e480003000000304e544c4d535350000100000097b208e0050005002b0000000b000b00200000005a5745524d5345525645525a5745524d0000 26839 43140000000100000000000003777777097365786465616c6572026e6c0000010001 43148000000100000002000203777777097365786465616c6572026e6c0000010001c01000020001000151800010036e7331096e65746e6174696f6ec01ac01000020001000151800006036e7332c032c02e00010001000151800004d5efb105c04a00010001000151800004505faa0a 26840 b607bf7e5011fd4e43810000000000000000 26841 acca000000010000000000000457454232037777770b77656e6e656b65736e6574026e6c0000010001 acca840300010000000100000457454232037777770b77656e6e656b65736e6574026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 26842 c38a00000001000000000000087370636c69636b730c706167696e61626568656572026e6c0000010001 c38a80000001000000020002087370636c69636b730c706167696e61626568656572026e6c0000010001c0150002000100015180000e026e7308696e7465722d6974c022c01500020001000151800006036e7332c039c03600010001000151800004d5c4385ac05000010001000151800004d5c4385b 26843 32980000000100000000000008667265656c726572026e6c00000f0001 32988403000100000001000008667265656c726572026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 26844 dccc000000010000000000000672656c6179310b7669616e6574776f726b73026e6c0000010001 dccc800000010000000200020672656c6179310b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 26845 b607bf7f5010fd4e43800000000000000000 26846 abb00000000100000000000004456e6369026e6c00000f0001 abb08000000100000002000004456e6369026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c030 26847 c115000000010000000000000369736f026e6c0000010001 c115800000010000000200020369736f026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 26848 2b4f000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 2b4f800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 26849 d88b0000000100000000000004574542320b77656e6e656b65736e6574026e6c0000010001 d88b8403000100000001000004574542320b77656e6e656b65736e6574026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 26850 0774000000010000000000000b7374617274706167696e61026e6c00000f000100 0774800000010000000300030b7374617274706167696e61026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 26851 a111000000010000000000000a707265756e696e676572026e6c00000f0001 a111800000010000000200000a707265756e696e676572026e6c00000f0001c00c0002000100015180000e05646e732d31056c61646f74c017c00c0002000100015180000805646e732d32c031 26852 18e800000001000000000000036e7331026975026e6c0000010001 18e880000001000000020002036e7331026975026e6c0000010001c0100002000100015180000704646e7330c010c0100002000100015180000704646e7331c010c02700010001000151800004d91a7002c03a00010001000151800004d91a7103 26853 30250000000100000000000005706f6c656d026e6c00000f0001 30258000000100000002000205706f6c656d026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c012c00c00020001000151800006036e7332c02ac02600010001000151800004d43d0f08c04400010001000151800004d43d19e2 26854 c959000000010000000000000b66756e73756c74616e6379026e6c0000ff0001 c959800000010000000200000b66756e73756c74616e6379026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 26855 528b00000001000000000000036d7834057669727475026e6c0000010001 528b80000001000000020002036d7834057669727475026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02a00010001000151800004d9726102c03c00010001000151800004d58141c4 26856 c8950000000100000000000006636861726973026e6c00000f0001 c8958000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 26857 938a00000001000000000000037777770e76726f7577656e76616e64616167026e6c0000010001 938a80000001000000020000037777770e76726f7577656e76616e64616167026e6c0000010001c01000020001000151800013036e7331096e616d657365727665036e657400c01000020001000151800006036e7332c037 26858 bba600000001000000000000106472756b6b6572696a2d666f6b6b6572026e6c0000ff0001 bba684030001000000010000106472756b6b6572696a2d666f6b6b6572026e6c0000ff0001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 26859 35a0000000010000000000000377777707766f6c64657273026e6c0000010001 35a0800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26860 968700000001000000000000037777770a72696a7a656e62757267026e6c0000010001 968780000001000000020000037777770a72696a7a656e62757267026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01bc0100002000100015180000805646e732d32c035 26861 21cd0000000100000000000003777777046476686e026e6c0000010001 21cd8000000100000003000303777777046476686e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004c1ad573dc04600010001000151800004c1ad573ec05800010001000151800004d5880089 26862 8a1500000001000000000000037777770d67656f6e73636872696a766572026e6c0000010001 8a1580000001000000020002037777770d67656f6e73636872696a766572026e6c0000010001c0100002000100015180000a036e733103647768c01ec01000020001000151800006036e7332c036c03200010001000151800004d5efb308c04800010001000151800004d5efb303 26863 9be7000000010000000000000e6d6d667472616e73706172616e74026e6c00000f0001 9be7800000010000000200020e6d6d667472616e73706172616e74026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01bc00c00020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 26864 82f10000000100000000000006736572766572026462036b766b026e6c0000010001 82f18000000100000002000206736572766572026462036b766b026e6c0000010001c0160002000100015180000d026e73076b6e6f77617265c01ac01600020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 26865 4f0a000000010000000000000377777708706c756b7261616b026e6c0000010001 4f0a800000010000000200000377777708706c756b7261616b026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 26866 754100000001000000000000036e733107626265796f6e64026e6c0000010001 754180000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 26867 a68100000001000000000000036e733107626265796f6e64026e6c00001c0001 a68180000001000000020002036e733107626265796f6e64026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 26868 bfe900000001000000000000036e733107626265796f6e64026e6c0000260001 bfe980000001000000020002036e733107626265796f6e64026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 26869 d45800000001000000000000036e733207626265796f6e64026e6c0000010001 d45880000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 26870 77a100000001000000000000036e733207626265796f6e64026e6c00001c0001 77a180000001000000020002036e733207626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 26871 4d2e00000001000000000000036e733207626265796f6e64026e6c0000260001 4d2e80000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 26872 694a000000010000000000000e36322d3137372d3232332d31343607626265796f6e64026e6c0000010001 694a800000010000000200020e36322d3137372d3232332d31343607626265796f6e64026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc037000100010001518000043eb1900bc049000100010001518000043eb19002 26873 2dac000000010000000000000377777707766f6c64657273026e6c0000010001 2dac800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26874 376a00000001000000000000037777770733736261617273026e6c0000010001 376a80000001000000020002037777770733736261617273026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c018c01000020001000151800006036e7332c030c02c000100010001518000045054f347c048000100010001518000043e94a047 26875 761400000001000000000000037777770a6b6f657273616c61726d026e6c0000010001 761480000001000000020002037777770a6b6f657273616c61726d026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c01bc01000020001000151800006036e7332c033c02f00010001000151800004d4ccd865c04a000100010001518000045054ec34 26876 46db00000001000000000000037777770366756e026e6c0000010001 46db80000001000000020001037777770366756e026e6c0000010001c0100002000100015180000a026e7304696d636fc014c01000020001000151800013036e7332097669727475616c787303636f6d00c028000100010001518000043e81810a 26877 05b2000000010000000000000377777707766f6c64657273026e6c0000010001 05b2800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 26878 656300000001000000000000046d61696c086b6a656e6e696e67026e6c0000010001 656380000001000000020000046d61696c086b6a656e6e696e67026e6c0000010001c01100020001000151800014026e730b686f6c6c616e64686f7374036e657400c0110002000100015180000f036e7333087465646f63776562c03d 26879 7bcc000000010000000000000469632d73026e6c0000ff0001 7bcc800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 26880 419e0000000100000000000003777777146175746f62656472696a6676616e73747269656e026e6c0000010001 419e8000000100000002000203777777146175746f62656472696a6676616e73747269656e026e6c0000010001c01000020001000151800010026e730a7a65656c616e646e6574c025c01000020001000151800006036e7332c03cc03900010001000151800004d473c0c1c05500010001000151800004d473c0c3 26881 519000000001000000000000037777770c706f6469756d7477656e7465026e6c0000010001 519080000001000000020000037777770c706f6469756d7477656e7465026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c034 26882 8de20000000100000000000003626d670a73696e2d6f6e6c696e65026e6c0000010001 8de28000000100000003000203626d670a73696e2d6f6e6c696e65026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 26883 c52500000001000000000000036e733307747564656c6674026e6c0000010001 c52580000001000000050005036e733307747564656c6674026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c03e0001000100015180000482a1b441c0500001000100015180000482a12111c0650001000100015180000482a1bc8cc07e00010001000151800004c0576a65 26884 180800000001000000000000036e733307747564656c6674026e6c0000260001 180880000001000000050005036e733307747564656c6674026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c03e0001000100015180000482a1b441c0500001000100015180000482a12111c0650001000100015180000482a1bc8cc07e00010001000151800004c0576a65 26885 79570000000100000000000005646e732d31056c61646f74026e6c0000010001 79578000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26886 74f100000001000000000000036e73320469636d63026e6c0000010001 74f180000001000000020002036e73320469636d63026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc029000100010001518000043e643805c00c000100010001518000043e643806 26887 860300000001000000000000026e730469636d63026e6c0000010001 860380000001000000020002026e730469636d63026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043e643805c036000100010001518000043e643806 26888 2d5b0000000100000000000005646e732d32056c61646f74026e6c0000010001 2d5b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26889 cbe500000001000000000000037777770b6e65756b736c65746a6573026e6c00001c0001 cbe580000001000000020002037777770b6e65756b736c65746a6573026e6c00001c0001c0100002000100015180000f036e73310861746c616e74697ac01cc01000020001000151800006036e7332c034c03000010001000151800004d5efa011c04b00010001000151800004d5efa075 26890 9dc800000001000000000000066f6577616d73026e6c0000010001 9dc880000001000000020002066f6577616d73026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 26891 50f30000000100000000000003777777116c616d6d6572747376616e62756572656e026e6c0000010001 50f38000000100000002000003777777116c616d6d6572747376616e62756572656e026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c039 26892 e6ee00000001000000000000056e6575726f03617a75026e6c00000f0001 e6ee80000001000000030003056e6575726f03617a75026e6c00000f0001c01200020001000151800005026e73c012c0120002000100015180000e036e733107737572666e6574c016c01200020001000151800009036e7333027575c016c02a000100010001518000048f79fe01c03b00010001000151800004c0576a65c0550001000100015180000483d31020 26893 01f6000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c00000f0001 01f6800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c00000f0001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 26894 de2c0000000100000000000004646e733107696e666f6e6574026e6c0000010001 de2c8000000100000002000204646e733107696e666f6e6574026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d4bd01c4c03b00010001000151800004d4bd7f83 26895 f2130000000100000000000004646e733207696e666f6e6574026e6c0000010001 f2138000000100000002000204646e733207696e666f6e6574026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02d00010001000151800004d4bd01c4c00c00010001000151800004d4bd7f83 26896 81f800000001000000000000037777770a73657867616c6c657279026e6c0000010001 81f880000001000000020002037777770a73657867616c6c657279026e6c0000010001c01000020001000151800009036e733102696fc01bc01000020001000151800006036e7332c033c02f0001000100015180000451112102c0440001000100015180000451112202 26897 24a8000000010000000000000677616e61646f026e6c00000f0001 24a8800000010000000200010677616e61646f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c013c04000010001000151800004c2860043 26898 cf0600000001000000000000037777771061636164656d69637472616e73666572026e6c0000010001 cf0680000001000000020002037777771061636164656d69637472616e73666572026e6c0000010001c0100002000100015180000b026e7305706c616e74c021c01000020001000151800006036e7332c038c03500010001000151800004d59f0037c04c00010001000151800004d59f0046 26899 3a7300000001000000000000136163636f756e74616e74736b6f656c656d616e026e6c0000010001 3a7380000001000000020000136163636f756e74616e74736b6f656c656d616e026e6c0000010001c00c00020001000151800017036e73310d6373732d6970636f6e6e65637403636f6d00c00c00020001000151800006036e7332c038 26900 37d00000000100000000000003657a68026e6c0000010001 37d08000000100000002000103657a68026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c0240001000100015180000489ae8f03 26901 9aa20000000100000000000004706f303703777873026e6c0000ff0001 9aa28000000100000003000304706f303703777873026e6c0000ff0001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 26902 73f60000000100000000000003777777066b637a6f7973026e6c0000010001 73f68000000100000003000303777777066b637a6f7973026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c017c0100002000100015180000e0b6e616d6573657276657232c037c0100002000100015180000e0b6e616d6573657276657233c037c02b0001000100015180000451ad2020c04f0001000100015180000451ad2021c0690001000100015180000452c049aa 26903 46b40000000100000000000006696d616765730777656262656174026e6c0000010001 46b48000000100000002000006696d616765730777656262656174026e6c0000010001c0130002000100015180000f036e7331087765622d62656174c01bc01300020001000151800006036e7332c033 26904 3d8a28000001000000010000026e6c0000060001095f6b65726265726f73045f7564700c7363616e6469747372763031026e6c00002100010000025800260000006400580e7363616e6469742d7365727665720c7363616e6469747372763031026e6c00 3d8aa8040000000000000000 26905 7c2600000001000000000000046c6f76650a70617274792d73697465026e6c0000010001 7c2680000001000000020000046c6f76650a70617274792d73697465026e6c0000010001c01100020001000151800011036e73310774647364617461036e657400c01100020001000151800006036e7332c034 26906 23bf0000000100000000000006776468303131066e7434616c6c026e6c0000010001 23bf8000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 26907 12180000000100000000000005646e732d31056c61646f74026e6c0000010001 12188000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26908 19820000000100000000000005646e732d32056c61646f74026e6c0000010001 19828000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26909 0b26000000010000000000000c6f6e7477657270666f72756d026e6c0000010001 0b26800000010000000200020c6f6e7477657270666f72756d026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c019c00c00020001000151800006036e7332c030c02d00010001000151800004d9aa2042c04600010001000151800004d9aa2c06 26910 0000000070024000aa5b0000020405b401010402 000080010000000000000000 26911 b4eb0000000100000000000006736166657873026e6c0000010001 b4eb8000000100000002000006736166657873026e6c0000010001c00c00020001000151800013026e730a6d696e64737769746368036e657400c00c0002000100015180000d036e733206776964657873c035 26912 b6099d2a501044707f6b0000000000000000 26913 b6099d2a50184470d042000000994920000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda4403c1f2400030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000 26914 000000007002faf04e890000020405b401010402 000080010000000000000000 26915 10c900000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001 10c984030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001c03f00060001000038400036026e730f646f6d61696e2d7265676973747279c03f0a686f73746d6173746572c0560bf1e540000070800000384000278d0000003840 26916 8ccb000000010000000000000c6d65676170726f7669646572026e6c0000010001 8ccb800000010000000300030c6d65676170726f7669646572026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02d0001000100015180000450474002c03e0001000100015180000450474102c05000010001000151800004d943ee57 26917 08e000000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001 08e084030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001c03f00060001000038400036026e730f646f6d61696e2d7265676973747279c03f0a686f73746d6173746572c0560bf1e540000070800000384000278d0000003840 26918 3a1d00000001000000000000056b72656674026e6c00000f0001 3a1d80000001000000030001056b72656674026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 26919 b6099d38501144627ecf0000000000000000 26920 59030000000100000000000003777777116d6f6465726e656c656374726f6e696373026e6c0000010001 59038000000100000002000003777777116d6f6465726e656c656374726f6e696373026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c022c0100002000100015180000704686e7331c03b 26921 99fb000000010000000000000e6e6f786f6e737461696e6c657373026e6c00000f0001 99fb800000010000000200000e6e6f786f6e737461696e6c657373026e6c00000f0001c00c00020001000151800012036e73310b776f726c646f6e6c696e65c01bc00c00020001000151800006036e7332c033 26922 0000000070024000c30f0000020405b401010402 000080010000000000000000 26923 386400000001000000000000036d6274026e6c0000010001 386480000001000000020002036d6274026e6c0000010001c00c0002000100015180000b026e7305706c616e74c010c00c00020001000151800006036e7332c027c02400010001000151800004d59f0037c03b00010001000151800004d59f0046 26924 b6099d39501044627ece0000000000000000 26925 e15100000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001 e15184030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001c03f00060001000038400036026e730f646f6d61696e2d7265676973747279c03f0a686f73746d6173746572c0560bf1e540000070800000384000278d0000003840 26926 b60a3e1850104470f7300000000000000000 b60abe140000000000000000 26927 5c31000000010000000000000561686f7574026e6c00000f0001 5c31800000010000000200020561686f7574026e6c00000f0001c00c0002000100015180000c04646e7331047369706fc012c00c0002000100015180000704646e7332c02bc02600010001000151800004d4cce65bc03e00010001000151800004d4cce660 26928 eeba0000000100000000000003777777047a6f7973026e6c0000010001 eeba8000000100000003000303777777047a6f7973026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c015c0100002000100015180000e0b6e616d6573657276657232c035c0100002000100015180000e0b6e616d6573657276657233c035c0290001000100015180000451ad2020c04d0001000100015180000451ad2021c0670001000100015180000452c049aa 26929 507a00000001000000000000037777770f6d6f6e746573736f72692d7a756964026e6c0000010001 507a84030001000000010000037777770f6d6f6e746573736f72692d7a756964026e6c0000010001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 26930 b60a3e1850184470acd800000099e550000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda4403c1f2400030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000 b60abe140000000000000000 26931 6c7600000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001 6c7684030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573044e545331024e4c0000060001c03f00060001000038400036026e730f646f6d61696e2d7265676973747279c03f0a686f73746d6173746572c0560bf1e540000070800000384000278d0000003840 26932 15da00000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 15da80000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 26933 76690000000100000000000003777777046174616b026e6c0000010001 76698000000100000002000003777777046174616b026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c02c 26934 505500100001000000000001036e733207737572666e6574026e6c00000100010000290800000080000000 505580000001000000040004036e733207737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a650000291000000000000000 26935 b60a3e2650114462f6940000000000000000 b60abe240000000000000000 26936 0000000070024000c42f0000020405b401010402 000080010000000000000000 26937 902d0000000100000000000003777777046e6f6261026e6c0000010001 902d8000000100000002000203777777046e6f6261026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 26938 b60a3e2750104462f6930000000000000000 b60abe240000000000000000 26939 820c00000001000000000000037777770a64757463687465656e73026e6c0000010001 820c80000001000000020001037777770a64757463687465656e73026e6c0000010001c0100002000100015180000a026e7304696d636fc01bc01000020001000151800013036e7332097669727475616c787303636f6d00c02f000100010001518000043e81810a 26940 c03200000001000000000000086469766964697669026e6c00000f0001 c03280000001000000030001086469766964697669026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 26941 b60b1d975010447018d10000000000000000 b60b9d940000000000000000 26942 b60b1d97501844708c99000000992530000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403acda5403c1f2500030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000005343414e4449542d5345525645525343414e44495453525630310000 b60b9d940000000000000000 26943 7b320010000100000000000106787334616c6c026e6c0000ff00010000290800000080000000 7b328000000100000003000306787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 26944 20f10000000100000000000003777777076167696e6e6574026e6c0000010001 20f18403000100000001000003777777076167696e6e6574026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 26945 b60b1da55011446218350000000000000000 b60b9da40000000000000000 26946 b70e0000000100000000000005646e732d31056c61646f74026e6c0000010001 b70e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26947 b60b1da65010446218340000000000000000 b60b9da40000000000000000 26948 b70f0000000100000000000005646e732d32056c61646f74026e6c0000010001 b70f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26949 1a5500000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 1a5580000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 26950 9a2b00000001000000000000036e7334096b6162656c666f6f6e026e6c0000010001 9a2b80000001000000020002036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f03 26951 011d00000001000000000000036e73330767617574656e67026e6c0000010001 011d80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26952 292000000001000000000000036e73340767617574656e67026e6c0000010001 292080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26953 acdc00000001000000000000037777770a70757a656c73706f7274026e6c0000010001 acdc84030001000000010000037777770a70757a656c73706f7274026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 26954 79b50000000100000000000008726f636864616c65026e6c00000f0001 79b58000000100000002000108726f636864616c65026e6c00000f0001c00c00020001000151800013046b7261620b70617472696d6f6e69756dc015c00c0002000100015180000d036e7334036b706e036e657400c02900010001000151800004c2970a32 26955 c1ec000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 c1ec800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26956 b5760000000100000000000006766f6f727374026e6c00000f0001 b5768000000100000002000006766f6f727374026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 26957 d1bf0000000100000000000003777777066d6564776562026e6c0000010001 d1bf8000000100000003000303777777066d6564776562026e6c0000010001c0100002000100015180000d026e73077072657a656e74c017c01000020001000151800006036e7332c02ec01000020001000151800006036e7333c02ec02b000100010001518000043ec07802c044000100010001518000043ec07803c05600010001000151800004d5541f90 26958 013000000001000000000000036e73330767617574656e67026e6c0000010001 013080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26959 3a0f0000000100000000000008626f6479636f7465026e6c00000f0001 3a0f8000000100000002000208626f6479636f7465026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 26960 980100000001000000000000026373027675026e6c00000f0001 980180000001000000030003026373027675026e6c00000f0001c00f00020001000151800005026e73c00fc00f000200010001518000070473746172c00cc00f0002000100015180000e036e733107737572666e6574c012c0260001000100015180000482258104c03700010001000151800004c01fe72ac04a00010001000151800004c0576a65 26961 d79b000000010000000000000377777706313763617368026e6c0000010001 d79b800000010000000200020377777706313763617368026e6c0000010001c01000020001000151800010036e733109756e69736572766572c017c01000020001000151800006036e7332c02fc02b00010001000151800004c3454b03c04700010001000151800004d119a2fa 26962 dec20000000100000000000006787334616c6c026e6c0000ff0001 dec28000000100000003000206787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 26963 dafb00000001000000000000036e733103757063026e6c0000010001 dafb80000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 26964 293f00000001000000000000036e73330767617574656e67026e6c0000010001 293f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 26965 97b00000000100000000000003696772026e6c0000ff0001 97b08000000100000002000203696772026e6c0000ff0001c00c0002000100015180000d0a6c65757665686176656ec00cc00c0002000100015180000d0a64656c6673686176656ec00cc024000100010001518000043e2d5e0dc03d000100010001518000043e2d5e82 26966 6f65000000010000000000000e70657465722d627275696e696e67026e6c0000010001 6f65800000010000000200000e70657465722d627275696e696e67026e6c0000010001c00c00020001000151800010036e7331066a6f6865636f036e657400c00c00020001000151800006036e7332c033 26967 8003000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 8003800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26968 bd95000000010000000000000a656d6561736d7470303103616f6e026e6c00001c0001 bd95800000010000000200010a656d6561736d7470303103616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26969 19aa000000010000000000000a656d6561736d7470303203616f6e026e6c0000010001 19aa800000010000000200010a656d6561736d7470303203616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26970 5bd7000000010000000000000a656d6561736d7470303103616f6e026e6c0000260001 5bd7800000010000000200010a656d6561736d7470303103616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26971 5746000000010000000000000a656d6561736d7470303203616f6e026e6c00001c0001 5746800000010000000200010a656d6561736d7470303203616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26972 fac4000000010000000000000a656d6561736d7470303203616f6e026e6c0000260001 fac4800000010000000200010a656d6561736d7470303203616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26973 e524000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 e524800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 26974 222e000000010000000000000377777714696e7465726e657467656d65656e746567696473026e6c0000010001 222e800000010000000200020377777714696e7465726e657467656d65656e746567696473026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c025c01000020001000151800006036e7332c03dc03900010001000151800004d90867fec05800010001000151800004c1ad2bfe 26975 ecaa00000001000000000000037777770b686f66706c65696e63616d026e6c0000010001 ecaa80000001000000020002037777770b686f66706c65696e63616d026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01cc01000020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 26976 397800000001000000000000026e73076e656473746174026e6c0000010001 397880000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 26977 32de0000000100000000000003706f70036f6361026e6c0000010001 32de8000000100000002000003706f70036f6361026e6c0000010001c0100002000100015180000e036e73320464797873036e657400c01000020001000151800006036e7331c02c 26978 11a100000001000000000000036e733207737572666e6574026e6c0000010001 11a180000001000000040003036e733207737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a65 26979 f4e7000000010000000000000f426f6572486172746f67486f6f6674026e6c00001c0001 f4e7800000010000000200000f426f6572486172746f67486f6f6674026e6c00001c0001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 26980 9c8d0000000100000000000003777777087374617473626f78026e6c0000010001 9c8d8000000100000003000203777777087374617473626f78026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 26981 2371000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 2371800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 26982 1f19000000010000000000000c737370616d7374657264616d026e6c00001c0001 1f19800000010000000200020c737370616d7374657264616d026e6c00001c0001c00c00020001000151800014036e73310d6d74622d736f6c7574696f6e73c019c00c00020001000151800006036e7332c031c02d00010001000151800004d5852719c04d00010001000151800004d5852714 26983 b7120000000100000000000005646e732d31056c61646f74026e6c0000010001 b7128000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26984 37c300100001000000000001036e73310974656c656b6162656c026e6c00000100010000290800000080000000 37c380000001000000020003036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d45344830000291000000000000000 26985 422700100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000080000000 422780000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 26986 b7130000000100000000000005646e732d32056c61646f74026e6c0000010001 b7138000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 26987 6d0600000001000000000000057468656d61026e6c0000ff0001 6d0680000001000000030002057468656d61026e6c0000ff0001c00c0002000100015180000e036e7331076c656374726963c012c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02ac02600010001000151800004c297a082c04000010001000151800004c297a083 26988 725f00000001000000000000036e7333076c656374726963026e6c0000010001 725f80000001000000020002036e7333076c656374726963026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c297a082c03e00010001000151800004c297a083 26989 71ad00000001000000000000036e7333076c656374726963026e6c00001c0001 71ad80000001000000020002036e7333076c656374726963026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c297a082c03e00010001000151800004c297a083 26990 aefb000000010000000000000377777707616c6c6f646f78026e6c0000010001 aefb800000010000000200000377777707616c6c6f646f78026e6c0000010001c0100002000100015180000f036e733105726f6f647303636f6d00c01000020001000151800006036e7332c030 26991 ff8000000001000000000000037777770e647574636864656d6f6372616379026e6c0000010001 ff8080000001000000020002037777770e647574636864656d6f6372616379026e6c0000010001c0100002000100015180000c036e7331056d61786573c01fc01000020001000151800006036e7332c037c033000100010001518000045045402ec04b000100010001518000045045402f 26992 395300100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000000000000 395380000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 26993 02900000000100000000000004616a6178066e696b686566026e6c0000010001 02908000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 26994 1e820000000100000000000003777777036a7762026e6c0000010001 1e828000000100000003000203777777036a7762026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c014c01000020001000151800006036e7332c02cc01000020001000151800012036e7333086c65617365776562036f726700c028000100010001518000043ed44079c043000100010001518000043ed4407a 26995 35d400000001000000000000026e73027575026e6c0000010001 35d480000001000000040004026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 26996 0d3800000001000000000000036e7332027575026e6c0000010001 0d3880000001000000040004036e7332027575026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c013c01000020001000151800006036e7333c010c0270001000100015180000483d30405c00c0001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 26997 23f40000000100000000000008646174616261736506717569726b79026e6c0000010001 23f48000000100000002000008646174616261736506717569726b79026e6c0000010001c01500020001000151800014046e733031096772616669782d697303636f6d00c01500020001000151800007046e733033c035 26998 f71f0000000100000000000004777777310a63656e747265686f6c64026e6c0000010001 f71f8000000100000002000204777777310a63656e747265686f6c64026e6c0000010001c0110002000100015180001104646e733109696e7465726f757465c01cc0110002000100015180000704646e7332c035c03000010001000151800004d4173f3ec04d00010001000151800004d4173f3d 26999 c35500000001000000000000046d61696c03736e72026e6c0000010001 c35580000001000000020002046d61696c03736e72026e6c0000010001c0110002000100015180000e036e7331076c656374726963c015c01100020001000151800006036e7332c02dc02900010001000151800004c297a082c04300010001000151800004c297a083 27000 4da300000001000000000000046d61696c03736e72026e6c00001c0001 4da380000001000000020002046d61696c03736e72026e6c00001c0001c0110002000100015180000e036e7331076c656374726963c015c01100020001000151800006036e7332c02dc02900010001000151800004c297a082c04300010001000151800004c297a083 27001 a1660000000100000000000005736d74703203687661026e6c0000010001 a1668000000100000003000305736d74703203687661026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000e036e733107737572666e6574c016c01200020001000151800006036e7332c012c02a00010001000151800004915c1202c03b00010001000151800004c0576a65c05500010001000151800004915c2102 27002 08560000000100000000000007626c616764656e026e6c00000f0001 08568000000100000002000007626c616764656e026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 27003 bbb3000000010000000000000d6175746f74656c656772616166026e6c0000010001 bbb3800000010000000200000d6175746f74656c656772616166026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c032 27004 262600000001000000000000046e733032066368656c6c6f026e6c0000010001 262680000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 27005 131300000001000000000000036e73310974656c656b6162656c026e6c0000010001 131380000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 27006 34be0000000100000000000008616473657276657206776562616473026e6c0000010001 34be8000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 27007 2a67000000010000000000000b6e69657577736272696566176879706f746865656b72656e74656f7665727a69636874026e6c0000010001 2a67800000010000000200000b6e69657577736272696566176879706f746865656b72656e74656f7665727a69636874026e6c0000010001c01800020001000151800015036e73370b686f7374696e67776f7278036e657400c01800020001000151800006036e7338c048 27008 bd2200000001000000000000057468656d61026e6c0000ff0001 bd2280000001000000030002057468656d61026e6c0000ff0001c00c0002000100015180000e036e7331076c656374726963c012c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02ac02600010001000151800004c297a082c04000010001000151800004c297a083 27009 d18a000000010000000000001c6269626c696f746865656b6265726b656c656e726f64656e72696a73026e6c0000010001 d18a800000010000000200011c6269626c696f746865656b6265726b656c656e726f64656e72696a73026e6c0000010001c00c0002000100015180000f026e730970726f6269626c696fc029c00c00020001000151800006036e7331c040c03d00010001000151800004d400f3ce 27010 462700000001000000000000046e733032066368656c6c6f026e6c0000010001 462780000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 27011 f3de000000010000000000001133646b75697065726265727440686f6d65026e6c0000010001 f3de840300010000000100001133646b75697065726265727440686f6d65026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 27012 094a00000001000000000000036e73340767617574656e67026e6c0000010001 094a80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27013 26810000000100000000000003626c3102626c06787334616c6c026e6c0000010001 26818000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27014 4e6900000001000000000000036e7331096d6173746572646e73026e6c0000010001 4e6980000001000000020002036e7331096d6173746572646e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f347c03c000100010001518000043e94a047 27015 5c7a00000001000000000000036e7332096d6173746572646e73026e6c0000010001 5c7a80000001000000020002036e7332096d6173746572646e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054f347c00c000100010001518000043e94a047 27016 cde500000001000000000000037777770b6b656c6c7966616d696c79026e6c0000010001 cde580000001000000020002037777770b6b656c6c7966616d696c79026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 27017 fe3700000001000000000000076d61696c67773107626f6f6d2d6974026e6c00000f0001 fe3780000001000000020002076d61696c67773107626f6f6d2d6974026e6c00000f0001c01400020001000151800010036e733109696e74657277696a73c01cc01400020001000151800006036e7332c034c03000010001000151800004c323885bc04c00010001000151800004d4bb3c5c 27018 8e1d000000010000000000000c646576657274616b6b696e67026e6c00000f0001 8e1d800000010000000200020c646576657274616b6b696e67026e6c00000f0001c00c00020001000151800013036e73310c636172647365727669636573c019c00c00020001000151800006036e7332c031c02d00010001000151800004d5c9baf3c04c00010001000151800004d5c9baf4 27019 081d00000001000000000000036e733109666972737466696e64026e6c0000010001 081d80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27020 366800000001000000000000036e733209666972737466696e64026e6c0000010001 366880000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27021 7375000000010000000000000462737172026e6c0000010001 7375800000010000000200000462737172026e6c0000010001c00c00020001000151800013026e730a6d696e64737769746368036e657400c00c0002000100015180000d036e733206776964657873c033 27022 e9a100000001000000000000037777770c6a6f6e67656d6569736a6573026e6c0000010001 e9a180000001000000020002037777770c6a6f6e67656d6569736a6573026e6c0000010001c0100002000100015180000a026e730469636d63c01dc01000020001000151800006036e7332c034c031000100010001518000043e643805c047000100010001518000043e643806 27023 77190000000100000000000003777777086c65747373746174026e6c0000010001 77198000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 27024 26a000000001000000000001026e73067a6f6e6e6574026e6c00000100010000290500000000000000 26a080000001000000020003026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa02020000291000000000000000 27025 1a3c00000001000000000000036e7332036f6c6d026e6c0000010001 1a3c80000001000000020002036e7332036f6c6d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c3126e21c00c000100010001518000043e3ab22a 27026 0d1e00000001000000000000036e7332036f6c6d026e6c0000260001 0d1e80000001000000020002036e7332036f6c6d026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c3126e21c00c000100010001518000043e3ab22a 27027 a253000000010000000000000f6269626c696f746865656b62657374026e6c0000010001 a253800000010000000200020f6269626c696f746865656b62657374026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c01cc00c00020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 27028 a26c000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 a26c800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27029 80bf0000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 80bf8000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 27030 56ef00000001000000000000036d783107626265796f6e64026e6c0000010001 56ef80000001000000020002036d783107626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c000100010001518000043eb1900bc03e000100010001518000043eb19002 27031 2f2900000001000000000000046d61696c077965736f726e6f026e6c00001c0001 2f2980000001000000030002046d61696c077965736f726e6f026e6c00001c0001c0110002000100015180000d036e733106776964657873c019c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 27032 9694000000010000000000000377777708636f6e2d6e656374026e6c0000010001 9694800000010000000200000377777708636f6e2d6e656374026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c043 27033 53ca0000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 53ca8000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 27034 54fc0000000100000000000004726f6f7307656e64656d6f6c026e6c0000260001 54fc8000000100000002000004726f6f7307656e64656d6f6c026e6c0000260001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 27035 fd0400000001000000000000037777770b6164736c637261776c6572026e6c0000010001 fd0484030001000000010000037777770b6164736c637261776c6572026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 27036 3b6b00000001000000000000036e733109666972737466696e64026e6c0000010001 3b6b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27037 17bf000000010000000000000377777709707a7369676e61616c026e6c0000010001 17bf800000010000000200020377777709707a7369676e61616c026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c01ac01000020001000151800006036e7332c031c02e00010001000151800004d453c005c04c00010001000151800004d453c006 27038 26a000000001000000000000026e73067a6f6e6e6574026e6c0000010001 26a080000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 27039 121100000001000000000000036e733209666972737466696e64026e6c0000010001 121180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27040 07c6000000010000000000000b676f6d61726b6574696e67026e6c00000f0001 07c6800000010000000300000b676f6d61726b6574696e67026e6c00000f0001c00c0002000100015180000f036e73310570616e7361036e657400c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030 27041 fb4300000001000000000000037777771361746261616e6472696a66746563686e69656b026e6c0000010001 fb4380000001000000020000037777771361746261616e6472696a66746563686e69656b026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c03e 27042 0931000000010000000000000377777711746563686e697363686b6572616d69656b026e6c0000010001 0931800000010000000200020377777711746563686e697363686b6572616d69656b026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c022c01000020001000151800006036e7332c03ac0360001000100015180000450416028c05100010001000151800004c356780c 27043 fb590000000100000000000003626c3102626c06787334616c6c026e6c0000010001 fb598000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27044 3fbd00000001000000000000037777770d766f657462616c6f6e6c696e65026e6c0000010001 3fbd80000001000000030002037777770d766f657462616c6f6e6c696e65026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 27045 5829000000010000000000000c535449524c494e474445414e026e6c0000020001 5829840300010000000100000c535449524c494e474445414e026e6c0000020001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 27046 17a400000001000000000000046370696d026e6c00000f0001 17a480000001000000020002046370696d026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 27047 739f00000001000000000000037777770a67726174697370696373026e6c0000010001 739f80000001000000020000037777770a67726174697370696373026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 27048 07fb00000001000000000000037777770677616e6e6565026e6c0000010001 07fb80000001000000020002037777770677616e6e6565026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c017c01000020001000151800006036e7332c02fc02b00010001000151800004d5c9e8c8c04b00010001000151800004d5c9e8c9 27049 129600000001000000000000106b6e7a626b72696e6762726162616e74026e6c0000010001 129680000001000000020002106b6e7a626b72696e6762726162616e74026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c01dc00c00020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 27050 37360000000100000000000003666d66026e6c00000f0001 37368000000100000003000103666d66026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 27051 14da0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 14da8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27052 0a6d0000000100000000000003626c3102626c06787334616c6c026e6c0000260001 0a6d8000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27053 eec3000000010000000000000469632d73026e6c00001c0001 eec3800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 27054 7ff90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 7ff98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27055 619800000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 619880000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27056 61490000000100000000000003626c3102626c06787334616c6c026e6c0000260001 61498000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27057 f8c100000001000000000000037777770c616263736f6c7574696f6e73026e6c0000010001 f8c180000001000000020001037777770c616263736f6c7574696f6e73026e6c0000010001c0100002000100015180000a036e733303777873c01dc01000020001000151800006036e7334c035c04700010001000151800004d5ef9a65 27058 3e1000000001000000000000036e7331046372696f026e6c0000010001 3e1080000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27059 f32000000001000000000000036e7332046372696f026e6c0000010001 f32080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27060 edf500000001000000000000037777770a72656372656174696566026e6c0000010001 edf580000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 27061 2ec900000001000000000000036e7335046372696f026e6c0000010001 2ec980000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27062 44e900000001000000000000036e7336046372696f026e6c0000010001 44e980000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27063 3a62000000010000000000000377777703776562026e6c0000010001 3a62800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 27064 ed1400000001000000000000036e7331046372696f026e6c0000010001 ed1480000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27065 e99f00000001000000000000036e7332046372696f026e6c0000010001 e99f80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27066 8cbb00000001000000000000036e7335046372696f026e6c0000010001 8cbb80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27067 c0ac00000001000000000000036e7336046372696f026e6c0000010001 c0ac80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27068 463800000001000000000000086d61696c686f73740563616e6f6e026e6c0000010001 463880000001000000020001086d61696c686f73740563616e6f6e026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800014036e733202657507636f6e63657274036e657400c02f00010001000151800004c21ab811 27069 110a000000010000000000000469632d73026e6c00000f0001 110a800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 27070 41fd00000001000000000000036e73330a667574757265666c6578026e6c0000010001 41fd80000001000000030003036e73330a667574757265666c6578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f00010001000151800004d9aa122bc04100010001000151800004d9aa122cc00c00010001000151800004d9aa122d 27071 cf7e00000001000000000000037777770b706f726e6f2d66696c6d73026e6c00001c0001 cf7e80000001000000020002037777770b706f726e6f2d66696c6d73026e6c00001c0001c0100002000100015180000f036e73310861746c616e74697ac01cc01000020001000151800006036e7332c034c03000010001000151800004d5efa011c04b00010001000151800004d5efa075 27072 2bfa01000001000000000000056b6f726e6f026e6c00000f000100 2bfa85030001000000010000056b6f726e6f026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 27073 b88a00000001000000000000036d733106736f6c636f6e026e6c0000010001 b88a80000001000000030003036d733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c04200010001000151800004d42d2003c05400010001000151800004d42d2103 27074 6e520000000100000000000003777777056d61707079026e6c0000010001 6e528000000100000002000203777777056d61707079026e6c0000010001c0100002000100015180000d036e733106646e736e6574c016c01000020001000151800006036e7332c02ec02a00010001000151800004d4ccc4f2c04300010001000151800004d4ccc4f3 27075 21b300000001000000000000087970656e62757267026e6c0000010001 21b380000001000000020002087970656e62757267026e6c0000010001c00c0002000100015180000e036e733107626265796f6e64c015c00c00020001000151800006036e7332c02dc029000100010001518000043eb1900bc043000100010001518000043eb19002 27076 e9ed0000000100000000000003767763026e6c00000f0001 e9ed8000000100000002000203767763026e6c00000f0001c00c00020001000151800013076a61736d696e6508696e667261636f6dc010c00c0002000100015180000a076f6d616c6c6579c02cc02400010001000151800004c323cb41c043000100010001518000043e320fd3 27077 89bd00000001000000000000036e7331077472616e736970026e6c0000010001 89bd80000001000000020002036e7331077472616e736970026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c0001000100015180000450454343c00c0001000100015180000450454242 27078 3eda00000001000000000000036e7332077472616e736970026e6c0000010001 3eda80000001000000020002036e7332077472616e736970026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800006036e7331c010c02c0001000100015180000450454343c03e0001000100015180000450454242 27079 ee38000000010000000000000a707269736d61666f6f64026e6c00000f0001 ee38800000010000000200020a707269736d61666f6f64026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 27080 9778000000010000000000000a696e7465726d61726973026e6c0000010001 9778800000010000000200020a696e7465726d61726973026e6c0000010001c00c00020001000151800009036e7331026973c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d5852102c04000010001000151800004d5c41503 27081 661a000000010000000000000377777709626f6f72746f72656e026e6c0000010001 661a800000010000000200010377777709626f6f72746f72656e026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01ac01000020001000151800006036e7334c032c02e00010001000151800004d5c401c0 27082 ece100000001000000000000037777770c6865657a652d6c65656e6465026e6c0000010001 ece180000001000000020002037777770c6865657a652d6c65656e6465026e6c0000010001c0100002000100015180000e026e73086d656761706c6578c01dc01000020001000151800006036e7331c034c03100010001000151800004504f6101c04b00010001000151800004504f6102 27083 5c34000000010000000000000d666f746f76616e6d6965726c6f026e6c00000f0001 5c34800000010000000200000d666f746f76616e6d6965726c6f026e6c00000f0001c00c00020001000151800010036e733106686f73747337036e657400c00c00020001000151800006036e7332c032 27084 154e00000001000000000000036e696303617a75026e6c0000010001 154e80000001000000030003036e696303617a75026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800009036e7333027575c014c028000100010001518000048f79fe01c03900010001000151800004c0576a65c0530001000100015180000483d31020 27085 7f690000000100000000000005646e732d31056c61646f74026e6c0000010001 7f698000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27086 35a6000000010000000000000377777703327479026e6c0000010001 35a6800000010000000200020377777703327479026e6c0000010001c0100002000100015180000f026e7309656174736572766572c014c01000020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 27087 fe7400000001000000000000046d61696c0b636173696e7465726e6574026e6c0000010001 fe7480000001000000020000046d61696c0b636173696e7465726e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c038 27088 af4d0000000100000000000007616e746f696e65026e6c00000f0001 af4d8000000100000002000207616e746f696e65026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 27089 39b400000001000000000000066863636e6574026e6c0000ff0001 39b480000001000000020000066863636e6574026e6c0000ff0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c02e 27090 cc3600000001000000000000026e7303616d730874656c6567617465026e6c0000010001 cc3680000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 27091 f9b2000000010000000000000678787865726f0c6a6f6e67657469656e657273026e6c0000010001 f9b2800000010000000200020678787865726f0c6a6f6e67657469656e657273026e6c0000010001c01300020001000151800011026e730b6973642d686f6c6c616e64c020c01300020001000151800006036e7332c037c03400010001000151800004d5e38d0ac05100010001000151800004d5e38205 27092 aee1000000010000000000000475676170026e6c00000f0001 aee1800000010000000200020475676170026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 27093 2a4800000001000000000000037777770a73686f65737472696e67026e6c0000010001 2a4880000001000000020000037777770a73686f65737472696e67026e6c0000010001c0100002000100015180000f026e7306696e74616b7403636f6d00c01000020001000151800010036e733206776964657873036e657400 27094 b70400000001000000000000037777770a656173792d7269646572026e6c0000010001 b70480000001000000030002037777770a656173792d7269646572026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c01bc01000020001000151800006036e7332c033c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c02f00010001000151800004cf2cd7adc0500001000100015180000452c04365 27095 6b03000000010000000000000469632d73026e6c0000010001 6b03800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 27096 02ca00000001000000000000037777770662617274696d026e6c0000010001 02ca80000001000000020000037777770662617274696d026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c017c0100002000100015180000805646e732d32c031 27097 35a3000000010000000000000377777707666974616c6963026e6c0000010001 35a3800000010000000200000377777707666974616c6963026e6c0000010001c01000020001000151800015036e73310b726974736163636f756e7403636f6d00c01000020001000151800006036e7332c030 27098 cabc000000010000000000000e6b6f627573616d7374657264616d026e6c00000f0001 cabc800000010000000200000e6b6f627573616d7374657264616d026e6c00000f0001c00c0002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c00c00020001000151800015026e730f796f75726e616d65686f7374696e67c045 27099 aa6a00000001000000000000047072693103646e73067073696e6574026e6c0000010001 aa6a80000001000000030003047072693103646e73067073696e6574026e6c0000010001c01500020001000151800002c00cc015000200010001518000070470726932c011c015000200010001518000070470726933c011c00c000100010001518000049a0ff9a6c03e000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 27100 e62800000001000000000000047072693303646e73067073696e6574026e6c0000010001 e62880000001000000030003047072693303646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c01500020001000151800002c00cc030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac00c000100010001518000049a0ff9ae 27101 c56e00000001000000000000047072693203646e73067073696e6574026e6c0000010001 c56e80000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 27102 35e000000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 35e080000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 27103 e3b000000001000000000000096b617070612d677366026e6c00000f0001 e3b080000001000000030003096b617070612d677366026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c016c00c000200010001518000070470726932c02fc00c000200010001518000070470726933c02fc02a000100010001518000049a0ff9a6c048000100010001518000049a0ff9aac05b000100010001518000049a0ff9ae 27104 389400000001000000000000086b6170702d677366026e6c00000f0001 389484030001000000010000086b6170702d677366026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 27105 47be000000010000000000000562736d74700577696e646f026e6c00001c0001 47be800000010000000200020562736d74700577696e646f026e6c00001c0001c012000200010001518000070469697331c012c01200020001000151800008056969733137c012c02c00010001000151800004d9aa050bc03f00010001000151800004d9aa0430 27106 31d40000000100000000000003777777036c6673026e6c0000010001 31d48000000100000002000203777777036c6673026e6c0000010001c01000020001000151800010036e7331096e65746e6174696f6ec014c01000020001000151800006036e7332c02cc02800010001000151800004d5efb105c04400010001000151800004505faa0a 27107 5efe00000001000000000000106a616e7373656e2d726f6e64686f7574026e6c0000ff0001 5efe80000001000000020000106a616e7373656e2d726f6e64686f7574026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c01dc00c0002000100015180000704686e7331c036 27108 0e360000000100000000000006636861726973026e6c00000f0001 0e368000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 27109 195200000001000000000000036e73340767617574656e67026e6c0000010001 195280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27110 a3570000000100000000000005646e732d31056c61646f74026e6c0000010001 a3578000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27111 e2d00000000100000000000005646e732d32056c61646f74026e6c0000010001 e2d08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27112 6b090000000100000000000003777777096c65756b7765726b74026e6c0000010001 6b098000000100000002000003777777096c65756b7765726b74026e6c0000010001c01000020001000151800017036e73310d696e746572726567697374657203636f6d00c01000020001000151800010026e730a646f6d65696e686f7374c01a 27113 839f00000001000000000000077365796d6f75720b6973642d686f6c6c616e64026e6c0000010001 839f80000001000000020002077365796d6f75720b6973642d686f6c6c616e64026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c03400010001000151800004d5e38d0ac04500010001000151800004d5e38205 27114 229d000000010000000000000761616c6f735f32036c6f73026e6c0000010001 229d800000010000000200020761616c6f735f32036c6f73026e6c0000010001c0140002000100015180000c026e7306787334616c6cc018c01400020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 27115 ea250000000100000000000003777777106472756b6b6572696a2d62796b6f7266026e6c0000010001 ea258000000100000002000003777777106472756b6b6572696a2d62796b6f7266026e6c0000010001c01000020001000151800018036e73310e7765626d61727463656e7472616c03636f6d00c01000020001000151800006036e7332c039 27116 4eea000000010000000000000f6465756764656e7465727073747261026e6c00000f0001 4eea800000010000000200000f6465756764656e7465727073747261026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c033 27117 01dd0000000100000000000005646e732d31056c61646f74026e6c0000010001 01dd8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27118 18550000000100000000000005646e732d32056c61646f74026e6c0000010001 18558000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27119 4a3500000001000000000000036d783106787334616c6c026e6c0000010001 4a3580000001000000030002036d783106787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 27120 253400000001000000000000037777770c7374657272656e6265757273026e6c0000010001 253480000001000000020000037777770c7374657272656e6265757273026e6c0000010001c0100002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01000020001000151800007046e6f7661c036 27121 6dca0000000100000000000008686f73746e616d650462696e640000100003 6dca8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27122 84720000000100000000000008686f73746e616d650462696e640000100003 84728000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27123 30720000000100000000000008686f73746e616d650462696e640000100003 30728000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27124 fef50000000100000000000003777777087472697077697265026e6c0000010001 fef58000000100000002000103777777087472697077697265026e6c0000010001c0100002000100015180000e036e7331077472616e736970c019c01000020001000151800006036e7332c031c02d0001000100015180000450454242 27125 2a3c00000001000000000000087765627374617473096e65746c6f67696373026e6c0000010001 2a3c80000001000000020002087765627374617473096e65746c6f67696373026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c03300010001000151800004c3c16402c04400010001000151800004c2b2850a 27126 99f900000001000000000000106c65656e646572736e696a6d6567656e026e6c00000f0001 99f980000001000000020000106c65656e646572736e696a6d6567656e026e6c00000f0001c00c0002000100015180001505646e7332300961637469766569737003636f6d00c00c0002000100015180000805646e733231c037 27127 f03a000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 f03a800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27128 80f90000000100000000000008686f73746e616d650462696e640000100003 80f98000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27129 0e6a00000001000000000000046d61696c066b6e696a6666026e6c0000010001 0e6a80000001000000020000046d61696c066b6e696a6666026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c033 27130 79fe000000010000000000000377777709776f6f6e6b72616e74026e6c0000010001 79fe800000010000000200000377777709776f6f6e6b72616e74026e6c0000010001c01000020001000151800011036e733107636f6e78696f6e036e657400c01000020001000151800006036e7332c032 27131 abb30000000100000000000004776f726b0c7676766e6f6f726477696a6b026e6c0000010001 abb38000000100000002000004776f726b0c7676766e6f6f726477696a6b026e6c0000010001c01100020001000151800013036e7331086d6564696177656204696e666f00c01100020001000151800006036e7332c036 27132 f92400000001000000000000054d4f4c454e0350434d026e6c0000010001 f92480000001000000020001054d4f4c454e0350434d026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 27133 820900000001000000000000036e733109666972737466696e64026e6c0000010001 820980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27134 d462000000010000000000000377777708642d7265697a656e026e6c0000010001 d462800000010000000300000377777708642d7265697a656e026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031 27135 525c00000001000000000000046e733032066368656c6c6f026e6c0000010001 525c80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 27136 a890000000010000000000000477777732076d797374617473026e6c0000010001 a890800000010000000200020477777732076d797374617473026e6c0000010001c01100020001000151800011036e73310a726564686f7374696e67c019c01100020001000151800006036e7332c031c02d00010001000151800004d5efa404c04a00010001000151800004d5efa405 27137 7c040000000100000000000003666d660a6e6c2c736f7040666d66026e6c00000f0001 7c048403000100000001000003666d660a6e6c2c736f7040666d66026e6c00000f0001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 27138 3e7c0000000100000000000003666d660a6e6c2c736f7040666d66026e6c00000f0001 3e7c8403000100000001000003666d660a6e6c2c736f7040666d66026e6c00000f0001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 27139 504a000000010000000000000966726573686d696c6b026e6c00000f0001 504a800000010000000200000966726573686d696c6b026e6c00000f0001c00c0002000100015180000e036e73300470707365036e657400c00c00020001000151800006036e7331c02e 27140 7ecc0000000100000000000002763109706365787472656d65026e6c0000010001 7ecc8000000100000002000202763109706365787472656d65026e6c0000010001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 27141 bf660000000100000000000002763109706365787472656d65026e6c0000260001 bf668000000100000002000202763109706365787472656d65026e6c0000260001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 27142 5fb30000000100000000000002763209706365787472656d65026e6c0000010001 5fb38000000100000002000202763209706365787472656d65026e6c0000010001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 27143 debd0000000100000000000002763209706365787472656d65026e6c0000260001 debd8000000100000002000202763209706365787472656d65026e6c0000260001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 27144 d2c2000000010000000000000236320331303003323532033230350a626c61636b686f6c657307656173796e6574026e6c0000010001 d2c2800000010000000200020236320331303003323532033230350a626c61636b686f6c657307656173796e6574026e6c0000010001c02600020001000151800006036e7330c026c02600020001000151800006036e7331c026c04200010001000151800004c2a55e01c05400010001000151800004c2a55e05 27145 828d00000001000000000000066e6964657261026e6c0000010001 828d80000001000000020000066e6964657261026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 27146 9efa00000001000000000000037777770f6164756c742d6d6567612d73697465026e6c0000010001 9efa80000001000000020000037777770f6164756c742d6d6567612d73697465026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c037 27147 bb8500000001000000000000037777770664616c636f6e026e6c0000010001 bb8580000001000000020000037777770664616c636f6e026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c017c0100002000100015180000704686e7331c030 27148 3434000000010000000000001076616e6d6175726963656465686f6e64026e6c0000010001 3434840300010000000100001076616e6d6175726963656465686f6e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 27149 18a30000000100000000000003777777027264026e6c0000010001 18a38000000100000002000203777777027264026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c013c01000020001000151800006036e7332c02bc02700010001000151800004505fa002c04200010001000151800004505fac02 27150 38c900000001000000000000036e7334096b6162656c666f6f6e026e6c0000010001 38c980000001000000020002036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f03 27151 102400000001000000000000037777770361666b026e6c0000010001 102480000001000000030002037777770361666b026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c014c01000020001000151800006036e7332c02cc01000020001000151800012036e7333086c65617365776562036f726700c028000100010001518000043ed44079c043000100010001518000043ed4407a 27152 d63d00000001000000000000037777770d67726f6f7679636f6d70616e79026e6c0000010001 d63d80000001000000030001037777770d67726f6f7679636f6d70616e79026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ec01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c050c032000100010001518000043efa0202 27153 676e00000001000000000000037777770e6e61747575726b616c656e646572026e6c0000010001 676e80000001000000020002037777770e6e61747575726b616c656e646572026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c01fc0100002000100015180000805726f62696ec03ac03300010001000151800004913a1e04c04f00010001000151800004913a1a34 27154 d1a100000001000000000000037777770b747261636b6572646f6773026e6c0000010001 d1a180000001000000020002037777770b747261636b6572646f6773026e6c0000010001c01000020001000151800009036e7331026973c01cc01000020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 27155 07800000000100000000000003777777066e6f72726f64026e6c0000010001 07808000000100000002000003777777066e6f72726f64026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02f 27156 2d7e00000001000000000000056672697368026e6c0000010001 2d7e80000001000000020000056672697368026e6c0000010001c00c00020001000151800019046e7331310e666c6578776562686f7374696e6703636f6d00c00c00020001000151800007046e733132c02b 27157 102400000001000000000000037777770361666b026e6c0000010001 102480000001000000030002037777770361666b026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c014c01000020001000151800006036e7332c02cc01000020001000151800012036e7333086c65617365776562036f726700c028000100010001518000043ed44079c043000100010001518000043ed4407a 27158 b497000000010000000000000377777708636f6e2d6e656374026e6c0000010001 b497800000010000000200000377777708636f6e2d6e656374026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c043 27159 102400000001000000000000037777770361666b026e6c0000010001 102480000001000000030002037777770361666b026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c014c01000020001000151800006036e7332c02cc01000020001000151800012036e7333086c65617365776562036f726700c028000100010001518000043ed44079c043000100010001518000043ed4407a 27160 719200000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 719280000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 27161 b1bb0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 b1bb8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27162 ceea000000010000000000000f7065656b6163636f756e74616e7473026e6c0000010001 ceea800000010000000200020f7065656b6163636f756e74616e7473026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c01cc00c00020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 27163 89ff00000001000000000000026e730c696e746572636f6e6e656374026e6c0000010001 89ff80000001000000030003026e730c696e746572636f6e6e656374026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004d453c005c03e00010001000151800004d453c006c05000010001000151800004d453c805 27164 8a0000000001000000000000026e73036d6c63026e6c0000010001 8a0080000001000000030003026e73036d6c63026e6c0000010001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 27165 201200000001000000000000036e73310568616e7a65026e6c00001c0001 201280000001000000030003036e73310568616e7a65026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c016c00c00010001000151800004912106efc03800010001000151800004912106eec04a00010001000151800004c0576a65 27166 073000000001000000000000036e73310568616e7a65026e6c0000260001 073080000001000000030003036e73310568616e7a65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c016c00c00010001000151800004912106efc03800010001000151800004912106eec04a00010001000151800004c0576a65 27167 b24b00000001000000000000036e73320568616e7a65026e6c00001c0001 b24b80000001000000030003036e73320568616e7a65026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004912106efc00c00010001000151800004912106eec04a00010001000151800004c0576a65 27168 34c600000001000000000000036e73320568616e7a65026e6c0000260001 34c680000001000000030003036e73320568616e7a65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004912106efc00c00010001000151800004912106eec04a00010001000151800004c0576a65 27169 1c1400000001000000000000036e73310765766964656e74026e6c0000010001 1c1480000001000000020002036e73310765766964656e74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c36d19c4c03a00010001000151800004c36d1942 27170 62bc0000000100000000000005646e732d31056c61646f74026e6c0000010001 62bc8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27171 40d40000000100000000000005646e732d32056c61646f74026e6c0000010001 40d48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27172 7570000000010000000000000c6d656469612d746f7461616c026e6c00000f0001 7570800000010000000200020c6d656469612d746f7461616c026e6c00000f0001c00c00020001000151800009036e7331026973c019c00c00020001000151800006036e7332c031c02d00010001000151800004d5852102c04200010001000151800004d5c41503 27173 af2900000001000000000000046d61696c09656c6d6167726f6570026e6c0000010001 af2980000001000000020002046d61696c09656c6d6167726f6570026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7331c011c02f00010001000151800004d5880085c04000010001000151800004d5ce5e22 27174 954700000001000000000000085354494e47504943026e6c0000020001 954784030001000000010000085354494e47504943026e6c0000020001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 27175 979c0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 979c8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27176 c1ec000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 c1ec800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27177 4711000000010000000000000377777705326c696e6b026e6c0000010001 4711800000010000000300030377777705326c696e6b026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c016c01000020001000151800006036e7330c02dc01000020001000151800006036e7333c02dc02a00010001000151800004c3561682c04a00010001000151800004c3561683c05c00010001000151800004d5de0bfa 27178 660300000001000000000000036e73330767617574656e67026e6c0000010001 660380000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27179 fe0200000001000000000000036e73340767617574656e67026e6c0000010001 fe0280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27180 bd000000000100000000000009652d6c756e61746963026e6c0000010001 bd008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 27181 125c00000001000000000000037777770463726f70026e6c0000010001 125c80000001000000020002037777770463726f70026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c015c01000020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 27182 9e8d00000001000000000000076e6372766e6574026e6c0000ff0001 9e8d80000001000000030003076e6372766e6574026e6c0000ff0001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec014c00c00020001000151800006036e7331c031c00c00020001000151800006036e7332c031c02800010001000151800004d42d2005c04600010001000151800004d42d2003c05800010001000151800004d42d2103 27183 1b2b0000000100000000000003777777066e6965757773026e6c0000010001 1b2b8000000100000002000003777777066e6965757773026e6c0000010001c0100002000100015180000f036e73310561676e2d65036e657400c01000020001000151800006036e7332c02f 27184 31b000000001000000000000037777770e6c65756b65766f6963656d61696c026e6c0000010001 31b080000001000000020000037777770e6c65756b65766f6963656d61696c026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c039 27185 dcac00000001000000000000037777770e6c65756b65766f6963656d61696c026e6c0000010001 dcac80000001000000020000037777770e6c65756b65766f6963656d61696c026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c039 27186 479800000001000000000000157a6f72676b616e746f6f722d67726f6e696e67656e026e6c0000010001 479880000001000000020002157a6f72676b616e746f6f722d67726f6e696e67656e026e6c0000010001c00c0002000100015180000e026e73086d656761706c6578c022c00c00020001000151800006036e7331c039c03600010001000151800004504f6101c05000010001000151800004504f6102 27187 7170000000010000000000000236320331303003323532033230350a626c61636b686f6c657307656173796e6574026e6c0000050001 7170800000010000000200020236320331303003323532033230350a626c61636b686f6c657307656173796e6574026e6c0000050001c02600020001000151800006036e7330c026c02600020001000151800006036e7331c026c04200010001000151800004c2a55e01c05400010001000151800004c2a55e05 27188 902300000001000000000000086f747465726c6f6f026e6c0000010001 902380000001000000020002086f747465726c6f6f026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 27189 65280000000100000000000003777777076b616e7a656f6e026e6c0000010001 65288000000100000002000203777777076b616e7a656f6e026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c018c01000020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 27190 c60d28000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730a73706f72746369747934026e6c000021000100000258001d00000064005807736572766572340a73706f72746369747934026e6c00 c60da8040000000000000000 27191 5bb1000000010000000000000570697030390776697a7a617669026e6c0000010001 5bb1800000010000000300010570697030390776697a7a617669026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c01200020001000151800007046e733038c044c02e000100010001518000043e48df58 27192 e81200000001000000000000037777770874656c6562797465026e6c0000010001 e81280000001000000020002037777770874656c6562797465026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7334c010c02d00010001000151800004d5d38115c03f00010001000151800004d5d38116 27193 828c00000001000000000000036e73330874656c6562797465026e6c0000010001 828c80000001000000020002036e73330874656c6562797465026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c00010001000151800004d5d38115c03b00010001000151800004d5d38116 27194 fdf900000001000000000000036e73340874656c6562797465026e6c0000010001 fdf980000001000000020002036e73340874656c6562797465026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800002c00cc02d00010001000151800004d5d38115c00c00010001000151800004d5d38116 27195 dc9e00000001000000000000037777770b6c65756b636f6e74616374026e6c0000010001 dc9e80000001000000020002037777770b6c65756b636f6e74616374026e6c0000010001c0100002000100015180000c036e733105642d6f2d73c01cc01000020001000151800006036e7332c034c0300001000100015180000451ad076cc0480001000100015180000451ad076d 27196 06e600000001000000000000037777770b6c65756b636f6e74616374026e6c0000010001 06e680000001000000020002037777770b6c65756b636f6e74616374026e6c0000010001c0100002000100015180000c036e733105642d6f2d73c01cc01000020001000151800006036e7332c034c0300001000100015180000451ad076cc0480001000100015180000451ad076d 27197 024800000001000000000000037777770d76616e7761696a656e62757267026e6c0000010001 024880000001000000020000037777770d76616e7761696a656e62757267026e6c0000010001c01000020001000151800010036e733109666972737466696e64c01ec01000020001000151800006036e7332c036 27198 b38500000001000000000000037777770d76616e7761696a656e62757267026e6c0000010001 b38580000001000000020000037777770d76616e7761696a656e62757267026e6c0000010001c01000020001000151800010036e733109666972737466696e64c01ec01000020001000151800006036e7332c036 27199 cc8900000001000000000000066f7a77617265026e6c0000010001 cc8980000001000000020000066f7a77617265026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c02a 27200 3a20000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 3a20800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 27201 253d000000010000000000000870686f626f7330320761626e616d726f026e6c0000010001 253d800000010000000200020870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c 27202 b109000000010000000000000649434153533207554e494d414153024e4c0000010001 b109800000010000000300030649434153533207554e494d414153024e4c0000010001c0130002000100015180000906726c30303031c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01bc02f0001000100015180000489780101c00c0001000100015180000489780105c05200010001000151800004c0576a65 27203 93110000000100000000000003777777076461636c6f676f026e6c0000010001 93118000000100000003000103777777076461636c6f676f026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 27204 000000007002400088c600000204057a01010402 000080010000000000000000 27205 b610654e501041b898290000000000000000 b610e5440000000000000000 27206 b610654e501841b8139400000090d480000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff54403c50d40003000000314e544c4d535350000100000097b208e00a000a002700000007000700200000005345525645523453504f525443495459340000 b610e5440000000000000000 27207 45b90000000100000000000004676174650365706f026e6c0000010001 45b98000000100000002000104676174650365706f026e6c0000010001c01100020001000151800002c00cc0110002000100015180000b026e73026e6c036e657400c00c0001000100015180000491408003 27208 9bec0000000100000000000004676174650365706f026e6c0000260001 9bec8000000100000002000104676174650365706f026e6c0000260001c01100020001000151800002c00cc0110002000100015180000b026e73026e6c036e657400c00c0001000100015180000491408003 27209 b610655c501141aa97960000000000000000 b610e5540000000000000000 27210 629600000001000000000000037777770e726b627377696c6c6962726f7264026e6c0000010001 629680000001000000020000037777770e726b627377696c6c6962726f7264026e6c0000010001c01000020001000151800012036e7337087465646f63776562036e657400c01000020001000151800006036e7338c037 27211 ce21000000010000000000000f7363686f6c74656e2d6c696a6d656e026e6c00000f0001 ce21840300010000000100000f7363686f6c74656e2d6c696a6d656e026e6c00000f0001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 27212 b610655d501041aa97950000000000000000 b610e5540000000000000000 27213 2fdc00000001000000000000085455524e4b49454b024e4c00000f0001 2fdc80000001000000020001085455524e4b49454b024e4c00000f0001c00c0002000100015180000f026e7309696d74656368696374c015c00c0002000100015180000d036e7334036b706e036e657400c02900010001000151800004c1accc82 27214 81460000000100000000000004616e73310774697363616c69026e6c0000010001 81468000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 27215 e07e0000000100000000000004616e73310774697363616c69026e6c0000260001 e07e8000000100000003000204616e73310774697363616c69026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 27216 f03f0000000100000000000004616e73320774697363616c69026e6c0000010001 f03f8000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 27217 00000000700240008aa700000204057a01010402 000080010000000000000000 27218 21e7000000010000000000000a66726565616363657373026e6c00000f0001 21e7800000010000000200020a66726565616363657373026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc017c00c00020001000151800006036e7332c02fc02b00010001000151800004c3558244c04400010001000151800004c3558245 27219 4302000000010000000000000c776f6f6e62656c616e67656e026e6c0000010001 4302800000010000000200020c776f6f6e62656c616e67656e026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 27220 bb190000000100000000000005646e732d31056c61646f74026e6c0000010001 bb198000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27221 7f300000000100000000000005646e732d32056c61646f74026e6c0000010001 7f308000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27222 d16b000000010000000000000377777709626f636f6e63657074026e6c0000010001 d16b800000010000000200020377777709626f636f6e63657074026e6c0000010001c0100002000100015180000d036e733106776562646e73c01ac01000020001000151800006036e7332c032c02e000100010001518000045054e5f1c047000100010001518000045054e5f2 27223 afbf0000000100000000000004616e73320774697363616c69026e6c0000260001 afbf8000000100000003000204616e73320774697363616c69026e6c0000260001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 27224 b6125547501041b8aa0f0000000000000000 b612d5440000000000000000 27225 9ab4000000010000000000000377777708746f706c69737473026e6c0000010001 9ab4800000010000000300030377777708746f706c69737473026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 27226 05710000000100000000000006787334616c6c026e6c00000f0001 05718000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 27227 b6125547501841b804fb00000090f600000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff54403c50d40003000000314e544c4d535350000100000097b208e00a000a002700000007000700200000005345525645523453504f525443495459340000 b612d5440000000000000000 27228 b6125555501141aaa97c0000000000000000 b612d5540000000000000000 27229 01030000000100000000000003626c3102626c06787334616c6c026e6c0000010001 01038000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27230 b6125556501041aaa97b0000000000000000 b612d5540000000000000000 27231 f00200000001000000000000037777770565626f6e65026e6c0000010001 f00280000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 27232 b12f000000010000000000000672756e6e657206535441525431024e4c0000060001 b12f840300010000000100000672756e6e657206535441525431024e4c0000060001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 27233 c35100000001000000000000076f6d6e69636f6c026e6c00000f0001 c35180000001000000020002076f6d6e69636f6c026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c014c00c00020001000151800006036e7332c02bc02800010001000151800004d453c005c04600010001000151800004d453c006 27234 0000000070024000e70d00000204057a01010402 000080010000000000000000 27235 804e00000001000000000000037777770b63656e7465727061726373026e6c0000010001 804e80000001000000020001037777770b63656e7465727061726373026e6c0000010001c0100002000100015180000d026e7307616d6572636f6dc01cc01000020001000151800006036e7331c033c03000010001000151800004c2b2b20a 27236 b6132124501041b83a980000000000000000 b613a1230000000000000000 27237 ba1f00000001000000000000077265666c656374026e6c0000010001 ba1f80000001000000020000077265666c656374026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 27238 b6132124501841b871c40000009019c0000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff54403c50d40003000000314e544c4d535350000100000097b208e00a000a002700000007000700200000005345525645523453504f525443495459340000 b613a1230000000000000000 27239 3d640000000100000000000006636861726973026e6c00000f0001 3d648000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 27240 b6132132501141aa3a050000000000000000 b613a1330000000000000000 27241 22910000000100000000000006647261626265026e6c00000f0001 22918000000100000002000206647261626265026e6c00000f0001c00c0002000100015180000d036e73310666656e6e756dc013c00c00020001000151800006036e7332c02bc027000100010001518000043e3a50d2c040000100010001518000043e3a50d1 27242 ce7a000000010000000000001166696e616e636574656c65766973696f6e026e6c0000010001 ce7a800000010000000200021166696e616e636574656c65766973696f6e026e6c0000010001c00c00020001000151800011026e730b666163696e676661637473c01ec00c00020001000151800006036e7332c035c03200010001000151800004d513b013c04f00010001000151800004d513b012 27243 b6132133501041aa3a040000000000000000 b613a1330000000000000000 27244 b71e0000000100000000000003726473026e6c0000010001 b71e8000000100000002000103726473026e6c0000010001c00c0002000100015180000a036e733303777873c010c00c00020001000151800006036e7334c028c03a00010001000151800004d5ef9a65 27245 6481000000010000000000000a61726368696d65646573026e6c0000010001 6481800000010000000200020a61726368696d65646573026e6c0000010001c00c0002000100015180001103646e730a636f6e63657074736661c017c00c0002000100015180001004646e733208636f6e6365707473c017c02b00010001000151800004d5c51c03c04800010001000151800004d5c51e1c 27246 28ce00000001000000000000037777770a64616e7370616c656973026e6c0000010001 28ce80000001000000020002037777770a64616e7370616c656973026e6c0000010001c0100002000100015180000a036e733103686978c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5a0da0ac0450001000100015180000451112ec3 27247 48070000000100000000000003777777156265656c6473636865726d746163686f6772616166026e6c0000010001 48078000000100000003000103777777156265656c6473636865726d746163686f6772616166026e6c0000010001c0100002000100015180000e026e7308767575727765726bc026c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c058c03a000100010001518000043efa0202 27248 fcfb00000001000000000000037777770c74656c65666f6f6e676964730b7074742d74656c65636f6d026e6c0000010001 fcfb80000001000000020000037777770c74656c65666f6f6e676964730b7074742d74656c65636f6d026e6c0000010001c01d0002000100015180000d03646e73036b706e03636f6d00c01d0002000100015180000d036e7332036b706e036e657400 27249 0e7e00000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 0e7e80000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 27250 37e4000000010000000000000a6d61696c6261636b7570096b656e6e69736e6574026e6c0000010001 37e4800000010000000200020a6d61696c6261636b7570096b656e6e69736e6574026e6c0000010001c01700020001000151800006036e7339c017c0170002000100015180000e036e733207737572666e6574c021c03500010001000151800004c0576a61c04700010001000151800004c0572402 27251 92ff001000010000000000010466646467026e6c0000ff00010000290800000080000000 92ff800000010000000200030466646467026e6c0000ff0001c00c0002000100015180000e026e73086d656761706c6578c011c00c00020001000151800006036e7331c028c02500010001000151800004504f6101c03f00010001000151800004504f61020000291000000000000000 27252 4490000000010000000000000377777707636f6e74656e74026e6c0000010001 4490800000010000000200000377777707636f6e74656e74026e6c0000010001c01000020001000151800016046e7330310b63726579667367726f757003636f6d00c01000020001000151800007046e733032c031 27253 e7b400000001000000000000037777770f7065746572732d7465726c696e6465026e6c0000010001 e7b480000001000000020000037777770f7065746572732d7465726c696e6465026e6c0000010001c0100002000100015180000c026e7306766576696461c020c01000020001000151800006036e7332c037 27254 067e000000010000000000000469632d73026e6c0000010001 067e800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 27255 a78000000001000000000000037777770a64757463687465656e73026e6c0000010001 a78080000001000000020001037777770a64757463687465656e73026e6c0000010001c0100002000100015180000a026e7304696d636fc01bc01000020001000151800013036e7332097669727475616c787303636f6d00c02f000100010001518000043e81810a 27256 968e000000010000000000000377777703697369027575026e6c0000010001 968e800000010000000400040377777703697369027575026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000e036e733107737572666e6574c017c01400020001000151800006036e7333c014c02b0001000100015180000483d30405c03c0001000100015180000483d30406c04e00010001000151800004c0576a65c0680001000100015180000483d31020 27257 fa8c00000001000000000000036e7330087a7761616e6e6574026e6c0000010001 fa8c80000001000000020000036e7330087a7761616e6e6574026e6c0000010001c01000020001000151800010036e7330066361726f7461036e657400c0100002000100015180000b036e7330047065656ec038 27258 35650000000100000000000006636861726973026e6c0000010001 35658000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 27259 67d40000000100000000000003777777066d6563656876026e6c0000010001 67d48000000100000002000203777777066d6563656876026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c017c01000020001000151800006036e7332c02fc02b00010001000151800004d43d0f08c04900010001000151800004d43d19e2 27260 b0c700000001000000000001026e73076e656473746174026e6c00000100010000291000000000000000 b0c780000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 27261 c8eb000000010000000000000474726161026e6c0000010001 c8eb800000010000000200000474726161026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c011c00c0002000100015180000704686e7331c02a 27262 4d7700000001000000000000036e73320d7072696d656d6572696469616e026e6c0000010001 4d7780000001000000020002036e73320d7072696d656d6572696469616e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d468cf38c00c00010001000151800004d468cf39 27263 dc360000000100000000000004736b6f73026e6c0000010001 dc368000000100000002000204736b6f73026e6c0000010001c00c00020001000151800010046e736531086c6f636f736f6674c011c00c0002000100015180000d036e73320663617374656cc011c02500010001000151800004c3238d44c04100010001000151800004c3558245 27264 6f0800000001000000000000037777770b64652d726563657074656e026e6c00001c0001 6f0880000001000000020002037777770b64652d726563657074656e026e6c00001c0001c01000020001000151800012026e730c696e746572636f6e6e656374c01cc01000020001000151800006036e7332c033c03000010001000151800004d453c005c04e00010001000151800004d453c006 27265 356600000001000000000000026e7306766576696461026e6c0000010001 356680000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 27266 44d6000000010000000000000477777731056b6c696b73026e6c0000010001 44d6800000010000000200000477777731056b6c696b73026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c02e 27267 9d6700000001000000000000036e73310c636f6c742d74656c65636f6d026e6c0000010001 9d6780000001000000020002036e73310c636f6c742d74656c65636f6d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d44ea00dc03f00010001000151800004d44ea00e 27268 1bb600000001000000000000036e73320c636f6c742d74656c65636f6d026e6c0000010001 1bb680000001000000020002036e73320c636f6c742d74656c65636f6d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03100010001000151800004d44ea00dc00c00010001000151800004d44ea00e 27269 86740000000100000000000003777777087067646562727567026e6c0000010001 86748000000100000002000203777777087067646562727567026e6c0000010001c01000020001000151800010036e733109756e69736572766572c019c01000020001000151800006036e7332c031c02d00010001000151800004c3454b03c04900010001000151800004d119a2fa 27270 d774000000010000000000001076616e6d6175726963656465686f6e64026e6c0000010001 d774840300010000000100001076616e6d6175726963656465686f6e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 27271 defd00000001000000000000046c756d63026e6c00000f0001 defd80000001000000030003046c756d63026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000e036e733107737572666e6574c011c025000100010001518000049158d2eac037000100010001518000049158d30ac04900010001000151800004c0576a65 27272 44110000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 44118000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 27273 14720000000100000000000014736f7a2d70696e6b726f63636164652d686f6d65026e6c00000f0001 14728000000100000002000214736f7a2d70696e6b726f63636164652d686f6d65026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc021c00c00020001000151800006036e7332c038c03500010001000151800004c26d0642c04d00010001000151800004c26d0963 27274 ee760000000100000000000009776f726c646d61696c026e6c00001c0001 ee768000000100000003000209776f726c646d61696c026e6c00001c0001c00c0002000100015180000f04616e73310774697363616c69c016c00c0002000100015180000704616e7332c02fc00c0002000100015180001404616e73330a74697363616c696e657402626500c02a00010001000151800004c3f14d38c04500010001000151800004c3f13325 27275 cd790000000100000000000003445256024e4c00001c0001 cd798000000100000002000203445256024e4c00001c0001c00c00020001000151800010026e730a7a65656c616e646e6574c010c00c00020001000151800006036e7332c027c02400010001000151800004d473c0c1c04000010001000151800004d473c0c3 27276 0d7b0000000100000000000008656e736368656465026e6c0000ff0001 0d7b8000000100000002000208656e736368656465026e6c0000ff0001c00c0002000100015180000c036e7331057669727475c015c00c00020001000151800006036e7332c02dc02900010001000151800004d9726102c04100010001000151800004d58141c4 27277 8e34000000010000000000000a776f726d65726c616e64026e6c00000f0001 8e34800000010000000200020a776f726d65726c616e64026e6c00000f0001c00c00020001000151800012036e73310b6f75776568616e642d6974c017c00c00020001000151800006036e7333c02fc02b00010001000151800004d4cccff1c04900010001000151800004d4ccc4b1 27278 b173000000010000000000000773702d706c7573026e6c00000f0001 b173800000010000000200000773702d706c7573026e6c00000f0001c00c000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c00c0002000100015180000e0b65766973702d6e732d3032c034 27279 35be0000000100000000000009652d6c756e61746963026e6c0000010001 35be8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 27280 8fe2000000010000000000000377777709776f7a6f6e6c696e65026e6c0000010001 8fe2800000010000000200010377777709776f7a6f6e6c696e65026e6c0000010001c0100002000100015180000a036e7330036d6178c01ac01000020001000151800006036e7331c032c044000100010001518000043ed44447 27281 234000000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 234080000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 27282 c222000000010000000000000874656c696e647573026e6c0000ff0001 c222800000010000000200000874656c696e647573026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02f 27283 fd9c00000001000000000000116d616e6167656d656e74737570706f7274026e6c0000010001 fd9c80000001000000020001116d616e6167656d656e74737570706f7274026e6c0000010001c00c0002000100015180000d026e7307616d6572636f6dc01ec00c00020001000151800006036e7331c035c03200010001000151800004c2b2b20a 27284 ae10000000010000000000000966696c6d736f707476056d65746961026e6c0000010001 ae10800000010000000300030966696c6d736f707476056d65746961026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800006036e7333c016c03000010001000151800004d5ef9902c04200010001000151800004d584d5eac05400010001000151800004d5ef8005 27285 2dcc0000000100000000000009652d6c756e61746963026e6c0000010001 2dcc8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 27286 7dab0000000100000000000003777777056574657874026e6c0000010001 7dab8000000100000002000203777777056574657874026e6c0000010001c0100002000100015180000f026e7309656174736572766572c016c01000020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 27287 ec9900100001000000000001046e73303903777873026e6c00000100010000290800000000000000 ec9980000001000000030004046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 27288 585b00100001000000000001046e73303903777873026e6c00002600010000290800000000000000 585b80000001000000030004046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 27289 078900100001000000000001036e733503777873026e6c00000100010000290800000000000000 078980000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 27290 6b6000100001000000000001036e733503777873026e6c00002600010000290800000000000000 6b6080000001000000030004036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 27291 1afd00100001000000000001046e73303803777873026e6c00000100010000290800000000000000 1afd80000001000000030004046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 27292 101700100001000000000001046e73303803777873026e6c00002600010000290800000000000000 101780000001000000030004046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 27293 118c00000001000000000000036e73330767617574656e67026e6c0000010001 118c80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27294 1e2000000001000000000000037777770e6c656964736368646167626c6164026e6c0000010001 1e2080000001000000030003037777770e6c656964736368646167626c6164026e6c0000010001c0100002000100015180000e076e73617574683103626974c01fc0100002000100015180000a076e736175746832c03bc0100002000100015180000a076e736175746833c03bc03300010001000151800004d5880c33c04d00010001000151800004d5880c3bc06300010001000151800004d4ccc00b 27295 c4fd000000010000000000000a61692d686f7374696e67026e6c0000010001 c4fd800000010000000200020a61692d686f7374696e67026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02b00010001000151800004d584af25c03d000100010001518000043e8311c0 27296 0c7a00000001000000000000146e69657577736272696576656e73657276696365026e6c00000f0001 0c7a80000001000000030001146e69657577736272696576656e73657276696365026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 27297 6b5800000001000000000000036e73340468617661026e6c0000010001 6b5880000001000000030003036e73340468617661026e6c0000010001c0100002000100015180000c036e73310564726f6e65c015c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02900010001000151800004d413ddc2c04100010001000151800004d413ddc6c05300010001000151800004d413ddc7 27298 f4050000000100000000000003647376026e6c00000f0001 f4058000000100000002000203647376026e6c00000f0001c00c0002000100015180000f036e733108696e7465726d6178c010c00c00020001000151800006036e7332c028c02400010001000151800004505fa002c03f00010001000151800004505fac02 27299 019b00000001000000000000036e73330767617574656e67026e6c0000010001 019b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27300 09a000000001000000000000036e73330767617574656e67026e6c0000010001 09a080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27301 5e9400000001000000000000026e73076e656473746174026e6c00001c0001 5e9480000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27302 fcf000000001000000000000026e73076e656473746174026e6c0000260001 fcf080000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27303 d7cf00000001000000000000036e7332076e656473746174026e6c0000010001 d7cf80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27304 dd3100000001000000000000036e7332076e656473746174026e6c00001c0001 dd3180000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27305 a98e00000001000000000000036e7332076e656473746174026e6c0000260001 a98e80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27306 adbc00000001000000000000036e7333076e656473746174026e6c00001c0001 adbc80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27307 211200000001000000000000036e7333076e656473746174026e6c0000260001 211280000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27308 9f0200000001000000000000036e7334076e656473746174026e6c0000010001 9f0280000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27309 6ac600000001000000000000036e7334076e656473746174026e6c00001c0001 6ac680000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27310 620800000001000000000000036e7334076e656473746174026e6c0000260001 620880000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27311 0c9500000001000000000000037777770b6a656b6174726164696e67026e6c0000010001 0c9580000001000000020000037777770b6a656b6174726164696e67026e6c0000010001c01000020001000151800015036e73350b686f7374696e67776f7278036e657400c01000020001000151800006036e7336c034 27312 017200000001000000000000036e73330767617574656e67026e6c0000010001 017280000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27313 978700000001000000000000037777770f6c6170746f7077656277696e6b656c026e6c0000010001 978780000001000000030000037777770f6c6170746f7077656277696e6b656c026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c03ac0100002000100015180000805646e733132c03a 27314 8a29000000010000000000001073616e6f6d612d756974676576657273026e6c0000010001 8a29800000010000000300001073616e6f6d612d756974676576657273026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c035c00c00020001000151800006036e7333c035 27315 bb5400000001000000000000024e53085241424f42414e4b026e6c0000010001 bb5480000001000000020001024e53085241424f42414e4b026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 27316 61f20000000100000000000005646e732d31056c61646f74026e6c0000010001 61f28000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27317 b11d0000000100000000000005646e732d32056c61646f74026e6c0000010001 b11d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27318 217300000001000000000000037777770d7374616174736c6f746572696a026e6c0000010001 217380000001000000020002037777770d7374616174736c6f746572696a026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01ec01000020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 27319 a8ea00000001000000000001036e7333076e656473746174026e6c00000100010000291000000000000000 a8ea80000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 27320 b54400000001000000000000037777770976696c6c6163756261026e6c0000010001 b54480000001000000020002037777770976696c6c6163756261026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c01ac01000020001000151800006036e7332c032c02e00010001000151800004505fa002c04900010001000151800004505fac02 27321 a840000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 a840800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27322 bbf500000001000000000000037777770a3474756e652d73686f70026e6c00001c0001 bbf580000001000000020000037777770a3474756e652d73686f70026e6c00001c0001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c032 27323 a50400000001000000000000067765626e6574026e6c00000f0001 a50480000001000000020002067765626e6574026e6c00000f0001c00c0002000100015180000e036e73310768756d616e2d69c013c00c00020001000151800006036e7332c02bc02700010001000151800004c1ad2884c04100010001000151800004c1ad2886 27324 5e4c00000001000000000000037777770763686970646972026e6c0000010001 5e4c80000001000000020002037777770763686970646972026e6c0000010001c01000020001000151800014036e73310d706f7765727365727665723138c018c01000020001000151800006036e7332c030c02c0001000100015180000451047111c04c0001000100015180000451047112 27325 7b1a000000010000000000000377777707736d696c657973026e6c0000010001 7b1a800000010000000200020377777707736d696c657973026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec018c01000020001000151800006036e7332c030c02c00010001000151800004c3b1f203c04a00010001000151800004d4ccf533 27326 3cf80000000100000000000003777777106472756b6b6572696a2d62796b6f7266026e6c0000010001 3cf88000000100000002000003777777106472756b6b6572696a2d62796b6f7266026e6c0000010001c01000020001000151800018036e73310e7765626d61727463656e7472616c03636f6d00c01000020001000151800006036e7332c039 27327 f21e0000000100000000000008686f73746e616d650462696e640000100003 f21e8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27328 5596000000010000000000000c72656164657273686f757365026e6c00000f0001 5596800000010000000200020c72656164657273686f757365026e6c00000f0001c00c00020001000151800012036e73310b72656e61697373616e6365c019c00c00020001000151800006036e7332c031c02d00010001000151800004d4ccc4efc04b00010001000151800004d4ccc4f0 27329 a0df0000000100000000000008686f73746e616d650462696e640000100003 a0df8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27330 6cef000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 6cef800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27331 e1ec000000010000000000000661656f697573026e6c0000010001 e1ec800000010000000300030661656f697573026e6c0000010001c00c0002000100015180000b04646e733103766970c013c00c0002000100015180000704646e7332c02cc00c0002000100015180000704646e7333c02cc02700010001000151800004d44fe803c03e00010001000151800004c3f5c782c05100010001000151800004d44ff303 27332 eff5000000010000000000000773747564656e7409494e484f4c4c414e44026e6c0000010001 eff5800000010000000200020773747564656e7409494e484f4c4c414e44026e6c0000010001c01400020001000151800006036e7331c014c0140002000100015180000e036e733107737572666e6574c01ec03200010001000151800004c2ab230bc04400010001000151800004c0576a65 27333 69c500000001000000000000037777770763686970646972026e6c0000010001 69c580000001000000020002037777770763686970646972026e6c0000010001c01000020001000151800014036e73310d706f7765727365727665723138c018c01000020001000151800006036e7332c030c02c0001000100015180000451047111c04c0001000100015180000451047112 27334 30fd000000010000000000000357575707424947424f5353024e4c0000010001 30fd800000010000000300010357575707424947424f5353024e4c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 27335 ce3d00000001000000000000036e73330d686f73746e656465726c616e64026e6c0000010001 ce3d80000001000000030002036e73330d686f73746e656465726c616e64026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 27336 7fad00000001000000000000036e7336086a726f6e6c696e65026e6c0000010001 7fad80000001000000020000036e7336086a726f6e6c696e65026e6c0000010001c01000020001000151800014036e73310d686f73746e656465726c616e64c019c01000020001000151800006036e7333c031 27337 3e030010000100000000000103626c3402626c06787334616c6c026e6c00000100010000290800000080000000 3e038000000100000003000303626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 27338 99bf0000000100000000000005646e732d31056c61646f74026e6c0000010001 99bf8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27339 10db000000010000000000000377777706686f72736573026e6c0000010001 10db800000010000000200020377777706686f72736573026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c017c01000020001000151800006036e7332c02fc02b00010001000151800004d43d0f08c04900010001000151800004d43d19e2 27340 3e19000000010000000000000376676d026e6c0000010001 3e19800000010000000200020376676d026e6c0000010001c00c0002000100015180000b026e73056e65726f63c010c00c00020001000151800006036e7332c027c02400010001000151800004d434010ac03b00010001000151800004d434000a 27341 0d6c000000010000000000000377777703736475026e6c0000010001 0d6c800000010000000200020377777703736475026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800013036e73320c636f6c742d74656c65636f6dc014c02800010001000151800004d5d0ce07c03a00010001000151800004d44ea00e 27342 5c620000000100000000000003777777106a62672d6265656c642d67656c756964026e6c0000010001 5c628000000100000002000203777777106a62672d6265656c642d67656c756964026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c021c0100002000100015180001004646e733208636f6e6365707473c021c03500010001000151800004d5c51c03c05200010001000151800004d5c51e1c 27343 5db500000001000000000000037777770f6f72616e6a6562616e647a6164656e026e6c0000010001 5db580000001000000020002037777770f6f72616e6a6562616e647a6164656e026e6c0000010001c0100002000100015180000d03706e7306636f6d6c6f67c020c0100002000100015180000603736e73c038c03400010001000151800004d5a0c803c04d00010001000151800004d5a0c804 27344 8f230000000100000000000004686e73310774697363616c69026e6c0000010001 8f238000000100000003000204686e73310774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 27345 f9e400000001000000000000036972630468656c6c026e6c00001c0001 f9e480000001000000030001036972630468656c6c026e6c00001c0001c0100002000100015180000e026e7308767575727765726bc015c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c047c029000100010001518000043efa0202 27346 96ca00000001000000000000037777770a76696c6c61666c6f6f72026e6c0000010001 96ca80000001000000020002037777770a76696c6c61666c6f6f72026e6c0000010001c01000020001000151800010036e7331096264726567686f7374c01bc01000020001000151800006036e7332c033c02f00010001000151800004510473a0c04b00010001000151800004510473a1 27347 848a00000001000000000000036e73310b6368616d69646d65646961026e6c0000010001 848a80000001000000020002036e73310b6368616d69646d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c0453fc03e0001000100015180000452c04540 27348 616600000001000000000000036e73320b6368616d69646d65646961026e6c0000010001 616680000001000000020002036e73320b6368616d69646d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0300001000100015180000452c0453fc00c0001000100015180000452c04540 27349 683d00000001000000000000056a756d626f026e6c0000010001 683d80000001000000020002056a756d626f026e6c0000010001c00c0002000100015180000c036e733105616b726973c012c00c0002000100015180000e066e6562756c610476627662c012c02600010001000151800004d44837b7c03e00010001000151800004d44837b3 27350 8f1100000001000000000000046e73303903777873026e6c0000010001 8f1180000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 27351 931f00000001000000000000036e733503777873026e6c0000010001 931f80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 27352 263e00000001000000000000046e73303903777873026e6c0000260001 263e80000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 27353 08a600000001000000000000036e733503777873026e6c0000260001 08a680000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 27354 422700000001000000000000046e73303803777873026e6c0000010001 422780000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 27355 b4a300000001000000000000046e73303803777873026e6c0000260001 b4a380000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 27356 09b900000001000000000000036e733105616b726973026e6c00001c0001 09b980000001000000020002036e733105616b726973026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e066e6562756c610476627662c016c00c00010001000151800004d44837b7c03800010001000151800004d44837b3 27357 1c1900000001000000000000076f6e6c796f6e65026e6c0000010001 1c1980000001000000020000076f6e6c796f6e65026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 27358 3a7200000001000000000000046c6f76650f7a7676636f6c6c6576657268757572026e6c0000010001 3a7280000001000000020002046c6f76650f7a7676636f6c6c6576657268757572026e6c0000010001c01100020001000151800012036e73310b676c6f62616c666f726365c021c01100020001000151800006036e7332c039c035000100010001518000045117ed67c053000100010001518000045117ed12 27359 2288000000010000000000000865787472616e657406636165736172026e6c0000010001 2288800000010000000200010865787472616e657406636165736172026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000b026e73026e6c036e657400c03000010001000151800004c14fb8d8 27360 0fbb000000010000000000000b6e6f6f7264657262727567026e6c0000010001 0fbb800000010000000300010b6e6f6f7264657262727567026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc018c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ac02c000100010001518000043efa0202 27361 4d8d0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 4d8d8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27362 a024000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 a024800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27363 778a000000010000000000000e616d7374657264616d706f727473026e6c0000010001 778a800000010000000300030e616d7374657264616d706f727473026e6c0000010001c00c0002000100015180000e036e73310761737034616c6cc01bc00c00020001000151800006036e7332c033c00c00020001000151800006036e7333c033c02f00010001000151800004c1adf9c3c049000100010001518000043e70ec3cc05b00010001000151800004c1ac0bae 27364 4527000000010000000000000237340239340234350236380a626c61636b686f6c657307656173796e6574026e6c0000010001 4527800000010000000200020237340239340234350236380a626c61636b686f6c657307656173796e6574026e6c0000010001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 27365 722900000001000000000000046d61696c096475746368686f7374026e6c0000010001 722980000001000000020001046d61696c096475746368686f7374026e6c0000010001c0110002000100015180000b0861737465726f7065c011c0110002000100015180000c036e733205786c722d38c01bc02f00010001000151800004d58523d2 27366 303f000000010000000000000377777707766f6c64657273026e6c0000010001 303f800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 27367 610900000001000000000000036674700c7665727a616d656c67696473026e6c0000010001 610980000001000000020000036674700c7665727a616d656c67696473026e6c0000010001c01000020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01000020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 27368 d8c90000000100000000000003777777137665726b656572737363686f6f6c7765766572026e6c0000010001 d8c98000000100000002000203777777137665726b656572737363686f6f6c7765766572026e6c0000010001c0100002000100015180000c026e7306787334616c6cc024c01000020001000151800006036e7332c03bc03800010001000151800004c26d0642c05000010001000151800004c26d0963 27369 001300000001000000000000036e733103757063026e6c0000010001 001380000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 27370 0fcf00000001000000000000037777771167656e696574656e76616e74696574656e026e6c0000010001 0fcf80000001000000030002037777771167656e696574656e76616e74696574656e026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c022c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c03ac036000100010001518000045054e055c06f00010001000151800004d4ccc655 27371 33af00000001000000000000026e7307696e746f756368026e6c0000010001 33af80000001000000030001026e7307696e746f756368026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c001 27372 01c000000001000000000000036e73330767617574656e67026e6c0000010001 01c080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27373 3b7b00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 3b7b80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 27374 48f500000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 48f580000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27375 7c5a00000001000000000000096368616c6c656e6765026e6c00000f0001 7c5a80000001000000030002096368616c6c656e6765026e6c00000f0001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 27376 3b400000000100000000000003777777126b6c76616e616c6c6573656e6e6f67776174026e6c0000010001 3b408403000100000001000003777777126b6c76616e616c6c6573656e6e6f67776174026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 27377 916f00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 916f80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27378 083400000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c00001c0001 083480000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27379 159800000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c0000260001 159880000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27380 0c5c00100001000000000000037777770b626f6e6172666c6f6f7273026e6c0000010001 0c5c80000001000000030000037777770b626f6e6172666c6f6f7273026e6c0000010001c01000020001000151800016026e730b73696d706c796e616d657302636f02756b00c01000020001000151800006036e7332c033c01000020001000151800006036e7333c033 27381 7bfb00000001000000000000037777770c68737664656e68656c646572026e6c0000010001 7bfb80000001000000020002037777770c68737664656e68656c646572026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01dc01000020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 27382 837900000001000000000000037777770d76616e68616172656e6d6f6465026e6c0000010001 837980000001000000020000037777770d76616e68616172656e6d6f6465026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c038 27383 f36300000001000000000000046d61696c0873746567656d616e026e6c0000010001 f36380000001000000020002046d61696c0873746567656d616e026e6c0000010001c0110002000100015180000a036e733103746d6ec01ac01100020001000151800006036e7332c032c02e00010001000151800004d5a0d8fac04400010001000151800004d5a0d9fa 27384 e41c0000000100000000000007737570706f72740e656e67656c73656272696576656e026e6c0000010001 e41c8403000100000001000007737570706f72740e656e67656c73656272696576656e026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 27385 f03a000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 f03a800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27386 1413000000010000000000000377777709646f73616c7068656e026e6c0000010001 1413840300010000000100000377777709646f73616c7068656e026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 27387 e8f300000001000000000000036e733203687675026e6c0000010001 e8f380000001000000030003036e733203687675026e6c0000010001c0100002000100015180000906776174736f6ec010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800002c00cc0280001000100015180000491592603c03d00010001000151800004c0576a65c00c0001000100015180000491595303 27388 8a3d00000001000000000000036e733203687675026e6c0000260001 8a3d80000001000000030003036e733203687675026e6c0000260001c0100002000100015180000906776174736f6ec010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800002c00cc0280001000100015180000491592603c03d00010001000151800004c0576a65c00c0001000100015180000491595303 27389 e9fe000000010000000000000377777709646f73616c7068656e026e6c0000010001 e9fe840300010000000100000377777709646f73616c7068656e026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 27390 805700000001000000000000037777770a7365786163636f756e74026e6c0000010001 805780000001000000020002037777770a7365786163636f756e74026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c01bc01000020001000151800006036e7332c033c02f0001000100015180000452c04516c04c0001000100015180000452c04542 27391 8f9200000001000000000000046a617a7a026e6c00000f0001 8f9280000001000000020000046a617a7a026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c028 27392 d2050000000100000000000004706f703308686f737468696572026e6c0000010001 d2058000000100000002000204706f703308686f737468696572026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02e00010001000151800004d5efb51fc03f00010001000151800004d5efb520 27393 c6060000000100000000000004706f703308686f737468696572026e6c0000010001 c6068000000100000002000204706f703308686f737468696572026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02e00010001000151800004d5efb51fc03f00010001000151800004d5efb520 27394 eea900000001000000000000037777770377786e026e6c0000010001 eea980000001000000020002037777770377786e026e6c0000010001c0100002000100015180000c026e7306636f6d6e6574c014c01000020001000151800006036e7332c02bc02800010001000151800004d46c106ec04000010001000151800004d46c1078 27395 b0c700000001000000000000026e73076e656473746174026e6c0000010001 b0c780000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27396 ca5400000001000000000000037777770c74696e6b65726e69636b656c026e6c0000010001 ca5480000001000000020000037777770c74696e6b65726e69636b656c026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 27397 f80c00000001000000000000036e733205786c722d38026e6c0000010001 f80c80000001000000020002036e733205786c722d38026e6c0000010001c01000020001000151800009036e7331026973c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5852102c03f00010001000151800004d5c41503 27398 55e0000000010000000000000377777704766b6574026e6c0000010001 55e0800000010000000200020377777704766b6574026e6c0000010001c0100002000100015180000f026e7309656174736572766572c015c01000020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 27399 16a000000001000000000000026e73076e656473746174026e6c0000010001 16a080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27400 857a00000001000000000000026e73067a6f6e6e6574026e6c0000010001 857a80000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 27401 9e230000000100000000000005706f6d617a026e6c00000f0001 9e238000000100000002000005706f6d617a026e6c00000f0001c00c0002000100015180001504646e73310a65617379736572766572036e657400c00c0002000100015180000704646e7332c02b 27402 e02c0000000100000000000009696e686f6c6c616e64026e6c0000010001 e02c8000000100000002000209696e686f6c6c616e64026e6c0000010001c00c00020001000151800006036e7331c00cc00c0002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c2ab230bc03c00010001000151800004c0576a65 27403 f863000000010000000000000377777706636f6d706171026e6c0000010001 f863800000010000000200000377777706636f6d706171026e6c0000010001c0100002000100015180001c0a6e73312d7075626c6963047a72656f06636f6d70617103636f6d00c0100002000100015180000d0a6e73322d7075626c6963c036 27404 2b4c000000010000000000000377777708726164696f33666d026e6c0000010001 2b4c800000010000000300030377777708726164696f33666d026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 27405 8e780000000100000000000005636d7330320769736973776562026e6c0000010001 8e788000000100000003000305636d7330320769736973776562026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7334c012c02e00010001000151800004d4ccca65c04000010001000151800004510440dec05200010001000151800004510440fa 27406 33d400000001000000000000037777770f6d61726e697867796d6e617369756d026e6c0000010001 33d480000001000000020000037777770f6d61726e697867796d6e617369756d026e6c0000010001c01000020001000151800017026e7309726f7474657264616d046c756e61036e657400c0100002000100015180000f026e7309686f6f6664646f7270c041 27407 1a9b000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 1a9b800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 27408 1a9c000000010000000000000870686f626f7330320761626e616d726f026e6c0000010001 1a9c800000010000000200020870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c 27409 7daa0000000100000000000003777777076b696e74656e74026e6c0000010001 7daa8000000100000002000003777777076b696e74656e74026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c032 27410 abee0000000100000000000008626f6765726d616e026e6c00000f0001 abee8000000100000002000208626f6765726d616e026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 27411 21f000000001000000000000037777770773717561726531026e6c0000010001 21f080000001000000020001037777770773717561726531026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02c000100010001518000043eb1b48a 27412 203900000001000000000000037777770361666b026e6c0000010001 203980000001000000030002037777770361666b026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c014c01000020001000151800006036e7332c02cc01000020001000151800012036e7333086c65617365776562036f726700c028000100010001518000043ed44079c043000100010001518000043ed4407a 27413 00cd00000001000000000000036e657403686363026e6c0000ff0001 00cd80000001000000020000036e657403686363026e6c0000ff0001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 27414 34a10000000100000000000009736f6e6572616d6169026e6c00000f0001 34a18403000100000001000009736f6e6572616d6169026e6c00000f0001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 27415 5b2f083d50040000c2170000000000000000 5b2f88340000000000000000 27416 11cc00000001000000000000036e73330767617574656e67026e6c0000010001 11cc80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27417 208400000001000000000000037777770f6472696e6b656e656e64616e73656e026e6c0000010001 208480000001000000020002037777770f6472696e6b656e656e64616e73656e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c020c01000020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 27418 8e8600000001000000000000036e7332076e656473746174026e6c0000010001 8e8680000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27419 8e8700000001000000000000036e7334076e656473746174026e6c0000010001 8e8780000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27420 3ec500000001000000000000037777770a7765726b74756967656e026e6c0000010001 3ec580000001000000020002037777770a7765726b74756967656e026e6c0000010001c0100002000100015180000a036e733103686978c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5a0da0ac0450001000100015180000451112ec3 27421 b28000100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 b28080000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 27422 6ccf00100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 6ccf80000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 27423 0c3b000000010000000000000674726176656c0765787065646961026e6c00000f0001 0c3b800000010000000200000674726176656c0765787065646961026e6c00000f0001c013000200010001518000140570646e733108726567697374657203636f6d00c013000200010001518000080570646e7332c035 27424 51ae0000000100000000000005796d657265026e6c0000ff0001 51ae8000000100000002000205796d657265026e6c0000ff0001c00c00020001000151800011026e730b666163696e676661637473c012c00c00020001000151800006036e7332c029c02600010001000151800004d513b013c04300010001000151800004d513b012 27425 6c1e00000001000000000000056e6c6c6767026e6c00000f0001 6c1e80000001000000020002056e6c6c6767026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 27426 c41000000001000000000000026e73076e656473746174026e6c0000010001 c41080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27427 9b3e00000001000000000000056e667573650b6d696e6f6c74612d716d73026e6c0000010001 9b3e80000001000000020000056e667573650b6d696e6f6c74612d716d73026e6c0000010001c01200020001000151800012036e7331086e65746e616d6573036e657400c01200020001000151800006036e7332c036 27428 afd8000000010000000000000867746167616d6573026e6c0000010001 afd8800000010000000200000867746167616d6573026e6c0000010001c00c00020001000151800014036e73310a646f776e6c6f6164656e03636f6d00c00c0002000100015180001a036e733211636173686d6f6e657962726f746865727302626500 27429 27cf000000010000000000000776616e6b656570026e6c0000010001 27cf800000010000000200020776616e6b656570026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 27430 620800000001000000000000036e7333076e656473746174026e6c0000010001 620880000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27431 e7a700000001000000000000037777770a696e7465727374617473026e6c0000010001 e7a780000001000000020000037777770a696e7465727374617473026e6c0000010001c01000020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01000020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 27432 b3450010000100000000000106485342444e5309485342524142414e54026e6c00000100010000290800000080000000 b3458000000100000002000306485342444e5309485342524142414e54026e6c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01dc00c00010001000151800004913001fac03f00010001000151800004c0576a650000291000000000000000 27433 4ab9000000010000000000000a6563687465726e616368026e6c00000f0001 4ab9800000010000000200000a6563687465726e616368026e6c00000f0001c00c0002000100015180001104726171390662697a6e697a036e657400c00c00020001000151800008057261713134c030 27434 d3cd0000000100000000000003777777076e6f7661736f6c026e6c0000010001 d3cd8000000100000002000003777777076e6f7661736f6c026e6c0000010001c010000200010001518000130761757468323030026e73027575036e657400c0100002000100015180000a0761757468323130c034 27435 c7f20000000100000000000003637532026e6c0000010001 c7f28000000100000002000203637532026e6c0000010001c00c00020001000151800012036e73310b6d6564696164657369676ec010c00c00020001000151800006036e7332c028c02400010001000151800004c3b1f203c04200010001000151800004d4ccf533 27436 a2ec000000010000000000000377777708676f6f6434796f75026e6c0000010001 a2ec800000010000000200020377777708676f6f6434796f75026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d994ae77c04b000100010001518000045054ea06 27437 0e5b000000010000000000000a66756e6e7967616d6573026e6c00000f0001 0e5b800000010000000200000a66756e6e7967616d6573026e6c00000f0001c00c00020001000151800014046e733031096772616669782d697303636f6d00c00c00020001000151800007046e733033c030 27438 0e3000000001000000000000037777770b726164696f73616e67616d026e6c0000010001 0e3080000001000000020000037777770b726164696f73616e67616d026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c034 27439 37b600000001000000000000036e73310b706c7573686f7374696e67026e6c0000010001 37b680000001000000020002036e73310b706c7573686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d994ae77c03e000100010001518000045054ea06 27440 c98f00000001000000000000036e73320b706c7573686f7374696e67026e6c0000010001 c98f80000001000000020002036e73320b706c7573686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d994ae77c00c000100010001518000045054ea06 27441 8c690000000100000000000003777777046476686e026e6c0000010001 8c698000000100000003000303777777046476686e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004c1ad573dc04600010001000151800004c1ad573ec05800010001000151800004d5880089 27442 8e4b000000010000000000000377777709746570656c6b6c656d026e6c0000010001 8e4b800000010000000300020377777709746570656c6b6c656d026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 27443 a8ea00000001000000000000036e7333076e656473746174026e6c0000010001 a8ea80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27444 4ef500000001000000000000037777770b6d61726b74706c61617473026e6c0000010001 4ef580000001000000020000037777770b6d61726b74706c61617473026e6c0000010001c0100002000100015180000f036e733105796b6f6f6e036e657400c01000020001000151800006036e7332c034 27445 e68e00000001000000000000037777770867736d706c617a61026e6c0000010001 e68e80000001000000020000037777770867736d706c617a61026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 27446 d67600000001000000000000037777770e73616c6573636f6d70616e696f6e026e6c0000010001 d67680000001000000020002037777770e73616c6573636f6d70616e696f6e026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c01fc01000020001000151800006036e7332c036c03300010001000151800004d5e38d0ac05000010001000151800004d5e38205 27447 fcf90000000100000000000003777777026e6e026e6c0000010001 fcf98000000100000002000203777777026e6e026e6c0000010001c0100002000100015180000a036e733103696e67c013c01000020001000151800006036e7332c02bc0270001000100015180000491dd19c2c03d0001000100015180000491dd5dc2 27448 4e4d00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 4e4d80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 27449 9ec700100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 9ec780000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 27450 892e00000001000000000000046d61696c06636861726973026e6c0000010001 892e80000001000000020000046d61696c06636861726973026e6c0000010001c0110002000100015180000c026e7306766576696461c018c01100020001000151800006036e7332c02f 27451 e80a00000001000000000001034e53320f444f4d41494e2d5245474953545259026e6c00000100010000291000000000000000 e80a80000001000000030003034e53320f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 27452 6e4600000001000000000001034e53350f444f4d41494e2d5245474953545259026e6c00000100010000291000000000000000 6e4680000001000000030003034e53350f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 27453 fdc500000001000000000001024e530f444f4d41494e2d5245474953545259026e6c00000100010000291000000000000000 fdc580000001000000030003024e530f444f4d41494e2d5245474953545259026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a650000291000000000000000 27454 898e00000001000000000000026e73076e656473746174026e6c0000010001 898e80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27455 000628000001000200000000026e6c00000600010a636f6d70757465723138056e70696276026e6c00000500fe000000000000c01400010001000000000004c0a80117 0006a8040000000000000000 27456 e26d00000001000000000000036e7333076e656473746174026e6c0000010001 e26d80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27457 bffc0000000100000000000006485342444e5309485342524142414e54026e6c0000010001 bffc8000000100000002000206485342444e5309485342524142414e54026e6c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01dc00c00010001000151800004913001fac03f00010001000151800004c0576a65 27458 823c00000001000000000000036e733204686f6d65026e6c0000010001 823c80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 27459 155f00000001000000000000036e733107626c7565646e73026e6c0000010001 155f80000001000000020002036e733107626c7565646e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5c401c0c03a00010001000151800004d5c4035a 27460 f57600000001000000000000037777770b73696b6b656d6134616c6c026e6c0000010001 f57680000001000000020002037777770b73696b6b656d6134616c6c026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c01cc01000020001000151800006036e7332c034c03000010001000151800004d5c9e8c8c05000010001000151800004d5c9e8c9 27461 3b45000000010000000000000863686970736f6674026e6c00000f0001 3b45800000010000000300010863686970736f6674026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000d036e733006697061726978c015c00c00020001000151800006036e7331c03fc02900010001000151800004d443a509 27462 e27b00000001000000000000026e730c6d65676170726f7669646572026e6c0000010001 e27b80000001000000030003026e730c6d65676170726f7669646572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c0001000100015180000450474002c03e0001000100015180000450474102c05000010001000151800004d943ee57 27463 d43b00000001000000000000026e730c6d65676170726f7669646572026e6c00001c0001 d43b80000001000000030003026e730c6d65676170726f7669646572026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c0001000100015180000450474002c03e0001000100015180000450474102c05000010001000151800004d943ee57 27464 99bf00000001000000000000036e73320c6d65676170726f7669646572026e6c0000010001 99bf80000001000000030003036e73320c6d65676170726f7669646572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0310001000100015180000450474002c00c0001000100015180000450474102c05000010001000151800004d943ee57 27465 8fce00000001000000000000036e73320c6d65676170726f7669646572026e6c00001c0001 8fce80000001000000030003036e73320c6d65676170726f7669646572026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0310001000100015180000450474002c00c0001000100015180000450474102c05000010001000151800004d943ee57 27466 1740000000010000000000000377777708706f737462616e6b026e6c0000010001 1740800000010000000200020377777708706f737462616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c019c01000020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 27467 c918000000010000000000000f646f6d61696e2d7265676973747279026e6c0000010001 c918800000010000000300020f646f6d61696e2d7265676973747279026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000e036e733107737572666e6574c01cc00c0002000100015180000b026e73026e6c036e657400c03000010001000151800004c1b09002c04100010001000151800004c0576a65 27468 d0e200000001000000000000036e733109666972737466696e64026e6c0000010001 d0e280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27469 d0e300000001000000000000036e733209666972737466696e64026e6c0000010001 d0e380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27470 48d8000000010000000000000377777709736563757374726970026e6c0000010001 48d8800000010000000200000377777709736563757374726970026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c031 27471 6e8100000001000000000000036e7332056d61786573026e6c0000010001 6e8180000001000000030003036e7332056d61786573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a000100010001518000045045402ec00c000100010001518000045045402fc04a000100010001518000045045440a 27472 365e00000001000000000000036e7331056d61786573026e6c0000010001 365e80000001000000030003036e7331056d61786573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000045045402ec038000100010001518000045045402fc04a000100010001518000045045440a 27473 fbd500000001000000000000036e7333056d61786573026e6c0000010001 fbd580000001000000030003036e7333056d61786573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02a000100010001518000045045402ec03c000100010001518000045045402fc00c000100010001518000045045440a 27474 b220000000010000000000000d6261736973656e62656c656964026e6c00000f0001 b220800000010000000300010d6261736973656e62656c656964026e6c00000f0001c00c0002000100015180000d026e7307696e746f756368c01ac00c00020001000151800010026e7307696e746f756368036e657400c00c00020001000151800007046e733031c04ac02e00010001000151800004d413c001 27475 ce1500000001000000000000036e7331026973026e6c0000010001 ce1580000001000000020002036e7331026973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852102c03500010001000151800004d5c41503 27476 f7d600000001000000000000037777770d70656c6173747573746f696d69036e657408656d6561636f7265026e6c0000010001 f7d684030001000000010000037777770d70656c6173747573746f696d69036e657408656d6561636f7265026e6c0000010001c02b00060001000038400036026e730f646f6d61696e2d7265676973747279c02b0a686f73746d6173746572c0420bf1e540000070800000384000278d0000003840 27477 9ff600000001000000000000036e7332026973026e6c0000010001 9ff680000001000000020002036e7332026973026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02700010001000151800004d5852102c00c00010001000151800004d5c41503 27478 1c2000000001000000000000096e6f6f726473746164026e6c00000f0001 1c2080000001000000020002096e6f6f726473746164026e6c00000f0001c00c00020001000151800010036e733109756e69736572766572c016c00c00020001000151800006036e7332c02ec02a00010001000151800004c3454b03c04600010001000151800004d119a2fa 27479 09e000000001000000000000036e73330767617574656e67026e6c0000010001 09e080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27480 21ee00000001000000000000036e73330767617574656e67026e6c0000010001 21ee80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27481 b7e70000000100000000000009736368726575646572026e6c00000f0001 b7e78000000100000002000009736368726575646572026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c016c00c0002000100015180000704686e7331c02f 27482 f7680000000100000000000003494e44064d494e4a5553024e4c00001c0001 f7688000000100000002000003494e44064d494e4a5553024e4c00001c0001c01000020001000151800011036e736a0365736e036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 27483 c0550000000100000000000005666f72756d0a636c7562636861727473026e6c0000010001 c0558000000100000002000205666f72756d0a636c7562636861727473026e6c0000010001c0120002000100015180000a036e7331036e7873c01dc01200020001000151800006036e7332c035c03100010001000151800004d973c015c04700010001000151800004d973c102 27484 36000000000100000000000009652d6c756e61746963026e6c0000010001 36008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 27485 d0e600000001000000000000036e733209666972737466696e64026e6c0000010001 d0e680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27486 d0e500000001000000000000036e733109666972737466696e64026e6c0000010001 d0e580000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27487 29f200000001000000000000036e73340767617574656e67026e6c0000010001 29f280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27488 09fe00000001000000000000036e73340767617574656e67026e6c0000010001 09fe80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27489 f96c00000001000000000000076c7569736d616e036a7668026e6c00000f0001 f96c80000001000000020002076c7569736d616e036a7668026e6c00000f0001c01400020001000151800012036e73310b7669616e6574776f726b73c018c01400020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 27490 e80a00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000010001 e80a80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27491 6e4600000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000010001 6e4680000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27492 fdc500000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000010001 fdc580000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 27493 1d82000000010000000000000361636b026e6c0000010001 1d82800000010000000200020361636b026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 27494 0ded00000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 0ded80000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 27495 d36400000001000000000000026e7306787334616c6c026e6c0000010001 d36480000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 27496 ba7e00000001000000000000036e733109756e69736f75726365026e6c0000010001 ba7e80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 27497 2edb00000001000000000000036e733206787334616c6c026e6c0000010001 2edb80000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 27498 b0af00000001000000000000037777770961756469666f72756d026e6c0000010001 b0af80000001000000020000037777770961756469666f72756d026e6c0000010001c01000020001000151800013026e730a636c617373696377656203636f6d00c01000020001000151800006036e7332c031 27499 c29000000001000000000000037777770f6c6170746f7077656277696e6b656c026e6c0000010001 c29080000001000000030000037777770f6c6170746f7077656277696e6b656c026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c03ac0100002000100015180000805646e733132c03a 27500 c011000000010000000000000672656c6179310b7669616e6574776f726b73026e6c0000010001 c011800000010000000200020672656c6179310b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 27501 eada000000010000000000000377777707706974626f7264026e6c0000010001 eada800000010000000300000377777707706974626f7264026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c031c01000020001000151800007046e733033c031 27502 974b00000001000000000000046e733032066368656c6c6f026e6c0000010001 974b80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 27503 e4c90000000100000000000006636861726973026e6c00000f0001 e4c98000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 27504 d586000000010000000000000c6d63636e656465726c616e64026e6c0000ff0001 d586800000010000000300030c6d63636e656465726c616e64026e6c0000ff0001c00c00020001000151800010036e733109736974656279746573c019c00c00020001000151800006036e7332c031c00c00020001000151800006036e7333c031c02d00010001000151800004c2a55e5ac04900010001000151800004c356781cc05b000100010001518000043ec58016 27505 d4f600000001000000000000096d61696c72656c6179066e6c74726565026e6c0000010001 d4f680000001000000020002096d61696c72656c6179066e6c74726565026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03100010001000151800004d4b20403c04300010001000151800004d5881e45 27506 90730000000100000000000005646e732d31056c61646f74026e6c0000010001 90738000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27507 3eea0000000100000000000005646e732d32056c61646f74026e6c0000010001 3eea8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27508 dd55000000010000000000000462617261026e6c00000f0001 dd55800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 27509 e16700000001000000000000037777770a63642d7569746c65656e026e6c0000010001 e16780000001000000020002037777770a63642d7569746c65656e026e6c0000010001c0100002000100015180000e036e7331076f6d732d6e6574c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5efb22fc04900010001000151800004d5ef9d07 27510 bf9b00000001000000000000037777770d6765696c652d7469656e657273026e6c0000010001 bf9b80000001000000020000037777770d6765696c652d7469656e657273026e6c0000010001c01000020001000151800019026e73106575726f6d656469617472616666696303636f6d00c01000020001000151800006036e7332c035 27511 3592000000010000000000000469632d73026e6c00001c0001 3592800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 27512 43ef000000010000000000000776657273696f6e0462696e640000100003 43ef800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 27513 a3c00000000100000000000003777777136b616465747467736974756e696e67636c7562026e6c0000010001 a3c08000000100000003000003777777136b616465747467736974756e696e67636c7562026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c03ec0100002000100015180000805646e733132c03e 27514 74e80000000100000000000005646e732d31056c61646f74026e6c0000010001 74e88000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27515 c07d0000000100000000000003504f5006417274696361026e6c0000010001 c07d8000000100000002000203504f5006417274696361026e6c0000010001c01000020001000151800012036e73310b696e7465727374726f6f6dc017c01000020001000151800006036e7332c02fc02b0001000100015180000450558121c04900010001000151800004d58141c4 27516 18b50000000100000000000005756c656164026e6c00000f0001 18b58000000100000003000305756c656164026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c012c00c000200010001518000070470726932c02bc00c000200010001518000070470726933c02bc026000100010001518000049a0ff9a6c044000100010001518000049a0ff9aac057000100010001518000049a0ff9ae 27517 4e8600000001000000000000036e73310a636c75737465726e6574026e6c0000010001 4e8680000001000000020002036e73310a636c75737465726e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054edf5c03d00010001000151800004d5f72f3c 27518 203900000001000000000000037777770361666b026e6c0000010001 203980000001000000030002037777770361666b026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c014c01000020001000151800006036e7332c02cc01000020001000151800012036e7333086c65617365776562036f726700c028000100010001518000043ed44079c043000100010001518000043ed4407a 27519 f16300000001000000000000086168636272616e640564656d6f6e026e6c00000f0001 f16380000001000000030002086168636272616e640564656d6f6e026e6c00000f0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 27520 46ab0000000100000000000005646e732d31056c61646f74026e6c0000010001 46ab8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27521 203900000001000000000000037777770361666b026e6c0000010001 203980000001000000030002037777770361666b026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c014c01000020001000151800006036e7332c02cc01000020001000151800012036e7333086c65617365776562036f726700c028000100010001518000043ed44079c043000100010001518000043ed4407a 27522 eda7000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 eda7800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27523 abd300000001000000000000037777770a696e7465726e65746a65026e6c0000010001 abd380000001000000030003037777770a696e7465726e65746a65026e6c0000010001c01000020001000151800010036e733109736974656279746573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004c2a55e5ac04b00010001000151800004c356781cc05d000100010001518000043ec58016 27524 2e0700000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 2e0780000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27525 66fa00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 66fa80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27526 979200000001000000000000037777770d6765696c652d7469656e657273026e6c0000010001 979280000001000000020000037777770d6765696c652d7469656e657273026e6c0000010001c01000020001000151800019026e73106575726f6d656469617472616666696303636f6d00c01000020001000151800006036e7332c035 27527 800500000001000000000001026e73076e656473746174026e6c00001c00010000291000000000000000 800580000001000000020003026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 27528 004b000000010000000000000969742d6265616b656e026e6c0000ff0001 004b800000010000000300020969742d6265616b656e026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 27529 804000000001000000000001026e73076e656473746174026e6c00002600010000291000000000000000 804080000001000000020003026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 27530 af2200000001000000000001036e7332076e656473746174026e6c00000100010000291000000000000000 af2280000001000000020003036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 27531 175100000001000000000001036e7332076e656473746174026e6c00001c00010000291000000000000000 175180000001000000020003036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 27532 379d00000001000000000000036d636f026e6c0000010001 379d80000001000000020000036d636f026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c010c00c0002000100015180000704686e7331c029 27533 2b8500000001000000000001036e7332076e656473746174026e6c00002600010000291000000000000000 2b8580000001000000020003036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 27534 0a1b00000001000000000001036e7333076e656473746174026e6c00001c00010000291000000000000000 0a1b80000001000000020003036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 27535 b2fc00000001000000000001036e7333076e656473746174026e6c00002600010000291000000000000000 b2fc80000001000000020003036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 27536 680500000001000000000001036e7334076e656473746174026e6c00000100010000291000000000000000 680580000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 27537 489200000001000000000001036e7334076e656473746174026e6c00001c00010000291000000000000000 489280000001000000020003036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 27538 ba6500000001000000000001036e7334076e656473746174026e6c00002600010000291000000000000000 ba6580000001000000020003036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 27539 788100000001000000000000036e73310f6578636c757369766564657369676e026e6c00001c0001 788180000001000000020002036e73310f6578636c757369766564657369676e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d97261bec04200010001000151800004d97261bd 27540 60a800000001000000000000036e73320f6578636c757369766564657369676e026e6c00001c0001 60a880000001000000020002036e73320f6578636c757369766564657369676e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03400010001000151800004d97261bec00c00010001000151800004d97261bd 27541 28ce00100001000000000001036e733304686f6d65026e6c00001c00010000291000000080000000 28ce80000001000000030004036e733304686f6d65026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 27542 800500000001000000000000026e73076e656473746174026e6c00001c0001 800580000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27543 ca3300000001000000000000037777770c7376736368616c6b68616172026e6c0000010001 ca3380000001000000020002037777770c7376736368616c6b68616172026e6c0000010001c01000020001000151800017036e7331107365637572656e616d65736572766572c01dc01000020001000151800006036e7332c035c0310001000100015180000442a4f102c0540001000100015180000442a4f105 27544 ca0900000001000000000000127072656e6765726d616b656c61617264696a026e6c0000010001 ca0980000001000000020000127072656e6765726d616b656c61617264696a026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c03e 27545 804000000001000000000000026e73076e656473746174026e6c0000260001 804080000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27546 af2200000001000000000000036e7332076e656473746174026e6c0000010001 af2280000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27547 41e200000001000000000000076e75616e636573026e6c0000ff0001 41e280000001000000020002076e75616e636573026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 27548 175100000001000000000000036e7332076e656473746174026e6c00001c0001 175180000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27549 771100000001000000000000036e73310c706f77657273657276657232026e6c0000010001 771180000001000000020002036e73310c706f77657273657276657232026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047414c03f0001000100015180000451047415 27550 2f0200000001000000000000036e73320c706f77657273657276657232026e6c0000010001 2f0280000001000000020002036e73320c706f77657273657276657232026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0310001000100015180000451047414c00c0001000100015180000451047415 27551 2b8500000001000000000000036e7332076e656473746174026e6c0000260001 2b8580000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27552 0a1b00000001000000000000036e7333076e656473746174026e6c00001c0001 0a1b80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27553 b2fc00000001000000000000036e7333076e656473746174026e6c0000260001 b2fc80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27554 7992000000010000000000000d6175746f74656c656772616166026e6c0000010001 7992800000010000000200000d6175746f74656c656772616166026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c032 27555 680500000001000000000000036e7334076e656473746174026e6c0000010001 680580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27556 489200000001000000000000036e7334076e656473746174026e6c00001c0001 489280000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27557 ba6500000001000000000000036e7334076e656473746174026e6c0000260001 ba6580000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27558 38840000000100000000000003777777126b6c76616e616c6c6573656e6e6f67776174026e6c0000010001 38848403000100000001000003777777126b6c76616e616c6c6573656e6e6f67776174026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 27559 cb85000000010000000000000377777704616e7366026e6c0000010001 cb85800000010000000200000377777704616e7366026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c02f 27560 ecd700000001000000000000037777770a6465636f726174696566026e6c0000010001 ecd780000001000000020000037777770a6465636f726174696566026e6c0000010001c0100002000100015180001504646e73310a65617379736572766572036e657400c0100002000100015180000704646e7332c034 27561 dc97000000010000000000000377777706736d69746873026e6c0000010001 dc97800000010000000200000377777706736d69746873026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c031 27562 acc7000000010000000000000968656e7362726f656b026e6c00000f0001 acc7800000010000000200020968656e7362726f656b026e6c00000f0001c00c00020001000151800013036e73310c666173747365727665723131c016c00c00020001000151800006036e7332c02ec02a0001000100015180000442a4f077c0490001000100015180000442a4f078 27563 a74600000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 a74680000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 27564 53a300000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 53a380000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 27565 94e700000001000000000000037777770a626c7565736c696e6b73026e6c0000010001 94e780000001000000020002037777770a626c7565736c696e6b73026e6c0000010001c0100002000100015180000a026e730469636d63c01bc01000020001000151800006036e7332c032c02f000100010001518000043e643805c045000100010001518000043e643806 27566 62e70000000100000000000003777777056173696373026e6c0000010001 62e78000000100000002000003777777056173696373026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c030 27567 281200000001000000000000036164730a686f73746d6173746572026e6c0000010001 281280000001000000020002036164730a686f73746d6173746572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02f0001000100015180000452c04516c0410001000100015180000452c04542 27568 0943000000010000000000000c766470757474656e76657266026e6c0000010001 0943800000010000000200020c766470757474656e76657266026e6c0000010001c00c0002000100015180000e036e733107686f7477697265c019c00c00020001000151800006036e7332c031c02d0001000100015180000451044b03c0470001000100015180000451044bc8 27569 d7e600000001000000000000087469736361736c69026e6c00000f0001 d7e684030001000000010000087469736361736c69026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 27570 f92a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f92a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27571 7e650000000100000000000003626c3102626c06787334616c6c026e6c0000260001 7e658000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27572 a840000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 a840800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27573 b0bd00000001000000000000046e61646f026e6c00000f0001 b0bd80000001000000020001046e61646f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c011c03e00010001000151800004c2860043 27574 54b400000001000000000000037777770d7661646572746a652d74696a64026e6c0000010001 54b480000001000000020000037777770d7661646572746a652d74696a64026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c038 27575 68ae00000001000000000000037777770c74696e6b65726e69636b656c026e6c0000010001 68ae80000001000000020000037777770c74696e6b65726e69636b656c026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 27576 6cef000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 6cef800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27577 b7de0000000100000000000005736d7470310874656c6562797465026e6c0000010001 b7de8000000100000002000205736d7470310874656c6562797465026e6c0000010001c01200020001000151800006036e7333c012c01200020001000151800006036e7334c012c02f00010001000151800004d5d38115c04100010001000151800004d5d38116 27578 318b00000001000000000000086c69766577656c6c026e6c00000f0001 318b80000001000000020000086c69766577656c6c026e6c00000f0001c00c0002000100015180000e05646e732d31056c61646f74c015c00c0002000100015180000805646e732d32c02f 27579 ab6400000001000000000000026e7306766576696461026e6c0000010001 ab6480000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 27580 58ef00000001000000000000036e733206766576696461026e6c0000010001 58ef80000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 27581 dad100000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 dad180000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 27582 7883000000010000000000000866726f6e7469657203746e6f026e6c0000010001 7883800000010000000300030866726f6e7469657203746e6f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c01500020001000151800007047a657573c015c00c0001000100015180000486dd0102c03b00010001000151800004c0576a65c0550001000100015180000486dd0202 27583 cebb000000010000000000000377777707736578636c7562026e6c0000010001 cebb800000010000000200020377777707736578636c7562026e6c0000010001c0100002000100015180000c036e7331057061727365c018c01000020001000151800006036e7332c030c02c00010001000151800004d5ef9b0bc04400010001000151800004d5efb238 27584 334e00000001000000000000046e7330320a77656273797374656d73026e6c0000010001 334e80000001000000020002046e7330320a77656273797374656d73026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc03000010001000151800004d4cccf12c00c000100010001518000043eddd552 27585 03d000000001000000000000046e7330310a77656273797374656d73026e6c0000010001 03d080000001000000020002046e7330310a77656273797374656d73026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c00c00010001000151800004d4cccf12c03e000100010001518000043eddd552 27586 78c000000001000000000000036e73310a77656273797374656d73026e6c0000010001 78c080000001000000020002036e73310a77656273797374656d73026e6c0000010001c01000020001000151800007046e733031c010c01000020001000151800007046e733032c010c02f00010001000151800004d4cccf12c042000100010001518000043eddd552 27587 c50800000001000000000000036e73320a77656273797374656d73026e6c0000010001 c50880000001000000020002036e73320a77656273797374656d73026e6c0000010001c01000020001000151800007046e733031c010c01000020001000151800007046e733032c010c02f00010001000151800004d4cccf12c042000100010001518000043eddd552 27588 8b4000000001000000000000046d61696c0967622d6d616e636f6e026e6c0000010001 8b4080000001000000020002046d61696c0967622d6d616e636f6e026e6c0000010001c0110002000100015180000f026e7309656174736572766572c01bc01100020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 27589 bb9300100001000000000001036e7331056132303030026e6c00000100010000290800000080000000 bb9380000001000000030003036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 27590 78ee00100001000000000001036e7332056132303030026e6c00000100010000290800000080000000 78ee80000001000000030003036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 27591 dc0c0000000100000000000006787334616c6c026e6c0000010001 dc0c8000000100000003000206787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 27592 020900000001000000000000036e73330767617574656e67026e6c0000010001 020980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27593 3dcc000000010000000000000473616261026e6c0000010001 3dcc800000010000000200020473616261026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 27594 0000000060025e38cd070000020405b40000 000080010000000000000000 27595 42d300000001000000000000037777770670726f746571026e6c0000010001 42d380000001000000020000037777770670726f746571026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c02f 27596 d5a50000000100000000000007746f626f746578026e6c00001c0001 d5a58000000100000002000207746f626f746578026e6c00001c0001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 27597 1b3000000001000000000000026872026e6c0000010001 1b3080000001000000020000026872026e6c0000010001c00c00020001000151800013036e7331026e6c0669676e697465036e657400c00c00020001000151800006036e7332c027 27598 b6185ae050102da004540000000000000000 b618dae40000000000000000 27599 214b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 214b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27600 9f9d00000001000000000000046d61696c0a7a6f726762616c616e73026e6c0000010001 9f9d80000001000000020002046d61696c0a7a6f726762616c616e73026e6c0000010001c01100020001000151800011036e73310a6d756c74696b6162656cc01cc01100020001000151800006036e7332c034c0300001000100015180000450f2e002c04d0001000100015180000450f2e006 27601 ec740000000100000000000008696e746572636169026e6c00000f0001 ec748000000100000002000008696e746572636169026e6c00000f0001c00c00020001000151800014036e733108747572626f646e7302636f02756b00c00c00020001000151800006036e7332c02d 27602 2fc900000001000000000000037777770967726f656e67656c64026e6c0000010001 2fc980000001000000020000037777770967726f656e67656c64026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c031 27603 31600000000100000000000002343603313437023539033134320770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 31608000000100000002000202343603313437023539033134320770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 27604 4a4700000001000000000000037777770e73636f6f7465722d667265616b73026e6c0000010001 4a4780000001000000020000037777770e73636f6f7465722d667265616b73026e6c0000010001c0100002000100015180000f036e733105726f6f647303636f6d00c01000020001000151800006036e7332c037 27605 a6360000000100000000000004646e7331057368656c6c026e6c0000010001 a6368000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 27606 d262000000010000000000000377777709746b65657270756e74026e6c0000010001 d262800000010000000200000377777709746b65657270756e74026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 27607 271d0000000100000000000003777777047a656e6e026e6c0000010001 271d8000000100000002000203777777047a656e6e026e6c0000010001c0100002000100015180000c04646e73310471776562c015c0100002000100015180000704646e7332c02ec02900010001000151800004d994ac0cc04100010001000151800004d5c42f6c 27608 4a5c00000001000000000000076275726d656573026e6c00000f0001 4a5c80000001000000020000076275726d656573026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02e 27609 bc7700000001000000000000036e7331056132303030026e6c0000010001 bc7780000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 27610 2bff00000001000000000000036e7332056132303030026e6c0000010001 2bff80000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 27611 214e00000001000000000000046d61696c0674696b74616b026e6c0000010001 214e80000001000000020002046d61696c0674696b74616b026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800009036e733202696fc018c02c000100010001518000045111281dc03e0001000100015180000451112202 27612 8fdd0000000100000000000006736d7470303103736662026e6c0000010001 8fdd8000000100000002000206736d7470303103736662026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c02b00010001000151800004d4f1290dc03d00010001000151800004d4f1290e 27613 35bf000000010000000000000377777707766f6c64657273026e6c0000010001 35bf800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 27614 64aa0000000100000000000004686331310564656d6f6e026e6c0000ff0001 64aa8000000100000003000204686331310564656d6f6e026e6c0000ff0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 27615 ff1d00000001000000000000037777770667726f656e65026e6c0000010001 ff1d80000001000000020002037777770667726f656e65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 27616 7e7000100001000000000001036d783103626974026e6c00000100010000290800000080000000 7e7080000001000000030004036d783103626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b0000291000000000000000 27617 00500000000100000000000003706f700b6f74742d6d6f746f72656e026e6c0000010001 00508000000100000002000003706f700b6f74742d6d6f746f72656e026e6c0000010001c0100002000100015180000c026e7306766576696461c01cc01000020001000151800006036e7332c033 27618 d17a000000010000000000000377777709676f757765736c6167026e6c0000010001 d17a800000010000000200000377777709676f757765736c6167026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 27619 b7150000000100000000000005646e732d31056c61646f74026e6c0000010001 b7158000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27620 b7160000000100000000000005646e732d32056c61646f74026e6c0000010001 b7168000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27621 b6185ae050102da081160000008c4dd3000000010001000000000e3932373731323933353935342d330000f900010e3932373731323933353935342d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd65403c4ee500030000002f4e544c4d535350000100000097b200e0050005002a0000000a000a0020000000434f4d505554455231384e504942560000 b618dae40000000000000000 27622 4c6d00000001000000000000023839023937033231360236360a626c61636b686f6c657307656173796e6574026e6c0000010001 4c6d80000001000000020002023839023937033231360236360a626c61636b686f6c657307656173796e6574026e6c0000010001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 27623 839c00000001000000000000023930023835033136350236370770726f786965730a626c61636b686f6c657307656173656e6574026e6c0000010001 839c84030001000000010000023930023835033136350236370770726f786965730a626c61636b686f6c657307656173656e6574026e6c0000010001c03400060001000038400036026e730f646f6d61696e2d7265676973747279c0340a686f73746d6173746572c04b0bf1e540000070800000384000278d0000003840 27624 a1330000000100000000000005776562313108696e74726f776562026e6c0000010001 a1338000000100000002000205776562313108696e74726f776562026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02f0001000100015180000450416028c04100010001000151800004c356780c 27625 b6185aee501027ec096c0000000000000000 b618dae40000000000000000 27626 25cc000000010000000000000377777707766f6c64657273026e6c0000010001 25cc800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 27627 b8fe00000001000000000000046d61696c0477696e69026e6c0000010001 b8fe80000001000000020002046d61696c0477696e69026e6c0000010001c0110002000100015180000f026e7309656174736572766572c016c01100020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 27628 25c0000000010000000000000377777707766f6c64657273026e6c0000010001 25c0800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 27629 bbb80000000100000000000003777777097068696c666f6e6473026e6c0000010001 bbb88000000100000002000203777777097068696c666f6e6473026e6c0000010001c0100002000100015180000f036e7331086261726d61746f6ec01ac01000020001000151800006036e7332c032c02e00010001000151800004d5a0da96c04900010001000151800004d5a0da64 27630 e89600000001000000000000037777770d766c696567746172696576656e026e6c0000010001 e89680000001000000020002037777770d766c696567746172696576656e026e6c0000010001c0100002000100015180000e036e733007656173796e6574c01ec01000020001000151800006036e7331c036c03200010001000151800004c2a55e01c04c00010001000151800004c2a55e05 27631 7902000000010000000000000331373202323101310131026e6c0000010001 7902840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 27632 399a00000001000000000000037777770a6e657767726f756e6473026e6c0000010001 399a80000001000000020000037777770a6e657767726f756e6473026e6c0000010001c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c01000020001000151800006036e7334c033 27633 14fa00000001000000000000036e733109666972737466696e64026e6c0000010001 14fa80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27634 766e00000001000000000000036e733209666972737466696e64026e6c0000010001 766e80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27635 035f000000010000000000000377777706617265613137026e6c0000010001 035f800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 27636 ef2c00000001000000000000026772026e6c00000f0001 ef2c80000001000000020000026772026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c029 27637 1fb900000001000000000000036d783103626974026e6c0000010001 1fb980000001000000030003036d783103626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 27638 468d000000010000000000000377777706617265613137026e6c0000010001 468d800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 27639 8eba00000001000000000000036e7331046372696f026e6c0000010001 8eba80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27640 736500000001000000000000036e7332046372696f026e6c0000010001 736580000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27641 3a1a00000001000000000000047072693203646e73067073696e6574026e6c0000010001 3a1a80000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 27642 281000000001000000000000047072693103646e73067073696e6574026e6c0000010001 281080000001000000030003047072693103646e73067073696e6574026e6c0000010001c01500020001000151800002c00cc015000200010001518000070470726932c011c015000200010001518000070470726933c011c00c000100010001518000049a0ff9a6c03e000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 27643 dfb1000000010000000000000466646467026e6c0000ff0001 dfb1800000010000000200020466646467026e6c0000ff0001c00c0002000100015180000e026e73086d656761706c6578c011c00c00020001000151800006036e7331c028c02500010001000151800004504f6101c03f00010001000151800004504f6102 27644 06860000000100000000000009776f6f6e6b72616e74026e6c00000f0001 06868000000100000002000009776f6f6e6b72616e74026e6c00000f0001c00c00020001000151800011036e733107636f6e78696f6e036e657400c00c00020001000151800006036e7332c02e 27645 765100000001000000000000046e637276026e6c00000f0001 765180000001000000020002046e637276026e6c00000f0001c00c00020001000151800010066d696e6e6965066f6d726f6570c011c00c0002000100015180000805726f62696ec02cc02500010001000151800004913a1e04c04100010001000151800004913a1a34 27646 d3a600000001000000000000074f424a4a4f4253026e6c0000020001 d3a684030001000000010000074f424a4a4f4253026e6c0000020001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 27647 7a7400000001000000000000037777770464696766026e6c0000010001 7a7484030001000000010000037777770464696766026e6c0000010001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 27648 df5c00000001000000000000037777770976696572787672696a026e6c0000010001 df5c80000001000000020002037777770976696572787672696a026e6c0000010001c01000020001000151800012026e730c686f6c696461796d65646961c01ac01000020001000151800006036e7333c031c02e000100010001518000049265424dc04c000100010001518000045054ebbf 27649 35410000000100000000000003626c3102626c06787334616c6c026e6c0000010001 35418000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27650 b23c00000001000000000000096d6f6f697468756973026e6c0000010001 b23c80000001000000020002096d6f6f697468756973026e6c0000010001c00c0002000100015180000d026e730777697a7a626974c016c00c00020001000151800006036e7332c02dc02a000100010001518000043e3a360bc043000100010001518000043e3a360c 27651 dbc400000001000000000000036e733206657472616465026e6c00001c0001 dbc480000001000000020000036e733206657472616465026e6c00001c0001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 27652 afd100000001000000000000036e733206657472616465026e6c0000260001 afd180000001000000020000036e733206657472616465026e6c0000260001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 27653 44d300000001000000000000036e733106657472616465026e6c00001c0001 44d380000001000000020000036e733106657472616465026e6c00001c0001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 27654 ee2400000001000000000000036e733106657472616465026e6c0000260001 ee2480000001000000020000036e733106657472616465026e6c0000260001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 27655 3a3200000001000000000000036e73330767617574656e67026e6c0000010001 3a3280000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27656 123d00000001000000000000036e73330767617574656e67026e6c0000010001 123d80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27657 6a3a0000000100000000000003777777097370656c656e77696e026e6c0000010001 6a3a8000000100000003000003777777097370656c656e77696e026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 27658 20ec00000001000000000000036e733109666972737466696e64026e6c0000010001 20ec80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27659 11d900000001000000000000036e733209666972737466696e64026e6c0000010001 11d980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 27660 61a100000001000000000000087665726b61617274026e6c00000f0001 61a180000001000000020002087665726b61617274026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c015c00c00020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 27661 be9b00000001000000000000037777770a737065726d616e656e74026e6c0000010001 be9b80000001000000020002037777770a737065726d616e656e74026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01bc01000020001000151800006036e7332c033c02f00010001000151800004d5efa011c04a00010001000151800004d5efa075 27662 540b00000001000000000000037777770f7370617274612d656e736368656465026e6c0000010001 540b80000001000000020002037777770f7370617274612d656e736368656465026e6c0000010001c0100002000100015180000d04696973310577696e646fc020c01000020001000151800008056969733137c039c03400010001000151800004d9aa050bc04d00010001000151800004d9aa0430 27663 447300000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 447380000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 27664 d4bb000000010000000000000377777706696e666f726d026e6c0000010001 d4bb800000010000000200020377777706696e666f726d026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c017c01000020001000151800006036e7332c02ec02b00010001000151800004d5e38d0ac04800010001000151800004d5e38205 27665 09c700000001000000000000023839023937033231360236360a626c61636b686f6c657307656173796e6574026e6c0000050001 09c780000001000000020002023839023937033231360236360a626c61636b686f6c657307656173796e6574026e6c0000050001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 27666 5f4b00000001000000000000046e6f7661026e6c0000ff0001 5f4b80000001000000020002046e6f7661026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 27667 ea340000000100000000000007707269766174650577772d6569026e6c0000010001 ea348000000100000002000007707269766174650577772d6569026e6c0000010001c01400020001000151800012036e7333087a6f6e656564697403636f6d00c01400020001000151800006036e7337c032 27668 f04500100001000000000001036d783102686e026e6c00000100010000290800000080000000 f04580000001000000020001036d783102686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02b0000291000000000000000 27669 2e1800000001000000000000026e7308696e7465726c6162026e6c0000010001 2e1880000001000000020002026e7308696e7465726c6162026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0902c03a00010001000151800004d4cb0903 27670 170c00000001000000000000036e733208696e7465726c6162026e6c0000010001 170c80000001000000020002036e733208696e7465726c6162026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004d4cb0902c00c00010001000151800004d4cb0903 27671 be0e0000000100000000000003777777076c696272617279027575026e6c0000010001 be0e8000000100000004000403777777076c696272617279027575026e6c0000010001c01800020001000151800005026e73c018c01800020001000151800006036e7332c018c0180002000100015180000e036e733107737572666e6574c01bc01800020001000151800006036e7333c018c02f0001000100015180000483d30405c0400001000100015180000483d30406c05200010001000151800004c0576a65c06c0001000100015180000483d31020 27672 7abe0000000100000000000003777777076861617267656c026e6c0000010001 7abe8000000100000003000303777777076861617267656c026e6c0000010001c01000020001000151800013046e7330310b786c2d696e7465726e6574c018c01000020001000151800007046e733032c031c01000020001000151800007046e733033c031c02c0001000100015180000451045e10c04b000100010001518000043eddcf2ec05e00010001000151800004d5540e0e 27673 01e800000001000000000000036e733208782d73747265616d026e6c0000260001 01e880000001000000030003036e733208782d73747265616d026e6c0000260001c01000020001000151800006036e7330c010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d48bc002c03f00010001000151800004d48b0003c00c00010001000151800004d48bc003 27674 f78e000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 f78e800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27675 1a5400000001000000000000036e73340767617574656e67026e6c0000010001 1a5480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27676 325900000001000000000000036e73330767617574656e67026e6c0000010001 325980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27677 48bd00000001000000000000037777770f6162632d7569747a656e646275726f026e6c0000010001 48bd80000001000000020000037777770f6162632d7569747a656e646275726f026e6c0000010001c0100002000100015180000e036e73310762697472617465c020c01000020001000151800006036e7332c038 27678 d76a00000001000000000000077365656d6f7265026e6c00000f0001 d76a80000001000000020002077365656d6f7265026e6c00000f0001c00c0002000100015180000b026e7305706c616e74c014c00c00020001000151800006036e7332c02bc02800010001000151800004d59f0037c03f00010001000151800004d59f0046 27679 cf1900000001000000000000036e73310762697472617465026e6c0000010001 cf1980000001000000030002036e73310762697472617465026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 27680 5d5b00000001000000000000036e73320762697472617465026e6c0000010001 5d5b80000001000000030002036e73320762697472617465026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 27681 3999000000010000000000000b76616e646572686f727374026e6c00000f0001 3999800000010000000300030b76616e646572686f727374026e6c00000f0001c00c0002000100015180000f036e7331086e6f766178657373c018c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030c02c00010001000151800004d5c98015c04700010001000151800004d5c9bf12c05900010001000151800004d5ef9c26 27682 e4600000000100000000000008686f73746e616d650462696e640000100003 e4608000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27683 18e90000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 18e98000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 27684 5d1400000001000000000000036e73310677657061726b026e6c0000010001 5d1480000001000000020002036e73310677657061726b026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5f4b8cbc03900010001000151800004d5f4b9cb 27685 068a00000001000000000000036e73320677657061726b026e6c0000010001 068a80000001000000020002036e73320677657061726b026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d5f4b8cbc00c00010001000151800004d5f4b9cb 27686 08dc00000001000000000000026e7306736175727573026e6c0000010001 08dc80000001000000020001026e7306736175727573026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e7304707a7a6c03636f6d00c00c0001000100015180000451112b02 27687 d6160000000100000000000003767773066d696e767773026e6c0000010001 d6168000000100000003000103767773066d696e767773026e6c0000010001c01000020001000151800002c00cc01000020001000151800012047365633103646e73067073696e6574c017c010000200010001518000070473656332c03ec00c00010001000151800004c2b77e42 27688 469f000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 469f800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27689 21ca0000000100000000000008686f73746e616d650462696e640000100003 21ca8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27690 dbde0000000100000000000003777777056f7074696e026e6c0000010001 dbde8000000100000003000103777777056f7074696e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc016c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c048c02a000100010001518000043efa0202 27691 2802000000010000000000000377777706746a65657a65026e6c0000010001 2802800000010000000200020377777706746a65657a65026e6c0000010001c0100002000100015180001104646e733109696e7465726f757465c017c0100002000100015180000704646e7332c030c02b00010001000151800004d4173f3ec04800010001000151800004d4173f3d 27692 63090000000100000000000003777777066d6174757265026e6c0000010001 63098000000100000002000203777777066d6174757265026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c017c01000020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad41 27693 9cb60000000100000000000006636861726973026e6c00001c0001 9cb68000000100000002000006636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 27694 56d800000001000000000000056e756d6163026e6c0000ff0001 56d880000001000000020002056e756d6163026e6c0000ff0001c00c00020001000151800015036e73310e726567696f70726f766964657273c012c00c00020001000151800006036e7332c02ac02600010001000151800004d41da001c04700010001000151800004d41da1fe 27695 78a70000000100000000000004626f6261026778026e6c00001c0001 78a78000000100000002000104626f6261026778026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1590b 27696 8d110000000100000000000003777777046b726173026e6c0000010001 8d118000000100000002000003777777046b726173026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 27697 438a00000001000000000000037777770f786361742d696e6475737472696573026e6c0000010001 438a80000001000000030002037777770f786361742d696e6475737472696573026e6c0000010001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c038c03400010001000151800004d4ccc0fcc069000100010001518000043efa0703 27698 077300000001000000000000046d61696c0861746c616e74697a026e6c0000010001 077380000001000000020002046d61696c0861746c616e74697a026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02e00010001000151800004d5efa011c04000010001000151800004d5efa075 27699 826e000000010000000000000377777708626f793465766572026e6c0000010001 826e800000010000000200000377777708626f793465766572026e6c0000010001c01000020001000151800010036e733109666972737466696e64c019c01000020001000151800006036e7332c031 27700 2dbc0000000100000000000005646e732d32056c61646f74026e6c0000010001 2dbc8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27701 f3bc00000001000000000000046175746f06706167696e61026e6c0000010001 f3bc80000001000000030003046175746f06706167696e61026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 27702 ac1c00000001000000000000046d61696c05622d6f6e65026e6c0000010001 ac1c80000001000000020002046d61696c05622d6f6e65026e6c0000010001c01100020001000151800009036e7331026973c017c01100020001000151800006036e7332c02fc02b00010001000151800004d5852102c04000010001000151800004d5c41503 27703 c5be0000000100000000000003706f7004766f766c026e6c0000010001 c5be8000000100000002000203706f7004766f766c026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c015c01000020001000151800006036e7332c02dc029000100010001518000045054f347c045000100010001518000043e94a047 27704 fbaf000000010000000000000a73686f706f6e6c696e65086d69642d746f776e026e6c0000010001 fbaf800000010000000200020a73686f706f6e6c696e65086d69642d746f776e026e6c0000010001c0170002000100015180000c036e733105636176656fc020c01700020001000151800006036e7332c038c034000100010001518000045112a002c04c000100010001518000045112a102 27705 733500000001000000000000066b7661776562056c61776562026e6c0000010001 733580000001000000030002066b7661776562056c61776562026e6c0000010001c0130002000100015180000d036e733106776964657873c019c01300020001000151800010036e733206776964657873036e657400c01300020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 27706 a4df00000001000000000000037777770470706d63026e6c0000010001 a4df80000001000000020000037777770470706d63026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 27707 557600000001000000000000026e7304696d636f026e6c0000010001 557680000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 27708 aabb00000001000000000000026e7304696d636f026e6c0000260001 aabb80000001000000020001026e7304696d636f026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 27709 3e0b000000010000000000000377777704616d726f026e6c0000010001 3e0b800000010000000200020377777704616d726f026e6c0000010001c010000200010001518000130870686f626f7330310761626e616d726fc015c0100002000100015180000b0870686f626f733032c032c02900010001000151800004a7cac30bc04800010001000151800004a7cac30c 27710 05f5000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 05f5800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27711 30b900000001000000000000046d61696c03777873026e6c0000010001 30b980000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 27712 580a00000001000000000000046e73303903777873026e6c0000010001 580a80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 27713 cb1d00000001000000000000046e73303803777873026e6c0000010001 cb1d80000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 27714 cdec00000001000000000000046e73303903777873026e6c0000010001 cdec80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 27715 420d00000001000000000000036e7331056773696e74026e6c0000010001 420d80000001000000020002036e7331056773696e74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004510473b4c03800010001000151800004510473b5 27716 fe3000000001000000000000036e7331056773696e74026e6c0000260001 fe3080000001000000020002036e7331056773696e74026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004510473b4c03800010001000151800004510473b5 27717 ffc100000001000000000000036e7332056773696e74026e6c0000010001 ffc180000001000000020002036e7332056773696e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004510473b4c00c00010001000151800004510473b5 27718 3a0b00000001000000000000036e7332056773696e74026e6c0000260001 3a0b80000001000000020002036e7332056773696e74026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004510473b4c00c00010001000151800004510473b5 27719 f00a0000000100000000000003777777096e6f697a79636f7773026e6c0000010001 f00a8000000100000002000203777777096e6f697a79636f7773026e6c0000010001c0100002000100015180000e026e730869742d776f726b73c01ac01000020001000151800014026e730e667279736c616e2d6f6e6c696e65c01ac02e00010001000151800004515b0288c04800010001000151800004515b020d 27720 e9a00000000100000000000003777777056e696b6b690873706974686f7374026e6c0000010001 e9a08000000100000002000203777777056e696b6b690873706974686f7374026e6c0000010001c0160002000100015180000e026e730869742d776f726b73c01fc01600020001000151800014026e730e667279736c616e2d6f6e6c696e65c01fc03300010001000151800004515b0288c04d00010001000151800004515b020d 27721 3bab00000001000000000000037777770a7469656e657263616d73026e6c0000010001 3bab80000001000000020000037777770a7469656e657263616d73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 27722 4e00000000010000000000000e686161726c656d6d65726d656572026e6c0000ff0001 4e00800000010000000200010e686161726c656d6d65726d656572026e6c0000ff0001c00c0002000100015180000704646e7331c00cc00c0002000100015180000b026e73026e6c036e657400c02f000100010001518000043e3a2928 27723 1a9a00000001000000000000036d783102686e026e6c0000010001 1a9a80000001000000020000036d783102686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02b 27724 cce90000000100000000000008666163696c697479026e6c00000f0001 cce98000000100000002000108666163696c697479026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 27725 6302000000010000000000000377777706652d6661726d026e6c0000010001 6302800000010000000200020377777706652d6661726d026e6c0000010001c0100002000100015180000d036e73310663617374656cc017c01000020001000151800006036e7332c02fc02b00010001000151800004c3558244c04400010001000151800004c3558245 27726 328000000001000000000000047363706303617a6d026e6c00000f0001 328080000001000000020002047363706303617a6d026e6c00000f0001c0110002000100015180000a076e657473727672c011c0110002000100015180000e036e733107737572666e6574c015c02900010001000151800004911d8201c03f00010001000151800004c0576a65 27727 78e90000000100000000000008686c7a7569642d320564656d6f6e026e6c0000010001 78e98000000100000003000208686c7a7569642d320564656d6f6e026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 27728 6a3c00000001000000000000037777770670617266756d026e6c0000010001 6a3c80000001000000020002037777770670617266756d026e6c0000010001c01000020001000151800009036e7331026973c017c01000020001000151800006036e7332c02fc02b00010001000151800004d5852102c04000010001000151800004d5c41503 27729 6479000000010000000000000377777708636f6e73756d6178026e6c0000010001 6479800000010000000200020377777708636f6e73756d6178026e6c0000010001c0100002000100015180000f026e7309656174736572766572c019c01000020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 27730 8da90000000100000000000005746c6774650a7061797065726e657773026e6c0000010001 8da98000000100000002000205746c6774650a7061797065726e657773026e6c0000010001c01200020001000151800010036e733109652d666163746f7279c01dc01200020001000151800006036e7332c035c03100010001000151800004c1fefe82c04d00010001000151800004c1feff82 27731 acea000000010000000000000c746865666f6f747072696e74026e6c0000010001 acea800000010000000200020c746865666f6f747072696e74026e6c0000010001c00c0002000100015180000c036e733105706f703331c019c00c00020001000151800006036e7332c031c02d00010001000151800004d499be5ac04500010001000151800004d499be5b 27732 b6185aee50112da003b70000000000000000 b618dae40000000000000000 27733 9e4d00000001000000000000036d786906787334616c6c026e6c0000010001 9e4d80000001000000030002036d786906787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 27734 b6185aee50102da003b70000000000000000 b618dae40000000000000000 27735 842700000001000000000000036e73310f666173747365727665722d61737037026e6c0000010001 842780000001000000020002036e73310f666173747365727665722d61737037026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000442a4f028c0420001000100015180000442a4f031 27736 ca8700000001000000000000036e73310f666173747365727665722d61737037026e6c0000260001 ca8780000001000000020002036e73310f666173747365727665722d61737037026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000442a4f028c0420001000100015180000442a4f031 27737 50a400000001000000000000036e73320f666173747365727665722d61737037026e6c0000010001 50a480000001000000020002036e73320f666173747365727665722d61737037026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0340001000100015180000442a4f028c00c0001000100015180000442a4f031 27738 285200000001000000000000036e73320f666173747365727665722d61737037026e6c0000260001 285280000001000000020002036e73320f666173747365727665722d61737037026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0340001000100015180000442a4f028c00c0001000100015180000442a4f031 27739 126c00000001000000000000036e73330767617574656e67026e6c0000010001 126c80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27740 4d020000000100000000000003777777087370656c70756e74026e6c0000010001 4d028000000100000002000203777777087370656c70756e74026e6c0000010001c0100002000100015180000b036e73310470696e65c019c01000020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 27741 ec080010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 ec088000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 27742 22250000000100000000000004646e733107696e666f6e6574026e6c0000010001 22258000000100000002000204646e733107696e666f6e6574026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d4bd01c4c03b00010001000151800004d4bd7f83 27743 6bc50000000100000000000004646e733207696e666f6e6574026e6c0000010001 6bc58000000100000002000204646e733207696e666f6e6574026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02d00010001000151800004d4bd01c4c00c00010001000151800004d4bd7f83 27744 c9a500100001000000000001036e733203757063026e6c00000100010000290800000080000000 c9a580000001000000030004036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c01410000291000000000000000 27745 d91200100001000000000001036e733203757063026e6c00002600010000290800000080000000 d91280000001000000030004036e733203757063026e6c0000260001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c01410000291000000000000000 27746 a72e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 a72e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27747 5b110000000100000000000003696165026e6c0000010001 5b118000000100000002000203696165026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 27748 0000000060025e3872b90000020405b40000 000080010000000000000000 27749 ec27000000010000000000001164736c616d3230342d36362d35392d38310664796e64736c067a6f6e6e6574026e6c0000010001 ec27800000010000000200021164736c616d3230342d36362d35392d38310664796e64736c067a6f6e6e6574026e6c0000010001c02500020001000151800005026e73c025c0250002000100015180000e026e7308767575727765726bc02cc040000100010001518000043e3a3204c051000100010001518000043efa0202 27750 b61b831350102da081cf0000000000000000 27751 715600000001000000000000026e7306636f62776562026e6c0000010001 715680000001000000020001026e7306636f62776562026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800011026e73087363686970686f6c036e657400c00c0001000100015180000450f26001 27752 7c3a0000000100000000000004686f6d65086d756c7469776562026e6c0000010001 7c3a8000000100000003000304686f6d65086d756c7469776562026e6c0000010001c01100020001000151800011036e73310a6d756c74696b6162656cc01ac01100020001000151800006036e7332c032c0110002000100015180000e036e733407737570706f7274c01ac02e0001000100015180000450f2e002c04b0001000100015180000450f2e006c05d00010001000151800004c372e6fe 27753 23f2000000010000000000000377777706676f6f676c65026e6c0000010001 23f2800000010000000300000377777706676f6f676c65026e6c0000010001c01000020001000151800010036e733106676f6f676c6503636f6d00c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02f 27754 5c0c000000010000000000000f7065656b6163636f756e74616e7473026e6c00000f0001 5c0c800000010000000200020f7065656b6163636f756e74616e7473026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c01cc00c00020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 27755 d5ef00000001000000000000027073026e6c00000f0001 d5ef80000001000000020000027073026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c02a 27756 0af3000000010000000000000861647365727665720c656e6572676965706c617a61026e6c0000010001 0af3800000010000000200020861647365727665720c656e6572676965706c617a61026e6c0000010001c0150002000100015180000a036e733103697870c022c01500020001000151800006036e7332c03ac03600010001000151800004d943e639c04c000100010001518000043efa063f 27757 63350000000100000000000001360331313203313433033231360a626c61636b686f6c657307656173796e6574026e6c0000010001 63358000000100000002000201360331313203313433033231360a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 27758 644700000001000000000000087374616564696f6e026e6c00001c0001 644780000001000000020002087374616564696f6e026e6c00001c0001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 27759 2fd20000000100000000000003736f61026e6c0000010001 2fd28000000100000002000003736f61026e6c0000010001c00c00020001000151800014026e730b6578706c61696e65726463036e657400c00c0002000100015180000d026e73056132303030026e7500 27760 eda7000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 eda7800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27761 a3b300000001000000000000036172780467757473026e6c0000010001 a3b380000001000000020002036172780467757473026e6c0000010001c0100002000100015180000e026e73086e65787467656172c015c01000020001000151800006036e7332c02cc02900010001000151800004c26d9ab8c04300010001000151800004c26d9aa3 27762 314d000000010000000000000773657276696365076f6d732d6e6574026e6c00001c0001 314d800000010000000200020773657276696365076f6d732d6e6574026e6c00001c0001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03000010001000151800004d5efb22fc04200010001000151800004d5ef9d07 27763 238d00000001000000000000036e73340767617574656e67026e6c0000010001 238d80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27764 238c00000001000000000000036e73330767617574656e67026e6c0000010001 238c80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27765 2a6d0000000100000000000004777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001 2a6d8000000100000002000204777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001c01f00020001000151800009036e7331026973c02ac01f00020001000151800006036e7332c042c03e00010001000151800004d5852102c05300010001000151800004d5c41503 27766 8c50000000010000000000000d6762656c656374726f6e696373026e6c00000f0001 8c50800000010000000200000d6762656c656374726f6e696373026e6c00000f0001c00c0002000100015180000e036e73310469706d68036e657400c00c00020001000151800006036e7332c032 27767 9e6100000001000000000000086d756c7469776562026e6c00000f0001 9e6180000001000000030003086d756c7469776562026e6c00000f0001c00c00020001000151800011036e73310a6d756c74696b6162656cc015c00c00020001000151800006036e7332c02dc00c0002000100015180000e036e733407737570706f7274c015c0290001000100015180000450f2e002c0460001000100015180000450f2e006c05800010001000151800004c372e6fe 27768 3d1700000001000000000000036e7331066e6c74726565026e6c0000010001 3d1780000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 27769 05c9000000010000000000000477646264026e6c00000f0001 05c9800000010000000200000477646264026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c030 27770 852900000001000000000000037777770e6970646f706c656964696e67656e026e6c0000010001 852980000001000000020002037777770e6970646f706c656964696e67656e026e6c0000010001c0100002000100015180000f04646e73300765736f75726365c01fc0100002000100015180000704646e7334c038c03300010001000151800004d48198d8c04e00010001000151800004d5c5eaa4 27771 fde8000000010000000000000e6d61617274656e74696a7373656e026e6c00000f0001 fde8800000010000000200020e6d61617274656e74696a7373656e026e6c00000f0001c00c0002000100015180000f036e7331087369746577697365c01bc00c00020001000151800006036e7332c033c02f00010001000151800004d58529cdc04a00010001000151800004d58529d2 27772 2a0c00000001000000000000036e733104686f6d65026e6c0000010001 2a0c80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 27773 2a0d00000001000000000000036e733204686f6d65026e6c0000010001 2a0d80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 27774 2a0e00000001000000000000036e733304686f6d65026e6c0000010001 2a0e80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 27775 2a0f00000001000000000000036e733404686f6d65026e6c0000010001 2a0f80000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 27776 3cef00000001000000000000106761727564612d696e646f6e65736961026e6c0000010001 3cef80000001000000020002106761727564612d696e646f6e65736961026e6c0000010001c00c00020001000151800013036e73310c62656472696a76656e776562c01dc00c00020001000151800006036e7332c035c03100010001000151800004d90867fec05000010001000151800004c1ad2bfe 27777 b1fb00000001000000000000026e73067a6f6e6e6574026e6c0000010001 b1fb80000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 27778 d75900000001000000000000026e73067a6f6e6e6574026e6c0000260001 d75980000001000000020002026e73067a6f6e6e6574026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 27779 ed330000000100000000000008686f73746e616d650462696e640000100003 ed338000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27780 c9b50000000100000000000003777777126175746f6d617469736572696e6767696473026e6c0000010001 c9b58000000100000002000103777777126175746f6d617469736572696e6767696473026e6c0000010001c0100002000100015180000d026e7307616d6572636f6dc023c01000020001000151800006036e7331c03ac03700010001000151800004c2b2b20a 27781 99d70000000100000000000008686f726e797069610d6c616174616c6c65737a69656e026e6c0000010001 99d78000000100000002000208686f726e797069610d6c616174616c6c65737a69656e026e6c0000010001c0150002000100015180000c04646e73310470696e73c023c0150002000100015180000704646e7332c03cc03700010001000151800004d9c26101c04f00010001000151800004d9c26002 27782 b61b831350102da0dc970000008c6fcd000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd66403c4ee600030000002f4e544c4d535350000100000097b200e0050005002a0000000a000a0020000000434f4d505554455231384e504942560000 27783 b61b8321501027ec86e70000000000000000 27784 7dfa00100001000000000001026e73067a6f6e6e6574026e6c00000100010000290800000080000000 7dfa80000001000000020003026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa02020000291000000000000000 27785 b44800000001000000000000076863636669646f03686363026e6c00001c0001 b44880000001000000020000076863636669646f03686363026e6c00001c0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c032 27786 26400000000100000000000009652d6c756e61746963026e6c0000010001 26408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 27787 7e0c0000000100000000000003706f700f6f6b6572646576656c6f706d656e74026e6c0000010001 7e0c8000000100000002000203706f700f6f6b6572646576656c6f706d656e74026e6c0000010001c0100002000100015180000a026e730469636d63c020c01000020001000151800006036e7332c037c034000100010001518000043e643805c04a000100010001518000043e643806 27788 69d800000001000000000000165354494e47524159434f4d4d554e49434154494f4e53026e6c0000020001 69d884030001000000010000165354494e47524159434f4d4d554e49434154494f4e53026e6c0000020001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 27789 df1600000001000000000000036e733203757063026e6c0000010001 df1680000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 27790 77cb00000001000000000000036e733203757063026e6c0000260001 77cb80000001000000030003036e733203757063026e6c0000260001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 27791 91330000000100000000000005646e732d31056c61646f74026e6c0000010001 91338000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27792 0d9800000001000000000000036e733107737572666e6574026e6c0000010001 0d9880000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 27793 7c220000000100000000000007646f6c66696a6e04696c7365026e6c0000010001 7c228000000100000003000307646f6c66696a6e04696c7365026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c01400020001000151800006036e7333c014c02d000100010001518000043e45a282c03f000100010001518000043e45a283c051000100010001518000043e45a284 27794 de8f0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 de8f8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 27795 c64b00000001000000000000026e73067a6f6e6e6574026e6c0000010001 c64b80000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 27796 351300000001000000000000037777770761646f66616e73026e6c0000010001 351380000001000000030001037777770761646f66616e73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 27797 de35000000010000000000000377777708313264657369676e026e6c0000010001 de35800000010000000200020377777708313264657369676e026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d994ae77c04b000100010001518000045054ea06 27798 db890000000100000000000001360331313203313433033231360a626c61636b686f6c657307656173796e6574026e6c0000050001 db898000000100000002000201360331313203313433033231360a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 27799 b91c00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 b91c80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 27800 9fa200000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 9fa280000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 27801 dcc000000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 dcc080000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27802 ac9900000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 ac9980000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27803 3f1100000001000000000000036e73310b7472616374696f6e2d6974026e6c0000010001 3f1180000001000000020000036e73310b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 27804 806400000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 806480000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27805 156400000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 156480000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27806 74a10000000100000000000003777777076d696e62757a61026e6c0000010001 74a18000000100000002000103777777076d696e62757a61026e6c0000010001c0100002000100015180000b087374617267617465c010c0100002000100015180000b026e73026e6c036e657400c02c00010001000151800004d535a3d2 27807 1db000000001000000000000037777770b74686567616d65726f6f6d026e6c0000010001 1db080000001000000020000037777770b74686567616d65726f6f6d026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c033 27808 238f00000001000000000000036e73330767617574656e67026e6c0000010001 238f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27809 b7d900000001000000000000036e7331046372696f026e6c0000010001 b7d980000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27810 4c6e00000001000000000000036e7332046372696f026e6c0000010001 4c6e80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27811 239000000001000000000000036e73340767617574656e67026e6c0000010001 239080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27812 b08900000001000000000000037777770a72656372656174696566026e6c0000010001 b08980000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 27813 a97200000001000000000000037777770a72656372656174696566026e6c0000010001 a97280000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 27814 927800100001000000000001076162726164696f026e6c00000100010000290800000080000000 927880000001000000030003076162726164696f026e6c0000010001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa07030000291000000000000000 27815 c3da0010000100000000000106616c7469756d026e6c00001c00010000290800000080000000 c3da8000000100000002000306616c7469756d026e6c00001c0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f00460000291000000000000000 27816 d1070000000100000000000005646e732d31056c61646f74026e6c0000010001 d1078000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27817 61e900000001000000000000036b6e76026e6c0000010001 61e980000001000000020001036b6e76026e6c0000010001c00c00020001000151800006036e7331c00cc00c0002000100015180000d036e7332036b706e036e657400c02400010001000151800004c1ac9603 27818 54ee00000001000000000000036e7333076c656374726963026e6c0000010001 54ee80000001000000020002036e7333076c656374726963026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c297a082c03e00010001000151800004c297a083 27819 fa340000000100000000000006636861726973026e6c00000f0001 fa348000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 27820 c74400000001000000000000056272657363026e6c00000f0001 c74480000001000000020000056272657363026e6c00000f0001c00c00020001000151800015026e730c776f726c64686f7374696e67036f726700c00c00020001000151800008026e73026175c029 27821 ac6100000001000000000000037777770a766f6c6b736b72616e74026e6c0000010001 ac6180000001000000020000037777770a766f6c6b736b72616e74026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c035 27822 41cb0000000100000000000003777777166d6564656d626c696b6b657274656e6e6973636c7562026e6c0000010001 41cb8000000100000002000003777777166d6564656d626c696b6b657274656e6e6973636c7562026e6c0000010001c0100002000100015180000c026e7306766576696461c027c01000020001000151800006036e7332c03e 27823 732d000000010000000000000377777703736170026e6c0000010001 732d800000010000000200020377777703736170026e6c0000010001c01000020001000151800014026e730e64617461636f6e686f7374696e67c014c01000020001000151800006036e7332c02bc02800010001000151800004d43d2934c04800010001000151800004d468d143 27824 e1ed0000000100000000000006616c7469756d026e6c00001c0001 e1ed8000000100000002000206616c7469756d026e6c00001c0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f0046 27825 c97d00000001000000000000096863632d67726f6570026e6c0000010001 c97d80000001000000020002096863632d67726f6570026e6c0000010001c00c0002000100015180000e036e7331077175616e746973c016c00c00020001000151800006036e7332c02ec02a000100010001518000043ed44440c04400010001000151800004d4ccca83 27826 ec6e00000001000000000000037777770c6575726f7061726164696a73026e6c0000010001 ec6e80000001000000020002037777770c6575726f7061726164696a73026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01dc01000020001000151800006036e7332c035c031000100010001518000043e291ad2c04e000100010001518000043e291ad3 27827 9dc0000000010000000000000a726f7777656e68657a65026e6c0000010001 9dc0800000010000000200020a726f7777656e68657a65026e6c0000010001c00c00020001000151800014036e73310d666c79696e6773657276657273c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d420e284c04b00010001000151800004d420e285 27828 0c3600000001000000000000037777770d726164696f7665726f6e696361026e6c0000010001 0c3680000001000000020002037777770d726164696f7665726f6e696361026e6c0000010001c0100002000100015180000f036e7331086261736971776562c01ec01000020001000151800006036e7332c036c0320001000100015180000452c04516c04d0001000100015180000452c04542 27829 3c8300000001000000000000037777770f6c6574732d6765742d73746f6e6564026e6c0000010001 3c8380000001000000020002037777770f6c6574732d6765742d73746f6e6564026e6c0000010001c0100002000100015180000e036e7331076465636c617265c020c01000020001000151800006036e7332c038c034000100010001518000043ed4528dc04e000100010001518000045054e9de 27830 a3aa00000001000000000000046d61696c03736e72026e6c0000010001 a3aa80000001000000020002046d61696c03736e72026e6c0000010001c0110002000100015180000e036e7331076c656374726963c015c01100020001000151800006036e7332c02dc02900010001000151800004c297a082c04300010001000151800004c297a083 27831 b97700000001000000000000046d61696c03736e72026e6c00001c0001 b97780000001000000020002046d61696c03736e72026e6c00001c0001c0110002000100015180000e036e7331076c656374726963c015c01100020001000151800006036e7332c02dc02900010001000151800004c297a082c04300010001000151800004c297a083 27832 2fb6000000010000000000000462757061027330026e6c0000010001 2fb6800000010000000200020462757061027330026e6c0000010001c0110002000100015180000d026e73076e656473746174c014c01100020001000151800006036e7333c02bc02800010001000151800004d4482615c04100010001000151800004d5c4021d 27833 ad9c28000001000000010000026e6c0000060001086b6565726b616465026e6c00000100010000025800040a000015 ad9ca8040000000000000000 27834 0fa700000001000000000000037777770b76726564656e737465696e026e6c0000010001 0fa784030001000000010000037777770b76726564656e737465696e026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 27835 5648000000010000000000000377777716726569737665727a656b6572696e676b6f7274696e67026e6c0000010001 5648800000010000000200010377777716726569737665727a656b6572696e676b6f7274696e67026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c027c01000020001000151800006036e7334c03fc03b00010001000151800004d5c401c0 27836 6234000000010000000000000377777703787476026e6c0000010001 6234800000010000000200020377777703787476026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c014c01000020001000151800006036e7332c02cc02800010001000151800004d4f1210bc04600010001000151800004d4f1210c 27837 e07a00000001000000000000076a657373696531046d626974026e6c00000f0001 e07a80000001000000020002076a657373696531046d626974026e6c00000f0001c0140002000100015180000d026e730763697374726f6ec019c01400020001000151800006036e7332c030c02d000100010001518000043ed81f37c046000100010001518000043ed81f38 27838 13d000000001000000000000066265616b6572056973696f6e026e6c0000010001 13d080000001000000020002066265616b6572056973696f6e026e6c0000010001c0130002000100015180000d026e73076b6e6f77617265c019c01300020001000151800006036e7332c030c02d00010001000151800004c3402003c04600010001000151800004c340202b 27839 664b00000001000000000000067a7376737263026e6c0000010001 664b84030001000000010000067a7376737263026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 27840 227400000001000000000000036e73340767617574656e67026e6c0000010001 227480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27841 000000007002faf093c900000204059801010402 000080010000000000000000 27842 b61d400b5010fbb8c9700000000000000000 b61dc0040000000000000000 27843 e4bb00000001000000000000076162726164696f026e6c0000010001 e4bb80000001000000030002076162726164696f026e6c0000010001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 27844 b61d400b5018fbb85398000000946438000000010001000000000f313237313331303331393633342d330000f900010f313237313331303331393633342d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af8e4403c4a640003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000 b61dc0040000000000000000 27845 e20a00000001000000000000036e7331046372696f026e6c0000010001 e20a80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27846 377000000001000000000000036e7332046372696f026e6c0000010001 377080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 27847 87fe00000001000000000000037777770a72656372656174696566026e6c0000010001 87fe80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 27848 28550000000100000000000003777777076c652d726576650c7765656b656e64686f74656c026e6c0000010001 28558000000100000003000203777777076c652d726576650c7765656b656e64686f74656c026e6c0000010001c0180002000100015180000d036e733106776964657873c025c01800020001000151800010036e733206776964657873036e657400c01800020001000151800006036e7333c03dc03900010001000151800004d4ccc0fcc06e000100010001518000043efa0703 27849 b61d40195011fbaac8d90000000000000000 b61dc0140000000000000000 27850 ce630000000100000000000003696165026e6c00000f0001 ce638000000100000002000203696165026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 27851 32a0000000010000000000000761616c6f735f32036c6f73026e6c0000010001 32a0800000010000000200020761616c6f735f32036c6f73026e6c0000010001c0140002000100015180000c026e7306787334616c6cc018c01400020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 27852 b61d401a5010fbaac8d80000000000000000 b61dc0140000000000000000 27853 45e900100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 45e980000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 27854 1c3100100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 1c3180000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 27855 d04b00000001000000000000037777770f6765696c657469656e6572746a6573026e6c0000010001 d04b80000001000000020000037777770f6765696c657469656e6572746a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c037 27856 000000007002faf0abe200000204059801010402 000080010000000000000000 27857 b6185aef50102da003b60000000000000000 b618dae40000000000000000 27858 778800100001000000000001036e733103757063026e6c00000100010000290800000000000000 778880000001000000030004036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 27859 bbc400100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000000000000 bbc480000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 27860 477e001000010000000000000761736e62616e6b026e6c0000ff0001 477e800000010000000200000761736e62616e6b026e6c0000ff0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02c 27861 eed328000001000000010000026e6c0000060001085f6b706173737764045f75647008706861697272746d026e6c00002100010000025800220000006401d00e70686169722d72746d2d6d61696e08706861697272746d026e6c00 eed3a8040000000000000000 27862 9fb60000000100000000000012686f74656c667265646572696b736f6f7264026e6c0000ff0001 9fb68000000100000002000112686f74656c667265646572696b736f6f7264026e6c0000ff0001c00c00020001000151800009026e73036e636ec01fc00c00020001000151800006036e7332c036c03300010001000151800004c2e51401 27863 cae500000001000000000000036e7334076e656473746174026e6c0000010001 cae580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27864 bc3800000001000000000000036e7332076e656473746174026e6c0000010001 bc3880000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 27865 b61f52c65010fbb8cecc0000000000000000 b61fd2c40000000000000000 27866 b61f52c65018fbb8714c000000944ae1000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af8e5403c4a650003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000 b61fd2c40000000000000000 27867 5efe00000001000000000000037777770d7665726469656e6e75736e656c026e6c0000010001 5efe80000001000000020000037777770d7665726469656e6e75736e656c026e6c0000010001c0100002000100015180000e036e7331046379677003636f6d00c01000020001000151800006036e7332c036 27868 c479000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 c479800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 27869 b61f52d45011fbaace350000000000000000 b61fd2d40000000000000000 27870 0c0800000001000000000000047376656e056974347573026e6c0000010001 0c0880000001000000020002047376656e056974347573026e6c0000010001c0110002000100015180000d036e733106736f67657469c017c01100020001000151800006036e7332c02fc02b00010001000151800004c297432ec04400010001000151800004c297432f 27871 b61f52d55010fbaace340000000000000000 b61fd2d40000000000000000 27872 ece70000000100000000000008686f73746e616d650462696e640000100003 ece78000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27873 e3df00000001000000000000037777770b68756d6f7270616c656973026e6c0000010001 e3df80000001000000020000037777770b68756d6f7270616c656973026e6c0000010001c01000020001000151800015036e73310b696e746f776f726c647331036e657400c01000020001000151800006036e7332c034 27874 000000007002faf06bd800000204059801010402 000080010000000000000000 27875 45ba0000000100000000000008686f73746e616d650462696e640000100003 45ba8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 27876 a05a00000001000000000000076363636c2d6e6c06787334616c6c026e6c0000010001 a05a80000001000000030002076363636c2d6e6c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 27877 e1e70000000100000000000007616e74656e6e61026e6c0000010001 e1e78000000100000002000107616e74656e6e61026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 27878 b62004255010fbb8dd620000000000000000 b62080010000000000000000 27879 df7900000001000000000000036d78330663617374656c026e6c0000010001 df7980000001000000020002036d78330663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 27880 b62004255018fbb8ea1f00000094e0a3000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af8e5403c4a650003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000 b62080010000000000000000 27881 3da5000000010000000000000e616c6c6361727374726164696e67026e6c00000f0001 3da5800000010000000200020e616c6c6361727374726164696e67026e6c00000f0001c00c00020001000151800013036e73310c62656472696a76656e776562c01bc00c00020001000151800006036e7332c033c02f00010001000151800004d90867fec04e00010001000151800004c1ad2bfe 27882 305100000001000000000000026e73076e656473746174026e6c0000010001 305180000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 27883 24bc00000001000000000000036e7333076e656473746174026e6c0000010001 24bc80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 27884 b62004335011fbaadccb0000000000000000 b62080010000000000000000 27885 5de200000001000000000000036e733103757063026e6c0000010001 5de280000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 27886 aef100000001000000000000046e733032066368656c6c6f026e6c0000010001 aef180000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 27887 39cf00100001000000000001076e73617574683203626974026e6c00000100010000290800000000000000 39cf80000001000000030004076e73617574683203626974026e6c0000010001c0140002000100015180000a076e736175746831c014c01400020001000151800002c00cc0140002000100015180000a076e736175746833c014c02c00010001000151800004d5880c33c00c00010001000151800004d5880c3bc05000010001000151800004d4ccc00b0000291000000000000000 27888 6bb700100001000000000001076e73617574683103626974026e6c00000100010000290800000000000000 6bb780000001000000030004076e73617574683103626974026e6c0000010001c01400020001000151800002c00cc0140002000100015180000a076e736175746832c014c0140002000100015180000a076e736175746833c014c00c00010001000151800004d5880c33c03a00010001000151800004d5880c3bc05000010001000151800004d4ccc00b0000291000000000000000 27889 000000007002faf02c3a0000020405b401010402 000080010000000000000000 27890 803b00000001000000000000046163633203727330026e6c00000f0001 803b80000001000000020002046163633203727330026e6c00000f0001c01100020001000151800009036e7331026973c015c01100020001000151800006036e7332c02dc02900010001000151800004d5852102c03e00010001000151800004d5c41503 27891 277900000001000000000000076e73617574683203626974026e6c0000010001 277980000001000000030003076e73617574683203626974026e6c0000010001c0140002000100015180000a076e736175746831c014c01400020001000151800002c00cc0140002000100015180000a076e736175746833c014c02c00010001000151800004d5880c33c00c00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 27892 177800000001000000000000076e73617574683103626974026e6c0000010001 177880000001000000030003076e73617574683103626974026e6c0000010001c01400020001000151800002c00cc0140002000100015180000a076e736175746832c014c0140002000100015180000a076e736175746833c014c00c00010001000151800004d5880c33c03a00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 27893 b62004345010fbaadcca0000000000000000 b62080010000000000000000 27894 b80800000001000000000000036e733107737572666e6574026e6c0000010001 b80880000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 27895 33760000000100000000000004646e7331066d696e6c6e76026e6c0000010001 33768000000100000003000304646e7331066d696e6c6e76026e6c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c018c0110002000100015180000704646e7332c011c00c00010001000151800004910c2201c03a00010001000151800004c0576a65c05400010001000151800004910c2202 27896 40cb0000000100000000000004646e7332066d696e6c6e76026e6c0000010001 40cb8000000100000003000304646e7332066d696e6c6e76026e6c0000010001c0110002000100015180000704646e7331c011c0110002000100015180000e036e733107737572666e6574c018c01100020001000151800002c00cc02c00010001000151800004910c2201c03f00010001000151800004c0576a65c00c00010001000151800004910c2202 27897 26ff00000001000000000000037777770d766f657462616c6f6e6c696e65026e6c0000010001 26ff80000001000000030002037777770d766f657462616c6f6e6c696e65026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 27898 2e7b00000001000000000000026e730b6973642d686f6c6c616e64024e4c0000010001 2e7b80000001000000020002026e730b6973642d686f6c6c616e64024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 27899 b61c0000000100000000000003777777096d637665656e64616d07667265656c6572026e6c0000010001 b61c8000000100000002000003777777096d637665656e64616d07667265656c6572026e6c0000010001c01a000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c01a0002000100015180000e0b65766973702d6e732d3032c042 27900 0a4100000001000000000000046d61696c0463646c73026e6c0000010001 0a4180000001000000020002046d61696c0463646c73026e6c0000010001c0110002000100015180000a036e733003696270c016c01100020001000151800006036e7331c02ec02a00010001000151800004c1ac2d8cc04000010001000151800004c1ac2d8d 27901 b620f85c5010faf0aa700000000000000000 27902 e13f000000010000000000000469632d73026e6c00000f0001 e13f800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 27903 26fb0000000100000000000003687664026e6c00000f0001 26fb8000000100000002000203687664026e6c00000f0001c00c000200010001518000110a6c65757665686176656e03696772c010c00c0002000100015180000d0a64656c6673686176656ec02fc024000100010001518000043e2d5e0dc041000100010001518000043e2d5e82 27904 31760000000100000000000003777777156d6161746a657370726f6a6563746472656e746865026e6c0000010001 31768000000100000002000003777777156d6161746a657370726f6a6563746472656e746865026e6c0000010001c0100002000100015180000c026e7306766576696461c026c01000020001000151800006036e7332c03d 27905 b620f85c5018faf073ec00000095ab9c000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000 27906 3d740000000100000000000004646e7331066d696e6c6e76026e6c0000010001 3d748000000100000003000304646e7331066d696e6c6e76026e6c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c018c0110002000100015180000704646e7332c011c00c00010001000151800004910c2201c03a00010001000151800004c0576a65c05400010001000151800004910c2202 27907 9eba0000000100000000000004646e7332066d696e6c6e76026e6c0000010001 9eba8000000100000003000304646e7332066d696e6c6e76026e6c0000010001c0110002000100015180000704646e7331c011c0110002000100015180000e036e733107737572666e6574c018c01100020001000151800002c00cc02c00010001000151800004910c2201c03f00010001000151800004c0576a65c00c00010001000151800004910c2202 27908 9cde00000001000000000000037777771368696c76657273756d7a69656b656e68756973026e6c0000010001 9cde80000001000000020002037777771368696c76657273756d7a69656b656e68756973026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c024c01000020001000151800006036e7332c03cc03800010001000151800004d994ae77c056000100010001518000045054ea06 27909 cf5d0000000100000000000004646e7331066d696e6c6e76026e6c0000260001 cf5d8000000100000003000304646e7331066d696e6c6e76026e6c0000260001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c018c0110002000100015180000704646e7332c011c00c00010001000151800004910c2201c03a00010001000151800004c0576a65c05400010001000151800004910c2202 27910 530f0000000100000000000004646e7332066d696e6c6e76026e6c0000260001 530f8000000100000003000304646e7332066d696e6c6e76026e6c0000260001c0110002000100015180000704646e7331c011c0110002000100015180000e036e733107737572666e6574c018c01100020001000151800002c00cc02c00010001000151800004910c2201c03f00010001000151800004c0576a65c00c00010001000151800004910c2202 27911 5dc20000000100000000000009646967657269646f6f056d62757975026e6c0000010001 5dc28000000100000002000009646967657269646f6f056d62757975026e6c0000010001c01600020001000151800010026e73076379736f6e657403636f6d00c01600020001000151800006036e7331c033 27912 4c7700000001000000000000037777770a6e6f657366696f6c6574026e6c0000010001 4c7780000001000000020000037777770a6e6f657366696f6c6574026e6c0000010001c0100002000100015180001505646e7332300961637469766569737003636f6d00c0100002000100015180000805646e733231c035 27913 45d10000000100000000000003777777086b72756974766174026e6c0000010001 45d18000000100000002000103777777086b72756974766174026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c019c04600010001000151800004c2860043 27914 3cc600000001000000000000037777770c6d6f6465726e656b756e7374026e6c0000010001 3cc680000001000000020002037777770c6d6f6465726e656b756e7374026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec01dc01000020001000151800006036e7332c035c03100010001000151800004c3b1f203c04f00010001000151800004d4ccf533 27915 34e4000000010000000000000377777703746d66026e6c0000010001 34e4800000010000000200000377777703746d66026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c02c 27916 0cba000000010000000000000977696c62656666656e026e6c00000f0001 0cba800000010000000200000977696c62656666656e026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02d 27917 00780000000100000000000007736d756c776562026e6c00000f0001c0 00788000000100000002000207736d756c776562026e6c00000f0001c00c0002000100015180000a036e7331036f6c6dc014c00c00020001000151800012036e73310b7669616e6574776f726b73c014c02800010001000151800004c3126e21c03e00010001000151800004d43d0f08 27918 3e220000000100000000000006617363696e74026e6c0000ff0001 3e228000000100000002000206617363696e74026e6c0000ff0001c00c0002000100015180000b036e73310461786974c013c00c00020001000151800006036e7332c02bc027000100010001518000043e3a440bc03e000100010001518000043e3a440c 27919 6303000000010000000000000667626564616d026e6c00000f0001 6303800000010000000200010667626564616d026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c013c04000010001000151800004c2860043 27920 b620f86a5011fae2a9d80000000000000000 27921 000000007002faf0d0ad0000020405b401010402 000080010000000000000000 27922 a1b300000001000000000000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657306646f6d61696e026e6c0000060001 a1b384030001000000010000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657306646f6d61696e026e6c0000060001c03b00060001000038400036026e730f646f6d61696e2d7265676973747279c03b0a686f73746d6173746572c0520bf1e540000070800000384000278d0000003840 27923 1220000000010000000000000d6d61726b6675726e6974757265026e6c00000f0001 1220800000010000000300020d6d61726b6675726e6974757265026e6c00000f0001c00c0002000100015180000d036e733106776964657873c01ac00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 27924 b620f86b5010fae2a9d70000000000000000 27925 2dcb0000000100000000000005646e732d32056c61646f74026e6c0000010001 2dcb8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27926 075800000001000000000000037777770676766178656c026e6c0000010001 075880000001000000020000037777770676766178656c026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c031 27927 3478000000010000000000000c706f6f6c746563686e696373026e6c00000f0001 3478800000010000000200000c706f6f6c746563686e696373026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 27928 f78e000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 f78e800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27929 e3e9000000010000000000000973636869656c616e64026e6c00001c0001 e3e9800000010000000200020973636869656c616e64026e6c00001c0001c00c0002000100015180000c036e73310563736e6574c016c00c00020001000151800006036e7332c02ec02a00010001000151800004c2451012c04200010001000151800004c2451212 27930 cf9f000000010000000000000657324b41445608736a616832303030026e6c0000060001 cf9f840300010000000100000657324b41445608736a616832303030026e6c0000060001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 27931 282e0000000100000000000005646e732d31056c61646f74026e6c0000010001 282e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27932 6e580000000100000000000005646e732d32056c61646f74026e6c0000010001 6e588000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27933 b621d5c55010faf0717a0000000000000000 27934 3edb00000001000000000000037777770773657870657274026e6c0000010001 3edb80000001000000030003037777770773657870657274026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 27935 4ca20000000100000000000006636861726973026e6c00000f0001 4ca28000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 27936 a25800000001000000000000037777770a73706565646d65746572026e6c0000010001 a25880000001000000020000037777770a73706565646d65746572026e6c0000010001c0100002000100015180000f036e7331087765622d62656174c01bc01000020001000151800006036e7332c033 27937 b621d5c55018faf0905b000000955738000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000 27938 b051000000010000000000000673696d706c79026e6c00000f0001 b051800000010000000300000673696d706c79026e6c00000f0001c00c00020001000151800016026e730b73696d706c796e616d657302636f02756b00c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02a 27939 9b590000000100000000000003777777056e6f6b6961026e6c0000010001 9b598000000100000004000003777777056e6f6b6961026e6c0000010001c0100002000100015180000e026e73056e6f6b696103636f6d00c01000020001000151800006036e7332c02dc0100002000100015180000b046e73646103657874c02dc01000020001000151800007046e73686bc05b 27940 5c3b000000010000000000000377777703726e6c026e6c0000010001 5c3b800000010000000300030377777703726e6c026e6c0000010001c0100002000100015180000e046865726101780463756369c014c0100002000100015180000c066865726d6573026e6cc02fc01000020001000151800009066865726d6573c02dc02800010001000151800004d47d8001c04200010001000151800004c143ef02c05a00010001000151800004d47d8002 27941 3700000000010000000000000b6d61696c66696c7465723203696772026e6c0000010001 3700800000010000000200020b6d61696c66696c7465723203696772026e6c0000010001c0180002000100015180000d0a6c65757665686176656ec018c0180002000100015180000d0a64656c6673686176656ec018c030000100010001518000043e2d5e0dc049000100010001518000043e2d5e82 27942 311800100001000000000001026e73076e65746c616e64026e6c00000100010000290800000000000000 311880000001000000020003026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c060000291000000000000000 27943 6b47000000010000000000000c6d63636e656465726c616e64026e6c0000ff0001 6b47800000010000000300030c6d63636e656465726c616e64026e6c0000ff0001c00c00020001000151800010036e733109736974656279746573c019c00c00020001000151800006036e7332c031c00c00020001000151800006036e7333c031c02d00010001000151800004c2a55e5ac04900010001000151800004c356781cc05b000100010001518000043ec58016 27944 8c0b00100001000000000001036e7332076e65746c616e64026e6c00000100010000290800000000000000 8c0b80000001000000020003036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c060000291000000000000000 27945 de5500000001000000000000036e73330767617574656e67026e6c0000010001 de5580000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27946 c9ef00000001000000000000036e73340767617574656e67026e6c0000010001 c9ef80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27947 028f00000001000000000000036e73330767617574656e67026e6c0000010001 028f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27948 469f000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 469f800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 27949 934d00100001000000000001046162656c0564656d6f6e026e6c00000f00010000290800000080000000 934d80000001000000030003046162656c0564656d6f6e026e6c00000f0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb0040000291000000000000000 27950 6ba6000000010000000000000377777706766574726f6e026e6c0000010001 6ba6800000010000000300010377777706766574726f6e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 27951 6c5b00000001000000000000066e696b69746107746f7368696261026e6c0000010001 6c5b80000001000000020001066e696b69746107746f7368696261026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e7332036b706e036e657400c02f00010001000151800004c1ad6a42 27952 e639000000010000000000000b6d696d657377656570657207746f7368696261026e6c0000010001 e639800000010000000200010b6d696d657377656570657207746f7368696261026e6c0000010001c01800020001000151800005026e73c018c0180002000100015180000d036e7332036b706e036e657400c03400010001000151800004c1ad6a42 27953 82bf00000001000000000000036c6f670963616d706169676e73026e6c0000010001 82bf80000001000000020002036c6f670963616d706169676e73026e6c0000010001c0100002000100015180000b026e73057177697365c01ac01000020001000151800006036e7332c031c02e00010001000151800004c2927f02c04500010001000151800004c2927f03 27954 b61b832150112da081320000000000000000 27955 b621d5d35011fae270e20000000000000000 27956 cd4d0000000100000000000003777777136465686f74656c776161726465636865717565026e6c0000010001 cd4d8000000100000002000203777777136465686f74656c776161726465636865717565026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c024c01000020001000151800006036e7332c03bc03800010001000151800004d9aa2042c05100010001000151800004d9aa2c06 27957 000000007002faf04b080000020405b401010402 000080010000000000000000 27958 94e100000001000000000000026763065f6d736463730d696e7472612d76656e68756973026e6c0000060001 94e184030001000000010000026763065f6d736463730d696e7472612d76656e68756973026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 27959 0eba0000000100000000000003777777076b75656e776179026e6c0000010001 0eba8000000100000002000003777777076b75656e776179026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c032 27960 132d0000000100000000000004696e666f0a65636974656c65636f6d026e6c0000010001 132d8000000100000002000204696e666f0a65636974656c65636f6d026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000e036e733207626265796f6e64c01cc030000100010001518000043eb1a493c042000100010001518000043eb19002 27961 1b2300000001000000000000037777770e6669746e657373666163746f7279026e6c0000010001 1b2380000001000000020002037777770e6669746e657373666163746f7279026e6c0000010001c01000020001000151800012036e73350b73696c766572706f696e74c01fc01000020001000151800006036e7336c037c0330001000100015180000450f7c702c0510001000100015180000450f7c602 27962 c04500000001000000000000037777771067616c657269656d6572656e77696a6b026e6c0000010001 c04580000001000000020002037777771067616c657269656d6572656e77696a6b026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec021c01000020001000151800006036e7332c039c03500010001000151800004c3b1f203c05300010001000151800004d4ccf533 27963 63db00000001000000000000037777770b6d696e6f6c74612d716d73026e6c0000010001 63db80000001000000020000037777770b6d696e6f6c74612d716d73026e6c0000010001c01000020001000151800012036e7331086e65746e616d6573036e657400c01000020001000151800006036e7332c034 27964 129200000001000000000000036e73330767617574656e67026e6c0000010001 129280000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 27965 b621d5d45010fae270e10000000000000000 27966 42bc00000001000000000000037777770a76696c6c61736173736f026e6c0000010001 42bc80000001000000030001037777770a76696c6c61736173736f026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 27967 fffd00000001000000000000036e73320763697374726f6e026e6c0000010001 fffd80000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 27968 06bd00000001000000000000036e73320763697374726f6e026e6c0000260001 06bd80000001000000020002036e73320763697374726f6e026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 27969 b71b0000000100000000000005646e732d31056c61646f74026e6c0000010001 b71b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27970 783500000001000000000000066265726e6572026e6c00001c0001 783580000001000000020000066265726e6572026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 27971 0000000060025e38547f0000020405b40000 000080010000000000000000 27972 74160010000100000000000103777777076e6574706f6c6c026e6c00000100010000290800000080000000 74168000000100000002000103777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c0300000291000000000000000 27973 b62289055010faf038940000000000000000 27974 712000000001000000000000046162656c0564656d6f6e026e6c00000f0001 712080000001000000030002046162656c0564656d6f6e026e6c00000f0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 27975 b6234c9c50102da09a040000000000000000 b623cc940000000000000000 27976 8f150000000100000000000003777777057269646573026e6c0000010001 8f158000000100000002000203777777057269646573026e6c0000010001c0100002000100015180000a036e733103686978c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5a0da0ac0400001000100015180000451112ec3 27977 433b000000010000000000000377777702657a0962696b65706f776572026e6c0000010001 433b800000010000000200020377777702657a0962696b65706f776572026e6c0000010001c0130002000100015180000a036e733103677673c01dc01300020001000151800006036e7332c035c031000100010001518000045054e1aac04700010001000151800004d4ccc646 27978 5d42000000010000000000000377777707736974652d6964026e6c0000010001 5d42800000010000000300000377777707736974652d6964026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030 27979 783b000000010000000000000c7175657374696f6e6d617263026e6c00000f0001 783b800000010000000200020c7175657374696f6e6d617263026e6c00000f0001c00c00020001000151800014036e73310d706f7765727365727665723230c019c00c00020001000151800006036e7332c031c02d000100010001518000045104711dc04d000100010001518000045104711e 27980 b62289055018faf0abd90000009502d4000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000 27981 84da00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 84da80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 27982 20e700000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 20e780000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 27983 e43700000001000000000000036e733503777873026e6c0000010001 e43780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 27984 c95700000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 c95780000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27985 1bc500000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 1bc580000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27986 50e400000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 50e480000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27987 a00700000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 a00780000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 27988 6d610000000100000000000009696e74657274617371026e6c00000f0001 6d618000000100000002000209696e74657274617371026e6c00000f0001c00c00020001000151800011036e73310a66617374736572766572c016c00c00020001000151800006036e7332c02ec02a0001000100015180000442a4f390c0470001000100015180000442a4f399 27989 5c3d0000000100000000000003656d61026e6c00000f0001 5c3d8000000100000002000003656d61026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c010c00c0002000100015180000704686e7331c029 27990 b62289135011fae237fc0000000000000000 27991 356200000001000000000000037777770e6b616d6572612d65787072657373026e6c0000010001 356280000001000000020000037777770e6b616d6572612d65787072657373026e6c0000010001c01000020001000151800014026e730b736d617274736572766572036e657400c01000020001000151800006036e7332c036 27992 ee6300000001000000000000037777770e6e696575776a616172736475696b026e6c0000010001 ee6380000001000000020002037777770e6e696575776a616172736475696b026e6c0000010001c0100002000100015180000b026e73056e65726f63c01fc01000020001000151800006036e7332c036c03300010001000151800004d434010ac04a00010001000151800004d434000a 27993 7b0a00000001000000000000037777770a70617274797669626573026e6c0000010001 7b0a80000001000000020002037777770a70617274797669626573026e6c0000010001c0100002000100015180000a036e733103706777c01bc01000020001000151800006036e7332c033c02f000100010001518000043e818832c04500010001000151800004d4ccc621 27994 5eb50000000100000000000011626f736d616e6f706c656964696e67656e026e6c00000f0001 5eb58000000100000002000211626f736d616e6f706c656964696e67656e026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01ec00c00020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 27995 b62289145010fae237fb0000000000000000 27996 2f4d0000000100000000000003777777097265616c2d6c696665026e6c0000010001 2f4d8000000100000002000203777777097265616c2d6c696665026e6c0000010001c01000020001000151800012036e73310b73697465686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004cf2410f1c04c00010001000151800004cf2410f2 27997 55bd00000001000000000000037777770a696e7465727374617473026e6c0000010001 55bd80000001000000020000037777770a696e7465727374617473026e6c0000010001c01000020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01000020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 27998 b71f0000000100000000000005646e732d32056c61646f74026e6c0000010001 b71f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 27999 3a720000000100000000000004777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001 3a728000000100000002000204777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001c01f00020001000151800009036e7331026973c02ac01f00020001000151800006036e7332c042c03e00010001000151800004d5852102c05300010001000151800004d5c41503 28000 b71e0000000100000000000005646e732d31056c61646f74026e6c0000010001 b71e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28001 b6234c9c50102da027580000008c3b42000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd67403c4ee700030000002f4e544c4d535350000100000097b200e0050005002a0000000a000a0020000000434f4d505554455231384e504942560000 b623cc940000000000000000 28002 3a7a0000000100000000000004777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001 3a7a8000000100000002000204777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001c01f00020001000151800009036e7331026973c02ac01f00020001000151800006036e7332c042c03e00010001000151800004d5852102c05300010001000151800004d5c41503 28003 3fb200000001000000000000036e733503777873026e6c0000260001 3fb280000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28004 b6234caa501027ec9f1c0000000000000000 b623cca40000000000000000 28005 c06f0000000100000000000003777777076e6574706f6c6c026e6c0000010001 c06f8000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 28006 6fe40000000100000000000003777777056b6e627362026e6c0000010001 6fe48000000100000002000203777777056b6e627362026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec016c01000020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 28007 f9d300000001000000000000036e7331046372696f026e6c0000010001 f9d380000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 28008 579c00000001000000000000036e7332046372696f026e6c0000010001 579c80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 28009 816800000001000000000000037777770a72656372656174696566026e6c0000010001 816880000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 28010 c60900000001000000000000036e7335046372696f026e6c0000010001 c60980000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 28011 57f300000001000000000000036e7336046372696f026e6c0000010001 57f380000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 28012 2bf5000000010000000000000776726f7577656e077275627269656b026e6c0000010001 2bf5800000010000000200000776726f7577656e077275627269656b026e6c0000010001c0140002000100015180000c026e7306766576696461c01cc01400020001000151800006036e7332c033 28013 d15500000001000000000000026e73027575026e6c0000010001 d15580000001000000040004026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 28014 d15500000001000000000000026e73027575026e6c0000010001 d15580000001000000040004026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 28015 753e0000000100000000000006787334616c6c026e6c00001c0001 753e8000000100000003000206787334616c6c026e6c00001c0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 28016 99300000000100000000000003777777096575726f6d61696c73026e6c0000010001 99308000000100000003000303777777096575726f6d61696c73026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000043e291ad2c04b000100010001518000043e291ad3c05d000100010001518000043e291ad4 28017 eed628000001000000010000026e6c0000060001095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d7364637308706861697272746d026e6c00002100010000025800220000006400580e70686169722d72746d2d6d61696e08706861697272746d026e6c00 eed6a8040000000000000000 28018 1a1500000001000000000000077365727665723007646d6661637473026e6c0000010001 1a1580000001000000020000077365727665723007646d6661637473026e6c0000010001c01400020001000151800010036e73310673697465347503636f6d00c01400020001000151800006036e7332c034 28019 1735000000010000000000000564656d6f6e026e6c00000f0001 1735800000010000000300020564656d6f6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000f036e73320564656d6f6e036e657400c02600010001000151800004c29f4906c03800010001000151800004c29fb004 28020 8425000000010000000000000564656d6f6e026e6c00000f0001 8425800000010000000300020564656d6f6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000f036e73320564656d6f6e036e657400c02600010001000151800004c29f4906c03800010001000151800004c29fb004 28021 0530000000010000000000000474726566026e6c0000010001 0530800000010000000200020474726566026e6c0000010001c00c0002000100015180000e036e7331076167726f776562c011c00c00020001000151800006036e7332c029c025000100010001518000043e5de217c03f000100010001518000043e5de222 28022 464200000001000000000000046d61696c106b6f72746d616e2d696e74726164616c026e6c0000010001 464280000001000000020002046d61696c106b6f72746d616e2d696e74726164616c026e6c0000010001c0110002000100015180000e036e733107616e7461726573c022c01100020001000151800006036e7332c03ac036000100010001518000043e3a260bc050000100010001518000043e3a260c 28023 592500000001000000000000077765626d61696c086e696a6d6567656e026e6c0000010001 592580000001000000020002077765626d61696c086e696a6d6567656e026e6c0000010001c0140002000100015180000f036e73330874656c6562797465c01dc01400020001000151800006036e7334c035c03100010001000151800004d5d38115c04c00010001000151800004d5d38116 28024 d22700000001000000000000046372657709747765616b7a6f6e65026e6c0000010001 d22780000001000000020000046372657709747765616b7a6f6e65026e6c0000010001c01100020001000151800014036e73310a646f6c7068696e2d6973036e657400c01100020001000151800006036e7332c033 28025 7aae0000000100000000000003766937036f72670c62727567676572626f7363680c62727567676572626f736368026e6c0000010001 7aae8000000100000002000003766937036f72670c62727567676572626f7363680c62727567676572626f736368026e6c0000010001c0210002000100015180000b026e73026e6c036e657400c0210002000100015180001206617574683630026e73026e6c027575c048 28026 f0b10000000100000000000005646e732d31056c61646f74026e6c0000010001 f0b18000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28027 b2ba0000000100000000000005646e732d32056c61646f74026e6c0000010001 b2ba8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28028 5747000000010000000000000377777708636f6e6e65787973026e6c0000010001 5747800000010000000300030377777708636f6e6e65787973026e6c0000010001c0100002000100015180000f046e732d310774657075636f6dc019c01000020001000151800007046e732d32c032c01000020001000151800007046e732d33c032c02d000100010001518000043e320d4cc04800010001000151800004c356164ac05b00010001000151800004c3510c03 28029 f4d400000001000000000000036e73320b7472616374696f6e2d6974026e6c0000010001 f4d480000001000000020000036e73320b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28030 0edd00000001000000000000036e73310b7472616374696f6e2d6974026e6c0000010001 0edd80000001000000020000036e73310b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28031 126f000000010000000000000377777709616c7465726e617465026e6c0000010001 126f800000010000000200020377777709616c7465726e617465026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01ac01000020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 28032 ff230000000100000000000005646e732d31056c61646f74026e6c0000010001 ff238000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28033 ef340000000100000000000003626c3102626c06787334616c6c026e6c0000010001 ef348000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28034 e664000000010000000000000667656d6e6f70026e6c00000f0001 e664800000010000000200000667656d6e6f70026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 28035 7ffd0000000100000000000005646e732d32056c61646f74026e6c0000010001 7ffd8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28036 60ec0000000100000000000003777777117265636c616d656c616e67736465776567026e6c0000010001 60ec8000000100000002000003777777117265636c616d656c616e67736465776567026e6c0000010001c01000020001000151800012036e733708786c736572766572036e657400c01000020001000151800006036e7338c03a 28037 cdf100000001000000000000036e73320b7472616374696f6e2d6974026e6c0000010001 cdf180000001000000020000036e73320b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28038 529400000001000000000000036e73310b7472616374696f6e2d6974026e6c0000010001 529480000001000000020000036e73310b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28039 bf510000000100000000000007706461636c7562026e6c0000010001 bf518000000100000003000207706461636c7562026e6c0000010001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 28040 3e140000000100000000000009652d6c756e61746963026e6c0000010001 3e148000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 28041 14a8000000010000000000000a6376616e6765656c6276026e6c0000010001 14a8800000010000000200020a6376616e6765656c6276026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 28042 000000007002faf0f8cf0000020405b401010402 000080010000000000000000 28043 b93028000001000000010000026e6c00000600010274610f746f6e65656c616d7374657264616d026e6c0000010001000002580004c0a8000b b930a8040000000000000000 28044 7a6b000000010000000000000377777712686974726164696f646967697461616c666d026e6c0000010001 7a6b800000010000000200000377777712686974726164696f646967697461616c666d026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03d 28045 d09f0000000100000000000017537469636874696e6772656368747362696a7374616e64026e6c0000ff0001 d09f8000000100000002000017537469636874696e6772656368747362696a7374616e64026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c03e 28046 60d30000000100000000000106686174656b61026e6c00001c00010000291000000000000000 60d38000000100000002000106686174656b61026e6c00001c0001c00c0002000100015180000b036e73310474696469c013c00c00020001000151800006036e7332c02b0000291000000000000000 28047 e1bb00000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 e1bb80000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 28048 3cbe00000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 3cbe80000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 28049 0000000070024000deb700000204059801010402 000080010000000000000000 28050 b62553b65010faf01ba80000000000000000 b625d3b40000000000000000 28051 518900000001000000000000036e733503777873026e6c0000010001 518980000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28052 566000000001000000000000036e733503777873026e6c00001c0001 566080000001000000030003036e733503777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28053 b625d01e5010432081eb0000000000000000 28054 b625d01e50184320ce84000000850690000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8be403c4a3e0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000 28055 b62553b65018faf087e70000009508d9000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc88403c4e080003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000 b625d3b40000000000000000 28056 490b00000001000000000000036e7331046a617a65026e6c0000010001 490b80000001000000020000036e7331046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 28057 490c00000001000000000000036e7332046a617a65026e6c0000010001 490c80000001000000020000036e7332046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 28058 329f00000001000000000000036e73340767617574656e67026e6c0000010001 329f80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28059 b625d02c5011431281630000000000000000 28060 0000000070024000cc4600000204059801010402 000080010000000000000000 28061 3a5700000001000000000000046e6f736f026e6c0000ff0001 3a5780000001000000030002046e6f736f026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 28062 263a0000000100000000000007766462636f6d70026e6c00001c0001 263a8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 28063 b625d02d5010431281620000000000000000 28064 b62553c45011fae21b100000000000000000 b625d3c40000000000000000 28065 25da0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 25da8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28066 b6267f7450104320c0230000000000000000 b626ff740000000000000000 28067 000000007002faf0ccf40000020405b401010402 000080010000000000000000 28068 b6267f74501843201fcd00000085f480000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8be403c4a3e0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000 b626ff740000000000000000 28069 28c300000001000000000000037777770b626f656b656e2d32303030026e6c0000010001 28c380000001000000020002037777770b626f656b656e2d32303030026e6c0000010001c0100002000100015180000a026e730469636d63c01cc01000020001000151800006036e7332c033c030000100010001518000043e643805c046000100010001518000043e643806 28070 0ab60000000100000000000003777777096169726672616e6365026e6c0000010001 0ab68000000100000002000003777777096169726672616e6365026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01ac0100002000100015180000704686e7331c033 28071 18640000000100000000000003777777096169726672616e6365026e6c0000010001 18648000000100000002000003777777096169726672616e6365026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01ac0100002000100015180000704686e7331c033 28072 1eef0000000100000000000004646e7332066e696a636f6d026e6c0000010001 1eef8000000100000002000204646e7332066e696a636f6d026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02c00010001000151800004d5efb108c00c00010001000151800004d5efb116 28073 20b10000000100000000000004646e7331066e696a636f6d026e6c0000010001 20b18000000100000002000204646e7331066e696a636f6d026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d5efb108c03a00010001000151800004d5efb116 28074 b6267f8250114312bf9b0000000000000000 b626ff840000000000000000 28075 000000007002400033b600000204059801010402 000080010000000000000000 28076 b62553c55010fae21b0f0000000000000000 b625d3c40000000000000000 28077 03cc0000000100000000000005686f666d78066d696e6f6377026e6c0000010001 03cc8000000100000002000105686f666d78066d696e6f6377026e6c0000010001c01200020001000151800015086e732d69736d30310963617067656d696e69c019c0120002000100015180000b086e732d69736d3032c036c02d00010001000151800004d5f4a024 28078 22b200000001000000000000036e73340767617574656e67026e6c0000010001 22b280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28079 32b800000001000000000000036e73340767617574656e67026e6c0000010001 32b880000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28080 b0d1000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 b0d1800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 28081 aa17000000010000000000000567677a6261026e6c00000f0001 aa17800000010000000200020567677a6261026e6c00000f0001c00c0002000100015180000f036e73330874656c6562797465c012c00c00020001000151800006036e7334c02ac02600010001000151800004d5d38115c04100010001000151800004d5d38116 28082 b6267f8350104312bf9a0000000000000000 b626ff840000000000000000 28083 b629a6275010432000dd0000000000000000 28084 83a8000000010000000000000c656c7365766965722d7772670a646d64656c6976657279026e6c0000010001 83a8800000010000000200000c656c7365766965722d7772670a646d64656c6976657279026e6c0000010001c01900020001000151800010036e73310673697465347503636f6d00c01900020001000151800006036e7332c03c 28085 60d30000000100000000000006686174656b61026e6c00001c0001 60d38000000100000002000006686174656b61026e6c00001c0001c00c0002000100015180000b036e73310474696469c013c00c00020001000151800006036e7332c02b 28086 b629a62750184320d786000000857d80000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8be403c4a3e0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000 28087 53d5000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 53d5800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 28088 4f7200000001000000000000036e733208767575727765726b026e6c0000010001 4f7280000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 28089 9c86000000010000000000000277770774656c666f7274026e6c0000010001 9c86800000010000000200010277770774656c666f7274026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800014036e733202657507636f6e63657274036e657400c02b00010001000151800004d5c22815 28090 b629a6355011431200550000000000000000 28091 b61b832250102da081310000000000000000 28092 79460000000100000000000009626f6f6e656b616d70026e6c0000ff0001 79468000000100000002000209626f6f6e656b616d70026e6c0000ff0001c00c0002000100015180000c036e733105636176656fc016c00c00020001000151800006036e7332c02ec02a000100010001518000045112a002c042000100010001518000045112a102 28093 e44900000001000000000000046f656372026e6c0000010001 e44980000001000000020002046f656372026e6c0000010001c00c0002000100015180000f086d61696c6761746503657572c011c00c0002000100015180000906706f70657965c02ec0250001000100015180000482730101c0400001000100015180000482730f02 28094 183d000000010000000000000a6265746572686f72656e026e6c0000ff0001 183d800000010000000200010a6265746572686f72656e026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c017c04400010001000151800004c2860043 28095 b627516b5010faf0f2150000000000000000 b627d1640000000000000000 28096 3ef7000000010000000000000662616f626162026e6c00001c0001 3ef7800000010000000200000662616f626162026e6c00001c0001c00c00020001000151800012036e73310878656e6f73697465036e657400c00c00020001000151800006036e7332c02b 28097 2efd000000010000000000000469632d73026e6c00000f0001 2efd800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 28098 b629a6365010431200540000000000000000 28099 b627516b5018faf0847000000095e1be000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc89403c4e090003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000 b627d1640000000000000000 28100 517d0000000100000000000006706f7274616c0774657175696c6108666f72747974776f026e6c0000010001 517d8000000100000002000206706f7274616c0774657175696c6108666f72747974776f026e6c0000010001c01b0002000100015180000704646e7331c01bc01b0002000100015180000704646e7332c01bc03800010001000151800004c3eaad94c04b000100010001518000045111288a 28101 1c3000000001000000000000037777770770616368697261026e6c0000010001 1c3080000001000000020002037777770770616368697261026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c018c01000020001000151800006036e7332c030c02c000100010001518000045054ed14c04900010001000151800004d5f72f14 28102 95ad00000001000000000000036e733208767575727765726b026e6c0000010001 95ad80000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 28103 42a4000000010000000000000a686f6f7273747564696f026e6c0000ff0001 42a4800000010000000200020a686f6f7273747564696f026e6c0000ff0001c00c0002000100015180000d036e733106796f72697465c017c00c00020001000151800006036e7332c02fc02b0001000100015180000451047320c0440001000100015180000451047321 28104 ae69000000010000000000000377777707636f6e74726f6c026e6c0000010001 ae69800000010000000200000377777707636f6e74726f6c026e6c0000010001c01000020001000151800018036e7330026e6c0b7369746570726f7465637403636f6d00c01000020001000151800006036e7331c030 28105 5b1a000000010000000000000568736c6177026e6c0000ff0001 5b1a800000010000000300010568736c6177026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 28106 50d300000001000000000000026763065f6d736463730d696e7472612d76656e68756973026e6c0000060001 50d384030001000000010000026763065f6d736463730d696e7472612d76656e68756973026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 28107 b62751795011fae2f17d0000000000000000 b627d1740000000000000000 28108 000000007002faf094de0000020405b401010402 000080010000000000000000 28109 8f6100000001000000000000046265756b086a6d64656a6f6e67026e6c0000010001 8f6180000001000000020002046265756b086a6d64656a6f6e67026e6c0000010001c0110002000100015180000c026e7306787334616c6cc01ac01100020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 28110 b653000000010000000000000377777711776f756477696a6b2d70726f6d6f746965026e6c0000010001 b653800000010000000200000377777711776f756477696a6b2d70726f6d6f746965026e6c0000010001c01000020001000151800010036e733109666972737466696e64c022c01000020001000151800006036e7332c03a 28111 9c90000000010000000000000377777703646674026e6c0000010001 9c90800000010000000200000377777703646674026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c02c 28112 62f6001000010000000000010e63656e747261616c626568656572026e6c00000100010000290800000000000000 62f6800000010000000300040e63656e747261616c626568656572026e6c0000010001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae0000291000000000000000 28113 367e00000001000000000000036e7332076e656473746174026e6c0000010001 367e80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28114 9b3f00000001000000000000036e7334076e656473746174026e6c0000010001 9b3f80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28115 b627517a5010fae2f17c0000000000000000 b627d1740000000000000000 28116 b62a382a5010faf0d33d0000000000000000 b62ab8240000000000000000 28117 e62900000001000000000000026e73076e65746c616e64026e6c0000010001 e62980000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 28118 729d00000001000000000000036e7332076e65746c616e64026e6c0000010001 729d80000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 28119 7fe200000001000000000000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657306646f6d61696e026e6c0000060001 7fe284030001000000010000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657306646f6d61696e026e6c0000060001c03b00060001000038400036026e730f646f6d61696e2d7265676973747279c03b0a686f73746d6173746572c0520bf1e540000070800000384000278d0000003840 28120 90f6000000010000000000000663616e646561026e6c00000f0001 90f6800000010000000300030663616e646561026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 28121 a01e000000010000000000000377777703626e64026e6c0000010001 a01e800000010000000200010377777703626e64026e6c0000010001c0100002000100015180000b08646e73626e626e6cc010c0100002000100015180000c026e73036b706e03636f6d00c02800010001000151800004c2976601 28122 25b9000000010000000000000a616e67656c7373697465026e6c00000f0001 25b9800000010000000200010a616e67656c7373697465026e6c00000f0001c00c0002000100015180000f036e73330864686f7374696e67c017c00c00020001000151800006036e7332c02fc04600010001000151800004515b000a 28123 bf2e00000001000000000000066f6e6c696e6503617470026e6c0000010001 bf2e80000001000000020001066f6e6c696e6503617470026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800013036e7332026e6c0669676e697465036e657400c02b00010001000151800004d4298505 28124 1053000000010000000000000377777704696b6561026e6c0000010001 1053800000010000000200000377777704696b6561026e6c0000010001c010000200010001518000150a676174656b656570657204696b656103636f6d00c010000200010001518000130761757468323130026e73027575036e657400 28125 b62a382a5018faf0b9fc000000958d5a000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afc89403c4e090003000000364e544c4d535350000100000097b208e0080008002e0000000e000e002000000050484149522d52544d2d4d41494e504841495252544d0000 b62ab8240000000000000000 28126 d97c0000000100000000000005646e732d32056c61646f74026e6c0000010001 d97c8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28127 c479000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 c479800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 28128 f82c000000010000000000000377777706787878746770026e6c0000010001 f82c800000010000000200000377777706787878746770026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02e 28129 2b3900000001000000000000036e733208767575727765726b026e6c0000010001 2b3980000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 28130 869e0000000100000000000003777777076172747465616d026e6c0000010001 869e8000000100000003000303777777076172747465616d026e6c0000010001c01000020001000151800010036e733109736974656279746573c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004c2a55e5ac04800010001000151800004c356781cc05a000100010001518000043ec58016 28131 f22d000000010000000000000556534653310d76616e5f73746161766572656e026e6c0000010001 f22d840300010000000100000556534653310d76616e5f73746161766572656e026e6c0000010001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 28132 b62a38385011fae2d2a50000000000000000 b62ab8340000000000000000 28133 fad100000001000000000000036e7331096e65646572686f7374026e6c0000010001 fad180000001000000020002036e7331096e65646572686f7374026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9302c03c00010001000151800004d5efb241 28134 44f800000001000000000000036e7332096e65646572686f7374026e6c0000010001 44f880000001000000020002036e7332096e65646572686f7374026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9302c00c00010001000151800004d5efb241 28135 166400000001000000000000037777770568616d6163026e6c0000010001 166480000001000000020002037777770568616d6163026e6c0000010001c0100002000100015180000f026e7309656174736572766572c016c01000020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 28136 e65400000001000000000000037777770476647764026e6c0000010001 e65480000001000000020002037777770476647764026e6c0000010001c0100002000100015180000a036e733103686978c015c01000020001000151800006036e7332c02dc02900010001000151800004d5a0da0ac03f0001000100015180000451112ec3 28137 b62a38395010fae2d2a40000000000000000 b62ab8340000000000000000 28138 088a000000010000000000000e63656e747261616c626568656572026e6c0000010001 088a800000010000000300030e63656e747261616c626568656572026e6c0000010001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae 28139 27140000000100000000000005646e732d31056c61646f74026e6c0000010001 27148000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28140 265e0000000100000000000006706f7274616c0774657175696c6108666f72747974776f026e6c0000010001 265e8000000100000002000206706f7274616c0774657175696c6108666f72747974776f026e6c0000010001c01b0002000100015180000704646e7331c01bc01b0002000100015180000704646e7332c01bc03800010001000151800004c3eaad94c04b000100010001518000045111288a 28141 0ae600000001000000000000036e733109786974656d65646961026e6c0000010001 0ae680000001000000020002036e733109786974656d65646961026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5efa404c04b00010001000151800004d5efa405 28142 02b700000001000000000000036e733209786974656d65646961026e6c0000010001 02b780000001000000020002036e733209786974656d65646961026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5efa404c04b00010001000151800004d5efa405 28143 b6234caa50112da099670000000000000000 b623cca40000000000000000 28144 2e4a0000000100000000000003776c7a026e6c00000f0001 2e4a8000000100000002000103776c7a026e6c00000f0001c00c00020001000151800006036e7330c00cc00c00020001000151800010036e7330066361726f7461036e657400c02400010001000151800004c14389fa 28145 9c5800100001000000000001036e733104686f6d65026e6c00000100010000290800000080000000 9c5880000001000000030004036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 28146 4e2c00100001000000000001036e733104686f6d65026e6c00002600010000290800000080000000 4e2c80000001000000030004036e733104686f6d65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 28147 271600100001000000000001036e733204686f6d65026e6c00000100010000290800000080000000 271680000001000000030004036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 28148 938b00100001000000000001036e733204686f6d65026e6c00002600010000290800000080000000 938b80000001000000030004036e733204686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 28149 dba900100001000000000001036e733304686f6d65026e6c00000100010000290800000080000000 dba980000001000000030004036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 28150 922300100001000000000001036e733304686f6d65026e6c00002600010000290800000080000000 922380000001000000030004036e733304686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 28151 1b0500100001000000000001036e733404686f6d65026e6c00000100010000290800000080000000 1b0580000001000000030004036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 28152 d27a00000001000000000000037777770a7374617274706f726e6f026e6c0000010001 d27a80000001000000020000037777770a7374617274706f726e6f026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 28153 994000100001000000000001036e733404686f6d65026e6c00002600010000290800000080000000 994080000001000000030004036e733404686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 28154 690b0000000100000000000003616267026e6c0000010001 690b8000000100000003000203616267026e6c0000010001c00c0002000100015180000d036e733106776964657873c010c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c028c02400010001000151800004d4ccc0fcc059000100010001518000043efa0703 28155 79710000000100000000000003524b5a024e4c00000f0001 79718000000100000002000203524b5a024e4c00000f0001c00c0002000100015180000c036e7331056e6574636fc010c00c00020001000151800006036e7332c028c02400010001000151800004c26d4a82c03c00010001000151800004c26dd146 28156 384c0010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 384c8000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 28157 1b040000000100000000000003777777056578616374026e6c0000010001 1b048000000100000002000103777777056578616374026e6c0000010001c01000020001000151800008056578616374c010c0100002000100015180000b026e73026e6c036e657400c02a00010001000151800004910e3c0a 28158 14e100000001000000000000086f707573666c6f77026e6c00000f0001 14e180000001000000020002086f707573666c6f77026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 28159 17a00000000100000000000009726f7a656e62757267026e6c00000f000100 17a08000000100000002000209726f7a656e62757267026e6c00000f0001c00c0002000100015180000e026e73086d656761706c6578c016c00c00020001000151800006036e7331c02dc02a00010001000151800004504f6101c04400010001000151800004504f6102 28160 b2a9000000010000000000000377777707676f6d756e646f026e6c0000010001 b2a9800000010000000200000377777707676f6d756e646f026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 28161 93a400000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 93a480000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 28162 e49100000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 e49180000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28163 fce500000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 fce580000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28164 63df000000010000000000000377777706637662616e6b026e6c0000010001 63df800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28165 4ca000000001000000000000036e733104686f6d65026e6c0000010001 4ca080000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 28166 265000000001000000000000036e733104686f6d65026e6c0000260001 265080000001000000030003036e733104686f6d65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 28167 89b100000001000000000000036e733204686f6d65026e6c0000010001 89b180000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 28168 528200000001000000000000036d78310761737034616c6c026e6c0000010001 528280000001000000030003036d78310761737034616c6c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc05000010001000151800004c1ac0bae 28169 265700000001000000000000036d78310761737034616c6c026e6c00001c0001 265780000001000000030003036d78310761737034616c6c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc05000010001000151800004c1ac0bae 28170 e56b00000001000000000000036d78310761737034616c6c026e6c0000260001 e56b80000001000000030003036d78310761737034616c6c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc05000010001000151800004c1ac0bae 28171 3cf600000001000000000000036d78320761737034616c6c026e6c0000010001 3cf680000001000000030003036d78320761737034616c6c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc05000010001000151800004c1ac0bae 28172 b35700000001000000000000036d78320761737034616c6c026e6c00001c0001 b35780000001000000030003036d78320761737034616c6c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc05000010001000151800004c1ac0bae 28173 7d0d00000001000000000000036d78320761737034616c6c026e6c0000260001 7d0d80000001000000030003036d78320761737034616c6c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc05000010001000151800004c1ac0bae 28174 78fb00000001000000000000036e73310761737034616c6c026e6c00001c0001 78fb80000001000000030003036e73310761737034616c6c026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c1adf9c3c03a000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 28175 633d00000001000000000000036e733304686f6d65026e6c0000010001 633d80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 28176 860900000001000000000000036e73310761737034616c6c026e6c0000260001 860980000001000000030003036e73310761737034616c6c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c1adf9c3c03a000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 28177 c8cc00000001000000000000036e733304686f6d65026e6c0000260001 c8cc80000001000000030003036e733304686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 28178 82a300000001000000000000036e73320761737034616c6c026e6c00001c0001 82a380000001000000030003036e73320761737034616c6c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c00c000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 28179 646600000001000000000000036e733404686f6d65026e6c0000010001 646680000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 28180 323300000001000000000000036e733404686f6d65026e6c0000260001 323380000001000000030003036e733404686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 28181 fdac00000001000000000000036e73320761737034616c6c026e6c0000260001 fdac80000001000000030003036e73320761737034616c6c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c00c000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 28182 abd200000001000000000000036e73330761737034616c6c026e6c00001c0001 abd280000001000000030003036e73330761737034616c6c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc00c00010001000151800004c1ac0bae 28183 b99b00000001000000000000036e73330761737034616c6c026e6c0000260001 b99b80000001000000030003036e73330761737034616c6c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc00c00010001000151800004c1ac0bae 28184 dd3c000000010000000000000672656c6179310b7669616e6574776f726b73026e6c0000010001 dd3c800000010000000200020672656c6179310b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 28185 749e000000010000000000000672656c6179320b7669616e6574776f726b73026e6c0000010001 749e800000010000000200020672656c6179320b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 28186 6eb00000000100000000000006636861726973026e6c0000010001 6eb08000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 28187 5a690000000100000000000004656e6369026e6c0000010001 5a698000000100000002000004656e6369026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c030 28188 6d4000000001000000000000026e7306787334616c6c026e6c0000010001 6d4080000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 28189 f89500000001000000000000036e733206787334616c6c026e6c0000010001 f89580000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 28190 90ca00000001000000000000037777770976772d63656e746572026e6c0000010001 90ca80000001000000020000037777770976772d63656e746572026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c032 28191 5d11000000010000000000000377777707696d67696e666f026e6c0000010001 5d11800000010000000200000377777707696d67696e666f026e6c0000010001c0100002000100015180000e036e7333046965747a03636f6d00c01000020001000151800006036e7334c030 28192 9955000000010000000000000967616c6c65726965730d706172746e6572636c69636b73026e6c0000010001 9955800000010000000200020967616c6c65726965730d706172746e6572636c69636b73026e6c0000010001c0160002000100015180000f036e73310861746c616e74697ac024c01600020001000151800006036e7332c03cc03800010001000151800004d5efa011c05300010001000151800004d5efa075 28193 0a80000000010000000000000377777706637662616e6b026e6c0000010001 0a80800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28194 47a500000001000000000000037777770b67736d70726f6475637473026e6c0000010001 47a580000001000000020000037777770b67736d70726f6475637473026e6c0000010001c01000020001000151800018036e73370e666c6578776562686f7374696e6703636f6d00c01000020001000151800006036e7338c034 28195 e3c6000000010000000000000663617374656c026e6c0000ff0001 e3c6800000010000000200020663617374656c026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 28196 328c000000010000000000000377777706637662616e6b026e6c0000010001 328c800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28197 058800000001000000000000026e730c6d65676170726f7669646572026e6c00001c0001 058880000001000000030003026e730c6d65676170726f7669646572026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c0001000100015180000450474002c03e0001000100015180000450474102c05000010001000151800004d943ee57 28198 88e400000001000000000000026e730c6d65676170726f7669646572026e6c0000260001 88e480000001000000030003026e730c6d65676170726f7669646572026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c0001000100015180000450474002c03e0001000100015180000450474102c05000010001000151800004d943ee57 28199 523800000001000000000000036e73320c6d65676170726f7669646572026e6c00001c0001 523880000001000000030003036e73320c6d65676170726f7669646572026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0310001000100015180000450474002c00c0001000100015180000450474102c05000010001000151800004d943ee57 28200 d20e00000001000000000000036e73320c6d65676170726f7669646572026e6c0000260001 d20e80000001000000030003036e73320c6d65676170726f7669646572026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0310001000100015180000450474002c00c0001000100015180000450474102c05000010001000151800004d943ee57 28201 0a9100000001000000000000036e733208767575727765726b026e6c0000010001 0a9180000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 28202 83d200000001000000000000054d4f4c454e0350434d026e6c0000010001 83d280000001000000020001054d4f4c454e0350434d026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 28203 e4de00000001000000000000037777770d656e6572676965646972656374026e6c0000010001 e4de80000001000000020001037777770d656e6572676965646972656374026e6c0000010001c01000020001000151800015086e732d69736d30310963617067656d696e69c01ec0100002000100015180000b086e732d69736d3032c03bc03200010001000151800004d5f4a024 28204 0a80000000010000000000000377777706637662616e6b026e6c0000010001 0a80800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28205 0a80000000010000000000000377777706637662616e6b026e6c0000010001 0a80800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28206 af2300000001000000000000036e733106657472616465026e6c00001c0001 af2380000001000000020000036e733106657472616465026e6c00001c0001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 28207 98a800000001000000000000036e733106657472616465026e6c0000260001 98a880000001000000020000036e733106657472616465026e6c0000260001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 28208 c94d00000001000000000000036e733206657472616465026e6c00001c0001 c94d80000001000000020000036e733206657472616465026e6c00001c0001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 28209 ec7500000001000000000000036e733206657472616465026e6c0000260001 ec7580000001000000020000036e733206657472616465026e6c0000260001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 28210 09fc00000001000000000000036f617a026e6c0000ff0001 09fc80000001000000020002036f617a026e6c0000ff0001c00c0002000100015180000f036e73310861746c616e74697ac010c00c00020001000151800006036e7332c028c02400010001000151800004d5efa011c03f00010001000151800004d5efa075 28211 2f8100000001000000000000076f626a65637473026e6c0000ff0001 2f8180000001000000030003076f626a65637473026e6c0000ff0001c00c0002000100015180000e046865726101780463756369c014c00c0002000100015180000c066865726d6573026e6cc02fc00c00020001000151800009066865726d6573c02dc02800010001000151800004d47d8001c04200010001000151800004c143ef02c05a00010001000151800004d47d8002 28212 328c000000010000000000000377777706637662616e6b026e6c0000010001 328c800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28213 328c000000010000000000000377777706637662616e6b026e6c0000010001 328c800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28214 415400000001000000000000037777770b726563687473707261616b026e6c026e6c0000010001 415484030001000000010000037777770b726563687473707261616b026e6c026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 28215 d8cf00000001000000000000127a65696c7363686f6f6c61616c736d656572026e6c0000010001 d8cf80000001000000020002127a65696c7363686f6f6c61616c736d656572026e6c0000010001c00c00020001000151800011046d61727309637962657263697479c01fc00c000200010001518000080576656e7573c038c0330001000100015180000451113ff0c0500001000100015180000451113ff1 28216 33dc00000001000000000000146e69657577736272696576656e73657276696365026e6c00000f0001 33dc80000001000000030001146e69657577736272696576656e73657276696365026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 28217 9d76000000010000000000000377777705686965726f026e6c0000010001 9d76800000010000000200000377777705686965726f026e6c0000010001c01000020001000151800018036e73310e7765626d61727463656e7472616c03636f6d00c01000020001000151800006036e7332c02e 28218 3aec000000010000000000000b7374617274706167696e610861726e6f73746174026e6c0000010001 3aec800000010000000200020b7374617274706167696e610861726e6f73746174026e6c0000010001c0180002000100015180000e026e7308696e7465722d6974c021c01800020001000151800006036e7332c038c03500010001000151800004d5c4385ac04f00010001000151800004d5c4385b 28219 c9f100000001000000000000046d61696c08676f656469646565026e6c0000ff0001 c9f180000001000000020000046d61696c08676f656469646565026e6c0000ff0001c01100020001000151800010026e730777697265687562036e657400c01100020001000151800006036e7332c031 28220 3b0c000000010000000000000477697368026e6c00000f0001 3b0c800000010000000300020477697368026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c011c00c0002000100015180000704616e7332c02ac00c0002000100015180001404616e73330a74697363616c696e657402626500c02500010001000151800004c3f14d38c04000010001000151800004c3f13325 28221 4c6300000001000000000000037777770e776562686f7374696e6774616c6b026e6c0000010001 4c6380000001000000030002037777770e776562686f7374696e6774616c6b026e6c0000010001c01000020001000151800012036e73310b6b6c696b686f7374696e67c01fc01000020001000151800006036e7332c037c01000020001000151800015036e73310b6b6c696b686f7374696e6703636f6d00c033000100010001518000044260dd7ec051000100010001518000044260dd7f 28222 22f0001000010000000000010469632d73026e6c00000f00010000290800000000000000 22f0800000010000000200010469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 28223 ae8a000000010000000000000e6772616669736368657a616b656e026e6c0000ff0001 ae8a800000010000000200020e6772616669736368657a616b656e026e6c0000ff0001c00c0002000100015180000d026e73076b6e6f77617265c01bc00c00020001000151800006036e7332c032c02f00010001000151800004c3402003c04800010001000151800004c340202b 28224 71ac00000001000000000000036e733503777873026e6c0000010001 71ac80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28225 cb7800000001000000000000027330026e6c0000010001 cb7880000001000000020002027330026e6c0000010001c00c0002000100015180000d026e73076e656473746174c00fc00c00020001000151800006036e7333c026c02300010001000151800004d4482615c03c00010001000151800004d5c4021d 28226 a02d0000000100000000000008736179616e6f7261056d62757975026e6c0000010001 a02d8000000100000002000008736179616e6f7261056d62757975026e6c0000010001c01500020001000151800010026e73076379736f6e657403636f6d00c01500020001000151800006036e7331c032 28227 b6e300000001000000000000057a7761616e06787334616c6c026e6c0000010001 b6e380000001000000030002057a7761616e06787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 28228 79430000000100000000000006787334616c6c026e6c0000ff0001 79438000000100000003000206787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 28229 8899000000010000000000000c746865766973696f6e776562026e6c0000ff0001 8899800000010000000200020c746865766973696f6e776562026e6c0000ff0001c00c0002000100015180000f036e7331087468656c6f646765c019c00c00020001000151800006036e7332c031c02d00010001000151800004c3565d0ac04800010001000151800004c3565d0b 28230 757000000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 757080000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28231 11cc00000001000000000000046d61696c0a6c697474656c66757365026e6c0000010001 11cc80000001000000020000046d61696c0a6c697474656c66757365026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c036 28232 496600000001000000000000075261696c70726f026e6c0000ff0001 496680000001000000030003075261696c70726f026e6c0000ff0001c00c00020001000151800012047072693103646e73067073696e6574c014c00c000200010001518000070470726932c02dc00c000200010001518000070470726933c02dc028000100010001518000049a0ff9a6c046000100010001518000049a0ff9aac059000100010001518000049a0ff9ae 28233 47710000000100000000000003777777046b6e6d69026e6c0000010001 47718000000100000002000203777777046b6e6d69026e6c0000010001c01000020001000151800008057374797832c010c0100002000100015180000e036e733107737572666e6574c015c029000100010001518000049117fe9fc03d00010001000151800004c0576a65 28234 40d9000000010000000000000761727465736961026e6c00001c0001 40d9800000010000000200000761727465736961026e6c00001c0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02c 28235 48f1000000010000000000000469632d73026e6c00000f0001 48f1800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 28236 4be30000000100000000000003777777076172626f6e6564026e6c0000010001 4be38000000100000003000003777777076172626f6e6564026e6c0000010001c01000020001000151800012026e7302756b06707273657276036e657400c01000020001000151800008026e73026465c032c01000020001000151800008026e73026e6cc032 28237 0c9d00000001000000000000034e545006585334414c4c024e4c0000010001 0c9d80000001000000030002034e545006585334414c4c024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 28238 94d8000000010000000000000e77657373656c6d616e2d696e666f026e6c00000f0001 94d8800000010000000200020e77657373656c6d616e2d696e666f026e6c00000f0001c00c0002000100015180000b036e73310476696374c01bc00c00020001000151800006036e7332c033c02f00010001000151800004d413d2c2c04600010001000151800004d43d1529 28239 af410000000100000000000008646f6c6c79706f70026e6c0000010001 af418000000100000002000208646f6c6c79706f70026e6c0000010001c00c0002000100015180000f036e733108696e74726f776562c015c00c00020001000151800006036e7332c02dc0290001000100015180000450416028c04400010001000151800004c356780c 28240 76c8000000010000000000000a64696572656e7475696e0c7665727a616d656c67696473026e6c0000010001 76c8800000010000000200000a64696572656e7475696e0c7665727a616d656c67696473026e6c0000010001c01700020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01700020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 28241 720b00000001000000000000037777770d67616d6573776f726b73686f70026e6c0000010001 720b80000001000000020002037777770d67616d6573776f726b73686f70026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c01ec01000020001000151800006036e7332c036c03200010001000151800004d90867fec05100010001000151800004c1ad2bfe 28242 055700000001000000000000037777770565626f6e65026e6c0000010001 055780000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 28243 9adf00000001000000000000037777770774726170686963026e6c0000010001 9adf80000001000000020000037777770774726170686963026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c030 28244 b4ae00000001000000000000037777770565626f6e65026e6c0000010001 b4ae80000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 28245 2ad600000001000000000000036e73340767617574656e67026e6c0000010001 2ad680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28246 949f00000001000000000000037777770565626f6e65026e6c0000010001 949f80000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 28247 60f1000000010000000000000377777707646967696d6d6f026e6c0000010001 60f1800000010000000300000377777707646967696d6d6f026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c032c0100002000100015180000805646e733132c032 28248 30380000000100000000000007616b6e746c6c6203616b6e026e6c0000010001 30388000000100000002000207616b6e746c6c6203616b6e026e6c0000010001c01400020001000151800010066d696e6e6965066f6d726f6570c018c0140002000100015180000805726f62696ec033c02c00010001000151800004913a1e04c04800010001000151800004913a1a34 28249 9e0300000001000000000000036e733503777873026e6c0000010001 9e0380000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28250 4ac7000000010000000000000769636573686f70026e6c0000020001 4ac7800000010000000200020769636573686f70026e6c0000020001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc028000100010001518000043efa0b85c03a000100010001518000043efa0b87 28251 413a00000001000000000000046d61696c0f64616d656e2d686f6f67657a616e64026e6c0000010001 413a80000001000000020002046d61696c0f64616d656e2d686f6f67657a616e64026e6c0000010001c01100020001000151800012026e730c696e746572636f6e6e656374c021c01100020001000151800006036e7332c038c03500010001000151800004d453c005c05300010001000151800004d453c006 28252 dab200000001000000000000037777770864696769736b6172026e6c0000010001 dab280000001000000030002037777770864696769736b6172026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 28253 055700000001000000000000037777770b76726564656e737465696e026e6c0000010001 055784030001000000010000037777770b76726564656e737465696e026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 28254 c3790000000100000000000003626974026e6c00000f0001 c3798000000100000003000303626974026e6c00000f0001c00c0002000100015180000a076e736175746831c00cc00c0002000100015180000a076e736175746832c00cc00c0002000100015180000a076e736175746833c00cc02400010001000151800004d5880c33c03a00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 28255 0af20000000100000000000003777777046b6e6d69026e6c0000010001 0af28000000100000002000203777777046b6e6d69026e6c0000010001c01000020001000151800008057374797832c010c0100002000100015180000e036e733107737572666e6574c015c029000100010001518000049117fe9fc03d00010001000151800004c0576a65 28256 9e700000000100000000000005747261786f026e6c0000010001 9e708000000100000002000005747261786f026e6c0000010001c00c00020001000151800012036e73310872656d6f74696f6e036e657400c00c00020001000151800006036e7333c02a 28257 adeb00000001000000000000037777770e737065656c7370656c6c65746a65026e6c0000010001 adeb80000001000000020000037777770e737065656c7370656c6c65746a65026e6c0000010001c01000020001000151800019036e73310f6c696e6b67696473686f7374696e6703636f6d00c01000020001000151800006036e7332c037 28258 0b3128000001000000010000024e4c0000060001095f6b65726265726f73045f746370026463065f6d736463730a454c5354414c4144414d024e4c00002100010000025800240000006400580e656c7374616c6164616d2d7372760a454c5354414c4144414d024e4c00 0b31a8040000000000000000 28259 ae7a00000001000000000000037777770e76766d6f6e6e69636b656e64616d026e6c0000010001 ae7a80000001000000020000037777770e76766d6f6e6e69636b656e64616d026e6c0000010001c01000020001000151800013046e7234350834646e73686f737403636f6d00c01000020001000151800007046e723436c038 28260 222d000000010000000000000a6f636b656e6275726768026e6c0000ff0001 222d800000010000000200020a6f636b656e6275726768026e6c0000ff0001c00c00020001000151800012026e730c696e746572636f6e6e656374c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d453c005c04900010001000151800004d453c006 28261 8eb10000000100000000000013626f757762656472696a66646577616464656e026e6c0000010001 8eb18000000100000002000013626f757762656472696a66646577616464656e026e6c0000010001c00c00020001000151800023097765626d696e642d3108637573746f6d6572026e6c07656173796e6574036e657400c00c00020001000151800006036e7330c047 28262 4b990000000100000000000017626f736765726563687473646575727761617264657273026e6c00000f0001 4b998000000100000003000217626f736765726563687473646575727761617264657273026e6c00000f0001c00c0002000100015180000d036e733106776964657873c024c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c03cc03800010001000151800004d4ccc0fcc06d000100010001518000043efa0703 28263 751a000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 751a800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 28264 806600000001000000000000037777770373756e026e6c0000010001 806680000001000000020000037777770373756e026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 28265 0000000070024000eb890000020405b401010402 000080010000000000000000 28266 b62c80b350104470dced0000000000000000 28267 bdd1000000010000000000000a62696762726f74686572026e6c00000f0001 bdd1800000010000000300030a62696762726f74686572026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c017c00c0002000100015180000a076e736175746832c033c00c0002000100015180000a076e736175746833c033c02b00010001000151800004d5880c33c04500010001000151800004d5880c3bc05b00010001000151800004d4ccc00b 28268 832200000001000000000000036e7332086d65646961776562026e6c0000010001 832280000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 28269 971900000001000000000000036e7333086d65646961776562026e6c0000010001 971980000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 28270 b62c80b3501844706614000000979708000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 28271 6183000000010000000000000a6d656e746f7370726f64086c6f7374626f7973026e6c0000010001 6183800000010000000200020a6d656e746f7370726f64086c6f7374626f7973026e6c0000010001c0170002000100015180000906636173746f72c017c0170002000100015180000906706f6c6c7578c017c034000100010001518000043e32050ac04900010001000151800004c297d912 28272 7f8900000001000000000000026e7306787334616c6c026e6c00001c0001 7f8980000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 28273 287200000001000000000000036e733303777873026e6c0000010001 287280000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28274 ca7000000001000000000000036e733206787334616c6c026e6c00001c0001 ca7080000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 28275 ca6100000001000000000000096d61696c64726f703906787334616c6c026e6c0000010001 ca6180000001000000030002096d61696c64726f703906787334616c6c026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000d026e730472697065036e657400c03100010001000151800004c26d0642c04200010001000151800004c26d0963 28276 d8030000000100000000000007617261676f726e0b73746172746b6162656c33026e6c0000ff0001 d8038000000100000003000307617261676f726e0b73746172746b6162656c33026e6c0000ff0001c0140002000100015180000b04646e733103766970c020c0140002000100015180000704646e7332c039c0140002000100015180000704646e7333c039c03400010001000151800004d44fe803c04b00010001000151800004c3f5c782c05e00010001000151800004d44ff303 28277 db220000000100000000000008736179616e6f7261056d62757975026e6c0000010001 db228000000100000002000008736179616e6f7261056d62757975026e6c0000010001c01500020001000151800010026e73076379736f6e657403636f6d00c01500020001000151800006036e7331c032 28278 d14f00000001000000000000106865746272616e636865627572656175026e6c0000010001 d14f80000001000000020002106865746272616e636865627572656175026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01dc00c00020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 28279 b62c80c150114462dc530000000000000000 28280 0000000070024000beea0000020405b401010402 000080010000000000000000 28281 16e4000000010000000000000b666f6b6b65727370616365026e6c00000f0001 16e4800000010000000200010b666f6b6b65727370616365026e6c00000f0001c00c000200010001518000160873706163657075620a64757463687370616365c018c00c0002000100015180000b026e73026e6c036e657400c02c00010001000151800004c2b2d042 28282 b6234cab50102da099660000000000000000 b623cca40000000000000000 28283 d85900100001000000000001086176656e747572610a62686d732d67726f6570026e6c00000100010000290800000000000000 d85980000001000000020003086176656e747572610a62686d732d67726f6570026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c03400010001000151800004d9726162c04600010001000151800004d97261610000291000000000000000 28284 607600000001000000000000036e73350b70656c6963616e2d696374026e6c0000010001 607680000001000000020002036e73350b70656c6963616e2d696374026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01cc01000020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 28285 aafc001000010000000000010e736c6172746962617274666173740a62686d732d67726f6570026e6c00000100010000290800000000000000 aafc800000010000000200030e736c6172746962617274666173740a62686d732d67726f6570026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc03a00010001000151800004d9726162c04c00010001000151800004d97261610000291000000000000000 28286 b62c80c250104462dc520000000000000000 28287 b62f3e5b50104470f2a30000000000000000 b62fbe540000000000000000 28288 b62f3e5b50184470267d00000097ed56000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 b62fbe540000000000000000 28289 6cd000000001000000000000037777770a787878636f6e74616374026e6c0000010001 6cd080000001000000020002037777770a787878636f6e74616374026e6c0000010001c01000020001000151800013036e73310c7665727a616d656c6c616e64c01bc01000020001000151800006036e7332c033c02f0001000100015180000452c04e3cc04e0001000100015180000452c04e3d 28290 77370000000100000000000003777777096b696473746f703230026e6c0000010001 77378000000100000002000003777777096b696473746f703230026e6c0000010001c01000020001000151800012036e7331086974732d646e733403636f6d00c01000020001000151800006036e7332c032 28291 33ad0000000100000000000006636861726973026e6c00000f0001 33ad8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 28292 b62f3e6950114462f2090000000000000000 b62fbe640000000000000000 28293 2ef900000001000000000000026e73076e65746c616e64024e4c0000010001 2ef980000001000000020002026e73076e65746c616e64024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 28294 0000000070024000d4da0000020405b401010402 000080010000000000000000 28295 b62f3e6a50104462f2080000000000000000 b62fbe640000000000000000 28296 b5f500000001000000000000037777770b73746172746e6174696f6e026e6c0000010001 b5f580000001000000020000037777770b73746172746e6174696f6e026e6c0000010001c01000020001000151800010036e733106686f73747335036e657400c01000020001000151800006036e7332c034 28297 b62fc881501044707e6d0000000000000000 28298 115c00000001000000000000086176656e747572610a62686d732d67726f6570026e6c0000010001 115c80000001000000020002086176656e747572610a62686d732d67726f6570026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c03400010001000151800004d9726162c04600010001000151800004d9726161 28299 08ae000000010000000000000e736c6172746962617274666173740a62686d732d67726f6570026e6c0000010001 08ae800000010000000200020e736c6172746962617274666173740a62686d732d67726f6570026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc03a00010001000151800004d9726162c04c00010001000151800004d9726161 28300 37a400000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 37a480000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 28301 b62fc88150184470880000000097179d000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 28302 04c7000000010000000000000a73746172746b6162656c026e6c0000ff0001 04c7800000010000000300010a73746172746b6162656c026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 28303 db5c0000000100000000000003777777076d797765626964026e6c0000010001 db5c8000000100000003000203777777076d797765626964026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c018c01000020001000151800006036e7332c030c01000020001000151800012036e7333086c65617365776562036f726700c02c000100010001518000043ed44079c047000100010001518000043ed4407a 28304 b62fc88f501144627dd30000000000000000 28305 efea0000000100000000000004686f6d65066865746e6574026e6c0000010001 efea8000000100000003000304686f6d65066865746e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a65 28306 b62fc890501044627dd20000000000000000 28307 dc9600000001000000000000037777770770697070696a6e026e6c0000010001 dc9680000001000000020002037777770770697070696a6e026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 28308 710a00000001000000000000034e53350f444f4d41494e2d5245474953545259024e4c00001c0001 710a80000001000000030002034e53350f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28309 c62700000001000000000000024e530f444f4d41494e2d5245474953545259024e4c00001c0001 c62780000001000000030002024e530f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 28310 644f00000001000000000000034e53320f444f4d41494e2d5245474953545259024e4c00001c0001 644f80000001000000030002034e53320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28311 f1bf00000001000000000000037777770a696e7465727374617473026e6c0000010001 f1bf80000001000000020000037777770a696e7465727374617473026e6c0000010001c01000020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01000020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 28312 b7100000000100000000000008726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001 b7108000000100000002000208726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001c0150002000100015180000e036e7331076e657463617374c023c01500020001000151800006036e7332c03bc03700010001000151800004c2970101c05100010001000151800004c297012d 28313 0b3428000001000000010000024e4c0000060001055f6c646170045f746370026463065f6d736463730a454c5354414c4144414d024e4c00002100010000025800240000006401850e656c7374616c6164616d2d7372760a454c5354414c4144414d024e4c00 0b34a8040000000000000000 28314 57a000000001000000000000056f64736276026e6c0000ff0001 57a080000001000000020000056f64736276026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 28315 343300000001000000000000036e73320b7472616374696f6e2d6974026e6c0000010001 343380000001000000020000036e73320b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28316 28d800000001000000000000036e73310b7472616374696f6e2d6974026e6c0000010001 28d880000001000000020000036e73310b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28317 0000000070024000ace50000020405b401010402 000080010000000000000000 28318 770e00000001000000000000037777770a73757065726475646573026e6c0000010001 770e80000001000000020002037777770a73757065726475646573026e6c0000010001c0100002000100015180000c036e7331053266617374c01bc01000020001000151800006036e7332c033c02f0001000100015180000450f7c022c047000100010001518000043e858122 28319 201d0000000100000000000006636861726973026e6c0000010001 201d8000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 28320 1af400000001000000000000036e73330767617574656e67026e6c0000010001 1af480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28321 c8d800000001000000000000036e73320b7472616374696f6e2d6974026e6c0000010001 c8d880000001000000020000036e73320b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28322 8e2700000001000000000000036e73310b7472616374696f6e2d6974026e6c0000010001 8e2780000001000000020000036e73310b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 28323 44e900000001000000000000086762646976696e67026e6c00000f0001 44e980000001000000030003086762646976696e67026e6c00000f0001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec015c00c00020001000151800006036e7331c032c00c00020001000151800006036e7332c032c02900010001000151800004d42d2005c04700010001000151800004d42d2003c05900010001000151800004d42d2103 28324 b630894a5010447095ae0000000000000000 28325 c62c00000001000000000000076d656575776573026e6c0000010001 c62c80000001000000020002076d656575776573026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 28326 6895000000010000000000000c737276322d323030306164730a696e747261736f6c6966026e6c0000010001 6895840300010000000100000c737276322d323030306164730a696e747261736f6c6966026e6c0000010001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 28327 b630894a50184470b7ad00000097fe2f000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 28328 b63089585011446295140000000000000000 28329 350700000001000000000000036e7332076e656473746174026e6c0000010001 350780000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28330 0000000070024000dc510000020405b401010402 000080010000000000000000 28331 be0600000001000000000000036e7334076e656473746174026e6c0000010001 be0680000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28332 016928000001000200000000026e6c00000600010453444137036465700b65696c616e64686f6f6664026e6c00000500fe000000000000c01400010001000000000004c0a80c11 0169a8040000000000000000 28333 b63089595010446295130000000000000000 28334 050400100001000000000001026e73067a6f6e6e6574026e6c00000100010000290800000000000000 050480000001000000020003026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa02020000291000000000000000 28335 c10c00100001000000000001026e73067a6f6e6e6574026e6c00002600010000290800000000000000 c10c80000001000000020003026e73067a6f6e6e6574026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa02020000291000000000000000 28336 28b200000001000000000000037777770a746970746f706c696e65026e6c0000010001 28b280000001000000020002037777770a746970746f706c696e65026e6c0000010001c01000020001000151800014036e73310d706f7765727365727665723231c01bc01000020001000151800006036e7332c033c02f0001000100015180000451047122c04f0001000100015180000451047123 28337 b63142c6501044700b9e0000000000000000 b631c2c40000000000000000 28338 330000000001000000000000036e73330767617574656e67026e6c0000010001 330080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28339 0000000070024000e78400000204056401010402 000080010000000000000000 28340 b63142c650184470ef4d000000973d80000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 b631c2c40000000000000000 28341 698f000000010000000000000d64756b6572732d6465636f636b026e6c00000f0001 698f800000010000000200000d64756b6572732d6465636f636b026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c035 28342 b631e3bb501040b0794b0000000000000000 28343 b631e3bb501840b0823000000084dc00000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000004a03677373096d6963726f736f667403636f6d00403afd0c403c4e8c0003000000274e544c4d535350000100000097b200c003000300240000000400040020000000534441374445500000 28344 b631e3c9501140a278c40000000000000000 28345 0000000070024000012100000204056401010402 000080010000000000000000 28346 b63142d4501144620b040000000000000000 b631c2d40000000000000000 28347 0000000070024000cfba0000020405b401010402 000080010000000000000000 28348 0b0900000001000000000000036e73330767617574656e67026e6c0000010001 0b0980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28349 79aa0000000100000000000009696e686f6c6c616e64026e6c00000f0001 79aa8000000100000002000209696e686f6c6c616e64026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c2ab230bc03c00010001000151800004c0576a65 28350 b631e3ca501040a278c30000000000000000 28351 b632940b501040b0e2960000000000000000 28352 b632940b501840b0167c00000084b300000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403afd0c403c4e8c0003000000274e544c4d535350000100000097b200c003000300240000000400040020000000534441374445500000 28353 b6329419501140a2e20f0000000000000000 28354 8bc0000000010000000000000377777706676f74696b61026e6c0000010001 8bc0800000010000000300020377777706676f74696b61026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 28355 b63142d5501044620b030000000000000000 b631c2d40000000000000000 28356 b632941a501040a2e20e0000000000000000 28357 00000000700240004da000000204056401010402 000080010000000000000000 28358 b63367f650104470d9d40000000000000000 b633e7f40000000000000000 28359 b6345892501040b06a8d0000000000000000 b634d8940000000000000000 28360 b6345892501840b0dbf2000000847580000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403afd0c403c4e8c0003000000274e544c4d535350000100000097b200c003000300240000000400040020000000534441374445500000 b634d8940000000000000000 28361 6aa0000000010000000000000377777705766c69656b026e6c0000010001 6aa0800000010000000200020377777705766c69656b026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec016c01000020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 28362 b63367f650184470f6430000009704c1000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe2403c4d620003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 b633e7f40000000000000000 28363 b63458a0501140a26a060000000000000000 b634d8a40000000000000000 28364 6af3000000010000000000000b676966706c6161746a6573026e6c0000010001 6af3800000010000000200000b676966706c6161746a6573026e6c0000010001c00c00020001000151800013036e73310c616374697665646f6d61696ec018c00c00020001000151800006036e7332c030 28365 b63458a1501040a26a050000000000000000 b634d8a40000000000000000 28366 ddae000000010000000000000f6f65726c656d616e73626f736c6579026e6c0000ff0001 ddae800000010000000200000f6f65726c656d616e73626f736c6579026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c036 28367 916200000001000000000000036e733103617474026e6c0000010001 916280000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 28368 48b100000001000000000000036e733103617474026e6c0000260001 48b180000001000000020002036e733103617474026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 28369 bf4800000001000000000000036e733203617474026e6c0000010001 bf4880000001000000020002036e733203617474026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 28370 2f9f00000001000000000000036e733203617474026e6c0000260001 2f9f80000001000000020002036e733203617474026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 28371 d5d4000000010000000000000f6138302d3132372d3138352d313935046164736c06787334616c6c026e6c0000010001 d5d4800000010000000300020f6138302d3132372d3138352d313935046164736c06787334616c6c026e6c0000010001c02100020001000151800005026e73c021c02100020001000151800006036e7332c021c0210002000100015180000d026e730472697065036e657400c03c00010001000151800004c26d0642c04d00010001000151800004c26d0963 28372 b633680450114462d93a0000000000000000 b633e8040000000000000000 28373 de3a0000000100000000000004656e6369026e6c00000f0001 de3a8000000100000002000004656e6369026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c030 28374 bdcf000000010000000000000a656d6561736d7470303203616f6e026e6c0000010001 bdcf800000010000000200010a656d6561736d7470303203616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28375 fbcb000000010000000000000a656d6561736d7470303203616f6e026e6c00001c0001 fbcb800000010000000200010a656d6561736d7470303203616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28376 c20a000000010000000000000a656d6561736d7470303203616f6e026e6c0000260001 c20a800000010000000200010a656d6561736d7470303203616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28377 95d9000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 95d9800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28378 d6f9000000010000000000000a656d6561736d7470303103616f6e026e6c0000260001 d6f9800000010000000200010a656d6561736d7470303103616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28379 5fce00000001000000000000046d6f6a6f026e6c00001c0001 5fce80000001000000020002046d6f6a6f026e6c00001c0001c00c0002000100015180000b026e7305706c616e74c011c00c00020001000151800006036e7332c028c02500010001000151800004d59f0037c03c00010001000151800004d59f0046 28380 b633680550104462d9390000000000000000 b633e8040000000000000000 28381 9eb600000001000000000000037777771273706f72747665727a656b6572696e67656e026e6c0000010001 9eb680000001000000030002037777771273706f72747665727a656b6572696e67656e026e6c0000010001c0100002000100015180000d036e733106776964657873c023c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c03bc03700010001000151800004d4ccc0fcc06c000100010001518000043efa0703 28382 dacb000000010000000000000377777707676f6d756e646f026e6c0000010001 dacb800000010000000200000377777707676f6d756e646f026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 28383 c2d9000000010000000000000773702d706c7573026e6c00000f0001 c2d9800000010000000200000773702d706c7573026e6c00000f0001c00c000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c00c0002000100015180000e0b65766973702d6e732d3032c034 28384 81970000000100000000000003766576026e6c00000f0001 81978000000100000002000203766576026e6c00000f0001c00c0002000100015180000d026e73076e65746c616e64c010c00c00020001000151800006036e7332c027c02400010001000151800004d9aa2042c03d00010001000151800004d9aa2c06 28385 f1140000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 f1148000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 28386 f88a0000000100000000000004726f6f7307656e64656d6f6c026e6c0000260001 f88a8000000100000002000004726f6f7307656e64656d6f6c026e6c0000260001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 28387 e04500000001000000000000046b726173026e6c0000ff0001 e04580000001000000020000046b726173026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 28388 ae8d00000001000000000000036e733203747565026e6c0000010001 ae8d80000001000000030003036e733203747565026e6c0000010001c0100002000100015180000a0774756567617465c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004839b0203c00c00010001000151800004839b0303c04c00010001000151800004c0576a65 28389 f10900000001000000000000077475656761746503747565026e6c0000010001 f10980000001000000030003077475656761746503747565026e6c0000010001c01400020001000151800002c00cc01400020001000151800006036e7332c014c0140002000100015180000e036e733107737572666e6574c018c00c00010001000151800004839b0203c03a00010001000151800004839b0303c04c00010001000151800004c0576a65 28390 579b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 579b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28391 2e000000000100000000000003777777156e6f6f72642d686f6c6c616e642d746f7572697374026e6c0000010001 2e008000000100000002000203777777156e6f6f72642d686f6c6c616e642d746f7572697374026e6c0000010001c0100002000100015180000c026e7306787334616c6cc026c01000020001000151800006036e7332c03dc03a00010001000151800004c26d0642c05200010001000151800004c26d0963 28392 02240000000100000000000003626c3102626c06787334616c6c026e6c0000260001 02248000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28393 b0d1000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 b0d1800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 28394 53d5000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 53d5800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 28395 eb590000000100000000000005646e732d32056c61646f74026e6c0000010001 eb598000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28396 eb5a00000001000000000000076172747068696c026e6c00000f0001 eb5a80000001000000020000076172747068696c026e6c00000f0001c00c0002000100015180000e05646e732d31056c61646f74c014c00c0002000100015180000805646e732d32c02e 28397 eb5c0000000100000000000005646e732d32056c61646f74026e6c0000010001 eb5c8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28398 c7420000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c7428000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28399 bfb900000001000000000000036e733203747565026e6c0000010001 bfb980000001000000030003036e733203747565026e6c0000010001c0100002000100015180000a0774756567617465c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004839b0203c00c00010001000151800004839b0303c04c00010001000151800004c0576a65 28400 c36000000001000000000000036e733208767575727765726b026e6c0000010001 c36080000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 28401 88bf00000001000000000000077475656761746503747565026e6c0000010001 88bf80000001000000030003077475656761746503747565026e6c0000010001c01400020001000151800002c00cc01400020001000151800006036e7332c014c0140002000100015180000e036e733107737572666e6574c018c00c00010001000151800004839b0203c03a00010001000151800004839b0303c04c00010001000151800004c0576a65 28402 ade50000000100000000000006776468303131066e7434616c6c026e6c0000010001 ade58000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 28403 3ac00000000100000000000003777777076c756e61746963026e6c0000010001 3ac08000000100000003000103777777076c756e61746963026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 28404 15f20000000100000000000003777777056b6c696b73026e6c0000010001 15f28000000100000002000003777777056b6c696b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02d 28405 2a94000000010000000000000377777706637662616e6b026e6c0000010001 2a94800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28406 274e000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 274e800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28407 0a9a000000010000000000000377777706637662616e6b026e6c0000010001 0a9a800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28408 0247000000010000000000000377777707746f7067616d65026e6c0000010001 0247800000010000000200000377777707746f7067616d65026e6c0000010001c0100002000100015180000f02763109706365787472656d65c018c01000020001000151800005027632c02f 28409 20c2000000010000000000000469632d73026e6c0000010001 20c2800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 28410 3aa0000000010000000000000377777706637662616e6b026e6c0000010001 3aa0800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28411 9ae80000000100000000000003464748024e4c0000010001 9ae88000000100000002000103464748024e4c0000010001c00c0002000100015180000d026e7307616d6572636f6dc010c00c00020001000151800006036e7331c027c02400010001000151800004c2b2b20a 28412 f34a00000001000000000000036e73310a62726f61646669656c64026e6c0000010001 f34a80000001000000020002036e73310a62726f61646669656c64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cb1732c03d00010001000151800004d55486da 28413 d89b00000001000000000000036e73320a62726f61646669656c64026e6c0000010001 d89b80000001000000020002036e73320a62726f61646669656c64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d4cb1732c00c00010001000151800004d55486da 28414 1ab20000000100000000000004777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001 1ab28000000100000002000204777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001c01f00020001000151800009036e7331026973c02ac01f00020001000151800006036e7332c042c03e00010001000151800004d5852102c05300010001000151800004d5c41503 28415 1aaf000000010000000000000377777706637662616e6b026e6c0000010001 1aaf800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28416 f96800000001000000000000037777770e6a616e6d6172696a6e697373656e026e6c0000010001 f96880000001000000020002037777770e6a616e6d6172696a6e697373656e026e6c0000010001c01000020001000151800008026e73027370c01fc01000020001000151800006036e7332c036c03300010001000151800004c356785dc04700010001000151800004d468d113 28417 ca4b0000000100000000000003777777056465726174026e6c0000010001 ca4b8000000100000002000203777777056465726174026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c016c0100002000100015180001004646e733208636f6e6365707473c016c02a00010001000151800004d5c51c03c04700010001000151800004d5c51e1c 28418 12bb0000000100000000000004777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001 12bb8000000100000002000204777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001c01f00020001000151800009036e7331026973c02ac01f00020001000151800006036e7332c042c03e00010001000151800004d5852102c05300010001000151800004d5c41503 28419 636f00000001000000000000036e733103666a66026e6c0000010001 636f80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 28420 3c9e00000001000000000000037777770b706f73747374656d70656c026e6c0000010001 3c9e80000001000000030000037777770b706f73747374656d70656c026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c035c01000020001000151800007046e733033c035 28421 9b8f00100001000000000001026e7303786f73026e6c00000100010000290800000080000000 9b8f80000001000000020002026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe20000291000000000000000 28422 2a94000000010000000000000377777706637662616e6b026e6c0000010001 2a94800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28423 2a94000000010000000000000377777706637662616e6b026e6c0000010001 2a94800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28424 f02400000001000000000000046d61696c0670726f6f7374026e6c00001c0001 f02480000001000000020002046d61696c0670726f6f7374026e6c00001c0001c0110002000100015180000d04646e733105692d702d64c018c0110002000100015180000704646e7332c031c02c00010001000151800004d9124003c04500010001000151800004d9124104 28425 a7fd00000001000000000000046d61696c0670726f6f7374026e6c0000260001 a7fd80000001000000020002046d61696c0670726f6f7374026e6c0000260001c0110002000100015180000d04646e733105692d702d64c018c0110002000100015180000704646e7332c031c02c00010001000151800004d9124003c04500010001000151800004d9124104 28426 547200000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 547280000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28427 614f00000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c0000260001 614f80000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28428 0a9a000000010000000000000377777706637662616e6b026e6c0000010001 0a9a800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28429 0a9a000000010000000000000377777706637662616e6b026e6c0000010001 0a9a800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28430 15d0000000010000000000000377777707766f6c64657273026e6c0000010001 15d0800000010000000300030377777707766f6c64657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 28431 cb3e000000010000000000000377777703616c68026e6c0000010001 cb3e800000010000000200010377777703616c68026e6c0000010001c01000020001000151800010036e7331096c65617365706c616ec014c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004c286e702 28432 3aa0000000010000000000000377777706637662616e6b026e6c0000010001 3aa0800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28433 3aa0000000010000000000000377777706637662616e6b026e6c0000010001 3aa0800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28434 60020000000100000000000003746d66026e6c00001c0001 60028000000100000002000003746d66026e6c00001c0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c028 28435 1aaf000000010000000000000377777706637662616e6b026e6c0000010001 1aaf800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28436 bd9a0000000100000000000009636865636b6d61726b026e6c0000010001 bd9a8000000100000002000109636865636b6d61726b026e6c0000010001c00c00020001000151800011036e696b0a7075626c6973686e6574c016c00c0002000100015180000b026e73026e6c036e657400c02a00010001000151800004c1433c0a 28437 1aaf000000010000000000000377777706637662616e6b026e6c0000010001 1aaf800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 28438 051300000001000000000000036e73310974656c656b6162656c026e6c0000010001 051380000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 28439 6967000000010000000000000377777708706f7461746f6573026e6c0000010001 6967800000010000000200000377777708706f7461746f6573026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c030 28440 10bb00000001000000000000036e733208636f6d707574656c026e6c0000010001 10bb80000001000000020002036e733208636f6d707574656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004c3568680c00c00010001000151800004c3568681 28441 546800000001000000000000036e733108636f6d707574656c026e6c0000010001 546880000001000000020002036e733108636f6d707574656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3568680c03b00010001000151800004c3568681 28442 a0950000000100000000000003777777076275726f686261026e6c0000010001 a0958000000100000003000103777777076275726f686261026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 28443 6dea00000001000000000000037777770c77696c746575726c696e6773026e6c0000010001 6dea80000001000000020002037777770c77696c746575726c696e6773026e6c0000010001c01000020001000151800011036e73310a74657272612d62797465c01dc01000020001000151800007046e733132c035c031000100010001518000044500d3a0c04e000100010001518000044500d44a 28444 e1d000000001000000000000036e7331046c69636f026e6c0000010001 e1d080000001000000020002036e7331046c69636f026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e036e7331076f6d732d6e6574c015c00c00010001000151800004d5ef9d33c03700010001000151800004d5efb22f 28445 b76200000001000000000000036e7331076f6d732d6e6574026e6c0000010001 b76280000001000000020002036e7331076f6d732d6e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efb22fc03a00010001000151800004d5ef9d07 28446 d15300000001000000000000087061636b666f7273026e6c0000ff0001 d15380000001000000020002087061636b666f7273026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 28447 9a6400000001000000000000033139360331333303313034033230300a626c61636b686f6c657307656173796e6574026e6c0000010001 9a6480000001000000020002033139360331333303313034033230300a626c61636b686f6c657307656173796e6574026e6c0000010001c02700020001000151800006036e7330c027c02700020001000151800006036e7331c027c04300010001000151800004c2a55e01c05500010001000151800004c2a55e05 28448 65f400000001000000000000037777770d7469656e6572706f65736a6573026e6c0000010001 65f480000001000000020000037777770d7469656e6572706f65736a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c035 28449 ed7d00000001000000000000037777770861617665657a6574026e6c0000010001 ed7d80000001000000030002037777770861617665657a6574026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 28450 c4b0001000010000000000010469632d73026e6c00000f00010000290800000000000000 c4b0800000010000000200010469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 28451 a88100000001000000000000036e733109666972737466696e64026e6c0000010001 a88180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 28452 a88200000001000000000000036e733209666972737466696e64026e6c0000010001 a88280000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 28453 daf400000001000000000000066265736f7577026e6c0000010001 daf480000001000000020002066265736f7577026e6c0000010001c00c0002000100015180000f036e733108696e74726f776562c013c00c00020001000151800006036e7332c02bc0270001000100015180000450416028c04200010001000151800004c356780c 28454 1b2000000001000000000000036e73330767617574656e67026e6c0000010001 1b2080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28455 1b2e00000001000000000000036e73330767617574656e67026e6c0000010001 1b2e80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28456 a88400000001000000000000036e733109666972737466696e64026e6c0000010001 a88480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 28457 a88500000001000000000000036e733209666972737466696e64026e6c0000010001 a88580000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 28458 89f3000000010000000000000469632d73026e6c00000f0001 89f3800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 28459 e53c00000001000000000000036e733205616e6f6e79026e6c0000010001 e53c80000001000000020002036e733205616e6f6e79026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004cf2cd7adc00c000100010001518000043ed4539e 28460 56cf00000001000000000000036e73310a636c75737465726e6574026e6c0000010001 56cf80000001000000020002036e73310a636c75737465726e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054edf5c03d00010001000151800004d5f72f3c 28461 a09200000001000000000000036e73320a636c75737465726e6574026e6c0000010001 a09280000001000000020002036e73320a636c75737465726e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f000100010001518000045054edf5c00c00010001000151800004d5f72f3c 28462 b310000000010000000000000867656e6572616c69026e6c0000ff0001 b310800000010000000200000867656e6572616c69026e6c0000ff0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02d 28463 3ae700000001000000000000046d61696c076575726f6e6574026e6c0000010001 3ae780000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 28464 515c00000001000000000000026e73067a6f6e6e6574026e6c0000010001 515c80000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 28465 28ae00000001000000000000026e73067a6f6e6e6574026e6c0000260001 28ae80000001000000020002026e73067a6f6e6e6574026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 28466 666e00000001000000000000077265766572736511776972656c6573732d7365727669636573026e6c0000010001 666e80000001000000030002077265766572736511776972656c6573732d7365727669636573026e6c0000010001c0140002000100015180000d036e733106776964657873c026c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c03ec03a00010001000151800004d4ccc0fcc06f000100010001518000043efa0703 28467 c26500000001000000000000026e73076e657467617465026e6c00001c0001 c26580000001000000020002026e73076e657467617465026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000704646e7331c00fc00c000100010001518000043e0456aac03900010001000151800004d47b8edb 28468 74db00000001000000000000026e73076e657467617465026e6c0000260001 74db80000001000000020002026e73076e657467617465026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000704646e7331c00fc00c000100010001518000043e0456aac03900010001000151800004d47b8edb 28469 2fc20000000100000000000004646e7331076e657467617465026e6c0000260001 2fc28000000100000002000204646e7331076e657467617465026e6c0000260001c01100020001000151800005026e73c011c01100020001000151800002c00cc02d000100010001518000043e0456aac00c00010001000151800004d47b8edb 28470 153200000001000000000000036e7333107365637572656e616d65736572766572026e6c0000010001 153280000001000000020002036e7333107365637572656e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0350001000100015180000442a4f102c0470001000100015180000442a4f105 28471 0a9900000001000000000000036e7334107365637572656e616d65736572766572026e6c0000010001 0a9980000001000000020002036e7334107365637572656e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0350001000100015180000442a4f102c0470001000100015180000442a4f105 28472 34f70000000100000000000005646f726d61026e6c0000010001 34f78000000100000002000205646f726d61026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 28473 a6020000000100000000000003777777036b6f73026e6c0000010001 a6028000000100000002000203777777036b6f73026e6c0000010001c0100002000100015180000e04646e733106666f7263657ac014c0100002000100015180000704646e7332c02dc02800010001000151800004d994af13c04200010001000151800004d994af1a 28474 82e1000000010000000000000377777707746f72696d6578026e6c0000010001 82e1800000010000000200000377777707746f72696d6578026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c032 28475 2165000000010000000000000377777707746f72696d6578026e6c0000010001 2165800000010000000200000377777707746f72696d6578026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c032 28476 2321000000010000000000000377777706652d6c696a6e026e6c0000010001 2321800000010000000200020377777706652d6c696a6e026e6c0000010001c01000020001000151800014036e73310d32302d616c6c686f7374696e67c017c01000020001000151800006036e7332c02fc02b000100010001518000044262d66ec04b000100010001518000044262d66f 28477 5b0b00000001000000000000024e530348414e026e6c0000010001 5b0b80000001000000020002024e530348414e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00c00010001000151800004914a670ac03500010001000151800004c0576a65 28478 b9b600000001000000000000037777770d736f7068696173776572656c64026e6c0000010001 b9b680000001000000020000037777770d736f7068696173776572656c64026e6c0000010001c01000020001000151800017036e73320d666c65746873686f7374696e6703636f6d00c01000020001000151800006036e7331c036 28479 ed3700000001000000000000037777770d736f7068696173776572656c64026e6c0000010001 ed3780000001000000020000037777770d736f7068696173776572656c64026e6c0000010001c01000020001000151800017036e73320d666c65746873686f7374696e6703636f6d00c01000020001000151800006036e7331c036 28480 37f200000001000000000000037777770d7365782d696e74686563697479026e6c0000010001 37f280000001000000020000037777770d7365782d696e74686563697479026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c035 28481 2c020000000100000000000009686f6e657977656c6c026e6c00000f0001 2c028000000100000002000009686f6e657977656c6c026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c031 28482 ea4000000001000000000000036e733103757063026e6c0000010001 ea4080000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 28483 670400000001000000000000046e733032066368656c6c6f026e6c0000010001 670480000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 28484 93ab0000000100000000000003777777056e76736861026e6c0000010001 93ab8000000100000002000003777777056e76736861026e6c0000010001c0100002000100015180000c026e7306766576696461c016c01000020001000151800006036e7332c02d 28485 652e00000001000000000000036e733209666972737466696e64026e6c0000010001 652e80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 28486 765f00000001000000000000037777770774697070656c78026e6c0000010001 765f80000001000000030000037777770774697070656c78026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c02fc01000020001000151800006036e7332c02f 28487 00d000000001000000000000037777770774697070656c78026e6c0000010001 00d080000001000000030000037777770774697070656c78026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c02fc01000020001000151800006036e7332c02f 28488 361100000001000000000000026e7303786f73026e6c0000010001 361180000001000000020001026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe2 28489 401000000001000000000000036e733111686f6c6c616e646d6564696167726f6570026e6c0000010001 401080000001000000020001036e733111686f6c6c616e646d6564696167726f6570026e6c0000010001c01000020001000151800002c00cc01000020001000151800011036e733207636c742d756661036e657400c00c00010001000151800004c3c1ca77 28490 e5df00000001000000000000056a62656e61026e6c00000f0001 e5df80000001000000020002056a62656e61026e6c00000f0001c00c000200010001518000110a6c65757665686176656e03696772c012c00c0002000100015180000d0a64656c6673686176656ec031c026000100010001518000043e2d5e0dc043000100010001518000043e2d5e82 28491 5d4f00000001000000000000046c65646109524f5454455244414d024e4c0000010001 5d4f80000001000000030003046c65646109524f5454455244414d024e4c0000010001c0110002000100015180000c0967616e796d65646573c011c01100020001000151800002c00cc01100020001000151800014036e733203676e7309676574726f6e696373c01bc02f00010001000151800004d5c9cf50c00c00010001000151800004d5c9cf19c05500010001000151800004910d2a05 28492 e5c000000001000000000000036e733203676e7309676574726f6e696373024e4c0000010001 e5c080000001000000030003036e733203676e7309676574726f6e696373024e4c0000010001c01400020001000151800006036e7332c014c01400020001000151800005026e73c014c01400020001000151800002c00cc03200010001000151800004902c0a01c04400010001000151800004902c1319c00c00010001000151800004910d2a05 28493 7270000000010000000000000967616e796d6564657309524f5454455244414d024e4c0000010001 7270800000010000000300030967616e796d6564657309524f5454455244414d024e4c0000010001c01600020001000151800002c00cc01600020001000151800007046c656461c016c01600020001000151800014036e733203676e7309676574726f6e696373c020c00c00010001000151800004d5c9cf50c04200010001000151800004d5c9cf19c05500010001000151800004910d2a05 28494 f0cc00000001000000000000033139360331333303313034033230300a626c61636b686f6c657307656173796e6574026e6c0000050001 f0cc80000001000000020002033139360331333303313034033230300a626c61636b686f6c657307656173796e6574026e6c0000050001c02700020001000151800006036e7330c027c02700020001000151800006036e7331c027c04300010001000151800004c2a55e01c05500010001000151800004c2a55e05 28495 eb5600000001000000000000037777770766696c6d66616e026e6c0000010001 eb5680000001000000020002037777770766696c6d66616e026e6c0000010001c0100002000100015180000b036e73310470696e65c018c01000020001000151800006036e7332c030c02c00010001000151800004d59c0201c04300010001000151800004c3c1a303 28496 cd9d0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 cd9d8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 28497 d10700000001000000000000037777770477736164026e6c0000010001 d10780000001000000020001037777770477736164026e6c0000010001c01000020001000151800009026e73036e636ec015c01000020001000151800006036e7332c02cc02900010001000151800004c2e51401 28498 2f4000000001000000000000076d656d62657273056c79636f73026e6c0000010001 2f4080000001000000020000076d656d62657273056c79636f73026e6c0000010001c0140002000100015180001106646e73312d31056c79636f7302646500c0140002000100015180000906646e73322d31c035 28499 35030000000100000000000003777777096e6574646972656374026e6c0000010001 35038000000100000003000003777777096e6574646972656374026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 28500 7044000000010000000000000377777706666f6b73756b026e6c0000010001 7044800000010000000200020377777706666f6b73756b026e6c0000010001c0100002000100015180000a036e733103677673c017c01000020001000151800006036e7332c02fc02b000100010001518000045054e1aac04100010001000151800004d4ccc646 28501 5c2400000001000000000000037777770962656e736d75736963026e6c0000010001 5c2480000001000000020000037777770962656e736d75736963026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 28502 d14b00000001000000000000037777770d7365782d696e74686563697479026e6c0000010001 d14b80000001000000020000037777770d7365782d696e74686563697479026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c035 28503 3ca800000001000000000000036e733109756e69736f75726365026e6c0000010001 3ca880000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 28504 067f00000001000000000000067068706164730d626f7577766163617475726573026e6c0000010001 067f80000001000000020001067068706164730d626f7577766163617475726573026e6c0000010001c0130002000100015180000d036e733106776964657873c021c01300020001000151800010036e733206776964657873036e657400c03500010001000151800004d4ccc0fc 28505 d07400000001000000000000037777770572616c7068026e6c0000010001 d07480000001000000020002037777770572616c7068026e6c0000010001c0100002000100015180000c026e73067574722d6978c016c01000020001000151800006036e7332c02dc02a0001000100015180000451113206c04200010001000151800004d5c42806 28506 e4990000000100000000000008686f73746e616d650462696e640000100003 e4998000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 28507 195800000001000000000000037777770a6d6f6c6c696765736578026e6c0000010001 195880000001000000020000037777770a6d6f6c6c696765736578026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 28508 d09d00000001000000000000056b616e6f6e026e6c00000f0001 d09d80000001000000030003056b616e6f6e026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c012c00c0002000100015180000a076e736175746832c02ec00c0002000100015180000a076e736175746833c02ec02600010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 28509 0ef10000000100000000000008686f73746e616d650462696e640000100003 0ef18000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 28510 ea7100000001000000000000146f6e6465726e656d656e646e656465726c616e64026e6c0000ff0001 ea7180000001000000020002146f6e6465726e656d656e646e656465726c616e64026e6c0000ff0001c00c00020001000151800010036e7331096d6173746572646e73c021c00c00020001000151800006036e7332c039c035000100010001518000045054f347c051000100010001518000043e94a047 28511 eb270000000100000000000003777777086661697274616c65026e6c0000010001 eb278000000100000002000203777777086661697274616c65026e6c0000010001c01000020001000151800010036e733109756e69736572766572c019c01000020001000151800006036e7332c031c02d00010001000151800004c3454b03c04900010001000151800004d119a2fa 28512 d1cd0000000100000000000005656c696f72026e6c00000f0001 d1cd8000000100000003000105656c696f72026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 28513 0ffc0000000100000000000003777777086469676966697368026e6c0000010001 0ffc8000000100000002000103777777086469676966697368026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c019c01000020001000151800006036e7334c031c02d00010001000151800004d5c401c0 28514 f92900000001000000000000037777770d6b696a6b6f6e6465727a6f656b026e6c0000010001 f92980000001000000020002037777770d6b696a6b6f6e6465727a6f656b026e6c0000010001c0100002000100015180000b036e733104736f6b6fc01ec01000020001000151800006036e7332c036c0320001000100015180000450f2ee91c0490001000100015180000450f2ee9e 28515 750800000001000000000000036e7331056163646973026e6c0000010001 750880000001000000020002036e7331056163646973026e6c0000010001c01000020001000151800002c00cc0100002000100015180000a026e7304616e7762c016c00c00010001000151800004c29779fac03800010001000151800004c1ac840a 28516 143c00000001000000000000046d61696c066368656c6c6f026e6c0000010001 143c80000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 28517 503a000000010000000000000672656c6179330b7669616e6574776f726b73026e6c0000010001 503a800000010000000200020672656c6179330b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 28518 d5ef000000010000000000000672656c6179330b7669616e6574776f726b73026e6c00001c0001 d5ef800000010000000200020672656c6179330b7669616e6574776f726b73026e6c00001c0001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 28519 354500000001000000000000076d61696c6875620b7669616e6574776f726b73026e6c00001c0001 354580000001000000020002076d61696c6875620b7669616e6574776f726b73026e6c00001c0001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03400010001000151800004d43d0f08c04600010001000151800004d43d19e2 28520 e9c800000001000000000000076d61696c6875620b7669616e6574776f726b73026e6c0000010001 e9c880000001000000020002076d61696c6875620b7669616e6574776f726b73026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03400010001000151800004d43d0f08c04600010001000151800004d43d19e2 28521 5d98000000010000000000000672656c6179310b7669616e6574776f726b73026e6c0000010001 5d98800000010000000200020672656c6179310b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 28522 8db5000000010000000000000672656c6179320b7669616e6574776f726b73026e6c0000010001 8db5800000010000000200020672656c6179320b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 28523 3dd80000000100000000000006776468303131066e7434616c6c026e6c0000010001 3dd88000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 28524 0e4600100001000000000001037777770a73746164736b6e6f616c026e6c00000100010000290800000000000000 0e4680000001000000020001037777770a73746164736b6e6f616c026e6c0000010001c0100002000100015180001d036e733213656666696369656e74776562686f7374696e6703636f6d00c01000020001000151800006036e7333c0330000291000000000000000 28525 072300000001000000000000037777770a73746164736b6e6f616c026e6c0000010001 072380000001000000020000037777770a73746164736b6e6f616c026e6c0000010001c0100002000100015180001d036e733213656666696369656e74776562686f7374696e6703636f6d00c01000020001000151800006036e7333c033 28526 f74e000000010000000000000872616b65746e6574026e6c00001c0001 f74e800000010000000200020872616b65746e6574026e6c00001c0001c00c0002000100015180001103646e730a636f6e63657074736661c015c00c0002000100015180001004646e733208636f6e6365707473c015c02900010001000151800004d5c51c03c04600010001000151800004d5c51e1c 28527 4dec000000010000000000000a627a6762616e6b696e67026e6c00000f0001 4dec800000010000000200020a627a6762616e6b696e67026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 28528 4f400000000100000000000005646e732d31056c61646f74026e6c0000010001 4f408000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28529 811b0000000100000000000009656475636174696f6e046564746507757477656e7465026e6c0000010001 811b8000000100000003000309656475636174696f6e046564746507757477656e7465026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc01b00020001000151800006036e7333c01bc0370001000100015180000482590102c0490001000100015180000482590103c05b00010001000151800004c0571113 28530 6646000000010000000000000377777706766e756e6574026e6c0000010001 6646800000010000000200000377777706766e756e6574026e6c0000010001c0100002000100015180000b036e73340473617261c017c01000020001000151800006036e7333c02f 28531 2d200000000100000000000003777777137061726b6574626f6572646572696a2d76626e026e6c0000010001 2d208000000100000002000203777777137061726b6574626f6572646572696a2d76626e026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c024c01000020001000151800006036e7332c03bc03800010001000151800004d5e38d0ac05500010001000151800004d5e38205 28532 87dd00000001000000000000037777771072616e6477656765696e64686f76656e026e6c0000010001 87dd80000001000000020001037777771072616e6477656765696e64686f76656e026e6c0000010001c0100002000100015180000a026e730469776179c021c0100002000100015180000c026e730364796e036f726700c03500010001000151800004c14e1e04 28533 fa7100000001000000000000037777770b647664746a656b6f70656e026e6c0000010001 fa7180000001000000020002037777770b647664746a656b6f70656e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c03000010001000151800004c1ad97b2c04200010001000151800004c1ad97b4 28534 d78a0000000100000000000003777777107363686970706572736f667477617265026e6c0000010001 d78a8000000100000003000203777777107363686970706572736f667477617265026e6c0000010001c0100002000100015180000d036e733106776964657873c021c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c039c03500010001000151800004d4ccc0fcc06a000100010001518000043efa0703 28535 66f70000000100000000000003687a69026e6c00001c0001 66f78000000100000002000203687a69026e6c00001c0001c00c00020001000151800011036e73350a6e657461666661697273c010c00c00020001000151800006036e7336c028c02400010001000151800004c1ac2d05c04100010001000151800004c1ac2d06 28536 f37e00000001000000000000036164730777656263617368026e6c0000010001 f37e80000001000000020002036164730777656263617368026e6c0000010001c0100002000100015180000c04646e73310470696e73c018c0100002000100015180000704646e7332c031c02c00010001000151800004d9c26101c04400010001000151800004d9c26002 28537 48d1000000010000000000000d737465656e63656e7472616c65026e6c0000010001 48d1800000010000000200020d737465656e63656e7472616c65026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 28538 7f970000000100000000000003777777096e6574646972656374026e6c0000010001 7f978000000100000003000003777777096e6574646972656374026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 28539 751a000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 751a800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 28540 325c00000001000000000000037777770776656e64726967026e6c0000010001 325c80000001000000020000037777770776656e64726967026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c032 28541 c5df000000010000000000000377777703646674026e6c0000010001 c5df800000010000000200000377777703646674026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c02c 28542 bc0800000001000000000000036e73310c636f6e63657074732d696374026e6c0000010001 bc0880000001000000020002036e73310c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800006036e7332c010c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e4b 28543 d67100000001000000000000036e73320c636f6e63657074732d696374026e6c0000010001 d67180000001000000020002036e73320c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800002c00cc03100010001000151800004d5c51c03c00c00010001000151800004d5c51e4b 28544 2e8500000001000000000000086d61696c696e67730578696e676f026e6c0000010001 2e8580000001000000020001086d61696c696e67730578696e676f026e6c0000010001c01500020001000151800013036e73310c636f6e63657074732d696374c01bc01500020001000151800006036e7332c033c04e00010001000151800004d5c51e4b 28545 2a3700000001000000000000036e733503777873026e6c0000010001 2a3780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28546 772f00100001000000000001037777770c77656263726561746f727334026e6c00000100010000290800000080000000 772f80000001000000020002037777770c77656263726561746f727334026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c03100010001000151800004d4ccc0fc0000291000000000000000 28547 08a8000000010000000000000377777708786c6d61696c6572026e6c0000010001 08a8800000010000000200020377777708786c6d61696c6572026e6c0000010001c0100002000100015180000a04646e7330026975c019c0100002000100015180000704646e7331c032c02d00010001000151800004d91a7002c04300010001000151800004d91a7103 28548 c7f300000001000000000000037777770c74656c65646973636f756e74026e6c0000010001 c7f380000001000000020002037777770c74656c65646973636f756e74026e6c0000010001c0100002000100015180000c026e7306636f6d6e6574c01dc01000020001000151800006036e7332c034c03100010001000151800004d46c106ec04900010001000151800004d46c1078 28549 fb84000000010000000000000876697375616c7064026e6c0000ff0001 fb84800000010000000200020876697375616c7064026e6c0000ff0001c00c0002000100015180000c026e73067874646e6574c015c00c00020001000151800006036e7331c02cc02900010001000151800004c16e9d02c04100010001000151800004d9cc165f 28550 8a3f0010000100000000000106636f6f6b696504696c7365026e6c00000100010000290800000000000000 8a3f8000000100000003000406636f6f6b696504696c7365026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a2840000291000000000000000 28551 09220010000100000000000102616404696c7365026e6c00000100010000290800000000000000 09228000000100000003000402616404696c7365026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a2840000291000000000000000 28552 549c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 549c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28553 85ca000000010000000000000377777706627269646765026e6c0000010001 85ca800000010000000200020377777706627269646765026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c017c01000020001000151800006036e7332c02ec02b00010001000151800004c3402003c04400010001000151800004c340202b 28554 b5c200000001000000000000096f6e2d776865656c73026e6c0000010001 b5c280000001000000020002096f6e2d776865656c73026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 28555 849100100001000000000001037777771062616e6e65726d616e6167656d656e74026e6c00000100010000290800000000000000 849180000001000000030004037777771062616e6e65726d616e6167656d656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a2840000291000000000000000 28556 089c00100001000000000001037777770b7374617274706167696e61026e6c00000100010000290800000000000000 089c80000001000000030004037777770b7374617274706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c030000100010001518000043e45a282c042000100010001518000043e45a283c054000100010001518000043e45a2840000291000000000000000 28557 cb6f0000000100000000000003777777066c6179636f73026e6c0000010001 cb6f8403000100000001000003777777066c6179636f73026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 28558 9ba000000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c0000010001 9ba080000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28559 035d00000001000000000000036e73330767617574656e67026e6c0000010001 035d80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28560 20db00000001000000000000037777770861666c696b6b656e026e6c0000010001 20db80000001000000020000037777770861666c696b6b656e026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 28561 c25f0000000100000000000006636f6f6b696504696c7365026e6c0000010001 c25f8000000100000003000306636f6f6b696504696c7365026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 28562 d5a40000000100000000000002616404696c7365026e6c0000010001 d5a48000000100000003000302616404696c7365026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 28563 316f00000001000000000000076f6c6976696572026e6c0000ff0001 316f80000001000000020002076f6c6976696572026e6c0000ff0001c00c0002000100015180000b026e73056c65766978c014c00c00020001000151800006036e7332c02bc02800010001000151800004d590ed07c03f000100010001518000043e3aa7da 28564 d5a700000001000000000000046162656c0564656d6f6e026e6c00001c0001 d5a780000001000000030002046162656c0564656d6f6e026e6c00001c0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 28565 1288000000010000000000000e736e696a646572696e7374616c6c026e6c0000010001 1288800000010000000200020e736e696a646572696e7374616c6c026e6c0000010001c00c0002000100015180000c026e73066e6578697465c01bc00c00020001000151800006036e7332c032c02f00010001000151800004d5e38d74c04700010001000151800004d5e38d75 28566 39e700000001000000000000026e73076e656473746174026e6c00001c0001 39e780000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28567 fb3e00000001000000000000026e73076e656473746174026e6c0000260001 fb3e80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28568 46d600000001000000000000036e7332076e656473746174026e6c0000010001 46d680000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28569 424900000001000000000000036e7332076e656473746174026e6c00001c0001 424980000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28570 d6b300000001000000000000036e7332076e656473746174026e6c0000260001 d6b380000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28571 b93800000001000000000000036e7333076e656473746174026e6c00001c0001 b93880000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 28572 4c7500000001000000000000036e7333076e656473746174026e6c0000260001 4c7580000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 28573 128800000001000000000000036e7334076e656473746174026e6c0000010001 128880000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28574 c62600000001000000000000036e7334076e656473746174026e6c00001c0001 c62680000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28575 414800000001000000000000036e7334076e656473746174026e6c0000260001 414880000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28576 ead200000001000000000000037777771062616e6e65726d616e6167656d656e74026e6c0000010001 ead280000001000000030003037777771062616e6e65726d616e6167656d656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 28577 422e00000001000000000000096369746f67726f6570026e6c0000010001 422e80000001000000020002096369746f67726f6570026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c3a93002c03b00010001000151800004c0576a65 28578 7a9b00000001000000000000037777770b7374617274706167696e61026e6c0000010001 7a9b80000001000000030003037777770b7374617274706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c030000100010001518000043e45a282c042000100010001518000043e45a283c054000100010001518000043e45a284 28579 00fb00000001000000000000037777770d7469656e6572736578736c6574026e6c0000010001 00fb80000001000000030000037777770d7469656e6572736578736c6574026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c03ac0100002000100015180000a076e73686f737433c03a 28580 087500000001000000000000096e696575776b6f6f70026e6c00000f0001 087580000001000000020002096e696575776b6f6f70026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 28581 8a91000000010000000000000377777704656d7578026e6c0000010001 8a91800000010000000200000377777704656d7578026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 28582 5dcc000000010000000000000377777704656d7578026e6c0000010001 5dcc800000010000000200000377777704656d7578026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 28583 e3e100000001000000000000036e73320461786974026e6c00001c0001 e3e180000001000000030003036e73320461786974026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e3a440bc00c000100010001518000043e3a440cc04900010001000151800004d43d5c83 28584 4cad00000001000000000000036e73320461786974026e6c0000260001 4cad80000001000000030003036e73320461786974026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e3a440bc00c000100010001518000043e3a440cc04900010001000151800004d43d5c83 28585 a97800000001000000000000036e73310461786974026e6c00001c0001 a97880000001000000030003036e73310461786974026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e3a440bc037000100010001518000043e3a440cc04900010001000151800004d43d5c83 28586 aa3100000001000000000000036e73310461786974026e6c0000260001 aa3180000001000000030003036e73310461786974026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e3a440bc037000100010001518000043e3a440cc04900010001000151800004d43d5c83 28587 f11300000001000000000000046d61696c076575726f6e6574026e6c0000010001 f11380000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 28588 152a000000010000000000000377777708626e64657374656d026e6c0000010001 152a800000010000000200020377777708626e64657374656d026e6c0000010001c0100002000100015180000e036e7331076e657463617374c019c01000020001000151800006036e7332c031c02d00010001000151800004c2970101c04700010001000151800004c297012d 28589 d9f800000001000000000000036e733303777873026e6c0000010001 d9f880000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28590 93460000000100000000000003777777046c657861026e6c0000010001 93468000000100000003000203777777046c657861026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 28591 978b00000001000000000000037777770e737461647361766f6e747572656e026e6c0000010001 978b80000001000000020002037777770e737461647361766f6e747572656e026e6c0000010001c0100002000100015180000a036e7331036e7873c01fc01000020001000151800006036e7332c037c03300010001000151800004d973c015c04900010001000151800004d973c102 28592 726600000001000000000000076c696f6e657331066c696f6e6573026e6c0000010001 726680000001000000020001076c696f6e657331066c696f6e6573026e6c0000010001c0140002000100015180000e036e7331076e6564636f6d70c01bc01400020001000151800011036e7332076e6564636f6d70036f726700c02f00010001000151800004c3c1a80d 28593 2b19000000010000000000000f7a756976656c626f6572646572696a026e6c0000010001 2b19800000010000000200020f7a756976656c626f6572646572696a026e6c0000010001c00c0002000100015180000b026e73057173776562c01cc00c00020001000151800006036e7332c033c03000010001000151800004d5c42402c04700010001000151800004d5c42403 28594 67be00000001000000000000036e73320670726f6c616e026e6c00001c0001 67be80000001000000020002036e73320670726f6c616e026e6c00001c0001c0100002000100015180001404777777320c6e656465726c616e64776562c017c01000020001000151800002c00cc02b00010001000151800004d5d381c2c00c00010001000151800004d4ccd4e7 28595 bc2c00000001000000000000036e73320670726f6c616e026e6c0000260001 bc2c80000001000000020002036e73320670726f6c616e026e6c0000260001c0100002000100015180001404777777320c6e656465726c616e64776562c017c01000020001000151800002c00cc02b00010001000151800004d5d381c2c00c00010001000151800004d4ccd4e7 28596 928a0000000100000000000006636f62616c74057173776562026e6c0000010001 928a8000000100000002000206636f62616c74057173776562026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c02d00010001000151800004d5c42402c03e00010001000151800004d5c42403 28597 f5070000000100000000000006636f62616c74057173776562026e6c00001c0001 f5078000000100000002000206636f62616c74057173776562026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c02d00010001000151800004d5c42402c03e00010001000151800004d5c42403 28598 1efe00000001000000000000036e7332057173776562026e6c00001c0001 1efe80000001000000020002036e7332057173776562026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d5c42402c00c00010001000151800004d5c42403 28599 843800000001000000000000026e73057173776562026e6c00001c0001 843880000001000000020002026e73057173776562026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5c42402c03700010001000151800004d5c42403 28600 82c800000001000000000000037777770962697a617273697465026e6c0000010001 82c880000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 28601 280028000001000000010000026e6c0000060001026763065f6d7364637306726f63767565026e6c0000010001000002580004c7a600ca 2800a8040000000000000000 28602 3f0a0000000100000000000003777777096e6574646972656374026e6c0000010001 3f0a8000000100000003000003777777096e6574646972656374026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 28603 c8180010000100000000000103777777066e666f726365026e6c00000100010000290800000080000000 c8188000000100000002000303777777066e666f726365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b000100010001518000043ed45433c03d000100010001518000043ed454340000291000000000000000 28604 4b8c0000000100000000000007737570706f7274026e6c0000020001 4b8c8000000100000002000207737570706f7274026e6c0000020001c00c00020001000151800006036e7332c00cc00c00020001000151800006036e7334c00cc02800010001000151800004c372e7c8c03a00010001000151800004c372e6fe 28605 09520000000100000000000003657a68026e6c0000010001 09528000000100000002000103657a68026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c0240001000100015180000489ae8f03 28606 000000007002ff0045bd00000204055001010402 000080010000000000000000 28607 66e400000001000000000000066865746e6574026e6c0000010001 66e480000001000000030003066865746e6574026e6c0000010001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 28608 611e0000000100000000000004696b6361026e6c00001c0001 611e8000000100000002000104696b6361026e6c00001c0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c011c03e00010001000151800004c2860043 28609 b6392e195010ff008dba0000000000000000 b639ae140000000000000000 28610 b6392e195018ff0004e90000008fedfc000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdf0403c4f700003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000 b639ae140000000000000000 28611 044f00000001000000000000076275726d656573026e6c00000f000100 044f80000001000000020000076275726d656573026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02e 28612 0c54000000010000000000000a70616369666963616972026e6c00000f0001 0c54840300010000000100000a70616369666963616972026e6c00000f0001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 28613 b6392e275011fef28d280000000000000000 b639ae240000000000000000 28614 c1820000000100000000000013766572686f65662d726576616c696461746965026e6c00000f0001 c1828000000100000002000213766572686f65662d726576616c696461746965026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c020c00c00020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 28615 000000007002ff0080c700000204055001010402 000080010000000000000000 28616 b6392e285010fef28d270000000000000000 b639ae240000000000000000 28617 886f000000010000000000000c6370736164766f636174656e026e6c00000f0001 886f840300010000000100000c6370736164766f636174656e026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 28618 b63a092c5010ff00edb00000000000000000 b63a89240000000000000000 28619 d6f300000001000000000000036e733109657870616e73696f6e026e6c0000010001 d6f380000001000000020002036e733109657870616e73696f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d44ea53cc03c00010001000151800004d44ea53d 28620 dfec00000001000000000000036e733109657870616e73696f6e026e6c0000260001 dfec80000001000000020002036e733109657870616e73696f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d44ea53cc03c00010001000151800004d44ea53d 28621 b63a092c5018ff0081700000008fd26c000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdf0403c4f700003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000 b63a89240000000000000000 28622 eff600000001000000000000036e733209657870616e73696f6e026e6c0000010001 eff680000001000000020002036e733209657870616e73696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d44ea53cc00c00010001000151800004d44ea53d 28623 f7fb00000001000000000000036e733209657870616e73696f6e026e6c0000260001 f7fb80000001000000020002036e733209657870616e73696f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d44ea53cc00c00010001000151800004d44ea53d 28624 74b900000001000000000000056472616b61026e6c00000f0001 74b980000001000000030000056472616b61026e6c00000f0001c00c00020001000151800019036e73310f6f726967696e2d736572766963657303636f6d00c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02a 28625 42dd00000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 42dd80000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 28626 12ce00000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 12ce80000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 28627 629700000001000000000000066265736f7577026e6c0000010001 629780000001000000020002066265736f7577026e6c0000010001c00c0002000100015180000f036e733108696e74726f776562c013c00c00020001000151800006036e7332c02bc0270001000100015180000450416028c04200010001000151800004c356780c 28628 b63a093a5011fef2ed1e0000000000000000 b63a89340000000000000000 28629 ba7b00000001000000000000037777770a636f6d6269666f637573026e6c0000010001 ba7b80000001000000020000037777770a636f6d6269666f637573026e6c0000010001c01000020001000151800014036e73310a62697a6d616368696e65036e657400c01000020001000151800006036e7332c033 28630 4f3b0000000100000000000006636861726973026e6c0000ff0001 4f3b8000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 28631 000000007002ff008e7500000204055001010402 000080010000000000000000 28632 cde800000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 cde880000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28633 b63a093b5010fef2ed1d0000000000000000 b63a89340000000000000000 28634 587700000001000000000000037777770c77656263726561746f727334026e6c0000010001 587780000001000000020001037777770c77656263726561746f727334026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c03100010001000151800004d4ccc0fc 28635 b63adcf25010ff0027980000000000000000 28636 832900000001000000000000086761796b72616e74026e6c0000010001 832980000001000000020000086761796b72616e74026e6c0000010001c00c00020001000151800017036e73310d64757463687365727669636573036e657400c00c00020001000151800006036e7332c02d 28637 b63adcf25018ff0091310000008ffc92000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdf0403c4f700003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000 28638 87e8000000010000000000000773747564656e7409494e484f4c4c414e44026e6c0000010001 87e8800000010000000200020773747564656e7409494e484f4c4c414e44026e6c0000010001c01400020001000151800006036e7331c014c0140002000100015180000e036e733107737572666e6574c01ec03200010001000151800004c2ab230bc04400010001000151800004c0576a65 28639 b63add005011fef227060000000000000000 28640 bce800100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 bce880000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 28641 de7400100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 de7480000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 28642 b63add015010fef227050000000000000000 28643 53840000000100000000000005646e732d31056c61646f74026e6c0000010001 53848000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28644 94c20000000100000000000005646e732d32056c61646f74026e6c0000010001 94c28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28645 808300000001000000000000037777770b776161726e616172746f65026e6c0000010001 808380000001000000020000037777770b776161726e616172746f65026e6c0000010001c01000020001000151800012036e73310b646d6d2d686f7374696e67c01cc01000020001000151800006036e7332c034 28646 0b6400000001000000000000036e73340767617574656e67026e6c0000010001 0b6480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28647 1146000000010000000000000377777705616e646573026e6c0000010001 1146800000010000000200010377777705616e646573026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c016c01000020001000151800011036e7332076e6564636f6d70036f726700c02a00010001000151800004c3c1a80d 28648 1000000000010000000000000377777706737570657273026e6c0000010001 1000800000010000000200000377777706737570657273026e6c0000010001c0100002000100015180000f036e7331056279303030036e657400c01000020001000151800006036e7332c02f 28649 071700000001000000000000026e73076e656473746174026e6c00001c0001 071780000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28650 77b800000001000000000000026e73076e656473746174026e6c0000010001 77b880000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28651 61e200000001000000000000026e73076e656473746174026e6c0000260001 61e280000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28652 5d8100000001000000000000036e7333076e656473746174026e6c0000010001 5d8180000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 28653 e0b900000001000000000000036e7332076e656473746174026e6c0000010001 e0b980000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28654 1d9200000001000000000000036e7332076e656473746174026e6c00001c0001 1d9280000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28655 fd7900000001000000000000036e7332076e656473746174026e6c0000260001 fd7980000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28656 3352000000010000000000000565666e657403626974026e6c0000010001 3352800000010000000300030565666e657403626974026e6c0000010001c0120002000100015180000a076e736175746831c012c0120002000100015180000a076e736175746832c012c0120002000100015180000a076e736175746833c012c02a00010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 28657 358f00000001000000000000036e7333076e656473746174026e6c00001c0001 358f80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 28658 ffd500000001000000000000036e7333076e656473746174026e6c0000260001 ffd580000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 28659 f3b100000001000000000000036e7334076e656473746174026e6c0000010001 f3b180000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28660 e02d00000001000000000000036e7332096575726f62656e6368026e6c0000010001 e02d80000001000000020002036e7332096575726f62656e6368026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004c3c18d35c00c00010001000151800004c3c18d36 28661 51be00000001000000000000036e7332096575726f62656e6368026e6c0000260001 51be80000001000000020002036e7332096575726f62656e6368026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004c3c18d35c00c00010001000151800004c3c18d36 28662 60a900000001000000000000036e7334076e656473746174026e6c00001c0001 60a980000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28663 48b700000001000000000000036e7332046a617a65026e6c0000010001 48b780000001000000020000036e7332046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 28664 e04000000001000000000000036e7334076e656473746174026e6c0000260001 e04080000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28665 a36a0000000100000000000008736179616e6f7261056d62757975026e6c0000010001 a36a8000000100000002000008736179616e6f7261056d62757975026e6c0000010001c01500020001000151800010026e73076379736f6e657403636f6d00c01500020001000151800006036e7331c032 28666 c8f700000001000000000000036972630565666e6574026e6c0000010001 c8f780000001000000030000036972630565666e6574026e6c0000010001c0100002000100015180000f036e733108696e736563757265c016c01000020001000151800006036e7333c02ec01000020001000151800006036e7334c02e 28667 01c90000000100000000000012647261676f6e62616c6c7a2d6f6e6c696e65036e6c2d07736974652d6964026e6c0000010001 01c98000000100000003000012647261676f6e62616c6c7a2d6f6e6c696e65036e6c2d07736974652d6964026e6c0000010001c02300020001000151800012036e733108626c7565646f6d65036e657400c02300020001000151800006036e7332c043c02300020001000151800006036e7333c043 28668 321d0000000100000000000003726770026e6c0000010001 321d8000000100000002000203726770026e6c0000010001c00c00020001000151800009036e7331026973c010c00c00020001000151800006036e7332c028c02400010001000151800004d5852102c03900010001000151800004d5c41503 28669 195500000001000000000000077777772d64737a077365727669636503727567026e6c0000010001 195580000001000000030003077777772d64737a077365727669636503727567026e6c0000010001c01c00020001000151800006036e7331c01cc01c00020001000151800006036e7332c01cc01c0002000100015180000e036e733107737572666e6574c020c03400010001000151800004817d0406c04600010001000151800004817d040dc05800010001000151800004c0576a65 28670 9fea00000001000000000000064b5542535531034b5542024e4c0000010001 9fea80000001000000030003064b5542535531034b5542024e4c0000010001c01300020001000151800009066b7562737532c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c02b0001000100015180000489380028c00c000100010001518000048938001bc04e00010001000151800004c0576a65 28671 350a0000000100000000000003777777116865696e656b656e6d7573696368616c6c026e6c0000010001 350a8000000100000002000203777777116865696e656b656e6d7573696368616c6c026e6c0000010001c01000020001000151800014036e73330d696e7465727370656374697665c022c01000020001000151800006036e7332c03ac03600010001000151800004c14ee108c05600010001000151800004c14ee102 28672 72690000000100000000000003777777066e666f726365026e6c0000010001 72698000000100000002000203777777066e666f726365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b000100010001518000043ed45433c03d000100010001518000043ed45434 28673 35050000000100000000000003777777096e6574646972656374026e6c0000010001 35058000000100000003000003777777096e6574646972656374026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 28674 f97400000001000000000000056d61696c31106a616172626575727375747265636874026e6c0000010001 f97480000001000000020002056d61696c31106a616172626575727375747265636874026e6c0000010001c0120002000100015180000e036e73310765766964656e74c023c01200020001000151800006036e7332c03bc03700010001000151800004c36d19c4c05100010001000151800004c36d1942 28675 1d220000000100000000000008686f73746e616d650462696e640000100003 1d228000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 28676 38bf00000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 38bf80000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 28677 33ac00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 33ac80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 28678 e58900000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 e58980000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 28679 574300100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 574380000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 28680 3938000000010000000000000377777710616c6c2d726f756e6473657276696365026e6c0000010001 3938800000010000000200020377777710616c6c2d726f756e6473657276696365026e6c0000010001c01000020001000151800010036e733109756e69736572766572c021c01000020001000151800006036e7332c039c03500010001000151800004c3454b03c05100010001000151800004d119a2fa 28681 31830000000100000000000004646e7331057368656c6c026e6c0000010001 31838000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 28682 d7f900000001000000000000036e733103696e67026e6c0000010001 d7f980000001000000020002036e733103696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 28683 fd6c00000001000000000000036e733203696e67026e6c0000010001 fd6c80000001000000020002036e733203696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 28684 2a8b0000000100000000000008686f73746e616d650462696e640000100003 2a8b8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 28685 0d9b0000000100000000000008686f73746e616d650462696e640000100003 0d9b8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 28686 78240000000100000000000005646e732d31056c61646f74026e6c0000010001 78248000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28687 bdc00000000100000000000005646e732d32056c61646f74026e6c0000010001 bdc08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28688 69f200000001000000000000036e7332056e6574636f026e6c0000260001 69f280000001000000020002036e7332056e6574636f026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004c26d4a82c00c00010001000151800004c26dd146 28689 4bbf00000001000000000000036e7331056e6574636f026e6c0000260001 4bbf80000001000000020002036e7331056e6574636f026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c26d4a82c03800010001000151800004c26dd146 28690 c9ca00000001000000000000036e7332056e6574636f026e6c00001c0001 c9ca80000001000000020002036e7332056e6574636f026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004c26d4a82c00c00010001000151800004c26dd146 28691 c7be00000001000000000000036e7331056e6574636f026e6c00001c0001 c7be80000001000000020002036e7331056e6574636f026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c26d4a82c03800010001000151800004c26dd146 28692 55c4000000010000000000000367746f08706f737462616e6b026e6c0000010001 55c4800000010000000200020367746f08706f737462616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c019c01000020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 28693 1d1500000001000000000000076f6e6573697465026e6c0000ff0001 1d1580000001000000020000076f6e6573697465026e6c0000ff0001c00c0002000100015180000f036e7331056d79736d74036e657400c00c00020001000151800006036e7332c02c 28694 08420000000100000000000005646e732d31056c61646f74026e6c0000010001 08428000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28695 9c480000000100000000000005646e732d32056c61646f74026e6c0000010001 9c488000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28696 f25c000000010000000000000377777709677961736c69636874026e6c0000010001 f25c800000010000000300030377777709677961736c69636874026e6c0000010001c01000020001000151800010036e733109657863657074696f6ec01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5c9a38cc04a00010001000151800004d5c9a38dc05c00010001000151800004d5c9af03 28697 0a3900000001000000000000037777770b646573706f72746c61616e026e6c0000010001 0a3980000001000000020002037777770b646573706f72746c61616e026e6c0000010001c01000020001000151800014036e73330d696e7465727370656374697665c01cc01000020001000151800006036e7332c034c03000010001000151800004c14ee108c05000010001000151800004c14ee102 28698 5fec000000010000000000000469632d73026e6c0000010001 5fec800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 28699 9e6600000001000000000000037777770a6c696e6b746970706572026e6c0000010001 9e6680000001000000030003037777770a6c696e6b746970706572026e6c0000010001c0100002000100015180000c036e7331056d61786573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f000100010001518000045045402ec047000100010001518000045045402fc059000100010001518000045045440a 28700 9c490000000100000000000005646e732d31056c61646f74026e6c0000010001 9c498000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28701 f2ce00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 f2ce80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28702 11070000000100000000000005646e732d32056c61646f74026e6c0000010001 11078000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28703 5bc2000000010000000000000f64652d6472656e74736368652d6161026e6c00000f0001 5bc2800000010000000200000f64652d6472656e74736368652d6161026e6c00000f0001c00c0002000100015180000c026e7306766576696461c01cc00c00020001000151800006036e7332c033 28704 c59b000000010000000000000472757564026e6c00000f0001 c59b800000010000000300010472757564026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc011c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c043c025000100010001518000043efa0202 28705 b918000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 b918800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 28706 8f250000000100000000000003777777066a617a706572026e6c0000010001 8f258000000100000002000003777777066a617a706572026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c031 28707 43c20000000100000000000005646e732d31056c61646f74026e6c0000010001 43c28000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28708 dbe60000000100000000000005646e732d32056c61646f74026e6c0000010001 dbe68000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28709 17f000000001000000000000037777770464617663026e6c0000010001 17f080000001000000030000037777770464617663026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c031c0100002000100015180000a076e73686f737433c031 28710 95a00000000100000000000003777777066164626f6d61026e6c0000010001 95a08000000100000002000203777777066164626f6d61026e6c0000010001c01000020001000151800002c010c0100002000100015180000d04646e733105692d702d64c017c01000010001000151800004d912405fc03900010001000151800004d9124003 28711 ea940000000100000000000003777777096e6974657370656564026e6c0000010001 ea948000000100000002000203777777096e6974657370656564026e6c0000010001c0100002000100015180000c026e7306786978696f6ec01ac01000020001000151800006036e7331c031c02e000100010001518000043e04526bc046000100010001518000043e04526d 28712 2c4000000001000000000000046d61696c066368656c6c6f026e6c0000010001 2c4080000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 28713 aa7d0000000100000000000003777777057061727365026e6c0000010001 aa7d8000000100000002000203777777057061727365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02a00010001000151800004d5ef9b0bc03c00010001000151800004d5efb238 28714 430e000000010000000000000477697368026e6c00000f0001 430e800000010000000300020477697368026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c011c00c0002000100015180000704616e7332c02ac00c0002000100015180001404616e73330a74697363616c696e657402626500c02500010001000151800004c3f14d38c04000010001000151800004c3f13325 28715 39cb00000001000000000000066e6167696f7307726567696f2d69026e6c0000010001 39cb80000001000000030003066e6167696f7307726567696f2d69026e6c0000010001c0130002000100015180000e076e73617574683103626974c01bc0130002000100015180000a076e736175746832c037c0130002000100015180000a076e736175746833c037c02f00010001000151800004d5880c33c04900010001000151800004d5880c3bc05f00010001000151800004d4ccc00b 28716 b81300000001000000000000096f6e2d776865656c73026e6c0000010001 b81380000001000000020002096f6e2d776865656c73026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 28717 147500000001000000000000056d696c6f76026e6c0000010001 147580000001000000020002056d696c6f76026e6c0000010001c00c0002000100015180000c036e733105636176656fc012c00c00020001000151800006036e7332c02ac026000100010001518000045112a002c03e000100010001518000045112a102 28718 897500000001000000000000036e73310a6d756c74696b6162656c026e6c0000010001 897580000001000000030002036e73310a6d756c74696b6162656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 28719 897600000001000000000000036e73320a6d756c74696b6162656c026e6c0000010001 897680000001000000030002036e73320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 28720 e43e000000010000000000000b6f61622d64656b6b657273026e6c0000060001 e43e840300010000000100000b6f61622d64656b6b657273026e6c0000060001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 28721 508f00000001000000000000037777770d766c696567746172696576656e026e6c0000010001 508f80000001000000020002037777770d766c696567746172696576656e026e6c0000010001c0100002000100015180000e036e733007656173796e6574c01ec01000020001000151800006036e7331c036c03200010001000151800004c2a55e01c04c00010001000151800004c2a55e05 28722 f5de0000000100000000000004706f703309686f6e64656e646167026e6c0000010001 f5de8000000100000002000204706f703309686f6e64656e646167026e6c0000010001c0110002000100015180000e026e7308696e7465726c6162c01bc01100020001000151800006036e7332c032c02f00010001000151800004d4cb0902c04900010001000151800004d4cb0903 28723 c91100000001000000000000036e73330767617574656e67026e6c0000010001 c91180000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28724 c91200000001000000000000036e73340767617574656e67026e6c0000010001 c91280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28725 faa500000001000000000000037777770672656e646576026e6c0000010001 faa580000001000000020000037777770672656e646576026e6c0000010001c01000020001000151800015036e73310b6475746368776562646e73036e657400c01000020001000151800006036e7332c02f 28726 09d900000001000000000000096767647477656e7465026e6c00000f0001 09d980000001000000020000096767647477656e7465026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c02d 28727 b63e0000000100000000000004646330310b6f61622d64656b6b657273026e6c0000060001 b63e8403000100000001000004646330310b6f61622d64656b6b657273026e6c0000060001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 28728 8a2700000001000000000000037777770b6465766f6f727467616e67026e6c0000010001 8a2780000001000000020002037777770b6465766f6f727467616e67026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 28729 7a9300000001000000000000037777770661742d647767026e6c0000010001 7a9380000001000000020000037777770661742d647767026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c02f 28730 ccbb000000010000000000000377777706696e666f6d65026e6c0000010001 ccbb800000010000000300000377777706696e666f6d65026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c033c0100002000100015180000a076e73686f737433c033 28731 3b7400000001000000000000036e73330767617574656e67026e6c0000010001 3b7480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28732 767100000001000000000000036e73310a6d61696e736572766572026e6c0000010001 767180000001000000020002036e73310a6d61696e736572766572026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c01bc01000020001000151800006036e7332c033c02f00010001000151800004d90867fec04e00010001000151800004c1ad2bfe 28733 de8000000001000000000000036e73320a6d61696e736572766572026e6c0000010001 de8080000001000000020002036e73320a6d61696e736572766572026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c01bc01000020001000151800006036e7332c033c02f00010001000151800004d90867fec04e00010001000151800004c1ad2bfe 28734 c13900000001000000000000037777770965726f636c69636b73026e6c0000010001 c13980000001000000020002037777770965726f636c69636b73026e6c0000010001c0100002000100015180000b036e7331046e732d31c01ac01000020001000151800006036e7332c032c02e000100010001518000045045a0cdc04500010001000151800004d4cceec8 28735 7421000000010000000000000a67726f6e6462657a6974026e6c0000ff0001 7421800000010000000200020a67726f6e6462657a6974026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 28736 05c90000000100000000000004646e7331057368656c6c026e6c0000010001 05c98000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 28737 336200000001000000000000026e7304616b7475026e6c0000010001 336280000001000000020001026e7304616b7475026e6c0000010001c00f00020001000151800006036e7331c00fc00f0002000100015180000b026e73026e6c036e657400c02800010001000151800004c2b25945 28738 316e00000001000000000000036e733107737572666e6574026e6c0000010001 316e80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 28739 30ba00000001000000000000036e73310773656172636879026e6c0000010001 30ba80000001000000020002036e73310773656172636879026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9aa1235c03a00010001000151800004507e81e0 28740 d1fd000000010000000000000377777706732d636f7274026e6c0000010001 d1fd800000010000000200020377777706732d636f7274026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c017c01000020001000151800006036e7332c02fc02b0001000100015180000451113264c04700010001000151800004d5c42851 28741 fcf0000000010000000000000377777706732d636f7274026e6c0000010001 fcf0800000010000000200020377777706732d636f7274026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c017c01000020001000151800006036e7332c02fc02b0001000100015180000451113264c04700010001000151800004d5c42851 28742 5dd2000000010000000000000d676c6f62616c696e7369746573026e6c0000010001 5dd2800000010000000200020d676c6f62616c696e7369746573026e6c0000010001c00c0002000100015180000f036e73310861746c616e74697ac01ac00c00020001000151800006036e7332c032c02e00010001000151800004d5efa011c04900010001000151800004d5efa075 28743 7ff10000000100000000000007686161726c656d026e6c00000f0001 7ff18000000100000002000007686161726c656d026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02c 28744 9eae00000001000000000000076e6f7465736e6c0473636961026e6c0000010001 9eae80000001000000020000076e6f7465736e6c0473636961026e6c0000010001c0140002000100015180000c03646e73036b706e02626500c01400020001000151800005026e73c031 28745 e4df00000001000000000000076e6f7465736e6c0473636961026e6c0000010001 e4df80000001000000020000076e6f7465736e6c0473636961026e6c0000010001c0140002000100015180000c03646e73036b706e02626500c01400020001000151800005026e73c031 28746 bf3400000001000000000000076e6f7465736e6c0473636961026e6c00001c0001 bf3480000001000000020000076e6f7465736e6c0473636961026e6c00001c0001c0140002000100015180000c03646e73036b706e02626500c01400020001000151800005026e73c031 28747 1e150000000100000000000003777777096175746f747261636b026e6c0000010001 1e158000000100000003000303777777096175746f747261636b026e6c0000010001c01000020001000151800010036e733109776973652d67757973c01ac01000020001000151800006036e7330c032c01000020001000151800006036e7332c032c02e00010001000151800004d413cd91c04a00010001000151800004d413cd8fc05c00010001000151800004c16d7a3e 28748 038000000001000000000000036e73330767617574656e67026e6c0000010001 038080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28749 c91400000001000000000000036e73330767617574656e67026e6c0000010001 c91480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28750 c91500000001000000000000036e73340767617574656e67026e6c0000010001 c91580000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28751 1f1c0000000100000000000006636861726973026e6c00000f0001 1f1c8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 28752 4476000000010000000000001063617262656175747973657276696365026e6c0000010001 4476800000010000000200001063617262656175747973657276696365026e6c0000010001c00c0002000100015180000c026e7306766576696461c01dc00c00020001000151800006036e7332c034 28753 26a300000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 26a380000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 28754 f8e20000000100000000000004626572740b696e7465727669736f7273026e6c0000010001 f8e28000000100000002000204626572740b696e7465727669736f7273026e6c0000010001c01100020001000151800002c00cc011000200010001518000080565726e6965c011c00c00010001000151800004c0dc7c61c03f00010001000151800004c0dc7d61 28755 a26800000001000000000000036e7473026e6c00000f0001 a26880000001000000020002036e7473026e6c00000f0001c00c0002000100015180000a036e733103697870c010c00c00020001000151800006036e7332c028c02400010001000151800004d943e639c03a000100010001518000043efa063f 28756 7c710000000100000000000004626572740b696e7465727669736f7273026e6c0000260001 7c718000000100000002000204626572740b696e7465727669736f7273026e6c0000260001c01100020001000151800002c00cc011000200010001518000080565726e6965c011c00c00010001000151800004c0dc7c61c03f00010001000151800004c0dc7d61 28757 0a41000000010000000000000565726e69650b696e7465727669736f7273026e6c0000010001 0a41800000010000000200020565726e69650b696e7465727669736f7273026e6c0000010001c012000200010001518000070462657274c012c01200020001000151800002c00cc03200010001000151800004c0dc7c61c00c00010001000151800004c0dc7d61 28758 286f000000010000000000000565726e69650b696e7465727669736f7273026e6c0000260001 286f800000010000000200020565726e69650b696e7465727669736f7273026e6c0000260001c012000200010001518000070462657274c012c01200020001000151800002c00cc03200010001000151800004c0dc7c61c00c00010001000151800004c0dc7d61 28759 2eae0000000100000000000003637067026e6c00000f0001 2eae8000000100000002000203637067026e6c00000f0001c00c0002000100015180000e036e7331076465636c617265c010c00c00020001000151800006036e7332c028c024000100010001518000043ed4528dc03e000100010001518000045054e9de 28760 fac4000000010000000000000750313530302d310474656e77026e6c0000010001 fac4800000010000000300010750313530302d310474656e77026e6c0000010001c0140002000100015180000e026e7308767575727765726bc019c01400020001000151800012036e733208767575727765726b036e657400c01400020001000151800006036e7333c04bc02d000100010001518000043efa0202 28761 cbe300000001000000000000037777770974656c656772616166026e6c0000010001 cbe380000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 28762 29230000000100000000000003777777066a61636f646f026e6c0000010001 29238000000100000002000203777777066a61636f646f026e6c0000010001c01000020001000151800013036e73310c7570706572686f7374696e67c017c01000020001000151800006036e7332c02fc02b00010001000151800004d994a851c04a00010001000151800004d994a852 28763 9ddb000000010000000000000d6c6974686f706172746e657273026e6c00000f0001 9ddb800000010000000200020d6c6974686f706172746e657273026e6c00000f0001c00c00020001000151800011036e73310a646e7373657276657273c01ac00c00020001000151800006036e7332c032c02e000100010001518000045054ed14c04b00010001000151800004d5f72f14 28764 5412000000010000000000000f68616e73612d6e656465726c616e64026e6c00000f0001 5412800000010000000200020f68616e73612d6e656465726c616e64026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec01cc00c00020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 28765 69b100000001000000000000037777770e31323374696a6473636872696674026e6c0000010001 69b180000001000000020000037777770e31323374696a6473636872696674026e6c0000010001c01000020001000151800012036e7331086f6e6c696e6562700362697a00c01000020001000151800006036e7332c037 28766 29a100000001000000000000026e7306787334616c6c026e6c00001c0001 29a180000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 28767 039800000001000000000000036e733206787334616c6c026e6c00001c0001 039880000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 28768 4b620000000100000000000003676274026e6c00000f0001 4b628000000100000002000203676274026e6c00000f0001c00c00020001000151800011036e73310a62686d732d67726f6570c010c00c00020001000151800006036e7332c028c02400010001000151800004d9726162c04100010001000151800004d9726161 28769 12e00000000100000000000004777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001 12e08000000100000002000204777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001c01f00020001000151800009036e7331026973c02ac01f00020001000151800006036e7332c042c03e00010001000151800004d5852102c05300010001000151800004d5c41503 28770 7cd6000000010000000000000377777706732d636f7274026e6c0000010001 7cd6800000010000000200020377777706732d636f7274026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c017c01000020001000151800006036e7332c02fc02b0001000100015180000451113264c04700010001000151800004d5c42851 28771 2cc700000001000000000000026e730a62686d732d67726f6570026e6c00001c0001 2cc780000001000000020002026e730a62686d732d67726f6570026e6c00001c0001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc02e00010001000151800004d9726162c04000010001000151800004d9726161 28772 7c2c00000001000000000000036e733303777873026e6c0000010001 7c2c80000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 28773 1aed0000000100000000000004777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001 1aed8000000100000002000204777061640a7377697463686a6f6273026e6c0a7377697463686a6f6273026e6c0000010001c01f00020001000151800009036e7331026973c02ac01f00020001000151800006036e7332c042c03e00010001000151800004d5852102c05300010001000151800004d5c41503 28774 b88d000000010000000000000377777704696c7365026e6c0000010001 b88d800000010000000300030377777704696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c029000100010001518000043e45a282c03b000100010001518000043e45a283c04d000100010001518000043e45a284 28775 fb670000000100000000000004686f6d65026e6c0000ff0001 fb678000000100000003000304686f6d65026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02500010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 28776 5e890000000100000000000003777777087472697074726170026e6c0000010001 5e898000000100000002000203777777087472697074726170026e6c0000010001c0100002000100015180000b036e7331047769776fc019c01000020001000151800006036e7332c031c02d000100010001518000043eb1a454c044000100010001518000043eb1a456 28777 a5ac0000000100000000000003777777076a696a62656e74026e6c00000f0001 a5ac8000000100000002000003777777076a696a62656e74026e6c00000f0001c01000020001000151800010036e73310673697465347503636f6d00c01000020001000151800006036e7332c030 28778 230000000001000000000000036e733109756e69736572766572026e6c0000010001 230080000001000000020002036e733109756e69736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3454b03c03c00010001000151800004d119a2fa 28779 e9c00000000100000000000014616c61726d6572696e672d74687569737a6f7267026e6c0000010001 e9c08000000100000002000214616c61726d6572696e672d74687569737a6f7267026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc021c00c00020001000151800006036e7332c038c03500010001000151800004c26d0642c04d00010001000151800004c26d0963 28780 0df000000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 0df080000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 28781 188100100001000000000001066170616368650962617365667265616b026e6c00000100010000290800000080000000 188180000001000000030004066170616368650962617365667265616b026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c03100010001000151800004c32fdc83c042000100010001518000045054f998c05400010001000151800004c16d7adb0000291000000000000000 28782 756c00000001000000000000086e4c6f676368656d026e6c0000010001 756c80000001000000020000086e4c6f676368656d026e6c0000010001c00c00020001000151800012036e7333087a6f6e656564697403636f6d00c00c00020001000151800006036e7334c02d 28783 f86a000000010000000000000377777704696b6561026e6c0000010001 f86a800000010000000200000377777704696b6561026e6c0000010001c010000200010001518000150a676174656b656570657204696b656103636f6d00c010000200010001518000130761757468323130026e73027575036e657400 28784 31780010000100000000000104686f6d65066863636e6574026e6c00000100010000290800000080000000 31788000000100000002000104686f6d65066863636e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c0330000291000000000000000 28785 6e360000000100000000000009677275626f736f6674026e6c00000f0001 6e368000000100000002000009677275626f736f6674026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c030 28786 2c4500000001000000000000037777770564616e6b61026e6c0000010001 2c4580000001000000020001037777770564616e6b61026e6c0000010001c0100002000100015180000906706f7274616cc010c0100002000100015180000d036e7332036b706e036e657400c02a00010001000151800004c1ad9a0a 28787 e6ad0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 e6ad8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28788 038c00000001000000000000036e73340767617574656e67026e6c0000010001 038c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28789 43ce00100001000000000001046e767462026e6c00000100010000290800000000000000 43ce80000001000000020003046e767462026e6c0000010001c00c0002000100015180000b036e73310470696e65c011c00c00020001000151800006036e7332c029c02500010001000151800004d59c0201c03c00010001000151800004c3c1a3030000291000000000000000 28790 0db100000001000000000000096d797265616c697479026e6c0000ff0001 0db180000001000000020000096d797265616c697479026e6c0000ff0001c00c00020001000151800014036e73310a6d69686f736e65742d3803636f6d00c00c00020001000151800006036e7332c02e 28791 50fd00000001000000000000046e767462026e6c0000010001 50fd80000001000000020002046e767462026e6c0000010001c00c0002000100015180000b036e73310470696e65c011c00c00020001000151800006036e7332c029c02500010001000151800004d59c0201c03c00010001000151800004c3c1a303 28792 581700000001000000000000096d797265616c697479026e6c00001c0001 581780000001000000020000096d797265616c697479026e6c00001c0001c00c00020001000151800014036e73310a6d69686f736e65742d3803636f6d00c00c00020001000151800006036e7332c02e 28793 564200000001000000000000037777770a6d69737465726d61696c026e6c0000010001 564280000001000000020002037777770a6d69737465726d61696c026e6c0000010001c0100002000100015180000b036e73310477656233c01bc01000020001000151800006036e7332c033c02f00010001000151800004d436240ec04600010001000151800004c2b262ef 28794 881f0000000100000000000005646e732d31056c61646f74026e6c0000010001 881f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28795 ec5c000000010000000000000b6e6f7661636f6c6c656765026e6c00000f0001 ec5c800000010000000200020b6e6f7661636f6c6c656765026e6c00000f0001c00c0002000100015180000d036e7331066e6c74726565c018c00c00020001000151800006036e7332c030c02c00010001000151800004d4b20403c04500010001000151800004d5881e45 28796 cf2c0000000100000000000005646e732d32056c61646f74026e6c0000010001 cf2c8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28797 3a0e00000001000000000000026e73076575726f6e6574026e6c0000010001 3a0e80000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 28798 f813000000010000000000000a656d6561736d7470303203616f6e026e6c0000010001 f813800000010000000200010a656d6561736d7470303203616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28799 c9dc000000010000000000000a656d6561736d7470303203616f6e026e6c00001c0001 c9dc800000010000000200010a656d6561736d7470303203616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28800 d8f5000000010000000000000a656d6561736d7470303203616f6e026e6c0000260001 d8f5800000010000000200010a656d6561736d7470303203616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28801 4757000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 4757800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28802 d2fe000000010000000000000a656d6561736d7470303103616f6e026e6c00001c0001 d2fe800000010000000200010a656d6561736d7470303103616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28803 94e5000000010000000000000a656d6561736d7470303103616f6e026e6c0000260001 94e5800000010000000200010a656d6561736d7470303103616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 28804 8d5e000000010000000000000377777711646f72646f676e657265736964656e6365026e6c0000010001 8d5e800000010000000200020377777711646f72646f676e657265736964656e6365026e6c0000010001c0100002000100015180000a04646e7330026975c022c0100002000100015180000704646e7331c03bc03600010001000151800004d91a7002c04c00010001000151800004d91a7103 28805 c6a90000000100000000000005646e732d31056c61646f74026e6c0000010001 c6a98000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28806 97500000000100000000000005646e732d32056c61646f74026e6c0000010001 97508000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28807 7e8100000001000000000000046d61696c0568616b6b75026e6c0000010001 7e8180000001000000020002046d61696c0568616b6b75026e6c0000010001c0110002000100015180000f03646e730864617461736d6974c017c0110002000100015180000704646e7331c02fc02b0001000100015180000451045a82c0460001000100015180000451045ade 28808 9fac00000001000000000000037777770d6865696c6f6f2d6f6e6c696e65026e6c0000010001 9fac80000001000000030001037777770d6865696c6f6f2d6f6e6c696e65026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ec01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c050c032000100010001518000043efa0202 28809 c2d300000001000000000000036e73310974656c656b6162656c026e6c0000010001 c2d380000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 28810 126200000001000000000000076d656d62657273056c79636f73026e6c0000010001 126280000001000000020000076d656d62657273056c79636f73026e6c0000010001c0140002000100015180001106646e73312d31056c79636f7302646500c0140002000100015180000906646e73322d31c035 28811 ed690000000100000000000003777777076e656473746174026e6c0000010001 ed698000000100000002000203777777076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28812 23d600000001000000000000066170616368650962617365667265616b026e6c0000010001 23d680000001000000030003066170616368650962617365667265616b026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c03100010001000151800004c32fdc83c042000100010001518000045054f998c05400010001000151800004c16d7adb 28813 0e340000000100000000000009652d6c756e61746963026e6c0000010001 0e348000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 28814 0e520000000100000000000009652d6c756e61746963026e6c0000010001 0e528000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 28815 3050000000010000000000000370726f076e656473746174026e6c0000010001 3050800000010000000200020370726f076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28816 19830000000100000000000009636f6d70756c696e65026e6c00000f0001 19838000000100000002000209636f6d70756c696e65026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000e036e733407737570706f7274c016c02a00010001000151800004c372e87ec03c00010001000151800004c372e6fe 28817 3b1e000000010000000000000873706f72742d666c026e6c00000f0001 3b1e840300010000000100000873706f72742d666c026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 28818 565600000001000000000000036d6274026e6c0000010001 565680000001000000020002036d6274026e6c0000010001c00c0002000100015180000b026e7305706c616e74c010c00c00020001000151800006036e7332c027c02400010001000151800004d59f0037c03b00010001000151800004d59f0046 28819 956d00000001000000000000026e73076e656473746174026e6c00001c0001 956d80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28820 11b20000000100000000000003777777076e656473746174026e6c0000010001 11b28000000100000002000203777777076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28821 c46800000001000000000000026e73076e656473746174026e6c0000260001 c46880000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28822 793d00000001000000000000036e7332076e656473746174026e6c0000010001 793d80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28823 2bf200000001000000000000036e7332076e656473746174026e6c00001c0001 2bf280000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28824 ff9800000001000000000000036e7332076e656473746174026e6c0000260001 ff9880000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28825 8f3e00000001000000000000036e7333076e656473746174026e6c00001c0001 8f3e80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 28826 75f500000001000000000000036e7333076e656473746174026e6c0000260001 75f580000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 28827 5f9500000001000000000000036e7334076e656473746174026e6c00001c0001 5f9580000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28828 046800000001000000000000036e7334076e656473746174026e6c0000260001 046880000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 28829 05d0000000010000000000000377777712736c696a746572696a7665726d65756c656e026e6c0000010001 05d0800000010000000200020377777712736c696a746572696a7665726d65756c656e026e6c0000010001c01000020001000151800011036e73310a7765626275726f646e73c023c01000020001000151800006036e7332c03bc03700010001000151800004d51380cec05400010001000151800004d513806a 28830 d40400000001000000000000037777770b616466697265776f726b73026e6c0000010001 d40480000001000000020002037777770b616466697265776f726b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 28831 beaf00000001000000000000037777770b616466697265776f726b73026e6c0000010001 beaf80000001000000020002037777770b616466697265776f726b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 28832 d8330000000100000000000002343503313837033135360236340a626c61636b686f6c657307656173796e6574026e6c0000010001 d8338000000100000002000202343503313837033135360236340a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 28833 c8cb00000001000000000000106361706974616c2d6c6f676973746963026e6c00000f0001 c8cb84030001000000010000106361706974616c2d6c6f676973746963026e6c00000f0001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 28834 10270000000100000000000009766572627275676765026e6c00000f0001 10278000000100000002000209766572627275676765026e6c00000f0001c00c0002000100015180000d026e73076e657467617465c016c00c0002000100015180000704646e7331c02dc02a000100010001518000043e0456aac04300010001000151800004d47b8edb 28835 e12900000001000000000000037777770774656c65766261026e6c0000010001 e12980000001000000030002037777770774656c65766261026e6c0000010001c0100002000100015180000a036e733103766261c018c01000020001000151800006036e7332c030c0100002000100015180000b026e73026e6c036e657400c02c00010001000151800004d4883c23c04200010001000151800004c14e4887 28836 316f00000001000000000000036e7332086865696a6d616e73026e6c0000010001 316f80000001000000020002036e7332086865696a6d616e73026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000b086578686175737432c010c02d00010001000151800004c1ad9303c03f00010001000151800004d47b0e91 28837 77a4000000010000000000000b7374617274706167696e61026e6c0000ff0001 77a4800000010000000300030b7374617274706167696e61026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 28838 51530000000100000000000008686f73746e616d650462696e640000100003 51538000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 28839 5d5a0000000100000000000005646e732d31056c61646f74026e6c0000010001 5d5a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28840 e3a80000000100000000000005646e732d32056c61646f74026e6c0000010001 e3a88000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28841 a6400000000100000000000004686f6d65066863636e6574026e6c0000010001 a6408000000100000002000004686f6d65066863636e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c033 28842 cc840000000100000000000003777777046d65746f026e6c0000010001 cc848000000100000002000203777777046d65746f026e6c0000010001c0100002000100015180000a036e733003696270c015c01000020001000151800006036e7331c02dc02900010001000151800004c1ac2d8cc03f00010001000151800004c1ac2d8d 28843 df22000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 df22800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 28844 95d50000000100000000000004736d7470067874646e6574026e6c0000010001 95d58000000100000002000204736d7470067874646e6574026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7331c011c02c00010001000151800004c16e9d02c03d00010001000151800004d9cc165f 28845 446c0000000100000000000004736d7470067874646e6574026e6c00001c0001 446c8000000100000002000204736d7470067874646e6574026e6c00001c0001c01100020001000151800005026e73c011c01100020001000151800006036e7331c011c02c00010001000151800004c16e9d02c03d00010001000151800004d9cc165f 28846 55ef0000000100000000000004736d7470067874646e6574026e6c0000260001 55ef8000000100000002000204736d7470067874646e6574026e6c0000260001c01100020001000151800005026e73c011c01100020001000151800006036e7331c011c02c00010001000151800004c16e9d02c03d00010001000151800004d9cc165f 28847 5d5b000000010000000000000331373202323101310131026e6c0000010001 5d5b840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 28848 314f0000000100000000000005736d747031067874646e6574026e6c0000010001 314f8000000100000002000205736d747031067874646e6574026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7331c012c02d00010001000151800004c16e9d02c03e00010001000151800004d9cc165f 28849 3f4e0000000100000000000005736d747031067874646e6574026e6c00001c0001 3f4e8000000100000002000205736d747031067874646e6574026e6c00001c0001c01200020001000151800005026e73c012c01200020001000151800006036e7331c012c02d00010001000151800004c16e9d02c03e00010001000151800004d9cc165f 28850 321c0000000100000000000005736d747031067874646e6574026e6c0000260001 321c8000000100000002000205736d747031067874646e6574026e6c0000260001c01200020001000151800005026e73c012c01200020001000151800006036e7331c012c02d00010001000151800004c16e9d02c03e00010001000151800004d9cc165f 28851 177b00000001000000000000036e7331067874646e6574026e6c00001c0001 177b80000001000000020002036e7331067874646e6574026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004c16e9d02c00c00010001000151800004d9cc165f 28852 2f9d00000001000000000000036e7331067874646e6574026e6c0000260001 2f9d80000001000000020002036e7331067874646e6574026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004c16e9d02c00c00010001000151800004d9cc165f 28853 944d00000001000000000000026e73067874646e6574026e6c00001c0001 944d80000001000000020002026e73067874646e6574026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 28854 31c400000001000000000000026e73067874646e6574026e6c0000260001 31c480000001000000020002026e73067874646e6574026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 28855 f1560000000100000000000006696d61676573066e6c726f6569026e6c0000010001 f1568000000100000002000206696d61676573066e6c726f6569026e6c0000010001c01300020001000151800012036e73310b696e7465727374726f6f6dc01ac01300020001000151800006036e7332c032c02e0001000100015180000450558121c04c00010001000151800004d58141c4 28856 d9d400000001000000000000047777773203696270026e6c0000010001 d9d480000001000000020002047777773203696270026e6c0000010001c01100020001000151800006036e7330c011c01100020001000151800006036e7331c011c02900010001000151800004c1ac2d8cc03b00010001000151800004c1ac2d8d 28857 0fa90000000100000000000005646e732d31056c61646f74026e6c0000010001 0fa98000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28858 bbca0000000100000000000005646e732d32056c61646f74026e6c0000010001 bbca8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28859 df720000000100000000000009666565737473686f70053234776562026e6c0000010001 df728000000100000002000209666565737473686f70053234776562026e6c0000010001c0160002000100015180000b036e7331046e732d31c01cc01600020001000151800006036e7332c034c030000100010001518000045045a0cdc04700010001000151800004d4cceec8 28860 11070000000100000000000003646e73027972026e6c0000010001 11078000000100000002000003646e73027972026e6c0000010001c0100002000100015180001103646e7307626974626f6f6d036e657400c0100002000100015180000704646e7332c02b 28861 087a0000000100000000000003646e7307626974626f6f6d026e6c0000010001 087a8000000100000002000003646e7307626974626f6f6d026e6c0000010001c0100002000100015180001103646e7307626974626f6f6d036e657400c0100002000100015180000704646e7332c030 28862 ee010000000100000000000005646e732d31056c61646f74026e6c0000010001 ee018000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28863 f16600000001000000000000066368656c6c6f026e6c0000ff0001 f16680000001000000030003066368656c6c6f026e6c0000ff0001c00c00020001000151800007046e733031c00cc00c00020001000151800007046e733032c00cc00c0002000100015180000a036e733103757063c013c02700010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 28864 c3640000000100000000000005646e732d32056c61646f74026e6c0000010001 c3648000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 28865 51bb0000000100000000000010676f6c6663656e7472756d2d62657374026e6c0000010001 51bb8000000100000003000110676f6c6663656e7472756d2d62657374026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc01dc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04fc031000100010001518000043efa0202 28866 411700000001000000000000037777771b736b6976616b616e7469652543322541306f6f7374656e72696a6b0f76616b616e7469652d61616e626f64026e6c0000010001 411780000001000000020000037777771b736b6976616b616e7469652543322541306f6f7374656e72696a6b0f76616b616e7469652d61616e626f64026e6c0000010001c02c00020001000151800011036e733005736572766502636f02756b00c02c00020001000151800010036e7330057365727665036e6574c05d 28867 85fb0000000100000000000003777777136f6e6c696e65736f636365726d616e61676572026e6c0000010001 85fb8000000100000002000203777777136f6e6c696e65736f636365726d616e61676572026e6c0000010001c0100002000100015180000b036e73310470696e65c024c01000020001000151800006036e7332c03cc03800010001000151800004d59c0201c04f00010001000151800004c3c1a303 28868 5b4400000001000000000000026e730678786c696e6b026e6c0000010001 5b4480000001000000030002026e730678786c696e6b026e6c0000010001c00f0002000100015180000f036e73310870726f7365727665c016c00f00020001000151800012036e73320970726f2d736572766502626500c00f00020001000151800006036e7333c02ec02a000100010001518000045054e055c06300010001000151800004d4ccc655 28869 2da200000001000000000000026e730678786c696e6b026e6c0000260001 2da280000001000000030002026e730678786c696e6b026e6c0000260001c00f0002000100015180000f036e73310870726f7365727665c016c00f00020001000151800012036e73320970726f2d736572766502626500c00f00020001000151800006036e7333c02ec02a000100010001518000045054e055c06300010001000151800004d4ccc655 28870 096f28000001000200000000024e4c00000600010d636f6d736572766572323030300541442d4d42024e4c00000500fe000000000000c01400010001000000000004c0a80103 096fa8040000000000000000 28871 d66c000000010000000000000873686f7770696373026e6c0000010001 d66c800000010000000200000873686f7770696373026e6c0000010001c00c0002000100015180000f036e7336086a726f6e6c696e65c015c00c00020001000151800014036e73330d686f73746e656465726c616e64c015 28872 2c4a00000001000000000000046d61696c066368656c6c6f026e6c0000010001 2c4a80000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 28873 887d0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 887d8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28874 26be0000000100000000000002343503313837033135360236340a626c61636b686f6c657307656173796e6574026e6c0000050001 26be8000000100000002000202343503313837033135360236340a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 28875 be3c00000001000000000000037777770e74726f75626c65736174686f6d65026e6c0000010001 be3c80000001000000020002037777770e74726f75626c65736174686f6d65026e6c0000010001c0100002000100015180000a036e7331036e7873c01fc01000020001000151800006036e7332c037c03300010001000151800004d973c015c04900010001000151800004d973c102 28876 8bbc0000000100000000000004736d74700a6d756e74656e68756973026e6c0000010001 8bbc8000000100000002000004736d74700a6d756e74656e68756973026e6c0000010001c01100020001000151800010026e730777697265687562036e657400c01100020001000151800006036e7332c033 28877 a5c700000001000000000000087661636174757265096f7665727a69636874026e6c0000010001 a5c780000001000000030003087661636174757265096f7665727a69636874026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c033000100010001518000043e45a282c045000100010001518000043e45a283c057000100010001518000043e45a284 28878 0dfd000000010000000000000a6f6166686f6c6c616e64026e6c0000ff0001 0dfd800000010000000200000a6f6166686f6c6c616e64026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c017c00c0002000100015180000704686e7331c030 28879 3e3900000001000000000000037777770763686970646972026e6c0000010001 3e3980000001000000020002037777770763686970646972026e6c0000010001c01000020001000151800014036e73310d706f7765727365727665723138c018c01000020001000151800006036e7332c030c02c0001000100015180000451047111c04c0001000100015180000451047112 28880 6b5700000001000000000000037777770763686970646972026e6c0000010001 6b5780000001000000020002037777770763686970646972026e6c0000010001c01000020001000151800014036e73310d706f7765727365727665723138c018c01000020001000151800006036e7332c030c02c0001000100015180000451047111c04c0001000100015180000451047112 28881 2416000000010000000000000375726b026e6c0000ff0001 2416800000010000000200020375726b026e6c0000ff0001c00c0002000100015180000e026e73086d656761706c6578c010c00c00020001000151800006036e7331c027c02400010001000151800004504f6101c03e00010001000151800004504f6102 28882 a6cd000000010000000000000963686576616c696572026e6c00000f0001 a6cd800000010000000200000963686576616c696572026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02e 28883 08570000000100000000000007626c616764656e026e6c00000f0001 08578000000100000002000007626c616764656e026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 28884 19c500000001000000000000026e730368616e026e6c0000010001 19c580000001000000020002026e730368616e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00c00010001000151800004914a670ac03500010001000151800004c0576a65 28885 a9220000000100000000000004736d74700c626172656e74736b72616e73026e6c0000010001 a9228000000100000002000204736d74700c626172656e74736b72616e73026e6c0000010001c0110002000100015180000e036e733007656173796e6574c01ec01100020001000151800006036e7331c036c03200010001000151800004c2a55e01c04c00010001000151800004c2a55e05 28886 c3b700000001000000000000046d61696c0a72656b656e6b616d6572026e6c0000010001 c3b780000001000000020002046d61696c0a72656b656e6b616d6572026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73076b6e6f77617265c01cc03000010001000151800004d4298912c04100010001000151800004c3402003 28887 b918000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 b918800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 28888 1b8a000000010000000000000d6d617269616e2d6f6e6c696e65026e6c0000010001 1b8a840300010000000100000d6d617269616e2d6f6e6c696e65026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 28889 743e0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 743e8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28890 09b400000001000000000000036e7331057669727475026e6c0000010001 09b480000001000000020002036e7331057669727475026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9726102c03800010001000151800004d58141c4 28891 6b6800000001000000000000036e7331057669727475026e6c00001c0001 6b6880000001000000020002036e7331057669727475026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9726102c03800010001000151800004d58141c4 28892 7c7200000001000000000000036e7331057669727475026e6c0000260001 7c7280000001000000020002036e7331057669727475026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9726102c03800010001000151800004d58141c4 28893 82e000000001000000000000036e7332057669727475026e6c0000010001 82e080000001000000020002036e7332057669727475026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d9726102c00c00010001000151800004d58141c4 28894 0fcc00000001000000000000036e7332057669727475026e6c0000260001 0fcc80000001000000020002036e7332057669727475026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d9726102c00c00010001000151800004d58141c4 28895 0000000070024000aeff0000020405b401010402 000080010000000000000000 28896 b63fd61a5010080087590000000000000000 28897 b63fd61a501044704ae90000000000000000 28898 a90e0000000100000000000004726e65740c77616a6f6e40706c616e6574026e6c0000010001 a90e8403000100000001000004726e65740c77616a6f6e40706c616e6574026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 28899 b63fd61a50184470a0020000008f603e000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afc48403c4dc80003000000324e544c4d535350000100000097b208e0050005002d0000000d000d0020000000434f4d5345525645523230303041442d4d420000 28900 ab1b00000001000000000000037777770870616e6f76696577026e6c0000010001 ab1b80000001000000020002037777770870616e6f76696577026e6c0000010001c0100002000100015180000f026e7309656c6d6167726f6570c019c01000020001000151800006036e7331c030c02d00010001000151800004d5880085c04800010001000151800004d5ce5e22 28901 b63fd628501144624a570000000000000000 28902 4d2300000001000000000000066b7562737531036b7562026e6c0000010001 4d2380000001000000030003066b7562737531036b7562026e6c0000010001c01300020001000151800009066b7562737532c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c02b0001000100015180000489380028c00c000100010001518000048938001bc04e00010001000151800004c0576a65 28903 000000007002400083b30000020405b401010402 000080010000000000000000 28904 09b90000000100000000000007626575727a656e036a656d026e6c0000010001 09b98000000100000002000207626575727a656e036a656d026e6c0000010001c0140002000100015180000e036e73310765766964656e74c018c01400020001000151800006036e7332c030c02c00010001000151800004c36d19c4c04600010001000151800004c36d1942 28905 30f300000001000000000000066b7562737532036b7562026e6c0000010001 30f380000001000000030003066b7562737532036b7562026e6c0000010001c01300020001000151800002c00cc01300020001000151800009066b7562737531c013c0130002000100015180000e036e733107737572666e6574c017c00c0001000100015180000489380028c039000100010001518000048938001bc04e00010001000151800004c0576a65 28906 b63fd629501044624a560000000000000000 28907 d1050010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 d1058000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 28908 b6409f8850100800929e0000000000000000 28909 cd4e000000010000000000000a6970353033646463316505737065656406706c616e6574026e6c0000010001 cd4e800000010000000300030a6970353033646463316505737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 28910 b6409f8850104470562e0000000000000000 28911 b6409f885018447052af0000008fbad6000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afc48403c4dc80003000000324e544c4d535350000100000097b208e0050005002d0000000d000d0020000000434f4d5345525645523230303041442d4d420000 28912 0c9c00000001000000000000037777770770617468756973026e6c0000010001 0c9c80000001000000020000037777770770617468756973026e6c0000010001c0100002000100015180000c026e730334756103636f6d00c01000020001000151800006036e7332c02f 28913 992c0000000100000000000007636174636f7270026e6c00000f0001 992c8403000100000001000007636174636f7270026e6c00000f0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 28914 b6409f9650114462559c0000000000000000 28915 02cc0000000100000000000008726f636b6f706e68026e6c00001c0001 02cc8000000100000002000108726f636b6f706e68026e6c00001c0001c00c000200010001518000080570726f7879c00cc00c0002000100015180000d036e7332036b706e036e657400c02900010001000151800004c1ad1f92 28916 c1c7000000010000000000001153616c746f7265696e7465677261746965026e6c00000f0001 c1c7800000010000000200001153616c746f7265696e7465677261746965026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c038 28917 cc96000000010000000000000377777703637362026e6c0000010001 cc96800000010000000200020377777703637362026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c014c01000020001000151800006036e7332c02cc0280001000100015180000450416028c04300010001000151800004c356780c 28918 000000007002400034540000020405b401010402 000080010000000000000000 28919 ad17000000010000000000000a76657273646972656374026e6c00000f0001 ad17800000010000000200000a76657273646972656374026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c02e 28920 fc3d00000001000000000000076e6f746d61696c026e6c00000f0001 fc3d80000001000000020000076e6f746d61696c026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02c 28921 0c62000000010000000000000377777703796573026e6c0000010001 0c62800000010000000300000377777703796573026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c02cc01000020001000151800006036e7333c02c 28922 473f00000001000000000000026e73076e656473746174026e6c0000010001 473f80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 28923 b6409f9750104462559b0000000000000000 28924 b64185ae501008005d180000000000000000 28925 15c100000001000000000000046d61696c127769656c657273706f72746c69657273656e026e6c0000010001 15c180000001000000020000046d61696c127769656c657273706f72746c69657273656e026e6c0000010001c01100020001000151800017036e73310d6465696e7465726e65746d616e036e657400c01100020001000151800006036e7332c03c 28926 f0de00100001000000000001076e696b68656668066e696b686566026e6c00000100010000290800000080000000 f0de80000001000000040003076e696b68656668066e696b686566026e6c0000010001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c7040000291000000000000000 28927 b64185ae5010447020a80000000000000000 28928 8725000000010000000000010f636f6d706172742d74726164696e67026e6c00000100010000291000000000000000 8725800000010000000300030f636f6d706172742d74726164696e67026e6c0000010001c00c0002000100015180000d036e733106776964657873c01cc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa07030000291000000000000000 28929 b64185ae5018447000890000008fd776000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afc48403c4dc80003000000324e544c4d535350000100000097b208e0050005002d0000000d000d0020000000434f4d5345525645523230303041442d4d420000 28930 af3700000001000000000000026e73076e65746c616e64026e6c0000010001 af3780000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 28931 6eb600000001000000000000036e7332076e65746c616e64026e6c0000010001 6eb680000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 28932 e44100000001000000000000036e73330d686f73746e656465726c616e64026e6c0000010001 e44180000001000000030002036e73330d686f73746e656465726c616e64026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 28933 836200000001000000000000037777770374776307737368756e6574026e6c0000010001 836280000001000000030003037777770374776307737368756e6574026e6c0000010001c01400020001000151800006036e6963c014c01400020001000151800008026e73027575c01cc01400020001000151800006036e7332c045c0300001000100015180000483d310d3c0420001000100015180000483d30405c0560001000100015180000483d30406 28934 b64185bc5011446220160000000000000000 28935 3b160000000100000000000003777777076c756e61746963026e6c0000010001 3b168000000100000003000103777777076c756e61746963026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 28936 f0a600000001000000000000037777770b6d79706172747973697465026e6c0000010001 f0a680000001000000020000037777770b6d79706172747973697465026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01cc0100002000100015180000805646e732d32c036 28937 b64185bd5010446220150000000000000000 28938 b37b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 b37b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28939 101b00000001000000000000037777771074726f7577656e2d627275696c6f6674026e6c0000010001 101b80000001000000030003037777771074726f7577656e2d627275696c6f6674026e6c0000010001c0100002000100015180000b04646e733103766970c021c0100002000100015180000704646e7332c03ac0100002000100015180000704646e7333c03ac03500010001000151800004d44fe803c04c00010001000151800004c3f5c782c05f00010001000151800004d44ff303 28940 4f1d00000001000000000000095f6b65726265726f73045f746370026463065f6d73646373065363686f6f6c026e6c0000060001 4f1d80000001000000020001095f6b65726265726f73045f746370026463065f6d73646373065363686f6f6c026e6c0000060001c02500020001000151800015086e732d69736d30310963617067656d696e69c02cc0250002000100015180000b086e732d69736d3032c049c04000010001000151800004d5f4a024 28941 b91a28000001000000010000026e6c0000060001055f6c646170045f746370026463065f6d73646373074f424856534c53026e6c000021000100000258001b00000064018508646330316876736c074f424856534c53026e6c00 b91aa8040000000000000000 28942 9aec00000001000000000000037777770d73656e696f72656e706f726e6f026e6c0000010001 9aec80000001000000020000037777770d73656e696f72656e706f726e6f026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c036 28943 f02100000001000000000000076d61696c2d696e03626f78026e6c0000010001 f02180000001000000020002076d61696c2d696e03626f78026e6c0000010001c0140002000100015180000a07646e732d707269c014c0140002000100015180000a07646e732d736563c014c02c00010001000151800004d97700fac04200010001000151800004d97704fa 28944 57ef000000010000000000000d6d61696c2d66616c6c6261636b03626f78026e6c0000010001 57ef800000010000000200020d6d61696c2d66616c6c6261636b03626f78026e6c0000010001c01a0002000100015180000a07646e732d707269c01ac01a0002000100015180000a07646e732d736563c01ac03200010001000151800004d97700fac04800010001000151800004d97704fa 28945 6bb50000000100000000000007646e732d70726903626f78026e6c0000010001 6bb58000000100000002000207646e732d70726903626f78026e6c0000010001c01400020001000151800002c00cc0140002000100015180000a07646e732d736563c014c00c00010001000151800004d97700fac03a00010001000151800004d97704fa 28946 f6a90000000100000000000007646e732d73656303626f78026e6c0000010001 f6a98000000100000002000207646e732d73656303626f78026e6c0000010001c0140002000100015180000a07646e732d707269c014c01400020001000151800002c00cc02c00010001000151800004d97700fac00c00010001000151800004d97704fa 28947 36de00000001000000000000076d61696c2d696e03626f78026e6c0000010001 36de80000001000000020002076d61696c2d696e03626f78026e6c0000010001c0140002000100015180000a07646e732d707269c014c0140002000100015180000a07646e732d736563c014c02c00010001000151800004d97700fac04200010001000151800004d97704fa 28948 5a41000000010000000000000d6d61696c2d66616c6c6261636b03626f78026e6c0000010001 5a41800000010000000200020d6d61696c2d66616c6c6261636b03626f78026e6c0000010001c01a0002000100015180000a07646e732d707269c01ac01a0002000100015180000a07646e732d736563c01ac03200010001000151800004d97700fac04800010001000151800004d97704fa 28949 000000007002faf0f7cc00000204056401010402 000080010000000000000000 28950 755a00000001000000000000046d61696c0564616e6365026e6c0000010001 755a80000001000000020000046d61696c0564616e6365026e6c0000010001c01100020001000151800011036e73310764697265637435036e657400c01100020001000151800006036e7332c02f 28951 2bdc000000010000000000000b667265656c6f6c69746173026e6c0000010001 2bdc800000010000000300020b667265656c6f6c69746173026e6c0000010001c00c0002000100015180000d036e733106776964657873c018c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 28952 b643986d5010fd5cd3130000000000000000 28953 b643986d5018fd5cc6f90000008e6466000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afda1403c4f2100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 28954 d15400000001000000000000037777770673756d6d6974026e6c0000010001 d15480000001000000030001037777770673756d6d6974026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 28955 a2790000000100000000000005646830373406787334616c6c026e6c0000010001 a2798000000100000003000205646830373406787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 28956 cbf100000001000000000000037777770a7775707065726d616e6e026e6c0000010001 cbf180000001000000020000037777770a7775707065726d616e6e026e6c0000010001c01000020001000151800013026e730761757374726961026575036e657400c01000020001000151800006036e7332c032 28957 cc980000000100000000000003777777116e61706f6c656f6e626f6e617061727465026e6c0000010001 cc988000000100000002000203777777116e61706f6c656f6e626f6e617061727465026e6c0000010001c0100002000100015180000f036e7331086461786973776562c022c01000020001000151800006036e7332c03ac03600010001000151800004c323c083c05100010001000151800004c323c084 28958 b643987b5011fd4ed2820000000000000000 28959 000000007002faf01fca00000204056401010402 000080010000000000000000 28960 b750000000010000000000000666697374697806787334616c6c026e6c0000010001 b750800000010000000300020666697374697806787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 28961 577700000001000000000000046e733032066368656c6c6f026e6c0000010001 577780000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 28962 024328000001000200000000024e4c00000600010e656c7374616c6164616d2d7372760a454c5354414c4144414d024e4c00000500fe000000000000c01400010001000000000004c0a80079 0243a8040000000000000000 28963 127f000000010000000000000665736d656469026e6c00000f0001 127f800000010000000200020665736d656469026e6c00000f0001c00c00020001000151800014036e73310d66617374736f6c7574696f6e73c013c00c00020001000151800006036e7332c02bc0270001000100015180000450f7c2d1c0470001000100015180000450f7c2d2 28964 b643987c5010fd4ed2810000000000000000 28965 b6441ee65010fd5c74970000000000000000 b6449ee40000000000000000 28966 b6441ee65018fd5ccbe40000008e0000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afda2403c4f2200030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 b6449ee40000000000000000 28967 6f3900000001000000000000026e7308767575727765726b026e6c0000010001 6f3980000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 28968 0000000070024000b61d0000020405b401010402 000080010000000000000000 28969 0a4800000001000000000000037777770764616e63657273026e6c0000010001 0a4880000001000000020001037777770764616e63657273026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c018c01000020001000151800006036e7334c030c02c00010001000151800004d5c401c0 28970 b6441ef45011fd4e74060000000000000000 b6449ef40000000000000000 28971 000000007002faf08df200000204056401010402 000080010000000000000000 28972 b645129150104470158b0000000000000000 b64592940000000000000000 28973 4d9d00000001000000000000046d61696c0d67726166697363682d68756973026e6c0000010001 4d9d80000001000000020000046d61696c0d67726166697363682d68756973026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c039 28974 0959000000010000000000000377777707696b6865626a65026e6c0000010001 0959800000010000000300020377777707696b6865626a65026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 28975 b645129150184470ce2a000000975080000000010001000000000f313337343338393533343733382d330000f900010f313337343338393533343733382d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe6403c4d660003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 b64592940000000000000000 28976 d16d0000000100000000000003777777076e756b6f6d6978026e6c0000010001 d16d8000000100000002000003777777076e756b6f6d6978026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 28977 b6441ef55010fd4e74050000000000000000 b6449ef40000000000000000 28978 b645dd1c5010fd5c24880000000000000000 28979 0b4000000001000000000000036e73330767617574656e67026e6c0000010001 0b4080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28980 b645dd1c5018fd5c00410000008e7b94000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afda2403c4f2200030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 28981 b645129f5011446214f10000000000000000 b64592940000000000000000 28982 0000000070024000a3460000020405b401010402 000080010000000000000000 28983 b645dd2a5011fd4e23f70000000000000000 28984 4fc4000000010000000000000b686f6e64656e706c617a61026e6c0000010001 4fc4800000010000000200000b686f6e64656e706c617a61026e6c0000010001c00c00020001000151800017036e73310d6465696e7465726e65746d616e036e657400c00c00020001000151800006036e7332c030 28985 bf9800000001000000000000037777771274696a7373656e732d6f6e646572686f7564026e6c0000010001 bf9880000001000000020000037777771274696a7373656e732d6f6e646572686f7564026e6c0000010001c0100002000100015180001504646e73310a65617379736572766572036e657400c0100002000100015180000704646e7332c03c 28986 60e0000000010000000000000874696a6468756973026e6c00000f0001 60e0840300010000000100000874696a6468756973026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 28987 881700000001000000000000046d61696c06636861726973026e6c0000010001 881780000001000000020000046d61696c06636861726973026e6c0000010001c0110002000100015180000c026e7306766576696461c018c01100020001000151800006036e7332c02f 28988 820100000001000000000000076f6e652d6c616e026e6c00000f0001 820180000001000000020000076f6e652d6c616e026e6c00000f0001c00c0002000100015180000c026e73066863636e6574c014c00c00020001000151800006036e7332c02b 28989 891f0000000100000000000003777777096761797468756d6273026e6c0000010001 891f8000000100000002000203777777096761797468756d6273026e6c0000010001c0100002000100015180000c04646e73310470696e73c01ac0100002000100015180000704646e7332c033c02e00010001000151800004d9c26101c04600010001000151800004d9c26002 28990 b645dd2b5010fd4e23f60000000000000000 28991 d2c10000000100000000000007646f6e61747573026e6c00000f0001 d2c18000000100000002000107646f6e61747573026e6c00000f0001c00c00020001000151800015026e730c737461626c6573747265616d036e657400c00c0002000100015180000d026e730770726f78737973c014c04900010001000151800004d590e30a 28992 db800000000100000000000003777777056172746973026e6c0000010001 db808000000100000002000203777777056172746973026e6c0000010001c0100002000100015180000c026e7306787334616c6cc016c01000020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 28993 b64512a05010446214f00000000000000000 b64592a40000000000000000 28994 b646af605010447065e30000000000000000 28995 74cb00000001000000000000096f6e6465726f732d300364736c0b7669616e6574776f726b73026e6c0000010001 74cb80000001000000020002096f6e6465726f732d300364736c0b7669616e6574776f726b73026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac03a00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 28996 b646af60501844707b4300000097f4c0000000010001000000000f313337343338393533343733382d320000f900010f313337343338393533343733382d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe6403c4d660003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 28997 011900000001000000000000036e73310974656c656b6162656c026e6c0000010001 011980000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 28998 1ba400000001000000000000036e73340767617574656e67026e6c0000010001 1ba480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 28999 6a6e0000000100000000000005646e732d31056c61646f74026e6c0000010001 6a6e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29000 b7a80000000100000000000005646e732d32056c61646f74026e6c0000010001 b7a88000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29001 fa3700000001000000000000076469766974656c026e6c0000ff0001 fa3780000001000000020002076469766974656c026e6c0000ff0001c00c0002000100015180000f036e733108696e7465726d6178c014c00c00020001000151800006036e7332c02cc02800010001000151800004505fa002c04300010001000151800004505fac02 29002 86cb00000001000000000000036e733007656173796e6574026e6c0000010001 86cb80000001000000020002036e733007656173796e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c00010001000151800004c2a55e01c03a00010001000151800004c2a55e05 29003 646d00000001000000000000036e733107656173796e6574026e6c0000010001 646d80000001000000020002036e733107656173796e6574026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c2a55e01c00c00010001000151800004c2a55e05 29004 83dd00000001000000000000037777770563616e646f026e6c0000010001 83dd80000001000000020000037777770563616e646f026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c030 29005 b646af6e5011446265490000000000000000 29006 313100000001000000000000037777770b79656c6c6f772d73746172026e6c0000010001 313180000001000000020001037777770b79656c6c6f772d73746172026e6c0000010001c0100002000100015180000a036e733303777873c01cc01000020001000151800006036e7334c034c04600010001000151800004d5ef9a65 29007 000000007002400061b00000020405b401010402 000080010000000000000000 29008 b646af6f5010446265480000000000000000 29009 b6473a8f50104470991d0000000000000000 b647ba840000000000000000 29010 b6473a8f50184470b9bd00000097e980000000010001000000000f313337343338393533343733382d320000f900010f313337343338393533343733382d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afbe6403c4d660003000000384e544c4d535350000100000097b208e00a000a002e0000000e000e0020000000454c5354414c4144414d2d535256454c5354414c4144414d0000 b647ba840000000000000000 29011 b43500000001000000000000036674700863656e747261616c08626f656b68756973026e6c0000010001 b43580000001000000020000036674700863656e747261616c08626f656b68756973026e6c0000010001c0190002000100015180000b026e73026e6c036e657400c0190002000100015180001206617574683630026e73026e6c027575c03c 29012 c5cb00000001000000000000026e73076e656473746174026e6c0000010001 c5cb80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29013 1d7d00000001000000000000036e7333076e656473746174026e6c0000010001 1d7d80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 29014 efd000000001000000000000056d61696c310869636f6d70616e79026e6c0000010001 efd080000001000000020002056d61696c310869636f6d70616e79026e6c0000010001c0120002000100015180000704646e7331c012c0120002000100015180000704646e7332c012c02f000100010001518000043e3a890ac042000100010001518000043e3a890b 29015 f6e9000000010000000000000763686970706572026e6c00000f0001 f6e9800000010000000200000763686970706572026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 29016 b6473a9d5011446298830000000000000000 b647ba940000000000000000 29017 54cf000000010000000000000a6b72616d6572746a6573026e6c00000f0001 54cf800000010000000200000a6b72616d6572746a6573026e6c00000f0001c00c0002000100015180000f036e7331056d79736d74036e657400c00c00020001000151800006036e7332c02f 29018 8a6000000001000000000000037777770768657477656572026e6c0000010001 8a6080000001000000020002037777770768657477656572026e6c0000010001c0100002000100015180000d04696973310577696e646fc018c01000020001000151800008056969733137c031c02c00010001000151800004d9aa050bc04500010001000151800004d9aa0430 29019 9b3f00000001000000000000037777770a696e7465726b61617274026e6c0000010001 9b3f80000001000000030002037777770a696e7465726b61617274026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 29020 1af70000000100000000000005696431333104776b6170026e6c0000010001 1af78000000100000002000205696431333104776b6170026e6c0000010001c01200020001000151800002c00cc0120002000100015180000e036e733107737572666e6574c017c00c00010001000151800004c0579eeac03900010001000151800004c0576a65 29021 8725000000010000000000000f636f6d706172742d74726164696e67026e6c0000010001 8725800000010000000300020f636f6d706172742d74726164696e67026e6c0000010001c00c0002000100015180000d036e733106776964657873c01cc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 29022 b6473a9e5010446298820000000000000000 b647ba940000000000000000 29023 232628000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d73646373063233435a3030026e6c0000210001000002580016000000640058046e747331063233435a3030026e6c00 2326a8040000000000000000 29024 02d4000000010000000000000f62726162616e7473646167626c6164026e6c0000020001 02d4800000010000000200020f62726162616e7473646167626c6164026e6c0000020001c00c0002000100015180000e036e7331076e657463617374c01cc00c00020001000151800006036e7332c034c03000010001000151800004c2970101c04a00010001000151800004c297012d 29025 ac15001000010000000000010469632d73026e6c00000100010000290800000000000000 ac15800000010000000200010469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 29026 3e720000000100000000000007766462636f6d70026e6c00001c0001 3e728000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 29027 bae300000001000000000000066b6c75776572026e6c00000f0001 bae380000001000000020000066b6c75776572026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02b 29028 59c30000000100000000000007616c6c696e6974026e6c00000f0001 59c38000000100000002000207616c6c696e6974026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 29029 0000000070024000e0620000020405b401010402 000080010000000000000000 29030 77ed00000001000000000000046e7331610b6d6565737465726c696a6b026e6c0000010001 77ed80000001000000030003046e7331610b6d6565737465726c696a6b026e6c0000010001c01100020001000151800007046e733361c011c01100020001000151800007046e733362c011c01100020001000151800007046e733261c011c03100010001000151800004d973ca82c04400010001000151800004d973ca83c05700010001000151800004d973caa5 29031 25b2000000010000000000000a67616d6573657276657206636f6e6e6f72026e6c0000010001 25b2800000010000000200000a67616d6573657276657206636f6e6e6f72026e6c0000010001c0170002000100015180000b026e73026e6c036e657400c0170002000100015180001206617574683630026e73026e6c027575c038 29032 e4a8000000010000000000000776657273696f6e0462696e640000100003 e4a8800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 29033 131900000001000000000000036e7331056132303030026e6c0000010001 131980000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 29034 35c300000001000000000000036e7332056132303030026e6c0000010001 35c380000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 29035 3a280000000100000000000008686f73746e616d650462696e640000100003 3a288000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 29036 b5540000000100000000000004686f6d650b736f6e657261706c617a61026e6c0000010001 b5548000000100000002000004686f6d650b736f6e657261706c617a61026e6c0000010001c01100020001000151800011036e73310774647364617461036e657400c01100020001000151800006036e7332c035 29037 b5c200000001000000000000036e7332076e65746c616e64026e6c0000010001 b5c280000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 29038 630100000001000000000000026e73076e65746c616e64026e6c0000010001 630180000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 29039 0864000000010000000000000469632d73026e6c0000010001 0864800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 29040 cc2500000001000000000000036d78310672656a656374026e6c0000010001 cc2580000001000000020001036d78310672656a656374026e6c0000010001c01000020001000151800011036e733107706c656b6b6965036e657400c0100002000100015180000e036e7331076e6572646e6574c017c04800010001000151800004d9aa0f01 29041 529600000001000000000000036d78320672656a656374026e6c0000010001 529680000001000000020001036d78320672656a656374026e6c0000010001c01000020001000151800011036e733107706c656b6b6965036e657400c0100002000100015180000e036e7331076e6572646e6574c017c04800010001000151800004d9aa0f01 29042 cb3500000001000000000000036d78320672656a656374026e6c00001c0001 cb3580000001000000020001036d78320672656a656374026e6c00001c0001c01000020001000151800011036e733107706c656b6b6965036e657400c0100002000100015180000e036e7331076e6572646e6574c017c04800010001000151800004d9aa0f01 29043 8b7c00000001000000000000036d78310672656a656374026e6c0000260001 8b7c80000001000000020001036d78310672656a656374026e6c0000260001c01000020001000151800011036e733107706c656b6b6965036e657400c0100002000100015180000e036e7331076e6572646e6574c017c04800010001000151800004d9aa0f01 29044 b6498c2050104470c63c0000000000000000 29045 452700000001000000000000077465616d303037026e6c0000010001 452780000001000000020001077465616d303037026e6c0000010001c00c0002000100015180000a036e733303777873c014c00c00020001000151800006036e7334c02cc03e00010001000151800004d5ef9a65 29046 805000000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 805080000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 29047 b6498c2050184470e776000000893428000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefc403c507c00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000 29048 d7a7000000010000000000000377777706776964657873026e6c0000010001 d7a7800000010000000300020377777706776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c02b00010001000151800004d4ccc0fcc059000100010001518000043efa0703 29049 0591000000010000000000000363636e026e6c00000f0001 0591800000010000000200020363636e026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 29050 1f600000000100000000000009776565726b616d6572026e6c0000010001 1f608000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 29051 a84300000001000000000001036e733103757063026e6c00001c00010000291000000000000000 a84380000001000000030004036e733103757063026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 29052 c74600000001000000000001036e733103757063026e6c00002600010000291000000000000000 c74680000001000000030004036e733103757063026e6c0000260001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 29053 4e7500000001000000000001046e733032066368656c6c6f026e6c00001c00010000291000000000000000 4e7580000001000000030004046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 29054 778a000000010000000000000661746c616e74026e6c0000010001 778a800000010000000200000661746c616e74026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c032 29055 b6498c2e50114462c5b00000000000000000 29056 500c00000001000000000000026e730763697374726f6e026e6c0000010001 500c80000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 29057 280600000001000000000000036e73320763697374726f6e026e6c0000010001 280680000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 29058 0000000070024000ad0d0000020405b401010402 000080010000000000000000 29059 a8300000000100000000000005646973636b026e6c00000f0001 a8308000000100000002000005646973636b026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c012c00c0002000100015180000704686e7331c02b 29060 9389000000010000000000000377777713666f6e74616e616e6965757765736368616e73026e6c0000010001 9389800000010000000200000377777713666f6e74616e616e6965757765736368616e73026e6c0000010001c01000020001000151800018036e73310e6974636f6e737472756374696f6e03636f6d00c01000020001000151800006036e7332c03c 29061 550900000001000000000000037777770f657373656e74687569737374696a6c026e6c0000010001 550980000001000000020002037777770f657373656e74687569737374696a6c026e6c0000010001c0100002000100015180000d036e73310663617374656cc020c01000020001000151800006036e7332c038c03400010001000151800004c3558244c04d00010001000151800004c3558245 29062 b6498c2f50104462c5af0000000000000000 29063 b64a5b3a50104470c3cc0000000000000000 b64adb340000000000000000 29064 3f2500000001000000000000037777770a67616d65737175617265026e6c0000010001 3f2580000001000000020002037777770a67616d65737175617265026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 29065 48b000000001000000000000036e7332046a617a65026e6c0000010001 48b080000001000000020000036e7332046a617a65026e6c0000010001c0100002000100015180000e036e7331046a617a65036e657400c01000020001000151800006036e7332c02d 29066 df22000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 df22800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 29067 b64a5b3a50184470cb9f000000894e90000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefc403c507c00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000 b64adb340000000000000000 29068 cbd600000001000000000000137061636b657473746f726d7365637572697479026e6c0000010001 cbd680000001000000030002137061636b657473746f726d7365637572697479026e6c0000010001c00c0002000100015180000d036e733106776964657873c020c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c038c03400010001000151800004d4ccc0fcc069000100010001518000043efa0703 29069 802800000001000000000000037777770b6b617474656e7072616174026e6c0000010001 802880000001000000030000037777770b6b617474656e7072616174026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c038c0100002000100015180000a076e73686f737433c038 29070 8f930000000100000000000004686f6d6503777873026e6c0000010001 8f938000000100000003000304686f6d6503777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 29071 b5fc00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 b5fc80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29072 422c00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 422c80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29073 79030000000100000000000004736d74700362636d026e6c0000010001 79038000000100000002000204736d74700362636d026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c015c01100020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 29074 a84300000001000000000000036e733103757063026e6c00001c0001 a84380000001000000030003036e733103757063026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 29075 26ba00000001000000000000046d61696c066368656c6c6f026e6c0000010001 26ba80000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 29076 a08d00000001000000000000046d61696c066368656c6c6f026e6c00001c0001 a08d80000001000000030003046d61696c066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 29077 a18400000001000000000000046d61696c066368656c6c6f026e6c0000260001 a18480000001000000030003046d61696c066368656c6c6f026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 29078 7e4f00000001000000000000036e733103757063026e6c00001c0001 7e4f80000001000000030003036e733103757063026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 29079 c74600000001000000000000036e733103757063026e6c0000260001 c74680000001000000030003036e733103757063026e6c0000260001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 29080 4e7500000001000000000000046e733032066368656c6c6f026e6c00001c0001 4e7580000001000000030003046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 29081 851f00000001000000000000046d61696c066368656c6c6f026e6c0000010001 851f80000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 29082 b64a5b4850114462c3400000000000000000 b64adb440000000000000000 29083 eb780000000100000000000007666670726f303103616b6e026e6c0000010001 eb788000000100000002000207666670726f303103616b6e026e6c0000010001c01400020001000151800010066d696e6e6965066f6d726f6570c018c0140002000100015180000805726f62696ec033c02c00010001000151800004913a1e04c04800010001000151800004913a1a34 29084 000000007002400026120000020405b401010402 000080010000000000000000 29085 1870000000010000000000000f686c2d61737375726164657572656e026e6c00000f0001 1870800000010000000200000f686c2d61737375726164657572656e026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c033 29086 03bb00000001000000000000036e73330767617574656e67026e6c0000010001 03bb80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29087 20d200000001000000000000046d61696c0d6d616b656c6161727a77617274026e6c0000010001 20d280000001000000020000046d61696c0d6d616b656c6161727a77617274026e6c0000010001c0110002000100015180000e05646e732d31056c61646f74c01fc0110002000100015180000805646e732d32c039 29088 13400000000100000000000005646e732d31056c61646f74026e6c0000010001 13408000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29089 3d6b0000000100000000000005646e732d32056c61646f74026e6c0000010001 3d6b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29090 b64a5b4950104462c33f0000000000000000 b64adb440000000000000000 29091 150e00000001000000000000036e733110636173652d656c656b74726f6e696373026e6c00001c0001 150e80000001000000020002036e733110636173652d656c656b74726f6e696373026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cceb4fc04300010001000151800004d4cceb50 29092 dea600000001000000000000036e733110636173652d656c656b74726f6e696373026e6c0000260001 dea680000001000000020002036e733110636173652d656c656b74726f6e696373026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cceb4fc04300010001000151800004d4cceb50 29093 421200000001000000000000036e733210636173652d656c656b74726f6e696373026e6c00001c0001 421280000001000000020002036e733210636173652d656c656b74726f6e696373026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03500010001000151800004d4cceb4fc00c00010001000151800004d4cceb50 29094 b64b06c050104470914a0000000000000000 b64b80010000000000000000 29095 8b4500000001000000000000046d61696c10626f657376656c642d76616e616c7374026e6c0000010001 8b4580000001000000020000046d61696c10626f657376656c642d76616e616c7374026e6c0000010001c01100020001000151800011026e730b642d6372656174696f6e73c022c01100020001000151800006036e7332c039 29096 b64b06c050184470367d00000089b130000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefc403c507c00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000 b64b80010000000000000000 29097 7e5700000001000000000000046d61696c0965696e64686f76656e026e6c0000010001 7e5780000001000000020002046d61696c0965696e64686f76656e026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c01bc01100020001000151800006036e7332c033c02f00010001000151800004d43d0f08c04d00010001000151800004d43d19e2 29098 60cf00000001000000000000037777770968756d6f7263617368026e6c0000010001 60cf80000001000000030003037777770968756d6f7263617368026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 29099 add70000000100000000000005737461747306776562636174026e6c0000010001 add78000000100000003000205737461747306776562636174026e6c0000010001c0120002000100015180000d036e733106776964657873c019c01200020001000151800010036e733206776964657873036e657400c01200020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 29100 f74b000000010000000000000377777709656e7465727465656e026e6c0000010001 f74b800000010000000300020377777709656e7465727465656e026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01ac01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c032c02e000100010001518000045054e055c06700010001000151800004d4ccc655 29101 b64b06ce5011446290be0000000000000000 b64b80010000000000000000 29102 7e5c00000001000000000000026e73076e656473746174026e6c0000010001 7e5c80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29103 b2c7000000010000000000000631326d6f7665026e6c0000010001 b2c7800000010000000300020631326d6f7665026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 29104 09d6000000010000000000000276330a646d64656c6976657279026e6c0000010001 09d6800000010000000200000276330a646d64656c6976657279026e6c0000010001c00f00020001000151800010036e73310673697465347503636f6d00c00f00020001000151800006036e7332c032 29105 17ee00000001000000000000037777770c636f322d6465746563746f72026e6c0000010001 17ee80000001000000030003037777770c636f322d6465746563746f72026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c01dc0100002000100015180000e0b6e616d6573657276657232c03dc0100002000100015180000e0b6e616d6573657276657233c03dc0310001000100015180000451ad2020c0550001000100015180000451ad2021c06f0001000100015180000452c049aa 29106 b64b06cf5010446290bd0000000000000000 b64b80010000000000000000 29107 ccbb000000010000000000000876616e6b75696a6b026e6c0000010001 ccbb800000010000000200020876616e6b75696a6b026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 29108 d30700000001000000000000036e73310d6d74622d736f6c7574696f6e73026e6c0000010001 d30780000001000000020002036e73310d6d74622d736f6c7574696f6e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852719c04000010001000151800004d5852714 29109 21f500000001000000000000036e73320d6d74622d736f6c7574696f6e73026e6c0000010001 21f580000001000000020002036e73320d6d74622d736f6c7574696f6e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d5852719c00c00010001000151800004d5852714 29110 731400000001000000000000086573636170616465026e6c00000f0001 731480000001000000030002086573636170616465026e6c00000f0001c00c0002000100015180000d036e733106776964657873c015c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 29111 f77c00000001000000000000036e733104686f6d65026e6c0000010001 f77c80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 29112 eaaf00100001000000000001036e7331056132303030026e6c00000100010000290800000080000000 eaaf80000001000000030003036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 29113 5bbb00100001000000000001036e7331056132303030026e6c00002600010000290800000080000000 5bbb80000001000000030003036e7331056132303030026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 29114 819a00000001000000000000056d61676978026e6c0000010001 819a80000001000000030001056d61676978026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 29115 667700100001000000000001036e7332056132303030026e6c00000100010000290800000080000000 667780000001000000030003036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 29116 4b1c00100001000000000001036e7332056132303030026e6c00002600010000290800000080000000 4b1c80000001000000030003036e7332056132303030026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 29117 0bcd00000001000000000000036e73330767617574656e67026e6c0000010001 0bcd80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29118 f9d7000000010000000000000d6762626175746f6d6174696f6e026e6c00000f0001 f9d7800000010000000300010d6762626175746f6d6174696f6e026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01ac00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04cc02e000100010001518000043efa0202 29119 6320000000010000000000000469632d73026e6c0000ff0001 6320800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 29120 5834000000010000000000000563696e64790c616374697665646f6d61696e026e6c0000010001 5834800000010000000300000563696e64790c616374697665646f6d61696e026e6c0000010001c01200020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01200020001000151800006036e7332c037c01200020001000151800006036e7333c037 29121 583500000001000000000000076e65656c746a650c616374697665646f6d61696e026e6c0000010001 583580000001000000030000076e65656c746a650c616374697665646f6d61696e026e6c0000010001c01400020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01400020001000151800006036e7332c039c01400020001000151800006036e7333c039 29122 b02900000001000000000000037777770773756273697465026e6c0000010001 b02980000001000000020002037777770773756273697465026e6c0000010001c01000020001000151800009036e7331026973c018c01000020001000151800006036e7332c030c02c00010001000151800004d5852102c04100010001000151800004d5c41503 29123 b067000000010000000000000575736572730872616b65746e6574026e6c0000010001 b067800000010000000200020575736572730872616b65746e6574026e6c0000010001c0120002000100015180001103646e730a636f6e63657074736661c01bc0120002000100015180001004646e733208636f6e6365707473c01bc02f00010001000151800004d5c51c03c04c00010001000151800004d5c51e1c 29124 232b28000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573063233435a3030026e6c0000210001000002580016000000640185046e747331063233435a3030026e6c00 232ba8040000000000000000 29125 c1b700100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 c1b780000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 29126 eeba00100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 eeba80000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 29127 583f000000010000000000000563696e64790c616374697665646f6d61696e026e6c0000010001 583f800000010000000300000563696e64790c616374697665646f6d61696e026e6c0000010001c01200020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01200020001000151800006036e7332c037c01200020001000151800006036e7333c037 29128 14c500000001000000000000036e7331076e6564636f6d70026e6c0000010001 14c580000001000000020001036e7331076e6564636f6d70026e6c0000010001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1a80d 29129 584000000001000000000000076e65656c746a650c616374697665646f6d61696e026e6c0000010001 584080000001000000030000076e65656c746a650c616374697665646f6d61696e026e6c0000010001c01400020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01400020001000151800006036e7332c039c01400020001000151800006036e7333c039 29130 186e0000000100000000000006736d7470303603777873026e6c00000f000100 186e8000000100000003000306736d7470303603777873026e6c00000f0001c01300020001000151800007046e733038c013c01300020001000151800007046e733039c013c01300020001000151800006036e7334c013c02b00010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 29131 da8400000001000000000000037777770a656c746a6f68616e6e61026e6c0000010001 da8480000001000000020000037777770a656c746a6f68616e6e61026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 29132 c79028000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730d7363686f636b5f726962656d61026e6c000021000100000258002200000064005809726962656d612d6e6c0d7363686f636b5f726962656d61026e6c00 c790a8040000000000000000 29133 1d200000000100000000000006636861726973026e6c00000f0001 1d208000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29134 6d8300000001000000000000036e7331056132303030026e6c0000010001 6d8380000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 29135 91b300000001000000000000036e7331056132303030026e6c0000260001 91b380000001000000030002036e7331056132303030026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 29136 0f5000000001000000000000036e7332056132303030026e6c0000010001 0f5080000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 29137 43f100000001000000000000036e7332056132303030026e6c0000260001 43f180000001000000030002036e7332056132303030026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 29138 3e9b0000000100000000000002743107712d7374617473026e6c0000010001 3e9b8000000100000002000202743107712d7374617473026e6c0000010001c00f0002000100015180000a036e7331036e7873c017c00f00020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 29139 000000007002400028290000020405b401010402 000080010000000000000000 29140 93bd000000010000000000000656525a3537370742432d4856433403424334026e6c0000060001 93bd800000010000000200020656525a3537370742432d4856433403424334026e6c0000060001c01b0002000100015180001a036e733113736d616c6c686f6c642d686f7374696e672d34c01fc01b00020001000151800006036e7332c037c033000100010001518000045054ed82c059000100010001518000045054ed83 29141 42fb000000010000000000000a7265736572766572656e06627564676574026e6c0000010001 42fb800000010000000200020a7265736572766572656e06627564676574026e6c0000010001c017000200010001518000140d7372726463303134646d7a303403726463c01ec017000200010001518000100d7372726463303132646d7a3033c040c03200010001000151800004d973e064c05200010001000151800004d973e054 29142 0ef8000000010000000000000377777707736d6172746563026e6c0000010001 0ef8800000010000000300030377777707736d6172746563026e6c0000010001c01000020001000151800010036e733109736974656279746573c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004c2a55e5ac04800010001000151800004c356781cc05a000100010001518000043ec58016 29143 0000000070024000d1f10000020405b401010402 000080010000000000000000 29144 06f5000000010000000000000d5352524443303132444d5a303303726463026e6c00001c0001 06f5800000010000000200020d5352524443303132444d5a303303726463026e6c00001c0001c01a000200010001518000100d7372726463303134646d7a3034c01ac01a00020001000151800002c00cc03200010001000151800004d973e064c00c00010001000151800004d973e054 29145 e477000000010000000000000d5352524443303134444d5a303403726463026e6c00001c0001 e477800000010000000200020d5352524443303134444d5a303403726463026e6c00001c0001c01a00020001000151800002c00cc01a000200010001518000100d7372726463303132646d7a3033c01ac00c00010001000151800004d973e064c04000010001000151800004d973e054 29146 57370000000100000000000003777777066d6f7070656e026e6c0000010001 57378000000100000002000203777777066d6f7070656e026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 29147 13fa00000001000000000000036e733113736d616c6c686f6c642d686f7374696e672d34026e6c0000010001 13fa80000001000000020002036e733113736d616c6c686f6c642d686f7374696e672d34026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054ed82c046000100010001518000045054ed83 29148 a6b50000000100000000000005726f6d656f066f6e6c696e65026f32026e6c0000010001 a6b58000000100000002000205726f6d656f066f6e6c696e65026f32026e6c0000010001c0190002000100015180000d026e73076e65746c616e64c01cc01900020001000151800006036e7332c033c03000010001000151800004d9aa2042c04900010001000151800004d9aa2c06 29149 b64dd61350104470c40b0000000000000000 29150 1ad400000001000000000000037777770a7765726b74756967656e026e6c0000010001 1ad480000001000000020002037777770a7765726b74756967656e026e6c0000010001c0100002000100015180000a036e733103686978c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5a0da0ac0450001000100015180000451112ec3 29151 30d2000000010000000000000772696a6163636f026e6c00000f0001 30d2800000010000000200000772696a6163636f026e6c00000f0001c00c00020001000151800019036e73310f6c696e6b67696473686f7374696e67036e657400c00c00020001000151800006036e7332c02c 29152 b64ea29c50104470a14a0000000000000000 29153 b64ea29c501844707cb60000009574fc000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000 29154 b64dd61350184470dab1000000893cbc000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefd403c507d00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000 29155 705000000001000000000000037777770b647574636867686f737473026e6c0000010001 705080000001000000020002037777770b647574636867686f737473026e6c0000010001c0100002000100015180000a036e7331036e7873c01cc01000020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 29156 c09e0000000100000000000004656469740867616d65732d6f6e026e6c0000010001 c09e8000000100000002000204656469740867616d65732d6f6e026e6c0000010001c0110002000100015180000a036e7331036e7873c01ac01100020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 29157 b64ea2aa50114462a0b20000000000000000 29158 3f5a00000001000000000000026e7306766576696461026e6c0000010001 3f5a80000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 29159 00000000700240008bd00000020405b401010402 000080010000000000000000 29160 b64dd62150114462c37f0000000000000000 29161 f86f00000001000000000000076e696b68656668066e696b686566026e6c0000010001 f86f80000001000000040002076e696b68656668066e696b686566026e6c0000010001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c704 29162 294200000001000000000000037777771274656c65636f6d76657267656c696a6b6572026e6c0000010001 294280000001000000020002037777771274656c65636f6d76657267656c696a6b6572026e6c0000010001c0100002000100015180000a036e7331036e7873c023c01000020001000151800006036e7332c03bc03700010001000151800004d973c015c04d00010001000151800004d973c102 29163 0000000070024000031c0000020405b401010402 000080010000000000000000 29164 605200000001000000000000026e730b6973642d686f6c6c616e64026e6c0000010001 605280000001000000020002026e730b6973642d686f6c6c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 29165 0f5900000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000010001 0f5980000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 29166 cc2d0000000100000000000006787334616c6c026e6c0000010001 cc2d8000000100000003000206787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 29167 b64ea2ab50104462a0b10000000000000000 29168 b64f4bce50104470b1f60000000000000000 b64fcbc40000000000000000 29169 b64f4bce50184470dc7f0000009526e0000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000 b64fcbc40000000000000000 29170 8d3f001000010000000000010c47454c4445524d414c53454e0867656d65656e74650c67656c6465726d616c73656e026e6c00000100010000290800000080000000 8d3f800000010000000200030c47454c4445524d414c53454e0867656d65656e74650c67656c6465726d616c73656e026e6c0000010001c02200020001000151800005026e73c022c02200020001000151800006036e7332c022c04300010001000151800004c143b9b5c05400010001000151800004c143b9b60000291000000000000000 29171 5e6100000001000000000000037777770a7a65726562696c6c656e026e6c0000010001 5e6180000001000000020000037777770a7a65726562696c6c656e026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 29172 f5250000000100000000000003626c3402626c06787334616c6c026e6c0000010001 f5258000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29173 b64dd62250104462c37e0000000000000000 29174 040b00000001000000000000116672616e6b656e656e76616e7765657274026e6c00000f000100 040b84030001000000010000116672616e6b656e656e76616e7765657274026e6c00000f0001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 29175 b64fffa85010447075670000000000000000 29176 50bd00000001000000000000026e73076e656473746174026e6c0000010001 50bd80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29177 4d5400000001000000000000036e7332076e656473746174026e6c0000010001 4d5480000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29178 5d4f00000001000000000000036e7333076e656473746174026e6c0000010001 5d4f80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 29179 84ec00000001000000000000036e7334076e656473746174026e6c0000010001 84ec80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29180 5d5e00000001000000000000037777770b7477656576616e64616167026e6c0000010001 5d5e80000001000000020002037777770b7477656576616e64616167026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c01cc0100002000100015180000805726f62696ec037c03000010001000151800004913a1e04c04c00010001000151800004913a1a34 29181 c23800000001000000000000036e733206736f6c636f6e026e6c0000010001 c23880000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 29182 0d5900000001000000000000036e733106736f6c636f6e026e6c0000010001 0d5980000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 29183 611c0000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 611c8000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 29184 b64f4bdc50114462b15e0000000000000000 b64fcbd40000000000000000 29185 50ac0000000100000000000003706f7006706c616e6574026e6c0000010001 50ac8000000100000003000303706f7006706c616e6574026e6c0000010001c0100002000100015180000b046e73303803777873c017c01000020001000151800007046e733039c030c01000020001000151800006036e7334c030c02b00010001000151800004c3790128c04200010001000151800004c3790143c05500010001000151800004d5ef9a65 29186 000000007002400091e30000020405b401010402 000080010000000000000000 29187 7d4100000001000000000000046d61696c09746f7461616c666974026e6c0000010001 7d4180000001000000020000046d61696c09746f7461616c666974026e6c0000010001c01100020001000151800013036e7331076c697665646e7302636f02756b00c01100020001000151800006036e7332c033 29188 f88000000001000000000000046d61696c0864756262656c2d6d026e6c0000010001 f88080000001000000020002046d61696c0864756262656c2d6d026e6c0000010001c0110002000100015180000c036e7331053266617374c01ac01100020001000151800006036e7332c032c02e0001000100015180000450f7c022c046000100010001518000043e858122 29189 389d00000001000000000000037777770b636f6d70752d7472616465026e6c0000010001 389d80000001000000020002037777770b636f6d70752d7472616465026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 29190 46b40000000100000000000003777777086c65747373746174026e6c0000010001 46b48000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 29191 23c500000001000000000000046b61626b026e6c00000f0001 23c580000001000000020000046b61626b026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 29192 d05700000001000000000000037777770b686f75726f66706f776572026e6c0000010001 d05780000001000000020002037777770b686f75726f66706f776572026e6c0000010001c0100002000100015180000e036e73310768656262697a7ac01cc01000020001000151800006036e7332c034c03000010001000151800004c372eb42c04a000100010001518000043e320e91 29193 b64fffa8501844702a6e000000899f5c000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefd403c507d00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000 29194 6e6b00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 6e6b80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29195 b64f4bdd50104462b15d0000000000000000 b64fcbd40000000000000000 29196 58aa0000000100000000000009746f646f6d756e646f026e6c00001c0001 58aa8000000100000003000009746f646f6d756e646f026e6c00001c0001c00c0002000100015180000f036e73310570616e7361036e657400c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02e 29197 b6509596501044706e400000000000000000 29198 b65095965018447032c5000000958ce4000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000 29199 2c2800000001000000000000097261696e7374617272026e6c00000f0001 2c2880000001000000030000097261696e7374617272026e6c00000f0001c00c00020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02e 29200 8a2200000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000010001 8a2280000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 29201 1a1200000001000000000000037777770c706965742d7a6f6f6d657273026e6c0000010001 1a1280000001000000030001037777770c706965742d7a6f6f6d657273026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01dc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04fc031000100010001518000043efa0202 29202 cc52000000010000000000000866616c6c6261636b046b61626b026e6c0000010001 cc52800000010000000200000866616c6c6261636b046b61626b026e6c0000010001c0150002000100015180000b026e73026e6c036e657400c0150002000100015180001206617574683630026e73026e6c027575c034 29203 b64fffb65011446274db0000000000000000 29204 159e000000010000000000000577326b6333066e7434616c6c026e6c0000010001 159e800000010000000200020577326b6333066e7434616c6c026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000d036e733206787334616c6cc019c02d00010001000151800004c26d3402c03e00010001000151800004c26d0963 29205 0000000070024000c1350000020405b401010402 000080010000000000000000 29206 b65095a4501144626da80000000000000000 29207 80d1000000010000000000000377777711776573746572776f6c64656e6965757773026e6c0000010001 80d1800000010000000200000377777711776573746572776f6c64656e6965757773026e6c0000010001c01000020001000151800012036e73310b696e7465722d63616e616cc022c01000020001000151800006036e7332c03a 29208 e06b00000001000000000000036e73310b696e7465722d63616e616c026e6c0000010001 e06b80000001000000030002036e73310b696e7465722d63616e616c026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 29209 c79328000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730d7363686f636b5f726962656d61026e6c000021000100000258002200000064018509726962656d612d6e6c0d7363686f636b5f726962656d61026e6c00 c793a8040000000000000000 29210 982d0000000100000000000003444f4f024e4c00000f0001 982d8000000100000003000303444f4f024e4c00000f0001c00c000200010001518000160967616e796d6564657309726f7474657264616dc010c00c00020001000151800007046c656461c02ec00c00020001000151800014036e733203676e7309676574726f6e696373c010c02400010001000151800004d5c9cf50c04600010001000151800004d5c9cf19c05900010001000151800004910d2a05 29211 2df3000000010000000000000672656c6179310b7669616e6574776f726b73026e6c0000010001 2df3800000010000000200020672656c6179310b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 29212 c3b2000000010000000000000672656c6179310b7669616e6574776f726b73026e6c00001c0001 c3b2800000010000000200020672656c6179310b7669616e6574776f726b73026e6c00001c0001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 29213 abd5000000010000000000000672656c6179320b7669616e6574776f726b73026e6c0000010001 abd5800000010000000200020672656c6179320b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 29214 172f000000010000000000000672656c6179320b7669616e6574776f726b73026e6c00001c0001 172f800000010000000200020672656c6179320b7669616e6574776f726b73026e6c00001c0001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 29215 00e70000000100000000000005717565756503696165026e6c0000010001 00e78000000100000002000205717565756503696165026e6c0000010001c01200020001000151800012036e73310b7669616e6574776f726b73c016c01200020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 29216 6d780000000100000000000005717565756503696165026e6c00001c0001 6d788000000100000002000205717565756503696165026e6c00001c0001c01200020001000151800012036e73310b7669616e6574776f726b73c016c01200020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 29217 973900000001000000000000036e73310b7669616e6574776f726b73026e6c00001c0001 973980000001000000020002036e73310b7669616e6574776f726b73026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 29218 8d6200000001000000000000036e73320b7669616e6574776f726b73026e6c00001c0001 8d6280000001000000020002036e73320b7669616e6574776f726b73026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 29219 c4c80000000100000000000005717565756503696165026e6c0000010001 c4c88000000100000002000205717565756503696165026e6c0000010001c01200020001000151800012036e73310b7669616e6574776f726b73c016c01200020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 29220 b65095a5501044626da70000000000000000 29221 13d000000001000000000000036e73340767617574656e67026e6c0000010001 13d080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29222 ccd100000001000000000000036e733103697870026e6c0000260001 ccd180000001000000020002036e733103697870026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d943e639c036000100010001518000043efa063f 29223 b64fffb75010446274da0000000000000000 29224 086b000000010000000000000664757061636f026e6c00001c0001 086b800000010000000200010664757061636f026e6c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c02700010001000151800004d586fa2b 29225 b651696f50104470c9b80000000000000000 b651e9640000000000000000 29226 66b500000001000000000000096d6f6e74666f6f7274026e6c00001c0001 66b580000001000000020002096d6f6e74666f6f7274026e6c00001c0001c00c0002000100015180000e026e73086d656761706c6578c016c00c00020001000151800006036e7331c02dc02a00010001000151800004504f6101c04400010001000151800004504f6102 29227 00000000700240006ba70000020405b401010402 000080010000000000000000 29228 0f7d0000000100000000000005646e732d31056c61646f74026e6c0000010001 0f7d8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29229 aa240000000100000000000005646e732d32056c61646f74026e6c0000010001 aa248000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29230 b651696f501844701c200000008901fc000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afefd403c507d00030000002a4e544c4d535350000100000097b208e0060006002400000004000400200000004e5453313233435a30300000 b651e9640000000000000000 29231 383000000001000000000000026e730c696e746572636f6e6e656374026e6c0000010001 383080000001000000030003026e730c696e746572636f6e6e656374026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004d453c005c03e00010001000151800004d453c006c05000010001000151800004d453c805 29232 75c300000001000000000000036e73320c696e746572636f6e6e656374026e6c0000010001 75c380000001000000030003036e73320c696e746572636f6e6e656374026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03100010001000151800004d453c005c00c00010001000151800004d453c006c05000010001000151800004d453c805 29233 b652266c50104470b72c0000000000000000 b652a6630000000000000000 29234 a865000000010000000000000575776e6574026e6c0000010001 a865800000010000000200020575776e6574026e6c0000010001c00c00020001000151800011026e730b6973642d686f6c6c616e64c012c00c00020001000151800006036e7332c029c02600010001000151800004d5e38d0ac04300010001000151800004d5e38205 29235 5c4800000001000000000000034e5332084845584f4e2d4953024e4c0000010001 5c4880000001000000020002034e5332084845584f4e2d4953024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d58527cbc00c00010001000151800004d4ccdb5b 29236 5c4900000001000000000000034e5331084845584f4e2d4953024e4c0000010001 5c4980000001000000020002034e5331084845584f4e2d4953024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d58527cbc03b00010001000151800004d4ccdb5b 29237 ab9400000001000000000000026e73076e656473746174026e6c0000010001 ab9480000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29238 55ca00000001000000000000036e7333076e656473746174026e6c0000010001 55ca80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 29239 b652266c50184470065900000095013c000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000 b652a6630000000000000000 29240 608f000000010000000000000377777709687964726f6e2d6d6e026e6c0000010001 608f800000010000000200020377777709687964726f6e2d6d6e026e6c0000010001c0100002000100015180000c036e73310563736e6574c01ac01000020001000151800006036e7332c032c02e00010001000151800004c2451012c04600010001000151800004c2451212 29241 1223000000010000000000000762616e6e65727303696d73026e6c0000010001 1223800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 29242 4e820000000100000000000005646e732d31056c61646f74026e6c0000010001 4e828000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29243 172f0000000100000000000005646e732d32056c61646f74026e6c0000010001 172f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29244 d85800000001000000000000036e733103727567026e6c0000010001 d85880000001000000030003036e733103727567026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004817d0406c03600010001000151800004817d040dc04800010001000151800004c0576a65 29245 6ccb00000001000000000000036e733203727567026e6c0000010001 6ccb80000001000000030003036e733203727567026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004817d0406c00c00010001000151800004817d040dc04800010001000151800004c0576a65 29246 ed3e00000001000000000000036e733403777873026e6c00001c0001 ed3e80000001000000030003036e733403777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 29247 f69f00000001000000000000036e733403777873026e6c0000260001 f69f80000001000000030003036e733403777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 29248 030800000001000000000000046e73303803777873026e6c00001c0001 030880000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 29249 818400000001000000000000046e73303803777873026e6c0000260001 818480000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 29250 b651697d50114462c92c0000000000000000 b651e9740000000000000000 29251 b652267a50114462b6940000000000000000 b652a6730000000000000000 29252 8eb30000000100000000000003777777126772617469736e65756b706c6161746a6573026e6c0000010001 8eb38000000100000002000003777777126772617469736e65756b706c6161746a6573026e6c0000010001c01000020001000151800012036e7335087a6f6e656564697403636f6d00c01000020001000151800007046e733134c03b 29253 c0c200000001000000000000046e73303903777873026e6c00001c0001 c0c280000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 29254 307400000001000000000000046e73303903777873026e6c0000260001 307480000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 29255 4c3800000001000000000000036e733303777873026e6c0000010001 4c3880000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 29256 261c00000001000000000000036e733303777873026e6c00001c0001 261c80000001000000030003036e733303777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 29257 bfa200000001000000000000037777770d73746170656c6f706175746f73026e6c0000010001 bfa280000001000000020001037777770d73746170656c6f706175746f73026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c01ec0100002000100015180000a036e73310372746cc01ec03200010001000151800004c3c1ca77 29258 000000007002400080fc0000020405b401010402 000080010000000000000000 29259 930e00000001000000000000036e733303777873026e6c0000260001 930e80000001000000030003036e733303777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 29260 31c40000000100000000000005646e732d31056c61646f74026e6c0000010001 31c48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29261 a1ff0000000100000000000005646e732d32056c61646f74026e6c0000010001 a1ff8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29262 b652267b50104462b6930000000000000000 b652a6730000000000000000 29263 10f60000000100000000000008726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001 10f68000000100000002000208726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001c0150002000100015180000e036e7331076e657463617374c023c01500020001000151800006036e7332c03bc03700010001000151800004c2970101c05100010001000151800004c297012d 29264 b652bfd55010447033180000000000000000 29265 b651697e50104462c92b0000000000000000 b651e9740000000000000000 29266 b652bfd550184470abf600000095d88a000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000 29267 534300000001000000000000036e73310974656c656b6162656c026e6c0000010001 534380000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 29268 63980000000100000000000005646e732d31056c61646f74026e6c0000010001 63988000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29269 98c30000000100000000000005646e732d32056c61646f74026e6c0000010001 98c38000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29270 8b6800000001000000000000037777770d67697461617273756666657264026e6c0000010001 8b6880000001000000030000037777770d67697461617273756666657264026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c03ac0100002000100015180000a076e73686f737433c03a 29271 b652bfe35011446232800000000000000000 29272 18dd00000001000000000000086f726973626f7577026e6c0000ff0001 18dd80000001000000030001086f726973626f7577026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 29273 8c08000000010000000000000377777707747067706f7374026e6c0000010001 8c08800000010000000200020377777707747067706f7374026e6c0000010001c0100002000100015180000e036e733207737570706f7274c018c01000020001000151800006036e7334c030c02c00010001000151800004c372e7c8c04600010001000151800004c372e6fe 29274 0000000070024000729e0000020405b401010402 000080010000000000000000 29275 77c500000001000000000000036e7332086d65646961776562026e6c0000010001 77c580000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 29276 b66e00000001000000000000036e7333086d65646961776562026e6c0000010001 b66e80000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 29277 27c300000001000000000000037777770e76616e68617070656e6175746f73026e6c0000010001 27c380000001000000020001037777770e76616e68617070656e6175746f73026e6c0000010001c0100002000100015180000e036e733107736368726f6572c01fc01000020001000151800006036e7332c037c03300010001000151800004d468c9c4 29278 10e100000001000000000000036b726f026e6c00000f0001 10e180000001000000020002036b726f026e6c00000f0001c00c00020001000151800010066d696e6e6965066f6d726f6570c010c00c0002000100015180000805726f62696ec02bc02400010001000151800004913a1e04c04000010001000151800004913a1a34 29279 b652bfe450104462327f0000000000000000 29280 b65534ff50104470af8d0000000000000000 b655b4f40000000000000000 29281 e92700000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 e92780000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 29282 b65534ff50184470511e00000095afd8000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd90403c4f100003000000364e544c4d535350000100000097b208e00d000d00290000000900090020000000524942454d412d4e4c5343484f434b5f524942454d410000 b655b4f40000000000000000 29283 416b00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 416b80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29284 bce300000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 bce380000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29285 b655350d50114462aef50000000000000000 b655b5040000000000000000 29286 c10e000000010000000000000377777707666f786b696473026e6c0000010001 c10e800000010000000300000377777707666f786b696473026e6c0000010001c01000020001000151800011036e73310777652d64617265036e657400c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030 29287 1e2b0000000100000000000003777777046e706366026e6c0000010001 1e2b8000000100000002000003777777046e706366026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 29288 083200000001000000000000037777770e6d617a64612d77696572696e6761026e6c0000010001 083280000001000000020002037777770e6d617a64612d77696572696e6761026e6c0000010001c0100002000100015180000d036e73310661637469766fc01fc01000020001000151800006036e7332c037c03300010001000151800004d5c4281ac04c00010001000151800004d5c42806 29289 b655350e50104462aef40000000000000000 b655b5040000000000000000 29290 f97c00000001000000000000037777770c6465726f6e646576656e656e026e6c0000010001 f97c80000001000000020002037777770c6465726f6e646576656e656e026e6c0000010001c0100002000100015180000e026e73086d656761706c6578c01dc01000020001000151800006036e7331c034c03100010001000151800004504f6101c04b00010001000151800004504f6102 29291 ed9f00000001000000000000036e733103777873026e6c0000010001 ed9f80000001000000030003036e733103777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 29292 53f700000001000000000000036e733203777873026e6c0000010001 53f780000001000000030003036e733203777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 29293 2cee00000001000000000000036e737307646f7473706f74026e6c0000010001 2cee80000001000000020002036e737307646f7473706f74026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043eb1d102c00c000100010001518000043eb1d104 29294 73ed00000001000000000000026e7307646f7473706f74026e6c0000010001 73ed80000001000000020002026e7307646f7473706f74026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7373c00fc00c000100010001518000043eb1d102c039000100010001518000043eb1d104 29295 86800000000100000000000009726f7a656d69656b6509656967656e73697465026e6c0000010001 86808000000100000002000209726f7a656d69656b6509656967656e73697465026e6c0000010001c0160002000100015180000d026e7307646f7473706f74c020c01600020001000151800006036e7373c037c034000100010001518000043eb1d102c04d000100010001518000043eb1d104 29296 003200000001000000000000046e73303903777873026e6c0000260001 003280000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 29297 0c5400000001000000000000046d61696c066368656c6c6f026e6c0000010001 0c5480000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 29298 801e00000001000000000000046d7876660776697a7a617669026e6c0000010001 801e80000001000000030001046d7876660776697a7a617669026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c01100020001000151800007046e733038c043c02d000100010001518000043e48df58 29299 4b6c00000001000000000000046d7876660776697a7a617669026e6c00001c0001 4b6c80000001000000030001046d7876660776697a7a617669026e6c00001c0001c01100020001000151800005026e73c011c0110002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c01100020001000151800007046e733038c043c02d000100010001518000043e48df58 29300 428f0000000100000000000005646e732d31056c61646f74026e6c0000010001 428f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29301 8a580000000100000000000005646e732d32056c61646f74026e6c0000010001 8a588000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29302 e0940000000100000000000008736e6565626f6572026e6c00000f0001 e0948000000100000002000108736e6565626f6572026e6c00000f0001c00c0002000100015180000a026e7304696d636fc015c00c00020001000151800013036e7332097669727475616c787303636f6d00c029000100010001518000043e81810a 29303 1e6100000001000000000000036e733109666972737466696e64026e6c0000010001 1e6180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29304 40b900000001000000000000036e733209666972737466696e64026e6c0000010001 40b980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29305 782d00000001000000000000036e73310c636f6c742d74656c65636f6d026e6c0000010001 782d80000001000000020002036e73310c636f6c742d74656c65636f6d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d44ea00dc03f00010001000151800004d44ea00e 29306 344100000001000000000000086d616e706f776572026e6c00000f0001 344180000001000000020002086d616e706f776572026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c015c00c00020001000151800006036e7332c02dc02900010001000151800004c2451012c04100010001000151800004c2451212 29307 d70100000001000000000000046d61696c04696d636f026e6c0000010001 d70180000001000000020001046d61696c04696d636f026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800013036e7332097669727475616c787303636f6d00c02a000100010001518000043e81810a 29308 e98100000001000000000000036e733208696e7465726c6162026e6c0000010001 e98180000001000000020002036e733208696e7465726c6162026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004d4cb0902c00c00010001000151800004d4cb0903 29309 cb4200000001000000000000036e733106646f686d656e026e6c0000010001 cb4280000001000000020002036e733106646f686d656e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d94d8d41c03900010001000151800004d94d8d42 29310 a78b00000001000000000000036e733206646f686d656e026e6c0000010001 a78b80000001000000020002036e733206646f686d656e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d94d8d41c00c00010001000151800004d94d8d42 29311 6727000000010000000000000763726573656e74026e6c00000f0001 6727800000010000000200020763726573656e74026e6c00000f0001c00c0002000100015180000e036e733007656173796e6574c014c00c00020001000151800006036e7331c02cc02800010001000151800004c2a55e01c04200010001000151800004c2a55e05 29312 dd2a00000001000000000000026e73076e65746c616e64026e6c0000010001 dd2a80000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 29313 f70e00000001000000000000036e7332076e65746c616e64026e6c0000010001 f70e80000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 29314 2bf600000001000000000000036e73330767617574656e67026e6c0000010001 2bf680000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29315 028100000001000000000000097069637365727665720773747564656e7407757477656e7465026e6c0000010001 028180000001000000030003097069637365727665720773747564656e7407757477656e7465026e6c0000010001c01e00020001000151800006036e7331c01ec01e00020001000151800006036e7332c01ec01e00020001000151800006036e7333c01ec03a0001000100015180000482590102c04c0001000100015180000482590103c05e00010001000151800004c0571113 29316 7ae000000001000000000000036e73330473617261026e6c0000010001 7ae080000001000000030003036e73330473617261026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000e036e733207737572666e6574c015c029000100010001518000049164051ec03b000100010001518000049164052fc04d00010001000151800004c0572402 29317 1ed700000001000000000000036e73340473617261026e6c0000010001 1ed780000001000000030003036e73340473617261026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000e036e733207737572666e6574c015c029000100010001518000049164051ec03b000100010001518000049164052fc04d00010001000151800004c0572402 29318 bc950000000100000000000006787334616c6c166e6c2c737065616b6572667265616b40787334616c6c026e6c00000f0001 bc958403000100000001000006787334616c6c166e6c2c737065616b6572667265616b40787334616c6c026e6c00000f0001c02a00060001000038400036026e730f646f6d61696e2d7265676973747279c02a0a686f73746d6173746572c0410bf1e540000070800000384000278d0000003840 29319 388c000000010000000000000377777708687569736c696a6e026e6c0000010001 388c800000010000000200000377777708687569736c696a6e026e6c0000010001c0100002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0100002000100015180000d077669312d6e7330026174c038 29320 813b000000010000000000000a6265746572686f72656e026e6c0000ff0001 813b800000010000000200010a6265746572686f72656e026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c017c04400010001000151800004c2860043 29321 ff8500000001000000000000036e73310466757a7a026e6c0000010001 ff8580000001000000020000036e73310466757a7a026e6c0000010001c0100002000100015180001909627364667265616b730c6d756e74696e7465726e6574c015c010000200010001518000070466757a7ac033 29322 abdc000000010000000000000463697461026e6c0000ff0001 abdc800000010000000200020463697461026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 29323 ba5f00000001000000000000096b6162656c666f6f6e026e6c0000ff0001 ba5f80000001000000020002096b6162656c666f6f6e026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7334c00cc02a000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 29324 209c00000001000000000000076472656e746865026e6c00000f0001 209c80000001000000020002076472656e746865026e6c00000f0001c00c0002000100015180000a036e733103696166c014c00c00020001000151800006036e7332c02cc028000100010001518000045059e040c03e000100010001518000045059ee03 29325 b30c0000000100000000000002313303313733033131300236330964796e61626c6f636b07656173796e6574026e6c0000100001 b30c8000000100000002000202313303313733033131300236330964796e61626c6f636b07656173796e6574026e6c0000100001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 29326 7353000000010000000000000a686f6f7273747564696f026e6c0000ff0001 7353800000010000000200020a686f6f7273747564696f026e6c0000ff0001c00c0002000100015180000d036e733106796f72697465c017c00c00020001000151800006036e7332c02fc02b0001000100015180000451047320c0440001000100015180000451047321 29327 ebed00100001000000000001036d783203626974026e6c00000100010000290800000080000000 ebed80000001000000030004036d783203626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b0000291000000000000000 29328 1b210000000100000000000003777777086a6f6e677a756964026e6c0000010001 1b218000000100000003000003777777086a6f6e677a756964026e6c0000010001c0100002000100015180001607646e732d65753108706f776572646e73036e657400c0100002000100015180000a07646e732d757331c035c0100002000100015180000a07646e732d657532c035 29329 c7410000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c7418000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29330 9581000000010000000000000377777703646e62026e6c0000010001 9581800000010000000200000377777703646e62026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 29331 6aea00000001000000000000046d61696c0962696567656c616172026e6c0000010001 6aea80000001000000020001046d61696c0962696567656c616172026e6c0000010001c0110002000100015180000d026e73046575726f036e657400c0110002000100015180000d026e73076575726f6e6574c01bc04800010001000151800004c2860043 29332 cdf3000000010000000000000377777706663163726577026e6c0000010001 cdf3800000010000000300030377777706663163726577026e6c0000010001c0100002000100015180000e076e73617574683103626974c017c0100002000100015180000a076e736175746832c033c0100002000100015180000a076e736175746833c033c02b00010001000151800004d5880c33c04500010001000151800004d5880c3bc05b00010001000151800004d4ccc00b 29333 0e2f00000001000000000000036d783203626974026e6c0000010001 0e2f80000001000000030003036d783203626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 29334 d4b800000001000000000000026e73076575726f6e6574026e6c0000010001 d4b880000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 29335 b0eb000000010000000000000b6177612d636f7576657274026e6c00000f0001 b0eb800000010000000200000b6177612d636f7576657274026e6c00000f0001c00c0002000100015180000e026e7305702d69637403636f6d00c00c00020001000151800012026e7309646970737769746368036f726700 29336 89f500000001000000000000046d69787a026e6c0000ff0001 89f580000001000000020000046d69787a026e6c0000ff0001c00c0002000100015180000b036e73310469706d68c011c00c0002000100015180000e036e73320469706d68036e657400 29337 09d9000000010000000000000276330a646d64656c6976657279026e6c0000010001 09d9800000010000000200000276330a646d64656c6976657279026e6c0000010001c00f00020001000151800010036e73310673697465347503636f6d00c00f00020001000151800006036e7332c032 29338 4fc5000000010000000000000568736c6177026e6c0000ff0001 4fc5800000010000000300010568736c6177026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 29339 3a8b00000001000000000000074b656572616476026e6c0000ff0001 3a8b80000001000000020002074b656572616476026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 29340 5a4800000001000000000000036e733109666972737466696e64026e6c0000010001 5a4880000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29341 1f3600000001000000000000036e733209666972737466696e64026e6c0000010001 1f3680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29342 0f2000000001000000000000084c542d56447230330d76616e5f73746161766572656e026e6c0000060001 0f2084030001000000010000084c542d56447230330d76616e5f73746161766572656e026e6c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 29343 e3e1000000010000000000000e696e666f6e65742d6575726f7065026e6c00000f0001 e3e1800000010000000300000e696e666f6e65742d6575726f7065026e6c00000f0001c00c0002000100015180001204646e7331076962706d61696c036e657400c00c0002000100015180000c04646e733104696e666fc03cc00c0002000100015180000704646e7332c034 29344 e3040000000100000000000003777777066c6163687568026e6c0000010001 e3048000000100000002000003777777066c6163687568026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c041 29345 f48d00000001000000000000046d61696c08676f656469646565026e6c0000ff0001 f48d80000001000000020000046d61696c08676f656469646565026e6c0000ff0001c01100020001000151800010026e730777697265687562036e657400c01100020001000151800006036e7332c031 29346 000000005004faf0e84a0000000000000000 000080010000000000000000 29347 3e8d000000010000000000000e6772616669736368657a616b656e026e6c0000ff0001 3e8d800000010000000200020e6772616669736368657a616b656e026e6c0000ff0001c00c0002000100015180000d026e73076b6e6f77617265c01bc00c00020001000151800006036e7332c032c02f00010001000151800004c3402003c04800010001000151800004c340202b 29348 d0fd00000001000000000000036e733109666972737466696e64026e6c0000010001 d0fd80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29349 d0fe00000001000000000000036e733209666972737466696e64026e6c0000010001 d0fe80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29350 d0ff000000010000000000000a73706f727476656e7565026e6c00001c0001 d0ff800000010000000200000a73706f727476656e7565026e6c00001c0001c00c00020001000151800010036e733109666972737466696e64c017c00c00020001000151800006036e7332c02f 29351 6a6500000001000000000000057878736578026e6c0000010001 6a6580000001000000030003057878736578026e6c0000010001c00c0002000100015180000e04646e733106626c6978656dc012c00c0002000100015180000704646e7332c02bc00c0002000100015180000704646e7333c02bc02600010001000151800004d44fe803c04000010001000151800004c3f5c782c05300010001000151800004d44ff303 29352 d10000000001000000000000036e733109666972737466696e64026e6c0000010001 d10080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29353 d10100000001000000000000036e733209666972737466696e64026e6c0000010001 d10180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29354 644a00000001000000000000036e733109756e69736f75726365026e6c0000010001 644a80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 29355 45c0000000010000000000000c303930362d73657863686174026e6c0000010001 45c0800000010000000200000c303930362d73657863686174026e6c0000010001c00c00020001000151800012036e73310878656e6f73697465036e657400c00c00020001000151800006036e7332c031 29356 956200000001000000000000036d783206787334616c6c026e6c0000010001 956280000001000000030002036d783206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29357 10a300000001000000000000036d783206787334616c6c026e6c00001c0001 10a380000001000000030002036d783206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29358 e94000000001000000000000036d783206787334616c6c026e6c0000260001 e94080000001000000030002036d783206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29359 b85d0000000100000000000007706963736572760e6265796f6e642d7265616c697479026e6c0000010001 b85d8000000100000002000207706963736572760e6265796f6e642d7265616c697479026e6c0000010001c0140002000100015180000d036e73310674696b74616bc023c01400020001000151800009036e733202696fc023c037000100010001518000045111281dc0500001000100015180000451112202 29360 24bd0000000100000000000007617261676f726e0b73746172746b6162656c33026e6c0000010001 24bd8000000100000003000307617261676f726e0b73746172746b6162656c33026e6c0000010001c0140002000100015180000b04646e733103766970c020c0140002000100015180000704646e7332c039c0140002000100015180000704646e7333c039c03400010001000151800004d44fe803c04b00010001000151800004c3f5c782c05e00010001000151800004d44ff303 29361 00300000000100000000000006637269646561026e6c0000010001 00308000000100000002000006637269646561026e6c0000010001c00c0002000100015180000f036e7331056279303030036e657400c00c00020001000151800006036e7332c02b 29362 44cc000000010000000000000a6f72696f6e67726f6570026e6c0000010001 44cc800000010000000200010a6f72696f6e67726f6570026e6c0000010001c00c0002000100015180000b026e73053266617374c017c00c00020001000151800006036e7332c02ec042000100010001518000043e858122 29363 745600000001000000000000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d73646373156e65747765726b737469636874696e6770616c6574026e6c0000060001 745684030001000000010000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d73646373156e65747765726b737469636874696e6770616c6574026e6c0000060001c05400060001000038400036026e730f646f6d61696e2d7265676973747279c0540a686f73746d6173746572c06b0bf1e540000070800000384000278d0000003840 29364 932d00000001000000000000036d783306787334616c6c026e6c0000010001 932d80000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29365 3fb500000001000000000000036d783306787334616c6c026e6c00001c0001 3fb580000001000000030002036d783306787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29366 2b7f00000001000000000000037777770d73746170656c6f706175746f73026e6c0000010001 2b7f80000001000000020001037777770d73746170656c6f706175746f73026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c01ec0100002000100015180000a036e73310372746cc01ec03200010001000151800004c3c1ca77 29367 a21e00000001000000000000036d783306787334616c6c026e6c0000260001 a21e80000001000000030002036d783306787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29368 3f3400000001000000000000036d783406787334616c6c026e6c0000010001 3f3480000001000000030002036d783406787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29369 19a000000001000000000000036d783406787334616c6c026e6c00001c0001 19a080000001000000030002036d783406787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29370 231900000001000000000000036d783406787334616c6c026e6c0000260001 231980000001000000030002036d783406787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29371 5e5d00000001000000000000036d783106787334616c6c026e6c0000010001 5e5d80000001000000030002036d783106787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29372 996e00000001000000000000036d783106787334616c6c026e6c00001c0001 996e80000001000000030002036d783106787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29373 4d1800000001000000000000026e730a646f6d65696e686f7374026e6c0000010001 4d1880000001000000020000026e730a646f6d65696e686f7374026e6c0000010001c00f00020001000151800017036e73310d696e746572726567697374657203636f6d00c00f00020001000151800010036e733206776964657873036e657400 29374 57a000000001000000000000037777770c30383030636f6d6d65726365026e6c0000010001 57a080000001000000020002037777770c30383030636f6d6d65726365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c03100010001000151800004c1ad97b2c04300010001000151800004c1ad97b4 29375 00e500000001000000000000067372763031360b66726565686f7374696e67026e6c0000ff0001 00e580000001000000020000067372763031360b66726565686f7374696e67026e6c0000ff0001c0130002000100015180001105646e732d33056c61646f7403636f6d00c0130002000100015180000805646e732d34c039 29376 38380000000100000000000003627968026e6c0000010001 38388000000100000002000003627968026e6c0000010001c00c0002000100015180000f036e7331056279303030036e657400c00c00020001000151800006036e7332c028 29377 911100000001000000000000036d783106787334616c6c026e6c0000260001 911180000001000000030002036d783106787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29378 8f6100000001000000000000026e7306787334616c6c026e6c00001c0001 8f6180000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 29379 369200000001000000000000026e7306787334616c6c026e6c0000260001 369280000001000000030002026e7306787334616c6c026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 29380 272300000001000000000000036e733206787334616c6c026e6c00001c0001 272380000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 29381 3f0b00000001000000000000036e733206787334616c6c026e6c0000260001 3f0b80000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 29382 ec5800000001000000000000036d6174026e6c00000f0001 ec5880000001000000020002036d6174026e6c00000f0001c00c00020001000151800009026e7303646d61c010c00c00020001000151800006036e7332c027c02400010001000151800004d973c8fbc03900010001000151800004d9aa11fc 29383 358b00000001000000000000037777770a646577616c6473616e67026e6c0000010001 358b80000001000000020002037777770a646577616c6473616e67026e6c0000010001c01000020001000151800013036e73310c636172647365727669636573c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5c9baf3c04e00010001000151800004d5c9baf4 29384 9bfb00000001000000000000026e73076e656473746174026e6c00001c0001 9bfb80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29385 380900000001000000000000036e7332076e656473746174026e6c0000010001 380980000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29386 e80f00000001000000000000036e7332076e656473746174026e6c00001c0001 e80f80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29387 606300000001000000000000036e7333076e656473746174026e6c00001c0001 606380000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 29388 9cc500000001000000000000036e7334076e656473746174026e6c0000010001 9cc580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29389 683700000001000000000000036e7334076e656473746174026e6c00001c0001 683780000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29390 c410000000010000000000000377777703646468026e6c0000010001 c410800000010000000300010377777703646468026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec040c028000100010001518000043ea68353 29391 516a00000001000000000000076d726f757465720777697265687562026e6c00001c0001 516a80000001000000030000076d726f757465720777697265687562026e6c00001c0001c01400020001000151800010026e730777697265687562036e657400c01400020001000151800006036e7332c033c01400020001000151800006036e7333c033 29392 322d00000001000000000000037777770b6166746f6e626c6164657402736508656d6561636f7265026e6c0000010001 322d84030001000000010000037777770b6166746f6e626c6164657402736508656d6561636f7265026e6c0000010001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 29393 52f800000001000000000000046d61696c056672656578026e6c0000010001 52f880000001000000020002046d61696c056672656578026e6c0000010001c0110002000100015180000a036e7331036e7873c017c01100020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 29394 6afa00000001000000000000036e73350a6e657461666661697273026e6c0000010001 6afa80000001000000020002036e73350a6e657461666661697273026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7336c010c00c00010001000151800004c1ac2d05c03d00010001000151800004c1ac2d06 29395 b57d00000001000000000000036e73360a6e657461666661697273026e6c0000010001 b57d80000001000000020002036e73360a6e657461666661697273026e6c0000010001c01000020001000151800006036e7335c010c01000020001000151800002c00cc02f00010001000151800004c1ac2d05c00c00010001000151800004c1ac2d06 29396 35520000000100000000000003777777046b617468026e6c0000010001 35528000000100000002000003777777046b617468026e6c0000010001c0100002000100015180000e026e7308676c6f62616c7873c015c01000020001000151800006036e7332c02c 29397 a29500000001000000000000037777770864616e69656c6c61026e6c0000010001 a29580000001000000020002037777770864616e69656c6c61026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c019c01000020001000151800006036e7332c030c02d0001000100015180000450474002c04b0001000100015180000450474102 29398 3f600000000100000000000004696b6361026e6c00000f0001 3f608000000100000002000104696b6361026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c011c03e00010001000151800004c2860043 29399 75c200000001000000000000036e73320a6d756c74696b6162656c026e6c0000010001 75c280000001000000030002036e73320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 29400 2f7e00000001000000000000036e73310a6d756c74696b6162656c026e6c0000010001 2f7e80000001000000030002036e73310a6d756c74696b6162656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 29401 8f9200000001000000000000036e7331046e732d31026e6c0000010001 8f9280000001000000020002036e7331046e732d31026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045045a0cdc03700010001000151800004d4cceec8 29402 e3ea00000001000000000000036e7332046e732d31026e6c0000010001 e3ea80000001000000020002036e7332046e732d31026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc029000100010001518000045045a0cdc00c00010001000151800004d4cceec8 29403 560200000001000000000000096d6f6e74666f6f7274026e6c0000ff0001 560280000001000000020002096d6f6e74666f6f7274026e6c0000ff0001c00c0002000100015180000e026e73086d656761706c6578c016c00c00020001000151800006036e7331c02dc02a00010001000151800004504f6101c04400010001000151800004504f6102 29404 08590000000100000000000005646e732d31056c61646f74026e6c0000010001 08598000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29405 36260000000100000000000005646e732d32056c61646f74026e6c0000010001 36268000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29406 8ceb00000001000000000000037777770f73747564656e74656e6b616d657273026e6c0000010001 8ceb80000001000000020000037777770f73747564656e74656e6b616d657273026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c037 29407 9105000000010000000000000a676f7564656e67696473026e6c0000010001 9105800000010000000200010a676f7564656e67696473026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02b00010001000151800004c1ac0e02 29408 720700000001000000000000096f7564706170696572026e6c0000ff0001 720780000001000000020002096f7564706170696572026e6c0000ff0001c00c00020001000151800009036e7331026973c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5852102c03f00010001000151800004d5c41503 29409 09360000000100000000000003777777056b6c696b73026e6c0000010001 09368000000100000002000003777777056b6c696b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02d 29410 f3a70000000100000000000007667265656c6572026e6c00001c0001 f3a78000000100000002000007667265656c6572026e6c00001c0001c00c000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c00c0002000100015180000e0b65766973702d6e732d3032c034 29411 b7df0000000100000000000003777777066d6174757265026e6c0000010001 b7df8000000100000002000203777777066d6174757265026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c017c01000020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad41 29412 83f60000000100000000000003776566026e6c00000f0001 83f68000000100000002000203776566026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 29413 5c4200000001000000000000076368696361676f07726f7574653636026e6c0000010001 5c4280000001000000020001076368696361676f07726f7574653636026e6c0000010001c0140002000100015180000d026e73046575726f036e657400c0140002000100015180000d026e73076575726f6e6574c01cc04900010001000151800004c2860043 29414 8e9d0000000100000000000004616e73310774697363616c69026e6c00001c0001 8e9d8000000100000003000204616e73310774697363616c69026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 29415 90ca0000000100000000000004616e73310774697363616c69026e6c0000260001 90ca8000000100000003000204616e73310774697363616c69026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 29416 40200000000100000000000004616e73320774697363616c69026e6c00001c0001 40208000000100000003000204616e73320774697363616c69026e6c00001c0001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 29417 be110000000100000000000004616e73320774697363616c69026e6c0000260001 be118000000100000003000204616e73320774697363616c69026e6c0000260001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 29418 941a000000010000000000000377777704666e7273026e6c0000010001 941a800000010000000200020377777704666e7273026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 29419 342b00000001000000000000036e73330767617574656e67026e6c0000010001 342b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29420 043400000001000000000000036e73340767617574656e67026e6c0000010001 043480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29421 a697000000010000000000000967616c6c65726965730d706172746e6572636c69636b73026e6c0000010001 a697800000010000000200020967616c6c65726965730d706172746e6572636c69636b73026e6c0000010001c0160002000100015180000f036e73310861746c616e74697ac024c01600020001000151800006036e7332c03cc03800010001000151800004d5efa011c05300010001000151800004d5efa075 29422 36ac0000000100000000000009652d6c756e61746963026e6c0000010001 36ac8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 29423 21de0000000100000000000008736d7470686f73740667656d6e6574026e6c0000010001 21de8000000100000002000208736d7470686f73740667656d6e6574026e6c0000010001c0150002000100015180000e026e73086d656761706c6578c01cc01500020001000151800006036e7331c033c03000010001000151800004504f6101c04a00010001000151800004504f6102 29424 b90900000001000000000000064345534730310463657367026e6c0000060001 b90984030001000000010000064345534730310463657367026e6c0000060001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 29425 44550000000100000000000008686f73746e616d650462696e640000100003 44558000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 29426 1fa900000001000000000000013203313434033137360331393307696e2d61646472046172706100000c0001 1fa980020001000000000000013203313434033137360331393307696e2d61646472046172706100000c0001 29427 c101000000010000000000000561646d616e056b696f736b026e6c0000010001 c101800000010000000200020561646d616e056b696f736b026e6c0000010001c01200020001000151800012036e73310b7669616e6574776f726b73c018c01200020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 29428 78760000000100000000000006636861726973026e6c00000f0001 78768000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29429 b0a7000000010000000000000377777709776562776572656c64026e6c0000010001 b0a7800000010000000300030377777709776562776572656c64026e6c0000010001c0100002000100015180000a036e733103696467c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e0001000100015180000451af4646c0440001000100015180000451af4647c05600010001000151800004d5a0fde6 29430 d29400000001000000000000034e53320743495354524f4e024e4c0000010001 d29480000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 29431 25ca00000001000000000000076465686f6e6276026e6c0000ff0001 25ca80000001000000020000076465686f6e6276026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 29432 a3b2000000010000000000000377777703646468026e6c0000010001 a3b2800000010000000300010377777703646468026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec040c028000100010001518000043ea68353 29433 3f3500000001000000000000037777770867656d65656e7465026e6c0000010001 3f3580000001000000020000037777770867656d65656e7465026e6c0000010001c01000020001000151800013036e73300964757463682d6e657403636f6d00c01000020001000151800006036e7331c031 29434 d09d001000010000000000010a6578616d656e626c6164096b656e6e69736e6574026e6c00000100010000290800000000000000 d09d800000010000000200030a6578616d656e626c6164096b656e6e69736e6574026e6c0000010001c01700020001000151800006036e7339c017c0170002000100015180000e036e733207737572666e6574c021c03500010001000151800004c0576a61c04700010001000151800004c05724020000291000000000000000 29435 12cc00000001000000000000056d69746578026e6c00000f0001 12cc80000001000000030002056d69746578026e6c00000f0001c00c0002000100015180000f036e7331086c65617365776562c012c00c00020001000151800006036e7332c02ac00c00020001000151800012036e7333086c65617365776562036f726700c026000100010001518000043ed44079c041000100010001518000043ed4407a 29436 514c00000001000000000000037777770d656e6572676965646972656374026e6c0000010001 514c80000001000000020001037777770d656e6572676965646972656374026e6c0000010001c01000020001000151800015086e732d69736d30310963617067656d696e69c01ec0100002000100015180000b086e732d69736d3032c03bc03200010001000151800004d5f4a024 29437 c354000000010000000000000a7765726b74756967656e097377686f7374696e67026e6c0000010001 c354800000010000000200020a7765726b74756967656e097377686f7374696e67026e6c0000010001c0170002000100015180000a036e733103686978c021c01700020001000151800006036e7332c039c03500010001000151800004d5a0da0ac04b0001000100015180000451112ec3 29438 020500000001000000000000037777770764757463687063026e6c0000010001 020580000001000000030000037777770764757463687063026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c032c0100002000100015180000805646e733132c032 29439 501b00000001000000000000037777770a6c656572676f7a657273026e6c0000010001 501b80000001000000030000037777770a6c656572676f7a657273026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c037c0100002000100015180000a076e73686f737433c037 29440 81b90000000100000000000003706f700973796c7661626f7577026e6c0000010001 81b98000000100000003000203706f700973796c7661626f7577026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 29441 e29400000001000000000000024e53084d454741504c4558026e6c0000010001 e29480000001000000020002024e53084d454741504c4558026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004504f6101c03a00010001000151800004504f6102 29442 9d74000000010000000000000a6865616462616e6765720a636c7562636861727473026e6c0000010001 9d74800000010000000200020a6865616462616e6765720a636c7562636861727473026e6c0000010001c0170002000100015180000a036e7331036e7873c022c01700020001000151800006036e7332c03ac03600010001000151800004d973c015c04c00010001000151800004d973c102 29443 000d28000001000200000000026e6c0000060001064345534730310463657367026e6c00000500fe000000000000c01400010001000000000004c297c0c4 000da8040000000000000000 29444 4146000000010000000000000a6578616d656e626c6164096b656e6e69736e6574026e6c0000010001 4146800000010000000200020a6578616d656e626c6164096b656e6e69736e6574026e6c0000010001c01700020001000151800006036e7339c017c0170002000100015180000e036e733207737572666e6574c021c03500010001000151800004c0576a61c04700010001000151800004c0572402 29445 8ba800000001000000000000037777771276616b616e746965646973636f756e746572026e6c0000010001 8ba880000001000000020002037777771276616b616e746965646973636f756e746572026e6c0000010001c0100002000100015180000d036e7331066e6574636f6ec023c01000020001000151800006036e7332c03bc0370001000100015180000450f7ce01c0500001000100015180000450f7cf01 29446 968500000001000000000000037777770e646576617374676f656473697465026e6c0000010001 968580000001000000020001037777770e646576617374676f656473697465026e6c0000010001c0100002000100015180000a036e733303777873c01fc01000020001000151800006036e7334c037c04900010001000151800004d5ef9a65 29447 65210000000100000000000005776f64616e0369637303656c6503747565026e6c0000010001 65218000000100000003000305776f64616e0369637303656c6503747565026e6c0000010001c01a0002000100015180000a0774756567617465c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec03200010001000151800004839b0203c04800010001000151800004839b0303c05a00010001000151800004c0576a65 29448 0da40000000100000000000005776f64616e0369637303656c6503747565026e6c0000260001 0da48000000100000003000305776f64616e0369637303656c6503747565026e6c0000260001c01a0002000100015180000a0774756567617465c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec03200010001000151800004839b0203c04800010001000151800004839b0303c05a00010001000151800004c0576a65 29449 0000000070024000385c0000020405b401010402 000080010000000000000000 29450 92000000000100000000000006636861726973026e6c00000f0001 92008000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29451 936b28000001000000020000026e6c00000600012432383333343664302d343165612d343238302d626532662d623133643232663339396136065f6d73646373086262622d6164616d026e6c00000500ff000000000000c0140005000100000258001709626262736572766572086262622d6164616d026e6c00 936ba8040000000000000000 29452 301200000001000000000000037777770664656b726f6c026e6c0000010001 301280000001000000020000037777770664656b726f6c026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c041 29453 345c00000001000000000000036e73340767617574656e67026e6c0000010001 345c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29454 0c6000000001000000000000036e73330767617574656e67026e6c0000010001 0c6080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29455 348000000001000000000000036e73330767617574656e67026e6c0000010001 348080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29456 0000000070024000905f00000204057a01010402 000080010000000000000000 29457 b658c73e50104470e3080000000000000000 29458 7de700000001000000000000046d61696c1270656e73696f656e756974766f6572646572026e6c0000010001 7de780000001000000020000046d61696c1270656e73696f656e756974766f6572646572026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c03e 29459 b6596076501041b8a4510000000000000000 b659e0740000000000000000 29460 f49f0000000100000000000004646e73320a7075626c6973686e6574026e6c0000010001 f49f8000000100000002000104646e73320a7075626c6973686e6574026e6c0000010001c01100020001000151800006036e696bc011c0110002000100015180000b026e73026e6c036e657400c03000010001000151800004c1433c0a 29461 b6596076501841b838880000009068f4000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403af9b5403c4b350003000000314e544c4d535350000100000097b208e0080008002900000009000900200000004242425345525645524242422d4144414d0000 b659e0740000000000000000 29462 b658c73e501844701fbb000000879ffc000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000434553473031434553470000 29463 b6596084501141aaa3be0000000000000000 b659e0840000000000000000 29464 7e240000000100000000000003777777076d656469776562026e6c0000010001 7e248000000100000002000003777777076d656469776562026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c032 29465 00000000700240009c2d00000204057a01010402 000080010000000000000000 29466 7d280000000100000000000003777777086b6f6f696a6d616e026e6c0000010001 7d288000000100000002000203777777086b6f6f696a6d616e026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c019c01000020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 29467 3f1a000000010000000000000967616e796d6564657309726f7474657264616d026e6c00001c0001 3f1a800000010000000300030967616e796d6564657309726f7474657264616d026e6c00001c0001c01600020001000151800002c00cc01600020001000151800007046c656461c016c01600020001000151800014036e733203676e7309676574726f6e696373c020c00c00010001000151800004d5c9cf50c04200010001000151800004d5c9cf19c05500010001000151800004910d2a05 29468 3bbb000000010000000000000967616e796d6564657309726f7474657264616d026e6c0000260001 3bbb800000010000000300030967616e796d6564657309726f7474657264616d026e6c0000260001c01600020001000151800002c00cc01600020001000151800007046c656461c016c01600020001000151800014036e733203676e7309676574726f6e696373c020c00c00010001000151800004d5c9cf50c04200010001000151800004d5c9cf19c05500010001000151800004910d2a05 29469 0e9b00000001000000000000046c65646109726f7474657264616d026e6c00001c0001 0e9b80000001000000030003046c65646109726f7474657264616d026e6c00001c0001c0110002000100015180000c0967616e796d65646573c011c01100020001000151800002c00cc01100020001000151800014036e733203676e7309676574726f6e696373c01bc02f00010001000151800004d5c9cf50c00c00010001000151800004d5c9cf19c05500010001000151800004910d2a05 29470 71f700000001000000000000046c65646109726f7474657264616d026e6c0000260001 71f780000001000000030003046c65646109726f7474657264616d026e6c0000260001c0110002000100015180000c0967616e796d65646573c011c01100020001000151800002c00cc01100020001000151800014036e733203676e7309676574726f6e696373c01bc02f00010001000151800004d5c9cf50c00c00010001000151800004d5c9cf19c05500010001000151800004910d2a05 29471 50cc00000001000000000000036e7332076e656473746174026e6c0000010001 50cc80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29472 4e6f00000001000000000000036e7334076e656473746174026e6c0000010001 4e6f80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29473 a76900000001000000000000036e73310f637962657270726f6d6f74696f6e73026e6c0000010001 a76980000001000000020002036e73310f637962657270726f6d6f74696f6e73026e6c0000010001c0100002000100015180000e036e733107686f7477697265c020c01000020001000151800006036e7332c038c0340001000100015180000451044b03c04e0001000100015180000451044bc8 29474 660d00000001000000000000036e73320f637962657270726f6d6f74696f6e73026e6c0000010001 660d80000001000000020002036e73320f637962657270726f6d6f74696f6e73026e6c0000010001c0100002000100015180000e036e733107686f7477697265c020c01000020001000151800006036e7332c038c0340001000100015180000451044b03c04e0001000100015180000451044bc8 29475 b6596085501041aaa3bd0000000000000000 b659e0840000000000000000 29476 d5a0000000010000000000000462617261026e6c00000f0001 d5a0800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 29477 fb6f00000001000000000000037777770d766c616d2d6465746563746965026e6c0000010001 fb6f80000001000000030003037777770d766c616d2d6465746563746965026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c01ec0100002000100015180000e0b6e616d6573657276657232c03ec0100002000100015180000e0b6e616d6573657276657233c03ec0320001000100015180000451ad2020c0560001000100015180000451ad2021c0700001000100015180000452c049aa 29478 b659f314501041b81d810000000000000000 29479 dea8000000010000000000000762657374627579026e6c00000f0001 dea8800000010000000200000762657374627579026e6c00000f0001c00c0002000100015180000c026e7306766576696461c014c00c00020001000151800006036e7332c02b 29480 b659f314501841b8513400000090ca78000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403af9b5403c4b350003000000314e544c4d535350000100000097b208e0080008002900000009000900200000004242425345525645524242422d4144414d0000 29481 b658c74c50114462e27e0000000000000000 29482 ccb2000000010000000000000a6c6569646572646f7270026e6c00000f0001 ccb2800000010000000200020a6c6569646572646f7270026e6c00000f0001c00c0002000100015180000e026e73086d656761706c6578c017c00c00020001000151800006036e7331c02ec02b00010001000151800004504f6101c04500010001000151800004504f6102 29483 7bad00000001000000000000055f6c646170045f74637003706463065f6d73646373063565696b656e026e6c0000060001 7bad84030001000000010000055f6c646170045f74637003706463065f6d73646373063565696b656e026e6c0000060001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 29484 b659f322501141aa1cee0000000000000000 29485 87aa000000010000000000000b626f6c6e6574776f726b73026e6c00000f0001 87aa800000010000000200020b626f6c6e6574776f726b73026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c018c00c00020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 29486 0000000070024000ec0c0000020405b401010402 000080010000000000000000 29487 00000000700240004d1c00000204057a01010402 000080010000000000000000 29488 b659f323501041aa1ced0000000000000000 29489 b65ba67a501041b81b080000000000000000 29490 d5dd00000001000000000000055f6c646170045f746370026763065f6d73646373063565696b656e026e6c0000060001 d5dd84030001000000010000055f6c646170045f746370026763065f6d73646373063565696b656e026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 29491 b65ba67a501841b8ed37000000902bfc000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403af9b5403c4b350003000000314e544c4d535350000100000097b208e0080008002900000009000900200000004242425345525645524242422d4144414d0000 29492 25f0000000010000000000000475676269026e6c00001c0001 25f0800000010000000200000475676269026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 29493 c68a00000001000000000000037777770864696b6b656c756c026e6c0000010001 c68a80000001000000030003037777770864696b6b656c756c026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc019c0100002000100015180000704646e7332c032c0100002000100015180000704646e7333c032c02d00010001000151800004d44fe803c04700010001000151800004c3f5c782c05a00010001000151800004d44ff303 29494 b658c74d50104462e27d0000000000000000 29495 b65ba688501141aa1a750000000000000000 29496 be4000000001000000000000037777770a7365786163636f756e74026e6c0000010001 be4080000001000000020002037777770a7365786163636f756e74026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c01bc01000020001000151800006036e7332c033c02f0001000100015180000452c04516c04c0001000100015180000452c04542 29497 b65ad9b55010447084400000000000000000 29498 e0f70000000100000000000008646e73617574683009776973652d67757973026e6c0000010001 e0f78000000100000003000308646e73617574683009776973652d67757973026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7330c015c01500020001000151800006036e7332c015c03300010001000151800004d413cd91c04500010001000151800004d413cd8fc05700010001000151800004c16d7a3e 29499 7c5e0000000100000000000008646e73617574683209776973652d67757973026e6c0000010001 7c5e8000000100000003000308646e73617574683209776973652d67757973026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7330c015c01500020001000151800006036e7332c015c03300010001000151800004d413cd91c04500010001000151800004d413cd8fc05700010001000151800004c16d7a3e 29500 b65ba689501041aa1a740000000000000000 29501 11ee000000010000000000000276330a646d64656c6976657279026e6c0000010001 11ee800000010000000200000276330a646d64656c6976657279026e6c0000010001c00f00020001000151800010036e73310673697465347503636f6d00c00f00020001000151800006036e7332c032 29502 ce9600000001000000000000055f6c646170045f7463702430383830316431622d656130302d343731342d383939662d65316233323465383736383007646f6d61696e73065f6d73646373063565696b656e026e6c0000060001 ce9684030001000000010000055f6c646170045f7463702430383830316431622d656130302d343731342d383939662d65316233323465383736383007646f6d61696e73065f6d73646373063565696b656e026e6c0000060001c05200060001000038400036026e730f646f6d61696e2d7265676973747279c0520a686f73746d6173746572c0690bf1e540000070800000384000278d0000003840 29503 ff3e0000000100000000000003777777066e6965737465026e6c0000010001 ff3e8000000100000002000003777777066e6965737465026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c031 29504 b65ad9b550184470c70a000000879be4000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000434553473031434553470000 29505 548f00000001000000000000036e73330a74727565736572766572026e6c0000010001 548f80000001000000030003036e73330a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f00010001000151800004d5ef8003c04100010001000151800004d5efb004c00c00010001000151800004d5ef8005 29506 64e200000001000000000000036e73320a74727565736572766572026e6c0000010001 64e280000001000000030003036e73320a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02f00010001000151800004d5ef8003c00c00010001000151800004d5efb004c04f00010001000151800004d5ef8005 29507 17a200000001000000000000036e73310a74727565736572766572026e6c0000010001 17a280000001000000030003036e73310a74727565736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef8003c03d00010001000151800004d5efb004c04f00010001000151800004d5ef8005 29508 880000000001000000000000026e7303733632026e6c0000010001 880080000001000000020000026e7303733632026e6c0000010001c00f00020001000151800010026e73076e65737363697303636f6d00c00f00020001000151800006036e7332c02a 29509 b65ad9c35011446283b60000000000000000 29510 0000000070024000ebab0000020405b401010402 000080010000000000000000 29511 9aac00000001000000000000046d61696c07726f7665737461026e6c0000010001 9aac80000001000000020002046d61696c07726f7665737461026e6c0000010001c0110002000100015180000d026e7307656c6173746963c019c01100020001000151800006036e7333c030c02d00010001000151800004d5c42104c04600010001000151800004d5c42107 29512 eff8000000010000000000000377777708666c617368313233026e6c0000010001 eff8800000010000000200000377777708666c617368313233026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c034 29513 aced000000010000000000000862696f646572696a026e6c00001c0001 aced800000010000000200010862696f646572696a026e6c00001c0001c00c00020001000151800011036e696b0a7075626c6973686e6574c015c00c0002000100015180000704646e7332c02dc02900010001000151800004c1433c0a 29514 3c4300000001000000000000037777770a7365786163636f756e74026e6c0000010001 3c4380000001000000020002037777770a7365786163636f756e74026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c01bc01000020001000151800006036e7332c033c02f0001000100015180000452c04516c04c0001000100015180000452c04542 29515 3b0c00000001000000000000026e73076e656473746174026e6c00001c0001 3b0c80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29516 df7c00000001000000000000026e73076e656473746174026e6c0000260001 df7c80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29517 b65ad9c45010446283b50000000000000000 29518 01d300000001000000000000036e7332076e656473746174026e6c0000010001 01d380000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29519 aca600000001000000000000036e7332076e656473746174026e6c00001c0001 aca680000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29520 a02900000001000000000000036e7332076e656473746174026e6c0000260001 a02980000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29521 c391000000010000000000000864657475756e7465026e6c00000f0001 c391800000010000000200010864657475756e7465026e6c00000f0001c00c0002000100015180000a036e733303777873c015c00c00020001000151800006036e7334c02dc03f00010001000151800004d5ef9a65 29522 ded4000000010000000000000763656e64726973026e6c00000f0001 ded4800000010000000200020763656e64726973026e6c00000f0001c00c0002000100015180000e036e733207737570706f7274c014c00c00020001000151800006036e7334c02cc02800010001000151800004c372e7c8c04200010001000151800004c372e6fe 29523 d86800000001000000000000036e7333076e656473746174026e6c00001c0001 d86880000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 29524 0d1400000001000000000000036e7333076e656473746174026e6c0000260001 0d1480000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 29525 282200000001000000000000036e7334076e656473746174026e6c0000010001 282280000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29526 b65c2b0a5010447032890000000000000000 b65cab040000000000000000 29527 212a00000001000000000000036e7334076e656473746174026e6c00001c0001 212a80000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29528 eb7800000001000000000000036e7334076e656473746174026e6c0000260001 eb7880000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29529 5e4a00000001000000000000037777770e646f6d627572676d6f746f72656e026e6c0000010001 5e4a80000001000000020000037777770e646f6d627572676d6f746f72656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c039 29530 b65c2b0a50184470796b0000008797cc000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000434553473031434553470000 b65cab040000000000000000 29531 3bae000000010000000000000377777703726e77026e6c00001c0001 3bae800000010000000200010377777703726e77026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004913ac8fd 29532 461000000001000000000000046d61696c066e6577617973026e6c0000010001 461080000001000000030003046d61696c066e6577617973026e6c0000010001c0110002000100015180000b036e73310464696769c018c01100020001000151800006036e7332c030c01100020001000151800006036e7333c030c02c000100010001518000043e5df006c043000100010001518000043e5df0f6c05500010001000151800004d42986e2 29533 dde600000001000000000000086f6666696369616c026e6c00000f0001 dde680000001000000020000086f6666696369616c026e6c00000f0001c00c00020001000151800011036e73300773656c696f757303636f6d00c00c00020001000151800006036e7332c02d 29534 1f4200000001000000000000057473636e6c026e6c0000ff0001 1f4280000001000000020002057473636e6c026e6c0000ff0001c00c0002000100015180000d026e73077374616e6e6574c012c00c00020001000151800006036e7332c029c02600010001000151800004d5852414c03f00010001000151800004d5852418 29535 482600000001000000000000086869656e66656c64026e6c00000f0001 482680000001000000030003086869656e66656c64026e6c00000f0001c00c0002000100015180000f036e7331086e6f766178657373c015c00c00020001000151800006036e7332c02dc00c00020001000151800006036e7333c02dc02900010001000151800004d5c98015c04400010001000151800004d5c9bf12c05600010001000151800004d5ef9c26 29536 ebde0000000100000000000006617263686973026e6c0000010001 ebde8000000100000002000106617263686973026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02700010001000151800004c1ad1272 29537 9d110000000100000000000003777777106f75746c696e65616d7374657264616d026e6c0000010001 9d118000000100000002000203777777106f75746c696e65616d7374657264616d026e6c0000010001c0100002000100015180000c026e7306787334616c6cc021c01000020001000151800006036e7332c038c03500010001000151800004c26d0642c04d00010001000151800004c26d0963 29538 ab7a00000001000000000000046d61696c086869656e66656c64026e6c0000010001 ab7a80000001000000030003046d61696c086869656e66656c64026e6c0000010001c0110002000100015180000f036e7331086e6f766178657373c01ac01100020001000151800006036e7332c032c01100020001000151800006036e7333c032c02e00010001000151800004d5c98015c04900010001000151800004d5c9bf12c05b00010001000151800004d5ef9c26 29539 42f00000000100000000000004616a6178066e696b686566026e6c0000010001 42f08000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 29540 6bec0000000100000000000009737066626568656572026e6c0000010001 6bec8000000100000002000009737066626568656572026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c030 29541 b65c2b185011446231ff0000000000000000 b65cab140000000000000000 29542 7b4500100001000000000001056132303030026e6c0000ff00010000290800000000000000 7b4580000001000000030003056132303030026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e733109756e69736f75726365c012c00c00020001000151800006036e7332c00cc026000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 29543 81d100000001000000000000037777770a746f702d6e6f6f6b6965026e6c0000010001 81d180000001000000020000037777770a746f702d6e6f6f6b6965026e6c0000010001c01000020001000151800011036e7331077876656e74757303636f6d00c01000020001000151800006036e7332c033 29544 d27f00000001000000000000036e733205786c722d38026e6c0000010001 d27f80000001000000020002036e733205786c722d38026e6c0000010001c01000020001000151800009036e7331026973c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5852102c03f00010001000151800004d5c41503 29545 085500000001000000000000036e733103757063026e6c0000010001 085580000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 29546 a46d00000001000000000000036e73320d6d74622d736f6c7574696f6e73026e6c0000010001 a46d80000001000000020002036e73320d6d74622d736f6c7574696f6e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d5852719c00c00010001000151800004d5852714 29547 313d00000001000000000000036e73320d6d74622d736f6c7574696f6e73026e6c0000260001 313d80000001000000020002036e73320d6d74622d736f6c7574696f6e73026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d5852719c00c00010001000151800004d5852714 29548 8266000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 8266800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 29549 4133000000010000000000000870686f626f7330320761626e616d726f026e6c0000010001 4133800000010000000200020870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c 29550 23a000000001000000000000036e73310d6d74622d736f6c7574696f6e73026e6c0000010001 23a080000001000000020002036e73310d6d74622d736f6c7574696f6e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852719c04000010001000151800004d5852714 29551 b65c2b195010446231fe0000000000000000 b65cab140000000000000000 29552 b10a00000001000000000000026e730367616b026e6c0000010001 b10a80000001000000020002026e730367616b026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733307737669616e6564c013c00c000100010001518000048fb0b003c035000100010001518000048fb10165 29553 914c00000001000000000000037777770c64656d6f666573746976616c026e6c0000010001 914c80000001000000020000037777770c64656d6f666573746976616c026e6c0000010001c01000020001000151800015036e73310b7072696f73657276653035036e657400c01000020001000151800006036e7332c035 29554 087500000001000000000000036e733203666a66026e6c0000010001 087580000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29555 c83c00000001000000000000026e730477656233026e6c0000010001 c83c80000001000000020002026e730477656233026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc02800010001000151800004d436240ec03a00010001000151800004c2b262ef 29556 087600000001000000000000036e733103666a66026e6c0000010001 087680000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29557 48cd00000001000000000000036e73310d6d74622d736f6c7574696f6e73026e6c0000260001 48cd80000001000000020002036e73310d6d74622d736f6c7574696f6e73026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852719c04000010001000151800004d5852714 29558 8e0700000001000000000000056132303030026e6c0000ff0001 8e0780000001000000030002056132303030026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e733109756e69736f75726365c012c00c00020001000151800006036e7332c00cc026000100010001518000043e6c0141c054000100010001518000043e6c0142 29559 85ef00000001000000000000036e7333046372696f026e6c0000010001 85ef80000001000000020000036e7333046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 29560 3e9700000001000000000000036e7334046372696f026e6c0000010001 3e9780000001000000020000036e7334046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 29561 002d0000000100000000000003777777096a6f6273746f646179026e6c0000010001 002d8000000100000002000003777777096a6f6273746f646179026e6c0000010001c0100002000100015180000e036e7331047773646e03636f6d00c01000020001000151800006036e7332c032 29562 6b0300000001000000000000096863632d67726f6570026e6c0000010001 6b0380000001000000020002096863632d67726f6570026e6c0000010001c00c0002000100015180000e036e7331077175616e746973c016c00c00020001000151800006036e7332c02ec02a000100010001518000043ed44440c04400010001000151800004d4ccca83 29563 d86000000001000000000000057377616e65026e6c00000f0001 d86080000001000000020002057377616e65026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 29564 fd8a0000000100000000000004736d74700b6575726f7472616e736974026e6c0000010001 fd8a8000000100000002000104736d74700b6575726f7472616e736974026e6c0000010001c01100020001000151800011036e696b0a7075626c6973686e6574c01dc0110002000100015180000b026e73026e6c036e657400c03100010001000151800004c1433c0a 29565 e9c00000000100000000000005666f72756d0e636f6d7075746572746f7461616c026e6c0000010001 e9c08000000100000003000305666f72756d0e636f6d7075746572746f7461616c026e6c0000010001c0120002000100015180000a036e733103696467c021c01200020001000151800006036e7332c039c01200020001000151800006036e7333c039c0350001000100015180000451af4646c04b0001000100015180000451af4647c05d00010001000151800004d5a0fde6 29566 865100000001000000000000037777770c6361666564656b616368656c026e6c0000010001 865180000001000000020002037777770c6361666564656b616368656c026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c01dc01000020001000151800006036e7332c035c0310001000100015180000450416028c04c00010001000151800004c356780c 29567 650300000001000000000000036d783306787334616c6c026e6c0000010001 650380000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29568 3afc00000001000000000000037777771261636164656d696573617373656e6865696d026e6c0000010001 3afc80000001000000020002037777771261636164656d696573617373656e6865696d026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec023c01000020001000151800006036e7332c03bc03700010001000151800004c29f4906c04f00010001000151800004c29fb004 29569 08a400000001000000000000036e733203666a66026e6c0000010001 08a480000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29570 605b00000001000000000000024e530743495354524f4e024e4c0000010001 605b80000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 29571 d5c600000001000000000000037777770472746c34026e6c0000010001 d5c680000001000000020001037777770472746c34026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c015c01000020001000151800011036e733207636c742d756661036e657400c02900010001000151800004c3c1ca77 29572 14e80000000100000000000006636861726973026e6c00001c0001 14e88000000100000002000006636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29573 08a500000001000000000000036e733103666a66026e6c0000010001 08a580000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29574 bd080000000100000000000003777777066d6f7070656e026e6c0000010001 bd088000000100000002000203777777066d6f7070656e026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 29575 306c0000000100000000000013736f6574657273626f7577746563686e69656b026e6c00000f0001 306c8000000100000002000213736f6574657273626f7577746563686e69656b026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc020c00c00020001000151800006036e7332c037c03400010001000151800004c26d0642c04c00010001000151800004c26d0963 29576 a24100000001000000000000037777770f616d61746575727069637475726573026e6c0000010001 a24180000001000000020000037777770f616d61746575727069637475726573026e6c0000010001c01000020001000151800017036e73310d696e746572726567697374657203636f6d00c01000020001000151800010026e730a646f6d65696e686f7374c020 29577 e32b00000001000000000000037777770a63642d686f65736a6573026e6c0000010001 e32b80000001000000030002037777770a63642d686f65736a6573026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 29578 dfee000000010000000000000a74656d706f2d7465616d026e6c00000f0001 dfee800000010000000300000a74656d706f2d7465616d026e6c00000f0001c00c0002000100015180001c09646e733030303030310367656e0872616e647374616403636f6d00c00c0002000100015180000c09646e73303030303032c035c00c0002000100015180000d036e7332036b706e036e657400 29579 a1aa000000010000000000000d6d696e69736576656e636c7562026e6c0000010001 a1aa800000010000000200020d6d696e69736576656e636c7562026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c01ac00c00020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 29580 83cd0000000100000000000006686f73742d330f636f6e73756d656e74656e626f6e640564656d6f6e026e6c0000010001 83cd8000000100000003000206686f73742d330f636f6e73756d656e74656e626f6e640564656d6f6e026e6c0000010001c02300020001000151800006036e7331c023c02300020001000151800006036e7332c023c0230002000100015180000f036e73320564656d6f6e036e657400c03d00010001000151800004c29f4906c04f00010001000151800004c29fb004 29581 65ee00000001000000000000067365617263680465626179026e6c0000010001 65ee80000001000000020000067365617263680465626179026e6c0000010001c013000200010001518000140963726f636f64696c65046562617903636f6d00c0130002000100015180000b087061636966696572c03b 29582 5a1800000001000000000000034e533203485655026e6c0000010001 5a1880000001000000030003034e533203485655026e6c0000010001c0100002000100015180000906776174736f6ec010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800002c00cc0280001000100015180000491592603c03d00010001000151800004c0576a65c00c0001000100015180000491595303 29583 d6cb00000001000000000000034e533203485655026e6c0000260001 d6cb80000001000000030003034e533203485655026e6c0000260001c0100002000100015180000906776174736f6ec010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800002c00cc0280001000100015180000491592603c03d00010001000151800004c0576a65c00c0001000100015180000491595303 29584 283b0000000100000000000006574154534f4e03485655026e6c0000010001 283b8000000100000003000306574154534f4e03485655026e6c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c01300020001000151800006036e7332c013c00c0001000100015180000491592603c03900010001000151800004c0576a65c0530001000100015180000491595303 29585 04b00000000100000000000006574154534f4e03485655026e6c0000260001 04b08000000100000003000306574154534f4e03485655026e6c0000260001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c01300020001000151800006036e7332c013c00c0001000100015180000491592603c03900010001000151800004c0576a65c0530001000100015180000491595303 29586 02870000000100000000000004696b6361026e6c00001c0001 02878000000100000002000104696b6361026e6c00001c0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c011c03e00010001000151800004c2860043 29587 d3820000000100000000000003777777046b726577026e6c0000010001 d3828000000100000003000003777777046b726577026e6c0000010001c01000020001000151800011036e733107696c63616d706f03636f6d00c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02d 29588 2aad0000000100000000000003706f70066865746e6574026e6c0000010001 2aad8000000100000003000303706f70066865746e6574026e6c0000010001c0100002000100015180000b046e73303803777873c017c01000020001000151800007046e733039c030c01000020001000151800006036e7334c030c02b00010001000151800004c3790128c04200010001000151800004c3790143c05500010001000151800004d5ef9a65 29589 b06f0000000100000000000006776468303131066e7434616c6c026e6c0000010001 b06f8000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 29590 16c00000000100000000000009652d6c756e61746963026e6c0000010001 16c08000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 29591 391700000001000000000000036e733503777873026e6c0000010001 391780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 29592 f03f0000000100000000000008657361636f6d343405657374656303657361026e6c0000010001 f03f8000000100000003000008657361636f6d343405657374656303657361026e6c0000010001c01b0002000100015180000e04646e73310365736103696e7400c01b0002000100015180000704646e7332c038c01b0002000100015180000704646e7333c038 29593 50020000000100000000000003707265096c696d627572676572026e6c0000010001 50028000000100000002000203707265096c696d627572676572026e6c0000010001c0100002000100015180000b036e73310477656233c01ac01000020001000151800006036e7332c032c02e00010001000151800004d436240ec04500010001000151800004c2b262ef 29594 640a0000000100000000000006636861726973026e6c0000ff0001 640a8000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29595 701500000001000000000000036e733203757063026e6c0000010001 701580000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 29596 21b0000000010000000000000377777712766f726d612d6575726f70612d72616d656e026e6c0000010001 21b0800000010000000200020377777712766f726d612d6575726f70612d72616d656e026e6c0000010001c0100002000100015180000e036e733107647265636f6d6dc023c01000020001000151800006036e7332c03bc03700010001000151800004d5c42546c05100010001000151800004d5c42547 29597 30c500000001000000000000046d61696c076575726f6e6574026e6c0000010001 30c580000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 29598 6bf30000000100000000000003777777106e767a2d7a69656b656e6875697a656e026e6c0000010001 6bf38000000100000002000203777777106e767a2d7a69656b656e6875697a656e026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c021c01000020001000151800006036e7332c038c03500010001000151800004c3402003c04e00010001000151800004c340202b 29599 8de300000001000000000000037777770e736368616b656c61726d62616e64026e6c0000010001 8de380000001000000020000037777770e736368616b656c61726d62616e64026e6c0000010001c0100002000100015180000c026e7306766576696461c01fc01000020001000151800006036e7332c036 29600 33030000000100000000000005646e732d31056c61646f74026e6c0000010001 33038000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29601 b3220000000100000000000005646e732d32056c61646f74026e6c0000010001 b3228000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29602 70df0000000100000000000008686f73746e616d650462696e640000100003 70df8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 29603 007b00000001000000000000036e7333076e6574666c6578026e6c0000010001 007b80000001000000030003036e7333076e6574666c6578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c26d5ba8c03e00010001000151800004507f2f25c00c00010001000151800004507ede20 29604 772a000000010000000000000861647365727665720677656d6e6574026e6c0000010001 772a800000010000000300030861647365727665720677656d6e6574026e6c0000010001c01500020001000151800010036e733109776973652d67757973c01cc01500020001000151800006036e7330c034c01500020001000151800006036e7332c034c03000010001000151800004d413cd91c04c00010001000151800004d413cd8fc05e00010001000151800004c16d7a3e 29605 8a5c0000000100000000000005646e732d31056c61646f74026e6c0000010001 8a5c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29606 f32b0000000100000000000005646e732d32056c61646f74026e6c0000010001 f32b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29607 123300000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 123380000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29608 33a900000001000000000000036e73320f444f4d41494e2d5245474953545259026e6c00001c0001 33a980000001000000030002036e73320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29609 02fb00000001000000000000026e730f444f4d41494e2d5245474953545259026e6c00001c0001 02fb80000001000000030002026e730f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 29610 0c1e000000010000000000000861647365727665720677656d6e6574026e6c0000010001 0c1e800000010000000300030861647365727665720677656d6e6574026e6c0000010001c01500020001000151800010036e733109776973652d67757973c01cc01500020001000151800006036e7330c034c01500020001000151800006036e7332c034c03000010001000151800004d413cd91c04c00010001000151800004d413cd8fc05e00010001000151800004c16d7a3e 29611 63db00000001000000000000056d656c7661026e6c00000f0001 63db84030001000000010000056d656c7661026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 29612 7b7000000001000000000000026e73096379626572636f6d6d026e6c0000010001 7b7080000001000000030003026e73096379626572636f6d6d026e6c0000010001c00f00020001000151800017036e733110736361726c65742d696e7465726e6574c019c00f00020001000151800006036e7332c031c00f00020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 29613 b75900000001000000000000036e7332096379626572636f6d6d026e6c0000010001 b75980000001000000030003036e7332096379626572636f6d6d026e6c0000010001c01000020001000151800017036e733110736361726c65742d696e7465726e6574c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ccc302c05100010001000151800004d5ccc303c06300010001000151800004c277e953 29614 6c7b000000010000000000000e6d6f6475732d6361746572696e67026e6c00000f0001 6c7b800000010000000200020e6d6f6475732d6361746572696e67026e6c00000f0001c00c0002000100015180000f036e73330874656c6562797465c01bc00c00020001000151800006036e7334c033c02f00010001000151800004d5d38115c04a00010001000151800004d5d38116 29615 8e7500000001000000000000037777770c68617262657273766f6c766f026e6c0000010001 8e7584030001000000010000037777770c68617262657273766f6c766f026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 29616 1ef700000001000000000000036e7332076e656473746174026e6c0000010001 1ef780000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29617 65a600000001000000000000036e7332076e656473746174026e6c0000260001 65a680000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29618 b2d300000001000000000000036e7334076e656473746174026e6c0000010001 b2d380000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29619 644900000001000000000000036e7334076e656473746174026e6c0000260001 644980000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 29620 659800000001000000000000036673310b776567656e626f757769630662616d6e626d026e6c0000010001 659880000001000000020000036673310b776567656e626f757769630662616d6e626d026e6c0000010001c01c0002000100015180000d036e7331036b706e036e657400c01c00020001000151800006036e7332c03b 29621 07fb0010000100000000000103777777087063616b74696566026e6c00000100010000290800000080000000 07fb8000000100000002000303777777087063616b74696566026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d09630000291000000000000000 29622 57840000000100000000000003777777086164756c74746770026e6c0000010001 57848000000100000003000203777777086164756c74746770026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 29623 f896000000010000000000000872696a7377696a6b026e6c00000f0001 f896800000010000000200010872696a7377696a6b026e6c00000f0001c00c0002000100015180000e036e7331076e6564636f6d70c015c00c00020001000151800011036e7332076e6564636f6d70036f726700c02900010001000151800004c3c1a80d 29624 adff0000000100000000000004646e73320471776562026e6c0000010001 adff8000000100000002000204646e73320471776562026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 29625 8d800000000100000000000004646e73310471776562026e6c0000010001 8d808000000100000002000204646e73310471776562026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 29626 ba7b0000000100000000000005616e67656c0c726567696f706f7274616c73026e6c0000010001 ba7b8000000100000003000305616e67656c0c726567696f706f7274616c73026e6c0000010001c01200020001000151800010036e733109776973652d67757973c01fc01200020001000151800006036e7330c037c01200020001000151800006036e7332c037c03300010001000151800004d413cd91c04f00010001000151800004d413cd8fc06100010001000151800004c16d7a3e 29627 8c8b00000001000000000000096d61676e6574726f6e0c696e7465726e657473686f70026e6c0000010001 8c8b80000001000000020002096d61676e6574726f6e0c696e7465726e657473686f70026e6c0000010001c0160002000100015180000d026e730763697374726f6ec023c01600020001000151800006036e7332c03ac037000100010001518000043ed81f37c050000100010001518000043ed81f38 29628 c9da00100001000000000001034e53320743495354524f4e024e4c00000100010000290800000000000000 c9da80000001000000020003034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 29629 71ca000000010000000000000a76726f6d6463632d636d026e6c00000f0001 71ca840300010000000100000a76726f6d6463632d636d026e6c00000f0001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 29630 915800000001000000000000066865746e6574026e6c0000ff0001 915880000001000000030003066865746e6574026e6c0000ff0001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 29631 e4ed00000001000000000000034e53320743495354524f4e024e4c0000010001 e4ed80000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 29632 5a9d000000010000000000000e6472756b6b6572696a2d6d6f6e73026e6c00001c0001 5a9d800000010000000200000e6472756b6b6572696a2d6d6f6e73026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c035 29633 d4160000000100000000000004666e6574026e6c0000010001 d4168000000100000002000104666e6574026e6c0000010001c00c0002000100015180000704666e6574c00cc00c0002000100015180000d036e7332036b706e036e657400c02500010001000151800004c1ac2b01 29634 d5810000000100000000000003777777066c6f6e646f6e026e6c0000010001 d5818000000100000003000003777777066c6f6e646f6e026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02f 29635 b398000000010000000000000565666e657406787334616c6c026e6c0000010001 b398800000010000000300020565666e657406787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 29636 d2b6000000010000000000000763736e747372760763736e74737276026e6c0000010001 d2b6840300010000000100000763736e747372760763736e74737276026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 29637 799a00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 799a80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 29638 ebc60000000100000000000003777777086c65747373746174026e6c0000010001 ebc68000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 29639 1e2200100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 1e2280000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 29640 94eb00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 94eb80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 29641 053000000001000000000000037777770667616d656e75026e6c0000010001 053080000001000000030000037777770667616d656e75026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c030c01000020001000151800007046e733033c030 29642 589d00000001000000000000037777770d7472757374796f757265796573026e6c0000010001 589d80000001000000030000037777770d7472757374796f757265796573026e6c0000010001c01000020001000151800014036e73310a616c6c646f6d61696e7303636f6d00c01000020001000151800006036e7333c036c01000020001000151800006036e7334c036 29643 74e200000001000000000000026e7303616d730874656c6567617465026e6c0000010001 74e280000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 29644 9db600000001000000000000026e730469776179026e6c0000010001 9db680000001000000020001026e730469776179026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000c026e730364796e036f726700c00c00010001000151800004c14e1e04 29645 6e970000000100000000000006636f6e73756c026e6c00000f0001 6e978000000100000002000006636f6e73756c026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 29646 676100000001000000000000056d61696c320775747265636874026e6c0000010001 676180000001000000020000056d61696c320775747265636874026e6c0000010001c0120002000100015180000b026e73026e6c036e657400c0120002000100015180001206617574683630026e73026e6c027575c034 29647 975400000001000000000000036e73320c616c6c736f6c7574696f6e73026e6c0000010001 975480000001000000020001036e73320c616c6c736f6c7574696f6e73026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000d036e7332036b706e036e657400c03100010001000151800004c1ad1574 29648 cbaa00000001000000000000036e73320c616c6c736f6c7574696f6e73026e6c0000260001 cbaa80000001000000020001036e73320c616c6c736f6c7574696f6e73026e6c0000260001c01000020001000151800006036e7331c010c0100002000100015180000d036e7332036b706e036e657400c03100010001000151800004c1ad1574 29649 eb580000000100000000000005646e732d31056c61646f74026e6c0000010001 eb588000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29650 336e0000000100000000000003777777046b6f7469026e6c0000010001 336e8000000100000002000003777777046b6f7469026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 29651 1cf6000000010000000000000377777711636f6e7261642d656c656374726f6e6963026e6c0000010001 1cf6800000010000000200020377777711636f6e7261642d656c656374726f6e6963026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c022c01000020001000151800006036e7332c03ac0360001000100015180000450416028c05100010001000151800004c356780c 29652 ffa500000001000000000000037777770972616d737465696a6e026e6c0000010001 ffa580000001000000020002037777770972616d737465696a6e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 29653 0d3d000000010000000000000377777706676f2d677073026e6c0000010001 0d3d800000010000000200000377777706676f2d677073026e6c0000010001c01000020001000151800014036e73310a6d69686f736e65742d3603636f6d00c01000020001000151800006036e7332c02f 29654 397b000000010000000000000663616e646561026e6c0000ff0001 397b800000010000000300030663616e646561026e6c0000ff0001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 29655 5c370000000100000000000003777777076c6f6e67613539026e6c0000010001 5c378000000100000002000003777777076c6f6e67613539026e6c0000010001c0100002000100015180000f036e7331056d79736d74036e657400c01000020001000151800006036e7332c030 29656 a6a20000000100000000000011716e2d3231332d37332d3137362d31303108717569636b6e6574026e6c0000010001 a6a28000000100000003000211716e2d3231332d37332d3137362d31303108717569636b6e6574026e6c0000010001c01e00020001000151800011036e73310a6d756c74696b6162656cc027c01e00020001000151800006036e7332c03fc01e00020001000151800014036e73300a6d756c74696b6162656c036e657400c03b0001000100015180000450f2e002c0580001000100015180000450f2e006 29657 4db20000000100000000000006666f72616c6c026e6c00000f0001 4db28000000100000002000206666f72616c6c026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 29658 749300000001000000000000037777770b6265726b656e686f727374026e6c0000010001 749380000001000000020000037777770b6265726b656e686f727374026e6c0000010001c01000020001000151800012036e733109686f737467726f7570026e7500c01000020001000151800006036e7332c034 29659 22eb00000001000000000000037777770d64696a6b2d76617374676f6564026e6c0000010001 22eb80000001000000020000037777770d64696a6b2d76617374676f6564026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c039 29660 c76400000001000000000000037777771768696c646572696e672d626c696b656d62616c6c616765026e6c0000010001 c76480000001000000020002037777771768696c646572696e672d626c696b656d62616c6c616765026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec028c01000020001000151800006036e7332c040c03c00010001000151800004c29f4906c05400010001000151800004c29fb004 29661 b86d000000010000000000000b6b61617274656e68756973026e6c00000f0001 b86d800000010000000300030b6b61617274656e68756973026e6c00000f0001c00c00020001000151800009036e7331027a73c018c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030c02c00010001000151800004d5ef829fc04100010001000151800004d5ef8005c05300010001000151800004d5ef82a0 29662 7ad80010000100000000000003777777106d696a6e687575727375627369646965026e6c0000010001 7ad88000000100000002000103777777106d696a6e687575727375627369646965026e6c0000010001c0100002000100015180000e036e7331076d696e76726f6dc021c01000020001000151800006036e7332c039c0350001000100015180000493b51441 29663 08d800000001000000000000037777770b736578706f736974696573026e6c0000010001 08d880000001000000020002037777770b736578706f736974696573026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01cc01000020001000151800006036e7332c034c03000010001000151800004d4f1210bc04e00010001000151800004d4f1210c 29664 d7f400000001000000000000026e7304696d636f026e6c0000010001 d7f480000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 29665 de3000000001000000000000046d61696c127773702d6175746f6d617469736572696e67026e6c0000010001 de3080000001000000020002046d61696c127773702d6175746f6d617469736572696e67026e6c0000010001c01100020001000151800012036e73310b676c6f62616c7369746573c024c01100020001000151800006036e7332c03cc03800010001000151800004d4cce37ac05600010001000151800004d94d8b0c 29666 ae5600000001000000000000037777770472656f6e026e6c0000010001 ae5680000001000000020000037777770472656f6e026e6c0000010001c01000020001000151800017036e73310d64757463687365727669636573036e657400c01000020001000151800006036e7332c02d 29667 c271000000010000000000000c7175657374696f6e6d617263026e6c00000f0001 c271800000010000000200020c7175657374696f6e6d617263026e6c00000f0001c00c00020001000151800014036e73310d706f7765727365727665723230c019c00c00020001000151800006036e7332c031c02d000100010001518000045104711dc04d000100010001518000045104711e 29668 099800000001000000000000036e733203666a66026e6c0000010001 099880000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29669 099900000001000000000000036e733103666a66026e6c0000010001 099980000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29670 5709000000010000000000000767686f727a687a026e6c00000f0001 5709800000010000000200000767686f727a687a026e6c00000f0001c00c0002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c00c00020001000151800015026e730f796f75726e616d65686f7374696e67c03e 29671 eb3c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 eb3c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29672 6b32000000010000000000000377777708646572696d626f65026e6c0000010001 6b32800000010000000200020377777708646572696d626f65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 29673 583000000001000000000000037777770b64796e616d6f737461616c026e6c0000010001 583080000001000000030001037777770b64796e616d6f737461616c026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 29674 21630000000100000000000005646e732d31056c61646f74026e6c0000010001 21638000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29675 af6b0000000100000000000005646e732d32056c61646f74026e6c0000010001 af6b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29676 f4740000000100000000000003777777086264736d61676963026e6c0000010001 f4748000000100000002000003777777086264736d61676963026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c019c0100002000100015180000805646e732d32c033 29677 18ae00000001000000000000036e733106706167696e61026e6c0000010001 18ae80000001000000030003036e733106706167696e61026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 29678 974700000001000000000000036e733206706167696e61026e6c0000010001 974780000001000000030003036e733206706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02b000100010001518000043e45a282c00c000100010001518000043e45a283c04b000100010001518000043e45a284 29679 02b900000001000000000000036e733306706167696e61026e6c0000010001 02b980000001000000030003036e733306706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02b000100010001518000043e45a282c03d000100010001518000043e45a283c00c000100010001518000043e45a284 29680 944f0000000100000000000006706167696e61026e6c00000f0001 944f8000000100000003000306706167696e61026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc027000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 29681 28ed00000001000000000000066d6978666978026e6c00000f000100 28ed80000001000000020002066d6978666978026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c013c00c00020001000151800006036e7332c02ac02700010001000151800004d453c005c04500010001000151800004d453c006 29682 348f00000001000000000000146e69657577736272696576656e73657276696365026e6c00000f0001 348f80000001000000030001146e69657577736272696576656e73657276696365026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 29683 09b000000001000000000000036e733203666a66026e6c0000010001 09b080000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29684 09b100000001000000000000036e733103666a66026e6c0000010001 09b180000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29685 7cf4000000010000000000000c696b68656265656e69646565026e6c0000010001 7cf4800000010000000200000c696b68656265656e69646565026e6c0000010001c00c0002000100015180001b036e733211706f7369746976652d696e7465726e657403636f6d00c00c00020001000151800006036e7333c031 29686 06b700100001000000000001036e733207737572666e6574026e6c00000100010000290800000080000000 06b780000001000000040004036e733207737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a650000291000000000000000 29687 cf6600000001000000000000037777770e706370726976652d706167696e61026e6c0000010001 cf6680000001000000020002037777770e706370726976652d706167696e61026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01fc01000020001000151800006036e7332c036c03300010001000151800004d4cb0e42c04e00010001000151800004d4cb1221 29688 a52b00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 a52b80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29689 833200000001000000000000153132332d7765622d686f73742d726573656c6c6572026e6c0000010001 833280000001000000020000153132332d7765622d686f73742d726573656c6c6572026e6c0000010001c00c00020001000151800012036e7331087365727665722d3203636f6d00c00c00020001000151800006036e7332c03a 29690 d83900100001000000000001013603313434033137360331393307696e2d61646472046172706100000c00010000290800000000000000 d83980020001000000000001013603313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 29691 46ea001000010000000000000c74617869626f6f6e73747261026e6c00001c0001 46ea800000010000000200000c74617869626f6f6e73747261026e6c00001c0001c00c00020001000151800023097765626d696e642d3108637573746f6d6572026e6c07656173796e6574036e657400c00c0002000100015180000d0763617466697368026e73c040 29692 9b880000000100000000000015616c6c65736f7665727374657272656e6b756e6465026e6c0000010001 9b888000000100000002000015616c6c65736f7665727374657272656e6b756e6465026e6c0000010001c00c00020001000151800015026e730c70656e67776562736974657303636f6d00c00c00020001000151800006036e7331c039 29693 3a350010000100000000000106636861726973026e6c0000ff00010000290800000080000000 3a358000000100000002000106636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a0000291000000000000000 29694 6a1200000001000000000000026e7306766576696461026e6c0000010001 6a1280000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 29695 3c9200000001000000000000096d797265616c697479026e6c00001c0001 3c9280000001000000020000096d797265616c697479026e6c00001c0001c00c00020001000151800014036e73310a6d69686f736e65742d3803636f6d00c00c00020001000151800006036e7332c02e 29696 ced60000000100000000000007616d67726f6570026e6c00000f0001 ced68000000100000003000307616d67726f6570026e6c00000f0001c00c0002000100015180000f036e7331086e6f766178657373c014c00c00020001000151800006036e7332c02cc00c00020001000151800006036e7333c02cc02800010001000151800004d5c98015c04300010001000151800004d5c9bf12c05500010001000151800004d5ef9c26 29697 f53c0000000100000000000005646e732d31056c61646f74026e6c0000010001 f53c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29698 0f1100000001000000000000026e73076e656473746174026e6c0000010001 0f1180000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29699 654f0000000100000000000009646573746172746572026e6c0000ff0001 654f8000000100000002000209646573746172746572026e6c0000ff0001c00c0002000100015180000d036e7331066e6c74726565c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d4b20403c04300010001000151800004d5881e45 29700 ec9e00000001000000000000037777770f6a6565636874656c65656674696a64026e6c0000010001 ec9e80000001000000020001037777770f6a6565636874656c65656674696a64026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c020c01000020001000151800011036e7332076e6564636f6d70036f726700c03400010001000151800004c3c1a80d 29701 48a40000000100000000000005646e732d31056c61646f74026e6c0000010001 48a48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29702 0aa900000001000000000000036e733203666a66026e6c0000010001 0aa980000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29703 0aaa00000001000000000000036e733103666a66026e6c0000010001 0aaa80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29704 4a99000000010000000000000974616e676572696e65026e6c00000f0001 4a99800000010000000200010974616e676572696e65026e6c00000f0001c00c0002000100015180000d026e7307696e746f756368c016c00c00020001000151800010026e7307696e746f756368036e657400c02a00010001000151800004d413c001 29705 49d900000001000000000000136465696e746572696575727469706765766572026e6c00000f0001 49d980000001000000020002136465696e746572696575727469706765766572026e6c00000f0001c00c00020001000151800012036e73310b706c7573686f7374696e67c020c00c00020001000151800006036e7332c038c03400010001000151800004d994ae77c052000100010001518000045054ea06 29706 f50e00000001000000000000037777770d652d70726f6772616d6d657572026e6c0000010001 f50e80000001000000020002037777770d652d70726f6772616d6d657572026e6c0000010001c0100002000100015180000c036e7331056d756e6368c01ec01000020001000151800006036e7332c036c03200010001000151800004d5f73c96c04a00010001000151800004d5f73c97 29707 672e00000001000000000000013603313434033137360331393307696e2d61646472046172706100000c0001 672e80020001000000000000013603313434033137360331393307696e2d61646472046172706100000c0001 29708 d5da00000001000000000000026e73066863636e6574026e6c0000010001 d5da80000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 29709 cae70000000100000000000006636861726973026e6c0000ff0001 cae78000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29710 d1930000000100000000000003777777067365786d6578026e6c0000010001 d1938000000100000002000203777777067365786d6578026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac017c01000020001000151800006036e7332c02fc02b00010001000151800004d5efa011c04600010001000151800004d5efa075 29711 5e9a00000001000000000000037777770a7665726c656e67696e67026e6c0000010001 5e9a80000001000000020000037777770a7665726c656e67696e67026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c036 29712 7835000000010000000000000462666363026e6c00000f0001 7835800000010000000200020462666363026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 29713 36800000000100000000000009652d6c756e61746963026e6c0000010001 36808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 29714 f22300000001000000000000037777770767617a656c6c65026e6c0000010001 f22380000001000000030003037777770767617a656c6c65026e6c0000010001c0100002000100015180000e076e73617574683103626974c018c0100002000100015180000a076e736175746832c034c0100002000100015180000a076e736175746833c034c02c00010001000151800004d5880c33c04600010001000151800004d5880c3bc05c00010001000151800004d4ccc00b 29715 34d80000000100000000000005646e732d31056c61646f74026e6c0000010001 34d88000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29716 364b000000010000000000000663616e646561026e6c0000ff0001 364b800000010000000300030663616e646561026e6c0000ff0001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 29717 0b2f00000001000000000000056961656876026e6c00000f0001 0b2f80000001000000020002056961656876026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c012c00c00020001000151800006036e7332c02ac02600010001000151800004d43d0f08c04400010001000151800004d43d19e2 29718 0332000000010000000000000669626d61696c026e6c00000f0001 0332800000010000000200000669626d61696c026e6c00000f0001c00c00020001000151800014036e7331026e6c07656e6572676973036e657400c00c00020001000151800006036e7332c02b 29719 8d3f00000001000000000000095f6b65726265726f73045f746370026463065f6d736463730a64766d656469616b6773026e6c0000060001 8d3f84030001000000010000095f6b65726265726f73045f746370026463065f6d736463730a64766d656469616b6773026e6c0000060001c03000060001000038400036026e730f646f6d61696e2d7265676973747279c0300a686f73746d6173746572c0470bf1e540000070800000384000278d0000003840 29720 994b00000001000000000000036e733103706777026e6c0000010001 994b80000001000000020002036e733103706777026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e818832c03600010001000151800004d4ccc621 29721 d59700000001000000000000036e733203706777026e6c0000010001 d59780000001000000020002036e733203706777026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc028000100010001518000043e818832c00c00010001000151800004d4ccc621 29722 f1230000000100000000000003777777046b6e6873026e6c0000010001 f1238000000100000002000203777777046b6e6873026e6c0000010001c01000020001000151800012036e73310b72656e61697373616e6365c015c01000020001000151800006036e7332c02dc02900010001000151800004d4ccc4efc04700010001000151800004d4ccc4f0 29723 2c8900000001000000000000036e73340767617574656e67026e6c0000010001 2c8980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29724 2c9600000001000000000000036e73330767617574656e67026e6c0000010001 2c9680000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29725 cd3f0000000100000000000008737073656172636804696c7365026e6c0000010001 cd3f8000000100000003000308737073656172636804696c7365026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c02e000100010001518000043e45a282c040000100010001518000043e45a283c052000100010001518000043e45a284 29726 1add00000001000000000000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d736463730d686172746f672d696e7465726e026e6c0000060001 1add84030001000000010000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d736463730d686172746f672d696e7465726e026e6c0000060001c05000060001000038400036026e730f646f6d61696e2d7265676973747279c0500a686f73746d6173746572c0670bf1e540000070800000384000278d0000003840 29727 a30900000001000000000000026e73076e656473746174026e6c0000010001 a30980000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29728 a95c00000001000000000000036e7333076e656473746174026e6c0000010001 a95c80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 29729 8549000000010000000000000b626f6c616e647061727479026e6c00000f0001 8549800000010000000200000b626f6c616e647061727479026e6c00000f0001c00c0002000100015180000e036e73310464697661036e657400c00c00020001000151800006036e7332c030 29730 564828000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730a64766d656469616b6773026e6c000021000100000258001d0000006400580764766d746b67730a64766d656469616b6773026e6c00 5648a8040000000000000000 29731 0aa200000001000000000000036e733203666a66026e6c0000010001 0aa280000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29732 a2270000000100000000000003777777126c65756b7765726b74776f726c6477696465026e6c0000010001 a2278000000100000003000203777777126c65756b7765726b74776f726c6477696465026e6c0000010001c0100002000100015180000d036e733106776964657873c023c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c03bc03700010001000151800004d4ccc0fcc06c000100010001518000043efa0703 29733 0aa300000001000000000000036e733103666a66026e6c0000010001 0aa380000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 29734 ef6a0000000100000000000007636f6e74656e74026e6c00000f0001 ef6a8000000100000002000007636f6e74656e74026e6c00000f0001c00c00020001000151800016046e7330310b63726579667367726f757003636f6d00c00c00020001000151800007046e733032c02d 29735 571600000001000000000000037777770b667265646d6f746f72656e026e6c0000010001 571680000001000000020000037777770b667265646d6f746f72656e026e6c0000010001c0100002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0100002000100015180000d077669312d6e7330026174c03b 29736 5f6f000000010000000000000377777705647579656e026e6c0000010001 5f6f800000010000000200000377777705647579656e026e6c0000010001c01000020001000151800015046c796e780a737061726b6c6569637403636f6d00c0100002000100015180000906646f7261646fc02f 29737 000000007002400069e100000204056401010402 000080010000000000000000 29738 bb3c0000000100000000000003777777066465736c6574026e6c0000010001 bb3c8000000100000002000003777777066465736c6574026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c02f 29739 3ae3000000010000000000000377777709626f6f676965626172026e6c0000010001 3ae3800000010000000200000377777709626f6f676965626172026e6c0000010001c01000020001000151800010036e7331066969686f73740362697a00c01000020001000151800006036e7332c032 29740 576f0000000100000000000005646e732d31056c61646f74026e6c0000010001 576f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29741 13fa0000000100000000000005646e732d32056c61646f74026e6c0000010001 13fa8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29742 6d8500000001000000000000036e7332056132303030026e6c0000010001 6d8580000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 29743 a1fe0000000100000000000004777777330976657267656c696a6b026e6c0000010001 a1fe8000000100000003000204777777330976657267656c696a6b026e6c0000010001c0110002000100015180000d036e733106776964657873c01bc01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 29744 5f1900000001000000000000116b616e746f6f726d657562656c6c616e64026e6c00000f0001 5f1980000001000000020002116b616e746f6f726d657562656c6c616e64026e6c00000f0001c00c0002000100015180001005766164657207626f736b616e74c01ec00c0002000100015180000a036e7332036e7873c01ec03200010001000151800004d973c27ac04e00010001000151800004d973c102 29745 b6630195501040b0dd9c0000000000000000 b66380010000000000000000 29746 2c8a00000001000000000000037777770767617a656c6c65026e6c0000010001 2c8a80000001000000030003037777770767617a656c6c65026e6c0000010001c0100002000100015180000e076e73617574683103626974c018c0100002000100015180000a076e736175746832c034c0100002000100015180000a076e736175746833c034c02c00010001000151800004d5880c33c04600010001000151800004d5880c3bc05c00010001000151800004d4ccc00b 29747 b6630195501840b030e7000000900ca7000000010001000000000f313136383233313130343533302d330000f900010f313136383233313130343533302d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403afdf8403c4f780003000000314e544c4d535350000100000097b200e00a000a0027000000070007002000000044564d544b475344564d454449414b47530000 b66380010000000000000000 29748 a5080000000100000000000005646e732d31056c61646f74026e6c0000010001 a5088000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29749 420800000001000000000000026e73036d6c63026e6c0000010001 420880000001000000030003026e73036d6c63026e6c0000010001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 29750 43540000000100000000000005646e732d32056c61646f74026e6c0000010001 43548000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29751 b66301a3501140a2dd090000000000000000 b66380010000000000000000 29752 a50c0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 a50c8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29753 01a128000001000200000000026e6c00000600010777696e326b7063066b70746573740877696e326b73716c026e6c00000500fe000000000000c01400010001000000000004c0a81528 01a1a8040000000000000000 29754 0000000070024000ecb600000204056401010402 000080010000000000000000 29755 7a450000000100000000000003626c3102626c06787334616c6c026e6c0000010001 7a458000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29756 b66301a4501040a2dd080000000000000000 b66380010000000000000000 29757 08770000000100000000000005646e732d31056c61646f74026e6c0000010001 08778000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29758 ed8e0000000100000000000005646e732d32056c61646f74026e6c0000010001 ed8e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29759 000000007002fc00a4280000020405b401010402 000080010000000000000000 29760 b663a87e501040b0b9880000000000000000 29761 f64d0000000100000000000003777777086575726f6b6c696b026e6c0000010001 f64d8000000100000002000103777777086575726f6b6c696b026e6c0000010001c0100002000100015180000e026e73086575726f636c6978c019c01000020001000151800012036e7332086575726f636c697803636f6d00c02d00010001000151800004d47bc685 29762 b66453ed5010fc00c68a0000000000000000 b664d3e40000000000000000 29763 be9800000001000000000000036e7331076970746f776572026e6c0000010001 be9880000001000000020002036e7331076970746f776572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043ecc4065c03a000100010001518000043ecc4066 29764 b66453ed5018fc0070e60000008abe78000000010001000000000e3939363433323431323639302d330000f900010e3939363433323431323639302d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403af9c5403c4b4500030000002d4e544c4d535350000100000097b200e00600060027000000070007002000000057494e324b50434b50544553540000 b664d3e40000000000000000 29765 2fc900000001000000000000036e7332076970746f776572026e6c0000010001 2fc980000001000000020002036e7332076970746f776572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043ecc4065c00c000100010001518000043ecc4066 29766 7bd1000000010000000000000e6b65726d69736d6167617a696a6e026e6c0000010001 7bd1800000010000000200000e6b65726d69736d6167617a696a6e026e6c0000010001c00c0002000100015180000f036e7331086e6574736861726bc01bc00c00020001000151800006036e7332c033 29767 b66453fb5011fbf2c5fd0000000000000000 b664d3f40000000000000000 29768 40ed000000010000000000000870616c6d636c7562026e6c0000010001 40ed800000010000000300030870616c6d636c7562026e6c0000010001c00c00020001000151800010036e733109657863657074696f6ec015c00c00020001000151800006036e7332c02dc00c00020001000151800006036e7333c02dc02900010001000151800004d5c9a38cc04500010001000151800004d5c9a38dc05700010001000151800004d5c9af03 29769 b663a87e501840b0d705000000904375000000010001000000000f313136383233313130343533302d320000f900010f313136383233313130343533302d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afdf8403c4f780003000000314e544c4d535350000100000097b200e00a000a0027000000070007002000000044564d544b475344564d454449414b47530000 29770 961300000001000000000000046d61696c0d627269746973687363686f6f6c026e6c0000010001 961380000001000000020000046d61696c0d627269746973687363686f6f6c026e6c0000010001c01100020001000151800010026e730777697265687562036e657400c01100020001000151800006036e7332c036 29771 b66453fc5010fbf2c5fc0000000000000000 b664d3f40000000000000000 29772 000000007002fc00de6d0000020405b401010402 000080010000000000000000 29773 b6654c635010fc0008590000000000000000 b665cc640000000000000000 29774 b663a88c501140a2b8f50000000000000000 29775 b6654c635018fc00072d0000008a6c00000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af9c5403c4b4500030000002d4e544c4d535350000100000097b200e00600060027000000070007002000000057494e324b50434b50544553540000 b665cc640000000000000000 29776 00000000700240002f9000000204056401010402 000080010000000000000000 29777 b8ed00100001000000000001066170616368650962617365667265616b026e6c00000100010000290800000000000000 b8ed80000001000000030004066170616368650962617365667265616b026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c03100010001000151800004c32fdc83c042000100010001518000045054f998c05400010001000151800004c16d7adb0000291000000000000000 29778 b6654c715011fbf207cc0000000000000000 b665cc740000000000000000 29779 1aa000000001000000000000037777770d64656b726f65676f6e6c696e65026e6c0000010001 1aa080000001000000020002037777770d64656b726f65676f6e6c696e65026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01ec01000020001000151800006036e7332c036c032000100010001518000045104580ac052000100010001518000045104601e 29780 b6654c725010fbf207cb0000000000000000 b665cc740000000000000000 29781 76040000000100000000000005746c6774650a7061797065726e657773026e6c0000010001 76048000000100000002000205746c6774650a7061797065726e657773026e6c0000010001c01200020001000151800010036e733109652d666163746f7279c01dc01200020001000151800006036e7332c035c03100010001000151800004c1fefe82c04d00010001000151800004c1feff82 29782 2bbd0000000100000000000006706f6e636172026e6c00001c0001 2bbd8000000100000002000006706f6e636172026e6c00001c0001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 29783 b16000000001000000000000046162656c0564656d6f6e026e6c00001c0001 b16080000001000000030002046162656c0564656d6f6e026e6c00001c0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 29784 25190000000100000000000007414c4255494c4403444c4c05626f6f6f72026e6c0000010001 25198403000100000001000007414c4255494c4403444c4c05626f6f6f72026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 29785 5d0e00000001000000000000037777770a686f6f6664746f72656e026e6c0000010001 5d0e80000001000000020002037777770a686f6f6664746f72656e026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 29786 b663a88d501040a2b8f40000000000000000 29787 000000007002fc0083840000020405b401010402 000080010000000000000000 29788 eb9200000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 eb9280000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 29789 879900000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 879980000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29790 b6663c2f501040b068ae0000000000000000 b666bc240000000000000000 29791 b666fe1c5010fc00fbb40000000000000000 29792 2df500000001000000000000046d61696c0c637261656e656e6265726768026e6c0000010001 2df580000001000000020002046d61696c0c637261656e656e6265726768026e6c0000010001c0110002000100015180000e036e73310768656262697a7ac01ec01100020001000151800006036e7332c036c03200010001000151800004c372eb42c04c000100010001518000043e320e91 29793 b666fe1c5018fc007cc80000008ae9c0000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af9c5403c4b4500030000002d4e544c4d535350000100000097b200e00600060027000000070007002000000057494e324b50434b50544553540000 29794 da66000000010000000000000b70726f64756374706c7573026e6c00000f0001 da66800000010000000200020b70726f64756374706c7573026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 29795 b666fe2a5011fbf2fb270000000000000000 29796 b666fe2b5010fbf2fb260000000000000000 29797 b6663c2f501840b04f5d000000907a43000000010001000000000f313136383233313130343533302d320000f900010f313136383233313130343533302d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403afdf8403c4f780003000000314e544c4d535350000100000097b200e00a000a0027000000070007002000000044564d544b475344564d454449414b47530000 b666bc240000000000000000 29798 3ca400000001000000000000036e73330767617574656e67026e6c0000010001 3ca480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29799 b9df00000001000000000000026e730673656e746961026e6c0000010001 b9df80000001000000020002026e730673656e746961026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c0001000100015180000450fd695ac03800010001000151800004d4cce917 29800 fc5500000001000000000000036e73320673656e746961026e6c0000010001 fc5580000001000000020002036e73320673656e746961026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b0001000100015180000450fd695ac00c00010001000151800004d4cce917 29801 b6663c3d501140a2681b0000000000000000 b666bc340000000000000000 29802 48d30000000100000000000006636861726973026e6c00000f0001 48d38000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29803 b0d5000000010000000000000b616c6d6572652d63697479026e6c0000010001 b0d5800000010000000200010b616c6d6572652d63697479026e6c0000010001c00c0002000100015180000d0368676e06787334616c6cc018c00c00020001000151800012036e73330b61747a2d686f7374696e67c018c04500010001000151800004d973c483 29804 6b60000000010000000000000477697368026e6c00000f0001 6b60800000010000000300020477697368026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c011c00c0002000100015180000704616e7332c02ac00c0002000100015180001404616e73330a74697363616c696e657402626500c02500010001000151800004c3f14d38c04000010001000151800004c3f13325 29805 b6663c3e501040a2681a0000000000000000 b666bc340000000000000000 29806 980a00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 980a80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29807 8b4000000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 8b4080000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29808 015300000001000000000000037777770b6b726f6f6e6b6f7a696a6e026e6c0000010001 015380000001000000020002037777770b6b726f6f6e6b6f7a696a6e026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01cc01000020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 29809 f371000000010000000000000c616c66612d636f6c6c656765026e6c0000010001 f371800000010000000200020c616c66612d636f6c6c656765026e6c0000010001c00c0002000100015180000d036e7331066e6c74726565c019c00c00020001000151800006036e7332c031c02d00010001000151800004d4b20403c04600010001000151800004d5881e45 29810 130d00000001000000000000037777770b776561746865726e657773026e6c00001c0001 130d80000001000000020002037777770b776561746865726e657773026e6c00001c0001c01000020001000151800009026e73036f6b65c01cc01000020001000151800006036e7332c033c03000010001000151800004c13acc3bc04500010001000151800004c13acc27 29811 bbc10000000100000000000003777777086575726f6b6c696b026e6c0000010001 bbc18000000100000002000103777777086575726f6b6c696b026e6c0000010001c0100002000100015180000e026e73086575726f636c6978c019c01000020001000151800012036e7332086575726f636c697803636f6d00c02d00010001000151800004d47bc685 29812 4b7900000001000000000000066170616368650962617365667265616b026e6c0000010001 4b7980000001000000030003066170616368650962617365667265616b026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c03100010001000151800004c32fdc83c042000100010001518000045054f998c05400010001000151800004c16d7adb 29813 c60100000001000000000000036e73310564656d6f6e026e6c00001c0001 c60180000001000000030002036e73310564656d6f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 29814 158800000001000000000000036e73320564656d6f6e026e6c00001c0001 158880000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 29815 49160000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000260001 49168000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000260001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 29816 985d000000010000000000000e76616e2d6465722d7363686161720564656d6f6e026e6c00000f0001 985d800000010000000300020e76616e2d6465722d7363686161720564656d6f6e026e6c00000f0001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc01b0002000100015180000f036e73320564656d6f6e036e657400c03500010001000151800004c29f4906c04700010001000151800004c29fb004 29817 23c200000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373036465700b65696c616e64686f6f6664026e6c0000210001 23c284030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373036465700b65696c616e64686f6f6664026e6c0000210001c05000060001000038400036026e730f646f6d61696e2d7265676973747279c0500a686f73746d6173746572c0670bf1e540000070800000384000278d0000003840 29818 b87a00000001000000000000026e7304696d636f026e6c0000010001 b87a80000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 29819 afd80000000100000000000006636861726973026e6c00000f0001 afd88000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 29820 e946000000010000000000000377777703783278026e6c0000010001 e946800000010000000200000377777703783278026e6c0000010001c01000020001000151800015036e73310b7375706572646f6d65696e036e657400c01000020001000151800006036e7332c02c 29821 4f2e00000001000000000000055f6c646170045f746370026463065f6d73646373036465700b65696c616e64686f6f6664026e6c0000210001 4f2e84030001000000010000055f6c646170045f746370026463065f6d73646373036465700b65696c616e64686f6f6664026e6c0000210001c03100060001000038400036026e730f646f6d61696e2d7265676973747279c0310a686f73746d6173746572c0480bf1e540000070800000384000278d0000003840 29822 8b5f000000010000000000000773747564656e7409696e686f6c6c616e64026e6c00000f0001 8b5f800000010000000200020773747564656e7409696e686f6c6c616e64026e6c00000f0001c01400020001000151800006036e7331c014c0140002000100015180000e036e733107737572666e6574c01ec03200010001000151800004c2ab230bc04400010001000151800004c0576a65 29823 cc5d000000010000000000000777656273686f700a63656e74657234616c6c026e6c0000010001 cc5d800000010000000200020777656273686f700a63656e74657234616c6c026e6c0000010001c0140002000100015180000b036e73610462797465c01fc01400020001000151800006036e7362c037c03300010001000151800004d977e520c04a00010001000151800004d977e521 29824 5bca000000010000000000000c7374617469737469656b656e0a636f6d70757365727665026e6c0000010001 5bca800000010000000200000c7374617469737469656b656e0a636f6d70757365727665026e6c0000010001c0190002000100015180001f0e61726c2d6e616d652d7376632d310a636f6d7075736572766503636f6d00c019000200010001518000110e6475622d6e616d652d7376632d31c047 29825 bd4b0000000100000000000003777777056e69696f63026e6c0000010001 bd4b8000000100000002000203777777056e69696f63026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c016c01000020001000151800006036e7332c02ec02a000100010001518000045054ed14c04700010001000151800004d5f72f14 29826 7a740000000100000000000003777777056e69696f63026e6c0000010001 7a748000000100000002000203777777056e69696f63026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c016c01000020001000151800006036e7332c02ec02a000100010001518000045054ed14c04700010001000151800004d5f72f14 29827 74f900000001000000000000037777770e7065726f6d6f746f727061727473026e6c0000010001 74f980000001000000030002037777770e7065726f6d6f746f727061727473026e6c0000010001c0100002000100015180000d036e733106776964657873c01fc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c037c03300010001000151800004d4ccc0fcc068000100010001518000043efa0703 29828 026900000001000000000000055f6c646170045f74637003706463065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001 026984030001000000010000055f6c646170045f74637003706463065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001c03400060001000038400036026e730f646f6d61696e2d7265676973747279c0340a686f73746d6173746572c04b0bf1e540000070800000384000278d0000003840 29829 09be00000001000000000000055f6c646170045f746370026763065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001 09be84030001000000010000055f6c646170045f746370026763065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001c03300060001000038400036026e730f646f6d61696e2d7265676973747279c0330a686f73746d6173746572c04a0bf1e540000070800000384000278d0000003840 29830 9de500000001000000000000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026763065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001 9de584030001000000010000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026763065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001c05000060001000038400036026e730f646f6d61696e2d7265676973747279c0500a686f73746d6173746572c0670bf1e540000070800000384000278d0000003840 29831 02cd00000001000000000000026e730f444f4d41494e2d5245474953545259026e6c00001c0001 02cd80000001000000030002026e730f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 29832 2bb800000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 2bb880000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29833 fcf400000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 fcf480000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 29834 97f00000000100000000000008657273656c696e61026e6c00000f0001 97f08000000100000003000308657273656c696e61026e6c00000f0001c00c00020001000151800011036e73310a74727565736572766572c015c00c00020001000151800006036e7332c02dc00c00020001000151800006036e7333c02dc02900010001000151800004d5ef8003c04600010001000151800004d5efb004c05800010001000151800004d5ef8005 29835 855e00000001000000000000055f6c646170045f7463702466333533366532302d663264362d343531312d386430362d33643532383331643639326607646f6d61696e73065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001 855e84030001000000010000055f6c646170045f7463702466333533366532302d663264362d343531312d386430362d33643532383331643639326607646f6d61696e73065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001c05d00060001000038400036026e730f646f6d61696e2d7265676973747279c05d0a686f73746d6173746572c0740bf1e540000070800000384000278d0000003840 29836 3d7f000000010000000000000d6f73696e67612d626f656b656e026e6c0000ff0001 3d7f800000010000000200000d6f73696e67612d626f656b656e026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c034 29837 980700000001000000000000037777770d72656e746d6565737465726974026e6c0000010001 980780000001000000020002037777770d72656e746d6565737465726974026e6c0000010001c01000020001000151800009036e7331026973c01ec01000020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 29838 bfde00000001000000000000037777770b6b616e6f76657268757572026e6c0000010001 bfde80000001000000020002037777770b6b616e6f76657268757572026e6c0000010001c01000020001000151800013036e73310c666173747365727665723138c01cc01000020001000151800006036e7332c034c0300001000100015180000442a4fa76c04f0001000100015180000442a4fa7f 29839 1d4300000001000000000000026763065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001 1d4384030001000000010000026763065f6d73646373116d6963726f6d6178636f6d707574657273026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 29840 1cd600000001000000000000026264026e6c0000ff0001 1cd680000001000000020000026264026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c029 29841 bac40000000100000000000003777777097265696b696875676f026e6c0000010001 bac48000000100000002000003777777097265696b696875676f026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 29842 c29f0000000100000000000003777777056173746d610c7665727a616d656c67696473026e6c0000010001 c29f8000000100000002000003777777056173746d610c7665727a616d656c67696473026e6c0000010001c01600020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01600020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 29843 10ff0000000100000000000003777777056173746d610c7665727a616d656c67696473026e6c0000010001 10ff8000000100000002000003777777056173746d610c7665727a616d656c67696473026e6c0000010001c01600020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01600020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 29844 3b8d000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 3b8d800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 29845 d04400000001000000000000037777770d616d682d6d616b656c61617273026e6c0000010001 d04480000001000000030000037777770d616d682d6d616b656c61617273026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c036c01000020001000151800006036e7333c036 29846 c4db0000000100000000000006787334616c6c026e6c00000f0001 c4db8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 29847 1c5900000001000000000000036e733203656964026e6c0000010001 1c5980000001000000020002036e733203656964026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000452c048b6c00c0001000100015180000452c048ba 29848 6b8500000001000000000000036e733203656964026e6c0000260001 6b8580000001000000020002036e733203656964026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000452c048b6c00c0001000100015180000452c048ba 29849 4ce800000001000000000000036e733103656964026e6c0000010001 4ce880000001000000020002036e733103656964026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c048b6c0360001000100015180000452c048ba 29850 267400000001000000000000036e733103656964026e6c0000260001 267480000001000000020002036e733103656964026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c048b6c0360001000100015180000452c048ba 29851 d7f400100001000000000000037777770974656c656772616166026e6c0000010001 d7f480000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 29852 a442000000010000000000000e7374656666656e646567726f6f74026e6c0000ff0001 a442800000010000000200010e7374656666656e646567726f6f74026e6c0000ff0001c00c0002000100015180000f036e73330864686f7374696e67c01bc00c00020001000151800006036e7332c033c04a00010001000151800004515b000a 29853 ae070000000100000000000003777777086d63766972757373026e6c0000010001 ae078000000100000002000003777777086d63766972757373026e6c0000010001c0100002000100015180001b036e733108726573656c6c657208736572766963657a036f726700c01000020001000151800006036e7332c031 29854 dd2e000000010000000000000377777705686f707065026e6c0000010001 dd2e800000010000000200020377777705686f707065026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c016c01000020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 29855 b8c400000001000000000000037777770b666f727a612d7574726567026e6c0000010001 b8c480000001000000020000037777770b666f727a612d7574726567026e6c0000010001c0100002000100015180000f036e733105726f6f647303636f6d00c01000020001000151800006036e7332c034 29856 781b000000010000000000000572656c617907696e746f756368026e6c0000010001 781b800000010000000300010572656c617907696e746f756368026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800010026e7307696e746f756368036e657400c01200020001000151800007046e733031c042c02e00010001000151800004d413c001 29857 201800000001000000000000037777770b6272616e64646174696e67026e6c0000010001 201880000001000000020002037777770b6272616e64646174696e67026e6c0000010001c0100002000100015180000e036e7331076e657463617374c01cc01000020001000151800006036e7332c034c03000010001000151800004c2970101c04a00010001000151800004c297012d 29858 756a00000001000000000000037777770878787868756d6f72026e6c0000010001 756a80000001000000020000037777770878787868756d6f72026e6c0000010001c01000020001000151800018036e73310e666c6578776562686f7374696e6703636f6d00c01000020001000151800006036e7332c031 29859 bb5700000001000000000000037777770e64696a6b7377656264657369676e026e6c0000010001 bb5780000001000000030002037777770e64696a6b7377656264657369676e026e6c0000010001c0100002000100015180000d036e733106776964657873c01fc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c037c03300010001000151800004d4ccc0fcc068000100010001518000043efa0703 29860 1f0b000000010000000000000b6d6f6f6b65726865696465026e6c00000f0001 1f0b800000010000000200010b6d6f6f6b65726865696465026e6c00000f0001c00c0002000100015180000c04666e657404666e6574c018c00c0002000100015180000d036e7332036b706e036e657400c02c00010001000151800004c1ac2b01 29861 9eab0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 9eab8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29862 49e800000001000000000000026e7304696d636f026e6c0000260001 49e880000001000000020001026e7304696d636f026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 29863 4f4500000001000000000000066761626c6572026e6c0000060001 4f4584030001000000010000066761626c6572026e6c0000060001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 29864 06f20000000100000000000009652d6c756e61746963026e6c0000010001 06f28000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 29865 acac000000010000000000000963636f6e6365707473026e6c0000010001 acac840300010000000100000963636f6e6365707473026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 29866 f6f9000000010000000000000377777703646f73026e6c0000010001 f6f9800000010000000200000377777703646f73026e6c0000010001c0100002000100015180000d016205646e73767203636f6d00c010000200010001518000040164c02a 29867 cd0100000001000000000000066761626c6572026e6c0000060001 cd0184030001000000010000066761626c6572026e6c0000060001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 29868 552a000000010000000000000377777709657863657074696f6e026e6c0000010001 552a800000010000000300030377777709657863657074696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004d5c9a38cc04000010001000151800004d5c9a38dc05200010001000151800004d5c9af03 29869 a23b0000000100000000000008636176616c696572026e6c00000f0001 a23b8000000100000003000208636176616c696572026e6c00000f0001c00c0002000100015180000d036e733106776964657873c015c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 29870 c48d00000001000000000000037777770d766c696567746172696576656e026e6c0000010001 c48d80000001000000020002037777770d766c696567746172696576656e026e6c0000010001c0100002000100015180000e036e733007656173796e6574c01ec01000020001000151800006036e7331c036c03200010001000151800004c2a55e01c04c00010001000151800004c2a55e05 29871 c93c0000000100000000000003777777096675636b7465656e73026e6c0000010001 c93c8000000100000002000003777777096675636b7465656e73026e6c0000010001c0100002000100015180000d036e7331046564697302617400c01000020001000151800006036e7332c032 29872 3d4a000000010000000000000377777709797a66722d636c7562026e6c0000010001 3d4a800000010000000200020377777709797a66722d636c7562026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01ac01000020001000151800006036e7332c032c02e000100010001518000045104580ac04e000100010001518000045104601e 29873 373f000000010000000000000a6175746f636f6e66696707637071636f7270036e65740d76616e5f73746161766572656e026e6c0000010001 373f840300010000000100000a6175746f636f6e66696707637071636f7270036e65740d76616e5f73746161766572656e026e6c0000010001c03100060001000038400036026e730f646f6d61696e2d7265676973747279c0310a686f73746d6173746572c0480bf1e540000070800000384000278d0000003840 29874 ef9800000001000000000000046d61696c086a6f6f70726f6f73026e6c0000010001 ef9880000001000000020000046d61696c086a6f6f70726f6f73026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c034 29875 d5d300000001000000000000037777770b736578706f736974696573026e6c0000010001 d5d380000001000000020002037777770b736578706f736974696573026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01cc01000020001000151800006036e7332c034c03000010001000151800004d4f1210bc04e00010001000151800004d4f1210c 29876 46c600000001000000000000037777770b736578706f736974696573026e6c0000010001 46c680000001000000020002037777770b736578706f736974696573026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01cc01000020001000151800006036e7332c034c03000010001000151800004d4f1210bc04e00010001000151800004d4f1210c 29877 19d80000000100000000000003706b3102706b026e6c0000010001 19d88000000100000002000203706b3102706b026e6c0000010001c01000020001000151800002c00cc0100002000100015180000603706b32c010c00c00010001000151800004d43d1815c03500010001000151800004d43d1818 29878 19b70000000100000000000003706b3202706b026e6c0000010001 19b78000000100000002000203706b3202706b026e6c0000010001c0100002000100015180000603706b31c010c01000020001000151800002c00cc02700010001000151800004d43d1815c00c00010001000151800004d43d1818 29879 d3b100000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730742696572686f6b026e6c0000210001 d3b184030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730742696572686f6b026e6c0000210001c04c00060001000038400036026e730f646f6d61696e2d7265676973747279c04c0a686f73746d6173746572c0630bf1e540000070800000384000278d0000003840 29880 915e0000000100000000000005787334616c026e6c00000f0001 915e8000000100000002000205787334616c026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 29881 6de100000001000000000000047465737406726f656e6965026e6c0000010001 6de180000001000000020002047465737406726f656e6965026e6c0000010001c0110002000100015180000f036e73310863616d627269756dc018c01100020001000151800006036e7332c030c02c00010001000151800004d9131082c04700010001000151800004d5efb202 29882 3cb600000001000000000000036e73340767617574656e67026e6c0000010001 3cb680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29883 3cb900000001000000000000036e73340767617574656e67026e6c0000010001 3cb980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 29884 8eee00000001000000000000037777771176726564656e737465696e62616e64656e026e6c0000010001 8eee84030001000000010000037777771176726564656e737465696e62616e64656e026e6c0000010001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 29885 0cc100000001000000000000095f6b65726265726f73045f746370026463065f6d736463730742696572686f6b026e6c0000210001 0cc184030001000000010000095f6b65726265726f73045f746370026463065f6d736463730742696572686f6b026e6c0000210001c02d00060001000038400036026e730f646f6d61696e2d7265676973747279c02d0a686f73746d6173746572c0440bf1e540000070800000384000278d0000003840 29886 eed500000001000000000000036e7334086d65646961776562026e6c0000010001 eed580000001000000020000036e7334086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 29887 e3b700000001000000000000036e733203706777026e6c0000010001 e3b780000001000000020002036e733203706777026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc028000100010001518000043e818832c00c00010001000151800004d4ccc621 29888 fd9400000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 fd9480000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 29889 6dfb00000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 6dfb80000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 29890 48df00000001000000000000066765617064330364736c0b7669616e6574776f726b73026e6c0000010001 48df80000001000000020002066765617064330364736c0b7669616e6574776f726b73026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c03700010001000151800004d43d0f08c04900010001000151800004d43d19e2 29891 f65600000001000000000000056d61696c3204616a6178026e6c0000010001 f65680000001000000020001056d61696c3204616a6178026e6c0000010001c0120002000100015180000a036e733303777873c017c01200020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 29892 91310000000100000000000004646e73320873796e7465677261026e6c0000010001 91318000000100000002000204646e73320873796e7465677261026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02e00010001000151800004c3632616c00c00010001000151800004c363261a 29893 35ed0000000100000000000004646e73310873796e7465677261026e6c0000010001 35ed8000000100000002000204646e73310873796e7465677261026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004c3632616c03c00010001000151800004c363261a 29894 2b5b00000001000000000000036e733109736974656279746573026e6c0000010001 2b5b80000001000000030003036e733109736974656279746573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c2a55e5ac03c00010001000151800004c356781cc04e000100010001518000043ec58016 29895 2b5c00000001000000000000036e733209736974656279746573026e6c0000010001 2b5c80000001000000030003036e733209736974656279746573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02e00010001000151800004c2a55e5ac00c00010001000151800004c356781cc04e000100010001518000043ec58016 29896 2b5d00000001000000000000036e733309736974656279746573026e6c0000010001 2b5d80000001000000030003036e733309736974656279746573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02e00010001000151800004c2a55e5ac04000010001000151800004c356781cc00c000100010001518000043ec58016 29897 c68e00000001000000000000037777770c6374632d6361726176616e73026e6c0000010001 c68e80000001000000020002037777770c6374632d6361726176616e73026e6c0000010001c0100002000100015180000f036e73310864696d6d65646961c01dc01000020001000151800006036e7332c035c031000100010001518000043eddda10c04c000100010001518000043eb1e4dc 29898 cf9100000001000000000000036e733207616e7461726573026e6c0000010001 cf9180000001000000020002036e733207616e7461726573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043e3a260bc00c000100010001518000043e3a260c 29899 c7f60000000100000000000010687569737675696c63656e7472616c65026e6c00000f0001 c7f68000000100000002000210687569737675696c63656e7472616c65026e6c00000f0001c00c0002000100015180000c026e7306766572746973c01dc00c00020001000151800006036e7332c034c0310001000100015180000451120111c04900010001000151800004d5c4280c 29900 acc50000000100000000000003777777086e696a6d6567656e026e6c0000010001 acc58000000100000002000203777777086e696a6d6567656e026e6c0000010001c0100002000100015180000f036e73330874656c6562797465c019c01000020001000151800006036e7334c031c02d00010001000151800004d5d38115c04800010001000151800004d5d38116 29901 2f3f00000001000000000000056a6a626964026e6c00000f0001 2f3f80000001000000030003056a6a626964026e6c00000f0001c00c00020001000151800010036e733109736974656279746573c012c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02ac02600010001000151800004c2a55e5ac04200010001000151800004c356781cc054000100010001518000043ec58016 29902 1189000000010000000000000a6d696a6e646f6d65696e026e6c00000f0001 1189800000010000000200020a6d696a6e646f6d65696e026e6c00000f0001c00c0002000100015180000f036e7331086765656e70756e74c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 29903 0007000000010000000000000e30373870726f64756374696f6e73026e6c00000f0001 0007800000010000000200020e30373870726f64756374696f6e73026e6c00000f0001c00c00020001000151800014036e73310d6d6576657273686f7374696e67c01bc00c00020001000151800006036e7332c033c02f00010001000151800004d5c9e8c8c04f00010001000151800004d5c9e8c9 29904 40ec000000010000000000000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001 40ec800000010000000200000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001c0130002000100015180001406737068696e7807726f7365747461036e657400c0130002000100015180000906616e75626973c039 29905 719300000001000000000000046d61696c08636176616c696572026e6c0000010001 719380000001000000030002046d61696c08636176616c696572026e6c0000010001c0110002000100015180000d036e733106776964657873c01ac01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 29906 b6a0000000010000000000000377777708626c75656c796e78026e6c0000010001 b6a0800000010000000200020377777708626c75656c796e78026e6c0000010001c0100002000100015180000c036e73310570726f6d73c019c01000020001000151800006036e7332c031c02d000100010001518000045054ee0ac045000100010001518000045054ee64 29907 00a600000001000000000000036e7331056132303030026e6c0000010001 00a680000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 29908 00a700000001000000000000036e7332056132303030026e6c0000010001 00a780000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 29909 04250000000100000000000003777777087274766e6f6f7264026e6c0000010001 04258000000100000002000203777777087274766e6f6f7264026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c019c01000020001000151800006036e7332c030c02d00010001000151800004c3402003c04600010001000151800004c340202b 29910 800b0000000100000000000005646e732d31056c61646f74026e6c0000010001 800b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29911 2dff0000000100000000000005646e732d32056c61646f74026e6c0000010001 2dff8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 29912 285400000001000000000000026e7306787334616c6c026e6c0000010001 285480000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 29913 164700000001000000000000046d61696c0b696e7472617669616c6973026e6c0000010001 164780000001000000020002046d61696c0b696e7472617669616c6973026e6c0000010001c0110002000100015180000c036e73310563736e6574c01dc01100020001000151800006036e7332c035c03100010001000151800004c2451012c04900010001000151800004c2451212 29914 4d1b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 4d1b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29915 c247000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 c247800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 29916 53ae0000000100000000000003777777097365786f64726f6d65026e6c0000010001 53ae8000000100000002000203777777097365786f64726f6d65026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c01ac01000020001000151800006036e7332c032c02e0001000100015180000452c04516c04b0001000100015180000452c04542 29917 8f1e000000010000000000000a656e74657270726973650770656e6e6f636b026e6c0000010001 8f1e800000010000000200000a656e74657270726973650770656e6e6f636b026e6c0000010001c01700020001000151800014036e73310a676c617373686f757365036e657400c01700020001000151800006036e7332c037 29918 d2d9000000010000000000000377777703746c6d026e6c0000010001 d2d9800000010000000200020377777703746c6d026e6c0000010001c0100002000100015180000f036e73330874656c6562797465c014c01000020001000151800006036e7334c02cc02800010001000151800004d5d38115c04300010001000151800004d5d38116 29919 f35d00000001000000000000086d61696c6761746503657572026e6c0000010001 f35d80000001000000020002086d61696c6761746503657572026e6c0000010001c01500020001000151800002c00cc0150002000100015180000906706f70657965c015c00c0001000100015180000482730101c03b0001000100015180000482730f02 29920 2c0f000000010000000000000c7061696e7473657276696365026e6c0000ff0001 2c0f800000010000000200000c7061696e7473657276696365026e6c0000ff0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c033 29921 0e780000000100000000000007766462636f6d70026e6c00001c0001 0e788000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 29922 d0b90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d0b98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 29923 95390000000100000000000008686f73746e616d650462696e640000100003 95398000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 29924 60390000000100000000000008686f73746e616d650462696e640000100003 60398000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 29925 74e500000001000000000000026e7303616d730874656c6567617465026e6c0000010001 74e580000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 29926 82f5000000010000000000000377777708706f656c73747261026e6c0000010001 82f5800000010000000200020377777708706f656c73747261026e6c0000010001c0100002000100015180000e036e73310762617365776562c019c01000020001000151800006036e7332c031c02d00010001000151800004d535d035c04700010001000151800004d535d034 29927 c91d00000001000000000000085f6b706173737764045f7463700767696f70646f6d026e6c0000060001 c91d84030001000000010000085f6b706173737764045f7463700767696f70646f6d026e6c0000060001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 29928 0747000000010000000000000c506f737462616e6b6d61696c026e6c0000010001 0747800000010000000200020c506f737462616e6b6d61696c026e6c0000010001c00c0002000100015180000a036e733103696e67c019c00c00020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 29929 7dee00100001000000000001026e7308767575727765726b026e6c00000100010000290800000080000000 7dee80000001000000030002026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa02020000291000000000000000 29930 1f3f00100001000000000001036e733208767575727765726b026e6c00000100010000290800000080000000 1f3f80000001000000030002036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa02020000291000000000000000 29931 df720000000100000000000003777777047a656e77026e6c0000010001 df728000000100000002000003777777047a656e77026e6c0000010001c01000020001000151800015026e730d646f6d61696e6e6574776f726b02736500c01000020001000151800006036e7332c02c 29932 c9e2000000010000000000000c7268656e7573616c70696e61026e6c00000f0001 c9e2800000010000000200020c7268656e7573616c70696e61026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 29933 2e22000000010000000000000377777710726573706f6e73652d73657276696365026e6c0000010001 2e22800000010000000200020377777710726573706f6e73652d73657276696365026e6c0000010001c0100002000100015180000d026e730763697374726f6ec021c01000020001000151800006036e7332c038c035000100010001518000043ed81f37c04e000100010001518000043ed81f38 29934 2bc628000001000000010000026e6c0000060001085f6b706173737764045f7463700767696f70646f6d026e6c000021000100000258001a0000006401d00777696e323030300767696f70646f6d026e6c00 2bc6a8040000000000000000 29935 474500000001000000000000037777770874776f7274776174026e6c0000010001 474580000001000000030001037777770874776f7274776174026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 29936 0d5200000001000000000000036e733104686f6d65026e6c0000010001 0d5280000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 29937 1c6000000001000000000000046d61696c066368656c6c6f026e6c0000010001 1c6080000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 29938 000000007002faf02ae300000204057a01010402 000080010000000000000000 29939 f47e0000000100000000000003777777076a632d7069766f026e6c0000010001 f47e8000000100000002000103777777076a632d7069766f026e6c0000010001c0100002000100015180000f036e73330864686f7374696e67c018c01000020001000151800006036e7332c030c04700010001000151800004515b000a 29940 89ab00000001000000000000036d6d63026e6c0000ff0001 89ab80000001000000030002036d6d63026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c010c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c028c02400010001000151800004d4ccc0fcc059000100010001518000043efa0703 29941 3eeb000000010000000000000e67616c6c6572796275696c6465720d706172746e6572636c69636b73026e6c0000010001 3eeb800000010000000200020e67616c6c6572796275696c6465720d706172746e6572636c69636b73026e6c0000010001c01b0002000100015180000f036e73310861746c616e74697ac029c01b00020001000151800006036e7332c041c03d00010001000151800004d5efa011c05800010001000151800004d5efa075 29942 d96700000001000000000000037777770f666c616e64657273746f7572697374026e6c0000010001 d96784030001000000010000037777770f666c616e64657273746f7572697374026e6c0000010001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 29943 34ef001000010000000000000377777708686f757474726566026e6c0000010001 34ef800000010000000200000377777708686f757474726566026e6c0000010001c01000020001000151800017016103646e730b7369746570726f7465637403636f6d00c010000200010001518000040162c02f 29944 b66a29aa5010fbec764c0000000000000000 b66aa9a40000000000000000 29945 b39c000000010000000000000a6b72616d6572746a6573026e6c00000f0001 b39c800000010000000200000a6b72616d6572746a6573026e6c00000f0001c00c0002000100015180000f036e7331056d79736d74036e657400c00c00020001000151800006036e7332c02f 29946 d1910000000100000000000003777777027362026e6c0000010001 d1918000000100000002000203777777027362026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c013c01000020001000151800006036e7332c02ac02700010001000151800004c3402003c04000010001000151800004c340202b 29947 35b728000001000200000000026e6c0000060001097365727665722d636305435952454b026e6c00000500fe000000000000c0140001000100000000000452a1319b 35b7a8040000000000000000 29948 b66a29aa5018fbeca98c0000008f5105000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403b06fa403c587a0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000 b66aa9a40000000000000000 29949 8d4300000001000000000000037777770663616e697369026e6c0000010001 8d4384030001000000010000037777770663616e697369026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 29950 d60b00000001000000000000026e7308767575727765726b026e6c0000010001 d60b80000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 29951 23d400000001000000000000036e733208767575727765726b026e6c0000010001 23d480000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 29952 b66a29b85011fbde75ba0000000000000000 b66aa9b40000000000000000 29953 28fc00000001000000000000044e414d4507574c44454c4654024e4c0000010001 28fc80000001000000020002044e414d4507574c44454c4654024e4c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c019c00c00010001000151800004910983cbc03b00010001000151800004c0576a65 29954 c247000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 c247800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 29955 0000000070024000a2200000020405b401010402 000080010000000000000000 29956 b66a29b95010fbde75b90000000000000000 b66aa9b40000000000000000 29957 000000007002faf0f29900000204057a01010402 000080010000000000000000 29958 c38500000001000000000000037777770d6175746f74656c656772616166026e6c0000010001 c38580000001000000020000037777770d6175746f74656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c036 29959 b66acd7f50104470467a0000000000000000 29960 b66acd7f50184470c7f40000008d352e000000010001000000000f313031333631323238313837342d330000f900010f313031333631323238313837342d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afce9403c4e6900030000002e4e544c4d535350000100000097b208e0050005002900000009000900200000005345525645522d4343435952454b0000 29961 689b000000010000000000010462617261026e6c00001c00010000291000000000000000 689b800000010000000200030462617261026e6c00001c0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb12210000291000000000000000 29962 b66acd8d5011446245ea0000000000000000 29963 b66bbecf5010fbeca8dc0000000000000000 29964 b66bbecf5018fbecf6930000008f378f000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b06fa403c587a0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000 29965 000000007002400067760000020405b401010402 000080010000000000000000 29966 b66acd8e5010446245e90000000000000000 29967 b66bbedd5011fbdea84a0000000000000000 29968 b66c83605010447055ed0000000000000000 29969 b66c83605018447026c40000008de6d2000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afce9403c4e6900030000002e4e544c4d535350000100000097b208e0050005002900000009000900200000005345525645522d4343435952454b0000 29970 d7350000000100000000000003777777057261616172026e6c0000010001 d7358000000100000003000303777777057261616172026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c016c0100002000100015180000e0b6e616d6573657276657232c036c0100002000100015180000e0b6e616d6573657276657233c036c02a0001000100015180000451ad2020c04e0001000100015180000451ad2021c0680001000100015180000452c049aa 29971 000000007002faf0d34200000204057a01010402 000080010000000000000000 29972 fabd00000001000000000000036e7331056d61786573026e6c0000010001 fabd80000001000000030003036e7331056d61786573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000045045402ec038000100010001518000045045402fc04a000100010001518000045045440a 29973 ea1400000001000000000000036e7332056d61786573026e6c0000010001 ea1480000001000000030003036e7332056d61786573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a000100010001518000045045402ec00c000100010001518000045045402fc04a000100010001518000045045440a 29974 e730000000010000000000000377777705696e746578026e6c0000010001 e730800000010000000200020377777705696e746578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02a0001000100015180000451047378c03c0001000100015180000451047379 29975 23720000000100000000000003777777046b6f7469026e6c0000010001 23728000000100000002000003777777046b6f7469026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 29976 315a00000001000000000000026e73076e656473746174026e6c0000010001 315a80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 29977 b66c836e50114462555d0000000000000000 29978 b66bbede5010fbdea8490000000000000000 29979 4c61000000010000000000000377777709706e69656c6b65726b026e6c0000010001 4c61800000010000000200000377777709706e69656c6b65726b026e6c0000010001c0100002000100015180000e026e7308676c6f62616c7873c01ac01000020001000151800006036e7332c031 29980 8dfb0000000100000000000004646e733110776f726c6477696465686f7374696e67026e6c0000010001 8dfb8000000100000002000204646e733110776f726c6477696465686f7374696e67026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c0001000100015180000450f7c20dc0440001000100015180000450f7c217 29981 a3100000000100000000000004646e733210776f726c6477696465686f7374696e67026e6c0000010001 a3108000000100000002000204646e733210776f726c6477696465686f7374696e67026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0360001000100015180000450f7c20dc00c0001000100015180000450f7c217 29982 b66d191c5010fbec2f370000000000000000 b66d99140000000000000000 29983 01fd00100001000000000001036e733107737572666e6574026e6c00000100010000290800000000000000 01fd80000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 29984 9cdc000000010000000000000377777706787334616c6c026e6c00000f0001 9cdc800000010000000300020377777706787334616c6c026e6c00000f0001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 29985 e54000100001000000000001036e733107737572666e6574026e6c00002600010000290800000000000000 e54080000001000000040004036e733107737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 29986 b66d191c5018fbecc6460000008fee36000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b06fa403c587a0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000 b66d99140000000000000000 29987 0000000070024000810b0000020405b401010402 000080010000000000000000 29988 b66c836f50104462555c0000000000000000 29989 2b3a0000000100000000000003637373026e6c00000f0001 2b3a8000000100000002000203637373026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 29990 31fc00000001000000000000036e733209666972737466696e64026e6c0000010001 31fc80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29991 31fd00000001000000000000036e733109666972737466696e64026e6c0000010001 31fd80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 29992 689b000000010000000000000462617261026e6c00001c0001 689b800000010000000200020462617261026e6c00001c0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 29993 0c4f00000001000000000000077265745f667331077265746172636f026e6c0000060001 0c4f84030001000000010000077265745f667331077265746172636f026e6c0000060001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 29994 b66da42b501044704eb60000000000000000 29995 b66da42b501844706de90000008d9876000000010001000000000f313031333631323238313837342d320000f900010f313031333631323238313837342d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afce9403c4e6900030000002e4e544c4d535350000100000097b208e0050005002900000009000900200000005345525645522d4343435952454b0000 29996 b66d192a5011fbde2ea50000000000000000 b66d99240000000000000000 29997 6cd4000000010000000000000f426f6572486172746f67486f6f6674026e6c00000f0001 6cd4800000010000000200000f426f6572486172746f67486f6f6674026e6c00000f0001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 29998 a8cd000000010000000000000476696c61026e6c00000f0001 a8cd800000010000000200000476696c61026e6c00000f0001c00c00020001000151800012036e7333086e6574766c696573036e657400c00c00020001000151800006036e7334c029 29999 652300000001000000000000087061636b74656368026e6c0000010001 652380000001000000030001087061636b74656368026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 30000 1214000000010000000000000276330a646d64656c6976657279026e6c0000010001 1214800000010000000200000276330a646d64656c6976657279026e6c0000010001c00f00020001000151800010036e73310673697465347503636f6d00c00f00020001000151800006036e7332c032 30001 3a3300000001000000000000036e733107737572666e6574026e6c0000010001 3a3380000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 30002 8a2800000001000000000000036e733107737572666e6574026e6c0000260001 8a2880000001000000040003036e733107737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 30003 b66da439501144624e260000000000000000 30004 573c0000000100000000000003777777076e6574706f6c6c026e6c0000010001 573c8000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 30005 f6dd00000001000000000000055f6c646170045f746370026463065f6d7364637307327365727665720864696a6b6f6f73740864696a6b77657374026e6c0000210001 f6dd84030001000000010000055f6c646170045f746370026463065f6d7364637307327365727665720864696a6b6f6f73740864696a6b77657374026e6c0000210001c03b00060001000038400036026e730f646f6d61696e2d7265676973747279c03b0a686f73746d6173746572c0520bf1e540000070800000384000278d0000003840 30006 b66d192b5010fbde2ea40000000000000000 b66d99240000000000000000 30007 67ae28000001000200000000026e6c0000060001077265745f667331077265746172636f026e6c00000500fe000000000000c01400010001000000000004c0a80001 67aea8040000000000000000 30008 b66da43a501044624e250000000000000000 30009 420300000001000000000000036e73320e6469726563747365727669636573026e6c0000010001 420380000001000000030003036e73320e6469726563747365727669636573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03300010001000151800004d994aa05c00c00010001000151800004d994aa06c05300010001000151800004d994aa07 30010 5fb300000001000000000000036e73330e6469726563747365727669636573026e6c0000010001 5fb380000001000000030003036e73330e6469726563747365727669636573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03300010001000151800004d994aa05c04500010001000151800004d994aa06c00c00010001000151800004d994aa07 30011 475500000001000000000000086f707573666c6f77026e6c00000f0001 475580000001000000020002086f707573666c6f77026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 30012 aaa900000001000000000000037777770c62656c636f6d7061676e6965026e6c0000010001 aaa980000001000000020000037777770c62656c636f6d7061676e6965026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c035 30013 000000007002faf0e71c0000020405b401010402 000080010000000000000000 30014 a5a600000001000000000000037777771167726174697373657866696c6d70696573026e6c0000010001 a5a680000001000000030000037777771167726174697373657866696c6d70696573026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c03bc01000020001000151800007046e733033c03b 30015 b66e311b5010faf02c470000000000000000 b66eb1140000000000000000 30016 048900000001000000000000036d783306787334616c6c026e6c0000010001 048980000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 30017 774600000001000000000000036d783406787334616c6c026e6c0000010001 774680000001000000030002036d783406787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 30018 1ddf00000001000000000000036d786906787334616c6c026e6c0000010001 1ddf80000001000000030002036d786906787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 30019 39e300000001000000000000036d783206787334616c6c026e6c0000010001 39e380000001000000030002036d783206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 30020 caf900000001000000000000037777770b6c6f6e67666962726f7365026e6c0000010001 caf980000001000000020002037777770b6c6f6e67666962726f7365026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 30021 711500000001000000000000026e730a6e6d622d68656c6c6572026e6c0000010001 711580000001000000020001026e730a6e6d622d68656c6c6572026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c2971685 30022 76310000000100000000000010676f6c6663656e7472756d2d62657374026e6c0000010001 76318000000100000003000110676f6c6663656e7472756d2d62657374026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc01dc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04fc031000100010001518000043efa0202 30023 cdf500000001000000000000026e730a6e6d622d68656c6c6572026e6c0000260001 cdf580000001000000020001026e730a6e6d622d68656c6c6572026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c2971685 30024 955e0000000100000000000004504f303703575853024e4c00000f0001 955e8000000100000003000304504f303703575853024e4c00000f0001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 30025 16780000000100000000000004504f303703575853024e4c00000f0001 16788000000100000003000304504f303703575853024e4c00000f0001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 30026 10b2000000010000000000000b7672696a656b6579736572026e6c0000010001 10b2800000010000000200020b7672696a656b6579736572026e6c0000010001c00c0002000100015180000b036e73310473626970c018c00c00020001000151800006036e7332c030c02c00010001000151800004d4ccecf1c04300010001000151800004c3a99564 30027 079c0000000100000000000007627574746f6e7308686f7573656e6574026e6c0000010001 079c8000000100000002000007627574746f6e7308686f7573656e6574026e6c0000010001c014000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0140002000100015180000906617574683230c038 30028 4aa900000001000000000000034e533203484853026e6c0000010001 4aa980000001000000030003034e533203484853026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c0280001000100015180000491340205c00c0001000100015180000491340206c04800010001000151800004c0576a65 30029 94a70000000100000000000016766572736368757572656e2d73636872657070657273026e6c0000ff0001 94a78000000100000002000216766572736368757572656e2d73636872657070657273026e6c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c023c00c00020001000151800006036e7332c03bc03700010001000151800004d43d0f08c05500010001000151800004d43d19e2 30030 ee34000000010000000000000561686f6c64027330026e6c0000010001 ee34800000010000000200020561686f6c64027330026e6c0000010001c0120002000100015180000d026e73076e656473746174c015c01200020001000151800006036e7333c02cc02900010001000151800004d4482615c04200010001000151800004d5c4021d 30031 25ad00000001000000000000037777770762616d62696e79026e6c0000010001 25ad80000001000000030000037777770762616d62696e79026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c034c0100002000100015180000a076e73686f737433c034 30032 886200000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 886280000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 30033 6fa800000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 6fa880000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 30034 b7be0000000100000000000016766572736368757572656e2d73636872657070657273026e6c00001c0001 b7be8000000100000002000216766572736368757572656e2d73636872657070657273026e6c00001c0001c00c00020001000151800012036e73310b7669616e6574776f726b73c023c00c00020001000151800006036e7332c03bc03700010001000151800004d43d0f08c05500010001000151800004d43d19e2 30035 45680000000100000000000008706c6161746a657308686f7573656e6574026e6c0000010001 45688000000100000002000008706c6161746a657308686f7573656e6574026e6c0000010001c015000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0150002000100015180000906617574683230c039 30036 46dc00000001000000000000036e7332027575026e6c0000010001 46dc80000001000000040004036e7332027575026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c013c01000020001000151800006036e7333c010c0270001000100015180000483d30405c00c0001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 30037 a21700000001000000000000026e73027575026e6c0000010001 a21780000001000000040004026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 30038 2b96000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 2b96800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30039 339d000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 339d800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30040 2ba4000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 2ba4800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30041 1ba9000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 1ba9800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30042 bfe60000000100000000000008636f6d2d706c616e026e6c0000ff0001 bfe68000000100000002000208636f6d2d706c616e026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 30043 ed890000000100000000000008686f73746e616d650462696e640000100003 ed898000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 30044 cb050000000100000000000004646e733105666c756b65026e6c0000010001 cb058000000100000003000104646e733105666c756b65026e6c0000010001c0110002000100015180001004646e733105666c756b6503636f6d00c0110002000100015180000704646e7332c030c01100020001000151800002c00cc00c00010001000151800004c1dd8814 30045 31ff00000001000000000000036e733209666972737466696e64026e6c0000010001 31ff80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30046 320000000001000000000000036e733109666972737466696e64026e6c0000010001 320080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30047 6888000000010000000000000377777712776f6f6e7a6f7267636f6d62696e61746965026e6c0000010001 6888800000010000000200000377777712776f6f6e7a6f7267636f6d62696e61746965026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c023c0100002000100015180000704686e7331c03c 30048 1b220000000100000000000003777777086879706f686f6d65026e6c0000010001 1b228000000100000002000003777777086879706f686f6d65026e6c0000010001c01000020001000151800013036e733109696d6167653264617903636f6d00c01000020001000151800006036e7332c031 30049 f49f000000010000000000000764656265656d64026e6c0000ff0001 f49f800000010000000200000764656265656d64026e6c0000ff0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02c 30050 dfc80000000100000000000009666f746f2d77696a6e026e6c00001c0001 dfc88000000100000002000109666f746f2d77696a6e026e6c00001c0001c00c0002000100015180000a036e733303777873c016c00c00020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 30051 31c000000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 31c080000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 30052 67620000000100000000000003777777067a737673726d026e6c0000010001 67628403000100000001000003777777067a737673726d026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 30053 e8a200000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 e8a280000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 30054 a70000000001000000000000037777770f74656c65636f6d6d6167617a696e65026e6c0000010001 a70080000001000000020000037777770f74656c65636f6d6d6167617a696e65026e6c0000010001c0100002000100015180000b036e73340473617261c020c01000020001000151800006036e7333c038 30055 826d0000000100000000000006766965746f72026e6c00000f0001 826d8000000100000002000206766965746f72026e6c00000f0001c00c00020001000151800002c00cc00c0002000100015180000d04646e733205692d702d64c013c00c00010001000151800004d9124025c03500010001000151800004d9124104 30056 4b7000000001000000000000037777771062616e6e65726d616e6167656d656e74026e6c0000010001 4b7080000001000000030003037777771062616e6e65726d616e6167656d656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 30057 0f360000000100000000000009652d6c756e61746963026e6c0000010001 0f368000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 30058 994b00000001000000000000153132332d7765622d686f73742d726573656c6c6572026e6c0000010001 994b80000001000000020000153132332d7765622d686f73742d726573656c6c6572026e6c0000010001c00c00020001000151800012036e7331087365727665722d3203636f6d00c00c00020001000151800006036e7332c03a 30059 913100000001000000000000056c6173736f026e6c0000ff0001 913180000001000000020002056c6173736f026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 30060 7a8200000001000000000000026e73066863636e6574026e6c0000010001 7a8280000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 30061 412700000001000000000000044e414d4507574c44454c4654024e4c0000010001 412780000001000000020002044e414d4507574c44454c4654024e4c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c019c00c00010001000151800004910983cbc03b00010001000151800004c0576a65 30062 144f0000000100000000000006776468303132066e7434616c6c026e6c0000010001 144f8000000100000002000206776468303132066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 30063 d2b9000000010000000000000964736c2d333830323106736f6c636f6e026e6c0000010001 d2b9800000010000000300030964736c2d333830323106736f6c636f6e026e6c0000010001c0160002000100015180000b08736f6c7574696f6ec016c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03100010001000151800004d42d2005c04800010001000151800004d42d2003c05a00010001000151800004d42d2103 30064 341800100001000000000001036e7332076e656473746174026e6c00000100010000290800000080000000 341880000001000000020003036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 30065 cd6900100001000000000001036e7334076e656473746174026e6c00000100010000290800000080000000 cd6980000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 30066 549d00000001000000000000096f70746973706f7274026e6c0000010001 549d80000001000000020002096f70746973706f7274026e6c0000010001c00c0002000100015180000a036e733103686978c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5a0da0ac0400001000100015180000451112ec3 30067 714100000001000000000000097363686167656e666d026e6c0000010001 714180000001000000020002097363686167656e666d026e6c0000010001c00c00020001000151800019036e73311277696e646b7261636874696e7465726e6574c016c00c00020001000151800006036e7332c02ec02a0001000100015180000450f2eea1c04f0001000100015180000450f2eea2 30068 262600000001000000000000036d6564027675026e6c0000ff0001 262680000001000000030003036d6564027675026e6c0000ff0001c01000020001000151800005026e73c010c0100002000100015180000a0473746172026373c010c0100002000100015180000e036e733107737572666e6574c013c0270001000100015180000482258104c03800010001000151800004c01fe72ac04e00010001000151800004c0576a65 30069 edb600000001000000000000037777770b6d696a6e6b6f7074686565026e6c0000010001 edb680000001000000030001037777770b6d696a6e6b6f7074686565026e6c0000010001c0100002000100015180000e036e733104686d6e71036e657400c0100002000100015180000d036e733206776964657873c039c0100002000100015180000d036e733306776964657873c01cc063000100010001518000043efa0703 30070 390f00000001000000000000046d6f7265026e6c0000ff0001 390f80000001000000030003046d6f7265026e6c0000ff0001c00c0002000100015180000f036e7331086e6f766178657373c011c00c00020001000151800006036e7332c029c00c00020001000151800006036e7333c029c02500010001000151800004d5c98015c04000010001000151800004d5c9bf12c05200010001000151800004d5ef9c26 30071 9f3d00000001000000000000046d61696c0370636d026e6c0000010001 9f3d80000001000000020001046d61696c0370636d026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c143e6dc 30072 5e0d000000010000000000000964656e6875726b6276026e6c0000ff0001 5e0d800000010000000200000964656e6875726b6276026e6c0000ff0001c00c00020001000151800014036e73310a696c632d6575726f706503636f6d00c00c00020001000151800006036e7332c02e 30073 58300000000100000000000003626469026e6c0000ff0001 58308000000100000002000003626469026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 30074 2c5d000000010000000000000970636d7366727430310370636d026e6c0000010001 2c5d800000010000000200010970636d7366727430310370636d026e6c0000010001c01600020001000151800005026e73c016c0160002000100015180000b026e73026e6c036e657400c02e00010001000151800004c143e6dc 30075 abd0000000010000000000000970636d7366616d30310370636d026e6c0000010001 abd0800000010000000200010970636d7366616d30310370636d026e6c0000010001c01600020001000151800005026e73c016c0160002000100015180000b026e73026e6c036e657400c02e00010001000151800004c143e6dc 30076 2a9000000001000000000000046d61696c0370636d026e6c0000010001 2a9080000001000000020001046d61696c0370636d026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c143e6dc 30077 19a200000001000000000000087269766572746578026e6c00000f0001 19a280000001000000020002087269766572746578026e6c00000f0001c00c0002000100015180000d036e73310661637469766fc015c00c00020001000151800006036e7332c02dc02900010001000151800004d5c4281ac04200010001000151800004d5c42806 30078 6686000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 6686800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 30079 19bb000000010000000000000870686f626f7330320761626e616d726f026e6c0000010001 19bb800000010000000200020870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c 30080 913700000001000000000000066b656e6e79310a646d64656c6976657279026e6c0000010001 913780000001000000020000066b656e6e79310a646d64656c6976657279026e6c0000010001c01300020001000151800010036e73310673697465347503636f6d00c01300020001000151800006036e7332c036 30081 ec5900000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 ec5980000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 30082 571900000001000000000000026e73097477696e737061726b026e6c0000260001 571980000001000000020001026e73097477696e737061726b026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800017026e7309726f7474657264616d046c756e61036e657400c00c00010001000151800004c26d5a02 30083 f496000000010000000000000673656375726507656e64656d6f6c026e6c0000010001 f496800000010000000200000673656375726507656e64656d6f6c026e6c0000010001c0130002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0130002000100015180000d036e7332036b706e036e657400 30084 125a00000001000000000000036e7332063234686f7374024e4c0000010001 125a80000001000000020002036e7332063234686f7374024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d5efb10cc00c00010001000151800004d5efb10d 30085 f13400000001000000000000036e733107636f6e74657874026e6c0000260001 f13480000001000000030003036e733107636f6e74657874026e6c0000260001c01000020001000151800002c00cc0100002000100015180000b036e73310470696e65c018c01000020001000151800006036e7332c03ec00c00010001000151800004d59c0296c03a00010001000151800004d59c0201c05100010001000151800004c3c1a303 30086 57ad000000010000000000000964726f6f6d6c616e64026e6c0000ff0001 57ad800000010000000200020964726f6f6d6c616e64026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 30087 fddd000000010000000000000377777709647574636864617465026e6c0000010001 fddd800000010000000200000377777709647574636864617465026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 30088 ad260000000100000000000008702d612d6f6f6d73026e6c0000ff0001 ad268000000100000002000208702d612d6f6f6d73026e6c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c015c00c00020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 30089 4c19000000010000000000000377777709776f6f6e6b72616e74026e6c0000010001 4c19800000010000000200000377777709776f6f6e6b72616e74026e6c0000010001c01000020001000151800011036e733107636f6e78696f6e036e657400c01000020001000151800006036e7332c032 30090 151800000001000000000000036e73330767617574656e67026e6c0000010001 151880000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30091 252000000001000000000000036e73340767617574656e67026e6c0000010001 252080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30092 7a81000000010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 7a81800200010000000000010331333003313434033137360331393307696e2d61646472046172706100000c00010000291000000000000000 30093 65aa0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 65aa8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30094 07ab00000001000000000000056861766570026e6c00000f0001 07ab80000001000000020002056861766570026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c012c00c00020001000151800006036e7332c02ac02600010001000151800004d43d0f08c04400010001000151800004d43d19e2 30095 0f8900000001000000000000056578616374056578616374026e6c0000010001 0f8980000001000000020001056578616374056578616374026e6c0000010001c01200020001000151800002c00cc0120002000100015180000b026e73026e6c036e657400c00c00010001000151800004910e3c0a 30096 39a600000001000000000000086169782d74657374056578616374026e6c0000010001 39a680000001000000020001086169782d74657374056578616374026e6c0000010001c01500020001000151800008056578616374c015c0150002000100015180000b026e73026e6c036e657400c02f00010001000151800004910e3c0a 30097 760b00000001000000000000037777770666756872656e026e6c0000010001 760b80000001000000020001037777770666756872656e026e6c0000010001c0100002000100015180000a036e733303777873c017c01000020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 30098 000c28000001000200000000026e6c00000600010c706c616e6e696e672d696e74086e6b6f6572696572026e6c00000500fe000000000000c01400010001000000000004c0a8000c 000ca8040000000000000000 30099 71a100000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 71a180000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 30100 d04500000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000260001 d04580000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 30101 724700000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 724780000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 30102 5a5300000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000260001 5a5380000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 30103 641a000000010000000000000377777706787334616c6c026e6c0000010001 641a800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 30104 ae7b00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 ae7b80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 30105 8b2100000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000260001 8b2180000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 30106 b78200000001000000000000067765626e69780e6575726f636f6e73756c74616e74026e6c0000010001 b78280000001000000020002067765626e69780e6575726f636f6e73756c74616e74026e6c0000010001c01300020001000151800002c00cc0130002000100015180000a076d61696c6e6978c013c00c000100010001518000045117e555c044000100010001518000045117e556 30107 edee00000001000000000000067765626e69780e6575726f636f6e73756c74616e74026e6c0000260001 edee80000001000000020002067765626e69780e6575726f636f6e73756c74616e74026e6c0000260001c01300020001000151800002c00cc0130002000100015180000a076d61696c6e6978c013c00c000100010001518000045117e555c044000100010001518000045117e556 30108 69b0000000010000000000000377777709686572656e7665656e026e6c0000010001 69b0840300010000000100000377777709686572656e7665656e026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 30109 05b90000000100000000000008686f73746e616d650462696e640000100003 05b98000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 30110 8f9e0000000100000000000006736572766572026462036b766b026e6c0000010001 8f9e8000000100000002000206736572766572026462036b766b026e6c0000010001c0160002000100015180000d026e73076b6e6f77617265c01ac01600020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 30111 000000007002fc00ee0b00000204057801010402 000080010000000000000000 30112 0a4000000001000000000000085f6b706173737764045f7463700767696f70646f6d026e6c0000060001 0a4084030001000000010000085f6b706173737764045f7463700767696f70646f6d026e6c0000060001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 30113 0d1800000001000000000000036e733203666a66026e6c0000010001 0d1880000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30114 37e400000001000000000000037777770a616c6c69656464617461026e6c0000010001 37e480000001000000020001037777770a616c6c69656464617461026e6c0000010001c01000020001000151800011036e696b0a7075626c6973686e6574c01bc0100002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1433c0a 30115 0d1900000001000000000000036e733103666a66026e6c0000010001 0d1980000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30116 a707000000010000000000000773657834616c6c026e6c00000f0001 a707800000010000000200000773657834616c6c026e6c00000f0001c00c00020001000151800012036e7331086379626572616374036e657400c00c00020001000151800006036e7332c02c 30117 b6719dda5010fc00c6370000000000000000 30118 dcec00000001000000000000037777771173706565642d64657369676e2d636c7562026e6c0000010001 dcec80000001000000020002037777771173706565642d64657369676e2d636c7562026e6c0000010001c01000020001000151800009036e7331026973c022c01000020001000151800006036e7332c03ac03600010001000151800004d5852102c04b00010001000151800004d5c41503 30119 b6719dda5018fc006c5e00000091d5b0000000010001000000000e3932373731323933353935342d330000f900010e3932373731323933353935342d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afc98403c4e180003000000344e544c4d535350000100000097b208e0080008002c0000000c000c0020000000504c414e4e494e472d494e544e4b4f45524945520000 30120 173200000001000000000000037777770974726f737261646172026e6c0000010001 173280000001000000020002037777770974726f737261646172026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c01ac01000020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 30121 5ceb000000010000000000000377777706746970313030026e6c0000010001 5ceb800000010000000200000377777706746970313030026e6c0000010001c01000020001000151800013036e733009696e7465726c697a65036e657400c01000020001000151800006036e7331c02f 30122 8e4e000000010000000000000377777703776967026e6c0000010001 8e4e800000010000000200020377777703776967026e6c0000010001c0100002000100015180000e0161026e7306737561726573c014c010000200010001518000040162c02ac02800010001000151800004d5ef8282c04200010001000151800004d4cce363 30123 b2f7000000010000000000000f7061726b6574706c616e6b706c7573026e6c0000ff0001 b2f7800000010000000200020f7061726b6574706c616e6b706c7573026e6c0000ff0001c00c00020001000151800009036e7331026973c01cc00c00020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 30124 bad700000001000000000000036e7331056861636f6d026e6c0000010001 bad780000001000000020002036e7331056861636f6d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4f12209c03800010001000151800004d590f009 30125 d4ae00000001000000000000036e7331056861636f6d026e6c0000260001 d4ae80000001000000020002036e7331056861636f6d026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4f12209c03800010001000151800004d590f009 30126 af35000000010000000000000a76616e6f6572732d6366026e6c0000010001 af35800000010000000200020a76616e6f6572732d6366026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 30127 b6719de85011fbf2c5a30000000000000000 30128 000000007002fc00095d00000204057801010402 000080010000000000000000 30129 973e00000001000000000000036e7332076e656473746174026e6c0000010001 973e80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 30130 a5c100000001000000000000036e7334076e656473746174026e6c0000010001 a5c180000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 30131 0d2500000001000000000000036e733203666a66026e6c0000010001 0d2580000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30132 a82f0000000100000000000003777777096e6574646972656374026e6c0000010001 a82f8000000100000003000003777777096e6574646972656374026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 30133 a8f900000001000000000000037777770a616c6c653133676f6564026e6c0000010001 a8f980000001000000030001037777770a616c6c653133676f6564026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 30134 b6719de95010fbf2c5a20000000000000000 30135 0d2600000001000000000000036e733103666a66026e6c0000010001 0d2680000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30136 2071000000010000000000002439623230323435312d663538342d343531622d386134622d346635663864363339356462065f6d736463730764736132303030026e6c0000060001 2071840300010000000100002439623230323435312d663538342d343531622d386134622d346635663864363339356462065f6d736463730764736132303030026e6c0000060001c04000060001000038400036026e730f646f6d61696e2d7265676973747279c0400a686f73746d6173746572c0570bf1e540000070800000384000278d0000003840 30137 029b000000010000000000000c6b7a6f6164766f636174656e026e6c0000010001 029b800000010000000200000c6b7a6f6164766f636174656e026e6c0000010001c00c00020001000151800013026e730a636c617373696377656203636f6d00c00c00020001000151800006036e7332c030 30138 1cd7000000010000000000000377777706626173746572026e6c0000010001 1cd7800000010000000200000377777706626173746572026e6c0000010001c0100002000100015180000f036e7331056279303037036e657400c01000020001000151800006036e7332c02f 30139 adae00000001000000000000076e696a626f7267026e6c0000010001 adae80000001000000020002076e696a626f7267026e6c0000010001c00c0002000100015180000f036e733108696e74726f776562c014c00c00020001000151800006036e7332c02cc0280001000100015180000450416028c04300010001000151800004c356780c 30140 b6722e745010fc0050ee0000000000000000 b672ae740000000000000000 30141 0e1900000001000000000000067768646e7331056577656b61026e6c0000010001 0e1980000001000000020002067768646e7331056577656b61026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7333c013c02d0001000100015180000451ab6504c03f0001000100015180000451ab660e 30142 b9e1000000010000000000000377777709666f746f666f6c696f026e6c0000010001 b9e1800000010000000200020377777709666f746f666f6c696f026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 30143 4f7928000001000000020000026e6c00000600012439623230323435312d663538342d343531622d386134622d346635663864363339356462065f6d736463730764736132303030026e6c00000500ff000000000000c0140005000100000258001c0f4453412d323030302d5345525645520764736132303030026e6c00 4f79a8040000000000000000 30144 b6722e745018fc00071f00000091c7a6000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afc98403c4e180003000000344e544c4d535350000100000097b208e0080008002c0000000c000c0020000000504c414e4e494e472d494e544e4b4f45524945520000 b672ae740000000000000000 30145 5513000000010000000000000377777717656572737465636872697374656c696a6b6c796365756d026e6c0000010001 5513840300010000000100000377777717656572737465636872697374656c696a6b6c796365756d026e6c0000010001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 30146 0000000070024000b5a300000204057a01010402 000080010000000000000000 30147 0e2000000001000000000000037777770974656c656772616166026e6c0000010001 0e2080000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 30148 7a81000000010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 7a81800200010000000000000331333003313434033137360331393307696e2d61646472046172706100000c0001 30149 3e47000000010000000000000377777708636172706f696e74026e6c0000010001 3e47800000010000000200020377777708636172706f696e74026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c019c01000020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 30150 b673057f501041b824730000000000000000 b67380010000000000000000 30151 2d3200000001000000000000036e73340767617574656e67026e6c0000010001 2d3280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30152 b673057f501841b86c7200000095bcc0000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000 b67380010000000000000000 30153 b673058d501141aa23db0000000000000000 b67380010000000000000000 30154 000000007002400032f400000204057a01010402 000080010000000000000000 30155 b6722e825011fbf2505a0000000000000000 b672ae840000000000000000 30156 b673058e501041aa23da0000000000000000 b67380010000000000000000 30157 b673a2cf501041b804730000000000000000 30158 b673a2cf501841b8d533000000953500000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000 30159 7f110000000100000000000008544c414c415430310d746f6c6c6c6f67696332303030026e6c0000060001 7f118403000100000001000008544c414c415430310d746f6c6c6c6f67696332303030026e6c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 30160 000000007002fc00bb6f00000204057801010402 000080010000000000000000 30161 b1880000000100000000000003777777066b75746a6f62026e6c0000010001 b1888000000100000002000003777777066b75746a6f62026e6c0000010001c01000020001000151800010036e73610674696e74656c03636f6d00c01000020001000151800006036e7362c02f 30162 47e600000001000000000000036e733207656e6572676973026e6c0000260001 47e680000001000000020002036e733207656e6572676973026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c3079102c00c00010001000151800004c307920a 30163 220a0000000100000000000007706f656c6d616e026e6c00000f0001 220a8000000100000002000207706f656c6d616e026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 30164 b673a2dd501141aa03db0000000000000000 30165 00000000700240004e5b00000204057a01010402 000080010000000000000000 30166 8f77000000010000000000000a626c617577706c616174026e6c00000f0001 8f77800000010000000200000a626c617577706c616174026e6c00000f0001c00c00020001000151800014046e7331300a636f6d7075746f6f6c7302626500c00c00020001000151800007046e733131c030 30167 b6722e835010fbf250590000000000000000 b672ae840000000000000000 30168 b673a2de501041aa03da0000000000000000 30169 b674f779501041b8cb2e0000000000000000 30170 b674f779501841b823af00000095ad40000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000 30171 fb2700000001000000000000037777770467757973026e6c0000010001 fb2780000001000000020000037777770467757973026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c02f 30172 b674f787501141aaca960000000000000000 30173 1c240000000100000000000003777777076e6574706f6c6c026e6c0000010001 1c248000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 30174 b674219e5010fc000fd50000000000000000 b674a1930000000000000000 30175 434400000001000000000000095f6b65726265726f73045f746370026463065f6d736463730764736132303030026e6c0000060001 434484030001000000010000095f6b65726265726f73045f746370026463065f6d736463730764736132303030026e6c0000060001c02d00060001000038400036026e730f646f6d61696e2d7265676973747279c02d0a686f73746d6173746572c0440bf1e540000070800000384000278d0000003840 30176 2cba000000010000000000000377777706757064617465026e6c0000010001 2cba800000010000000200020377777706757064617465026e6c0000010001c01000020001000151800018067365727665720e666c6974732d696e7465726e6574c017c0100002000100015180000a0773657276657232c032c02b00010001000151800004d5a0da82c04f00010001000151800004d5a0da84 30177 b674f788501041aaca950000000000000000 30178 0d0200000001000000000000023338033136370137033139350964796e61626c6f636b07656173796e6574026e6c0000100001 0d0280000001000000020002023338033136370137033139350964796e61626c6f636b07656173796e6574026e6c0000100001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 30179 b674219e5018fc0075b20000009117fa000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afc98403c4e180003000000344e544c4d535350000100000097b208e0080008002c0000000c000c0020000000504c414e4e494e472d494e544e4b4f45524945520000 b674a1930000000000000000 30180 4f7c28000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730764736132303030026e6c00002100010000025800220000006400580f4453412d323030302d5345525645520764736132303030026e6c00 4f7ca8040000000000000000 30181 3aee00000001000000000000037777770b6b726f6f6e6b6f7a696a6e026e6c0000010001 3aee80000001000000020002037777770b6b726f6f6e6b6f7a696a6e026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01cc01000020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 30182 00000000700240005e6e00000204057a01010402 000080010000000000000000 30183 b6758667501041b84c530000000000000000 30184 b6758667501841b83393000000951d80000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000 30185 b67421ac5011fbf20f410000000000000000 b674a1a30000000000000000 30186 b6758675501141aa4bbb0000000000000000 30187 0000000070024000834f00000204057a01010402 000080010000000000000000 30188 b6758676501041aa4bba0000000000000000 30189 b6764c30501041b8ab6a0000000000000000 b676cc340000000000000000 30190 b6764c30501841b81b6b0000009595c0000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000 b676cc340000000000000000 30191 b67421ad5010fbf20f400000000000000000 b674a1a30000000000000000 30192 b6764c3e501141aaaad20000000000000000 b676cc340000000000000000 30193 3d4800000001000000000000037777770c65787472616e657473697465026e6c0000010001 3d4880000001000000020000037777770c65787472616e657473697465026e6c0000010001c01000020001000151800015036e73370b686f7374696e67776f7278036e657400c01000020001000151800006036e7338c035 30194 0000000070024000b5d500000204057a01010402 000080010000000000000000 30195 125a0000000100000000000003616b64026e6c0000ff0001 125a8000000100000002000103616b64026e6c0000ff0001c00c0002000100015180000e026e730864656c6f69747465c010c00c00020001000151800013036e7332026e6c0669676e697465036e657400c02400010001000151800004aac21423 30196 b6764c3f501041aaaad10000000000000000 b676cc340000000000000000 30197 b676e889501041b841970000000000000000 30198 b676e889501841b83958000000950e00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afcec403c4e6c0003000000364e544c4d535350000100000097b200e0070007002f0000000f000f00200000004453412d323030302d534552564552445341323030300000 30199 a3f00000000100000000000003777777086c69626964666974026e6c0000010001 a3f08000000100000002000003777777086c69626964666974026e6c0000010001c01000020001000151800014036e73310b706978656c64657369676e02626500c01000020001000151800006036e7332c031 30200 9edb00000001000000000000076772696666696e0473696f32026e6c0000010001 9edb80000001000000030002076772696666696e0473696f32026e6c0000010001c0140002000100015180000d036e733106776964657873c019c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 30201 7c14000000010000000000000e61726e6f6c642d73696564736d61026e6c0000ff0001 7c14800000010000000200000e61726e6f6c642d73696564736d61026e6c0000ff0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c033 30202 b676e897501141aa40ff0000000000000000 30203 1fda000000010000000000000573746174730b647269766572736f6e6c79026e6c0000010001 1fda800000010000000200020573746174730b647269766572736f6e6c79026e6c0000010001c01200020001000151800009036e7331026973c01ec01200020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 30204 b676e898501041aa40fe0000000000000000 30205 98db00000001000000000000037777770b636565736c756262657273026e6c0000010001 98db80000001000000020002037777770b636565736c756262657273026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01cc01000020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 30206 7e8800000001000000000000086d65756c656d616e026e6c00000f0001 7e8880000001000000020002086d65756c656d616e026e6c00000f0001c00c0002000100015180000f036e73330874656c6562797465c015c00c00020001000151800006036e7334c02dc02900010001000151800004d5d38115c04400010001000151800004d5d38116 30207 5db4000000010000000000000777616e61646f6f026e6c00000f0001 5db4800000010000000200010777616e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 30208 5b450000000100000000000013535449434854494e47554e49544e4554524343026e6c0000020001 5b458403000100000001000013535449434854494e47554e49544e4554524343026e6c0000020001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 30209 c6680000000100000000000005616e67656c0c726567696f706f7274616c73026e6c0000010001 c6688000000100000003000305616e67656c0c726567696f706f7274616c73026e6c0000010001c01200020001000151800010036e733109776973652d67757973c01fc01200020001000151800006036e7330c037c01200020001000151800006036e7332c037c03300010001000151800004d413cd91c04f00010001000151800004d413cd8fc06100010001000151800004c16d7a3e 30210 de1e00000001000000000000087a7569646b6f6f70026e6c0000010001 de1e80000001000000020002087a7569646b6f6f70026e6c0000010001c00c000200010001518000110a6c65757665686176656e03696772c015c00c0002000100015180000d0a64656c6673686176656ec034c029000100010001518000043e2d5e0dc046000100010001518000043e2d5e82 30211 7189000000010000000000000e657863656c6c656e746d61746368026e6c0000ff0001 7189800000010000000200020e657863656c6c656e746d61746368026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec01bc00c00020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 30212 c9f20000000100000000000004706f7033036b6b6e026e6c0000010001 c9f28000000100000002000204706f7033036b6b6e026e6c0000010001c01100020001000151800011026e730b76736d2d686f7374696e67c015c01100020001000151800006036e7332c02cc02900010001000151800004d468c205c04600010001000151800004d468c204 30213 b54a0000000100000000000005616e67656c0c726567696f706f7274616c73026e6c0000010001 b54a8000000100000003000305616e67656c0c726567696f706f7274616c73026e6c0000010001c01200020001000151800010036e733109776973652d67757973c01fc01200020001000151800006036e7330c037c01200020001000151800006036e7332c037c03300010001000151800004d413cd91c04f00010001000151800004d413cd8fc06100010001000151800004c16d7a3e 30214 6bfe000000010000000000000170066f6d726f6570026e6c0000010001 6bfe800000010000000200020170066f6d726f6570026e6c0000010001c00e00020001000151800009066d696e6e6965c00ec00e0002000100015180000805726f62696ec00ec02900010001000151800004913a1e04c03e00010001000151800004913a1a34 30215 159e00000001000000000000037777770b6865696469706f74746572026e6c0000010001 159e80000001000000020000037777770b6865696469706f74746572026e6c0000010001c01000020001000151800010036e73610674696e74656c03636f6d00c01000020001000151800006036e7362c034 30216 1dd700000001000000000000037777770470756e74026e6c0000010001 1dd780000001000000020002037777770470756e74026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c015c01000020001000151800006036e7332c02dc02900010001000151800004d4ccd865c044000100010001518000045054ec34 30217 6cae0000000100000000000006776468303131066e7434616c6c026e6c0000010001 6cae8000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 30218 e313000000010000000000000469632d73026e6c0000ff0001 e313800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 30219 6501000000010000000000000876616b616e746965096f7665727a69636874026e6c0000010001 6501800000010000000300030876616b616e746965096f7665727a69636874026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c033000100010001518000043e45a282c045000100010001518000043e45a283c057000100010001518000043e45a284 30220 a89900000001000000000000036e733109666972737466696e64026e6c0000010001 a89980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30221 a89a00000001000000000000036e733209666972737466696e64026e6c0000010001 a89a80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30222 07fc0000000100000000000003777777086762617061727479026e6c0000010001 07fc8000000100000002000003777777086762617061727479026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c032 30223 8ff100000001000000000000037777770e6161612d6d61696e737472656574026e6c0000010001 8ff180000001000000020001037777770e6161612d6d61696e737472656574026e6c0000010001c01000020001000151800012036e733208637563756d62657203636f6d00c0100002000100015180000e036e73320763697374726f6ec01fc051000100010001518000043ed81f38 30224 e3a600000001000000000000076275726d656573026e6c0000010001 e3a680000001000000020000076275726d656573026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02e 30225 2cc700000001000000000000037777770c72616d656e63656e7472756d026e6c0000010001 2cc780000001000000020000037777770c72616d656e63656e7472756d026e6c0000010001c0100002000100015180000c036e723105692d702d64c01dc01000020001000151800006036e7232c035 30226 a89c00000001000000000000036e733109666972737466696e64026e6c0000010001 a89c80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30227 a89d00000001000000000000036e733209666972737466696e64026e6c0000010001 a89d80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30228 65b100000001000000000000037777770562696e636b026e6c0000010001 65b180000001000000020002037777770562696e636b026e6c0000010001c0100002000100015180000b036e73310470696e65c016c01000020001000151800006036e7332c02ec02a00010001000151800004d59c0201c04100010001000151800004c3c1a303 30229 1aa9000000010000000000000c696e746572636c6173736963026e6c0000ff0001 1aa9800000010000000200020c696e746572636c6173736963026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 30230 cf1800000001000000000000037777770764626332303033026e6c0000010001 cf1880000001000000030003037777770764626332303033026e6c0000010001c01000020001000151800011046e7365310963617067656d696e69c018c01000020001000151800007046e736532c031c0100002000100015180000b086e732d69736d3031c031c02c00010001000151800004c6b8e70dc04900010001000151800004c6b8e70cc05c00010001000151800004d5f4a024 30231 38640000000100000000000003777777076461797a657273026e6c0000010001 38648000000100000002000003777777076461797a657273026e6c0000010001c01000020001000151800011036e7333076361706361766503636f6d00c01000020001000151800006036e7334c030 30232 df850000000100000000000003777777077374656d76616e026e6c0000010001 df858000000100000002000103777777077374656d76616e026e6c0000010001c0100002000100015180000a036e733303777873c018c01000020001000151800006036e7334c030c04200010001000151800004d5ef9a65 30233 eaec00000001000000000000037777770a6d61726b766462757267026e6c0000010001 eaec80000001000000020000037777770a6d61726b766462757267026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 30234 a62500000001000000000000046d61696c09736f6e6e6568757973026e6c0000010001 a62580000001000000020002046d61696c09736f6e6e6568757973026e6c0000010001c01100020001000151800010036e733109686f73746e65746276c01bc01100020001000151800006036e7332c033c02f0001000100015180000451113264c04b00010001000151800004d5c42851 30235 d7c70000000100000000000005737076646c026e6c00000f0001 d7c78000000100000002000205737076646c026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c012c00c00020001000151800006036e7332c029c02600010001000151800004d4cb0e42c04100010001000151800004d4cb1221 30236 a92a00000001000000000000046d61696c0d70616e6461736f667477617265026e6c0000010001 a92a80000001000000020000046d61696c0d70616e6461736f667477617265026e6c0000010001c0110002000100015180000c03646e73036b706e02626500c01100020001000151800005026e73c037 30237 e7660000000100000000000006636861726973026e6c00000f0001 e7668000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 30238 e02a000000010000000000000d686565726875676f7761617264026e6c00000f0001 e02a800000010000000200000d686565726875676f7761617264026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c01ac00c0002000100015180000704686e7331c033 30239 06890000000100000000000009652d6c756e61746963026e6c0000010001 06898000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 30240 ed7c000000010000000000000b626561747269786f6f7264026e6c0000010001 ed7c800000010000000200020b626561747269786f6f7264026e6c0000010001c00c0002000100015180000a036e733103617a67c018c00c0002000100015180000e036e733107737572666e6574c018c02c00010001000151800004c057175cc04200010001000151800004c0576a65 30241 154000000001000000000000036e73330767617574656e67026e6c0000010001 154080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30242 81a3000000010000000000000d73616c6c616e6473686f657665026e6c00000f0001 81a3800000010000000200020d73616c6c616e6473686f657665026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c01ac00c00020001000151800006036e7332c032c02e0001000100015180000450416028c04900010001000151800004c356780c 30243 0dfc00000001000000000000036e733203666a66026e6c0000010001 0dfc80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30244 0dfd00000001000000000000036e733103666a66026e6c0000010001 0dfd80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30245 818e00000001000000000000037777770668736e6f656b026e6c0000010001 818e80000001000000030000037777770668736e6f656b026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c033c0100002000100015180000a076e73686f737433c033 30246 3894000000010000000000000377777708646967696465736b026e6c0000010001 3894800000010000000200020377777708646967696465736b026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c019c01000020001000151800006036e7332c031c02d00010001000151800004505fa002c04800010001000151800004505fac02 30247 0e0700000001000000000000036e733203666a66026e6c0000010001 0e0780000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30248 0e0800000001000000000000036e733103666a66026e6c0000010001 0e0880000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30249 34f100000001000000000000026e73076e65746c616e64026e6c0000010001 34f180000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 30250 e218000000010000000000000c647061706c6161747765726b026e6c00000f0001 e218800000010000000200010c647061706c6161747765726b026e6c00000f0001c00c0002000100015180000a036e733303777873c019c00c00020001000151800006036e7334c031c04300010001000151800004d5ef9a65 30251 c85700000001000000000000036e7332076e65746c616e64026e6c0000010001 c85780000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 30252 d51400000001000000000000056d6f70726f026e6c00000f0001 d51480000001000000030001056d6f70726f026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 30253 cc6f00000001000000000000037777770b73616c73616f6e6c696e65026e6c0000010001 cc6f80000001000000020000037777770b73616c73616f6e6c696e65026e6c0000010001c0100002000100015180001104726171390662697a6e697a036e657400c01000020001000151800008057261713134c035 30254 40c000000001000000000000067069636c616e026e6c0000060001 40c084030001000000010000067069636c616e026e6c0000060001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 30255 d68f00000001000000000000037777770964657272616d61646f026e6c0000010001 d68f84030001000000010000037777770964657272616d61646f026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 30256 63bf000000010000000000000732303030737276067069636c616e026e6c0000060001 63bf840300010000000100000732303030737276067069636c616e026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 30257 5dea000000010000000000000377777704696b6561026e6c0000010001 5dea800000010000000200000377777704696b6561026e6c0000010001c010000200010001518000150a676174656b656570657204696b656103636f6d00c010000200010001518000130761757468323130026e73027575036e657400 30258 c1e000000001000000000000037777770664757061636f026e6c0000010001 c1e080000001000000020001037777770664757061636f026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02b00010001000151800004d586fa2b 30259 686c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 686c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30260 ca5600000001000000000000086d61746368346d65026e6c0000ff0001 ca5680000001000000020000086d61746368346d65026e6c0000ff0001c00c00020001000151800017036e73310d666c79696e6773657276657273036e657400c00c00020001000151800006036e7332c02d 30261 4512000000010000000000000377777709626f6f7473636c7562026e6c0000010001 4512800000010000000200020377777709626f6f7473636c7562026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01ac01000020001000151800006036e7332c032c02e000100010001518000045054f347c04a000100010001518000043e94a047 30262 154c00000001000000000000036e73340767617574656e67026e6c0000010001 154c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30263 255400000001000000000000036e73340767617574656e67026e6c0000010001 255480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30264 3d5b00000001000000000000036e73340767617574656e67026e6c0000010001 3d5b80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30265 056000000001000000000000036e73340767617574656e67026e6c0000010001 056080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30266 256800000001000000000000036e73340767617574656e67026e6c0000010001 256880000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30267 d8ce00000001000000000000097061726e6173736961026e6c00000f0001 d8ce80000001000000020000097061726e6173736961026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c030 30268 3b6a00000001000000000000037777770a6364636b6c696e69656b026e6c0000010001 3b6a80000001000000020002037777770a6364636b6c696e69656b026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01bc01000020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 30269 dcc900000001000000000000086d61746368346d65026e6c0000010001 dcc980000001000000020000086d61746368346d65026e6c0000010001c00c00020001000151800017036e73310d666c79696e6773657276657273036e657400c00c00020001000151800006036e7332c02d 30270 28c200000001000000000000036e73310f6578636c757369766564657369676e026e6c0000010001 28c280000001000000020002036e73310f6578636c757369766564657369676e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d97261bec04200010001000151800004d97261bd 30271 6e5000000001000000000000055f6c646170045f7463700a6b65756b656e68756973026e6c0000060001 6e5080000001000000020002055f6c646170045f7463700a6b65756b656e68756973026e6c0000060001c0170002000100015180000d026e73076e65746c616e64c022c01700020001000151800006036e7332c039c03600010001000151800004d9aa2042c04f00010001000151800004d9aa2c06 30272 163a00000001000000000000046d61696c0965647761726476616c026e6c0000010001 163a80000001000000020002046d61696c0965647761726476616c026e6c0000010001c0110002000100015180000f026e7309656174736572766572c01bc01100020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 30273 63540000000100000000000005646e732d31056c61646f74026e6c0000010001 63548000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30274 431d0000000100000000000005646e732d32056c61646f74026e6c0000010001 431d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30275 4396000000010000000000000a62696762726f74686572026e6c00000f0001 4396800000010000000300030a62696762726f74686572026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c017c00c0002000100015180000a076e736175746832c033c00c0002000100015180000a076e736175746833c033c02b00010001000151800004d5880c33c04500010001000151800004d5880c3bc05b00010001000151800004d4ccc00b 30276 a7c40000000100000000000006787334616c6c026e6c0000010001 a7c48000000100000003000206787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 30277 38ad00000001000000000000026e73057465747261026e6c00001c0001 38ad80000001000000020002026e73057465747261026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000045059e887c037000100010001518000045059e88b 30278 853600000001000000000000026e73057465747261026e6c0000260001 853680000001000000020002026e73057465747261026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000045059e887c037000100010001518000045059e88b 30279 162100000001000000000000036e7332057465747261026e6c00001c0001 162180000001000000020002036e7332057465747261026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a000100010001518000045059e887c00c000100010001518000045059e88b 30280 fe9b00000001000000000000036e7332057465747261026e6c0000260001 fe9b80000001000000020002036e7332057465747261026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a000100010001518000045059e887c00c000100010001518000045059e88b 30281 b56b000000010000000000000377777705616b617261026e6c0000010001 b56b800000010000000200000377777705616b617261026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c02f 30282 089200000001000000000000056d6f70726f026e6c0000010001 089280000001000000030001056d6f70726f026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 30283 d7fb0000000100000000000004736d7470046c756e61026e6c0000010001 d7fb8000000100000002000004736d7470046c756e61026e6c0000010001c01100020001000151800017026e7309726f7474657264616d046c756e61036e657400c0110002000100015180000f026e7309686f6f6664646f7270c037 30284 27da00000001000000000000026e6e026e6c00001c0001 27da80000001000000020002026e6e026e6c00001c0001c00c0002000100015180000a036e733103696e67c00fc00c00020001000151800006036e7332c027c0230001000100015180000491dd19c2c0390001000100015180000491dd5dc2 30285 4e9c000000010000000000000377777708746f737472616d73026e6c0000010001 4e9c800000010000000200010377777708746f737472616d73026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c019c01000020001000151800011036e7332076e6564636f6d70036f726700c02d00010001000151800004c3c1a80d 30286 aa5600000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 aa5680000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 30287 1c9d00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 1c9d80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 30288 712a00000001000000000000046d61696c086f6e7367726f6570026e6c0000010001 712a80000001000000020002046d61696c086f6e7367726f6570026e6c0000010001c011000200010001518000110a6c65757665686176656e03696772c01ac0110002000100015180000d0a64656c6673686176656ec039c02e000100010001518000043e2d5e0dc04b000100010001518000043e2d5e82 30289 7ff400000001000000000000037777770c7374657272656e6265757273026e6c0000010001 7ff480000001000000020000037777770c7374657272656e6265757273026e6c0000010001c0100002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01000020001000151800007046e6f7661c036 30290 4e890000000100000000000003656c3107696e7465727873026e6c0000010001 4e898000000100000002000203656c3107696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 30291 5bf60000000100000000000003656c3207696e7465727873026e6c0000010001 5bf68000000100000002000203656c3207696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 30292 8ee70000000100000000000003656c3307696e7465727873026e6c0000010001 8ee78000000100000002000203656c3307696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 30293 c0520000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c0528000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30294 f0500000000100000000000003626c3102626c06787334616c6c026e6c0000260001 f0508000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30295 6b2900100001000000000001036e733104686f6d65026e6c00000100010000290800000080000000 6b2980000001000000030004036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 30296 296400100001000000000001036e733204686f6d65026e6c00000100010000290800000080000000 296480000001000000030004036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 30297 94b200100001000000000001036e733304686f6d65026e6c00000100010000290800000080000000 94b280000001000000030004036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 30298 ca5900100001000000000001036e733404686f6d65026e6c00000100010000290800000080000000 ca5980000001000000030004036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 30299 1dc00000000100000000000009737469637a61612d300364736c0b7669616e6574776f726b73026e6c0000010001 1dc08000000100000002000209737469637a61612d300364736c0b7669616e6574776f726b73026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac03a00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 30300 93c100000001000000000000036e733103617474026e6c0000010001 93c180000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 30301 c97100000001000000000000036e733203617474026e6c0000010001 c97180000001000000020002036e733203617474026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 30302 9eb50000000100000000000018656c6a65732d706572736f6e65656c736469656e7374656e026e6c0000010001 9eb58000000100000002000218656c6a65732d706572736f6e65656c736469656e7374656e026e6c0000010001c00c0002000100015180000903706b3102706bc025c00c0002000100015180000603706b32c03dc03900010001000151800004d43d1815c04e00010001000151800004d43d1818 30303 409d0000000100000000000004706f70330a636f6e63657074736661026e6c00001c0001 409d8000000100000002000204706f70330a636f6e63657074736661026e6c00001c0001c0110002000100015180000603646e73c011c0110002000100015180001004646e733208636f6e6365707473c01cc03000010001000151800004d5c51c03c04200010001000151800004d5c51e1c 30304 4aac000000010000000000000377777705726164696f026e6c0000010001 4aac800000010000000200000377777705726164696f026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c031 30305 16b60000000100000000000008686f73746e616d650462696e640000100003 16b68000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 30306 7cd400000001000000000000026e73036d6c63026e6c0000010001 7cd480000001000000030003026e73036d6c63026e6c0000010001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 30307 2789000000010000000000000f6b656d70656c656b74726f6e696b73026e6c00000f0001 2789800000010000000200020f6b656d70656c656b74726f6e696b73026e6c00000f0001c00c0002000100015180000e036e7331077472696f646573c01cc00c00020001000151800006036e7332c034c03000010001000151800004d5c9d865c04a00010001000151800004d5c9d866 30308 0a57000000010000000000000377777708637463656e746572026e6c0000010001 0a57840300010000000100000377777708637463656e746572026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 30309 8aae0000000100000000000006474556454b4503575442024e4c0000ff0001 8aae8000000100000002000206474556454b4503575442024e4c0000ff0001c0130002000100015180000e036e73310765766964656e74c017c01300020001000151800006036e7332c02fc02b00010001000151800004c36d19c4c04500010001000151800004c36d1942 30310 5fd3000000010000000000000a70617274796d6f6c656e026e6c0000ff0001 5fd3800000010000000200000a70617274796d6f6c656e026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c017c00c00020001000151800006036e7332c02e 30311 9858000000010000000000000377777707636f6e74696e75026e6c0000010001 9858800000010000000300020377777707636f6e74696e75026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 30312 460c000000010000000000000377777707636c7562303730026e6c0000010001 460c800000010000000200020377777707636c7562303730026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c018c01000020001000151800006036e7332c030c02c000100010001518000045054f347c048000100010001518000043e94a047 30313 a81900000001000000000000036e733104686f6d65026e6c0000010001 a81980000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 30314 053e00000001000000000000036e733109666972737466696e64026e6c0000010001 053e80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30315 ecc300000001000000000000116465776f6f6e6d696a7a61616e73746164026e6c0000010001 ecc380000001000000020002116465776f6f6e6d696a7a61616e73746164026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c01ec00c00020001000151800006036e7332c036c03200010001000151800004d43d0f08c05000010001000151800004d43d19e2 30316 841200000001000000000000036e733104686f6d65026e6c0000010001 841280000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 30317 420900000001000000000000036e733204686f6d65026e6c0000010001 420980000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 30318 021100000001000000000000036e733304686f6d65026e6c0000010001 021180000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 30319 483100000001000000000000036e733404686f6d65026e6c0000010001 483180000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 30320 11490000000100000000000006666178737276064241494c4559086261696c65792d69026e6c0000060001 11498403000100000001000006666178737276064241494c4559086261696c65792d69026e6c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 30321 42d300000001000000000000046c69736103796f77026e6c0000010001 42d380000001000000020000046c69736103796f77026e6c0000010001c01100020001000151800010046c697361086e6f7661686f7374c015c01100020001000151800006036e7332c02e 30322 4cf3000000010000000000000377777709636172706d75736963026e6c0000010001 4cf3800000010000000200020377777709636172706d75736963026e6c0000010001c01000020001000151800013036e73310c666173747365727665723131c01ac01000020001000151800006036e7332c032c02e0001000100015180000442a4f077c04d0001000100015180000442a4f078 30323 8820000000010000000000000377777706667973696f6e026e6c0000010001 8820800000010000000300020377777706667973696f6e026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c017c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c02fc02b000100010001518000045054e055c06400010001000151800004d4ccc655 30324 f07000100001000000000001034e53320743495354524f4e024e4c00000100010000290800000000000000 f07080000001000000020003034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 30325 112700000001000000000000036e733209666972737466696e64026e6c0000010001 112780000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30326 19070000000100000000000003626e63026e6c00000f0001 19078000000100000002000203626e63026e6c00000f0001c00c00020001000151800018067365727665720e666c6974732d696e7465726e6574c010c00c0002000100015180000a0773657276657232c02bc02400010001000151800004d5a0da82c04800010001000151800004d5a0da84 30327 0a8f0000000100000000000007766462636f6d70026e6c00001c0001 0a8f8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 30328 04b328000001000200000000026e6c000006000106666178737276064241494c4559086261696c65792d69026e6c00000500fe000000000000c014000100010000000000040a001440 04b3a8040000000000000000 30329 36d100000001000000000000036e733109666972737466696e64026e6c0000010001 36d180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30330 12d600000001000000000000036e733209666972737466696e64026e6c0000010001 12d680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30331 d55f000000010000000000000377777707636272636c7562026e6c0000010001 d55f800000010000000200020377777707636272636c7562026e6c0000010001c01000020001000151800011036e73310a667574757265666c6578c018c01000020001000151800006036e7332c030c02c00010001000151800004d9aa122bc04900010001000151800004d9aa122c 30332 460a00000001000000000000036e73310a62726f61646669656c64026e6c0000010001 460a80000001000000020002036e73310a62726f61646669656c64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cb1732c03d00010001000151800004d55486da 30333 c77b00000001000000000000036e73320a62726f61646669656c64026e6c0000010001 c77b80000001000000020002036e73320a62726f61646669656c64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d4cb1732c00c00010001000151800004d55486da 30334 8bd000000001000000000000037777770a74696e7573736d697473026e6c0000010001 8bd080000001000000020000037777770a74696e7573736d697473026e6c0000010001c0100002000100015180000c026e7306766576696461c01bc01000020001000151800006036e7332c032 30335 9d1a00000001000000000000037777770b6d6f7368692d6d6f736869026e6c0000010001 9d1a80000001000000020000037777770b6d6f7368692d6d6f736869026e6c0000010001c0100002000100015180000c026e7306766576696461c01cc01000020001000151800006036e7332c033 30336 86400010000100000000000104626c313602626c06787334616c6c026e6c00000100010000290800000080000000 86408000000100000003000304626c313602626c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d09630000291000000000000000 30337 0220000000010000000000000276330a646d64656c6976657279026e6c0000010001 0220800000010000000200000276330a646d64656c6976657279026e6c0000010001c00f00020001000151800010036e73310673697465347503636f6d00c00f00020001000151800006036e7332c032 30338 5e96000000010000000000000377777709677269667464696a6b026e6c0000010001 5e96800000010000000200000377777709677269667464696a6b026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c032 30339 000000007002400095d800000204056401010402 000080010000000000000000 30340 b67b1e67501040b0eca90000000000000000 b67b9e640000000000000000 30341 b67b1e67501840b0d66800000089f180000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd03403c4e8300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004641585352564241494c45590000 b67b9e640000000000000000 30342 61ff0000000100000000000004626c313602626c06787334616c6c026e6c0000010001 61ff8000000100000003000204626c313602626c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 30343 a2830000000100000000000010534d49544853555045524d41524b4554026e6c0000020001 a2838403000100000001000010534d49544853555045524d41524b4554026e6c0000020001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 30344 b67b1e75501140a2ec1d0000000000000000 b67b9e740000000000000000 30345 746300000001000000000000036e733106736f6c636f6e026e6c0000010001 746380000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 30346 40dc00000001000000000000036e733106736f6c636f6e026e6c0000260001 40dc80000001000000030003036e733106736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 30347 907a00000001000000000000036e733206736f6c636f6e026e6c0000010001 907a80000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 30348 243100000001000000000000036e733206736f6c636f6e026e6c0000260001 243180000001000000030003036e733206736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 30349 e0fa0000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 e0fa8000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 30350 f07d0000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000260001 f07d8000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000260001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 30351 0000000070024000693a00000204056401010402 000080010000000000000000 30352 e9ca00000001000000000000037777770462797878026e6c0000010001 e9ca80000001000000020002037777770462797878026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 30353 b67b1e76501040a2ec1c0000000000000000 b67b9e740000000000000000 30354 d6ec00000001000000000000036e73310564656d6f6e026e6c0000010001 d6ec80000001000000030002036e73310564656d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 30355 d6ec00000001000000000000036e73310564656d6f6e026e6c0000010001 d6ec80000001000000030002036e73310564656d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 30356 b67bf069501040b0ee080000000000000000 30357 b12b00000001000000000000036e7331096475746368686f7374026e6c0000010001 b12b80000001000000020001036e7331096475746368686f7374026e6c0000010001c0100002000100015180000b0861737465726f7065c010c0100002000100015180000c036e733205786c722d38c01ac02e00010001000151800004d58523d2 30358 565100000001000000000000036e7332096475746368686f7374026e6c0000010001 565180000001000000020001036e7332096475746368686f7374026e6c0000010001c0100002000100015180000b0861737465726f7065c010c0100002000100015180000c036e733205786c722d38c01ac02e00010001000151800004d58523d2 30359 b67bf069501840b024c800000089a680000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd03403c4e8300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004641585352564241494c45590000 30360 0d8c00000001000000000000036e73330767617574656e67026e6c0000010001 0d8c80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30361 707500000001000000000000034e53320743495354524f4e024e4c0000010001 707580000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 30362 1d6f00000001000000000000097765626775727530350777656267757275026e6c0000010001 1d6f80000001000000020000097765626775727530350777656267757275026e6c0000010001c01600020001000151800012026e73096e6c686f7374696e67036e657400c01600020001000151800006036e7331c035 30363 b67bf077501140a2ed7c0000000000000000 30364 0f6700000001000000000000036e733203666a66026e6c0000010001 0f6780000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30365 0f6800000001000000000000036e733103666a66026e6c0000010001 0f6880000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30366 340f00000001000000000000036e733109666972737466696e64026e6c0000010001 340f80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30367 0000000070024000124a00000204056401010402 000080010000000000000000 30368 893300000001000000000000037777770a64696b6b6572746a6573026e6c0000010001 893380000001000000020000037777770a64696b6b6572746a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 30369 52f000000001000000000000036e733209666972737466696e64026e6c0000010001 52f080000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30370 3cef000000010000000000000a7777773b6465726f656b026e6c0000010001 3cef840300010000000100000a7777773b6465726f656b026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 30371 4f62000000010000000000000377777706617265613137026e6c0000010001 4f62800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 30372 385e00000001000000000000096d61696c7363616e31086d6f76656e657874026e6c0000010001 385e80000001000000030002096d61696c7363616e31086d6f76656e657874026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800012036e7333086d6f76656e657874036e657400c03300010001000151800004d4ccc445c04500010001000151800004d4ccf745 30373 5ef4000000010000000000000377777706617265613137026e6c0000010001 5ef4800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 30374 b67bf078501040a2ed7b0000000000000000 30375 b67d7555501040b0122b0000000000000000 b67df5540000000000000000 30376 3e410000000100000000000005646e732d32056c61646f74026e6c0000010001 3e418000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30377 1bd2000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 1bd2800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30378 b67d7555501840b0906a000000895d00000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd04403c4e8400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004641585352564241494c45590000 b67df5540000000000000000 30379 13d9000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 13d9800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30380 b67d7563501140a2119f0000000000000000 b67df5640000000000000000 30381 d3d00000000100000000000005646e732d31056c61646f74026e6c0000010001 d3d08000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30382 731900000001000000000000037777770663656275636f026e6c0000010001 731980000001000000020002037777770663656275636f026e6c0000010001c0100002000100015180000c036e7331056f72696f6ec017c01000020001000151800006036e7332c02fc02b00010001000151800004c2862282c04300010001000151800004c2862b02 30383 2e9500000001000000000000037777770e6d616e6167656d656e74626f656b026e6c0000010001 2e9580000001000000020000037777770e6d616e6167656d656e74626f656b026e6c0000010001c01000020001000151800017026e7309726f7474657264616d046c756e61036e657400c0100002000100015180000f026e7309686f6f6664646f7270c040 30384 32d100000001000000000000036e7332056f72696f6e026e6c0000010001 32d180000001000000020002036e7332056f72696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004c2862282c00c00010001000151800004c2862b02 30385 f7a900000001000000000000037777770e6161612d6d61696e737472656574026e6c0000010001 f7a980000001000000020001037777770e6161612d6d61696e737472656574026e6c0000010001c01000020001000151800012036e733208637563756d62657203636f6d00c0100002000100015180000e036e73320763697374726f6ec01fc051000100010001518000043ed81f38 30386 b67d7564501040a2119e0000000000000000 b67df5640000000000000000 30387 e19a0000000100000000000009736b79726964657273026e6c0000010001 e19a8000000100000002000009736b79726964657273026e6c0000010001c00c00020001000151800014026e730b736d617274736572766572036e657400c00c00020001000151800006036e7332c02d 30388 4bdd00000001000000000000036e7331056f72696f6e026e6c0000010001 4bdd80000001000000020002036e7331056f72696f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2862282c03800010001000151800004c2862b02 30389 8053000000010000000000000a696a7373656c6865656d026e6c00000f0001 8053800000010000000200020a696a7373656c6865656d026e6c00000f0001c00c00020001000151800013076a61736d696e6508696e667261636f6dc017c00c0002000100015180000a076f6d616c6c6579c033c02b00010001000151800004c323cb41c04a000100010001518000043e320fd3 30390 0fa600000001000000000000036e733203666a66026e6c0000010001 0fa680000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30391 4783000000010000000000000d6f6479737365652d67726f6570026e6c00001c0001 4783800000010000000200000d6f6479737365652d67726f6570026e6c00001c0001c00c00020001000151800013036e7331026e6c0669676e697465036e657400c00c00020001000151800006036e7332c032 30392 175f00000001000000000000036e73310b696e746572616363657373026e6c0000010001 175f80000001000000030001036e73310b696e746572616363657373026e6c0000010001c01000020001000151800002c00cc0100002000100015180001a09756e616c72697330310a6963742d626568656572036e657400c0100002000100015180000c09756e616c7269733032c048c00c00010001000151800004c1ad2362 30393 ee3300000001000000000000036e73310b696e746572616363657373026e6c0000260001 ee3380000001000000030001036e73310b696e746572616363657373026e6c0000260001c01000020001000151800002c00cc0100002000100015180001a09756e616c72697330310a6963742d626568656572036e657400c0100002000100015180000c09756e616c7269733032c048c00c00010001000151800004c1ad2362 30394 0fa700000001000000000000036e733103666a66026e6c0000010001 0fa780000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30395 0bdd0000000100000000000003777777057673686f70026e6c0000010001 0bdd8000000100000003000003777777057673686f70026e6c0000010001c0100002000100015180001809776f7274656c746a650868696e6472696b73036e657400c0100002000100015180000a077065656e746a65c034c0100002000100015180001206706574727573086d696e64636f7079c03d 30396 375800000001000000000000036e733109666972737466696e64026e6c0000010001 375880000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30397 0c1900000001000000000000036e733209666972737466696e64026e6c0000010001 0c1980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30398 e1ed00000001000000000000036e7331056175646178026e6c0000010001 e1ed80000001000000020001036e7331056175646178026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000d036e7332036b706e036e657400c02a00010001000151800004c1ad5519 30399 90e900000001000000000000036e7331056175646178026e6c00001c0001 90e980000001000000020001036e7331056175646178026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000d036e7332036b706e036e657400c02a00010001000151800004c1ad5519 30400 3e7d000000010000000000000c6b696e676d617363686f6f6c026e6c0000010001 3e7d800000010000000200000c6b696e676d617363686f6f6c026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c033 30401 332c0000000100000000000003696165026e6c00000f0001 332c8000000100000002000203696165026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 30402 1b80000000010000000000000377777705636363626c036f726708656d6561636f7265026e6c0000010001 1b80840300010000000100000377777705636363626c036f726708656d6561636f7265026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 30403 0d0b000000010000000000000e63656e747261616c626568656572026e6c0000010001 0d0b800000010000000300030e63656e747261616c626568656572026e6c0000010001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae 30404 4fbc0000000100000000000004706f70330564656d6f6e026e6c0000010001 4fbc8000000100000003000204706f70330564656d6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 30405 32f500000001000000000000046d61696c0e7a65656c616e642d737570706c79026e6c0000010001 32f580000001000000020002046d61696c0e7a65656c616e642d737570706c79026e6c0000010001c0110002000100015180000a036e7331036e7873c020c01100020001000151800006036e7332c038c03400010001000151800004d973c015c04a00010001000151800004d973c102 30406 1be40000000100000000000003777777096475696e7a69636874026e6c0000010001 1be48000000100000002000203777777096475696e7a69636874026e6c0000010001c01000020001000151800010026e730a7a65656c616e646e6574c01ac01000020001000151800006036e7332c031c02e00010001000151800004d473c0c1c04a00010001000151800004d473c0c3 30407 2362000000010000000000000377777708616432636c69636b026e6c0000010001 2362800000010000000200020377777708616432636c69636b026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d5c40907c03f000100010001518000043eddd517 30408 1b5a28000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d736463730c6e7065727370656374696566026e6c00002100010000025800260000006401850e6e706572737065637469656630310c6e7065727370656374696566026e6c00 1b5aa8040000000000000000 30409 dff900000001000000000000037777770975736d61726b657473026e6c0000010001 dff980000001000000030002037777770975736d61726b657473026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01ac01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c032c02e000100010001518000045054e055c06700010001000151800004d4ccc655 30410 b81200000001000000000000037777770975736d61726b657473026e6c0000010001 b81280000001000000030002037777770975736d61726b657473026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01ac01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c032c02e000100010001518000045054e055c06700010001000151800004d4ccc655 30411 000000007002faf0d9cd00000204051e01010402 000080010000000000000000 30412 b67e3beb5010ffdc0e960000000000000000 b67ebbe40000000000000000 30413 b67e3beb5018ffdc1df400000099934e000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005d03677373096d6963726f736f667403636f6d00403afd1b403c4e9b00030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000004e504552535045435449454630314e50455253504543544945460000 b67ebbe40000000000000000 30414 b6e7000000010000000000000f706362656865657264656772616166026e6c0000ff0001 b6e7800000010000000200000f706362656865657264656772616166026e6c0000ff0001c00c00020001000151800018036e73310e6e69762d776562686f7374696e6703636f6d00c00c00020001000151800006036e7332c034 30415 b67e3bf95011ffce0dfa0000000000000000 b67ebbf40000000000000000 30416 000000007002faf0182100000204051e01010402 000080010000000000000000 30417 2d9b00000001000000000000036e73330767617574656e67026e6c0000010001 2d9b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30418 e91a000000010000000000000377777709647265616d6c616273026e6c0000010001 e91a800000010000000200000377777709647265616d6c616273026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800018036e73310e73706c69742d696e66696e697479036e657400 30419 b67e3bfa5010ffce0df90000000000000000 b67ebbf40000000000000000 30420 b67edec85010ffdcaa0b0000000000000000 30421 b67edec85018ffdc9cbb00000099b0fd000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403afd1b403c4e9b00030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000004e504552535045435449454630314e50455253504543544945460000 30422 105900000001000000000000036e733203666a66026e6c0000010001 105980000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30423 105a00000001000000000000036e733103666a66026e6c0000010001 105a80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30424 105b00000001000000000000037777770c747261666669636368616d70026e6c0000010001 105b80000001000000020000037777770c747261666669636368616d70026e6c0000010001c0100002000100015180000a036e733103666a66c01dc01000020001000151800006036e7332c035 30425 88f80000000100000000000006657175696276026e6c00000f0001 88f88000000100000002000206657175696276026e6c00000f0001c00c00020001000151800009036e7331026973c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5852102c03c00010001000151800004d5c41503 30426 9eff0000000100000000000006636861726973026e6c00000f0001 9eff8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 30427 b67eded65011ffcea96f0000000000000000 30428 000000007002faf066bc00000204051e01010402 000080010000000000000000 30429 c64f000000010000000000000b61746c61736f6e6c696e650366686a026e6c0000010001 c64f800000010000000200020b61746c61736f6e6c696e650366686a026e6c0000010001c01800020001000151800009036e7331026973c01cc01800020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 30430 b67eded75010ffcea96e0000000000000000 30431 b67fb3b25010ffdc23bc0000000000000000 30432 b67fb3b25018ffdca0cd00000099269c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005d03677373096d6963726f736f667403636f6d00403afd1b403c4e9b00030000003a4e544c4d535350000100000097b208e00c000c002e0000000e000e00200000004e504552535045435449454630314e50455253504543544945460000 30433 cae70000000100000000000003777777046476686e026e6c0000010001 cae78000000100000003000303777777046476686e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004c1ad573dc04600010001000151800004c1ad573ec05800010001000151800004d5880089 30434 2cc20000000100000000000003777777056b6c696b73026e6c0000010001 2cc28000000100000002000003777777056b6c696b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02d 30435 00a30000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 00a38000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 30436 b67fb3c05011ffce23200000000000000000 30437 06fc000000010000000000000377777706787334616c6c026e6c0000010001 06fc800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 30438 fca100000001000000000000037777770a67726f656e6577616c64026e6c0000010001 fca180000001000000020000037777770a67726f656e6577616c64026e6c0000010001c0100002000100015180000f05646e73303103697032036e657400c0100002000100015180000805646e733032c035 30439 3bfc00000001000000000000026e730d62616c6c6173742d6e6564616d026e6c0000010001 3bfc80000001000000020001026e730d62616c6c6173742d6e6564616d026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332026e6c0669676e697465036e657400c00c000100010001518000043eadcea1 30440 3da000000001000000000000036e73330767617574656e67026e6c0000010001 3da080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30441 1daf00000001000000000000036e73340767617574656e67026e6c0000010001 1daf80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30442 0db000000001000000000000036e73340767617574656e67026e6c0000010001 0db080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30443 0f000000000100000000000009652d6c756e61746963026e6c0000010001 0f008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 30444 0f0d0000000100000000000009652d6c756e61746963026e6c0000010001 0f0d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 30445 b67fb3c15010ffce231f0000000000000000 30446 c88400000001000000000000066c656d6f6e38026e6c00000f0001 c88480000001000000020000066c656d6f6e38026e6c00000f0001c00c00020001000151800014036e73300a6b65656e6f6e646f7473036e657400c00c0002000100015180000f036e733005786e616d65036f726700 30447 48f3000000010000000000000e646568656572656e68656d70656c026e6c00000f0001 48f3800000010000000300000e646568656572656e68656d70656c026e6c00000f0001c00c00020001000151800014046e733031096772616669782d697303636f6d00c00c00020001000151800007046e733032c034c00c00020001000151800007046e733033c034 30448 70b500000001000000000000037777770a6d696e696d6178696d6f026e6c0000010001 70b584030001000000010000037777770a6d696e696d6178696d6f026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 30449 097000000001000000000000037777770a6d696e696d6178696d6f026e6c0000050001 097084030001000000010000037777770a6d696e696d6178696d6f026e6c0000050001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 30450 3a98000000010000000000000b72656d6f76652d74686973057a6970707906787334616c6c026e6c0000010001 3a98800000010000000300020b72656d6f76652d74686973057a6970707906787334616c6c026e6c0000010001c01e00020001000151800005026e73c01ec01e00020001000151800006036e7332c01ec01e0002000100015180000d026e730472697065036e657400c03900010001000151800004c26d0642c04a00010001000151800004c26d0963 30451 807800000001000000000000037777770c6e657762616279626f617264026e6c0000010001 807880000001000000020002037777770c6e657762616279626f617264026e6c0000010001c0100002000100015180000b036e733104626d6873c01dc01000020001000151800006036e7332c035c03100010001000151800004d4ccfbc9c04800010001000151800004d4ccfbca 30452 96160000000100000000000005646e732d31056c61646f74026e6c0000010001 96168000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30453 107f00000001000000000000036e733203666a66026e6c0000010001 107f80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30454 108000000001000000000000036e733103666a66026e6c0000010001 108080000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30455 00480000000100000000000005646e732d32056c61646f74026e6c0000010001 00488000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30456 14ee00000001000000000000037777770977616e64656c6e6574026e6c0000010001 14ee80000001000000030002037777770977616e64656c6e6574026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c01ac01000020001000151800006036e7332c032c01000020001000151800012036e7333086c65617365776562036f726700c02e000100010001518000043ed44079c049000100010001518000043ed4407a 30457 d61600000001000000000000046d61696c03777873026e6c0000010001 d61680000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 30458 6b9d000000010000000000001167656d696e692d7a69656b656e68756973026e6c00001c0001 6b9d800000010000000200021167656d696e692d7a69656b656e68756973026e6c00001c0001c00c0002000100015180000d026e73076b6e6f77617265c01ec00c00020001000151800006036e7332c035c03200010001000151800004c3402003c04b00010001000151800004c340202b 30459 566d000000010000000000000b676f6c64656e7461737465026e6c00000f0001 566d800000010000000200010b676f6c64656e7461737465026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c018c04500010001000151800004c2860043 30460 bf0800000001000000000000036e73310a667574757265666c6578026e6c0000010001 bf0880000001000000030003036e73310a667574757265666c6578026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d9aa122bc03d00010001000151800004d9aa122cc04f00010001000151800004d9aa122d 30461 2fad00000001000000000000036e73320a667574757265666c6578026e6c0000010001 2fad80000001000000030003036e73320a667574757265666c6578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02f00010001000151800004d9aa122bc00c00010001000151800004d9aa122cc04f00010001000151800004d9aa122d 30462 712a0000000100000000000003626d67026e6c00000f0001 712a8000000100000003000303626d67026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02400010001000151800004c14e9e14c03600010001000151800004c14e9e22c04800010001000151800004d4ce7a43 30463 a00600000001000000000000037777770961627a706f7274616c026e6c0000010001 a00680000001000000020000037777770961627a706f7274616c026e6c0000010001c01000020001000151800011036e733107696c63616d706f03636f6d00c01000020001000151800006036e7332c032 30464 2c7200100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 2c7280000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 30465 53f70000000100000000000008686f73746e616d650462696e640000100003 53f78000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 30466 5a6f00000001000000000000037777770c6e657773796e746865736973026e6c0000010001 5a6f80000001000000030002037777770c6e657773796e746865736973026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 30467 9aac000000010000000000000463626265026e6c0000060001 9aac840300010000000100000463626265026e6c0000060001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 30468 bb6d000000010000000000000377777704776b6170026e6c0000010001 bb6d800000010000000200020377777704776b6170026e6c0000010001c01000020001000151800008056964313331c010c0100002000100015180000e036e733107737572666e6574c015c02900010001000151800004c0579eeac03d00010001000151800004c0576a65 30469 03b7000000010000000000000463626265026e6c0000060001 03b7840300010000000100000463626265026e6c0000060001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 30470 27540000000100000000000003626c3102626c06787334616c6c026e6c0000010001 27548000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30471 791b00000001000000000000046e743036036d7069026e6c0000010001 791b80000001000000020002046e743036036d7069026e6c0000010001c011000200010001518000080573756e3032c011c01100020001000151800006036e7332c011c02900010001000151800004c0574f3ec03d00010001000151800004c0574f37 30472 0d42000000010000000000000377777704696c6465026e6c0000010001 0d42800000010000000200000377777704696c6465026e6c0000010001c01000020001000151800014036e73310d6e6574636f6c6c656374697665c015c01000020001000151800006036e7332c02d 30473 163900000001000000000000036e733107737572666e6574026e6c0000010001 163980000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 30474 131900000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 131980000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 30475 26d0000000010000000000000377777703666e6c026e6c0000010001 26d0800000010000000200020377777703666e6c026e6c0000010001c0100002000100015180000c026e73067874646e6574c014c01000020001000151800006036e7331c02bc02800010001000151800004c16e9d02c04000010001000151800004d9cc165f 30476 31cb00000001000000000001036e73310974656c656b6162656c026e6c00000100010000291000000000000000 31cb80000001000000020003036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d45344830000291000000000000000 30477 fbf200000001000000000000027463036164730974656c656772616166026e6c0000010001 fbf280000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 30478 025e00000001000000000000026e7308767575727765726b026e6c0000010001 025e80000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 30479 012f00000001000000000000036e733208767575727765726b026e6c0000010001 012f80000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 30480 4cc400000001000000000000037a6868026e6c00001c0001 4cc480000001000000020002037a6868026e6c00001c0001c00c0002000100015180000c036e7331056861636f6dc010c00c00020001000151800006036e7332c028c02400010001000151800004d4f12209c03c00010001000151800004d590f009 30481 8264000000010000000000000d776f6f72642d656e2d64616164026e6c00000f0001 8264800000010000000200020d776f6f72642d656e2d64616164026e6c00000f0001c00c0002000100015180000f036e73310863616d627269756dc01ac00c00020001000151800006036e7332c032c02e00010001000151800004d9131082c04900010001000151800004d5efb202 30482 fdb000000001000000000000066d61696c657205617a6c616e026e6c0000010001 fdb080000001000000020001066d61696c657205617a6c616e026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e7332036b706e036e657400c02d00010001000151800004c1ad65c2 30483 b9c700000001000000000000066d61696c657205617a6c616e026e6c00001c0001 b9c780000001000000020001066d61696c657205617a6c616e026e6c00001c0001c01300020001000151800005026e73c013c0130002000100015180000d036e7332036b706e036e657400c02d00010001000151800004c1ad65c2 30484 a57100000001000000000000066d61696c657205617a6c616e026e6c0000260001 a57180000001000000020001066d61696c657205617a6c616e026e6c0000260001c01300020001000151800005026e73c013c0130002000100015180000d036e7332036b706e036e657400c02d00010001000151800004c1ad65c2 30485 721e00000001000000000000037777770b6d61726b74706c61617473026e6c0000010001 721e80000001000000020000037777770b6d61726b74706c61617473026e6c0000010001c0100002000100015180000f036e733105796b6f6f6e036e657400c01000020001000151800006036e7332c034 30486 a96200000001000000000000036e7330087a7761616e6e6574026e6c0000010001 a96280000001000000020000036e7330087a7761616e6e6574026e6c0000010001c01000020001000151800010036e7330066361726f7461036e657400c0100002000100015180000b036e7330047065656ec038 30487 777a00000001000000000000037777770c736576656e7368656176656e026e6c0000010001 777a80000001000000020001037777770c736576656e7368656176656e026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c01dc04a00010001000151800004c2860043 30488 96090000000100000000000003656369026e6c00000f0001 96098000000100000002000003656369026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c028 30489 d2fd00000001000000000000074a616e6e792d310463626265026e6c0000060001 d2fd84030001000000010000074a616e6e792d310463626265026e6c0000060001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 30490 355e00000001000000000001046e733032066368656c6c6f026e6c00001c00010000291000000000000000 355e80000001000000030004046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 30491 983900000001000000000001046e733032066368656c6c6f026e6c00002600010000291000000000000000 983980000001000000030004046e733032066368656c6c6f026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 30492 91420010000100000000000106643638323331057570632d64066368656c6c6f026e6c00001c00010000291000000000000000 91428000000100000003000406643638323331057570632d64066368656c6c6f026e6c00001c0001c01900020001000151800007046e733031c019c01900020001000151800007046e733032c019c0190002000100015180000a036e733103757063c020c03400010001000151800004d4534482c04700010001000151800004d4534483c05a00010001000151800004d48e1c420000291000000000000000 30493 8990000000010000000000000377777709746573746672616d65026e6c0000010001 8990800000010000000200000377777709746573746672616d65026e6c0000010001c01000020001000151800010026e730777697265687562036e657400c01000020001000151800006036e7332c031 30494 76020010000100000000000009626f6c6c79776f6f640a706f6c7970686f6e69630872696e67746f6e650b677261746973696d6f6465026e6c0000010001 76028000000100000002000209626f6c6c79776f6f640a706f6c7970686f6e69630872696e67746f6e650b677261746973696d6f6465026e6c0000010001c02a0002000100015180000e036e73310774696b6b6c696bc036c02a00020001000151800006036e7332c04ec04a00010001000151800004d5c40902c064000100010001518000043eddd512 30495 306300000001000000000000044e53303803575853026e6c0000010001 306380000001000000030003044e53303803575853026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 30496 6d1b00000001000000000000044e53303903575853026e6c0000010001 6d1b80000001000000030003044e53303903575853026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 30497 3a08000000010000000000000c74726176656c6d61726b6572026e6c00000f0001 3a08800000010000000200000c74726176656c6d61726b6572026e6c00000f0001c00c00020001000151800013026e730a646168686f7374696e6703636f6d00c00c00020001000151800006036e7332c030 30498 e93500000001000000000000056361706163026e6c0000010001 e93580000001000000030000056361706163026e6c0000010001c00c0002000100015180001c09646e733030303030310367656e0872616e647374616403636f6d00c00c0002000100015180000c09646e73303030303032c030c00c0002000100015180000d036e7332036b706e036e657400 30499 343a00000001000000000000046d61696c0a646168686f7374696e67026e6c0000010001 343a80000001000000020002046d61696c0a646168686f7374696e67026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c030000100010001518000045104430bc0420001000100015180000451044316 30500 18da00000001000000000000046d61696c0a646168686f7374696e67026e6c00001c0001 18da80000001000000020002046d61696c0a646168686f7374696e67026e6c00001c0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c030000100010001518000045104430bc0420001000100015180000451044316 30501 280800000001000000000000046d61696c0a646168686f7374696e67026e6c0000260001 280880000001000000020002046d61696c0a646168686f7374696e67026e6c0000260001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c030000100010001518000045104430bc0420001000100015180000451044316 30502 d42100000001000000000000036d78310a646168686f7374696e67026e6c0000010001 d42180000001000000020002036d78310a646168686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02f000100010001518000045104430bc0410001000100015180000451044316 30503 877200000001000000000000036d78310a646168686f7374696e67026e6c00001c0001 877280000001000000020002036d78310a646168686f7374696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02f000100010001518000045104430bc0410001000100015180000451044316 30504 578000000001000000000000036d78310a646168686f7374696e67026e6c0000260001 578080000001000000020002036d78310a646168686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02f000100010001518000045104430bc0410001000100015180000451044316 30505 23390000000100000000000004766567610a6e657474736b6f6c656e036e6b69026e6c00001c0001 23398000000100000003000304766567610a6e657474736b6f6c656e036e6b69026e6c00001c0001c01c00020001000151800009066865726d6573c01cc01c0002000100015180000906617468656e61c01cc01c0002000100015180000e036e733107737572666e6574c020c03400010001000151800004c0576108c04900010001000151800004c0576109c05e00010001000151800004c0576a65 30506 ac3700000001000000000000037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001 ac3780000001000000030003037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 30507 196e00000001000000000000037777770c742d6578706572696d656e74026e6c0000010001 196e80000001000000030001037777770c742d6578706572696d656e74026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01dc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04fc031000100010001518000043efa0202 30508 3ddb00000001000000000000036e7331096475746368686f7374026e6c0000010001 3ddb80000001000000020001036e7331096475746368686f7374026e6c0000010001c0100002000100015180000b0861737465726f7065c010c0100002000100015180000c036e733205786c722d38c01ac02e00010001000151800004d58523d2 30509 3ddc00000001000000000000036e7332096475746368686f7374026e6c0000010001 3ddc80000001000000020001036e7332096475746368686f7374026e6c0000010001c0100002000100015180000b0861737465726f7065c010c0100002000100015180000c036e733205786c722d38c01ac02e00010001000151800004d58523d2 30510 982b000000010000000000000563736530310e63616e6f6e2d736f667477617265026e6c0000060001 982b840300010000000100000563736530310e63616e6f6e2d736f667477617265026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 30511 31cb00000001000000000000036e73310974656c656b6162656c026e6c0000010001 31cb80000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 30512 919d00000001000000000000037777770c6b6f6569656e2d6b756e7374026e6c0000010001 919d80000001000000020002037777770c6b6f6569656e2d6b756e7374026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c01dc01000020001000151800006036e7332c035c0310001000100015180000451113264c04d00010001000151800004d5c42851 30513 06d7000000010000000000000a747963686567726f6570026e6c0000010001 06d7800000010000000200020a747963686567726f6570026e6c0000010001c00c0002000100015180000d056e657430310462626974c017c00c0002000100015180000b08626269742d6e7434c031c02b00010001000151800004c1ad5403c04400010001000151800004c1ad540c 30514 c07200000001000000000000036e73310564656d6f6e026e6c00001c0001 c07280000001000000030002036e73310564656d6f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 30515 a48f00000001000000000000036e73310564656d6f6e026e6c0000260001 a48f80000001000000030002036e73310564656d6f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 30516 80ea00000001000000000000036e73320564656d6f6e026e6c0000260001 80ea80000001000000030002036e73320564656d6f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 30517 3a7700000001000000000000036e73320564656d6f6e026e6c00001c0001 3a7780000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 30518 86a1000000010000000000000377777709736578687569736a65026e6c0000010001 86a1800000010000000300000377777709736578687569736a65026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036c0100002000100015180000a076e73686f737433c036 30519 883400000001000000000000026970026e6c00000f0001 883480000001000000030000026970026e6c00000f0001c00c00020001000151800011036e733207636c742d756661036e657400c00c00020001000151800008026e73026e6cc02fc00c00020001000151800006036e7331c027 30520 7b6a000000010000000000000377777707736d7377697368026e6c0000010001 7b6a800000010000000200020377777707736d7377697368026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa011c04700010001000151800004d5efa075 30521 c1d8000000010000000000000a646f6f726e706c617a61026e6c0000020001 c1d8800000010000000200000a646f6f726e706c617a61026e6c0000020001c00c00020001000151800014036e73310a68672d686f7374696e6703636f6d00c00c00020001000151800006036e7332c02f 30522 527700000001000000000000037777770a6c65646572776172656e026e6c0000010001 527780000001000000030002037777770a6c65646572776172656e026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 30523 4e7200000001000000000000096465706f67726f6570026e6c00000f0001 4e7284030001000000010000096465706f67726f6570026e6c00000f0001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 30524 6ea6000000010000000000000d6573746178746563686e69656b026e6c00000f0001 6ea6800000010000000200000d6573746178746563686e69656b026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c01ac00c0002000100015180000704686e7331c033 30525 81680000000100000000000003777777026373027675026e6c0000010001 81688000000100000003000303777777026373027675026e6c0000010001c01300020001000151800005026e73c013c013000200010001518000070473746172c010c0130002000100015180000e036e733107737572666e6574c016c02a0001000100015180000482258104c03b00010001000151800004c01fe72ac04e00010001000151800004c0576a65 30526 a0b000000001000000000000034e533208485a45454c414e44026e6c0000010001 a0b080000001000000040004034e533208485a45454c414e44026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000b086d6965706d696570c010c0100002000100015180000e036e733107737572666e6574c019c02d0001000100015180000491130101c00c00010001000151800004911301dcc04d00010001000151800004911334dec06400010001000151800004c0576a65 30527 8e5d00000001000000000000034e533108485a45454c414e44026e6c0000010001 8e5d80000001000000040004034e533108485a45454c414e44026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000b086d6965706d696570c010c0100002000100015180000e036e733107737572666e6574c019c00c0001000100015180000491130101c03b00010001000151800004911301dcc04d00010001000151800004911334dec06400010001000151800004c0576a65 30528 f12700000001000000000000026e730763697374726f6e026e6c0000010001 f12780000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 30529 b0bd00000001000000000000036e73320763697374726f6e026e6c0000010001 b0bd80000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 30530 6bd9001000010000000000010377777703647069026e6c00000100010000290800000080000000 6bd9800000010000000200010377777703647069026e6c0000010001c0100002000100015180001607646e732d65753108706f776572646e73036e657400c0100002000100015180000a07646e732d757331c0300000291000000000000000 30531 634a00000001000000000000046d61696c0462617261026e6c0000010001 634a80000001000000020002046d61696c0462617261026e6c0000010001c0110002000100015180000f026e7309656174736572766572c016c01100020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 30532 355e00000001000000000000046e733032066368656c6c6f026e6c00001c0001 355e80000001000000030003046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 30533 983900000001000000000000046e733032066368656c6c6f026e6c0000260001 983980000001000000030003046e733032066368656c6c6f026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 30534 91420010000100000000000006643638323331057570632d64066368656c6c6f026e6c00001c0001 91428000000100000003000306643638323331057570632d64066368656c6c6f026e6c00001c0001c01900020001000151800007046e733031c019c01900020001000151800007046e733032c019c0190002000100015180000a036e733103757063c020c03400010001000151800004d4534482c04700010001000151800004d4534483c05a00010001000151800004d48e1c42 30535 694b000000010000000000000377777706616c70696e65026e6c0000010001 694b800000010000000200020377777706616c70696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004d5f72c72c03d00010001000151800004d5f72c73 30536 233300000001000000000000036f6d61026e6c0000ff0001 233380000001000000020002036f6d61026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 30537 975b00000001000000000000107961636874726563727569746d656e74026e6c00000f0001 975b80000001000000030000107961636874726563727569746d656e74026e6c00000f0001c00c0002000100015180001c09646e733030303030310367656e0872616e647374616403636f6d00c00c0002000100015180000c09646e73303030303032c03bc00c0002000100015180000d036e7332036b706e036e657400 30538 a7b5000000010000000000000377777709696273617374726561026e6c0000010001 a7b5840300010000000100000377777709696273617374726561026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 30539 84f4000000010000000000000e766e6d6765617273797374656d73026e6c00000f0001 84f4800000010000000200000e766e6d6765617273797374656d73026e6c00000f0001c00c0002000100015180000f036e7331053132337873036e657400c00c00020001000151800006036e7333c033 30540 6fcb00000001000000000000037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001 6fcb80000001000000030003037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 30541 80610000000100000000000003636b61026e6c0000ff0001 80618000000100000002000203636b61026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 30542 36990010000100000000000102656c07757477656e7465026e6c00000f00010000290800000080000000 36998000000100000003000402656c07757477656e7465026e6c00000f0001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc02b0001000100015180000482590102c03d0001000100015180000482590103c04f00010001000151800004c05711130000291000000000000000 30543 6ae600000001000000000000036e733107737572666e6574026e6c0000010001 6ae680000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 30544 878000000001000000000000036e733307737572666e6574026e6c0000010001 878080000001000000040003036e733307737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c05300010001000151800004c0576a65 30545 7a6100000001000000000000036e733207737572666e6574026e6c0000010001 7a6180000001000000040003036e733207737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a65 30546 0b8b0010000100000000000003777777046e6b6170026e6c0000010001 0b8b8000000100000002000203777777046e6b6170026e6c0000010001c0100002000100015180000d026e7307656368656c6f6ec015c01000020001000151800006036e7378c02cc02900010001000151800004d977e179c04200010001000151800004d4ccd10c 30547 b5ad00000001000000000000037777770873796e7479636865026e6c0000010001 b5ad80000001000000020000037777770873796e7479636865026e6c0000010001c01000020001000151800013036e7331096272696e6b686f7374036e657400c01000020001000151800006036e7332c031 30548 5686000000010000000000000e6e65746c696a6e6e65747765726b026e6c0000060001 5686840300010000000100000e6e65746c696a6e6e65747765726b026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 30549 92900000000100000000000006696e63616276026e6c00000f0001 92908000000100000002000206696e63616276026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 30550 a3420000000100000000000003777777087072657462616e64026e6c0000010001 a3428000000100000002000003777777087072657462616e64026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 30551 1a67000000010000000000000c7363686f6f6c2d706c65696e026e6c00000f0001 1a67840300010000000100000c7363686f6f6c2d706c65696e026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 30552 b61f000000010000000000000331373202323101310131026e6c0000010001 b61f840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 30553 689800000001000000000000034e53310c434f4c542d54454c45434f4d024e4c0000010001 689880000001000000020002034e53310c434f4c542d54454c45434f4d024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d44ea00dc03f00010001000151800004d44ea00e 30554 567600000001000000000000095f6b65726265726f73045f746370026463065f6d7364637308736a616832303030026e6c0000060001 567684030001000000010000095f6b65726265726f73045f746370026463065f6d7364637308736a616832303030026e6c0000060001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 30555 e13500000001000000000000036e733108696e7465726d6178026e6c0000010001 e13580000001000000020002036e733108696e7465726d6178026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004505fa002c03b00010001000151800004505fac02 30556 679e000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c0000010001 679e800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c0000010001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 30557 645d0000000100000000000008616473657276657206776562616473026e6c0000010001 645d8000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 30558 2b80000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 2b80800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30559 7275000000010000000000000377777709776f6f6e6b72616e74026e6c0000010001 7275800000010000000200000377777709776f6f6e6b72616e74026e6c0000010001c01000020001000151800011036e733107636f6e78696f6e036e657400c01000020001000151800006036e7332c032 30560 9a4c00000001000000000000046d61696c06787334616c6c026e6c0000010001 9a4c80000001000000030002046d61696c06787334616c6c026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 30561 0a0d0000000100000000000003706f7006787334616c6c026e6c0000010001 0a0d8000000100000003000203706f7006787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 30562 13e4000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 13e4800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30563 38c0000000010000000000000773657276657231087369746574726171026e6c0000010001 38c0800000010000000200000773657276657231087369746574726171026e6c0000010001c0140002000100015180000f036e733105796b6f6f6e036e657400c01400020001000151800006036e7332c035 30564 02960000000100000000000006736d74703031066d696e737a77026e6c0000010001 02968000000100000002000006736d74703031066d696e737a77026e6c0000010001c0130002000100015180000b026e73026e6c036e657400c0130002000100015180001206617574683630026e73026e6c027575c034 30565 1beb000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 1beb800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30566 3bf6000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 3bf6800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30567 13fa000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 13fa800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30568 1c00000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 1c00800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30569 0409000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 0409800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30570 b66e311b5018faf02f370000008d25c0000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd13403c4e9300030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 b66eb1140000000000000000 30571 b66e311b5018faf02f370000008d25c0000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd13403c4e9300030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 b66eb1140000000000000000 30572 b66e31295011fae22bb70000000000000000 b66eb1240000000000000000 30573 772100000001000000000000037777770e74726f75626c65736174686f6d65026e6c0000010001 772180000001000000020002037777770e74726f75626c65736174686f6d65026e6c0000010001c0100002000100015180000a036e7331036e7873c01fc01000020001000151800006036e7332c037c03300010001000151800004d973c015c04900010001000151800004d973c102 30574 000000007002faf0a80c0000020405b401010402 000080010000000000000000 30575 b66e312a5010fae22bb60000000000000000 b66eb1240000000000000000 30576 6231000000010000000000000672756e6e657206535441525431024e4c0000060001 6231840300010000000100000672756e6e657206535441525431024e4c0000060001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 30577 b68303575010faf01ae60000000000000000 b68380010000000000000000 30578 000800000001000000000000037777770a7261696c72756e6e6572026e6c0000010001 000880000001000000020001037777770a7261696c72756e6e6572026e6c0000010001c01000020001000151800009036e7331026e73c01bc01000020001000151800013036e7332026e6c0669676e697465036e657400c02f00010001000151800004d46c0d06 30579 c5f2000000010000000000000976616c6b6965736572026e6c00000f0001 c5f2800000010000000200000976616c6b6965736572026e6c00000f0001c00c00020001000151800011036e7333076361706361766503636f6d00c00c00020001000151800006036e7334c02e 30580 132600000001000000000000026e73036d6c63026e6c0000010001 132680000001000000030003026e73036d6c63026e6c0000010001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 30581 02620000000100000000000002656c07757477656e7465026e6c00000f0001 02628000000100000003000302656c07757477656e7465026e6c00000f0001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc02b0001000100015180000482590102c03d0001000100015180000482590103c04f00010001000151800004c0571113 30582 775800000001000000000000076e656473746174027330026e6c0000010001 775880000001000000020002076e656473746174027330026e6c0000010001c0140002000100015180000d026e73076e656473746174c017c01400020001000151800006036e7333c02ec02b00010001000151800004d4482615c04400010001000151800004d5c4021d 30583 a186000000010000000000000c746e746c6f67697374696373026e6c00000f0001 a186800000010000000300000c746e746c6f67697374696373026e6c00000f0001c00c00020001000151800016036e73320c746e746c6f6769737469637303636f6d00c00c0002000100015180001c0463627275026272026e7307656c732d676d7303617474036e657400c00c0002000100015180000a04636d7475026d74c057 30584 03d10000000100000000000003777777116f756b616368612d736174656c6c696574026e6c0000010001 03d18000000100000002000003777777116f756b616368612d736174656c6c696574026e6c0000010001c01000020001000151800013036e733109326575726f686f737403636f6d00c01000020001000151800006036e7332c03a 30585 bd6100000001000000000000037777770a6261736b657462616c6c026e6c0000010001 bd6180000001000000020002037777770a6261736b657462616c6c026e6c0000010001c01000020001000151800012036e73310b696e7465727374726f6f6dc01bc01000020001000151800006036e7332c033c02f0001000100015180000450558121c04d00010001000151800004d58141c4 30586 b4c9001000010000000000010565666e657403626974026e6c00000100010000290800000000000000 b4c9800000010000000300040565666e657403626974026e6c0000010001c0120002000100015180000a076e736175746831c012c0120002000100015180000a076e736175746832c012c0120002000100015180000a076e736175746833c012c02a00010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b0000291000000000000000 30587 8c20000000010000000000000866616c6c6261636b08767575727765726b026e6c0000010001 8c20800000010000000300010866616c6c6261636b08767575727765726b026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 30588 4610000000010000000000000866616c6c6261636b08767575727765726b026e6c00001c0001 4610800000010000000300010866616c6c6261636b08767575727765726b026e6c00001c0001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 30589 a308000000010000000000000866616c6c6261636b08767575727765726b026e6c0000260001 a308800000010000000300010866616c6c6261636b08767575727765726b026e6c0000260001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 30590 8ef500000001000000000000026e7308767575727765726b026e6c00001c0001 8ef580000001000000030001026e7308767575727765726b026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 30591 3e3200000001000000000000026e7308767575727765726b026e6c0000260001 3e3280000001000000030001026e7308767575727765726b026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 30592 b5ad000000010000000000001163617070612d6163636f756e74616e7473026e6c00000f0001 b5ad800000010000000200021163617070612d6163636f756e74616e7473026e6c00000f0001c00c0002000100015180000e036e733007656173796e6574c01ec00c00020001000151800006036e7331c036c03200010001000151800004c2a55e01c04c00010001000151800004c2a55e05 30593 8cea00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 8cea80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 30594 bf0e00000001000000000000046d61696c086e65646c696e7578026e6c0000010001 bf0e80000001000000030003046d61696c086e65646c696e7578026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02e00010001000151800004d5ef87d2c04000010001000151800004d5ef87d3c05200010001000151800004d5ef8005 30595 cba200100001000000000001036e733503777873026e6c00000100010000290800000080000000 cba280000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 30596 443600000001000000000000036e733206787334616c6c026e6c0000010001 443680000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 30597 221b00000001000000000000026e7306787334616c6c026e6c0000010001 221b80000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 30598 219a00000001000000000000037777770377716d026e6c0000010001 219a80000001000000030001037777770377716d026e6c0000010001c0100002000100015180000e026e7308767575727765726bc014c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c046c028000100010001518000043efa0202 30599 79a200000001000000000000037777770974656c656772616166026e6c0000010001 79a280000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 30600 2db900000001000000000000036e73340767617574656e67026e6c0000010001 2db980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30601 15c000000001000000000000036e73340767617574656e67026e6c0000010001 15c080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30602 31a2000000010000000000000c6b61617274656e706c617a61026e6c0000010001 31a2800000010000000300020c6b61617274656e706c617a61026e6c0000010001c00c0002000100015180000d036e733106776964657873c019c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 30603 239300000001000000000000036e73330767617574656e67026e6c0000010001 239380000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30604 239400000001000000000000036e73340767617574656e67026e6c0000010001 239480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30605 c63428000001000000010000026e6c0000060001085f6b706173737764045f75647007747267726f7570026e6c000021000100000258001b0000006401d0087365727665722d3107747267726f7570026e6c00 c634a8040000000000000000 30606 06380000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 06388000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 30607 124a000000010000000000000973657868756e746572027830026e6c0000010001 124a800000010000000200020973657868756e746572027830026e6c0000010001c0160002000100015180000d026e730776697065726276c019c01600020001000151800006036e7332c030c02d00010001000151800004d5881a07c04600010001000151800004d5881a05 30608 3e4000000001000000000000067873657276650a79656c6c6f776d696e64026e6c0000010001 3e4080000001000000030003067873657276650a79656c6c6f776d696e64026e6c0000010001c0130002000100015180000e026e7308736e696a64657273c01ec01300020001000151800005026e73c013c01300020001000151800006036e7332c013c03200010001000151800004c2e59918c04c00010001000151800004c2e59926c05d000100010001518000043e5dc28e 30609 000000007002faf091b40000020405b401010402 000080010000000000000000 30610 97f1000000010000000000000565666e657403626974026e6c0000010001 97f1800000010000000300030565666e657403626974026e6c0000010001c0120002000100015180000a076e736175746831c012c0120002000100015180000a076e736175746832c012c0120002000100015180000a076e736175746833c012c02a00010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 30611 b683c2c05010faf045240000000000000000 30612 bbbd00000001000000000000037777770a65786563736f75726365026e6c0000010001 bbbd80000001000000020001037777770a65786563736f75726365026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c01bc01000020001000151800011036e7332076e6564636f6d70036f726700c02f00010001000151800004c3c1a80d 30613 b683c2c05018faf0f2860000008e4bdc000000010001000000000f313237313331303331393633342d330000f900010f313237313331303331393633342d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04c5403c564500030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000 30614 2dce00000001000000000000036e73340767617574656e67026e6c0000010001 2dce80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30615 cd1100000001000000000000037777770b76697461616c6772696a73026e6c0000010001 cd1180000001000000020002037777770b76697461616c6772696a73026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01cc01000020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 30616 3472000000010000000000000469632d73026e6c00001c0001 3472800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 30617 b683c2ce5011fae244930000000000000000 30618 000000007002faf044dc0000020405b401010402 000080010000000000000000 30619 9fdc0000000100000000000005737461747308696e672d6562636e026e6c0000010001 9fdc8000000100000002000205737461747308696e672d6562636e026e6c0000010001c0120002000100015180000a036e733103696e67c01bc01200020001000151800006036e7332c033c02f0001000100015180000491dd19c2c0450001000100015180000491dd5dc2 30620 b683c2cf5010fae244920000000000000000 30621 062c00100001000000000001076d61696c6875620b7669616e6574776f726b73026e6c00000100010000290800000080000000 062c80000001000000020003076d61696c6875620b7669616e6574776f726b73026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03400010001000151800004d43d0f08c04600010001000151800004d43d19e20000291000000000000000 30622 230500000001000000000000037777770974656c656772616166026e6c0000010001 230580000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 30623 b6844daf5010faf06d5c0000000000000000 b684cda40000000000000000 30624 725b00000001000000000000036d78310464697661026e6c00001c0001 725b80000001000000020000036d78310464697661026e6c00001c0001c0100002000100015180000e036e73310464697661036e657400c01000020001000151800006036e7332c02d 30625 b6844daf5018faf0669c0000008e0100000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04c5403c564500030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000 b684cda40000000000000000 30626 81ca000000010000000000000473656174026e6c0000010001 81ca800000010000000200000473656174026e6c0000010001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 30627 951700000001000000000000046d61696c03736269026e6c0000010001 951780000001000000020002046d61696c03736269026e6c0000010001c0110002000100015180000e036e7331077175616e746973c015c01100020001000151800006036e7332c02dc029000100010001518000043ed44440c04300010001000151800004d4ccca83 30628 94ae00000001000000000000036e733103666a66026e6c0000010001 94ae80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30629 b6844dbd5011fae26ccb0000000000000000 b684cdb40000000000000000 30630 be0900000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 be0980000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 30631 e23b00000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 e23b80000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 30632 f5c8000000010000000000000a706c61796f6e6c696e65026e6c00000f0001 f5c8800000010000000200000a706c61796f6e6c696e65026e6c00000f0001c00c00020001000151800014036e73310d666c65746873686f7374696e67c017c00c00020001000151800006036e7332c02f 30633 000000007002faf058a60000020405b401010402 000080010000000000000000 30634 6f7f00000001000000000000066b6e696a6666026e6c00000f0001 6f7f80000001000000020000066b6e696a6666026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c02e 30635 94af00000001000000000000036e733203666a66026e6c0000010001 94af80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30636 b6844dbe5010fae26cca0000000000000000 b684cdb40000000000000000 30637 94c600000001000000000000036e733103666a66026e6c0000010001 94c680000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30638 5f9900000001000000000000086d65657769737365026e6c00000f0001 5f9980000001000000020002086d65657769737365026e6c00000f0001c00c00020001000151800009036e7331026973c015c00c00020001000151800006036e7332c02dc02900010001000151800004d5852102c03e00010001000151800004d5c41503 30639 239600000001000000000000036e73330767617574656e67026e6c0000010001 239680000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30640 b1d0000000010000000000000a7476696e647573747279026e6c00000f0001 b1d0800000010000000300030a7476696e647573747279026e6c00000f0001c00c0002000100015180000f036e7331086e6f766178657373c017c00c00020001000151800006036e7332c02fc00c00020001000151800006036e7333c02fc02b00010001000151800004d5c98015c04600010001000151800004d5c9bf12c05800010001000151800004d5ef9c26 30641 94c700000001000000000000036e733203666a66026e6c0000010001 94c780000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30642 239700000001000000000000036e73340767617574656e67026e6c0000010001 239780000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30643 ac0c000000010000000000000974686563686f696365026e6c00000f0001 ac0c800000010000000200010974686563686f696365026e6c00000f0001c00c0002000100015180000e036e733107626c7565646e73c016c00c00020001000151800006036e7334c02ec02a00010001000151800004d5c401c0 30644 b686ac6c5010faf022670000000000000000 30645 b686ac6c5018faf065460000008eb560000000010001000000000f313237313331303331393633342d320000f900010f313237313331303331393633342d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403b04c6403c564600030000002f4e544c4d535350000100000097b208e0070007002800000008000800200000005345525645522d31545247524f55500000 30646 b686ac7a5011fae221d60000000000000000 30647 9f510000000100000000000003777777056272696c6c026e6c0000010001 9f518000000100000002000203777777056272696c6c026e6c0000010001c010000200010001518000140a6469736b61642d6e7331066469736b6164c016c0100002000100015180000d0a6469736b61642d6e7332c035c02a00010001000151800004d9164181c04a00010001000151800004d5c990eb 30648 f2d500000001000000000000036e73320777697265687562026e6c0000010001 f2d580000001000000030000036e73320777697265687562026e6c0000010001c01000020001000151800010026e730777697265687562036e657400c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02f 30649 c1e400000001000000000000076d61696c6875620b7669616e6574776f726b73026e6c0000010001 c1e480000001000000020002076d61696c6875620b7669616e6574776f726b73026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03400010001000151800004d43d0f08c04600010001000151800004d43d19e2 30650 5bd4000000010000000000000469632d73026e6c0000010001 5bd4800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 30651 dc7900000001000000000000036d78340c696e746572636f6e6e656374026e6c0000010001 dc7980000001000000030003036d78340c696e746572636f6e6e656374026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c03100010001000151800004d453c005c04200010001000151800004d453c006c05400010001000151800004d453c805 30652 118300000001000000000000036e733203666a66026e6c0000010001 118380000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30653 b686ac7b5010fae221d50000000000000000 30654 118400000001000000000000036e733103666a66026e6c0000010001 118480000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30655 bb2600000001000000000000046d61696c03676263026e6c0000010001 bb2680000001000000020000046d61696c03676263026e6c0000010001c01100020001000151800015056e73302d6703646e73057069706578036e657400c01100020001000151800008056e73312d67c02f 30656 f4bb00000001000000000000056372657878026e6c00000f0001 f4bb80000001000000020002056372657878026e6c00000f0001c00c0002000100015180000f036e7331087468656c6f646765c012c00c00020001000151800006036e7332c02ac02600010001000151800004c3565d0ac04100010001000151800004c3565d0b 30657 8fef000000010000000000000469632d73026e6c00000f0001 8fef800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 30658 11d900000001000000000000036e733203666a66026e6c0000010001 11d980000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30659 78ec000000010000000000000c7063726e656465726c616e64026e6c0000ff0001 78ec800000010000000300020c7063726e656465726c616e64026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c019c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 30660 11da00000001000000000000036e733103666a66026e6c0000010001 11da80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30661 040c00000001000000000000067065646c6172026e6c0000ff0001 040c80000001000000020002067065646c6172026e6c0000ff0001c00c00020001000151800005026e73c00cc00c0002000100015180000f026e7309737570706f72743275c013c02700010001000151800004d48e0503c03800010001000151800004c2970ea4 30662 de8800000001000000000000046d61696c097669626f6c75636874026e6c0000010001 de8880000001000000020002046d61696c097669626f6c75636874026e6c0000010001c0110002000100015180000c036e73310563736e6574c01bc01100020001000151800006036e7332c033c02f00010001000151800004c2451012c04700010001000151800004c2451212 30663 53560000000100000000000003777777086f766572686569640677657474656e026e6c0000010001 53568000000100000003000303777777086f766572686569640677657474656e026e6c0000010001c0190002000100015180000e036e73310761737034616c6cc020c01900020001000151800006036e7332c038c01900020001000151800006036e7333c038c03400010001000151800004c1adf9c3c04e000100010001518000043e70ec3cc06000010001000151800004c1ac0bae 30664 4a1300000001000000000000036e733109666972737466696e64026e6c0000010001 4a1380000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30665 1e8700000001000000000000036e733403777873026e6c0000010001 1e8780000001000000030003036e733403777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 30666 d91200000001000000000000037777770c626f6d6d656c64657369676e026e6c0000010001 d91280000001000000020000037777770c626f6d6d656c64657369676e026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c037 30667 f47f00000001000000000000037777770a61727a77656273697465026e6c0000010001 f47f80000001000000020000037777770a61727a77656273697465026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c032 30668 379100000001000000000000086b6f7374756e697806787334616c6c026e6c0000010001 379180000001000000030002086b6f7374756e697806787334616c6c026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c0150002000100015180000d026e730472697065036e657400c03000010001000151800004c26d0642c04100010001000151800004c26d0963 30669 105400000001000000000000036e733209666972737466696e64026e6c0000010001 105480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30670 133500000001000000000000037777771d7461616b67726f65707665726e69657577696e676f6e646572626f7577026e6c0000010001 133584030001000000010000037777771d7461616b67726f65707665726e69657577696e676f6e646572626f7577026e6c0000010001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 30671 32e600000001000000000000036e733503777873026e6c0000010001 32e680000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 30672 964500000001000000000000036e733103666a66026e6c0000010001 964580000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30673 964600000001000000000000036e733203666a66026e6c0000010001 964680000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30674 964700000001000000000000037777770c747261666669636368616d70026e6c0000010001 964780000001000000020000037777770c747261666669636368616d70026e6c0000010001c0100002000100015180000a036e733103666a66c01dc01000020001000151800006036e7332c035 30675 e8cf000000010000000000000572656c617903617a72026e6c0000010001 e8cf800000010000000300030572656c617903617a72026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000e036e733107737572666e6574c016c02a000100010001518000049c53fc99c03b000100010001518000049c53fcfdc04d00010001000151800004c0576a65 30676 713b0000000100000000000005646e732d31056c61646f74026e6c0000010001 713b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30677 342b0000000100000000000005646e732d32056c61646f74026e6c0000010001 342b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30678 04ed00000001000000000000037777770b76726f75776f6e6c696e65026e6c0000010001 04ed80000001000000030000037777770b76726f75776f6e6c696e65026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c034c01000020001000151800006036e7333c034 30679 d43500000001000000000000046162656c0564656d6f6e026e6c0000010001 d43580000001000000030002046162656c0564656d6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 30680 0ef4000000010000000000000a5354494e45484f555345026e6c0000020001 0ef4840300010000000100000a5354494e45484f555345026e6c0000020001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 30681 8ddb0000000100000000000004616e73310774697363616c69026e6c0000010001 8ddb8000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 30682 12c200000001000000000000036e733203666a66026e6c0000010001 12c280000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30683 12c300000001000000000000036e733103666a66026e6c0000010001 12c380000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30684 12c400000001000000000000037777770c747261666669636368616d70026e6c00001c0001 12c480000001000000020000037777770c747261666669636368616d70026e6c00001c0001c0100002000100015180000a036e733103666a66c01dc01000020001000151800006036e7332c035 30685 5aa800000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 5aa880000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 30686 55fc00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 55fc80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 30687 0e4000000001000000000000036e733109666972737466696e64026e6c0000010001 0e4080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30688 f630000000010000000000000d696e746572736f667477617265026e6c00000f0001 f630800000010000000200020d696e746572736f667477617265026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c01ac00c00020001000151800006036e7332c032c02e00010001000151800004c2451012c04600010001000151800004c2451212 30689 8bee000000010000000000000469632d73026e6c00000f0001 8bee800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 30690 3c9f00000001000000000000036e733209666972737466696e64026e6c0000010001 3c9f80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30691 bb5f00000001000000000000126d6574726f706f6c6973666573746976616c026e6c00001c0001 bb5f80000001000000020002126d6574726f706f6c6973666573746976616c026e6c00001c0001c00c0002000100015180000b026e7305706c616e74c01fc00c00020001000151800006036e7332c036c03300010001000151800004d59f0037c04a00010001000151800004d59f0046 30692 44900000000100000000000005646e732d32056c61646f74026e6c0000010001 44908000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30693 173e00000001000000000000046469726b026e6c00000f0001 173e80000001000000020001046469726b026e6c00000f0001c00c0002000100015180000d026e7307616d6572636f6dc011c00c00020001000151800006036e7331c028c02500010001000151800004c2b2b20a 30694 d165000000010000000000000463756369026e6c00000f0001 d165800000010000000300030463756369026e6c00000f0001c00c0002000100015180000904686572610178c00cc00c0002000100015180000c066865726d6573026e6cc00cc00c00020001000151800009066865726d6573c02ac02500010001000151800004d47d8001c03a00010001000151800004c143ef02c05200010001000151800004d47d8002 30695 e71700000001000000000000036d783107626265796f6e64026e6c0000010001 e71780000001000000020002036d783107626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c000100010001518000043eb1900bc03e000100010001518000043eb19002 30696 1ab10000000100000000000005646e732d31056c61646f74026e6c0000010001 1ab18000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30697 967600000001000000000000036e733103666a66026e6c0000010001 967680000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30698 967700000001000000000000036e733203666a66026e6c0000010001 967780000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30699 84d6000000010000000000000b776f726c64616363657373026e6c0000010001 84d6800000010000000200010b776f726c64616363657373026e6c0000010001c00c0002000100015180000a036e733303777873c018c00c00020001000151800006036e7334c030c04200010001000151800004d5ef9a65 30700 d7b500000001000000000000036e733103757063026e6c0000010001 d7b580000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 30701 897e00000001000000000000046e733032066368656c6c6f026e6c0000010001 897e80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 30702 e20000000001000000000000046e733031066368656c6c6f026e6c0000010001 e20080000001000000030003046e733031066368656c6c6f026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c00c00010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 30703 556000000001000000000000076d656d62657273066368656c6c6f026e6c0000010001 556080000001000000030003076d656d62657273066368656c6c6f026e6c0000010001c01400020001000151800007046e733031c014c01400020001000151800007046e733032c014c0140002000100015180000a036e733103757063c01bc02f00010001000151800004d4534482c04200010001000151800004d4534483c05500010001000151800004d48e1c42 30704 e71800000001000000000000037777771272656e61756c742d76656c7365726265656b026e6c0000010001 e71880000001000000030001037777771272656e61756c742d76656c7365726265656b026e6c0000010001c0100002000100015180000e026e7308767575727765726bc023c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c055c037000100010001518000043efa0202 30705 7dd000000001000000000000036e733109652d666163746f7279026e6c0000010001 7dd080000001000000020002036e733109652d666163746f7279026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c1fefe82c03c00010001000151800004c1feff82 30706 76fe00000001000000000000036e733209652d666163746f7279026e6c0000010001 76fe80000001000000020002036e733209652d666163746f7279026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004c1fefe82c00c00010001000151800004c1feff82 30707 12ed00000001000000000000036e733203666a66026e6c0000010001 12ed80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30708 12ee00000001000000000000036e733103666a66026e6c0000010001 12ee80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30709 ee5e000000010000000000000d67656d65656e746562616e656e026e6c0000010001 ee5e800000010000000200000d67656d65656e746562616e656e026e6c0000010001c00c00020001000151800013036e73310368617306686f7374697402626500c00c0002000100015180000a036e7332036c7578c036 30710 cbb600000001000000000000036d7832046d61696c067073696e6574026e6c0000010001 cbb680000001000000030003036d7832046d61696c067073696e6574026e6c0000010001c0150002000100015180000b047072693103646e73c015c015000200010001518000070470726932c035c015000200010001518000070470726933c035c030000100010001518000049a0ff9a6c047000100010001518000049a0ff9aac05a000100010001518000049a0ff9ae 30711 21c700000001000000000000047072693103646e73067073696e6574026e6c0000010001 21c780000001000000030003047072693103646e73067073696e6574026e6c0000010001c01500020001000151800002c00cc015000200010001518000070470726932c011c015000200010001518000070470726933c011c00c000100010001518000049a0ff9a6c03e000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 30712 679400000001000000000000047072693203646e73067073696e6574026e6c0000010001 679480000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 30713 b3ca00000001000000000000047072693303646e73067073696e6574026e6c0000010001 b3ca80000001000000030003047072693303646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c01500020001000151800002c00cc030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac00c000100010001518000049a0ff9ae 30714 210d0000000100000000000004736d7470086e65747761746368026e6c0000010001 210d8000000100000002000004736d7470086e65747761746368026e6c0000010001c0110002000100015180000d036e7331036b706e036e657400c01100020001000151800006036e7332c032 30715 25d900000001000000000000036e73330767617574656e67026e6c0000010001 25d980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30716 40750000000100000000000004686e73300774697363616c69026e6c0000010001 40758000000100000003000204686e73300774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 30717 f6d80000000100000000000010444f4e2d52495349434f424548454552024e4c00000f0001 f6d88000000100000002000210444f4e2d52495349434f424548454552024e4c00000f0001c00c00020001000151800010026e730a7a65656c616e646e6574c01dc00c00020001000151800006036e7332c034c03100010001000151800004d473c0c1c04d00010001000151800004d473c0c3 30718 f864000000010000000000000e53544556454e45535452454c4c41026e6c0000020001 f864840300010000000100000e53544556454e45535452454c4c41026e6c0000020001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 30719 688f000000010000000000000663616e746f73026e6c00000f0001 688f800000010000000200010663616e746f73026e6c00000f0001c00c0002000100015180000e036e7331076e6564636f6d70c013c00c00020001000151800011036e7332076e6564636f6d70036f726700c02700010001000151800004c3c1a80d 30720 d68400000001000000000000086b6f656c706c616e026e6c0000010001 d68480000001000000020002086b6f656c706c616e026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 30721 557500000001000000000000046d61696c0c6b333368616972686f74656c026e6c0000010001 557580000001000000020002046d61696c0c6b333368616972686f74656c026e6c0000010001c01100020001000151800015036e73310e74726565776562686f7374696e67c01ec01100020001000151800006036e7332c036c032000100010001518000045104580ac053000100010001518000045104601e 30722 387a0000000100000000000008696e7472616e657403617663026e6c0000010001 387a8000000100000002000208696e7472616e657403617663026e6c0000010001c0150002000100015180000c036e73310563736e6574c019c01500020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 30723 6ed500000001000000000000036e73310e74726565776562686f7374696e67026e6c00001c0001 6ed580000001000000020002036e73310e74726565776562686f7374696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104580ac041000100010001518000045104601e 30724 48e600000001000000000000085f6b706173737764045f746370126772616669646174615f646576656e746572026e6c0000060001 48e684030001000000010000085f6b706173737764045f746370126772616669646174615f646576656e746572026e6c0000060001c02d00060001000038400036026e730f646f6d61696e2d7265676973747279c02d0a686f73746d6173746572c0440bf1e540000070800000384000278d0000003840 30725 1f2700000001000000000000036e73310e74726565776562686f7374696e67026e6c0000260001 1f2780000001000000020002036e73310e74726565776562686f7374696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104580ac041000100010001518000045104601e 30726 f25200000001000000000000036e73320e74726565776562686f7374696e67026e6c00001c0001 f25280000001000000020002036e73320e74726565776562686f7374696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc033000100010001518000045104580ac00c000100010001518000045104601e 30727 292500000001000000000000036e73320e74726565776562686f7374696e67026e6c0000260001 292580000001000000020002036e73320e74726565776562686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc033000100010001518000045104580ac00c000100010001518000045104601e 30728 23c700000001000000000000097472616e73617669610c652d66756c66696c6d656e74026e6c0000010001 23c780000001000000030003097472616e73617669610c652d66756c66696c6d656e74026e6c0000010001c016000200010001518000110161026e7309652d76696c6c616765c023c0160002000100015180000e036e733007656173796e6574c023c01600020001000151800006036e7331c058c03700010001000151800004d400eb42c05400010001000151800004c2a55e01c06e00010001000151800004c2a55e05 30729 1daf00000001000000000000037777770a6b696e64657274656e74026e6c0000010001 1daf80000001000000020000037777770a6b696e64657274656e74026e6c0000010001c01000020001000151800016036e73310c6d756e74696e7465726e6574036e657400c01000020001000151800006036e7332c033 30730 8b5900000001000000000000026d780f7a6f7267656e7a656b657268656964026e6c0000010001 8b5980000001000000020002026d780f7a6f7267656e7a656b657268656964026e6c0000010001c00f0002000100015180000d026e73076e65746c616e64c01fc00f00020001000151800006036e7332c036c03300010001000151800004d9aa2042c04c00010001000151800004d9aa2c06 30731 a47300000001000000000000037777770d74656e6e69736d616e61676572026e6c0000010001 a47380000001000000020000037777770d74656e6e69736d616e61676572026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c035 30732 c9430000000100000000000003777777046d736372026e6c0000010001 c9438000000100000002000003777777046d736372026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c02f 30733 5d0f000000010000000000000877646576726965730564656d6f6e026e6c0000010001 5d0f800000010000000300020877646576726965730564656d6f6e026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 30734 e55e000000010000000000000a6264612d696e74726f6e026e6c00000f0001 e55e800000010000000200020a6264612d696e74726f6e026e6c00000f0001c00c0002000100015180000b036e73310477656233c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d436240ec04200010001000151800004c2b262ef 30735 f5d10000000100000000000003777777116e626264697374726963747477656e7465026e6c0000010001 f5d18000000100000002000103777777116e626264697374726963747477656e7465026e6c0000010001c0100002000100015180000a036e733303777873c022c01000020001000151800006036e7334c03ac04c00010001000151800004d5ef9a65 30736 686f00000001000000000000096963742d7472656e64026e6c0000ff0001 686f80000001000000020002096963742d7472656e64026e6c0000ff0001c00c00020001000151800006036e7330c00cc00c00020001000151800006036e7331c00cc02a000100010001518000045111281cc03c00010001000151800004d994a88c 30737 0b7100000001000000000001036e733109756e69736f75726365026e6c00000100010000291000000000000000 0b7180000001000000020001036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 30738 0b7100000001000000000000036e733109756e69736f75726365026e6c0000010001 0b7180000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 30739 680a00000001000000000000036e73310b776f726c646f6e6c696e65026e6c0000010001 680a80000001000000030002036e73310b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 30740 65dd00000001000000000000036e73320b776f726c646f6e6c696e65026e6c0000010001 65dd80000001000000030002036e73320b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 30741 e47f000000010000000000000f70656e73696f6e7365727669636573026e6c0000ff0001 e47f800000010000000200000f70656e73696f6e7365727669636573026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c01cc00c00020001000151800006036e7332c033 30742 200b00000001000000000000036e7332076e656473746174026e6c0000010001 200b80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 30743 200c00000001000000000000036e7334076e656473746174026e6c0000010001 200c80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 30744 c04e00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 c04e80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 30745 6aa500000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 6aa580000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 30746 24180000000100000000000003777777056c6f67696e04616c6578026e6c00001c0001 24188000000100000002000003777777056c6f67696e04616c6578026e6c00001c0001c0160002000100015180000d036e7331036b706e036e657400c01600020001000151800006036e7332c033 30747 623d0000000100000000000009706172616469676974026e6c00000f0001 623d8000000100000002000009706172616469676974026e6c00000f0001c00c00020001000151800010026e73076e65737363697303636f6d00c00c00020001000151800006036e7332c02d 30748 2f4200000001000000000000036e733103757063026e6c0000010001 2f4280000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 30749 f0a200000001000000000000046e733032066368656c6c6f026e6c0000010001 f0a280000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 30750 2dee00000001000000000000036e73330767617574656e67026e6c0000010001 2dee80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30751 e1a600000001000000000000037777771c696e6b746f6d692d746573742d71756572792d383233363534303038026e6c0000010001 e1a684030001000000010000037777771c696e6b746f6d692d746573742d71756572792d383233363534303038026e6c0000010001c02d00060001000038400036026e730f646f6d61696e2d7265676973747279c02d0a686f73746d6173746572c0440bf1e540000070800000384000278d0000003840 30752 9c470000000100000000000003747332057069776562026e6c0000010001 9c478000000100000002000203747332057069776562026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800011036e73330a74727565736572766572c016c02a00010001000151800004d5efb23dc03b00010001000151800004d5ef8005 30753 e9a9000000010000000000000c76616e2d6d756c6272656774026e6c00000f0001 e9a9800000010000000200000c76616e2d6d756c6272656774026e6c00000f0001c00c0002000100015180001504646e73310a6b6f6f796f6e6c696e6503636f6d00c00c00020001000151800006036e7332c032 30754 d5fb0000000100000000000005646e732d31056c61646f74026e6c0000010001 d5fb8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30755 de830000000100000000000005646e732d32056c61646f74026e6c0000010001 de838000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 30756 044500000001000000000000037777770c7361696c6f6c696e73686f70026e6c0000010001 044580000001000000030002037777770c7361696c6f6c696e73686f70026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 30757 fbfe00000001000000000000037777770968797065726c656170026e6c0000010001 fbfe80000001000000020002037777770968797065726c656170026e6c0000010001c0100002000100015180000a036e7331036e7873c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 30758 febb000000010000000000000968797065726c656170026e6c0000010001 febb800000010000000200020968797065726c656170026e6c0000010001c00c0002000100015180000a036e7331036e7873c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 30759 7e240000000100000000000006636861726973026e6c0000ff0001 7e248000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 30760 3bfa00000001000000000000036e733106782d73697465026e6c0000010001 3bfa80000001000000020002036e733106782d73697465026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450f7ca4bc0390001000100015180000450f7ca50 30761 265000000001000000000000067873657276650a79656c6c6f776d696e64026e6c0000010001 265080000001000000030003067873657276650a79656c6c6f776d696e64026e6c0000010001c0130002000100015180000e026e7308736e696a64657273c01ec01300020001000151800005026e73c013c01300020001000151800006036e7332c013c03200010001000151800004c2e59918c04c00010001000151800004c2e59926c05d000100010001518000043e5dc28e 30762 2f400000000100000000000009652d6c756e61746963026e6c0000010001 2f408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 30763 470500000001000000000000037777770c74656c65666f6f6e67696473026e6c0000010001 470580000001000000020000037777770c74656c65666f6f6e67696473026e6c0000010001c0100002000100015180000d03646e73036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 30764 3c1000000001000000000000037777770c74656c65666f6f6e67696473026e6c0000010001 3c1080000001000000020000037777770c74656c65666f6f6e67696473026e6c0000010001c0100002000100015180000d03646e73036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 30765 490700000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 490780000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 30766 f46f00000001000000000000037777770f726963686172646b616d7068756973026e6c00000f0001 f46f80000001000000020002037777770f726963686172646b616d7068756973026e6c00000f0001c01000020001000151800014036e73310d6d6576657273686f7374696e67c020c01000020001000151800006036e7332c038c03400010001000151800004d5c9e8c8c05400010001000151800004d5c9e8c9 30767 270a00000001000000000000037777770962697a617273697465026e6c0000010001 270a80000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 30768 2df600000001000000000000036e73340767617574656e67026e6c0000010001 2df680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30769 2dfe00000001000000000000036e73340767617574656e67026e6c0000010001 2dfe80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30770 060000000001000000000000036e73340767617574656e67026e6c0000010001 060080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30771 260f00000001000000000000036e73340767617574656e67026e6c0000010001 260f80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30772 46ef0000000100000000000006636861726973026e6c0000010001 46ef8000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 30773 162f00000001000000000000036e73340767617574656e67026e6c0000010001 162f80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30774 263600000001000000000000036e73340767617574656e67026e6c0000010001 263680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30775 b38300000001000000000000037777770a61727a77656273697465026e6c0000010001 b38380000001000000020000037777770a61727a77656273697465026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c032 30776 08fb00000001000000000000037777770e6e6f6f7264657262726565647465026e6c00001c0001 08fb80000001000000020000037777770e6e6f6f7264657262726565647465026e6c00001c0001c01000020001000151800011036e7331076e6564706f7274036e657400c01000020001000151800006036e7332c037 30777 9f5a000000010000000000000377777708676f6f64666f6e74026e6c0000010001 9f5a840300010000000100000377777708676f6f64666f6e74026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 30778 e90d00000001000000000000034e53320b494e5445525354524f4f4d024e4c0000010001 e90d80000001000000020002034e53320b494e5445525354524f4f4d024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0300001000100015180000450558121c00c00010001000151800004d58141c4 30779 e8bf00000001000000000000034e53310b494e5445525354524f4f4d024e4c0000010001 e8bf80000001000000020002034e53310b494e5445525354524f4f4d024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450558121c03e00010001000151800004d58141c4 30780 0ccc00000001000000000000036e733104686f6d65026e6c0000010001 0ccc80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 30781 0a3a00000001000000000000036e733204686f6d65026e6c0000010001 0a3a80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 30782 05b200000001000000000000036e733404686f6d65026e6c0000010001 05b280000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 30783 9b1900000001000000000000036e733304686f6d65026e6c0000010001 9b1980000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 30784 1e800000000100000000000007766462636f6d70026e6c00001c0001 1e808000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 30785 74f100000001000000000000026e7303616d730874656c6567617465026e6c0000010001 74f180000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 30786 647c0010000100000000000103626c3402626c06787334616c6c026e6c00000100010000290800000080000000 647c8000000100000003000303626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 30787 b7a20000000100000000000005746c6774650a7061797065726e657773026e6c0000010001 b7a28000000100000002000205746c6774650a7061797065726e657773026e6c0000010001c01200020001000151800010036e733109652d666163746f7279c01dc01200020001000151800006036e7332c035c03100010001000151800004c1fefe82c04d00010001000151800004c1feff82 30788 3a5b000000010000000000000e70656f706c65706172746e657273026e6c0000ff0001 3a5b800000010000000200000e70656f706c65706172746e657273026e6c0000ff0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c035 30789 995300000001000000000000087669737669736965026e6c00000f0001 995380000001000000020000087669737669736965026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c02c 30790 03db0000000100000000000007742d686f757365026e6c00000f0001 03db8000000100000002000207742d686f757365026e6c00000f0001c00c0002000100015180000e036e73310768656262697a7ac014c00c00020001000151800006036e7332c02cc02800010001000151800004c372eb42c042000100010001518000043e320e91 30791 07320000000100000000000003777777146772656964616e75737a6f6e776572696e67656e026e6c0000010001 07328403000100000001000003777777146772656964616e75737a6f6e776572696e67656e026e6c0000010001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 30792 00a500000001000000000000076d696e62757a61026e6c00000f0001 00a580000001000000020001076d696e62757a61026e6c00000f0001c00c0002000100015180000b087374617267617465c00cc00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004d535a3d2 30793 71a100000001000000000000056d61696c31076e6564636f6d70026e6c0000010001 71a180000001000000020001056d61696c31076e6564636f6d70026e6c0000010001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30794 19f300000001000000000000056d61696c31076e6564636f6d70026e6c00001c0001 19f380000001000000020001056d61696c31076e6564636f6d70026e6c00001c0001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30795 c46c00000001000000000000056d61696c31076e6564636f6d70026e6c0000260001 c46c80000001000000020001056d61696c31076e6564636f6d70026e6c0000260001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30796 ef1700000001000000000000056d61696c33076e6564636f6d70026e6c0000010001 ef1780000001000000020001056d61696c33076e6564636f6d70026e6c0000010001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30797 adf300000001000000000000056d61696c33076e6564636f6d70026e6c00001c0001 adf380000001000000020001056d61696c33076e6564636f6d70026e6c00001c0001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30798 5db800000001000000000000056d61696c33076e6564636f6d70026e6c0000260001 5db880000001000000020001056d61696c33076e6564636f6d70026e6c0000260001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30799 adf500000001000000000000056d61696c34076e6564636f6d70026e6c0000010001 adf580000001000000020001056d61696c34076e6564636f6d70026e6c0000010001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30800 1dcf00000001000000000000056d61696c34076e6564636f6d70026e6c00001c0001 1dcf80000001000000020001056d61696c34076e6564636f6d70026e6c00001c0001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30801 b76300000001000000000000056d61696c34076e6564636f6d70026e6c0000260001 b76380000001000000020001056d61696c34076e6564636f6d70026e6c0000260001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 30802 5cd200000001000000000000036e7331076e6564636f6d70026e6c00001c0001 5cd280000001000000020001036e7331076e6564636f6d70026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1a80d 30803 780d00000001000000000000036e7331076e6564636f6d70026e6c0000260001 780d80000001000000020001036e7331076e6564636f6d70026e6c0000260001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1a80d 30804 d66a000000010000000000000973657868756e746572027830026e6c0000010001 d66a800000010000000200020973657868756e746572027830026e6c0000010001c0160002000100015180000d026e730776697065726276c019c01600020001000151800006036e7332c030c02d00010001000151800004d5881a07c04600010001000151800004d5881a05 30805 099028000001000000010000026e6c0000060001055f6c646170045f7463701244656661756c742d46697273742d53697465065f7369746573077369747461726408637265646f6f7273026e6c00002100010000025800230000006401850773657276657231077369747461726408637265646f6f7273026e6c00 0990a8040000000000000000 30806 48420000000100000000000004686f6d650774697363616c69026e6c0000010001 48428000000100000003000204686f6d650774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 30807 f2f300000001000000000000026e73076575726f6e6574026e6c0000010001 f2f380000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 30808 6ff200000001000000000000026e73076575726f6e6574026e6c00001c0001 6ff280000001000000020001026e73076575726f6e6574026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 30809 22bc00000001000000000000026e73076575726f6e6574026e6c0000260001 22bc80000001000000020001026e73076575726f6e6574026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 30810 ecd2000000010000000000000377777703647069026e6c0000010001 ecd2800000010000000200000377777703647069026e6c0000010001c0100002000100015180001607646e732d65753108706f776572646e73036e657400c0100002000100015180000a07646e732d757331c030 30811 0000000070024000bdaf0000020405b401010402 000080010000000000000000 30812 d3b00000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 d3b08000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 30813 b68abd075010447072610000000000000000 30814 b68abd0750184470b7c30000008d553b000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcf1403c4e7100030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000 30815 3a7600000001000000000000037777770962697a617273697465026e6c0000010001 3a7680000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 30816 50b300000001000000000000046d61696c057374696261026e6c0000010001 50b380000001000000020002046d61696c057374696261026e6c0000010001c0110002000100015180000c026e7306787334616c6cc017c01100020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 30817 b68abd155011446271d10000000000000000 30818 8ef3000000010000000000000e67616c6c6572796275696c6465720d706172746e6572636c69636b73026e6c0000010001 8ef3800000010000000200020e67616c6c6572796275696c6465720d706172746e6572636c69636b73026e6c0000010001c01b0002000100015180000f036e73310861746c616e74697ac029c01b00020001000151800006036e7332c041c03d00010001000151800004d5efa011c05800010001000151800004d5efa075 30819 0000000070024000c6270000020405b401010402 000080010000000000000000 30820 00ee00100001000000000001026e7306787334616c6c026e6c00000100010000290800000000000000 00ee80000001000000030003026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 30821 b37f00000001000000000000096f7070656e6865696d026e6c00000f0001 b37f80000001000000020002096f7070656e6865696d026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 30822 b8420000000100000000000005666f72756d0a636c7562636861727473026e6c0000010001 b8428000000100000002000205666f72756d0a636c7562636861727473026e6c0000010001c0120002000100015180000a036e7331036e7873c01dc01200020001000151800006036e7332c035c03100010001000151800004d973c015c04700010001000151800004d973c102 30823 803500100001000000000001036e733206787334616c6c026e6c00000100010000290800000000000000 803580000001000000030003036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d09630000291000000000000000 30824 63ab0000000100000000000003647676026e6c00001c0001 63ab8000000100000003000303647676026e6c00001c0001c00c0002000100015180000e04646e733106626c6978656dc010c00c0002000100015180000704646e7332c029c00c0002000100015180000704646e7333c029c02400010001000151800004d44fe803c03e00010001000151800004c3f5c782c05100010001000151800004d44ff303 30825 e1aa00000001000000000000037777770b64652d6f76657268656964026e6c0000010001 e1aa80000001000000020002037777770b64652d6f76657268656964026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c01cc01000020001000151800006036e7332c033c03000010001000151800004d453c005c04e00010001000151800004d453c006 30826 581b0000000100000000000003777777066d6172696a6e046d73767a026e6c0000010001 581b8000000100000002000003777777066d6172696a6e046d73767a026e6c0000010001c0170002000100015180000f036e7331056e6c32626503636f6d00c01700020001000151800006036e7332c034 30827 b68abd165010446271d00000000000000000 30828 b68bafe25010447087fd0000000000000000 30829 1a8900000001000000000000037777770a736d76657268616c656e026e6c0000010001 1a8980000001000000020000037777770a736d76657268616c656e026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c034 30830 b68bafe25018447063a10000008dbffa000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcf1403c4e7100030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000 30831 f46700000001000000000000037777770d6275646765742d686f74656c73026e6c0000010001 f46780000001000000020002037777770d6275646765742d686f74656c73026e6c0000010001c0100002000100015180000a036e7331036e7873c01ec01000020001000151800006036e7332c036c03200010001000151800004d973c015c04800010001000151800004d973c102 30832 ea4a00000001000000000000096b696e672d70696e67026e6c00000f0001 ea4a80000001000000020000096b696e672d70696e67026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c031 30833 b68baff050114462876d0000000000000000 30834 efa000000001000000000000026e7306787334616c6c026e6c0000010001 efa080000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 30835 0000000070024000803f0000020405b401010402 000080010000000000000000 30836 77d000000001000000000000036e733206787334616c6c026e6c0000010001 77d080000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 30837 b68baff150104462876c0000000000000000 30838 b68c3a0a50104470b7ec0000000000000000 b68cba040000000000000000 30839 b68c3a0a501844701e530000008d3538000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcf1403c4e7100030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000 b68cba040000000000000000 30840 961400000001000000000000036e733107627573686f7374026e6c0000010001 961480000001000000020002036e733107627573686f7374026e6c0000010001c01000020001000151800012036e73310b62756c6b646f6d61696e73c018c01000020001000151800006036e7332c030c02c00010001000151800004d4ccd1b2c04a00010001000151800004d4ccd1b3 30841 b68c3a1850114462b75c0000000000000000 b68cba140000000000000000 30842 00de00000001000000000000037777770c74686564616e63696e67646a026e6c0000010001 00de80000001000000020000037777770c74686564616e63696e67646a026e6c0000010001c0100002000100015180001204646e733107636f6d70656e7a036e657400c0100002000100015180000704646e7332c036 30843 c07100000001000000000000067365617263680a6562617973746f726573026e6c0000010001 c07180000001000000030000067365617263680a6562617973746f726573026e6c0000010001c013000200010001518000140963726f636f64696c65046562617903636f6d00c0130002000100015180001a0573636130320373656303646e730665786f647573036e657400c01300020001000151800008057363613033c058 30844 ae6e000000010000000000000377777704616d736f026e6c0000010001 ae6e800000010000000200020377777704616d736f026e6c0000010001c0100002000100015180000c04646e73310470696e73c015c0100002000100015180000704646e7332c02ec02900010001000151800004d9c26101c04100010001000151800004d9c26002 30845 4cf4000000010000000000000377777712696e746572737461722d6d657562656c656e026e6c0000010001 4cf4800000010000000200000377777712696e746572737461722d6d657562656c656e026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c03a 30846 befb00000001000000000000037777770c666c6f7269646176696c6c61026e6c0000010001 befb80000001000000020000037777770c666c6f7269646176696c6c61026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 30847 70150000000100000000000003616775026e6c00000f0001 70158000000100000003000103616775026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 30848 b68c3a1950104462b75b0000000000000000 b68cba140000000000000000 30849 97c10000000100000000000003777777096d696c64706f776572026e6c0000010001 97c18000000100000003000203777777096d696c64706f776572026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 30850 544e0000000100000000000003777777076d796f6b696e65026e6c0000010001 544e8000000100000003000303777777076d796f6b696e65026e6c0000010001c0100002000100015180000e036e733107686f7374696e67c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c000100010001518000043e818b01c046000100010001518000043e818b02c058000100010001518000043e818ae1 30851 0cb80000000100000000000003626c3402626c06787334616c6c026e6c0000010001 0cb88000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30852 a6400000000100000000000003776d7707757477656e7465026e6c0000010001 a6408000000100000003000303776d7707757477656e7465026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c0001000100015180000482590102c03e0001000100015180000482590103c05000010001000151800004c0571113 30853 bc7700000001000000000000037777770b6372616e656e646f6e636b026e6c0000010001 bc7780000001000000020000037777770b6372616e656e646f6e636b026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c034 30854 f50e00000001000000000000037777770b6574636265737477617265026e6c0000010001 f50e80000001000000020000037777770b6574636265737477617265026e6c0000010001c01000020001000151800010026e730777697265687562036e657400c01000020001000151800006036e7332c033 30855 ce0a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 ce0a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30856 c9f3000000010000000000000c657261736d7573626f6f6b73026e6c00000f0001 c9f3800000010000000200020c657261736d7573626f6f6b73026e6c00000f0001c00c0002000100015180000f036e73310873796e6e65747279c019c00c00020001000151800006036e7332c031c02d00010001000151800004d584ae41c04800010001000151800004d584ae42 30857 141200000001000000000000036e733203666a66026e6c0000010001 141280000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30858 2f8200000001000000000000037777770c696b62656e657262696a6e61026e6c0000010001 2f8280000001000000020002037777770c696b62656e657262696a6e61026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01dc01000020001000151800006036e7332c035c03100010001000151800004d5efa011c04c00010001000151800004d5efa075 30859 141300000001000000000000036e733103666a66026e6c0000010001 141380000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30860 0444000000010000000000000862617374696f6e310562617a6973026e6c0000010001 0444800000010000000200010862617374696f6e310562617a6973026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b026e73026e6c036e657400c00c00010001000151800004824e8f01 30861 c54a000000010000000000000662616f626162026e6c0000010001 c54a800000010000000200000662616f626162026e6c0000010001c00c00020001000151800012036e73310878656e6f73697465036e657400c00c00020001000151800006036e7332c02b 30862 0d120000000100000000000008667265656d61696c026e6c00000f0001 0d128000000100000003000208667265656d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 30863 335a00000001000000000000036e73330a72336469656e7374656e026e6c0000010001 335a80000001000000030003036e73330a72336469656e7374656e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f000100010001518000043e291ad2c041000100010001518000043e291ad3c00c000100010001518000043e291ad4 30864 e1010000000100000000000004646e73310471776562026e6c0000010001 e1018000000100000002000204646e73310471776562026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 30865 686f0000000100000000000004646e73320471776562026e6c0000010001 686f8000000100000002000204646e73320471776562026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 30866 10e200000001000000000000036e733109666972737466696e64026e6c0000010001 10e280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30867 725a00000001000000000000036e733209666972737466696e64026e6c0000010001 725a80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30868 0f96000000010000000000000377777706617265613137026e6c0000010001 0f96800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 30869 5879000000010000000000000377777706617265613137026e6c0000010001 5879800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 30870 eb5e00000001000000000000037777770a666f746f646f6b746572026e6c0000010001 eb5e80000001000000020000037777770a666f746f646f6b746572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 30871 27e300000001000000000000037777770765666661746861026e6c0000010001 27e380000001000000020002037777770765666661746861026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c018c01000020001000151800006036e7332c030c02c00010001000151800004d4b20403c04500010001000151800004d5881e45 30872 11820000000100000000000015726576616c6964617469652d66726965736c616e64026e6c0000010001 11828000000100000002000215726576616c6964617469652d66726965736c616e64026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec022c00c00020001000151800006036e7332c03ac03600010001000151800004c29f4906c04e00010001000151800004c29fb004 30873 f6bd000000010000000000000377777703626261026e6c0000010001 f6bd800000010000000200000377777703626261026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 30874 8d0a000000010000000000000377777707616e74656e6e61026e6c0000010001 8d0a800000010000000200010377777707616e74656e6e61026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180001306696e666f726d07616e74656e6e6102646b00c02c00010001000151800004d995dd13 30875 230600000001000000000000037777770a72656372656174696566026e6c0000010001 230680000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 30876 1ab500000001000000000000046578706f0474657261026e6c0000010001 1ab580000001000000030002046578706f0474657261026e6c0000010001c0110002000100015180000d036e733106776964657873c016c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 30877 4cb900000001000000000000046578706f0474657261026e6c0000010001 4cb980000001000000030002046578706f0474657261026e6c0000010001c0110002000100015180000d036e733106776964657873c016c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 30878 042d000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 042d800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30879 9ab300000001000000000000046e73303903777873026e6c00001c0001 9ab380000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 30880 9c5c00000001000000000000036e733403777873026e6c00001c0001 9c5c80000001000000030003036e733403777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 30881 1b8100000001000000000000046e73303803777873026e6c00001c0001 1b8180000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 30882 1434000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 1434800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 30883 7cea00000001000000000000037777770a666f746f646f6b746572026e6c0000010001 7cea80000001000000020000037777770a666f746f646f6b746572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 30884 a82000000001000000000000026e7305706c616e74026e6c0000010001 a82080000001000000020002026e7305706c616e74026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d59f0037c03700010001000151800004d59f0046 30885 a71400000001000000000000036e733205706c616e74026e6c0000010001 a71480000001000000020002036e733205706c616e74026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d59f0037c00c00010001000151800004d59f0046 30886 c46c00000001000000000000054d4f4c454e0350434d026e6c0000010001 c46c80000001000000020001054d4f4c454e0350434d026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 30887 000000006002223800990000020405b40000 000080010000000000000000 30888 9b4b00000001000000000000036e7331056132303030026e6c0000010001 9b4b80000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 30889 b68efdc55010223863f10000000000000000 30890 f6ac0000000100000000000003656236026e6c00000f0001 f6ac8403000100000001000003656236026e6c00000f0001c01000060001000038400036026e730f646f6d61696e2d7265676973747279c0100a686f73746d6173746572c0270bf1e540000070800000384000278d0000003840 30891 b68efdc550182238a3690000001d92300000000100000000000008736c61676572696a026e6c0000060001 30892 b692000000010000000000000579756d6d79026e6c0000010001 b692800000010000000200000579756d6d79026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02a 30893 b68efe335010223863640000000000000000 30894 b68efe335011223863630000000000000000 30895 06b200000001000000000000036e733109666972737466696e64026e6c0000010001 06b280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30896 b68efe345010223863620000000000000000 30897 356100000001000000000000036e733209666972737466696e64026e6c0000010001 356180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 30898 fa1e00000001000000000000036d783203626974026e6c0000010001 fa1e80000001000000030003036d783203626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 30899 158528000001000200000000026e6c0000060001056e616f6d690e6e65746c696a6e6e65747765726b026e6c00000500fe000000000000c01400010001000000000004c0a80114 1585a8040000000000000000 30900 6b35000000010000000000000377777706626970706472026e6c0000010001 6b35800000010000000200000377777706626970706472026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c017c0100002000100015180000704686e7331c030 30901 e682000000010000000000000469632d73026e6c00000f0001 e682800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 30902 143900000001000000000000036e733203666a66026e6c0000010001 143980000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30903 8ba60000000100000000000103777873026e6c0000ff00010000291000000000000000 8ba68000000100000003000403777873026e6c0000ff0001c00c00020001000151800007046e733038c00cc00c00020001000151800007046e733039c00cc00c00020001000151800006036e7334c00cc02400010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 30904 9d9100000001000000000000036e733503777873026e6c0000010001 9d9180000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 30905 70c400000001000000000000036e733503777873026e6c00001c0001 70c480000001000000030003036e733503777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 30906 143a00000001000000000000036e733103666a66026e6c0000010001 143a80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30907 0000000070024000bd7e0000020405b401010402 000080010000000000000000 30908 4f3100000001000000000000036d7832067874646e6574026e6c0000010001 4f3180000001000000020002036d7832067874646e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c02b00010001000151800004c16e9d02c03c00010001000151800004d9cc165f 30909 b68f86c850104470a86a0000000000000000 30910 b68f86c8501844702e0000000092d500000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd41403c4ec10003000000334e544c4d535350000100000097b208e00e000e002500000005000500200000004e414f4d494e45544c494a4e4e45545745524b0000 30911 036b00000001000000000000037777770e77656273686f65636f6d70616e79026e6c0000010001 036b80000001000000020002037777770e77656273686f65636f6d70616e79026e6c0000010001c0100002000100015180000e04646e733106666f7263657ac01fc0100002000100015180000704646e7332c038c03300010001000151800004d994af13c04d00010001000151800004d994af1a 30912 b68f86d650114462a7d50000000000000000 30913 cda3000000010000000000000674616b652d32026e6c00000f0001 cda3800000010000000200000674616b652d32026e6c00000f0001c00c00020001000151800010036e733109666972737466696e64c013c00c00020001000151800006036e7332c02b 30914 00000000700240000ff90000020405b401010402 000080010000000000000000 30915 b68f86d750104462a7d40000000000000000 30916 2683000000010000000000000331373202323101310131026e6c0000010001 2683840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 30917 b6902691501044705b1b0000000000000000 b690a6930000000000000000 30918 b690269150184470c6b100000092f000000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd41403c4ec10003000000334e544c4d535350000100000097b208e00e000e002500000005000500200000004e414f4d494e45544c494a4e4e45545745524b0000 b690a6930000000000000000 30919 500700000001000000000000037777770b726567696f7477656e7465026e6c0000010001 500780000001000000020000037777770b726567696f7477656e7465026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c033 30920 4b6300000001000000000000046d61696c076e65746578706f026e6c0000010001 4b6380000001000000020002046d61696c076e65746578706f026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02d000100010001518000043efa0ac2c03e000100010001518000043efa0a82 30921 f53800000001000000000000026e73076575726f6e6574026e6c0000010001 f53880000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 30922 92aa00000001000000000000037777770d6f7574646f6f72706167696e61026e6c0000010001 92aa80000001000000020002037777770d6f7574646f6f72706167696e61026e6c0000010001c0100002000100015180000d04646e733105692d702d64c01ec0100002000100015180000704646e7332c037c03200010001000151800004d9124003c04b00010001000151800004d9124104 30923 b690269f501144625a860000000000000000 b690a6930000000000000000 30924 2fb20000000100000000000009652d6c756e61746963026e6c0000010001 2fb28000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 30925 87e30000000100000000000003777777097072616f7468757573026e6c0000010001 87e38000000100000002000103777777097072616f7468757573026e6c0000010001c0100002000100015180000a036e733303777873c01ac01000020001000151800006036e7334c032c04400010001000151800004d5ef9a65 30926 27c00000000100000000000009652d6c756e61746963026e6c0000010001 27c08000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 30927 000000007002400057280000020405b401010402 000080010000000000000000 30928 8b5a00000001000000000000026e73067a6f6e6e6574026e6c0000010001 8b5a80000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 30929 e8580000000100000000000003777777086d6574656f776562026e6c0000010001 e8588000000100000002000203777777086d6574656f776562026e6c0000010001c01000020001000151800009026e73036f6b65c019c01000020001000151800006036e7332c030c02d00010001000151800004c13acc3bc04200010001000151800004c13acc27 30930 b69026a0501044625a850000000000000000 b690a6a30000000000000000 30931 758600000001000000000000037777770463636774026e6c0000010001 758680000001000000020002037777770463636774026e6c0000010001c01000020001000151800013036e73310c666173747365727665723135c015c01000020001000151800006036e7332c02dc0290001000100015180000442a4f32cc0480001000100015180000442a4f335 30932 8ba60000000100000000000003777873026e6c0000ff0001 8ba68000000100000003000303777873026e6c0000ff0001c00c00020001000151800007046e733038c00cc00c00020001000151800007046e733039c00cc00c00020001000151800006036e7334c00cc02400010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 30933 001928000001000200000000026e6c00000600010f6b6d77652d6365337668396a647070086b6d77652d757370026e6c00000500fe000000000000c01400010001000000000004c2868a38 0019a8040000000000000000 30934 a6e20000000100000000000003777777086d6574656f776562026e6c0000010001 a6e28000000100000002000203777777086d6574656f776562026e6c0000010001c01000020001000151800009026e73036f6b65c019c01000020001000151800006036e7332c030c02d00010001000151800004c13acc3bc04200010001000151800004c13acc27 30935 682300100001000000000001036e733407737570706f7274026e6c00000100010000290800000000000000 682380000001000000020003036e733407737570706f7274026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe0000291000000000000000 30936 a72600100001000000000001036e733407737570706f7274026e6c00002600010000290800000000000000 a72680000001000000020003036e733407737570706f7274026e6c0000260001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe0000291000000000000000 30937 b69105e050104470c2fa0000000000000000 b69180010000000000000000 30938 b69105e050184470c511000000925980000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd41403c4ec10003000000334e544c4d535350000100000097b208e00e000e002500000005000500200000004e414f4d494e45544c494a4e4e45545745524b0000 b69180010000000000000000 30939 0000000060022238210a0000020405b40000 000080010000000000000000 30940 b69105ee50114462c2650000000000000000 b69180010000000000000000 30941 2c0901000001000000000000056b6f726e6f026e6c00000f000100 2c0985030001000000010000056b6f726e6f026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 30942 b691d4ec50102238ad380000000000000000 30943 b691d4ec501822387976000000264f0c00000001000000000000116f6e7477696b6b656c696e6773696e7374026e6c0000060001 30944 b69105ef50104462c2640000000000000000 b69180010000000000000000 30945 320d00000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 320d80000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 30946 b691d55650102238aca60000000000000000 30947 b691d55650112238aca50000000000000000 30948 b3180000000100000000000003626c3102626c06787334616c6c026e6c0000010001 b3188000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 30949 1c3b000000010000000000000c646166656876773035343233026e6c0000010001 1c3b840300010000000100000c646166656876773035343233026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 30950 266a000000010000000000000e656c6576617465642d6d75736963026e6c00000f0001 266a800000010000000200010e656c6576617465642d6d75736963026e6c00000f0001c00c0002000100015180000e036e733107626c7565646e73c01bc00c00020001000151800006036e7334c033c02f00010001000151800004d5c401c0 30951 b691d55750102238aca40000000000000000 30952 4849000000010000000000000a6d69737465726d61696c026e6c0000010001 4849800000010000000200020a6d69737465726d61696c026e6c0000010001c00c0002000100015180000b036e73310477656233c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d436240ec04200010001000151800004c2b262ef 30953 363b00000001000000000000036e73340767617574656e67026e6c0000010001 363b80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30954 264000000001000000000000036e73330767617574656e67026e6c0000010001 264080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30955 264800000001000000000000036e73330767617574656e67026e6c0000010001 264880000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 30956 068f0000000100000000000008667265656d61696c026e6c00000f0001 068f8000000100000003000208667265656d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 30957 f3b500000001000000000000037777770968737664656f617365026e6c0000010001 f3b580000001000000030000037777770968737664656f617365026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 30958 a95d00000001000000000000036e733107737572666e6574026e6c0000010001 a95d80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 30959 2b9300000001000000000000026e730368616e026e6c0000010001 2b9380000001000000020002026e730368616e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00c00010001000151800004914a670ac03500010001000151800004c0576a65 30960 51b200000001000000000000026e730368616e026e6c00001c0001 51b280000001000000020002026e730368616e026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00c00010001000151800004914a670ac03500010001000151800004c0576a65 30961 ff40000000010000000000000377777704696b6561026e6c0000010001 ff40800000010000000200000377777704696b6561026e6c0000010001c010000200010001518000150a676174656b656570657204696b656103636f6d00c010000200010001518000130761757468323130026e73027575036e657400 30962 f2ae000000010000000000000c636f727073336f7074776565026e6c0000010001 f2ae800000010000000200020c636f727073336f7074776565026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c019c00c00020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 30963 833e0000000100000000000003726e77026e6c00000f0001 833e8000000100000002000103726e77026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c02400010001000151800004913ac8fd 30964 a98d00000001000000000000036e733407737570706f7274026e6c0000010001 a98d80000001000000020002036e733407737570706f7274026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe 30965 9dec00000001000000000000036e733407737570706f7274026e6c0000260001 9dec80000001000000020002036e733407737570706f7274026e6c0000260001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe 30966 f7900000000100000000000003777777053361636573026e6c0000010001 f7908000000100000002000203777777053361636573026e6c0000010001c0100002000100015180000f026e7309656174736572766572c016c01000020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 30967 0313000000010000000000000573696e6574026e6c00000f0001 0313800000010000000200010573696e6574026e6c00000f0001c00c000200010001518000110a686f6c30316578646e730369636cc012c00c0002000100015180000b026e73026e6c036e657400c02600010001000151800004c14f9064 30968 0000000070022238543a0000020405b401010402 000080010000000000000000 30969 000700000001000000000000036e7331056132303030026e6c0000010001 000780000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 30970 7b5000100001000000000001034e533206585334414c4c024e4c00000100010000290800000080000000 7b5080000001000000030003034e533206585334414c4c024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d09630000291000000000000000 30971 3da8001000010000000000010b494953472d5345525645520449495347024e4c00000100010000290800000080000000 3da8800000010000000200030b494953472d5345525645520449495347024e4c0000010001c01800020001000151800002c00cc0180002000100015180000e036e733107737572666e6574c01dc00c00010001000151800004c3a959c3c03f00010001000151800004c0576a650000291000000000000000 30972 8eac0000000100000000000004626e6e75066c616e646973026e6c00000f0001 8eac8000000100000002000104626e6e75066c616e646973026e6c00000f0001c01100020001000151800006036e7331c011c0110002000100015180000b026e73026e6c036e657400c02c00010001000151800004c2b2b6a0 30973 00000000600222387a780000020405b40000 000080010000000000000000 30974 b69320c750102238baca0000000000000000 b693a0c30000000000000000 30975 b69320c75018223807270000001c1125000000010000000000000774617861746965026e6c0000060001 b693a0c30000000000000000 30976 8d4b00000001000000000000077368652d706f6e026e6c0000010001 8d4b80000001000000020000077368652d706f6e026e6c0000010001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c02c 30977 b693211d50102238ba560000000000000000 b693a1130000000000000000 30978 b693211d50112238ba550000000000000000 b693a1130000000000000000 30979 b693211e50102238ba540000000000000000 b693a1130000000000000000 30980 150900000001000000000000036e733203666a66026e6c0000010001 150980000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30981 150a00000001000000000000036e733103666a66026e6c0000010001 150a80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 30982 2e4a000000010000000000000770617261676f6e026e6c00000f0001 2e4a800000010000000300010770617261676f6e026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 30983 bee700000001000000000000037777770362736c026e6c0000010001 bee780000001000000020000037777770362736c026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02c 30984 2c3600000001000000000000036e7332086d65646961776562026e6c0000010001 2c3680000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 30985 a02d00000001000000000000036e7333086d65646961776562026e6c0000010001 a02d80000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 30986 0b290000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 0b298000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 30987 8f2628000001000000010000026e6c0000060001096f736f736572766572026e6c0000010001000002580004915d8412 8f26a8040000000000000000 30988 b63c00000001000000000000026869026e6c0000ff0001 b63c80000001000000020000026869026e6c0000ff0001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 30989 57c2000000010000000000000467697463026e6c00000f0001 57c2800000010000000200000467697463026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 30990 000000007002faf036a60000020405b401010402 000080010000000000000000 30991 b69592cf5010faf019f50000000000000000 30992 b69592cf5018faf0921a0000008e6b08000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcc7403c4e4700030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000 30993 f9c800000001000000000000046d633031046e69706f026e6c00000f0001 f9c880000001000000020001046d633031046e69706f026e6c00000f0001c01100020001000151800006036e7331c011c0110002000100015180000d036e7332036b706e036e657400c02a00010001000151800004c1ad6a04 30994 b69592dd5011fae219640000000000000000 30995 b69592de5010fae219630000000000000000 30996 000000007002faf0f88d0000020405b401010402 000080010000000000000000 30997 42d600000001000000000000037777770e6272756e7373756d6f6e6c696e65026e6c0000010001 42d680000001000000020002037777770e6272756e7373756d6f6e6c696e65026e6c0000010001c0100002000100015180000a036e7331036e7873c01fc01000020001000151800006036e7332c037c03300010001000151800004d973c015c04900010001000151800004d973c102 30998 b696589b5010faf016100000000000000000 b696d8940000000000000000 30999 b696589b5018faf0eca60000008e0d98000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcc7403c4e4700030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000 b696d8940000000000000000 31000 14fa00000001000000000000036e733203666a66026e6c0000010001 14fa80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31001 b69658a95011fae2157f0000000000000000 b696d8a40000000000000000 31002 14fb00000001000000000000036e733103666a66026e6c0000010001 14fb80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31003 b69658aa5010fae2157e0000000000000000 b696d8a40000000000000000 31004 000000007002faf0d1d60000020405b401010402 000080010000000000000000 31005 7bb200000001000000000000026869026e6c0000010001 7bb280000001000000020000026869026e6c0000010001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 31006 950400000001000000000000036e733207626265796f6e64026e6c00001c0001 950480000001000000020002036e733207626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 31007 b6925a485010223870130000000000000000 b692da440000000000000000 31008 072b00000001000000000000036e733207626265796f6e64026e6c0000260001 072b80000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 31009 12d400000001000000000000036e733107626265796f6e64026e6c00001c0001 12d480000001000000020002036e733107626265796f6e64026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 31010 31b100000001000000000000036e733107626265796f6e64026e6c0000260001 31b180000001000000020002036e733107626265796f6e64026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 31011 b6973bb55010faf00c3e0000000000000000 b697bbb40000000000000000 31012 b6973bb55018faf0ee6c0000008e0000000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcc8403c4e4800030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000 b697bbb40000000000000000 31013 0be3000000010000000000000d36322d3137372d3231302d313007626265796f6e64026e6c0000010001 0be3800000010000000200020d36322d3137372d3231302d313007626265796f6e64026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac036000100010001518000043eb1900bc048000100010001518000043eb19002 31014 b6925a48501822385efc00000096a91f000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afcf6403c4e760003000000374e544c4d535350000100000097b200e0080008002f0000000f000f00200000004b4d57452d4345335648394a4450504b4d57452d5553500000 b692da440000000000000000 31015 b6973bc35011fae20bad0000000000000000 b697bbc40000000000000000 31016 c7580000000100000000000006667265656c72026e6c00001c0001 c7588403000100000001000006667265656c72026e6c00001c0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 31017 b6973bc45010fae20bac0000000000000000 b697bbc40000000000000000 31018 0b620000000100000000000005646e732d32056c61646f74026e6c0000010001 0b628000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31019 aa070000000100000000000003777777147468756973696e7765737466726965736c616e64026e6c0000010001 aa078000000100000003000203777777147468756973696e7765737466726965736c616e64026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c025c01000020001000151800006036e7332c03dc01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03900010001000151800004cf2cd7adc05a0001000100015180000452c04365 31020 0b290000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 0b298000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31021 0ac000100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 0ac080000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 31022 fd560000000100000000000005646e732d32056c61646f74026e6c0000010001 fd568000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31023 856000100001000000000001026e73076e656473746174026e6c00002600010000290800000000000000 856080000001000000020003026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 31024 a12000100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 a12080000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 31025 280500100001000000000001036e7333076e656473746174026e6c00002600010000290800000000000000 280580000001000000020003036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 31026 4cf600000001000000000000036e7331066e6c74726565026e6c0000010001 4cf680000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 31027 0b290000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 0b298000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31028 ff1100000001000000000000056132303030026e6c00001c0001 ff1180000001000000030002056132303030026e6c00001c0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e733109756e69736f75726365c012c00c00020001000151800006036e7332c00cc026000100010001518000043e6c0141c054000100010001518000043e6c0142 31029 ce68000000010000000000000d7365637572697479686f757365026e6c00000f0001 ce68800000010000000200000d7365637572697479686f757365026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c034 31030 0fd400000001000000000000097265616c67616d6572026e6c00000f0001 0fd480000001000000030001097265616c67616d6572026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc016c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c048c02a000100010001518000043efa0202 31031 bb1c00000001000000000000046e73303903777873026e6c0000010001 bb1c80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 31032 6e430000000100000000000005646e732d32056c61646f74026e6c0000010001 6e438000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31033 7c69000000010000000000000377777709617374726f6e6f7661026e6c0000010001 7c69800000010000000200020377777709617374726f6e6f7661026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c01ac01000020001000151800006036e7332c032c02e000100010001518000045054ed14c04b00010001000151800004d5f72f14 31034 bb6900000001000000000000046d61696c076575726f6e6574026e6c0000010001 bb6980000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 31035 c62d00000001000000000000037777770974656c6574656b7374026e6c0000010001 c62d80000001000000020000037777770974656c6574656b7374026e6c0000010001c0100002000100015180000f036e733108646e73746f6f6c73c01ac01000020001000151800006036e7332c032 31036 87bf00000001000000000000036e733108646e73746f6f6c73026e6c0000010001 87bf80000001000000020002036e733108646e73746f6f6c73026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c019c01000020001000151800006036e7332c031c02d000100010001518000045054ed14c04a00010001000151800004d5f72f14 31037 044a00000001000000000000036e733208646e73746f6f6c73026e6c0000010001 044a80000001000000020002036e733208646e73746f6f6c73026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c019c01000020001000151800006036e7332c031c02d000100010001518000045054ed14c04a00010001000151800004d5f72f14 31038 40be0000000100000000000004626f6261026778026e6c0000010001 40be8000000100000002000104626f6261026778026e6c0000010001c01100020001000151800002c00cc0110002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1590b 31039 c5590000000100000000000005646e732d32056c61646f74026e6c0000010001 c5598000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31040 230900000001000000000000036e73310a6d756c74696b6162656c026e6c0000010001 230980000001000000030002036e73310a6d756c74696b6162656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 31041 f3d500000001000000000000036e73310a6d756c74696b6162656c026e6c0000260001 f3d580000001000000030002036e73310a6d756c74696b6162656c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 31042 c41100000001000000000000036e73320a6d756c74696b6162656c026e6c0000010001 c41180000001000000030002036e73320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 31043 7e3d00000001000000000000036e73320a6d756c74696b6162656c026e6c0000260001 7e3d80000001000000030002036e73320a6d756c74696b6162656c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 31044 775600000001000000000000036e733203757063026e6c0000010001 775680000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 31045 0c43000000010000000000000b6e69657577732d63616665026e6c0000010001 0c43800000010000000300030b6e69657577732d63616665026e6c0000010001c00c0002000100015180000b036e733104656e6f6dc018c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030c02c00010001000151800004d87a0479c04300010001000151800004d86296b6c05500010001000151800004d9a083d1 31046 70bb0000000100000000000003777777046d2d666d026e6c0000010001 70bb8000000100000002000003777777046d2d666d026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c030 31047 16220000000100000000000005646e732d32056c61646f74026e6c0000010001 16228000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31048 066a00000001000000000000037777770866696c6d706a6573026e6c0000010001 066a80000001000000020002037777770866696c6d706a6573026e6c0000010001c01000020001000151800012036e73310b696e6263686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d5efb140c04b00010001000151800004d5efb141 31049 915a00000001000000000000095f6b65726265726f73045f7564700a4f6f737465696e646572026e6c0000060001 915a84030001000000010000095f6b65726265726f73045f7564700a4f6f737465696e646572026e6c0000060001c02600060001000038400036026e730f646f6d61696e2d7265676973747279c0260a686f73746d6173746572c03d0bf1e540000070800000384000278d0000003840 31050 f6a900000001000000000000026e73076e656473746174026e6c0000010001 f6a980000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 31051 23dc0000000100000000000003777777076d61686172656b026e6c0000010001 23dc8000000100000003000003777777076d61686172656b026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c034c0100002000100015180000a076e73686f737433c034 31052 9fb40000000100000000000005646e732d32056c61646f74026e6c0000010001 9fb48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31053 fcc60000000100000000000009652d6c756e61746963026e6c0000010001 fcc68000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 31054 852d00000001000000000000026e73076e656473746174026e6c0000260001 852d80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 31055 be9300000001000000000000036e7333076e656473746174026e6c0000010001 be9380000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 31056 f08800000001000000000000036e7333076e656473746174026e6c0000260001 f08880000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 31057 f26b000000010000000000000331373202323101310131026e6c0000010001 f26b840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 31058 b6925a565011222a6f7a0000000000000000 b692da540000000000000000 31059 000000007002223860470000020405b401010402 000080010000000000000000 31060 33f20000000100000000000003646573026e6c0000010001 33f28000000100000002000203646573026e6c0000010001c00c00020001000151800012036e73310b70726f66736f6e6c696e65c010c00c00020001000151800006036e7332c028c02400010001000151800004d5efb15ec04200010001000151800004d5efb15f 31061 77f60000000100000000000005646e732d32056c61646f74026e6c0000010001 77f68000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31062 0f4f00000001000000000000034e533206585334414c4c024e4c0000010001 0f4f80000001000000030002034e533206585334414c4c024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 31063 b4b8000000010000000000000b494953472d5345525645520449495347024e4c0000010001 b4b8800000010000000200020b494953472d5345525645520449495347024e4c0000010001c01800020001000151800002c00cc0180002000100015180000e036e733107737572666e6574c01dc00c00010001000151800004c3a959c3c03f00010001000151800004c0576a65 31064 bf7500000001000000000000036e73330767617574656e67026e6c0000010001 bf7580000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31065 193400000001000000000000036e73340767617574656e67026e6c0000010001 193480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31066 492a0000000100000000000005646e732d32056c61646f74026e6c0000010001 492a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31067 ac6800000001000000000000037777770a6c696d62757267766163026e6c0000010001 ac6880000001000000030002037777770a6c696d62757267766163026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 31068 48ef0000000100000000000003647873026e6c00000f0001 48ef8000000100000002000203647873026e6c00000f0001c00c00020001000151800011036e73310a77656264796e616d6963c010c00c00020001000151800006036e7332c028c024000100010001518000045054e304c041000100010001518000045054e305 31069 462200000001000000000000036e7331066c696e6b7570026e6c0000010001 462280000001000000030003036e7331066c696e6b7570026e6c0000010001c0100002000100015180000b04646e733103766970c017c0100002000100015180000704646e7332c030c0100002000100015180000704646e7333c030c02b00010001000151800004d44fe803c04200010001000151800004c3f5c782c05500010001000151800004d44ff303 31070 91cc00000001000000000000036e7332066c696e6b7570026e6c0000010001 91cc80000001000000030003036e7332066c696e6b7570026e6c0000010001c0100002000100015180000b04646e733103766970c017c0100002000100015180000704646e7332c030c0100002000100015180000704646e7333c030c02b00010001000151800004d44fe803c04200010001000151800004c3f5c782c05500010001000151800004d44ff303 31071 3c640000000100000000000005646e732d32056c61646f74026e6c0000010001 3c648000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31072 03d00000000100000000000005646e732d32056c61646f74026e6c0000010001 03d08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31073 6f990000000100000000000003777777046476686e026e6c0000010001 6f998000000100000003000303777777046476686e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004c1ad573dc04600010001000151800004c1ad573ec05800010001000151800004d5880089 31074 bbad00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 bbad80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 31075 518800100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 518880000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 31076 4a6b00000001000000000000096269746275636b65740665787465726e07756e6966616365026e6c0000010001 4a6b80000001000000030000096269746275636b65740665787465726e07756e6966616365026e6c0000010001c01d0002000100015180001c04646e733107756e696661636509636f6d70757761726503636f6d00c01d0002000100015180000704646e7332c03ec01d0002000100015180000704646e7333c03e 31077 746200000001000000000000027462026e6c00000f0001 746280000001000000030002027462026e6c00000f0001c00c00020001000151800007046e732d31c00cc00c00020001000151800007046e732d32c00cc00c00020001000151800012047365633103646e73067073696e6574c00fc02300010001000151800004d473b245c03600010001000151800004d473b24c 31078 16a40000000100000000000005646e732d32056c61646f74026e6c0000010001 16a48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31079 09ef00000001000000000000037777770767616d656d6167026e6c0000010001 09ef80000001000000030000037777770767616d656d6167026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030 31080 1d1e0000000100000000000005646e732d32056c61646f74026e6c0000010001 1d1e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31081 944700000001000000000000026e73076e656473746174026e6c0000010001 944780000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 31082 72db00000001000000000000036e7333076e656473746174026e6c0000010001 72db80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 31083 44300000000100000000000005646e732d32056c61646f74026e6c0000010001 44308000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31084 b6925a575010222a6f790000000000000000 b692da540000000000000000 31085 e92e0000000100000000000007647265636f6d6d026e6c0000ff0001 e92e8000000100000002000207647265636f6d6d026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02800010001000151800004d5c42546c03a00010001000151800004d5c42547 31086 b698080850102238ce5a0000000000000000 b69888040000000000000000 31087 b69808085018223875ef00000096f174000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afcf6403c4e760003000000374e544c4d535350000100000097b200e0080008002f0000000f000f00200000004b4d57452d4345335648394a4450504b4d57452d5553500000 b69888040000000000000000 31088 b6720000000100000000000005646e732d32056c61646f74026e6c0000010001 b6728000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31089 8bcb000000010000000000000473746570026e6c0000010001 8bcb800000010000000200020473746570026e6c0000010001c00c0002000100015180000d04696973310577696e646fc011c00c00020001000151800008056969733137c02ac02500010001000151800004d9aa050bc03e00010001000151800004d9aa0430 31090 f41f0000000100000000000003777777056b6c696b73026e6c0000010001 f41f8000000100000002000003777777056b6c696b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02d 31091 e1fc00000001000000000000066865746e6574026e6c00000f0001 e1fc80000001000000030003066865746e6574026e6c00000f0001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 31092 ea1a00000001000000000000116e766f2d7665727a656b6572696e67656e026e6c00000f0001 ea1a80000001000000020000116e766f2d7665727a656b6572696e67656e026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c035 31093 f78800000001000000000000037777770c737469636874696e67706167026e6c0000010001 f78880000001000000020000037777770c737469636874696e67706167026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 31094 c8c700000001000000000000037777770a7061727479636c69636b026e6c0000010001 c8c780000001000000020000037777770a7061727479636c69636b026e6c0000010001c01000020001000151800016036e73310c726567696f686f7374696e6703636f6d00c01000020001000151800006036e7332c033 31095 067000000001000000000000036e73330767617574656e67026e6c0000010001 067080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31096 19380000000100000000000003777777097365782d7369746573026e6c0000010001 19388000000100000003000203777777097365782d7369746573026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 31097 119e0000000100000000000004706f703305747269646f026e6c0000010001 119e8000000100000002000204706f703305747269646f026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02b00010001000151800004d43d150ec03d00010001000151800004d43d150c 31098 367900000001000000000000036e73330767617574656e67026e6c0000010001 367980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31099 5af40000000100000000000003626c3102626c06787334616c6c026e6c0000010001 5af48000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 31100 854100000001000000000000037777770d776f726c647769646563726577026e6c0000010001 854180000001000000020000037777770d776f726c647769646563726577026e6c0000010001c0100002000100015180000e036e7331046379677003636f6d00c01000020001000151800006036e7332c036 31101 000000006002223824c20000020405b40000 000080010000000000000000 31102 b698ca5350102238bb820000000000000000 31103 b698ca535018223813cf000000236e56000000010000000000000e6761642d676f6f692d7665636874026e6c0000060001 31104 7d6900000001000000000000037777770465616476026e6c0000010001 7d6980000001000000030003037777770465616476026e6c0000010001c010000200010001518000110161026e7309636f6d626f64617461c015c010000200010001518000040162c02bc010000200010001518000040163c02bc02900010001000151800004d5de0b44c04600010001000151800004d5de0b45c05600010001000151800004d5de0b4e 31105 af8200000001000000000000026e7303616d730874656c6567617465026e6c0000010001 af8280000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 31106 804900000001000000000000077a6565706f7374026e6c0000010001 804980000001000000020002077a6565706f7374026e6c0000010001c00c00020001000151800011026e730b6973642d686f6c6c616e64c014c00c00020001000151800006036e7332c02bc02800010001000151800004d5e38d0ac04500010001000151800004d5e38205 31107 5bc6000000010000000000000569636f6e7304696c7365026e6c0000010001 5bc6800000010000000300030569636f6e7304696c7365026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c02b000100010001518000043e45a282c03d000100010001518000043e45a283c04f000100010001518000043e45a284 31108 b698caba50102238baf60000000000000000 31109 b698caba50112238baf50000000000000000 31110 14ab000000010000000000000770726f66696c65026e6c00000f0001 14ab800000010000000200000770726f66696c65026e6c00000f0001c00c0002000100015180000e036e73310464697661036e657400c00c00020001000151800006036e7332c02c 31111 b698cabb50102238baf40000000000000000 31112 b69808165011222acdc10000000000000000 b69888140000000000000000 31113 00000000700222386f010000020405b401010402 000080010000000000000000 31114 189800000001000000000000036d78310464697661026e6c0000010001 189880000001000000020000036d78310464697661026e6c0000010001c0100002000100015180000e036e73310464697661036e657400c01000020001000151800006036e7332c02d 31115 45cd00000001000000000000036d78320464697661026e6c0000010001 45cd80000001000000020000036d78320464697661026e6c0000010001c0100002000100015180000e036e73310464697661036e657400c01000020001000151800006036e7332c02d 31116 e8940000000100000000000003777777076d65646c6f6f6b026e6c0000010001 e8948000000100000002000203777777076d65646c6f6f6b026e6c0000010001c0100002000100015180000c036e7331057669727475c018c01000020001000151800006036e7332c030c02c00010001000151800004d9726102c04400010001000151800004d58141c4 31117 3440000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 3440800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 31118 26a2001000010000000000010672656c6179330b7669616e6574776f726b73026e6c00000100010000290800000080000000 26a2800000010000000200030672656c6179330b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e20000291000000000000000 31119 0757000000010000000000000a68617264657277696a6b026e6c00000f0001 0757800000010000000300020a68617264657277696a6b026e6c00000f0001c00c0002000100015180000d036e733106776964657873c017c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 31120 a4c20000000100000000000005646e732d32056c61646f74026e6c0000010001 a4c28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31121 00000000600222389deb0000020405b40000 000080010000000000000000 31122 374400000001000000000000037777770a6765727569736c6f6f73026e6c0000010001 374480000001000000020002037777770a6765727569736c6f6f73026e6c0000010001c01000020001000151800009036e7331026973c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5852102c04400010001000151800004d5c41503 31123 244c000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 244c800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 31124 b69becab5010223812510000000000000000 31125 b69becab50182238cab200000024e7b1000000010000000000000f68656d6572742d676f72696368656d026e6c0000060001 31126 c83f000000010000000000000966696c7465726e6574026e6c00000f0001 c83f800000010000000300030966696c7465726e6574026e6c00000f0001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec016c00c00020001000151800006036e7331c033c00c00020001000151800006036e7332c033c02a00010001000151800004d42d2005c04800010001000151800004d42d2003c05a00010001000151800004d42d2103 31127 64c90000000100000000000005646e732d32056c61646f74026e6c0000010001 64c98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31128 9e3c00000001000000000000037777770f616d6174657572706c6161746a6573026e6c0000010001 9e3c80000001000000020002037777770f616d6174657572706c6161746a6573026e6c0000010001c0100002000100015180000e036e7331076970746f776572c020c01000020001000151800006036e7332c038c034000100010001518000043ecc4065c04e000100010001518000043ecc4066 31129 b69bed135010223811c30000000000000000 31130 b69bed135011223811c20000000000000000 31131 ef630000000100000000000003777777047573686e026e6c0000010001 ef638000000100000002000003777777047573686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02d 31132 b69bed145010223811c10000000000000000 31133 098500000001000000000000026e73077675757277656b026e6c0000010001 098580000001000000020000026e73077675757277656b026e6c0000010001c00f00020001000151800010036e733109666972737466696e64c017c00f00020001000151800006036e7332c02f 31134 2f1600000001000000000000037777770b6e69636b6465627275696e0564656d6f6e026e6c0000010001 2f1680000001000000030002037777770b6e69636b6465627275696e0564656d6f6e026e6c0000010001c01c00020001000151800006036e7331c01cc01c00020001000151800006036e7332c01cc01c0002000100015180000f036e73320564656d6f6e036e657400c03600010001000151800004c29f4906c04800010001000151800004c29fb004 31135 91210000000100000000000006627664737072026e6c00000f0001 91218000000100000002000206627664737072026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 31136 992500100001000000000001026e7308767575727765726b026e6c00000100010000290800000080000000 992580000001000000030002026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa02020000291000000000000000 31137 f91b00100001000000000001036e733208767575727765726b026e6c00000100010000290800000080000000 f91b80000001000000030002036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa02020000291000000000000000 31138 b60d000000010000000000000377777708736b69706c65696e026e6c0000010001 b60d800000010000000200020377777708736b69706c65696e026e6c0000010001c01000020001000151800010036e733109776869726c77696e64c019c01000020001000151800006036e7332c031c02d000100010001518000045054e683c04900010001000151800004d973c5bd 31139 4c320000000100000000000005646e732d32056c61646f74026e6c0000010001 4c328000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31140 0ddc00000001000000000000026e7306787334616c6c026e6c0000010001 0ddc80000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 31141 b38200000001000000000000036e733109776869726c77696e64026e6c00001c0001 b38280000001000000020002036e733109776869726c77696e64026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e683c03c00010001000151800004d973c5bd 31142 52f500000001000000000000036e733109776869726c77696e64026e6c0000260001 52f580000001000000020002036e733109776869726c77696e64026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e683c03c00010001000151800004d973c5bd 31143 813400000001000000000000036e733209776869726c77696e64026e6c00001c0001 813480000001000000020002036e733209776869726c77696e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054e683c00c00010001000151800004d973c5bd 31144 1def00000001000000000000036e733209776869726c77696e64026e6c0000260001 1def80000001000000020002036e733209776869726c77696e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054e683c00c00010001000151800004d973c5bd 31145 f2c80000000100000000000005646e732d32056c61646f74026e6c0000010001 f2c88000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31146 6f7100000001000000000000036e733206787334616c6c026e6c0000010001 6f7180000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 31147 0000000060022238b4740000020405b40000 000080010000000000000000 31148 0000000060022238b67e0000020405b40000 000080010000000000000000 31149 15fa00000001000000000000086c696e6b74616e6b026e6c00000f0001 15fa80000001000000020002086c696e6b74616e6b026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 31150 b69cc8d1501022384cb30000000000000000 31151 b69cc8d1501822382c12000000209f3f000000010000000000000b76657a656c68656e6e6570026e6c0000060001 31152 b69d9e7350102238791a0000000000000000 31153 b69d9e7350182238ea300000001eaf1000000001000000000000096f6f672d726164696f026e6c0000060001 31154 ab01000000010000000000000970657065727a65656c026e6c0000ff0001 ab01800000010000000200010970657065727a65656c026e6c0000ff0001c00c0002000100015180000a036e733303777873c016c00c00020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 31155 b69cc935501022384c2d0000000000000000 31156 b69cc935501122384c2c0000000000000000 31157 b69d9ed55010223878980000000000000000 31158 b69d9ed55011223878970000000000000000 31159 b69808175010222acdc00000000000000000 b69888140000000000000000 31160 b69b68b4501022387c650000000000000000 b69be8b40000000000000000 31161 b69b68b450182238179600000096fbd8000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afcf7403c4e770003000000374e544c4d535350000100000097b200e0080008002f0000000f000f00200000004b4d57452d4345335648394a4450504b4d57452d5553500000 b69be8b40000000000000000 31162 d9b30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d9b38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 31163 96ca0000000100000000000008667265656d61696c026e6c00000f0001 96ca8000000100000003000208667265656d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 31164 b69d9ed65010223878960000000000000000 31165 192500000001000000000000037777770b656c7365766965726f706c026e6c0000010001 192580000001000000020001037777770b656c7365766965726f706c026e6c0000010001c0100002000100015180000d026e7307616d6572636f6dc01cc01000020001000151800006036e7331c033c03000010001000151800004c2b2b20a 31166 5c5900000001000000000000037777770a68357468656174657273026e6c0000010001 5c5980000001000000020001037777770a68357468656174657273026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01bc01000020001000151800006036e7334c033c02f00010001000151800004d5c401c0 31167 cc760000000100000000000003706f70066c756d696164026e6c0000010001 cc768000000100000002000003706f70066c756d696164026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 31168 c9150000000100000000000007706963736572760e6265796f6e642d7265616c697479026e6c0000010001 c9158000000100000002000207706963736572760e6265796f6e642d7265616c697479026e6c0000010001c0140002000100015180000d036e73310674696b74616bc023c01400020001000151800009036e733202696fc023c037000100010001518000045111281dc0500001000100015180000451112202 31169 f4a800000001000000000000126d6574726f706f6c6973666573746976616c026e6c0000ff0001 f4a880000001000000020002126d6574726f706f6c6973666573746976616c026e6c0000ff0001c00c0002000100015180000b026e7305706c616e74c01fc00c00020001000151800006036e7332c036c03300010001000151800004d59f0037c04a00010001000151800004d59f0046 31170 0c5900000001000000000000026e7303786f73026e6c0000010001 0c5980000001000000020001026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe2 31171 2c3f000000010000000000000377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001 2c3f800000010000000200020377777706637662616e6b026e6c0a7377697463686a6f6273026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 31172 1ced000000010000000000000331373202323101310131026e6c0000010001 1ced840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 31173 60fa0000000100000000000005646e732d32056c61646f74026e6c0000010001 60fa8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31174 032f00000001000000000000056b69656e6f026e6c00000f0001 032f80000001000000020002056b69656e6f026e6c00000f0001c00c0002000100015180000d036e733106737072696e74c012c00c00020001000151800006036e7332c02ac02600010001000151800004d973c202c03f00010001000151800004d4ccd6a6 31175 75eb000000010000000000000331373202323101310131026e6c0000010001 75eb840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 31176 7c030000000100000000000005646e732d32056c61646f74026e6c0000010001 7c038000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31177 a7e3000000010000000000000763757073616574026e6c0000ff0001 a7e3840300010000000100000763757073616574026e6c0000ff0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 31178 282600000001000000000000037777770a6772617070656e626f78026e6c0000010001 282680000001000000020000037777770a6772617070656e626f78026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 31179 2e9f00000001000000000000036e73330767617574656e67026e6c0000010001 2e9f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31180 26a400000001000000000000036e73330767617574656e67026e6c0000010001 26a480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31181 810400000001000000000000026e7303616d730874656c6567617465026e6c0000010001 810480000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 31182 6f380000000100000000000006636861726973026e6c00001c0001 6f388000000100000002000006636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 31183 b69b68c25011222a7bcc0000000000000000 b69be8c40000000000000000 31184 dbb200000001000000000000076d616e64656d61026e6c00000f0001 dbb280000001000000020000076d616e64656d61026e6c00000f0001c00c0002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c00c0002000100015180000805726f6b696ec02f 31185 05660000000100000000000003666d6f026e6c00000f0001 05668000000100000003000203666d6f026e6c00000f0001c00c0002000100015180000d036e733106776964657873c010c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c028c02400010001000151800004d4ccc0fcc059000100010001518000043efa0703 31186 0000000060022238f8440000020405b40000 000080010000000000000000 31187 2ee400000001000000000000036e73330767617574656e67026e6c0000010001 2ee480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31188 06ba00000001000000000000036e73330767617574656e67026e6c0000010001 06ba80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31189 2ec000000001000000000000036e73340767617574656e67026e6c0000010001 2ec080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31190 06c900000001000000000000036e73340767617574656e67026e6c0000010001 06c980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31191 b69e234c5010223836070000000000000000 b69ea3430000000000000000 31192 b69e234c50182238a76e0000001cec240000000100000000000007646574616e6574026e6c0000060001 b69ea3430000000000000000 31193 3ed600000001000000000000036e73340767617574656e67026e6c0000010001 3ed680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31194 fb9a000000010000000000000776616e64696a6b026e6c0000010001 fb9a800000010000000200020776616e64696a6b026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 31195 0eda00000001000000000000036e73340767617574656e67026e6c0000010001 0eda80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31196 63df0010000100000000000104646e7331036f3277026e6c00000100010000290800000000000000 63df8000000100000003000304646e7331036f3277026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c01100020001000151800010036e733103686574036e6574026a6500c00c00010001000151800004d5e38dd4c03700010001000151800004d5e38dcd0000291000000000000000 31197 68440010000100000000000104646e7332036f3277026e6c00000100010000290800000000000000 68448000000100000003000304646e7332036f3277026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc01100020001000151800010036e733103686574036e6574026a6500c02900010001000151800004d5e38dd4c00c00010001000151800004d5e38dcd0000291000000000000000 31198 d13100000001000000000000036e733109666972737466696e64026e6c0000010001 d13180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31199 d13200000001000000000000036e733209666972737466696e64026e6c0000010001 d13280000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31200 b69e23a25010223835930000000000000000 b69ea3a30000000000000000 31201 b69e23a25011223835920000000000000000 b69ea3a30000000000000000 31202 b69e23a35010223835910000000000000000 b69ea3a30000000000000000 31203 7e7100000001000000000000037777770877616e6e61626964026e6c0000010001 7e7180000001000000020002037777770877616e6e61626964026e6c0000010001c0100002000100015180000c036e7331053266617374c019c01000020001000151800006036e7332c031c02d0001000100015180000450f7c022c045000100010001518000043e858122 31204 bed1000000010000000000000461616265026e6c00000f0001 bed1800000010000000200000461616265026e6c00000f0001c00c00020001000151800011036e733107726f6b73636f6d036e657400c00c0002000100015180000e036e733207726f6b73636f6dc011 31205 27ef0000000100000000000009652d6c756e61746963026e6c0000010001 27ef8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 31206 992f00000001000000000000037777770f646964697364616e7373747564696f026e6c0000010001 992f80000001000000020000037777770f646964697364616e7373747564696f026e6c0000010001c01000020001000151800019036e733110666c6178652d776562686f7374696e6702626500c01000020001000151800006036e7332c038 31207 d4eb00000001000000000000037777770867616c6c65727973026e6c0000010001 d4eb80000001000000020000037777770867616c6c65727973026e6c0000010001c0100002000100015180000d036e7331067468656e6963c019c01000020001000151800006036e7332c031 31208 96f60000000100000000000003777777137061617264656e73706f72746472656e746865026e6c0000010001 96f68000000100000003000003777777137061617264656e73706f72746472656e746865026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c03bc01000020001000151800006036e7332c03b 31209 0000000060022238dcbc0000020405b40000 000080010000000000000000 31210 c36a0000000100000000000002393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001 c36a8000000100000002000202393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31211 810d00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 810d80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 31212 b69ef086501022384d440000000000000000 31213 b69ef08650182238ae2500000022a14e000000010000000000000d726567627772667279736c616e026e6c0000060001 31214 d13400000001000000000000036e733109666972737466696e64026e6c0000010001 d13480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31215 b69ef0ec501022384cba0000000000000000 31216 b69ef0ec501122384cb90000000000000000 31217 d13500000001000000000000036e733209666972737466696e64026e6c0000010001 d13580000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31218 f141000000010000000000000c6d6f7862612d6d6574726578026e6c00000f0001 f141800000010000000200020c6d6f7862612d6d6574726578026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 31219 09ec000000010000000000000672656c6179330b7669616e6574776f726b73026e6c0000010001 09ec800000010000000200020672656c6179330b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 31220 b69ef0ed501022384cb80000000000000000 31221 b69b68c35010222a7bcb0000000000000000 b69be8c40000000000000000 31222 23f700000001000000000000037777770774776967676572026e6c0000010001 23f780000001000000020000037777770774776967676572026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c02f 31223 b68303575018faf04b560000008df340000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd16403c4e9600030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 b68380010000000000000000 31224 94d100000001000000000000045f736970045f7463700373697007686f746d61696c03636f6d0968616d776f72746879026e6c0000210001 94d180000001000000020001045f736970045f7463700373697007686f746d61696c03636f6d0968616d776f72746879026e6c0000210001c0260002000100015180000a036e733303777873c030c02600020001000151800006036e7334c048c05a00010001000151800004d5ef9a65 31225 b68303575018faf04b560000008df340000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd16403c4e9600030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 b68380010000000000000000 31226 b68303655011fae21a560000000000000000 b68380010000000000000000 31227 71a000000001000000000000036e733104686f6d65026e6c0000010001 71a080000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 31228 98d900000001000000000000086169727370726179026e6c00001c0001 98d980000001000000020002086169727370726179026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 31229 38d000000001000000000000036e733104686f6d65026e6c0000260001 38d080000001000000030003036e733104686f6d65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 31230 000000007002faf041b60000020405b401010402 000080010000000000000000 31231 ce5b00000001000000000000036e733204686f6d65026e6c0000010001 ce5b80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 31232 af3600000001000000000000037777770a636172732d7061727473026e6c0000010001 af3680000001000000020002037777770a636172732d7061727473026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01bc01000020001000151800006036e7332c033c02f000100010001518000045104580ac04f000100010001518000045104601e 31233 2f9a00000001000000000000036e733204686f6d65026e6c0000260001 2f9a80000001000000030003036e733204686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 31234 17cd00000001000000000000036e733304686f6d65026e6c0000010001 17cd80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 31235 72bf00000001000000000000036e733304686f6d65026e6c0000260001 72bf80000001000000030003036e733304686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 31236 b68303665010fae21a550000000000000000 b68380010000000000000000 31237 c2a200000001000000000000036e733404686f6d65026e6c0000010001 c2a280000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 31238 f0af0000000100000000000004646e7331036f3277026e6c0000010001 f0af8000000100000003000204646e7331036f3277026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c01100020001000151800010036e733103686574036e6574026a6500c00c00010001000151800004d5e38dd4c03700010001000151800004d5e38dcd 31239 615100000001000000000000036e733404686f6d65026e6c0000260001 615180000001000000030003036e733404686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 31240 230b0000000100000000000004646e7332036f3277026e6c0000010001 230b8000000100000003000204646e7332036f3277026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc01100020001000151800010036e733103686574036e6574026a6500c02900010001000151800004d5e38dd4c00c00010001000151800004d5e38dcd 31241 b69faca65010faf00b240000000000000000 31242 13340000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 13348000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31243 7c5600000001000000000000046d61696c076c61766f6f696a026e6c0000010001 7c5680000001000000020002046d61696c076c61766f6f696a026e6c0000010001c0110002000100015180000c036e7331057669727475c019c01100020001000151800006036e7332c031c02d00010001000151800004d9726102c04500010001000151800004d58141c4 31244 351f00000001000000000000037777770c616d6174657572666f746f73026e6c0000010001 351f80000001000000020002037777770c616d6174657572666f746f73026e6c0000010001c0100002000100015180000c04646e73310470696e73c01dc0100002000100015180000704646e7332c036c03100010001000151800004d9c26101c04900010001000151800004d9c26002 31245 a99000000001000000000000037777770a646f6f726e706c617a61026e6c0000010001 a99080000001000000020000037777770a646f6f726e706c617a61026e6c0000010001c01000020001000151800014036e73310a68672d686f7374696e6703636f6d00c01000020001000151800006036e7332c033 31246 98db00000001000000000000036e733103666a66026e6c0000010001 98db80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31247 98dc00000001000000000000036e733203666a66026e6c0000010001 98dc80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31248 2a1100000001000000000000036e733207726f6b73636f6d026e6c0000010001 2a1180000001000000020000036e733207726f6b73636f6d026e6c0000010001c01000020001000151800011036e733207726f6b73636f6d036e657400c01000020001000151800006036e7333c030 31249 d36400000001000000000000067265696d6572026e6c00000f0001 d36480000001000000020002067265696d6572026e6c00000f0001c00c00020001000151800010036e733109686f73746e65746276c013c00c00020001000151800006036e7332c02bc0270001000100015180000451113264c04300010001000151800004d5c42851 31250 6c060000000100000000000008686f73746e616d650462696e640000100003 6c068000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31251 98ee00000001000000000000036e733103666a66026e6c0000010001 98ee80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31252 756e0000000100000000000008686f73746e616d650462696e640000100003 756e8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31253 eaad00000001000000000000153231322d3132332d3139302d3130322d756e6465660774697363616c69026e6c0000010001 eaad80000001000000030002153231322d3132332d3139302d3130322d756e6465660774697363616c69026e6c0000010001c0220002000100015180000704616e7331c022c0220002000100015180000704616e7332c022c0220002000100015180001404616e73330a74697363616c696e657402626500c03e00010001000151800004c3f14d38c05100010001000151800004c3f13325 31254 697700100001000000000001036e7331096d6173746572646e73026e6c00000100010000290800000000000000 697780000001000000020003036e7331096d6173746572646e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f347c03c000100010001518000043e94a0470000291000000000000000 31255 fe27000000010000000000001262616172737665727a656b6572696e67656e026e6c00000f0001 fe27800000010000000200021262616172737665727a656b6572696e67656e026e6c00000f0001c00c0002000100015180000a036e733103677673c01fc00c00020001000151800006036e7332c037c033000100010001518000045054e1aac04900010001000151800004d4ccc646 31256 1eda00000001000000000000076a6f6d616e6461026e6c0000010001 1eda80000001000000020002076a6f6d616e6461026e6c0000010001c00c0002000100015180000a026e730469636d63c014c00c00020001000151800006036e7332c02bc028000100010001518000043e643805c03e000100010001518000043e643806 31257 98ef00000001000000000000036e733203666a66026e6c0000010001 98ef80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31258 3960000000010000000000000d637265796673696e746572696d026e6c00000f0001 3960800000010000000200000d637265796673696e746572696d026e6c00000f0001c00c00020001000151800016046e7330310b63726579667367726f757003636f6d00c00c00020001000151800007046e733032c033 31259 13340000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 13348000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31260 1ed200000001000000000000036e73310c636f6c742d74656c65636f6d026e6c0000010001 1ed280000001000000020002036e73310c636f6c742d74656c65636f6d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d44ea00dc03f00010001000151800004d44ea00e 31261 5c0d00000001000000000000036e733404686f6d65026e6c0000010001 5c0d80000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 31262 a1bb00000001000000000000036e733104686f6d65026e6c0000010001 a1bb80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 31263 70f300000001000000000000036e733204686f6d65026e6c0000010001 70f380000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 31264 001f00000001000000000000036e733304686f6d65026e6c0000010001 001f80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 31265 13340000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 13348000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31266 3e0b28000001000000010000026e6c0000060001095f6b65726265726f73045f7463700477617166026e6c0000210001000002580016000000640058067365727665720477617166026e6c00 3e0ba8040000000000000000 31267 41820000000100000000000002393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001 41828000000100000002000202393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31268 d91000000001000000000000037777770a7469656e6572666f746f026e6c0000010001 d91080000001000000020000037777770a7469656e6572666f746f026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 31269 5d4900000001000000000000077765626d61696c036e6f610763656e74726963026e6c0000010001 5d4980000001000000020000077765626d61696c036e6f610763656e74726963026e6c0000010001c0180002000100015180000d036e7331036b706e036e657400c01800020001000151800006036e7332c038 31270 0000000070024000b3a50000020405b401010402 000080010000000000000000 31271 c40b0000000100000000000003777777056769746573026e6c0000010001 c40b8000000100000002000203777777056769746573026e6c0000010001c01000020001000151800012036e73310b676c6f62616c7369746573c016c01000020001000151800006036e7332c02ec02a00010001000151800004d4cce37ac04800010001000151800004d94d8b0c 31272 2f7800000001000000000000036e733109756e69736f75726365026e6c0000010001 2f7880000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 31273 b6a1a840501044707d070000000000000000 31274 b6a1a84050184470f4c200000089cc64000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7dfc403ccf7c00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 31275 991e0000000100000000000002393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001 991e8000000100000002000202393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31276 b6a1a84e501144627c7b0000000000000000 31277 0000000070024000ecb50000020405b401010402 000080010000000000000000 31278 3ef200000001000000000000036e73310561686f6c64026e6c0000010001 3ef280000001000000020001036e73310561686f6c64026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000d036e7332036b706e036e657400c02a000100010001518000048d5d2302 31279 a31a00000001000000000000037777770465646168026e6c0000010001 a31a80000001000000020002037777770465646168026e6c0000010001c0100002000100015180000b026e73056e65726f63c015c01000020001000151800006036e7332c02cc02900010001000151800004d434010ac04000010001000151800004d434000a 31280 b6a1a84f501044627c7a0000000000000000 31281 b6a27e2c50104470e02a0000000000000000 b6a2fe240000000000000000 31282 6da428000001000000020000026e6c00000600012432323764633562652d313732322d346134322d393462382d653133366431366364343937065f6d73646373066b6f72707574026e6c00000500ff000000000000c0140005000100000258001206736572766572066b6f72707574026e6c00 6da4a8040000000000000000 31283 241400100001000000000001036e7332096d6173746572646e73026e6c00000100010000290800000000000000 241480000001000000020003036e7332096d6173746572646e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054f347c00c000100010001518000043e94a0470000291000000000000000 31284 b6a27e2c501844708c830000008998c8000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7dfc403ccf7c00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 b6a2fe240000000000000000 31285 9bab00000001000000000000036e733103697870026e6c0000010001 9bab80000001000000020002036e733103697870026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d943e639c036000100010001518000043efa063f 31286 09d8000000010000000000000d776f726c646f6e6f6e6c696e65026e6c00000f0001 09d8840300010000000100000d776f726c646f6e6f6e6c696e65026e6c00000f0001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 31287 5d770000000100000000000003777777086869707065746970026e6c0000010001 5d778000000100000002000003777777086869707065746970026e6c0000010001c01000020001000151800011036e733107657873696c6961036e657400c01000020001000151800006036e7332c031 31288 b47c00000001000000000000036e73330564656d6f6e026e6c0000010001 b47c80000001000000030002036e73330564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c03c00010001000151800004c29fb004 31289 9a3100000001000000000000036e733103666a66026e6c0000010001 9a3180000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31290 9a3200000001000000000000036e733203666a66026e6c0000010001 9a3280000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31291 9a3300000001000000000000037777770c747261666669636368616d70026e6c0000010001 9a3380000001000000020000037777770c747261666669636368616d70026e6c0000010001c0100002000100015180000a036e733103666a66c01dc01000020001000151800006036e7332c035 31292 000000007002400050a700000204055001010402 000080010000000000000000 31293 9a3600000001000000000000037777770c747261666669636368616d70026e6c0000010001 9a3680000001000000020000037777770c747261666669636368616d70026e6c0000010001c0100002000100015180000a036e733103666a66c01dc01000020001000151800006036e7332c035 31294 ebbf0000000100000000000004616e73310774697363616c69026e6c0000010001 ebbf8000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 31295 0a3c0000000100000000000004616e73320774697363616c69026e6c0000010001 0a3c8000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 31296 813b00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 813b80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 31297 b6a27e3a50114462df9e0000000000000000 b6a2fe340000000000000000 31298 0000000070024000b8ba0000020405b401010402 000080010000000000000000 31299 089f00000001000000000000037777770770646163686f70026e6c0000010001 089f84030001000000010000037777770770646163686f70026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 31300 0000000060022238473c0000020405b40000 000080010000000000000000 31301 b6a2fbb450104510c58f0000000000000000 31302 b6a27e3b50104462df9d0000000000000000 b6a2fe340000000000000000 31303 b6a2fbb4501845108d3c0000008b6710000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afc3b403c4dbb00030000002c4e544c4d535350000100000097b208e0060006002600000006000600200000005345525645524b4f525055540000 31304 b6a4048e50102238a3b60000000000000000 b6a480010000000000000000 31305 b6a4048e5018223847ff000000213084000000010000000000000c636f7379636f6d7061676e79026e6c0000060001 b6a480010000000000000000 31306 548a000000010000000000000469632d73026e6c0000ff0001 548a800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 31307 e98600000001000000000000036e733103676d74026e6c0000010001 e98680000001000000030003036e733103676d74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d44eb80dc036000100010001518000043ea6a022c04800010001000151800004d554c485 31308 c7a700000001000000000000036e733203676d74026e6c0000010001 c7a780000001000000030003036e733203676d74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02800010001000151800004d44eb80dc00c000100010001518000043ea6a022c04800010001000151800004d554c485 31309 600600000001000000000000036e733303676d74026e6c0000010001 600680000001000000030003036e733303676d74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02800010001000151800004d44eb80dc03a000100010001518000043ea6a022c00c00010001000151800004d554c485 31310 b6a3836950104470a6f10000000000000000 31311 1a1d00000001000000000000037777770a73746164736b6e6f616c026e6c0000010001 1a1d80000001000000020000037777770a73746164736b6e6f616c026e6c0000010001c0100002000100015180001d036e733213656666696369656e74776562686f7374696e6703636f6d00c01000020001000151800006036e7333c033 31312 88b5000000010000000000000a736f6e6572616d61696c026e6c00001c0001 88b5800000010000000200000a736f6e6572616d61696c026e6c00001c0001c00c00020001000151800011036e73310774647364617461036e657400c00c00020001000151800006036e7332c02f 31313 b6a2fbc250114502c5010000000000000000 31314 b6a38369501844702ad200000089c140000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7dfc403ccf7c00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 31315 b6a404f350102238a32e0000000000000000 b6a480010000000000000000 31316 b6a404f350112238a32d0000000000000000 b6a480010000000000000000 31317 c43800000001000000000000066d61696c303106626f6f6b6974026e6c0000010001 c43880000001000000030003066d61696c303106626f6f6b6974026e6c0000010001c0130002000100015180000a036e733103676d74c01ac01300020001000151800006036e7332c032c01300020001000151800006036e7333c032c02e00010001000151800004d44eb80dc044000100010001518000043ea6a022c05600010001000151800004d554c485 31318 937f00000001000000000000026e7308767575727765726b026e6c0000010001 937f80000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 31319 3f7100000001000000000000036e733208767575727765726b026e6c0000010001 3f7180000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 31320 b6a2fbc350104502c5000000000000000000 31321 b6a404f450102238a32c0000000000000000 b6a480010000000000000000 31322 cb480000000100000000000002393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001 cb488000000100000002000202393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31323 000000007002400097e000000204055001010402 000080010000000000000000 31324 b6a3837750114462a6650000000000000000 31325 016f0000000100000000000003776d7707757477656e7465026e6c0000ff0001 016f8000000100000003000303776d7707757477656e7465026e6c0000ff0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c0001000100015180000482590102c03e0001000100015180000482590103c05000010001000151800004c0571113 31326 b6a4a43f50104510643c0000000000000000 31327 4374000000010000000000000377777704696c7365026e6c0000010001 4374800000010000000300030377777704696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c029000100010001518000043e45a282c03b000100010001518000043e45a283c04d000100010001518000043e45a284 31328 b6a4a43f50184510f6e30000008b9d16000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afc3b403c4dbb00030000002c4e544c4d535350000100000097b208e0060006002600000006000600200000005345525645524b4f525055540000 31329 b6a3837850104462a6640000000000000000 31330 fd9800100001000000000001024e530550424e4543024e4c00000100010000290800000080000000 fd9880000001000000020002024e530550424e4543024e4c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c14e8f420000291000000000000000 31331 b6a4a44d5011450263ae0000000000000000 31332 85de00000001000000000000037777770b73756c65796d616e697965026e6c0000010001 85de80000001000000020002037777770b73756c65796d616e697965026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 31333 b6a4a44e5010450263ad0000000000000000 31334 3f4300000001000000000000024e530550424e4543024e4c0000010001 3f4380000001000000020001024e530550424e4543024e4c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c14e8f42 31335 0000000070024000b33700000204055001010402 000080010000000000000000 31336 158f0000000100000000000002393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001 158f8000000100000002000202393203323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31337 73c30010000100000000000103626c3402626c06787334616c6c026e6c00000100010000290800000080000000 73c38000000100000003000303626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 31338 b6a5493c50104510da950000000000000000 b6a5c9340000000000000000 31339 b6a5493c5018451037370000008bd31c000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afc3b403c4dbb00030000002c4e544c4d535350000100000097b208e0060006002600000006000600200000005345525645524b4f525055540000 b6a5c9340000000000000000 31340 bf080000000100000000000003777777046d617070026e6c0000010001 bf088000000100000003000003777777046d617070026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c02ec01000020001000151800007046e733033c02e 31341 9a6d00000001000000000000036e733103666a66026e6c0000010001 9a6d80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31342 9a6e00000001000000000000036e733203666a66026e6c0000010001 9a6e80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31343 89c500000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 89c580000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 31344 b6a5494a50114502da070000000000000000 b6a5c9440000000000000000 31345 33820000000100000000000006736d7470303103777873026e6c0000010001 33828000000100000003000306736d7470303103777873026e6c0000010001c01300020001000151800007046e733038c013c01300020001000151800007046e733039c013c01300020001000151800006036e7334c013c02b00010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 31346 54810000000100000000000006737175697265026e6c00000f0001 54818000000100000002000206737175697265026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 31347 b6a5494b50104502da060000000000000000 b6a5c9440000000000000000 31348 bb7800000001000000000000046d61696c0b686f726563617a616b656e026e6c0000010001 bb7880000001000000020000046d61696c0b686f726563617a616b656e026e6c0000010001c01100020001000151800010036e7331066d6f76696174036e657400c01100020001000151800006036e7332c035 31349 aaeb000000010000000000000575776e6574026e6c00000f0001 aaeb800000010000000200020575776e6574026e6c00000f0001c00c00020001000151800011026e730b6973642d686f6c6c616e64c012c00c00020001000151800006036e7332c029c02600010001000151800004d5e38d0ac04300010001000151800004d5e38205 31350 545d0000000100000000000004686f6d65066863636e6574026e6c0000010001 545d8000000100000002000004686f6d65066863636e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c033 31351 f4fd000000010000000000000377777709676179766964656f73026e6c0000010001 f4fd800000010000000200000377777709676179766964656f73026e6c0000010001c01000020001000151800012036e736c0861636f6d7761726503636f6d00c0100002000100015180000f036e737205612d636f6d036e657400 31352 14f900000001000000000000036e7331096d65646961626f6e65026e6c0000010001 14f980000001000000020002036e7331096d65646961626f6e65026e6c0000010001c0100002000100015180000b087369656d656e7332c010c01000020001000151800002c00cc02e00010001000151800004c355b614c00c00010001000151800004c355b615 31353 8c08000000010000000000000e736d616c6c696e6765726c616e64026e6c00000f0001 8c08800000010000000200020e736d616c6c696e6765726c616e64026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c01bc00c00020001000151800006036e7332c033c02f00010001000151800004d43d0f08c04d00010001000151800004d43d19e2 31354 2be1000000010000000000000b76616e64656e6e6f6f7274026e6c0000010001 2be1800000010000000200020b76616e64656e6e6f6f7274026e6c0000010001c00c0002000100015180000a036e733103686978c018c00c00020001000151800006036e7332c030c02c00010001000151800004d5a0da0ac0420001000100015180000451112ec3 31355 1cdb00000001000000000000046d61696c0761637473697465026e6c00000f0001 1cdb80000001000000020000046d61696c0761637473697465026e6c00000f0001c0110002000100015180000d036e7333036b706e036e657400c01100020001000151800006036e7334c031 31356 44f2000000010000000000000469632d73026e6c0000ff0001 44f2800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 31357 e3ec00000001000000000000037777770a6175746f2d6172696e6b026e6c0000010001 e3ec80000001000000020002037777770a6175746f2d6172696e6b026e6c0000010001c01000020001000151800013036e73310c7265616c6974736572766572c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5c4052bc04e00010001000151800004d5c4052c 31358 67c900000001000000000000067a7376737272026e6c0000010001 67c984030001000000010000067a7376737272026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 31359 5a170000000100000000000003777777076d2d6e61696c73026e6c0000010001 5a178000000100000002000003777777076d2d6e61696c73026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c032 31360 75f8000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c0000010001 75f8800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c0000010001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 31361 b1d0000000010000000000000c6475796e2d656e2d7268796e026e6c0000ff0001 b1d0800000010000000200020c6475796e2d656e2d7268796e026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 31362 6b110000000100000000000003777777096b6f696b656c646572026e6c0000010001 6b118000000100000002000003777777096b6f696b656c646572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01ac0100002000100015180000704686e7331c033 31363 2fc80000000100000000000003626c3102626c06787334616c6c026e6c0000010001 2fc88000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 31364 3a60000000010000000000000977656273657276657203495044026e6c0000060001 3a60800000010000000200000977656273657276657203495044026e6c0000060001c0160002000100015180000c036e723105692d702d64c01ac01600020001000151800006036e7232c032 31365 f59c00000001000000000000037777770f6a6f6e676572656e63616d70696e67026e6c0000010001 f59c80000001000000020002037777770f6a6f6e676572656e63616d70696e67026e6c0000010001c0100002000100015180000f026e7309656174736572766572c020c01000020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 31366 ba430000000100000000000003706272026e6c00000f0001 ba438000000100000002000003706272026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c027 31367 168800000001000000000000096b656e6e69736e6574026e6c00001c0001 168880000001000000020002096b656e6e69736e6574026e6c00001c0001c00c00020001000151800006036e7339c00cc00c0002000100015180000e036e733207737572666e6574c016c02a00010001000151800004c0576a61c03c00010001000151800004c0572402 31368 2eb20000000100000000000003777777056a622d6974026e6c0000010001 2eb28000000100000002000203777777056a622d6974026e6c0000010001c0100002000100015180000a04646e7330026975c016c0100002000100015180000704646e7331c02fc02a00010001000151800004d91a7002c04000010001000151800004d91a7103 31369 b7c300000001000000000000036e733503777873026e6c0000010001 b7c380000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 31370 6fd900000001000000000000036e733303777873026e6c0000010001 6fd980000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 31371 704b000000010000000000000677657474656e086f76657268656964026e6c0000010001 704b800000010000000300030677657474656e086f76657268656964026e6c0000010001c0130002000100015180000e036e73310761737034616c6cc01cc01300020001000151800006036e7332c034c01300020001000151800006036e7333c034c03000010001000151800004c1adf9c3c04a000100010001518000043e70ec3cc05c00010001000151800004c1ac0bae 31372 6cf4000000010000000000000466646467026e6c00001c0001 6cf4800000010000000200020466646467026e6c00001c0001c00c0002000100015180000e026e73086d656761706c6578c011c00c00020001000151800006036e7331c028c02500010001000151800004504f6101c03f00010001000151800004504f6102 31373 6b950000000100000000000003626c3402626c06787334616c6c026e6c0000010001 6b958000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 31374 f4160000000100000000000005697465636b026e6c0000ff0001 f4168000000100000002000205697465636b026e6c0000ff0001c00c0002000100015180000f036e73310863616d627269756dc012c00c00020001000151800006036e7332c02ac02600010001000151800004d9131082c04100010001000151800004d5efb202 31375 e85e000000010000000000000a70657465726265657473026e6c0000ff0001 e85e800000010000000200000a70657465726265657473026e6c0000ff0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c031 31376 457500000001000000000000086869707065746970026e6c0000010001 457580000001000000020000086869707065746970026e6c0000010001c00c00020001000151800011036e733107657873696c6961036e657400c00c00020001000151800006036e7332c02d 31377 77ae0000000100000000000006676f6f676c65026e6c0000010001 77ae8000000100000003000006676f6f676c65026e6c0000010001c00c00020001000151800010036e733106676f6f676c6503636f6d00c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02b 31378 6d5a00000001000000000000036e7331046e656e73026e6c0000010001 6d5a80000001000000020000036e7331046e656e73026e6c0000010001c01000020001000151800014036e73310d646e73636f6d656f6e6c696e65c015c01000020001000151800006036e7333c02d 31379 4ab100000001000000000000036e7332046e656e73026e6c0000010001 4ab180000001000000020000036e7332046e656e73026e6c0000010001c01000020001000151800014036e73310d646e73636f6d656f6e6c696e65c015c01000020001000151800006036e7333c02d 31380 d446000000010000000000000377777709776f6f6e6b72616e74026e6c0000010001 d446800000010000000200000377777709776f6f6e6b72616e74026e6c0000010001c01000020001000151800011036e733107636f6e78696f6e036e657400c01000020001000151800006036e7332c032 31381 000828000001000200000000026e6c0000060001086c6170746f7037610c6f62732d636c757374657273026e6c00000500fe000000000000c01400010001000000000004c0a80030 0008a8040000000000000000 31382 6dc700000001000000000000037777770c726f6265636f646972656374026e6c0000010001 6dc780000001000000020001037777770c726f6265636f646972656374026e6c0000010001c0100002000100015180000d036e733106726f6265636fc01dc0100002000100015180000b026e73026e6c036e657400c03100010001000151800004913d1a01 31383 a2490000000100000000000006726961686f6d06746d66776562026e6c0000010001 a2498000000100000002000006726961686f6d06746d66776562026e6c0000010001c01300020001000151800011056c656d6f6e0571696e6970036e657400c01300020001000151800007046c696d65c034 31384 4fc000000001000000000000036e7331036e7873026e6c0000010001 4fc080000001000000020002036e7331036e7873026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c015c03600010001000151800004d973c102 31385 a7e000000001000000000000036e7332036e7873026e6c0000010001 a7e080000001000000020002036e7332036e7873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d973c015c00c00010001000151800004d973c102 31386 00000000700240004ad60000020405b401010402 000080010000000000000000 31387 870f000000010000000000000377777710696a736c616e6473657061617264656e026e6c0000010001 870f800000010000000200020377777710696a736c616e6473657061617264656e026e6c0000010001c01000020001000151800012036e73310b6661737473657276657234c021c01000020001000151800006036e7332c039c0350001000100015180000442a4f39ac0530001000100015180000442a4f3a3 31388 b6a82dab501044708ec60000000000000000 b6a8ada40000000000000000 31389 b6a82dab50184470944f0000008b9351000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afa97403c4c1700030000002e4e544c4d535350000100000097b200c0060006002800000008000800200000004c4150544f5037415a50444550330000 b6a8ada40000000000000000 31390 b6a82db9501144628e380000000000000000 b6a8adb40000000000000000 31391 ae64000000010000000000001270656e73696f656e72616164676576657273026e6c00000f0001 ae64800000010000000200021270656e73696f656e72616164676576657273026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c01fc00c00020001000151800006036e7332c037c03300010001000151800004d43d0f08c05100010001000151800004d43d19e2 31392 456a000000010000000000000572756e61740870726f7365727665026e6c0000010001 456a800000010000000300020572756e61740870726f7365727665026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800012036e73320970726f2d736572766502626500c01200020001000151800006036e7333c012c02f000100010001518000045054e055c05f00010001000151800004d4ccc655 31393 6eef0000000100000000000003777777096d6573746c6f6b6574026e6c0000010001 6eef8000000100000002000203777777096d6573746c6f6b6574026e6c0000010001c0100002000100015180000a036e733103777572c01ac01000020001000151800006036e7332c032c02e0001000100015180000489e0f88dc0440001000100015180000489e0f88e 31394 0000000070024000adc20000020405b401010402 000080010000000000000000 31395 b710000000010000000000000377777709706172616469676974026e6c00000f0001 b710800000010000000200000377777709706172616469676974026e6c00000f0001c01000020001000151800010026e73076e65737363697303636f6d00c01000020001000151800006036e7332c031 31396 b6a82dba501044628e370000000000000000 b6a8adb40000000000000000 31397 b6a8c206501044705d570000000000000000 31398 b6a8c206501844702ecc0000008bc965000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afa97403c4c1700030000002e4e544c4d535350000100000097b200c0060006002800000008000800200000004c4150544f5037415a50444550330000 31399 b6a8c214501144625cc90000000000000000 31400 0000000070024000c87d0000020405b401010402 000080010000000000000000 31401 870f00000001000000000000047777773207646f6c66696a6e026e6c0000010001 870f80000001000000030003047777773207646f6c66696a6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02d000100010001518000043e45a282c03f000100010001518000043e45a283c051000100010001518000043e45a284 31402 a8fe00000001000000000001036e733204686f6d65026e6c00000100010000291000000000000000 a8fe80000001000000030004036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 31403 b19d00000001000000000001036e733304686f6d65026e6c00000100010000291000000000000000 b19d80000001000000030004036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 31404 188500000001000000000001036e733104686f6d65026e6c00000100010000291000000000000000 188580000001000000030004036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 31405 86a100000001000000000001036e733404686f6d65026e6c00000100010000291000000000000000 86a180000001000000030004036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 31406 b6a8c215501044625cc80000000000000000 31407 0a4500000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 0a4580000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 31408 8d4900000001000000000000026e730f646f6d61696e2d7265676973747279026e6c0000260001 8d4980000001000000030002026e730f646f6d61696e2d7265676973747279026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 31409 f92400000001000000000000037777770b6c6f6f6b666f726c6f7665026e6c0000010001 f92480000001000000020002037777770b6c6f6f6b666f726c6f7665026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 31410 b6a93e2050104470fbf70000000000000000 b6a9be240000000000000000 31411 2eee00000001000000000000036e73340767617574656e67026e6c0000010001 2eee80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31412 3ef400000001000000000000036e73340767617574656e67026e6c0000010001 3ef480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31413 b6a93e205018447049070000008b4bcb000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afa98403c4c1800030000002e4e544c4d535350000100000097b200c0060006002800000008000800200000004c4150544f5037415a50444550330000 b6a9be240000000000000000 31414 1efb00000001000000000000036e73340767617574656e67026e6c0000010001 1efb80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31415 dbb100000001000000000000076b6e697073656c026e6c0000010001 dbb180000001000000020002076b6e697073656c026e6c0000010001c00c0002000100015180000d0a696e6574736572762d31c00cc00c0002000100015180000e036e7332076e65746c616e64c014c02800010001000151800004d9aa2b74c04100010001000151800004d9aa2c06 31416 b31800000001000000000000037777770e636172746f6f6e6e6574776f726b026e6c0000010001 b31880000001000000030000037777770e636172746f6f6e6e6574776f726b026e6c0000010001c01000020001000151800015087477646e732d3031026e7303616f6c03636f6d00c0100002000100015180000b087477646e732d3032c03cc0100002000100015180000b087477646e732d3033c03c 31417 b6a93e2e50114462fb690000000000000000 b6a9be240000000000000000 31418 a8fe00000001000000000000036e733204686f6d65026e6c0000010001 a8fe80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 31419 b19d00000001000000000000036e733304686f6d65026e6c0000010001 b19d80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 31420 188500000001000000000000036e733104686f6d65026e6c0000010001 188580000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 31421 622a00000001000000000000036e733404686f6d65026e6c0000010001 622a80000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 31422 119100000001000000000000036e733104686f6d65026e6c0000010001 119180000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 31423 c5b000000001000000000000036e733204686f6d65026e6c0000010001 c5b080000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 31424 858600000001000000000000036e733304686f6d65026e6c0000010001 858680000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 31425 b6a93e2f50104462fb680000000000000000 b6a9be240000000000000000 31426 0b6600000001000000000000037777770f646964697364616e7373747564696f026e6c0000010001 0b6680000001000000020000037777770f646964697364616e7373747564696f026e6c0000010001c01000020001000151800019036e733110666c6178652d776562686f7374696e6702626500c01000020001000151800006036e7332c038 31427 126700000001000000000000067265636f3237026e6c00000f0001 126780000001000000020002067265636f3237026e6c00000f0001c00c0002000100015180000d026e730777697a7a626974c013c00c00020001000151800006036e7332c02ac027000100010001518000043e3a360bc040000100010001518000043e3a360c 31428 21cb00000001000000000000046d61696c05666574696d026e6c00001c0001 21cb80000001000000020000046d61696c05666574696d026e6c00001c0001c0110002000100015180000e036e733107656e657274656cc017c01100020001000151800006036e7332c02f 31429 6c310000000100000000000005646e732d31056c61646f74026e6c0000010001 6c318000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31430 8e0800000001000000000000037777770b616466697265776f726b73026e6c0000010001 8e0880000001000000020002037777770b616466697265776f726b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 31431 182a0000000100000000000005646e732d32056c61646f74026e6c0000010001 182a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31432 255f00000001000000000000086e79656e726f6465026e6c0000010001 255f80000001000000030003086e79656e726f6465026e6c0000010001c00c000200010001518000070161026e73c00cc00c000200010001518000040163c02bc00c000200010001518000040164c02bc029000100010001518000043e3a04a3c03c00010001000151800004c26dc2aec04c00010001000151800004c0577106 31433 73410000000100000000000003777777147a696a6c737472612d636f6e74726f6c6c696e67026e6c0000010001 73418000000100000002000003777777147a696a6c737472612d636f6e74726f6c6c696e67026e6c0000010001c01000020001000151800011046e7330310676696c6c6168036e657400c01000020001000151800007046e733032c03e 31434 dc640000000100000000000003626d67026e6c00000f0001 dc648000000100000003000303626d67026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02400010001000151800004c14e9e14c03600010001000151800004c14e9e22c04800010001000151800004d4ce7a43 31435 b66a00100001000000000001026e73076b6e6f77617265026e6c00000100010000290800000000000000 b66a80000001000000020003026e73076b6e6f77617265026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004c3402003c03900010001000151800004c340202b0000291000000000000000 31436 edb500100001000000000001036e7332076b6e6f77617265026e6c00000100010000290800000000000000 edb580000001000000020003036e7332076b6e6f77617265026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004c3402003c00c00010001000151800004c340202b0000291000000000000000 31437 45650000000100000000000007626575727a656e036a656d026e6c0000010001 45658000000100000002000207626575727a656e036a656d026e6c0000010001c0140002000100015180000e036e73310765766964656e74c018c01400020001000151800006036e7332c030c02c00010001000151800004c36d19c4c04600010001000151800004c36d1942 31438 741400000001000000000000036e73310765766964656e74026e6c0000010001 741480000001000000020002036e73310765766964656e74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c36d19c4c03a00010001000151800004c36d1942 31439 78ed00000001000000000000036e73320765766964656e74026e6c0000010001 78ed80000001000000020002036e73320765766964656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c36d19c4c00c00010001000151800004c36d1942 31440 bf3700000001000000000000026e73076b6e6f77617265026e6c0000010001 bf3780000001000000020002026e73076b6e6f77617265026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004c3402003c03900010001000151800004c340202b 31441 4db100000001000000000000036e7332076b6e6f77617265026e6c0000010001 4db180000001000000020002036e7332076b6e6f77617265026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004c3402003c00c00010001000151800004c340202b 31442 3cf70000000100000000000007626575727a656e036a656d026e6c0000010001 3cf78000000100000002000207626575727a656e036a656d026e6c0000010001c0140002000100015180000e036e73310765766964656e74c018c01400020001000151800006036e7332c030c02c00010001000151800004c36d19c4c04600010001000151800004c36d1942 31443 bf670000000100000000000006776468303131066e7434616c6c026e6c0000010001 bf678000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 31444 fdfb00000001000000000000026e73076d6964686f6c64026e6c0000010001 fdfb80000001000000020002026e73076d6964686f6c64026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e7307636f6f6c636f6dc017c00c00010001000151800004c1ad3503c03900010001000151800004c1ad3506 31445 49d900000001000000000000026e73076d6964686f6c64026e6c00001c0001 49d980000001000000020002026e73076d6964686f6c64026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000d026e7307636f6f6c636f6dc017c00c00010001000151800004c1ad3503c03900010001000151800004c1ad3506 31446 9b310000000100000000000003706272026e6c00000f0001 9b318000000100000002000003706272026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c027 31447 a81100000001000000000000106e65666b656e732d6e686f6c6c616e64026e6c0000010001 a81180000001000000030003106e65666b656e732d6e686f6c6c616e64026e6c0000010001c00c0002000100015180000f036e7331086e6f766178657373c01dc00c00020001000151800006036e7332c035c00c00020001000151800006036e7333c035c03100010001000151800004d5c98015c04c00010001000151800004d5c9bf12c05e00010001000151800004d5ef9c26 31448 48ab0000000100000000000008686f73746e616d650462696e640000100003 48ab8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31449 b69cc936501022384c2b0000000000000000 31450 6cac00100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 6cac80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 31451 283a00000001000000000000037777770c6e6f686f70656e6f66656172026e6c0000010001 283a80000001000000020002037777770c6e6f686f70656e6f66656172026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 31452 04d800100001000000000001036e733508646f6d696e696f6e026e6c00000100010000290800000000000000 04d880000001000000020003036e733508646f6d696e696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000045054e3bfc03f000100010001518000045054e3c00000291000000000000000 31453 509b000000010000000000000c776174657273746f662d7631047072697608717569636b6e6574026e6c0000010001 509b800000010000000300020c776174657273746f662d7631047072697608717569636b6e6574026e6c0000010001c01e00020001000151800011036e73310a6d756c74696b6162656cc027c01e00020001000151800006036e7332c03fc01e00020001000151800014036e73300a6d756c74696b6162656c036e657400c03b0001000100015180000450f2e002c0580001000100015180000450f2e006 31454 026c00100001000000000001036e733508646f6d696e696f6e026e6c00002600010000290800000000000000 026c80000001000000020003036e733508646f6d696e696f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000045054e3bfc03f000100010001518000045054e3c00000291000000000000000 31455 9564000000010000000000000377777703726e63026e6c0000010001 9564800000010000000200020377777703726e63026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c014c0100002000100015180000805726f62696ec02fc02800010001000151800004913a1e04c04400010001000151800004913a1a34 31456 40f400100001000000000001036e733608646f6d696e696f6e026e6c00000100010000290800000000000000 40f480000001000000020003036e733608646f6d696e696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000045054e3bfc03f000100010001518000045054e3c00000291000000000000000 31457 207a00100001000000000001036e733608646f6d696e696f6e026e6c00002600010000290800000000000000 207a80000001000000020003036e733608646f6d696e696f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000045054e3bfc03f000100010001518000045054e3c00000291000000000000000 31458 1b4400100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 1b4480000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 31459 fe750000000100000000000008686f73746e616d650462696e640000100003 fe758000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31460 267b0000000100000000000005686167726f026e6c00000f0001 267b8000000100000002000005686167726f026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 31461 3a4c0000000100000000000006636861726973026e6c00000f0001 3a4c8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 31462 98c1000000010000000000000377777708616c666f6e737573026e6c0000010001 98c1800000010000000200020377777708616c666f6e737573026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c019c01000020001000151800006036e7332c031c02d00010001000151800004d4b20403c04600010001000151800004d5881e45 31463 7ab5000000010000000000000d6f627377686565726d6f6c656e06776f6c776562026e6c0000010001 7ab5800000010000000200000d6f627377686565726d6f6c656e06776f6c776562026e6c0000010001c01a0002000100015180000f04686e73300774697363616c69c021c01a0002000100015180000704686e7331c03a 31464 e50100000001000000000000026e6c0000060001 e50184000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 31465 aa09000000010000000000000377777709696e666f746865656b026e6c0000010001 aa09800000010000000200020377777709696e666f746865656b026e6c0000010001c01000020001000151800009036e7331026973c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5852102c04300010001000151800004d5c41503 31466 6f940000000100000000000006746b74657374026e6c0000060001 6f948403000100000001000006746b74657374026e6c0000060001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 31467 6c7c00000001000000000000046d61696c116575726f62756c6b6c6f67697374696373026e6c0000010001 6c7c80000001000000020002046d61696c116575726f62756c6b6c6f67697374696373026e6c0000010001c0110002000100015180000f036e7331087369746577697365c023c01100020001000151800006036e7332c03bc03700010001000151800004d58529cdc05200010001000151800004d58529d2 31468 51380000000100000000000008686f73746e616d650462696e640000100003 51388000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31469 b63c0000000100000000000003767a72026e6c00000f0001 b63c8000000100000002000203767a72026e6c00000f0001c00c0002000100015180000f036e733108696c696d62757267c010c00c00020001000151800006036e7332c028c02400010001000151800004c2b26281c03f00010001000151800004c2b262f7 31470 7215000000010000000000000377777706657374617461026e6c0000010001 7215800000010000000200020377777706657374617461026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 31471 1944000000010000000000000764616e74756d61026e6c00000f0001 1944800000010000000200020764616e74756d61026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c014c00c00020001000151800006036e7332c02cc02800010001000151800004c2451012c04000010001000151800004c2451212 31472 a2b6000000010000000000000462757267026e6c0000010001 a2b6800000010000000200020462757267026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 31473 927c28000001000000010000026e6c000006000106746b74657374026e6c0000010001000002580004c0a800ce 927ca8040000000000000000 31474 2e3400000001000000000000067768646e7332056577656b61026e6c0000010001 2e3480000001000000020002067768646e7332056577656b61026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7333c013c02d0001000100015180000451ab6504c03f0001000100015180000451ab660e 31475 6f2900000001000000000000046e73303803777873026e6c0000010001 6f2980000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 31476 0b6a00000001000000000000066865746e6574026e6c00000f0001 0b6a80000001000000030003066865746e6574026e6c00000f0001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 31477 c75d00000001000000000000037777770e636172746f6f6e6e6574776f726b026e6c0000010001 c75d80000001000000030000037777770e636172746f6f6e6e6574776f726b026e6c0000010001c01000020001000151800015087477646e732d3031026e7303616f6c03636f6d00c0100002000100015180000b087477646e732d3032c03cc0100002000100015180000b087477646e732d3033c03c 31478 72090000000100000000000002393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001 72098000000100000002000202393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31479 c98500000001000000000000037777770a6175746f667265616b7a026e6c0000010001 c98580000001000000020000037777770a6175746f667265616b7a026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c032 31480 000000007002faf0235a0000020405b401010402 000080010000000000000000 31481 818500000001000000000000026e7303616d730874656c6567617465026e6c0000010001 818580000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 31482 b6ab2c4f5010faf06d130000000000000000 b6abac440000000000000000 31483 b6ab2c4f5018faf057b60000008ece11000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af4fb403c467b00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000 b6abac440000000000000000 31484 0aa30000000100000000000003726474026e6c00000f0001 0aa38000000100000002000103726474026e6c00000f0001c00c0002000100015180000a036e733303777873c010c00c00020001000151800006036e7334c028c03a00010001000151800004d5ef9a65 31485 b6ab2c5d5011fae26c820000000000000000 b6abac540000000000000000 31486 b64800000001000000000000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f73697465730c6a666b626f73737472616174026e6c0000060001 b64884030001000000010000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f73697465730c6a666b626f73737472616174026e6c0000060001c04500060001000038400036026e730f646f6d61696e2d7265676973747279c0450a686f73746d6173746572c05c0bf1e540000070800000384000278d0000003840 31487 000000007002faf0d00e0000020405b401010402 000080010000000000000000 31488 819400000001000000000000026e7303616d730874656c6567617465026e6c0000010001 819480000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 31489 b6ab2c5e5010fae26c810000000000000000 b6abac540000000000000000 31490 391d000000010000000000000377777706666f72746973026e6c0000010001 391d800000010000000200000377777706666f72746973026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c031 31491 b6aba8ae5010faf09d680000000000000000 31492 b6aba8ae5018faf09fa00000008eb77d000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af4fb403c467b00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000 31493 170e00000001000000000000036e73330767617574656e67026e6c0000010001 170e80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31494 280c000000010000000000000d74656c65636f6d616476696573026e6c00000f0001 280c800000010000000200000d74656c65636f6d616476696573026e6c00000f0001c00c00020001000151800014046e733031096772616669782d697303636f6d00c00c00020001000151800007046e733033c033 31495 ad2f000000010000000000000773616e7175696e026e6c0000010001 ad2f800000010000000300000773616e7175696e026e6c0000010001c00c00020001000151800013036e7331096a61636f62736e657403636f6d00c00c00020001000151800006036e7332c02cc00c00020001000151800012046e73303107696e746f756368036e657400 31496 ed0e00000001000000000000046d61696c146272696467652d656e7465727461696e6d656e74026e6c0000010001 ed0e80000001000000020000046d61696c146272696467652d656e7465727461696e6d656e74026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c040 31497 39ee00000001000000000000066f6265726f6e046261616e026e6c0000010001 39ee80000001000000020001066f6265726f6e046261616e026e6c0000010001c01300020001000151800006036e7330c013c01300020001000151800013086669726577616c6c046261616e03636f6d00c02c00010001000151800004c2955086 31498 0c1a00000001000000000000066f6265726f6e046261616e026e6c0000010001 0c1a80000001000000020001066f6265726f6e046261616e026e6c0000010001c01300020001000151800006036e7330c013c01300020001000151800013086669726577616c6c046261616e03636f6d00c02c00010001000151800004c2955086 31499 8f4d0000000100000000000003777777086f6761616e626f64026e6c0000010001 8f4d8000000100000003000203777777086f6761616e626f64026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c019c01000020001000151800006036e7332c031c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c02d00010001000151800004cf2cd7adc04e0001000100015180000452c04365 31500 7e5600000001000000000000066f6265726f6e046261616e026e6c0000010001 7e5680000001000000020001066f6265726f6e046261616e026e6c0000010001c01300020001000151800006036e7330c013c01300020001000151800013086669726577616c6c046261616e03636f6d00c02c00010001000151800004c2955086 31501 b6aba8bc5011fae29cd70000000000000000 31502 d89600000001000000000000037777770a6d69737362696b696e69026e6c0000010001 d89680000001000000020001037777770a6d69737362696b696e69026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01bc01000020001000151800006036e7334c033c02f00010001000151800004d5c401c0 31503 21ad00000001000000000000037777770a6d69737362696b696e69026e6c0000010001 21ad80000001000000020001037777770a6d69737362696b696e69026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01bc01000020001000151800006036e7334c033c02f00010001000151800004d5c401c0 31504 000000007002faf0ca480000020405b401010402 000080010000000000000000 31505 47b400000001000000000000036e733508646f6d696e696f6e026e6c0000010001 47b480000001000000020002036e733508646f6d696e696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000045054e3bfc03f000100010001518000045054e3c0 31506 a3da00000001000000000000036e733608646f6d696e696f6e026e6c0000010001 a3da80000001000000020002036e733608646f6d696e696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000045054e3bfc03f000100010001518000045054e3c0 31507 d1ed00000001000000000000036e733608646f6d696e696f6e026e6c0000260001 d1ed80000001000000020002036e733608646f6d696e696f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000045054e3bfc03f000100010001518000045054e3c0 31508 ed130000000100000000000009686f636f7061727473026e6c00000f0001 ed138000000100000002000209686f636f7061727473026e6c00000f0001c00c00020001000151800012036e73310b676c6f62616c7369746573c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d4cce37ac04800010001000151800004d94d8b0c 31509 544900000001000000000000036e733107626265796f6e64026e6c0000010001 544980000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 31510 90df00000001000000000000036e733207626265796f6e64026e6c0000010001 90df80000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 31511 389c00000001000000000000066f6265726f6e046261616e026e6c0000010001 389c80000001000000020001066f6265726f6e046261616e026e6c0000010001c01300020001000151800006036e7330c013c01300020001000151800013086669726577616c6c046261616e03636f6d00c02c00010001000151800004c2955086 31512 b6aba8bd5010fae29cd60000000000000000 31513 a09200000001000000000000037777770c6665746973682d706f726e6f026e6c0000010001 a09280000001000000030000037777770c6665746973682d706f726e6f026e6c0000010001c01000020001000151800011036e7331087072696f7277656202626500c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 31514 3ba60000000100000000000003706f70096d766e65747765726b026e6c0000010001 3ba68000000100000002000003706f70096d766e65747765726b026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 31515 72e800000001000000000000037777770969747362757373756d026e6c0000010001 72e880000001000000020002037777770969747362757373756d026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 31516 b6ac8a535010faf0b5fc0000000000000000 31517 927e000000010000000000000673656375726509706f7374706c617a61026e6c0000010001 927e800000010000000200020673656375726509706f7374706c617a61026e6c0000010001c0130002000100015180000e036e733207737570706f7274c01dc01300020001000151800006036e7334c035c03100010001000151800004c372e7c8c04b00010001000151800004c372e6fe 31518 98cb00000001000000000000036e73310474696469026e6c0000010001 98cb80000001000000030002036e73310474696469026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 31519 4dfc00000001000000000000036e73310474696469026e6c00001c0001 4dfc80000001000000030002036e73310474696469026e6c00001c0001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 31520 bf2d00000001000000000000036e73310474696469026e6c0000260001 bf2d80000001000000030002036e73310474696469026e6c0000260001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 31521 91c900000001000000000000036e73320474696469026e6c0000010001 91c980000001000000030002036e73320474696469026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 31522 ecfe00000001000000000000036e73320474696469026e6c00001c0001 ecfe80000001000000030002036e73320474696469026e6c00001c0001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 31523 a6e600000001000000000000036e73320474696469026e6c0000260001 a6e680000001000000030002036e73320474696469026e6c0000260001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 31524 b6ac8a535018faf07d360000008ef27b000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af4fb403c467b00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000 31525 923e0000000100000000000003777777166175746f6d6f6269656c62656472696a66626f657265026e6c0000010001 923e8000000100000002000003777777166175746f6d6f6269656c62656472696a66626f657265026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c041 31526 c92600000001000000000000037777770876772d7363656e65026e6c0000010001 c92680000001000000020000037777770876772d7363656e65026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c019c0100002000100015180000805646e732d32c033 31527 fcb70000000100000000000002393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001 fcb78000000100000002000202393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31528 b6ac8a615011fae2b56b0000000000000000 31529 d38600000001000000000000036877670f766965727465656e66656573746a65026e6c0000010001 d38680000001000000020002036877670f766965727465656e66656573746a65026e6c0000010001c0100002000100015180000f026e7309656174736572766572c020c01000020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 31530 ac660000000100000000000003777777046c79636f026e6c0000010001 ac668000000100000002000003777777046c79636f026e6c0000010001c0100002000100015180000d026e7307706167656e6963c015c01000020001000151800006036e7332c02c 31531 a3b500000001000000000000097765627365727665720c44455749542d424f454b454c024e4c0000060001 a3b584030001000000010000097765627365727665720c44455749542d424f454b454c024e4c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 31532 ab43000000010000000000000377777710687575726f76657265656e6b6f6d7374026e6c0000010001 ab43800000010000000200020377777710687575726f76657265656e6b6f6d7374026e6c0000010001c0100002000100015180000c026e730674656c6c7573c021c01000020001000151800006036e7332c038c035000100010001518000043e3a4cc8c04d000100010001518000043e3a4cc9 31533 b6ac8a625010fae2b56a0000000000000000 31534 f0ac0000000100000000000002393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001 f0ac8000000100000002000202393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31535 6b15000000010000000000000377777706617374726978026e6c0000010001 6b15800000010000000200000377777706617374726978026e6c0000010001c0100002000100015180001504646e73310a65617379736572766572036e657400c0100002000100015180000704646e7332c030 31536 824d000000010000000000000b6d61696c61726368697665046c756e61026e6c0000010001 824d800000010000000200000b6d61696c61726368697665046c756e61026e6c0000010001c01800020001000151800017026e7309726f7474657264616d046c756e61036e657400c0180002000100015180000f026e7309686f6f6664646f7270c03e 31537 9e1300000001000000000000056d61696c320773747564656e7403686873026e6c0000010001 9e1380000001000000030003056d61696c320773747564656e7403686873026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec0320001000100015180000491340205c0440001000100015180000491340206c05600010001000151800004c0576a65 31538 e61200000001000000000000036e73310f62656c617374696e676469656e7374026e6c0000010001 e61280000001000000020001036e73310f62656c617374696e676469656e7374026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004d4880935 31539 f30900000001000000000000036e73310f62656c617374696e676469656e7374026e6c0000260001 f30980000001000000020001036e73310f62656c617374696e676469656e7374026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004d4880935 31540 630f000000010000000000000a6c6f756e6765726f6f6d026e6c0000010001 630f800000010000000200000a6c6f756e6765726f6f6d026e6c0000010001c00c0002000100015180000f05646e73313703677a6f03636f6d00c00c0002000100015180000805646e733138c031 31541 1dd028000001000200000000024e4c0000060001097765627365727665720c44455749542d424f454b454c024e4c00000500fe000000000000c01400010001000000000004c0a80003 1dd0a8040000000000000000 31542 beb3000000010000000000000370657403617a67026e6c00000f0001 beb3800000010000000300030370657403617a67026e6c00000f0001c01000020001000151800006036e7331c010c0100002000100015180000a036e733103727567c014c0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004c057175cc03a00010001000151800004817d0406c05000010001000151800004c0576a65 31543 4dd600000001000000000000066f6265726f6e046261616e026e6c0000010001 4dd680000001000000020001066f6265726f6e046261616e026e6c0000010001c01300020001000151800006036e7330c013c01300020001000151800013086669726577616c6c046261616e03636f6d00c02c00010001000151800004c2955086 31544 000000007002faf0d5990000020405b401010402 000080010000000000000000 31545 906700000001000000000000036e7331067468656e6963026e6c0000010001 906780000001000000020000036e7331067468656e6963026e6c0000010001c01000020001000151800014026e730b686f6c6c616e64686f7374036e657400c01000020001000151800006036e7332c02e 31546 e55300000001000000000000036e7332067468656e6963026e6c0000010001 e55380000001000000020000036e7332067468656e6963026e6c0000010001c01000020001000151800014026e730b686f6c6c616e64686f7374036e657400c01000020001000151800006036e7332c02e 31547 b6ad439b5010faf008050000000000000000 b6adc3940000000000000000 31548 1bd800000001000000000000037777770a6175746f2d6172696e6b026e6c0000010001 1bd880000001000000020002037777770a6175746f2d6172696e6b026e6c0000010001c01000020001000151800013036e73310c7265616c6974736572766572c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5c4052bc04e00010001000151800004d5c4052c 31549 0b810000000100000000000003777777047265697305656c766961026e6c0000010001 0b818000000100000002000003777777047265697305656c766961026e6c0000010001c0150002000100015180000d026e730468736367036e657400c01500020001000151800006036e7332c032 31550 10cd0000000100000000000009736d7470686f7374320667656d6e6574026e6c0000010001 10cd8000000100000002000209736d7470686f7374320667656d6e6574026e6c0000010001c0160002000100015180000e026e73086d656761706c6578c01dc01600020001000151800006036e7331c034c03100010001000151800004504f6101c04b00010001000151800004504f6102 31551 910e0000000100000000000008736d7470686f73740667656d6e6574026e6c0000010001 910e8000000100000002000208736d7470686f73740667656d6e6574026e6c0000010001c0150002000100015180000e026e73086d656761706c6578c01cc01500020001000151800006036e7331c033c03000010001000151800004504f6101c04a00010001000151800004504f6102 31552 b6ad439b5018faf01c6c0000009404ed000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd46403c4ec60003000000354e544c4d535350000100000097b208e00c000c0029000000090009002000000057454253455256455244455749542d424f454b454c0000 b6adc3940000000000000000 31553 02a40000000100000000000003616d76026e6c0000010001 02a48000000100000003000103616d76026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 31554 71d700000001000000000000036e733103716463026e6c0000010001 71d780000001000000020002036e733103716463026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02800010001000151800004405c708dc00c00010001000151800004405c708c 31555 b6ad43a95011fae2076e0000000000000000 b6adc3a40000000000000000 31556 e15b0000000100000000000002393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001 e15b8000000100000002000202393403323232023634033231360a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31557 000000007002faf0c84e0000020405b401010402 000080010000000000000000 31558 649a00000001000000000000037777770e6e69656b7275747465726b616d70026e6c0000010001 649a80000001000000020000037777770e6e69656b7275747465726b616d70026e6c0000010001c01000020001000151800014036e73310a6d69686f736e65742d3803636f6d00c01000020001000151800006036e7332c037 31559 1be100000001000000000000076e73617574683203626974026e6c0000260001 1be180000001000000030003076e73617574683203626974026e6c0000260001c0140002000100015180000a076e736175746831c014c01400020001000151800002c00cc0140002000100015180000a076e736175746833c014c02c00010001000151800004d5880c33c00c00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 31560 aa4f00000001000000000000076e73617574683303626974026e6c0000260001 aa4f80000001000000030003076e73617574683303626974026e6c0000260001c0140002000100015180000a076e736175746831c014c0140002000100015180000a076e736175746832c014c01400020001000151800002c00cc02c00010001000151800004d5880c33c04200010001000151800004d5880c3bc00c00010001000151800004d4ccc00b 31561 d8c000000001000000000000076e73617574683103626974026e6c0000260001 d8c080000001000000030003076e73617574683103626974026e6c0000260001c01400020001000151800002c00cc0140002000100015180000a076e736175746832c014c0140002000100015180000a076e736175746833c014c00c00010001000151800004d5880c33c03a00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 31562 25470000000100000000000004732d657806787334616c6c026e6c0000010001 25478000000100000003000204732d657806787334616c6c026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 31563 b6ad43aa5010fae2076d0000000000000000 b6adc3a40000000000000000 31564 b6af01195010faf03d3a0000000000000000 b6af80010000000000000000 31565 3c760000000100000000000004732d657806787334616c6c026e6c0000010001 3c768000000100000003000204732d657806787334616c6c026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 31566 96d900000001000000000000036e733109666972737466696e64024e4c0000010001 96d980000001000000020000036e733109666972737466696e64024e4c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31567 1c7000000001000000000000036e733209666972737466696e64024e4c0000010001 1c7080000001000000020000036e733209666972737466696e64024e4c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31568 b4fd0000000100000000000004686f6d650a636f6e63657074736661026e6c0000010001 b4fd8000000100000002000204686f6d650a636f6e63657074736661026e6c0000010001c0110002000100015180000603646e73c011c0110002000100015180001004646e733208636f6e6365707473c01cc03000010001000151800004d5c51c03c04200010001000151800004d5c51e1c 31569 530c00000001000000000000036e73340962617365667265616b026e6c0000010001 530c80000001000000030003036e73340962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c03f000100010001518000045054f998c05100010001000151800004c16d7adb 31570 530d00000001000000000000036e73350962617365667265616b026e6c0000010001 530d80000001000000030003036e73350962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c03f000100010001518000045054f998c05100010001000151800004c16d7adb 31571 9d4c00000001000000000000086f776c736e657374026e6c00000f0001 9d4c80000001000000020001086f776c736e657374026e6c00000f0001c00c0002000100015180000d026e7307696e746f756368c015c00c00020001000151800010026e7307696e746f756368036e657400c02900010001000151800004d413c001 31572 63b900000001000000000000065354492d5341026e6c0000020001 63b984030001000000010000065354492d5341026e6c0000020001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 31573 fa2a00000001000000000000096c6f686d756c6c6572026e6c00000f0001 fa2a80000001000000020000096c6f686d756c6c6572026e6c00000f0001c00c0002000100015180000c036e733103737468026e7500c00c00020001000151800006036e7332c02e 31574 f53100000001000000000000026e75026e6c0000010001 f53180000001000000030003026e75026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc023000100010001518000043e45a282c035000100010001518000043e45a283c047000100010001518000043e45a284 31575 242600100001000000000001036e733503777873026e6c00000100010000290800000080000000 242680000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 31576 ba3f00000001000000000000064d4c42484154026e6c0000020001 ba3f84030001000000010000064d4c42484154026e6c0000020001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 31577 b24200000001000000000000096974736f6e6c696e65026e6c0000010001 b24280000001000000020002096974736f6e6c696e65026e6c0000010001c00c0002000100015180000a036e733103746d6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5a0d8fac04000010001000151800004d5a0d9fa 31578 6ea9000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 6ea9800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 31579 36dd28000001000000010000026e6c0000060001095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573096575726f6279746532026e6c000021000100000258001e0000006400580945422d534552564552096575726f6279746532026e6c00 36dda8040000000000000000 31580 4f8f00000001000000000000037777770a766f6c6b73776167656e026e6c0000010001 4f8f80000001000000020000037777770a766f6c6b73776167656e026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c033 31581 11650000000100000000000003777777056769746573026e6c0000010001 11658000000100000002000203777777056769746573026e6c0000010001c01000020001000151800012036e73310b676c6f62616c7369746573c016c01000020001000151800006036e7332c02ec02a00010001000151800004d4cce37ac04800010001000151800004d94d8b0c 31582 8fbf000000010000000000002439383632303662352d326234352d343935372d623035392d383438613534363434353962065f6d73646373046673316107676c67726f7570026e6c0000ff0001 8fbf840300010000000100002439383632303662352d326234352d343935372d623035392d383438613534363434353962065f6d73646373046673316107676c67726f7570026e6c0000ff0001c04500060001000038400036026e730f646f6d61696e2d7265676973747279c0450a686f73746d6173746572c05c0bf1e540000070800000384000278d0000003840 31583 14d500000001000000000000046d61696c097472616e736d61726b026e6c0000260001 14d580000001000000020002046d61696c097472616e736d61726b026e6c0000260001c0110002000100015180000c026e7306787334616c6cc01bc01100020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 31584 b11800000001000000000000046d61696c097472616e736d61726b026e6c00001c0001 b11880000001000000020002046d61696c097472616e736d61726b026e6c00001c0001c0110002000100015180000c026e7306787334616c6cc01bc01100020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 31585 000000007002faf015f200000204057a01010402 000080010000000000000000 31586 055200000001000000000000036e733503777873026e6c0000010001 055280000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 31587 743e00000001000000000000086f7574676f696e67046d61696c0b676172616e746962616e6b026e6c0000010001 743e80000001000000020000086f7574676f696e67046d61696c0b676172616e746962616e6b026e6c0000010001c01a0002000100015180000b026e73026e6c036e657400c01a0002000100015180001206617574683630026e73026e6c027575c040 31588 b6afec4b5010fbec9e740000000000000000 31589 b6afec4b5018fbec1c5700000091d900000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afed7403c50570003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000 31590 97ee00000001000000000000077765626d61696c09726f7474657264616d026e6c0000010001 97ee80000001000000030003077765626d61696c09726f7474657264616d026e6c0000010001c0140002000100015180000c0967616e796d65646573c014c01400020001000151800007046c656461c014c01400020001000151800014036e733203676e7309676574726f6e696373c01ec03200010001000151800004d5c9cf50c04a00010001000151800004d5c9cf19c05d00010001000151800004910d2a05 31591 0b3428000001000200000000026e6c00000600010570632d30350a6266626b616e746f6f72026e6c00000500fe000000000000c01400010001000000000004c0a8a8fe 0b34a8040000000000000000 31592 b6afec595011fbde9de00000000000000000 31593 b9730000000100000000000003777777066b6e736e6574026e6c0000010001 b9738000000100000002000203777777066b6e736e6574026e6c0000010001c0100002000100015180000f026e7309656c6d6167726f6570c017c01000020001000151800006036e7331c02ec02b00010001000151800004d5880085c04600010001000151800004d5ce5e22 31594 000000007002faf040ad00000204057a01010402 000080010000000000000000 31595 71bd0000000100000000000003696165026e6c00000f0001 71bd8000000100000002000203696165026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 31596 b6afec5a5010fbde9ddf0000000000000000 31597 00000000700240001ed00000020405b401010402 000080010000000000000000 31598 921300000001000000000000036e733503777873026e6c0000010001 921380000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 31599 b6b09cca5010fbec18b00000000000000000 31600 b6b09cca5018fbece393000000918d00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afed7403c50570003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000 31601 b6b17c0a5010447014580000000000000000 b6b1fc040000000000000000 31602 c604000000010000000000000b616476616e676c6f76656e026e6c00000f0001 c604840300010000000100000b616476616e676c6f76656e026e6c00000f0001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 31603 b6b17c0a501844707e9d0000008bacbd000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd5b403c4edb00030000002e4e544c4d535350000100000097b200c00900090025000000050005002000000050432d3035574f524b47524f55500000 b6b1fc040000000000000000 31604 b6b09cd85011fbde181c0000000000000000 31605 08bf0000000100000000000009652d6c756e61746963026e6c0000010001 08bf8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 31606 dbce000000010000000000000d6175746f74656c656772616166026e6c0000010001 dbce800000010000000200000d6175746f74656c656772616166026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c032 31607 000000007002faf085cb00000204057a01010402 000080010000000000000000 31608 b6b09cd95010fbde181b0000000000000000 31609 b6b17c185011446213ca0000000000000000 b6b1fc140000000000000000 31610 0000000070024000f4030000020405b401010402 000080010000000000000000 31611 48ef28000001000000020000026e6c00000600012439383632303662352d326234352d343935372d623035392d383438613534363434353962065f6d73646373046673316107676c67726f7570026e6c00000500ff000000000000c0140005000100000258001e0c64632d707265636973696f6e046673316107676c67726f7570026e6c00 48efa8040000000000000000 31612 b6b2661c5010fbec947a0000000000000000 b6b2e6140000000000000000 31613 ca780000000100000000000005646e732d31056c61646f74026e6c0000010001 ca788000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31614 fbfe0000000100000000000005646e732d32056c61646f74026e6c0000010001 fbfe8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31615 b6b2661c5018fbecab5e000000914100000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afed7403c50570003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000 b6b2e6140000000000000000 31616 b6b17c195010446213c90000000000000000 b6b1fc140000000000000000 31617 c22800000001000000000000037777770a706c61792d6c6573626f026e6c0000010001 c22880000001000000020002037777770a706c61792d6c6573626f026e6c0000010001c0100002000100015180000b036e7331046e732d31c01bc01000020001000151800006036e7332c033c02f000100010001518000045045a0cdc04600010001000151800004d4cceec8 31618 b6b3418b5010447024090000000000000000 b6b3c1840000000000000000 31619 b6b3418b5018447033d70000008b0935000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd5b403c4edb00030000002e4e544c4d535350000100000097b200c00900090025000000050005002000000050432d3035574f524b47524f55500000 b6b3c1840000000000000000 31620 b6b2662a5011fbde93e60000000000000000 b6b2e6240000000000000000 31621 5a7600100001000000000001046d61696c076575726f6e6574026e6c00000100010000290800000080000000 5a7680000001000000020002046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c28600430000291000000000000000 31622 00000000700240000c4d0000020405b401010402 000080010000000000000000 31623 b6b3419950114462237b0000000000000000 b6b3c1940000000000000000 31624 a63b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 a63b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 31625 b6b2662b5010fbde93e50000000000000000 b6b2e6240000000000000000 31626 000000007002400045b80000020405b401010402 000080010000000000000000 31627 b6b3419a50104462237a0000000000000000 b6b3c1940000000000000000 31628 b6b4f31650104470c4300000000000000000 31629 6b010000000100000000000004444e5331055348454c4c026e6c0000010001 6b018000000100000003000004444e5331055348454c4c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 31630 b6b42daf50104470502d0000000000000000 b6b4ada40000000000000000 31631 b6b4f3165018447077860000008b65ad000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd5b403c4edb00030000002e4e544c4d535350000100000097b200c00900090025000000050005002000000050432d3035574f524b47524f55500000 31632 b6b42daf5018447031a50000008fb8e6000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afccd403c4e4d0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000 b6b4ada40000000000000000 31633 272400000001000000000000036e73340767617574656e67026e6c0000010001 272480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31634 0f2b00000001000000000000036e73340767617574656e67026e6c0000010001 0f2b80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31635 2eb6000000010000000000000462617261026e6c0000ff0001 2eb6800000010000000200020462617261026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 31636 e65a00100001000000000001034e53320743495354524f4e024e4c00000100010000290800000080000000 e65a80000001000000020003034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 31637 b6b4f32450114462c3a20000000000000000 31638 e026000000010000000000000a666f7274697362616e6b026e6c00001c0001 e026800000010000000300020a666f7274697362616e6b026e6c00001c0001c00c0002000100015180000f036e73310870726f7365727665c017c00c00020001000151800012036e73320970726f2d736572766502626500c00c00020001000151800006036e7333c02fc02b000100010001518000045054e055c06400010001000151800004d4ccc655 31639 408f00000001000000000000036e733103686978026e6c0000010001 408f80000001000000020002036e733103686978026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5a0da0ac0360001000100015180000451112ec3 31640 5a5500000001000000000000036e733203686978026e6c0000010001 5a5580000001000000020002036e733203686978026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d5a0da0ac00c0001000100015180000451112ec3 31641 f99800000001000000000000034e53320743495354524f4e024e4c0000010001 f99880000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 31642 b6b42dbd501144624f9b0000000000000000 b6b4adb40000000000000000 31643 000000007002400016260000020405b401010402 000080010000000000000000 31644 b6b4f32550104462c3a10000000000000000 31645 0e68000000010000000000000742415354494f4e03415a4c026e6c0000010001 0e68800000010000000300030742415354494f4e03415a4c026e6c0000010001c0140002000100015180000b036e7331046c756d63c018c0140002000100015180000e036e733107737572666e6574c018c01400020001000151800006036e7332c030c02c000100010001518000049158d2eac04300010001000151800004c0576a65c05d000100010001518000049158d30a 31646 990d00000001000000000000037777770c73616261682d626f726e656f026e6c0000010001 990d80000001000000020000037777770c73616261682d626f726e656f026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c034 31647 b6b42dbe501044624f9a0000000000000000 b6b4adb40000000000000000 31648 9b7400000001000000000000036e733103666a66026e6c0000010001 9b7480000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31649 d594000000010000000000000467626d6c026e6c00000f0001 d594800000010000000300020467626d6c026e6c00000f0001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 31650 9b7500000001000000000000036e733203666a66026e6c0000010001 9b7580000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31651 b6b57d3e501044700a760000000000000000 b6b5fd340000000000000000 31652 b6b57d3e501844703aa10000008f6b34000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afccd403c4e4d0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000 b6b5fd340000000000000000 31653 0b8c0000000100000000000005646e732d31056c61646f74026e6c0000010001 0b8c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31654 aa500000000100000000000005646e732d32056c61646f74026e6c0000010001 aa508000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 31655 629300000001000000000000076e6574666c6578026e6c0000010001 629380000001000000030003076e6574666c6578026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02800010001000151800004c26d5ba8c03a00010001000151800004507f2f25c04c00010001000151800004507ede20 31656 b6b57d4c5011446209e40000000000000000 b6b5fd440000000000000000 31657 00000000700240002b9e0000020405b401010402 000080010000000000000000 31658 d8e200000001000000000000046d6172730f7475696e626f757763656e7472756d026e6c0000010001 d8e280000001000000020000046d6172730f7475696e626f757763656e7472756d026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c03b 31659 1eb500000001000000000000046d61696c096974732d782d747261026e6c0000010001 1eb580000001000000020002046d61696c096974732d782d747261026e6c0000010001c0110002000100015180000a036e733103746d6ec01bc01100020001000151800006036e7332c033c02f00010001000151800004d5a0d8fac04500010001000151800004d5a0d9fa 31660 583900000001000000000000046d61696c096974732d782d747261026e6c0000010001 583980000001000000020002046d61696c096974732d782d747261026e6c0000010001c0110002000100015180000a036e733103746d6ec01bc01100020001000151800006036e7332c033c02f00010001000151800004d5a0d8fac04500010001000151800004d5a0d9fa 31661 ba8400000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c00001c0001 ba8480000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 31662 132c00000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c0000260001 132c80000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 31663 5f8200000001000000000000046d61696c076575726f6e6574026e6c0000010001 5f8280000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 31664 f8fb0000000100000000000006636861726973026e6c00000f0001 f8fb8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 31665 23380000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 23388000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31666 440200000001000000000000036e73310a74727565736572766572026e6c0000010001 440280000001000000030003036e73310a74727565736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef8003c03d00010001000151800004d5efb004c04f00010001000151800004d5ef8005 31667 220100000001000000000000036e73320a74727565736572766572026e6c0000010001 220180000001000000030003036e73320a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02f00010001000151800004d5ef8003c00c00010001000151800004d5efb004c04f00010001000151800004d5ef8005 31668 dd8000000001000000000000036e7332076e656473746174026e6c0000010001 dd8080000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 31669 40ad00000001000000000000036e73330a74727565736572766572026e6c0000010001 40ad80000001000000030003036e73330a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f00010001000151800004d5ef8003c04100010001000151800004d5efb004c00c00010001000151800004d5ef8005 31670 b6b57d4d5010446209e30000000000000000 b6b5fd440000000000000000 31671 b6b667875010447035a40000000000000000 b6b6e7840000000000000000 31672 bda40000000100000000000003737477026e6c00000f0001 bda48000000100000002000203737477026e6c00000f0001c00c000200010001518000070469726973c00cc00c0002000100015180000e036e733107737572666e6574c010c02400010001000151800004c3a95a82c03700010001000151800004c0576a65 31673 b6b66787501844704d880000008f837b000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afccd403c4e4d0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000 b6b6e7840000000000000000 31674 fc1f00000001000000000000046d61696c096d61676963626c7565026e6c0000010001 fc1f80000001000000030003046d61696c096d61676963626c7565026e6c0000010001c0110002000100015180000e036e7331076e6574666c6578c01bc01100020001000151800006036e7332c033c01100020001000151800006036e7333c033c02f00010001000151800004c26d5ba8c04900010001000151800004507f2f25c05b00010001000151800004507ede20 31675 191800000001000000000000046d61696c096d61676963626c7565026e6c00001c0001 191880000001000000030003046d61696c096d61676963626c7565026e6c00001c0001c0110002000100015180000e036e7331076e6574666c6578c01bc01100020001000151800006036e7332c033c01100020001000151800006036e7333c033c02f00010001000151800004c26d5ba8c04900010001000151800004507f2f25c05b00010001000151800004507ede20 31676 14d100000001000000000000046d61696c096d61676963626c7565026e6c0000260001 14d180000001000000030003046d61696c096d61676963626c7565026e6c0000260001c0110002000100015180000e036e7331076e6574666c6578c01bc01100020001000151800006036e7332c033c01100020001000151800006036e7333c033c02f00010001000151800004c26d5ba8c04900010001000151800004507f2f25c05b00010001000151800004507ede20 31677 505e00000001000000000000076d61696c6875620b7669616e6574776f726b73026e6c0000010001 505e80000001000000020002076d61696c6875620b7669616e6574776f726b73026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03400010001000151800004d43d0f08c04600010001000151800004d43d19e2 31678 9ff1000000010000000000000d6f7463766964656f73616c6573026e6c0000010001 9ff1800000010000000200010d6f7463766964656f73616c6573026e6c0000010001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c01ac04700010001000151800004c2860043 31679 4e960000000100000000000006646f6e616c640a33697365727669636573026e6c0000010001 4e968000000100000002000206646f6e616c640a33697365727669636573026e6c0000010001c0130002000100015180000b036e73310470726566c01ec01300020001000151800006036e7332c036c03200010001000151800004d5c42815c04900010001000151800004d43d485b 31680 fcbf0000000100000000000007636f6f6c696f7307666c6162626572026e6c0000010001 fcbf8000000100000003000207636f6f6c696f7307666c6162626572026e6c0000010001c0140002000100015180000d036e733106776964657873c01cc01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 31681 a26d00000001000000000000076e6f77686572650c313830736f6c7574696f6e7303636f6d097769656240686f6d65026e6c0000010001 a26d84030001000000010000076e6f77686572650c313830736f6c7574696f6e7303636f6d097769656240686f6d65026e6c0000010001c02f00060001000038400036026e730f646f6d61696e2d7265676973747279c02f0a686f73746d6173746572c0460bf1e540000070800000384000278d0000003840 31682 6ec000000001000000000000036e7334076e656473746174026e6c0000010001 6ec080000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 31683 9b9600000001000000000000036e733103666a66026e6c0000010001 9b9680000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31684 9b9700000001000000000000036e733203666a66026e6c0000010001 9b9780000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31685 01190000000100000000000003444e42024e4c00000f0001 01198000000100000002000003444e42024e4c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 31686 4cbd0000000100000000000003656d76026e6c0000010001 4cbd8000000100000002000203656d76026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c010c00c00020001000151800006036e7332c027c02400010001000151800004d4cb0e42c03f00010001000151800004d4cb1221 31687 17fb0000000100000000000008686f73746e616d650462696e640000100003 17fb8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31688 57fc00000001000000000000076e65656c746a650c616374697665646f6d61696e026e6c0000010001 57fc80000001000000030000076e65656c746a650c616374697665646f6d61696e026e6c0000010001c01400020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01400020001000151800006036e7332c039c01400020001000151800006036e7333c039 31689 218900000001000000000000036e7332076e656473746174026e6c0000010001 218980000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 31690 5e8800000001000000000000036e7334076e656473746174026e6c0000010001 5e8880000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 31691 23380000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 23388000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31692 23380000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 23388000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 31693 1e3f0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 1e3f8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 31694 a8c800000001000000000000036e73310564656d6f6e026e6c00001c0001 a8c880000001000000030002036e73310564656d6f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 31695 043200000001000000000000036e73310564656d6f6e026e6c0000260001 043280000001000000030002036e73310564656d6f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 31696 fcf700000001000000000000036e73320564656d6f6e026e6c00001c0001 fcf780000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 31697 be4c00000001000000000000036e73320564656d6f6e026e6c0000260001 be4c80000001000000030002036e73320564656d6f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 31698 b13700000001000000000000036e73330564656d6f6e026e6c00001c0001 b13780000001000000030002036e73330564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c03c00010001000151800004c29fb004 31699 a39500000001000000000000036e73330564656d6f6e026e6c0000260001 a39580000001000000030002036e73330564656d6f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c03c00010001000151800004c29fb004 31700 396a00000001000000000000046e6e64690564656d6f6e026e6c0000010001 396a80000001000000030002046e6e64690564656d6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 31701 4a6400000001000000000000036e733404686f6d65026e6c0000010001 4a6480000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 31702 1b7800000001000000000000036e733104686f6d65026e6c0000010001 1b7880000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 31703 7ddb00000001000000000000036e733304686f6d65026e6c0000010001 7ddb80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 31704 f59800000001000000000000036e733204686f6d65026e6c0000010001 f59880000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 31705 6eac0000000100000000000008686f7274696d6561026e6c00000f0001 6eac8000000100000002000008686f7274696d6561026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02f 31706 3849000000010000000000000e727a656f6d6e6f6e766565746d65026e6c0000010001 3849840300010000000100000e727a656f6d6e6f6e766565746d65026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 31707 f4f600000001000000000000076d61696c696e67086169726d696c6573026e6c0000010001 f4f680000001000000020000076d61696c696e67086169726d696c6573026e6c0000010001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c037 31708 a387000000010000000000000469632d73026e6c00000f0001 a387800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 31709 22ac000000010000000000000377777706747261706e61026e6c0000010001 22ac800000010000000200020377777706747261706e61026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 31710 7764000000010000000000000377777708776f6f6e73646167026e6c0000010001 7764800000010000000200000377777708776f6f6e73646167026e6c0000010001c01000020001000151800011036e73310764726965626974036e657400c01000020001000151800006036e7332c031 31711 164000000001000000000000037777770d70617962696c6c766973696f6e026e6c0000010001 164084030001000000010000037777770d70617962696c6c766973696f6e026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 31712 c95b00000001000000000000036e73330767617574656e67026e6c0000010001 c95b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31713 c95c00000001000000000000036e73340767617574656e67026e6c0000010001 c95c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31714 69630000000100000000000006657376656c64026e6c00000f0001 69638000000100000002000206657376656c64026e6c00000f0001c00c0002000100015180000f036e7331086261726d61746f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004d5a0da96c04200010001000151800004d5a0da64 31715 8df800000001000000000000036e7332076e656473746174026e6c0000010001 8df880000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 31716 b3f70000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 b3f78000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 31717 8df900000001000000000000036e7334076e656473746174026e6c0000010001 8df980000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 31718 3b2d0000000100000000000004686f6d65096b6162656c666f6f6e026e6c0000010001 3b2d8000000100000002000204686f6d65096b6162656c666f6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7334c011c02f000100010001518000043e2d2d2cc041000100010001518000043e2d3f03 31719 188d00000001000000000000066b61706e6168026e6c00000f0001 188d80000001000000020000066b61706e6168026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02b 31720 1cfb0000000100000000000006776468303131066e7434616c6c026e6c0000010001 1cfb8000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 31721 8bab00000001000000000000036973630b636f6c6f2d756e69746564026e6c0000010001 8bab80000001000000020002036973630b636f6c6f2d756e69746564026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0300001000100015180000452c04b07c0420001000100015180000452c04b08 31722 b9360000000100000000000003777777076272616e647973026e6c0000010001 b9368000000100000002000003777777076272616e647973026e6c0000010001c0100002000100015180000f026e73077365727665727902637a00c01000020001000151800010026e73077365727665727903636f6d00 31723 6fca0000000100000000000003706f7008767575727765726b026e6c0000010001 6fca8000000100000003000103706f7008767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 31724 27f70000000100000000000003666f7805706c617a61026e6c0000010001 27f78000000100000002000003666f7805706c617a61026e6c0000010001c0100002000100015180001806706c75746f320b706c617a612d696e746572036e657400c01000020001000151800009066465696d6f73c031 31725 b6e9000000010000000000000b6b61617274656e687569730766756e636c6970026e6c0000010001 b6e9800000010000000200000b6b61617274656e687569730766756e636c6970026e6c0000010001c01800020001000151800011036e7333076361706361766503636f6d00c01800020001000151800006036e7334c038 31726 666400000001000000000000037777770a636476642d20636c7562026e6c0000010001 666484030001000000010000037777770a636476642d20636c7562026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 31727 af370000000100000000000003777777076d7262756c6c79026e6c0000010001 af378000000100000002000003777777076d7262756c6c79026e6c0000010001c01000020001000151800014046e7335300a636f6d7075746f6f6c7302626500c01000020001000151800007046e733531c031 31728 b6b667955011446235120000000000000000 b6b6e7940000000000000000 31729 f1c600000001000000000000095f6b65726265726f73045f746370026463065f6d73646373046673316107676c67726f7570026e6c0000060001 f1c684030001000000010000095f6b65726265726f73045f746370026463065f6d73646373046673316107676c67726f7570026e6c0000060001c03200060001000038400036026e730f646f6d61696e2d7265676973747279c0320a686f73746d6173746572c0490bf1e540000070800000384000278d0000003840 31730 0aac00100001000000000001036e733107737572666e6574026e6c00000100010000290800000000000000 0aac80000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 31731 b288000000010000000000000665636f667973026e6c00000f0001 b288800000010000000200020665636f667973026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 31732 9cbd00000001000000000000036e733103666a66026e6c0000010001 9cbd80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31733 9cbe00000001000000000000036e733203666a66026e6c0000010001 9cbe80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31734 9cbf00000001000000000000037777770c747261666669636368616d70026e6c00001c0001 9cbf80000001000000020000037777770c747261666669636368616d70026e6c00001c0001c0100002000100015180000a036e733103666a66c01dc01000020001000151800006036e7332c035 31735 9cc200000001000000000000037777770c747261666669636368616d70026e6c00001c0001 9cc280000001000000020000037777770c747261666669636368616d70026e6c00001c0001c0100002000100015180000a036e733103666a66c01dc01000020001000151800006036e7332c035 31736 3cf700000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730d7676762d676f72696e6368656d026e6c0000060001 3cf784030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730d7676762d676f72696e6368656d026e6c0000060001c04e00060001000038400036026e730f646f6d61696e2d7265676973747279c04e0a686f73746d6173746572c0650bf1e540000070800000384000278d0000003840 31737 aace000000010000000000000d6b696e646a656f706b6f6d7374026e6c0000010001 aace800000010000000300030d6b696e646a656f706b6f6d7374026e6c0000010001c00c0002000100015180000a036e733103797873c01ac00c00020001000151800006036e7332c032c00c00020001000151800006036e7333c032c02e00010001000151800004d5efb6dec04400010001000151800004d5efb52fc05600010001000151800004503de97c 31738 747c0000000100000000000003777777097965746973706f7274026e6c0000010001 747c8403000100000001000003777777097965746973706f7274026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 31739 016a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 016a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 31740 65d60010000100000000000103777777056176657279026e6c00000100010000290800000080000000 65d68000000100000002000103777777056176657279026e6c0000010001c0100002000100015180000d036e73310365647303636f6d00c01000020001000151800006036e7332c02e0000291000000000000000 31741 32eb001000010000000000010a6f726967696e2d777777056176657279026e6c00000100010000290800000080000000 32eb800000010000000200010a6f726967696e2d777777056176657279026e6c0000010001c0170002000100015180000d036e73310365647303636f6d00c01700020001000151800006036e7332c0350000291000000000000000 31742 25cb00000001000000000000037777770d63616d70696e67706167696e61026e6c0000010001 25cb80000001000000020000037777770d63616d70696e67706167696e61026e6c0000010001c01000020001000151800010036e733109696e74657264696a6bc01ec01000020001000151800006036e7332c036 31743 379300000001000000000000026e730367616b026e6c0000010001 379380000001000000020002026e730367616b026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733307737669616e6564c013c00c000100010001518000048fb0b003c035000100010001518000048fb10165 31744 467c00000001000000000000036e733307737669616e6564026e6c0000010001 467c80000001000000020002036e733307737669616e6564026e6c0000010001c01000020001000151800002c00cc01000020001000151800009026e730367616bc018c00c000100010001518000048fb10165c03a000100010001518000048fb0b003 31745 2c430000000100000000000003777777056176657279026e6c0000010001 2c438000000100000002000003777777056176657279026e6c0000010001c0100002000100015180000d036e73310365647303636f6d00c01000020001000151800006036e7332c02e 31746 db1c000000010000000000000a6f726967696e2d777777056176657279026e6c0000010001 db1c800000010000000200000a6f726967696e2d777777056176657279026e6c0000010001c0170002000100015180000d036e73310365647303636f6d00c01700020001000151800006036e7332c035 31747 bd1500000001000000000000035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730c6a666b626f73737472616174026e6c0000060001 bd1584030001000000010000035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730c6a666b626f73737472616174026e6c0000060001c03f00060001000038400036026e730f646f6d61696e2d7265676973747279c03f0a686f73746d6173746572c0560bf1e540000070800000384000278d0000003840 31748 410f28000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730d7676762d676f72696e6368656d026e6c0000210001000002580028000000640cc40f676f72696e6368656d326b2d7362730d7676762d676f72696e6368656d026e6c00 410fa8040000000000000000 31749 e3c3000000010000000000000873706163657075620b666f6b6b65727370616365026e6c0000010001 e3c3800000010000000200010873706163657075620b666f6b6b65727370616365026e6c0000010001c015000200010001518000160873706163657075620a64757463687370616365c021c0150002000100015180000b026e73026e6c036e657400c03500010001000151800004c2b2d042 31750 c95f00000001000000000000036e73330767617574656e67026e6c0000010001 c95f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31751 c96000000001000000000000036e73340767617574656e67026e6c0000010001 c96080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31752 7d350000000100000000000003777777046d737473026e6c0000010001 7d358000000100000002000203777777046d737473026e6c0000010001c01000020001000151800012036e73310b736c61636b736572766572c015c01000020001000151800006036e7332c02dc029000100010001518000043ed444c0c047000100010001518000043ed44d0a 31753 af6f00000001000000000000177067676d2d62656c616e67656e766572656e6967696e67026e6c0000ff0001 af6f80000001000000030002177067676d2d62656c616e67656e766572656e6967696e67026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c024c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c03cc03800010001000151800004d4ccc0fcc06d000100010001518000043efa0703 31754 000000007002faf07fea0000020405b401010402 000080010000000000000000 31755 b6b8e7615010faf00e840000000000000000 31756 b6b8e7615018faf014680000009b3a67000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af52c403c46ac00030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000 31757 6ae5000000010000000000000a6970353163633837383205737065656406706c616e6574026e6c0000010001 6ae5800000010000000300030a6970353163633837383205737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 31758 a514000000010000000000000377777714737061616e737665726b65657273627572656175026e6c0000010001 a514800000010000000200020377777714737061616e737665726b65657273627572656175026e6c0000010001c0100002000100015180000e026e7308636f6e6e65787573c025c01000020001000151800006036e7332c03cc03900010001000151800004c35652f1c05300010001000151800004c35652f0 31759 0aa000000001000000000000037777770c6265616d6572706c616e6574026e6c0000010001 0aa080000001000000020002037777770c6265616d6572706c616e6574026e6c0000010001c0100002000100015180001104646e733109616464766973696f6ec01dc0100002000100015180000704646e7332c036c031000100010001518000045054e242c04e000100010001518000045054e243 31760 b6b8e76f5011fae20de60000000000000000 31761 b6b8e7705010fae20de50000000000000000 31762 000000007002faf0f2b90000020405b401010402 000080010000000000000000 31763 40b40000000100000000000009706574726f706c7573026e6c00000f0001 40b48000000100000002000009706574726f706c7573026e6c00000f0001c00c00020001000151800011026e7309706574726f706c757302626500c00c00020001000151800006036e7332c02d 31764 9ceb00000001000000000000036e733103666a66026e6c0000010001 9ceb80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31765 9cec00000001000000000000036e733203666a66026e6c0000010001 9cec80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 31766 b6b964ca5010faf003ea0000000000000000 b6b9e4c40000000000000000 31767 de50000000010000000000000377777708776f6f6e73646167026e6c0000010001 de50800000010000000200000377777708776f6f6e73646167026e6c0000010001c01000020001000151800011036e73310764726965626974036e657400c01000020001000151800006036e7332c031 31768 b6b964ca5018faf076f60000009bce3f000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af52c403c46ac00030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000 b6b9e4c40000000000000000 31769 b6b964d85011fae2034c0000000000000000 b6b9e4d40000000000000000 31770 c80600000001000000000000076e66736d697468026e6c0000ff0001 c80680000001000000030001076e66736d697468026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 31771 3373000000010000000000000673746174696306766961766961026e6c0000010001 3373800000010000000200020673746174696306766961766961026e6c0000010001c01300020001000151800009026e730369736dc01ac01300020001000151800006036e7332c031c02e00010001000151800004d994ab02c04300010001000151800004d994ab03 31772 b6b964d95010fae2034b0000000000000000 b6b9e4d40000000000000000 31773 000000007002faf0cbb80000020405b401010402 000080010000000000000000 31774 b6ba546e5010faf0ed430000000000000000 b6bad4640000000000000000 31775 2e2700000001000000000000036e733103757063026e6c00001c0001 2e2780000001000000030003036e733103757063026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 31776 b6ba546e5018faf0e7820000009b470d000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af52c403c46ac00030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000 b6bad4640000000000000000 31777 493700000001000000000000036e733103757063026e6c0000260001 493780000001000000030003036e733103757063026e6c0000260001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 31778 ba2e00000001000000000000036d6b77026e6c0000010001 ba2e80000001000000020002036d6b77026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 31779 b6ba547c5011fae2eca50000000000000000 b6bad4740000000000000000 31780 b6b667965010446235110000000000000000 b6b6e7940000000000000000 31781 b6ba547d5010fae2eca40000000000000000 b6bad4740000000000000000 31782 028c000000010000000000000770696d65646961026e6c0000010001 028c800000010000000200020770696d65646961026e6c0000010001c00c00020001000151800010036e7331096d6173746572646e73c014c00c00020001000151800006036e7332c02cc028000100010001518000045054f347c044000100010001518000043e94a047 31783 531400000001000000000000036e73350962617365667265616b026e6c0000010001 531480000001000000030003036e73350962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c03f000100010001518000045054f998c05100010001000151800004c16d7adb 31784 531300000001000000000000036e73340962617365667265616b026e6c0000010001 531380000001000000030003036e73340962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c03f000100010001518000045054f998c05100010001000151800004c16d7adb 31785 ef03000000010000000000000f426f6572486172746f67486f6f6674026e6c0000ff0001 ef03800000010000000200000f426f6572486172746f67486f6f6674026e6c0000ff0001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 31786 ee1e00000001000000000000066f6265726f6e046261616e026e6c0000010001 ee1e80000001000000020001066f6265726f6e046261616e026e6c0000010001c01300020001000151800006036e7330c013c01300020001000151800013086669726577616c6c046261616e03636f6d00c02c00010001000151800004c2955086 31787 207d000000010000000000000377777707776f6f6e776562026e6c0000010001 207d800000010000000300020377777707776f6f6e776562026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 31788 301400000001000000000000056162632d64026e6c00000f000100 301480000001000000020000056162632d64026e6c00000f0001c00c0002000100015180000f026e7307626f6e6e69657202736500c00c00020001000151800006036e7333c029 31789 6757000000010000000000000377777709636f6d70757a6f6e65026e6c0000010001 6757800000010000000200000377777709636f6d70757a6f6e65026e6c0000010001c01000020001000151800010036e733109666972737466696e64c01ac01000020001000151800006036e7332c032 31790 15b3000000010000000000000473746572026e6c00000f0001 15b3800000010000000200020473746572026e6c00000f0001c00c00020001000151800010066d696e6e6965066f6d726f6570c011c00c0002000100015180000805726f62696ec02cc02500010001000151800004913a1e04c04100010001000151800004913a1a34 31791 58a500000001000000000000037777770a75626e2d73656c656374026e6c0000010001 58a580000001000000020002037777770a75626e2d73656c656374026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c01bc01000020001000151800006036e7332c032c02f00010001000151800004c3402003c04800010001000151800004c340202b 31792 92f50000000100000000000003636663056973696f6e026e6c0000010001 92f58000000100000002000203636663056973696f6e026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c016c01000020001000151800006036e7332c02dc02a00010001000151800004c3402003c04300010001000151800004c340202b 31793 02db0000000100000000000009646f72647265636874086172626f756e6965026e6c0000ff0001 02db8000000100000002000109646f72647265636874086172626f756e6965026e6c0000ff0001c01600020001000151800005026677c016c0160002000100015180000b026e73026e6c036e657400c03300010001000151800004c1430542 31794 6b5d000000010000000000000d416d7261746855747265636874026e6c0000010001 6b5d800000010000000200000d416d7261746855747265636874026e6c0000010001c00c00020001000151800012036e73310872656d6f74696f6e036e657400c00c00020001000151800006036e7333c032 31795 1e9e0000000100000000000003777777046e626c63026e6c0000010001 1e9e8000000100000002000103777777046e626c63026e6c0000010001c0100002000100015180000b036e73330473617261c015c01000020001000151800006036e7332c02dc040000100010001518000049164052f 31796 2d0100000001000000000000066170616368650962617365667265616b026e6c0000010001 2d0180000001000000030003066170616368650962617365667265616b026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c03100010001000151800004c32fdc83c042000100010001518000045054f998c05400010001000151800004c16d7adb 31797 055600000001000000000000036e733107737572666e6574026e6c0000010001 055680000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 31798 705500000001000000000000036e733208676f6c64656e7873026e6c0000010001 705580000001000000020002036e733208676f6c64656e7873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000451ab67c2c00c0001000100015180000451ab67c3 31799 f1d900000001000000000000036e733208676f6c64656e7873026e6c00001c0001 f1d980000001000000020002036e733208676f6c64656e7873026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000451ab67c2c00c0001000100015180000451ab67c3 31800 69b900000001000000000000036e733108676f6c64656e7873026e6c0000010001 69b980000001000000020002036e733108676f6c64656e7873026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451ab67c2c03b0001000100015180000451ab67c3 31801 a4a900000001000000000000036e733108676f6c64656e7873026e6c00001c0001 a4a980000001000000020002036e733108676f6c64656e7873026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451ab67c2c03b0001000100015180000451ab67c3 31802 48f428000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d73646373046673316107676c67726f7570026e6c00002100010000025800240000006400580c64632d707265636973696f6e046673316107676c67726f7570026e6c00 48f4a8040000000000000000 31803 2e2928000001000000010000024e4c0000060001064f4b42414e4b024e4c00000100010000025800040a000089 2e29a8040000000000000000 31804 498000000001000000000000067a6f6e6e6574026e6c0000010001 498080000001000000020002067a6f6e6e6574026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000e026e7308767575727765726bc013c027000100010001518000043e3a3204c038000100010001518000043efa0202 31805 bd52000000010000000000000a70696574657270617274026e6c0000ff0001 bd52800000010000000300010a70696574657270617274026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 31806 9a21000000010000000000000c616c6c6172646d6f6c6c6572026e6c0000010001 9a21800000010000000200020c616c6c6172646d6f6c6c6572026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 31807 000000007002400033180000020405b401010402 000080010000000000000000 31808 2c0d00000001000000000000037777770c726f6265636f646972656374026e6c0000010001 2c0d80000001000000020001037777770c726f6265636f646972656374026e6c0000010001c0100002000100015180000d036e733106726f6265636fc01dc0100002000100015180000b026e73026e6c036e657400c03100010001000151800004913d1a01 31809 19f00000000100000000000004616a6178066e696b686566026e6c0000010001 19f08000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 31810 cd9d00000001000000000000026e7307696e746f756368026e6c0000010001 cd9d80000001000000030001026e7307696e746f756368026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c001 31811 a68100000001000000000000026e7307696e746f756368026e6c00001c0001 a68180000001000000030001026e7307696e746f756368026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c001 31812 b6bc703d5010447034620000000000000000 b6bcf0340000000000000000 31813 b6bc703d50184470bc270000008b5640000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403aff88403c510800030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004f4b465330314f4b42414e4b0000 b6bcf0340000000000000000 31814 ab0b0000000100000000000002373303323035033132390231320a626c61636b686f6c657307656173796e6574026e6c0000010001 ab0b8000000100000002000202373303323035033132390231320a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31815 e62000000001000000000000037777770664656b757374026e6c0000010001 e62080000001000000020002037777770664656b757374026e6c0000010001c0100002000100015180000a04646e7330026975c017c0100002000100015180000704646e7331c030c02b00010001000151800004d91a7002c04100010001000151800004d91a7103 31816 b6bc704b5011446233d40000000000000000 b6bcf0440000000000000000 31817 00000000700240000f670000020405b401010402 000080010000000000000000 31818 5b2b28000001000200000000026e6c00000600010676626769736109766267696e7465726e026e6c00000500fe000000000000c01400010001000000000004be011e2c 5b2ba8040000000000000000 31819 a4a300000001000000000000037777770664656b757374026e6c0000010001 a4a380000001000000020002037777770664656b757374026e6c0000010001c0100002000100015180000a04646e7330026975c017c0100002000100015180000704646e7331c030c02b00010001000151800004d91a7002c04100010001000151800004d91a7103 31820 54f1000000010000000000000872617468656e6175026e6c0000010001 54f1800000010000000200020872617468656e6175026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c015c00c00020001000151800006036e7332c02cc02900010001000151800004d9aa2042c04200010001000151800004d9aa2c06 31821 b6bc704c5010446233d30000000000000000 b6bcf0440000000000000000 31822 b6bd08a65010447078470000000000000000 b6bd88a40000000000000000 31823 0000000070024000a9bc0000020405b401010402 000080010000000000000000 31824 f05200000001000000000000037777770a706f726e706172726f74026e6c0000010001 f05280000001000000020002037777770a706f726e706172726f74026e6c0000010001c0100002000100015180001104646e733109696e7465726f757465c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d4173f3ec04c00010001000151800004d4173f3d 31825 0000000070024000db0500000204059801010402 000080010000000000000000 31826 b6bd08a650184470054e0000008b5200000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403aff88403c510800030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004f4b465330314f4b42414e4b0000 b6bd88a40000000000000000 31827 fd7100000001000000000000037777770d666c6f77657273657276696365026e6c0000010001 fd7180000001000000020002037777770d666c6f77657273657276696365026e6c0000010001c01000020001000151800011036e73320a636c75737465726e6574c01ec01000020001000151800006036e7331c036c03200010001000151800004d5f72f3cc04f000100010001518000045054edf5 31828 18f5000000010000000000000467726678086d61696c73657276026e6c0000010001 18f5800000010000000200020467726678086d61696c73657276026e6c0000010001c0110002000100015180000c026e73067574722d6978c01ac01100020001000151800006036e7332c031c02e0001000100015180000451113206c04600010001000151800004d5c42806 31829 78d7000000010000000000000377777712696374666f72796f7572627573696e657373026e6c0000010001 78d7800000010000000300030377777712696374666f72796f7572627573696e657373026e6c0000010001c0100002000100015180000c026e73067369676e6574c023c01000020001000151800006036e7331c03ac01000020001000151800006036e7332c03ac03700010001000151800004c3561242c04f00010001000151800004d915f142c06100010001000151800004d915f141 31830 b6bd08b45011446277b90000000000000000 b6bd88b40000000000000000 31831 000000007002400064bd0000020405b401010402 000080010000000000000000 31832 b6be7cc050104320d0fe0000000000000000 b6befcc40000000000000000 31833 b6be7cc050184320edb00000008b052a000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afcf2403c4e7200030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000 b6befcc40000000000000000 31834 b6bdaa435010447070ff0000000000000000 31835 3e0700000001000000000000096d616e6761706f726e026e6c0000010001 3e0780000001000000020000096d616e6761706f726e026e6c0000010001c00c00020001000151800010036e73610674696e74656c03636f6d00c00c00020001000151800006036e7362c02e 31836 7e7428000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730c64652d687569736b616d6572026e6c00002100010000025800260000006401850e7372766e73687569736b616d65720c64652d687569736b616d6572026e6c00 7e74a8040000000000000000 31837 b6bd08b55010446277b80000000000000000 b6bd88b40000000000000000 31838 2c4e0000000100000000000003777777086e6f746963696173026e6c0000010001 2c4e8000000100000002000203777777086e6f746963696173026e6c0000010001c0100002000100015180000b036e73310473626970c019c01000020001000151800006036e7332c031c02d00010001000151800004d4ccecf1c04400010001000151800004c3a99564 31839 b6bf1e6b50104470b7d60000000000000000 b6bf9e640000000000000000 31840 b6bdaa43501844701b0c0000008fee51000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcce403c4e4e0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000 31841 31800000000100000000000006706c616e6574026e6c0000010001 31808000000100000003000306706c616e6574026e6c0000010001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 31842 b6bf1e6b5018447094dd0000008b0000000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403aff89403c510900030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004f4b465330314f4b42414e4b0000 b6bf9e640000000000000000 31843 b6be7cce50114312d0700000000000000000 b6befcc40000000000000000 31844 0000000070024000f0e400000204059801010402 000080010000000000000000 31845 b6bf1e7950114462b7480000000000000000 b6bf9e740000000000000000 31846 b1d800000001000000000000057069636f6e026e6c0000ff0001 b1d880000001000000020002057069636f6e026e6c0000ff0001c00c0002000100015180000a026e730469636d63c012c00c00020001000151800006036e7332c029c026000100010001518000043e643805c03c000100010001518000043e643806 31847 760d00000001000000000000036e73310b696e746572616363657373026e6c0000260001 760d80000001000000030001036e73310b696e746572616363657373026e6c0000260001c01000020001000151800002c00cc0100002000100015180001a09756e616c72697330310a6963742d626568656572036e657400c0100002000100015180000c09756e616c7269733032c048c00c00010001000151800004c1ad2362 31848 b6be7ccf50104312d06f0000000000000000 b6befcc40000000000000000 31849 b6c012365010432051660000000000000000 b6c092340000000000000000 31850 0000000070024000502d0000020405b401010402 000080010000000000000000 31851 b6bdaa5150114462706d0000000000000000 31852 b6c01236501843209f6a0000008bd4d8000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afcf2403c4e7200030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000 b6c092340000000000000000 31853 b6bf1e7a50104462b7470000000000000000 b6bf9e740000000000000000 31854 000000007002400049720000020405b401010402 000080010000000000000000 31855 b6c0be4f5010447003610000000000000000 31856 d2b9000000010000000000000377777706676f666f746f026e6c0000010001 d2b9800000010000000200020377777706676f666f746f026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c017c01000020001000151800006036e7332c02fc02b000100010001518000045054f347c047000100010001518000043e94a047 31857 b6c012445011431250d80000000000000000 b6c092440000000000000000 31858 000000007002400006b200000204059801010402 000080010000000000000000 31859 fdaa00100001000000000001026e73066863636e6574026e6c00000100010000290800000080000000 fdaa80000001000000020001026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c0310000291000000000000000 31860 b6c0be4f501844704c7700000098a800000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005c03677373096d6963726f736f667403636f6d00403b3488403c86080003000000394e544c4d535350000100000097b200e00b000b002e0000000e000e00200000005352564e53485549534b414d45524445485549534b414d45520000 31861 f75900000001000000000000077765622d6c6f67026e6c0000010001 f75980000001000000030003077765622d6c6f67026e6c0000010001c00c0002000100015180000b036e733104696c7365c014c00c00020001000151800006036e7332c02cc00c00020001000151800006036e7333c02cc028000100010001518000043e45a282c03f000100010001518000043e45a283c051000100010001518000043e45a284 31862 b6bdaa5250104462706c0000000000000000 31863 b6c15b51501044705fa30000000000000000 b6c1db540000000000000000 31864 b6c0be5d5011446202c60000000000000000 31865 da110000000100000000000005666f72756d0a666966616c6561677565026e6c0000010001 da118000000100000003000305666f72756d0a666966616c6561677565026e6c0000010001c0120002000100015180000f036e733108736572766963657ac01dc01200020001000151800006036e7332c035c01200020001000151800006036e7333c035c0310001000100015180000450f7cb0ac04c0001000100015180000450f7d401c05e00010001000151800004d5a0d7d2 31866 268e00000001000000000000036e7331046372696f026e6c0000010001 268e80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 31867 786900000001000000000000096964636f6c6c656765026e6c00000f0001 786980000001000000020001096964636f6c6c656765026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c016c04300010001000151800004c2860043 31868 709900000001000000000000036e7332046372696f026e6c0000010001 709980000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 31869 a56900000001000000000000037777770a72656372656174696566026e6c0000010001 a56980000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 31870 b6c012455010431250d70000000000000000 b6c092440000000000000000 31871 b6c242d15010432036960000000000000000 b6c2c2d40000000000000000 31872 888300000001000000000000056d61696c31076e6564636f6d70026e6c0000010001 888380000001000000020001056d61696c31076e6564636f6d70026e6c0000010001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 31873 358b00000001000000000000056d61696c31076e6564636f6d70026e6c00001c0001 358b80000001000000020001056d61696c31076e6564636f6d70026e6c00001c0001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 31874 964b00000001000000000000056d61696c31076e6564636f6d70026e6c0000260001 964b80000001000000020001056d61696c31076e6564636f6d70026e6c0000260001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 31875 76eb00000001000000000000056d61696c33076e6564636f6d70026e6c0000010001 76eb80000001000000020001056d61696c33076e6564636f6d70026e6c0000010001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 31876 9b9700000001000000000000056d61696c33076e6564636f6d70026e6c00001c0001 9b9780000001000000020001056d61696c33076e6564636f6d70026e6c00001c0001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 31877 3ca800000001000000000000056d61696c33076e6564636f6d70026e6c0000260001 3ca880000001000000020001056d61696c33076e6564636f6d70026e6c0000260001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 31878 b6c15b515018447058630000008fa09f000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcce403c4e4e0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000 b6c1db540000000000000000 31879 a3c70000000100000000000003667470076275696c646978026e6c0000010001 a3c78000000100000002000203667470076275696c646978026e6c0000010001c0100002000100015180000e026e7308696e7465726c6162c018c01000020001000151800006036e7332c02fc02c00010001000151800004d4cb0902c04600010001000151800004d4cb0903 31880 b6c242d1501843208bcc0000008bcda6000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afcf2403c4e7200030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000 b6c2c2d40000000000000000 31881 b6c0be5e5010446202c50000000000000000 31882 6d410000000100000000000003777777036b6f6e026e6c0000010001 6d418000000100000003000303777777036b6f6e026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc014c0100002000100015180000704646e7332c02dc0100002000100015180000704646e7333c02dc02800010001000151800004d44fe803c04200010001000151800004c3f5c782c05500010001000151800004d44ff303 31883 3e12000000010000000000000f6d6574616c656374726f2d6f6f7374026e6c00000f0001 3e12840300010000000100000f6d6574616c656374726f2d6f6f7374026e6c00000f0001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 31884 000000007002400051f60000020405b401010402 000080010000000000000000 31885 95f600000001000000000000037777770a6c65756b6567616d6573026e6c0000010001 95f680000001000000030003037777770a6c65756b6567616d6573026e6c0000010001c0100002000100015180000c036e7331056d61786573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f000100010001518000045045402ec047000100010001518000045045402fc059000100010001518000045045440a 31886 b6c242df5011431236080000000000000000 b6c2c2d40000000000000000 31887 5feb00000001000000000000036e73320564656d6f6e026e6c0000010001 5feb80000001000000030002036e73320564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 31888 b6c2c4ef50104470fe870000000000000000 31889 b6c15b5f501144625f110000000000000000 b6c1db540000000000000000 31890 b6c2c4ef501844709c1f000000985480000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005c03677373096d6963726f736f667403636f6d00403b3488403c86080003000000394e544c4d535350000100000097b200e00b000b002e0000000e000e00200000005352564e53485549534b414d45524445485549534b414d45520000 31891 000000007002400028970000020405b401010402 000080010000000000000000 31892 b6c242e05010431236070000000000000000 b6c2c2e40000000000000000 31893 b6c2c4fd50114462fdec0000000000000000 31894 a03b00000001000000000000076a6d6161736276026e6c00000f0001 a03b80000001000000020000076a6d6161736276026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02c 31895 37d600000001000000000000037777770a66756e6e7967616d6573026e6c026e6c0000010001 37d684030001000000010000037777770a66756e6e7967616d6573026e6c026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 31896 9f360000000100000000000004736d747003726463026e6c0000010001 9f368000000100000002000204736d747003726463026e6c0000010001c011000200010001518000100d7372726463303134646d7a3034c011c011000200010001518000100d7372726463303132646d7a3033c011c02900010001000151800004d973e064c04500010001000151800004d973e054 31897 828d0000000100000000000004616a6178066e696b686566026e6c0000010001 828d8000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 31898 01c000000001000000000000096b616e676f65726f65026e6c00000f0001 01c080000001000000020001096b616e676f65726f65026e6c00000f0001c00c0002000100015180000a036e733303777873c016c00c00020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 31899 0000000070024000c2030000020405b401010402 000080010000000000000000 31900 372d00000001000000000000146a756e696f726b616d6572686f6f67657665656e026e6c00000f0001 372d80000001000000020000146a756e696f726b616d6572686f6f67657665656e026e6c00000f0001c00c00020001000151800012036e733708786c736572766572036e657400c00c00020001000151800006036e7338c039 31901 b6c15b60501044625f100000000000000000 b6c1db640000000000000000 31902 b6c34b44501044704ed30000000000000000 b6c3cb440000000000000000 31903 28140000000100000000000009652d6c756e61746963026e6c0000010001 28148000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 31904 20520000000100000000000009652d6c756e61746963026e6c0000010001 20528000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 31905 fd2f00100001000000000001046d61696c03777873026e6c00000100010000290800000000000000 fd2f80000001000000030004046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a650000291000000000000000 31906 b6c3f5a6501044703ddd0000000000000000 31907 b6c34b44501844702f4c0000008fb8e6000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afcce403c4e4e0003000000304e544c4d535350000100000097b208e0040004002c0000000c000c002000000044432d505245434953494f4e465331410000 b6c3cb440000000000000000 31908 b6c3f5a650184470517400000098de80000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005c03677373096d6963726f736f667403636f6d00403b3488403c86080003000000394e544c4d535350000100000097b200e00b000b002e0000000e000e00200000005352564e53485549534b414d45524445485549534b414d45520000 31909 7fc500000001000000000000026e73066863636e6574026e6c0000010001 7fc580000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 31910 b6c2c4fe50104462fdeb0000000000000000 31911 329f000000010000000000000d7569747a656e6462757265617506706167696e61026e6c0000010001 329f800000010000000300030d7569747a656e6462757265617506706167696e61026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac01a00020001000151800006036e7333c01ac035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 31912 84c80000000100000000000006617363696e74026e6c00000f0001 84c88000000100000002000206617363696e74026e6c00000f0001c00c0002000100015180000b036e73310461786974c013c00c00020001000151800006036e7332c02bc027000100010001518000043e3a440bc03e000100010001518000043e3a440c 31913 8e1a000000010000000000000564757075790564656d6f6e026e6c00000f0001 8e1a800000010000000300020564757075790564656d6f6e026e6c00000f0001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c0120002000100015180000f036e73320564656d6f6e036e657400c02c00010001000151800004c29f4906c03e00010001000151800004c29fb004 31914 b6c3f5b4501144623d420000000000000000 31915 da2a00000001000000000000046d61696c03777873026e6c0000010001 da2a80000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 31916 fe3b000000010000000000000b6e732d767575727765726b07646f6f66706f74026e6c0000010001 fe3b800000010000000200020b6e732d767575727765726b07646f6f66706f74026e6c0000010001c0180002000100015180000f036e73310863616d627269756dc020c01800020001000151800006036e7332c038c03400010001000151800004d9131082c04f00010001000151800004d5efb202 31917 b6c34b52501144624e410000000000000000 b6c3cb540000000000000000 31918 b6c3f5b5501044623d410000000000000000 31919 77540000000100000000000002373303323035033132390231320a626c61636b686f6c657307656173796e6574026e6c0000050001 77548000000100000002000202373303323035033132390231320a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 31920 180400000001000000000000066377696e6574026e6c0000ff0001 180480000001000000030001066377696e6574026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc013c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c045c027000100010001518000043efa0202 31921 b6c34b53501044624e400000000000000000 b6c3cb540000000000000000 31922 6b1400000001000000000000037777770d737469636874696e6767616f73026e6c0000010001 6b1480000001000000020000037777770d737469636874696e6767616f73026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c035 31923 2d0a00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 2d0a80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 31924 53ba0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 53ba8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 31925 a548000000010000000000000377777709776562706972616174026e6c0000010001 a548800000010000000200020377777709776562706972616174026e6c0000010001c0100002000100015180000c036e7331056d756e6368c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5f73c96c04600010001000151800004d5f73c97 31926 01f50000000100000000000003777374026e6c00000f0001 01f58000000100000002000003777374026e6c00000f0001c00c0002000100015180001504646e73310a65617379736572766572036e657400c00c0002000100015180000704646e7332c029 31927 eb6500000001000000000000096d616e6761706f726e026e6c0000010001 eb6580000001000000020000096d616e6761706f726e026e6c0000010001c00c00020001000151800010036e73610674696e74656c03636f6d00c00c00020001000151800006036e7362c02e 31928 e51d00000001000000000000057873326465026e6c00000f0001 e51d80000001000000020002057873326465026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 31929 bad4000000010000000000000469697367026e6c0000010001 bad4800000010000000200020469697367026e6c0000010001c00c0002000100015180000e0b696973672d736572766572c00cc00c0002000100015180000e036e733107737572666e6574c011c02500010001000151800004c3a959c3c03f00010001000151800004c0576a65 31930 b0ec00000001000000000000087769656c61617264026e6c00000f0001 b0ec80000001000000020001087769656c61617264026e6c00000f0001c00c000200010001518000130b737061726373657276657204706c6578c015c00c0002000100015180000b026e73026e6c036e657400c02900010001000151800004c1439a0a 31931 3f4600000001000000000000046b6c7064026e6c00000f0001 3f4680000001000000020000046b6c7064026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 31932 002a00000001000000000000037777770774766e6f6f7264026e6c0000010001 002a80000001000000020002037777770774766e6f6f7264026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c018c01000020001000151800006036e7332c02fc02c00010001000151800004c3402003c04500010001000151800004c340202b 31933 0dec000000010000000000000776657273696f6e0462696e640000100003 0dec800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 31934 074b000000010000000000000463697479026e6c00000f0001 074b800000010000000300020463697479026e6c00000f0001c00c0002000100015180000e036e7331076e657463617374c011c00c00020001000151800006036e7332c029c00c0002000100015180000d036e7332036b706e036e657400c02500010001000151800004c2970101c03f00010001000151800004c297012d 31935 893100000001000000000000067667706f6875026e6c00000f0001 893184030001000000010000067667706f6875026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 31936 88410000000100000000000008686f73746e616d650462696e640000100003 88418000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31937 c6cf0000000100000000000006626f6f6d656e026e6c00000f0001 c6cf8000000100000002000206626f6f6d656e026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 31938 1d450000000100000000000008686f73746e616d650462696e640000100003 1d458000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31939 44d500000001000000000000036e733103727567026e6c0000010001 44d580000001000000030003036e733103727567026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004817d0406c03600010001000151800004817d040dc04800010001000151800004c0576a65 31940 43f300000001000000000000036e733203727567026e6c0000010001 43f380000001000000030003036e733203727567026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004817d0406c00c00010001000151800004817d040dc04800010001000151800004c0576a65 31941 1e8a0000000100000000000007766462636f6d70026e6c00001c0001 1e8a8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 31942 0e81000000010000000000000773747564656e7403657572026e6c0000ff0001 0e81800000010000000200020773747564656e7403657572026e6c0000ff0001c0140002000100015180000b086d61696c67617465c014c0140002000100015180000906706f70657965c014c02c0001000100015180000482730101c0430001000100015180000482730f02 31943 7b39000000010000000000000a6d696e66696e6d61696c026e6c00000f0001 7b39800000010000000200010a6d696e66696e6d61696c026e6c00000f0001c00c0002000100015180000a03646e7303756363c017c00c0002000100015180000b026e73026e6c036e657400c02b00010001000151800004c2e5670b 31944 08dd00000001000000000000087275677370617263046e656d6103727567026e6c0000010001 08dd80000001000000030003087275677370617263046e656d6103727567026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec03200010001000151800004817d0406c04400010001000151800004817d040dc05600010001000151800004c0576a65 31945 9cab000000010000000000000377777708776f6f6e73646167026e6c0000010001 9cab800000010000000200000377777708776f6f6e73646167026e6c0000010001c01000020001000151800011036e73310764726965626974036e657400c01000020001000151800006036e7332c031 31946 9e7200000001000000000000037777770f6d6569736a65736f6e74626c6f6f74026e6c0000010001 9e7280000001000000020000037777770f6d6569736a65736f6e74626c6f6f74026e6c0000010001c01000020001000151800015036e73310b64656272612d61646d696e03636f6d00c01000020001000151800006036e7332c038 31947 9af0000000010000000000000377777708676f6164656c6963026e6c0000010001 9af0800000010000000200020377777708676f6164656c6963026e6c0000010001c01000020001000151800013036e73310c706f77657273657276657234c019c01000020001000151800006036e7332c031c02d0001000100015180000451047428c04c0001000100015180000451047429 31948 1e3100000001000000000000037777770a64656c66746d61726b74026e6c0000010001 1e3180000001000000020002037777770a64656c66746d61726b74026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01bc01000020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 31949 b5ab000000010000000000000377777708636f6e2d6e656374026e6c0000010001 b5ab800000010000000200000377777708636f6e2d6e656374026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c043 31950 2afd0000000100000000000008686f73746e616d650462696e640000100003 2afd8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 31951 45df00000001000000000000037777770a6d69737465726d61696c026e6c0000010001 45df80000001000000020002037777770a6d69737465726d61696c026e6c0000010001c0100002000100015180000b036e73310477656233c01bc01000020001000151800006036e7332c033c02f00010001000151800004d436240ec04600010001000151800004c2b262ef 31952 41e200000001000000000000037777770864616e69656c6c61026e6c0000010001 41e280000001000000020002037777770864616e69656c6c61026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c019c01000020001000151800006036e7332c030c02d0001000100015180000450474002c04b0001000100015180000450474102 31953 b51600000001000000000000046d61696c0862697a6d61746368026e6c0000010001 b51680000001000000030003046d61696c0862697a6d61746368026e6c0000010001c0110002000100015180000f036e7331086e6f766178657373c01ac01100020001000151800006036e7332c032c01100020001000151800006036e7333c032c02e00010001000151800004d5c98015c04900010001000151800004d5c9bf12c05b00010001000151800004d5ef9c26 31954 be5400000001000000000000046d61696c0862697a6d61746368026e6c00001c0001 be5480000001000000030003046d61696c0862697a6d61746368026e6c00001c0001c0110002000100015180000f036e7331086e6f766178657373c01ac01100020001000151800006036e7332c032c01100020001000151800006036e7333c032c02e00010001000151800004d5c98015c04900010001000151800004d5c9bf12c05b00010001000151800004d5ef9c26 31955 f4bc00000001000000000000046d61696c0862697a6d61746368026e6c0000260001 f4bc80000001000000030003046d61696c0862697a6d61746368026e6c0000260001c0110002000100015180000f036e7331086e6f766178657373c01ac01100020001000151800006036e7332c032c01100020001000151800006036e7333c032c02e00010001000151800004d5c98015c04900010001000151800004d5c9bf12c05b00010001000151800004d5ef9c26 31956 321100000001000000000000047673736d026e6c0000010001 321180000001000000030001047673736d026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc011c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c043c025000100010001518000043efa0202 31957 d89400000001000000000000026e73067874646e6574026e6c00001c0001 d89480000001000000020002026e73067874646e6574026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 31958 0e8a00000001000000000000026e73067874646e6574026e6c0000260001 0e8a80000001000000020002026e73067874646e6574026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 31959 bc1300000001000000000000036b6d63026e6c0000010001 bc1380000001000000020000036b6d63026e6c0000010001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c028 31960 06910000000100000000000003777777086c6164796c696e65026e6c0000010001 06918000000100000002000003777777086c6164796c696e65026e6c0000010001c01000020001000151800010026e73076c756b6b69656e03636f6d00c01000020001000151800006036e7332c030 31961 0c8a000000010000000000000762616e6e6572730a737061617262656c6567026e6c0000010001 0c8a800000010000000200000762616e6e6572730a737061617262656c6567026e6c0000010001c01400020001000151800015026e730d646f6d61696e6e6574776f726b02736500c01400020001000151800006036e7332c036 31962 b69faca65018faf061d40000008dc500000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd1a403c4e9a00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 31963 b69faca65018faf061d40000008dc500000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd1a403c4e9a00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 31964 b69facb45011fae20a940000000000000000 31965 00af00000001000000000000037777770762656c73746174026e6c0000010001 00af80000001000000020000037777770762656c73746174026e6c0000010001c0100002000100015180000f036e73310669706f77657202626500c01000020001000151800006036e7332c030 31966 b69facb55010fae20a930000000000000000 31967 7bc7000000010000000000000377777703697263026e6c0000010001 7bc7800000010000000200020377777703697263026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c014c01000020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 31968 0f5d00000001000000000000036e73340767617574656e67026e6c0000010001 0f5d80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31969 bf320000000100000000000011716e2d3231332d3233312d3232382d313308717569636b6e6574026e6c0000010001 bf328000000100000003000211716e2d3231332d3233312d3232382d313308717569636b6e6574026e6c0000010001c01e00020001000151800011036e73310a6d756c74696b6162656cc027c01e00020001000151800006036e7332c03fc01e00020001000151800014036e73300a6d756c74696b6162656c036e657400c03b0001000100015180000450f2e002c0580001000100015180000450f2e006 31970 712e000000010000000000000c65766572732d6575726f7061026e6c0000010001 712e800000010000000200000c65766572732d6575726f7061026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c030 31971 0b2d000000010000000000000377777711676f6c647569747a656e64627572656175026e6c0000010001 0b2d800000010000000200020377777711676f6c647569747a656e64627572656175026e6c0000010001c0100002000100015180001a036e733113736d616c6c686f6c642d686f7374696e672d33c022c01000020001000151800006036e7332c03ac036000100010001518000045054ed64c05c000100010001518000045054ed65 31972 d17c00000001000000000000037777770973706f727473686f70026e6c0000010001 d17c80000001000000030003037777770973706f727473686f70026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004c1adf9c3c048000100010001518000043e70ec3cc05a00010001000151800004c1ac0bae 31973 752f00000001000000000000086f6d76616c3132310564656d6f6e026e6c00000f0001 752f80000001000000030002086f6d76616c3132310564656d6f6e026e6c00000f0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 31974 553900000001000000000000036e73310564656d6f6e026e6c00001c0001 553980000001000000030002036e73310564656d6f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 31975 5c7d00000001000000000000036e73310564656d6f6e026e6c0000260001 5c7d80000001000000030002036e73310564656d6f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 31976 505100000001000000000000036e73320564656d6f6e026e6c00001c0001 505180000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 31977 a91300000001000000000000036e73320564656d6f6e026e6c0000260001 a91380000001000000030002036e73320564656d6f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 31978 91e100000001000000000000036e733208726f616473696465026e6c0000010001 91e180000001000000020001036e733208726f616473696465026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180001108726f6164736964650564656d6f6ec019c02d00010001000151800004d973c077 31979 41a800000001000000000000037777770a67736d636f7272656374026e6c0000010001 41a880000001000000020002037777770a67736d636f7272656374026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01bc01000020001000151800006036e7332c033c02f000100010001518000045104580ac04f000100010001518000045104601e 31980 05fe00000001000000000000036e733109666972737466696e64026e6c0000010001 05fe80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31981 2f5400000001000000000000036e73330767617574656e67026e6c0000010001 2f5480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 31982 134000000001000000000000037777770a6b656c6465726d616e73026e6c0000010001 134080000001000000020000037777770a6b656c6465726d616e73026e6c0000010001c01000020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c01000020001000151800006036e7332c033 31983 419200000001000000000000036e733209666972737466696e64026e6c0000010001 419280000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31984 799c00000001000000000000037777770c6265616d6572706c616e6574026e6c0000010001 799c80000001000000020002037777770c6265616d6572706c616e6574026e6c0000010001c0100002000100015180001104646e733109616464766973696f6ec01dc0100002000100015180000704646e7332c036c031000100010001518000045054e242c04e000100010001518000045054e243 31985 0a940000000100000000000003616d76026e6c00000f0001 0a948000000100000003000103616d76026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 31986 6bad00000001000000000000036e7332076e657463617374026e6c0000010001 6bad80000001000000030002036e7332076e657463617374026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c02c00010001000151800004c2970101c00c00010001000151800004c297012d 31987 8d6100000001000000000000036e7331076e657463617374026e6c0000010001 8d6180000001000000030002036e7331076e657463617374026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c2970101c03a00010001000151800004c297012d 31988 a9ce00000001000000000000037777771165696e64686f76656e73646167626c6164026e6c0000010001 a9ce80000001000000020002037777771165696e64686f76656e73646167626c6164026e6c0000010001c0100002000100015180000e036e7331076e657463617374c022c01000020001000151800006036e7332c03ac03600010001000151800004c2970101c05000010001000151800004c297012d 31989 f648000000010000000000000377777708776f6f6e73646167026e6c0000010001 f648800000010000000200000377777708776f6f6e73646167026e6c0000010001c01000020001000151800011036e73310764726965626974036e657400c01000020001000151800006036e7332c031 31990 baab00000001000000000000036e73340962617365667265616b026e6c0000010001 baab80000001000000030003036e73340962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c03f000100010001518000045054f998c05100010001000151800004c16d7adb 31991 baac00000001000000000000036e73350962617365667265616b026e6c0000010001 baac80000001000000030003036e73350962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c03f000100010001518000045054f998c05100010001000151800004c16d7adb 31992 5af4000000010000000000000b6a6d6c706c75696a6d656e056d79776562026e6c0000010001 5af4800000010000000200000b6a6d6c706c75696a6d656e056d79776562026e6c0000010001c018000200010001518000160b6d797765622d61757468300777616e61646f6fc01ec0180002000100015180000e0b6d797765622d6175746831c03e 31993 2ba60000000100000000000005657367726f026e6c00001c0001 2ba68000000100000002000005657367726f026e6c00001c0001c00c00020001000151800013046e7233390834646e73686f737403636f6d00c00c00020001000151800007046e723430c02b 31994 73fa00000001000000000000036e733109666972737466696e64026e6c0000010001 73fa80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 31995 283b0000000100000000000003777777087370656c70756e74026e6c0000010001 283b8000000100000002000203777777087370656c70756e74026e6c0000010001c0100002000100015180000b036e73310470696e65c019c01000020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 31996 11d9000000010000000000000461726167026e6c00001c0001 11d9800000010000000200000461726167026e6c00001c0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c029 31997 14b10000000100000000000005626f6f6b73026e6c00000f0001 14b18000000100000002000205626f6f6b73026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 31998 350b00000001000000000000087369676e73686f70026e6c00000f0001 350b80000001000000020000087369676e73686f70026e6c00000f0001c00c0002000100015180000d026e7307706167656e6963c015c00c00020001000151800006036e7332c02c 31999 3bb500000001000000000000056c756b61730970726f766964656e74026e6c00001c0001 3bb580000001000000030002056c756b61730970726f766964656e74026e6c00001c0001c0120002000100015180000d036e733106776964657873c01cc01200020001000151800010036e733206776964657873036e657400c01200020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 32000 c8440000000100000000000006736d7470303307667265656c6572026e6c0000260001 c8448000000100000002000006736d7470303307667265656c6572026e6c0000260001c013000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0130002000100015180000e0b65766973702d6e732d3032c03b 32001 37990000000100000000000006736d7470303107667265656c6572026e6c00001c0001 37998000000100000002000006736d7470303107667265656c6572026e6c00001c0001c013000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0130002000100015180000e0b65766973702d6e732d3032c03b 32002 cd7d00000001000000000000026e730477656233026e6c0000010001 cd7d80000001000000020002026e730477656233026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc02800010001000151800004d436240ec03a00010001000151800004c2b262ef 32003 dde60000000100000000000004736d747007667265656c6572026e6c0000260001 dde68000000100000002000004736d747007667265656c6572026e6c0000260001c011000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0110002000100015180000e0b65766973702d6e732d3032c039 32004 165c0000000100000000000004736d747007667265656c6572026e6c00001c0001 165c8000000100000002000004736d747007667265656c6572026e6c00001c0001c011000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0110002000100015180000e0b65766973702d6e732d3032c039 32005 199c0000000100000000000004736d747007667265656c6572026e6c0000010001 199c8000000100000002000004736d747007667265656c6572026e6c0000010001c011000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0110002000100015180000e0b65766973702d6e732d3032c039 32006 30800000000100000000000006736d7470303707667265656c6572026e6c0000260001 30808000000100000002000006736d7470303707667265656c6572026e6c0000260001c013000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0130002000100015180000e0b65766973702d6e732d3032c03b 32007 a0650000000100000000000006736d7470303607667265656c6572026e6c0000260001 a0658000000100000002000006736d7470303607667265656c6572026e6c0000260001c013000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0130002000100015180000e0b65766973702d6e732d3032c03b 32008 fb0c0000000100000000000006736d7470303707667265656c6572026e6c00001c0001 fb0c8000000100000002000006736d7470303707667265656c6572026e6c00001c0001c013000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c0130002000100015180000e0b65766973702d6e732d3032c03b 32009 4f4700000001000000000000026e730477656233026e6c0000260001 4f4780000001000000020002026e730477656233026e6c0000260001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc02800010001000151800004d436240ec03a00010001000151800004c2b262ef 32010 c7c100000001000000000000036e73310a73686f636b6d65646961026e6c0000010001 c7c180000001000000020002036e73310a73686f636b6d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9d6fc03d00010001000151800004d5ef9d70 32011 7b4900000001000000000000036e73310a73686f636b6d65646961026e6c0000260001 7b4980000001000000020002036e73310a73686f636b6d65646961026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9d6fc03d00010001000151800004d5ef9d70 32012 fbce00000001000000000000036e73320a73686f636b6d65646961026e6c0000010001 fbce80000001000000020002036e73320a73686f636b6d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5ef9d6fc00c00010001000151800004d5ef9d70 32013 7de700000001000000000000036e73320a73686f636b6d65646961026e6c0000260001 7de780000001000000020002036e73320a73686f636b6d65646961026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5ef9d6fc00c00010001000151800004d5ef9d70 32014 4a3e000000010000000000000868657279676572730564656d6f6e026e6c00001c0001 4a3e800000010000000300020868657279676572730564656d6f6e026e6c00001c0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 32015 649400000001000000000000086261726d61746f6e026e6c00000f0001 649480000001000000020002086261726d61746f6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 32016 4a5c00000001000000000000037777770e6f6e64657277696a736465626174026e6c0000010001 4a5c80000001000000030001037777770e6f6e64657277696a736465626174026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01fc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c051c033000100010001518000043efa0202 32017 7b7b00000001000000000000036e733209666972737466696e64026e6c0000010001 7b7b80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 32018 7f96000000010000000000000e6d656c6b7765672d7a776f6c6c65026e6c0000010001 7f96800000010000000300020e6d656c6b7765672d7a776f6c6c65026e6c0000010001c00c0002000100015180000d036e733106776964657873c01bc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 32019 8d110000000100000000000003746261026e6c0000010001 8d118000000100000003000203746261026e6c0000010001c00c0002000100015180000d036e733106776964657873c010c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c028c02400010001000151800004d4ccc0fcc059000100010001518000043efa0703 32020 054700000001000000000000037777770777616c6d617274026e6c0000010001 054780000001000000020000037777770777616c6d617274026e6c0000010001c010000200010001518000120569646e7331066e6574736f6c03636f6d00c010000200010001518000080569646e7332c032 32021 223a00100001000000000001036e7331086e6f766178657373026e6c00000100010000290800000080000000 223a80000001000000030004036e7331086e6f766178657373026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c260000291000000000000000 32022 488000100001000000000001036e7332086e6f766178657373026e6c00000100010000290800000080000000 488080000001000000030004036e7332086e6f766178657373026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d5c98015c00c00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c260000291000000000000000 32023 076a00000001000000000000036e73330767617574656e67026e6c0000010001 076a80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32024 c46300000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b726f656465737472616174026e6c0000060001 c46384030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b726f656465737472616174026e6c0000060001c04200060001000038400036026e730f646f6d61696e2d7265676973747279c0420a686f73746d6173746572c0590bf1e540000070800000384000278d0000003840 32025 1cbf0000000100000000000015696d746563682d6d61696e74656e616e63652d6e6f026e6c00000f0001 1cbf8000000100000002000215696d746563682d6d61696e74656e616e63652d6e6f026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc022c00c00020001000151800006036e7332c03ac03600010001000151800004c3558244c04f00010001000151800004c3558245 32026 a45b000000010000000000000572656d697806706167696e61026e6c0000010001 a45b800000010000000300030572656d697806706167696e61026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c02d000100010001518000043e45a282c03f000100010001518000043e45a283c051000100010001518000043e45a284 32027 c92200000001000000000000026e7307706167656e6963026e6c0000010001 c92280000001000000030001026e7307706167656e6963026e6c0000010001c00f00020001000151800013026e730d7061676570726f636573736f72c017c00f00020001000151800006036e7332c02ec00f0002000100015180000d036e73320663617374656cc017c05c00010001000151800004c3558245 32028 e7c800000001000000000000037777770461726d74026e6c0000010001 e7c880000001000000020002037777770461726d74026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 32029 ea7700100001000000000001034e53320743495354524f4e024e4c00000100010000290800000080000000 ea7780000001000000020003034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 32030 1a9c00000001000000000000046b773163026e6c00000f0001 1a9c80000001000000020002046b773163026e6c00000f0001c00c00020001000151800018036e7331117468656e6574776f726b666163746f7279c011c00c00020001000151800006036e7332c029c02500010001000151800004d4cb0c35c04900010001000151800004d4cb0c34 32031 fd1900000001000000000000095f6b65726265726f73045f746370087370696465723031026e6c0000060001 fd1984030001000000010000095f6b65726265726f73045f746370087370696465723031026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 32032 4010000000010000000000000377777705646f6c6c7a026e6c0000010001 4010800000010000000200020377777705646f6c6c7a026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec016c01000020001000151800006036e7332c02ec02a00010001000151800004c3b1f203c04800010001000151800004d4ccf533 32033 03e0000000010000000000000377777705626f6b6f65026e6c0000010001 03e0800000010000000200020377777705626f6b6f65026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7334c010c02a00010001000151800004d554b1dcc03c00010001000151800004d5540479 32034 5c5d0000000100000000000007666f7274726f6e026e6c00000f0001 5c5d8000000100000002000007666f7274726f6e026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 32035 1f5500000001000000000000057370656c72026e6c0000010001 1f5584030001000000010000057370656c72026e6c0000010001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 32036 fe3f000000010000000000000b6e732d767575727765726b07646f6f66706f74026e6c0000010001 fe3f800000010000000200020b6e732d767575727765726b07646f6f66706f74026e6c0000010001c0180002000100015180000f036e73310863616d627269756dc020c01800020001000151800006036e7332c038c03400010001000151800004d9131082c04f00010001000151800004d5efb202 32037 7efd0000000100000000000003777777087365616d6f756e74026e6c0000010001 7efd8000000100000002000203777777087365616d6f756e74026e6c0000010001c01000020001000151800012036e73310b676c6f62616c7369746573c019c01000020001000151800006036e7332c031c02d00010001000151800004d4cce37ac04b00010001000151800004d94d8b0c 32038 474400000001000000000000095f6b65726265726f73045f756470087370696465723031026e6c0000060001 474484030001000000010000095f6b65726265726f73045f756470087370696465723031026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 32039 92830000000100000000000003777777086461746570616765026e6c0000010001 92838000000100000002000203777777086461746570616765026e6c0000010001c0100002000100015180000f026e7309656174736572766572c019c01000020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 32040 9df800000001000000000000036e733103666a66026e6c0000010001 9df880000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32041 063b00000001000000000000036e733206726f632d6f6e026e6c0000010001 063b80000001000000020002036e733206726f632d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b0001000100015180000491614082c00c0001000100015180000491616142 32042 97c900000001000000000000036e733206726f632d6f6e026e6c0000260001 97c980000001000000020002036e733206726f632d6f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b0001000100015180000491614082c00c0001000100015180000491616142 32043 aec000000001000000000000036e733106726f632d6f6e026e6c0000010001 aec080000001000000020002036e733106726f632d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491614082c0390001000100015180000491616142 32044 2bdf00000001000000000000036e733106726f632d6f6e026e6c0000260001 2bdf80000001000000020002036e733106726f632d6f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491614082c0390001000100015180000491616142 32045 9df900000001000000000000036e733203666a66026e6c0000010001 9df980000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32046 8fb7000000010000000000000b6175746f6e616275757273026e6c0000010001 8fb7800000010000000200020b6175746f6e616275757273026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c018c00c00020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 32047 0cae00000001000000000000086577646e747330340b6f6265696e64686f76656e026e6c0000010001 0cae80000001000000020002086577646e747330340b6f6265696e64686f76656e026e6c0000010001c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c021c00c00010001000151800004c3a91823c04300010001000151800004c0576a65 32048 94bf00000001000000000000037777770d7075626c69656b77696a7a6572026e6c0000010001 94bf80000001000000020002037777770d7075626c69656b77696a7a6572026e6c0000010001c0100002000100015180000c046d6972610470696361c01ec0100002000100015180000e036e733107737572666e6574c01ec03200010001000151800004c057680ec04a00010001000151800004c0576a65 32049 9e2200000001000000000000036e733103666a66026e6c0000010001 9e2280000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32050 824a00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 824a80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 32051 9e2300000001000000000000036e733203666a66026e6c0000010001 9e2380000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32052 480200000001000000000000026e7306787334616c6c026e6c00001c0001 480280000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 32053 a68000000001000000000000026e7306787334616c6c026e6c0000260001 a68080000001000000030002026e7306787334616c6c026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 32054 255700000001000000000000036e733206787334616c6c026e6c00001c0001 255780000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 32055 9d0400000001000000000000036e733206787334616c6c026e6c0000260001 9d0480000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 32056 6c3d00000001000000000000157665726b656572737363686f6f6c76646265726768026e6c0000010001 6c3d80000001000000020001157665726b656572737363686f6f6c76646265726768026e6c0000010001c00c0002000100015180000a036e733303777873c022c00c00020001000151800006036e7334c03ac04c00010001000151800004d5ef9a65 32057 f3f200000001000000000000034e53320743495354524f4e024e4c0000010001 f3f280000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 32058 7f880000000100000000000005646e732d32056c61646f74026e6c0000010001 7f888000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32059 1e9500000001000000000000067363616e6961026e6c00000f0001 1e9580000001000000020001067363616e6961026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c013c04000010001000151800004c2860043 32060 c06f00000001000000000000037777770877696a62656e6761026e6c0000010001 c06f80000001000000020000037777770877696a62656e6761026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c033 32061 9e2000000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 9e2080000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 32062 eaca000000010000000000001c67736d636f72726563742d6d6f6269656c652d74656c65666f6f6e73026e6c0000010001 eaca800000010000000200001c67736d636f72726563742d6d6f6269656c652d74656c65666f6f6e73026e6c0000010001c00c0002000100015180000a036e7331036c7731c029c00c00020001000151800006036e7332c041 32063 5a39000000010000000000000c7573732d776f726b77656172026e6c00000f0001 5a39800000010000000200000c7573732d776f726b77656172026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 32064 df0300000001000000000000037777770e62656472696a667374656e6e69730d616661732d736f667477617265026e6c0000010001 df0380000001000000020000037777770e62656472696a667374656e6e69730d616661732d736f667477617265026e6c0000010001c01f00020001000151800011036e733005736572766502636f02756b00c01f00020001000151800010036e7330057365727665036e6574c04e 32065 d670000000010000000000000377777706637261736163026e6c0000010001 d670800000010000000200000377777706637261736163026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c031 32066 0f9400000001000000000000036e73330767617574656e67026e6c0000010001 0f9480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32067 957200000001000000000000036e733303777873026e6c0000010001 957280000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 32068 2585000000010000000000000377777707666f726d69646f026e6c0000010001 2585800000010000000300030377777707666f726d69646f026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004c3f13ceec04800010001000151800004c372eb43c05a000100010001518000043e320e8f 32069 81e300000001000000000000036e7332117468656e6574776f726b666163746f7279026e6c00001c0001 81e380000001000000020002036e7332117468656e6574776f726b666163746f7279026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03600010001000151800004d4cb0c35c00c00010001000151800004d4cb0c34 32070 9b8700000001000000000000036e7331117468656e6574776f726b666163746f7279026e6c00001c0001 9b8780000001000000020002036e7331117468656e6574776f726b666163746f7279026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cb0c35c04400010001000151800004d4cb0c34 32071 f6ba00000001000000000000037777770b68696b696e672d73697465026e6c0000010001 f6ba80000001000000020002037777770b68696b696e672d73697465026e6c0000010001c0100002000100015180000a036e7331036e7873c01cc01000020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 32072 60dc0000000100000000000003777777096d6172676172657468026e6c0000010001 60dc8000000100000002000003777777096d6172676172657468026e6c0000010001c01000020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c01000020001000151800006036e7332c032 32073 4e98000000010000000000000377777706676f6f67656c026e6c0000010001 4e98800000010000000200020377777706676f6f67656c026e6c0000010001c0100002000100015180000a036e7331036e7873c017c01000020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 32074 2bbf00000001000000000000036e73320763697374726f6e026e6c0000010001 2bbf80000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 32075 52970000000100000000000005656e65636f026e6c00000f0001 52978000000100000002000205656e65636f026e6c00000f0001c00c0002000100015180000c04646e73310470696e73c012c00c0002000100015180000704646e7332c02bc02600010001000151800004d9c26101c03e00010001000151800004d9c26002 32076 4b0400000001000000000000037777770762656c6368656d026e6c0000010001 4b0484030001000000010000037777770762656c6368656d026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 32077 8d6700000001000000000000046d61696c05626f736d61026e6c0000010001 8d6780000001000000020002046d61696c05626f736d61026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c017c01100020001000151800006036e7332c02fc02b00010001000151800004d43d0f08c04900010001000151800004d43d19e2 32078 a88e00000001000000000000046d61696c05626f736d61026e6c00001c0001 a88e80000001000000020002046d61696c05626f736d61026e6c00001c0001c01100020001000151800012036e73310b7669616e6574776f726b73c017c01100020001000151800006036e7332c02fc02b00010001000151800004d43d0f08c04900010001000151800004d43d19e2 32079 2ea2000000010000000000000462757267026e6c0000010001 2ea2800000010000000200020462757267026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 32080 06e200000001000000000000037777770768657364617364026e6c0000010001 06e284030001000000010000037777770768657364617364026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 32081 ac9800000001000000000000036d78310464697661026e6c0000010001 ac9880000001000000020000036d78310464697661026e6c0000010001c0100002000100015180000e036e73310464697661036e657400c01000020001000151800006036e7332c02d 32082 6cf60000000100000000000009636f6d6d706f6f7274096369746f67726f6570026e6c0000010001 6cf68000000100000002000209636f6d6d706f6f7274096369746f67726f6570026e6c0000010001c01600020001000151800005026e73c016c0160002000100015180000e036e733107737572666e6574c020c03400010001000151800004c3a93002c04500010001000151800004c0576a65 32083 827000000001000000000000026e7303616d730874656c6567617465026e6c0000010001 827080000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 32084 37a400000001000000000000036e73340767617574656e67026e6c0000010001 37a480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32085 1faf00000001000000000000036e73340767617574656e67026e6c0000010001 1faf80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32086 178c00000001000000000000036e73330767617574656e67026e6c0000010001 178c80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32087 00940000000100000000000009652d6c756e61746963026e6c0000010001 00948000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 32088 549a000000010000000000000a6d6f6e69746f72696e6706776964657873026e6c00000f0001 549a800000010000000300020a6d6f6e69746f72696e6706776964657873026e6c00000f0001c01700020001000151800006036e7331c017c01700020001000151800010036e733206776964657873036e657400c01700020001000151800006036e7333c017c03200010001000151800004d4ccc0fcc060000100010001518000043efa0703 32089 1c0d00000001000000000000036e73310573796e6574026e6c0000010001 1c0d80000001000000020002036e73310573796e6574026e6c0000010001c0100002000100015180000a036e73310373796ec016c01000020001000151800006036e7332c02ec02a00010001000151800004d4ccc0dbc04000010001000151800004d4ccc0dc 32090 1bd00000000100000000000004646e73310470696e73026e6c0000010001 1bd08000000100000002000204646e73310470696e73026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9c26101c03800010001000151800004d9c26002 32091 e515000000010000000000000c65766572732d6575726f7061026e6c00000f0001 e515800000010000000200000c65766572732d6575726f7061026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c030 32092 b23c00100001000000000001086a766d347265616c06787334616c6c026e6c00000100010000290800000080000000 b23c80000001000000030003086a766d347265616c06787334616c6c026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c0150002000100015180000d026e730472697065036e657400c03000010001000151800004c26d0642c04100010001000151800004c26d09630000291000000000000000 32093 758c00000001000000000000036e7331077472696f646573026e6c0000010001 758c80000001000000020002036e7331077472696f646573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5c9d865c03a00010001000151800004d5c9d866 32094 a01f0010000100000000000105646e732d32056c61646f74026e6c00000100010000290800000000000000 a01f8000000100000002000105646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c0320000291000000000000000 32095 f7e70010000100000000000105646e732d31056c61646f74026e6c00000100010000290800000000000000 f7e78000000100000002000105646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c0320000291000000000000000 32096 964900000001000000000000086a766d347265616c06787334616c6c026e6c0000010001 964980000001000000030002086a766d347265616c06787334616c6c026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c0150002000100015180000d026e730472697065036e657400c03000010001000151800004c26d0642c04100010001000151800004c26d0963 32097 a0e800000001000000000000036e733107626265796f6e64026e6c0000010001 a0e880000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 32098 4f4f00000001000000000001036e73320f444f4d41494e2d5245474953545259024e4c00001c00010000291000000000000000 4f4f80000001000000030003036e73320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 32099 650400000001000000000001036e733107737572666e6574024e4c00001c00010000291000000000000000 650480000001000000040004036e733107737572666e6574024e4c00001c0001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 32100 d33400000001000000000001026e730f444f4d41494e2d5245474953545259024e4c00001c00010000291000000000000000 d33480000001000000030003026e730f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a650000291000000000000000 32101 e7c800000001000000000001034e53330f444f4d41494e2d5245474953545259024e4c00001c00010000291000000000000000 e7c880000001000000030003034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 32102 352b0000000100000000000004706f70330873796c746d6f6465026e6c0000010001 352b8000000100000002000204706f70330873796c746d6f6465026e6c0000010001c01100020001000151800010036e733109756e69736572766572c01ac01100020001000151800006036e7332c032c02e00010001000151800004c3454b03c04a00010001000151800004d119a2fa 32103 401a00000001000000000000047072693103646e73067073696e6574026e6c0000260001 401a80000001000000030003047072693103646e73067073696e6574026e6c0000260001c01500020001000151800002c00cc015000200010001518000070470726932c011c015000200010001518000070470726933c011c00c000100010001518000049a0ff9a6c03e000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 32104 104200000001000000000000047072693303646e73067073696e6574026e6c0000260001 104280000001000000030003047072693303646e73067073696e6574026e6c0000260001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c01500020001000151800002c00cc030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac00c000100010001518000049a0ff9ae 32105 413a000000010000000000000377777703686931026e6c0000010001 413a800000010000000200000377777703686931026e6c0000010001c01000020001000151800010036e73310673697465347503636f6d00c01000020001000151800006036e7332c02c 32106 814300000001000000000000047072693203646e73067073696e6574026e6c0000260001 814380000001000000030003047072693203646e73067073696e6574026e6c0000260001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 32107 7a9300000001000000000000037777770873706f72746f6e65026e6c0000010001 7a9380000001000000020002037777770873706f72746f6e65026e6c0000010001c0100002000100015180000a036e7331036e7873c019c01000020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 32108 827800000001000000000000026e7303616d730874656c6567617465026e6c0000010001 827880000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 32109 bd7100000001000000000000036e73310974656c656b6162656c026e6c0000010001 bd7180000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 32110 cf7400000001000000000000046e733032066368656c6c6f026e6c0000010001 cf7480000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 32111 a2e300000001000000000000026e730a636f6d7075747261696e026e6c0000010001 a2e380000001000000020001026e730a636f6d7075747261696e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e7334036b706e036e657400c00c00010001000151800004c297b902 32112 c174000000010000000000000a73746f66666572696e671264756f2d746f7461616c2d70726f6a656374026e6c0000010001 c174800000010000000200020a73746f66666572696e671264756f2d746f7461616c2d70726f6a656374026e6c0000010001c0170002000100015180000a036e733103696166c02ac01700020001000151800006036e7332c042c03e000100010001518000045059e040c054000100010001518000045059ee03 32113 03400000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 03408000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 32114 3088000000010000000000000649535241454c024e4c0000010001 3088800000010000000200020649535241454c024e4c0000010001c00c00020001000151800011026e730b666163696e676661637473c013c00c00020001000151800006036e7332c02ac02700010001000151800004d513b013c04400010001000151800004d513b012 32115 cd92000000010000000000000869766f6e69656865026e6c0000010001 cd92800000010000000200000869766f6e69656865026e6c0000010001c00c0002000100015180000d036e733103326d6203636f6d00c00c00020001000151800006036e7332c02d 32116 fa5300000001000000000000095f6b65726265726f73045f74637006656c696e6574026e6c0000060001 fa5384030001000000010000095f6b65726265726f73045f74637006656c696e6574026e6c0000060001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 32117 e18c000000010000000000000c74616c6c65726576656e7473026e6c00000f0001 e18c800000010000000200020c74616c6c65726576656e7473026e6c00000f0001c00c0002000100015180000e04646e733106666f7263657ac019c00c0002000100015180000704646e7332c032c02d00010001000151800004d994af13c04700010001000151800004d994af1a 32118 be54000000010000000000000777616e61646f6f026e6c00000f0001 be54800000010000000200010777616e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 32119 b80100000001000000000000026e73076575726f6e6574026e6c0000010001 b80180000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 32120 8eab000000010000000000000c636f6c6c6567657374796c65026e6c0000010001 8eab800000010000000200010c636f6c6c6567657374796c65026e6c0000010001c00c0002000100015180000a036e733303777873c019c00c00020001000151800006036e7334c031c04300010001000151800004d5ef9a65 32121 b5c9000000010000000000000377777708776f657374796e65026e6c0000010001 b5c9800000010000000200020377777708776f657374796e65026e6c0000010001c01000020001000151800009026e7303697873c019c01000020001000151800006036e7332c030c02d00010001000151800004d4f13ff8c04200010001000151800004d4f13ff9 32122 94d4000000010000000000000b616f2d7365727669636573026e6c0000010001 94d4800000010000000200020b616f2d7365727669636573026e6c0000010001c00c0002000100015180000e026e73086d656761706c6578c018c00c00020001000151800006036e7331c02fc02c00010001000151800004504f6101c04600010001000151800004504f6102 32123 f05600000001000000000000036e73310764696a6b6d6174026e6c0000010001 f05680000001000000020002036e73310764696a6b6d6174026e6c0000010001c01000020001000151800002c00cc0100002000100015180000d036e733206787334616c6cc018c00c00010001000151800004507fba3ac03a00010001000151800004c26d0963 32124 03400000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 03408000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 32125 4f4f00000001000000000000036e73320f444f4d41494e2d5245474953545259024e4c00001c0001 4f4f80000001000000030002036e73320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32126 22bd00000001000000000000037777770a64657374617274657273026e6c0000010001 22bd80000001000000020000037777770a64657374617274657273026e6c0000010001c0100002000100015180000f036e7331053132337873036e657400c01000020001000151800006036e7332c033 32127 650400000001000000000000036e733107737572666e6574024e4c00001c0001 650480000001000000040003036e733107737572666e6574024e4c00001c0001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 32128 03400000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 03408000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 32129 f1500100000100000000000004616a6178066e696b686566026e6c0000010001 f1508100000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 32130 d33400000001000000000000026e730f444f4d41494e2d5245474953545259024e4c00001c0001 d33480000001000000030002026e730f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 32131 2dcf0000000100000000000005646e732d31056c61646f74026e6c0000010001 2dcf8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32132 e7c800000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 e7c880000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32133 1db90000000100000000000008686f73746e616d650462696e640000100003 1db98000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32134 d6c300000001000000000000037777770a6d6f6c6c696765736578026e6c0000010001 d6c380000001000000020000037777770a6d6f6c6c696765736578026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 32135 4ace0000000100000000000005646e732d31056c61646f74026e6c0000010001 4ace8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32136 2dd00000000100000000000005646e732d32056c61646f74026e6c0000010001 2dd08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32137 1e1f0000000100000000000004686f6d65066863636e6574026e6c0000010001 1e1f8000000100000002000004686f6d65066863636e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c033 32138 16d90000000100000000000005646e732d31056c61646f74026e6c0000010001 16d98000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32139 80230000000100000000000005646e732d32056c61646f74026e6c0000010001 80238000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32140 432000000001000000000000036e733103677673026e6c00001c0001 432080000001000000020002036e733103677673026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e1aac03600010001000151800004d4ccc646 32141 c28c00000001000000000000036e733203677673026e6c00001c0001 c28c80000001000000020002036e733203677673026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc028000100010001518000045054e1aac00c00010001000151800004d4ccc646 32142 88d500000001000000000000046d61696c05626f736d61026e6c0000010001 88d580000001000000020002046d61696c05626f736d61026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c017c01100020001000151800006036e7332c02fc02b00010001000151800004d43d0f08c04900010001000151800004d43d19e2 32143 04e400000001000000000000046d61696c05626f736d61026e6c00001c0001 04e480000001000000020002046d61696c05626f736d61026e6c00001c0001c01100020001000151800012036e73310b7669616e6574776f726b73c017c01100020001000151800006036e7332c02fc02b00010001000151800004d43d0f08c04900010001000151800004d43d19e2 32144 05f100000001000000000000046e73303803777873026e6c0000010001 05f180000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 32145 c0f100000001000000000000046e73303803777873026e6c0000260001 c0f180000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 32146 72d10000000100000000000008686f73746e616d650462696e640000100003 72d18000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32147 3ad900000001000000000000076e73617574683303626974026e6c0000260001 3ad980000001000000030003076e73617574683303626974026e6c0000260001c0140002000100015180000a076e736175746831c014c0140002000100015180000a076e736175746832c014c01400020001000151800002c00cc02c00010001000151800004d5880c33c04200010001000151800004d5880c3bc00c00010001000151800004d4ccc00b 32148 989500000001000000000000076e73617574683203626974026e6c0000260001 989580000001000000030003076e73617574683203626974026e6c0000260001c0140002000100015180000a076e736175746831c014c01400020001000151800002c00cc0140002000100015180000a076e736175746833c014c02c00010001000151800004d5880c33c00c00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 32149 15fc00000001000000000000076e73617574683103626974026e6c0000260001 15fc80000001000000030003076e73617574683103626974026e6c0000260001c01400020001000151800002c00cc0140002000100015180000a076e736175746832c014c0140002000100015180000a076e736175746833c014c00c00010001000151800004d5880c33c03a00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 32150 3cf600000001000000000000037777770f6d6569736a65736f6e74626c6f6f74026e6c0000010001 3cf680000001000000020000037777770f6d6569736a65736f6e74626c6f6f74026e6c0000010001c01000020001000151800015036e73310b64656272612d61646d696e03636f6d00c01000020001000151800006036e7332c038 32151 c67a000000010000000000000a67617a6f63656e747261026e6c0000010001 c67a800000010000000200000a67617a6f63656e747261026e6c0000010001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02f 32152 5a1e00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 5a1e80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32153 36aa000000010000000000000762736d74702d3108636f6e6365707473026e6c0000010001 36aa800000010000000200020762736d74702d3108636f6e6365707473026e6c0000010001c0140002000100015180001103646e730a636f6e63657074736661c01dc0140002000100015180000704646e7332c014c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e1c 32154 5860000000010000000000000762736d74702d3108636f6e6365707473026e6c00001c0001 5860800000010000000200020762736d74702d3108636f6e6365707473026e6c00001c0001c0140002000100015180001103646e730a636f6e63657074736661c01dc0140002000100015180000704646e7332c014c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e1c 32155 e2cc0000000100000000000003616c68026e6c00000f0001 e2cc8000000100000002000103616c68026e6c00000f0001c00c00020001000151800010036e7331096c65617365706c616ec010c00c0002000100015180000b026e73026e6c036e657400c02400010001000151800004c286e702 32156 358b00000001000000000000037777770a6d657562656c7475696e026e6c0000010001 358b80000001000000020000037777770a6d657562656c7475696e026e6c0000010001c0100002000100015180000f046e7330310464736e6c036e657400c01000020001000151800007046e733032c034 32157 875a0000000100000000000007766f732d776870026e6c0000060001 875a8403000100000001000007766f732d776870026e6c0000060001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 32158 300b000000010000000000000672656c6179330b7669616e6574776f726b73026e6c0000010001 300b800000010000000200020672656c6179330b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 32159 23a20000000100000000000003777777056d6f72656c026e6c0000010001 23a28000000100000003000303777777056d6f72656c026e6c0000010001c01000020001000151800012026e730c6d65646961636f6e6e656374c016c01000020001000151800013036e73320c776f726c64636f6e6e656374c016c01000020001000151800006036e7333c04cc02a00010001000151800004d5ef9b8bc04800010001000151800004d5ef9b85c06700010001000151800004d5ef8005 32160 c33200000001000000000000026763065f6d7364637307766f732d776870026e6c0000060001 c33284030001000000010000026763065f6d7364637307766f732d776870026e6c0000060001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 32161 a6d90000000100000000000005646e732d32056c61646f74026e6c0000010001 a6d98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32162 94670000000100000000000005646e732d31056c61646f74026e6c0000010001 94678000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32163 5e33000000010000000000000b6b6f6f707362656464656e026e6c00000f0001 5e33800000010000000200020b6b6f6f707362656464656e026e6c00000f0001c00c00020001000151800011026e730b6973642d686f6c6c616e64c018c00c00020001000151800006036e7332c02fc02c00010001000151800004d5e38d0ac04900010001000151800004d5e38205 32164 08bd00000001000000000000096879706f746865656b0a6c65756b657374617274026e6c0000010001 08bd80000001000000030003096879706f746865656b0a6c65756b657374617274026e6c0000010001c0160002000100015180000c036e7331056d61786573c021c01600020001000151800006036e7332c039c01600020001000151800006036e7333c039c035000100010001518000045045402ec04d000100010001518000045045402fc05f000100010001518000045045440a 32165 940400000001000000000000046d61696c0642415257494c024e4c0000010001 940480000001000000020002046d61696c0642415257494c024e4c0000010001c01100020001000151800010036e733109686f73746e65746276c018c01100020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 32166 d16100000001000000000000096e61747572616c6973036e6e6d026e6c00000f0001 d16180000001000000020002096e61747572616c6973036e6e6d026e6c00000f0001c01600020001000151800013036e73310c636f6c742d74656c65636f6dc01ac01600020001000151800006036e7332c032c02e00010001000151800004d44ea00dc04d00010001000151800004d44ea00e 32167 04f20000000100000000000003777777076e6574706f6c6c026e6c0000010001 04f28000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 32168 fc8700000001000000000000037777770d747261666669636265616d6572026e6c0000010001 fc8780000001000000020002037777770d747261666669636265616d6572026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c01ec01000020001000151800006036e7332c036c03200010001000151800004d5efa404c04f00010001000151800004d5efa405 32169 f26800000001000000000000036e733103736369036b756e024e4c00001c0001 f26880000001000000030003036e733103736369036b756e024e4c00001c0001c0140002000100015180000f08636170796261726103756369c014c01400020001000151800002c00cc0140002000100015180000e036e733107737572666e6574c018c02c0001000100015180000483ae3c15c00c0001000100015180000483aee004c05500010001000151800004c0576a65 32170 72c3000000010000000000000631326d6f7665026e6c00000f0001 72c3800000010000000300020631326d6f7665026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 32171 3b7b00000001000000000000037777770a766f6963656f76657273026e6c0000010001 3b7b80000001000000020000037777770a766f6963656f76657273026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 32172 5865000000010000000000000563696e64790c616374697665646f6d61696e026e6c0000010001 5865800000010000000300000563696e64790c616374697665646f6d61696e026e6c0000010001c01200020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01200020001000151800006036e7332c037c01200020001000151800006036e7333c037 32173 586600000001000000000000076e65656c746a650c616374697665646f6d61696e026e6c0000010001 586680000001000000030000076e65656c746a650c616374697665646f6d61696e026e6c0000010001c01400020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01400020001000151800006036e7332c039c01400020001000151800006036e7333c039 32174 285b00000001000000000000077365727665723103747763026e6c0000010001 285b80000001000000020002077365727665723103747763026e6c0000010001c01400020001000151800012036e73310b7669616e6574776f726b73c018c01400020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 32175 a11200000001000000000000036e733404686f6d65026e6c0000010001 a11280000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 32176 ff44000000010000000000000f646f6d61696e2d7265676973747279026e6c0000010001 ff44800000010000000300020f646f6d61696e2d7265676973747279026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000e036e733107737572666e6574c01cc00c0002000100015180000b026e73026e6c036e657400c03000010001000151800004c1b09002c04100010001000151800004c0576a65 32177 3077000000010000000000000a62657272796672657368026e6c0000010001 3077800000010000000200010a62657272796672657368026e6c0000010001c00c0002000100015180000e036e733107626c7565646e73c017c00c00020001000151800006036e7334c02fc02b00010001000151800004d5c401c0 32178 fc4400000001000000000000037777770668617362726f026e6c0000010001 fc4480000001000000020000037777770668617362726f026e6c0000010001c01000020001000151800018036e73310e66696e616c2d66726f6e74696572036e657400c01000020001000151800006036e7332c02f 32179 eea700000001000000000000037777770a6c6f63617469656e6574026e6c0000010001 eea780000001000000020002037777770a6c6f63617469656e6574026e6c0000010001c0100002000100015180000b036e733104696e666fc01bc01000020001000151800006036e7332c033c02f00010001000151800004504fc020c04600010001000151800004504fc021 32180 32e800000001000000000000046d61696c086e65646c696e7578026e6c0000010001 32e880000001000000030003046d61696c086e65646c696e7578026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02e00010001000151800004d5ef87d2c04000010001000151800004d5ef87d3c05200010001000151800004d5ef8005 32181 7677000000010000000000000377777709666375747265636874026e6c0000010001 7677800000010000000200000377777709666375747265636874026e6c0000010001c0100002000100015180000e026e730571666c6578036e657400c01000020001000151800006036e7332c031 32182 04c800000001000000000000066163686d6561026e6c00000f0001 04c880000001000000030003066163686d6561026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c013c00c000200010001518000070470726932c02cc00c000200010001518000070470726933c02cc027000100010001518000049a0ff9a6c045000100010001518000049a0ff9aac058000100010001518000049a0ff9ae 32183 576000000001000000000000036e733203757063026e6c0000010001 576080000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 32184 c67c0000000100000000000006746963617361026e6c00000f0001 c67c8000000100000003000206746963617361026e6c00000f0001c00c00020001000151800015036e73310e666c6578776562686f7374696e67c013c00c00020001000151800006036e7332c02bc00c00020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c02700010001000151800004cf2cd7adc0480001000100015180000452c04365 32185 f83b0000000100000000000006756e69717565026e6c00000f0001 f83b8000000100000003000306756e69717565026e6c00000f0001c00c00020001000151800010036e733109736974656279746573c013c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02bc02700010001000151800004c2a55e5ac04300010001000151800004c356781cc055000100010001518000043ec58016 32186 f7cc000000010000000000000773616e7175696e026e6c0000010001 f7cc800000010000000300000773616e7175696e026e6c0000010001c00c00020001000151800013036e7331096a61636f62736e657403636f6d00c00c00020001000151800006036e7332c02cc00c00020001000151800012046e73303107696e746f756368036e657400 32187 745900000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730a706f6d706f656e2d6d6d026e6c0000060001 745984030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730a706f6d706f656e2d6d6d026e6c0000060001c04f00060001000038400036026e730f646f6d61696e2d7265676973747279c04f0a686f73746d6173746572c0660bf1e540000070800000384000278d0000003840 32188 525400000001000000000000037777770c706f77657270617373696f6e026e6c0000010001 525480000001000000020002037777770c706f77657270617373696f6e026e6c0000010001c0100002000100015180000c04646e73310471776562c01dc0100002000100015180000704646e7332c036c03100010001000151800004d994ac0cc04900010001000151800004d5c42f6c 32189 485e0000000100000000000003777873026e6c00000f0001 485e8000000100000003000303777873026e6c00000f0001c00c00020001000151800007046e733038c00cc00c00020001000151800007046e733039c00cc00c00020001000151800006036e7334c00cc02400010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 32190 000328000001000200000000026e6c0000060001067a376a3867370e6575726f6c696e656f6e6c696e65026e6c00000500fe000000000000c014000100010000000000040a0000e5 0003a8040000000000000000 32191 9c4000000001000000000000037777770d766c696567746172696576656e026e6c0000010001 9c4080000001000000020002037777770d766c696567746172696576656e026e6c0000010001c0100002000100015180000e036e733007656173796e6574c01ec01000020001000151800006036e7331c036c03200010001000151800004c2a55e01c04c00010001000151800004c2a55e05 32192 726128000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730a706f6d706f656e2d6d6d026e6c00002100010000025800200000006400580a706f6d706f656d2d6d6d0a706f6d706f656e2d6d6d026e6c00 7261a8040000000000000000 32193 464200000001000000000000036e7331026973026e6c0000010001 464280000001000000020002036e7331026973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852102c03500010001000151800004d5c41503 32194 3fa00000000100000000000003777777066e6179757461026e6c0000010001 3fa08000000100000002000203777777066e6179757461026e6c0000010001c01000020001000151800006036e7336c010c01000020001000151800006036e7335c010c02b0001000100015180000451144410c03d000100010001518000043dd5ab66 32195 584100000001000000000000037777770a676f6d6167617a696e65026e6c0000010001 584180000001000000020002037777770a676f6d6167617a696e65026e6c0000010001c01000020001000151800013036e73310c636f6c742d74656c65636f6dc01bc01000020001000151800006036e7332c033c02f00010001000151800004d44ea00dc04e00010001000151800004d44ea00e 32196 e3d700000001000000000000067372763031320b66726565686f7374696e67026e6c0000ff0001 e3d780000001000000020000067372763031320b66726565686f7374696e67026e6c0000ff0001c0130002000100015180001105646e732d33056c61646f7403636f6d00c0130002000100015180000805646e732d34c039 32197 000000007002faf0b64800000204057a01010402 000080010000000000000000 32198 52660000000100000000000006706f65747279026e6c0000010001 52668000000100000002000206706f65747279026e6c0000010001c00c00020001000151800009036e7331026b77c013c00c00020001000151800006036e7332c02bc0270001000100015180000451113b08c03c00010001000151800004d4ccdb20 32199 b6c93a3c5010fbecf0c00000000000000000 b6c9ba340000000000000000 32200 b6c93a3c5018fbecb7d2000000934464000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9e3403c4b630003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000 b6c9ba340000000000000000 32201 6a6b00000001000000000001036e73350f646f6d61696e2d7265676973747279026e6c00000100010000291000000000000000 6a6b80000001000000030003036e73350f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 32202 0c4800000001000000000001036e73320f646f6d61696e2d7265676973747279026e6c00000100010000291000000000000000 0c4880000001000000030003036e73320f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 32203 a8b700000001000000000001026e730f646f6d61696e2d7265676973747279026e6c00000100010000291000000000000000 a8b780000001000000030003026e730f646f6d61696e2d7265676973747279026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a650000291000000000000000 32204 b6c93a4a5011fbdef02a0000000000000000 b6c9ba440000000000000000 32205 000000007002faf0c71200000204057a01010402 000080010000000000000000 32206 b6c93a4b5010fbdef0290000000000000000 b6c9ba440000000000000000 32207 759000000001000000000000077472616e736d6f026e6c0000010001 759080000001000000020002077472616e736d6f026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 32208 3ca100000001000000000000037777770777616c6d617274026e6c0000010001 3ca180000001000000020000037777770777616c6d617274026e6c0000010001c010000200010001518000120569646e7331066e6574736f6c03636f6d00c010000200010001518000080569646e7332c032 32209 b6c9f1515010fbec4a750000000000000000 32210 6188000000010000000000000f67696e6b656c2d7365727669636573026e6c00000f0001 6188800000010000000200000f67696e6b656c2d7365727669636573026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c036 32211 b6c9f1515018fbec5e5f00000093f88c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9e3403c4b630003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000 32212 59790000000100000000000007712d64616e6365026e6c00001c0001 59798000000100000002000007712d64616e6365026e6c00001c0001c00c0002000100015180000e036e73300470707365036e657400c00c00020001000151800006036e7331c02c 32213 b6c9f15f5011fbde49df0000000000000000 32214 ea5f000000010000000000000f67696e6b656c2d7365727669636573026e6c00000f0001 ea5f800000010000000200000f67696e6b656c2d7365727669636573026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c036 32215 81ad0000000100000000000009656967656e2d776567026e6c00000f0001 81ad8000000100000002000009656967656e2d776567026e6c00000f0001c00c0002000100015180000c026e7306766576696461c016c00c00020001000151800006036e7332c02d 32216 000000007002faf0e90c00000204057a01010402 000080010000000000000000 32217 9ec300000001000000000000077472616e736d6f026e6c00001c0001 9ec380000001000000020002077472616e736d6f026e6c00001c0001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 32218 b6c9f1605010fbde49de0000000000000000 32219 6c770000000100000000000003777777116f7073706f72696e677665727a6f636874026e6c0000010001 6c778000000100000002000203777777116f7073706f72696e677665727a6f636874026e6c0000010001c0100002000100015180000a026e730469636d63c022c01000020001000151800006036e7332c039c036000100010001518000043e643805c04c000100010001518000043e643806 32220 9410000000010000000000010464636d72026e6c0000ff00010000291000000000000000 9410800000010000000200030464636d72026e6c0000ff0001c00c00020001000151800009036e7331026973c011c00c00020001000151800006036e7332c029c02500010001000151800004d5852102c03a00010001000151800004d5c415030000291000000000000000 32221 b6cab1035010fbecacbc0000000000000000 32222 0fa100000001000000000000086d61696c686f73740b66726565686f7374696e67026e6c0000010001 0fa180000001000000020000086d61696c686f73740b66726565686f7374696e67026e6c0000010001c0150002000100015180001105646e732d33056c61646f7403636f6d00c0150002000100015180000805646e732d34c03b 32223 5ebf00000001000000000000086d61696c686f73740b66726565686f7374696e67026e6c00001c0001 5ebf80000001000000020000086d61696c686f73740b66726565686f7374696e67026e6c00001c0001c0150002000100015180001105646e732d33056c61646f7403636f6d00c0150002000100015180000805646e732d34c03b 32224 ae2600000001000000000000086d61696c686f73740b66726565686f7374696e67026e6c0000260001 ae2680000001000000020000086d61696c686f73740b66726565686f7374696e67026e6c0000260001c0150002000100015180001105646e732d33056c61646f7403636f6d00c0150002000100015180000805646e732d34c03b 32225 b6cab1035018fbec0c7f00000093acb4000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9e3403c4b630003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000 32226 b6cab1115011fbdeac260000000000000000 32227 15bb00000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 15bb80000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 32228 b6cab1125010fbdeac250000000000000000 32229 f94f00000001000000000000037777770b6e65746869742d66726565026e6c0000010001 f94f80000001000000020000037777770b6e65746869742d66726565026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c034 32230 05ba0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 05ba8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32231 f11b00000001000000000000036e733104686f6d65026e6c0000010001 f11b80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 32232 b6af01195018faf0d037000000948757000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd46403c4ec60003000000354e544c4d535350000100000097b208e00c000c0029000000090009002000000057454253455256455244455749542d424f454b454c0000 b6af80010000000000000000 32233 b6af01275011fae23ca30000000000000000 b6af80010000000000000000 32234 000000007002faf0b1b20000020405b401010402 000080010000000000000000 32235 b6af01285010fae23ca20000000000000000 b6af80010000000000000000 32236 b6cd10ad5010faf016ec0000000000000000 b6cd90a40000000000000000 32237 074d00000001000000000000037777770f72657374617572616e742d61736961026e6c0000010001 074d80000001000000020002037777770f72657374617572616e742d61736961026e6c0000010001c01000020001000151800002c010c0100002000100015180000d04646e733105692d702d64c020c01000010001000151800004d912405fc04200010001000151800004d9124003 32238 46c300000001000000000000037777770766697265776562026e6c0000010001 46c380000001000000020002037777770766697265776562026e6c0000010001c0100002000100015180000f026e7309656174736572766572c018c01000020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 32239 6a6b00000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c0000010001 6a6b80000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32240 0c4800000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c0000010001 0c4880000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32241 a8b700000001000000000000026e730f646f6d61696e2d7265676973747279026e6c0000010001 a8b780000001000000030002026e730f646f6d61696e2d7265676973747279026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 32242 b6cd10ad5018faf0499600000094e1aa000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd49403c4ec90003000000354e544c4d535350000100000097b208e00c000c0029000000090009002000000057454253455256455244455749542d424f454b454c0000 b6cd90a40000000000000000 32243 ab22000000010000000000000477656b61026e6c00000f0001 ab22800000010000000200020477656b61026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c011c00c00020001000151800006036e7332c028c02500010001000151800004d453c005c04300010001000151800004d453c006 32244 b6cd10bb5011fae216550000000000000000 b6cd90b40000000000000000 32245 f8a900000001000000000000037777770a66632d75747265636874026e6c0000010001 f8a980000001000000020000037777770a66632d75747265636874026e6c0000010001c0100002000100015180000f036e73310571666c6578036e657400c01000020001000151800006036e7333c033 32246 9410000000010000000000000464636d72026e6c0000ff0001 9410800000010000000200020464636d72026e6c0000ff0001c00c00020001000151800009036e7331026973c011c00c00020001000151800006036e7332c029c02500010001000151800004d5852102c03a00010001000151800004d5c41503 32247 63b100000001000000000000036e7331056b706e6873026e6c00001c0001 63b180000001000000020001036e7331056b706e6873026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000d03646e73036b706e03636f6d00c00c0001000100015180000491072163 32248 22e300000001000000000000036e7331056b706e6873026e6c0000260001 22e380000001000000020001036e7331056b706e6873026e6c0000260001c01000020001000151800002c00cc0100002000100015180000d03646e73036b706e03636f6d00c00c0001000100015180000491072163 32249 b6cd10bc5010fae216540000000000000000 b6cd90b40000000000000000 32250 0601000000010000000000000377777711686f7574696e647573747269656d65766f026e6c0000010001 0601800000010000000200000377777711686f7574696e647573747269656d65766f026e6c0000010001c01000020001000151800013036e733109636174616c79737432036e657400c01000020001000151800006036e7332c03a 32251 9f9e00000001000000000000036e733103666a66026e6c0000010001 9f9e80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32252 9f9f00000001000000000000036e733203666a66026e6c0000010001 9f9f80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32253 16f400000001000000000000037777770a636c69636b7374617473026e6c0000010001 16f480000001000000020002037777770a636c69636b7374617473026e6c0000010001c0100002000100015180000b036e73310470696e65c01bc01000020001000151800006036e7332c033c02f00010001000151800004d59c0201c04600010001000151800004c3c1a303 32254 812900000001000000000000037777770564656c6c61026e6c0000010001 812980000001000000020002037777770564656c6c61026e6c0000010001c01000020001000151800013046e732d310b666f782d686f7374696e67c016c01000020001000151800007046e732d32c02fc02a00010001000151800004d5bd1374c04900010001000151800004d5bd1675 32255 64c30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 64c38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32256 1a33000000010000000000000469632d73026e6c0000010001 1a33800000010000000200000469632d73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 32257 d17e00000001000000000000046b6e6d69026e6c0000ff0001 d17e80000001000000020002046b6e6d69026e6c0000ff0001c00c00020001000151800008057374797832c00cc00c0002000100015180000e036e733107737572666e6574c011c025000100010001518000049117fe9fc03900010001000151800004c0576a65 32258 9f7e00000001000000000000036e733103666a66026e6c0000010001 9f7e80000001000000020000036e733103666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32259 f6c300000001000000000000086575726f7a756964026e6c00000f0001 f6c380000001000000020000086575726f7a756964026e6c00000f0001c00c0002000100015180000c026e7306766576696461c015c00c00020001000151800006036e7332c02c 32260 93a0000000010000000000000c73636861696b6f6666736574026e6c0000010001 93a0800000010000000200020c73636861696b6f6666736574026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c019c00c00020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 32261 9f7f00000001000000000000036e733203666a66026e6c0000010001 9f7f80000001000000020000036e733203666a66026e6c0000010001c0100002000100015180000c026e7306736174656368c014c01000020001000151800006036e7378c02b 32262 121e28000001000200000000026e6c00000600010f6168616e6f6f72642d7072696d75730d4148414e6f6f7264676f757765026e6c00000500fe000000000000c01400010001000000000004c0a80017 121ea8040000000000000000 32263 fefb0000000100000000000004626c6767026e6c0000ff0001 fefb8000000100000002000004626c6767026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c011c00c0002000100015180000704686e7331c02a 32264 860b00000001000000000000036e7331046372696f026e6c0000010001 860b80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32265 4d0300000001000000000000036e7332046372696f026e6c0000010001 4d0380000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32266 cd6a00000001000000000000036e7335046372696f026e6c0000010001 cd6a80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32267 247600000001000000000000036e7336046372696f026e6c0000010001 247680000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32268 d0f8000000010000000000000377777706686f6572656e066d6f6b656c73026e6c0000010001 d0f8800000010000000200020377777706686f6572656e066d6f6b656c73026e6c0000010001c01700020001000151800012036e73310b737072696e67626f617264c01ec01700020001000151800006036e7332c036c03200010001000151800004d4f1210bc05000010001000151800004d4f1210c 32269 000000007002400090d30000020405b401010402 000080010000000000000000 32270 724100000001000000000000037777770662726f636f6d026e6c0000010001 724180000001000000020000037777770662726f636f6d026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c031 32271 b6cda384501008009b350000000000000000 32272 000000007002faf0a8680000020405b401010402 000080010000000000000000 32273 720100000001000000000000077665727665656e026e6c0000020001 720180000001000000020000077665727665656e026e6c0000020001c00c00020001000151800013026e730a6e61616d736572766572036e657400c00c00020001000151800006036e7331c02b 32274 b6cda384501044705ec50000000000000000 32275 b6ce7def5010faf0a05e0000000000000000 b6cefde40000000000000000 32276 b6ce7def5018faf0e2720000008b24c2000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afab8403c4c3800030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005a374a3847374555524f4c494e450000 b6cefde40000000000000000 32277 b6cda384501844708c0d0000009b7900000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005f03677373096d6963726f736f667403636f6d00403afcf3403c4e7300030000003c4e544c4d535350000100000097b200c00d000d002f0000000f000f00200000004148414e4f4f52442d5052494d55534148414e4f4f5244474f5557450000 32278 b6ce7dfd5011fae29fd00000000000000000 b6cefdf40000000000000000 32279 02f50000000100000000000003777777097061726173746f6e65026e6c0000010001 02f58000000100000002000003777777097061726173746f6e65026e6c0000010001c01000020001000151800014026e730b736d617274736572766572036e657400c01000020001000151800006036e7332c031 32280 b6ce7dfe5010fae29fcf0000000000000000 b6cefdf40000000000000000 32281 000000007002faf0fa060000020405b401010402 000080010000000000000000 32282 b6cda392501144625e270000000000000000 32283 ba4b0010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000000000000 ba4b8000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 32284 b6cf35215010faf03aca0000000000000000 b6cfb5240000000000000000 32285 000000007002400097f50000020405b401010402 000080010000000000000000 32286 9fdd0000000100000000000008742d6d6f62696c65026e6c00000f0001 9fdd8000000100000002000208742d6d6f62696c65026e6c00000f0001c00c0002000100015180000b036e733104696e666fc015c00c00020001000151800006036e7332c02dc02900010001000151800004504fc020c04000010001000151800004504fc021 32287 b6cf35215018faf0e0430000008bc35c000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afab8403c4c3800030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005a374a3847374555524f4c494e450000 b6cfb5240000000000000000 32288 b6cf352f5011fae23a3c0000000000000000 b6cfb5240000000000000000 32289 a8b200000001000000000000036e733209666972737466696e64026e6c0000010001 a8b280000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 32290 a8b100000001000000000000036e733109666972737466696e64026e6c0000010001 a8b180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 32291 b6cda393501044625e260000000000000000 32292 b6cfdbce501008006a0b0000000000000000 32293 27b800000001000000000000036e73340767617574656e67026e6c0000010001 27b880000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32294 b6cfdbce501044702d9b0000000000000000 32295 b6cf35305010fae23a3b0000000000000000 b6cfb5340000000000000000 32296 b6cfdbce5018447011640000009bc180000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403afcf4403c4e7400030000003c4e544c4d535350000100000097b200c00d000d002f0000000f000f00200000004148414e4f4f52442d5052494d55534148414e4f4f5244474f5557450000 32297 000000007002faf04c930000020405b401010402 000080010000000000000000 32298 b6d071415010faf051350000000000000000 b6d0f1440000000000000000 32299 ac2c00000001000000000000037777770b746f6f72656e7370697473026e6c0000010001 ac2c80000001000000020002037777770b746f6f72656e7370697473026e6c0000010001c0100002000100015180000f036e733108642d64657369676ec01cc01000020001000151800006036e7332c034c030000100010001518000045054f3f0c04b000100010001518000045054f3f1 32300 a7e30010000100000000000106636861726973026e6c00000f00010000290800000080000000 a7e38000000100000002000106636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a0000291000000000000000 32301 b6d071415018faf08e770000008b2b94000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afab8403c4c3800030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005a374a3847374555524f4c494e450000 b6d0f1440000000000000000 32302 a8b400000001000000000000036e733109666972737466696e64026e6c0000010001 a8b480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 32303 682300000001000000000000067a7376737277026e6c0000010001 682384030001000000010000067a7376737277026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 32304 a8b500000001000000000000036e733209666972737466696e64026e6c0000010001 a8b580000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 32305 b6d0714f5011fae250a70000000000000000 b6d0f1440000000000000000 32306 b6cfdbdc501144622cfd0000000000000000 32307 789b0000000100000000000003777777046b726173026e6c0000010001 789b8000000100000002000003777777046b726173026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 32308 b6d071505010fae250a60000000000000000 b6d0f1540000000000000000 32309 5a0300000001000000000000076368762d6c6262026e6c0000010001 5a0380000001000000020000076368762d6c6262026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 32310 0000000070024000ab920000020405b401010402 000080010000000000000000 32311 10d900000001000000000000037777770674696261636f026e6c0000010001 10d980000001000000020000037777770674696261636f026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c030 32312 a20e0000000100000000000006636861726973026e6c00000f0001 a20e8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 32313 082a0000000100000000000004686f6d6503777873026e6c0000010001 082a8000000100000003000304686f6d6503777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 32314 b6cfdbdd501044622cfc0000000000000000 32315 b6d1320d5010080027680000000000000000 b6d1b2040000000000000000 32316 4ee60000000100000000000005726f747261026e6c00000f0001 4ee68000000100000002000005726f747261026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02a 32317 b6d1320d50104470eaf70000000000000000 b6d1b2040000000000000000 32318 b6d1320d50184470d5800000009bbac0000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403afcf4403c4e7400030000003c4e544c4d535350000100000097b200c00d000d002f0000000f000f00200000004148414e4f4f52442d5052494d55534148414e4f4f5244474f5557450000 b6d1b2040000000000000000 32319 b01e0000000100000000000003777777096a616e64657369676e026e6c0000010001 b01e8000000100000002000003777777096a616e64657369676e026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01ac0100002000100015180000704686e7331c033 32320 1f74000000010000000000000577326b6332066e7434616c6c026e6c0000010001 1f74800000010000000200020577326b6332066e7434616c6c026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000d036e733206787334616c6cc019c02d00010001000151800004c26d3402c03e00010001000151800004c26d0963 32321 723000000001000000000000036e73320a7a65656c616e646e6574026e6c0000010001 723080000001000000020002036e73320a7a65656c616e646e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 32322 721400000001000000000000026e730a7a65656c616e646e6574026e6c0000010001 721480000001000000020002026e730a7a65656c616e646e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 32323 1a030000000100000000000003626c3102626c06787334616c6c026e6c0000010001 1a038000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32324 b6d1321b50114462ea590000000000000000 b6d1b2140000000000000000 32325 464c0000000100000000000009776565726b616d6572026e6c0000010001 464c8000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 32326 8b5c00000001000000000000094f6c646562726f656b026e6c0000ff0001 8b5c80000001000000020002094f6c646562726f656b026e6c0000ff0001c00c0002000100015180000e026e73086d656761706c6578c016c00c00020001000151800006036e7331c02dc02a00010001000151800004504f6101c04400010001000151800004504f6102 32327 fd5200000001000000000000046d61696c0a767676616b616e746965026e6c0000010001 fd5280000001000000020002046d61696c0a767676616b616e746965026e6c0000010001c0110002000100015180000a04646e7330026975c01cc0110002000100015180000704646e7331c035c03000010001000151800004d91a7002c04600010001000151800004d91a7103 32328 3b1800000001000000000000046d61696c0a767676616b616e746965026e6c00001c0001 3b1880000001000000020002046d61696c0a767676616b616e746965026e6c00001c0001c0110002000100015180000a04646e7330026975c01cc0110002000100015180000704646e7331c035c03000010001000151800004d91a7002c04600010001000151800004d91a7103 32329 0bfd00100001000000000001037777770465706f78026e6c00000100010000290800000080000000 0bfd80000001000000020003037777770465706f78026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d09630000291000000000000000 32330 3ef9000000010000000000000377777707726f7574653637026e6c0000010001 3ef9800000010000000200020377777707726f7574653637026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c018c01000020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 32331 a926000000010000000000000377777706616d7374656c026e6c0000010001 a926800000010000000200000377777706616d7374656c026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02f 32332 465e0000000100000000000008656d6f7469636f6e0e6d657373656e676572746f6f6c73026e6c0000010001 465e8000000100000002000008656d6f7469636f6e0e6d657373656e676572746f6f6c73026e6c0000010001c01500020001000151800014046e733031096772616669782d697303636f6d00c01500020001000151800007046e733033c03d 32333 b6d1321c50104462ea580000000000000000 b6d1b2140000000000000000 32334 2c7c00000001000000000000037777770f63616e6973697573636f6c6c656765026e6c0000010001 2c7c80000001000000020000037777770f63616e6973697573636f6c6c656765026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c03b 32335 04ec00000001000000000000036e73310a63796265726d65646961026e6c0000010001 04ec80000001000000020002036e73310a63796265726d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e818c0ac03d000100010001518000043e3a2d99 32336 76de00000001000000000000037777770461766578026e6c0000010001 76de80000001000000020002037777770461766578026e6c0000010001c0100002000100015180000b036e733104656e6f6dc015c01000020001000151800006036e7332c02dc02900010001000151800004d87a0479c04000010001000151800004d86296b6 32337 17c000000001000000000000036e73330767617574656e67026e6c0000010001 17c080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32338 fc620000000100000000000008686f73746e616d650462696e640000100003 fc628000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32339 a24400000001000000000000036e733107676f6c69617468026e6c0000010001 a24480000001000000020002036e733107676f6c69617468026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f379c03a00010001000151800004507f48c2 32340 d12200000001000000000000036e733207676f6c69617468026e6c0000010001 d12280000001000000020002036e733207676f6c69617468026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000045054f379c00c00010001000151800004507f48c2 32341 7f18000000010000000000000466617473076d797465726973026e6c00000f0001 7f18840300010000000100000466617473076d797465726973026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 32342 539a0000000100000000000008686f73746e616d650462696e640000100003 539a8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32343 b403000000010000000000000377777709617363656e64656e73026e6c0000010001 b403800000010000000200000377777709617363656e64656e73026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 32344 217d0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 217d8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32345 d84f0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 d84f8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32346 332400000001000000000000076172747068696c026e6c00000f0001 332480000001000000020000076172747068696c026e6c00000f0001c00c0002000100015180000e05646e732d31056c61646f74c014c00c0002000100015180000805646e732d32c02e 32347 6848000000010000000000000377777706616c7572756e026e6c0000010001 6848800000010000000300010377777706616c7572756e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 32348 126d000000010000000000000d73656375726974797072696e74026e6c0000010001 126d800000010000000200010d73656375726974797072696e74026e6c0000010001c00c0002000100015180000a036e733303777873c01ac00c00020001000151800006036e7334c032c04400010001000151800004d5ef9a65 32349 ec8a00000001000000000000037777770b7374617274706167696e61026e6c0000010001 ec8a80000001000000030003037777770b7374617274706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c030000100010001518000043e45a282c042000100010001518000043e45a283c054000100010001518000043e45a284 32350 31a2000000010000000000000b776f726c646f6e6c696e65026e6c00000f0001 31a2800000010000000300020b776f726c646f6e6c696e65026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c018c00c0002000100015180000704616e7332c031c00c0002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c04700010001000151800004c3f13325 32351 897000000001000000000000037777770b7475726e656e64616d6573026e6c0000010001 897080000001000000020002037777770b7475726e656e64616d6573026e6c0000010001c0100002000100015180000d03706e7306636f6d6c6f67c01cc0100002000100015180000603736e73c034c03000010001000151800004d5a0c803c04900010001000151800004d5a0c804 32352 da28000000010000000000000377777706652d63617264026e6c0000010001 da28800000010000000200000377777706652d63617264026e6c0000010001c01000020001000151800018036e73370e666c6578776562686f7374696e6703636f6d00c01000020001000151800006036e7338c02f 32353 2d2b0000000100000000000007737461746963320876696c6561677565087669706c616e6574026e6c0000010001 2d2b8000000100000002000107737461746963320876696c6561677565087669706c616e6574026e6c0000010001c01d0002000100015180000a036e733303777873c026c01d00020001000151800006036e7334c03ec05000010001000151800004d5ef9a65 32354 e1ec00000001000000000000026d780766656e65646578026e6c0000010001 e1ec80000001000000030002026d780766656e65646578026e6c0000010001c00f00020001000151800005026e73c00fc00f00020001000151800009026e7303736261c017c00f0002000100015180000d036e733203736261036e657400c02b00010001000151800004c36cbcfec03c00010001000151800004c2e57801 32355 4d410000000100000000000003777777077765736265656b026e6c0000010001 4d418000000100000002000103777777077765736265656b026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c02c00010001000151800004d4ccc0fc 32356 a7d20000000100000000000008667265656d61696c026e6c0000010001 a7d28000000100000003000208667265656d61696c026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 32357 35340000000100000000000006757472636874036f7267026e6c00000f0001 35348403000100000001000006757472636874036f7267026e6c00000f0001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 32358 f60400000001000000000000037777770a73746f72656d61746368026e6c0000010001 f60480000001000000020002037777770a73746f72656d61746368026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01bc01000020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 32359 257a0000000100000000000009726f6f6476656c6474026e6c00000f0001 257a8000000100000002000209726f6f6476656c6474026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c016c00c00020001000151800006036e7332c02ec02a00010001000151800004c2451012c04200010001000151800004c2451212 32360 4a2900000001000000000000106b6f6f706d616e73636c617373696373026e6c00000f0001 4a2980000001000000020000106b6f6f706d616e73636c617373696373026e6c00000f0001c00c00020001000151800014036e73350a78736e6574776f726b73036e657400c00c00020001000151800006036e7332c035 32361 016d000000010000000000000d706c616e656574706c616e6574026e6c00000f0001 016d840300010000000100000d706c616e656574706c616e6574026e6c00000f0001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 32362 17d000000001000000000000036e73340767617574656e67026e6c0000010001 17d080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32363 7c6600000001000000000000037777770b636865636b6d7973697465026e6c0000010001 7c6680000001000000020002037777770b636865636b6d7973697465026e6c0000010001c01000020001000151800016026e730261310d61616161612d686f7374696e67c01cc01000020001000151800006036e7332c033c03000010001000151800004c30be7e1c05200010001000151800004c30be7e2 32364 12f000000001000000000000037777770d62676d2d6e656465726c616e64026e6c0000010001 12f080000001000000020002037777770d62676d2d6e656465726c616e64026e6c0000010001c0100002000100015180000f036e733108696c696d62757267c01ec01000020001000151800006036e7332c036c03200010001000151800004c2b26281c04d00010001000151800004c2b262f7 32365 3e9600000001000000000000096c65756b6576656e74026e6c0000020001 3e9680000001000000020002096c65756b6576656e74026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 32366 38660000000100000000000005726f6d656f066f6e6c696e65026f32026e6c0000010001 38668000000100000002000205726f6d656f066f6e6c696e65026f32026e6c0000010001c0190002000100015180000d026e73076e65746c616e64c01cc01900020001000151800006036e7332c033c03000010001000151800004d9aa2042c04900010001000151800004d9aa2c06 32367 c9680000000100000000000003666c79036b6c6d026e6c0000010001 c9688000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 32368 10f1000000010000000000000d5354494e47524f414453484f57026e6c0000020001 10f1840300010000000100000d5354494e47524f414453484f57026e6c0000020001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 32369 802f0000000100000000000005646e732d31056c61646f74026e6c0000010001 802f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32370 80300000000100000000000005646e732d32056c61646f74026e6c0000010001 80308000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32371 98370000000100000000000003777777076d696e62757a61026e6c0000010001 98378000000100000002000103777777076d696e62757a61026e6c0000010001c0100002000100015180000b087374617267617465c010c0100002000100015180000b026e73026e6c036e657400c02c00010001000151800004d535a3d2 32372 b0a40000000100000000000003617468026e6c00000f0001 b0a48000000100000002000203617468026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c010c00c00020001000151800006036e7332c028c02400010001000151800004c2451012c03c00010001000151800004c2451212 32373 3a960000000100000000000007766462636f6d70026e6c00001c0001 3a968000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 32374 d08e000000010000000000000377777707746d6f62696c65026e6c0000010001 d08e800000010000000200020377777707746d6f62696c65026e6c0000010001c0100002000100015180000b036e733104696e666fc018c01000020001000151800006036e7332c030c02c00010001000151800004504fc020c04300010001000151800004504fc021 32375 6d6f0000000100000000000006636861726973026e6c00000f0001 6d6f8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 32376 4de600000001000000000000037777770a70726f7465637430727a026e6c0000010001 4de680000001000000020000037777770a70726f7465637430727a026e6c0000010001c0100002000100015180000e036e73330767617574656e67c01bc01000020001000151800006036e7334c033 32377 1ed8000000010000000000000a6c65756e696e676a6573026e6c0000020001 1ed8800000010000000200020a6c65756e696e676a6573026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 32378 84580000000100000000000003777777086175746f7a696e65026e6c0000010001 84588000000100000002000203777777086175746f7a696e65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 32379 a73400000001000000000000037777770a706c61696a6167616d65026e6c0000010001 a73484030001000000010000037777770a706c61696a6167616d65026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 32380 be6600000001000000000000037777770873746f7068696572026e6c0000010001 be6680000001000000020002037777770873746f7068696572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d000100010001518000044538f440c03f000100010001518000044538f441 32381 91a7000000010000000000000377777710677261746973706f726e6f666f746f73026e6c0000010001 91a7800000010000000200000377777710677261746973706f726e6f666f746f73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c038 32382 8a2f00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000010001 8a2f80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32383 61dc0000000100000000000006617564696f6e026e6c00000f0001 61dc8000000100000002000006617564696f6e026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c02a 32384 35ce00000001000000000000037777770c77616b65626f617264657273026e6c0000010001 35ce80000001000000020000037777770c77616b65626f617264657273026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c035 32385 51fa00000001000000000000036e73310a696e7465726e65746978026e6c0000010001 51fa80000001000000020002036e73310a696e7465726e65746978026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccf5c9c03d00010001000151800004d4ccf5d2 32386 28fd00000001000000000000036e73310a696e7465726e65746978026e6c0000260001 28fd80000001000000020002036e73310a696e7465726e65746978026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccf5c9c03d00010001000151800004d4ccf5d2 32387 6e4f00000001000000000000036e73320a696e7465726e65746978026e6c0000010001 6e4f80000001000000020002036e73320a696e7465726e65746978026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d4ccf5c9c00c00010001000151800004d4ccf5d2 32388 89d200000001000000000000036e73320a696e7465726e65746978026e6c0000260001 89d280000001000000020002036e73320a696e7465726e65746978026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d4ccf5c9c00c00010001000151800004d4ccf5d2 32389 0707000000010000000000000647495a5a4d4f024e4c0000010001 0707800000010000000300030647495a5a4d4f024e4c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc0270001000100015180000483ae7529c038000100010001518000043e830a2ec04a0001000100015180000483ae7436 32390 d020000000010000000000000377777706736368656574026e6c0000010001 d020800000010000000200000377777706736368656574026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c02e 32391 c8f400000001000000000000046d61696c06746963617361026e6c0000010001 c8f480000001000000030002046d61696c06746963617361026e6c0000010001c01100020001000151800015036e73310e666c6578776562686f7374696e67c018c01100020001000151800006036e7332c030c01100020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c02c00010001000151800004cf2cd7adc04d0001000100015180000452c04365 32392 18d5000000010000000000000c42554954454e42455245494b024e4c0000010001 18d5800000010000000300030c42554954454e42455245494b024e4c0000010001c00c0002000100015180000e04646e733106626c6978656dc019c00c0002000100015180000704646e7332c032c00c0002000100015180000704646e7333c032c02d00010001000151800004d44fe803c04700010001000151800004c3f5c782c05a00010001000151800004d44ff303 32393 00d3000000010000000000000647495a5a4d4f024e4c0000260001 00d3800000010000000300030647495a5a4d4f024e4c0000260001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc0270001000100015180000483ae7529c038000100010001518000043e830a2ec04a0001000100015180000483ae7436 32394 8307000000010000000000000c42554954454e42455245494b024e4c0000260001 8307800000010000000300030c42554954454e42455245494b024e4c0000260001c00c0002000100015180000e04646e733106626c6978656dc019c00c0002000100015180000704646e7332c032c00c0002000100015180000704646e7333c032c02d00010001000151800004d44fe803c04700010001000151800004c3f5c782c05a00010001000151800004d44ff303 32395 dd7a00000001000000000000026e7306787334616c6c026e6c0000010001 dd7a80000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 32396 eebd00000001000000000000036e733206787334616c6c026e6c0000010001 eebd80000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 32397 a8cd00000001000000000000036e733206726f632d6f6e026e6c0000010001 a8cd80000001000000020002036e733206726f632d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b0001000100015180000491614082c00c0001000100015180000491616142 32398 2d5d00000001000000000000036e733106726f632d6f6e026e6c0000010001 2d5d80000001000000020002036e733106726f632d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491614082c0390001000100015180000491616142 32399 dd65000000010000000000000a7072766c696d62757267026e6c0000ff0001 dd65800000010000000200010a7072766c696d62757267026e6c0000ff0001c00c0002000100015180000a0761757468656e74c00cc00c0002000100015180000b026e73026e6c036e657400c02b00010001000151800004c3c105fa 32400 60e20000000100000000000003777777096c65617365706c616e026e6c0000010001 60e28000000100000002000103777777096c65617365706c616e026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000d026e73046575726f036e657400c02e00010001000151800004c286e702 32401 1e83000000010000000000000874616c616e746f6e026e6c00000f0001 1e83800000010000000200020874616c616e746f6e026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 32402 c4160000000100000000000003777777106765736368656e6b656e77696e6b656c026e6c0000010001 c4168000000100000002000203777777106765736368656e6b656e77696e6b656c026e6c0000010001c0100002000100015180000e036e733107616e7461726573c021c01000020001000151800006036e7332c039c035000100010001518000043e3a260bc04f000100010001518000043e3a260c 32403 411a00000001000000000000076575726f6e6574026e6c0000ff0001 411a80000001000000020001076575726f6e6574026e6c0000ff0001c00c00020001000151800005026e73c00cc00c0002000100015180000d026e73046575726f036e657400c02800010001000151800004c2860043 32404 df8600000001000000000000036e733104686f6d65026e6c0000010001 df8680000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 32405 6fc300000001000000000000036e733204686f6d65026e6c0000010001 6fc380000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 32406 81d000000001000000000000036e733304686f6d65026e6c0000010001 81d080000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 32407 451300000001000000000000046d61696c0a677265656e657279756b026e6c0000ff0001 451380000001000000020002046d61696c0a677265656e657279756b026e6c0000ff0001c0110002000100015180000c026e7306787334616c6cc01cc01100020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 32408 3bc100000001000000000000026e73086d656761706c6578026e6c0000010001 3bc180000001000000020002026e73086d656761706c6578026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004504f6101c03a00010001000151800004504f6102 32409 536e00000001000000000000036e7331086d656761706c6578026e6c0000010001 536e80000001000000020002036e7331086d656761706c6578026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004504f6101c00c00010001000151800004504f6102 32410 4a6e00000001000000000000036e733108696e736563757265026e6c0000010001 4a6e80000001000000030003036e733108696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 32411 253700000001000000000000036e733108696e736563757265026e6c0000260001 253780000001000000030003036e733108696e736563757265026e6c0000260001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 32412 222b00000001000000000000036e733208696e736563757265026e6c0000010001 222b80000001000000030003036e733208696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 32413 5d2800000001000000000000036e733208696e736563757265026e6c0000260001 5d2880000001000000030003036e733208696e736563757265026e6c0000260001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 32414 ae9400000001000000000000036e733308696e736563757265026e6c0000010001 ae9480000001000000030003036e733308696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 32415 3ebb0000000100000000000006626f2d617373026e6c00000f0001 3ebb8000000100000002000006626f2d617373026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c013c00c0002000100015180000704686e7331c02c 32416 4df7000000010000000000000377777708636f6f6c62616279026e6c0000010001 4df7800000010000000200000377777708636f6f6c62616279026e6c0000010001c0100002000100015180000c036e723405692d702d64c019c01000020001000151800006036e7236c031 32417 abca00000001000000000000036e733308696e736563757265026e6c0000260001 abca80000001000000030003036e733308696e736563757265026e6c0000260001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 32418 dce50000000100000000000011726f6d626163682d736368756b6b696e67026e6c00000f0001 dce58000000100000002000011726f6d626163682d736368756b6b696e67026e6c00000f0001c00c0002000100015180000b036e73310462626974c01ec00c00020001000151800006036e7332c036 32419 943500000001000000000000036e73310663617374656c026e6c00001c0001 943580000001000000020002036e73310663617374656c026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3558244c03900010001000151800004c3558245 32420 072600000001000000000000036e73310663617374656c026e6c0000260001 072680000001000000020002036e73310663617374656c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3558244c03900010001000151800004c3558245 32421 e37a00000001000000000000036e73320663617374656c026e6c00001c0001 e37a80000001000000020002036e73320663617374656c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004c3558244c00c00010001000151800004c3558245 32422 d0e600000001000000000000036e73320663617374656c026e6c0000260001 d0e680000001000000020002036e73320663617374656c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004c3558244c00c00010001000151800004c3558245 32423 aa0e00000001000000000000036d78320663617374656c026e6c0000010001 aa0e80000001000000020002036d78320663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 32424 c1b900000001000000000000036d78320663617374656c026e6c00001c0001 c1b980000001000000020002036d78320663617374656c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 32425 497000000001000000000000036d78320663617374656c026e6c0000260001 497080000001000000020002036d78320663617374656c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 32426 5cff00000001000000000000037777770a7374617274706f726e6f026e6c0000010001 5cff80000001000000020000037777770a7374617274706f726e6f026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 32427 301500000001000000000000056162632d64026e6c00000f000100 301580000001000000020000056162632d64026e6c00000f0001c00c0002000100015180000f026e7307626f6e6e69657202736500c00c00020001000151800006036e7333c029 32428 05ba00000001000000000000056461786973026e6c0000ff0001 05ba80000001000000020002056461786973026e6c0000ff0001c00c0002000100015180000f036e7331086461786973776562c012c00c00020001000151800006036e7332c02ac02600010001000151800004c323c083c04100010001000151800004c323c084 32429 44bb00000001000000000000136c657572696e6b2d696e7374616c6c61746965026e6c0000020001 44bb80000001000000020002136c657572696e6b2d696e7374616c6c61746965026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec020c00c00020001000151800006036e7332c038c03400010001000151800004c29f4906c04c00010001000151800004c29fb004 32430 63bd00000001000000000000026e730a646f6d65696e686f7374026e6c0000010001 63bd80000001000000020000026e730a646f6d65696e686f7374026e6c0000010001c00f00020001000151800017036e73310d696e746572726567697374657203636f6d00c00f00020001000151800010036e733206776964657873036e657400 32431 79e5000000010000000000000561726a656e056974347573026e6c0000010001 79e5800000010000000200020561726a656e056974347573026e6c0000010001c0120002000100015180000d036e733106736f67657469c018c01200020001000151800006036e7332c030c02c00010001000151800004c297432ec04500010001000151800004c297432f 32432 c21100000001000000000000036e733207626265796f6e64026e6c0000010001 c21180000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 32433 bcb200000001000000000000036e7335046372696f026e6c0000010001 bcb280000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32434 80ea00000001000000000000036e7336046372696f026e6c0000010001 80ea80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32435 031f000000010000000000000377777703776562026e6c0000010001 031f800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 32436 c65d00000001000000000000036e7331046372696f026e6c0000010001 c65d80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32437 ccfb00000001000000000000036e7332046372696f026e6c0000010001 ccfb80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32438 0f0900000001000000000000037777770a72656372656174696566026e6c0000010001 0f0980000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 32439 820300000001000000000000036e7335046372696f026e6c0000010001 820380000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32440 e81000000001000000000000036e7336046372696f026e6c0000010001 e81080000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32441 996400000001000000000000036e7331046372696f026e6c0000010001 996480000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32442 1b1500000001000000000000036e7332046372696f026e6c0000010001 1b1580000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32443 bff800000001000000000000026e7308767575727765726b026e6c0000010001 bff880000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 32444 bdad0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 bdad8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32445 5c60000000010000000000000377777703796573026e6c0000010001 5c60800000010000000300000377777703796573026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c02cc01000020001000151800006036e7333c02c 32446 bdb000000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 bdb080000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 32447 ce1b0000000100000000000003777777096b77616c6964617461026e6c0000010001 ce1b8000000100000002000203777777096b77616c6964617461026e6c0000010001c0100002000100015180000f036e733108776f726c646e6574c01ac01000020001000151800006036e7332c032c02e00010001000151800004d87a0479c04900010001000151800004d86296b6 32448 9919000000010000000000000377777708736b79726164696f026e6c0000010001 9919800000010000000200010377777708736b79726164696f026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c019c04600010001000151800004c2860043 32449 8fbb00000001000000000000037777770c796f75726c696e6b70616765026e6c0000010001 8fbb80000001000000020000037777770c796f75726c696e6b70616765026e6c0000010001c01000020001000151800010036e733109666972737466696e64c01dc01000020001000151800006036e7332c035 32450 0a900000000100000000000003777777056b6c696b73026e6c0000010001 0a908000000100000002000003777777056b6c696b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02d 32451 963b00000001000000000000046d61696c156175746f73636861646576696e6b656e7761617264026e6c0000010001 963b80000001000000020002046d61696c156175746f73636861646576696e6b656e7761617264026e6c0000010001c01100020001000151800010036e733109686f73746e65746276c027c01100020001000151800006036e7332c03fc03b0001000100015180000451113264c05700010001000151800004d5c42851 32452 8fc400000001000000000000036e733503777873026e6c0000010001 8fc480000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 32453 c7e200000001000000000000046e73303803777873026e6c0000010001 c7e280000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 32454 31f600000001000000000000046e73303903777873026e6c0000010001 31f680000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 32455 f4fd00000001000000000000026e730678786c696e6b026e6c0000010001 f4fd80000001000000030002026e730678786c696e6b026e6c0000010001c00f0002000100015180000f036e73310870726f7365727665c016c00f00020001000151800012036e73320970726f2d736572766502626500c00f00020001000151800006036e7333c02ec02a000100010001518000045054e055c06300010001000151800004d4ccc655 32456 a8b6000000010000000000000670686f626f7305706c61746f026e6c0000010001 a8b6800000010000000200010670686f626f7305706c61746f026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800010036e733102646803697865036e657400c02d00010001000151800004c2b76f14 32457 1d6900000001000000000000036e7331076e6572646e6574026e6c0000010001 1d6980000001000000020002036e7331076e6572646e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800009026e730370626dc018c00c00010001000151800004d9aa0f01c03a000100010001518000043efa0743 32458 3ffc00000001000000000000036e73330767617574656e67026e6c0000010001 3ffc80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32459 280000000001000000000000036e73340767617574656e67026e6c0000010001 280080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32460 13ce00000001000000000000036e7331076e6572646e6574026e6c0000260001 13ce80000001000000020002036e7331076e6572646e6574026e6c0000260001c01000020001000151800002c00cc01000020001000151800009026e730370626dc018c00c00010001000151800004d9aa0f01c03a000100010001518000043efa0743 32461 20400000000100000000000009652d6c756e61746963026e6c0000010001 20408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 32462 f04e0000000100000000000003777777056d65737365026e6c0000010001 f04e8000000100000002000003777777056d65737365026e6c0000010001c01000020001000151800013036e73310a636f6d7075746f6f6c7302626500c01000020001000151800006036e7332c02e 32463 73af0000000100000000000006726164696f6d026e6c00000f0001 73af8000000100000003000206726164696f6d026e6c00000f0001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 32464 98fb000000010000000000000a6970353033633363616405737065656406706c616e6574026e6c00001c0001 98fb800000010000000300030a6970353033633363616405737065656406706c616e6574026e6c00001c0001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 32465 0cbf00000001000000000000036e73320a736d7365656e68756973026e6c00001c0001 0cbf80000001000000020002036e73320a736d7365656e68756973026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 32466 8c7f00000001000000000000036e73320a736d7365656e68756973026e6c0000260001 8c7f80000001000000020002036e73320a736d7365656e68756973026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 32467 0d2700000001000000000000036e73310a736d7365656e68756973026e6c00001c0001 0d2780000001000000020002036e73310a736d7365656e68756973026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d994ac0cc03d00010001000151800004d5c42f6c 32468 f7d400000001000000000000036e73310a736d7365656e68756973026e6c0000260001 f7d480000001000000020002036e73310a736d7365656e68756973026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d994ac0cc03d00010001000151800004d5c42f6c 32469 20b400000001000000000000036e7331036e7873026e6c0000010001 20b480000001000000020002036e7331036e7873026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c015c03600010001000151800004d973c102 32470 c0b60000000100000000000006776468303131066e7434616c6c026e6c0000010001 c0b68000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 32471 5205000000010000000000000832387a6f6e6e6574026e6c00000f0001 5205840300010000000100000832387a6f6e6e6574026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 32472 8fdf00100001000000000001026e7309656174736572766572026e6c00000100010000290800000080000000 8fdf80000001000000020003026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb12210000291000000000000000 32473 8cc800100001000000000001036e733209656174736572766572026e6c00000100010000290800000080000000 8cc880000001000000020003036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb12210000291000000000000000 32474 28fb001000010000000000010f686f6e6473727567636f6c6c656765026e6c00000f00010000290800000080000000 28fb800000010000000200030f686f6e6473727567636f6c6c656765026e6c00000f0001c00c00020001000151800009036e7331026973c01cc00c00020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c415030000291000000000000000 32475 1b6b28000001000000010000026e6c0000060001085f6b706173737764045f7564700868756c73626f7577026e6c000021000100000258001d0000006401d0096e742d7365727665720868756c73626f7577026e6c00 1b6ba8040000000000000000 32476 1b6e0000000100000000000005646e732d31056c61646f74026e6c0000010001 1b6e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32477 d15900000001000000000000036e733109756e69736572766572026e6c0000010001 d15980000001000000020002036e733109756e69736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3454b03c03c00010001000151800004d119a2fa 32478 b3fb00000001000000000000036e733209756e69736572766572026e6c0000010001 b3fb80000001000000020002036e733209756e69736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004c3454b03c00c00010001000151800004d119a2fa 32479 c37f00000001000000000000076c65757769636f026e6c0000020001 c37f80000001000000020002076c65757769636f026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 32480 000000007002400082ad0000020405b401010402 000080010000000000000000 32481 74e30000000100000000000002786903647078026e6c0000010001 74e38000000100000002000202786903647078026e6c0000010001c00f0002000100015180000e036e7330077472616e736970c013c00f00020001000151800006036e7331c02bc0270001000100015180000450454343c0410001000100015180000450454242 32482 5156000000010000000000000f686f6e6473727567636f6c6c656765026e6c00000f0001 5156800000010000000200020f686f6e6473727567636f6c6c656765026e6c00000f0001c00c00020001000151800009036e7331026973c01cc00c00020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 32483 b6d481b85010447072640000000000000000 32484 b6d481b85010447072640000000000000000 32485 b6d481b8501844700b7c000000909cca000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff7d403c50fd0003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000 32486 c0e30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c0e38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32487 11e10000000100000000000003626c3102626c06787334616c6c026e6c0000010001 11e18000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32488 45190000000100000000000005646e732d31056c61646f74026e6c0000010001 45198000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32489 1bcf00000001000000000000037777770466766b76026e6c0000010001 1bcf80000001000000020002037777770466766b76026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c015c01000020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 32490 17cb00000001000000000000036e73310b676c6f62616c7369746573026e6c0000010001 17cb80000001000000020002036e73310b676c6f62616c7369746573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cce37ac03e00010001000151800004d94d8b0c 32491 ae1600000001000000000000036e73320b676c6f62616c7369746573026e6c0000010001 ae1680000001000000020002036e73320b676c6f62616c7369746573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d4cce37ac00c00010001000151800004d94d8b0c 32492 43c10000000100000000000005646e732d32056c61646f74026e6c0000010001 43c18000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32493 b6d481c65011446271d10000000000000000 32494 35f900000001000000000000067372763031320b66726565686f7374696e67026e6c00000f0001 35f980000001000000020000067372763031320b66726565686f7374696e67026e6c00000f0001c0130002000100015180001105646e732d33056c61646f7403636f6d00c0130002000100015180000805646e732d34c039 32495 00000000700240008dc10000020405b401010402 000080010000000000000000 32496 0be800000001000000000000036e7332066470706c7573026e6c0000010001 0be880000001000000020001036e7332066470706c7573026e6c0000010001c01000020001000151800014026e730b706c617a6167726f757065036e657400c01000020001000151800002c00cc00c00010001000151800004d5c1ea0d 32497 3db500000001000000000000036e7332086d65646961776562026e6c0000010001 3db580000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 32498 27d900000001000000000000036e7333086d65646961776562026e6c0000010001 27d980000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 32499 b6d481c75010446271d00000000000000000 32500 b6d481c75010446271d00000000000000000 32501 721b0000000100000000000003777777146a61636f62636174736c61616e2d6c656964656e026e6c0000010001 721b8000000100000002000003777777146a61636f62636174736c61616e2d6c656964656e026e6c0000010001c0100002000100015180000c026e73066863636e6574c025c01000020001000151800006036e7332c03c 32502 b6d75f37501044709ff60000000000000000 b6d7df340000000000000000 32503 b6d75f37501044709ff60000000000000000 b6d7df340000000000000000 32504 9e5200100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 9e5280000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 32505 45a5000000010000000000000866616c6c6261636b0577696e646f026e6c0000010001 45a5800000010000000200020866616c6c6261636b0577696e646f026e6c0000010001c015000200010001518000070469697331c015c01500020001000151800008056969733137c015c02f00010001000151800004d9aa050bc04200010001000151800004d9aa0430 32506 b6d75f37501844703a11000000909cc8000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff7d403c50fd0003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000 b6d7df340000000000000000 32507 05ed000000010000000000000377777708776f657374796e65026e6c0000010001 05ed800000010000000200020377777708776f657374796e65026e6c0000010001c01000020001000151800009026e7303697873c019c01000020001000151800006036e7332c030c02d00010001000151800004d4f13ff8c04200010001000151800004d4f13ff9 32508 2cbd000000010000000000000468637267026e6c00000f0001 2cbd800000010000000200000468637267026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c028 32509 9e3700000001000000000000026e73076e656473746174026e6c0000010001 9e3780000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 32510 843b00000001000000000000036e7333076e656473746174026e6c0000010001 843b80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 32511 b6d75f45501144629f630000000000000000 b6d7df440000000000000000 32512 0000000070024000bf550000020405b401010402 000080010000000000000000 32513 e7d000000001000000000000036e733107737572666e6574026e6c0000010001 e7d080000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 32514 b6d75f46501044629f620000000000000000 b6d7df440000000000000000 32515 b6d75f46501044629f620000000000000000 b6d7df440000000000000000 32516 b6d84c5e50104470e4620000000000000000 b6d8cc540000000000000000 32517 b6d84c5e50104470e4620000000000000000 b6d8cc540000000000000000 32518 218800000001000000000000046e743036036d7069026e6c0000010001 218880000001000000020002046e743036036d7069026e6c0000010001c011000200010001518000080573756e3032c011c01100020001000151800006036e7332c011c02900010001000151800004c0574f3ec03d00010001000151800004c0574f37 32519 98d200000001000000000000037777771264656c65756b7374656b6c656572746a6573026e6c0000010001 98d280000001000000020000037777771264656c65756b7374656b6c656572746a6573026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c03a 32520 f22400000001000000000000037777770677656b616d70026e6c0000010001 f22480000001000000020000037777770677656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02f 32521 b6d84c5e501844707e7f000000909cc6000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff7d403c50fd0003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000 b6d8cc540000000000000000 32522 413b000000010000000000000f4575726f6c696e652d6e73307666750e6575726f6c696e656f6e6c696e65026e6c0000010001 413b840300010000000100000f4575726f6c696e652d6e73307666750e6575726f6c696e656f6e6c696e65026e6c0000010001c02b00060001000038400036026e730f646f6d61696e2d7265676973747279c02b0a686f73746d6173746572c0420bf1e540000070800000384000278d0000003840 32523 b6d84c6c50114462e3cf0000000000000000 b6d8cc640000000000000000 32524 b9ac0000000100000000000008686f73746e616d650462696e640000100003 b9ac8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32525 b6d84c6d50104462e3ce0000000000000000 b6d8cc640000000000000000 32526 b6d84c6d50104462e3ce0000000000000000 b6d8cc640000000000000000 32527 89a600000001000000000000037777770579696c6469026e6c0000010001 89a680000001000000020002037777770579696c6469026e6c0000010001c0100002000100015180000a036e7331036e7873c016c01000020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 32528 89b20000000100000000000003777777026c31026e6c0000010001 89b28000000100000002000003777777026c31026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c02b 32529 23e600000001000000000000037777770c72656d636f646570656d636f026e6c0000010001 23e680000001000000020000037777770c72656d636f646570656d636f026e6c0000010001c01000020001000151800015036e73310b7072696f73657276653037036e657400c01000020001000151800006036e7332c035 32530 ee0a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 ee0a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32531 2d480000000100000000000013535445524c494e47534156494e475342414e4b026e6c0000020001 2d488403000100000001000013535445524c494e47534156494e475342414e4b026e6c0000020001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 32532 ae11000000010000000000000a6c6576636f67726f6570026e6c0000020001 ae11800000010000000200020a6c6576636f67726f6570026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 32533 a37400100001000000000000037777770c7461616c707572697374656e026e6c0000010001 a37480000001000000020002037777770c7461616c707572697374656e026e6c0000010001c0100002000100015180000a036e733103677673c01dc01000020001000151800006036e7332c035c031000100010001518000045054e1aac04700010001000151800004d4ccc646 32534 82c4000000010000000000000377777708643636617374656e026e6c0000010001 82c4800000010000000200000377777708643636617374656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 32535 2d61000000010000000000000377777703632661026e6c0000010001 2d61840300010000000100000377777703632661026e6c0000010001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 32536 d7d40000000100000000000004646e7332066e696a636f6d026e6c0000010001 d7d48000000100000002000204646e7332066e696a636f6d026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02c00010001000151800004d5efb108c00c00010001000151800004d5efb116 32537 736000000001000000000000037777770a6c65756b657374617274026e6c0000010001 736080000001000000030003037777770a6c65756b657374617274026e6c0000010001c0100002000100015180000c036e7331056d61786573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f000100010001518000045045402ec047000100010001518000045045402fc059000100010001518000045045440a 32538 73cb00000001000000000000037777770a61626e616d726f777474026e6c0000010001 73cb80000001000000020000037777770a61626e616d726f777474026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c032 32539 dfff00000001000000000000037777771662656472696a6673616676616c736368656964696e67026e6c0000010001 dfff80000001000000030001037777771662656472696a6673616676616c736368656964696e67026e6c0000010001c0100002000100015180000e026e7308767575727765726bc027c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c059c03b000100010001518000043efa0202 32540 69c200000001000000000000036e7331056132303030026e6c0000010001 69c280000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 32541 272100000001000000000000036e7332056132303030026e6c0000010001 272180000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 32542 68d0000000010000000000000b776f726c646f6e6c696e65026e6c0000010001 68d0800000010000000300020b776f726c646f6e6c696e65026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c018c00c0002000100015180000704616e7332c031c00c0002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c04700010001000151800004c3f13325 32543 485400000001000000000000037777770976616b6b616e6a6572026e6c0000010001 485484030001000000010000037777770976616b6b616e6a6572026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 32544 5a0d00000001000000000000024e53085241424f42414e4b026e6c0000010001 5a0d80000001000000020001024e53085241424f42414e4b026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 32545 125200000001000000000000024e53085241424f42414e4b026e6c0000260001 125280000001000000020001024e53085241424f42414e4b026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 32546 62de00000001000000000000046d61696c096c65617365706c616e026e6c0000010001 62de80000001000000020001046d61696c096c65617365706c616e026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000d026e73046575726f036e657400c02f00010001000151800004c286e702 32547 61dc00000001000000000000037777770a77656273657867696473026e6c0000010001 61dc80000001000000030002037777770a77656273657867696473026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 32548 02f500000001000000000000037777770433616970026e6c0000010001 02f580000001000000020000037777770433616970026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c015c0100002000100015180000704686e7331c02e 32549 fe9600100001000000000001076863636669646f03686363026e6c0000ff00010000290800000000000000 fe9680000001000000020001076863636669646f03686363026e6c0000ff0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c0320000291000000000000000 32550 addc00000001000000000000046d33706f026e6c00000f0001 addc80000001000000020002046d33706f026e6c00000f0001c00c0002000100015180000e04646e7331066e696a636f6dc011c00c0002000100015180000704646e7332c02ac02500010001000151800004d5efb108c03f00010001000151800004d5efb116 32551 2e7c000000010000000000000745434f4e3232380867656d65656e74650c67656c6465726d616c73656e026e6c0000010001 2e7c800000010000000200020745434f4e3232380867656d65656e74650c67656c6465726d616c73656e026e6c0000010001c01d00020001000151800005026e73c01dc01d00020001000151800006036e7332c01dc03e00010001000151800004c143b9b5c04f00010001000151800004c143b9b6 32552 dbfc0000000100000000000004444e5331055348454c4c026e6c0000010001 dbfc8000000100000003000004444e5331055348454c4c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 32553 c4d500100001000000000001046d61696c03777873026e6c00000100010000290800000000000000 c4d580000001000000030004046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a650000291000000000000000 32554 fddf000000010000000000000468637267026e6c00000f0001 fddf800000010000000200000468637267026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c028 32555 7ac300100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 7ac380000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 32556 19400000000100000000000007616e74656e6e61026e6c00000f0001c0 19408000000100000002000107616e74656e6e61026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 32557 1f8c00000001000000000000066465636f636f026e6c00000f0001 1f8c80000001000000020000066465636f636f026e6c00000f0001c00c00020001000151800012036e7333086e6574766c696573036e657400c00c00020001000151800006036e7334c02b 32558 71440000000100000000000003777777056e6f6b6961026e6c0000010001 71448000000100000004000003777777056e6f6b6961026e6c0000010001c0100002000100015180000e026e73056e6f6b696103636f6d00c01000020001000151800006036e7332c02dc0100002000100015180000b046e73646103657874c02dc01000020001000151800007046e73686bc05b 32559 3f05000000010000000000000a6c657665646573746164026e6c0000020001 3f05800000010000000200020a6c657665646573746164026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 32560 9a790000000100000000000005756e696361026e6c00000f0001 9a798000000100000003000105756e696361026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 32561 364400000001000000000000086a64672d696e7374026e6c00000f0001 364480000001000000020000086a64672d696e7374026e6c00000f0001c00c0002000100015180000c036e723405692d702d64c015c00c00020001000151800006036e7236c02d 32562 74290000000100000000000003626c3102626c06787334616c6c026e6c0000010001 74298000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32563 5db200000001000000000000086a64672d696e7374026e6c00000f0001 5db280000001000000020000086a64672d696e7374026e6c00000f0001c00c0002000100015180000c036e723405692d702d64c015c00c00020001000151800006036e7236c02d 32564 cc38000000010000000000000237340331393603313932033230330964796e61626c6f636b07656173796e6574026e6c0000100001 cc38800000010000000200020237340331393603313932033230330964796e61626c6f636b07656173796e6574026e6c0000100001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 32565 23d1000000010000000000000d73656375726974797072696e74026e6c0000010001 23d1800000010000000200010d73656375726974797072696e74026e6c0000010001c00c0002000100015180000a036e733303777873c01ac00c00020001000151800006036e7334c032c04400010001000151800004d5ef9a65 32566 79ff0000000100000000000003777777096d756c7469626c6164026e6c0000010001 79ff8000000100000002000203777777096d756c7469626c6164026e6c0000010001c01000020001000151800009036e7331026973c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5852102c04300010001000151800004d5c41503 32567 9c65000000010000000000000377777703736e70026e6c0000010001 9c65800000010000000200000377777703736e70026e6c0000010001c0100002000100015180000f026e7306696e74616b7403636f6d00c01000020001000151800010036e733206776964657873036e657400 32568 aa120000000100000000000006636173746f72086c6f7374626f7973026e6c0000010001 aa128000000100000002000206636173746f72086c6f7374626f7973026e6c0000010001c01300020001000151800002c00cc0130002000100015180000906706f6c6c7578c013c00c000100010001518000043e32050ac03e00010001000151800004c297d912 32569 038a00000001000000000000026e7309656174736572766572026e6c0000010001 038a80000001000000020002026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb1221 32570 81c500000001000000000000036e733209656174736572766572026e6c0000010001 81c580000001000000020002036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb1221 32571 446d0000000100000000000003777777026e6c0676656e7261790963697479746f776572026e6c0000010001 446d8000000100000002000003777777026e6c0676656e7261790963697479746f776572026e6c0000010001c01a00020001000151800013037764780963697479746f77657203636f6d00c01a00020001000151800006036e7678c03c 32572 f65300000001000000000000036b3272026e6c00000f0001 f65380000001000000020000036b3272026e6c00000f0001c00c0002000100015180000f026e7306777367617465036e657400c00c00020001000151800006036e7332c027 32573 5a4200000001000000000000036e733106737072696e74026e6c00001c0001 5a4280000001000000020002036e733106737072696e74026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c202c03900010001000151800004d4ccd6a6 32574 4c8600000001000000000000036e733106737072696e74026e6c0000260001 4c8680000001000000020002036e733106737072696e74026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c202c03900010001000151800004d4ccd6a6 32575 ff4f00000001000000000000036e733206737072696e74026e6c00001c0001 ff4f80000001000000020002036e733206737072696e74026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d973c202c00c00010001000151800004d4ccd6a6 32576 534800000001000000000000036e733206737072696e74026e6c0000260001 534880000001000000020002036e733206737072696e74026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d973c202c00c00010001000151800004d4ccd6a6 32577 c3ac00000001000000000000036e733107737572666e6574026e6c0000010001 c3ac80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 32578 e00a000000010000000000000377777706766974686173026e6c0000010001 e00a800000010000000300020377777706766974686173026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 32579 a9b30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 a9b38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32580 feaa00000001000000000000046d61696c03777873026e6c0000010001 feaa80000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 32581 23d9000000010000000000000631326d6f7665026e6c00000f0001 23d9800000010000000300020631326d6f7665026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 32582 dd5b000000010000000000000663726176656e0564656d6f6e026e6c0000010001 dd5b800000010000000300020663726176656e0564656d6f6e026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c0130002000100015180000f036e73320564656d6f6e036e657400c02d00010001000151800004c29f4906c03f00010001000151800004c29fb004 32583 6a91001000010000000000010377777706787334616c6c026e6c00000100010000290800000080000000 6a91800000010000000300030377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d09630000291000000000000000 32584 49350000000100000000000008696e6469676f6e6c026e6c00000f0001 49358000000100000002000208696e6469676f6e6c026e6c00000f0001c00c00020001000151800012036e73310b696e6263686f7374696e67c015c00c00020001000151800006036e7332c02dc02900010001000151800004d5efb140c04700010001000151800004d5efb141 32585 944e00000001000000000000037777770867736d6c696e6b73026e6c0000010001 944e80000001000000030001037777770867736d6c696e6b73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 32586 3b2900000001000000000000054558414354054558414354026e6c0000010001 3b2980000001000000020001054558414354054558414354026e6c0000010001c01200020001000151800002c00cc0120002000100015180000b026e73026e6c036e657400c00c00010001000151800004910e3c0a 32587 8ea0000000010000000000000862617374696f6e3203766461026e6c0000010001 8ea0800000010000000200010862617374696f6e3203766461026e6c0000010001c0150002000100015180000a0762617374696f6ec015c0150002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c02d00010001000151800004d5a0c7e2 32588 a9dc00000001000000000000095354494e4b59434f57026e6c0000020001 a9dc84030001000000010000095354494e4b59434f57026e6c0000020001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 32589 73e300000001000000000000037777770e6b636b656e6e656d65726c616e64026e6c0000010001 73e380000001000000020000037777770e6b636b656e6e656d65726c616e64026e6c0000010001c0100002000100015180000c026e7306766576696461c01fc01000020001000151800006036e7332c036 32590 3d70000000010000000000000450433034116269626c696f746865656b626c6164656c026e6c0000010001 3d70840300010000000100000450433034116269626c696f746865656b626c6164656c026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 32591 64b9000000010000000000000a43435941434854494e47024e4c00000f0001 64b9800000010000000200020a43435941434854494e47024e4c00000f0001c00c00020001000151800010026e730a7a65656c616e646e6574c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d473c0c1c04700010001000151800004d473c0c3 32592 cd4900000001000000000000037777770c766f6c766f68617262657273026e6c0000010001 cd4984030001000000010000037777770c766f6c766f68617262657273026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 32593 06b8000000010000000000000377777706787334616c6c026e6c0000010001 06b8800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 32594 9a8e00000001000000000000036e733106776964657873026e6c0000010001 9a8e80000001000000030002036e733106776964657873026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa0703 32595 a5c700000001000000000000036e733306776964657873026e6c0000010001 a5c780000001000000030002036e733306776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800002c00cc02b00010001000151800004d4ccc0fcc00c000100010001518000043efa0703 32596 6e5a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 6e5a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32597 d1990010000100000000000003626c3102626c06787334616c6c026e6c0000010001 d1998000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32598 d1f0000000010000000000000766313331323534057570632d66066368656c6c6f026e6c0000010001 d1f0800000010000000300030766313331323534057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 32599 ec6600100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 ec6680000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 32600 94600000000100000000000003766461026e6c00000f0001 94608000000100000002000103766461026e6c00000f0001c00c0002000100015180000a0762617374696f6ec00cc00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c02400010001000151800004d5a0c7e2 32601 1c22000000010000000000000e64756262656c737465796e626d77026e6c0000010001 1c22800000010000000200020e64756262656c737465796e626d77026e6c0000010001c00c0002000100015180000d04646e733105692d702d64c01bc00c0002000100015180000704646e7332c034c02f00010001000151800004d9124003c04800010001000151800004d9124104 32602 e6e80000000100000000000009736d74702d6f75743406787334616c6c026e6c0000010001 e6e88000000100000003000209736d74702d6f75743406787334616c6c026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000d026e730472697065036e657400c03100010001000151800004c26d0642c04200010001000151800004c26d0963 32603 b2510000000100000000000003777777073132666f72756d026e6c0000010001 b2518000000100000002000203777777073132666f72756d026e6c0000010001c01000020001000151800012036e73310b737461727464657369676ec018c01000020001000151800006036e7332c030c02c00010001000151800004d5f73823c04a000100010001518000043ed45149 32604 6648000000010000000000000c676f686f6576656c616b656e026e6c00000f0001 6648840300010000000100000c676f686f6576656c616b656e026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 32605 b03f000000010000000000000d6c6576656c75706d757a69656b026e6c0000020001 b03f800000010000000200020d6c6576656c75706d757a69656b026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 32606 5d2a28000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d736463730f737465726e2d736572766572626f6c026e6c00002100010000025800270000006401850c737465726e2d7365727665720f737465726e2d736572766572626f6c026e6c00 5d2aa8040000000000000000 32607 00000000700240002fa400000204057a01010402 000080010000000000000000 32608 7f4b00000001000000000000076863636669646f03686363026e6c0000ff0001 7f4b80000001000000020000076863636669646f03686363026e6c0000ff0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c032 32609 114b001000010000000000010b6d61726b74706c61617473026e6c00000100010000290800000000000000 114b800000010000000200010b6d61726b74706c61617473026e6c0000010001c00c0002000100015180000f036e733105796b6f6f6e036e657400c00c00020001000151800006036e7332c0300000291000000000000000 32610 b6d9d267501041b8d1240000000000000000 32611 b6d9d267501841b8b41f000000945b40000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe2d403c4fad0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000 32612 b6d9d275501141aad08d0000000000000000 32613 000000007002400024ae00000204057a01010402 000080010000000000000000 32614 74490000000100000000000004696e666f086263656e7472616c026e6c0000010001 74498000000100000002000004696e666f086263656e7472616c026e6c0000010001c0110002000100015180001204646e73310763616c616e7a61036e657400c0110002000100015180000704646e7332c033 32615 b6d9d276501041aad08c0000000000000000 32616 b6da64c0501041b833d50000000000000000 b6dae4c40000000000000000 32617 d76100000001000000000000037777770e76616e67616e736577696e6b656c026e6c0000010001 d76180000001000000020002037777770e76616e67616e736577696e6b656c026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01fc01000020001000151800006036e7332c037c03300010001000151800004d43d0f08c05100010001000151800004d43d19e2 32618 b6da64c0501841b84611000000942d00000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe2d403c4fad0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000 b6dae4c40000000000000000 32619 28c2000000010000000000000b6d61726b74706c61617473026e6c0000010001 28c2800000010000000200000b6d61726b74706c61617473026e6c0000010001c00c0002000100015180000f036e733105796b6f6f6e036e657400c00c00020001000151800006036e7332c030 32620 dfe60000000100000000000003777777066f757476616b026e6c0000010001 dfe68000000100000002000003777777066f757476616b026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c02f 32621 b6da64ce501141aa333e0000000000000000 b6dae4c40000000000000000 32622 0000000070024000572500000204057a01010402 000080010000000000000000 32623 3832000000010000000000000e61726e6f6c642d73696564736d61026e6c0000010001 3832800000010000000200000e61726e6f6c642d73696564736d61026e6c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c033 32624 2c9e0000000100000000000003657a68026e6c0000010001 2c9e8000000100000002000103657a68026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c0240001000100015180000489ae8f03 32625 b6da64cf501041aa333d0000000000000000 b6dae4c40000000000000000 32626 b6db160b501041b8b5000000000000000000 b6db96040000000000000000 32627 b6db160b501841b8ff3b00000094f500000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe2d403c4fad0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000 b6db96040000000000000000 32628 a2a500000001000000000000036e733107737572666e6574026e6c0000010001 a2a580000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 32629 b6db1619501141aab4690000000000000000 b6db96140000000000000000 32630 8b7300000001000000000000037777770b6f6e6c696e652d64617461026e6c0000010001 8b7380000001000000020002037777770b6f6e6c696e652d64617461026e6c0000010001c0100002000100015180000b036e73310431326e73c01cc01000020001000151800006036e7332c034c030000100010001518000043ed44ca0c047000100010001518000043ed4440c 32631 b6db161a501041aab4680000000000000000 b6db96140000000000000000 32632 2c4a00000001000000000000036e73310b736c61636b736572766572026e6c0000010001 2c4a80000001000000020002036e73310b736c61636b736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043ed444c0c03e000100010001518000043ed44d0a 32633 931100000001000000000000036e73320b736c61636b736572766572026e6c0000010001 931180000001000000020002036e73320b736c61636b736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc030000100010001518000043ed444c0c00c000100010001518000043ed44d0a 32634 738e0000000100000000000003777777096f6e6465727374616c0a64656875697361727473026e6c0000010001 738e8000000100000002000203777777096f6e6465727374616c0a64656875697361727473026e6c0000010001c01a00020001000151800009036e7331026973c025c01a00020001000151800006036e7332c03dc03900010001000151800004d5852102c04e00010001000151800004d5c41503 32635 e2390000000100000000000003777777147665726b656572737363686f6f6c737563636573026e6c0000010001 e2398000000100000002000003777777147665726b656572737363686f6f6c737563636573026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03f 32636 3a490000000100000000000005646e732d31056c61646f74026e6c0000010001 3a498000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32637 686b0000000100000000000005646e732d32056c61646f74026e6c0000010001 686b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32638 c67a00000001000000000001036e733107616e7461726573026e6c00000100010000291000000000000000 c67a80000001000000020003036e733107616e7461726573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e3a260bc03a000100010001518000043e3a260c0000291000000000000000 32639 118a00000001000000000001036e733207616e7461726573026e6c00000100010000291000000000000000 118a80000001000000020003036e733207616e7461726573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043e3a260bc00c000100010001518000043e3a260c0000291000000000000000 32640 c91400000001000000000000096c6576656c7a65726f026e6c0000020001 c91480000001000000020002096c6576656c7a65726f026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 32641 d9e60000000100000000000007706572736f7a61026e6c00000f0001 d9e68000000100000002000207706572736f7a61026e6c00000f0001c00c00020001000151800009036e7331026973c014c00c00020001000151800006036e7332c02cc02800010001000151800004d5852102c03d00010001000151800004d5c41503 32642 1f0a00000001000000000000086d61696c706f6e33086b706e72656c6179026e6c0000010001 1f0a80000001000000020001086d61696c706f6e33086b706e72656c6179026e6c0000010001c0150002000100015180000c036e7331056532666178c01ec0150002000100015180000d036e7332036b706e036e657400c03200010001000151800004c2976c97 32643 5afc00000001000000000000086d61696c706f6e33086b706e72656c6179026e6c00001c0001 5afc80000001000000020001086d61696c706f6e33086b706e72656c6179026e6c00001c0001c0150002000100015180000c036e7331056532666178c01ec0150002000100015180000d036e7332036b706e036e657400c03200010001000151800004c2976c97 32644 76a200000001000000000000037777770e6f726967696e616c64657369676e026e6c0000010001 76a280000001000000020001037777770e6f726967696e616c64657369676e026e6c0000010001c0100002000100015180000f036e73330864686f7374696e67c01fc01000020001000151800006036e7332c037c04e00010001000151800004515b000a 32645 847700000001000000000000086d61696c706f6e32086b706e72656c6179026e6c0000010001 847780000001000000020001086d61696c706f6e32086b706e72656c6179026e6c0000010001c0150002000100015180000c036e7331056532666178c01ec0150002000100015180000d036e7332036b706e036e657400c03200010001000151800004c2976c97 32646 391400000001000000000000086d61696c706f6e32086b706e72656c6179026e6c00001c0001 391480000001000000020001086d61696c706f6e32086b706e72656c6179026e6c00001c0001c0150002000100015180000c036e7331056532666178c01ec0150002000100015180000d036e7332036b706e036e657400c03200010001000151800004c2976c97 32647 00a600000001000000000000026e7303773373026e6c0000010001 00a680000001000000020001026e7303773373026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c2e57c02 32648 4481000000010000000000000774697363616c69026e6c00000f0001 4481800000010000000300020774697363616c69026e6c00000f0001c00c0002000100015180000704616e7331c00cc00c0002000100015180000704616e7332c00cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02800010001000151800004c3f14d38c03b00010001000151800004c3f13325 32649 c67a00000001000000000000036e733107616e7461726573026e6c0000010001 c67a80000001000000020002036e733107616e7461726573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e3a260bc03a000100010001518000043e3a260c 32650 118a00000001000000000000036e733207616e7461726573026e6c0000010001 118a80000001000000020002036e733207616e7461726573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043e3a260bc00c000100010001518000043e3a260c 32651 7d4000000001000000000000066c61626f7473026e6c00000f0001 7d4080000001000000020002066c61626f7473026e6c00000f0001c00c00020001000151800017036e7331107370686572616e616d65736572766572c013c00c00020001000151800006036e7332c02bc0270001000100015180000451047004c04a0001000100015180000451047002 32652 6c8500000001000000000000036e7331066e6c74726565026e6c0000010001 6c8580000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 32653 83e100000001000000000000036e7331066e6c74726565026e6c0000260001 83e180000001000000020002036e7331066e6c74726565026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 32654 699a000000010000000000000377777711617175617269616c65657577617264656e026e6c0000010001 699a800000010000000200000377777711617175617269616c65657577617264656e026e6c0000010001c01000020001000151800013036e73300964757463682d6e657403636f6d00c01000020001000151800006036e7331c03a 32655 cbf400000001000000000000037777770665726e656e73026e6c0000010001 cbf480000001000000020000037777770665726e656e73026e6c0000010001c01000020001000151800014026e730b7365727665722d686f6d65036e657400c01000020001000151800006036e7332c02e 32656 c3890000000100000000000005706f706d61026e6c00000f0001 c3898000000100000002000205706f706d61026e6c00000f0001c00c0002000100015180000e036e7331076a646e686f7374c012c00c00020001000151800006036e7332c02ac026000100010001518000045054e451c040000100010001518000045054e452 32657 b2e600000001000000000000037777770f74686561746572616c616361727465026e6c0000010001 b2e680000001000000030001037777770f74686561746572616c616361727465026e6c0000010001c0100002000100015180000e026e7308767575727765726bc020c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c052c034000100010001518000043efa0202 32658 121a000000010000000000000c6562686164766f636174656e026e6c00000f0001 121a800000010000000200000c6562686164766f636174656e026e6c00000f0001c00c000200010001518000140161026e73096c696e766973696f6e03636f6d00c00c000200010001518000040162c02f 32659 947300000001000000000000066a626a776562026e6c00000f0001 947380000001000000020002066a626a776562026e6c00000f0001c00c0002000100015180000a036e733103647768c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5efb308c03d00010001000151800004d5efb303 32660 38b60000000100000000000009652d6c756e61746963026e6c0000010001 38b68000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 32661 6b0a0000000100000000000004444e5331055348454c4c026e6c0000010001 6b0a8000000100000003000004444e5331055348454c4c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 32662 4692000000010000000000000e6174686c6f6e6361726c65617365026e6c00000f0001 4692800000010000000300030e6174686c6f6e6361726c65617365026e6c00000f0001c00c00020001000151800010036e7331096d61726b6772616166c01bc00c00020001000151800006036e7332c033c00c00020001000151800006036e7333c033c02f00010001000151800004c3f13ceec04b00010001000151800004c372eb43c05d000100010001518000043e320e8f 32663 9a56000000010000000000000a6d61696c6261636b7570066e6c74726565026e6c0000010001 9a56800000010000000200020a6d61696c6261636b7570066e6c74726565026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c03200010001000151800004d4b20403c04400010001000151800004d5881e45 32664 21f800000001000000000000097265706f72742d6e6c027330026e6c0000010001 21f880000001000000020002097265706f72742d6e6c027330026e6c0000010001c0160002000100015180000d026e73076e656473746174c019c01600020001000151800006036e7333c030c02d00010001000151800004d4482615c04600010001000151800004d5c4021d 32665 3bb40000000100000000000007617065736a6974026e6c0000ff0001 3bb48000000100000002000007617065736a6974026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c014c00c00020001000151800006036e7332c02b 32666 362e00000001000000000000046d61696c0f7363687265756465726875697a656e026e6c0000010001 362e80000001000000030001046d61696c0f7363687265756465726875697a656e026e6c0000010001c0110002000100015180000e026e7308767575727765726bc021c01100020001000151800012036e733208767575727765726b036e657400c01100020001000151800006036e7333c053c035000100010001518000043efa0202 32667 b880000000010000000000000770617261676f6e026e6c00000f0001 b880800000010000000300010770617261676f6e026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 32668 6c9600000001000000000000066a626a776562026e6c0000010001 6c9680000001000000020002066a626a776562026e6c0000010001c00c0002000100015180000a036e733103647768c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5efb308c03d00010001000151800004d5efb303 32669 3c320000000100000000000006617272616e64026e6c00000f0001 3c328000000100000002000006617272616e64026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02a 32670 14a3000000010000000000000377777703766964026e6c0000010001 14a3800000010000000200020377777703766964026e6c0000010001c01000020001000151800011036e73310a616363657373706f7274c014c01000020001000151800006036e7332c02cc02800010001000151800004d4483408c04500010001000151800004d4483409 32671 ab02000000010000000000000863656e6562616e6b026e6c00000f0001 ab02800000010000000200000863656e6562616e6b026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02f 32672 59c00000000100000000000003666c79036b6c6d026e6c0000010001 59c08000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 32673 1807000000010000000000000776657273696f6e0462696e640000100003 1807800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 32674 3ad5000000010000000000000377777706787334616c6c026e6c0000010001 3ad5800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 32675 3dbb00000001000000000000037777770b73657866696c6d70696573026e6c0000010001 3dbb80000001000000020000037777770b73657866696c6d70696573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c033 32676 be1c00100001000000000001046f6b656d026e6c00000f00010000290800000080000000 be1c80000001000000020001046f6b656d026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c0290000291000000000000000 32677 3afe0000000100000000000005646e732d31056c61646f74026e6c0000010001 3afe8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32678 bf9b0000000100000000000005646e732d32056c61646f74026e6c0000010001 bf9b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32679 c8cd00000001000000000000036e73320b666163696e676661637473026e6c0000010001 c8cd80000001000000020002036e73320b666163696e676661637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d513b013c00c00010001000151800004d513b012 32680 b4ec00000001000000000000026e730b666163696e676661637473026e6c0000010001 b4ec80000001000000020002026e730b666163696e676661637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d513b013c03d00010001000151800004d513b012 32681 85370000000100000000000008686f73746e616d650462696e640000100003 85378000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32682 797e000000010000000000000573696e6574026e6c00001c0001 797e800000010000000200010573696e6574026e6c00001c0001c00c000200010001518000110a686f6c30316578646e730369636cc012c00c0002000100015180000b026e73026e6c036e657400c02600010001000151800004c14f9064 32683 53a900000001000000000000026e6c0000060001 53a984000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 32684 0afc00000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 0afc80000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 32685 829a00000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 829a80000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 32686 c14d00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 c14d80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 32687 565f00000001000000000000067765626e69780e6575726f636f6e73756c74616e74026e6c0000010001 565f80000001000000020002067765626e69780e6575726f636f6e73756c74616e74026e6c0000010001c01300020001000151800002c00cc0130002000100015180000a076d61696c6e6978c013c00c000100010001518000045117e555c044000100010001518000045117e556 32688 5a750000000100000000000003626c3402626c06787334616c6c026e6c0000010001 5a758000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32689 e49b00000001000000000000037777770b6d61726b74706c61617073026e6c0000010001 e49b84030001000000010000037777770b6d61726b74706c61617073026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 32690 ed7f0000000100000000000008686f73746e616d650462696e640000100003 ed7f8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32691 e638000000010000000000000377777706672d6e697573026e6c0000010001 e638800000010000000200000377777706672d6e697573026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 32692 ba6d00000001000000000000056d61696c3109656e6f766174696f6e026e6c0000010001 ba6d80000001000000030002056d61696c3109656e6f766174696f6e026e6c0000010001c01200020001000151800006036e7334c012c01200020001000151800006036e7333c012c0120002000100015180001404646e733309656e6f766174696f6e036e657400c030000100010001518000049105fc46c042000100010001518000049105fc4e 32693 b16e00000001000000000000026e73076e656473746174026e6c0000010001 b16e80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 32694 c13300000001000000000000036e7333076e656473746174026e6c0000010001 c13380000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 32695 b18c00000001000000000000036e7331046372696f026e6c0000010001 b18c80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32696 d89e00000001000000000000036e7332046372696f026e6c0000010001 d89e80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32697 adc700000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 adc780000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32698 675c00000001000000000000026e730f444f4d41494e2d5245474953545259026e6c00001c0001 675c80000001000000030002026e730f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 32699 f2aa00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 f2aa80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32700 52ba00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 52ba80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 32701 512c0000000100000000000003777777087365637572697479026e6c0000010001 512c8000000100000002000203777777087365637572697479026e6c0000010001c0100002000100015180000b036e73310470696e65c019c01000020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 32702 c05e00100001000000000001036e733503777873026e6c00000100010000290800000080000000 c05e80000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 32703 039800000001000000000000066865726d657304626f757703746e6f026e6c0000010001 039880000001000000030003066865726d657304626f757703746e6f026e6c0000010001c0180002000100015180000b0866726f6e74696572c018c0180002000100015180000e036e733107737572666e6574c01cc01800020001000151800007047a657573c018c0300001000100015180000486dd0102c04700010001000151800004c0576a65c0610001000100015180000486dd0202 32704 15ae0000000100000000000006746e6f66656c0366656c03746e6f026e6c0000010001 15ae8000000100000003000306746e6f66656c0366656c03746e6f026e6c0000010001c0170002000100015180000b0866726f6e74696572c017c0170002000100015180000e036e733107737572666e6574c01bc01700020001000151800007047a657573c017c02f0001000100015180000486dd0102c04600010001000151800004c0576a65c0600001000100015180000486dd0202 32705 5516000000010000000000000866726f6e7469657203746e6f026e6c0000010001 5516800000010000000300030866726f6e7469657203746e6f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c01500020001000151800007047a657573c015c00c0001000100015180000486dd0102c03b00010001000151800004c0576a65c0550001000100015180000486dd0202 32706 ff590000000100000000000003646578026e6c0000ff0001 ff598000000100000002000203646578026e6c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 32707 6000000000010000000000000a6261706172746e657273026e6c0000ff0001 6000800000010000000200000a6261706172746e657273026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c017c00c00020001000151800006036e7332c02e 32708 602f00000001000000000000036e733503777873026e6c0000010001 602f80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 32709 bf0b00000001000000000000046d61696c1162656b6b657273636f6e73756c74696e67026e6c0000010001 bf0b80000001000000020000046d61696c1162656b6b657273636f6e73756c74696e67026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c03d 32710 69460000000100000000000006666c76697573026e6c00000f0001 69468403000100000001000006666c76697573026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 32711 907a0000000100000000000003777777146e6174696f6e616c652076616361747562616e6b026e6c0000010001 907a8403000100000001000003777777146e6174696f6e616c652076616361747562616e6b026e6c0000010001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 32712 8e9400000001000000000000056d61696c3207686f7374696e67026e6c0000010001 8e9480000001000000030003056d61696c3207686f7374696e67026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c02e000100010001518000043e818b01c040000100010001518000043e818b02c052000100010001518000043e818ae1 32713 1e920000000100000000000007766462636f6d70026e6c00001c0001 1e928000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 32714 6fdb000000010000000000000b6e732d767575727765726b07646f6f66706f74026e6c0000010001 6fdb800000010000000200020b6e732d767575727765726b07646f6f66706f74026e6c0000010001c0180002000100015180000f036e73310863616d627269756dc020c01800020001000151800006036e7332c038c03400010001000151800004d9131082c04f00010001000151800004d5efb202 32715 a6b600000001000000000000037777770a6d697374657268616e73026e6c0000010001 a6b680000001000000030003037777770a6d697374657268616e73026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c01bc01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02f0001000100015180000450474002c04d0001000100015180000450474102c05f00010001000151800004d943ee57 32716 95c90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 95c98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32717 35eb00000001000000000000046f6b656d026e6c00000f0001 35eb80000001000000020000046f6b656d026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c029 32718 757800000001000000000000037777770b68697473666f726b696473026e6c0000010001 757880000001000000020002037777770b68697473666f726b696473026e6c0000010001c01000020001000151800014036e73310d616c74656e61686f7374696e67c01cc0100002000100015180000f036e7332087375706572776562c01cc030000100010001518000043e15f001c050000100010001518000043e15f00e 32719 ddac0000000100000000000005646e732d32056c61646f74026e6c0000010001 ddac8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32720 127c00000001000000000000037777770577616e6170026e6c0000010001 127c84030001000000010000037777770577616e6170026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 32721 2c5d28000001000000010000026e6c0000060001055f6c646170045f7463702464633838393763392d636231362d346164362d393863662d34633062366433396431613407646f6d61696e73065f6d736463730470737277026e6c000021000100000258001700000064018507707372776673310470737277026e6c00 2c5da8040000000000000000 32722 195e00000001000000000000046d61696c057374656275026e6c0000010001 195e80000001000000020002046d61696c057374656275026e6c0000010001c0110002000100015180000f036e7331087375626d65646961c017c01100020001000151800006036e7332c02fc02b00010001000151800004d5bd141ac04600010001000151800004d5bd141b 32723 00000000700240009bd60000020405b401010402 000080010000000000000000 32724 829a00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 829a80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 32725 b6dcb7745010447055c90000000000000000 32726 aa5b00000001000000000000037777770972696e67746f6e696f026e6c0000010001 aa5b80000001000000020002037777770972696e67746f6e696f026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5efa404c04b00010001000151800004d5efa405 32727 b6dcb77450184470b7940000008af31e000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000 32728 a2e10000000100000000000005646e732d31056c61646f74026e6c0000010001 a2e18000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32729 03d10000000100000000000005646e732d32056c61646f74026e6c0000010001 03d18000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32730 588d000000010000000000000377777704746a6173026e6c0000010001 588d800000010000000200000377777704746a6173026e6c0000010001c0100002000100015180000c026e7306766576696461c015c01000020001000151800006036e7332c02c 32731 8baa00000001000000000000086168636272616e640564656d6f6e026e6c00000f0001 8baa80000001000000030002086168636272616e640564656d6f6e026e6c00000f0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 32732 8ab800000001000000000000037777770c6b7275697372696464657273026e6c0000010001 8ab880000001000000030003037777770c6b7275697372696464657273026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c01dc0100002000100015180000e0b6e616d6573657276657232c03dc0100002000100015180000e0b6e616d6573657276657233c03dc0310001000100015180000451ad2020c0550001000100015180000451ad2021c06f0001000100015180000452c049aa 32733 b6dcb78250114462553c0000000000000000 32734 b6dcb78350104462553b0000000000000000 32735 f8b3000000010000000000000377777706646967696d6f026e6c0000010001 f8b3800000010000000200000377777706646967696d6f026e6c0000010001c0100002000100015180001505646e7332300961637469766569737003636f6d00c0100002000100015180000805646e733231c031 32736 0000000070024000de930000020405b401010402 000080010000000000000000 32737 fab528000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730c6f6d64656e6f6f72642d6873026e6c00002100010000025800220000006401850a6f6d64656e6f6f722d310c6f6d64656e6f6f72642d6873026e6c00 fab5a8040000000000000000 32738 910b00000001000000000000037777770b73746567656d65696a6572026e6c0000010001 910b80000001000000030000037777770b73746567656d65696a6572026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c038c0100002000100015180000a076e73686f737433c038 32739 b6dd42c2501044700d380000000000000000 b6ddc2c40000000000000000 32740 614900000001000000000000046d61696c03777873026e6c0000010001 614980000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 32741 73d20000000100000000000005646e732d31056c61646f74026e6c0000010001 73d28000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32742 bdd100000001000000000000046162656c0564656d6f6e026e6c0000100001 bdd180000001000000030002046162656c0564656d6f6e026e6c0000100001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 32743 b6dd42c2501844709dac0000008ac576000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000 b6ddc2c40000000000000000 32744 6cf900000001000000000000046e7365310963617067656d696e69026e6c0000010001 6cf980000001000000030003046e7365310963617067656d696e69026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e736532c011c0110002000100015180000b086e732d69736d3031c011c00c00010001000151800004c6b8e70dc03d00010001000151800004c6b8e70cc05000010001000151800004d5f4a024 32745 875a00000001000000000000046e7365320963617067656d696e69026e6c0000010001 875a80000001000000030003046e7365320963617067656d696e69026e6c0000010001c01100020001000151800007046e736531c011c01100020001000151800002c00cc0110002000100015180000b086e732d69736d3031c011c02f00010001000151800004c6b8e70dc00c00010001000151800004c6b8e70cc05000010001000151800004d5f4a024 32746 43ad00000001000000000000086e732d69736d30310963617067656d696e69026e6c0000010001 43ad80000001000000030003086e732d69736d30310963617067656d696e69026e6c0000010001c01500020001000151800007046e736531c015c01500020001000151800007046e736532c015c01500020001000151800002c00cc03300010001000151800004c6b8e70dc04600010001000151800004c6b8e70cc00c00010001000151800004d5f4a024 32747 eda40000000100000000000005646e732d32056c61646f74026e6c0000010001 eda48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32748 b6dd42d0501144620cab0000000000000000 b6ddc2d40000000000000000 32749 f08e00000001000000000000096c65617365706c616e026e6c00000f0001 f08e80000001000000020001096c65617365706c616e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000d026e73046575726f036e657400c02a00010001000151800004c286e702 32750 1c2600000001000000000000046d61696c03777873026e6c00001c0001 1c2680000001000000030003046d61696c03777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 32751 00000000700240002fe800000204056401010402 000080010000000000000000 32752 b6dd42d1501044620caa0000000000000000 b6ddc2d40000000000000000 32753 44a900000001000000000000046e73303803777873026e6c00001c0001 44a980000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 32754 0000000070024000d64a0000020405b401010402 000080010000000000000000 32755 311e000000010000000000000377777708616e6e6f31383930026e6c0000010001 311e800000010000000200020377777708616e6e6f31383930026e6c0000010001c0100002000100015180000d036e733106313233623262c019c01000020001000151800006036e7332c031c02d000100010001518000045054e5b5c046000100010001518000045054e5b6 32756 64e800000001000000000000046e73303903777873026e6c00001c0001 64e880000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 32757 2dbd00000001000000000000036e733403777873026e6c00001c0001 2dbd80000001000000030003036e733403777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 32758 16c000000001000000000000037777770467696674026e6c0000010001 16c080000001000000020002037777770467696674026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec015c01000020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 32759 4da50000000100000000000005646e732d31056c61646f74026e6c0000010001 4da58000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32760 1f0d00000001000000000000046d61696c03777873026e6c0000010001 1f0d80000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 32761 b6de7c0150104470cbae0000000000000000 b6defc040000000000000000 32762 b6dde32a501040b0c1930000000000000000 32763 b6de7c015018447089cb0000008a97ce000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000 b6defc040000000000000000 32764 b6dde32a501840b028ec000000953809000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0270403c53f00003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000 32765 395b000000010000000000000377777708636d757064617465026e6c0000010001 395b800000010000000200020377777708636d757064617465026e6c0000010001c01000020001000151800011036e73310a64696769747061696e74c019c01000020001000151800006036e7332c031c02d00010001000151800004d9aa12e7c04a00010001000151800004d9aa12e6 32766 4b9800000001000000000000076c657769737072026e6c0000020001 4b9880000001000000020002076c657769737072026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 32767 b6de7c0f50114462cb210000000000000000 b6defc040000000000000000 32768 b6dde338501140a2c0fb0000000000000000 32769 b6de7c1050104462cb200000000000000000 b6defc140000000000000000 32770 0000000070024000beb100000204056401010402 000080010000000000000000 32771 1f370000000100000000000005646e732d32056c61646f74026e6c0000010001 1f378000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32772 cd4b0000000100000000000005646e732d31056c61646f74026e6c0000010001 cd4b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32773 b6dde339501040a2c0fa0000000000000000 32774 b6df39ac501040b0f9d90000000000000000 b6dfb9a40000000000000000 32775 aca30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 aca38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32776 b6df39ac501840b0a77000000095f2cb000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0270403c53f00003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000 b6dfb9a40000000000000000 32777 85300000000100000000000003777777077a616e64696e67026e6c0000010001 85308000000100000003000203777777077a616e64696e67026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 32778 d331000000010000000000000377777709656c616e686f626279026e6c0000010001 d331800000010000000200000377777709656c616e686f626279026e6c0000010001c01000020001000151800014026e730b7365727665722d686f6d65036e657400c01000020001000151800006036e7332c031 32779 2c6028000001000000020000026e6c00000600012464633532663064342d336431652d346162352d393232662d346130326630306236343937065f6d736463730470737277026e6c00000500ff000000000000c0140005000100000258001107707372776673310470737277026e6c00 2c60a8040000000000000000 32780 b6df39ba501140a2f9410000000000000000 b6dfb9b40000000000000000 32781 00000000700240008b4100000204056401010402 000080010000000000000000 32782 515b0000000100000000000003777777077377696e676572026e6c0000010001 515b8000000100000002000003777777077377696e676572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02f 32783 bd080000000100000000000005646e732d31056c61646f74026e6c0000010001 bd088000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32784 f2430000000100000000000005646e732d32056c61646f74026e6c0000010001 f2438000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32785 63f10000000100000000000003777777096175746f696e747261026e6c0000010001 63f18000000100000002000203777777096175746f696e747261026e6c0000010001c01000020001000151800009026e730368616ec01ac0100002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004914a670ac04300010001000151800004c0576a65 32786 0000000070024000e8b40000020405b401010402 000080010000000000000000 32787 2e210000000100000000000003777777026e73026e6c0000010001 2e218000000100000002000103777777026e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800013036e7332026e6c0669676e697465036e657400c02700010001000151800004d46c0d06 32788 b6df39bb501040a2f9400000000000000000 b6dfb9b40000000000000000 32789 731d00100001000000000001036e733107656173796e6574026e6c00000100010000290800000080000000 731d80000001000000020003036e733107656173796e6574026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c2a55e01c00c00010001000151800004c2a55e050000291000000000000000 32790 b6e211a950104470486d0000000000000000 b6e291a40000000000000000 32791 b6e12eb0501040b0d1630000000000000000 b6e1aeb40000000000000000 32792 b6e12eb0501840b0219a00000095502c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0270403c53f00003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000 b6e1aeb40000000000000000 32793 b6e211a95018447060d90000008a3c7e000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000 b6e291a40000000000000000 32794 fb310000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 fb318000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 32795 e6e50100000100000000000008616473657276657206776562616473026e6c0000010001 e6e58100000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 32796 b6e211b75011446247e00000000000000000 b6e291b40000000000000000 32797 dee70000000100000000000005646e732d31056c61646f74026e6c0000010001 dee78000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32798 b6e12ebe501140a2d0cb0000000000000000 b6e1aeb40000000000000000 32799 4a2b000000010000000000000d656c6861636f736d6574696373026e6c00000f0001 4a2b840300010000000100000d656c6861636f736d6574696373026e6c00000f0001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 32800 36e028000001000000010000026e6c0000060001035f6763045f746370155374616e64616172642d6565727374652d73697465065f7369746573096575726f6279746532026e6c000021000100000258001e000000640cc40945422d534552564552096575726f6279746532026e6c00 36e0a8040000000000000000 32801 60650000000100000000000003777777026e6c0b706170656e6472656368740963697479746f776572026e6c0000010001 60658000000100000002000003777777026e6c0b706170656e6472656368740963697479746f776572026e6c0000010001c01f00020001000151800013037764780963697479746f77657203636f6d00c01f00020001000151800006036e7678c041 32802 4b650000000100000000000005646e732d32056c61646f74026e6c0000010001 4b658000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32803 b6e211b85010446247df0000000000000000 b6e291b40000000000000000 32804 0000000070024000f6aa0000020405b401010402 000080010000000000000000 32805 46a1000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c00001c0001 46a1800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c00001c0001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 32806 5ab30000000100000000000012776f6d656e2d6f662d7468652d776f726c64026e6c00000f0001 5ab38000000100000003000112776f6d656e2d6f662d7468652d776f726c64026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01fc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c051c033000100010001518000043efa0202 32807 b6e2fd18501044706af30000000000000000 32808 b6e12ebf501040a2d0ca0000000000000000 b6e1aeb40000000000000000 32809 b6e2fd1850184470bff90000008a00e5000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000 32810 000000007002faf077cb00000204057a01010402 000080010000000000000000 32811 1fa000000001000000000000086865726272696e6b026e6c00000f0001 1fa080000001000000020000086865726272696e6b026e6c00000f0001c00c00020001000151800014026e730b7365727665722d686f6d65036e657400c00c00020001000151800006036e7332c02c 32812 9acc00000001000000000000037777770a646973747269666f6f64026e6c0000010001 9acc80000001000000020001037777770a646973747269666f6f64026e6c0000010001c01000020001000151800012036e733107686f7374696e6703656269c01bc0100002000100015180000d03646e73036b706e03636f6d00c02f00010001000151800004c1ad9c46 32813 b6e2fd26501144626a660000000000000000 32814 b6e3b1255010fbec3b400000000000000000 32815 e20700000001000000000000036e733103617474026e6c0000010001 e20780000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 32816 8dd80000000100000000000005646e732d31056c61646f74026e6c0000010001 8dd88000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32817 b6e3b1255018fbec7f23000000910700000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afedd403c505d0003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000 32818 1f5a0000000100000000000006787334616c6c026e6c00000f0001 1f5a8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 32819 b6e2fd27501044626a650000000000000000 32820 29380000000100000000000005646e732d32056c61646f74026e6c0000010001 29388000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32821 00000000700240003b130000020405b401010402 000080010000000000000000 32822 8911000000010000000000000377777709636f656e67726f656e026e6c0000010001 8911800000010000000200000377777709636f656e67726f656e026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01ac0100002000100015180000704686e7331c033 32823 b6e476715010447036010000000000000000 b6e4f6740000000000000000 32824 b6e3b1335011fbde3aac0000000000000000 32825 b6e4767150184470b8ae0000008ad33d000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004e03677373096d6963726f736f667403636f6d00403afd52403c4ed200030000002b4e544c4d535350000100000097b208e00400040027000000070007002000000050535257465331505352570000 b6e4f6740000000000000000 32826 2a5c0000000100000000000004636e61730661726e68656d066368656c6c6f026e6c0000010001 2a5c8000000100000003000304636e61730661726e68656d066368656c6c6f026e6c0000010001c01800020001000151800007046e733031c018c01800020001000151800007046e733032c018c0180002000100015180000a036e733103757063c01fc03300010001000151800004d4534482c04600010001000151800004d4534483c05900010001000151800004d48e1c42 32827 000000007002faf053c700000204057a01010402 000080010000000000000000 32828 b6e3b1345010fbde3aab0000000000000000 32829 b6e4767f5011446235740000000000000000 b6e4f6740000000000000000 32830 dd3c0000000100000000000006535449434144026e6c0000020001 dd3c8403000100000001000006535449434144026e6c0000020001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 32831 b6e4f3175010fbecd5480000000000000000 32832 b6e476805010446235730000000000000000 b6e4f6840000000000000000 32833 b6e4f3175018fbec01ad000000911f80000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afedd403c505d0003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000 32834 417a0000000100000000000005646e732d31056c61646f74026e6c0000010001 417a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32835 0bc0000000010000000000000774726166666963026e6c0000010001 0bc0800000010000000200000774726166666963026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 32836 90180000000100000000000005646e732d32056c61646f74026e6c0000010001 90188000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32837 b6e4f3255011fbded4b40000000000000000 32838 740400000001000000000000037777770e76616e67616e736577696e6b656c026e6c0000010001 740480000001000000020002037777770e76616e67616e736577696e6b656c026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01fc01000020001000151800006036e7332c037c03300010001000151800004d43d0f08c05100010001000151800004d43d19e2 32839 000000007002faf06dd600000204057a01010402 000080010000000000000000 32840 b6e4f3265010fbded4b30000000000000000 32841 b6e56de55010fbec74890000000000000000 b6e5ede40000000000000000 32842 b6e56de55018fbececec00000091d380000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afedd403c505d0003000000324e544c4d535350000100000097b208e00900090029000000090009002000000045422d5345525645524555524f42595445320000 b6e5ede40000000000000000 32843 040f00000001000000000000046168626c02626c06787334616c6c026e6c0000010001 040f80000001000000030002046168626c02626c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 32844 8bdc00000001000000000000046168626c02626c06787334616c6c026e6c0000260001 8bdc80000001000000030002046168626c02626c06787334616c6c026e6c0000260001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 32845 fccd00000001000000000000037777770a656e64796d6165726961026e6c0000010001 fccd80000001000000020002037777770a656e64796d6165726961026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec01bc01000020001000151800006036e7332c033c02f00010001000151800004c3b1f203c04d00010001000151800004d4ccf533 32846 4203000000010000000000000573696d6163026e6c00000f0001 4203800000010000000200020573696d6163026e6c00000f0001c00c0002000100015180000d046e73303105636f64696dc012c00c00020001000151800007046e733032c02bc02600010001000151800004d5f73004c03f00010001000151800004d43d46c7 32847 906e000000010000000000000b726f69747261696e696e670564656d6f6e026e6c00000f0001 906e800000010000000300020b726f69747261696e696e670564656d6f6e026e6c00000f0001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c0180002000100015180000f036e73320564656d6f6e036e657400c03200010001000151800004c29f4906c04400010001000151800004c29fb004 32848 ec6500000001000000000000037777770873796d616e746563026e6c0000010001 ec6580000001000000030000037777770873796d616e746563026e6c0000010001c01000020001000151800012036e73310873796d616e74656303636f6d00c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031 32849 99c20000000100000000000003777777107569747a656e64696e6767656d697374026e6c0000010001 99c28000000100000002000203777777107569747a656e64696e6767656d697374026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c021c0100002000100015180000805726f62696ec03cc03500010001000151800004913a1e04c05100010001000151800004913a1a34 32850 b65d0000000100000000000006636861726973026e6c00000f0001 b65d8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 32851 c2670000000100000000000005646e732d32056c61646f74026e6c0000010001 c2678000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32852 2cdc0000000100000000000003777777076e657763617273026e6c0000010001 2cdc8000000100000002000003777777076e657763617273026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c032 32853 c90000000001000000000000036e7335046372696f026e6c0000010001 c90080000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32854 10a800000001000000000000036e7336046372696f026e6c0000010001 10a880000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 32855 4d9200000001000000000000037777770d766163616e636573656c656374026e6c0000010001 4d9280000001000000030003037777770d766163616e636573656c656374026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ec0100002000100015180000a076e736175746832c03ac0100002000100015180000a076e736175746833c03ac03200010001000151800004d5880c33c04c00010001000151800004d5880c3bc06200010001000151800004d4ccc00b 32856 21f4000000010000000000000766696c7465723209736974656279746573026e6c0000010001 21f4800000010000000300030766696c7465723209736974656279746573026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c01400020001000151800006036e7333c014c03200010001000151800004c2a55e5ac04400010001000151800004c356781cc056000100010001518000043ec58016 32857 d627000000010000000000000766696c7465723209736974656279746573026e6c00001c0001 d627800000010000000300030766696c7465723209736974656279746573026e6c00001c0001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c01400020001000151800006036e7333c014c03200010001000151800004c2a55e5ac04400010001000151800004c356781cc056000100010001518000043ec58016 32858 6699000000010000000000000766696c7465723209736974656279746573026e6c0000010001 6699800000010000000300030766696c7465723209736974656279746573026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c01400020001000151800006036e7333c014c03200010001000151800004c2a55e5ac04400010001000151800004c356781cc056000100010001518000043ec58016 32859 207c0000000100000000000005646e732d32056c61646f74026e6c0000010001 207c8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32860 840600000001000000000000036c6578026e6c0000020001 840680000001000000020002036c6578026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 32861 ee2400000001000000000000036e733107656173796e6574026e6c0000010001 ee2480000001000000020002036e733107656173796e6574026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c2a55e01c00c00010001000151800004c2a55e05 32862 39e90000000100000000000005646e732d32056c61646f74026e6c0000010001 39e98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32863 0752000000010000000000000d6f7665726475696e6b72656674026e6c0000010001 0752800000010000000200000d6f7665726475696e6b72656674026e6c0000010001c00c00020001000151800010036e733106726f75746974036e657400c00c00020001000151800006036e7332c032 32864 21df000000010000000000000467627063026e6c00000f0001 21df800000010000000200000467627063026e6c00000f0001c00c0002000100015180000c026e7306766576696461c011c00c00020001000151800006036e7332c028 32865 f6aa0000000100000000000009646566616d696c6965026e6c00000f0001 f6aa8000000100000002000009646566616d696c6965026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02e 32866 a642000000010000000000000377777708736d6564696e6761026e6c0000010001 a642800000010000000200020377777708736d6564696e6761026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c019c01000020001000151800006036e7332c031c02d00010001000151800004d5c401c0c04700010001000151800004d5c4035a 32867 e51400000001000000000000047069637306736a65656d7a026e6c0000010001 e51480000001000000020000047069637306736a65656d7a026e6c0000010001c01100020001000151800013026e730a6e61616d736572766572036e657400c01100020001000151800006036e7331c02f 32868 4cce0000000100000000000003777777126f6276696f6e696e7465726d656469616972026e6c0000010001 4cce8000000100000002000203777777126f6276696f6e696e7465726d656469616972026e6c0000010001c0100002000100015180000b036e73310477656233c023c01000020001000151800006036e7332c03bc03700010001000151800004d436240ec04e00010001000151800004c2b262ef 32869 434f00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 434f80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32870 47ec00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 47ec80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32871 60d700000001000000000000046d61696c0467627063026e6c0000010001 60d780000001000000020000046d61696c0467627063026e6c0000010001c0110002000100015180000c026e7306766576696461c016c01100020001000151800006036e7332c02d 32872 4d5600000001000000000000056d61696c320467627063026e6c0000010001 4d5680000001000000020000056d61696c320467627063026e6c0000010001c0120002000100015180000c026e7306766576696461c017c01200020001000151800006036e7332c02e 32873 2b1d0000000100000000000005646e732d32056c61646f74026e6c0000010001 2b1d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32874 7c23000000010000000000000a6d61696c66696c74657203696772026e6c0000010001 7c23800000010000000200020a6d61696c66696c74657203696772026e6c0000010001c0170002000100015180000d0a6c65757665686176656ec017c0170002000100015180000d0a64656c6673686176656ec017c02f000100010001518000043e2d5e0dc048000100010001518000043e2d5e82 32875 a0850000000100000000000008646473676f756461026e6c00000f0001 a0858000000100000002000008646473676f756461026e6c00000f0001c00c0002000100015180000e036e73310469706d68036e657400c00c00020001000151800006036e7332c02d 32876 acaf0000000100000000000007666670726f303103616b6e026e6c0000010001 acaf8000000100000002000207666670726f303103616b6e026e6c0000010001c01400020001000151800010066d696e6e6965066f6d726f6570c018c0140002000100015180000805726f62696ec033c02c00010001000151800004913a1e04c04800010001000151800004913a1a34 32877 391e000000010000000000000f70616c74652d6861656e746a656e73026e6c00000f0001 391e800000010000000200000f70616c74652d6861656e746a656e73026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c033 32878 0000000060022238f39c0000020405b40000 000080010000000000000000 32879 ca860000000100000000000005646e732d32056c61646f74026e6c0000010001 ca868000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32880 b40400000001000000000000036e733107626265796f6e64026e6c0000010001 b40480000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 32881 f8c90000000100000000000007706f727461616c026e6c00000f0001 f8c98000000100000002000007706f727461616c026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02c 32882 5ddf000000010000000000000377777707666c6162626572026e6c0000010001 5ddf800000010000000300020377777707666c6162626572026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 32883 3e650000000100000000000003626c3102626c06787334616c6c026e6c0000010001 3e658000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32884 344000000001000000000000067873657276650a79656c6c6f776d696e64026e6c0000010001 344080000001000000030003067873657276650a79656c6c6f776d696e64026e6c0000010001c0130002000100015180000e026e7308736e696a64657273c01ec01300020001000151800005026e73c013c01300020001000151800006036e7332c013c03200010001000151800004c2e59918c04c00010001000151800004c2e59926c05d000100010001518000043e5dc28e 32885 b6e63c915010223817d20000000000000000 b6e6bc940000000000000000 32886 b6e63c9150182238da820000001c90e30000000100000000000007636f6d616e6574026e6c0000060001 b6e6bc940000000000000000 32887 20550010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000000000000 20558000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 32888 8d0300000001000000000000037777770e696e66612d6879706f746865656b026e6c0000010001 8d0380000001000000020002037777770e696e66612d6879706f746865656b026e6c0000010001c0100002000100015180000b036e73310431326e73c01fc01000020001000151800006036e7332c037c033000100010001518000043ed44ca0c04a000100010001518000043ed4440c 32889 b6e63cf15010223817540000000000000000 b6e6bcf40000000000000000 32890 b6e63cf15011223817530000000000000000 b6e6bcf40000000000000000 32891 b6e63cf25010223817520000000000000000 b6e6bcf40000000000000000 32892 182a00000001000000000000036e73330767617574656e67026e6c0000010001 182a80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32893 32a400100001000000000001066d61737465720364746f07747564656c6674026e6c00000100010000290800000000000000 32a480000001000000050006066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a650000291000000000000000 32894 ebd90000000100000000000003777777056c656d6172026e6c0000010001 ebd98000000100000002000003777777056c656d6172026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c02d 32895 32df0000000100000000000005646e732d32056c61646f74026e6c0000010001 32df8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 32896 7f5e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 7f5e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32897 b09b00000001000000000000056d6f756e74026e6c0000010001 b09b80000001000000020002056d6f756e74026e6c0000010001c00c0002000100015180000d026e73076b6e6f77617265c012c00c00020001000151800006036e7332c029c02600010001000151800004c3402003c03f00010001000151800004c340202b 32898 053a0000000100000000000009706f6c79666c756f72026e6c0000ff0001 053a8000000100000003000309706f6c79666c756f72026e6c0000ff0001c00c0002000100015180000c026e73067369676e6574c016c00c00020001000151800006036e7331c02dc00c00020001000151800006036e7332c02dc02a00010001000151800004c3561242c04200010001000151800004d915f142c05400010001000151800004d915f141 32899 203200000001000000000000036e73340767617574656e67026e6c0000010001 203280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32900 083900000001000000000000036e73340767617574656e67026e6c0000010001 083980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 32901 234c0000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 234c8000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 32902 7707000000010000000000000473746172026373027675026e6c0000010001 7707800000010000000300030473746172026373027675026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800002c00cc0140002000100015180000e036e733107737572666e6574c017c02b0001000100015180000482258104c00c00010001000151800004c01fe72ac04a00010001000151800004c0576a65 32903 c16400000001000000000000026e73027675026e6c0000010001 c16480000001000000030003026e73027675026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000a0473746172026373c00fc00f0002000100015180000e036e733107737572666e6574c012c00c0001000100015180000482258104c03400010001000151800004c01fe72ac04a00010001000151800004c0576a65 32904 912e00000001000000000000037777770e6372656174696e67636c6f756473026e6c0000010001 912e80000001000000020002037777770e6372656174696e67636c6f756473026e6c0000010001c01000020001000151800009036e7331026973c01fc01000020001000151800006036e7332c037c03300010001000151800004d5852102c04800010001000151800004d5c41503 32905 a74100000001000000000000054c53444e5306464f4b4b4552026e6c0000010001 a74180000001000000020000054c53444e5306464f4b4b4552026e6c0000010001c0120002000100015180001004646e73310573746f726b03636f6d00c0120002000100015180000704646e7332c032 32906 a8b500000001000000000000054c53444e5306464f4b4b4552026e6c0000260001 a8b580000001000000020000054c53444e5306464f4b4b4552026e6c0000260001c0120002000100015180001004646e73310573746f726b03636f6d00c0120002000100015180000704646e7332c032 32907 94ce000000010000000000000741535445524958044642533906464f4b4b4552026e6c0000010001 94ce800000010000000200000741535445524958044642533906464f4b4b4552026e6c0000010001c0190002000100015180001004646e73310573746f726b03636f6d00c0190002000100015180000704646e7332c039 32908 6577000000010000000000000741535445524958044642533906464f4b4b4552026e6c0000260001 6577800000010000000200000741535445524958044642533906464f4b4b4552026e6c0000260001c0190002000100015180001004646e73310573746f726b03636f6d00c0190002000100015180000704646e7332c039 32909 d2e70000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d2e78000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32910 dec300000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 dec380000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 32911 d6a800000001000000000000046d61696c09656e63616472657572026e6c0000010001 d6a880000001000000020000046d61696c09656e63616472657572026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c032 32912 e26e28000001000000010000026e6c0000060001035f6763045f7463700962696b6d756c6465720762696b61726368026e6c0000210001000002580020000000640cc40342494b0962696b6d756c6465720762696b61726368026e6c00 e26ea8040000000000000000 32913 eb2e0000000100000000000008726f656e7467656e0a726567696f7669737461026e6c0000010001 eb2e8000000100000003000308726f656e7467656e0a726567696f7669737461026e6c0000010001c0150002000100015180000e046865726101780463756369c020c0150002000100015180000c066865726d6573026e6cc03bc01500020001000151800009066865726d6573c039c03400010001000151800004d47d8001c04e00010001000151800004c143ef02c06600010001000151800004d47d8002 32914 a5e80000000100000000000009746172616e74756c6107676967616e6574026e6c0000010001 a5e88000000100000002000209746172616e74756c6107676967616e6574026e6c0000010001c01600020001000151800002c00cc01600020001000151800009066c6976696461c016c00c00010001000151800004d47d8f01c04000010001000151800004d47d8f02 32915 364900000001000000000000026e6c0000060001 364984000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 32916 000000007002faf03c730000020405b401010402 000080010000000000000000 32917 5c1d0000000100000000000009636f7665726769726c0774726e74776562026e6c00000f0001 5c1d8403000100000001000009636f7665726769726c0774726e74776562026e6c00000f0001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 32918 f23d0000000100000000000008686f73746e616d650462696e640000100003 f23d8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 32919 234c0000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 234c8000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 32920 dadf000000010000000000001076616e6d6175726963656465686f6e64026e6c0000010001 dadf840300010000000100001076616e6d6175726963656465686f6e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 32921 6c0400000001000000000000126d6172616e746b756e737473746f6666656e026e6c0000010001 6c0480000001000000020000126d6172616e746b756e737473746f6666656e026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c01fc00c0002000100015180000704686e7331c038 32922 b08d0000000100000000000005736d747031056132303030026e6c0000010001 b08d8000000100000003000205736d747031056132303030026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800010036e733109756e69736f75726365c018c01200020001000151800006036e7332c012c02c000100010001518000043e6c0141c05a000100010001518000043e6c0142 32923 234c0000000100000000000009633365656130616130056361626c650777616e61646f6f026e6c0000010001 234c8000000100000002000109633365656130616130056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 32924 b6e7f9de5010faf0b8600000000000000000 32925 6efb000000010000000000000b776f726c646f6e6c696e65026e6c00000f0001 6efb800000010000000300020b776f726c646f6e6c696e65026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c018c00c0002000100015180000704616e7332c031c00c0002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c04700010001000151800004c3f13325 32926 b6e7f9de5018faf0c19a0000008b27c9000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd58403c4ed800030000002c4e544c4d535350000100000097b208e00900090023000000030003002000000042494b42494b4d554c4445520000 32927 a89200000001000000000000037777770962727578656c6c6573026e6c0000010001 a89280000001000000020002037777770962727578656c6c6573026e6c0000010001c0100002000100015180000d036e7331066e657462697ac01ac01000020001000151800006036e7332c032c02e00010001000151800004d436240fc04700010001000151800004c2b262ee 32928 45e6000000010000000000000377777706666574697368077765622d6c6f67026e6c0000010001 45e6800000010000000300030377777706666574697368077765622d6c6f67026e6c0000010001c0170002000100015180000b036e733104696c7365c01fc01700020001000151800006036e7332c037c01700020001000151800006036e7333c037c033000100010001518000043e45a282c04a000100010001518000043e45a283c05c000100010001518000043e45a284 32929 8af1000000010000000000000377777703747769026e6c0000010001 8af1800000010000000200000377777703747769026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 32930 b6e7f9ec5011fae2b7d20000000000000000 32931 000000007002faf034940000020405b401010402 000080010000000000000000 32932 5c640000000100000000000010626f75776d65657374657267726f6570026e6c00000f0001 5c648000000100000003000210626f75776d65657374657267726f6570026e6c00000f0001c00c0002000100015180000d036e733106776964657873c01dc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 32933 527d000000010000000000000365636c026e6c0000ff0001 527d800000010000000300030365636c026e6c0000ff0001c00c0002000100015180000f036e7331086e6f766178657373c010c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028c02400010001000151800004d5c98015c03f00010001000151800004d5c9bf12c05100010001000151800004d5ef9c26 32934 730d000000010000000000000b6c65787472656d69737465026e6c0000020001 730d800000010000000200020b6c65787472656d69737465026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 32935 b6e7f9ed5010fae2b7d10000000000000000 32936 b6e8bf205010faf0eb3e0000000000000000 32937 67960000000100000000000003777777136f63636173696f6e67726f6f7468616e64656c026e6c0000010001 67968000000100000002000003777777136f63636173696f6e67726f6f7468616e64656c026e6c0000010001c0100002000100015180000f05646e73303103697032036e657400c0100002000100015180000805646e733032c03e 32938 b6e8bf205018faf0b5f60000008b674c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd58403c4ed800030000002c4e544c4d535350000100000097b208e00900090023000000030003002000000042494b42494b4d554c4445520000 32939 7d9500000001000000000000036e696b0a7075626c6973686e6574026e6c0000010001 7d9580000001000000020001036e696b0a7075626c6973686e6574026e6c0000010001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1433c0a 32940 7d960000000100000000000004646e73320a7075626c6973686e6574026e6c0000010001 7d968000000100000002000104646e73320a7075626c6973686e6574026e6c0000010001c01100020001000151800006036e696bc011c0110002000100015180000b026e73026e6c036e657400c03000010001000151800004c1433c0a 32941 b6e8bf2e5011fae2eab00000000000000000 32942 9fbc0000000100000000000006636f6f6b696504696c7365026e6c0000010001 9fbc8000000100000003000306636f6f6b696504696c7365026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 32943 f27400000001000000000000046e73303803777873026e6c0000260001 f27480000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 32944 f93a00000001000000000000046e73303903777873026e6c0000010001 f93a80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 32945 fc9d00000001000000000000046e73303903777873026e6c0000260001 fc9d80000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 32946 000000007002faf0aa3b0000020405b401010402 000080010000000000000000 32947 247000000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 247080000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 32948 318d00000001000000000000036e733207626265796f6e64026e6c0000010001 318d80000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 32949 415000000001000000000000036e733207626265796f6e64026e6c00001c0001 415080000001000000020002036e733207626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 32950 522900000001000000000000036e733207626265796f6e64026e6c0000260001 522980000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 32951 853700000001000000000000036e7332057377646e73026e6c0000010001 853780000001000000020002036e7332057377646e73026e6c0000010001c0100002000100015180000a036e733103686978c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5a0da0ac0400001000100015180000451112ec3 32952 846400000001000000000000034e5331074e455443415345024e4c0000010001 846480000001000000020000034e5331074e455443415345024e4c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c031 32953 b6e8bf2f5010fae2eaaf0000000000000000 32954 309c00000001000000000000036e7332076e656473746174026e6c0000010001 309c80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 32955 26fd00000001000000000000036e7334076e656473746174026e6c0000010001 26fd80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 32956 b6e9a47b5010faf07b8a0000000000000000 32957 d03d000000010000000000000e64656e686f6c6c616e6465726276026e6c0000010001 d03d800000010000000200000e64656e686f6c6c616e6465726276026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c01bc00c0002000100015180000704686e7331c034 32958 c4af0000000100000000000005736d747031056132303030026e6c0000010001 c4af8000000100000003000205736d747031056132303030026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800010036e733109756e69736f75726365c018c01200020001000151800006036e7332c012c02c000100010001518000043e6c0141c05a000100010001518000043e6c0142 32959 b6e9a47b5018faf0b67b0000008bf712000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd58403c4ed800030000002c4e544c4d535350000100000097b208e00900090023000000030003002000000042494b42494b4d554c4445520000 32960 0e3000000001000000000000077765626d61696c08717569636b6e6574026e6c0000010001 0e3080000001000000030002077765626d61696c08717569636b6e6574026e6c0000010001c01400020001000151800011036e73310a6d756c74696b6162656cc01dc01400020001000151800006036e7332c035c01400020001000151800014036e73300a6d756c74696b6162656c036e657400c0310001000100015180000450f2e002c04e0001000100015180000450f2e006 32961 69b3000000010000000000000d766d7861726368697465637473026e6c0000010001 69b3800000010000000200020d766d7861726368697465637473026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 32962 60a70000000100000000000003777777056b65746f6e026e6c0000010001 60a78000000100000002000203777777056b65746f6e026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec016c01000020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 32963 2c73000000010000000000001162656573746163687469676c656b6b6572026e6c00000f0001 2c73800000010000000200021162656573746163687469676c656b6b6572026e6c00000f0001c00c0002000100015180000f036e73310861746c616e74697ac01ec00c00020001000151800006036e7332c036c03200010001000151800004d5efa011c04d00010001000151800004d5efa075 32964 b6e9a4895011fae27afc0000000000000000 32965 fba300000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 fba380000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 32966 dac60000000100000000000009626572677765726666026e6c00000f0001 dac68000000100000002000009626572677765726666026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c030 32967 b6e9a48a5010fae27afb0000000000000000 32968 f31a00000001000000000000096c6579656e62757267026e6c0000020001 f31a80000001000000020002096c6579656e62757267026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 32969 e86400100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 e86480000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 32970 f43200100001000000000001026e73076e656473746174026e6c00002600010000290800000000000000 f43280000001000000020003026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 32971 fa1900100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 fa1980000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 32972 d4fa00100001000000000001036e7333076e656473746174026e6c00002600010000290800000000000000 d4fa80000001000000020003036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 32973 ea68000000010000000000000874656b69656c6a61026e6c0000ff0001 ea68800000010000000200000874656b69656c6a61026e6c0000ff0001c00c0002000100015180001c036e733003616d73026e6c0b7369746570726f7465637403636f6d00c00c00020001000151800006036e7331c02d 32974 7a4d00000001000000000000036e7333076e656473746174026e6c0000010001 7a4d80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 32975 55ef00000001000000000000036e7332086473646575726e65026e6c0000010001 55ef80000001000000020002036e7332086473646575726e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000452968003c00c00010001000151800004d5a0f984 32976 eecf00000001000000000000036e7331086473646575726e65026e6c0000010001 eecf80000001000000020002036e7331086473646575726e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452968003c03b00010001000151800004d5a0f984 32977 313600000001000000000000037777770c77656263726561746f727334026e6c0000010001 313680000001000000020001037777770c77656263726561746f727334026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c03100010001000151800004d4ccc0fc 32978 06c900000001000000000000026e73076e656473746174026e6c0000010001 06c980000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 32979 fdbe00000001000000000000026e73076e656473746174026e6c0000260001 fdbe80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 32980 abd300000001000000000000046e733031066d696e737a77026e6c0000010001 abd380000001000000020000046e733031066d696e737a77026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c032 32981 bd9200000001000000000000046e733031066d696e737a77026e6c00001c0001 bd9280000001000000020000046e733031066d696e737a77026e6c00001c0001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c032 32982 790600000001000000000000046e733031066d696e737a77026e6c0000260001 790680000001000000020000046e733031066d696e737a77026e6c0000260001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c032 32983 bf6100000001000000000000036e7333076e656473746174026e6c0000010001 bf6180000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 32984 b02a00000001000000000000036e7333076e656473746174026e6c0000260001 b02a80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 32985 29390000000100000000000003777777077961736d696e61026e6c0000010001 29398000000100000003000203777777077961736d696e61026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 32986 6ad70000000100000000000003777777106d65647573612d616d7374657264616d026e6c0000010001 6ad78000000100000002000003777777106d65647573612d616d7374657264616d026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c021c0100002000100015180000805646e732d32c03b 32987 d22e0000000100000000000003777777086b6c696b6575726f026e6c0000010001 d22e8000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 32988 ac960000000100000000000003777777076d6465626565720564656d6f6e026e6c0000010001 ac968000000100000003000203777777076d6465626565720564656d6f6e026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c0180002000100015180000f036e73320564656d6f6e036e657400c03200010001000151800004c29f4906c04400010001000151800004c29fb004 32989 00140000000100000000000008736d616d7773313306646d616d3031026e6c0000010001 00148403000100000001000008736d616d7773313306646d616d3031026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 32990 4865000000010000000000000c666f6f647365727669636573026e6c0000010001 4865800000010000000200000c666f6f647365727669636573026e6c0000010001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c030 32991 6fc400000001000000000001036e733107737572666e6574026e6c00000100010000291000000000000000 6fc480000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 32992 e91700000001000000000000037777770c6d756c74697265636c616d65026e6c0000010001 e91780000001000000020002037777770c6d756c74697265636c616d65026e6c0000010001c0100002000100015180000f036e733108636f6e636570746fc01dc01000020001000151800006036e7332c035c0310001000100015180000450f7c226c04c0001000100015180000450f7c227 32993 898e000000010000000000000f77696a6b77656c7a696a6e7a756964026e6c00000f0001 898e800000010000000200000f77696a6b77656c7a696a6e7a756964026e6c00000f0001c00c00020001000151800013036e733109656e7465726e65787403636f6d00c00c00020001000151800006036e7332c034 32994 32650000000100000000000003626c3402626c06787334616c6c026e6c0000010001 32658000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 32995 834000000001000000000000036e73310c636f6e63657074732d696374026e6c0000010001 834080000001000000020002036e73310c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800006036e7332c010c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e4b 32996 016d00000001000000000000054243564f53024e4c00000f0001 016d80000001000000020002054243564f53024e4c00000f0001c00c00020001000151800011036e73310a646e7373657276657273c012c00c00020001000151800006036e7332c02ac026000100010001518000045054ed14c04300010001000151800004d5f72f14 32997 55a7000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 55a7800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 32998 bd6900000001000000000000146f736e6162727565636b65722d7a656974756e67027330026e6c0000010001 bd6980000001000000020002146f736e6162727565636b65722d7a656974756e67027330026e6c0000010001c0210002000100015180000d026e73076e656473746174c024c02100020001000151800006036e7333c03bc03800010001000151800004d4482615c05100010001000151800004d5c4021d 32999 e36f00000001000000000000086e75747269636961026e6c00001c0001 e36f80000001000000020002086e75747269636961026e6c00001c0001c00c00020001000151800012036e73310b7669616e6574776f726b73c015c00c00020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 33000 5c6700000001000000000000036e733106313233623262026e6c0000010001 5c6780000001000000020002036e733106313233623262026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e5b5c039000100010001518000045054e5b6 33001 915e00000001000000000000036e733206313233623262026e6c0000010001 915e80000001000000020002036e733206313233623262026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b000100010001518000045054e5b5c00c000100010001518000045054e5b6 33002 c91b00000001000000000000056d61696c310a6c656f6275726e657474026e6c0000010001 c91b80000001000000020000056d61696c310a6c656f6275726e657474026e6c0000010001c0120002000100015180000e036e73310464646e68036e657400c01200020001000151800006036e7332c035 33003 6be400000001000000000000056d61696c310a6c656f6275726e657474026e6c0000010001 6be480000001000000020000056d61696c310a6c656f6275726e657474026e6c0000010001c0120002000100015180000e036e73310464646e68036e657400c01200020001000151800006036e7332c035 33004 6fc400000001000000000000036e733107737572666e6574026e6c0000010001 6fc480000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 33005 401600000001000000000000036e733507737669616e6564026e6c0000010001 401680000001000000020002036e733507737669616e6564026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800009026e730367616bc018c02c000100010001518000048fb10165c03e000100010001518000048fb0b003 33006 0db600000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 0db680000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 33007 0dbf00000001000000000000037777770a6b6f657273616c61726d026e6c0000010001 0dbf80000001000000020002037777770a6b6f657273616c61726d026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c01bc01000020001000151800006036e7332c033c02f00010001000151800004d4ccd865c04a000100010001518000045054ec34 33008 31c400000001000000000000096c66636c6f6368656d026e6c0000020001 31c480000001000000020002096c66636c6f6368656d026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 33009 b8150010000100000000000105646830373406787334616c6c026e6c00000100010000290800000080000000 b8158000000100000003000305646830373406787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d09630000291000000000000000 33010 82be000000010000000000000c73757573656e6d617263656c097676686161726c656d026e6c0000010001 82be800000010000000200020c73757573656e6d617263656c097676686161726c656d026e6c0000010001c01900020001000151800010036e733109686f636b65796e6574c023c01900020001000151800006036e7332c03bc03700010001000151800004d4cce20bc05300010001000151800004d4ccce51 33011 16ea000000010000000000000377777709616a6178666f72756d026e6c0000010001 16ea800000010000000300000377777709616a6178666f72756d026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c031c01000020001000151800006036e7332c031 33012 71330000000100000000000003626c3102626c06787334616c6c026e6c0000010001 71338000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33013 2ce900100001000000000001026e7306636f62776562026e6c00000100010000290800000080000000 2ce980000001000000020002026e7306636f62776562026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800011026e73087363686970686f6c036e657400c00c0001000100015180000450f260010000291000000000000000 33014 dec700100001000000000001036e733306636f62776562026e6c00000100010000290800000080000000 dec780000001000000020002036e733306636f62776562026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800011026e73087363686970686f6c036e657400c02b0001000100015180000450f260010000291000000000000000 33015 288e000000010000000000000b7470686e6c777332313638057470686e6c026e6c0000060001 288e840300010000000100000b7470686e6c777332313638057470686e6c026e6c0000060001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 33016 ece90000000100000000000006783534616c6c026e6c00000f0001 ece98403000100000001000006783534616c6c026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 33017 e12200000001000000000000036e73310f627573696e657373686f7374696e67026e6c0000010001 e12280000001000000020002036e73310f627573696e657373686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451044f51c042000100010001518000045104602d 33018 a682000000010000000000000a726f6375747265636874026e6c0000010001 a682800000010000000200020a726f6375747265636874026e6c0000010001c00c0002000100015180000d036e7331066e6c74726565c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d4b20403c04400010001000151800004d5881e45 33019 ae3300000001000000000000036e7332076e656473746174026e6c0000010001 ae3380000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33020 fd9c00000001000000000000036e7334076e656473746174026e6c0000010001 fd9c80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33021 e48700000001000000000000056d61696c3103696e67026e6c0000010001 e48780000001000000020002056d61696c3103696e67026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02a0001000100015180000491dd19c2c03c0001000100015180000491dd5dc2 33022 e7fe00000001000000000000056d61696c3103696e67026e6c00001c0001 e7fe80000001000000020002056d61696c3103696e67026e6c00001c0001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02a0001000100015180000491dd19c2c03c0001000100015180000491dd5dc2 33023 77a400000001000000000000056d61696c3103696e67026e6c0000260001 77a480000001000000020002056d61696c3103696e67026e6c0000260001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02a0001000100015180000491dd19c2c03c0001000100015180000491dd5dc2 33024 9cf800000001000000000000036e733103696e67026e6c00001c0001 9cf880000001000000020002036e733103696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 33025 b0ee00000001000000000000036e733103696e67026e6c0000260001 b0ee80000001000000020002036e733103696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 33026 b45300000001000000000000036e733203696e67026e6c00001c0001 b45380000001000000020002036e733203696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 33027 525f00000001000000000000036e733203696e67026e6c0000260001 525f80000001000000020002036e733203696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 33028 2656000000010000000000000e6c656964736368646167626c61640f7765726b656e696e686f6c6c616e64026e6c0000010001 2656800000010000000300030e6c656964736368646167626c61640f7765726b656e696e686f6c6c616e64026e6c0000010001c01b0002000100015180000e076e73617574683103626974c02bc01b0002000100015180000a076e736175746832c047c01b0002000100015180000a076e736175746833c047c03f00010001000151800004d5880c33c05900010001000151800004d5880c3bc06f00010001000151800004d4ccc00b 33029 f59400000001000000000000106d74732d6575726f70726f6475637473026e6c00000f0001 f59480000001000000020002106d74732d6575726f70726f6475637473026e6c00000f0001c00c0002000100015180000c036e733105636176656fc01dc00c00020001000151800006036e7332c035c031000100010001518000045112a002c049000100010001518000045112a102 33030 ff3200000001000000000000046c686565026e6c0000020001 ff3280000001000000020002046c686565026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 33031 5d1d00000001000000000000026e7306636f62776562026e6c0000010001 5d1d80000001000000020001026e7306636f62776562026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800011026e73087363686970686f6c036e657400c00c0001000100015180000450f26001 33032 227d00000001000000000000036e733306636f62776562026e6c0000010001 227d80000001000000020001036e733306636f62776562026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800011026e73087363686970686f6c036e657400c02b0001000100015180000450f26001 33033 1ad800000001000000000000037777770a6d757369637072696e74026e6c0000010001 1ad880000001000000020002037777770a6d757369637072696e74026e6c0000010001c01000020001000151800009036e7331026d6ac01bc01000020001000151800006036e7332c033c02f00010001000151800004515b010ac04400010001000151800004515b000a 33034 7023000000010000000000000f6f70726f616b656c6461697368616c026e6c0000010001 7023800000010000000200020f6f70726f616b656c6461697368616c026e6c0000010001c00c0002000100015180000c036e73310568616c6d61c01cc00c00020001000151800006036e7332c034c03000010001000151800004d4ccd1f1c04800010001000151800004d4ccd1fa 33035 5c040000000100000000000003626c3102626c06787334616c6c026e6c0000010001 5c048000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33036 dac4000000010000000000000d696e697469616c2d766172656c026e6c00000f0001 dac4800000010000000200020d696e697469616c2d766172656c026e6c00000f0001c00c0002000100015180000e036e733207737570706f7274c01ac00c00020001000151800006036e7334c032c02e00010001000151800004c372e7c8c04800010001000151800004c372e6fe 33037 475c00000001000000000000055f6c646170045f7463700b7768697a7a646f6d706463026e6c0000060001 475c84030001000000010000055f6c646170045f7463700b7768697a7a646f6d706463026e6c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 33038 7d6400000001000000000000026e7309656174736572766572026e6c0000010001 7d6480000001000000020002026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb1221 33039 f5d700000001000000000000036e733209656174736572766572026e6c0000010001 f5d780000001000000020002036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb1221 33040 05410000000100000000000004726f6375026e6c00000f0001 05418000000100000003000304726f6375026e6c00000f0001c00c0002000100015180000906726f636b6574c00cc00c0002000100015180000d06776174736f6e03687675c011c00c0002000100015180000e036e733107737572666e6574c011c02500010001000151800004c2ab9c22c03a0001000100015180000491592603c05300010001000151800004c0576a65 33041 f7d300000001000000000000046d61696c05766172656c026e6c0000010001 f7d380000001000000020000046d61696c05766172656c026e6c0000010001c0110002000100015180000d036e7331036b706e036e657400c01100020001000151800006036e7332c02f 33042 fa7500000001000000000000046d61696c05766172656c026e6c00001c0001 fa7580000001000000020000046d61696c05766172656c026e6c00001c0001c0110002000100015180000d036e7331036b706e036e657400c01100020001000151800006036e7332c02f 33043 023c28000001000200000000026e6c00000600010b7470686e6c777332313638057470686e6c026e6c00000500fe000000000000c014000100010000000000040ae718e5 023ca8040000000000000000 33044 581300000001000000000000096d616b65706561636503687675026e6c0000010001 581380000001000000030003096d616b65706561636503687675026e6c0000010001c0160002000100015180000906776174736f6ec016c0160002000100015180000e036e733107737572666e6574c01ac01600020001000151800006036e7332c016c02e0001000100015180000491592603c04300010001000151800004c0576a65c05d0001000100015180000491595303 33045 48dc0000000100000000000005646e732d31056c61646f74026e6c0000010001 48dc8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33046 72e60000000100000000000005646e732d32056c61646f74026e6c0000010001 72e68000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33047 00a90000000100000000000006706f6d706f6d026e6c0000ff0001 00a98000000100000002000206706f6d706f6d026e6c0000ff0001c00c00020001000151800018036e73311173747564656e742d736f6c7574696f6e73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d97261aec04b00010001000151800004d9726102 33048 13d0000000010000000000000774726166666963026e6c0000010001 13d0800000010000000200000774726166666963026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 33049 8d180000000100000000000003626c3102626c06787334616c6c026e6c0000010001 8d188000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33050 971d0000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 971d8000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33051 84f90000000100000000000003626c3102626c06787334616c6c026e6c0000260001 84f98000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33052 31fe00000001000000000000046d61696c0b6d61726b74706c61617473026e6c0000010001 31fe80000001000000020000046d61696c0b6d61726b74706c61617473026e6c0000010001c0110002000100015180000f036e733105796b6f6f6e036e657400c01100020001000151800006036e7332c035 33053 516900000001000000000000046d61696c0b6d61726b74706c61617473026e6c00001c0001 516980000001000000020000046d61696c0b6d61726b74706c61617473026e6c00001c0001c0110002000100015180000f036e733105796b6f6f6e036e657400c01100020001000151800006036e7332c035 33054 13bb00000001000000000000046d61696c0b6d61726b74706c61617473026e6c0000260001 13bb80000001000000020000046d61696c0b6d61726b74706c61617473026e6c0000260001c0110002000100015180000f036e733105796b6f6f6e036e657400c01100020001000151800006036e7332c035 33055 6b4000000001000000000000046d61696c0b6d61726b74706c61617473026e6c0000010001 6b4080000001000000020000046d61696c0b6d61726b74706c61617473026e6c0000010001c0110002000100015180000f036e733105796b6f6f6e036e657400c01100020001000151800006036e7332c035 33056 772600000001000000000000037777770e6d76736d616b656c61617264696a026e6c0000010001 772680000001000000020002037777770e6d76736d616b656c61617264696a026e6c0000010001c0100002000100015180000f036e7331086974736c6f676963c01fc01000020001000151800006036e7332c037c03300010001000151800004d59ae111c04e00010001000151800004d59ae122 33057 93b00000000100000000000003777777076e656473746174026e6c0000010001 93b08000000100000002000203777777076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33058 2d6a00000001000000000000037777770c6772617469732d66696c6d73026e6c0000010001 2d6a80000001000000020001037777770c6772617469732d66696c6d73026e6c0000010001c0100002000100015180000a026e7304696d636fc01dc01000020001000151800013036e7332097669727475616c787303636f6d00c031000100010001518000043e81810a 33059 0f4700000001000000000000037777770e6e69657577626f7577666f72756d026e6c0000010001 0f4780000001000000020000037777770e6e69657577626f7577666f72756d026e6c0000010001c01000020001000151800013036e7335097577686f7374696e67036e657400c01000020001000151800006036e7336c037 33060 000000007002fc0080570000020405b401010402 000080010000000000000000 33061 2dda000000010000000000000377777712766163617475726573696e686f6c6c616e64026e6c0000010001 2dda800000010000000200020377777712766163617475726573696e686f6c6c616e64026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c023c01000020001000151800006036e7332c03bc03700010001000151800004d5c9e8c8c05700010001000151800004d5c9e8c9 33062 3909000000010000000000000377777708736c697073616665026e6c0000010001 3909800000010000000200000377777708736c697073616665026e6c0000010001c01000020001000151800015026e730c776f726c64686f7374696e67036f726700c01000020001000151800008026e73026175c030 33063 6b7600000001000000000000026e73076575726f6e6574026e6c0000010001 6b7680000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 33064 dc7500000001000000000000037777770f6d6167617a696a6e7665696c696e67026e6c0000010001 dc7580000001000000020002037777770f6d6167617a696a6e7665696c696e67026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c020c01000020001000151800006036e7332c038c034000100010001518000045054e415c0500001000100015180000451046014 33065 692d0000000100000000000006696d6167657306676f6f676c65026e6c0000010001 692d8000000100000003000006696d6167657306676f6f676c65026e6c0000010001c01300020001000151800010036e733106676f6f676c6503636f6d00c01300020001000151800006036e7332c032c01300020001000151800006036e7333c032 33066 2e3f00000001000000000000036e73320d78786c776562686f7374696e67026e6c0000010001 2e3f80000001000000020002036e73320d78786c776562686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104580ac00c000100010001518000045104601e 33067 b1cc00000001000000000000036e73310d78786c776562686f7374696e67026e6c0000010001 b1cc80000001000000020002036e73310d78786c776562686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104580ac040000100010001518000045104601e 33068 b6ebe7a65010fc000e790000000000000000 33069 b6ebe7a65004fc000e850000000000000000 33070 799600000001000000000000076f70656e6e61700773656172636879026e6c0000010001 799680000001000000020002076f70656e6e61700773656172636879026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03000010001000151800004d9aa1235c04200010001000151800004507e81e0 33071 e85000000001000000000000066e61736b696e026e6c00000f0001 e85080000001000000020000066e61736b696e026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c02e 33072 2a0e00000001000000000000036e7332076e656473746174026e6c0000010001 2a0e80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33073 93b300000001000000000000036e7334076e656473746174026e6c0000010001 93b380000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33074 774c000000010000000000000e6e61747572616c77656c66617265026e6c0000010001 774c800000010000000300030e6e61747572616c77656c66617265026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02f00010001000151800004cf2cd7adc041000100010001518000043ed4539ec05300010001000151800004cf2cd7ae 33075 4955001000010000000000000c7268656e7573616c70696e61026e6c00000f0001 4955800000010000000200020c7268656e7573616c70696e61026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 33076 6b50000000010000000000000c7363686f6f6c6d6173746572026e6c00000f0001 6b50800000010000000200020c7363686f6f6c6d6173746572026e6c00000f0001c00c00020001000151800009036e7331026973c019c00c00020001000151800006036e7332c031c02d00010001000151800004d5852102c04200010001000151800004d5c41503 33077 284000000001000000000000046d696a6e07696e6762616e6b026e6c0000010001 284080000001000000020002046d696a6e07696e6762616e6b026e6c0000010001c0110002000100015180000a036e733103696e67c019c01100020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 33078 a8130000000100000000000006776468303131066e7434616c6c026e6c0000010001 a8138000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 33079 b48e000000010000000000000c6162786c6f67697374696373026e6c0000ff0001 b48e800000010000000200020c6162786c6f67697374696373026e6c0000ff0001c00c000200010001518000110a6c65757665686176656e03696772c019c00c0002000100015180000d0a64656c6673686176656ec038c02d000100010001518000043e2d5e0dc04a000100010001518000043e2d5e82 33080 7fc400000001000000000000037777770b64696a6b6d616e2d777376026e6c0000010001 7fc480000001000000020000037777770b64696a6b6d616e2d777376026e6c0000010001c0100002000100015180001b036e733511656c69636f6d2d776562686f7374696e6703636f6d00c01000020001000151800006036e7336c034 33081 98dc0000000100000000000005646e732d32056c61646f74026e6c0000010001 98dc8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33082 344300000001000000000000096d61696c686f73743107747564656c6674026e6c0000010001 344380000001000000050005096d61696c686f73743107747564656c6674026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 33083 e6d700000001000000000000096d61696c686f73743107747564656c6674026e6c00001c0001 e6d780000001000000050005096d61696c686f73743107747564656c6674026e6c00001c0001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 33084 a36800000001000000000000036e733107747564656c6674026e6c00001c0001 a36880000001000000050005036e733107747564656c6674026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c00c0001000100015180000482a1b401c03a0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 33085 bd3900000001000000000000036e733207747564656c6674026e6c00001c0001 bd3980000001000000050005036e733207747564656c6674026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c00c0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 33086 55f900000001000000000000026e730763697374726f6e026e6c0000010001 55f980000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 33087 539e0010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 539e8000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 33088 23a9000000010000000000000c66727569746d617374657273026e6c00000f0001 23a9800000010000000200000c66727569746d617374657273026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 33089 4aa700000001000000000000037777770f7365787061727479346c6f76657273026e6c0000010001 4aa780000001000000020002037777770f7365787061727479346c6f76657273026e6c0000010001c0100002000100015180000a026e730469636d63c020c01000020001000151800006036e7332c037c034000100010001518000043e643805c04a000100010001518000043e643806 33090 a2ec00000001000000000000037777770a666f7274697362616e6b026e6c0000010001 a2ec80000001000000030002037777770a666f7274697362616e6b026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01bc01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c033c02f000100010001518000045054e055c06800010001000151800004d4ccc655 33091 da390000000100000000000003616263026e6c00000f0001 da398000000100000002000203616263026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000c026e7306776562746963c010c02400010001000151800004d5c5ec01c03500010001000151800004c14e1e2b 33092 305a00000001000000000000036e73330767617574656e67026e6c0000010001 305a80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33093 856200000001000000000000046d61696c147665696c696e672d67656c6465726d616c73656e026e6c0000010001 856280000001000000020000046d61696c147665696c696e672d67656c6465726d616c73656e026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c040 33094 36460000000100000000000006776468303131066e7434616c6c026e6c0000010001 36468000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 33095 4f2100000001000000000000085f6b706173737764045f75647006646f6d61696e026e6c0000060001 4f2184030001000000010000085f6b706173737764045f75647006646f6d61696e026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 33096 106c00000001000000000000036e73340767617574656e67026e6c0000010001 106c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33097 187600000001000000000000036e73340767617574656e67026e6c0000010001 187680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33098 ed1300000001000000000000086368656174732d660270630a6368656174706c617a61026e6c0000010001 ed1380000001000000020002086368656174732d660270630a6368656174706c617a61026e6c0000010001c0180002000100015180000c036e733105616e6f6e79c023c01800020001000151800006036e7332c03bc03700010001000151800004cf2cd7adc04f000100010001518000043ed4539e 33099 11280000000100000000000009652d6c756e61746963026e6c0000010001 11288000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33100 31160000000100000000000009652d6c756e61746963026e6c0000010001 31168000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33101 a93d00000001000000000000026e73076e656473746174026e6c0000010001 a93d80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 33102 0a5a00000001000000000000036e7333076e656473746174026e6c0000010001 0a5a80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 33103 52fa28000001000000010000026e6c0000060001085f6b706173737764045f75647006646f6d61696e026e6c000021000100000258001b0000006401d00973657276657230313106646f6d61696e026e6c00 52faa8040000000000000000 33104 db55000000010000000000000967726f6570342d30320864696a6b6f6f73740864696a6b77657374026e6c0000060001 db55840300010000000100000967726f6570342d30320864696a6b6f6f73740864696a6b77657374026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 33105 996a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 996a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33106 abc8000000010000000000000461736d6c026e6c00000f0001 abc8800000010000000300010461736d6c026e6c00000f0001c00c00020001000151800006036e7330c00cc00c0002000100015180000d026e730461736d6c03636f6d00c00c00020001000151800006036e7331c03ac02500010001000151800004c26979c2 33107 6bda00000001000000000000046d61696c0e6d777765626372656174696f6e73026e6c0000010001 6bda80000001000000020002046d61696c0e6d777765626372656174696f6e73026e6c0000010001c0110002000100015180000d0a6c656b6b657264696e67c011c0110002000100015180000c09626c61636b62697264c011c03400010001000151800004d994a332c04d00010001000151800004507ed0a6 33108 36d900000001000000000000046d61696c0e6d777765626372656174696f6e73026e6c0000010001 36d980000001000000020002046d61696c0e6d777765626372656174696f6e73026e6c0000010001c0110002000100015180000d0a6c656b6b657264696e67c011c0110002000100015180000c09626c61636b62697264c011c03400010001000151800004d994a332c04d00010001000151800004507ed0a6 33109 353500000001000000000000036d783107657370656c6f6e026e6c0000010001 353580000001000000020002036d783107657370656c6f6e026e6c0000010001c0100002000100015180001c0a6c656b6b657264696e670e6d777765626372656174696f6e73c018c0100002000100015180000c09626c61636b62697264c037c02c00010001000151800004d994a332c05400010001000151800004507ed0a6 33110 b920000000010000000000000377746206676576656b65026e6c00000f0001 b920800000010000000200000377746206676576656b65026e6c00000f0001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c031 33111 546f00000001000000000000037777770a7a656c66626f7577656e026e6c0000010001 546f80000001000000020000037777770a7a656c66626f7577656e026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c032 33112 062e00100001000000000001037777771264656c7068696861636b6572737061676573026e6c00000100010000290800000080000000 062e80000001000000020001037777771264656c7068696861636b6572737061676573026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03d0000291000000000000000 33113 a61f00000001000000000000037777770d746f74616c6461726b6e657373026e6c0000010001 a61f80000001000000020002037777770d746f74616c6461726b6e657373026e6c0000010001c01000020001000151800010036e7331096561737932686f7374c01ec01000020001000151800006036e7332c036c03200010001000151800004d5efb541c04e00010001000151800004d5efb542 33114 26f500000001000000000000096d61696c686f73743107747564656c6674026e6c0000010001 26f580000001000000050005096d61696c686f73743107747564656c6674026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 33115 024200000001000000000000037777770b766f6f7264756d6d696573026e6c0000010001 024280000001000000020000037777770b766f6f7264756d6d696573026e6c0000010001c01000020001000151800013046e733132087a6f6e656564697403636f6d00c01000020001000151800007046e733135c035 33116 b6e56df35011fbde73f50000000000000000 b6e5edf40000000000000000 33117 62c30000000100000000000003777777087765726b736e656c026e6c0000010001 62c38000000100000002000003777777087765726b736e656c026e6c0000010001c01000020001000151800011036e73310772752d6b61737503636f6d00c01000020001000151800006036e7332c031 33118 719e000000010000000000000870756265696c656e026e6c00000f0001 719e800000010000000200020870756265696c656e026e6c00000f0001c00c0002000100015180000e026e73086d656761706c6578c015c00c00020001000151800006036e7331c02cc02900010001000151800004504f6101c04300010001000151800004504f6102 33119 f9f1000000010000000000000377656d0c6c6f67696e73657276696365026e6c0000010001 f9f1800000010000000200020377656d0c6c6f67696e73657276696365026e6c0000010001c0100002000100015180000e036e7331076e657463617374c01dc01000020001000151800006036e7332c035c03100010001000151800004c2970101c04b00010001000151800004c297012d 33120 0a4d00000001000000000000037777770870632d6163746976026e6c0000010001 0a4d84030001000000010000037777770870632d6163746976026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 33121 b6e56df45010fbde73f40000000000000000 b6e5edf40000000000000000 33122 403100000001000000000000056d61696c320976697275737672696a026e6c0000010001 403180000001000000020000056d61696c320976697275737672696a026e6c0000010001c0120002000100015180000d036e7331036b706e036e657400c01200020001000151800006036e7332c034 33123 403200000001000000000000056d61696c310976697275737672696a026e6c0000010001 403280000001000000020000056d61696c310976697275737672696a026e6c0000010001c0120002000100015180000d036e7331036b706e036e657400c01200020001000151800006036e7332c034 33124 bc9a010000010000000000000377777707706f6c6f6e6961026e6c0000010001 bc9a810000010000000200020377777707706f6c6f6e6961026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 33125 107f00000001000000000000036e73330767617574656e67026e6c0000010001 107f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33126 b46c0000000100000000000003617776026e6c00000f0001 b46c8000000100000002000203617776026e6c00000f0001c00c0002000100015180000e036e73310768656262697a7ac010c00c00020001000151800006036e7332c028c02400010001000151800004c372eb42c03e000100010001518000043e320e91 33127 009000000001000000000000036e73330767617574656e67026e6c0000010001 009080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33128 50b80000000100000000000003777777086f6e656c6576656c026e6c0000010001 50b88000000100000002000203777777086f6e656c6576656c026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c019c01000020001000151800006036e7332c031c02d000100010001518000045054e415c0490001000100015180000451046014 33129 f8e600000001000000000000036e73330c64656c7461686f7374696e67026e6c0000010001 f8e680000001000000020002036e73330c64656c7461686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000a036e7332036e7873c01dc03100010001000151800004d973c096c04300010001000151800004d973c102 33130 940600000001000000000000037777770c646174696e6770616c656973026e6c0000010001 940680000001000000020002037777770c646174696e6770616c656973026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c01dc01000020001000151800006036e7332c035c031000100010001518000045054e415c04d0001000100015180000451046014 33131 84ca00000001000000000000037777770f6472696e6b656e656e64616e73656e026e6c0000010001 84ca80000001000000020002037777770f6472696e6b656e656e64616e73656e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c020c01000020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 33132 df820000000100000000000003626c3102626c06787334616c6c026e6c0000010001 df828000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33133 25b00010000100000000000107414e54454e4e41024e4c00000100010000290800000080000000 25b08000000100000002000207414e54454e4e41024e4c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd130000291000000000000000 33134 bab600000001000000000000046d61696c06636f6d707261026e6c0000010001 bab680000001000000020000046d61696c06636f6d707261026e6c0000010001c0110002000100015180001905646e7330310d636f6d70726173657276657273036e657400c0110002000100015180000805646e733032c032 33135 cfed00000001000000000000117275736c616e646b696e64657268756c70026e6c0000010001 cfed80000001000000020002117275736c616e646b696e64657268756c70026e6c0000010001c00c0002000100015180000f036e73310864696d6d65646961c01ec00c00020001000151800006036e7332c036c032000100010001518000043eddda10c04d000100010001518000043eb1e4dc 33136 0526000000010000000000000566657272790b766476656e626568656572026e6c0000010001 0526840300010000000100000566657272790b766476656e626568656572026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 33137 5eda00100001000000000001026e73027575026e6c00000100010000290800000080000000 5eda80000001000000040005026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d310200000291000000000000000 33138 97b800100001000000000001036e7332027575026e6c00000100010000290800000080000000 97b880000001000000040005036e7332027575026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c013c01000020001000151800006036e7333c010c0270001000100015180000483d30405c00c0001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d310200000291000000000000000 33139 af6500000001000000000000076b72616e74656e03636f6d07736974652d6964026e6c0000010001 af6580000001000000030000076b72616e74656e03636f6d07736974652d6964026e6c0000010001c01800020001000151800012036e733108626c7565646f6d65036e657400c01800020001000151800006036e7332c038c01800020001000151800006036e7333c038 33140 7ee000000001000000000000037777770c74687569732d6f6e6c696e65026e6c0000010001 7ee080000001000000020000037777770c74687569732d6f6e6c696e65026e6c0000010001c01000020001000151800011036e73330a737562686f7374696e67c01dc01000020001000151800006036e7334c035 33141 43f7001000010000000000010631326d6f7665026e6c0000ff00010000290800000080000000 43f7800000010000000300030631326d6f7665026e6c0000ff0001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f133250000291000000000000000 33142 d4020000000100000000000008657361636f6d343405657374656303657361026e6c0000010001 d4028000000100000003000008657361636f6d343405657374656303657361026e6c0000010001c01b0002000100015180000e04646e73310365736103696e7400c01b0002000100015180000704646e7332c038c01b0002000100015180000704646e7333c038 33143 ca3a0000000100000000000008657361636f6d343505657374656303657361026e6c0000010001 ca3a8000000100000003000008657361636f6d343505657374656303657361026e6c0000010001c01b0002000100015180000e04646e73310365736103696e7400c01b0002000100015180000704646e7332c038c01b0002000100015180000704646e7333c038 33144 25690000000100000000000007414e54454e4e41024e4c0000010001 25698000000100000002000107414e54454e4e41024e4c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 33145 580600000001000000000000086176656e747572610a62686d732d67726f6570026e6c0000010001 580680000001000000020002086176656e747572610a62686d732d67726f6570026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c03400010001000151800004d9726162c04600010001000151800004d9726161 33146 527900000001000000000000026e73066863636e6574026e6c0000010001 527980000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 33147 10e10000000100000000000003626c3102626c06787334616c6c026e6c0000010001 10e18000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33148 06440000000100000000000003626c3102626c06787334616c6c026e6c0000260001 06448000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33149 23320000000100000000000006636f736d6f73046b706d67026e6c0000010001 23328000000100000002000006636f736d6f73046b706d67026e6c0000010001c01300020001000151800013036e7331026e6c0669676e697465036e657400c01300020001000151800006036e7332c030 33150 c1cf00000001000000000000037777771264656c7068696861636b6572737061676573026e6c0000010001 c1cf80000001000000020000037777771264656c7068696861636b6572737061676573026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03d 33151 cbdc00000001000000000000026e73027575026e6c0000010001 cbdc80000001000000040004026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 33152 32d200000001000000000000036e7332027575026e6c0000010001 32d280000001000000040004036e7332027575026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c013c01000020001000151800006036e7333c010c0270001000100015180000483d30405c00c0001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 33153 ca260000000100000000000002636602626303757661026e6c0000010001 ca268000000100000002000202636602626303757661026e6c0000010001c0120002000100015180000e086261726c61657573026963c012c01200020001000151800006036e7331c012c02a0001000100015180000491124432c0440001000100015180000491122710 33154 57e50000000100000000000005736d696c6507736d696c696573026e6c0000010001 57e58000000100000003000005736d696c6507736d696c696573026e6c0000010001c01200020001000151800014046e733031096772616669782d697303636f6d00c01200020001000151800007046e733032c033c01200020001000151800007046e733033c033 33155 52c60000000100000000000004736d7470066863636e6574026e6c0000010001 52c68000000100000002000004736d7470066863636e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c033 33156 e3aa00000001000000000000036e7335046372696f026e6c0000010001 e3aa80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33157 0f0a00000001000000000000036e7336046372696f026e6c0000010001 0f0a80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33158 29b8000000010000000000000377777703776562026e6c0000010001 29b8800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 33159 6d0300000001000000000000036e7331046372696f026e6c0000010001 6d0380000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33160 4ba900000001000000000000036e7332046372696f026e6c0000010001 4ba980000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33161 eced00000001000000000000037777770a72656372656174696566026e6c0000010001 eced80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 33162 224600000001000000000000036e7335046372696f026e6c0000010001 224680000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33163 596400000001000000000000036e7336046372696f026e6c0000010001 596480000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33164 83cb00000001000000000000036e7331046372696f026e6c0000010001 83cb80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33165 918600000001000000000000036e7332046372696f026e6c0000010001 918680000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33166 bb1000000001000000000000037777770a737061727461616e3230026e6c0000010001 bb1080000001000000020002037777770a737061727461616e3230026e6c0000010001c0100002000100015180000e036e73310774696b6b6c696bc01bc01000020001000151800006036e7332c033c02f00010001000151800004d5c40902c049000100010001518000043eddd512 33167 d72300000001000000000000026e7308652d766973696f6e026e6c0000010001 d72380000001000000020002026e7308652d766973696f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4ce2c82c03a00010001000151800004d4ce2c78 33168 3e7100000001000000000000036e733208652d766973696f6e026e6c0000010001 3e7180000001000000020002036e733208652d766973696f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004d4ce2c82c00c00010001000151800004d4ce2c78 33169 2253000000010000000000000b62756c6267726f77696e67026e6c00000f0001 2253800000010000000200020b62756c6267726f77696e67026e6c00000f0001c00c0002000100015180000e026e7308652d766973696f6ec018c00c00020001000151800006036e7332c02fc02c00010001000151800004d4ce2c82c04600010001000151800004d4ce2c78 33170 859c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 859c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33171 43e70000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 43e78000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33172 d1510000000100000000000003626c3102626c06787334616c6c026e6c0000260001 d1518000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33173 26f60000000100000000000003626c3402626c06787334616c6c026e6c0000010001 26f68000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33174 13fa00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 13fa80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33175 f96400000001000000000000037777770a6b6f657273616c61726d026e6c0000010001 f96480000001000000020002037777770a6b6f657273616c61726d026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c01bc01000020001000151800006036e7332c033c02f00010001000151800004d4ccd865c04a000100010001518000045054ec34 33176 c52900000001000000000000037777770732343773686f70026e6c0000010001 c52980000001000000030003037777770732343773686f70026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004c1adf9c3c046000100010001518000043e70ec3cc05800010001000151800004c1ac0bae 33177 10f20000000100000000000005737461747308696e672d6562636e026e6c0000010001 10f28000000100000002000205737461747308696e672d6562636e026e6c0000010001c0120002000100015180000a036e733103696e67c01bc01200020001000151800006036e7332c033c02f0001000100015180000491dd19c2c0450001000100015180000491dd5dc2 33178 39c50000000100000000000003736d730567656e6965026e6c00000f0001 39c58000000100000002000203736d730567656e6965026e6c00000f0001c0100002000100015180000d026e73076e65746c616e64c016c01000020001000151800006036e7332c02dc02a00010001000151800004d9aa2042c04300010001000151800004d9aa2c06 33179 e13f0000000100000000000006737461746963076d616368696e6507667265656c6572026e6c0000010001 e13f8000000100000002000006737461746963076d616368696e6507667265656c6572026e6c0000010001c01b000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c01b0002000100015180000e0b65766973702d6e732d3032c043 33180 9c9900000001000000000000037777770e6465776f6e696e677a6f656b6572026e6c0000010001 9c9980000001000000020002037777770e6465776f6e696e677a6f656b6572026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01fc01000020001000151800006036e7332c036c03300010001000151800004c26d0642c04b00010001000151800004c26d0963 33181 1ccb00000001000000000000037777770667616d657273026e6c0000010001 1ccb80000001000000020002037777770667616d657273026e6c0000010001c0100002000100015180000b036e73310470696e65c017c01000020001000151800006036e7332c02fc02b00010001000151800004d59c0201c04200010001000151800004c3c1a303 33182 3ff200000001000000000000036e7331096475746368686f7374026e6c0000260001 3ff280000001000000020001036e7331096475746368686f7374026e6c0000260001c0100002000100015180000b0861737465726f7065c010c0100002000100015180000c036e733205786c722d38c01ac02e00010001000151800004d58523d2 33183 d26600000001000000000000036e733207626265796f6e64026e6c0000010001 d26680000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 33184 bd9c00000001000000000000026e73076e656473746174026e6c0000010001 bd9c80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 33185 50dd00000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 50dd80000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 33186 d78900000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 d78980000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 33187 11570000000100000000000008776562656c6c656e06787334616c6c026e6c0000010001 11578000000100000003000208776562656c6c656e06787334616c6c026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c0150002000100015180000d026e730472697065036e657400c03000010001000151800004c26d0642c04100010001000151800004c26d0963 33188 4bba00000001000000000000036e7331086765656e70756e74026e6c00001c0001 4bba80000001000000020002036e7331086765656e70756e74026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccd865c03b000100010001518000045054ec34 33189 425f00000001000000000000036e7331086765656e70756e74026e6c0000260001 425f80000001000000020002036e7331086765656e70756e74026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccd865c03b000100010001518000045054ec34 33190 20dd00000001000000000000036e7332086765656e70756e74026e6c00001c0001 20dd80000001000000020002036e7332086765656e70756e74026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d4ccd865c00c000100010001518000045054ec34 33191 5f2c00000001000000000000036e7332086765656e70756e74026e6c0000260001 5f2c80000001000000020002036e7332086765656e70756e74026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d4ccd865c00c000100010001518000045054ec34 33192 1b6e28000001000000010000026e6c0000060001055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f73697465730868756c73626f7577026e6c000021000100000258001d000000640185096e742d7365727665720868756c73626f7577026e6c00 1b6ea8040000000000000000 33193 0ab200000001000000000000036e733103696e67026e6c00001c0001 0ab280000001000000020002036e733103696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 33194 34c500000001000000000000036e733103696e67026e6c0000260001 34c580000001000000020002036e733103696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 33195 ef7400000001000000000000036e733203696e67026e6c00001c0001 ef7480000001000000020002036e733203696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 33196 efe700000001000000000000036e733203696e67026e6c0000260001 efe780000001000000020002036e733203696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 33197 d7f100000001000000000000037777770b686572766f726d64656465026e6c0000010001 d7f180000001000000020002037777770b686572766f726d64656465026e6c0000010001c01000020001000151800012036e73310b72656e61697373616e6365c01cc01000020001000151800006036e7332c034c03000010001000151800004d4ccc4efc04e00010001000151800004d4ccc4f0 33198 00000000700240001ad30000020405b401010402 000080010000000000000000 33199 c31a00000001000000000000086261626f75636865026e6c00000f0001 c31a80000001000000020000086261626f75636865026e6c00000f0001c00c00020001000151800010036e733106686f73747333036e657400c00c00020001000151800006036e7332c02d 33200 2b1b0010000100000000000106787334616c6c026e6c00000f00010000290800000080000000 2b1b8000000100000003000306787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 33201 b6eddfed50104470ac3b0000000000000000 33202 b6eddfed50104470ac3b0000000000000000 33203 b6eddfed5018447026ab00000090b572000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff80403c51000003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000 33204 b6eddffb50114462aba80000000000000000 33205 0000000070024000d8ab0000020405b401010402 000080010000000000000000 33206 b0be000000010000000000000377777704646f7261026e6c0000010001 b0be800000010000000200000377777704646f7261026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c02c 33207 b6eddffc50104462aba70000000000000000 33208 b6eddffc50104462aba70000000000000000 33209 7cc300000001000000000000037777770965617379626c696e64026e6c0000010001 7cc380000001000000020002037777770965617379626c696e64026e6c0000010001c01000020001000151800009026e730369736dc01ac01000020001000151800006036e7332c031c02e00010001000151800004d994ab02c04300010001000151800004d994ab03 33210 b6eed8705010447071900000000000000000 33211 b6eed8705010447071900000000000000000 33212 0424000000010000000000000377777706626164616b6f026e6c0000010001 0424800000010000000200000377777706626164616b6f026e6c0000010001c0100002000100015180000f036e7331057769736a61036e657400c01000020001000151800006036e7332c02f 33213 b6eed87050184470e4c000000090bdb2000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff80403c51000003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000 33214 676c0000000100000000000009736b79616363657373026e6c00000f0001 676c8000000100000002000209736b79616363657373026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c016c00c00020001000151800006036e7332c02ec02a0001000100015180000450416028c04500010001000151800004c356780c 33215 f6a700000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637309696e6d79706c616365036f7267026e6c0000060001 f6a784030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637309696e6d79706c616365036f7267026e6c0000060001c05200060001000038400036026e730f646f6d61696e2d7265676973747279c0520a686f73746d6173746572c0690bf1e540000070800000384000278d0000003840 33216 b6eed87e5011446270fd0000000000000000 33217 0000000070024000edab0000020405b401010402 000080010000000000000000 33218 83390000000100000000000003777777086b6c75736861616e026e6c0000010001 83398000000100000003000103777777086b6c75736861616e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 33219 b6eed87f5010446270fc0000000000000000 33220 b6eed87f5010446270fc0000000000000000 33221 b6f167c150104470f73c0000000000000000 b6f1e7c40000000000000000 33222 b6f167c150104470f73c0000000000000000 b6f1e7c40000000000000000 33223 b6f167c150184470686f00000090bdb0000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403aff81403c51010003000000314e544c4d535350000100000097b200e0080008002900000009000900200000004e542d53455256455248554c53424f55570000 b6f1e7c40000000000000000 33224 d63d00000001000000000000056e6f62656c026e6c00000f0001 d63d80000001000000020000056e6f62656c026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c029 33225 b6f167cf50114462f6a90000000000000000 b6f1e7c40000000000000000 33226 b6f167d050104462f6a80000000000000000 b6f1e7d40000000000000000 33227 b6f167d050104462f6a80000000000000000 b6f1e7d40000000000000000 33228 4dba00000001000000000000037777770c6d756c7469636172656e6574026e6c0000010001 4dba80000001000000020002037777770c6d756c7469636172656e6574026e6c0000010001c0100002000100015180000a036e733103697870c01dc01000020001000151800006036e7332c035c03100010001000151800004d943e639c047000100010001518000043efa063f 33229 d58a0000000100000000000003777777086c65747373746174026e6c0000010001 d58a8000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 33230 366600100001000000000001036a7572036b756e026e6c00000100010000290800000080000000 366680000001000000030004036a7572036b756e026e6c0000010001c0100002000100015180000f08636170796261726103756369c010c0100002000100015180000a036e733103736369c010c0100002000100015180000e036e733107737572666e6574c014c0280001000100015180000483ae3c15c0430001000100015180000483aee004c05900010001000151800004c0576a650000291000000000000000 33231 7d410000000100000000000006787334616c6c026e6c00000f0001 7d418000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 33232 79950000000100000000000009616c6465626172616e0b706167656d617374657273026e6c0000010001 79958000000100000002000209616c6465626172616e0b706167656d617374657273026e6c0000010001c01600020001000151800002c00cc0160002000100015180000d0a626574656c6765757365c016c00c00010001000151800004d5880b3cc04400010001000151800004d5880b3e 33233 a915000000010000000000000a626574656c67657573650b706167656d617374657273026e6c0000010001 a915800000010000000200020a626574656c67657573650b706167656d617374657273026e6c0000010001c0170002000100015180000c09616c6465626172616ec017c01700020001000151800002c00cc03700010001000151800004d5880b3cc00c00010001000151800004d5880b3e 33234 d15400000001000000000000036e733109666972737466696e64026e6c0000010001 d15480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33235 d15500000001000000000000036e733209666972737466696e64026e6c0000010001 d15580000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33236 d156000000010000000000000a73706f727476656e7565026e6c00001c0001 d156800000010000000200000a73706f727476656e7565026e6c00001c0001c00c00020001000151800010036e733109666972737466696e64c017c00c00020001000151800006036e7332c02f 33237 6ca10000000100000000000004626f676f026e6c00000f0001 6ca18000000100000002000004626f676f026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 33238 7f9400000001000000000000036d7831087265616c66726565026e6c0000010001 7f9480000001000000020000036d7831087265616c66726565026e6c0000010001c01000020001000151800011036e733107726f6b73636f6d036e657400c0100002000100015180000e036e733207726f6b73636f6dc019 33239 d15700000001000000000000036e733109666972737466696e64026e6c0000010001 d15780000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33240 d15800000001000000000000036e733209666972737466696e64026e6c0000010001 d15880000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33241 f11128000001000000010000026e6c0000060001055f6c646170045f7463700b7768697a7a646f6d706463026e6c00002100010000025800230000006401850c7768697a7a646f6d706463300b7768697a7a646f6d706463026e6c00 f111a8040000000000000000 33242 0b9100000001000000000000037777770968616d657273686f66026e6c0000010001 0b9180000001000000020002037777770968616d657273686f66026e6c0000010001c0100002000100015180000e026e730874657272617a7572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d5880e9ac04800010001000151800004d59ae202 33243 5232000000010000000000000772756d61776562026e6c00000f0001 5232800000010000000200020772756d61776562026e6c00000f0001c00c00020001000151800012036e73320b76736d2d686f7374696e67c014c00c00020001000151800005026e73c02cc02800010001000151800004d468c204c04600010001000151800004d468c205 33244 9eef00000001000000000000036e73320b76736d2d686f7374696e67026e6c0000010001 9eef80000001000000020002036e73320b76736d2d686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d468c205c00c00010001000151800004d468c204 33245 0000000070024000bf770000020405b401010402 000080010000000000000000 33246 41c000000001000000000000036e733303777873024e4c0000010001 41c080000001000000030003036e733303777873024e4c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 33247 b6f24c8350104470e4450000000000000000 b6f2cc840000000000000000 33248 b6f24c8350184470a15400000096b1a8000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0084403c52040003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000 b6f2cc840000000000000000 33249 a1be0000000100000000000003706f700f72656e6261616e6475696e64696774026e6c0000010001 a1be8000000100000003000203706f700f72656e6261616e6475696e64696774026e6c0000010001c0100002000100015180000f036e7331086d6f76656e657874c020c01000020001000151800006036e7332c038c01000020001000151800012036e7333086d6f76656e657874036e657400c03400010001000151800004d4ccc445c04f00010001000151800004d4ccf745 33250 fcf100000001000000000000126e62637665726d6f67656e73626568656572026e6c0000010001 fcf180000001000000020002126e62637665726d6f67656e73626568656572026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01fc00c00020001000151800006036e7332c036c03300010001000151800004c26d0642c04b00010001000151800004c26d0963 33251 b6f24c9150114462e3ac0000000000000000 b6f2cc940000000000000000 33252 b6f24c9250104462e3ab0000000000000000 b6f2cc940000000000000000 33253 caca000000010000000000001372696167672d72696a6e6d6f6e642d7a756964026e6c0000010001 caca800000010000000200021372696167672d72696a6e6d6f6e642d7a756964026e6c0000010001c00c00020001000151800015036e73310e726567696f70726f766964657273c020c00c00020001000151800006036e7332c038c03400010001000151800004d41da001c05500010001000151800004d41da1fe 33254 0000000070024000f0f20000020405b401010402 000080010000000000000000 33255 b6f339b750104470288c0000000000000000 b6f3b9b40000000000000000 33256 b6f339b750184470906c0000009607d8000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0084403c52040003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000 b6f3b9b40000000000000000 33257 b6f339c55011446227f30000000000000000 b6f3b9c40000000000000000 33258 174f000000010000000000000b706f6f6c686f6c64696e67026e6c0000ff0001 174f800000010000000200010b706f6f6c686f6c64696e67026e6c0000ff0001c00c0002000100015180000a036e733303777873c018c00c00020001000151800006036e7334c030c04200010001000151800004d5ef9a65 33259 b6f339c65010446227f20000000000000000 b6f3b9c40000000000000000 33260 00000000700240004f5f0000020405b401010402 000080010000000000000000 33261 b6f41c4a50104470a4640000000000000000 b6f49c440000000000000000 33262 b6f41c4a50184470d9f4000000963a28000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0084403c52040003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000 b6f49c440000000000000000 33263 b6f41c5850114462a3cb0000000000000000 b6f49c540000000000000000 33264 71ab000000010000000000000377777708637265612d6b6f73026e6c0000010001 71ab800000010000000200000377777708637265612d6b6f73026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 33265 b6f41c5950104462a3ca0000000000000000 b6f49c540000000000000000 33266 1b8400000001000000000000037777770672656b657265026e6c0000010001 1b8480000001000000020000037777770672656b657265026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 33267 4d9700000001000000000000036a7572036b756e026e6c0000010001 4d9780000001000000030003036a7572036b756e026e6c0000010001c0100002000100015180000f08636170796261726103756369c010c0100002000100015180000a036e733103736369c010c0100002000100015180000e036e733107737572666e6574c014c0280001000100015180000483ae3c15c0430001000100015180000483aee004c05900010001000151800004c0576a65 33268 20c000000001000000000000036e73330767617574656e67026e6c0000010001 20c080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33269 38cf00000001000000000000036e73340767617574656e67026e6c0000010001 38cf80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33270 18d200000001000000000000036e73330767617574656e67026e6c0000010001 18d280000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33271 bb9d00000001000000000000046e733032066368656c6c6f026e6c0000010001 bb9d80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 33272 ae5b0000000100000000000004686f6d650a636f6e63657074736661026e6c0000010001 ae5b8000000100000002000204686f6d650a636f6e63657074736661026e6c0000010001c0110002000100015180000603646e73c011c0110002000100015180001004646e733208636f6e6365707473c01cc03000010001000151800004d5c51c03c04200010001000151800004d5c51e1c 33273 494f000000010000000000000377777706696e74657265026e6c0000010001 494f800000010000000200010377777706696e74657265026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c017c04400010001000151800004c2860043 33274 592300000001000000000000036e7334076e656473746174026e6c0000010001 592380000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33275 7d1b0000000100000000000009756e697862617369630b7669616e6574776f726b73026e6c0000010001 7d1b8000000100000002000209756e697862617369630b7669616e6574776f726b73026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03600010001000151800004d43d0f08c04800010001000151800004d43d19e2 33276 1e1700000001000000000000036e7332076e656473746174026e6c0000010001 1e1780000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33277 b43900000001000000000000037777770d6a6f6f73746465727569746572026e6c0000010001 b43980000001000000020000037777770d6a6f6f73746465727569746572026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c038 33278 2096000000010000000000000873706163657075620b666f6b6b65727370616365026e6c0000010001 2096800000010000000200010873706163657075620b666f6b6b65727370616365026e6c0000010001c015000200010001518000160873706163657075620a64757463687370616365c021c0150002000100015180000b026e73026e6c036e657400c03500010001000151800004c2b2d042 33279 585600000001000000000000036e733209666972737466696e64026e6c0000010001 585680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33280 4dbc00000001000000000000036e733109666972737466696e64026e6c0000010001 4dbc80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33281 5c5700000001000000000000044449444f03414d4303555641026e6c0000010001 5c5780000001000000020002044449444f03414d4303555641026e6c0000010001c0150002000100015180000e086261726c61657573026963c015c01500020001000151800006036e7331c015c02d0001000100015180000491124432c0470001000100015180000491122710 33282 095d00000001000000000000044649444f03414d4303555641026e6c0000010001 095d80000001000000020002044649444f03414d4303555641026e6c0000010001c0150002000100015180000e086261726c61657573026963c015c01500020001000151800006036e7331c015c02d0001000100015180000491124432c0470001000100015180000491122710 33283 7a4f00000001000000000000084241524c4145555302494303555641026e6c0000010001 7a4f80000001000000020002084241524c4145555302494303555641026e6c0000010001c01800020001000151800002c00cc01800020001000151800006036e7331c018c00c0001000100015180000491124432c03e0001000100015180000491122710 33284 268200000001000000000000036e733109666972737466696e64026e6c0000010001 268280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33285 047e00000001000000000000036e733209666972737466696e64026e6c0000010001 047e80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33286 21c40000000100000000000008676f6c6673697465026e6c0000010001 21c48000000100000002000208676f6c6673697465026e6c0000010001c00c0002000100015180000e036e73310765766964656e74c015c00c00020001000151800006036e7332c02dc02900010001000151800004c36d19c4c04300010001000151800004c36d1942 33287 dacb00000001000000000000056d61696c320774656e626f6572026e6c0000010001 dacb80000001000000020000056d61696c320774656e626f6572026e6c0000010001c0120002000100015180000b026e73026e6c036e657400c0120002000100015180001206617574683630026e73026e6c027575c034 33288 9bbb000000010000000000000377777706706173706f70026e6c0000010001 9bbb800000010000000200000377777706706173706f70026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02e 33289 55f000000001000000000000046d61696c0770617261646f78026e6c0000010001 55f080000001000000020002046d61696c0770617261646f78026e6c0000010001c0110002000100015180000f026e7309656174736572766572c019c01100020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 33290 5647000000010000000000000377777706737461636b73026e6c0000010001 5647800000010000000300030377777706737461636b73026e6c0000010001c0100002000100015180000b036e73610462797465c017c01000020001000151800006036e7362c02fc01000020001000151800006036e7363c02fc02b00010001000151800004d977e520c04200010001000151800004d977e521c05400010001000151800004403ebe47 33291 280a000000010000000000000d6f6d726f70667279736c616e64026e6c0000010001 280a840300010000000100000d6f6d726f70667279736c616e64026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 33292 66510000000100000000000005646830373406787334616c6c026e6c0000010001 66518000000100000003000205646830373406787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 33293 4ab100000001000000000000036d6571026e6c00000f0001 4ab180000001000000020001036d6571026e6c00000f0001c00c0002000100015180000c036e7331056269746963c010c00c00020001000151800006036e7332c028c02400010001000151800004c36cdfc8 33294 68bd0000000100000000000003777777067a7376737362026e6c0000010001 68bd8403000100000001000003777777067a7376737362026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 33295 679200000001000000000000026e7306766576696461026e6c0000010001 679280000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 33296 79b70000000100000000000006617272697661026e6c00000f0001 79b78000000100000002000106617272697661026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02700010001000151800004d9a63bb2 33297 510200000001000000000000135649525455414c53484f57524f4f4d53494e43026e6c0000020001 510284030001000000010000135649525455414c53484f57524f4f4d53494e43026e6c0000020001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 33298 f97b000000010000000000000a616d7374656c7665656e026e6c0000010001 f97b800000010000000200000a616d7374656c7665656e026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 33299 6ea100000001000000000000036e73330767617574656e67026e6c0000010001 6ea180000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33300 1d7800000001000000000000036e73340767617574656e67026e6c0000010001 1d7880000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33301 49410000000100000000000009652d6c756e61746963026e6c0000010001 49418000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33302 1a9700000001000000000000036e733109756e69736f75726365026e6c0000010001 1a9780000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 33303 3b94000000010000000000000673656375726507656e64656d6f6c026e6c0000010001 3b94800000010000000200000673656375726507656e64656d6f6c026e6c0000010001c0130002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0130002000100015180000d036e7332036b706e036e657400 33304 2b3d00000001000000000000086865696e656b656e026e6c0000010001 2b3d80000001000000020000086865696e656b656e026e6c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02d 33305 01150000000100000000000005646e732d31056c61646f74026e6c0000010001 01158000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33306 7b7e000000010000000000000a6d6f6e74656e76657273026e6c0000ff0001 7b7e800000010000000200000a6d6f6e74656e76657273026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c017c00c0002000100015180000704686e7331c030 33307 71bd0000000100000000000005646e732d32056c61646f74026e6c0000010001 71bd8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33308 cd420000000100000000000003696d670a72617069647375676172026e6c0000010001 cd428000000100000002000203696d670a72617069647375676172026e6c0000010001c01000020001000151800009036e7331026973c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5852102c04400010001000151800004d5c41503 33309 3a4900000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 3a4980000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 33310 0158000000010000000000000469632d73026e6c0000ff0001 0158800000010000000200000469632d73026e6c0000ff0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 33311 c6e900000001000000000000037777770c617267313934302d31393435026e6c0000010001 c6e980000001000000020002037777770c617267313934302d31393435026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 33312 3a150000000100000000000006646f6e67656e026e6c0000010001 3a158000000100000002000106646f6e67656e026e6c0000010001c00c00020001000151800012026e730973796e63666f72636503636f6d00c00c0002000100015180000d036e733206787334616c6cc013c04500010001000151800004c26d0963 33313 a0aa0000000100000000000005646e732d31056c61646f74026e6c0000010001 a0aa8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33314 1c070000000100000000000005646e732d32056c61646f74026e6c0000010001 1c078000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33315 20450000000100000000000005646e732d31056c61646f74026e6c0000010001 20458000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33316 90b900000001000000000000037777770d706f726e6f62696f73636f6f70026e6c0000010001 90b980000001000000020002037777770d706f726e6f62696f73636f6f70026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c01ec01000020001000151800006036e7332c036c032000100010001518000045054e415c04e0001000100015180000451046014 33317 e9f30000000100000000000005646e732d32056c61646f74026e6c0000010001 e9f38000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33318 dd09000000010000000000001564696572656e70656e73696f6e2d6e61617264656e026e6c0000ff0001 dd09800000010000000200001564696572656e70656e73696f6e2d6e61617264656e026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c03c 33319 7a9f00000001000000000000036d6274026e6c00000f0001 7a9f80000001000000020002036d6274026e6c00000f0001c00c0002000100015180000b026e7305706c616e74c010c00c00020001000151800006036e7332c027c02400010001000151800004d59f0037c03b00010001000151800004d59f0046 33320 197c0000000100000000000007656c656d656e74066e656463616d026e6c0000010001 197c8000000100000002000207656c656d656e74066e656463616d026e6c0000010001c0140002000100015180000f026e7309656174736572766572c01bc01400020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 33321 1d40000000010000000000001072616e64737461642d656c656b74726f026e6c00000f0001 1d40800000010000000300021072616e64737461642d656c656b74726f026e6c00000f0001c00c0002000100015180000d036e733106776964657873c01dc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 33322 65420000000100000000000003777777046476686e026e6c0000010001 65428000000100000003000303777777046476686e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004c1ad573dc04600010001000151800004c1ad573ec05800010001000151800004d5880089 33323 bc460000000100000000000003777777117765726b6472756b70726576656e746965026e6c0000010001 bc468000000100000002000203777777117765726b6472756b70726576656e746965026e6c0000010001c01000020001000151800009036e7331026973c022c01000020001000151800006036e7332c03ac03600010001000151800004d5852102c04b00010001000151800004d5c41503 33324 0cc200000001000000000000036e733103737761026e6c0000010001 0cc280000001000000030001036e733103737761026e6c0000010001c0100002000100015180000e036e733104686d6e71036e657400c0100002000100015180000d036e733206776964657873c031c0100002000100015180000d036e733306776964657873c014c05b000100010001518000043efa0703 33325 234c00000001000000000000036e733103737761026e6c00001c0001 234c80000001000000030001036e733103737761026e6c00001c0001c0100002000100015180000e036e733104686d6e71036e657400c0100002000100015180000d036e733206776964657873c031c0100002000100015180000d036e733306776964657873c014c05b000100010001518000043efa0703 33326 d94f00000001000000000000036e733103737761026e6c0000260001 d94f80000001000000030001036e733103737761026e6c0000260001c0100002000100015180000e036e733104686d6e71036e657400c0100002000100015180000d036e733206776964657873c031c0100002000100015180000d036e733306776964657873c014c05b000100010001518000043efa0703 33327 f62700000001000000000000037777770770737670696373026e6c0000010001 f62780000001000000020002037777770770737670696373026e6c0000010001c0100002000100015180000a036e733103746d6ec018c01000020001000151800006036e7332c030c02c00010001000151800004d5a0d8fac04200010001000151800004d5a0d9fa 33328 c78a000000010000000000000631326d6f7665026e6c0000ff0001 c78a800000010000000300020631326d6f7665026e6c0000ff0001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 33329 0be000000001000000000000037777770b72747672696a6e6d6f6e64026e6c0000010001 0be080000001000000020000037777770b72747672696a6e6d6f6e64026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c037 33330 996f00000001000000000000037777770a7269636b6d6f6c656d61026e6c0000010001 996f80000001000000020000037777770a7269636b6d6f6c656d61026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 33331 25d600000001000000000000037777770a7472656e647374796c65026e6c0000010001 25d680000001000000020000037777770a7472656e647374796c65026e6c0000010001c01000020001000151800013036e733009696e7465726c697a65036e657400c01000020001000151800006036e7331c033 33332 42fd00000001000000000000037777770a75742d73747575706b65026e6c0000010001 42fd80000001000000020000037777770a75742d73747575706b65026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 33333 2d0d00000001000000000000036e733103757063026e6c00001c0001 2d0d80000001000000030003036e733103757063026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 33334 b12000000001000000000000036e733103757063026e6c0000010001 b12080000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 33335 dcff00000001000000000000046e733032066368656c6c6f026e6c00001c0001 dcff80000001000000030003046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 33336 ac2d00000001000000000000037777770463746369026e6c0000010001 ac2d84030001000000010000037777770463746369026e6c0000010001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 33337 bce500000001000000000000046e733032066368656c6c6f026e6c0000010001 bce580000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 33338 0ea900000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 0ea980000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33339 a0f500000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 a0f580000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33340 317000000001000000000000037777770764696769747578026e6c0000010001 317080000001000000020002037777770764696769747578026e6c0000010001c0100002000100015180000805646e733031c010c0100002000100015180000805646e733032c010c02c00010001000151800004d973cb46c04000010001000151800004d5549664 33341 0ffe00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 0ffe80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33342 b0360000000100000000000005627275766f026e6c00000f0001 b0368000000100000002000205627275766f026e6c00000f0001c00c00020001000151800016036e73310f706c616e706c616e73797374656d73c012c00c0002000100015180000a036e7332036e7873c012c02600010001000151800004d973c6a2c04800010001000151800004d973c102 33343 881300000001000000000000036e73320f444f4d41494e2d5245474953545259024e4c00001c0001 881380000001000000030002036e73320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33344 fe0d00000001000000000000026e730f444f4d41494e2d5245474953545259024e4c00001c0001 fe0d80000001000000030002026e730f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33345 2f200000000100000000000003777777086631726163696e67026e6c0000010001 2f208000000100000002000203777777086631726163696e67026e6c0000010001c01000020001000151800016036e73310f6578636c757369766564657369676ec019c01000020001000151800006036e7332c031c02d00010001000151800004d97261bec04f00010001000151800004d97261bd 33346 669f000000010000000000001076616e6d6175726963656465686f6e64026e6c0000010001 669f840300010000000100001076616e6d6175726963656465686f6e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 33347 f6be000000010000000000000377777706636861746964026e6c0000010001 f6be800000010000000200020377777706636861746964026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c017c01000020001000151800006036e7332c02ec02b0001000100015180000450474002c0490001000100015180000450474102 33348 0fa70000000100000000000003667474026e6c0000010001 0fa78000000100000003000303667474026e6c0000010001c00c0002000100015180000e04646e733106626c6978656dc010c00c0002000100015180000704646e7332c029c00c0002000100015180000704646e7333c029c02400010001000151800004d44fe803c03e00010001000151800004c3f5c782c05100010001000151800004d44ff303 33349 251e00000001000000000000036e733208696e7465726d6178026e6c0000010001 251e80000001000000020002036e733208696e7465726d6178026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004505fa002c00c00010001000151800004505fac02 33350 68cb00000001000000000000036e733108696e7465726d6178026e6c0000010001 68cb80000001000000020002036e733108696e7465726d6178026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004505fa002c03b00010001000151800004505fac02 33351 f0db00000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d7364637306626c6e74303105626c646d6e026e6c0000210001 f0db84030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d7364637306626c6e74303105626c646d6e026e6c0000210001c04d00060001000038400036026e730f646f6d61696e2d7265676973747279c04d0a686f73746d6173746572c0640bf1e540000070800000384000278d0000003840 33352 c53a00000001000000000000087769656c61617264026e6c00000f0001 c53a80000001000000020001087769656c61617264026e6c00000f0001c00c000200010001518000130b737061726373657276657204706c6578c015c00c0002000100015180000b026e73026e6c036e657400c02900010001000151800004c1439a0a 33353 2fc5000000010000000000000377777708616e65776c696665026e6c0000010001 2fc5840300010000000100000377777708616e65776c696665026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 33354 6eca00000001000000000000036d783306787334616c6c026e6c0000010001 6eca80000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 33355 4b7a00000001000000000000036d783406787334616c6c026e6c0000010001 4b7a80000001000000030002036d783406787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 33356 c8b900000001000000000000055f6c646170045f746370026763065f6d7364637306626c6e74303105626c646d6e026e6c0000210001 c8b984030001000000010000055f6c646170045f746370026763065f6d7364637306626c6e74303105626c646d6e026e6c0000210001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 33357 3653000000010000000000000776657273696f6e0462696e640000100003 3653800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 33358 42240000000100000000000006706c61736d61026e6c0000010001 42248000000100000002000206706c61736d61026e6c0000010001c00c0002000100015180000d026e73076b6e6f77617265c013c00c00020001000151800006036e7332c02ac02700010001000151800004c3402003c04000010001000151800004c340202b 33359 158100000001000000000000037777770a766f656c737072696574026e6c0000010001 158180000001000000020000037777770a766f656c737072696574026e6c0000010001c0100002000100015180000c026e7306766576696461c01bc01000020001000151800006036e7332c032 33360 902e00000001000000000000037777770631326a6f6273026e6c0000010001 902e80000001000000030002037777770631326a6f6273026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 33361 a59300000001000000000000046d61696c086d656e7364617461026e6c0000010001 a59380000001000000020001046d61696c086d656e7364617461026e6c0000010001c0110002000100015180000c026e73066e6577777773c01ac0110002000100015180000d036e7332036b706e036e657400c02e00010001000151800004c1ac2b35 33362 099a00100001000000000001036e733503777873026e6c00000100010000290800000080000000 099a80000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 33363 9e2700000001000000000000055f6c646170045f746370086e6b6f6572696572026e6c0000060001 9e2784030001000000010000055f6c646170045f746370086e6b6f6572696572026e6c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 33364 7b6e00000001000000000000036e733207726f6b73636f6d026e6c0000010001 7b6e80000001000000020000036e733207726f6b73636f6d026e6c0000010001c01000020001000151800011036e733207726f6b73636f6d036e657400c01000020001000151800006036e7333c030 33365 101b0000000100000000000013656767696e6b2d76657270616b6b696e67656e026e6c00000f0001 101b8000000100000002000213656767696e6b2d76657270616b6b696e67656e026e6c00000f0001c00c0002000100015180000a036e733103646c61c020c00c00020001000151800006036e7332c038c034000100010001518000043eb1a412c04a000100010001518000043eb1a413 33366 3dec00100001000000000001026e7304696d636f026e6c00000100010000290800000080000000 3dec80000001000000020002026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a0000291000000000000000 33367 be330000000100000000000006636861726973026e6c0000010001 be338000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 33368 ace10000000100000000000005646e732d31056c61646f74026e6c0000010001 ace18000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33369 a678000000010000000000001768656e73696e7374616c6c61746965746563686e69656b026e6c0000010001 a678800000010000000200021768656e73696e7374616c6c61746965746563686e69656b026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc024c00c00020001000151800006036e7332c03bc03800010001000151800004c26d0642c05000010001000151800004c26d0963 33370 a1360000000100000000000005646e732d32056c61646f74026e6c0000010001 a1368000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33371 8d1a00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 8d1a80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33372 0c7600000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 0c7680000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33373 dfbd0000000100000000000005746c6774650a7061797065726e657773026e6c0000010001 dfbd8000000100000002000205746c6774650a7061797065726e657773026e6c0000010001c01200020001000151800010036e733109652d666163746f7279c01dc01200020001000151800006036e7332c035c03100010001000151800004c1fefe82c04d00010001000151800004c1feff82 33374 9b2300000001000000000000056369626170026e6c00000f0001 9b2380000001000000020002056369626170026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc012c00c00020001000151800006036e7332c02ac02600010001000151800004c3558244c03f00010001000151800004c3558245 33375 dc9400000001000000000000036e733503777873026e6c0000010001 dc9480000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 33376 d5c20000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d5c28000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33377 92960000000100000000000008636f6d626174656c026e6c00000f0001 92968000000100000002000008636f6d626174656c026e6c00000f0001c00c00020001000151800013036e73310c696d70726573736976657873c015c00c00020001000151800006036e7332c02d 33378 ff0600100001000000000001036e733107686f7477697265026e6c00000100010000290800000000000000 ff0680000001000000020003036e733107686f7477697265026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451044b03c03a0001000100015180000451044bc80000291000000000000000 33379 ffee00100001000000000001036e733207686f7477697265026e6c00000100010000290800000000000000 ffee80000001000000020003036e733207686f7477697265026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c0001000100015180000451044b03c00c0001000100015180000451044bc80000291000000000000000 33380 484100000001000000000000036e7332067a696d627261026e6c0000010001 484180000001000000020002036e7332067a696d627261026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d5efa611c00c00010001000151800004d5efa612 33381 277700000001000000000000036e7332067a696d627261026e6c0000260001 277780000001000000020002036e7332067a696d627261026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d5efa611c00c00010001000151800004d5efa612 33382 65e928000001000000010000026e6c0000060001055f6c646170045f746370086e6b6f6572696572026e6c000021000100000258001a00000064018506736572766572086e6b6f6572696572026e6c00 65e9a8040000000000000000 33383 422200000001000000000000036e733503777873026e6c0000010001 422280000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 33384 e8c40000000100000000000003736e73026e6c00000f0001 e8c48000000100000002000003736e73026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c028 33385 e7e7000000010000000000000d656c656b74726f76616b6d616e026e6c0000ff0001 e7e7800000010000000200010d656c656b74726f76616b6d616e026e6c0000ff0001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02e00010001000151800004c297492a 33386 4f4300000001000000000000036e73310a726564686f7374696e67026e6c00001c0001 4f4380000001000000020002036e73310a726564686f7374696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 33387 762d00000001000000000000036e73320a726564686f7374696e67026e6c00001c0001 762d80000001000000020002036e73320a726564686f7374696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa405 33388 bd61000000010000000000000e36322d3137372d3138322d32303207626265796f6e64026e6c0000010001 bd61800000010000000200020e36322d3137372d3138322d32303207626265796f6e64026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc037000100010001518000043eb1900bc049000100010001518000043eb19002 33389 b225000000010000000000000673657964656c026e6c0000ff0001 b225800000010000000200000673657964656c026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 33390 c415000000010000000000000377777707696e666f343030026e6c0000010001 c415800000010000000200010377777707696e666f343030026e6c0000010001c01000020001000151800009026e73036e636ec018c01000020001000151800006036e7332c02fc02c00010001000151800004c2e51401 33391 18b60000000100000000000003777777036e7263026e6c0000010001 18b68000000100000003000203777777036e7263026e6c0000010001c01000020001000151800015036e73310b70696e6b726f6363616465036e657400c0100002000100015180000e026e73086d656761706c6578c014c01000020001000151800006036e7331c04cc04900010001000151800004504f6101c06300010001000151800004504f6102 33392 0eac000000010000000000000377777708776f6f6e73646167026e6c0000010001 0eac800000010000000200000377777708776f6f6e73646167026e6c0000010001c01000020001000151800011036e73310764726965626974036e657400c01000020001000151800006036e7332c031 33393 fbbb0000000100000000000006636861726973026e6c0000ff0001 fbbb8000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 33394 ded900000001000000000000036e7332036e636e026e6c0000010001 ded980000001000000020001036e7332036e636e026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004c2e51401 33395 26a700000001000000000000036e7332036e636e026e6c0000260001 26a780000001000000020001036e7332036e636e026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004c2e51401 33396 00000000700222389b1f00000204057801010402 000080010000000000000000 33397 0b1d00000001000000000000046d61696c0764656e68616167026e6c0000010001 0b1d80000001000000020002046d61696c0764656e68616167026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02d00010001000151800004d9443105c03f00010001000151800004d9443106 33398 b01000000001000000000000037777770e7274766f6f73747265636c616d65026e6c0000010001 b01080000001000000020002037777770e7274766f6f73747265636c616d65026e6c0000010001c0100002000100015180000c036e7331057669727475c01fc01000020001000151800006036e7332c037c03300010001000151800004d9726102c04b00010001000151800004d58141c4 33399 ee9400000001000000000000076863636669646f03686363026e6c00000f0001 ee9480000001000000020000076863636669646f03686363026e6c00000f0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c032 33400 62750000000100000000000003777777086575726f6b6c696b026e6c0000010001 62758000000100000002000103777777086575726f6b6c696b026e6c0000010001c0100002000100015180000e026e73086575726f636c6978c019c01000020001000151800012036e7332086575726f636c697803636f6d00c02d00010001000151800004d47bc685 33401 b6f6588a50102648b4060000000000000000 b6f6d8840000000000000000 33402 bd6600000001000000000000036e733107737572666e6574026e6c0000010001 bd6680000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 33403 4f9d00000001000000000000087073746e7365727607747564656c6674026e6c0000010001 4f9d80000001000000050005087073746e7365727607747564656c6674026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800009036e7331026574c015c0150002000100015180000d07647574746e636202746ec015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000482a1b401c0430001000100015180000482a1b441c0550001000100015180000482a12111c06a0001000100015180000482a1bc8cc08300010001000151800004c0576a65 33404 31fb00000001000000000000087073746e7365727607747564656c6674026e6c00001c0001 31fb80000001000000050005087073746e7365727607747564656c6674026e6c00001c0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800009036e7331026574c015c0150002000100015180000d07647574746e636202746ec015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000482a1b401c0430001000100015180000482a1b441c0550001000100015180000482a12111c06a0001000100015180000482a1bc8cc08300010001000151800004c0576a65 33405 8eb60000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 8eb68000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 33406 fff700000001000000000000036e733107686f7477697265026e6c0000010001 fff780000001000000020002036e733107686f7477697265026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451044b03c03a0001000100015180000451044bc8 33407 0ef500000001000000000000036e733207686f7477697265026e6c0000010001 0ef580000001000000020002036e733207686f7477697265026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c0001000100015180000451044b03c00c0001000100015180000451044bc8 33408 b6f6588a50182648a8900000008d3800000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afca8403c4e2800030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 b6f6d8840000000000000000 33409 14fb000000010000000000000f766572676565727265657577696a6b026e6c0000010001 14fb800000010000000200020f766572676565727265657577696a6b026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01cc00c00020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 33410 b6f658985011263ab3760000000000000000 b6f6d8940000000000000000 33411 0000000070022238a91f00000204057801010402 000080010000000000000000 33412 a7100000000100000000000006657572656b610464697661026e6c0000010001 a7108000000100000002000006657572656b610464697661026e6c0000010001c0130002000100015180000e036e73310464697661036e657400c01300020001000151800006036e7332c030 33413 b6f658995010263ab3750000000000000000 b6f6d8940000000000000000 33414 3ca400000001000000000000026e7304696d636f026e6c0000010001 3ca480000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 33415 b6f74bfb50102648ce940000000000000000 b6f7cbf40000000000000000 33416 eeaa00000001000000000000036e73330472617468026e6c0000010001 eeaa80000001000000020002036e73330472617468026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02900010001000151800004d535c109c03b000100010001518000043f6d1401 33417 bb8500000001000000000000036e73330472617468026e6c0000260001 bb8580000001000000020002036e73330472617468026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02900010001000151800004d535c109c03b000100010001518000043f6d1401 33418 01a70000000100000000000007686f72697a6f6e026e6c00000f0001 01a78000000100000002000207686f72697a6f6e026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc02800010001000151800004d5c51803c03900010001000151800004d5c51805 33419 b6f74bfb50182648241f0000008dd800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afca8403c4e2800030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 b6f7cbf40000000000000000 33420 c8c400000001000000000000024e530f444f4d41494e2d5245474953545259024e4c00001c0001 c8c480000001000000030002024e530f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33421 657f00000001000000000000024e530f444f4d41494e2d5245474953545259024e4c0000260001 657f80000001000000030002024e530f444f4d41494e2d5245474953545259024e4c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33422 789b00000001000000000000034e53320f444f4d41494e2d5245474953545259024e4c00001c0001 789b80000001000000030002034e53320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33423 ca6200000001000000000000034e53320f444f4d41494e2d5245474953545259024e4c0000260001 ca6280000001000000030002034e53320f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33424 243300000001000000000000034e53350f444f4d41494e2d5245474953545259024e4c00001c0001 243380000001000000030002034e53350f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33425 a15000000001000000000000034e53350f444f4d41494e2d5245474953545259024e4c0000260001 a15080000001000000030002034e53350f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33426 754600000001000000000000037777770873706f7274757261026e6c0000010001 754680000001000000030003037777770873706f7274757261026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 33427 277000000001000000000000036e73310761737034616c6c026e6c00001c0001 277080000001000000030003036e73310761737034616c6c026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c1adf9c3c03a000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 33428 69f300000001000000000000036e73310761737034616c6c026e6c0000260001 69f380000001000000030003036e73310761737034616c6c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c1adf9c3c03a000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 33429 788500000001000000000000036e73320761737034616c6c026e6c0000260001 788580000001000000030003036e73320761737034616c6c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c00c000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 33430 443400000001000000000000036e73330761737034616c6c026e6c00001c0001 443480000001000000030003036e73330761737034616c6c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc00c00010001000151800004c1ac0bae 33431 91a700000001000000000000036e73330761737034616c6c026e6c0000260001 91a780000001000000030003036e73330761737034616c6c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc00c00010001000151800004c1ac0bae 33432 281600000001000000000000066f6d726f6e32086c6f7374626f7973026e6c0000010001 281680000001000000020002066f6d726f6e32086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 33433 49b5000000010000000000000377777708776f6f6e73646167026e6c0000010001 49b5800000010000000200000377777708776f6f6e73646167026e6c0000010001c01000020001000151800011036e73310764726965626974036e657400c01000020001000151800006036e7332c031 33434 b6f74c095011263ace040000000000000000 b6f7cc040000000000000000 33435 0000000070022238c24f00000204057801010402 000080010000000000000000 33436 1e3500000001000000000000036d783107626265796f6e64026e6c0000010001 1e3580000001000000020002036d783107626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c000100010001518000043eb1900bc03e000100010001518000043eb19002 33437 b6f74c0a5010263ace030000000000000000 b6f7cc040000000000000000 33438 b6f99ca65010264897170000000000000000 33439 20580000000100000000000004776f726b046f6e6365026e6c0000010001 20588000000100000002000004776f726b046f6e6365026e6c0000010001c0110002000100015180000f026e73096379626572636f6d6dc016c01100020001000151800006036e7332c02d 33440 ed9400000001000000000000037777770a74656c6c6572706c7573026e6c0000010001 ed9480000001000000020002037777770a74656c6c6572706c7573026e6c0000010001c0100002000100015180001404777777320c6e656465726c616e64776562c01bc0100002000100015180000d036e73320670726f6c616ec01bc02f00010001000151800004d5d381c2c04f00010001000151800004d4ccd4e7 33441 b6f99ca6501826484ca20000008d7800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afca8403c4e2800030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 33442 f9cd00000001000000000000037777770d706f726e6f62696f73636f6f70026e6c0000010001 f9cd80000001000000020002037777770d706f726e6f62696f73636f6f70026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c01ec01000020001000151800006036e7332c036c032000100010001518000045054e415c04e0001000100015180000451046014 33443 623400000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001 623484030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001c05700060001000038400036026e730f646f6d61696e2d7265676973747279c0570a686f73746d6173746572c06e0bf1e540000070800000384000278d0000003840 33444 2bf6000000010000000000000774726166666963026e6c0000010001 2bf6800000010000000200000774726166666963026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 33445 4f9f000000010000000000000f534d4954485353544154494f4e414c026e6c0000020001 4f9f840300010000000100000f534d4954485353544154494f4e414c026e6c0000020001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 33446 38a8000000010000000000000377777705736861726b026e6c0000010001 38a8800000010000000200000377777705736861726b026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c040 33447 b6f99cb45011263a96870000000000000000 33448 13910000000100000000000006676f6f676c65026e6c0000010001 13918000000100000003000006676f6f676c65026e6c0000010001c00c00020001000151800010036e733106676f6f676c6503636f6d00c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02b 33449 38e400000001000000000000036e73330767617574656e67026e6c0000010001 38e480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33450 6cc80000000100000000000003777777127a7769747365726c6576656e6765766f656c026e6c0000010001 6cc88000000100000002000103777777127a7769747365726c6576656e6765766f656c026e6c0000010001c0100002000100015180000c036e7331056b706e6873c023c0100002000100015180000d03646e73036b706e03636f6d00c0370001000100015180000491072163 33451 b6f99cb55010263a96860000000000000000 33452 3aec00000001000000000000036e73310663617374656c024e4c0000010001 3aec80000001000000020002036e73310663617374656c024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3558244c03900010001000151800004c3558245 33453 45bc00000001000000000000036e733103656964026e6c0000010001 45bc80000001000000020002036e733103656964026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c048b6c0360001000100015180000452c048ba 33454 132400000001000000000000036e733203656964026e6c0000010001 132480000001000000020002036e733203656964026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000452c048b6c00c0001000100015180000452c048ba 33455 5bb000000001000000000000036e7335046372696f026e6c0000010001 5bb080000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33456 88bd00000001000000000000036e7336046372696f026e6c0000010001 88bd80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33457 53cd000000010000000000000377777703776562026e6c0000010001 53cd800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 33458 6a5800000001000000000000036e7331046372696f026e6c0000010001 6a5880000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33459 037700000001000000000000036e7332046372696f026e6c0000010001 037780000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33460 0b5a00000001000000000000037777770a72656372656174696566026e6c0000010001 0b5a80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 33461 46db00000001000000000000036e7331046372696f026e6c0000010001 46db80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33462 b2d100000001000000000000036e7332046372696f026e6c0000010001 b2d180000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33463 458b00100001000000000001024e530743495354524f4e024e4c00000100010000290800000080000000 458b80000001000000020003024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f380000291000000000000000 33464 2d7c00000001000000000000036e733207686f7374696e67026e6c0000010001 2d7c80000001000000030003036e733207686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c000100010001518000043e818b01c00c000100010001518000043e818b02c04c000100010001518000043e818ae1 33465 3c0b00000001000000000000036e733207686f7374696e67026e6c00001c0001 3c0b80000001000000030003036e733207686f7374696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c000100010001518000043e818b01c00c000100010001518000043e818b02c04c000100010001518000043e818ae1 33466 933400000001000000000000036e733107686f7374696e67026e6c0000010001 933480000001000000030003036e733107686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e818b01c03a000100010001518000043e818b02c04c000100010001518000043e818ae1 33467 2b8f00000001000000000000036e733107686f7374696e67026e6c00001c0001 2b8f80000001000000030003036e733107686f7374696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e818b01c03a000100010001518000043e818b02c04c000100010001518000043e818ae1 33468 071200000001000000000000036e733107686f7374696e67026e6c0000260001 071280000001000000030003036e733107686f7374696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e818b01c03a000100010001518000043e818b02c04c000100010001518000043e818ae1 33469 43f500000001000000000000036e733307686f7374696e67026e6c0000010001 43f580000001000000030003036e733307686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c000100010001518000043e818b01c03e000100010001518000043e818b02c00c000100010001518000043e818ae1 33470 9eac00000001000000000000036e733307686f7374696e67026e6c00001c0001 9eac80000001000000030003036e733307686f7374696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c000100010001518000043e818b01c03e000100010001518000043e818b02c00c000100010001518000043e818ae1 33471 91cf00000001000000000000036e733307686f7374696e67026e6c0000260001 91cf80000001000000030003036e733307686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c000100010001518000043e818b01c03e000100010001518000043e818b02c00c000100010001518000043e818ae1 33472 5e4e00000001000000000000036e733203656964026e6c0000010001 5e4e80000001000000020002036e733203656964026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000452c048b6c00c0001000100015180000452c048ba 33473 2f2700000001000000000000036e733103656964026e6c0000010001 2f2780000001000000020002036e733103656964026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c048b6c0360001000100015180000452c048ba 33474 46690000000100000000000003777777116d6f747261632d6879647261756c69656b026e6c0000010001 46698000000100000002000003777777116d6f747261632d6879647261756c69656b026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c039 33475 af6e00000001000000000000055f6c646170045f74637014536974652d4b4e2d426164686f657665646f7270065f73697465730749435454455354026e6c0000060001 af6e84030001000000010000055f6c646170045f74637014536974652d4b4e2d426164686f657665646f7270065f73697465730749435454455354026e6c0000060001c03b00060001000038400036026e730f646f6d61696e2d7265676973747279c03b0a686f73746d6173746572c0520bf1e540000070800000384000278d0000003840 33476 9b2c00000001000000000000036e7331056b706e6873026e6c0000010001 9b2c80000001000000020001036e7331056b706e6873026e6c0000010001c01000020001000151800002c00cc0100002000100015180000d03646e73036b706e03636f6d00c00c0001000100015180000491072163 33477 a96400000001000000000000036e7331076f6d732d6e6574026e6c00001c0001 a96480000001000000020002036e7331076f6d732d6e6574026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efb22fc03a00010001000151800004d5ef9d07 33478 ec7b00000001000000000000036e7331076f6d732d6e6574026e6c0000260001 ec7b80000001000000020002036e7331076f6d732d6e6574026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efb22fc03a00010001000151800004d5ef9d07 33479 d7ae00000001000000000000036e7332076f6d732d6e6574026e6c00001c0001 d7ae80000001000000020002036e7332076f6d732d6e6574026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d5efb22fc00c00010001000151800004d5ef9d07 33480 b9a900000001000000000000036e7332076f6d732d6e6574026e6c0000260001 b9a980000001000000020002036e7332076f6d732d6e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d5efb22fc00c00010001000151800004d5ef9d07 33481 f46000000001000000000000046d61696c04642d6363026e6c0000010001 f46080000001000000020002046d61696c04642d6363026e6c0000010001c0110002000100015180000f026e7309656174736572766572c016c01100020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 33482 d825000000010000000000000b72696f766f6f727a6f7267026e6c00000f0001 d825800000010000000200000b72696f766f6f727a6f7267026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 33483 b4db00000001000000000000046d61696c06657874656e74026e6c0000010001 b4db80000001000000020000046d61696c06657874656e74026e6c0000010001c01100020001000151800012036e7331086d7964796e646e73036f726700c01100020001000151800006036e7332c030 33484 541500000001000000000000037777771372656d6b65736265656c64656e67656c756964026e6c0000010001 541580000001000000020000037777771372656d6b65736265656c64656e67656c756964026e6c0000010001c0100002000100015180000c026e7306766576696461c024c01000020001000151800006036e7332c03b 33485 fc8c00000001000000000000046d61696c04626f676f026e6c0000010001 fc8c80000001000000020000046d61696c04626f676f026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c030 33486 000000005014000081b30000636b6f000000 000080010000000000000000 33487 0ed20000000100000000000003626c3102626c06787334616c6c026e6c0000010001 0ed28000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33488 0000000050140000f51e0000636b6f000000 000080010000000000000000 33489 c49d00000001000000000000037777770c6461726b2d6869746c69737403636f6d05696e7472610467647676026e6c0000010001 c49d80000001000000020000037777770c6461726b2d6869746c69737403636f6d05696e7472610467647676026e6c0000010001c0270002000100015180000b026e73026e6c036e657400c0270002000100015180001206617574683630026e73026e6c027575c046 33490 0000000050140000c43b0000636b6f000000 000080010000000000000000 33491 ae0a000000010000000000000467656861026e6c00000f0001 ae0a800000010000000200020467656861026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 33492 f25500000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 f25580000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33493 5711000000010000000000000e766e6d6765617273797374656d73026e6c00000f0001 5711800000010000000200000e766e6d6765617273797374656d73026e6c00000f0001c00c0002000100015180000f036e7331053132337873036e657400c00c00020001000151800006036e7333c033 33494 23bb000000010000000000000377777705746c6f7567026e6c0000010001 23bb800000010000000200000377777705746c6f7567026e6c0000010001c0100002000100015180000c026e7306766576696461c016c01000020001000151800006036e7332c02d 33495 14f3000000010000000000000d535449434854494e472d4a415a026e6c0000020001 14f3840300010000000100000d535449434854494e472d4a415a026e6c0000020001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 33496 ced000000001000000000000056663726f63026e6c00000f0001 ced080000001000000020002056663726f63026e6c00000f0001c00c0002000100015180000d036e7331066e6c74726565c012c00c00020001000151800006036e7332c02ac02600010001000151800004d4b20403c03f00010001000151800004d5881e45 33497 564d00000001000000000000034e533103575552024e4c0000010001 564d80000001000000020002034e533103575552024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000489e0f88dc0360001000100015180000489e0f88e 33498 d397000000010000000000000377777703746e7707747564656c6674026e6c0000010001 d397800000010000000500050377777703746e7707747564656c6674026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c01400020001000151800009036e7331026574c014c0140002000100015180000d07647574746e636202746ec014c0140002000100015180000e036e733107737572666e6574c01cc0300001000100015180000482a1b401c0420001000100015180000482a1b441c0540001000100015180000482a12111c0690001000100015180000482a1bc8cc08200010001000151800004c0576a65 33499 3dba000000010000000000000377777707736974652d6964026e6c0000010001 3dba800000010000000300000377777707736974652d6964026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030 33500 bcbb000000010000000000000377777707736974652d6964026e6c0000010001 bcbb800000010000000300000377777707736974652d6964026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030 33501 8809000000010000000000000564756261690a6c65756b657374617274026e6c0000010001 8809800000010000000300030564756261690a6c65756b657374617274026e6c0000010001c0120002000100015180000c036e7331056d61786573c01dc01200020001000151800006036e7332c035c01200020001000151800006036e7333c035c031000100010001518000045045402ec049000100010001518000045045402fc05b000100010001518000045045440a 33502 26a40000000100000000000006686565726465026e6c00000f0001 26a48000000100000002000206686565726465026e6c00000f0001c00c0002000100015180000e026e73086d656761706c6578c013c00c00020001000151800006036e7331c02ac02700010001000151800004504f6101c04100010001000151800004504f6102 33503 e23100000001000000000000037777770866756e6e79736d73026e6c0000010001 e23180000001000000020000037777770866756e6e79736d73026e6c0000010001c01000020001000151800015036e73310b736e616b6573657276657203636f6d00c01000020001000151800006036e7332c031 33504 bfc900000001000000000000037777770973796e6368726f6f6e026e6c0000010001 bfc980000001000000020000037777770973796e6368726f6f6e026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 33505 0b660000000100000000000005646e732d31056c61646f74026e6c0000010001 0b668000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33506 afcd0000000100000000000005646e732d32056c61646f74026e6c0000010001 afcd8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33507 aac000000001000000000000046d61696c04656c6d61026e6c0000010001 aac080000001000000020002046d61696c04656c6d61026e6c0000010001c0110002000100015180000f026e7309656c6d6167726f6570c016c01100020001000151800006036e7331c02dc02a00010001000151800004d5880085c04500010001000151800004d5ce5e22 33508 311f0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 311f8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33509 00d40000000100000000000009652d6c756e61746963026e6c0000010001 00d48000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33510 68dd00000001000000000000036e73320568616e7a65026e6c0000010001 68dd80000001000000030003036e73320568616e7a65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004912106efc00c00010001000151800004912106eec04a00010001000151800004c0576a65 33511 16c100000001000000000000046476686e026e6c0000010001 16c180000001000000030003046476686e026e6c0000010001c00c00020001000151800011036e73310a6e6463686f6c64696e67c011c00c00020001000151800006036e7332c029c00c00020001000151800006036e7333c029c02500010001000151800004c1ad573dc04200010001000151800004c1ad573ec05400010001000151800004d5880089 33512 7001000000010000000000000b6e732d767575727765726b07646f6f66706f74026e6c0000010001 7001800000010000000200020b6e732d767575727765726b07646f6f66706f74026e6c0000010001c0180002000100015180000f036e73310863616d627269756dc020c01800020001000151800006036e7332c038c03400010001000151800004d9131082c04f00010001000151800004d5efb202 33513 135c00000001000000000000036e73310568616e7a65026e6c0000010001 135c80000001000000030003036e73310568616e7a65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c016c00c00010001000151800004912106efc03800010001000151800004912106eec04a00010001000151800004c0576a65 33514 116d0000000100000000000009652d6c756e61746963026e6c0000010001 116d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33515 317d0000000100000000000009652d6c756e61746963026e6c0000010001 317d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33516 118e0000000100000000000003777777046d75636f026e6c0000010001 118e8000000100000002000203777777046d75636f026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c015c01000020001000151800006036e7332c02cc0290001000100015180000450474002c0470001000100015180000450474102 33517 50190000000100000000000005736d7470320a6e6463686f6c64696e67026e6c0000010001 50198000000100000003000305736d7470320a6e6463686f6c64696e67026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c03100010001000151800004c1ad573dc04300010001000151800004c1ad573ec05500010001000151800004d5880089 33518 d9cd0000000100000000000005736d7470320a6e6463686f6c64696e67026e6c00001c0001 d9cd8000000100000003000305736d7470320a6e6463686f6c64696e67026e6c00001c0001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c03100010001000151800004c1ad573dc04300010001000151800004c1ad573ec05500010001000151800004d5880089 33519 403400000001000000000000066261636b7570046d61696c0a6e6463686f6c64696e67026e6c0000010001 403480000001000000030003066261636b7570046d61696c0a6e6463686f6c64696e67026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c01800020001000151800006036e7333c018c03700010001000151800004c1ad573dc04900010001000151800004c1ad573ec05b00010001000151800004d5880089 33520 12f200000001000000000000066261636b7570046d61696c0a6e6463686f6c64696e67026e6c00001c0001 12f280000001000000030003066261636b7570046d61696c0a6e6463686f6c64696e67026e6c00001c0001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c01800020001000151800006036e7333c018c03700010001000151800004c1ad573dc04900010001000151800004c1ad573ec05b00010001000151800004d5880089 33521 57b70000000100000000000005736d7470310a6e6463686f6c64696e67026e6c0000010001 57b78000000100000003000305736d7470310a6e6463686f6c64696e67026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c03100010001000151800004c1ad573dc04300010001000151800004c1ad573ec05500010001000151800004d5880089 33522 9b390000000100000000000005736d7470310a6e6463686f6c64696e67026e6c00001c0001 9b398000000100000003000305736d7470310a6e6463686f6c64696e67026e6c00001c0001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c03100010001000151800004c1ad573dc04300010001000151800004c1ad573ec05500010001000151800004d5880089 33523 c88200000001000000000000036e73310a6e6463686f6c64696e67026e6c00001c0001 c88280000001000000030003036e73310a6e6463686f6c64696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c1ad573dc03d00010001000151800004c1ad573ec04f00010001000151800004d5880089 33524 6b7000000001000000000000036e73320a6e6463686f6c64696e67026e6c00001c0001 6b7080000001000000030003036e73320a6e6463686f6c64696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02f00010001000151800004c1ad573dc00c00010001000151800004c1ad573ec04f00010001000151800004d5880089 33525 d7cf00000001000000000000036e73330a6e6463686f6c64696e67026e6c00001c0001 d7cf80000001000000030003036e73330a6e6463686f6c64696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f00010001000151800004c1ad573dc04100010001000151800004c1ad573ec00c00010001000151800004d5880089 33526 28040000000100000000000003777777026369026e6c0000010001 28048000000100000002000103777777026369026e6c0000010001c0100002000100015180000b026e73056e69767261c013c0100002000100015180000b026e73026e6c036e657400c02700010001000151800004c3f1892a 33527 020000100001000000000000137265696e6f75642d61647669657367726f6570026e6c00000f0001 020080000001000000020002137265696e6f75642d61647669657367726f6570026e6c00000f0001c00c00020001000151800009026e730369736dc020c00c00020001000151800006036e7332c037c03400010001000151800004d994ab02c04900010001000151800004d994ab03 33528 4b0f00000001000000000000046465766e026e6c0000060001 4b0f84030001000000010000046465766e026e6c0000060001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 33529 61b10000000100000000000010666f746f73747564696f2d696d61676f026e6c026e6c0000060001 61b18403000100000001000010666f746f73747564696f2d696d61676f026e6c026e6c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 33530 4a5200000001000000000000146f7074696d616175746f6d617469736572696e67056e65747461026e6c0000060001 4a5284030001000000010000146f7074696d616175746f6d617469736572696e67056e65747461026e6c0000060001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 33531 4b0f00000001000000000000046465766e026e6c0000060001 4b0f84030001000000010000046465766e026e6c0000060001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 33532 61b10000000100000000000010666f746f73747564696f2d696d61676f026e6c026e6c0000060001 61b18403000100000001000010666f746f73747564696f2d696d61676f026e6c026e6c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 33533 4a5200000001000000000000146f7074696d616175746f6d617469736572696e67056e65747461026e6c0000060001 4a5284030001000000010000146f7074696d616175746f6d617469736572696e67056e65747461026e6c0000060001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 33534 4b0f00000001000000000000046465766e026e6c0000060001 4b0f84030001000000010000046465766e026e6c0000060001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 33535 61b10000000100000000000010666f746f73747564696f2d696d61676f026e6c026e6c0000060001 61b18403000100000001000010666f746f73747564696f2d696d61676f026e6c026e6c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 33536 4a5200000001000000000000146f7074696d616175746f6d617469736572696e67056e65747461026e6c0000060001 4a5284030001000000010000146f7074696d616175746f6d617469736572696e67056e65747461026e6c0000060001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 33537 2de60000000100000000000003777777087772697465326d65026e6c0000010001 2de68000000100000003000203777777087772697465326d65026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 33538 8a49000000010000000000000753544943494f4e026e6c0000020001 8a49840300010000000100000753544943494f4e026e6c0000020001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 33539 1838000000010000000000000a6c6966657374796c6572026e6c00000f0001 1838800000010000000200000a6c6966657374796c6572026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c031 33540 a270000000010000000000000d7365676d656e742d67726f6570026e6c00000f0001 a270800000010000000200020d7365676d656e742d67726f6570026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 33541 b13b00000001000000000000034e5331054d494e455a026e6c0000010001 b13b80000001000000020002034e5331054d494e455a026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004914527e6c038000100010001518000049145270a 33542 87de00000001000000000000034e5332054d494e455a026e6c0000010001 87de80000001000000020002034e5332054d494e455a026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004914527e6c00c000100010001518000049145270a 33543 c3ef00000001000000000000034e5333054d494e455a026e6c0000010001 c3ef80000001000000020002034e5333054d494e455a026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02a00010001000151800004914527e6c03c000100010001518000049145270a 33544 004e000000010000000000000770636e64617461026e6c00000f0001 004e800000010000000200000770636e64617461026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 33545 54ab00000001000000000000024e530743495354524f4e024e4c0000010001 54ab80000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 33546 216b00000001000000000000067669616562740265620761626e616d726f026e6c0000010001 216b80000001000000020002067669616562740265620761626e616d726f026e6c0000010001c0160002000100015180000b0870686f626f733031c016c0160002000100015180000b0870686f626f733032c016c03200010001000151800004a7cac30bc04900010001000151800004a7cac30c 33547 e23000000001000000000000037777770867696761626f656b026e6c0000010001 e23080000001000000020002037777770867696761626f656b026e6c0000010001c0100002000100015180000b036e733104736f6b6fc019c01000020001000151800006036e7332c031c02d0001000100015180000450f2ee91c0440001000100015180000450f2ee9e 33548 dead0000000100000000000004626c6f61026e6c00000f0001 dead8403000100000001000004626c6f61026e6c00000f0001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 33549 37320000000100000000000005646e732d32056c61646f74026e6c0000010001 37328000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33550 5b2e00000001000000000000046e7330310b6379626572616e67656c73026e6c0000010001 5b2e80000001000000030003046e7330310b6379626572616e67656c73026e6c0000010001c0110002000100015180000805646e732d31c011c0110002000100015180000805646e732d32c011c0110002000100015180000805646e732d33c011c03100010001000151800004d4ccf5d3c04500010001000151800004c16d7ad2c05900010001000151800004d5efa50c 33551 44cd00000001000000000000046e7330320b6379626572616e67656c73026e6c0000010001 44cd80000001000000030003046e7330320b6379626572616e67656c73026e6c0000010001c0110002000100015180000805646e732d31c011c0110002000100015180000805646e732d32c011c0110002000100015180000805646e732d33c011c03100010001000151800004d4ccf5d3c04500010001000151800004c16d7ad2c05900010001000151800004d5efa50c 33552 d3c9000000010000000000000762697a7a6e6574026e6c00000f0001 d3c9800000010000000200000762697a7a6e6574026e6c00000f0001c00c00020001000151800010036e7331066a6f6865636f036e657400c00c00020001000151800006036e7332c02c 33553 c7200000000100000000000006696d616765730b70696a706d616368696e65026e6c0000010001 c7208000000100000003000306696d616765730b70696a706d616368696e65026e6c0000010001c0130002000100015180000d036e7331066d7263617368c01fc0130002000100015180000c036e7332053266617374c01fc01300020001000151800006036e7333c050c0330001000100015180000450f7db78c04c000100010001518000043e858122c064000100010001518000045117eb22 33554 e7a3000000010000000000000b67726173697367726f656e026e6c0000010001 e7a3800000010000000200000b67726173697367726f656e026e6c0000010001c00c00020001000151800014026e730b7365727665722d686f6d65036e657400c00c00020001000151800006036e7332c02f 33555 c810000000010000000000000b67726173697367726f656e026e6c0000010001 c810800000010000000200000b67726173697367726f656e026e6c0000010001c00c00020001000151800014026e730b7365727665722d686f6d65036e657400c00c00020001000151800006036e7332c02f 33556 654b0000000100000000000003706c64046b6f6f70026e6c0000010001 654b8000000100000002000003706c64046b6f6f70026e6c0000010001c01000020001000151800018036e73310e6974636f6e737472756374696f6e03636f6d00c01000020001000151800006036e7332c02d 33557 32cf0000000100000000000003777777127468656475746368646976696e677465616d026e6c0000010001 32cf8000000100000003000003777777127468656475746368646976696e677465616d026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c03cc01000020001000151800007046e733033c03c 33558 9a7900000001000000000000037777770d7374656e6465727376726f6567026e6c0000010001 9a7980000001000000020002037777770d7374656e6465727376726f6567026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c01ec0100002000100015180000805726f62696ec039c03200010001000151800004913a1e04c04e00010001000151800004913a1a34 33559 a1a7000000010000000000000377777712766163617475726573696e686f6c6c616e64026e6c0000010001 a1a7800000010000000200020377777712766163617475726573696e686f6c6c616e64026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c023c01000020001000151800006036e7332c03bc03700010001000151800004d5c9e8c8c05700010001000151800004d5c9e8c9 33560 aea30000000100000000000007617262696e74320a7765726b656e726f6465026e6c00001c0001 aea38000000100000002000107617262696e74320a7765726b656e726f6465026e6c00001c0001c0140002000100015180000d026e7307616e74656e6e61c01fc0140002000100015180001306696e666f726d07616e74656e6e6102646b00c03300010001000151800004d995dd13 33561 b7ee000000010000000000000e616d7374657264616d77696e6473026e6c00000f0001 b7ee800000010000000200010e616d7374657264616d77696e6473026e6c00000f0001c00c0002000100015180000e036e733107626c7565646e73c01bc00c00020001000151800006036e7334c033c02f00010001000151800004d5c401c0 33562 f9cd00000001000000000000046d61696c066564706e6574026e6c0000010001 f9cd80000001000000020000046d61696c066564706e6574026e6c0000010001c01100020001000151800010036e7331066564706e6574036e657400c01100020001000151800006036e7332c030 33563 70df00000001000000000000037777770974656c65726f757465026e6c0000010001 70df80000001000000020000037777770974656c65726f757465026e6c0000010001c0100002000100015180000e036e73310461746f73036e657400c01000020001000151800006036e7332c032 33564 682e00000001000000000000044c554e410c44455749542d424f454b454c024e4c0000060001 682e84030001000000010000044c554e410c44455749542d424f454b454c024e4c0000060001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 33565 f04200000001000000000000037777770b76726f75776f6e6c696e65026e6c0000010001 f04280000001000000030000037777770b76726f75776f6e6c696e65026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c034c01000020001000151800006036e7333c034 33566 0c580000000100000000000006636861726973026e6c00000f0001 0c588000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 33567 d2e200000001000000000000026e73076e656473746174026e6c0000010001 d2e280000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 33568 34fc00000001000000000000036e7332076e656473746174026e6c0000010001 34fc80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33569 9a7e00000001000000000000036e7333076e656473746174026e6c0000010001 9a7e80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 33570 e3c200000001000000000000036e7334076e656473746174026e6c0000010001 e3c280000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33571 f1e100000001000000000000036e7334076e656473746174026e6c0000010001 f1e180000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33572 46ad00000001000000000000036e7332076e656473746174026e6c0000010001 46ad80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33573 37a900000001000000000000037777770b6e69636b656c6564656f6e026e6c0000010001 37a984030001000000010000037777770b6e69636b656c6564656f6e026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 33574 050b00000001000000000000037777770b776567656e65726c6f6f70026e6c0000010001 050b84030001000000010000037777770b776567656e65726c6f6f70026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 33575 bd0d0000000100000000000002353002323103323230033139330964796e61626c6f636b07656173796e6574026e6c0000100001 bd0d8000000100000002000202353002323103323230033139330964796e61626c6f636b07656173796e6574026e6c0000100001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 33576 d71700000001000000000000037777770b736f7068696573706f7361026e6c0000010001 d71780000001000000030001037777770b736f7068696573706f7361026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 33577 90310000000100000000000004776f7564026e6c00000f0001 90318000000100000002000204776f7564026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 33578 5ca30000000100000000000003777777026664026e6c0000010001 5ca38000000100000002000003777777026664026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02d 33579 2fc7000000010000000000000b6465676c61737761636874026e6c0000010001 2fc7800000010000000200000b6465676c61737761636874026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c02f 33580 37b300000001000000000000037777770864652d7374617274026e6c0000010001 37b380000001000000020000037777770864652d7374617274026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c032 33581 dc6b00000001000000000000056861696a65026e6c0000010001 dc6b80000001000000020002056861696a65026e6c0000010001c00c0002000100015180000e026e73086475746368636f77c012c00c00020001000151800006036e7332c029c02600010001000151800004d9aa2158c0400001000100015180000452a1510d 33582 00000000600222386cca0000020405b40000 000080010000000000000000 33583 648900000001000000000000036e73330564656d6f6e026e6c00001c0001 648980000001000000030002036e73330564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c03c00010001000151800004c29fb004 33584 629a00000001000000000000036e73320564656d6f6e026e6c00001c0001 629a80000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 33585 8a4a00000001000000000000036e73310564656d6f6e026e6c00001c0001 8a4a80000001000000030002036e73310564656d6f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 33586 9e7d000000010000000000000562736d74700a77656264796e616d6963026e6c0000010001 9e7d800000010000000200020562736d74700a77656264796e616d6963026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c031000100010001518000045054e304c043000100010001518000045054e305 33587 878100000001000000000000026e73056e65726f63026e6c0000010001 878180000001000000020002026e73056e65726f63026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d434010ac03700010001000151800004d434000a 33588 5bfb00000001000000000000036e7332056e65726f63026e6c0000010001 5bfb80000001000000020002036e7332056e65726f63026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d434010ac00c00010001000151800004d434000a 33589 0b0700000001000000000000046d61696c056e65726f63026e6c0000010001 0b0780000001000000020002046d61696c056e65726f63026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02b00010001000151800004d434010ac03c00010001000151800004d434000a 33590 b6fbb85a5010223815210000000000000000 33591 b6fbb85a50182238a12f0000001e88140000000100000000000009766f6f67642d6b6f6b026e6c0000060001 33592 801d000000010000000000000a62757265617562656175026e6c0000010001 801d800000010000000300010a62757265617562656175026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 33593 b6fbb8bc50102238149f0000000000000000 33594 fefa0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 fefa8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33595 b6fbb8bc50112238149e0000000000000000 33596 b6fbb8bd50102238149d0000000000000000 33597 d9ca00000001000000000000033133300331353703323036033230370964796e61626c6f636b05657a6e6574026e6c0000010001 d9ca84030001000000010000033133300331353703323036033230370964796e61626c6f636b05657a6e6574026e6c0000010001c02c00060001000038400036026e730f646f6d61696e2d7265676973747279c02c0a686f73746d6173746572c0430bf1e540000070800000384000278d0000003840 33598 6323000000010000000000000a6f70737465726c616e64026e6c00000f0001 6323800000010000000200000a6f70737465726c616e64026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02e 33599 b14a0000000100000000000006736965646c65026e6c00000f0001 b14a8000000100000002000006736965646c65026e6c00000f0001c00c00020001000151800012036e736108696e666f7061637403636f6d00c00c00020001000151800006036e7362c02b 33600 66db0000000100000000000008737469726c696e67026e6c00000f0001 66db8000000100000002000208737469726c696e67026e6c00000f0001c00c0002000100015180000f036e7331086473646575726e65c015c00c00020001000151800006036e7332c02dc0290001000100015180000452968003c04400010001000151800004d5a0f984 33601 fb6d00000001000000000000037777771662726f656b687569732d737475646965626f656b656e026e6c0000010001 fb6d80000001000000020002037777771662726f656b687569732d737475646965626f656b656e026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c027c01000020001000151800006036e7332c03fc03b0001000100015180000450416028c05600010001000151800004c356780c 33602 09df00000001000000000000037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001 09df80000001000000030003037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 33603 8c3f00000001000000000000037777770b63616e69736975736e6574026e6c0000010001 8c3f84030001000000010000037777770b63616e69736975736e6574026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 33604 9fa500000001000000000000057261736f63026e6c00000f0001 9fa580000001000000020002057261736f63026e6c00000f0001c00c00020001000151800014036e73310d696e7465726e657473686f7073c012c00c00020001000151800006036e7332c02ac026000100010001518000043e94a1efc046000100010001518000043e94a1f0 33605 3de2000000010000000000000966616c6c6261636b31086473646575726e65026e6c00001c0001 3de2800000010000000200020966616c6c6261636b31086473646575726e65026e6c00001c0001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c0330001000100015180000452968003c04500010001000151800004d5a0f984 33606 1433000000010000000000000966616c6c6261636b31086473646575726e65026e6c0000260001 1433800000010000000200020966616c6c6261636b31086473646575726e65026e6c0000260001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c0330001000100015180000452968003c04500010001000151800004d5a0f984 33607 beb10000000100000000000003777777096f656b656c73626f73026e6c0000010001 beb18000000100000003000103777777096f656b656c73626f73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 33608 dc22000000010000000000000f6a6f72726974736d612d67726f6570026e6c0000ff0001 dc22800000010000000200020f6a6f72726974736d612d67726f6570026e6c0000ff0001c00c00020001000151800009036e7331026973c01cc00c00020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 33609 bded00000001000000000000066469616c696e05616c6c7061026e6c0000010001 bded80000001000000020002066469616c696e05616c6c7061026e6c0000010001c01300020001000151800012026e730c696e746572636f6e6e656374c019c01300020001000151800006036e7332c030c02d00010001000151800004d453c005c04b00010001000151800004d453c006 33610 1f1f00000001000000000000037777770872756e346c696665026e6c0000010001 1f1f80000001000000020001037777770872756e346c696665026e6c0000010001c01000020001000151800013036e73310c64656c7461686f7374696e67c019c01000020001000151800006036e7333c031c02d00010001000151800004d973c096 33611 0000000060022238dfe20000020405b40000 000080010000000000000000 33612 02a5000000010000000000000377777707766f732d617069026e6c0000010001 02a5800000010000000200020377777707766f732d617069026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c018c0100002000100015180001004646e733208636f6e6365707473c018c02c00010001000151800004d5c51c03c04900010001000151800004d5c51e1c 33613 1b2000000001000000000000046d61696c0365706f026e6c0000010001 1b2080000001000000020001046d61696c0365706f026e6c0000010001c011000200010001518000070467617465c011c0110002000100015180000b026e73026e6c036e657400c0290001000100015180000491408003 33614 9eb700000001000000000000026d78026973026e6c0000010001 9eb780000001000000020002026d78026973026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc02600010001000151800004d5852102c03800010001000151800004d5c41503 33615 b6fc71d950102238ceb90000000000000000 b6fcf1d40000000000000000 33616 b6fc71d950182238f94a0000002502290000000100000000000010766974616c6974656974736b756e6465026e6c0000060001 b6fcf1d40000000000000000 33617 37c3000000010000000000000377777703727464026e6c0000010001 37c3800000010000000200000377777703727464026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 33618 5f66000000010000000000000b68616e64626f656b626570026e6c0000010001 5f66800000010000000200020b68616e64626f656b626570026e6c0000010001c00c00020001000151800010026e730a7a65656c616e646e6574c018c00c00020001000151800006036e7332c02fc02c00010001000151800004d473c0c1c04800010001000151800004d473c0c3 33619 b6fc724d50102238ce1e0000000000000000 b6fcf2440000000000000000 33620 b6fc724d50112238ce1d0000000000000000 b6fcf2440000000000000000 33621 b6fc724e50102238ce1c0000000000000000 b6fcf2440000000000000000 33622 7b2b00000001000000000000037777770c7365656473696e7370656365026e6c0000010001 7b2b84030001000000010000037777770c7365656473696e7370656365026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 33623 97c30000000100000000000003777777126269626c696f6e657467726f6e696e67656e026e6c0000010001 97c38000000100000002000003777777126269626c696f6e657467726f6e696e67656e026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c03d 33624 0cec00000001000000000000036e7332076e656473746174026e6c0000010001 0cec80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33625 8d3a00000001000000000000077375726b73756d06787334616c6c026e6c0000010001 8d3a80000001000000030002077375726b73756d06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 33626 df6700000001000000000000026e7306787334616c6c026e6c0000010001 df6780000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 33627 080900000001000000000000036e733206787334616c6c026e6c0000010001 080980000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 33628 cc2d00000001000000000000037777770d73746174656f66746865617274026e6c0000010001 cc2d80000001000000030000037777770d73746174656f66746865617274026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c037c01000020001000151800007046e733033c037 33629 e5db00000001000000000000037777770f73746572656c656b74726f746f6572026e6c0000010001 e5db80000001000000020002037777770f73746572656c656b74726f746f6572026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec020c01000020001000151800006036e7332c038c03400010001000151800004c29f4906c04c00010001000151800004c29fb004 33630 5da200000001000000000000026e7303617a72026e6c0000010001 5da280000001000000030003026e7303617a72026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c013c00c000100010001518000049c53fc99c035000100010001518000049c53fcfdc04700010001000151800004c0576a65 33631 756d000000010000000000000377777703726166026e6c0000010001 756d800000010000000200020377777703726166026e6c0000010001c0100002000100015180000c036e73310563736e6574c014c01000020001000151800006036e7332c02cc02800010001000151800004c2451012c04000010001000151800004c2451212 33632 09920010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 09928000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 33633 e91800000001000000000000026e7303617a72026e6c0000260001 e91880000001000000030003026e7303617a72026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c013c00c000100010001518000049c53fc99c035000100010001518000049c53fcfdc04700010001000151800004c0576a65 33634 1dd6000000010000000000000b6d61696c6261636b7570310964656c74612d7a6c64026e6c0000010001 1dd6800000010000000200010b6d61696c6261636b7570310964656c74612d7a6c64026e6c0000010001c01800020001000151800010026e730a7a65656c616e646e6574c022c0180002000100015180000b026e73026e6c036e657400c03600010001000151800004d473c0c1 33635 664e000000010000000000000b6d61696c6261636b7570310964656c74612d7a6c64026e6c00001c0001 664e800000010000000200010b6d61696c6261636b7570310964656c74612d7a6c64026e6c00001c0001c01800020001000151800010026e730a7a65656c616e646e6574c022c0180002000100015180000b026e73026e6c036e657400c03600010001000151800004d473c0c1 33636 6df600000001000000000000026e730f444f4d41494e2d5245474953545259024e4c00001c0001 6df680000001000000030002026e730f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33637 bdb0000000010000000000000b6d61696c6261636b7570310964656c74612d7a6c64026e6c0000260001 bdb0800000010000000200010b6d61696c6261636b7570310964656c74612d7a6c64026e6c0000260001c01800020001000151800010026e730a7a65656c616e646e6574c022c0180002000100015180000b026e73026e6c036e657400c03600010001000151800004d473c0c1 33638 00a800000001000000000000046d61696c0964656c74612d7a6c64026e6c0000010001 00a880000001000000020001046d61696c0964656c74612d7a6c64026e6c0000010001c01100020001000151800010026e730a7a65656c616e646e6574c01bc0110002000100015180000b026e73026e6c036e657400c02f00010001000151800004d473c0c1 33639 138c00000001000000000000046d61696c0964656c74612d7a6c64026e6c00001c0001 138c80000001000000020001046d61696c0964656c74612d7a6c64026e6c00001c0001c01100020001000151800010026e730a7a65656c616e646e6574c01bc0110002000100015180000b026e73026e6c036e657400c02f00010001000151800004d473c0c1 33640 d89800000001000000000000046d61696c0964656c74612d7a6c64026e6c0000260001 d89880000001000000020001046d61696c0964656c74612d7a6c64026e6c0000260001c01100020001000151800010026e730a7a65656c616e646e6574c01bc0110002000100015180000b026e73026e6c036e657400c02f00010001000151800004d473c0c1 33641 44bd00000001000000000000036e73320f444f4d41494e2d5245474953545259024e4c00001c0001 44bd80000001000000030002036e73320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33642 69f9000000010000000000000377777703636962026e6c0000010001 69f9800000010000000200000377777703636962026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c02c 33643 0ced00000001000000000000036e7334076e656473746174026e6c0000010001 0ced80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 33644 078300000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 078380000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33645 054700000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 054780000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33646 4a8b00000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 4a8b80000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33647 a770000000010000000000000b636f6f6c616768616d6172026e6c0000010001 a770800000010000000200000b636f6f6c616768616d6172026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c018c00c0002000100015180000704686e7331c031 33648 cd6a00000001000000000000026763065f6d736463730274610f746f6e65656c616d7374657264616d026e6c0000060001 cd6a84030001000000010000026763065f6d736463730274610f746f6e65656c616d7374657264616d026e6c0000060001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 33649 bb190000000100000000000003626c3402626c06787334616c6c026e6c0000010001 bb198000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33650 168f0000000100000000000003626c3402626c06787334616c6c026e6c00001c0001 168f8000000100000003000203626c3402626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33651 f300000000010000000000000377777708756e69656b61646f026e6c0000010001 f300800000010000000200010377777708756e69656b61646f026e6c0000010001c0100002000100015180000c036e733405736974726fc019c01000020001000151800006036e7335c031c045000100010001518000043ed44d88 33652 a9ec00000001000000000000037777770973657865696c616e64026e6c0000010001 a9ec80000001000000020000037777770973657865696c616e64026e6c0000010001c01000020001000151800010036e7331067765622d6276036e657400c01000020001000151800006036e7332c032 33653 353100000001000000000000026e73076e656473746174026e6c0000010001 353180000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 33654 1c8b00000001000000000000036e7331096e65746e6174696f6e026e6c0000010001 1c8b80000001000000020002036e7331096e65746e6174696f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efb105c03c00010001000151800004505faa0a 33655 396c00000001000000000000036e7332096e65746e6174696f6e026e6c0000010001 396c80000001000000020002036e7332096e65746e6174696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5efb105c00c00010001000151800004505faa0a 33656 894300000001000000000000026e73036e6274026e6c0000010001 894380000001000000020001026e73036e6274026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ac5882 33657 353200000001000000000000036e7333076e656473746174026e6c0000010001 353280000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 33658 d94400000001000000000000037777770b6172626f2d616476696573026e6c0000010001 d94480000001000000020000037777770b6172626f2d616476696573026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 33659 025700000001000000000000127769656c657273706f72746c69657273656e026e6c0000ff0001 025780000001000000020000127769656c657273706f72746c69657273656e026e6c0000ff0001c00c00020001000151800017036e73310d6465696e7465726e65746d616e036e657400c00c00020001000151800006036e7332c037 33660 fc09000000010000000000000865787472616e6574056569666665026e6c0000010001 fc09840300010000000100000865787472616e6574056569666665026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 33661 fdab0000000100000000000008717569636b6e6574026e6c00000f0001 fdab8000000100000003000208717569636b6e6574026e6c00000f0001c00c00020001000151800011036e73310a6d756c74696b6162656cc015c00c00020001000151800006036e7332c02dc00c00020001000151800014036e73300a6d756c74696b6162656c036e657400c0290001000100015180000450f2e002c0460001000100015180000450f2e006 33662 092b00000001000000000000036e7331023161026e6c0000010001 092b80000001000000020002036e7331023161026e6c0000010001c0100002000100015180000e036e7331076970746f776572c013c01000020001000151800006036e7332c02bc027000100010001518000043ecc4065c041000100010001518000043ecc4066 33663 b93328000001000000010000026e6c0000060001026763065f6d736463730274610f746f6e65656c616d7374657264616d026e6c0000010001000002580004c0a8000b b933a8040000000000000000 33664 5cd200000001000000000000036e7332023161026e6c0000010001 5cd280000001000000020002036e7332023161026e6c0000010001c0100002000100015180000e036e7331076970746f776572c013c01000020001000151800006036e7332c02bc027000100010001518000043ecc4065c041000100010001518000043ecc4066 33665 4b7500000001000000000000046d61696c0373756b026e6c0000010001 4b7580000001000000020000046d61696c0373756b026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c02f 33666 c86400000001000000000000046d61696c0373756b026e6c00001c0001 c86480000001000000020000046d61696c0373756b026e6c00001c0001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c02f 33667 59570000000100000000000003777777146465686161736175746f6d6174657269616c656e026e6c0000010001 59578000000100000002000103777777146465686161736175746f6d6174657269616c656e026e6c0000010001c0100002000100015180000e036e733107736368726f6572c025c01000020001000151800006036e7332c03dc03900010001000151800004d468c9c4 33668 0000000070024000b9a300000204059801010402 000080010000000000000000 33669 fdb20000000100000000000003626c3102626c06787334616c6c026e6c0000010001 fdb28000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33670 b6fe92d65010432099460000000000000000 33671 d4b300000001000000000000037777770a616d617a6f6e63617273026e6c0000010001 d4b380000001000000020000037777770a616d617a6f6e63617273026e6c0000010001c0100002000100015180000c026e7306766576696461c01bc01000020001000151800006036e7332c032 33672 816c0000000100000000000004776f7564026e6c00000f0001 816c8000000100000002000204776f7564026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 33673 b6fe92d6501843209c2f000000851640000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8db403c4a5b0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000 33674 000000007002fc0094110000020405b401010402 000080010000000000000000 33675 b6fe92e45011431298be0000000000000000 33676 000000007002400067be00000204059801010402 000080010000000000000000 33677 bbab000000010000000000000a7472616e736d65646961026e6c00000f0001 bbab800000010000000200010a7472616e736d65646961026e6c00000f0001c00c0002000100015180000d026e7307616d6572636f6dc017c00c0002000100015180000b026e73026e6c036e657400c02b00010001000151800004c2b2b20a 33678 fed200000001000000000000036e733404686f6d65026e6c0000010001 fed280000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 33679 000000006002223858200000020405b40000 000080010000000000000000 33680 d73600000001000000000000036e733503777873026e6c0000010001 d73680000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 33681 ff0d00000001000000000000077777772d32363907736974652d6964026e6c0000010001 ff0d80000001000000030000077777772d32363907736974652d6964026e6c0000010001c01400020001000151800012036e733108626c7565646f6d65036e657400c01400020001000151800006036e7332c034c01400020001000151800006036e7333c034 33682 b6fe92e55010431298bd0000000000000000 33683 feba00000001000000000000026e730570626e6563026e6c0000010001 feba80000001000000020001026e730570626e6563026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c14e8f42 33684 5e50000000010000000000000e7265616c776f726c64636172676f026e6c0000010001 5e50800000010000000200020e7265616c776f726c64636172676f026e6c0000010001c00c0002000100015180001004646e73310869636f6d70616e79c01bc00c0002000100015180000704646e7332c034c02f000100010001518000043e3a890ac04b000100010001518000043e3a890b 33685 b70041ea50104320984b0000000000000000 b700c1e40000000000000000 33686 b701101d50102238a8ae0000000000000000 b70190140000000000000000 33687 b701101d50182238b793000000291b200000000100000000000014636f6d707574657272657061697263656e746572026e6c0000060001 b70190140000000000000000 33688 01400000000100000000000009652d6c756e61746963026e6c0000010001 01408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33689 b70041ea50184320f17400000085c100000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8db403c4a5b0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000 b700c1e40000000000000000 33690 b6ff4e015010fc00bbc40000000000000000 b6ffce040000000000000000 33691 b6ff4e015004fc00bbd00000000000000000 b6ffce040000000000000000 33692 b701108a50102238a8160000000000000000 b70190840000000000000000 33693 b701108a50112238a8150000000000000000 b70190840000000000000000 33694 b701108b50102238a8140000000000000000 b70190840000000000000000 33695 b70041f85011431297c30000000000000000 b700c1f40000000000000000 33696 564100000001000000000000066e74646830390673656e746572026e6c0000010001 564180000001000000020002066e74646830390673656e746572026e6c0000010001c0130002000100015180000c036e7331056d696e657ac01ac01300020001000151800006036e7332c032c02e00010001000151800004914527e6c046000100010001518000049145270a 33697 00000000700240009fb600000204059801010402 000080010000000000000000 33698 c37a000000010000000000000377777704626f6b74026e6c0000010001 c37a800000010000000200020377777704626f6b74026e6c0000010001c0100002000100015180000e036e73310769736973776562c015c01000020001000151800006036e7334c02dc02900010001000151800004d4ccca65c04300010001000151800004510440fa 33699 f3a400000001000000000000037777770f6b6164696a6b2d6c65656e73747261026e6c0000010001 f3a480000001000000020000037777770f6b6164696a6b2d6c65656e73747261026e6c0000010001c0100002000100015180001905646e7330310d636f6d70726173657276657273036e657400c0100002000100015180000805646e733032c03a 33700 b70041f95010431297c20000000000000000 b700c1f40000000000000000 33701 b7018bc85010432086640000000000000000 33702 b7018bc8501843202e0e000000857280000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004903677373096d6963726f736f667403636f6d00403af8db403c4a5b0003000000264e544c4d535350000100000097b200e0030003002300000003000300200000004653345441300000 33703 c7110000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c7118000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33704 dc5c000000010000000000000377777713626f757761647669657364656e68656c646572026e6c0000010001 dc5c800000010000000200010377777713626f757761647669657364656e68656c646572026e6c0000010001c0100002000100015180000d036e733106776964657873c024c01000020001000151800010036e733206776964657873036e657400c03800010001000151800004d4ccc0fc 33705 5675000000010000000000000377777709686f6c6c79776f7564026e6c0000010001 5675800000010000000300010377777709686f6c6c79776f7564026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 33706 d20700000001000000000000037777770b707a616e6462657267656e026e6c0000010001 d20780000001000000020000037777770b707a616e6462657267656e026e6c0000010001c0100002000100015180000c026e7306766576696461c01cc01000020001000151800006036e7332c033 33707 b7018bd65011431285dc0000000000000000 33708 e0e30000000100000000000003777777056d65746f73026e6c0000010001 e0e38000000100000002000003777777056d65746f73026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c016c0100002000100015180000704686e7331c02f 33709 65ca000000010000000000000866696c6167656e74026e6c00000f0001 65ca800000010000000200020866696c6167656e74026e6c00000f0001c00c00020001000151800012036e73310b696e7465727374726f6f6dc015c00c00020001000151800006036e7332c02dc0290001000100015180000450558121c04700010001000151800004d58141c4 33710 000000006002223866280000020405b40000 000080010000000000000000 33711 b7018bd75010431285db0000000000000000 33712 b7020e2c50102238b8a60000000000000000 b7028e240000000000000000 33713 b7020e2c50182238cf5c000000253225000000010000000000001065766f6c7574696f6e2d64657369676e026e6c0000060001 b7028e240000000000000000 33714 27e90000000100000000000003777777086c65747373746174026e6c0000010001 27e98000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 33715 34870000000100000000000009776562776572656c64026e6c00000f0001 34878000000100000003000309776562776572656c64026e6c00000f0001c00c0002000100015180000a036e733103696467c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a0001000100015180000451af4646c0400001000100015180000451af4647c05200010001000151800004d5a0fde6 33716 414a000000010000000000000749435454455354026e6c0000060001 414a840300010000000100000749435454455354026e6c0000060001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 33717 b7020e9550102238b8160000000000000000 b7028e940000000000000000 33718 b7020e9550112238b8150000000000000000 b7028e940000000000000000 33719 62c8000000010000000000000c53544556454d434144414d53026e6c0000020001 62c8840300010000000100000c53544556454d434144414d53026e6c0000020001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 33720 b7020e9650102238b8140000000000000000 b7028e940000000000000000 33721 3551000000010000000000000377777703637062026e6c0000010001 3551800000010000000300030377777703637062026e6c0000010001c0100002000100015180000805616c657068c010c0100002000100015180000906616261637573c010c0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004c0688c02c03c00010001000151800004c0688c04c05100010001000151800004c0576a65 33722 88b300000001000000000000037777770a626572746465626f6572026e6c0000010001 88b380000001000000020000037777770a626572746465626f6572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01bc0100002000100015180000704686e7331c034 33723 fc9c00000001000000000000037777770d736f6570656c6265776567656e026e6c0000010001 fc9c80000001000000020001037777770d736f6570656c6265776567656e026e6c0000010001c01000020001000151800012026e730c726967687476697375616c73c01ec01000020001000151800011036e7331076379736f6e657403636f6d00c03200010001000151800004d9aa0226 33724 a97600000001000000000000037777770d66696e616c66616e7461737978026e6c0000010001 a97680000001000000020002037777770d66696e616c66616e7461737978026e6c0000010001c0100002000100015180000a036e7331036e7873c01ec01000020001000151800006036e7332c036c03200010001000151800004d973c015c04800010001000151800004d973c102 33725 db9b0000000100000000000003706f700b666f726576657273686f70026e6c0000010001 db9b8000000100000003000203706f700b666f726576657273686f70026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 33726 ebca00000001000000000000036e733203757063026e6c0000010001 ebca80000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 33727 057e00000001000000000000036e733203757063026e6c00001c0001 057e80000001000000030003036e733203757063026e6c00001c0001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 33728 78860010000100000000000003796663026e6c00000f0001 78868000000100000002000003796663026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c027 33729 a14d00000001000000000000037777770a66632d75747265636874026e6c0000010001 a14d80000001000000020000037777770a66632d75747265636874026e6c0000010001c0100002000100015180000f036e73310571666c6578036e657400c01000020001000151800006036e7333c033 33730 cb8e0000000100000000000003616473096b6f6f706b72616e74026e6c0000010001 cb8e8000000100000002000003616473096b6f6f706b72616e74026e6c0000010001c0100002000100015180000f036e733306616d6575726f02646500c01000020001000151800010036e733106616d6575726f036e657400 33731 fb50000000010000000000000377777706747265626c65026e6c0000010001 fb50800000010000000200000377777706747265626c65026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c02e 33732 29d40000000100000000000009652d6c756e61746963026e6c0000010001 29d48000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33733 e7620000000100000000000008636c756273657879026e6c00000f0001 e7628000000100000002000008636c756273657879026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02c 33734 96bb0000000100000000000003777777116372657363656e742d776f6e696e67656e026e6c0000010001 96bb8000000100000002000203777777116372657363656e742d776f6e696e67656e026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c022c01000020001000151800006036e7332c039c03600010001000151800004d453c005c05400010001000151800004d453c006 33735 397000000001000000000000067669616562740265620761626e616d726f026e6c0000010001 397080000001000000020002067669616562740265620761626e616d726f026e6c0000010001c0160002000100015180000b0870686f626f733031c016c0160002000100015180000b0870686f626f733032c016c03200010001000151800004a7cac30bc04900010001000151800004a7cac30c 33736 42b60000000100000000000003777777026e75026e6c0000010001 42b68000000100000003000303777777026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c027000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 33737 e93800000001000000000000036d783102686e026e6c0000010001 e93880000001000000020000036d783102686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02b 33738 3c6a00000001000000000000036e733304686f6d65026e6c0000010001 3c6a80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 33739 60af00000001000000000000037777770a6164756c746c696e6b73026e6c0000010001 60af80000001000000020000037777770a6164756c746c696e6b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 33740 37040000000100000000000008686f73746e616d650462696e640000100003 37048000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 33741 267b000000010000000000000377777708737572666b696473026e6c0000010001 267b800000010000000200020377777708737572666b696473026e6c0000010001c0100002000100015180000e036e733107776172706e6574c019c01000020001000151800006036e7332c031c02d00010001000151800004c323b01ec04700010001000151800004c323b01f 33742 b0060000000100000000000003626c3102626c06787334616c6c026e6c0000010001 b0068000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 33743 83a9000000010000000000000c6f72616e6a652d626c617577026e6c00000f0001 83a9800000010000000200020c6f72616e6a652d626c617577026e6c00000f0001c00c00020001000151800015036e73310e62656c6c656e656e77696e6e656ec019c00c00020001000151800006036e7332c031c02d00010001000151800004d994a844c04e00010001000151800004d994a845 33744 11e8000000010000000000000562736d7470096e6c686f7374696e67026e6c0000010001 11e8800000010000000200000562736d7470096e6c686f7374696e67026e6c0000010001c01200020001000151800012026e73096e6c686f7374696e67036e657400c01200020001000151800006036e7331c033 33745 6ac3000000010000000000000562736d7470096e6c686f7374696e67026e6c00001c0001 6ac3800000010000000200000562736d7470096e6c686f7374696e67026e6c00001c0001c01200020001000151800012026e73096e6c686f7374696e67036e657400c01200020001000151800006036e7331c033 33746 30f2000000010000000000000562736d7470096e6c686f7374696e67026e6c0000260001 30f2800000010000000200000562736d7470096e6c686f7374696e67026e6c0000260001c01200020001000151800012026e73096e6c686f7374696e67036e657400c01200020001000151800006036e7331c033 33747 0267000000010000000000000a652d6c6561726e696e670473757266026e6c0000010001 0267800000010000000300030a652d6c6561726e696e670473757266026e6c0000010001c0170002000100015180000f036e7331086d6f746966616374c01cc01700020001000151800006036e7332c034c0170002000100015180000e036e733207737572666e6574c01cc03000010001000151800004d44ebd9dc04b00010001000151800004d44ebd9ec05d00010001000151800004c0572402 33748 12f400000001000000000000087370656369616c7305696e646573026e6c0000010001 12f480000001000000020002087370656369616c7305696e646573026e6c0000010001c0150002000100015180000d036e73310663617374656cc01bc01500020001000151800006036e7332c033c02f00010001000151800004c3558244c04800010001000151800004c3558245 33749 00520000000100000000000003777777056566616374026e6c0000010001 00528000000100000002000203777777056566616374026e6c0000010001c0100002000100015180000a036e7331036e7873c016c01000020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 33750 178d28000001000000020000026e6c00000600012464363465636630372d353837642d346437622d386166362d663762346265616163303961065f6d73646373087669616475746368026e6c00000500ff000000000000c0140005000100000258001406736572766572087669616475746368026e6c00 178da8040000000000000000 33751 d3360000000100000000000003313330033132300231300232340964796e61626c6f636b07656173796e6574026e6c0000100001 d3368000000100000002000203313330033132300231300232340964796e61626c6f636b07656173796e6574026e6c0000100001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 33752 855900000001000000000000037777770c6a616d6573626f6e64303037026e6c0000010001 855980000001000000020000037777770c6a616d6573626f6e64303037026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 33753 1ed40000000100000000000007766462636f6d70026e6c00001c0001 1ed48000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 33754 573d00000001000000000000037777770d61727473616e64637261667473026e6c0000010001 573d80000001000000030001037777770d61727473616e64637261667473026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ec01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c050c032000100010001518000043efa0202 33755 000000007002400090c60000020405b401010402 000080010000000000000000 33756 b70494e8501044706d1d0000000000000000 33757 2f8400000001000000000000026e73077374616e6e6574026e6c0000010001 2f8480000001000000020002026e73077374616e6e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5852414c03900010001000151800004d5852418 33758 b70494e8501844709bfe0000008b7900000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0322403c54a200030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000 33759 b3cb000000010000000000000d6c6176616c6c65657665727465026e6c0000010001 b3cb800000010000000200020d6c6176616c6c65657665727465026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 33760 6aeb0000000100000000000007676173756e6965026e6c0000ff0001 6aeb8000000100000002000007676173756e6965026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 33761 a22b0000000100000000000003706f7008767575727765726b026e6c0000010001 a22b8000000100000003000103706f7008767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 33762 b70494f6501144626c8f0000000000000000 33763 85fc00000001000000000000036e733306696e61646765026e6c0000010001 85fc80000001000000020001036e733306696e61646765026e6c0000010001c01000020001000151800002c00cc01000020001000151800012036e7337087a6f6e656564697403636f6d00c00c00010001000151800004d9164114 33764 000000007002400004750000020405b401010402 000080010000000000000000 33765 b70494f7501044626c8e0000000000000000 33766 84b500000001000000000000027777116361726e6176616c737469636874696e67026e6c0000010001 84b584030001000000010000027777116361726e6176616c737469636874696e67026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 33767 23a500000001000000000000036e73330767617574656e67026e6c0000010001 23a580000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33768 23a600000001000000000000036e73340767617574656e67026e6c0000010001 23a680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33769 b705694f501044700c640000000000000000 b705e9440000000000000000 33770 b705694f5018447094460000008b2100000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0322403c54a200030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000 b705e9440000000000000000 33771 5c6c00000001000000000000036e73330873797374656d6563026e6c0000010001 5c6c80000001000000030002036e73330873797374656d6563026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800006036e7332c010c02d00010001000151800004c2e5a402c05500010001000151800004c2e5a404 33772 b705695d501144620bd60000000000000000 b705e9540000000000000000 33773 000000007002400017e90000020405b401010402 000080010000000000000000 33774 b705695e501044620bd50000000000000000 b705e9540000000000000000 33775 b7061c44501044706ce20000000000000000 b7069c440000000000000000 33776 a38600000001000000000000037777770e6b6f7274696e677377696e6b656c026e6c0000010001 a38680000001000000020002037777770e6b6f7274696e677377696e6b656c026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c01fc01000020001000151800006036e7332c036c03300010001000151800004d9aa2042c04c00010001000151800004d9aa2c06 33777 c595000000010000000000000377777705626576726f026e6c0000010001 c595800000010000000200000377777705626576726f026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c016c0100002000100015180000704686e7331c02f 33778 81850000000100000000000003777777053568617274026e6c0000010001 81858000000100000002000003777777053568617274026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c02f 33779 b7061c4450184470b6c40000008b5f00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0322403c54a200030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000 b7069c440000000000000000 33780 b7061c52501144626c540000000000000000 b7069c540000000000000000 33781 c2ba00000001000000000000037777770a6a6f7376616e6c616172026e6c0000010001 c2ba80000001000000020000037777770a6a6f7376616e6c616172026e6c0000010001c0100002000100015180000d046e656f7303686b6e02646500c01000020001000151800010046e656f73056e636f7265036e657400 33782 bd5200000001000000000000037777770b73746172746e6174696f6e026e6c0000010001 bd5280000001000000020000037777770b73746172746e6174696f6e026e6c0000010001c01000020001000151800010036e733106686f73747335036e657400c01000020001000151800006036e7332c034 33783 b7061c53501044626c530000000000000000 b7069c540000000000000000 33784 76af000000010000000000000462617261026e6c0000ff0001 76af800000010000000200020462617261026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 33785 bf3a00100001000000000001036e733103757063026e6c00000100010000290800000000000000 bf3a80000001000000030004036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 33786 efd400100001000000000001036e733103757063026e6c00002600010000290800000000000000 efd480000001000000030004036e733103757063026e6c0000260001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 33787 77ea00100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000000000000 77ea80000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 33788 3bf500100001000000000001046e733032066368656c6c6f026e6c00002600010000290800000000000000 3bf580000001000000030004046e733032066368656c6c6f026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 33789 015600000001000000000000037777770974656c656772616166026e6c0000010001 015680000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 33790 7a8e00000001000000000000037777770667677a6e6574026e6c0000010001 7a8e80000001000000020002037777770667677a6e6574026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 33791 8ca1000000010000000000000b61726d6164616d75736963026e6c0000010001 8ca1800000010000000200020b61726d6164616d75736963026e6c0000010001c00c0002000100015180000f056d69616d69066f6e65646576c018c00c0002000100015180000a076e6577796f726bc032c02c00010001000151800004d5ef8255c04700010001000151800004d5ef82eb 33792 59640000000100000000000008636f6d626174656c026e6c00000f0001 59648000000100000002000008636f6d626174656c026e6c00000f0001c00c00020001000151800013036e73310c696d70726573736976657873c015c00c00020001000151800006036e7332c02d 33793 3cf40000000100000000000006626f782d303508667265656d61696c026e6c0000010001 3cf48000000100000003000206626f782d303508667265656d61696c026e6c0000010001c0130002000100015180000f04616e73310774697363616c69c01cc0130002000100015180000704616e7332c035c0130002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 33794 75cd0000000100000000000003777777046c657761026e6c0000010001 75cd8000000100000002000203777777046c657761026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c029000100010001518000043e320c64c03a000100010001518000043e64366a 33795 8fda00000001000000000000036e733203757063026e6c0000010001 8fda80000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 33796 d45a01000001000000000000046d61696c0864696f6d65646573026e6c00001c0001 d45a81000001000000030002046d61696c0864696f6d65646573026e6c00001c0001c0110002000100015180000d036e733106776964657873c01ac01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 33797 298c0000000100000000000006737461746963076d616368696e6507667265656c6572026e6c0000010001 298c8000000100000002000006737461746963076d616368696e6507667265656c6572026e6c0000010001c01b000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c01b0002000100015180000e0b65766973702d6e732d3032c043 33798 23a800000001000000000000036e73330767617574656e67026e6c0000010001 23a880000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33799 23a900000001000000000000036e73340767617574656e67026e6c0000010001 23a980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33800 68f9000000010000000000000377777708736d73626f617264026e6c0000010001 68f9800000010000000300030377777708736d73626f617264026e6c0000010001c01000020001000151800011036e73310a74727565736572766572c019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004d5ef8003c04a00010001000151800004d5efb004c05c00010001000151800004d5ef8005 33801 559500000001000000000000067873657276650a79656c6c6f776d696e64026e6c0000010001 559580000001000000030003067873657276650a79656c6c6f776d696e64026e6c0000010001c0130002000100015180000e026e7308736e696a64657273c01ec01300020001000151800005026e73c013c01300020001000151800006036e7332c013c03200010001000151800004c2e59918c04c00010001000151800004c2e59926c05d000100010001518000043e5dc28e 33802 726428000001000000010000026e6c0000060001055f6c646170045f746370026463065f6d736463730a706f6d706f656e2d6d6d026e6c00002100010000025800200000006401850a706f6d706f656d2d6d6d0a706f6d706f656e2d6d6d026e6c00 7264a8040000000000000000 33803 f3a800000001000000000000026e73097761766566726f6e74026e6c0000010001 f3a880000001000000020002026e73097761766566726f6e74026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000f036e7331086e6f766178657373c019c00c00010001000151800004d5c9951ac03b00010001000151800004d5c98015 33804 000000007002faf0117200000204057a01010402 000080010000000000000000 33805 2e3600000001000000000000036e733103757063026e6c0000010001 2e3680000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 33806 09de0000000100000000000003777777077768656b616d70026e6c0000010001 09de8000000100000002000003777777077768656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 33807 4b9700000001000000000000036e733103757063026e6c0000260001 4b9780000001000000030003036e733103757063026e6c0000260001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 33808 859500000001000000000000026e7303616d730874656c6567617465026e6c0000010001 859580000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 33809 d49d00000001000000000000046e733032066368656c6c6f026e6c0000010001 d49d80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 33810 b706a5135010fbece0d50000000000000000 33811 b706a5135018fbec03ff00000093d84c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9eb403c4b6b0003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000 33812 61ac0000000100000000000008686179732d687073026e6c0000010001 61ac8000000100000002000008686179732d687073026e6c0000010001c00c00020001000151800012036e73310871346d617469637303636f6d00c00c00020001000151800006036e7332c02d 33813 566100000001000000000000046e733032066368656c6c6f026e6c0000260001 566180000001000000030003046e733032066368656c6c6f026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 33814 151b000000010000000000000977696c6c65626f6973026e6c00000f0001 151b800000010000000200000977696c6c65626f6973026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c02d 33815 b706a5215011fbdee03f0000000000000000 33816 000000007002faf0127e00000204057a01010402 000080010000000000000000 33817 d564000000010000000000000a6265746572686f72656e026e6c0000010001 d564800000010000000200010a6265746572686f72656e026e6c0000010001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c017c04400010001000151800004c2860043 33818 b706a5225010fbdee03e0000000000000000 33819 953b0010000100000000000104696c7365026e6c0000ff00010000290800000000000000 953b8000000100000003000404696c7365026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc025000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a2840000291000000000000000 33820 77e8000000010000000000000463697461026e6c0000010001 77e8800000010000000200020463697461026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 33821 b70783b25010fbec03420000000000000000 33822 19bb00000001000000000000037777770a736d73766f657462616c026e6c0000010001 19bb80000001000000020002037777770a736d73766f657462616c026e6c0000010001c0100002000100015180000a04646e7330026975c01bc0100002000100015180000704646e7331c034c02f00010001000151800004d91a7002c04500010001000151800004d91a7103 33823 0577000000010000000000000a686f6f7273747564696f026e6c0000010001 0577800000010000000200020a686f6f7273747564696f026e6c0000010001c00c0002000100015180000d036e733106796f72697465c017c00c00020001000151800006036e7332c02fc02b0001000100015180000451047320c0440001000100015180000451047321 33824 b70783b25018fbec7344000000938c74000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9eb403c4b6b0003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000 33825 66fb000000010000000000001376616e64656e626f6f676161726467726f6570026e6c0000010001 66fb800000010000000200021376616e64656e626f6f676161726467726f6570026e6c0000010001c00c00020001000151800014026e730e64617461636f6e686f7374696e67c020c00c00020001000151800006036e7332c037c03400010001000151800004d43d2934c05400010001000151800004d468d143 33826 b70783c05011fbde02ac0000000000000000 33827 d90600000001000000000000036e73310974656c656b6162656c026e6c0000010001 d90680000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 33828 25b20000000100000000000004696c7365026e6c0000ff0001 25b28000000100000003000304696c7365026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc025000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a284 33829 22be000000010000000000000b72696f766f6f727a6f7267026e6c00000f0001 22be800000010000000200000b72696f766f6f727a6f7267026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 33830 9ff00000000100000000000008706f737462616e6b026e6c0000010001 9ff08000000100000002000208706f737462616e6b026e6c0000010001c00c0002000100015180000a036e733103696e67c015c00c00020001000151800006036e7332c02dc0290001000100015180000491dd19c2c03f0001000100015180000491dd5dc2 33831 000000007002faf0facb00000204057a01010402 000080010000000000000000 33832 b70783c15010fbde02ab0000000000000000 33833 40a900000001000000000000037777770676617269636b026e6c0000010001 40a980000001000000020000037777770676617269636b026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c02e 33834 b70825495010fbec49f80000000000000000 b708a5430000000000000000 33835 b70825495018fbec05d300000093409c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403af9eb403c4b6b0003000000344e544c4d535350000100000097b208e00a000a002a0000000a000a0020000000504f4d504f454d2d4d4d504f4d504f454e2d4d4d0000 b708a5430000000000000000 33836 b70825575011fbde49620000000000000000 b708a5530000000000000000 33837 4cec000000010000000000000e736c6172746962617274666173740a62686d732d67726f6570026e6c0000010001 4cec800000010000000200020e736c6172746962617274666173740a62686d732d67726f6570026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc03a00010001000151800004d9726162c04c00010001000151800004d9726161 33838 948f00000001000000000000086176656e747572610a62686d732d67726f6570026e6c0000010001 948f80000001000000020002086176656e747572610a62686d732d67726f6570026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c03400010001000151800004d9726162c04600010001000151800004d9726161 33839 22fc000000010000000000000b6361726565726665766572026e6c00000f000100 22fc800000010000000200020b6361726565726665766572026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c018c00c00020001000151800006036e7332c02fc02c00010001000151800004d453c005c04a00010001000151800004d453c006 33840 b70825585010fbde49610000000000000000 b708a5530000000000000000 33841 28920000000100000000000008746d2d67726f6570026e6c0000ff0001 28928000000100000002000208746d2d67726f6570026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 33842 975d0000000100000000000007656e64656d6f6c026e6c0000010001 975d8000000100000002000007656e64656d6f6c026e6c0000010001c00c0002000100015180001204726f6f7307656e64656d6f6c03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 33843 ff75000000010000000000000967736d676967616e74026e6c00000f0001 ff75800000010000000300020967736d676967616e74026e6c00000f0001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 33844 85a200000001000000000000026e7303616d730874656c6567617465026e6c0000010001 85a280000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 33845 2d3c00000001000000000000037777770565626f6e65026e6c0000010001 2d3c80000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 33846 497b001000010000000000010377777708646273726164696f026e6c00000100010000290800000080000000 497b800000010000000200030377777708646273726164696f026e6c0000010001c01000020001000151800010036e7331096e65746e6174696f6ec019c01000020001000151800006036e7332c031c02d00010001000151800004d5efb105c04900010001000151800004505faa0a0000291000000000000000 33847 ceb000000001000000000000036e7332056132303030026e6c00001c0001 ceb080000001000000030002036e7332056132303030026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 33848 64a300000001000000000000036e7332056132303030026e6c0000260001 64a380000001000000030002036e7332056132303030026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 33849 243d00000001000000000000036e7331056132303030026e6c00001c0001 243d80000001000000030002036e7331056132303030026e6c00001c0001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 33850 488200000001000000000000036e7331056132303030026e6c0000260001 488280000001000000030002036e7331056132303030026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 33851 ddfa000000010000000000000b6e6f64652d642d62346639056132303030026e6c0000010001 ddfa800000010000000300020b6e6f64652d642d62346639056132303030026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800010036e733109756e69736f75726365c01ec01800020001000151800006036e7332c018c032000100010001518000043e6c0141c060000100010001518000043e6c0142 33852 c61f00000001000000000000037777770565626f6e65026e6c0000010001 c61f80000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 33853 57c1000000010000000000000377777708646273726164696f026e6c0000010001 57c1800000010000000200020377777708646273726164696f026e6c0000010001c01000020001000151800010036e7331096e65746e6174696f6ec019c01000020001000151800006036e7332c031c02d00010001000151800004d5efb105c04900010001000151800004505faa0a 33854 d65a00000001000000000000037777770a7365786163636f756e74026e6c0000010001 d65a80000001000000020002037777770a7365786163636f756e74026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c01bc01000020001000151800006036e7332c033c02f0001000100015180000452c04516c04c0001000100015180000452c04542 33855 7c770000000100000000000007736f6e74656368026e6c0000010001 7c778000000100000002000207736f6e74656368026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 33856 191500000001000000000000036e73310c7a776172656d6574616c656e026e6c0000010001 191580000001000000020001036e73310c7a776172656d6574616c656e026e6c0000010001c01000020001000151800002c00cc01000020001000151800010026e730a737562686f7374696e67c01dc00c00010001000151800004d5f73947 33857 2ccf00000001000000000000037777770e76616e6861727465706172646f6e026e6c0000010001 2ccf80000001000000020000037777770e76616e6861727465706172646f6e026e6c0000010001c01000020001000151800015036e73310e64696a6b7377656264657369676ec01fc0100002000100015180000f036e733208313576726167656ec01f 33858 6b2d0000000100000000000003777777096765776f6f6e6b7574026e6c0000010001 6b2d8000000100000003000303777777096765776f6f6e6b7574026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 33859 51d7000000010000000000000331333602326a026e6c0000010001 51d7800000010000000200020331333602326a026e6c0000010001c0100002000100015180000e036e733107676f6c69617468c013c01000020001000151800006036e7332c02bc027000100010001518000045054f379c04100010001000151800004507f48c2 33860 88d600000001000000000000036e733207676f6c69617468026e6c00001c0001 88d680000001000000020002036e733207676f6c69617468026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000045054f379c00c00010001000151800004507f48c2 33861 62c100000001000000000000036e733207676f6c69617468026e6c0000260001 62c180000001000000020002036e733207676f6c69617468026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000045054f379c00c00010001000151800004507f48c2 33862 878000000001000000000000036e733107676f6c69617468026e6c00001c0001 878080000001000000020002036e733107676f6c69617468026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f379c03a00010001000151800004507f48c2 33863 c1c300000001000000000000036e733107676f6c69617468026e6c0000260001 c1c380000001000000020002036e733107676f6c69617468026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f379c03a00010001000151800004507f48c2 33864 933c00000001000000000000037777770c626565746c6564657369676e026e6c0000010001 933c80000001000000020000037777770c626565746c6564657369676e026e6c0000010001c01000020001000151800012036e7335087a6f6e656564697403636f6d00c01000020001000151800007046e733134c035 33865 f20e00000001000000000000036e73310966697265776f726b32026e6c00001c0001 f20e80000001000000020002036e73310966697265776f726b32026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5f4b8d3c03c00010001000151800004d5f4b9d3 33866 6d2000000001000000000000036e73310966697265776f726b32026e6c0000260001 6d2080000001000000020002036e73310966697265776f726b32026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5f4b8d3c03c00010001000151800004d5f4b9d3 33867 068700000001000000000000036e73320966697265776f726b32026e6c00001c0001 068780000001000000020002036e73320966697265776f726b32026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5f4b8d3c00c00010001000151800004d5f4b9d3 33868 bed300000001000000000000036e73320966697265776f726b32026e6c0000260001 bed380000001000000020002036e73320966697265776f726b32026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5f4b8d3c00c00010001000151800004d5f4b9d3 33869 86c200000001000000000000037777770a6164756c747374617473026e6c0000010001 86c280000001000000020000037777770a6164756c747374617473026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 33870 12ca00000001000000000000056d61696c3109636c65616e706f7274026e6c0000010001 12ca80000001000000020002056d61696c3109636c65616e706f7274026e6c0000010001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 33871 891d00000001000000000000076363636c2d6e6c06787334616c6c026e6c0000010001 891d80000001000000030002076363636c2d6e6c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 33872 06b400000001000000000000036e73310663617374656c026e6c0000010001 06b480000001000000020002036e73310663617374656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3558244c03900010001000151800004c3558245 33873 2ce90000000100000000000003777777056b61746565026e6c0000010001 2ce98403000100000001000003777777056b61746565026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 33874 835a00000001000000000000036e73320663617374656c026e6c0000010001 835a80000001000000020002036e73320663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004c3558244c00c00010001000151800004c3558245 33875 2436000000010000000000000774726166666963026e6c0000010001 2436800000010000000200000774726166666963026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 33876 dd4000000001000000000000046164636f026e6c0000010001 dd4080000001000000020002046164636f026e6c0000010001c00c00020001000151800009036e7331026973c011c00c00020001000151800006036e7332c029c02500010001000151800004d5852102c03a00010001000151800004d5c41503 33877 c8ae0000000100000000000003777777066e6570726f6d026e6c0000010001 c8ae8000000100000002000203777777066e6570726f6d026e6c0000010001c0100002000100015180000b026e7305706c616e74c017c01000020001000151800006036e7332c02ec02b00010001000151800004d59f0037c04200010001000151800004d59f0046 33878 2a690000000100000000000003777777086e6f61687361726b026e6c0000010001 2a698000000100000003000203777777086e6f61687361726b026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c019c01000020001000151800006036e7332c031c01000020001000151800012036e7333086c65617365776562036f726700c02d000100010001518000043ed44079c048000100010001518000043ed4407a 33879 0dd100000001000000000000037777770561632d6463026e6c0000010001 0dd180000001000000020001037777770561632d6463026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c016c01000020001000151800006036e7334c02ec02a00010001000151800004d5c401c0 33880 a3a90000000100000000000009636865636b73746174026e6c0000010001 a3a98000000100000002000109636865636b73746174026e6c0000010001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c02a00010001000151800004d4ccc0fc 33881 a41b00000001000000000000036e733102646e0b7074742d74656c65636f6d026e6c0000010001 a41b80000001000000020000036e733102646e0b7074742d74656c65636f6d026e6c0000010001c0130002000100015180000d03646e73036b706e03636f6d00c0130002000100015180000d036e7332036b706e036e657400 33882 166f0000000100000000000006636f736d6f73046b706d67026e6c0000010001 166f8000000100000002000006636f736d6f73046b706d67026e6c0000010001c01300020001000151800013036e7331026e6c0669676e697465036e657400c01300020001000151800006036e7332c030 33883 9ab70000000100000000000006726f75746572026777046963636f026e6c0000010001 9ab78000000100000002000106726f75746572026777046963636f026e6c0000010001c0160002000100015180000d026e7307616e74656e6e61c01bc0160002000100015180001306696e666f726d07616e74656e6e6102646b00c02f00010001000151800004d995dd13 33884 248100000001000000000000055f6c646170045f746370026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001 248184030001000000010000055f6c646170045f746370026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001c03400060001000038400036026e730f646f6d61696e2d7265676973747279c0340a686f73746d6173746572c04b0bf1e540000070800000384000278d0000003840 33885 64bb00000001000000000000037777770c6164736c63656e7472616c65026e6c0000010001 64bb80000001000000020000037777770c6164736c63656e7472616c65026e6c0000010001c01000020001000151800010036e733109706365787472656d65c01dc01000020001000151800006036e7332c035 33886 5c7b00000001000000000000036e733109706365787472656d65026e6c0000010001 5c7b80000001000000020002036e733109706365787472656d65026e6c0000010001c0100002000100015180000a036e7331036e7873c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 33887 cc9100000001000000000000036e733109706365787472656d65026e6c0000260001 cc9180000001000000020002036e733109706365787472656d65026e6c0000260001c0100002000100015180000a036e7331036e7873c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 33888 9ef200000001000000000000036e733209706365787472656d65026e6c0000010001 9ef280000001000000020002036e733209706365787472656d65026e6c0000010001c0100002000100015180000a036e7331036e7873c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 33889 cf7900000001000000000000036e733209706365787472656d65026e6c0000260001 cf7980000001000000020002036e733209706365787472656d65026e6c0000260001c0100002000100015180000a036e7331036e7873c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 33890 7e8c00000001000000000000096b616c6b686f76656e026e6c00000f0001 7e8c80000001000000020000096b616c6b686f76656e026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c016c00c0002000100015180000704686e7331c02f 33891 311e00000001000000000000036e73330767617574656e67026e6c0000010001 311e80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33892 392400000001000000000000036e73330767617574656e67026e6c0000010001 392480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33893 1bcc0000000100000000000009776562736869656c64056f70737973026e6c0000010001 1bcc8000000100000003000309776562736869656c64056f70737973026e6c0000010001c01600020001000151800005026e73c016c0160002000100015180000e026e730876642d626f736368c01cc0160002000100015180000c026e7306746865626f73c01cc03000010001000151800004507fd623c04100010001000151800004d5540498c05b000100010001518000043eb19695 33894 3e4d00000001000000000000076d696c63757261026e6c00000f0001 3e4d80000001000000020000076d696c63757261026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c02b 33895 3d10000000010000000000000377777713776179706f696e742d72657374617572616e74026e6c0000010001 3d10800000010000000200000377777713776179706f696e742d72657374617572616e74026e6c0000010001c0100002000100015180000c026e7306766576696461c024c01000020001000151800006036e7332c03b 33896 b10d00000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 b10d80000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 33897 8e5c0000000100000000000006787334616c6c026e6c00000f0001 8e5c8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 33898 bf2800000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 bf2880000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 33899 656300000001000000000000036e733109666972737466696e64026e6c0000010001 656380000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 33900 7e9f0000000100000000000008667265656d61696c026e6c00000f0001 7e9f8000000100000003000208667265656d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 33901 3a62000000010000000000000f6138302d3132362d3135332d323532046164736c06787334616c6c026e6c0000010001 3a62800000010000000300020f6138302d3132362d3135332d323532046164736c06787334616c6c026e6c0000010001c02100020001000151800005026e73c021c02100020001000151800006036e7332c021c0210002000100015180000d026e730472697065036e657400c03c00010001000151800004c26d0642c04d00010001000151800004c26d0963 33902 efc10000000100000000000003777777156f7269656e74616c2d6a6164652d73686172706569026e6c0000010001 efc18000000100000002000203777777156f7269656e74616c2d6a6164652d73686172706569026e6c0000010001c0100002000100015180000d036e733106782d73697465c026c01000020001000151800006036e7332c03ec03a0001000100015180000450f7ca4bc0530001000100015180000450f7ca50 33903 3e7200000001000000000000046d61696c06656d61746963026e6c0000010001 3e7280000001000000020002046d61696c06656d61746963026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02c000100010001518000043e3a4042c03d000100010001518000043e3a4043 33904 ba980000000100000000000008646473676f756461026e6c00000f0001 ba988000000100000002000008646473676f756461026e6c00000f0001c00c0002000100015180000e036e73310469706d68036e657400c00c00020001000151800006036e7332c02d 33905 85b200000001000000000000026e7303616d730874656c6567617465026e6c0000010001 85b280000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 33906 108d00000001000000000000096d61676e6574726f6e106865726d65732d6d61676e6574726f6e026e6c0000010001 108d80000001000000020002096d61676e6574726f6e106865726d65732d6d61676e6574726f6e026e6c0000010001c0160002000100015180000a036e733103696166c027c01600020001000151800006036e7332c03fc03b000100010001518000045059e040c051000100010001518000045059ee03 33907 79f100000001000000000000046e73303903777873026e6c00001c0001 79f180000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 33908 626e00000001000000000000046e73303903777873026e6c0000260001 626e80000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 33909 403100000001000000000000036e733403777873026e6c00001c0001 403180000001000000030003036e733403777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 33910 c8d900000001000000000000036e733403777873026e6c0000260001 c8d980000001000000030003036e733403777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 33911 62d000000001000000000000046e73303803777873026e6c00001c0001 62d080000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 33912 5b4000000001000000000000046e73303803777873026e6c0000260001 5b4080000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 33913 124e0000000100000000000009652d6c756e61746963026e6c0000010001 124e8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33914 f2290000000100000000000004686f6d6503696165026e6c0000010001 f2298000000100000002000204686f6d6503696165026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c015c01100020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 33915 29be00000001000000000000077765626d61696c03777873026e6c0000010001 29be80000001000000030003077765626d61696c03777873026e6c0000010001c01400020001000151800007046e733038c014c01400020001000151800007046e733039c014c01400020001000151800006036e7334c014c02c00010001000151800004c3790128c03f00010001000151800004c3790143c05200010001000151800004d5ef9a65 33916 bac200000001000000000000076172636869766507616e74656e6e61026e6c0000010001 bac280000001000000020001076172636869766507616e74656e6e61026e6c0000010001c01400020001000151800005026e73c014c0140002000100015180001306696e666f726d07616e74656e6e6102646b00c03000010001000151800004d995dd13 33917 a91d00000001000000000000076172636869766507616e74656e6e61026e6c00001c0001 a91d80000001000000020001076172636869766507616e74656e6e61026e6c00001c0001c01400020001000151800005026e73c014c0140002000100015180001306696e666f726d07616e74656e6e6102646b00c03000010001000151800004d995dd13 33918 b26800000001000000000000076172636869766507616e74656e6e61026e6c0000260001 b26880000001000000020001076172636869766507616e74656e6e61026e6c0000260001c01400020001000151800005026e73c014c0140002000100015180001306696e666f726d07616e74656e6e6102646b00c03000010001000151800004d995dd13 33919 9e5300000001000000000000026e7307616e74656e6e61026e6c00001c0001 9e5380000001000000020001026e7307616e74656e6e61026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180001306696e666f726d07616e74656e6e6102646b00c00c00010001000151800004d995dd13 33920 d0fa00000001000000000000026e7307616e74656e6e61026e6c0000260001 d0fa80000001000000020001026e7307616e74656e6e61026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180001306696e666f726d07616e74656e6e6102646b00c00c00010001000151800004d995dd13 33921 596500000001000000000000036e73310861746c616e74697a026e6c0000010001 596580000001000000020002036e73310861746c616e74697a026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa011c03b00010001000151800004d5efa075 33922 b5ff00000001000000000000036e73320861746c616e74697a026e6c0000010001 b5ff80000001000000020002036e73320861746c616e74697a026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d5efa011c00c00010001000151800004d5efa075 33923 150d0000000100000000000003777777076d797374617473026e6c0000010001 150d8000000100000002000203777777076d797374617473026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa404c04900010001000151800004d5efa405 33924 066600000001000000000000037777770970726f626565726e75026e6c0000010001 066680000001000000020000037777770970726f626565726e75026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 33925 ab000000000100000000000007776f6c66736f6e026e6c00000f0001 ab008000000100000002000207776f6c66736f6e026e6c00000f0001c00c0002000100015180000d026e73076b6e6f77617265c014c00c00020001000151800006036e7332c02bc02800010001000151800004c3402003c04100010001000151800004c340202b 33926 7b8a00000001000000000000077369632d777777036a7263026e6c00001c0001 7b8a80000001000000020002077369632d777777036a7263026e6c00001c0001c0140002000100015180000a0769616d2d707562c014c014000200010001518000070473697375c014c02c000100010001518000048bbfcf14c042000100010001518000048bbfcf19 33927 021e0000000100000000000009652d6c756e61746963026e6c0000010001 021e8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33928 3a240000000100000000000009652d6c756e61746963026e6c0000010001 3a248000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 33929 17ce00000001000000000000057365656c74026e6c0000010001 17ce80000001000000020002057365656c74026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02600010001000151800004d5c4071ec03800010001000151800004c32fdc9a 33930 213d00000001000000000000036e73330767617574656e67026e6c0000010001 213d80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33931 393000000001000000000000036e73340767617574656e67026e6c0000010001 393080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33932 594800000001000000000000046c6f6469026e6c00000f0001 594880000001000000020000046c6f6469026e6c00000f0001c00c0002000100015180000f026e7306636170696361036e657400c00c00020001000151800006036e7332c028 33933 517a00000001000000000000097479706f74656b7374026e6c00000f0001 517a80000001000000030001097479706f74656b7374026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc016c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c048c02a000100010001518000043efa0202 33934 085700000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 085780000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 33935 74c30000000100000000000003777777076e6c2d6d656e75026e6c0000010001 74c38000000100000003000203777777076e6c2d6d656e75026e6c0000010001c0100002000100015180000f05636f627261066b6f6e626962c018c0100002000100015180000d0a636f7070657268656164c032c0100002000100015180000906707974686f6ec032c02c00010001000151800004c0571f16c06000010001000151800004c0571f0b 33936 64e600000001000000000000096b6162656c666f6f6e026e6c0000010001 64e680000001000000020002096b6162656c666f6f6e026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7334c00cc02a000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 33937 185e000000010000000000000377777706726164696f33026e6c0000010001 185e800000010000000300030377777706726164696f33026e6c0000010001c0100002000100015180000e076e73617574683103626974c017c0100002000100015180000a076e736175746832c033c0100002000100015180000a076e736175746833c033c02b00010001000151800004d5880c33c04500010001000151800004d5880c3bc05b00010001000151800004d4ccc00b 33938 9f46000000010000000000000a636f7070657268656164066b6f6e626962026e6c0000010001 9f46800000010000000300030a636f7070657268656164066b6f6e626962026e6c0000010001c0170002000100015180000805636f627261c017c0170002000100015180000906707974686f6ec017c0170002000100015180000e036e733107737572666e6574c01ec03200010001000151800004c0571f16c04600010001000151800004c0571f0bc05b00010001000151800004c0576a65 33939 22a40000000100000000000005646e732d31056c61646f74026e6c0000010001 22a48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33940 6e730000000100000000000005646e732d32056c61646f74026e6c0000010001 6e738000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 33941 4b77000000010000000000000b72656e646f64656b6f6f69026e6c00000f0001 4b77800000010000000300030b72656e646f64656b6f6f69026e6c00000f0001c00c0002000100015180000e04646e73310664656b6f6f69c018c00c0002000100015180000704646e7333c031c00c0002000100015180000704646e7332c031c02c00010001000151800004d5e5500bc04600010001000151800004d5e5500cc05900010001000151800004d5e552c6 33942 708200000001000000000000037777770b7468652d6f737472696368026e6c0000010001 708280000001000000020002037777770b7468652d6f737472696368026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c01cc01000020001000151800006036e7332c033c03000010001000151800004c3402003c04900010001000151800004c340202b 33943 ed84000000010000000000000466636466026e6c00000f0001 ed84800000010000000200000466636466026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 33944 7ec70000000100000000000003777777056572696261026e6c0000010001 7ec78000000100000003000203777777056572696261026e6c0000010001c0100002000100015180000d036e733106776964657873c016c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 33945 85ba00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 85ba80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 33946 a2300000000100000000000003777777056572696261026e6c0000010001 a2308000000100000003000203777777056572696261026e6c0000010001c0100002000100015180000d036e733106776964657873c016c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 33947 02ec0000000100000000000008706f6f68612d6276026e6c00001c0001 02ec8000000100000002000208706f6f68612d6276026e6c00001c0001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 33948 1072000000010000000000000377777709206e6f6573706c6520026e6c0000010001 1072840300010000000100000377777709206e6f6573706c6520026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 33949 7e4f000000010000000000000377777709756e7175656e646f72026e6c0000010001 7e4f800000010000000200020377777709756e7175656e646f72026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5c9e8c8c04e00010001000151800004d5c9e8c9 33950 5051000000010000000000000473656e61026e6c0000ff0001 5051800000010000000200020473656e61026e6c0000ff0001c00c0002000100015180000e036e733107626265796f6e64c011c00c00020001000151800006036e7332c029c025000100010001518000043eb1900bc03f000100010001518000043eb19002 33951 3cca00000001000000000000036e7331046372696f026e6c0000010001 3cca80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33952 ba3500000001000000000000036e7332046372696f026e6c0000010001 ba3580000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 33953 799100000001000000000000037777770b696e73696465666c6f6f72026e6c0000010001 799180000001000000030001037777770b696e73696465666c6f6f72026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 33954 a48800000001000000000000026e7303616d730874656c6567617465026e6c0000010001 a48880000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 33955 ef9f00000001000000000000037777770866656d666f72756d026e6c0000010001 ef9f80000001000000030003037777770866656d666f72756d026e6c0000010001c01000020001000151800010036e733109656e6368616e746564c019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004d5ef8589c04900010001000151800004d5ef8593c05b00010001000151800004d5ef8005 33956 1d2e0000000100000000000003777777087370656b6b656c73026e6c0000010001 1d2e8000000100000002000203777777087370656b6b656c73026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d994ae77c04b000100010001518000045054ea06 33957 34570000000100000000000003777777096e65742d6d61726b74026e6c0000010001 34578000000100000003000203777777096e65742d6d61726b74026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c01ac01000020001000151800006036e7332c032c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c02e00010001000151800004cf2cd7adc04f0001000100015180000452c04365 33958 17cb00000001000000000000037777770461626974026e6c0000010001 17cb80000001000000020002037777770461626974026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 33959 0ce600000001000000000000037777770461626974026e6c0000010001 0ce680000001000000020002037777770461626974026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 33960 066f00000001000000000000037777770b76726f75776f6e6c696e65026e6c0000010001 066f80000001000000030000037777770b76726f75776f6e6c696e65026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c034c01000020001000151800006036e7333c034 33961 58d4000000010000000000000664757061636f026e6c00000f0001 58d4800000010000000200010664757061636f026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c02700010001000151800004d586fa2b 33962 022c0000000100000000000003777777076e6f6573706c65036e6c30026e6c0000010001 022c8403000100000001000003777777076e6f6573706c65036e6c30026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 33963 1ede0000000100000000000007766462636f6d70026e6c00001c0001 1ede8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 33964 d5da0000000100000000000006636861726973026e6c0000ff0001 d5da8000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 33965 93e80000000100000000000008686f73746e616d650462696e640000100003 93e88000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 33966 081e28000001000200000000026e6c00000600010850434f4f535431360a4f6f737465696e646572026e6c00000500fe000000000000c014000100010000000000045073bc4e 081ea8040000000000000000 33967 2ff700000001000000000000036e733104686f6d65026e6c0000010001 2ff780000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 33968 33d6000000010000000000000377777704616b746f026e6c0000010001 33d6800000010000000200000377777704616b746f026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c02c 33969 2e1d0000000100000000000003706f7006706c616e6574026e6c0000010001 2e1d8000000100000003000303706f7006706c616e6574026e6c0000010001c0100002000100015180000b046e73303803777873c017c01000020001000151800007046e733039c030c01000020001000151800006036e7334c030c02b00010001000151800004c3790128c04200010001000151800004c3790143c05500010001000151800004d5ef9a65 33970 cd44000000010000000000000776616e64696a6b026e6c00000f0001 cd44800000010000000200020776616e64696a6b026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 33971 71580000000100000000000003706f70086869676863617265026e6c0000010001 71588000000100000003000203706f70086869676863617265026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 33972 dde9000000010000000000000661736f706f73026e6c00000f0001 dde9800000010000000200000661736f706f73026e6c00000f0001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 33973 da0300000001000000000000037777770e70726976652d616472657373656e026e6c0000010001 da0380000001000000020000037777770e70726976652d616472657373656e026e6c0000010001c01000020001000151800012036e7335087a6f6e656564697403636f6d00c01000020001000151800007046e733134c037 33974 ce1d000000010000000000000e736d616c6c696e6765726c616e64026e6c0000ff0001 ce1d800000010000000200020e736d616c6c696e6765726c616e64026e6c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c01bc00c00020001000151800006036e7332c033c02f00010001000151800004d43d0f08c04d00010001000151800004d43d19e2 33975 d7840000000100000000000010686565667465656e676f656468617274026e6c0000010001 d7848000000100000002000010686565667465656e676f656468617274026e6c0000010001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c035 33976 82e6000000010000000000000477777732076d797374617473026e6c0000010001 82e6800000010000000200020477777732076d797374617473026e6c0000010001c01100020001000151800011036e73310a726564686f7374696e67c019c01100020001000151800006036e7332c031c02d00010001000151800004d5efa404c04a00010001000151800004d5efa405 33977 64f500000001000000000000066d65657a687a026e6c00001c0001 64f580000001000000030002066d65657a687a026e6c00001c0001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 33978 bafe0000000100000000000004616e646f026e6c00000f0001 bafe8000000100000003000304616e646f026e6c00000f0001c00c0002000100015180000f036e7331086e6f766178657373c011c00c00020001000151800006036e7332c029c00c00020001000151800006036e7333c029c02500010001000151800004d5c98015c04000010001000151800004d5c9bf12c05200010001000151800004d5ef9c26 33979 93f9000000010000000000000377777706676f6f67656c026e6c0000010001 93f9800000010000000200020377777706676f6f67656c026e6c0000010001c0100002000100015180000a036e7331036e7873c017c01000020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 33980 0a3200000001000000000000037777770a666f7274697362616e6b026e6c0000010001 0a3280000001000000030002037777770a666f7274697362616e6b026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01bc01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c033c02f000100010001518000045054e055c06800010001000151800004d4ccc655 33981 014e00000001000000000000036e73340767617574656e67026e6c0000010001 014e80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 33982 2f6000100001000000000001076e696b68656668066e696b686566026e6c00000100010000290800000000000000 2f6080000001000000040003076e696b68656668066e696b686566026e6c0000010001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c7040000291000000000000000 33983 4b9500100001000000000001076e696b68656668066e696b686566026e6c00002600010000290800000000000000 4b9580000001000000040003076e696b68656668066e696b686566026e6c0000260001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c7040000291000000000000000 33984 c63b000000010000000000000377777707796f72696e666d026e6c00001c0001 c63b800000010000000200010377777707796f72696e666d026e6c00001c0001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c018c01000020001000151800011036e733207636c742d756661036e657400c02c00010001000151800004c3c1ca77 33985 e6500000000100000000000003777777057a6f656b79026e6c0000010001 e6508000000100000002000103777777057a6f656b79026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c016c01000020001000151800006036e7334c02ec02a00010001000151800004d5c401c0 33986 6cfb0000000100000000000005746f746162026e6c00000f0001 6cfb8000000100000002000205746f746162026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c012c00c00020001000151800006036e7332c029c02600010001000151800004d4cb0e42c04100010001000151800004d4cb1221 33987 557a0000000100000000000005616d2d656d026e6c00000f0001 557a8000000100000002000005616d2d656d026e6c00000f0001c00c0002000100015180000f036e73310561676e2d65036e657400c00c00020001000151800006036e7332c02a 33988 0c2f00000001000000000000046c756e61026e6c00001c0001 0c2f80000001000000020000046c756e61026e6c00001c0001c00c00020001000151800017026e7309726f7474657264616d046c756e61036e657400c00c0002000100015180000f026e7309686f6f6664646f7270c032 33989 3d2e00000001000000000000026f72026e6c00000f0001 3d2e80000001000000020000026f72026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c026 33990 e4ba000000010000000000000a61666b62656e656c7578026e6c0000010001 e4ba800000010000000200010a61666b62656e656c7578026e6c0000010001c00c0002000100015180000a036e733303777873c017c00c00020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 33991 b3970000000100000000000104646e733105692d702d64026e6c00000100010000291000000000000000 b3978000000100000002000304646e733105692d702d64026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9124003c03900010001000151800004d91241040000291000000000000000 33992 139b00000001000000000000046d61696c06647272617468026e6c0000010001 139b80000001000000020002046d61696c06647272617468026e6c0000010001c0110002000100015180000b036e73310472617468c018c01100020001000151800006036e7332c030c02c00010001000151800004d535c109c043000100010001518000043f6d1401 33993 0c31000000010000000000000c5241414456414e5354415445024e4c00000f0001 0c31800000010000000200000c5241414456414e5354415445024e4c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 33994 e29c00000001000000000000037777770a72697373657276696365026e6c0000010001 e29c80000001000000020002037777770a72697373657276696365026e6c0000010001c0100002000100015180000d036e73310661637469766fc01bc01000020001000151800006036e7332c033c02f00010001000151800004d5c4281ac04800010001000151800004d5c42806 33995 9c7c00000001000000000000037777771061726368696566737461727470756e74026e6c0000010001 9c7c80000001000000020002037777771061726368696566737461727470756e74026e6c0000010001c0100002000100015180000a036e7331036e7873c021c01000020001000151800006036e7332c039c03500010001000151800004d973c015c04b00010001000151800004d973c102 33996 3f5c0000000100000000000104646e733105692d702d64026e6c00001c00010000291000000000000000 3f5c8000000100000002000304646e733105692d702d64026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9124003c03900010001000151800004d91241040000291000000000000000 33997 ec9a0000000100000000000104646e733105692d702d64026e6c00002600010000291000000000000000 ec9a8000000100000002000304646e733105692d702d64026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9124003c03900010001000151800004d91241040000291000000000000000 33998 98fd0000000100000000000104646e733205692d702d64026e6c00000100010000291000000000000000 98fd8000000100000002000304646e733205692d702d64026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d9124003c00c00010001000151800004d91241040000291000000000000000 33999 6e410000000100000000000104646e733205692d702d64026e6c00001c00010000291000000000000000 6e418000000100000002000304646e733205692d702d64026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d9124003c00c00010001000151800004d91241040000291000000000000000 34000 5dd30000000100000000000007666f786b696473026e6c00001c0001 5dd38000000100000003000007666f786b696473026e6c00001c0001c00c00020001000151800011036e73310777652d64617265036e657400c00c00020001000151800006036e7332c02cc00c00020001000151800006036e7333c02c 34001 6df60000000100000000000104646e733205692d702d64026e6c00002600010000291000000000000000 6df68000000100000002000304646e733205692d702d64026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d9124003c00c00010001000151800004d91241040000291000000000000000 34002 8031000000010000000000000a70696a6c736e656c3935026e6c00000f0001 8031800000010000000200000a70696a6c736e656c3935026e6c00000f0001c00c0002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c00c00020001000151800015026e730f796f75726e616d65686f7374696e67c041 34003 950100000001000000000000036e7331066e6c74726565026e6c0000010001 950180000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 34004 7e9900000001000000000000036e7332066e6c74726565026e6c0000010001 7e9980000001000000020002036e7332066e6c74726565026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d4b20403c00c00010001000151800004d5881e45 34005 37140000000100000000000003777777077768656b616d70026e6c0000010001 37148000000100000002000003777777077768656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 34006 972a00000001000000000000046d61696c076575726f6e6574026e6c0000010001 972a80000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 34007 3fa700000001000000000000037777770570636d6167026e6c0000010001 3fa780000001000000020000037777770570636d6167026e6c0000010001c0100002000100015180000f036e733105617363696f036e657400c01000020001000151800006036e7332c02e 34008 92980000000100000000000003706f7007726f6465677261026e6c0000010001 92988000000100000002000003706f7007726f6465677261026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 34009 98e200000001000000000000036e7333076e656473746174026e6c0000010001 98e280000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34010 ce1d000000010000000000000b667574757269736c616e64026e6c00000f0001 ce1d840300010000000100000b667574757269736c616e64026e6c00000f0001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 34011 304900000001000000000000037777770372746c026e6c00001c0001 304980000001000000020001037777770372746c026e6c00001c0001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c014c01000020001000151800011036e733207636c742d756661036e657400c02800010001000151800004c3c1ca77 34012 f3bc00000001000000000000037777770b686f756f706469656b6973026e6c0000010001 f3bc80000001000000020002037777770b686f756f706469656b6973026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01cc01000020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 34013 a53500000001000000000000037777770b646f6e617469656b6e6f70026e6c0000010001 a53580000001000000020002037777770b646f6e617469656b6e6f70026e6c0000010001c0100002000100015180000b036e7331046e732d31c01cc01000020001000151800006036e7332c034c030000100010001518000045045a0cdc04700010001000151800004d4cceec8 34014 8675000000010000000000000d62696a737465726875697a656e026e6c0000010001 8675800000010000000200000d62696a737465726875697a656e026e6c0000010001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c035 34015 fc8e0000000100000000000006617367617264026e6c00000f0001 fc8e8000000100000002000206617367617264026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc013c00c00020001000151800006036e7332c02bc02700010001000151800004c3558244c04000010001000151800004c3558245 34016 8055000000010000000000000c5354494e474552434f414348026e6c0000020001 8055840300010000000100000c5354494e474552434f414348026e6c0000020001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 34017 12c0000000010000000000000b72696f766f6f727a6f7267026e6c00000f0001 12c0800000010000000200000b72696f766f6f727a6f7267026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 34018 f8f6000000010000000000000f6c6f67697363687072656d65646961026e6c00000f0001 f8f6800000010000000200020f6c6f67697363687072656d65646961026e6c00000f0001c00c00020001000151800009036e7331026973c01cc00c00020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 34019 87d7000000010000000000000377777708616e616c626f7973026e6c0000010001 87d7800000010000000200020377777708616e616c626f7973026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac019c01000020001000151800006036e7332c031c02d00010001000151800004d5efa011c04800010001000151800004d5efa075 34020 34460000000100000000000003777777046963636503727567026e6c0000010001 34468000000100000003000303777777046963636503727567026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000e036e733107737572666e6574c019c02d00010001000151800004817d0406c03f00010001000151800004817d040dc05100010001000151800004c0576a65 34021 901d00000001000000000000026e73076e656473746174026e6c0000010001 901d80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34022 dc5e00000001000000000000036e7332076e656473746174026e6c0000010001 dc5e80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34023 be7100000001000000000000036e7333076e656473746174026e6c0000010001 be7180000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34024 298500000001000000000000036e7334076e656473746174026e6c0000010001 298580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34025 0c5a000000010000000000000b706c616e65746576656e74026e6c00000f0001 0c5a800000010000000200000b706c616e65746576656e74026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c02f 34026 6f4a00000001000000000000037777770964697274796c616e64026e6c0000010001 6f4a84030001000000010000037777770964697274796c616e64026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 34027 14a700000001000000000000037777770e62622d6164766572746973696e67026e6c0000010001 14a780000001000000020000037777770e62622d6164766572746973696e67026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c036 34028 bba500000001000000000000036e733108696e74726f776562026e6c0000010001 bba580000001000000020002036e733108696e74726f776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450416028c03b00010001000151800004c356780c 34029 758c00000001000000000000036e733208696e74726f776562026e6c0000010001 758c80000001000000020002036e733208696e74726f776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 34030 89bc00000001000000000000076f70656e6e61700567757a6564026e6c0000010001 89bc80000001000000020002076f70656e6e61700567757a6564026e6c0000010001c0140002000100015180000e036e73310773656172636879c01ac01400020001000151800006036e7332c032c02e00010001000151800004d9aa1235c04800010001000151800004507e81e0 34031 0cf400000001000000000000037777770d77696e646f777375706461746503636f6d0a7377697463686a6f6273026e6c0000010001 0cf480000001000000020002037777770d77696e646f777375706461746503636f6d0a7377697463686a6f6273026e6c0000010001c02200020001000151800009036e7331026973c02dc02200020001000151800006036e7332c045c04100010001000151800004d5852102c05600010001000151800004d5c41503 34032 34fd00000001000000000000037777770d77696e646f777375706461746503636f6d0a7377697463686a6f6273026e6c0000010001 34fd80000001000000020002037777770d77696e646f777375706461746503636f6d0a7377697463686a6f6273026e6c0000010001c02200020001000151800009036e7331026973c02dc02200020001000151800006036e7332c045c04100010001000151800004d5852102c05600010001000151800004d5c41503 34033 b4340000000100000000000003747469026e6c0000010001 b4348000000100000002000203747469026e6c0000010001c00c00020001000151800009036e7331026973c010c00c00020001000151800006036e7332c028c02400010001000151800004d5852102c03900010001000151800004d5c41503 34034 006700000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b7768697a7a646f6d706463026e6c0000060001 006784030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b7768697a7a646f6d706463026e6c0000060001c04200060001000038400036026e730f646f6d61696e2d7265676973747279c0420a686f73746d6173746572c0590bf1e540000070800000384000278d0000003840 34035 050000000001000000000000037777770d77696e646f777375706461746503636f6d0a7377697463686a6f6273026e6c0000010001 050080000001000000020002037777770d77696e646f777375706461746503636f6d0a7377697463686a6f6273026e6c0000010001c02200020001000151800009036e7331026973c02dc02200020001000151800006036e7332c045c04100010001000151800004d5852102c05600010001000151800004d5c41503 34036 e034000000010000000000000c76616e6465726c696e64656e026e6c00000f0001 e034800000010000000200000c76616e6465726c696e64656e026e6c00000f0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c031 34037 610f000000010000000000000d64656e6e69737665656e686f66026e6c00000f0001 610f800000010000000200000d64656e6e69737665656e686f66026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c034 34038 878c0000000100000000000004646e73310471776562026e6c0000010001 878c8000000100000002000204646e73310471776562026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 34039 e19b0000000100000000000004646e73320471776562026e6c0000010001 e19b8000000100000002000204646e73320471776562026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 34040 6072000000010000000000000d736368757474657267726f6570026e6c00000f0001 6072800000010000000200020d736368757474657267726f6570026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 34041 e4860000000100000000000003777777087063616374697665026e6c0000010001 e4868000000100000002000003777777087063616374697665026e6c0000010001c0100002000100015180000a026e7304616b7475c019c0100002000100015180000b026e73026e6c036e657400 34042 85c6000000010000000000000768656e6472696b0b726f62626f6f6e73747261026e6c0000010001 85c6800000010000000200020768656e6472696b0b726f62626f6f6e73747261026e6c0000010001c0140002000100015180000a04646e7330026975c020c0140002000100015180000704646e7331c039c03400010001000151800004d91a7002c04a00010001000151800004d91a7103 34043 189200000001000000000000036e733203626e7309676574726f6e696373026e6c0000010001 189280000001000000030003036e733203626e7309676574726f6e696373026e6c0000010001c01400020001000151800006036e7332c014c01400020001000151800005026e73c014c0140002000100015180000a036e733203676e73c014c03200010001000151800004902c0a01c04400010001000151800004902c1319c05500010001000151800004910d2a05 34044 1b2400000001000000000000076e696b68656668066e696b686566026e6c0000010001 1b2480000001000000040002076e696b68656668066e696b686566026e6c0000010001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c704 34045 0d9200000001000000000000076e696b68656668066e696b686566026e6c0000260001 0d9280000001000000040002076e696b68656668066e696b686566026e6c0000260001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c704 34046 7f700000000100000000000005656d61696c066463692d6e6c026e6c00000f0001 7f708403000100000001000005656d61696c066463692d6e6c026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 34047 0c5e000000010000000000000b766973696f6c6f6f657266026e6c00000f0001 0c5e800000010000000300030b766973696f6c6f6f657266026e6c00000f0001c00c0002000100015180000e036e73310761737034616c6cc018c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030c02c00010001000151800004c1adf9c3c046000100010001518000043e70ec3cc05800010001000151800004c1ac0bae 34048 43580000000100000000000004686f6d650774697363616c69026e6c0000010001 43588000000100000003000204686f6d650774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 34049 2a1e000000010000000000000377777712696374666f72796f7572627573696e657373026e6c0000010001 2a1e800000010000000300030377777712696374666f72796f7572627573696e657373026e6c0000010001c0100002000100015180000c026e73067369676e6574c023c01000020001000151800006036e7331c03ac01000020001000151800006036e7332c03ac03700010001000151800004c3561242c04f00010001000151800004d915f142c06100010001000151800004d915f141 34050 20a9000000010000000000000377777704696c7365026e6c0000010001 20a9800000010000000300030377777704696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c029000100010001518000043e45a282c03b000100010001518000043e45a283c04d000100010001518000043e45a284 34051 b32100000001000000000000037777770a697269736864616e6365086d6565726c696e67026e6c0000010001 b32180000001000000020002037777770a697269736864616e6365086d6565726c696e67026e6c0000010001c01b0002000100015180000a026e730469636d63c024c01b00020001000151800006036e7332c03bc038000100010001518000043e643805c04e000100010001518000043e643806 34052 9cbc0000000100000000000003777777086d6574656f6e6574026e6c0000010001 9cbc8000000100000002000203777777086d6574656f6e6574026e6c0000010001c01000020001000151800011036e73310a636c75737465726e6574c019c01000020001000151800006036e7332c031c02d000100010001518000045054edf5c04a00010001000151800004d5f72f3c 34053 b3970000000100000000000004646e733105692d702d64026e6c0000010001 b3978000000100000002000204646e733105692d702d64026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9124003c03900010001000151800004d9124104 34054 190b00000001000000000000036e7332066e65746a616d026e6c0000010001 190b80000001000000030002036e7332066e65746a616d026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 34055 384400000001000000000000036e7331066e65746a616d026e6c0000010001 384480000001000000030002036e7331066e65746a616d026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 34056 3b0100000001000000000000055f6c646170045f746370026763065f6d736463730e7a6f6e6e6576656c642d676f6573026e6c0000060001 3b0184030001000000010000055f6c646170045f746370026763065f6d736463730e7a6f6e6e6576656c642d676f6573026e6c0000060001c03000060001000038400036026e730f646f6d61696e2d7265676973747279c0300a686f73746d6173746572c0470bf1e540000070800000384000278d0000003840 34057 3f5c0000000100000000000004646e733105692d702d64026e6c00001c0001 3f5c8000000100000002000204646e733105692d702d64026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9124003c03900010001000151800004d9124104 34058 ec9a0000000100000000000004646e733105692d702d64026e6c0000260001 ec9a8000000100000002000204646e733105692d702d64026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9124003c03900010001000151800004d9124104 34059 98fd0000000100000000000004646e733205692d702d64026e6c0000010001 98fd8000000100000002000204646e733205692d702d64026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d9124003c00c00010001000151800004d9124104 34060 6e410000000100000000000004646e733205692d702d64026e6c00001c0001 6e418000000100000002000204646e733205692d702d64026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d9124003c00c00010001000151800004d9124104 34061 6df60000000100000000000004646e733205692d702d64026e6c0000260001 6df68000000100000002000204646e733205692d702d64026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d9124003c00c00010001000151800004d9124104 34062 466c0000000100000000000004646e733103766970026e6c00001c0001 466c8000000100000003000304646e733103766970026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c0110002000100015180000704646e7333c011c00c00010001000151800004d44fe803c03700010001000151800004c3f5c782c04a00010001000151800004d44ff303 34063 15880000000100000000000004646e733103766970026e6c0000260001 15888000000100000003000304646e733103766970026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c0110002000100015180000704646e7333c011c00c00010001000151800004d44fe803c03700010001000151800004c3f5c782c04a00010001000151800004d44ff303 34064 c1e10000000100000000000004646e733203766970026e6c00001c0001 c1e18000000100000003000304646e733203766970026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0110002000100015180000704646e7333c011c02900010001000151800004d44fe803c00c00010001000151800004c3f5c782c04a00010001000151800004d44ff303 34065 08cb0000000100000000000004646e733203766970026e6c0000260001 08cb8000000100000003000304646e733203766970026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0110002000100015180000704646e7333c011c02900010001000151800004d44fe803c00c00010001000151800004c3f5c782c04a00010001000151800004d44ff303 34066 f0730000000100000000000004646e733303766970026e6c00001c0001 f0738000000100000003000304646e733303766970026e6c00001c0001c0110002000100015180000704646e7331c011c0110002000100015180000704646e7332c011c01100020001000151800002c00cc02900010001000151800004d44fe803c03c00010001000151800004c3f5c782c00c00010001000151800004d44ff303 34067 4f560000000100000000000004646e733303766970026e6c0000260001 4f568000000100000003000304646e733303766970026e6c0000260001c0110002000100015180000704646e7331c011c0110002000100015180000704646e7332c011c01100020001000151800002c00cc02900010001000151800004d44fe803c03c00010001000151800004c3f5c782c00c00010001000151800004d44ff303 34068 80500000000100000000000005646e732d32056c61646f74026e6c0000010001 80508000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34069 8df400000001000000000000076d656761626f74026e6c0000010001 8df480000001000000030003076d656761626f74026e6c0000010001c00c0002000100015180000e076e73617574683103626974c014c00c0002000100015180000a076e736175746832c030c00c0002000100015180000a076e736175746833c030c02800010001000151800004d5880c33c04200010001000151800004d5880c3bc05800010001000151800004d4ccc00b 34070 41ec00000001000000000000055f6c646170045f746370026763065f6d7364637308416d65726b616e61026e6c0000210001 41ec80000001000000020001055f6c646170045f746370026763065f6d7364637308416d65726b616e61026e6c0000210001c0210002000100015180000d026e73046575726f036e657400c0210002000100015180000d026e73076575726f6e6574c02ac05700010001000151800004c2860043 34071 2112000000010000000000000578656e646f026e6c0000010001 2112800000010000000200020578656e646f026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 34072 cbf028000001000000010000026e6c0000060001055f6c646170045f746370026763065f6d736463730e7a6f6e6e6576656c642d676f6573026e6c0000210001000002580023000000640cc40973622d7365727665720e7a6f6e6e6576656c642d676f6573026e6c00 cbf0a8040000000000000000 34073 67960000000100000000000003777777086a6f62747261636b026e6c0000010001 67968000000100000003000303777777086a6f62747261636b026e6c0000010001c01000020001000151800010036e733109776973652d67757973c019c01000020001000151800006036e7330c031c01000020001000151800006036e7332c031c02d00010001000151800004d413cd91c04900010001000151800004d413cd8fc05b00010001000151800004c16d7a3e 34074 985700000001000000000000036e73320469636d63026e6c0000010001 985780000001000000020002036e73320469636d63026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc029000100010001518000043e643805c00c000100010001518000043e643806 34075 e397000000010000000000000661736f706f73026e6c0000010001 e397800000010000000200000661736f706f73026e6c0000010001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 34076 1dcf0000000100000000000008626c616465746d63026e6c0000010001 1dcf8000000100000002000208626c616465746d63026e6c0000010001c00c00020001000151800011036e73310a726564686f7374696e67c015c00c00020001000151800006036e7332c02dc02900010001000151800004d5efa404c04600010001000151800004d5efa405 34077 d2bf0000000100000000000004646e73310976616c6b6965736572026e6c0000010001 d2bf8000000100000002000004646e73310976616c6b6965736572026e6c0000010001c01100020001000151800011036e7333076361706361766503636f6d00c01100020001000151800006036e7334c033 34078 4af50000000100000000000004646e73320976616c6b6965736572026e6c0000010001 4af58000000100000002000004646e73320976616c6b6965736572026e6c0000010001c01100020001000151800011036e7333076361706361766503636f6d00c01100020001000151800006036e7334c033 34079 bf5a00000001000000000000026e7307656368656c6f6e026e6c0000010001 bf5a80000001000000020002026e7307656368656c6f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7378c00fc00c00010001000151800004d977e179c03900010001000151800004d4ccd10c 34080 2f9200000001000000000000036e737807656368656c6f6e026e6c0000010001 2f9280000001000000020002036e737807656368656c6f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d977e179c00c00010001000151800004d4ccd10c 34081 46a900000001000000000000037777770b6f6e6c696e652d64617461026e6c0000010001 46a980000001000000020002037777770b6f6e6c696e652d64617461026e6c0000010001c0100002000100015180000b036e73310431326e73c01cc01000020001000151800006036e7332c034c030000100010001518000043ed44ca0c047000100010001518000043ed4440c 34082 000000007002faf0e78d0000020405b401010402 000080010000000000000000 34083 02cb000000010000000000000377777708667265656d61696c026e6c0000010001 02cb800000010000000300020377777708667265656d61696c026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c019c0100002000100015180000704616e7332c032c0100002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04800010001000151800004c3f13325 34084 f51a00000001000000000000056d62757975026e6c0000ff0001 f51a80000001000000020000056d62757975026e6c0000ff0001c00c00020001000151800010026e73076379736f6e657403636f6d00c00c00020001000151800006036e7331c029 34085 f85d00000001000000000000026e7306787334616c6c026e6c0000010001 f85d80000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 34086 ab8900000001000000000000036e733206787334616c6c026e6c0000010001 ab8980000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 34087 b70d802c5010faf0dd070000000000000000 34088 4711001000010000000000000377777709776562776572656c64026e6c00001c0001 4711800000010000000300030377777709776562776572656c64026e6c00001c0001c0100002000100015180000a036e733103696467c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e0001000100015180000451af4646c0440001000100015180000451af4647c05600010001000151800004d5a0fde6 34089 b70d802c5018faf0dbdc000000962509000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd92403c4f120003000000374e544c4d535350000100000097b208e00e000e0029000000090009002000000053422d5345525645525a4f4e4e4556454c442d474f45530000 34090 419000000001000000000000037777770b76726f75776f6e6c696e65026e6c0000010001 419080000001000000030000037777770b76726f75776f6e6c696e65026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c034c01000020001000151800006036e7333c034 34091 3a7a00000001000000000000036e7331117468656e6574776f726b666163746f7279026e6c0000010001 3a7a80000001000000020002036e7331117468656e6574776f726b666163746f7279026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cb0c35c04400010001000151800004d4cb0c34 34092 b70d803a5011fae2dc6e0000000000000000 34093 0e8400000001000000000000036e7332117468656e6574776f726b666163746f7279026e6c0000010001 0e8480000001000000020002036e7332117468656e6574776f726b666163746f7279026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03600010001000151800004d4cb0c35c00c00010001000151800004d4cb0c34 34094 10cb00000001000000000000037777770f7665726d6565726d657562656c656e026e6c0000010001 10cb80000001000000020002037777770f7665726d6565726d657562656c656e026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c020c01000020001000151800006036e7332c038c03400010001000151800004d994ae77c052000100010001518000045054ea06 34095 000000007002faf053ff0000020405b401010402 000080010000000000000000 34096 a4cb00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 a4cb80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34097 d44f00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 d44f80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34098 31aa0000000100000000000009652d6c756e61746963026e6c0000010001 31aa8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34099 12800000000100000000000009652d6c756e61746963026e6c0000010001 12808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34100 69020000000100000000000003777777067a7376737367026e6c0000010001 69028403000100000001000003777777067a7376737367026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 34101 b70d803b5010fae2dc6d0000000000000000 34102 31b40000000100000000000009652d6c756e61746963026e6c0000010001 31b48000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34103 09800000000100000000000009652d6c756e61746963026e6c0000010001 09808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34104 b70e3fda5010faf089ca0000000000000000 b70ebfd40000000000000000 34105 327b0000000100000000000009652d6c756e61746963026e6c0000010001 327b8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34106 b70e3fda5018faf0e04d00000096ce5b000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd92403c4f120003000000374e544c4d535350000100000097b208e00e000e0029000000090009002000000053422d5345525645525a4f4e4e4556454c442d474f45530000 b70ebfd40000000000000000 34107 58d500000001000000000000116161782d73703233302d6173642d30303107616167726f6570026e6c0000010001 58d580000001000000020000116161782d73703233302d6173642d30303107616167726f6570026e6c0000010001c01e0002000100015180000d036e7330036f347303636f6d00c01e00020001000151800006036e7331c03e 34108 b70e3fe85011fae289310000000000000000 b70ebfe40000000000000000 34109 000000007002faf067a30000020405b401010402 000080010000000000000000 34110 f56b00000001000000000000037777770764656c65657374026e6c0000010001 f56b80000001000000020002037777770764656c65657374026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 34111 5ef900000001000000000000036e73320a7a65656c616e646e6574026e6c00001c0001 5ef980000001000000020002036e73320a7a65656c616e646e6574026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 34112 865600000001000000000000036e73320a7a65656c616e646e6574026e6c0000010001 865680000001000000020002036e73320a7a65656c616e646e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 34113 4b6700000001000000000000026e730a7a65656c616e646e6574026e6c00001c0001 4b6780000001000000020002026e730a7a65656c616e646e6574026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 34114 3aa200000001000000000000026e730a7a65656c616e646e6574026e6c0000010001 3aa280000001000000020002026e730a7a65656c616e646e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 34115 b70e3fe95010fae289300000000000000000 b70ebfe40000000000000000 34116 3dc300000001000000000000037777770c6631636f6d70657469746965026e6c0000010001 3dc380000001000000030003037777770c6631636f6d70657469746965026e6c0000010001c0100002000100015180000c036e7331056d61786573c01dc01000020001000151800006036e7332c035c01000020001000151800006036e7333c035c031000100010001518000045045402ec049000100010001518000045045402fc05b000100010001518000045045440a 34117 b70f07c45010faf0d5830000000000000000 b70f80010000000000000000 34118 b70f07c45018faf0907e0000009669e4000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd92403c4f120003000000374e544c4d535350000100000097b208e00e000e0029000000090009002000000053422d5345525645525a4f4e4e4556454c442d474f45530000 b70f80010000000000000000 34119 015200000001000000000000036e73340767617574656e67026e6c0000010001 015280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34120 295c00000001000000000000036e73340767617574656e67026e6c0000010001 295c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34121 b70f07d25011fae2d4ea0000000000000000 b70f80010000000000000000 34122 122b00000001000000000000037777770b775f67686f657261686f650b7374617274626577696a73026e6c0000010001 122b80000001000000020000037777770b775f67686f657261686f650b7374617274626577696a73026e6c0000010001c01c00020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c01c00020001000151800006036e7332c040 34123 90fa0000000100000000000006736572766572026462036b766b026e6c0000010001 90fa8000000100000002000206736572766572026462036b766b026e6c0000010001c0160002000100015180000d026e73076b6e6f77617265c01ac01600020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 34124 b70f07d35010fae2d4e90000000000000000 b70f80010000000000000000 34125 576800000001000000000000037777770b7468652d6f737472696368026e6c0000010001 576880000001000000020002037777770b7468652d6f737472696368026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c01cc01000020001000151800006036e7332c033c03000010001000151800004c3402003c04900010001000151800004c340202b 34126 a99f00000001000000000000047770616408677265656e6f636b026e6c0000010001 a99f80000001000000020000047770616408677265656e6f636b026e6c0000010001c01100020001000151800015036e73350b686f7374696e67776f7278036e657400c01100020001000151800006036e7336c032 34127 579a00000001000000000000037777770b616466697265776f726b73026e6c0000010001 579a80000001000000020002037777770b616466697265776f726b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 34128 d03f00000001000000000000046e733032066368656c6c6f026e6c00001c0001 d03f80000001000000030003046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 34129 22b700000001000000000000046e733032066368656c6c6f026e6c0000010001 22b780000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 34130 3a0d00000001000000000000036e733103757063026e6c00001c0001 3a0d80000001000000030003036e733103757063026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 34131 018000000001000000000000036e73330767617574656e67026e6c0000010001 018080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34132 0b7c00000001000000000000036e733103757063026e6c0000010001 0b7c80000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 34133 4d2000000001000000000000037777770a6e65756b77696a76656e026e6c0000010001 4d2080000001000000020002037777770a6e65756b77696a76656e026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01bc01000020001000151800006036e7332c033c02f00010001000151800004d4f1210bc04d00010001000151800004d4f1210c 34134 5c8900000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 5c8980000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34135 37e5000000010000000000000377777703687661026e6c0000010001 37e5800000010000000300030377777703687661026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800006036e7332c010c02800010001000151800004915c1202c03900010001000151800004c0576a65c05300010001000151800004915c2102 34136 10d400000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 10d480000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34137 8e7c00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 8e7c80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 34138 f92d00000001000000000000026e730f444f4d41494e2d5245474953545259024e4c00001c0001 f92d80000001000000030002026e730f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 34139 62ad00000001000000000000046865726101780463756369026e6c0000010001 62ad80000001000000030003046865726101780463756369026e6c0000010001c01300020001000151800002c00cc0130002000100015180000c066865726d6573026e6cc013c01300020001000151800009066865726d6573c011c00c00010001000151800004d47d8001c03a00010001000151800004c143ef02c05200010001000151800004d47d8002 34140 2a1e00000001000000000000036e73320f444f4d41494e2d5245474953545259024e4c00001c0001 2a1e80000001000000030002036e73320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34141 b9e10000000100000000000003777777087370656b6b656c73026e6c0000010001 b9e18000000100000002000203777777087370656b6b656c73026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d994ae77c04b000100010001518000045054ea06 34142 ca6e000000010000000000000365666f026e6c0000010001 ca6e800000010000000200020365666f026e6c0000010001c00c0002000100015180000d026e73076e6f7661776562c010c00c00020001000151800006036e7332c027c02400010001000151800004d5c4220bc03d00010001000151800004d5c4220c 34143 b7f900000001000000000000037777770c73706f7274766973616b7465026e6c0000010001 b7f980000001000000020000037777770c73706f7274766973616b7465026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c035 34144 d344000000010000000000000874656c6570616374026e6c0000010001 d344800000010000000200000874656c6570616374026e6c0000010001c00c0002000100015180000c026e7306656e6574636fc015c00c00020001000151800006036e7332c02c 34145 73c6001000010000000000000473726a76026e6c00000f0001 73c6800000010000000200000473726a76026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 34146 5a45000000010000000000000d7761727477616d7374656b6572026e6c0000ff0001 5a45800000010000000200000d7761727477616d7374656b6572026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c01ac00c00020001000151800006036e7332c031 34147 578c00000001000000000000046d737973026e6c00000f0001 578c80000001000000020002046d737973026e6c00000f0001c00c00020001000151800019036e73311277696e646b7261636874696e7465726e6574c011c00c00020001000151800006036e7332c029c0250001000100015180000450f2eea1c04a0001000100015180000450f2eea2 34148 38c8000000010000000000000377777704726f7663026e6c0000010001 38c8800000010000000300030377777704726f7663026e6c0000010001c0100002000100015180000e076e73617574683103626974c015c0100002000100015180000a076e736175746832c031c0100002000100015180000a076e736175746833c031c02900010001000151800004d5880c33c04300010001000151800004d5880c3bc05900010001000151800004d4ccc00b 34149 d9b7000000010000000000000372657409726f7474657264616d026e6c00000f0001 d9b7800000010000000300030372657409726f7474657264616d026e6c00000f0001c0100002000100015180000c0967616e796d65646573c010c01000020001000151800007046c656461c010c01000020001000151800014036e733203676e7309676574726f6e696373c01ac02e00010001000151800004d5c9cf50c04600010001000151800004d5c9cf19c05900010001000151800004910d2a05 34150 79280000000100000000000010696e7465726e65746865726c616e6473026e6c00000f0001 79288000000100000002000010696e7465726e65746865726c616e6473026e6c00000f0001c00c00020001000151800011036e73310764697265637435036e657400c00c00020001000151800006036e7332c035 34151 799800000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 799880000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34152 69a000000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 69a080000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34153 e62c00000001000000000000037777770e736578787879706c6161746a6573026e6c0000010001 e62c80000001000000020000037777770e736578787879706c6161746a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c036 34154 336228000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b517569636b6f6666696365026e6c00002100010000025800230000006400580c65786163742d7365727665720b517569636b6f6666696365026e6c00 3362a8040000000000000000 34155 9ec500000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 9ec580000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34156 aaf90000000100000000000011736974652d776f6f6e6469656e7374656e026e6c0000ff0001 aaf98000000100000002000011736974652d776f6f6e6469656e7374656e026e6c0000ff0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c03d 34157 0000000070024000d69200000204055001010402 000080010000000000000000 34158 f7d000000001000000000000036d783307646f6c66696a6e026e6c0000010001 f7d080000001000000030003036d783307646f6c66696a6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34159 718600000001000000000000036d783307646f6c66696a6e026e6c0000260001 718680000001000000030003036d783307646f6c66696a6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34160 374600000001000000000000046d786c3207646f6c66696a6e026e6c0000010001 374680000001000000030003046d786c3207646f6c66696a6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02d000100010001518000043e45a282c03f000100010001518000043e45a283c051000100010001518000043e45a284 34161 0c7300000001000000000000046d786c3207646f6c66696a6e026e6c0000260001 0c7380000001000000030003046d786c3207646f6c66696a6e026e6c0000260001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02d000100010001518000043e45a282c03f000100010001518000043e45a283c051000100010001518000043e45a284 34162 74f900000001000000000000036d783007646f6c66696a6e026e6c0000010001 74f980000001000000030003036d783007646f6c66696a6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34163 b711831550104510c3ab0000000000000000 34164 911a0000000100000000000009696e747261626f7577026e6c00000f0001 911a8000000100000002000209696e747261626f7577026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 34165 597300000001000000000000036d783007646f6c66696a6e026e6c0000260001 597380000001000000030003036d783007646f6c66696a6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34166 49a800000001000000000000036d783107646f6c66696a6e026e6c0000260001 49a880000001000000030003036d783107646f6c66696a6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34167 16fb00000001000000000000036d783207646f6c66696a6e026e6c0000010001 16fb80000001000000030003036d783207646f6c66696a6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34168 790f00000001000000000000036d783207646f6c66696a6e026e6c0000260001 790f80000001000000030003036d783207646f6c66696a6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34169 ed7b00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 ed7b80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 34170 310f00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 310f80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 34171 b711831550184510e4a100000096a500000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd50403c4ed00003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000 34172 1e8d00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 1e8d80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34173 32f600000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 32f680000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34174 474f00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 474f80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34175 c3b800000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 c3b880000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34176 b711832350114502c3120000000000000000 34177 0000000070024000542500000204055001010402 000080010000000000000000 34178 b711832450104502c3110000000000000000 34179 b7125b4b5010451069070000000000000000 b712db440000000000000000 34180 b7125b4b5018451033fe00000096fc00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd50403c4ed00003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000 b712db440000000000000000 34181 4f73000000010000000000000377777706616261637573026e6c0000010001 4f73800000010000000200010377777706616261637573026e6c0000010001c0100002000100015180000c026e7306636f62776562c017c01000020001000151800011026e73087363686970686f6c036e657400c02b0001000100015180000450f26001 34182 b7125b5950114502686e0000000000000000 b712db540000000000000000 34183 0000000070024000682c00000204055001010402 000080010000000000000000 34184 b572000000010000000000000377777708736578686176656e026e6c0000010001 b572800000010000000200000377777708736578686176656e026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 34185 b7125b5a50104502686d0000000000000000 b712db540000000000000000 34186 b71325bc50104510b29c0000000000000000 b713a5b30000000000000000 34187 a6980000000100000000000003626c3102626c06787334616c6c026e6c0000010001 a6988000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34188 b71325bc501845105d94000000961c00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd50403c4ed00003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000 b713a5b30000000000000000 34189 b0360000000100000000000006737472617573026e6c00000f0001 b0368000000100000002000206737472617573026e6c00000f0001c00c0002000100015180000c036e7331056773696e74c013c00c00020001000151800006036e7332c02bc02700010001000151800004510473b4c03f00010001000151800004510473b5 34190 80b5000000010000000000000377656d0c6c6f67696e73657276696365026e6c0000010001 80b5800000010000000200020377656d0c6c6f67696e73657276696365026e6c0000010001c0100002000100015180000e036e7331076e657463617374c01dc01000020001000151800006036e7332c035c03100010001000151800004c2970101c04b00010001000151800004c297012d 34191 2e6300000001000000000000116272616e64776565722d776f657264656e026e6c0000010001 2e6380000001000000030003116272616e64776565722d776f657264656e026e6c0000010001c00c0002000100015180000c036e73310564726f6e65c01ec00c0002000100015180000b036e73310468617661c01ec00c00020001000151800006036e7332c04ec03200010001000151800004d413ddc2c04a00010001000151800004d413ddc6c06100010001000151800004d413ddc7 34192 eef70000000100000000000003626c3102626c06787334616c6c026e6c0000010001 eef78000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34193 92b2000000010000000000001262616c616e6365642d73636f726563617264026e6c00000f0001 92b2800000010000000200021262616c616e6365642d73636f726563617264026e6c00000f0001c00c0002000100015180000a036e733103656964c01fc00c00020001000151800006036e7332c037c0330001000100015180000452c048b6c0490001000100015180000452c048ba 34194 b3ba00000001000000000000036e733106726f6f736974026e6c0000010001 b3ba80000001000000020002036e733106726f6f736974026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d41ac10ac03900010001000151800004d413c182 34195 c54d00000001000000000000036e733106726f6f736974026e6c00001c0001 c54d80000001000000020002036e733106726f6f736974026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d41ac10ac03900010001000151800004d413c182 34196 8b4200000001000000000000036e733206726f6f736974026e6c0000010001 8b4280000001000000020002036e733206726f6f736974026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d41ac10ac00c00010001000151800004d413c182 34197 aff800000001000000000000036e733206726f6f736974026e6c00001c0001 aff880000001000000020002036e733206726f6f736974026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d41ac10ac00c00010001000151800004d413c182 34198 efe700000001000000000000036e733206726f6f736974026e6c0000260001 efe780000001000000020002036e733206726f6f736974026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d41ac10ac00c00010001000151800004d413c182 34199 b71325ca50114502b2030000000000000000 b713a5c30000000000000000 34200 bb620000000100000000000003777777087a6f726768617274026e6c0000010001 bb628000000100000002000203777777087a6f726768617274026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c019c01000020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 34201 b71325cb50104502b2020000000000000000 b713a5c30000000000000000 34202 b7030000000100000000000003777777046b706d6702666908656d6561636f7265026e6c0000010001 b7038403000100000001000003777777046b706d6702666908656d6561636f7265026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 34203 f09500000001000000000000037777770770617261636f6d026e6c0000010001 f09580000001000000020000037777770770617261636f6d026e6c0000010001c0100002000100015180001505646e7332300961637469766569737003636f6d00c0100002000100015180000805646e733231c032 34204 7a66000000010000000000000377777710626c6f656d686f662d706c6569746572026e6c0000010001 7a66800000010000000200020377777710626c6f656d686f662d706c6569746572026e6c0000010001c01000020001000151800009036e7331026973c021c01000020001000151800006036e7332c039c03500010001000151800004d5852102c04a00010001000151800004d5c41503 34205 3f380000000100000000000007626f75776e6564026e6c00000f0001 3f388000000100000002000207626f75776e6564026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 34206 f50a00000001000000000000067368616e6b73026e6c00000f0001 f50a80000001000000020000067368616e6b73026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02b 34207 611900000001000000000000037777770a737472616174686f6572026e6c0000010001 611980000001000000020002037777770a737472616174686f6572026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01bc01000020001000151800006036e7332c033c02f00010001000151800004d5efa011c04a00010001000151800004d5efa075 34208 d3e2000000010000000000000e63656e747261616c626568656572026e6c00000f0001 d3e2800000010000000300030e63656e747261616c626568656572026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae 34209 9fb60000000100000000000005696e666f72026e6c00000f0001 9fb68000000100000002000205696e666f72026e6c00000f0001c00c00020001000151800010036e733109756e69736572766572c012c00c00020001000151800006036e7332c02ac02600010001000151800004c3454b03c04200010001000151800004d119a2fa 34210 870600000001000000000000026e73076e656473746174026e6c0000010001 870680000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34211 dda800000001000000000000036e7332076e656473746174026e6c0000010001 dda880000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34212 f7af00000001000000000000036e7334076e656473746174026e6c0000010001 f7af80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34213 7aef00000001000000000000036e7333076e656473746174026e6c0000010001 7aef80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34214 940900000001000000000000037777770674696261636f026e6c0000010001 940980000001000000020000037777770674696261636f026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c030 34215 9abd0000000100000000000003777777107665726f6e6963616d6167617a696e65026e6c0000010001 9abd8000000100000002000203777777107665726f6e6963616d6167617a696e65026e6c0000010001c0100002000100015180000f036e7331086261736971776562c021c01000020001000151800006036e7332c039c0350001000100015180000452c04516c0500001000100015180000452c04542 34216 a83b00000001000000000000026e73066863636e6574026e6c0000010001 a83b80000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 34217 badd00000001000000000000026e73066863636e6574026e6c0000260001 badd80000001000000020000026e73066863636e6574026e6c0000260001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 34218 098f00000001000000000000036e73330767617574656e67026e6c0000010001 098f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34219 d519000000010000000000000d76616e2d7765726b686f76656e026e6c00000f0001 d519800000010000000200020d76616e2d7765726b686f76656e026e6c00000f0001c00c0002000100015180001404777777320c6e656465726c616e64776562c01ac00c0002000100015180000d036e73320670726f6c616ec01ac02e00010001000151800004d5d381c2c04e00010001000151800004d4ccd4e7 34220 52ea000000010000000000000b77696c6c65646f6e6b6572026e6c00000f0001 52ea800000010000000200020b77696c6c65646f6e6b6572026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 34221 438300000001000000000000087665737464696a6b026e6c00000f0001 438380000001000000020002087665737464696a6b026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc015c00c00020001000151800006036e7332c02dc02900010001000151800004c3558244c04200010001000151800004c3558245 34222 229b00000001000000000000026e73086d656761706c6578026e6c0000010001 229b80000001000000020002026e73086d656761706c6578026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004504f6101c03a00010001000151800004504f6102 34223 679900000001000000000000036e7331086d656761706c6578026e6c0000010001 679980000001000000020002036e7331086d656761706c6578026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004504f6101c00c00010001000151800004504f6102 34224 708100000001000000000000036e733503777873026e6c0000010001 708180000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 34225 63ab00000001000000000000046e73303803777873026e6c0000010001 63ab80000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 34226 d96c00000001000000000000046e73303903777873026e6c0000010001 d96c80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 34227 80d200000001000000000000037777770763616e6e6f6e73026e6c0000010001 80d280000001000000020002037777770763616e6e6f6e73026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c018c01000020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 34228 714000000001000000000000076d696e76726f6d026e6c0000020001 714080000001000000020001076d696e76726f6d026e6c0000020001c00c00020001000151800006036e7331c00cc00c0002000100015180000d036e7334036b706e036e657400c0280001000100015180000493b51441 34229 59a0000000010000000000000d706f726e6f706c6161746a65730a6164756c746c696e6b73026e6c0000010001 59a0800000010000000200000d706f726e6f706c6161746a65730a6164756c746c696e6b73026e6c0000010001c01a00020001000151800012026e73096e6c686f7374696e67036e657400c01a00020001000151800006036e7331c03c 34230 1dc00000000100000000000005737461747308696e672d6562636e026e6c0000010001 1dc08000000100000002000205737461747308696e672d6562636e026e6c0000010001c0120002000100015180000a036e733103696e67c01bc01200020001000151800006036e7332c033c02f0001000100015180000491dd19c2c0450001000100015180000491dd5dc2 34231 470c000000010000000000000377777705692d737973026e6c0000010001 470c800000010000000300000377777705692d737973026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c02ec01000020001000151800006036e7333c02e 34232 5ade00000001000000000000056861696a65026e6c0000010001 5ade80000001000000020002056861696a65026e6c0000010001c00c0002000100015180000e026e73086475746368636f77c012c00c00020001000151800006036e7332c029c02600010001000151800004d9aa2158c0400001000100015180000452a1510d 34233 7e3a0000000100000000000003777777127269657464696a6b2d7665696c696e67656e026e6c0000010001 7e3a8000000100000002000003777777127269657464696a6b2d7665696c696e67656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03d 34234 548200000001000000000000055045555445024e4c00000f0001 548280000001000000020000055045555445024e4c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 34235 787f000000010000000000000377777710726976657276616c6c657972616e6368026e6c0000010001 787f800000010000000200020377777710726976657276616c6c657972616e6368026e6c0000010001c0100002000100015180000f026e7309656174736572766572c021c01000020001000151800006036e7332c038c03500010001000151800004d4cb0e42c05000010001000151800004d4cb1221 34236 2c6d000000010000000000000864656c746170616b026e6c0000ff0001 2c6d800000010000000200010864656c746170616b026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 34237 4a17000000010000000000000a77776f63756d756c7573026e6c00000f0001 4a17800000010000000200020a77776f63756d756c7573026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 34238 c409000000010000000000001376616e64656e626f6f676161726467726f6570026e6c00000f0001 c409800000010000000200021376616e64656e626f6f676161726467726f6570026e6c00000f0001c00c00020001000151800014026e730e64617461636f6e686f7374696e67c020c00c00020001000151800006036e7332c037c03400010001000151800004d43d2934c05400010001000151800004d468d143 34239 3a95000000010000000000000b6d65726469616e6d6b7467026e6c00000f0001 3a95840300010000000100000b6d65726469616e6d6b7467026e6c00000f0001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 34240 35c200000001000000000000066479636f7265026e6c00000f0001 35c280000001000000030003066479636f7265026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c013c00c000200010001518000070470726932c02cc00c000200010001518000070470726933c02cc027000100010001518000049a0ff9a6c045000100010001518000049a0ff9aac058000100010001518000049a0ff9ae 34241 09f100000001000000000000036e73310470696e65026e6c0000010001 09f180000001000000020002036e73310470696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d59c0201c03700010001000151800004c3c1a303 34242 9bbe0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 9bbe8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34243 423c00000001000000000000036e73320470696e65026e6c0000010001 423c80000001000000020002036e73320470696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d59c0201c00c00010001000151800004c3c1a303 34244 6d68000000010000000000000377777707646967696d6d6f026e6c0000010001 6d68800000010000000300000377777707646967696d6d6f026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c032c0100002000100015180000805646e733132c032 34245 6f40000000010000000000000377777705646964646c026e6c0000010001 6f40800000010000000300000377777705646964646c026e6c0000010001c0100002000100015180000f036e7332066d63732d686802646500c01000020001000151800005026e73c02ec0100002000100015180001b026e73096f6c64656e6275726708636974796c696e65036e657400 34246 fb6d00000001000000000000036e7331086c65617365776562026e6c0000010001 fb6d80000001000000030002036e7331086c65617365776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800012036e7333086c65617365776562036f726700c00c000100010001518000043ed44079c03b000100010001518000043ed4407a 34247 b14900000001000000000000036e7332086c65617365776562026e6c0000010001 b14980000001000000030002036e7332086c65617365776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800012036e7333086c65617365776562036f726700c02d000100010001518000043ed44079c00c000100010001518000043ed4407a 34248 f11528000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b7768697a7a646f6d706463026e6c00002100010000025800230000006401850c7768697a7a646f6d706463300b7768697a7a646f6d706463026e6c00 f115a8040000000000000000 34249 c67a0000000100000000000003636673026e6c0000ff0001 c67a8000000100000003000103636673026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 34250 00000000700240000baa0000020405b401010402 000080010000000000000000 34251 b71514c55010447068130000000000000000 b71594c40000000000000000 34252 b71514c550184470206000000096ac6a000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0089403c52090003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000 b71594c40000000000000000 34253 dbb5000000010000000000000573746174730a6c61646f747374617473026e6c0000010001 dbb5800000010000000300000573746174730a6c61646f747374617473026e6c0000010001c0120002000100015180001505646e7331300961637469766569737003636f6d00c0120002000100015180000805646e733131c037c0120002000100015180000805646e733132c037 34254 0d1c0000000100000000000009626f6f6e656b616d70026e6c0000ff0001 0d1c8000000100000002000209626f6f6e656b616d70026e6c0000ff0001c00c0002000100015180000c036e733105636176656fc016c00c00020001000151800006036e7332c02ec02a000100010001518000045112a002c042000100010001518000045112a102 34255 21dd0000000100000000000009652d6c756e61746963026e6c0000010001 21dd8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34256 f1ea00000001000000000000037777770c6163686d65616865616c7468026e6c0000010001 f1ea80000001000000030003037777770c6163686d65616865616c7468026e6c0000010001c01000020001000151800012047072693103646e73067073696e6574c01dc010000200010001518000070470726932c036c010000200010001518000070470726933c036c031000100010001518000049a0ff9a6c04f000100010001518000049a0ff9aac062000100010001518000049a0ff9ae 34257 a56f00000001000000000000036e733104686f6d65026e6c0000010001 a56f80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 34258 b71514d350114462677a0000000000000000 b71594d40000000000000000 34259 94aa00000001000000000000037777770d7472757374796f757265796573026e6c0000010001 94aa80000001000000030000037777770d7472757374796f757265796573026e6c0000010001c01000020001000151800014036e73310a616c6c646f6d61696e7303636f6d00c01000020001000151800006036e7333c036c01000020001000151800006036e7334c036 34260 000000007002400028780000020405b401010402 000080010000000000000000 34261 b71514d45010446267790000000000000000 b71594d40000000000000000 34262 3b900000000100000000000009736d74702d6f75743506787334616c6c026e6c0000010001 3b908000000100000003000209736d74702d6f75743506787334616c6c026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000d026e730472697065036e657400c03100010001000151800004c26d0642c04200010001000151800004c26d0963 34263 6e0400000001000000000000036e7331086c65617365776562026e6c0000010001 6e0480000001000000030002036e7331086c65617365776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800012036e7333086c65617365776562036f726700c00c000100010001518000043ed44079c03b000100010001518000043ed4407a 34264 b715995c50104470004a0000000000000000 34265 b715995c50184470d805000000968dfc000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0089403c52090003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000 34266 a8c800000001000000000000036e733109666972737466696e64026e6c0000010001 a8c880000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34267 a8c900000001000000000000036e733209666972737466696e64026e6c0000010001 a8c980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34268 885d0000000100000000000004616a6178066e696b686566026e6c0000010001 885d8000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 34269 b715996a50114462ffb00000000000000000 34270 a0a2000000010000000000000377777707617669616e6574026e6c0000010001 a0a2800000010000000300030377777707617669616e6574026e6c0000010001c01000020001000151800010036e733109736974656279746573c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004c2a55e5ac04800010001000151800004c356781cc05a000100010001518000043ec58016 34271 b715996b50104462ffaf0000000000000000 34272 b86000000001000000000000037777770a73746f6c696272696473026e6c0000010001 b86084030001000000010000037777770a73746f6c696272696473026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 34273 0000000070024000382b0000020405b401010402 000080010000000000000000 34274 92740000000100000000000003777777126772656964616e75737a6f6e776572696e67026e6c0000010001 92748000000100000003000303777777126772656964616e75737a6f6e776572696e67026e6c0000010001c01000020001000151800010036e733109736974656279746573c023c01000020001000151800006036e7332c03bc01000020001000151800006036e7333c03bc03700010001000151800004c2a55e5ac05300010001000151800004c356781cc065000100010001518000043ec58016 34275 b71666215010447043370000000000000000 b716e6240000000000000000 34276 b716662150184470b65200000096f29c000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403b0089403c52090003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c00200000005748495a5a444f4d504443305748495a5a444f4d5044430000 b716e6240000000000000000 34277 a8cb00000001000000000000036e733109666972737466696e64026e6c0000010001 a8cb80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34278 a8cc00000001000000000000036e733209666972737466696e64026e6c0000010001 a8cc80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34279 b716662f50114462429e0000000000000000 b716e6240000000000000000 34280 9ccc00000001000000000000096e646572766c696574026e6c00000f0001 9ccc80000001000000020002096e646572766c696574026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 34281 b716663050104462429d0000000000000000 b716e6340000000000000000 34282 52f1000000010000000000000b6376766f6f726265656c64026e6c0000010001 52f1840300010000000100000b6376766f6f726265656c64026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 34283 360d00000001000000000000076f62646e772d6e026e6c00000f000100 360d80000001000000020002076f62646e772d6e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 34284 7e4400000001000000000000037777770774686965727279026e6c0000010001 7e4480000001000000030001037777770774686965727279026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 34285 568c00000001000000000000176c616e6b686f7273742d746f75776661627269656b656e026e6c0000010001 568c80000001000000020001176c616e6b686f7273742d746f75776661627269656b656e026e6c0000010001c00c0002000100015180000d026e7307616d6572636f6dc024c00c00020001000151800006036e7331c03bc03800010001000151800004c2b2b20a 34286 1f2900000001000000000000037777770e686f6f67636174686572696a6e65026e6c0000010001 1f2984030001000000010000037777770e686f6f67636174686572696a6e65026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 34287 877200000001000000000000026e7307616d6572636f6d026e6c0000010001 877280000001000000020001026e7307616d6572636f6d026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c2b2b20a 34288 43b900000001000000000000036e733107616d6572636f6d026e6c0000010001 43b980000001000000020001036e733107616d6572636f6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02c00010001000151800004c2b2b20a 34289 e2a30000000100000000000006746f6c6b656e026e6c00000f0001 e2a38000000100000002000206746f6c6b656e026e6c00000f0001c00c00020001000151800010036e7331096d6173746572646e73c013c00c00020001000151800006036e7332c02bc027000100010001518000045054f347c043000100010001518000043e94a047 34290 000000007002fc009d690000020405b401010402 000080010000000000000000 34291 ea6100000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001 ea6184030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001c05300060001000038400036026e730f646f6d61696e2d7265676973747279c0530a686f73746d6173746572c06a0bf1e540000070800000384000278d0000003840 34292 498400000001000000000000076163687469656e026e6c00000f0001 498480000001000000020002076163687469656e026e6c00000f0001c00c0002000100015180000d036e73310662616c616e73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d5f72d87c04100010001000151800004d5f72d88 34293 5460000000010000000000000c76616e64656e626f67657264026e6c0000010001 5460800000010000000200000c76616e64656e626f67657264026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 34294 12000000000100000000000009652d6c756e61746963026e6c0000010001 12008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34295 7ed3000000010000000000000377777706666f6b73756b026e6c0000010001 7ed3800000010000000200020377777706666f6b73756b026e6c0000010001c0100002000100015180000a036e733103677673c017c01000020001000151800006036e7332c02fc02b000100010001518000045054e1aac04100010001000151800004d4ccc646 34296 22a00000000100000000000009652d6c756e61746963026e6c0000010001 22a08000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34297 2aa80000000100000000000009652d6c756e61746963026e6c0000010001 2aa88000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34298 b716edb85010fc00254e0000000000000000 34299 b716edb85004fc00255a0000000000000000 34300 460e00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 460e80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34301 67fa00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 67fa80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34302 219100000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001 219184030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463731247696c646576616172742d576f657264656e026e6c0000060001c05300060001000038400036026e730f646f6d61696e2d7265676973747279c0530a686f73746d6173746572c06a0bf1e540000070800000384000278d0000003840 34303 2cf50000000100000000000005696e666f72026e6c00000f0001 2cf58000000100000002000205696e666f72026e6c00000f0001c00c00020001000151800010036e733109756e69736572766572c012c00c00020001000151800006036e7332c02ac02600010001000151800004c3454b03c04200010001000151800004d119a2fa 34304 7bd300000001000000000000037777770c6b65756b656e766973696f6e026e6c0000010001 7bd380000001000000030003037777770c6b65756b656e766973696f6e026e6c0000010001c0100002000100015180000f036e7331086e6f766178657373c01dc01000020001000151800006036e7332c035c01000020001000151800006036e7333c035c03100010001000151800004d5c98015c04c00010001000151800004d5c9bf12c05e00010001000151800004d5ef9c26 34305 950200000001000000000000036e73310767617574656e67026e6c0000010001 950280000001000000020000036e73310767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34306 cf0c00000001000000000000036e73320767617574656e67026e6c0000010001 cf0c80000001000000020000036e73320767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34307 59760000000100000000000006646e642d6273026e6c0000010001 59768000000100000002000206646e642d6273026e6c0000010001c00c0002000100015180000d04646e733105692d702d64c013c00c0002000100015180000704646e7332c02cc02700010001000151800004d9124003c04000010001000151800004d9124104 34308 217c0000000100000000000004524e4c41064d494e444546024e4c00000f0001 217c8000000100000002000204524e4c41064d494e444546024e4c00000f0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02c00010001000151800004d9a9e7c6c03e00010001000151800004d9a9e7c5 34309 09b000000001000000000000036e733503777873026e6c0000010001 09b080000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 34310 74d00000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 74d08000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 34311 b28800000001000000000000046d61696c15627275676d616e737665727a656b6572696e67656e026e6c0000010001 b28880000001000000020002046d61696c15627275676d616e737665727a656b6572696e67656e026e6c0000010001c0110002000100015180000f026e7309656174736572766572c027c01100020001000151800006036e7332c03ec03b00010001000151800004d4cb0e42c05600010001000151800004d4cb1221 34312 0f7000000001000000000000036e733105636176656f026e6c0000010001 0f7080000001000000020002036e733105636176656f026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045112a002c038000100010001518000045112a102 34313 8bb300000001000000000000036e733205636176656f026e6c0000010001 8bb380000001000000020002036e733205636176656f026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000045112a002c00c000100010001518000045112a102 34314 199400000001000000000000036e73340767617574656e67026e6c0000010001 199480000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34315 ceca00000001000000000000026e730b6973642d686f6c6c616e64026e6c0000010001 ceca80000001000000020002026e730b6973642d686f6c6c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 34316 e76500000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000010001 e76580000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 34317 6b1400000001000000000000026e730b6973642d686f6c6c616e64026e6c0000260001 6b1480000001000000020002026e730b6973642d686f6c6c616e64026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 34318 358a00000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000260001 358a80000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 34319 885e28000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730e6265726b656e626f7363686e6574026e6c000021000100000258001d000000640cc4036673310e6265726b656e626f7363686e6574026e6c00 885ea8040000000000000000 34320 de62000000010000000000000b7472656e642d706f696e74026e6c00000f0001 de62800000010000000300010b7472656e642d706f696e74026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc018c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ac02c000100010001518000043efa0202 34321 ceba000000010000000000000d70726f6475637462616e6e657208313233706c617a61026e6c0000010001 ceba800000010000000200010d70726f6475637462616e6e657208313233706c617a61026e6c0000010001c01a0002000100015180000e036e7331076e6564636f6d70c023c01a00020001000151800011036e7332076e6564636f6d70036f726700c03700010001000151800004c3c1a80d 34322 f91b0000000100000000000003777777056275626c7903313233026e6c0000010001 f91b8000000100000002000203777777056275626c7903313233026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 34323 9d1800000001000000000000037777770372746c026e6c0000010001 9d1880000001000000020001037777770372746c026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c014c01000020001000151800011036e733207636c742d756661036e657400c02800010001000151800004c3c1ca77 34324 c15700000001000000000000037777770d61636d652d736f667477617265026e6c0000010001 c15780000001000000020002037777770d61636d652d736f667477617265026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec01ec01000020001000151800006036e7332c036c03200010001000151800004c3b1f203c05000010001000151800004d4ccf533 34325 063200000001000000000000036c733204656d6167026e6c00000f0001 063280000001000000020001036c733204656d6167026e6c00000f0001c0100002000100015180000e036e7331076e6564636f6d70c015c01000020001000151800011036e7332076e6564636f6d70036f726700c02900010001000151800004c3c1a80d 34326 0000000070024000b2e800000204059801010402 000080010000000000000000 34327 218c0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 218c8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 34328 b717c4505010432060f80000000000000000 34329 b717c450501843209c70000000905f78000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000 34330 b717c45e5011431260650000000000000000 34331 b1c20000000100000000000004736d747008676c6f62616c7873026e6c00001c0001 b1c28000000100000002000204736d747008676c6f62616c7873026e6c00001c0001c01100020001000151800017036e733110736361726c65742d696e7465726e6574c01ac01100020001000151800006036e7332c032c02e00010001000151800004d5ccc302c05100010001000151800004d5ccc303 34332 12c40000000100000000000005736d74703208676c6f62616c7873026e6c00001c0001 12c48000000100000002000205736d74703208676c6f62616c7873026e6c00001c0001c01200020001000151800017036e733110736361726c65742d696e7465726e6574c01bc01200020001000151800006036e7332c033c02f00010001000151800004d5ccc302c05200010001000151800004d5ccc303 34333 2bbd000000010000000000000c76616e616b656e64656d6f6e026e6c00000f0001 2bbd840300010000000100000c76616e616b656e64656d6f6e026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 34334 03a8000000010000000000000e7269636172646f626172696c6c6f026e6c00000f0001 03a8800000010000000200020e7269636172646f626172696c6c6f026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c01bc00c00020001000151800006036e7332c032c02f00010001000151800004d453c005c04d00010001000151800004d453c006 34335 b717c45f5010431260640000000000000000 34336 40e000000001000000000000026e73067a6f6e6e6574026e6c0000010001 40e080000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 34337 ea580000000100000000000003777777086e6f6b696166616e026e6c0000010001 ea588000000100000003000203777777086e6f6b696166616e026e6c0000010001c0100002000100015180000f036e7331086f76657272696465c019c01000020001000151800006036e7333c031c01000020001000151800006036e7332c031c02d00010001000151800004d4ccd5b5c0480001000100015180000451ab0942 34338 9ff0000000010000000000000a54455a554b41434f5250026e6c0000020001 9ff0840300010000000100000a54455a554b41434f5250026e6c0000020001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 34339 20a20000000100000000000008686f73746e616d650462696e640000100003 20a28000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 34340 89b400000001000000000000037777770a6261642d6b6f6e696e67026e6c0000010001 89b480000001000000020002037777770a6261642d6b6f6e696e67026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01bc01000020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 34341 3c3c00000001000000000000026e7306787334616c6c026e6c0000010001 3c3c80000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 34342 7cdf0000000100000000000005646e732d31056c61646f74026e6c0000010001 7cdf8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34343 ecb00000000100000000000005646e732d32056c61646f74026e6c0000010001 ecb08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34344 4fb80000000100000000000003706f7008707265776f6e656e026e6c0000010001 4fb88000000100000003000203706f7008707265776f6e656e026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 34345 1e1e00000001000000000000036e733206787334616c6c026e6c0000010001 1e1e80000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 34346 0000000070024000514e00000204059801010402 000080010000000000000000 34347 96e400000001000000000000086d6972726f72656407666c6162626572026e6c0000010001 96e480000001000000030002086d6972726f72656407666c6162626572026e6c0000010001c0150002000100015180000d036e733106776964657873c01dc01500020001000151800010036e733206776964657873036e657400c01500020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 34348 5eae000000010000000000000377777706636865657273026e6c0000010001 5eae800000010000000300010377777706636865657273026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 34349 b71a45bc501043207def0000000000000000 b71ac5b40000000000000000 34350 2f5700000001000000000000037777770c746f70686f726f73636f6f70026e6c0000010001 2f5780000001000000020002037777770c746f70686f726f73636f6f70026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01dc01000020001000151800006036e7332c035c03100010001000151800004d4f1210bc04f00010001000151800004d4f1210c 34351 1a420000000100000000000006736c6967726f026e6c00000f0001 1a428000000100000002000006736c6967726f026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02b 34352 b71a45bc501843207c38000000909da8000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000 b71ac5b40000000000000000 34353 5ba600000001000000000000096b756c747572687573026e6c00000f0001 5ba680000001000000020002096b756c747572687573026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c016c00c00020001000151800006036e7332c02ec02a0001000100015180000450416028c04500010001000151800004c356780c 34354 b71a45ca501143127d5c0000000000000000 b71ac5c40000000000000000 34355 a5d8000000010000000000000377777708616363656e747573026e6c0000010001 a5d8800000010000000200020377777708616363656e747573026e6c0000010001c0100002000100015180000d036e73310663617374656cc019c01000020001000151800006036e7332c031c02d00010001000151800004c3558244c04600010001000151800004c3558245 34356 76950000000100000000000005646e732d32056c61646f74026e6c0000010001 76958000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34357 b71a45cb501043127d5b0000000000000000 b71ac5c40000000000000000 34358 1d340000000100000000000008677565726e73657902657407747564656c6674026e6c0000010001 1d348000000100000005000508677565726e73657902657407747564656c6674026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c01800020001000151800006036e7331c015c0180002000100015180000d07647574746e636202746ec018c0180002000100015180000e036e733107737572666e6574c020c0340001000100015180000482a1b401c0460001000100015180000482a1b441c0580001000100015180000482a12111c06a0001000100015180000482a1bc8cc08300010001000151800004c0576a65 34359 0cc80000000100000000000005646e732d32056c61646f74026e6c0000010001 0cc88000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34360 8758000000010000000000000b627261616d6a6f6e6b657203313072026e6c0000010001 8758800000010000000200020b627261616d6a6f6e6b657203313072026e6c0000010001c0180002000100015180000f036e73310861746c616e74697ac01cc01800020001000151800006036e7332c034c03000010001000151800004d5efa011c04b00010001000151800004d5efa075 34361 493400000001000000000000037777770f6e65747a6f2d616d7374657264616d026e6c0000010001 493480000001000000030000037777770f6e65747a6f2d616d7374657264616d026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c03ac0100002000100015180000805646e733132c03a 34362 61f60000000100000000000005646e732d32056c61646f74026e6c0000010001 61f68000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34363 000000007002400019b400000204059801010402 000080010000000000000000 34364 b71b20f9501043206b170000000000000000 b71ba0f30000000000000000 34365 3a0500000001000000000000036e73310c6e6578742d656c656d656e74026e6c0000010001 3a0580000001000000020002036e73310c6e6578742d656c656d656e74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004515ea104c03f00010001000151800004515ea105 34366 5c6c00100001000000000001036e73310774697363616c69026e6c00000100010000290800000080000000 5c6c80000001000000030003036e73310774697363616c69026e6c0000010001c0100002000100015180000704616e7331c010c0100002000100015180000704616e7332c010c0100002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c03f00010001000151800004c3f133250000291000000000000000 34367 cf0e00000001000000000000026e73096379626572636f6d6d026e6c0000010001 cf0e80000001000000030003026e73096379626572636f6d6d026e6c0000010001c00f00020001000151800017036e733110736361726c65742d696e7465726e6574c019c00f00020001000151800006036e7332c031c00f00020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 34368 2c6d0000000100000000000005646e732d32056c61646f74026e6c0000010001 2c6d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34369 b71b20f9501843202b3000000090dbd8000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000 b71ba0f30000000000000000 34370 c4f800000001000000000000037777770d77616c6c737472656574776562026e6c0000010001 c4f880000001000000020002037777770d77616c6c737472656574776562026e6c0000010001c01000020001000151800009036e7331026973c01ec01000020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 34371 e0c70010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 e0c78000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 34372 4f91000000010000000000000377777710696e746572656666656b7466756e6473026e6c0000010001 4f91800000010000000200020377777710696e746572656666656b7466756e6473026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c021c01000020001000151800006036e7332c038c03500010001000151800004d5e38d0ac05200010001000151800004d5e38205 34373 ee12000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 ee12800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 34374 b71b2107501143126a840000000000000000 b71ba1030000000000000000 34375 a0c500000001000000000000136a6f682d656e7363686564652d7374616d7073026e6c00000f0001 a0c580000001000000020000136a6f682d656e7363686564652d7374616d7073026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c03a 34376 b71b2108501043126a830000000000000000 b71ba1030000000000000000 34377 177400100001000000000001036e73320774697363616c69026e6c00000100010000290800000080000000 177480000001000000030003036e73320774697363616c69026e6c0000010001c0100002000100015180000704616e7331c010c0100002000100015180000704616e7332c010c0100002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c03f00010001000151800004c3f133250000291000000000000000 34378 e31b00000001000000000000037777770d747269626f746563686e69656b026e6c0000010001 e31b80000001000000020000037777770d747269626f746563686e69656b026e6c0000010001c0100002000100015180000c026e7306766576696461c01ec01000020001000151800006036e7332c035 34379 ece9000000010000000000000e74656b656e6275726f736d696e6b026e6c0000ff0001 ece9800000010000000200020e74656b656e6275726f736d696e6b026e6c0000ff0001c00c00020001000151800011026e730b6973642d686f6c6c616e64c01bc00c00020001000151800006036e7332c032c02f00010001000151800004d5e38d0ac04c00010001000151800004d5e38205 34380 26000000000100000000000003767664026e6c00000f0001 26008000000100000002000003767664026e6c00000f0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c028 34381 40d5000000010000000000000664796e736f6c026e6c0000060001 40d5840300010000000100000664796e736f6c026e6c0000060001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 34382 449400000001000000000000037777770b76762d6e756e7370656574026e6c0000010001 449480000001000000020000037777770b76762d6e756e7370656574026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c033 34383 374d00100001000000000001026e7306787334616c6c026e6c00000100010000290800000080000000 374d80000001000000030003026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 34384 e73700100001000000000001036e733206787334616c6c026e6c00000100010000290800000080000000 e73780000001000000030003036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d09630000291000000000000000 34385 505300000001000000000000047072693103646e73067073696e6574026e6c0000010001 505380000001000000030003047072693103646e73067073696e6574026e6c0000010001c01500020001000151800002c00cc015000200010001518000070470726932c011c015000200010001518000070470726933c011c00c000100010001518000049a0ff9a6c03e000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 34386 61c6000000010000000000000c636f6e666967757261746f72046f70656c026e6c0000010001 61c6800000010000000200020c636f6e666967757261746f72046f70656c026e6c0000010001c0190002000100015180000c036e73310564656d6f6ec01ec01900020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 34387 545e00000001000000000000047072693203646e73067073696e6574026e6c0000010001 545e80000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 34388 aa2f00000001000000000000047072693303646e73067073696e6574026e6c0000010001 aa2f80000001000000030003047072693303646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c01500020001000151800002c00cc030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac00c000100010001518000049a0ff9ae 34389 686f00000001000000000000037777770f696e6e6f7465632d73797374656d73026e6c0000010001 686f80000001000000020002037777770f696e6e6f7465632d73797374656d73026e6c0000010001c01000020001000151800009026e7303746478c020c01000020001000151800006036e7331c037c03400010001000151800004c389d60ac04900010001000151800004c389d70a 34390 7b540000000100000000000005646e732d32056c61646f74026e6c0000010001 7b548000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34391 81c400000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 81c480000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34392 918d0000000100000000000008736372616d626c6505796b6f6f6e026e6c0000010001 918d8000000100000002000008736372616d626c6505796b6f6f6e026e6c0000010001c0150002000100015180000f036e733105796b6f6f6e036e657400c01500020001000151800006036e7332c033 34393 b8770000000100000000000003626c3102626c06787334616c6c026e6c0000010001 b8778000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34394 5f8c0000000100000000000005646e732d32056c61646f74026e6c0000010001 5f8c8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34395 966200000001000000000000046d61696c06646564726f6d026e6c0000010001 966280000001000000020002046d61696c06646564726f6d026e6c0000010001c0110002000100015180000f026e7309656174736572766572c018c01100020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 34396 55c928000001000000010000026e6c00000600010664796e736f6c026e6c00000100010000025800040a000002 55c9a8040000000000000000 34397 5904000000010000000000000c737469636874696e6770646c026e6c0000010001 5904800000010000000200000c737469636874696e6770646c026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c033 34398 3a9a0000000100000000000007766462636f6d70026e6c00001c0001 3a9a8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 34399 953a00100001000000000001034e53320743495354524f4e024e4c00000100010000290800000000000000 953a80000001000000020003034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 34400 c2f800100001000000000001034e53320743495354524f4e024e4c00002600010000290800000000000000 c2f880000001000000020003034e53320743495354524f4e024e4c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 34401 0000000070024000c1f20000020405b401010402 000080010000000000000000 34402 9b66000000010000000000000466646467026e6c0000010001 9b66800000010000000200020466646467026e6c0000010001c00c0002000100015180000e026e73086d656761706c6578c011c00c00020001000151800006036e7331c028c02500010001000151800004504f6101c03f00010001000151800004504f6102 34403 892a00000001000000000000036e7332086d65646961776562026e6c0000010001 892a80000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 34404 a31b0000000100000000000007726f78616e6e61026e6c0000ff0001 a31b8000000100000002000007726f78616e6e61026e6c0000ff0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02e 34405 b71bae6b5010447084af0000000000000000 34406 93f400000001000000000000034e53320743495354524f4e024e4c0000010001 93f480000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 34407 cacf00000001000000000000034e53320743495354524f4e024e4c0000260001 cacf80000001000000020002034e53320743495354524f4e024e4c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 34408 e934000000010000000000000477756d6e07776567656e6572026e6c0000010001 e934800000010000000300020477756d6e07776567656e6572026e6c0000010001c0110002000100015180000e036e7331076e657463617374c019c01100020001000151800006036e7332c031c0110002000100015180000d036e7332036b706e036e657400c02d00010001000151800004c2970101c04700010001000151800004c297012d 34409 2f1f0000000100000000000003777777077768656b616d70026e6c0000010001 2f1f8000000100000002000003777777077768656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 34410 b71bae6b50184470db5a0000008f3280000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdc9403c4f490003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000 34411 1dfb00000001000000000000026e73076e656473746174026e6c0000010001 1dfb80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34412 a3f40000000100000000000008766572736174656c026e6c00000f0001 a3f48000000100000002000108766572736174656c026e6c00000f0001c00c00020001000151800012036e733108766572736174656c03636f6d00c00c0002000100015180000c036e73310563736e6574c015c04700010001000151800004c2451012 34413 b71bae7950114462841d0000000000000000 34414 0dc800000001000000000000037777770a6461726b6c6f76657273026e6c0000010001 0dc880000001000000020002037777770a6461726b6c6f76657273026e6c0000010001c0100002000100015180000b036e7331046e732d31c01bc01000020001000151800006036e7332c033c02f000100010001518000045045a0cdc04600010001000151800004d4cceec8 34415 000000007002400076f80000020405b401010402 000080010000000000000000 34416 73f800000001000000000000026e73076e656473746174026e6c0000010001 73f880000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34417 a13900000001000000000000036e7333076e656473746174026e6c0000010001 a13980000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34418 acc600000001000000000000037777770763616e6e6f6e73026e6c0000010001 acc680000001000000020002037777770763616e6e6f6e73026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c018c01000020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 34419 b71bae7a50104462841c0000000000000000 34420 fe7700100001000000000001036e7332076e656473746174026e6c00000100010000290800000080000000 fe7780000001000000020003036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34421 870300100001000000000001036e7334076e656473746174026e6c00000100010000290800000080000000 870380000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34422 b71c76fc5010447071230000000000000000 b71cf6f40000000000000000 34423 105d00000001000000000000036e733208726f616473696465026e6c0000010001 105d80000001000000020001036e733208726f616473696465026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180001108726f6164736964650564656d6f6ec019c02d00010001000151800004d973c077 34424 ce220000000100000000000003777777067069736b7574026e6c0000010001 ce228000000100000002000203777777067069736b7574026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c017c01000020001000151800006036e7332c02fc02b000100010001518000045054e415c0470001000100015180000451046014 34425 58f6000000010000000000000c7777772c617175616d6f7265026e6c0000010001 58f6840300010000000100000c7777772c617175616d6f7265026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 34426 886728000001000000010000026e6c0000060001055f6c646170045f7463702461653133643537312d333532662d346137612d623962362d31366231383634363139353007646f6d61696e73065f6d736463730e6265726b656e626f7363686e6574026e6c000021000100000258001d000000640185036673310e6265726b656e626f7363686e6574026e6c00 8867a8040000000000000000 34427 02cf000000010000000000000b72696f766f6f727a6f7267026e6c00000f0001 02cf800000010000000200000b72696f766f6f727a6f7267026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 34428 814d00000001000000000000037777770a686974626f6f73746572026e6c0000010001 814d80000001000000020000037777770a686974626f6f73746572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 34429 b71c76fc5018447011cf0000008fe780000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdca403c4f4a0003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000 b71cf6f40000000000000000 34430 26bd0000000100000000000005736d7470310378626e024e4c0000010001 26bd8000000100000002000005736d7470310378626e024e4c0000010001c0120002000100015180000f036e73310571696e6970036e657400c01200020001000151800006036e7332c02e 34431 c4d7000000010000000000000d6177736265746572776f6e656e026e6c00000f0001 c4d7800000010000000200020d6177736265746572776f6e656e026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c01ac00c00020001000151800006036e7332c032c02e0001000100015180000450416028c04900010001000151800004c356780c 34432 5d87000000010000000000000f64616b76656e74696c61746f72656e1376656e74696c61746f72656e2d676576656b65026e6c0000010001 5d87800000010000000200020f64616b76656e74696c61746f72656e1376656e74696c61746f72656e2d676576656b65026e6c0000010001c01c0002000100015180000a036e733103696166c030c01c00020001000151800006036e7332c048c044000100010001518000045059e040c05a000100010001518000045059ee03 34433 15a900000001000000000000037777770462656566026e6c0000010001 15a980000001000000030002037777770462656566026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 34434 800c00000001000000000000037777770c6c656b6b657273757266656e026e6c0000010001 800c80000001000000030003037777770c6c656b6b657273757266656e026e6c0000010001c0100002000100015180000b04646e733103766970c01dc0100002000100015180000704646e7332c036c0100002000100015180000704646e7333c036c03100010001000151800004d44fe803c04800010001000151800004c3f5c782c05b00010001000151800004d44ff303 34435 abda000000010000000000000377777706787334616c6c026e6c0000010001 abda800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 34436 b71c770a5011446270910000000000000000 b71cf7040000000000000000 34437 44f2000000010000000000000b6d61726b74706c61617473026e6c00000f0001 44f2800000010000000200000b6d61726b74706c61617473026e6c00000f0001c00c0002000100015180000f036e733105796b6f6f6e036e657400c00c00020001000151800006036e7332c030 34438 a38e00000001000000000000026e7307616d6572636f6d026e6c0000010001 a38e80000001000000020001026e7307616d6572636f6d026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c2b2b20a 34439 a8a700000001000000000000036e733107616d6572636f6d026e6c0000010001 a8a780000001000000020001036e733107616d6572636f6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02c00010001000151800004c2b2b20a 34440 303f0000000100000000000010737061616e73657761746572686f6e64026e6c00000f0001 303f8000000100000002000010737061616e73657761746572686f6e64026e6c00000f0001c00c00020001000151800017036e73310d696e746572726567697374657203636f6d00c00c00020001000151800006036e7332c035 34441 000000007002400026c80000020405b401010402 000080010000000000000000 34442 2cc600000001000000000000026e7306787334616c6c026e6c0000010001 2cc680000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 34443 b71c770b5010446270900000000000000000 b71cf7040000000000000000 34444 3b00000000010000000000000b6361726565726665766572026e6c00000f000100 3b00800000010000000200020b6361726565726665766572026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c018c00c00020001000151800006036e7332c02fc02c00010001000151800004d453c005c04a00010001000151800004d453c006 34445 a27b0000000100000000000003777777056f6f6b696e026e6c0000010001 a27b8000000100000002000003777777056f6f6b696e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c030 34446 b71e36195010447061d40000000000000000 b71eb6140000000000000000 34447 0000000070024000ab3200000204059801010402 000080010000000000000000 34448 0524000000010000000000000c7065616e75747367616d6573026e6c00000f000100 0524800000010000000200000c7065616e75747367616d6573026e6c00000f0001c00c00020001000151800016036e73310c6d6567612d686f7374696e6703636f6d00c00c00020001000151800006036e7332c031 34449 6465000000010000000000000462757061027330026e6c0000010001 6465800000010000000200020462757061027330026e6c0000010001c0110002000100015180000d026e73076e656473746174c014c01100020001000151800006036e7333c02bc02800010001000151800004d4482615c04100010001000151800004d5c4021d 34450 8e7e00000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 8e7e80000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 34451 b71ee7585010432036330000000000000000 34452 3c0300100001000000000001026e7308767575727765726b026e6c00002600010000290800000000000000 3c0380000001000000030002026e7308767575727765726b026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa02020000291000000000000000 34453 322800000001000000000000037777770b6b6f6d6a657370656c656e026e6c0000010001 322880000001000000030003037777770b6b6f6d6a657370656c656e026e6c0000010001c0100002000100015180000e076e73617574683103626974c01cc0100002000100015180000a076e736175746832c038c0100002000100015180000a076e736175746833c038c03000010001000151800004d5880c33c04a00010001000151800004d5880c3bc06000010001000151800004d4ccc00b 34454 b71ee758501843200b2b00000090c5f8000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000 34455 b71e361950184470a9800000008f4080000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdca403c4f4a0003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000 b71eb6140000000000000000 34456 e9f30000000100000000000011626f6f6e73747261737065656c676f6564026e6c0000010001 e9f38000000100000002000211626f6f6e73747261737065656c676f6564026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ec00c00020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 34457 25f100000001000000000000046e73303803777873026e6c0000010001 25f180000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 34458 b71ee7665011431235a00000000000000000 34459 4fb200000001000000000000036e733503777873026e6c0000010001 4fb280000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 34460 b71e36275011446261420000000000000000 b71eb6240000000000000000 34461 b71ee76750104312359f0000000000000000 34462 576a00000001000000000000046e73303903777873026e6c0000010001 576a80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 34463 abee00000001000000000000116161782d73703233302d6173642d30303107616167726f6570026e6c0000010001 abee80000001000000020000116161782d73703233302d6173642d30303107616167726f6570026e6c0000010001c01e0002000100015180000d036e7330036f347303636f6d00c01e00020001000151800006036e7331c03e 34464 9608000000010000000000000676696e646578026e6c0000010001 9608800000010000000300030676696e646578026e6c0000010001c00c0002000100015180000b036e733104696c7365c013c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02bc027000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 34465 b71e36285010446261410000000000000000 b71eb6240000000000000000 34466 3d2800000001000000000000037777770964616e736f6d6d6572026e6c0000010001 3d2880000001000000020000037777770964616e736f6d6d6572026e6c0000010001c010000200010001518000130761757468323030026e73027575036e657400c0100002000100015180000a0761757468323130c036 34467 e64300000001000000000000085f6b706173737764045f756470126772616669646174615f646576656e746572026e6c0000060001 e64384030001000000010000085f6b706173737764045f756470126772616669646174615f646576656e746572026e6c0000060001c02d00060001000038400036026e730f646f6d61696e2d7265676973747279c02d0a686f73746d6173746572c0440bf1e540000070800000384000278d0000003840 34468 000000007002400054a900000204059801010402 000080010000000000000000 34469 830a00000001000000000000026e7308767575727765726b026e6c0000260001 830a80000001000000030001026e7308767575727765726b026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 34470 bb1f0000000100000000000003777777086c696e6b74697073026e6c0000010001 bb1f8000000100000002000203777777086c696e6b74697073026e6c0000010001c0100002000100015180000f026e7309656174736572766572c019c01000020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 34471 5b190010000100000000000108717569636b6e6574026e6c0000ff00010000290800000000000000 5b198000000100000003000308717569636b6e6574026e6c0000ff0001c00c00020001000151800011036e73310a6d756c74696b6162656cc015c00c00020001000151800006036e7332c02dc00c00020001000151800014036e73300a6d756c74696b6162656c036e657400c0290001000100015180000450f2e002c0460001000100015180000450f2e0060000291000000000000000 34472 b71f842f5010432042d20000000000000000 34473 5e8f0000000100000000000003777777066b6c6f656e73026e6c0000010001 5e8f8000000100000003000103777777066b6c6f656e73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 34474 b71f842f50184320da9b000000900428000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000 34475 e6ef0000000100000000000008626173737465696e026e6c00000f0001 e6ef8000000100000002000008626173737465696e026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c030 34476 b71f843d50114312423f0000000000000000 34477 ba6b0000000100000000000008717569636b6e6574026e6c0000ff0001 ba6b8000000100000003000208717569636b6e6574026e6c0000ff0001c00c00020001000151800011036e73310a6d756c74696b6162656cc015c00c00020001000151800006036e7332c02dc00c00020001000151800014036e73300a6d756c74696b6162656c036e657400c0290001000100015180000450f2e002c0460001000100015180000450f2e006 34478 b71f843e50104312423e0000000000000000 34479 763100000001000000000000036e7335046372696f026e6c0000010001 763180000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34480 854e00000001000000000000036e7336046372696f026e6c0000010001 854e80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34481 a83b000000010000000000000377777703776562026e6c0000010001 a83b800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 34482 638600000001000000000000036e7331046372696f026e6c0000010001 638680000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34483 684300000001000000000000036e7332046372696f026e6c0000010001 684380000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34484 462a00000001000000000000037777770a72656372656174696566026e6c0000010001 462a80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 34485 7ec800000001000000000000036e7335046372696f026e6c0000010001 7ec880000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34486 cc9300000001000000000000036e7336046372696f026e6c0000010001 cc9380000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34487 311400000001000000000000036e7331046372696f026e6c0000010001 311480000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34488 b5a300000001000000000000036e7332046372696f026e6c0000010001 b5a380000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34489 d5ed0000000100000000000007686f6c69646179026e6c00000f0001 d5ed8000000100000002000207686f6c69646179026e6c00000f0001c00c00020001000151800012026e730c686f6c696461796d65646961c014c00c00020001000151800006036e7333c02bc028000100010001518000049265424dc046000100010001518000045054ebbf 34490 aa8500000001000000000000076d656d62657273056c79636f73026e6c0000010001 aa8580000001000000020000076d656d62657273056c79636f73026e6c0000010001c0140002000100015180001106646e73312d31056c79636f7302646500c0140002000100015180000906646e73322d31c035 34491 2ffd0000000100000000000003777777097361666573746f7265026e6c0000010001 2ffd8000000100000002000003777777097361666573746f7265026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c031 34492 00000000700240005bc700000204059801010402 000080010000000000000000 34493 9fa100000001000000000000037777770c7676766e6f6f726477696a6b026e6c0000010001 9fa180000001000000020000037777770c7676766e6f6f726477696a6b026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c035 34494 b71fffa150104320ce7d0000000000000000 34495 0000000060022238ed610000020405b40000 000080010000000000000000 34496 b71fffa150184320b59e00000090b4d0000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403affca403c514a0003000000314e544c4d535350000100000097b208e00e000e002300000003000300200000004653314245524b454e424f5343484e45540000 34497 996c000000010000000000000377777703686268026e6c0000010001 996c800000010000000200000377777703686268026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 34498 d30d000000010000000000000c6174656c6965726475746368026e6c00000f0001 d30d800000010000000200000c6174656c6965726475746368026e6c00000f0001c00c0002000100015180001208617869707265737306787334616c6cc019c00c0002000100015180001403646e730a686172696e677374616403636f6d00 34499 ce0100000001000000000000036e733107737572666e6574026e6c0000010001 ce0180000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 34500 b720f253501022385b9a0000000000000000 34501 b720f25350182238373e000000253f7f000000010000000000001074726f66656f2d616c6661726f6d656f026e6c0000060001 34502 251c000000010000000000000369726308697263776f726c64026e6c0000010001 251c800000010000000200000369726308697263776f726c64026e6c0000010001c01000020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01000020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 34503 e58300000001000000000000095745524b4b414d45520f646f7669616e75736b616e746f6f72026e6c0000060001 e58384030001000000010000095745524b4b414d45520f646f7669616e75736b616e746f6f72026e6c0000060001c02600060001000038400036026e730f646f6d61696e2d7265676973747279c0260a686f73746d6173746572c03d0bf1e540000070800000384000278d0000003840 34504 b71fffaf50114312cdea0000000000000000 34505 87e100000001000000000000036e7332076e656473746174026e6c0000010001 87e180000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34506 424300000001000000000000036e7334076e656473746174026e6c0000010001 424380000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34507 02400000000100000000000009652d6c756e61746963026e6c0000010001 02408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34508 b720f2bc501022385b0a0000000000000000 34509 b720f2bc501122385b090000000000000000 34510 b71fffb050104312cde90000000000000000 34511 b720f2bd501022385b080000000000000000 34512 50710000000100000000000003777777156469636b736765696c657365787878706167696e61026e6c0000010001 50718000000100000002000203777777156469636b736765696c657365787878706167696e61026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec026c01000020001000151800006036e7332c03ec03a00010001000151800004c3b1f203c05800010001000151800004d4ccf533 34513 191a000000010000000000000377777709706f726e6f63616d73026e6c0000010001 191a800000010000000200020377777709706f726e6f63616d73026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01ac01000020001000151800006036e7332c032c02e00010001000151800004d4f1210bc04c00010001000151800004d4f1210c 34514 316a0000000100000000000005646e732d31056c61646f74026e6c0000010001 316a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34515 810c0000000100000000000006787334616c6c026e6c00000f0001 810c8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 34516 7de1000000010000000000000377777719656e65726769652d736572766963652d616d7374657264616d026e6c0000010001 7de1800000010000000200020377777719656e65726769652d736572766963652d616d7374657264616d026e6c0000010001c0100002000100015180000b04646e733103627367c02ac0100002000100015180000704646e7332c043c03e000100010001518000043e3a8553c055000100010001518000043e3a8554 34517 97ad0000000100000000000003746178066b6c75776572026e6c0000010001 97ad8000000100000002000003746178066b6c75776572026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c02f 34518 52190010000100000000000107616e74656e6e61026e6c00000100010000290800000080000000 52198000000100000002000207616e74656e6e61026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd130000291000000000000000 34519 000328000001000200000000026e6c0000060001095745524b4b414d45520f646f7669616e75736b616e746f6f72026e6c00000500fe000000000000c01400010001000000000004c0a80005 0003a8040000000000000000 34520 ebd6000000010000000000000c77696c6c666d6465626f656b026e6c00000f0001 ebd6840300010000000100000c77696c6c666d6465626f656b026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 34521 59d200000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 59d280000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 34522 19b000000001000000000000036e73340767617574656e67026e6c0000010001 19b080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34523 09be00000001000000000000036e73340767617574656e67026e6c0000010001 09be80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34524 3bda0000000100000000000005646e732d31056c61646f74026e6c0000010001 3bda8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34525 f20f0000000100000000000005646e732d32056c61646f74026e6c0000010001 f20f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34526 fbad0000000100000000000003777777036e6777026e6c0000010001 fbad8000000100000002000003777777036e6777026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c02c 34527 0bba00000001000000000000036e73310774697363616c69026e6c0000010001 0bba80000001000000030002036e73310774697363616c69026e6c0000010001c0100002000100015180000704616e7331c010c0100002000100015180000704616e7332c010c0100002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c03f00010001000151800004c3f13325 34528 af3300000001000000000000036e7332076e656473746174026e6c0000010001 af3380000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34529 d8ed00000001000000000000036e7334076e656473746174026e6c0000010001 d8ed80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34530 994500000001000000000000046d61696c09736f776b65726b656e026e6c0000010001 994580000001000000020001046d61696c09736f776b65726b656e026e6c0000010001c0110002000100015180000d026e7307616e74656e6e61c01bc0110002000100015180001306696e666f726d07616e74656e6e6102646b00c02f00010001000151800004d995dd13 34531 1eaa00000001000000000000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d736463730f444f5649414e55534b414e544f4f52024e4c0000210001 1eaa84030001000000010000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d736463730f444f5649414e55534b414e544f4f52024e4c0000210001c05200060001000038400036026e730f646f6d61696e2d7265676973747279c0520a686f73746d6173746572c0690bf1e540000070800000384000278d0000003840 34532 02600000000100000000000009652d6c756e61746963026e6c0000010001 02608000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34533 a97b000000010000000000000732737465706276026e6c00000f0001 a97b800000010000000200020732737465706276026e6c00000f0001c00c0002000100015180000e036e73310762686f73746564c014c00c00020001000151800006036e7333c02cc02800010001000151800004d973c30fc04200010001000151800004d973c102 34534 ea860000000100000000000005646e732d32056c61646f74026e6c0000010001 ea868000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34535 ba480000000100000000000003777777036d6463026e6c0000010001 ba488000000100000002000003777777036d6463026e6c0000010001c01000020001000151800017056e6f7274680b646f6d65696e736c756973036f726700c0100002000100015180000805736f757468c02e 34536 5db800000001000000000000036e733207626265796f6e64026e6c0000010001 5db880000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 34537 4dc100000001000000000000037777771276646e2d7665726875697373657276696365026e6c0000010001 4dc180000001000000020002037777771276646e2d7665726875697373657276696365026e6c0000010001c0100002000100015180000a036e7331036e7873c023c01000020001000151800006036e7332c03bc03700010001000151800004d973c015c04d00010001000151800004d973c102 34538 e03a0000000100000000000007616e74656e6e61026e6c0000010001 e03a8000000100000002000107616e74656e6e61026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 34539 02e000000001000000000000036e73320774697363616c69026e6c0000010001 02e080000001000000030002036e73320774697363616c69026e6c0000010001c0100002000100015180000704616e7331c010c0100002000100015180000704616e7332c010c0100002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c03f00010001000151800004c3f13325 34540 be0800000001000000000000036d6d6d0a6e65777373656c656374026e6c0000010001 be0880000001000000020000036d6d6d0a6e65777373656c656374026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c033 34541 5db900000001000000000000036e733107626265796f6e64026e6c0000010001 5db980000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 34542 265600000001000000000000037777770a6b6c696b77696a7a6572026e6c0000010001 265680000001000000020002037777770a6b6c696b77696a7a6572026e6c0000010001c01000020001000151800015036e73310e686f7374696e677377696a7a6572c01bc01000020001000151800006036e7332c033c02f000100010001518000043ed4591ec050000100010001518000043ed45928 34543 d68100000001000000000000036e733103696467026e6c00001c0001 d68180000001000000030003036e733103696467026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 34544 7e3900000001000000000000036e733103696467026e6c0000260001 7e3980000001000000030003036e733103696467026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 34545 32e000000001000000000000036e733203696467026e6c00001c0001 32e080000001000000030003036e733203696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 34546 099d00000001000000000000036e733203696467026e6c0000260001 099d80000001000000030003036e733203696467026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 34547 3c0d00000001000000000000036e733303696467026e6c00001c0001 3c0d80000001000000030003036e733303696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 34548 130100000001000000000000036e733303696467026e6c0000260001 130180000001000000030003036e733303696467026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 34549 68af00000001000000000000037777770b6d65646961737769746368026e6c0000010001 68af80000001000000020002037777770b6d65646961737769746368026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01cc01000020001000151800006036e7332c034c03000010001000151800004d4f1210bc04e00010001000151800004d4f1210c 34550 11e400000001000000000000036e73330767617574656e67026e6c0000010001 11e480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34551 4fe50000000100000000000007646574696567650564656d6f6e026e6c0000010001 4fe58000000100000003000207646574696567650564656d6f6e026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c0140002000100015180000f036e73320564656d6f6e036e657400c02e00010001000151800004c29f4906c04000010001000151800004c29fb004 34552 ebc30000000100000000000003777777087265697369676572026e6c0000010001 ebc38000000100000003000003777777087265697369676572026e6c0000010001c0100002000100015180001004646e73310573746f726b03636f6d00c0100002000100015180000704646e7332c032c0100002000100015180000704646e7333c032 34553 603d00000001000000000000037777770b776565722d6f6e6c696e65026e6c0000010001 603d80000001000000030003037777770b776565722d6f6e6c696e65026e6c0000010001c0100002000100015180000e076e73617574683103626974c01cc0100002000100015180000a076e736175746832c038c0100002000100015180000a076e736175746833c038c03000010001000151800004d5880c33c04a00010001000151800004d5880c3bc06000010001000151800004d4ccc00b 34554 3bca0000000100000000000003777777087365616c736b696e026e6c0000010001 3bca8000000100000002000203777777087365616c736b696e026e6c0000010001c0100002000100015180000b026e73057177697365c019c01000020001000151800006036e7332c030c02d00010001000151800004c2927f02c04400010001000151800004c2927f03 34555 1274000000010000000000000477777731056b6c696b73026e6c0000010001 1274800000010000000200000477777731056b6c696b73026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c02e 34556 16b8000000010000000000000b6379636c696e6732303030026e6c00000f000100 16b8800000010000000200000b6379636c696e6732303030026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c032 34557 e94d0000000100000000000005434f425241064b4f4e424942024e4c0000010001 e94d8000000100000003000305434f425241064b4f4e424942024e4c0000010001c01200020001000151800002c00cc0120002000100015180000906707974686f6ec012c0120002000100015180000e036e733107737572666e6574c019c00c00010001000151800004c0571f16c03b00010001000151800004c0571f0bc05000010001000151800004c0576a65 34558 6ef70000000100000000000006505954484f4e064b4f4e424942024e4c0000010001 6ef78000000100000003000306505954484f4e064b4f4e424942024e4c0000010001c0130002000100015180000805636f627261c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004c0571f16c00c00010001000151800004c0571f0bc05000010001000151800004c0576a65 34559 785b0000000100000000000006737079726f73026e6c00000f0001 785b8000000100000002000106737079726f73026e6c00000f0001c00c0002000100015180000a036e733303777873c013c00c00020001000151800006036e7334c02bc03d00010001000151800004d5ef9a65 34560 54930000000100000000000012313233636f6d707574657273657276696365026e6c0000010001 54938000000100000002000212313233636f6d707574657273657276696365026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c01fc00c00020001000151800006036e7332c036c03300010001000151800004d4cb0e42c04e00010001000151800004d4cb1221 34561 ad5000000001000000000000066368656c6c6f026e6c0000ff0001 ad5080000001000000030003066368656c6c6f026e6c0000ff0001c00c00020001000151800007046e733031c00cc00c00020001000151800007046e733032c00cc00c0002000100015180000a036e733103757063c013c02700010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 34562 09ac000000010000000000000377777707676f6c64776562026e6c0000010001 09ac800000010000000200000377777707676f6c64776562026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c02f 34563 3e96000000010000000000000462696f6c03727567026e6c0000010001 3e96800000010000000300030462696f6c03727567026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000e036e733107737572666e6574c015c02900010001000151800004817d0406c03b00010001000151800004817d040dc04d00010001000151800004c0576a65 34564 979600000001000000000000037777770666656e696b73026e6c0000010001 979680000001000000020000037777770666656e696b73026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c02f 34565 19050000000100000000000003777777086d61726972617361026e6c0000010001 19058000000100000002000103777777086d61726972617361026e6c0000010001c0100002000100015180000e026e73087472696c6f676963c019c01000020001000151800006036e7332c030c02d00010001000151800004c26d1264 34566 93ea000000010000000000000a77696566666572696e6b026e6c0000ff0001 93ea800000010000000200020a77696566666572696e6b026e6c0000ff0001c00c0002000100015180000f036e733108696e74726f776562c017c00c00020001000151800006036e7332c02fc02b0001000100015180000450416028c04600010001000151800004c356780c 34567 94be000000010000000000000a74726176656c2d6e6574026e6c0000ff0001 94be800000010000000200010a74726176656c2d6e6574026e6c0000ff0001c00c000200010001518000090674722d646e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02b00010001000151800004c2977d28 34568 030f00000001000000000000046e657874026e6c00000f0001 030f80000001000000020001046e657874026e6c00000f0001c00c00020001000151800012036e733107686f7374696e6703656269c011c00c0002000100015180000d03646e73036b706e03636f6d00c02500010001000151800004c1ad9c46 34569 ce5f000000010000000000000377777709636974796d75736963026e6c0000010001 ce5f800000010000000200000377777709636974796d75736963026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 34570 1d570000000100000000000004652d636b026e6c0000ff0001 1d578000000100000002000004652d636b026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c011c00c00020001000151800006036e7332c028 34571 ec3c00000001000000000000037777771364696570657665656e2d6d616b656c61617273026e6c0000010001 ec3c80000001000000030002037777771364696570657665656e2d6d616b656c61617273026e6c0000010001c0100002000100015180000d036e733106776964657873c024c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c03cc03800010001000151800004d4ccc0fcc06d000100010001518000043efa0703 34572 cd440000000100000000000004616a6178066e696b686566026e6c0000010001 cd448000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 34573 3fd10000000100000000000008626c6f6f6d696e67026e6c0000ff0001 3fd18000000100000002000008626c6f6f6d696e67026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c015c00c00020001000151800006036e7332c02c 34574 0cab00000001000000000000037777770c766f63616c636f6d70616e79026e6c0000010001 0cab80000001000000030002037777770c766f63616c636f6d70616e79026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 34575 1fc80000000100000000000006636861726973026e6c0000010001 1fc88000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 34576 eb7800000001000000000000036e733503777873026e6c0000010001 eb7880000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 34577 638000000001000000000000054c53444e5306464f4b4b4552026e6c0000010001 638080000001000000020000054c53444e5306464f4b4b4552026e6c0000010001c0120002000100015180001004646e73310573746f726b03636f6d00c0120002000100015180000704646e7332c032 34578 0eae00000001000000000000037777770574626f656b026e6c0000010001 0eae80000001000000030002037777770574626f656b026e6c0000010001c0100002000100015180000d036e733106776964657873c016c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 34579 6eed00000001000000000000026e73076e656473746174026e6c00001c0001 6eed80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34580 eca300000001000000000000036e7332076e656473746174026e6c0000010001 eca380000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34581 a24400000001000000000000036e7332076e656473746174026e6c00001c0001 a24480000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34582 da1000000001000000000000036e7333076e656473746174026e6c00001c0001 da1080000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34583 efc000000001000000000000036e7334076e656473746174026e6c0000010001 efc080000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34584 465a00000001000000000000036e7334076e656473746174026e6c00001c0001 465a80000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34585 d92700000001000000000000037777770a747261696e73696d6767026e6c0000010001 d92780000001000000020002037777770a747261696e73696d6767026e6c0000010001c01000020001000151800012036e73310b736c61636b736572766572c01bc01000020001000151800006036e7332c033c02f000100010001518000043ed444c0c04d000100010001518000043ed44d0a 34586 8a76000000010000000000000e706f72747567616c6f6e6c696e65026e6c0000ff0001 8a76800000010000000200020e706f72747567616c6f6e6c696e65026e6c0000ff0001c00c0002000100015180000c036e7331056773696e74c01bc00c00020001000151800006036e7332c033c02f00010001000151800004510473b4c04700010001000151800004510473b5 34587 422a00000001000000000000037777770c7374617274766f6f726a6f75026e6c0000010001 422a80000001000000020000037777770c7374617274766f6f726a6f75026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 34588 91ac00000001000000000000086b6575726d65726b026e6c00000f0001 91ac80000001000000020000086b6575726d65726b026e6c00000f0001c00c0002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c00c0002000100015180000805726f6b696ec030 34589 466c00000001000000000000046e6b6676026e6c0000ff0001 466c80000001000000020000046e6b6676026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c011c00c00020001000151800006036e7332c028 34590 44c800000001000000000000037777770861736e626f6f6b73026e6c0000010001 44c880000001000000020000037777770861736e626f6f6b73026e6c0000010001c01000020001000151800013036e733109736f6c6964636f6465036e657400c01000020001000151800006036e7332c031 34591 9d8d0000000100000000000003706f70086576657279646179026e6c0000010001 9d8d8000000100000003000203706f70086576657279646179026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 34592 b5ef00000001000000000000037777770373637a026e6c0000010001 b5ef80000001000000020002037777770373637a026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c014c01000020001000151800006036e7332c02cc02800010001000151800004d4b20403c04100010001000151800004d5881e45 34593 65e70000000100000000000003777777076e6f7661736f6c026e6c0000010001 65e78000000100000002000003777777076e6f7661736f6c026e6c0000010001c010000200010001518000130761757468323030026e73027575036e657400c0100002000100015180000a0761757468323130c034 34594 767300000001000000000000036e733503777873026e6c0000010001 767380000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 34595 c53f000000010000000000000569636f6e7304696c7365026e6c0000010001 c53f800000010000000300030569636f6e7304696c7365026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c02b000100010001518000043e45a282c03d000100010001518000043e45a283c04f000100010001518000043e45a284 34596 12a300100001000000000000087761616c64696a6b026e6c00000f0001 12a380000001000000020000087761616c64696a6b026e6c00000f0001c00c0002000100015180000f07686f7374696e670470756e74c015c00c00020001000151800006036e7331c031 34597 a1760000000100000000000007686f7374696e670470756e74026e6c0000010001 a1768000000100000002000207686f7374696e670470756e74026e6c0000010001c0140002000100015180000f036e7331086765656e70756e74c019c01400020001000151800006036e7332c031c02d00010001000151800004d4ccd865c048000100010001518000045054ec34 34598 c62b00000001000000000000036e73310470756e74026e6c0000010001 c62b80000001000000020002036e73310470756e74026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c015c01000020001000151800006036e7332c02dc02900010001000151800004d4ccd865c044000100010001518000045054ec34 34599 556d000000010000000000000869787765623030310777697265687562026e6c0000010001 556d800000010000000300000869787765623030310777697265687562026e6c0000010001c01500020001000151800010026e730777697265687562036e657400c01500020001000151800006036e7332c034c01500020001000151800006036e7333c034 34600 7f96000000010000000000000449746563026e6c0000ff0001 7f96800000010000000200000449746563026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c011c00c0002000100015180000704686e7331c02a 34601 05be00000001000000000000037777770e6f6e67656b656e6474616c656e74026e6c0000010001 05be80000001000000020002037777770e6f6e67656b656e6474616c656e74026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01fc01000020001000151800006036e7332c037c03300010001000151800004c29f4906c04b00010001000151800004c29fb004 34602 faad00000001000000000000037777770b706f6c2d6865746572656e026e6c0000010001 faad80000001000000030000037777770b706f6c2d6865746572656e026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c033c01000020001000151800006036e7332c033 34603 5d570000000100000000000008686f73746e616d650462696e640000100003 5d578000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 34604 d9b000000001000000000000037777770c6461676a657a65656c616e64026e6c0000010001 d9b080000001000000020002037777770c6461676a657a65656c616e64026e6c0000010001c01000020001000151800010036e73310964656c74616c616e64c01dc01000020001000151800006036e7332c035c031000100010001518000045059ee57c04d00010001000151800004d5c9e503 34605 b01600000001000000000000026e730a696275696c64696e6773026e6c0000010001 b01680000001000000030002026e730a696275696c64696e6773026e6c0000010001c00f0002000100015180000d036e733106776964657873c01ac00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 34606 be1700000001000000000000037777770876656e6b7564656e026e6c0000010001 be1780000001000000030000037777770876656e6b7564656e026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c030c01000020001000151800006036e7332c030 34607 80fb00000001000000000000026e7306766576696461026e6c0000010001 80fb80000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 34608 bfa100000001000000000000036e733206766576696461026e6c0000010001 bfa180000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 34609 11f900000001000000000000096d64656b7569706572026e6c00000f0001 11f980000001000000020000096d64656b7569706572026e6c00000f0001c00c00020001000151800016036e73310c656967656e2d646f6d65696e036e657400c00c00020001000151800006036e7332c02e 34610 e4ea000000010000000000000b535449434b45524749524c026e6c0000020001 e4ea840300010000000100000b535449434b45524749524c026e6c0000020001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 34611 ab91000000010000000000000377777710666579656e6f6f726463617375616c73026e6c0000010001 ab91800000010000000200020377777710666579656e6f6f726463617375616c73026e6c0000010001c0100002000100015180000e036e733107696e666c617465c021c01000020001000151800006036e7332c039c035000100010001518000045117e232c04f000100010001518000045117e233 34612 77410000000100000000000003777777086d74726565787878026e6c0000010001 77418000000100000002000003777777086d74726565787878026e6c0000010001c01000020001000151800013036e7331097669727475616c787303636f6d00c01000020001000151800006036e7332c031 34613 7b4b000000010000000000000377777708646973636f6e6574026e6c0000010001 7b4b800000010000000300010377777708646973636f6e6574026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 34614 386e00000001000000000000086268682d6e7431300f626f6572686172746f67686f6f6674026e6c0000010001 386e80000001000000020000086268682d6e7431300f626f6572686172746f67686f6f6674026e6c0000010001c0150002000100015180000d03646e73036b706e03636f6d00c0150002000100015180000d036e7332036b706e036e657400 34615 999e00000001000000000000086268682d6e7431300f626f6572686172746f67686f6f6674026e6c00001c0001 999e80000001000000020000086268682d6e7431300f626f6572686172746f67686f6f6674026e6c00001c0001c0150002000100015180000d03646e73036b706e03636f6d00c0150002000100015180000d036e7332036b706e036e657400 34616 19f800000001000000000000036e73340767617574656e67026e6c0000010001 19f880000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34617 b35800000001000000000000056c69617577026e6c0000020001 b35880000001000000020000056c69617577026e6c0000020001c00c00020001000151800010036e733109666972737466696e64c012c00c00020001000151800006036e7332c02a 34618 6ccc00000001000000000000036e733109666972737466696e64026e6c0000010001 6ccc80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34619 3df900000001000000000000036e733209666972737466696e64026e6c0000010001 3df980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34620 3beb000000010000000000000377777706617265613137026e6c0000010001 3beb800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 34621 e43600000001000000000000037777770667616d657273026e6c0000010001 e43680000001000000020002037777770667616d657273026e6c0000010001c0100002000100015180000b036e73310470696e65c017c01000020001000151800006036e7332c02fc02b00010001000151800004d59c0201c04200010001000151800004c3c1a303 34622 008f000000010000000000000377777706617265613137026e6c0000010001 008f800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 34623 227b00000001000000000000026e73077374616e6e6574026e6c0000010001 227b80000001000000020002026e73077374616e6e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5852414c03900010001000151800004d5852418 34624 536e00000001000000000000036e7332077374616e6e6574026e6c0000010001 536e80000001000000020002036e7332077374616e6e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d5852414c00c00010001000151800004d5852418 34625 17f700000001000000000000036465700968736472656e746865026e6c00001c0001 17f780000001000000020002036465700968736472656e746865026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c01ac00c00010001000151800004c3a93c7dc03c00010001000151800004c0576a65 34626 82ab000000010000000000000f706f72747261697467616c6c657279026e6c0000010001 82ab800000010000000200020f706f72747261697467616c6c657279026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01cc00c00020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 34627 8fc700000001000000000000046d61696c0968736472656e746865026e6c0000010001 8fc780000001000000020002046d61696c0968736472656e746865026e6c0000010001c0110002000100015180000603646570c011c0110002000100015180000e036e733107737572666e6574c01bc02f00010001000151800004c3a93c7dc04100010001000151800004c0576a65 34628 e9b800000001000000000000037777770974656c656772616166026e6c0000010001 e9b880000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 34629 87aa000000010000000000000468616e7309747269706c652d6974026e6c0000ff0001 87aa800000010000000300030468616e7309747269706c652d6974026e6c0000ff0001c01100020001000151800005026e73c011c0110002000100015180000b086e7331636f6c6f32c011c0110002000100015180000b086e7331636f6c6f33c011c02f00010001000151800004d584b002c04000010001000151800004d47ffe42c05700010001000151800004504542ad 34630 2911000000010000000000000577326b6331066e7434616c6c026e6c0000010001 2911800000010000000200020577326b6331066e7434616c6c026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000d036e733206787334616c6cc019c02d00010001000151800004c26d3402c03e00010001000151800004c26d0963 34631 4e9d000000010000000000000b6e6f7661636f6c6c656765026e6c00000f0001 4e9d800000010000000200020b6e6f7661636f6c6c656765026e6c00000f0001c00c0002000100015180000d036e7331066e6c74726565c018c00c00020001000151800006036e7332c030c02c00010001000151800004d4b20403c04500010001000151800004d5881e45 34632 161800100001000000000001036e7332036e6f62026e6c00000100010000290800000080000000 161880000001000000020003036e7332036e6f62026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004504f22f6c00c00010001000151800004504f22fa0000291000000000000000 34633 2c3000100001000000000001036e7331036e6f62026e6c00000100010000290800000080000000 2c3080000001000000020003036e7331036e6f62026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004504f22f6c03600010001000151800004504f22fa0000291000000000000000 34634 8ae800000001000000000000037777770a686f6e64656e68757973026e6c0000010001 8ae880000001000000020000037777770a686f6e64656e68757973026e6c0000010001c01000020001000151800015036e73310b646e736a756e6374696f6e03636f6d00c01000020001000151800006036e7332c033 34635 f03200000001000000000000036e73310d706f7765727365727665723132026e6c0000010001 f03280000001000000020002036e73310d706f7765727365727665723132026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047478c0400001000100015180000451047479 34636 3c1600000001000000000000036e73320d706f7765727365727665723132026e6c0000010001 3c1680000001000000020002036e73320d706f7765727365727665723132026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0320001000100015180000451047478c00c0001000100015180000451047479 34637 a57e00000001000000000000036e733107626265796f6e64026e6c00001c0001 a57e80000001000000020002036e733107626265796f6e64026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 34638 63aa00000001000000000000036e733107626265796f6e64026e6c0000260001 63aa80000001000000020002036e733107626265796f6e64026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 34639 92b300000001000000000000036e733207626265796f6e64026e6c00001c0001 92b380000001000000020002036e733207626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 34640 8dac00000001000000000000036e733207626265796f6e64026e6c0000260001 8dac80000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 34641 49db000000010000000000000d36322d3137372d3139302d333907626265796f6e64026e6c0000010001 49db800000010000000200020d36322d3137372d3139302d333907626265796f6e64026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac036000100010001518000043eb1900bc048000100010001518000043eb19002 34642 837b0000000100000000000005756c656164026e6c00000f0001 837b8000000100000003000305756c656164026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c012c00c000200010001518000070470726932c02bc00c000200010001518000070470726933c02bc026000100010001518000049a0ff9a6c044000100010001518000049a0ff9aac057000100010001518000049a0ff9ae 34643 4ba900000001000000000000036e733109666972737466696e64026e6c0000010001 4ba980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34644 1f8900000001000000000000036e733209666972737466696e64026e6c0000010001 1f8980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34645 53e100000001000000000000037777770c646563656d62657232337264026e6c0000010001 53e180000001000000020000037777770c646563656d62657232337264026e6c0000010001c0100002000100015180000c026e7306766576696461c01dc01000020001000151800006036e7332c034 34646 914300000001000000000000036e733108636f6d707574656c026e6c0000010001 914380000001000000020002036e733108636f6d707574656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3568680c03b00010001000151800004c3568681 34647 cc7a00000001000000000000037777770e7374616e64627973657276696365026e6c0000010001 cc7a80000001000000020000037777770e7374616e64627973657276696365026e6c0000010001c01000020001000151800015036e73310b6475746368776562646e73036e657400c01000020001000151800006036e7332c037 34648 b6db00000001000000000000037777770c746f70686f726f73636f6f70026e6c0000010001 b6db80000001000000020002037777770c746f70686f726f73636f6f70026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c01dc01000020001000151800006036e7332c035c03100010001000151800004d4f1210bc04f00010001000151800004d4f1210c 34649 e22f000000010000000000000d3139322d38372d3132342d35370663616d707573086e79656e726f6465026e6c0000010001 e22f800000010000000300030d3139322d38372d3132342d35370663616d707573086e79656e726f6465026e6c0000010001c021000200010001518000070161026e73c021c021000200010001518000040163c040c021000200010001518000040164c040c03e000100010001518000043e3a04a3c05100010001000151800004c26dc2aec06100010001000151800004c0577106 34650 710f00000001000000000000046c696262026e6c0000020001 710f80000001000000020002046c696262026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 34651 024000000001000000000000026e73076e656473746174024e4c0000010001 024080000001000000020002026e73076e656473746174024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34652 1efa00000001000000000000026e73076b6e6f77617265026e6c0000010001 1efa80000001000000020002026e73076b6e6f77617265026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004c3402003c03900010001000151800004c340202b 34653 cf6a00000001000000000000036e7332076e656473746174026e6c00001c0001 cf6a80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34654 7432000000010000000000000866696e2d73706563026e6c00000f0001 7432800000010000000200000866696e2d73706563026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02c 34655 3a4f00000001000000000000036e7332036e6f62026e6c0000010001 3a4f80000001000000020002036e7332036e6f62026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004504f22f6c00c00010001000151800004504f22fa 34656 65c900000001000000000000036e7331036e6f62026e6c0000010001 65c980000001000000020002036e7331036e6f62026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004504f22f6c03600010001000151800004504f22fa 34657 47ff000000010000000000000377777708626f766f2d6c6261026e6c0000010001 47ff800000010000000200020377777708626f766f2d6c6261026e6c0000010001c0100002000100015180000f036e73310864736267726f6570c019c01000020001000151800006036e7332c031c02d00010001000151800004d4362461c04800010001000151800004c36c2c36 34658 4b790000000100000000000006787334616c6c026e6c00000f0001 4b798000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 34659 66e6000000010000000000000864656c746170616b026e6c0000010001 66e6800000010000000200010864656c746170616b026e6c0000010001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 34660 63b30000000100000000000005646e732d32056c61646f74026e6c0000010001 63b38000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34661 1a6b00000001000000000000037777770a6861616773656469726b026e6c0000010001 1a6b80000001000000030001037777770a6861616773656469726b026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 34662 53b000000001000000000000037777770a7368656572656e6c6f6f026e6c0000010001 53b080000001000000030001037777770a7368656572656e6c6f6f026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 34663 8a4b000000010000000000000377777708706f737462616e6b026e6c0000010001 8a4b800000010000000200020377777708706f737462616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c019c01000020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 34664 7ce400000001000000000000037777770c6a6577656c6b696c63686572026e6c0000010001 7ce480000001000000020000037777770c6a6577656c6b696c63686572026e6c0000010001c01000020001000151800015036e73310a626c756579656c6c6f7704696e666f00c01000020001000151800006036e7332c035 34665 e6260000000100000000000003626c3402626c06787334616c6c026e6c0000010001 e6268000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34666 064300000001000000000000034e53320743495354524f4e024e4c0000010001 064380000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 34667 dbda00000001000000000000037777770674726f656c61026e6c0000010001 dbda80000001000000020001037777770674726f656c61026e6c0000010001c0100002000100015180000a036e733303777873c017c01000020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 34668 07e0000000010000000000000a6c6962657274616e676f026e6c0000020001 07e0800000010000000200020a6c6962657274616e676f026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 34669 4f79000000010000000000000864656c746170616b026e6c00000f0001 4f79800000010000000200010864656c746170616b026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 34670 2c2b0000000100000000000006787334616c6c026e6c00000f0001 2c2b8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 34671 15eb0000000100000000000003746869026e6c00000f0001 15eb8000000100000002000203746869026e6c00000f0001c00c0002000100015180000b047072693103646e73c00cc00c000200010001518000070470726932c029c02400010001000151800004d443abd4c03b000100010001518000043eb43fd2 34672 eef800000001000000000000036e733204712d676f026e6c0000010001 eef880000001000000020000036e733204712d676f026e6c0000010001c0100002000100015180000d03646e73036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 34673 f77c00000001000000000000036e733204712d676f026e6c0000260001 f77c80000001000000020000036e733204712d676f026e6c0000260001c0100002000100015180000d03646e73036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 34674 db590000000100000000000009706f73746f72646572026e6c0000ff0001 db598000000100000002000209706f73746f72646572026e6c0000ff0001c00c0002000100015180000f036e73310861746c616e74697ac016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5efa011c04500010001000151800004d5efa075 34675 fa260000000100000000000005746967657205736e6f6b65026e6c0000010001 fa268000000100000002000205746967657205736e6f6b65026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7333c012c02c00010001000151800004d943e667c03e00010001000151800004d943e6db 34676 7cf00000000100000000000009776565726b616d6572026e6c0000010001 7cf08000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 34677 3c6d000000010000000000000774726166666963026e6c0000010001 3c6d800000010000000200000774726166666963026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 34678 d10900000001000000000000026e7306787334616c6c026e6c0000010001 d10980000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 34679 acfd0000000100000000000006736572766572026462036b766b026e6c0000010001 acfd8000000100000002000206736572766572026462036b766b026e6c0000010001c0160002000100015180000d026e73076b6e6f77617265c01ac01600020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 34680 c030000000010000000000000377777709706172616469676974026e6c0000010001 c030800000010000000200000377777709706172616469676974026e6c0000010001c01000020001000151800010026e73076e65737363697303636f6d00c01000020001000151800006036e7332c031 34681 5ee30010000100000000000104414a4158064e494b484546024e4c00000100010000290800000000000000 5ee38000000100000004000304414a4158064e494b484546024e4c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c7040000291000000000000000 34682 926800000001000000000000037777770e64657665727374726f6f69657273026e6c0000010001 926880000001000000020000037777770e64657665727374726f6f69657273026e6c0000010001c01000020001000151800010036e733106686f73747335036e657400c01000020001000151800006036e7332c037 34683 871f00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 871f80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34684 1a6900000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 1a6980000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 34685 d69d0000000100000000000003777777086a6f627472617878026e6c0000010001 d69d8000000100000002000203777777086a6f627472617878026e6c0000010001c0100002000100015180000f026e73096e65746c6f67696373c019c01000020001000151800006036e7332c030c02d00010001000151800004c3c16402c04800010001000151800004c2b2850a 34686 fe0e0000000100000000000004414a4158064e494b484546024e4c0000010001 fe0e8000000100000004000204414a4158064e494b484546024e4c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 34687 eabb00000001000000000000036e733306706167696e61026e6c0000010001 eabb80000001000000030003036e733306706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02b000100010001518000043e45a282c03d000100010001518000043e45a283c00c000100010001518000043e45a284 34688 e5f500000001000000000000036e733206706167696e61026e6c0000010001 e5f580000001000000030003036e733206706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02b000100010001518000043e45a282c00c000100010001518000043e45a283c04b000100010001518000043e45a284 34689 db6300000001000000000000036e733106706167696e61026e6c0000010001 db6380000001000000030003036e733106706167696e61026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 34690 85d0000000010000000000000377777706666f6b73756b026e6c0000010001 85d0800000010000000200020377777706666f6b73756b026e6c0000010001c0100002000100015180000a036e733103677673c017c01000020001000151800006036e7332c02fc02b000100010001518000045054e1aac04100010001000151800004d4ccc646 34691 0a1600000001000000000000036e73330767617574656e67026e6c0000010001 0a1680000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34692 3a1a00000001000000000000036e73330767617574656e67026e6c0000010001 3a1a80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34693 7e0a000000010000000000000868616e736b616d70026e6c00000f0001 7e0a800000010000000200010868616e736b616d70026e6c00000f0001c00c0002000100015180000a036e733303777873c015c00c00020001000151800006036e7334c02dc03f00010001000151800004d5ef9a65 34694 227f00000001000000000001026e73076e656473746174026e6c00001c00010000291000000000000000 227f80000001000000020003026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 34695 402000000001000000000001026e73076e656473746174026e6c00002600010000291000000000000000 402080000001000000020003026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 34696 5e6200000001000000000001036e7332076e656473746174026e6c00000100010000291000000000000000 5e6280000001000000020003036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34697 a86d00000001000000000001036e7332076e656473746174026e6c00001c00010000291000000000000000 a86d80000001000000020003036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34698 d24700000001000000000001036e7332076e656473746174026e6c00002600010000291000000000000000 d24780000001000000020003036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34699 8a3700000001000000000001036e7333076e656473746174026e6c00001c00010000291000000000000000 8a3780000001000000020003036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 34700 ca7c00000001000000000001036e7333076e656473746174026e6c00002600010000291000000000000000 ca7c80000001000000020003036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 34701 dcfb00000001000000000001036e7334076e656473746174026e6c00000100010000291000000000000000 dcfb80000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34702 d4f800000001000000000001036e7334076e656473746174026e6c00001c00010000291000000000000000 d4f880000001000000020003036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34703 82f300000001000000000001036e7334076e656473746174026e6c00002600010000291000000000000000 82f380000001000000020003036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 34704 6e35000000010000000000000b6c6962657274796c616d61026e6c0000020001 6e35800000010000000200020b6c6962657274796c616d61026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 34705 227f00000001000000000000026e73076e656473746174026e6c00001c0001 227f80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34706 402000000001000000000000026e73076e656473746174026e6c0000260001 402080000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34707 5e6200000001000000000000036e7332076e656473746174026e6c0000010001 5e6280000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34708 a86d00000001000000000000036e7332076e656473746174026e6c00001c0001 a86d80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34709 ac3700000001000000000000037777770d73746174656f66746865617274026e6c0000010001 ac3780000001000000030000037777770d73746174656f66746865617274026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c037c01000020001000151800007046e733033c037 34710 c3bc00000001000000000000037777770d73746174656f66746865617274026e6c0000010001 c3bc80000001000000030000037777770d73746174656f66746865617274026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c037c01000020001000151800007046e733033c037 34711 d24700000001000000000000036e7332076e656473746174026e6c0000260001 d24780000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34712 8a3700000001000000000000036e7333076e656473746174026e6c00001c0001 8a3780000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34713 ca7c00000001000000000000036e7333076e656473746174026e6c0000260001 ca7c80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34714 dcfb00000001000000000000036e7334076e656473746174026e6c0000010001 dcfb80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34715 bd8a0000000100000000000004636c7570026e6c00000f0001 bd8a8000000100000002000004636c7570026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c030 34716 d4f800000001000000000000036e7334076e656473746174026e6c00001c0001 d4f880000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34717 82f300000001000000000000036e7334076e656473746174026e6c0000260001 82f380000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34718 dce6000000010000000000000377777709616c7465726e617465026e6c0000010001 dce6800000010000000200020377777709616c7465726e617465026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01ac01000020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 34719 a12b00000001000000000000037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001 a12b80000001000000030003037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 34720 656700000001000000000000036e733109666972737466696e64026e6c0000010001 656780000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34721 8e47000000010000000000000d686f62627973686f7033303030026e6c0000010001 8e47800000010000000200020d686f62627973686f7033303030026e6c0000010001c00c00020001000151800011036e73310a696e7465726e65746978c01ac00c00020001000151800006036e7332c032c02e00010001000151800004d4ccf5c9c04b00010001000151800004d4ccf5d2 34722 78990000000100000000000003777777086a6f627472617878026e6c0000010001 78998000000100000002000203777777086a6f627472617878026e6c0000010001c0100002000100015180000f026e73096e65746c6f67696373c019c01000020001000151800006036e7332c030c02d00010001000151800004c3c16402c04800010001000151800004c2b2850a 34723 1182000000010000000000000576656e6c6f036f6365026e6c0000010001 1182800000010000000200010576656e6c6f036f6365026e6c0000010001c01200020001000151800002c00cc0120002000100015180000b026e73026e6c036e657400c00c0001000100015180000486bc0102 34724 59d600100001000000000001036e733104686f6d65026e6c00000100010000290800000080000000 59d680000001000000030004036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 34725 967b00100001000000000001036e733204686f6d65026e6c00000100010000290800000080000000 967b80000001000000030004036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 34726 f4d100100001000000000001036e733304686f6d65026e6c00000100010000290800000080000000 f4d180000001000000030004036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 34727 f58200100001000000000001036e733404686f6d65026e6c00000100010000290800000080000000 f58280000001000000030004036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 34728 ecd500000001000000000000034e53320743495354524f4e024e4c0000010001 ecd580000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 34729 b8e200000001000000000000037777770c726f636b736e726976657273026e6c0000010001 b8e280000001000000020002037777770c726f636b736e726976657273026e6c0000010001c01000020001000151800010036e733109747261666669633475c01dc01000020001000151800006036e7332c035c03100010001000151800004c323b781c04d00010001000151800004c323b782 34730 deff0000000100000000000003777777056e6c636f6d026e6c0000010001 deff8000000100000002000103777777056e6c636f6d026e6c0000010001c0100002000100015180000c026e7306636f62776562c016c01000020001000151800011026e73087363686970686f6c036e657400c02a0001000100015180000450f26001 34731 1a4b00000001000000000000037777770d31303170726f6d6f74696f6e73026e6c0000010001 1a4b80000001000000030001037777770d31303170726f6d6f74696f6e73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ec01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c050c032000100010001518000043efa0202 34732 0623000000010000000000000377777703646674026e6c0000010001 0623800000010000000200000377777703646674026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c02c 34733 a53800000001000000000000036e733106736f6c636f6e026e6c0000010001 a53880000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 34734 e92100000001000000000000036e733206736f6c636f6e026e6c0000010001 e92180000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 34735 d13100000001000000000000036e733106736f6c636f6e026e6c0000260001 d13180000001000000030003036e733106736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 34736 1d5400000001000000000000036e733206736f6c636f6e026e6c0000260001 1d5480000001000000030003036e733206736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 34737 0eaa0000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 0eaa8000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 34738 43ee0000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000260001 43ee8000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000260001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 34739 cf5500000001000000000000036e733104686f6d65026e6c0000010001 cf5580000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 34740 25b100000001000000000000036e733204686f6d65026e6c0000010001 25b180000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 34741 59ad00000001000000000000036e733304686f6d65026e6c0000010001 59ad80000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 34742 c4c600000001000000000000036e733404686f6d65026e6c0000010001 c4c680000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 34743 63890000000100000000000005646e732d31056c61646f74026e6c0000010001 63898000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34744 26c80000000100000000000005646e732d32056c61646f74026e6c0000010001 26c88000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 34745 334400000001000000000000036e73320763697374726f6e026e6c0000010001 334480000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 34746 5dda00000001000000000000036e73320763697374726f6e026e6c00001c0001 5dda80000001000000020002036e73320763697374726f6e026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 34747 bd3a00000001000000000000037777770676657870616e026e6c0000010001 bd3a80000001000000020000037777770676657870616e026e6c0000010001c0100002000100015180001504646e73310a65617379736572766572036e657400c0100002000100015180000704646e7332c030 34748 644e00000001000000000000037777770f7175616c6974792d63656e74657273026e6c0000010001 644e80000001000000020002037777770f7175616c6974792d63656e74657273026e6c0000010001c0100002000100015180000f036e733108636f6d707574656cc020c01000020001000151800006036e7332c038c03400010001000151800004c3568680c04f00010001000151800004c3568681 34749 217f00000001000000000000037777770d7261616c74652d6f6e6c696e65026e6c0000010001 217f80000001000000020000037777770d7261616c74652d6f6e6c696e65026e6c0000010001c01000020001000151800012036e733109686f737467726f7570026e7500c01000020001000151800006036e7332c036 34750 3b160000000100000000000009652d6c756e61746963026e6c0000010001 3b168000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34751 0b1a0000000100000000000009652d6c756e61746963026e6c0000010001 0b1a8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34752 5306000000010000000000000866696c6167656e74026e6c00000f0001 5306800000010000000200020866696c6167656e74026e6c00000f0001c00c00020001000151800012036e73310b696e7465727374726f6f6dc015c00c00020001000151800006036e7332c02dc0290001000100015180000450558121c04700010001000151800004d58141c4 34753 c99c00000001000000000000036e73330767617574656e67026e6c0000010001 c99c80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34754 c99d00000001000000000000036e73340767617574656e67026e6c0000010001 c99d80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34755 14b2000000010000000000000377777702703308706f737462616e6b026e6c0000010001 14b2800000010000000200020377777702703308706f737462616e6b026e6c0000010001c0130002000100015180000a036e733103696e67c01cc01300020001000151800006036e7332c034c0300001000100015180000491dd19c2c0460001000100015180000491dd5dc2 34756 751e00000001000000000000035f6763045f7463700477617166026e6c0000060001 751e84030001000000010000035f6763045f7463700477617166026e6c0000060001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 34757 4766000000010000000000000331333602336a026e6c0000010001 4766800000010000000200020331333602336a026e6c0000010001c0100002000100015180000e036e733107676f6c69617468c013c01000020001000151800006036e7332c02bc027000100010001518000045054f379c04100010001000151800004507f48c2 34758 023000000001000000000000036e73340767617574656e67026e6c0000010001 023080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34759 3a3900000001000000000000036e73340767617574656e67026e6c0000010001 3a3980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34760 1a2000000001000000000000036e73330767617574656e67026e6c0000010001 1a2080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34761 122e00000001000000000000036e73330767617574656e67026e6c0000010001 122e80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34762 2b300000000100000000000009652d6c756e61746963026e6c0000010001 2b308000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34763 96c000000001000000000000046162656c0564656d6f6e026e6c0000010001 96c080000001000000030002046162656c0564656d6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 34764 53f90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 53f98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34765 b5bf00000001000000000000037777771274726f706963616c2d726563726561746965026e6c0000010001 b5bf80000001000000020000037777771274726f706963616c2d726563726561746965026e6c0000010001c0100002000100015180001504646e73310a65617379736572766572036e657400c0100002000100015180000704646e7332c03c 34766 f1a20000000100000000000003777777086c616e67686f7574026e6c0000010001 f1a28000000100000002000003777777086c616e67686f7574026e6c0000010001c01000020001000151800013036e733109752d73657276657273036e657400c01000020001000151800006036e7332c031 34767 802400000001000000000000076b616e746f6f720832646568616e6473026e6c0000010001 802480000001000000030002076b616e746f6f720832646568616e6473026e6c0000010001c01400020001000151800008056e69657577c01dc01400020001000151800010036e733206776964657873036e657400c0140002000100015180000d036e733306776964657873c01dc031000100010001518000043efa0657c061000100010001518000043efa0703 34768 2a6e00000001000000000000024e53074555524f4e4554024e4c0000010001 2a6e80000001000000020001024e53074555524f4e4554024e4c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 34769 a0880000000100000000000006616c7469756d026e6c0000ff0001 a0888000000100000002000206616c7469756d026e6c0000ff0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f0046 34770 5296000000010000000000000d72656c61746965706c616e6574026e6c0000010001 5296800000010000000200020d72656c61746965706c616e6574026e6c0000010001c00c0002000100015180000c04646e73310470696e73c01ac00c0002000100015180000704646e7332c033c02e00010001000151800004d9c26101c04600010001000151800004d9c26002 34771 eec100000001000000000000034d5831046d61696c057061727365026e6c0000010001 eec180000001000000020002034d5831046d61696c057061727365026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c02f00010001000151800004d5ef9b0bc04100010001000151800004d5efb238 34772 9f5200000001000000000000034d5831046d61696c057061727365026e6c00001c0001 9f5280000001000000020002034d5831046d61696c057061727365026e6c00001c0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c02f00010001000151800004d5ef9b0bc04100010001000151800004d5efb238 34773 4a6c00000001000000000000034d5831046d61696c057061727365026e6c0000260001 4a6c80000001000000020002034d5831046d61696c057061727365026e6c0000260001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c02f00010001000151800004d5ef9b0bc04100010001000151800004d5efb238 34774 09e200000001000000000000034d5832046d61696c057061727365026e6c0000010001 09e280000001000000020002034d5832046d61696c057061727365026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c02f00010001000151800004d5ef9b0bc04100010001000151800004d5efb238 34775 c0e900000001000000000000034d5832046d61696c057061727365026e6c00001c0001 c0e980000001000000020002034d5832046d61696c057061727365026e6c00001c0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c02f00010001000151800004d5ef9b0bc04100010001000151800004d5efb238 34776 d27e00000001000000000000034d5832046d61696c057061727365026e6c0000260001 d27e80000001000000020002034d5832046d61696c057061727365026e6c0000260001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c02f00010001000151800004d5ef9b0bc04100010001000151800004d5efb238 34777 9f8400000001000000000000036e7331057061727365026e6c00001c0001 9f8480000001000000020002036e7331057061727365026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9b0bc03800010001000151800004d5efb238 34778 0a7900000001000000000000036e7331057061727365026e6c0000260001 0a7980000001000000020002036e7331057061727365026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9b0bc03800010001000151800004d5efb238 34779 b64c00000001000000000000036e7332057061727365026e6c00001c0001 b64c80000001000000020002036e7332057061727365026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d5ef9b0bc00c00010001000151800004d5efb238 34780 f11900000001000000000000036e7332057061727365026e6c0000260001 f11980000001000000020002036e7332057061727365026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d5ef9b0bc00c00010001000151800004d5efb238 34781 cdab00000001000000000000034d5831046d61696c057061727365026e6c0000010001 cdab80000001000000020002034d5831046d61696c057061727365026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c02f00010001000151800004d5ef9b0bc04100010001000151800004d5efb238 34782 3e1228000001000000010000026e6c0000060001035f6763045f7463700477617166026e6c0000210001000002580016000000640cc4067365727665720477617166026e6c00 3e12a8040000000000000000 34783 85ee0000000100000000000003777777087370656c70756e74026e6c0000010001 85ee8000000100000002000203777777087370656c70756e74026e6c0000010001c0100002000100015180000b036e73310470696e65c019c01000020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 34784 c3ad00000001000000000000037777770a7365782d7a6f656b6572026e6c0000010001 c3ad80000001000000020000037777770a7365782d7a6f656b6572026e6c0000010001c0100002000100015180000f026e73096379626572636f6d6dc01bc01000020001000151800006036e7332c032 34785 b75800000001000000000000056b68616f7a026e6c00000f0001 b75880000001000000020000056b68616f7a026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02c 34786 f4c700000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 f4c780000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 34787 ec5d00000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 ec5d80000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 34788 1a430000000100000000000003777777096264736d7a616b656e026e6c0000010001 1a438000000100000002000003777777096264736d7a616b656e026e6c0000010001c01000020001000151800012036e7333087a6f6e656564697403636f6d00c01000020001000151800006036e7334c032 34789 37d00000000100000000000004616e7762106d756c74696d65646961627261696e73026e6c0000010001 37d08000000100000002000204616e7762106d756c74696d65646961627261696e73026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c022c01100020001000151800006036e7332c03ac03600010001000151800004d43d0f08c05400010001000151800004d43d19e2 34790 e97100000001000000000000037777770d6a6f6e676567657a696e6e656e026e6c0000010001 e97180000001000000030000037777770d6a6f6e676567657a696e6e656e026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c036c01000020001000151800006036e7333c036 34791 225b000000010000000000000377777705626f6b6f65026e6c0000010001 225b800000010000000200020377777705626f6b6f65026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7334c010c02a00010001000151800004d554b1dcc03c00010001000151800004d5540479 34792 6709000000010000000000000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001 6709800000010000000200000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001c0130002000100015180001406737068696e7807726f7365747461036e657400c0130002000100015180000906616e75626973c039 34793 883d0000000100000000000003777777126175746f76616e77696a6e6761617264656e026e6c0000010001 883d8000000100000002000203777777126175746f76616e77696a6e6761617264656e026e6c0000010001c0100002000100015180000d036e733106796f72697465c023c01000020001000151800006036e7332c03bc0370001000100015180000451047320c0500001000100015180000451047321 34794 0f9e0000000100000000000003777777096164686f7374696e67026e6c0000010001 0f9e8000000100000002000203777777096164686f7374696e67026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 34795 bfb70000000100000000000004616a6178066e696b686566026e6c0000010001 bfb78000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 34796 0ce300000001000000000000037777770b7765726b7374756b6b656e0a7a6f656b706167696e61026e6c0000010001 0ce380000001000000030003037777770b7765726b7374756b6b656e0a7a6f656b706167696e61026e6c0000010001c01c00020001000151800006036e7331c01cc01c00020001000151800006036e7332c01cc01c00020001000151800006036e7333c01cc03b000100010001518000043e45a282c04d000100010001518000043e45a283c05f000100010001518000043e45a284 34797 000000007002400044d80000020405b401010402 000080010000000000000000 34798 cdd300000001000000000000037777770766656c74726f6e026e6c0000010001 cdd380000001000000030002037777770766656c74726f6e026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 34799 c9a000000001000000000000036e73330767617574656e67026e6c0000010001 c9a080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34800 c9a100000001000000000000036e73340767617574656e67026e6c0000010001 c9a180000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34801 b72633b05010447082450000000000000000 b726b3b40000000000000000 34802 b72633b050184470f04800000089b41c000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7e0d403ccf8d00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 b726b3b40000000000000000 34803 d62500100001000000000001036e733103757063026e6c00000100010000290800000080000000 d62580000001000000030004036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 34804 92bf00100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000080000000 92bf80000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 34805 3b2c00000001000000000000037777770d656262696e672d6f707469656b026e6c0000010001 3b2c80000001000000020000037777770d656262696e672d6f707469656b026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c038 34806 98d500000001000000000000026e73076575726f6e6574026e6c0000010001 98d580000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 34807 b72633be5011446281b90000000000000000 b726b3b40000000000000000 34808 000000007002400033630000020405b401010402 000080010000000000000000 34809 6c9600000001000000000000037777771f7363686f6f6e686f76656e2d62656472696a66736d616b656c61617264696a026e6c0000010001 6c9680000001000000030003037777771f7363686f6f6e686f76656e2d62656472696a66736d616b656c61617264696a026e6c0000010001c0100002000100015180000c036e7331053266617374c030c01000020001000151800006036e7332c048c01000020001000151800006036e7333c048c0440001000100015180000450f7c022c05c000100010001518000043e858122c06e000100010001518000045117eb22 34810 b72633bf5010446281b80000000000000000 b726b3b40000000000000000 34811 b726ed2d50104470b7520000000000000000 34812 31e00000000100000000000006696e66696e69026e6c00000f0001 31e08000000100000002000206696e66696e69026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 34813 b726ed2d5018447083f1000000895682000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7e0d403ccf8d00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 34814 00b400100001000000000001046d6f7265026e6c00000f00010000290800000080000000 00b480000001000000030004046d6f7265026e6c00000f0001c00c0002000100015180000f036e7331086e6f766178657373c011c00c00020001000151800006036e7332c029c00c00020001000151800006036e7333c029c02500010001000151800004d5c98015c04000010001000151800004d5c9bf12c05200010001000151800004d5ef9c260000291000000000000000 34815 4cd20000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 4cd28000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 34816 b726ed3b50114462b6c60000000000000000 34817 c2e200000001000000000000037777771662757572742d627572656e62656d696464656c696e67026e6c0000010001 c2e280000001000000020000037777771662757572742d627572656e62656d696464656c696e67026e6c0000010001c0100002000100015180000b036e73310469706d68c027c0100002000100015180000e036e73320469706d68036e657400 34818 863600000001000000000000026e730c696e746572636f6e6e656374026e6c0000010001 863680000001000000030003026e730c696e746572636f6e6e656374026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004d453c005c03e00010001000151800004d453c006c05000010001000151800004d453c805 34819 e1c900000001000000000000036e73320c696e746572636f6e6e656374026e6c0000010001 e1c980000001000000030003036e73320c696e746572636f6e6e656374026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03100010001000151800004d453c005c00c00010001000151800004d453c006c05000010001000151800004d453c805 34820 000000007002400037b50000020405b401010402 000080010000000000000000 34821 d3580000000100000000000003777777026239026e6c0000010001 d3588000000100000002000203777777026239026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c013c01000020001000151800006036e7332c02ac02700010001000151800004d5e38d0ac04400010001000151800004d5e38205 34822 9c4c00000001000000000000037777770f67726f65696272696c6a616e74656e026e6c0000010001 9c4c80000001000000020002037777770f67726f65696272696c6a616e74656e026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c020c01000020001000151800006036e7332c038c034000100010001518000045054f347c050000100010001518000043e94a047 34823 5e12010000010000000000000a61726368696d65646573026e6c0000ff0001 5e12810000010000000200020a61726368696d65646573026e6c0000ff0001c00c0002000100015180001103646e730a636f6e63657074736661c017c00c0002000100015180001004646e733208636f6e6365707473c017c02b00010001000151800004d5c51c03c04800010001000151800004d5c51e1c 34824 36260000000100000000000004756e6570026e6c0000010001 36268000000100000002000104756e6570026e6c0000010001c00c0002000100015180000a026e730469776179c011c00c0002000100015180000c026e730364796e036f726700c02500010001000151800004c14e1e04 34825 901e0000000100000000000003777777106772617469737370656c6c65746a6573026e6c0000010001 901e8000000100000002000203777777106772617469737370656c6c65746a6573026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c021c01000020001000151800006036e7332c039c03500010001000151800004d90867fec05400010001000151800004c1ad2bfe 34826 b726ed3c50104462b6c50000000000000000 34827 71d40000000100000000000008686f73746e616d650462696e640000100003 71d48000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 34828 1f450000000100000000000004777777770974696b6b6962626164026e6c0000010001 1f458403000100000001000004777777770974696b6b6962626164026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 34829 594800000001000000000000037777770674656b746f6e026e6c0000010001 594880000001000000030002037777770674656b746f6e026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 34830 b727b1b350104470f71d0000000000000000 34831 3a9d0000000100000000000006787334616c6c026e6c00000f0001 3a9d8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 34832 2873000000010000000000000c63656e6562616e6b69657273026e6c0000010001 2873800000010000000200000c63656e6562616e6b69657273026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 34833 b727b1b350184470f7580000008922e6000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403b7e0d403ccf8d00030000002a4e544c4d535350000100000097b200c004000400260000000600060020000000534552564552574151460000 34834 5209000000010000000000000e677261746973706c6161746a6573076661737475726c026e6c0000010001 5209800000010000000200000e677261746973706c6161746a6573076661737475726c026e6c0000010001c01b00020001000151800012026e73096e6c686f7374696e67036e657400c01b00020001000151800006036e7331c03a 34835 8c5f00000001000000000000037777770e616f6e656e696768747374616e64026e6c0000010001 8c5f80000001000000020000037777770e616f6e656e696768747374616e64026e6c0000010001c01000020001000151800010026e73076e65737363697303636f6d00c01000020001000151800006036e7332c036 34836 f9dd00000001000000000000037777770b736f6e67636f6e74657374026e6c0000010001 f9dd80000001000000020000037777770b736f6e67636f6e74657374026e6c0000010001c0100002000100015180001504646e73310a65617379736572766572036e657400c0100002000100015180000704646e7332c035 34837 7fdc00000001000000000000036e733206656e6574636f026e6c0000010001 7fdc80000001000000030002036e733206656e6574636f026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 34838 58e800000001000000000000055f6c646170045f7463702437663264386636642d303161352d343338332d613734332d62323537316161323361316407646f6d61696e73065f6d736463730a70616c6d656e7475696e026e6c0000060001 58e884030001000000010000055f6c646170045f7463702437663264386636642d303161352d343338332d613734332d62323537316161323361316407646f6d61696e73065f6d736463730a70616c6d656e7475696e026e6c0000060001c05600060001000038400036026e730f646f6d61696e2d7265676973747279c0560a686f73746d6173746572c06d0bf1e540000070800000384000278d0000003840 34839 b727b1c150114462f6910000000000000000 34840 53de000000010000000000000b6672616e736e6f6f72656e026e6c00000f0001 53de800000010000000200020b6672616e736e6f6f72656e026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc018c00c00020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 34841 5a8e00000001000000000000037777770c726f6b656e656e6465776574026e6c0000010001 5a8e80000001000000020000037777770c726f6b656e656e6465776574026e6c0000010001c0100002000100015180000e036e73310464646e68036e657400c01000020001000151800006036e7332c035 34842 805a00000001000000000000046d6f7265026e6c00000f0001 805a80000001000000030003046d6f7265026e6c00000f0001c00c0002000100015180000f036e7331086e6f766178657373c011c00c00020001000151800006036e7332c029c00c00020001000151800006036e7333c029c02500010001000151800004d5c98015c04000010001000151800004d5c9bf12c05200010001000151800004d5ef9c26 34843 672d0000000100000000000003777777076d65796c696e670564656d6f6e026e6c0000010001 672d8000000100000003000203777777076d65796c696e670564656d6f6e026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c0180002000100015180000f036e73320564656d6f6e036e657400c03200010001000151800004c29f4906c04400010001000151800004c29fb004 34844 556c00000001000000000000037777770d6e69657461667761636874656e026e6c0000010001 556c80000001000000020001037777770d6e69657461667761636874656e026e6c0000010001c01000020001000151800009026e73036e6667c01ec0100002000100015180000d036e733306636f62776562c01ec03200010001000151800004c26dd603 34845 b727b1c250104462f6900000000000000000 34846 df8800000001000000000000056d61696c3209636c65616e706f7274026e6c0000010001 df8880000001000000020002056d61696c3209636c65616e706f7274026e6c0000010001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 34847 25a300000001000000000000036e7332076e656473746174026e6c0000010001 25a380000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34848 99ed00000001000000000000036e7332076e656473746174026e6c0000260001 99ed80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34849 5081000000010000000000000469632d73026e6c00000f0001 5081800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 34850 a4b200000001000000000000036e7334076e656473746174026e6c0000010001 a4b280000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34851 525900000001000000000000036e7334076e656473746174026e6c0000260001 525980000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34852 deca000000010000000000000c666c6565746d6f6e69746f72026e6c0000ff0001 deca800000010000000200020c666c6565746d6f6e69746f72026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 34853 1a4f00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 1a4f80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 34854 d1500000000100000000000008766f6c656e64616d08686f74656c2d6e75026e6c0000010001 d1508000000100000002000008766f6c656e64616d08686f74656c2d6e75026e6c0000010001c01500020001000151800014036e73310a72656d61726361626c650362697a00c01500020001000151800006036e7332c036 34855 68020000000100000000000003777777036c6f6c026e6c0000010001 68028000000100000002000203777777036c6f6c026e6c0000010001c0100002000100015180000b036e73310477656233c014c01000020001000151800006036e7332c02cc02800010001000151800004d436240ec03f00010001000151800004c2b262ef 34856 be9a000000010000000000000a676174656b656570657210747775696a7665722d696e636173736f026e6c0000010001 be9a800000010000000200020a676174656b656570657210747775696a7665722d696e636173736f026e6c0000010001c01700020001000151800012036e73310b6963742d636f6e63657074c028c01700020001000151800006036e7332c040c03c00010001000151800004c26d9983c05a00010001000151800004d5544f5d 34857 941c000000010000000000000a676174656b656570657210747775696a7665722d696e636173736f026e6c00001c0001 941c800000010000000200020a676174656b656570657210747775696a7665722d696e636173736f026e6c00001c0001c01700020001000151800012036e73310b6963742d636f6e63657074c028c01700020001000151800006036e7332c040c03c00010001000151800004c26d9983c05a00010001000151800004d5544f5d 34858 d168000000010000000000000a676174656b656570657210747775696a7665722d696e636173736f026e6c0000260001 d168800000010000000200020a676174656b656570657210747775696a7665722d696e636173736f026e6c0000260001c01700020001000151800012036e73310b6963742d636f6e63657074c028c01700020001000151800006036e7332c040c03c00010001000151800004c26d9983c05a00010001000151800004d5544f5d 34859 5b2b000000010000000000000a676174656b656570657210747775696a7665722d696e636173736f026e6c0000010001 5b2b800000010000000200020a676174656b656570657210747775696a7665722d696e636173736f026e6c0000010001c01700020001000151800012036e73310b6963742d636f6e63657074c028c01700020001000151800006036e7332c040c03c00010001000151800004c26d9983c05a00010001000151800004d5544f5d 34860 32aa00000001000000000000094a414e53454e574542024e4c00000f0001 32aa80000001000000020002094a414e53454e574542024e4c00000f0001c00c00020001000151800009036e7331026973c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5852102c03f00010001000151800004d5c41503 34861 66290000000100000000000004626c313002626c06787334616c6c026e6c0000010001 66298000000100000003000204626c313002626c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 34862 4bbe000000010000000000000577656572740763656d61746563026e6c00000f0001 4bbe800000010000000200020577656572740763656d61746563026e6c00000f0001c0120002000100015180000c036e73310564656d6f6ec01ac01200020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 34863 baa200000001000000000000036e7332046177676f026e6c0000010001 baa280000001000000020002036e7332046177676f026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d9aa124cc00c00010001000151800004d9aa124d 34864 4b2e00000001000000000000036e7331046177676f026e6c0000010001 4b2e80000001000000020002036e7331046177676f026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9aa124cc03700010001000151800004d9aa124d 34865 3a4f000000010000000000000377777705616e646573026e6c0000010001 3a4f800000010000000200010377777705616e646573026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c016c01000020001000151800011036e7332076e6564636f6d70036f726700c02a00010001000151800004c3c1a80d 34866 b2e80000000100000000000003777777046476686e026e6c0000010001 b2e88000000100000003000303777777046476686e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004c1ad573dc04600010001000151800004c1ad573ec05800010001000151800004d5880089 34867 97d900000001000000000000037777770a6879706f737061646965026e6c0000010001 97d980000001000000020000037777770a6879706f737061646965026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 34868 80c300000001000000000000076365657363617006787334616c6c026e6c0000010001 80c380000001000000030002076365657363617006787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 34869 07f6000000010000000000000377777708696e76656e747261026e6c0000010001 07f6800000010000000200020377777708696e76656e747261026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c019c01000020001000151800006036e7332c030c02d00010001000151800004c3402003c04600010001000151800004c340202b 34870 fa83001000010000000000010765313834303839057570632d65066368656c6c6f026e6c00000100010000290800000080000000 fa83800000010000000300040765313834303839057570632d65066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c420000291000000000000000 34871 c6ef00000001000000000000087363697a7a6f72730474747a6e026e6c0000010001 c6ef80000001000000020002087363697a7a6f72730474747a6e026e6c0000010001c0150002000100015180000f036e733108776f726c646e6574c01ac01500020001000151800006036e7332c032c02e00010001000151800004d87a0479c04900010001000151800004d86296b6 34872 dd6300000001000000000000037777770c6d61726174686f6e72756e73026e6c0000010001 dd6380000001000000020002037777770c6d61726174686f6e72756e73026e6c0000010001c0100002000100015180000d026e7307636f6f6c636f6dc01dc01000020001000151800006036e7332c034c03100010001000151800004c1ad3506c04a00010001000151800004c1ad35c1 34873 f1a700000001000000000000036e733103757063026e6c0000010001 f1a780000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 34874 7f3b00000001000000000000046e733032066368656c6c6f026e6c0000010001 7f3b80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 34875 be44000000010000000000000866696c6167656e74026e6c00000f0001 be44800000010000000200020866696c6167656e74026e6c00000f0001c00c00020001000151800012036e73310b696e7465727374726f6f6dc015c00c00020001000151800006036e7332c02dc0290001000100015180000450558121c04700010001000151800004d58141c4 34876 06ab00000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 06ab80000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 34877 06ac00000001000000000000036e7334096b6162656c666f6f6e026e6c0000010001 06ac80000001000000020002036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f03 34878 192000000001000000000000033135360331363303313334033230370964796e61626c6f636b07656173796e6574026e6c0000100001 192080000001000000020002033135360331363303313334033230370964796e61626c6f636b07656173796e6574026e6c0000100001c02600020001000151800006036e7330c026c02600020001000151800006036e7331c026c04200010001000151800004c2a55e01c05400010001000151800004c2a55e05 34879 16ab0000000100000000000003777777147363686576656e696e67656e2d63656e7472756d026e6c0000010001 16ab8000000100000003000203777777147363686576656e696e67656e2d63656e7472756d026e6c0000010001c0100002000100015180000d036e733106776964657873c025c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c03dc03900010001000151800004d4ccc0fcc06e000100010001518000043efa0703 34880 0fa300000001000000000000037777770f616e6e656d6172696577616c6b6572026e6c0000010001 0fa380000001000000030000037777770f616e6e656d6172696577616c6b6572026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c038c01000020001000151800006036e7333c038 34881 ea3c00000001000000000000096e6f76616772616166026e6c00000f0001 ea3c80000001000000030003096e6f76616772616166026e6c00000f0001c00c00020001000151800010036e7331096d61726b6772616166c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a00010001000151800004c3f13ceec04600010001000151800004c372eb43c058000100010001518000043e320e8f 34882 04e000000001000000000000066d3264626973026e6c00000f0001 04e080000001000000020002066d3264626973026e6c00000f0001c00c00020001000151800010036e7331096e65646572686f7374c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5ef9302c04300010001000151800004d5efb241 34883 12d4000000010000000000000b72696f766f6f727a6f7267026e6c00000f0001 12d4800000010000000200000b72696f766f6f727a6f7267026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 34884 804900000001000000000000026e7306787334616c6c026e6c00001c0001 804980000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 34885 81f600000001000000000000026e7306787334616c6c026e6c0000260001 81f680000001000000030002026e7306787334616c6c026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 34886 558400000001000000000000036e733206787334616c6c026e6c00001c0001 558480000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 34887 617600000001000000000000036e733206787334616c6c026e6c0000260001 617680000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 34888 3a0000000001000000000000023230033230310239330236350770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 3a0080000001000000020002023230033230310239330236350770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02c00020001000151800006036e7330c02cc02c00020001000151800006036e7331c02cc04800010001000151800004c2a55e01c05a00010001000151800004c2a55e05 34889 783e00000001000000000000037777770c767664726f7474657264616d026e6c0000010001 783e80000001000000020002037777770c767664726f7474657264616d026e6c0000010001c0100002000100015180001204646e73310a6e65746d617374657273c01dc0100002000100015180000704646e7332c036c0310001000100015180000451044203c04f00010001000151800004510442c9 34890 2775000000010000000000000c6c6962726573657276696365026e6c0000020001 2775800000010000000200020c6c6962726573657276696365026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 34891 7bb20000000100000000000003767070026e6c0000010001 7bb28000000100000002000203767070026e6c0000010001c00c0002000100015180000e036e733007656173796e6574c010c00c00020001000151800006036e7331c028c02400010001000151800004c2a55e01c03e00010001000151800004c2a55e05 34892 cc1e0000000100000000000007726561666f7273026e6c0000010001 cc1e8000000100000002000207726561666f7273026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 34893 3dfd0000000100000000000003777777086264736d61676963026e6c0000010001 3dfd8000000100000002000003777777086264736d61676963026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c019c0100002000100015180000805646e732d32c033 34894 7a0500000001000000000000076f7267616e6f6e036f737309616b7a6f6e6f62656c026e6c00000f0001 7a0580000001000000020002076f7267616e6f6e036f737309616b7a6f6e6f62656c026e6c00000f0001c0180002000100015180000d0a676174656b6565706572c014c0180002000100015180000e036e733107737572666e6574c022c03600010001000151800004c0570302c04f00010001000151800004c0576a65 34895 30d700000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 30d780000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 34896 dbb50000000100000000000006666174696d6103646473026e6c00000f0001 dbb58000000100000003000306666174696d6103646473026e6c00000f0001c01300020001000151800017036e733110736361726c65742d696e7465726e6574c017c01300020001000151800006036e7332c02fc01300020001000151800006036e7333c02fc02b00010001000151800004d5ccc302c04e00010001000151800004d5ccc303c06000010001000151800004c277e953 34897 0f200000000100000000000003777777077768656b616d70026e6c0000010001 0f208000000100000002000003777777077768656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 34898 0cb500000001000000000000026e73076e65746c616e64026e6c00001c0001 0cb580000001000000020002026e73076e65746c616e64026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 34899 997d00000001000000000000026e73076e65746c616e64026e6c0000260001 997d80000001000000020002026e73076e65746c616e64026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 34900 5e3f00000001000000000000036e7332076e65746c616e64026e6c00001c0001 5e3f80000001000000020002036e7332076e65746c616e64026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 34901 c02800000001000000000000036e7332076e65746c616e64026e6c0000260001 c02880000001000000020002036e7332076e65746c616e64026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 34902 0a0f0000000100000000000003777777077768656b616d70026e6c0000010001 0a0f8000000100000002000003777777077768656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 34903 afaf00000001000000000000037777770d62657274706c616e7461676965026e6c0000010001 afaf80000001000000020000037777770d62657274706c616e7461676965026e6c0000010001c0100002000100015180000f026e73066f786361727403636f6d00c01000020001000151800006036e7332c035 34904 068700000001000000000000036e733103696166026e6c0000010001 068780000001000000020002036e733103696166026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045059e040c036000100010001518000045059ee03 34905 f8c10000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 f8c18000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 34906 984a0000000100000000000006626c69636f6e026e6c0000010001 984a8000000100000002000206626c69636f6e026e6c0000010001c00c00020001000151800010036e733109637265616374697665c013c00c00020001000151800006036e7332c02bc02700010001000151800004505faa04c04300010001000151800004505faa06 34907 6e2a00000001000000000000036e73320b696e7465727374726f6f6d026e6c0000010001 6e2a80000001000000020002036e73320b696e7465727374726f6f6d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0300001000100015180000450558121c00c00010001000151800004d58141c4 34908 cf9a00000001000000000000036e73310b696e7465727374726f6f6d026e6c0000010001 cf9a80000001000000020002036e73310b696e7465727374726f6f6d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450558121c03e00010001000151800004d58141c4 34909 af5500000001000000000000046d61696c067265776f726b026e6c0000010001 af5580000001000000020000046d61696c067265776f726b026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c032 34910 f98600000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 f98680000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 34911 fcc300000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000260001 fcc380000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 34912 7b5f00000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 7b5f80000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 34913 5c8c00000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000260001 5c8c80000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 34914 2e4600000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 2e4680000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 34915 4bd500000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000260001 4bd580000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 34916 2ac7000000010000000000000a656c656374726162656c026e6c00001c0001 2ac7800000010000000200010a656c656374726162656c026e6c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c02b00010001000151800004d535c463 34917 d43a0000000100000000000004646e73310a6e65746d617374657273026e6c0000010001 d43a8000000100000002000204646e73310a6e65746d617374657273026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c0001000100015180000451044203c03e00010001000151800004510442c9 34918 784d0000000100000000000004646e73310a6e65746d617374657273026e6c00001c0001 784d8000000100000002000204646e73310a6e65746d617374657273026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c0001000100015180000451044203c03e00010001000151800004510442c9 34919 47360000000100000000000004646e73310a6e65746d617374657273026e6c0000260001 47368000000100000002000204646e73310a6e65746d617374657273026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c0001000100015180000451044203c03e00010001000151800004510442c9 34920 10d40000000100000000000004646e73320a6e65746d617374657273026e6c0000010001 10d48000000100000002000204646e73320a6e65746d617374657273026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0300001000100015180000451044203c00c00010001000151800004510442c9 34921 9a9400000001000000000000036e7331046372696f026e6c0000010001 9a9480000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34922 be610000000100000000000004646e73320a6e65746d617374657273026e6c00001c0001 be618000000100000002000204646e73320a6e65746d617374657273026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0300001000100015180000451044203c00c00010001000151800004510442c9 34923 d15900000001000000000000036e7332046372696f026e6c0000010001 d15980000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34924 a60000000001000000000000037777770a72656372656174696566026e6c0000010001 a60080000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 34925 55e00000000100000000000004646e73320a6e65746d617374657273026e6c0000260001 55e08000000100000002000204646e73320a6e65746d617374657273026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0300001000100015180000451044203c00c00010001000151800004510442c9 34926 c32100000001000000000000036e7335046372696f026e6c0000010001 c32180000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34927 40a700000001000000000000036e7336046372696f026e6c0000010001 40a780000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34928 e860000000010000000000000377777703776562026e6c0000010001 e860800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 34929 f29000000001000000000000036e7331046372696f026e6c0000010001 f29080000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34930 805000000001000000000000036e7332046372696f026e6c0000010001 805080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34931 d59a00000001000000000000036e7335046372696f026e6c0000010001 d59a80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34932 45d300000001000000000000036e7336046372696f026e6c0000010001 45d380000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 34933 adde00000001000000000000037777770d7a616e647374726173706f7274026e6c0000010001 adde80000001000000020002037777770d7a616e647374726173706f7274026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c01ec01000020001000151800006036e7332c035c03200010001000151800004d5e38d0ac04f00010001000151800004d5e38205 34934 4a5900000001000000000000077369656d656e73026e6c00001c0001 4a5980000001000000020002077369656d656e73026e6c00001c0001c00c000200010001518000070473676e32c00cc00c000200010001518000070473676e34c00cc02800010001000151800004c28a8909c03b00010001000151800004c28a890b 34935 357600000001000000000000026e73067874646e6574026e6c00001c0001 357680000001000000020002026e73067874646e6574026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 34936 778900000001000000000000026e73067874646e6574026e6c0000260001 778980000001000000020002026e73067874646e6574026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 34937 5aa100000001000000000000037777770a6272756e656c2d696374026e6c0000010001 5aa180000001000000020000037777770a6272756e656c2d696374026e6c0000010001c01000020001000151800010026e730777697265687562036e657400c01000020001000151800006036e7332c032 34938 de07000000010000000000000765313834303839057570632d65066368656c6c6f026e6c0000010001 de07800000010000000300030765313834303839057570632d65066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 34939 33ef000000010000000000000e6169646d696e6973747261746f72026e6c0000010001 33ef800000010000000300030e6169646d696e6973747261746f72026e6c0000010001c00c0002000100015180000c036e7331053266617374c01bc00c00020001000151800006036e7332c033c00c00020001000151800006036e7333c033c02f0001000100015180000450f7c022c047000100010001518000043e858122c059000100010001518000045117eb22 34940 f3c60000000100000000000003626c3402626c06787334616c6c026e6c0000010001 f3c68000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34941 16770000000100000000000007686f74706f6c6c026e6c0000010001 16778000000100000002000207686f74706f6c6c026e6c0000010001c00c00020001000151800009036e7331026973c014c00c00020001000151800006036e7332c02cc02800010001000151800004d5852102c03d00010001000151800004d5c41503 34942 680a00000001000000000000026e73076e656473746174026e6c00001c0001 680a80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34943 a45300000001000000000000026e73076e656473746174026e6c0000260001 a45380000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 34944 68b700000001000000000000036e7332076e656473746174026e6c0000010001 68b780000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34945 874d00000001000000000000036e7332076e656473746174026e6c00001c0001 874d80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34946 b8a800000001000000000000036e7332076e656473746174026e6c0000260001 b8a880000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34947 4d4600000001000000000000036e7333076e656473746174026e6c00001c0001 4d4680000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34948 f2bb00000001000000000000036e7333076e656473746174026e6c0000260001 f2bb80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 34949 35e500000001000000000000036e7334076e656473746174026e6c0000010001 35e580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34950 52bf00000001000000000000036e7334076e656473746174026e6c00001c0001 52bf80000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34951 677800000001000000000000036e7334076e656473746174026e6c0000260001 677880000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 34952 179028000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d73646373087669616475746368026e6c000021000100000258001a00000064005806736572766572087669616475746368026e6c00 1790a8040000000000000000 34953 1b6e0000000100000000000009652d6c756e61746963026e6c0000010001 1b6e8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34954 2bd90000000100000000000009652d6c756e61746963026e6c0000010001 2bd98000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34955 2dbf00000001000000000000036e733109666972737466696e64026e6c0000010001 2dbf80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34956 00000000700240008d750000020405b401010402 000080010000000000000000 34957 2e3900000001000000000000036e733209666972737466696e64026e6c0000010001 2e3980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34958 f857000000010000000000000b676f656465676562757572026e6c00000f0001 f857800000010000000200020b676f656465676562757572026e6c00000f0001c00c00020001000151800010036e7331096e657467726f756e64c018c00c00020001000151800006036e7332c030c02c000100010001518000045054e415c0480001000100015180000451046014 34959 b729774550104470874a0000000000000000 b729f7440000000000000000 34960 b729774550184470362b0000008bed00000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0328403c54a800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000 b729f7440000000000000000 34961 000000007002faf067e800000204056401010402 000080010000000000000000 34962 3f0e00000001000000000000046c756d63026e6c00001c0001 3f0e80000001000000030003046c756d63026e6c00001c0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000e036e733107737572666e6574c011c025000100010001518000049158d2eac037000100010001518000049158d30ac04900010001000151800004c0576a65 34963 b72977535011446286bc0000000000000000 b729f7540000000000000000 34964 0000000070024000a8b50000020405b401010402 000080010000000000000000 34965 b72a677e5010fd5c73370000000000000000 b72ae7740000000000000000 34966 b72977545010446286bb0000000000000000 b729f7540000000000000000 34967 b72b311750104470e8b60000000000000000 b72bb1140000000000000000 34968 b72b311750184470f0980000008b9500000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0328403c54a800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000 b72bb1140000000000000000 34969 b72b312550114462e8280000000000000000 b72bb1240000000000000000 34970 3a4000000001000000000000036e73340767617574656e67026e6c0000010001 3a4080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 34971 b72a677e5018fd5c94760000008f430e000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403af354403c44d40003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431364f4f535445494e4445520000 b72ae7740000000000000000 34972 0000000070024000c1d20000020405b401010402 000080010000000000000000 34973 da1c00000001000000000000044e545331063139594f3030024e4c0000060001 da1c84030001000000010000044e545331063139594f3030024e4c0000060001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 34974 b72b312650104462e8270000000000000000 b72bb1240000000000000000 34975 5b2f28000001000200000000026e6c00000600010676626769736109766267696e7465726e026e6c00000500fe000000000000c014000100010000000000043e3aa622 5b2fa8040000000000000000 34976 b72c139b501044701f4f0000000000000000 b72c93940000000000000000 34977 cc7b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 cc7b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34978 939d0000000100000000000003626c3102626c06787334616c6c026e6c0000260001 939d8000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 34979 b72c139b50184470e9300000008bd300000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403b0328403c54a800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552444f4d41494e0000 b72c93940000000000000000 34980 b72a678c5011fd4e72a50000000000000000 b72ae7840000000000000000 34981 32e90000000100000000000009652d6c756e61746963026e6c0000010001 32e98000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34982 524f00000001000000000000036e733503777873026e6c0000010001 524f80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 34983 00000000700240006be700000204059801010402 000080010000000000000000 34984 1b7d0000000100000000000009652d6c756e61746963026e6c0000010001 1b7d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 34985 000000007002faf0a28e00000204056401010402 000080010000000000000000 34986 b72c13a9501144621ec10000000000000000 b72c93a40000000000000000 34987 4b120010000100000000000006706163746f6e026e6c0000010001 4b128000000100000003000206706163746f6e026e6c0000010001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 34988 b72a678d5010fd4e72a40000000000000000 b72ae7840000000000000000 34989 b72cd229501043200c090000000000000000 34990 446b00000001000000000000036e733109666972737466696e64026e6c0000010001 446b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34991 b72c13aa501044621ec00000000000000000 b72c93a40000000000000000 34992 b72cd2295018432050a20000008bbf42000000010001000000000f313235343133303435303435302d330000f900010f313235343133303435303435302d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd01403c4e8100030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000 34993 793900000001000000000000036e733209666972737466696e64026e6c0000010001 793980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 34994 b72da6d95010fd5c6e7f0000000000000000 34995 b72cd237501143120b7b0000000000000000 34996 ac7f00000001000000000000037777770476697065026e6c00001c0001 ac7f80000001000000030002037777770476697065026e6c00001c0001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 34997 0000000070024000577700000204059801010402 000080010000000000000000 34998 b0db00000001000000000000046d61696c06657461737465026e6c0000010001 b0db80000001000000020002046d61696c06657461737465026e6c0000010001c0110002000100015180000c036e73310573796e7267c018c01100020001000151800006036e7332c030c02c0001000100015180000452c04b0bc0440001000100015180000452c04b0c 34999 3c8d00000001000000000000026e73076e656473746174026e6c0000010001 3c8d80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 35000 5a1400000001000000000000036e7333076e656473746174026e6c0000010001 5a1480000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 35001 b72da6d95018fd5cf1950000008fe336000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af354403c44d40003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431364f4f535445494e4445520000 35002 b72cd238501043120b7a0000000000000000 35003 b72e32b150104320970f0000000000000000 b72eb2b40000000000000000 35004 b72e32b150184320e3db0000008bb810000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd01403c4e8100030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000 b72eb2b40000000000000000 35005 b67000000001000000000000036e73320a7a65656c616e646e6574026e6c0000010001 b67080000001000000020002036e73320a7a65656c616e646e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 35006 924f00000001000000000000037777770862696c6c32303030026e6c0000010001 924f80000001000000020002037777770862696c6c32303030026e6c0000010001c0100002000100015180000b036e7331046e732d31c019c01000020001000151800006036e7332c031c02d000100010001518000045045a0cdc04400010001000151800004d4cceec8 35007 b72da6e75011fd4e6ded0000000000000000 35008 b72e32bf5011431296810000000000000000 b72eb2b40000000000000000 35009 577000000001000000000000087761726368696c64026e6c00000f0001 577080000001000000020002087761726368696c64026e6c00000f0001c00c0002000100015180000b026e73057162616c6cc015c00c0002000100015180000f026e7309747269706c652d6974c015c02900010001000151800004d584b024c04000010001000151800004d584b002 35010 17480000000100000000000003777777056d656e7537026e6c0000010001 17488403000100000001000003777777056d656e7537026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 35011 00000000700240007aec00000204059801010402 000080010000000000000000 35012 000000007002faf03bc200000204056401010402 000080010000000000000000 35013 3a6b00000001000000000000036e73330767617574656e67026e6c0000010001 3a6b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35014 1a7400000001000000000000036e73330767617574656e67026e6c0000010001 1a7480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35015 b72e32c05010431296800000000000000000 b72eb2c40000000000000000 35016 7d5700000001000000000000026e730e64617461636f6e686f7374696e67026e6c0000260001 7d5780000001000000020002026e730e64617461636f6e686f7374696e67026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d43d2934c04000010001000151800004d468d143 35017 be7900000001000000000000026e730e64617461636f6e686f7374696e67026e6c00001c0001 be7980000001000000020002026e730e64617461636f6e686f7374696e67026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d43d2934c04000010001000151800004d468d143 35018 b72ec244501043202af10000000000000000 35019 4fce00000001000000000000036e73320e64617461636f6e686f7374696e67026e6c0000260001 4fce80000001000000020002036e73320e64617461636f6e686f7374696e67026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc03300010001000151800004d43d2934c00c00010001000151800004d468d143 35020 13dc00000001000000000000036e73320e64617461636f6e686f7374696e67026e6c00001c0001 13dc80000001000000020002036e73320e64617461636f6e686f7374696e67026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc03300010001000151800004d43d2934c00c00010001000151800004d468d143 35021 b72ec24450184320a80f0000008b87be000000010001000000000f313235343133303435303435302d320000f900010f313235343133303435303435302d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd01403c4e8100030000002c4e544c4d535350000100000097b208e006000600260000000600060020000000564247495341564247444f4d0000 35022 b72da6e85010fd4e6dec0000000000000000 35023 b72f4ee65010fd5c5fa40000000000000000 b72fcee40000000000000000 35024 51ab00000001000000000000036e733307747564656c6674026e6c0000010001 51ab80000001000000050005036e733307747564656c6674026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c03e0001000100015180000482a1b441c0500001000100015180000482a12111c0650001000100015180000482a1bc8cc07e00010001000151800004c0576a65 35025 5a4b000000010000000000000a616d65726c616e64656e026e6c0000ff0001 5a4b800000010000000200020a616d65726c616e64656e026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 35026 b72ec252501143122a630000000000000000 35027 11060000000100000000000008686f73746e616d650462696e640000100003 11068000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35028 42520000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 42528000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 35029 b72ec253501043122a620000000000000000 35030 b72f4ee65018fd5c51cb0000008f7426000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af354403c44d40003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431364f4f535445494e4445520000 b72fcee40000000000000000 35031 a525000000010000000000000450433032116269626c696f746865656b626c6164656c026e6c0000010001 a525840300010000000100000450433032116269626c696f746865656b626c6164656c026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 35032 495300000001000000000000036e7331086e6f766178657373026e6c0000010001 495380000001000000030003036e7331086e6f766178657373026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 35033 325200000001000000000000036e73330767617574656e67026e6c0000010001 325280000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35034 28d50000000100000000000008747269746f6e30370761626e616d726f026e6c0000010001 28d58000000100000002000208747269746f6e30370761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c0150002000100015180000b0870686f626f733032c015c03100010001000151800004a7cac30bc04800010001000151800004a7cac30c 35035 b72f4ef45011fd4e5f120000000000000000 b72fcef40000000000000000 35036 46e700000001000000000000037777770f6265726b6f2d706572736c75636874026e6c0000010001 46e780000001000000020002037777770f6265726b6f2d706572736c75636874026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c020c01000020001000151800006036e7332c038c034000100010001518000045054f347c050000100010001518000043e94a047 35037 5d2d28000001000000010000026e6c0000060001055f6c646170045f746370026763065f6d736463730f737465726e2d736572766572626f6c026e6c0000210001000002580027000000640cc40c737465726e2d7365727665720f737465726e2d736572766572626f6c026e6c00 5d2da8040000000000000000 35038 035e00000001000000000000077765626d61696c06646573796465026e6c0000010001 035e80000001000000030003077765626d61696c06646573796465026e6c0000010001c0140002000100015180000f046e732d310774657075636f6dc01bc01400020001000151800007046e732d32c034c01400020001000151800007046e732d33c034c02f000100010001518000043e320d4cc04a00010001000151800004c356164ac05d00010001000151800004c3510c03 35039 0000000070024000192e00000204057a01010402 000080010000000000000000 35040 b72f4ef55010fd4e5f110000000000000000 b72fcef40000000000000000 35041 653100000001000000000000036e733209666972737466696e64026e6c0000010001 653180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35042 ae820000000100000000000003777777056465726174026e6c0000010001 ae828000000100000002000203777777056465726174026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c016c0100002000100015180001004646e733208636f6e6365707473c016c02a00010001000151800004d5c51c03c04700010001000151800004d5c51e1c 35043 b7315009501041b83cb50000000000000000 b731d0040000000000000000 35044 df3b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 df3b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35045 b7315009501841b8edef000000947700000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe38403c4fb80003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000 b731d0040000000000000000 35046 046a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 046a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35047 b7315017501141aa3c1e0000000000000000 b731d0140000000000000000 35048 366a0000000100000000000008686f73746e616d650462696e640000100003 366a8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35049 0000000070024000f64500000204057a01010402 000080010000000000000000 35050 5f3800000001000000000000026e7308767575727765726b026e6c0000010001 5f3880000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 35051 9bd800000001000000000000026e7308767575727765726b026e6c0000010001 9bd880000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 35052 a7ea00000001000000000000026e7308767575727765726b026e6c00001c0001 a7ea80000001000000030001026e7308767575727765726b026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 35053 f1b900000001000000000000026e7308767575727765726b026e6c0000260001 f1b980000001000000030001026e7308767575727765726b026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 35054 b7315018501041aa3c1d0000000000000000 b731d0140000000000000000 35055 c173000000010000000000000b74616e6461727473636f78026e6c00001c0001 c173800000010000000200000b74616e6461727473636f78026e6c00001c0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c033 35056 b731dfc4501041b88a110000000000000000 35057 b731dfc4501841b8ce8c00000094e4c0000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe38403c4fb80003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000 35058 97d800000001000000000000026e73056e65726f63026e6c00001c0001 97d880000001000000020002026e73056e65726f63026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d434010ac03700010001000151800004d434000a 35059 a64a00000001000000000000036e7332056e65726f63026e6c00001c0001 a64a80000001000000020002036e7332056e65726f63026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d434010ac00c00010001000151800004d434000a 35060 b731dfd2501141aa897a0000000000000000 35061 00000000700240000d5b00000204057a01010402 000080010000000000000000 35062 428f000000010000000000000377777709636c61737369636f6e026e6c0000010001 428f800000010000000200010377777709636c61737369636f6e026e6c0000010001c0100002000100015180000a036e733303777873c01ac01000020001000151800006036e7334c032c04400010001000151800004d5ef9a65 35063 b731dfd3501041aa89790000000000000000 35064 ea3d00000001000000000000036e7332056132303030026e6c0000010001 ea3d80000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 35065 b732a88d501041b8d85c0000000000000000 35066 d6c300000001000000000000037777770e686574626c657373657061617264026e6c0000010001 d6c380000001000000020002037777770e686574626c657373657061617264026e6c0000010001c0100002000100015180000c026e730674656c6c7573c01fc01000020001000151800006036e7332c036c033000100010001518000043e3a4cc8c04b000100010001518000043e3a4cc9 35067 b732a88d501841b854d800000094acc0000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afe38403c4fb80003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000535445524e2d534552564552534552564552424f4c0000 35068 b732a89b501141aad7c50000000000000000 35069 686c000000010000000000000a626c61636b626f61726409696e686f6c6c616e64026e6c0000010001 686c800000010000000200020a626c61636b626f61726409696e686f6c6c616e64026e6c0000010001c01700020001000151800006036e7331c017c0170002000100015180000e036e733107737572666e6574c021c03500010001000151800004c2ab230bc04700010001000151800004c0576a65 35070 851600000001000000000000037777770c6c6974746c656475626c696e026e6c0000010001 851680000001000000020002037777770c6c6974746c656475626c696e026e6c0000010001c0100002000100015180000d04696973310577696e646fc01dc01000020001000151800008056969733137c036c03100010001000151800004d9aa050bc04a00010001000151800004d9aa0430 35071 9a8600000001000000000000026e73096772616669656b6173026e6c00001c0001 9a8680000001000000020001026e73096772616669656b6173026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ac0103 35072 b732a89c501041aad7c40000000000000000 35073 43390000000100000000000003777777086469726b6b757974026e6c0000010001 43398000000100000002000003777777086469726b6b757974026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 35074 122400000001000000000000037777771374757373656e6b756e7374656e6b6974736368026e6c0000010001 122480000001000000020002037777771374757373656e6b756e7374656e6b6974736368026e6c0000010001c0100002000100015180000a026e730469636d63c024c01000020001000151800006036e7332c03bc038000100010001518000043e643805c04e000100010001518000043e643806 35075 31430000000100000000000006617474697661026e6c00000f0001 31438000000100000002000206617474697661026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 35076 8140000000010000000000000a656d6561736d7470303203616f6e026e6c0000010001 8140800000010000000200010a656d6561736d7470303203616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 35077 466200000001000000000000037777770a6873766465766f6f726e026e6c0000010001 466280000001000000020000037777770a6873766465766f6f726e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 35078 1fd30000000100000000000003777777056a756d626f026e6c0000010001 1fd38000000100000002000203777777056a756d626f026e6c0000010001c0100002000100015180000c036e733105616b726973c016c0100002000100015180000e066e6562756c610476627662c016c02a00010001000151800004d44837b7c04200010001000151800004d44837b3 35079 f66100000001000000000000026e73076e656473746174026e6c0000010001 f66180000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 35080 93af0000000100000000000007736d6964746a65026e6c00001c0001 93af8000000100000002000207736d6964746a65026e6c00001c0001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 35081 4ad500000001000000000000026e73076e656473746174026e6c0000010001 4ad580000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 35082 7e2e00000001000000000000036e7333076e656473746174026e6c0000010001 7e2e80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 35083 70f800000001000000000000036e7333076e656473746174026e6c0000010001 70f880000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 35084 062100000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000010001 062180000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 35085 66a300000001000000000000036e73320d63656e747269636f6e6c696e65026e6c0000010001 66a380000001000000020002036e73320d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d481ec0cc00c00010001000151800004d590e63a 35086 1fb200000001000000000000037777770b6e65756b6a657061617264026e6c0000010001 1fb280000001000000020002037777770b6e65756b6a657061617264026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c01cc01000020001000151800006036e7332c034c030000100010001518000045054e415c04c0001000100015180000451046014 35087 294400000001000000000000036e733209656174736572766572026e6c0000010001 294480000001000000020002036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb1221 35088 0a7400000001000000000000026e7309656174736572766572026e6c0000010001 0a7480000001000000020002026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb1221 35089 771000000001000000000000036e73320f444f4d41494e2d5245474953545259026e6c00001c0001 771080000001000000030002036e73320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35090 8e2600000001000000000000026e730f444f4d41494e2d5245474953545259026e6c00001c0001 8e2680000001000000030002026e730f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 35091 d6cd00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 d6cd80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 35092 f6c400000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 f6c480000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35093 3f0800000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 3f0880000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35094 7c9900000001000000000000037777770372746c026e6c0000010001 7c9980000001000000020001037777770372746c026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c014c01000020001000151800011036e733207636c742d756661036e657400c02800010001000151800004c3c1ca77 35095 178d00000001000000000000036e7332076e656473746174026e6c0000010001 178d80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35096 595d00000001000000000000036e7334076e656473746174026e6c0000010001 595d80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35097 2d52000000010000000000000c756e647574636861626c6573026e6c00000f0001 2d52800000010000000300010c756e647574636861626c6573026e6c00000f0001c00c0002000100015180000d026e7307696e746f756368c019c00c00020001000151800010026e7307696e746f756368036e657400c00c00020001000151800007046e733031c049c02d00010001000151800004d413c001 35098 7da900000001000000000000036e73310765766964656e74026e6c0000010001 7da980000001000000020002036e73310765766964656e74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c36d19c4c03a00010001000151800004c36d1942 35099 7daa00000001000000000000036e73320765766964656e74026e6c0000010001 7daa80000001000000020002036e73320765766964656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c36d19c4c00c00010001000151800004c36d1942 35100 185f0000000100000000000003777777026e75026e6c0000010001 185f8000000100000003000303777777026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c027000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 35101 6e9d00000001000000000000097361656e64656c667406736974653475026e6c0000010001 6e9d80000001000000020000097361656e64656c667406736974653475026e6c0000010001c01600020001000151800010036e73310673697465347503636f6d00c01600020001000151800006036e7332c035 35102 7cfa000000010000000000000773746f616d7362026e6c00000f0001 7cfa840300010000000100000773746f616d7362026e6c00000f0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 35103 07470000000100000000000013676f6c64656e2d74756c69702d6c656964656e026e6c00000f0001 07478000000100000002000013676f6c64656e2d74756c69702d6c656964656e026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c03b 35104 55a400000001000000000000036e733103686973026e6c0000010001 55a480000001000000030003036e733103686973026e6c0000010001c0100002000100015180000e076e73617574683103626974c014c0100002000100015180000a076e736175746832c030c0100002000100015180000a076e736175746833c030c02800010001000151800004d5880c33c04200010001000151800004d5880c3bc05800010001000151800004d4ccc00b 35105 904b00000001000000000000026e730e61726765776562686f7374696e67026e6c0000010001 904b80000001000000030003026e730e61726765776562686f7374696e67026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7330c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004c3561682c04000010001000151800004c3561683c05200010001000151800004d5de0bfa 35106 215600000001000000000000026e730e61726765776562686f7374696e67026e6c0000260001 215680000001000000030003026e730e61726765776562686f7374696e67026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7330c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004c3561682c04000010001000151800004c3561683c05200010001000151800004d5de0bfa 35107 90ab00000001000000000000036e73300e61726765776562686f7374696e67026e6c0000010001 90ab80000001000000030003036e73300e61726765776562686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03300010001000151800004c3561682c00c00010001000151800004c3561683c05200010001000151800004d5de0bfa 35108 192300000001000000000000036e73300e61726765776562686f7374696e67026e6c0000260001 192380000001000000030003036e73300e61726765776562686f7374696e67026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03300010001000151800004c3561682c00c00010001000151800004c3561683c05200010001000151800004d5de0bfa 35109 327e00000001000000000000036e73330e61726765776562686f7374696e67026e6c0000010001 327e80000001000000030003036e73330e61726765776562686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7330c010c01000020001000151800002c00cc03300010001000151800004c3561682c04400010001000151800004c3561683c00c00010001000151800004d5de0bfa 35110 193f00000001000000000000036e73330e61726765776562686f7374696e67026e6c0000260001 193f80000001000000030003036e73330e61726765776562686f7374696e67026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7330c010c01000020001000151800002c00cc03300010001000151800004c3561682c04400010001000151800004c3561683c00c00010001000151800004d5de0bfa 35111 d9fd000000010000000000001264696572656e6b6c696e69656b6272656461026e6c0000010001 d9fd800000010000000200001264696572656e6b6c696e69656b6272656461026e6c0000010001c00c00020001000151800016036e73310c776f726c6477696465646e73036e657400c00c00020001000151800006036e7332c037 35112 e1a800000001000000000000046162656c0564656d6f6e026e6c0000010001 e1a880000001000000030002046162656c0564656d6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 35113 283a000000010000000000000b6d6574726f6e6965757773026e6c00000f0001 283a800000010000000300010b6d6574726f6e6965757773026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc018c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ac02c000100010001518000043efa0202 35114 328b00000001000000000000036e73330767617574656e67026e6c0000010001 328b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35115 a1070000000100000000000008414c414e48455249024e4c0000010001 a1078000000100000002000008414c414e48455249024e4c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02f 35116 bc2300000001000000000000037777770b7075626c697472656e6473026e6c0000010001 bc2380000001000000030003037777770b7075626c697472656e6473026e6c0000010001c0100002000100015180000e076e73617574683103626974c01cc0100002000100015180000a076e736175746832c038c0100002000100015180000a076e736175746833c038c03000010001000151800004d5880c33c04a00010001000151800004d5880c3bc06000010001000151800004d4ccc00b 35117 c181000000010000000000000c4d41494c2d42415354494f4e04504f525409524f5454455244414d024e4c0000010001 c181800000010000000300030c4d41494c2d42415354494f4e04504f525409524f5454455244414d024e4c0000010001c01e0002000100015180000c0967616e796d65646573c01ec01e00020001000151800007046c656461c01ec01e00020001000151800014036e733203676e7309676574726f6e696373c028c03c00010001000151800004d5c9cf50c05400010001000151800004d5c9cf19c06700010001000151800004910d2a05 35118 607e0000000100000000000005656f77796e0b7669616e6574776f726b73026e6c0000010001 607e8000000100000002000205656f77796e0b7669616e6574776f726b73026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c03200010001000151800004d43d0f08c04400010001000151800004d43d19e2 35119 07d6000000010000000000000563696e647902657407747564656c6674026e6c00000f0001 07d6800000010000000500050563696e647902657407747564656c6674026e6c00000f0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7331c012c0150002000100015180000d07647574746e636202746ec015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000482a1b401c0430001000100015180000482a1b441c0550001000100015180000482a12111c0670001000100015180000482a1bc8cc08000010001000151800004c0576a65 35120 0a9200000001000000000000036e73340767617574656e67026e6c0000010001 0a9280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35121 f4f600000001000000000000037777770f686176696e6761736f667477617265026e6c0000010001 f4f680000001000000020002037777770f686176696e6761736f667477617265026e6c0000010001c0100002000100015180000f026e7309656174736572766572c020c01000020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 35122 157b00000001000000000000106865726465726175746f736368616465026e6c0000010001 157b80000001000000020002106865726465726175746f736368616465026e6c0000010001c00c0002000100015180000d026e73076b6e6f77617265c01dc00c00020001000151800006036e7332c034c03100010001000151800004c3402003c04a00010001000151800004c340202b 35123 353f00000001000000000000036e7334066e6179757461026e6c0000010001 353f80000001000000020002036e7334066e6179757461026e6c0000010001c01000020001000151800006036e7336c010c01000020001000151800006036e7335c010c02b0001000100015180000451144410c03d000100010001518000043dd5ab66 35124 4c0400000001000000000000036e7335066e6179757461026e6c0000010001 4c0480000001000000020002036e7335066e6179757461026e6c0000010001c01000020001000151800006036e7336c010c01000020001000151800002c00cc02b0001000100015180000451144410c00c000100010001518000043dd5ab66 35125 f69f000000010000000000000377777707696e6768697374026e6c0000010001 f69f800000010000000300030377777707696e6768697374026e6c0000010001c0100002000100015180000f05636f627261066b6f6e626962c018c0100002000100015180000906707974686f6ec032c0100002000100015180000e036e733107737572666e6574c018c02c00010001000151800004c0571f16c04700010001000151800004c0571f0bc05c00010001000151800004c0576a65 35126 066c00000001000000000000087468656f6368656d036b756e026e6c00001c0001 066c80000001000000030003087468656f6368656d036b756e026e6c00001c0001c0150002000100015180000f08636170796261726103756369c015c0150002000100015180000a036e733103736369c015c0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483ae3c15c0480001000100015180000483aee004c05e00010001000151800004c0576a65 35127 bd3e00100001000000000001076d61696c6d696a026e6c00001c00010000290800000000000000 bd3e80000001000000020003076d61696c6d696a026e6c00001c0001c00c0002000100015180000b026e73057162616c6cc014c00c0002000100015180000f026e7309747269706c652d6974c014c02800010001000151800004d584b024c03f00010001000151800004d584b0020000291000000000000000 35128 c9a100100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 c9a180000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 35129 dd6600100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 dd6680000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 35130 a27f00000001000000000000076d61696c6d696a026e6c00001c0001 a27f80000001000000020002076d61696c6d696a026e6c00001c0001c00c0002000100015180000b026e73057162616c6cc014c00c0002000100015180000f026e7309747269706c652d6974c014c02800010001000151800004d584b024c03f00010001000151800004d584b002 35131 f9c6000000010000000000000767313633313931057570632d67066368656c6c6f026e6c0000010001 f9c6800000010000000300030767313633313931057570632d67066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 35132 ec1500000001000000000000037777770c6465747765656c696e67656e026e6c0000010001 ec1580000001000000020000037777770c6465747765656c696e67656e026e6c0000010001c0100002000100015180001505646e7332300961637469766569737003636f6d00c0100002000100015180000805646e733231c037 35133 34af0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 34af8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35134 6d620000000100000000000003777777106176726f6b756e737474726962756e65026e6c0000010001 6d628000000100000002000203777777106176726f6b756e737474726962756e65026e6c0000010001c0100002000100015180000a026e730469636d63c021c01000020001000151800006036e7332c038c035000100010001518000043e643805c04b000100010001518000043e643806 35135 721100000001000000000000076e6f7768657265026e6c00000f0001 721180000001000000020000076e6f7768657265026e6c00000f0001c00c00020001000151800010026e73076e65737363697303636f6d00c00c00020001000151800006036e7332c02b 35136 1b40000000010000000000000a63616d706f776f726c64026e6c0000010001 1b40800000010000000200020a63616d706f776f726c64026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 35137 879300000001000000000000036e73310d706f7765727365727665723230026e6c00001c0001 879380000001000000020002036e73310d706f7765727365727665723230026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104711dc040000100010001518000045104711e 35138 022f00000001000000000000036e73310d706f7765727365727665723230026e6c0000260001 022f80000001000000020002036e73310d706f7765727365727665723230026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104711dc040000100010001518000045104711e 35139 dcd800000001000000000000036e73320d706f7765727365727665723230026e6c00001c0001 dcd880000001000000020002036e73320d706f7765727365727665723230026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104711dc00c000100010001518000045104711e 35140 304d00000001000000000000036e73320d706f7765727365727665723230026e6c0000260001 304d80000001000000020002036e73320d706f7765727365727665723230026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104711dc00c000100010001518000045104711e 35141 6a84000000010000000000000377696a026e6c00000f0001 6a84800000010000000200000377696a026e6c00000f0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c028 35142 cdad00000001000000000000026869026e6c00001c0001 cdad80000001000000020000026869026e6c00001c0001c00c0002000100015180000d03646e73036b706e03636f6d00c00c0002000100015180000d036e7332036b706e036e657400 35143 6eb300000001000000000000026e73076e656473746174026e6c0000010001 6eb380000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 35144 eccd00000001000000000000036e7333076e656473746174026e6c0000010001 eccd80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 35145 ee4c00000001000000000000046d61696c076e6574686f7374026e6c0000010001 ee4c80000001000000020000046d61696c076e6574686f7374026e6c0000010001c01100020001000151800012036e73310871346d617469637303636f6d00c01100020001000151800006036e7332c031 35146 4a6200000001000000000000046d61696c076e6574686f7374026e6c00001c0001 4a6280000001000000020000046d61696c076e6574686f7374026e6c00001c0001c01100020001000151800012036e73310871346d617469637303636f6d00c01100020001000151800006036e7332c031 35147 3d8000000001000000000000046d61696c076e6574686f7374026e6c0000260001 3d8080000001000000020000046d61696c076e6574686f7374026e6c0000260001c01100020001000151800012036e73310871346d617469637303636f6d00c01100020001000151800006036e7332c031 35148 9b570000000100000000000003777777036d736e026e6c0000010001 9b578000000100000003000003777777036d736e026e6c0000010001c0100002000100015180001204646e733302756b046d736674036e657400c0100002000100015180000a04646e7331026370c030c0100002000100015180000a04646e7331026463c030 35149 c2dc000000010000000000000377777707676f6d756e646f026e6c0000010001 c2dc800000010000000200000377777707676f6d756e646f026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 35150 09da00000001000000000000037777770c6d6172636f626f727361746f026e6c0000010001 09da80000001000000020002037777770c6d6172636f626f727361746f026e6c0000010001c0100002000100015180000b026e73057162616c6cc01dc0100002000100015180000f026e7309747269706c652d6974c01dc03100010001000151800004d584b024c04800010001000151800004d584b002 35151 48e0000000010000000000000b6361666573746170706572026e6c00000f0001 48e0800000010000000200000b6361666573746170706572026e6c00000f0001c00c00020001000151800010026e73076379736f6e657403636f6d00c00c00020001000151800006036e7331c02f 35152 0d1200000001000000000000037777770b7465616d2d6e696a686f66026e6c0000010001 0d1280000001000000020002037777770b7465616d2d6e696a686f66026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01cc01000020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 35153 4d11000000010000000000000377777709636974796d75736963026e6c0000010001 4d11800000010000000200000377777709636974796d75736963026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 35154 7d9c0000000100000000000005646e732d31056c61646f74026e6c0000010001 7d9c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35155 cf47000000010000000000000568736c6177026e6c0000ff0001 cf47800000010000000300010568736c6177026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 35156 ad0a0000000100000000000005646e732d31056c61646f74026e6c0000010001 ad0a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35157 f0500000000100000000000003777777096b757374656e7a6565026e6c0000010001 f0508000000100000003000103777777096b757374656e7a6565026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 35158 d3e00000000100000000000005646e732d31056c61646f74026e6c0000010001 d3e08000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35159 394d0000000100000000000005646e732d31056c61646f74026e6c0000010001 394d8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35160 08f40000000100000000000004696e666f0a65636974656c65636f6d026e6c0000010001 08f48000000100000002000204696e666f0a65636974656c65636f6d026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000e036e733207626265796f6e64c01cc030000100010001518000043eb1a493c042000100010001518000043eb19002 35161 a590000000010000000000000b7761722d6f6e2d7370616d097369676e6174757265026e6c0000010001 a590800000010000000200020b7761722d6f6e2d7370616d097369676e6174757265026e6c0000010001c01800020001000151800006036e7331c018c0180002000100015180000c036e7331057365636e73c022c03600010001000151800004d5549f4ec048000100010001518000045112a247 35162 b6ab00000001000000000000046c6f7370026e6c00000f0001 b6ab84030001000000010000046c6f7370026e6c00000f0001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 35163 6acf00000001000000000000037777770d6465737065656c7a6f6c646572026e6c0000010001 6acf80000001000000020000037777770d6465737065656c7a6f6c646572026e6c0000010001c0100002000100015180000f036e7331053132337873036e657400c01000020001000151800006036e7332c036 35164 2390000000010000000000000461786973026e6c0000ff0001 2390800000010000000200020461786973026e6c0000ff0001c00c000200010001518000070161026e73c00cc00c000200010001518000040162c027c02500010001000151800004d97261d9c0380001000100015180000450558124 35165 75be00000001000000000000037777770a6864667261757373656e026e6c0000010001 75be84030001000000010000037777770a6864667261757373656e026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 35166 775000000001000000000000096b6579616363657373026e6c00000f0001 775080000001000000020002096b6579616363657373026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc016c00c00020001000151800006036e7332c02ec02a00010001000151800004c3558244c04300010001000151800004c3558245 35167 6f020000000100000000000005646e732d31056c61646f74026e6c0000010001 6f028000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35168 2dc800000001000000000000026d7805726f2d6164026e6c0000010001 2dc880000001000000020002026d7805726f2d6164026e6c0000010001c00f00020001000151800011026e730b6973642d686f6c6c616e64c015c00f00020001000151800006036e7332c02cc02900010001000151800004d5e38d0ac04600010001000151800004d5e38205 35169 b15a000000010000000000000765636b7465636806787334616c6c026e6c0000010001 b15a800000010000000300020765636b7465636806787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 35170 3cef0000000100000000000005646e732d31056c61646f74026e6c0000010001 3cef8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35171 147000000001000000000000046e656e6f0773747564656e7407757477656e7465026e6c0000010001 147080000001000000030003046e656e6f0773747564656e7407757477656e7465026e6c0000010001c01900020001000151800006036e7331c019c01900020001000151800006036e7332c019c01900020001000151800006036e7333c019c0350001000100015180000482590102c0470001000100015180000482590103c05900010001000151800004c0571113 35172 60130000000100000000000005646e732d31056c61646f74026e6c0000010001 60138000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35173 4eca00000001000000000000037777771464616e737363686f6f6c2d77657373656c696e67026e6c0000010001 4eca80000001000000020002037777771464616e737363686f6f6c2d77657373656c696e67026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c025c01000020001000151800006036e7332c03dc039000100010001518000045104580ac059000100010001518000045104601e 35174 19ef00000001000000000000036e733103757063026e6c0000010001 19ef80000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 35175 38520000000100000000000005646e732d31056c61646f74026e6c0000010001 38528000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35176 62d0000000010000000000000377777704616e7762026e6c0000010001 62d0800000010000000200010377777704616e7762026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000d036e7332036b706e036e657400c02900010001000151800004c1ac840a 35177 dd8700000001000000000000056479706564026e6c00000f0001 dd8780000001000000020002056479706564026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 35178 11590000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 11598000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 35179 0624000000010000000000000377777703646674026e6c0000010001 0624800000010000000200000377777703646674026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c02c 35180 bf7300000001000000000000046e733031066368656c6c6f026e6c0000010001 bf7380000001000000030003046e733031066368656c6c6f026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c00c00010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 35181 154400000001000000000000046e733032066368656c6c6f026e6c0000010001 154480000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 35182 82fb0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 82fb8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35183 4a0c00000001000000000000036e7334076e656473746174026e6c0000010001 4a0c80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35184 250600000001000000000000036e7332076e656473746174026e6c0000010001 250680000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35185 c96e00000001000000000000036e7334076e656473746174026e6c0000260001 c96e80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35186 b27400000001000000000000036e7332076e656473746174026e6c0000260001 b27480000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35187 bf0200000001000000000000037777770a666c79696e6766697368026e6c0000010001 bf0280000001000000030002037777770a666c79696e6766697368026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 35188 0ae00000000100000000000009652d6c756e61746963026e6c0000010001 0ae08000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35189 bf6900000001000000000000056e69627564026e6c00000f0001 bf6980000001000000020001056e69627564026e6c00000f0001c00c00020001000151800012026e730c726967687476697375616c73c012c00c00020001000151800011036e7331076379736f6e657403636f6d00c02600010001000151800004d9aa0226 35190 0afb0000000100000000000009652d6c756e61746963026e6c0000010001 0afb8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35191 034a0000000100000000000009652d6c756e61746963026e6c0000010001 034a8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35192 312f0000000100000000000005646e732d32056c61646f74026e6c0000010001 312f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35193 555d00000001000000000000037777770f6669746e6573736170706172616174026e6c0000010001 555d80000001000000020002037777770f6669746e6573736170706172616174026e6c0000010001c0100002000100015180000a026e730469636d63c020c01000020001000151800006036e7332c037c034000100010001518000043e643805c04a000100010001518000043e643806 35194 aa6700000001000000000000037777770e6b616c657877656264657369676e026e6c0000010001 aa6780000001000000020002037777770e6b616c657877656264657369676e026e6c0000010001c0100002000100015180000e04646e7331066e696a636f6dc01fc0100002000100015180000704646e7332c038c03300010001000151800004d5efb108c04d00010001000151800004d5efb116 35195 39ff00000001000000000000036e733109666972737466696e64026e6c0000010001 39ff80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35196 351b00000001000000000000036e733209666972737466696e64026e6c0000010001 351b80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35197 5dc50000000100000000000003736161026e6c00000f0001 5dc58000000100000002000203736161026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c010c00c00020001000151800006036e7332c028c02400010001000151800004c2451012c03c00010001000151800004c2451212 35198 d3ed000000010000000000000a73746172746b6162656c026e6c0000ff0001 d3ed800000010000000300010a73746172746b6162656c026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 35199 cc720000000100000000000003777777116d616e6e656e2d6e61747575726c696a6b026e6c0000010001 cc728000000100000002000203777777116d616e6e656e2d6e61747575726c696a6b026e6c0000010001c01000020001000151800009036e7331026973c022c01000020001000151800006036e7332c03ac03600010001000151800004d5852102c04b00010001000151800004d5c41503 35200 52df0010000100000000000106636861726973026e6c00000f00010000290800000000000000 52df8000000100000002000106636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a0000291000000000000000 35201 715b000000010000000000000377777708636f6d346d617878026e6c0000010001 715b800000010000000200000377777708636f6d346d617878026e6c0000010001c0100002000100015180000c026e73066863636e6574c019c01000020001000151800006036e7332c030 35202 071f00000001000000000000037777770d736561736f6e666c6f77657273026e6c0000010001 071f80000001000000030001037777770d736561736f6e666c6f77657273026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ec01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c050c032000100010001518000043efa0202 35203 1a9b00000001000000000000036e73340767617574656e67026e6c0000010001 1a9b80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35204 3aa000000001000000000000036e73330767617574656e67026e6c0000010001 3aa080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35205 2ab600000001000000000000036e73340767617574656e67026e6c0000010001 2ab680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35206 0aaf00000001000000000000036e73340767617574656e67026e6c0000010001 0aaf80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35207 f39f0000000100000000000004616e73310774697363616c69026e6c0000010001 f39f8000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 35208 b68b0000000100000000000004616e73310774697363616c69026e6c0000260001 b68b8000000100000003000204616e73310774697363616c69026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 35209 68850000000100000000000004616e73320774697363616c69026e6c0000010001 68858000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 35210 b6ba0000000100000000000004616e73320774697363616c69026e6c0000260001 b6ba8000000100000003000204616e73320774697363616c69026e6c0000260001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 35211 3c8900100001000000000001036e733007656173796e6574026e6c00000100010000290800000080000000 3c8980000001000000020003036e733007656173796e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c00010001000151800004c2a55e01c03a00010001000151800004c2a55e050000291000000000000000 35212 92d500100001000000000001036e733107656173796e6574026e6c00000100010000290800000080000000 92d580000001000000020003036e733107656173796e6574026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c2a55e01c00c00010001000151800004c2a55e050000291000000000000000 35213 793100000001000000000000036e733109666972737466696e64026e6c0000010001 793180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35214 567b0000000100000000000003617468026e6c0000010001 567b8000000100000002000203617468026e6c0000010001c00c0002000100015180000c036e73310563736e6574c010c00c00020001000151800006036e7332c028c02400010001000151800004c2451012c03c00010001000151800004c2451212 35215 6e670000000100000000000008686f73746e616d650462696e640000100003 6e678000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35216 52df0000000100000000000008686f73746e616d650462696e640000100003 52df8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35217 a3020000000100000000000006636861726973026e6c00001c0001 a3028000000100000002000006636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35218 1cde00000001000000000000036e733209666972737466696e64026e6c0000010001 1cde80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35219 b0e000000001000000000000076275726d656573026e6c00000f0001 b0e080000001000000020000076275726d656573026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02e 35220 51e90000000100000000000003626c3402626c06787334616c6c026e6c0000010001 51e98000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35221 331c0000000100000000000008686f73746e616d650462696e640000100003 331c8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35222 71750000000100000000000003626c3402626c06787334616c6c026e6c0000260001 71758000000100000003000203626c3402626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35223 03ea0000000100000000000008726f61647369676e07692d67726f65700a6c656964656e756e6976026e6c0000010001 03ea8000000100000003000308726f61647369676e07692d67726f65700a6c656964656e756e6976026e6c0000010001c01d0002000100015180000b08736865726c6f636bc01dc01d0002000100015180000906776174736f6ec01dc01d0002000100015180000e036e733107737572666e6574c028c03c0001000100015180000484e50806c0530001000100015180000484e51602c06800010001000151800004c0576a65 35224 80e0000000010000000000000a7061746866696e64657207692d67726f65700a6c656964656e756e6976026e6c0000010001 80e0800000010000000300030a7061746866696e64657207692d67726f65700a6c656964656e756e6976026e6c0000010001c01f0002000100015180000b08736865726c6f636bc01fc01f0002000100015180000906776174736f6ec01fc01f0002000100015180000e036e733107737572666e6574c02ac03e0001000100015180000484e50806c0550001000100015180000484e51602c06a00010001000151800004c0576a65 35225 60750000000100000000000008726f61647369676e07692d67726f65700a6c656964656e756e6976026e6c0000260001 60758000000100000003000308726f61647369676e07692d67726f65700a6c656964656e756e6976026e6c0000260001c01d0002000100015180000b08736865726c6f636bc01dc01d0002000100015180000906776174736f6ec01dc01d0002000100015180000e036e733107737572666e6574c028c03c0001000100015180000484e50806c0530001000100015180000484e51602c06800010001000151800004c0576a65 35226 735b000000010000000000000a7061746866696e64657207692d67726f65700a6c656964656e756e6976026e6c0000260001 735b800000010000000300030a7061746866696e64657207692d67726f65700a6c656964656e756e6976026e6c0000260001c01f0002000100015180000b08736865726c6f636bc01fc01f0002000100015180000906776174736f6ec01fc01f0002000100015180000e036e733107737572666e6574c02ac03e0001000100015180000484e50806c0550001000100015180000484e51602c06a00010001000151800004c0576a65 35227 78a90000000100000000000006686f72736573026e6c0000010001 78a98000000100000002000206686f72736573026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 35228 4e40000000010000000000000377777712706572736f6e656e64656d6f637261746965026e6c0000010001 4e40840300010000000100000377777712706572736f6e656e64656d6f637261746965026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 35229 2f89000000010000000000000377777706757469636f6e026e6c0000010001 2f89800000010000000200020377777706757469636f6e026e6c0000010001c0100002000100015180000e036e7331077a6f72616e6574c017c01000020001000151800006036e7332c02fc02b0001000100015180000450552103c0450001000100015180000450552104 35230 74d20000000100000000000003303131033139380364736c08636f6e6365707473026e6c0000010001 74d28000000100000002000203303131033139380364736c08636f6e6365707473026e6c0000010001c0180002000100015180001103646e730a636f6e63657074736661c021c0180002000100015180000704646e7332c018c03500010001000151800004d5c51c03c05200010001000151800004d5c51e1c 35231 ccc200000001000000000000037777770b7376636f6e636f72646961026e6c0000010001 ccc280000001000000020000037777770b7376636f6e636f72646961026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 35232 bc360000000100000000000003706f700876656e7475726973026e6c0000010001 bc368000000100000002000003706f700876656e7475726973026e6c0000010001c0100002000100015180000c026e7306766576696461c019c01000020001000151800006036e7332c030 35233 cb0a00000001000000000000036e73310974656c656b6162656c026e6c0000010001 cb0a80000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 35234 51d100000001000000000000037777770470656570026e6c0000010001 51d180000001000000020000037777770470656570026e6c0000010001c01000020001000151800010036e73610674696e74656c03636f6d00c01000020001000151800006036e7362c02d 35235 395b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 395b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35236 45b70000000100000000000003626c3102626c06787334616c6c026e6c0000260001 45b78000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35237 cdb300000001000000000000026e7303626974026e6c0000010001 cdb380000001000000030003026e7303626974026e6c0000010001c00f0002000100015180000a076e736175746831c00fc00f0002000100015180000a076e736175746832c00fc00f0002000100015180000a076e736175746833c00fc02700010001000151800004d5880c33c03d00010001000151800004d5880c3bc05300010001000151800004d4ccc00b 35238 820a00000001000000000000036e733203626974026e6c0000010001 820a80000001000000030003036e733203626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 35239 0e6d0000000100000000000008686f73746e616d650462696e640000100003 0e6d8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35240 6c5c00000001000000000000036e7333066f7264696e61026e6c0000010001 6c5c80000001000000020001036e7333066f7264696e61026e6c0000010001c01000020001000151800006036e7332c010c0100002000100015180000d036e7332036b706e036e657400c02b00010001000151800004c297c1e9 35241 256e00000001000000000000066d6172636f72026e6c0000010001 256e80000001000000020002066d6172636f72026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 35242 a3fb000000010000000000000874656c6570616374026e6c0000010001 a3fb800000010000000200000874656c6570616374026e6c0000010001c00c0002000100015180000c026e7306656e6574636fc015c00c00020001000151800006036e7332c02c 35243 40cf00000001000000000000026e7306656e6574636f026e6c0000010001 40cf80000001000000030002026e7306656e6574636f026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 35244 016200000001000000000000036e733206656e6574636f026e6c0000010001 016280000001000000030002036e733206656e6574636f026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 35245 b5b60000000100000000000006657376656c64026e6c00000f0001 b5b68000000100000002000206657376656c64026e6c00000f0001c00c0002000100015180000f036e7331086261726d61746f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004d5a0da96c04200010001000151800004d5a0da64 35246 17a10000000100000000000006636861726973026e6c00000f0001 17a18000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35247 e2db00000001000000000000037777770a65726f7469636c697665026e6c0000010001 e2db80000001000000020002037777770a65726f7469636c697665026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c01bc01000020001000151800006036e7331c033c02f00010001000151800004c3eaad40c04900010001000151800004c3eaad41 35248 386600000001000000000000095f6b65726265726f73045f746370026463065f6d736463730f6d617274696e6e6f766174696f6e73026e6c0000060001 386684030001000000010000095f6b65726265726f73045f746370026463065f6d736463730f6d617274696e6e6f766174696f6e73026e6c0000060001c03500060001000038400036026e730f646f6d61696e2d7265676973747279c0350a686f73746d6173746572c04c0bf1e540000070800000384000278d0000003840 35249 a56e000000010000000000000777616e61646f6f026e6c00001c0001 a56e800000010000000200010777616e61646f6f026e6c00001c0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 35250 200700100001000000000001026e73027575026e6c00000100010000290800000080000000 200780000001000000040005026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d310200000291000000000000000 35251 443300100001000000000001036e7332027575026e6c00000100010000290800000080000000 443380000001000000040005036e7332027575026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c013c01000020001000151800006036e7333c010c0270001000100015180000483d30405c00c0001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d310200000291000000000000000 35252 38c800000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730f6d617274696e6e6f766174696f6e73026e6c0000060001 38c884030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730f6d617274696e6e6f766174696f6e73026e6c0000060001c05400060001000038400036026e730f646f6d61696e2d7265676973747279c0540a686f73746d6173746572c06b0bf1e540000070800000384000278d0000003840 35253 929b00100001000000000001036e733106736f6c636f6e026e6c00000100010000290800000080000000 929b80000001000000030004036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d21030000291000000000000000 35254 af4d00100001000000000001036e733106736f6c636f6e026e6c00002600010000290800000080000000 af4d80000001000000030004036e733106736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d21030000291000000000000000 35255 520100100001000000000001036e733206736f6c636f6e026e6c00000100010000290800000080000000 520180000001000000030004036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d21030000291000000000000000 35256 35b200100001000000000001036e733206736f6c636f6e026e6c00002600010000290800000080000000 35b280000001000000030004036e733206736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d21030000291000000000000000 35257 26b10010000100000000000108736f6c7574696f6e06736f6c636f6e026e6c00002600010000290800000080000000 26b18000000100000003000408736f6c7574696f6e06736f6c636f6e026e6c0000260001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d21030000291000000000000000 35258 db2400000001000000000000037777770c686f7470686f746f73686f74026e6c0000010001 db2480000001000000020000037777770c686f7470686f746f73686f74026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c034 35259 4f9b00000001000000000000036e73310d706f7765727365727665723230026e6c00001c0001 4f9b80000001000000020002036e73310d706f7765727365727665723230026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104711dc040000100010001518000045104711e 35260 a33f00000001000000000000036e73310d706f7765727365727665723230026e6c0000260001 a33f80000001000000020002036e73310d706f7765727365727665723230026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104711dc040000100010001518000045104711e 35261 027100000001000000000000036e73320d706f7765727365727665723230026e6c00001c0001 027180000001000000020002036e73320d706f7765727365727665723230026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104711dc00c000100010001518000045104711e 35262 a4cd00000001000000000000036e73320d706f7765727365727665723230026e6c0000260001 a4cd80000001000000020002036e73320d706f7765727365727665723230026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104711dc00c000100010001518000045104711e 35263 1ac000000001000000000000036e73330767617574656e67026e6c0000010001 1ac080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35264 bec00000000100000000000003626c3402626c06787334616c6c026e6c0000010001 bec08000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35265 016900000001000000000000036e733106736f6c636f6e026e6c0000010001 016980000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 35266 e47800000001000000000000036e733106736f6c636f6e026e6c0000260001 e47880000001000000030003036e733106736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 35267 f23c00000001000000000000036e733206736f6c636f6e026e6c0000260001 f23c80000001000000030003036e733206736f6c636f6e026e6c0000260001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 35268 791e00000001000000000000036e733206736f6c636f6e026e6c0000010001 791e80000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 35269 9e490000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000260001 9e498000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000260001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 35270 6563000000010000000000000377777708746f706c69737473026e6c0000010001 6563800000010000000300030377777708746f706c69737473026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 35271 486600000001000000000000037777770367736d026e6c0000010001 486680000001000000020002037777770367736d026e6c0000010001c0100002000100015180000c026e7306787334616c6cc014c01000020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 35272 f0bb00000001000000000000036e733007656173796e6574026e6c0000010001 f0bb80000001000000020002036e733007656173796e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c00010001000151800004c2a55e01c03a00010001000151800004c2a55e05 35273 0ff900000001000000000000036e733107656173796e6574026e6c0000010001 0ff980000001000000020002036e733107656173796e6574026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c2a55e01c00c00010001000151800004c2a55e05 35274 06f800000001000000000000046e65777306787334616c6c026e6c00000f0001 06f880000001000000030002046e65777306787334616c6c026e6c00000f0001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 35275 e93f0000000100000000000003777777056e6f766161026e6c0000010001 e93f8000000100000002000203777777056e6f766161026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c016c01000020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 35276 420d0000000100000000000005646e732d32056c61646f74026e6c0000010001 420d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35277 ce7c000000010000000000000363676907686f7473746174026e6c0000010001 ce7c800000010000000200010363676907686f7473746174026e6c0000010001c01000020001000151800011036e696b0a7075626c6973686e6574c018c0100002000100015180000704646e7332c030c02c00010001000151800004c1433c0a 35278 419e000000010000000000000c696d6d6f636f6d6d65726365026e6c00000f0001 419e800000010000000200000c696d6d6f636f6d6d65726365026e6c00000f0001c00c0002000100015180001504646e73310a65617379736572766572036e657400c00c0002000100015180000704646e7332c032 35279 316f000000010000000000000a6970336538336237333105737065656406706c616e6574026e6c00000f000100 316f800000010000000300030a6970336538336237333105737065656406706c616e6574026e6c00000f0001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 35280 11370000000100000000000008627572636b73656e026e6c0000010001 11378000000100000002000008627572636b73656e026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 35281 28ed00000001000000000000036e7332076e65746578706f026e6c0000010001 28ed80000001000000020002036e7332076e65746578706f026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043efa0ac2c00c000100010001518000043efa0a82 35282 b27300000001000000000000037777770a74687569736d61726b74026e6c0000010001 b27380000001000000020000037777770a74687569736d61726b74026e6c0000010001c0100002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0100002000100015180000d077669312d6e7330026174c03a 35283 65ef00000001000000000000036e7332076e65746578706f026e6c00001c0001 65ef80000001000000020002036e7332076e65746578706f026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043efa0ac2c00c000100010001518000043efa0a82 35284 63c700000001000000000000026e73076e65746578706f026e6c0000010001 63c780000001000000020002026e73076e65746578706f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043efa0ac2c039000100010001518000043efa0a82 35285 717300000001000000000000026e73076e65746578706f026e6c00001c0001 717380000001000000020002026e73076e65746578706f026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043efa0ac2c039000100010001518000043efa0a82 35286 c06f000000010000000000000674686573636f026e6c0000ff0001 c06f800000010000000200020674686573636f026e6c0000ff0001c00c00020001000151800011036e73310a696e746572706c617a61c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5f72f2dc04400010001000151800004d5c1d528 35287 ceb100000001000000000000036e733207626265796f6e64026e6c00001c0001 ceb180000001000000020002036e733207626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 35288 f80900000001000000000000036e733107626265796f6e64026e6c00001c0001 f80980000001000000020002036e733107626265796f6e64026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 35289 bc8b000000010000000000000e36322d3137372d3139372d31363107626265796f6e64026e6c0000010001 bc8b800000010000000200020e36322d3137372d3139372d31363107626265796f6e64026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc037000100010001518000043eb1900bc049000100010001518000043eb19002 35290 61cc00000001000000000000037777770977696b2d756e697665026e6c0000010001 61cc80000001000000020000037777770977696b2d756e697665026e6c0000010001c0100002000100015180000c036e723605692d702d64c01ac01000020001000151800006036e7237c032 35291 c92e0000000100000000000004616f7367026e6c0000010001 c92e8000000100000002000204616f7367026e6c0000010001c00c0002000100015180000e0161026e7306737561726573c011c00c000200010001518000040162c027c02500010001000151800004d5ef8282c03f00010001000151800004d4cce363 35292 e53300000001000000000000036e73330864686f7374696e67026e6c0000010001 e53380000001000000020002036e73330864686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02d00010001000151800004515b0370c03e00010001000151800004515b000a 35293 d4bc00000001000000000000036e73330864686f7374696e67026e6c0000260001 d4bc80000001000000020002036e73330864686f7374696e67026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02d00010001000151800004515b0370c03e00010001000151800004515b000a 35294 eca60000000100000000000006636861726973026e6c00000f0001 eca68000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35295 69860000000100000000000003777777067a737673736d026e6c0000010001 69868403000100000001000003777777067a737673736d026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 35296 8e8b0000000100000000000005646e732d31056c61646f74026e6c0000010001 8e8b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35297 22c10000000100000000000005646e732d32056c61646f74026e6c0000010001 22c18000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35298 ed6000000001000000000000037777770c726f6264697362657267656e026e6c0000010001 ed6080000001000000020002037777770c726f6264697362657267656e026e6c0000010001c0100002000100015180000e036e73310762617365776562c01dc01000020001000151800006036e7332c035c03100010001000151800004d535d035c04b00010001000151800004d535d034 35299 869200000001000000000000037777770a7665726469656e6d6574026e6c0000010001 869280000001000000020002037777770a7665726469656e6d6574026e6c0000010001c0100002000100015180000e036e73310777657073797465c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5f72968c04900010001000151800004d5f72969 35300 454e0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 454e8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35301 41cd00000001000000000000036e733109756e69736f75726365026e6c0000010001 41cd80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 35302 4bf600000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 4bf680000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35303 4ad8000000010000000000000468617a61026e6c0000ff0001 4ad8800000010000000200000468617a61026e6c0000ff0001c00c00020001000151800012036e733108692d686f73743475036e657400c00c00020001000151800006036e7332c029 35304 b24a000000010000000000000e686967686c616e642d67616d6573026e6c0000010001 b24a800000010000000200020e686967686c616e642d67616d6573026e6c0000010001c00c00020001000151800011026e730b6973642d686f6c6c616e64c01bc00c00020001000151800006036e7332c032c02f00010001000151800004d5e38d0ac04c00010001000151800004d5e38205 35305 24d800000001000000000000076f6e7369676874026e6c00000f0001 24d880000001000000020002076f6e7369676874026e6c00000f0001c00c0002000100015180000906656e69676d61c00cc00c0002000100015180000d036a6f730676706e6e6574c014c02800010001000151800004d4eee0eac03d00010001000151800004d5c9be2c 35306 336528000001000000010000026e6c0000060001035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b517569636b6f6666696365026e6c0000210001000002580023000000640cc40c65786163742d7365727665720b517569636b6f6666696365026e6c00 3365a8040000000000000000 35307 3b1b0000000100000000000005616272616d047769776f026e6c0000010001 3b1b8000000100000002000205616272616d047769776f026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02b000100010001518000043eb1a454c03d000100010001518000043eb1a456 35308 503100000001000000000000037777770b6d6f62696c65706c617a61026e6c0000010001 503180000001000000030002037777770b6d6f62696c65706c617a61026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 35309 000000007002400089e200000204055001010402 000080010000000000000000 35310 4ee900000001000000000000037777771067657a6f6e64686569646e6965757773026e6c0000010001 4ee980000001000000020000037777771067657a6f6e64686569646e6965757773026e6c0000010001c01000020001000151800011036e73310a6d61696e736572766572c021c01000020001000151800006036e7332c039 35311 b7367d1a501045107cd10000000000000000 b736fd140000000000000000 35312 1f2500000001000000000000067a69676e6574026e6c00000f0001 1f2584030001000000010000067a69676e6574026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 35313 b7367d1a5018451088c700000096ae00000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd56403c4ed60003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000 b736fd140000000000000000 35314 461800000001000000000000037777770a626c69656d65726b6561026e6c0000010001 461880000001000000020002037777770a626c69656d65726b6561026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01bc01000020001000151800006036e7332c033c02f00010001000151800004d43d0f08c04d00010001000151800004d43d19e2 35315 c06300000001000000000000037777770a65726f7469636c697665026e6c0000010001 c06380000001000000020002037777770a65726f7469636c697665026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c01bc01000020001000151800006036e7331c033c02f00010001000151800004c3eaad40c04900010001000151800004c3eaad41 35316 b7367d28501145027c380000000000000000 b736fd240000000000000000 35317 0000000070024000c2d500000204055001010402 000080010000000000000000 35318 b7367d29501045027c370000000000000000 b736fd240000000000000000 35319 b738f642501045103c9a0000000000000000 35320 b738f64250184510f291000000960500000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd56403c4ed60003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000 35321 1be3000000010000000000000964656c697665727931036164730974656c656772616166026e6c026e6c0000010001 1be3840300010000000100000964656c697665727931036164730974656c656772616166026e6c026e6c0000010001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 35322 902600000001000000000000036e73310e666c6578776562686f7374696e67026e6c0000010001 902680000001000000030002036e73310e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c00c00010001000151800004cf2cd7adc0410001000100015180000452c04365 35323 c81300000001000000000000036e73310e666c6578776562686f7374696e67026e6c0000260001 c81380000001000000030002036e73310e666c6578776562686f7374696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c00c00010001000151800004cf2cd7adc0410001000100015180000452c04365 35324 05d2000000010000000000000377777705767664656d026e6c0000010001 05d2800000010000000200020377777705767664656d026e6c0000010001c01000020001000151800014036e73310d7072696d656d6572696469616ec016c01000020001000151800006036e7332c02ec02a00010001000151800004d468cf38c04a00010001000151800004d468cf39 35325 db3300000001000000000000036e73320e666c6578776562686f7374696e67026e6c0000010001 db3380000001000000030002036e73320e666c6578776562686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03300010001000151800004cf2cd7adc00c0001000100015180000452c04365 35326 b90400000001000000000000036e73320e666c6578776562686f7374696e67026e6c0000260001 b90480000001000000030002036e73320e666c6578776562686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03300010001000151800004cf2cd7adc00c0001000100015180000452c04365 35327 047e00000001000000000000037777770c6265616d6572706c616e6574026e6c0000010001 047e80000001000000020002037777770c6265616d6572706c616e6574026e6c0000010001c0100002000100015180001104646e733109616464766973696f6ec01dc0100002000100015180000704646e7332c036c031000100010001518000045054e242c04e000100010001518000045054e243 35328 b738f650501145023c010000000000000000 35329 0000000070024000b71600000204055001010402 000080010000000000000000 35330 437f00000001000000000000036e73310b7669616e6574776f726b73026e6c0000260001 437f80000001000000020002036e73310b7669616e6574776f726b73026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 35331 2d5300000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 2d5380000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 35332 299c00000001000000000000036e73320b7669616e6574776f726b73026e6c0000260001 299c80000001000000020002036e73320b7669616e6574776f726b73026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 35333 b738f651501045023c000000000000000000 35334 b7398bf1501045109b2b0000000000000000 35335 b7398bf1501845103123000000962500000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd56403c4ed60003000000374e544c4d535350000100000097b200e00b000b002c0000000c000c002000000045584143542d534552564552515549434b4f46464943450000 35336 cda8000000010000000000000976616e6c6f73736572026e6c00000f0001 cda8800000010000000200020976616e6c6f73736572026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c016c00c00020001000151800006036e7332c02ec02a0001000100015180000450416028c04500010001000151800004c356780c 35337 ef1000000001000000000000036e7335046372696f026e6c0000010001 ef1080000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 35338 9ee800000001000000000000036e7336046372696f026e6c0000010001 9ee880000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 35339 44ea000000010000000000000377777703776562026e6c0000010001 44ea800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 35340 b7398bff501145029a920000000000000000 35341 292500000001000000000000036e7335046372696f026e6c0000010001 292580000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 35342 f93e00000001000000000000036e7336046372696f026e6c0000010001 f93e80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 35343 d10e00000001000000000000036e7331046372696f026e6c0000010001 d10e80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 35344 459f00000001000000000000036e7332046372696f026e6c0000010001 459f80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 35345 b7398c00501045029a910000000000000000 35346 301400000001000000000000037777770568692d7469026e6c0000010001 301480000001000000020002037777770568692d7469026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c016c01000020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 35347 bc3100000001000000000000097777772c66756e6461026e6c0000010001 bc3184030001000000010000097777772c66756e6461026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 35348 6a0700000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 6a0780000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 35349 6baa0000000100000000000005646e732d31056c61646f74026e6c0000010001 6baa8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35350 e8910000000100000000000003777777096b657474696e6b6a65026e6c0000010001 e8918000000100000003000303777777096b657474696e6b6a65026e6c0000010001c0100002000100015180001208736f6c7574696f6e06736f6c636f6ec01ac01000020001000151800006036e7331c037c01000020001000151800006036e7332c037c02e00010001000151800004d42d2005c04c00010001000151800004d42d2003c05e00010001000151800004d42d2103 35351 892700000001000000000000036e73310f6578636c757369766564657369676e026e6c0000010001 892780000001000000020002036e73310f6578636c757369766564657369676e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d97261bec04200010001000151800004d97261bd 35352 c77f00000001000000000000036e73320f6578636c757369766564657369676e026e6c0000010001 c77f80000001000000020002036e73320f6578636c757369766564657369676e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03400010001000151800004d97261bec00c00010001000151800004d97261bd 35353 1e0e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 1e0e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35354 0f070000000100000000000003626c3102626c06787334616c6c026e6c0000260001 0f078000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35355 959e0000000100000000000005646e732d32056c61646f74026e6c0000010001 959e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35356 63fc00000001000000000000037777770476646c67026e6c0000010001 63fc80000001000000020000037777770476646c67026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c015c0100002000100015180000704686e7331c02e 35357 29110000000100000000000005636c6f6f73026e6c0000010001 29118000000100000002000105636c6f6f73026e6c0000010001c00c0002000100015180000c026e73066e6577696365c012c00c00020001000151800013036e7332097669727475616c787303636f6d00c026000100010001518000043e818501 35358 518c00000001000000000000037777770f626f74746963656c6c69686f74656c026e6c0000010001 518c80000001000000020001037777770f626f74746963656c6c69686f74656c026e6c0000010001c0100002000100015180000a036e733303777873c020c01000020001000151800006036e7334c038c04a00010001000151800004d5ef9a65 35359 c14c00000001000000000000076e6f7768657265026e6c00000f0001 c14c80000001000000020000076e6f7768657265026e6c00000f0001c00c00020001000151800010026e73076e65737363697303636f6d00c00c00020001000151800006036e7332c02b 35360 d22c00000001000000000000066d69636b6579066e6574636f6d026e6c00001c0001 d22c80000001000000020001066d69636b6579066e6574636f6d026e6c00001c0001c01300020001000151800002c00cc01300020001000151800010066d696e6e696506787334616c6cc01ac00c00010001000151800004c2863082 35361 213d00000001000000000000066d69636b6579066e6574636f6d026e6c0000260001 213d80000001000000020001066d69636b6579066e6574636f6d026e6c0000260001c01300020001000151800002c00cc01300020001000151800010066d696e6e696506787334616c6cc01ac00c00010001000151800004c2863082 35362 190b000000010000000000000f766973736572696a2d6d757365756d026e6c00000f0001 190b800000010000000200020f766973736572696a2d6d757365756d026e6c00000f0001c00c0002000100015180000d026e7307636f6f6c636f6dc01cc00c00020001000151800006036e7332c033c03000010001000151800004c1ad3506c04900010001000151800004c1ad35c1 35363 d8e000000001000000000000037777771362656c617374696e672d646f75616e656d7573026e6c0000010001 d8e080000001000000020000037777771362656c617374696e672d646f75616e656d7573026e6c0000010001c01000020001000151800016036e73310f62656c617374696e676469656e7374c024c0100002000100015180000b026e73026e6c036e657400 35364 9f6c00000001000000000000037777770b686170707974726176656c117672696a7569742d76616b616e74696573026e6c0000010001 9f6c80000001000000020002037777770b686170707974726176656c117672696a7569742d76616b616e74696573026e6c0000010001c01c00020001000151800014036e73310d63656e747269636f6e6c696e65c02ec01c00020001000151800006036e7332c046c04200010001000151800004d481ec0cc06200010001000151800004d590e63a 35365 87860000000100000000000003777777127465656e2d616d61746575722d686f757365026e6c0000010001 87868000000100000002000003777777127465656e2d616d61746575722d686f757365026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c03b 35366 0bb20000000100000000000009652d6c756e61746963026e6c0000010001 0bb28000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35367 3bc00000000100000000000009652d6c756e61746963026e6c0000010001 3bc08000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35368 b2d4000000010000000000000377777707736d736475696d026e6c0000010001 b2d4800000010000000200020377777707736d736475696d026e6c0000010001c01000020001000151800015036e73310e62656c6c656e656e77696e6e656ec018c01000020001000151800006036e7332c030c02c00010001000151800004d994a844c04d00010001000151800004d994a845 35369 c3e0000000010000000000000868616a656e697573026e6c00000f0001 c3e0800000010000000200000868616a656e697573026e6c00000f0001c00c00020001000151800011036e733108636f6d737061636502646500c00c00020001000151800006036e7332c02d 35370 a3c40000000100000000000009646f67656174646f67026e6c0000010001 a3c48000000100000002000009646f67656174646f67026e6c0000010001c00c0002000100015180000c026e7306766576696461c016c00c00020001000151800006036e7332c02d 35371 c54500000001000000000000026e73036e6667026e6c0000010001 c54580000001000000020001026e73036e6667026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e733306636f62776562c013c00c00010001000151800004c26dd603 35372 745600000001000000000000026e730962706f2d67726f6570026e6c0000010001 745680000001000000020002026e730962706f2d67726f6570026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800009026e73036e6667c019c00c00010001000151800004c26d7a16c03b00010001000151800004c26dd603 35373 f5d80000000100000000000003777777096275737265697a656e026e6c0000010001 f5d88000000100000003000303777777096275737265697a656e026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 35374 17540000000100000000000005646e732d31056c61646f74024e4c0000010001 17548000000100000002000005646e732d31056c61646f74024e4c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35375 02cd00000001000000000000036e73340767617574656e67026e6c0000010001 02cd80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35376 3b8b0000000100000000000007706f7374796c65026e6c0000ff0001 3b8b8000000100000002000107706f7374796c65026e6c0000ff0001c00c0002000100015180000a036e733303777873c014c00c00020001000151800006036e7334c02cc03e00010001000151800004d5ef9a65 35377 d17200000001000000000000036e733109666972737466696e64026e6c0000010001 d17280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35378 d5e000000001000000000000076161746f757273026e6c00000f0001 d5e080000001000000020002076161746f757273026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 35379 d17300000001000000000000036e733209666972737466696e64026e6c0000010001 d17380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35380 903a0000000100000000000002763109706365787472656d65026e6c0000010001 903a8000000100000002000202763109706365787472656d65026e6c0000010001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 35381 cfa60000000100000000000002763209706365787472656d65026e6c0000010001 cfa68000000100000002000202763209706365787472656d65026e6c0000010001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 35382 6ae00000000100000000000009776f726c646d61696c026e6c00000f0001 6ae08000000100000003000209776f726c646d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c016c00c0002000100015180000704616e7332c02fc00c0002000100015180001404616e73330a74697363616c696e657402626500c02a00010001000151800004c3f14d38c04500010001000151800004c3f13325 35383 6fa000000001000000000000056469616e610a6d6f7373646f6d65696e026e6c0000060001 6fa084030001000000010000056469616e610a6d6f7373646f6d65696e026e6c0000060001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 35384 5c4500000001000000000000037777770778747372353030026e6c0000010001 5c4580000001000000020002037777770778747372353030026e6c0000010001c0100002000100015180000f026e7309656174736572766572c018c01000020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 35385 b63700000001000000000000044e545331063139594f3030024e4c0000060001 b63784030001000000010000044e545331063139594f3030024e4c0000060001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 35386 16c40000000100000000000008616473657276657206776562616473026e6c0000010001 16c48000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 35387 09aa00000001000000000000086865696e656b656e026e6c0000ff0001 09aa80000001000000020000086865696e656b656e026e6c0000ff0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02d 35388 648a0000000100000000000004504f503310616e6e616c6965736d7575726c696e67026e6c0000010001 648a8000000100000002000204504f503310616e6e616c6965736d7575726c696e67026e6c0000010001c01100020001000151800010036e733109756e69736572766572c022c01100020001000151800006036e7332c03ac03600010001000151800004c3454b03c05200010001000151800004d119a2fa 35389 1fd7000000010000000000000649434153533207554e494d414153024e4c0000010001 1fd7800000010000000300030649434153533207554e494d414153024e4c0000010001c0130002000100015180000906726c30303031c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01bc02f0001000100015180000489780101c00c0001000100015180000489780105c05200010001000151800004c0576a65 35390 873c0000000100000000000006524c3030303107554e494d414153024e4c0000010001 873c8000000100000003000306524c3030303107554e494d414153024e4c0000010001c01300020001000151800002c00cc0130002000100015180000906696361737332c013c0130002000100015180000e036e733107737572666e6574c01bc00c0001000100015180000489780101c03d0001000100015180000489780105c05200010001000151800004c0576a65 35391 c8710000000100000000000008554d44433030303307554e494d414153024e4c0000010001 c8718000000100000003000308554d44433030303307554e494d414153024e4c0000010001c0150002000100015180000906726c30303031c015c0150002000100015180000906696361737332c015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000489780101c0460001000100015180000489780105c05b00010001000151800004c0576a65 35392 d17500000001000000000000036e733109666972737466696e64026e6c0000010001 d17580000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35393 d17600000001000000000000036e733209666972737466696e64026e6c0000010001 d17680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35394 05a400000001000000000000036e7332026d6a026e6c0000010001 05a480000001000000020002036e7332026d6a026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02700010001000151800004515b010ac00c00010001000151800004515b000a 35395 2d8c00000001000000000000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f73697465730772756279646563026e6c0000060001 2d8c84030001000000010000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f73697465730772756279646563026e6c0000060001c04000060001000038400036026e730f646f6d61696e2d7265676973747279c0400a686f73746d6173746572c0570bf1e540000070800000384000278d0000003840 35396 8efc000000010000000000000e535449434b53414e445457494753026e6c0000020001 8efc840300010000000100000e535449434b53414e445457494753026e6c0000020001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 35397 f4ac0000000100000000000004686f6d650774697363616c69026e6c0000010001 f4ac8000000100000003000204686f6d650774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 35398 15970000000100000000000003626674026e6c0000010001 15978000000100000002000003626674026e6c0000010001c00c0002000100015180000c026e7306766576696461c010c00c00020001000151800006036e7332c027 35399 99190000000100000000000004646e733107696e666f6e6574026e6c0000010001 99198000000100000002000204646e733107696e666f6e6574026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d4bd01c4c03b00010001000151800004d4bd7f83 35400 ce7b0000000100000000000004646e733207696e666f6e6574026e6c0000010001 ce7b8000000100000002000204646e733207696e666f6e6574026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02d00010001000151800004d4bd01c4c00c00010001000151800004d4bd7f83 35401 fd9f0000000100000000000002676e0b64656e74616c756e696f6e026e6c0000010001 fd9f8000000100000002000102676e0b64656e74616c756e696f6e026e6c0000010001c00f0002000100015180000e036e7331076e6564636f6d70c01bc00f00020001000151800011036e7332076e6564636f6d70036f726700c02f00010001000151800004c3c1a80d 35402 7e1c00000001000000000000036e733103757063026e6c0000010001 7e1c80000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 35403 1fa200000001000000000000046e733032066368656c6c6f026e6c0000010001 1fa280000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 35404 8a03000000010000000000000377656d0c6c6f67696e73657276696365026e6c0000010001 8a03800000010000000200020377656d0c6c6f67696e73657276696365026e6c0000010001c0100002000100015180000e036e7331076e657463617374c01dc01000020001000151800006036e7332c035c03100010001000151800004c2970101c04b00010001000151800004c297012d 35405 236700000001000000000000037777770d73632d68656572656e7665656e026e6c0000010001 236780000001000000020000037777770d73632d68656572656e7665656e026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01ec0100002000100015180000704686e7331c037 35406 5fc80000000100000000000005646e732d32056c61646f74026e6c0000010001 5fc88000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35407 1486000000010000000000000377656d0c6c6f67696e73657276696365026e6c0000010001 1486800000010000000200020377656d0c6c6f67696e73657276696365026e6c0000010001c0100002000100015180000e036e7331076e657463617374c01dc01000020001000151800006036e7332c035c03100010001000151800004c2970101c04b00010001000151800004c297012d 35408 5886000000010000000000000563696e64790c616374697665646f6d61696e026e6c0000010001 5886800000010000000300000563696e64790c616374697665646f6d61696e026e6c0000010001c01200020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01200020001000151800006036e7332c037c01200020001000151800006036e7333c037 35409 588700000001000000000000076e65656c746a650c616374697665646f6d61696e026e6c0000010001 588780000001000000030000076e65656c746a650c616374697665646f6d61696e026e6c0000010001c01400020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01400020001000151800006036e7332c039c01400020001000151800006036e7333c039 35410 aa5728000001000000010000026e6c0000060001095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f73697465730772756279646563026e6c0000210001000002580019000000640058067365727665720772756279646563026e6c00 aa57a8040000000000000000 35411 2df50000000100000000000003626372026e6c0000010001 2df58000000100000002000203626372026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 35412 0e14000000010000000000000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001 0e14800000010000000200000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001c0130002000100015180001406737068696e7807726f7365747461036e657400c0130002000100015180000906616e75626973c039 35413 0e15000000010000000000000377777705626f6b6f65026e6c0000010001 0e15800000010000000200020377777705626f6b6f65026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7334c010c02a00010001000151800004d554b1dcc03c00010001000151800004d5540479 35414 82e500000001000000000000026e7303616d730874656c6567617465026e6c0000010001 82e580000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 35415 b3620000000100000000000003626c3102626c06787334616c6c026e6c0000010001 b3628000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35416 7c5b00000001000000000000056465787573026e6c00001c0001 7c5b80000001000000020002056465787573026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 35417 dc180000000100000000000006787334616c6c026e6c0000010001 dc188000000100000003000206787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 35418 ce8500000001000000000000037777770b7376636f6e636f72646961026e6c0000010001 ce8580000001000000020000037777770b7376636f6e636f72646961026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 35419 329700000001000000000000037777770964656c696369657578026e6c0000010001 329780000001000000020002037777770964656c696369657578026e6c0000010001c0100002000100015180000b036e73310477656233c01ac01000020001000151800006036e7332c032c02e00010001000151800004d436240ec04500010001000151800004c2b262ef 35420 0000000070024000c30100000204056401010402 000080010000000000000000 35421 17f900000001000000000000046d61696c09696d74656368696374026e6c0000010001 17f980000001000000020001046d61696c09696d74656368696374026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d036e7334036b706e036e657400c02f00010001000151800004c1accc82 35422 09240000000100000000000006616c63696f6e026e6c00000f0001 09248000000100000002000206616c63696f6e026e6c00000f0001c00c0002000100015180001103646e730a636f6e63657074736661c013c00c0002000100015180001004646e733208636f6e6365707473c013c02700010001000151800004d5c51c03c04400010001000151800004d5c51e1c 35423 b73c34e1501040b002980000000000000000 b73cb4e40000000000000000 35424 f3670000000100000000000006617474697661026e6c00000f0001 f3678000000100000002000206617474697661026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 35425 5cad00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 5cad80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 35426 b73c34e1501840b0dbc60000008c2e7d000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afae7403c4c6700030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000 b73cb4e40000000000000000 35427 684300000001000000000000047365633103646e73067073696e6574026e6c0000010001 684380000001000000030003047365633103646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac056000100010001518000049a0ff9ae 35428 9fe200000001000000000000047365633203646e73067073696e6574026e6c0000010001 9fe280000001000000030003047365633203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac056000100010001518000049a0ff9ae 35429 3d0c00000001000000000000047365633303646e73067073696e6574026e6c0000010001 3d0c80000001000000030003047365633303646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac056000100010001518000049a0ff9ae 35430 d0f7000000010000000000000377777709656173797061727473026e6c0000010001 d0f7800000010000000300020377777709656173797061727473026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 35431 a8be000000010000000000000377777709656173797061727473026e6c0000010001 a8be800000010000000300020377777709656173797061727473026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 35432 ba140000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 ba148000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 35433 5caf00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 5caf80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 35434 d6e1000000010000000000000866726f6e7469657203746e6f026e6c0000010001 d6e1800000010000000300030866726f6e7469657203746e6f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c01500020001000151800007047a657573c015c00c0001000100015180000486dd0102c03b00010001000151800004c0576a65c0550001000100015180000486dd0202 35435 b73c34ef501140a202090000000000000000 b73cb4e40000000000000000 35436 58680000000100000000000006746e6f66656c0366656c03746e6f026e6c0000010001 58688000000100000003000306746e6f66656c0366656c03746e6f026e6c0000010001c0170002000100015180000b0866726f6e74696572c017c0170002000100015180000e036e733107737572666e6574c01bc01700020001000151800007047a657573c017c02f0001000100015180000486dd0102c04600010001000151800004c0576a65c0600001000100015180000486dd0202 35437 a80f00000001000000000000066865726d657304626f757703746e6f026e6c0000010001 a80f80000001000000030003066865726d657304626f757703746e6f026e6c0000010001c0180002000100015180000b0866726f6e74696572c018c0180002000100015180000e036e733107737572666e6574c01cc01800020001000151800007047a657573c018c0300001000100015180000486dd0102c04700010001000151800004c0576a65c0610001000100015180000486dd0202 35438 d7860000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d7868000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35439 0000000070024000e88100000204056401010402 000080010000000000000000 35440 5cb100000001000000000000026e7303616d730874656c6567617465026e6c0000010001 5cb180000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 35441 c1dc0000000100000000000003706f7003626974026e6c0000010001 c1dc8000000100000003000303706f7003626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 35442 b8e7000000010000000000000377777709736f6c617269736973026e6c0000010001 b8e7800000010000000200000377777709736f6c617269736973026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 35443 b73c34f0501040a202080000000000000000 b73cb4f40000000000000000 35444 86ed00000001000000000000037777770972656e64656d656e74026e6c0000010001 86ed80000001000000020002037777770972656e64656d656e74026e6c0000010001c0100002000100015180000e036e733207737570706f7274c01ac01000020001000151800006036e7334c032c02e00010001000151800004c372e7c8c04800010001000151800004c372e6fe 35445 ffe10000000100000000000006706c616e657403777873026e6c00000f0001 ffe18000000100000003000306706c616e657403777873026e6c00000f0001c01300020001000151800007046e733038c013c01300020001000151800007046e733039c013c01300020001000151800006036e7334c013c02b00010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 35446 b73d0406501040b058f20000000000000000 b73d80010000000000000000 35447 b70e0000000100000000000007706f77657265640262790a696e746572706c617a61026e6c0000010001 b70e8000000100000002000207706f77657265640262790a696e746572706c617a61026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c03600010001000151800004d5f72f2dc04800010001000151800004d5c1d528 35448 b73d0406501840b0ded30000008c82cb000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afae7403c4c6700030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000 b73d80010000000000000000 35449 50030000000100000000000003626c3102626c06787334616c6c026e6c0000010001 50038000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35450 8642000000010000000000000a696e6475636f6e2d6276026e6c0000010001 8642800000010000000200020a696e6475636f6e2d6276026e6c0000010001c00c0002000100015180000a036e733103696166c017c00c00020001000151800006036e7332c02fc02b000100010001518000045059e040c041000100010001518000045059ee03 35451 d5b0000000010000000000000377777705706978756d026e6c0000010001 d5b0800000010000000200000377777705706978756d026e6c0000010001c01000020001000151800010036e7331066272696e6765036e657400c01000020001000151800006036e7332c02e 35452 044200000001000000000000036e657403686363026e6c00000f0001 044280000001000000020000036e657403686363026e6c00000f0001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 35453 b73d0414501140a258630000000000000000 b73d80010000000000000000 35454 ebde00000001000000000000056961656876026e6c0000020001 ebde80000001000000020002056961656876026e6c0000020001c00c00020001000151800012036e73310b7669616e6574776f726b73c012c00c00020001000151800006036e7332c02ac02600010001000151800004d43d0f08c04400010001000151800004d43d19e2 35455 0000000070024000ab0400000204056401010402 000080010000000000000000 35456 893400000001000000000000026e73096379626572636f6d6d026e6c0000010001 893480000001000000030003026e73096379626572636f6d6d026e6c0000010001c00f00020001000151800017036e733110736361726c65742d696e7465726e6574c019c00f00020001000151800006036e7332c031c00f00020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 35457 acf900000001000000000000036e7332096379626572636f6d6d026e6c0000010001 acf980000001000000030003036e7332096379626572636f6d6d026e6c0000010001c01000020001000151800017036e733110736361726c65742d696e7465726e6574c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ccc302c05100010001000151800004d5ccc303c06300010001000151800004c277e953 35458 4f6700000001000000000000026e7303616d730874656c6567617465026e6c0000010001 4f6780000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 35459 ac490000000100000000000003626f73026e6c00000f0001 ac498000000100000002000203626f73026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc02400010001000151800004d5881e43c03500010001000151800004d5139203 35460 cd4500000001000000000000037777770d7765726b67726f657031353031026e6c0000010001 cd4580000001000000020002037777770d7765726b67726f657031353031026e6c0000010001c01000020001000151800010026e730a6d61636b656e62616368c01ec01000020001000151800006036e7332c035c03200010001000151800004c1ad2b11c04e00010001000151800004507e81a3 35461 b73d0415501040a258620000000000000000 b73d80010000000000000000 35462 b73dab04501040b074760000000000000000 35463 a26b001000010000000000000377777707686f757476616b026e6c0000010001 a26b800000010000000200020377777707686f757476616b026e6c0000010001c0100002000100015180001007617374657269780577746e6574c018c0100002000100015180000e036e73320768756d616e2d69c018c02c00010001000151800004c36db552c04800010001000151800004c1ad2886 35464 b73dab04501840b0a6090000008cd719000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afae7403c4c6700030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000 35465 428000000001000000000000046d61696c03726467026e6c0000010001 428080000001000000020002046d61696c03726467026e6c0000010001c0110002000100015180000f036e733108696e74726f776562c015c01100020001000151800006036e7332c02dc0290001000100015180000450416028c04400010001000151800004c356780c 35466 502700000001000000000000027463036164730974656c656772616166026e6c0000010001 502780000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 35467 d4e900000001000000000000055f6c646170045f74637003706463065f6d736463730b726f656465737472616174026e6c0000060001 d4e984030001000000010000055f6c646170045f74637003706463065f6d736463730b726f656465737472616174026e6c0000060001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 35468 b73dab12501140a273e70000000000000000 35469 aad6000000010000000000000b7477656564656b616d6572026e6c0000010001 aad6800000010000000200020b7477656564656b616d6572026e6c0000010001c00c00020001000151800006036e7331c00cc00c0002000100015180000c036e73310563736e6574c018c02c000100010001518000043e3a5079c03e00010001000151800004c2451012 35470 777900000001000000000000055f6c646170045f746370026763065f6d736463730b726f656465737472616174026e6c0000060001 777984030001000000010000055f6c646170045f746370026763065f6d736463730b726f656465737472616174026e6c0000060001c02d00060001000038400036026e730f646f6d61696e2d7265676973747279c02d0a686f73746d6173746572c0440bf1e540000070800000384000278d0000003840 35471 b50c000000010000000000000575736572730663617374656c026e6c0000010001 b50c800000010000000200020575736572730663617374656c026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02d00010001000151800004c3558244c03f00010001000151800004c3558245 35472 1ab20000000100000000000007766462636f6d70026e6c00001c0001 1ab28000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 35473 b73dab13501040a273e60000000000000000 35474 e67100000001000000000000097361756e6167696473026e6c00000f0001 e67180000001000000030002097361756e6167696473026e6c00000f0001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 35475 5a3700000001000000000000036e733103757063026e6c00001c0001 5a3780000001000000030003036e733103757063026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 35476 bbbd000000010000000000000377777709646f776e6c6f616473026e6c0000010001 bbbd800000010000000300020377777709646f776e6c6f616473026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 35477 d3710000000100000000000009696c73656d65646961026e6c00000f0001 d3718000000100000003000309696c73656d65646961026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02a000100010001518000043e45a282c03c000100010001518000043e45a283c04e000100010001518000043e45a284 35478 6d4200100001000000000000076a617261626565026e6c00000f0001 6d4280000001000000020002076a617261626565026e6c00000f0001c00c00020001000151800011036e73310a6f612d73797374656d73c014c00c00020001000151800006036e7332c02cc028000100010001518000043eb1b1abc045000100010001518000043eb1b1ac 35479 5a9100000001000000000000037777770c6d6172636f626f727361746f026e6c0000010001 5a9180000001000000020002037777770c6d6172636f626f727361746f026e6c0000010001c0100002000100015180000b026e73057162616c6cc01dc0100002000100015180000f026e7309747269706c652d6974c01dc03100010001000151800004d584b024c04800010001000151800004d584b002 35480 700800000001000000000000037777771564726f676973746572696a2d6166736c616e6b656e026e6c0000010001 700880000001000000020002037777771564726f676973746572696a2d6166736c616e6b656e026e6c0000010001c0100002000100015180000b036e73310431326e73c026c01000020001000151800006036e7332c03ec03a000100010001518000043ed44ca0c051000100010001518000043ed4440c 35481 1b5800000001000000000000036e733109666972737466696e64026e6c0000010001 1b5880000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35482 79ea00000001000000000000037777770a6b696e6b797374617274026e6c0000010001 79ea80000001000000020002037777770a6b696e6b797374617274026e6c0000010001c0100002000100015180000a036e7331036e7873c01bc01000020001000151800006036e7332c033c02f00010001000151800004d973c015c04500010001000151800004d973c102 35483 2cc400000001000000000000036e733209666972737466696e64026e6c0000010001 2cc480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35484 a2790000000100000000000003626c3402626c06787334616c6c026e6c0000010001 a2798000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35485 cb87000000010000000000000377777702696e026e6c0000010001 cb87800000010000000200000377777702696e026e6c0000010001c01000020001000151800010026e73076269742d61787803636f6d00c01000020001000151800006036e7332c02a 35486 351d00000001000000000000037777770974656c656772616166026e6c0000010001 351d80000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 35487 033e00000001000000000000036e733207736572766572340b6475746368736572766572026e6c0000010001 033e80000001000000020000036e733207736572766572340b6475746368736572766572026e6c0000010001c0180002000100015180000c036e733105692d732d65c024c01800020001000151800006036e7332c03c 35488 4be300000001000000000000026e7303616d730874656c6567617465026e6c0000010001 4be380000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 35489 cd6c00000001000000000000037777770c7665727461616c776f6f7264026e6c0000010001 cd6c80000001000000030002037777770c7665727461616c776f6f7264026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 35490 539a00000001000000000000037777770c6d637376656c64686f76656e026e6c0000010001 539a80000001000000020000037777770c6d637376656c64686f76656e026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c034 35491 8e890000000100000000000005736d7470320873797374656d6563026e6c0000010001 8e898000000100000003000205736d7470320873797374656d6563026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c01200020001000151800006036e7332c012c02f00010001000151800004c2e5a402c05700010001000151800004c2e5a404 35492 2e9c00000001000000000000036e73330873797374656d6563026e6c0000010001 2e9c80000001000000030002036e73330873797374656d6563026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800006036e7332c010c02d00010001000151800004c2e5a402c05500010001000151800004c2e5a404 35493 27df0000000100000000000005736d7470320873797374656d6563026e6c0000010001 27df8000000100000003000205736d7470320873797374656d6563026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c01200020001000151800006036e7332c012c02f00010001000151800004c2e5a402c05700010001000151800004c2e5a404 35494 00f90000000100000000000003777777066f72616e6765026e6c0000010001 00f98000000100000002000103777777066f72616e6765026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c017c04400010001000151800004c2860043 35495 373400000001000000000000036e733109666972737466696e64026e6c0000010001 373480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35496 6b6000000001000000000000036e733209666972737466696e64026e6c0000010001 6b6080000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 35497 7ef6000000010000000000000473686f7007676c616d61676f0369736d026e6c0000010001 7ef6800000010000000200020473686f7007676c616d61676f0369736d026e6c0000010001c01900020001000151800005026e73c019c01900020001000151800006036e7332c019c03100010001000151800004d994ab02c04200010001000151800004d994ab03 35498 93e2000000010000000000000377777707686f746d61696c026e6c0000010001 93e2800000010000000200000377777707686f746d61696c026e6c0000010001c01000020001000151800011036e733107686f746d61696c03636f6d00c01000020001000151800006036e7333c030 35499 160600000001000000000000027330026e6c0000010001 160680000001000000020002027330026e6c0000010001c00c0002000100015180000d026e73076e656473746174c00fc00c00020001000151800006036e7333c026c02300010001000151800004d4482615c03c00010001000151800004d5c4021d 35500 81ad000000010000000000000672656c61793108696e74726f776562026e6c0000010001 81ad800000010000000200020672656c61793108696e74726f776562026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c0300001000100015180000450416028c04200010001000151800004c356780c 35501 c52c000000010000000000000c626c75652d6469616d6f6e64026e6c00000f0001 c52c800000010000000200020c626c75652d6469616d6f6e64026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 35502 799400000001000000000000037777770b63686174736d696c657973026e6c0000010001 799480000001000000020000037777770b63686174736d696c657973026e6c0000010001c01000020001000151800011036e7331086c6f6769736f667402626500c01000020001000151800006036e7332c034 35503 c888000000010000000000000c536563726574617269616174076368656d70726f026e6c0000060001 c888840300010000000100000c536563726574617269616174076368656d70726f026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 35504 cc9a0000000100000000000003777873026e6c00000f0001 cc9a8000000100000003000303777873026e6c00000f0001c00c00020001000151800007046e733038c00cc00c00020001000151800007046e733039c00cc00c00020001000151800006036e7334c00cc02400010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 35505 4ae90000000100000000000003777777076a7576656e7461026e6c0000010001 4ae98000000100000002000203777777076a7576656e7461026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 35506 6df400000001000000000000026e7303616d730874656c6567617465026e6c0000010001 6df480000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 35507 78d40000000100000000000003777777076e61696c6d616e026e6c0000010001 78d48000000100000002000203777777076e61696c6d616e026e6c0000010001c0100002000100015180000c036e7331056f72696f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c2862282c04400010001000151800004c2862b02 35508 de4f000000010000000000000c7777776132387a776f6c6c65026e6c0000010001 de4f840300010000000100000c7777776132387a776f6c6c65026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 35509 396a00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 396a80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35510 bf490000000100000000000003777777087669646176697461026e6c0000010001 bf498000000100000002000203777777087669646176697461026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 35511 c6cb00000001000000000000074b656572616476026e6c0000ff0001 c6cb80000001000000020002074b656572616476026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 35512 bbb4000000010000000000000377777707696e666f646563026e6c0000010001 bbb4800000010000000200000377777707696e666f646563026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c018c0100002000100015180000704686e7331c031 35513 f974000000010000000000000377777708776f6f6e69646565026e6c0000010001 f974800000010000000200020377777708776f6f6e69646565026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c019c01000020001000151800006036e7332c031c02d000100010001518000045054f347c049000100010001518000043e94a047 35514 7cda00000001000000000000036e73310762697472617465026e6c0000010001 7cda80000001000000030002036e73310762697472617465026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 35515 e54900000001000000000000036e73320762697472617465026e6c0000010001 e54980000001000000030002036e73320762697472617465026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 35516 271e000000010000000000000744564953494f4e024e4c00000f0001 271e800000010000000200000744564953494f4e024e4c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c02b 35517 442100000001000000000000036e733106736f6c636f6e026e6c0000010001 442180000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 35518 2cc200000001000000000000036e733206736f6c636f6e026e6c0000010001 2cc280000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 35519 0b3e0000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 0b3e8000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 35520 ef5e000000010000000000000377777707647265697a656e026e6c0000010001 ef5e800000010000000200000377777707647265697a656e026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c030 35521 d6f500000001000000000000037777770a6e75697665726c616e64026e6c0000010001 d6f584030001000000010000037777770a6e75697665726c616e64026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 35522 95d4000000010000000000000377777708636f6e2d6e656374026e6c0000010001 95d4800000010000000200000377777708636f6e2d6e656374026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c043 35523 d50400000001000000000000036e733105692d732d65026e6c0000010001 d50480000001000000020000036e733105692d732d65026e6c0000010001c01000020001000151800016036e73310c6973652d6e6574776f726b73036e657400c01000020001000151800006036e7332c02e 35524 08320000000100000000000008647269656d61726b026e6c00000f0001 08328000000100000002000008647269656d61726b026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c034 35525 0c4f0000000100000000000009652d6c756e61746963026e6c0000010001 0c4f8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35526 fb2d000000010000000000000377777707736d736475696d026e6c0000010001 fb2d800000010000000200020377777707736d736475696d026e6c0000010001c01000020001000151800015036e73310e62656c6c656e656e77696e6e656ec018c01000020001000151800006036e7332c030c02c00010001000151800004d994a844c04d00010001000151800004d994a845 35527 7a6c0000000100000000000003777777076563687477656c026e6c0000010001 7a6c8000000100000002000003777777076563687477656c026e6c0000010001c01000020001000151800011036e73310a747770686f7374696e67c018c01000020001000151800006036e7332c030 35528 7b4e00100001000000000001036e7331096b6162656c666f6f6e026e6c00000100010000290800000080000000 7b4e80000001000000020003036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f030000291000000000000000 35529 bda700100001000000000001036e7334096b6162656c666f6f6e026e6c00000100010000290800000080000000 bda780000001000000020003036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f030000291000000000000000 35530 eb4400000001000000000000064252414e44590453455243024e4c0000010001 eb4480000001000000020002064252414e44590453455243024e4c0000010001c0130002000100015180000b026e73056369626974c018c0130002000100015180000d026e73076b6e6f77617265c018c02c000100010001518000043ea68aa3c04300010001000151800004c3402003 35531 75a200000001000000000000064252414e44590453455243024e4c0000260001 75a280000001000000020002064252414e44590453455243024e4c0000260001c0130002000100015180000b026e73056369626974c018c0130002000100015180000d026e73076b6e6f77617265c018c02c000100010001518000043ea68aa3c04300010001000151800004c3402003 35532 bad1000000010000000000000347494e0453455243024e4c0000010001 bad1800000010000000200020347494e0453455243024e4c0000010001c0100002000100015180000b026e73056369626974c015c0100002000100015180000d026e73076b6e6f77617265c015c029000100010001518000043ea68aa3c04000010001000151800004c3402003 35533 0f2f000000010000000000000347494e0453455243024e4c0000260001 0f2f800000010000000200020347494e0453455243024e4c0000260001c0100002000100015180000b026e73056369626974c015c0100002000100015180000d026e73076b6e6f77617265c015c029000100010001518000043ea68aa3c04000010001000151800004c3402003 35534 edad0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 edad8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35535 971e0000000100000000000003777777096e6c686f7374696e67026e6c0000010001 971e8000000100000002000003777777096e6c686f7374696e67026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 35536 38e1000000010000000000000a6e6f76696f6d65646961026e6c00000f0001 38e1800000010000000200020a6e6f76696f6d65646961026e6c00000f0001c00c0002000100015180000e026e7308642d736572766572c017c00c00020001000151800006036e7332c02ec02b0001000100015180000451045c14c0450001000100015180000451046032 35537 51a000000001000000000000037777770c72746c6772616e6470726978026e6c0000010001 51a080000001000000020001037777770c72746c6772616e6470726978026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c01dc01000020001000151800011036e733207636c742d756661036e657400c03100010001000151800004c3c1ca77 35538 621f000000010000000000000966636172657461696c026e6c00000f0001 621f800000010000000200000966636172657461696c026e6c00000f0001c00c0002000100015180000e036e73310464646e68036e657400c00c00020001000151800006036e7332c02e 35539 316800000001000000000000037777770667726f656e65026e6c0000010001 316880000001000000020002037777770667726f656e65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 35540 0ad000000001000000000000036e73340767617574656e67026e6c0000010001 0ad080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35541 02d900000001000000000000036e73330767617574656e67026e6c0000010001 02d980000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35542 595800000001000000000000046d61696c0d73762d7a6f657465726d656572026e6c0000010001 595880000001000000020000046d61696c0d73762d7a6f657465726d656572026e6c0000010001c0110002000100015180000f026e7306777367617465036e657400c01100020001000151800006036e7332c036 35543 0c67000000010000000000000962656e65656e6c756c026e6c00000f0001 0c67840300010000000100000962656e65656e6c756c026e6c00000f0001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 35544 2cf700000001000000000000037777770963726f7373696e6773026e6c0000010001 2cf780000001000000020002037777770963726f7373696e6773026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01ac01000020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 35545 a3e000000001000000000000037777770a6d757a69656b7a61616b026e6c0000010001 a3e080000001000000030003037777770a6d757a69656b7a61616b026e6c0000010001c0100002000100015180000e076e73617574683103626974c01bc0100002000100015180000a076e736175746832c037c0100002000100015180000a076e736175746833c037c02f00010001000151800004d5880c33c04900010001000151800004d5880c3bc05f00010001000151800004d4ccc00b 35546 216a0000000100000000000004646e73310471776562026e6c0000010001 216a8000000100000002000204646e73310471776562026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 35547 737500000001000000000000046d61696c0375636f026e6c00000f0001 737580000001000000030003046d61696c0375636f026e6c00000f0001c0110002000100015180001208736f6c7574696f6e06736f6c636f6ec015c01100020001000151800006036e7331c032c01100020001000151800006036e7332c032c02900010001000151800004d42d2005c04700010001000151800004d42d2003c05900010001000151800004d42d2103 35548 61fe00000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 61fe80000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 35549 b0ff00000001000000000000036e7334096b6162656c666f6f6e026e6c0000010001 b0ff80000001000000020002036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f03 35550 662800000001000000000000037777770e73746172746e656465726c616e64026e6c0000010001 662880000001000000020002037777770e73746172746e656465726c616e64026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01fc01000020001000151800006036e7332c037c033000100010001518000045054f347c04f000100010001518000043e94a047 35551 d65300000001000000000000046d61696c0376656e026e6c0000010001 d65380000001000000020000046d61696c0376656e026e6c0000010001c01100020001000151800015026e730c776f726c64686f7374696e67036f726700c01100020001000151800008026e73026175c02c 35552 683900000001000000000000094769656c697373656e024e4c0000010001 683980000001000000020000094769656c697373656e024e4c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02e 35553 38d50000000100000000000008686f73746e616d650462696e640000100003 38d58000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35554 284800000001000000000000027874026e6c00000f0001 284880000001000000020000027874026e6c00000f0001c00c0002000100015180000d026e730773747564696f32c00fc00c00020001000151800006036e7332c026 35555 70c60000000100000000000008686f73746e616d650462696e640000100003 70c68000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35556 662c000000010000000000000768616c323030300768616c323030300a67616c67657761746572026e6c0000060001 662c840300010000000100000768616c323030300768616c323030300a67616c67657761746572026e6c0000060001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 35557 b45b0000000100000000000009776565726b616d6572026e6c0000010001 b45b8000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 35558 71c00000000100000000000005706c617a610c686175746566696e616e6365026e6c0000010001 71c08000000100000002000205706c617a610c686175746566696e616e6365026e6c0000010001c0120002000100015180000e036e733107626265796f6e64c01fc01200020001000151800006036e7332c037c033000100010001518000043eb1900bc04d000100010001518000043eb19002 35559 37cb00000001000000000000026e7308767575727765726b026e6c0000010001 37cb80000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 35560 7c9500000001000000000000026e7306787334616c6c026e6c0000010001 7c9580000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 35561 29e500000001000000000000036e733206787334616c6c026e6c0000010001 29e580000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 35562 724e000000010000000000000377777704616e626f026e6c0000010001 724e800000010000000300030377777704616e626f026e6c0000010001c0100002000100015180000f036e7331086e6f766178657373c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004d5c98015c04400010001000151800004d5c9bf12c05600010001000151800004d5ef9c26 35563 c902000000010000000000000c6b6172706572776572656c64026e6c00001c0001 c902800000010000000200000c6b6172706572776572656c64026e6c00001c0001c00c00020001000151800013026e730a646168686f7374696e6703636f6d00c00c00020001000151800006036e7332c030 35564 5dc900000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000010001 5dc980000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35565 835800000001000000000000036e733503777873026e6c0000010001 835880000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 35566 a0b900000001000000000000036e733503777873026e6c0000260001 a0b980000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 35567 b4150000000100000000000013696e7465726163746965666469656e7374656e026e6c00000f0001 b4158000000100000002000213696e7465726163746965666469656e7374656e026e6c00000f0001c00c00020001000151800013036e73310c636f6c742d74656c65636f6dc020c00c00020001000151800006036e7332c038c03400010001000151800004d44ea00dc05300010001000151800004d44ea00e 35568 c61a000000010000000000000767756f6a75616e0564656d6f6e026e6c0000ff0001 c61a800000010000000300020767756f6a75616e0564656d6f6e026e6c0000ff0001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c0140002000100015180000f036e73320564656d6f6e036e657400c02e00010001000151800004c29f4906c04000010001000151800004c29fb004 35569 109900000001000000000000026e730773747564696f32024e4c0000010001 109980000001000000030001026e730773747564696f32024e4c0000010001c00f0002000100015180000e026e7308767575727765726bc017c00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c049c02b000100010001518000043efa0202 35570 ae170000000100000000000006636861726973026e6c00000f0001 ae178000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35571 8b950000000100000000000003777777137363687574707265636973696f6e7061727473026e6c0000010001 8b958000000100000002000203777777137363687574707265636973696f6e7061727473026e6c0000010001c0100002000100015180000e036e733107647265636f6d6dc024c01000020001000151800006036e7332c03cc03800010001000151800004d5c42546c05200010001000151800004d5c42547 35572 05d700000001000000000000037777770c736368656572656e7665656e026e6c0000010001 05d780000001000000020000037777770c736368656572656e7665656e026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01dc0100002000100015180000704686e7331c036 35573 dfea00000001000000000000037777770f7469656e6572626f6572646572696a026e6c0000010001 dfea80000001000000020000037777770f7469656e6572626f6572646572696a026e6c0000010001c01000020001000151800019026e73106575726f6d656469617472616666696303636f6d00c01000020001000151800006036e7332c037 35574 44d3000000010000000000000a737465726b2d64696d6f026e6c00000f0001 44d3800000010000000200020a737465726b2d64696d6f026e6c00000f0001c00c0002000100015180000d026e73076e6f7661776562c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d5c4220bc04400010001000151800004d5c4220c 35575 2b000000000100000000000003777777097175616c6967617465026e6c0000010001 2b008000000100000002000203777777097175616c6967617465026e6c0000010001c0100002000100015180000d036e73310663617374656cc01ac01000020001000151800006036e7332c032c02e00010001000151800004c3558244c04700010001000151800004c3558245 35576 6a3d000000010000000000000a616374696f6e666f746f026e6c00000f0001 6a3d800000010000000300000a616374696f6e666f746f026e6c00000f0001c00c00020001000151800017076e73686f73743103737432056c79636575036e657400c00c0002000100015180000a076e73686f737432c033c00c0002000100015180000a076e73686f737433c033 35577 80620000000100000000000005646e732d32056c61646f74026e6c0000010001 80628000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35578 e96a28000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d736463730e52697070657264617061726b3239026e6c0000210001000002580023000000640185096f6e7a6576616465720e52697070657264617061726b3239026e6c00 e96aa8040000000000000000 35579 fbdf0000000100000000000008566f6c746169726503622d62026e6c0000010001 fbdf8000000100000003000308566f6c746169726503622d62026e6c0000010001c0150002000100015180000c026e73067369676e6574c019c01500020001000151800006036e7331c030c01500020001000151800006036e7332c030c02d00010001000151800004c3561242c04500010001000151800004d915f142c05700010001000151800004d915f141 35580 9dbe0000000100000000000003706f7003646473026e6c0000010001 9dbe8000000100000003000303706f7003646473026e6c0000010001c01000020001000151800017036e733110736361726c65742d696e7465726e6574c014c01000020001000151800006036e7332c02cc01000020001000151800006036e7333c02cc02800010001000151800004d5ccc302c04b00010001000151800004d5ccc303c05d00010001000151800004c277e953 35581 c907000000010000000000001971756f74612d696e7374616c6c61746965746563686e69656b026e6c00000f0001 c907800000010000000200001971756f74612d696e7374616c6c61746965746563686e69656b026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c026c00c0002000100015180000704686e7331c03f 35582 0270000000010000000000000b53544556454e464552454e026e6c0000020001 0270840300010000000100000b53544556454e464552454e026e6c0000020001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 35583 866b000000010000000000000a646d636f6174696e6773026e6c00000f0001 866b800000010000000200020a646d636f6174696e6773026e6c00000f0001c00c00020001000151800013026e730d627573696e6573736d65646961c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d5880b66c04a00010001000151800004d5880b65 35584 9360000000010000000000000a6c65756b6573746172740e62616e6e657263656e7472616c65026e6c0000010001 9360800000010000000300030a6c65756b6573746172740e62616e6e657263656e7472616c65026e6c0000010001c0170002000100015180000c036e7331056d61786573c026c01700020001000151800006036e7332c03ec01700020001000151800006036e7333c03ec03a000100010001518000045045402ec052000100010001518000045045402fc064000100010001518000045045440a 35585 bb0600100001000000000001036e7331056132303030026e6c00000100010000290800000000000000 bb0680000001000000030003036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 35586 eedb00100001000000000001036e7332056132303030026e6c00000100010000290800000000000000 eedb80000001000000030003036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 35587 21ff0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 21ff8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35588 013400000001000000000000037777770a6a616e76726f65676f70026e6c0000010001 013480000001000000020000037777770a6a616e76726f65676f70026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 35589 9a0700000001000000000000037777770762656c696e6461026e6c0000010001 9a0780000001000000020002037777770762656c696e6461026e6c0000010001c0100002000100015180000f036e7331086461786973776562c018c01000020001000151800006036e7332c030c02c00010001000151800004c323c083c04700010001000151800004c323c084 35590 530e00000001000000000000037777770f74656c65636f6d766f6f726b657572026e6c0000010001 530e80000001000000020002037777770f74656c65636f6d766f6f726b657572026e6c0000010001c0100002000100015180000b036e73310465326d61c020c01000020001000151800006036e7332c038c034000100010001518000045111328dc04b000100010001518000045111328e 35591 bc21000000010000000000000863726f7373696e6c066e7434616c6c026e6c0000010001 bc21800000010000000200020863726f7373696e6c066e7434616c6c026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000d036e733206787334616c6cc01cc03000010001000151800004c26d3402c04100010001000151800004c26d0963 35592 239f00000001000000000000046d61696c0664656c756974026e6c0000010001 239f80000001000000030003046d61696c0664656c756974026e6c0000010001c01100020001000151800014026e730e61726765776562686f7374696e67c018c01100020001000151800006036e7330c02fc01100020001000151800006036e7333c02fc02c00010001000151800004c3561682c04c00010001000151800004c3561683c05e00010001000151800004d5de0bfa 35593 f73f00000001000000000000046d61696c0c686f6e64612d77656c6d616e026e6c0000010001 f73f80000001000000020002046d61696c0c686f6e64612d77656c6d616e026e6c0000010001c0110002000100015180000a036e733103677673c01ec01100020001000151800006036e7332c036c032000100010001518000045054e1aac04800010001000151800004d4ccc646 35594 552f00000001000000000000036e7331056132303030026e6c0000010001 552f80000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 35595 3ddd00000001000000000000036e7332056132303030026e6c0000010001 3ddd80000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 35596 82c3001000010000000000000377777703727462026e6c0000010001 82c3800000010000000200010377777703727462026e6c0000010001c0100002000100015180001007617374657269780577746e6574c014c0100002000100015180000d0670696361726403647376c014c02800010001000151800004c36db552 35597 d47100000001000000000000037777771c64656261736b657462616c6c7369746576616e6e656465726c616e64026e6c0000010001 d47180000001000000020002037777771c64656261736b657462616c6c7369746576616e6e656465726c616e64026e6c0000010001c0100002000100015180000f026e7309656174736572766572c02dc01000020001000151800006036e7332c044c04100010001000151800004d4cb0e42c05c00010001000151800004d4cb1221 35598 260100000001000000000000037777770a646976616b6f6570656c026e6c0000010001 260180000001000000020002037777770a646976616b6f6570656c026e6c0000010001c010000200010001518000130b696973672d7365727665720469697367c01bc0100002000100015180000d036e733206787334616c6cc01bc02f00010001000151800004c3a959c3c04e00010001000151800004c26d0963 35599 85bf0000000100000000000003777777056573746174026e6c0000010001 85bf8000000100000002000003777777056573746174026e6c0000010001c01000020001000151800016036e73310c65736563757265736974653403636f6d00c01000020001000151800006036e7332c02e 35600 3176000000010000000000000676696e646578026e6c0000010001 3176800000010000000300030676696e646578026e6c0000010001c00c0002000100015180000b036e733104696c7365c013c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02bc027000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 35601 25f60000000100000000000006636861726973026e6c00000f0001 25f68000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35602 1003000000010000000000000c626574746572626f64696573026e6c00000f0001 1003800000010000000200000c626574746572626f64696573026e6c00000f0001c00c0002000100015180000c026e7306766576696461c019c00c00020001000151800006036e7332c030 35603 8c0e00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 8c0e80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35604 d57500000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 d57580000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35605 f0d90000000100000000000003777777086d6565727373656e026e6c0000010001 f0d98000000100000002000203777777086d6565727373656e026e6c0000010001c01000020001000151800010046e733031086e65746c696e6573c019c01000020001000151800007046e733032c032c02d00010001000151800004d99540f5c04900010001000151800004d99541f5 35606 c493000000010000000000000966636172657461696c026e6c00000f0001 c493800000010000000200000966636172657461696c026e6c00000f0001c00c0002000100015180000e036e73310464646e68036e657400c00c00020001000151800006036e7332c02e 35607 7f0900000001000000000000037777771c706f6c697469652d616d7374657264616d2d616d7374656c6c616e64026e6c0000010001 7f0980000001000000020002037777771c706f6c697469652d616d7374657264616d2d616d7374656c6c616e64026e6c0000010001c01000020001000151800009026e7303646d61c02dc01000020001000151800006036e7332c044c04100010001000151800004d973c8fbc05600010001000151800004d9aa11fc 35608 03e9000000010000000000000f6c617572656e74697573776f6e656e026e6c0000010001 03e9800000010000000200000f6c617572656e74697573776f6e656e026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c033 35609 841700000001000000000000036e7332076e656473746174026e6c0000010001 841780000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35610 4acc00000001000000000000036e7334076e656473746174026e6c0000010001 4acc80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35611 12ea00000001000000000000036e73340767617574656e67026e6c0000010001 12ea80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35612 e9b70000000100000000000011776174657273706f7274766572626f6e64026e6c0000ff0001 e9b78000000100000002000011776174657273706f7274766572626f6e64026e6c0000ff0001c00c00020001000151800013036e7331086d6564696177656204696e666f00c00c00020001000151800006036e7332c036 35613 578400000001000000000000066b69786173730c6e65746d6173746572696e67026e6c0000010001 578480000001000000020002066b69786173730c6e65746d6173746572696e67026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800011036e73320a73686f636b6d65646961c020c03400010001000151800004d5efa548c04600010001000151800004d5ef9d70 35614 9f3600000001000000000000037777770862657374656d6f70026e6c0000010001 9f3680000001000000030003037777770862657374656d6f70026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 35615 04590000000100000000000008746f702d63617265026e6c00000f0001 04598000000100000002000108746f702d63617265026e6c00000f0001c00c000200010001518000130b737061726373657276657204706c6578c015c00c0002000100015180000b026e73026e6c036e657400c02900010001000151800004c1439a0a 35616 074c0000000100000000000003777777077768656b616d70026e6c0000010001 074c8000000100000002000003777777077768656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 35617 647d000000010000000000000377777710616d65726f6e67656e62657267696e67026e6c0000010001 647d800000010000000200000377777710616d65726f6e67656e62657267696e67026e6c0000010001c01000020001000151800010026e730777697265687562036e657400c01000020001000151800006036e7332c038 35618 fefc0010000100000000000103777777087265676572696e67026e6c00000100010000290800000080000000 fefc8000000100000003000403777777087265676572696e67026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae0000291000000000000000 35619 35d000000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 35d080000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 35620 327000000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 327080000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 35621 22400000000100000000000003777777077768656b616d70026e6c0000010001 22408000000100000002000003777777077768656b616d70026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 35622 7fd00000000100000000000003777777087265676572696e67026e6c0000010001 7fd08000000100000003000303777777087265676572696e67026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 35623 b18400000001000000000000037777770a746d6661727761726473026e6c0000010001 b18484030001000000010000037777770a746d6661727761726473026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 35624 5e8f0000000100000000000004444e5331064d494e4c4e56026e6c0000010001 5e8f8000000100000003000304444e5331064d494e4c4e56026e6c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c018c0110002000100015180000704646e7332c011c00c00010001000151800004910c2201c03a00010001000151800004c0576a65c05400010001000151800004910c2202 35625 351e00000001000000000000037777770974656c656772616166026e6c0000010001 351e80000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 35626 53f50000000100000000000006616c7469756d026e6c00000f0001 53f58000000100000002000206616c7469756d026e6c00000f0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f0046 35627 1af100000001000000000000036e73320476646e73026e6c0000010001 1af180000001000000020002036e73320476646e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc029000100010001518000045117f60bc00c000100010001518000045117f60c 35628 222a000000010000000000000473676e32077369656d656e73026e6c0000010001 222a800000010000000200020473676e32077369656d656e73026e6c0000010001c01100020001000151800002c00cc011000200010001518000070473676e34c011c00c00010001000151800004c28a8909c03b00010001000151800004c28a890b 35629 5d6d000000010000000000000377777709616a6178666f72756d026e6c0000010001 5d6d800000010000000300000377777709616a6178666f72756d026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c031c01000020001000151800006036e7332c031 35630 efca000000010000000000000e6e6564736368726f65662d686c6d026e6c00000f0001 efca800000010000000200020e6e6564736368726f65662d686c6d026e6c00000f0001c00c00020001000151800011036e73310a6f612d73797374656d73c01bc00c00020001000151800006036e7332c033c02f000100010001518000043eb1b1abc04c000100010001518000043eb1b1ac 35631 97ed000000010000000000000767756f6a75616e0564656d6f6e026e6c0000ff0001 97ed800000010000000300020767756f6a75616e0564656d6f6e026e6c0000ff0001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c0140002000100015180000f036e73320564656d6f6e036e657400c02e00010001000151800004c29f4906c04000010001000151800004c29fb004 35632 9fc0000000010000000000001276616e6b6c61766572656e73746967746572026e6c00000f0001 9fc0800000010000000200021276616e6b6c61766572656e73746967746572026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01fc00c00020001000151800006036e7332c036c03300010001000151800004c26d0642c04b00010001000151800004c26d0963 35633 008428000001000200000000026e6c0000060001075641524b4a45530e6469737472697665727332303033026e6c00000500fe000000000000c014000100010000000000040a030070 0084a8040000000000000000 35634 478700000001000000000000037777770c726f6265636f646972656374026e6c0000010001 478780000001000000020001037777770c726f6265636f646972656374026e6c0000010001c0100002000100015180000d036e733106726f6265636fc01dc0100002000100015180000b026e73026e6c036e657400c03100010001000151800004913d1a01 35635 80660000000100000000000005646e732d32056c61646f74026e6c0000010001 80668000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35636 c86900000001000000000000046d61676f026e6c00000f0001 c86980000001000000020002046d61676f026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 35637 0000000070024000badf0000020405b401010402 000080010000000000000000 35638 c9b1000000010000000000000a67656c64657273686f66026e6c0000010001 c9b1800000010000000200020a67656c64657273686f66026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 35639 dbd900000001000000000000046d61676f026e6c00000f0001 dbd980000001000000020002046d61676f026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 35640 88ff00000001000000000000037777770a736572766963656e65740a646972656b7462616e6b026e6c0000010001 88ff80000001000000030002037777770a736572766963656e65740a646972656b7462616e6b026e6c0000010001c01b0002000100015180000f036e73310870726f7365727665c026c01b00020001000151800012036e73320970726f2d736572766502626500c01b00020001000151800006036e7333c03ec03a000100010001518000045054e055c07300010001000151800004d4ccc655 35641 e36200000001000000000000096264677a776f6c6c65026e6c0000010001 e36280000001000000030003096264677a776f6c6c65026e6c0000010001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec016c00c00020001000151800006036e7331c033c00c00020001000151800006036e7332c033c02a00010001000151800004d42d2005c04800010001000151800004d42d2003c05a00010001000151800004d42d2103 35642 21c7000000010000000000000c6f72696f6e2d65726f746963026e6c0000010001 21c7800000010000000200020c6f72696f6e2d65726f746963026e6c0000010001c00c0002000100015180000e036e7331076970746f776572c019c00c00020001000151800006036e7332c031c02d000100010001518000043ecc4065c047000100010001518000043ecc4066 35643 4bd800000001000000000000037777770b686f752d76616e2d6a6f75026e6c0000010001 4bd880000001000000020000037777770b686f752d76616e2d6a6f75026e6c0000010001c0100002000100015180000c026e7306766576696461c01cc01000020001000151800006036e7332c033 35644 a6fc000000010000000000000377777707656c63616e6574026e6c0000010001 a6fc800000010000000200020377777707656c63616e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c1ac2d36c03e00010001000151800004c1ac2d35 35645 0bb60000000100000000000003777777106b6c616e7476616e766572736174656c026e6c0000010001 0bb68000000100000002000103777777106b6c616e7476616e766572736174656c026e6c0000010001c0100002000100015180000b026e730563616c7978c021c0100002000100015180000c096d617273657065696ec038c03500010001000151800004d582a20c 35646 629600000001000000000000037777771167656d65656e746564657368656572656e026e6c0000010001 629680000001000000020000037777771167656d65656e746564657368656572656e026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c03a 35647 12dc000000010000000000000b72696f766f6f727a6f7267026e6c00000f0001 12dc800000010000000200000b72696f766f6f727a6f7267026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 35648 3c400000000100000000000009652d6c756e61746963026e6c0000010001 3c408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35649 11f000000001000000000000037777770c7961776e696e676a656c6c65026e6c0000010001 11f080000001000000020000037777770c7961776e696e676a656c6c65026e6c0000010001c01000020001000151800015026e730c776f726c64686f7374696e67036f726700c01000020001000151800008026e73026175c034 35650 97ce0000000100000000000003777777126b616d657276616e6b6f6f7068616e64656c026e6c0000010001 97ce8000000100000002000203777777126b616d657276616e6b6f6f7068616e64656c026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c023c01000020001000151800006036e7332c03ac03700010001000151800004c3402003c05000010001000151800004c340202b 35651 27fb000000010000000000000377777707696b653230303006746d66776562026e6c0000010001 27fb800000010000000200000377777707696b653230303006746d66776562026e6c0000010001c01800020001000151800011056c656d6f6e0571696e6970036e657400c01800020001000151800007046c696d65c039 35652 fc1c00000001000000000000036e7333076f6d732d6e6574026e6c0000010001 fc1c80000001000000020002036e7333076f6d732d6e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004d5efb22fc03e00010001000151800004d5ef9d07 35653 e12900000001000000000000037777770973706f727473746164026e6c0000010001 e12980000001000000020000037777770973706f727473746164026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 35654 2c9900100001000000000001036e7331056132303030026e6c00000100010000290800000080000000 2c9980000001000000030003036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 35655 e87000100001000000000001036e7332056132303030026e6c00000100010000290800000080000000 e87080000001000000030003036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 35656 445600000001000000000000166a616e7373656e62656c617374696e67616476696573026e6c00000f0001 445680000001000000020002166a616e7373656e62656c617374696e67616476696573026e6c00000f0001c00c00020001000151800013036e73310c62656472696a76656e776562c023c00c00020001000151800006036e7332c03bc03700010001000151800004d90867fec05600010001000151800004c1ad2bfe 35657 5a4800000001000000000000037777770a636f6d70757365727665026e6c0000010001 5a4880000001000000020000037777770a636f6d70757365727665026e6c0000010001c0100002000100015180001f0e61726c2d6e616d652d7376632d310a636f6d7075736572766503636f6d00c010000200010001518000110e6475622d6e616d652d7376632d31c03e 35658 312f00000001000000000000036e733208696e7465722d6974026e6c0000010001 312f80000001000000020002036e733208696e7465722d6974026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004d5c4385ac00c00010001000151800004d5c4385b 35659 f0f400000001000000000000033033350c7665727a616d656c67696473026e6c0000010001 f0f480000001000000020000033033350c7665727a616d656c67696473026e6c0000010001c01000020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01000020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 35660 f18400000001000000000000026e7308696e7465722d6974026e6c0000010001 f18480000001000000020002026e7308696e7465722d6974026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5c4385ac03a00010001000151800004d5c4385b 35661 b76b0000000100000000000003777777056b616d7066026e6c0000010001 b76b8000000100000002000003777777056b616d7066026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c02e 35662 f69700000001000000000000035f6763045f7463700c6b657a726f7474657264616d026e6c0000060001 f69784030001000000010000035f6763045f7463700c6b657a726f7474657264616d026e6c0000060001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 35663 9dfc00000001000000000000026e73067874646e6574026e6c0000010001 9dfc80000001000000020002026e73067874646e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 35664 324100000001000000000000036e7331067874646e6574026e6c0000010001 324180000001000000020002036e7331067874646e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004c16e9d02c00c00010001000151800004d9cc165f 35665 05b800000001000000000000066a6f73687561076265616e2d6974026e6c0000010001 05b880000001000000020002066a6f73687561076265616e2d6974026e6c0000010001c0130002000100015180000c036e7331056e6574636fc01bc01300020001000151800006036e7332c033c02f00010001000151800004c26d4a82c04700010001000151800004c26dd146 35666 1af800000001000000000000036e73330767617574656e67026e6c0000010001 1af880000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35667 971c00000001000000000000037777770b776572656c647374617274026e6c0000010001 971c80000001000000020000037777770b776572656c647374617274026e6c0000010001c01000020001000151800014036e73310d646e73636f6d656f6e6c696e65c01cc01000020001000151800006036e7332c034 35668 f5660000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f5668000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35669 66200000000100000000000003777777096b6f707a6f7267656e026e6c0000010001 66208000000100000002000203777777096b6f707a6f7267656e026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004d994ae77c04c000100010001518000045054ea06 35670 ea6e00000001000000000000056d69726563026e6c00000f0001 ea6e80000001000000020000056d69726563026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 35671 046f0000000100000000000009652d6c756e61746963026e6c0000010001 046f8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35672 1b9900000001000000000000037777770a3474756e652d73686f70026e6c0000010001 1b9980000001000000020000037777770a3474756e652d73686f70026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c032 35673 f58b00000001000000000000046d61696c0d73762d7a6f657465726d656572026e6c0000010001 f58b80000001000000020000046d61696c0d73762d7a6f657465726d656572026e6c0000010001c0110002000100015180000f026e7306777367617465036e657400c01100020001000151800006036e7332c036 35674 0f740000000100000000000003737767026e6c00000f0001 0f748000000100000002000103737767026e6c00000f0001c00c0002000100015180000a026e73046b6e6d67c010c00c0002000100015180000b026e73026e6c036e657400c02400010001000151800004d4cef782 35675 dfe2000000010000000000000761707073736f6c0b77326b736f6c6970736973026e6c0000010001 dfe2840300010000000100000761707073736f6c0b77326b736f6c6970736973026e6c0000010001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 35676 555b000000010000000000000777616e61646f6f026e6c00000f0001 555b800000010000000200010777616e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 35677 efcb000000010000000000000467736276026e6c00000f0001 efcb800000010000000200010467736276026e6c00000f0001c00c0002000100015180000a036e733303777873c011c00c00020001000151800006036e7334c029c03b00010001000151800004d5ef9a65 35678 a70500000001000000000000037777770e767236636c7562686f6c6c616e64026e6c0000010001 a70580000001000000020000037777770e767236636c7562686f6c6c616e64026e6c0000010001c01000020001000151800010036e7331066969686f73740362697a00c01000020001000151800006036e7332c037 35679 503c00000001000000000000046d746131046b6e6d67026e6c0000010001 503c80000001000000020001046d746131046b6e6d67026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02a00010001000151800004d4cef782 35680 23d200000001000000000001026e73036b6c6d026e6c00000100010000291000000000000000 23d280000001000000020002026e73036b6c6d026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004ab1550120000291000000000000000 35681 240400000001000000000001026e73036b6c6d026e6c00001c00010000291000000000000000 240480000001000000020002026e73036b6c6d026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004ab1550120000291000000000000000 35682 2c0700000001000000000001026e73036b6c6d026e6c00002600010000291000000000000000 2c0780000001000000020002026e73036b6c6d026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004ab1550120000291000000000000000 35683 33a50000000100000000000103666c79036b6c6d026e6c00001c00010000291000000000000000 33a58000000100000002000203666c79036b6c6d026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab1550120000291000000000000000 35684 49160000000100000000000103666c79036b6c6d026e6c00002600010000291000000000000000 49168000000100000002000203666c79036b6c6d026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab1550120000291000000000000000 35685 c18f0000000100000000000003777777076a657463617273026e6c0000010001 c18f8000000100000002000003777777076a657463617273026e6c0000010001c01000020001000151800013056175746f310a747265666e6574646e73c018c01000020001000151800006036e7331c032 35686 57ab0000000100000000000003777777076a657463617273026e6c0000010001 57ab8000000100000002000003777777076a657463617273026e6c0000010001c01000020001000151800013056175746f310a747265666e6574646e73c018c01000020001000151800006036e7331c032 35687 07980000000100000000000004736d747011656e7465727072697365686f7374696e67026e6c0000010001 07988000000100000002000104736d747011656e7465727072697365686f7374696e67026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03700010001000151800004d5358e02 35688 2a6e00000001000000000000046e733032066368656c6c6f026e6c0000260001 2a6e80000001000000030003046e733032066368656c6c6f026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 35689 fb3b00000001000000000000046e733032066368656c6c6f026e6c0000010001 fb3b80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 35690 ef160000000100000000000004736d747011656e7465727072697365686f7374696e67026e6c00001c0001 ef168000000100000002000104736d747011656e7465727072697365686f7374696e67026e6c00001c0001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03700010001000151800004d5358e02 35691 2f370000000100000000000004736d747011656e7465727072697365686f7374696e67026e6c0000260001 2f378000000100000002000104736d747011656e7465727072697365686f7374696e67026e6c0000260001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03700010001000151800004d5358e02 35692 719e00000001000000000000026e7311656e7465727072697365686f7374696e67026e6c00001c0001 719e80000001000000020001026e7311656e7465727072697365686f7374696e67026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d5358e02 35693 23d200000001000000000000026e73036b6c6d026e6c0000010001 23d280000001000000020001026e73036b6c6d026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004ab155012 35694 f47600000001000000000000026e7311656e7465727072697365686f7374696e67026e6c0000260001 f47680000001000000020001026e7311656e7465727072697365686f7374696e67026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d5358e02 35695 240400000001000000000000026e73036b6c6d026e6c00001c0001 240480000001000000020001026e73036b6c6d026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004ab155012 35696 2c0700000001000000000000026e73036b6c6d026e6c0000260001 2c0780000001000000020001026e73036b6c6d026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004ab155012 35697 33a50000000100000000000003666c79036b6c6d026e6c00001c0001 33a58000000100000002000103666c79036b6c6d026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 35698 49160000000100000000000003666c79036b6c6d026e6c0000260001 49168000000100000002000103666c79036b6c6d026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 35699 ce8a00000001000000000000037777770a616c6c73706972697473026e6c0000010001 ce8a80000001000000020000037777770a616c6c73706972697473026e6c0000010001c0100002000100015180000f036e7331056279303037036e657400c01000020001000151800006036e7332c033 35700 3eab28000001000000010000026e6c0000060001035f6763045f7463700c6b657a726f7474657264616d026e6c000021000100000258001e000000640cc40665636f6e656c0c6b657a726f7474657264616d026e6c00 3eaba8040000000000000000 35701 660e00000001000000000000046b656d61026e6c0000010001 660e80000001000000020001046b656d61026e6c0000010001c00c0002000100015180000704646e7331c00cc00c0002000100015180000d03706e73046474616702646500c02500010001000151800004c235fd32 35702 623900000001000000000000036e7331056132303030026e6c0000010001 623980000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 35703 6c7300000001000000000000036e7332056132303030026e6c0000010001 6c7380000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 35704 00000000700240008d210000020405b401010402 000080010000000000000000 35705 2af700000001000000000000037777770f64616e636576696572646161677365026e6c0000010001 2af780000001000000020002037777770f64616e636576696572646161677365026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c020c01000020001000151800006036e7332c038c03400010001000151800004d43d0f08c05200010001000151800004d43d19e2 35706 7f4000000001000000000000097364766f6e6c696e65026e6c0000010001 7f4080000001000000020002097364766f6e6c696e65026e6c0000010001c00c00020001000151800016036e73310f666173747365727665722d61737037c016c00c00020001000151800006036e7332c02ec02a0001000100015180000442a4f028c04c0001000100015180000442a4f031 35707 f6690000000100000000000007636172746d616e03616f67026e6c0000260001 f6698000000100000002000207636172746d616e03616f67026e6c0000260001c0140002000100015180000f06706f6c6c7578056672656961c018c01400020001000151800002c00cc02c00010001000151800004c1acf7fac00c00010001000151800004c05716fa 35708 9e8700000001000000000000046d61696c03616f67026e6c0000260001 9e8780000001000000020002046d61696c03616f67026e6c0000260001c0110002000100015180000f06706f6c6c7578056672656961c015c0110002000100015180000a07636172746d616ec011c02900010001000151800004c1acf7fac04400010001000151800004c05716fa 35709 3d3f0000000100000000000007636172746d616e03616f67026e6c00001c0001 3d3f8000000100000002000207636172746d616e03616f67026e6c00001c0001c0140002000100015180000f06706f6c6c7578056672656961c018c01400020001000151800002c00cc02c00010001000151800004c1acf7fac00c00010001000151800004c05716fa 35710 a65700000001000000000000046d61696c03616f67026e6c00001c0001 a65780000001000000020002046d61696c03616f67026e6c00001c0001c0110002000100015180000f06706f6c6c7578056672656961c015c0110002000100015180000a07636172746d616ec011c02900010001000151800004c1acf7fac04400010001000151800004c05716fa 35711 ef3500000001000000000000037777770c6c696e6b696e676769726c73026e6c0000010001 ef3580000001000000020000037777770c6c696e6b696e676769726c73026e6c0000010001c0100002000100015180000f036e7331056279303037036e657400c01000020001000151800006036e7332c035 35712 e61100000001000000000000037777770e73746172746e656465726c616e64026e6c0000010001 e61180000001000000020002037777770e73746172746e656465726c616e64026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01fc01000020001000151800006036e7332c037c033000100010001518000045054f347c04f000100010001518000043e94a047 35713 b744e8ca5010447015560000000000000000 35714 b744e8ca50184470b35000000091ec00000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2a403c4eaa0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000 35715 7f920000000100000000000005646e732d32056c61646f74026e6c0000010001 7f928000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35716 3e9300000001000000000000037777770967726174697367656b026e6c0000010001 3e9380000001000000020002037777770967726174697367656b026e6c0000010001c0100002000100015180000a036e733103716b73c01ac01000020001000151800006036e7332c032c02e000100010001518000045045481ec044000100010001518000043e835085 35717 8f2928000001000000010000026e6c0000060001026763065f6d73646373096f736f736572766572026e6c0000010001000002580004915d8412 8f29a8040000000000000000 35718 d99e0000000100000000000006736572766572026462036b766b026e6c0000010001 d99e8000000100000002000206736572766572026462036b766b026e6c0000010001c0160002000100015180000d026e73076b6e6f77617265c01ac01600020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 35719 b744e8d85011446214c20000000000000000 35720 000000007002faf0d1eb0000020405b401010402 000080010000000000000000 35721 54810000000100000000000005646e732d31056c61646f74026e6c0000010001 54818000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35722 b74563a75010faf0e3b20000000000000000 b745e3a40000000000000000 35723 b74563a75018faf096e00000008e0000000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcdf403c4e5f00030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000 b745e3a40000000000000000 35724 000000007002400008010000020405b401010402 000080010000000000000000 35725 33bb0000000100000000000005646e732d32056c61646f74026e6c0000010001 33bb8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35726 b74563b55011fae2e3210000000000000000 b745e3b40000000000000000 35727 b74563b65010fae2e3200000000000000000 b745e3b40000000000000000 35728 10460000000100000000000003777777136f6e6c696e65736f636365726d616e61676572026e6c0000010001 10468000000100000002000203777777136f6e6c696e65736f636365726d616e61676572026e6c0000010001c0100002000100015180000b036e73310470696e65c024c01000020001000151800006036e7332c03cc03800010001000151800004d59c0201c04f00010001000151800004c3c1a303 35729 000000007002faf002cf0000020405b401010402 000080010000000000000000 35730 b744e8d95010446214c10000000000000000 35731 298000000001000000000000056d61696c310a686f73746d6174726978026e6c0000010001 298080000001000000020002056d61696c310a686f73746d6174726978026e6c0000010001c0120002000100015180000b026e73057173776562c01dc01200020001000151800006036e7332c034c03100010001000151800004d5c42402c04800010001000151800004d5c42403 35732 b74725ec5010faf0524f0000000000000000 b747a5e30000000000000000 35733 b74725ec5018faf08e160000008e7867000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcdf403c4e5f00030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000 b747a5e30000000000000000 35734 b746472d5010447031d10000000000000000 b746c7240000000000000000 35735 b74725fa5011fae251be0000000000000000 b747a5f30000000000000000 35736 b746472d50184470ec4c00000091ce80000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000 b746c7240000000000000000 35737 cb2b000000010000000000000377777704616e626f026e6c0000010001 cb2b800000010000000300030377777704616e626f026e6c0000010001c0100002000100015180000f036e7331086e6f766178657373c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004d5c98015c04400010001000151800004d5c9bf12c05600010001000151800004d5ef9c26 35738 b74725fb5010fae251bd0000000000000000 b747a5f30000000000000000 35739 000000007002faf0e9570000020405b401010402 000080010000000000000000 35740 b748136e5010faf04b550000000000000000 b74893640000000000000000 35741 b748136e5018faf0e48c0000008e1af7000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afcdf403c4e5f00030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005345525645524f534f5345525645520000 b74893640000000000000000 35742 8e5e0000000100000000000008726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001 8e5e8000000100000002000208726567696f7777770d6b72616e74656e6f6e6c696e65026e6c0000010001c0150002000100015180000e036e7331076e657463617374c023c01500020001000151800006036e7332c03bc03700010001000151800004c2970101c05100010001000151800004c297012d 35743 b748137c5011fae24ac40000000000000000 b74893740000000000000000 35744 1f300000000100000000000003777777117765656b626c616476616e646575726e65026e6c0000010001 1f308403000100000001000003777777117765656b626c616476616e646575726e65026e6c0000010001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 35745 b746473b50114462313d0000000000000000 b746c7340000000000000000 35746 ab760000000100000000000003777777056c6572656e026e6c0000010001 ab768000000100000002000203777777056c6572656e026e6c0000010001c0100002000100015180000a036e7331036e7873c016c01000020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 35747 b748137d5010fae24ac30000000000000000 b74893740000000000000000 35748 0000000070024000f14c0000020405b401010402 000080010000000000000000 35749 acfc0000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 acfc8000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 35750 ee620010000100000000000004777777320c7374657272656e6265757273026e6c0000010001 ee628000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 35751 a8d200000001000000000000036e733103696e67026e6c00001c0001 a8d280000001000000020002036e733103696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 35752 ce0800000001000000000000036e733103696e67026e6c0000260001 ce0880000001000000020002036e733103696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 35753 6c2c00000001000000000000036e733203696e67026e6c00001c0001 6c2c80000001000000020002036e733203696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 35754 cfee00000001000000000000036e733203696e67026e6c0000260001 cfee80000001000000020002036e733203696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 35755 b746473c50104462313c0000000000000000 b746c7340000000000000000 35756 b748a93150104470b9160000000000000000 35757 b748a93150184470dd12000000916500000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000 35758 9e2700000001000000000000037777770674756c70656e026e6c0000010001 9e2780000001000000020002037777770674756c70656e026e6c0000010001c0100002000100015180000b036e733104696e6263c017c01000020001000151800006036e7332c02fc02b00010001000151800004d5852324c04200010001000151800004d5852323 35759 019f0000000100000000000008746f706a6f796e74026e6c00000f0001 019f8000000100000003000108746f706a6f796e74026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 35760 b748a93f50114462b8820000000000000000 35761 b742be80501044706d600000000000000000 35762 b742be80501844708594000000962eb5000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe17403c4f970003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000 35763 8d4000000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 8d4080000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 35764 b748a94050104462b8810000000000000000 35765 a6a900000001000000000000037777770a626f75776b656e6e6973026e6c0000010001 a6a980000001000000020002037777770a626f75776b656e6e6973026e6c0000010001c0100002000100015180001204646e73310a6e65746d617374657273c01bc0100002000100015180000704646e7332c034c02f0001000100015180000451044203c04d00010001000151800004510442c9 35766 44b900000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 44b980000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 35767 b03300000001000000000000037777770a72656372656174696566026e6c0000010001 b03380000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 35768 baeb00000001000000000000037777770a736f636365726d61696c026e6c0000010001 baeb84030001000000010000037777770a736f636365726d61696c026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 35769 585500000001000000000000037777770e736c6f74656e2d726976616c656e026e6c0000010001 585580000001000000020002037777770e736c6f74656e2d726976616c656e026e6c0000010001c01000020001000151800013036e73310c666173747365727665723138c01fc01000020001000151800006036e7332c037c0330001000100015180000442a4fa76c0520001000100015180000442a4fa7f 35770 90a800000001000000000000026772026e6c00000f0001 90a880000001000000020000026772026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c029 35771 ff0f00000001000000000000036e733108696e736563757265026e6c0000010001 ff0f80000001000000030003036e733108696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 35772 d22400000001000000000000036e733408696e736563757265026e6c0000010001 d22480000001000000030003036e733408696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 35773 74ac00000001000000000000036e733308696e736563757265026e6c0000010001 74ac80000001000000030003036e733308696e736563757265026e6c0000010001c0100002000100015180000e076e73617574683103626974c019c0100002000100015180000a076e736175746832c035c0100002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 35774 232f00000001000000000000036e73330767617574656e67026e6c0000010001 232f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35775 59180000000100000000000003444f4302574d034f534709545245455f4f534732026e6c0000010001 59188403000100000001000003444f4302574d034f534709545245455f4f534732026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 35776 0b5b00000001000000000000037777770b696e6469616e6261626573026e6c0000010001 0b5b80000001000000020000037777770b696e6469616e6261626573026e6c0000010001c01000020001000151800012036e7335087a6f6e656564697403636f6d00c01000020001000151800007046e733134c034 35777 0ebf0000000100000000000006636861726973026e6c00000f0001 0ebf8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35778 6cae00000001000000000000037777770473616162026e6c0000010001 6cae80000001000000020002037777770473616162026e6c0000010001c010000200010001518000140d7372726463303134646d7a303403726463c015c010000200010001518000100d7372726463303132646d7a3033c037c02900010001000151800004d973e064c04900010001000151800004d973e054 35779 e60d00000001000000000000056161677573026e6c0000ff0001 e60d80000001000000020000056161677573026e6c0000ff0001c00c0002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c00c0002000100015180000805726f6b696ec02d 35780 489200000001000000000000054a48415a5403626c61026e6c0000010001 489280000001000000020001054a48415a5403626c61026e6c0000010001c0120002000100015180000d026e73046575726f036e657400c0120002000100015180000d026e73076575726f6e6574c016c04300010001000151800004c2860043 35781 00000000700240008d4000000204058c01010402 000080010000000000000000 35782 29140000000100000000000007636f756e74657207636865636b6974026e6c0000010001 29148000000100000002000207636f756e74657207636865636b6974026e6c0000010001c01400020001000151800009036e7331026973c01cc01400020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 35783 2a1e000000010000000000000e6138302d3132362d39362d323438046164736c06787334616c6c026e6c0000010001 2a1e800000010000000300020e6138302d3132362d39362d323438046164736c06787334616c6c026e6c0000010001c02000020001000151800005026e73c020c02000020001000151800006036e7332c020c0200002000100015180000d026e730472697065036e657400c03b00010001000151800004c26d0642c04c00010001000151800004c26d0963 35784 031200000001000000000000036e73340767617574656e67026e6c0000010001 031280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35785 1b1c00000001000000000000036e73340767617574656e67026e6c0000010001 1b1c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35786 ea5b000000010000000000000e73656375726974617367726f7570026e6c00000f0001 ea5b800000010000000200000e73656375726974617367726f7570026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c035 35787 1a280000000100000000000006616c7469756d026e6c00000f0001 1a288000000100000002000206616c7469756d026e6c00000f0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f0046 35788 dd2000000001000000000000046d61696c03766e76026e6c0000010001 dd2080000001000000020000046d61696c03766e76026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c02f 35789 b749679e5010429098540000000000000000 b749e7940000000000000000 35790 4386000000010000000000000377777706636f6d706171026e6c0000010001 4386800000010000000200000377777706636f6d706171026e6c0000010001c0100002000100015180001c0a6e73312d7075626c6963047a72656f06636f6d70617103636f6d00c0100002000100015180000d0a6e73322d7075626c6963c036 35791 b749679e50184290705700000091e4db000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005703677373096d6963726f736f667403636f6d00403afd9c403c4f1c0003000000344e544c4d535350000100000097b200c00d000d002700000007000700200000005641524b4a4553444953545249564552533033410000 b749e7940000000000000000 35792 f5740000000100000000000003777777086d74726565787878026e6c0000010001 f5748000000100000002000003777777086d74726565787878026e6c0000010001c01000020001000151800013036e7331097669727475616c787303636f6d00c01000020001000151800006036e7332c031 35793 b74967ac5011428297c00000000000000000 b749e7a40000000000000000 35794 823b0000000100000000000006636861726973026e6c00000f0001 823b8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35795 9ce8000000010000000000000462617261026e6c0000ff0001 9ce8800000010000000200020462617261026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 35796 ee2800000001000000000000037777770b636164636f6c6c6c656765026e6c0000010001 ee2884030001000000010000037777770b636164636f6c6c6c656765026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 35797 91e90000000100000000000012746567656e6469736372696d696e61746965026e6c0000010001 91e98000000100000002000012746567656e6469736372696d696e61746965026e6c0000010001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c037 35798 4ac700000001000000000000034e533203494e47026e6c0000010001 4ac780000001000000020002034e533203494e47026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 35799 1b0600000001000000000000034e533203494e47026e6c00001c0001 1b0680000001000000020002034e533203494e47026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 35800 b5bc00000001000000000000034e533103494e47026e6c0000010001 b5bc80000001000000020002034e533103494e47026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 35801 e19f00000001000000000000034e533103494e47026e6c00001c0001 e19f80000001000000020002034e533103494e47026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 35802 b74967ad5010428297bf0000000000000000 b749e7a40000000000000000 35803 6dbf00000001000000000000026e75026e6c026e6c00001c0001 6dbf84030001000000010000026e75026e6c026e6c00001c0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 35804 0159000000010000000000000672656c6179310b776f726c646f6e6c696e65026e6c0000010001 0159800000010000000300020672656c6179310b776f726c646f6e6c696e65026e6c0000010001c0130002000100015180000f04616e73310774697363616c69c01fc0130002000100015180000704616e7332c038c0130002000100015180001404616e73330a74697363616c696e657402626500c03300010001000151800004c3f14d38c04e00010001000151800004c3f13325 35805 d82300000001000000000000037777770f7a6576656e70726f76696e6369656e026e6c0000010001 d82380000001000000020000037777770f7a6576656e70726f76696e6369656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03a 35806 0000000070024000f46000000204058c01010402 000080010000000000000000 35807 04da0000000100000000000007676c6173776562026e6c00000f0001 04da8000000100000002000207676c6173776562026e6c00000f0001c00c0002000100015180000d036e733106646e736e6574c014c00c00020001000151800006036e7332c02cc02800010001000151800004d4ccc4f2c04100010001000151800004d4ccc4f3 35808 73c100000001000000000000037777770770632d65786974026e6c0000010001 73c184030001000000010000037777770770632d65786974026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 35809 b74a49ae501042901d640000000000000000 b74ac9a40000000000000000 35810 f8400000000100000000000007796f75616c696e08747765616b64736c026e6c0000010001 f8408000000100000002000207796f75616c696e08747765616b64736c026e6c0000010001c0140002000100015180000f036e73310863616d627269756dc01dc01400020001000151800006036e7332c035c03100010001000151800004d9131082c04c00010001000151800004d5efb202 35811 b74a49ae5018429054610000009187e1000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afd9c403c4f1c0003000000344e544c4d535350000100000097b200c00d000d002700000007000700200000005641524b4a4553444953545249564552533033410000 b74ac9a40000000000000000 35812 b74a49bc501142821cd00000000000000000 b74ac9b40000000000000000 35813 0000000070024000fa2700000204058c01010402 000080010000000000000000 35814 39680000000100000000000003777777076e6574706f6c6c026e6c0000010001 39688000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 35815 b74a49bd501042821ccf0000000000000000 b74ac9b40000000000000000 35816 b74ac63f50104290a6990000000000000000 35817 b74ac63f50184290a35700000091c220000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005703677373096d6963726f736f667403636f6d00403afd9c403c4f1c0003000000344e544c4d535350000100000097b200c00d000d002700000007000700200000005641524b4a4553444953545249564552533033410000 35818 3a3a00000001000000000000046d61696c0b736f756e6473747265616d026e6c0000010001 3a3a80000001000000020000046d61696c0b736f756e6473747265616d026e6c0000010001c01100020001000151800011036e733107636f6e6365726103636f6d00c01100020001000151800006036e7332c035 35819 33050000000100000000000003676c72026e6c0000ff0001 33058000000100000002000203676c72026e6c0000ff0001c00c0002000100015180000a07676c722d707273c00cc00c0002000100015180000c05676c722d3003737475c00cc0240001000100015180000451af4002c03a0001000100015180000451af4102 35820 deba00000001000000000000036b6e62026e6c0000ff0001 deba80000001000000020000036b6e62026e6c0000ff0001c00c00020001000151800011036e733107696c63616d706f03636f6d00c00c00020001000151800006036e7332c028 35821 b74ac64d50114282a6050000000000000000 35822 d6ed00000001000000000000046d61696c0a6379707265732d657270026e6c0000260001 d6ed80000001000000020002046d61696c0a6379707265732d657270026e6c0000260001c0110002000100015180000e036e733007656173796e6574c01cc01100020001000151800006036e7331c034c03000010001000151800004c2a55e01c04a00010001000151800004c2a55e05 35823 480200000001000000000000046e6f7261026e6c0000010001 480280000001000000020002046e6f7261026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 35824 2cce000000010000000000000a777777612d706f696e74026e6c0000010001 2cce840300010000000100000a777777612d706f696e74026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 35825 b74ac64e50104282a6040000000000000000 35826 2c1200000001000000000000036e73320763697374726f6e026e6c0000260001 2c1280000001000000020002036e73320763697374726f6e026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 35827 7c6e00000001000000000000036e73320763697374726f6e026e6c0000010001 7c6e80000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 35828 6a1200000001000000000000026e730763697374726f6e026e6c0000010001 6a1280000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 35829 78e600000001000000000000026e730763697374726f6e026e6c0000260001 78e680000001000000020002026e730763697374726f6e026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 35830 b34b000000010000000000000f7269616767616d657273666f6f7274026e6c00000f0001 b34b800000010000000200000f7269616767616d657273666f6f7274026e6c00000f0001c00c0002000100015180000e026e7308676c6f62616c7873c01cc00c00020001000151800006036e7332c033 35831 556500000001000000000000037777770c616e74692d6875737365696e026e6c0000010001 556584030001000000010000037777770c616e74692d6875737365696e026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 35832 9d480000000100000000000009696e6e6f7661746564026e6c00000f0001 9d488000000100000002000009696e6e6f7661746564026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c016c00c0002000100015180000704686e7331c02f 35833 2e8700100001000000000001036e733303777873026e6c00000100010000290800000080000000 2e8780000001000000030004036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 35834 978700000001000000000000037777770434636973026e6c0000010001 978780000001000000020002037777770434636973026e6c0000010001c0100002000100015180000e036e73310769736973776562c015c01000020001000151800006036e7332c02dc02900010001000151800004d4ccca65c04300010001000151800004510440de 35835 d1d700000001000000000000026e73027575026e6c0000010001 d1d780000001000000040004026e73027575026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c012c00f00020001000151800006036e7333c00fc00c0001000100015180000483d30405c0340001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 35836 620c00000001000000000000037777770c6b6172706572776572656c64026e6c0000010001 620c80000001000000020000037777770c6b6172706572776572656c64026e6c0000010001c01000020001000151800013026e730a646168686f7374696e6703636f6d00c01000020001000151800006036e7332c034 35837 0af100000001000000000000036e7332027575026e6c0000010001 0af180000001000000040004036e7332027575026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c013c01000020001000151800006036e7333c010c0270001000100015180000483d30405c00c0001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 35838 8a3b00000001000000000000036e733303777873026e6c0000010001 8a3b80000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 35839 96c1000000010000000000000b706c6f6567676f69726c65026e6c0000010001 96c1800000010000000200020b706c6f6567676f69726c65026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc018c00c00020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 35840 de47000000010000000000000377777703727661026e6c0000010001 de47800000010000000200000377777703727661026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 35841 a94d00100001000000000001036e733403777873026e6c00000100010000290800000080000000 a94d80000001000000030004036e733403777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a650000291000000000000000 35842 b0b600100001000000000001046e73303803777873026e6c00000100010000290800000080000000 b0b680000001000000030004046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 35843 585b00100001000000000001046e73303903777873026e6c00000100010000290800000080000000 585b80000001000000030004046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a650000291000000000000000 35844 b742be8e501144626cc70000000000000000 35845 000000007002400079c20000020405b401010402 000080010000000000000000 35846 f773000000010000000000000d426c6f6d737469656c73747261026e6c0000ff0001 f773800000010000000300010d426c6f6d737469656c73747261026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc01ac00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04cc02e000100010001518000043efa0202 35847 85dc0000000100000000000003777777076a75646f6e6574026e6c0000010001 85dc8000000100000002000103777777076a75646f6e6574026e6c0000010001c0100002000100015180000c026e7306636f62776562c018c01000020001000151800011026e73087363686970686f6c036e657400c02c0001000100015180000450f26001 35848 dade000000010000000000000a616666696c6961746573056b6c696b73026e6c0000010001 dade800000010000000200000a616666696c6961746573056b6c696b73026e6c0000010001c01700020001000151800012026e73096e6c686f7374696e67036e657400c01700020001000151800006036e7331c034 35849 20a700000001000000000000036e73310765766964656e74026e6c0000010001 20a780000001000000020002036e73310765766964656e74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c36d19c4c03a00010001000151800004c36d1942 35850 190000000001000000000000086772617a65726965026e6c00000f0001 190080000001000000020002086772617a65726965026e6c00000f0001c00c00020001000151800012036e73320b76736d2d686f7374696e67c015c00c00020001000151800005026e73c02dc02900010001000151800004d468c204c04700010001000151800004d468c205 35851 bb3100000001000000000001056132303030026e6c0000ff00010000291000000000000000 bb3180000001000000030003056132303030026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e733109756e69736f75726365c012c00c00020001000151800006036e7332c00cc026000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 35852 50ae00000001000000000000036e73320c636f6e63657074732d696374026e6c0000010001 50ae80000001000000020002036e73320c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800002c00cc03100010001000151800004d5c51c03c00c00010001000151800004d5c51e4b 35853 38e0000000010000000000000d6a657567646361726e6176616c026e6c0000010001 38e0800000010000000200000d6a657567646361726e6176616c026e6c0000010001c00c0002000100015180000f026e73066f786361727403636f6d00c00c00020001000151800006036e7332c031 35854 109900000001000000000000036e733403777873026e6c0000010001 109980000001000000030003036e733403777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 35855 2b6000000001000000000000046e73303803777873026e6c0000010001 2b6080000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 35856 0afd00000001000000000000046e73303903777873026e6c0000010001 0afd80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 35857 1d000000000100000000000009652d6c756e61746963026e6c0000010001 1d008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 35858 281100000001000000000000037777770b64652d6c612d7275696e65026e6c026e6c0000010001 281184030001000000010000037777770b64652d6c612d7275696e65026e6c026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 35859 7589000000010000000000000e7365727665722d6e61617264656e0c76657273616e61617264656e026e6c0000060001 7589840300010000000100000e7365727665722d6e61617264656e0c76657273616e61617264656e026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 35860 7b88000000010000000000000377777709736578796f726e6f74026e6c0000010001 7b88800000010000000200000377777709736578796f726e6f74026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 35861 7fc1000000010000000000000e68656d656c6161722d6e65656c65026e6c00000f0001 7fc1800000010000000300020e68656d656c6161722d6e65656c65026e6c00000f0001c00c0002000100015180000d036e733106776964657873c01bc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 35862 a05100000001000000000000087377617274657462026e6c00000f0001 a05180000001000000020001087377617274657462026e6c00000f0001c00c0002000100015180000f026e7309696e747265616e6574c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4ced165 35863 bb3100000001000000000000056132303030026e6c0000ff0001 bb3180000001000000030002056132303030026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e733109756e69736f75726365c012c00c00020001000151800006036e7332c00cc026000100010001518000043e6c0141c054000100010001518000043e6c0142 35864 eeae00000001000000000000026e7309696e747265616e6574026e6c0000010001 eeae80000001000000020001026e7309696e747265616e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d4ced165 35865 7c0e00000001000000000000036e733209696e747265616e6574026e6c0000010001 7c0e80000001000000020001036e733209696e747265616e6574026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02e00010001000151800004d4ced165 35866 04c90000000100000000000005474c454e4e06626f6f6b756d026e6c0000010001 04c98403000100000001000005474c454e4e06626f6f6b756d026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 35867 1f8100000001000000000000085f6b706173737764045f756470044653494d024e4c0000060001 1f8184030001000000010000085f6b706173737764045f756470044653494d024e4c0000060001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 35868 231f000000010000000000000377777704736b6974026e6c0000010001 231f800000010000000300020377777704736b6974026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 35869 06b9000000010000000000000377777703636467026e6c0000010001 06b9800000010000000200020377777703636467026e6c0000010001c0100002000100015180000b036e73310470696e65c014c01000020001000151800006036e7332c02cc02800010001000151800004d59c0201c03f00010001000151800004c3c1a303 35870 71c100000001000000000000037777770873686f7274696573026e6c0000010001 71c180000001000000020002037777770873686f7274696573026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 35871 775f000000010000000000000a626f736265736c61616e026e6c00000f0001 775f800000010000000200020a626f736265736c61616e026e6c00000f0001c00c0002000100015180000a036e7331036e7873c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 35872 27880010000100000000000106636861726973026e6c00000f00010000290800000080000000 27888000000100000002000106636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a0000291000000000000000 35873 2dbb0000000100000000000005646e732d31056c61646f74026e6c0000010001 2dbb8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35874 0ce50000000100000000000005646e732d31056c61646f74026e6c0000010001 0ce58000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35875 9dd20000000100000000000005646e732d32056c61646f74026e6c0000010001 9dd28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35876 3ff400000001000000000000036e733106776964657873026e6c0000010001 3ff480000001000000030002036e733106776964657873026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa0703 35877 682a00000001000000000000077765626368617406787334616c6c026e6c0000010001 682a80000001000000030002077765626368617406787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 35878 49b000000001000000000000116c6963656e7365636f6e6e656374696f6e026e6c0000020001 49b080000001000000020002116c6963656e7365636f6e6e656374696f6e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ec00c00020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 35879 d85b0000000100000000000003777777076e6574706f6c6c026e6c0000010001 d85b8000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 35880 cbd1000000010000000000000762736d74702d3108636f6e6365707473026e6c0000ff0001 cbd1800000010000000200020762736d74702d3108636f6e6365707473026e6c0000ff0001c0140002000100015180001103646e730a636f6e63657074736661c01dc0140002000100015180000704646e7332c014c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e1c 35881 f1ad000000010000000000000977696e646f7773787006706167696e61026e6c0000010001 f1ad800000010000000300030977696e646f7773787006706167696e61026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800006036e7333c016c031000100010001518000043e45a282c043000100010001518000043e45a283c055000100010001518000043e45a284 35882 93c40000000100000000000006636861726973026e6c00000f0001 93c48000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 35883 07ff00000001000000000000026e73076e656473746174026e6c0000010001 07ff80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 35884 282700000001000000000000026e73096c6162656c736f6674026e6c00001c0001 282780000001000000020002026e73096c6162656c736f6674026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800008056e73736563c00fc00c00010001000151800004d4f13b06c03b00010001000151800004d4f13b07 35885 052300000001000000000000026e73096c6162656c736f6674026e6c0000260001 052380000001000000020002026e73096c6162656c736f6674026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800008056e73736563c00fc00c00010001000151800004d4f13b06c03b00010001000151800004d4f13b07 35886 ecf400000001000000000000056e73736563096c6162656c736f6674026e6c00001c0001 ecf480000001000000020002056e73736563096c6162656c736f6674026e6c00001c0001c01200020001000151800005026e73c012c01200020001000151800002c00cc03000010001000151800004d4f13b06c00c00010001000151800004d4f13b07 35887 141400000001000000000000056e73736563096c6162656c736f6674026e6c0000260001 141480000001000000020002056e73736563096c6162656c736f6674026e6c0000260001c01200020001000151800005026e73c012c01200020001000151800002c00cc03000010001000151800004d4f13b06c00c00010001000151800004d4f13b07 35888 4eac0000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4eac8403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 35889 1e6d00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 1e6d80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 35890 25d300100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 25d380000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 35891 45c400000001000000000000026e73053266617374026e6c0000010001 45c480000001000000030003026e73053266617374026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc0290001000100015180000450f7c022c03b000100010001518000043e858122c04d000100010001518000045117eb22 35892 219600000001000000000000057664733534057469766473026e6c0000010001 219684030001000000010000057664733534057469766473026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 35893 d02e00000001000000000000046d61696c0b64656a6f6e67696e747261024e4c0000010001 d02e80000001000000020002046d61696c0b64656a6f6e67696e747261024e4c0000010001c0110002000100015180000e036e733107626265796f6e64c01dc01100020001000151800006036e7332c035c031000100010001518000043eb1900bc04b000100010001518000043eb19002 35894 22fa0000000100000000000008686f73746e616d650462696e640000100003 22fa8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35895 d1410000000100000000000003777777087370656c70756e74026e6c0000010001 d1418000000100000002000203777777087370656c70756e74026e6c0000010001c0100002000100015180000b036e73310470696e65c019c01000020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 35896 439600000001000000000000026e73076e656473746174026e6c0000010001 439680000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 35897 21cb00000001000000000000036e7333076e656473746174026e6c0000010001 21cb80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 35898 5cc50000000100000000000005646e732d31056c61646f74026e6c0000010001 5cc58000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35899 ff2100000001000000000000026e730563616e6f6e026e6c0000010001 ff2180000001000000020001026e730563616e6f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800014036e733202657507636f6e63657274036e657400c00c00010001000151800004c21ab811 35900 253e0000000100000000000005646e732d32056c61646f74026e6c0000010001 253e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35901 55280000000100000000000008686f73746e616d650462696e640000100003 55288000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 35902 e5d5000000010000000000000473616f7a026e6c00000f0001 e5d5800000010000000200010473616f7a026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c011c03e00010001000151800004c2860043 35903 05f900000001000000000000037777770967726174697367656b026e6c0000010001 05f980000001000000020002037777770967726174697367656b026e6c0000010001c0100002000100015180000a036e733103716b73c01ac01000020001000151800006036e7332c032c02e000100010001518000045045481ec044000100010001518000043e835085 35904 b9ab0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 b9ab8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35905 e7350000000100000000000003626c3402626c06787334616c6c026e6c0000260001 e7358000000100000003000203626c3402626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 35906 9048000000010000000000000b6c69636874616476696573026e6c0000020001 9048800000010000000200020b6c69636874616476696573026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 35907 a78e000000010000000000000c6f7267616e69636561727468026e6c0000010001 a78e800000010000000200000c6f7267616e69636561727468026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c030 35908 f99900000001000000000000087665726c6f6f696a026e6c00000f0001 f99980000001000000020000087665726c6f6f696a026e6c00000f0001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02d 35909 37770000000100000000000003777777087665726f6e696361026e6c0000010001 37778000000100000002000203777777087665726f6e696361026e6c0000010001c0100002000100015180000f036e7331086261736971776562c019c01000020001000151800006036e7332c031c02d0001000100015180000452c04516c0480001000100015180000452c04542 35910 bc9a000000010000000000000674686573636f026e6c0000010001 bc9a800000010000000200020674686573636f026e6c0000010001c00c00020001000151800011036e73310a696e746572706c617a61c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5f72f2dc04400010001000151800004d5c1d528 35911 80730000000100000000000005646e732d32056c61646f74026e6c0000010001 80738000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 35912 b742be8f501044626cc60000000000000000 35913 b74cd39f50104470171a0000000000000000 35914 b74cd39f501844705a7f000000960285000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe18403c4f980003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000 35915 232300000001000000000000037777770f7073692d7465737473657276696365026e6c0000010001 232380000001000000030002037777770f7073692d7465737473657276696365026e6c0000010001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c038c03400010001000151800004d4ccc0fcc069000100010001518000043efa0703 35916 784200000001000000000000047a707072026e6c00000f0001 784280000001000000020002047a707072026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 35917 809000000001000000000000046d61696c0a7472616e736c6f676963026e6c0000010001 809080000001000000020000046d61696c0a7472616e736c6f676963026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c036 35918 358c000000010000000000000377777707676f65726f6573026e6c0000010001 358c800000010000000300030377777707676f65726f6573026e6c0000010001c01000020001000151800012047072693103646e73067073696e6574c018c010000200010001518000070470726932c031c010000200010001518000070470726933c031c02c000100010001518000049a0ff9a6c04a000100010001518000049a0ff9aac05d000100010001518000049a0ff9ae 35919 4f16000000010000000000000c6f7267616e69636561727468026e6c0000010001 4f16800000010000000200000c6f7267616e69636561727468026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c030 35920 bb97000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 bb97800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 35921 0faf00000001000000000000026e730563616e6f6e026e6c00001c0001 0faf80000001000000020001026e730563616e6f6e026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800014036e733202657507636f6e63657274036e657400c00c00010001000151800004c21ab811 35922 56bf00000001000000000000026e730563616e6f6e026e6c0000260001 56bf80000001000000020001026e730563616e6f6e026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800014036e733202657507636f6e63657274036e657400c00c00010001000151800004c21ab811 35923 96d900000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 96d980000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 35924 139d00000001000000000000026e730f646f6d61696e2d7265676973747279026e6c0000260001 139d80000001000000030002026e730f646f6d61696e2d7265676973747279026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 35925 ca8500000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 ca8580000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35926 038a00000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c0000260001 038a80000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35927 9f6b00000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 9f6b80000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35928 461600000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c0000260001 461680000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 35929 6f1300000001000000000000066e617468616e08706f6c7977617265026e6c0000010001 6f1380000001000000020002066e617468616e08706f6c7977617265026e6c0000010001c0130002000100015180000a036e733103696166c01cc01300020001000151800006036e7332c034c030000100010001518000045059e040c046000100010001518000045059ee03 35930 aa4f000000010000000000000e6c69636874617263686974656374026e6c0000020001 aa4f800000010000000200020e6c69636874617263686974656374026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01bc00c00020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 35931 6e5200000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 6e5280000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 35932 104000000001000000000000036e73320f6761726e69657270726f6a65637473026e6c00001c0001 104080000001000000020002036e73320f6761726e69657270726f6a65637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 35933 ac8500000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000260001 ac8580000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 35934 b7a400000001000000000000026e730f6761726e69657270726f6a65637473026e6c00001c0001 b7a480000001000000020002026e730f6761726e69657270726f6a65637473026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 35935 fb1300000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000260001 fb1380000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 35936 399700000001000000000000036e73310f6761726e69657270726f6a65637473026e6c00001c0001 399780000001000000020002036e73310f6761726e69657270726f6a65637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 35937 185700000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000260001 185780000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 35938 e92b000000010000000000000377777706637662616e6b026e6c0000010001 e92b800000010000000200020377777706637662616e6b026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4ccd865c046000100010001518000045054ec34 35939 c27f00000001000000000000036e733104696c7365026e6c0000010001 c27f80000001000000030003036e733104696c7365026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a284 35940 c47c00000001000000000000036e733304696c7365026e6c0000010001 c47c80000001000000030003036e733304696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc029000100010001518000043e45a282c03b000100010001518000043e45a283c00c000100010001518000043e45a284 35941 595100000001000000000000026e73036f6b65026e6c0000010001 595180000001000000020002026e73036f6b65026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004c13acc3bc03500010001000151800004c13acc27 35942 404f00000001000000000000036e7332036f6b65026e6c0000010001 404f80000001000000020002036e7332036f6b65026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004c13acc3bc00c00010001000151800004c13acc27 35943 522c0000000100000000000009736d74702d6f75743606787334616c6c026e6c0000010001 522c8000000100000003000209736d74702d6f75743606787334616c6c026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000d026e730472697065036e657400c03100010001000151800004c26d0642c04200010001000151800004c26d0963 35944 2f48000000010000000000000377777712726f74746965727665726c69636874696e67026e6c0000010001 2f48800000010000000200020377777712726f74746965727665726c69636874696e67026e6c0000010001c0100002000100015180000a036e7331036e7873c023c01000020001000151800006036e7332c03bc03700010001000151800004d973c015c04d00010001000151800004d973c102 35945 d44800000001000000000000066e6562756c61056577697365026e6c0000010001 d44880000001000000020002066e6562756c61056577697365026e6c0000010001c0130002000100015180000a036e7331036e7873c019c01300020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 35946 ed8300000001000000000000036e73310b6963742d636f6e63657074026e6c0000010001 ed8380000001000000020002036e73310b6963742d636f6e63657074026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c26d9983c03e00010001000151800004d5544f5d 35947 2a78000000010000000000000972696473777572747a026e6c0000010001 2a78840300010000000100000972696473777572747a026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 35948 b69e000000010000000000000162026d780461786973026e6c0000010001 b69e800000010000000200020162026d780461786973026e6c0000010001c011000200010001518000070161026e73c011c011000200010001518000040162c02cc02a00010001000151800004d97261d9c03d0001000100015180000450558124 35949 7e2f00000001000000000000037777770f747067706f7374627573696e657373026e6c0000010001 7e2f80000001000000020002037777770f747067706f7374627573696e657373026e6c0000010001c0100002000100015180000e036e733207737570706f7274c020c01000020001000151800006036e7334c038c03400010001000151800004c372e7c8c04e00010001000151800004c372e6fe 35950 cb60000000010000000000000972696473777572747a026e6c0972696473777572747a026e6c0000010001 cb60840300010000000100000972696473777572747a026e6c0972696473777572747a026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 35951 425a00000001000000000000046d61696c09657863657074696f6e026e6c0000010001 425a80000001000000030003046d61696c09657863657074696f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02f00010001000151800004d5c9a38cc04100010001000151800004d5c9a38dc05300010001000151800004d5c9af03 35952 59e50000000100000000000003777777066f646976616c026e6c0000010001 59e58000000100000002000203777777066f646976616c026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c017c01000020001000151800006036e7332c02fc02b000100010001518000045054ed14c04800010001000151800004d5f72f14 35953 736c0000000100000000000003636b61026e6c0000010001 736c8000000100000002000203636b61026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 35954 7b7900000001000000000000037777770e74696e65737461616c67726f6570026e6c0000010001 7b7984030001000000010000037777770e74696e65737461616c67726f6570026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 35955 b90d00000001000000000000066265696a6572026e6c00000f0001 b90d80000001000000020000066265696a6572026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 35956 b816000000010000000000001167726161667363686170636f6c6c656765026e6c0000ff0001 b816800000010000000200021167726161667363686170636f6c6c656765026e6c0000ff0001c00c0002000100015180000d036e7331066e6c74726565c01ec00c00020001000151800006036e7332c036c03200010001000151800004d4b20403c04b00010001000151800004d5881e45 35957 d57a00000001000000000000074d41494c30313107554e494d414153024e4c0000010001 d57a80000001000000030003074d41494c30313107554e494d414153024e4c0000010001c0140002000100015180000906726c30303031c014c0140002000100015180000906696361737332c014c0140002000100015180000e036e733107737572666e6574c01cc0300001000100015180000489780101c0450001000100015180000489780105c05a00010001000151800004c0576a65 35958 c1dc00000001000000000001076863636669646f03686363026e6c00000f00010000291000000000000000 c1dc80000001000000020001076863636669646f03686363026e6c00000f0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c0320000291000000000000000 35959 ea790000000100000000000011616d7374656c7665656e636f6c6c656765026e6c00000f0001 ea798000000100000003000111616d7374656c7665656e636f6c6c656765026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01ec00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c050c032000100010001518000043efa0202 35960 10a8000000010000000000000377777708636f6e6e65787973026e6c0000010001 10a8800000010000000300030377777708636f6e6e65787973026e6c0000010001c0100002000100015180000f046e732d310774657075636f6dc019c01000020001000151800007046e732d32c032c01000020001000151800007046e732d33c032c02d000100010001518000043e320d4cc04800010001000151800004c356164ac05b00010001000151800004c3510c03 35961 bcfd000000010000000000000377777707746576656c6465026e6c0000010001 bcfd800000010000000200000377777707746576656c6465026e6c0000010001c01000020001000151800011036e73310a77656273797374656d73c018c01000020001000151800006036e7332c030 35962 719000100001000000000001034e533107535552464e4554024e4c00000100010000290800000080000000 719080000001000000040004034e533107535552464e4554024e4c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 35963 b8c8001000010000000000010649434153533207554e494d414153024e4c00000100010000290800000080000000 b8c8800000010000000300040649434153533207554e494d414153024e4c0000010001c0130002000100015180000906726c30303031c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01bc02f0001000100015180000489780101c00c0001000100015180000489780105c05200010001000151800004c0576a650000291000000000000000 35964 10ff00000001000000000000037777770a62696b656d6f74696f6e026e6c0000010001 10ff80000001000000030000037777770a62696b656d6f74696f6e026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c033c01000020001000151800006036e7333c033 35965 dc640010000100000000000106524c3030303107554e494d414153024e4c00000100010000290800000080000000 dc648000000100000003000406524c3030303107554e494d414153024e4c0000010001c01300020001000151800002c00cc0130002000100015180000906696361737332c013c0130002000100015180000e036e733107737572666e6574c01bc00c0001000100015180000489780101c03d0001000100015180000489780105c05200010001000151800004c0576a650000291000000000000000 35966 b7760010000100000000000108554d44433030303307554e494d414153024e4c00000100010000290800000080000000 b7768000000100000003000408554d44433030303307554e494d414153024e4c0000010001c0150002000100015180000906726c30303031c015c0150002000100015180000906696361737332c015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000489780101c0460001000100015180000489780105c05b00010001000151800004c0576a650000291000000000000000 35967 6e0900000001000000000000056372696f31047372767a026e6c0000010001 6e0980000001000000020002056372696f31047372767a026e6c0000010001c0120002000100015180000f036e733108736572766963657ac017c01200020001000151800006036e7332c02fc02b0001000100015180000450f7cb0ac0460001000100015180000450f7d401 35968 bef000000001000000000000056372696f32047372767a026e6c0000010001 bef080000001000000020002056372696f32047372767a026e6c0000010001c0120002000100015180000f036e733108736572766963657ac017c01200020001000151800006036e7332c02fc02b0001000100015180000450f7cb0ac0460001000100015180000450f7d401 35969 233b00000001000000000000036e73340767617574656e67026e6c0000010001 233b80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35970 16a20000000100000000000005776562313108696e74726f776562026e6c0000010001 16a28000000100000002000205776562313108696e74726f776562026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02f0001000100015180000450416028c04100010001000151800004c356780c 35971 6dea00000001000000000000166c6963687463656e7472756d2d6b6465727569746572026e6c0000020001 6dea80000001000000020002166c6963687463656e7472756d2d6b6465727569746572026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec023c00c00020001000151800006036e7332c03bc03700010001000151800004c29f4906c04f00010001000151800004c29fb004 35972 c1dc00000001000000000000076863636669646f03686363026e6c00000f0001 c1dc80000001000000020000076863636669646f03686363026e6c00000f0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c032 35973 8d4e00000001000000000000046f61736503756369036b756e026e6c0000010001 8d4e80000001000000030003046f61736503756369036b756e026e6c0000010001c0150002000100015180000b086361707962617261c011c0150002000100015180000a036e733103736369c015c0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483ae3c15c0440001000100015180000483aee004c05a00010001000151800004c0576a65 35974 51dc00000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637308686f6c737276303206646578776164026e6c0000210001 51dc84030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637308686f6c737276303206646578776164026e6c0000210001c05000060001000038400036026e730f646f6d61696e2d7265676973747279c0500a686f73746d6173746572c0670bf1e540000070800000384000278d0000003840 35975 42e728000001000100020000026e6c0000060001037063380e776567686f7273742d6f6c696b6f026e6c00000500fe000000000000c014000100ff000000000000c01400010001000003840004c0a8002d 42e7a8040000000000000000 35976 1e6e0000000100000000000003777777076e656473746174026e6c0000010001 1e6e8000000100000002000203777777076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 35977 1c7300000001000000000000036e7331057661786f6e026e6c00001c0001 1c7380000001000000020002036e7331057661786f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e291af0c038000100010001518000043e291af1 35978 ef0100000001000000000000036e7331057661786f6e026e6c0000260001 ef0180000001000000020002036e7331057661786f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e291af0c038000100010001518000043e291af1 35979 a6a600000001000000000000036e7332057661786f6e026e6c00001c0001 a6a680000001000000020002036e7332057661786f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000043e291af0c00c000100010001518000043e291af1 35980 128d00000001000000000000036e7332057661786f6e026e6c0000260001 128d80000001000000020002036e7332057661786f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000043e291af0c00c000100010001518000043e291af1 35981 ebeb00000001000000000000107a6f656b7a6f656b7a616b656c696a6b026e6c00000f0001 ebeb84030001000000010000107a6f656b7a6f656b7a616b656c696a6b026e6c00000f0001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 35982 6a100000000100000000000003777777067a7376737372026e6c0000010001 6a108403000100000001000003777777067a7376737372026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 35983 ab950000000100000000000003676363026e6c00000f0001 ab958000000100000002000203676363026e6c00000f0001c00c0002000100015180000e036e733107772d652d722d6bc010c00c00020001000151800006036e7332c028c024000100010001518000045054ebd3c03e000100010001518000045054ebdc 35984 21c600000001000000000000026e73057972616d73026e6c0000010001 21c680000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 35985 09c30000000100000000000003777777086d756c7469766973026e6c0000010001 09c38000000100000002000203777777086d756c7469766973026e6c0000010001c0100002000100015180000e026e730869742d776f726b73c019c01000020001000151800014026e730e667279736c616e2d6f6e6c696e65c019c02d00010001000151800004515b0288c04700010001000151800004515b020d 35986 334800000001000000000000036e73330767617574656e67026e6c0000010001 334880000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 35987 0866000000010000000000000a686f6c30316578646e730369636c026e6c0000010001 0866800000010000000200010a686f6c30316578646e730369636c026e6c0000010001c01700020001000151800002c00cc0170002000100015180000b026e73026e6c036e657400c00c00010001000151800004c14f9064 35988 3bac00000001000000000000037777771067726579686f756e6473726573637565026e6c0000010001 3bac80000001000000020000037777771067726579686f756e6473726573637565026e6c0000010001c0100002000100015180000c026e7306766576696461c021c01000020001000151800006036e7332c038 35989 00000000700240009a450000020405b401010402 000080010000000000000000 35990 497b00000001000000000000037777770b73686f7063656e7472756d026e6c0000010001 497b80000001000000020001037777770b73686f7063656e7472756d026e6c0000010001c01000020001000151800010026e730a62686d732d67726f6570c01cc0100002000100015180000c036e7331057669727475c01cc04c00010001000151800004d9726102 35991 a75a00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 a75a80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 35992 d41c000000010000000000000f564953494f4e454e47494e45455253024e4c00000f0001 d41c800000010000000200010f564953494f4e454e47494e45455253024e4c00000f0001c00c0002000100015180000a036e733303777873c01cc00c00020001000151800006036e7334c034c04600010001000151800004d5ef9a65 35993 323f000000010000000000000377777706626f656b6965026e6c0000010001 323f800000010000000200000377777706626f656b6965026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 35994 b74eb5d65010447055640000000000000000 35995 f0fa000000010000000000000377777704707a7a6c026e6c0000010001 f0fa800000010000000200020377777704707a7a6c026e6c0000010001c01000020001000151800009036e7331026973c015c01000020001000151800006036e7332c02dc02900010001000151800004d5852102c03e00010001000151800004d5c41503 35996 b74eb5d650184470e49e000000958e00000000010001000000000f343236303630373535373635302d330000f900010f343236303630373535373635302d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd07403c4e870003000000364e544c4d535350000100000097b200e00e000e002800000008000800200000004e54534552564552574547484f5253542d4f4c494b4f0000 35997 d6af00000001000000000000036367690465626179026e6c0000010001 d6af80000001000000020000036367690465626179026e6c0000010001c010000200010001518000140963726f636f64696c65046562617903636f6d00c0100002000100015180000b087061636966696572c038 35998 034400000001000000000000037777770774697363616c69026e6c0000010001 034480000001000000030002037777770774697363616c69026e6c0000010001c0100002000100015180000704616e7331c010c0100002000100015180000704616e7332c010c0100002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c03f00010001000151800004c3f13325 35999 a3570000000100000000000007746f7368696261026e6c00000f0001 a3578000000100000002000107746f7368696261026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02800010001000151800004c1ad6a42 36000 f64a00000001000000000000037777770563686f776e026e6c0000010001 f64a80000001000000020000037777770563686f776e026e6c0000010001c0100002000100015180000f067768646e7331056577656b61c016c01000020001000151800009067768646e7332c031 36001 b74eb5e45011446254cc0000000000000000 36002 487200000001000000000000046d72746709756e69736572766572026e6c0000010001 487280000001000000020002046d72746709756e69736572766572026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02f00010001000151800004c3454b03c04100010001000151800004d119a2fa 36003 000000007002400048fc0000020405b401010402 000080010000000000000000 36004 f8750000000100000000000005646e732d32056c61646f74026e6c0000010001 f8758000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36005 80780000000100000000000005646e732d32056c61646f74026e6c0000010001 80788000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36006 2f4128000001000000010000026e6c0000060001035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730a544f5047524f57455253026e6c0000210001000002580023000000640cc40d706463746f7067726f776572730a544f5047524f57455253026e6c00 2f41a8040000000000000000 36007 252100000001000000000000037777770a6d657373646174696e67026e6c0000010001 252180000001000000020000037777770a6d657373646174696e67026e6c0000010001c01000020001000151800010036e733109636f6d7075686f7374c01bc01000020001000151800006036e7332c033 36008 b74eb5e55010446254cb0000000000000000 36009 b7513e29501044707bc50000000000000000 b751be240000000000000000 36010 6c7a00000001000000000000046d61696c0a686167656e706f6f7274026e6c0000010001 6c7a80000001000000020000046d61696c0a686167656e706f6f7274026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c033 36011 679f00000001000000000000035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730772756279646563026e6c0000060001 679f84030001000000010000035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730772756279646563026e6c0000060001c03a00060001000038400036026e730f646f6d61696e2d7265676973747279c03a0a686f73746d6173746572c0510bf1e540000070800000384000278d0000003840 36012 2492000000010000000000000674686573636f026e6c0000ff0001 2492800000010000000200020674686573636f026e6c0000ff0001c00c00020001000151800011036e73310a696e746572706c617a61c013c00c00020001000151800006036e7332c02bc02700010001000151800004d5f72f2dc04400010001000151800004d5c1d528 36013 a09e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 a09e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36014 b7513e29501844706001000000953a00000000010001000000000f343236303630373535373635302d320000f900010f343236303630373535373635302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd07403c4e870003000000364e544c4d535350000100000097b200e00e000e002800000008000800200000004e54534552564552574547484f5253542d4f4c494b4f0000 b751be240000000000000000 36015 b74cd3ad5011446216810000000000000000 36016 00000000700240002efe0000020405b401010402 000080010000000000000000 36017 3c2a000000010000000000000973657276657270726f08617567757374796e026e6c0000010001 3c2a840300010000000100000973657276657270726f08617567757374796e026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 36018 0000000070024000278d0000020405b401010402 000080010000000000000000 36019 76510000000100000000000003777777036c6f6c026e6c0000010001 76518000000100000002000203777777036c6f6c026e6c0000010001c0100002000100015180000b036e73310477656233c014c01000020001000151800006036e7332c02cc02800010001000151800004d436240ec03f00010001000151800004c2b262ef 36020 b7513e37501144627b2d0000000000000000 b751be340000000000000000 36021 0ebc00100001000000000001036e7332056132303030026e6c00000100010000290800000000000000 0ebc80000001000000030003036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 36022 b75201fb501044709df40000000000000000 b75280010000000000000000 36023 0000000070024000b08d0000020405b401010402 000080010000000000000000 36024 83e200100001000000000001036e7332056132303030026e6c00002600010000290800000000000000 83e280000001000000030003036e7332056132303030026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 36025 b75201fb50184470261b000000966bb0000000010001000000000f313233363935303538313236362d330000f900010f313233363935303538313236362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd07403c4e870003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000 b75280010000000000000000 36026 98eb00000001000000000000086963736361726473026e6c0000ff0001 98eb80000001000000020000086963736361726473026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02f 36027 49ed000000010000000000000649434153533207554e494d414153024e4c0000010001 49ed800000010000000300030649434153533207554e494d414153024e4c0000010001c0130002000100015180000906726c30303031c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01bc02f0001000100015180000489780101c00c0001000100015180000489780105c05200010001000151800004c0576a65 36028 584b00000001000000000000034e533107535552464e4554024e4c0000010001 584b80000001000000040003034e533107535552464e4554024e4c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 36029 cb5b0000000100000000000006524c3030303107554e494d414153024e4c0000010001 cb5b8000000100000003000306524c3030303107554e494d414153024e4c0000010001c01300020001000151800002c00cc0130002000100015180000906696361737332c013c0130002000100015180000e036e733107737572666e6574c01bc00c0001000100015180000489780101c03d0001000100015180000489780105c05200010001000151800004c0576a65 36030 09660000000100000000000008554d44433030303307554e494d414153024e4c0000010001 09668000000100000003000308554d44433030303307554e494d414153024e4c0000010001c0150002000100015180000906726c30303031c015c0150002000100015180000906696361737332c015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000489780101c0460001000100015180000489780105c05b00010001000151800004c0576a65 36031 ed3b000000010000000000000377777709696e70726f6a656374026e6c0000010001 ed3b800000010000000200000377777709696e70726f6a656374026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 36032 6b1600000001000000000000037777770567616d657a026e6c0000010001 6b1680000001000000030003037777770567616d657a026e6c0000010001c0100002000100015180000a036e733103696467c016c01000020001000151800006036e7332c02ec01000020001000151800006036e7333c02ec02a0001000100015180000451af4646c0400001000100015180000451af4647c05200010001000151800004d5a0fde6 36033 b7513e38501044627b2c0000000000000000 b751be340000000000000000 36034 b75342ad50104470ded00000000000000000 b753c2a40000000000000000 36035 8e9c00000001000000000000037777770970726f626565726e75026e6c0000010001 8e9c80000001000000020000037777770970726f626565726e75026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 36036 b7520209501144629d5b0000000000000000 b75280010000000000000000 36037 b75342ad501844700d0c00000095f000000000010001000000000f343236303630373535373635302d320000f900010f343236303630373535373635302d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd07403c4e870003000000364e544c4d535350000100000097b200e00e000e002800000008000800200000004e54534552564552574547484f5253542d4f4c494b4f0000 b753c2a40000000000000000 36038 aa5a28000001000000010000026e6c0000060001035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730772756279646563026e6c0000210001000002580019000000640cc4067365727665720772756279646563026e6c00 aa5aa8040000000000000000 36039 000000007002400087df0000020405b401010402 000080010000000000000000 36040 b752020a501044629d5a0000000000000000 b75280010000000000000000 36041 b75342bb50114462de380000000000000000 b753c2b40000000000000000 36042 0000000070024000d3c000000204056401010402 000080010000000000000000 36043 21cb00000001000000000000026e73057972616d73026e6c0000010001 21cb80000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 36044 33a90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 33a98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36045 b754104050104470e88e0000000000000000 b75490440000000000000000 36046 b754104050184470e8b900000096f4ac000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd07403c4e870003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000 b75490440000000000000000 36047 18ec000000010000000000000864656c667a696a6c026e6c00001c0001 18ec800000010000000200020864656c667a696a6c026e6c00001c0001c00c0002000100015180000e026e73086d656761706c6578c015c00c00020001000151800006036e7331c02cc02900010001000151800004504f6101c04300010001000151800004504f6102 36048 466f000000010000000000000f646576726965736b6f7a696a6e656e026e6c00000f0001 466f800000010000000200000f646576726965736b6f7a696a6e656e026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c034 36049 b75342bc50104462de370000000000000000 b753c2b40000000000000000 36050 93a100000001000000000000057072697a65026e6c00000f0001 93a180000001000000020000057072697a65026e6c00000f0001c00c0002000100015180001404646e733106706f7074656c036f726702756b00c00c0002000100015180000704646e7332c02b 36051 b7549d5b501040b0aac40000000000000000 36052 b754104e50114462e7f50000000000000000 b75490440000000000000000 36053 0cb9000000010000000000000670696b616e74026e6c00001c0001 0cb9800000010000000200020670696b616e74026e6c00001c0001c00c0002000100015180000c04646e73310470696e73c013c00c0002000100015180000704646e7332c02cc02700010001000151800004d9c26101c03f00010001000151800004d9c26002 36054 5f8d00000001000000000000074c4f43485437370544454d4f4e024e4c00000f0001 5f8d80000001000000030002074c4f43485437370544454d4f4e024e4c00000f0001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c0140002000100015180000f036e73320564656d6f6e036e657400c02e00010001000151800004c29f4906c04000010001000151800004c29fb004 36055 b7549d5b501840b095820000008c16ee000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afaea403c4c6a00030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000 36056 00000000700240005e4c0000020405b401010402 000080010000000000000000 36057 9a920000000100000000000003777777087465636f74726f6e026e6c0000010001 9a928000000100000003000303777777087465636f74726f6e026e6c0000010001c0100002000100015180000e046865726101780463756369c019c0100002000100015180000c066865726d6573026e6cc034c01000020001000151800009066865726d6573c032c02d00010001000151800004d47d8001c04700010001000151800004c143ef02c05f00010001000151800004d47d8002 36058 b93c0000000100000000000003777777086f76657268656964026e6c0000010001 b93c8000000100000003000303777777086f76657268656964026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 36059 bbbb000000010000000000000b73656c662d696e6a757279026e6c0000010001 bbbb800000010000000300000b73656c662d696e6a757279026e6c0000010001c00c00020001000151800017076e73686f73743103737432056c79636575036e657400c00c0002000100015180000a076e73686f737432c034c00c0002000100015180000a076e73686f737433c034 36060 b7549d69501140a2aa350000000000000000 36061 b754104f50104462e7f40000000000000000 b75490440000000000000000 36062 b755265350104470a8e70000000000000000 b755a6530000000000000000 36063 000000007002400038b600000204056401010402 000080010000000000000000 36064 b7552653501844702017000000967da8000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd07403c4e870003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000 b755a6530000000000000000 36065 1c9a0000000100000000000009652d6c756e61746963026e6c0000010001 1c9a8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36066 352400000001000000000000027463036164730974656c656772616166026e6c0000010001 352480000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 36067 676c000000010000000000000e7365727665722d6e61617264656e0c76657273616e61617264656e026e6c0000060001 676c840300010000000100000e7365727665722d6e61617264656e0c76657273616e61617264656e026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 36068 46ad00000001000000000000046d61696c0b6466647373656177617973026e6c0000010001 46ad80000001000000020000046d61696c0b6466647373656177617973026e6c0000010001c0110002000100015180001707617574686e73310a776562706172746e657202646b00c0110002000100015180000a07617574686e7332c039 36069 89810000000100000000000003686873026e6c0000010001 89818000000100000003000303686873026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000e036e733107737572666e6574c010c0240001000100015180000491340205c0360001000100015180000491340206c04800010001000151800004c0576a65 36070 b36f00000001000000000000036e73330761737034616c6c026e6c00001c0001 b36f80000001000000030003036e73330761737034616c6c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc00c00010001000151800004c1ac0bae 36071 311200000001000000000000036e73330761737034616c6c026e6c0000260001 311280000001000000030003036e73330761737034616c6c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc00c00010001000151800004c1ac0bae 36072 747900000001000000000000036e73310761737034616c6c026e6c00001c0001 747980000001000000030003036e73310761737034616c6c026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c1adf9c3c03a000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 36073 085400000001000000000000036e73310761737034616c6c026e6c0000260001 085480000001000000030003036e73310761737034616c6c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c1adf9c3c03a000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 36074 434b00000001000000000000036e73320761737034616c6c026e6c00001c0001 434b80000001000000030003036e73320761737034616c6c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c00c000100010001518000043e70ec3cc04c00010001000151800004c1ac0bae 36075 b7549d6a501040a2aa340000000000000000 36076 1c3500000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 1c3580000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 36077 e1fe00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 e1fe80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 36078 3e4d00000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 3e4d80000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 36079 e70f00000001000000000000036e7332056132303030026e6c0000010001 e70f80000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 36080 b75604ad501040b0a8660000000000000000 b75680010000000000000000 36081 066600000001000000000000036e7332056132303030026e6c0000260001 066680000001000000030002036e7332056132303030026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 36082 b75604ad501840b03fd70000008c6b3c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afaea403c4c6a00030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000 b75680010000000000000000 36083 b755266150114462a84e0000000000000000 b755a6630000000000000000 36084 c0020000000100000000000003706f70076569646f6c6f6e026e6c0000010001 c0028000000100000002000203706f70076569646f6c6f6e026e6c0000010001c01000020001000151800009036e7331026973c018c01000020001000151800006036e7332c030c02c00010001000151800004d5852102c04100010001000151800004d5c41503 36085 c6b60000000100000000000009706172616469676974026e6c00000f0001 c6b68000000100000002000009706172616469676974026e6c00000f0001c00c00020001000151800010026e73076e65737363697303636f6d00c00c00020001000151800006036e7332c02d 36086 1eda000000010000000000000e7372617464303031646d7a666e3103726463026e6c0000010001 1eda800000010000000200020e7372617464303031646d7a666e3103726463026e6c0000010001c01b000200010001518000100d7372726463303134646d7a3034c01bc01b000200010001518000100d7372726463303132646d7a3033c01bc03300010001000151800004d973e064c04f00010001000151800004d973e054 36087 5c9d00000001000000000000066a77626f6f6e026e6c00000f0001 5c9d80000001000000030002066a77626f6f6e026e6c00000f0001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 36088 b755266250104462a84d0000000000000000 b755a6630000000000000000 36089 39bc000000010000000000000377777709736578687569736a65026e6c0000010001 39bc800000010000000300000377777709736578687569736a65026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036c0100002000100015180000a076e73686f737433c036 36090 492300000001000000000000037777770864652d706172656c026e6c0000010001 492380000001000000020000037777770864652d706172656c026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 36091 b75604bb501140a2a7d70000000000000000 b75680010000000000000000 36092 00000000700240003d8b00000204056401010402 000080010000000000000000 36093 35250000000100000000000004777777320974656c656772616166026e6c0000010001 35258000000100000002000004777777320974656c656772616166026e6c0000010001c01100020001000151800013036e73300974656c656772616166036e657400c01100020001000151800006036e7331c033 36094 1b5600000001000000000000036e73340767617574656e67026e6c0000010001 1b5680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36095 50ff000000010000000000000377777707636f6e74656e74026e6c0000010001 50ff800000010000000200000377777707636f6e74656e74026e6c0000010001c01000020001000151800016046e7330310b63726579667367726f757003636f6d00c01000020001000151800007046e733032c031 36096 3f2b0000000100000000000005656d61696c036c656b026e6c0000010001 3f2b8000000100000002000005656d61696c036c656b026e6c0000010001c01200020001000151800014036e73310a676c617373686f757365036e657400c01200020001000151800006036e7332c02e 36097 b75604bc501040a2a7d60000000000000000 b75680010000000000000000 36098 67cc00000001000000000000066b6c6f6d7073026e6c0000010001 67cc80000001000000020002066b6c6f6d7073026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 36099 b756ec01501040b0c5e60000000000000000 36100 a8d9000000010000000000000a6c69636874696e673938026e6c0000020001 a8d9800000010000000200020a6c69636874696e673938026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 36101 1cd000000001000000000000036e733208696e74726f776562024e4c0000010001 1cd080000001000000020002036e733208696e74726f776562024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 36102 b756ec01501840b069190000008c5f7a000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afaea403c4c6a00030000002d4e544c4d535350000100000097b200c007000700260000000600060020000000534552564552525542594445430000 36103 05dd00100001000000000001036e733109756e69736f75726365026e6c00000100010000290800000000000000 05dd80000001000000020001036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 36104 e09c00000001000000000000037777770474757361026e6c0000010001 e09c80000001000000020002037777770474757361026e6c0000010001c0100002000100015180000e07646e732d70726903626f78c015c0100002000100015180000a07646e732d736563c031c02900010001000151800004d97700fac04300010001000151800004d97704fa 36105 481500000001000000000000087265697374697073026e6c00000f0001 481580000001000000020002087265697374697073026e6c00000f0001c00c0002000100015180000c036e7331056773696e74c015c00c00020001000151800006036e7332c02dc02900010001000151800004510473b4c04100010001000151800004510473b5 36106 917000000001000000000000055f6c646170045f7463701244656661756c742d46697273742d53697465065f73697465730668656465666106686564656661026e6c0000060001 917084030001000000010000055f6c646170045f7463701244656661756c742d46697273742d53697465065f73697465730668656465666106686564656661026e6c0000060001c03f00060001000038400036026e730f646f6d61696e2d7265676973747279c03f0a686f73746d6173746572c0560bf1e540000070800000384000278d0000003840 36107 3d3e0000000100000000000009652d6c756e61746963026e6c0000010001 3d3e8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36108 26a30000000100000000000003777777177665726865696a656e62656472696a6673776167656e73026e6c0000010001 26a38000000100000002000003777777177665726865696a656e62656472696a6673776167656e73026e6c0000010001c01000020001000151800013056175746f310a747265666e6574646e73c028c01000020001000151800006036e7331c042 36109 0efd000000010000000000000a7377697463686a6f6273026e6c00000f0001 0efd800000010000000200020a7377697463686a6f6273026e6c00000f0001c00c00020001000151800009036e7331026973c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d5852102c04000010001000151800004d5c41503 36110 3f6100000001000000000000044e545331063139594f3030024e4c0000060001 3f6184030001000000010000044e545331063139594f3030024e4c0000060001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 36111 5ede000000010000000000000377777710647265616d626f7873657474696e6773026e6c0000010001 5ede800000010000000200020377777710647265616d626f7873657474696e6773026e6c0000010001c0100002000100015180000c036e733105622d632d73c021c01000020001000151800006036e7332c039c03500010001000151800004d5ce4bbfc04d00010001000151800004507e8372 36112 2b900000000100000000000008686f73746e616d650462696e640000100003 2b908000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 36113 843f0000000100000000000003777777056a61676572026e6c0000010001 843f8000000100000002000203777777056a61676572026e6c0000010001c0100002000100015180000c046e7330310462696374c016c01000020001000151800007046e733032c02fc02a00010001000151800004d413d6c8c04200010001000151800004d413d604 36114 087200000001000000000000026e730763697374726f6e026e6c0000010001 087280000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 36115 820600000001000000000000036e73320763697374726f6e026e6c0000010001 820680000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 36116 b756ec0f501140a2c5570000000000000000 36117 584c0000000100000000000004777777310a62616e6e6572746a6573026e6c0000010001 584c8000000100000002000004777777310a62616e6e6572746a6573026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c033 36118 ee6c00000001000000000000037777770b6f6e646572746974656c73026e6c0000010001 ee6c80000001000000020000037777770b6f6e646572746974656c73026e6c0000010001c0100002000100015180000c026e7306766576696461c01cc01000020001000151800006036e7332c033 36119 4e5128000001000000010000026e6c0000060001055f6c646170045f7463701244656661756c742d46697273742d53697465065f73697465730668656465666106686564656661026e6c000021000100000258001f000000640185066d617263656c0668656465666106686564656661026e6c00 4e51a8040000000000000000 36120 9fad00000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 9fad80000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 36121 657200000001000000000000077072757661746f026e6c00000f0001 657280000001000000020002077072757661746f026e6c00000f0001c00c0002000100015180000d04646e733205692d702d64c014c00c0002000100015180000704646e7331c02dc02800010001000151800004d9124104c04100010001000151800004d9124003 36122 21d300000001000000000000026e73057972616d73026e6c0000010001 21d380000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 36123 47110000000100000000000004706f726e026e6c0000010001 47118000000100000002000004706f726e026e6c0000010001c00c00020001000151800010036e73610674696e74656c03636f6d00c00c00020001000151800006036e7362c029 36124 91a100000001000000000000036e7331056861636f6d026e6c0000010001 91a180000001000000020002036e7331056861636f6d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4f12209c03800010001000151800004d590f009 36125 91a200000001000000000000036e7332056861636f6d026e6c0000010001 91a280000001000000020002036e7332056861636f6d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d4f12209c00c00010001000151800004d590f009 36126 542a0000000100000000000005646e732d32056c61646f74026e6c0000010001 542a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36127 3fc00000000100000000000106776468303131066e7434616c6c026e6c00000100010000290500000000000000 3fc08000000100000002000306776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d09630000291000000000000000 36128 b756ec10501040a2c5560000000000000000 36129 641e00100001000000000001086d6972726f72656407666c6162626572026e6c00000100010000290800000080000000 641e80000001000000030003086d6972726f72656407666c6162626572026e6c0000010001c0150002000100015180000d036e733106776964657873c01dc01500020001000151800010036e733206776964657873036e657400c01500020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa07030000291000000000000000 36130 567800000001000000000000036e747006787334616c6c026e6c0000010001 567880000001000000030002036e747006787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 36131 ef6c000000010000000000000776657268616172026e6c00000f0001 ef6c800000010000000200020776657268616172026e6c00000f0001c00c00020001000151800010036e7331096d6173746572646e73c014c00c00020001000151800006036e7332c02cc028000100010001518000045054f347c044000100010001518000043e94a047 36132 00000000700240005c4d00000204059801010402 000080010000000000000000 36133 3fc00000000100000000000006776468303131066e7434616c6c026e6c0000010001 3fc08000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 36134 d5030000000100000000000006636861726973026e6c00000f0001 d5038000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 36135 9eaf00000001000000000000026e73057972616d73026e6c0000010001 9eaf80000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 36136 b757c385501043200ae80000000000000000 36137 4330000000010000000000000377777707616b7269646573026e6c0000010001 4330800000010000000200020377777707616b7269646573026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c018c01000020001000151800006036e7332c02fc02c0001000100015180000450474002c04a0001000100015180000450474102 36138 b757c3855018432080320000008b0bc0000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 36139 4eae0000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4eae8403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 36140 152a00000001000000000000036d78310a646168686f7374696e67026e6c0000010001 152a80000001000000020002036d78310a646168686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02f000100010001518000045104430bc0410001000100015180000451044316 36141 7b39000000010000000000000366726703657572026e6c0000010001 7b39800000010000000200020366726703657572026e6c0000010001c0100002000100015180000b086d61696c67617465c010c0100002000100015180000906706f70657965c010c0280001000100015180000482730101c03f0001000100015180000482730f02 36142 586c00000001000000000000037777770661746b696e73026e6c0000010001 586c80000001000000020002037777770661746b696e73026e6c0000010001c01000020001000151800011036e73310a61637469766576696577c017c01000020001000151800006036e7333c02fc02b00010001000151800004c2b2a022c04800010001000151800004d554e5c2 36143 87f70000000100000000000009696e686f6c6c616e64026e6c00000f0001 87f78000000100000002000209696e686f6c6c616e64026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c2ab230bc03c00010001000151800004c0576a65 36144 2174000000010000000000000377777704756e6978026e6c0000010001 2174800000010000000200020377777704756e6978026e6c0000010001c0100002000100015180000b026e7305686f626279c015c01000020001000151800006036e7332c02cc02900010001000151800004d448e008c04000010001000151800004d448e009 36145 bb9500000001000000000000036d78300774697363616c69026e6c0000010001 bb9580000001000000030002036d78300774697363616c69026e6c0000010001c0100002000100015180000704616e7331c010c0100002000100015180000704616e7332c010c0100002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c03f00010001000151800004c3f13325 36146 b757c393501143120a5a0000000000000000 36147 0000000070024000908b00000204059801010402 000080010000000000000000 36148 8c610000000100000000000003777777066c6578696f6e026e6c0000010001 8c618000000100000003000103777777066c6578696f6e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 36149 937e0000000100000000000006616e616e6b6503687361026e6c0000010001 937e8000000100000002000206616e616e6b6503687361026e6c0000010001c01300020001000151800008056d65746973c013c0130002000100015180000e036e733107737572666e6574c017c02b00010001000151800004c2ab1311c03f00010001000151800004c0576a65 36150 3c0600000001000000000000036e7331066e6c74726565026e6c0000010001 3c0680000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 36151 b757c394501043120a590000000000000000 36152 b75a5de550104320a4c30000000000000000 b75adde40000000000000000 36153 3e3e0000000100000000000003777777076172746875726f026e6c0000010001 3e3e8000000100000002000203777777076172746875726f026e6c0000010001c0100002000100015180000f026e7309656174736572766572c018c01000020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 36154 b75a5de550184320cace0000008b5c00000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 b75adde40000000000000000 36155 90730000000100000000000003777777056a65656e65026e6c0000010001 90738000000100000002000003777777056a65656e65026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c016c0100002000100015180000704686e7331c02f 36156 b74cd3ae5010446216800000000000000000 36157 b7529bd750104470fca60000000000000000 36158 136000000001000000000000066275696b6573026e6c00000f0001 136080000001000000020000066275696b6573026e6c00000f0001c00c00020001000151800014026e730b6578706c61696e65726463036e657400c00c0002000100015180000d026e73056132303030026e7500 36159 dd1400000001000000000000036e733109756e69736f75726365026e6c0000010001 dd1480000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 36160 b7529bd750184470c07c000000968014000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe19403c4f990003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000 36161 b75a5df350114312a4350000000000000000 b75addf40000000000000000 36162 623b000000010000000000000c626f736368726578726f7468026e6c00000f0001 623b800000010000000200000c626f736368726578726f7468026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 36163 0000000070024000539000000204059801010402 000080010000000000000000 36164 90a900000001000000000000036e733104686f6d65026e6c0000010001 90a980000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 36165 8bf10000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 8bf18000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 36166 9cc600000001000000000000037a6e62026e6c0000010001 9cc680000001000000020000037a6e62026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c02f 36167 ec9b0000000100000000000003777777046e76686e026e6c0000010001 ec9b8000000100000003000303777777046e76686e026e6c0000010001c0100002000100015180000e076e73617574683103626974c015c0100002000100015180000a076e736175746832c031c0100002000100015180000a076e736175746833c031c02900010001000151800004d5880c33c04300010001000151800004d5880c3bc05900010001000151800004d4ccc00b 36168 eac500000001000000000000056d6572656c096873686161726c656d026e6c0000010001 eac580000001000000020002056d6572656c096873686161726c656d026e6c0000010001c01200020001000151800002c00cc0120002000100015180000e036e733107737572666e6574c01cc00c00010001000151800004914b4bebc03e00010001000151800004c0576a65 36169 b75a5df450104312a4340000000000000000 b75addf40000000000000000 36170 b75b2958501043209c540000000000000000 b75ba9540000000000000000 36171 741f00000001000000000000037777770a64757175617274696572026e6c0000010001 741f80000001000000030000037777770a64757175617274696572026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c037c0100002000100015180000a076e73686f737433c037 36172 dc4800000001000000000000037777770a686574206b6f6e696a6e026e6c0000010001 dc4884030001000000010000037777770a686574206b6f6e696a6e026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 36173 b75b29585018432011e00000008b0c80000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 b75ba9540000000000000000 36174 181028000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657309534348446f6d61696e026e6c000021000100000258001f0000006401850a736f736572766572303209534348446f6d61696e026e6c00 1810a8040000000000000000 36175 45990000000100000000000006747765657479026e6c00000f0001 45998000000100000002000006747765657479026e6c00000f0001c00c0002000100015180000c036e723405692d702d64c013c00c00020001000151800006036e7236c02b 36176 d53d00000001000000000000037777770c7472656b706c657369746572026e6c0000010001 d53d84030001000000010000037777770c7472656b706c657369746572026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 36177 b75b2966501143129bc60000000000000000 b75ba9640000000000000000 36178 42f4000000010000000000000b70697363756c656e746973026e6c00000f0001 42f4800000010000000300010b70697363756c656e746973026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc018c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ac02c000100010001518000043efa0202 36179 250000000001000000000000036e733208696e74726f776562024e4c0000010001 250080000001000000020002036e733208696e74726f776562024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 36180 f828000000010000000000000d6d6173746572736174776f726b026e6c00000f0001 f828800000010000000200020d6d6173746572736174776f726b026e6c00000f0001c00c0002000100015180000f036e7331086261726d61746f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004d5a0da96c04900010001000151800004d5a0da64 36181 b75b2967501043129bc50000000000000000 b75ba9640000000000000000 36182 807100000001000000000000037777770b6765696c6f6d6161746a65026e6c0000010001 807180000001000000020002037777770b6765696c6f6d6161746a65026e6c0000010001c0100002000100015180000d036e7331063234686f7374c01cc01000020001000151800006036e7332c034c03000010001000151800004d5efb10cc04900010001000151800004d5efb10d 36183 fac2000000010000000000000377777712766f6f72616c6c657665696c696768656964026e6c0000010001 fac2800000010000000200000377777712766f6f72616c6c657665696c696768656964026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c03a 36184 f0360000000100000000000003777777056974616273026e6c0000010001 f0368000000100000002000203777777056974616273026e6c0000010001c01000020001000151800011046e73303109696e74656e74696f6ec016c01000020001000151800007046e733032c02fc02a00010001000151800004d943eb02c04700010001000151800004d943eb03 36185 9eb400000001000000000000026e73057972616d73026e6c0000010001 9eb480000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 36186 e3ca0000000100000000000004616e73310774697363616c69026e6c0000010001 e3ca8000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 36187 90d300000001000000000000036e7332086865696a6d616e73026e6c0000010001 90d380000001000000020002036e7332086865696a6d616e73026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000b086578686175737432c010c02d00010001000151800004c1ad9303c03f00010001000151800004d47b0e91 36188 643d00000001000000000000036e733404686f6d65026e6c0000010001 643d80000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 36189 643e00000001000000000000036e733104686f6d65026e6c0000010001 643e80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 36190 8d4300000001000000000000026e73076e656473746174026e6c0000010001 8d4380000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 36191 66c900000001000000000000037777770a636f6d65647962616e64026e6c0000010001 66c980000001000000020000037777770a636f6d65647962616e64026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01bc0100002000100015180000805646e732d32c035 36192 643f00000001000000000000036e733204686f6d65026e6c0000010001 643f80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 36193 644000000001000000000000036e733304686f6d65026e6c0000010001 644080000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 36194 a0cf000000010000000000000377777706666f6b73756b026e6c0000010001 a0cf800000010000000200020377777706666f6b73756b026e6c0000010001c0100002000100015180000a036e733103677673c017c01000020001000151800006036e7332c02fc02b000100010001518000045054e1aac04100010001000151800004d4ccc646 36195 cd3900000001000000000000046e733032066368656c6c6f026e6c0000010001 cd3980000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 36196 4e5428000001000000010000026e6c0000060001055f6c646170045f7463701244656661756c742d46697273742d53697465065f7369746573026763065f6d736463730668656465666106686564656661026e6c000021000100000258001f000000640cc4066d617263656c0668656465666106686564656661026e6c00 4e54a8040000000000000000 36197 9a6100000001000000000000036e733103757063026e6c0000010001 9a6180000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 36198 7a8b00000001000000000000046e733031066368656c6c6f026e6c0000010001 7a8b80000001000000030003046e733031066368656c6c6f026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c00c00010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 36199 230900000001000000000000036e733107737572666e6574026e6c0000010001 230980000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 36200 887c000000010000000000000377777711636f6e74696e656e74616c7061726b656e026e6c0000010001 887c800000010000000200020377777711636f6e74696e656e74616c7061726b656e026e6c0000010001c0100002000100015180000f036e7331086974736c6f676963c022c0100002000100015180000e026e7308646961706c617a61c022c03600010001000151800004d59ae111c05100010001000151800004c2a54621 36201 c1cd000000010000000000000469632d73026e6c00001c0001 c1cd800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 36202 288e00000001000000000000037777771074696d6d65726d616e73746f6666656e026e6c0000010001 288e80000001000000020002037777771074696d6d65726d616e73746f6666656e026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec021c01000020001000151800006036e7332c039c03500010001000151800004c29f4906c04d00010001000151800004c29fb004 36203 0000000070024000fcd600000204059801010402 000080010000000000000000 36204 b75bfc9650104320725c0000000000000000 36205 6849000000010000000000000f68657576656c7765726b656e64616d026e6c0000010001 6849800000010000000200020f68657576656c7765726b656e64616d026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01cc00c00020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 36206 b75bfc965018432095e60000008b5d80000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 36207 653600000001000000000000047362706e026e6c00000f0001 653680000001000000020002047362706e026e6c00000f0001c00c0002000100015180000b026e73057069776562c011c00c00020001000151800011036e73330a74727565736572766572c011c02500010001000151800004d5efb23dc03c00010001000151800004d5ef8005 36208 55fb001000010000000000010377777707747067706f7374026e6c00000100010000290800000080000000 55fb800000010000000200030377777707747067706f7374026e6c0000010001c0100002000100015180000e036e733207737570706f7274c018c01000020001000151800006036e7334c030c02c00010001000151800004c372e7c8c04600010001000151800004c372e6fe0000291000000000000000 36209 98f3000000010000000000000377777707747067706f7374026e6c0000010001 98f3800000010000000200020377777707747067706f7374026e6c0000010001c0100002000100015180000e036e733207737570706f7274c018c01000020001000151800006036e7334c030c02c00010001000151800004c372e7c8c04600010001000151800004c372e6fe 36210 299400000001000000000000056132303030026e6c0000ff0001 299480000001000000030002056132303030026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e733109756e69736f75726365c012c00c00020001000151800006036e7332c00cc026000100010001518000043e6c0141c054000100010001518000043e6c0142 36211 b67a00000001000000000000046f73707402637407757477656e7465026e6c0000010001 b67a80000001000000030003046f73707402637407757477656e7465026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c01400020001000151800006036e7333c014c0300001000100015180000482590102c0420001000100015180000482590103c05400010001000151800004c0571113 36212 140f000000010000000000000377777703736578026e6c0000010001 140f800000010000000300010377777703736578026e6c0000010001c0100002000100015180000e026e7308767575727765726bc014c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c046c028000100010001518000043efa0202 36213 b8fa00100001000000000000037777770974656c656772616166026e6c0000010001 b8fa80000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 36214 727800000001000000000000036e7331057661786f6e026e6c00001c0001 727880000001000000020002036e7331057661786f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e291af0c038000100010001518000043e291af1 36215 34b400000001000000000000036e7331057661786f6e026e6c0000260001 34b480000001000000020002036e7331057661786f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e291af0c038000100010001518000043e291af1 36216 5a8700000001000000000000036e7332057661786f6e026e6c00001c0001 5a8780000001000000020002036e7332057661786f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000043e291af0c00c000100010001518000043e291af1 36217 796200000001000000000000036e7332057661786f6e026e6c0000260001 796280000001000000020002036e7332057661786f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000043e291af0c00c000100010001518000043e291af1 36218 b75bfca45011431271ce0000000000000000 36219 a28d00000001000000000000036e733109756e69736f75726365026e6c0000010001 a28d80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 36220 00000000700240005ff400000204059801010402 000080010000000000000000 36221 516000100001000000000001026e730763616d70696e61026e6c00000100010000290800000000000000 516080000001000000020003026e730763616d70696e61026e6c0000010001c00f0002000100015180000e036e733007656173796e6574c017c00f00020001000151800006036e7331c02fc02b00010001000151800004c2a55e01c04500010001000151800004c2a55e050000291000000000000000 36222 8bce000000010000000000000a6c69636874706c65696e026e6c0000020001 8bce800000010000000200020a6c69636874706c65696e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 36223 a51b0000000100000000000005666f72756d09617a616c6b6d616172026e6c0000010001 a51b8000000100000002000205666f72756d09617a616c6b6d616172026e6c0000010001c01200020001000151800012036e73310b737461727464657369676ec01cc01200020001000151800006036e7332c034c03000010001000151800004d5f73823c04e000100010001518000043ed45149 36224 955d000000010000000000000a766973696f6e6c696e65026e6c00000f0001 955d800000010000000200000a766973696f6e6c696e65026e6c00000f0001c00c00020001000151800011036e73310a6d61696e736572766572c017c00c00020001000151800006036e7332c02f 36225 4f4d000000010000000000000973706f727463756c74026e6c0000010001 4f4d800000010000000300000973706f727463756c74026e6c0000010001c00c00020001000151800019036e73310f613475776562736f6c7574696f6e73036e657400c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02e 36226 b75bfca55010431271cd0000000000000000 36227 b75c9580501043203c8f0000000000000000 36228 b75c958050184320b09a0000008b0e00000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb43403c4cc300030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 36229 3a9e0000000100000000000003706f700f6d6f6c656e626572672d726570726f026e6c0000010001 3a9e8000000100000002000203706f700f6d6f6c656e626572672d726570726f026e6c0000010001c0100002000100015180000d026e7307646f7473706f74c020c01000020001000151800006036e7373c037c034000100010001518000043eb1d102c04d000100010001518000043eb1d104 36230 e367000000010000000000000377777705626f6f676f026e6c0000010001 e367800000010000000300020377777705626f6f676f026e6c0000010001c0100002000100015180000d036e733106776964657873c016c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 36231 204a000000010000000000000d706f656c6c766470757474656e026e6c0000010001 204a800000010000000200010d706f656c6c766470757474656e026e6c0000010001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c01ac04700010001000151800004c2860043 36232 86ea00000001000000000000037777770761767374616765026e6c0000010001 86ea80000001000000020000037777770761767374616765026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 36233 55cc28000001000000010000026e6c0000060001026763065f6d736463730664796e736f6c026e6c00000100010000025800040a000002 55cca8040000000000000000 36234 375528000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573076d6b626164616d026e6c000021000100000258001900000064018506736572766572076d6b626164616d026e6c00 3755a8040000000000000000 36235 b75c958e501143123c010000000000000000 36236 00000000700240007c5400000204059801010402 000080010000000000000000 36237 0000000070024000c5670000020405b401010402 000080010000000000000000 36238 57f900000001000000000000026e73066863636e6574026e6c0000010001 57f980000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 36239 8a5200000001000000000000026e73066863636e6574026e6c0000260001 8a5280000001000000020000026e73066863636e6574026e6c0000260001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 36240 b75e3db250104470f89a0000000000000000 b75ebdb40000000000000000 36241 9eba00000001000000000000026e73057972616d73026e6c0000010001 9eba80000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 36242 b1170000000100000000000003706f70066a6a666f746f026e6c00001c0001 b1178000000100000003000203706f70066a6a666f746f026e6c00001c0001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 36243 b75e3db2501844700e7f0000008c90b3000000010001000000000f313039393531313632373739342d330000f900010f313039393531313632373739342d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc24403c4da400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000 b75ebdb40000000000000000 36244 000000007002400070f40000020405b401010402 000080010000000000000000 36245 cd490000000100000000000003706f70066a6a666f746f026e6c0000260001 cd498000000100000003000203706f70066a6a666f746f026e6c0000260001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 36246 b75c958f501043123c000000000000000000 36247 143700000001000000000000026e730763616d70696e61026e6c0000010001 143780000001000000020002026e730763616d70696e61026e6c0000010001c00f0002000100015180000e036e733007656173796e6574c017c00f00020001000151800006036e7331c02fc02b00010001000151800004c2a55e01c04500010001000151800004c2a55e05 36248 b75d4d2450104320a14a0000000000000000 b75dcd240000000000000000 36249 2ee6000000010000000000000a6c696368747374656c74026e6c0000020001 2ee6800000010000000200020a6c696368747374656c74026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 36250 b75e3dc050114462f80b0000000000000000 b75ebdc40000000000000000 36251 c16d0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c16d8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36252 b75d4d2450184320c9150000008b5840000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 b75dcd240000000000000000 36253 0000000070024000e0850000020405b401010402 000080010000000000000000 36254 b75e3dc150104462f80a0000000000000000 b75ebdc40000000000000000 36255 886a00000001000000000000036e733503777873026e6c0000010001 886a80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 36256 b75f940b50104470bd5e0000000000000000 36257 b75ecb745010447016650000000000000000 36258 b75f940b501844701be40000008c4913000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc24403c4da400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000 36259 b75d4d3250114312a0bc0000000000000000 b75dcd340000000000000000 36260 b75f941950114462bccf0000000000000000 36261 000000007002400051fa0000020405b401010402 000080010000000000000000 36262 b75f941a50104462bcce0000000000000000 36263 366f0000000100000000000003777777176865726d616e6e77657373656c696e6b636f6c6c656765026e6c0000010001 366f8000000100000003000103777777176865726d616e6e77657373656c696e6b636f6c6c656765026e6c0000010001c0100002000100015180000e026e7308767575727765726bc028c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c05ac03c000100010001518000043efa0202 36264 b7604675501044707c680000000000000000 b760c6740000000000000000 36265 b75ecb7450184470e98f0000008fa200000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdd3403c4f530003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000 36266 b760467550184470bc800000008c6780000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc24403c4da400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000 b760c6740000000000000000 36267 16c3000000010000000000000d68696c6c656e2d726f6f73656e026e6c0000010001 16c3800000010000000200020d68696c6c656e2d726f6f73656e026e6c0000010001c00c00020001000151800011036e73310a646e7373657276657273c01ac00c00020001000151800006036e7332c032c02e000100010001518000045054ed14c04b00010001000151800004d5f72f14 36268 b75d4d3350104312a0bb0000000000000000 b75dcd340000000000000000 36269 648800000001000000000000037777770b6d6172656d617269656b65026e6c0000010001 648880000001000000020000037777770b6d6172656d617269656b65026e6c0000010001c01000020001000151800014036e73350a78736e6574776f726b73036e657400c01000020001000151800006036e7332c034 36270 b7604683501144627bd90000000000000000 b760c6840000000000000000 36271 293600000001000000000000037777771264652d776f6e696e67737469636874696e67026e6c0000010001 293680000001000000020002037777771264652d776f6e696e67737469636874696e67026e6c0000010001c0100002000100015180000c026e7306787334616c6cc023c01000020001000151800006036e7332c03ac03700010001000151800004c26d0642c04f00010001000151800004c26d0963 36272 91c7000000010000000000000377777706677777776562026e6c0000010001 91c7800000010000000200000377777706677777776562026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c02e 36273 a533000000010000000000000c626c616e6b736d61626f7577026e6c0000010001 a533800000010000000300010c626c616e6b736d61626f7577026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc019c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04bc02d000100010001518000043efa0202 36274 b7604684501044627bd80000000000000000 b760c6840000000000000000 36275 b75ecb825011446215d30000000000000000 36276 4e5728000001000000010000026e6c0000060001095f6b65726265726f73045f7463701244656661756c742d46697273742d53697465065f7369746573026463065f6d736463730668656465666106686564656661026e6c000021000100000258001f000000640058066d617263656c0668656465666106686564656661026e6c00 4e57a8040000000000000000 36277 00000000700240005d5e0000020405b401010402 000080010000000000000000 36278 113f00000001000000000000086265686565726477066e7434616c6c026e6c0000010001 113f80000001000000020002086265686565726477066e7434616c6c026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000d036e733206787334616c6cc01cc03000010001000151800004c26d3402c04100010001000151800004c26d0963 36279 b75ecb835010446215d20000000000000000 36280 b7630c6050104470c1de0000000000000000 b7638c640000000000000000 36281 0000000070024000829700000204059801010402 000080010000000000000000 36282 b7529be550114462fc0d0000000000000000 36283 1000000000010000000000000762616e6e65727303696d73026e6c0000010001 1000800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 36284 b763eae35010432009c80000000000000000 36285 b7630c60501844703d0a0000008ffb00000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdd3403c4f530003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000 b7638c640000000000000000 36286 b763eae3501843202fd20000008b5900000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 36287 1f3100000001000000000000036e73310e726567696f70726f766964657273026e6c0000010001 1f3180000001000000020002036e73310e726567696f70726f766964657273026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d41da001c04100010001000151800004d41da1fe 36288 94d400000001000000000000036e73320e726567696f70726f766964657273026e6c0000010001 94d480000001000000020002036e73320e726567696f70726f766964657273026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03300010001000151800004d41da001c00c00010001000151800004d41da1fe 36289 b20f00000001000000000000086d6972726f72656407666c6162626572026e6c0000010001 b20f80000001000000030002086d6972726f72656407666c6162626572026e6c0000010001c0150002000100015180000d036e733106776964657873c01dc01500020001000151800010036e733206776964657873036e657400c01500020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 36290 4009000000010000000000000377777708706f6d70696e666f026e6c0000010001 4009800000010000000200020377777708706f6d70696e666f026e6c0000010001c01000020001000151800010036e73310966697265776f726b32c019c01000020001000151800006036e7332c031c02d00010001000151800004d5f4b8d3c04900010001000151800004d5f4b9d3 36291 b7630c6e50114462c14c0000000000000000 b7638c640000000000000000 36292 c0fa00000001000000000000076578747265656d077765622d6c6f67026e6c0000010001 c0fa80000001000000030003076578747265656d077765622d6c6f67026e6c0000010001c0140002000100015180000b036e733104696c7365c01cc01400020001000151800006036e7332c034c01400020001000151800006036e7333c034c030000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 36293 b763eaf150114312093a0000000000000000 36294 000000007002400073a600000204059801010402 000080010000000000000000 36295 000000007002400026de0000020405b401010402 000080010000000000000000 36296 ae4200000001000000000000035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730744454d414c4d31026e6c0000060001 ae4284030001000000010000035f6763045f746370155374616e64616172642d6565727374652d73697465065f73697465730744454d414c4d31026e6c0000060001c03a00060001000038400036026e730f646f6d61696e2d7265676973747279c03a0a686f73746d6173746572c0510bf1e540000070800000384000278d0000003840 36297 b7630c6f50104462c14b0000000000000000 b7638c640000000000000000 36298 0a28000000010000000000000d68696c6c656e2d726f6f73656e026e6c0000010001 0a28800000010000000200020d68696c6c656e2d726f6f73656e026e6c0000010001c00c00020001000151800011036e73310a646e7373657276657273c01ac00c00020001000151800006036e7332c032c02e000100010001518000045054ed14c04b00010001000151800004d5f72f14 36299 b763eaf25010431209390000000000000000 36300 b765999a50104470fe210000000000000000 36301 b764c59f50104320201a0000000000000000 36302 22d400000001000000000000046e733032066368656c6c6f026e6c0000010001 22d480000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 36303 8cc6000000010000000000000c626c616e6b736d61626f7577026e6c0000010001 8cc6800000010000000300010c626c616e6b736d61626f7577026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc019c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04bc02d000100010001518000043efa0202 36304 b764c59f501843209aa50000008b0580000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 36305 08a7000000010000000000000a6b7569706572626f7577026e6c0000010001 08a7800000010000000200020a6b7569706572626f7577026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 36306 2b660000000100000000000009706c6567742d766f73026e6c0000010001 2b668000000100000002000009706c6567742d766f73026e6c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02e 36307 2a05000000010000000000000e6669613232302d3132382d3130300364736c086d78706f73757265026e6c0000010001 2a05800000010000000200000e6669613232302d3132382d3130300364736c086d78706f73757265026e6c0000010001c01f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c01f0002000100015180000906617574683230c043 36308 81e5000000010000000000010a6970353033636339343605737065656406706c616e6574026e6c00000f00010000291000000000000000 81e5800000010000000300040a6970353033636339343605737065656406706c616e6574026e6c00000f0001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a650000291000000000000000 36309 b765999a50184470204e0000008f5400000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdd3403c4f530003000000304e544c4d535350000100000097b200c0060006002a0000000a000a00200000004459534f53455256455244594e534f4c0000 36310 b764c5ad501143121f8c0000000000000000 36311 0000000070024000865700000204059801010402 000080010000000000000000 36312 b76599a850114462fd8f0000000000000000 36313 b764c5ae501043121f8b0000000000000000 36314 b7668f535010432069150000000000000000 36315 b7668f535018432033200000008bb600000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 36316 b76599a950104462fd8e0000000000000000 36317 ed2f00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 ed2f80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 36318 2030000000010000000000000d726f616461697274726176656c026e6c00000f000100 2030800000010000000200020d726f616461697274726176656c026e6c00000f0001c00c0002000100015180000d036e733106652d626f7973c01ac00c00020001000151800006036e7332c032c02e00010001000151800004d4cccf3bc04700010001000151800004d4cccf3c 36319 99b000100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 99b080000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 36320 b305000000010000000000000d76616e676f67686d757365756d026e6c0000010001 b305800000010000000200020d76616e676f67686d757365756d026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 36321 1fd200000001000000000000066b61726d6163036d6373026e6c0000ff0001 1fd280000001000000020001066b61726d6163036d6373026e6c0000ff0001c01300020001000151800005026e73c013c01300020001000151800010036e7332096379626572636f6d6dc017c02b00010001000151800004d5c40185 36322 b7668f615011431268870000000000000000 36323 40470000000100000000000003777777067573702d6d63026e6c00001c0001 40478000000100000002000203777777067573702d6d63026e6c00001c0001c01000020001000151800012026e730c696e746572636f6e6e656374c017c01000020001000151800006036e7332c02ec02b00010001000151800004d453c005c04900010001000151800004d453c006 36324 dd7000000001000000000000037777770d77657374686f656b776f6e656e026e6c0000010001 dd7080000001000000020002037777770d77657374686f656b776f6e656e026e6c0000010001c0100002000100015180000c026e730673656e746961c01ec01000020001000151800006036e7332c035c0320001000100015180000450fd695ac04a00010001000151800004d4cce917 36325 536a00000001000000000000037777770663656e666178026e6c0000010001 536a84030001000000010000037777770663656e666178026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 36326 edd5000000010000000000000e6772616669736368657a616b656e026e6c0000ff0001 edd5800000010000000200020e6772616669736368657a616b656e026e6c0000ff0001c00c0002000100015180000d026e73076b6e6f77617265c01bc00c00020001000151800006036e7332c032c02f00010001000151800004c3402003c04800010001000151800004c340202b 36327 dbd600000001000000000000037777770877657374686f656b026e6c0000010001 dbd680000001000000020002037777770877657374686f656b026e6c0000010001c0100002000100015180000c026e730673656e746961c019c01000020001000151800006036e7332c030c02d0001000100015180000450fd695ac04500010001000151800004d4cce917 36328 b7668f625010431268860000000000000000 36329 4e5a28000001000000010000026e6c0000060001055f6c646170045f7463701244656661756c742d46697273742d53697465065f7369746573026463065f6d736463730668656465666106686564656661026e6c000021000100000258001f000000640185066d617263656c0668656465666106686564656661026e6c00 4e5aa8040000000000000000 36330 8c84000000010000000000000377777714646167626c616476616e6865746e6f6f7264656e026e6c0000010001 8c84800000010000000300030377777714646167626c616476616e6865746e6f6f7264656e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c025c01000020001000151800006036e7332c03dc01000020001000151800006036e7333c03dc03900010001000151800004c1ad573dc05600010001000151800004c1ad573ec06800010001000151800004d5880089 36331 86f700000001000000000000034e533206455354415445024e4c0000010001 86f780000001000000020002034e533206455354415445024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004c2e5b501c00c00010001000151800004c2e5b506 36332 b36600000001000000000000024e5306455354415445024e4c0000010001 b36680000001000000020002024e5306455354415445024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004c2e5b501c03800010001000151800004c2e5b506 36333 3c190000000100000000000003777777056477656263026e6c0000010001 3c198000000100000003000203777777056477656263026e6c0000010001c0100002000100015180000d036e733106776964657873c016c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 36334 509d00000001000000000000106879756e64616976646865696a64656e026e6c00000f0001 509d80000001000000030001106879756e64616976646865696a64656e026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01dc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04fc031000100010001518000043efa0202 36335 0000000070024000677200000204059801010402 000080010000000000000000 36336 04d90000000100000000000005646e732d31056c61646f74026e6c0000010001 04d98000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36337 19a10000000100000000000005646e732d32056c61646f74026e6c0000010001 19a18000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36338 51ba00000001000000000000037777770a6b6f757264657369676e026e6c0000010001 51ba80000001000000020000037777770a6b6f757264657369676e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 36339 b2540000000100000000000011716e2d3231332d3233312d3232382d313308717569636b6e6574026e6c0000010001 b2548000000100000003000211716e2d3231332d3233312d3232382d313308717569636b6e6574026e6c0000010001c01e00020001000151800011036e73310a6d756c74696b6162656cc027c01e00020001000151800006036e7332c03fc01e00020001000151800014036e73300a6d756c74696b6162656c036e657400c03b0001000100015180000450f2e002c0580001000100015180000450f2e006 36340 b76739db501043209fa70000000000000000 b767b9d40000000000000000 36341 b76739db501843206bf10000008bb2c0000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 b767b9d40000000000000000 36342 2b5d00000001000000000000036e73340767617574656e67026e6c0000010001 2b5d80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36343 336000000001000000000000036e73340767617574656e67026e6c0000010001 336080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36344 1b890000000100000000000003777777117368656c6c67726f656e657374726f6f6d026e6c0000010001 1b898000000100000002000203777777117368656c6c67726f656e657374726f6f6d026e6c0000010001c0100002000100015180000b036e73310461627473c022c01000020001000151800006036e7332c03ac0360001000100015180000450454199c04d00010001000151800004d47ba45b 36345 a6ec00000001000000000000046c696465026e6c0000020001 a6ec80000001000000020002046c696465026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 36346 b76739e9501143129f190000000000000000 b767b9e40000000000000000 36347 a8e100000001000000000000036e733109666972737466696e64026e6c0000010001 a8e180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36348 a8e200000001000000000000036e733209666972737466696e64026e6c0000010001 a8e280000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36349 0000000070024000556e00000204059801010402 000080010000000000000000 36350 e7d50000000100000000000008736f6d65686f7374026e6c00000f0001 e7d58403000100000001000008736f6d65686f7374026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 36351 a57300000001000000000000036e73320870726f7365727665026e6c0000010001 a57380000001000000030002036e73320870726f7365727665026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c010c02d000100010001518000045054e055c05d00010001000151800004d4ccc655 36352 336d00000001000000000000036e73320870726f7365727665026e6c00001c0001 336d80000001000000030002036e73320870726f7365727665026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c010c02d000100010001518000045054e055c05d00010001000151800004d4ccc655 36353 758300000001000000000000036e73320870726f7365727665026e6c0000260001 758380000001000000030002036e73320870726f7365727665026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c010c02d000100010001518000045054e055c05d00010001000151800004d4ccc655 36354 eb2200000001000000000000036e733203757063026e6c0000010001 eb2280000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 36355 fac600000001000000000000036e733203757063026e6c0000260001 fac680000001000000030003036e733203757063026e6c0000260001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 36356 b76739ea501043129f180000000000000000 b767b9e40000000000000000 36357 b76820ed50104320a6900000000000000000 b768a0e30000000000000000 36358 2a97000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 2a97800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 36359 b76820ed50184320239c0000008b0300000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 b768a0e30000000000000000 36360 bf7d0000000100000000000003777777126b617474656e7a6f72672d64656e68616167026e6c0000010001 bf7d8000000100000002000003777777126b617474656e7a6f72672d64656e68616167026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c03a 36361 1e4b00000001000000000000046d61696c076575726f6e6574026e6c0000010001 1e4b80000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 36362 a8e400000001000000000000036e733109666972737466696e64026e6c0000010001 a8e480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36363 a8e500000001000000000000036e733209666972737466696e64026e6c0000010001 a8e580000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36364 045100000001000000000000037777770c696d6d756e6f6d6564696373026e6c0000010001 045180000001000000030001037777770c696d6d756e6f6d6564696373026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01dc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04fc031000100010001518000043efa0202 36365 b76820fb50114312a6020000000000000000 b768a0f30000000000000000 36366 2aa800000001000000000000046e733031066368656c6c6f026e6c0000010001 2aa880000001000000030003046e733031066368656c6c6f026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c00c00010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 36367 8b2000000001000000000000037777770c777677657374667269736961026e6c0000010001 8b2080000001000000020002037777770c777677657374667269736961026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 36368 ef61000000010000000000000d626f656b656e73657276696365026e6c00000f0001 ef61800000010000000200020d626f656b656e73657276696365026e6c00000f0001c00c00020001000151800010036e733109686f73746e65746276c01ac00c00020001000151800006036e7332c032c02e0001000100015180000451113264c04a00010001000151800004d5c42851 36369 000000007002400072f800000204059801010402 000080010000000000000000 36370 6580000000010000000000000468676a62026e6c0000010001 6580800000010000000300020468676a62026e6c0000010001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 36371 53780000000100000000000003777777056177656263026e6c0000010001 53788000000100000003000003777777056177656263026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c02ec01000020001000151800006036e7333c02e 36372 b76820fc50104312a6010000000000000000 b768a0f30000000000000000 36373 73510000000100000000000003777777037365780678656e69756d026e6c0000010001 73518000000100000002000003777777037365780678656e69756d026e6c0000010001c01400020001000151800012036e73310878656e6f73697465036e657400c01400020001000151800006036e7332c033 36374 b768f16a50104320f39c0000000000000000 36375 67ff00000001000000000000046d61696c07756e6565647573026e6c0000010001 67ff80000001000000020002046d61696c07756e6565647573026e6c0000010001c0110002000100015180000f026e7309656174736572766572c019c01100020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 36376 b768f16a50184320c0270000008bb380000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afb44403c4cc400030000002c4e544c4d535350000100000097b200e0060006002600000006000600200000004d415243454c4845444546410000 36377 7f3e0000000100000000000003777777076e6574706f6c6c026e6c0000010001 7f3e8000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 36378 5c5b000000010000000000000866616c6c6261636b0c696e746572636f6e6e656374026e6c0000010001 5c5b800000010000000300030866616c6c6261636b0c696e746572636f6e6e656374026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c03600010001000151800004d453c005c04700010001000151800004d453c006c05900010001000151800004d453c805 36379 6fe800000001000000000000036d78310c696e746572636f6e6e656374026e6c0000010001 6fe880000001000000030003036d78310c696e746572636f6e6e656374026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c03100010001000151800004d453c005c04200010001000151800004d453c006c05400010001000151800004d453c805 36380 b768f17850114312f30e0000000000000000 36381 3b5e000000010000000000000c6265726e737465696e2d6167026e6c00000f0001 3b5e840300010000000100000c6265726e737465696e2d6167026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 36382 d1df0000000100000000000103706f70096e656465726c616e64036e65740b6175746f6372657573656e026e6c00001c00010000291000000000000000 d1df8000000100000002000303706f70096e656465726c616e64036e65740b6175746f6372657573656e026e6c00001c0001c01e0002000100015180000f036e733108636f6d707574656cc02ac01e00020001000151800006036e7332c042c03e00010001000151800004c3568680c05900010001000151800004c35686810000291000000000000000 36383 0f1e00000001000000000000036e733109666972737466696e64026e6c0000010001 0f1e80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36384 65fb00000001000000000000127765737466726965736c616e64726164696f026e6c00000f0001 65fb80000001000000020000127765737466726965736c616e64726164696f026e6c00000f0001c00c00020001000151800012036e733108636974757377656203636f6d00c00c00020001000151800006036e7332c037 36385 55f4000000010000000000000377777709766f6574766572656e026e6c0000010001 55f4800000010000000200020377777709766f6574766572656e026e6c0000010001c0100002000100015180000e036e733107686f7477697265c01ac01000020001000151800006036e7332c032c02e0001000100015180000451044b03c0480001000100015180000451044bc8 36386 7a8300000001000000000000037777770d686f6d6f2d706c6161746a6573026e6c0000010001 7a8380000001000000020001037777770d686f6d6f2d706c6161746a6573026e6c0000010001c0100002000100015180000a026e7304696d636fc01ec01000020001000151800013036e7332097669727475616c787303636f6d00c032000100010001518000043e81810a 36387 3ab80000000100000000000003706f7006787334616c6c026e6c0000010001 3ab88000000100000003000203706f7006787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 36388 04b0000000010000000000000774656c73746172026e6c00000f0001 04b0800000010000000200020774656c73746172026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 36389 b768f17950104312f30d0000000000000000 36390 25bd00000001000000000000036e733209666972737466696e64026e6c0000010001 25bd80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36391 f66d0000000100000000000010736d6172742d69747365727669636573026e6c00000f0001 f66d8000000100000002000010736d6172742d69747365727669636573026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c037 36392 b7529be650104462fc0c0000000000000000 36393 f6420000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f6428000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36394 74de000000010000000000000673656375726509706f7374706c617a61026e6c0000010001 74de800000010000000200020673656375726509706f7374706c617a61026e6c0000010001c0130002000100015180000e036e733207737570706f7274c01dc01300020001000151800006036e7334c035c03100010001000151800004c372e7c8c04b00010001000151800004c372e6fe 36395 813d00000001000000000000037777770a7777702d6469656d656e026e6c0000010001 813d80000001000000020000037777770a7777702d6469656d656e026e6c0000010001c0100002000100015180000c036e723405692d702d64c01bc01000020001000151800006036e7236c033 36396 ed3b00000001000000000000036e73330767617574656e67026e6c0000010001 ed3b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36397 29fc00000001000000000000036e73340767617574656e67026e6c0000010001 29fc80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36398 aa8d0000000100000000000009652d6c756e61746963026e6c0000010001 aa8d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36399 4c650000000100000000000006787334616c6c026e6c00000f0001 4c658000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 36400 5d3800000001000000000000037777770561736b6f6c026e6c0000010001 5d3884030001000000010000037777770561736b6f6c026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 36401 e2760000000100000000000003313637023636033231380236360964796e61626c6f636b07656173796e6574026e6c0000100001 e2768000000100000002000203313637023636033231380236360964796e61626c6f636b07656173796e6574026e6c0000100001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 36402 660300000001000000000000026e73076e656473746174026e6c0000010001 660380000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 36403 85ea00000001000000000000036e7333076e656473746174026e6c0000010001 85ea80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 36404 ba80000000010000000000000377777707717569636b7063026e6c0000010001 ba80800000010000000200000377777707717569636b7063026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c02f 36405 4d4700000001000000000000086261726d61746f6e026e6c0000ff0001 4d4780000001000000020002086261726d61746f6e026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 36406 df1e00000001000000000000057668656e70026e6c00000f0001 df1e80000001000000020002057668656e70026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c012c00c00020001000151800006036e7332c029c02600010001000151800004d453c005c04400010001000151800004d453c006 36407 177600000001000000000000096876626f6e6c696e65026e6c00001c0001 177680000001000000020002096876626f6e6c696e65026e6c00001c0001c00c0002000100015180000a036e733103677673c016c00c00020001000151800006036e7332c02ec02a000100010001518000045054e1aac04000010001000151800004d4ccc646 36408 941e0000000100000000000004686f6d6503696965026e6c0000010001 941e8000000100000003000304686f6d6503696965026e6c0000010001c01100020001000151800009026e7303687661c015c0110002000100015180000e036e733107737572666e6574c015c01100020001000151800006036e7332c02cc02900010001000151800004915c1202c03e00010001000151800004c0576a65c05800010001000151800004915c2102 36409 8b7000000001000000000000046d61696c03746363026e6c0000010001 8b7080000001000000020000046d61696c03746363026e6c0000010001c01100020001000151800011036e73310764697265637435036e657400c01100020001000151800006036e7332c02d 36410 f96600000001000000000000046d61696c03746363026e6c00001c0001 f96680000001000000020000046d61696c03746363026e6c00001c0001c01100020001000151800011036e73310764697265637435036e657400c01100020001000151800006036e7332c02d 36411 7d6400000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730c6f6d64656e6f6f72642d6873026e6c0000060001 7d6484030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730c6f6d64656e6f6f72642d6873026e6c0000060001c04700060001000038400036026e730f646f6d61696e2d7265676973747279c0470a686f73746d6173746572c05e0bf1e540000070800000384000278d0000003840 36412 352200000001000000000000027463036164730974656c656772616166026e6c0000010001 352280000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 36413 580600000001000000000000036e733209666972737466696e64026e6c0000010001 580680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36414 4db100000001000000000000046574726e0c696e746572636f6e6e656374026e6c0000010001 4db180000001000000030003046574726e0c696e746572636f6e6e656374026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c03200010001000151800004d453c005c04300010001000151800004d453c006c05500010001000151800004d453c805 36415 fab828000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730c6f6d64656e6f6f72642d6873026e6c00002100010000025800220000006400580a6f6d64656e6f6f722d310c6f6d64656e6f6f72642d6873026e6c00 fab8a8040000000000000000 36416 e5ef0000000100000000000003777777087273616476696573026e6c0000010001 e5ef8000000100000002000203777777087273616476696573026e6c0000010001c0100002000100015180000a036e733103686978c019c01000020001000151800006036e7332c031c02d00010001000151800004d5a0da0ac0430001000100015180000451112ec3 36417 a0e500000001000000000000075745534d4f4c4c0544454d4f4e024e4c0000010001 a0e580000001000000030002075745534d4f4c4c0544454d4f4e024e4c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c0140002000100015180000f036e73320564656d6f6e036e657400c02e00010001000151800004c29f4906c04000010001000151800004c29fb004 36418 3120000000010000000000000762616e6e65727303696d73026e6c0000010001 3120800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 36419 0000000070024000fae400000204056401010402 000080010000000000000000 36420 5ca9000000010000000000000d6772617469736b6f7274696e670d636f756e747279636173696e6f026e6c0000010001 5ca9800000010000000200020d6772617469736b6f7274696e670d636f756e747279636173696e6f026e6c0000010001c01a00020001000151800011026e730b6973642d686f6c6c616e64c028c01a00020001000151800006036e7332c03fc03c00010001000151800004d5e38d0ac05900010001000151800004d5e38205 36421 ca2f00000001000000000000036e7331066e6c74726565026e6c0000010001 ca2f80000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 36422 b76b4fdb501040b01f520000000000000000 b76bcfd40000000000000000 36423 b76b4fdb501840b0d54e00000095c564000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0282403c54020003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000 b76bcfd40000000000000000 36424 fda00000000100000000000006787334616c6c026e6c00000f0001 fda08000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 36425 d53f00000001000000000000037777770b6d6f6e6f6d616e69616373026e6c0000010001 d53f80000001000000020002037777770b6d6f6e6f6d616e69616373026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 36426 e1ae00000001000000000000036e73310774656c666f7274026e6c0000010001 e1ae80000001000000020001036e73310774656c666f7274026e6c0000010001c01000020001000151800002c00cc01000020001000151800014036e733202657507636f6e63657274036e657400c00c00010001000151800004d5c22815 36427 b76b4fe9501140a21eba0000000000000000 b76bcfe40000000000000000 36428 000000007002400048dc00000204056401010402 000080010000000000000000 36429 35230000000100000000000004777777320974656c656772616166026e6c0000010001 35238000000100000002000004777777320974656c656772616166026e6c0000010001c01100020001000151800013036e73300974656c656772616166036e657400c01100020001000151800006036e7331c033 36430 490c000000010000000000000c64656c746162657267696e67026e6c0000ff0001 490c800000010000000200000c64656c746162657267696e67026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 36431 99a600000001000000000000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730c6b657a726f7474657264616d026e6c0000060001 99a684030001000000010000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730c6b657a726f7474657264616d026e6c0000060001c04100060001000038400036026e730f646f6d61696e2d7265676973747279c0410a686f73746d6173746572c0580bf1e540000070800000384000278d0000003840 36432 b76b4fea501040a21eb90000000000000000 b76bcfe40000000000000000 36433 b76bccee501040b0f0350000000000000000 36434 b76bccee501840b021e3000000954ab5000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0282403c54020003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000 36435 d1bb00000001000000000000037777770a62656b6b6572676c6173026e6c0000010001 d1bb80000001000000020002037777770a62656b6b6572676c6173026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01bc01000020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 36436 6393000000010000000000000a7665626f2d6265746f6e026e6c00001c0001 6393800000010000000200000a7665626f2d6265746f6e026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 36437 c81400000001000000000000116e696575776b6f6f7064656b77616b656c026e6c00000f0001 c81480000001000000030002116e696575776b6f6f7064656b77616b656c026e6c00000f0001c00c00020001000151800011036e73310761757669636f6d036e657400c00c0002000100015180000e036e73310761757669636f6dc01ec00c00020001000151800006036e7332c053c04f00010001000151800004d5bd14c8c06900010001000151800004d5bd1532 36438 a31200000001000000000000036e733106313233623262026e6c0000010001 a31280000001000000020002036e733106313233623262026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e5b5c039000100010001518000045054e5b6 36439 a8de00000001000000000000036e733206313233623262026e6c0000010001 a8de80000001000000020002036e733206313233623262026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b000100010001518000045054e5b5c00c000100010001518000045054e5b6 36440 4bcb00000001000000000000036877670f766965727465656e66656573746a65026e6c0000010001 4bcb80000001000000020002036877670f766965727465656e66656573746a65026e6c0000010001c0100002000100015180000f026e7309656174736572766572c020c01000020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 36441 b76bccfc501140a2ef9d0000000000000000 36442 00000000700240002ee600000204056401010402 000080010000000000000000 36443 b79900000001000000000000026e730f646f6d61696e2d7265676973747279026e6c0000010001 b79980000001000000030002026e730f646f6d61696e2d7265676973747279026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 36444 6c79000000010000000000000758424430303031076b6c6d66733031026e6c0000010001 6c79840300010000000100000758424430303031076b6c6d66733031026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 36445 b76bccfd501040a2ef9c0000000000000000 36446 b76cc0f1501040b0e23b0000000000000000 36447 b76cc0f1501840b0b68700000095a816000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403b0282403c54020003000000364e544c4d535350000100000097b200e00c000c002a0000000a000a00200000004f4d44454e4f4f522d314f4d44454e4f4f52442d48530000 36448 3eb028000001000000010000026e6c0000060001035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730c6b657a726f7474657264616d026e6c000021000100000258001e000000640cc40665636f6e656c0c6b657a726f7474657264616d026e6c00 3eb0a8040000000000000000 36449 b5ba00000001000000000000047476636e026e6c0000010001 b5ba80000001000000020002047476636e026e6c0000010001c00c00020001000151800011036e73310a6f612d73797374656d73c011c00c00020001000151800006036e7332c029c025000100010001518000043eb1b1abc042000100010001518000043eb1b1ac 36450 539800000001000000000000056b656974680564656d6f6e026e6c00000f0001 539880000001000000030002056b656974680564656d6f6e026e6c00000f0001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c0120002000100015180000f036e73320564656d6f6e036e657400c02c00010001000151800004c29f4906c03e00010001000151800004c29fb004 36451 b76cc0ff501140a2e1a30000000000000000 36452 3b2c0000000100000000000008667265656d61696c026e6c0000010001 3b2c8000000100000003000208667265656d61696c026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 36453 18a40000000100000000000007736b796c696e65026e6c00000f0001 18a48000000100000002000207736b796c696e65026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 36454 0000000070024000e53c0000020405b401010402 000080010000000000000000 36455 b76cc100501040a2e1a20000000000000000 36456 485800000001000000000000037777770673746f636b73026e6c0000010001 485880000001000000020002037777770673746f636b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 36457 d1dd00000001000000000000087363616e6d61696c026e6c00000f0001 d1dd80000001000000020002087363616e6d61696c026e6c00000f0001c00c00020001000151800017036e733110636173652d656c656b74726f6e696373c015c00c00020001000151800006036e7332c02dc02900010001000151800004d4cceb4fc04c00010001000151800004d4cceb50 36458 d7b400000001000000000000037777770673746f636b73026e6c0000010001 d7b480000001000000020002037777770673746f636b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 36459 b76d3ff750104470161c0000000000000000 b76dbff40000000000000000 36460 b76d3ff7501844706a97000000912d80000000010001000000000f313135313035313233353334362d330000f900010f313135313035313233353334362d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2e403c4eae0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000 b76dbff40000000000000000 36461 71a6000000010000000000000a474154454b454550455208545249504c452d50024e4c0000010001 71a6800000010000000200010a474154454b454550455208545249504c452d50024e4c0000010001c01700020001000151800005026e73c017c01700020001000151800013036e7332026e6c0669676e697465036e657400c03400010001000151800004c05c8682 36462 b78100000001000000000000076c69646572656e026e6c0000020001 b78180000001000000020002076c69646572656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 36463 84ed000000010000000000000377777708646166776f726c64026e6c0000010001 84ed800000010000000200000377777708646166776f726c64026e6c0000010001c01000020001000151800011036e73310a686f73746e6174696f6ec019c01000020001000151800006036e7332c031 36464 b76d40055011446215880000000000000000 b76dc0040000000000000000 36465 0000000070024000eddd0000020405b401010402 000080010000000000000000 36466 709b00000001000000000000036e73310a686f73746e6174696f6e026e6c0000010001 709b80000001000000020002036e73310a686f73746e6174696f6e026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c01bc01000020001000151800006036e7331c033c02f00010001000151800004c3eaad40c04900010001000151800004c3eaad41 36467 a46400000001000000000000036e73320a686f73746e6174696f6e026e6c0000010001 a46480000001000000020002036e73320a686f73746e6174696f6e026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c01bc01000020001000151800006036e7331c033c02f00010001000151800004c3eaad40c04900010001000151800004c3eaad41 36468 1fd50000000100000000000003766e67026e6c0000ff0001 1fd58000000100000002000003766e67026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 36469 c3fb00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 c3fb80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 36470 c6ce00000001000000000000036e73310863616d627269756d026e6c0000010001 c6ce80000001000000020002036e73310863616d627269756d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9131082c03b00010001000151800004d5efb202 36471 b5b300000001000000000000077765626d61696c0564656d6f6e026e6c0000010001 b5b380000001000000030002077765626d61696c0564656d6f6e026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c0140002000100015180000f036e73320564656d6f6e036e657400c02e00010001000151800004c29f4906c04000010001000151800004c29fb004 36472 e97b0000000100000000000003777777096d656469616d656e75026e6c0000010001 e97b8000000100000003000303777777096d656469616d656e75026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 36473 9ede00000001000000000001046e733032066368656c6c6f026e6c00000100010000291000000000000000 9ede80000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 36474 aecc00000001000000000001046e733032066368656c6c6f026e6c00001c00010000291000000000000000 aecc80000001000000030004046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 36475 bd630000000100000000000004777777320974656c656772616166026e6c0000010001 bd638000000100000002000004777777320974656c656772616166026e6c0000010001c01100020001000151800013036e73300974656c656772616166036e657400c01100020001000151800006036e7331c033 36476 b76d40065010446215870000000000000000 b76dc0040000000000000000 36477 b76dbaf750104470a3bc0000000000000000 36478 b76dbaf750184470fab8000000912c00000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2e403c4eae0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000 36479 636700000001000000000000036e73310863616d627269756d026e6c0000260001 636780000001000000020002036e73310863616d627269756d026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9131082c03b00010001000151800004d5efb202 36480 239c00000001000000000000036e733105672d617274026e6c0000010001 239c80000001000000020002036e733105672d617274026e6c0000010001c01000020001000151800002c00cc0100002000100015180000f026e7309747269706c652d6974c016c00c00010001000151800004d5a0c502c03800010001000151800004d584b002 36481 a3c300000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000010001 a3c380000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 36482 2755000000010000000000000b7072657373616e796b6579026e6c00000f0001 2755800000010000000200000b7072657373616e796b6579026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c030 36483 a45900000001000000000000037777770c686f6c6c616e647365736578026e6c0000010001 a45980000001000000020000037777770c686f6c6c616e647365736578026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c035 36484 1f3200000001000000000000037777770962696f73636f70656e026e6c0000010001 1f3280000001000000020001037777770962696f73636f70656e026e6c0000010001c0100002000100015180000d036e733306696e61646765c01ac01000020001000151800013046e733139087a6f6e656564697403636f6d00c02e00010001000151800004d9164114 36485 543500000001000000000000036e73320863616d627269756d026e6c0000010001 543580000001000000020002036e73320863616d627269756d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d9131082c00c00010001000151800004d5efb202 36486 b76dbb0550114462a3280000000000000000 36487 0000000070024000a6000000020405b401010402 000080010000000000000000 36488 73cf0000000100000000000006726f626572740668656e73656c026e6c0000010001 73cf8000000100000003000306726f626572740668656e73656c026e6c0000010001c01300020001000151800011036e73310a74727565736572766572c01ac01300020001000151800006036e7332c032c01300020001000151800006036e7333c032c02e00010001000151800004d5ef8003c04b00010001000151800004d5efb004c05d00010001000151800004d5ef8005 36489 b76dbb0650104462a3270000000000000000 36490 4a9a0000000100000000000010706861726f736d756c74696d65646961026e6c00000f0001 4a9a8000000100000002000210706861726f736d756c74696d65646961026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec01dc00c00020001000151800006036e7332c035c03100010001000151800004c29f4906c04900010001000151800004c29fb004 36491 bdcf00000001000000000000037777770c737461727420706167696e61026e6c0000010001 bdcf84030001000000010000037777770c737461727420706167696e61026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 36492 1501000000010000000000000a767363616e312d657572036578740770726f7261696c026e6c00001c0001 1501800000010000000300000a767363616e312d657572036578740770726f7261696c026e6c00001c0001c01b00020001000151800019036e73310f6f726967696e2d736572766963657303636f6d00c01b00020001000151800006036e7332c03bc01b00020001000151800006036e7333c03b 36493 b76e739b50104470a33a0000000000000000 b76ef3940000000000000000 36494 5d4500000001000000000000036e73320863616d627269756d026e6c0000260001 5d4580000001000000020002036e73320863616d627269756d026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d9131082c00c00010001000151800004d5efb202 36495 b76e739b50184470fbb6000000912a80000000010001000000000f313135313035313233353334362d320000f900010f313135313035313233353334362d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd2e403c4eae0003000000324e544c4d535350000100000097b208e00c000c0026000000060006002000000045434f4e454c4b554e5354454e5a414b454e0000 b76ef3940000000000000000 36496 d11a00000001000000000000055f6c646170045f74637003706463065f6d73646373085669737365723031026e6c0000210001 d11a84030001000000010000055f6c646170045f74637003706463065f6d73646373085669737365723031026e6c0000210001c02b00060001000038400036026e730f646f6d61696e2d7265676973747279c02b0a686f73746d6173746572c0420bf1e540000070800000384000278d0000003840 36497 b76e73a950114462a2a60000000000000000 b76ef3a40000000000000000 36498 6b91000000010000000000000f524f4253544f5441414c47454d414b024e4c00000f0001 6b91800000010000000200000f524f4253544f5441414c47454d414b024e4c00000f0001c00c00020001000151800011036e733107726f6b73636f6d036e657400c00c0002000100015180000e036e733207726f6b73636f6dc01c 36499 434500000001000000000000026e7303616d730874656c6567617465026e6c0000010001 434580000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 36500 b76e73aa50104462a2a50000000000000000 b76ef3a40000000000000000 36501 ed110000000100000000000006787334616c6c026e6c00000f0001 ed118000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 36502 c5ad00000001000000000000046865726101780463756369026e6c0000010001 c5ad80000001000000030003046865726101780463756369026e6c0000010001c01300020001000151800002c00cc0130002000100015180000c066865726d6573026e6cc013c01300020001000151800009066865726d6573c011c00c00010001000151800004d47d8001c03a00010001000151800004c143ef02c05200010001000151800004d47d8002 36503 2ddd00000001000000000000066865726d657301780463756369026e6c0000010001 2ddd80000001000000030003066865726d657301780463756369026e6c0000010001c015000200010001518000070468657261c013c0150002000100015180000c066865726d6573026e6cc015c01500020001000151800002c00cc02e00010001000151800004d47d8001c04100010001000151800004c143ef02c00c00010001000151800004d47d8002 36504 aaa200000001000000000000036e733107626265796f6e64026e6c00001c0001 aaa280000001000000020002036e733107626265796f6e64026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 36505 540e00000001000000000000036e733107626265796f6e64026e6c0000260001 540e80000001000000020002036e733107626265796f6e64026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 36506 2d9800000001000000000000036e733207626265796f6e64026e6c00001c0001 2d9880000001000000020002036e733207626265796f6e64026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 36507 a54800000001000000000000036e733207626265796f6e64026e6c0000260001 a54880000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 36508 0e5200000001000000000000037777770a766f726d6f706d616174026e6c0000010001 0e5280000001000000020002037777770a766f726d6f706d616174026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 36509 364b0000000100000000000003777777056d6b2d6974026e6c0000010001 364b8000000100000002000203777777056d6b2d6974026e6c0000010001c01000020001000151800013036e73310c706f77657273657276657235c016c01000020001000151800006036e7332c02ec02a0001000100015180000451047432c0490001000100015180000451047433 36510 9ede00000001000000000000046e733032066368656c6c6f026e6c0000010001 9ede80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 36511 aecc00000001000000000000046e733032066368656c6c6f026e6c00001c0001 aecc80000001000000030003046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 36512 68f8000000010000000000000377777706736578776562026e6c0000010001 68f8800000010000000200020377777706736578776562026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 36513 a80a00000001000000000000036e7331046e732d31026e6c00001c0001 a80a80000001000000020002036e7331046e732d31026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045045a0cdc03700010001000151800004d4cceec8 36514 c43f00000001000000000000036e7332046e732d31026e6c00001c0001 c43f80000001000000020002036e7332046e732d31026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc029000100010001518000045045a0cdc00c00010001000151800004d4cceec8 36515 b370000000010000000000000c737765646973686d61746368026e6c00001c0001 b370800000010000000200000c737765646973686d61746368026e6c00001c0001c00c00020001000151800015026e730d646f6d61696e6e6574776f726b02736500c00c00020001000151800006036e7332c030 36516 1f7100000001000000000000036f6e76026e6c00000f0001 1f7180000001000000020000036f6e76026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 36517 45e400000001000000000000036e733107626265796f6e64026e6c0000010001 45e480000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 36518 5aca000000010000000000000a7665626f2d6265746f6e026e6c0000ff0001 5aca800000010000000200000a7665626f2d6265746f6e026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 36519 f75d0000000100000000000003777777087363726970746965026e6c0000010001 f75d8000000100000002000203777777087363726970746965026e6c0000010001c01000020001000151800009036e7331026973c019c01000020001000151800006036e7332c031c02d00010001000151800004d5852102c04200010001000151800004d5c41503 36520 8f8700000001000000000000066d6179706f70026e6c00000f0001 8f8784030001000000010000066d6179706f70026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 36521 4cce00000001000000000000037777770b676c65756664696572656e026e6c0000010001 4cce80000001000000030003037777770b676c65756664696572656e026e6c0000010001c010000200010001518000120465736d650a6372797374616c2d6974c01cc010000200010001518000080576696d6573c035c0100002000100015180000805636f6c6f6ec035c03000010001000151800004d5c9a602c04e00010001000151800004d5c9a603c06200010001000151800004d53ddd3c 36522 827b00000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000010001 827b80000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 36523 3b5c00000001000000000000096c6965646d65696572026e6c0000020001 3b5c80000001000000020002096c6965646d65696572026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 36524 a6ce00000001000000000000046d61696c0477656233026e6c0000010001 a6ce80000001000000020002046d61696c0477656233026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02a00010001000151800004d436240ec03c00010001000151800004c2b262ef 36525 dd5e00000001000000000000046e73303105636f64696d026e6c0000010001 dd5e80000001000000020002046e73303105636f64696d026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c00c00010001000151800004d5f73004c03900010001000151800004d43d46c7 36526 774d00000001000000000000046e73303205636f64696d026e6c0000010001 774d80000001000000020002046e73303205636f64696d026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc02b00010001000151800004d5f73004c00c00010001000151800004d43d46c7 36527 d98100000001000000000000046e73303105636f64696d026e6c0000260001 d98180000001000000020002046e73303105636f64696d026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733032c011c00c00010001000151800004d5f73004c03900010001000151800004d43d46c7 36528 144f00000001000000000000046e73303205636f64696d026e6c0000260001 144f80000001000000020002046e73303205636f64696d026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800002c00cc02b00010001000151800004d5f73004c00c00010001000151800004d43d46c7 36529 ef560000000100000000000003777777087072656e6174616c026e6c0000010001 ef568000000100000003000303777777087072656e6174616c026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c3f13ceec04900010001000151800004c372eb43c05b000100010001518000043e320e8f 36530 140e00100001000000000001036e7331086e6f766178657373026e6c00000100010000290800000000000000 140e80000001000000030004036e7331086e6f766178657373026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c260000291000000000000000 36531 285b00000001000000000000037777770a686f6e64656e6c616e64026e6c0000010001 285b80000001000000020002037777770a686f6e64656e6c616e64026e6c0000010001c01000020001000151800010036e733109756e69736572766572c01bc01000020001000151800006036e7332c033c02f00010001000151800004c3454b03c04b00010001000151800004d119a2fa 36532 8468000000010000000000000a7477656e7465626f7267026e6c00001c0001 8468800000010000000200020a7477656e7465626f7267026e6c00001c0001c00c0002000100015180000f036e733108696e74726f776562c017c00c00020001000151800006036e7332c02fc02b0001000100015180000450416028c04600010001000151800004c356780c 36533 8a0700100001000000000001036e7331086e6f766178657373026e6c00002600010000290800000000000000 8a0780000001000000030004036e7331086e6f766178657373026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c260000291000000000000000 36534 941000100001000000000001036e7332086e6f766178657373026e6c00000100010000290800000000000000 941080000001000000030004036e7332086e6f766178657373026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d5c98015c00c00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c260000291000000000000000 36535 257c00100001000000000001036e7332086e6f766178657373026e6c00002600010000290800000000000000 257c80000001000000030004036e7332086e6f766178657373026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d5c98015c00c00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c260000291000000000000000 36536 12be00100001000000000001036e7333086e6f766178657373026e6c00000100010000290800000000000000 12be80000001000000030004036e7333086e6f766178657373026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d5c98015c03f00010001000151800004d5c9bf12c00c00010001000151800004d5ef9c260000291000000000000000 36537 095f00100001000000000001036e7333086e6f766178657373026e6c00002600010000290800000000000000 095f80000001000000030004036e7333086e6f766178657373026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d5c98015c03f00010001000151800004d5c9bf12c00c00010001000151800004d5ef9c260000291000000000000000 36538 1cfb0000000100000000000009652d6c756e61746963026e6c0000010001 1cfb8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36539 352e0000000100000000000009652d6c756e61746963026e6c0000010001 352e8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36540 8fd000100001000000000001036e733104686f6d65026e6c00000100010000290800000000000000 8fd080000001000000030004036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 36541 c53600000001000000000000026e730f646f6d61696e2d7265676973747279026e6c0000260001 c53680000001000000030002026e730f646f6d61696e2d7265676973747279026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 36542 fb2c00000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c0000260001 fb2c80000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 36543 32d400000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c0000260001 32d480000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 36544 4f96000000010000000000000c6c6965666465696e686f7574026e6c0000020001 4f96800000010000000200020c6c6965666465696e686f7574026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 36545 2dca0000000100000000000005646e732d31056c61646f74026e6c0000010001 2dca8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36546 a02f00000001000000000000086d656469616c6162026e6c00001c0001 a02f80000001000000020001086d656469616c6162026e6c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02900010001000151800004c1ad4e02 36547 63d300000001000000000000056e656d6573026e6c00000f0001 63d380000001000000020002056e656d6573026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c012c00c00020001000151800006036e7332c02ac0260001000100015180000450416028c04100010001000151800004c356780c 36548 6499000000010000000000000f736f6e696373706172657061727473026e6c00000f0001 6499800000010000000200000f736f6e696373706172657061727473026e6c00000f0001c00c0002000100015180001408726564697265637405706172636303636f6d00c00c0002000100015180001404646e73320974656c617669737461036e657400 36549 c0640000000100000000000003627361026e6c0000ff0001 c0648000000100000002000003627361026e6c0000ff0001c00c00020001000151800010036e733106736563757265036e657400c00c00020001000151800006036e7332c028 36550 83f10000000100000000000003777777117469736d6177616a6577656e6462616e64026e6c0000010001 83f18000000100000002000203777777117469736d6177616a6577656e6462616e64026e6c0000010001c01000020001000151800012036e73310b6661737473657276657234c022c01000020001000151800006036e7332c03ac0360001000100015180000442a4f39ac0540001000100015180000442a4f3a3 36551 6a010000000100000000000005646e732d32056c61646f74026e6c0000010001 6a018000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36552 8ef10000000100000000000008626c6f656d6e6574026e6c00000f0001 8ef18000000100000002000208626c6f656d6e6574026e6c00000f0001c00c0002000100015180000f036e733108636f6d707574656cc015c00c00020001000151800006036e7332c02dc02900010001000151800004c3568680c04400010001000151800004c3568681 36553 eb0900000001000000000000086d63677265676f72026e6c00001c0001 eb0980000001000000020001086d63677265676f72026e6c00001c0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 36554 bd5e000000010000000000000379786b026e6c00000f0001 bd5e800000010000000300000379786b026e6c00000f0001c00c00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028 36555 b12300000001000000000000037777770872656e7461636172026e6c0000010001 b12380000001000000020000037777770872656e7461636172026e6c0000010001c0100002000100015180000d026e7307706167656e6963c019c01000020001000151800006036e7332c030 36556 d6f40000000100000000000004777777310a62616e6e6572746a6573026e6c0000010001 d6f48000000100000002000004777777310a62616e6e6572746a6573026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c033 36557 847900000001000000000000037777770f70636d7374617469737469656b656e026e6c0000010001 847980000001000000020002037777770f70636d7374617469737469656b656e026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c020c01000020001000151800006036e7332c037c03400010001000151800004d9aa2042c04d00010001000151800004d9aa2c06 36558 713c00000001000000000000024e53087261626f62616e6b026e6c00001c0001 713c80000001000000020001024e53087261626f62616e6b026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 36559 03b600000001000000000000037777770e6172626569647372656368746572026e6c0000010001 03b680000001000000020000037777770e6172626569647372656368746572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 36560 3b6b00000001000000000000036e73340767617574656e67026e6c0000010001 3b6b80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36561 dbb100000001000000000000086b69746573757266026e6c00000f0001 dbb180000001000000020000086b69746573757266026e6c00000f0001c00c00020001000151800014026e730b736d617274736572766572036e657400c00c00020001000151800006036e7332c02c 36562 6001000000010000000000000777616e61646f6f026e6c00000f0001 6001800000010000000200010777616e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 36563 be450000000100000000000003777777066a6f626e6574026e6c0000010001 be458000000100000002000203777777066a6f626e6574026e6c0000010001c0100002000100015180000b036e733104696e666fc017c01000020001000151800006036e7332c02fc02b00010001000151800004504fc020c04200010001000151800004504fc021 36564 82c000000001000000000000036e733303777873026e6c0000010001 82c080000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 36565 41c900000001000000000000036e7331086e6f766178657373026e6c0000010001 41c980000001000000030003036e7331086e6f766178657373026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 36566 b13b00000001000000000000036e7331086e6f766178657373026e6c0000260001 b13b80000001000000030003036e7331086e6f766178657373026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 36567 e09500000001000000000000036e733503777873026e6c0000010001 e09580000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 36568 687f00000001000000000000036e7332086e6f766178657373026e6c0000010001 687f80000001000000030003036e7332086e6f766178657373026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d5c98015c00c00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 36569 587d00000001000000000000036e7332086e6f766178657373026e6c0000260001 587d80000001000000030003036e7332086e6f766178657373026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d5c98015c00c00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 36570 775400000001000000000000036e7333086e6f766178657373026e6c0000010001 775480000001000000030003036e7333086e6f766178657373026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d5c98015c03f00010001000151800004d5c9bf12c00c00010001000151800004d5ef9c26 36571 3baa00000001000000000000036e7333086e6f766178657373026e6c0000260001 3baa80000001000000030003036e7333086e6f766178657373026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d5c98015c03f00010001000151800004d5c9bf12c00c00010001000151800004d5ef9c26 36572 a52c00000001000000000000037777770b6465706f6d7061646f7572026e6c0000010001 a52c80000001000000030001037777770b6465706f6d7061646f7572026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 36573 9c8400000001000000000000086f6d726f70667279066e7434616c6c026e6c0000010001 9c8480000001000000020002086f6d726f70667279066e7434616c6c026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000d036e733206787334616c6cc01cc03000010001000151800004c26d3402c04100010001000151800004c26d0963 36574 cc6a00000001000000000000046d61696c03617372024e4c0000010001 cc6a80000001000000020000046d61696c03617372024e4c0000010001c01100020001000151800015036e73310b656e65726769732d696463036e657400c01100020001000151800006036e7332c02d 36575 a428000000010000000000000570657472690c706c61736d6161727261616b026e6c0000010001 a428800000010000000200020570657472690c706c61736d6161727261616b026e6c0000010001c01200020001000151800009036e733102696fc01fc01200020001000151800006036e7332c037c0330001000100015180000451112102c0480001000100015180000451112202 36576 e35b00000001000000000000036e733109736974656279746573026e6c0000010001 e35b80000001000000030003036e733109736974656279746573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c2a55e5ac03c00010001000151800004c356781cc04e000100010001518000043ec58016 36577 155b0000000100000000000006696e697a696f026e6c0000010001 155b8000000100000002000006696e697a696f026e6c0000010001c00c0002000100015180000e036e73310464646e68036e657400c00c00020001000151800006036e7332c02b 36578 3518000000010000000000000f696e666f726d617469656b616d6572026e6c00000f0001 3518800000010000000200020f696e666f726d617469656b616d6572026e6c00000f0001c00c0002000100015180000a036e7331036e7873c01cc00c00020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 36579 806800000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 806880000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 36580 45c800000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 45c880000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 36581 1e2000000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 1e2080000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 36582 1a620000000100000000000003777777066e6179757461026e6c0000010001 1a628000000100000002000203777777066e6179757461026e6c0000010001c01000020001000151800006036e7336c010c01000020001000151800006036e7335c010c02b0001000100015180000451144410c03d000100010001518000043dd5ab66 36583 473900000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 473980000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 36584 c7e800000001000000000000036e733104686f6d65026e6c0000010001 c7e880000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 36585 01c9000000010000000000000a636974726f656e616972026e6c00000f0001c0 01c9800000010000000300020a636974726f656e616972026e6c00000f0001c00c0002000100015180000f036e7331086d6f76656e657874c017c00c00020001000151800006036e7332c02fc00c00020001000151800012036e7333086d6f76656e657874036e657400c02b00010001000151800004d4ccc445c04600010001000151800004d4ccf745 36586 735e00000001000000000000036e73300873757265686f7374026e6c0000010001 735e80000001000000020002036e73300873757265686f7374026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c019c01000020001000151800006036e7331c031c02d00010001000151800004c3eaad40c04700010001000151800004c3eaad41 36587 809500000001000000000000036e73310873757265686f7374026e6c0000010001 809580000001000000020002036e73310873757265686f7374026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c019c01000020001000151800006036e7331c031c02d00010001000151800004c3eaad40c04700010001000151800004c3eaad41 36588 82b3000000010000000000000474736d730f72656d6f74652d6469656e7374656e026e6c00001c0001 82b3800000010000000200020474736d730f72656d6f74652d6469656e7374656e026e6c00001c0001c01100020001000151800012036e73310b7669616e6574776f726b73c021c01100020001000151800006036e7332c039c03500010001000151800004d43d0f08c05300010001000151800004d43d19e2 36589 29f500000001000000000000026e7306787334616c6c026e6c0000010001 29f580000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 36590 b8d400000001000000000000036e733206787334616c6c026e6c0000010001 b8d480000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 36591 fd1300000001000000000000086e732d69736d30310963617067656d696e69026e6c0000010001 fd1380000001000000030003086e732d69736d30310963617067656d696e69026e6c0000010001c01500020001000151800007046e736531c015c01500020001000151800007046e736532c015c01500020001000151800002c00cc03300010001000151800004c6b8e70dc04600010001000151800004c6b8e70cc00c00010001000151800004d5f4a024 36592 9f8900100001000000000001076e696b68656668066e696b686566026e6c00000100010000290800000080000000 9f8980000001000000040003076e696b68656668066e696b686566026e6c0000010001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c7040000291000000000000000 36593 d5030000000100000000000005646e732d31056c61646f74026e6c0000010001 d5038000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36594 47bb0000000100000000000005646e732d32056c61646f74026e6c0000010001 47bb8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36595 f970000000010000000000001276656e656d61636f6d6d756e696361746965026e6c00000f0001 f970800000010000000200001276656e656d61636f6d6d756e696361746965026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c03a 36596 01a5000000010000000000001276656e656d61636f6d6d756e696361746965026e6c00000f0001 01a5800000010000000200001276656e656d61636f6d6d756e696361746965026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c03a 36597 646f00000001000000000000046d61696c06692d7265616c026e6c0000010001 646f80000001000000020000046d61696c06692d7265616c026e6c0000010001c0110002000100015180001806706c75746f320b706c617a612d696e746572036e657400c01100020001000151800009066465696d6f73c033 36598 a14f00000001000000000000037777771061646479636f7273746961656e73656e026e6c0000010001 a14f80000001000000030001037777771061646479636f7273746961656e73656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc021c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c053c035000100010001518000043efa0202 36599 90a700000001000000000000066772656e636f026e6c00000f0001 90a780000001000000020000066772656e636f026e6c00000f0001c00c0002000100015180001404646e7331096c70636f6e73756c74036e657400c00c0002000100015180000704646e7332c02c 36600 5450000000010000000000000b6d61696c72656c6179683103636273026e6c0000010001 5450800000010000000300020b6d61696c72656c6179683103636273026e6c0000010001c0180002000100015180000805646e736831c018c0180002000100015180000805646e736832c018c0180002000100015180000b026e73026e6c036e657400c03000010001000151800004c1acf4ccc04400010001000151800004c1acf4cd 36601 c1ce0000000100000000000003777777076d797374617473026e6c0000010001 c1ce8000000100000002000203777777076d797374617473026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa404c04900010001000151800004d5efa405 36602 c3cb00000001000000000000034e533205414d415a45024e4c0000010001 c3cb80000001000000020002034e533205414d415a45024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004c26d6d05c00c00010001000151800004d4ccc0f2 36603 0fd200000001000000000000024e5305414d415a45024e4c0000010001 0fd280000001000000020002024e5305414d415a45024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004c26d6d05c03700010001000151800004d4ccc0f2 36604 569200000001000000000000024e5305414d415a45024e4c00001c0001 569280000001000000020002024e5305414d415a45024e4c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004c26d6d05c03700010001000151800004d4ccc0f2 36605 b9e4000000010000000000000776657273696f6e0462696e640000100003 b9e4800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 36606 0dcd0000000100000000000002383302363403313438033230360770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 0dcd8000000100000002000202383302363403313438033230360770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 36607 87f80000000100000000000004777777320974656c656772616166026e6c0000010001 87f88000000100000002000004777777320974656c656772616166026e6c0000010001c01100020001000151800013036e73300974656c656772616166036e657400c01100020001000151800006036e7331c033 36608 b612000000010000000000000377777709717569636b626f7973026e6c0000010001 b612800000010000000200000377777709717569636b626f7973026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01ac0100002000100015180000704686e7331c033 36609 db6100000001000000000000037777770667612c657273026e6c0000010001 db6184030001000000010000037777770667612c657273026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 36610 e36200000001000000000000037777770b646972656374776f6e656e026e6c0000010001 e36280000001000000020000037777770b646972656374776f6e656e026e6c0000010001c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec037 36611 938e00000001000000000000036e73310b776f726c646f6e6c696e65026e6c0000010001 938e80000001000000030002036e73310b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 36612 975100000001000000000000036e7331096e65746e6174696f6e026e6c0000010001 975180000001000000020002036e7331096e65746e6174696f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efb105c03c00010001000151800004505faa0a 36613 f68300000001000000000000036e7331096e65746e6174696f6e026e6c0000260001 f68380000001000000020002036e7331096e65746e6174696f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efb105c03c00010001000151800004505faa0a 36614 f2cc00000001000000000000036e7332096e65746e6174696f6e026e6c0000010001 f2cc80000001000000020002036e7332096e65746e6174696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5efb105c00c00010001000151800004505faa0a 36615 796600000001000000000000036e7332096e65746e6174696f6e026e6c0000260001 796680000001000000020002036e7332096e65746e6174696f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5efb105c00c00010001000151800004505faa0a 36616 049b00000001000000000000076e696b68656668066e696b686566026e6c0000010001 049b80000001000000040002076e696b68656668066e696b686566026e6c0000010001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c704 36617 751200000001000000000000046d61696c0b6b61617274656e68756973026e6c0000010001 751280000001000000030003046d61696c0b6b61617274656e68756973026e6c0000010001c01100020001000151800009036e7331027a73c01dc01100020001000151800006036e7332c035c01100020001000151800006036e7333c035c03100010001000151800004d5ef829fc04600010001000151800004d5ef8005c05800010001000151800004d5ef82a0 36618 101d000000010000000000000377777709736178747261646572026e6c0000010001 101d800000010000000200020377777709736178747261646572026e6c0000010001c01000020001000151800009036e7331026973c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5852102c04300010001000151800004d5c41503 36619 7af2000000010000000000000377777706736f70686f73026e6c0000010001 7af2800000010000000300010377777706736f70686f73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 36620 330500000001000000000000036e733503777873026e6c0000010001 330580000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 36621 5b7f000000010000000000000474657374086d61696c73657276026e6c0000010001 5b7f800000010000000200020474657374086d61696c73657276026e6c0000010001c0110002000100015180000c026e73067574722d6978c01ac01100020001000151800006036e7332c031c02e0001000100015180000451113206c04600010001000151800004d5c42806 36622 591b00000001000000000000036e73320b636f6e766f6c7574696f6e026e6c0000010001 591b80000001000000020002036e73320b636f6e766f6c7574696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d9477a29c00c00010001000151800004d9477a2a 36623 b6e000000001000000000000036e73310b636f6e766f6c7574696f6e026e6c0000010001 b6e080000001000000020002036e73310b636f6e766f6c7574696f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9477a29c03e00010001000151800004d9477a2a 36624 ddae0000000100000000000003777777136f7665726865696473696e666f726d61746965026e6c0000010001 ddae8000000100000002000203777777136f7665726865696473696e666f726d61746965026e6c0000010001c0100002000100015180000a036e733303736475c024c01000020001000151800013036e73320c636f6c742d74656c65636f6dc024c03800010001000151800004d5d0ce07c04e00010001000151800004d44ea00e 36625 2db20000000100000000000003777777136f7665726865696473696e666f726d61746965026e6c0000010001 2db28000000100000002000203777777136f7665726865696473696e666f726d61746965026e6c0000010001c0100002000100015180000a036e733303736475c024c01000020001000151800013036e73320c636f6c742d74656c65636f6dc024c03800010001000151800004d5d0ce07c04e00010001000151800004d44ea00e 36626 f8bd0000000100000000000007676568616d6965026e6c0000010001 f8bd8000000100000002000007676568616d6965026e6c0000010001c00c00020001000151800013026e730a6e61616d736572766572036e657400c00c00020001000151800006036e7331c02b 36627 7ec60000000100000000000004646e733208636f6e6365707473026e6c0000010001 7ec68000000100000002000204646e733208636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac01100020001000151800002c00cc02e00010001000151800004d5c51c03c00c00010001000151800004d5c51e1c 36628 c6720000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c6728000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36629 4b640000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 4b648000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36630 481200000001000000000000037777770867737866636c7562026e6c0000010001 481280000001000000020000037777770867737866636c7562026e6c0000010001c0100002000100015180000c026e7306766576696461c019c01000020001000151800006036e7332c030 36631 b63600000001000000000000036e733106776964657873026e6c0000010001 b63680000001000000030002036e733106776964657873026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa0703 36632 bffe00000001000000000000037777770b6b6f7274696e6773626f6e026e6c0000010001 bffe80000001000000020002037777770b6b6f7274696e6773626f6e026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c01cc01000020001000151800006036e7332c033c03000010001000151800004d9aa2042c04900010001000151800004d9aa2c06 36633 7b2a00000001000000000000046c6f6e74026e6c0000010001 7b2a80000001000000020000046c6f6e74026e6c0000010001c00c00020001000151800017036e73310d6373732d6970636f6e6e65637403636f6d00c00c00020001000151800006036e7332c029 36634 7db2000000010000000000000377777705676f6f6c65026e6c0000010001 7db2800000010000000200020377777705676f6f6c65026e6c0000010001c0100002000100015180000e04646e7331066d706f776572c016c0100002000100015180000704646e7332c02fc02a00010001000151800004d5efb106c04400010001000151800004505faa55 36635 8bfc0000000100000000000003636273026e6c00000f0001 8bfc8000000100000003000203636273026e6c00000f0001c00c0002000100015180000805646e736831c00cc00c0002000100015180000805646e736832c00cc00c0002000100015180000b026e73026e6c036e657400c02400010001000151800004c1acf4ccc03800010001000151800004c1acf4cd 36636 068200000001000000000000026e7306766576696461026e6c0000010001 068280000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 36637 834100000001000000000000026e7306766576696461026e6c0000260001 834180000001000000030002026e7306766576696461026e6c0000260001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 36638 698100000001000000000000036e733206766576696461026e6c0000010001 698180000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 36639 21c300000001000000000000046d61696c05706c616e74026e6c00001c0001 21c380000001000000020002046d61696c05706c616e74026e6c00001c0001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02b00010001000151800004d59f0037c03c00010001000151800004d59f0046 36640 319d00000001000000000000046d61696c05706c616e74026e6c0000260001 319d80000001000000020002046d61696c05706c616e74026e6c0000260001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02b00010001000151800004d59f0037c03c00010001000151800004d59f0046 36641 5e8800000001000000000000036e733206766576696461026e6c0000260001 5e8880000001000000030002036e733206766576696461026e6c0000260001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 36642 74be00000001000000000000037777770b706f73747374656d70656c026e6c0000010001 74be80000001000000030000037777770b706f73747374656d70656c026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733032c035c01000020001000151800007046e733033c035 36643 279b000000010000000000000a736f2d73747564696f73026e6c00000f0001 279b800000010000000200000a736f2d73747564696f73026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c032 36644 8ded00000001000000000000037777771162616467617374656e746f65726e6f6f69026e6c0000010001 8ded80000001000000020000037777771162616467617374656e746f65726e6f6f69026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03c 36645 f62200000001000000000000046578706f0474657261026e6c0000010001 f62280000001000000030002046578706f0474657261026e6c0000010001c0110002000100015180000d036e733106776964657873c016c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 36646 443200000001000000000000036d736e09747765616b7a6f6e65026e6c0000010001 443280000001000000020000036d736e09747765616b7a6f6e65026e6c0000010001c01000020001000151800014036e73310a646f6c7068696e2d6973036e657400c01000020001000151800006036e7332c032 36647 36f6000000010000000000000977696e6b656c616172026e6c00000f0001 36f6800000010000000200010977696e6b656c616172026e6c00000f0001c00c00020001000151800009026e73036e6667c016c00c0002000100015180000d036e733306636f62776562c016c02a00010001000151800004c26dd603 36648 a4470000000100000000000005646e732d31056c61646f74026e6c0000010001 a4478000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36649 b2bc0000000100000000000004686f6d6f026e6c00000f0001 b2bc8000000100000002000004686f6d6f026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c028 36650 a92e000000010000000000000b646f6e676572616465656c026e6c00000f0001 a92e800000010000000200020b646f6e676572616465656c026e6c00000f0001c00c0002000100015180000e026e73086d656761706c6578c018c00c00020001000151800006036e7331c02fc02c00010001000151800004504f6101c04600010001000151800004504f6102 36651 f147000000010000000000000c6175746f626f726465617578026e6c0000010001 f147800000010000000200020c6175746f626f726465617578026e6c0000010001c00c00020001000151800018036e7331116275696a7a65776562746563686e69656bc019c00c00020001000151800006036e7332c031c02d0001000100015180000450f7c551c0510001000100015180000450f7c558 36652 f05800000001000000000000036e7331116275696a7a65776562746563686e69656b026e6c00001c0001 f05880000001000000020002036e7331116275696a7a65776562746563686e69656b026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450f7c551c0440001000100015180000450f7c558 36653 3cd000000001000000000000036e7331116275696a7a65776562746563686e69656b026e6c0000260001 3cd080000001000000020002036e7331116275696a7a65776562746563686e69656b026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450f7c551c0440001000100015180000450f7c558 36654 e2ce00000001000000000000036e7332116275696a7a65776562746563686e69656b026e6c00001c0001 e2ce80000001000000020002036e7332116275696a7a65776562746563686e69656b026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0360001000100015180000450f7c551c00c0001000100015180000450f7c558 36655 533e00000001000000000000036e7332116275696a7a65776562746563686e69656b026e6c0000260001 533e80000001000000020002036e7332116275696a7a65776562746563686e69656b026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0360001000100015180000450f7c551c00c0001000100015180000450f7c558 36656 206400000001000000000000037777770f6e61747575726c696a6b6e61616b74026e6c0000010001 206480000001000000030003037777770f6e61747575726c696a6b6e61616b74026e6c0000010001c01000020001000151800010036e733109736974656279746573c020c01000020001000151800006036e7332c038c01000020001000151800006036e7333c038c03400010001000151800004c2a55e5ac05000010001000151800004c356781cc062000100010001518000043ec58016 36657 b9e90000000100000000000003777777076a6f6a612d736d026e6c0000010001 b9e98000000100000002000203777777076a6f6a612d736d026e6c0000010001c01000020001000151800012036e73310b737461727464657369676ec018c01000020001000151800006036e7332c030c02c00010001000151800004d5f73823c04a000100010001518000043ed45149 36658 199e000000010000000000000477777732047a6f656b026e6c0000010001 199e800000010000000200020477777732047a6f656b026e6c0000010001c0110002000100015180000d026e73076e65746c616e64c016c01100020001000151800006036e7332c02dc02a00010001000151800004d9aa2042c04300010001000151800004d9aa2c06 36659 ecfc000000010000000000000868756d616e6e6574026e6c0000010001 ecfc800000010000000200000868756d616e6e6574026e6c0000010001c00c00020001000151800016036e73310c656967656e2d646f6d65696e036e657400c00c00020001000151800006036e7332c02d 36660 c83700000001000000000000037777771067726166697363687765656b626c6164026e6c0000010001 c83780000001000000020000037777771067726166697363687765656b626c6164026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c03c 36661 33b200000001000000000000036d783104696e666f026e6c0000010001 33b280000001000000020002036d783104696e666f026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02900010001000151800004504fc020c03b00010001000151800004504fc021 36662 67ad00000001000000000000036e7332076e656473746174026e6c0000010001 67ad80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36663 d53400000001000000000000036e7334076e656473746174026e6c0000010001 d53480000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36664 6b8a000000010000000000000377777709746563686e69636f6e026e6c0000010001 6b8a800000010000000200020377777709746563686e69636f6e026e6c0000010001c01000020001000151800010026e730a666c7569746d65646961c01ac01000020001000151800006036e7332c031c02e0001000100015180000451045c78c04a0001000100015180000451046032 36665 d7b1000000010000000000000776697a7a617669026e6c0000ff0001 d7b1800000010000000300010776697a7a617669026e6c0000ff0001c00c00020001000151800005026e73c00cc00c0002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c00c00020001000151800007046e733038c03ec028000100010001518000043e48df58 36666 1bca00000001000000000000037777770d6765696c6573747564656e7465026e6c0000010001 1bca80000001000000020000037777770d6765696c6573747564656e7465026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c035 36667 634800000001000000000000046d61696c0d636f6e646f7263617270657473026e6c0000010001 634880000001000000020002046d61696c0d636f6e646f7263617270657473026e6c0000010001c01100020001000151800010046e736531086c6f636f736f6674c01fc0110002000100015180000d036e73320663617374656cc01fc03300010001000151800004c3238d44c04f00010001000151800004c3558245 36668 129200000001000000000000036e7339056972637873026e6c0000010001 129280000001000000020002036e7339056972637873026e6c0000010001c01000020001000151800012036e73310b7465636874726f6e696373c016c01000020001000151800006036e7332c02ec02a0001000100015180000451ab6402c0480001000100015180000451ab6414 36669 eb8e00000001000000000000036e7338056972637873026e6c0000010001 eb8e80000001000000020002036e7338056972637873026e6c0000010001c01000020001000151800012036e73310b7465636874726f6e696373c016c01000020001000151800006036e7332c02ec02a0001000100015180000451ab6402c0480001000100015180000451ab6414 36670 74ca0000000100000000000003777777077a656b6174656c026e6c0000010001 74ca8000000100000002000203777777077a656b6174656c026e6c0000010001c01000020001000151800010026e730a7a65656c616e646e6574c018c01000020001000151800006036e7332c02fc02c00010001000151800004d473c0c1c04800010001000151800004d473c0c3 36671 74140000000100000000000006636f6e66696f026e6c0000010001 74148000000100000003000106636f6e66696f026e6c0000010001c00c0002000100015180000d026e7307696e746f756368c013c00c00020001000151800010026e7307696e746f756368036e657400c00c00020001000151800007046e733031c043c02700010001000151800004d413c001 36672 f72c28000001000000010000026e6c0000060001085f6b706173737764045f75647007686f6c70726f63026e6c000021000100000258001a0000006401d0077362733230303007686f6c70726f63026e6c00 f72ca8040000000000000000 36673 666900000001000000000000036e733206787334616c6c026e6c0000010001 666980000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 36674 7b8600000001000000000000036e7338056972637873026e6c00001c0001 7b8680000001000000020002036e7338056972637873026e6c00001c0001c01000020001000151800012036e73310b7465636874726f6e696373c016c01000020001000151800006036e7332c02ec02a0001000100015180000451ab6402c0480001000100015180000451ab6414 36675 1dcc00000001000000000000036e7338056972637873026e6c0000260001 1dcc80000001000000020002036e7338056972637873026e6c0000260001c01000020001000151800012036e73310b7465636874726f6e696373c016c01000020001000151800006036e7332c02ec02a0001000100015180000451ab6402c0480001000100015180000451ab6414 36676 e6fd00000001000000000000036e7339056972637873026e6c00001c0001 e6fd80000001000000020002036e7339056972637873026e6c00001c0001c01000020001000151800012036e73310b7465636874726f6e696373c016c01000020001000151800006036e7332c02ec02a0001000100015180000451ab6402c0480001000100015180000451ab6414 36677 634f00000001000000000000036e7339056972637873026e6c0000260001 634f80000001000000020002036e7339056972637873026e6c0000260001c01000020001000151800012036e73310b7465636874726f6e696373c016c01000020001000151800006036e7332c02ec02a0001000100015180000451ab6402c0480001000100015180000451ab6414 36678 41660000000100000000000003647365026e6c00000f0001 41668000000100000002000203647365026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 36679 a9af00000001000000000000036e73310974656c656b6162656c026e6c0000010001 a9af80000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 36680 0b1b0000000100000000000004686f6d6508636f6e6365707473026e6c0000010001 0b1b8000000100000002000204686f6d6508636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac0110002000100015180000704646e7332c011c02e00010001000151800004d5c51c03c04b00010001000151800004d5c51e1c 36681 5765000000010000000000000861737369676d6131096166617367726f6570026e6c0000010001 5765800000010000000200010861737369676d6131096166617367726f6570026e6c0000010001c0150002000100015180001008696e7465726e65740461666173c01fc0150002000100015180000b026e73026e6c036e657400c03300010001000151800004c2e5dc93 36682 101400000001000000000000096c6965666572696e6b026e6c0000020001 101480000001000000020002096c6965666572696e6b026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 36683 91cf00000001000000000000037777770776616e746f6c6c026e6c0000010001 91cf80000001000000020002037777770776616e746f6c6c026e6c0000010001c0100002000100015180000f026e7309656174736572766572c018c01000020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 36684 84b60000000100000000000006666174696d6103646473026e6c00001c0001 84b68000000100000003000306666174696d6103646473026e6c00001c0001c01300020001000151800017036e733110736361726c65742d696e7465726e6574c017c01300020001000151800006036e7332c02fc01300020001000151800006036e7333c02fc02b00010001000151800004d5ccc302c04e00010001000151800004d5ccc303c06000010001000151800004c277e953 36685 560f0000000100000000000003777777096861707079686f6d65026e6c0000010001 560f8000000100000003000103777777096861707079686f6d65026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 36686 a1a600000001000000000000086d6f6c627572656e026e6c00000f0001 a1a680000001000000020002086d6f6c627572656e026e6c00000f0001c00c0002000100015180000b04646e733103706572c015c00c0002000100015180000704646e7332c02ec02900010001000151800004d55418c0c04000010001000151800004507f9842 36687 791000000001000000000000037777770473696476026e6c0000010001 791080000001000000020002037777770473696476026e6c0000010001c0100002000100015180000e026e73086d656761706c6578c015c01000020001000151800006036e7331c02cc02900010001000151800004504f6101c04300010001000151800004504f6102 36688 247700000001000000000000046d61696c0f636c617564696f2d66657272696369026e6c0000010001 247780000001000000020000046d61696c0f636c617564696f2d66657272696369026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c03b 36689 2a8c00000001000000000000037777770679656c6c6f77026e6c0000010001 2a8c80000001000000030001037777770679656c6c6f77026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 36690 4f580000000100000000000003373635026e6c00000f0001 4f588403000100000001000003373635026e6c00000f0001c01000060001000038400036026e730f646f6d61696e2d7265676973747279c0100a686f73746d6173746572c0270bf1e540000070800000384000278d0000003840 36691 0000000070024000ee6c0000020405b401010402 000080010000000000000000 36692 ef7b000000010000000000000377777707616d6174657572026e6c0000010001 ef7b800000010000000200020377777707616d6174657572026e6c0000010001c0100002000100015180000b036e7331046e732d31c018c01000020001000151800006036e7332c030c02c000100010001518000045045a0cdc04300010001000151800004d4cceec8 36693 19de00000001000000000000036e7332027575026e6c0000010001 19de80000001000000040004036e7332027575026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c013c01000020001000151800006036e7333c010c0270001000100015180000483d30405c00c0001000100015180000483d30406c04600010001000151800004c0576a65c0600001000100015180000483d31020 36694 2cc300000001000000000000076d696e62757a61026e6c0000ff0001 2cc380000001000000020001076d696e62757a61026e6c0000ff0001c00c0002000100015180000b087374617267617465c00cc00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004d535a3d2 36695 b5d100000001000000000000026e73076e656473746174026e6c00001c0001 b5d180000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 36696 3cca00000001000000000000026e73076e656473746174026e6c0000260001 3cca80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 36697 3ba500000001000000000000036e7332076e656473746174026e6c0000010001 3ba580000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36698 bc2600000001000000000000036e7332076e656473746174026e6c00001c0001 bc2680000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36699 2ec200000001000000000000036e7332076e656473746174026e6c0000260001 2ec280000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36700 67fc00000001000000000000036e7333076e656473746174026e6c00001c0001 67fc80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 36701 c3a100000001000000000000036e7333076e656473746174026e6c0000260001 c3a180000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 36702 47e100000001000000000000036e7334076e656473746174026e6c0000010001 47e180000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36703 52d300000001000000000000036e7334076e656473746174026e6c00001c0001 52d380000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36704 07400000000100000000000003777777087261646f70353338026e6c0000010001 07408403000100000001000003777777087261646f70353338026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 36705 6d6800000001000000000000036e7334076e656473746174026e6c0000260001 6d6880000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36706 0b0b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 0b0b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36707 b77479f150104470e54a0000000000000000 b774f9f40000000000000000 36708 b77479f150184470b9b70000008d453c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403b01d7403c535700030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053425332303030484f4c50524f430000 b774f9f40000000000000000 36709 b01300000001000000000000036e733110736361726c65742d696e7465726e6574026e6c00001c0001 b01380000001000000030003036e733110736361726c65742d696e7465726e6574026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ccc302c04300010001000151800004d5ccc303c05500010001000151800004c277e953 36710 c93100000001000000000000036e733110736361726c65742d696e7465726e6574026e6c0000260001 c93180000001000000030003036e733110736361726c65742d696e7465726e6574026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ccc302c04300010001000151800004d5ccc303c05500010001000151800004c277e953 36711 788500000001000000000000036e733210736361726c65742d696e7465726e6574026e6c00001c0001 788580000001000000030003036e733210736361726c65742d696e7465726e6574026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03500010001000151800004d5ccc302c00c00010001000151800004d5ccc303c05500010001000151800004c277e953 36712 518b00000001000000000000036e733210736361726c65742d696e7465726e6574026e6c0000260001 518b80000001000000030003036e733210736361726c65742d696e7465726e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03500010001000151800004d5ccc302c00c00010001000151800004d5ccc303c05500010001000151800004c277e953 36713 87d000000001000000000000036e733310736361726c65742d696e7465726e6574026e6c00001c0001 87d080000001000000030003036e733310736361726c65742d696e7465726e6574026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03500010001000151800004d5ccc302c04700010001000151800004d5ccc303c00c00010001000151800004c277e953 36714 ab4700000001000000000000036e733310736361726c65742d696e7465726e6574026e6c0000260001 ab4780000001000000030003036e733310736361726c65742d696e7465726e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03500010001000151800004d5ccc302c04700010001000151800004d5ccc303c00c00010001000151800004c277e953 36715 be3f000000010000000000000c47454c4445524d414c53454e0867656d65656e74650c67656c6465726d616c73656e026e6c0000010001 be3f800000010000000200020c47454c4445524d414c53454e0867656d65656e74650c67656c6465726d616c73656e026e6c0000010001c02200020001000151800005026e73c022c02200020001000151800006036e7332c022c04300010001000151800004c143b9b5c05400010001000151800004c143b9b6 36716 05870000000100000000000003777777127676767363686965726d6f6e6e696b6f6f67026e6c0000010001 05878000000100000002000203777777127676767363686965726d6f6e6e696b6f6f67026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec023c01000020001000151800006036e7332c03bc03700010001000151800004c29f4906c04f00010001000151800004c29fb004 36717 04f700000001000000000000036e733203617474026e6c0000010001 04f780000001000000020002036e733203617474026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 36718 b77479ff50114462e4ba0000000000000000 b774f9f40000000000000000 36719 23b500000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c0000010001 23b580000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 36720 7b020000000100000000000006667265656572026e6c00000f0001 7b028403000100000001000006667265656572026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 36721 35800000000100000000000009652d6c756e61746963026e6c0000010001 35808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36722 7a6d00000001000000000000036e73310a77696e6465736865696d026e6c0000260001 7a6d80000001000000020002036e73310a77696e6465736865696d026e6c0000260001c01000020001000151800002c00cc0100002000100015180000e036e733207737572666e6574c01bc00c00010001000151800004912ce410c03d00010001000151800004c0572402 36723 db410000000100000000000006686162756661026e6c00000f0001 db418000000100000002000006686162756661026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c032 36724 3635000000010000000000000f7a657a696a6e6f6f6b6c656c696a6b026e6c0000010001 3635840300010000000100000f7a657a696a6e6f6f6b6c656c696a6b026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 36725 b7747a0050104462e4b90000000000000000 b774fa040000000000000000 36726 8c750000000100000000000007726f6f6d706f74026e6c0000010001 8c758000000100000002000007726f6f6d706f74026e6c0000010001c00c00020001000151800010026e730a696275696c64696e6773c014c00c0002000100015180000b026e73026e6c036e657400 36727 b9b700000001000000000000037777770b6e6577706f7274626c7565026e6c0000010001 b9b780000001000000020000037777770b6e6577706f7274626c7565026e6c0000010001c0100002000100015180000c026e7306766576696461c01cc01000020001000151800006036e7332c033 36728 218200000001000000000000037777770e6d6161736c616e64626568656572026e6c0000010001 218280000001000000030000037777770e6d6161736c616e64626568656572026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c037c01000020001000151800006036e7333c037 36729 00ce00000001000000000000037777770d6765626f6f7274656b61617274026e6c0000010001 00ce80000001000000020002037777770d6765626f6f7274656b61617274026e6c0000010001c01000020001000151800009036e7331026973c01ec01000020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 36730 36e400000001000000000000026e73076e65746c616e64026e6c0000010001 36e480000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 36731 14cb00000001000000000000026e730a696275696c64696e6773026e6c0000010001 14cb80000001000000030002026e730a696275696c64696e6773026e6c0000010001c00f0002000100015180000d036e733106776964657873c01ac00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 36732 146800000001000000000000026e730a696275696c64696e6773026e6c0000260001 146880000001000000030002026e730a696275696c64696e6773026e6c0000260001c00f0002000100015180000d036e733106776964657873c01ac00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 36733 75550000000100000000000005646e732d31056c61646f74026e6c0000010001 75558000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36734 1cec0000000100000000000005646e732d32056c61646f74026e6c0000010001 1cec8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36735 337200000001000000000000036e73340767617574656e67026e6c0000010001 337280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36736 137e00000001000000000000036e73340767617574656e67026e6c0000010001 137e80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36737 be9900000001000000000000066a6f73687561076265616e2d6974026e6c00000f0001 be9980000001000000020002066a6f73687561076265616e2d6974026e6c00000f0001c0130002000100015180000c036e7331056e6574636fc01bc01300020001000151800006036e7332c033c02f00010001000151800004c26d4a82c04700010001000151800004c26dd146 36738 0e240000000100000000000003626c3102626c06787334616c6c026e6c0000010001 0e248000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36739 1f80000000010000000000000734657665727931026e6c00000f0001 1f80800000010000000200010734657665727931026e6c00000f0001c00c00020001000151800009026e730365646ec014c00c00020001000151800010036e733109756e69736f75726365c014c028000100010001518000043e3a51e4 36740 7e9400000001000000000000037777770c6265747465726265676f6f64026e6c0000010001 7e9480000001000000020002037777770c6265747465726265676f6f64026e6c0000010001c0100002000100015180000d026e730773616d686f7564c01dc0100002000100015180000b036e73610462797465c01dc03100010001000151800004d5c98963c04a00010001000151800004d977e520 36741 799a00000001000000000000036e73330568616c6d61026e6c0000010001 799a80000001000000020002036e73330568616c6d61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02a00010001000151800004d4ccd1f1c03c00010001000151800004d4ccd1fa 36742 9e6800000001000000000000037777770766726565736578026e6c0000010001 9e6880000001000000020000037777770766726565736578026e6c0000010001c01000020001000151800009036e7331023161c018c01000020001000151800006036e7332c030 36743 e8d90000000100000000000104706f7032076575726f6e6574026e6c00000100010000291000000000000000 e8d98000000100000002000204706f7032076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c28600430000291000000000000000 36744 745e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 745e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36745 52fc00000001000000000000037777770774726962696f6e026e6c0000010001 52fc80000001000000020002037777770774726962696f6e026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec018c01000020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 36746 81e5000000010000000000000a6970353033636339343605737065656406706c616e6574026e6c00000f0001 81e5800000010000000300030a6970353033636339343605737065656406706c616e6574026e6c00000f0001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 36747 8f1000000001000000000000037777770d72656164657273646967657374026e6c0000010001 8f1080000001000000020000037777770d72656164657273646967657374026e6c0000010001c0100002000100015180000c036e723405692d702d64c01ec01000020001000151800006036e7236c036 36748 3b8e000000010000000000000565706f6e61026e6c00000f0001 3b8e800000010000000200020565706f6e61026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c012c00c00020001000151800006036e7332c02ac02600010001000151800004d43d0f08c04400010001000151800004d43d19e2 36749 491900000001000000000000037777770a63656e747265686f6c64026e6c0000010001 491980000001000000020002037777770a63656e747265686f6c64026e6c0000010001c0100002000100015180001104646e733109696e7465726f757465c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d4173f3ec04c00010001000151800004d4173f3d 36750 296e00000001000000000000036e73310b6368616d69646d65646961026e6c0000010001 296e80000001000000020002036e73310b6368616d69646d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c0453fc03e0001000100015180000452c04540 36751 ba7400000001000000000000036e73320b6368616d69646d65646961026e6c0000010001 ba7480000001000000020002036e73320b6368616d69646d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0300001000100015180000452c0453fc00c0001000100015180000452c04540 36752 943100000001000000000000026e73056e65726f63026e6c0000010001 943180000001000000020002026e73056e65726f63026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d434010ac03700010001000151800004d434000a 36753 7f4d00000001000000000000037777770967656d6e6574637370026e6c0000010001 7f4d80000001000000020002037777770967656d6e6574637370026e6c0000010001c0100002000100015180000e026e73086d656761706c6578c01ac01000020001000151800006036e7331c031c02e00010001000151800004504f6101c04800010001000151800004504f6102 36754 3d0f00000001000000000000036e7332056e65726f63026e6c0000010001 3d0f80000001000000020002036e7332056e65726f63026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d434010ac00c00010001000151800004d434000a 36755 88aa00000001000000000000036e7332056e65726f63026e6c00001c0001 88aa80000001000000020002036e7332056e65726f63026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d434010ac00c00010001000151800004d434000a 36756 023100000001000000000000036e7332056e65726f63026e6c0000260001 023180000001000000020002036e7332056e65726f63026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d434010ac00c00010001000151800004d434000a 36757 2aa700000001000000000000026e73056e65726f63026e6c00001c0001 2aa780000001000000020002026e73056e65726f63026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d434010ac03700010001000151800004d434000a 36758 396c00000001000000000000026e73056e65726f63026e6c0000260001 396c80000001000000020002026e73056e65726f63026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d434010ac03700010001000151800004d434000a 36759 e85c0000000100000000000003777777146f7665727761617264652d666c657878706c616e026e6c0000010001 e85c8000000100000002000003777777146f7665727761617264652d666c657878706c616e026e6c0000010001c01000020001000151800011036e73310a6d61696e736572766572c025c01000020001000151800006036e7332c03d 36760 5a9900000001000000000000046d61696c056e65726f63026e6c0000010001 5a9980000001000000020002046d61696c056e65726f63026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02b00010001000151800004d434010ac03c00010001000151800004d434000a 36761 6c9e000000010000000000000776657273696f6e0462696e640000100003 6c9e800000010001000000000776657273696f6e0462696e640000100003c00c0010000300000000000a094e534420332e302e30 36762 e8d90000000100000000000004706f7032076575726f6e6574026e6c0000010001 e8d98000000100000002000104706f7032076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 36763 adde00100001000000000001036e733108776f726c646e6574026e6c00000100010000290800000000000000 adde80000001000000030004036e733108776f726c646e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d87a0479c03b00010001000151800004d86296b6c04d00010001000151800004d9a083d10000291000000000000000 36764 4eb20000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4eb28403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 36765 6b5800100001000000000001036e733108776f726c646e6574026e6c00002600010000290800000000000000 6b5880000001000000030004036e733108776f726c646e6574026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d87a0479c03b00010001000151800004d86296b6c04d00010001000151800004d9a083d10000291000000000000000 36766 35ac00100001000000000001036e733208776f726c646e6574026e6c00000100010000290800000000000000 35ac80000001000000030004036e733208776f726c646e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d87a0479c00c00010001000151800004d86296b6c04d00010001000151800004d9a083d10000291000000000000000 36767 1ad600100001000000000001036e733208776f726c646e6574026e6c00002600010000290800000000000000 1ad680000001000000030004036e733208776f726c646e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d87a0479c00c00010001000151800004d86296b6c04d00010001000151800004d9a083d10000291000000000000000 36768 8d6b00100001000000000001036e733308776f726c646e6574026e6c00000100010000290800000000000000 8d6b80000001000000030004036e733308776f726c646e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d87a0479c03f00010001000151800004d86296b6c00c00010001000151800004d9a083d10000291000000000000000 36769 238300100001000000000001036e733308776f726c646e6574026e6c00002600010000290800000000000000 238380000001000000030004036e733308776f726c646e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d87a0479c03f00010001000151800004d86296b6c00c00010001000151800004d9a083d10000291000000000000000 36770 c49700000001000000000000055f6c646170045f746370026463065f6d73646373056c6f63616c0e6b72756c69747365727669636573026e6c0000210001 c49780000001000000020000055f6c646170045f746370026463065f6d73646373056c6f63616c0e6b72756c69747365727669636573026e6c0000210001c0270002000100015180000b036e733104706f7135c036c02700020001000151800006036e7332c04e 36771 dc5800000001000000000000037777770b6a6f6876646d65756c656e026e6c0000010001 dc5880000001000000020000037777770b6a6f6876646d65756c656e026e6c0000010001c0100002000100015180000f026e73096379626572636f6d6dc01cc01000020001000151800006036e7332c033 36772 af9a00000001000000000000037777770f616e62657267656e6d6f746f72656e026e6c0000010001 af9a80000001000000030001037777770f616e62657267656e6d6f746f72656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc020c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c052c034000100010001518000043efa0202 36773 3a190010000100000000000106696d61676573056d62757975026e6c00000100010000290800000000000000 3a198000000100000002000106696d61676573056d62757975026e6c0000010001c01300020001000151800010026e73076379736f6e657403636f6d00c01300020001000151800006036e7331c0300000291000000000000000 36774 f2b20000000100000000000006636861726973026e6c00000f0001 f2b28000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 36775 212f00000001000000000000037777770870632d6163746976026e6c0000010001 212f84030001000000010000037777770870632d6163746976026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 36776 7564000000010000000000000a74757070657277617265027330026e6c0000010001 7564800000010000000200020a74757070657277617265027330026e6c0000010001c0170002000100015180000d026e73076e656473746174c01ac01700020001000151800006036e7333c031c02e00010001000151800004d4482615c04700010001000151800004d5c4021d 36777 6d990000000100000000000006696d61676573056d62757975026e6c0000010001 6d998000000100000002000006696d61676573056d62757975026e6c0000010001c01300020001000151800010026e73076379736f6e657403636f6d00c01300020001000151800006036e7331c030 36778 e8130000000100000000000012696e7465726e65742d6f6e6465727a6f656b0477656233026e6c0000010001 e8138000000100000002000212696e7465726e65742d6f6e6465727a6f656b0477656233026e6c0000010001c01f00020001000151800006036e7331c01fc01f00020001000151800006036e7332c01fc03800010001000151800004d436240ec04a00010001000151800004c2b262ef 36779 ea6600000001000000000000036e733109626f7577666f6e6473026e6c0000010001 ea6680000001000000030000036e733109626f7577666f6e6473026e6c0000010001c01000020001000151800014036e73310a646e736d616e6167656403636f6d00c01000020001000151800006036e7334c032c01000020001000151800006036e7336c032 36780 72fd000000010000000000000377777703727464026e6c0000010001 72fd800000010000000200000377777703727464026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 36781 b8d700000001000000000000046d61696c086e65646c696e7578026e6c0000010001 b8d780000001000000030003046d61696c086e65646c696e7578026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02e00010001000151800004d5ef87d2c04000010001000151800004d5ef87d3c05200010001000151800004d5ef8005 36782 254b00000001000000000000034e533103494e47026e6c0000010001 254b80000001000000020002034e533103494e47026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 36783 f1f100000001000000000000034e533103494e47026e6c0000260001 f1f180000001000000020002034e533103494e47026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 36784 806a00000001000000000000034e533203494e47026e6c0000010001 806a80000001000000020002034e533203494e47026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 36785 403500000001000000000000034e533203494e47026e6c0000260001 403580000001000000020002034e533203494e47026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 36786 126100000001000000000000036e733306636f62776562026e6c0000010001 126180000001000000020001036e733306636f62776562026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800011026e73087363686970686f6c036e657400c02b0001000100015180000450f26001 36787 954200000001000000000000037777770a736d7574736572766572026e6c0000010001 954280000001000000020002037777770a736d7574736572766572026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01bc01000020001000151800006036e7332c033c02f00010001000151800004d5efa011c04a00010001000151800004d5efa075 36788 ba740000000100000000000003777777097475726b646f737475026e6c0000010001 ba748403000100000001000003777777097475726b646f737475026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 36789 6ae9000000010000000000000377777706636c61766973026e6c0000010001 6ae9800000010000000200000377777706636c61766973026e6c0000010001c01000020001000151800012036e73310b776f726c646f6e6c696e65c017c01000020001000151800006036e7332c02f 36790 238c00000001000000000000036e73340767617574656e67026e6c0000010001 238c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36791 fb1100100001000000000001024e530743495354524f4e024e4c00000100010000290800000080000000 fb1180000001000000020003024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f380000291000000000000000 36792 a2f000000001000000000000037777770873706f7274757261026e6c0000010001 a2f080000001000000030003037777770873706f7274757261026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 36793 28af00000001000000000000046d61696c066b6f7274686f026e6c0000010001 28af80000001000000020001046d61696c066b6f7274686f026e6c0000010001c0110002000100015180000d026e73046575726f036e657400c0110002000100015180000d026e73076575726f6e6574c018c04500010001000151800004c2860043 36794 4acd00000001000000000000037777770c6368616c657474726176656c026e6c0000010001 4acd80000001000000030003037777770c6368616c657474726176656c026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc01dc01000020001000151800006036e7332c035c01000020001000151800006036e7333c035c03100010001000151800004c1adf9c3c04b000100010001518000043e70ec3cc05d00010001000151800004c1ac0bae 36795 aab8000000010000000000000a7773746f6e7368756973026e6c0000010001 aab8800000010000000200010a7773746f6e7368756973026e6c0000010001c00c00020001000151800013036e73310c636f6e63657074732d696374c017c00c00020001000151800006036e7332c02fc04a00010001000151800004d5c51e4b 36796 82070000000100000000000003777777066e666f726365026e6c0000010001 82078000000100000002000203777777066e666f726365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b000100010001518000043ed45433c03d000100010001518000043ed45434 36797 992900000001000000000000066b616d70656e026e6c00000f0001 992980000001000000020002066b616d70656e026e6c00000f0001c00c0002000100015180000e026e73086d656761706c6578c013c00c00020001000151800006036e7331c02ac02700010001000151800004504f6101c04100010001000151800004504f6102 36798 352b0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 352b8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 36799 352c00000001000000000000056b72616e740974656c656772616166026e6c0000010001 352c80000001000000020000056b72616e740974656c656772616166026e6c0000010001c01200020001000151800013036e73300974656c656772616166036e657400c01200020001000151800006036e7331c034 36800 a08e0000000100000000000004686f6d650c636f6e63657074732d696374026e6c0000010001 a08e8000000100000002000204686f6d650c636f6e63657074732d696374026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ec01100020001000151800006036e7332c011c03200010001000151800004d5c51c03c04f00010001000151800004d5c51e4b 36801 893100000001000000000000036e73310b737461727464657369676e026e6c0000010001 893180000001000000020002036e73310b737461727464657369676e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5f73823c03e000100010001518000043ed45149 36802 486a00000001000000000000036e73320b737461727464657369676e026e6c0000010001 486a80000001000000020002036e73320b737461727464657369676e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d5f73823c00c000100010001518000043ed45149 36803 c5cc00000001000000000000036e73310b737461727464657369676e026e6c0000010001 c5cc80000001000000020002036e73310b737461727464657369676e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5f73823c03e000100010001518000043ed45149 36804 04d200000001000000000000036e73320b737461727464657369676e026e6c0000010001 04d280000001000000020002036e73320b737461727464657369676e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d5f73823c00c000100010001518000043ed45149 36805 2b1c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 2b1c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36806 4ae20000000100000000000003626c3102626c06787334616c6c026e6c0000260001 4ae28000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 36807 d63e00000001000000000000036e7332086865786f6e2d6973026e6c0000010001 d63e80000001000000020002036e7332086865786f6e2d6973026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d58527cbc00c00010001000151800004d4ccdb5b 36808 ac0d00000001000000000000036e7331086865786f6e2d6973026e6c0000010001 ac0d80000001000000020002036e7331086865786f6e2d6973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d58527cbc03b00010001000151800004d4ccdb5b 36809 c3b600000001000000000000044e414d4507574c44454c4654026e6c0000010001 c3b680000001000000020002044e414d4507574c44454c4654026e6c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c019c00c00010001000151800004910983cbc03b00010001000151800004c0576a65 36810 61db00000001000000000000044e414d4507574c44454c4654026e6c0000260001 61db80000001000000020002044e414d4507574c44454c4654026e6c0000260001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c019c00c00010001000151800004910983cbc03b00010001000151800004c0576a65 36811 9d6e0000000100000000000006686f73742d32096575726f6465636f720564656d6f6e026e6c0000010001 9d6e8000000100000003000206686f73742d32096575726f6465636f720564656d6f6e026e6c0000010001c01d00020001000151800006036e7331c01dc01d00020001000151800006036e7332c01dc01d0002000100015180000f036e73320564656d6f6e036e657400c03700010001000151800004c29f4906c04900010001000151800004c29fb004 36812 352d00000001000000000000056b72616e740974656c656772616166026e6c0000010001 352d80000001000000020000056b72616e740974656c656772616166026e6c0000010001c01200020001000151800013036e73300974656c656772616166036e657400c01200020001000151800006036e7331c034 36813 1c1600000001000000000000026d6f03726470026e6c00000f0001 1c1680000001000000020000026d6f03726470026e6c00000f0001c00f0002000100015180000b026e73026e6c036e657400c00f0002000100015180001206617574683630026e73026e6c027575c02d 36814 485e00000001000000000000024e530743495354524f4e024e4c0000010001 485e80000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 36815 7620000000010000000000000661737465636f026e6c0000010001 7620800000010000000300020661737465636f026e6c0000010001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 36816 d2430000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 d2438000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 36817 2dcb000000010000000000000b776f726c646f6e6c696e65026e6c0000ff0001 2dcb800000010000000300020b776f726c646f6e6c696e65026e6c0000ff0001c00c0002000100015180000f04616e73310774697363616c69c018c00c0002000100015180000704616e7332c031c00c0002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c04700010001000151800004c3f13325 36818 ffa900000001000000000000026e73076575726f6e6574026e6c0000010001 ffa980000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 36819 b6d100000001000000000000056d61696c3108636f6f6c626c7565026e6c0000010001 b6d180000001000000030002056d61696c3108636f6f6c626c7565026e6c0000010001c0120002000100015180000d036e733106776964657873c01bc01200020001000151800010036e733206776964657873036e657400c01200020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 36820 a50f000000010000000000000973706f727463756c74026e6c0000010001 a50f800000010000000300000973706f727463756c74026e6c0000010001c00c00020001000151800019036e73310f613475776562736f6c7574696f6e73036e657400c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02e 36821 b6580000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 b6588000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 36822 bacf000000010000000000000377777711686f74656c6465706164646573746f656c026e6c0000010001 bacf800000010000000200020377777711686f74656c6465706164646573746f656c026e6c0000010001c01000020001000151800008026e7302646fc022c01000020001000151800013036e73320c636f6e63657074732d696374c022c03600010001000151800004d5c51d2fc04a00010001000151800004d5c51e4b 36823 bc1f0000000100000000000003777777096b6c696d6265746572026e6c0000010001 bc1f8000000100000002000203777777096b6c696d6265746572026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01ac01000020001000151800006036e7332c032c02e000100010001518000045054f347c04a000100010001518000043e94a047 36824 f6fb00000001000000000000036e7331077472616e736970026e6c0000010001 f6fb80000001000000020002036e7331077472616e736970026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c0001000100015180000450454343c00c0001000100015180000450454242 36825 de8100000001000000000000036e7332077472616e736970026e6c0000010001 de8180000001000000020002036e7332077472616e736970026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800006036e7331c010c02c0001000100015180000450454343c03e0001000100015180000450454242 36826 ae2b00000001000000000000026e73076e656473746174026e6c0000010001 ae2b80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 36827 41e600000001000000000000036e7333076e656473746174026e6c0000010001 41e680000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 36828 f77d0000000100000000000003777777087261626f62616e6b026e6c0000010001 f77d8000000100000002000103777777087261626f62616e6b026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02d0001000100015180000491484fde 36829 34bf0000000100000000000008616473657276657206776562616473026e6c0000010001 34bf8000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 36830 9f79000000010000000000000d76616e6b7275696a7364696a6b026e6c00000f0001 9f79800000010000000300030d76616e6b7275696a7364696a6b026e6c00000f0001c00c0002000100015180000c026e73067369676e6574c01ac00c00020001000151800006036e7331c031c00c00020001000151800006036e7332c031c02e00010001000151800004c3561242c04600010001000151800004d915f142c05800010001000151800004d915f141 36831 e6f9000000010000000000000767656c73696e67026e6c00000f0001 e6f9800000010000000200000767656c73696e67026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 36832 f467000000010000000000000d646330322d6d6f7465696e646804636f7270086d6f7465696e6468026e6c0000010001 f467840300010000000100000d646330322d6d6f7465696e646804636f7270086d6f7465696e6468026e6c0000010001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 36833 a8f000000001000000000000037777770a64696572656e7475696e026e6c0000010001 a8f080000001000000030003037777770a64696572656e7475696e026e6c0000010001c0100002000100015180000e076e73617574683103626974c01bc0100002000100015180000a076e736175746832c037c0100002000100015180000a076e736175746833c037c02f00010001000151800004d5880c33c04900010001000151800004d5880c3bc05f00010001000151800004d4ccc00b 36834 693a00000001000000000000037777770b64616b6b6170656c6c656e026e6c0000010001 693a80000001000000020001037777770b64616b6b6170656c6c656e026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c01cc01000020001000151800011036e7332076e6564636f6d70036f726700c03000010001000151800004c3c1a80d 36835 12f700000001000000000000037777770c646564696e6e6572636c7562026e6c0000010001 12f780000001000000020000037777770c646564696e6e6572636c7562026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01dc0100002000100015180000704686e7331c036 36836 6303000000010000000000000977696c7672696a656e026e6c00000f0001 6303800000010000000200000977696c7672696a656e026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02e 36837 1f72000000010000000000000377777707766e6f2d6e6377026e6c0000010001 1f72800000010000000200020377777707766e6f2d6e6377026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c018c01000020001000151800006036e7332c030c02c00010001000151800004505fa002c04700010001000151800004505fac02 36838 2b9b00000001000000000000036e73330767617574656e67026e6c0000010001 2b9b80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36839 6b6c000000010000000000000367736d0c6d6f62696c656f6e6c696e65026e6c0000010001 6b6c800000010000000200000367736d0c6d6f62696c656f6e6c696e65026e6c0000010001c01000020001000151800017036e73310d696e746572726567697374657203636f6d00c01000020001000151800006036e7332c035 36840 8a4400000001000000000000036e733108776f726c646e6574026e6c0000010001 8a4480000001000000030003036e733108776f726c646e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d87a0479c03b00010001000151800004d86296b6c04d00010001000151800004d9a083d1 36841 c448000000010000000000000377777702656c026e6c0000010001 c448800000010000000200020377777702656c026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c013c01000020001000151800006036e7331c02bc02700010001000151800004c3eaad40c04100010001000151800004c3eaad41 36842 e2e900000001000000000000036e733108776f726c646e6574026e6c0000260001 e2e980000001000000030003036e733108776f726c646e6574026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d87a0479c03b00010001000151800004d86296b6c04d00010001000151800004d9a083d1 36843 5b4b00000001000000000000036e733208776f726c646e6574026e6c0000010001 5b4b80000001000000030003036e733208776f726c646e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d87a0479c00c00010001000151800004d86296b6c04d00010001000151800004d9a083d1 36844 072c00000001000000000000036e733208776f726c646e6574026e6c0000260001 072c80000001000000030003036e733208776f726c646e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d87a0479c00c00010001000151800004d86296b6c04d00010001000151800004d9a083d1 36845 039600000001000000000000036e733308776f726c646e6574026e6c0000010001 039680000001000000030003036e733308776f726c646e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d87a0479c03f00010001000151800004d86296b6c00c00010001000151800004d9a083d1 36846 01cb00000001000000000000036e733308776f726c646e6574026e6c0000260001 01cb80000001000000030003036e733308776f726c646e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004d87a0479c03f00010001000151800004d86296b6c00c00010001000151800004d9a083d1 36847 c895000000010000000000000b636f6d62696e6175746963026e6c00000f0001 c895800000010000000200020b636f6d62696e6175746963026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc018c00c00020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 36848 537600000001000000000000106f6d726f657067656c6465726c616e64026e6c00000f0001 537680000001000000020000106f6d726f657067656c6465726c616e64026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c035 36849 ef7a00000001000000000000037777770e76696c6c612d617264656e6e656e026e6c0000010001 ef7a80000001000000030000037777770e76696c6c612d617264656e6e656e026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c037c01000020001000151800006036e7333c037 36850 608900000001000000000000036e733204696c7365026e6c0000010001 608980000001000000030003036e733204696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e45a282c00c000100010001518000043e45a283c049000100010001518000043e45a284 36851 035200000001000000000000037777770b616466697265776f726b73026e6c0000010001 035280000001000000020002037777770b616466697265776f726b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 36852 23a60000000100000000000007616c7665727061026e6c0000ff0001 23a68000000100000002000007616c7665727061026e6c0000ff0001c00c0002000100015180000c036e723105692d702d64c014c00c00020001000151800006036e7232c02c 36853 757800000001000000000000036e723105692d702d64026e6c0000010001 757880000001000000020002036e723105692d702d64026e6c0000010001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02a00010001000151800004d9124003c03d00010001000151800004d9124104 36854 876a00000001000000000000036e723205692d702d64026e6c0000010001 876a80000001000000020002036e723205692d702d64026e6c0000010001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02a00010001000151800004d9124003c03d00010001000151800004d9124104 36855 936b0000000100000000000007616c7665727061026e6c00000f0001 936b8000000100000002000007616c7665727061026e6c00000f0001c00c0002000100015180000c036e723105692d702d64c014c00c00020001000151800006036e7232c02c 36856 d06a0000000100000000000004616d6567026e6c0000010001 d06a8000000100000003000304616d6567026e6c0000010001c00c0002000100015180000e04646e733106626c6978656dc011c00c0002000100015180000704646e7332c02ac00c0002000100015180000704646e7333c02ac02500010001000151800004d44fe803c03f00010001000151800004c3f5c782c05200010001000151800004d44ff303 36857 de7928000001000000010000026e6c00000600010b6f7372646f6d65696e2d31026e6c0000010001000002580004c0a80002 de79a8040000000000000000 36858 0000000070024000727d00000204059801010402 000080010000000000000000 36859 2d940000000100000000000009652d6c756e61746963026e6c0000010001 2d948000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36860 b778d534501043200f480000000000000000 36861 c84600000001000000000000037777770e646f726d616e74706174656e7473026e6c0000010001 c84684030001000000010000037777770e646f726d616e74706174656e7473026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 36862 b778d53450184320a10d00000096811c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c0020000000504f574552454447452d53424f5352444f4d45494e2d310000 36863 b778d542501143120eaf0000000000000000 36864 0000000070024000c9ec00000204059801010402 000080010000000000000000 36865 b778d543501043120eae0000000000000000 36866 b7799c6a501043209f800000000000000000 36867 b7799c6a50184320239b000000968fc8000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c0020000000504f574552454447452d53424f5352444f4d45494e2d310000 36868 b7799c78501143129ee70000000000000000 36869 b975000000010000000000000b636f6d62696e6175746963026e6c0000010001 b975800000010000000200020b636f6d62696e6175746963026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc018c00c00020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 36870 00000000700240008c0d00000204059801010402 000080010000000000000000 36871 b7799c79501043129ee60000000000000000 36872 b77a3c4a50104320c1c00000000000000000 b77abc440000000000000000 36873 b77a3c4a50184320372f000000969e74000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000374e544c4d535350000100000097b208e00b000b002c0000000c000c0020000000504f574552454447452d53424f5352444f4d45494e2d310000 b77abc440000000000000000 36874 b77a3c5850114312c1270000000000000000 b77abc540000000000000000 36875 b77a3c5950104312c1260000000000000000 b77abc540000000000000000 36876 ed0900000001000000000000037777770c6472756b6b6572696a677362026e6c0000010001 ed0980000001000000020000037777770c6472756b6b6572696a677362026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01dc0100002000100015180000805646e732d32c037 36877 294000000001000000000000086470636c69636b730c706167696e61626568656572026e6c0000010001 294080000001000000020002086470636c69636b730c706167696e61626568656572026e6c0000010001c0150002000100015180000e026e7308696e7465722d6974c022c01500020001000151800006036e7332c039c03600010001000151800004d5c4385ac05000010001000151800004d5c4385b 36878 e9cb0000000100000000000003627573026e6c0000ff0001 e9cb8000000100000002000003627573026e6c0000ff0001c00c0002000100015180000c026e730334756103636f6d00c00c00020001000151800006036e7332c027 36879 a8bb0000000100000000000006636861726973026e6c0000ff0001 a8bb8000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 36880 73c2000000010000000000000565666e657408767575727765726b026e6c0000010001 73c2800000010000000300010565666e657408767575727765726b026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c044c02f000100010001518000043efa0202 36881 4bae00000001000000000000066d6d736d7470056e6574636f026e6c0000010001 4bae80000001000000020002066d6d736d7470056e6574636f026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c02d00010001000151800004c26d4a82c03f00010001000151800004c26dd146 36882 9ad50000000100000000000003777777076d797374617473026e6c0000010001 9ad58000000100000002000203777777076d797374617473026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa404c04900010001000151800004d5efa405 36883 0e5f0000000100000000000009652d6c756e61746963026e6c0000010001 0e5f8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 36884 4a6d00000001000000000000096d61696c686f73743107747564656c6674026e6c0000010001 4a6d80000001000000050005096d61696c686f73743107747564656c6674026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36885 be0400000001000000000000096d61696c686f73743207747564656c6674026e6c0000010001 be0480000001000000050005096d61696c686f73743207747564656c6674026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36886 d46000000001000000000000096d61696c686f73743207747564656c6674026e6c00001c0001 d46080000001000000050005096d61696c686f73743207747564656c6674026e6c00001c0001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36887 791700000001000000000000096d61696c686f73743107747564656c6674026e6c00001c0001 791780000001000000050005096d61696c686f73743107747564656c6674026e6c00001c0001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36888 4dcc00000001000000000000096d61696c686f73743207747564656c6674026e6c0000260001 4dcc80000001000000050005096d61696c686f73743207747564656c6674026e6c0000260001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36889 85f000000001000000000000096d61696c686f73743307747564656c6674026e6c0000010001 85f080000001000000050005096d61696c686f73743307747564656c6674026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36890 360000000001000000000000096d61696c686f73743307747564656c6674026e6c00001c0001 360080000001000000050005096d61696c686f73743307747564656c6674026e6c00001c0001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36891 ca4d00000001000000000000096d61696c686f73743307747564656c6674026e6c0000260001 ca4d80000001000000050005096d61696c686f73743307747564656c6674026e6c0000260001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36892 a26200000001000000000000096d61696c686f73743107747564656c6674026e6c0000260001 a26280000001000000050005096d61696c686f73743107747564656c6674026e6c0000260001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36893 2ae700000001000000000000036e733207747564656c6674026e6c00001c0001 2ae780000001000000050005036e733207747564656c6674026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c00c0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 36894 215100000001000000000000036e733207747564656c6674026e6c0000260001 215180000001000000050005036e733207747564656c6674026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c00c0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 36895 553400000001000000000000036e733107747564656c6674026e6c0000010001 553480000001000000050005036e733107747564656c6674026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c00c0001000100015180000482a1b401c03a0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 36896 38b600000001000000000000036e733107747564656c6674026e6c00001c0001 38b680000001000000050005036e733107747564656c6674026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c00c0001000100015180000482a1b401c03a0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 36897 749b00000001000000000000096d61696c686f7374340b66726565686f7374696e67026e6c0000010001 749b80000001000000020000096d61696c686f7374340b66726565686f7374696e67026e6c0000010001c0160002000100015180001105646e732d33056c61646f7403636f6d00c0160002000100015180000805646e732d34c03c 36898 053e00000001000000000000096d61696c686f73743107747564656c6674026e6c0000010001 053e80000001000000050005096d61696c686f73743107747564656c6674026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 36899 54a100000001000000000000037777770a70696a70736c65746a65026e6c0000010001 54a180000001000000020000037777770a70696a70736c65746a65026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 36900 d70400000001000000000000036e7335046372696f026e6c0000010001 d70480000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36901 0b5000000001000000000000036e7336046372696f026e6c0000010001 0b5080000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36902 b74e000000010000000000000377777703776562026e6c0000010001 b74e800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 36903 7ab800000001000000000000036e7331046372696f026e6c0000010001 7ab880000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36904 960100000001000000000000036e7332046372696f026e6c0000010001 960180000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36905 12ce00000001000000000000037777770a72656372656174696566026e6c0000010001 12ce80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 36906 572400000001000000000000036e7335046372696f026e6c0000010001 572480000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36907 ebc000000001000000000000036e7336046372696f026e6c0000010001 ebc080000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36908 6f4400000001000000000000036e7331046372696f026e6c0000010001 6f4480000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36909 33e700000001000000000000036e7332046372696f026e6c0000010001 33e780000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 36910 14b000000001000000000000086169782d74657374056578616374026e6c0000010001 14b080000001000000020001086169782d74657374056578616374026e6c0000010001c01500020001000151800008056578616374c015c0150002000100015180000b026e73026e6c036e657400c02f00010001000151800004910e3c0a 36911 35f600000001000000000000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001 35f680000001000000020000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001c014000200010001518000110377656207616a63666f6f6403636f6d00c0140002000100015180000b0865786368616e6765c034 36912 7f6200000001000000000000036e73310b696e746572706872617365026e6c0000010001 7f6280000001000000020002036e73310b696e746572706872617365026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5c98f54c03e00010001000151800004d5c98f57 36913 9fd600000001000000000000036e73310b696e746572706872617365026e6c0000260001 9fd680000001000000020002036e73310b696e746572706872617365026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5c98f54c03e00010001000151800004d5c98f57 36914 27fb00000001000000000000036e73320b696e746572706872617365026e6c0000010001 27fb80000001000000020002036e73320b696e746572706872617365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d5c98f54c00c00010001000151800004d5c98f57 36915 911200000001000000000000036e73320b696e746572706872617365026e6c0000260001 911280000001000000020002036e73320b696e746572706872617365026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d5c98f54c00c00010001000151800004d5c98f57 36916 e0b60000000100000000000003313037023930033232390232340964796e61626c6f636b07656173796e6574026e6c0000100001 e0b68000000100000002000203313037023930033232390232340964796e61626c6f636b07656173796e6574026e6c0000100001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 36917 6a6f00000001000000000000026e73076575726f6e6574026e6c0000010001 6a6f80000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 36918 466b000000010000000000000377777709686f6e64612d637278026e6c0000010001 466b800000010000000200000377777709686f6e64612d637278026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c031 36919 06a100000001000000000000026e73076e656473746174026e6c00001c0001 06a180000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 36920 6a3c00000001000000000000036e7332076e656473746174026e6c0000010001 6a3c80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36921 a0fb00000001000000000000036e7332076e656473746174026e6c00001c0001 a0fb80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36922 4c1400000001000000000000036e7333076e656473746174026e6c00001c0001 4c1480000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 36923 7d8a00000001000000000000036e7334076e656473746174026e6c0000010001 7d8a80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36924 63c400000001000000000000036e7334076e656473746174026e6c00001c0001 63c480000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 36925 d27a00000001000000000000037777770462756d65026e6c0000010001 d27a80000001000000020002037777770462756d65026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c015c01000020001000151800006036e7332c02dc02900010001000151800004d4ccd865c044000100010001518000045054ec34 36926 5a74000000010000000000000377777707747067706f7374026e6c0000010001 5a74800000010000000200020377777707747067706f7374026e6c0000010001c0100002000100015180000e036e733207737570706f7274c018c01000020001000151800006036e7334c030c02c00010001000151800004c372e7c8c04600010001000151800004c372e6fe 36927 f1f1000000010000000000000377777706706167696e61026e6c0000010001 f1f1800000010000000300030377777706706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02b000100010001518000043e45a282c03d000100010001518000043e45a283c04f000100010001518000043e45a284 36928 b5b800000001000000000000037777770c6561676c6566726569676874026e6c0000010001 b5b880000001000000020002037777770c6561676c6566726569676874026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01dc01000020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 36929 4a4000000001000000000000037777770c706f77657270617373696f6e026e6c0000010001 4a4080000001000000020002037777770c706f77657270617373696f6e026e6c0000010001c0100002000100015180000c04646e73310471776562c01dc0100002000100015180000704646e7332c036c03100010001000151800004d994ac0cc04900010001000151800004d5c42f6c 36930 a58100000001000000000000037777770c706f77657270617373696f6e026e6c0000010001 a58180000001000000020002037777770c706f77657270617373696f6e026e6c0000010001c0100002000100015180000c04646e73310471776562c01dc0100002000100015180000704646e7332c036c03100010001000151800004d994ac0cc04900010001000151800004d5c42f6c 36931 72e00000000100000000000007776161646f6f6f026e6c00001c0001 72e08403000100000001000007776161646f6f6f026e6c00001c0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 36932 31560000000100000000000008686f75736561647303696467026e6c0000010001 31568000000100000003000308686f75736561647303696467026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c02d0001000100015180000451af4646c03f0001000100015180000451af4647c05100010001000151800004d5a0fde6 36933 b58300000001000000000000036d78320663617374656c026e6c0000010001 b58380000001000000020002036d78320663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 36934 6a920000000100000000000003777777067a7376737378026e6c0000010001 6a928403000100000001000003777777067a7376737378026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 36935 b0b000000001000000000000036d78320663617374656c026e6c00001c0001 b0b080000001000000020002036d78320663617374656c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 36936 b9fd00000001000000000000036d78330663617374656c026e6c0000010001 b9fd80000001000000020002036d78330663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 36937 30d700000001000000000000036d78330663617374656c026e6c00001c0001 30d780000001000000020002036d78330663617374656c026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 36938 1dab000000010000000000000377777717706f6c6974696567656c6465726c616e646d696464656e026e6c0000010001 1dab800000010000000300000377777717706f6c6974696567656c6465726c616e646d696464656e026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c042c0100002000100015180000805646e733132c042 36939 d7160000000100000000000003777777136a61636874736c6f746865746f7564656c6f6f026e6c0000010001 d7168403000100000001000003777777136a61636874736c6f746865746f7564656c6f6f026e6c0000010001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 36940 367d00000001000000000000036e73330870726f7365727665026e6c0000010001 367d80000001000000030002036e73330870726f7365727665026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800002c00cc02d000100010001518000045054e055c00c00010001000151800004d4ccc655 36941 d40800000001000000000000036e73310870726f7365727665026e6c0000010001 d40880000001000000030002036e73310870726f7365727665026e6c0000010001c01000020001000151800002c00cc01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c010c00c000100010001518000045054e055c05900010001000151800004d4ccc655 36942 23b300000001000000000000036e73340767617574656e67026e6c0000010001 23b380000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36943 23b200000001000000000000036e73330767617574656e67026e6c0000010001 23b280000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36944 55af00000001000000000000036e7331056d61786573026e6c0000010001 55af80000001000000030003036e7331056d61786573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000045045402ec038000100010001518000045045402fc04a000100010001518000045045440a 36945 72b000000001000000000000036e7332056d61786573026e6c0000010001 72b080000001000000030003036e7332056d61786573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a000100010001518000045045402ec00c000100010001518000045045402fc04a000100010001518000045045440a 36946 ae7200000001000000000000036e7333056d61786573026e6c0000010001 ae7280000001000000030003036e7333056d61786573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02a000100010001518000045045402ec03c000100010001518000045045402fc00c000100010001518000045045440a 36947 a98400000001000000000000036e733205672d617274026e6c0000010001 a98480000001000000020002036e733205672d617274026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000f026e7309747269706c652d6974c016c02a00010001000151800004d5a0c502c03c00010001000151800004d584b002 36948 65f300000001000000000000034e53320754494b4b4c494b024e4c0000010001 65f380000001000000020002034e53320754494b4b4c494b024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d5c40902c00c000100010001518000043eddd512 36949 65f400000001000000000000034e53310754494b4b4c494b024e4c0000010001 65f480000001000000020002034e53310754494b4b4c494b024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5c40902c03a000100010001518000043eddd512 36950 80e30000000100000000000003777777057a6f656b79026e6c0000010001 80e38000000100000002000103777777057a6f656b79026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c016c01000020001000151800006036e7334c02ec02a00010001000151800004d5c401c0 36951 090800000001000000000000036e733503777873026e6c0000010001 090880000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 36952 420f00000001000000000000036e733503777873026e6c0000260001 420f80000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 36953 db26000000010000000000000377777704726f6c66026e6c0000010001 db26800000010000000200000377777704726f6c66026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 36954 d3d60000000100000000000003777777046e756f6e026e6c0000010001 d3d68000000100000002000103777777046e756f6e026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 36955 347e000000010000000000000d74686562696770696374757265026e6c00000f0001 347e800000010000000200020d74686562696770696374757265026e6c00000f0001c00c0002000100015180000e036e73310768756d616e2d69c01ac00c00020001000151800006036e7332c032c02e00010001000151800004c1ad2884c04800010001000151800004c1ad2886 36956 6199000000010000000000000956444c4d455441414c024e4c0000060001 6199840300010000000100000956444c4d455441414c024e4c0000060001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 36957 9173000000010000000000000956444c4d455441414c024e4c0000060001 9173840300010000000100000956444c4d455441414c024e4c0000060001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 36958 be14000000010000000000000469632d73026e6c00000f0001 be14800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 36959 32c600000001000000000000037777770867726f6e656d616e026e6c0000010001 32c680000001000000020002037777770867726f6e656d616e026e6c0000010001c01000020001000151800012036e73310b696e7465727374726f6f6dc019c01000020001000151800006036e7332c031c02d0001000100015180000450558121c04b00010001000151800004d58141c4 36960 09d3000000010000000000000d636c736175746f6d6174696f6e026e6c00000f0001 09d3840300010000000100000d636c736175746f6d6174696f6e026e6c00000f0001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 36961 f13000000001000000000000036e73310a6d756c74696b6162656c026e6c00001c0001 f13080000001000000030002036e73310a6d756c74696b6162656c026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 36962 f0f6000000010000000000000b7365617263682d646573630465626179026e6c0000010001 f0f6800000010000000200000b7365617263682d646573630465626179026e6c0000010001c018000200010001518000140963726f636f64696c65046562617903636f6d00c0180002000100015180000b087061636966696572c040 36963 e447000000010000000000000370776c026e6c00000f0001 e447800000010000000200020370776c026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 36964 fa8e00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 fa8e80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 36965 292b000000010000000000000762616e6e65727303696d73026e6c0000010001 292b800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 36966 a82400000001000000000000046d61696c036d6461026e6c0000010001 a82480000001000000020002046d61696c036d6461026e6c0000010001c0110002000100015180000e036e733007656173796e6574c015c01100020001000151800006036e7331c02dc02900010001000151800004c2a55e01c04300010001000151800004c2a55e05 36967 f39328000001000000010000024e4c00000600010956444c4d455441414c024e4c0000010001000002580004c0a80003 f393a8040000000000000000 36968 dbc5000000010000000000000d6176732d736f6c7574696f6e73026e6c0000010001 dbc5800000010000000200020d6176732d736f6c7574696f6e73026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 36969 f4f900000001000000000000086261726d61746f6e026e6c00001c0001 f4f980000001000000020002086261726d61746f6e026e6c00001c0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 36970 0000000070024000baf20000020405b401010402 000080010000000000000000 36971 23b600000001000000000000036e73340767617574656e67026e6c0000010001 23b680000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36972 23b500000001000000000000036e73330767617574656e67026e6c0000010001 23b580000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 36973 ec3a000000010000000000000377777707736974652d6964026e6c0000010001 ec3a800000010000000300000377777707736974652d6964026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030 36974 98d0001000010000000000000377777708646f687362617365026e6c0000010001 98d0800000010000000300010377777708646f687362617365026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 36975 874e00000001000000000000046e733032086465616e6d6f6f72026e6c00001c0001 874e80000001000000020002046e733032086465616e6d6f6f72026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc02e00010001000151800004c1cbe123c00c00010001000151800004c1cbe124 36976 82a00000000100000000000003777777046d70337a026e6c0000010001 82a08000000100000002000203777777046d70337a026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac015c01000020001000151800006036e7332c02dc02900010001000151800004d5efa011c04400010001000151800004d5efa075 36977 1c0000000001000000000000026e73076e656473746174026e6c0000010001 1c0080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 36978 d1c100000001000000000000036e7333076e656473746174026e6c0000010001 d1c180000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 36979 b77c30cc50104470faed0000000000000000 b77cb0c40000000000000000 36980 b77c30cc50184470e39a0000008e4390000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd2f403c4eaf00030000002f4e544c4d535350000100000097b208e00900090026000000060006002000000056444c4d475256444c4d455441414c0000 b77cb0c40000000000000000 36981 d79e00000001000000000000037777770873706f7274757261026e6c0000010001 d79e80000001000000030003037777770873706f7274757261026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 36982 8e5400000001000000000000026e73076e65746c616e64026e6c0000010001 8e5480000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 36983 a5b7000000010000000000000b666c6169726f6e6c696e650b76726f75776f6e6c696e65026e6c0000010001 a5b7800000010000000300000b666c6169726f6e6c696e650b76726f75776f6e6c696e65026e6c0000010001c01800020001000151800010036e733106666173747873036e657400c01800020001000151800006036e7332c03cc01800020001000151800006036e7333c03c 36984 b71c0000000100000000000005646e732d32056c61646f74026e6c0000010001 b71c8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 36985 7a7d0000000100000000000003746462026e6c00000f0001 7a7d8000000100000003000303746462026e6c00000f0001c00c00020001000151800010036e733109736974656279746573c010c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028c02400010001000151800004c2a55e5ac04000010001000151800004c356781cc052000100010001518000043ec58016 36986 fd2300000001000000000000037777771064696a6b73747261766f65726d616e73026e6c0000010001 fd2380000001000000020000037777771064696a6b73747261766f65726d616e73026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c03c 36987 352f0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 352f8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 36988 352e00000001000000000000056b72616e740974656c656772616166026e6c0000010001 352e80000001000000020000056b72616e740974656c656772616166026e6c0000010001c01200020001000151800013036e73300974656c656772616166036e657400c01200020001000151800006036e7331c034 36989 b77c30da50114462fa5c0000000000000000 b77cb0d40000000000000000 36990 b6ea00000001000000000000084465537472616174024e4c00000f0001 b6ea80000001000000020002084465537472616174024e4c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c015c00c00020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 36991 0000000070024000d8d00000020405b401010402 000080010000000000000000 36992 96f100000001000000000000037777771964696a6b73747261766f65726d616e736164766f636174656e026e6c0000010001 96f180000001000000020002037777771964696a6b73747261766f65726d616e736164766f636174656e026e6c0000010001c0100002000100015180000d046e73303105636f64696dc02ac01000020001000151800007046e733032c043c03e00010001000151800004d5f73004c05700010001000151800004d43d46c7 36993 abe500000001000000000000026e7308767575727765726b026e6c0000010001 abe580000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 36994 89a10000000100000000000004646e7331057368656c6c026e6c0000010001 89a18000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 36995 6aba00000001000000000000036e733503777873026e6c0000010001 6aba80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 36996 1fe20000000100000000000007756e692d6f6e65026e6c00000f0001 1fe28000000100000002000007756e692d6f6e65026e6c00000f0001c00c00020001000151800013036e733109752d73657276657273036e657400c00c00020001000151800006036e7332c02c 36997 353000000001000000000000056b72616e740974656c656772616166026e6c0000010001 353080000001000000020000056b72616e740974656c656772616166026e6c0000010001c01200020001000151800013036e73300974656c656772616166036e657400c01200020001000151800006036e7331c034 36998 656f00000001000000000000036e733209666972737466696e64026e6c0000010001 656f80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 36999 656e00000001000000000000036e733109666972737466696e64026e6c0000010001 656e80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37000 40e700000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 40e780000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37001 b77c30db50104462fa5b0000000000000000 b77cb0d40000000000000000 37002 b77d061b50104470437c0000000000000000 b77d80010000000000000000 37003 fecc000000010000000000000745434f4e3232380867656d65656e74650c67656c6465726d616c73656e026e6c0000010001 fecc800000010000000200020745434f4e3232380867656d65656e74650c67656c6465726d616c73656e026e6c0000010001c01d00020001000151800005026e73c01dc01d00020001000151800006036e7332c01dc03e00010001000151800004c143b9b5c04f00010001000151800004c143b9b6 37004 a58700000001000000000000067461736b6974026e6c00000f0001 a58780000001000000020002067461736b6974026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c013c00c00020001000151800006036e7332c02ac02700010001000151800004d4cb0e42c04200010001000151800004d4cb1221 37005 db4100000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 db4180000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37006 b77d061b501844701c460000008e5474000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd2f403c4eaf00030000002f4e544c4d535350000100000097b208e00900090026000000060006002000000056444c4d475256444c4d455441414c0000 b77d80010000000000000000 37007 19c0000000010000000000000a696e646570656e646572026e6c00000f0001 19c0800000010000000300030a696e646570656e646572026e6c00000f0001c00c00020001000151800010036e733109736974656279746573c017c00c00020001000151800006036e7332c02fc00c00020001000151800006036e7333c02fc02b00010001000151800004c2a55e5ac04700010001000151800004c356781cc059000100010001518000043ec58016 37008 b77d06295011446242eb0000000000000000 b77d80010000000000000000 37009 000000007002400050950000020405b401010402 000080010000000000000000 37010 1d770000000100000000000003777777137569747661617274626567656c656964696e67026e6c0000010001 1d778000000100000002000103777777137569747661617274626567656c656964696e67026e6c0000010001c0100002000100015180000a036e733303777873c024c01000020001000151800006036e7334c03cc04e00010001000151800004d5ef9a65 37011 569d00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 569d80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37012 ac4900000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 ac4980000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37013 c2c30000000100000000000005646e732d31056c61646f74026e6c0000010001 c2c38000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37014 c2c40000000100000000000005646e732d32056c61646f74026e6c0000010001 c2c48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37015 34c00000000100000000000008616473657276657206776562616473026e6c0000010001 34c08000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 37016 7bb400000001000000000000037777770464626d6e026e6c0000010001 7bb480000001000000020002037777770464626d6e026e6c0000010001c01000020001000151800002c010c0100002000100015180000d04646e733105692d702d64c015c01000010001000151800004d912403ac03700010001000151800004d9124003 37017 a99a00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 a99a80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 37018 1cf300000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 1cf380000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 37019 b77d062a5010446242ea0000000000000000 b77d80010000000000000000 37020 b77dd9ff50104470e75b0000000000000000 37021 207d0000000100000000000103706f7003777873026e6c00000100010000290500000000000000 207d8000000100000003000403706f7003777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 37022 b77dd9ff501844701b610000008ef938000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd2f403c4eaf00030000002f4e544c4d535350000100000097b208e00900090026000000060006002000000056444c4d475256444c4d455441414c0000 37023 207d0000000100000000000003706f7003777873026e6c0000010001 207d8000000100000003000303706f7003777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37024 9d6f00000001000000000000037777770465706f78026e6c0000010001 9d6f80000001000000020002037777770465706f78026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 37025 f603000000010000000000000574657272610367656f027575026e6c0000010001 f603800000010000000400040574657272610367656f027575026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000e036e733107737572666e6574c019c01600020001000151800006036e7333c016c02d0001000100015180000483d30405c03e0001000100015180000483d30406c05000010001000151800004c0576a65c06a0001000100015180000483d31020 37026 a0b50000000100000000000003777777086b6c696b6575726f026e6c0000010001 a0b58000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37027 3f150000000100000000000003777777086b6c696b6575726f026e6c0000010001 3f158000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37028 309b0000000100000000000003777777086b6c696b6575726f026e6c0000010001 309b8000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37029 a7900000000100000000000003777777086b6c696b6575726f026e6c0000010001 a7908000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37030 5f3d0000000100000000000003777777086b6c696b6575726f026e6c0000010001 5f3d8000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37031 67eb0000000100000000000003777777086b6c696b6575726f026e6c0000010001 67eb8000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37032 b78f0000000100000000000003777777086b6c696b6575726f026e6c0000010001 b78f8000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37033 c7fb0000000100000000000003777777086b6c696b6575726f026e6c0000010001 c7fb8000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37034 89e20000000100000000000003777777086b6c696b6575726f026e6c0000010001 89e28000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37035 f02d0000000100000000000003777777086b6c696b6575726f026e6c0000010001 f02d8000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37036 10670000000100000000000003777777086b6c696b6575726f026e6c0000010001 10678000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37037 8fb40000000100000000000003777777086b6c696b6575726f026e6c0000010001 8fb48000000100000002000203777777086b6c696b6575726f026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c019c01000020001000151800006036e7332c030c02d00010001000151800004d5e38d0ac04a00010001000151800004d5e38205 37038 2342000000010000000000000d706f7474656e62616b6b657273026e6c00000f0001 2342800000010000000200020d706f7474656e62616b6b657273026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c01ac00c00020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 37039 fd53000000010000000000000463756369026e6c0000ff0001 fd53800000010000000300030463756369026e6c0000ff0001c00c0002000100015180000904686572610178c00cc00c0002000100015180000c066865726d6573026e6cc00cc00c00020001000151800009066865726d6573c02ac02500010001000151800004d47d8001c03a00010001000151800004c143ef02c05200010001000151800004d47d8002 37040 b77dda0d50114462e6ca0000000000000000 37041 039a00000001000000000000076672616e73656e026e6c00000f0001 039a80000001000000030003076672616e73656e026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c014c00c0002000100015180000a076e736175746832c030c00c0002000100015180000a076e736175746833c030c02800010001000151800004d5880c33c04200010001000151800004d5880c3bc05800010001000151800004d4ccc00b 37042 226a00000001000000000000036e733203746d6e026e6c0000010001 226a80000001000000020002036e733203746d6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d5a0d8fac00c00010001000151800004d5a0d9fa 37043 497500000001000000000000036e733103746d6e026e6c0000010001 497580000001000000020002036e733103746d6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5a0d8fac03600010001000151800004d5a0d9fa 37044 2ede00000001000000000000037777770867736d706c617a61026e6c0000010001 2ede80000001000000020000037777770867736d706c617a61026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 37045 891e00000001000000000000037777770a7265756d61666f6e6473026e6c0000010001 891e80000001000000020002037777770a7265756d61666f6e6473026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01bc01000020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 37046 b77dda0e50104462e6c90000000000000000 37047 3b920000000100000000000003777777076176642d696374026e6c0000010001 3b928000000100000002000203777777076176642d696374026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c018c01000020001000151800006036e7332c02fc02c00010001000151800004d453c005c04a00010001000151800004d453c006 37048 d09b00000001000000000000036e7335046372696f026e6c0000010001 d09b80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37049 e45a00000001000000000000036e7336046372696f026e6c0000010001 e45a80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37050 801e000000010000000000000377777703776562026e6c0000010001 801e800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 37051 edd100000001000000000000036e7335046372696f026e6c0000010001 edd180000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37052 ac7500000001000000000000036e7336046372696f026e6c0000010001 ac7580000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37053 f8f20000000100000000000003646e730864617461736d6974026e6c0000010001 f8f28000000100000002000203646e730864617461736d6974026e6c0000010001c01000020001000151800002c00cc0100002000100015180000704646e7331c010c00c0001000100015180000451045a82c03b0001000100015180000451045ade 37054 63870000000100000000000004646e73310864617461736d6974026e6c0000010001 63878000000100000002000204646e73310864617461736d6974026e6c0000010001c0110002000100015180000603646e73c011c01100020001000151800002c00cc02e0001000100015180000451045a82c00c0001000100015180000451045ade 37055 a1ff000000010000000000000673636f72656e0b6e65747368697070657273026e6c0000010001 a1ff800000010000000200020673636f72656e0b6e65747368697070657273026e6c0000010001c0130002000100015180000f03646e730864617461736d6974c01fc0130002000100015180000704646e7331c037c0330001000100015180000451045a82c04e0001000100015180000451045ade 37056 ebb9000000010000000000000b7265616c747261636b657207736974652d6964026e6c0000010001 ebb9800000010000000300000b7265616c747261636b657207736974652d6964026e6c0000010001c01800020001000151800012036e733108626c7565646f6d65036e657400c01800020001000151800006036e7332c038c01800020001000151800006036e7333c038 37057 259500100001000000000000037777770a6162626b726564696574026e6c0000010001 259580000001000000020002037777770a6162626b726564696574026e6c0000010001c01000020001000151800010036e733109756e69736572766572c01bc01000020001000151800006036e7332c033c02f00010001000151800004c3454b03c04b00010001000151800004d119a2fa 37058 344d00000001000000000000037777770a666476616b6265757273026e6c0000010001 344d80000001000000020000037777770a666476616b6265757273026e6c0000010001c0100002000100015180000e036e7331076163742d6f6e65c01bc01000020001000151800006036e7332c033 37059 5c4600000001000000000000036e7331076163742d6f6e65026e6c0000010001 5c4680000001000000020000036e7331076163742d6f6e65026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c018c0100002000100015180000704686e7331c031 37060 453000000001000000000000036e7332076163742d6f6e65026e6c0000010001 453080000001000000020000036e7332076163742d6f6e65026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c018c0100002000100015180000704686e7331c031 37061 c52f00000001000000000000037777770c736c696e67656c616e64666d026e6c0000010001 c52f80000001000000020002037777770c736c696e67656c616e64666d026e6c0000010001c01000020001000151800010046e733031086465616e6d6f6f72c01dc01000020001000151800007046e733032c036c03100010001000151800004c1cbe123c04d00010001000151800004c1cbe124 37062 a98d00000001000000000000037777770a64736c65787072657373026e6c0000010001 a98d80000001000000020002037777770a64736c65787072657373026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01bc01000020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 37063 8f27000000010000000000000d76616e686f757464657369676e026e6c00000f0001 8f27800000010000000200000d76616e686f757464657369676e026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c039 37064 4459000000010000000000000874657573766c6f74026e6c00000f0001 4459800000010000000200020874657573766c6f74026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 37065 588f000000010000000000000377777717736c6f74656e706f6f72746d616e6d616b656c61617273026e6c0000010001 588f840300010000000100000377777717736c6f74656e706f6f72746d616e6d616b656c61617273026e6c0000010001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 37066 f627000000010000000000000261640b62616e6e65726d61726b74026e6c0000010001 f627800000010000000300030261640b62616e6e65726d61726b74026e6c0000010001c00f0002000100015180000e076e73617574683103626974c01bc00f0002000100015180000a076e736175746832c037c00f0002000100015180000a076e736175746833c037c02f00010001000151800004d5880c33c04900010001000151800004d5880c3bc05f00010001000151800004d4ccc00b 37067 9f62000000010000000000000a5354494e47534f4e4753026e6c0000020001 9f62840300010000000100000a5354494e47534f4e4753026e6c0000020001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 37068 4681000000010000000000000b74726f732d6c69766530310474726f73026e6c0000010001 4681800000010000000200020b74726f732d6c69766530310474726f73026e6c0000010001c01800020001000151800010066d696e6e6965066f6d726f6570c01dc0180002000100015180000805726f62696ec038c03100010001000151800004913a1e04c04d00010001000151800004913a1a34 37069 56910000000100000000000003626c3102626c06787334616c6c026e6c0000010001 56918000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37070 d1260000000100000000000003626c3102626c06787334616c6c026e6c0000260001 d1268000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37071 886c00000001000000000000026e73036d6c63026e6c0000010001 886c80000001000000030003026e73036d6c63026e6c0000010001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 37072 d2a90000000100000000000003612d70026e6c0000010001 d2a98000000100000002000003612d70026e6c0000010001c00c00020001000151800010036e73310673697465347503636f6d00c00c00020001000151800006036e7332c028 37073 af8000000001000000000000046163616c026e6c00000f0001 af8080000001000000020000046163616c026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c029 37074 69f800000001000000000000037777770b6d61737465726c696e6b73026e6c0000010001 69f880000001000000020002037777770b6d61737465726c696e6b73026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 37075 2dfa00000001000000000000036e733206787334616c6c026e6c0000010001 2dfa80000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 37076 f8c400000001000000000000037777770b6d61737465726c696e6b73026e6c0000010001 f8c480000001000000020002037777770b6d61737465726c696e6b73026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 37077 2741000000010000000000000773747564656e740868736c656964656e026e6c0000010001 2741800000010000000200020773747564656e740868736c656964656e026e6c0000010001c01400020001000151800006036e7331c014c0140002000100015180000e036e733107737572666e6574c01dc03100010001000151800004c3a95702c04300010001000151800004c0576a65 37078 a8d900000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730a6e6d762d686477732d31026e6c0000210001 a8d984030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730a6e6d762d686477732d31026e6c0000210001c04b00060001000038400036026e730f646f6d61696e2d7265676973747279c04b0a686f73746d6173746572c0620bf1e540000070800000384000278d0000003840 37079 297e0000000100000000000006656d61696c73026e6c0000010001 297e8000000100000003000006656d61696c73026e6c0000010001c00c0002000100015180000e036e73300477697368036e657400c00c00020001000151800006036e7331c02bc00c00020001000151800006036e7332c02b 37080 395800000001000000000000047777773309616c7465726e617465026e6c0000010001 395880000001000000020002047777773309616c7465726e617465026e6c0000010001c01100020001000151800012036e73310b7669616e6574776f726b73c01bc01100020001000151800006036e7332c033c02f00010001000151800004d43d0f08c04d00010001000151800004d43d19e2 37081 8ba10000000100000000000003626c3102626c06787334616c6c026e6c0000010001 8ba18000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37082 034b0000000100000000000003777777046469686d026e6c0000010001 034b8000000100000002000203777777046469686d026e6c0000010001c0100002000100015180000f026e7309656174736572766572c015c01000020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 37083 32280000000100000000000006726f7574657203656274026e6c0000010001 32288000000100000002000006726f7574657203656274026e6c0000010001c0130002000100015180000b026e73026e6c036e657400c0130002000100015180001206617574683630026e73026e6c027575c031 37084 edc700000001000000000000037777770d7065746572766572686167656e026e6c0000010001 edc780000001000000020000037777770d7065746572766572686167656e026e6c0000010001c0100002000100015180000f036e7336086a726f6e6c696e65c01ec01000020001000151800014036e73330d686f73746e656465726c616e64c01e 37085 08c90000000100000000000008686f76656c696e67026e6c00000f0001 08c98000000100000002000208686f76656c696e67026e6c00000f0001c00c0002000100015180000e036e733207737570706f7274c015c00c00020001000151800006036e7334c02dc02900010001000151800004c372e7c8c04300010001000151800004c372e6fe 37086 b23d00000001000000000000036e73330d686f73746e656465726c616e64026e6c0000010001 b23d80000001000000030002036e73330d686f73746e656465726c616e64026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 37087 5df800000001000000000000036e7336086a726f6e6c696e65026e6c0000010001 5df880000001000000020000036e7336086a726f6e6c696e65026e6c0000010001c01000020001000151800014036e73310d686f73746e656465726c616e64c019c01000020001000151800006036e7333c031 37088 03d5001000010000000000010e63656e747261616c626568656572026e6c00000f00010000290800000080000000 03d5800000010000000300040e63656e747261616c626568656572026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae0000291000000000000000 37089 8b9900000001000000000000037777770c646574726f756261646f7572026e6c0000010001 8b9980000001000000020000037777770c646574726f756261646f7572026e6c0000010001c0100002000100015180000f026e7306636170696361036e657400c01000020001000151800006036e7332c034 37090 efeb00000001000000000000036e733209666972737466696e64026e6c0000010001 efeb80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37091 6b900000000100000000000003777777086e6f746963696173026e6c0000010001 6b908000000100000002000203777777086e6f746963696173026e6c0000010001c0100002000100015180000b036e73310473626970c019c01000020001000151800006036e7332c031c02d00010001000151800004d4ccecf1c04400010001000151800004c3a99564 37092 122900000001000000000000097363686164656e6574026e6c00000f0001 122980000001000000020000097363686164656e6574026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c016c00c0002000100015180000704686e7331c02f 37093 e88500000001000000000000037777770a7269636b6d6f6c656d61026e6c0000010001 e88580000001000000020000037777770a7269636b6d6f6c656d61026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c035 37094 881000000001000000000000036674700663617374656c026e6c0000010001 881080000001000000020002036674700663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 37095 4eaf00000001000000000000036674700663617374656c026e6c0000010001 4eaf80000001000000020002036674700663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 37096 63000000000100000000000003777777077765627465616d026e6c0000010001 63008000000100000002000003777777077765627465616d026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c02f 37097 15c600000001000000000000026e7308767575727765726b026e6c0000010001 15c680000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 37098 2f90000000010000000000000734657665727931026e6c00000f0001 2f90800000010000000200010734657665727931026e6c00000f0001c00c00020001000151800009026e730365646ec014c00c00020001000151800010036e733109756e69736f75726365c014c028000100010001518000043e3a51e4 37099 932f00000001000000000000036e73320b6368616d69646d65646961026e6c0000010001 932f80000001000000020002036e73320b6368616d69646d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0300001000100015180000452c0453fc00c0001000100015180000452c04540 37100 5c9800000001000000000000036e73310b6368616d69646d65646961026e6c0000010001 5c9880000001000000020002036e73310b6368616d69646d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c0453fc03e0001000100015180000452c04540 37101 92a50000000100000000000005656e7465720431306572026e6c0000010001 92a58000000100000002000205656e7465720431306572026e6c0000010001c0120002000100015180000f036e73310861746c616e74697ac017c01200020001000151800006036e7332c02fc02b00010001000151800004d5efa011c04600010001000151800004d5efa075 37102 0f9100000001000000000000056d61696c3109636c65616e706f7274026e6c00001c0001 0f9180000001000000020002056d61696c3109636c65616e706f7274026e6c00001c0001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 37103 6b7700000001000000000000056d61696c3109636c65616e706f7274026e6c0000010001 6b7780000001000000020002056d61696c3109636c65616e706f7274026e6c0000010001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 37104 b11c00000001000000000000056d61696c3209636c65616e706f7274026e6c00001c0001 b11c80000001000000020002056d61696c3209636c65616e706f7274026e6c00001c0001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 37105 0c6400000001000000000000056d61696c3209636c65616e706f7274026e6c0000010001 0c6480000001000000020002056d61696c3209636c65616e706f7274026e6c0000010001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 37106 d4ad000000010000000000000d646f6d696e6f68617373656c740a6f7264696e612d747469026e6c0000010001 d4ad800000010000000200010d646f6d696e6f68617373656c740a6f7264696e612d747469026e6c0000010001c01a0002000100015180000d036e7332066f7264696e61c025c01a00020001000151800011036e73320777697265687562036e657400c03900010001000151800004c297c1e9 37107 5cc200100001000000000001026e7304696d636f026e6c00000100010000290800000080000000 5cc280000001000000020002026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a0000291000000000000000 37108 891b0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 891b8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 37109 ee4f0000000100000000000006647269656465077765622d6c6f67026e6c0000010001 ee4f8000000100000003000306647269656465077765622d6c6f67026e6c0000010001c0130002000100015180000b036e733104696c7365c01bc01300020001000151800006036e7332c033c01300020001000151800006036e7333c033c02f000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 37110 3dd00000000100000000000009652d6c756e61746963026e6c0000010001 3dd08000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 37111 e10a28000001000000010000026e6c0000060001055f6c646170045f746370026763065f6d736463731276616e64696a6b63736164766f636174656e026e6c0000210001000002580024000000640cc4067365727665721276616e64696a6b63736164766f636174656e026e6c00 e10aa8040000000000000000 37112 07b200000001000000000000037777770b6465706f6d7061646f7572026e6c0000010001 07b280000001000000030001037777770b6465706f6d7061646f7572026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 37113 b66400000001000000000000136c617362656472696a6664656e686172746f67026e6c0000010001 b66480000001000000020000136c617362656472696a6664656e686172746f67026e6c0000010001c00c00020001000151800013036e733109326575726f686f737403636f6d00c00c00020001000151800006036e7332c038 37114 9b8b00000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 9b8b80000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 37115 6c0e000000010000000000000f65726f746973636b6c696b6c696a6e026e6c0000010001 6c0e840300010000000100000f65726f746973636b6c696b6c696a6e026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 37116 742200000001000000000000036e73320b7669616e6574776f726b73026e6c0000260001 742280000001000000020002036e73320b7669616e6574776f726b73026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 37117 0000000070024000b66a00000204053401010402 000080010000000000000000 37118 0389000000010000000000000762616e6e65727303647161026e6c0000010001 0389800000010000000200000762616e6e65727303647161026e6c0000010001c0140002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0140002000100015180000805726f6b696ec033 37119 b70f000000010000000000000a70657263657074696f6e10746869656d656d65756c656e686f6666026e6c0000010001 b70f800000010000000200020a70657263657074696f6e10746869656d656d65756c656e686f6666026e6c0000010001c0170002000100015180000c036e73310564656d6f6ec028c01700020001000151800006036e7332c040c03c00010001000151800004c29f4906c05400010001000151800004c29fb004 37120 497d00000001000000000000034e533108485a45454c414e44026e6c00001c0001 497d80000001000000040004034e533108485a45454c414e44026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000b086d6965706d696570c010c0100002000100015180000e036e733107737572666e6574c019c00c0001000100015180000491130101c03b00010001000151800004911301dcc04d00010001000151800004911334dec06400010001000151800004c0576a65 37121 6a5700000001000000000000034e533108485a45454c414e44026e6c0000010001 6a5780000001000000040004034e533108485a45454c414e44026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000b086d6965706d696570c010c0100002000100015180000e036e733107737572666e6574c019c00c0001000100015180000491130101c03b00010001000151800004911301dcc04d00010001000151800004911334dec06400010001000151800004c0576a65 37122 f61800000001000000000000034e533208485a45454c414e44026e6c00001c0001 f61880000001000000040004034e533208485a45454c414e44026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000b086d6965706d696570c010c0100002000100015180000e036e733107737572666e6574c019c02d0001000100015180000491130101c00c00010001000151800004911301dcc04d00010001000151800004911334dec06400010001000151800004c0576a65 37123 3b3d00000001000000000000034e533208485a45454c414e44026e6c0000010001 3b3d80000001000000040004034e533208485a45454c414e44026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000b086d6965706d696570c010c0100002000100015180000e036e733107737572666e6574c019c02d0001000100015180000491130101c00c00010001000151800004911301dcc04d00010001000151800004911334dec06400010001000151800004c0576a65 37124 0b0f00000001000000000000037777770a7365782d7a6f656b6572026e6c0000010001 0b0f80000001000000020000037777770a7365782d7a6f656b6572026e6c0000010001c0100002000100015180000f026e73096379626572636f6d6dc01bc01000020001000151800006036e7332c032 37125 ab3900000001000000000000037777771167726174697373657866696c6d706a6573026e6c0000010001 ab3980000001000000030003037777771167726174697373657866696c6d706a6573026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc022c0100002000100015180000704646e7332c03bc0100002000100015180000704646e7333c03bc03600010001000151800004d44fe803c05000010001000151800004c3f5c782c06300010001000151800004d44ff303 37126 53eb00000001000000000000096863632d67726f6570026e6c0000010001 53eb80000001000000020002096863632d67726f6570026e6c0000010001c00c0002000100015180000e036e7331077175616e746973c016c00c00020001000151800006036e7332c02ec02a000100010001518000043ed44440c04400010001000151800004d4ccca83 37127 6e5d00000001000000000001036e73320b776f726c646f6e6c696e65026e6c00000100010000291000000000000000 6e5d80000001000000030003036e73320b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f133250000291000000000000000 37128 9fe300000001000000000001036e73320b776f726c646f6e6c696e65026e6c00001c00010000291000000000000000 9fe380000001000000030003036e73320b776f726c646f6e6c696e65026e6c00001c0001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f133250000291000000000000000 37129 cea000000001000000000001036e73320b776f726c646f6e6c696e65026e6c00002600010000291000000000000000 cea080000001000000030003036e73320b776f726c646f6e6c696e65026e6c0000260001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f133250000291000000000000000 37130 623c00000001000000000000096e6f736e6965757773026e6c0000010001 623c80000001000000020002096e6f736e6965757773026e6c0000010001c00c00020001000151800010066d696e6e6965066f6d726f6570c016c00c0002000100015180000805726f62696ec031c02a00010001000151800004913a1e04c04600010001000151800004913a1a34 37131 b77f5e2550104470c8890000000000000000 b77fde240000000000000000 37132 e535000000010000000000000a636172732d7061727473026e6c0000ff0001 e535800000010000000200020a636172732d7061727473026e6c0000ff0001c00c00020001000151800014036e73310d78786c776562686f7374696e67c017c00c00020001000151800006036e7332c02fc02b000100010001518000045104580ac04b000100010001518000045104601e 37133 b77f5e2550184470c1d00000009411de000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03d4403c55540003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000 b77fde240000000000000000 37134 afe600000001000000000000036e73310a63796265726d65646961026e6c0000010001 afe680000001000000020002036e73310a63796265726d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e818c0ac03d000100010001518000043e3a2d99 37135 f33f00000001000000000000036e73320a63796265726d65646961026e6c0000010001 f33f80000001000000020002036e73320a63796265726d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f000100010001518000043e818c0ac00c000100010001518000043e3a2d99 37136 d1250000000100000000000003706f70076a616e76616c6b026e6c0000010001 d1258000000100000002000003706f70076a616e76616c6b026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 37137 eb0000000001000000000001026e73076e656473746174026e6c00001c00010000291000000000000000 eb0080000001000000020003026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 37138 ca9700000001000000000001026e73076e656473746174026e6c00002600010000291000000000000000 ca9780000001000000020003026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 37139 eeec00000001000000000001036e7332076e656473746174026e6c00000100010000291000000000000000 eeec80000001000000020003036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 37140 b77f5e3350114462c7f20000000000000000 b77fde340000000000000000 37141 c5bd00000001000000000001036e7332076e656473746174026e6c00001c00010000291000000000000000 c5bd80000001000000020003036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 37142 81cc00000001000000000001036e7332076e656473746174026e6c00002600010000291000000000000000 81cc80000001000000020003036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 37143 575300000001000000000001036e7333076e656473746174026e6c00001c00010000291000000000000000 575380000001000000020003036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 37144 88e600000001000000000001036e7333076e656473746174026e6c00002600010000291000000000000000 88e680000001000000020003036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 37145 48e00000000100000000000003777777097364677477656c6c6f026e6c0000010001 48e08000000100000002000103777777097364677477656c6c6f026e6c0000010001c0100002000100015180000a036e733303777873c01ac01000020001000151800006036e7334c032c04400010001000151800004d5ef9a65 37146 957500000001000000000001036e7334076e656473746174026e6c00000100010000291000000000000000 957580000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 37147 fe590000000100000000000008686f73746e616d650462696e640000100003 fe598000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37148 feb000000001000000000001036e7334076e656473746174026e6c00001c00010000291000000000000000 feb080000001000000020003036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 37149 3e2c00000001000000000000037777770e6f63636173696f6e63656e747265026e6c0000010001 3e2c80000001000000030001037777770e6f63636173696f6e63656e747265026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01fc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c051c033000100010001518000043efa0202 37150 0000000070024000625d00000204053401010402 000080010000000000000000 37151 600700000001000000000001036e7334076e656473746174026e6c00002600010000291000000000000000 600780000001000000020003036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 37152 68ae000000010000000000000e736f75726365666c657863617265026e6c00000f0001 68ae800000010000000200020e736f75726365666c657863617265026e6c00000f0001c00c0002000100015180000d026e73076e65746c616e64c01bc00c00020001000151800006036e7332c032c02f00010001000151800004d9aa2042c04800010001000151800004d9aa2c06 37153 b77f5e3450104462c7f10000000000000000 b77fde340000000000000000 37154 5f4200000001000000000000037777770f6d757365756d626f65726861617665026e6c0000010001 5f4280000001000000020002037777770f6d757365756d626f65726861617665026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c020c01000020001000151800006036e7332c038c03400010001000151800004d4b20403c04d00010001000151800004d5881e45 37155 2ba000000001000000000000036e73340767617574656e67026e6c0000010001 2ba080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37156 13ae00000001000000000000036e73340767617574656e67026e6c0000010001 13ae80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37157 d19c00000001000000000000046d61696c0b776174657273747564696f026e6c0000010001 d19c80000001000000030003046d61696c0b776174657273747564696f026e6c0000010001c0110002000100015180000c036e7331053266617374c01dc01100020001000151800006036e7332c035c01100020001000151800006036e7333c035c0310001000100015180000450f7c022c049000100010001518000043e858122c05b000100010001518000045117eb22 37158 b0ac000000010000000000001162616b6b6572626172656e647265636874026e6c00000f0001 b0ac800000010000000200001162616b6b6572626172656e647265636874026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c036 37159 31950000000100000000000008686f73746e616d650462696e640000100003 31958000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37160 c08f0000000100000000000008686f73746e616d650462696e640000100003 c08f8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37161 49e300000001000000000000026e7304696d636f026e6c0000010001 49e380000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 37162 b7821b2150104470b77d0000000000000000 b7829b240000000000000000 37163 ec8d00000001000000000000036e733106776964657873026e6c0000010001 ec8d80000001000000030002036e733106776964657873026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa0703 37164 a10f00000001000000000000036e733306776964657873026e6c0000010001 a10f80000001000000030002036e733306776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800002c00cc02b00010001000151800004d4ccc0fcc00c000100010001518000043efa0703 37165 b7821b2150184470cf8800000094f41a000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03d4403c55540003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000 b7829b240000000000000000 37166 cfdf00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 cfdf80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37167 213900000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 213980000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37168 3683000000010000000000000377777707696e6762616e6b026e6c0000010001 3683800000010000000200020377777707696e6762616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c018c01000020001000151800006036e7332c030c02c0001000100015180000491dd19c2c0420001000100015180000491dd5dc2 37169 0b510000000100000000000008746f706c696a73740b676966706c6161746a6573026e6c0000010001 0b518000000100000002000008746f706c696a73740b676966706c6161746a6573026e6c0000010001c01500020001000151800013036e73310c616374697665646f6d61696ec021c01500020001000151800006036e7332c039 37170 62140000000100000000000005646830373406787334616c6c026e6c0000010001 62148000000100000003000205646830373406787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 37171 45a50000000100000000000004696c73650861726e6f73746174026e6c0000010001 45a58000000100000002000204696c73650861726e6f73746174026e6c0000010001c0110002000100015180000e026e7308696e7465722d6974c01ac01100020001000151800006036e7332c031c02e00010001000151800004d5c4385ac04800010001000151800004d5c4385b 37172 7656000000010000000000000377777714686f7574766573746572696a656e6865746c6f6f026e6c0000010001 7656840300010000000100000377777714686f7574766573746572696a656e6865746c6f6f026e6c0000010001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 37173 468c0000000100000000000008686f73746e616d650462696e640000100003 468c8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37174 a57700000001000000000000036e733105696e746578026e6c00001c0001 a57780000001000000020002036e733105696e746578026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047378c0380001000100015180000451047379 37175 d58d00000001000000000000036e733105696e746578026e6c0000260001 d58d80000001000000020002036e733105696e746578026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047378c0380001000100015180000451047379 37176 d2c500000001000000000000036e733205696e746578026e6c00001c0001 d2c580000001000000020002036e733205696e746578026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a0001000100015180000451047378c00c0001000100015180000451047379 37177 8eaa00000001000000000000036e733205696e746578026e6c0000260001 8eaa80000001000000020002036e733205696e746578026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a0001000100015180000451047378c00c0001000100015180000451047379 37178 6e5d00000001000000000000036e73320b776f726c646f6e6c696e65026e6c0000010001 6e5d80000001000000030002036e73320b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 37179 9fe300000001000000000000036e73320b776f726c646f6e6c696e65026e6c00001c0001 9fe380000001000000030002036e73320b776f726c646f6e6c696e65026e6c00001c0001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 37180 cea000000001000000000000036e73320b776f726c646f6e6c696e65026e6c0000260001 cea080000001000000030002036e73320b776f726c646f6e6c696e65026e6c0000260001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 37181 b7821b2f50114462b6e60000000000000000 b7829b240000000000000000 37182 0000000070024000723e00000204053401010402 000080010000000000000000 37183 7d2700000001000000000000037777770c6261737374726f6d626f6e65026e6c0000010001 7d2780000001000000020000037777770c6261737374726f6d626f6e65026e6c0000010001c01000020001000151800015036e73350b686f7374696e67776f7278036e657400c01000020001000151800006036e7336c035 37184 b77a0000000100000000000009676f6c662d6c616e64026e6c0000ff0001 b77a8000000100000002000109676f6c662d6c616e64026e6c0000ff0001c00c0002000100015180000a036e733303777873c016c00c00020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 37185 213600100001000000000001037777770e776562686f7374696e6774616c6b026e6c00000100010000290800000080000000 213680000001000000030003037777770e776562686f7374696e6774616c6b026e6c0000010001c01000020001000151800012036e73310b6b6c696b686f7374696e67c01fc01000020001000151800006036e7332c037c01000020001000151800015036e73310b6b6c696b686f7374696e6703636f6d00c033000100010001518000044260dd7ec051000100010001518000044260dd7f0000291000000000000000 37186 aaf400000001000000000000037777770d6475746368746f707369746573026e6c0000010001 aaf480000001000000020002037777770d6475746368746f707369746573026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01ec01000020001000151800006036e7332c036c03200010001000151800004d5efa011c04d00010001000151800004d5efa075 37187 a8a700000001000000000000037777770a677265656e706c617a61026e6c0000010001 a8a780000001000000020000037777770a677265656e706c617a61026e6c0000010001c01000020001000151800019046e7331310e666c6578776562686f7374696e6703636f6d00c01000020001000151800007046e733132c034 37188 be0d0000000100000000000007646f6c66696a6e026e6c00000f0001 be0d8000000100000003000307646f6c66696a6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 37189 b7821b3050104462b6e50000000000000000 b7829b340000000000000000 37190 9ed000000001000000000000026d6907756e696d616173026e6c00000f0001 9ed080000001000000030003026d6907756e696d616173026e6c00000f0001c00f0002000100015180000906726c30303031c00fc00f0002000100015180000906696361737332c00fc00f0002000100015180000e036e733107737572666e6574c017c02b0001000100015180000489780101c0400001000100015180000489780105c05500010001000151800004c0576a65 37191 a12d0000000100000000000003777777036f7662026e6c0000010001 a12d8000000100000002000003777777036f7662026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02c 37192 b782ac965010447035e90000000000000000 37193 b782ac9650184470f0ae000000945160000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03d4403c55540003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000 37194 b4e10000000100000000000003777777046476686e026e6c0000010001 b4e18000000100000003000303777777046476686e026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004c1ad573dc04600010001000151800004c1ad573ec05800010001000151800004d5880089 37195 149700000001000000000000036e733503777873026e6c0000010001 149780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37196 92d700000001000000000000037777770e686367656c6465726d616c73656e026e6c0000010001 92d780000001000000020000037777770e686367656c6465726d616c73656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c039 37197 e72b000000010000000000000d766f726b686566747275636b73026e6c0000010001 e72b800000010000000200000d766f726b686566747275636b73026e6c0000010001c00c0002000100015180000c036e723705692d702d64c01ac00c00020001000151800006036e7236c032 37198 4ebe000000010000000000000976616e2d6c69657265026e6c00001c0001 4ebe800000010000000200020976616e2d6c69657265026e6c00001c0001c00c0002000100015180000a036e733103696166c016c00c00020001000151800006036e7332c02ec02a000100010001518000045059e040c040000100010001518000045059ee03 37199 64250000000100000000000003777777046a686d73026e6c0000010001 64258000000100000002000003777777046a686d73026e6c0000010001c0100002000100015180000c026e7306766576696461c015c01000020001000151800006036e7332c02c 37200 6a4f00000001000000000000086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001 6a4f80000001000000020002086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001c0220002000100015180000d036e7331066d696e646566c027c02200020001000151800006036e7332c03fc03b00010001000151800004d9a9e7c6c05400010001000151800004d9a9e7c5 37201 788d0000000100000000000004676174650365706f026e6c0000010001 788d8000000100000002000104676174650365706f026e6c0000010001c01100020001000151800002c00cc0110002000100015180000b026e73026e6c036e657400c00c0001000100015180000491408003 37202 dd8300000001000000000000036e733203757063026e6c0000010001 dd8380000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 37203 b782aca45011446235520000000000000000 37204 86fb00000001000000000000036e7331026973026e6c0000010001 86fb80000001000000020002036e7331026973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852102c03500010001000151800004d5c41503 37205 57ad00000001000000000000036e7332026973026e6c0000010001 57ad80000001000000020002036e7332026973026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02700010001000151800004d5852102c00c00010001000151800004d5c41503 37206 a2030000000100000000000007676c696d707365026e6c0000ff0001 a2038000000100000002000007676c696d707365026e6c0000ff0001c00c00020001000151800012036e7335087a6f6e656564697403636f6d00c00c00020001000151800006036e7337c02c 37207 3a99000000010000000000000962656472696a76656e0c6d6f6e73746572626f617264026e6c0000010001 3a99800000010000000300000962656472696a76656e0c6d6f6e73746572626f617264026e6c0000010001c0160002000100015180000e036e733104746d7077036e657400c01600020001000151800006036e7332c03bc01600020001000151800015056f73636172076d6f6e7374657202636f02756b00 37208 95cf000000010000000000000874657472616e6564026e6c0000ff0001 95cf800000010000000200020874657472616e6564026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 37209 cb0100000001000000000000037777770a7374617274706f696e74026e6c0000010001 cb0180000001000000020002037777770a7374617274706f696e74026e6c0000010001c0100002000100015180000f04646e7331076e65647a6f6e65c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d9aa0101c04a00010001000151800004d9aa0128 37210 b782aca55010446235510000000000000000 37211 c5c500000001000000000000036e733108696e7465722d7873026e6c0000010001 c5c580000001000000020002036e733108696e7465722d7873026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02d000100010001518000043e0452abc00c000100010001518000043e0452ac 37212 229c00000001000000000000036e733008696e7465722d7873026e6c0000010001 229c80000001000000020002036e733008696e7465722d7873026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c000100010001518000043e0452abc03b000100010001518000043e0452ac 37213 67320000000100000000000005646e732d3708696e7465722d7873026e6c00001c0001 67328000000100000002000205646e732d3708696e7465722d7873026e6c00001c0001c01200020001000151800006036e7330c012c01200020001000151800006036e7331c012c02f000100010001518000043e0452abc041000100010001518000043e0452ac 37214 74580000000100000000000005646e732d3708696e7465722d7873026e6c0000260001 74588000000100000002000205646e732d3708696e7465722d7873026e6c0000260001c01200020001000151800006036e7330c012c01200020001000151800006036e7331c012c02f000100010001518000043e0452abc041000100010001518000043e0452ac 37215 ac2a0000000100000000000005646e732d3808696e7465722d7873026e6c00001c0001 ac2a8000000100000002000205646e732d3808696e7465722d7873026e6c00001c0001c01200020001000151800006036e7330c012c01200020001000151800006036e7331c012c02f000100010001518000043e0452abc041000100010001518000043e0452ac 37216 84790000000100000000000005646e732d3808696e7465722d7873026e6c0000260001 84798000000100000002000205646e732d3808696e7465722d7873026e6c0000260001c01200020001000151800006036e7330c012c01200020001000151800006036e7331c012c02f000100010001518000043e0452abc041000100010001518000043e0452ac 37217 55b70000000100000000000003656c3107696e7465727873026e6c00001c0001 55b78000000100000002000203656c3107696e7465727873026e6c00001c0001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37218 f0d20000000100000000000003656c3107696e7465727873026e6c0000260001 f0d28000000100000002000203656c3107696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37219 11a30000000100000000000003656c3207696e7465727873026e6c00001c0001 11a38000000100000002000203656c3207696e7465727873026e6c00001c0001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37220 ae4b0000000100000000000003656c3207696e7465727873026e6c0000260001 ae4b8000000100000002000203656c3207696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37221 e7280000000100000000000003656c3307696e7465727873026e6c00001c0001 e7288000000100000002000203656c3307696e7465727873026e6c00001c0001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37222 51180000000100000000000003656c3307696e7465727873026e6c0000260001 51188000000100000002000203656c3307696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37223 61380000000100000000000003656c3407696e7465727873026e6c00001c0001 61388000000100000002000203656c3407696e7465727873026e6c00001c0001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37224 0c6c0000000100000000000003656c3407696e7465727873026e6c0000260001 0c6c8000000100000002000203656c3407696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37225 eb0000000001000000000000026e73076e656473746174026e6c00001c0001 eb0080000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 37226 ff060000000100000000000009737461676563726577026e6c00000f0001 ff068000000100000003000309737461676563726577026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c016c00c0002000100015180000a076e736175746832c032c00c0002000100015180000a076e736175746833c032c02a00010001000151800004d5880c33c04400010001000151800004d5880c3bc05a00010001000151800004d4ccc00b 37227 e3d600000001000000000000036e7331057061727365026e6c00001c0001 e3d680000001000000020002036e7331057061727365026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9b0bc03800010001000151800004d5efb238 37228 b7f400000001000000000000036e7331057061727365026e6c0000260001 b7f480000001000000020002036e7331057061727365026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9b0bc03800010001000151800004d5efb238 37229 c9a700000001000000000000036e7332057061727365026e6c00001c0001 c9a780000001000000020002036e7332057061727365026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d5ef9b0bc00c00010001000151800004d5efb238 37230 76a600000001000000000000036e7332057061727365026e6c0000260001 76a680000001000000020002036e7332057061727365026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d5ef9b0bc00c00010001000151800004d5efb238 37231 ca9700000001000000000000026e73076e656473746174026e6c0000260001 ca9780000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 37232 eeec00000001000000000000036e7332076e656473746174026e6c0000010001 eeec80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37233 c5bd00000001000000000000036e7332076e656473746174026e6c00001c0001 c5bd80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37234 81cc00000001000000000000036e7332076e656473746174026e6c0000260001 81cc80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37235 e04c000000010000000000000377777705686572636f026e6c0000010001 e04c800000010000000200020377777705686572636f026e6c0000010001c01000020001000151800012036e73310b69666163696c6974696573c016c01000020001000151800006036e7332c02ec02a00010001000151800004d9164306c04800010001000151800004d9164307 37236 575300000001000000000000036e7333076e656473746174026e6c00001c0001 575380000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 37237 88e600000001000000000000036e7333076e656473746174026e6c0000260001 88e680000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 37238 957500000001000000000000036e7334076e656473746174026e6c0000010001 957580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37239 feb000000001000000000000036e7334076e656473746174026e6c00001c0001 feb080000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37240 600700000001000000000000036e7334076e656473746174026e6c0000260001 600780000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37241 003d00000001000000000000046d61696c03637478024e4c0000010001 003d80000001000000020000046d61696c03637478024e4c0000010001c0110002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0110002000100015180000d077669312d6e7330026174c034 37242 04db00000001000000000000037777770c62726f65726d616e6e636172026e6c0000010001 04db80000001000000020000037777770c62726f65726d616e6e636172026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c034 37243 7c9900000001000000000000036e73320670726f6d6178026e6c0000010001 7c9980000001000000020002036e73320670726f6d6178026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004d590ef19c00c00010001000151800004d590ef1a 37244 33b700000001000000000000026e730670726f6d6178026e6c0000010001 33b780000001000000020002026e730670726f6d6178026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d590ef19c03800010001000151800004d590ef1a 37245 58aa00000001000000000000037777770c646f63656e74656e62616e6b026e6c0000010001 58aa80000001000000020002037777770c646f63656e74656e62616e6b026e6c0000010001c01000020001000151800010036e7331097468652d676c6f6265c01dc01000020001000151800006036e7332c035c03100010001000151800004d584b482c04d00010001000151800004d584b483 37246 56130000000100000000000003777777086f6e6568656c6c6f026e6c0000010001 56138000000100000002000203777777086f6e6568656c6c6f026e6c0000010001c0100002000100015180000e036e73310770726f74656f6ec019c01000020001000151800006036e7332c031c02d00010001000151800004c1433804c04700010001000151800004d4992b27 37247 1ef80000000100000000000003777777086f6e6568656c6c6f026e6c0000010001 1ef88000000100000002000203777777086f6e6568656c6c6f026e6c0000010001c0100002000100015180000e036e73310770726f74656f6ec019c01000020001000151800006036e7332c031c02d00010001000151800004c1433804c04700010001000151800004d4992b27 37248 c3270000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c3278000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37249 5cce01000001000000000000036e733104686f6d65026e6c0000010001 5cce81000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 37250 42110000000100000000000004746f6465026e6c00000f0001 42118000000100000002000204746f6465026e6c00000f0001c00c0002000100015180000c036e7331056d61786573c011c00c00020001000151800006036e7332c029c025000100010001518000045045402ec03d000100010001518000045045402f 37251 bb1e000000010000000000000745434f4e3232380c67656c6465726d616c73656e026e6c0000010001 bb1e800000010000000200020745434f4e3232380c67656c6465726d616c73656e026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c03500010001000151800004c143b9b5c04600010001000151800004c143b9b6 37252 bc99000000010000000000000377777703736173026e6c0000010001 bc99800000010000000300000377777703736173026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c02ec0100002000100015180000805646e733132c02e 37253 cac7000000010000000000000e63656e747261616c626568656572026e6c00000f0001 cac7800000010000000300030e63656e747261616c626568656572026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae 37254 f6a40000000100000000000006736d7470303104756e6574026e6c0000010001 f6a48000000100000002000006736d7470303104756e6574026e6c0000010001c01300020001000151800013036e733109752d73657276657273036e657400c01300020001000151800006036e7332c030 37255 65900000000100000000000006736d7470303204756e6574026e6c0000010001 65908000000100000002000006736d7470303204756e6574026e6c0000010001c01300020001000151800013036e733109752d73657276657273036e657400c01300020001000151800006036e7332c030 37256 68720000000100000000000006736d7470303104756e6574026e6c0000010001 68728000000100000002000006736d7470303104756e6574026e6c0000010001c01300020001000151800013036e733109752d73657276657273036e657400c01300020001000151800006036e7332c030 37257 adcb00000001000000000000036e7331026973026e6c0000010001 adcb80000001000000020002036e7331026973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852102c03500010001000151800004d5c41503 37258 a78d00000001000000000000037777770b7363686970706572746a65026e6c0000010001 a78d80000001000000020002037777770b7363686970706572746a65026e6c0000010001c0100002000100015180000b036e73310467766473c01cc01000020001000151800006036e7332c034c030000100010001518000043e3a8989c047000100010001518000043e3a898a 37259 69b700100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 69b780000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 37260 1a3d00100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 1a3d80000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 37261 c85a0000000100000000000003777777097368617261706f7661026e6c0000010001 c85a8000000100000003000003777777097368617261706f7661026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036c0100002000100015180000a076e73686f737433c036 37262 bcf4000000010000000000000377777712666565737470616c6569736e6577796f726b026e6c0000010001 bcf4800000010000000200020377777712666565737470616c6569736e6577796f726b026e6c0000010001c0100002000100015180000f026e7309656174736572766572c023c01000020001000151800006036e7332c03ac03700010001000151800004d4cb0e42c05200010001000151800004d4cb1221 37263 a740000000010000000000000c6672657368737570706f7274026e6c00000f0001 a740800000010000000300030c6672657368737570706f7274026e6c00000f0001c00c0002000100015180000e036e73310761737034616c6cc019c00c00020001000151800006036e7332c031c00c00020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 37264 48da000000010000000000000377777706726964657273026e6c0000010001 48da800000010000000200020377777706726964657273026e6c0000010001c0100002000100015180000a036e733103697767c017c01000020001000151800006036e7332c02fc02b0001000100015180000451045bbfc04100010001000151800004511135a1 37265 3cf700000001000000000000037777770e776562686f7374696e6774616c6b026e6c0000010001 3cf780000001000000030002037777770e776562686f7374696e6774616c6b026e6c0000010001c01000020001000151800012036e73310b6b6c696b686f7374696e67c01fc01000020001000151800006036e7332c037c01000020001000151800015036e73310b6b6c696b686f7374696e6703636f6d00c033000100010001518000044260dd7ec051000100010001518000044260dd7f 37266 56990000000100000000000003777777076172636f62656c026e6c0000010001 56998000000100000002000003777777076172636f62656c026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 37267 229a00000001000000000000046d61696c0a706861726d617061636b026e6c0000010001 229a80000001000000020000046d61696c0a706861726d617061636b026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c036 37268 4f8800000001000000000000037777770d676f727465722d6c75696b656e026e6c0000010001 4f8880000001000000020002037777770d676f727465722d6c75696b656e026e6c0000010001c01000020001000151800019036e73311277696e646b7261636874696e7465726e6574c01ec01000020001000151800006036e7332c036c0320001000100015180000450f2eea1c0570001000100015180000450f2eea2 37269 7b2d00000001000000000000026e7303626974026e6c0000010001 7b2d80000001000000030003026e7303626974026e6c0000010001c00f0002000100015180000a076e736175746831c00fc00f0002000100015180000a076e736175746832c00fc00f0002000100015180000a076e736175746833c00fc02700010001000151800004d5880c33c03d00010001000151800004d5880c3bc05300010001000151800004d4ccc00b 37270 bdd600000001000000000000066a77626f6f6e026e6c0000010001 bdd680000001000000030002066a77626f6f6e026e6c0000010001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 37271 092a00000001000000000000037777770e616c6c6573696e74696c62757267026e6c0000010001 092a80000001000000030003037777770e616c6c6573696e74696c62757267026e6c0000010001c0100002000100015180000e076e73617574683103626974c01fc0100002000100015180000a076e736175746832c03bc0100002000100015180000a076e736175746833c03bc03300010001000151800004d5880c33c04d00010001000151800004d5880c3bc06300010001000151800004d4ccc00b 37272 f21f000000010000000000000377777707646f7269746f73026e6c0000010001 f21f800000010000000300030377777707646f7269746f73026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004c3f13ceec04800010001000151800004c372eb43c05a000100010001518000043e320e8f 37273 d428000000010000000000000a68616d69666c65757273026e6c00001c0001 d428800000010000000300030a68616d69666c65757273026e6c00001c0001c00c0002000100015180000f036e7331086e6f766178657373c017c00c00020001000151800006036e7332c02fc00c00020001000151800006036e7333c02fc02b00010001000151800004d5c98015c04600010001000151800004d5c9bf12c05800010001000151800004d5ef9c26 37274 70f80000000100000000000009756974657277696a6b06787334616c6c026e6c0000010001 70f88000000100000003000209756974657277696a6b06787334616c6c026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000d026e730472697065036e657400c03100010001000151800004c26d0642c04200010001000151800004c26d0963 37275 e1d000000001000000000000037777770668696e676973026e6c0000010001 e1d080000001000000020000037777770668696e676973026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 37276 f2e80000000100000000000009756974657277696a6b06787334616c6c026e6c0000010001 f2e88000000100000003000209756974657277696a6b06787334616c6c026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000d026e730472697065036e657400c03100010001000151800004c26d0642c04200010001000151800004c26d0963 37277 0aaa00000001000000000000036e733503777873026e6c0000010001 0aaa80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37278 41af0000000100000000000008656c63686561706f026e6c0000010001 41af8000000100000002000008656c63686561706f026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02d 37279 af6e0000000100000000000003777777087467766c6564656e026e6c0000010001 af6e8000000100000002000003777777087467766c6564656e026e6c0000010001c01000020001000151800011036e733107726f6b73636f6d036e657400c0100002000100015180000e036e733207726f6b73636f6dc019 37280 9ceb00000001000000000000046d61696c06626172746967026e6c0000010001 9ceb80000001000000020002046d61696c06626172746967026e6c0000010001c01100020001000151800010036e733109686f73746e65746276c018c01100020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 37281 00f900000001000000000000076e6577796f726b066f6e65646576026e6c00001c0001 00f980000001000000020002076e6577796f726b066f6e65646576026e6c00001c0001c01400020001000151800008056d69616d69c014c01400020001000151800002c00cc02f00010001000151800004d5ef8255c00c00010001000151800004d5ef82eb 37282 4ab900000001000000000000076e6577796f726b066f6e65646576026e6c0000260001 4ab980000001000000020002076e6577796f726b066f6e65646576026e6c0000260001c01400020001000151800008056d69616d69c014c01400020001000151800002c00cc02f00010001000151800004d5ef8255c00c00010001000151800004d5ef82eb 37283 fcbb00000001000000000000056d69616d69066f6e65646576026e6c00001c0001 fcbb80000001000000020002056d69616d69066f6e65646576026e6c00001c0001c01200020001000151800002c00cc0120002000100015180000a076e6577796f726bc012c00c00010001000151800004d5ef8255c03b00010001000151800004d5ef82eb 37284 3d4400000001000000000000056d69616d69066f6e65646576026e6c0000260001 3d4480000001000000020002056d69616d69066f6e65646576026e6c0000260001c01200020001000151800002c00cc0120002000100015180000a076e6577796f726bc012c00c00010001000151800004d5ef8255c03b00010001000151800004d5ef82eb 37285 2ed800000001000000000000126175746f62656472696a6664656c616e6765026e6c00000f0001 2ed880000001000000030001126175746f62656472696a6664656c616e6765026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01fc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c051c033000100010001518000043efa0202 37286 9f8200000001000000000000037777770565626f6e65026e6c0000010001 9f8280000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 37287 f06f0000000100000000000003777777097368617261706f7661026e6c0000010001 f06f8000000100000003000003777777097368617261706f7661026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036c0100002000100015180000a076e73686f737433c036 37288 04c000000001000000000000037777770565626f6e65026e6c0000010001 04c080000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 37289 5dd900000001000000000000037777770565626f6e65026e6c0000010001 5dd980000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 37290 507000000001000000000000037777770a77616e6e616861766573026e6c0000010001 507080000001000000020002037777770a77616e6e616861766573026e6c0000010001c0100002000100015180000b026e7305706c616e74c01bc01000020001000151800006036e7332c032c02f00010001000151800004d59f0037c04600010001000151800004d59f0046 37291 9b6300000001000000000000037777770a736d7574736572766572026e6c0000010001 9b6380000001000000020002037777770a736d7574736572766572026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01bc01000020001000151800006036e7332c033c02f00010001000151800004d5efa011c04a00010001000151800004d5efa075 37292 8fc10000000100000000000003777777087364626d706c7573026e6c0000010001 8fc18000000100000002000203777777087364626d706c7573026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c019c01000020001000151800006036e7332c030c02d00010001000151800004c3402003c04600010001000151800004c340202b 37293 893900000001000000000000037777771062616e6e65726d616e6167656d656e74026e6c0000010001 893980000001000000030003037777771062616e6e65726d616e6167656d656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 37294 bea900000001000000000000096f75646577617465720a776f657264656e776562026e6c0000010001 bea980000001000000020000096f75646577617465720a776f657264656e776562026e6c0000010001c01600020001000151800013036e733009696e7465726c697a65036e657400c01600020001000151800006036e7331c039 37295 03db00000001000000000000037777770b657269712d686172616c64026e6c0000010001 03db80000001000000020002037777770b657269712d686172616c64026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c01cc01000020001000151800006036e7332c034c030000100010001518000045054e415c04c0001000100015180000451046014 37296 2c8a00000001000000000000036e733103696e67026e6c0000010001 2c8a80000001000000020002036e733103696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 37297 964500000001000000000000036e733203696e67026e6c0000010001 964580000001000000020002036e733203696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 37298 23bc0000000100000000000012736f6d657768657265696e686f6c6c616e64026e6c0000010001 23bc8403000100000001000012736f6d657768657265696e686f6c6c616e64026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 37299 332700000001000000000000036e7332076e656473746174026e6c0000010001 332780000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37300 936b00000001000000000000036e7334076e656473746174026e6c0000010001 936b80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37301 93cc0000000100000000000007737076697369740861726e6f73746174026e6c0000010001 93cc8000000100000002000207737076697369740861726e6f73746174026e6c0000010001c0140002000100015180000e026e7308696e7465722d6974c01dc01400020001000151800006036e7332c034c03100010001000151800004d5c4385ac04b00010001000151800004d5c4385b 37302 d18d00000001000000000000036e733109666972737466696e64026e6c0000010001 d18d80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37303 d18e00000001000000000000036e733209666972737466696e64026e6c0000010001 d18e80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37304 b0fb000000010000000000000c6970616d61726b6574696e67026e6c0000010001 b0fb800000010000000200010c6970616d61726b6574696e67026e6c0000010001c00c0002000100015180000a036e733303777873c019c00c00020001000151800006036e7334c031c04300010001000151800004d5ef9a65 37305 c44700000001000000000000095f6b65726265726f73045f746370026463065f6d736463730e52697070657264617061726b3239026e6c0000060001 c44784030001000000010000095f6b65726265726f73045f746370026463065f6d736463730e52697070657264617061726b3239026e6c0000060001c03400060001000038400036026e730f646f6d61696e2d7265676973747279c0340a686f73746d6173746572c04b0bf1e540000070800000384000278d0000003840 37306 d19000000001000000000000036e733109666972737466696e64026e6c0000010001 d19080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37307 d19100000001000000000000036e733209666972737466696e64026e6c0000010001 d19180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37308 7ea50000000100000000000004686f6d65066863636e6574026e6c0000010001 7ea58000000100000002000004686f6d65066863636e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c033 37309 84b100000001000000000000037777770d756e697465646d656d62657273026e6c0000010001 84b180000001000000020002037777770d756e697465646d656d62657273026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c03200010001000151800004d47bfd15c04400010001000151800004d47bfd16 37310 a4cc00000001000000000000037777770d756e697465646d656d62657273026e6c0000010001 a4cc80000001000000020002037777770d756e697465646d656d62657273026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c03200010001000151800004d47bfd15c04400010001000151800004d47bfd16 37311 489400000001000000000000036e73310f76656c64686f76656e64657369676e026e6c00001c0001 489480000001000000020002036e73310f76656c64686f76656e64657369676e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f5cbc042000100010001518000045054f5cc 37312 fd9400000001000000000000036e73320f76656c64686f76656e64657369676e026e6c00001c0001 fd9480000001000000020002036e73320f76656c64686f76656e64657369676e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc034000100010001518000045054f5cbc00c000100010001518000045054f5cc 37313 c79a00000001000000000000037777770d64616d65736c696e6765726965026e6c0000010001 c79a80000001000000030002037777770d64616d65736c696e6765726965026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 37314 1387000000010000000000000363686d0463687269026e6c0000010001 1387800000010000000200020363686d0463687269026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c015c01000020001000151800006036e7332c02cc02900010001000151800004d453c005c04700010001000151800004d453c006 37315 eecd000000010000000000000e776f6e64657266756c62757973310f6f6e6c696e652d696e7465726e6574026e6c0000010001 eecd800000010000000200020e776f6e64657266756c62757973310f6f6e6c696e652d696e7465726e6574026e6c0000010001c01b0002000100015180000f026e7309656174736572766572c02bc01b00020001000151800006036e7332c042c03f00010001000151800004d4cb0e42c05a00010001000151800004d4cb1221 37316 5cdd00000001000000000000176c616e6b686f7273742d746f75776661627269656b656e026e6c0000ff0001 5cdd80000001000000020001176c616e6b686f7273742d746f75776661627269656b656e026e6c0000ff0001c00c0002000100015180000d026e7307616d6572636f6dc024c00c00020001000151800006036e7331c03bc03800010001000151800004c2b2b20a 37317 4f6a00000001000000000000147363686164656e65742d7a61616e73747265656b026e6c00000f0001 4f6a80000001000000020001147363686164656e65742d7a61616e73747265656b026e6c00000f0001c00c0002000100015180000a036e733303777873c021c00c00020001000151800006036e7334c039c04b00010001000151800004d5ef9a65 37318 7e9900000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 7e9980000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 37319 d4a80000000100000000000003777777127761616e646572732d72696a7769656c656e026e6c0000010001 d4a88000000100000002000203777777127761616e646572732d72696a7769656c656e026e6c0000010001c01000020001000151800009036e7331026973c023c01000020001000151800006036e7332c03bc03700010001000151800004d5852102c04c00010001000151800004d5c41503 37320 2de40000000100000000000009652d6c756e61746963026e6c0000010001 2de48000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 37321 a4c400000001000000000000037777770d726164696f7665726f6e696361026e6c0000010001 a4c480000001000000020002037777770d726164696f7665726f6e696361026e6c0000010001c0100002000100015180000f036e7331086261736971776562c01ec01000020001000151800006036e7332c036c0320001000100015180000452c04516c04d0001000100015180000452c04542 37322 bfd000000001000000000000026e7303736261026e6c00001c0001 bfd080000001000000020001026e7303736261026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000d036e733203736261036e657400c00c00010001000151800004c2e57801 37323 37c400000001000000000000026e7303736261026e6c0000260001 37c480000001000000020001026e7303736261026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d036e733203736261036e657400c00c00010001000151800004c2e57801 37324 bd08000000010000000000000f737465656e6b732d73657276696365026e6c00001c0001 bd08800000010000000200020f737465656e6b732d73657276696365026e6c00001c0001c00c000200010001518000110a6c65757665686176656e03696772c01cc00c0002000100015180000d0a64656c6673686176656ec03bc030000100010001518000043e2d5e0dc04d000100010001518000043e2d5e82 37325 9954000000010000000000000377777709706c7573666f72756d026e6c0000010001 9954800000010000000200020377777709706c7573666f72756d026e6c0000010001c01000020001000151800012036e73310b737461727464657369676ec01ac01000020001000151800006036e7332c032c02e00010001000151800004d5f73823c04c000100010001518000043ed45149 37326 f57a00000001000000000000026e73076e656473746174026e6c0000010001 f57a80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 37327 fd1a00000001000000000000036e7333076e656473746174026e6c0000010001 fd1a80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 37328 51fa00000001000000000000036d783306787334616c6c026e6c0000010001 51fa80000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 37329 03bd00000001000000000000036e73340767617574656e67026e6c0000010001 03bd80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37330 03c000000001000000000000036e73340767617574656e67026e6c0000010001 03c080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37331 6625000000010000000000000a76776368617274657273026e6c00000f0001 6625800000010000000200020a76776368617274657273026e6c00000f0001c00c00020001000151800018067765626e69780e6575726f636f6e73756c74616e74c017c00c0002000100015180000a076d61696c6e6978c032c02b000100010001518000045117e555c04f000100010001518000045117e556 37332 bccf00000001000000000000037777770875726c6265757273026e6c0000010001 bccf80000001000000020002037777770875726c6265757273026e6c0000010001c0100002000100015180000b036e733104696e6263c019c01000020001000151800006036e7332c031c02d00010001000151800004d5852324c04400010001000151800004d5852323 37333 9aa9000000010000000000000461746173026e6c00000f0001 9aa9800000010000000200020461746173026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 37334 c1780000000100000000000003777777046b6e7262026e6c0000010001 c1788000000100000003000303777777046b6e7262026e6c0000010001c01000020001000151800010036e733109657863657074696f6ec015c01000020001000151800006036e7332c02dc01000020001000151800006036e7333c02dc02900010001000151800004d5c9a38cc04500010001000151800004d5c9a38dc05700010001000151800004d5c9af03 37335 e4db00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 e4db80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37336 265700000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 265780000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37337 59ba00000001000000000000026e75026e6c0000010001 59ba80000001000000030003026e75026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc023000100010001518000043e45a282c035000100010001518000043e45a283c047000100010001518000043e45a284 37338 593d000000010000000000000377777708636f6e2d6e656374026e6c0000010001 593d800000010000000200000377777708636f6e2d6e656374026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c043 37339 f4240000000100000000000003777777097a616b656e6d656e75026e6c0000010001 f4248000000100000002000203777777097a616b656e6d656e75026e6c0000010001c0100002000100015180000a036e733103696166c01ac01000020001000151800006036e7332c032c02e000100010001518000045059e040c044000100010001518000045059ee03 37340 828a00000001000000000000037777770c776572656c6477696e6b656c026e6c0000010001 828a80000001000000020001037777770c776572656c6477696e6b656c026e6c0000010001c0100002000100015180000d026e7307616e74656e6e61c01dc0100002000100015180001306696e666f726d07616e74656e6e6102646b00c03100010001000151800004d995dd13 37341 9428000000010000000000000377777707636f6e74696e75026e6c0000010001 9428800000010000000300020377777707636f6e74696e75026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 37342 680c0000000100000000000003777777116c6173746d696e7574652d7265697a656e026e6c0000010001 680c8000000100000002000203777777116c6173746d696e7574652d7265697a656e026e6c0000010001c0100002000100015180000c026e7306787334616c6cc022c01000020001000151800006036e7332c039c03600010001000151800004c26d0642c04e00010001000151800004c26d0963 37343 0930000000010000000000000762616e6e65727303696d73026e6c0000010001 0930800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 37344 adaf00000001000000000000037777770f77696a6c616172737061617264656e026e6c0000010001 adaf80000001000000020002037777770f77696a6c616172737061617264656e026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c020c01000020001000151800006036e7332c038c034000100010001518000045054f347c050000100010001518000043e94a047 37345 015d00000001000000000000067068706164730d626f7577766163617475726573026e6c0000010001 015d80000001000000020001067068706164730d626f7577766163617475726573026e6c0000010001c0130002000100015180000d036e733106776964657873c021c01300020001000151800010036e733206776964657873036e657400c03500010001000151800004d4ccc0fc 37346 d9a9000000010000000000000377777708636861746769726c026e6c0000010001 d9a9800000010000000200000377777708636861746769726c026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 37347 1b2800000001000000000000036e7331057669727475026e6c0000010001 1b2880000001000000020002036e7331057669727475026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9726102c03800010001000151800004d58141c4 37348 c0e500000001000000000000036e7332057669727475026e6c0000010001 c0e580000001000000020002036e7332057669727475026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d9726102c00c00010001000151800004d58141c4 37349 87c800000001000000000000066865726d657304626f757703746e6f026e6c0000010001 87c880000001000000030003066865726d657304626f757703746e6f026e6c0000010001c0180002000100015180000b0866726f6e74696572c018c0180002000100015180000e036e733107737572666e6574c01cc01800020001000151800007047a657573c018c0300001000100015180000486dd0102c04700010001000151800004c0576a65c0610001000100015180000486dd0202 37350 cfca0000000100000000000006746e6f66656c0366656c03746e6f026e6c0000010001 cfca8000000100000003000306746e6f66656c0366656c03746e6f026e6c0000010001c0170002000100015180000b0866726f6e74696572c017c0170002000100015180000e036e733107737572666e6574c01bc01700020001000151800007047a657573c017c02f0001000100015180000486dd0102c04600010001000151800004c0576a65c0600001000100015180000486dd0202 37351 86e9000000010000000000000866726f6e7469657203746e6f026e6c0000010001 86e9800000010000000300030866726f6e7469657203746e6f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c01500020001000151800007047a657573c015c00c0001000100015180000486dd0102c03b00010001000151800004c0576a65c0550001000100015180000486dd0202 37352 eb03000000010000000000000c70757a7a656c776572656c64026e6c0000ff0001 eb03800000010000000200020c70757a7a656c776572656c64026e6c0000ff0001c00c0002000100015180000e036e7331076f726c65616e73c019c00c00020001000151800006036e7332c031c02d00010001000151800004d4cccd55c04700010001000151800004d4cccd56 37353 28a40000000100000000000003777777066c6163686e75026e6c0000010001 28a48000000100000003000303777777066c6163686e75026e6c0000010001c0100002000100015180000c036e7331056d61786573c017c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02fc02b000100010001518000045045402ec043000100010001518000045045402fc055000100010001518000045045440a 37354 ad090000000100000000000003777777097a696a61616e7a696a026e6c0000010001 ad098000000100000003000303777777097a696a61616e7a696a026e6c0000010001c01000020001000151800010036e733109656e6368616e746564c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ef8589c04a00010001000151800004d5ef8593c05c00010001000151800004d5ef8005 37355 f2d40000000100000000000003777777116e6577706f7274626c756574726176656c026e6c0000010001 f2d48000000100000002000003777777116e6577706f7274626c756574726176656c026e6c0000010001c0100002000100015180000c026e7306766576696461c022c01000020001000151800006036e7332c039 37356 460d00000001000000000000037777770b687572726963616e65666d026e6c0000010001 460d80000001000000030002037777770b687572726963616e65666d026e6c0000010001c0100002000100015180000f036e7331086d6f76656e657874c01cc01000020001000151800006036e7332c034c01000020001000151800012036e7333086d6f76656e657874036e657400c03000010001000151800004d4ccc445c04b00010001000151800004d4ccf745 37357 645c000000010000000000000963616d7061676e657304626f6e65026e6c0000010001 645c800000010000000200020963616d7061676e657304626f6e65026e6c0000010001c0160002000100015180000b026e7305706c616e74c01bc01600020001000151800006036e7332c032c02f00010001000151800004d59f0037c04600010001000151800004d59f0046 37358 ee67000000010000000000000a70756c73706f6d70656e026e6c0000010001 ee67800000010000000200020a70756c73706f6d70656e026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 37359 59fc00000001000000000000046d61696c067265696d6572026e6c00001c0001 59fc80000001000000020002046d61696c067265696d6572026e6c00001c0001c01100020001000151800010036e733109686f73746e65746276c018c01100020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 37360 990000000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 990080000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37361 701e00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 701e80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37362 d4be0000000100000000000008686f73746e616d650462696e640000100003 d4be8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37363 000000007002400090520000020405b401010402 000080010000000000000000 37364 373c00000001000000000000045052494c024e4c00000f0001 373c80000001000000020002045052494c024e4c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 37365 b786466a50104470baa50000000000000000 b786c6640000000000000000 37366 b786466a501844706f640000008d65eb000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403b01d7403c535700030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053425332303030484f4c50524f430000 b786c6640000000000000000 37367 afd000000001000000000000036e73300873757265686f7374026e6c0000010001 afd080000001000000020002036e73300873757265686f7374026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c019c01000020001000151800006036e7331c031c02d00010001000151800004c3eaad40c04700010001000151800004c3eaad41 37368 8325000000010000000000000377777705626f6b6f65026e6c0000010001 8325800000010000000200020377777705626f6b6f65026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7334c010c02a00010001000151800004d554b1dcc03c00010001000151800004d5540479 37369 2da600000001000000000000036e7332076e656473746174026e6c0000010001 2da680000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37370 6bb900000001000000000000036e73310873757265686f7374026e6c0000010001 6bb980000001000000020002036e73310873757265686f7374026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c019c01000020001000151800006036e7331c031c02d00010001000151800004c3eaad40c04700010001000151800004c3eaad41 37371 9c1d00000001000000000000037777770d656e6572676965646972656374026e6c0000010001 9c1d80000001000000020001037777770d656e6572676965646972656374026e6c0000010001c01000020001000151800015086e732d69736d30310963617067656d696e69c01ec0100002000100015180000b086e732d69736d3032c03bc03200010001000151800004d5f4a024 37372 3d0700000001000000000000036e7334076e656473746174026e6c0000010001 3d0780000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37373 b786467850114462ba150000000000000000 b786c6740000000000000000 37374 0000000070024000908a0000020405b401010402 000080010000000000000000 37375 ba93001000010000000000010b5354494e47455253495445026e6c00000200010000290800000000000000 ba93840300010000000100010b5354494e47455253495445026e6c0000020001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d00000038400000291000000000000000 37376 7b7800000001000000000000037777770661736b6a696d026e6c0000010001 7b7880000001000000020002037777770661736b6a696d026e6c0000010001c0100002000100015180000a036e7331036e7873c017c01000020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 37377 b786467950104462ba140000000000000000 b786c6740000000000000000 37378 0dcf000000010000000000000764656e68616167036b766b026e6c00000f0001 0dcf800000010000000200020764656e68616167036b766b026e6c00000f0001c0140002000100015180000d026e73076b6e6f77617265c018c01400020001000151800006036e7332c02fc02c00010001000151800004c3402003c04500010001000151800004c340202b 37379 09e0000000010000000000000965756972656c616e640269650b7370616d646f6d61696e730a626c61636b686f6c657307656173796e6574026e6c0000010001 09e0800000010000000200020965756972656c616e640269650b7370616d646f6d61696e730a626c61636b686f6c657307656173796e6574026e6c0000010001c03000020001000151800006036e7330c030c03000020001000151800006036e7331c030c04c00010001000151800004c2a55e01c05e00010001000151800004c2a55e05 37380 b787260850104470db3e0000000000000000 b787a6030000000000000000 37381 b787260850184470b2ad0000008d3b3b000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403b01db403c535b00030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053425332303030484f4c50524f430000 b787a6030000000000000000 37382 7a7b00000001000000000000037777770d656e65726769656f6e6c696e65026e6c0000010001 7a7b80000001000000020002037777770d656e65726769656f6e6c696e65026e6c0000010001c0100002000100015180000c04646e73310471776562c01ec0100002000100015180000704646e7332c037c03200010001000151800004d994ac0cc04a00010001000151800004d5c42f6c 37383 11cb00000001000000000000066172676f7373026e6c00000f0001 11cb80000001000000020002066172676f7373026e6c00000f0001c00c0002000100015180000c09646d7a736572766572c00cc00c0002000100015180000a0775787365727632c00cc02700010001000151800004c2abb083c03f00010001000151800004c2abb028 37384 b787261650114462daae0000000000000000 b787a6130000000000000000 37385 265400000001000000000000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001 265480000001000000020000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001c014000200010001518000110377656207616a63666f6f6403636f6d00c0140002000100015180000b0865786368616e6765c034 37386 b787261750104462daad0000000000000000 b787a6130000000000000000 37387 3c27000000010000000000000377777710776161726865656e77616172766f6f72026e6c0000010001 3c27800000010000000200020377777710776161726865656e77616172766f6f72026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c021c01000020001000151800006036e7332c039c035000100010001518000045054f347c051000100010001518000043e94a047 37388 0d83000000010000000000000b5354494e47455253495445026e6c0000020001 0d83840300010000000100000b5354494e47455253495445026e6c0000020001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 37389 706e00000001000000000000037777771061746c616e7469732d6e65772d616765026e6c0000010001 706e80000001000000020002037777771061746c616e7469732d6e65772d616765026e6c0000010001c0100002000100015180000a026e730469636d63c021c01000020001000151800006036e7332c038c035000100010001518000043e643805c04b000100010001518000043e643806 37390 a778000000010000000000000376626b026e6c0000ff0001 a778800000010000000200020376626b026e6c0000ff0001c00c0002000100015180000c036e73310563736e6574c010c00c00020001000151800006036e7332c028c02400010001000151800004c2451012c03c00010001000151800004c2451212 37391 930200000001000000000000046d61696c067265696d6572026e6c0000260001 930280000001000000020002046d61696c067265696d6572026e6c0000260001c01100020001000151800010036e733109686f73746e65746276c018c01100020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 37392 621f00000001000000000000037777770d72696a70652d76726f7577656e026e6c0000010001 621f80000001000000020000037777770d72696a70652d76726f7577656e026e6c0000010001c01000020001000151800011036e7331087072696f7277656202626500c01000020001000151800006036e7332c036 37393 43170000000100000000000003717066026e6c0000ff0001 43178000000100000002000203717066026e6c0000ff0001c00c0002000100015180000f04646e733107696e666f6e6574c010c00c0002000100015180000704646e7332c029c02400010001000151800004d4bd01c4c03f00010001000151800004d4bd7f83 37394 6f5400000001000000000000037777770c616c74696a646a657a656c66026e6c0000010001 6f5480000001000000020000037777770c616c74696a646a657a656c66026e6c0000010001c01000020001000151800011036e733107726f6b73636f6d036e657400c0100002000100015180000e036e733207726f6b73636f6dc01d 37395 e3ce00000001000000000000037777770633776d61696c026e6c0000010001 e3ce84030001000000010000037777770633776d61696c026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 37396 138600000001000000000000036e733209666972737466696e64026e6c0000010001 138680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37397 3bb900000001000000000000036e733109666972737466696e64026e6c0000010001 3bb980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37398 8ba30000000100000000000007776f6f6e636f6d026e6c00000f0001 8ba38000000100000003000307776f6f6e636f6d026e6c00000f0001c00c0002000100015180000e036e73310761737034616c6cc014c00c00020001000151800006036e7332c02cc00c00020001000151800006036e7333c02cc02800010001000151800004c1adf9c3c042000100010001518000043e70ec3cc05400010001000151800004c1ac0bae 37399 1b3800000001000000000000036e733107757477656e7465026e6c0000010001 1b3880000001000000030003036e733107757477656e7465026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000482590102c03a0001000100015180000482590103c04c00010001000151800004c0571113 37400 48ae00000001000000000001036e7331026973026e6c00000100010000291000000000000000 48ae80000001000000020003036e7331026973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852102c03500010001000151800004d5c415030000291000000000000000 37401 0d7a00000001000000000001036e7332026973026e6c00000100010000291000000000000000 0d7a80000001000000020003036e7332026973026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02700010001000151800004d5852102c00c00010001000151800004d5c415030000291000000000000000 37402 a21f000000010000000000000462696373026e6c00000f0001 a21f800000010000000300020462696373026e6c00000f0001c00c00020001000151800010036e733409656e6f766174696f6ec011c00c00020001000151800006036e7333c029c00c0002000100015180001404646e733309656e6f766174696f6e036e657400c025000100010001518000049105fc46c041000100010001518000049105fc4e 37403 309e00000001000000000000037777770b7265676973747261746965026e6c0000010001 309e80000001000000020002037777770b7265676973747261746965026e6c0000010001c0100002000100015180001404777777320c6e656465726c616e64776562c01cc0100002000100015180000d036e73320670726f6c616ec01cc03000010001000151800004d5d381c2c05000010001000151800004d4ccd4e7 37404 5f6700000001000000000000036d78310761737034616c6c026e6c0000010001 5f6780000001000000030003036d78310761737034616c6c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02c00010001000151800004c1adf9c3c03e000100010001518000043e70ec3cc05000010001000151800004c1ac0bae 37405 a30c000000010000000000000a656d6561736d7470303203616f6e026e6c00001c0001 a30c800000010000000200010a656d6561736d7470303203616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 37406 22da000000010000000000000a656d6561736d7470303203616f6e026e6c0000260001 22da800000010000000200010a656d6561736d7470303203616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 37407 8d96000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 8d96800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 37408 a8a0000000010000000000000a656d6561736d7470303103616f6e026e6c00001c0001 a8a0800000010000000200010a656d6561736d7470303103616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 37409 a27d000000010000000000000a656d6561736d7470303103616f6e026e6c0000260001 a27d800000010000000200010a656d6561736d7470303103616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 37410 ce0f000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 ce0f800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 37411 8a6600000001000000000000056b6974747a026e6c00000f0001 8a6680000001000000020002056b6974747a026e6c00000f0001c00c0002000100015180000a036e733103696166c012c00c00020001000151800006036e7332c02ac026000100010001518000045059e040c03c000100010001518000045059ee03 37412 39bc00000001000000000000086174617261786961026e6c0000010001 39bc80000001000000020000086174617261786961026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 37413 21aa00000001000000000000036e733109666972737466696e64026e6c0000010001 21aa80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37414 3b7400000001000000000000036e733209666972737466696e64026e6c0000010001 3b7480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37415 22c400000001000000000000046e73303903777873026e6c0000010001 22c480000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 37416 208c000000010000000000000377777703646674026e6c0000010001 208c800000010000000200000377777703646674026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c02c 37417 2f6900000001000000000000046d61696c0c67726f6f7462726162616e74026e6c0000010001 2f6980000001000000020002046d61696c0c67726f6f7462726162616e74026e6c0000010001c01100020001000151800010036e733109686f73746e65746276c01ec01100020001000151800006036e7332c036c0320001000100015180000451113264c04e00010001000151800004d5c42851 37418 301e0000000100000000000003777777066476646d616e026e6c0000010001 301e8000000100000002000003777777066476646d616e026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 37419 bb6a000000010000000000000863617476363231390665787465726e036b756e026e6c00000f0001 bb6a800000010000000300030863617476363231390665787465726e036b756e026e6c00000f0001c01c0002000100015180000f08636170796261726103756369c01cc01c0002000100015180000a036e733103736369c01cc01c0002000100015180000e036e733107737572666e6574c020c0340001000100015180000483ae3c15c04f0001000100015180000483aee004c06500010001000151800004c0576a65 37420 51aa000000010000000000000377777708746170706572696a026e6c0000010001 51aa800000010000000200000377777708746170706572696a026e6c0000010001c01000020001000151800017036e73310d6465696e7465726e65746d616e036e657400c01000020001000151800006036e7332c031 37421 3a4d00000001000000000000037777771370737963686f6c6f6769656d6167617a696e65026e6c0000010001 3a4d80000001000000020000037777771370737963686f6c6f6769656d6167617a696e65026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c03e 37422 e87d0000000100000000000003777777106b72696e676c6f6f7077696e6b656c73026e6c0000010001 e87d8000000100000002000003777777106b72696e676c6f6f7077696e6b656c73026e6c0000010001c01000020001000151800016036e73610c73697465657874656e64657203636f6d00c01000020001000151800006036e7362c039 37423 0b2f0000000100000000000003313639033134360233330236310770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 0b2f8000000100000002000203313639033134360233330236310770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 37424 aac3000000010000000000000672656c6179310b7669616e6574776f726b73026e6c0000010001 aac3800000010000000200020672656c6179310b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 37425 a227000000010000000000000377777713776573746572736368656c646574756e6e656c026e6c0000010001 a227800000010000000200020377777713776573746572736368656c646574756e6e656c026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c024c01000020001000151800006036e7332c03cc03800010001000151800004d43d0f08c05600010001000151800004d43d19e2 37426 c7b500000001000000000000037777770f62616e6e65722d65786368616e6765026e6c0000010001 c7b580000001000000020001037777770f62616e6e65722d65786368616e6765026e6c0000010001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c03400010001000151800004d4ccc0fc 37427 90f400000001000000000000037777770f62616e6e65722d65786368616e6765026e6c0000010001 90f480000001000000020001037777770f62616e6e65722d65786368616e6765026e6c0000010001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c03400010001000151800004d4ccc0fc 37428 393c000000010000000000000377777707736e7362616e6b026e6c0000010001 393c800000010000000200000377777707736e7362616e6b026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 37429 c1830000000100000000000003626c3402626c06787334616c6c026e6c0000010001 c1838000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37430 034f00000001000000000000037777770966756e6e7932303031066b6f72746865026e6c0000010001 034f80000001000000020000037777770966756e6e7932303031066b6f72746865026e6c0000010001c01a00020001000151800013036e733009696e7465726c697a65036e657400c01a00020001000151800006036e7331c039 37431 8a6a00000001000000000000037777770b766f657462616c7a6f6e65026e6c0000010001 8a6a80000001000000030003037777770b766f657462616c7a6f6e65026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c01cc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c0300001000100015180000450474002c04e0001000100015180000450474102c06000010001000151800004d943ee57 37432 4e9600000001000000000000026e7304696d636f026e6c0000010001 4e9680000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 37433 02af00000001000000000000036e73330767617574656e67026e6c0000010001 02af80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37434 80bf00000001000000000000036e73340767617574656e67026e6c0000010001 80bf80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37435 275c00000001000000000000036e733105636176656f024e4c0000010001 275c80000001000000020002036e733105636176656f024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045112a002c038000100010001518000045112a102 37436 252c0000000100000000000009776f6f6e6c696e6965026e6c0000010001 252c8000000100000002000209776f6f6e6c696e6965026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 37437 8b8800000001000000000000037777770d6265646465622d6b617374656e026e6c0000010001 8b8884030001000000010000037777770d6265646465622d6b617374656e026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 37438 94370000000100000000000003777777046e697769026e6c0000010001 94378000000100000002000103777777046e697769026e6c0000010001c0100002000100015180000b036e7331046b6e6177c015c01000020001000151800006036e7332c02dc02900010001000151800004c0576b03 37439 183200000001000000000000036e7331046372696f026e6c0000010001 183280000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37440 f57c00000001000000000000036e7332046372696f026e6c0000010001 f57c80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37441 edba00000001000000000000037777770a72656372656174696566026e6c0000010001 edba80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 37442 158200000001000000000000036e7331046372696f026e6c0000010001 158280000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37443 eab600000001000000000000036e7332046372696f026e6c0000010001 eab680000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37444 e96d28000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730e52697070657264617061726b3239026e6c0000210001000002580023000000640058096f6e7a6576616465720e52697070657264617061726b3239026e6c00 e96da8040000000000000000 37445 2cf900000001000000000000076a6f7264616e73026e6c0000010001 2cf980000001000000030001076a6f7264616e73026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 37446 462f00000001000000000000036e73310a6d756c74696b6162656c026e6c0000010001 462f80000001000000030002036e73310a6d756c74696b6162656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 37447 4e1a00000001000000000000036e73310a6d756c74696b6162656c026e6c0000260001 4e1a80000001000000030002036e73310a6d756c74696b6162656c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 37448 13ac0000000100000000000003777777046d62636f026e6c0000010001 13ac8000000100000002000203777777046d62636f026e6c0000010001c0100002000100015180001d046d61696c15666c65766f696e7465726e65746469656e7374656ec015c0100002000100015180000a07666c65766f3033c02ec02900010001000151800004d48837fec05200010001000151800004d4bb38c8 37449 d38800000001000000000000036e73320a6d756c74696b6162656c026e6c0000010001 d38880000001000000030002036e73320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 37450 69c400000001000000000000036e73320a6d756c74696b6162656c026e6c0000260001 69c480000001000000030002036e73320a6d756c74696b6162656c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 37451 d10c0000000100000000000007426f76656d696a026e6c00000f0001 d10c8000000100000002000207426f76656d696a026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 37452 511f0000000100000000000003777777076d616c696e6461026e6c0000010001 511f8000000100000002000003777777076d616c696e6461026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c032 37453 604c0000000100000000000003777777076e656465722d6c026e6c0000010001 604c8000000100000002000003777777076e656465722d6c026e6c0000010001c01000020001000151800013036e73300964757463682d6e657403636f6d00c01000020001000151800006036e7331c030 37454 20f5000000010000000000000467616d65086e657469646f6c73026e6c0000010001 20f5800000010000000200020467616d65086e657469646f6c73026e6c0000010001c0110002000100015180000e036e733107686f7477697265c01ac01100020001000151800006036e7332c032c02e0001000100015180000451044b03c0480001000100015180000451044bc8 37455 1e6e0000000100000000000009652d6c756e61746963026e6c0000010001 1e6e8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 37456 b31d00000001000000000000036e7335046372696f026e6c0000010001 b31d80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37457 1c2300000001000000000000036e7336046372696f026e6c0000010001 1c2380000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37458 772e000000010000000000000377777703776562026e6c0000010001 772e800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 37459 a17e0000000100000000000005737461747307676f2d77657374026e6c0000010001 a17e8000000100000003000105737461747307676f2d77657374026e6c0000010001c0120002000100015180000e026e7308767575727765726bc01ac01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c04cc02e000100010001518000043efa0202 37460 dee200000001000000000000036e7331046372696f026e6c0000010001 dee280000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37461 9e1900000001000000000000036e7332046372696f026e6c0000010001 9e1980000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37462 28d400000001000000000000037777770a72656372656174696566026e6c0000010001 28d480000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 37463 203900000001000000000000036e7335046372696f026e6c0000010001 203980000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37464 e96500000001000000000000036e7336046372696f026e6c0000010001 e96580000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37465 b35300000001000000000000066865726d657304626f757703746e6f026e6c0000010001 b35380000001000000030003066865726d657304626f757703746e6f026e6c0000010001c0180002000100015180000b0866726f6e74696572c018c0180002000100015180000e036e733107737572666e6574c01cc01800020001000151800007047a657573c018c0300001000100015180000486dd0102c04700010001000151800004c0576a65c0610001000100015180000486dd0202 37466 61900000000100000000000006746e6f66656c0366656c03746e6f026e6c0000010001 61908000000100000003000306746e6f66656c0366656c03746e6f026e6c0000010001c0170002000100015180000b0866726f6e74696572c017c0170002000100015180000e036e733107737572666e6574c01bc01700020001000151800007047a657573c017c02f0001000100015180000486dd0102c04600010001000151800004c0576a65c0600001000100015180000486dd0202 37467 abc9000000010000000000000866726f6e7469657203746e6f026e6c0000010001 abc9800000010000000300030866726f6e7469657203746e6f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c01500020001000151800007047a657573c015c00c0001000100015180000486dd0102c03b00010001000151800004c0576a65c0550001000100015180000486dd0202 37468 d9350000000100000000000008672d63656e746572026e6c00000f0001 d9358000000100000003000308672d63656e746572026e6c00000f0001c00c00020001000151800010036e733109736974656279746573c015c00c00020001000151800006036e7332c02dc00c00020001000151800006036e7333c02dc02900010001000151800004c2a55e5ac04500010001000151800004c356781cc057000100010001518000043ec58016 37469 03b800000001000000000000037777770e6172626569647372656368746572026e6c0000010001 03b880000001000000020000037777770e6172626569647372656368746572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 37470 eec70000000100000000000011706c656368656c6d75732d64656c757465026e6c0000010001 eec78403000100000001000011706c656368656c6d75732d64656c757465026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 37471 ad4f000000010000000000000767656e65736973026e6c0000010001 ad4f800000010000000200000767656e65736973026e6c0000010001c00c0002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c00c0002000100015180000805726f6b696ec02f 37472 f415001000010000000000010870686f626f7330310761626e616d726f026e6c00000100010000290800000000000000 f415800000010000000200030870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c0000291000000000000000 37473 d0bc001000010000000000010870686f626f7330320761626e616d726f026e6c00000100010000290800000000000000 d0bc800000010000000200030870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c0000291000000000000000 37474 9e5a0000000100000000000008546f70706f696e74026e6c0000010001 9e5a8000000100000002000208546f70706f696e74026e6c0000010001c00c0002000100015180000f036e733108696e74726f776562c015c00c00020001000151800006036e7332c02dc0290001000100015180000450416028c04400010001000151800004c356780c 37475 dc130000000100000000000006636861726973026e6c0000010001 dc138000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 37476 e10100000001000000000000037777770b76616e6265656b6175746f026e6c00001c0001 e10180000001000000020002037777770b76616e6265656b6175746f026e6c00001c0001c0100002000100015180000e036e733107736368726f6572c01cc0100002000100015180000e036e733407737570706f7274c01cc03000010001000151800004d468c9c4c04a00010001000151800004c372e6fe 37477 6c0400000001000000000000037777770d776972696e676865726c616e74026e6c0000010001 6c0480000001000000020002037777770d776972696e676865726c616e74026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c01ec01000020001000151800006036e7332c035c03200010001000151800004d453c005c05000010001000151800004d453c006 37478 e94400000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 e94480000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37479 de47000000010000000000000f726f6e63616c6c69636f7572696572026e6c00000f0001 de47800000010000000200010f726f6e63616c6c69636f7572696572026e6c00000f0001c00c0002000100015180000e036e733107626c7565646e73c01cc00c00020001000151800006036e7334c034c03000010001000151800004d5c401c0 37480 f462000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 f462800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 37481 fa31000000010000000000000870686f626f7330320761626e616d726f026e6c0000010001 fa31800000010000000200020870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c 37482 b826000000010000000000000c717561647269666f676c696f026e6c0000ff0001 b826800000010000000200020c717561647269666f676c696f026e6c0000ff0001c00c0002000100015180000a04646e7330026975c019c00c0002000100015180000704646e7331c032c02d00010001000151800004d91a7002c04300010001000151800004d91a7103 37483 9687000000010000000000000a7a65656c616e646e6574026e6c0000010001 9687800000010000000200020a7a65656c616e646e6574026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc02b00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 37484 13dd00000001000000000000136672616e6b656e2d6d616b656c61617264696a026e6c00000f0001 13dd80000001000000020001136672616e6b656e2d6d616b656c61617264696a026e6c00000f0001c00c0002000100015180000c026e7306636f62776562c020c00c00020001000151800006036e7333c037c0340001000100015180000450f26001 37485 b51500000001000000000000037777770f68656c656e64656d65657374657273026e6c0000010001 b51580000001000000020002037777770f68656c656e64656d65657374657273026e6c0000010001c0100002000100015180000f026e7309656174736572766572c020c01000020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 37486 1bd800000001000000000000046e65777306787334616c6c026e6c0000ff0001 1bd880000001000000030002046e65777306787334616c6c026e6c0000ff0001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 37487 682700000001000000000000037777770a6164756c747374617473026e6c0000010001 682780000001000000020000037777770a6164756c747374617473026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 37488 e8e900000001000000000000037777770964657a6565686f6e640c73706f7274666f6e6473656e026e6c0000010001 e8e980000001000000030002037777770964657a6565686f6e640c73706f7274666f6e6473656e026e6c0000010001c01a0002000100015180000d036e733106776964657873c027c01a00020001000151800010036e733206776964657873036e657400c01a00020001000151800006036e7333c03fc03b00010001000151800004d4ccc0fcc070000100010001518000043efa0703 37489 003300000001000000000000046d61696c0b7363686c6166686f72737403636f6d07676c67726f7570026e6c0000010001 003384030001000000010000046d61696c0b7363686c6166686f72737403636f6d07676c67726f7570026e6c0000010001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 37490 fc240000000100000000000003777777146d65646973636865766163617475726562616e6b026e6c0000010001 fc248000000100000002000203777777146d65646973636865766163617475726562616e6b026e6c0000010001c0100002000100015180000d04646e733105692d702d64c025c0100002000100015180000704646e7332c03ec03900010001000151800004d9124003c05200010001000151800004d9124104 37491 0c2f00000001000000000000037777770763616665626c61026e6c0000010001 0c2f80000001000000020000037777770763616665626c61026e6c0000010001c01000020001000151800014036e73310a65763173657276657273036e657400c01000020001000151800006036e7332c030 37492 4685000000010000000000000f74696a7373656e2d656c656b74726f026e6c00000f0001 4685800000010000000200020f74696a7373656e2d656c656b74726f026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c01cc00c00020001000151800006036e7332c034c03000010001000151800004c2451012c04800010001000151800004c2451212 37493 b6b50000000100000000000003777777096469676973706f7274026e6c0000010001 b6b58000000100000002000103777777096469676973706f7274026e6c0000010001c0100002000100015180000a036e733303777873c01ac01000020001000151800006036e7334c032c04400010001000151800004d5ef9a65 37494 ccba00000001000000000000086865696a6d616e73026e6c0000010001 ccba80000001000000020002086865696a6d616e73026e6c0000010001c00c00020001000151800006036e7331c00cc00c0002000100015180000b086578686175737432c00cc02900010001000151800004c1ad9303c03b00010001000151800004d47b0e91 37495 22d700000001000000000000086d6f62696c616e65026e6c0000010001 22d780000001000000030000086d6f62696c616e65026e6c0000010001c00c00020001000151800013026e730a6e61616d736572766572036e657400c00c00020001000151800006036e7331c02cc00c00020001000151800006036e7332c02c 37496 96a600000001000000000000037777770d7765656b65696e646a65776567026e6c0000010001 96a680000001000000030000037777770d7765656b65696e646a65776567026e6c0000010001c01000020001000151800009026e6c03627263c01ec01000020001000151800005026575c035c0100002000100015180000502676cc035 37497 260e000000010000000000000331333902313401360236390a626c61636b686f6c657307656173796e6574026e6c0000010001 260e800000010000000200020331333902313401360236390a626c61636b686f6c657307656173796e6574026e6c0000010001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 37498 5c8d0000000100000000000004726f6d73077765622d6c6f67026e6c0000010001 5c8d8000000100000003000304726f6d73077765622d6c6f67026e6c0000010001c0110002000100015180000b036e733104696c7365c019c01100020001000151800006036e7332c031c01100020001000151800006036e7333c031c02d000100010001518000043e45a282c044000100010001518000043e45a283c056000100010001518000043e45a284 37499 48ae00000001000000000000036e7331026973026e6c0000010001 48ae80000001000000020002036e7331026973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852102c03500010001000151800004d5c41503 37500 0d7a00000001000000000000036e7332026973026e6c0000010001 0d7a80000001000000020002036e7332026973026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02700010001000151800004d5852102c00c00010001000151800004d5c41503 37501 1a2b00000001000000000000037777770a6164756c746c696e6b73026e6c0000010001 1a2b80000001000000020000037777770a6164756c746c696e6b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 37502 9aeb00000001000000000000036e733104696c7365026e6c00001c0001 9aeb80000001000000030003036e733104696c7365026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a284 37503 472000000001000000000000036e733104696c7365026e6c0000260001 472080000001000000030003036e733104696c7365026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a284 37504 fc1200000001000000000000036e733204696c7365026e6c00001c0001 fc1280000001000000030003036e733204696c7365026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e45a282c00c000100010001518000043e45a283c049000100010001518000043e45a284 37505 ff0e00000001000000000000036e733204696c7365026e6c0000260001 ff0e80000001000000030003036e733204696c7365026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e45a282c00c000100010001518000043e45a283c049000100010001518000043e45a284 37506 f7f800000001000000000000036e733304696c7365026e6c00001c0001 f7f880000001000000030003036e733304696c7365026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc029000100010001518000043e45a282c03b000100010001518000043e45a283c00c000100010001518000043e45a284 37507 2e9f00000001000000000000036e733304696c7365026e6c0000260001 2e9f80000001000000030003036e733304696c7365026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc029000100010001518000043e45a282c03b000100010001518000043e45a283c00c000100010001518000043e45a284 37508 50e200000001000000000000036e7331066e6c74726565026e6c0000010001 50e280000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 37509 f04c00000001000000000000096a616e74726f6f7374026e6c0000ff0001 f04c80000001000000020002096a616e74726f6f7374026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 37510 3a6600000001000000000000037777770b6261627962757374657273026e6c0000010001 3a6680000001000000020002037777770b6261627962757374657273026e6c0000010001c0100002000100015180000e026e730864686f7374696e67c01cc01000020001000151800006036e7332c033c03000010001000151800004515b0370c04a00010001000151800004515b000a 37511 cf4200000001000000000000037777770d62616e6e657274726166666963026e6c0000010001 cf4280000001000000020000037777770d62616e6e657274726166666963026e6c0000010001c01000020001000151800010036e733109636f6d7075686f7374c01ec01000020001000151800006036e7332c036 37512 02cb0000000100000000000008686f73746e616d650462696e640000100003 02cb8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37513 6973000000010000000000000461736570026e6c00000f0001 6973800000010000000200000461736570026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 37514 ac48000000010000000000000377777707646f6d7574656c026e6c0000010001 ac48800000010000000200020377777707646f6d7574656c026e6c0000010001c0100002000100015180000f036e7331086974736c6f676963c018c0100002000100015180000e026e7308646961706c617a61c018c02c00010001000151800004d59ae111c04700010001000151800004c2a54621 37515 59cf00000001000000000000037777770b6b656573676f6c69617468026e6c0000010001 59cf80000001000000020000037777770b6b656573676f6c69617468026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c046 37516 b7220000000100000000000005646e732d32056c61646f74026e6c0000010001 b7228000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37517 b7210000000100000000000005646e732d31056c61646f74026e6c0000010001 b7218000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37518 29330000000100000000000003777777086461696861747375026e6c0000010001 29338000000100000002000203777777086461696861747375026e6c0000010001c0100002000100015180000f036e7331086e65647374617273c019c01000020001000151800006036e7332c031c02d00010001000151800004d973c592c04800010001000151800004d973c593 37519 a02d00000001000000000000046775686c026e6c00000f0001 a02d80000001000000020002046775686c026e6c00000f0001c00c0002000100015180000e036e733107626265796f6e64c011c00c00020001000151800006036e7332c029c025000100010001518000043eb1900bc03f000100010001518000043eb19002 37520 123d000000010000000000000a64696e6f736175727573026e6c07736974652d6964026e6c0000010001 123d800000010000000300000a64696e6f736175727573026e6c07736974652d6964026e6c0000010001c01a00020001000151800012036e733108626c7565646f6d65036e657400c01a00020001000151800006036e7332c03ac01a00020001000151800006036e7333c03a 37521 b3fa000000010000000000000462636f75026e6c0000010001 b3fa800000010000000300020462636f75026e6c0000010001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 37522 ba8e00000001000000000000037777770c67617967616c6c6572696573026e6c0000010001 ba8e80000001000000020000037777770c67617967616c6c6572696573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c034 37523 ff5100000001000000000000037777770873796d616e746563026e6c0000010001 ff5180000001000000030000037777770873796d616e746563026e6c0000010001c01000020001000151800012036e73310873796d616e74656303636f6d00c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031 37524 5ad60000000100000000000010766f736175746f62656472696a76656e026e6c00000f0001 5ad68000000100000002000010766f736175746f62656472696a76656e026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c035 37525 dff1000000010000000000000a747963686567726f6570026e6c00000f0001 dff1800000010000000200020a747963686567726f6570026e6c00000f0001c00c0002000100015180000d056e657430310462626974c017c00c0002000100015180000b08626269742d6e7434c031c02b00010001000151800004c1ad5403c04400010001000151800004c1ad540c 37526 0000000070024000c82d0000020405b401010402 000080010000000000000000 37527 e9a5000000010000000000000774697363616c69026e6c00000f0001 e9a5800000010000000300020774697363616c69026e6c00000f0001c00c0002000100015180000704616e7331c00cc00c0002000100015180000704616e7332c00cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02800010001000151800004c3f14d38c03b00010001000151800004c3f13325 37528 e58100000001000000000000037777770a6e69736173696c766572026e6c0000010001 e58180000001000000020002037777770a6e69736173696c766572026e6c0000010001c01000020001000151800010036e733109756e6963656e746572c01bc01000020001000151800006036e7332c033c02f0001000100015180000451ad0b02c04b0001000100015180000451ad0b03 37529 f5db00000001000000000000037777770e6765697465626f6572646572696a026e6c0000010001 f5db80000001000000020002037777770e6765697465626f6572646572696a026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01fc01000020001000151800006036e7332c036c03300010001000151800004c26d0642c04b00010001000151800004c26d0963 37530 e86b00000001000000000000076c6f7577736276026e6c00000f0001 e86b80000001000000020002076c6f7577736276026e6c00000f0001c00c0002000100015180000f036e7331086765656e70756e74c014c00c00020001000151800006036e7332c02cc02800010001000151800004d4ccd865c043000100010001518000045054ec34 37531 b52e000000010000000000000565666e657408767575727765726b026e6c0000010001 b52e800000010000000300010565666e657408767575727765726b026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c044c02f000100010001518000043efa0202 37532 3bd128000001000200000000026e6c00000600010856494e47434152440b686f74656c616c6d656c6f026e6c00000500fe000000000000c01400010001000000000004c0a8774b 3bd1a8040000000000000000 37533 d799000000010000000000000f7a6f7267656e7a656b657268656964026e6c0000010001 d799800000010000000200020f7a6f7267656e7a656b657268656964026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c01cc00c00020001000151800006036e7332c033c03000010001000151800004d9aa2042c04900010001000151800004d9aa2c06 37534 ee3f00000001000000000000036e7332076e656473746174026e6c0000010001 ee3f80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37535 f21f00000001000000000000036e7332076e656473746174026e6c00001c0001 f21f80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37536 eb3d00000001000000000000036e7332076e656473746174026e6c0000260001 eb3d80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 37537 3bdf00000001000000000000036e7333076e656473746174026e6c00001c0001 3bdf80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 37538 2a4e28000001000000010000026e6c0000060001085f6b706173737764045f74637008537465696a6c6572026e6c000021000100000258001d0000006401d00966732d737465696a6c08537465696a6c6572026e6c00 2a4ea8040000000000000000 37539 961300000001000000000000046d61696c07726f746f6e65740472736462026e6c0000010001 961380000001000000020000046d61696c07726f746f6e65740472736462026e6c0000010001c0190002000100015180000b026e73026e6c036e657400c0190002000100015180001206617574683630026e73026e6c027575c038 37540 0000000070024000a61c0000020405b401010402 000080010000000000000000 37541 84f2000000010000000000000773796e65726761026e6c0000010001 84f2800000010000000200020773796e65726761026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 37542 000000007002faf0f9bf00000204057801010402 000080010000000000000000 37543 dc0200000001000000000000037777770a6269626c696f73686f70026e6c0000010001 dc0280000001000000020002037777770a6269626c696f73686f70026e6c0000010001c0100002000100015180000b036e733104656e6f6dc01bc01000020001000151800006036e7332c033c02f00010001000151800004d87a0479c04600010001000151800004d86296b6 37544 b78b571050104470bfc40000000000000000 b78bd7140000000000000000 37545 b78b5710501844704cc600000097e600000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b78bd7140000000000000000 37546 b78c39d15010fb90343a0000000000000000 b78cb9d40000000000000000 37547 82c900000001000000000000037777770f6861726c656b696e6f2d686f626279026e6c0000010001 82c980000001000000020000037777770f6861726c656b696e6f2d686f626279026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c020c0100002000100015180000704686e7331c039 37548 b78c39d15018fb909ce6000000909f24000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000056494e4743415244484f54454c414c4d454c4f0000 b78cb9d40000000000000000 37549 46cb00000001000000000000036e7332076e65746c616e64026e6c0000010001 46cb80000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 37550 b78b571e50114462bf2a0000000000000000 b78bd7140000000000000000 37551 000000007002400008150000020405b401010402 000080010000000000000000 37552 b78c39df5011fb8233a70000000000000000 b78cb9d40000000000000000 37553 cee1000000010000000000000377777706336861727473026e6c0000010001 cee1800000010000000200010377777706336861727473026e6c0000010001c01000020001000151800010066d69636b6579066e6574636f6dc017c0100002000100015180001306646f6e616c640634726f7a656e03636f6d00c02b00010001000151800004c2863082 37554 b78b571f50104462bf290000000000000000 b78bd7140000000000000000 37555 000000007002faf0c9e400000204057801010402 000080010000000000000000 37556 b78cbc5650104470bc750000000000000000 37557 b78cbc5650184470607800000097d000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 37558 b78c39e05010fb8233a60000000000000000 b78cb9e40000000000000000 37559 b78da4565010fb9099d80000000000000000 37560 b78cbc6450114462bbdb0000000000000000 37561 34b600000001000000000000026e73066863636e6574026e6c0000010001 34b680000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 37562 3e80000000010000000000000868616c666f726473026e6c00001c0001 3e80800000010000000200000868616c666f726473026e6c00001c0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02d 37563 0000000070024000228f0000020405b401010402 000080010000000000000000 37564 b78da4565018fb901ec30000009084e6000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000056494e4743415244484f54454c414c4d454c4f0000 37565 1e630000000100000000000004444e5331064d494e4c4e56026e6c0000010001 1e638000000100000003000304444e5331064d494e4c4e56026e6c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c018c0110002000100015180000704646e7332c011c00c00010001000151800004910c2201c03a00010001000151800004c0576a65c05400010001000151800004910c2202 37566 cd8e0000000100000000000004444e5332064d494e4c4e56026e6c0000010001 cd8e8000000100000003000304444e5332064d494e4c4e56026e6c0000010001c0110002000100015180000704646e7331c011c0110002000100015180000e036e733107737572666e6574c018c01100020001000151800002c00cc02c00010001000151800004910c2201c03f00010001000151800004c0576a65c00c00010001000151800004910c2202 37567 c77400000001000000000000037777770464653b3b026e6c0000010001 c77484030001000000010000037777770464653b3b026e6c0000010001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 37568 b78cbc6550104462bbda0000000000000000 37569 b78e75ee501044701d560000000000000000 b78ef5e40000000000000000 37570 4e99000000010000000000000767646578636832056f72746563026e6c0000010001 4e99800000010000000200020767646578636832056f72746563026e6c0000010001c0140002000100015180000c036e73310563736e6574c01ac01400020001000151800006036e7332c032c02e00010001000151800004c2451012c04600010001000151800004c2451212 37571 b78da4645011fb8299450000000000000000 37572 b78e75ee50184470d75800000097ba00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b78ef5e40000000000000000 37573 6419000000010000000000000377777709787472616c61726765026e6c0000010001 6419800000010000000200000377777709787472616c61726765026e6c0000010001c01000020001000151800014036e73350a78736e6574776f726b73036e657400c01000020001000151800006036e7332c032 37574 312b000000010000000000000377777709787472616c61726765026e6c0000010001 312b800000010000000200000377777709787472616c61726765026e6c0000010001c01000020001000151800014036e73350a78736e6574776f726b73036e657400c01000020001000151800006036e7332c032 37575 000000007002faf0089000000204057801010402 000080010000000000000000 37576 b78da4655010fb8299440000000000000000 37577 b78e75fc501144621cbc0000000000000000 b78ef5f40000000000000000 37578 b78f54175010fb9028c10000000000000000 b78fd4140000000000000000 37579 b78f54175018fb9063c900000090cec8000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e00b000b0028000000080008002000000056494e4743415244484f54454c414c4d454c4f0000 b78fd4140000000000000000 37580 b78e75fd501044621cbb0000000000000000 b78ef5f40000000000000000 37581 2e89000000010000000000000377777712686f6c6c616e64736561727469657374656e026e6c0000010001 2e89800000010000000200000377777712686f6c6c616e64736561727469657374656e026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c03a 37582 9e4300000001000000000000066d69636b6579066e6574636f6d026e6c00001c0001 9e4380000001000000020001066d69636b6579066e6574636f6d026e6c00001c0001c01300020001000151800002c00cc01300020001000151800010066d696e6e696506787334616c6cc01ac00c00010001000151800004c2863082 37583 b78f54255011fb82282e0000000000000000 b78fd4240000000000000000 37584 0f3800000001000000000000037777770865626e6272656461026e6c0000010001 0f3880000001000000020002037777770865626e6272656461026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec019c01000020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 37585 6d2b0000000100000000000003666c79036b6c6d026e6c0000010001 6d2b8000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 37586 5b8000000001000000000000037777770865626e6272656461026e6c0000010001 5b8080000001000000020002037777770865626e6272656461026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec019c01000020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 37587 2a5128000001000000010000026e6c0000060001085f6b706173737764045f75647008537465696a6c6572026e6c000021000100000258001d0000006401d00966732d737465696a6c08537465696a6c6572026e6c00 2a51a8040000000000000000 37588 406200000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 406280000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37589 746b00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 746b80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37590 b78f54265010fb82282d0000000000000000 b78fd4240000000000000000 37591 dd190000000100000000000003626c3102626c06787334616c6c026e6c0000010001 dd198000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37592 04170000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 04178000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37593 92ca0000000100000000000003777777057363617279026e6c0000010001 92ca8000000100000002000203777777057363617279026e6c0000010001c0100002000100015180000c04646e73310471776562c016c0100002000100015180000704646e7332c02fc02a00010001000151800004d994ac0cc04200010001000151800004d5c42f6c 37594 715f00000001000000000000106272756964736d6f64656c61726f7365026e6c00000f0001 715f80000001000000020002106272756964736d6f64656c61726f7365026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c01dc00c00020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 37595 0000000070024000300a0000020405b401010402 000080010000000000000000 37596 89f700000001000000000000026e7303687661026e6c0000010001 89f780000001000000030003026e7303687661026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00f00020001000151800006036e7332c00fc00c00010001000151800004915c1202c03500010001000151800004c0576a65c04f00010001000151800004915c2102 37597 18ff00000001000000000000036e733203687661026e6c0000010001 18ff80000001000000030003036e733203687661026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800002c00cc02800010001000151800004915c1202c03900010001000151800004c0576a65c00c00010001000151800004915c2102 37598 bb6f00000001000000000000026e7303687661026e6c0000260001 bb6f80000001000000030003026e7303687661026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00f00020001000151800006036e7332c00fc00c00010001000151800004915c1202c03500010001000151800004c0576a65c04f00010001000151800004915c2102 37599 9c0200000001000000000000036e733203687661026e6c0000260001 9c0280000001000000030003036e733203687661026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800002c00cc02800010001000151800004915c1202c03900010001000151800004c0576a65c00c00010001000151800004915c2102 37600 b79029f35010447076ca0000000000000000 b790a9f40000000000000000 37601 b79029f3501844703bcc00000097ae00000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b790a9f40000000000000000 37602 b3260000000100000000000009776565726b616d6572026e6c0000010001 b3268000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 37603 687d000000010000000000000761726f77616e61026e6c0000ff0001 687d800000010000000200000761726f77616e61026e6c0000ff0001c00c00020001000151800013036e7339096b6f6f6b69656a6172036e657400c00c00020001000151800007046e733130c02c 37604 c80400000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 c80480000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37605 b7902a015011446276300000000000000000 b790aa040000000000000000 37606 84be000000010000000000000776656e73746572026e6c00000f0001 84be800000010000000300020776656e73746572026e6c00000f0001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 37607 f26f00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 f26f80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37608 0000000070024000652c0000020405b401010402 000080010000000000000000 37609 b7902a0250104462762f0000000000000000 b790aa040000000000000000 37610 8846000000010000000000000d66696174626172636865747461026e6c00000f0001 8846800000010000000300010d66696174626172636865747461026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01ac00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04cc02e000100010001518000043efa0202 37611 b790f1e050104470e3fe0000000000000000 37612 b790f1e050184470c001000000979800000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 37613 34c10000000100000000000008616473657276657206776562616473026e6c0000010001 34c18000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 37614 b790f1ee50114462e3640000000000000000 37615 000000007002400068eb0000020405b401010402 000080010000000000000000 37616 e54800000001000000000000027167026e6c0000010001 e54880000001000000020000027167026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c026 37617 b790f1ef50104462e3630000000000000000 37618 16920000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 16928000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 37619 b79170fc5010447068a10000000000000000 b791f0f40000000000000000 37620 b79170fc50184470faa300000097e200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b791f0f40000000000000000 37621 c25900000001000000000000026e7306766576696461026e6c0000010001 c25980000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 37622 6c3c00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 6c3c80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37623 e81b00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 e81b80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37624 617a000000010000000000000b676966706c6161746a6573026e6c0000010001 617a800000010000000200000b676966706c6161746a6573026e6c0000010001c00c00020001000151800013036e73310c616374697665646f6d61696ec018c00c00020001000151800006036e7332c030 37625 b791710a5011446268070000000000000000 b791f1040000000000000000 37626 b2d600000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 b2d680000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 37627 59fc0000000100000000000007666f727475796e026e6c00000f0001 59fc8000000100000002000207666f727475796e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 37628 b791710b5010446268060000000000000000 b791f1040000000000000000 37629 f48e000000010000000000000745434f4e3232380c67656c6465726d616c73656e026e6c0000010001 f48e800000010000000200020745434f4e3232380c67656c6465726d616c73656e026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c03500010001000151800004c143b9b5c04600010001000151800004c143b9b6 37630 1dd600000001000000000000037777770a65726f746f6d616e6961026e6c0000010001 1dd680000001000000020002037777770a65726f746f6d616e6961026e6c0000010001c01000020001000151800011036e73310a78736f6c7574696f6e73c01bc01000020001000151800006036e7332c033c02f00010001000151800004c3562e38c04c00010001000151800004c3562e39 37631 fc2b00000001000000000000037777770a65726f746f6d616e6961026e6c0000010001 fc2b80000001000000020002037777770a65726f746f6d616e6961026e6c0000010001c01000020001000151800011036e73310a78736f6c7574696f6e73c01bc01000020001000151800006036e7332c033c02f00010001000151800004c3562e38c04c00010001000151800004c3562e39 37632 5ab000000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 5ab080000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37633 0f6e00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 0f6e80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37634 2d3700000001000000000000036e733109666972737466696e64026e6c0000010001 2d3780000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37635 2a5428000001000000010000026e6c0000060001055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f736974657308537465696a6c6572026e6c000021000100000258001d0000006401850966732d737465696a6c08537465696a6c6572026e6c00 2a54a8040000000000000000 37636 cde90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 cde98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37637 d24f00000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 d24f80000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 37638 536e00000001000000000000087175616c69627265026e6c0000ff0001 536e80000001000000020000087175616c69627265026e6c0000ff0001c00c00020001000151800016046e7330310b63726579667367726f757003636f6d00c00c00020001000151800007046e733032c02e 37639 922000000001000000000000036d783104696c7365026e6c0000010001 922080000001000000030003036d783104696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c029000100010001518000043e45a282c03b000100010001518000043e45a283c04d000100010001518000043e45a284 37640 646500100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000000000000 646580000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 37641 d72600000001000000000000037777770a706f7374657273616c65026e6c0000010001 d72680000001000000020002037777770a706f7374657273616c65026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01bc01000020001000151800006036e7332c033c02f000100010001518000045104580ac04f000100010001518000045104601e 37642 000000007002400020bf0000020405b401010402 000080010000000000000000 37643 390700000001000000000000046e733032066368656c6c6f026e6c0000010001 390780000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 37644 658c00000001000000000000036e73310b706f73746b616e746f6f72026e6c0000010001 658c80000001000000030003036e73310b706f73746b616e746f6f72026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009026e730369736dc01cc00c00010001000151800004c2973e04c03e00010001000151800004c2973e05c05000010001000151800004d994ab02 37645 e52900000001000000000000036e73320b706f73746b616e746f6f72026e6c0000010001 e52980000001000000030003036e73320b706f73746b616e746f6f72026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009026e730369736dc01cc03000010001000151800004c2973e04c00c00010001000151800004c2973e05c05000010001000151800004d994ab02 37646 7ce7000000010000000000000776656e73746572026e6c00000f0001 7ce7800000010000000300020776656e73746572026e6c00000f0001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 37647 b793c2aa50104470cec40000000000000000 37648 b793c2aa50184470cbc6000000977600000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 37649 2c2400000001000000000000167265636874737072616b74696a6b616c62657273656e026e6c0000010001 2c2480000001000000030003167265636874737072616b74696a6b616c62657273656e026e6c0000010001c00c0002000100015180000e076e73617574683103626974c023c00c0002000100015180000a076e736175746832c03fc00c0002000100015180000a076e736175746833c03fc03700010001000151800004d5880c33c05100010001000151800004d5880c3bc06700010001000151800004d4ccc00b 37650 2e81000000010000000000000a696e7465726472617065026e6c00000f0001 2e81800000010000000200020a696e7465726472617065026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d4cb0e42c04600010001000151800004d4cb1221 37651 b793c2b850114462ce2a0000000000000000 37652 0000000070024000dbf20000020405b401010402 000080010000000000000000 37653 3e6b00000001000000000000066d616372617006746d66776562026e6c00000f0001 3e6b80000001000000020000066d616372617006746d66776562026e6c00000f0001c01300020001000151800011056c656d6f6e0571696e6970036e657400c01300020001000151800007046c696d65c034 37654 c0cc00000001000000000000037777770d6b6c6f702d706172746e657273026e6c0000010001 c0cc80000001000000030003037777770d6b6c6f702d706172746e657273026e6c0000010001c0100002000100015180000d036e7331067a6570746f72c01ec01000020001000151800006036e7332c036c01000020001000151800006036e7333c036c03200010001000151800004d5ce4f79c04b00010001000151800004d5ce4f7ac05d00010001000151800004d5ce4f7b 37655 b793c2b950104462ce290000000000000000 37656 b794500950104470fc980000000000000000 b794d0040000000000000000 37657 f96e000000010000000000000472657371026e6c0000010001 f96e800000010000000200020472657371026e6c0000010001c00c00020001000151800010036e733109686f73746e65746276c011c00c00020001000151800006036e7332c029c0250001000100015180000451113264c04100010001000151800004d5c42851 37658 8d85000000010000000000000377777706656e636f7265026e6c0000010001 8d85800000010000000200020377777706656e636f7265026e6c0000010001c0100002000100015180000b026e7305706c616e74c017c01000020001000151800006036e7332c02ec02b00010001000151800004d59f0037c04200010001000151800004d59f0046 37659 b794500950184470109c000000976000000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b794d0040000000000000000 37660 5df300000001000000000000036e733503777873026e6c0000010001 5df380000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37661 b78ab6a950104470823d0000000000000000 37662 b78ab6a95018447098b1000000961c75000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe21403c4fa10003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000 37663 3ca400000001000000000000036e733109666972737466696e64026e6c0000010001 3ca480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 37664 1fa400000001000000000000036e7331067a6570746f72026e6c00001c0001 1fa480000001000000030003036e7331067a6570746f72026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ce4f79c03900010001000151800004d5ce4f7ac04b00010001000151800004d5ce4f7b 37665 b794501750114462fbfe0000000000000000 b794d0140000000000000000 37666 e4c700000001000000000000036e7332067a6570746f72026e6c00001c0001 e4c780000001000000030003036e7332067a6570746f72026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02b00010001000151800004d5ce4f79c00c00010001000151800004d5ce4f7ac04b00010001000151800004d5ce4f7b 37667 b36800000001000000000000036e7333067a6570746f72026e6c00001c0001 b36880000001000000030003036e7333067a6570746f72026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02b00010001000151800004d5ce4f79c03d00010001000151800004d5ce4f7ac00c00010001000151800004d5ce4f7b 37668 00000000700240005a800000020405b401010402 000080010000000000000000 37669 370400000001000000000000026e73076d696e76656e77026e6c0000010001 370480000001000000030002026e73076d696e76656e77026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c297be47c03900010001000151800004c297be48 37670 013b00000001000000000000026e73076e656473746174026e6c0000010001 013b80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 37671 013c00000001000000000000036e7333076e656473746174026e6c0000010001 013c80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 37672 933100000001000000000000046d61696c0c737069646572737069646572026e6c0000010001 933180000001000000030000046d61696c0c737069646572737069646572026e6c0000010001c01100020001000151800014046e733031096772616669782d697303636f6d00c01100020001000151800007046e733032c037c01100020001000151800007046e733033c037 37673 b794501850104462fbfd0000000000000000 b794d0140000000000000000 37674 b7952a9c50104470a0920000000000000000 b795aa940000000000000000 37675 926e00000001000000000000037777770d6265646465622d6b617374656e026e6c0000010001 926e84030001000000010000037777770d6265646465622d6b617374656e026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 37676 b7952a9c501844706a9500000097aa00000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b795aa940000000000000000 37677 eeab000000010000000000000f6174746974756465686f6c6c616e64026e6c0000010001 eeab800000010000000200000f6174746974756465686f6c6c616e64026e6c0000010001c00c00020001000151800013026e730a6e61616d736572766572036e657400c00c00020001000151800006036e7331c033 37678 1a9e0000000100000000000003777777026678026e6c0000010001 1a9e8000000100000002000103777777026678026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c013c04000010001000151800004c2860043 37679 0ae800000001000000000000076d61696c6d616e0464733961026e6c00000f0001 0ae880000001000000020002076d61696c6d616e0464733961026e6c00000f0001c0140002000100015180000b036e73310470696e65c019c01400020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 37680 b7952aaa501144629ff80000000000000000 b795aaa40000000000000000 37681 96e200000001000000000000037777770b76697375616c726f757465076e6564636f6d70026e6c0000010001 96e280000001000000020001037777770b76697375616c726f757465076e6564636f6d70026e6c0000010001c01c00020001000151800006036e7331c01cc01c0002000100015180000b026e73026e6c036e657400c03800010001000151800004c3c1a80d 37682 b7952aab501044629ff70000000000000000 b795aaa40000000000000000 37683 e9ec0000000100000000000006736f6e657261026e6c0000ff0001 e9ec8000000100000003000006736f6e657261026e6c0000ff0001c00c00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02b 37684 151b00000001000000000000036e7331086e6f766178657373026e6c0000010001 151b80000001000000030003036e7331086e6f766178657373026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 37685 c258000000010000000000000668616e64656c026e6c0000020001 c258800000010000000200000668616e64656c026e6c0000020001c00c0002000100015180000f026e7306636170696361036e657400c00c00020001000151800006036e7332c02a 37686 2a5728000001000000010000026e6c0000060001055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026763065f6d7364637308537465696a6c6572026e6c000021000100000258001d000000640cc40966732d737465696a6c08537465696a6c6572026e6c00 2a57a8040000000000000000 37687 033700000001000000000000036e7335046372696f026e6c0000010001 033780000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37688 ba1700000001000000000000036e7336046372696f026e6c0000010001 ba1780000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37689 208d000000010000000000000377777703776562026e6c0000010001 208d800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 37690 a5d800000001000000000000036e7331046372696f026e6c0000010001 a5d880000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37691 e33c00000001000000000000036e7332046372696f026e6c0000010001 e33c80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37692 0ae000000001000000000000037777770a72656372656174696566026e6c0000010001 0ae080000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 37693 eab3000000010000000000000377777703776562026e6c0000010001 eab3800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 37694 386600000001000000000000036e7331046372696f026e6c0000010001 386680000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37695 72d700000001000000000000036e7332046372696f026e6c0000010001 72d780000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37696 23c200000001000000000000037777770e6465676564656b7465746166656c026e6c0000010001 23c280000001000000020002037777770e6465676564656b7465746166656c026e6c0000010001c0100002000100015180000f036e733108676c6f62616c2d65c01fc01000020001000151800006036e7332c037c03300010001000151800004d4f132c8c04e00010001000151800004d4f132d3 37697 00000000700240005b800000020405b401010402 000080010000000000000000 37698 fd5d00000001000000000000036e7331096873686f6c6c616e64026e6c00001c0001 fd5d80000001000000020002036e7331096873686f6c6c616e64026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c01ac00c000100010001518000049151d532c03c00010001000151800004c0576a65 37699 8afb00000001000000000000037777770b62657465727370656c656e026e6c0000ff0001 8afb80000001000000020001037777770b62657465727370656c656e026e6c0000ff0001c01000020001000151800018067365727665720e666c6974732d696e7465726e6574c01cc0100002000100015180000c036e7332057377646e73c01cc03000010001000151800004d5a0da82 37700 9f9c00000001000000000000046e73303803777873026e6c00001c0001 9f9c80000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 37701 b99700000001000000000000046e73303803777873026e6c0000260001 b99780000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 37702 1aab00000001000000000000046e73303903777873026e6c00001c0001 1aab80000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 37703 2e9400000001000000000000046e73303903777873026e6c0000260001 2e9480000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 37704 cf9600000001000000000000036e733503777873026e6c00001c0001 cf9680000001000000030003036e733503777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37705 124b00000001000000000000036e733503777873026e6c0000260001 124b80000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37706 b795b7cb5010447014630000000000000000 37707 b795b7cb501844701f65000000976800000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 37708 232e00000001000000000000037777770c72616164686574776f6f7264026e6c0000010001 232e80000001000000030002037777770c72616164686574776f6f7264026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 37709 b795b7d95011446213c90000000000000000 37710 000000007002400082b20000020405b401010402 000080010000000000000000 37711 b795b7da5010446213c80000000000000000 37712 b7963fba50104470b3a50000000000000000 b796bfb40000000000000000 37713 b7963fba5018447075a800000097b200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b796bfb40000000000000000 37714 9e0500000001000000000000036e73330864686f7374696e67026e6c0000010001 9e0580000001000000020002036e73330864686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02d00010001000151800004515b0370c03e00010001000151800004515b000a 37715 1f7d00000001000000000000076575726f636f6c026e6c00000f0001 1f7d80000001000000020002076575726f636f6c026e6c00000f0001c00c0002000100015180000d026e73077374616e6e6574c014c00c00020001000151800006036e7332c02bc02800010001000151800004d5852414c04100010001000151800004d5852418 37716 bf1700000001000000000000046d61696c0d686c622d736368697070657273026e6c0000010001 bf1780000001000000020000046d61696c0d686c622d736368697070657273026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c039 37717 b7963fc850114462b30b0000000000000000 b796bfc40000000000000000 37718 bc620000000100000000000004616e73310774697363616c69026e6c0000010001 bc628000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 37719 0000000070024000b50f0000020405b401010402 000080010000000000000000 37720 bda000000001000000000000037777770d73616d736f6e20262067657274026e6c0000010001 bda084030001000000010000037777770d73616d736f6e20262067657274026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 37721 b7963fc950104462b30a0000000000000000 b796bfc40000000000000000 37722 b797006150104470255b0000000000000000 b79780010000000000000000 37723 ca020000000100000000000003656c3107696e7465727873026e6c0000010001 ca028000000100000002000203656c3107696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37724 65010000000100000000000003656c3107696e7465727873026e6c0000260001 65018000000100000002000203656c3107696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37725 524d0000000100000000000003656c3207696e7465727873026e6c0000010001 524d8000000100000002000203656c3207696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37726 116c0000000100000000000003656c3207696e7465727873026e6c0000260001 116c8000000100000002000203656c3207696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37727 b797006150184470275e000000977200000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005b03677373096d6963726f736f667403636f6d00403afc56403c4dd60003000000384e544c4d535350000100000097b200e00f000f0029000000090009002000000046532d535445494a4c535445494a4c45522d444f4d45494e0000 b79780010000000000000000 37728 44340000000100000000000003656c3307696e7465727873026e6c0000010001 44348000000100000002000203656c3307696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37729 a21a0000000100000000000003656c3307696e7465727873026e6c0000260001 a21a8000000100000002000203656c3307696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37730 510d0000000100000000000003656c3407696e7465727873026e6c0000010001 510d8000000100000002000203656c3407696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37731 78280000000100000000000003656c3407696e7465727873026e6c0000260001 78288000000100000002000203656c3407696e7465727873026e6c0000260001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 37732 b1c400000001000000000000026e73076e656473746174026e6c0000010001 b1c480000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 37733 2ba6000000010000000000000a6765656e686569776567026e6c0000010001 2ba6800000010000000300030a6765656e686569776567026e6c0000010001c00c0002000100015180000c036e7331053266617374c017c00c00020001000151800006036e7332c02fc00c00020001000151800006036e7333c02fc02b0001000100015180000450f7c022c043000100010001518000043e858122c055000100010001518000045117eb22 37734 15c200000001000000000000036e7331046372696f026e6c0000010001 15c280000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37735 3d1e00000001000000000000036e7332046372696f026e6c0000010001 3d1e80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37736 1e2b00000001000000000000037777770a72656372656174696566026e6c0000010001 1e2b80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 37737 3ae300000001000000000000036e7331046372696f026e6c0000010001 3ae380000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37738 0f9000000001000000000000036e7332046372696f026e6c0000010001 0f9080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37739 b797006f5011446224c10000000000000000 b79780010000000000000000 37740 0b7b000000010000000000000869766f77696c6c65066e7434616c6c024e4c0000010001 0b7b800000010000000200020869766f77696c6c65066e7434616c6c024e4c0000010001c01500020001000151800005026e73c015c0150002000100015180000d036e733206787334616c6cc01cc03000010001000151800004c26d3402c04100010001000151800004c26d0963 37741 f07d00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 f07d80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37742 198400000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 198480000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37743 b79700705010446224c00000000000000000 b79780010000000000000000 37744 962c00000001000000000000036e7331076970746f776572026e6c00001c0001 962c80000001000000020002036e7331076970746f776572026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043ecc4065c03a000100010001518000043ecc4066 37745 64bc00000001000000000000036e7332076970746f776572026e6c00001c0001 64bc80000001000000020002036e7332076970746f776572026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043ecc4065c00c000100010001518000043ecc4066 37746 9f29000000010000000000000f726f6765727377656264657369676e026e6c00000f0001 9f29800000010000000200000f726f6765727377656264657369676e026e6c00000f0001c00c00020001000151800017036e73310d7072696f736572766530316e74036e657400c00c00020001000151800006036e7332c034 37747 fb0e0000000100000000000004686f6d650774697363616c69026e6c00001c0001 fb0e8000000100000003000204686f6d650774697363616c69026e6c00001c0001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 37748 a53f00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 a53f80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37749 f22300000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 f22380000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 37750 c11200000001000000000000037777770477656572026e6c0000010001 c11280000001000000020002037777770477656572026e6c0000010001c010000200010001518000110568656e7279086d6574656f636f6ec015c0100002000100015180000e036e733207737572666e6574c015c02900010001000151800004c057690ac04600010001000151800004c0572402 37751 1bc900000001000000000000036e73340767617574656e67026e6c0000010001 1bc980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37752 23d600000001000000000000036e73330767617574656e67026e6c0000010001 23d680000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37753 1cf70000000100000000000003636b72026e6c00000f0001 1cf78000000100000002000203636b72026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 37754 8baf00000001000000000000037777770668616c6d6f73026e6c0000010001 8baf80000001000000020000037777770668616c6d6f73026e6c0000010001c01000020001000151800017036e73310d6373732d6970636f6e6e65637403636f6d00c01000020001000151800006036e7332c02f 37755 02fa000000010000000000000d746877696e672d616c62657274026e6c00000f0001 02fa800000010000000200020d746877696e672d616c62657274026e6c00000f0001c00c00020001000151800014036e73310d32302d616c6c686f7374696e67c01ac00c00020001000151800006036e7332c032c02e000100010001518000044262d66ec04e000100010001518000044262d66f 37756 27f20010000100000000000106787334616c6c026e6c0000ff00010000290800000080000000 27f28000000100000003000306787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 37757 faee00000001000000000000086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001 faee80000001000000020002086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001c0220002000100015180000d036e7331066d696e646566c027c02200020001000151800006036e7332c03fc03b00010001000151800004d9a9e7c6c05400010001000151800004d9a9e7c5 37758 3881000000010000000000000377777703776562026e6c0000010001 3881800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 37759 e59e000000010000000000000a6d61696c712d6574726e0462617274026e6c0000010001 e59e800000010000000200020a6d61696c712d6574726e0462617274026e6c0000010001c01700020001000151800012036e73310b7669616e6574776f726b73c01cc01700020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 37760 a3be000000010000000000000a6d61696c712d6574726e0462617274026e6c00001c0001 a3be800000010000000200020a6d61696c712d6574726e0462617274026e6c00001c0001c01700020001000151800012036e73310b7669616e6574776f726b73c01cc01700020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 37761 c6ab0000000100000000000003777777046f746762026e6c0000010001 c6ab8000000100000003000103777777046f746762026e6c0000010001c0100002000100015180000e026e7308767575727765726bc015c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c047c029000100010001518000043efa0202 37762 cda200000001000000000000037777770e696e7465726167656e747572656e026e6c0000010001 cda280000001000000020002037777770e696e7465726167656e747572656e026e6c0000010001c0100002000100015180000e036e733107626265796f6e64c01fc01000020001000151800006036e7332c037c033000100010001518000043eb1900bc04d000100010001518000043eb19002 37763 61700000000100000000000005737461747307676f2d77657374026e6c0000010001 61708000000100000003000105737461747307676f2d77657374026e6c0000010001c0120002000100015180000e026e7308767575727765726bc01ac01200020001000151800012036e733208767575727765726b036e657400c01200020001000151800006036e7333c04cc02e000100010001518000043efa0202 37764 5d150000000100000000000006676f32776562026e6c026e6c00000f0001 5d158403000100000001000006676f32776562026e6c026e6c00000f0001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 37765 1bb000000001000000000000036e73330767617574656e67026e6c0000010001 1bb080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37766 7a4e0000000100000000000003777777087665726f6e697661026e6c0000010001 7a4e8403000100000001000003777777087665726f6e697661026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 37767 75f400000001000000000000056d61696c310976697275737672696a026e6c0000010001 75f480000001000000020000056d61696c310976697275737672696a026e6c0000010001c0120002000100015180000d036e7331036b706e036e657400c01200020001000151800006036e7332c034 37768 061b000000010000000000000a67677a6472656e746865026e6c00000f0001 061b800000010000000200000a67677a6472656e746865026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02f 37769 800b00000001000000000000137363686f74706f6f72746c6f67697374696373026e6c0000010001 800b80000001000000020002137363686f74706f6f72746c6f67697374696373026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc020c00c00020001000151800006036e7332c037c03400010001000151800004c26d0642c04c00010001000151800004c26d0963 37770 0bfd0000000100000000000003777777076d657263617264026e6c0000010001 0bfd8000000100000002000203777777076d657263617264026e6c0000010001c0100002000100015180000d026e73077374616e6e6574c018c01000020001000151800006036e7332c02fc02c00010001000151800004d5852414c04500010001000151800004d5852418 37771 b7a400000001000000000000037777770c6263766c697373696e67656e026e6c0000010001 b7a480000001000000020000037777770c6263766c697373696e67656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 37772 b793000000010000000000000e426f6e676572732d4a616e73656e026e6c0000010001 b793800000010000000200000e426f6e676572732d4a616e73656e026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c03a 37773 7e810000000100000000000005646e732d31056c61646f74026e6c0000010001 7e818000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37774 3da20000000100000000000005646e732d32056c61646f74026e6c0000010001 3da28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37775 5cde00000001000000000000036e733103736974026e6c0000260001 5cde80000001000000020002036e733103736974026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045111218dc036000100010001518000045111218e 37776 e38d00000001000000000000036e733203736974026e6c00001c0001 e38d80000001000000020002036e733203736974026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc028000100010001518000045111218dc00c000100010001518000045111218e 37777 b5bb000000010000000000000377777714686f7574766573746572696a656e6865746c6f6f026e6c0000010001 b5bb840300010000000100000377777714686f7574766573746572696a656e6865746c6f6f026e6c0000010001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 37778 3e8c0000000100000000000009652d6c756e61746963026e6c0000010001 3e8c8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 37779 36800000000100000000000009652d6c756e61746963026e6c0000010001 36808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 37780 7bb8000000010000000000000963616d7061676e657304626f6e65026e6c0000010001 7bb8800000010000000200020963616d7061676e657304626f6e65026e6c0000010001c0160002000100015180000b026e7305706c616e74c01bc01600020001000151800006036e7332c032c02f00010001000151800004d59f0037c04600010001000151800004d59f0046 37781 1bb100000001000000000000056d6777303203777873026e6c03777873026e6c0000010001 1bb180000001000000030003056d6777303203777873026e6c03777873026e6c0000010001c01900020001000151800007046e733038c019c01900020001000151800007046e733039c019c01900020001000151800006036e7334c019c03100010001000151800004c3790128c04400010001000151800004c3790143c05700010001000151800004d5ef9a65 37782 335200000001000000000000036e733403777873026e6c0000260001 335280000001000000030003036e733403777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 37783 bec300000001000000000000036e733403777873026e6c00001c0001 bec380000001000000030003036e733403777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 37784 ab6f00000001000000000000037777770b64697265637476616c7565026e6c0000010001 ab6f80000001000000020002037777770b64697265637476616c7565026e6c0000010001c01000020001000151800012036e73350b73696c766572706f696e74c01cc01000020001000151800006036e7336c034c0300001000100015180000450f7c702c04e0001000100015180000450f7c602 37785 689900000001000000000000036e733303777873026e6c0000260001 689980000001000000030003036e733303777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37786 2f6000000001000000000000036e733303777873026e6c00001c0001 2f6080000001000000030003036e733303777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37787 2ea800000001000000000000036e733303777873026e6c0000010001 2ea880000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 37788 faec00000001000000000000056d6777303103777873026e6c03777873026e6c0000260001 faec80000001000000030003056d6777303103777873026e6c03777873026e6c0000260001c01900020001000151800007046e733038c019c01900020001000151800007046e733039c019c01900020001000151800006036e7334c019c03100010001000151800004c3790128c04400010001000151800004c3790143c05700010001000151800004d5ef9a65 37789 412600000001000000000000056369766971026e6c00000f0001 412680000001000000020002056369766971026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 37790 dc8a00000001000000000000056d6777303103777873026e6c03777873026e6c00001c0001 dc8a80000001000000030003056d6777303103777873026e6c03777873026e6c00001c0001c01900020001000151800007046e733038c019c01900020001000151800007046e733039c019c01900020001000151800006036e7334c019c03100010001000151800004c3790128c04400010001000151800004c3790143c05700010001000151800004d5ef9a65 37791 1ded0000000100000000000008686f73746e616d650462696e640000100003 1ded8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37792 a93d00000001000000000000056d6777303103777873026e6c03777873026e6c0000010001 a93d80000001000000030003056d6777303103777873026e6c03777873026e6c0000010001c01900020001000151800007046e733038c019c01900020001000151800007046e733039c019c01900020001000151800006036e7334c019c03100010001000151800004c3790128c04400010001000151800004c3790143c05700010001000151800004d5ef9a65 37793 849600000001000000000000056d6777303203777873026e6c03777873026e6c0000260001 849680000001000000030003056d6777303203777873026e6c03777873026e6c0000260001c01900020001000151800007046e733038c019c01900020001000151800007046e733039c019c01900020001000151800006036e7334c019c03100010001000151800004c3790128c04400010001000151800004c3790143c05700010001000151800004d5ef9a65 37794 905700000001000000000000056d6777303203777873026e6c03777873026e6c00001c0001 905780000001000000030003056d6777303203777873026e6c03777873026e6c00001c0001c01900020001000151800007046e733038c019c01900020001000151800007046e733039c019c01900020001000151800006036e7334c019c03100010001000151800004c3790128c04400010001000151800004c3790143c05700010001000151800004d5ef9a65 37795 3bfb0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 3bfb8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37796 ba3c0000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 ba3c8000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37797 a2190000000100000000000008686f73746e616d650462696e640000100003 a2198000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37798 29800000000100000000000008686f73746e616d650462696e640000100003 29808000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 37799 36470000000100000000000006706f6c6c7578086c6f7374626f7973026e6c0000010001 36478000000100000002000206706f6c6c7578086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c01300020001000151800002c00cc030000100010001518000043e32050ac00c00010001000151800004c297d912 37800 e0b70000000100000000000006636173746f72086c6f7374626f7973026e6c0000010001 e0b78000000100000002000206636173746f72086c6f7374626f7973026e6c0000010001c01300020001000151800002c00cc0130002000100015180000906706f6c6c7578c013c00c000100010001518000043e32050ac03e00010001000151800004c297d912 37801 38bf001000010000000000010b7374617274706167696e61026e6c00000100010000290800000000000000 38bf800000010000000300040b7374617274706167696e61026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a2840000291000000000000000 37802 506a000000010000000000000b7374617274706167696e61026e6c0000010001 506a800000010000000300030b7374617274706167696e61026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 37803 c5c800000001000000000000026e730962697477697a617264026e6c0000010001 c5c880000001000000020002026e730962697477697a617264026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000c026e73067574722d6978c019c00c00010001000151800004d5c428f2c03b0001000100015180000451113206 37804 b78ab6b75011446281a40000000000000000 37805 0000000070024000a5620000020405b401010402 000080010000000000000000 37806 3b73000000010000000000000331333902313401360236390a626c61636b686f6c657307656173796e6574026e6c0000050001 3b73800000010000000200020331333902313401360236390a626c61636b686f6c657307656173796e6574026e6c0000050001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 37807 f2050000000100000000000014766c65656d696e67682d646d2d74726164696e67026e6c00000f0001 f2058000000100000002000114766c65656d696e67682d646d2d74726164696e67026e6c00000f0001c00c0002000100015180000a036e733303777873c021c00c00020001000151800006036e7334c039c04b00010001000151800004d5ef9a65 37808 11d200000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730574737269730f7269732d626172656e647265636874026e6c0000210001 11d284030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730574737269730f7269732d626172656e647265636874026e6c0000210001c05600060001000038400036026e730f646f6d61696e2d7265676973747279c0560a686f73746d6173746572c06d0bf1e540000070800000384000278d0000003840 37809 6b8f0000000100000000000008676f6c646d696e65026e6c00000f0001 6b8f8000000100000003000208676f6c646d696e65026e6c00000f0001c00c0002000100015180000e046e733031066368656c6c6fc015c00c00020001000151800007046e733032c02ec00c0002000100015180000f026e73026e6c0369626d036e657400c02900010001000151800004d4534482c04300010001000151800004d4534483 37810 6acc0000000100000000000003777777067a7376737463026e6c0000010001 6acc8403000100000001000003777777067a7376737463026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 37811 fe7100000001000000000000036e7331056163646973026e6c0000010001 fe7180000001000000020002036e7331056163646973026e6c0000010001c01000020001000151800002c00cc0100002000100015180000a026e7304616e7762c016c00c00010001000151800004c29779fac03800010001000151800004c1ac840a 37812 2eb600000001000000000000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001 2eb680000001000000020000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001c014000200010001518000110377656207616a63666f6f6403636f6d00c0140002000100015180000b0865786368616e6765c034 37813 6f0e00000001000000000000037777770b7a77766e6f6f72642d6161026e6c0000010001 6f0e80000001000000030001037777770b7a77766e6f6f72642d6161026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 37814 2ab900000001000000000000086f6e746172676574026e6c00001c0001 2ab980000001000000020002086f6e746172676574026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 37815 19dc00000001000000000000055f6c646170045f746370026763065f6d736463730574737269730f7269732d626172656e647265636874026e6c0000210001 19dc84030001000000010000055f6c646170045f746370026763065f6d736463730574737269730f7269732d626172656e647265636874026e6c0000210001c03700060001000038400036026e730f646f6d61696e2d7265676973747279c0370a686f73746d6173746572c04e0bf1e540000070800000384000278d0000003840 37816 2b04000000010000000000000377777712766973736572696a636f6f70657261746965026e6c0000010001 2b04800000010000000300020377777712766973736572696a636f6f70657261746965026e6c0000010001c0100002000100015180000d036e733106776964657873c023c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c03bc03700010001000151800004d4ccc0fcc06c000100010001518000043efa0703 37817 6476000000010000000000000672696a736572026e6c0000010001 6476800000010000000200010672696a736572026e6c0000010001c00c00020001000151800010036e7331067573656c616203636f6d00c00c0002000100015180000d036e7332067573656c6162c013c043000100010001518000043e3aa284 37818 1e3200000001000000000000036e7331046372696f026e6c0000010001 1e3280000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37819 3a6a00000001000000000000036e7332046372696f026e6c0000010001 3a6a80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37820 21ad00000001000000000000037777770a72656372656174696566026e6c0000010001 21ad80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 37821 a80b00000001000000000000036e7331046372696f026e6c0000010001 a80b80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37822 e5aa00000001000000000000036e7332046372696f026e6c0000010001 e5aa80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 37823 48cd00000001000000000000136f6c6976696572736974656275696c64696e67026e6c00000f0001 48cd84030001000000010000136f6c6976696572736974656275696c64696e67026e6c00000f0001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 37824 d6200000000100000000000006696d616765730566756e6461026e6c0000010001 d6208000000100000003000006696d616765730566756e6461026e6c0000010001c01300020001000151800012036e733108626c7565646f6d65036e657400c01300020001000151800006036e7332c031c01300020001000151800006036e7333c031 37825 715400000001000000000000037777770d676b762d6e6574746f72616d61026e6c0000010001 715480000001000000020000037777770d676b762d6e6574746f72616d61026e6c0000010001c0100002000100015180000f036e7331056165696374036e657400c01000020001000151800006036e7332c036 37826 85e8000000010000000000001267656c612d696e7465726e6174696f6e616c026e6c00000f0001 85e8840300010000000100001267656c612d696e7465726e6174696f6e616c026e6c00000f0001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 37827 471e00000001000000000000086573746f72656e6c026e6c00000f0001 471e84030001000000010000086573746f72656e6c026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 37828 336100000001000000000000064e414d53525605414d4f4c46024e4c0000010001 336180000001000000030003064e414d53525605414d4f4c46024e4c0000010001c01300020001000151800002c00cc0130002000100015180000a076e616d73727632c013c0130002000100015180000e036e733107737572666e6574c019c00c00010001000151800004c010bd03c03b00010001000151800004c010bddec05100010001000151800004c0576a65 37829 923b00000001000000000000074d41494c53525605414d4f4c46024e4c0000010001 923b80000001000000030003074d41494c53525605414d4f4c46024e4c0000010001c01400020001000151800009066e616d737276c014c0140002000100015180000a076e616d73727632c014c0140002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004c010bd03c04300010001000151800004c010bddec05900010001000151800004c0576a65 37830 382a0000000100000000000003777777026e75026e6c0000010001 382a8000000100000003000303777777026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c027000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 37831 046800000001000000000000037777770b7a77766e6f6f72642d6161026e6c0000010001 046880000001000000030001037777770b7a77766e6f6f72642d6161026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 37832 55a300100001000000000001034e533103415454024e4c00000100010000290800000080000000 55a380000001000000020003034e533103415454024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d0000291000000000000000 37833 755400100001000000000001034e533103415454024e4c00002600010000290800000080000000 755480000001000000020003034e533103415454024e4c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d0000291000000000000000 37834 baaa00100001000000000001034e533203415454024e4c00000100010000290800000080000000 baaa80000001000000020003034e533203415454024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d0000291000000000000000 37835 aeee00100001000000000001034e533203415454024e4c00002600010000290800000080000000 aeee80000001000000020003034e533203415454024e4c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d0000291000000000000000 37836 235100000001000000000000037777770873746f726b706d74026e6c0000010001 235180000001000000020002037777770873746f726b706d74026e6c0000010001c0100002000100015180000e036e73310765766964656e74c019c01000020001000151800006036e7332c031c02d00010001000151800004c36d19c4c04700010001000151800004c36d1942 37837 7c3400000001000000000000037777770673706f72656e026e6c0000010001 7c3480000001000000020000037777770673706f72656e026e6c0000010001c0100002000100015180000d03646e73036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 37838 55e00000000100000000000006696d616765730566756e6461026e6c0000010001 55e08000000100000003000006696d616765730566756e6461026e6c0000010001c01300020001000151800012036e733108626c7565646f6d65036e657400c01300020001000151800006036e7332c031c01300020001000151800006036e7333c031 37839 165300000001000000000000036e733107737572666e6574026e6c0000010001 165380000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 37840 7669000000010000000000000c72696a6e6576656c642d6176026e6c00000f0001 7669800000010000000300000c72696a6e6576656c642d6176026e6c00000f0001c00c00020001000151800014046e733031096772616669782d697303636f6d00c00c00020001000151800007046e733032c032c00c00020001000151800007046e733033c032 37841 bb1f000000010000000000000377777708737461727472656b026e6c0000010001 bb1f800000010000000200020377777708737461727472656b026e6c0000010001c0100002000100015180000c026e73067574722d6978c019c01000020001000151800006036e7332c030c02d0001000100015180000451113206c04500010001000151800004d5c42806 37842 3a4c00000001000000000000037777770b64656e74616c756e696f6e026e6c0000010001 3a4c80000001000000020001037777770b64656e74616c756e696f6e026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c01cc01000020001000151800011036e7332076e6564636f6d70036f726700c03000010001000151800004c3c1a80d 37843 40450010000100000000000108667265656d61696c026e6c00000f00010000290800000000000000 40458000000100000003000308667265656d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f133250000291000000000000000 37844 5768000000010000000000000473686f700a7468652d626f72646572026e6c0000010001 5768800000010000000200020473686f700a7468652d626f72646572026e6c0000010001c0110002000100015180000b036e73310470696e65c01cc01100020001000151800006036e7332c034c03000010001000151800004d59c0201c04700010001000151800004c3c1a303 37845 ab2a000000010000000000000473686f700a7468652d626f72646572026e6c0000010001 ab2a800000010000000200020473686f700a7468652d626f72646572026e6c0000010001c0110002000100015180000b036e73310470696e65c01cc01100020001000151800006036e7332c034c03000010001000151800004d59c0201c04700010001000151800004c3c1a303 37846 71df00100001000000000001036e7331056132303030026e6c00000100010000290800000080000000 71df80000001000000030003036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 37847 253400100001000000000001036e7331056132303030026e6c00002600010000290800000080000000 253480000001000000030003036e7331056132303030026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 37848 092200100001000000000001036e7332056132303030026e6c00000100010000290800000080000000 092280000001000000030003036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 37849 020c00100001000000000001036e7332056132303030026e6c00002600010000290800000080000000 020c80000001000000030003036e7332056132303030026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 37850 271100000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000010001 271180000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 37851 accb00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000010001 accb80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 37852 f83b000000010000000000000469632d73026e6c00000f0001 f83b800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 37853 363d00000001000000000000037777770a6d61726b706c61617473026e6c0000010001 363d80000001000000020000037777770a6d61726b706c61617473026e6c0000010001c0100002000100015180000f036e733105796b6f6f6e036e657400c01000020001000151800006036e7332c033 37854 51110000000100000000000004686f6d6508636f6e6365707473026e6c0000010001 51118000000100000002000204686f6d6508636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac0110002000100015180000704646e7332c011c02e00010001000151800004d5c51c03c04b00010001000151800004d5c51e1c 37855 1d5a00000001000000000000056d61696c3109656e6f766174696f6e026e6c0000010001 1d5a80000001000000030002056d61696c3109656e6f766174696f6e026e6c0000010001c01200020001000151800006036e7334c012c01200020001000151800006036e7333c012c0120002000100015180001404646e733309656e6f766174696f6e036e657400c030000100010001518000049105fc46c042000100010001518000049105fc4e 37856 a36f000000010000000000000766616e6472616c077765622d6c6f67026e6c0000010001 a36f800000010000000300030766616e6472616c077765622d6c6f67026e6c0000010001c0140002000100015180000b036e733104696c7365c01cc01400020001000151800006036e7332c034c01400020001000151800006036e7333c034c030000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 37857 9d2e000000010000000000000377777705652d652d74026e6c0000010001 9d2e800000010000000200010377777705652d652d74026e6c0000010001c0100002000100015180000a036e733303777873c016c01000020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 37858 16f70000000100000000000004676d746f026e6c00000f0001 16f78000000100000002000004676d746f026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c02c 37859 090a00000001000000000000037777770761626e616d726f026e6c0000010001 090a80000001000000020002037777770761626e616d726f026e6c0000010001c0100002000100015180000b0870686f626f733031c010c0100002000100015180000b0870686f626f733032c010c02c00010001000151800004a7cac30bc04300010001000151800004a7cac30c 37860 b60a00000001000000000000026e75026e6c026e6c00001c0001 b60a84030001000000010000026e75026e6c026e6c00001c0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 37861 d1500000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d1508000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37862 82670000000100000000000006726f62636f6d026e6c00000f0001 82678000000100000002000006726f62636f6d026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 37863 0dec00000001000000000000027167026e6c0000010001 0dec80000001000000020000027167026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c026 37864 6abf00000001000000000000037777770773696e64626164026e6c0000010001 6abf80000001000000020002037777770773696e64626164026e6c0000010001c0100002000100015180000e036e733207737570706f7274c018c01000020001000151800006036e7334c030c02c00010001000151800004c372e7c8c04600010001000151800004c372e6fe 37865 37bb000000010000000000000f7a61646b696e65636f6e7472616374026e6c0000010001 37bb800000010000000200000f7a61646b696e65636f6e7472616374026e6c0000010001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c033 37866 02d000100001000000000001036e733203757063026e6c00000100010000290800000080000000 02d080000001000000030004036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c01410000291000000000000000 37867 2e1d0000000100000000000008667265656d61696c026e6c00000f0001 2e1d8000000100000003000208667265656d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 37868 dba100000001000000000000036e7331056132303030026e6c0000010001 dba180000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 37869 385700000001000000000000036e7331056132303030026e6c0000260001 385780000001000000030002036e7331056132303030026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 37870 3b0400000001000000000000036e7332056132303030026e6c0000010001 3b0480000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 37871 6493000000010000000000000377777703707674026e6c0000010001 6493800000010000000200020377777703707674026e6c0000010001c0100002000100015180000b026e73057469637473c014c01000020001000151800006036e7332c02bc02800010001000151800004c1ad2902c03f00010001000151800004c1ad2903 37872 619e000000010000000000000e6c656b6b657265626f727374656e026e6c0000010001 619e800000010000000200020e6c656b6b657265626f727374656e026e6c0000010001c00c0002000100015180000e036e7331076970746f776572c01bc00c00020001000151800006036e7332c033c02f000100010001518000043ecc4065c049000100010001518000043ecc4066 37873 b8f100000001000000000000046b6e6175026e6c00000f0001 b8f180000001000000030001046b6e6175026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc011c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c043c025000100010001518000043efa0202 37874 391500000001000000000000046370696d026e6c0000020001 391580000001000000020002046370696d026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 37875 0010000000010000000000000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001 0010800000010000000200000662616e6e65720a7363686f6f6c62616e6b026e6c0000010001c0130002000100015180001406737068696e7807726f7365747461036e657400c0130002000100015180000906616e75626973c039 37876 34cc00000001000000000000036e73310764656e68616167026e6c0000010001 34cc80000001000000020002036e73310764656e68616167026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9443105c03a00010001000151800004d9443106 37877 9a6600000001000000000000036e73320764656e68616167026e6c0000010001 9a6680000001000000020002036e73320764656e68616167026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d9443105c00c00010001000151800004d9443106 37878 939900000001000000000000037777770962697a617273697465026e6c0000010001 939980000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 37879 b78ab6b85010446281a30000000000000000 37880 903000000001000000000000037777770b6d6f6f69656b75746a6573026e6c0000010001 903080000001000000020000037777770b6d6f6f69656b75746a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c033 37881 b799061e501044700fef0000000000000000 b79980010000000000000000 37882 b799061e50184470a7d4000000969a04000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe22403c4fa20003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000 b79980010000000000000000 37883 b28b0000000100000000000003706f700e616c6261726176656e67726f6570026e6c0000010001 b28b8000000100000002000203706f700e616c6261726176656e67726f6570026e6c0000010001c01000020001000151800010036e733109756e69736572766572c01fc01000020001000151800006036e7332c037c03300010001000151800004c3454b03c04f00010001000151800004d119a2fa 37884 7f30000000010000000000000661726475696e026e6c00000f0001 7f30800000010000000200020661726475696e026e6c00000f0001c00c00020001000151800010026e730a7a65656c616e646e6574c013c00c00020001000151800006036e7332c02ac02700010001000151800004d473c0c1c04300010001000151800004d473c0c3 37885 cca800000001000000000000037777770b62726162616e7462696572026e6c0000010001 cca880000001000000020002037777770b62726162616e7462696572026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01cc01000020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 37886 41f50000000100000000000007636f6e74656e74026e6c00000f0001 41f58000000100000002000007636f6e74656e74026e6c00000f0001c00c00020001000151800016046e7330310b63726579667367726f757003636f6d00c00c00020001000151800007046e733032c02d 37887 ab3c0000000100000000000006787334616c6c026e6c0000ff0001 ab3c8000000100000003000206787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 37888 49d700000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000010001 49d780000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 37889 439500000001000000000000037777770d736578656e72656c6174696573026e6c0000010001 439580000001000000020001037777770d736578656e72656c6174696573026e6c0000010001c0100002000100015180000b026e73053266617374c01ec01000020001000151800006036e7332c035c049000100010001518000043e858122 37890 2679000000010000000000000661646475726c06746d66776562026e6c0000ff0001 2679800000010000000200000661646475726c06746d66776562026e6c0000ff0001c01300020001000151800011056c656d6f6e0571696e6970036e657400c01300020001000151800007046c696d65c034 37891 58c1000000010000000000001264656672697465737370656369616c697374026e6c00000f0001 58c1800000010000000200021264656672697465737370656369616c697374026e6c00000f0001c00c0002000100015180000f04646e733107696e666f6e6574c01fc00c0002000100015180000704646e7332c038c03300010001000151800004d4bd01c4c04e00010001000151800004d4bd7f83 37892 1d10000000010000000000010d6f6479737365652d67726f6570026e6c00001c00010000291000000000000000 1d10800000010000000200010d6f6479737365652d67726f6570026e6c00001c0001c00c00020001000151800013036e7331026e6c0669676e697465036e657400c00c00020001000151800006036e7332c0320000291000000000000000 37893 f2de00000001000000000000076761792d7669700467757473026e6c0000010001 f2de80000001000000020002076761792d7669700467757473026e6c0000010001c0140002000100015180000e026e73086e65787467656172c019c01400020001000151800006036e7332c030c02d00010001000151800004c26d9ab8c04700010001000151800004c26d9aa3 37894 63790000000100000000000003777777056177657461026e6c0000010001 63798000000100000002000003777777056177657461026e6c0000010001c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec031 37895 30750000000100000000000011636f6e74726f6c65636e6574776f726b73026e6c00000f0001 30758000000100000002000211636f6e74726f6c65636e6574776f726b73026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec01ec00c00020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 37896 be9300000001000000000000037777770b6d6f7373656c766f636874026e6c0000010001 be9380000001000000020002037777770b6d6f7373656c766f636874026e6c0000010001c0100002000100015180000e036e733207737570706f7274c01cc01000020001000151800006036e7334c034c03000010001000151800004c372e7c8c04a00010001000151800004c372e6fe 37897 2c2d00000001000000000000026e7307696e746f756368026e6c0000010001 2c2d80000001000000030001026e7307696e746f756368026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c001 37898 66ff00000001000000000000037777770d766964726176617374676f6564026e6c0000010001 66ff80000001000000020000037777770d766964726176617374676f6564026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c039 37899 ebbc00000001000000000000086168636272616e640564656d6f6e026e6c0000ff0001 ebbc80000001000000030002086168636272616e640564656d6f6e026e6c0000ff0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 37900 4e9700000001000000000000086168636272616e640564656d6f6e026e6c0000ff0001 4e9780000001000000030002086168636272616e640564656d6f6e026e6c0000ff0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 37901 6d260000000100000000000003777777096d7573696370616765026e6c0000010001 6d268000000100000002000203777777096d7573696370616765026e6c0000010001c0100002000100015180000d026e73077374616e6e6574c01ac01000020001000151800006036e7332c031c02e00010001000151800004d5852414c04700010001000151800004d5852418 37902 b729000000010000000000000465626179026e6c0000010001 b729800000010000000200000465626179026e6c0000010001c00c000200010001518000140963726f636f64696c65046562617903636f6d00c00c0002000100015180000b087061636966696572c034 37903 a8dc000000010000000000000c6b696a6b65727376726161670931746567656e313030026e6c0000010001 a8dc800000010000000200000c6b696a6b65727376726161670931746567656e313030026e6c0000010001c0190002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0190002000100015180000d036e7332036b706e036e657400 37904 54e20000000100000000000003777777096b61707065726e6574026e6c0000010001 54e28000000100000003000203777777096b61707065726e6574026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 37905 08360000000100000000000002616404696c7365026e6c0000010001 08368000000100000003000302616404696c7365026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 37906 12ff0000000100000000000005646e732d31056c61646f74026e6c0000010001 12ff8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37907 65020000000100000000000006676967616e74026e6c0000ff0001 65028000000100000002000106676967616e74026e6c0000ff0001c00c0002000100015180000f036e733108642d736572766572c013c00c00020001000151800006036e7332c02bc0420001000100015180000451046032 37908 dab60000000100000000000005646e732d32056c61646f74026e6c0000010001 dab68000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37909 bb1300000001000000000000026e7304696d636f026e6c0000010001 bb1380000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 37910 6b4f000000010000000000000377777706746f6d746f6d026e6c0000010001 6b4f800000010000000300010377777706746f6d746f6d026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 37911 e07b0000000100000000000003646e62026e6c00000f0001 e07b8000000100000002000003646e62026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 37912 cc0700000001000000000000037777770d73616d736f6e20262067657274036e6c74026e6c0000010001 cc0780000001000000020002037777770d73616d736f6e20262067657274036e6c74026e6c0000010001c01e00020001000151800012036e73310b7669616e6574776f726b73c022c01e00020001000151800006036e7332c03ac03600010001000151800004d43d0f08c05400010001000151800004d43d19e2 37913 c9ea00000001000000000000036e73330767617574656e67026e6c0000010001 c9ea80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37914 c9eb00000001000000000000036e73340767617574656e67026e6c0000010001 c9eb80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37915 63f40000000100000000000005646e732d31056c61646f74026e6c0000010001 63f48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37916 e7420000000100000000000005646e732d32056c61646f74026e6c0000010001 e7428000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37917 7db90000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 7db98000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 37918 430700000001000000000000036e733203757063026e6c0000010001 430780000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 37919 a6bc0000000100000000000006485342444e5309485342524142414e54026e6c0000010001 a6bc8000000100000002000206485342444e5309485342524142414e54026e6c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01dc00c00010001000151800004913001fac03f00010001000151800004c0576a65 37920 3e1c0000000100000000000009652d6c756e61746963026e6c0000010001 3e1c8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 37921 0f000000000100000000000009652d6c756e61746963026e6c0000010001 0f008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 37922 6f2000000001000000000000036e733204696c7365026e6c0000010001 6f2080000001000000030003036e733204696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e45a282c00c000100010001518000043e45a283c049000100010001518000043e45a284 37923 01a200000001000000000000036e733304696c7365026e6c0000010001 01a280000001000000030003036e733304696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc029000100010001518000043e45a282c03b000100010001518000043e45a283c00c000100010001518000043e45a284 37924 81540000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 81548000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 37925 aea900000001000000000000036e733104696c7365026e6c0000010001 aea980000001000000030003036e733104696c7365026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a284 37926 64ea000000010000000000000562696e636b026e6c00000f0001 64ea800000010000000200020562696e636b026e6c00000f0001c00c0002000100015180000b036e73310470696e65c012c00c00020001000151800006036e7332c02ac02600010001000151800004d59c0201c03d00010001000151800004c3c1a303 37927 394f00000001000000000000037777770f6a616d696e2d6c6579656e62757267026e6c0000010001 394f80000001000000020002037777770f6a616d696e2d6c6579656e62757267026e6c0000010001c0100002000100015180000c026e7306787334616c6cc020c01000020001000151800006036e7332c037c03400010001000151800004c26d0642c04c00010001000151800004c26d0963 37928 249e00000001000000000000037777770a616c626174726f733231026e6c0000010001 249e80000001000000030002037777770a616c626174726f733231026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 37929 35c000000001000000000000026664026e6c00000f0001 35c080000001000000020000026664026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c029 37930 7ee00000000100000000000005646e732d31056c61646f74026e6c0000010001 7ee08000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37931 ecc00000000100000000000005646e732d32056c61646f74026e6c0000010001 ecc08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 37932 499200000001000000000000036e733107737572666e6574026e6c0000010001 499280000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 37933 ee2300000001000000000000037777771a73696d706c79616d7374657264616d2d61706172746d656e7473026e6c0000010001 ee2380000001000000030002037777771a73696d706c79616d7374657264616d2d61706172746d656e7473026e6c0000010001c0100002000100015180000d036e733106776964657873c02bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c043c03f00010001000151800004d4ccc0fcc074000100010001518000043efa0703 37934 b10300000001000000000000036e733108642d736572766572026e6c0000010001 b10380000001000000020002036e733108642d736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02d0001000100015180000451045c14c03e0001000100015180000451046032 37935 afaf00000001000000000000034e533103415454024e4c0000010001 afaf80000001000000020002034e533103415454024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 37936 d87300000001000000000000034e533103415454024e4c0000260001 d87380000001000000020002034e533103415454024e4c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 37937 b64600000001000000000000037777770d64616e6e796465636163747573026e6c0000010001 b64680000001000000020000037777770d64616e6e796465636163747573026e6c0000010001c0100002000100015180001905646e7330310d636f6d70726173657276657273036e657400c0100002000100015180000805646e733032c038 37938 3f7600000001000000000000034e533203415454024e4c0000010001 3f7680000001000000020002034e533203415454024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 37939 1fbb00000001000000000000034e533203415454024e4c0000260001 1fbb80000001000000020002034e533203415454024e4c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 37940 da9a0000000100000000000003777777066a616e766973026e6c0000010001 da9a8000000100000002000203777777066a616e766973026e6c0000010001c0100002000100015180000b026e73056c65766978c017c01000020001000151800006036e7332c02ec02b00010001000151800004d590ed07c042000100010001518000043e3aa7da 37941 03e000000001000000000000036e73340767617574656e67026e6c0000010001 03e080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37942 3bea00000001000000000000036e73340767617574656e67026e6c0000010001 3bea80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37943 49d20000000100000000000003777777106469676974616c65706c6161746a6573026e6c0000010001 49d28000000100000002000003777777106469676974616c65706c6161746a6573026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c039 37944 467c00000001000000000000046d61696c046e387738026e6c0000010001 467c80000001000000020002046d61696c046e387738026e6c0000010001c0110002000100015180000d03706e7306636f6d6c6f67c016c0110002000100015180000603736e73c02ec02a00010001000151800004d5a0c803c04300010001000151800004d5a0c804 37945 694f00000001000000000000046d61696c046e387738026e6c0000010001 694f80000001000000020002046d61696c046e387738026e6c0000010001c0110002000100015180000d03706e7306636f6d6c6f67c016c0110002000100015180000603736e73c02ec02a00010001000151800004d5a0c803c04300010001000151800004d5a0c804 37946 5e870000000100000000000003626c3102626c06787334616c6c026e6c0000010001 5e878000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 37947 fcc5000000010000000000000e36322d3137372d3232352d32353007626265796f6e64026e6c0000010001 fcc5800000010000000200020e36322d3137372d3232352d32353007626265796f6e64026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc037000100010001518000043eb1900bc049000100010001518000043eb19002 37948 56890000000100000000000007722d652d612d64026e6c0000ff0001 56898000000100000002000207722d652d612d64026e6c0000ff0001c00c0002000100015180001204646e73310a6e65746d617374657273c014c00c0002000100015180000704646e7332c02dc0280001000100015180000451044203c04600010001000151800004510442c9 37949 e7370000000100000000000003777777076875656e646572026e6c0000010001 e7378000000100000002000003777777076875656e646572026e6c0000010001c0100002000100015180000f036e73310561676e2d65036e657400c01000020001000151800006036e7332c030 37950 2cdd000000010000000000000377777710686f74656c686161726c656d7a756964026e6c0000010001 2cdd800000010000000300030377777710686f74656c686161726c656d7a756964026e6c0000010001c0100002000100015180000e076e73617574683103626974c021c0100002000100015180000a076e736175746832c03dc0100002000100015180000a076e736175746833c03dc03500010001000151800004d5880c33c04f00010001000151800004d5880c3bc06500010001000151800004d4ccc00b 37951 c9ee00000001000000000000036e73330767617574656e67026e6c0000010001 c9ee80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37952 c9ef00000001000000000000036e73340767617574656e67026e6c0000010001 c9ef80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 37953 308000000001000000000000037777771064656d616e6d616b656c61617264696a026e6c0000010001 308080000001000000030003037777771064656d616e6d616b656c61617264696a026e6c0000010001c01000020001000151800015036e73310e6469726563747365727669636573c021c01000020001000151800006036e7332c039c01000020001000151800006036e7333c039c03500010001000151800004d994aa05c05600010001000151800004d994aa06c06800010001000151800004d994aa07 37954 155100100001000000000000037777770868616c6c6d61726b026e6c0000010001 155180000001000000020001037777770868616c6c6d61726b026e6c0000010001c0100002000100015180000c036e7331056b706e6873c019c0100002000100015180000d03646e73036b706e03636f6d00c02d0001000100015180000491072163 37955 0d69000000010000000000000965787472616a656374026e6c00000f0001 0d69800000010000000300010965787472616a656374026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc016c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c048c02a000100010001518000043efa0202 37956 aff2000000010000000000000a64656661627269717565026e6c00000f0001 aff2800000010000000300020a64656661627269717565026e6c00000f0001c00c0002000100015180000f036e7331086c65617365776562c017c00c00020001000151800006036e7332c02fc00c00020001000151800012036e7333086c65617365776562036f726700c02b000100010001518000043ed44079c046000100010001518000043ed4407a 37957 510428000001000000010000026e6c0000060001085f6b706173737764045f75647006646162687673026e6c00002100010000025800190000006401d0076461622d68767306646162687673026e6c00 5104a8040000000000000000 37958 b799062c501144620f560000000000000000 b79980010000000000000000 37959 df48000000010000000000000377777707686f6f6b657273026e6c0000010001 df48800000010000000300030377777707686f6f6b657273026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 37960 000000007002400003530000020405b401010402 000080010000000000000000 37961 000000007002400097ba00000204050201010402 000080010000000000000000 37962 5a59000000010000000000000a6970643530616639316305737065656406706c616e6574026e6c0000010001 5a59800000010000000300030a6970643530616639316305737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 37963 966f00000001000000000000037777770d7468652d6f7574736964657273026e6c0000010001 966f80000001000000030000037777770d7468652d6f7574736964657273026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c03ac0100002000100015180000a076e73686f737433c03a 37964 3c6600000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 3c6680000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 37965 3c6500000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 3c6580000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 37966 b79cddf25010411a2d130000000000000000 37967 b2000000000100000000000006636861726973026e6c00001c0001 b2008000000100000002000006636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 37968 b79cddf25018411a5cde0000008c9fd3000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000 37969 cecf00000001000000000000037777770f6a616d696e2d6c6579656e62757267026e6c0000010001 cecf80000001000000020002037777770f6a616d696e2d6c6579656e62757267026e6c0000010001c0100002000100015180000c026e7306787334616c6cc020c01000020001000151800006036e7332c037c03400010001000151800004c26d0642c04c00010001000151800004c26d0963 37970 bf73000000010000000000000c6e696a686f6661726e68656d026e6c00000f0001 bf73800000010000000200020c6e696a686f6661726e68656d026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 37971 b79cde005011410c2c840000000000000000 37972 0000000070024000a37900000204050201010402 000080010000000000000000 37973 ae7328000001000000010000026e6c0000060001055f6c646170045f7463702438373137653435622d376639392d343437642d383332302d39393962306537316565666507646f6d61696e73065f6d736463730970726b766477696c64026e6c000021000100000258001f0000006401850a77326b736572766572310970726b766477696c64026e6c00 ae73a8040000000000000000 37974 a01100000001000000000000037777770464656e6f026e6c0000010001 a01180000001000000030002037777770464656e6f026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 37975 280a00000001000000000000037777770468696669026e6c0000010001 280a80000001000000020002037777770468696669026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c015c0100002000100015180001004646e733208636f6e6365707473c015c02900010001000151800004d5c51c03c04600010001000151800004d5c51e1c 37976 0a24000000010000000000000377777710677261746973706f726e6f66696c6d73026e6c0000010001 0a24800000010000000200020377777710677261746973706f726e6f66696c6d73026e6c0000010001c0100002000100015180000e036e7331076970746f776572c021c01000020001000151800006036e7332c039c035000100010001518000043ecc4065c04f000100010001518000043ecc4066 37977 a05200000001000000000000037777770962656472696a76656e036c6178026e6c0000010001 a05280000001000000020000037777770962656472696a76656e036c6178026e6c0000010001c01a00020001000151800014036e73310a646f6c7068696e2d6973036e657400c01a00020001000151800006036e7332c036 37978 000000007002faf0aab600000204055001010402 000080010000000000000000 37979 b79cde015010410c2c830000000000000000 37980 f43e00000001000000000000037777770a72656e7463656e746572026e6c0000010001 f43e80000001000000020000037777770a72656e7463656e746572026e6c0000010001c010000200010001518000130373303109696e6974776f726b7303636f6d00c0100002000100015180000603733032c033 37981 b79d77645010411a9f5f0000000000000000 b79df7640000000000000000 37982 b79e06435010ff0015150000000000000000 b79e80010000000000000000 37983 b79d77645018411a70710000008cff8d000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000 b79df7640000000000000000 37984 b79e06435018ff005db30000009294e1000000010001000000000f313531313832383438383231302d330000f900010f313531313832383438383231302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b000c403c518c0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 b79e80010000000000000000 37985 b79e06515011fef214800000000000000000 b79e80010000000000000000 37986 000000007002faf050e100000204055001010402 000080010000000000000000 37987 b79d77725011410c9ed00000000000000000 b79df7740000000000000000 37988 be3200000001000000000000026e73087375706572776562026e6c0000010001 be3280000001000000020002026e73087375706572776562026e6c0000010001c00f00020001000151800014036e73310d616c74656e61686f7374696e67c018c00f00020001000151800006036e7332c00fc02c000100010001518000043e15f001c04c000100010001518000043e15f00e 37989 b79e06525010fef2147f0000000000000000 b79e80010000000000000000 37990 00000000700240009ac800000204050201010402 000080010000000000000000 37991 b79ebf905010ff0001f20000000000000000 37992 3c6d00000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 3c6d80000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 37993 3c6e00000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 3c6e80000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 37994 b79ebf905018ff008473000000925bff000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b000c403c518c0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 37995 70b80000000100000000000003706f700b61677476617374676f6564026e6c0000010001 70b88000000100000002000003706f700b61677476617374676f6564026e6c0000010001c0100002000100015180000c026e7306766576696461c01cc01000020001000151800006036e7332c033 37996 f33700000001000000000000037777770a67656f63616368696e67026e6c0000010001 f33780000001000000020002037777770a67656f63616368696e67026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01bc01000020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 37997 b79ebf9e5011fef2015d0000000000000000 37998 c4a100000001000000000000046d61696c046f687261026e6c0000010001 c4a180000001000000020000046d61696c046f687261026e6c0000010001c0110002000100015180000d036e7331036b706e036e657400c01100020001000151800006036e7332c02e 37999 e9c300000001000000000000036e73320f444f4d41494e2d5245474953545259024e4c00001c0001 e9c380000001000000030002036e73320f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 38000 ff6400000001000000000000026e730f444f4d41494e2d5245474953545259024e4c00001c0001 ff6480000001000000030002026e730f444f4d41494e2d5245474953545259024e4c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 38001 ff9400000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 ff9480000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 38002 32eb00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 32eb80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 38003 ef53000000010000000000000472747765026e6c00000f0001 ef53840300010000000100000472747765026e6c00000f0001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 38004 000000007002faf0b1da00000204055001010402 000080010000000000000000 38005 b79d77735010410c9ecf0000000000000000 b79df7740000000000000000 38006 b79fb44e5010411a59c20000000000000000 38007 b79ebf9f5010fef2015c0000000000000000 38008 3ca500000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 3ca580000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 38009 3ca600000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 3ca680000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 38010 b7a08dfc5010ff00947d0000000000000000 38011 b79fb44e5018411a6a970000008cbfca000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000 38012 14f928000001000000010000026e6c0000060001035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f736974657308736c6f7473706563026e6c000021000100000258001c000000640cc408736c6f747370656308736c6f7473706563026e6c00 14f9a8040000000000000000 38013 b7a08dfc5018ff004fe100000092231d000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b000c403c518c0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 38014 b56500100001000000000001026e73096379626572636f6d6d026e6c00000100010000290800000000000000 b56580000001000000030004026e73096379626572636f6d6d026e6c0000010001c00f00020001000151800017036e733110736361726c65742d696e7465726e6574c019c00f00020001000151800006036e7332c031c00f00020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e9530000291000000000000000 38015 8e0300100001000000000001036e7332096379626572636f6d6d026e6c00000100010000290800000000000000 8e0380000001000000030004036e7332096379626572636f6d6d026e6c0000010001c01000020001000151800017036e733110736361726c65742d696e7465726e6574c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ccc302c05100010001000151800004d5ccc303c06300010001000151800004c277e9530000291000000000000000 38016 0000000070024000bed00000020405b401010402 000080010000000000000000 38017 b7a08e0a5011fef293e80000000000000000 38018 b79fb45c5011410c59330000000000000000 38019 588500000001000000000000037777770d70726f6566646965727672696a026e6c0000010001 588580000001000000030001037777770d70726f6566646965727672696a026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ec01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c050c032000100010001518000043efa0202 38020 b7a14a0750104470e56b0000000000000000 b7a1ca040000000000000000 38021 5b4900000001000000000000086261726d61746f6e026e6c0000010001 5b4980000001000000020002086261726d61746f6e026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 38022 b7a08e0b5010fef293e70000000000000000 38023 829b00000001000000000000036e733206766576696461026e6c0000010001 829b80000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 38024 6ca500000001000000000000026e7306766576696461026e6c0000010001 6ca580000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 38025 b7a14a0750184470b1d600000090026f000000010001000000000f313230323539303834323839382d330000f900010f313230323539303834323839382d330000f900ff00000000005403677373096d6963726f736f667403636f6d00403b0439403c55b90003000000314e544c4d535350000100000097b200c009000900280000000800080020000000534c4f5453504543534c4f5453504543300000 b7a1ca040000000000000000 38026 e11800000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 e11880000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 38027 b7a14a1550114462e4d80000000000000000 b7a1ca140000000000000000 38028 00000000700240002ebf0000020405b401010402 000080010000000000000000 38029 b79fb45d5010410c59320000000000000000 38030 5ad700000001000000000000056c6f74746f026e6c00000f0001 5ad780000001000000020002056c6f74746f026e6c00000f0001c00c0002000100015180000b036e733104696e666fc012c00c00020001000151800006036e7332c02ac02600010001000151800004504fc020c03d00010001000151800004504fc021 38031 b7a14a1650104462e4d70000000000000000 b7a1ca140000000000000000 38032 c4cb00000001000000000000056b6f6f696a026e6c00000f0001 c4cb80000001000000020002056b6f6f696a026e6c00000f0001c00c0002000100015180000e026e730866656b61686f7374c012c00c00020001000151800006036e7332c029c02600010001000151800004d5ef9f24c04000010001000151800004c3405369 38033 b7a1da0550104470c55b0000000000000000 38034 02b600000001000000000000037777770a73746f7265706f696e74026e6c0000010001 02b680000001000000020000037777770a73746f7265706f696e74026e6c0000010001c0100002000100015180000f036e7331056d79736d74036e657400c01000020001000151800006036e7332c033 38035 b7a1da0550184470ef6c00000090a5c9000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403b0439403c55b90003000000314e544c4d535350000100000097b200c009000900280000000800080020000000534c4f5453504543534c4f5453504543300000 38036 651100000001000000000000077461746a616e6103666f6c026e6c0000010001 651180000001000000020000077461746a616e6103666f6c026e6c0000010001c01400020001000151800015096d6f6e64726961616e0874656c6562797465c018c0140002000100015180000a077665726d656572c036 38037 9a85000000010000000000000e7269636172646f2d6f6e6c696a6e026e6c00000f0001 9a85800000010000000200020e7269636172646f2d6f6e6c696a6e026e6c00000f0001c00c00020001000151800010036e733109686f73746e65746276c01bc00c00020001000151800006036e7332c033c02f0001000100015180000451113264c04b00010001000151800004d5c42851 38038 b7a1da1350114462c4c80000000000000000 38039 d27c00000001000000000000026e73096379626572636f6d6d026e6c0000010001 d27c80000001000000030003026e73096379626572636f6d6d026e6c0000010001c00f00020001000151800017036e733110736361726c65742d696e7465726e6574c019c00f00020001000151800006036e7332c031c00f00020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 38040 f4d200000001000000000000036e7332096379626572636f6d6d026e6c0000010001 f4d280000001000000030003036e7332096379626572636f6d6d026e6c0000010001c01000020001000151800017036e733110736361726c65742d696e7465726e6574c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ccc302c05100010001000151800004d5ccc303c06300010001000151800004c277e953 38041 06e900000001000000000000036e733109736974656279746573026e6c0000010001 06e980000001000000030003036e733109736974656279746573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c2a55e5ac03c00010001000151800004c356781cc04e000100010001518000043ec58016 38042 00000000700240009c3d0000020405b401010402 000080010000000000000000 38043 26f100000001000000000000036e733209736974656279746573026e6c0000010001 26f180000001000000030003036e733209736974656279746573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02e00010001000151800004c2a55e5ac00c00010001000151800004c356781cc04e000100010001518000043ec58016 38044 510728000001000000010000026e6c0000060001055f6c646170045f7463701244656661756c742d46697273742d53697465065f736974657306646162687673026e6c0000210001000002580019000000640185076461622d68767306646162687673026e6c00 5107a8040000000000000000 38045 b7a1da1450104462c4c70000000000000000 38046 398800000001000000000000084465537472616174024e4c0000ff0001 398880000001000000020002084465537472616174024e4c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c015c00c00020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 38047 b7a2547350104470b86b0000000000000000 b7a2d4740000000000000000 38048 b7a25473501844705e05000000902a41000000010001000000000f313230323539303834323839382d320000f900010f313230323539303834323839382d320000f900ff00000000005403677373096d6963726f736f667403636f6d00403b0439403c55b90003000000314e544c4d535350000100000097b200c009000900280000000800080020000000534c4f5453504543534c4f5453504543300000 b7a2d4740000000000000000 38049 1ca00000000100000000000003776170077369656d656e73026e6c0000010001 1ca08000000100000002000203776170077369656d656e73026e6c0000010001c010000200010001518000070473676e32c010c010000200010001518000070473676e34c010c02c00010001000151800004c28a8909c03f00010001000151800004c28a890b 38050 00000000700240006c7000000204050201010402 000080010000000000000000 38051 b83e000000010000000000000366686e026e6c00000f0001 b83e800000010000000200020366686e026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c010c00c00020001000151800006036e7332c027c02400010001000151800004d4cb0e42c03f00010001000151800004d4cb1221 38052 b7a2548150114462b7d80000000000000000 b7a2d4840000000000000000 38053 07db00000001000000000000086164616d776573740b7369676e2d612d72616d61026e6c0000010001 07db80000001000000020002086164616d776573740b7369676e2d612d72616d61026e6c0000010001c01500020001000151800010036e7331096176616e742d696e74c021c01500020001000151800006036e7332c039c03500010001000151800004d5de1d07c05100010001000151800004d5de1807 38054 b7a2548250104462b7d70000000000000000 b7a2d4840000000000000000 38055 b7a310eb5010411acec90000000000000000 b7a390e40000000000000000 38056 b7a310eb5018411a16fa0000008c876e000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000 b7a390e40000000000000000 38057 2fb4000000010000000000000734657665727931026e6c00000f0001 2fb4800000010000000200010734657665727931026e6c00000f0001c00c00020001000151800009026e730365646ec014c00c00020001000151800010036e733109756e69736f75726365c014c028000100010001518000043e3a51e4 38058 b7a310f95011410cce3a0000000000000000 b7a390f40000000000000000 38059 000000007002400033b900000204050201010402 000080010000000000000000 38060 938600000001000000000000026e7307656d61696c636f026e6c0000010001 938680000001000000020002026e7307656d61696c636f026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e733206787334616c6cc017c00c00010001000151800004c26dcee2c03900010001000151800004c26d0963 38061 550900000001000000000000047365633103646e73067073696e6574026e6c0000010001 550980000001000000030003047365633103646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac056000100010001518000049a0ff9ae 38062 a10b00000001000000000000047365633203646e73067073696e6574026e6c0000010001 a10b80000001000000030003047365633203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac056000100010001518000049a0ff9ae 38063 449400000001000000000000026e73076e656473746174026e6c00001c0001 449480000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38064 c59d00000001000000000000026e73076e656473746174026e6c0000260001 c59d80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38065 d3d200000001000000000000036e7332076e656473746174026e6c0000010001 d3d280000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38066 f4c000000001000000000000036e7332076e656473746174026e6c0000260001 f4c080000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38067 10d900000001000000000000036e7333076e656473746174026e6c00001c0001 10d980000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38068 eade00000001000000000000036e7333076e656473746174026e6c0000260001 eade80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38069 92df00000001000000000000036e7334076e656473746174026e6c0000010001 92df80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38070 85ac00000001000000000000036e7334076e656473746174026e6c00001c0001 85ac80000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38071 d5d500000001000000000000036e7334076e656473746174026e6c0000260001 d5d580000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38072 c63c00000001000000000000026e73076e656473746174026e6c00001c0001 c63c80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38073 331600000001000000000000026e73076e656473746174026e6c00001c0001 331680000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38074 2e2f00000001000000000000026e73076e656473746174026e6c0000260001 2e2f80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38075 810900000001000000000000036e7332076e656473746174026e6c0000010001 810980000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38076 460f00000001000000000000036e7332076e656473746174026e6c00001c0001 460f80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38077 8fbf00000001000000000000036e7332076e656473746174026e6c0000260001 8fbf80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38078 10e500000001000000000000036e7333076e656473746174026e6c00001c0001 10e580000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38079 39bc00000001000000000000036e7333076e656473746174026e6c0000260001 39bc80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38080 d39400000001000000000000036e7334076e656473746174026e6c0000010001 d39480000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38081 3cd200000001000000000000036e7334076e656473746174026e6c00001c0001 3cd280000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38082 73e100000001000000000000036e7334076e656473746174026e6c0000260001 73e180000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38083 946900000001000000000000026e73076e656473746174026e6c0000260001 946980000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38084 a6e800000001000000000001026e7308767575727765726b026e6c00000100010000291000000000000000 a6e880000001000000030002026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa02020000291000000000000000 38085 3e4100000001000000000001026e7308767575727765726b026e6c00001c00010000291000000000000000 3e4180000001000000030002026e7308767575727765726b026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa02020000291000000000000000 38086 8f8a00000001000000000000036e7332076e656473746174026e6c0000010001 8f8a80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38087 b7a310fa5010410cce390000000000000000 b7a390f40000000000000000 38088 b0c700000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 b0c780000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38089 ece700000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 ece780000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38090 b7a40ad35010411a9c290000000000000000 b7a48ad40000000000000000 38091 d1d000000001000000000000036e7332076e656473746174026e6c00001c0001 d1d080000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38092 b7a40ad35018411a2d4e0000008c3f7b000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b010f403c528f00030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000 b7a48ad40000000000000000 38093 2cb400000001000000000000036e7332076e656473746174026e6c0000260001 2cb480000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38094 1ddf000000010000000000000a722d76616e2d65696a6b0564656d6f6e026e6c0000010001 1ddf800000010000000300020a722d76616e2d65696a6b0564656d6f6e026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c0170002000100015180000f036e73320564656d6f6e036e657400c03100010001000151800004c29f4906c04300010001000151800004c29fb004 38095 4ac100000001000000000000036e7333076e656473746174026e6c00001c0001 4ac180000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38096 66c300000001000000000000037777770662656c656566026e6c0000010001 66c380000001000000020002037777770662656c656566026e6c0000010001c0100002000100015180000a036e733103696166c017c01000020001000151800006036e7332c02fc02b000100010001518000045059e040c041000100010001518000045059ee03 38097 b7a40ae15011410c9b9a0000000000000000 b7a48ae40000000000000000 38098 2e6e00000001000000000000037777770a64736c65787072657373026e6c0000010001 2e6e80000001000000020002037777770a64736c65787072657373026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01bc01000020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 38099 875400000001000000000000037777770b7275696c65656e6c696e6b026e6c0000010001 875480000001000000020000037777770b7275696c65656e6c696e6b026e6c0000010001c01000020001000151800014036e73310d666c65746873686f7374696e67c01cc01000020001000151800006036e7332c034 38100 2d4200000001000000000000036e7333076e656473746174026e6c0000260001 2d4280000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38101 0000000070024000654c00000204050201010402 000080010000000000000000 38102 ccab00000001000000000000036e7334076e656473746174026e6c0000010001 ccab80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38103 535400000001000000000000036e7334076e656473746174026e6c00001c0001 535480000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38104 8ae200000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 8ae280000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38105 c8f600000001000000000000044449444f03414d4303555641026e6c0000010001 c8f680000001000000020002044449444f03414d4303555641026e6c0000010001c0150002000100015180000e086261726c61657573026963c015c01500020001000151800006036e7331c015c02d0001000100015180000491124432c0470001000100015180000491122710 38106 21fb00000001000000000000084241524c4145555302494303555641026e6c0000010001 21fb80000001000000020002084241524c4145555302494303555641026e6c0000010001c01800020001000151800002c00cc01800020001000151800006036e7331c018c00c0001000100015180000491124432c03e0001000100015180000491122710 38107 706700000001000000000000044649444f03414d4303555641026e6c0000010001 706780000001000000020002044649444f03414d4303555641026e6c0000010001c0150002000100015180000e086261726c61657573026963c015c01500020001000151800006036e7331c015c02d0001000100015180000491124432c0470001000100015180000491122710 38108 d3e100000001000000000000036e7334076e656473746174026e6c0000260001 d3e180000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38109 492300000001000000000000037777771063726561746976652d64657369676e73026e6c0000010001 492380000001000000030000037777771063726561746976652d64657369676e73026e6c0000010001c0100002000100015180000f036e73310570616e7361036e657400c01000020001000151800006036e7332c039c01000020001000151800006036e7333c039 38110 6f5d0010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 6f5d8000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 38111 28070000000100000000000003777777087269747368756973026e6c0000010001 28078000000100000002000203777777087269747368756973026e6c0000010001c0100002000100015180000a036e7331036e7873c019c01000020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 38112 f36400000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 f36480000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38113 b7a40ae25010410c9b990000000000000000 b7a48ae40000000000000000 38114 b03f00100001000000000001067372763031320b66726565686f7374696e67026e6c00000100010000290800000080000000 b03f80000001000000020001067372763031320b66726565686f7374696e67026e6c0000010001c0130002000100015180001105646e732d33056c61646f7403636f6d00c0130002000100015180000805646e732d34c0390000291000000000000000 38115 b7a4fbf25010411adc9c0000000000000000 38116 5ab50000000100000000000003777777086c65747373746174026e6c0000010001 5ab58000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 38117 b7a4fbf25018411aab3c0000008c0000000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b0110403c529000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004441422d4856534441424856530000 38118 cc210000000100000000000003777777157075726d6572656e6473652d61706f7468656b656e026e6c0000010001 cc218000000100000002000203777777157075726d6572656e6473652d61706f7468656b656e026e6c0000010001c01000020001000151800009036e7331026973c026c01000020001000151800006036e7332c03ec03a00010001000151800004d5852102c04f00010001000151800004d5c41503 38119 b7a4fc005011410cdc0d0000000000000000 38120 60df00000001000000000000037777770c646174756d7072696b6b6572026e6c0000010001 60df80000001000000020000037777770c646174756d7072696b6b6572026e6c0000010001c0100002000100015180000f036e7331087765622d62656174c01dc01000020001000151800006036e7332c035 38121 1dd400000001000000000000046d61696c076e65746578706f026e6c0000010001 1dd480000001000000020002046d61696c076e65746578706f026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02d000100010001518000043efa0ac2c03e000100010001518000043efa0a82 38122 b7a4fc015010410cdc0c0000000000000000 38123 0f650000000100000000000003777777103132336b696e6465726b6c6564696e67026e6c0000010001 0f658000000100000002000003777777103132336b696e6465726b6c6564696e67026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03b 38124 b799062d501044620f550000000000000000 b79980010000000000000000 38125 b79c1b875010447058730000000000000000 b79c9b840000000000000000 38126 8d8400000001000000000000067372763031320b66726565686f7374696e67026e6c0000010001 8d8480000001000000020000067372763031320b66726565686f7374696e67026e6c0000010001c0130002000100015180001105646e732d33056c61646f7403636f6d00c0130002000100015180000805646e732d34c039 38127 b79c1b87501844701a89000000966dd4000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afe23403c4fa30003000000374e544c4d535350000100000097b208e00e000e002900000009000900200000004f4e5a45564144455252495050455244415041524b32390000 b79c9b840000000000000000 38128 a83e000000010000000000000770726f7465637408746f7073636f7265026e6c0000010001 a83e800000010000000200020770726f7465637408746f7073636f7265026e6c0000010001c01400020001000151800011036e73310a686f73746d6173746572c01dc01400020001000151800006036e7332c035c0310001000100015180000452c04516c04e0001000100015180000452c04542 38129 12cd0000000100000000000006636861726973026e6c00000f0001 12cd8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 38130 9f6f000000010000000000000470696e670461736d6c026e6c0000010001 9f6f800000010000000300010470696e670461736d6c026e6c0000010001c01100020001000151800006036e7330c011c0110002000100015180000d026e730461736d6c03636f6d00c01100020001000151800006036e7331c03fc02a00010001000151800004c26979c2 38131 3afd0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 3afd8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38132 ed8b00000001000000000000146d696c6c656e69756d7375706572796163687473026e6c00000f0001 ed8b84030001000000010000146d696c6c656e69756d7375706572796163687473026e6c00000f0001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 38133 57ec00000001000000000000037777770479767261026e6c0000010001 57ec80000001000000020002037777770479767261026e6c0000010001c01000020001000151800009036e7331026969c015c01000020001000151800006036e7332c02dc02900010001000151800004d5ce5983c03e00010001000151800004c3405889 38134 536f0000000100000000000003777777046b696369026e6c0000010001 536f8000000100000002000203777777046b696369026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 38135 8af5000000010000000000000976656e6465786b6262026e6c0000010001 8af5800000010000000300030976656e6465786b6262026e6c0000010001c00c00020001000151800010036e7331096d61726b6772616166c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a00010001000151800004c3f13ceec04600010001000151800004c372eb43c058000100010001518000043e320e8f 38136 e33f00000001000000000000087072696e736a6573056d79776562026e6c00000f0001 e33f80000001000000020000087072696e736a6573056d79776562026e6c00000f0001c015000200010001518000160b6d797765622d61757468300777616e61646f6fc01bc0150002000100015180000e0b6d797765622d6175746831c03b 38137 b253000000010000000000000a68617264657277696a6b026e6c0000010001 b253800000010000000300020a68617264657277696a6b026e6c0000010001c00c0002000100015180000d036e733106776964657873c017c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 38138 eb9100000001000000000000037777770765726974726561026e6c0000010001 eb9180000001000000020002037777770765726974726561026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c018c01000020001000151800006036e7332c030c02c000100010001518000045104580ac04c000100010001518000045104601e 38139 c53300000001000000000000037777770362266f026e6c0000010001 c53384030001000000010000037777770362266f026e6c0000010001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 38140 f1ff000000010000000000000d666163746f74756d6d65646961026e6c00000f0001 f1ff800000010000000200010d666163746f74756d6d65646961026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c01ac04700010001000151800004c2860043 38141 513300000001000000000000036e733103757661026e6c0000010001 513380000001000000020002036e733103757661026e6c0000010001c0100002000100015180000e086261726c61657573026963c010c01000020001000151800002c00cc0280001000100015180000491124432c00c0001000100015180000491122710 38142 77ec0000000100000000000003777777096761797468756d6273026e6c0000010001 77ec8000000100000002000203777777096761797468756d6273026e6c0000010001c0100002000100015180000c04646e73310470696e73c01ac0100002000100015180000704646e7332c033c02e00010001000151800004d9c26101c04600010001000151800004d9c26002 38143 f0e70000000100000000000007616d70686f7261026e6c00000f0001 f0e78000000100000002000207616d70686f7261026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc0280001000100015180000451044b3cc03a0001000100015180000451044b3d 38144 86b90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 86b98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38145 8fbd00000001000000000000036e733207616d70686f7261026e6c0000010001 8fbd80000001000000020002036e733207616d70686f7261026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c0001000100015180000451044b3cc00c0001000100015180000451044b3d 38146 edb500000001000000000000036e733107616d70686f7261026e6c0000010001 edb580000001000000020002036e733107616d70686f7261026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451044b3cc03a0001000100015180000451044b3d 38147 a6e800000001000000000000026e7308767575727765726b026e6c0000010001 a6e880000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 38148 3e4100000001000000000000026e7308767575727765726b026e6c00001c0001 3e4180000001000000030001026e7308767575727765726b026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 38149 cff10000000100000000000006706f7065796503657572026e6c0000010001 cff18000000100000002000206706f7065796503657572026e6c0000010001c0130002000100015180000b086d61696c67617465c013c01300020001000151800002c00cc02b0001000100015180000482730101c00c0001000100015180000482730f02 38150 6e4e00000001000000000000055f6c646170045f746370026463065f6d736463730441303736026e6c0000210001 6e4e84030001000000010000055f6c646170045f746370026463065f6d736463730441303736026e6c0000210001c02600060001000038400036026e730f646f6d61696e2d7265676973747279c0260a686f73746d6173746572c03d0bf1e540000070800000384000278d0000003840 38151 e32000000001000000000000037777770c6b76776d616b656c61617273026e6c0000010001 e32080000001000000020000037777770c6b76776d616b656c61617273026e6c0000010001c0100002000100015180000f026e7306636170696361036e657400c01000020001000151800006036e7332c034 38152 8def00000001000000000000036e7331026969026e6c0000010001 8def80000001000000020002036e7331026969026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ce5983c03500010001000151800004c3405889 38153 261c000000010000000000000561686f6c64027330026e6c0000010001 261c800000010000000200020561686f6c64027330026e6c0000010001c0120002000100015180000d026e73076e656473746174c015c01200020001000151800006036e7333c02cc02900010001000151800004d4482615c04200010001000151800004d5c4021d 38154 7ee200000001000000000000036e7332026969026e6c0000010001 7ee280000001000000020002036e7332026969026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02700010001000151800004d5ce5983c00c00010001000151800004c3405889 38155 2ccb00000001000000000000026e730763616d70696e61026e6c0000010001 2ccb80000001000000020002026e730763616d70696e61026e6c0000010001c00f0002000100015180000e036e733007656173796e6574c017c00f00020001000151800006036e7331c02fc02b00010001000151800004c2a55e01c04500010001000151800004c2a55e05 38156 2f670000000100000000000003612d70026e6c00000f0001 2f678000000100000002000003612d70026e6c00000f0001c00c00020001000151800010036e73310673697465347503636f6d00c00c00020001000151800006036e7332c028 38157 dade000000010000000000000869742d7765726b74026e6c00000f0001 dade840300010000000100000869742d7765726b74026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 38158 f0990000000100000000000004686f6d6506706c616e6574026e6c0000010001 f0998000000100000003000304686f6d6506706c616e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a65 38159 5dfa00000001000000000000037777770c686f7472696e67746f6e6573026e6c0000010001 5dfa80000001000000020000037777770c686f7472696e67746f6e6573026e6c0000010001c0100002000100015180000f036e7331056279303036036e657400c01000020001000151800006036e7332c035 38160 4eb40000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4eb48403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 38161 66e000000001000000000000037777770773746172743738026e6c0000010001 66e080000001000000020000037777770773746172743738026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c030 38162 bdb200000001000000000000037777770a627261696e706f696e74026e6c0000010001 bdb280000001000000020000037777770a627261696e706f696e74026e6c0000010001c010000200010001518000130373303109696e6974776f726b7303636f6d00c0100002000100015180000603733032c033 38163 0fb100000001000000000000037777770c616c74616e61706861726d61026e6c0000010001 0fb180000001000000020001037777770c616c74616e61706861726d61026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c01dc04a00010001000151800004c2860043 38164 d3db0010000100000000000103777777087261626f62616e6b026e6c00000100010000290800000080000000 d3db8000000100000002000203777777087261626f62616e6b026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02d0001000100015180000491484fde0000291000000000000000 38165 c1de0000000100000000000003777777056e6f6b6961026e6c0000010001 c1de8000000100000004000003777777056e6f6b6961026e6c0000010001c0100002000100015180000e026e73056e6f6b696103636f6d00c01000020001000151800006036e7332c02dc0100002000100015180000b046e73646103657874c02dc01000020001000151800007046e73686bc05b 38166 94f00000000100000000000015616c6b6d616172617263686974656374656e626e61026e6c0000010001 94f08403000100000001000015616c6b6d616172617263686974656374656e626e61026e6c0000010001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 38167 5532000000010000000000000649434153533207554e494d414153024e4c0000010001 5532800000010000000300030649434153533207554e494d414153024e4c0000010001c0130002000100015180000906726c30303031c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01bc02f0001000100015180000489780101c00c0001000100015180000489780105c05200010001000151800004c0576a65 38168 e85700000001000000000000046b756232026e6c0000060001 e85784030001000000010000046b756232026e6c0000060001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 38169 1ddd0000000100000000000006787334616c6c026e6c00000f0001 1ddd8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 38170 2fdd0000000100000000000003777777087261626f62616e6b026e6c0000010001 2fdd8000000100000002000103777777087261626f62616e6b026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02d0001000100015180000491484fde 38171 7aec00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 7aec80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38172 7a4f00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 7a4f80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38173 a57800000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 a57880000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38174 0b2d00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 0b2d80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38175 93c500000001000000000000037777770c737570657262656c746f6f6e026e6c0000010001 93c580000001000000020000037777770c737570657262656c746f6f6e026e6c0000010001c01000020001000151800017036e73310d6465696e7465726e65746d616e036e657400c01000020001000151800006036e7332c035 38176 08f1000000010000000000000a6d61696c6261636b7570066e6c74726565026e6c0000010001 08f1800000010000000200020a6d61696c6261636b7570066e6c74726565026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c03200010001000151800004d4b20403c04400010001000151800004d5881e45 38177 02b20000000100000000000006656d61696c73026e6c0000010001 02b28000000100000003000006656d61696c73026e6c0000010001c00c0002000100015180000e036e73300477697368036e657400c00c00020001000151800006036e7331c02bc00c00020001000151800006036e7332c02b 38178 f3950000000100000000000003777777116c656575776172646572636f7572616e74026e6c0000010001 f3958000000100000003000303777777116c656575776172646572636f7572616e74026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c022c01000020001000151800006036e7332c03ac01000020001000151800006036e7333c03ac03600010001000151800004c1ad573dc05300010001000151800004c1ad573ec06500010001000151800004d5880089 38179 4eb60000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4eb68403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 38180 33f000000001000000000000036e73340767617574656e67026e6c0000010001 33f080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38181 03fd00000001000000000000036e73340767617574656e67026e6c0000010001 03fd80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38182 340000000001000000000000036e73340767617574656e67026e6c0000010001 340080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38183 aa8928000001000000010000026e6c0000060001046b756232026e6c00000100010000025800040a0000c8 aa89a8040000000000000000 38184 139a00000001000000000000066469616c6572076d6964686f6c64026e6c0000010001 139a80000001000000020002066469616c6572076d6964686f6c64026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d026e7307636f6f6c636f6dc01bc02f00010001000151800004c1ad3503c04000010001000151800004c1ad3506 38185 42ac00000001000000000000046e766f67026e6c00000f0001 42ac80000001000000020002046e766f67026e6c00000f0001c00c0002000100015180000a036e7331036e7873c011c00c00020001000151800006036e7332c029c02500010001000151800004d973c015c03b00010001000151800004d973c102 38186 4ab200000001000000000000036e733107737572666e6574026e6c0000010001 4ab280000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 38187 58a400000001000000000000037777770a64617465706572736d73026e6c0000010001 58a480000001000000020002037777770a64617465706572736d73026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c01bc01000020001000151800006036e7332c032c02f00010001000151800004d9aa2042c04800010001000151800004d9aa2c06 38188 000000007002400042ef0000020405b401010402 000080010000000000000000 38189 27be0000000100000000000007666f75726d6974026e6c00000f0001 27be8000000100000002000007666f75726d6974026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 38190 b7a68eff50104470248d0000000000000000 38191 b7a68eff501844701c1f0000008614fc000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000004a03677373096d6963726f736f667403636f6d00403b094d403c5acd0003000000274e544c4d535350000100000097b200e0040004002300000003000300200000004b55424b5542320000 38192 b7a68f0d5011446224040000000000000000 38193 0000000070024000b00b0000020405b401010402 000080010000000000000000 38194 1b5f00000001000000000000046d61696c07636f7061726978026e6c0000010001 1b5f80000001000000030000046d61696c07636f7061726978026e6c0000010001c01100020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01100020001000151800006036e7332c031c01100020001000151800006036e7333c031 38195 b7a772d750104470add00000000000000000 b7a7f2d40000000000000000 38196 b7a772d7501844709517000000862648000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403b094d403c5acd0003000000274e544c4d535350000100000097b200e0040004002300000003000300200000004b55424b5542320000 b7a7f2d40000000000000000 38197 bb8c00000001000000000000036e73310a6d756c74696b6162656c026e6c0000010001 bb8c80000001000000030002036e73310a6d756c74696b6162656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 38198 b7a68f0e5010446224030000000000000000 38199 13bd00100001000000000001037777770b726963686172646b726f6c026e6c00000100010000290800000080000000 13bd80000001000000020001037777770b726963686172646b726f6c026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c0340000291000000000000000 38200 6ec600000001000000000000036e73320a6d756c74696b6162656c026e6c0000010001 6ec680000001000000030002036e73320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 38201 465300000001000000000000037777770f6572696b74726f6f73746865696465026e6c0000010001 465380000001000000020000037777770f6572696b74726f6f73746865696465026e6c0000010001c01000020001000151800011036e733107646f6f74616c6c03636f6d00c01000020001000151800006036e7332c038 38202 b79c1b955011446257da0000000000000000 b79c9b940000000000000000 38203 789d00000001000000000000037777770b726963686172646b726f6c026e6c0000010001 789d80000001000000020000037777770b726963686172646b726f6c026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c034 38204 b7a772e550114462ad470000000000000000 b7a7f2e40000000000000000 38205 152000000001000000000000037777770e6d6f746f63726f7373626f736368026e6c0000010001 152080000001000000020000037777770e6d6f746f63726f7373626f736368026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 38206 00000000700240008c7e0000020405b401010402 000080010000000000000000 38207 17db0000000100000000000003777777127368656c6c2d67726f656e657374726f6f6d026e6c0000010001 17db8403000100000001000003777777127368656c6c2d67726f656e657374726f6f6d026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 38208 7cb30000000100000000000003777777156d757a69656b68756973776573746572686176656e026e6c0000010001 7cb38403000100000001000003777777156d757a69656b68756973776573746572686176656e026e6c0000010001c02600060001000038400036026e730f646f6d61696e2d7265676973747279c0260a686f73746d6173746572c03d0bf1e540000070800000384000278d0000003840 38209 f6ee0000000100000000000003777777096a616e2d67726f656e026e6c0000010001 f6ee8000000100000002000003777777096a616e2d67726f656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 38210 b7a772e650104462ad460000000000000000 b7a7f2e40000000000000000 38211 e1ae00000001000000000000077765626d61696c0e6e75636c6561722d6576656e7473026e6c0000010001 e1ae80000001000000030000077765626d61696c0e6e75636c6561722d6576656e7473026e6c0000010001c0140002000100015180000f036e73310570616e7361036e657400c01400020001000151800006036e7332c03bc01400020001000151800006036e7333c03b 38212 458200000001000000000000026e6c0000060001 458284000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 38213 b7a956ee50104470a62a0000000000000000 b7a9d6e40000000000000000 38214 b7a956ee50184470f94200000086ba76000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000004a03677373096d6963726f736f667403636f6d00403b094d403c5acd0003000000274e544c4d535350000100000097b200e0040004002300000003000300200000004b55424b5542320000 b7a9d6e40000000000000000 38215 75be0000000100000000000003777777056b6c696b73026e6c0000010001 75be8000000100000002000003777777056b6c696b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02d 38216 03020000000100000000000003777777156e6575726f6368697275726769652d7a776f6c6c65026e6c0000010001 03028000000100000002000203777777156e6575726f6368697275726769652d7a776f6c6c65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc026c01000020001000151800006036e7332c03dc03a00010001000151800004c26d0642c05200010001000151800004c26d0963 38217 d5d4000000010000000000000976616e2d67616c656e026e6c0000010001 d5d4800000010000000200020976616e2d67616c656e026e6c0000010001c00c0002000100015180000d03706e7306636f6d6c6f67c016c00c0002000100015180000603736e73c02ec02a00010001000151800004d5a0c803c04300010001000151800004d5a0c804 38218 b7a956fc50114462a5a10000000000000000 b7a9d6f40000000000000000 38219 2a6400000001000000000000037777770676616e2d6173026e6c0000010001 2a6480000001000000020000037777770676616e2d6173026e6c0000010001c01000020001000151800017026e7309726f7474657264616d046c756e61036e657400c0100002000100015180000f026e7309686f6f6664646f7270c038 38220 9a12000000010000000000000377777709646174616261646765026e6c0000010001 9a12800000010000000200020377777709646174616261646765026e6c0000010001c0100002000100015180000c026e73067574722d6978c01ac01000020001000151800006036e7332c031c02e0001000100015180000451113206c04600010001000151800004d5c42806 38221 5f5200000001000000000000036e7332067574722d6978026e6c00001c0001 5f5280000001000000020002036e7332067574722d6978026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b0001000100015180000451113206c00c00010001000151800004d5c42806 38222 545d00000001000000000000026e73067574722d6978026e6c00001c0001 545d80000001000000020002026e73067574722d6978026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c0001000100015180000451113206c03800010001000151800004d5c42806 38223 a84b000000010000000000000d62616c6c6173742d6e6564616d026e6c00000f0001 a84b800000010000000200010d62616c6c6173742d6e6564616d026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800013036e7332026e6c0669676e697465036e657400c02e000100010001518000043eadcea1 38224 b7a956fd50104462a5a00000000000000000 b7a9d6f40000000000000000 38225 eb6e000000010000000000000468797965026e6c00000f0001 eb6e840300010000000100000468797965026e6c00000f0001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 38226 76bf00000001000000000000036e733503777873026e6c0000010001 76bf80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 38227 f7db00000001000000000000087175697261737365026e6c0000ff0001 f7db80000001000000020000087175697261737365026e6c0000ff0001c00c00020001000151800012036e73320b73656c65637467726f7570c015c00c0002000100015180000b026e73026e6c036e657400 38228 0a65000000010000000000000377777709706f726e7374617274026e6c0000010001 0a65800000010000000300020377777709706f726e7374617274026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01ac01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c032c02e000100010001518000045054e055c06700010001000151800004d4ccc655 38229 78b500000001000000000000036e73310a74727565736572766572026e6c0000010001 78b580000001000000030003036e73310a74727565736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef8003c03d00010001000151800004d5efb004c04f00010001000151800004d5ef8005 38230 26a800000001000000000000036e73320a74727565736572766572026e6c0000010001 26a880000001000000030003036e73320a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02f00010001000151800004d5ef8003c00c00010001000151800004d5efb004c04f00010001000151800004d5ef8005 38231 135400000001000000000000036e73330a74727565736572766572026e6c0000010001 135480000001000000030003036e73330a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f00010001000151800004d5ef8003c04100010001000151800004d5efb004c00c00010001000151800004d5ef8005 38232 b29e0000000100000000000003777777126f70656e626161726d696e69737465726965026e6c0000010001 b29e8000000100000002000203777777126f70656e626161726d696e69737465726965026e6c0000010001c0100002000100015180000a026e730467726970c023c01000020001000151800006036e7333c03ac03700010001000151800004d4eeb043c04d00010001000151800004d994a262 38233 56cd00000001000000000000037777770e63656e7472616c68656174696e67026e6c0000010001 56cd80000001000000020002037777770e63656e7472616c68656174696e67026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01fc01000020001000151800006036e7332c037c03300010001000151800004c29f4906c04b00010001000151800004c29fb004 38234 4ba600000001000000000000046d61696c0c726f6e63616c6c692d626f7a026e6c026e6c0000010001 4ba684030001000000010000046d61696c0c726f6e63616c6c692d626f7a026e6c026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 38235 59390000000100000000000003777777156e6575726f6368697275726769652d7a776f6c6c65026e6c0000010001 59398000000100000002000203777777156e6575726f6368697275726769652d7a776f6c6c65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc026c01000020001000151800006036e7332c03dc03a00010001000151800004c26d0642c05200010001000151800004c26d0963 38236 79f80000000100000000000003777777046163616c026e6c0000010001 79f88000000100000002000003777777046163616c026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c02d 38237 23e3001000010000000000000377777703736572026e6c0000010001 23e3800000010000000300010377777703736572026e6c0000010001c01000020001000151800013026e730a6261636b73747265616d03636f6d00c01000020001000151800005027873c02bc0100002000100015180000f026e7309747269706c652d6974c014c05800010001000151800004d584b002 38238 0d4400000001000000000000026e73056269626974026e6c0000010001 0d4480000001000000030002026e73056269626974026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00f00020001000151800006036e7332c00fc00c00010001000151800004d4ce201fc04e00010001000151800004d4ce2020 38239 86a200000001000000000000026e73056269626974026e6c0000260001 86a280000001000000030002026e73056269626974026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00f00020001000151800006036e7332c00fc00c00010001000151800004d4ce201fc04e00010001000151800004d4ce2020 38240 61a600000001000000000000036e7332056269626974026e6c0000010001 61a680000001000000030002036e7332056269626974026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800002c00cc02a00010001000151800004d4ce201fc00c00010001000151800004d4ce2020 38241 586700000001000000000000036e7332056269626974026e6c0000260001 586780000001000000030002036e7332056269626974026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800002c00cc02a00010001000151800004d4ce201fc00c00010001000151800004d4ce2020 38242 07c200000001000000000000036e733503777873026e6c0000010001 07c280000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 38243 235900000001000000000000036e7333093475686f7374696e67026e6c0000010001 235980000001000000020000036e7333093475686f7374696e67026e6c0000010001c0100002000100015180001104646e73310634752d646e73036e657400c0100002000100015180000704646e7332c033 38244 aeed00000001000000000000036e7333093475686f7374696e67026e6c0000260001 aeed80000001000000020000036e7333093475686f7374696e67026e6c0000260001c0100002000100015180001104646e73310634752d646e73036e657400c0100002000100015180000704646e7332c033 38245 388600000001000000000000036e7334093475686f7374696e67026e6c0000010001 388680000001000000020000036e7334093475686f7374696e67026e6c0000010001c0100002000100015180001104646e73310634752d646e73036e657400c0100002000100015180000704646e7332c033 38246 1c4300000001000000000000036e7334093475686f7374696e67026e6c0000260001 1c4380000001000000020000036e7334093475686f7374696e67026e6c0000260001c0100002000100015180001104646e73310634752d646e73036e657400c0100002000100015180000704646e7332c033 38247 b2e0000000010000000000000663616e646561026e6c0000010001 b2e0800000010000000300030663616e646561026e6c0000010001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 38248 9a7600000001000000000000066261616e7678056d6172696e026e6c0000010001 9a7680000001000000020002066261616e7678056d6172696e026e6c0000010001c0130002000100015180000a0762617374696f6ec013c0130002000100015180000e036e733107737572666e6574c019c02d00010001000151800004930c8001c04300010001000151800004c0576a65 38249 f63a00000001000000000000076b6e6f77617265026e6c00000f0001 f63a80000001000000020002076b6e6f77617265026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc02800010001000151800004c3402003c03900010001000151800004c340202b 38250 099328000001000000010000026e6c0000060001055f6c646170045f7463701244656661756c742d46697273742d53697465065f7369746573026763065f6d73646373077369747461726408637265646f6f7273026e6c0000210001000002580023000000640cc40773657276657231077369747461726408637265646f6f7273026e6c00 0993a8040000000000000000 38251 743e001000010000000000000967616c616861646276026e6c0000010001 743e800000010000000200010967616c616861646276026e6c0000010001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c016c04300010001000151800004c2860043 38252 0000000070024000e5980000020405b401010402 000080010000000000000000 38253 18c10000000100000000000003777777026465066369726b656c026e6c0000010001 18c18000000100000002000203777777026465066369726b656c026e6c0000010001c0130002000100015180000f036e733108696e74726f776562c01ac01300020001000151800006036e7332c032c02e0001000100015180000450416028c04900010001000151800004c356780c 38254 b7aa19b2501044703c800000000000000000 b7aa99b40000000000000000 38255 b7aa19b250184470b1f40000008ddd28000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd15403c4e9500030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000 b7aa99b40000000000000000 38256 ac800000000100000000000003777777096765696c65706f6573026e6c0000010001 ac808000000100000002000003777777096765696c65706f6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 38257 b7aa19c0501144623bf00000000000000000 b7aa99c40000000000000000 38258 2f0800000001000000000000056472756d74026e6c0000010001 2f0880000001000000020000056472756d74026e6c0000010001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02a 38259 699b00000001000000000000046e733032066368656c6c6f026e6c0000010001 699b80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 38260 000000007002400058f40000020405b401010402 000080010000000000000000 38261 400800000001000000000000037777770b7a69656b656e666f6e6473026e6c0000010001 400880000001000000020000037777770b7a69656b656e666f6e6473026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c036 38262 c10400000001000000000000036e733203757063026e6c0000010001 c10480000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 38263 39f500000001000000000000037777770e76726f7577656e65726f7469656b026e6c0000010001 39f580000001000000020002037777770e76726f7577656e65726f7469656b026e6c0000010001c0100002000100015180000e026e7308642d736572766572c01fc01000020001000151800006036e7332c036c0330001000100015180000451045c14c04d0001000100015180000451046032 38264 b7aa19c1501044623bef0000000000000000 b7aa99c40000000000000000 38265 b7ab053050104470c45c0000000000000000 b7ab80010000000000000000 38266 b7ab053050184470d0130000008d47e7000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd15403c4e9500030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000 b7ab80010000000000000000 38267 2c1300000001000000000000037777770e76726f7577656e65726f7469656b026e6c0000010001 2c1380000001000000020002037777770e76726f7577656e65726f7469656b026e6c0000010001c0100002000100015180000e026e7308642d736572766572c01fc01000020001000151800006036e7332c036c0330001000100015180000451045c14c04d0001000100015180000451046032 38268 64d800000001000000000000037777770a63617264777269746572026e6c0000010001 64d880000001000000020000037777770a63617264777269746572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 38269 3180000000010000000000000777616e61646f6f026e6c00000f0001 3180800000010000000200010777616e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 38270 53b800100001000000000001036e733503777873026e6c00000100010000290800000000000000 53b880000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 38271 9e55000000010000000000000377777709766c6f6564676f6c66026e6c0000010001 9e55800000010000000200000377777709766c6f6564676f6c66026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 38272 b7ab053e50114462c3cc0000000000000000 b7ab80010000000000000000 38273 000000007002400017040000020405b401010402 000080010000000000000000 38274 4cf2000000010000000000000377777703637769026e6c0000010001 4cf2800000010000000200020377777703637769026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02800010001000151800004c010bf08c03a00010001000151800004c010bf23 38275 b7ab053f50104462c3cb0000000000000000 b7ab80010000000000000000 38276 b7ab93d850104470f3c30000000000000000 38277 176600000001000000000000046d61696c067370647a686e026e6c0000010001 176680000001000000020000046d61696c067370647a686e026e6c0000010001c01100020001000151800012036e73310878656e6f73697465036e657400c01100020001000151800006036e7332c030 38278 c3060000000100000000000008616473657276657206776562616473026e6c0000010001 c3068000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 38279 a0df000000010000000000000b7370616d6d65726475646503636f6d026e6c0000ff0001 a0df840300010000000100000b7370616d6d65726475646503636f6d026e6c0000ff0001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 38280 b79c1b965010446257d90000000000000000 b79c9b940000000000000000 38281 b7ab93d8501844708a3c0000008dbd25000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd15403c4e9500030000002e4e544c4d535350000100000097b200e00700070027000000070007002000000053455256455231534954544152440000 38282 45e400000001000000000000037777770463616e6e026e6c0000010001 45e480000001000000020000037777770463616e6e026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800018036e73310e73706c69742d696e66696e697479036e657400 38283 2c2b28000001000000020000026e6c00000600012432636237316136622d323162382d346264352d613639392d306233383631643764393262065f6d736463730b6b7376696e7465726e6574026e6c00000500ff000000000000c0140005000100000258001807697365727665720b6b7376696e7465726e6574026e6c00 2c2ba8040000000000000000 38284 52750000000100000000000004746d7365026e6c00000f0001 52758000000100000002000004746d7365026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 38285 8aaa00000001000000000000126c6167656e64696a6b2d76617374676f6564026e6c00000f0001 8aaa80000001000000030002126c6167656e64696a6b2d76617374676f6564026e6c00000f0001c00c0002000100015180000d036e733106776964657873c01fc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c037c03300010001000151800004d4ccc0fcc068000100010001518000043efa0703 38286 5e3f00000001000000000000076973656c6d6172026e6c00000f0001 5e3f80000001000000030003076973656c6d6172026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c014c00c0002000100015180000a076e736175746832c030c00c0002000100015180000a076e736175746833c030c02800010001000151800004d5880c33c04200010001000151800004d5880c3bc05800010001000151800004d4ccc00b 38287 b7ab93e650114462f3330000000000000000 38288 52230000000100000000000004666f746f04756e7963026e6c0000010001 52238000000100000002000004666f746f04756e7963026e6c0000010001c0110002000100015180000f036e7336086a726f6e6c696e65c016c01100020001000151800014036e73330d686f73746e656465726c616e64c016 38289 c4a600000001000000000000096772616669666f7273026e6c00000f0001 c4a680000001000000020002096772616669666f7273026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 38290 e7d5000000010000000000000b616374696f6e6769726c73057477696d61026e6c0000010001 e7d5800000010000000200000b616374696f6e6769726c73057477696d61026e6c0000010001c0180002000100015180000e036e7333046965747a03636f6d00c01800020001000151800006036e7334c036 38291 217c0000000100000000000003666c79036b6c6d026e6c0000010001 217c8000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 38292 4a5800000001000000000000046e733032066368656c6c6f026e6c0000010001 4a5880000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 38293 c53500000001000000000000036e733503777873026e6c0000010001 c53580000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 38294 ce5900000001000000000000037777770d746a6f6e676572736368616e73026e6c0000010001 ce5980000001000000020000037777770d746a6f6e676572736368616e73026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c035 38295 879d0010000100000000000106787334616c6c026e6c00000100010000290800000080000000 879d8000000100000003000306787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 38296 00000000700240001bf80000020405b401010402 000080010000000000000000 38297 b7ab93e750104462f3320000000000000000 38298 b7ac6f7a501044701d150000000000000000 b7acef740000000000000000 38299 b7ac6f7a501844708c1a00000091ecce000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd3e403c4ebe0003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 b7acef740000000000000000 38300 55660000000100000000000004736d74700866696e616c697374026e6c0000010001 55668000000100000002000004736d74700866696e616c697374026e6c0000010001c01100020001000151800012036e73310866696e616c69737403636f6d00c01100020001000151800006036e7332c032 38301 b7ac6f88501144621c810000000000000000 b7acef840000000000000000 38302 286400000001000000000000026e73066863636e6574026e6c0000010001 286480000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 38303 b4fc0000000100000000000003706f700776656e73746572026e6c00001c0001 b4fc8000000100000003000203706f700776656e73746572026e6c00001c0001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 38304 6e910000000100000000000003706f700776656e73746572026e6c0000260001 6e918000000100000003000203706f700776656e73746572026e6c0000260001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 38305 a70100000001000000000000037777770a776565726f6e6c696e65026e6c0000010001 a70180000001000000030003037777770a776565726f6e6c696e65026e6c0000010001c0100002000100015180000e076e73617574683103626974c01bc0100002000100015180000a076e736175746832c037c0100002000100015180000a076e736175746833c037c02f00010001000151800004d5880c33c04900010001000151800004d5880c3bc05f00010001000151800004d4ccc00b 38306 a905000000010000000000000469632d73026e6c00000f0001 a905800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 38307 27cd000000010000000000000a6c656672616e2d7063310a6e69657577656765696e066c656672616e026e6c0000060001 27cd840300010000000100000a6c656672616e2d7063310a6e69657577656765696e066c656672616e026e6c0000060001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 38308 0000000070024000de780000020405b401010402 000080010000000000000000 38309 a64800000001000000000000036e73310d32302d616c6c686f7374696e67026e6c00001c0001 a64880000001000000020002036e73310d32302d616c6c686f7374696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000044262d66ec040000100010001518000044262d66f 38310 b7ac6f89501044621c800000000000000000 b7acef840000000000000000 38311 eef300000001000000000000036e73310d32302d616c6c686f7374696e67026e6c0000260001 eef380000001000000020002036e73310d32302d616c6c686f7374696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000044262d66ec040000100010001518000044262d66f 38312 cfe700000001000000000000036e73320d32302d616c6c686f7374696e67026e6c00001c0001 cfe780000001000000020002036e73320d32302d616c6c686f7374696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000044262d66ec00c000100010001518000044262d66f 38313 617900000001000000000000036e73320d32302d616c6c686f7374696e67026e6c0000260001 617980000001000000020002036e73320d32302d616c6c686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000044262d66ec00c000100010001518000044262d66f 38314 f1de00000001000000000000037777771063726561746976656772617068696373026e6c0000010001 f1de80000001000000020001037777771063726561746976656772617068696373026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c021c01000020001000151800006036e7334c039c03500010001000151800004d5c401c0 38315 7ad200000001000000000000037777770c6d6574726f76616e64616167026e6c0000010001 7ad280000001000000030001037777770c6d6574726f76616e64616167026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01dc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04fc031000100010001518000043efa0202 38316 a9740000000100000000000003777777096374636f6e73756c74026e6c0000010001 a9748403000100000001000003777777096374636f6e73756c74026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 38317 e18a00000001000000000000026e73076e656473746174026e6c0000010001 e18a80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38318 6ebc00000001000000000000036e7332076e656473746174026e6c0000010001 6ebc80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38319 adf600000001000000000000036e7333076e656473746174026e6c0000010001 adf680000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38320 1fb200000001000000000000036e7334076e656473746174026e6c0000010001 1fb280000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38321 73790000000100000000000006787334616c6c026e6c0000010001 73798000000100000003000206787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 38322 d4d3000000010000000000000377777709726f7474657264616d026e6c0000010001 d4d3800000010000000300030377777709726f7474657264616d026e6c0000010001c0100002000100015180000c0967616e796d65646573c010c01000020001000151800007046c656461c010c01000020001000151800014036e733203676e7309676574726f6e696373c01ac02e00010001000151800004d5c9cf50c04600010001000151800004d5c9cf19c05900010001000151800004910d2a05 38323 b7aef16c501044705da10000000000000000 38324 b6c20000000100000000000009626162657332303030026e6c0000010001 b6c28000000100000002000009626162657332303030026e6c0000010001c00c00020001000151800012036e7331086379626572616374036e657400c00c00020001000151800006036e7332c02e 38325 b7aef16c501844706076000000915800000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd3f403c4ebf0003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 38326 b7aef17a501144625d0d0000000000000000 38327 61470000000100000000000003666d65026e6c00000f0001 61478000000100000002000203666d65026e6c00000f0001c00c0002000100015180001103646e730a636f6e63657074736661c010c00c0002000100015180001004646e733208636f6e6365707473c010c02400010001000151800004d5c51c03c04100010001000151800004d5c51e1c 38328 cb0a00000001000000000000066d656d6f6276026e6c0000010001 cb0a80000001000000020002066d656d6f6276026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 38329 f56b00100001000000000001026e730f6761726e69657270726f6a65637473026e6c00000100010000290800000080000000 f56b80000001000000020003026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e1420000291000000000000000 38330 926e00100001000000000001036e73310f6761726e69657270726f6a65637473026e6c00000100010000290800000080000000 926e80000001000000020003036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e1420000291000000000000000 38331 0000000070024000ce160000020405b401010402 000080010000000000000000 38332 bb2d000000010000000000000472656a6f067a656e676572026e6c0000010001 bb2d800000010000000200020472656a6f067a656e676572026e6c0000010001c0110002000100015180000c036e7330056e65786974c018c01100020001000151800006036e7331c030c02c00010001000151800004d4ccf5d3c04400010001000151800004d4ccf5d4 38333 a4df00100001000000000001036e73320f6761726e69657270726f6a65637473026e6c00000100010000290800000080000000 a4df80000001000000020003036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e1420000291000000000000000 38334 f54000000001000000000000046d61696c036e6163026e6c0000010001 f54080000001000000020002046d61696c036e6163026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c015c0110002000100015180001004646e733208636f6e6365707473c015c02900010001000151800004d5c51c03c04600010001000151800004d5c51e1c 38335 b7aef17b501044625d0c0000000000000000 38336 f7e6000000010000000000000363676907686f7473746174026e6c0000010001 f7e6800000010000000200010363676907686f7473746174026e6c0000010001c01000020001000151800011036e696b0a7075626c6973686e6574c018c0100002000100015180000704646e7332c030c02c00010001000151800004c1433c0a 38337 fdac0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 fdac8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38338 b7af8e0150104470b0a90000000000000000 38339 b7af8e0150184470ff7e000000910c00000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd3f403c4ebf0003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 38340 a8fa00000001000000000000036e733109666972737466696e64026e6c0000010001 a8fa80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38341 acb9000000010000000000000377777703776562026e6c0000010001 acb9800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 38342 3eb20000000100000000000009652d6c756e61746963026e6c0000010001 3eb28000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38343 37600000000100000000000009652d6c756e61746963026e6c0000010001 37608000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38344 a8fd00000001000000000000036e733109666972737466696e64026e6c0000010001 a8fd80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38345 a8fe00000001000000000000036e733209666972737466696e64026e6c0000010001 a8fe80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38346 e8db00000001000000000000037777770731327668696669026e6c0000010001 e8db80000001000000020002037777770731327668696669026e6c0000010001c0100002000100015180000b036e733104656e6f6dc018c01000020001000151800006036e7332c030c02c00010001000151800004d87a0479c04300010001000151800004d86296b6 38347 b7af8e0f50114462b0150000000000000000 38348 038200000001000000000000046d61696c0461726b6f026e6c0000010001 038280000001000000020002046d61696c0461726b6f026e6c0000010001c0110002000100015180000f036e7331086461786973776562c016c01100020001000151800006036e7332c02ec02a00010001000151800004c323c083c04500010001000151800004c323c084 38349 f2aa000000010000000000000770616b6b696e67086772616669736973026e6c0000010001 f2aa800000010000000200020770616b6b696e67086772616669736973026e6c0000010001c0140002000100015180000d026e73076b6e6f77617265c01dc01400020001000151800006036e7332c034c03100010001000151800004c3402003c04a00010001000151800004c340202b 38350 5a1e000000010000000000000770616b6b696e67086772616669736973026e6c00001c0001 5a1e800000010000000200020770616b6b696e67086772616669736973026e6c00001c0001c0140002000100015180000d026e73076b6e6f77617265c01dc01400020001000151800006036e7332c034c03100010001000151800004c3402003c04a00010001000151800004c340202b 38351 8064000000010000000000000378353308696e666f70616374026e6c0000010001 8064800000010000000200000378353308696e666f70616374026e6c0000010001c01000020001000151800012036e736108696e666f7061637403636f6d00c01000020001000151800006036e7362c031 38352 eb8b0000000100000000000003777777026e75026e6c0000010001 eb8b8000000100000003000303777777026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c027000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 38353 bd0500000001000000000000056173747269026e6c00000f0001 bd0580000001000000020002056173747269026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 38354 b33100000001000000000000086577646e747330340b6f6265696e64686f76656e026e6c0000010001 b33180000001000000020002086577646e747330340b6f6265696e64686f76656e026e6c0000010001c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c021c00c00010001000151800004c3a91823c04300010001000151800004c0576a65 38355 b7af8e1050104462b0140000000000000000 38356 9acb00000001000000000000037777770c74656c65666f6f6e676964730b7074742d74656c65636f6d026e6c0000010001 9acb80000001000000020000037777770c74656c65666f6f6e676964730b7074742d74656c65636f6d026e6c0000010001c01d0002000100015180000d03646e73036b706e03636f6d00c01d0002000100015180000d036e7332036b706e036e657400 38357 9a56000000010000000000000a73637265656e74696d65026e6c0000010001 9a56800000010000000200000a73637265656e74696d65026e6c0000010001c00c00020001000151800012036e3036026e6c056468697665036e657400c00c00020001000151800006036e3035c02f 38358 074c0000000100000000000009652d6c756e61746963026e6c0000010001 074c8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38359 1f400000000100000000000009652d6c756e61746963026e6c0000010001 1f408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38360 85f70000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 85f78000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 38361 29f800000001000000000000056b68616f730461766d31026e6c0000010001 29f884030001000000010000056b68616f730461766d31026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 38362 5a1401000001000000000000077765626d61696c0774697363616c69026e6c0000010001 5a1481000001000000030002077765626d61696c0774697363616c69026e6c0000010001c0140002000100015180000704616e7331c014c0140002000100015180000704616e7332c014c0140002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04300010001000151800004c3f13325 38363 15a2000000010000000000000377777709636c75626d6574726f026e6c0000010001 15a2800000010000000200000377777709636c75626d6574726f026e6c0000010001c01000020001000151800014046e732d31096e6f6e616d6534757303636f6d00c01000020001000151800007046e732d32c033 38364 f2ad0000000100000000000003777777187870657269656e63652d776562646576656c6f706d656e74026e6c0000010001 f2ad8000000100000002000203777777187870657269656e63652d776562646576656c6f706d656e74026e6c0000010001c0100002000100015180000f0472617131076e657474756e65c029c01000020001000151800006036e7332c042c03d00010001000151800004d4ccf78dc05800010001000151800004d4ccf78e 38365 c192000000010000000000000472617131076e657474756e65026e6c0000010001 c192800000010000000200020472617131076e657474756e65026e6c0000010001c01100020001000151800002c00cc01100020001000151800006036e7332c011c00c00010001000151800004d4ccf78dc03b00010001000151800004d4ccf78e 38366 23cc00000001000000000000036e7332076e657474756e65026e6c0000010001 23cc80000001000000020002036e7332076e657474756e65026e6c0000010001c010000200010001518000070472617131c010c01000020001000151800002c00cc02c00010001000151800004d4ccf78dc00c00010001000151800004d4ccf78e 38367 3d6b0010000100000000000104616a6178066e696b686566026e6c00000100010000290800000080000000 3d6b8000000100000004000304616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c7040000291000000000000000 38368 a23400100001000000000001036e733109756e69736f75726365026e6c00000100010000290800000080000000 a23480000001000000020001036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 38369 511a00100001000000000001036e733109756e69736f75726365026e6c00002600010000290800000080000000 511a80000001000000020001036e733109756e69736f75726365026e6c0000260001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 38370 4de000000001000000000000147363686164656e65742d7a61616e73747265656b026e6c0000010001 4de080000001000000020001147363686164656e65742d7a61616e73747265656b026e6c0000010001c00c0002000100015180000a036e733303777873c021c00c00020001000151800006036e7334c039c04b00010001000151800004d5ef9a65 38371 addc00000001000000000000037777770338666d026e6c0000010001 addc80000001000000020002037777770338666d026e6c0000010001c0100002000100015180000a036e733103686978c014c01000020001000151800006036e7332c02cc02800010001000151800004d5a0da0ac03e0001000100015180000451112ec3 38372 528300000001000000000000066f7265616465026e6c00000f0001 528380000001000000020001066f7265616465026e6c00000f0001c00c0002000100015180000c026e7306636165736172c013c00c0002000100015180000b026e73026e6c036e657400c02700010001000151800004c14fb8d8 38373 8e800000000100000000000003777777046c69646c026e6c0000010001 8e808000000100000002000203777777046c69646c026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c015c0100002000100015180001004646e733208636f6e6365707473c015c02900010001000151800004d5c51c03c04600010001000151800004d5c51e1c 38374 80a800000001000000000000037777770f74696c6275726774656e6d696c6573026e6c0000010001 80a880000001000000030001037777770f74696c6275726774656e6d696c6573026e6c0000010001c0100002000100015180000e026e7308767575727765726bc020c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c052c034000100010001518000043efa0202 38375 81eb00000001000000000000036e7331056163646973026e6c0000010001 81eb80000001000000020002036e7331056163646973026e6c0000010001c01000020001000151800002c00cc0100002000100015180000a026e7304616e7762c016c00c00010001000151800004c29779fac03800010001000151800004c1ac840a 38376 96ef00000001000000000000036e7331056163646973026e6c0000260001 96ef80000001000000020002036e7331056163646973026e6c0000260001c01000020001000151800002c00cc0100002000100015180000a026e7304616e7762c016c00c00010001000151800004c29779fac03800010001000151800004c1ac840a 38377 454700000001000000000000057061707261026e6c0000010001 454780000001000000020000057061707261026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02c 38378 de8100000001000000000000026e7304616e7762026e6c0000010001 de8180000001000000020001026e7304616e7762026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ac840a 38379 9da9000000010000000000000b73766f2d64756b64616c66026e6c00000f0001 9da9800000010000000200020b73766f2d64756b64616c66026e6c00000f0001c00c0002000100015180000d036e7331066e6c74726565c018c00c00020001000151800006036e7332c030c02c00010001000151800004d4b20403c04500010001000151800004d5881e45 38380 0a4d00000001000000000000026e7304616e7762026e6c0000260001 0a4d80000001000000020001026e7304616e7762026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ac840a 38381 878600000001000000000000037777770d726567746f702d7061726b6574026e6c0000010001 878680000001000000020002037777770d726567746f702d7061726b6574026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c01ec01000020001000151800006036e7332c036c03200010001000151800004505fa002c04d00010001000151800004505fac02 38382 1e060000000100000000000007657261626f7577026e6c0000ff0001 1e068000000100000002000207657261626f7577026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 38383 9c3800000001000000000000036e7331046372696f026e6c0000010001 9c3880000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 38384 485100000001000000000000036e723605692d702d64026e6c0000010001 485180000001000000020002036e723605692d702d64026e6c0000010001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02a00010001000151800004d9124003c03d00010001000151800004d9124104 38385 cd0500000001000000000000036e7331066e6c74726565026e6c0000010001 cd0580000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 38386 9414000000010000000000000a66656d636f6e73756c74026e6c00000f0001 9414800000010000000200000a66656d636f6e73756c74026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 38387 669300000001000000000000036d7832046d61696c0c726f6e63616c6c692d626f7a026e6c026e6c0000010001 669384030001000000010000036d7832046d61696c0c726f6e63616c6c692d626f7a026e6c026e6c0000010001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 38388 8a5c000000010000000000000a6d61676963706c617a61026e6c00000f0001 8a5c800000010000000300010a6d61676963706c617a61026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 38389 107f000000010000000000000377777703616964026e6c0000010001 107f800000010000000200010377777703616964026e6c0000010001c0100002000100015180000c026e7306636f62776562c014c01000020001000151800011026e73087363686970686f6c036e657400c0280001000100015180000450f26001 38390 32540000000100000000000003777777096164726965706f6c73026e6c0000010001 32548000000100000002000003777777096164726965706f6c73026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c031 38391 92b000000001000000000000086b61776173616b69026e6c00000f0001 92b080000001000000020001086b61776173616b69026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 38392 e4d100000001000000000000036e7331076e6574666c6578026e6c0000010001 e4d180000001000000030003036e7331076e6574666c6578026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c26d5ba8c03a00010001000151800004507f2f25c04c00010001000151800004507ede20 38393 b74500000001000000000000046d61696c096c65617365706c616e026e6c00001c0001 b74580000001000000020001046d61696c096c65617365706c616e026e6c00001c0001c01100020001000151800006036e7331c011c0110002000100015180000d026e73046575726f036e657400c02f00010001000151800004c286e702 38394 fa8800000001000000000000037777770474617577026e6c0000010001 fa8880000001000000030002037777770474617577026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c015c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c02dc029000100010001518000045054e055c06200010001000151800004d4ccc655 38395 094700000001000000000000037777770673656e746572026e6c0000010001 094780000001000000020002037777770673656e746572026e6c0000010001c0100002000100015180000c036e7331056d696e657ac017c01000020001000151800006036e7332c02fc02b00010001000151800004914527e6c043000100010001518000049145270a 38396 7cd80000000100000000000008667265656d61696c026e6c00000f0001 7cd88000000100000003000208667265656d61696c026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 38397 e64c00000001000000000000037777770d7361696c63656e746572313037026e6c0000010001 e64c80000001000000020002037777770d7361696c63656e746572313037026e6c0000010001c01000020001000151800018067765626e69780e6575726f636f6e73756c74616e74c01ec0100002000100015180000a076d61696c6e6978c039c032000100010001518000045117e555c056000100010001518000045117e556 38398 70c5000000010000000000000377777703776562026e6c0000010001 70c5800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 38399 9fdd0000000100000000000006617363696e74026e6c00001c0001 9fdd8000000100000002000206617363696e74026e6c00001c0001c00c0002000100015180000b036e73310461786974c013c00c00020001000151800006036e7332c02bc027000100010001518000043e3a440bc03e000100010001518000043e3a440c 38400 4f9d00000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 4f9d80000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 38401 54db00000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 54db80000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 38402 3b5c000000010000000000001061687a6175746f62656472696a76656e026e6c00000f0001 3b5c800000010000000300011061687a6175746f62656472696a76656e026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01dc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04fc031000100010001518000043efa0202 38403 aeed00000001000000000000046d61696c067577706f7374026e6c0000010001 aeed80000001000000020002046d61696c067577706f7374026e6c0000010001c0110002000100015180000f026e7309656174736572766572c018c01100020001000151800006036e7332c02fc02c00010001000151800004d4cb0e42c04700010001000151800004d4cb1221 38404 69b400000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 69b480000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 38405 e9ab00000001000000000000036d783406787334616c6c026e6c0000010001 e9ab80000001000000030002036d783406787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 38406 52fa00000001000000000000036e733205672d617274026e6c0000010001 52fa80000001000000020002036e733205672d617274026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000f026e7309747269706c652d6974c016c02a00010001000151800004d5a0c502c03c00010001000151800004d584b002 38407 8993000000010000000000000e70617261706c756661627269656b0564656d6f6e026e6c00000f0001 8993800000010000000300020e70617261706c756661627269656b0564656d6f6e026e6c00000f0001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc01b0002000100015180000f036e73320564656d6f6e036e657400c03500010001000151800004c29f4906c04700010001000151800004c29fb004 38408 19f600000001000000000000036d78310768656262697a7a024e4c0000010001 19f680000001000000020002036d78310768656262697a7a024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c372eb42c03e000100010001518000043e320e91 38409 e3e4000000010000000000000377777708726f636b2d696e6e026e6c0000010001 e3e4800000010000000200000377777708726f636b2d696e6e026e6c0000010001c0100002000100015180000c026e7306766576696461c019c01000020001000151800006036e7332c030 38410 9173000000010000000000000365766f026e6c00000f0001 9173800000010000000200000365766f026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 38411 cf5400000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 cf5480000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38412 2f4c000000010000000000000377777708696e737469746f72026e6c0000010001 2f4c800000010000000200020377777708696e737469746f72026e6c0000010001c0100002000100015180000d036e73310661637469766fc019c01000020001000151800006036e7332c031c02d00010001000151800004d5c4281ac04600010001000151800004d5c42806 38413 5c240000000100000000000007646176696e6369026e6c00001c0001 5c248000000100000002000207646176696e6369026e6c00001c0001c00c0002000100015180000d036e7331066e6c74726565c014c00c00020001000151800006036e7332c02cc02800010001000151800004d4b20403c04100010001000151800004d5881e45 38414 4d7300000001000000000000036e733109756e69736f75726365026e6c0000010001 4d7380000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 38415 9ae600000001000000000000036e733109756e69736f75726365026e6c0000260001 9ae680000001000000020000036e733109756e69736f75726365026e6c0000260001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 38416 09c10000000100000000000003626c3402626c06787334616c6c026e6c0000010001 09c18000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38417 91a7000000010000000000000868656c706465736b026e6c00000f0001 91a7800000010000000200020868656c706465736b026e6c00000f0001c00c0002000100015180000f036e7331086765656e70756e74c015c00c00020001000151800006036e7332c02dc02900010001000151800004d4ccd865c044000100010001518000045054ec34 38418 ff930000000100000000000008736372616d626c6505796b6f6f6e026e6c0000010001 ff938000000100000002000008736372616d626c6505796b6f6f6e026e6c0000010001c0150002000100015180000f036e733105796b6f6f6e036e657400c01500020001000151800006036e7332c033 38419 976f001000010000000000010469632d73026e6c00001c00010000290800000000000000 976f800000010000000200010469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c0290000291000000000000000 38420 3f8a00000001000000000000037777770e6b756e737467656f677261666965026e6c0000010001 3f8a80000001000000020000037777770e6b756e737467656f677261666965026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c049 38421 fa6900000001000000000000036e733104686f6d65026e6c0000010001 fa6980000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 38422 a44e0000000100000000000003696165026e6c0000ff0001 a44e8000000100000002000203696165026e6c0000ff0001c00c00020001000151800012036e73310b7669616e6574776f726b73c010c00c00020001000151800006036e7332c028c02400010001000151800004d43d0f08c04200010001000151800004d43d19e2 38423 07c60000000100000000000004616a6178066e696b686566026e6c0000010001 07c68000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 38424 ef6e00000001000000000000037777771370726f736f756e646175746f7374796c696e67026e6c0000010001 ef6e80000001000000030000037777771370726f736f756e646175746f7374796c696e67026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c03ec0100002000100015180000805646e733132c03e 38425 7e780000000100000000000009636d732d626f7363680c686f6c696461796d65646961026e6c0000010001 7e788000000100000002000209636d732d626f7363680c686f6c696461796d65646961026e6c0000010001c01600020001000151800005026e73c016c01600020001000151800006036e7333c016c037000100010001518000049265424dc048000100010001518000045054ebbf 38426 7fe10000000100000000000003777777077a6f72676a6f62026e6c0000010001 7fe18000000100000003000303777777077a6f72676a6f62026e6c0000010001c010000200010001518000110161026e7309636f6d626f64617461c018c010000200010001518000040162c02ec010000200010001518000040163c02ec02c00010001000151800004d5de0b44c04900010001000151800004d5de0b45c05900010001000151800004d5de0b4e 38427 388200000001000000000000037777770b766974616d696e657a6565026e6c0000010001 388280000001000000020002037777770b766974616d696e657a6565026e6c0000010001c0100002000100015180000a036e7331036e7873c01cc01000020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 38428 c32a000000010000000000000866666575726f7065026e6c0000010001 c32a800000010000000200020866666575726f7065026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 38429 437a00000001000000000000046d61696c0b64616e74756d616465656c026e6c0000010001 437a80000001000000020000046d61696c0b64616e74756d616465656c026e6c0000010001c0110002000100015180000d026e730468736367036e657400c01100020001000151800006036e7332c034 38430 b85b28000001000000010000026e6c0000060001055f6c646170045f746370077265746172636f026e6c000021000100000258001a000000640185077265745f667331077265746172636f026e6c00 b85ba8040000000000000000 38431 210c001000010000000000010673616b617461026e6c0000ff00010000290800000000000000 210c800000010000000200010673616b617461026e6c0000ff0001c00c00020001000151800014036e73310a676c617373686f757365036e657400c00c00020001000151800006036e7332c02b0000291000000000000000 38432 000000007002faf08ad60000020405b401010402 000080010000000000000000 38433 a73700000001000000000000036e733107756e6974656368026e6c0000010001 a73780000001000000020002036e733107756e6974656368026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004511121f8c03a0001000100015180000451112184 38434 ca9c00000001000000000000036e733207756e6974656368026e6c0000010001 ca9c80000001000000020002036e733207756e6974656368026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004511121f8c00c0001000100015180000451112184 38435 b7b2120c5010faf0edcb0000000000000000 b7b292040000000000000000 38436 843b000000010000000000000673616b617461026e6c0000ff0001 843b800000010000000200000673616b617461026e6c0000ff0001c00c00020001000151800014036e73310a676c617373686f757365036e657400c00c00020001000151800006036e7332c02b 38437 eb9f00000001000000000000046c626e68026e6c00000f0001 eb9f80000001000000020002046c626e68026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 38438 4f6500000001000000000000046d61696c106e61747575726d6f6e756d656e74656e026e6c0000010001 4f6580000001000000020001046d61696c106e61747575726d6f6e756d656e74656e026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03600010001000151800004d5c22132 38439 2d2b00000001000000000000046d61696c106e61747575726d6f6e756d656e74656e026e6c00001c0001 2d2b80000001000000020001046d61696c106e61747575726d6f6e756d656e74656e026e6c00001c0001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03600010001000151800004d5c22132 38440 570500000001000000000000046d61696c0764727566697265026e6c0000010001 570580000001000000030003046d61696c0764727566697265026e6c0000010001c0110002000100015180000e076e73617574683103626974c019c0110002000100015180000a076e736175746832c035c0110002000100015180000a076e736175746833c035c02d00010001000151800004d5880c33c04700010001000151800004d5880c3bc05d00010001000151800004d4ccc00b 38441 252400000001000000000000026e6c00000f0001 252484000001000000010000026e6c00000f0001c00c00060001000038400036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840 38442 0eda00000001000000000000037777770d7469636b6574747261636b6572026e6c0000010001 0eda80000001000000020002037777770d7469636b6574747261636b6572026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01ec0100002000100015180001004646e733208636f6e6365707473c01ec03200010001000151800004d5c51c03c04f00010001000151800004d5c51e1c 38443 ab64000000010000000000000c6d6f7474656e76616e6765720c696e746572636f6e6e656374026e6c0000010001 ab64800000010000000300030c6d6f7474656e76616e6765720c696e746572636f6e6e656374026e6c0000010001c01900020001000151800005026e73c019c01900020001000151800006036e7332c019c01900020001000151800006036e7333c019c03a00010001000151800004d453c005c04b00010001000151800004d453c006c05d00010001000151800004d453c805 38444 081100000001000000000000037777770474617577026e6c0000010001 081180000001000000030002037777770474617577026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c015c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c02dc029000100010001518000045054e055c06200010001000151800004d4ccc655 38445 a6d4000000010000000000000469632d73026e6c00001c0001 a6d4800000010000000200000469632d73026e6c00001c0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 38446 730b00000001000000000000046d61696c0962657374636c65616e026e6c0000010001 730b80000001000000020000046d61696c0962657374636c65616e026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c035 38447 fd7200000001000000000000046d61696c066f72616e6765026e6c0000010001 fd7280000001000000020001046d61696c066f72616e6765026e6c0000010001c0110002000100015180000d026e73046575726f036e657400c0110002000100015180000d026e73076575726f6e6574c018c04500010001000151800004c2860043 38448 1b1c00000001000000000000026e73056269626974026e6c0000010001 1b1c80000001000000030002026e73056269626974026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00f00020001000151800006036e7332c00fc00c00010001000151800004d4ce201fc04e00010001000151800004d4ce2020 38449 969d00000001000000000000036e7332056269626974026e6c0000010001 969d80000001000000030002036e7332056269626974026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800002c00cc02a00010001000151800004d4ce201fc00c00010001000151800004d4ce2020 38450 109e0000000100000000000003777777086d74726565787878026e6c0000010001 109e8000000100000002000003777777086d74726565787878026e6c0000010001c01000020001000151800013036e7331097669727475616c787303636f6d00c01000020001000151800006036e7332c031 38451 db3600000001000000000000046d61696c0b7064706572736f6e65656c026e6c0000010001 db3680000001000000020002046d61696c0b7064706572736f6e65656c026e6c0000010001c0110002000100015180000b036e733104736f6b6fc01dc01100020001000151800006036e7332c035c0310001000100015180000450f2ee91c0480001000100015180000450f2ee9e 38452 130000000001000000000000086174617261786961026e6c0000010001 130080000001000000020000086174617261786961026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 38453 947600000001000000000000037777770b626c696b6f706b756e7374026e6c0000010001 947680000001000000020000037777770b626c696b6f706b756e7374026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c034 38454 e233000000010000000000000567656f7665026e6c0000ff0001 e233800000010000000200020567656f7665026e6c0000ff0001c00c0002000100015180000e026e73086d656761706c6578c012c00c00020001000151800006036e7331c029c02600010001000151800004504f6101c04000010001000151800004504f6102 38455 e5e50000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 e5e58000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 38456 71540000000100000000000009636f6d707574657273026e6c00000f0001 71548000000100000002000209636f6d707574657273026e6c00000f0001c00c0002000100015180000903706b3102706bc016c00c0002000100015180000603706b32c02ec02a00010001000151800004d43d1815c03f00010001000151800004d43d1818 38457 42dc00000001000000000000036e733103617474026e6c0000010001 42dc80000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 38458 9f1900000001000000000000036e733203617474026e6c0000010001 9f1980000001000000020002036e733203617474026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 38459 934500000001000000000000126b7265756b2d617263686974656374757572026e6c00001c0001 934580000001000000020000126b7265756b2d617263686974656374757572026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c039 38460 3a4f000000010000000000000377777705616e646573026e6c0000010001 3a4f800000010000000200010377777705616e646573026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c016c01000020001000151800011036e7332076e6564636f6d70036f726700c02a00010001000151800004c3c1a80d 38461 b5d300100001000000000001056d61696c3103696e67026e6c00000100010000290800000080000000 b5d380000001000000020003056d61696c3103696e67026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02a0001000100015180000491dd19c2c03c0001000100015180000491dd5dc20000291000000000000000 38462 ccb0000000010000000000000331373202323101310131026e6c0000010001 ccb0840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 38463 6a5a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 6a5a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38464 b90f0000000100000000000003777777127761746d6f65746a657a6f6e6465726f6e73026e6c0000010001 b90f8000000100000002000203777777127761746d6f65746a657a6f6e6465726f6e73026e6c0000010001c01000020001000151800011046e73303109696e74656e74696f6ec023c01000020001000151800007046e733032c03cc03700010001000151800004d943eb02c05400010001000151800004d943eb03 38465 b77f00000001000000000000037777770365636c026e6c0000010001 b77f80000001000000030003037777770365636c026e6c0000010001c0100002000100015180000f036e7331086e6f766178657373c014c01000020001000151800006036e7332c02cc01000020001000151800006036e7333c02cc02800010001000151800004d5c98015c04300010001000151800004d5c9bf12c05500010001000151800004d5ef9c26 38466 e19c000000010000000000000664756379636f026e6c0000010001 e19c800000010000000200020664756379636f026e6c0000010001c00c00020001000151800010036e733109686f7374696e67786cc013c00c00020001000151800006036e7332c02bc027000100010001518000045054e504c043000100010001518000043e94a314 38467 34bf00000001000000000000037777770964616e736f6d6d6572026e6c0000010001 34bf80000001000000020000037777770964616e736f6d6d6572026e6c0000010001c010000200010001518000130761757468323030026e73027575036e657400c0100002000100015180000a0761757468323130c036 38468 bdeb00000001000000000000037777770864766473746f7265026e6c0000010001 bdeb80000001000000020002037777770864766473746f7265026e6c0000010001c01000020001000151800009036e7331026973c019c01000020001000151800006036e7332c031c02d00010001000151800004d5852102c04200010001000151800004d5c41503 38469 58b300000001000000000000037777770b627269736b6576656e7473026e6c0000010001 58b380000001000000020002037777770b627269736b6576656e7473026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c01cc01000020001000151800006036e7332c033c03000010001000151800004d9aa2042c04900010001000151800004d9aa2c06 38470 5a2c00000001000000000000037777770c746a65657a656d6f64656c73026e6c0000010001 5a2c80000001000000020002037777770c746a65657a656d6f64656c73026e6c0000010001c0100002000100015180001104646e733109696e7465726f757465c01dc0100002000100015180000704646e7332c036c03100010001000151800004d4173f3ec04e00010001000151800004d4173f3d 38471 2b720000000100000000000003777777047476636e026e6c0000010001 2b728000000100000002000203777777047476636e026e6c0000010001c01000020001000151800011036e73310a6f612d73797374656d73c015c01000020001000151800006036e7332c02dc029000100010001518000043eb1b1abc046000100010001518000043eb1b1ac 38472 34c20000000100000000000008616473657276657206776562616473026e6c0000010001 34c28000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 38473 441700000001000000000000056d61696c3103696e67026e6c0000010001 441780000001000000020002056d61696c3103696e67026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02a0001000100015180000491dd19c2c03c0001000100015180000491dd5dc2 38474 a12f00000001000000000000087368696e65747375026e6c00000f0001 a12f80000001000000020000087368696e65747375026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02f 38475 705600000001000000000000037777770672686564656e026e6c0000010001 705680000001000000020002037777770672686564656e026e6c0000010001c01000020001000151800010046e733031086e65746c696e6573c017c01000020001000151800007046e733032c030c02b00010001000151800004d99540f5c04700010001000151800004d99541f5 38476 82a400000001000000000000036e733109666972737466696e64026e6c0000010001 82a480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38477 793a00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 793a80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 38478 f4b600000001000000000000037777770d686161677366696c6d68756973026e6c0000010001 f4b680000001000000020002037777770d686161677366696c6d68756973026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01ec01000020001000151800006036e7332c036c03200010001000151800004d43d0f08c05000010001000151800004d43d19e2 38479 87040000000100000000000009666f746f2d77696a6e026e6c0000010001 87048000000100000002000109666f746f2d77696a6e026e6c0000010001c00c0002000100015180000a036e733303777873c016c00c00020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 38480 e87200000001000000000000037777770976696e6b2d656c7374026e6c0000010001 e87280000001000000020002037777770976696e6b2d656c7374026e6c0000010001c01000020001000151800015036e73310e726567696f70726f766964657273c01ac01000020001000151800006036e7332c032c02e00010001000151800004d41da001c04f00010001000151800004d41da1fe 38481 f17100000001000000000000036e73330767617574656e67026e6c0000010001 f17180000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38482 55e200000001000000000000036e73340767617574656e67026e6c0000010001 55e280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38483 6eec00000001000000000000036e73310974656c656b6162656c026e6c0000010001 6eec80000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 38484 4342000000010000000000000967656c6468616c656e026e6c0000010001 4342800000010000000200000967656c6468616c656e026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38485 2e240000000100000000000009652d6c756e61746963026e6c0000010001 2e248000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38486 44e60000000100000000000003667273026e6c0000010001 44e68000000100000002000003667273026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 38487 227800000001000000000000036e7331086c65617365776562026e6c0000010001 227880000001000000030002036e7331086c65617365776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800012036e7333086c65617365776562036f726700c00c000100010001518000043ed44079c03b000100010001518000043ed4407a 38488 7d2e00000001000000000000036e7332086c65617365776562026e6c0000010001 7d2e80000001000000030002036e7332086c65617365776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800012036e7333086c65617365776562036f726700c02d000100010001518000043ed44079c00c000100010001518000043ed4407a 38489 79fa00000001000000000000037777771264656875697361616e687569736b72616e74026e6c0000010001 79fa80000001000000020000037777771264656875697361616e687569736b72616e74026e6c0000010001c0100002000100015180000f026e7306636170696361036e657400c01000020001000151800006036e7332c03a 38490 0a8b0000000100000000000005736f6e6a610972696473777572747a026e6c0000060001 0a8b8403000100000001000005736f6e6a610972696473777572747a026e6c0000060001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 38491 b51d00000001000000000000066e7063696374026e6c00001c0001 b51d80000001000000030003066e7063696374026e6c00001c0001c00c000200010001518000180b6e616d6573657276657231096469676974616c7573c013c00c0002000100015180000e0b6e616d6573657276657232c033c00c0002000100015180000e0b6e616d6573657276657233c033c0270001000100015180000451ad2020c04b0001000100015180000451ad2021c0650001000100015180000452c049aa 38492 e32e000000010000000000000365746e026e6c0000010001 e32e800000010000000200010365746e026e6c0000010001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c010c03d00010001000151800004c2860043 38493 f17900000001000000000000026e730874656c6567617465026e6c0000010001 f17980000001000000030000026e730874656c6567617465026e6c0000010001c00f00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00f00020001000151800006036e7332c030c00f00020001000151800006036e7333c030 38494 96190000000100000000000005646e732d31056c61646f74026e6c0000010001 96198000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38495 8daf0000000100000000000005646e732d32056c61646f74026e6c0000010001 8daf8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38496 817e00000001000000000000037777770e67616c6c65726965732d736c6574026e6c0000010001 817e80000001000000020002037777770e67616c6c65726965732d736c6574026e6c0000010001c0100002000100015180000d036e7331063234686f7374c01fc01000020001000151800006036e7332c037c03300010001000151800004d5efb10cc04c00010001000151800004d5efb10d 38497 c182000000010000000000000c616b7469716c6170746f70310e616b7469712d696e7472616e6574026e6c0000060001 c182840300010000000100000c616b7469716c6170746f70310e616b7469712d696e7472616e6574026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 38498 03f000000001000000000000037777770b62726162616e74626f656b026e6c0000010001 03f080000001000000030002037777770b62726162616e74626f656b026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 38499 28ac00100001000000000001096365646572626f7267026e6c00001c00010000290800000080000000 28ac80000001000000020003096365646572626f7267026e6c00001c0001c00c0002000100015180000a036e733103696166c016c00c00020001000151800006036e7332c02ec02a000100010001518000045059e040c040000100010001518000045059ee030000291000000000000000 38500 384000000001000000000000046d61696c076a6f736c61616e026e6c0000010001 384080000001000000020000046d61696c076a6f736c61616e026e6c0000010001c01100020001000151800011036e73330a737562686f7374696e67c019c01100020001000151800006036e7334c031 38501 07700000000100000000000009652d6c756e61746963026e6c0000010001 07708000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38502 0f790000000100000000000009652d6c756e61746963026e6c0000010001 0f798000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38503 facc00000001000000000000036e733103697870026e6c0000010001 facc80000001000000020002036e733103697870026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d943e639c036000100010001518000043efa063f 38504 fd6600000001000000000000036e733203697870026e6c0000010001 fd6680000001000000020002036e733203697870026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d943e639c00c000100010001518000043efa063f 38505 c4fd00000001000000000000037777770e64696572656e63656e7472616c65026e6c0000010001 c4fd80000001000000020002037777770e64696572656e63656e7472616c65026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01fc01000020001000151800006036e7332c036c03300010001000151800004d4cb0e42c04e00010001000151800004d4cb1221 38506 904600000001000000000000086d61696c686f7374097665746572616e656e026e6c0000010001 904680000001000000020002086d61696c686f7374097665746572616e656e026e6c0000010001c01500020001000151800011026e730b6973642d686f6c6c616e64c01fc01500020001000151800006036e7332c036c03300010001000151800004d5e38d0ac05000010001000151800004d5e38205 38507 8a0e00000001000000000000096365646572626f7267026e6c00001c0001 8a0e80000001000000020002096365646572626f7267026e6c00001c0001c00c0002000100015180000a036e733103696166c016c00c00020001000151800006036e7332c02ec02a000100010001518000045059e040c040000100010001518000045059ee03 38508 860000000001000000000000037777770970696c6f7473686f70026e6c0000010001 860080000001000000020000037777770970696c6f7473686f70026e6c0000010001c01000020001000151800012036e73310b776f726c646f6e6c696e65c01ac01000020001000151800006036e7332c032 38509 b4e0000000010000000000000477777731086c616e67686f7574026e6c0000010001 b4e0800000010000000200000477777731086c616e67686f7574026e6c0000010001c01100020001000151800013036e733109752d73657276657273036e657400c01100020001000151800006036e7332c032 38510 d89400000001000000000000037777770d7665696c696e676b696a6b6572026e6c0000010001 d89480000001000000020002037777770d7665696c696e676b696a6b6572026e6c0000010001c0100002000100015180000c04646e73310471776562c01ec0100002000100015180000704646e7332c037c03200010001000151800004d994ac0cc04a00010001000151800004d5c42f6c 38511 50b30000000100000000000004444e5332064d494e4c4e56026e6c0000010001 50b38000000100000003000304444e5332064d494e4c4e56026e6c0000010001c0110002000100015180000704646e7331c011c0110002000100015180000e036e733107737572666e6574c018c01100020001000151800002c00cc02c00010001000151800004910c2201c03f00010001000151800004c0576a65c00c00010001000151800004910c2202 38512 7f6c00000001000000000000037777770d766c6965676b616d706f70656e026e6c0000010001 7f6c80000001000000020002037777770d766c6965676b616d706f70656e026e6c0000010001c01000020001000151800009036e7331026973c01ec01000020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 38513 4934000000010000000000000b652d676f686f7374696e67026e6c0000010001 4934800000010000000200000b652d676f686f7374696e67026e6c0000010001c00c0002000100015180000c036e723105692d702d64c018c00c00020001000151800006036e7232c030 38514 8fb100000001000000000000036e733503777873026e6c0000010001 8fb180000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 38515 319d000000010000000000000b652d676f686f7374696e67026e6c00001c0001 319d800000010000000200000b652d676f686f7374696e67026e6c00001c0001c00c0002000100015180000c036e723105692d702d64c018c00c00020001000151800006036e7232c030 38516 7f92000000010000000000000b652d676f686f7374696e67026e6c0000260001 7f92800000010000000200000b652d676f686f7374696e67026e6c0000260001c00c0002000100015180000c036e723105692d702d64c018c00c00020001000151800006036e7232c030 38517 844100000001000000000000026e730874656c6567617465026e6c0000010001 844180000001000000030000026e730874656c6567617465026e6c0000010001c00f00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00f00020001000151800006036e7332c030c00f00020001000151800006036e7333c030 38518 072e00000001000000000000036e73320564656d6f6e026e6c0000010001 072e80000001000000030002036e73320564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 38519 073000000001000000000000036e73310564656d6f6e026e6c0000010001 073080000001000000030002036e73310564656d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 38520 314b000000010000000000000377777711766972747565656c7665726469656e656e026e6c0000010001 314b800000010000000200020377777711766972747565656c7665726469656e656e026e6c0000010001c0100002000100015180000e036e73310777657073797465c022c01000020001000151800006036e7332c03ac03600010001000151800004d5f72968c05000010001000151800004d5f72969 38521 c00d00000001000000000000037777770a7368697274737a6f6e65026e6c0000010001 c00d80000001000000030002037777770a7368697274737a6f6e65026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 38522 635700000001000000000000036d783406787334616c6c026e6c0000010001 635780000001000000030002036d783406787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 38523 749c00000001000000000000026e7306766576696461026e6c0000010001 749c80000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 38524 3a4e00000001000000000000026e7306766576696461026e6c0000260001 3a4e80000001000000030002026e7306766576696461026e6c0000260001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 38525 0e9d00000001000000000000036e733206766576696461026e6c0000010001 0e9d80000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 38526 110600000001000000000000036e733206766576696461026e6c0000260001 110680000001000000030002036e733206766576696461026e6c0000260001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 38527 bf880000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 bf888000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 38528 f754000000010000000000000377777711766972747565656c7665726469656e656e026e6c0000010001 f754800000010000000200020377777711766972747565656c7665726469656e656e026e6c0000010001c0100002000100015180000e036e73310777657073797465c022c01000020001000151800006036e7332c03ac03600010001000151800004d5f72968c05000010001000151800004d5f72969 38529 13d10000000100000000000003777777087761726368696c64026e6c0000010001 13d18000000100000002000203777777087761726368696c64026e6c0000010001c0100002000100015180000b026e73057162616c6cc019c0100002000100015180000f026e7309747269706c652d6974c019c02d00010001000151800004d584b024c04400010001000151800004d584b002 38530 f3970000000100000000000004414a4158064e494b484546024e4c0000010001 f3978000000100000004000204414a4158064e494b484546024e4c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 38531 76aa0000000100000000000003696c730773747564656e7407757477656e7465026e6c0000010001 76aa8000000100000003000303696c730773747564656e7407757477656e7465026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c01800020001000151800006036e7333c018c0340001000100015180000482590102c0460001000100015180000482590103c05800010001000151800004c0571113 38532 c8050000000100000000000003636d730769736973776562026e6c0000010001 c8058000000100000003000303636d730769736973776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7334c010c02c00010001000151800004d4ccca65c03e00010001000151800004510440dec05000010001000151800004510440fa 38533 81f100000001000000000000046d61696c0c737072696e6764657369676e026e6c0000010001 81f180000001000000020002046d61696c0c737072696e6764657369676e026e6c0000010001c0110002000100015180000f026e7309656174736572766572c01ec01100020001000151800006036e7332c035c03200010001000151800004d4cb0e42c04d00010001000151800004d4cb1221 38534 80ad0000000100000000000005646e732d32056c61646f74026e6c0000010001 80ad8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38535 074000000001000000000000046e733032066368656c6c6f026e6c0000010001 074080000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 38536 074100000001000000000000036e73310974656c656b6162656c026e6c0000010001 074180000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 38537 5b84000000010000000000000965696e64686f76656e026e6c00000f0001 5b84800000010000000200020965696e64686f76656e026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 38538 52290000000100000000000006617363696e74026e6c00001c0001 52298000000100000002000206617363696e74026e6c00001c0001c00c0002000100015180000b036e73310461786974c013c00c00020001000151800006036e7332c02bc027000100010001518000043e3a440bc03e000100010001518000043e3a440c 38539 122800000001000000000000056d616e726f026e6c0000010001 122880000001000000020002056d616e726f026e6c0000010001c00c00020001000151800018036e733111736d616c6c686f6c642d686f7374696e67c012c00c00020001000151800006036e7332c02ac026000100010001518000045104730ec04a000100010001518000045104730f 38540 e507000000010000000000000377777706707261786973026e6c0000010001 e507800000010000000300030377777706707261786973026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c017c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02fc02b00010001000151800004c3f13ceec04700010001000151800004c372eb43c059000100010001518000043e320e8f 38541 ed320000000100000000000006535049444552034e4c52024e4c0000010001 ed328000000100000002000206535049444552034e4c52024e4c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c00c00010001000151800004891150c8c03900010001000151800004c0576a65 38542 d6ed00000001000000000000037777770b726f62626572746d616173026e6c0000010001 d6ed80000001000000020002037777770b726f62626572746d616173026e6c0000010001c0100002000100015180000e036e73310769736973776562c01cc01000020001000151800006036e7334c034c03000010001000151800004d4ccca65c04a00010001000151800004510440fa 38543 934d00000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 934d80000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 38544 d474000000010000000000000a77696c6c6973617761790564656d6f6e026e6c0000010001 d474800000010000000300020a77696c6c6973617761790564656d6f6e026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c0170002000100015180000f036e73320564656d6f6e036e657400c03100010001000151800004c29f4906c04300010001000151800004c29fb004 38545 2889000000010000000000000470627269026e6c0000010001 2889800000010000000200020470627269026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 38546 baec00000001000000000000096e6564636f73766572026e6c00000f0001 baec80000001000000020002096e6564636f73766572026e6c00000f0001c00c00020001000151800010036e7331097468652d676c6f6265c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d584b482c04600010001000151800004d584b483 38547 2a5c000000010000000000000377777707696e2d666c6f77026e6c0000010001 2a5c800000010000000200000377777707696e2d666c6f77026e6c0000010001c01000020001000151800013036e73310969706f776572776562036e657400c01000020001000151800013036e73310969706f776572646e7303636f6d00 38548 390a0000000100000000000003495043026e6c0000020001 390a8000000100000002000203495043026e6c0000020001c00c0002000100015180000e036e733007656173796e6574c010c00c00020001000151800006036e7331c028c02400010001000151800004c2a55e01c03e00010001000151800004c2a55e05 38549 b3d4000000010000000000000663616e646561026e6c00000f0001 b3d4800000010000000300030663616e646561026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 38550 838100000001000000000000037777770c6d73692d636f6d7075746572026e6c0000010001 838180000001000000020002037777770c6d73692d636f6d7075746572026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01dc01000020001000151800006036e7332c035c03100010001000151800004d43d0f08c04f00010001000151800004d43d19e2 38551 7cf600000001000000000000037777771168657472696a6b656c616e646c6576656e026e6c0000010001 7cf680000001000000020001037777771168657472696a6b656c616e646c6576656e026e6c0000010001c01000020001000151800013026e730d62616c6c6173742d6e6564616dc022c01000020001000151800013036e7332026e6c0669676e697465036e657400c036000100010001518000043eadcea1 38552 42f50000000100000000000003777777026a73026e6c0000010001 42f58000000100000002000203777777026a73026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c013c01000020001000151800006036e7332c02ac02700010001000151800004d5e38d0ac04400010001000151800004d5e38205 38553 b166000000010000000000000873696c69636f6d70026e6c00000f0001 b166800000010000000200000873696c69636f6d70026e6c00000f0001c00c0002000100015180000f05646e73303103697032036e657400c00c0002000100015180000805646e733032c02f 38554 faee00000001000000000000076367692d6e657706787334616c6c026e6c0000010001 faee80000001000000030002076367692d6e657706787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 38555 9ffe00000001000000000000037777770962696f73636f70656e036c6178026e6c0000010001 9ffe80000001000000020000037777770962696f73636f70656e036c6178026e6c0000010001c01a00020001000151800014036e73310a646f6c7068696e2d6973036e657400c01a00020001000151800006036e7332c036 38556 b84b00000001000000000000036e733209776570726f76696465026e6c0000010001 b84b80000001000000020002036e733209776570726f76696465026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9db5c00c00010001000151800004d5ef9dbe 38557 436200000001000000000000036e733109776570726f76696465026e6c0000010001 436280000001000000020002036e733109776570726f76696465026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9db5c03c00010001000151800004d5ef9dbe 38558 bf0400000001000000000000046f6f636c026e6c00000f0001 bf0484030001000000010000046f6f636c026e6c00000f0001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 38559 55b40000000100000000000003777777096465736d6f657a656e026e6c0000010001 55b48000000100000002000103777777096465736d6f657a656e026e6c0000010001c01000020001000151800023097765626d696e642d3108637573746f6d6572026e6c07656173796e6574036e657400c0100002000100015180000e036e733007656173796e6574c01ac05d00010001000151800004c2a55e01 38560 076f00000001000000000000036e733103757063026e6c0000010001 076f80000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 38561 b5fd00000001000000000000037777770a6a75737475733466756e026e6c0000010001 b5fd80000001000000020000037777770a6a75737475733466756e026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 38562 42610000000100000000000005646e732d31056c61646f74026e6c0000010001 42618000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38563 2326000000010000000000000a7261626f68617474656d026e6c00000f0001 2326800000010000000200000a7261626f68617474656d026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c017c00c0002000100015180000704686e7331c030 38564 b0b40000000100000000000005646e732d32056c61646f74026e6c0000010001 b0b48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38565 4c320000000100000000000003736462026e6c0000020001 4c328000000100000002000203736462026e6c0000020001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 38566 7c6c00000001000000000000046e743036036d7069026e6c0000010001 7c6c80000001000000020002046e743036036d7069026e6c0000010001c011000200010001518000080573756e3032c011c01100020001000151800006036e7332c011c02900010001000151800004c0574f3ec03d00010001000151800004c0574f37 38567 a8ea0000000100000000000003777777076d796f6b696e65026e6c0000010001 a8ea8000000100000003000303777777076d796f6b696e65026e6c0000010001c0100002000100015180000e036e733107686f7374696e67c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c000100010001518000043e818b01c046000100010001518000043e818b02c058000100010001518000043e818ae1 38568 cc470000000100000000000005646e732d31056c61646f74026e6c0000010001 cc478000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38569 e1a90000000100000000000005646e732d32056c61646f74026e6c0000010001 e1a98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38570 dd200000000100000000000003626c3402626c06787334616c6c026e6c0000010001 dd208000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38571 6e900000000100000000000003626c3402626c06787334616c6c026e6c0000260001 6e908000000100000003000203626c3402626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38572 e4e40010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 e4e48000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 38573 ae64000000010000000000000777616e61646f6f026e6c00001c0001 ae64800000010000000200010777616e61646f6f026e6c00001c0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 38574 4b160000000100000000000003777777066b6e6f776d65026e6c0000010001 4b168000000100000002000003777777066b6e6f776d65026e6c0000010001c0100002000100015180000e036e73330767617574656e67c017c01000020001000151800006036e7334c02f 38575 e4e40000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 e4e48000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 38576 31170000000100000000000003777777086c65747373746174026e6c0000010001 31178000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 38577 d73d00000001000000000000037777770d76726564657376726575676465026e6c0000010001 d73d80000001000000030003037777770d76726564657376726575676465026e6c0000010001c0100002000100015180000b04646e733103766970c01ec0100002000100015180000704646e7332c037c0100002000100015180000704646e7333c037c03200010001000151800004d44fe803c04900010001000151800004c3f5c782c05c00010001000151800004d44ff303 38578 eefc00000001000000000000096c6567616c63617265026e6c0000010001 eefc80000001000000030001096c6567616c63617265026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc016c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c048c02a000100010001518000043efa0202 38579 4c120000000100000000000003777777097472657374656c6c65026e6c0000010001 4c128000000100000002000203777777097472657374656c6c65026e6c0000010001c0100002000100015180000c04646e73310471776562c01ac0100002000100015180000704646e7332c033c02e00010001000151800004d994ac0cc04600010001000151800004d5c42f6c 38580 14960000000100000000000003777777066d696e627a6b026e6c0000010001 14968000000100000003000203777777066d696e627a6b026e6c0000010001c0100002000100015180000d036e7331066d696e646566c017c01000020001000151800006036e7332c02fc01000020001000151800012036e7331086e65746e616d6573036e657400c02b00010001000151800004d9a9e7c6c04400010001000151800004d9a9e7c5 38581 774a0000000100000000000005646e732d31056c61646f74026e6c0000010001 774a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38582 6cd30000000100000000000005646e732d32056c61646f74026e6c0000010001 6cd38000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38583 6f6800000001000000000000036e7332086e6f766178657373026e6c0000010001 6f6880000001000000030003036e7332086e6f766178657373026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d5c98015c00c00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 38584 6f6900000001000000000000036e7331086e6f766178657373026e6c0000010001 6f6980000001000000030003036e7331086e6f766178657373026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5c98015c03b00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 38585 de7600000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 de7680000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 38586 792c00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 792c80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 38587 bacd0000000100000000000003777777076578616d696e65026e6c0000010001 bacd8000000100000003000203777777076578616d696e65026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 38588 adb300000001000000000000036e73320f444f4d41494e2d5245474953545259026e6c00001c0001 adb380000001000000030002036e73320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 38589 4a6400000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 4a6480000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 38590 9e0d00000001000000000000037777770a64757463687465656e73026e6c0000010001 9e0d80000001000000020001037777770a64757463687465656e73026e6c0000010001c0100002000100015180000a026e7304696d636fc01bc01000020001000151800013036e7332097669727475616c787303636f6d00c02f000100010001518000043e81810a 38591 179c0000000100000000000004626e6e75066c616e646973026e6c00000f0001 179c8000000100000002000104626e6e75066c616e646973026e6c00000f0001c01100020001000151800006036e7331c011c0110002000100015180000b026e73026e6c036e657400c02c00010001000151800004c2b2b6a0 38592 b4ea00000001000000000000026e7306787334616c6c026e6c0000010001 b4ea80000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 38593 69eb0000000100000000000004766d696a026e6c00000f0001 69eb8000000100000002000004766d696a026e6c00000f0001c00c00020001000151800013046e733031086772616669636f6d03636f6d00c00c00020001000151800007046e733032c02a 38594 844600000001000000000000026e730874656c6567617465026e6c0000010001 844680000001000000030000026e730874656c6567617465026e6c0000010001c00f00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00f00020001000151800006036e7332c030c00f00020001000151800006036e7333c030 38595 4e2900000001000000000000055f6c646170045f746370026463065f6d736463730a32303030736572766572026e6c0000060001 4e2984030001000000010000055f6c646170045f746370026463065f6d736463730a32303030736572766572026e6c0000060001c02c00060001000038400036026e730f646f6d61696e2d7265676973747279c02c0a686f73746d6173746572c0430bf1e540000070800000384000278d0000003840 38596 64da28000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573106b72656e73636f6e73756c74616e6379026e6c0000210001000002580022000000640058066e69656c7331106b72656e73636f6e73756c74616e6379026e6c00 64daa8040000000000000000 38597 c86e00000001000000000000046265616e026e6c00000f0001 c86e80000001000000020002046265616e026e6c00000f0001c00c00020001000151800010036e733109696e746572686f7374c011c00c00020001000151800006036e7335c029c02500010001000151800004d91a7429c04100010001000151800004d554e583 38598 6b260000000100000000000003777777067a7376737468026e6c0000010001 6b268403000100000001000003777777067a7376737468026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 38599 aa5000000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 aa5080000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 38600 d59f00000001000000000000036e73320863616d627269756d026e6c0000010001 d59f80000001000000020002036e73320863616d627269756d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d9131082c00c00010001000151800004d5efb202 38601 000000007002400026770000020405ac01010402 000080010000000000000000 38602 f2720000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f2728000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38603 d42100000001000000000000026e7303656369026e6c0000010001 d42180000001000000020000026e7303656369026e6c0000010001c00f0002000100015180000d036e7333036b706e036e657400c00f00020001000151800006036e7334c02b 38604 01170010000100000000000103667470056e6c757567026e6c00000100010000290800000000000000 01178000000100000002000203667470056e6c757567026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000f067365727669780574756e6978c016c02a00010001000151800004c2e51b230000291000000000000000 38605 b7b516e85010441080750000000000000000 b7b596e40000000000000000 38606 dd3600000001000000000000026e73066863636e6574026e6c0000010001 dd3680000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 38607 658f00000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 658f80000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 38608 579e00000001000000000000066d61737465720364746f07747564656c6674026e6c0000260001 579e80000001000000050005066d61737465720364746f07747564656c6674026e6c0000260001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 38609 b7b516e8501844102fb1000000943310000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76a403c48ea0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 b7b596e40000000000000000 38610 c0a500000001000000000000036e73310774656c666f7274026e6c0000010001 c0a580000001000000020001036e73310774656c666f7274026e6c0000010001c01000020001000151800002c00cc01000020001000151800014036e733202657507636f6e63657274036e657400c00c00010001000151800004d5c22815 38611 563500000001000000000000055f6c646170045f746370026463065f6d736463730a32303030736572766572026e6c0000060001 563584030001000000010000055f6c646170045f746370026463065f6d736463730a32303030736572766572026e6c0000060001c02c00060001000038400036026e730f646f6d61696e2d7265676973747279c02c0a686f73746d6173746572c0430bf1e540000070800000384000278d0000003840 38612 76710000000100000000000003777777056272697461026e6c0000010001 76718000000100000002000103777777056272697461026e6c0000010001c0100002000100015180000a036e733303777873c016c01000020001000151800006036e7334c02ec04000010001000151800004d5ef9a65 38613 b7b516f6501144027fde0000000000000000 b7b596f40000000000000000 38614 74200000000100000000000003777777167765657273746174696f6e2d646f6574696e6368656d026e6c0000010001 74208000000100000002000003777777167765657273746174696f6e2d646f6574696e6368656d026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800018036e73310e73706c69742d696e66696e697479036e657400 38615 0000000070024000603d0000020405ac01010402 000080010000000000000000 38616 6a4900000001000000000000046d61696c0f64616d656e2d686f6f67657a616e64026e6c0000010001 6a4980000001000000020002046d61696c0f64616d656e2d686f6f67657a616e64026e6c0000010001c01100020001000151800012026e730c696e746572636f6e6e656374c021c01100020001000151800006036e7332c038c03500010001000151800004d453c005c05300010001000151800004d453c006 38617 b7b516f7501044027fdd0000000000000000 b7b596f40000000000000000 38618 f17e00000001000000000000026e730874656c6567617465026e6c0000010001 f17e80000001000000030000026e730874656c6567617465026e6c0000010001c00f00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00f00020001000151800006036e7332c030c00f00020001000151800006036e7333c030 38619 b7b59189501044103f9a0000000000000000 38620 e801000000010000000000000762616e6e65727303696d73026e6c0000010001 e801800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 38621 b7b59189501844103ef200000094e3f4000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76a403c48ea0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 38622 bc0600000001000000000000055f6c646170045f74637003706463065f6d736463730b6577772d6e65747765726b026e6c0000210001 bc0684030001000000010000055f6c646170045f74637003706463065f6d736463730b6577772d6e65747765726b026e6c0000210001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 38623 73f00000000100000000000004686f6d6508636f6e6365707473026e6c0000010001 73f08000000100000002000204686f6d6508636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac0110002000100015180000704646e7332c011c02e00010001000151800004d5c51c03c04b00010001000151800004d5c51e1c 38624 4fc200000001000000000000037777770c73636872696a66746166656c026e6c0000010001 4fc280000001000000020002037777770c73636872696a66746166656c026e6c0000010001c01000020001000151800011036e73310a6f6e6c696e6534796f75c01dc01000020001000151800006036e7332c035c031000100010001518000043e3a205bc04e000100010001518000043e3a205c 38625 813100000001000000000000037777770b62657665696c6967696e67026e6c0000010001 813180000001000000020000037777770b62657665696c6967696e67026e6c0000010001c0100002000100015180000e026e73056e65647873036e657400c01000020001000151800006036e7332c033 38626 b7b59197501144023f030000000000000000 38627 b2240000000100000000000003777777076675636b776562026e6c0000010001 b2248000000100000002000203777777076675636b776562026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa011c04700010001000151800004d5efa075 38628 000000007002400004800000020405ac01010402 000080010000000000000000 38629 907500000001000000000000036e73310770726f74656f6e026e6c0000010001 907580000001000000020002036e73310770726f74656f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c1433804c03a00010001000151800004d4992b27 38630 00be00000001000000000000036e73310770726f74656f6e026e6c0000260001 00be80000001000000020002036e73310770726f74656f6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c1433804c03a00010001000151800004d4992b27 38631 005f00000001000000000000036e73320770726f74656f6e026e6c0000010001 005f80000001000000020002036e73320770726f74656f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c1433804c00c00010001000151800004d4992b27 38632 f96800000001000000000000036e73320770726f74656f6e026e6c0000260001 f96880000001000000020002036e73320770726f74656f6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c1433804c00c00010001000151800004d4992b27 38633 94b10000000100000000000003667470056e6c757567026e6c0000010001 94b18000000100000002000103667470056e6c757567026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000f067365727669780574756e6978c016c02a00010001000151800004c2e51b23 38634 a5eb00000001000000000000026e7304696d636f026e6c0000010001 a5eb80000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 38635 e54600000001000000000000087879626a79626566026e6c00000f0001 e54684030001000000010000087879626a79626566026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 38636 833c00000001000000000000026e7304696d636f026e6c0000010001 833c80000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 38637 a0ea00000001000000000000026e7304696d636f026e6c0000260001 a0ea80000001000000020001026e7304696d636f026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 38638 9754000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 9754800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 38639 ba540000000100000000000003777777057374756c7a026e6c0000010001 ba548000000100000002000203777777057374756c7a026e6c0000010001c01000020001000151800012036e73310b667574757265747261696ec016c01000020001000151800006036e7332c02ec02a0001000100015180000451112850c0480001000100015180000451112859 38640 db3b00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 db3b80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38641 bb6500000001000000000000056172657365026e6c00001c0001 bb6580000001000000030002056172657365026e6c00001c0001c00c0002000100015180000d036e733106776964657873c012c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02ac02600010001000151800004d4ccc0fcc05b000100010001518000043efa0703 38642 2b0900000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 2b0980000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38643 0d8d00000001000000000000026e7304696d636f026e6c00001c0001 0d8d80000001000000020001026e7304696d636f026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 38644 8a5d00000001000000000000026e7304696d636f026e6c0000260001 8a5d80000001000000020001026e7304696d636f026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 38645 35f3000000010000000000000a6a6f6f706e6f6c74656e026e6c00000f0001 35f3800000010000000200000a6a6f6f706e6f6c74656e026e6c00000f0001c00c00020001000151800013026e730a6e61616d736572766572036e657400c00c00020001000151800006036e7331c02e 38646 afec00000001000000000000026e73056269626974026e6c0000010001 afec80000001000000030002026e73056269626974026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00f00020001000151800006036e7332c00fc00c00010001000151800004d4ce201fc04e00010001000151800004d4ce2020 38647 ef5300000001000000000000036e7332056269626974026e6c0000010001 ef5380000001000000030002036e7332056269626974026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800002c00cc02a00010001000151800004d4ce201fc00c00010001000151800004d4ce2020 38648 29b500000001000000000000037777770a3131746567656e313030026e6c0000010001 29b584030001000000010000037777770a3131746567656e313030026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 38649 465700000001000000000000076e6f74626c7565026e6c00000f0001 465780000001000000020000076e6f74626c7565026e6c00000f0001c00c00020001000151800010036e733109666972737466696e64c014c00c00020001000151800006036e7332c02c 38650 b7b59198501044023f020000000000000000 38651 b7b677b150104410fdb30000000000000000 b7b6f7b40000000000000000 38652 b7b677b150184410f59300000094eb6c000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76a403c48ea0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 b7b6f7b40000000000000000 38653 b7b677bf50114402fd1c0000000000000000 b7b6f7b40000000000000000 38654 04ad00000001000000000000036c7865026e6c00000f0001 04ad80000001000000020000036c7865026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 38655 2182000000010000000000000377777703646572026e6c0000010001 2182800000010000000200000377777703646572026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 38656 b7b677c050104402fd1b0000000000000000 b7b6f7c40000000000000000 38657 6038000000010000000000000476627a61026e6c0000010001 6038800000010000000300020476627a61026e6c0000010001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 38658 258800000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 258880000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38659 cfe800000001000000000000086d6f6c64726f7374026e6c0000010001 cfe880000001000000020000086d6f6c64726f7374026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c015c00c0002000100015180000704686e7331c02e 38660 e799000000010000000000000762736d74702d3108636f6e6365707473026e6c0000010001 e799800000010000000200020762736d74702d3108636f6e6365707473026e6c0000010001c0140002000100015180001103646e730a636f6e63657074736661c01dc0140002000100015180000704646e7332c014c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e1c 38661 65f800000001000000000000064d454e534543024e4c00000f0001 65f880000001000000020000064d454e534543024e4c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 38662 5a60000000010000000000000c68756e6b656d6f656c6c6572026e6c0000010001 5a60800000010000000300030c68756e6b656d6f656c6c6572026e6c0000010001c00c00020001000151800010036e7331096d61726b6772616166c019c00c00020001000151800006036e7332c031c00c00020001000151800006036e7333c031c02d00010001000151800004c3f13ceec04900010001000151800004c372eb43c05b000100010001518000043e320e8f 38663 b25800000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 b25880000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38664 532f000000010000000000000765786861757374086865696a6d616e73026e6c0000010001 532f800000010000000200020765786861757374086865696a6d616e73026e6c0000010001c01400020001000151800006036e7331c014c0140002000100015180000b086578686175737432c014c03100010001000151800004c1ad9303c04300010001000151800004d47b0e91 38665 529c00000001000000000000036e7332066e6c74726565026e6c0000010001 529c80000001000000020002036e7332066e6c74726565026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d4b20403c00c00010001000151800004d5881e45 38666 58750000000100000000000006776468303131066e7434616c6c026e6c0000010001 58758000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 38667 6f1e00000001000000000000066d616372617006746d66776562026e6c00000f0001 6f1e80000001000000020000066d616372617006746d66776562026e6c00000f0001c01300020001000151800011056c656d6f6e0571696e6970036e657400c01300020001000151800007046c696d65c034 38668 e497000000010000000000001270726f64756374696f6e706172746e657273026e6c00000f0001 e497800000010000000300011270726f64756374696f6e706172746e657273026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc01fc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c051c033000100010001518000043efa0202 38669 99d70000000100000000000003777777067477656e6f74026e6c0000010001 99d78000000100000002000003777777067477656e6f74026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c031 38670 43bb00000001000000000000026e73077374617272656e026e6c0000010001 43bb80000001000000020002026e73077374617272656e026e6c0000010001c00f0002000100015180000c036e73310563736e6574c017c00f00020001000151800006036e7332c02fc02b00010001000151800004c2451012c04300010001000151800004c2451212 38671 ce38000000010000000000000377777709636c75626d616e676f026e6c0000010001 ce38800000010000000200020377777709636c75626d616e676f026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 38672 5324000000010000000000000661746b696e73046d796762026e6c0000010001 5324800000010000000300020661746b696e73046d796762026e6c0000010001c0130002000100015180000d036e733106776964657873c018c01300020001000151800010036e733206776964657873036e657400c01300020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 38673 369b000000010000000000000970726f6d6f74696d65026e6c00000f0001 369b800000010000000300030970726f6d6f74696d65026e6c00000f0001c00c0002000100015180000a036e733103696467c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a0001000100015180000451af4646c0400001000100015180000451af4647c05200010001000151800004d5a0fde6 38674 80cb00000001000000000000086172616d69736b6103696165026e6c0000010001 80cb80000001000000020002086172616d69736b6103696165026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c019c01500020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 38675 7d7600000001000000000000046f70656e096e6c6e65746c616273026e6c00001c0001 7d7680000001000000030003046f70656e096e6c6e65746c616273026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000f056f6d76616c067465646e6574c01bc0110002000100015180000e06627572656175047369646ec01bc00c00010001000151800004d59ae001c03d00010001000151800004d59ae011c05800010001000151800004c1b090a2 38676 24a300000001000000000000046f70656e096e6c6e65746c616273026e6c0000260001 24a380000001000000030003046f70656e096e6c6e65746c616273026e6c0000260001c01100020001000151800002c00cc0110002000100015180000f056f6d76616c067465646e6574c01bc0110002000100015180000e06627572656175047369646ec01bc00c00010001000151800004d59ae001c03d00010001000151800004d59ae011c05800010001000151800004c1b090a2 38677 1dbf0000000100000000000006627572656175047369646e026e6c00001c0001 1dbf8000000100000002000206627572656175047369646e026e6c00001c0001c01300020001000151800002c00cc01300020001000151800011046f70656e096e6c6e65746c616273c018c00c00010001000151800004c1b090a2c03a00010001000151800004d59ae001 38678 96270000000100000000000006627572656175047369646e026e6c0000260001 96278000000100000002000206627572656175047369646e026e6c0000260001c01300020001000151800002c00cc01300020001000151800011046f70656e096e6c6e65746c616273c018c00c00010001000151800004c1b090a2c03a00010001000151800004d59ae001 38679 742d00000001000000000000086261636f696e666f026e6c00000f0001 742d80000001000000030001086261636f696e666f026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 38680 aee800000001000000000000037777770a6467762d7475726e656e026e6c0000010001 aee880000001000000030000037777770a6467762d7475726e656e026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c035c0100002000100015180000805646e733132c035 38681 97720000000100000000000003777777046c657861026e6c0000010001 97728000000100000003000203777777046c657861026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 38682 7c5c0000000100000000000007746e6c6e7473340777616c646f6f72026e6c0000010001 7c5c8000000100000002000207746e6c6e7473340777616c646f6f72026e6c0000010001c0140002000100015180000f026e7309656174736572766572c01cc01400020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 38683 39400000000100000000000009776d62626568656572026e6c0000010001 39408000000100000002000209776d62626568656572026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c016c00c00020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 38684 839f0000000100000000000007646f6c66696a6e026e6c00000f0001 839f8000000100000003000307646f6c66696a6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 38685 5cc800000001000000000000076d61696c6d696a026e6c00000f0001 5cc880000001000000020002076d61696c6d696a026e6c00000f0001c00c0002000100015180000b026e73057162616c6cc014c00c0002000100015180000f026e7309747269706c652d6974c014c02800010001000151800004d584b024c03f00010001000151800004d584b002 38686 67df00100001000000000001026e7303626974026e6c00000100010000290800000000000000 67df80000001000000030004026e7303626974026e6c0000010001c00f0002000100015180000a076e736175746831c00fc00f0002000100015180000a076e736175746832c00fc00f0002000100015180000a076e736175746833c00fc02700010001000151800004d5880c33c03d00010001000151800004d5880c3bc05300010001000151800004d4ccc00b0000291000000000000000 38687 a5a800100001000000000001026e7303626974026e6c00002600010000290800000000000000 a5a880000001000000030004026e7303626974026e6c0000260001c00f0002000100015180000a076e736175746831c00fc00f0002000100015180000a076e736175746832c00fc00f0002000100015180000a076e736175746833c00fc02700010001000151800004d5880c33c03d00010001000151800004d5880c3bc05300010001000151800004d4ccc00b0000291000000000000000 38688 52d400100001000000000001036e733203626974026e6c00000100010000290800000000000000 52d480000001000000030004036e733203626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b0000291000000000000000 38689 aa14000000010000000000000a73617373656e6865696d026e6c0000ff0001 aa14800000010000000200020a73617373656e6865696d026e6c0000ff0001c00c0002000100015180000d03706e7306636f6d6c6f67c017c00c0002000100015180000603736e73c02fc02b00010001000151800004d5a0c803c04400010001000151800004d5a0c804 38690 14da00100001000000000001036e733203626974026e6c00002600010000290800000000000000 14da80000001000000030004036e733203626974026e6c0000260001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b0000291000000000000000 38691 0a6d00000001000000000000026e7303626974026e6c0000010001 0a6d80000001000000030003026e7303626974026e6c0000010001c00f0002000100015180000a076e736175746831c00fc00f0002000100015180000a076e736175746832c00fc00f0002000100015180000a076e736175746833c00fc02700010001000151800004d5880c33c03d00010001000151800004d5880c3bc05300010001000151800004d4ccc00b 38692 02e000000001000000000000026e7303626974026e6c0000260001 02e080000001000000030003026e7303626974026e6c0000260001c00f0002000100015180000a076e736175746831c00fc00f0002000100015180000a076e736175746832c00fc00f0002000100015180000a076e736175746833c00fc02700010001000151800004d5880c33c03d00010001000151800004d5880c3bc05300010001000151800004d4ccc00b 38693 c09d00000001000000000000036e733203626974026e6c0000010001 c09d80000001000000030003036e733203626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 38694 786f00000001000000000000036e733203626974026e6c0000260001 786f80000001000000030003036e733203626974026e6c0000260001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 38695 36e6000000010000000000000377777705766f6c766f026e6c0000010001 36e6800000010000000200020377777705766f6c766f026e6c0000010001c0100002000100015180000e036e733107616e7461726573c016c01000020001000151800006036e7332c02ec02a000100010001518000043e3a260bc044000100010001518000043e3a260c 38696 04aa00000001000000000000036e73330a6f70656e2d646f6f7273026e6c0000010001 04aa80000001000000020002036e73330a6f70656e2d646f6f7273026e6c0000010001c01000020001000151800006036e7335c010c01000020001000151800006036e7336c010c02f000100010001518000045117e85ac041000100010001518000045117e85b 38697 e23700000001000000000000036e73340a6f70656e2d646f6f7273026e6c0000010001 e23780000001000000020002036e73340a6f70656e2d646f6f7273026e6c0000010001c01000020001000151800006036e7335c010c01000020001000151800006036e7336c010c02f000100010001518000045117e85ac041000100010001518000045117e85b 38698 52da0000000100000000000005646e732d31056c61646f74026e6c0000010001 52da8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38699 deed0000000100000000000005646e732d32056c61646f74026e6c0000010001 deed8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38700 aa28000000010000000000000377777709736b69646972656374026e6c0000010001 aa28800000010000000200000377777709736b69646972656374026e6c0000010001c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec035 38701 4091000000010000000000000874656c65776f7278026e6c00000f0001 4091800000010000000200000874656c65776f7278026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02d 38702 89f200000001000000000000036e7332046372696f026e6c0000010001 89f280000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 38703 661d000000010000000000000377777708686f746c696e6b73026e6c0000010001 661d800000010000000200000377777708686f746c696e6b73026e6c0000010001c0100002000100015180000b036e7331046372696fc019c01000020001000151800006036e7332c031 38704 42e900000001000000000000066d696e646564026e6c00000f0001 42e980000001000000030003066d696e646564026e6c00000f0001c00c00020001000151800011036e73310a74727565736572766572c013c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02bc02700010001000151800004d5ef8003c04400010001000151800004d5efb004c05600010001000151800004d5ef8005 38705 6cb90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 6cb98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38706 01910000000100000000000003626c3102626c06787334616c6c026e6c0000260001 01918000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38707 af3c0000000100000000000003777777066a757269616e026e6c0000010001 af3c8000000100000002000003777777066a757269616e026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c02f 38708 0c220000000100000000000003626c3102626c06787334616c6c026e6c0000010001 0c228000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38709 37ce0000000100000000000009652d6c756e61746963026e6c0000010001 37ce8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38710 2f6000000001000000000000036e73310b7669616e6574776f726b73026e6c0000010001 2f6080000001000000020002036e73310b7669616e6574776f726b73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 38711 97b000000001000000000000036e73320b7669616e6574776f726b73026e6c0000010001 97b080000001000000020002036e73320b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 38712 c1c500000001000000000000026763065f6d7364637306646d616d3031026e6c0000060001 c1c584030001000000010000026763065f6d7364637306646d616d3031026e6c0000060001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 38713 863a000000010000000000000b627275696e2d656e2d636f026e6c0000010001 863a800000010000000200000b627275696e2d656e2d636f026e6c0000010001c00c00020001000151800014036e73310a63616c69666f726e6961036e657400c00c00020001000151800010036e7331066f616b77656203636f6d00 38714 5ece0000000100000000000006787334616c6c026e6c00001c0001 5ece8000000100000003000206787334616c6c026e6c00001c0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 38715 194f00000001000000000000037777770f70636d7374617469737469656b656e026e6c0000010001 194f80000001000000020002037777770f70636d7374617469737469656b656e026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c020c01000020001000151800006036e7332c037c03400010001000151800004d9aa2042c04d00010001000151800004d9aa2c06 38716 264e000000010000000000000575726975730473656d61026e6c0000010001 264e800000010000000300030575726975730473656d61026e6c0000010001c01200020001000151800012047072693103646e73067073696e6574c017c012000200010001518000070470726932c030c012000200010001518000070470726933c030c02b000100010001518000049a0ff9a6c049000100010001518000049a0ff9aac05c000100010001518000049a0ff9ae 38717 a09100000001000000000000037777770b73672d706172746e657273026e6c0000010001 a09180000001000000020002037777770b73672d706172746e657273026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 38718 0db928000001000100010000026e6c0000060001055f6c646170045f746370026463065f6d736463730a32303030736572766572026e6c00000500fe000000000000c014002100010000025800230000006401850d57494e323030305345525645520a32303030736572766572026e6c00 0db9a8040000000000000000 38719 36100000000100000000000004636e6f63026e6c00000f0001 36108000000100000002000004636e6f63026e6c00000f0001c00c000200010001518000140161026e73096c696e766973696f6e03636f6d00c00c000200010001518000040162c027 38720 041e00000001000000000000036e73340767617574656e67026e6c0000010001 041e80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38721 042400000001000000000000036e73330767617574656e67026e6c0000010001 042480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38722 342e00000001000000000000036e73330767617574656e67026e6c0000010001 342e80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38723 90390000000100000000000004696e666f086263656e7472616c026e6c00001c0001 90398000000100000002000004696e666f086263656e7472616c026e6c00001c0001c0110002000100015180001204646e73310763616c616e7a61036e657400c0110002000100015180000704646e7332c033 38724 49cc00000001000000000000087265696a6c696e67026e6c00000f0001 49cc80000001000000020002087265696a6c696e67026e6c00000f0001c00c00020001000151800016026e730261310d61616161612d686f7374696e67c015c00c00020001000151800006036e7332c02cc02900010001000151800004c30be7e1c04b00010001000151800004c30be7e2 38725 27b60000000100000000000009652d6c756e61746963026e6c0000010001 27b68000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38726 38200000000100000000000009652d6c756e61746963026e6c0000010001 38208000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 38727 92c20000000100000000000004646e733109696e7465726f757465026e6c00001c0001 92c28000000100000002000204646e733109696e7465726f757465026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d4173f3ec03d00010001000151800004d4173f3d 38728 22500000000100000000000004646e733109696e7465726f757465026e6c0000260001 22508000000100000002000204646e733109696e7465726f757465026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d4173f3ec03d00010001000151800004d4173f3d 38729 ed600000000100000000000004646e733209696e7465726f757465026e6c00001c0001 ed608000000100000002000204646e733209696e7465726f757465026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02f00010001000151800004d4173f3ec00c00010001000151800004d4173f3d 38730 9e8f000000010000000000000c62632d6164766f636174656e026e6c00000f0001 9e8f800000010000000200010c62632d6164766f636174656e026e6c00000f0001c00c0002000100015180000a036e733303777873c019c00c00020001000151800006036e7334c031c04300010001000151800004d5ef9a65 38731 f3490000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 f3498000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 38732 d8790000000100000000000008747269617669756d026e6c00000f0001 d8798000000100000002000008747269617669756d026e6c00000f0001c00c0002000100015180000c036e723705692d702d64c015c00c00020001000151800006036e7236c02d 38733 81bf000000010000000000000661646463303102616403687675026e6c0000010001 81bf800000010000000300030661646463303102616403687675026e6c0000010001c0160002000100015180000906776174736f6ec016c0160002000100015180000e036e733107737572666e6574c01ac01600020001000151800006036e7332c016c02e0001000100015180000491592603c04300010001000151800004c0576a65c05d0001000100015180000491595303 38734 d8cf000000010000000000000661646463303202616403687675026e6c0000010001 d8cf800000010000000300030661646463303202616403687675026e6c0000010001c0160002000100015180000906776174736f6ec016c0160002000100015180000e036e733107737572666e6574c01ac01600020001000151800006036e7332c016c02e0001000100015180000491592603c04300010001000151800004c0576a65c05d0001000100015180000491595303 38735 0000000070024000f20a0000020405b401010402 000080010000000000000000 38736 746600000001000000000000036d7069026e6c00000f0001 746680000001000000020002036d7069026e6c00000f0001c00c000200010001518000080573756e3032c00cc00c00020001000151800006036e7332c00cc02400010001000151800004c0574f3ec03800010001000151800004c0574f37 38737 674a00000001000000000000037777770b636c75622d726163696e67026e6c0000010001 674a80000001000000030000037777770b636c75622d726163696e67026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c038c0100002000100015180000a076e73686f737433c038 38738 b7b8ebb55010447076e00000000000000000 38739 1f37000000010000000000000377777703696272026e6c0000010001 1f37800000010000000200020377777703696272026e6c0000010001c0100002000100015180000b026e7305706c616e74c014c01000020001000151800006036e7332c02bc02800010001000151800004d59f0037c03f00010001000151800004d59f0046 38740 65ef28000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d73646373086e6b6f6572696572026e6c000021000100000258001a00000064018506736572766572086e6b6f6572696572026e6c00 65efa8040000000000000000 38741 d75a00000001000000000000036e73310d78786c776562686f7374696e67026e6c0000010001 d75a80000001000000020002036e73310d78786c776562686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104580ac040000100010001518000045104601e 38742 7faa00000001000000000000036e73320d78786c776562686f7374696e67026e6c0000010001 7faa80000001000000020002036e73320d78786c776562686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104580ac00c000100010001518000045104601e 38743 e2e40000000100000000000007782d6571756973026e6c00001c0001 e2e48000000100000002000207782d6571756973026e6c00001c0001c00c00020001000151800014036e73310d78786c776562686f7374696e67c014c00c00020001000151800006036e7332c02cc028000100010001518000045104580ac048000100010001518000045104601e 38744 b7b8ebb550184470510a00000096c39e000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005a03677373096d6963726f736f667403636f6d003707bbc937090d490003000000374e544c4d535350000100000097b200c00a000a002d0000000d000d002000000057494e32303030534552564552323030305345525645520000 38745 a92300000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 a92380000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 38746 c0d70000000100000000000005646e732d31056c61646f74026e6c0000010001 c0d78000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38747 714e0000000100000000000005646e732d32056c61646f74026e6c0000010001 714e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38748 e5bd0000000100000000000003777777036e7263026e6c0000010001 e5bd8000000100000003000203777777036e7263026e6c0000010001c01000020001000151800015036e73310b70696e6b726f6363616465036e657400c0100002000100015180000e026e73086d656761706c6578c014c01000020001000151800006036e7331c04cc04900010001000151800004504f6101c06300010001000151800004504f6102 38749 2feb00000001000000000000037777770b6265616368766f6c6c6579026e6c0000010001 2feb80000001000000020002037777770b6265616368766f6c6c6579026e6c0000010001c0100002000100015180000c026e73067574722d6978c01cc01000020001000151800006036e7332c033c0300001000100015180000451113206c04800010001000151800004d5c42806 38750 d10a000000010000000000000d5352524443303132444d5a303303726463026e6c0000260001 d10a800000010000000200020d5352524443303132444d5a303303726463026e6c0000260001c01a000200010001518000100d7372726463303134646d7a3034c01ac01a00020001000151800002c00cc03200010001000151800004d973e064c00c00010001000151800004d973e054 38751 b3e3000000010000000000000d5352524443303132444d5a303303726463026e6c00001c0001 b3e3800000010000000200020d5352524443303132444d5a303303726463026e6c00001c0001c01a000200010001518000100d7372726463303134646d7a3034c01ac01a00020001000151800002c00cc03200010001000151800004d973e064c00c00010001000151800004d973e054 38752 2b70000000010000000000000d5352524443303134444d5a303403726463026e6c0000260001 2b70800000010000000200020d5352524443303134444d5a303403726463026e6c0000260001c01a00020001000151800002c00cc01a000200010001518000100d7372726463303132646d7a3033c01ac00c00010001000151800004d973e064c04000010001000151800004d973e054 38753 5fd5000000010000000000000d5352524443303134444d5a303403726463026e6c00001c0001 5fd5800000010000000200020d5352524443303134444d5a303403726463026e6c00001c0001c01a00020001000151800002c00cc01a000200010001518000100d7372726463303132646d7a3033c01ac00c00010001000151800004d973e064c04000010001000151800004d973e054 38754 db630000000100000000000006696e6f74657306736178696f6e026e6c0000010001 db638000000100000003000306696e6f74657306736178696f6e026e6c0000010001c013000200010001518000110a6a75666665726265656b0368656ec01ac0130002000100015180000e036e733107737572666e6574c01ac0130002000100015180000b036e7332046873696ac01ac02e00010001000151800004914c0248c04b00010001000151800004c0576a65c065000100010001518000049102d715 38755 31e000000001000000000000095f6b65726265726f73045f7564700f7269732d626172656e647265636874026e6c0000060001 31e084030001000000010000095f6b65726265726f73045f7564700f7269732d626172656e647265636874026e6c0000060001c02b00060001000038400036026e730f646f6d61696e2d7265676973747279c02b0a686f73746d6173746572c0420bf1e540000070800000384000278d0000003840 38756 1b560000000100000000000006656d61696c73026e6c0000010001 1b568000000100000003000006656d61696c73026e6c0000010001c00c0002000100015180000e036e73300477697368036e657400c00c00020001000151800006036e7331c02bc00c00020001000151800006036e7332c02b 38757 b7b8ebc35011446276470000000000000000 38758 5b9f0000000100000000000008686f73746e616d650462696e640000100003 5b9f8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 38759 35eb0000000100000000000008686f73746e616d650462696e640000100003 35eb8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 38760 000000007002400081a30000020405b401010402 000080010000000000000000 38761 00000000700222386dc500000204057801010402 000080010000000000000000 38762 8ef20000000100000000000004474154450345504f026e6c0000010001 8ef28000000100000002000104474154450345504f026e6c0000010001c01100020001000151800002c00cc0110002000100015180000b026e73026e6c036e657400c00c0001000100015180000491408003 38763 cd4200000001000000000000087564656e686f7574026e6c00000f0001 cd4280000001000000020000087564656e686f7574026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02d 38764 13630000000100000000000005646e732d31056c61646f74026e6c0000010001 13638000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38765 a3230000000100000000000005646e732d32056c61646f74026e6c0000010001 a3238000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38766 7cae000000010000000000000c6b76776d616b656c61617273026e6c00000f0001 7cae800000010000000200000c6b76776d616b656c61617273026e6c00000f0001c00c0002000100015180000f026e7306636170696361036e657400c00c00020001000151800006036e7332c030 38767 11ed00000001000000000000085f6b706173737764045f7463700f7269732d626172656e647265636874026e6c0000060001 11ed84030001000000010000085f6b706173737764045f7463700f7269732d626172656e647265636874026e6c0000060001c02a00060001000038400036026e730f646f6d61696e2d7265676973747279c02a0a686f73746d6173746572c0410bf1e540000070800000384000278d0000003840 38768 0e350000000100000000000003626c3102626c06787334616c6c026e6c0000010001 0e358000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38769 f6140000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f6148000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38770 35c10000000100000000000003626c3102626c06787334616c6c026e6c0000260001 35c18000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38771 14cd000000010000000000000377777708706f737462616e6b026e6c0000010001 14cd800000010000000200020377777708706f737462616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c019c01000020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 38772 cc7400000001000000000000096d6573736167696e67086c616e67686f7574026e6c00000f0001 cc7480000001000000020000096d6573736167696e67086c616e67686f7574026e6c00000f0001c01600020001000151800013036e733109752d73657276657273036e657400c01600020001000151800006036e7332c037 38773 b7bc37fc50102648a6740000000000000000 b7bcb7f40000000000000000 38774 c85b000000010000000000000a647664666f6c6965733108696e74726f776562026e6c0000010001 c85b800000010000000200020a647664666f6c6965733108696e74726f776562026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c0340001000100015180000450416028c04600010001000151800004c356780c 38775 33fe00000001000000000000037777770962736d64656a6f6e67026e6c0000010001 33fe80000001000000020001037777770962736d64656a6f6e67026e6c0000010001c0100002000100015180000a036e733303777873c01ac01000020001000151800006036e7334c032c04400010001000151800004d5ef9a65 38776 b7bc37fc50182648d4fd0000008dc800000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcc3403c4e4300030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 b7bcb7f40000000000000000 38777 e52f0000000100000000000003757776026e6c00000f0001 e52f8000000100000002000203757776026e6c00000f0001c00c0002000100015180000906646e73657874c00cc00c0002000100015180000b08757776646e733032c00cc024000100010001518000043e3a2405c039000100010001518000043e3a2406 38778 387c000000010000000000000976616e626f656b656c026e6c00000f0001 387c800000010000000200020976616e626f656b656c026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c016c00c00020001000151800006036e7332c02dc02a00010001000151800004d453c005c04800010001000151800004d453c006 38779 29f000000001000000000000085f6b706173737764045f7564700f7269732d626172656e647265636874026e6c0000060001 29f084030001000000010000085f6b706173737764045f7564700f7269732d626172656e647265636874026e6c0000060001c02a00060001000038400036026e730f646f6d61696e2d7265676973747279c02a0a686f73746d6173746572c0410bf1e540000070800000384000278d0000003840 38780 f1f000000001000000000000037777771063617269626265616e636f6d666f7274026e6c0000010001 f1f080000001000000020000037777771063617269626265616e636f6d666f7274026e6c0000010001c01000020001000151800011036e73310a6d61696e736572766572c021c01000020001000151800006036e7332c039 38781 833f0000000100000000000005646e732d31056c61646f74026e6c0000010001 833f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38782 a5580000000100000000000005646e732d32056c61646f74026e6c0000010001 a5588000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 38783 fbc500000001000000000000037777770962697a617273697465026e6c0000010001 fbc580000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 38784 b7bc380a5011263aa5e40000000000000000 b7bcb8040000000000000000 38785 0000000070022238873c00000204057801010402 000080010000000000000000 38786 25cc000000010000000000000644454d41414e024e4c00000f0001 25cc800000010000000200020644454d41414e024e4c00000f0001c00c0002000100015180000c026e73067574722d6978c013c00c00020001000151800006036e7332c02ac0270001000100015180000451113206c03f00010001000151800004d5c42806 38787 01fb00000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730f7269732d626172656e647265636874026e6c0000060001 01fb84030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730f7269732d626172656e647265636874026e6c0000060001c04600060001000038400036026e730f646f6d61696e2d7265676973747279c0460a686f73746d6173746572c05d0bf1e540000070800000384000278d0000003840 38788 b7b8ebc45010446276460000000000000000 38789 b7bb91ca5010447060610000000000000000 38790 b7bb91ca501844700c3000000096f2fa000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d003707bbc937090d490003000000374e544c4d535350000100000097b200c00a000a002d0000000d000d002000000057494e32303030534552564552323030305345525645520000 38791 f13b00000001000000000000095f6b65726265726f73045f756470086d6f6e73696e6169026e6c0000060001 f13b84030001000000010000095f6b65726265726f73045f756470086d6f6e73696e6169026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 38792 b7bc380b5010263aa5e30000000000000000 b7bcb8040000000000000000 38793 e31300000001000000000000037777770c6578706c6f69746174696f6e026e6c0000010001 e31380000001000000030002037777770c6578706c6f69746174696f6e026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 38794 0da9000000010000000000000377777706676172616d69026e6c0000010001 0da9800000010000000300000377777706676172616d69026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c033c0100002000100015180000a076e73686f737433c033 38795 b7bcf5915010264802560000000000000000 38796 28b0000000010000000000000377777708686f676562727567026e6c0000010001 28b0800000010000000200010377777708686f676562727567026e6c0000010001c01000020001000151800013026e730d62616c6c6173742d6e6564616dc019c01000020001000151800013036e7332026e6c0669676e697465036e657400c02d000100010001518000043eadcea1 38797 57a900000001000000000000046d61696c06636861726973026e6c0000010001 57a980000001000000020000046d61696c06636861726973026e6c0000010001c0110002000100015180000c026e7306766576696461c018c01100020001000151800006036e7332c02f 38798 03100000000100000000000007534552564552310e736c75697465722d64616e6e6572026e6c0000010001 03108000000100000002000007534552564552310e736c75697465722d64616e6e6572026e6c0000010001c0140002000100015180000e036e73320464797873036e657400c01400020001000151800006036e7331c03b 38799 220000000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730f7269732d626172656e647265636874026e6c0000060001 220084030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d736463730f7269732d626172656e647265636874026e6c0000060001c05000060001000038400036026e730f646f6d61696e2d7265676973747279c0500a686f73746d6173746572c0670bf1e540000070800000384000278d0000003840 38800 b7bcf5915018264891e00000008d6800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcc3403c4e4300030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 38801 4d7a00000001000000000000037777770a62696f736167656e6461026e6c0000010001 4d7a80000001000000020002037777770a62696f736167656e6461026e6c0000010001c0100002000100015180000a036e7331036e7873c01bc01000020001000151800006036e7332c033c02f00010001000151800004d973c015c04500010001000151800004d973c102 38802 b7bcf59f5011263a01c60000000000000000 38803 320c00000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730f7269732d626172656e647265636874026e6c0000060001 320c84030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730f7269732d626172656e647265636874026e6c0000060001c05400060001000038400036026e730f646f6d61696e2d7265676973747279c0540a686f73746d6173746572c06b0bf1e540000070800000384000278d0000003840 38804 0000000070022238650600000204057801010402 000080010000000000000000 38805 ef9600000001000000000000037777770b6131626f756c6576617264026e6c0000010001 ef9680000001000000030002037777770b6131626f756c6576617264026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 38806 5c870000000100000000000003777777096861746962616b6f69026e6c0000010001 5c878000000100000002000003777777096861746962616b6f69026e6c0000010001c0100002000100015180000f036e7331053132337873036e657400c01000020001000151800006036e7336c032 38807 0ab90000000100000000000006636861726973026e6c00000f0001 0ab98000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 38808 b7bcf5a05010263a01c50000000000000000 38809 fc66000000010000000000001c61727473656e63656e7472756d766f6f72686f6d656f706174686965026e6c00000f0001 fc66800000010000000200011c61727473656e63656e7472756d766f6f72686f6d656f706174686965026e6c00000f0001c00c0002000100015180000a036e733303777873c029c00c00020001000151800006036e7334c041c05300010001000151800004d5ef9a65 38810 b7bd858150102648502f0000000000000000 38811 321400000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730f7269732d626172656e647265636874026e6c0000060001 321484030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730f7269732d626172656e647265636874026e6c0000060001c05000060001000038400036026e730f646f6d61696e2d7265676973747279c0500a686f73746d6173746572c0670bf1e540000070800000384000278d0000003840 38812 826228000001000000010000026e6c0000060001095f6b65726265726f73045f756470086d6f6e73696e6169026e6c000021000100000258001f0000006400580b7362736d6f6e73696e6169086d6f6e73696e6169026e6c00 8262a8040000000000000000 38813 a2280000000100000000000003777777087370656b6b656c73026e6c0000010001 a2288000000100000002000203777777087370656b6b656c73026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d994ae77c04b000100010001518000045054ea06 38814 b7bd8581501826483fba0000008d0800000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcc3403c4e4300030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 38815 8a1a00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 8a1a80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38816 9be200000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 9be280000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38817 4eaa000000010000000000000b676966706c6161746a6573026e6c0000010001 4eaa800000010000000200000b676966706c6161746a6573026e6c0000010001c00c00020001000151800013036e73310c616374697665646f6d61696ec018c00c00020001000151800006036e7332c030 38818 ea5200000001000000000000026763065f6d7364637306646f6d61696e026e6c0000060001 ea5284030001000000010000026763065f6d7364637306646f6d61696e026e6c0000060001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 38819 9bb0000000010000000000000562696e636b026e6c00000f0001 9bb0800000010000000200020562696e636b026e6c00000f0001c00c0002000100015180000b036e73310470696e65c012c00c00020001000151800006036e7332c02ac02600010001000151800004d59c0201c03d00010001000151800004c3c1a303 38820 3a600000000100000000000003777777046c696e71026e6c0000010001 3a608000000100000002000203777777046c696e71026e6c0000010001c01000020001000151800012036e73310b737461727464657369676ec015c01000020001000151800006036e7332c02dc02900010001000151800004d5f73823c047000100010001518000043ed45149 38821 2c25000000010000000000000331373202323101310131026e6c0000010001 2c25840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 38822 9553000000010000000000000b676966706c6161746a6573026e6c0000010001 9553800000010000000200000b676966706c6161746a6573026e6c0000010001c00c00020001000151800013036e73310c616374697665646f6d61696ec018c00c00020001000151800006036e7332c030 38823 221b00000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730f7269732d626172656e647265636874026e6c0000060001 221b84030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730f7269732d626172656e647265636874026e6c0000060001c04a00060001000038400036026e730f646f6d61696e2d7265676973747279c04a0a686f73746d6173746572c0610bf1e540000070800000384000278d0000003840 38824 21990000000100000000000008706172616469736f026e6c00000f0001 21998000000100000002000208706172616469736f026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 38825 ee80000000010000000000000763616c69626572026e6c00000f0001 ee80800000010000000200000763616c69626572026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 38826 d20700000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 d20780000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38827 763e00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 763e80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 38828 b7bd858f5011263a4f9f0000000000000000 38829 00000000700240001a7a00000204056401010402 000080010000000000000000 38830 d7c00000000100000000000004617270610477656233026e6c0000010001 d7c08000000100000002000204617270610477656233026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02a00010001000151800004d436240ec03c00010001000151800004c2b262ef 38831 35bd0000000100000000000004617270610477656233026e6c0000260001 35bd8000000100000002000204617270610477656233026e6c0000260001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02a00010001000151800004d436240ec03c00010001000151800004c2b262ef 38832 4eb80000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4eb88403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 38833 b7bd85905010263a4f9e0000000000000000 38834 322000000001000000000000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730f7269732d626172656e647265636874026e6c0000060001 322084030001000000010000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730f7269732d626172656e647265636874026e6c0000060001c04400060001000038400036026e730f646f6d61696e2d7265676973747279c0440a686f73746d6173746572c05b0bf1e540000070800000384000278d0000003840 38835 6872000000010000000000000377777709707a7369676e61616c026e6c0000010001 6872800000010000000200020377777709707a7369676e61616c026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c01ac01000020001000151800006036e7332c031c02e00010001000151800004d453c005c04c00010001000151800004d453c006 38836 abec00000001000000000000037777770e626f726465617578646f6767656e026e6c0000010001 abec80000001000000020000037777770e626f726465617578646f6767656e026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01fc0100002000100015180000805646e732d32c039 38837 62da000000010000000000000377777708706f737462616e6b026e6c0000010001 62da800000010000000200020377777708706f737462616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c019c01000020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 38838 b7bb91d8501144625fc80000000000000000 38839 d607000000010000000000000b6d61696c72656c6179303704636d7367026e6c0000010001 d607800000010000000200010b6d61696c72656c6179303704636d7367026e6c0000010001c01800020001000151800006036e7331c018c0180002000100015180000d036e7332036b706e036e657400c03100010001000151800004c2976c83 38840 8ad7000000010000000000000b6d61696c72656c6179303704636d7367026e6c00001c0001 8ad7800000010000000200010b6d61696c72656c6179303704636d7367026e6c00001c0001c01800020001000151800006036e7331c018c0180002000100015180000d036e7332036b706e036e657400c03100010001000151800004c2976c83 38841 00000000700240007ebd0000020405b401010402 000080010000000000000000 38842 b7be6078501040b02df70000000000000000 b7bee0740000000000000000 38843 7f4a000000010000000000000b6d61696c72656c6179303704636d7367026e6c0000010001 7f4a800000010000000200010b6d61696c72656c6179303704636d7367026e6c0000010001c01800020001000151800006036e7331c018c0180002000100015180000d036e7332036b706e036e657400c03100010001000151800004c2976c83 38844 896a00000001000000000000036e7331066d696e646566026e6c0000010001 896a80000001000000020002036e7331066d696e646566026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9a9e7c6c03900010001000151800004d9a9e7c5 38845 44b500000001000000000000036e7332066d696e646566026e6c0000010001 44b580000001000000020002036e7332066d696e646566026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d9a9e7c6c00c00010001000151800004d9a9e7c5 38846 b7be6078501840b0aa3800000092fb2e000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afbc4403c4d440003000000334e544c4d535350000100000097b200e0080008002b0000000b000b00200000005342534d4f4e53494e41494d4f4e53494e41490000 b7bee0740000000000000000 38847 e371000000010000000000000673616d736f6d026e6c0000010001 e371800000010000000200000673616d736f6d026e6c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02b 38848 a2fd00000001000000000000036e7331056132303030026e6c0000010001 a2fd80000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 38849 b7be6086501140a22d620000000000000000 b7bee0840000000000000000 38850 0000000070024000ced900000204056401010402 000080010000000000000000 38851 fb5000000001000000000000036e7334096b6162656c666f6f6e026e6c0000010001 fb5080000001000000020002036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f03 38852 965300000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 965380000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 38853 e94c00000001000000000000026e73076e656473746174026e6c0000010001 e94c80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38854 e94d00000001000000000000036e7333076e656473746174026e6c0000010001 e94d80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38855 b7be6087501040a22d610000000000000000 b7bee0840000000000000000 38856 c0b500000001000000000000037777770b636572746f616476696573026e6c0000010001 c0b580000001000000020001037777770b636572746f616476696573026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01cc01000020001000151800006036e7334c034c03000010001000151800004d5c401c0 38857 4eba0000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4eba8403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 38858 865c0000000100000000000006636f62616c740b666f782d686f7374696e67026e6c0000010001 865c8000000100000002000206636f62616c740b666f782d686f7374696e67026e6c0000010001c01300020001000151800007046e732d31c013c01300020001000151800007046e732d32c013c03300010001000151800004d5bd1374c04600010001000151800004d5bd1675 38859 1a0c000000010000000000000a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000010001 1a0c800000010000000200020a7265736f6c7574696f6e0b666f782d686f7374696e67026e6c0000010001c01700020001000151800007046e732d31c017c01700020001000151800007046e732d32c017c03700010001000151800004d5bd1374c04a00010001000151800004d5bd1675 38860 b7bf9d98501040b0a5350000000000000000 38861 b7bf9d98501840b0870a00000092969c000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afbc4403c4d440003000000334e544c4d535350000100000097b200e0080008002b0000000b000b00200000005342534d4f4e53494e41494d4f4e53494e41490000 38862 6f2800000001000000000000036e7331097472616e7361766961026e6c0000010001 6f2880000001000000020001036e7331097472616e7361766961026e6c0000010001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c23586f1 38863 8314000000010000000000000462617261026e6c0000010001 8314800000010000000200020462617261026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 38864 dda00000000100000000000003777777067874616c6973026e6c0000010001 dda08000000100000002000003777777067874616c6973026e6c0000010001c01000020001000151800018036e73370e666c6578776562686f7374696e6703636f6d00c01000020001000151800006036e7338c02f 38865 4a060000000100000000000006687062696d67056e2d742d64026e6c0000010001 4a068000000100000003000006687062696d67056e2d742d64026e6c0000010001c01300020001000151800017076e73686f73743103737432056c79636575036e657400c0130002000100015180000a076e73686f737432c035c0130002000100015180000a076e73686f737433c035 38866 a503000000010000000000000d53796e636572612d4c6567616c024e4c00000f0001 a503800000010000000200020d53796e636572612d4c6567616c024e4c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c01ac00c00020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 38867 cf2a0000000100000000000005762d6b616d026e6c0000010001 cf2a8000000100000003000305762d6b616d026e6c0000010001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec012c00c00020001000151800006036e7331c02fc00c00020001000151800006036e7332c02fc02600010001000151800004d42d2005c04400010001000151800004d42d2003c05600010001000151800004d42d2103 38868 3ced00000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 3ced80000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 38869 3cee00000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 3cee80000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 38870 b7bf9da6501140a2a4a00000000000000000 38871 0000000070024000319000000204056401010402 000080010000000000000000 38872 f48c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f48c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 38873 d6820000000100000000000009627668737276303031106276682d636f6d6d756e696361746965026e6c0000010001 d6828000000100000002000009627668737276303031106276682d636f6d6d756e696361746965026e6c0000010001c0160002000100015180000e036e73310464646e68036e657400c01600020001000151800006036e7332c03f 38874 140300000001000000000000036e73330471776562026e6c0000010001 140380000001000000020002036e73330471776562026e6c0000010001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02900010001000151800004d994ac0cc03c00010001000151800004d5c42f6c 38875 d8a600000001000000000000036e73350471776562026e6c0000010001 d8a680000001000000020002036e73350471776562026e6c0000010001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02900010001000151800004d994ac0cc03c00010001000151800004d5c42f6c 38876 d3380000000100000000000003777777056572696b73026e6c0000010001 d3388000000100000002000003777777056572696b73026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c016c0100002000100015180000704686e7331c02f 38877 b7bf9da7501040a2a49f0000000000000000 38878 667300000001000000000000037777770d77617465726b616d70696f656e026e6c0000010001 667380000001000000020000037777770d77617465726b616d70696f656e026e6c0000010001c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec039 38879 b7bb91d9501044625fc70000000000000000 38880 b7bf057450104470e9cd0000000000000000 b7bf80010000000000000000 38881 ec5300000001000000000000036e73350471776562026e6c0000260001 ec5380000001000000020002036e73350471776562026e6c0000260001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02900010001000151800004d994ac0cc03c00010001000151800004d5c42f6c 38882 a73300000001000000000000036e73330471776562026e6c0000260001 a73380000001000000020002036e73330471776562026e6c0000260001c0100002000100015180000704646e7331c010c0100002000100015180000704646e7332c010c02900010001000151800004d994ac0cc03c00010001000151800004d5c42f6c 38883 b7bf057450184470c0c800000096c7ce000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005a03677373096d6963726f736f667403636f6d003707bbc937090d490003000000374e544c4d535350000100000097b200c00a000a002d0000000d000d002000000057494e32303030534552564552323030305345525645520000 b7bf80010000000000000000 38884 b7c1a905501040b0fc7c0000000000000000 38885 ef320000000100000000000003777777097574696c6974696573026e6c0000010001 ef328000000100000002000003777777097574696c6974696573026e6c0000010001c0100002000100015180000e026e73056e65647873036e657400c01000020001000151800006036e7332c031 38886 dd89000000010000000000000c776f6c746572656e64726f73026e6c0000ff0001 dd89800000010000000300030c776f6c746572656e64726f73026e6c0000ff0001c00c0002000100015180000f036e7331086e6f766178657373c019c00c00020001000151800006036e7332c031c00c00020001000151800006036e7333c031c02d00010001000151800004d5c98015c04800010001000151800004d5c9bf12c05a00010001000151800004d5ef9c26 38887 785000000001000000000000086469726b6b757974026e6c0000010001 785080000001000000020000086469726b6b757974026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 38888 b7c1a905501840b0a16400000092d389000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afbc4403c4d440003000000334e544c4d535350000100000097b200e0080008002b0000000b000b00200000005342534d4f4e53494e41494d4f4e53494e41490000 38889 b75a000000010000000000000b68616567686567726f6570026e6c0000010001 b75a800000010000000200010b68616567686567726f6570026e6c0000010001c00c0002000100015180000e036e7331076e6564636f6d70c018c00c00020001000151800011036e7332076e6564636f6d70036f726700c02c00010001000151800004c3c1a80d 38890 e996000000010000000000000b616461736f667477617265026e6c0000010001 e996800000010000000200020b616461736f667477617265026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc018c00c00020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 38891 3bd600000001000000000000037777770c74726164652d6f6e6c696e65026e6c0000010001 3bd680000001000000020002037777770c74726164652d6f6e6c696e65026e6c0000010001c0100002000100015180000f0472617131076e657474756e65c01dc01000020001000151800006036e7332c036c03100010001000151800004d4ccf78dc04c00010001000151800004d4ccf78e 38892 2d6300000001000000000000096265726e6172647573026e6c00000f0001 2d6380000001000000020000096265726e6172647573026e6c00000f0001c00c0002000100015180000c026e7306766576696461c016c00c00020001000151800006036e7332c02d 38893 bf0e00000001000000000000036e733007656173796e6574026e6c0000010001 bf0e80000001000000020002036e733007656173796e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c00010001000151800004c2a55e01c03a00010001000151800004c2a55e05 38894 00fd00000001000000000000036e733107656173796e6574026e6c0000010001 00fd80000001000000020002036e733107656173796e6574026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c2a55e01c00c00010001000151800004c2a55e05 38895 08f900000001000000000000036e7331056132303030026e6c0000010001 08f980000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 38896 08fa00000001000000000000036e7332056132303030026e6c0000010001 08fa80000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 38897 76e9000000010000000000000b64656c74616d6172696e65026e6c00000f0001 76e9840300010000000100000b64656c74616d6172696e65026e6c00000f0001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 38898 b7c1a913501140a2fbe70000000000000000 38899 34280000000100000000000006706565776565026e6c00000f0001 34288000000100000002000006706565776565026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02d 38900 eb6b000000010000000000000377777703786174026e6c0000010001 eb6b800000010000000200020377777703786174026e6c0000010001c0100002000100015180000d026e7307686f72697a6f6ec014c01000020001000151800006036e7332c02bc02800010001000151800004d5c51803c04100010001000151800004d5c51805 38901 b7c1a914501040a2fbe60000000000000000 38902 97b0000000010000000000000a7777772c6f7639323932026e6c0000010001 97b0840300010000000100000a7777772c6f7639323932026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 38903 2e0600000001000000000000037777770962697a617273697465026e6c0000010001 2e0680000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 38904 b7bf058250114462e9340000000000000000 b7bf80010000000000000000 38905 77520000000100000000000008656e736368656465026e6c00001c0001 77528000000100000002000208656e736368656465026e6c00001c0001c00c0002000100015180000c036e7331057669727475c015c00c00020001000151800006036e7332c02dc02900010001000151800004d9726102c04100010001000151800004d58141c4 38906 1b38000000010000000000000462617261026e6c00000f0001 1b38800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 38907 898c0000000100000000000003706f700462617274026e6c0000010001 898c8000000100000002000203706f700462617274026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c015c01000020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 38908 090300000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c0000010001 090380000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 38909 ca5a00000001000000000000036e733503777873026e6c0000010001 ca5a80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 38910 12290000000100000000000003777777036d736e026e6c0000010001 12298000000100000003000003777777036d736e026e6c0000010001c0100002000100015180001204646e733302756b046d736674036e657400c0100002000100015180000a04646e7331026370c030c0100002000100015180000a04646e7331026463c030 38911 152600000001000000000000037777770b766f657462616c7a6f6e65026e6c0000010001 152680000001000000030003037777770b766f657462616c7a6f6e65026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c01cc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c0300001000100015180000450474002c04e0001000100015180000450474102c06000010001000151800004d943ee57 38912 b7bf058350104462e9330000000000000000 b7bf80010000000000000000 38913 4f210000000100000000000003656369026e6c00000f0001 4f218000000100000002000003656369026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c028 38914 b0500000000100000000000006636861726973026e6c0000010001 b0508000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 38915 a8b8000000010000000000000f646f6d61696e2d7265676973747279026e6c0000010001 a8b8800000010000000300020f646f6d61696e2d7265676973747279026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000e036e733107737572666e6574c01cc00c0002000100015180000b026e73026e6c036e657400c03000010001000151800004c1b09002c04100010001000151800004c0576a65 38916 417800000001000000000000036e73310a6461632d706c616e6574026e6c0000260001 417880000001000000030003036e73310a6461632d706c616e6574026e6c0000260001c0100002000100015180000c036e7331056264726567c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d44ff4dac04700010001000151800004d44ff642c05900010001000151800004c3f5c70a 38917 20bc00000001000000000000036e73320a6461632d706c616e6574026e6c0000010001 20bc80000001000000030003036e73320a6461632d706c616e6574026e6c0000010001c0100002000100015180000c036e7331056264726567c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d44ff4dac04700010001000151800004d44ff642c05900010001000151800004c3f5c70a 38918 b0f900000001000000000000037777770a6977616e6e6164617465026e6c0000010001 b0f980000001000000020000037777770a6977616e6e6164617465026e6c0000010001c01000020001000151800011036e73330a6f70656e2d646f6f7273c01bc01000020001000151800006036e7334c033 38919 086200000001000000000000036e73320a6461632d706c616e6574026e6c0000260001 086280000001000000030003036e73320a6461632d706c616e6574026e6c0000260001c0100002000100015180000c036e7331056264726567c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d44ff4dac04700010001000151800004d44ff642c05900010001000151800004c3f5c70a 38920 c09800000001000000000000036e73330a6f70656e2d646f6f7273026e6c0000010001 c09880000001000000020002036e73330a6f70656e2d646f6f7273026e6c0000010001c01000020001000151800006036e7335c010c01000020001000151800006036e7336c010c02f000100010001518000045117e85ac041000100010001518000045117e85b 38921 8c4f00000001000000000000036e73340a6f70656e2d646f6f7273026e6c0000010001 8c4f80000001000000020002036e73340a6f70656e2d646f6f7273026e6c0000010001c01000020001000151800006036e7335c010c01000020001000151800006036e7336c010c02f000100010001518000045117e85ac041000100010001518000045117e85b 38922 d87b00000001000000000000046d61696c0d616368746b61727370656c656e026e6c0000010001 d87b80000001000000020002046d61696c0d616368746b61727370656c656e026e6c0000010001c01100020001000151800010046e733031086e65746c696e6573c01fc01100020001000151800007046e733032c038c03300010001000151800004d99540f5c04f00010001000151800004d99541f5 38923 51610000000100000000000003777777076275736b6f6f70026e6c0000010001 51618000000100000002000203777777076275736b6f6f70026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c018c01000020001000151800006036e7332c030c02c00010001000151800004d43d0f08c04a00010001000151800004d43d19e2 38924 eb2300000001000000000000026e73076e656473746174026e6c00001c0001 eb2380000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38925 360400000001000000000000026e73076e656473746174026e6c0000260001 360480000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 38926 4ecd00000001000000000000036e7332076e656473746174026e6c0000010001 4ecd80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38927 33a000000001000000000000036e7332076e656473746174026e6c00001c0001 33a080000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38928 e12400000001000000000000037777770f62646d2d62657665696c6967696e67026e6c0000010001 e12480000001000000020002037777770f62646d2d62657665696c6967696e67026e6c0000010001c0100002000100015180000c026e7306787334616c6cc020c01000020001000151800006036e7332c037c03400010001000151800004c26d0642c04c00010001000151800004c26d0963 38929 f0d100000001000000000000036e7332076e656473746174026e6c0000260001 f0d180000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38930 24ab00000001000000000000036e7333076e656473746174026e6c00001c0001 24ab80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38931 35d900000001000000000000036e7333076e656473746174026e6c0000260001 35d980000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 38932 e94600000001000000000000036e7334076e656473746174026e6c0000010001 e94680000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38933 c24000000001000000000000036e7334076e656473746174026e6c00001c0001 c24080000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38934 fa9300000001000000000000036e7334076e656473746174026e6c0000260001 fa9380000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 38935 3c3200000001000000000000036e73340767617574656e67026e6c0000010001 3c3280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38936 043f00000001000000000000036e73340767617574656e67026e6c0000010001 043f80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38937 0c4000000001000000000000036e73330767617574656e67026e6c0000010001 0c4080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38938 56c100000001000000000000046e637276026e6c00000f0001 56c180000001000000020002046e637276026e6c00000f0001c00c00020001000151800010066d696e6e6965066f6d726f6570c011c00c0002000100015180000805726f62696ec02cc02500010001000151800004913a1e04c04100010001000151800004913a1a34 38939 144f00000001000000000000036e73330767617574656e67026e6c0000010001 144f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38940 3c5200000001000000000000036e73340767617574656e67026e6c0000010001 3c5280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 38941 4805000000010000000000000561626f766f026e6c0000010001 4805800000010000000200020561626f766f026e6c0000010001c00c0002000100015180000d036e733106782d73697465c012c00c00020001000151800006036e7332c02ac0260001000100015180000450f7ca4bc03f0001000100015180000450f7ca50 38942 118e00000001000000000000036e733107737572666e6574026e6c0000010001 118e80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 38943 c3f100000001000000000000036e733207737572666e6574026e6c0000010001 c3f180000001000000040003036e733207737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800002c00cc01000020001000151800006036e7331c010c0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c00c00010001000151800004c0572402c04f00010001000151800004c0576a65 38944 e34400000001000000000000037777770a6e656465726c616e6473026e6c0000010001 e34480000001000000020001037777770a6e656465726c616e6473026e6c0000010001c0100002000100015180000b026e73056d696e736fc01bc01000020001000151800006036e7332c032c02f000100010001518000045117e142 38945 47c90000000100000000000006746f62696e67026e6c0000010001 47c98000000100000003000006746f62696e67026e6c0000010001c00c00020001000151800012036e7333087a6f6e656564697403636f6d00c00c0002000100015180000f036e733005786e616d65036f726700c00c0002000100015180000d036e733206616672616964c04f 38946 29450000000100000000000010616c756d696e69756d63656e7472756d026e6c00000f0001 29458000000100000002000210616c756d696e69756d63656e7472756d026e6c00000f0001c00c00020001000151800015026e730f6761726e69657270726f6a65637473c01dc00c00020001000151800006036e7331c034c031000100010001518000045117e122c052000100010001518000045117e142 38947 db570000000100000000000003777777076d79726961646d026e6c0000010001 db578000000100000002000203777777076d79726961646d026e6c0000010001c01000020001000151800009036e7331026973c018c01000020001000151800006036e7332c030c02c00010001000151800004d5852102c04100010001000151800004d5c41503 38948 63ed00000001000000000000037777770661646d697265026e6c0000010001 63ed80000001000000020002037777770661646d697265026e6c0000010001c0100002000100015180000f026e7309656174736572766572c017c01000020001000151800006036e7332c02ec02b00010001000151800004d4cb0e42c04600010001000151800004d4cb1221 38949 e74c00000001000000000000037777770c646574616265726e616b656c026e6c0000010001 e74c80000001000000020000037777770c646574616265726e616b656c026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c037 38950 fb6d00000001000000000000076575726f6e6574026e6c00000f0001 fb6d80000001000000020001076575726f6e6574026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000d026e73046575726f036e657400c02800010001000151800004c2860043 38951 e8360000000100000000000008636170796261726103756369036b756e026e6c0000010001 e8368000000100000003000308636170796261726103756369036b756e026e6c0000010001c01900020001000151800002c00cc0190002000100015180000a036e733103736369c019c0190002000100015180000e036e733107737572666e6574c01dc00c0001000100015180000483ae3c15c03f0001000100015180000483aee004c05500010001000151800004c0576a65 38952 f41b0000000100000000000008706f736569646f6e03756369036b756e026e6c0000010001 f41b8000000100000003000308706f736569646f6e03756369036b756e026e6c0000010001c0190002000100015180000b086361707962617261c015c0190002000100015180000a036e733103736369c019c0190002000100015180000e036e733107737572666e6574c01dc0310001000100015180000483ae3c15c0480001000100015180000483aee004c05e00010001000151800004c0576a65 38953 27bf00000001000000000000026e730763697374726f6e026e6c0000010001 27bf80000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 38954 949100000001000000000000036e73320763697374726f6e026e6c0000010001 949180000001000000020002036e73320763697374726f6e026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 38955 045700000001000000000000037777770977697373656c776562026e6c0000010001 045780000001000000030000037777770977697373656c776562026e6c0000010001c0100002000100015180001104646e733106696470333635036e657400c0100002000100015180000704646e7332c033c0100002000100015180000704646e7333c033 38956 1d6b00000001000000000000037777770761637473697465026e6c0000010001 1d6b80000001000000020000037777770761637473697465026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c030 38957 8820000000010000000000000676696e646578026e6c0000010001 8820800000010000000300030676696e646578026e6c0000010001c00c0002000100015180000b036e733104696c7365c013c00c00020001000151800006036e7332c02bc00c00020001000151800006036e7333c02bc027000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 38958 915b00000001000000000000076f73626d61696c1c6f70656e7363686f6f6c67656d65656e736368617062696a6c6d6572026e6c00001c0001 915b80000001000000030002076f73626d61696c1c6f70656e7363686f6f6c67656d65656e736368617062696a6c6d6572026e6c00001c0001c0140002000100015180000d036e733106776964657873c031c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c049c04500010001000151800004d4ccc0fcc07a000100010001518000043efa0703 38959 c4b70000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 c4b78000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 38960 87150000000100000000000003777873026e6c00000f0001 87158000000100000003000303777873026e6c00000f0001c00c00020001000151800007046e733038c00cc00c00020001000151800007046e733039c00cc00c00020001000151800006036e7334c00cc02400010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 38961 82ce00000001000000000000037777770974657272616465736b026e6c0000010001 82ce80000001000000020000037777770974657272616465736b026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c033 38962 8ffa00000001000000000000036e7332107370686572616e616d65736572766572026e6c0000010001 8ffa80000001000000020002036e7332107370686572616e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0350001000100015180000451047004c00c0001000100015180000451047002 38963 e3ba00000001000000000000036e7331107370686572616e616d65736572766572026e6c0000010001 e3ba80000001000000020002036e7331107370686572616e616d65736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047004c0430001000100015180000451047002 38964 3b1200000001000000000000037777770962736d64656a6f6e67026e6c0000010001 3b1280000001000000020001037777770962736d64656a6f6e67026e6c0000010001c0100002000100015180000a036e733303777873c01ac01000020001000151800006036e7334c032c04400010001000151800004d5ef9a65 38965 ef060010000100000000000106636861726973026e6c00001c00010000290800000080000000 ef068000000100000002000106636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a0000291000000000000000 38966 8c260000000100000000000009494e484f4c4c414e44026e6c00000f0001 8c268000000100000002000209494e484f4c4c414e44026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c2ab230bc03c00010001000151800004c0576a65 38967 3bcf0000000100000000000006636861726973026e6c00001c0001 3bcf8000000100000002000006636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 38968 090e000000010000000000000661736f706f73026e6c0000010001 090e800000010000000200000661736f706f73026e6c0000010001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 38969 e3fe00000001000000000000036e733109666972737466696e64026e6c0000010001 e3fe80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38970 c85200000001000000000000036e733209666972737466696e64026e6c0000010001 c85280000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38971 dabb00000001000000000000076d61696c2d696e03626f78026e6c0000010001 dabb80000001000000020002076d61696c2d696e03626f78026e6c0000010001c0140002000100015180000a07646e732d707269c014c0140002000100015180000a07646e732d736563c014c02c00010001000151800004d97700fac04200010001000151800004d97704fa 38972 a20b00000001000000000000076d61696c2d696e03626f78026e6c0000010001 a20b80000001000000020002076d61696c2d696e03626f78026e6c0000010001c0140002000100015180000a07646e732d707269c014c0140002000100015180000a07646e732d736563c014c02c00010001000151800004d97700fac04200010001000151800004d97704fa 38973 b016000000010000000000000377777706617265613137026e6c0000010001 b016800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 38974 2bd200000001000000000000037777770d646f7369646f64616e63657273026e6c0000010001 2bd280000001000000030000037777770d646f7369646f64616e63657273026e6c0000010001c01000020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01000020001000151800006036e7332c036c01000020001000151800006036e7333c036 38975 89a000000001000000000000026e73066863636e6574026e6c0000010001 89a080000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 38976 804300000001000000000000036e7331046e697769046b6e6177026e6c0000010001 804380000001000000020002036e7331046e697769046b6e6177026e6c0000010001c01500020001000151800006036e7331c015c0150002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004c0576b03c04000010001000151800004c0576a65 38977 972b00000001000000000000036e7332046b6e6177026e6c0000010001 972b80000001000000020002036e7332046b6e6177026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e036e733107737572666e6574c015c02900010001000151800004c0576b03c03b00010001000151800004c0576a65 38978 77c400000001000000000000036e7331096d6173746572646e73026e6c0000010001 77c480000001000000020002036e7331096d6173746572646e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f347c03c000100010001518000043e94a047 38979 bbe200000001000000000000036e7332096d6173746572646e73026e6c0000010001 bbe280000001000000020002036e7332096d6173746572646e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054f347c00c000100010001518000043e94a047 38980 dd51001000010000000000000377777704686f7574026e6c0000010001 dd51800000010000000200020377777704686f7574026e6c0000010001c0100002000100015180001007617374657269780577746e6574c015c0100002000100015180000e036e73320768756d616e2d69c015c02900010001000151800004c36db552c04500010001000151800004c1ad2886 38981 e94000000001000000000000037777770962697a617273697465026e6c0000010001 e94080000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 38982 9e3500000001000000000000036e733109666972737466696e64026e6c0000010001 9e3580000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38983 836a00000001000000000000036e733209666972737466696e64026e6c0000010001 836a80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 38984 42220000000100000000000003777777066a6970706969026e6c0000010001 42228000000100000002000203777777066a6970706969026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c017c01000020001000151800006036e7332c02fc02b00010001000151800004505fa002c04600010001000151800004505fac02 38985 b19600000001000000000000126f74746f6b616e746f6f7263656e7472756d026e6c00000f0001 b19684030001000000010000126f74746f6b616e746f6f7263656e7472756d026e6c00000f0001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 38986 2c2a01000001000000000000056b6f726e6f026e6c00000f000100 2c2a85030001000000010000056b6f726e6f026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 38987 68d200000001000000000000037777770968797065726c656170026e6c0000010001 68d280000001000000020002037777770968797065726c656170026e6c0000010001c0100002000100015180000a036e7331036e7873c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 38988 adbe00100001000000000001026e7306766576696461026e6c00000100010000290800000000000000 adbe80000001000000030003026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa07030000291000000000000000 38989 ab4000100001000000000001036e733206766576696461026e6c00000100010000290800000000000000 ab4080000001000000030003036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa07030000291000000000000000 38990 9b5c28000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d7364637309446f6e4369726b656c026e6c000021000100000258001d00000064018508646f6e737276303109446f6e4369726b656c026e6c00 9b5ca8040000000000000000 38991 6aa800000001000000000000026e7306766576696461026e6c0000010001 6aa880000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 38992 b55400000001000000000000036e733206766576696461026e6c0000010001 b55480000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 38993 b02600000001000000000000037777770762616d62696e79026e6c0000010001 b02680000001000000030000037777770762616d62696e79026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c034c0100002000100015180000a076e73686f737433c034 38994 861300000001000000000000076d696e62757a61026e6c0000010001 861380000001000000020001076d696e62757a61026e6c0000010001c00c0002000100015180000b087374617267617465c00cc00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004d535a3d2 38995 3fe0000000010000000000000734657665727931026e6c0000010001 3fe0800000010000000200010734657665727931026e6c0000010001c00c00020001000151800009026e730365646ec014c00c00020001000151800010036e733109756e69736f75726365c014c028000100010001518000043e3a51e4 38996 adab000000010000000000000b6572696b626f72676d616e026e6c00000f0001 adab800000010000000200020b6572696b626f72676d616e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 38997 869700000001000000000000036d6737086d656761706c6578026e6c0000010001 869780000001000000020002036d6737086d656761706c6578026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c02d00010001000151800004504f6101c03e00010001000151800004504f6102 38998 39a800000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 39a880000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 38999 f72c00000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c0000260001 f72c80000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 39000 43310000000100000000000012776174657274617869726f7474657264616d026e6c00000f0001 43318000000100000002000212776174657274617869726f7474657264616d026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01fc00c00020001000151800006036e7332c036c03300010001000151800004c26d0642c04b00010001000151800004c26d0963 39001 0bbc00000001000000000000086174617261786961026e6c0000010001 0bbc80000001000000020000086174617261786961026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 39002 d9620000000100000000000003777777046575726f026e6c0000010001 d9628000000100000002000003777777046575726f026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 39003 45ca0000000100000000000003777777046575726f026e6c0000010001 45ca8000000100000002000003777777046575726f026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 39004 ed7e00000001000000000000037777770862696b652d66756e026e6c0000010001 ed7e80000001000000020002037777770862696b652d66756e026e6c0000010001c0100002000100015180000c036e7331056379626f78c019c01000020001000151800006036e7332c031c02d00010001000151800004d5a0da7dc04500010001000151800004d4ccd897 39005 5fc000000001000000000000036e733107737572666e6574026e6c0000010001 5fc080000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 39006 fbb328000001000000010000026e6c0000060001095f6b65726265726f73045f756470096a6a632d627261766f026e6c000021000100000258001c00000064005807425241564f3131096a6a632d627261766f026e6c00 fbb3a8040000000000000000 39007 778400000001000000000000034e533103484853026e6c0000010001 778480000001000000030003034e533103484853026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c0001000100015180000491340205c0360001000100015180000491340206c04800010001000151800004c0576a65 39008 136900000001000000000000034e533203484853026e6c0000010001 136980000001000000030003034e533203484853026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c0280001000100015180000491340205c00c0001000100015180000491340206c04800010001000151800004c0576a65 39009 e61300000001000000000000096d61696c7372763031086c616e67686f7574026e6c00000f0001 e61380000001000000020000096d61696c7372763031086c616e67686f7574026e6c00000f0001c01600020001000151800013036e733109752d73657276657273036e657400c01600020001000151800006036e7332c037 39010 934e000000010000000000000377777716657261736d757373756d6d657270726f6772616d6d65026e6c0000010001 934e800000010000000200020377777716657261736d757373756d6d657270726f6772616d6d65026e6c0000010001c0100002000100015180000d04646e733105692d702d64c027c0100002000100015180000704646e7332c040c03b00010001000151800004d9124003c05400010001000151800004d9124104 39011 fdc400000001000000000000037777770962697a617273697465026e6c0000010001 fdc480000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 39012 387000000001000000000000037777770668696e676973026e6c0000010001 387080000001000000020000037777770668696e676973026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 39013 d959000000010000000000000774656c76696577026e6c00000f0001 d959800000010000000200000774656c76696577026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 39014 8b1900000001000000000000037777770966756e636f726e6572026e6c0000010001 8b1980000001000000020002037777770966756e636f726e6572026e6c0000010001c0100002000100015180000b036e7331046e732d31c01ac01000020001000151800006036e7332c032c02e000100010001518000045045a0cdc04500010001000151800004d4cceec8 39015 b7b2120c5018faf03b6f0000008d7b00000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd3d403c4ebd00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 b7b292040000000000000000 39016 b7b2120c5018faf03b6f0000008d7b00000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd3d403c4ebd00030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 b7b292040000000000000000 39017 b32f00000001000000000000034e53320743495354524f4e024e4c0000010001 b32f80000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 39018 2e9a00000001000000000000037777770c70726f6a65637469656c3032026e6c0000010001 2e9a80000001000000020002037777770c70726f6a65637469656c3032026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 39019 b7b2121a5011fae2ed3b0000000000000000 b7b292140000000000000000 39020 561b0010000100000000000003777777096b69656b6562656c74026e6c0000010001 561b8000000100000002000003777777096b69656b6562656c74026e6c0000010001c01000020001000151800013056175746f310a747265666e6574646e73c01ac01000020001000151800006036e7331c034 39021 000000007002faf072e80000020405b401010402 000080010000000000000000 39022 a37b000000010000000000000377777703776661026e6c0000010001 a37b800000010000000200000377777703776661026e6c0000010001c0100002000100015180001504646e73310a686976656c6f63697479036e657400c0100002000100015180000704646e7332c02d 39023 63ed0000000100000000000003696d6703696578026e6c0000010001 63ed8000000100000003000003696d6703696578026e6c0000010001c0100002000100015180001607646e732d65753108706f776572646e73036e657400c0100002000100015180000a07646e732d757331c030c0100002000100015180000a07646e732d657532c030 39024 b7b2121b5010fae2ed3a0000000000000000 b7b292140000000000000000 39025 b7c35b315010faf08ca70000000000000000 b7c3db340000000000000000 39026 a2d60000000100000000000005726f62696e066f6d726f6570026e6c00001c0001 a2d68000000100000002000205726f62696e066f6d726f6570026e6c00001c0001c01200020001000151800009066d696e6e6965c012c01200020001000151800002c00cc02d00010001000151800004913a1e04c00c00010001000151800004913a1a34 39027 05a90000000100000000000005726f62696e066f6d726f6570026e6c0000010001 05a98000000100000002000205726f62696e066f6d726f6570026e6c0000010001c01200020001000151800009066d696e6e6965c012c01200020001000151800002c00cc02d00010001000151800004913a1e04c00c00010001000151800004913a1a34 39028 223200000001000000000000066d696e6e6965066f6d726f6570026e6c00001c0001 223280000001000000020002066d696e6e6965066f6d726f6570026e6c00001c0001c01300020001000151800002c00cc0130002000100015180000805726f62696ec013c00c00010001000151800004913a1e04c03c00010001000151800004913a1a34 39029 315c00000001000000000000066d696e6e6965066f6d726f6570026e6c0000010001 315c80000001000000020002066d696e6e6965066f6d726f6570026e6c0000010001c01300020001000151800002c00cc0130002000100015180000805726f62696ec013c00c00010001000151800004913a1e04c03c00010001000151800004913a1a34 39030 cd890000000100000000000003626c3102626c06787334616c6c026e6c0000010001 cd898000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39031 9939000000010000000000000664696e616e74026e6c0000010001 9939800000010000000200010664696e616e74026e6c0000010001c00c0002000100015180000a036e733303777873c013c00c00020001000151800006036e7334c02bc03d00010001000151800004d5ef9a65 39032 28e000000001000000000000086261726d61746f6e026e6c0000010001 28e080000001000000020002086261726d61746f6e026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 39033 a17800000001000000000000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573106b72656e73636f6e73756c74616e6379026e6c0000060001 a17884030001000000010000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573106b72656e73636f6e73756c74616e6379026e6c0000060001c04500060001000038400036026e730f646f6d61696e2d7265676973747279c0450a686f73746d6173746572c05c0bf1e540000070800000384000278d0000003840 39034 b54e000000010000000000000b6b65626f2d6f636874656e026e6c0000ff0001 b54e800000010000000200020b6b65626f2d6f636874656e026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 39035 b7c35b315018faf0d04b0000008d8000000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd40403c4ec000030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 b7c3db340000000000000000 39036 b7c35b3f5011fae28c170000000000000000 b7c3db340000000000000000 39037 99e300000001000000000000036e733107737572666e6574026e6c0000010001 99e380000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 39038 000000007002faf033120000020405b401010402 000080010000000000000000 39039 b7c35b405010fae28c160000000000000000 b7c3db440000000000000000 39040 3ee50000000100000000000003777777096578706f7669736965026e6c0000010001 3ee58000000100000002000003777777096578706f7669736965026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 39041 b7c5cd275010faf0dad80000000000000000 39042 50f8000000010000000000000974656c656772616166026e6c0000010001 50f8800000010000000200000974656c656772616166026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 39043 b7c5cd275018faf0a87c0000008df600000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afd40403c4ec000030000002e4e544c4d535350000100000097b208e0070007002700000007000700200000005245545f4653315245544152434f0000 39044 64dd28000001000000010000026e6c0000060001035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573106b72656e73636f6e73756c74616e6379026e6c0000210001000002580022000000640cc4066e69656c7331106b72656e73636f6e73756c74616e6379026e6c00 64dda8040000000000000000 39045 ecf20000000100000000000006706c2d30303207504c2d4c616e6407706c2d6c616e64026e6c0000060001 ecf28403000100000001000006706c2d30303207504c2d4c616e6407706c2d6c616e64026e6c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 39046 392a00000001000000000000037777770c6a616e62657373656c696e6b026e6c0000010001 392a80000001000000020002037777770c6a616e62657373656c696e6b026e6c0000010001c0100002000100015180000e036e733107686f7374696e67c01dc01000020001000151800006036e7332c035c031000100010001518000043e818b01c04b000100010001518000043e818b02 39047 b7c5cd355011fae2da480000000000000000 39048 30910000000100000000000006696d61696c32076b6e6f77617265026e6c0000010001 30918000000100000002000206696d61696c32076b6e6f77617265026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c02f00010001000151800004c3402003c04000010001000151800004c340202b 39049 b7c5cd365010fae2da470000000000000000 39050 881c000000010000000000000377777709696e7465726d616174026e6c0000010001 881c800000010000000200010377777709696e7465726d616174026e6c0000010001c0100002000100015180000a04626f6261026778c01ac0100002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1590b 39051 0000000070024000de6f0000020405ac01010402 000080010000000000000000 39052 858300000001000000000000046d696a6e06646a6f736572026e6c0000010001 858380000001000000020002046d696a6e06646a6f736572026e6c0000010001c0110002000100015180000a026e730467726970c018c01100020001000151800006036e7333c02fc02c00010001000151800004d4eeb043c04200010001000151800004d994a262 39053 a6a600000001000000000000036e7333076e656473746174026e6c0000010001 a6a680000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 39054 b89100000001000000000000026e73076e656473746174026e6c0000010001 b89180000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39055 b7c6575050104410f7f40000000000000000 b7c6d7540000000000000000 39056 ad370000000100000000000105646e732d31056c61646f74026e6c00000100010000291000000000000000 ad378000000100000002000105646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c0320000291000000000000000 39057 16fa0000000100000000000105646e732d32056c61646f74026e6c00000100010000291000000000000000 16fa8000000100000002000105646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c0320000291000000000000000 39058 f18a000000010000000000000c66726565726f617374696e67026e6c0000010001 f18a800000010000000200000c66726565726f617374696e67026e6c0000010001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c031 39059 6ba700100001000000000001087765626d61696c3203687661026e6c00000100010000290800000000000000 6ba780000001000000030004087765626d61696c3203687661026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000e036e733107737572666e6574c019c01500020001000151800006036e7332c015c02d00010001000151800004915c1202c03e00010001000151800004c0576a65c05800010001000151800004915c21020000291000000000000000 39060 202400000001000000000000087765626d61696c3203687661026e6c0000010001 202480000001000000030003087765626d61696c3203687661026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000e036e733107737572666e6574c019c01500020001000151800006036e7332c015c02d00010001000151800004915c1202c03e00010001000151800004c0576a65c05800010001000151800004915c2102 39061 b7c6575050184410ed5700000094e8e8000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76c403c48ec0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 b7c6d7540000000000000000 39062 e5f60000000100000000000004656c7761026e6c0000010001 e5f68000000100000002000204656c7761026e6c0000010001c00c0002000100015180000b026e7305706c616e74c011c00c00020001000151800006036e7332c028c02500010001000151800004d59f0037c03c00010001000151800004d59f0046 39063 119900000001000000000000066d6165746973026e6c00000f0001 119980000001000000030002066d6165746973026e6c00000f0001c00c0002000100015180000d036e733106776964657873c013c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 39064 7dd100000001000000000000037777770963617264696c6c6163026e6c0000010001 7dd180000001000000020000037777770963617264696c6c6163026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01ac0100002000100015180000805646e732d32c034 39065 b7c6575e50114402f75d0000000000000000 b7c6d7540000000000000000 39066 0000000070024000f46f0000020405ac01010402 000080010000000000000000 39067 6ef5000000010000000000000876646b7275696a66026e6c00000f0001 6ef5800000010000000300000876646b7275696a66026e6c00000f0001c00c0002000100015180001506686b646e73310876646b7275696a6603636f6d00c00c00020001000151800010046e733132087a6f6e6565646974c039c00c00020001000151800006036e7337c04f 39068 b7c6575f50104402f75c0000000000000000 b7c6d7540000000000000000 39069 b7c7018a5010441063ba0000000000000000 b7c780010000000000000000 39070 20f9000000010000000000000464626277026e6c0000010001 20f9800000010000000200000464626277026e6c0000010001c00c00020001000151800013036e7331026e6c0669676e697465036e657400c00c00020001000151800006036e7332c029 39071 875b0000000100000000000009696c632d74616c656e026e6c00000f0001 875b8000000100000002000209696c632d74616c656e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 39072 b7c7018a5018441052a600000094f060000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76c403c48ec0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 b7c780010000000000000000 39073 555700000001000000000000037777770a6b6c616173707275696d026e6c00000f0001 555780000001000000020002037777770a6b6c616173707275696d026e6c00000f0001c0100002000100015180000e036e7331076a646e686f7374c01bc01000020001000151800006036e7332c033c02f000100010001518000045054e451c049000100010001518000045054e452 39074 be1f00000001000000000000084e696a6d6567656e026e6c00000f0001 be1f80000001000000020002084e696a6d6567656e026e6c00000f0001c00c0002000100015180000f036e73330874656c6562797465c015c00c00020001000151800006036e7334c02dc02900010001000151800004d5d38115c04400010001000151800004d5d38116 39075 06690000000100000000000002383302363403313438033230360770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 06698000000100000002000202383302363403313438033230360770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 39076 c265000000010000000000000377777708736e6f7774696d65026e6c0000010001 c265800000010000000300010377777708736e6f7774696d65026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 39077 e558000000010000000000000377777712686974726164696f646967697461616c666d026e6c0000010001 e558800000010000000200000377777712686974726164696f646967697461616c666d026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03d 39078 9f01000000010000000000000c686c6d2d747269616e676c65026e6c00000f0001 9f01800000010000000200000c686c6d2d747269616e676c65026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 39079 b7c701985011440263230000000000000000 b7c780010000000000000000 39080 000000007002400010880000020405ac01010402 000080010000000000000000 39081 1c0d00000001000000000000036e73340767617574656e67026e6c0000010001 1c0d80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39082 b7c701995010440263220000000000000000 b7c780010000000000000000 39083 b7c7ca4a50104410b7110000000000000000 39084 b7c7ca4a50184410f51900000094a144000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af76c403c48ec0003000000354e544c4d535350000100000097b200c00f000f002600000006000600200000004e49454c53314b52454e53434f4e53554c54414e430000 39085 797900000001000000000000037777770d7063672d676f72696e6368656d026e6c0000010001 797980000001000000020002037777770d7063672d676f72696e6368656d026e6c0000010001c01000020001000151800017036e733110636173652d656c656b74726f6e696373c01ec01000020001000151800006036e7332c036c03200010001000151800004d4cceb4fc05500010001000151800004d4cceb50 39086 093e0000000100000000000003777777186d616b656c61617273206f6f73742d67726f6e696e67656e026e6c0000010001 093e8403000100000001000003777777186d616b656c61617273206f6f73742d67726f6e696e67656e026e6c0000010001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 39087 b7c7ca5850114402b67a0000000000000000 39088 4baa0000000100000000000004686f6d651074697363616c692d627573696e657373026e6c0000010001 4baa8000000100000003000204686f6d651074697363616c692d627573696e657373026e6c0000010001c0110002000100015180000f04616e73310774697363616c69c022c0110002000100015180000704616e7332c03bc0110002000100015180001404616e73330a74697363616c696e657402626500c03600010001000151800004c3f14d38c05100010001000151800004c3f13325 39089 9cae0000000100000000000005746c6774650a7061797065726e657773026e6c0000010001 9cae8000000100000002000205746c6774650a7061797065726e657773026e6c0000010001c01200020001000151800010036e733109652d666163746f7279c01dc01200020001000151800006036e7332c035c03100010001000151800004c1fefe82c04d00010001000151800004c1feff82 39090 b7c7ca5950104402b6790000000000000000 39091 c868000000010000000000000763656e74726f70026e6c0000010001 c868800000010000000200020763656e74726f70026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 39092 fe5e00000001000000000000037777770e62672d656e67696e656572696e67026e6c0000010001 fe5e80000001000000020001037777770e62672d656e67696e656572696e67026e6c0000010001c0100002000100015180000a036e733303777873c01fc01000020001000151800006036e7334c037c04900010001000151800004d5ef9a65 39093 d441000000010000000000000561756b6a65026e6c0000ff0001 d441800000010000000200000561756b6a65026e6c0000ff0001c00c00020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c00c00020001000151800006036e7332c02a 39094 145d00000001000000000000036e73330767617574656e67026e6c0000010001 145d80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39095 5db400000001000000000000037777771276616e6b6176656c746f746b61737465656c026e6c0000010001 5db480000001000000020001037777771276616e6b6176656c746f746b61737465656c026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c023c0100002000100015180000a036e73310372746cc023c03700010001000151800004c3c1ca77 39096 2fd200000001000000000000037777770e6b756e737467656f677261666965026e6c0000010001 2fd280000001000000020000037777770e6b756e737467656f677261666965026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c049 39097 f324000000010000000000000772616368656c73026e6c0000ff0001 f324800000010000000200000772616368656c73026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c014c00c00020001000151800006036e7332c02b 39098 c2ed0000000100000000000005646e732d31056c61646f74026e6c0000010001 c2ed8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39099 c2ee0000000100000000000005646e732d32056c61646f74026e6c0000010001 c2ee8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39100 3276000000010000000000000377777705646568756e026e6c0000010001 3276800000010000000200020377777705646568756e026e6c0000010001c01000020001000151800010036e733109756e69736572766572c016c01000020001000151800006036e7332c02ec02a00010001000151800004c3454b03c04600010001000151800004d119a2fa 39101 3f000000000100000000000005746f70323505726567696f026e6c0000010001 3f008000000100000002000205746f70323505726567696f026e6c0000010001c0120002000100015180000c036e7331056379626f78c018c01200020001000151800006036e7332c030c02c00010001000151800004d5a0da7dc04400010001000151800004d4ccd897 39102 e10d28000001000000010000026e6c0000060001055f6c646170045f7463702465323737303337342d303731302d346661372d393266652d65393131663731643939326507646f6d61696e73065f6d736463731276616e64696a6b63736164766f636174656e026e6c0000210001000002580024000000640185067365727665721276616e64696a6b63736164766f636174656e026e6c00 e10da8040000000000000000 39103 aa03000000010000000000000777696c6d696e6b026e6c00000f0001 aa03800000010000000200020777696c6d696e6b026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 39104 47080000000100000000000003777777056b6c696b73026e6c0000010001 47088000000100000002000003777777056b6c696b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02d 39105 3ba200000001000000000000037777770d6f6e64657277696a7373746164026e6c0000010001 3ba280000001000000020002037777770d6f6e64657277696a7373746164026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01ec01000020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 39106 74e300000001000000000000066f6e6c696e6509696e74657276696577026e6c0000010001 74e380000001000000020000066f6e6c696e6509696e74657276696577026e6c0000010001c0130002000100015180000b026e73026e6c036e657400c0130002000100015180001206617574683630026e73026e6c027575c037 39107 1e54000000010000000000000575726975730473656d61026e6c0000010001 1e54800000010000000300030575726975730473656d61026e6c0000010001c01200020001000151800012047072693103646e73067073696e6574c017c012000200010001518000070470726932c030c012000200010001518000070470726933c030c02b000100010001518000049a0ff9a6c049000100010001518000049a0ff9aac05c000100010001518000049a0ff9ae 39108 18320000000100000000000006636861726973026e6c00000f0001 18328000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 39109 0000000070024000ced600000204053401010402 000080010000000000000000 39110 552900000001000000000000026e7306787334616c6c026e6c00001c0001 552980000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 39111 8a6500000001000000000000026e7306787334616c6c026e6c0000260001 8a6580000001000000030002026e7306787334616c6c026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 39112 688e00000001000000000000036e733206787334616c6c026e6c00001c0001 688e80000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 39113 447f00000001000000000000036e733206787334616c6c026e6c0000260001 447f80000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 39114 2c01000000010000000000000666696e3132340657494e46494e024e4c0000010001 2c01840300010000000100000666696e3132340657494e46494e024e4c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 39115 b7c8652e50104470d9a30000000000000000 b7c8e5240000000000000000 39116 b7c8652e50184470a322000000942da6000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03de403c555e0003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000 b7c8e5240000000000000000 39117 533700000001000000000000036d78310464697661026e6c0000010001 533780000001000000020000036d78310464697661026e6c0000010001c0100002000100015180000e036e73310464697661036e657400c01000020001000151800006036e7332c02d 39118 45900000000100000000000008686f73746e616d650462696e640000100003 45908000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 39119 868b0010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 868b8000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 39120 952e000000010000000000000377777705656c6d6172026e6c0000010001 952e800000010000000300030377777705656c6d6172026e6c0000010001c01000020001000151800012047072693103646e73067073696e6574c016c010000200010001518000070470726932c02fc010000200010001518000070470726933c02fc02a000100010001518000049a0ff9a6c048000100010001518000049a0ff9aac05b000100010001518000049a0ff9ae 39121 c95b0000000100000000000005646e732d31056c61646f74026e6c0000010001 c95b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39122 b7c8653c50114462d90c0000000000000000 b7c8e5340000000000000000 39123 0000000070024000d21800000204053401010402 000080010000000000000000 39124 064400000001000000000000037777770e696a6d756964656e61616e7a6565026e6c0000010001 064480000001000000020002037777770e696a6d756964656e61616e7a6565026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01fc01000020001000151800006036e7332c037c033000100010001518000045054f347c04f000100010001518000043e94a047 39125 9454000000010000000000000576656c7061026e6c0000ff0001 9454800000010000000200020576656c7061026e6c0000ff0001c00c00020001000151800009036e7331026973c012c00c00020001000151800006036e7332c02ac02600010001000151800004d5852102c03b00010001000151800004d5c41503 39126 b25d0000000100000000000003777777076d797374617473026e6c0000010001 b25d8000000100000002000203777777076d797374617473026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa404c04900010001000151800004d5efa405 39127 82400000000100000000000005646e732d31056c61646f74026e6c0000010001 82408000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39128 b7c8653d50104462d90b0000000000000000 b7c8e5340000000000000000 39129 4f61000000010000000000000a676f7474736368616c6b026e6c00000f0001 4f61800000010000000200000a676f7474736368616c6b026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c017c00c0002000100015180000704686e7331c030 39130 6ded00000001000000000000066b6c65747374026e6c00000f0001 6ded80000001000000020000066b6c65747374026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02b 39131 029b00000001000000000000096368726f6e69717565026e6c0000010001 029b80000001000000020002096368726f6e69717565026e6c0000010001c00c0002000100015180000a036e733103686978c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5a0da0ac0400001000100015180000451112ec3 39132 3dc8000000010000000000000377777705646568756e026e6c0000010001 3dc8800000010000000200020377777705646568756e026e6c0000010001c01000020001000151800010036e733109756e69736572766572c016c01000020001000151800006036e7332c02ec02a00010001000151800004c3454b03c04600010001000151800004d119a2fa 39133 b7cad8d15010447069400000000000000000 39134 b7cad8d150184470d679000000948aec000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03de403c555e0003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000 39135 8174000000010000000000000f70656e7465726d616e6d757a69656b026e6c00000f0001 8174800000010000000200000f70656e7465726d616e6d757a69656b026e6c00000f0001c00c0002000100015180000c026e7306766576696461c01cc00c00020001000151800006036e7332c033 39136 1f5500000001000000000000037777770668696e676973026e6c0000010001 1f5580000001000000020000037777770668696e676973026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 39137 448b000000010000000000000377777705742d646f63026e6c0000010001 448b800000010000000200020377777705742d646f63026e6c0000010001c0100002000100015180000c026e7306787334616c6cc016c01000020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 39138 012c000000010000000000000477777732076d797374617473026e6c0000010001 012c800000010000000200020477777732076d797374617473026e6c0000010001c01100020001000151800011036e73310a726564686f7374696e67c019c01100020001000151800006036e7332c031c02d00010001000151800004d5efa404c04a00010001000151800004d5efa405 39139 b7cad8df5011446268a90000000000000000 39140 0000000070024000c1d700000204053401010402 000080010000000000000000 39141 fec100000001000000000000036e7332086765656e70756e74026e6c0000010001 fec180000001000000020002036e7332086765656e70756e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d4ccd865c00c000100010001518000045054ec34 39142 dbae00000001000000000000036e7331086765656e70756e74026e6c0000010001 dbae80000001000000020002036e7331086765656e70756e74026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccd865c03b000100010001518000045054ec34 39143 cab4000000010000000000000377777710666972737463686f6963656c65616473026e6c0000010001 cab4840300010000000100000377777710666972737463686f6963656c65616473026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 39144 b7cad8e05010446268a80000000000000000 39145 f76c000000010000000000000776657264756774026e6c00000f0001 f76c800000010000000200000776657264756774026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 39146 e9280000000100000000000003787334026e6c00000f0001 e9288000000100000002000203787334026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 39147 3a990000000100000000000009726567696f626f7577026e6c00000f0001 3a998000000100000002000009726567696f626f7577026e6c00000f0001c00c00020001000151800014036e73310a676c617373686f757365036e657400c00c00020001000151800006036e7332c02e 39148 7f480000000100000000000003777777096a756b6573616c6573026e6c0000010001 7f488000000100000002000103777777096a756b6573616c6573026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01ac01000020001000151800006036e7334c032c02e00010001000151800004d5c401c0 39149 26890000000100000000000006776468303131066e7434616c6c026e6c0000010001 26898000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 39150 cd7600000001000000000000056d61696c320774696b6b6c696b026e6c0000010001 cd7680000001000000020002056d61696c320774696b6b6c696b026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c02e00010001000151800004d5c40902c040000100010001518000043eddd512 39151 b7cbb4fa501044707cd50000000000000000 39152 6b690000000100000000000003777777067a737673746c026e6c0000010001 6b698403000100000001000003777777067a737673746c026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 39153 b7cbb4fa50184470aa8c00000094ca6e000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403b03de403c555e0003000000354e544c4d535350000100000097b208e00f000f0026000000060006002000000053455256455256414e44494a4b43534144564f43410000 39154 b7cbb508501144627c3e0000000000000000 39155 b7cbb509501044627c3d0000000000000000 39156 3ce000000001000000000000036e733206787334616c6c026e6c0000260001 3ce080000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 39157 8f0a000000010000000000000c76616b616e7469657061726b0a72656372656174696566026e6c0000010001 8f0a800000010000000200000c76616b616e7469657061726b0a72656372656174696566026e6c0000010001c0190002000100015180000b036e7331046372696fc024c01900020001000151800006036e7332c03c 39158 866c00000001000000000000037777770a652d7265736561726368026e6c0000010001 866c80000001000000020002037777770a652d7265736561726368026e6c0000010001c0100002000100015180001004646e73310869636f6d70616e79c01bc0100002000100015180000704646e7332c034c02f000100010001518000043e3a890ac04b000100010001518000043e3a890b 39159 2f920000000100000000000007766462636f6d70026e6c00001c0001 2f928000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 39160 f7cf00000001000000000000027330026e6c0000010001 f7cf80000001000000020002027330026e6c0000010001c00c0002000100015180000d026e73076e656473746174c00fc00c00020001000151800006036e7333c026c02300010001000151800004d4482615c03c00010001000151800004d5c4021d 39161 de8500000001000000000001034e53350f444f4d41494e2d5245474953545259026e6c00000100010000291000000000000000 de8580000001000000030003034e53350f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 39162 0bda00000001000000000001034e53320f444f4d41494e2d5245474953545259026e6c00000100010000291000000000000000 0bda80000001000000030003034e53320f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a650000291000000000000000 39163 f4d800000001000000000001024e530f444f4d41494e2d5245474953545259026e6c00000100010000291000000000000000 f4d880000001000000030003024e530f444f4d41494e2d5245474953545259026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a650000291000000000000000 39164 045000000001000000000001036e733109756e69736f75726365026e6c00000100010000291000000000000000 045080000001000000020001036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 39165 10d70000000100000000000003777777126175746f696e6b6f6f7063656e7472616c65026e6c0000010001 10d78000000100000003000203777777126175746f696e6b6f6f7063656e7472616c65026e6c0000010001c0100002000100015180000d036e733106776964657873c023c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c03bc03700010001000151800004d4ccc0fcc06c000100010001518000043efa0703 39166 163800000001000000000000076f62646e772d6e026e6c00000f000100 163880000001000000020002076f62646e772d6e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 39167 fe900000000100000000000006776468303131066e7434616c6c026e6c0000010001 fe908000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 39168 3ea4000000010000000000000474656861026e6c00000f0001 3ea4800000010000000200000474656861026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02b 39169 3d8a00000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 3d8a80000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 39170 3d8b00000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 3d8b80000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 39171 3d8c00000001000000000000037777770b7275696c65656e6c696e6b026e6c0000010001 3d8c80000001000000020000037777770b7275696c65656e6c696e6b026e6c0000010001c01000020001000151800014036e73310d666c65746873686f7374696e67c01cc01000020001000151800006036e7332c034 39172 a9f90000000100000000000003777777087265676572696e67026e6c0000010001 a9f98000000100000003000303777777087265676572696e67026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 39173 acb90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 acb98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39174 da1f00000001000000000000026e73076e656473746174026e6c0000010001 da1f80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39175 5b6100000001000000000000036e7333076e656473746174026e6c0000010001 5b6180000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 39176 52d9000000010000000000000766313335303932057570632d66066368656c6c6f026e6c0000010001 52d9800000010000000300030766313335303932057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 39177 321e00000001000000000000046c69736103796f77026e6c0000010001 321e80000001000000020000046c69736103796f77026e6c0000010001c01100020001000151800010046c697361086e6f7661686f7374c015c01100020001000151800006036e7332c02e 39178 c06f0000000100000000000003777777097061726e6173736961026e6c0000010001 c06f8000000100000002000003777777097061726e6173736961026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c034 39179 477a000000010000000000000c68656973636865686f657665026e6c00000f0001 477a800000010000000300030c68656973636865686f657665026e6c00000f0001c00c0002000100015180000c036e7331053266617374c019c00c00020001000151800006036e7332c031c00c00020001000151800006036e7333c031c02d0001000100015180000450f7c022c045000100010001518000043e858122c057000100010001518000045117eb22 39180 da9100000001000000000000076472656d656661026e6c00000f0001 da9180000001000000030000076472656d656661026e6c00000f0001c00c00020001000151800013036e733109647265616d686f737403636f6d00c00c00020001000151800006036e7332c02cc00c00020001000151800006036e7333c02c 39181 99e200000001000000000000037777770e6961622d696e67656e6965757273026e6c0000010001 99e280000001000000020000037777770e6961622d696e67656e6965757273026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c036 39182 365000000001000000000000037777770e67616e6762616e672d7061727479026e6c0000010001 365080000001000000030000037777770e67616e6762616e672d7061727479026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c03bc0100002000100015180000a076e73686f737433c03b 39183 34a90000000100000000000003313639033134360233330236310770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 34a98000000100000002000203313639033134360233330236310770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 39184 5b900000000100000000000003746f6e0664756d616e73026e6c0000010001 5b908000000100000002000003746f6e0664756d616e73026e6c0000010001c01000020001000151800011036e733307657873696c6961036e657400c01000020001000151800006036e7332c02f 39185 891e000000010000000000000377777703696b63026e6c0000010001 891e800000010000000200000377777703696b63026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c02f 39186 de8500000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000010001 de8580000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 39187 0bda00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000010001 0bda80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 39188 f4d800000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000010001 f4d880000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 39189 045000000001000000000000036e733109756e69736f75726365026e6c0000010001 045080000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 39190 ecb0000000010000000000000377777708666c657870726f32026e6c0000010001 ecb0840300010000000100000377777708666c657870726f32026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 39191 d5750010000100000000000103777777076e656473746174026e6c00000100010000290800000080000000 d5758000000100000002000303777777076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 39192 7b370000000100000000000003777777086e756f6e6a6f6273026e6c0000010001 7b378000000100000002000003777777086e756f6e6a6f6273026e6c0000010001c0100002000100015180000f026e7306746f7461616c036e657400c01000020001000151800012026e7309746f7461616c6e657403636f6d00 39193 0b2000000001000000000000037777770c726f757465706c616e6e6572026e6c0000010001 0b2080000001000000020002037777770c726f757465706c616e6e6572026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01dc01000020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 39194 d708001000010000000000000a76657265656e69676465026e6c00000f0001 d708800000010000000200000a76657265656e69676465026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 39195 2e9500000001000000000000026e73087261626f62616e6b026e6c0000010001 2e9580000001000000020001026e73087261626f62616e6b026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 39196 ae7d000000010000000000000577686f69730f646f6d61696e2d7265676973747279026e6c00001c0001 ae7d800000010000000300020577686f69730f646f6d61696e2d7265676973747279026e6c00001c0001c01200020001000151800005026e73c012c0120002000100015180000e036e733107737572666e6574c022c0120002000100015180000b026e73026e6c036e657400c03600010001000151800004c1b09002c04700010001000151800004c0576a65 39197 3d8f00000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 3d8f80000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 39198 3d9000000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 3d9080000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 39199 4c72000000010000000000000377777704616e7762026e6c0000010001 4c72800000010000000200010377777704616e7762026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000d036e7332036b706e036e657400c02900010001000151800004c1ac840a 39200 e52b0000000100000000000009736d747072656c617906756e69706174026e6c0000010001 e52b8000000100000002000009736d747072656c617906756e69706174026e6c0000010001c0160002000100015180000b026e73026e6c036e657400c0160002000100015180001206617574683630026e73026e6c027575c037 39201 a7500000000100000000000009736d747072656c617906756e69706174026e6c00001c0001 a7508000000100000002000009736d747072656c617906756e69706174026e6c00001c0001c0160002000100015180000b026e73026e6c036e657400c0160002000100015180001206617574683630026e73026e6c027575c037 39202 494a0000000100000000000007756e696d61696c06756e69706174026e6c0000010001 494a8000000100000002000007756e696d61696c06756e69706174026e6c0000010001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c035 39203 eff50000000100000000000007756e696d61696c06756e69706174026e6c00001c0001 eff58000000100000002000007756e696d61696c06756e69706174026e6c00001c0001c0140002000100015180000b026e73026e6c036e657400c0140002000100015180001206617574683630026e73026e6c027575c035 39204 89dc000000010000000000000577686f69730f646f6d61696e2d7265676973747279026e6c0000010001 89dc800000010000000300020577686f69730f646f6d61696e2d7265676973747279026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000e036e733107737572666e6574c022c0120002000100015180000b026e73026e6c036e657400c03600010001000151800004c1b09002c04700010001000151800004c0576a65 39205 3d1600000001000000000000036d78320663617374656c026e6c0000010001 3d1680000001000000020002036d78320663617374656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b00010001000151800004c3558244c03d00010001000151800004c3558245 39206 fc42000000010000000000000a77656e6e696e6b686f66026e6c00000f0001 fc42800000010000000200010a77656e6e696e6b686f66026e6c00000f0001c00c0002000100015180000a036e733303777873c017c00c00020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 39207 f5e3000000010000000000000579756363610464697661026e6c0000010001 f5e3800000010000000200000579756363610464697661026e6c0000010001c0120002000100015180000e036e73310464697661036e657400c01200020001000151800006036e7332c02f 39208 7791000000010000000000000579756363610464697661026e6c00001c0001 7791800000010000000200000579756363610464697661026e6c00001c0001c0120002000100015180000e036e73310464697661036e657400c01200020001000151800006036e7332c02f 39209 323500000001000000000000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573106b72656e73636f6e73756c74616e6379026e6c0000060001 323584030001000000010000035f6763045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573106b72656e73636f6e73756c74616e6379026e6c0000060001c04500060001000038400036026e730f646f6d61696e2d7265676973747279c0450a686f73746d6173746572c05c0bf1e540000070800000384000278d0000003840 39210 6c8500000001000000000000026e730d646f6d65696e656e6d61726b74026e6c0000010001 6c8580000001000000020002026e730d646f6d65696e656e6d61726b74026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043e320c64c03f000100010001518000043e64366a 39211 58ac00000001000000000000036e73320d646f6d65696e656e6d61726b74026e6c0000010001 58ac80000001000000020002036e73320d646f6d65696e656e6d61726b74026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc032000100010001518000043e320c64c00c000100010001518000043e64366a 39212 74220000000100000000000005656e726166026e6c00000f0001 74228000000100000002000205656e726166026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc012c00c00020001000151800006036e7332c029c02600010001000151800004c26d0642c03e00010001000151800004c26d0963 39213 f4c200000001000000000000036e73310773656172636879026e6c0000010001 f4c280000001000000020002036e73310773656172636879026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9aa1235c03a00010001000151800004507e81e0 39214 5f9200000001000000000000036e73320773656172636879026e6c0000010001 5f9280000001000000020002036e73320773656172636879026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d9aa1235c00c00010001000151800004507e81e0 39215 fffc0000000100000000000008706574706f776572026e6c00000f0001 fffc8000000100000002000208706574706f776572026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 39216 616f0000000100000000000003777777057465737361026e6c0000010001 616f8000000100000002000203777777057465737361026e6c0000010001c0100002000100015180000e07646e732d70726903626f78c016c0100002000100015180000a07646e732d736563c032c02a00010001000151800004d97700fac04400010001000151800004d97704fa 39217 39ee0000000100000000000003777777126573646567652d726569676572736461616c026e6c0000010001 39ee8000000100000002000203777777126573646567652d726569676572736461616c026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec023c01000020001000151800006036e7332c03bc03700010001000151800004c29f4906c04f00010001000151800004c29fb004 39218 db0f000000010000000000000574726f7577026e6c00000f0001 db0f800000010000000300020574726f7577026e6c00000f0001c00c00020001000151800015036e73310b70696e6b726f6363616465036e657400c00c0002000100015180000e026e73086d656761706c6578c012c00c00020001000151800006036e7331c04ac04700010001000151800004504f6101c06100010001000151800004504f6102 39219 35ad0000000100000000000006666c616d636f06787334616c6c026e6c0000010001 35ad8000000100000003000206666c616d636f06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39220 bcac00000001000000000000046a6f6273046e756f6e026e6c0000010001 bcac80000001000000020001046a6f6273046e756f6e026e6c0000010001c0110002000100015180000d026e73046575726f036e657400c0110002000100015180000d026e73076575726f6e6574c016c04300010001000151800004c2860043 39221 c9ff000000010000000000000a726163657265706f7274026e6c00000f0001 c9ff800000010000000200020a726163657265706f7274026e6c00000f0001c00c0002000100015180000a036e733103677673c017c00c00020001000151800006036e7332c02fc02b000100010001518000045054e1aac04100010001000151800004d4ccc646 39222 98fb000000010000000000000b62757267686f6c64696e67026e6c00000f0001 98fb800000010000000200020b62757267686f6c64696e67026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc018c00c00020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 39223 e78b00000001000000000000036e733109666972737466696e64026e6c0000010001 e78b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39224 e6fd00000001000000000000036e733209666972737466696e64026e6c0000010001 e6fd80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39225 a53f00000001000000000000046d61696c036d6968026e6c0000010001 a53f80000001000000020002046d61696c036d6968026e6c0000010001c0110002000100015180001004646e73310869636f6d70616e79c015c0110002000100015180000704646e7332c02ec029000100010001518000043e3a890ac045000100010001518000043e3a890b 39226 615900000001000000000000046d61696c036d6968026e6c00001c0001 615980000001000000020002046d61696c036d6968026e6c00001c0001c0110002000100015180001004646e73310869636f6d70616e79c015c0110002000100015180000704646e7332c02ec029000100010001518000043e3a890ac045000100010001518000043e3a890b 39227 faf400000001000000000000046d61696c036d6968026e6c0000260001 faf480000001000000020002046d61696c036d6968026e6c0000260001c0110002000100015180001004646e73310869636f6d70616e79c015c0110002000100015180000704646e7332c02ec029000100010001518000043e3a890ac045000100010001518000043e3a890b 39228 5f0600000001000000000000036e73310e6469726563747365727669636573026e6c00001c0001 5f0680000001000000030003036e73310e6469726563747365727669636573026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d994aa05c04100010001000151800004d994aa06c05300010001000151800004d994aa07 39229 13f800000001000000000000036e73310e6469726563747365727669636573026e6c0000260001 13f880000001000000030003036e73310e6469726563747365727669636573026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d994aa05c04100010001000151800004d994aa06c05300010001000151800004d994aa07 39230 175800000001000000000000036e73320e6469726563747365727669636573026e6c00001c0001 175880000001000000030003036e73320e6469726563747365727669636573026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03300010001000151800004d994aa05c00c00010001000151800004d994aa06c05300010001000151800004d994aa07 39231 20e000000001000000000000036e73320e6469726563747365727669636573026e6c0000260001 20e080000001000000030003036e73320e6469726563747365727669636573026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03300010001000151800004d994aa05c00c00010001000151800004d994aa06c05300010001000151800004d994aa07 39232 334c00000001000000000000036e73330e6469726563747365727669636573026e6c00001c0001 334c80000001000000030003036e73330e6469726563747365727669636573026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03300010001000151800004d994aa05c04500010001000151800004d994aa06c00c00010001000151800004d994aa07 39233 420200000001000000000000036e73330e6469726563747365727669636573026e6c0000260001 420280000001000000030003036e73330e6469726563747365727669636573026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03300010001000151800004d994aa05c04500010001000151800004d994aa06c00c00010001000151800004d994aa07 39234 b0990000000100000000000010696e666f776562616d7374657264616d026e6c00000f0001 b0998000000100000002000210696e666f776562616d7374657264616d026e6c00000f0001c00c00020001000151800011036e73310a696e32686f7374696e67c01dc00c00020001000151800006036e7332c035c03100010001000151800004d43d3362c04e00010001000151800004d43d3363 39235 2d7e00000001000000000000037777770c7265696b6963656e7472756d026e6c0000010001 2d7e80000001000000030002037777770c7265696b6963656e7472756d026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 39236 62ee000000010000000000000377777711766972747565656c7665726469656e656e026e6c0000010001 62ee800000010000000200020377777711766972747565656c7665726469656e656e026e6c0000010001c0100002000100015180000e036e73310777657073797465c022c01000020001000151800006036e7332c03ac03600010001000151800004d5f72968c05000010001000151800004d5f72969 39237 c45200100001000000000001036e733103757063026e6c00000100010000290800000080000000 c45280000001000000030004036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 39238 622900100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000080000000 622980000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 39239 c9e90000000100000000000003646e62026e6c00000f0001 c9e98000000100000002000003646e62026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 39240 c69200000001000000000000036e733109666972737466696e64026e6c0000010001 c69280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39241 f90800000001000000000000036e733209666972737466696e64026e6c0000010001 f90880000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39242 02d000000001000000000000066b61726d6163036d6373026e6c0000ff0001 02d080000001000000020001066b61726d6163036d6373026e6c0000ff0001c01300020001000151800005026e73c013c01300020001000151800010036e7332096379626572636f6d6dc017c02b00010001000151800004d5c40185 39243 197b0000000100000000000003574942024e4c00000f0001 197b8000000100000002000103574942024e4c00000f0001c00c0002000100015180000c036e7330056e65786974c010c00c0002000100015180000f036e7331056e65786974036e657400c02400010001000151800004d4ccf5d3 39244 f83b00000001000000000000026463065f6d73646373094452454d454c2d4d47024e4c0000060001 f83b84030001000000010000026463065f6d73646373094452454d454c2d4d47024e4c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 39245 99410000000100000000000003777777076e656473746174026e6c0000010001 99418000000100000002000203777777076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39246 d1a3000000010000000000000d646576726965737265697a656e026e6c00000f0001 d1a3800000010000000300000d646576726965737265697a656e026e6c00000f0001c00c0002000100015180001505646e7331300961637469766569737003636f6d00c00c0002000100015180000805646e733131c034c00c0002000100015180000805646e733132c034 39247 e6c30000000100000000000003706f70046a72636d026e6c0000010001 e6c38000000100000002000203706f70046a72636d026e6c0000010001c0100002000100015180000d026e7307646f7473706f74c015c01000020001000151800006036e7373c02cc029000100010001518000043eb1d102c042000100010001518000043eb1d104 39248 31d40000000100000000000006564453313630057469766473026e6c0000060001 31d48403000100000001000006564453313630057469766473026e6c0000060001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 39249 c68b00000001000000000000037777770b6472696568657576656c73026e6c0000010001 c68b80000001000000020000037777770b6472696568657576656c73026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c036 39250 392700000001000000000000037777770d706f72736368652d7061727473026e6c0000010001 392780000001000000020000037777770d706f72736368652d7061727473026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c035 39251 d7880000000100000000000003777777187870657269656e63652d776562646576656c6f706d656e74026e6c0000010001 d7888000000100000002000203777777187870657269656e63652d776562646576656c6f706d656e74026e6c0000010001c0100002000100015180000f0472617131076e657474756e65c029c01000020001000151800006036e7332c042c03d00010001000151800004d4ccf78dc05800010001000151800004d4ccf78e 39252 cefa0000000100000000000005666f72756d0e70657567656f74677469636c7562026e6c0000010001 cefa8000000100000002000005666f72756d0e70657567656f74677469636c7562026e6c0000010001c01200020001000151800013026e730a6d61696e73776974636803636f6d00c01200020001000151800006036e7333c038 39253 fcfe000000010000000000000c7063626f77796d6272697473026e6c00000f0001 fcfe800000010000000200020c7063626f77796d6272697473026e6c00000f0001c00c00020001000151800009036e7331026973c019c00c00020001000151800006036e7332c031c02d00010001000151800004d5852102c04200010001000151800004d5c41503 39254 a7aa000000010000000000000e7777772c66756e6e7967656d6573026e6c0000010001 a7aa840300010000000100000e7777772c66756e6e7967656d6573026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 39255 38560000000100000000000009652d6c756e61746963026e6c0000010001 38568000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 39256 4f6d000000010000000000000873657276696365730977656c6c696e676974026e6c0000010001 4f6d800000010000000200000873657276696365730977656c6c696e676974026e6c0000010001c0150002000100015180000c026e7306766576696461c01fc01500020001000151800006036e7332c036 39257 535700100001000000000001026e730763616d70696e61026e6c00000100010000290800000080000000 535780000001000000020003026e730763616d70696e61026e6c0000010001c00f0002000100015180000e036e733007656173796e6574c017c00f00020001000151800006036e7331c02fc02b00010001000151800004c2a55e01c04500010001000151800004c2a55e050000291000000000000000 39258 ff3b000000010000000000000377777717696e7465726e6574736572766963656c6161726265656b026e6c0000010001 ff3b800000010000000300030377777717696e7465726e6574736572766963656c6161726265656b026e6c0000010001c01000020001000151800014036e73310d3132336e616d65736572766572c028c01000020001000151800006036e7332c040c01000020001000151800006036e7333c040c03c00010001000151800004d44ff48bc05c00010001000151800004d44ffd03c06e00010001000151800004c3f5c711 39259 7665000000010000000000000e736b6277696e7465727377696a6b026e6c0000010001 7665800000010000000200020e736b6277696e7465727377696a6b026e6c0000010001c00c00020001000151800010046e733031086465616e6d6f6f72c01bc00c00020001000151800007046e733032c034c02f00010001000151800004c1cbe123c04b00010001000151800004c1cbe124 39260 552900000001000000000000036e733103757063026e6c0000010001 552980000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 39261 6c3500000001000000000000046e733032066368656c6c6f026e6c0000010001 6c3580000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 39262 17ca00000001000000000000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001 17ca80000001000000020000076d61696e2d6e6c07616a63666f6f64026e6c00000f0001c014000200010001518000110377656207616a63666f6f6403636f6d00c0140002000100015180000b0865786368616e6765c034 39263 7fef00000001000000000000026e73076e656473746174026e6c00001c0001 7fef80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39264 28ea00000001000000000000026e73076e656473746174026e6c0000260001 28ea80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39265 eb3600000001000000000000026e730763616d70696e61026e6c0000010001 eb3680000001000000020002026e730763616d70696e61026e6c0000010001c00f0002000100015180000e036e733007656173796e6574c017c00f00020001000151800006036e7331c02fc02b00010001000151800004c2a55e01c04500010001000151800004c2a55e05 39266 43df00000001000000000000036e7332076e656473746174026e6c0000010001 43df80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39267 2b8100000001000000000000036e7332076e656473746174026e6c00001c0001 2b8180000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39268 5a8a00000001000000000000036e7332076e656473746174026e6c0000260001 5a8a80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39269 a9f400000001000000000000036e7333076e656473746174026e6c0000260001 a9f480000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 39270 59fd00000001000000000000036e7334076e656473746174026e6c0000010001 59fd80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39271 a76500000001000000000000036e7334076e656473746174026e6c00001c0001 a76580000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39272 beae00000001000000000000036e7334076e656473746174026e6c0000260001 beae80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39273 966600000001000000000000037777770a62656e2d6f6e6c696e65026e6c0000010001 966680000001000000020002037777770a62656e2d6f6e6c696e65026e6c0000010001c0100002000100015180000b036e733104696e666fc01bc01000020001000151800006036e7332c033c02f00010001000151800004504fc020c04600010001000151800004504fc021 39274 2ba400000001000000000000046d61696c086465616e6d6f6f72026e6c0000010001 2ba480000001000000020002046d61696c086465616e6d6f6f72026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c02e00010001000151800004c1cbe123c04100010001000151800004c1cbe124 39275 bf2200000001000000000000046d61696c086465616e6d6f6f72026e6c00001c0001 bf2280000001000000020002046d61696c086465616e6d6f6f72026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c02e00010001000151800004c1cbe123c04100010001000151800004c1cbe124 39276 802e00000001000000000000046e733031086465616e6d6f6f72026e6c00001c0001 802e80000001000000020002046e733031086465616e6d6f6f72026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733032c011c00c00010001000151800004c1cbe123c03c00010001000151800004c1cbe124 39277 87be00000001000000000000046e733032086465616e6d6f6f72026e6c00001c0001 87be80000001000000020002046e733032086465616e6d6f6f72026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc02e00010001000151800004c1cbe123c00c00010001000151800004c1cbe124 39278 c4ee0000000100000000000003777777086d74726565787878026e6c0000010001 c4ee8000000100000002000003777777086d74726565787878026e6c0000010001c01000020001000151800013036e7331097669727475616c787303636f6d00c01000020001000151800006036e7332c031 39279 f14800000001000000000000036e733403777873026e6c0000010001 f14880000001000000030003036e733403777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 39280 1c220000000100000000000004686f6d6506706c616e6574026e6c0000010001 1c228000000100000003000304686f6d6506706c616e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a65 39281 56fc00000001000000000000046e73303903777873026e6c0000010001 56fc80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 39282 6c4700000001000000000000046e73303803777873026e6c0000010001 6c4780000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 39283 c562001000010000000000001367696e6b676f7a6f726770726f6a656374656e026e6c00000f0001 c562800000010000000200001367696e6b676f7a6f726770726f6a656374656e026e6c00000f0001c00c0002000100015180000c026e7306766576696461c020c00c00020001000151800006036e7332c037 39284 409e00000001000000000000046d6f7665026e6c00000f0001 409e80000001000000020002046d6f7665026e6c00000f0001c00c0002000100015180000e036e73310762726f656b656ec011c00c00020001000151800006036e7332c029c02500010001000151800004d5bd1466c03f00010001000151800004507edbbb 39285 c56d0000000100000000000006656d63617274026e6c0000010001 c56d8000000100000002000206656d63617274026e6c0000010001c00c0002000100015180000c026e73067574722d6978c013c00c00020001000151800006036e7332c02ac0270001000100015180000451113206c03f00010001000151800004d5c42806 39286 d1ab00000001000000000000036e733109666972737466696e64026e6c0000010001 d1ab80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39287 d1ac00000001000000000000036e733209666972737466696e64026e6c0000010001 d1ac80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39288 68a900000001000000000000036e733107616d6572636f6d026e6c0000010001 68a980000001000000020001036e733107616d6572636f6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02c00010001000151800004c2b2b20a 39289 7ae30000000100000000000015616476616e63656d6172696e65746563686e696373026e6c00001c0001 7ae38000000100000002000015616476616e63656d6172696e65746563686e696373026e6c00001c0001c00c0002000100015180000f04686e73300774697363616c69c022c00c0002000100015180000704686e7331c03b 39290 e8c700000001000000000000036d783302686e026e6c0000010001 e8c780000001000000020000036d783302686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02b 39291 160c00000001000000000000036d783102686e026e6c0000010001 160c80000001000000020000036d783102686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02b 39292 23dd00000001000000000000036d783202686e026e6c0000010001 23dd80000001000000020000036d783202686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02b 39293 555000000001000000000000036e733503777873026e6c0000010001 555080000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 39294 148000000001000000000000036d783102686e026e6c0000010001 148080000001000000020000036d783102686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02b 39295 81840000000100000000000006656d6d617573026e6c00000f0001 81848000000100000002000206656d6d617573026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c013c00c00020001000151800006036e7332c02ac02700010001000151800004d4cb0e42c04200010001000151800004d4cb1221 39296 b94000000001000000000000037777770f6261636b746f746865667574757265026e6c0000010001 b94080000001000000020000037777770f6261636b746f746865667574757265026e6c0000010001c01000020001000151800013026e730a646168686f7374696e6703636f6d00c01000020001000151800006036e7332c037 39297 d1ae00000001000000000000036e733109666972737466696e64026e6c0000010001 d1ae80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39298 d1af00000001000000000000036e733209666972737466696e64026e6c0000010001 d1af80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39299 2d3300000001000000000000026e73066265656b756d026e6c0000010001 2d3380000001000000020002026e73066265656b756d026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5880e33c03800010001000151800004d5880e34 39300 fad700000001000000000000036e733207776562726f6f74026e6c00001c0001 fad780000001000000020002036e733207776562726f6f74026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eddc787c00c0001000100015180000450648b3c 39301 2c4d00000001000000000000036e733107776562726f6f74026e6c00001c0001 2c4d80000001000000020002036e733107776562726f6f74026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eddc787c03a0001000100015180000450648b3c 39302 38aa0000000100000000000004686f6d6506706c616e6574026e6c0000010001 38aa8000000100000003000304686f6d6506706c616e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a65 39303 40ec0000000100000000000004646e733103766970026e6c00001c0001 40ec8000000100000003000304646e733103766970026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c0110002000100015180000704646e7333c011c00c00010001000151800004d44fe803c03700010001000151800004c3f5c782c04a00010001000151800004d44ff303 39304 67b10000000100000000000004646e733103766970026e6c0000260001 67b18000000100000003000304646e733103766970026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c0110002000100015180000704646e7333c011c00c00010001000151800004d44fe803c03700010001000151800004c3f5c782c04a00010001000151800004d44ff303 39305 f5550000000100000000000004646e733203766970026e6c00001c0001 f5558000000100000003000304646e733203766970026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0110002000100015180000704646e7333c011c02900010001000151800004d44fe803c00c00010001000151800004c3f5c782c04a00010001000151800004d44ff303 39306 3d1c0000000100000000000004646e733203766970026e6c0000260001 3d1c8000000100000003000304646e733203766970026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0110002000100015180000704646e7333c011c02900010001000151800004d44fe803c00c00010001000151800004c3f5c782c04a00010001000151800004d44ff303 39307 2b8f0000000100000000000004646e733303766970026e6c00001c0001 2b8f8000000100000003000304646e733303766970026e6c00001c0001c0110002000100015180000704646e7331c011c0110002000100015180000704646e7332c011c01100020001000151800002c00cc02900010001000151800004d44fe803c03c00010001000151800004c3f5c782c00c00010001000151800004d44ff303 39308 19d90000000100000000000004646e733303766970026e6c0000260001 19d98000000100000003000304646e733303766970026e6c0000260001c0110002000100015180000704646e7331c011c0110002000100015180000704646e7332c011c01100020001000151800002c00cc02900010001000151800004d44fe803c03c00010001000151800004c3f5c782c00c00010001000151800004d44ff303 39309 5a6d00000001000000000000086176656e747572610a62686d732d67726f6570026e6c0000010001 5a6d80000001000000020002086176656e747572610a62686d732d67726f6570026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c03400010001000151800004d9726162c04600010001000151800004d9726161 39310 ca58000000010000000000000e736c6172746962617274666173740a62686d732d67726f6570026e6c0000010001 ca58800000010000000200020e736c6172746962617274666173740a62686d732d67726f6570026e6c0000010001c01b00020001000151800006036e7331c01bc01b00020001000151800006036e7332c01bc03a00010001000151800004d9726162c04c00010001000151800004d9726161 39311 464b00100001000000000001036e73320c636f6e63657074732d696374026e6c00000100010000290800000080000000 464b80000001000000020003036e73320c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800002c00cc03100010001000151800004d5c51c03c00c00010001000151800004d5c51e4b0000291000000000000000 39312 101a0000000100000000000008686f73746e616d650462696e640000100003 101a8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 39313 ec99000000010000000000000469736277026e6c0000010001 ec99800000010000000200020469736277026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c011c00c00020001000151800006036e7332c028c02500010001000151800004d9aa2042c03e00010001000151800004d9aa2c06 39314 74a900000001000000000000036e733207626265796f6e64026e6c0000010001 74a980000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 39315 f4ba00000001000000000000056165646573026e6c0000010001 f4ba80000001000000020000056165646573026e6c0000010001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c02a 39316 664a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 664a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39317 a6c800000001000000000000037777770873747564696f3532026e6c0000010001 a6c880000001000000020001037777770873747564696f3532026e6c0000010001c0100002000100015180000f036e73330864686f7374696e67c019c01000020001000151800006036e7332c031c04800010001000151800004515b000a 39318 b96000000001000000000000037777770a63642d686f65736a6573026e6c0000010001 b96080000001000000030002037777770a63642d686f65736a6573026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 39319 27f900000001000000000000077574726f6e6978026e6c00000f0001 27f984030001000000010000077574726f6e6978026e6c00000f0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 39320 b4d900000001000000000000153231322d3132332d3134302d3132352d756e6465660774697363616c69026e6c0000010001 b4d980000001000000030002153231322d3132332d3134302d3132352d756e6465660774697363616c69026e6c0000010001c0220002000100015180000704616e7331c022c0220002000100015180000704616e7332c022c0220002000100015180001404616e73330a74697363616c696e657402626500c03e00010001000151800004c3f14d38c05100010001000151800004c3f13325 39321 72aa00000001000000000000037777770870726f73636f7065026e6c0000010001 72aa80000001000000020001037777770870726f73636f7065026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c019c04600010001000151800004c2860043 39322 add000000001000000000000036e73330767617574656e67026e6c0000010001 add080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39323 920e0000000100000000000006726564626179026e6c0000010001 920e8000000100000002000206726564626179026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c013c00c00020001000151800006036e7332c02ac02700010001000151800004d4cb0e42c04200010001000151800004d4cb1221 39324 14e300000001000000000000036e73340767617574656e67026e6c0000010001 14e380000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39325 fd510000000100000000000009652d6c756e61746963026e6c0000010001 fd518000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 39326 2e5a000000010000000000000575726975730473656d61026e6c0000010001 2e5a800000010000000300030575726975730473656d61026e6c0000010001c01200020001000151800012047072693103646e73067073696e6574c017c012000200010001518000070470726932c030c012000200010001518000070470726933c030c02b000100010001518000049a0ff9a6c049000100010001518000049a0ff9aac05c000100010001518000049a0ff9ae 39327 2d0200000001000000000000096175746f2d7375636f026e6c00000f0001 2d0280000001000000020002096175746f2d7375636f026e6c00000f0001c00c00020001000151800018067765626e69780e6575726f636f6e73756c74616e74c016c00c0002000100015180000a076d61696c6e6978c031c02a000100010001518000045117e555c04e000100010001518000045117e556 39328 ddbb00000001000000000000026e73056269626974026e6c0000010001 ddbb80000001000000030002026e73056269626974026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00f00020001000151800006036e7332c00fc00c00010001000151800004d4ce201fc04e00010001000151800004d4ce2020 39329 929700000001000000000000036e7332056269626974026e6c0000010001 929780000001000000030002036e7332056269626974026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c01000020001000151800002c00cc02a00010001000151800004d4ce201fc00c00010001000151800004d4ce2020 39330 5cb900000001000000000000026e7303616d730874656c6567617465026e6c0000010001 5cb980000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 39331 719b00000001000000000000037777770b7265696b69666f72756d73026e6c0000010001 719b80000001000000030002037777770b7265696b69666f72756d73026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 39332 1e4c0000000100000000000004646e7332096469676974616c7573026e6c0000010001 1e4c8000000100000003000304646e7332096469676974616c7573026e6c0000010001c0110002000100015180000e0b6e616d6573657276657231c011c0110002000100015180000e0b6e616d6573657276657232c011c0110002000100015180000e0b6e616d6573657276657233c011c02f0001000100015180000451ad2020c0490001000100015180000451ad2021c0630001000100015180000452c049aa 39333 23970000000100000000000004646e7331096469676974616c7573026e6c0000010001 23978000000100000003000304646e7331096469676974616c7573026e6c0000010001c0110002000100015180000e0b6e616d6573657276657231c011c0110002000100015180000e0b6e616d6573657276657232c011c0110002000100015180000e0b6e616d6573657276657233c011c02f0001000100015180000451ad2020c0490001000100015180000451ad2021c0630001000100015180000452c049aa 39334 a44c00000001000000000000087761616c64696a6b026e6c00000f0001 a44c80000001000000020000087761616c64696a6b026e6c00000f0001c00c0002000100015180000f07686f7374696e670470756e74c015c00c00020001000151800006036e7331c031 39335 2fb20000000100000000000006636861726973026e6c00000f0001 2fb28000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 39336 affd000000010000000000000377777714706c616167646965726265737472696a64696e67026e6c0000010001 affd800000010000000200000377777714706c616167646965726265737472696a64696e67026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03f 39337 c5cb0000000100000000000006646f6e6e6572026e6c00000f0001 c5cb8000000100000002000006646f6e6e6572026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02b 39338 b7f200000001000000000000046d61696c09617175617365727661026e6c0000010001 b7f280000001000000020000046d61696c09617175617365727661026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c035 39339 fd42000000010000000000000377777709756974736c6167656e026e6c0000010001 fd42800000010000000300010377777709756974736c6167656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 39340 05b10000000100000000000007776562736974650a6c656964656e756e6976026e6c0000010001 05b18000000100000003000307776562736974650a6c656964656e756e6976026e6c0000010001c0140002000100015180000b08736865726c6f636bc014c0140002000100015180000906776174736f6ec014c0140002000100015180000e036e733107737572666e6574c01fc0330001000100015180000484e50806c04a0001000100015180000484e51602c05f00010001000151800004c0576a65 39341 ff0900000001000000000000037777770d766163616e6365736f6c65696c026e6c0000010001 ff0980000001000000030003037777770d766163616e6365736f6c65696c026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ec0100002000100015180000a076e736175746832c03ac0100002000100015180000a076e736175746833c03ac03200010001000151800004d5880c33c04c00010001000151800004d5880c3bc06200010001000151800004d4ccc00b 39342 d148000000010000000000000369766d026e6c0000ff0001 d148800000010000000300010369766d026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 39343 28450000000100000000000003777777097061726e6173736961026e6c0000010001 28458000000100000002000003777777097061726e6173736961026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c034 39344 2db70000000100000000000003666c79036b6c6d026e6c0000010001 2db78000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 39345 ad370000000100000000000005646e732d31056c61646f74026e6c0000010001 ad378000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39346 16fa0000000100000000000005646e732d32056c61646f74026e6c0000010001 16fa8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39347 d12c00000001000000000000036e733109666972737466696e64026e6c0000010001 d12c80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39348 dc8e0000000100000000000005646e732d32056c61646f74026e6c0000010001 dc8e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39349 a5af00000001000000000000036e733209666972737466696e64026e6c0000010001 a5af80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39350 2a310000000100000000000003777777076368617474656e056765747873026e6c0000010001 2a318000000100000002000003777777076368617474656e056765747873026e6c0000010001c01800020001000151800011056c656d6f6e0571696e6970036e657400c01800020001000151800007046c696d65c038 39351 30a8000000010000000000000734657665727931026e6c0000010001 30a8800000010000000200010734657665727931026e6c0000010001c00c00020001000151800009026e730365646ec014c00c00020001000151800010036e733109756e69736f75726365c014c028000100010001518000043e3a51e4 39352 6e2e000000010000000000000b61747468656d6f766965730b7375706572696f722d6973026e6c0000010001 6e2e800000010000000200020b61747468656d6f766965730b7375706572696f722d6973026e6c0000010001c0180002000100015180000a036e733103686978c024c01800020001000151800006036e7332c03cc03800010001000151800004d5a0da0ac04e0001000100015180000451112ec3 39353 e66d0000000100000000000006737467616263026e6c0000ff0001 e66d8000000100000002000106737467616263026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c013c04000010001000151800004c2860043 39354 bf1b0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 bf1b8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 39355 5cee00000001000000000000037777770b736368696c6465726d616e026e6c0000010001 5cee80000001000000020000037777770b736368696c6465726d616e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 39356 24e700000001000000000000026373026e6c0000ff0001 24e780000001000000020002026373026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800013036e73320c636f6c742d74656c65636f6dc00fc02300010001000151800004d47bfe02c03500010001000151800004d44ea00e 39357 63ce00000001000000000000036e73320c636f6c742d74656c65636f6d026e6c0000010001 63ce80000001000000020002036e73320c636f6c742d74656c65636f6d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03100010001000151800004d44ea00dc00c00010001000151800004d44ea00e 39358 5c33000000010000000000000d7265696a6e2d7665726b75696c026e6c0000010001 5c33800000010000000200020d7265696a6e2d7665726b75696c026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 39359 1bbb0000000100000000000003777777097574696c6974696573026e6c0000010001 1bbb8000000100000002000003777777097574696c6974696573026e6c0000010001c0100002000100015180000e026e73056e65647873036e657400c01000020001000151800006036e7332c031 39360 09ff000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 09ff800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 39361 f40800000001000000000000037777770761626e616d726f026e6c0000010001 f40880000001000000020002037777770761626e616d726f026e6c0000010001c0100002000100015180000b0870686f626f733031c010c0100002000100015180000b0870686f626f733032c010c02c00010001000151800004a7cac30bc04300010001000151800004a7cac30c 39362 83fa000000010000000000000870686f626f7330320761626e616d726f026e6c0000010001 83fa800000010000000200020870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c 39363 ecbf000000010000000000000e6d61706d616368696e65646430330a6c6f6b617469656e6574026e6c0000010001 ecbf800000010000000200020e6d61706d616368696e65646430330a6c6f6b617469656e6574026e6c0000010001c01b0002000100015180000b036e733104696e666fc026c01b00020001000151800006036e7332c03ec03a00010001000151800004504fc020c05100010001000151800004504fc021 39364 375828000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373076d6b626164616d026e6c000021000100000258001900000064018506736572766572076d6b626164616d026e6c00 3758a8040000000000000000 39365 05a3000000010000000000000867616d656c696665026e6c00000f0001 05a3800000010000000200000867616d656c696665026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 39366 cd7b00000001000000000000055f6c646170045f746370026463065f6d736463730870637365727630310a4f6f737465696e646572026e6c0000210001 cd7b84030001000000010000055f6c646170045f746370026463065f6d736463730870637365727630310a4f6f737465696e646572026e6c0000210001c03500060001000038400036026e730f646f6d61696e2d7265676973747279c0350a686f73746d6173746572c04c0bf1e540000070800000384000278d0000003840 39367 134c0000000100000000000004444e5331064d494e4c4e56026e6c0000010001 134c8000000100000003000304444e5331064d494e4c4e56026e6c0000010001c01100020001000151800002c00cc0110002000100015180000e036e733107737572666e6574c018c0110002000100015180000704646e7332c011c00c00010001000151800004910c2201c03a00010001000151800004c0576a65c05400010001000151800004910c2202 39368 89a60000000100000000000004444e5332064d494e4c4e56026e6c0000010001 89a68000000100000003000304444e5332064d494e4c4e56026e6c0000010001c0110002000100015180000704646e7331c011c0110002000100015180000e036e733107737572666e6574c018c01100020001000151800002c00cc02c00010001000151800004910c2201c03f00010001000151800004c0576a65c00c00010001000151800004910c2202 39369 2b0d000000010000000000000a73746172746b6162656c026e6c0000ff0001 2b0d800000010000000300010a73746172746b6162656c026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 39370 0000000070024000ff160000020405b401010402 000080010000000000000000 39371 e26c00000001000000000000036e733103617474026e6c0000010001 e26c80000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 39372 a20300000001000000000000036e733203617474026e6c0000010001 a20380000001000000020002036e733203617474026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 39373 b7cebe2650104470b1650000000000000000 39374 261100000001000000000000036e73310477656233026e6c00001c0001 261180000001000000020002036e73310477656233026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d436240ec03700010001000151800004c2b262ef 39375 e51800000001000000000000036e73310477656233026e6c0000260001 e51880000001000000020002036e73310477656233026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d436240ec03700010001000151800004c2b262ef 39376 7a5800000001000000000000036e73320477656233026e6c00001c0001 7a5880000001000000020002036e73320477656233026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d436240ec00c00010001000151800004c2b262ef 39377 b7cebe2650184470d07c0000008c6780000000010001000000000f313039393531313632373739342d330000f900010f313039393531313632373739342d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc34403c4db400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000 39378 97d500000001000000000000036e73320477656233026e6c0000260001 97d580000001000000020002036e73320477656233026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d436240ec00c00010001000151800004c2b262ef 39379 a13100000001000000000000037777770d6472756773696e666f7465616d026e6c0000010001 a13180000001000000030001037777770d6472756773696e666f7465616d026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ec01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c050c032000100010001518000043efa0202 39380 03bb00000001000000000000037777770e6172626569647372656368746572026e6c0000010001 03bb80000001000000020000037777770e6172626569647372656368746572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 39381 b7cebe3450114462b0d60000000000000000 39382 4d5f0000000100000000000007547269657374650a63656e74726963627367026e6c0000060001 4d5f8403000100000001000007547269657374650a63656e74726963627367026e6c0000060001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 39383 0000000070024000734a0000020405b401010402 000080010000000000000000 39384 b7cebe3550104462b0d50000000000000000 39385 b7cf52485010447091760000000000000000 b7cfd2440000000000000000 39386 b7cf524850184470b6f10000008c621d000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc34403c4db400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000 b7cfd2440000000000000000 39387 3614000000010000000000000663617374656c026e6c00000f0001c00c000f0001 3614800000010000000200020663617374656c026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 39388 7e3700000001000000000000024e5308565555525745524b024e4c0000010001 7e3780000001000000030001024e5308565555525745524b024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 39389 1bcc0000000100000000000003686c6903617a75026e6c00000f0001 1bcc8000000100000003000303686c6903617a75026e6c00000f0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c014c01000020001000151800009036e7333027575c014c028000100010001518000048f79fe01c03900010001000151800004c0576a65c0530001000100015180000483d31020 39390 2618000000010000000000000663617374656c026e6c00000f0001c00c000f0001 2618800000010000000200020663617374656c026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 39391 3e24000000010000000000000663617374656c026e6c00000f0001c00c000f0001 3e24800000010000000200020663617374656c026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 39392 170228000001000200000000026e6c000006000107547269657374650a63656e74726963627367026e6c00000500fe000000000000c014000100010000000000040a010124 1702a8040000000000000000 39393 38ad00000001000000000000096d6f7265706f776572077468656d6f6c65026e6c0000010001 38ad80000001000000020000096d6f7265706f776572077468656d6f6c65026e6c0000010001c01600020001000151800013036e73310973797374656d69707303636f6d00c01600020001000151800006036e7332c036 39394 b7cf52565011446290e70000000000000000 b7cfd2540000000000000000 39395 000000007002400058000000020405b401010402 000080010000000000000000 39396 262a000000010000000000000663617374656c026e6c00000f0001c00c000f0001 262a800000010000000200020663617374656c026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 39397 3e36000000010000000000000663617374656c026e6c00000f0001c00c000f0001 3e36800000010000000200020663617374656c026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 39398 000000007002400047b900000204056401010402 000080010000000000000000 39399 b7cf52575010446290e60000000000000000 b7cfd2540000000000000000 39400 b7d1f65650104470d21b0000000000000000 39401 3654000000010000000000000663617374656c026e6c0000010001c00c00010001 3654800000010000000200020663617374656c026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 39402 b7d1f656501844703f370000008c1a7d000000010001000000000f313039393531313632373739342d320000f900010f313039393531313632373739342d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afc34403c4db400030000002d4e544c4d535350000100000097b200c0070007002600000006000600200000005345525645524d4b424144414d0000 39403 d8f30000000100000000000003777777076368617474656e056765747873026e6c0000010001 d8f38000000100000002000003777777076368617474656e056765747873026e6c0000010001c01800020001000151800011056c656d6f6e0571696e6970036e657400c01800020001000151800007046c696d65c038 39404 73b90000000100000000000003706f700b616e757361747265736965026e6c0000010001 73b98000000100000003000203706f700b616e757361747265736965026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 39405 b7d27a61501040b041390000000000000000 b7d2fa640000000000000000 39406 b7d1f66450114462d18c0000000000000000 39407 b7d27a61501840b0204f00000087126e000000010001000000000e3939363433323431323639302d330000f900010e3939363433323431323639302d330000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afba9403c4d2900030000002a4e544c4d535350000100000097b200e003000300270000000700070020000000545249455354454243430000 b7d2fa640000000000000000 39408 dfeb0000000100000000000003706f700b616e757361747265736965026e6c0000010001 dfeb8000000100000003000203706f700b616e757361747265736965026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 39409 27a6000000010000000000000a57494c47454e5354414d024e4c00000f0001 27a6800000010000000200020a57494c47454e5354414d024e4c00000f0001c00c0002000100015180000d036e7331066e6c74726565c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d4b20403c04400010001000151800004d5881e45 39410 c43c0000000100000000000003647a68026e6c0000ff0001 c43c8000000100000002000003647a68026e6c0000ff0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c028 39411 f4f50000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 f4f58000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 39412 68a200000001000000000000117569746765766572696a6b6c656d656e74026e6c0000ff0001 68a280000001000000020001117569746765766572696a6b6c656d656e74026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c01ec00c00020001000151800010036e733206776964657873036e657400c03200010001000151800004d4ccc0fc 39413 b7d27a6f501140a240af0000000000000000 b7d2fa640000000000000000 39414 0000000070024000ddcf00000204056401010402 000080010000000000000000 39415 b7d1f66550104462d18b0000000000000000 39416 92c100000001000000000000046d61696c08756e69766572736f026e6c0000010001 92c180000001000000030003046d61696c08756e69766572736f026e6c0000010001c0110002000100015180000e076e73617574683103626974c01ac0110002000100015180000a076e736175746832c036c0110002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 39417 3e8e0000000100000000000003777777096e7474622d77657374026e6c0000010001 3e8e8000000100000002000203777777096e7474622d77657374026e6c0000010001c0100002000100015180000e036e7331076a646e686f7374c01ac01000020001000151800006036e7332c032c02e000100010001518000045054e451c048000100010001518000045054e452 39418 112600000001000000000000026e73076e656473746174026e6c00001c0001 112680000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39419 d2ff00000001000000000000026e73076e656473746174026e6c0000260001 d2ff80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39420 f52300000001000000000000036e7332076e656473746174026e6c0000010001 f52380000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39421 d78500000001000000000000036e7332076e656473746174026e6c00001c0001 d78580000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39422 5bc700000001000000000000036e7333076e656473746174026e6c00001c0001 5bc780000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 39423 744100000001000000000000036e7333076e656473746174026e6c0000260001 744180000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 39424 c7a400000001000000000000036e7334076e656473746174026e6c0000010001 c7a480000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39425 39d400000001000000000000036e7334076e656473746174026e6c00001c0001 39d480000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39426 52bd00000001000000000000036e7334076e656473746174026e6c0000260001 52bd80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39427 b7d37167501040b0e0480000000000000000 b7d3f1640000000000000000 39428 b7d27a70501040a240ae0000000000000000 b7d2fa740000000000000000 39429 b7d37167501840b09f7f00000087344d000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afba9403c4d2900030000002a4e544c4d535350000100000097b200e003000300270000000700070020000000545249455354454243430000 b7d3f1640000000000000000 39430 531c00000001000000000000036e73320a6461632d706c616e6574026e6c0000260001 531c80000001000000030003036e73320a6461632d706c616e6574026e6c0000260001c0100002000100015180000c036e7331056264726567c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d44ff4dac04700010001000151800004d44ff642c05900010001000151800004c3f5c70a 39431 b7d37175501140a2dfbe0000000000000000 b7d3f1740000000000000000 39432 0000000070024000d32800000204056401010402 000080010000000000000000 39433 b7d37176501040a2dfbd0000000000000000 b7d3f1740000000000000000 39434 b7d40c73501040b03a950000000000000000 b7d48c740000000000000000 39435 dbee00000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 dbee80000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 39436 aec100000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 aec180000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 39437 e4b10000000100000000000007746869656c656e066d796164736c026e6c0000ff0001 e4b18000000100000002000207746869656c656e066d796164736c026e6c0000ff0001c0140002000100015180000f036e73310863616d627269756dc01bc01400020001000151800006036e7332c033c02f00010001000151800004d9131082c04a00010001000151800004d5efb202 39438 1b460000000100000000000003777777096a616e2d67726f656e026e6c0000010001 1b468000000100000002000003777777096a616e2d67726f656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 39439 b7d40c73501840b0d7ec00000087562c000000010001000000000e3939363433323431323639302d320000f900010e3939363433323431323639302d320000f900ff00000000004d03677373096d6963726f736f667403636f6d00403afba9403c4d2900030000002a4e544c4d535350000100000097b200e003000300270000000700070020000000545249455354454243430000 b7d48c740000000000000000 39440 b7d40c81501140a23a0b0000000000000000 b7d48c840000000000000000 39441 b7d40c82501040a23a0a0000000000000000 b7d48c840000000000000000 39442 1bff00000001000000000000066875697a656e056461786973026e6c0000010001 1bff80000001000000020002066875697a656e056461786973026e6c0000010001c0130002000100015180000f036e7331086461786973776562c019c01300020001000151800006036e7332c031c02d00010001000151800004c323c083c04800010001000151800004c323c084 39443 711300000001000000000000046d61696c06636f6e6e6f72026e6c0000010001 711380000001000000020000046d61696c06636f6e6e6f72026e6c0000010001c0110002000100015180000b026e73026e6c036e657400c0110002000100015180001206617574683630026e73026e6c027575c032 39444 a9a200000001000000000000037777770c7761746b696a6b6a656e6f75026e6c0000010001 a9a280000001000000020000037777770c7761746b696a6b6a656e6f75026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c036 39445 d42400000001000000000000096d616b656c61617273096f7665727a69636874026e6c0000010001 d42480000001000000030003096d616b656c61617273096f7665727a69636874026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800006036e7333c016c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 39446 b60c00000001000000000000036e73320c636f6e63657074732d696374026e6c0000010001 b60c80000001000000020002036e73320c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800002c00cc03100010001000151800004d5c51c03c00c00010001000151800004d5c51e4b 39447 79ed0000000100000000000008616c747265636874026e6c00000f0001 79ed8000000100000002000008616c747265636874026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c02c 39448 adfa0000000100000000000005617274616e026e6c0000010001 adfa8000000100000002000205617274616e026e6c0000010001c00c0002000100015180000c026e73067574722d6978c012c00c00020001000151800006036e7332c029c0260001000100015180000451113206c03e00010001000151800004d5c42806 39449 76d50010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 76d58000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 39450 5ad20010000100000000000103626c3102626c06787334616c6c026e6c00002600010000290800000080000000 5ad28000000100000003000303626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 39451 20640000000100000000000009652d6c756e61746963026e6c0000010001 20648000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 39452 c4af000000010000000000000777697373696e6b026e6c00000f0001 c4af800000010000000300030777697373696e6b026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c014c00c0002000100015180000a076e736175746832c030c00c0002000100015180000a076e736175746833c030c02800010001000151800004d5880c33c04200010001000151800004d5880c3bc05800010001000151800004d4ccc00b 39453 999b00000001000000000000037777770c6c756973746572726164696f026e6c0000010001 999b80000001000000020000037777770c6c756973746572726164696f026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c036 39454 a8c600000001000000000000036e733109666972737466696e64026e6c0000010001 a8c680000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39455 bede00000001000000000000046e733031066368656c6c6f026e6c0000010001 bede80000001000000030003046e733031066368656c6c6f026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c00c00010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 39456 46be00000001000000000000046e733032066368656c6c6f026e6c0000010001 46be80000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 39457 bcdd00000001000000000000037777770c6465636f6d65647962616e64026e6c0000010001 bcdd84030001000000010000037777770c6465636f6d65647962616e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 39458 a3ab00000001000000000000036e733209666972737466696e64026e6c0000010001 a3ab80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39459 f2030000000100000000000003777777086d74726565787878026e6c0000010001 f2038000000100000002000003777777086d74726565787878026e6c0000010001c01000020001000151800013036e7331097669727475616c787303636f6d00c01000020001000151800006036e7332c031 39460 0ac6000000010000000000000377777706706167696e61026e6c0000010001 0ac6800000010000000300030377777706706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02b000100010001518000043e45a282c03d000100010001518000043e45a283c04f000100010001518000043e45a284 39461 78f3001000010000000000010463756369026e6c0000ff00010000290800000000000000 78f3800000010000000300040463756369026e6c0000ff0001c00c0002000100015180000904686572610178c00cc00c0002000100015180000c066865726d6573026e6cc00cc00c00020001000151800009066865726d6573c02ac02500010001000151800004d47d8001c03a00010001000151800004c143ef02c05200010001000151800004d47d80020000291000000000000000 39462 506c0000000100000000000007706963736572760e6265796f6e642d7265616c697479026e6c0000010001 506c8000000100000002000207706963736572760e6265796f6e642d7265616c697479026e6c0000010001c0140002000100015180000d036e73310674696b74616bc023c01400020001000151800009036e733202696fc023c037000100010001518000045111281dc0500001000100015180000451112202 39463 14ea0000000100000000000003777777086264736d61676963026e6c0000010001 14ea8000000100000002000003777777086264736d61676963026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c019c0100002000100015180000805646e732d32c033 39464 cca80000000100000000000005646e732d31056c61646f74026e6c0000010001 cca88000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39465 191800000001000000000000036e7331056132303030026e6c0000010001 191880000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 39466 008a0000000100000000000009652d6c756e61746963026e6c0000010001 008a8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 39467 d2a8000000010000000000000377777707746f7067616d65026e6c0000010001 d2a8800000010000000200000377777707746f7067616d65026e6c0000010001c0100002000100015180000f02763109706365787472656d65c018c01000020001000151800005027632c02f 39468 c4ee0000000100000000000002763109706365787472656d65026e6c0000010001 c4ee8000000100000002000202763109706365787472656d65026e6c0000010001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 39469 4a6d00000001000000000000036e73330962617365667265616b026e6c0000010001 4a6d80000001000000030003036e73330962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02e00010001000151800004c32fdc83c03f000100010001518000045054f998c00c00010001000151800004c16d7adb 39470 c77f00000001000000000000036e73350962617365667265616b026e6c0000010001 c77f80000001000000030003036e73350962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c03f000100010001518000045054f998c05100010001000151800004c16d7adb 39471 491200000001000000000000036e73320962617365667265616b026e6c0000010001 491280000001000000030003036e73320962617365667265616b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02e00010001000151800004c32fdc83c00c000100010001518000045054f998c04d00010001000151800004c16d7adb 39472 08da00000001000000000000026e730962617365667265616b026e6c0000010001 08da80000001000000030003026e730962617365667265616b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004c32fdc83c03b000100010001518000045054f998c04d00010001000151800004c16d7adb 39473 4c650000000100000000000002763209706365787472656d65026e6c0000010001 4c658000000100000002000202763209706365787472656d65026e6c0000010001c00f0002000100015180000a036e7331036e7873c019c00f00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 39474 e8fa00000001000000000000067769656e656e026e6c00000f0001 e8fa80000001000000020001067769656e656e026e6c00000f0001c00c0002000100015180000a036e733303777873c013c00c00020001000151800006036e7334c02bc03d00010001000151800004d5ef9a65 39475 000d28000001000200000000026e6c0000060001074c4150544f50310c6f62732d636c757374657273026e6c00000500fe000000000000c01400010001000000000004c0a8000b 000da8040000000000000000 39476 ee1300000001000000000000037777770a6b756e737467726f6570026e6c0000010001 ee1380000001000000030003037777770a6b756e737467726f6570026e6c0000010001c0100002000100015180000e076e73617574683103626974c01bc0100002000100015180000a076e736175746832c037c0100002000100015180000a076e736175746833c037c02f00010001000151800004d5880c33c04900010001000151800004d5880c3bc05f00010001000151800004d4ccc00b 39477 98b6000000010000000000000463756369026e6c0000ff0001 98b6800000010000000300030463756369026e6c0000ff0001c00c0002000100015180000904686572610178c00cc00c0002000100015180000c066865726d6573026e6cc00cc00c00020001000151800009066865726d6573c02ac02500010001000151800004d47d8001c03a00010001000151800004c143ef02c05200010001000151800004d47d8002 39478 927d000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 927d800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 39479 9e8800000001000000000000086e796d7068616561026e6c0000010001 9e8880000001000000020000086e796d7068616561026e6c0000010001c00c00020001000151800010036e73310673697465347503636f6d00c00c00020001000151800006036e7332c02d 39480 c49e0010000100000000000106636861726973026e6c00000f00010000290800000080000000 c49e8000000100000002000106636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a0000291000000000000000 39481 1c7d0000000100000000000003777777086b77616c69746578026e6c0000010001 1c7d8000000100000003000203777777086b77616c69746578026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c019c01000020001000151800006036e7332c031c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c02d00010001000151800004cf2cd7adc04e0001000100015180000452c04365 39482 bd570000000100000000000003626f6107686f7374696e67076575726f6e6574026e6c0000010001 bd578000000100000002000103626f6107686f7374696e67076575726f6e6574026e6c0000010001c01800020001000151800005026e73c018c0180002000100015180000d026e73046575726f036e657400c03400010001000151800004c2860043 39483 56f00000000100000000000003626c3102626c06787334616c6c026e6c0000010001 56f08000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39484 c01b00000001000000000000036e733109666972737466696e64026e6c0000010001 c01b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39485 5cff00000001000000000000036e73310b776f726c646f6e6c696e65026e6c0000010001 5cff80000001000000030002036e73310b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 39486 dfa100000001000000000000036e73310470696e65026e6c0000010001 dfa180000001000000020002036e73310470696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d59c0201c03700010001000151800004c3c1a303 39487 4b9400000001000000000000036e73320470696e65026e6c0000010001 4b9480000001000000020002036e73320470696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d59c0201c00c00010001000151800004c3c1a303 39488 d7a9000000010000000000000672756c7366620a6c656964656e756e6976026e6c0000010001 d7a9800000010000000300030672756c7366620a6c656964656e756e6976026e6c0000010001c0130002000100015180000b08736865726c6f636bc013c0130002000100015180000906776174736f6ec013c0130002000100015180000e036e733107737572666e6574c01ec0320001000100015180000484e50806c0490001000100015180000484e51602c05e00010001000151800004c0576a65 39489 94da00000001000000000000046d61696c056b616e6461026e6c0000010001 94da80000001000000020002046d61696c056b616e6461026e6c0000010001c0110002000100015180000d036e7331066d696b616a6fc017c01100020001000151800006036e7332c02fc02b00010001000151800004515b038ac04400010001000151800004515b038b 39490 0000000070024000e2920000020405b401010402 000080010000000000000000 39491 cd3100000001000000000000036e733209666972737466696e64026e6c0000010001 cd3180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39492 9cc700000001000000000000077769636b2d6974026e6c00000f0001 9cc784030001000000010000077769636b2d6974026e6c00000f0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 39493 8b580000000100000000000005646e732d31056c61646f74026e6c0000010001 8b588000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39494 9e270000000100000000000005646e732d32056c61646f74026e6c0000010001 9e278000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39495 e34900000001000000000000046d61696c096e65646572696e756d026e6c0000010001 e34980000001000000020000046d61696c096e65646572696e756d026e6c0000010001c0110002000100015180000d026e730468736367036e657400c01100020001000151800006036e7332c032 39496 b7d4ac7950104470a6880000000000000000 39497 b7d4ac79501844709f9c0000008a49f8000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afac0403c4c4000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004c4150544f50315a50444550330000 39498 74be00000001000000000000046d61696c0d64722d76616e646572686f6f67026e6c0000010001 74be80000001000000020002046d61696c0d64722d76616e646572686f6f67026e6c0000010001c0110002000100015180000c026e7306692d63756265c01fc01100020001000151800006036e7330c036c0330001000100015180000452a10b6ec04b0001000100015180000452a123e2 39499 844a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 844a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39500 d8160000000100000000000008486170707948756706746d66776562026e6c0000ff0001 d8168000000100000002000008486170707948756706746d66776562026e6c0000ff0001c01500020001000151800011056c656d6f6e0571696e6970036e657400c01500020001000151800007046c696d65c036 39501 b7d4ac8750114462a5fb0000000000000000 39502 84cf000000010000000000000377777709736d616c6c7a696e65026e6c0000010001 84cf800000010000000200010377777709736d616c6c7a696e65026e6c0000010001c0100002000100015180000f036e7331087765626672616d65c01ac01000020001000151800006036e7332c032c02e00010001000151800004d4cccfcd 39503 4fe70000000100000000000006636861726973026e6c00000f0001 4fe78000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 39504 5c900000000100000000000003777777116b756e73746765736368696564656e6973026e6c0000010001 5c908000000100000002000003777777116b756e73746765736368696564656e6973026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c039 39505 b7d4ac8850104462a5fa0000000000000000 39506 fd8100000001000000000000086d61696c64726f70036b6c6d026e6c0000010001 fd8180000001000000020001086d61696c64726f70036b6c6d026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000b026e73026e6c036e657400c02d00010001000151800004ab155012 39507 0000000070024000e45c0000020405b401010402 000080010000000000000000 39508 5fbf00000001000000000000037777770a696e746572706c65696e026e6c0000010001 5fbf80000001000000030003037777770a696e746572706c65696e026e6c0000010001c0100002000100015180000c036e7331053266617374c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f0001000100015180000450f7c022c047000100010001518000043e858122c059000100010001518000045117eb22 39509 b7c2000000010000000000000673656375726507656e64656d6f6c026e6c0000010001 b7c2800000010000000200000673656375726507656e64656d6f6c026e6c0000010001c0130002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0130002000100015180000d036e7332036b706e036e657400 39510 c985000000010000000000000377777706656c6f71756f026e6c0000010001 c985800000010000000200020377777706656c6f71756f026e6c0000010001c0100002000100015180001804646e733110776f726c6477696465686f7374696e67c017c0100002000100015180000704646e7332c030c02b0001000100015180000450f7c20dc04f0001000100015180000450f7c217 39511 8d5c000000010000000000000661736f706f73026e6c0000ff0001 8d5c800000010000000200000661736f706f73026e6c0000ff0001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 39512 b7d5987150104470bc590000000000000000 39513 b7d598715018447072e10000008a8e84000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afac0403c4c4000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004c4150544f50315a50444550330000 39514 0b9700000001000000000000037777770a64656c746173706f7274026e6c0000010001 0b9780000001000000020002037777770a64656c746173706f7274026e6c0000010001c0100002000100015180000d036e733106313233776562c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5c9be02c04800010001000151800004d5c9be03 39515 e6310000000100000000000008686f73746e616d650462696e640000100003 e6318000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 39516 a28f00000001000000000000037777771165696e64686f76656e73646167626c6164026e6c0000010001 a28f80000001000000020002037777771165696e64686f76656e73646167626c6164026e6c0000010001c0100002000100015180000e036e7331076e657463617374c022c01000020001000151800006036e7332c03ac03600010001000151800004c2970101c05000010001000151800004c297012d 39517 62220000000100000000000003777777076d61726c6f6573026e6c0000010001 62228000000100000002000203777777076d61726c6f6573026e6c0000010001c0100002000100015180000c036e73310563736e6574c018c01000020001000151800006036e7332c030c02c00010001000151800004c2451012c04400010001000151800004c2451212 39518 b7d5987f50114462bbcc0000000000000000 39519 b39600000001000000000000037777770a6263612d616476696573026e6c0000010001 b39680000001000000020002037777770a6263612d616476696573026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 39520 24f000000001000000000000086c616e67686f7574026e6c00000f0001 24f080000001000000020000086c616e67686f7574026e6c00000f0001c00c00020001000151800013036e733109752d73657276657273036e657400c00c00020001000151800006036e7332c02d 39521 84c300100001000000000001026e7303786f73026e6c00000100010000290800000080000000 84c380000001000000020002026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe20000291000000000000000 39522 d1bc0000000100000000000003777777066f68656c6c6f026e6c0000010001 d1bc8000000100000003000203777777066f68656c6c6f026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 39523 7cfb0000000100000000000002353802393601300231300a626c61636b686f6c657307656173796e6574026e6c0000010001 7cfb8000000100000002000202353802393601300231300a626c61636b686f6c657307656173796e6574026e6c0000010001c02200020001000151800006036e7330c022c02200020001000151800006036e7331c022c03e00010001000151800004c2a55e01c05000010001000151800004c2a55e05 39524 3f4500000001000000000000026e7303786f73026e6c0000010001 3f4580000001000000020001026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe2 39525 b7d5988050104462bbcb0000000000000000 39526 980500000001000000000000037777770774757274656c73026e6c0000010001 980584030001000000010000037777770774757274656c73026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 39527 4f410000000100000000000003626c3102626c06787334616c6c026e6c0000010001 4f418000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39528 de0300000001000000000000086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001 de0380000001000000020002086469616c2d31393208656e657267697331036d6c6404646e6574026e6c0000010001c0220002000100015180000d036e7331066d696e646566c027c02200020001000151800006036e7332c03fc03b00010001000151800004d9a9e7c6c05400010001000151800004d9a9e7c5 39529 0000000070024000630d0000020405b401010402 000080010000000000000000 39530 e4f200100001000000000001036e73310a726564686f7374696e67026e6c00000100010000290800000000000000 e4f280000001000000020003036e73310a726564686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa4050000291000000000000000 39531 8bda0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 8bda8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39532 f93200100001000000000001036e73320a726564686f7374696e67026e6c00000100010000290800000000000000 f93280000001000000020003036e73320a726564686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa4050000291000000000000000 39533 62d90000000100000000000003626c3402626c06787334616c6c026e6c0000260001 62d98000000100000003000203626c3402626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39534 22d30000000100000000000008686f73746e616d650462696e640000100003 22d38000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 39535 e1080000000100000000000003777777076e65746b6f6f70026e6c0000010001 e1088000000100000003000203777777076e65746b6f6f70026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 39536 a17d0000000100000000000003777777076e65746b6f6f70026e6c0000010001 a17d8000000100000003000203777777076e65746b6f6f70026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 39537 b7d7d13f50104470023a0000000000000000 39538 bab400000001000000000000037777770972696e67746f6e696f026e6c0000010001 bab480000001000000020002037777770972696e67746f6e696f026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5efa404c04b00010001000151800004d5efa405 39539 b2d9000000010000000000000477697368026e6c0000010001 b2d9800000010000000300020477697368026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c011c00c0002000100015180000704616e7332c02ac00c0002000100015180001404616e73330a74697363616c696e657402626500c02500010001000151800004c3f14d38c04000010001000151800004c3f13325 39540 b7d7d13f50184470f3c90000008a537c000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afac0403c4c4000030000002d4e544c4d535350000100000097b200e0060006002700000007000700200000004c4150544f50315a50444550330000 39541 c4f00000000100000000000009746f706d6f76657273026e6c0000010001 c4f08000000100000002000209746f706d6f76657273026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 39542 4fa60000000100000000000008646967692d636f6d026e6c00000f0001 4fa68000000100000002000208646967692d636f6d026e6c00000f0001c00c0002000100015180000c036e7331057069637573c015c00c00020001000151800006036e7332c02dc02900010001000151800004d5a0d97dc04100010001000151800004d5a0d97c 39543 819a0000000100000000000009676c69646570617468026e6c0000010001 819a8000000100000002000209676c69646570617468026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 39544 abc2000000010000000000000377777706666973746d65026e6c0000010001 abc2800000010000000200020377777706666973746d65026e6c0000010001c0100002000100015180000e026e7308696e7465722d6974c017c01000020001000151800006036e7332c02ec02b00010001000151800004d5c4385ac04500010001000151800004d5c4385b 39545 a4a300000001000000000000037777770876656c6f72616d61026e6c0000010001 a4a380000001000000020002037777770876656c6f72616d61026e6c0000010001c01000020001000151800015036e73310e726567696f70726f766964657273c019c01000020001000151800006036e7332c031c02d00010001000151800004d41da001c04e00010001000151800004d41da1fe 39546 0390000000010000000000000b4b494d48454e4452494b58024e4c00000f0001 0390800000010000000200020b4b494d48454e4452494b58024e4c00000f0001c00c00020001000151800011036e73310a646e7373657276657273c018c00c00020001000151800006036e7332c030c02c000100010001518000045054ed14c04900010001000151800004d5f72f14 39547 b7d7d14d5011446201ad0000000000000000 39548 fc090000000100000000000006636861726973026e6c00000f0001 fc098000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 39549 285800000001000000000000036e73320b6973642d686f6c6c616e64026e6c0000010001 285880000001000000020002036e73320b6973642d686f6c6c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 39550 26e600000001000000000000026e730b6973642d686f6c6c616e64026e6c0000010001 26e680000001000000020002026e730b6973642d686f6c6c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 39551 8fbc00000001000000000000036e733109666972737466696e64026e6c0000010001 8fbc80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39552 87e30010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 87e38000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 39553 235c00000001000000000000036e733103757063026e6c0000010001 235c80000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 39554 72ac00000001000000000000046162656c0564656d6f6e026e6c0000010001 72ac80000001000000030002046162656c0564656d6f6e026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 39555 0a32000000010000000000000a6970353033636230393105737065656406706c616e6574026e6c0000010001 0a32800000010000000300030a6970353033636230393105737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 39556 122c0000000100000000000003667331056c76706161026e6c0000060001 122c8000000100000002000203667331056c76706161026e6c0000060001c0100002000100015180000c036e73310573796e7267c016c01000020001000151800006036e7332c02ec02a0001000100015180000452c04b0bc0420001000100015180000452c04b0c 39557 2e64000000010000000000000575726975730473656d61026e6c0000010001 2e64800000010000000300030575726975730473656d61026e6c0000010001c01200020001000151800012047072693103646e73067073696e6574c017c012000200010001518000070470726932c030c012000200010001518000070470726933c030c02b000100010001518000049a0ff9a6c049000100010001518000049a0ff9aac05c000100010001518000049a0ff9ae 39558 e5e700000001000000000000036e733205636176656f026e6c00001c0001 e5e780000001000000020002036e733205636176656f026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000045112a002c00c000100010001518000045112a102 39559 cb7200000001000000000000036e733205636176656f026e6c0000260001 cb7280000001000000020002036e733205636176656f026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000045112a002c00c000100010001518000045112a102 39560 7def00000001000000000000036e733105636176656f026e6c00001c0001 7def80000001000000020002036e733105636176656f026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045112a002c038000100010001518000045112a102 39561 6f9900000001000000000000036e733105636176656f026e6c0000260001 6f9980000001000000020002036e733105636176656f026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045112a002c038000100010001518000045112a102 39562 8f9900000001000000000000036e733209666972737466696e64026e6c0000010001 8f9980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39563 80cc000000010000000000000a62656f6e616476696573026e6c00000f0001 80cc800000010000000200020a62656f6e616476696573026e6c00000f0001c00c0002000100015180000a036e733103696166c017c00c00020001000151800006036e7332c02fc02b000100010001518000045059e040c041000100010001518000045059ee03 39564 c54f00000001000000000000086874726d65646961026e6c00000f0001 c54f80000001000000020002086874726d65646961026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 39565 ed7b00000001000000000000026e730b666163696e676661637473026e6c00001c0001 ed7b80000001000000020002026e730b666163696e676661637473026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d513b013c03d00010001000151800004d513b012 39566 210700000001000000000000036e73320b666163696e676661637473026e6c00001c0001 210780000001000000020002036e73320b666163696e676661637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d513b013c00c00010001000151800004d513b012 39567 c96100000001000000000000036e73320b666163696e676661637473026e6c0000260001 c96180000001000000020002036e73320b666163696e676661637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d513b013c00c00010001000151800004d513b012 39568 7d5600000001000000000000026e730b666163696e676661637473026e6c0000260001 7d5680000001000000020002026e730b666163696e676661637473026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d513b013c03d00010001000151800004d513b012 39569 c57e00000001000000000000036e73320b666163696e676661637473026e6c00001c0001 c57e80000001000000020002036e73320b666163696e676661637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d513b013c00c00010001000151800004d513b012 39570 23f600000001000000000000036e73320b666163696e676661637473026e6c0000260001 23f680000001000000020002036e73320b666163696e676661637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d513b013c00c00010001000151800004d513b012 39571 5f0800000001000000000000026e730b666163696e676661637473026e6c00001c0001 5f0880000001000000020002026e730b666163696e676661637473026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d513b013c03d00010001000151800004d513b012 39572 eaaa00000001000000000000026e730b666163696e676661637473026e6c0000260001 eaaa80000001000000020002026e730b666163696e676661637473026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d513b013c03d00010001000151800004d513b012 39573 bf1500000001000000000000026e73057768657070026e6c0000010001 bf1580000001000000030001026e73057768657070026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c00f00020001000151800007046e733038c03cc00c000100010001518000043e48df58 39574 ac5e000000010000000000000273330e73696d70656c696e7465726e6574026e6c0000010001 ac5e800000010000000200020273330e73696d70656c696e7465726e6574026e6c0000010001c00f00020001000151800011026e730b6973642d686f6c6c616e64c01ec00f00020001000151800006036e7332c035c03200010001000151800004d5e38d0ac04f00010001000151800004d5e38205 39575 1f3500000001000000000000037777770c6e65756b706c6161746a6573026e6c0000010001 1f3580000001000000020000037777770c6e65756b706c6161746a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c034 39576 aa17000000010000000000000377777706787334616c6c026e6c0000010001 aa17800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 39577 256b000000010000000000000b696e7465726368616e6765026e6c00000f0001 256b800000010000000200000b696e7465726368616e6765026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 39578 a779000000010000000000000976616e2d6c69657265026e6c0000010001 a779800000010000000200020976616e2d6c69657265026e6c0000010001c00c0002000100015180000a036e733103696166c016c00c00020001000151800006036e7332c02ec02a000100010001518000045059e040c040000100010001518000045059ee03 39579 44df0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 44df8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39580 a70000000001000000000000046d61696c0b6d61726b74706c61617473026e6c0000010001 a70080000001000000020000046d61696c0b6d61726b74706c61617473026e6c0000010001c0110002000100015180000f036e733105796b6f6f6e036e657400c01100020001000151800006036e7332c035 39581 e74600000001000000000000046d61696c0b6d61726b74706c61617473026e6c00001c0001 e74680000001000000020000046d61696c0b6d61726b74706c61617473026e6c00001c0001c0110002000100015180000f036e733105796b6f6f6e036e657400c01100020001000151800006036e7332c035 39582 0e4c00000001000000000000037777770a656d6973736172696573026e6c0000010001 0e4c80000001000000020002037777770a656d6973736172696573026e6c0000010001c0100002000100015180001204646e73310a6e65746d617374657273c01bc0100002000100015180000704646e7332c034c02f0001000100015180000451044203c04d00010001000151800004510442c9 39583 6363000000010000000000000b6e732d767575727765726b07646f6f66706f74026e6c0000010001 6363800000010000000200020b6e732d767575727765726b07646f6f66706f74026e6c0000010001c0180002000100015180000f036e73310863616d627269756dc020c01800020001000151800006036e7332c038c03400010001000151800004d9131082c04f00010001000151800004d5efb202 39584 c7aa0000000100000000000007616e74656e6e61026e6c0000010001 c7aa8000000100000002000107616e74656e6e61026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 39585 8ddc0000000100000000000007616e74656e6e61026e6c00001c0001 8ddc8000000100000002000107616e74656e6e61026e6c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 39586 332f000000010000000000000b6e732d767575727765726b07646f6f66706f74026e6c0000260001 332f800000010000000200020b6e732d767575727765726b07646f6f66706f74026e6c0000260001c0180002000100015180000f036e73310863616d627269756dc020c01800020001000151800006036e7332c038c03400010001000151800004d9131082c04f00010001000151800004d5efb202 39587 1a000000000100000000000007414e54454e4e41024e4c0000010001 1a008000000100000002000107414e54454e4e41024e4c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 39588 81760000000100000000000007414e54454e4e41024e4c00001c0001 81768000000100000002000107414e54454e4e41024e4c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 39589 e1ea00000001000000000000037777770a6c6170746f70706c7573026e6c0000010001 e1ea80000001000000020002037777770a6c6170746f70706c7573026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01bc01000020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 39590 f47e0000000100000000000003777777096c696e6b7370616765026e6c0000010001 f47e8000000100000003000203777777096c696e6b7370616765026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 39591 a5e500000001000000000000076b75707769656c026e6c00000f0001 a5e580000001000000020000076b75707769656c026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02c 39592 0cbf00000001000000000000037777770c67616d6d6172656163746f72026e6c0000010001 0cbf80000001000000020000037777770c67616d6d6172656163746f72026e6c0000010001c0100002000100015180001704646e73310c676c6f62656e65747765726b03636f6d00c0100002000100015180000704646e7332c036 39593 96b2000000010000000000000774686570616765026e6c00000f0001 96b2800000010000000200000774686570616765026e6c00000f0001c00c0002000100015180001504646e73310a65617379736572766572036e657400c00c0002000100015180000704646e7332c02d 39594 d36a000000010000000000000d5352524443303132444d5a303303726463026e6c00001c0001 d36a800000010000000200020d5352524443303132444d5a303303726463026e6c00001c0001c01a000200010001518000100d7372726463303134646d7a3034c01ac01a00020001000151800002c00cc03200010001000151800004d973e064c00c00010001000151800004d973e054 39595 b10b000000010000000000000d5352524443303134444d5a303403726463026e6c00001c0001 b10b800000010000000200020d5352524443303134444d5a303403726463026e6c00001c0001c01a00020001000151800002c00cc01a000200010001518000100d7372726463303132646d7a3033c01ac00c00010001000151800004d973e064c04000010001000151800004d973e054 39596 02d40010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000000000000 02d48000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 39597 40b50000000100000000000003626c3102626c06787334616c6c026e6c0000010001 40b58000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39598 e313000000010000000000000a6c756e6164657369676e026e6c0000010001 e313800000010000000200000a6c756e6164657369676e026e6c0000010001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02e 39599 3e9d0000000100000000000004686f6d6508692d6c7573696f6e026e6c0000010001 3e9d8000000100000002000204686f6d6508692d6c7573696f6e026e6c0000010001c0110002000100015180000f026e7309656174736572766572c01ac01100020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 39600 549a00000001000000000000097468657769636b6564026e6c00000f0001 549a80000001000000020002097468657769636b6564026e6c00000f0001c00c0002000100015180000b036e73610462797465c016c00c00020001000151800006036e7362c02ec02a00010001000151800004d977e520c04100010001000151800004d977e521 39601 d3df00000001000000000000047072693103646e73067073696e6574026e6c0000010001 d3df80000001000000030003047072693103646e73067073696e6574026e6c0000010001c01500020001000151800002c00cc015000200010001518000070470726932c011c015000200010001518000070470726933c011c00c000100010001518000049a0ff9a6c03e000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 39602 ec1700000001000000000000047072693203646e73067073696e6574026e6c0000010001 ec1780000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 39603 976400000001000000000000047072693303646e73067073696e6574026e6c0000010001 976480000001000000030003047072693303646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c01500020001000151800002c00cc030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac00c000100010001518000049a0ff9ae 39604 66f100000001000000000000036e733109666972737466696e64026e6c0000010001 66f180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39605 2d7300000001000000000000036e733209666972737466696e64026e6c0000010001 2d7380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39606 253c00000001000000000000037777770d6b696e646a656f706b6f6d7374026e6c0000010001 253c80000001000000030003037777770d6b696e646a656f706b6f6d7374026e6c0000010001c0100002000100015180000a036e733103797873c01ec01000020001000151800006036e7332c036c01000020001000151800006036e7333c036c03200010001000151800004d5efb6dec04800010001000151800004d5efb52fc05a00010001000151800004503de97c 39607 edf0001000010000000000010770686964696173026e6c00000100010000290800000080000000 edf0800000010000000200010770686964696173026e6c0000010001c00c0002000100015180000f026e730678706972697403636f6d00c00c00020001000151800006036e7332c02b0000291000000000000000 39608 3d18000000010000000000000b6d6f6a6f74686561746572026e6c00000f0001 3d18800000010000000200020b6d6f6a6f74686561746572026e6c00000f0001c00c0002000100015180000f026e73096e65746c6f67696373c018c00c00020001000151800006036e7332c02fc02c00010001000151800004c3c16402c04700010001000151800004c2b2850a 39609 63f000000001000000000000036e733109666972737466696e64026e6c0000010001 63f080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39610 3e9600000001000000000000036e733209666972737466696e64026e6c0000010001 3e9680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39611 ca1600000001000000000000037777770470636d70026e6c0000010001 ca1684030001000000010000037777770470636d70026e6c0000010001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 39612 be4200000001000000000000036e73310a726564686f7374696e67026e6c0000010001 be4280000001000000020002036e73310a726564686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 39613 af9e00000001000000000000036e73320a726564686f7374696e67026e6c0000010001 af9e80000001000000020002036e73320a726564686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa405 39614 4f6a0000000100000000000003657a68026e6c00001c0001 4f6a8000000100000002000103657a68026e6c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c0240001000100015180000489ae8f03 39615 805200000001000000000000076a6e6c666b646e026e6c00000f0001 805284030001000000010000076a6e6c666b646e026e6c00000f0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 39616 233f00000001000000000000037777770d7665696c696e676b696a6b6572026e6c0000010001 233f80000001000000020002037777770d7665696c696e676b696a6b6572026e6c0000010001c0100002000100015180000c04646e73310471776562c01ec0100002000100015180000704646e7332c037c03200010001000151800004d994ac0cc04a00010001000151800004d5c42f6c 39617 1d1c00000001000000000000037777770871756f74656e6574026e6c0000010001 1d1c80000001000000020002037777770871756f74656e6574026e6c0000010001c0100002000100015180000c036e73310575706e6574c019c01000020001000151800006036e7332c031c02d00010001000151800004d5c428dfc0450001000100015180000451113206 39618 bd9b000000010000000000000770686964696173026e6c0000010001 bd9b800000010000000200000770686964696173026e6c0000010001c00c0002000100015180000f026e730678706972697403636f6d00c00c00020001000151800006036e7332c02b 39619 c4060000000100000000000006626579636f6d026e6c00000f0001 c4068000000100000002000006626579636f6d026e6c00000f0001c00c00020001000151800010036e733109666972737466696e64c013c00c00020001000151800006036e7332c02b 39620 53c70000000100000000000003626c3102626c06787334616c6c026e6c0000010001 53c78000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39621 21a300000001000000000000066d6f76696174026e6c00000f0001 21a380000001000000020000066d6f76696174026e6c00000f0001c00c00020001000151800010036e7331066d6f76696174036e657400c00c00020001000151800006036e7332c02b 39622 9b90000000010000000000000d646f6d696e6f68617373656c740a6f7264696e612d747469026e6c0000010001 9b90800000010000000200010d646f6d696e6f68617373656c740a6f7264696e612d747469026e6c0000010001c01a0002000100015180000d036e7332066f7264696e61c025c01a00020001000151800011036e73320777697265687562036e657400c03900010001000151800004c297c1e9 39623 2b4b000000010000000000000d72656c61746965706c616e6574026e6c0000010001 2b4b800000010000000200020d72656c61746965706c616e6574026e6c0000010001c00c0002000100015180000c04646e73310470696e73c01ac00c0002000100015180000704646e7332c033c02e00010001000151800004d9c26101c04600010001000151800004d9c26002 39624 86700000000100000000000008696e746572776562026e6c0000010001 86708000000100000002000208696e746572776562026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 39625 7afb000000010000000000000967616c6c65726965730d706172746e6572636c69636b73026e6c0000010001 7afb800000010000000200020967616c6c65726965730d706172746e6572636c69636b73026e6c0000010001c0160002000100015180000f036e73310861746c616e74697ac024c01600020001000151800006036e7332c03cc03800010001000151800004d5efa011c05300010001000151800004d5efa075 39626 b2590000000100000000000004706f7033067a6f6e6e6574026e6c0000010001 b2598000000100000002000204706f7033067a6f6e6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000e026e7308767575727765726bc018c02c000100010001518000043e3a3204c03d000100010001518000043efa0202 39627 f15a0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f15a8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39628 b0060000000100000000000003626c3102626c06787334616c6c026e6c0000010001 b0068000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39629 fcaf0000000100000000000003777777046b6e6b76026e6c0000010001 fcaf8000000100000002000203777777046b6e6b76026e6c0000010001c01000020001000151800009036e7331026973c015c01000020001000151800006036e7332c02dc02900010001000151800004d5852102c03e00010001000151800004d5c41503 39630 24c0000000010000000000000377777707746170746f6573026e6c0000010001 24c0800000010000000200020377777707746170746f6573026e6c0000010001c0100002000100015180000a036e733103686978c018c01000020001000151800006036e7332c030c02c00010001000151800004d5a0da0ac0420001000100015180000451112ec3 39631 4ca900000001000000000000037777770a7672696a6b6f6e696a6e026e6c0000050001 4ca980000001000000020002037777770a7672696a6b6f6e696a6e026e6c0000050001c01000020001000151800010036e7331096176616e742d696e74c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5de1d07c04b00010001000151800004d5de1807 39632 b7a7000000010000000000000d646f6d696e6f68617373656c740a6f7264696e612d747469026e6c0000010001 b7a7800000010000000200010d646f6d696e6f68617373656c740a6f7264696e612d747469026e6c0000010001c01a0002000100015180000d036e7332066f7264696e61c025c01a00020001000151800011036e73320777697265687562036e657400c03900010001000151800004c297c1e9 39633 4cde00000001000000000000036e7333026e75026e6c0000010001 4cde80000001000000030003036e7333026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc027000100010001518000043e45a282c039000100010001518000043e45a283c00c000100010001518000043e45a284 39634 691e00000001000000000000036e7332026e75026e6c0000010001 691e80000001000000030003036e7332026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c027000100010001518000043e45a282c00c000100010001518000043e45a283c047000100010001518000043e45a284 39635 1a0400000001000000000000036e7331026e75026e6c0000010001 1a0480000001000000030003036e7331026e75026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c035000100010001518000043e45a283c047000100010001518000043e45a284 39636 52a400000001000000000000037777771070616c6569736865746f7564656c6f6f026e6c0000010001 52a484030001000000010000037777771070616c6569736865746f7564656c6f6f026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 39637 f04000000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 f04080000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 39638 bc5d00000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 bc5d80000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 39639 ce0300000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 ce0380000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 39640 104900000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 104980000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 39641 4e7400000001000000000000036e733108696e74726f776562026e6c0000010001 4e7480000001000000020002036e733108696e74726f776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450416028c03b00010001000151800004c356780c 39642 273a00000001000000000000036e733208696e74726f776562026e6c0000010001 273a80000001000000020002036e733208696e74726f776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 39643 14f4000000010000000000000761616c64657273026e6c00000f0001 14f4800000010000000200020761616c64657273026e6c00000f0001c00c00020001000151800014036e73310d6d6576657273686f7374696e67c014c00c00020001000151800006036e7332c02cc02800010001000151800004d5c9e8c8c04800010001000151800004d5c9e8c9 39644 2bc928000001000000010000026e6c0000060001085f6b706173737764045f7564700767696f70646f6d026e6c000021000100000258001a0000006401d00777696e323030300767696f70646f6d026e6c00 2bc9a8040000000000000000 39645 0eb100000001000000000000037777770972616d737465696a6e026e6c0000010001 0eb180000001000000020002037777770972616d737465696a6e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 39646 943e0000000100000000000008504f55575f4244430e6c65617365756e6c696d69746564026e6c0000010001 943e8000000100000002000008504f55575f4244430e6c65617365756e6c696d69746564026e6c0000010001c0150002000100015180000b026e73026e6c036e657400c0150002000100015180001206617574683630026e73026e6c027575c03e 39647 d07600000001000000000000057374696374026e6c00000f0001 d07680000001000000020002057374696374026e6c00000f0001c00c0002000100015180000b04646e733103723269c012c00c0002000100015180000704646e7332c02bc0260001000100015180000491050e02c03d0001000100015180000491050e22 39648 3d820000000100000000000002353802393601300231300a626c61636b686f6c657307656173796e6574026e6c0000050001 3d828000000100000002000202353802393601300231300a626c61636b686f6c657307656173796e6574026e6c0000050001c02200020001000151800006036e7330c022c02200020001000151800006036e7331c022c03e00010001000151800004c2a55e01c05000010001000151800004c2a55e05 39649 000000007002400068980000020405b401010402 000080010000000000000000 39650 91de0010000100000000000106636861726973026e6c0000ff00010000290800000080000000 91de8000000100000002000106636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a0000291000000000000000 39651 174f0000000100000000000003697263096e696a656e726f6465026e6c0000010001 174f8000000100000003000303697263096e696a656e726f6465026e6c0000010001c010000200010001518000070161026e73c010c010000200010001518000040163c030c010000200010001518000040164c030c02e000100010001518000043e3a04a3c04100010001000151800004c26dc2aec05100010001000151800004c0577106 39652 c05e0000000100000000000003777777087468652d6f6d656e026e6c0000010001 c05e8000000100000003000303777777087468652d6f6d656e026e6c0000010001c0100002000100015180000b04646e733103766970c019c0100002000100015180000704646e7332c032c0100002000100015180000704646e7333c032c02d00010001000151800004d44fe803c04400010001000151800004c3f5c782c05700010001000151800004d44ff303 39653 65c2000000010000000000000469632d73026e6c00000f0001 65c2800000010000000200000469632d73026e6c00000f0001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029 39654 339100000001000000000000036e7331076d696e76656e77026e6c0000010001 339180000001000000030002036e7331076d696e76656e77026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c02c00010001000151800004c297be47c00c00010001000151800004c297be48 39655 b7d9fb5b50104470dda60000000000000000 39656 000000007002faf005e600000204057a01010402 000080010000000000000000 39657 37b50000000100000000000009717561647275676279026e6c00000f0001 37b58000000100000002000109717561647275676279026e6c00000f0001c00c0002000100015180000e036e733107626c7565646e73c016c00c00020001000151800006036e7334c02ec02a00010001000151800004d5c401c0 39658 f9b500000001000000000000026e73076575726f6e6574026e6c0000010001 f9b580000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 39659 b7d9fb5b501844704b8a0000008f928b000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afead403c502d0003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000 39660 8bf30000000100000000000003777777086c6f76656769726c026e6c0000010001 8bf38000000100000002000003777777086c6f76656769726c026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 39661 b7dae9b25010fbec8fd60000000000000000 39662 39fc00000001000000000000036e7332076e656473746174026e6c0000010001 39fc80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39663 9cfe00000001000000000000036e7334076e656473746174026e6c0000010001 9cfe80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39664 5bbc00000001000000000000036e7332076e656473746174026e6c0000010001 5bbc80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39665 3b2100000001000000000000036e7334076e656473746174026e6c0000010001 3b2180000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 39666 064400000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000010001 064480000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 39667 a37500000001000000000000036e73320d63656e747269636f6e6c696e65026e6c0000010001 a37580000001000000020002036e73320d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d481ec0cc00c00010001000151800004d590e63a 39668 b7d9fb6950114462dd140000000000000000 39669 b7dae9b25018fbec4c120000008f6809000000010001000000000f313033303739323135313035382d330000f900010f313033303739323135313035382d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403b072a403c58aa0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000 39670 00000000700240006cef0000020405b401010402 000080010000000000000000 39671 b7d9fb6a50104462dd130000000000000000 39672 b7dae9c05011fbde8f440000000000000000 39673 b7db85ea50104470576d0000000000000000 39674 7a350000000100000000000003656269026e6c00000f0001 7a358000000100000002000103656269026e6c00000f0001c00c0002000100015180000e036e733107686f7374696e67c00cc00c0002000100015180000d03646e73036b706e03636f6d00c02400010001000151800004c1ad9c46 39675 59860000000100000000000005646e732d31056c61646f74026e6c0000010001 59868000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39676 5aee0000000100000000000005646e732d32056c61646f74026e6c0000010001 5aee8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 39677 b7db85ea501844707ce10000008fd3fb000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000 39678 a60b00000001000000000000037777770a6661637475726572656e08736f66747761726512736e656c73746172742d736f667477617265026e6c0000010001 a60b80000001000000020000037777770a6661637475726572656e08736f66747761726512736e656c73746172742d736f667477617265026e6c0000010001c02400020001000151800011036e733005736572766502636f02756b00c02400020001000151800010036e7330057365727665036e6574c058 39679 000000007002faf0b33800000204057a01010402 000080010000000000000000 39680 24790000000100000000000006636861726973026e6c0000ff0001 24798000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 39681 b7dae9c15010fbde8f430000000000000000 39682 575300000001000000000000036d78320a6d756c74696b6162656c026e6c0000010001 575380000001000000030002036d78320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c0410001000100015180000450f2e006 39683 91ba00000001000000000000036e733109666972737466696e64026e6c0000010001 91ba80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39684 f00300000001000000000000036e733209666972737466696e64026e6c0000010001 f00380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39685 b7dc2ffb5010fbecf6de0000000000000000 b7dcaff40000000000000000 39686 696900000001000000000000036e733305706c616e74026e6c0000010001 696980000001000000020002036e733305706c616e74026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02a00010001000151800004d59f0037c03b00010001000151800004d59f0046 39687 b7db85f85011446256db0000000000000000 39688 0570000000010000000000000670726f646973056e76776d6e026e6c0000010001 0570800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 39689 b7dc2ffb5018fbeccd910000008f4e93000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b072a403c58aa0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000 b7dcaff40000000000000000 39690 000000007002400060bf0000020405b401010402 000080010000000000000000 39691 6b760000000100000000000004656b6f6e026e6c00000f0001 6b768000000100000002000204656b6f6e026e6c00000f0001c00c0002000100015180000e036e73310768656262697a7ac011c00c00020001000151800006036e7332c029c02500010001000151800004c372eb42c03f000100010001518000043e320e91 39692 819200000001000000000000046175746f096f7665727a69636874026e6c0000010001 819280000001000000030003046175746f096f7665727a69636874026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02f000100010001518000043e45a282c041000100010001518000043e45a283c053000100010001518000043e45a284 39693 b7dc30095011fbdef64c0000000000000000 b7dcb0040000000000000000 39694 b7db85f95010446256da0000000000000000 39695 b7dcf17a50104470dfab0000000000000000 39696 b7dcf17a501844707aa10000008f5e7a000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000 39697 28f400000001000000000000034e53310a524544484f5354494e47024e4c0000010001 28f480000001000000020002034e53310a524544484f5354494e47024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 39698 3ae900000001000000000000034e53320a524544484f5354494e47024e4c0000010001 3ae980000001000000020002034e53320a524544484f5354494e47024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa405 39699 f8c100000001000000000000047072693103646e73067073696e6574026e6c0000010001 f8c180000001000000030003047072693103646e73067073696e6574026e6c0000010001c01500020001000151800002c00cc015000200010001518000070470726932c011c015000200010001518000070470726933c011c00c000100010001518000049a0ff9a6c03e000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 39700 bd5800000001000000000000047072693203646e73067073696e6574026e6c0000010001 bd5880000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 39701 f8c300000001000000000000047072693303646e73067073696e6574026e6c0000010001 f8c380000001000000030003047072693303646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c01500020001000151800002c00cc030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac00c000100010001518000049a0ff9ae 39702 b7dcf18850114462df190000000000000000 39703 943300000001000000000000086f72616674657374076c616e616e7762026e6c0000010001 943384030001000000010000086f72616674657374076c616e616e7762026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 39704 485200000001000000000000037777770d68756973686f75646265757273026e6c0000010001 485280000001000000020002037777770d68756973686f75646265757273026e6c0000010001c01000020001000151800009036e7331026973c01ec01000020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 39705 a54a000000010000000000000a636172732d7061727473026e6c0000010001 a54a800000010000000200020a636172732d7061727473026e6c0000010001c00c00020001000151800014036e73310d78786c776562686f7374696e67c017c00c00020001000151800006036e7332c02fc02b000100010001518000045104580ac04b000100010001518000045104601e 39706 b7dcf18950104462df180000000000000000 39707 a14e00000001000000000000037777770a6765696c6566696c6d73026e6c0000010001 a14e80000001000000020000037777770a6765696c6566696c6d73026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c033 39708 05ea00000001000000000000026e73076e656473746174026e6c0000010001 05ea80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39709 bbd50000000100000000000004646e7331057368656c6c026e6c0000010001 bbd58000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 39710 13fb00000001000000000000037777770b726563687473707261616b026e6c0000010001 13fb80000001000000030000037777770b726563687473707261616b026e6c0000010001c01000020001000151800019036e73310f6f726967696e2d736572766963657303636f6d00c01000020001000151800006036e7332c034c01000020001000151800006036e7333c034 39711 35f000000001000000000000026e73076e656473746174026e6c0000010001 35f080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39712 03800000000100000000000003313639033134360233330236310770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 03808000000100000002000203313639033134360233330236310770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 39713 46ac000000010000000000000666697374697806585334414c4c024e4c0000010001 46ac800000010000000300020666697374697806585334414c4c024e4c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 39714 dee60010000100000000000005736a676e68026e6c00000f0001 dee68000000100000002000205736a676e68026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c012c00c00020001000151800006036e7332c029c02600010001000151800004d4cb0e42c04100010001000151800004d4cb1221 39715 5d0a00000001000000000000037777770a766f6963656e6f697365026e6c0000010001 5d0a80000001000000020002037777770a766f6963656e6f697365026e6c0000010001c0100002000100015180000e026e7308696e7465726c6162c01bc01000020001000151800006036e7332c032c02f00010001000151800004d4cb0902c04900010001000151800004d4cb0903 39716 029d28000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373037777770b726f62696e726f6d6d656c026e6c000021000100000258002100000064005806736572766572037777770b726f62696e726f6d6d656c026e6c00 029da8040000000000000000 39717 b7dc300a5010fbdef64b0000000000000000 b7dcb0040000000000000000 39718 190d0000000100000000000009652d6c756e61746963026e6c0000010001 190d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 39719 000000007002faf0f7bc00000204057a01010402 000080010000000000000000 39720 fbb628000001000000010000026e6c0000060001085f6b706173737764045f746370096a6a632d627261766f026e6c000021000100000258001c0000006401d007425241564f3131096a6a632d627261766f026e6c00 fbb6a8040000000000000000 39721 3feb00000001000000000000037777770870632d616b746976026e6c0000010001 3feb84030001000000010000037777770870632d616b746976026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 39722 05c400000001000000000000026e73076e65746c616e64026e6c0000010001 05c480000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 39723 c15400000001000000000000036e7332076e65746c616e64026e6c0000010001 c15480000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 39724 0000000070024000d1bd00000204058201010402 000080010000000000000000 39725 ab8b000000010000000000000467747463026e6c00000f0001 ab8b800000010000000200000467747463026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02b 39726 b7ddead25010fbec808a0000000000000000 39727 eb030000000100000000000008646e73617574683009776973652d67757973026e6c0000010001 eb038000000100000003000308646e73617574683009776973652d67757973026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7330c015c01500020001000151800006036e7332c015c03300010001000151800004d413cd91c04500010001000151800004d413cd8fc05700010001000151800004c16d7a3e 39728 5e790000000100000000000008646e73617574683109776973652d67757973026e6c0000010001 5e798000000100000003000308646e73617574683109776973652d67757973026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7330c015c01500020001000151800006036e7332c015c03300010001000151800004d413cd91c04500010001000151800004d413cd8fc05700010001000151800004c16d7a3e 39729 5d0b0000000100000000000008646e73617574683209776973652d67757973026e6c0000010001 5d0b8000000100000003000308646e73617574683209776973652d67757973026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7330c015c01500020001000151800006036e7332c015c03300010001000151800004d413cd91c04500010001000151800004d413cd8fc05700010001000151800004c16d7a3e 39730 b7ddead25018fbec70b30000008f351d000000010001000000000f313033303739323135313035382d320000f900010f313033303739323135313035382d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403b072a403c58aa0003000000304e544c4d535350000100000097b208e00900090027000000070007002000000057494e3230303047494f504e54444f4d0000 39731 000000007002400063600000020405b401010402 000080010000000000000000 39732 d2eb00000001000000000000037777770a646f7577657364756d70026e6c0000010001 d2eb80000001000000020000037777770a646f7577657364756d70026e6c0000010001c0100002000100015180000c026e7306766576696461c01bc01000020001000151800006036e7332c032 39733 7afe00000001000000000000096863632d67726f6570026e6c0000010001 7afe80000001000000020002096863632d67726f6570026e6c0000010001c00c0002000100015180000e036e7331077175616e746973c016c00c00020001000151800006036e7332c02ec02a000100010001518000043ed44440c04400010001000151800004d4ccca83 39734 b7de811e50104218c32a0000000000000000 39735 4710000000010000000000000472656772026e6c00000f0001 4710800000010000000300010472656772026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc011c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c043c025000100010001518000043efa0202 39736 057000000001000000000000033130340331363803323334033231370770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 057080000001000000020002033130340331363803323334033231370770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02f00020001000151800006036e7330c02fc02f00020001000151800006036e7331c02fc04b00010001000151800004c2a55e01c05d00010001000151800004c2a55e05 39737 b7de811e50184218042a0000008bafdf000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 39738 e7c400000001000000000000036e733109666972737466696e64026e6c0000010001 e7c480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39739 b7ddeae05011fbde7ff80000000000000000 39740 ac4d00000001000000000000156b6c6175636b65747765657769656c657268756973026e6c0000010001 ac4d80000001000000020002156b6c6175636b65747765657769656c657268756973026e6c0000010001c00c0002000100015180000f036e733108696e74726f776562c022c00c00020001000151800006036e7332c03ac0360001000100015180000450416028c05100010001000151800004c356780c 39741 b7b7000000010000000000000d76616e676f67686d757365756d026e6c0000010001 b7b7800000010000000200020d76616e676f67686d757365756d026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 39742 b7de812c5011420ac29c0000000000000000 39743 00000000700240001a6800000204058201010402 000080010000000000000000 39744 b7df5ab25010447079120000000000000000 b7dfdab40000000000000000 39745 88be00000001000000000000036d7365026e6c0000010001 88be80000001000000020002036d7365026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c010c00c00020001000151800006036e7332c027c02400010001000151800004d9aa2042c03d00010001000151800004d9aa2c06 39746 b7df5ab2501844709b1b0000008fd665000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000 b7dfdab40000000000000000 39747 b7de812d5010420ac29b0000000000000000 39748 b7e193f550104218f8fa0000000000000000 39749 9cea00000001000000000000036e733209666972737466696e64026e6c0000010001 9cea80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39750 b7e193f55018421846bf0000008ba41b000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 39751 16fb00000001000000000000046d61696c0676696e636973026e6c0000010001 16fb80000001000000020002046d61696c0676696e636973026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02c000100010001518000043efa0651c03d000100010001518000043efa0650 39752 b7ddeae15010fbde7ff70000000000000000 39753 b7e194035011420af86c0000000000000000 39754 b7df5ac05011446278800000000000000000 b7dfdac40000000000000000 39755 fe55000000010000000000000662616e6e65720d6469656e73746d616b6b657273026e6c0000010001 fe55800000010000000200000662616e6e65720d6469656e73746d616b6b657273026e6c0000010001c0130002000100015180001406737068696e7807726f7365747461036e657400c0130002000100015180000906616e75626973c03c 39756 00000000700240000f3900000204058201010402 000080010000000000000000 39757 ddee000000010000000000000f646f6d61696e2d7265676973747279026e6c00001c0001 ddee800000010000000300020f646f6d61696e2d7265676973747279026e6c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180000e036e733107737572666e6574c01cc00c0002000100015180000b026e73026e6c036e657400c03000010001000151800004c1b09002c04100010001000151800004c0576a65 39758 000000007002400079d00000020405b401010402 000080010000000000000000 39759 b7e194045010420af86b0000000000000000 39760 10e3000000010000000000000a73696d6f6e6b726f6f6e026e6c00000f0001 10e3800000010000000300010a73696d6f6e6b726f6f6e026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 39761 b7e2188c5010421869340000000000000000 b7e298840000000000000000 39762 86110000000100000000000008686f73746e616d650462696e640000100003 86118000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 39763 b7df5ac150104462787f0000000000000000 b7dfdac40000000000000000 39764 b7e2188c501842183cdb0000008b1e39000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 b7e298840000000000000000 39765 b7e304b250104470e57e0000000000000000 b7e380010000000000000000 39766 753500000001000000000000037777770465626179026e6c0000010001 753580000001000000020000037777770465626179026e6c0000010001c010000200010001518000140963726f636f64696c65046562617903636f6d00c0100002000100015180000b087061636966696572c038 39767 87dd00000001000000000000046574726e05636176656f026e6c0000010001 87dd80000001000000020002046574726e05636176656f026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02b000100010001518000045112a002c03d000100010001518000045112a102 39768 b7e304b25018447021fa0000008fbcf4000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000 b7e380010000000000000000 39769 b7e2189a5011420a68a60000000000000000 b7e298940000000000000000 39770 b7e304c050114462e4ec0000000000000000 b7e380010000000000000000 39771 6f0e0000000100000000000008686f73746e616d650462696e640000100003 6f0e8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 39772 b7e2189b5010420a68a50000000000000000 b7e298940000000000000000 39773 000000007002400091100000020405b401010402 000080010000000000000000 39774 07cf000000010000000000000976616e2d6c69657265026e6c0000ff0001 07cf800000010000000200020976616e2d6c69657265026e6c0000ff0001c00c0002000100015180000a036e733103696166c016c00c00020001000151800006036e7332c02ec02a000100010001518000045059e040c040000100010001518000045059ee03 39775 906600000001000000000000037777770466726565026e6c0000010001 906680000001000000020002037777770466726565026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 39776 48710000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 48718000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 39777 41330000000100000000000009776565726b616d6572026e6c0000010001 41338000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 39778 02a028000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373037777770b726f62696e726f6d6d656c026e6c000021000100000258002100000064018506736572766572037777770b726f62696e726f6d6d656c026e6c00 02a0a8040000000000000000 39779 b7e304c150104462e4eb0000000000000000 b7e380010000000000000000 39780 b7e3c233501044703f3d0000000000000000 39781 b7e3c23350184470d6fa0000008f61b2000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afeb1403c50310003000000304e544c4d535350000100000097b208e009000900270000000700070020000000425241564f31314a4a432d425241564f0000 39782 050c0000000100000000000003777777046e637276026e6c0000010001 050c8000000100000002000203777777046e637276026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c015c0100002000100015180000805726f62696ec030c02900010001000151800004913a1e04c04500010001000151800004913a1a34 39783 0000000070024000bdff00000204058201010402 000080010000000000000000 39784 ae8b0000000100000000000003777777036e6e69026e6c0000010001 ae8b8000000100000002000203777777036e6e69026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004c0577242c03900010001000151800004c0576a65 39785 b7e3c241501144623eab0000000000000000 39786 23bd00000001000000000000036e73330767617574656e67026e6c0000010001 23bd80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39787 23be00000001000000000000036e73340767617574656e67026e6c0000010001 23be80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39788 f09900000001000000000000037777770c6175746f7761616c77696a6b026e6c0000010001 f09984030001000000010000037777770c6175746f7761616c77696a6b026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 39789 b7e443e550104218ec9f0000000000000000 b7e4c3e40000000000000000 39790 b7e443e550184218d6cd0000008b06b1000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 b7e4c3e40000000000000000 39791 0af400000001000000000000037777770b776170656e6465616c6572026e6c0000010001 0af484030001000000010000037777770b776170656e6465616c6572026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 39792 5adc0000000100000000000005656d61696c026e6c0000010001 5adc8403000100000001000005656d61696c026e6c0000010001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 39793 b7e443f35011420aec110000000000000000 b7e4c3f40000000000000000 39794 b7e3c242501044623eaa0000000000000000 39795 54930000000100000000000006696d616765730777656262656174026e6c0000010001 54938000000100000002000006696d616765730777656262656174026e6c0000010001c0130002000100015180000f036e7331087765622d62656174c01bc01300020001000151800006036e7332c033 39796 0000000070024000d9ff00000204058201010402 000080010000000000000000 39797 160000000001000000000000026e73076e656473746174026e6c0000010001 160080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39798 b7e443f45010420aec100000000000000000 b7e4c3f40000000000000000 39799 307e00000001000000000000037777770e6d657373656e676572746f6f6c73026e6c0000010001 307e80000001000000020000037777770e6d657373656e676572746f6f6c73026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c038 39800 3d5e00000001000000000000046d61696c0f76616c656e74696a6e7363686f6f6c026e6c0000010001 3d5e80000001000000020000046d61696c0f76616c656e74696a6e7363686f6f6c026e6c0000010001c0110002000100015180000f04686e73300774697363616c69c021c0110002000100015180000704686e7331c03a 39801 b7e5104a501042183c3a0000000000000000 b7e590440000000000000000 39802 b7e5104a501842182f400000008bfed9000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf7403c4f7700030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 b7e590440000000000000000 39803 792d0000000100000000000003777777046e6f7665026e6c0000010001 792d8000000100000002000203777777046e6f7665026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c015c01000020001000151800006036e7332c02dc02900010001000151800004505fa002c04400010001000151800004505fac02 39804 d62700000001000000000000057768616861026e6c00000f0001 d62784030001000000010000057768616861026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 39805 5c3c00000001000000000000046e73303903777873026e6c0000010001 5c3c80000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 39806 7da300000001000000000000046d61696c08652d616374697665026e6c0000010001 7da380000001000000020002046d61696c08652d616374697665026e6c0000010001c0110002000100015180000a036e7331036e7873c01ac01100020001000151800006036e7332c032c02e00010001000151800004d973c015c04400010001000151800004d973c102 39807 b7e510585011420a3bac0000000000000000 b7e590540000000000000000 39808 f2f40000000100000000000004686f6d6506706c616e6574026e6c0000010001 f2f48000000100000003000304686f6d6506706c616e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a65 39809 0000000070024000818300000204058201010402 000080010000000000000000 39810 4f0a00000001000000000000036e733503777873026e6c0000010001 4f0a80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 39811 8d4a0000000100000000000003777777086672756974686f66026e6c0000010001 8d4a8000000100000002000003777777086672756974686f66026e6c0000010001c0100002000100015180000f026e73066f786361727403636f6d00c01000020001000151800006036e7332c030 39812 62c50000000100000000000007706172656e636f026e6c00000f0001 62c58000000100000003000007706172656e636f026e6c00000f0001c00c00020001000151800014036e73310a646e736d616e6167656403636f6d00c00c00020001000151800006036e7337c02cc00c00020001000151800006036e7336c02c 39813 1df0000000010000000000000a73746172746b6162656c026e6c00000f0001 1df0800000010000000300010a73746172746b6162656c026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 39814 72200000000100000000000008746f747a69656e73026e6c00000f0001 72208000000100000002000208746f747a69656e73026e6c00000f0001c00c00020001000151800012036e73310b706c7573686f7374696e67c015c00c00020001000151800006036e7332c02dc02900010001000151800004d994ae77c047000100010001518000045054ea06 39815 b7e510595010420a3bab0000000000000000 b7e590540000000000000000 39816 f3690000000100000000000003686f6d026e6c00000f0001 f3698000000100000002000103686f6d026e6c00000f0001c00c0002000100015180000d026e7307616e74656e6e61c010c00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02400010001000151800004d995dd13 39817 cd5700000001000000000000026e730d646f6d65696e656e6d61726b74026e6c0000010001 cd5780000001000000020002026e730d646f6d65696e656e6d61726b74026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043e320c64c03f000100010001518000043e64366a 39818 1c4800000001000000000000036e73320d646f6d65696e656e6d61726b74026e6c0000010001 1c4880000001000000020002036e73320d646f6d65696e656e6d61726b74026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc032000100010001518000043e320c64c00c000100010001518000043e64366a 39819 b7e5f01a5010421803ed0000000000000000 39820 b7e5f01a5018421838b30000008bbb19000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 39821 1d6028000001000000010000024e4c0000060001055f6c646170045f74637003706463065f6d7364637306574e54504d4d024e4c000021000100000258001800000064018506776e74706d6d06574e54504d4d024e4c00 1d60a8040000000000000000 39822 af36000000010000000000000377777705676570726f026e6c0000010001 af36800000010000000200020377777705676570726f026e6c0000010001c0100002000100015180000c026e7306787334616c6cc016c01000020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 39823 1e3c0000000100000000000003667331056c76706161026e6c0000060001 1e3c8000000100000002000203667331056c76706161026e6c0000060001c0100002000100015180000c036e73310573796e7267c016c01000020001000151800006036e7332c02ec02a0001000100015180000452c04b0bc0420001000100015180000452c04b0c 39824 b7e5f0285011420a035f0000000000000000 39825 19af0000000100000000000004616a6178066e696b686566026e6c0000010001 19af8000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 39826 b7e5f0295010420a035e0000000000000000 39827 ecd5000000010000000000000862656163686e6574026e6c0000010001 ecd5800000010000000200000862656163686e6574026e6c0000010001c00c0002000100015180000f097873326f666669636503636f6d00c00c0002000100015180001208617869707265737306787334616c6cc015 39828 000000007002400094360000020405b401010402 000080010000000000000000 39829 c0160000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 c0168000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 39830 064700000001000000000000037777770a77686974657472617368026e6c0000010001 064780000001000000020002037777770a77686974657472617368026e6c0000010001c0100002000100015180000e036e733107686f7477697265c01bc01000020001000151800006036e7332c033c02f0001000100015180000451044b03c0490001000100015180000451044bc8 39831 02a328000001000000010000026e6c0000060001055f6c646170045f746370037777770b726f62696e726f6d6d656c026e6c000021000100000258002100000064018506736572766572037777770b726f62696e726f6d6d656c026e6c00 02a3a8040000000000000000 39832 91a200000001000000000000086168636272616e640564656d6f6e026e6c0000ff0001 91a280000001000000030002086168636272616e640564656d6f6e026e6c0000ff0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 39833 b7e6be1850104470467b0000000000000000 39834 00000000700240007ffe00000204058201010402 000080010000000000000000 39835 c07b00000001000000000000046e73303803777873026e6c0000010001 c07b80000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 39836 bb3c000000010000000000000377777706636861746964026e6c0000010001 bb3c800000010000000200020377777706636861746964026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c017c01000020001000151800006036e7332c02ec02b0001000100015180000450474002c0490001000100015180000450474102 39837 b7e7a1a25010421850de0000000000000000 39838 b7e7a1a2501842181a360000008b2587000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 39839 b7e6be185018447063d90000008c6106000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd19403c4e9900030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000 39840 23c000000001000000000000036e73330767617574656e67026e6c0000010001 23c080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39841 23c100000001000000000000036e73340767617574656e67026e6c0000010001 23c180000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 39842 2ad2000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c00000f0001 2ad2800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c00000f0001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 39843 914c0000000100000000000003756e63026e6c00001c0001 914c8000000100000002000003756e63026e6c00001c0001c00c00020001000151800016036e73310f627573696e657373636f6e6e656374c010c00c00020001000151800010036e733206776964657873036e657400 39844 b7e7a1b05011420a50500000000000000000 39845 342b000000010000000000000c62636265726b656c6d616e73026e6c00000f0001 342b800000010000000200010c62636265726b656c6d616e73026e6c00000f0001c00c0002000100015180000e036e7331076e6564636f6d70c019c00c00020001000151800011036e7332076e6564636f6d70036f726700c02d00010001000151800004c3c1a80d 39846 926d00000001000000000000036e73310f627573696e657373636f6e6e656374026e6c0000010001 926d80000001000000030002036e73310f627573696e657373636f6e6e656374026e6c0000010001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c038c03400010001000151800004d4ccc0fcc069000100010001518000043efa0703 39847 0000000070024000d0c800000204058201010402 000080010000000000000000 39848 678500000001000000000000036e73310f627573696e657373636f6e6e656374026e6c0000260001 678580000001000000030002036e73310f627573696e657373636f6e6e656374026e6c0000260001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c038c03400010001000151800004d4ccc0fcc069000100010001518000043efa0703 39849 2d680000000100000000000005726570726f04696e6669026e6c0000010001 2d688000000100000003000205726570726f04696e6669026e6c0000010001c0120002000100015180000f036e7331086c65617365776562c017c01200020001000151800006036e7332c02fc01200020001000151800012036e7333086c65617365776562036f726700c02b000100010001518000043ed44079c046000100010001518000043ed4407a 39850 b7e6be265011446245ec0000000000000000 39851 b7e7a1b15010420a504f0000000000000000 39852 16a300000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 16a380000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 39853 20f000000001000000000000036e73320f6761726e69657270726f6a65637473026e6c00001c0001 20f080000001000000020002036e73320f6761726e69657270726f6a65637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 39854 537900000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000260001 537980000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 39855 7443000000010000000000000a72616c6f64657369676e026e6c0000ff0001 7443800000010000000200000a72616c6f64657369676e026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c017c00c0002000100015180000704686e7331c030 39856 328400000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 328480000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 39857 e31300000001000000000000026e730f6761726e69657270726f6a65637473026e6c00001c0001 e31380000001000000020002026e730f6761726e69657270726f6a65637473026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 39858 86dc00000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000260001 86dc80000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 39859 9b160000000100000000000003646e73027972026e6c0000010001 9b168000000100000002000003646e73027972026e6c0000010001c0100002000100015180001103646e7307626974626f6f6d036e657400c0100002000100015180000704646e7332c02b 39860 21cf0000000100000000000003646e7307626974626f6f6d026e6c0000010001 21cf8000000100000002000003646e7307626974626f6f6d026e6c0000010001c0100002000100015180001103646e7307626974626f6f6d036e657400c0100002000100015180000704646e7332c030 39861 44b200000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000010001 44b280000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 39862 608b00000001000000000000036e73310f6761726e69657270726f6a65637473026e6c00001c0001 608b80000001000000020002036e73310f6761726e69657270726f6a65637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 39863 7a5300000001000000000000036e73310f6761726e69657270726f6a65637473026e6c0000260001 7a5380000001000000020002036e73310f6761726e69657270726f6a65637473026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 39864 b7e8222b50104218211f0000000000000000 b7e8a2230000000000000000 39865 0000000070024000a6450000020405b401010402 000080010000000000000000 39866 ed2700000001000000000000047a766f6d026e6c0000010001 ed2780000001000000020002047a766f6d026e6c0000010001c00c0002000100015180000d026e7307686f72697a6f6ec011c00c00020001000151800006036e7332c028c02500010001000151800004d5c51803c03e00010001000151800004d5c51805 39867 b7e8222b50184218f34f0000008b1daf000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 b7e8a2230000000000000000 39868 d69800000001000000000000036e733209666972737466696e64026e6c0000010001 d69880000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39869 b0d900000001000000000000047369726f026e6c00000f0001 b0d980000001000000020000047369726f026e6c00000f0001c00c0002000100015180001004646e73350669706461793102626500c00c0002000100015180000704646e7333c02a 39870 b7e822395011420a20910000000000000000 b7e8a2330000000000000000 39871 b7e6be275010446245eb0000000000000000 39872 2b7e000000010000000000000377777709766964656f6c616e64026e6c0000010001 2b7e800000010000000200000377777709766964656f6c616e64026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c034 39873 a61c00000001000000000000036e733209666972737466696e64026e6c0000010001 a61c80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39874 b72100000001000000000000036e733109666972737466696e64026e6c0000010001 b72180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39875 b7e8b9fe501044705ca20000000000000000 39876 00000000700240008ecb00000204058201010402 000080010000000000000000 39877 34c000000001000000000000026e7306766576696461026e6c0000010001 34c080000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 39878 b7e8223a5010420a20900000000000000000 b7e8a2330000000000000000 39879 b7e96bb55010421895960000000000000000 b7e9ebb40000000000000000 39880 b7e8b9fe50184470c0470000008c1bc0000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd19403c4e9900030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000 39881 509f00000001000000000000037777770d74727573742d6167696c697479026e6c0000010001 509f80000001000000020000037777770d74727573742d6167696c697479026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01ec0100002000100015180000805646e732d32c038 39882 b7e96bb5501842187c9e0000008b08d8000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afdf8403c4f7800030000002c4e544c4d535350000100000097b200c006000600260000000600060020000000534552564552524f4d4d454c0000 b7e9ebb40000000000000000 39883 86c000000001000000000000036e73320a73657276657262656174026e6c0000010001 86c080000001000000020002036e73320a73657276657262656174026e6c0000010001c0100002000100015180000a04646e7330026975c01bc0100002000100015180000704646e7331c034c02f00010001000151800004d91a7002c04500010001000151800004d91a7103 39884 d81500000001000000000000036e73310a73657276657262656174026e6c0000010001 d81580000001000000020002036e73310a73657276657262656174026e6c0000010001c0100002000100015180000a04646e7330026975c01bc0100002000100015180000704646e7331c034c02f00010001000151800004d91a7002c04500010001000151800004d91a7103 39885 b7e96bc35011420a95080000000000000000 b7e9ebc40000000000000000 39886 cae4000000010000000000000377777706796f6f7a6572026e6c0000010001 cae4800000010000000300030377777706796f6f7a6572026e6c0000010001c0100002000100015180000b036e73310473716164c017c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02fc02b0001000100015180000451ab6720c0420001000100015180000451ab6724c05400010001000151800004d5c51d0c 39887 998000000001000000000000036e7331046372696f026e6c0000010001 998080000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39888 562d00000001000000000000036e7332046372696f026e6c0000010001 562d80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39889 16120000000100000000000003777777066e666f726365026e6c0000010001 16128000000100000002000203777777066e666f726365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02b000100010001518000043ed45433c03d000100010001518000043ed45434 39890 b7e96bc45010420a95070000000000000000 b7e9ebc40000000000000000 39891 7700000000010000000000000d616c622d6e6174757269736d65036e666e026e6c0000ff0001 7700800000010000000200020d616c622d6e6174757269736d65036e666e026e6c0000ff0001c01a0002000100015180000f04646e73300765736f75726365c01ec01a0002000100015180000704646e7334c037c03200010001000151800004d48198d8c04d00010001000151800004d5c5eaa4 39892 b7e8ba0c501144625c130000000000000000 39893 63097b1c50040000f11a0000000000000000 6309fb140000000000000000 39894 0c7200100001000000000001036e733106776964657873026e6c00000100010000290800000080000000 0c7280000001000000030003036e733106776964657873026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa07030000291000000000000000 39895 863900100001000000000001036e733106776964657873026e6c00002600010000290800000080000000 863980000001000000030003036e733106776964657873026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa07030000291000000000000000 39896 49c00000000100000000000004686f6d650464656473026e6c0000010001 49c08000000100000002000204686f6d650464656473026e6c0000010001c0110002000100015180000c026e73067874646e6574c016c01100020001000151800006036e7331c02dc02a00010001000151800004c16e9d02c04200010001000151800004d9cc165f 39897 f8f500100001000000000001036e733306776964657873026e6c00000100010000290800000080000000 f8f580000001000000030003036e733306776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800002c00cc02b00010001000151800004d4ccc0fcc00c000100010001518000043efa07030000291000000000000000 39898 8b1e00100001000000000001036e733306776964657873026e6c00002600010000290800000080000000 8b1e80000001000000030003036e733306776964657873026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800002c00cc02b00010001000151800004d4ccc0fcc00c000100010001518000043efa07030000291000000000000000 39899 0000000070024000ec7e0000020405b401010402 000080010000000000000000 39900 4b6600000001000000000000027463036164730974656c656772616166026e6c0000010001 4b6680000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 39901 19a400000001000000000000036e73310a6f70656e646f6d65696e026e6c0000010001 19a480000001000000020002036e73310a6f70656e646f6d65696e026e6c0000010001c0100002000100015180000c026e73067874646e6574c01bc01000020001000151800006036e7331c032c02f00010001000151800004c16e9d02c04700010001000151800004d9cc165f 39902 902e00000001000000000000036e73310a6f70656e646f6d65696e026e6c00001c0001 902e80000001000000020002036e73310a6f70656e646f6d65696e026e6c00001c0001c0100002000100015180000c026e73067874646e6574c01bc01000020001000151800006036e7331c032c02f00010001000151800004c16e9d02c04700010001000151800004d9cc165f 39903 18750000000100000000000003444e42024e4c0000010001 18758000000100000002000003444e42024e4c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 39904 b7e8ba0d501044625c120000000000000000 39905 9750000000010000000000000377777703646674026e6c0000010001 9750800000010000000200000377777703646674026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c02c 39906 b7ec28565010447034800000000000000000 b7eca8540000000000000000 39907 b7ec285650184470d6a40000008cdd40000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd19403c4e9900030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000 b7eca8540000000000000000 39908 b7ec28645011446233f10000000000000000 b7eca8640000000000000000 39909 0e1b00000001000000000000036e7335046372696f026e6c0000010001 0e1b80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39910 6fb500000001000000000000036e7336046372696f026e6c0000010001 6fb580000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39911 f2af000000010000000000000377777703776562026e6c0000010001 f2af800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 39912 36f900000001000000000000036e7335046372696f026e6c0000010001 36f980000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39913 1b8100000001000000000000036e7336046372696f026e6c0000010001 1b8180000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39914 1faa00000001000000000000076475746c727532026c7207747564656c6674024e4c0000010001 1faa80000001000000050005076475746c727532026c7207747564656c6674024e4c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 39915 80f90000000100000000000003777777036b766b026e6c0000010001 80f98000000100000002000203777777036b766b026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c014c01000020001000151800006036e7332c02bc02800010001000151800004c3402003c04100010001000151800004c340202b 39916 4ef500000001000000000000037777770970696e646161746a65077765622d6c6f67026e6c0000010001 4ef580000001000000030003037777770970696e646161746a65077765622d6c6f67026e6c0000010001c01a0002000100015180000b036e733104696c7365c022c01a00020001000151800006036e7332c03ac01a00020001000151800006036e7333c03ac036000100010001518000043e45a282c04d000100010001518000043e45a283c05f000100010001518000043e45a284 39917 b7ec28655010446233f00000000000000000 b7eca8640000000000000000 39918 982d00000001000000000000036e7331046372696f026e6c0000010001 982d80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39919 773000000001000000000000036e7332046372696f026e6c0000010001 773080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39920 95f000000001000000000000037777770a72656372656174696566026e6c0000010001 95f080000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 39921 4cdc00000001000000000000036e7331046372696f026e6c0000010001 4cdc80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39922 19d000000001000000000000036e7332046372696f026e6c0000010001 19d080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39923 837600000001000000000000037777770b76656c6f786575726f7065026e6c0000010001 837680000001000000020001037777770b76656c6f786575726f7065026e6c0000010001c0100002000100015180000a036e733303777873c01cc01000020001000151800006036e7334c034c04600010001000151800004d5ef9a65 39924 2c28000000010000000000000866696c6167656e74026e6c0000ff0001 2c28800000010000000200020866696c6167656e74026e6c0000ff0001c00c00020001000151800012036e73310b696e7465727374726f6f6dc015c00c00020001000151800006036e7332c02dc0290001000100015180000450558121c04700010001000151800004d58141c4 39925 04580000000100000000000003777777096a6f6e67656e65656c026e6c0000010001 04588000000100000002000003777777096a6f6e67656e65656c026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c034 39926 22a0000000010000000000000764656c65697465026e6c0000ff0001 22a0800000010000000200020764656c65697465026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 39927 c6ad001000010000000000010762736d74702d3108636f6e6365707473026e6c00000100010000290800000080000000 c6ad800000010000000200030762736d74702d3108636f6e6365707473026e6c0000010001c0140002000100015180001103646e730a636f6e63657074736661c01dc0140002000100015180000704646e7332c014c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e1c0000291000000000000000 39928 30c100000001000000000000037777771361626376617374676f65646469656e7374656e026e6c0000010001 30c180000001000000020000037777771361626376617374676f65646469656e7374656e026e6c0000010001c01000020001000151800014026e730b736d617274736572766572036e657400c01000020001000151800006036e7332c03b 39929 87ea000000010000000000001976616e64656e77696c64656e6265726776616e68616c646572026e6c00000f0001 87ea840300010000000100001976616e64656e77696c64656e6265726776616e68616c646572026e6c00000f0001c02600060001000038400036026e730f646f6d61696e2d7265676973747279c0260a686f73746d6173746572c03d0bf1e540000070800000384000278d0000003840 39930 9a8000000001000000000000036e73320470696e65026e6c0000010001 9a8080000001000000020002036e73320470696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d59c0201c00c00010001000151800004c3c1a303 39931 755d00100001000000000001076f7574706f73740464733961026e6c00000100010000290800000080000000 755d80000001000000020003076f7574706f73740464733961026e6c0000010001c0140002000100015180000b036e73310470696e65c019c01400020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a3030000291000000000000000 39932 461100000001000000000000066d782d323030056c61646f74026e6c0000010001 461180000001000000020000066d782d323030056c61646f74026e6c0000010001c0130002000100015180001105646e732d33056c61646f7403636f6d00c0130002000100015180000805646e732d34c033 39933 50c528000001000000010000026e6c0000060001085f6b706173737764045f74637005696e7472610b726164696d65646963616c026e6c00002100010000025800210000006401d0047261646905696e7472610b726164696d65646963616c026e6c00 50c5a8040000000000000000 39934 2ba728000001000000010000026e6c0000060001095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573096f627367726176656e026e6c000021000100000258001f0000006400580a7064637367726176656e096f627367726176656e026e6c00 2ba7a8040000000000000000 39935 e1be000000010000000000000d76616e686172656e6375696a6b026e6c00000f0001 e1be800000010000000200020d76616e686172656e6375696a6b026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 39936 3ab800000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 3ab880000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 39937 75a100000001000000000000076c6f6f6e657932026e6c0000010001 75a180000001000000020002076c6f6f6e657932026e6c0000010001c00c0002000100015180000a036e7331036e7873c014c00c00020001000151800006036e7332c02cc02800010001000151800004d973c015c03e00010001000151800004d973c102 39938 183100000001000000000000035f6763045f7463700767666b63617069026e6c0000210001 183184030001000000010000035f6763045f7463700767666b63617069026e6c0000210001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 39939 02bb00000001000000000000036d78300774697363616c69026e6c0000010001 02bb80000001000000030002036d78300774697363616c69026e6c0000010001c0100002000100015180000704616e7331c010c0100002000100015180000704616e7332c010c0100002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c03f00010001000151800004c3f13325 39940 21b2000000010000000000000377777706626172746563026e6c0000010001 21b2800000010000000200020377777706626172746563026e6c0000010001c01000020001000151800010036e7331096176616e742d696e74c017c01000020001000151800006036e7332c02fc02b00010001000151800004d5de1d07c04700010001000151800004d5de1807 39941 000000007002faf0032000000204056401010402 000080010000000000000000 39942 f74d00000001000000000000055f6c646170045f7463700767666b63617069026e6c0000210001 f74d84030001000000010000055f6c646170045f7463700767666b63617069026e6c0000210001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 39943 9244000000010000000000000377777707696b6f6e727476026e6c0000010001 9244800000010000000200000377777707696b6f6e727476026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02f 39944 000000007002faf043bb0000020405b401010402 000080010000000000000000 39945 be8e0000000100000000000008616269746d6f7265026e6c0000010001 be8e8000000100000003000108616269746d6f7265026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 39946 b7eca26f5010fd5cd2bb0000000000000000 39947 c6b300000001000000000000036e733106776964657873026e6c0000010001 c6b380000001000000030002036e733106776964657873026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa0703 39948 b7eca26f5018fd5c445900000092c3e6000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5d403c4fdd0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000 39949 7f1900000001000000000000036e733106776964657873026e6c0000260001 7f1980000001000000030002036e733106776964657873026e6c0000260001c01000020001000151800002c00cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c00c00010001000151800004d4ccc0fcc055000100010001518000043efa0703 39950 188d00000001000000000000036e733306776964657873026e6c0000010001 188d80000001000000030002036e733306776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800002c00cc02b00010001000151800004d4ccc0fcc00c000100010001518000043efa0703 39951 45c600000001000000000000036e733306776964657873026e6c0000260001 45c680000001000000030002036e733306776964657873026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800002c00cc02b00010001000151800004d4ccc0fcc00c000100010001518000043efa0703 39952 c4cc0000000100000000000006636861726973026e6c00000f0001 c4cc8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 39953 f33900000001000000000000036e733109666972737466696e64026e6c0000010001 f33980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 39954 15f800000001000000000000026e73076e656473746174026e6c0000010001 15f880000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 39955 b7eca27d5011fd4ed2260000000000000000 39956 bc5b0000000100000000000006686f6d65303103777873026e6c0000010001 bc5b8000000100000003000306686f6d65303103777873026e6c0000010001c01300020001000151800007046e733038c013c01300020001000151800007046e733039c013c01300020001000151800006036e7334c013c02b00010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 39957 000000007002faf00b5800000204056401010402 000080010000000000000000 39958 b7eca27e5010fd4ed2250000000000000000 39959 b7ee6dad5010fd5c0fb40000000000000000 b7eeeda40000000000000000 39960 5253000000010000000000000e76616e6d657572732d6175746f73026e6c00000f0001 5253800000010000000200000e76616e6d657572732d6175746f73026e6c00000f0001c00c0002000100015180000f036e7331053132337873036e657400c00c00020001000151800006036e7332c033 39961 b7ee6dad5018fd5c0976000000923cc3000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5d403c4fdd0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000 b7eeeda40000000000000000 39962 13db00000001000000000000076f7574706f73740464733961026e6c0000010001 13db80000001000000020002076f7574706f73740464733961026e6c0000010001c0140002000100015180000b036e73310470696e65c019c01400020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 39963 30bc000000010000000000000734657665727931026e6c0000010001 30bc800000010000000200010734657665727931026e6c0000010001c00c00020001000151800009026e730365646ec014c00c00020001000151800010036e733109756e69736f75726365c014c028000100010001518000043e3a51e4 39964 b7ee6dbb5011fd4e0f1f0000000000000000 b7eeedb40000000000000000 39965 2c4b0000000100000000000006656d61696c73026e6c0000010001 2c4b8000000100000003000006656d61696c73026e6c0000010001c00c0002000100015180000e036e73300477697368036e657400c00c00020001000151800006036e7331c02bc00c00020001000151800006036e7332c02b 39966 000000007002faf0682600000204056401010402 000080010000000000000000 39967 2c2e28000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730b6b7376696e7465726e6574026e6c000021000100000258001e00000064005807697365727665720b6b7376696e7465726e6574026e6c00 2c2ea8040000000000000000 39968 4a2600000001000000000000037777770b646574656c656772616166026e6c0000010001 4a2680000001000000020000037777770b646574656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c034 39969 d70c0000000100000000000003706f70026574026e6c0000010001 d70c8000000100000003000203706f70026574026e6c0000010001c0100002000100015180000d036e733106776964657873c013c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02bc02700010001000151800004d4ccc0fcc05c000100010001518000043efa0703 39970 f13400000001000000000000037777770b646574656c656772616166026e6c0000010001 f13480000001000000020000037777770b646574656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c034 39971 5c7900000001000000000000036e7334086d65646961776562026e6c0000010001 5c7980000001000000020000036e7334086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 39972 b7ee6dbc5010fd4e0f1e0000000000000000 b7eeedb40000000000000000 39973 b7ef54e85010fd5c85460000000000000000 b7efd4e40000000000000000 39974 b7ef54e85018fd5c2cde000000928ced000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000 b7efd4e40000000000000000 39975 8917000000010000000000000465736269026e6c00000f0001 8917800000010000000200000465736269026e6c00000f0001c00c00020001000151800012036e73310866696e616c69737403636f6d00c00c00020001000151800006036e7332c029 39976 0ee4000000010000000000000670726f646973056e76776d6e026e6c0000010001 0ee4800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 39977 b7ef54f65011fd4e84b10000000000000000 b7efd4f40000000000000000 39978 3bd900000001000000000000037777770862696c6c32303030026e6c0000010001 3bd980000001000000020002037777770862696c6c32303030026e6c0000010001c0100002000100015180000b036e7331046e732d31c019c01000020001000151800006036e7332c031c02d000100010001518000045045a0cdc04400010001000151800004d4cceec8 39979 2d8e000000010000000000000670726f646973056e76776d6e026e6c0000010001 2d8e800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 39980 66a100000001000000000000037777770873636f7574696e67026e6c0000010001 66a180000001000000020001037777770873636f7574696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800010026e730777697265687562036e657400c02d00010001000151800004d5c1d633 39981 0000000070024000bd400000020405b401010402 000080010000000000000000 39982 b7ef54f75010fd4e84b00000000000000000 b7efd4f40000000000000000 39983 c1ad00000001000000000000037777770977706d6d6f746f7273026e6c0000010001 c1ad80000001000000020002037777770977706d6d6f746f7273026e6c0000010001c01000020001000151800017036e733110696e7465726e657470726f6a65637473c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5c9d914c05100010001000151800004d5c9d915 39984 66b100000001000000000000086767737472616465026e6c0000ff0001 66b180000001000000020002086767737472616465026e6c0000ff0001c00c0002000100015180000e036e733107626265796f6e64c015c00c00020001000151800006036e7332c02dc029000100010001518000043eb1900bc043000100010001518000043eb19002 39985 b7f00ee7501044701ead0000000000000000 b7f08ee40000000000000000 39986 2baa28000001000000010000026e6c0000060001035f6763045f746370096f627367726176656e026e6c000021000100000258001f000000640cc40a7064637367726176656e096f627367726176656e026e6c00 2baaa8040000000000000000 39987 e7af0000000100000000000006636861726973026e6c00000f0001 e7af8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 39988 b7f00ee7501844705c81000000910c00000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 b7f08ee40000000000000000 39989 2e4000000001000000000000076f62646e772d6e026e6c00000f000100 2e4080000001000000020002076f62646e772d6e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 39990 db0100000001000000000000036e7331046372696f026e6c0000010001 db0180000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39991 80af00000001000000000000036e7332046372696f026e6c0000010001 80af80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39992 851800000001000000000000037777770a72656372656174696566026e6c0000010001 851880000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 39993 bf9700000001000000000000036e7331046372696f026e6c0000010001 bf9780000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39994 34a600000001000000000000036e7332046372696f026e6c0000010001 34a680000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 39995 000000007002faf020de00000204056401010402 000080010000000000000000 39996 b7f00ef5501144621e190000000000000000 b7f08ef40000000000000000 39997 05d100000001000000000000037777770a64726f6d656461726973026e6c0000010001 05d180000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 39998 e6ba0000000100000000000004706f73740476766273026e6c0000010001 e6ba8000000100000002000004706f73740476766273026e6c0000010001c01100020001000151800012036e73330b70656c6963616e2d696374c016c01100020001000151800006036e7335c02e 39999 f1e2000000010000000000000377777703636273026e6c0000010001 f1e2800000010000000300020377777703636273026e6c0000010001c0100002000100015180000805646e736831c010c0100002000100015180000805646e736832c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004c1acf4ccc03c00010001000151800004c1acf4cd 40000 b7f0ad405010fd5ce5a40000000000000000 40001 2c6000000001000000000000036e73330767617574656e67026e6c0000010001 2c6080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 40002 d26f00000001000000000000046d61696c0e70726f66746563687374796c6573026e6c0000010001 d26f80000001000000020002046d61696c0e70726f66746563687374796c6573026e6c0000010001c0110002000100015180000f036e733108636f6d707574656cc020c01100020001000151800006036e7332c038c03400010001000151800004c3568680c04f00010001000151800004c3568681 40003 b7f0ad405018fd5ca524000000927404000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000 40004 097400000001000000000000037777770c64657369676e64616d73656c026e6c0000010001 097484030001000000010000037777770c64657369676e64616d73656c026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40005 000000007002400096fb0000020405b401010402 000080010000000000000000 40006 b7f00ef6501044621e180000000000000000 b7f08ef40000000000000000 40007 b7f0ad4e5011fd4ee50f0000000000000000 40008 4e7b00000001000000000000096863632d67726f6570026e6c0000010001 4e7b80000001000000020002096863632d67726f6570026e6c0000010001c00c0002000100015180000e036e7331077175616e746973c016c00c00020001000151800006036e7332c02ec02a000100010001518000043ed44440c04400010001000151800004d4ccca83 40009 c48900000001000000000000066963646174610769632d7465616d026e6c0000060001 c48984030001000000010000066963646174610769632d7465616d026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 40010 000000007002faf0f72200000204056401010402 000080010000000000000000 40011 7e9900000001000000000000046d61696c0964656c74612d7a6c64026e6c0000010001 7e9980000001000000020001046d61696c0964656c74612d7a6c64026e6c0000010001c01100020001000151800010026e730a7a65656c616e646e6574c01bc0110002000100015180000b026e73026e6c036e657400c02f00010001000151800004d473c0c1 40012 c45a0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 c45a8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40013 b7f1a62250104470612b0000000000000000 40014 6d4300000001000000000000037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001 6d4380000001000000030003037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 40015 d1fe000000010000000000000377777708746f703430776562026e6c0000010001 d1fe800000010000000200000377777708746f703430776562026e6c0000010001c01000020001000151800016036e73310c667565676f686f7374696e6703636f6d00c01000020001000151800006036e7332c031 40016 b7f0ad4f5010fd4ee50e0000000000000000 40017 84730000000100000000000008706f70756e64657207616d617465757207626c6f776a6f62026e6c0000010001 84738000000100000003000308706f70756e64657207616d617465757207626c6f776a6f62026e6c0000010001c01d0002000100015180000e04646e733106626c6978656dc025c01d0002000100015180000704646e7332c03ec01d0002000100015180000704646e7333c03ec03900010001000151800004d44fe803c05300010001000151800004c3f5c782c06600010001000151800004d44ff303 40018 b7f1a622501844703700000000917500000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 40019 b7f350355010fd5c18f20000000000000000 b7f3d0340000000000000000 40020 020e28000001000200000000026e6c0000060001066963646174610769632d7465616d026e6c00000500fe000000000000c014000100010000000000040a0000a2 020ea8040000000000000000 40021 b7f350355018fd5cbfda000000928d9c000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000 b7f3d0340000000000000000 40022 05d400000001000000000000037777770a64726f6d656461726973026e6c0000010001 05d480000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 40023 b7f1a6305011446260970000000000000000 40024 0000000070024000c07900000204057801010402 000080010000000000000000 40025 b7f350435011fd4e185d0000000000000000 b7f3d0440000000000000000 40026 3c0c28000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730c73746566667973776f726c64026e6c000021000100000258001e000000640058065345525645520c73746566667973776f726c64026e6c00 3c0ca8040000000000000000 40027 000000007002faf0f5eb00000204056401010402 000080010000000000000000 40028 761a0000000100000000000003777777036e6172026e6c0000010001 761a8000000100000002000203777777036e6172026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c014c0100002000100015180001004646e733208636f6e6365707473c014c02800010001000151800004d5c51c03c04500010001000151800004d5c51e1c 40029 b7f3f803501041a03b5a0000000000000000 40030 b7f3f803501841a0e3ed0000008c7123000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403b00f1403c527100030000002d4e544c4d535350000100000097b208e00700070026000000060006002000000049434441544149432d5445414d0000 40031 35fa0000000100000000000005666f72756d086e65646c696e7578026e6c0000010001 35fa8000000100000003000305666f72756d086e65646c696e7578026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c02f00010001000151800004d5ef87d2c04100010001000151800004d5ef87d3c05300010001000151800004d5ef8005 40032 69df0000000100000000000007636f6e74656e74026e6c0000010001 69df8000000100000002000007636f6e74656e74026e6c0000010001c00c00020001000151800016046e7330310b63726579667367726f757003636f6d00c00c00020001000151800007046e733032c02d 40033 b7f350445010fd4e185c0000000000000000 b7f3d0440000000000000000 40034 000000007002400071960000020405b401010402 000080010000000000000000 40035 346a00000001000000000000036e73340767617574656e67026e6c0000010001 346a80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 40036 b7f3f811501141923acb0000000000000000 40037 b7f4c0fc5010fd5ca6f20000000000000000 40038 f17c00000001000000000000036e73310a667265656f6e6c696e65026e6c0000010001 f17c80000001000000020002036e73310a667265656f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5d38115c03d00010001000151800004d5d38116 40039 fc3000000001000000000000036e73320a667265656f6e6c696e65026e6c0000010001 fc3080000001000000020002036e73320a667265656f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5d38115c00c00010001000151800004d5d38116 40040 b7f4c0fc5018fd5ca5cf0000009235a8000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afe5e403c4fde0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a00200000005044435347524156454e4f425347524156454e0000 40041 b7f1a6315010446260960000000000000000 40042 000000007002400048b30000020405b401010402 000080010000000000000000 40043 b7f580c05010447061240000000000000000 40044 e62a000000010000000000000567656e6965026e6c00001c0001 e62a800000010000000200020567656e6965026e6c00001c0001c00c0002000100015180000d026e73076e65746c616e64c012c00c00020001000151800006036e7332c029c02600010001000151800004d9aa2042c03f00010001000151800004d9aa2c06 40045 b7f3f812501041923aca0000000000000000 40046 0000000070024000833b00000204057801010402 000080010000000000000000 40047 b7f580c050184470c704000000916300000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000 40048 eaaa00000001000000000000036e7331046372696f026e6c0000010001 eaaa80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40049 aeef00000001000000000000036e7332046372696f026e6c0000010001 aeef80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40050 b7f73e35501041a0b7e60000000000000000 b7f7be340000000000000000 40051 b70c000000010000000000000377777707776b76726f6461026e6c0000010001 b70c800000010000000200000377777707776b76726f6461026e6c0000010001c0100002000100015180000c026e7306766576696461c018c01000020001000151800006036e7332c02f 40052 b7f73e35501841a0aecc0000008c23d2000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b00f1403c527100030000002d4e544c4d535350000100000097b208e00700070026000000060006002000000049434441544149432d5445414d0000 b7f7be340000000000000000 40053 b7f4c10a5011fd4ea65d0000000000000000 40054 b7f580ce5011446260900000000000000000 40055 b7f67a07501044703ef90000000000000000 b7f6fa040000000000000000 40056 1be900000001000000000000037777770b6d6f726e696e6773746172026e6c0000010001 1be980000001000000020000037777770b6d6f726e696e6773746172026e6c0000010001c010000200010001518000100572656d7573046d736575036e657400c01000020001000151800006036e7332c036 40057 0000000070024000c9110000020405b401010402 000080010000000000000000 40058 b7f73e4350114192b7570000000000000000 b7f7be440000000000000000 40059 b7f67a0750184470abcd00000091de00000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 b7f6fa040000000000000000 40060 b7f580cf50104462608f0000000000000000 40061 b7f7f95250104470400b0000000000000000 40062 b7f73e4450104192b7560000000000000000 b7f7be440000000000000000 40063 0000000070024000fcc200000204057801010402 000080010000000000000000 40064 b7f7f9525018447060ec00000091a900000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000 40065 b7f4c10b5010fd4ea65c0000000000000000 40066 b7f886a3501041a0e8fe0000000000000000 40067 b7f67a15501144623e650000000000000000 b7f6fa140000000000000000 40068 b7f886a3501841a085450000008c7e71000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403b00f1403c527100030000002d4e544c4d535350000100000097b208e00700070026000000060006002000000049434441544149432d5445414d0000 40069 b7f7f960501144623f770000000000000000 40070 64fc0000000100000000000004756e6963026e6c00000f0001 64fc8000000100000002000204756e6963026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 40071 0000000070024000e70c0000020405b401010402 000080010000000000000000 40072 0d700000000100000000000003777777086e65646c696e7578026e6c0000010001 0d708000000100000003000303777777086e65646c696e7578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02d00010001000151800004d5ef87d2c03f00010001000151800004d5ef87d3c05100010001000151800004d5ef8005 40073 b7f886b150114192e86f0000000000000000 40074 4fae000000010000000000000377777703377570026e6c0000010001 4fae800000010000000200000377777703377570026e6c0000010001c01000020001000151800015036e73310b736974656c7574696f6e7303636f6d00c01000020001000151800006036e7332c02c 40075 b7f7f961501044623f760000000000000000 40076 3aa50000000100000000000006776468303131066e7434616c6c026e6c0000010001 3aa58000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 40077 b7f886b250104192e86e0000000000000000 40078 b7f92d3c501044702a1b0000000000000000 b7f9ad340000000000000000 40079 9f420000000100000000000009616e746971626f6f6b026e6c0000010001 9f428000000100000002000209616e746971626f6f6b026e6c0000010001c00c0002000100015180000a036e7331036e7873c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 40080 b7f92d3c5018447004fc00000091ef00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000 b7f9ad340000000000000000 40081 b7f67a16501044623e640000000000000000 b7f6fa140000000000000000 40082 c54900000001000000000000036e7335046372696f026e6c0000010001 c54980000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40083 ed8f00000001000000000000036e7336046372696f026e6c0000010001 ed8f80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40084 70e000000001000000000000037777770764656c61727565026e6c0000010001 70e080000001000000020000037777770764656c61727565026e6c0000010001c0100002000100015180000f036e73310561676e2d65036e657400c01000020001000151800006036e7332c030 40085 b7f92d4a5011446229870000000000000000 b7f9ad440000000000000000 40086 39310000000100000000000004616e73310774697363616c69026e6c0000010001 39318000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 40087 d5640000000100000000000004616e73320774697363616c69026e6c0000010001 d5648000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 40088 ab43000000010000000000000567656e6965026e6c0000010001 ab43800000010000000200020567656e6965026e6c0000010001c00c0002000100015180000d026e73076e65746c616e64c012c00c00020001000151800006036e7332c029c02600010001000151800004d9aa2042c03f00010001000151800004d9aa2c06 40089 371000100001000000000001026e73076e656473746174026e6c00002600010000290800000080000000 371080000001000000020003026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 40090 7e4300000001000000000000037777770763636e77696a6b026e6c0000010001 7e4380000001000000020002037777770763636e77696a6b026e6c0000010001c0100002000100015180000c026e7306787334616c6cc018c01000020001000151800006036e7332c02fc02c00010001000151800004c26d0642c04400010001000151800004c26d0963 40091 ddfc00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 ddfc80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 40092 a29d00000001000000000000055f6c646170045f746370026463065f6d736463730c73746566667973776f726c64026e6c0000060001 a29d84030001000000010000055f6c646170045f746370026463065f6d736463730c73746566667973776f726c64026e6c0000060001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 40093 cde100100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 cde180000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 40094 b7f92d4b5010446229860000000000000000 b7f9ad440000000000000000 40095 f0580000000100000000000004646e7331057368656c6c026e6c0000010001 f0588000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 40096 332a28000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730764657661657274026e6c0000210001000002580019000000640058067365727665720764657661657274026e6c00 332aa8040000000000000000 40097 4da500000001000000000000026e73076e656473746174026e6c0000260001 4da580000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40098 163000000001000000000000026e73076e656473746174026e6c0000010001 163080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40099 8b1800000001000000000000036e7333076e656473746174026e6c0000010001 8b1880000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40100 1e290000000100000000000003777777076f6f726465656c026e6c0000010001 1e298000000100000003000203777777076f6f726465656c026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 40101 00000000700240001be000000204056401010402 000080010000000000000000 40102 588b00000001000000000000055f6c646170045f746370026463065f6d736463730c73746566667973776f726c64026e6c0000060001 588b84030001000000010000055f6c646170045f746370026463065f6d736463730c73746566667973776f726c64026e6c0000060001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 40103 169b00000001000000000000096a6f627365617263680c6d6f6e73746572626f617264026e6c0000010001 169b80000001000000030000096a6f627365617263680c6d6f6e73746572626f617264026e6c0000010001c0160002000100015180000e036e733104746d7077036e657400c01600020001000151800006036e7332c03bc01600020001000151800015056f73636172076d6f6e7374657202636f02756b00 40104 5f58000000010000000000000377777711617274737570706c69657361726e68656d026e6c0000010001 5f58800000010000000200020377777711617274737570706c69657361726e68656d026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c022c01000020001000151800006036e7332c03ac0360001000100015180000451113264c05200010001000151800004d5c42851 40105 ec8600000001000000000000037777770c6368696269676f74656e6b73026e6c0000010001 ec8680000001000000030003037777770c6368696269676f74656e6b73026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c01dc0100002000100015180000e0b6e616d6573657276657232c03dc0100002000100015180000e0b6e616d6573657276657233c03dc0310001000100015180000451ad2020c0550001000100015180000451ad2021c06f0001000100015180000452c049aa 40106 b7fa1fad501040b06fec0000000000000000 b7fa9fa40000000000000000 40107 b7fa1fad501840b0d4e20000008c8580000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403aff69403c50e900030000002d4e544c4d535350000100000097b200e007000700260000000600060020000000534552564552444556414552540000 b7fa9fa40000000000000000 40108 2c3128000001000000010000026e6c0000060001095f6b65726265726f73045f7463700b6b7376696e7465726e6574026e6c000021000100000258001e00000064005807697365727665720b6b7376696e7465726e6574026e6c00 2c31a8040000000000000000 40109 e63700000001000000000000047369676e06657472616465026e6c00000f0001 e63780000001000000020000047369676e06657472616465026e6c00000f0001c01100020001000151800011056c656d6f6e0571696e6970036e657400c01100020001000151800007046c696d65c032 40110 471428000001000000010000026e6c0000060001055f6c646170045f7463702435386163356133392d336533322d343135622d383130612d61643636343564393662336407646f6d61696e73065f6d736463730f646f7669616e75736b616e746f6f72026e6c0000210001000002580021000000640185065365727665720f646f7669616e75736b616e746f6f72026e6c00 4714a8040000000000000000 40111 9b5c28000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d7364637309446f6e4369726b656c026e6c000021000100000258001d00000064018508646f6e737276303109446f6e4369726b656c026e6c00 9b5ca8040000000000000000 40112 826000000001000000000000037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001 826080000001000000030003037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 40113 3c1428000001000000010000026e6c0000060001055f6c646170045f746370026463065f6d736463730c73746566667973776f726c64026e6c000021000100000258001e000000640185065345525645520c73746566667973776f726c64026e6c00 3c14a8040000000000000000 40114 ff8000000001000000000000036e733109666972737466696e64026e6c0000010001 ff8080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40115 b7fa1fbb501140a26f5d0000000000000000 b7fa9fb40000000000000000 40116 430d0000000100000000000003777777096865726d6974616765026e6c0000010001 430d8000000100000002000203777777096865726d6974616765026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01ac01000020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 40117 97af00000001000000000000036e733209666972737466696e64026e6c0000010001 97af80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40118 000000007002400033e800000204056401010402 000080010000000000000000 40119 00000000700240008d7c0000020405b401010402 000080010000000000000000 40120 f2be00000001000000000000036e73320868776967726f7570026e6c0000010001 f2be80000001000000020002036e73320868776967726f7570026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d973c15ac00c00010001000151800004d973c15b 40121 91e000000001000000000000036e73310868776967726f7570026e6c0000010001 91e080000001000000020002036e73310868776967726f7570026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c15ac03b00010001000151800004d973c15b 40122 00000000700240007e4f0000020405b401010402 000080010000000000000000 40123 b7fbf06c501044700d580000000000000000 40124 b7fbf06c501844706038000000917600000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000 40125 0000000070024000deaa0000020405b401010402 000080010000000000000000 40126 b7fa1fbc501040a26f5c0000000000000000 b7fa9fb40000000000000000 40127 44a90000000100000000000004616a6178066e696b686566026e6c0000010001 44a98000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 40128 500e00000001000000000000037777770e73747265656b6a6f75726e61616c026e6c0000010001 500e80000001000000020001037777770e73747265656b6a6f75726e61616c026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01fc01000020001000151800006036e7334c037c03300010001000151800004d5c401c0 40129 b7faff1c501040b0a8840000000000000000 40130 f36900000001000000000000036e7331056861636f6d026e6c0000010001 f36980000001000000020002036e7331056861636f6d026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4f12209c03800010001000151800004d590f009 40131 099600000001000000000000036e7332056861636f6d026e6c0000010001 099680000001000000020002036e7332056861636f6d026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d4f12209c00c00010001000151800004d590f009 40132 b72b00000001000000000000037777770b68657465706f65736a6573026e6c0000010001 b72b80000001000000020000037777770b68657465706f65736a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c033 40133 b7faff1c501840b0bffb0000008cd400000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403aff69403c50e900030000002d4e544c4d535350000100000097b200e007000700260000000600060020000000534552564552444556414552540000 40134 b7fbf07a501144620cc40000000000000000 40135 b7fcabad5010447042e90000000000000000 40136 8c4f00000001000000000000026e7308642d736572766572026e6c00001c0001 8c4f80000001000000020002026e7308642d736572766572026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c0001000100015180000451045c14c03a0001000100015180000451046032 40137 fec700000001000000000000026e7308642d736572766572026e6c0000260001 fec780000001000000020002026e7308642d736572766572026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c0001000100015180000451045c14c03a0001000100015180000451046032 40138 b7fd5e2d50104470f0c30000000000000000 b7fdde240000000000000000 40139 3e6800000001000000000000036e733208642d736572766572026e6c00001c0001 3e6880000001000000020002036e733208642d736572766572026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d0001000100015180000451045c14c00c0001000100015180000451046032 40140 36d100000001000000000000036e733208642d736572766572026e6c0000260001 36d180000001000000020002036e733208642d736572766572026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d0001000100015180000451045c14c00c0001000100015180000451046032 40141 b7fcabad50184470e1cf000000940d40000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd77403c4ef70003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 40142 b7fd5e2d50184470679700000091d300000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 b7fdde240000000000000000 40143 000000007002400001a90000020405b401010402 000080010000000000000000 40144 b7faff2a501140a2a7f50000000000000000 40145 b7fbf07b501044620cc30000000000000000 40146 049b00000001000000000000036e733303696467026e6c00001c0001 049b80000001000000030003036e733303696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 40147 0000000070024000d5fd00000204056401010402 000080010000000000000000 40148 d49900000001000000000000036e733103696467026e6c00001c0001 d49980000001000000030003036e733103696467026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 40149 b51800000001000000000000036e733203696467026e6c00001c0001 b51880000001000000030003036e733203696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 40150 d8ad000000010000000000000762736d74702d3108636f6e6365707473026e6c0000010001 d8ad800000010000000200020762736d74702d3108636f6e6365707473026e6c0000010001c0140002000100015180001103646e730a636f6e63657074736661c01dc0140002000100015180000704646e7332c014c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e1c 40151 fe99000000010000000000000377777709646963746174757572026e6c0000010001 fe99800000010000000200000377777709646963746174757572026e6c0000010001c01000020001000151800019036e733710666c6178652d776562686f7374696e6702626500c01000020001000151800006036e7338c032 40152 b7fddb875010447096670000000000000000 40153 b7fddb8750184470a44800000091bc00000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000 40154 d56f00000001000000000000037777770c706f77657272616e67657273026e6c0000010001 d56f84030001000000010000037777770c706f77657272616e67657273026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40155 b7fcabbb5011446242520000000000000000 40156 b7faff2b501040a2a7f40000000000000000 40157 00000000700240005a9d0000020405b401010402 000080010000000000000000 40158 b7fe9a2d501040b0af850000000000000000 40159 b7fddb955011446295d30000000000000000 40160 b7fe9a2d501840b0787d0000008c2280000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403aff69403c50e900030000002d4e544c4d535350000100000097b200e007000700260000000600060020000000534552564552444556414552540000 40161 289800000001000000000000046d61696c0f6f6e656c696e65696e7465726e6574026e6c0000010001 289880000001000000030003046d61696c0f6f6e656c696e65696e7465726e6574026e6c0000010001c0110002000100015180000c036e7331053266617374c021c01100020001000151800006036e7332c039c01100020001000151800006036e7333c039c0350001000100015180000450f7c022c04d000100010001518000043e858122c05f000100010001518000045117eb22 40162 0000000070024000c2190000020405b401010402 000080010000000000000000 40163 b7fcabbc5010446242510000000000000000 40164 b332000000010000000000000477757a77026e6c0000010001 b332800000010000000200020477757a77026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 40165 b7ff23a450104470a73d0000000000000000 b7ffa3a30000000000000000 40166 b7fddb965010446295d20000000000000000 40167 81ab00000001000000000000095f6b65726265726f73045f746370026463065f6d7364637303636f6d026e6c0000060001 81ab84030001000000010000095f6b65726265726f73045f746370026463065f6d7364637303636f6d026e6c0000060001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 40168 b7fe9a3b501140a2aef60000000000000000 40169 b7ff23a45018447075a400000094dcc0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd78403c4ef80003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 b7ffa3a30000000000000000 40170 b7fd5e3b50114462f02f0000000000000000 b7fdde340000000000000000 40171 c6c8000000010000000000001553544556454c4557495350484f544f475241504859026e6c0000020001 c6c8840300010000000100001553544556454c4557495350484f544f475241504859026e6c0000020001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 40172 b7fff478501044703de50000000000000000 40173 0000000070024000ab080000020405b401010402 000080010000000000000000 40174 3fc30000000100000000000009616e746971626f6f6b026e6c0000010001 3fc38000000100000002000209616e746971626f6f6b026e6c0000010001c00c0002000100015180000a036e7331036e7873c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 40175 b7fff4785018447043c600000091c400000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afafd403c4c7d0003000000324e544c4d535350000100000097b200e00c000c0026000000060006002000000053455256455253544546465953574f524c440000 40176 b7fe9a3c501040a2aef50000000000000000 40177 b7ff23b250114462a6a60000000000000000 b7ffa3b30000000000000000 40178 b7fff486501144623d510000000000000000 40179 000000007002400093ce0000020405b401010402 000080010000000000000000 40180 b7fd5e3c50104462f02e0000000000000000 b7fdde340000000000000000 40181 2ee400000001000000000000037777770977616c6c7061706572026e6c0000010001 2ee480000001000000030003037777770977616c6c7061706572026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc01ac0100002000100015180000704646e7332c033c0100002000100015180000704646e7333c033c02e00010001000151800004d44fe803c04800010001000151800004c3f5c782c05b00010001000151800004d44ff303 40182 b8008be0501044708f6b0000000000000000 40183 b7fff487501044623d500000000000000000 40184 b8008be050184470c140000000911900000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 40185 b92b00000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637303636f6d026e6c0000060001 b92b84030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637303636f6d026e6c0000060001c04800060001000038400036026e730f646f6d61696e2d7265676973747279c0480a686f73746d6173746572c05f0bf1e540000070800000384000278d0000003840 40186 7ed20000000100000000000003777777087265676572696e67026e6c0000010001 7ed28000000100000003000303777777087265676572696e67026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 40187 b7ff23b350104462a6a50000000000000000 b7ffa3b30000000000000000 40188 9e050000000100000000000003777777087265676572696e67026e6c0000010001 9e058000000100000003000303777777087265676572696e67026e6c0000010001c0100002000100015180000e036e73310761737034616c6cc019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c1adf9c3c047000100010001518000043e70ec3cc05900010001000151800004c1ac0bae 40189 b8013f7f50104470c4910000000000000000 b801bf740000000000000000 40190 b8008bee501144628ed70000000000000000 40191 b8013f7f501844705a39000000941580000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd78403c4ef80003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 b801bf740000000000000000 40192 000000007002400087580000020405b401010402 000080010000000000000000 40193 bda800100001000000000001036e733503777873026e6c00000100010000290800000000000000 bda880000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 40194 b8013f8d50114462c3fa0000000000000000 b801bf840000000000000000 40195 64520000000100000000000003777777046e767377026e6c0000010001 64528000000100000002000203777777046e767377026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec015c01000020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 40196 358600000001000000000000037777770b6663686572656e7665656e026e6c0000010001 358684030001000000010000037777770b6663686572656e7665656e026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 40197 11730000000100000000000003777777126175746f6d617469736572696e6767696473026e6c0000010001 11738000000100000002000103777777126175746f6d617469736572696e6767696473026e6c0000010001c0100002000100015180000d026e7307616d6572636f6dc023c01000020001000151800006036e7331c03ac03700010001000151800004c2b2b20a 40198 1788000000010000000000000377777708736b79726164696f026e6c0000010001 1788800000010000000200010377777708736b79726164696f026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c019c04600010001000151800004c2860043 40199 b8013f8e50104462c3f90000000000000000 b801bf840000000000000000 40200 5e7800000001000000000000037777770f64656b6c65726b6361726176616e73026e6c0000010001 5e7880000001000000020000037777770f64656b6c65726b6361726176616e73026e6c0000010001c01000020001000151800012036e7331086974732d646e733303636f6d00c01000020001000151800006036e7332c038 40201 300e0000000100000000000006636861726973026e6c0000ff0001 300e8000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 40202 5181000000010000000000000c47454c4445524d414c53454e0c67656c6465726d616c73656e026e6c0000010001 5181800000010000000200020c47454c4445524d414c53454e0c67656c6465726d616c73656e026e6c0000010001c01900020001000151800005026e73c019c01900020001000151800006036e7332c019c03a00010001000151800004c143b9b5c04b00010001000151800004c143b9b6 40203 ded400000001000000000000036e733503777873026e6c0000010001 ded480000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 40204 b19a00000001000000000000037777770761656764656374026e6c0000010001 b19a80000001000000030003037777770761656764656374026e6c0000010001c01000020001000151800010036e733109736974656279746573c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004c2a55e5ac04800010001000151800004c356781cc05a000100010001518000043ec58016 40205 ac2900000001000000000000166865747a6f6e6e65687569736265656b62657267656e026e6c00000f0001 ac2980000001000000020000166865747a6f6e6e65687569736265656b62657267656e026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c042 40206 34ee00000001000000000000046d61696c096e65646572696e756d026e6c0000010001 34ee80000001000000020000046d61696c096e65646572696e756d026e6c0000010001c0110002000100015180000d026e730468736367036e657400c01100020001000151800006036e7332c032 40207 b708000000010000000000000233380233350236300236350a626c61636b686f6c657307656173796e6574026e6c0000010001 b708800000010000000200020233380233350236300236350a626c61636b686f6c657307656173796e6574026e6c0000010001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 40208 0eee000000010000000000000977616c6c70617065720c7665726b656572737061726b026e6c0000010001 0eee800000010000000300030977616c6c70617065720c7665726b656572737061726b026e6c0000010001c0160002000100015180000e04646e733106626c6978656dc023c0160002000100015180000704646e7332c03cc0160002000100015180000704646e7333c03cc03700010001000151800004d44fe803c05100010001000151800004c3f5c782c06400010001000151800004d44ff303 40209 97a400000001000000000000056e65666974026e6c0000010001 97a480000001000000020000056e65666974026e6c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02a 40210 b8008bef501044628ed60000000000000000 40211 b80237e650104470bfb30000000000000000 b802b7e40000000000000000 40212 b80237e650184470d108000000913980000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403afd47403c4ec70003000000324e544c4d535350000100000097b208e00b000b00270000000700070020000000495345525645524b5356494e5445524e45540000 b802b7e40000000000000000 40213 04ca000000010000000000000377777707746170746f6573026e6c0000010001 04ca800000010000000200020377777707746170746f6573026e6c0000010001c0100002000100015180000a036e733103686978c018c01000020001000151800006036e7332c030c02c00010001000151800004d5a0da0ac0420001000100015180000451112ec3 40214 b80237f450114462bf1f0000000000000000 b802b7f40000000000000000 40215 80dd0000000100000000000005646e732d32056c61646f74026e6c0000010001 80dd8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40216 b80237f550104462bf1e0000000000000000 b802b7f40000000000000000 40217 85e8000000010000000000000a736f6e6572616d61696c026e6c00001c0001 85e8800000010000000200000a736f6e6572616d61696c026e6c00001c0001c00c00020001000151800011036e73310774647364617461036e657400c00c00020001000151800006036e7332c02f 40218 d10400000001000000000000056e69627261026e6c00000f0001 d10480000001000000020001056e69627261026e6c00000f0001c00c0002000100015180000a04626f6261026778c012c00c0002000100015180000b026e73026e6c036e657400c02600010001000151800004c3c1590b 40219 df00000000010000000000000377777706696c6f676963026e6c0000010001 df00800000010000000200020377777706696c6f676963026e6c0000010001c0100002000100015180000b036e73310476646e73c017c01000020001000151800006036e7332c02fc02b000100010001518000045117f60bc042000100010001518000045117f60c 40220 fce900000001000000000000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d73646373065345525645520c73746566667973776f726c64026e6c0000210001 fce984030001000000010000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d73646373065345525645520c73746566667973776f726c64026e6c0000210001c05200060001000038400036026e730f646f6d61696e2d7265676973747279c0520a686f73746d6173746572c0690bf1e540000070800000384000278d0000003840 40221 1ece00000001000000000000036e733503777873026e6c0000010001 1ece80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 40222 411b00000001000000000000066675726f7265077072657669657706776562746963026e6c0000010001 411b80000001000000020001066675726f7265077072657669657706776562746963026e6c0000010001c01b00020001000151800005026e73c01bc01b0002000100015180000b026e73056963617474c022c03600010001000151800004c14e1e2b 40223 6be800000001000000000000067a7376737472026e6c0000010001 6be884030001000000010000067a7376737472026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 40224 cef500000001000000000000037777770668656572656e026e6c0000010001 cef580000001000000020002037777770668656572656e026e6c0000010001c01000020001000151800010036e73310973746172746d657570c017c01000020001000151800006036e7332c02fc02b00010001000151800004d4cb1d01c04700010001000151800004d4cb1d02 40225 4b7e00000001000000000000037777770d67727577656c696a6b6d6f6f69026e6c0000010001 4b7e80000001000000020002037777770d67727577656c696a6b6d6f6f69026e6c0000010001c0100002000100015180001204646e73310a6e65746d617374657273c01ec0100002000100015180000704646e7332c037c0320001000100015180000451044203c05000010001000151800004510442c9 40226 a7ff00000001000000000000046163616c026e6c00000f0001 a7ff80000001000000020000046163616c026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c029 40227 ea42000000010000000000000464626277026e6c00000f0001 ea42800000010000000200000464626277026e6c00000f0001c00c00020001000151800013036e7331026e6c0669676e697465036e657400c00c00020001000151800006036e7332c029 40228 e4fe00000001000000000000036e7331046372696f026e6c0000010001 e4fe80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40229 359300000001000000000000036e7332046372696f026e6c0000010001 359380000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40230 e97c00000001000000000000037777770d666f727470616e6e657264656e026e6c0000010001 e97c80000001000000020000037777770d666f727470616e6e657264656e026e6c0000010001c01000020001000151800010036e733109666972737466696e64c01ec01000020001000151800006036e7332c036 40231 6d0200000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 6d0280000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40232 0d9c00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 0d9c80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40233 4e2200000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 4e2280000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40234 860f00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 860f80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40235 18ae00000001000000000000026e7303696e67026e6c0000010001 18ae80000001000000020002026e7303696e67026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc0270001000100015180000491dd19c2c0390001000100015180000491dd5dc2 40236 f71d0000000100000000000007617564696f786c026e6c00000f0001 f71d8000000100000002000007617564696f786c026e6c00000f0001c00c0002000100015180001506617574683034026e73026465027575036e657400c00c0002000100015180000906617574683534c02f 40237 267200000001000000000000036e73310762617365776562026e6c0000010001 267280000001000000020002036e73310762617365776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d535d035c03a00010001000151800004d535d034 40238 099200000001000000000000036e73320762617365776562026e6c0000010001 099280000001000000020002036e73320762617365776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d535d035c00c00010001000151800004d535d034 40239 04c900000001000000000000036e73310762617365776562026e6c0000260001 04c980000001000000020002036e73310762617365776562026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d535d035c03a00010001000151800004d535d034 40240 dedd00000001000000000000036e73320762617365776562026e6c0000260001 dedd80000001000000020002036e73320762617365776562026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d535d035c00c00010001000151800004d535d034 40241 15ed000000010000000000000377777709736578687569736a65026e6c0000010001 15ed800000010000000300000377777709736578687569736a65026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036c0100002000100015180000a076e73686f737433c036 40242 81fb00000001000000000000037777770f7374617274706167696e6161746a65026e6c0000010001 81fb80000001000000030002037777770f7374617274706167696e6161746a65026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c020c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c038c034000100010001518000045054e055c06d00010001000151800004d4ccc655 40243 a0f600000001000000000000026e73076e656473746174026e6c00001c0001 a0f680000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40244 cc7800000001000000000000026e73076e656473746174026e6c0000260001 cc7880000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40245 d68200000001000000000000036e7332076e656473746174026e6c0000010001 d68280000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40246 accd00000001000000000000036e7332076e656473746174026e6c00001c0001 accd80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40247 da9f00000001000000000000036e7332076e656473746174026e6c0000260001 da9f80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40248 179f00000001000000000000036e7333076e656473746174026e6c00001c0001 179f80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40249 423900000001000000000000036e7333076e656473746174026e6c0000260001 423980000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40250 b2c500000001000000000000036e7334076e656473746174026e6c0000010001 b2c580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40251 b60300000001000000000000036e7334076e656473746174026e6c00001c0001 b60380000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40252 b71f00000001000000000000036e7334076e656473746174026e6c0000260001 b71f80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40253 87220000000100000000000003777777056c6572656e026e6c0000010001 87228000000100000002000203777777056c6572656e026e6c0000010001c0100002000100015180000a036e7331036e7873c016c01000020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 40254 8f6d0000000100000000000009636974792d68616c6c026e6c00000f0001 8f6d8000000100000002000209636974792d68616c6c026e6c00000f0001c00c00020001000151800011036e73310a6f6e6c696e6534796f75c016c00c00020001000151800006036e7332c02ec02a000100010001518000043e3a205bc047000100010001518000043e3a205c 40255 0f600000000100000000000006636861726973026e6c00000f0001 0f608000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 40256 06c100000001000000000000036e73310c666173747365727665723138026e6c0000010001 06c180000001000000020002036e73310c666173747365727665723138026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000442a4fa76c03f0001000100015180000442a4fa7f 40257 501d00000001000000000000036e73320c666173747365727665723138026e6c0000010001 501d80000001000000020002036e73320c666173747365727665723138026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0310001000100015180000442a4fa76c00c0001000100015180000442a4fa7f 40258 3c9100000001000000000000036e73310c666173747365727665723138026e6c0000260001 3c9180000001000000020002036e73310c666173747365727665723138026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000442a4fa76c03f0001000100015180000442a4fa7f 40259 2a5800000001000000000000036e73320c666173747365727665723138026e6c0000260001 2a5880000001000000020002036e73320c666173747365727665723138026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0310001000100015180000442a4fa76c00c0001000100015180000442a4fa7f 40260 abf200000001000000000000037777770f70656e73696f656e696e6265656c64026e6c0000010001 abf280000001000000020000037777770f70656e73696f656e696e6265656c64026e6c0000010001c01000020001000151800014026e730b686f6c6c616e64686f7374036e657400c01000020001000151800006036e7332c037 40261 ad4e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 ad4e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40262 2b59000000010000000000000773656375746f720773656c77657264026e6c0000010001 2b59800000010000000300020773656375746f720773656c77657264026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c01400020001000151800011036e733107657873696c6961036e657400c03000010001000151800004817d6539c04100010001000151800004817d667e 40263 31400000000100000000000009652d6c756e61746963026e6c0000010001 31408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40264 3a750000000100000000000008796f757273697465026e6c0000010001 3a758000000100000003000308796f757273697465026e6c0000010001c00c00020001000151800010036e733109736974656279746573c015c00c00020001000151800006036e7332c02dc00c00020001000151800006036e7333c02dc02900010001000151800004c2a55e5ac04500010001000151800004c356781cc057000100010001518000043ec58016 40265 f7110000000100000000000006787334616c6c026e6c00000f0001 f7118000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 40266 595900000001000000000000037777770a6e6374686573746f7265026e6c0000010001 595980000001000000020002037777770a6e6374686573746f7265026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c01bc01000020001000151800006036e7332c032c02f00010001000151800004d453c005c04d00010001000151800004d453c006 40267 824e0000000100000000000005646e732d31056c61646f74026e6c0000010001 824e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40268 671200000001000000000000037330310a6f6e6c696e6534796f75026e6c0000010001 671280000001000000020002037330310a6f6e6c696e6534796f75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02f000100010001518000043e3a205bc041000100010001518000043e3a205c 40269 386d000000010000000000000e7374726f6d6d652d6d616473656e026e6c0000010001 386d800000010000000300030e7374726f6d6d652d6d616473656e026e6c0000010001c00c0002000100015180000f036e7331086e6f766178657373c01bc00c00020001000151800006036e7332c033c00c00020001000151800006036e7333c033c02f00010001000151800004d5c98015c04a00010001000151800004d5c9bf12c05c00010001000151800004d5ef9c26 40270 fe1100000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 fe1180000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 40271 566400000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 566480000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 40272 06a0000000010000000000000377777709626f6572696e6e656e026e6c0000010001 06a0800000010000000200000377777709626f6572696e6e656e026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 40273 e6470000000100000000000003777777046e6b7666026e6c0000010001 e6478000000100000002000203777777046e6b7666026e6c0000010001c01000020001000151800010036e733109756e69736572766572c015c01000020001000151800006036e7332c02dc02900010001000151800004c3454b03c04500010001000151800004d119a2fa 40274 c0e500000001000000000000037777770f7465737472616b6574657874696c65026e6c0000010001 c0e580000001000000030001037777770f7465737472616b6574657874696c65026e6c0000010001c0100002000100015180000e026e7308767575727765726bc020c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c052c034000100010001518000043efa0202 40275 54950000000100000000000003777777046374637a026e6c0000010001 54958000000100000002000203777777046374637a026e6c0000010001c0100002000100015180000c026e7306787334616c6cc015c01000020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 40276 170b0000000100000000000009676f72696e6368656d026e6c00000f0001 170b8000000100000002000009676f72696e6368656d026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02e 40277 d3eb00000001000000000000037777770e72696f6f6c696e7370656b746965026e6c0000010001 d3eb80000001000000020000037777770e72696f6f6c696e7370656b746965026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 40278 69700000000100000000000005776b746873026e6c00000f0001 69708000000100000002000205776b746873026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 40279 063400000001000000000000056d63636f7908696e6e6f76697479026e6c00001c0001 063480000001000000020002056d63636f7908696e6e6f76697479026e6c00001c0001c01200020001000151800002c00cc0120002000100015180000e036e733007656173796e6574c01bc00c000100010001518000043ec071b2c03d00010001000151800004c2a55e01 40280 ddfb00000001000000000000056d63636f7908696e6e6f76697479026e6c0000260001 ddfb80000001000000020002056d63636f7908696e6e6f76697479026e6c0000260001c01200020001000151800002c00cc0120002000100015180000e036e733007656173796e6574c01bc00c000100010001518000043ec071b2c03d00010001000151800004c2a55e01 40281 05d900000001000000000000037777770a64726f6d656461726973026e6c0000010001 05d980000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 40282 05da00000001000000000000037777770a64726f6d656461726973026e6c0000010001 05da80000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 40283 ef7b0000000100000000000005646e732d31056c61646f74026e6c0000010001 ef7b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40284 f6dd0000000100000000000005646e732d32056c61646f74026e6c0000010001 f6dd8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40285 ab2a00000001000000000000036e7331036e6f62026e6c0000010001 ab2a80000001000000020002036e7331036e6f62026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004504f22f6c03600010001000151800004504f22fa 40286 fded000000010000000000000377777710737469656e73747261626f6e6e656d61026e6c0000010001 fded800000010000000200000377777710737469656e73747261626f6e6e656d61026e6c0000010001c01000020001000151800013036e73310368617306686f7374697402626500c0100002000100015180000a036e7332036c7578c03d 40287 aad000000001000000000000036e7332036e6f62026e6c0000010001 aad080000001000000020002036e7332036e6f62026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004504f22f6c00c00010001000151800004504f22fa 40288 2dd40000000100000000000005646e732d31056c61646f74026e6c0000010001 2dd48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40289 5a9100000001000000000000036e7331036e6f62026e6c0000260001 5a9180000001000000020002036e7331036e6f62026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004504f22f6c03600010001000151800004504f22fa 40290 cbc10000000100000000000004686f6d65036e6c64066368656c6c6f026e6c0000010001 cbc18000000100000003000304686f6d65036e6c64066368656c6c6f026e6c0000010001c01500020001000151800007046e733031c015c01500020001000151800007046e733032c015c0150002000100015180000a036e733103757063c01cc03000010001000151800004d4534482c04300010001000151800004d4534483c05600010001000151800004d48e1c42 40291 df1e00000001000000000000036e7332036e6f62026e6c0000260001 df1e80000001000000020002036e7332036e6f62026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004504f22f6c00c00010001000151800004504f22fa 40292 f3940000000100000000000005646e732d31056c61646f74026e6c0000010001 f3948000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40293 f5de0000000100000000000005646e732d32056c61646f74026e6c0000010001 f5de8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40294 b926000000010000000000001276726f656476726f7577656e7363686f6f6c026e6c00000f0001 b926800000010000000200001276726f656476726f7577656e7363686f6f6c026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c039 40295 0ee900000001000000000000026e6c0000060001 0ee984000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 40296 0826000000010000000000000c3231372d31392d31382d32380364736c0863616d627269756d026e6c0000010001 0826800000010000000200020c3231372d31392d31382d32380364736c0863616d627269756d026e6c0000010001c01d00020001000151800006036e7331c01dc01d00020001000151800006036e7332c01dc03a00010001000151800004d9131082c04c00010001000151800004d5efb202 40297 80d20000000100000000000008767269656e64656e026e6c00000f0001 80d28000000100000002000008767269656e64656e026e6c00000f0001c00c0002000100015180000e026e7305736d617368036e657400c00c00020001000151800006036e7332c02c 40298 f195000000010000000000000c7061726475732d6c617275730773747564656e7407757477656e7465026e6c0000010001 f195800000010000000300030c7061726475732d6c617275730773747564656e7407757477656e7465026e6c0000010001c02100020001000151800006036e7331c021c02100020001000151800006036e7332c021c02100020001000151800006036e7333c021c03d0001000100015180000482590102c04f0001000100015180000482590103c06100010001000151800004c0571113 40299 0ddf00000001000000000000067669617765620b7669616e6574776f726b73026e6c0000010001 0ddf80000001000000020002067669617765620b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 40300 c1f1000000010000000000000964696c6c6577696a6e026e6c00000f0001 c1f1800000010000000200000964696c6c6577696a6e026e6c00000f0001c00c00020001000151800014036e73310a676c617373686f757365036e657400c00c00020001000151800006036e7332c02e 40301 ef6f00000001000000000000126d616e696665737461726f7474657264616d026e6c00000f0001 ef6f80000001000000020001126d616e696665737461726f7474657264616d026e6c00000f0001c00c0002000100015180000a036e733303777873c01fc00c00020001000151800006036e7334c037c04900010001000151800004d5ef9a65 40302 2dd50000000100000000000005646e732d32056c61646f74026e6c0000010001 2dd58000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40303 f2510000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 f2518000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 40304 2e3c000000010000000000000a6d61696c66696c746572046379736f026e6c0000010001 2e3c800000010000000200000a6d61696c66696c746572046379736f026e6c0000010001c01700020001000151800010026e73076379736f6e657403636f6d00c01700020001000151800006036e7331c033 40305 8dd7000000010000000000000233380233350236300236350a626c61636b686f6c657307656173796e6574026e6c0000050001 8dd7800000010000000200020233380233350236300236350a626c61636b686f6c657307656173796e6574026e6c0000050001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 40306 fbd200000001000000000000037777770a6f70696e69656c616e64026e6c0000010001 fbd280000001000000020002037777770a6f70696e69656c616e64026e6c0000010001c01000020001000151800009026e7303626f73c01bc01000020001000151800006036e7332c032c02f00010001000151800004d5881e43c04400010001000151800004d5139203 40307 de7700000001000000000000056d61696c320c726f6e63616c6c692d626f7a026e6c026e6c0000010001 de7784030001000000010000056d61696c320c726f6e63616c6c692d626f7a026e6c026e6c0000010001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 40308 78e90000000100000000000007656c656d656e7406787334616c6c026e6c0000010001 78e98000000100000003000207656c656d656e7406787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 40309 e71300000001000000000000066764732d6473026e6c00000f0001 e71380000001000000020002066764732d6473026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c013c00c00020001000151800006036e7332c02bc02700010001000151800004d43d0f08c04500010001000151800004d43d19e2 40310 9c7e0000000100000000000005646e732d31056c61646f74026e6c0000010001 9c7e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40311 95310000000100000000000005646e732d32056c61646f74026e6c0000010001 95318000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40312 c8a00000000100000000000005646e732d31056c61646f74026e6c0000010001 c8a08000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40313 84410000000100000000000005646e732d32056c61646f74026e6c0000010001 84418000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40314 786900000001000000000000037777770b6d656d6f72796769667473026e6c0000010001 786980000001000000020002037777770b6d656d6f72796769667473026e6c0000010001c0100002000100015180000e036e733207686f7374696e67c01cc01000020001000151800006036e7331c034c030000100010001518000043e818b02c04a000100010001518000043e818b01 40315 7b0a000000010000000000000377777703676963026e6c0000010001 7b0a800000010000000300030377777703676963026e6c0000010001c01000020001000151800010036e733109657863657074696f6ec014c01000020001000151800006036e7332c02cc01000020001000151800006036e7333c02cc02800010001000151800004d5c9a38cc04400010001000151800004d5c9a38dc05600010001000151800004d5c9af03 40316 05d500000001000000000000037777770a64726f6d656461726973026e6c0000010001 05d580000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 40317 5fc000000001000000000000037777770c7473656164627275696e6a61026e6c0000010001 5fc080000001000000020000037777770c7473656164627275696e6a61026e6c0000010001c0100002000100015180000c026e7306766576696461c01dc01000020001000151800006036e7332c034 40318 6a32000000010000000000000377777705656c6d6172026e6c0000010001 6a32800000010000000300030377777705656c6d6172026e6c0000010001c01000020001000151800012047072693103646e73067073696e6574c016c010000200010001518000070470726932c02fc010000200010001518000070470726933c02fc02a000100010001518000049a0ff9a6c048000100010001518000049a0ff9aac05b000100010001518000049a0ff9ae 40319 535500000001000000000000086261726d61746f6e026e6c0000010001 535580000001000000020002086261726d61746f6e026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 40320 dd3f00000001000000000000037777770e67616c61676865726575726f7065026e6c0000010001 dd3f84030001000000010000037777770e67616c61676865726575726f7065026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 40321 93440000000100000000000003706f70096f6c796d7075733538026e6c0000010001 93448000000100000002000003706f70096f6c796d7075733538026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 40322 d69700000001000000000000026e7304696d636f026e6c0000010001 d69780000001000000020001026e7304696d636f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800013036e7332097669727475616c787303636f6d00c00c000100010001518000043e81810a 40323 23420000000100000000000003706f70096f6c796d7075733538026e6c0000010001 23428000000100000002000003706f70096f6c796d7075733538026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 40324 4827000000010000000000000377777708676c61736265656b026e6c0000010001 4827800000010000000300020377777708676c61736265656b026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 40325 2c4100000001000000000000037777770b74696c746563686e69656b026e6c0000010001 2c4180000001000000020002037777770b74696c746563686e69656b026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 40326 925900100001000000000001036e733203757063026e6c00000100010000290800000080000000 925980000001000000030004036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c01410000291000000000000000 40327 0fb00000000100000000000007766462636f6d70026e6c00001c0001 0fb08000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 40328 d1890000000100000000000003777777086f63636173696f6e026e6c0000010001 d1898000000100000002000103777777086f63636173696f6e026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c019c01000020001000151800011036e7332076e6564636f6d70036f726700c02d00010001000151800004c3c1a80d 40329 f48e00100001000000000001036e733203757063026e6c00000100010000290800000080000000 f48e80000001000000030004036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c01410000291000000000000000 40330 80e40000000100000000000005646e732d32056c61646f74026e6c0000010001 80e48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40331 21f4000000010000000000000664756379636f026e6c0000010001 21f4800000010000000200020664756379636f026e6c0000010001c00c00020001000151800010036e733109686f7374696e67786cc013c00c00020001000151800006036e7332c02bc027000100010001518000045054e504c043000100010001518000043e94a314 40332 267a0000000100000000000003667331056c76706161026e6c0000060001 267a8000000100000002000203667331056c76706161026e6c0000060001c0100002000100015180000c036e73310573796e7267c016c01000020001000151800006036e7332c02ec02a0001000100015180000452c04b0bc0420001000100015180000452c04b0c 40333 88bf0000000100000000000008706332312d30353703727476036e6f73026e6c0000010001 88bf8000000100000002000208706332312d30353703727476036e6f73026e6c0000010001c01900020001000151800010066d696e6e6965066f6d726f6570c01dc0190002000100015180000805726f62696ec038c03100010001000151800004913a1e04c04d00010001000151800004913a1a34 40334 04640000000100000000000008747269746f6e31310761626e616d726f026e6c0000010001 04648000000100000002000208747269746f6e31310761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c0150002000100015180000b0870686f626f733032c015c03100010001000151800004a7cac30bc04800010001000151800004a7cac30c 40335 9fa900000001000000000000026e7308767575727765726b026e6c0000260001 9fa980000001000000030001026e7308767575727765726b026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 40336 30080000000100000000000004706f703308686f737468696572026e6c0000010001 30088000000100000002000204706f703308686f737468696572026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02e00010001000151800004d5efb51fc03f00010001000151800004d5efb520 40337 99c10000000100000000000004706f703308686f737468696572026e6c0000010001 99c18000000100000002000204706f703308686f737468696572026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02e00010001000151800004d5efb51fc03f00010001000151800004d5efb520 40338 f85000000001000000000000076173747265616d026e6c0000ff0001 f85080000001000000020002076173747265616d026e6c0000ff0001c00c0002000100015180000e08706f7765722d6133026133c014c00c0002000100015180000c09706f7765722d697078c031c0280001000100015180000451113b42c04200010001000151800004d5ab40e6 40339 d8fd00000001000000000000024e530348414e026e6c0000010001 d8fd80000001000000020002024e530348414e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00c00010001000151800004914a670ac03500010001000151800004c0576a65 40340 61c6000000010000000000000a616476657274697365720d73696d70656c636f6e74656e74026e6c0000010001 61c6800000010000000300030a616476657274697365720d73696d70656c636f6e74656e74026e6c0000010001c0170002000100015180000c036e7331056d61786573c025c01700020001000151800006036e7332c03dc01700020001000151800006036e7333c03dc039000100010001518000045045402ec051000100010001518000045045402fc063000100010001518000045045440a 40341 943a0000000100000000000003777777096d6172616e61746861026e6c0000010001 943a8000000100000003000203777777096d6172616e61746861026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 40342 662d0000000100000000000003646e730a636f6e63657074736661026e6c0000010001 662d8000000100000002000203646e730a636f6e63657074736661026e6c0000010001c01000020001000151800002c00cc0100002000100015180001004646e733208636f6e6365707473c01bc00c00010001000151800004d5c51c03c03d00010001000151800004d5c51e1c 40343 6a100000000100000000000004646e733208636f6e6365707473026e6c0000010001 6a108000000100000002000204646e733208636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac01100020001000151800002c00cc02e00010001000151800004d5c51c03c00c00010001000151800004d5c51e1c 40344 5ecf00000001000000000000037777770972746c6e6965757773026e6c0000010001 5ecf80000001000000020001037777770972746c6e6965757773026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c01ac01000020001000151800011036e733207636c742d756661036e657400c02e00010001000151800004c3c1ca77 40345 c5c7000000010000000000000e61646175746f2d667279736c616e026e6c0000010001 c5c7800000010000000200020e61646175746f2d667279736c616e026e6c0000010001c00c00020001000151800010036e7331097765622d776f726b73c01bc00c00020001000151800006036e7332c033c02f00010001000151800004d5f4b859c04b00010001000151800004d5f4b959 40346 2cb800000001000000000000086174617261786961026e6c0000010001 2cb880000001000000020000086174617261786961026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 40347 d6fd00000001000000000000026e7303666273026e6c0000010001 d6fd80000001000000020001026e7303666273026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d4cef21a 40348 fe5500000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373037777770b6f6267726f65736265656b026e6c0000210001 fe5580000001000000020000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373037777770b6f6267726f65736265656b026e6c0000210001c0440002000100015180000f036e73310561676e2d65036e657400c04400020001000151800006036e7332c068 40349 cec400000001000000000000026e7307696e746f756368026e6c0000010001 cec480000001000000030001026e7307696e746f756368026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010026e7307696e746f756368036e657400c00f00020001000151800007046e733031c03cc00c00010001000151800004d413c001 40350 39e8000000010000000000000377777707646967696d6d6f026e6c0000010001 39e8800000010000000300000377777707646967696d6d6f026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c032c0100002000100015180000805646e733132c032 40351 f04400000001000000000000026e730866656b61686f7374026e6c0000010001 f04480000001000000020002026e730866656b61686f7374026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5ef9f24c03a00010001000151800004c3405369 40352 cf1f00000001000000000000036e73320866656b61686f7374026e6c0000010001 cf1f80000001000000020002036e73320866656b61686f7374026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004d5ef9f24c00c00010001000151800004c3405369 40353 563c000000010000000000000377777703616e70026e6c0000010001 563c800000010000000200020377777703616e70026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02800010001000151800004c3511802c03900010001000151800004c3511869 40354 8b9500000001000000000000036e733206656d61746963026e6c0000010001 8b9580000001000000020002036e733206656d61746963026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b000100010001518000043e3a4042c00c000100010001518000043e3a4043 40355 96b800000001000000000000026e7306656d61746963026e6c0000010001 96b880000001000000020002026e7306656d61746963026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043e3a4042c038000100010001518000043e3a4043 40356 16fa00000001000000000000037777770762656c73746174026e6c0000010001 16fa80000001000000020000037777770762656c73746174026e6c0000010001c0100002000100015180000f036e73310669706f77657202626500c01000020001000151800006036e7332c030 40357 e29400000001000000000000037777770e7468657369676e666163746f7279026e6c0000010001 e29480000001000000020001037777770e7468657369676e666163746f7279026e6c0000010001c0100002000100015180000a036e733303777873c01fc01000020001000151800006036e7334c037c04900010001000151800004d5ef9a65 40358 727200000001000000000000036e73310a726564686f7374696e67026e6c00001c0001 727280000001000000020002036e73310a726564686f7374696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 40359 369d00000001000000000000036e73310a726564686f7374696e67026e6c0000260001 369d80000001000000020002036e73310a726564686f7374696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 40360 437c00000001000000000000036e73320a726564686f7374696e67026e6c00001c0001 437c80000001000000020002036e73320a726564686f7374696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa405 40361 0c5a000000010000000000000377777708736b79726164696f026e6c0000010001 0c5a800000010000000200010377777708736b79726164696f026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c019c04600010001000151800004c2860043 40362 5fa400000001000000000000116e616d6d616368696e656661627269656b026e6c0000010001 5fa480000001000000020002116e616d6d616368696e656661627269656b026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01ec00c00020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 40363 0ae600000001000000000000036e73320a726564686f7374696e67026e6c0000260001 0ae680000001000000020002036e73320a726564686f7374696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f00010001000151800004d5efa404c00c00010001000151800004d5efa405 40364 e0e1000000010000000000000b777777706f737462616e6b026e6c0000010001 e0e1800000010000000200020b777777706f737462616e6b026e6c0000010001c00c0002000100015180000a036e733103696e67c018c00c00020001000151800006036e7332c030c02c0001000100015180000491dd19c2c0420001000100015180000491dd5dc2 40365 c049000000010000000000000a656c656374726162656c026e6c0000010001 c049800000010000000200010a656c656374726162656c026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c02b00010001000151800004d535c463 40366 bbee00000001000000000000046d61696c11647269657373656e6175746f67726f6570026e6c0000010001 bbee80000001000000020000046d61696c11647269657373656e6175746f67726f6570026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c03e 40367 8c1800000001000000000000037777770b617564696f636f76657273026e6c0000010001 8c1880000001000000020000037777770b617564696f636f76657273026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 40368 4bf40000000100000000000003656773026e6c00000f0001 4bf48000000100000003000203656773026e6c00000f0001c00c0002000100015180000f036e73310870726f7365727665c010c00c00020001000151800012036e73320970726f2d736572766502626500c00c00020001000151800006036e7333c028c024000100010001518000045054e055c05d00010001000151800004d4ccc655 40369 2ec60000000100000000000003777777026131026e6c0000010001 2ec68000000100000002000203777777026131026e6c0000010001c0100002000100015180000e08706f7765722d6133026133c013c0100002000100015180000c09706f7765722d697078c030c0270001000100015180000451113b42c04100010001000151800004d5ab40e6 40370 237c000000010000000000000a736964657374726565740a6c656964656e756e6976026e6c0000010001 237c800000010000000300030a736964657374726565740a6c656964656e756e6976026e6c0000010001c0170002000100015180000b08736865726c6f636bc017c0170002000100015180000906776174736f6ec017c0170002000100015180000e036e733107737572666e6574c022c0360001000100015180000484e50806c04d0001000100015180000484e51602c06200010001000151800004c0576a65 40371 8d15000000010000000000000672756c7761790a6c656964656e756e6976026e6c0000010001 8d15800000010000000300030672756c7761790a6c656964656e756e6976026e6c0000010001c0130002000100015180000b08736865726c6f636bc013c0130002000100015180000906776174736f6ec013c0130002000100015180000e036e733107737572666e6574c01ec0320001000100015180000484e50806c0490001000100015180000484e51602c05e00010001000151800004c0576a65 40372 9ddc00000001000000000000036e733109666972737466696e64026e6c0000010001 9ddc80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40373 9890000000010000000000000461726f66026e6c0000010001 9890800000010000000200020461726f66026e6c0000010001c00c00020001000151800009036e7331026973c011c00c00020001000151800006036e7332c029c02500010001000151800004d5852102c03a00010001000151800004d5c41503 40374 b3b400000001000000000000036e733209666972737466696e64026e6c0000010001 b3b480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40375 ab8c00000001000000000000036e733203757063026e6c0000010001 ab8c80000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 40376 d5c600000001000000000000036e733203757063026e6c0000010001 d5c680000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 40377 eff800000001000000000000036e733207737570706f7274026e6c0000010001 eff880000001000000020002036e733207737570706f7274026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c00010001000151800004c372e7c8c03a00010001000151800004c372e6fe 40378 3b9100000001000000000000036e733407737570706f7274026e6c0000010001 3b9180000001000000020002036e733407737570706f7274026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe 40379 04d2000000010000000000000377777707746170746f6573026e6c0000010001 04d2800000010000000200020377777707746170746f6573026e6c0000010001c0100002000100015180000a036e733103686978c018c01000020001000151800006036e7332c030c02c00010001000151800004d5a0da0ac0420001000100015180000451112ec3 40380 37dc00000001000000000000037777770a77696e6465736865696d026e6c0000010001 37dc80000001000000020002037777770a77696e6465736865696d026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e036e733207737572666e6574c01bc02f00010001000151800004912ce410c04100010001000151800004c0572402 40381 694a00000001000000000000036e7332076e656473746174026e6c0000010001 694a80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40382 c19f00000001000000000000036e7334076e656473746174026e6c0000010001 c19f80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40383 cc9500000001000000000000047069637306736a65656d7a026e6c0000010001 cc9580000001000000020000047069637306736a65656d7a026e6c0000010001c01100020001000151800013026e730a6e61616d736572766572036e657400c01100020001000151800006036e7331c02f 40384 310f00000001000000000000086575726f72736367026e6c0000ff0001 310f80000001000000020002086575726f72736367026e6c0000ff0001c00c0002000100015180000e036e73310768756d616e2d69c015c00c00020001000151800006036e7332c02dc02900010001000151800004c1ad2884c04300010001000151800004c1ad2886 40385 292b0000000100000000000009652d6c756e61746963026e6c0000010001 292b8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40386 471728000001000000020000026e6c00000600012434313364303162302d313236312d343666622d623530352d393466323438343637646363065f6d736463730f646f7669616e75736b616e746f6f72026e6c00000500ff000000000000c0140005000100000258001b065365727665720f646f7669616e75736b616e746f6f72026e6c00 4717a8040000000000000000 40387 555900000001000000000000036e7333066f7264696e61026e6c0000010001 555980000001000000020001036e7333066f7264696e61026e6c0000010001c01000020001000151800006036e7332c010c0100002000100015180000d036e7332036b706e036e657400c02b00010001000151800004c297c1e9 40388 426b00000001000000000000036e7334066f7264696e61026e6c0000010001 426b80000001000000020001036e7334066f7264696e61026e6c0000010001c01000020001000151800006036e7332c010c0100002000100015180000d036e7332036b706e036e657400c02b00010001000151800004c297c1e9 40389 00000000700240006a560000020405b401010402 000080010000000000000000 40390 b39c00000001000000000000036e733109666972737466696e64026e6c0000010001 b39c80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40391 9ab600000001000000000000036e733209666972737466696e64026e6c0000010001 9ab680000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40392 b80679815010447061120000000000000000 b806f9840000000000000000 40393 b806798150184470b338000000945600000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 b806f9840000000000000000 40394 def600000001000000000000037777771162656573746163687469676c656b6b6572026e6c0000010001 def680000001000000020002037777771162656573746163687469676c656b6b6572026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac022c01000020001000151800006036e7332c03ac03600010001000151800004d5efa011c05100010001000151800004d5efa075 40395 c3010000000100000000000003326467026e6c00000f0001 c3018000000100000003000003326467026e6c00000f0001c00c0002000100015180000f036e73310570616e7361036e657400c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028 40396 93cf00000001000000000000037777770972696e67746f6e696f026e6c0000010001 93cf80000001000000020002037777770972696e67746f6e696f026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5efa404c04b00010001000151800004d5efa405 40397 b806798f50114462607b0000000000000000 b806f9840000000000000000 40398 00000000700240009e400000020405b401010402 000080010000000000000000 40399 e4730000000100000000000003777777076e6574706f6c6c026e6c0000010001 e4738000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 40400 01120000000100000000000009652d6c756e61746963026e6c0000010001 01128000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40401 b806799050104462607a0000000000000000 b806f9940000000000000000 40402 638b00000001000000000000036e733109666972737466696e64026e6c0000010001 638b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40403 53ae00000001000000000000036e733209666972737466696e64026e6c0000010001 53ae80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40404 b8070e5a5010447000230000000000000000 b8078e540000000000000000 40405 05d600000001000000000000037777770a64726f6d656461726973026e6c0000010001 05d680000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 40406 b8070e5a501844701a8a000000948ec0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 b8078e540000000000000000 40407 63680000000100000000000011647269657373656e6175746f67726f6570026e6c00001c0001 63688000000100000002000011647269657373656e6175746f67726f6570026e6c00001c0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c039 40408 548b001000010000000000010377777707747970686f6e65026e6c00000100010000290800000000000000 548b800000010000000200030377777707747970686f6e65026e6c0000010001c0100002000100015180000a036e733103647768c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efb308c04200010001000151800004d5efb3030000291000000000000000 40409 92c100000001000000000000037777770a7765706469657a696a6e026e6c0000010001 92c180000001000000030000037777770a7765706469657a696a6e026e6c0000010001c01000020001000151800011036e7331087072696f7277656202626500c01000020001000151800006036e7332c033c01000020001000151800006036e7333c033 40410 d25f000000010000000000000377777707747970686f6e65026e6c0000010001 d25f800000010000000200020377777707747970686f6e65026e6c0000010001c0100002000100015180000a036e733103647768c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efb308c04200010001000151800004d5efb303 40411 b8070e6850114462ff8b0000000000000000 b8078e640000000000000000 40412 00000000700240009a4a0000020405b401010402 000080010000000000000000 40413 ce4f000000010000000000000b6d756c6465726f6264616d026e6c0000010001 ce4f800000010000000300030b6d756c6465726f6264616d026e6c0000010001c00c0002000100015180000e076e73617574683103626974c018c00c0002000100015180000a076e736175746832c034c00c0002000100015180000a076e736175746833c034c02c00010001000151800004d5880c33c04600010001000151800004d5880c3bc05c00010001000151800004d4ccc00b 40414 2262000000010000000000000f6172702d656c656374726f6e696373026e6c00001c0001 2262800000010000000200000f6172702d656c656374726f6e696373026e6c00001c0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c036 40415 e99800000001000000000000037777770c6b69727374656e726176656e026e6c0000010001 e99880000001000000030002037777770c6b69727374656e726176656e026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 40416 b8070e6950104462ff8a0000000000000000 b8078e640000000000000000 40417 b807ad57501044705d2f0000000000000000 40418 0f2700000001000000000000126d757365756d6865746b7275697468756973026e6c00000f0001 0f2780000001000000030002126d757365756d6865746b7275697468756973026e6c00000f0001c00c00020001000151800016036e73310f732d686572746f67656e626f736368c01fc00c00020001000151800006036e7332c037c00c0002000100015180000d036e7332036b706e036e657400c03300010001000151800004c29725e3c05500010001000151800004c29725ec 40419 09d60000000100000000000009652d6c756e61746963026e6c0000010001 09d68000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40420 b807ad5750184470d616000000943040000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 40421 1d94000000010000000000000670726f646973056e76776d6e026e6c0000010001 1d94800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 40422 6dcb00000001000000000000036e733207737570706f7274026e6c0000010001 6dcb80000001000000020002036e733207737570706f7274026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c00010001000151800004c372e7c8c03a00010001000151800004c372e6fe 40423 09fb00000001000000000000036e733109666972737466696e64026e6c0000010001 09fb80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40424 405e00000001000000000000036e733407737570706f7274026e6c0000010001 405e80000001000000020002036e733407737570706f7274026e6c0000010001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe 40425 4aff00000001000000000000036e733209666972737466696e64026e6c0000010001 4aff80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40426 8d21000000010000000000000377777706787334616c6c026e6c0000010001 8d21800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 40427 d3700000000100000000000003616f6c026e6c00000f0001 d3708000000100000002000003616f6c026e6c00000f0001c00c0002000100015180001306646e732d3031026e7303616f6c03636f6d00c00c0002000100015180000906646e732d3032c02b 40428 b807ad65501144625c980000000000000000 40429 b807ad66501044625c970000000000000000 40430 4e620000000100000000000008616473657276657206776562616473026e6c0000010001 4e628000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 40431 3fa900000001000000000000056572696b73026e6c00000f0001 3fa980000001000000020000056572696b73026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c012c00c0002000100015180000704686e7331c02b 40432 760000000001000000000000037777770e76617374676f65646e6965757773026e6c0000010001 760080000001000000030001037777770e76617374676f65646e6965757773026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01fc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c051c033000100010001518000043efa0202 40433 4d1f000000010000000000000c6b756e737473746f6666656e026e6c00000f0001 4d1f800000010000000200000c6b756e737473746f6666656e026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c033 40434 406c000000010000000000000670696361726403647376026e6c0000010001 406c800000010000000200020670696361726403647376026e6c0000010001c0130002000100015180000f036e733108696e7465726d6178c017c01300020001000151800006036e7332c02fc02b00010001000151800004505fa002c04600010001000151800004505fac02 40435 3ede0000000100000000000005646e732d31056c61646f74026e6c0000010001 3ede8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40436 a9b70000000100000000000005646e732d32056c61646f74026e6c0000010001 a9b78000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40437 edc400100001000000000001046168626c02626c06787334616c6c026e6c00000100010000290800000000000000 edc480000001000000030003046168626c02626c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d09630000291000000000000000 40438 feeb00100001000000000001046168626c02626c06787334616c6c026e6c00002600010000290800000000000000 feeb80000001000000030003046168626c02626c06787334616c6c026e6c0000260001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d09630000291000000000000000 40439 806800000001000000000000077363686f6c303109686f6f67657a616e640b6b656e6e696e69736e6574026e6c0000010001 806884030001000000010000077363686f6c303109686f6f67657a616e640b6b656e6e696e69736e6574026e6c0000010001c02a00060001000038400036026e730f646f6d61696e2d7265676973747279c02a0a686f73746d6173746572c0410bf1e540000070800000384000278d0000003840 40440 471a28000001000000010000026e6c0000060001026763065f6d736463730f646f7669616e75736b616e746f6f72026e6c0000010001000002580004c0a80001 471aa8040000000000000000 40441 36ed000000010000000000000670726f646973056e76776d6e026e6c0000010001 36ed800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 40442 dcc7000000010000000000000461726f66026e6c00000f0001 dcc7800000010000000200020461726f66026e6c00000f0001c00c00020001000151800009036e7331026973c011c00c00020001000151800006036e7332c029c02500010001000151800004d5852102c03a00010001000151800004d5c41503 40443 023000000001000000000000086d61696c696e67730578696e676f026e6c0000010001 023080000001000000020001086d61696c696e67730578696e676f026e6c0000010001c01500020001000151800013036e73310c636f6e63657074732d696374c01bc01500020001000151800006036e7332c033c04e00010001000151800004d5c51e4b 40444 0000000070024000b5a30000020405b401010402 000080010000000000000000 40445 b429000000010000000000000c7261696e626f777061727479026e6c0000010001 b429800000010000000200020c7261696e626f777061727479026e6c0000010001c00c0002000100015180000a036e7331036e7873c019c00c00020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 40446 249a00000001000000000000037777770a64656269657270696572026e6c0000010001 249a80000001000000020000037777770a64656269657270696572026e6c0000010001c01000020001000151800010036e733106686f73747338036e657400c01000020001000151800006036e7332c033 40447 729f0000000100000000000003777777096a64636c6172697479026e6c0000010001 729f8000000100000003000003777777096a64636c6172697479026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c034c0100002000100015180000805646e733132c034 40448 b40d0000000100000000000003777777096a64636c6172697479026e6c0000010001 b40d8000000100000003000003777777096a64636c6172697479026e6c0000010001c0100002000100015180001505646e7331300961637469766569737003636f6d00c0100002000100015180000805646e733131c034c0100002000100015180000805646e733132c034 40449 53090000000100000000000003626c3102626c06787334616c6c026e6c0000010001 53098000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40450 1c9e00000001000000000000037777770773746572636b65026e6c0000010001 1c9e80000001000000020002037777770773746572636b65026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c018c01000020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 40451 b8083fa650104470e6380000000000000000 b808bfa40000000000000000 40452 cb270000000100000000000007686565726c656e0476616c6b026e6c00000f0001 cb278000000100000002000207686565726c656e0476616c6b026e6c00000f0001c01400020001000151800012026e730c6d65676170726f7669646572c019c01400020001000151800006036e7332c030c02d0001000100015180000450474002c04b0001000100015180000450474102 40453 0df700000001000000000000037777770d676c6173726563726561746965026e6c0000010001 0df784030001000000010000037777770d676c6173726563726561746965026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 40454 b8083fa650184470331f000000945b40000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 b808bfa40000000000000000 40455 ce1500000001000000000000046168626c02626c06787334616c6c026e6c0000010001 ce1580000001000000030002046168626c02626c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 40456 a91200000001000000000000036e733109666972737466696e64026e6c0000010001 a91280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40457 a91300000001000000000000036e733209666972737466696e64026e6c0000010001 a91380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40458 d04b000000010000000000000a776f72646f6e6c696e65026e6c00001c0001 d04b800000010000000200020a776f72646f6e6c696e65026e6c00001c0001c00c0002000100015180000f026e7309656174736572766572c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d4cb0e42c04600010001000151800004d4cb1221 40459 eb8a00000001000000000000046168626c02626c06787334616c6c026e6c0000260001 eb8a80000001000000030002046168626c02626c06787334616c6c026e6c0000260001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 40460 b8083fb450114462e5a10000000000000000 b808bfb40000000000000000 40461 c53d001000010000000000010870686f626f7330310761626e616d726f026e6c00000100010000290800000000000000 c53d800000010000000200030870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c0000291000000000000000 40462 0000000070024000ab0a0000020405b401010402 000080010000000000000000 40463 d52b00000001000000000000087261616b70756e74026e6c0000ff0001 d52b80000001000000020000087261616b70756e74026e6c0000ff0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 40464 1cd9001000010000000000010870686f626f7330320761626e616d726f026e6c00000100010000290800000000000000 1cd9800000010000000200030870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c0000291000000000000000 40465 ff08000000010000000000000877616e6e61646f6f026e6c0000ff0001 ff08800000010000000200010877616e6e61646f6f026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 40466 67030000000100000000000006732d627572670564656d6f6e026e6c00000f0001 67038000000100000003000206732d627572670564656d6f6e026e6c00000f0001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c0130002000100015180000f036e73320564656d6f6e036e657400c02d00010001000151800004c29f4906c03f00010001000151800004c29fb004 40467 704e00000001000000000000026e7306617263686973026e6c0000010001 704e80000001000000020001026e7306617263686973026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ad1272 40468 b8083fb550104462e5a00000000000000000 b808bfb40000000000000000 40469 9c0900000001000000000000026e7306617263686973026e6c0000260001 9c0980000001000000020001026e7306617263686973026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ad1272 40470 000f28000001000200000000026e6c0000060001064c4150544f50176164766f636174656e6b616e746f6f722d6a61636f6273026e6c00000500fe000000000000c01400010001000000000004c0a80115 000fa8040000000000000000 40471 a91500000001000000000000036e733109666972737466696e64026e6c0000010001 a91580000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40472 b80933a250104470e7a20000000000000000 b809b3a40000000000000000 40473 8a19000000010000000000000a67696c64657661617274026e6c00000f0001 8a19800000010000000200000a67696c64657661617274026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 40474 d73900000001000000000000036e733107737572666e6574026e6c0000010001 d73980000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 40475 dbe500000001000000000000065a4f4c4445520773616e64696e6f026e6c0000060001 dbe584030001000000010000065a4f4c4445520773616e64696e6f026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 40476 b80933a250184470fcc9000000949400000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 b809b3a40000000000000000 40477 70870000000100000000000003777777066f7261636c65026e6c0000010001 70878000000100000002000003777777066f7261636c65026e6c0000010001c01000020001000151800010036e7331066f7261636c6503636f6d00c01000020001000151800006036e7334c02f 40478 898100000001000000000000036e7332086d65646961776562026e6c0000010001 898180000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 40479 ce6100000001000000000000036e7333086d65646961776562026e6c0000010001 ce6180000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 40480 b80933b050114462e70b0000000000000000 b809b3b40000000000000000 40481 0000000070024000fdbe0000020405b401010402 000080010000000000000000 40482 ae2a00000001000000000000037777770976696e647568696572026e6c0000010001 ae2a80000001000000020000037777770976696e647568696572026e6c0000010001c01000020001000151800010036e733109666972737466696e64c01ac01000020001000151800006036e7332c032 40483 b80b2b8e5010447042690000000000000000 b80bab840000000000000000 40484 0000000070024000a29f0000020405b401010402 000080010000000000000000 40485 e2cd00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 e2cd80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40486 402100000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 402180000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40487 b80b2b8e5018447092d00000009458c0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afd79403c4ef90003000000354e544c4d535350000100000097b200c00f000f00260000000600060020000000534552564552444f5649414e55534b414e544f4f520000 b80bab840000000000000000 40488 b80933b150104462e70a0000000000000000 b809b3b40000000000000000 40489 b46600000001000000000000036e7332086e7574736d616173026e6c0000010001 b46680000001000000020002036e7332086e7574736d616173026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d43633c8c00c00010001000151800004d43633ca 40490 eaca000000010000000000000a67726f7465736d7572660a6d6164736369656e6365026e6c0000010001 eaca800000010000000300030a67726f7465736d7572660a6d6164736369656e6365026e6c0000010001c0170002000100015180000c056e732d303103737663c017c0170002000100015180000e026e7308646174616c6f7373c022c01700020001000151800006036e7332c051c03600010001000151800004d5cce646c04e000100010001518000045054f9a1c06800010001000151800004c26d995e 40491 b80b2b9c5011446241d20000000000000000 b80bab940000000000000000 40492 8d6500000001000000000000047072693203646e73067073696e6574026e6c0000010001 8d6580000001000000030003047072693203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c01500020001000151800002c00cc015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c00c000100010001518000049a0ff9aac051000100010001518000049a0ff9ae 40493 b80c085d501044700a7a0000000000000000 b80c88540000000000000000 40494 e86f00000001000000000000067669617765620b7669616e6574776f726b73026e6c0000010001 e86f80000001000000020002067669617765620b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 40495 0240000000010000000000000377777711636f6e7261642d656c656374726f6e6963026e6c0000010001 0240800000010000000200020377777711636f6e7261642d656c656374726f6e6963026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c022c01000020001000151800006036e7332c03ac0360001000100015180000450416028c05100010001000151800004c356780c 40496 b80b2b9d5010446241d10000000000000000 b80bab940000000000000000 40497 4685000000010000000000000e696e74656772612d6575726f7065026e6c00000f0001 4685800000010000000300020e696e74656772612d6575726f7065026e6c00000f0001c00c0002000100015180000f036e73310870726f7365727665c01bc00c00020001000151800012036e73320970726f2d736572766502626500c00c00020001000151800006036e7333c033c02f000100010001518000045054e055c06800010001000151800004d4ccc655 40498 b80c085d5018447053cd0000008b07ac000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd53403c4ed300030000002c4e544c4d535350000100000097b200c0060006002600000006000600200000004c4150544f504a41434f42530000 b80c88540000000000000000 40499 260700000001000000000000037777770b736c657574656c73746164026e6c0000010001 260780000001000000020002037777770b736c657574656c73746164026e6c0000010001c01000020001000151800012036e73310b6d6564696164657369676ec01cc01000020001000151800006036e7332c034c03000010001000151800004c3b1f203c04e00010001000151800004d4ccf533 40500 a3b400000001000000000000036e7331096d61726b6772616166026e6c00001c0001 a3b480000001000000030003036e7331096d61726b6772616166026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c3f13ceec03c00010001000151800004c372eb43c04e000100010001518000043e320e8f 40501 b98600000001000000000000036e7331096d61726b6772616166026e6c0000260001 b98680000001000000030003036e7331096d61726b6772616166026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c3f13ceec03c00010001000151800004c372eb43c04e000100010001518000043e320e8f 40502 234600000001000000000000036e7332096d61726b6772616166026e6c00001c0001 234680000001000000030003036e7332096d61726b6772616166026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02e00010001000151800004c3f13ceec00c00010001000151800004c372eb43c04e000100010001518000043e320e8f 40503 3afe00000001000000000000036e7332096d61726b6772616166026e6c0000260001 3afe80000001000000030003036e7332096d61726b6772616166026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02e00010001000151800004c3f13ceec00c00010001000151800004c372eb43c04e000100010001518000043e320e8f 40504 a05e00000001000000000000036e7333096d61726b6772616166026e6c00001c0001 a05e80000001000000030003036e7333096d61726b6772616166026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02e00010001000151800004c3f13ceec04000010001000151800004c372eb43c00c000100010001518000043e320e8f 40505 6a5700000001000000000000036e7333096d61726b6772616166026e6c0000260001 6a5780000001000000030003036e7333096d61726b6772616166026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02e00010001000151800004c3f13ceec04000010001000151800004c372eb43c00c000100010001518000043e320e8f 40506 765c00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 765c80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40507 65ea00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 65ea80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40508 b80c086b5011446209ec0000000000000000 b80c88640000000000000000 40509 0d24000000010000000000000377777705736f6d6679026e6c0000010001 0d24800000010000000200020377777705736f6d6679026e6c0000010001c0100002000100015180000c026e7306787334616c6cc016c01000020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 40510 172b00000001000000000000037777770e6d6f6e65796d696c6a6f6e616972026e6c0000010001 172b80000001000000020002037777770e6d6f6e65796d696c6a6f6e616972026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c033000100010001518000043ed44d39c045000100010001518000043ed44d3a 40511 9ad500000001000000000000037777770b6d6f726e696e6773746172026e6c0000010001 9ad580000001000000020000037777770b6d6f726e696e6773746172026e6c0000010001c010000200010001518000100572656d7573046d736575036e657400c01000020001000151800006036e7332c036 40512 ba5c00000001000000000000046b6963610564656d6f6e026e6c00000f0001 ba5c80000001000000030002046b6963610564656d6f6e026e6c00000f0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 40513 092b00000001000000000000086f74696d612d727803636f6d0c7072696e732d737570706c79026e6c0000010001 092b80000001000000020000086f74696d612d727803636f6d0c7072696e732d737570706c79026e6c0000010001c0190002000100015180000d036e7331036b706e036e657400c01900020001000151800006036e7332c03e 40514 d4a30000000100000000000003777777096b617a61616c697465026e6c0000010001 d4a38000000100000002000203777777096b617a61616c697465026e6c0000010001c0100002000100015180000f036e733108616432636c69636bc01ac01000020001000151800006036e7332c032c02e00010001000151800004d5c40907c049000100010001518000043eddd517 40515 f42f000000010000000000000377777706666173746677026e6c0000010001 f42f800000010000000200020377777706666173746677026e6c0000010001c0100002000100015180001d04646e733115636f6d6d756e69636174696f6e706172746e657273c017c0100002000100015180000704646e7332c030c02b0001000100015180000450f7c542c0540001000100015180000450f7c543 40516 d92e00000001000000000000036e733109756e69736f75726365026e6c0000010001 d92e80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 40517 098500000001000000000000037777770f74657272612d74726169656374756d026e6c0000010001 098580000001000000020002037777770f74657272612d74726169656374756d026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c020c01000020001000151800006036e7332c038c03400010001000151800004d90867fec05300010001000151800004c1ad2bfe 40518 f18800000001000000000000046d61696c12696d746563682d70726f6a656374732d6e6f026e6c0000010001 f18880000001000000020002046d61696c12696d746563682d70726f6a656374732d6e6f026e6c0000010001c0110002000100015180000d036e73310663617374656cc024c01100020001000151800006036e7332c03cc03800010001000151800004c3558244c05100010001000151800004c3558245 40519 c311000000010000000000000a56657374616d61746963026e6c00001c0001 c311800000010000000200020a56657374616d61746963026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 40520 8a5d0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 8a5d8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40521 0000000070024000ab970000020405b401010402 000080010000000000000000 40522 b25f000000010000000000000870686f626f7330310761626e616d726f026e6c0000010001 b25f800000010000000200020870686f626f7330310761626e616d726f026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b0870686f626f733032c015c00c00010001000151800004a7cac30bc03f00010001000151800004a7cac30c 40523 5d91000000010000000000000870686f626f7330320761626e616d726f026e6c0000010001 5d91800000010000000200020870686f626f7330320761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c01500020001000151800002c00cc03100010001000151800004a7cac30bc00c00010001000151800004a7cac30c 40524 179b00000001000000000000037777770b6b61617274656e68756973026e6c0000010001 179b80000001000000030003037777770b6b61617274656e68756973026e6c0000010001c01000020001000151800009036e7331027a73c01cc01000020001000151800006036e7332c034c01000020001000151800006036e7333c034c03000010001000151800004d5ef829fc04500010001000151800004d5ef8005c05700010001000151800004d5ef82a0 40525 b80c086c5010446209eb0000000000000000 b80c88640000000000000000 40526 166a000000010000000000000575726975730473656d61026e6c0000010001 166a800000010000000300030575726975730473656d61026e6c0000010001c01200020001000151800012047072693103646e73067073696e6574c017c012000200010001518000070470726932c030c012000200010001518000070470726933c030c02b000100010001518000049a0ff9a6c049000100010001518000049a0ff9aac05c000100010001518000049a0ff9ae 40527 b80c8b7b5010447090530000000000000000 40528 d4f5000000010000000000000377777707712d747261636b026e6c0000010001 d4f5800000010000000200010377777707712d747261636b026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c018c04500010001000151800004c2860043 40529 1ec90000000100000000000003777777086368616e6e656c73026e6c0000010001 1ec98000000100000002000203777777086368616e6e656c73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 40530 bd1e0000000100000000000003706f700b616476656e74697374656e026e6c0000010001 bd1e8000000100000002000003706f700b616476656e74697374656e026e6c0000010001c0100002000100015180000b036e7331046e656e73c01cc01000020001000151800006036e7332c034 40531 1ec90000000100000000000003777777086368616e6e656c73026e6c0000010001 1ec98000000100000002000203777777086368616e6e656c73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 40532 b80c8b7b501844702c170000008bb43c000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd54403c4ed400030000002c4e544c4d535350000100000097b200c0060006002600000006000600200000004c4150544f504a41434f42530000 40533 58e5000000010000000000000777616e61646f6f026e6c0000ff0001 58e5800000010000000200010777616e61646f6f026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 40534 1ec90000000100000000000003777777086368616e6e656c73026e6c0000010001 1ec98000000100000002000203777777086368616e6e656c73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 40535 ded000000001000000000000067361736b69610b617a636f6d707574657273026e6c0000010001 ded080000001000000030001067361736b69610b617a636f6d707574657273026e6c0000010001c0130002000100015180000e026e7308767575727765726bc01fc01300020001000151800012036e733208767575727765726b036e657400c01300020001000151800006036e7333c051c033000100010001518000043efa0202 40536 3fff0000000100000000000004686e73300774697363616c69026e6c0000010001 3fff8000000100000003000204686e73300774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 40537 04c20000000100000000000004686e73310774697363616c69026e6c0000010001 04c28000000100000003000204686e73310774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 40538 8d4f0000000100000000000003777777057374697073026e6c0000010001 8d4f8000000100000002000003777777057374697073026e6c0000010001c01000020001000151800013046e733031086772616669636f6d03636f6d00c01000020001000151800007046e733032c02f 40539 b80c8b89501144628fc50000000000000000 40540 4ef7000000010000000000000377777706766565726c65026e6c0000010001 4ef7800000010000000200000377777706766565726c65026e6c0000010001c01000020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c01000020001000151800006036e7332c02f 40541 000000007002400063ad0000020405b401010402 000080010000000000000000 40542 d3100000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 d3108000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 40543 b80c8b8a501044628fc40000000000000000 40544 b80d337550104470a06e0000000000000000 b80db3740000000000000000 40545 06bc000000010000000000000a626c6f6f6d696e657373026e6c00000f0001 06bc800000010000000200000a626c6f6f6d696e657373026e6c00000f0001c00c00020001000151800016036e73310f627573696e657373636f6e6e656374c017c00c00020001000151800010036e733206776964657873036e657400 40546 8ed6000000010000000000000462617261026e6c0000010001 8ed6800000010000000200020462617261026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 40547 a26c0000000100000000000007636f6d2d616c6c026e6c0000010001 a26c8000000100000002000107636f6d2d616c6c026e6c0000010001c00c0002000100015180000d026e7307696e746f756368c014c00c00020001000151800010026e7307696e746f756368036e657400c02800010001000151800004d413c001 40548 eabb00000001000000000000037777770b646f6262656c7072696a73026e6c0000010001 eabb80000001000000020002037777770b646f6262656c7072696a73026e6c0000010001c01000020001000151800009036e7331026973c01cc01000020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 40549 29c0000000010000000000000469766d380369766d027675026e6c0000010001 29c0800000010000000300030469766d380369766d027675026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000a0473746172026373c015c0150002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482258104c03d00010001000151800004c01fe72ac05300010001000151800004c0576a65 40550 b80d337550184470f99b0000008bf6d2000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd54403c4ed400030000002c4e544c4d535350000100000097b200c0060006002600000006000600200000004c4150544f504a41434f42530000 b80db3740000000000000000 40551 744200000001000000000000076b6e697073656c026e6c0000ff0001 744280000001000000020002076b6e697073656c026e6c0000ff0001c00c0002000100015180000d0a696e6574736572762d31c00cc00c0002000100015180000e036e7332076e65746c616e64c014c02800010001000151800004d9aa2b74c04100010001000151800004d9aa2c06 40552 b80d3383501144629fe00000000000000000 b80db3840000000000000000 40553 132e00000001000000000000086d732d7072696d6f026e6c00000f0001 132e80000001000000020000086d732d7072696d6f026e6c00000f0001c00c00020001000151800018036e73310e6974636f6e737472756374696f6e03636f6d00c00c00020001000151800006036e7332c02d 40554 50a9000000010000000000000b7370616d6d65726475646503636f6d026e6c00000f0001 50a9840300010000000100000b7370616d6d65726475646503636f6d026e6c00000f0001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 40555 cd3b00000001000000000000026e73076e656473746174026e6c00001c0001 cd3b80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40556 417a00000001000000000000026e73076e656473746174026e6c0000260001 417a80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40557 4d7f00000001000000000000036e7332076e656473746174026e6c0000010001 4d7f80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40558 af7b00000001000000000000036e7332076e656473746174026e6c00001c0001 af7b80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40559 458900000001000000000000036e7332076e656473746174026e6c0000260001 458980000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40560 e54600000001000000000000036e7333076e656473746174026e6c00001c0001 e54680000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40561 96f100000001000000000000036e7333076e656473746174026e6c0000260001 96f180000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40562 19a200000001000000000000036e7334076e656473746174026e6c00001c0001 19a280000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40563 5fa800000001000000000000036e7334076e656473746174026e6c0000260001 5fa880000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40564 1c6c0000000100000000000008747269746f6e31310761626e616d726f026e6c0000010001 1c6c8000000100000002000208747269746f6e31310761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c0150002000100015180000b0870686f626f733032c015c03100010001000151800004a7cac30bc04800010001000151800004a7cac30c 40565 ff0f00000001000000000000066c6170746f700977696a6e7472616e73026e6c0000060001 ff0f84030001000000010000066c6170746f700977696a6e7472616e73026e6c0000060001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40566 b80d3384501044629fdf0000000000000000 b80db3840000000000000000 40567 1ed400000001000000000000037777770c736573616d65737472657373026e6c0000010001 1ed484030001000000010000037777770c736573616d65737472657373026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40568 03bc00000001000000000000037777770e6172626569647372656368746572026e6c0000010001 03bc80000001000000020000037777770e6172626569647372656368746572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 40569 36c0000000010000000000000866616c6c6261636b0f627573696e657373636f6e6e656374026e6c0000010001 36c0800000010000000300020866616c6c6261636b0f627573696e657373636f6e6e656374026e6c0000010001c0150002000100015180000d036e733106776964657873c025c01500020001000151800010036e733206776964657873036e657400c01500020001000151800006036e7333c03dc03900010001000151800004d4ccc0fcc06e000100010001518000043efa0703 40570 2f2b00000001000000000000036d78320464697661026e6c0000010001 2f2b80000001000000020000036d78320464697661026e6c0000010001c0100002000100015180000e036e73310464697661036e657400c01000020001000151800006036e7332c02d 40571 a89500000001000000000000036d78310464697661026e6c0000010001 a89580000001000000020000036d78310464697661026e6c0000010001c0100002000100015180000e036e73310464697661036e657400c01000020001000151800006036e7332c02d 40572 a29c000000010000000000000a656d6561736d7470303203616f6e026e6c0000010001 a29c800000010000000200010a656d6561736d7470303203616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 40573 5f04000000010000000000000a656d6561736d7470303203616f6e026e6c00001c0001 5f04800000010000000200010a656d6561736d7470303203616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 40574 84a7000000010000000000000a656d6561736d7470303203616f6e026e6c0000260001 84a7800000010000000200010a656d6561736d7470303203616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 40575 381b000000010000000000000a656d6561736d7470303103616f6e026e6c00001c0001 381b800000010000000200010a656d6561736d7470303103616f6e026e6c00001c0001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 40576 b4e1000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 b4e1800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 40577 e7e0000000010000000000000a656d6561736d7470303103616f6e026e6c0000260001 e7e0800000010000000200010a656d6561736d7470303103616f6e026e6c0000260001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 40578 9a6b000000010000000000000562696e636b026e6c00000f0001 9a6b800000010000000200020562696e636b026e6c00000f0001c00c0002000100015180000b036e73310470696e65c012c00c00020001000151800006036e7332c02ac02600010001000151800004d59c0201c03d00010001000151800004c3c1a303 40579 3a560000000100000000000003626c3102626c06787334616c6c026e6c0000010001 3a568000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40580 df4800000001000000000000037777770b74687569737472656e6473026e6c0000010001 df4880000001000000030003037777770b74687569737472656e6473026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c01cc01000020001000151800006036e7332c034c01000020001000151800006036e7333c034c03000010001000151800004c3f13ceec04c00010001000151800004c372eb43c05e000100010001518000043e320e8f 40581 916c0000000100000000000003777777036e7263026e6c0000010001 916c8000000100000003000203777777036e7263026e6c0000010001c01000020001000151800015036e73310b70696e6b726f6363616465036e657400c0100002000100015180000e026e73086d656761706c6578c014c01000020001000151800006036e7331c04cc04900010001000151800004504f6101c06300010001000151800004504f6102 40582 ec14001000010000000000010766313331323534057570632d66066368656c6c6f026e6c00000100010000290800000000000000 ec14800000010000000300040766313331323534057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c420000291000000000000000 40583 0a51000000010000000000000a7072696e746275796572026e6c00000f0001 0a51800000010000000200010a7072696e746275796572026e6c00000f0001c00c0002000100015180000c026e7306776562746963c017c00c0002000100015180000b026e73056963617474c017c02b00010001000151800004c14e1e2b 40584 eb730000000100000000000010666f637573696e766573746d656e7473026e6c00000f0001 eb738403000100000001000010666f637573696e766573746d656e7473026e6c00000f0001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40585 95c900000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 95c980000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40586 c98d00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 c98d80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40587 4f4f00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 4f4f80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 40588 07fa00000001000000000000026e75026e6c0000010001 07fa80000001000000030003026e75026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc023000100010001518000043e45a282c035000100010001518000043e45a283c047000100010001518000043e45a284 40589 683e00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 683e80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40590 10320000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 10328000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 40591 44230000000100000000000004726f6f7307656e64656d6f6c026e6c0000260001 44238000000100000002000004726f6f7307656e64656d6f6c026e6c0000260001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 40592 2b4c00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 2b4c80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40593 68990010000100000000000104686f6d6503777873026e6c00000100010000290800000080000000 68998000000100000003000404686f6d6503777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a650000291000000000000000 40594 303400000001000000000000026e73076e656473746174026e6c0000010001 303480000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40595 981a00000001000000000000036e7333076e656473746174026e6c0000010001 981a80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40596 093e28000001000200000000024e4c0000060001065343484f4c53084848454e545a454e024e4c00000500fe000000000000c014000100010000000000040a030a04 093ea8040000000000000000 40597 09bd00000001000000000000037777770a6c697665746f72696465026e6c0000010001 09bd84030001000000010000037777770a6c697665746f72696465026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 40598 f5820000000100000000000003777777086c616e67686f7574026e6c0000010001 f5828000000100000002000003777777086c616e67686f7574026e6c0000010001c01000020001000151800013036e733109752d73657276657273036e657400c01000020001000151800006036e7332c031 40599 6dbd000000010000000000000972697364616d737374026e6c00000f0001 6dbd800000010000000300010972697364616d737374026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc016c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c048c02a000100010001518000043efa0202 40600 ba1600000001000000000000066d6f76696573077765622d6c6f67026e6c0000010001 ba1680000001000000030003066d6f76696573077765622d6c6f67026e6c0000010001c0130002000100015180000b036e733104696c7365c01bc01300020001000151800006036e7332c033c01300020001000151800006036e7333c033c02f000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 40601 84e50000000100000000000003676d78026e6c00000f0001 84e58000000100000003000203676d78026e6c00000f0001c00c0002000100015180000d036e733106776964657873c010c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c028c02400010001000151800004d4ccc0fcc059000100010001518000043efa0703 40602 0e8c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 0e8c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40603 35ea00000001000000000000036e7332057377646e73026e6c0000010001 35ea80000001000000020002036e7332057377646e73026e6c0000010001c0100002000100015180000a036e733103686978c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5a0da0ac0400001000100015180000451112ec3 40604 71a100000001000000000000037777770b7374617274706167696e61026e6c0000010001 71a180000001000000030003037777770b7374617274706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c030000100010001518000043e45a282c042000100010001518000043e45a283c054000100010001518000043e45a284 40605 9427000000010000000000000331373202323101310131026e6c0000010001 9427840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 40606 ac9100100001000000000001036e73310d686f7374696e67667265616b73026e6c00000100010000290800000080000000 ac9180000001000000020003036e73310d686f7374696e67667265616b73026e6c0000010001c01000020001000151800014036e73320d666c79696e6773657276657273c01ec01000020001000151800006036e7331c036c03200010001000151800004d420e285c05200010001000151800004d420e2840000291000000000000000 40607 d43c00100001000000000001036e73320d686f7374696e67667265616b73026e6c00000100010000290800000080000000 d43c80000001000000020003036e73320d686f7374696e67667265616b73026e6c0000010001c01000020001000151800014036e73320d666c79696e6773657276657273c01ec01000020001000151800006036e7331c036c03200010001000151800004d420e285c05200010001000151800004d420e2840000291000000000000000 40608 11700000000100000000000009652d6c756e61746963026e6c0000010001 11708000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40609 197b0000000100000000000009652d6c756e61746963026e6c0000010001 197b8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40610 120d0000000100000000000009652d6c756e61746963026e6c0000010001 120d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40611 000000007002400007cf0000020405b401010402 000080010000000000000000 40612 5bfc000000010000000000000766313331323534057570632d66066368656c6c6f026e6c0000010001 5bfc800000010000000300030766313331323534057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 40613 7a1600000001000000000000037777770e7a6f6f6d6d756c74696d65646961026e6c0000010001 7a1680000001000000020000037777770e7a6f6f6d6d756c74696d65646961026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c038 40614 34d90000000100000000000003777777076d736e616d656e026e6c0000010001 34d98403000100000001000003777777076d736e616d656e026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 40615 e2de0000000100000000000011686967687370656564616c6c69616e6365026e6c00000f0001 e2de8000000100000002000111686967687370656564616c6c69616e6365026e6c00000f0001c00c00020001000151800009036e7331026e73c01ec00c00020001000151800013036e7332026e6c0669676e697465036e657400c03200010001000151800004d46c0d06 40616 3e47000000010000000000000377777705696e747261026e6c0000010001 3e47800000010000000300030377777705696e747261026e6c0000010001c0100002000100015180000e076e73617574683103626974c016c0100002000100015180000a076e736175746832c032c0100002000100015180000a076e736175746833c032c02a00010001000151800004d5880c33c04400010001000151800004d5880c3bc05a00010001000151800004d4ccc00b 40617 a6c400000001000000000000036e7331046372696f026e6c0000010001 a6c480000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40618 f36000000001000000000000036e7332046372696f026e6c0000010001 f36080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40619 755800000001000000000000037777770667616d657273026e6c0000010001 755880000001000000020002037777770667616d657273026e6c0000010001c0100002000100015180000b036e73310470696e65c017c01000020001000151800006036e7332c02fc02b00010001000151800004d59c0201c04200010001000151800004c3c1a303 40620 0bdd00000001000000000000066b61726d6163036d6373026e6c0000ff0001 0bdd80000001000000020001066b61726d6163036d6373026e6c0000ff0001c01300020001000151800005026e73c013c01300020001000151800010036e7332096379626572636f6d6dc017c02b00010001000151800004d5c40185 40621 b80f1979501044705e8a0000000000000000 b80f99740000000000000000 40622 4acf00000001000000000000026e73076e656473746174026e6c00001c0001 4acf80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40623 756000000001000000000000036e73310d686f7374696e67667265616b73026e6c0000010001 756080000001000000020002036e73310d686f7374696e67667265616b73026e6c0000010001c01000020001000151800014036e73320d666c79696e6773657276657273c01ec01000020001000151800006036e7331c036c03200010001000151800004d420e285c05200010001000151800004d420e284 40624 136300000001000000000000026e73076e656473746174026e6c0000260001 136380000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40625 3ab000000001000000000000036e73320d686f7374696e67667265616b73026e6c0000010001 3ab080000001000000020002036e73320d686f7374696e67667265616b73026e6c0000010001c01000020001000151800014036e73320d666c79696e6773657276657273c01ec01000020001000151800006036e7331c036c03200010001000151800004d420e285c05200010001000151800004d420e284 40626 325c00000001000000000000037777770868617a656e626f73026e6c0000010001 325c80000001000000020001037777770868617a656e626f73026e6c0000010001c0100002000100015180000a036e733303777873c019c01000020001000151800006036e7334c031c04300010001000151800004d5ef9a65 40627 6d010000000100000000000012666f7070656e70616c696e67656e7a616c6d026e6c00000f0001 6d018000000100000002000212666f7070656e70616c696e67656e7a616c6d026e6c00000f0001c00c0002000100015180000e036e733107686f6673746565c01fc00c00020001000151800006036e7332c037c033000100010001518000043ed44e32c04d000100010001518000043ed44e33 40628 8a9e00000001000000000000036e7332076e656473746174026e6c0000010001 8a9e80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40629 c7cc00000001000000000000036e7332076e656473746174026e6c00001c0001 c7cc80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40630 fcd50010000100000000000106787334616c6c026e6c0000ff00010000290800000080000000 fcd58000000100000003000306787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 40631 b91300000001000000000000036e7332076e656473746174026e6c0000260001 b91380000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40632 808b00000001000000000000086d6f746f726f6c61026e6c0000010001 808b80000001000000030000086d6f746f726f6c61026e6c0000010001c00c00020001000151800015076d6f7467617465086d6f746f726f6c6102646500c00c00020001000151800011076d6f7467617465036d6f7403636f6d00c00c0002000100015180000906667470626f78c052 40633 b80f19795018447087170000008ba547000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afbd2403c4d5200030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005343484f4c534848454e545a454e0000 b80f99740000000000000000 40634 b7e100000001000000000000036e7333076e656473746174026e6c00001c0001 b7e180000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40635 455a00000001000000000000036e7333076e656473746174026e6c0000260001 455a80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40636 a49f00000001000000000000036e7334076e656473746174026e6c0000010001 a49f80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40637 2670000000010000000000000575726975730473656d61026e6c0000010001 2670800000010000000300030575726975730473656d61026e6c0000010001c01200020001000151800012047072693103646e73067073696e6574c017c012000200010001518000070470726932c030c012000200010001518000070470726933c030c02b000100010001518000049a0ff9a6c049000100010001518000049a0ff9aac05c000100010001518000049a0ff9ae 40638 cd0400000001000000000000036e7334076e656473746174026e6c00001c0001 cd0480000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40639 0de400000001000000000000036e7334076e656473746174026e6c0000260001 0de480000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 40640 53dd000000010000000000000742414e4b4a414e0a4753492d446f6d61696e09547572746c656e6574026e6c0000060001 53dd840300010000000100000742414e4b4a414e0a4753492d446f6d61696e09547572746c656e6574026e6c0000060001c02900060001000038400036026e730f646f6d61696e2d7265676973747279c0290a686f73746d6173746572c0400bf1e540000070800000384000278d0000003840 40641 b80f1987501144625dfc0000000000000000 b80f99840000000000000000 40642 539e000000010000000000000472696273026e6c0000010001 539e800000010000000200020472696273026e6c0000010001c00c0002000100015180000c036e7331056e6574636fc011c00c00020001000151800006036e7332c029c02500010001000151800004c26d4a82c03d00010001000151800004c26dd146 40643 000000007002400013fa0000020405b401010402 000080010000000000000000 40644 de3700100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 de3780000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 40645 28f800000001000000000000037777770864616e69656c6c61026e6c0000010001 28f880000001000000020002037777770864616e69656c6c61026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c019c01000020001000151800006036e7332c030c02d0001000100015180000450474002c04b0001000100015180000450474102 40646 4fdc00000001000000000000037777770d73706f72747661636e6f6f7264026e6c0000010001 4fdc80000001000000020002037777770d73706f72747661636e6f6f7264026e6c0000010001c01000020001000151800018036e733111736d69647364657369676e73747564696fc01ec01000020001000151800009036e7332026d6ac01ec03200010001000151800004515b0311c05600010001000151800004515b000a 40647 7e0000100001000000000001026e73076e656473746174026e6c00002600010000290800000000000000 7e0080000001000000020003026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 40648 b72c00000001000000000000037777770d686f6767756572737472616174026e6c0000010001 b72c80000001000000020002037777770d686f6767756572737472616174026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01ec01000020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 40649 c9f100000001000000000000026e730f646f6d61696e2d7265676973747279026e6c0000010001 c9f180000001000000030002026e730f646f6d61696e2d7265676973747279026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 40650 1fa500100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 1fa580000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 40651 979300000001000000000000087574726f6e696373026e6c00000f0001 979384030001000000010000087574726f6e696373026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 40652 b80f1988501044625dfb0000000000000000 b80f99840000000000000000 40653 36be00100001000000000001036e7333076e656473746174026e6c00002600010000290800000000000000 36be80000001000000020003036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 40654 95630000000100000000000003777777046b697474026e6c0000010001 95638000000100000002000203777777046b697474026e6c0000010001c0100002000100015180000a036e733103696166c015c01000020001000151800006036e7332c02dc029000100010001518000045059e040c03f000100010001518000045059ee03 40655 bd6300000001000000000000046d61696c0d6f6f73747665656e67726f6570026e6c0000010001 bd6380000001000000020000046d61696c0d6f6f73747665656e67726f6570026e6c0000010001c01100020001000151800018036e73310e66696e616c2d66726f6e74696572036e657400c01100020001000151800006036e7332c037 40656 c760000000010000000000000a7a65656c616e646e6574026e6c0000ff0001 c760800000010000000200020a7a65656c616e646e6574026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc02b00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 40657 cfea0000000100000000000006787334616c6c026e6c0000ff0001 cfea8000000100000003000206787334616c6c026e6c0000ff0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 40658 b8100fa250104470748b0000000000000000 b8108fa40000000000000000 40659 3bd3000000010000000000000467616d650866756e7369746573026e6c0000010001 3bd3800000010000000200020467616d650866756e7369746573026e6c0000010001c0110002000100015180000b036e7331046e732d31c01ac01100020001000151800006036e7332c032c02e000100010001518000045045a0cdc04500010001000151800004d4cceec8 40660 4a6b28000001000200000000026e6c00000600010742414e4b4a414e0a4753492d446f6d61696e09547572746c656e6574026e6c00000500fe000000000000c01400010001000000000004d4535706 4a6ba8040000000000000000 40661 b8100fa250184470efe20000008b547d000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afbd2403c4d5200030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005343484f4c534848454e545a454e0000 b8108fa40000000000000000 40662 944f0000000100000000000004686f6d6503777873026e6c0000010001 944f8000000100000003000304686f6d6503777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 40663 ee10000000010000000000000b73796e6572676574696361026e6c0000010001 ee10800000010000000200020b73796e6572676574696361026e6c0000010001c00c00020001000151800010036e733109756e69736572766572c018c00c00020001000151800006036e7332c030c02c00010001000151800004c3454b03c04800010001000151800004d119a2fa 40664 b8100fb05011446273fd0000000000000000 b8108fb40000000000000000 40665 190700000001000000000000037777770a6d756c746973636f7065026e6c0000010001 190780000001000000020002037777770a6d756c746973636f7065026e6c0000010001c0100002000100015180000c026e7306656d61746963c01bc01000020001000151800006036e7332c032c02f000100010001518000043e3a4042c047000100010001518000043e3a4043 40666 c54200000001000000000000037777770d73686f706b6c7577657268726d026e6c0000010001 c54280000001000000020002037777770d73686f706b6c7577657268726d026e6c0000010001c01000020001000151800009036e7331026973c01ec01000020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 40667 000000007002400030df0000020405b401010402 000080010000000000000000 40668 7c5b0000000100000000000007616b73656e746f026e6c0000ff0001 7c5b8000000100000002000207616b73656e746f026e6c0000ff0001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 40669 c6d1000000010000000000000a666f727761726475726c0762617365776562026e6c0000010001 c6d1800000010000000200020a666f727761726475726c0762617365776562026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c03300010001000151800004d535d035c04500010001000151800004d535d034 40670 e23300000001000000000000037777770877656467776f6f64026e6c0000010001 e23380000001000000020000037777770877656467776f6f64026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c019c0100002000100015180000704686e7331c032 40671 3ca400000001000000000000037777770773746572636b65026e6c0000010001 3ca480000001000000020002037777770773746572636b65026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c018c01000020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 40672 810d0000000100000000000007646962616c6578026e6c0000010001 810d8000000100000002000007646962616c6578026e6c0000010001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 40673 04ac00000001000000000000037777770773746572636b65026e6c0000010001 04ac80000001000000020002037777770773746572636b65026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c018c01000020001000151800006036e7332c030c02c0001000100015180000451113264c04800010001000151800004d5c42851 40674 a6a40000000100000000000006787334616c6c026e6c0000010001 a6a48000000100000003000206787334616c6c026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 40675 f2fe00000001000000000000096261646d696e746f6e026e6c00000f0001 f2fe80000001000000020002096261646d696e746f6e026e6c00000f0001c00c00020001000151800012036e73310b696e7465727374726f6f6dc016c00c00020001000151800006036e7332c02ec02a0001000100015180000450558121c04800010001000151800004d58141c4 40676 b8100fb15010446273fc0000000000000000 b8108fb40000000000000000 40677 9b5f00000001000000000000026e73076e656473746174026e6c0000010001 9b5f80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40678 82560000000100000000000005646e732d31056c61646f74026e6c0000010001 82568000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40679 6ad500000001000000000000026e73076e656473746174026e6c0000260001 6ad580000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 40680 b81096d8501044700a3a0000000000000000 40681 82570000000100000000000005646e732d32056c61646f74026e6c0000010001 82578000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40682 5574000000010000000000000d6f62732d696a7373656c686f66026e6c0000010001 5574800000010000000200020d6f62732d696a7373656c686f66026e6c0000010001c00c0002000100015180000d036e7331066e6c74726565c01ac00c00020001000151800006036e7332c032c02e00010001000151800004d4b20403c04700010001000151800004d5881e45 40683 5cc400000001000000000000036e7333076e656473746174026e6c0000010001 5cc480000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40684 54c000000001000000000000096c756974696e672d3103746d66026e6c00000f0001 54c080000001000000020000096c756974696e672d3103746d66026e6c00000f0001c0160002000100015180000f036e73310571696e6970036e657400c01600020001000151800006036e7332c032 40685 000000007002faf043bb0000020405b401010402 000080010000000000000000 40686 b81096d8501844706e000000008b6c0e000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afbd2403c4d5200030000002e4e544c4d535350000100000097b208e0080008002600000006000600200000005343484f4c534848454e545a454e0000 40687 ae6200000001000000000000036e7333076e656473746174026e6c0000260001 ae6280000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 40688 6b5c00000001000000000000056b72697073026e6c00001c0001 6b5c80000001000000020000056b72697073026e6c00001c0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02a 40689 5e5b000000010000000000000f4d4c424c4f4e4744495354414e4345026e6c0000020001 5e5b840300010000000100000f4d4c424c4f4e4744495354414e4345026e6c0000020001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 40690 82590000000100000000000005646e732d31056c61646f74026e6c0000010001 82598000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40691 825a0000000100000000000005646e732d32056c61646f74026e6c0000010001 825a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40692 b81096e65011446209ac0000000000000000 40693 aef300000001000000000000037777770b6c616e6b6174726176656c026e6c0000010001 aef380000001000000020002037777770b6c616e6b6174726176656c026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 40694 2fb90000000100000000000002616404696c7365026e6c0000010001 2fb98000000100000003000302616404696c7365026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 40695 b81096e75010446209ab0000000000000000 40696 6fad00000001000000000000067874646e6574026e6c00000f0001 6fad80000001000000020002067874646e6574026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7331c00cc02700010001000151800004c16e9d02c03800010001000151800004d9cc165f 40697 37f6000000010000000000000b766163616e736f6c65696c0477656233026e6c0000010001 37f6800000010000000200020b766163616e736f6c65696c0477656233026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c03100010001000151800004d436240ec04300010001000151800004c2b262ef 40698 000000007002400074a10000020405b401010402 000080010000000000000000 40699 855f00000001000000000000037777770c70726f6475637472616e6765026e6c0000010001 855f80000001000000020002037777770c70726f6475637472616e6765026e6c0000010001c0100002000100015180000c04646e73310470696e73c01dc0100002000100015180000704646e7332c036c03100010001000151800004d9c26101c04900010001000151800004d9c26002 40700 1d1300100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 1d1380000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 40701 ddf000000001000000000000036e733104686f6d65026e6c0000010001 ddf080000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 40702 b812ca7a501044701a580000000000000000 40703 094e00000001000000000000046d61696c03696e67026e6c00000f0001 094e80000001000000020002046d61696c03696e67026e6c00000f0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0290001000100015180000491dd19c2c03b0001000100015180000491dd5dc2 40704 841c00000001000000000000116578706f736974696573797374656d656e1a70726573656e746174696573797374656d656e2d6f6e6c696e65026e6c0000010001 841c80000001000000020002116578706f736974696573797374656d656e1a70726573656e746174696573797374656d656e2d6f6e6c696e65026e6c0000010001c01e0002000100015180000a036e733103696166c039c01e00020001000151800006036e7332c051c04d000100010001518000045059e040c063000100010001518000045059ee03 40705 f03a000000010000000000000377777707657269732d6e6c026e6c0000010001 f03a800000010000000200020377777707657269732d6e6c026e6c0000010001c01000020001000151800010036e733109747261666669633475c018c01000020001000151800006036e7332c030c02c00010001000151800004c323b781c04800010001000151800004c323b782 40706 a3ef00000001000000000000036b626d026e6c00000f0001 a3ef80000001000000020002036b626d026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 40707 b812ca7a50184470b4fb00000090ef06000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005403677373096d6963726f736f667403636f6d004039b1fb403b037b0003000000314e544c4d535350000100000097b200c00a000a0027000000070007002000000042414e4b4a414e4753492d444f4d41494e0000 40708 223900000001000000000000037777770d656c656d656e746f6e6c696e65026e6c0000010001 223980000001000000020002037777770d656c656d656e746f6e6c696e65026e6c0000010001c0100002000100015180000a026e730469636d63c01ec01000020001000151800006036e7332c035c032000100010001518000043e643805c048000100010001518000043e643806 40709 6b8700000001000000000000026e730773747564696f32026e6c0000010001 6b8780000001000000030001026e730773747564696f32026e6c0000010001c00f0002000100015180000e026e7308767575727765726bc017c00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c049c02b000100010001518000043efa0202 40710 642900000001000000000000036e73320773747564696f32026e6c0000010001 642980000001000000030001036e73320773747564696f32026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 40711 003900000001000000000000036e733108642d736572766572026e6c0000010001 003980000001000000020002036e733108642d736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02d0001000100015180000451045c14c03e0001000100015180000451046032 40712 ff9700000001000000000000036e733108642d736572766572026e6c0000260001 ff9780000001000000020002036e733108642d736572766572026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02d0001000100015180000451045c14c03e0001000100015180000451046032 40713 f4e500000001000000000000096c617370616c6d6173026e6c00001c0001 f4e580000001000000020000096c617370616c6d6173026e6c00001c0001c00c00020001000151800012036e73310b7472616374696f6e2d6974c016c00c00020001000151800006036e7332c02e 40714 3b4b0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 3b4b8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40715 b812ca885011446219c50000000000000000 40716 0000000070024000d8060000020405b401010402 000080010000000000000000 40717 88dd00000001000000000000026e73053266617374026e6c0000010001 88dd80000001000000030003026e73053266617374026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc0290001000100015180000450f7c022c03b000100010001518000043e858122c04d000100010001518000045117eb22 40718 84ed00000001000000000000036e7332053266617374026e6c0000010001 84ed80000001000000030003036e7332053266617374026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a0001000100015180000450f7c022c00c000100010001518000043e858122c04a000100010001518000045117eb22 40719 b9a500000001000000000000036e733503777873026e6c0000010001 b9a580000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 40720 9f9800000001000000000000036e733007686f73746c6162026e6c0000010001 9f9880000001000000020002036e733007686f73746c6162026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c00010001000151800004c3eaad40c03a00010001000151800004c3eaad41 40721 b812ca895010446219c40000000000000000 40722 c0e20000000100000000000003777777106465766f6f726e646572756974657273026e6c0000010001 c0e28403000100000001000003777777106465766f6f726e646572756974657273026e6c0000010001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 40723 22400000000100000000000003667331056c76706161026e6c0000060001 22408000000100000002000203667331056c76706161026e6c0000060001c0100002000100015180000c036e73310573796e7267c016c01000020001000151800006036e7332c02ec02a0001000100015180000452c04b0bc0420001000100015180000452c04b0c 40724 85f4000000010000000000000234370332323503313336033231360964796e61626c6f636b07656173796e6574026e6c0000100001 85f4800000010000000200020234370332323503313336033231360964796e61626c6f636b07656173796e6574026e6c0000100001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 40725 7f81000000010000000000000377777712637370696a2d70726f6475637472616e6765026e6c0000010001 7f81800000010000000200020377777712637370696a2d70726f6475637472616e6765026e6c0000010001c0100002000100015180000c026e7306787334616c6cc023c01000020001000151800006036e7332c03ac03700010001000151800004c26d0642c04f00010001000151800004c26d0963 40726 b81344c45010447003730000000000000000 b813c4c40000000000000000 40727 236e00000001000000000000036e733107737572666e6574026e6c0000010001 236e80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 40728 21d100000001000000000000037777770664616c616368026e6c0000010001 21d180000001000000030003037777770664616c616368026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c017c0100002000100015180000e0b6e616d6573657276657232c037c0100002000100015180000e0b6e616d6573657276657233c037c02b0001000100015180000451ad2020c04f0001000100015180000451ad2021c0690001000100015180000452c049aa 40729 b81344c450184470d4fb00000090b722000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005403677373096d6963726f736f667403636f6d004039b1fc403b037c0003000000314e544c4d535350000100000097b200c00a000a0027000000070007002000000042414e4b4a414e4753492d444f4d41494e0000 b813c4c40000000000000000 40730 377c00000001000000000000023230033230310239330236350770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 377c80000001000000020002023230033230310239330236350770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02c00020001000151800006036e7330c02cc02c00020001000151800006036e7331c02cc04800010001000151800004c2a55e01c05a00010001000151800004c2a55e05 40731 19be0000000100000000000003777777056e65786173026e6c0000010001 19be8000000100000002000003777777056e65786173026e6c0000010001c01000020001000151800015036e73310b7072696f73657276653031036e657400c01000020001000151800006036e7332c02e 40732 96490000000100000000000004686f6d650464656473026e6c0000010001 96498000000100000002000204686f6d650464656473026e6c0000010001c0110002000100015180000c026e73067874646e6574c016c01100020001000151800006036e7331c02dc02a00010001000151800004c16e9d02c04200010001000151800004d9cc165f 40733 b81344d25011446202e00000000000000000 b813c4d40000000000000000 40734 0000000070024000aad60000020405b401010402 000080010000000000000000 40735 b81344d35010446202df0000000000000000 b813c4d40000000000000000 40736 b813e03f501044703ac70000000000000000 40737 04b700000001000000000000036d783103626974026e6c0000010001 04b780000001000000030003036d783103626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 40738 17a000100001000000000001036e733203757063026e6c00000100010000290800000080000000 17a080000001000000030004036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c01410000291000000000000000 40739 b813e03f50184470df7500000090e3fc000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005403677373096d6963726f736f667403636f6d004039b1fc403b037c0003000000314e544c4d535350000100000097b200c00a000a0027000000070007002000000042414e4b4a414e4753492d444f4d41494e0000 40740 b813e04d501144623a340000000000000000 40741 bc160000000100000000000003777777087364636461727473026e6c0000010001 bc168000000100000002000003777777087364636461727473026e6c0000010001c01000020001000151800016036e73350c7265616479686f7374696e6703636f6d00c01000020001000151800006036e7336c031 40742 0ea90000000100000000000003667331056c76706161026e6c0000060001 0ea98000000100000002000203667331056c76706161026e6c0000060001c0100002000100015180000c036e73310573796e7267c016c01000020001000151800006036e7332c02ec02a0001000100015180000452c04b0bc0420001000100015180000452c04b0c 40743 b813e04e501044623a330000000000000000 40744 1cbb00000001000000000000026e730777697a7a626974026e6c0000010001 1cbb80000001000000020002026e730777697a7a626974026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043e3a360bc039000100010001518000043e3a360c 40745 310900000001000000000000036e73320777697a7a626974026e6c0000010001 310980000001000000020002036e73320777697a7a626974026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043e3a360bc00c000100010001518000043e3a360c 40746 733b0000000100000000000003777777127465657577656e6d616b656c61617264696a026e6c0000010001 733b8000000100000003000303777777127465657577656e6d616b656c61617264696a026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c023c01000020001000151800006036e7330c03ac01000020001000151800006036e7333c03ac03700010001000151800004c3561682c05700010001000151800004c3561683c06900010001000151800004d5de0bfa 40747 26bd00000001000000000000046b616476026e6c0000010001 26bd80000001000000030001046b616476026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc011c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c043c025000100010001518000043efa0202 40748 08da000000010000000000000b67656c7265766973696f6e026e6c00000f0001 08da800000010000000200000b67656c7265766973696f6e026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c037 40749 650e00000001000000000000037777771677656c6c6e657373616374696669742d616c6d657265026e6c0000010001 650e84030001000000010000037777771677656c6c6e657373616374696669742d616c6d657265026e6c0000010001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 40750 21e40000000100000000000003666c79036b6c6d026e6c0000010001 21e48000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 40751 6e630000000100000000000003777777086e69746562697465026e6c0000010001 6e638000000100000002000003777777086e69746562697465026e6c0000010001c0100002000100015180001505646e7332300961637469766569737003636f6d00c0100002000100015180000805646e733231c033 40752 6b690000000100000000000005726974656c026e6c00000f0001 6b698000000100000003000105726974656c026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 40753 3bb2000000010000000000000d6d656d6f2d6c656c7973746164026e6c0000010001 3bb2800000010000000300030d6d656d6f2d6c656c7973746164026e6c0000010001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec01ac00c00020001000151800006036e7331c037c00c00020001000151800006036e7332c037c02e00010001000151800004d42d2005c04c00010001000151800004d42d2003c05e00010001000151800004d42d2103 40754 b4aa00000001000000000000037777770d6b61617274656e6b6f6e696e67026e6c0000010001 b4aa80000001000000020001037777770d6b61617274656e6b6f6e696e67026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01ec01000020001000151800006036e7334c036c03200010001000151800004d5c401c0 40755 ba56000000010000000000000b6d6f746976616374696f6e026e6c0000010001 ba56800000010000000200020b6d6f746976616374696f6e026e6c0000010001c00c0002000100015180001004646e73310869636f6d70616e79c018c00c0002000100015180000704646e7332c031c02c000100010001518000043e3a890ac048000100010001518000043e3a890b 40756 ea1000000001000000000000037777770770726f6669656c026e6c0000010001 ea1080000001000000020002037777770770726f6669656c026e6c0000010001c0100002000100015180000a026e730469636d63c018c01000020001000151800006036e7332c02fc02c000100010001518000043e643805c042000100010001518000043e643806 40757 330500000001000000000000037777770964617461616c657274026e6c0000010001 330580000001000000020001037777770964617461616c657274026e6c0000010001c0100002000100015180000b026e7305756e697434c01ac0100002000100015180000d036e7332036b706e036e657400c02e00010001000151800004c1acaf16 40758 661e0000000100000000000003777777096d6f736c696d776562026e6c0000010001 661e8000000100000002000003777777096d6f736c696d776562026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 40759 2d7900000001000000000000026e73067874646e6574026e6c0000010001 2d7980000001000000020002026e73067874646e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c00010001000151800004c16e9d02c03800010001000151800004d9cc165f 40760 9cdb0000000100000000000003777777096d6f64656c63617273026e6c0000010001 9cdb8000000100000003000203777777096d6f64656c63617273026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 40761 34ec00000001000000000000037777770366756e026e6c0000010001 34ec80000001000000020001037777770366756e026e6c0000010001c0100002000100015180000a026e7304696d636fc014c01000020001000151800013036e7332097669727475616c787303636f6d00c028000100010001518000043e81810a 40762 f2c000000001000000000000026e7307706167656e6963026e6c0000010001 f2c080000001000000030001026e7307706167656e6963026e6c0000010001c00f00020001000151800013026e730d7061676570726f636573736f72c017c00f00020001000151800006036e7332c02ec00f0002000100015180000d036e73320663617374656cc017c05c00010001000151800004c3558245 40763 d59500000001000000000000036e733207706167656e6963026e6c0000010001 d59580000001000000030001036e733207706167656e6963026e6c0000010001c01000020001000151800013026e730d7061676570726f636573736f72c018c01000020001000151800006036e7332c02fc0100002000100015180000d036e73320663617374656cc018c05d00010001000151800004c3558245 40764 0b0b00000001000000000000046c79636f026e6c00000f0001 0b0b80000001000000020000046c79636f026e6c00000f0001c00c0002000100015180000d026e7307706167656e6963c011c00c00020001000151800006036e7332c028 40765 6d2100000001000000000000026e7307706167656e6963026e6c0000260001 6d2180000001000000030001026e7307706167656e6963026e6c0000260001c00f00020001000151800013026e730d7061676570726f636573736f72c017c00f00020001000151800006036e7332c02ec00f0002000100015180000d036e73320663617374656cc017c05c00010001000151800004c3558245 40766 1b1a00000001000000000000026e730d7061676570726f636573736f72026e6c0000010001 1b1a80000001000000030001026e730d7061676570726f636573736f72026e6c0000010001c00f0002000100015180000d026e7307706167656e6963c01dc00f00020001000151800006036e7332c034c00f0002000100015180000d036e73320663617374656cc01dc05c00010001000151800004c3558245 40767 d41d00000001000000000000036e73320d7061676570726f636573736f72026e6c0000010001 d41d80000001000000030001036e73320d7061676570726f636573736f72026e6c0000010001c0100002000100015180000d026e7307706167656e6963c01ec01000020001000151800006036e7332c035c0100002000100015180000d036e73320663617374656cc01ec05d00010001000151800004c3558245 40768 0b2600000001000000000000166865747a6f6e6e65687569736265656b62657267656e026e6c0000010001 0b2680000001000000020000166865747a6f6e6e65687569736265656b62657267656e026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c042 40769 d96800000001000000000000037777771464616e63656d696464656e6e656465726c616e64026e6c0000010001 d96880000001000000020002037777771464616e63656d696464656e6e656465726c616e64026e6c0000010001c0100002000100015180000e036e733107706c7567676564c025c01000020001000151800006036e7332c03dc03900010001000151800004c3563906c05300010001000151800004c3563907 40770 d40200000001000000000000036e733107706c7567676564026e6c00001c0001 d40280000001000000020002036e733107706c7567676564026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3563906c03a00010001000151800004c3563907 40771 191800000001000000000000036e733207706c7567676564026e6c00001c0001 191880000001000000020002036e733207706c7567676564026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c3563906c00c00010001000151800004c3563907 40772 01a900000001000000000000087369746573746174076e656473746174026e6c0000010001 01a980000001000000020002087369746573746174076e656473746174026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7333c015c03100010001000151800004d4482615c04200010001000151800004d5c4021d 40773 8ac900000001000000000000057369676d610a676c6f62616c2d6f6e65026e6c0000010001 8ac980000001000000030002057369676d610a676c6f62616c2d6f6e65026e6c0000010001c0120002000100015180000d036e733106657175616e74c01dc01200020001000151800012026e7309676c6f62616c2d6970036e657400c01200020001000151800006036e7332c035c03100010001000151800004c2eb4602c06800010001000151800004c2eb4603 40774 cda80000000100000000000009736368756974656d61026e6c0000ff0001 cda88000000100000002000109736368756974656d61026e6c0000ff0001c00c0002000100015180000d026e7307616d6572636f6dc016c00c00020001000151800006036e7331c02dc02a00010001000151800004c2b2b20a 40775 261e0000000100000000000003777777087364636461727473026e6c0000010001 261e8000000100000002000003777777087364636461727473026e6c0000010001c01000020001000151800016036e73350c7265616479686f7374696e6703636f6d00c01000020001000151800006036e7336c031 40776 d388000000010000000000000c6162786c6f67697374696373026e6c0000ff0001 d388800000010000000200020c6162786c6f67697374696373026e6c0000ff0001c00c000200010001518000110a6c65757665686176656e03696772c019c00c0002000100015180000d0a64656c6673686176656ec038c02d000100010001518000043e2d5e0dc04a000100010001518000043e2d5e82 40777 75700000000100000000000009666579656e6f6f72640b6d65737361676562617365026e6c0000010001 75708000000100000002000009666579656e6f6f72640b6d65737361676562617365026e6c0000010001c01600020001000151800010036e733106726f75746974036e657400c01600020001000151800006036e7332c03a 40778 c2b400000001000000000000036e733203757063026e6c0000010001 c2b480000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 40779 d09b00000001000000000000037777770565626f6e65026e6c0000010001 d09b80000001000000020000037777770565626f6e65026e6c0000010001c0100002000100015180000c036e733105736974726fc016c01000020001000151800006036e7332c02e 40780 c69d00000001000000000000037777770774726170686963026e6c0000010001 c69d80000001000000020000037777770774726170686963026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c030 40781 182b000000010000000000000236350332333303323434033134380770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 182b800000010000000200020236350332333303323434033134380770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02e00020001000151800006036e7330c02ec02e00020001000151800006036e7331c02ec04a00010001000151800004c2a55e01c05c00010001000151800004c2a55e05 40782 d81501000001000000000000097069637365727665720773747564656e7407757477656e7465026e6c0000010001 d81581000001000000030003097069637365727665720773747564656e7407757477656e7465026e6c0000010001c01e00020001000151800006036e7331c01ec01e00020001000151800006036e7332c01ec01e00020001000151800006036e7333c01ec03a0001000100015180000482590102c04c0001000100015180000482590103c05e00010001000151800004c0571113 40783 1a4e00000001000000000000087461786932303030026e6c00000f000100 1a4e80000001000000020002087461786932303030026e6c00000f0001c00c0002000100015180000d036e733106736f6c6c6965c015c00c00020001000151800006036e7332c02dc02900010001000151800004d4ccf609c04200010001000151800004d4ccf60a 40784 325000000001000000000000046265617506736f6c6c6965026e6c0000010001 325080000001000000020002046265617506736f6c6c6965026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02c00010001000151800004d4ccf609c03e00010001000151800004d4ccf60a 40785 784b000000010000000000000a45415254482d4c494e4b024e4c00000f0001 784b800000010000000300010a45415254482d4c494e4b024e4c00000f0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 40786 f24200000001000000000000037777770a7374617274706f696e74026e6c0000010001 f24280000001000000020002037777770a7374617274706f696e74026e6c0000010001c0100002000100015180000f04646e7331076e65647a6f6e65c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d9aa0101c04a00010001000151800004d9aa0128 40787 014b00000001000000000000046a6f6c6f026e6c0000ff0001 014b80000001000000030002046a6f6c6f026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 40788 8381000000010000000000000377777706706365786974026e6c0000010001 8381840300010000000100000377777706706365786974026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 40789 6f0e00000001000000000000064442534552560354454d034e484c024e4c0000010001 6f0e80000001000000030003064442534552560354454d034e484c024e4c0000010001c0170002000100015180000603646e73c017c0170002000100015180000704646e7332c017c0170002000100015180000e036e733107737572666e6574c01bc02f000100010001518000048dfc0103c041000100010001518000048dfc0104c05400010001000151800004c0576a65 40790 77390000000100000000000003444e53034e484c024e4c0000010001 77398000000100000003000303444e53034e484c024e4c0000010001c01000020001000151800002c00cc0100002000100015180000704646e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c000100010001518000048dfc0103c036000100010001518000048dfc0104c04900010001000151800004c0576a65 40791 bb8e00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 bb8e80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40792 21eb0000000100000000000009652d6c756e61746963026e6c0000010001 21eb8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 40793 f3ff00000001000000000000066d68696d6565026e6c00000f0001 f3ff80000001000000020002066d68696d6565026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 40794 f69900000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 f69980000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40795 929e0000000100000000000008706172746e657273066962617a6172026e6c0000010001 929e8000000100000003000008706172746e657273066962617a6172026e6c0000010001c0150002000100015180001608736a632d646e73310765626179646e7303636f6d00c015000200010001518000110963726f636f64696c650465626179c041c0150002000100015180000b08736a632d646e7332c039 40796 095b00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 095b80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40797 61c100000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 61c180000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 40798 c3dc0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 c3dc8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 40799 77cb0000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 77cb8000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 40800 f17a0000000100000000000014534d49544853534e4f475241535359414d414841026e6c0000020001 f17a8403000100000001000014534d49544853534e4f475241535359414d414841026e6c0000020001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 40801 ae7e00000001000000000000066368656c6c6f026e6c00000f0001 ae7e80000001000000030003066368656c6c6f026e6c00000f0001c00c00020001000151800007046e733031c00cc00c00020001000151800007046e733032c00cc00c0002000100015180000a036e733103757063c013c02700010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 40802 621200000001000000000000055f6c646170045f74637003706463065f6d73646373084a4844654c696572044a48444c026e6c0000060001 621284030001000000010000055f6c646170045f74637003706463065f6d73646373084a4844654c696572044a48444c026e6c0000060001c03000060001000038400036026e730f646f6d61696e2d7265676973747279c0300a686f73746d6173746572c0470bf1e540000070800000384000278d0000003840 40803 679800000001000000000000036e7331046372696f026e6c0000010001 679880000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40804 0c9d00000001000000000000036e7332046372696f026e6c0000010001 0c9d80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40805 446500000001000000000000037777770a72656372656174696566026e6c0000010001 446580000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 40806 33df00000001000000000000036e7335046372696f026e6c0000010001 33df80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40807 a0cf00000001000000000000036e7336046372696f026e6c0000010001 a0cf80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40808 8ad3000000010000000000000377777703776562026e6c0000010001 8ad3800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 40809 61ee00000001000000000000037777770a72656372656174696566026e6c0000010001 61ee80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 40810 f095000000010000000000000377777703776562026e6c0000010001 f095800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 40811 138700000001000000000000037777770a72656372656174696566026e6c0000010001 138780000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 40812 7896000000010000000000000377777703776562026e6c0000010001 7896800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 40813 605900000001000000000000037777770a72656372656174696566026e6c0000010001 605980000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 40814 b457000000010000000000000377777703776562026e6c0000010001 b457800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 40815 7f5000000001000000000000037777770a72656372656174696566026e6c0000010001 7f5080000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 40816 7e48000000010000000000000377777703776562026e6c0000010001 7e48800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 40817 294c00000001000000000000037777770a72656372656174696566026e6c0000010001 294c80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 40818 bce6000000010000000000000377777703776562026e6c0000010001 bce6800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 40819 258c000000010000000000000377777703776562026e6c0000010001 258c800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 40820 731c00000001000000000000037777770a72656372656174696566026e6c0000010001 731c80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 40821 9b0200000001000000000000036e7331046372696f026e6c0000010001 9b0280000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40822 0f2a00000001000000000000036e7332046372696f026e6c0000010001 0f2a80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40823 7c6800000001000000000000036e7335046372696f026e6c0000010001 7c6880000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40824 bde900000001000000000000036e7336046372696f026e6c0000010001 bde980000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 40825 ed5828000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d7364637309706972616d6964656e026e6c0000210001000002580021000000640cc40c736273706972616d6964656e09706972616d6964656e026e6c00 ed58a8040000000000000000 40826 0000000070024000322000000204057a01010402 000080010000000000000000 40827 386a000000010000000000002465346463376233382d326635642d346138312d613939372d326135343931393066336365065f6d736463730b6f706c656964696e67656e0673696c766163026e6c0000060001 386a800000010000000200022465346463376233382d326635642d346138312d613939372d326135343931393066336365065f6d736463730b6f706c656964696e67656e0673696c766163026e6c0000060001c0440002000100015180000c026e7306787334616c6cc04bc04400020001000151800006036e7332c062c05f00010001000151800004c26d0642c07700010001000151800004c26d0963 40828 b81609ca501041b89b010000000000000000 b81689c40000000000000000 40829 b81609ca501841b82920000000944f25000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa6a403c4bea0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000 b81689c40000000000000000 40830 e026000000010000000000000870726f647677303704636d7367026e6c0000010001 e026800000010000000200010870726f647677303704636d7367026e6c0000010001c01500020001000151800006036e7331c015c0150002000100015180000d036e7332036b706e036e657400c02e00010001000151800004c2976c83 40831 f25500000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 f25580000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 40832 62990000000100000000000003706f70056176697369026e6c00001c0001 62998000000100000003000203706f70056176697369026e6c00001c0001c0100002000100015180000d036e733106776964657873c016c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 40833 b81609d8501141aa9a6a0000000000000000 b81689d40000000000000000 40834 0000000070024000436000000204057a01010402 000080010000000000000000 40835 b81609d9501041aa9a690000000000000000 b81689d40000000000000000 40836 b81695d2501041b820390000000000000000 40837 b81695d2501841b87aad0000009483d0000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa6a403c4bea0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000 40838 b81695e0501141aa1fa20000000000000000 40839 00000000700240000b3700000204057a01010402 000080010000000000000000 40840 602d00000001000000000000037777770d62732d7374616e746f6e697573026e6c0000010001 602d80000001000000020002037777770d62732d7374616e746f6e697573026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c01ec01000020001000151800006036e7332c036c03200010001000151800004d4b20403c04b00010001000151800004d5881e45 40841 b81695e1501041aa1fa10000000000000000 40842 b68f00000001000000000000095354494e4b42454154026e6c0000020001 b68f84030001000000010000095354494e4b42454154026e6c0000020001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 40843 b8171898501041b865490000000000000000 b81798940000000000000000 40844 0be90000000100000000000003626c3102626c06787334616c6c026e6c0000010001 0be98000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40845 b8171898501841b8206e000000942320000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa6a403c4bea0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000 b81798940000000000000000 40846 c53a00000001000000000000036e733109666972737466696e64026e6c0000010001 c53a80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40847 39e7000000010000000000000a766574687265616c7479026e6c00000f0001 39e7800000010000000200020a766574687265616c7479026e6c00000f0001c00c0002000100015180000e07646e732d70726903626f78c017c00c0002000100015180000a07646e732d736563c033c02b00010001000151800004d97700fac04500010001000151800004d97704fa 40848 eda500000001000000000000036e733209666972737466696e64026e6c0000010001 eda580000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40849 721e0000000100000000000007646e732d73656303626f78026e6c0000010001 721e8000000100000002000207646e732d73656303626f78026e6c0000010001c0140002000100015180000a07646e732d707269c014c01400020001000151800002c00cc02c00010001000151800004d97700fac00c00010001000151800004d97704fa 40850 2fd70000000100000000000007646e732d70726903626f78026e6c0000010001 2fd78000000100000002000207646e732d70726903626f78026e6c0000010001c01400020001000151800002c00cc0140002000100015180000a07646e732d736563c014c00c00010001000151800004d97700fac03a00010001000151800004d97704fa 40851 b81718a6501141aa64b20000000000000000 b81798a40000000000000000 40852 c94e0000000100000000000005646e732d31056c61646f74026e6c0000010001 c94e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40853 6d0d0000000100000000000005646e732d32056c61646f74026e6c0000010001 6d0d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40854 b81718a7501041aa64b10000000000000000 b81798a40000000000000000 40855 0bf028000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d73646373084a4844654c696572044a48444c026e6c00002100010000025800230000006401850a6a6864656c6965723031084a4844654c696572044a48444c026e6c00 0bf0a8040000000000000000 40856 932600000001000000000000036e733109666972737466696e64026e6c0000010001 932680000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40857 000000007002faf052f200000204057a01010402 000080010000000000000000 40858 f1e700000001000000000000036e733209666972737466696e64026e6c0000010001 f1e780000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 40859 774e00000001000000000000026e730763697374726f6e026e6c0000010001 774e80000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 40860 b817bc735010fbec09e50000000000000000 40861 cf40000000010000000000000a646f6773657276696365026e6c0000ff0001 cf40800000010000000200020a646f6773657276696365026e6c0000ff0001c00c0002000100015180000e036e73310774696b6b6c696bc017c00c00020001000151800006036e7332c02fc02b00010001000151800004d5c40902c045000100010001518000043eddd512 40862 b817bc735018fbecebda00000091c518000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403af82a403c49aa0003000000324e544c4d535350000100000097b208e0080008002a0000000a000a00200000004a4844454c49455230314a4844454c4945520000 40863 b817bc815011fbde09510000000000000000 40864 a85a0000000100000000000003777777077269636172646f026e6c0000010001 a85a8000000100000003000303777777077269636172646f026e6c0000010001c0100002000100015180000a036e733103676d74c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004d44eb80dc042000100010001518000043ea6a022c05400010001000151800004d554c485 40865 000000007002faf0d21400000204057a01010402 000080010000000000000000 40866 d88a0000000100000000000003686868026e6c00000f0001 d88a8000000100000003000103686868026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 40867 b817bc825010fbde09500000000000000000 40868 12be00000001000000000000037777770d7468652d636f6c6c6563746f72026e6c0000010001 12be80000001000000030002037777770d7468652d636f6c6c6563746f72026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 40869 b818a4a45010fbeca0d50000000000000000 40870 e01800000001000000000000066d61696c6d65026e6c0000010001 e01880000001000000030002066d61696c6d65026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 40871 b818a4a45018fbec05b5000000914330000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af82a403c49aa0003000000324e544c4d535350000100000097b208e0080008002a0000000a000a00200000004a4844454c49455230314a4844454c4945520000 40872 b80e0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 b80e8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 40873 b818a4b25011fbdea0410000000000000000 40874 000000007002faf01cad00000204057a01010402 000080010000000000000000 40875 b818a4b35010fbdea0400000000000000000 40876 d9c600000001000000000000036674700964657265646572696a026e6c0000010001 d9c680000001000000030003036674700964657265646572696a026e6c0000010001c01000020001000151800010036e733109736974656279746573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004c2a55e5ac04a00010001000151800004c356781cc05c000100010001518000043ec58016 40877 b8198d495010fbec02c80000000000000000 40878 b8198d495018fbeccd2600000091ddb0000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af82a403c49aa0003000000324e544c4d535350000100000097b208e0080008002a0000000a000a00200000004a4844454c49455230314a4844454c4945520000 40879 096500000001000000000000056d61696c3405706c616e74026e6c0000010001 096580000001000000020002056d61696c3405706c616e74026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c02c00010001000151800004d59f0037c03d00010001000151800004d59f0046 40880 6d0400000001000000000000037777770c7569747a656e6275726f2773026e6c0000010001 6d0484030001000000010000037777770c7569747a656e6275726f2773026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40881 05fc000000010000000000000377777712746574726f6465656e67696e656572696e67026e6c0000010001 05fc800000010000000200000377777712746574726f6465656e67696e656572696e67026e6c0000010001c01000020001000151800017026e7309726f7474657264616d046c756e61036e657400c0100002000100015180000f026e7309686f6f6664646f7270c044 40882 b8198d575011fbde02340000000000000000 40883 e8c3000000010000000000000f726176656e2d616476656e74757265026e6c0000010001 e8c3800000010000000200000f726176656e2d616476656e74757265026e6c0000010001c00c0002000100015180000c036e723505692d702d64c01cc00c00020001000151800006036e7236c034 40884 b8198d585010fbde02330000000000000000 40885 9535000000010000000000000377777709696e74657263617374026e6c0000010001 9535800000010000000200000377777709696e74657263617374026e6c0000010001c0100002000100015180000c026e7306766576696461c01ac01000020001000151800006036e7332c031 40886 89c100000001000000000000036e73320c696e746572636f6e6e656374026e6c0000010001 89c180000001000000030003036e73320c696e746572636f6e6e656374026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03100010001000151800004d453c005c00c00010001000151800004d453c006c05000010001000151800004d453c805 40887 852900000001000000000000026e730c696e746572636f6e6e656374026e6c0000010001 852980000001000000030003026e730c696e746572636f6e6e656374026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004d453c005c03e00010001000151800004d453c006c05000010001000151800004d453c805 40888 cacd00000001000000000000026e73076e6f632d6e7366026e6c0000010001 cacd80000001000000020001026e73076e6f632d6e7366026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000f067365727669780574756e6978c017c00c00010001000151800004c372eb02 40889 f2d900000001000000000000036a7263026e6c00000f0001 f2d980000001000000020002036a7263026e6c00000f0001c00c0002000100015180000a0769616d2d707562c00cc00c000200010001518000070473697375c00cc024000100010001518000048bbfcf14c03a000100010001518000048bbfcf19 40890 873a0010000100000000000106617363696e74026e6c00000f00010000290800000000000000 873a8000000100000002000306617363696e74026e6c00000f0001c00c0002000100015180000b036e73310461786974c013c00c00020001000151800006036e7332c02bc027000100010001518000043e3a440bc03e000100010001518000043e3a440c0000291000000000000000 40891 4e9400000001000000000000097069637365727665720773747564656e7407757477656e7465026e6c0000010001 4e9480000001000000030003097069637365727665720773747564656e7407757477656e7465026e6c0000010001c01e00020001000151800006036e7331c01ec01e00020001000151800006036e7332c01ec01e00020001000151800006036e7333c01ec03a0001000100015180000482590102c04c0001000100015180000482590103c05e00010001000151800004c0571113 40892 85de000000010000000000000b6d616e2d61742d776f726b026e6c00000f0001 85de800000010000000200010b6d616e2d61742d776f726b026e6c00000f0001c00c0002000100015180000c026e7306636f62776562c018c00c00020001000151800006036e7333c02fc02c0001000100015180000450f26001 40893 418900000001000000000000037777770b6c696f6e732d736e65656b026e6c0000010001 418980000001000000020000037777770b6c696f6e732d736e65656b026e6c0000010001c0100002000100015180000d036e733106766976656e73c01cc01000020001000151800006036e7332c034 40894 819800000001000000000000036e733106766976656e73026e6c0000010001 819880000001000000020002036e733106766976656e73026e6c0000010001c0100002000100015180000e036e7331076a646e686f7374c017c01000020001000151800006036e7332c02fc02b000100010001518000045054e451c045000100010001518000045054e452 40895 848c00000001000000000000036e733206766976656e73026e6c0000010001 848c80000001000000020002036e733206766976656e73026e6c0000010001c0100002000100015180000e036e7331076a646e686f7374c017c01000020001000151800006036e7332c02fc02b000100010001518000045054e451c045000100010001518000045054e452 40896 8cfd00000001000000000000037777770b6c616e6b6174726176656c026e6c0000010001 8cfd80000001000000020002037777770b6c616e6b6174726176656c026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 40897 149d000000010000000000000a7a6f6d686f6c6c616e6406787334616c6c026e6c0000010001 149d800000010000000300020a7a6f6d686f6c6c616e6406787334616c6c026e6c0000010001c01700020001000151800005026e73c017c01700020001000151800006036e7332c017c0170002000100015180000d026e730472697065036e657400c03200010001000151800004c26d0642c04300010001000151800004c26d0963 40898 11a20000000100000000000003777777116b696e6465727374617274706167696e61026e6c0000010001 11a28000000100000002000003777777116b696e6465727374617274706167696e61026e6c0000010001c0100002000100015180000c026e7306766576696461c022c01000020001000151800006036e7332c039 40899 4204000000010000000000000567656e7473026e6c00000f0001 4204800000010000000300010567656e7473026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 40900 472400000001000000000000037777770e6c696665616e64636f6f6b696e67026e6c0000010001 472480000001000000020000037777770e6c696665616e64636f6f6b696e67026e6c0000010001c0100002000100015180000d036e733103326d6203636f6d00c01000020001000151800006036e7332c037 40901 38d000000001000000000000037777770c6e6577696e74657266617365026e6c0000010001 38d084030001000000010000037777770c6e6577696e74657266617365026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40902 5d10000000010000000000000866616c6c6261636b08767575727765726b026e6c0000010001 5d10800000010000000300010866616c6c6261636b08767575727765726b026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 40903 207600000001000000000000046d61696c16616c766c6565736b6c696572766572656e6967696e67026e6c0000010001 207680000001000000020000046d61696c16616c766c6565736b6c696572766572656e6967696e67026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c042 40904 481700000001000000000000046d61696c16616c766c6565736b6c696572766572656e6967696e67026e6c0000010001 481780000001000000020000046d61696c16616c766c6565736b6c696572766572656e6967696e67026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c042 40905 731100000001000000000000086d61696c686f737405696e6e6574026e6c0000010001 731180000001000000020000086d61696c686f737405696e6e6574026e6c0000010001c0150002000100015180000d026e7304696e6265036e657400c01500020001000151800006036e6963c032 40906 a39400000001000000000000067365727669780574756e6978026e6c0000010001 a39480000001000000030002067365727669780574756e6978026e6c0000010001c0130002000100015180000906626173746978c013c0130002000100015180000e036e733103736369036b756ec019c0130002000100015180000b026e73026e6c036e657400c02d00010001000151800004c14fc927c0420001000100015180000483aee004 40907 34e900000001000000000000026763065f6d736463730970726b766477696c64026e6c0000060001 34e984030001000000010000026763065f6d736463730970726b766477696c64026e6c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 40908 a63a0000000100000000000006617363696e74026e6c00000f0001 a63a8000000100000002000206617363696e74026e6c00000f0001c00c0002000100015180000b036e73310461786974c013c00c00020001000151800006036e7332c02bc027000100010001518000043e3a440bc03e000100010001518000043e3a440c 40909 1d6328000001000000010000024e4c0000060001055f6c646170045f746370026763065f6d7364637306574e54504d4d024e4c0000210001000002580018000000640cc406776e74706d6d06574e54504d4d024e4c00 1d63a8040000000000000000 40910 ae7828000001000000010000026e6c0000060001026763065f6d736463730970726b766477696c64026e6c0000010001000002580004c0a80101 ae78a8040000000000000000 40911 a4f200000001000000000000037777770c6e6577696e74657266617365026e6c0000010001 a4f284030001000000010000037777770c6e6577696e74657266617365026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 40912 000000007002faf0686900000204055001010402 000080010000000000000000 40913 76a10000000100000000000004706f70330f6472756b6b6572696a6d757365756d026e6c0000010001 76a18000000100000003000104706f70330f6472756b6b6572696a6d757365756d026e6c0000010001c0110002000100015180000e026e7308767575727765726bc021c01100020001000151800012036e733208767575727765726b036e657400c01100020001000151800006036e7333c053c035000100010001518000043efa0202 40914 dff900100001000000000001056132303030026e6c00000f00010000290800000000000000 dff980000001000000030003056132303030026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e733109756e69736f75726365c012c00c00020001000151800006036e7332c00cc026000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 40915 b81b91965010ff0046f70000000000000000 40916 b81b91965018ff00d263000000923613000000010001000000000f313531313832383438383231302d330000f900010f313531313832383438383231302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b001a403c519a0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 40917 00000000700240008b6f0000020405b401010402 000080010000000000000000 40918 b81b91a45011fef246620000000000000000 40919 000000007002faf0c61600000204055001010402 000080010000000000000000 40920 b81b91a55010fef246610000000000000000 40921 b81cbbfa5010ff007a3f0000000000000000 40922 c67200000001000000000000037777770f70726f6a6563742d646f6c7068696e026e6c0000010001 c67280000001000000020002037777770f70726f6a6563742d646f6c7068696e026e6c0000010001c01000020001000151800010036e733109686f7374696e677873c020c01000020001000151800006036e7332c038c034000100010001518000043ed45245c050000100010001518000045054e9de 40923 b644000000010000000000000377777709736f6c6c657973656c026e6c0000010001 b644800000010000000300030377777709736f6c6c657973656c026e6c0000010001c01000020001000151800011036e73310a74727565736572766572c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ef8003c04b00010001000151800004d5efb004c05d00010001000151800004d5ef8005 40924 24a5000000010000000000000866616c6c6261636b08767575727765726b026e6c0000010001 24a5800000010000000300010866616c6c6261636b08767575727765726b026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 40925 b81c194650104470e2500000000000000000 b81c99440000000000000000 40926 b81cbbfa5018ff003f8e00000092fd31000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b001a403c519a0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 40927 437200000001000000000000037777770a6465626c6f656d697374026e6c0000010001 437280000001000000020002037777770a6465626c6f656d697374026e6c0000010001c0100002000100015180000f036e733108636f6d707574656cc01bc01000020001000151800006036e7332c033c02f00010001000151800004c3568680c04a00010001000151800004c3568681 40928 b81cbc085011fef279aa0000000000000000 40929 6c1400000001000000000000037777770a6865696e656e686f6573026e6c0000010001 6c1480000001000000020000037777770a6865696e656e686f6573026e6c0000010001c0100002000100015180000c026e7306766576696461c01bc01000020001000151800006036e7332c032 40930 000000007002faf0092500000204055001010402 000080010000000000000000 40931 1c760000000100000000000008747269746f6e31310761626e616d726f026e6c0000010001 1c768000000100000002000208747269746f6e31310761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c0150002000100015180000b0870686f626f733032c015c03100010001000151800004a7cac30bc04800010001000151800004a7cac30c 40932 897f0000000100000000000003777777056d656e7535026e6c0000010001 897f8403000100000001000003777777056d656e7535026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 40933 636600000001000000000000076d656d62657273066368656c6c6f026e6c0000010001 636680000001000000030003076d656d62657273066368656c6c6f026e6c0000010001c01400020001000151800007046e733031c014c01400020001000151800007046e733032c014c0140002000100015180000a036e733103757063c01bc02f00010001000151800004d4534482c04200010001000151800004d4534483c05500010001000151800004d48e1c42 40934 b81c1946501844707e040000008cd8b0000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd1e403c4e9e00030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000 b81c99440000000000000000 40935 b81da63a5010ff00d30c0000000000000000 40936 b81da63a5018ff00d13d00000092c44f000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b001a403c519a0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 40937 b81da6485011fef2d2770000000000000000 40938 b81c195450114462e1c10000000000000000 b81c99540000000000000000 40939 b81da6495010fef2d2760000000000000000 40940 045c00100001000000000001024e530743495354524f4e024e4c00000100010000290800000080000000 045c80000001000000020003024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f380000291000000000000000 40941 37c90000000100000000000007766462636f6d70026e6c00001c0001 37c98000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 40942 0000000070024000572f0000020405b401010402 000080010000000000000000 40943 b81c195550104462e1c00000000000000000 b81c99540000000000000000 40944 b81e3ea55010447088af0000000000000000 b81ebea40000000000000000 40945 e222000000010000000000000377777715616d7374657264616d736562696e6e656e73746164026e6c0000010001 e222800000010000000200020377777715616d7374657264616d736562696e6e656e73746164026e6c0000010001c0100002000100015180000c026e7306787334616c6cc026c01000020001000151800006036e7332c03dc03a00010001000151800004c26d0642c05200010001000151800004c26d0963 40946 b81e3ea550184470b8510000008c45c3000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd1e403c4e9e00030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000 b81ebea40000000000000000 40947 72340000000100000000000003626c3102626c06787334616c6c026e6c0000010001 72348000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40948 bf9a0000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 bf9a8000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40949 3f870000000100000000000003626c3102626c06787334616c6c026e6c0000260001 3f878000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40950 7c1e0000000100000000000007736179626f6c74026e6c0000010001 7c1e8000000100000002000007736179626f6c74026e6c0000010001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02c 40951 b81e3eb35011446288200000000000000000 b81ebeb40000000000000000 40952 000328000001000200000000026e6c0000060001066c6170746f700977696a6e7472616e73026e6c00000500fe000000000000c014000100010000000000040a0719f2 0003a8040000000000000000 40953 230d0000000100000000000003777777036b7a61026e6c0000010001 230d8000000100000002000003777777036b7a61026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 40954 f89c00000001000000000000024e530743495354524f4e024e4c0000010001 f89c80000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 40955 000000007002400007d90000020405b401010402 000080010000000000000000 40956 4fab00000001000000000000136175736d612d766f726b686566747275636b73026e6c0000010001 4fab80000001000000020002136175736d612d766f726b686566747275636b73026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c020c00c00020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 40957 b807000000010000000000000b77696d6272756767696e6b026e6c00000f0001 b807800000010000000300010b77696d6272756767696e6b026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc018c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ac02c000100010001518000043efa0202 40958 38a400000001000000000000046d61696c0b67656c7265766973696f6e026e6c0000010001 38a480000001000000020000046d61696c0b67656c7265766973696f6e026e6c0000010001c0110002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0110002000100015180000d077669312d6e7330026174c03c 40959 628b0000000100000000000006787334616c6c026e6c00000f0001 628b8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 40960 b81e3eb450104462881f0000000000000000 b81ebeb40000000000000000 40961 485700000001000000000000037777770b64656d616b656c61617273026e6c0000010001 485780000001000000020000037777770b64656d616b656c61617273026e6c0000010001c0100002000100015180000e026e7305702d69637403636f6d00c01000020001000151800012026e7309646970737769746368036f726700 40962 b81eec12501044708beb0000000000000000 40963 5c15000000010000000000000974696e6b6f6570656c026e6c00000f0001 5c15800000010000000200020974696e6b6f6570656c026e6c00000f0001c00c00020001000151800013036e73310c62656472696a76656e776562c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d90867fec04900010001000151800004c1ad2bfe 40964 da3e00000001000000000000037777770d6f7269656e747569747a656e64026e6c0000010001 da3e80000001000000020002037777770d6f7269656e747569747a656e64026e6c0000010001c0100002000100015180000b036e733104666b6b63c01ec01000020001000151800006036e7332c036c03200010001000151800004d5c40325c04900010001000151800004d5c42f66 40965 b81eec125018447092a40000008c6eac000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd1e403c4e9e00030000002d4e544c4d535350000100000097b208e007000700260000000600060020000000574e54504d4d574e545f504d4d0000 40966 73c300000001000000000000037777770a62726f6572656e7a7573026e6c0000010001 73c380000001000000030001037777770a62726f6572656e7a7573026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 40967 824f0000000100000000000005646e732d32056c61646f74026e6c0000010001 824f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 40968 cf080000000100000000000014626c6f656d656e687569732d61647269656e6e65026e6c00000f0001 cf088000000100000003000214626c6f656d656e687569732d61647269656e6e65026e6c00000f0001c00c0002000100015180000d036e733106776964657873c021c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c039c03500010001000151800004d4ccc0fcc06a000100010001518000043efa0703 40969 b81eec20501144628b5c0000000000000000 40970 7fa60000000100000000000003626c3102626c06787334616c6c026e6c0000010001 7fa68000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 40971 634300000001000000000000066d61696c30320877656278706f7365026e6c0000010001 634380000001000000030003066d61696c30320877656278706f7365026e6c0000010001c01300020001000151800011036e73310a74727565736572766572c01cc01300020001000151800006036e7332c034c01300020001000151800006036e7333c034c03000010001000151800004d5ef8003c04d00010001000151800004d5efb004c05f00010001000151800004d5ef8005 40972 c36c00000001000000000000066d61696c30320877656278706f7365026e6c00001c0001 c36c80000001000000030003066d61696c30320877656278706f7365026e6c00001c0001c01300020001000151800011036e73310a74727565736572766572c01cc01300020001000151800006036e7332c034c01300020001000151800006036e7333c034c03000010001000151800004d5ef8003c04d00010001000151800004d5efb004c05f00010001000151800004d5ef8005 40973 04cc00000001000000000000066d61696c30320877656278706f7365026e6c0000260001 04cc80000001000000030003066d61696c30320877656278706f7365026e6c0000260001c01300020001000151800011036e73310a74727565736572766572c01cc01300020001000151800006036e7332c034c01300020001000151800006036e7333c034c03000010001000151800004d5ef8003c04d00010001000151800004d5efb004c05f00010001000151800004d5ef8005 40974 1fe00000000100000000000005767363616e0477787073026e6c0000010001 1fe08000000100000003000305767363616e0477787073026e6c0000010001c01200020001000151800011036e73310a74727565736572766572c017c01200020001000151800006036e7332c02fc01200020001000151800006036e7333c02fc02b00010001000151800004d5ef8003c04800010001000151800004d5efb004c05a00010001000151800004d5ef8005 40975 d3180000000100000000000005767363616e0477787073026e6c00001c0001 d3188000000100000003000305767363616e0477787073026e6c00001c0001c01200020001000151800011036e73310a74727565736572766572c017c01200020001000151800006036e7332c02fc01200020001000151800006036e7333c02fc02b00010001000151800004d5ef8003c04800010001000151800004d5efb004c05a00010001000151800004d5ef8005 40976 33260000000100000000000005767363616e0477787073026e6c0000260001 33268000000100000003000305767363616e0477787073026e6c0000260001c01200020001000151800011036e73310a74727565736572766572c017c01200020001000151800006036e7332c02fc01200020001000151800006036e7333c02fc02b00010001000151800004d5ef8003c04800010001000151800004d5efb004c05a00010001000151800004d5ef8005 40977 16500000000100000000000003777777137072697661746562726f616463617374696e67026e6c0000010001 16508000000100000003000303777777137072697661746562726f616463617374696e67026e6c0000010001c0100002000100015180000f036e7331086e6f766178657373c024c01000020001000151800006036e7332c03cc01000020001000151800006036e7333c03cc03800010001000151800004d5c98015c05300010001000151800004d5c9bf12c06500010001000151800004d5ef9c26 40978 b81eec21501044628b5b0000000000000000 40979 d82101000001000000000000097069637365727665720773747564656e7407757477656e7465026e6c0000010001 d82181000001000000030003097069637365727665720773747564656e7407757477656e7465026e6c0000010001c01e00020001000151800006036e7331c01ec01e00020001000151800006036e7332c01ec01e00020001000151800006036e7333c01ec03a0001000100015180000482590102c04c0001000100015180000482590103c05e00010001000151800004c0571113 40980 590500000001000000000000037777770a7374617274706f696e74026e6c0000010001 590580000001000000020002037777770a7374617274706f696e74026e6c0000010001c0100002000100015180000f04646e7331076e65647a6f6e65c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d9aa0101c04a00010001000151800004d9aa0128 40981 3d8800000001000000000000035f6763045f74637009636f726e776f726c64026e6c0000060001 3d8884030001000000010000035f6763045f74637009636f726e776f726c64026e6c0000060001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 40982 7fda0000000100000000000005656d616765026e6c00000f0001 7fda8000000100000003000205656d616765026e6c00000f0001c00c0002000100015180000d036e733106776964657873c012c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02ac02600010001000151800004d4ccc0fcc05b000100010001518000043efa0703 40983 36e00000000100000000000002383302363403313438033230360770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 36e08000000100000002000202383302363403313438033230360770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 40984 96ef000000010000000000000377777709626f6572696e6e656e026e6c0000010001 96ef800000010000000200000377777709626f6572696e6e656e026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 40985 390800000001000000000000036e73330a74727565736572766572024e4c0000010001 390880000001000000030003036e73330a74727565736572766572024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f00010001000151800004d5ef8003c04100010001000151800004d5efb004c00c00010001000151800004d5ef8005 40986 eb4f0000000100000000000008706172746e657273066962617a6172026e6c0000010001 eb4f8000000100000003000008706172746e657273066962617a6172026e6c0000010001c0150002000100015180001608736a632d646e73310765626179646e7303636f6d00c015000200010001518000110963726f636f64696c650465626179c041c0150002000100015180000b08736a632d646e7332c039 40987 442f000000010000000000000b776f726c646f6e6c696e65026e6c00000f0001 442f800000010000000300020b776f726c646f6e6c696e65026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c018c00c0002000100015180000704616e7332c031c00c0002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c04700010001000151800004c3f13325 40988 f1600000000100000000000003646473026e6c00000f0001 f1608000000100000003000303646473026e6c00000f0001c00c00020001000151800017036e733110736361726c65742d696e7465726e6574c010c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028c02400010001000151800004d5ccc302c04700010001000151800004d5ccc303c05900010001000151800004c277e953 40989 9ae000000001000000000000036e7331066d696e646566026e6c0000010001 9ae080000001000000020002036e7331066d696e646566026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9a9e7c6c03900010001000151800004d9a9e7c5 40990 3f1900000001000000000000036e7332066d696e646566026e6c0000010001 3f1980000001000000020002036e7332066d696e646566026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d9a9e7c6c00c00010001000151800004d9a9e7c5 40991 3fe4000000010000000000000666726961636f026e6c00000f0001 3fe4800000010000000200000666726961636f026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 40992 55cd000000010000000000000f76696e63656e742d76642d626f726e026e6c00000f0001 55cd800000010000000200010f76696e63656e742d76642d626f726e026e6c00000f0001c00c0002000100015180000a036e733303777873c01cc00c00020001000151800006036e7334c034c04600010001000151800004d5ef9a65 40993 413028000001000000010000026e6c0000060001035f6763045f74637009636f726e776f726c64026e6c000021000100000258001b000000640cc406746f746f726f09636f726e776f726c64026e6c00 4130a8040000000000000000 40994 113a00000001000000000000086e732d69736d30310963617067656d696e69026e6c0000010001 113a80000001000000030003086e732d69736d30310963617067656d696e69026e6c0000010001c01500020001000151800007046e736531c015c01500020001000151800007046e736532c015c01500020001000151800002c00cc03300010001000151800004c6b8e70dc04600010001000151800004c6b8e70cc00c00010001000151800004d5f4a024 40995 6573000000010000000000000c6c7562626572736571756970026e6c00000f0001 6573840300010000000100000c6c7562626572736571756970026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 40996 1e93000000010000000000000c636f6e63657074732d69637408636f6e6365707473026e6c0000010001 1e93800000010000000200020c636f6e63657074732d69637408636f6e6365707473026e6c0000010001c0190002000100015180001103646e730a636f6e63657074736661c022c0190002000100015180000704646e7332c019c03600010001000151800004d5c51c03c05300010001000151800004d5c51e1c 40997 825c00000001000000000000037777770c666f746f6461746162617365026e6c0000010001 825c80000001000000020002037777770c666f746f6461746162617365026e6c0000010001c01000020001000151800012036e73310b706c7573686f7374696e67c01dc01000020001000151800006036e7332c035c03100010001000151800004d994ae77c04f000100010001518000045054ea06 40998 6b1100000001000000000000037777770962617369712d636172026e6c0000010001 6b1180000001000000020000037777770962617369712d636172026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c034 40999 8c68000000010000000000000a626c61636b626f61726409696e686f6c6c616e64026e6c0000010001 8c68800000010000000200020a626c61636b626f61726409696e686f6c6c616e64026e6c0000010001c01700020001000151800006036e7331c017c0170002000100015180000e036e733107737572666e6574c021c03500010001000151800004c2ab230bc04700010001000151800004c0576a65 41000 87d000000001000000000000037777770864656d616e746173026e6c0000010001 87d080000001000000020000037777770864656d616e746173026e6c0000010001c01000020001000151800011036e73310a747265666e6574646e73c019c01000020001000151800006036e7332c031 41001 000000007002400010370000020405b401010402 000080010000000000000000 41002 ee910000000100000000000009636865636b73746174026e6c0000010001 ee918000000100000002000109636865636b73746174026e6c0000010001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c02a00010001000151800004d4ccc0fc 41003 a80d00000001000000000000037777770b6d656c6f64796d616b6572026e6c0000010001 a80d80000001000000030002037777770b6d656c6f64796d616b6572026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 41004 7b84000000010000000000000c564f4f444f4f2d534f554e44026e6c0000020001 7b84840300010000000100000c564f4f444f4f2d534f554e44026e6c0000020001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 41005 b820ebd95010447094800000000000000000 41006 9aa100100001000000000001056d61696c3109636c65616e706f7274026e6c00000100010000290800000000000000 9aa180000001000000020003056d61696c3109636c65616e706f7274026e6c0000010001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e10000291000000000000000 41007 b820ebd950184470da910000008ef600000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd1f403c4e9f00030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 41008 a8c000000001000000000000087a7a6f6e6e6e6574026e6c00000f0001 a8c084030001000000010000087a7a6f6e6e6e6574026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 41009 f7a20000000100000000000004686f6d6508636f6e6365707473026e6c0000010001 f7a28000000100000002000204686f6d6508636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac0110002000100015180000704646e7332c011c02e00010001000151800004d5c51c03c04b00010001000151800004d5c51e1c 41010 4be2000000010000000000000850454e5449554d3411787334616c6c2d62617369632d6164736c026e6c0000010001 4be2840300010000000100000850454e5449554d3411787334616c6c2d62617369632d6164736c026e6c0000010001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 41011 e5a600000001000000000000056d61696c3109636c65616e706f7274026e6c0000010001 e5a680000001000000020002056d61696c3109636c65616e706f7274026e6c0000010001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 41012 b820ebe75011446293ef0000000000000000 41013 b820ebe85010446293ee0000000000000000 41014 ab750000000100000000000007736c616e67656e08706172656c6e6574026e6c0000010001 ab758000000100000002000107736c616e67656e08706172656c6e6574026e6c0000010001c01400020001000151800005026e73c014c0140002000100015180000f067365727669780574756e6978c01dc03100010001000151800004c2970e12 41015 65df000000010000000000000377777706617265613137026e6c0000010001 65df800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 41016 0000000070024000cbcf0000020405b401010402 000080010000000000000000 41017 ca7e000000010000000000000770757976617374026e6c00001c0001 ca7e800000010000000200020770757976617374026e6c00001c0001c00c0002000100015180000e036e733107626265796f6e64c014c00c00020001000151800006036e7332c02cc028000100010001518000043eb1900bc042000100010001518000043eb19002 41018 52080000000100000000000012677261616673636861702d7a75747068656e026e6c0000ff0001 52088000000100000002000112677261616673636861702d7a75747068656e026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c01fc04c00010001000151800004c2860043 41019 b821db135010447060de0000000000000000 41020 0d20000000010000000000000377777706692d62696b65026e6c0000010001 0d20840300010000000100000377777706692d62696b65026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 41021 79000000000100000000000005696d616465026e6c0000010001 79008000000100000002000205696d616465026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c012c00c00020001000151800006036e7332c029c02600010001000151800004d4cb0e42c04100010001000151800004d4cb1221 41022 b821db13501844703ff10000008e5e00000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd1f403c4e9f00030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 41023 22000000000100000000000009652d6c756e61746963026e6c0000010001 22008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 41024 076000000001000000000000037777770a6d616472656d61726961026e6c0000010001 076080000001000000020002037777770a6d616472656d61726961026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 41025 3cda00100001000000000001036e733206787334616c6c026e6c00000100010000290800000080000000 3cda80000001000000030003036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d09630000291000000000000000 41026 b821db2150114462604d0000000000000000 41027 5411000000010000000000000a746563686e6963616c6c026e6c00000f0001 5411800000010000000200020a746563686e6963616c6c026e6c00000f0001c00c00020001000151800010036e733109776570726f76696465c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d5ef9db5c04700010001000151800004d5ef9dbe 41028 b821db2250104462604c0000000000000000 41029 000000007002400024f30000020405b401010402 000080010000000000000000 41030 b8229fc850104470f54b0000000000000000 41031 b8229fc850184470795e0000008eb900000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd1f403c4e9f00030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 41032 95ec00000001000000000000096863632d67726f6570026e6c0000010001 95ec80000001000000020002096863632d67726f6570026e6c0000010001c00c0002000100015180000e036e7331077175616e746973c016c00c00020001000151800006036e7332c02ec02a000100010001518000043ed44440c04400010001000151800004d4ccca83 41033 b8229fd650114462f4ba0000000000000000 41034 f110000000010000000000000c7664622d736f667477617265026e6c00000f0001 f110800000010000000300010c7664622d736f667477617265026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc019c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04bc02d000100010001518000043efa0202 41035 825f0000000100000000000005646e732d31056c61646f74026e6c0000010001 825f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41036 82600000000100000000000005646e732d32056c61646f74026e6c0000010001 82608000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41037 b8229fd750104462f4b90000000000000000 41038 a20a00000001000000000000037777770a73746f75746564766473026e6c0000010001 a20a80000001000000020002037777770a73746f75746564766473026e6c0000010001c01000020001000151800010026e730a796f757263686f696365c01bc01000020001000151800006036e7333c032c02f00010001000151800004c26d12d8c04b00010001000151800004c26d8122 41039 4c910000000100000000000006616e67656c61066e666f726365026e6c0000010001 4c918000000100000002000206616e67656c61066e666f726365026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c02e000100010001518000043ed45433c040000100010001518000043ed45434 41040 2a7d00000001000000000000055f6c646170045f74637008434f42424c455231024e4c0000060001 2a7d84030001000000010000055f6c646170045f74637008434f42424c455231024e4c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 41041 de70000000010000000000000664656c706869026e6c00000f0001 de70800000010000000300020664656c706869026e6c00000f0001c00c00020001000151800015026e730f6761726e69657270726f6a65637473c013c00c00020001000151800006036e7331c02ac00c00020001000151800006036e7332c02ac027000100010001518000045117e122c048000100010001518000045117e142 41042 5c1700000001000000000000046a7a6772026e6c00000f0001 5c1780000001000000030001046a7a6772026e6c00000f0001c00c0002000100015180000d026e7307696e746f756368c011c00c00020001000151800010026e7307696e746f756368036e657400c00c00020001000151800007046e733031c041c02500010001000151800004d413c001 41043 145d00000001000000000000037777770c776572656c64687569736a65026e6c0000010001 145d80000001000000020002037777770c776572656c64687569736a65026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 41044 a22d000000010000000000000666726f757773026e6c0000010001 a22d800000010000000200020666726f757773026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 41045 948f000000010000000000000966696574732d66756e026e6c00000f0001 948f800000010000000200020966696574732d66756e026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c016c00c00020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 41046 82650000000100000000000005646e732d31056c61646f74026e6c0000010001 82658000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41047 82660000000100000000000005646e732d32056c61646f74026e6c0000010001 82668000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41048 cea0000000010000000000000a617274656d6973776562026e6c0000010001 cea0800000010000000200020a617274656d6973776562026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 41049 b6a10000000100000000000003777777086f62736573736564026e6c0000010001 b6a18000000100000002000003777777086f62736573736564026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 41050 9f8a00000001000000000000076d6f6a6970736902777a02637a08656d6561636f7265026e6c0000010001 9f8a84030001000000010000076d6f6a6970736902777a02637a08656d6561636f7265026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 41051 ce31000000010000000000000b66696c6d736f6e6c696e65026e6c00000f0001 ce31800000010000000200020b66696c6d736f6e6c696e65026e6c00000f0001c00c0002000100015180000f036e73310861746c616e74697ac018c00c00020001000151800006036e7332c030c02c00010001000151800004d5efa011c04700010001000151800004d5efa075 41052 1e1d00000001000000000000036e733107626265796f6e64026e6c0000010001 1e1d80000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 41053 2b2300000001000000000000036e733207626265796f6e64026e6c0000010001 2b2380000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 41054 f9b20000000100000000000003777777137072697661746562726f616463617374696e67026e6c0000010001 f9b28000000100000003000303777777137072697661746562726f616463617374696e67026e6c0000010001c0100002000100015180000f036e7331086e6f766178657373c024c01000020001000151800006036e7332c03cc01000020001000151800006036e7333c03cc03800010001000151800004d5c98015c05300010001000151800004d5c9bf12c06500010001000151800004d5ef9c26 41055 21400000000100000000000005737461636b0375726303747565026e6c00000f0001 21408000000100000003000305737461636b0375726303747565026e6c00000f0001c0160002000100015180000a0774756567617465c016c01600020001000151800006036e7332c016c0160002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004839b0203c04400010001000151800004839b0303c05600010001000151800004c0576a65 41056 b8ca00000001000000000000076d696e62757a61026e6c00000f0001 b8ca80000001000000020001076d696e62757a61026e6c00000f0001c00c0002000100015180000b087374617267617465c00cc00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004d535a3d2 41057 f4dc0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 f4dc8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 41058 b5f80000000100000000000005736f6e636f026e6c00000f0001 b5f88000000100000002000205736f6e636f026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c012c00c00020001000151800006036e7332c02ac02600010001000151800004d43d0f08c04400010001000151800004d43d19e2 41059 fe6200000001000000000000037777770b6769726c70696374757265026e6c0000010001 fe6280000001000000020000037777770b6769726c70696374757265026e6c0000010001c01000020001000151800017036e73310d696e746572726567697374657203636f6d00c01000020001000151800010026e730a646f6d65696e686f7374c01c 41060 1b7528000001000000010000024e4c0000060001055f6c646170045f74637008434f42424c455231024e4c000021000100000258001a0000006401850673657276657208434f42424c455231024e4c00 1b75a8040000000000000000 41061 61300000000100000000000008686f73746e616d650462696e640000100003 61308000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41062 99d30000000100000000000008766f726d706c616e026e6c00000f0001 99d38000000100000002000108766f726d706c616e026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 41063 ab930000000100000000000007616b73656e746f026e6c0000010001 ab938000000100000002000207616b73656e746f026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc014c00c00020001000151800006036e7332c02bc02800010001000151800004c26d0642c04000010001000151800004c26d0963 41064 5a18000000010000000000000965696e64686f76656e026e6c00000f0001 5a18800000010000000200020965696e64686f76656e026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 41065 1e6d00000001000000000000036e733206787334616c6c026e6c0000010001 1e6d80000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 41066 436b000000010000000000000d6a6f7264616e6d65646963616c026e6c00000f0001 436b800000010000000200010d6a6f7264616e6d65646963616c026e6c00000f0001c00c0002000100015180000a036e733303777873c01ac00c00020001000151800006036e7334c032c04400010001000151800004d5ef9a65 41067 0c6f00000001000000000000037777770468656e72026e6c0000010001 0c6f80000001000000020002037777770468656e72026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec015c01000020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 41068 dc9100000001000000000000037777770a6d656e74616c7468656f026e6c0000010001 dc9180000001000000020000037777770a6d656e74616c7468656f026e6c0000010001c01000020001000151800011036e7331076365652d6b6179036e657400c01000020001000151800006036e7332c033 41069 fe8000000001000000000000036e7332076e656473746174026e6c0000010001 fe8080000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41070 bf8500000001000000000000036e7334076e656473746174026e6c0000010001 bf8580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41071 00000000700240007f1e00000204057801010402 000080010000000000000000 41072 a3d90000000100000000000002353802393601300231300a626c61636b686f6c657307656173796e6574026e6c0000050001 a3d98000000100000002000202353802393601300231300a626c61636b686f6c657307656173796e6574026e6c0000050001c02200020001000151800006036e7330c022c02200020001000151800006036e7331c022c03e00010001000151800004c2a55e01c05000010001000151800004c2a55e05 41073 91ea000000010000000000000631326d6f7665026e6c00000f0001 91ea800000010000000300020631326d6f7665026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 41074 b82500fd501041a0f0d30000000000000000 b82580010000000000000000 41075 4e1800000001000000000000036e733306776964657873026e6c0000010001 4e1880000001000000030002036e733306776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800002c00cc02b00010001000151800004d4ccc0fcc00c000100010001518000043efa0703 41076 b82500fd501841a0fa410000008d6f40000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403aef20403c40a000030000002e4e544c4d535350000100000097b200c008000800260000000600060020000000534552564552434f42424c4552310000 b82580010000000000000000 41077 eb0b00000001000000000000036e7331076e6564636f6d70026e6c0000010001 eb0b80000001000000020001036e7331076e6564636f6d70026e6c0000010001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1a80d 41078 24b600000001000000000000036e7331076e6564636f6d70026e6c0000260001 24b680000001000000020001036e7331076e6564636f6d70026e6c0000260001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1a80d 41079 d82c0100000100000000000007706963736572760e6265796f6e642d7265616c697479026e6c0000010001 d82c8100000100000002000207706963736572760e6265796f6e642d7265616c697479026e6c0000010001c0140002000100015180000d036e73310674696b74616bc023c01400020001000151800009036e733202696fc023c037000100010001518000045111281dc0500001000100015180000451112202 41080 b825010b50114192f0430000000000000000 b82580010000000000000000 41081 6c440000000100000000000003777777067a7376737477026e6c0000010001 6c448403000100000001000003777777067a7376737477026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 41082 abec00000001000000000000037777770a686974626c6173746572026e6c0000010001 abec80000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41083 b99800000001000000000000037777770a686974626c6173746572026e6c0000010001 b99880000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41084 d8ea00000001000000000000037777770a686974626c6173746572026e6c0000010001 d8ea80000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41085 fbe100000001000000000000037777770a686974626c6173746572026e6c0000010001 fbe180000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41086 189b00000001000000000000037777770a686974626c6173746572026e6c0000010001 189b80000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41087 82c000000001000000000000037777770a686974626c6173746572026e6c0000010001 82c080000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41088 1add00000001000000000000037777770a686974626c6173746572026e6c0000010001 1add80000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41089 55ec00000001000000000000037777770a686974626c6173746572026e6c0000010001 55ec80000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41090 115000000001000000000000037777770a686974626c6173746572026e6c0000010001 115080000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41091 4ca100000001000000000000037777770a686974626c6173746572026e6c0000010001 4ca180000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41092 940c00000001000000000000037777770a686974626c6173746572026e6c0000010001 940c80000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41093 dc1300000001000000000000037777770a686974626c6173746572026e6c0000010001 dc1380000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41094 e31f00000001000000000000037777770a686974626c6173746572026e6c0000010001 e31f80000001000000020002037777770a686974626c6173746572026e6c0000010001c01000020001000151800011036e73310a72336469656e7374656ec01bc01000020001000151800006036e7332c033c02f000100010001518000043e291ad2c04c000100010001518000043e291ad3 41095 77710000000100000000000004646e733208636f6e6365707473026e6c0000010001 77718000000100000002000204646e733208636f6e6365707473026e6c0000010001c0110002000100015180001103646e730a636f6e63657074736661c01ac01100020001000151800002c00cc02e00010001000151800004d5c51c03c00c00010001000151800004d5c51e1c 41096 c26100000001000000000000036e7335046372696f026e6c0000010001 c26180000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41097 83c400000001000000000000036e7336046372696f026e6c0000010001 83c480000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41098 162e000000010000000000000377777703776562026e6c0000010001 162e800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 41099 e19f00000001000000000000036e7335046372696f026e6c0000010001 e19f80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41100 854300000001000000000000036e7336046372696f026e6c0000010001 854380000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41101 fc2c00000001000000000000036e7331046372696f026e6c0000010001 fc2c80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41102 f2ec00000001000000000000036e7332046372696f026e6c0000010001 f2ec80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41103 756300000001000000000000037777770a72656372656174696566026e6c0000010001 756380000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 41104 74d300000001000000000000036e7331046372696f026e6c0000010001 74d380000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41105 74e400000001000000000000036e7332046372696f026e6c0000010001 74e480000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41106 bab3000000010000000000000562696e636b026e6c0000ff0001 bab3800000010000000200020562696e636b026e6c0000ff0001c00c0002000100015180000b036e73310470696e65c012c00c00020001000151800006036e7332c02ac02600010001000151800004d59c0201c03d00010001000151800004c3c1a303 41107 2159000000010000000000000377777707696e6762616e6b026e6c0000010001 2159800000010000000200020377777707696e6762616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c018c01000020001000151800006036e7332c030c02c0001000100015180000491dd19c2c0420001000100015180000491dd5dc2 41108 000000007002400048c400000204057801010402 000080010000000000000000 41109 b825010c50104192f0420000000000000000 b82580010000000000000000 41110 029a00000001000000000000033130340332303803313830033230380964796e61626c6f636b07656173796e6574026e6c0000010001 029a80000001000000020002033130340332303803313830033230380964796e61626c6f636b07656173796e6574026e6c0000010001c02600020001000151800006036e7330c026c02600020001000151800006036e7331c026c04200010001000151800004c2a55e01c05400010001000151800004c2a55e05 41111 a04000000001000000000000036e73310c636f6e63657074732d696374026e6c0000010001 a04080000001000000020002036e73310c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800006036e7332c010c03100010001000151800004d5c51c03c04e00010001000151800004d5c51e4b 41112 fee900000001000000000000036e73320c636f6e63657074732d696374026e6c00001c0001 fee980000001000000020002036e73320c636f6e63657074732d696374026e6c00001c0001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800002c00cc03100010001000151800004d5c51c03c00c00010001000151800004d5c51e4b 41113 b825ba8a501041a000ec0000000000000000 41114 b825ba8a501841a08ada0000008defc0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aef20403c40a000030000002e4e544c4d535350000100000097b200c008000800260000000600060020000000534552564552434f42424c4552310000 41115 9fe600000001000000000000037777770b6d6f726e696e6773746172026e6c0000010001 9fe680000001000000020000037777770b6d6f726e696e6773746172026e6c0000010001c010000200010001518000100572656d7573046d736575036e657400c01000020001000151800006036e7332c036 41116 b825ba9850114192005c0000000000000000 41117 91ec0000000100000000000003616d6303757661026e6c00000f0001 91ec8000000100000002000203616d6303757661026e6c00000f0001c0100002000100015180000e086261726c61657573026963c010c01000020001000151800006036e7331c010c0280001000100015180000491124432c0420001000100015180000491122710 41118 7668000000010000000000000377777713636f656c69616b6965766572656e6967696e67026e6c0000010001 7668800000010000000200020377777713636f656c69616b6965766572656e6967696e67026e6c0000010001c0100002000100015180000e07646e732d70726903626f78c024c0100002000100015180000a07646e732d736563c040c03800010001000151800004d97700fac05200010001000151800004d97704fa 41119 bf5d0010000100000000000106616c7469756d026e6c0000ff00010000290800000080000000 bf5d8000000100000002000306616c7469756d026e6c0000ff0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f00460000291000000000000000 41120 1ea6000000010000000000000a63617264736c7674303103666f6c026e6c0000010001 1ea6800000010000000200000a63617264736c7674303103666f6c026e6c0000010001c01700020001000151800015096d6f6e64726961616e0874656c6562797465c01bc0170002000100015180000a077665726d656572c039 41121 15220000000100000000000003777777066d6174757265026e6c0000010001 15228000000100000002000203777777066d6174757265026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c017c01000020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad41 41122 02230000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 02238000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 41123 91f10000000100000000000007747067706f7374026e6c00000f0001 91f18000000100000002000207747067706f7374026e6c00000f0001c00c0002000100015180000e036e733207737570706f7274c014c00c00020001000151800006036e7334c02cc02800010001000151800004c372e7c8c04200010001000151800004c372e6fe 41124 58260000000100000000000005524f42494e064f4d524f4550026e6c0000010001 58268000000100000002000205524f42494e064f4d524f4550026e6c0000010001c01200020001000151800009066d696e6e6965c012c01200020001000151800002c00cc02d00010001000151800004913a1e04c00c00010001000151800004913a1a34 41125 ac1300000001000000000000064d494e4e4945064f4d524f4550026e6c0000010001 ac1380000001000000020002064d494e4e4945064f4d524f4550026e6c0000010001c01300020001000151800002c00cc0130002000100015180000805726f62696ec013c00c00010001000151800004913a1e04c03c00010001000151800004913a1a34 41126 91f2000000010000000000000a7a61616e73747265656b07706f6c69746965026e6c00000f0001 91f2800000010000000200010a7a61616e73747265656b07706f6c69746965026e6c00000f0001c0170002000100015180000805736d757266c017c0170002000100015180000d036e7332036b706e036e657400c03300010001000151800004c297c3de 41127 d06400000001000000000000064442534552560354454d034e484c024e4c00001c0001 d06480000001000000030003064442534552560354454d034e484c024e4c00001c0001c0170002000100015180000603646e73c017c0170002000100015180000704646e7332c017c0170002000100015180000e036e733107737572666e6574c01bc02f000100010001518000048dfc0103c041000100010001518000048dfc0104c05400010001000151800004c0576a65 41128 c16400000001000000000000064442534552560354454d034e484c024e4c0000010001 c16480000001000000030003064442534552560354454d034e484c024e4c0000010001c0170002000100015180000603646e73c017c0170002000100015180000704646e7332c017c0170002000100015180000e036e733107737572666e6574c01bc02f000100010001518000048dfc0103c041000100010001518000048dfc0104c05400010001000151800004c0576a65 41129 2f620000000100000000000003444e53034e484c024e4c0000010001 2f628000000100000003000303444e53034e484c024e4c0000010001c01000020001000151800002c00cc0100002000100015180000704646e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c000100010001518000048dfc0103c036000100010001518000048dfc0104c04900010001000151800004c0576a65 41130 d6110000000100000000000003444e53034e484c024e4c00001c0001 d6118000000100000003000303444e53034e484c024e4c00001c0001c01000020001000151800002c00cc0100002000100015180000704646e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c000100010001518000048dfc0103c036000100010001518000048dfc0104c04900010001000151800004c0576a65 41131 6db30000000100000000000007636f6e74656e74026e6c00000f0001 6db38000000100000002000007636f6e74656e74026e6c00000f0001c00c00020001000151800016046e7330310b63726579667367726f757003636f6d00c00c00020001000151800007046e733032c02d 41132 31bd0000000100000000000003777777096372617a7934616c6c026e6c0000010001 31bd8000000100000003000303777777096372617a7934616c6c026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 41133 00000000700240004f1300000204057801010402 000080010000000000000000 41134 b825ba9950104192005b0000000000000000 41135 15e000000001000000000000094a414e53454e574542024e4c0000010001 15e080000001000000020002094a414e53454e574542024e4c0000010001c00c00020001000151800009036e7331026973c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5852102c03f00010001000151800004d5c41503 41136 b8ea00000001000000000000096d61696c72656c6179096b656e6e69736e6574026e6c0000010001 b8ea80000001000000020002096d61696c72656c6179096b656e6e69736e6574026e6c0000010001c01600020001000151800006036e7339c016c0160002000100015180000e036e733207737572666e6574c020c03400010001000151800004c0576a61c04600010001000151800004c0572402 41137 b8269830501041a029940000000000000000 41138 b8269830501841a08f030000008d1440000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aef20403c40a000030000002e4e544c4d535350000100000097b200c008000800260000000600060020000000534552564552434f42424c4552310000 41139 340b000000010000000000000e53544556454a4546464552534f4e026e6c0000020001 340b840300010000000100000e53544556454a4546464552534f4e026e6c0000020001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 41140 b826983e5011419229040000000000000000 41141 1f0f00000001000000000000055f6c646170045f746370026763065f6d7364637303504632026e6c0000060001 1f0f84030001000000010000055f6c646170045f746370026763065f6d7364637303504632026e6c0000060001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 41142 eae500000001000000000000066e65636f6d6d026e6c00000f0001 eae580000001000000030003066e65636f6d6d026e6c00000f0001c00c0002000100015180000c026e73067369676e6574c013c00c00020001000151800006036e7331c02ac00c00020001000151800006036e7332c02ac02700010001000151800004c3561242c03f00010001000151800004d915f142c05100010001000151800004d915f141 41143 a0d000000001000000000000055f6c646170045f746370026463065f6d736463730b6577772d6e65747765726b026e6c0000210001 a0d084030001000000010000055f6c646170045f746370026463065f6d736463730b6577772d6e65747765726b026e6c0000210001c02d00060001000038400036026e730f646f6d61696e2d7265676973747279c02d0a686f73746d6173746572c0440bf1e540000070800000384000278d0000003840 41144 7bf7000000010000000000000a736f6e6572616d61696c026e6c00000f0001 7bf7800000010000000200000a736f6e6572616d61696c026e6c00000f0001c00c00020001000151800011036e73310774647364617461036e657400c00c00020001000151800006036e7332c02f 41145 b826983f5010419229030000000000000000 41146 45f200000001000000000000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026763065f6d7364637303504632026e6c0000060001 45f284030001000000010000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026763065f6d7364637303504632026e6c0000060001c04200060001000038400036026e730f646f6d61696e2d7265676973747279c0420a686f73746d6173746572c0590bf1e540000070800000384000278d0000003840 41147 b92500000001000000000000036d346e056d62757975026e6c0000010001 b92580000001000000020000036d346e056d62757975026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c02d 41148 1b17000000010000000000000377777706736861676779026e6c0000010001 1b17800000010000000200010377777706736861676779026e6c0000010001c0100002000100015180000a036e733303777873c017c01000020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 41149 139d00000001000000000000024e530348414e026e6c0000010001 139d80000001000000020002024e530348414e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c013c00c00010001000151800004914a670ac03500010001000151800004c0576a65 41150 1ffa00000001000000000000036e7333076e6574666c6578026e6c0000010001 1ffa80000001000000030003036e7333076e6574666c6578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c26d5ba8c03e00010001000151800004507f2f25c00c00010001000151800004507ede20 41151 4df100000001000000000000036e7331076e6574666c6578026e6c0000010001 4df180000001000000030003036e7331076e6574666c6578026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c26d5ba8c03a00010001000151800004507f2f25c04c00010001000151800004507ede20 41152 6d2f00000001000000000000036e7332076e6574666c6578026e6c0000010001 6d2f80000001000000030003036e7332076e6574666c6578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c00010001000151800004c26d5ba8c00c00010001000151800004507f2f25c04c00010001000151800004507ede20 41153 4d6300000001000000000000066163686d6561026e6c00000f0001 4d6380000001000000030003066163686d6561026e6c00000f0001c00c00020001000151800012047072693103646e73067073696e6574c013c00c000200010001518000070470726932c02cc00c000200010001518000070470726933c02cc027000100010001518000049a0ff9a6c045000100010001518000049a0ff9aac058000100010001518000049a0ff9ae 41154 b33600000001000000000000036e733103737761026e6c0000010001 b33680000001000000030001036e733103737761026e6c0000010001c0100002000100015180000e036e733104686d6e71036e657400c0100002000100015180000d036e733206776964657873c031c0100002000100015180000d036e733306776964657873c014c05b000100010001518000043efa0703 41155 27af000000010000000000000a796f75636f6e6e656374026e6c0000ff0001 27af800000010000000200020a796f75636f6e6e656374026e6c0000ff0001c00c00020001000151800012036e73310b706c757373657276657232c017c00c00020001000151800006036e7332c02fc02b000100010001518000045104731ec049000100010001518000045104731f 41156 091300000001000000000000026763065f6d7364637303504632026e6c0000060001 091384030001000000010000026763065f6d7364637303504632026e6c0000060001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 41157 0ee600000001000000000000036d783106787334616c6c026e6c0000010001 0ee680000001000000030002036d783106787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 41158 827e00000001000000000000036d783206787334616c6c026e6c0000010001 827e80000001000000030002036d783206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 41159 2bc900000001000000000000036d783306787334616c6c026e6c0000010001 2bc980000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 41160 478100000001000000000000036d783406787334616c6c026e6c0000010001 478180000001000000030002036d783406787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 41161 8e4f00000001000000000000036d786906787334616c6c026e6c0000010001 8e4f80000001000000030002036d786906787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 41162 a5ba00000001000000000000037777770b6e65747370616e6e696e67026e6c0000010001 a5ba80000001000000020002037777770b6e65747370616e6e696e67026e6c0000010001c01000020001000151800009026e7303646d61c01cc01000020001000151800006036e7332c033c03000010001000151800004d973c8fbc04500010001000151800004d9aa11fc 41163 c9a900000001000000000000037777770770656d61776562026e6c0000010001 c9a980000001000000020000037777770770656d61776562026e6c0000010001c0100002000100015180000d036e7331046261736d02626500c01000020001000151800006036e7332c030 41164 d27b00000001000000000000046b657276026e6c0000010001 d27b84030001000000010000046b657276026e6c0000010001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 41165 73ee00000001000000000000034e533103454b45024e4c0000010001 73ee80000001000000020001034e533103454b45024e4c0000010001c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c2976a65 41166 39f700000001000000000000034e533103454b45024e4c0000260001 39f780000001000000020001034e533103454b45024e4c0000260001c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c2976a65 41167 84e800000001000000000000036e733109666972737466696e64026e6c0000010001 84e880000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41168 92cb00000001000000000000036e733209666972737466696e64026e6c0000010001 92cb80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41169 8155000000010000000000000377777706617265613137026e6c0000010001 8155800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 41170 9cca00000001000000000000096469646c6c706f7374026e6c0000010001 9cca84030001000000010000096469646c6c706f7374026e6c0000010001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 41171 316000000001000000000000036e7331036e7873026e6c0000010001 316080000001000000020002036e7331036e7873026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c015c03600010001000151800004d973c102 41172 0c5300000001000000000000036e7332036e7873026e6c0000010001 0c5380000001000000020002036e7332036e7873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d973c015c00c00010001000151800004d973c102 41173 b5840000000100000000000006616c7469756d026e6c0000ff0001 b5848000000100000002000206616c7469756d026e6c0000ff0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f0046 41174 658400000001000000000000026e73076e656473746174026e6c0000010001 658480000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 41175 b2c200000001000000000000036e7333076e656473746174026e6c0000010001 b2c280000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 41176 b6630000000100000000000006636861726973026e6c0000ff0001 b6638000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 41177 c6ff000000010000000000000377777708617070656c706f70026e6c0000010001 c6ff800000010000000200020377777708617070656c706f70026e6c0000010001c01000020001000151800009026e7303697873c019c01000020001000151800006036e7332c030c02d00010001000151800004d4f13ff8c04200010001000151800004d4f13ff9 41178 3bdb000000010000000000000b6c696e75786f6e6c696e65026e6c0000020001 3bdb800000010000000200020b6c696e75786f6e6c696e65026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 41179 cb5100000001000000000000096d61696c72656c6179066e6c74726565026e6c0000010001 cb5180000001000000020002096d61696c72656c6179066e6c74726565026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03100010001000151800004d4b20403c04300010001000151800004d5881e45 41180 a4e728000001000000010000026e6c0000060001035f6763045f74637009617269656465776974026e6c000021000100000258001b000000640cc40641646577697409617269656465776974026e6c00 a4e7a8040000000000000000 41181 cf17000000010000000000000377777706786f6c6c6965026e6c0000010001 cf17800000010000000200010377777706786f6c6c6965026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800014036e73320a6e6574686f6c64696e67036e657400c02b0001000100015180000451ad746f 41182 1bf3000000010000000000000377777703617470026e6c0000010001 1bf3800000010000000200010377777703617470026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800013036e7332026e6c0669676e697465036e657400c02800010001000151800004d4298505 41183 7e55000000010000000000000f6a6f6f702d68696c6c656272616e64026e6c00000f0001 7e55800000010000000200020f6a6f6f702d68696c6c656272616e64026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c01cc00c00020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 41184 656e000000010000000000000377777706786f6c6c6965026e6c0000260001 656e800000010000000200010377777706786f6c6c6965026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800014036e73320a6e6574686f6c64696e67036e657400c02b0001000100015180000451ad746f 41185 3c7400000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 3c7480000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41186 b81cbc0950100000789c0000000000000000 41187 0000000070024000945300000204057a01010402 000080010000000000000000 41188 96610000000100000000000004636b7070026e6c00000f0001 96618000000100000002000004636b7070026e6c00000f0001c00c000200010001518000140161026e73096c696e766973696f6e03636f6d00c00c000200010001518000040162c027 41189 88c600000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 88c680000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41190 d3f600000001000000000001067a6f6e6e6574026e6c0000ff00010000291000000000000000 d3f680000001000000020003067a6f6e6e6574026e6c0000ff0001c00c00020001000151800005026e73c00cc00c0002000100015180000e026e7308767575727765726bc013c027000100010001518000043e3a3204c038000100010001518000043efa02020000291000000000000000 41191 9c2e00000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 9c2e80000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 41192 b8289ecf501041b8681d0000000000000000 41193 b8289ecf501841b8c24a0000008eaff4000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d3f403beebf00030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000 41194 8280000000010000000000000764616c6673656e026e6c0000ff0001 8280800000010000000200020764616c6673656e026e6c0000ff0001c00c0002000100015180000e026e73086d656761706c6578c014c00c00020001000151800006036e7331c02bc02800010001000151800004504f6101c04200010001000151800004504f6102 41195 ac5d00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 ac5d80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41196 6bcf00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 6bcf80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41197 b8289edd501141aa678c0000000000000000 41198 0000000070024000c58e00000204057a01010402 000080010000000000000000 41199 e95400000001000000000000036e733109666972737466696e64026e6c0000010001 e95480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41200 1a9a0000000100000000000003777777087261626f62616e6b026e6c0000010001 1a9a8000000100000002000103777777087261626f62616e6b026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02d0001000100015180000491484fde 41201 f42f00000001000000000000036e733209666972737466696e64026e6c0000010001 f42f80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41202 b8289ede501041aa678b0000000000000000 41203 b829975b501041b8a0cb0000000000000000 41204 0cc50000000100000000000009636172656c6e6f7574026e6c00000f0001 0cc58000000100000002000009636172656c6e6f7574026e6c00000f0001c00c00020001000151800018036e73310e696369742d736f6c7574696f6e7303636f6d00c00c00020001000151800006036e7332c02e 41205 b829975b501841b87ebc0000008e2d32000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d3f403beebf00030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000 41206 fbd400000001000000000000046c696f63026e6c0000020001 fbd480000001000000020002046c696f63026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 41207 05dc000000010000000000000377777705737461636b026e6c0000010001 05dc800000010000000300030377777705737461636b026e6c0000010001c01000020001000151800006037a656ec010c0100002000100015180000e077475656761746503747565c016c01000020001000151800006036e7332c044c02a00010001000151800004839b8c82c03c00010001000151800004839b0203c05600010001000151800004839b0303 41208 00fa00000001000000000000026e730b666163696e676661637473026e6c0000010001 00fa80000001000000020002026e730b666163696e676661637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d513b013c03d00010001000151800004d513b012 41209 592300000001000000000000036e73320b666163696e676661637473026e6c0000010001 592380000001000000020002036e73320b666163696e676661637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d513b013c00c00010001000151800004d513b012 41210 89f900000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 89f980000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 41211 fcc100000001000000000000026e7306787334616c6c026e6c00001c0001 fcc180000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 41212 d35500000001000000000000026e7306787334616c6c026e6c0000260001 d35580000001000000030002026e7306787334616c6c026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 41213 ca5000000001000000000000036e733206787334616c6c026e6c0000260001 ca5080000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 41214 129700000001000000000000036e733206787334616c6c026e6c00001c0001 129780000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 41215 b8299769501141aaa03a0000000000000000 41216 000000007002400035ff00000204057a01010402 000080010000000000000000 41217 54c10000000100000000000003777777066865726d6163026e6c0000010001 54c18000000100000002000003777777066865726d6163026e6c0000010001c01000020001000151800012036e73310b776f726c646f6e6c696e65c017c01000020001000151800006036e7332c02f 41218 b829976a501041aaa0390000000000000000 41219 b82a2f49501041b8794d0000000000000000 b82aaf440000000000000000 41220 34d8000000010000000000000377777707746170746f6573026e6c0000010001 34d8800000010000000200020377777707746170746f6573026e6c0000010001c0100002000100015180000a036e733103686978c018c01000020001000151800006036e7332c030c02c00010001000151800004d5a0da0ac0420001000100015180000451112ec3 41221 b82a2f49501841b8d9ff0000008eaa70000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d3f403beebf00030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000 b82aaf440000000000000000 41222 10d7000000010000000000000666726f757773026e6c0000010001 10d7800000010000000200020666726f757773026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 41223 b82a2f57501141aa78bc0000000000000000 b82aaf540000000000000000 41224 4e9c0000000100000000000007706963736572760e6265796f6e642d7265616c697479026e6c0000010001 4e9c8000000100000002000207706963736572760e6265796f6e642d7265616c697479026e6c0000010001c0140002000100015180000d036e73310674696b74616bc023c01400020001000151800009036e733202696fc023c037000100010001518000045111281dc0500001000100015180000451112202 41225 b82a2f58501041aa78bb0000000000000000 b82aaf540000000000000000 41226 dac600000001000000000000037777770c72656e6561646d697261616c026e6c0000010001 dac680000001000000020002037777770c72656e6561646d697261616c026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 41227 e4df00000001000000000000037777770a656e65726769656e6564026e6c0000010001 e4df80000001000000020000037777770a656e65726769656e6564026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c033 41228 527500000001000000000000037777770c72656e6561646d697261616c026e6c0000010001 527580000001000000020002037777770c72656e6561646d697261616c026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 41229 80f900000001000000000000026e7309656174736572766572026e6c0000010001 80f980000001000000020002026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb1221 41230 d35000000001000000000000036e733209656174736572766572026e6c0000010001 d35080000001000000020002036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb1221 41231 d3f600000001000000000000067a6f6e6e6574026e6c0000ff0001 d3f680000001000000020002067a6f6e6e6574026e6c0000ff0001c00c00020001000151800005026e73c00cc00c0002000100015180000e026e7308767575727765726bc013c027000100010001518000043e3a3204c038000100010001518000043efa0202 41232 d5db000000010000000000000c6c696f6f6e64657277696a73026e6c0000020001 d5db800000010000000200020c6c696f6f6e64657277696a73026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 41233 ad690000000100000000000007686167656d616e026e6c0000010001 ad698000000100000002000207686167656d616e026e6c0000010001c00c0002000100015180000c036e733105636176656fc014c00c00020001000151800006036e7332c02cc028000100010001518000045112a002c040000100010001518000045112a102 41234 247800000001000000000000086d6f647370616365026e6c00000f0001 247880000001000000020000086d6f647370616365026e6c00000f0001c00c00020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c00c00020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 41235 f7220000000100000000000003626c3402626c06787334616c6c026e6c0000010001 f7228000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 41236 454f00000001000000000000037777770774656c666f7274026e6c0000010001 454f80000001000000020001037777770774656c666f7274026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800014036e733202657507636f6e63657274036e657400c02c00010001000151800004d5c22815 41237 ed6e00000001000000000000076d6163666f7572026e6c0000010001 ed6e80000001000000020002076d6163666f7572026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 41238 862e00000001000000000000037777770b7375706572696f722d6973026e6c0000010001 862e80000001000000020002037777770b7375706572696f722d6973026e6c0000010001c0100002000100015180000a036e733103686978c01cc01000020001000151800006036e7332c034c03000010001000151800004d5a0da0ac0460001000100015180000451112ec3 41239 5b2000000001000000000000036e7335046372696f026e6c0000010001 5b2080000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41240 e24f00000001000000000000036e7336046372696f026e6c0000010001 e24f80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41241 d28c000000010000000000000377777703776562026e6c0000010001 d28c800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 41242 486100000001000000000000036e7331046372696f026e6c0000010001 486180000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41243 aae100000001000000000000036e7332046372696f026e6c0000010001 aae180000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41244 4bff00000001000000000000037777770a72656372656174696566026e6c0000010001 4bff80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 41245 dddf00000001000000000000036e7335046372696f026e6c0000010001 dddf80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41246 06f700000001000000000000036e7336046372696f026e6c0000010001 06f780000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41247 e3b800000001000000000000036e7331046372696f026e6c0000010001 e3b880000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41248 3ee200000001000000000000036e7332046372696f026e6c0000010001 3ee280000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 41249 2d7f0000000100000000000006787334616c6c026e6c00000f0001 2d7f8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 41250 874200000001000000000000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d7364637303504632026e6c0000060001 874284030001000000010000095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d7364637303504632026e6c0000060001c04600060001000038400036026e730f646f6d61696e2d7265676973747279c0460a686f73746d6173746572c05d0bf1e540000070800000384000278d0000003840 41251 8c3300000001000000000000037777770c6d656469617363616e6e6572026e6c0000010001 8c3380000001000000020000037777770c6d656469617363616e6e6572026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c037 41252 00000000b002832c24a30000010303010101080a11235f89000000000101040202040564 000080010000000000000000 41253 1c7600000001000000000000066b61726d6163036d6373026e6c0000ff0001 1c7680000001000000020001066b61726d6163036d6373026e6c0000ff0001c01300020001000151800005026e73c013c01300020001000151800010036e7332096379626572636f6d6dc017c02b00010001000151800004d5c40185 41254 b82b27518010859879ee00000101080a11235f8a0128080f b82ba1010000000000000000 41255 6cae0000000100000000000003706f6d026e6c00000f0001 6cae8000000100000002000003706f6d026e6c00000f0001c00c00020001000151800010036e73310673697465347503636f6d00c00c00020001000151800006036e7332c028 41256 9d4c00000001000000000000086361737369726572026e6c00000f0001 9d4c80000001000000020002086361737369726572026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 41257 3cec0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 3cec8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 41258 d49e000000010000000000000461686d76026e6c0000010001 d49e800000010000000200020461686d76026e6c0000010001c00c00020001000151800010036e7331096e657467726f756e64c011c00c00020001000151800006036e7332c029c025000100010001518000045054e415c0410001000100015180000451046014 41259 30a600000001000000000000046d61696c03706f6d026e6c0000010001 30a680000001000000020000046d61696c03706f6d026e6c0000010001c01100020001000151800010036e73310673697465347503636f6d00c01100020001000151800006036e7332c02d 41260 2c3901000001000000000000056b6f726e6f026e6c00000f000100 2c3985030001000000010000056b6f726e6f026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 41261 1573000000010000000000000657454e4230330d77656e622d6c656c7973746164026e6c0000060001 1573840300010000000100000657454e4230330d77656e622d6c656c7973746164026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 41262 2ddf0000000100000000000005646e732d31056c61646f74026e6c0000010001 2ddf8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41263 1b410000000100000000000003777777026870026e6c0000010001 1b418000000100000003000003777777026870026e6c0000010001c01000020001000151800018086772656e6f626c65066575726f7065026870036e657400c0100002000100015180000c09627261636b6e656c6cc030c0100002000100015180000d0a626f65626c696e67656ec030 41264 001e0000000100000000000007666c6176697573026e6c00000f0001 001e8000000100000002000007666c6176697573026e6c00000f0001c00c00020001000151800012026e7309736572766572373935036e657400c00c00020001000151800006036e7332c02b 41265 017900000001000000000000046d61696c076b697874617274026e6c0000010001 017980000001000000030000046d61696c076b697874617274026e6c0000010001c01100020001000151800010026e73076b69787461727403636f6d00c01100020001000151800006036e7332c030c01100020001000151800006036e7333c030 41266 776e00000001000000000000146c69717569646d65646961736f6c7574696f6e73026e6c0000020001 776e80000001000000020002146c69717569646d65646961736f6c7574696f6e73026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec021c00c00020001000151800006036e7332c039c03500010001000151800004c29f4906c04d00010001000151800004c29fb004 41267 2e5800000001000000000000026e73076e656473746174026e6c00001c0001 2e5880000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 41268 74a400000001000000000000026e73076e656473746174026e6c0000260001 74a480000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 41269 d0ad00000001000000000000036e7332076e656473746174026e6c0000010001 d0ad80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41270 f59800000001000000000000036e7332076e656473746174026e6c00001c0001 f59880000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41271 1ba800000001000000000000036e7332076e656473746174026e6c0000260001 1ba880000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41272 07a500000001000000000000036e7333076e656473746174026e6c00001c0001 07a580000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 41273 ddcd00000001000000000000036e7333076e656473746174026e6c0000260001 ddcd80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 41274 b74400000001000000000000036e7334076e656473746174026e6c0000010001 b74480000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41275 89b600000001000000000000036e7334076e656473746174026e6c00001c0001 89b680000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41276 1d99000000010000000000000670726f646973056e76776d6e026e6c0000010001 1d99800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 41277 199900000001000000000000036e7334076e656473746174026e6c0000260001 199980000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 41278 119c00000001000000000000037777771362726162616e74626f757773797374656d656e026e6c0000010001 119c80000001000000020000037777771362726162616e74626f757773797374656d656e026e6c0000010001c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec03f 41279 2b3000000001000000000000036e733503777873026e6c0000010001 2b3080000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 41280 30d40000000100000000000005646e732d31056c61646f74026e6c0000010001 30d48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41281 fad90000000100000000000005646e732d32056c61646f74026e6c0000010001 fad98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41282 beb6000000010000000000000377777704692d676f026e6c0000010001 beb6800000010000000200020377777704692d676f026e6c0000010001c01000020001000151800009036e7331026973c015c01000020001000151800006036e7332c02dc02900010001000151800004d5852102c03e00010001000151800004d5c41503 41283 8f5e00000001000000000000036e73320d706f7765727365727665723230026e6c0000260001 8f5e80000001000000020002036e73320d706f7765727365727665723230026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104711dc00c000100010001518000045104711e 41284 bb3f00000001000000000000036e73320d706f7765727365727665723230026e6c00001c0001 bb3f80000001000000020002036e73320d706f7765727365727665723230026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000045104711dc00c000100010001518000045104711e 41285 a1ad00000001000000000000036e73310d706f7765727365727665723230026e6c0000260001 a1ad80000001000000020002036e73310d706f7765727365727665723230026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104711dc040000100010001518000045104711e 41286 4f2200000001000000000000037777770c6f63636173696f6e6c616e64026e6c0000010001 4f2280000001000000030003037777770c6f63636173696f6e6c616e64026e6c0000010001c0100002000100015180000e076e73617574683103626974c01dc0100002000100015180000a076e736175746832c039c0100002000100015180000a076e736175746833c039c03100010001000151800004d5880c33c04b00010001000151800004d5880c3bc06100010001000151800004d4ccc00b 41287 37e200000001000000000000036e73310d706f7765727365727665723230026e6c00001c0001 37e280000001000000020002036e73310d706f7765727365727665723230026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104711dc040000100010001518000045104711e 41288 72ae00000001000000000000046d61696c0c7175657374696f6e6d617263026e6c0000260001 72ae80000001000000020002046d61696c0c7175657374696f6e6d617263026e6c0000260001c01100020001000151800014036e73310d706f7765727365727665723230c01ec01100020001000151800006036e7332c036c032000100010001518000045104711dc052000100010001518000045104711e 41289 a39000000001000000000000046d61696c0c7175657374696f6e6d617263026e6c00001c0001 a39080000001000000020002046d61696c0c7175657374696f6e6d617263026e6c00001c0001c01100020001000151800014036e73310d706f7765727365727665723230c01ec01100020001000151800006036e7332c036c032000100010001518000045104711dc052000100010001518000045104711e 41290 e3500000000100000000000003777777046b6f7061026e6c0000010001 e3508000000100000002000203777777046b6f7061026e6c0000010001c0100002000100015180000b026e73057069776562c015c01000020001000151800011036e73330a74727565736572766572c015c02900010001000151800004d5efb23dc04000010001000151800004d5ef8005 41291 211b000000010000000000000734657665727931026e6c0000010001 211b800000010000000200010734657665727931026e6c0000010001c00c00020001000151800009026e730365646ec014c00c00020001000151800010036e733109756e69736f75726365c014c028000100010001518000043e3a51e4 41292 16f0000000010000000000000670726f646973056e76776d6e026e6c0000010001 16f0800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 41293 1b0c00000001000000000000037777770a6d617269616865696465026e6c0000010001 1b0c80000001000000020000037777770a6d617269616865696465026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c032 41294 698c000000010000000000000d74686f6d617373656e2d746373026e6c00000f0001 698c800000010000000200000d74686f6d617373656e2d746373026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c034 41295 cdf6000000010000000000000377777708756e65746f766e69026e6c0000010001 cdf6800000010000000300010377777708756e65746f766e69026e6c0000010001c0100002000100015180000e026e7308767575727765726bc019c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04bc02d000100010001518000043efa0202 41296 0968000000010000000000000377777707696e7369656d65026e6c0000010001 0968800000010000000200000377777707696e7369656d65026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c042 41297 7a950000000100000000000003777777046b6f7061026e6c0000010001 7a958000000100000002000203777777046b6f7061026e6c0000010001c0100002000100015180000b026e73057069776562c015c01000020001000151800011036e73330a74727565736572766572c015c02900010001000151800004d5efb23dc04000010001000151800004d5ef8005 41298 9553000000010000000000000377777708626f6f74736d616e026e6c0000010001 9553800000010000000200020377777708626f6f74736d616e026e6c0000010001c0100002000100015180000d026e73077374616e6e6574c019c01000020001000151800006036e7332c030c02d00010001000151800004d5852414c04600010001000151800004d5852418 41299 c47500000001000000000000046d61696c046d61656b026e6c0000010001 c47580000001000000020002046d61696c046d61656b026e6c0000010001c0110002000100015180000f026e7309656174736572766572c016c01100020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 41300 92e100000001000000000000046d61696c046d61656b026e6c0000010001 92e180000001000000020002046d61696c046d61656b026e6c0000010001c0110002000100015180000f026e7309656174736572766572c016c01100020001000151800006036e7332c02dc02a00010001000151800004d4cb0e42c04500010001000151800004d4cb1221 41301 7b0c000000010000000000000377777710726573706f6e73652d73657276696365026e6c0000010001 7b0c800000010000000200020377777710726573706f6e73652d73657276696365026e6c0000010001c0100002000100015180000d026e730763697374726f6ec021c01000020001000151800006036e7332c038c035000100010001518000043ed81f37c04e000100010001518000043ed81f38 41302 b82b275180188598d42e00000101080a11235f9a0128080f008e55dc000000010001000000000f313330353637303035383030322d330000f900010f313330353637303035383030322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afc71403c4df100030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000004c4150544f505745524b47524f45500000 b82ba1010000000000000000 41303 b82b275f80108598793f00000101080a11235f9b0128080f b82ba1010000000000000000 41304 706f00000001000000000000086168636272616e640564656d6f6e026e6c0000ff0001 706f80000001000000030002086168636272616e640564656d6f6e026e6c0000ff0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 41305 878000000001000000000000036e733207747564656c6674026e6c0000010001 878080000001000000050005036e733207747564656c6674026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c00c0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 41306 f9ff00000001000000000000036e733107747564656c6674026e6c0000010001 f9ff80000001000000050005036e733107747564656c6674026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c00c0001000100015180000482a1b401c03a0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 41307 b66500000001000000000000066d61737465720364746f07747564656c6674026e6c00001c0001 b66580000001000000050005066d61737465720364746f07747564656c6674026e6c00001c0001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 41308 e6d800000001000000000000066d61737465720364746f07747564656c6674026e6c0000260001 e6d880000001000000050005066d61737465720364746f07747564656c6674026e6c0000260001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 41309 d8f30010000100000000000003777777126175746f6d617469736572696e6767696473026e6c0000010001 d8f38000000100000002000103777777126175746f6d617469736572696e6767696473026e6c0000010001c0100002000100015180000d026e7307616d6572636f6dc023c01000020001000151800006036e7331c03ac03700010001000151800004c2b2b20a 41310 c2310000000100000000000003777777096d696e647363617065026e6c0000010001 c2318000000100000003000303777777096d696e647363617065026e6c0000010001c01000020001000151800012047072693103646e73067073696e6574c01ac010000200010001518000070470726932c033c010000200010001518000070470726933c033c02e000100010001518000049a0ff9a6c04c000100010001518000049a0ff9aac05f000100010001518000049a0ff9ae 41311 e88400000001000000000000037777770b776161676d656573746572026e6c0000010001 e88480000001000000020002037777770b776161676d656573746572026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c01cc01000020001000151800006036e7332c033c03000010001000151800004d453c005c04e00010001000151800004d453c006 41312 950600000001000000000000095f6b65726265726f73045f74637003504632026e6c0000060001 950684030001000000010000095f6b65726265726f73045f74637003504632026e6c0000060001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 41313 eeeb0000000100000000000015535445524c494e4753494c5645524a4557454c4552026e6c0000020001 eeeb8403000100000001000015535445524c494e4753494c5645524a4557454c4552026e6c0000020001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 41314 2c1000000001000000000000037777770d7a616b67656c646f6e6c696e65026e6c0000010001 2c1080000001000000020002037777770d7a616b67656c646f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c03200010001000151800004d5f72ed2c04400010001000151800004d5f72ed3 41315 2c1e0000000100000000000008747269706f696e74026e6c00001c0001 2c1e8000000100000002000208747269706f696e74026e6c00001c0001c00c0002000100015180000c036e7331057669727475c015c00c00020001000151800006036e7332c02dc02900010001000151800004d9726102c04100010001000151800004d58141c4 41316 071100000001000000000000026e7308767575727765726b026e6c0000010001 071180000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 41317 5b8a000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c00000f0001 5b8a800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c00000f0001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 41318 76c00000000100000000000008686f73746e616d650462696e640000100003 76c08000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41319 e59400000001000000000000036e7331107370686572616e616d65736572766572026e6c0000010001 e59480000001000000020002036e7331107370686572616e616d65736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047004c0430001000100015180000451047002 41320 f60100000001000000000000036e7332107370686572616e616d65736572766572026e6c0000010001 f60180000001000000020002036e7332107370686572616e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0350001000100015180000451047004c00c0001000100015180000451047002 41321 f6d90000000100000000000006636f62616c740a6e65746d61696c696e67026e6c0000010001 f6d98000000100000002000006636f62616c740a6e65746d61696c696e67026e6c0000010001c01300020001000151800011036e73310764697265637435036e657400c01300020001000151800006036e7332c036 41322 a0940000000100000000000006636f62616c740a6e65746d61696c696e67026e6c00001c0001 a0948000000100000002000006636f62616c740a6e65746d61696c696e67026e6c00001c0001c01300020001000151800011036e73310764697265637435036e657400c01300020001000151800006036e7332c036 41323 77be0000000100000000000006636f62616c740a6e65746d61696c696e67026e6c0000260001 77be8000000100000002000006636f62616c740a6e65746d61696c696e67026e6c0000260001c01300020001000151800011036e73310764697265637435036e657400c01300020001000151800006036e7332c036 41324 063c0000000100000000000008686f73746e616d650462696e640000100003 063c8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41325 d8410100000100000000000007706963736572760e6265796f6e642d7265616c697479026e6c0000010001 d8418100000100000002000207706963736572760e6265796f6e642d7265616c697479026e6c0000010001c0140002000100015180000d036e73310674696b74616bc023c01400020001000151800009036e733202696fc023c037000100010001518000045111281dc0500001000100015180000451112202 41326 19a8000000010000000000000661726d617761026e6c00000f0001 19a8800000010000000200000661726d617761026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 41327 cdcc00000001000000000000036e733107737572666e6574026e6c0000010001 cdcc80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 41328 13ad000000010000000000000c6c69717569646f787967656e026e6c0000020001 13ad800000010000000200020c6c69717569646f787967656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 41329 1f3800000001000000000000036e7331053632357476026e6c0000010001 1f3880000001000000020002036e7331053632357476026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043ea68ad2c038000100010001518000043ea68ad3 41330 16ad00000001000000000000036e7332053632357476026e6c0000010001 16ad80000001000000020002036e7332053632357476026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000043ea68ad2c00c000100010001518000043ea68ad3 41331 8d5b000000010000000000000e63656e747261616c626568656572026e6c0000ff0001 8d5b800000010000000300030e63656e747261616c626568656572026e6c0000ff0001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae 41332 2c3100000001000000000000115245494e44455253534f5554485041524b026e6c0000020001 2c3184030001000000010000115245494e44455253534f5554485041524b026e6c0000020001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 41333 e06700000001000000000000037777770b6164756c746469616c6572026e6c0000010001 e06780000001000000020002037777770b6164756c746469616c6572026e6c0000010001c0100002000100015180000d036e7331063234686f7374c01cc01000020001000151800006036e7332c034c03000010001000151800004d5efb10cc04900010001000151800004d5efb10d 41334 d78500000001000000000000037777770b6164756c746469616c6572026e6c0000010001 d78580000001000000020002037777770b6164756c746469616c6572026e6c0000010001c0100002000100015180000d036e7331063234686f7374c01cc01000020001000151800006036e7332c034c03000010001000151800004d5efb10cc04900010001000151800004d5efb10d 41335 8b4c00000001000000000000037777770d666f727470616e6e657264656e026e6c0000010001 8b4c80000001000000020000037777770d666f727470616e6e657264656e026e6c0000010001c01000020001000151800010036e733109666972737466696e64c01ec01000020001000151800006036e7332c036 41336 4d9e00000001000000000001036e733109756e69736f75726365026e6c00000100010000291000000000000000 4d9e80000001000000020001036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 41337 92db00000001000000000000037777771168616e64696361702d72696a6e6d6f6e64026e6c0000010001 92db80000001000000020002037777771168616e64696361702d72696a6e6d6f6e64026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec022c01000020001000151800006036e7332c03ac03600010001000151800004c29f4906c04e00010001000151800004c29fb004 41338 573a00000001000000000000037777770b646972656374776f6e656e026e6c0000010001 573a80000001000000020000037777770b646972656374776f6e656e026e6c0000010001c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec037 41339 2ed40000000100000000000003777777086368616e6e656c73026e6c0000010001 2ed48000000100000002000203777777086368616e6e656c73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 41340 101f000000010000000000000377777716686f72757363757273757373656e656e7265697a656e026e6c0000010001 101f800000010000000200000377777716686f72757363757273757373656e656e7265697a656e026e6c0000010001c0100002000100015180000c026e7306766576696461c027c01000020001000151800006036e7332c03e 41341 1c7f0000000100000000000008747269746f6e31310761626e616d726f026e6c0000010001 1c7f8000000100000002000208747269746f6e31310761626e616d726f026e6c0000010001c0150002000100015180000b0870686f626f733031c015c0150002000100015180000b0870686f626f733032c015c03100010001000151800004a7cac30bc04800010001000151800004a7cac30c 41342 d443000000010000000000000d637265796673696e746572696d026e6c0000010001 d443800000010000000200000d637265796673696e746572696d026e6c0000010001c00c00020001000151800016046e7330310b63726579667367726f757003636f6d00c00c00020001000151800007046e733032c033 41343 2ed40000000100000000000003777777086368616e6e656c73026e6c0000010001 2ed48000000100000002000203777777086368616e6e656c73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 41344 2ed40000000100000000000003777777086368616e6e656c73026e6c0000010001 2ed48000000100000002000203777777086368616e6e656c73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 41345 514d000000010000000000000377777708647261746b696e73026e6c0000010001 514d840300010000000100000377777708647261746b696e73026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 41346 b57d00000001000000000000086475696e73746565026e6c00000f0001 b57d80000001000000030003086475696e73746565026e6c00000f0001c00c00020001000151800011036e73310a6d756c74696b6162656cc015c00c00020001000151800006036e7332c02dc00c0002000100015180000e036e733407737570706f7274c015c0290001000100015180000450f2e002c0460001000100015180000450f2e006c05800010001000151800004c372e6fe 41347 e3be00000001000000000000026e730763697374726f6e026e6c0000010001 e3be80000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 41348 17d000000001000000000000036e7331056163646973026e6c0000010001 17d080000001000000020002036e7331056163646973026e6c0000010001c01000020001000151800002c00cc0100002000100015180000a026e7304616e7762c016c00c00010001000151800004c29779fac03800010001000151800004c1ac840a 41349 ff4d001000010000000000000774717030333034057471336e6c026e6c0000010001 ff4d840300010000000100000774717030333034057471336e6c026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 41350 512900000001000000000000036e733007656173796e6574026e6c0000010001 512980000001000000020002036e733007656173796e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c00010001000151800004c2a55e01c03a00010001000151800004c2a55e05 41351 bc0100000001000000000000036e733107656173796e6574026e6c0000010001 bc0180000001000000020002036e733107656173796e6574026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c2a55e01c00c00010001000151800004c2a55e05 41352 1d5300000001000000000000077765626d61696c07656173796e6574026e6c0000010001 1d5380000001000000020002077765626d61696c07656173796e6574026e6c0000010001c01400020001000151800006036e7330c014c01400020001000151800006036e7331c014c03000010001000151800004c2a55e01c04200010001000151800004c2a55e05 41353 195c00000001000000000000037777770870616c6573747261026e6c0000010001 195c80000001000000020001037777770870616c6573747261026e6c0000010001c0100002000100015180000c036e7331056d696c6f73c019c0100002000100015180000d036e7332036b706e036e657400c02d00010001000151800004c1ad56c2 41354 8fc4000000010000000000000462617261026e6c0000010001 8fc4800000010000000200020462617261026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 41355 4d9e00000001000000000000036e733109756e69736f75726365026e6c0000010001 4d9e80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 41356 41590000000100000000000003777777067765627a696e026e6c0000010001 41598000000100000002000203777777067765627a696e026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec017c01000020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 41357 a0800000000100000000000006787334616c6c026e6c00001c0001 a0808000000100000003000206787334616c6c026e6c00001c0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 41358 647100000001000000000000037777770b6f7373656b6e617272656e026e6c0000010001 647180000001000000020002037777770b6f7373656b6e617272656e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 41359 eb160000000100000000000003777777096465636f7265747465026e6c0000010001 eb168000000100000002000203777777096465636f7265747465026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01ac01000020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 41360 2de00000000100000000000005646e732d32056c61646f74026e6c0000010001 2de08000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41361 b939000000010000000000000377777710677269656b656e6c616e64666f72756d026e6c0000010001 b939800000010000000300020377777710677269656b656e6c616e64666f72756d026e6c0000010001c0100002000100015180000d036e733106776964657873c021c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c039c03500010001000151800004d4ccc0fcc06a000100010001518000043efa0703 41362 4c950000000100000000000006686f6d652d350774697363616c69026e6c0000010001 4c958000000100000003000206686f6d652d350774697363616c69026e6c0000010001c0130002000100015180000704616e7331c013c0130002000100015180000704616e7332c013c0130002000100015180001404616e73330a74697363616c696e657402626500c02f00010001000151800004c3f14d38c04200010001000151800004c3f13325 41363 b04f00000001000000000000026e73057377646e73026e6c0000010001 b04f80000001000000020002026e73057377646e73026e6c0000010001c00f0002000100015180000a036e733103686978c015c00f00020001000151800006036e7332c02dc02900010001000151800004d5a0da0ac03f0001000100015180000451112ec3 41364 565600000001000000000000036e7332057377646e73026e6c0000010001 565680000001000000020002036e7332057377646e73026e6c0000010001c0100002000100015180000a036e733103686978c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5a0da0ac0400001000100015180000451112ec3 41365 a5290000000100000000000003777777046c75747a026e6c0000010001 a5298000000100000003000203777777046c75747a026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 41366 ba09000000010000000000000c70726f66657373696f6e616c0462617274026e6c0000010001 ba09800000010000000200020c70726f66657373696f6e616c0462617274026e6c0000010001c01900020001000151800012036e73310b7669616e6574776f726b73c01ec01900020001000151800006036e7332c036c03200010001000151800004d43d0f08c05000010001000151800004d43d19e2 41367 022a00000001000000000000026e73076e65746c616e64026e6c0000010001 022a80000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 41368 7ad700000001000000000000036e7332076e65746c616e64026e6c0000010001 7ad780000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 41369 0bd900000001000000000000046e65777306787334616c6c026e6c0000ff0001 0bd980000001000000030002046e65777306787334616c6c026e6c0000ff0001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 41370 8bb100000001000000000000077765626d61696c05646f786973026e6c0000010001 8bb180000001000000020000077765626d61696c05646f786973026e6c0000010001c01400020001000151800012036e73310871346d6174696373036e657400c01400020001000151800006036e7332c032 41371 188c0000000100000000000006616c7469756d026e6c00000f0001 188c8000000100000002000206616c7469756d026e6c00000f0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f0046 41372 28000000000100000000000008626269742d6e74340462626974026e6c0000010001 28008000000100000002000208626269742d6e74340462626974026e6c0000010001c01500020001000151800008056e65743031c015c01500020001000151800002c00cc02e00010001000151800004c1ad5403c00c00010001000151800004c1ad540c 41373 f5330000000100000000000003777777086575726f6b6c696b026e6c0000010001 f5338000000100000002000103777777086575726f6b6c696b026e6c0000010001c0100002000100015180000e026e73086575726f636c6978c019c01000020001000151800012036e7332086575726f636c697803636f6d00c02d00010001000151800004d47bc685 41374 7bc900000001000000000000085f6b706173737764045f74637003504632026e6c0000060001 7bc984030001000000010000085f6b706173737764045f74637003504632026e6c0000060001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 41375 ce680000000100000000000010766964656f2d6d75736963706c617a61026e6c00000f0001 ce688000000100000003000310766964656f2d6d75736963706c617a61026e6c00000f0001c00c00020001000151800014026e730e61726765776562686f7374696e67c01dc00c00020001000151800006036e7330c034c00c00020001000151800006036e7333c034c03100010001000151800004c3561682c05100010001000151800004c3561683c06300010001000151800004d5de0bfa 41376 7dfe00100001000000000001036e733104686f6d65026e6c00000100010000290800000080000000 7dfe80000001000000030004036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 41377 beff00100001000000000001036e733104686f6d65026e6c00002600010000290800000080000000 beff80000001000000030004036e733104686f6d65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 41378 6f8e00100001000000000001036e733204686f6d65026e6c00000100010000290800000080000000 6f8e80000001000000030004036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 41379 9bed00100001000000000001036e733204686f6d65026e6c00002600010000290800000080000000 9bed80000001000000030004036e733204686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b0000291000000000000000 41380 558f00100001000000000001036e733304686f6d65026e6c00000100010000290800000080000000 558f80000001000000030004036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 41381 2ca000100001000000000001036e733304686f6d65026e6c00002600010000290800000080000000 2ca080000001000000030004036e733304686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b0000291000000000000000 41382 762000000001000000000000037777770e61636461656e64656d756e6e696b026e6c0000010001 762080000001000000020000037777770e61636461656e64656d756e6e696b026e6c0000010001c010000200010001518000140575646e733108756c747261646e73036e657400c010000200010001518000080575646e7332c039 41383 965000100001000000000001036e733404686f6d65026e6c00000100010000290800000080000000 965080000001000000030004036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 41384 65fb00100001000000000001036e733404686f6d65026e6c00002600010000290800000080000000 65fb80000001000000030004036e733404686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b0000291000000000000000 41385 c53900000001000000000000026e73056e65726f63026e6c0000010001 c53980000001000000020002026e73056e65726f63026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d434010ac03700010001000151800004d434000a 41386 224f00000001000000000000036e7332056e65726f63026e6c0000010001 224f80000001000000020002036e7332056e65726f63026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004d434010ac00c00010001000151800004d434000a 41387 4bb200000001000000000000037777770d6c7564676572636f6c6c656765026e6c0000010001 4bb280000001000000020002037777770d6c7564676572636f6c6c656765026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c01ec01000020001000151800006036e7332c036c0320001000100015180000450416028c04d00010001000151800004c356780c 41388 c49c00000001000000000000036e73310b7472616374696f6e2d6974026e6c0000010001 c49c80000001000000020000036e73310b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 41389 710900000001000000000000036e73320b7472616374696f6e2d6974026e6c0000010001 710980000001000000020000036e73320b7472616374696f6e2d6974026e6c0000010001c01000020001000151800014036e73310a676c617373686f757365036e657400c01000020001000151800006036e7332c034 41390 ac1c0000000100000000000009686167656c736c616703687562026e6c0000010001 ac1c8000000100000002000209686167656c736c616703687562026e6c0000010001c0160002000100015180000704646e7331c016c0160002000100015180000c04646e73320470696e73c01ac02e00010001000151800004d9c26d0fc04100010001000151800004d9c26002 41391 6ee700000001000000000000085f6b706173737764045f75647003504632026e6c0000060001 6ee784030001000000010000085f6b706173737764045f75647003504632026e6c0000060001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 41392 c82c000000010000000000000f776573746c616e6474656c65636f6d026e6c00000f0001 c82c800000010000000200020f776573746c616e6474656c65636f6d026e6c00000f0001c00c0002000100015180000a026e730469636d63c01cc00c00020001000151800006036e7332c033c030000100010001518000043e643805c046000100010001518000043e643806 41393 18000000000100000000000003777777127a756964776573742d6e656465726c616e64026e6c0000010001 18008000000100000002000003777777127a756964776573742d6e656465726c616e64026e6c0000010001c01000020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c01000020001000151800006036e7332c03b 41394 8d3d00000001000000000000036e733104686f6d65026e6c0000010001 8d3d80000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 41395 e5ae00000001000000000000036e733204686f6d65026e6c0000010001 e5ae80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 41396 306100000001000000000000036e733104686f6d65026e6c0000260001 306180000001000000030003036e733104686f6d65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 41397 b96500000001000000000000036e733204686f6d65026e6c0000260001 b96580000001000000030003036e733204686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 41398 4c9100000001000000000000036e733304686f6d65026e6c0000260001 4c9180000001000000030003036e733304686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 41399 335600000001000000000000036e733304686f6d65026e6c0000010001 335680000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 41400 c8a300000001000000000000036e733404686f6d65026e6c0000010001 c8a380000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 41401 3fca00000001000000000000036e733404686f6d65026e6c0000260001 3fca80000001000000030003036e733404686f6d65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 41402 5e2c0000000100000000000006706f74696765056b6e657573026e6c0000010001 5e2c8000000100000002000006706f74696765056b6e657573026e6c0000010001c01300020001000151800013036e733109752d73657276657273036e657400c01300020001000151800006036e7332c031 41403 9ca500000001000000000000036e73310470696e65026e6c0000010001 9ca580000001000000020002036e73310470696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d59c0201c03700010001000151800004c3c1a303 41404 947300000001000000000000036e6967026e6c00000f0001 947380000001000000020002036e6967026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 41405 071900000001000000000000037777770d726164696f7468657261706965026e6c0000010001 071980000001000000020002037777770d726164696f7468657261706965026e6c0000010001c0100002000100015180000c026e730674656c6c7573c01ec01000020001000151800006036e7332c035c032000100010001518000043e3a4cc8c04a000100010001518000043e3a4cc9 41406 0ccc00000001000000000000036e73310a74727565736572766572026e6c0000010001 0ccc80000001000000030003036e73310a74727565736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef8003c03d00010001000151800004d5efb004c04f00010001000151800004d5ef8005 41407 0ccd00000001000000000000036e73320a74727565736572766572026e6c0000010001 0ccd80000001000000030003036e73320a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02f00010001000151800004d5ef8003c00c00010001000151800004d5efb004c04f00010001000151800004d5ef8005 41408 0cce00000001000000000000036e73330a74727565736572766572026e6c0000010001 0cce80000001000000030003036e73330a74727565736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02f00010001000151800004d5ef8003c04100010001000151800004d5efb004c00c00010001000151800004d5ef8005 41409 32c3000000010000000000000b6c697361686f6c64696e67026e6c0000020001 32c3800000010000000200020b6c697361686f6c64696e67026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 41410 8a9500000001000000000000037777770b746e742d696e6e69676874026e6c0000010001 8a9580000001000000020000037777770b746e742d696e6e69676874026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c034 41411 ef080000000100000000000008686f73746e616d650462696e640000100003 ef088000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41412 92e500000001000000000000037777770574656b7374026e6c0000010001 92e580000001000000020001037777770574656b7374026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c016c01000020001000151800011036e7332076e6564636f6d70036f726700c02a00010001000151800004c3c1a80d 41413 c72b00000001000000000000036e73310767617574656e67026e6c0000010001 c72b80000001000000020000036e73310767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41414 edfd00000001000000000000036e73320767617574656e67026e6c0000010001 edfd80000001000000020000036e73320767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41415 ef0f00000001000000000000076172636869766507616e74656e6e61026e6c0000010001 ef0f80000001000000020001076172636869766507616e74656e6e61026e6c0000010001c01400020001000151800005026e73c014c0140002000100015180001306696e666f726d07616e74656e6e6102646b00c03000010001000151800004d995dd13 41416 e27900000001000000000000036e7332066c696e6b7570026e6c0000010001 e27980000001000000030003036e7332066c696e6b7570026e6c0000010001c0100002000100015180000b04646e733103766970c017c0100002000100015180000704646e7332c030c0100002000100015180000704646e7333c030c02b00010001000151800004d44fe803c04200010001000151800004c3f5c782c05500010001000151800004d44ff303 41417 32dc0000000100000000000003646e73097469736f6e6c696e65026e6c0000010001 32dc8000000100000002000203646e73097469736f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02e00010001000151800004d5e382b4c04000010001000151800004d5e38d7c 41418 295100000001000000000000037777770574656b7374026e6c0000010001 295180000001000000020001037777770574656b7374026e6c0000010001c0100002000100015180000e036e7331076e6564636f6d70c016c01000020001000151800011036e7332076e6564636f6d70036f726700c02a00010001000151800004c3c1a80d 41419 529b00000001000000000000037777770972746c6e6965757773026e6c0000010001 529b80000001000000020001037777770972746c6e6965757773026e6c0000010001c01000020001000151800018036e733111686f6c6c616e646d6564696167726f6570c01ac01000020001000151800011036e733207636c742d756661036e657400c02e00010001000151800004c3c1ca77 41420 dd470000000100000000000004616a6178066e696b686566026e6c0000010001 dd478000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 41421 d1c800000001000000000000036e733109666972737466696e64026e6c0000010001 d1c880000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41422 d1c900000001000000000000036e733209666972737466696e64026e6c0000010001 d1c980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41423 6b080000000100000000000006626570706965086d6963726f776562026e6c0000010001 6b088000000100000002000206626570706965086d6963726f776562026e6c0000010001c0130002000100015180000a036e7331036e7873c01cc01300020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 41424 d1cb00000001000000000000036e733109666972737466696e64026e6c0000010001 d1cb80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41425 d1cc00000001000000000000036e733209666972737466696e64026e6c0000010001 d1cc80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 41426 b5c10000000100000000000005656e65636f026e6c00000f0001 b5c18000000100000002000205656e65636f026e6c00000f0001c00c0002000100015180000c04646e73310470696e73c012c00c0002000100015180000704646e7332c02bc02600010001000151800004d9c26101c03e00010001000151800004d9c26002 41427 292200000001000000000000046669706e026e6c0000060001 292284030001000000010000046669706e026e6c0000060001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 41428 ac1c000000010000000000000377777712666f727469736d61726174686f6e72756e73026e6c0000010001 ac1c800000010000000200020377777712666f727469736d61726174686f6e72756e73026e6c0000010001c0100002000100015180000d026e7307636f6f6c636f6dc023c01000020001000151800006036e7332c03ac03700010001000151800004c1ad3506c05000010001000151800004c1ad35c1 41429 9b2500000001000000000000037777770d646174696e6773657276696365026e6c0000010001 9b2580000001000000030002037777770d646174696e6773657276696365026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 41430 b4fa00000001000000000000086e6c6e7431303034046669706e026e6c0000060001 b4fa84030001000000010000086e6c6e7431303034046669706e026e6c0000060001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 41431 02b100000001000000000000076d6567616d6178026e6c00000f0001 02b180000001000000030001076d6567616d6178026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 41432 195300000001000000000000046a6f616e026e6c00000f0001 195380000001000000020002046a6f616e026e6c00000f0001c00c00020001000151800011036e73310a696e32686f7374696e67c011c00c00020001000151800006036e7332c029c02500010001000151800004d43d3362c04200010001000151800004d43d3363 41433 f15e000000010000000000000774656c6c65727307756e692d6f6e65026e6c0000010001 f15e800000010000000200000774656c6c65727307756e692d6f6e65026e6c0000010001c01400020001000151800013036e733109752d73657276657273036e657400c01400020001000151800006036e7332c034 41434 eeca0000000100000000000003777777136765736368696564656e697368697070696573026e6c0000010001 eeca8403000100000001000003777777136765736368696564656e697368697070696573026e6c0000010001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 41435 b82b275f8011859878e700000101080a11235ff20128080f b82ba1010000000000000000 41436 7459000000010000000000000a696e74657267616d6d6103676973026e6c0000010001 7459800000010000000200000a696e74657267616d6d6103676973026e6c0000010001c01700020001000151800014036e73310a74656e73696e67736b7303636f6d00c01700020001000151800006036e7332c033 41437 ce8a0000000100000000000006736572766572026462036b766b026e6c0000010001 ce8a8000000100000002000206736572766572026462036b766b026e6c0000010001c0160002000100015180000d026e73076b6e6f77617265c01ac01600020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 41438 b82b27608010859878e300000101080a11235ff301280811 b82ba1010000000000000000 41439 f6c100000001000000000000037777770c666579656e6f6f72646e6574026e6c0000010001 f6c180000001000000020000037777770c666579656e6f6f72646e6574026e6c0000010001c01000020001000151800010036e733106726f75746974036e657400c01000020001000151800006036e7332c035 41440 7e7c00000001000000000000106472756b6b6572696a72757467657273026e6c00001c0001 7e7c80000001000000020002106472756b6b6572696a72757467657273026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc01dc00c00020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 41441 658c00000001000000000000037777770a6176656e747572696a6e026e6c0000010001 658c80000001000000020002037777770a6176656e747572696a6e026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c01bc01000020001000151800006036e7332c033c02f00010001000151800004d4b20403c04800010001000151800004d5881e45 41442 176b0000000100000000000003656c3107696e7465727873026e6c0000010001 176b8000000100000002000203656c3107696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 41443 d6ed0000000100000000000003656c3207696e7465727873026e6c0000010001 d6ed8000000100000002000203656c3207696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 41444 02bf0000000100000000000003656c3307696e7465727873026e6c0000010001 02bf8000000100000002000203656c3307696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 41445 fa860000000100000000000003656c3407696e7465727873026e6c0000010001 fa868000000100000002000203656c3407696e7465727873026e6c0000010001c0100002000100015180000f036e733008696e7465722d7873c018c01000020001000151800006036e7331c030c02c000100010001518000043e0452abc047000100010001518000043e0452ac 41446 fd430000000100000000000005646e732d3708696e7465722d7873026e6c0000010001 fd438000000100000002000205646e732d3708696e7465722d7873026e6c0000010001c01200020001000151800006036e7330c012c01200020001000151800006036e7331c012c02f000100010001518000043e0452abc041000100010001518000043e0452ac 41447 e1b70000000100000000000005646e732d3808696e7465722d7873026e6c0000010001 e1b78000000100000002000205646e732d3808696e7465722d7873026e6c0000010001c01200020001000151800006036e7330c012c01200020001000151800006036e7331c012c02f000100010001518000043e0452abc041000100010001518000043e0452ac 41448 31ac000000010000000000000567736d6e75026e6c00000f0001 31ac800000010000000200010567736d6e75026e6c00000f0001c00c0002000100015180000a036e733303777873c012c00c00020001000151800006036e7334c02ac03c00010001000151800004d5ef9a65 41449 2a640000000100000000000009652d6c756e61746963026e6c0000010001 2a648000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 41450 1a580000000100000000000009652d6c756e61746963026e6c0000010001 1a588000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 41451 2824000000010000000000000974656c656b6162656c026e6c00000f0001 2824800000010000000200020974656c656b6162656c026e6c00000f0001c00c0002000100015180000a036e733103757063c016c00c0002000100015180000e046e733032066368656c6c6fc016c02a00010001000151800004d48e1c42c04000010001000151800004d4534483 41452 024b0000000100000000000009652d6c756e61746963026e6c0000010001 024b8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 41453 ba9b00000001000000000000106b6f6f726e69657577656d757a69656b026e6c00001c0001 ba9b80000001000000020001106b6f6f726e69657577656d757a69656b026e6c00001c0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c01dc04a00010001000151800004c2860043 41454 b2c200000001000000000000026e730c696e746572636f6e6e656374026e6c0000260001 b2c280000001000000030003026e730c696e746572636f6e6e656374026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004d453c005c03e00010001000151800004d453c006c05000010001000151800004d453c805 41455 d96100000001000000000000036e73320c696e746572636f6e6e656374026e6c0000260001 d96180000001000000030003036e73320c696e746572636f6e6e656374026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03100010001000151800004d453c005c00c00010001000151800004d453c006c05000010001000151800004d453c805 41456 98f000000001000000000000036e73330c696e746572636f6e6e656374026e6c0000260001 98f080000001000000030003036e73330c696e746572636f6e6e656374026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03100010001000151800004d453c005c04200010001000151800004d453c006c00c00010001000151800004d453c805 41457 4d7b0000000100000000000007646a736a6f72730b6d61616b746d757a69656b026e6c0000010001 4d7b8000000100000002000007646a736a6f72730b6d61616b746d757a69656b026e6c0000010001c01400020001000151800013036e733009696e7465726c697a65036e657400c01400020001000151800006036e7331c038 41458 4ca800000001000000000000046d61696c08656d64656a6f6e67026e6c00000f0001 4ca880000001000000030000046d61696c08656d64656a6f6e67026e6c00000f0001c0110002000100015180000f036e733106736b796e657402626500c01100020001000151800006036e7332c032c01100020001000151800006036e7333c032 41459 7fe1000000010000000000000d756e6978616476616e636564320b7669616e6574776f726b73026e6c00000f0001 7fe1800000010000000200020d756e6978616476616e636564320b7669616e6574776f726b73026e6c00000f0001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac03a00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 41460 7b6600000001000000000000056e666b7076026e6c00001c0001 7b6680000001000000020000056e666b7076026e6c00001c0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c029 41461 c1ec0000000100000000000003777777096575726f7061636172026e6c0000010001 c1ec8000000100000002000003777777096575726f7061636172026e6c0000010001c0100002000100015180000f036e733105617363696f036e657400c01000020001000151800006036e7332c032 41462 ac7000100001000000000001077468756d62733202656c026e6c00000100010000290800000080000000 ac7080000001000000020003077468756d62733202656c026e6c0000010001c0140002000100015180000e036e733007686f73746c6162c017c01400020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad410000291000000000000000 41463 b05900000001000000000000037777770b6765627276616e67656e74026e6c0000010001 b05980000001000000020001037777770b6765627276616e67656e74026e6c0000010001c01000020001000151800017026e7311656e7465727072697365686f7374696e67c01cc0100002000100015180000b026e73026e6c036e657400c03000010001000151800004d5358e02 41464 8858000000010000000000000377777709666f746f67696c6465026e6c0000010001 8858800000010000000200000377777709666f746f67696c6465026e6c0000010001c01000020001000151800011036e733107646f6f74616c6c03636f6d00c01000020001000151800006036e7332c032 41465 377f00000001000000000000037777770a64726f6d656461726973026e6c0000010001 377f80000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 41466 563800000001000000000000077468756d62733202656c026e6c0000010001 563880000001000000020002077468756d62733202656c026e6c0000010001c0140002000100015180000e036e733007686f73746c6162c017c01400020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad41 41467 32eb00000001000000000000036e733203757063026e6c0000010001 32eb80000001000000030003036e733203757063026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c02800010001000151800004d48e1c42c03a00010001000151800004d4534483c054000100010001518000043e6c0141 41468 71e10000000100000000000008686f73746e616d650462696e640000100003 71e18000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41469 54dc0000000100000000000008686f73746e616d650462696e640000100003 54dc8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41470 23320000000100000000000005646e732d31056c61646f74026e6c0000010001 23328000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41471 d65a0000000100000000000005646e732d32056c61646f74026e6c0000010001 d65a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41472 ea570000000100000000000003777777056e6976656c026e6c0000010001 ea578000000100000002000203777777056e6976656c026e6c0000010001c01000020001000151800009067572616e6961c010c0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c2abc8e2c03f00010001000151800004c0576a65 41473 97580000000100000000000005646e732d31056c61646f74026e6c0000010001 97588000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41474 8ba20000000100000000000005646e732d32056c61646f74026e6c0000010001 8ba28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41475 e0e800000001000000000000066172626f6465026e6c00001c0001 e0e880000001000000020002066172626f6465026e6c00001c0001c00c00020001000151800012026e730c696e746572636f6e6e656374c013c00c00020001000151800006036e7332c02ac02700010001000151800004d453c005c04500010001000151800004d453c006 41476 ed9f00000001000000000000056d63646f73026e6c0000010001 ed9f80000001000000020001056d63646f73026e6c0000010001c00c0002000100015180000c04666e657404666e6574c012c00c0002000100015180000d036e7332036b706e036e657400c02600010001000151800004c1ac2b01 41477 958000000001000000000000036e733303777873026e6c0000010001 958080000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 41478 5a8000000001000000000000056c79636f73026e6c0000ff0001 5a8080000001000000020000056c79636f73026e6c0000ff0001c00c0002000100015180001106646e73312d31056c79636f7302646500c00c0002000100015180000906646e73322d31c02d 41479 d7e100000001000000000000056c79636f73026e6c0000010001 d7e180000001000000020000056c79636f73026e6c0000010001c00c0002000100015180001106646e73312d31056c79636f7302646500c00c0002000100015180000906646e73322d31c02d 41480 5d0d0000000100000000000006636861726973026e6c0000010001 5d0d8000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 41481 6fb700000001000000000000037777770b6b6c616173616c74656e61026e6c0000010001 6fb780000001000000020002037777770b6b6c616173616c74656e61026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c01cc01000020001000151800006036e7332c034c03000010001000151800004d5c9e8c8c05000010001000151800004d5c9e8c9 41482 c2aa000000010000000000000477697368026e6c00000f0001 c2aa800000010000000300020477697368026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c011c00c0002000100015180000704616e7332c02ac00c0002000100015180001404616e73330a74697363616c696e657402626500c02500010001000151800004c3f14d38c04000010001000151800004c3f13325 41483 c29600000001000000000000037777770b303930362d72756b6b656e026e6c0000010001 c29680000001000000020000037777770b303930362d72756b6b656e026e6c0000010001c01000020001000151800012036e73310878656e6f73697465036e657400c01000020001000151800006036e7332c034 41484 d9ba0000000100000000000003777777077269636172646f026e6c0000010001 d9ba8000000100000003000303777777077269636172646f026e6c0000010001c0100002000100015180000a036e733103676d74c018c01000020001000151800006036e7332c030c01000020001000151800006036e7333c030c02c00010001000151800004d44eb80dc042000100010001518000043ea6a022c05400010001000151800004d554c485 41485 7e030000000100000000000003626c3102626c06787334616c6c026e6c0000010001 7e038000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 41486 cbbc00000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 cbbc80000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 41487 6f3200000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 6f3280000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 41488 0bd300000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 0bd380000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 41489 1e0b00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 1e0b80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 41490 50b400000001000000000000046e696574026e6c00000f0001 50b480000001000000020002046e696574026e6c00000f0001c00c0002000100015180000e036e73310762617365776562c011c00c00020001000151800006036e7332c029c02500010001000151800004d535d035c03f00010001000151800004d535d034 41491 4a4a01000001000000000000013203313434033137360331393307696e2d61646472046172706100000c0001 4a4a81020001000000000000013203313434033137360331393307696e2d61646472046172706100000c0001 41492 091000000001000000000000037777770e68616c6d616b656c61617264696a026e6c0000010001 091080000001000000020002037777770e68616c6d616b656c61617264696a026e6c0000010001c0100002000100015180000b04646e733103627367c01fc0100002000100015180000704646e7332c038c033000100010001518000043e3a8553c04a000100010001518000043e3a8554 41493 22760000000100000000000003667331056c76706161026e6c0000060001 22768000000100000002000203667331056c76706161026e6c0000060001c0100002000100015180000c036e73310573796e7267c016c01000020001000151800006036e7332c02ec02a0001000100015180000452c04b0bc0420001000100015180000452c04b0c 41494 08e400000001000000000000037777770b617564696f636f76657273026e6c0000010001 08e480000001000000020000037777770b617564696f636f76657273026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 41495 b06e00000001000000000000036e733103777572026e6c0000010001 b06e80000001000000020002036e733103777572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000489e0f88dc0360001000100015180000489e0f88e 41496 86a300000001000000000000024e530743495354524f4e024e4c0000010001 86a380000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 41497 2a3a0000000100000000000006746f65746572026e6c00000f0001 2a3a8000000100000002000206746f65746572026e6c00000f0001c00c00020001000151800010026e730a666c7569746d65646961c013c00c00020001000151800006036e7332c02ac0270001000100015180000451045c78c0430001000100015180000451046032 41498 a34500000001000000000000066163762d6276026e6c00000f0001 a34580000001000000020002066163762d6276026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 41499 6e050000000100000000000005646e732d31056c61646f74026e6c0000010001 6e058000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41500 be2f0000000100000000000005646e732d32056c61646f74026e6c0000010001 be2f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41501 58550000000100000000000008696e7465726d6564026e6c00000f0001 58558000000100000002000208696e7465726d6564026e6c00000f0001c00c0002000100015180000b036e7331046b65726ec015c00c00020001000151800006036e7332c02dc02900010001000151800004d9aa2a2cc04000010001000151800004d4cccdb2 41502 f29e000000010000000000000c6d6163726f7474657264616d026e6c0000ff0001 f29e800000010000000200000c6d6163726f7474657264616d026e6c0000ff0001c00c00020001000151800011036e7333076361706361766503636f6d00c00c00020001000151800006036e7334c031 41503 0e8b000000010000000000000561636b6572026e6c00001c0001 0e8b800000010000000200000561636b6572026e6c00001c0001c00c00020001000151800015026e730c776f726c64686f7374696e67036f726700c00c00020001000151800008026e73026175c029 41504 4ad200000001000000000000096d61696c72656c617906706c616e6574026e6c0000010001 4ad280000001000000030003096d61696c72656c617906706c616e6574026e6c0000010001c0160002000100015180000b046e73303803777873c01dc01600020001000151800007046e733039c036c01600020001000151800006036e7334c036c03100010001000151800004c3790128c04800010001000151800004c3790143c05b00010001000151800004d5ef9a65 41505 fe020000000100000000000005646e732d31056c61646f74026e6c0000010001 fe028000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41506 f7750000000100000000000005646e732d32056c61646f74026e6c0000010001 f7758000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41507 df7000000001000000000000036e733103617474026e6c0000010001 df7080000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 41508 a9ca00000001000000000000036e73310c666173747365727665723139026e6c0000260001 a9ca80000001000000020002036e73310c666173747365727665723139026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000442a4f0e1c03f0001000100015180000442a4f0ec 41509 143b000000010000000000000462617274026e6c00000f0001 143b800000010000000200020462617274026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c011c00c00020001000151800006036e7332c029c02500010001000151800004d43d0f08c04300010001000151800004d43d19e2 41510 704800000001000000000000037777770970616b6a6567656c64026e6c0000010001 704880000001000000020002037777770970616b6a6567656c64026e6c0000010001c01000020001000151800010036e733109747265786966646e73c01ac01000020001000151800006036e7332c032c02e000100010001518000043ed45d12c04a000100010001518000043ed45d13 41511 64240000000100000000000004646e733203627367026e6c0000010001 64248000000100000002000204646e733203627367026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc029000100010001518000043e3a8553c00c000100010001518000043e3a8554 41512 51de0000000100000000000004646e733103627367026e6c0000010001 51de8000000100000002000204646e733103627367026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c000100010001518000043e3a8553c037000100010001518000043e3a8554 41513 aa36000000010000000000000a746865686973746f7279026e6c00000f0001 aa36800000010000000200020a746865686973746f7279026e6c00000f0001c00c0002000100015180000d026e73076b6e6f77617265c017c00c00020001000151800006036e7332c02ec02b00010001000151800004c3402003c04400010001000151800004c340202b 41514 f3970000000100000000000005646e732d31056c61646f74026e6c0000010001 f3978000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41515 387a0000000100000000000005736d7470320a696368746875732d6873026e6c0000010001 387a8000000100000003000305736d7470320a696368746875732d6873026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c0120002000100015180000e036e733107737572666e6574c01dc03100010001000151800004c2ab25f0c04300010001000151800004c2ab25dec05500010001000151800004c0576a65 41516 f0700000000100000000000005736d7470320a696368746875732d6873026e6c00001c0001 f0708000000100000003000305736d7470320a696368746875732d6873026e6c00001c0001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c0120002000100015180000e036e733107737572666e6574c01dc03100010001000151800004c2ab25f0c04300010001000151800004c2ab25dec05500010001000151800004c0576a65 41517 0a1600000001000000000000036e73330767617574656e67026e6c0000010001 0a1680000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41518 ea0c00000001000000000000036e73340767617574656e67026e6c0000010001 ea0c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41519 6d8a0000000100000000000009652d6c756e61746963026e6c0000010001 6d8a8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 41520 ac3e0000000100000000000006726c3030303107756e696d616173026e6c0000010001 ac3e8000000100000003000306726c3030303107756e696d616173026e6c0000010001c01300020001000151800002c00cc0130002000100015180000906696361737332c013c0130002000100015180000e036e733107737572666e6574c01bc00c0001000100015180000489780101c03d0001000100015180000489780105c05200010001000151800004c0576a65 41521 14f5000000010000000000000669636173733207756e696d616173026e6c0000010001 14f5800000010000000300030669636173733207756e696d616173026e6c0000010001c0130002000100015180000906726c30303031c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01bc02f0001000100015180000489780101c00c0001000100015180000489780105c05200010001000151800004c0576a65 41522 fa6c0000000100000000000008756d64633030303307756e696d616173026e6c0000010001 fa6c8000000100000003000308756d64633030303307756e696d616173026e6c0000010001c0150002000100015180000906726c30303031c015c0150002000100015180000906696361737332c015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000489780101c0460001000100015180000489780105c05b00010001000151800004c0576a65 41523 57aa0000000100000000000008756d64633030303107756e696d616173026e6c0000010001 57aa8000000100000003000308756d64633030303107756e696d616173026e6c0000010001c0150002000100015180000906726c30303031c015c0150002000100015180000906696361737332c015c0150002000100015180000e036e733107737572666e6574c01dc0310001000100015180000489780101c0460001000100015180000489780105c05b00010001000151800004c0576a65 41524 894d00000001000000000000076e65747261636f026e6c00000f0001 894d80000001000000020001076e65747261636f026e6c00000f0001c00c0002000100015180000a036e733303777873c014c00c00020001000151800006036e7334c02cc03e00010001000151800004d5ef9a65 41525 903900000001000000000000026e7303616d730874656c6567617465026e6c0000010001 903980000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 41526 0173000000010000000000000377777703677a6c026e6c0000010001 0173800000010000000300010377777703677a6c026e6c0000010001c0100002000100015180000e026e7308767575727765726bc014c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c046c028000100010001518000043efa0202 41527 0ffc000000010000000000000b73696e7465726b6c6161730a6a6f7577706167696e61026e6c0000010001 0ffc800000010000000200000b73696e7465726b6c6161730a6a6f7577706167696e61026e6c0000010001c0180002000100015180000e036e73330767617574656e67c023c01800020001000151800006036e7334c03b 41528 06430000000100000000000008657863656c73756d026e6c0000010001 06438000000100000002000208657863656c73756d026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 41529 2ed60000000100000000000003667331056c76706161026e6c0000060001 2ed68000000100000002000203667331056c76706161026e6c0000060001c0100002000100015180000c036e73310573796e7267c016c01000020001000151800006036e7332c02ec02a0001000100015180000452c04b0bc0420001000100015180000452c04b0c 41530 bb430010000100000000000103626c3402626c06787334616c6c026e6c00000100010000290800000080000000 bb438000000100000003000303626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 41531 ab990000000100000000000004414a4158064e494b484546024e4c0000010001 ab998000000100000004000204414a4158064e494b484546024e4c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 41532 0c1a000000010000000000000674656c6c6532026e6c0000010001 0c1a840300010000000100000674656c6c6532026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 41533 e4ef28000001000000010000026e6c0000060001055f6c646170045f746370026763065f6d736463730a63656465726472656566026e6c000021000100000258001f000000640cc40963656465722d6463310a63656465726472656566026e6c00 e4efa8040000000000000000 41534 6ea4000000010000000000000377777707726567726f7570026e6c0000010001 6ea4800000010000000300020377777707726567726f7570026e6c0000010001c0100002000100015180000f036e7331086c65617365776562c018c01000020001000151800006036e7332c030c01000020001000151800012036e7333086c65617365776562036f726700c02c000100010001518000043ed44079c047000100010001518000043ed4407a 41535 ab4b0000000100000000000003777777046b637a79026e6c0000010001 ab4b8000000100000002000203777777046b637a79026e6c0000010001c01000020001000151800013046e7330310b66616972686f7374696e67c015c01000020001000151800007046e733032c02ec02900010001000151800004d943e743c0480001000100015180000440f71c2b 41536 5977000000010000000000000775746572636874026e6c0000010001 5977840300010000000100000775746572636874026e6c0000010001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 41537 1f8d00000001000000000000036e733107737572666e6574026e6c0000010001 1f8d80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 41538 000000007002fca499ac00000204057e01010402 000080010000000000000000 41539 573500000001000000000000026e7308696e637265617365026e6c0000010001 573580000001000000020002026e7308696e637265617365026e6c0000010001c00f0002000100015180000f026e7309657870656469656e74c018c00f0002000100015180000e036e733107656173796e6574c018c02c00010001000151800004d400e7c4c04700010001000151800004c2a55e05 41540 c31c0000000100000000000005646e732d31056c61646f74026e6c0000010001 c31c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41541 c31d0000000100000000000005646e732d32056c61646f74026e6c0000010001 c31d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41542 b82fe4a45010fca429560000000000000000 41543 4ed7000000010000000000000377777703726574026e6c0000010001 4ed7800000010000000300030377777703726574026e6c0000010001c0100002000100015180000f036e7331086e6f766178657373c014c01000020001000151800006036e7332c02cc01000020001000151800006036e7333c02cc02800010001000151800004d5c98015c04300010001000151800004d5c9bf12c05500010001000151800004d5ef9c26 41544 b82fe4a45018fca4909e000000927690000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd22403c4ea20003000000334e544c4d535350000100000097b208e00a000a0029000000090009002000000043454445522d444331434544455244524545460000 41545 8f3100000001000000000000076c6973646f6e6b026e6c0000020001 8f3180000001000000020002076c6973646f6e6b026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 41546 b82fe4b25011fc9628c10000000000000000 41547 f51000000001000000000000026872026e6c00000f0001 f51080000001000000020000026872026e6c00000f0001c00c00020001000151800013036e7331026e6c0669676e697465036e657400c00c00020001000151800006036e7332c027 41548 fd7d00000001000000000000036e733103647768026e6c0000010001 fd7d80000001000000020002036e733103647768026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efb308c03600010001000151800004d5efb303 41549 bad900000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 bad980000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41550 2c1d00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 2c1d80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41551 b82fe4b35010fc9628c00000000000000000 41552 000000007002fca4a2d800000204057e01010402 000080010000000000000000 41553 d3d1000000010000000000000377777711746875697377696e6b656c617761726473026e6c0000010001 d3d1800000010000000200000377777711746875697377696e6b656c617761726473026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c03b 41554 b830dc6f5010fca43ab60000000000000000 41555 254300000001000000000000086365726265727573046b6e7662026e6c0000010001 254380000001000000020000086365726265727573046b6e7662026e6c0000010001c0150002000100015180000f036e7333057477696d6d036e657400c01500020001000151800006036e7337c032 41556 273200000001000000000000026e73066863636e6574026e6c0000010001 273280000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 41557 03c400000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 03c480000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41558 eeaf0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 eeaf8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 41559 b830dc6f5018fca4199f00000092fff0000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd22403c4ea20003000000334e544c4d535350000100000097b208e00a000a0029000000090009002000000043454445522d444331434544455244524545460000 41560 425c00000001000000000000046669646f026e6c0000ff0001 425c80000001000000030002046669646f026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c029c02500010001000151800004d4ccc0fcc05a000100010001518000043efa0703 41561 904200000001000000000000026e7303616d730874656c6567617465026e6c0000010001 904280000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 41562 64780000000100000000000003777777086e6f6b696166616e026e6c0000010001 64788000000100000003000203777777086e6f6b696166616e026e6c0000010001c0100002000100015180000f036e7331086f76657272696465c019c01000020001000151800006036e7333c031c01000020001000151800006036e7332c031c02d00010001000151800004d4ccd5b5c0480001000100015180000451ab0942 41563 b830dc7d5011fc963a210000000000000000 41564 c3200000000100000000000005646e732d31056c61646f74026e6c0000010001 c3208000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41565 c3210000000100000000000005646e732d32056c61646f74026e6c0000010001 c3218000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41566 1a1300000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 1a1380000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41567 b830dc7e5010fc963a200000000000000000 41568 000000007002fca4bdb400000204057e01010402 000080010000000000000000 41569 03ea000000010000000000000377777709656e7465727465656e026e6c0000010001 03ea800000010000000300020377777709656e7465727465656e026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01ac01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c032c02e000100010001518000045054e055c06700010001000151800004d4ccc655 41570 5b93000000010000000000000e6c69736d616e656e6c69736d616e026e6c0000020001 5b93800000010000000200020e6c69736d616e656e6c69736d616e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01bc00c00020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 41571 b831aa875010fca487790000000000000000 41572 b831aa875018fca4dd02000000928950000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd22403c4ea20003000000334e544c4d535350000100000097b208e00a000a0029000000090009002000000043454445522d444331434544455244524545460000 41573 b1c700000001000000000000037777770863616c6c63617368026e6c0000010001 b1c780000001000000030002037777770863616c6c63617368026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c019c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c031c02d000100010001518000045054e055c06600010001000151800004d4ccc655 41574 b831aa955011fc9686e40000000000000000 41575 00000000b002832c74fc0000010303010101080a11236035000000000101040202040564 000080010000000000000000 41576 b8324e3480108598a35a00000101080a1123603601280812 b832c8010000000000000000 41577 0685000000010000000000001077696c6c656d656e6a616e6e656e6b6503746d66026e6c0000ff0001 0685800000010000000200001077696c6c656d656e6a616e6e656e6b6503746d66026e6c0000ff0001c01d0002000100015180000f036e73310571696e6970036e657400c01d00020001000151800006036e7332c039 41578 b831aa965010fc9686e30000000000000000 41579 0f4600000001000000000000037777770f76616e62696a7374657276656c6474026e6c0000010001 0f4680000001000000020002037777770f76616e62696a7374657276656c6474026e6c0000010001c01000020001000151800011036e73310a646e7373657276657273c020c01000020001000151800006036e7332c038c034000100010001518000045054ed14c05100010001000151800004d5f72f14 41580 2dd400000001000000000000037777770a776f6c66747261646572026e6c0000010001 2dd480000001000000020002037777770a776f6c66747261646572026e6c0000010001c01000020001000151800009036e7331026973c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5852102c04400010001000151800004d5c41503 41581 3689000000010000000000000377777709677261746973736d73026e6c0000010001 3689800000010000000200000377777709677261746973736d73026e6c0000010001c01000020001000151800016036e73310c726567696f686f7374696e6703636f6d00c01000020001000151800006036e7332c032 41582 87cb01000001000000000000026e6c0000060001 87cb85000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 41583 3b0d00000001000000000000076b72616e74656e0c7665727a616d656c67696473026e6c0000010001 3b0d80000001000000020000076b72616e74656e0c7665727a616d656c67696473026e6c0000010001c01400020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01400020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 41584 de71000000010000000000000377777704616c6469026e6c0000010001 de71800000010000000200000377777704616c6469026e6c0000010001c0100002000100015180001a046e73303904626e69630b62657274656c736d616e6e02646500c01000020001000151800007046e733137c02e 41585 e97900000001000000000000066368656c6c6f026e6c00000f0001 e97980000001000000030003066368656c6c6f026e6c00000f0001c00c00020001000151800007046e733031c00cc00c00020001000151800007046e733032c00cc00c0002000100015180000a036e733103757063c013c02700010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 41586 52ca00000001000000000000037777770b67616d65706c616e656574026e6c0000010001 52ca80000001000000030002037777770b67616d65706c616e656574026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c01cc01000020001000151800006036e7332c034c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03000010001000151800004cf2cd7adc0510001000100015180000452c04365 41587 7d100000000100000000000006636861726973026e6c00000f0001 7d108000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 41588 2d7900000001000000000000036e7331076e6574666c6578026e6c0000010001 2d7980000001000000030003036e7331076e6574666c6578026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c26d5ba8c03a00010001000151800004507f2f25c04c00010001000151800004507ede20 41589 e27100000001000000000000036e7332076e6574666c6578026e6c0000010001 e27180000001000000030003036e7332076e6574666c6578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02c00010001000151800004c26d5ba8c00c00010001000151800004507f2f25c04c00010001000151800004507ede20 41590 b39300000001000000000000036e7333076e6574666c6578026e6c0000010001 b39380000001000000030003036e7333076e6574666c6578026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c26d5ba8c03e00010001000151800004507f2f25c00c00010001000151800004507ede20 41591 a8e000000001000000000000026e7306766576696461026e6c0000010001 a8e080000001000000030002026e7306766576696461026e6c0000010001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 41592 905700000001000000000000026e7303616d730874656c6567617465026e6c0000010001 905780000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 41593 d47000000001000000000000026e7306766576696461026e6c0000260001 d47080000001000000030002026e7306766576696461026e6c0000260001c00f0002000100015180000d036e733106776964657873c016c00f00020001000151800010036e733206776964657873036e657400c00f00020001000151800006036e7333c02ec02a00010001000151800004d4ccc0fcc05f000100010001518000043efa0703 41594 b56400000001000000000000036e733206766576696461026e6c0000010001 b56480000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 41595 ad2100000001000000000000036e733206766576696461026e6c0000260001 ad2180000001000000030002036e733206766576696461026e6c0000260001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 41596 09270000000100000000000009636f746563682d6276026e6c00000f0001 09278000000100000002000009636f746563682d6276026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c030 41597 678b000000010000000000000164026c62057370696c6c026e6c0000010001 678b800000010000000300020164026c62057370696c6c026e6c0000010001c0110002000100015180000d036e733106776964657873c017c01100020001000151800010036e733206776964657873036e657400c01100020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 41598 904800000001000000000000037777770a656967656e7374617274026e6c0000010001 904880000001000000020000037777770a656967656e7374617274026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 41599 93b300000001000000000000036e7333027a73026e6c00001c0001 93b380000001000000030003036e7333027a73026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02700010001000151800004d5ef829fc03900010001000151800004d5ef8005c00c00010001000151800004d5ef82a0 41600 d3cb00000001000000000000036e7333027a73026e6c0000260001 d3cb80000001000000030003036e7333027a73026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02700010001000151800004d5ef829fc03900010001000151800004d5ef8005c00c00010001000151800004d5ef82a0 41601 e9f800000001000000000000036e7331027a73026e6c00001c0001 e9f880000001000000030003036e7331027a73026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef829fc03500010001000151800004d5ef8005c04700010001000151800004d5ef82a0 41602 dd7d00000001000000000000036e7331027a73026e6c0000260001 dd7d80000001000000030003036e7331027a73026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ef829fc03500010001000151800004d5ef8005c04700010001000151800004d5ef82a0 41603 b8db00000001000000000000036e7332027a73026e6c00001c0001 b8db80000001000000030003036e7332027a73026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02700010001000151800004d5ef829fc00c00010001000151800004d5ef8005c04700010001000151800004d5ef82a0 41604 39fd00000001000000000000036e7332027a73026e6c0000260001 39fd80000001000000030003036e7332027a73026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02700010001000151800004d5ef829fc00c00010001000151800004d5ef8005c04700010001000151800004d5ef82a0 41605 980800000001000000000000037777770b696b77696c65656e70696c026e6c0000010001 980880000001000000030002037777770b696b77696c65656e70696c026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01cc01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c034c030000100010001518000045054e055c06900010001000151800004d4ccc655 41606 b91d28000001000000010000026e6c0000060001055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d73646373074f424856534c53026e6c000021000100000258001b00000064018508646330316876736c074f424856534c53026e6c00 b91da8040000000000000000 41607 c61000000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 c61080000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41608 b3720000000100000000000003626c3402626c06787334616c6c026e6c0000010001 b3728000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 41609 b8324e34801885988e7200000101080a1123604b01280812008ec200000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afc73403c4df300030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000004c4150544f505745524b47524f45500000 b832c8010000000000000000 41610 000000007002faf0747000000204056401010402 000080010000000000000000 41611 ddb200000001000000000000037777770e64656c61616773746572656e7465026e6c0000010001 ddb280000001000000020002037777770e64656c61616773746572656e7465026e6c0000010001c0100002000100015180000f036e73310864736267726f6570c01fc01000020001000151800006036e7332c037c03300010001000151800004d4362461c04e00010001000151800004c36c2c36 41612 b8324e4280108598a2a600000101080a1123604b01280813 b832c8010000000000000000 41613 fc7800000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 fc7880000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 41614 d305000000010000000000000f6d61782d6164766572746973696e67026e6c00000f0001 d305800000010000000300030f6d61782d6164766572746973696e67026e6c00000f0001c00c00020001000151800013036e73310c636172647365727669636573c01cc00c00020001000151800006036e7332c034c00c00020001000151800006036e7333c034c03000010001000151800004d5c9baf3c04f00010001000151800004d5c9baf4c06100010001000151800004c26d4023 41615 17ef0000000100000000000003737477026e6c0000010001 17ef8000000100000002000203737477026e6c0000010001c00c000200010001518000070469726973c00cc00c0002000100015180000e036e733107737572666e6574c010c02400010001000151800004c3a95a82c03700010001000151800004c0576a65 41616 b8344c685010fd5c99cb0000000000000000 b834cc640000000000000000 41617 b8344c685018fd5c25800000008e4c97000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afde1403c4f6100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 b834cc640000000000000000 41618 2dfe00000001000000000000037777770b6372617a797069616e6f73026e6c0000010001 2dfe80000001000000030001037777770b6372617a797069616e6f73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 41619 82980000000100000000000003777777086e6f6b696166616e026e6c0000010001 82988000000100000003000203777777086e6f6b696166616e026e6c0000010001c0100002000100015180000f036e7331086f76657272696465c019c01000020001000151800006036e7333c031c01000020001000151800006036e7332c031c02d00010001000151800004d4ccd5b5c0480001000100015180000451ab0942 41620 b5fc00000001000000000000156c6973742d746869656d656d65756c656e686f6666026e6c0000020001 b5fc80000001000000020002156c6973742d746869656d656d65756c656e686f6666026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec022c00c00020001000151800006036e7332c03ac03600010001000151800004c29f4906c04e00010001000151800004c29fb004 41621 822100000001000000000000026e73036b6c6d026e6c0000010001 822180000001000000020001026e73036b6c6d026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004ab155012 41622 82220000000100000000000003666c79036b6c6d026e6c0000010001 82228000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 41623 a1af00000001000000000000037777770e7275726f756e696b656e7368696e026e6c0000010001 a1af80000001000000020000037777770e7275726f756e696b656e7368696e026e6c0000010001c01000020001000151800012036e733108636974757377656203636f6d00c01000020001000151800006036e7332c037 41624 5c2a0000000100000000000007636d6174616c6c026e6c00000f0001 5c2a8403000100000001000007636d6174616c6c026e6c00000f0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 41625 b8344c765011fd4e993a0000000000000000 b834cc740000000000000000 41626 000000007002faf063ec00000204056401010402 000080010000000000000000 41627 bcdf00000001000000000000036e7333076e656473746174026e6c0000010001 bcdf80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 41628 0b0d0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 0b0d8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 41629 382d0000000100000000000003777777076b6c616e74656e0465786564026e6c0000010001 382d8000000100000002000203777777076b6c616e74656e0465786564026e6c0000010001c01800020001000151800013036e73310c62656472696a76656e776562c01dc01800020001000151800006036e7332c035c03100010001000151800004d90867fec05000010001000151800004c1ad2bfe 41630 2ab90000000100000000000009652d6c756e61746963026e6c0000010001 2ab98000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 41631 b8344c775010fd4e99390000000000000000 b834cc740000000000000000 41632 b83533955010fd5ca2190000000000000000 b835b3940000000000000000 41633 2ca300000001000000000000036e73310a6d61696e736572766572026e6c0000010001 2ca380000001000000020002036e73310a6d61696e736572766572026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c01bc01000020001000151800006036e7332c033c02f00010001000151800004d90867fec04e00010001000151800004c1ad2bfe 41634 0fd400000001000000000000036e73320a6d61696e736572766572026e6c0000010001 0fd480000001000000020002036e73320a6d61696e736572766572026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c01bc01000020001000151800006036e7332c033c02f00010001000151800004d90867fec04e00010001000151800004c1ad2bfe 41635 b83533955018fd5c53880000008e27de000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afde1403c4f6100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 b835b3940000000000000000 41636 366e00000001000000000000037777770d766f657462616c6f6e6c696e65026e6c0000010001 366e80000001000000030002037777770d766f657462616c6f6e6c696e65026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 41637 4af600000001000000000000037777770972706d2d6d65646961026e6c0000010001 4af680000001000000030001037777770972706d2d6d65646961026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 41638 b83533a35011fd4ea1880000000000000000 b835b3a40000000000000000 41639 000000007002faf0873e00000204056401010402 000080010000000000000000 41640 7d0700100001000000000001036e73310a63796265726d65646961026e6c00000100010000290800000080000000 7d0780000001000000020003036e73310a63796265726d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e818c0ac03d000100010001518000043e3a2d990000291000000000000000 41641 646000000001000000000000037777770c6469676974616c73746f7265026e6c0000010001 646080000001000000020002037777770c6469676974616c73746f7265026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 41642 e5c700000001000000000000047362646d0c737472617762657272696573026e6c0000010001 e5c780000001000000020002047362646d0c737472617762657272696573026e6c0000010001c0110002000100015180000c026e7306787334616c6cc01ec01100020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 41643 8e1f000000010000000000000762616e6e65727303696d73026e6c0000010001 8e1f800000010000000300020762616e6e65727303696d73026e6c0000010001c0140002000100015180000d036e733106776964657873c018c01400020001000151800010036e733206776964657873036e657400c01400020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 41644 40fb000000010000000000000368636e026e6c00001c0001 40fb800000010000000300010368636e026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 41645 8155000000010000000000000377777705706978756d026e6c0000010001 8155800000010000000200000377777705706978756d026e6c0000010001c01000020001000151800010036e7331066272696e6765036e657400c01000020001000151800006036e7332c02e 41646 bb5c00100001000000000001036e73320a63796265726d65646961026e6c00000100010000290800000080000000 bb5c80000001000000020003036e73320a63796265726d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f000100010001518000043e818c0ac00c000100010001518000043e3a2d990000291000000000000000 41647 b83533a45010fd4ea1870000000000000000 b835b3a40000000000000000 41648 b835f3265010fd5c05da0000000000000000 41649 18560000000100000000000009666c61736867656e3206706c616e6574026e6c0000010001 18568000000100000003000309666c61736867656e3206706c616e6574026e6c0000010001c0160002000100015180000b046e73303803777873c01dc01600020001000151800007046e733039c036c01600020001000151800006036e7334c036c03100010001000151800004c3790128c04800010001000151800004c3790143c05b00010001000151800004d5ef9a65 41650 081c000000010000000000000b6c6973742d79617264656e026e6c0000020001 081c800000010000000200020b6c6973742d79617264656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 41651 b835f3265018fd5c0b910000008ed395000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afde1403c4f6100030000002f4e544c4d535350000100000097b208e007000700280000000800080020000000444330314856534c4f424856534c530000 41652 3dd80000000100000000000004636e733007656173796e6574026e6c0000010001 3dd88000000100000002000204636e733007656173796e6574026e6c0000010001c01100020001000151800006036e7330c011c01100020001000151800006036e7331c011c02d00010001000151800004c2a55e01c03f00010001000151800004c2a55e05 41653 b835f3345011fd4e05490000000000000000 41654 cf730000000100000000000003777777086861776b65796573026e6c0000010001 cf738000000100000003000303777777086861776b65796573026e6c0000010001c0100002000100015180000d046e733031056d61636f6ec019c01000020001000151800007046e733032c032c01000020001000151800007046e733033c032c02d000100010001518000045360bc03c046000100010001518000045360bc04c0590001000100015180000450454704 41655 45490000000100000000000006636f62616c740a6e65746d61696c696e67026e6c00000f0001 45498000000100000002000006636f62616c740a6e65746d61696c696e67026e6c00000f0001c01300020001000151800011036e73310764697265637435036e657400c01300020001000151800006036e7332c036 41656 635c00000001000000000000056c7670627606787334616c6c026e6c0000010001 635c80000001000000030002056c7670627606787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 41657 b835f3355010fd4e05480000000000000000 41658 bf0e00000001000000000000037777771073656372657461726573736562616e6b026e6c0000010001 bf0e80000001000000030002037777771073656372657461726573736562616e6b026e6c0000010001c0100002000100015180000d036e733106776964657873c021c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c039c03500010001000151800004d4ccc0fcc06a000100010001518000043efa0703 41659 743100000001000000000000056d61696c310976697275737672696a026e6c0000010001 743180000001000000020000056d61696c310976697275737672696a026e6c0000010001c0120002000100015180000d036e7331036b706e036e657400c01200020001000151800006036e7332c034 41660 82db000000010000000000000377777706746f796f7461026e6c0000010001 82db800000010000000200010377777706746f796f7461026e6c0000010001c01000020001000151800017026e7311656e7465727072697365686f7374696e67c017c0100002000100015180000b026e73026e6c036e657400c02b00010001000151800004d5358e02 41661 2c2d000000010000000000000c6c6973747365727669636573026e6c0000020001 2c2d800000010000000200020c6c6973747365727669636573026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 41662 20af00000001000000000000046d61696c05706f737461026e6c0000010001 20af80000001000000020002046d61696c05706f737461026e6c0000010001c0110002000100015180000a036e7331036e7873c017c01100020001000151800006036e7332c02fc02b00010001000151800004d973c015c04100010001000151800004d973c102 41663 560200000001000000000000056d61636177026e6c00001c0001 560280000001000000020002056d61636177026e6c00001c0001c00c00020001000151800011036e73310a6d756c74696b6162656cc012c00c00020001000151800006036e7332c02ac0260001000100015180000450f2e002c0430001000100015180000450f2e006 41664 d0fa000000010000000000000462617261026e6c00000f0001 d0fa800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 41665 1bda0000000100000000000005646e732d31056c61646f74026e6c0000010001 1bda8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41666 81b50000000100000000000005646e732d32056c61646f74026e6c0000010001 81b58000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41667 8e37000000010000000000000664657369676e0d7765626d617374657263697479026e6c0000010001 8e37800000010000000200000664657369676e0d7765626d617374657263697479026e6c0000010001c01300020001000151800012026e73096e6c686f7374696e67036e657400c01300020001000151800006036e7331c038 41668 378000000001000000000000037777770a64726f6d656461726973026e6c0000010001 378080000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 41669 078d00000001000000000000037777770a64726f6d656461726973026e6c0000010001 078d80000001000000020000037777770a64726f6d656461726973026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c045 41670 2eb800000001000000000000036e73320a63796265726d65646961026e6c0000010001 2eb880000001000000020002036e73320a63796265726d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02f000100010001518000043e818c0ac00c000100010001518000043e3a2d99 41671 793d0000000100000000000005646e732d31056c61646f74026e6c0000010001 793d8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41672 6f340000000100000000000005646e732d32056c61646f74026e6c0000010001 6f348000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41673 f5fb0000000100000000000004736d74700575706e6574026e6c00001c0001 f5fb8000000100000002000204736d74700575706e6574026e6c00001c0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02b00010001000151800004d5c428dfc03d0001000100015180000451113206 41674 14460000000100000000000004736d74700575706e6574026e6c0000010001 14468000000100000002000204736d74700575706e6574026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02b00010001000151800004d5c428dfc03d0001000100015180000451113206 41675 4e0e0000000100000000000004736d74700575706e6574026e6c0000260001 4e0e8000000100000002000204736d74700575706e6574026e6c0000260001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02b00010001000151800004d5c428dfc03d0001000100015180000451113206 41676 de1200000001000000000000036e73310575706e6574026e6c00001c0001 de1280000001000000020002036e73310575706e6574026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5c428dfc0380001000100015180000451113206 41677 c9020000000100000000000004617369610374656e026e6c0000010001 c9028000000100000002000104617369610374656e026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c36c4b01 41678 baa900000001000000000000036e73310575706e6574026e6c0000260001 baa980000001000000020002036e73310575706e6574026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5c428dfc0380001000100015180000451113206 41679 380500000001000000000000036e73320575706e6574026e6c00001c0001 380580000001000000020002036e73320575706e6574026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d5c428dfc00c0001000100015180000451113206 41680 b0e600000001000000000000036e73320575706e6574026e6c0000260001 b0e680000001000000020002036e73320575706e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a00010001000151800004d5c428dfc00c0001000100015180000451113206 41681 d46e00000001000000000000076f757464617265026e6c0000010001 d46e80000001000000030002076f757464617265026e6c0000010001c00c0002000100015180000f036e73310870726f7365727665c014c00c00020001000151800012036e73320970726f2d736572766502626500c00c00020001000151800006036e7333c02cc028000100010001518000045054e055c06100010001000151800004d4ccc655 41682 b34c00000001000000000000077761616e646f6f026e6c0000010001 b34c84030001000000010000077761616e646f6f026e6c0000010001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 41683 bdb60000000100000000000007746f70626f7577026e6c00001c0001 bdb68000000100000002000007746f70626f7577026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 41684 29f40000000100000000000005646e732d31056c61646f74026e6c0000010001 29f48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41685 c54c00000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 c54c80000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 41686 ba4600000001000000000000036e73320f6761726e69657270726f6a65637473026e6c00001c0001 ba4680000001000000020002036e73320f6761726e69657270726f6a65637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 41687 18b800000001000000000000026e730f6761726e69657270726f6a65637473026e6c00001c0001 18b880000001000000020002026e730f6761726e69657270726f6a65637473026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 41688 0ac400000001000000000000036e73310f6761726e69657270726f6a65637473026e6c00001c0001 0ac480000001000000020002036e73310f6761726e69657270726f6a65637473026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc034000100010001518000045117e122c00c000100010001518000045117e142 41689 64e200000001000000000001086669726577616c6c0564656e736f026e6c00001c00010000291000000000000000 64e280000001000000020001086669726577616c6c0564656e736f026e6c00001c0001c0150002000100015180000b026e73026e6c036e657400c0150002000100015180001206617574683630026e73026e6c027575c0350000291000000000000000 41690 1303000000010000000000000b706572676563747374656c026e6c0000010001 1303840300010000000100000b706572676563747374656c026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 41691 1750000000010000000000000a7a776f6c6c656173767a026e6c0000010001 1750840300010000000100000a7a776f6c6c656173767a026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 41692 175c00000001000000000000036e73310a63796265726d65646961026e6c0000010001 175c80000001000000020002036e73310a63796265726d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e818c0ac03d000100010001518000043e3a2d99 41693 2b210000000100000000000008686f73746e616d650462696e640000100003 2b218000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41694 93a3000000010000000000000377777708656c7574696f6e7a026e6c0000010001 93a3800000010000000200020377777708656c7574696f6e7a026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c019c01000020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 41695 38750000000100000000000003726476026e6c0000010001 38758000000100000003000303726476026e6c0000010001c00c00020001000151800011036e73310a6d756c74696b6162656cc010c00c00020001000151800006036e7332c028c00c0002000100015180000e036e733407737570706f7274c010c0240001000100015180000450f2e002c0410001000100015180000450f2e006c05300010001000151800004c372e6fe 41696 5caa000000010000000000000a7061756c73696d6f6e73026e6c00000f0001 5caa800000010000000200000a7061756c73696d6f6e73026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c02e 41697 266a000000010000000000000e70632d62657665696c6967696e67096172726f7773776562026e6c0000010001 266a800000010000000200020e70632d62657665696c6967696e67096172726f7773776562026e6c0000010001c01b0002000100015180000f026e7309656174736572766572c025c01b00020001000151800006036e7332c03cc03900010001000151800004d4cb0e42c05400010001000151800004d4cb1221 41698 64e200000001000000000000086669726577616c6c0564656e736f026e6c00001c0001 64e280000001000000020000086669726577616c6c0564656e736f026e6c00001c0001c0150002000100015180000b026e73026e6c036e657400c0150002000100015180001206617574683630026e73026e6c027575c035 41699 527f0000000100000000000008686f73746e616d650462696e640000100003 527f8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41700 46bb000000010000000000000377777707666c6162626572026e6c0000010001 46bb800000010000000300020377777707666c6162626572026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 41701 f3430000000100000000000007667265656c6572026e6c00000f0001 f3438000000100000002000007667265656c6572026e6c00000f0001c00c000200010001518000290b65766973702d6e732d3031036f70730761736d722d30310b656e65726769732d696463036e657400c00c0002000100015180000e0b65766973702d6e732d3032c034 41702 4e9400000001000000000000037777770c73656173656574726176656c026e6c0000010001 4e9480000001000000020000037777770c73656173656574726176656c026e6c0000010001c01000020001000151800012036e7331086f6e6c696e6562700362697a00c01000020001000151800006036e7332c035 41703 e878000000010000000000000a6765726172642d6d6f620b6577772d6e65747765726b026e6c0000060001 e878840300010000000100000a6765726172642d6d6f620b6577772d6e65747765726b026e6c0000060001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 41704 b7ef00000001000000000000036e733503777873026e6c0000010001 b7ef80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 41705 96660000000100000000000008686f73746e616d650462696e640000100003 96668000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41706 175500000001000000000000046d61696c0f76616e64696a6b6c756e746572656e026e6c0000010001 175580000001000000020002046d61696c0f76616e64696a6b6c756e746572656e026e6c0000010001c0110002000100015180000e026e730874657272617a7572c021c01100020001000151800006036e7332c038c03500010001000151800004d5880e9ac04f00010001000151800004d59ae202 41707 ff7f0000000100000000000008686f73746e616d650462696e640000100003 ff7f8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41708 486c000000010000000000000c6172626f7276696577696e6e026e730263610a6f74652d696e7465726e026e6c0000010001 486c840300010000000100000c6172626f7276696577696e6e026e730263610a6f74652d696e7465726e026e6c0000010001c02a00060001000038400036026e730f646f6d61696e2d7265676973747279c02a0a686f73746d6173746572c0410bf1e540000070800000384000278d0000003840 41709 ec5000000001000000000000055f6c646170045f746370026463065f6d7364637303646331077676736f777674026e6c0000210001 ec5080000001000000020000055f6c646170045f746370026463065f6d7364637303646331077676736f777674026e6c0000210001c02500020001000151800014036e733108747572626f646e7302636f02756b00c02500020001000151800006036e7332c045 41710 1966000000010000000000000873656c6563746966026e6c00000f0001 1966800000010000000200000873656c6563746966026e6c00000f0001c00c0002000100015180000f036e7331056165696374036e657400c00c00020001000151800006036e7332c02d 41711 15b400000001000000000000046d636665026e6c00000f0001 15b480000001000000030000046d636665026e6c00000f0001c00c00020001000151800011086575726f2d6e7331026377036e657400c00c0002000100015180000b086575726f2d6e7332c02ec00c0002000100015180000b086575726f2d6e7333c02e 41712 eed300000001000000000000036e73320568616e7a65026e6c0000010001 eed380000001000000030003036e73320568616e7a65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004912106efc00c00010001000151800004912106eec04a00010001000151800004c0576a65 41713 7a2900000001000000000000036e733503777873026e6c0000010001 7a2980000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 41714 5dec000000010000000000000866616c6c6261636b08767575727765726b026e6c0000010001 5dec800000010000000300010866616c6c6261636b08767575727765726b026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 41715 4e0f000000010000000000000866616c6c6261636b08767575727765726b026e6c00001c0001 4e0f800000010000000300010866616c6c6261636b08767575727765726b026e6c00001c0001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 41716 c2ee00000001000000000000077365617263687906787334616c6c026e6c0000010001 c2ee80000001000000030002077365617263687906787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 41717 b02c000000010000000000000462657461026e6c00000f0001 b02c800000010000000300010462657461026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc011c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c043c025000100010001518000043efa0202 41718 799b00000001000000000000037777770a626f64796d616e696163026e6c0000010001 799b80000001000000020000037777770a626f64796d616e696163026e6c0000010001c01000020001000151800015036e73310b7072696f73657276653038036e657400c01000020001000151800006036e7332c033 41719 e3a800000001000000000000086d61696c686f737405696e6e6574026e6c0000010001 e3a880000001000000020000086d61696c686f737405696e6e6574026e6c0000010001c0150002000100015180000d026e7304696e6265036e657400c01500020001000151800006036e6963c032 41720 6e9e00000001000000000000046d61696c0f76616e64696a6b6c756e746572656e026e6c0000010001 6e9e80000001000000020002046d61696c0f76616e64696a6b6c756e746572656e026e6c0000010001c0110002000100015180000e026e730874657272617a7572c021c01100020001000151800006036e7332c038c03500010001000151800004d5880e9ac04f00010001000151800004d59ae202 41721 62fa0000000100000000000003504155066d617263656c026e6c0000010001 62fa8000000100000002000003504155066d617263656c026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800018036e73310e73706c69742d696e66696e697479036e657400 41722 e602000000010000000000000377777708646577696572656e026e6c0000010001 e602800000010000000200000377777708646577696572656e026e6c0000010001c0100002000100015180001905646e7330310d636f6d70726173657276657273036e657400c0100002000100015180000805646e733032c033 41723 2251000000010000000000000a706572727973706f7274026e6c0000010001 2251800000010000000300030a706572727973706f7274026e6c0000010001c00c00020001000151800010036e7331096d61726b6772616166c017c00c00020001000151800006036e7332c02fc00c00020001000151800006036e7333c02fc02b00010001000151800004c3f13ceec04700010001000151800004c372eb43c059000100010001518000043e320e8f 41724 a9f300000001000000000000026e7311656e7465727072697365686f7374696e67026e6c00001c0001 a9f380000001000000020001026e7311656e7465727072697365686f7374696e67026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d5358e02 41725 f28000000001000000000000026e7311656e7465727072697365686f7374696e67026e6c0000260001 f28080000001000000020001026e7311656e7465727072697365686f7374696e67026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d5358e02 41726 311300000001000000000000055f6c646170045f746370026463065f6d736463730864696a6b77657374026e6c0000210001 311384030001000000010000055f6c646170045f746370026463065f6d736463730864696a6b77657374026e6c0000210001c02a00060001000038400036026e730f646f6d61696e2d7265676973747279c02a0a686f73746d6173746572c0410bf1e540000070800000384000278d0000003840 41727 7cf700000001000000000000036e733407737570706f7274026e6c00fa180001 7cf780000001000000020002036e733407737570706f7274026e6c00fa180001c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004c372e7c8c00c00010001000151800004c372e6fe 41728 430b00000001000000000000026e73067a6f6e6e6574026e6c0000010001 430b80000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 41729 bc2700000001000000000000037777770d76646e74656c656d6174696361026e6c0000010001 bc2780000001000000020000037777770d76646e74656c656d6174696361026e6c0000010001c01000020001000151800010036e733106626973636f6e036e657400c01000020001000151800006036e7332c036 41730 d54a000000010000000000000368636e026e6c00000f0001 d54a800000010000000300010368636e026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 41731 355000000001000000000000037777770e666572776572646572616469656c026e6c0000010001 355080000001000000020002037777770e666572776572646572616469656c026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01fc01000020001000151800006036e7332c037c03300010001000151800004d43d0f08c05100010001000151800004d43d19e2 41732 f4e6000000010000000000000a706572727973706f7274026e6c0000010001 f4e6800000010000000300030a706572727973706f7274026e6c0000010001c00c00020001000151800010036e7331096d61726b6772616166c017c00c00020001000151800006036e7332c02fc00c00020001000151800006036e7333c02fc02b00010001000151800004c3f13ceec04700010001000151800004c372eb43c059000100010001518000043e320e8f 41733 e02800000001000000000000037777770f646170707265737472696a64657273026e6c0000010001 e02880000001000000020000037777770f646170707265737472696a64657273026e6c0000010001c01000020001000151800013036e7335097577686f7374696e67036e657400c01000020001000151800006036e7336c038 41734 57ce000000010000000000000377777706746f796f7461026e6c0000010001 57ce800000010000000200010377777706746f796f7461026e6c0000010001c01000020001000151800017026e7311656e7465727072697365686f7374696e67c017c0100002000100015180000b026e73026e6c036e657400c02b00010001000151800004d5358e02 41735 acb200000001000000000000037777770767617a656c6c65026e6c0000010001 acb280000001000000030003037777770767617a656c6c65026e6c0000010001c0100002000100015180000e076e73617574683103626974c018c0100002000100015180000a076e736175746832c034c0100002000100015180000a076e736175746833c034c02c00010001000151800004d5880c33c04600010001000151800004d5880c3bc05c00010001000151800004d4ccc00b 41736 edd100000001000000000000046d61696c096e75636c6574726f6e026e6c0000010001 edd180000001000000030001046d61696c096e75636c6574726f6e026e6c0000010001c01100020001000151800002c00cc01100020001000151800012047365633103646e73067073696e6574c01bc011000200010001518000070473656332c042c00c00010001000151800004c3510f14 41737 03ce00000001000000000000046d61696c096e75636c6574726f6e026e6c00001c0001 03ce80000001000000030001046d61696c096e75636c6574726f6e026e6c00001c0001c01100020001000151800002c00cc01100020001000151800012047365633103646e73067073696e6574c01bc011000200010001518000070473656332c042c00c00010001000151800004c3510f14 41738 3b1c0000000100000000000007766462636f6d70026e6c00001c0001 3b1c8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 41739 dd83000000010000000000000b64737772696a7377696a6b026e6c0000ff0001 dd83800000010000000200000b64737772696a7377696a6b026e6c0000ff0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c030 41740 3996000000010000000000000568612d726f06787334616c6c026e6c0000010001 3996800000010000000300020568612d726f06787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 41741 1e4800000001000000000000077a782d79616769026e6c00000f0001 1e4880000001000000020000077a782d79616769026e6c00000f0001c00c00020001000151800012036e733708786c736572766572036e657400c00c00020001000151800006036e7338c02c 41742 3a4200000001000000000000046d61696c0c70726f6d6f73797374656d73026e6c0000010001 3a4280000001000000020002046d61696c0c70726f6d6f73797374656d73026e6c0000010001c0110002000100015180000d026e730777697a7a626974c01ec01100020001000151800006036e7332c035c032000100010001518000043e3a360bc04b000100010001518000043e3a360c 41743 653500000001000000000000046d61696c09766973696f6e347573026e6c0000010001 653580000001000000020002046d61696c09766973696f6e347573026e6c0000010001c0110002000100015180000c036e73310564656d6f6ec01bc01100020001000151800006036e7332c033c02f00010001000151800004c29f4906c04700010001000151800004c29fb004 41744 b43000000001000000000000036e733209696e7374616e747873026e6c0000010001 b43080000001000000020002036e733209696e7374616e747873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045296853ec00c000100010001518000045296853c 41745 15cc00000001000000000000037777770a656e76696e7961746172026e6c0000010001 15cc80000001000000020002037777770a656e76696e7961746172026e6c0000010001c01000020001000151800011036e73310a746770686f7374696e67c01bc01000020001000151800006036e7332c033c02f00010001000151800004d943e992c04c00010001000151800004d943e993 41746 b3ac000000010000000000000568612d726f06787334616c6c026e6c0000010001 b3ac800000010000000300020568612d726f06787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 41747 e1ef000000010000000000000a6c656b6b657264696e670e6d777765626372656174696f6e73026e6c0000010001 e1ef800000010000000200020a6c656b6b657264696e670e6d777765626372656174696f6e73026e6c0000010001c01700020001000151800002c00cc0170002000100015180000c09626c61636b62697264c017c00c00010001000151800004d994a332c04800010001000151800004507ed0a6 41748 4385000000010000000000000873616d616e7468610e6d777765626372656174696f6e73026e6c0000010001 4385800000010000000200020873616d616e7468610e6d777765626372656174696f6e73026e6c0000010001c0150002000100015180000d0a6c656b6b657264696e67c015c0150002000100015180000c09626c61636b62697264c015c03800010001000151800004d994a332c05100010001000151800004507ed0a6 41749 05ef00000001000000000000046d61696c03696e67026e6c00000f0001 05ef80000001000000020002046d61696c03696e67026e6c00000f0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0290001000100015180000491dd19c2c03b0001000100015180000491dd5dc2 41750 223d00000001000000000000046d61696c0a73746f6e65686f757365026e6c0000010001 223d80000001000000020000046d61696c0a73746f6e65686f757365026e6c0000010001c01100020001000151800011036e7333076361706361766503636f6d00c01100020001000151800006036e7334c034 41751 b8324e4280118598a25e00000101080a1123609201280813 b832c8010000000000000000 41752 5bad00000001000000000000037777770b67616d65706c616e656574026e6c0000010001 5bad80000001000000030002037777770b67616d65706c616e656574026e6c0000010001c01000020001000151800015036e73310e666c6578776562686f7374696e67c01cc01000020001000151800006036e7332c034c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03000010001000151800004cf2cd7adc0510001000100015180000452c04365 41753 d17e28000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730b6465626f646567726f6570026e6c000021000100000258001d000000640058067365727665720b6465626f646567726f6570026e6c00 d17ea8040000000000000000 41754 b8324e4380108598a25b00000101080a1123609301280814 b832c8010000000000000000 41755 000000007002faf06f4c0000020405b401010402 000080010000000000000000 41756 b83838215010faf0aba60000000000000000 b838b8240000000000000000 41757 b83838215018faf04ae500000088c200000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe84403c50040003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000 b838b8240000000000000000 41758 b838382f5011fae2ab1b0000000000000000 b838b8240000000000000000 41759 ed1000000001000000000000036e73330767617574656e67026e6c0000010001 ed1080000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41760 e53f00000001000000000000036e73340767617574656e67026e6c0000010001 e53f80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41761 000000007002faf09b570000020405b401010402 000080010000000000000000 41762 b83838305010fae2ab1a0000000000000000 b838b8340000000000000000 41763 4f080000000100000000000007616e74656e6e61026e6c0000010001 4f088000000100000002000107616e74656e6e61026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 41764 a7840000000100000000000007616e74656e6e61026e6c0000260001 a7848000000100000002000107616e74656e6e61026e6c0000260001c00c00020001000151800005026e73c00cc00c0002000100015180001306696e666f726d07616e74656e6e6102646b00c02800010001000151800004d995dd13 41765 b83916d95010faf0f8f80000000000000000 b83996d40000000000000000 41766 da9c000000010000000000001276656e656d61636f6d6d756e696361746965026e6c00000f0001 da9c800000010000000200001276656e656d61636f6d6d756e696361746965026e6c00000f0001c00c000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00c0002000100015180000906617574683230c03a 41767 b83916d95018faf0b1dc00000088a95c000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe84403c50040003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000 b83996d40000000000000000 41768 b83916e75011fae2f86d0000000000000000 b83996e40000000000000000 41769 000000007002faf0b4fb0000020405b401010402 000080010000000000000000 41770 07bc00000001000000000000047468666c026e6c0000010001 07bc80000001000000020000047468666c026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c030 41771 b83916e85010fae2f86c0000000000000000 b83996e40000000000000000 41772 560400100001000000000001036e733109756e69736f75726365026e6c00000100010000290800000000000000 560480000001000000020001036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 41773 b83af3e45010faf035900000000000000000 41774 2000000000010000000000000b73696e7465726b6c6161730a6a6f7577706167696e61026e6c0000010001 2000800000010000000200000b73696e7465726b6c6161730a6a6f7577706167696e61026e6c0000010001c0180002000100015180000e036e73330767617574656e67c023c01800020001000151800006036e7334c03b 41775 b83af3e45018faf02fd0000000886800000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe84403c50040003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000 41776 6cd90000000100000000000009666f72726573746572026e6c00000f0001 6cd98000000100000002000009666f72726573746572026e6c00000f0001c00c0002000100015180001b096c6f6e2d646e73303209666f7272657374657202636f02756b00c00c00020001000151800014046e73303409666f7272657374657203636f6d00 41777 f34b0000000100000000000003777777086a6f62747261636b026e6c0000010001 f34b8000000100000003000303777777086a6f62747261636b026e6c0000010001c01000020001000151800010036e733109776973652d67757973c019c01000020001000151800006036e7330c031c01000020001000151800006036e7332c031c02d00010001000151800004d413cd91c04900010001000151800004d413cd8fc05b00010001000151800004c16d7a3e 41778 b83af3f25011fae235050000000000000000 41779 b83af3f35010fae235040000000000000000 41780 818e0000000100000000000004414a4158064e494b484546024e4c0000010001 818e8000000100000004000204414a4158064e494b484546024e4c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 41781 2744000000010000000000000d6175746f74656c656772616166026e6c0000010001 2744800000010000000200000d6175746f74656c656772616166026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c032 41782 4fd200000001000000000000066c6974636f6d026e6c0000020001 4fd280000001000000020002066c6974636f6d026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 41783 1d1100000001000000000000037777770f7265736f72746861616d7374656465026e6c0000010001 1d1180000001000000020001037777770f7265736f72746861616d7374656465026e6c0000010001c0100002000100015180000a036e733303777873c020c01000020001000151800006036e7334c038c04a00010001000151800004d5ef9a65 41784 046b00000001000000000000037777770a63642d686f65736a6573026e6c0000010001 046b80000001000000030002037777770a63642d686f65736a6573026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 41785 10240000000100000000000003777777096c6f7374736f756c73026e6c0000010001 10248000000100000003000103777777096c6f7374736f756c73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 41786 671e0000000100000000000003777777076b77616e74756d026e6c0000010001 671e8000000100000002000003777777076b77616e74756d026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c030 41787 d3ab0000000100000000000004696e666f0a65636974656c65636f6d026e6c0000010001 d3ab8000000100000002000204696e666f0a65636974656c65636f6d026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000e036e733207626265796f6e64c01cc030000100010001518000043eb1a493c042000100010001518000043eb19002 41788 c0b500000001000000000000106175746f63656e74756d65726d656c6f026e6c00000f0001 c0b584030001000000010000106175746f63656e74756d65726d656c6f026e6c00000f0001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 41789 d5cc00000001000000000000036e733109756e69736f75726365026e6c0000010001 d5cc80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 41790 0ba300000001000000000000037777770c7665656c766f6f726465656c026e6c0000010001 0ba380000001000000020002037777770c7665656c766f6f726465656c026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c01dc01000020001000151800006036e7332c035c03100010001000151800004d5efa404c04e00010001000151800004d5efa405 41791 86fe00000001000000000000036e733307747564656c6674026e6c0000010001 86fe80000001000000050005036e733307747564656c6674026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c03e0001000100015180000482a1b441c0500001000100015180000482a12111c0650001000100015180000482a1bc8cc07e00010001000151800004c0576a65 41792 7f1e00000001000000000000036e733207747564656c6674026e6c0000010001 7f1e80000001000000050005036e733207747564656c6674026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c00c0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 41793 be9a00000001000000000000036e733109756e69736f75726365026e6c0000010001 be9a80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 41794 b58c000000010000000000000a626c61636b626f61726409696e686f6c6c616e64026e6c0000010001 b58c800000010000000200020a626c61636b626f61726409696e686f6c6c616e64026e6c0000010001c01700020001000151800006036e7331c017c0170002000100015180000e036e733107737572666e6574c021c03500010001000151800004c2ab230bc04700010001000151800004c0576a65 41795 db1100000001000000000000066c6974656974026e6c0000020001 db1180000001000000020002066c6974656974026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 41796 1d290000000100000000000003777777096b696e6465726e6574026e6c0000010001 1d298000000100000003000003777777096b696e6465726e6574026e6c0000010001c01000020001000151800019096d7476692d646e7331096d74766575726f706503636f6d00c01000020001000151800012047365633103646e73067073696e6574c01ac010000200010001518000070473656332c058 41797 095e00000001000000000000046e7330310462696374026e6c0000010001 095e80000001000000020002046e7330310462696374026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c00c00010001000151800004d413d6c8c03800010001000151800004d413d604 41798 163500000001000000000000026e73067a6f6e6e6574026e6c0000010001 163580000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 41799 39f300100001000000000001036e73310564656d6f6e026e6c00000100010000290800000000000000 39f380000001000000030003036e73310564656d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb0040000291000000000000000 41800 491700100001000000000001036e73320564656d6f6e026e6c00000100010000290800000000000000 491780000001000000030003036e73320564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb0040000291000000000000000 41801 1eab00000001000000000000095f6b65726265726f73045f75647009636f726e776f726c64026e6c0000060001 1eab84030001000000010000095f6b65726265726f73045f75647009636f726e776f726c64026e6c0000060001c02500060001000038400036026e730f646f6d61696e2d7265676973747279c0250a686f73746d6173746572c03c0bf1e540000070800000384000278d0000003840 41802 09d500000001000000000000036e733104686f6d65026e6c0000010001 09d580000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 41803 192d00000001000000000000036e733204686f6d65026e6c0000010001 192d80000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 41804 c16100000001000000000000036e733304686f6d65026e6c0000010001 c16180000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 41805 939f00000001000000000000036e733404686f6d65026e6c0000010001 939f80000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 41806 473800000001000000000000036e73310564656d6f6e026e6c0000010001 473880000001000000030002036e73310564656d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 41807 d1b600000001000000000000036e73320564656d6f6e026e6c0000010001 d1b680000001000000030002036e73320564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 41808 966100000001000000000000037777770962616265706c617a61026e6c0000010001 966180000001000000030000037777770962616265706c617a61026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036c0100002000100015180000a076e73686f737433c036 41809 0f8c00000001000000000000037777770c6a756c69757363656e746572026e6c0000010001 0f8c80000001000000020002037777770c6a756c69757363656e746572026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01dc01000020001000151800006036e7332c034c03100010001000151800004c26d0642c04900010001000151800004c26d0963 41810 867c00000001000000000000026e73036d6c63026e6c0000010001 867c80000001000000030003026e73036d6c63026e6c0000010001c00f00020001000151800012026e730c696e746572636f6e6e656374c013c00f00020001000151800006036e7332c02ac00f00020001000151800006036e7333c02ac02700010001000151800004d453c005c04500010001000151800004d453c006c05700010001000151800004d453c805 41811 b7e500000001000000000000026e730c696e746572636f6e6e656374026e6c0000010001 b7e580000001000000030003026e730c696e746572636f6e6e656374026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc00c00010001000151800004d453c005c03e00010001000151800004d453c006c05000010001000151800004d453c805 41812 a4ea28000001000000010000026e6c0000060001095f6b65726265726f73045f75647009617269656465776974026e6c000021000100000258001b0000006400580641646577697409617269656465776974026e6c00 a4eaa8040000000000000000 41813 75bc01000001000000000000036e7331066e6c74726565026e6c0000010001 75bc81000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 41814 0000000070024000796d00000204057a01010402 000080010000000000000000 41815 0ae40000000100000000000009652d6c756e61746963026e6c0000010001 0ae48000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 41816 90a700000001000000000000026e7303616d730874656c6567617465026e6c0000010001 90a780000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 41817 b83be921501041b802d20000000000000000 41818 b83be921501841b8a70b0000008e5fe8000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d42403beec200030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000 41819 b83be92f501141aa02410000000000000000 41820 e6520000000100000000000007747067706f7374026e6c0000ff0001 e6528000000100000002000207747067706f7374026e6c0000ff0001c00c0002000100015180000e036e733207737570706f7274c014c00c00020001000151800006036e7334c02cc02800010001000151800004c372e7c8c04200010001000151800004c372e6fe 41821 c1ae0000000100000000000003777777066d2d70616765026e6c0000010001 c1ae8000000100000003000203777777066d2d70616765026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 41822 b0fa00000001000000000000046d61696c116265656b6d616e732d76616e646576656e026e6c0000010001 b0fa80000001000000020000046d61696c116265656b6d616e732d76616e646576656e026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c03d 41823 0000000070024000882000000204057a01010402 000080010000000000000000 41824 b83be930501041aa02400000000000000000 41825 413328000001000000010000026e6c0000060001095f6b65726265726f73045f75647009636f726e776f726c64026e6c000021000100000258001b00000064005806746f746f726f09636f726e776f726c64026e6c00 4133a8040000000000000000 41826 35db0000000100000000000003777777066269726769740b6e65756b6d696a6d616172026e6c0000010001 35db8000000100000002000003777777066269726769740b6e65756b6d696a6d616172026e6c0000010001c01700020001000151800010036e73610674696e74656c03636f6d00c01700020001000151800006036e7362c03b 41827 b83cde58501041b81c4d0000000000000000 41828 86650000000100000000000005646e732d31056c61646f74026e6c0000010001 86658000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41829 aa2300000001000000000000037777770970632d616374697665026e6c0000010001 aa2380000001000000020000037777770970632d616374697665026e6c0000010001c0100002000100015180000a026e7304616b7475c01ac0100002000100015180000b026e73026e6c036e657400 41830 7fed0000000100000000000005646e732d32056c61646f74026e6c0000010001 7fed8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41831 b83cde58501841b844490000008edd26000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d42403beec200030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000 41832 208100000001000000000000026e7304616b7475026e6c0000010001 208180000001000000020001026e7304616b7475026e6c0000010001c00f00020001000151800006036e7331c00fc00f0002000100015180000b026e73026e6c036e657400c02800010001000151800004c2b25945 41833 c5ac0000000100000000000009776565726b616d6572026e6c0000010001 c5ac8000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 41834 b83cde66501141aa1bbc0000000000000000 41835 0000000070024000f57d00000204057a01010402 000080010000000000000000 41836 90ae00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 90ae80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 41837 a03300000001000000000000046d61696c0e62666e2d666f746f67726166656e026e6c0000010001 a03380000001000000020000046d61696c0e62666e2d666f746f67726166656e026e6c0000010001c01100020001000151800011036e73310a6d61696e736572766572c020c01100020001000151800006036e7332c038 41838 b83cde67501041aa1bbb0000000000000000 41839 b83db28d501041b8b5740000000000000000 41840 b83db28d501841b830130000008e8a84000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403a9d42403beec200030000002f4e544c4d535350000100000097b200e0090009002600000006000600200000004144455749544152494544455749540000 41841 de1900000001000000000000116c6974657261747575722d6f6e6c696e65026e6c0000020001 de1980000001000000020002116c6974657261747575722d6f6e6c696e65026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ec00c00020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 41842 fbb80000000100000000000003777777056e6f72736b026e6c0000010001 fbb88000000100000002000003777777056e6f72736b026e6c0000010001c01000020001000151800012046e733261076c696e756c657803636f6d00c01000020001000151800007046e733262c02f 41843 b83db29b501141aab4e30000000000000000 41844 0000000070024000dd470000020405b401010402 000080010000000000000000 41845 b83db29c501041aab4e20000000000000000 41846 b83e9b2e50104470b21e0000000000000000 41847 b83e9b2e50184470d9ec0000008e0c44000000010001000000000f313131363639313439363937382d330000f900010f313131363639313439363937382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd23403c4ea300030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 41848 371d00000001000000000000036e7332076f6d732d6e6574026e6c0000010001 371d80000001000000020002036e7332076f6d732d6e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004d5efb22fc00c00010001000151800004d5ef9d07 41849 b83e9b3c50114462b18d0000000000000000 41850 cfa400000001000000000000037777770d73636f6f74657276726167656e026e6c0000010001 cfa480000001000000020000037777770d73636f6f74657276726167656e026e6c0000010001c01000020001000151800014036e73350a6d69686f736e65742d3303636f6d00c01000020001000151800006036e7336c036 41851 b83e9b3d50104462b18c0000000000000000 41852 d50800000001000000000000037777770b766f656c73707269657432026e6c0000010001 d50880000001000000020000037777770b766f656c73707269657432026e6c0000010001c01000020001000151800015036e73310b766563746f72636c617373036e657400c01000020001000151800006036e7332c034 41853 82690000000100000000000005646e732d31056c61646f74026e6c0000010001 82698000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41854 826a0000000100000000000005646e732d32056c61646f74026e6c0000010001 826a8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41855 124d0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 124d8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 41856 0000000070024000e2d50000020405b401010402 000080010000000000000000 41857 37f40000000100000000000006736d7470303403777873026e6c00001c0001 37f48000000100000003000306736d7470303403777873026e6c00001c0001c01300020001000151800007046e733038c013c01300020001000151800007046e733039c013c01300020001000151800006036e7334c013c02b00010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 41858 e07200000001000000000000037777770863696e656d613464026e6c0000010001 e07280000001000000020000037777770863696e656d613464026e6c0000010001c01000020001000151800011036e7331077876656e74757303636f6d00c01000020001000151800006036e7332c031 41859 b83f3c0b5010447016cf0000000000000000 b83fbc040000000000000000 41860 c90b0000000100000000000004617369610374656e026e6c0000010001 c90b8000000100000002000104617369610374656e026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c36c4b01 41861 966400000001000000000000037777771062616e6e65726d616e6167656d656e74026e6c0000010001 966480000001000000030003037777771062616e6e65726d616e6167656d656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 41862 b83f3c0b50184470e4e30000008e66fe000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd23403c4ea300030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 b83fbc040000000000000000 41863 12610000000100000000000003777777076d657373696e6b026e6c0000010001 12618000000100000002000003777777076d657373696e6b026e6c0000010001c01000020001000151800014026e730b736d617274736572766572036e657400c01000020001000151800006036e7332c02f 41864 a72d0000000100000000000003777777066469786f6e73026e6c0000010001 a72d8000000100000003000303777777066469786f6e73026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c017c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02fc02b00010001000151800004c3f13ceec04700010001000151800004c372eb43c059000100010001518000043e320e8f 41865 f22100000001000000000000136c6974686f67726166697363686d757365756d026e6c0000020001 f22180000001000000020002136c6974686f67726166697363686d757365756d026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec020c00c00020001000151800006036e7332c038c03400010001000151800004c29f4906c04c00010001000151800004c29fb004 41866 b83f3c1950114462163e0000000000000000 b83fbc140000000000000000 41867 826f0000000100000000000005646e732d31056c61646f74026e6c0000010001 826f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41868 82700000000100000000000005646e732d32056c61646f74026e6c0000010001 82708000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41869 ccb1000000010000000000000377777704616d6561026e6c0000010001 ccb1800000010000000200000377777704616d6561026e6c0000010001c01000020001000151800018046e7331610d686572656e677261636874313003636f6d00c01000020001000151800007046e733162c02e 41870 b83f3c1a50104462163d0000000000000000 b83fbc140000000000000000 41871 5dc900000001000000000000037777770972616365666f746f73026e6c0000010001 5dc980000001000000020000037777770972616365666f746f73026e6c0000010001c01000020001000151800013036e733109752d73657276657273036e657400c01000020001000151800006036e7332c032 41872 c90d00000001000000000000026e730374656e026e6c0000010001 c90d80000001000000020001026e730374656e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c36c4b01 41873 ca3100000001000000000000036e73330767617574656e67026e6c0000010001 ca3180000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41874 ca3200000001000000000000036e73340767617574656e67026e6c0000010001 ca3280000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41875 0000000070024000a9590000020405b401010402 000080010000000000000000 41876 34d400000001000000000000106275696a74696e6b6d6f65726c616e64026e6c00000f0001 34d480000001000000020000106275696a74696e6b6d6f65726c616e64026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c035 41877 3b4b0000000100000000000008686f73746e616d650462696e640000100003 3b4b8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41878 b841d41050104470454b0000000000000000 41879 b10a00000001000000000000036e7332086d65646961776562026e6c0000010001 b10a80000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 41880 9d5a00000001000000000000036e7333086d65646961776562026e6c0000010001 9d5a80000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 41881 b841d41050184470b8a50000008ec1b8000000010001000000000f313131363639313439363937382d320000f900010f313131363639313439363937382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afd23403c4ea300030000002f4e544c4d535350000100000097b200c009000900260000000600060020000000544f544f524f434f524e574f524c440000 41882 0f1d0000000100000000000008686f73746e616d650462696e640000100003 0f1d8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41883 93b40010000100000000000106726f64616a63026e6c0000ff00010000290800000000000000 93b48000000100000002000306726f64616a63026e6c0000ff0001c00c0002000100015180000f036e733108696c696d62757267c013c00c00020001000151800006036e7332c02bc02700010001000151800004c2b26281c04200010001000151800004c2b262f70000291000000000000000 41884 b841d41e5011446244ba0000000000000000 41885 25fb0000000100000000000004696e666f0a65636974656c65636f6d026e6c0000010001 25fb8000000100000002000204696e666f0a65636974656c65636f6d026e6c0000010001c01100020001000151800006036e7331c011c0110002000100015180000e036e733207626265796f6e64c01cc030000100010001518000043eb1a493c042000100010001518000043eb19002 41886 593c0000000100000000000006726f64616a63026e6c0000ff0001 593c8000000100000002000206726f64616a63026e6c0000ff0001c00c0002000100015180000f036e733108696c696d62757267c013c00c00020001000151800006036e7332c02bc02700010001000151800004c2b26281c04200010001000151800004c2b262f7 41887 b841d41f5010446244b90000000000000000 41888 05790000000100000000000005666172616d026e6c0000010001 05798000000100000002000005666172616d026e6c0000010001c00c00020001000151800011036e733107636174616c6f6703636f6d00c00c00020001000151800006036e7333c02a 41889 0af900000001000000000000036e6967026e6c00001c0001 0af980000001000000020002036e6967026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 41890 862600000001000000000000037777770665726f647664026e6c0000010001 862680000001000000030001037777770665726f647664026e6c0000010001c0100002000100015180000d026e7307696e746f756368c017c01000020001000151800010026e7307696e746f756368036e657400c01000020001000151800007046e733031c047c02b00010001000151800004d413c001 41891 1e5400000001000000000000037777770964652d6c616d70656e026e6c0000010001 1e5480000001000000020002037777770964652d6c616d70656e026e6c0000010001c01000020001000151800012026e730c696e746572636f6e6e656374c01ac01000020001000151800006036e7332c031c02e00010001000151800004d453c005c04c00010001000151800004d453c006 41892 76da0000000100000000000008686f73746e616d650462696e640000100003 76da8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41893 73d90000000100000000000008686f73746e616d650462696e640000100003 73d98000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41894 686b0000000100000000000006616c7469756d026e6c0000ff0001 686b8000000100000002000206616c7469756d026e6c0000ff0001c00c0002000100015180000b026e7305706c616e74c013c00c00020001000151800006036e7332c02ac02700010001000151800004d59f0037c03e00010001000151800004d59f0046 41895 4cbf00000001000000000000037777770a737065726d616e656e74026e6c0000010001 4cbf80000001000000020002037777770a737065726d616e656e74026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01bc01000020001000151800006036e7332c033c02f00010001000151800004d5efa011c04a00010001000151800004d5efa075 41896 809200000001000000000000116c656575776172646572636f7572616e74026e6c00000f0001 809280000001000000030003116c656575776172646572636f7572616e74026e6c00000f0001c00c00020001000151800011036e73310a6e6463686f6c64696e67c01ec00c00020001000151800006036e7332c036c00c00020001000151800006036e7333c036c03200010001000151800004c1ad573dc04f00010001000151800004c1ad573ec06100010001000151800004d5880089 41897 12bc00000001000000000000036e7331057072757473026e6c0000010001 12bc80000001000000020002036e7331057072757473026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccc098c03800010001000151800004d4ccc099 41898 914c0000000100000000000003777777066d6f6c6d6564026e6c0000010001 914c8000000100000002000003777777066d6f6c6d6564026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 41899 25de00100001000000000001085049495044433031097069696575726f7065026e6c00000100010000290800000080000000 25de80000001000000020001085049495044433031097069696575726f7065026e6c0000010001c0150002000100015180001004646e73310574636d7370036e657400c0150002000100015180000d04646e73320574636d6b74c03e0000291000000000000000 41900 64b1000000010000000000000b6c6974746c656a756d626f026e6c0000020001 64b1800000010000000200020b6c6974746c656a756d626f026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 41901 885e0000000100000000000004646e73320470696e73026e6c0000010001 885e8000000100000002000204646e73320470696e73026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d9c26101c00c00010001000151800004d9c26002 41902 41d80000000100000000000004646e73310470696e73026e6c0000010001 41d88000000100000002000204646e73310470696e73026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d9c26101c03800010001000151800004d9c26002 41903 5dba0000000100000000000003777777107061617264656e696e7a65656c616e64026e6c0000010001 5dba8000000100000002000003777777107061617264656e696e7a65656c616e64026e6c0000010001c0100002000100015180000c026e7306766576696461c021c01000020001000151800006036e7332c038 41904 bae700000001000000000000037777770a6c65756b657374617274026e6c0000010001 bae780000001000000030003037777770a6c65756b657374617274026e6c0000010001c0100002000100015180000c036e7331056d61786573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f000100010001518000045045402ec047000100010001518000045045402fc059000100010001518000045045440a 41905 e6540000000100000000000004686966690477696e72026e6c0000010001 e6548000000100000002000204686966690477696e72026e6c0000010001c0110002000100015180000a026e730469636d63c016c01100020001000151800006036e7332c02dc02a000100010001518000043e643805c040000100010001518000043e643806 41906 c91300000001000000000000026e730374656e026e6c0000010001 c91380000001000000020001026e730374656e026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c36c4b01 41907 e826000000010000000000000c77656265796564657369676e026e6c00000f0001 e826800000010000000200020c77656265796564657369676e026e6c00000f0001c00c0002000100015180000d05686f7275730462777373c019c00c0002000100015180000603736875c033c02d00010001000151800004d943e502c04600010001000151800004d943e509 41908 f02e00000001000000000000037777770c696a7373656c737472616e64026e6c0000010001 f02e80000001000000020001037777770c696a7373656c737472616e64026e6c0000010001c0100002000100015180000a036e733303777873c01dc01000020001000151800006036e7334c035c04700010001000151800004d5ef9a65 41909 2231000000010000000000000377777710736f6369616c657a656b657268656964026e6c0000010001 2231800000010000000200020377777710736f6369616c657a656b657268656964026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c021c01000020001000151800006036e7332c038c03500010001000151800004c3402003c04e00010001000151800004c340202b 41910 637300000001000000000000036e733107737572666e6574026e6c0000010001 637380000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 41911 9d340000000100000000000003777777066d61726b7570026e6c0000010001 9d348000000100000003000103777777066d61726b7570026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 41912 bbea00000001000000000000037777770472772d6c026e6c0000010001 bbea80000001000000020000037777770472772d6c026e6c0000010001c0100002000100015180000c026e7306766576696461c015c01000020001000151800006036e7332c02c 41913 8209000000010000000000000377777705302d736578026e6c0000010001 8209800000010000000200020377777705302d736578026e6c0000010001c0100002000100015180000d026e730776697065726276c016c01000020001000151800006036e7332c02dc02a00010001000151800004d5881a07c04300010001000151800004d5881a05 41914 13f000000001000000000000037777770a636173686d6173746572026e6c0000010001 13f080000001000000020000037777770a636173686d6173746572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 41915 4f7600000001000000000000037777770f73656e736f72796f7665726c6f6164026e6c0000010001 4f7680000001000000020000037777770f73656e736f72796f7665726c6f6164026e6c0000010001c0100002000100015180000e036e7333046965747a03636f6d00c01000020001000151800006036e7334c038 41916 ca3400000001000000000000036e73330767617574656e67026e6c0000010001 ca3480000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 41917 74ad000000010000000000000464733961026e6c00000f0001 74ad800000010000000200020464733961026e6c00000f0001c00c0002000100015180000b036e73310470696e65c011c00c00020001000151800006036e7332c029c02500010001000151800004d59c0201c03c00010001000151800004c3c1a303 41918 a6bd00000001000000000000095f6b65726265726f73045f746370026463065f6d736463730b4557572d4e45545745524b024e4c0000210001 a6bd84030001000000010000095f6b65726265726f73045f746370026463065f6d736463730b4557572d4e45545745524b024e4c0000210001c03100060001000038400036026e730f646f6d61696e2d7265676973747279c0310a686f73746d6173746572c0480bf1e540000070800000384000278d0000003840 41919 d4f400000001000000000000036e73320864686f7374696e67026e6c0000010001 d4f480000001000000020002036e73320864686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02d00010001000151800004515b0370c00c00010001000151800004515b000a 41920 ced600000001000000000000036e73330864686f7374696e67026e6c0000010001 ced680000001000000020002036e73330864686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02d00010001000151800004515b0370c03e00010001000151800004515b000a 41921 c7fd00000001000000000000046d61696c0967617465776f726b73026e6c0000010001 c7fd80000001000000020002046d61696c0967617465776f726b73026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02f00010001000151800004d4ccca29c04100010001000151800004d5efc235 41922 116400000001000000000000046d61696c0967617465776f726b73026e6c00001c0001 116480000001000000020002046d61696c0967617465776f726b73026e6c00001c0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02f00010001000151800004d4ccca29c04100010001000151800004d5efc235 41923 4be800000001000000000000046d61696c0967617465776f726b73026e6c0000260001 4be880000001000000020002046d61696c0967617465776f726b73026e6c0000260001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02f00010001000151800004d4ccca29c04100010001000151800004d5efc235 41924 7c0800000001000000000000036e73310967617465776f726b73026e6c00001c0001 7c0880000001000000020002036e73310967617465776f726b73026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccca29c03c00010001000151800004d5efc235 41925 125e00000001000000000000036e73310967617465776f726b73026e6c0000260001 125e80000001000000020002036e73310967617465776f726b73026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccca29c03c00010001000151800004d5efc235 41926 145900000001000000000000046d61696c0967617465776f726b73026e6c0000010001 145980000001000000020002046d61696c0967617465776f726b73026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c02f00010001000151800004d4ccca29c04100010001000151800004d5efc235 41927 fd1700000001000000000000036e7331076d657961617264026e6c0000010001 fd1780000001000000020002036e7331076d657961617264026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045104730ac03a000100010001518000045104730b 41928 717a00000001000000000000036e7332076d657961617264026e6c0000010001 717a80000001000000020002036e7332076d657961617264026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000045104730ac00c000100010001518000045104730b 41929 a7f8000000010000000000000377777707686f737470726f026e6c0000010001 a7f8800000010000000200000377777707686f737470726f026e6c0000010001c01000020001000151800019046e7331310e666c6578776562686f7374696e6703636f6d00c01000020001000151800007046e733132c031 41930 b6ab000000010000000000000377777707686f737470726f026e6c0000010001 b6ab800000010000000200000377777707686f737470726f026e6c0000010001c01000020001000151800019046e7331310e666c6578776562686f7374696e6703636f6d00c01000020001000151800007046e733132c031 41931 df640000000100000000000005646e732d31056c61646f74026e6c0000010001 df648000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41932 0a4d0000000100000000000005646e732d32056c61646f74026e6c0000010001 0a4d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41933 4c8f000000010000000000000a426c6f6b6d6f6572656e026e6c0000060001 4c8f840300010000000100000a426c6f6b6d6f6572656e026e6c0000060001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 41934 4b6c0000000100000000000003777777087569747661617274026e6c00001c0001 4b6c8000000100000002000203777777087569747661617274026e6c00001c0001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 41935 80fb0000000100000000000005646e732d32056c61646f74026e6c0000010001 80fb8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41936 937100000001000000000000085049495044433031097069696575726f7065026e6c0000010001 937180000001000000020000085049495044433031097069696575726f7065026e6c0000010001c0150002000100015180001004646e73310574636d7370036e657400c0150002000100015180000d04646e73320574636d6b74c03e 41937 614d0000000100000000000006776562666978026e6c0000010001 614d8000000100000002000206776562666978026e6c0000010001c00c00020001000151800012036e73310b736c61636b736572766572c013c00c00020001000151800006036e7332c02bc027000100010001518000043ed444c0c045000100010001518000043ed44d0a 41938 51aa0000000100000000000005646e732d31056c61646f74026e6c0000010001 51aa8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41939 19840000000100000000000005646e732d32056c61646f74026e6c0000010001 19848000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41940 c60c0000000100000000000006636174656e61026e6c00000f0001 c60c8000000100000002000206636174656e61026e6c00000f0001c00c0002000100015180000c036e73310563736e6574c013c00c00020001000151800006036e7332c02bc02700010001000151800004c2451012c03f00010001000151800004c2451212 41941 767c00000001000000000000026e730a646f6d65696e686f7374026e6c0000010001 767c80000001000000020000026e730a646f6d65696e686f7374026e6c0000010001c00f00020001000151800017036e73310d696e746572726567697374657203636f6d00c00f00020001000151800010036e733206776964657873036e657400 41942 a58100000001000000000000036573310a426c6f6b6d6f6572656e026e6c0000060001 a58184030001000000010000036573310a426c6f6b6d6f6572656e026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 41943 40670000000100000000000006706574726965026e6c00000f0001 40678000000100000002000206706574726965026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 41944 3efd00000001000000000000066d6d736d7470056e6574636f026e6c0000010001 3efd80000001000000020002066d6d736d7470056e6574636f026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c02d00010001000151800004c26d4a82c03f00010001000151800004c26dd146 41945 e94d000000010000000000000b6c6976657075626c697368026e6c0000020001 e94d800000010000000200020b6c6976657075626c697368026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 41946 9f4e0000000100000000000003777777056269736f6e026e6c0000010001 9f4e8000000100000002000203777777056269736f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c016c01000020001000151800006036e7332c02dc02a00010001000151800004d513b013c04700010001000151800004d513b012 41947 4b760000000100000000000003626c3102626c06787334616c6c026e6c0000010001 4b768000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 41948 7bed00000001000000000000037777770b696e73636872696a76656e026e6c0000010001 7bed80000001000000030001037777770b696e73636872696a76656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 41949 859d00000001000000000000076272756d6d656e026e6c00000f0001 859d80000001000000020000076272756d6d656e026e6c00000f0001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02c 41950 121500000001000000000000076e696b68656668066e696b686566026e6c0000010001 121580000001000000040002076e696b68656668066e696b686566026e6c0000010001c0140002000100015180000704616a6178c014c01400020001000151800007046c656461c014c0140002000100015180000f0564786d6f6e046365726e02636800c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c010c701c04200010001000151800004c010c704 41951 110000000001000000000000046d61696c0b67656c7265766973696f6e026e6c0000010001 110080000001000000020000046d61696c0b67656c7265766973696f6e026e6c0000010001c0110002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0110002000100015180000d077669312d6e7330026174c03c 41952 14de0000000100000000000003777777056d76726476026e6c0000010001 14de8000000100000002000003777777056d76726476026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c02d 41953 fbdb000000010000000000000767736d746f6f6e026e6c00000f0001 fbdb800000010000000200010767736d746f6f6e026e6c00000f0001c00c0002000100015180000e036e7331076e6564636f6d70c014c00c00020001000151800011036e7332076e6564636f6d70036f726700c02800010001000151800004c3c1a80d 41954 389e0000000100000000000006696d616765730c62726f6d6d657273616c6573026e6c0000010001 389e8000000100000003000006696d616765730c62726f6d6d657273616c6573026e6c0000010001c01300020001000151800017076e73686f73743103737432056c79636575036e657400c0130002000100015180000a076e73686f737432c03cc0130002000100015180000a076e73686f737433c03c 41955 12c000000001000000000000036e7331057072757473026e6c0000010001 12c080000001000000020002036e7331057072757473026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccc098c03800010001000151800004d4ccc099 41956 eb4500000001000000000000076f7574706f73740464733961026e6c0000010001 eb4580000001000000020002076f7574706f73740464733961026e6c0000010001c0140002000100015180000b036e73310470696e65c019c01400020001000151800006036e7332c031c02d00010001000151800004d59c0201c04400010001000151800004c3c1a303 41957 d5a30000000100000000000002657009706172616d6f756e74026e6c0000010001 d5a38000000100000002000202657009706172616d6f756e74026e6c0000010001c00f0002000100015180000d036e73310669746e6f7661c019c00f00020001000151800006036e7332c031c02d00010001000151800004d5f4b709c046000100010001518000043e3a43c4 41958 cde80010000100000000000003777777106269626c696f746865656b617373656e026e6c0000010001 cde88000000100000002000203777777106269626c696f746865656b617373656e026e6c0000010001c0100002000100015180000d036e73310663617374656cc021c01000020001000151800006036e7332c039c03500010001000151800004c3558244c04e00010001000151800004c3558245 41959 326f00000001000000000000037777770e616f6e656e696768747374616e64026e6c0000010001 326f80000001000000020000037777770e616f6e656e696768747374616e64026e6c0000010001c01000020001000151800010026e73076e65737363697303636f6d00c01000020001000151800006036e7332c036 41960 f1790000000100000000000004656c6a6f026e6c0000010001 f1798000000100000002000104656c6a6f026e6c0000010001c00c0002000100015180000d036e733106776964657873c011c00c00020001000151800010036e733206776964657873036e657400c02500010001000151800004d4ccc0fc 41961 54a50000000100000000000008636c6d65696a6572026e6c00000f0001 54a58000000100000002000008636c6d65696a6572026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c015c00c0002000100015180000704686e7331c02e 41962 00000000b002832c6d8b0000010303010101080a11236100000000000101040202040564 000080010000000000000000 41963 b843dd9f801085980c6800000101080a1123610101280817 41964 672100000001000000000000076c697665727365026e6c0000020001 672180000001000000020002076c697665727365026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 41965 0c54000000010000000000000377777703666267026e6c0000010001 0c54800000010000000300010377777703666267026e6c0000010001c0100002000100015180000e026e7308767575727765726bc014c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c046c028000100010001518000043efa0202 41966 3f8a00000001000000000000057374617274087370656c70756e74026e6c0000010001 3f8a80000001000000020002057374617274087370656c70756e74026e6c0000010001c0120002000100015180000b036e73310470696e65c01bc01200020001000151800006036e7332c033c02f00010001000151800004d59c0201c04600010001000151800004c3c1a303 41967 000000007002faf043bb0000020405b401010402 000080010000000000000000 41968 77e50000000100000000000003626c3102626c06787334616c6c026e6c0000010001 77e58000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 41969 3f0d00000001000000000000036e73310470696e65026e6c0000010001 3f0d80000001000000020002036e73310470696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d59c0201c03700010001000151800004c3c1a303 41970 452b0000000100000000000109633365656131616133056361626c650777616e61646f6f026e6c00000100010000291000000000000000 452b8000000100000002000209633365656131616133056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c28600430000291000000000000000 41971 a3f500000001000000000000036e73330564656d6f6e026e6c0000010001 a3f580000001000000030002036e73330564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c03c00010001000151800004c29fb004 41972 b36c00000001000000000000046d61696c0a6d756c74726173686970026e6c0000010001 b36c80000001000000020002046d61696c0a6d756c74726173686970026e6c0000010001c01100020001000151800010026e730a7a65656c616e646e6574c01cc01100020001000151800006036e7332c033c03000010001000151800004d473c0c1c04c00010001000151800004d473c0c3 41973 c0aa0000000100000000000003777777097365786f64726f6d65026e6c0000010001 c0aa8000000100000002000203777777097365786f64726f6d65026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c01ac01000020001000151800006036e7332c032c02e0001000100015180000452c04516c04b0001000100015180000452c04542 41974 6f4b00000001000000000000056d2d6d2d6d026e6c0000010001 6f4b80000001000000020000056d2d6d2d6d026e6c0000010001c00c0002000100015180000e026e7305702d69637403636f6d00c00c00020001000151800012026e7309646970737769746368036f726700 41975 e51e0000000100000000000005646e732d31056c61646f74026e6c0000010001 e51e8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 41976 4a76000000010000000000000d7069616e6f746563686e69656b026e6c00000f0001 4a76800000010000000200020d7069616e6f746563686e69656b026e6c00000f0001c00c00020001000151800012036e73310b73697465686f7374696e67c01ac00c00020001000151800006036e7332c032c02e00010001000151800004cf2410f1c04c00010001000151800004cf2410f2 41977 e6e200000001000000000000076172636869766507616e74656e6e61026e6c0000010001 e6e280000001000000020001076172636869766507616e74656e6e61026e6c0000010001c01400020001000151800005026e73c014c0140002000100015180001306696e666f726d07616e74656e6e6102646b00c03000010001000151800004d995dd13 41978 e69800000001000000000000037777770964656a6172656e3630026e6c0000010001 e69880000001000000020002037777770964656a6172656e3630026e6c0000010001c0100002000100015180000c036e7331053632357476c01ac01000020001000151800006036e7332c032c02e000100010001518000043ea68ad2c046000100010001518000043ea68ad3 41979 549b000000010000000000000462617261026e6c00000f0001 549b800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 41980 5588000000010000000000000966616c6c6261636b320768656262697a7a026e6c0000010001 5588800000010000000200020966616c6c6261636b320768656262697a7a026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03200010001000151800004c372eb42c044000100010001518000043e320e91 41981 b4e2000000010000000000000966616c6c6261636b320768656262697a7a026e6c00001c0001 b4e2800000010000000200020966616c6c6261636b320768656262697a7a026e6c00001c0001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03200010001000151800004c372eb42c044000100010001518000043e320e91 41982 98a8000000010000000000000966616c6c6261636b320768656262697a7a026e6c0000260001 98a8800000010000000200020966616c6c6261636b320768656262697a7a026e6c0000260001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03200010001000151800004c372eb42c044000100010001518000043e320e91 41983 f5070000000100000000000008657965776f726b730564656d6f6e026e6c0000010001 f5078000000100000003000208657965776f726b730564656d6f6e026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 41984 220b0000000100000000000008657965776f726b730564656d6f6e026e6c00001c0001 220b8000000100000003000208657965776f726b730564656d6f6e026e6c00001c0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 41985 1a380000000100000000000008657965776f726b730564656d6f6e026e6c0000260001 1a388000000100000003000208657965776f726b730564656d6f6e026e6c0000260001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 41986 283400000001000000000000037777770e6b756e737467656f677261666965026e6c0000010001 283480000001000000020000037777770e6b756e737467656f677261666965026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c049 41987 e266000000010000000000000966616c6c6261636b310768656262697a7a026e6c0000010001 e266800000010000000200020966616c6c6261636b310768656262697a7a026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03200010001000151800004c372eb42c044000100010001518000043e320e91 41988 599d000000010000000000000966616c6c6261636b310768656262697a7a026e6c00001c0001 599d800000010000000200020966616c6c6261636b310768656262697a7a026e6c00001c0001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03200010001000151800004c372eb42c044000100010001518000043e320e91 41989 ef0b00000001000000000000036e73310768656262697a7a026e6c00001c0001 ef0b80000001000000020002036e73310768656262697a7a026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c372eb42c03a000100010001518000043e320e91 41990 38d100000001000000000000036e73310768656262697a7a026e6c0000260001 38d180000001000000020002036e73310768656262697a7a026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c372eb42c03a000100010001518000043e320e91 41991 c79900000001000000000000036e73320768656262697a7a026e6c00001c0001 c79980000001000000020002036e73320768656262697a7a026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c372eb42c00c000100010001518000043e320e91 41992 063000000001000000000000036e73320768656262697a7a026e6c0000260001 063080000001000000020002036e73320768656262697a7a026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c372eb42c00c000100010001518000043e320e91 41993 ee0e0000000100000000000008657965776f726b730564656d6f6e026e6c0000010001 ee0e8000000100000003000208657965776f726b730564656d6f6e026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 41994 141300000001000000000000037777770f73636f6f746572732d6f6e6c696e65026e6c0000010001 141380000001000000020002037777770f73636f6f746572732d6f6e6c696e65026e6c0000010001c01000020001000151800015036e73310e62656c6c656e656e77696e6e656ec020c01000020001000151800006036e7332c038c03400010001000151800004d994a844c05500010001000151800004d994a845 41995 3f8d001000010000000000010373697306657472616465026e6c00000100010000290800000080000000 3f8d800000010000000200010373697306657472616465026e6c0000010001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c0310000291000000000000000 41996 11ae000000010000000000000644454d41414e024e4c00000f0001 11ae800000010000000200020644454d41414e024e4c00000f0001c00c0002000100015180000c026e73067574722d6978c013c00c00020001000151800006036e7332c02ac0270001000100015180000451113206c03f00010001000151800004d5c42806 41997 ef250000000100000000000008686f73746e616d650462696e640000100003 ef258000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 41998 7ea00000000100000000000008686f75736561647303696467026e6c0000010001 7ea08000000100000003000308686f75736561647303696467026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c02d0001000100015180000451af4646c03f0001000100015180000451af4647c05100010001000151800004d5a0fde6 41999 b843dd9f801885981a0800000101080a1123610e01280817008e9b80000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afc75403c4df500030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000004c4150544f505745524b47524f45500000 42000 b843ddad801085980bbd00000101080a1123610e01280817 42001 493c00000001000000000000026e730b4154436f6d707574696e67026e6c0000010001 493c80000001000000020001026e730b4154436f6d707574696e67026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c36ce519 42002 960f0000000100000000000003777777086365656265656974026e6c0000010001 960f8000000100000002000203777777086365656265656974026e6c0000010001c01000020001000151800012036e73310b706f776572736572766572c019c01000020001000151800006036e7332c031c02d000100010001518000045104740ac04b000100010001518000045104740b 42003 cdae000000010000000000000377777709696b77696c6572696e026e6c0000010001 cdae840300010000000100000377777709696b77696c6572696e026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 42004 81c700000001000000000000086173636f6e2d6974026e6c00000f0001 81c780000001000000020001086173636f6e2d6974026e6c00000f0001c00c0002000100015180000a036e733303777873c015c00c00020001000151800006036e7334c02dc03f00010001000151800004d5ef9a65 42005 fda400000001000000000000156c69766573747265616d696e67696e7465726e6574026e6c0000020001 fda480000001000000020002156c69766573747265616d696e67696e7465726e6574026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec022c00c00020001000151800006036e7332c03ac03600010001000151800004c29f4906c04e00010001000151800004c29fb004 42006 d2cc00000001000000000000036e73310b696e746572616363657373026e6c0000010001 d2cc80000001000000030001036e73310b696e746572616363657373026e6c0000010001c01000020001000151800002c00cc0100002000100015180001a09756e616c72697330310a6963742d626568656572036e657400c0100002000100015180000c09756e616c7269733032c048c00c00010001000151800004c1ad2362 42007 87db000000010000000000000331373202323101310131026e6c0000010001 87db840300010000000100000331373202323101310131026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 42008 452b0000000100000000000009633365656131616133056361626c650777616e61646f6f026e6c0000010001 452b8000000100000002000109633365656131616133056361626c650777616e61646f6f026e6c0000010001c01c0002000100015180000d026e73046575726f036e657400c01c0002000100015180000d026e73076575726f6e6574c024c05100010001000151800004c2860043 42009 0eb200000001000000000000026e7306787334616c6c026e6c0000010001 0eb280000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 42010 45d000000001000000000000036e733206787334616c6c026e6c0000010001 45d080000001000000030002036e733206787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 42011 3a7d0000000100000000000009652d6c756e61746963026e6c0000010001 3a7d8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42012 f6f700000001000000000000057374617274087370656c70756e74026e6c0000010001 f6f780000001000000020002057374617274087370656c70756e74026e6c0000010001c0120002000100015180000b036e73310470696e65c01bc01200020001000151800006036e7332c033c02f00010001000151800004d59c0201c04600010001000151800004c3c1a303 42013 3a800000000100000000000009652d6c756e61746963026e6c0000010001 3a808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42014 130f0000000100000000000009652d6c756e61746963026e6c0000010001 130f8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42015 fc650000000100000000000008747261696e2d6974026e6c00000f0001 fc658000000100000002000208747261696e2d6974026e6c00000f0001c00c0002000100015180000a036e733103746d6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004d5a0d8fac03f00010001000151800004d5a0d9fa 42016 e24600000001000000000000027463036164730974656c656772616166026e6c0000010001 e24680000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 42017 b6df00000001000000000000037777770d6672616e7376616e6265657273026e6c0000010001 b6df80000001000000030000037777770d6672616e7376616e6265657273026e6c0000010001c01000020001000151800011036e733207786f6c7068696e036e657400c01000020001000151800006036e7333c036c01000020001000151800006036e7334c036 42018 84650000000100000000000003697470026e6c00000f0001 84658000000100000002000003697470026e6c00000f0001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c027 42019 255d00000001000000000000037777770d6d657562656c7374756b6b656e026e6c0000010001 255d80000001000000030002037777770d6d657562656c7374756b6b656e026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 42020 df1d000000010000000000000b727575647a616e64657273026e6c00000f0001 df1d800000010000000200000b727575647a616e64657273026e6c00000f0001c00c0002000100015180000c026e73066863636e6574c018c00c00020001000151800006036e7332c02f 42021 b0a7000000010000000000000377777705302d736578026e6c0000010001 b0a7800000010000000200020377777705302d736578026e6c0000010001c0100002000100015180000d026e730776697065726276c016c01000020001000151800006036e7332c02dc02a00010001000151800004d5881a07c04300010001000151800004d5881a05 42022 67b30000000100000000000007626f68656d656e026e6c0000010001 67b38000000100000002000207626f68656d656e026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 42023 49b3000000010000000000000373697306657472616465026e6c0000010001 49b3800000010000000200000373697306657472616465026e6c0000010001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 42024 113f00000001000000000000057669657773036d346e026e6c0000010001 113f80000001000000020000057669657773036d346e026e6c0000010001c01200020001000151800010026e73076379736f6e657403636f6d00c01200020001000151800006036e7331c02d 42025 58ef000000010000000000000377777709746f6e6261626f7577026e6c0000010001 58ef840300010000000100000377777709746f6e6261626f7577026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 42026 25ad00000001000000000000037777770d667973696f7468657261706965026e6c0000010001 25ad80000001000000020000037777770d667973696f7468657261706965026e6c0000010001c01000020001000151800011036e73310a747265666e6574646e73c01ec01000020001000151800006036e7332c036 42027 28fa00000001000000000000037777770863687279736c6572026e6c0000010001 28fa80000001000000020001037777770863687279736c6572026e6c0000010001c0100002000100015180001c0964636e6c646d7a30320f6461696d6c657263687279736c6572c019c0100002000100015180000b026e73026e6c036e657400c02d00010001000151800004c14e3f46 42028 1940000000010000000000000b617564696f636f76657273036e6c2d07736974652d6964026e6c0000010001 1940800000010000000300000b617564696f636f76657273036e6c2d07736974652d6964026e6c0000010001c01c00020001000151800012036e733108626c7565646f6d65036e657400c01c00020001000151800006036e7332c03cc01c00020001000151800006036e7333c03c 42029 440800000001000000000000026e73056175646178026e6c0000010001 440880000001000000020001026e73056175646178026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ad5519 42030 220400000001000000000000026e73056175646178026e6c0000260001 220480000001000000020001026e73056175646178026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1ad5519 42031 ed1400000001000000000000037777771272657374617572616e746369747968616c6c026e6c0000010001 ed1480000001000000020001037777771272657374617572616e746369747968616c6c026e6c0000010001c0100002000100015180000a036e733303777873c023c01000020001000151800006036e7334c03bc04d00010001000151800004d5ef9a65 42032 928400000001000000000000086d6f656b6f747465026e6c0000010001 928480000001000000020000086d6f656b6f747465026e6c0000010001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c02c 42033 09db00000001000000000000037777770862656e76726f6f6d026e6c0000010001 09db80000001000000020002037777770862656e76726f6f6d026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 42034 ff840000000100000000000003777777066b7569706572026e6c0000010001 ff848000000100000002000203777777066b7569706572026e6c0000010001c01000020001000151800013036e73310c636f6c742d74656c65636f6dc017c01000020001000151800006036e7332c02fc02b00010001000151800004d44ea00dc04a00010001000151800004d44ea00e 42035 984b000000010000000000000377777710686f656b737472612d64657672696573026e6c0000010001 984b800000010000000200010377777710686f656b737472612d64657672696573026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c021c04e00010001000151800004c2860043 42036 e85b00000001000000000000046d61696c10616d65726963616e73746166666f7264026e6c0000010001 e85b80000001000000020002046d61696c10616d65726963616e73746166666f7264026e6c0000010001c0110002000100015180000f036e733108642d64657369676ec022c01100020001000151800006036e7332c03ac036000100010001518000045054f3f0c051000100010001518000045054f3f1 42037 b32f0000000100000000000005646e732d31056c61646f74026e6c0000010001 b32f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42038 b9c9000000010000000000000377777709706b6e2d65656c6465026e6c0000010001 b9c9800000010000000200000377777709706b6e2d65656c6465026e6c0000010001c0100002000100015180001505646e7332300961637469766569737003636f6d00c0100002000100015180000805646e733231c034 42039 5c1b000000010000000000000c6c697a6172642d706f696e74026e6c0000020001 5c1b800000010000000200020c6c697a6172642d706f696e74026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 42040 8fd50000000100000000000005646e732d32056c61646f74026e6c0000010001 8fd58000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42041 0ad600000001000000000000037777770c756974696e62726162616e74026e6c0000010001 0ad680000001000000030003037777770c756974696e62726162616e74026e6c0000010001c0100002000100015180000e076e73617574683103626974c01dc0100002000100015180000a076e736175746832c039c0100002000100015180000a076e736175746833c039c03100010001000151800004d5880c33c04b00010001000151800004d5880c3bc06100010001000151800004d4ccc00b 42042 a519000000010000000000000a636e63737570706f7274026e6c00000f0001 a519800000010000000300010a636e63737570706f7274026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc017c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c049c02b000100010001518000043efa0202 42043 97cf000000010000000000001264656b6b65722d62726f6d6d657273686f70026e6c0000010001 97cf800000010000000200001264656b6b65722d62726f6d6d657273686f70026e6c0000010001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c03e 42044 dd1000000001000000000000036e7331096e657467726f756e64026e6c0000010001 dd1080000001000000020002036e7331096e657467726f756e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e415c03c0001000100015180000451046014 42045 3ec200000001000000000000037777770b66756c6c796c6f61646564026e6c0000010001 3ec280000001000000020002037777770b66756c6c796c6f61646564026e6c0000010001c0100002000100015180000f046e73303107736872696e6574c01cc01000020001000151800007046e733032c035c03000010001000151800004d9c3e743c04b00010001000151800004d9c3e744 42046 6aa2000000010000000000000a696e746572666c657572026e6c00000f0001 6aa2800000010000000200000a696e746572666c657572026e6c00000f0001c00c00020001000151800014036e73310a61312d626c6f656d656e036e657400c00c00020001000151800006036e7332c02f 42047 bf0b000000010000000000000766323234313335057570632d66066368656c6c6f026e6c0000010001 bf0b800000010000000300030766323234313335057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 42048 e54f00000001000000000000037777770b636c75622d726163696e67026e6c0000010001 e54f80000001000000030000037777770b636c75622d726163696e67026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c038c0100002000100015180000a076e73686f737433c038 42049 edc50010000100000000000103777777076d797374617473026e6c00000100010000290800000080000000 edc58000000100000002000303777777076d797374617473026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa404c04900010001000151800004d5efa4050000291000000000000000 42050 9b7600000001000000000000037777770e686f757468616e64656c626c6f6b026e6c0000010001 9b7680000001000000020002037777770e686f757468616e64656c626c6f6b026e6c0000010001c01000020001000151800011036e73350a6e657461666661697273c01fc01000020001000151800006036e7336c037c03300010001000151800004c1ac2d05c05000010001000151800004c1ac2d06 42051 a6d30000000100000000000003777777107a6164656c6d616b6572696a626f6572026e6c0000010001 a6d38000000100000003000103777777107a6164656c6d616b6572696a626f6572026e6c0000010001c0100002000100015180000e026e7308767575727765726bc021c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c053c035000100010001518000043efa0202 42052 20ec00000001000000000000037777770a76696c6c616d65646961026e6c0000010001 20ec80000001000000020002037777770a76696c6c616d65646961026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 42053 f5bf00000001000000000000037777770d736561736f6e7374726176656c026e6c0000010001 f5bf80000001000000030000037777770d736561736f6e7374726176656c026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c036c01000020001000151800006036e7333c036 42054 0dc900000001000000000000066d696e6f6377026e6c00000f0001 0dc980000001000000020001066d696e6f6377026e6c00000f0001c00c00020001000151800015086e732d69736d30310963617067656d696e69c013c00c0002000100015180000b086e732d69736d3032c030c02700010001000151800004d5f4a024 42055 c13f0000000100000000000003777777076d797374617473026e6c0000010001 c13f8000000100000002000203777777076d797374617473026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa404c04900010001000151800004d5efa405 42056 f7fa0000000100000000000006686f72746563026e6c0000ff0001 f7fa8000000100000002000206686f72746563026e6c0000ff0001c00c0002000100015180000f036e733108696e74726f776562c013c00c00020001000151800006036e7332c02bc0270001000100015180000450416028c04200010001000151800004c356780c 42057 d04f0010000100000000000103626c3402626c06787334616c6c026e6c00000100010000290800000080000000 d04f8000000100000003000303626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 42058 678500000001000000000000037777770c6d6f756e7461696e62696b65026e6c0000010001 678580000001000000030002037777770c6d6f756e7461696e62696b65026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 42059 1c990000000100000000000003777777046b773163026e6c0000010001 1c998000000100000002000203777777046b773163026e6c0000010001c01000020001000151800018036e7331117468656e6574776f726b666163746f7279c015c01000020001000151800006036e7332c02dc02900010001000151800004d4cb0c35c04d00010001000151800004d4cb0c34 42060 b1fc0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 b1fc8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 42061 81dd000000010000000000000a6c6b2d73657276696365026e6c0000020001 81dd800000010000000200020a6c6b2d73657276696365026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 42062 45f8000000010000000000000f73656e696f72666c65786f6e696373026e6c0000010001 45f8800000010000000200020f73656e696f72666c65786f6e696373026e6c0000010001c00c0002000100015180000e036e733107626265796f6e64c01cc00c00020001000151800006036e7332c034c030000100010001518000043eb1900bc04a000100010001518000043eb19002 42063 c184000000010000000000000377777709677369667265616b73026e6c0000010001 c184800000010000000200000377777709677369667265616b73026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 42064 a6f000000001000000000000056779617461026e6c00000f0001 a6f080000001000000020000056779617461026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 42065 fd010000000100000000000003626c3402626c06787334616c6c026e6c0000010001 fd018000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42066 231300000001000000000000077462612d74656e026e6c0000010001 231380000001000000020001077462612d74656e026e6c0000010001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 42067 bb8c000000010000000000000d636f6c6f7572732d6772696d65026e6c00000f0001 bb8c800000010000000200010d636f6c6f7572732d6772696d65026e6c00000f0001c00c0002000100015180000c026e73066e6577696365c01ac00c00020001000151800013036e7332097669727475616c787303636f6d00c02e000100010001518000043e818501 42068 b9a3000000010000000000000770726f66696c65026e6c00000f0001 b9a3800000010000000200000770726f66696c65026e6c00000f0001c00c0002000100015180000e036e73310464697661036e657400c00c00020001000151800006036e7332c02c 42069 427a000000010000000000000d6b6161696d616b656c61617273026e6c00000f0001 427a800000010000000200020d6b6161696d616b656c61617273026e6c00000f0001c00c0002000100015180000e036e733107686f7477697265c01ac00c00020001000151800006036e7332c032c02e0001000100015180000451044b03c0480001000100015180000451044bc8 42070 1af800000001000000000000026e7306736175727573026e6c0000010001 1af880000001000000020001026e7306736175727573026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e7304707a7a6c03636f6d00c00c0001000100015180000451112b02 42071 385400000001000000000000076a61636b61737304756c6965026e6c0000010001 385480000001000000020002076a61636b61737304756c6965026e6c0000010001c0140002000100015180000a036e7331036e7873c019c01400020001000151800006036e7332c031c02d00010001000151800004d973c015c04300010001000151800004d973c102 42072 ed4f00000001000000000000026e7306787334616c6c026e6c00001c0001 ed4f80000001000000030002026e7306787334616c6c026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 42073 320900000001000000000000026e7306787334616c6c026e6c0000260001 320980000001000000030002026e7306787334616c6c026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 42074 a46000000001000000000000036e733206787334616c6c026e6c00001c0001 a46080000001000000030002036e733206787334616c6c026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 42075 c34500000001000000000000036e733206787334616c6c026e6c0000260001 c34580000001000000030002036e733206787334616c6c026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 42076 370a0000000100000000000003777777156d6f756e7461696e62696b65616476656e74757265026e6c0000010001 370a8000000100000002000203777777156d6f756e7461696e62696b65616476656e74757265026e6c0000010001c0100002000100015180000b036e73310461786974c026c01000020001000151800006036e7332c03ec03a000100010001518000043e3a440bc051000100010001518000043e3a440c 42077 e6fc00000001000000000000037777770e686f74656c636f6e636965726765026e6c0000010001 e6fc80000001000000030003037777770e686f74656c636f6e636965726765026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c01fc01000020001000151800006036e7330c036c01000020001000151800006036e7333c036c03300010001000151800004c3561682c05300010001000151800004c3561683c06500010001000151800004d5de0bfa 42078 0e810000000100000000000005706f6d617a026e6c00000f0001 0e818000000100000002000005706f6d617a026e6c00000f0001c00c0002000100015180001504646e73310a65617379736572766572036e657400c00c0002000100015180000704646e7332c02b 42079 af4a000000010000000000000c696e747261737572616e6365026e6c0000010001 af4a800000010000000200020c696e747261737572616e6365026e6c0000010001c00c00020001000151800012026e730c696e746572636f6e6e656374c019c00c00020001000151800006036e7332c030c02d00010001000151800004d453c005c04b00010001000151800004d453c006 42080 1009000000010000000000000377777709706f737462616b6a65026e6c0000010001 1009800000010000000200000377777709706f737462616b6a65026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c031 42081 1685000000010000000000000476697661026e6c0000010001 1685800000010000000300000476697661026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c029c00c00020001000151800006036e7333c029 42082 3aaa0000000100000000000003777777176d616e6167656d656e74737570706f72746576656e7473026e6c0000010001 3aaa8000000100000002000203777777176d616e6167656d656e74737570706f72746576656e7473026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c028c0100002000100015180001004646e733208636f6e6365707473c028c03c00010001000151800004d5c51c03c05900010001000151800004d5c51e1c 42083 38bc000000010000000000000377777704616c6469026e6c0000010001 38bc800000010000000200000377777704616c6469026e6c0000010001c0100002000100015180001a046e73303904626e69630b62657274656c736d616e6e02646500c01000020001000151800007046e733137c02e 42084 1f5b0000000100000000000003777777096372696d656a617a7a026e6c0000010001 1f5b8403000100000001000003777777096372696d656a617a7a026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 42085 43fc000000010000000000000e756e6c696d697469642d636f6d6d026e6c00000f0001 43fc840300010000000100000e756e6c696d697469642d636f6d6d026e6c00000f0001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 42086 8b3f000000010000000000000d6c6b346470726f6a656374656e026e6c0000020001 8b3f800000010000000200020d6c6b346470726f6a656374656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 42087 b4c900000001000000000000037777770a7370656c656e6d616172026e6c0000010001 b4c980000001000000020000037777770a7370656c656e6d616172026e6c0000010001c01000020001000151800018036e73390e666c6578776562686f7374696e6703636f6d00c01000020001000151800007046e733130c033 42088 05e000000001000000000000046c756974026e6c00000f0001 05e080000001000000020002046c756974026e6c00000f0001c00c00020001000151800015036e73310e70726f6a656b746965636f6c6f72c011c00c00020001000151800006036e7332c029c025000100010001518000043e3a3cb2c046000100010001518000043e3a3cb5 42089 9b5c28000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d7364637309446f6e4369726b656c026e6c000021000100000258001d00000064018508646f6e737276303109446f6e4369726b656c026e6c00 9b5ca8040000000000000000 42090 5c7900000001000000000000037777770a626f64796d616e696163026e6c0000010001 5c7980000001000000020000037777770a626f64796d616e696163026e6c0000010001c01000020001000151800015036e73310b7072696f73657276653038036e657400c01000020001000151800006036e7332c033 42091 508e0000000100000000000005736176616c026e6c00000f0001 508e8000000100000002000005736176616c026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 42092 5e2900000001000000000000034e533203494e47026e6c0000010001 5e2980000001000000020002034e533203494e47026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 42093 3b3a00000001000000000000034e533103494e47026e6c0000010001 3b3a80000001000000020002034e533103494e47026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 42094 398400000001000000000000037777770f726963686172646b72656774696e67026e6c0000010001 398480000001000000030002037777770f726963686172646b72656774696e67026e6c0000010001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c038c03400010001000151800004d4ccc0fcc069000100010001518000043efa0703 42095 183200000001000000000000086261726d61746f6e026e6c00001c0001 183280000001000000020002086261726d61746f6e026e6c00001c0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 42096 da2000000001000000000000037777770d76646e74656c656d6174696361026e6c0000010001 da2080000001000000020000037777770d76646e74656c656d6174696361026e6c0000010001c01000020001000151800010036e733106626973636f6e036e657400c01000020001000151800006036e7332c036 42097 5208000000010000000000000c6d6174736f6c7574696f6e73026e6c00000f0001 5208800000010000000200020c6d6174736f6c7574696f6e73026e6c00000f0001c00c0002000100015180000a036e733103647768c019c00c00020001000151800006036e7332c031c02d00010001000151800004d5efb308c04300010001000151800004d5efb303 42098 b843ddad801185980b7b00000101080a1123614f01280817 42099 b843ddae801085980b7900000101080a1123614f01280818 42100 087800000001000000000000026d66026e6c00001c0001 087880000001000000020002026d66026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc00fc00c00020001000151800006036e7332c026c02300010001000151800004c26d0642c03b00010001000151800004c26d0963 42101 eb5f00000001000000000000046d61696c0c6d7573696374656c65636f6d026e6c0000010001 eb5f80000001000000030003046d61696c0c6d7573696374656c65636f6d026e6c0000010001c0110002000100015180001208736f6c7574696f6e06736f6c636f6ec01ec01100020001000151800006036e7331c03bc01100020001000151800006036e7332c03bc03200010001000151800004d42d2005c05000010001000151800004d42d2003c06200010001000151800004d42d2103 42102 70e2000000010000000000000874697363616c6939026e6c00000f0001 70e2840300010000000100000874697363616c6939026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 42103 b68a0000000100000000000004616e73310774697363616c69026e6c0000010001 b68a8000000100000003000204616e73310774697363616c69026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c00c00010001000151800004c3f14d38c03b00010001000151800004c3f13325 42104 db450000000100000000000004616e73320774697363616c69026e6c0000010001 db458000000100000003000204616e73320774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c01100020001000151800002c00cc0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c00c00010001000151800004c3f13325 42105 5b780000000100000000000003636669026e6c00000f0001 5b788000000100000002000203636669026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 42106 0ffd0000000100000000000007766462636f6d70026e6c00001c0001 0ffd8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 42107 00120000000100000000000007766462636f6d70026e6c00001c0001 00128000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 42108 383f0000000100000000000003777777127a756964776573742d6e656465726c616e64026e6c0000010001 383f8000000100000002000003777777127a756964776573742d6e656465726c616e64026e6c0000010001c01000020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c01000020001000151800006036e7332c03b 42109 75b7000000010000000000000e636f6e666c657876657268757572026e6c00001c0001 75b7800000010000000200000e636f6e666c657876657268757572026e6c00001c0001c00c00020001000151800017036e73310d6465696e7465726e65746d616e036e657400c00c00020001000151800006036e7332c033 42110 9b650000000100000000000007736561736f6e73026e6c0000010001 9b658000000100000003000007736561736f6e73026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c02cc00c00020001000151800006036e7333c02c 42111 2b87000000010000000000000e636f6e666c657876657268757572026e6c0000010001 2b87800000010000000200000e636f6e666c657876657268757572026e6c0000010001c00c00020001000151800017036e73310d6465696e7465726e65746d616e036e657400c00c00020001000151800006036e7332c033 42112 c497000000010000000000000473676e32077369656d656e73026e6c0000010001 c497800000010000000200020473676e32077369656d656e73026e6c0000010001c01100020001000151800002c00cc011000200010001518000070473676e34c011c00c00010001000151800004c28a8909c03b00010001000151800004c28a890b 42113 3fad00000001000000000000037777770973682d74756e696e67026e6c0000010001 3fad80000001000000020000037777770973682d74756e696e67026e6c0000010001c010000200010001518000100161026e73057a796c6f6e036e657400c010000200010001518000040162c030 42114 f023000000010000000000001073616e6f6d612d756974676576657273026e6c0000010001 f023800000010000000300001073616e6f6d612d756974676576657273026e6c0000010001c00c00020001000151800010036e733106666173747873036e657400c00c00020001000151800006036e7332c035c00c00020001000151800006036e7333c035 42115 afb700000001000000000000086c6b656e62757267026e6c0000020001 afb780000001000000020002086c6b656e62757267026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 42116 664400000001000000000000076d656d6265727304686f6d65026e6c0000010001 664480000001000000030003076d656d6265727304686f6d65026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c01400020001000151800006036e7333c014c02d00010001000151800004d47842ccc03f00010001000151800004d5338161c05100010001000151800004d533804b 42117 815600000001000000000000037777770976616e62696e6e656e026e6c0000010001 815680000001000000020000037777770976616e62696e6e656e026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c034 42118 16460000000100000000000003706f700d74656c65636f6d776572656c64026e6c00001c0001 16468000000100000003000203706f700d74656c65636f6d776572656c64026e6c00001c0001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 42119 c0390000000100000000000003706f700d74656c65636f6d776572656c64026e6c0000260001 c0398000000100000003000203706f700d74656c65636f6d776572656c64026e6c0000260001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 42120 b21800000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 b21880000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42121 92a300000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c0000260001 92a380000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42122 849e00000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 849e80000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42123 9e2b00000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c0000260001 9e2b80000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42124 ac4100000001000000000000056f70746973026e6c0000ff0001 ac4180000001000000020002056f70746973026e6c0000ff0001c00c0002000100015180001a036e733113736d616c6c686f6c642d686f7374696e672d35c012c00c00020001000151800006036e7332c02ac02600010001000151800004d5f72ea0c04c00010001000151800004d5f72ea1 42125 eef200000001000000000000036e733303777873026e6c0000010001 eef280000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42126 8c6400000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 8c6480000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42127 396000000001000000000000037777770762656c73746174026e6c0000010001 396080000001000000020000037777770762656c73746174026e6c0000010001c0100002000100015180000f036e73310669706f77657202626500c01000020001000151800006036e7332c030 42128 6d5a000000010000000000001f6c6b6a686473666c6b687766636877616c6b6a6568636a6b776168656a6b63026e6c0000020001 6d5a840300010000000100001f6c6b6a686473666c6b687766636877616c6b6a6568636a6b776168656a6b63026e6c0000020001c02c00060001000038400036026e730f646f6d61696e2d7265676973747279c02c0a686f73746d6173746572c0430bf1e540000070800000384000278d0000003840 42129 5bdf00000001000000000000086e6d736d65646961026e6c00000f0001 5bdf80000001000000020000086e6d736d65646961026e6c00000f0001c00c00020001000151800014036e73310a346e657461636365737303636f6d00c00c00020001000151800006036e7332c02d 42130 5e16000000010000000000000b666d6e686f6c647372763303666d6e026e6c0000010001 5e16800000010000000200000b666d6e686f6c647372763303666d6e026e6c0000010001c0180002000100015180000b026e73026e6c036e657400c0180002000100015180001206617574683630026e73026e6c027575c036 42131 ad5d0000000100000000000006637962697465026e6c00000f0001 ad5d8000000100000002000206637962697465026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 42132 c88900000001000000000000024b47024e4c00001c0001 c88980000001000000020000024b47024e4c00001c0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c027 42133 60340000000100000000000003777777046b726173026e6c0000010001 60348000000100000002000003777777046b726173026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 42134 bdf400000001000000000000086c6b6f72656d616e026e6c0000020001 bdf480000001000000020002086c6b6f72656d616e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 42135 76b00010000100000000000103626c3402626c06787334616c6c026e6c00000100010000290800000000000000 76b08000000100000003000303626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 42136 4dc500000001000000000000107665726c6f72656e7061726164696a73026e6c00000f0001 4dc580000001000000020000107665726c6f72656e7061726164696a73026e6c00000f0001c00c0002000100015180000c026e7306766576696461c01dc00c00020001000151800006036e7332c034 42137 1d890000000100000000000003626c3402626c06787334616c6c026e6c0000010001 1d898000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42138 41fd00000001000000000000036e7332026973026e6c0000010001 41fd80000001000000020002036e7332026973026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02700010001000151800004d5852102c00c00010001000151800004d5c41503 42139 ee2d00000001000000000000036e7331026973026e6c0000010001 ee2d80000001000000020002036e7331026973026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852102c03500010001000151800004d5c41503 42140 0df2000000010000000000000a7265666f6c696472756b026e6c00001c0001 0df2800000010000000300020a7265666f6c696472756b026e6c00001c0001c00c0002000100015180000d036e733106776964657873c017c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 42141 c2740000000100000000000006646f726d696f026e6c00000f0001 c2748000000100000002000206646f726d696f026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 42142 1ebc00000001000000000000036e73320564656d6f6e026e6c00001c0001 1ebc80000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 42143 1b76000000010000000000000566696c65730d64657269636b72657468616e73026e6c0000010001 1b76800000010000000200020566696c65730d64657269636b72657468616e73026e6c0000010001c0120002000100015180000f036e7331086a64696d65646961c020c0120002000100015180000d036e7332066265656b756dc020c03400010001000151800004d4ccc034c04f00010001000151800004d5880e34 42144 9f910000000100000000000003777777086570677569646573026e6c0000010001 9f918403000100000001000003777777086570677569646573026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 42145 43cc00000001000000000000036e733104696c7365026e6c0000010001 43cc80000001000000030003036e733104696c7365026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a284 42146 b66400000001000000000000036e733106736f6c636f6e026e6c0000010001 b66480000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 42147 6dbc00000001000000000000036e733206736f6c636f6e026e6c0000010001 6dbc80000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 42148 3e0d00000001000000000000036e733304696c7365026e6c0000010001 3e0d80000001000000030003036e733304696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc029000100010001518000043e45a282c03b000100010001518000043e45a283c00c000100010001518000043e45a284 42149 36de0000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 36de8000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 42150 472100000001000000000000036e733204696c7365026e6c0000010001 472180000001000000030003036e733204696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e45a282c00c000100010001518000043e45a283c049000100010001518000043e45a284 42151 84a700000001000000000000046164737004696c7365026e6c0000010001 84a780000001000000030003046164737004696c7365026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02a000100010001518000043e45a282c03c000100010001518000043e45a283c04e000100010001518000043e45a284 42152 b243000000010000000000000d6c6c6174696562656472696a66026e6c0000020001 b243800000010000000200020d6c6c6174696562656472696a66026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 42153 6d1c00000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 6d1c80000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 42154 62f700000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 62f780000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 42155 9c7f00000001000000000000036e733503777873026e6c0000010001 9c7f80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42156 e30800000001000000000000036e733503777873026e6c00001c0001 e30880000001000000030003036e733503777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42157 7da300000001000000000000046e73303903777873026e6c00001c0001 7da380000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 42158 a30400000001000000000000037777770d76616e62726f6e6b686f727374026e6c0000010001 a30484030001000000010000037777770d76616e62726f6e6b686f727374026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 42159 eddd00000001000000000000037777770c72656e6561646d697261616c026e6c0000010001 eddd80000001000000020002037777770c72656e6561646d697261616c026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 42160 f26000000001000000000000037777770b646574656c656772616166026e6c0000010001 f26080000001000000020000037777770b646574656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c034 42161 893400000001000000000000046d61696c0c6a6f6e676c656572746f7564026e6c0000010001 893480000001000000020000046d61696c0c6a6f6e676c656572746f7564026e6c0000010001c01100020001000151800012036e7333086e6574766c696573036e657400c01100020001000151800006036e7334c036 42162 cbd300000001000000000000037777770c6a657567646a6f75726e616c026e6c0000010001 cbd384030001000000010000037777770c6a657567646a6f75726e616c026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 42163 c65f00000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637305616f70656e026e6c0000210001 c65f80000001000000020001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637305616f70656e026e6c0000210001c0400002000100015180000805616f656164c040c0400002000100015180001507616f676d73303108616f70656e636f6d02646500c05a00010001000151800004d5351002 42164 9b17000000010000000000000e76616e6f73636f6d707574657273026e6c00000f0001 9b17800000010000000200000e76616e6f73636f6d707574657273026e6c00000f0001c00c00020001000151800010026e73076b69787461727403636f6d00c00c00020001000151800006036e7332c032 42165 55ca00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 55ca80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 42166 064800000001000000000000037777770c67656469636874656e776562026e6c0000010001 064880000001000000020002037777770c67656469636874656e776562026e6c0000010001c01000020001000151800013046e732d310b666f782d686f7374696e67c01dc01000020001000151800007046e732d32c036c03100010001000151800004d5bd1374c05000010001000151800004d5bd1675 42167 a35900000001000000000000076c6f6f6b666f72026e6c00000f0001 a35980000001000000020002076c6f6f6b666f72026e6c00000f0001c00c00020001000151800010026e730a7a65656c616e646e6574c014c00c00020001000151800006036e7332c02bc02800010001000151800004d473c0c1c04400010001000151800004d473c0c3 42168 564f00000001000000000000056c79726973036b766b026e6c0000010001 564f80000001000000020002056c79726973036b766b026e6c0000010001c0120002000100015180000d026e73076b6e6f77617265c016c01200020001000151800006036e7332c02dc02a00010001000151800004c3402003c04300010001000151800004c340202b 42169 bca40000000100000000000003777777096c696e6773666f7274026e6c0000010001 bca48000000100000002000103777777096c696e6773666f7274026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01ac01000020001000151800006036e7334c032c02e00010001000151800004d5c401c0 42170 9785000000010000000000000764617669737461026e6c00000f0001 9785800000010000000200010764617669737461026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800010036e7332096379626572636f6d6dc014c02800010001000151800004d5c40246 42171 3e7d000000010000000000000575726975730473656d61026e6c0000010001 3e7d800000010000000300030575726975730473656d61026e6c0000010001c01200020001000151800012047072693103646e73067073696e6574c017c012000200010001518000070470726932c030c012000200010001518000070470726933c030c02b000100010001518000049a0ff9a6c049000100010001518000049a0ff9aac05c000100010001518000049a0ff9ae 42172 02f40000000100000000000009652d6c756e61746963026e6c0000010001 02f48000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42173 af8e00000001000000000000037777771164656b6b65726e6174757572737465656e026e6c0000010001 af8e80000001000000020002037777771164656b6b65726e6174757572737465656e026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c022c01000020001000151800006036e7332c03ac03600010001000151800004d43d0f08c05400010001000151800004d43d19e2 42174 3fe2000000010000000000001b6f6e6465726e656d657273766572656e6967696e676472756e656e026e6c0000010001 3fe2800000010000000200001b6f6e6465726e656d657273766572656e6967696e676472756e656e026e6c0000010001c00c00020001000151800010036e7331066969686f73740362697a00c00c00020001000151800006036e7332c040 42175 c02300000001000000000000037777770e70737963686961747269656e6574026e6c0000010001 c02380000001000000020002037777770e70737963686961747269656e6574026e6c0000010001c01000020001000151800010036e7331096d6173746572646e73c01fc01000020001000151800006036e7332c037c033000100010001518000045054f347c04f000100010001518000043e94a047 42176 3eb00000000100000000000006636f726d616e026e6c00000f0001 3eb08000000100000002000106636f726d616e026e6c00000f0001c00c0002000100015180000a036e733303777873c013c00c00020001000151800006036e7334c02bc03d00010001000151800004d5ef9a65 42177 86c100000001000000000000037777770c64656b7265656b6f65766572026e6c0000010001 86c180000001000000020002037777770c64656b7265656b6f65766572026e6c0000010001c0100002000100015180000a036e733103697870c01dc01000020001000151800006036e7332c035c03100010001000151800004d943e639c047000100010001518000043efa063f 42178 174500000001000000000000037777770c67656469636874656e776562026e6c0000010001 174580000001000000020002037777770c67656469636874656e776562026e6c0000010001c01000020001000151800013046e732d310b666f782d686f7374696e67c01dc01000020001000151800007046e732d32c036c03100010001000151800004d5bd1374c05000010001000151800004d5bd1675 42179 0ea600000001000000000000077265636f6d6574026e6c0000ff0001 0ea680000001000000020002077265636f6d6574026e6c0000ff0001c00c0002000100015180000f036e733108696c696d62757267c014c00c00020001000151800006036e7332c02cc02800010001000151800004c2b26281c04300010001000151800004c2b262f7 42180 554300000001000000000000036972630468656c6c026e6c0000010001 554380000001000000030001036972630468656c6c026e6c0000010001c0100002000100015180000e026e7308767575727765726bc015c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c047c029000100010001518000043efa0202 42181 a1600000000100000000000005646e732d31056c61646f74026e6c0000010001 a1608000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42182 54c20000000100000000000005646e732d32056c61646f74026e6c0000010001 54c28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42183 0fe4000000010000000000000377777709746f6e6261626f7577026e6c0000010001 0fe4840300010000000100000377777709746f6e6261626f7577026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 42184 f2010010000100000000000109636865636b73746174026e6c00000100010000290800000080000000 f2018000000100000002000209636865636b73746174026e6c0000010001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c02a00010001000151800004d4ccc0fc0000291000000000000000 42185 3b000000000100000000000009652d6c756e61746963026e6c0000010001 3b008000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42186 1b200000000100000000000009652d6c756e61746963026e6c0000010001 1b208000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42187 991600000001000000000000037777770b6f6d6f2d73657276696365026e6c0000010001 991680000001000000030000037777770b6f6d6f2d73657276696365026e6c0000010001c0100002000100015180001405646e73303408756e696c6576657203636f6d00c0100002000100015180000805646e733032c036c0100002000100015180000805646e733838c036 42188 fc8d0000000100000000000006736764646764026e6c00000f0001 fc8d8403000100000001000006736764646764026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 42189 ed480000000100000000000003777777056c696e64610b6869657276726f7577656e026e6c0000010001 ed488000000100000002000003777777056c696e64610b6869657276726f7577656e026e6c0000010001c01600020001000151800010036e73610674696e74656c03636f6d00c01600020001000151800006036e7362c03a 42190 eab20000000100000000000009636865636b73746174026e6c0000010001 eab28000000100000002000109636865636b73746174026e6c0000010001c00c0002000100015180000d036e733106776964657873c016c00c00020001000151800010036e733206776964657873036e657400c02a00010001000151800004d4ccc0fc 42191 9c3000100001000000000001036e7331056132303030026e6c00000100010000290800000080000000 9c3080000001000000030003036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c01420000291000000000000000 42192 276300100001000000000001036e7332056132303030026e6c00000100010000290800000080000000 276380000001000000030003036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c01420000291000000000000000 42193 1566000000010000000000000377777703736561026e6c0000010001 1566800000010000000300010377777703736561026e6c0000010001c0100002000100015180000e026e7308767575727765726bc014c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c046c028000100010001518000043efa0202 42194 09e4000000010000000000000462617261026e6c00000f0001 09e4800000010000000200020462617261026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 42195 90ac000000010000000000000f6c6c6f79646c6f6f6d63656e746572026e6c0000020001 90ac800000010000000200020f6c6c6f79646c6f6f6d63656e746572026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01cc00c00020001000151800006036e7332c034c03000010001000151800004c29f4906c04800010001000151800004c29fb004 42196 fc810000000100000000000007306368656c6c6f026e6c00000f0001 fc818403000100000001000007306368656c6c6f026e6c00000f0001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 42197 f09f000000010000000000000e6c696a6672656e7465706f6c69730b676172616e7462656c6567026e6c0000010001 f09f800000010000000200020e6c696a6672656e7465706f6c69730b676172616e7462656c6567026e6c0000010001c01b0002000100015180000a036e733103647768c027c01b00020001000151800006036e7332c03fc03b00010001000151800004d5efb308c05100010001000151800004d5efb303 42198 1f9800000001000000000000036e7331056369747573026e6c0000010001 1f9880000001000000020002036e7331056369747573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043ed457edc038000100010001518000043ed457ee 42199 478900000001000000000000036e7331056369747573026e6c0000260001 478980000001000000020002036e7331056369747573026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043ed457edc038000100010001518000043ed457ee 42200 935400000001000000000000036e7332056369747573026e6c0000010001 935480000001000000020002036e7332056369747573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000043ed457edc00c000100010001518000043ed457ee 42201 c9aa00000001000000000000036e7332056369747573026e6c0000260001 c9aa80000001000000020002036e7332056369747573026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a000100010001518000043ed457edc00c000100010001518000043ed457ee 42202 579100000001000000000000037777770a636173696e6f63697479026e6c0000010001 579180000001000000030002037777770a636173696e6f63697479026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 42203 941c000000010000000000000662616872616d06787334616c6c026e6c0000010001 941c800000010000000300020662616872616d06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42204 967a0000000100000000000005626974656c026e6c00000f0001 967a8000000100000002000205626974656c026e6c00000f0001c00c00020001000151800013036e73310c7570706572686f7374696e67c012c00c00020001000151800006036e7332c02ac02600010001000151800004d994a851c04500010001000151800004d994a852 42205 e1a600100001000000000001036e733503777873026e6c00000100010000290800000000000000 e1a680000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 42206 6b1c00000001000000000000037777770f73656e696f72656e2d6d616e75616c026e6c0000010001 6b1c80000001000000020002037777770f73656e696f72656e2d6d616e75616c026e6c0000010001c01000020001000151800013036e73330c6d6565737465726c696a6b32c020c01000020001000151800006036e7334c038c03400010001000151800004d973ca6ec05300010001000151800004d973ca6f 42207 345200000001000000000000046d61696c0b6a6f7577686f7374696e67026e6c0000010001 345280000001000000030002046d61696c0b6a6f7577686f7374696e67026e6c0000010001c0110002000100015180000f036e7331086c65617365776562c01dc01100020001000151800006036e7332c035c01100020001000151800012036e7333086c65617365776562036f726700c031000100010001518000043ed44079c04c000100010001518000043ed4407a 42208 199600000001000000000000086470636c69636b730c706167696e61626568656572026e6c0000010001 199680000001000000020002086470636c69636b730c706167696e61626568656572026e6c0000010001c0150002000100015180000e026e7308696e7465722d6974c022c01500020001000151800006036e7332c039c03600010001000151800004d5c4385ac05000010001000151800004d5c4385b 42209 0af500000001000000000000146f6e6465726e656d6572736b6c616e6b626f7264026e6c00001c0001 0af580000001000000020000146f6e6465726e656d6572736b6c616e6b626f7264026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c03b 42210 a02500000001000000000000046d61696c0a77696d64696a6b6d616e026e6c0000010001 a02580000001000000020001046d61696c0a77696d64696a6b6d616e026e6c0000010001c0110002000100015180000d026e7307696e746f756368c01cc01100020001000151800012046e73303107696e746f756368036e657400c03000010001000151800004d413c001 42211 b14a0000000100000000000008696e6574676174650963617067656d696e69026e6c00000f0001 b14a8000000100000003000308696e6574676174650963617067656d696e69026e6c00000f0001c01500020001000151800007046e736531c015c01500020001000151800007046e736532c015c0150002000100015180000b086e732d69736d3031c015c03300010001000151800004c6b8e70dc04600010001000151800004c6b8e70cc05900010001000151800004d5f4a024 42212 384600000001000000000000036e733503777873026e6c0000010001 384680000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42213 608f00000001000000000000036e733403777873026e6c0000010001 608f80000001000000030003036e733403777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 42214 b19100000001000000000000056b686f6273026e6c0000ff0001 b19180000001000000030001056b686f6273026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 42215 4205010000010000000000000377777707666c6162626572026e6c0000010001 4205810000010000000300020377777707666c6162626572026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 42216 81bf00000001000000000000036e73320c692d6d6167696e6174696f6e026e6c0000010001 81bf80000001000000020002036e73320c692d6d6167696e6174696f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc031000100010001518000043ed44c22c00c000100010001518000043ed44c23 42217 cb4200000001000000000000037777770b616a6d68656e6472696b73026e6c0000010001 cb4280000001000000020002037777770b616a6d68656e6472696b73026e6c0000010001c01000020001000151800011036e73310a746f62656f6e6c696e65c01cc01000020001000151800006036e7332c034c030000100010001518000043eddd4afc04d000100010001518000043eddc707 42218 ca0e00000001000000000000036e7331056132303030026e6c0000010001 ca0e80000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 42219 e50700000001000000000000036e7332056132303030026e6c0000010001 e50780000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 42220 3f180000000100000000000003626c3102626c06787334616c6c026e6c0000010001 3f188000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42221 772000000001000000000000037777771365766572732d6b6173736173797374656d656e026e6c0000010001 772080000001000000030003037777771365766572732d6b6173736173797374656d656e026e6c0000010001c0100002000100015180000c036e7331056d61786573c024c01000020001000151800006036e7332c03cc01000020001000151800006036e7333c03cc038000100010001518000045045402ec050000100010001518000045045402fc062000100010001518000045045440a 42222 123400000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000010001 123480000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 42223 f15c0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 f15c8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42224 fc2f0000000100000000000003626c3102626c06787334616c6c026e6c0000260001 fc2f8000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42225 a10e00000001000000000000037777770c726f6265636f646972656374026e6c0000010001 a10e80000001000000020001037777770c726f6265636f646972656374026e6c0000010001c0100002000100015180000d036e733106726f6265636fc01dc0100002000100015180000b026e73026e6c036e657400c03100010001000151800004913d1a01 42226 fe9c000000010000000000000b6174746163686d656e747308696c73656d61696c026e6c0000010001 fe9c800000010000000300030b6174746163686d656e747308696c73656d61696c026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800006036e7332c018c01800020001000151800006036e7333c018c035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 42227 debb0000000100000000000003777777036e6c72026e6c0000010001 debb8000000100000002000203777777036e6c72026e6c0000010001c0100002000100015180000906737069646572c010c0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004891150c8c03d00010001000151800004c0576a65 42228 de5c00000001000000000000066974756262790a7072696e63656e2d6974026e6c0000010001 de5c80000001000000020002066974756262790a7072696e63656e2d6974026e6c0000010001c0130002000100015180000b087072696e63656e31c013c01300020001000151800002c00cc03200010001000151800004d5880f02c00c000100010001518000043e3aa60b 42229 0d2200000001000000000000087072696e63656e310a7072696e63656e2d6974026e6c0000010001 0d2280000001000000020002087072696e63656e310a7072696e63656e2d6974026e6c0000010001c01500020001000151800002c00cc0150002000100015180000906697475626279c015c00c00010001000151800004d5880f02c042000100010001518000043e3aa60b 42230 46f200000001000000000000066974756262790a7072696e63656e2d6974026e6c00001c0001 46f280000001000000020002066974756262790a7072696e63656e2d6974026e6c00001c0001c0130002000100015180000b087072696e63656e31c013c01300020001000151800002c00cc03200010001000151800004d5880f02c00c000100010001518000043e3aa60b 42231 8a8d00000001000000000000066974756262790a7072696e63656e2d6974026e6c0000260001 8a8d80000001000000020002066974756262790a7072696e63656e2d6974026e6c0000260001c0130002000100015180000b087072696e63656e31c013c01300020001000151800002c00cc03200010001000151800004d5880f02c00c000100010001518000043e3aa60b 42232 ea5800000001000000000000087072696e63656e310a7072696e63656e2d6974026e6c00001c0001 ea5880000001000000020002087072696e63656e310a7072696e63656e2d6974026e6c00001c0001c01500020001000151800002c00cc0150002000100015180000906697475626279c015c00c00010001000151800004d5880f02c042000100010001518000043e3aa60b 42233 15de00000001000000000000087072696e63656e310a7072696e63656e2d6974026e6c0000260001 15de80000001000000020002087072696e63656e310a7072696e63656e2d6974026e6c0000260001c01500020001000151800002c00cc0150002000100015180000906697475626279c015c00c00010001000151800004d5880f02c042000100010001518000043e3aa60b 42234 0ac000000001000000000000036e733104686f6d65026e6c0000010001 0ac080000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 42235 37a200000001000000000000037777770f73706161726e776f7564656c6f6f70026e6c0000010001 37a280000001000000030001037777770f73706161726e776f7564656c6f6f70026e6c0000010001c0100002000100015180000e026e7308767575727765726bc020c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c052c034000100010001518000043efa0202 42236 3f0f0000000100000000000003777777053276696577026e6c0000010001 3f0f8000000100000002000203777777053276696577026e6c0000010001c01000020001000151800010036e7331096e65746e6174696f6ec016c01000020001000151800006036e7332c02ec02a00010001000151800004d5efb105c04600010001000151800004505faa0a 42237 737600000001000000000000046265636f046c696e6b076861636b746963026e6c0000ff0001 737680000001000000020002046265636f046c696e6b076861636b746963026e6c0000ff0001c0160002000100015180000c026e7306787334616c6cc01ec01600020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 42238 119b00000001000000000000037777770f62696572656e62726f6f6473706f74026e6c0000010001 119b80000001000000020000037777770f62696572656e62726f6f6473706f74026e6c0000010001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c037 42239 afe4000000010000000000000b776573746572776f6c6465026e6c00000f0001 afe4800000010000000200000b776573746572776f6c6465026e6c00000f0001c00c00020001000151800012036e73310b696e7465722d63616e616cc018c00c00020001000151800006036e7332c030 42240 f0070000000100000000000003777777106d61676e6565746d616b656c61617273026e6c0000010001 f0078000000100000002000203777777106d61676e6565746d616b656c61617273026e6c0000010001c01000020001000151800019036e73311277696e646b7261636874696e7465726e6574c021c01000020001000151800006036e7332c039c0350001000100015180000450f2eea1c05a0001000100015180000450f2eea2 42241 3b570000000100000000000003626c3402626c06787334616c6c026e6c0000010001 3b578000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42242 b03900000001000000000000037777770b6c696a66656e6c6564656e026e6c0000010001 b03980000001000000030001037777770b6c696a66656e6c6564656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01cc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ec030000100010001518000043efa0202 42243 7ccf00000001000000000000037777770c6d6f6e73746572626f617264026e6c0000010001 7ccf80000001000000030000037777770c6d6f6e73746572626f617264026e6c0000010001c0100002000100015180000e036e733104746d7077036e657400c01000020001000151800006036e7332c035c01000020001000151800015056f73636172076d6f6e7374657202636f02756b00 42244 c89500000001000000000000037777771077696a6761616e6e6161726b72657461026e6c0000010001 c89580000001000000020000037777771077696a6761616e6e6161726b72657461026e6c0000010001c0100002000100015180000c026e7306766576696461c021c01000020001000151800006036e7332c038 42245 ce750000000100000000000003687362026e6c00000f0001 ce758000000100000002000203687362026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc010c00c00020001000151800006036e7332c027c02400010001000151800004c26d0642c03c00010001000151800004c26d0963 42246 ffdb000000010000000000000377777706617564696163026e6c0000010001 ffdb800000010000000300020377777706617564696163026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 42247 97fc00000001000000000000036e7331046372696f026e6c0000010001 97fc80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 42248 54d400000001000000000000036e7332046372696f026e6c0000010001 54d480000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 42249 63a600000001000000000000037777770a72656372656174696566026e6c0000010001 63a680000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 42250 281a0000000100000000000003777777056164726573026e6c0000010001 281a8000000100000002000203777777056164726573026e6c0000010001c01000020001000151800009036e7331026973c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5852102c03f00010001000151800004d5c41503 42251 435b00000001000000000000037777770a72656372656174696566026e6c0000010001 435b80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 42252 c6e600100001000000000001024e530743495354524f4e024e4c00000100010000290800000080000000 c6e680000001000000020003024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f380000291000000000000000 42253 17e400000001000000000000037777770c64616e63657472697070696e026e6c0000010001 17e480000001000000020002037777770c64616e63657472697070696e026e6c0000010001c0100002000100015180000a036e7331036e7873c01dc01000020001000151800006036e7332c035c03100010001000151800004d973c015c04700010001000151800004d973c102 42254 b9220000000100000000000013626561746c657569747a656e64627572656175026e6c00001c0001 b9228403000100000001000013626561746c657569747a656e64627572656175026e6c00001c0001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 42255 3e1e00000001000000000000037777770b686170707974726176656c026e6c0000010001 3e1e80000001000000020002037777770b686170707974726176656c026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01cc0100002000100015180001004646e733208636f6e6365707473c01cc03000010001000151800004d5c51c03c04d00010001000151800004d5c51e1c 42256 a2ef00000001000000000000037777770b7a6f6e6e6570616c656973026e6c0000010001 a2ef80000001000000020002037777770b7a6f6e6e6570616c656973026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01cc01000020001000151800006036e7332c033c03000010001000151800004d4cb0e42c04b00010001000151800004d4cb1221 42257 de7500000001000000000000026e7309656174736572766572026e6c0000010001 de7580000001000000020002026e7309656174736572766572026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d4cb0e42c03b00010001000151800004d4cb1221 42258 9101000000010000000000000977657373656c696e67026e6c00000f0001 9101800000010000000200010977657373656c696e67026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800010036e7332097073636f6e73756c74c016c02a00010001000151800004d4eefc59 42259 77e100000001000000000000036e733209656174736572766572026e6c0000010001 77e180000001000000020002036e733209656174736572766572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02e00010001000151800004d4cb0e42c00c00010001000151800004d4cb1221 42260 dc0100000001000000000000036c6c79026e6c0000020001 dc0180000001000000020002036c6c79026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 42261 af440000000100000000000003626c3102626c06787334616c6c026e6c0000010001 af448000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42262 41e300000001000000000000026168026e6c00000f0001 41e380000001000000020001026168026e6c00000f0001c00c0002000100015180000b026e730561686f6c64c00fc00c0002000100015180000d036e7332036b706e036e657400c023000100010001518000048d5d2302 42263 43d40000000100000000000003626c3102626c06787334616c6c026e6c0000010001 43d48000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42264 4a5200000001000000000000046e73303803777873026e6c00001c0001 4a5280000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 42265 c7d500000001000000000000046e73303903777873026e6c00001c0001 c7d580000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 42266 09cf00000001000000000000036e733503777873026e6c0000010001 09cf80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42267 ef6800000001000000000000036e733503777873026e6c00001c0001 ef6880000001000000030003036e733503777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42268 5f8900000001000000000000037777770a7376666c616d696e676f026e6c0000010001 5f8980000001000000020000037777770a7376666c616d696e676f026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c033 42269 727d00000001000000000000024e530743495354524f4e024e4c0000010001 727d80000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 42270 73510000000100000000000003626c3102626c06787334616c6c026e6c0000010001 73518000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42271 2de80000000100000000000005646e732d31056c61646f74026e6c0000010001 2de88000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42272 87e9000000010000000000000c6c6d627665726d65756c656e026e6c0000020001 87e9800000010000000200020c6c6d627665726d65756c656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 42273 0eb900000001000000000000036e7334076e656473746174026e6c0000010001 0eb980000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42274 74e800000001000000000000036e7333076e656473746174026e6c00001c0001 74e880000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 42275 3ea800000001000000000000036e7332076e656473746174026e6c0000260001 3ea880000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42276 9bc300000001000000000000036e7333076e656473746174026e6c0000260001 9bc380000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 42277 0a8b00000001000000000000036e7332076e656473746174026e6c00001c0001 0a8b80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42278 163900000001000000000000026e7307706167656e6963026e6c0000010001 163980000001000000030001026e7307706167656e6963026e6c0000010001c00f00020001000151800013026e730d7061676570726f636573736f72c017c00f00020001000151800006036e7332c02ec00f0002000100015180000d036e73320663617374656cc017c05c00010001000151800004c3558245 42279 4eb6000000010000000000000956314139392d4657310d486176656e7374616574652d32026e6c0000060001 4eb6840300010000000100000956314139392d4657310d486176656e7374616574652d32026e6c0000060001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 42280 0e9600000001000000000000026e7307706167656e6963026e6c0000260001 0e9680000001000000030001026e7307706167656e6963026e6c0000260001c00f00020001000151800013026e730d7061676570726f636573736f72c017c00f00020001000151800006036e7332c02ec00f0002000100015180000d036e73320663617374656cc017c05c00010001000151800004c3558245 42281 03ab00000001000000000000036e733207706167656e6963026e6c0000010001 03ab80000001000000030001036e733207706167656e6963026e6c0000010001c01000020001000151800013026e730d7061676570726f636573736f72c018c01000020001000151800006036e7332c02fc0100002000100015180000d036e73320663617374656cc018c05d00010001000151800004c3558245 42282 88c500000001000000000000036e733207706167656e6963026e6c0000260001 88c580000001000000030001036e733207706167656e6963026e6c0000260001c01000020001000151800013026e730d7061676570726f636573736f72c018c01000020001000151800006036e7332c02fc0100002000100015180000d036e73320663617374656cc018c05d00010001000151800004c3558245 42283 2de90000000100000000000005646e732d32056c61646f74026e6c0000010001 2de98000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42284 734e0000000100000000000003777777086a75737469746965026e6c0000010001 734e8000000100000002000003777777086a75737469746965026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c033 42285 1dd800100001000000000001026e73086d61696e636f7265026e6c00000100010000290800000000000000 1dd880000001000000020003026e73086d61696e636f7265026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000906736572766572c00fc00c00010001000151800004d5bd130cc03a00010001000151800004d5bd130b0000291000000000000000 42286 8eeb000000010000000000000c73616c617269736578747261026e6c00000f0001 8eeb800000010000000200020c73616c617269736578747261026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 42287 871900100001000000000001026e73086d61696e636f7265026e6c00002600010000290800000000000000 871980000001000000020003026e73086d61696e636f7265026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000906736572766572c00fc00c00010001000151800004d5bd130cc03a00010001000151800004d5bd130b0000291000000000000000 42288 5b6a00000001000000000000096465736d6f657a6572026e6c00000f0001 5b6a80000001000000020002096465736d6f657a6572026e6c00000f0001c00c0002000100015180000d05686f7275730462777373c016c00c0002000100015180000603736875c030c02a00010001000151800004d943e502c04300010001000151800004d943e509 42289 ccae0010000100000000000106736572766572086d61696e636f7265026e6c00000100010000290800000000000000 ccae8000000100000002000306736572766572086d61696e636f7265026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800002c00cc03000010001000151800004d5bd130cc00c00010001000151800004d5bd130b0000291000000000000000 42290 33250010000100000000000106736572766572086d61696e636f7265026e6c00002600010000290800000000000000 33258000000100000002000306736572766572086d61696e636f7265026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800002c00cc03000010001000151800004d5bd130cc00c00010001000151800004d5bd130b0000291000000000000000 42291 bd9800000001000000000000036e733103757063026e6c0000010001 bd9880000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 42292 302c00000001000000000000055f6c646170045f7463702437393366636439622d313839332d343664622d383563302d63316533393061613833633907646f6d61696e73065f6d736463730862657267746f7973026e6c0000210001 302c80000001000000030003055f6c646170045f7463702437393366636439622d313839332d343664622d383563302d63316533393061613833633907646f6d61696e73065f6d736463730862657267746f7973026e6c0000210001c04b0002000100015180000e076e73617574683103626974c054c04b0002000100015180000a076e736175746832c070c04b0002000100015180000a076e736175746833c070c06800010001000151800004d5880c33c08200010001000151800004d5880c3bc09800010001000151800004d4ccc00b 42293 255300000001000000000000076d6161722d733207746c6f67696373026e6c0000010001 255380000001000000020002076d6161722d733207746c6f67696373026e6c0000010001c0140002000100015180000b047072693103646e73c014c014000200010001518000070470726932c035c03000010001000151800004d443abd4c047000100010001518000043eb43fd2 42294 cfee000000010000000000000377777708676f72696c6c6173026e6c0000010001 cfee800000010000000200000377777708676f72696c6c6173026e6c0000010001c0100002000100015180000c026e7306766576696461c019c01000020001000151800006036e7332c030 42295 c781000000010000000000000c64616d656e2d747275636b73026e6c0000ff0001 c781800000010000000300020c64616d656e2d747275636b73026e6c0000ff0001c00c0002000100015180000f036e7331086c65617365776562c019c00c00020001000151800006036e7332c031c00c00020001000151800012036e7333086c65617365776562036f726700c02d000100010001518000043ed44079c048000100010001518000043ed4407a 42296 acb5000000010000000000000577326b6331066e7434616c6c026e6c0000010001 acb5800000010000000200020577326b6331066e7434616c6c026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000d036e733206787334616c6cc019c02d00010001000151800004c26d3402c03e00010001000151800004c26d0963 42297 b3730000000100000000000003777777096d65646961706c7573026e6c0000010001 b3738000000100000002000203777777096d65646961706c7573026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 42298 ef7a000000010000000000000761647669736965026e6c00000f0001 ef7a800000010000000200010761647669736965026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180000e036e73310774697363616c69c014c028000100010001518000043e3ab3ae 42299 848800000001000000000000026e73076e656473746174026e6c0000010001 848880000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 42300 1f8f00000001000000000000036e733107737572666e6574026e6c0000010001 1f8f80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 42301 6229000000010000000000000673696d6f6e73026e6c0000010001 6229800000010000000200020673696d6f6e73026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 42302 8e4b0000000100000000000004616f6573026e6c0000010001 8e4b8000000100000002000204616f6573026e6c0000010001c00c0002000100015180000c036e73310563736e6574c011c00c00020001000151800006036e7332c029c02500010001000151800004c2451012c03d00010001000151800004c2451212 42303 8af700100001000000000001026e73066863636e6574026e6c00000100010000290800000080000000 8af780000001000000020001026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c0310000291000000000000000 42304 68ea0000000100000000000004646e7331036f3277026e6c0000010001 68ea8000000100000003000204646e7331036f3277026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c01100020001000151800010036e733103686574036e6574026a6500c00c00010001000151800004d5e38dd4c03700010001000151800004d5e38dcd 42305 52500000000100000000000004646e7332036f3277026e6c0000010001 52508000000100000003000204646e7332036f3277026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc01100020001000151800010036e733103686574036e6574026a6500c02900010001000151800004d5e38dd4c00c00010001000151800004d5e38dcd 42306 9d8f00000001000000000000037777770a746f6d6d79736a6f686e026e6c0000010001 9d8f80000001000000020001037777770a746f6d6d79736a6f686e026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c02f00010001000151800004d4ccc0fc 42307 a32600000001000000000000036e73320870726f7365727665026e6c0000010001 a32680000001000000030002036e73320870726f7365727665026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c010c02d000100010001518000045054e055c05d00010001000151800004d4ccc655 42308 a32700000001000000000000036e73310870726f7365727665026e6c0000010001 a32780000001000000030002036e73310870726f7365727665026e6c0000010001c01000020001000151800002c00cc01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c010c00c000100010001518000045054e055c05900010001000151800004d4ccc655 42309 46f000000001000000000000026168026e6c00000f0001 46f080000001000000020001026168026e6c00000f0001c00c0002000100015180000b026e730561686f6c64c00fc00c0002000100015180000d036e7332036b706e036e657400c023000100010001518000048d5d2302 42310 04a100000001000000000000037777770e6d6161737472696368742d776562026e6c0000010001 04a180000001000000020000037777770e6d6161737472696368742d776562026e6c0000010001c0100002000100015180000c026e7306766576696461c01fc01000020001000151800006036e7332c036 42311 024b000000010000000000000377777707686161726c656d026e6c0000010001 024b800000010000000200000377777707686161726c656d026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 42312 ed3f00000001000000000000046c6e6269026e6c0000020001 ed3f80000001000000020002046c6e6269026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 42313 a91f00000001000000000000037777770662726974616d026e6c0000010001 a91f80000001000000020001037777770662726974616d026e6c0000010001c0100002000100015180000a036e733303777873c017c01000020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 42314 f40c00000001000000000000056b656c6c79026e6c00000f0001 f40c80000001000000020002056b656c6c79026e6c00000f0001c00c0002000100015180001103646e730a636f6e63657074736661c012c00c00020001000151800013036e73320c636f6e63657074732d696374c012c02600010001000151800004d5c51c03c04300010001000151800004d5c51e4b 42315 bc4c00000001000000000000026e73086d61696e636f7265026e6c0000010001 bc4c80000001000000020002026e73086d61696e636f7265026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000906736572766572c00fc00c00010001000151800004d5bd130cc03a00010001000151800004d5bd130b 42316 6f7c00000001000000000000026e73086d61696e636f7265026e6c0000260001 6f7c80000001000000020002026e73086d61696e636f7265026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000906736572766572c00fc00c00010001000151800004d5bd130cc03a00010001000151800004d5bd130b 42317 1bfa0000000100000000000006736572766572086d61696e636f7265026e6c0000010001 1bfa8000000100000002000206736572766572086d61696e636f7265026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800002c00cc03000010001000151800004d5bd130cc00c00010001000151800004d5bd130b 42318 c6ba0000000100000000000006736572766572086d61696e636f7265026e6c0000260001 c6ba8000000100000002000206736572766572086d61696e636f7265026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800002c00cc03000010001000151800004d5bd130cc00c00010001000151800004d5bd130b 42319 6cd800000001000000000000067a7376737561026e6c0000010001 6cd884030001000000010000067a7376737561026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 42320 664e00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 664e80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42321 508900000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 508980000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42322 d3fd00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 d3fd80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42323 3bb800000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 3bb880000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42324 c4ec00000001000000000000037777770c666f746f2d7061766f6e6961026e6c0000010001 c4ec80000001000000030003037777770c666f746f2d7061766f6e6961026e6c0000010001c01000020001000151800014026e730e61726765776562686f7374696e67c01dc01000020001000151800006036e7330c034c01000020001000151800006036e7333c034c03100010001000151800004c3561682c05100010001000151800004c3561683c06300010001000151800004d5de0bfa 42325 b72c000000010000000000000377777710776f6e696e67636f72706f7261746965026e6c0000010001 b72c800000010000000200000377777710776f6e696e67636f72706f7261746965026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c039 42326 53b100000001000000000000037777770e666f726d756c65316e6965757773026e6c0000010001 53b180000001000000020000037777770e666f726d756c65316e6965757773026e6c0000010001c01000020001000151800011036e73310777697a7a6c657203636f6d00c01000020001000151800006036e7332c037 42327 36010000000100000000000005666f72756d0d6c696e75782d73637269707473026e6c0000010001 36018000000100000002000205666f72756d0d6c696e75782d73637269707473026e6c0000010001c0120002000100015180000c036e7331056765656b6fc020c01200020001000151800006036e7332c038c03400010001000151800004414b831ec04c00010001000151800004c35127f9 42328 222b0000000100000000000003677672026e6c00000f0001 222b8000000100000002000003677672026e6c00000f0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c028 42329 09d000000001000000000000037777770d6465206d757365756d67696473026e6c0000010001 09d084030001000000010000037777770d6465206d757365756d67696473026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 42330 d56a00000001000000000000037777770a7765737465727061726b026e6c0000010001 d56a80000001000000020002037777770a7765737465727061726b026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c01bc01000020001000151800006036e7332c032c02f00010001000151800004c3402003c04800010001000151800004c340202b 42331 ed2300000001000000000000057374632d72026e6c0000010001 ed2380000001000000020001057374632d72026e6c0000010001c00c0002000100015180000e036e7331077374632d6f6c63c012c00c0002000100015180000d036e7332036b706e036e657400c02600010001000151800004c1ad1c42 42332 afbb0000000100000000000006737165657a790564656d6f6e026e6c0000010001 afbb8000000100000003000206737165657a790564656d6f6e026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c0130002000100015180000f036e73320564656d6f6e036e657400c02d00010001000151800004c29f4906c03f00010001000151800004c29fb004 42333 657c00000001000000000000037777770d76646e74656c656d6174696361026e6c0000010001 657c80000001000000020000037777770d76646e74656c656d6174696361026e6c0000010001c01000020001000151800010036e733106626973636f6e036e657400c01000020001000151800006036e7332c036 42334 634c00100001000000000001026e73076e656473746174026e6c00000100010000290800000000000000 634c80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 42335 31a600100001000000000001036e7333076e656473746174026e6c00000100010000290800000000000000 31a680000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 42336 e06000000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 e06080000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42337 33d5000000010000000000000c73323030323038323030313203736e73026e6c0000010001 33d5800000010000000200000c73323030323038323030313203736e73026e6c0000010001c0190002000100015180000d036e7331036b706e036e657400c01900020001000151800006036e7332c035 42338 7f8400000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 7f8480000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42339 923f00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 923f80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42340 e2cb00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 e2cb80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 42341 674a0000000100000000000003777777086c616e67686f7574026e6c0000010001 674a8000000100000002000003777777086c616e67686f7574026e6c0000010001c01000020001000151800013036e733109752d73657276657273036e657400c01000020001000151800006036e7332c031 42342 f6d600000001000000000000037777770a696e746572616a616e73026e6c0000010001 f6d680000001000000020002037777770a696e746572616a616e73026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01bc01000020001000151800006036e7332c032c02f00010001000151800004d4cb0e42c04a00010001000151800004d4cb1221 42343 479900000001000000000000026e73076e656473746174026e6c00001c0001 479980000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 42344 6ece00000001000000000000026e73076e656473746174026e6c0000260001 6ece80000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 42345 4d7e00000001000000000000036e7332076e656473746174026e6c0000010001 4d7e80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42346 f45300000001000000000000036e7332076e656473746174026e6c00001c0001 f45380000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42347 ad0c00000001000000000000036e7332076e656473746174026e6c0000260001 ad0c80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42348 9acd00000001000000000000036e7333076e656473746174026e6c00001c0001 9acd80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 42349 1b6100000001000000000000036e7333076e656473746174026e6c0000260001 1b6180000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 42350 52f600000001000000000000036e7334076e656473746174026e6c0000010001 52f680000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42351 45ee00000001000000000000036e7334076e656473746174026e6c00001c0001 45ee80000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42352 36a000000001000000000000036e7334076e656473746174026e6c0000260001 36a080000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42353 879c00000001000000000000036e7332056132303030026e6c0000010001 879c80000001000000030002036e7332056132303030026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800002c00cc02a000100010001518000043e6c0141c00c000100010001518000043e6c0142 42354 ac8400000001000000000000036e7331056132303030026e6c0000010001 ac8480000001000000030002036e7331056132303030026e6c0000010001c01000020001000151800002c00cc01000020001000151800010036e733109756e69736f75726365c016c01000020001000151800006036e7332c010c00c000100010001518000043e6c0141c054000100010001518000043e6c0142 42355 94d200000001000000000000046d61696c07736361726c6574026e6c0000010001 94d280000001000000030003046d61696c07736361726c6574026e6c0000010001c01100020001000151800017036e733110736361726c65742d696e7465726e6574c019c01100020001000151800006036e7332c031c01100020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 42356 950100000001000000000000046d61696c07736361726c6574026e6c00001c0001 950180000001000000030003046d61696c07736361726c6574026e6c00001c0001c01100020001000151800017036e733110736361726c65742d696e7465726e6574c019c01100020001000151800006036e7332c031c01100020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 42357 737800000001000000000000046d61696c07736361726c6574026e6c0000260001 737880000001000000030003046d61696c07736361726c6574026e6c0000260001c01100020001000151800017036e733110736361726c65742d696e7465726e6574c019c01100020001000151800006036e7332c031c01100020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 42358 6a44000000010000000000000866616c6c6261636b10736361726c65742d696e7465726e6574026e6c0000010001 6a44800000010000000300030866616c6c6261636b10736361726c65742d696e7465726e6574026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c03a00010001000151800004d5ccc302c04c00010001000151800004d5ccc303c05e00010001000151800004c277e953 42359 0830000000010000000000000866616c6c6261636b10736361726c65742d696e7465726e6574026e6c00001c0001 0830800000010000000300030866616c6c6261636b10736361726c65742d696e7465726e6574026e6c00001c0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c03a00010001000151800004d5ccc302c04c00010001000151800004d5ccc303c05e00010001000151800004c277e953 42360 7d62000000010000000000000866616c6c6261636b10736361726c65742d696e7465726e6574026e6c0000260001 7d62800000010000000300030866616c6c6261636b10736361726c65742d696e7465726e6574026e6c0000260001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c03a00010001000151800004d5ccc302c04c00010001000151800004d5ccc303c05e00010001000151800004c277e953 42361 0c9f00000001000000000000036e733110736361726c65742d696e7465726e6574026e6c00001c0001 0c9f80000001000000030003036e733110736361726c65742d696e7465726e6574026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ccc302c04300010001000151800004d5ccc303c05500010001000151800004c277e953 42362 2c3a00000001000000000000036e733110736361726c65742d696e7465726e6574026e6c0000260001 2c3a80000001000000030003036e733110736361726c65742d696e7465726e6574026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d5ccc302c04300010001000151800004d5ccc303c05500010001000151800004c277e953 42363 65da00000001000000000000036e733210736361726c65742d696e7465726e6574026e6c00001c0001 65da80000001000000030003036e733210736361726c65742d696e7465726e6574026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03500010001000151800004d5ccc302c00c00010001000151800004d5ccc303c05500010001000151800004c277e953 42364 660100000001000000000000036e733210736361726c65742d696e7465726e6574026e6c0000260001 660180000001000000030003036e733210736361726c65742d696e7465726e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c03500010001000151800004d5ccc302c00c00010001000151800004d5ccc303c05500010001000151800004c277e953 42365 12fe00000001000000000000036e733310736361726c65742d696e7465726e6574026e6c00001c0001 12fe80000001000000030003036e733310736361726c65742d696e7465726e6574026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03500010001000151800004d5ccc302c04700010001000151800004d5ccc303c00c00010001000151800004c277e953 42366 e20800000001000000000000036e733310736361726c65742d696e7465726e6574026e6c0000260001 e20880000001000000030003036e733310736361726c65742d696e7465726e6574026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc03500010001000151800004d5ccc302c04700010001000151800004d5ccc303c00c00010001000151800004c277e953 42367 c69600000001000000000000046d61696c07736361726c6574026e6c0000010001 c69680000001000000030003046d61696c07736361726c6574026e6c0000010001c01100020001000151800017036e733110736361726c65742d696e7465726e6574c019c01100020001000151800006036e7332c031c01100020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 42368 f50800000001000000000000037777770d6976697665656e656e6461616c026e6c0000010001 f50880000001000000020002037777770d6976697665656e656e6461616c026e6c0000010001c01000020001000151800009036e7331026973c01ec01000020001000151800006036e7332c036c03200010001000151800004d5852102c04700010001000151800004d5c41503 42369 49e8000000010000000000000d6c6f63616c73686f7070696e67026e6c0000020001 49e8800000010000000200020d6c6f63616c73686f7070696e67026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 42370 66f700000001000000000000036e73320c636f6e63657074732d696374026e6c0000010001 66f780000001000000020002036e73320c636f6e63657074732d696374026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01dc01000020001000151800002c00cc03100010001000151800004d5c51c03c00c00010001000151800004d5c51e4b 42371 8c1d00000001000000000000026e73066863636e6574026e6c0000010001 8c1d80000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 42372 23400000000100000000000009652d6c756e61746963026e6c0000010001 23408000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42373 8945000000010000000000000976616e68656e74656e026e6c00000f0001 8945800000010000000200020976616e68656e74656e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 42374 622e000000010000000000000a6c65756b6573746172740e62616e6e657263656e7472616c65026e6c0000010001 622e800000010000000300030a6c65756b6573746172740e62616e6e657263656e7472616c65026e6c0000010001c0170002000100015180000c036e7331056d61786573c026c01700020001000151800006036e7332c03ec01700020001000151800006036e7333c03ec03a000100010001518000045045402ec052000100010001518000045045402fc064000100010001518000045045440a 42375 525f0000000100000000000003777777096d756c7469636f7079026e6c0000010001 525f8000000100000002000203777777096d756c7469636f7079026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec01ac01000020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 42376 4c6700000001000000000000036e7333076e656473746174026e6c0000010001 4c6780000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 42377 07fe00000001000000000000026e73076e656473746174026e6c0000010001 07fe80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 42378 15080000000100000000000006726f6d65696e026e6c00000f0001 15088000000100000002000206726f6d65696e026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 42379 65e20000000100000000000003777777057072696a7a026e6c0000010001 65e28000000100000002000203777777057072696a7a026e6c0000010001c0100002000100015180001104646e7331097669737365722d6974c016c0100002000100015180000704646e7332c02fc02a00010001000151800004515b0230c04700010001000151800004515b0231 42380 a92b00000001000000000000036e733109666972737466696e64026e6c0000010001 a92b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42381 a92c00000001000000000000036e733209666972737466696e64026e6c0000010001 a92c80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42382 39e8000000010000000000000b7363686569646567676572026e6c00000f0001 39e8800000010000000200010b7363686569646567676572026e6c00000f0001c00c000200010001518000130b737061726373657276657204706c6578c018c00c0002000100015180000b026e73026e6c036e657400c02c00010001000151800004c1439a0a 42383 a92e00000001000000000000036e733109666972737466696e64026e6c0000010001 a92e80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42384 a92f00000001000000000000036e733209666972737466696e64026e6c0000010001 a92f80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42385 5293000000010000000000000a73756276656e74696f6e026e6c00000f0001 5293800000010000000200020a73756276656e74696f6e026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc017c00c00020001000151800006036e7332c02fc02b00010001000151800004c3558244c04400010001000151800004c3558245 42386 7e7c00100001000000000001036e73310b6368616d69646d65646961026e6c00000100010000290800000080000000 7e7c80000001000000020003036e73310b6368616d69646d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c0453fc03e0001000100015180000452c045400000291000000000000000 42387 6b37000000010000000000000377777707686f746d61696c026e6c0000010001 6b37800000010000000200000377777707686f746d61696c026e6c0000010001c01000020001000151800011036e733107686f746d61696c03636f6d00c01000020001000151800006036e7333c030 42388 33360000000100000000000009652d6c756e61746963026e6c0000010001 33368000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42389 9fba00100001000000000001036e73320b6368616d69646d65646961026e6c00000100010000290800000080000000 9fba80000001000000020003036e73320b6368616d69646d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0300001000100015180000452c0453fc00c0001000100015180000452c045400000291000000000000000 42390 7842000000010000000000000777656576657273026e6c00001c0001 7842800000010000000200020777656576657273026e6c00001c0001c00c0002000100015180000f036e733108636f6d707574656cc014c00c00020001000151800006036e7332c02cc02800010001000151800004c3568680c04300010001000151800004c3568681 42391 de33000000010000000000000377777707747067706f7374026e6c0000010001 de33800000010000000200020377777707747067706f7374026e6c0000010001c0100002000100015180000e036e733207737570706f7274c018c01000020001000151800006036e7334c030c02c00010001000151800004c372e7c8c04600010001000151800004c372e6fe 42392 5de5000000010000000000000a6261726c6f776f726c64026e6c0000010001 5de5800000010000000200020a6261726c6f776f726c64026e6c0000010001c00c0002000100015180000d026e73077374616e6e6574c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d5852414c04400010001000151800004d5852418 42393 0e880000000100000000000010697777776379636c6f636f6e6e656374026e6c0000010001 0e888403000100000001000010697777776379636c6f636f6e6e656374026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 42394 626f000000010000000000000377777711766974746f726961636f736d6574696373026e6c0000010001 626f800000010000000200020377777711766974746f726961636f736d6574696373026e6c0000010001c01000020001000151800014036e73310d6a656e6a7075626c6963697479c022c01000020001000151800006036e7332c03ac036000100010001518000045054e4e7c056000100010001518000045054e4f1 42395 a0430000000100000000000006776468303131066e7434616c6c026e6c0000010001 a0438000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 42396 b7ba00000001000000000000037777770a72656372656174696566026e6c0000010001 b7ba80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 42397 c3ea0010000100000000000104646e73310471776562026e6c00000100010000291000000080000000 c3ea8000000100000002000304646e73310471776562026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c0000291000000000000000 42398 e1f50010000100000000000104646e73310471776562026e6c00001c00010000291000000080000000 e1f58000000100000002000304646e73310471776562026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c0000291000000000000000 42399 b3130010000100000000000104646e73320471776562026e6c00000100010000291000000080000000 b3138000000100000002000304646e73320471776562026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c0000291000000000000000 42400 09530010000100000000000104646e73320471776562026e6c00001c00010000291000000080000000 09538000000100000002000304646e73320471776562026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c0000291000000000000000 42401 8a290000000100000000000004667265650966756c6c616c62756d026e6c0000010001 8a298000000100000002000004667265650966756c6c616c62756d026e6c0000010001c01100020001000151800017036e73310d696e746572726567697374657203636f6d00c01100020001000151800010026e730a646f6d65696e686f7374c01b 42402 cfd80000000100000000000004667265650966756c6c616c62756d026e6c0000010001 cfd88000000100000002000004667265650966756c6c616c62756d026e6c0000010001c01100020001000151800017036e73310d696e746572726567697374657203636f6d00c01100020001000151800010026e730a646f6d65696e686f7374c01b 42403 71c600000001000000000000037777770f726f7474657264616d2d706c617a61026e6c0000010001 71c680000001000000020002037777770f726f7474657264616d2d706c617a61026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c020c01000020001000151800006036e7332c038c03400010001000151800004d4ccd865c04f000100010001518000045054ec34 42404 1149010000010000000000000231370332333403323332033230330964796e61626c6f636b07656173796e6574026e6c0000100001 1149810000010000000200020231370332333403323332033230330964796e61626c6f636b07656173796e6574026e6c0000100001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 42405 17e400000001000000000000036e7332076e656473746174026e6c0000010001 17e480000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42406 788e00000001000000000000036e7332076e656473746174026e6c00001c0001 788e80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42407 a97b00000001000000000000036e7334076e656473746174026e6c0000010001 a97b80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 42408 da8b00000001000000000000037777770d6576656e742d706c616e6e6572026e6c0000010001 da8b80000001000000020000037777770d6576656e742d706c616e6e6572026e6c0000010001c01000020001000151800018036e73310e73636865646f6d2d6575726f7065036e657400c01000020001000151800006036e7332c036 42409 0b72000000010000000000000b6d61696c72656c6179303704636d7367024e4c0000010001 0b72800000010000000200010b6d61696c72656c6179303704636d7367024e4c0000010001c01800020001000151800006036e7331c018c0180002000100015180000d036e7332036b706e036e657400c03100010001000151800004c2976c83 42410 4c9700000001000000000000065043303030380369626f026e6c0000010001 4c9780000001000000020000065043303030380369626f026e6c0000010001c0130002000100015180000b026e73026e6c036e657400c0130002000100015180001206617574683630026e73026e6c027575c031 42411 58910000000100000000000003706f7008652d64657369676e026e6c0000010001 58918000000100000003000303706f7008652d64657369676e026e6c0000010001c0100002000100015180000c036e7331053266617374c019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d0001000100015180000450f7c022c045000100010001518000043e858122c057000100010001518000045117eb22 42412 cab90000000100000000000007706561636f636b026e6c00000f0001 cab98000000100000003000307706561636f636b026e6c00000f0001c00c0002000100015180000c026e73067369676e6574c014c00c00020001000151800006036e7331c02bc00c00020001000151800006036e7332c02bc02800010001000151800004c3561242c04000010001000151800004d915f142c05200010001000151800004d915f141 42413 514000000001000000000000086168636272616e640564656d6f6e026e6c0000010001 514080000001000000030002086168636272616e640564656d6f6e026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 42414 79af00000001000000000000026e73087261626f62616e6b026e6c0000260001 79af80000001000000020001026e73087261626f62616e6b026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 42415 9eeb00000001000000000000037777771062726162616e74627265656462616e64026e6c0000010001 9eeb80000001000000020002037777771062726162616e74627265656462616e64026e6c0000010001c0100002000100015180000e077475656761746503747565c021c01000020001000151800006036e7332c03dc03500010001000151800004839b0203c04f00010001000151800004839b0303 42416 45cb00000001000000000000146e69657577736272696576656e73657276696365026e6c00000f0001 45cb80000001000000030001146e69657577736272696576656e73657276696365026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 42417 aa7e00000001000000000000026e73027675026e6c0000010001 aa7e80000001000000030003026e73027675026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000a0473746172026373c00fc00f0002000100015180000e036e733107737572666e6574c012c00c0001000100015180000482258104c03400010001000151800004c01fe72ac04a00010001000151800004c0576a65 42418 929f00000001000000000000036e7331056d61786573026e6c00001c0001 929f80000001000000030003036e7331056d61786573026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000045045402ec038000100010001518000045045402fc04a000100010001518000045045440a 42419 c98800000001000000000000036e7331056d61786573026e6c0000260001 c98880000001000000030003036e7331056d61786573026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000045045402ec038000100010001518000045045402fc04a000100010001518000045045440a 42420 4dba00000001000000000000036e7332056d61786573026e6c0000260001 4dba80000001000000030003036e7332056d61786573026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a000100010001518000045045402ec00c000100010001518000045045402fc04a000100010001518000045045440a 42421 f7f400000001000000000000036e7332056d61786573026e6c00001c0001 f7f480000001000000030003036e7332056d61786573026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a000100010001518000045045402ec00c000100010001518000045045402fc04a000100010001518000045045440a 42422 9ebe00000001000000000000036e7333056d61786573026e6c00001c0001 9ebe80000001000000030003036e7333056d61786573026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02a000100010001518000045045402ec03c000100010001518000045045402fc00c000100010001518000045045440a 42423 77ed00000001000000000000036e7333056d61786573026e6c0000260001 77ed80000001000000030003036e7333056d61786573026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02a000100010001518000045045402ec03c000100010001518000045045402fc00c000100010001518000045045440a 42424 ee22000000010000000000000b727575647a616e64657273026e6c00000f0001 ee22800000010000000200000b727575647a616e64657273026e6c00000f0001c00c0002000100015180000c026e73066863636e6574c018c00c00020001000151800006036e7332c02f 42425 62780000000100000000000003626c3102626c06787334616c6c026e6c0000010001 62788000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42426 ce0400000001000000000000037777770c617369616e2d636869636b73026e6c0000010001 ce0480000001000000020002037777770c617369616e2d636869636b73026e6c0000010001c0100002000100015180000e036e733107686f7477697265c01dc01000020001000151800006036e7332c035c0310001000100015180000451044b03c04b0001000100015180000451044bc8 42427 a83600000001000000000000037777770974656c656772616166026e6c0000010001 a83680000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 42428 8d2f000000010000000000000d6175746f74656c656772616166026e6c0000010001 8d2f800000010000000200000d6175746f74656c656772616166026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c032 42429 938f0000000100000000000003777777107472696b65736769657465727665656e026e6c0000010001 938f8000000100000002000003777777107472696b65736769657465727665656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03b 42430 0d940000000100000000000006636861726973026e6c00000f0001 0d948000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 42431 7f780000000100000000000003777777047365787a026e6c0000010001 7f788000000100000002000203777777047365787a026e6c0000010001c01000020001000151800012036e73310b737072696e67626f617264c015c01000020001000151800006036e7332c02dc02900010001000151800004d4f1210bc04700010001000151800004d4f1210c 42432 954d000000010000000000000631326d6f7665026e6c00000f0001 954d800000010000000300020631326d6f7665026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 42433 531e001000010000000000010377777706787334616c6c026e6c00000100010000290800000080000000 531e800000010000000300030377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d09630000291000000000000000 42434 fc0400100001000000000001057669706572086f6e7468616e6574026e6c00000100010000290800000080000000 fc0480000001000000020001057669706572086f6e7468616e6574026e6c0000010001c0120002000100015180000e036e73300470707365036e657400c01200020001000151800006036e7331c0330000291000000000000000 42435 67e000000001000000000000036e73310b6368616d69646d65646961026e6c0000010001 67e080000001000000020002036e73310b6368616d69646d65646961026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000452c0453fc03e0001000100015180000452c04540 42436 3734000000010000000000000561636b6572026e6c00001c0001 3734800000010000000200000561636b6572026e6c00001c0001c00c00020001000151800015026e730c776f726c64686f7374696e67036f726700c00c00020001000151800008026e73026175c029 42437 999700000001000000000000036e73320b6368616d69646d65646961026e6c0000010001 999780000001000000020002036e73320b6368616d69646d65646961026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0300001000100015180000452c0453fc00c0001000100015180000452c04540 42438 606328000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d73646373057368696e650473686276026e6c000021000100000258001d000000640185077368696e653031057368696e650473686276026e6c00 6063a8040000000000000000 42439 900100000001000000000000036e73330767617574656e67026e6c0000010001 900180000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 42440 d04500000001000000000000036e73340767617574656e67026e6c0000010001 d04580000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 42441 00000000700240006bdd0000020405b401010402 000080010000000000000000 42442 9d6800000001000000000000036e733109686f73746e65746276026e6c0000010001 9d6880000001000000020002036e733109686f73746e65746276026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451113264c03c00010001000151800004d5c42851 42443 33d500000001000000000000036e733209686f73746e65746276026e6c0000010001 33d580000001000000020002036e733209686f73746e65746276026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e0001000100015180000451113264c00c00010001000151800004d5c42851 42444 b84c97eb5010447043e90000000000000000 42445 439100000001000000000000057669706572086f6e7468616e6574026e6c0000010001 439180000001000000020000057669706572086f6e7468616e6574026e6c0000010001c0120002000100015180000e036e73300470707365036e657400c01200020001000151800006036e7331c033 42446 254f000000010000000000000444414952024e4c00000f0001 254f800000010000000200020444414952024e4c00000f0001c00c0002000100015180000c026e7306787334616c6cc011c00c00020001000151800006036e7332c028c02500010001000151800004c26d0642c03d00010001000151800004c26d0963 42447 b84c97eb50184470cee50000008b150c000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd28403c4ea800030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000 42448 dae600000001000000000000106b617070612d6f7564656e626f736368026e6c00001c0001 dae680000001000000020000106b617070612d6f7564656e626f736368026e6c00001c0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c034 42449 150d000000010000000000000773717561726531026e6c0000010001 150d800000010000000200010773717561726531026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c028000100010001518000043eb1b48a 42450 b84c97f950114462435b0000000000000000 42451 000000007002400088fe0000020405b401010402 000080010000000000000000 42452 d1650000000100000000000003626c3402626c06787334616c6c026e6c0000010001 d1658000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42453 383e000000010000000000000b776f6f6e636f6e63657074026e6c00000f0001 383e800000010000000200020b776f6f6e636f6e63657074026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc018c00c00020001000151800006036e7332c030c02c00010001000151800004c3558244c04500010001000151800004c3558245 42454 5a6c00000001000000000000037777770673656e736f72026e6c0000010001 5a6c80000001000000020002037777770673656e736f72026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 42455 b84c97fa50104462435a0000000000000000 42456 b84d1a6450104470de900000000000000000 b84d9a640000000000000000 42457 b84d1a645018447024660000008b5b34000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd28403c4ea800030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000 b84d9a640000000000000000 42458 f654000000010000000000000d6b6e756666656c766167696e61026e6c00000f0001 f654840300010000000100000d6b6e756666656c766167696e61026e6c00000f0001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 42459 fa7c000000010000000000000b6c6f636b6572776f726c64026e6c0000020001 fa7c800000010000000200020b6c6f636b6572776f726c64026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 42460 b3de00000001000000000000037777770f6e6f72656c68616c6c656e626f7577026e6c0000010001 b3de80000001000000020001037777770f6e6f72656c68616c6c656e626f7577026e6c0000010001c0100002000100015180000a036e733303777873c020c01000020001000151800006036e7334c038c04a00010001000151800004d5ef9a65 42461 fdad00000001000000000000037777771266726965736570657273626f656b6572696a026e6c0000010001 fdad80000001000000030003037777771266726965736570657273626f656b6572696a026e6c0000010001c0100002000100015180000e076e73617574683103626974c023c0100002000100015180000a076e736175746832c03fc0100002000100015180000a076e736175746833c03fc03700010001000151800004d5880c33c05100010001000151800004d5880c3bc06700010001000151800004d4ccc00b 42462 b84d1a7250114462de020000000000000000 b84d9a740000000000000000 42463 000000007002400086c40000020405b401010402 000080010000000000000000 42464 b84d1a7350104462de010000000000000000 b84d9a740000000000000000 42465 f62f00000001000000000000037777770e66756e6e79646f776e6c6f616473026e6c0000010001 f62f80000001000000020000037777770e66756e6e79646f776e6c6f616473026e6c0000010001c01000020001000151800019036e73310f6c696e6b67696473686f7374696e6703636f6d00c01000020001000151800006036e7332c037 42466 b84df49e50104470021c0000000000000000 42467 69eb000000010000000000001c6f7665726c696a64656e7372697369636f7665727a656b6572696e670e6765656e63656e7474657665656c026e6c0000010001 69eb800000010000000200001c6f7665726c696a64656e7372697369636f7665727a656b6572696e670e6765656e63656e7474657665656c026e6c0000010001c02900020001000151800017026e7309726f7474657264616d046c756e61036e657400c0290002000100015180000f026e7309686f6f6664646f7270c059 42468 b84df49e5018447001c90000008ba15c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd28403c4ea800030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000 42469 b84df4ac50114462018e0000000000000000 42470 fb990000000100000000000012746563686e6f6c6f6769652d62656c656964076d65702d746e6f026e6c0000010001 fb998403000100000001000012746563686e6f6c6f6769652d62656c656964076d65702d746e6f026e6c0000010001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 42471 b84df4ad50104462018d0000000000000000 42472 c49b0000000100000000000003777777096a707364657369676e026e6c0000010001 c49b8000000100000002000003777777096a707364657369676e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c034 42473 f1ef0000000100000000000003777777096f6d6e69776f726c64026e6c0000010001 f1ef8000000100000002000003777777096f6d6e69776f726c64026e6c0000010001c01000020001000151800013036e733109656e7465726e65787403636f6d00c01000020001000151800006036e7332c032 42474 0eb000000001000000000000036e733503777873026e6c0000010001 0eb080000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42475 6fcf0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 6fcf8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42476 65cb00000001000000000000036e733209666972737466696e64026e6c0000010001 65cb80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42477 65ca00000001000000000000036e733109666972737466696e64026e6c0000010001 65ca80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42478 6359000000010000000000000377777709737465696c6865636b026e6c0000010001 6359800000010000000200000377777709737465696c6865636b026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c044 42479 437400000001000000000000076c6f636f636f6d026e6c0000020001 437480000001000000020002076c6f636f636f6d026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 42480 2cfa00000001000000000000037777770674616d697961026e6c0000010001 2cfa80000001000000030001037777770674616d697961026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 42481 666000000001000000000000044e495645024e4c00000f0001 666080000001000000030003044e495645024e4c00000f0001c00c0002000100015180000b036e73310464696769c011c00c00020001000151800006036e7332c029c00c00020001000151800006036e7333c029c025000100010001518000043e5df006c03c000100010001518000043e5df0f6c04e00010001000151800004d42986e2 42482 810000000001000000000000057374632d72026e6c00000f0001 810080000001000000020001057374632d72026e6c00000f0001c00c0002000100015180000e036e7331077374632d6f6c63c012c00c0002000100015180000d036e7332036b706e036e657400c02600010001000151800004c1ad1c42 42483 257800000001000000000000046e65777306787334616c6c026e6c00000f0001 257880000001000000030002046e65777306787334616c6c026e6c00000f0001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 42484 4c1f00000001000000000000036e7332086e6f766178657373026e6c0000010001 4c1f80000001000000030003036e7332086e6f766178657373026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004d5c98015c00c00010001000151800004d5c9bf12c04d00010001000151800004d5ef9c26 42485 8f0d00000001000000000000036e733107737572666e6574026e6c0000010001 8f0d80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 42486 67260000000100000000000005646e732d31056c61646f74026e6c0000010001 67268000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42487 67270000000100000000000005646e732d32056c61646f74026e6c0000010001 67278000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42488 107e00000001000000000000037470670632686f743475026e6c0000010001 107e80000001000000020002037470670632686f743475026e6c0000010001c01000020001000151800009036e7331026d6ac017c01000020001000151800006036e7332c02fc02b00010001000151800004515b010ac04000010001000151800004515b000a 42489 96b4000000010000000000000470696574026e6c0000010001 96b4800000010000000200020470696574026e6c0000010001c00c00020001000151800012026e730c696e746572636f6e6e656374c011c00c00020001000151800006036e7332c028c02500010001000151800004d453c005c04300010001000151800004d453c006 42490 e1ad00000001000000000000037777770e6b656d70656e7265736561726368026e6c0000010001 e1ad80000001000000020001037777770e6b656d70656e7265736561726368026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c01fc04c00010001000151800004c2860043 42491 b8ba00000001000000000000036e73310564656d6f6e026e6c00001c0001 b8ba80000001000000030002036e73310564656d6f6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 42492 c80a00000001000000000000036e73320564656d6f6e026e6c00001c0001 c80a80000001000000030002036e73320564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 42493 ff6500000001000000000000036e73330564656d6f6e026e6c00001c0001 ff6580000001000000030002036e73330564656d6f6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c03c00010001000151800004c29fb004 42494 696d000000010000000000000864756976656e6262026e6c00000f0001 696d800000010000000200000864756976656e6262026e6c00000f0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c02d 42495 571a00000001000000000000057065747269097a757572707275696d026e6c0000010001 571a80000001000000020002057065747269097a757572707275696d026e6c0000010001c01200020001000151800011026e730b6973642d686f6c6c616e64c01cc01200020001000151800006036e7332c033c03000010001000151800004d5e38d0ac04d00010001000151800004d5e38205 42496 92de00000001000000000000036e733107737572666e6574026e6c0000010001 92de80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 42497 dbee000000010000000000000b7370616d6d65726475646503636f6d026e6c0000ff0001 dbee840300010000000100000b7370616d6d65726475646503636f6d026e6c0000ff0001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 42498 ada000000001000000000000037777770d766c6965676572776572656c64026e6c0000010001 ada080000001000000020000037777770d766c6965676572776572656c64026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c035 42499 c00100000001000000000000036e73320f646f6d61696e2d7265676973747279026e6c00001c0001 c00180000001000000030002036e73320f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42500 a5e600000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 a5e680000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 42501 324d00000001000000000000036e73350f646f6d61696e2d7265676973747279026e6c00001c0001 324d80000001000000030002036e73350f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42502 0c320000000100000000000003777777086d6f656b6f747465026e6c0000010001 0c328000000100000002000003777777086d6f656b6f747465026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c030 42503 00f7000000010000000000000765636f70686f6e026e6c0000ff0001 00f7800000010000000200000765636f70686f6e026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 42504 6f360000000100000000000003777777087365616372657374026e6c0000010001 6f368000000100000002000103777777087365616372657374026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c02d00010001000151800004d4ccc0fc 42505 1ec8000000010000000000000476696e6b026e6c00000f0001 1ec8800000010000000200020476696e6b026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 42506 885200000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c00001c0001 885280000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42507 95ff00000001000000000000036e73330f646f6d61696e2d7265676973747279026e6c0000260001 95ff80000001000000030002036e73330f646f6d61696e2d7265676973747279026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42508 03c100000001000000000000037777770e6172626569647372656368746572026e6c0000010001 03c180000001000000020000037777770e6172626569647372656368746572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 42509 06d30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 06d38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42510 79dc000000010000000000000e7072762d6f766572696a7373656c026e6c00000f0001 79dc800000010000000200000e7072762d6f766572696a7373656c026e6c00000f0001c00c00020001000151800012036e73310b776f726c646f6e6c696e65c01bc00c00020001000151800006036e7332c033 42511 256b0000000100000000000003777777086169726368697073026e6c0000010001 256b8000000100000002000203777777086169726368697073026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c019c01000020001000151800006036e7332c031c02d00010001000151800004d90867fec04c00010001000151800004c1ad2bfe 42512 c89c00000001000000000000054c796e783109496d74656368494354026e6c0000010001 c89c80000001000000020001054c796e783109496d74656368494354026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000d036e7334036b706e036e657400c03000010001000151800004c1accc82 42513 0b5b00000001000000000000026e730f6761726e69657270726f6a65637473026e6c0000010001 0b5b80000001000000020002026e730f6761726e69657270726f6a65637473026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00c000100010001518000045117e122c041000100010001518000045117e142 42514 a3f8000000010000000000000661616c74656e026e6c00000f0001 a3f8800000010000000200020661616c74656e026e6c00000f0001c00c0002000100015180000e026e73086d656761706c6578c013c00c00020001000151800006036e7331c02ac02700010001000151800004504f6101c04100010001000151800004504f6102 42515 e1a500000001000000000000056963757265026e6c00000f0001 e1a580000001000000030001056963757265026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 42516 09900000000100000000000003777873026e6c0000ff0001 09908000000100000003000303777873026e6c0000ff0001c00c00020001000151800007046e733038c00cc00c00020001000151800007046e733039c00cc00c00020001000151800006036e7334c00cc02400010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 42517 d3e700000001000000000000036e733503777873026e6c0000010001 d3e780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42518 685000000001000000000000046d61696c0a77656c6c616476697364026e6c0000010001 685080000001000000020000046d61696c0a77656c6c616476697364026e6c0000010001c0110002000100015180001105646e732d33056c61646f7403636f6d00c0110002000100015180000805646e732d34c036 42519 1fb300000001000000000000056e696d6167026e6c0000010001 1fb380000001000000020000056e696d6167026e6c0000010001c00c0002000100015180000e036e73310464646e68036e657400c00c00020001000151800006036e7332c02a 42520 1bcd000000010000000000000a636c617573706c65696e0764617461776562026e6c0000010001 1bcd800000010000000200000a636c617573706c65696e0764617461776562026e6c0000010001c0170002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0170002000100015180000805726f6b696ec03a 42521 1a0000000001000000000000037777770a7a6f656b706c61617473026e6c0000010001 1a0080000001000000030002037777770a7a6f656b706c61617473026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 42522 100100000001000000000000036e6370026e6c0000010001 100180000001000000020002036e6370026e6c0000010001c00c0002000100015180000c036e73310564656d6f6ec010c00c00020001000151800006036e7332c028c02400010001000151800004c29f4906c03c00010001000151800004c29fb004 42523 a2300000000100000000000010636f6d7061676e6965636974726f656e026e6c0000010001 a2308000000100000002000210636f6d7061676e6965636974726f656e026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c01dc00c00020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 42524 4c5c000000010000000000001274757373656e68656d656c656e6161726465026e6c0000010001 4c5c800000010000000200021274757373656e68656d656c656e6161726465026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01fc00c00020001000151800006036e7332c036c03300010001000151800004c26d0642c04b00010001000151800004c26d0963 42525 79c500000001000000000000086e617275746f37300c6e617275746f2d776f726c64026e6c0000010001 79c580000001000000020002086e617275746f37300c6e617275746f2d776f726c64026e6c0000010001c01500020001000151800010036e7331096e657467726f756e64c022c01500020001000151800006036e7332c03ac036000100010001518000045054e415c0520001000100015180000451046014 42526 db0d0000000100000000000003777777086c65747373746174026e6c0000010001 db0d8000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 42527 8d25000000010000000000000876656c646b616d70026e6c0000010001 8d25800000010000000300020876656c646b616d70026e6c0000010001c00c0002000100015180000d036e733106776964657873c015c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 42528 4a1a00000001000000000000036e73330767617574656e67026e6c0000010001 4a1a80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 42529 523e00000001000000000000036e73340767617574656e67026e6c0000010001 523e80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 42530 0e93000000010000000000000967656c6468616c656e026e6c00000f0001 0e93800000010000000200000967656c6468616c656e026e6c00000f0001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42531 ba720000000100000000000003777777067069726f6c61026e6c0000010001 ba728000000100000003000103777777067069726f6c61026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 42532 ea67000000010000000000000d6b77656b6572696a6161727473026e6c00000f0001 ea67800000010000000200020d6b77656b6572696a6161727473026e6c00000f0001c00c0002000100015180000e036e7331076f6d732d6e6574c01ac00c00020001000151800006036e7332c032c02e00010001000151800004d5efb22fc04800010001000151800004d5ef9d07 42533 16690000000100000000000004646e7331057368656c6c026e6c0000010001 16698000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 42534 811f000000010000000000000377777704676f6768026e6c0000010001 811f800000010000000200020377777704676f6768026e6c0000010001c0100002000100015180000e036e73310762617365776562c015c01000020001000151800006036e7332c02dc02900010001000151800004d535d035c04300010001000151800004d535d034 42535 0c6e000000010000000000000b686165676865686f727374026e6c0000ff0001 0c6e800000010000000200010b686165676865686f727374026e6c0000ff0001c00c0002000100015180000e036e733107626c7565646e73c018c00c00020001000151800006036e7334c030c02c00010001000151800004d5c401c0 42536 04a800100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 04a880000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 42537 1390000000010000000000000377777707636f6e74656e74026e6c0000010001 1390800000010000000200000377777707636f6e74656e74026e6c0000010001c01000020001000151800016046e7330310b63726579667367726f757003636f6d00c01000020001000151800007046e733032c031 42538 025400100001000000000001036e733107737572666e6574026e6c00002600010000290800000080000000 025480000001000000040004036e733107737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 42539 96300000000100000000000003777777087374617273686f70026e6c0000010001 96308000000100000002000203777777087374617273686f70026e6c0000010001c01000020001000151800009026e730369736dc019c01000020001000151800006036e7332c030c02d00010001000151800004d994ab02c04200010001000151800004d994ab03 42540 73780000000100000000000004686f6d650464656473026e6c0000010001 73788000000100000002000204686f6d650464656473026e6c0000010001c0110002000100015180000c026e73067874646e6574c016c01100020001000151800006036e7331c02dc02a00010001000151800004c16e9d02c04200010001000151800004d9cc165f 42541 a91b00000001000000000000037777770e6d656574746865636f6d70616e79026e6c0000010001 a91b80000001000000020002037777770e6d656574746865636f6d70616e79026e6c0000010001c0100002000100015180000a036e733103677673c01fc01000020001000151800006036e7332c037c033000100010001518000045054e1aac04900010001000151800004d4ccc646 42542 edbe000000010000000000000d706565746572736f6e6c696e65026e6c00000f0001 edbe840300010000000100000d706565746572736f6e6c696e65026e6c00000f0001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 42543 d58000000001000000000000036e73310a6f70656e646f6d65696e026e6c0000010001 d58080000001000000020002036e73310a6f70656e646f6d65696e026e6c0000010001c0100002000100015180000c026e73067874646e6574c01bc01000020001000151800006036e7331c032c02f00010001000151800004c16e9d02c04700010001000151800004d9cc165f 42544 7bdb0000000100000000000006787334616c6c026e6c00000f0001 7bdb8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 42545 789f00000001000000000000037777770962616b6b657665656e026e6c0000010001 789f80000001000000020002037777770962616b6b657665656e026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c01ac01000020001000151800006036e7332c032c02e0001000100015180000450416028c04900010001000151800004c356780c 42546 7ed3000000010000000000000d696d616765627573696e657373026e6c00000f0001 7ed3800000010000000200000d696d616765627573696e657373026e6c00000f0001c00c00020001000151800017026e7309726f7474657264616d046c756e61036e657400c00c0002000100015180000f026e7309686f6f6664646f7270c03b 42547 8f92000000010000000000000377777707696e7161616865026e6c0000010001 8f92800000010000000300010377777707696e7161616865026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 42548 1342000000010000000000000377777708737562757262616e026e6c0000010001 1342800000010000000200010377777708737562757262616e026e6c0000010001c0100002000100015180000a036e733303777873c019c01000020001000151800006036e7334c031c04300010001000151800004d5ef9a65 42549 20360000000100000000000010706c61737469636d616368696e657279026e6c0000ff0001 20368000000100000002000010706c61737469636d616368696e657279026e6c0000ff0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c034 42550 da4700000001000000000000036e73310d756e697465646d656d62657273026e6c00001c0001 da4780000001000000020002036e73310d756e697465646d656d62657273026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d47bfd15c04000010001000151800004d47bfd16 42551 4aa000000001000000000000036e73310d756e697465646d656d62657273026e6c0000260001 4aa080000001000000020002036e73310d756e697465646d656d62657273026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d47bfd15c04000010001000151800004d47bfd16 42552 01a700000001000000000000036e73320d756e697465646d656d62657273026e6c00001c0001 01a780000001000000020002036e73320d756e697465646d656d62657273026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d47bfd15c00c00010001000151800004d47bfd16 42553 27d600000001000000000000036e73320d756e697465646d656d62657273026e6c0000260001 27d680000001000000020002036e73320d756e697465646d656d62657273026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d47bfd15c00c00010001000151800004d47bfd16 42554 4f6200100001000000000001037777770770636d65646961026e6c00000100010000290800000000000000 4f6280000001000000020001037777770770636d65646961026e6c0000010001c0100002000100015180000f036e7331056b7761726b036e657400c01000020001000151800006036e7332c0300000291000000000000000 42555 157f0000000100000000000003777777087361616c6d696e6b026e6c0000010001 157f8000000100000003000003777777087361616c6d696e6b026e6c0000010001c0100002000100015180001a036e733110756e696c6f6769636e6574776f726b73036e657400c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031 42556 6d8e00000001000000000000106c6f636f6d6f74696f6e6f6e6c696e65026e6c0000020001 6d8e80000001000000020002106c6f636f6d6f74696f6e6f6e6c696e65026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01dc00c00020001000151800006036e7332c035c03100010001000151800004c29f4906c04900010001000151800004c29fb004 42557 a04400000001000000000000036e733107737572666e6574026e6c0000010001 a04480000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 42558 502200000001000000000000036e733107737572666e6574026e6c0000260001 502280000001000000040003036e733107737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 42559 5c080000000100000000000005656c696661026e6c00000f0001 5c088000000100000003000205656c696661026e6c00000f0001c00c0002000100015180000d036e733106776964657873c012c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02ac02600010001000151800004d4ccc0fcc05b000100010001518000043efa0703 42560 74d9000000010000000000000377777709746572726162797465026e6c0000010001 74d9800000010000000200020377777709746572726162797465026e6c0000010001c01000020001000151800010036e7331097465727261686f7374c01ac01000020001000151800006036e7332c032c02e0001000100015180000451044ecec04a000100010001518000044500d44a 42561 a73a00000001000000000000056a6e73756c026e6c00000f0001 a73a84030001000000010000056a6e73756c026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 42562 99f30000000100000000000003777777086173747261736174026e6c0000010001 99f38000000100000003000203777777086173747261736174026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 42563 6f97000000010000000000000a656e65726769656e6564026e6c0000ff0001 6f97800000010000000200000a656e65726769656e6564026e6c0000ff0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02f 42564 1b800000000100000000000009652d6c756e61746963026e6c0000010001 1b808000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 42565 cc9e00000001000000000000037777770a617564696f706c616365026e6c0000010001 cc9e80000001000000020000037777770a617564696f706c616365026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c032 42566 198300000001000000000000046d61696c0d6b6170697465696e736b6f6f72026e6c0000010001 198380000001000000020002046d61696c0d6b6170697465696e736b6f6f72026e6c0000010001c01100020001000151800015036e73310e692d6d61746368686f7374696e67c01fc01100020001000151800006036e7332c037c03300010001000151800004d4cb1d01c05400010001000151800004d4cb1d02 42567 00b428000001000200000000026e6c0000060001076a7570697465720b7a69636874696e7465726e026e6c00000500fe000000000000c014000100010000000000045a000092 00b4a8040000000000000000 42568 98dd00000001000000000000037777770770636d65646961026e6c0000010001 98dd80000001000000020000037777770770636d65646961026e6c0000010001c0100002000100015180000f036e7331056b7761726b036e657400c01000020001000151800006036e7332c030 42569 21bd00000001000000000000036e733103617a67026e6c0000010001 21bd80000001000000030003036e733103617a67026e6c0000010001c01000020001000151800002c00cc0100002000100015180000a036e733103727567c014c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004c057175cc03600010001000151800004817d0406c04c00010001000151800004c0576a65 42570 d41700000001000000000000036e733103617a67026e6c00001c0001 d41780000001000000030003036e733103617a67026e6c00001c0001c01000020001000151800002c00cc0100002000100015180000a036e733103727567c014c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004c057175cc03600010001000151800004817d0406c04c00010001000151800004c0576a65 42571 99ee0000000100000000000005646e732d32056c61646f74026e6c0000010001 99ee8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42572 96dc0000000100000000000005646e732d31056c61646f74026e6c0000010001 96dc8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42573 e3bd00000001000000000000076c6f6467696e67026e6c0000020001 e3bd80000001000000020002076c6f6467696e67026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 42574 000000007002faf0205200000204057a01010402 000080010000000000000000 42575 b8501b4d5010fbec78320000000000000000 b8509b440000000000000000 42576 b8501b4d5018fbec917400000089a7cd000000010001000000000e3932373731323933353935342d330000f900010e3932373731323933353935342d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd09403c4e8900030000002c4e544c4d535350000100000097b208e0050005002700000007000700200000004a5550495445525a494348540000 b8509b440000000000000000 42577 f98500000001000000000000026e730f444f4d41494e2d5245474953545259026e6c00001c0001 f98580000001000000030002026e730f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 42578 245a00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c00001c0001 245a80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42579 04f800000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 04f880000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42580 1487000000010000000000000a782d706572696d656e74046d796762026e6c0000010001 1487800000010000000300020a782d706572696d656e74046d796762026e6c0000010001c0170002000100015180000d036e733106776964657873c01cc01700020001000151800010036e733206776964657873036e657400c01700020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 42581 b8501b5b5011fbde77a60000000000000000 b8509b540000000000000000 42582 01110000000100000000000009776565726b616d6572026e6c0000010001 01118000000100000002000009776565726b616d6572026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02e 42583 000000007002faf0503500000204057a01010402 000080010000000000000000 42584 b8501b5c5010fbde77a50000000000000000 b8509b540000000000000000 42585 b850aee15010fbec14810000000000000000 42586 b850aee15018fbecf3a500000089e3ea000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd09403c4e8900030000002c4e544c4d535350000100000097b208e0050005002700000007000700200000004a5550495445525a494348540000 42587 f61c00000001000000000000076d726f757465720777697265687562026e6c0000010001 f61c80000001000000030000076d726f757465720777697265687562026e6c0000010001c01400020001000151800010026e730777697265687562036e657400c01400020001000151800006036e7332c033c01400020001000151800006036e7333c033 42588 c993000000010000000000000377777711686f6e64656e7363686f6f6c61626f766f026e6c0000010001 c993800000010000000300030377777711686f6e64656e7363686f6f6c61626f766f026e6c0000010001c0100002000100015180000e036e733107686f7374696e67c022c01000020001000151800006036e7332c03ac01000020001000151800006036e7333c03ac036000100010001518000043e818b01c050000100010001518000043e818b02c062000100010001518000043e818ae1 42589 b850aeef5011fbde13f50000000000000000 42590 6ee70000000100000000000014736c6176656e627572672d656e2d687579736572026e6c0000ff0001 6ee78000000100000002000214736c6176656e627572672d656e2d687579736572026e6c0000ff0001c00c00020001000151800013036e73310c636f6c742d74656c65636f6dc021c00c00020001000151800006036e7332c039c03500010001000151800004d44ea00dc05400010001000151800004d44ea00e 42591 000000007002faf05e3000000204057a01010402 000080010000000000000000 42592 b850aef05010fbde13f40000000000000000 42593 8e7400000001000000000000066c6f64696765026e6c0000020001 8e7480000001000000020002066c6f64696765026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 42594 b8519e465010fbec33160000000000000000 42595 b8519e465018fbec89db000000896c4a000000010001000000000e3932373731323933353935342d320000f900010e3932373731323933353935342d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd09403c4e8900030000002c4e544c4d535350000100000097b208e0050005002700000007000700200000004a5550495445525a494348540000 42596 7efa00000001000000000000037777770864616e61626f7577026e6c0000010001 7efa80000001000000020002037777770864616e61626f7577026e6c0000010001c01000020001000151800010036e733109657870726573776562c019c01000020001000151800006036e7332c031c02d000100010001518000045054ed19c049000100010001518000045054ed1a 42597 b8519e545011fbde328a0000000000000000 42598 2b0000000001000000000000037777770a676f7564656e67696473026e6c0000010001 2b0080000001000000020001037777770a676f7564656e67696473026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000d036e7332036b706e036e657400c02f00010001000151800004c1ac0e02 42599 3b0a00000001000000000000037777770a676f7564656e67696473026e6c0000010001 3b0a80000001000000020001037777770a676f7564656e67696473026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000d036e7332036b706e036e657400c02f00010001000151800004c1ac0e02 42600 c5130000000100000000000008666f72656c616e64026e6c00001c0001 c5138000000100000002000108666f72656c616e64026e6c00001c0001c00c0002000100015180000a036e733303777873c015c00c00020001000151800006036e7334c02dc03f00010001000151800004d5ef9a65 42601 b8519e555010fbde32890000000000000000 42602 12a000000001000000000000057065706f6204626d7367026e6c0000010001 12a080000001000000030002057065706f6204626d7367026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c0120002000100015180000d036e7332036b706e036e657400c02b00010001000151800004910747ecc03d00010001000151800004910749cd 42603 860200000001000000000000037777770a6c65756b6567616d6573026e6c0000010001 860280000001000000030003037777770a6c65756b6567616d6573026e6c0000010001c0100002000100015180000c036e7331056d61786573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f000100010001518000045045402ec047000100010001518000045045402fc059000100010001518000045045440a 42604 14980000000100000000000003777777076e6574706f6c6c026e6c0000010001 14988000000100000002000003777777076e6574706f6c6c026e6c0000010001c01000020001000151800016036e73310c6d6564696168696768776179036e657400c01000020001000151800006036e7332c030 42605 f37100000001000000000000036e73310a726564686f7374696e67026e6c0000010001 f37180000001000000020002036e73310a726564686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5efa404c03d00010001000151800004d5efa405 42606 94d100000001000000000000036e7331056d61786573026e6c0000010001 94d180000001000000030003036e7331056d61786573026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c000100010001518000045045402ec038000100010001518000045045402fc04a000100010001518000045045440a 42607 94d200000001000000000000036e7332056d61786573026e6c0000010001 94d280000001000000030003036e7332056d61786573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02a000100010001518000045045402ec00c000100010001518000045045402fc04a000100010001518000045045440a 42608 94d300000001000000000000036e7333056d61786573026e6c0000010001 94d380000001000000030003036e7333056d61786573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02a000100010001518000045045402ec03c000100010001518000045045402fc00c000100010001518000045045440a 42609 810f0000000100000000000005646e732d32056c61646f74026e6c0000010001 810f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42610 ec6d00000001000000000000056c6f65636b026e6c0000020001 ec6d80000001000000020002056c6f65636b026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 42611 17a20000000100000000000007666f786b696473026e6c00001c0001 17a28000000100000003000007666f786b696473026e6c00001c0001c00c00020001000151800011036e73310777652d64617265036e657400c00c00020001000151800006036e7332c02cc00c00020001000151800006036e7333c02c 42612 688200000001000000000000036e733206726564636170026e6c0000010001 688280000001000000020002036e733206726564636170026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02b00010001000151800004d4ccf5abc00c00010001000151800004507e7640 42613 3dc7000000010000000000000776697a7a617669026e6c00001c0001 3dc7800000010000000300010776697a7a617669026e6c00001c0001c00c00020001000151800005026e73c00cc00c0002000100015180001d046e73303708637573746f6d6572026575066c6576656c33036e657400c00c00020001000151800007046e733038c03ec028000100010001518000043e48df58 42614 afb800000001000000000000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d736463730d73616c2d61706f7468656b656e026e6c0000210001 afb884030001000000010000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d736463730d73616c2d61706f7468656b656e026e6c0000210001c04c00060001000038400036026e730f646f6d61696e2d7265676973747279c04c0a686f73746d6173746572c0630bf1e540000070800000384000278d0000003840 42615 92390000000100000000000005646e732d31056c61646f74026e6c0000010001 92398000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42616 a98f0000000100000000000005646e732d32056c61646f74026e6c0000010001 a98f8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42617 1eeb000000010000000000000a6e6f6f72647a6565666d0b776561746865726e657773026e6c0000010001 1eeb800000010000000200020a6e6f6f72647a6565666d0b776561746865726e657773026e6c0000010001c01700020001000151800009026e73036f6b65c023c01700020001000151800006036e7332c03ac03700010001000151800004c13acc3bc04c00010001000151800004c13acc27 42618 eb8100000001000000000000055f6c646170045f746370026463065f6d736463730d73616c2d61706f7468656b656e026e6c0000210001 eb8184030001000000010000055f6c646170045f746370026463065f6d736463730d73616c2d61706f7468656b656e026e6c0000210001c02f00060001000038400036026e730f646f6d61696e2d7265676973747279c02f0a686f73746d6173746572c0460bf1e540000070800000384000278d0000003840 42619 977b001000010000000000010777616e61646f6f026e6c00000f00010000290800000080000000 977b800000010000000200020777616e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c28600430000291000000000000000 42620 4b1400000001000000000000037777770778706c697a6974026e6c0000010001 4b1480000001000000020002037777770778706c697a6974026e6c0000010001c0100002000100015180000e036e73310774696b6b6c696bc018c01000020001000151800006036e7332c030c02c00010001000151800004d5c40902c046000100010001518000043eddd512 42621 ee8e0000000100000000000008686f73746e616d650462696e640000100003 ee8e8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 42622 650f0000000100000000000008706f73746475696607736e7362616e6b026e6c0000010001 650f8000000100000002000008706f73746475696607736e7362616e6b026e6c0000010001c0150002000100015180000d036e7331036b706e036e657400c01500020001000151800006036e7332c035 42623 a3bc000000010000000000000663616e646561026e6c0000010001 a3bc800000010000000300030663616e646561026e6c0000010001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 42624 cf4e00000001000000000000055f6c646170045f7463702438653862356437612d393864622d343931302d626465392d32353338396132323931636107646f6d61696e73065f6d736463730d73616c2d61706f7468656b656e026e6c0000210001 cf4e84030001000000010000055f6c646170045f7463702438653862356437612d393864622d343931302d626465392d32353338396132323931636107646f6d61696e73065f6d736463730d73616c2d61706f7468656b656e026e6c0000210001c05900060001000038400036026e730f646f6d61696e2d7265676973747279c0590a686f73746d6173746572c0700bf1e540000070800000384000278d0000003840 42625 4ef4000000010000000000000a656d6561736d7470303103616f6e026e6c0000010001 4ef4800000010000000200010a656d6561736d7470303103616f6e026e6c0000010001c01700020001000151800005026e73c017c0170002000100015180000b026e73026e6c036e657400c02f00010001000151800004c1acf879 42626 5df100000001000000000000046d61696c03736f64026e6c0000010001 5df180000001000000020002046d61696c03736f64026e6c0000010001c0110002000100015180000e036e7331076970746f776572c015c01100020001000151800006036e7332c02dc029000100010001518000043ecc4065c043000100010001518000043ecc4066 42627 426400000001000000000000036b616b026e6c0000ff0001 426480000001000000020000036b616b026e6c0000ff0001c00c00020001000151800013026e730a6e61616d736572766572036e657400c00c00020001000151800006036e7331c027 42628 875b00000001000000000000037777770d7475726b7375697467616e6773026e6c0000010001 875b84030001000000010000037777770d7475726b7375697467616e6773026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 42629 af53000000010000000000000777616e61646f6f026e6c00000f0001 af53800000010000000200010777616e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 42630 099e0000000100000000000004686f6d650777616e61646f6f026e6c0000010001 099e8000000100000002000104686f6d650777616e61646f6f026e6c0000010001c0110002000100015180000d026e73046575726f036e657400c0110002000100015180000d026e73076575726f6e6574c019c04600010001000151800004c2860043 42631 660300000001000000000000036e733109666972737466696e64026e6c0000010001 660380000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42632 660400000001000000000000036e733209666972737466696e64026e6c0000010001 660480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 42633 ff0600000001000000000000037777770773756273697465026e6c0000010001 ff0680000001000000020002037777770773756273697465026e6c0000010001c01000020001000151800009036e7331026973c018c01000020001000151800006036e7332c030c02c00010001000151800004d5852102c04100010001000151800004d5c41503 42634 0a400000000100000000000003777777077a6f656b6d7033026e6c0000010001 0a408000000100000002000203777777077a6f656b6d7033026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa404c04900010001000151800004d5efa405 42635 8f57000000010000000000000877616e6e61646f6f026e6c00000f0001 8f57800000010000000200010877616e6e61646f6f026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c015c04200010001000151800004c2860043 42636 f97300000001000000000000086469616c2d31353608656e657267697331036d6c6404646e6574026e6c0000010001 f97380000001000000020002086469616c2d31353608656e657267697331036d6c6404646e6574026e6c0000010001c0220002000100015180000d036e7331066d696e646566c027c02200020001000151800006036e7332c03fc03b00010001000151800004d9a9e7c6c05400010001000151800004d9a9e7c5 42637 c7ef00000001000000000000036e7332036e7873026e6c0000010001 c7ef80000001000000020002036e7332036e7873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d973c015c00c00010001000151800004d973c102 42638 882e00000001000000000000036e7331036e7873026e6c0000010001 882e80000001000000020002036e7331036e7873026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c015c03600010001000151800004d973c102 42639 ff28000000010000000000000377777707636176656c6c6f026e6c0000010001 ff28800000010000000300020377777707636176656c6c6f026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 42640 fa3a0000000100000000000007646f6c66696a6e026e6c00000f0001 fa3a8000000100000003000307646f6c66696a6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 42641 05940000000100000000000003777777096865746f6f7374656e026e6c0000010001 05948000000100000002000003777777096865746f6f7374656e026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c034 42642 faa70000000100000000000003736e73026e6c0000ff0001 faa78000000100000002000003736e73026e6c0000ff0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c028 42643 a42a0000000100000000000008636463656e746572026e6c00000f0001 a42a8000000100000002000208636463656e746572026e6c00000f0001c00c00020001000151800014036e73310d6162696e666f686f7374696e67c015c00c00020001000151800006036e7332c02dc029000100010001518000045054f439c049000100010001518000045054f43a 42644 b99400000001000000000000036d783103626974026e6c0000010001 b99480000001000000030003036d783103626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 42645 8b490000000100000000000103777777076364636f766572026e6c00000100010000291000000000000000 8b498000000100000003000303777777076364636f766572026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa07030000291000000000000000 42646 f31c0000000100000000000103777777076364636f766572026e6c00000100010000291000000000000000 f31c8000000100000003000303777777076364636f766572026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa07030000291000000000000000 42647 6c390000000100000000000005696b616e61026e6c00000f0001 6c398000000100000003000005696b616e61026e6c00000f0001c00c00020001000151800011036e733107616e7977697365036e657400c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02a 42648 aa6100000001000000000000037777770d636f6c756d6275732d696e666f026e6c0000010001 aa6180000001000000020002037777770d636f6c756d6275732d696e666f026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01ec01000020001000151800006036e7332c035c03200010001000151800004c26d0642c04a00010001000151800004c26d0963 42649 534400000001000000000000037777770d626f7577766164656d6563756d026e6c0000010001 534480000001000000030002037777770d626f7577766164656d6563756d026e6c0000010001c0100002000100015180000f036e73310870726f7365727665c01ec01000020001000151800012036e73320970726f2d736572766502626500c01000020001000151800006036e7333c036c032000100010001518000045054e055c06b00010001000151800004d4ccc655 42650 c86300000001000000000000146964702d6f6e7a696e67616c6c6572792d696e74027830026e6c0000010001 c86380000001000000020002146964702d6f6e7a696e67616c6c6572792d696e74027830026e6c0000010001c0210002000100015180000d026e730776697065726276c024c02100020001000151800006036e7332c03bc03800010001000151800004d5881a07c05100010001000151800004d5881a05 42651 0a720000000100000000000003777777116b756e737473746f66636f6174696e6773026e6c0000010001 0a728000000100000003000303777777116b756e737473746f66636f6174696e6773026e6c0000010001c0100002000100015180000c036e7331053266617374c022c01000020001000151800006036e7332c03ac01000020001000151800006036e7333c03ac0360001000100015180000450f7c022c04e000100010001518000043e858122c060000100010001518000045117eb22 42652 8b490000000100000000000003777777076364636f766572026e6c0000010001 8b498000000100000003000203777777076364636f766572026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 42653 24b7000000010000000000000577686f69730f646f6d61696e2d7265676973747279026e6c0000010001 24b7800000010000000300020577686f69730f646f6d61696e2d7265676973747279026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000e036e733107737572666e6574c022c0120002000100015180000b026e73026e6c036e657400c03600010001000151800004c1b09002c04700010001000151800004c0576a65 42654 f31c0000000100000000000003777777076364636f766572026e6c0000010001 f31c8000000100000003000203777777076364636f766572026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 42655 9ac3000000010000000000000776616e646f6f6c026e6c0000010001 9ac3800000010000000200000776616e646f6f6c026e6c0000010001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02e 42656 518c00000001000000000000037777770964616e736f6d6d6572026e6c0000010001 518c80000001000000020000037777770964616e736f6d6d6572026e6c0000010001c010000200010001518000130761757468323030026e73027575036e657400c0100002000100015180000a0761757468323130c036 42657 741900000001000000000000037777770a63642d686f65736a6573026e6c0000010001 741980000001000000030002037777770a63642d686f65736a6573026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 42658 3108000000010000000000000b747261646563656e746572047a75747a026e6c0000010001 3108800000010000000200020b747261646563656e746572047a75747a026e6c0000010001c01800020001000151800012036e73310b706c7573686f7374696e67c01dc01800020001000151800006036e7332c035c03100010001000151800004d994ae77c04f000100010001518000045054ea06 42659 87fb00000001000000000000046a6e666e026e6c00000f0001 87fb80000001000000020002046a6e666e026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c011c00c00020001000151800006036e7332c028c02500010001000151800004d4cb0e42c04000010001000151800004d4cb1221 42660 036000000001000000000000076b61617274656e046c696e71026e6c0000010001 036080000001000000020002076b61617274656e046c696e71026e6c0000010001c01400020001000151800012036e73310b737461727464657369676ec019c01400020001000151800006036e7332c031c02d00010001000151800004d5f73823c04b000100010001518000043ed45149 42661 d5e9000000010000000000000c66726565726f617374696e67026e6c00000f0001 d5e9800000010000000200000c66726565726f617374696e67026e6c00000f0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c031 42662 864d0000000100000000000017706c6578757361726265696473696e7465677261746965026e6c00000f0001 864d8000000100000002000117706c6578757361726265696473696e7465677261746965026e6c00000f0001c00c00020001000151800010036e7331067573656c616203636f6d00c00c0002000100015180000d036e7332067573656c6162c024c054000100010001518000043e3aa284 42663 204000000001000000000000037777770e6b756e737467656f677261666965026e6c0000010001 204080000001000000020000037777770e6b756e737467656f677261666965026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c049 42664 39ce00000001000000000000166c6f656b686f656b2d7475696e6f6e7477657270656e026e6c0000020001 39ce80000001000000020002166c6f656b686f656b2d7475696e6f6e7477657270656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec023c00c00020001000151800006036e7332c03bc03700010001000151800004c29f4906c04f00010001000151800004c29fb004 42665 8ad00000000100000000000003777777036f6572026e6c0000010001 8ad08000000100000002000203777777036f6572026e6c0000010001c0100002000100015180000b026e7305706c616e74c014c01000020001000151800006036e7332c02bc02800010001000151800004d59f0037c03f00010001000151800004d59f0046 42666 143b00000001000000000000026e73027675026e6c00001c0001 143b80000001000000030003026e73027675026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000a0473746172026373c00fc00f0002000100015180000e036e733107737572666e6574c012c00c0001000100015180000482258104c03400010001000151800004c01fe72ac04a00010001000151800004c0576a65 42667 9fcf0000000100000000000009626f65726861617665036d6564027675026e6c00001c0001 9fcf8000000100000003000309626f65726861617665036d6564027675026e6c00001c0001c01a00020001000151800005026e73c01ac01a0002000100015180000a0473746172026373c01ac01a0002000100015180000e036e733107737572666e6574c01dc0310001000100015180000482258104c04200010001000151800004c01fe72ac05800010001000151800004c0576a65 42668 69d900000001000000000001026e73076575726f6e6574026e6c00000100010000291000000000000000 69d980000001000000020002026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c28600430000291000000000000000 42669 9bed0000000100000000000003777777026e75026e6c0000010001 9bed8000000100000003000303777777026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c027000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 42670 69d900000001000000000000026e73076575726f6e6574026e6c0000010001 69d980000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 42671 529300000001000000000000026e73076575726f6e6574026e6c0000010001 529380000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 42672 069900000001000000000000037777770770696f6e656572026e6c0000010001 069980000001000000020000037777770770696f6e656572026e6c0000010001c0100002000100015180000f026e73096379626572636f6d6dc018c01000020001000151800006036e7332c02f 42673 53330000000100000000000003777777047a6f726b026e6c0000010001 53338000000100000003000103777777047a6f726b026e6c0000010001c0100002000100015180000b026e730563616c7978c015c01000020001000151800006036e7332c02cc0100002000100015180000c096d617273657065696ec02cc02900010001000151800004d582a20c 42674 54c600000001000000000000037777770d6865656d736b65726b2d776562026e6c0000010001 54c680000001000000020000037777770d6865656d736b65726b2d776562026e6c0000010001c0100002000100015180000c026e7306766576696461c01ec01000020001000151800006036e7332c035 42675 36a400000001000000000000026e73096379626572636f6d6d026e6c0000010001 36a480000001000000030003026e73096379626572636f6d6d026e6c0000010001c00f00020001000151800017036e733110736361726c65742d696e7465726e6574c019c00f00020001000151800006036e7332c031c00f00020001000151800006036e7333c031c02d00010001000151800004d5ccc302c05000010001000151800004d5ccc303c06200010001000151800004c277e953 42676 da4d00000001000000000000036e733103617474026e6c0000010001 da4d80000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 42677 efe000000001000000000000036e733103617474026e6c0000260001 efe080000001000000020002036e733103617474026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 42678 852500000001000000000000026e6c0000060001 852584000001000100080001026e6c0000060001c00c00060001000151800036026e730f646f6d61696e2d7265676973747279c00c0a686f73746d6173746572c0230bf1e540000070800000384000278d0000003840c00c00020001000151800002c020c00c0002000100015180000d026e730472697065036e657400c00c0002000100015180000f06617574683032026e73027575c078c00c00020001000151800006036e7332c023c00c000200010001518000100573756e69630573756e657402736500c00c0002000100015180001305736c61766503737468066e65746e6f64c0c2c00c0002000100015180000c036e7332036e696302667200c00c00020001000151800006036e7335c023c02000010001000151800004c1b09002 42679 39ad00000001000000000000036e7332056269746963026e6c0000010001 39ad80000001000000020001036e7332056269746963026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000b026e73026e6c036e657400c02a00010001000151800004c36cdfc8 42680 746c00000001000000000000086c6f656b686f656b026e6c0000020001 746c80000001000000020002086c6f656b686f656b026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 42681 3b8000000001000000000000036e733203617474026e6c0000010001 3b8080000001000000020002036e733203617474026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 42682 9dc000000001000000000000036e733203617474026e6c0000260001 9dc080000001000000020002036e733203617474026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 42683 e0d20000000100000000000006706570696a6e026e6c0000010001 e0d28000000100000002000206706570696a6e026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 42684 c1990000000100000000000003777777046c657861026e6c0000010001 c1998000000100000003000203777777046c657861026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 42685 3c76000000010000000000000f70762d64652d616c6c69616e746965026e6c0000010001 3c76800000010000000200020f70762d64652d616c6c69616e746965026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01cc00c00020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 42686 830c00000001000000000000036e7332057377646e73026e6c0000010001 830c80000001000000020002036e7332057377646e73026e6c0000010001c0100002000100015180000a036e733103686978c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5a0da0ac0400001000100015180000451112ec3 42687 4f5500000001000000000000026e73057377646e73026e6c0000010001 4f5580000001000000020002026e73057377646e73026e6c0000010001c00f0002000100015180000a036e733103686978c015c00f00020001000151800006036e7332c02dc02900010001000151800004d5a0da0ac03f0001000100015180000451112ec3 42688 0ef728000001000200000000026e6c00000600010767656c6465723208696e7465726e6574026e6c00000500fe000000000000c01400010001000000000004c0a80002 0ef7a8040000000000000000 42689 644b28000001000200000000026e6c00000600010d7365727665722d636f6d706171086b6565726b616465026e6c00000500fe000000000000c014000100010000000000040a000015 644ba8040000000000000000 42690 14b000000001000000000000067372763031320b66726565686f7374696e67026e6c00000f0001 14b080000001000000020000067372763031320b66726565686f7374696e67026e6c00000f0001c0130002000100015180001105646e732d33056c61646f7403636f6d00c0130002000100015180000805646e732d34c039 42691 fe920000000100000000000005616374696d026e6c00000f0001 fe928000000100000002000005616374696d026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 42692 33610000000100000000000003777777066370732d6974026e6c0000010001 33618000000100000002000003777777066370732d6974026e6c0000010001c0100002000100015180000c026e7306766576696461c017c01000020001000151800006036e7332c02e 42693 25dc00000001000000000000086261726d61746f6e026e6c00000f0001 25dc80000001000000020002086261726d61746f6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 42694 0000000070024000fee80000020405b401010402 000080010000000000000000 42695 000000007002faf0e84d00000204059801010402 000080010000000000000000 42696 3c7900000001000000000000037777770777696c64686572026e6c0000010001 3c7980000001000000020002037777770777696c64686572026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02c000100010001518000043ed44661c03d000100010001518000043ed44660 42697 88c5000000010000000000000377777710676161737465726c616e2d736c656174026e6c0000010001 88c5800000010000000200020377777710676161737465726c616e2d736c656174026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c021c01000020001000151800006036e7332c039c03500010001000151800004d43d0f08c05300010001000151800004d43d19e2 42698 b8557ee25010fbb8dce50000000000000000 b855fee40000000000000000 42699 a367000000010000000000000377777708737964657369676e026e6c0000010001 a367800000010000000200000377777708737964657369676e026e6c0000010001c01000020001000151800010036e7331066969686f73740362697a00c01000020001000151800006036e7332c031 42700 b854aa3250104470c4a50000000000000000 42701 b854aa32501844703b560000008e31a0000000010001000000000f313238383439303138383831382d330000f900010f313238383439303138383831382d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403afce5403c4e6500030000002f4e544c4d535350000100000097b200e00800080027000000070007002000000047454c44455232494e5445524e45540000 42702 b8557ee25018fbb819b500000094158a000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403af92f403c4aaf0003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000 b855fee40000000000000000 42703 fc67000000010000000000000a74796265782d646f636f026e6c00000f0001 fc67800000010000000200020a74796265782d646f636f026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 42704 6ffc0000000100000000000004686f6d650464656473026e6c0000010001 6ffc8000000100000002000204686f6d650464656473026e6c0000010001c0110002000100015180000c026e73067874646e6574c016c01100020001000151800006036e7331c02dc02a00010001000151800004c16e9d02c04200010001000151800004d9cc165f 42705 b8557ef05011fbaadc4e0000000000000000 b855fef40000000000000000 42706 d31800000001000000000000077575746772756e026e6c00000f0001 d31880000001000000020001077575746772756e026e6c00000f0001c00c0002000100015180000e036e733107626c7565646e73c014c00c00020001000151800006036e7334c02cc02800010001000151800004d5c401c0 42707 339100000001000000000000036e73330874656c6562797465026e6c0000010001 339180000001000000020002036e73330874656c6562797465026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c00010001000151800004d5d38115c03b00010001000151800004d5d38116 42708 216800000001000000000000036e73330874656c6562797465026e6c0000260001 216880000001000000020002036e73330874656c6562797465026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c00010001000151800004d5d38115c03b00010001000151800004d5d38116 42709 881700000001000000000000036e73340874656c6562797465026e6c0000010001 881780000001000000020002036e73340874656c6562797465026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800002c00cc02d00010001000151800004d5d38115c00c00010001000151800004d5d38116 42710 0fa500000001000000000000036e73340874656c6562797465026e6c0000260001 0fa580000001000000020002036e73340874656c6562797465026e6c0000260001c01000020001000151800006036e7333c010c01000020001000151800002c00cc02d00010001000151800004d5d38115c00c00010001000151800004d5d38116 42711 b854aa4050114462c4140000000000000000 42712 0000000070024000f6150000020405b401010402 000080010000000000000000 42713 b8557ef15010fbaadc4d0000000000000000 b855fef40000000000000000 42714 000000007002faf0a5b400000204059801010402 000080010000000000000000 42715 b856f8ee5010fbb8203f0000000000000000 42716 b854aa4150104462c4130000000000000000 42717 94b40000000100000000000006636f6f6b696504696c7365026e6c0000010001 94b48000000100000003000306636f6f6b696504696c7365026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 42718 b85652805010447013830000000000000000 b856d2840000000000000000 42719 b856f8ee5018fbb8972200000094dc76000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af92f403c4aaf0003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000 42720 b8565280501844705c5c0000008e6078000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afce5403c4e6500030000002f4e544c4d535350000100000097b200e00800080027000000070007002000000047454c44455232494e5445524e45540000 b856d2840000000000000000 42721 e4e20000000100000000000002616404696c7365026e6c0000010001 e4e28000000100000003000302616404696c7365026e6c0000010001c00f00020001000151800006036e7331c00fc00f00020001000151800006036e7332c00fc00f00020001000151800006036e7333c00fc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 42722 ce9400000001000000000000026168026e6c00000f0001 ce9480000001000000020001026168026e6c00000f0001c00c0002000100015180000b026e730561686f6c64c00fc00c0002000100015180000d036e7332036b706e036e657400c023000100010001518000048d5d2302 42723 951f0000000100000000000003777777087063616374697665026e6c0000010001 951f8000000100000002000003777777087063616374697665026e6c0000010001c0100002000100015180000a026e7304616b7475c019c0100002000100015180000b026e73026e6c036e657400 42724 b856f8fc5011fbaa1fa80000000000000000 42725 e14600000001000000000000037777771062616e6e65726d616e6167656d656e74026e6c0000010001 e14680000001000000030003037777771062616e6e65726d616e6167656d656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c035000100010001518000043e45a282c047000100010001518000043e45a283c059000100010001518000043e45a284 42726 113800000001000000000000037777770b68696b696e672d73697465026e6c0000010001 113880000001000000020002037777770b68696b696e672d73697465026e6c0000010001c0100002000100015180000a036e7331036e7873c01cc01000020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 42727 b856528e5011446212f20000000000000000 b856d2840000000000000000 42728 b856f8fd5010fbaa1fa70000000000000000 42729 0000000070024000d2440000020405b401010402 000080010000000000000000 42730 296200000001000000000000036e733206736f6c636f6e026e6c0000010001 296280000001000000030003036e733206736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d42d2005c04200010001000151800004d42d2003c00c00010001000151800004d42d2103 42731 5c600000000100000000000008736f6c7574696f6e06736f6c636f6e026e6c0000010001 5c608000000100000003000308736f6c7574696f6e06736f6c636f6e026e6c0000010001c01500020001000151800002c00cc01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c00c00010001000151800004d42d2005c03e00010001000151800004d42d2003c05000010001000151800004d42d2103 42732 55f700000001000000000000036e733106736f6c636f6e026e6c0000010001 55f780000001000000030003036e733106736f6c636f6e026e6c0000010001c0100002000100015180000b08736f6c7574696f6ec010c01000020001000151800002c00cc01000020001000151800006036e7332c010c02b00010001000151800004d42d2005c00c00010001000151800004d42d2003c05000010001000151800004d42d2103 42733 cec100000001000000000000037777770b7374617274706167696e61026e6c0000010001 cec180000001000000030003037777770b7374617274706167696e61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c030000100010001518000043e45a282c042000100010001518000043e45a283c054000100010001518000043e45a284 42734 000000007002faf0e5ea00000204059801010402 000080010000000000000000 42735 cd6400000001000000000000056d656469610873636f7574696e67026e6c0000010001 cd6480000001000000020001056d656469610873636f7574696e67026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800010026e730777697265687562036e657400c02f00010001000151800004d5c1d633 42736 898c00000001000000000000086575726f6b6c696b026e6c0000010001 898c80000001000000020001086575726f6b6c696b026e6c0000010001c00c0002000100015180000e026e73086575726f636c6978c015c00c00020001000151800012036e7332086575726f636c697803636f6d00c02900010001000151800004d47bc685 42737 b856528f5010446212f10000000000000000 b856d2840000000000000000 42738 b8583c905010fbb81cd20000000000000000 b858bc940000000000000000 42739 b857977e50104470aab20000000000000000 42740 b857977e50184470f99f0000008e5a64000000010001000000000f313238383439303138383831382d320000f900010f313238383439303138383831382d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403afce5403c4e6500030000002f4e544c4d535350000100000097b200e00800080027000000070007002000000047454c44455232494e5445524e45540000 42741 4d9e0010000100000000000103777777096e6574646972656374026e6c00000100010000290800000080000000 4d9e8000000100000003000103777777096e6574646972656374026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c0320000291000000000000000 42742 b8583c905018fbb876ff00000094f92c000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403af92f403c4aaf0003000000354e544c4d535350000100000097b208e0080008002d0000000d000d00200000005345525645522d434f4d5041514b4545524b4144450000 b858bc940000000000000000 42743 b8583c9e5011fbaa1c3b0000000000000000 b858bc940000000000000000 42744 87ec000000010000000000000c746f70726563726561746965026e6c00000f0001 87ec800000010000000200020c746f70726563726561746965026e6c00000f0001c00c00020001000151800010026e730a7a65656c616e646e6574c019c00c00020001000151800006036e7332c030c02d00010001000151800004d473c0c1c04900010001000151800004d473c0c3 42745 b857978c50114462aa210000000000000000 42746 b8583c9f5010fbaa1c3a0000000000000000 b858bc940000000000000000 42747 dccb000000010000000000000864656b6c61766572026e6c0000010001 dccb800000010000000200000864656b6c61766572026e6c0000010001c00c0002000100015180000e05646e732d31056c61646f74c015c00c0002000100015180000805646e732d32c02f 42748 64a90000000100000000000003777777057673686f70026e6c0000010001 64a98000000100000003000003777777057673686f70026e6c0000010001c0100002000100015180001809776f7274656c746a650868696e6472696b73036e657400c0100002000100015180000a077065656e746a65c034c0100002000100015180001206706574727573086d696e64636f7079c03d 42749 06a0000000010000000000000d62626163636f756e74616e7473026e6c00000f0001 06a0800000010000000200000d62626163636f756e74616e7473026e6c00000f0001c00c0002000100015180001b026e7312756e6976657273616c2d726567697374727903636f6d00c00c00020001000151800006036e7331c031 42750 b857978d50104462aa200000000000000000 42751 9e8b0000000100000000000003777777086172656e61636f6d026e6c0000010001 9e8b8000000100000002000203777777086172656e61636f6d026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 42752 f0ce00000001000000000000037777771a626572656e7363686f7470726f6365736d616e6167656d656e74026e6c0000010001 f0ce80000001000000020002037777771a626572656e7363686f7470726f6365736d616e6167656d656e74026e6c0000010001c01000020001000151800011036e73310a746f62656f6e6c696e65c02bc01000020001000151800006036e7332c043c03f000100010001518000043eddd4afc05c000100010001518000043eddc707 42753 cb7a00000001000000000000026e730d646f6d65696e656e6d61726b74026e6c0000010001 cb7a80000001000000020002026e730d646f6d65696e656e6d61726b74026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043e320c64c03f000100010001518000043e64366a 42754 0da4000000010000000000000670726f646973056e76776d6e026e6c0000010001 0da4800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 42755 32c400000001000000000000036e73320d646f6d65696e656e6d61726b74026e6c0000010001 32c480000001000000020002036e73320d646f6d65696e656e6d61726b74026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc032000100010001518000043e320c64c00c000100010001518000043e64366a 42756 6322000000010000000000000469742d62026e6c00000f0001 6322800000010000000200020469742d62026e6c00000f0001c00c0002000100015180000a016105646e737672c011c00c000200010001518000040162c027c02500010001000151800004417de609c03b0001000100015180000440f61ba0 42757 aa9e00000001000000000000037777770d76726f6c696a6b656b65727374026e6c0000010001 aa9e80000001000000020000037777770d76726f6c696a6b656b65727374026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01ec0100002000100015180000805646e732d32c038 42758 91d40000000100000000000005646e732d31056c61646f74026e6c0000010001 91d48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42759 b74d0000000100000000000005646e732d32056c61646f74026e6c0000010001 b74d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42760 d6170000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d6178000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42761 36650000000100000000000003626c3102626c06787334616c6c026e6c0000260001 36658000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42762 74c400000001000000000000037777770b686f74626f7864616e6e69026e6c0000010001 74c480000001000000020002037777770b686f74626f7864616e6e69026e6c0000010001c0100002000100015180000b036e7331046e732d31c01cc01000020001000151800006036e7332c034c030000100010001518000045045a0cdc04700010001000151800004d4cceec8 42763 636400000001000000000000056d61696c3109636c65616e706f7274026e6c0000260001 636480000001000000020002056d61696c3109636c65616e706f7274026e6c0000260001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 42764 d785000000010000000000000470617374026e6c00000f0001 d785800000010000000200020470617374026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 42765 342c0000000100000000000003777777086b6575726d65726b026e6c0000010001 342c8000000100000002000003777777086b6575726d65726b026e6c0000010001c0100002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0100002000100015180000805726f6b696ec034 42766 bdcb00100001000000000001034e53320743495354524f4e024e4c00000100010000290800000080000000 bdcb80000001000000020003034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 42767 2c12000000010000000000000d6b6f6e69672d6e657572617468026e6c0000010001 2c12800000010000000200020d6b6f6e69672d6e657572617468026e6c0000010001c00c0002000100015180000c026e730673656e746961c01ac00c00020001000151800006036e7332c031c02e0001000100015180000450fd695ac04600010001000151800004d4cce917 42768 97350000000100000000000008636f6e73756e6574026e6c0000010001 97358000000100000002000008636f6e73756e6574026e6c0000010001c00c00020001000151800012036e73310b776f726c646f6e6c696e65c015c00c00020001000151800006036e7332c02d 42769 90120000000100000000000006706167653431026e6c00000f0001 90128403000100000001000006706167653431026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 42770 96fb000000010000000000000b6e6f64652d632d66346537056132303030026e6c0000010001 96fb800000010000000300020b6e6f64652d632d66346537056132303030026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800010036e733109756e69736f75726365c01ec01800020001000151800006036e7332c018c032000100010001518000043e6c0141c060000100010001518000043e6c0142 42771 b2720000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 b2728000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 42772 f0d2000000010000000000000377777705647761617a026e6c0000010001 f0d2800000010000000200000377777705647761617a026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c030 42773 44e300000001000000000000036e73320a616d657273666f6f7274026e6c0000010001 44e380000001000000020001036e73320a616d657273666f6f7274026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02f00010001000151800004c14387fe 42774 d2fc00000001000000000000036e73320a616d657273666f6f7274026e6c0000260001 d2fc80000001000000020001036e73320a616d657273666f6f7274026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02f00010001000151800004c14387fe 42775 8bdc000000010000000000000b7265636c616d65636f6465026e6c0000010001 8bdc800000010000000300010b7265636c616d65636f6465026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc018c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ac02c000100010001518000043efa0202 42776 9ddd0000000100000000000003777777076e6c6265757273026e6c0000010001 9ddd8000000100000003000203777777076e6c6265757273026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 42777 b8c5000000010000000000000d6c6f656b6d65656e686f727374026e6c0000020001 b8c5800000010000000200020d6c6f656b6d65656e686f727374026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 42778 4fc500000001000000000000085453434c49454e5406444e53424441024e4c0000010001 4fc584030001000000010000085453434c49454e5406444e53424441024e4c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 42779 dc1400000001000000000000036e733303696467026e6c00001c0001 dc1480000001000000030003036e733303696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 42780 f40300000001000000000000036e733103696467026e6c00001c0001 f40380000001000000030003036e733103696467026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 42781 972700000001000000000000036e733203696467026e6c00001c0001 972780000001000000030003036e733203696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 42782 80da00000001000000000000096863632d67726f6570026e6c0000010001 80da80000001000000020002096863632d67726f6570026e6c0000010001c00c0002000100015180000e036e7331077175616e746973c016c00c00020001000151800006036e7332c02ec02a000100010001518000043ed44440c04400010001000151800004d4ccca83 42783 3399000000010000000000000467696473026e6c00001c0001 3399800000010000000200000467696473026e6c00001c0001c00c00020001000151800015096d6f6e64726961616e0874656c6562797465c011c00c0002000100015180000a077665726d656572c02f 42784 196900000001000000000000037777770f68656c6c686f756e6473626c756573026e6c0000010001 196984030001000000010000037777770f68656c6c686f756e6473626c756573026e6c0000010001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 42785 811e00000001000000000000026e73057972616d73026e6c0000010001 811e80000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 42786 800b00000001000000000000066962626e6574026e6c0000010001 800b80000001000000020000066962626e6574026e6c0000010001c00c0002000100015180000b026e73057972616d73c013c00c0002000100015180000b026e73026e6c036e657400 42787 1659000000010000000000000b73797374656d6661726d61026e6c00000f0001 1659800000010000000200010b73797374656d6661726d61026e6c00000f0001c00c0002000100015180000e036e7331076e6564636f6d70c018c00c00020001000151800011036e7332076e6564636f6d70036f726700c02c00010001000151800004c3c1a80d 42788 f3fd0000000100000000000008686f73746e616d650462696e640000100003 f3fd8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 42789 20b400000001000000000000086d616667726f7570026e6c0000ff0001 20b480000001000000020000086d616667726f7570026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c015c00c0002000100015180000704686e7331c02e 42790 83ea00000001000000000000056d61696c31076e6564636f6d70026e6c0000010001 83ea80000001000000020001056d61696c31076e6564636f6d70026e6c0000010001c01200020001000151800006036e7331c012c0120002000100015180000b026e73026e6c036e657400c02e00010001000151800004c3c1a80d 42791 02a300100001000000000001036e733503777873026e6c00000100010000290800000000000000 02a380000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 42792 ae0700000001000000000000036e733206657472616465026e6c00001c0001 ae0780000001000000020000036e733206657472616465026e6c00001c0001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 42793 5f8300000001000000000000036e733106657472616465026e6c00001c0001 5f8380000001000000020000036e733106657472616465026e6c00001c0001c01000020001000151800011056c656d6f6e0571696e6970036e657400c01000020001000151800007046c696d65c031 42794 469700000001000000000000086c65736562616e63026e6c00000f0001 469780000001000000020002086c65736562616e63026e6c00000f0001c00c00020001000151800012036e73320b76736d2d686f7374696e67c015c00c00020001000151800005026e73c02dc02900010001000151800004d468c204c04700010001000151800004d468c205 42795 f33b0000000100000000000008686f73746e616d650462696e640000100003 f33b8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 42796 6bad000000010000000000000377777706787334616c6c026e6c0000010001 6bad800000010000000300020377777706787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 42797 df8c0000000100000000000003777777096e6574646972656374026e6c0000010001 df8c8000000100000003000003777777096e6574646972656374026e6c0000010001c01000020001000151800012036e733108626c7565646f6d65036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 42798 6e2c00000001000000000000037777770461646864026e6c0000010001 6e2c80000001000000020002037777770461646864026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c015c01000020001000151800006036e7332c02dc02900010001000151800004505fa002c04400010001000151800004505fac02 42799 52280000000100000000000008686f73746e616d650462696e640000100003 52288000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 42800 2487000000010000000000000377777710636f6d7075746572737570706c696573026e6c0000010001 2487800000010000000200020377777710636f6d7075746572737570706c696573026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c021c01000020001000151800006036e7332c038c03500010001000151800004d9aa2042c04e00010001000151800004d9aa2c06 42801 926d0000000100000000000006696d6167657306776562616473026e6c0000010001 926d8000000100000002000206696d6167657306776562616473026e6c0000010001c01300020001000151800012036e73310b7669616e6574776f726b73c01ac01300020001000151800006036e7332c032c02e00010001000151800004d43d0f08c04c00010001000151800004d43d19e2 42802 138b00000001000000000000037777770e73616d736f6e20656e2067657274026e6c0000010001 138b84030001000000010000037777770e73616d736f6e20656e2067657274026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 42803 70df00000001000000000000036e7333076e656473746174026e6c0000010001 70df80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 42804 6ff300000001000000000000026e73076e656473746174026e6c0000010001 6ff380000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 42805 bec300000001000000000000036e733503777873026e6c0000010001 bec380000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 42806 65f528000001000000010000026e6c0000060001055f6c646170045f746370026763065f6d73646373086e6b6f6572696572026e6c000021000100000258001a000000640cc406736572766572086e6b6f6572696572026e6c00 65f5a8040000000000000000 42807 e12c00000001000000000000037777770667726f656e65026e6c0000010001 e12c80000001000000020002037777770667726f656e65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 42808 b74100000001000000000000037777770667726f656e65026e6c0000010001 b74180000001000000020002037777770667726f656e65026e6c0000010001c0100002000100015180000c026e7306787334616c6cc017c01000020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 42809 64ef00000001000000000000034e53320743495354524f4e024e4c0000010001 64ef80000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 42810 7018000000010000000000000377777707626572746f6e69026e6c0000010001 7018800000010000000300010377777707626572746f6e69026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 42811 000000007002223853ff00000204057801010402 000080010000000000000000 42812 eae200000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730d7676762d676f72696e6368656d026e6c0000060001 eae284030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730d7676762d676f72696e6368656d026e6c0000060001c05200060001000038400036026e730f646f6d61696e2d7265676973747279c0520a686f73746d6173746572c0690bf1e540000070800000384000278d0000003840 42813 f6a800100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 f6a880000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 42814 c46800100001000000000001036e733107737572666e6574026e6c00002600010000290800000080000000 c46880000001000000040004036e733107737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 42815 107200000001000000000000037777770766726565787878026e6c0000010001 107280000001000000030003037777770766726565787878026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 42816 14c800100001000000000001026e7308454c534556494552026e6c00000100010000290800000080000000 14c880000001000000020003026e7308454c534556494552026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c018c00c0001000100015180000491240501c03a00010001000151800004c0576a650000291000000000000000 42817 130c0000000100000000000005646e732d31056c61646f74026e6c0000010001 130c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42818 455d00100001000000000001026e7308454c534556494552026e6c00002600010000290800000080000000 455d80000001000000020003026e7308454c534556494552026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c018c00c0001000100015180000491240501c03a00010001000151800004c0576a650000291000000000000000 42819 89950000000100000000000005646e732d32056c61646f74026e6c0000010001 89958000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42820 2f7b00000001000000000000036e73310769736973776562026e6c0000010001 2f7b80000001000000030003036e73310769736973776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7334c010c00c00010001000151800004d4ccca65c03a00010001000151800004510440dec04c00010001000151800004510440fa 42821 b29200000001000000000000036e73320769736973776562026e6c0000010001 b29280000001000000030003036e73320769736973776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7334c010c02c00010001000151800004d4ccca65c00c00010001000151800004510440dec04c00010001000151800004510440fa 42822 03c900000001000000000000036e73340769736973776562026e6c0000010001 03c980000001000000030003036e73340769736973776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02c00010001000151800004d4ccca65c03e00010001000151800004510440dec00c00010001000151800004510440fa 42823 33d500000001000000000000036e73350769736973776562026e6c0000010001 33d580000001000000030003036e73350769736973776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7334c010c02c00010001000151800004d4ccca65c03e00010001000151800004510440dec05000010001000151800004510440fa 42824 427800000001000000000000086c6f656e6174696b026e6c0000020001 427880000001000000020002086c6f656e6174696b026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 42825 b85a8a295010264839e30000000000000000 42826 82c70000000100000000000003777777087374617273686f70026e6c0000010001 82c78000000100000002000203777777087374617273686f70026e6c0000010001c01000020001000151800009026e730369736dc019c01000020001000151800006036e7332c030c02d00010001000151800004d994ab02c04200010001000151800004d994ab03 42827 0137000000010000000000000377777703696267026e6c0000010001 0137800000010000000200000377777703696267026e6c0000010001c01000020001000151800011036e73310773696e6e65726703636f6d00c01000020001000151800006036e7332c02c 42828 d31c00000001000000000000026763065f6d736463730a76706e2d6f6e6c696e65026e6c0000060001 d31c84030001000000010000026763065f6d736463730a76706e2d6f6e6c696e65026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 42829 fd37000000010000000000000477697368026e6c00000f0001 fd37800000010000000300020477697368026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c011c00c0002000100015180000704616e7332c02ac00c0002000100015180001404616e73330a74697363616c696e657402626500c02500010001000151800004c3f14d38c04000010001000151800004c3f13325 42830 b85a8a2950182648986c0000008d7000000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 42831 411228000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730d7676762d676f72696e6368656d026e6c00002100010000025800280000006400580f676f72696e6368656d326b2d7362730d7676762d676f72696e6368656d026e6c00 4112a8040000000000000000 42832 f5710000000100000000000003777777066a2d656e2d65026e6c0000010001 f5718403000100000001000003777777066a2d656e2d65026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 42833 000000007002faf02bcb0000020405b401010402 000080010000000000000000 42834 b85a8a375011263a39530000000000000000 42835 b85b16615010faf089c20000000000000000 b85b96640000000000000000 42836 eb58000000010000000000000775706461746573077261666f726365026e6c0000010001 eb58800000010000000200000775706461746573077261666f726365026e6c0000010001c01400020001000151800012036e7331087a6f6e656564697403636f6d00c01400020001000151800006036e7335c034 42837 00000000700222384d0d00000204057801010402 000080010000000000000000 42838 b85b16615018faf0b5f40000009ba618000000010001000000000f313138353431303937333731342d330000f900010f313138353431303937333731342d330000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af563403c46e300030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000 b85b96640000000000000000 42839 000928000001000200000000026e6c00000600010261730b746563686e6f70616e656c026e6c00000500fe000000000000c01400010001000000000004c0a86466 0009a8040000000000000000 42840 b85b166f5011fae289240000000000000000 b85b96640000000000000000 42841 906a000000010000000000000377777703757661026e6c0000010001 906a800000010000000200020377777703757661026e6c0000010001c0100002000100015180000e086261726c61657573026963c010c01000020001000151800006036e7331c010c0280001000100015180000491124432c0420001000100015180000491122710 42842 29cb00000001000000000000026e7308454c534556494552026e6c0000010001 29cb80000001000000020002026e7308454c534556494552026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c018c00c0001000100015180000491240501c03a00010001000151800004c0576a65 42843 b85b16705010fae289230000000000000000 b85b96740000000000000000 42844 b85a8a385010263a39520000000000000000 42845 50f200000001000000000000026e7308454c534556494552026e6c0000260001 50f280000001000000020002026e7308454c534556494552026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c018c00c0001000100015180000491240501c03a00010001000151800004c0576a65 42846 4aec00000001000000000000036d783207776172706e6574026e6c0000010001 4aec80000001000000020002036d783207776172706e6574026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c323b01ec03e00010001000151800004c323b01f 42847 000000007002faf087d30000020405b401010402 000080010000000000000000 42848 b85bdfe450102648dd340000000000000000 42849 376f00000001000000000000036e7331056577656b61026e6c0000010001 376f80000001000000020002036e7331056577656b61026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7333c010c00c0001000100015180000451ab6504c0380001000100015180000451ab660e 42850 a8c900000001000000000000036e7333056577656b61026e6c0000010001 a8c980000001000000020002036e7333056577656b61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02a0001000100015180000451ab6504c00c0001000100015180000451ab660e 42851 b85cb74e5010faf044dc0000000000000000 42852 000000007002400075820000020405b401010402 000080010000000000000000 42853 fee600000001000000000000067669617765620b7669616e6574776f726b73026e6c0000010001 fee680000001000000020002067669617765620b7669616e6574776f726b73026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c03300010001000151800004d43d0f08c04500010001000151800004d43d19e2 42854 b85cb74e5018faf0b5e70000009b6240000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af563403c46e300030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000 42855 28cc00000001000000000000026e73076e656473746174026e6c0000010001 28cc80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 42856 28cd00000001000000000000036e7333076e656473746174026e6c0000010001 28cd80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 42857 1fe200100001000000000001105649525455414c53484f5754494d4553026e6c00000200010000290800000080000000 1fe284030001000000010001105649525455414c53484f5754494d4553026e6c0000020001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d00000038400000291000000000000000 42858 5e800000000100000000000002676b026e6c00000f0001 5e808000000100000003000102676b026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc00fc00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c041c023000100010001518000043efa0202 42859 51e700000001000000000000037777770a6473742d74726176656c026e6c0000010001 51e780000001000000020000037777770a6473742d74726176656c026e6c0000010001c0100002000100015180000c026e7306766576696461c01bc01000020001000151800006036e7332c032 42860 027528000001000100020000026e6c00000600010a7765726b706c656b3234116e65776d61726b6574636f6e73756c7473026e6c00000500fe000000000000c014000100ff000000000000c014000100010000038400040a070145 0275a8040000000000000000 42861 9cba000000010000000000000b726964646572686176656e026e6c00000f0001 9cba800000010000000300020b726964646572686176656e026e6c00000f0001c00c0002000100015180000d036e733106776964657873c018c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 42862 b85bdfe4501826489cbf0000008d1000000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 42863 9ed800000001000000000000036e73320a7a65656c616e646e6574026e6c0000010001 9ed880000001000000020002036e73320a7a65656c616e646e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 42864 27ce00000001000000000000026e730a7a65656c616e646e6574026e6c0000010001 27ce80000001000000020002026e730a7a65656c616e646e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 42865 93e700000001000000000000036e73320a7a65656c616e646e6574026e6c0000260001 93e780000001000000020002036e73320a7a65656c616e646e6574026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 42866 fcf300000001000000000000026e730a7a65656c616e646e6574026e6c0000260001 fcf380000001000000020002026e730a7a65656c616e646e6574026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 42867 b85cb75c5011fae2443e0000000000000000 42868 b85d4c1f5010447099490000000000000000 b85dcc140000000000000000 42869 82b800000001000000000000087761746572776567026e6c00000f0001 82b880000001000000020002087761746572776567026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 42870 b85d4c1f5018447060e70000008aa150000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd59403c4ed900030000002d4e544c4d535350000100000097b200c00b000b002200000002000200200000004153544543484e4f50414e454c0000 b85dcc140000000000000000 42871 7ff6000000010000000000000773616c2d656e67026e6c00000f0001 7ff6800000010000000200010773616c2d656e67026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c02800010001000151800004c14e3e01 42872 b85cb75d5010fae2443d0000000000000000 42873 000000007002faf03cb70000020405b401010402 000080010000000000000000 42874 b85dec5d5010faf0c4af0000000000000000 42875 b85d4c2d5011446298bc0000000000000000 b85dcc240000000000000000 42876 1f1700000001000000000000037777770a6b72697374616c6c656e026e6c0000010001 1f1780000001000000020001037777770a6b72697374616c6c656e026e6c0000010001c0100002000100015180000e036e733107626c7565646e73c01bc01000020001000151800006036e7333c033c02f00010001000151800004d5c401c0 42877 0000000070024000dacd0000020405b401010402 000080010000000000000000 42878 b85dec5d5018faf08a890000009b0d72000000010001000000000f313138353431303937333731342d320000f900010f313138353431303937333731342d320000f900ff00000000005f03677373096d6963726f736f667403636f6d00403af563403c46e300030000003c4e544c4d535350000100000097b208e00d000d002f0000000f000f0020000000474f52494e4348454d324b2d5342535656562d474f52494e4348454d0000 42879 014900000001000000000000066265696a6572026e6c00000f0001 014980000001000000020000066265696a6572026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02d 42880 8ae40000000100000000000003777777067a69656d696a026e6c0000010001 8ae48000000100000003000203777777067a69656d696a026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 42881 b85bdff25011263adca40000000000000000 42882 7898000000010000000000000977696e6b656c6d616e026e6c00000f0001 7898800000010000000200020977696e6b656c6d616e026e6c00000f0001c00c0002000100015180000a036e733103647768c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d5efb308c04000010001000151800004d5efb303 42883 7a6b0000000100000000000007696e6e6f76616d026e6c00000f0001 7a6b8000000100000002000207696e6e6f76616d026e6c00000f0001c00c0002000100015180000e036e733207737570706f7274c014c00c00020001000151800006036e7334c02cc02800010001000151800004c372e7c8c04200010001000151800004c372e6fe 42884 0000000070022238441700000204057801010402 000080010000000000000000 42885 b85dec6b5011fae2c4110000000000000000 42886 b85d4c2e5010446298bb0000000000000000 b85dcc240000000000000000 42887 1c80000000010000000000000974656c656b6162656c026e6c00000f0001 1c80800000010000000200020974656c656b6162656c026e6c00000f0001c00c0002000100015180000a036e733103757063c016c00c0002000100015180000e046e733032066368656c6c6fc016c02a00010001000151800004d48e1c42c04000010001000151800004d4534483 42888 b85ec015501044708a9d0000000000000000 42889 e3e700000001000000000000066368656c6c6f026e6c0000ff0001 e3e780000001000000030003066368656c6c6f026e6c0000ff0001c00c00020001000151800007046e733031c00cc00c00020001000151800007046e733032c00cc00c0002000100015180000a036e733103757063c013c02700010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 42890 528500000001000000000000036c6f66026e6c0000020001 528580000001000000020002036c6f66026e6c0000020001c00c0002000100015180000e036e733007656173796e6574c010c00c00020001000151800006036e7331c028c02400010001000151800004c2a55e01c03e00010001000151800004c2a55e05 42891 9f730000000100000000000007706f727461616c026e6c00000f0001 9f738000000100000002000007706f727461616c026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02c 42892 b85dec6c5010fae2c4100000000000000000 42893 b85ec0155018447027ef0000008acd9c000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd59403c4ed900030000002d4e544c4d535350000100000097b200c00b000b002200000002000200200000004153544543484e4f50414e454c0000 42894 606628000001000000010000026e6c0000060001055f6c646170045f746370026763065f6d73646373057368696e650473686276026e6c000021000100000258001d000000640cc4077368696e653031057368696e650473686276026e6c00 6066a8040000000000000000 42895 b85bdff35010263adca30000000000000000 42896 a6db00000001000000000000037777770b646f6e7175692d6a6f686e026e6c0000010001 a6db80000001000000020000037777770b646f6e7175692d6a6f686e026e6c0000010001c01000020001000151800016036e73310f627573696e657373636f6e6e656374c01cc01000020001000151800010036e733206776964657873036e657400 42897 34c30000000100000000000008616473657276657206776562616473026e6c0000010001 34c38000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 42898 ad3c00000001000000000000036e73310f627573696e657373636f6e6e656374026e6c0000010001 ad3c80000001000000030002036e73310f627573696e657373636f6e6e656374026e6c0000010001c0100002000100015180000d036e733106776964657873c020c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c038c03400010001000151800004d4ccc0fcc069000100010001518000043efa0703 42899 b9ae0000000100000000000008444953484f45434b024e4c00000f0001 b9ae8000000100000003000108444953484f45434b024e4c00000f0001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 42900 0ff100000001000000000000105649525455414c53484f5754494d4553026e6c0000020001 0ff184030001000000010000105649525455414c53484f5754494d4553026e6c0000020001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 42901 b85ec023501144628a100000000000000000 42902 4dc7000000010000000000000a6d6470726f6475637473026e6c00000f0001 4dc7800000010000000200010a6d6470726f6475637473026e6c00000f0001c00c0002000100015180000d026e7307696e746f756368c017c00c00020001000151800010026e7307696e746f756368036e657400c02b00010001000151800004d413c001 42903 b85f89fe501026482a210000000000000000 42904 00000000700240007f700000020405b401010402 000080010000000000000000 42905 000000007002400035fd0000020405b401010402 000080010000000000000000 42906 30cc000000010000000000000974696e6b6f6570656c026e6c00000f0001 30cc800000010000000200020974696e6b6f6570656c026e6c00000f0001c00c00020001000151800013036e73310c62656472696a76656e776562c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d90867fec04900010001000151800004c1ad2bfe 42907 b860b22450104470f3bb0000000000000000 42908 fad5000000010000000000001566696e616e636965656c2d6d616e6167656d656e74026e6c00000f0001 fad5800000010000000200021566696e616e636965656c2d6d616e6167656d656e74026e6c00000f0001c00c0002000100015180000a036e733103656964c022c00c00020001000151800006036e7332c03ac0360001000100015180000452c048b6c04c0001000100015180000452c048ba 42909 73ea000000010000000000000d64656d6f6c656e62616e64656e026e6c00000f0001 73ea800000010000000200020d64656d6f6c656e62616e64656e026e6c00000f0001c00c00020001000151800012026e730c696e746572636f6e6e656374c01ac00c00020001000151800006036e7332c031c02e00010001000151800004d453c005c04c00010001000151800004d453c006 42910 b85ec024501044628a0f0000000000000000 42911 b85f89fe50182648b9ab0000008d4000000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403afcd7403c4e5700030000002e4e544c4d535350000100000097b200e0080008002600000006000600200000005345525645524e4b4f45524945520000 42912 b860b224501844700a5d0000008b8567000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd2a403c4eaa00030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000 42913 9dd10000000100000000000003626c3102626c06787334616c6c026e6c0000010001 9dd18000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42914 4a810000000100000000000003626c3102626c06787334616c6c026e6c0000260001 4a818000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42915 b8600c6350104470e2f00000000000000000 b8608c640000000000000000 42916 b8600c6350184470bba00000008a903e000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403afd5a403c4eda00030000002d4e544c4d535350000100000097b200c00b000b002200000002000200200000004153544543484e4f50414e454c0000 b8608c640000000000000000 42917 af8e0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 af8e8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 42918 0126000000010000000000000377777706737562776562026e6c0000010001 0126800000010000000200020377777706737562776562026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000d036e73320663617374656cc017c02b00010001000151800004c35593cac03c00010001000151800004c3558245 42919 b860b23250114462f32d0000000000000000 42920 4fdd00000001000000000000036e7331077569746c696a6e026e6c00001c0001 4fdd80000001000000020002036e7331077569746c696a6e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e3aa5fbc03a00010001000151800004d4ccfc79 42921 d03900000001000000000000036e7331077569746c696a6e026e6c0000260001 d03980000001000000020002036e7331077569746c696a6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e3aa5fbc03a00010001000151800004d4ccfc79 42922 bb2f00000001000000000000036e7332077569746c696a6e026e6c00001c0001 bb2f80000001000000020002036e7332077569746c696a6e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043e3aa5fbc00c00010001000151800004d4ccfc79 42923 55f600000001000000000000036e7332077569746c696a6e026e6c0000260001 55f680000001000000020002036e7332077569746c696a6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043e3aa5fbc00c00010001000151800004d4ccfc79 42924 0000000070024000aa9b0000020405b401010402 000080010000000000000000 42925 c18400000001000000000000036d783203656964026e6c0000010001 c18480000001000000020002036d783203656964026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0280001000100015180000452c048b6c03a0001000100015180000452c048ba 42926 2a190000000100000000000003777777057261756368026e6c0000010001 2a198000000100000002000203777777057261756368026e6c0000010001c0100002000100015180000e08706f7765722d6133026133c016c0100002000100015180000c09706f7765722d697078c033c02a0001000100015180000451113b42c04400010001000151800004d5ab40e6 42927 0b8c0000000100000000000008656c63686561706f026e6c0000010001 0b8c8000000100000002000008656c63686561706f026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c02d 42928 b860b23350104462f32c0000000000000000 42929 b8600c7150114462e2630000000000000000 b8608c740000000000000000 42930 b861437f50104470d6fe0000000000000000 b861c3740000000000000000 42931 b861437f50184470a8780000008bcb8f000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd2a403c4eaa00030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000 b861c3740000000000000000 42932 b85f8a0c5011263a29910000000000000000 42933 ad4900000001000000000000037777770e6261736b657462616c6c73697465026e6c0000010001 ad4980000001000000020002037777770e6261736b657462616c6c73697465026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01fc01000020001000151800006036e7332c036c03300010001000151800004d4cb0e42c04e00010001000151800004d4cb1221 42934 b861438d50114462d6700000000000000000 b861c3840000000000000000 42935 b8600c7250104462e2620000000000000000 b8608c740000000000000000 42936 0000000070024000229f0000020405b401010402 000080010000000000000000 42937 b861438e50104462d66f0000000000000000 b861c3840000000000000000 42938 b863aebd50104470e3c10000000000000000 42939 c1ae00000001000000000000046d61696c0b6a6f736875617072696e73026e6c0000010001 c1ae80000001000000020002046d61696c0b6a6f736875617072696e73026e6c0000010001c01100020001000151800015036e73310e692d6d61746368686f7374696e67c01dc01100020001000151800006036e7332c035c03100010001000151800004d4cb1d01c05200010001000151800004d4cb1d02 42940 9b7c00000001000000000000094f4f535450434449520a4f6f737465696e646572026e6c0000060001 9b7c84030001000000010000094f4f535450434449520a4f6f737465696e646572026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 42941 b85f8a0d5010263a29900000000000000000 42942 b863aebd501844706f140000008b11b7000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000004f03677373096d6963726f736f667403636f6d00403afd2a403c4eaa00030000002c4e544c4d535350000100000097b200e0050005002700000007000700200000005348494e4530315348494e450000 42943 b863aecb50114462e3330000000000000000 42944 da0700000001000000000000037777770b6161646d616e7376656c64026e6c0000010001 da0780000001000000020000037777770b6161646d616e7376656c64026e6c0000010001c01000020001000151800012036e7331086974732d646e733303636f6d00c01000020001000151800006036e7332c034 42945 446e00000001000000000000037777770768657465313030026e6c0000010001 446e80000001000000020002037777770768657465313030026e6c0000010001c0100002000100015180000c04646e73310470696e73c018c0100002000100015180000704646e7332c031c02c00010001000151800004d9c26101c04400010001000151800004d9c26002 42946 b863aecc50104462e3320000000000000000 42947 0c0600100001000000000001036e733206776964657873026e6c00000100010000290800000000000000 0c0680000001000000030003036e733206776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c02b00010001000151800004d4ccc0fcc059000100010001518000043efa07030000291000000000000000 42948 709f00000001000000000000096c6f6c706c616e6574026e6c00000f0001 709f84030001000000010000096c6f6c706c616e6574026e6c00000f0001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 42949 3ad40000000100000000000004534d545006585334414c4c024e4c0000010001 3ad48000000100000003000204534d545006585334414c4c024e4c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 42950 ad0800000001000000000000037777771473696e676c656d6161726e696574616c6c65656e026e6c0000010001 ad0880000001000000020002037777771473696e676c656d6161726e696574616c6c65656e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c039000100010001518000043e320da2c04b000100010001518000043ed48264 42951 ba0000000001000000000000036e733108696e74726f776562026e6c0000010001 ba0080000001000000020002036e733108696e74726f776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450416028c03b00010001000151800004c356780c 42952 af5400000001000000000000036e733208696e74726f776562026e6c0000010001 af5480000001000000020002036e733208696e74726f776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 42953 70db00000001000000000000036e73321473696e676c656d6161726e696574616c6c65656e026e6c0000010001 70db80000001000000020002036e73321473696e676c656d6161726e696574616c6c65656e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc039000100010001518000043e320da2c00c000100010001518000043ed48264 42954 d24c00000001000000000000036e73311473696e676c656d6161726e696574616c6c65656e026e6c0000010001 d24c80000001000000020002036e73311473696e676c656d6161726e696574616c6c65656e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e320da2c047000100010001518000043ed48264 42955 057100000001000000000000126c6f676565726b72696e676472656e746865026e6c0000020001 057180000001000000020002126c6f676565726b72696e676472656e746865026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01fc00c00020001000151800006036e7332c037c03300010001000151800004c29f4906c04b00010001000151800004c29fb004 42956 fbd40000000100000000000002706d026e6c00001c0001 fbd48000000100000002000002706d026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c029 42957 b37900000001000000000000036e733206776964657873026e6c0000010001 b37980000001000000030002036e733206776964657873026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c010c02b00010001000151800004d4ccc0fcc059000100010001518000043efa0703 42958 b5b200100001000000000001036e73320e64617461636f6e686f7374696e67026e6c00000100010000290800000080000000 b5b280000001000000020003036e73320e64617461636f6e686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03300010001000151800004d43d2934c00c00010001000151800004d468d1430000291000000000000000 42959 d872000000010000000000000964736c3032382d30360364736c07737570706f7274026e6c0000010001 d872800000010000000200020964736c3032382d30360364736c07737570706f7274026e6c0000010001c01a00020001000151800006036e7332c01ac01a00020001000151800006036e7334c01ac03600010001000151800004c372e7c8c04800010001000151800004c372e6fe 42960 6d6200100001000000000001026e730e64617461636f6e686f7374696e67026e6c00000100010000290800000080000000 6d6280000001000000020003026e730e64617461636f6e686f7374696e67026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d43d2934c04000010001000151800004d468d1430000291000000000000000 42961 06d500000001000000000000037777770d77616e64656c77656273697465026e6c0000010001 06d580000001000000020000037777770d77616e64656c77656273697465026e6c0000010001c01000020001000151800011036e73330a737562686f7374696e67c01ec01000020001000151800006036e7334c036 42962 525000000001000000000000037777771068616e64732d6f6e2d6865616c696e67026e6c0000010001 525080000001000000020002037777771068616e64732d6f6e2d6865616c696e67026e6c0000010001c01000020001000151800013036e73310c666173747365727665723131c021c01000020001000151800006036e7332c039c0350001000100015180000442a4f077c0540001000100015180000442a4f078 42963 2a7a0000000100000000000003777777096163736576656e756d026e6c0000010001 2a7a8000000100000002000203777777096163736576656e756d026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 42964 9ac70000000100000000000006636861726973026e6c00000f0001 9ac78000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 42965 9fe500000001000000000000037777770d7375706572736e656c6164736c026e6c0000010001 9fe580000001000000020002037777770d7375706572736e656c6164736c026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01ec0100002000100015180001004646e733208636f6e6365707473c01ec03200010001000151800004d5c51c03c04f00010001000151800004d5c51e1c 42966 7b8a000000010000000000000677777777696e06317374776562026e6c0000010001 7b8a800000010000000200020677777777696e06317374776562026e6c0000010001c0130002000100015180000e08706f7765722d6133026133c01ac0130002000100015180000c09706f7765722d697078c037c02e0001000100015180000451113b42c04800010001000151800004d5ab40e6 42967 61c600000001000000000000037777770d6d6f746f726b6c61737369656b026e6c0000010001 61c680000001000000020000037777770d6d6f746f726b6c61737369656b026e6c0000010001c01000020001000151800014026e730b686f6c6c616e64686f7374036e657400c01000020001000151800006036e7332c035 42968 3a0c0000000100000000000003777777046465646b026e6c0000010001 3a0c8000000100000002000203777777046465646b026e6c0000010001c01000020001000151800014036e73310d32302d616c6c686f7374696e67c015c01000020001000151800006036e7332c02dc029000100010001518000044262d66ec049000100010001518000044262d66f 42969 25a000000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 25a080000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 42970 6d59000000010000000000000c74696d6d65726f6e6c696e65026e6c00000f0001 6d59800000010000000200000c74696d6d65726f6e6c696e65026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c033 42971 85a00000000100000000000005646e732d31056c61646f74026e6c0000010001 85a08000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42972 46720000000100000000000005646e732d32056c61646f74026e6c0000010001 46728000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42973 c8b20000000100000000000003777777096e616774656761616c026e6c0000010001 c8b28000000100000003000103777777096e616774656761616c026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 42974 b03700000001000000000000096d61696c686f7374340b66726565686f7374696e67026e6c0000010001 b03780000001000000020000096d61696c686f7374340b66726565686f7374696e67026e6c0000010001c0160002000100015180001105646e732d33056c61646f7403636f6d00c0160002000100015180000805646e732d34c03c 42975 2c54000000010000000000000d6672616e656b6572616465656c026e6c00000f0001 2c54800000010000000200020d6672616e656b6572616465656c026e6c00000f0001c00c0002000100015180000e026e730869742d776f726b73c01ac00c00020001000151800014026e730e667279736c616e2d6f6e6c696e65c01ac02e00010001000151800004515b0288c04800010001000151800004515b020d 42976 c5ce000000010000000000000b776966692d7365727665720377686b026e6c0000060001 c5ce800000010000000300030b776966692d7365727665720377686b026e6c0000060001c0180002000100015180000e04646e733106626c6978656dc01cc0180002000100015180000704646e7332c035c0180002000100015180000704646e7333c035c03000010001000151800004d44fe803c04a00010001000151800004c3f5c782c05d00010001000151800004d44ff303 42977 0aa0000000010000000000000b776966692d7365727665720377686b026e6c0000060001 0aa0800000010000000300030b776966692d7365727665720377686b026e6c0000060001c0180002000100015180000e04646e733106626c6978656dc01cc0180002000100015180000704646e7332c035c0180002000100015180000704646e7333c035c03000010001000151800004d44fe803c04a00010001000151800004c3f5c782c05d00010001000151800004d44ff303 42978 de1700000001000000000000046162656c0564656d6f6e026e6c00001c0001 de1780000001000000030002046162656c0564656d6f6e026e6c00001c0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 42979 1cfc00000001000000000000026e73057972616d73026e6c0000010001 1cfc80000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 42980 144e0000000100000000000003706f700b7669616e6574776f726b73026e6c0000010001 144e8000000100000002000203706f700b7669616e6574776f726b73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c03000010001000151800004d43d0f08c04200010001000151800004d43d19e2 42981 1923000000010000000000000377777711796163687463686172746572736e65656b026e6c0000010001 1923800000010000000200020377777711796163687463686172746572736e65656b026e6c0000010001c01000020001000151800009036e7331026d6ac022c01000020001000151800006036e7332c03ac03600010001000151800004515b010ac04b00010001000151800004515b000a 42982 1c53000000010000000000000377777711796163687463686172746572736e65656b026e6c0000010001 1c53800000010000000200020377777711796163687463686172746572736e65656b026e6c0000010001c01000020001000151800009036e7331026d6ac022c01000020001000151800006036e7332c03ac03600010001000151800004515b010ac04b00010001000151800004515b000a 42983 5558000000010000000000000377777708696b73746f706e75026e6c0000010001 5558840300010000000100000377777708696b73746f706e75026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 42984 6ef60000000100000000000008686f75736561647303696467026e6c0000010001 6ef68000000100000003000308686f75736561647303696467026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c02d0001000100015180000451af4646c03f0001000100015180000451af4647c05100010001000151800004d5a0fde6 42985 d55600000001000000000000037777770b74656d706f686572656e33026e6c0000010001 d55680000001000000020002037777770b74656d706f686572656e33026e6c0000010001c0100002000100015180000a036e733103647768c01cc01000020001000151800006036e7332c034c03000010001000151800004d5efb308c04600010001000151800004d5efb303 42986 ba4e00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 ba4e80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 42987 826f00000001000000000000037777770a68617065727462697a7a026e6c0000010001 826f84030001000000010000037777770a68617065727462697a7a026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 42988 3de8000000010000000000000970636d7366727430310370636d026e6c0000010001 3de8800000010000000200010970636d7366727430310370636d026e6c0000010001c01600020001000151800005026e73c016c0160002000100015180000b026e73026e6c036e657400c02e00010001000151800004c143e6dc 42989 8d8000000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 8d8080000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 42990 0f1e00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 0f1e80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 42991 fea30000000100000000000005646e732d31056c61646f74026e6c0000010001 fea38000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42992 cd0800000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 cd0880000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42993 a82e0000000100000000000005646e732d32056c61646f74026e6c0000010001 a82e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 42994 a2ee000000010000000000000878656961746f746c0564656d6f6e026e6c00000f0001 a2ee800000010000000300020878656961746f746c0564656d6f6e026e6c00000f0001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c0150002000100015180000f036e73320564656d6f6e036e657400c02f00010001000151800004c29f4906c04100010001000151800004c29fb004 42995 001b00000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 001b80000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 42996 35a8000000010000000000000670726f646973056e76776d6e026e6c0000010001 35a8800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 42997 590800000001000000000000026e730774696c62757267026e6c0000010001 590880000001000000020000026e730774696c62757267026e6c0000010001c00f0002000100015180000d036e7331036b706e036e657400c00f00020001000151800006036e7332c02f 42998 1b1c00000001000000000000036e73320774696c62757267026e6c0000010001 1b1c80000001000000020000036e73320774696c62757267026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c030 42999 33d100000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 33d180000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43000 ca2800000001000000000000085453434c49454e5406444e53424441024e4c0000010001 ca2884030001000000010000085453434c49454e5406444e53424441024e4c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 43001 3f2400000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 3f2480000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43002 519600000001000000000000037777770d626561757479626575727a656e026e6c0000010001 519680000001000000020002037777770d626561757479626575727a656e026e6c0000010001c0100002000100015180000e036e73310765766964656e74c01ec01000020001000151800006036e7332c036c03200010001000151800004c36d19c4c04c00010001000151800004c36d1942 43003 65a600000001000000000000037777770a626162796f75746c6574026e6c0000010001 65a680000001000000020002037777770a626162796f75746c6574026e6c0000010001c0100002000100015180000d03706e7306636f6d6c6f67c01bc0100002000100015180000603736e73c033c02f00010001000151800004d5a0c803c04800010001000151800004d5a0c804 43004 c8ba0000000100000000000006636861726973026e6c00000f0001 c8ba8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43005 ac3300000001000000000000046d61696c06434841524953024e4c0000010001 ac3380000001000000020000046d61696c06434841524953024e4c0000010001c0110002000100015180000c026e7306766576696461c018c01100020001000151800006036e7332c02f 43006 ea8a00000001000000000000037777770a6865727065726475696e026e6c0000010001 ea8a80000001000000030002037777770a6865727065726475696e026e6c0000010001c0100002000100015180000d036e733106776964657873c01bc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c033c02f00010001000151800004d4ccc0fcc064000100010001518000043efa0703 43007 456a00000001000000000000046d61696c0874616c6b6c696e65026e6c0000010001 456a80000001000000030003046d61696c0874616c6b6c696e65026e6c0000010001c0110002000100015180000e04646e733106626c6978656dc01ac0110002000100015180000704646e7332c033c0110002000100015180000704646e7333c033c02e00010001000151800004d44fe803c04800010001000151800004c3f5c782c05b00010001000151800004d44ff303 43008 577a0000000100000000000004646e73320471776562026e6c0000010001 577a8000000100000002000204646e73320471776562026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 43009 36b100000001000000000000036e73320e64617461636f6e686f7374696e67026e6c0000010001 36b180000001000000020002036e73320e64617461636f6e686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03300010001000151800004d43d2934c00c00010001000151800004d468d143 43010 532b00000001000000000000026e730e64617461636f6e686f7374696e67026e6c0000010001 532b80000001000000020002026e730e64617461636f6e686f7374696e67026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d43d2934c04000010001000151800004d468d143 43011 33250000000100000000000003777777046b627667026e6c0000010001 33258000000100000002000003777777046b627667026e6c0000010001c01000020001000151800012046e733130076d756c7472697803636f6d00c01000020001000151800007046e733230c02e 43012 86bc00000001000000000000037777770b636f6e7461637463686174026e6c0000010001 86bc80000001000000020002037777770b636f6e7461637463686174026e6c0000010001c0100002000100015180000a036e733103686978c01cc01000020001000151800006036e7332c034c03000010001000151800004d5a0da0ac0460001000100015180000451112ec3 43013 e3290000000100000000000004686e73310774697363616c69026e6c0000010001 e3298000000100000003000204686e73310774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 43014 80780000000100000000000004686e73300774697363616c69026e6c0000010001 80788000000100000003000204686e73300774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 43015 67f700000001000000000000076c6f676572696a026e6c0000020001 67f780000001000000020002076c6f676572696a026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec014c00c00020001000151800006036e7332c02cc02800010001000151800004c29f4906c04000010001000151800004c29fb004 43016 35b100000001000000000000037777770666756e646978026e6c0000010001 35b180000001000000020000037777770666756e646978026e6c0000010001c01000020001000151800015036e73310b656e65726769732d696463036e657400c01000020001000151800006036e7332c02f 43017 af3600000001000000000000036e73310d746973636f6d686f7374696e67026e6c0000010001 af3680000001000000020002036e73310d746973636f6d686f7374696e67026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e5def0ac040000100010001518000043e5def0b 43018 d79b00000001000000000000036e73320d746973636f6d686f7374696e67026e6c0000010001 d79b80000001000000020002036e73320d746973636f6d686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc032000100010001518000043e5def0ac00c000100010001518000043e5def0b 43019 67c10010000100000000000104686f6d6506706c616e6574026e6c00000100010000290800000080000000 67c18000000100000003000404686f6d6506706c616e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a650000291000000000000000 43020 8ec20000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 8ec28000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 43021 dddb00000001000000000000036e733107737572666e6574026e6c0000010001 dddb80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 43022 e4af00000001000000000000036e733107737572666e6574026e6c0000260001 e4af80000001000000040003036e733107737572666e6574026e6c0000260001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 43023 739700000001000000000000036e733103697870026e6c0000010001 739780000001000000020002036e733103697870026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d943e639c036000100010001518000043efa063f 43024 066d00000001000000000000036e733203697870026e6c0000010001 066d80000001000000020002036e733203697870026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d943e639c00c000100010001518000043efa063f 43025 077800000001000000000000037777770e6e62636465626c6f6b686f657665026e6c0000010001 077880000001000000030001037777770e6e62636465626c6f6b686f657665026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01fc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c051c033000100010001518000043efa0202 43026 75b20000000100000000000003777777116d616e6167656d656e74737570706f7274026e6c0000010001 75b28000000100000002000103777777116d616e6167656d656e74737570706f7274026e6c0000010001c0100002000100015180000d026e7307616d6572636f6dc022c01000020001000151800006036e7331c039c03600010001000151800004c2b2b20a 43027 243b0000000100000000000003777777046b726173026e6c0000010001 243b8000000100000002000003777777046b726173026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02f 43028 96fa0000000100000000000003777777146272616e64776565722d626f646567726176656e026e6c0000010001 96fa8000000100000002000003777777146272616e64776565722d626f646567726176656e026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c03f 43029 1e8400000001000000000000034e533203494e47026e6c0000010001 1e8480000001000000020002034e533203494e47026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 43030 245a00000001000000000000034e533103494e47026e6c0000010001 245a80000001000000020002034e533103494e47026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 43031 f96b000000010000000000000377777708696e746572616972026e6c0000010001 f96b800000010000000200020377777708696e746572616972026e6c0000010001c0100002000100015180000f036e7331086261726d61746f6ec019c01000020001000151800006036e7332c031c02d00010001000151800004d5a0da96c04800010001000151800004d5a0da64 43032 c34f0000000100000000000005646e732d31056c61646f74026e6c0000010001 c34f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43033 c3500000000100000000000005646e732d32056c61646f74026e6c0000010001 c3508000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43034 6c25000000010000000000000663617374656c026e6c00000f0001 6c25800000010000000200020663617374656c026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02700010001000151800004c3558244c03900010001000151800004c3558245 43035 f80500000001000000000000037777770a6d6573732d69636f6e73026e6c0000010001 f80580000001000000030003037777770a6d6573732d69636f6e73026e6c0000010001c0100002000100015180000a036e7331036f7068c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d5ef8033c04500010001000151800004d5efb033c05700010001000151800004d5ef8133 43036 2bee0000000100000000000008686f73746e616d650462696e640000100003 2bee8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 43037 a33300000001000000000000086167726963756c74026e6c0000ff0001 a33380000001000000020002086167726963756c74026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c015c00c00020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 43038 1da700000001000000000000036e7331046e732d31026e6c0000010001 1da780000001000000020002036e7331046e732d31026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045045a0cdc03700010001000151800004d4cceec8 43039 1e3100000001000000000000036e7332046e732d31026e6c0000010001 1e3180000001000000020002036e7332046e732d31026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc029000100010001518000045045a0cdc00c00010001000151800004d4cceec8 43040 6e60000000010000000000000377777711636f6e7261642d656c656374726f6e6963026e6c0000010001 6e60800000010000000200020377777711636f6e7261642d656c656374726f6e6963026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c022c01000020001000151800006036e7332c03ac0360001000100015180000450416028c05100010001000151800004c356780c 43041 862f0000000100000000000003777777026e75026e6c0000010001 862f8000000100000003000303777777026e75026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c027000100010001518000043e45a282c039000100010001518000043e45a283c04b000100010001518000043e45a284 43042 e5550000000100000000000006766f6e647374026e6c0000010001 e5558000000100000002000206766f6e647374026e6c0000010001c00c0002000100015180000c026e7306657374617465c013c00c00020001000151800006036e7332c02ac02700010001000151800004c2e5b501c03f00010001000151800004c2e5b506 43043 968600000001000000000000036e733203747565026e6c0000010001 968680000001000000030003036e733203747565026e6c0000010001c0100002000100015180000a0774756567617465c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004839b0203c00c00010001000151800004839b0303c04c00010001000151800004c0576a65 43044 df8700000001000000000000087472696f70736973026e6c00000f0001 df8784030001000000010000087472696f70736973026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 43045 052500000001000000000000037777770b64697265637476616c7565026e6c0000010001 052580000001000000020002037777770b64697265637476616c7565026e6c0000010001c01000020001000151800012036e73350b73696c766572706f696e74c01cc01000020001000151800006036e7336c034c0300001000100015180000450f7c702c04e0001000100015180000450f7c602 43046 820f0000000100000000000003777777106275726561756e6f6f7264656c6f6f73026e6c0000010001 820f8000000100000002000003777777106275726561756e6f6f7264656c6f6f73026e6c0000010001c0100002000100015180000c036e723105692d702d64c021c01000020001000151800006036e7232c039 43047 2f530000000100000000000008626173736c696e65026e6c0000ff0001 2f538000000100000002000108626173736c696e65026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c015c00c00020001000151800010036e733206776964657873036e657400c02900010001000151800004d4ccc0fc 43048 b2ff000000010000000000000377777703766964026e6c0000010001 b2ff800000010000000200020377777703766964026e6c0000010001c01000020001000151800011036e73310a616363657373706f7274c014c01000020001000151800006036e7332c02cc02800010001000151800004d4483408c04500010001000151800004d4483409 43049 2a6700000001000000000000147370656b736e696a6465727472616e73706f7274026e6c0000010001 2a6780000001000000020002147370656b736e696a6465727472616e73706f7274026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c021c00c00020001000151800006036e7332c038c03500010001000151800004d4cb0e42c05000010001000151800004d4cb1221 43050 e3cd00000001000000000000026e73076e656473746174026e6c00001c0001 e3cd80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43051 774400000001000000000000026e73076e656473746174026e6c0000260001 774480000001000000020002026e73076e656473746174026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43052 901300000001000000000000036e7332076e656473746174026e6c0000010001 901380000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43053 af1000000001000000000000036e7332076e656473746174026e6c00001c0001 af1080000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43054 e53b000000010000000000000f6e76686176656e6d6f657264696a6b026e6c0000ff0001 e53b800000010000000200010f6e76686176656e6d6f657264696a6b026e6c0000ff0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c01cc04900010001000151800004c2860043 43055 7e3900000001000000000000036e7332076e656473746174026e6c0000260001 7e3980000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43056 6c9500000001000000000000036e7333076e656473746174026e6c00001c0001 6c9580000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 43057 b6ca00000001000000000000036e7333076e656473746174026e6c0000260001 b6ca80000001000000020002036e7333076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 43058 841500000001000000000000036e7334076e656473746174026e6c00001c0001 841580000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43059 204a00000001000000000000036e7334076e656473746174026e6c0000260001 204a80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43060 18d10000000100000000000005696b616e61026e6c00000f0001 18d18000000100000003000005696b616e61026e6c00000f0001c00c00020001000151800011036e733107616e7977697365036e657400c00c00020001000151800006036e7332c02ac00c00020001000151800006036e7333c02a 43061 26040000000100000000000008434654562d30303304484f4d450c534f45524f44494b524f4d4f024e4c0000010001 26048403000100000001000008434654562d30303304484f4d450c534f45524f44494b524f4d4f024e4c0000010001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 43062 82d3000000010000000000000e677261706869636f6d67726f7570026e6c00000f0001 82d3840300010000000100000e677261706869636f6d67726f7570026e6c00000f0001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 43063 6d3c00000001000000000000067a7376737566026e6c0000010001 6d3c84030001000000010000067a7376737566026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 43064 d8df00000001000000000000046d61696c077468656669726d026e6c0000010001 d8df80000001000000020002046d61696c077468656669726d026e6c0000010001c01100020001000151800013036e73310c62656472696a76656e776562c019c01100020001000151800006036e7332c031c02d00010001000151800004d90867fec04c00010001000151800004c1ad2bfe 43065 96950000000100000000000003777777046a65676f026e6c0000010001 96958000000100000002000203777777046a65676f026e6c0000010001c0100002000100015180000d036e733106737072696e74c015c01000020001000151800006036e7332c02dc02900010001000151800004d973c202c04200010001000151800004d4ccd6a6 43066 0a6100000001000000000000077475656761746503747565026e6c0000010001 0a6180000001000000030003077475656761746503747565026e6c0000010001c01400020001000151800002c00cc01400020001000151800006036e7332c014c0140002000100015180000e036e733107737572666e6574c018c00c00010001000151800004839b0203c03a00010001000151800004839b0303c04c00010001000151800004c0576a65 43067 c6930000000100000000000004686f6d6506706c616e6574026e6c0000010001 c6938000000100000003000304686f6d6506706c616e6574026e6c0000010001c0110002000100015180000b046e73303803777873c018c01100020001000151800007046e733039c031c01100020001000151800006036e7334c031c02c00010001000151800004c3790128c04300010001000151800004c3790143c05600010001000151800004d5ef9a65 43068 eeb00000000100000000000003626c3402626c06787334616c6c026e6c0000010001 eeb08000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43069 f7580000000100000000000003626c3402626c06787334616c6c026e6c0000260001 f7588000000100000003000203626c3402626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43070 79f30000000100000000000003626c3102626c06787334616c6c026e6c0000010001 79f38000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43071 30e40000000100000000000009616e74686f6e796276026e6c00000f0001 30e48000000100000003000309616e74686f6e796276026e6c00000f0001c00c00020001000151800010036e733109736974656279746573c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a00010001000151800004c2a55e5ac04600010001000151800004c356781cc058000100010001518000043ec58016 43072 add500000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 add580000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43073 773500000001000000000000086c6f67696e2d6276026e6c0000020001 773580000001000000020002086c6f67696e2d6276026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 43074 7c670000000100000000000003777777066863636e6574026e6c0000010001 7c678000000100000002000003777777066863636e6574026e6c0000010001c010000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0100002000100015180000906617574683230c032 43075 43de00000001000000000000037777770766726565787878026e6c0000010001 43de80000001000000030003037777770766726565787878026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 43076 7f9500000001000000000000077468656669726d026e6c0000010001 7f9580000001000000020002077468656669726d026e6c0000010001c00c00020001000151800013036e73310c62656472696a76656e776562c014c00c00020001000151800006036e7332c02cc02800010001000151800004d90867fec04700010001000151800004c1ad2bfe 43077 d14e00000001000000000000037777771872656372656174696563656e7472616e656465726c616e64026e6c0000010001 d14e80000001000000020000037777771872656372656174696563656e7472616e656465726c616e64026e6c0000010001c01000020001000151800011036e73310a747770686f7374696e67c029c01000020001000151800006036e7332c041 43078 318c000000010000000000000e65722d74726176656c67726f7570026e6c00000f0001 318c800000010000000200000e65722d74726176656c67726f7570026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c035 43079 3877000000010000000000000233380233350236300236350a626c61636b686f6c657307656173796e6574026e6c0000050001 3877800000010000000200020233380233350236300236350a626c61636b686f6c657307656173796e6574026e6c0000050001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 43080 b560000000010000000000000d62616c6c6173742d6e6564616d026e6c00000f0001 b560800000010000000200010d62616c6c6173742d6e6564616d026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800013036e7332026e6c0669676e697465036e657400c02e000100010001518000043eadcea1 43081 ab2600000001000000000000027330026e6c0000010001 ab2680000001000000020002027330026e6c0000010001c00c0002000100015180000d026e73076e656473746174c00fc00c00020001000151800006036e7333c026c02300010001000151800004d4482615c03c00010001000151800004d5c4021d 43082 2f6500000001000000000000037777770674726f66656f026e6c0000010001 2f6580000001000000020001037777770674726f66656f026e6c0000010001c0100002000100015180000a036e733303777873c017c01000020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 43083 9da800000001000000000000037777770472696765026e6c0000010001 9da880000001000000020002037777770472696765026e6c0000010001c0100002000100015180000c036e733105636176656fc015c01000020001000151800006036e7332c02dc029000100010001518000045112a002c041000100010001518000045112a102 43084 34c40000000100000000000008616473657276657206776562616473026e6c0000010001 34c48000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 43085 5810000000010000000000000a6865696a6e656b616d70026e6c00000f0001 5810800000010000000200000a6865696a6e656b616d70026e6c00000f0001c00c00020001000151800017036e73310d6465696e7465726e65746d616e036e657400c00c00020001000151800006036e7332c02f 43086 434900100001000000000001036e7331066d696e646566026e6c00000100010000290800000080000000 434980000001000000020003036e7331066d696e646566026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9a9e7c6c03900010001000151800004d9a9e7c50000291000000000000000 43087 895b00100001000000000001036e7332066d696e646566026e6c00000100010000290800000080000000 895b80000001000000020003036e7332066d696e646566026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d9a9e7c6c00c00010001000151800004d9a9e7c50000291000000000000000 43088 5fe500000001000000000000096d61696c72656c6179096b656e6e69736e6574026e6c0000010001 5fe580000001000000020002096d61696c72656c6179096b656e6e69736e6574026e6c0000010001c01600020001000151800006036e7339c016c0160002000100015180000e036e733207737572666e6574c020c03400010001000151800004c0576a61c04600010001000151800004c0572402 43089 35b60000000100000000000003777777077a65737469656e026e6c0000010001 35b68000000100000002000203777777077a65737469656e026e6c0000010001c0100002000100015180000e036e7331076e6174616c6965c018c01000020001000151800006036e7332c030c02c000100010001518000043e94a116c046000100010001518000043e94a117 43090 f98528000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026763065f6d73646373064148584c3032026e6c000021000100000258001c000000640cc40a646330316168786c3032064148584c3032026e6c00 f985a8040000000000000000 43091 cba700000001000000000000096d61696c72656c6179066e6c74726565026e6c0000010001 cba780000001000000020002096d61696c72656c6179066e6c74726565026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c03100010001000151800004d4b20403c04300010001000151800004d5881e45 43092 4e1100000001000000000000126c6f676973696e7465726e6174696f6e616c026e6c0000020001 4e1180000001000000020002126c6f676973696e7465726e6174696f6e616c026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01fc00c00020001000151800006036e7332c037c03300010001000151800004c29f4906c04b00010001000151800004c29fb004 43093 53f500000001000000000000036e7064026e6c00000f0001 53f580000001000000020000036e7064026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c028 43094 69c200000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 69c280000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43095 f40600000001000000000000037777770b63686573617065616b6573026e6c0000010001 f40680000001000000020002037777770b63686573617065616b6573026e6c0000010001c01000020001000151800015036e73310e726567696f70726f766964657273c01cc01000020001000151800006036e7332c034c03000010001000151800004d41da001c05100010001000151800004d41da1fe 43096 fe1600000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 fe1680000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43097 15170000000100000000000003777777047769616c026e6c0000010001 15178000000100000002000203777777047769616c026e6c0000010001c0100002000100015180000f036e733108676c6f62616c2d65c015c01000020001000151800006036e7332c02dc02900010001000151800004d4f132c8c04400010001000151800004d4f132d3 43098 d21500000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 d21580000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43099 05e900000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 05e980000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43100 abb700000001000000000000036e733503777873026e6c0000010001 abb780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 43101 27320000000100000000000003626c3402626c06787334616c6c026e6c0000010001 27328000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43102 cd3600000001000000000000037777770461676f65026e6c0000010001 cd3680000001000000020002037777770461676f65026e6c0000010001c0100002000100015180000f026e7309656174736572766572c015c01000020001000151800006036e7332c02cc02900010001000151800004d4cb0e42c04400010001000151800004d4cb1221 43103 000000007002faf0e1130000020405b401010402 000080010000000000000000 43104 0f1000000001000000000000046e7330320462696374026e6c0000010001 0f1080000001000000020002046e7330320462696374026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc02a00010001000151800004d413d6c8c00c00010001000151800004d413d604 43105 078800000001000000000000046e7330310462696374026e6c0000010001 078880000001000000020002046e7330310462696374026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733032c011c00c00010001000151800004d413d6c8c03800010001000151800004d413d604 43106 4203000000010000000000000a6970393133353136343805737065656406706c616e6574026e6c0000010001 4203800000010000000300030a6970393133353136343805737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 43107 b8676c6a5010faf0e8f50000000000000000 b867ec640000000000000000 43108 b8676c6a5018faf0d99f0000008f5be8000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afda7403c4f270003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000444330314148584c30324148584c30320000 b867ec640000000000000000 43109 06ed00000001000000000000037777770a656967656e77696a6b73026e6c0000010001 06ed80000001000000030001037777770a656967656e77696a6b73026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 43110 a122000000010000000000000b6d756c7469737065656473026e6c00000f0001 a122800000010000000200020b6d756c7469737065656473026e6c00000f0001c00c00020001000151800012036e73350b73696c766572706f696e74c018c00c00020001000151800006036e7336c030c02c0001000100015180000450f7c702c04a0001000100015180000450f7c602 43111 3fa300000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373065363686f6f6c026e6c0000060001 3fa380000001000000020001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d73646373065363686f6f6c026e6c0000060001c04400020001000151800015086e732d69736d30310963617067656d696e69c04bc0440002000100015180000b086e732d69736d3032c068c05f00010001000151800004d5f4a024 43112 3af2000000010000000000000767657477656c6c026e6c00001c0001 3af2800000010000000300010767657477656c6c026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 43113 bef200000001000000000000057669706572086f6e7468616e6574026e6c0000010001 bef280000001000000020000057669706572086f6e7468616e6574026e6c0000010001c0120002000100015180000e036e73300470707365036e657400c01200020001000151800006036e7331c033 43114 b8676c785011fae2e8630000000000000000 b867ec740000000000000000 43115 88c80000000100000000000003656170026e6c00000f0001 88c88000000100000002000203656170026e6c00000f0001c00c0002000100015180000d036e7331066e6574636f6ec010c00c00020001000151800006036e7332c028c0240001000100015180000450f7ce01c03d0001000100015180000450f7cf01 43116 000000007002faf0b9b20000020405b401010402 000080010000000000000000 43117 b8676c795010fae2e8620000000000000000 b867ec740000000000000000 43118 72790000000100000000000008696e74657276616c026e6c0000010001 72798000000100000002000208696e74657276616c026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 43119 3204000000010000000000000765787065646961026e6c0000010001 3204800000010000000200000765787065646961026e6c0000010001c00c000200010001518000140570646e733108726567697374657203636f6d00c00c000200010001518000080570646e7332c02e 43120 3b940000000100000000000009652d6c756e61746963026e6c0000010001 3b948000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 43121 1af7000000010000000000000b7374617274706167696e61026e6c00001c0001 1af7800000010000000300030b7374617274706167696e61026e6c00001c0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 43122 4eb300000001000000000000036e7331066d696e646566026e6c0000010001 4eb380000001000000020002036e7331066d696e646566026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9a9e7c6c03900010001000151800004d9a9e7c5 43123 714000000001000000000000036e7332066d696e646566026e6c0000010001 714080000001000000020002036e7332066d696e646566026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b00010001000151800004d9a9e7c6c00c00010001000151800004d9a9e7c5 43124 802e00000001000000000000037777770475737069026e6c0000010001 802e80000001000000020002037777770475737069026e6c0000010001c0100002000100015180000b036e733104696e666fc015c01000020001000151800006036e7332c02dc02900010001000151800004504fc020c04000010001000151800004504fc021 43125 b8684f895010faf0de740000000000000000 b868cf840000000000000000 43126 bef100000001000000000000046865726101780463756369026e6c0000010001 bef180000001000000030003046865726101780463756369026e6c0000010001c01300020001000151800002c00cc0130002000100015180000c066865726d6573026e6cc013c01300020001000151800009066865726d6573c011c00c00010001000151800004d47d8001c03a00010001000151800004c143ef02c05200010001000151800004d47d8002 43127 eaac00000001000000000000066865726d657301780463756369026e6c0000010001 eaac80000001000000030003066865726d657301780463756369026e6c0000010001c015000200010001518000070468657261c013c0150002000100015180000c066865726d6573026e6cc015c01500020001000151800002c00cc02e00010001000151800004d47d8001c04100010001000151800004c143ef02c00c00010001000151800004d47d8002 43128 f55600000001000000000000066865726d6573026e6c0463756369026e6c0000010001 f55680000001000000030003066865726d6573026e6c0463756369026e6c0000010001c0160002000100015180000904686572610178c016c01600020001000151800002c00cc01600020001000151800009066865726d6573c034c02f00010001000151800004d47d8001c00c00010001000151800004c143ef02c05200010001000151800004d47d8002 43129 7aa50000000100000000000005776f64616e0369637303656c6503747565026e6c0000010001 7aa58000000100000003000305776f64616e0369637303656c6503747565026e6c0000010001c01a0002000100015180000a0774756567617465c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec03200010001000151800004839b0203c04800010001000151800004839b0303c05a00010001000151800004c0576a65 43130 599d00000001000000000000106b6e6873726567696f62726162616e74026e6c00000f0001 599d80000001000000020000106b6e6873726567696f62726162616e74026e6c00000f0001c00c0002000100015180001505646e7332300961637469766569737003636f6d00c00c0002000100015180000805646e733231c037 43131 b8684f895018faf0a85b0000008f83ac000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afda7403c4f270003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000444330314148584c30324148584c30320000 b868cf840000000000000000 43132 2c8300000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000010001 2c8380000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 43133 705a00000001000000000000036e73320d63656e747269636f6e6c696e65026e6c0000010001 705a80000001000000020002036e73320d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d481ec0cc00c00010001000151800004d590e63a 43134 c9f40010000100000000000103777777076e65746c696e71026e6c00000100010000290800000080000000 c9f48000000100000002000303777777076e65746c696e71026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c018c01000020001000151800006036e7332c02fc02c00010001000151800004d9aa2042c04500010001000151800004d9aa2c060000291000000000000000 43135 9c320000000100000000000009706974616374696566026e6c00000f0001 9c328000000100000003000309706974616374696566026e6c00000f0001c00c0002000100015180000d046e733031056d61636f6ec016c00c00020001000151800007046e733032c02fc00c00020001000151800007046e733033c02fc02a000100010001518000045360bc03c043000100010001518000045360bc04c0560001000100015180000450454704 43136 ce19000000010000000000000a737970726f6d65646961026e6c00000f0001 ce19800000010000000200020a737970726f6d65646961026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d4cb0e42c04600010001000151800004d4cb1221 43137 b9d000000001000000000000066d61737465720364746f07747564656c6674026e6c00001c0001 b9d080000001000000050005066d61737465720364746f07747564656c6674026e6c00001c0001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 43138 d6f80000000100000000000003777777086e74652d6d61696c026e6c0000010001 d6f88000000100000002000103777777086e74652d6d61696c026e6c0000010001c01000020001000151800012036e733107686f7374696e6703656269c019c0100002000100015180000d03646e73036b706e03636f6d00c02d00010001000151800004c1ad9c46 43139 d57a00000001000000000000026e7303616d730874656c6567617465026e6c0000010001 d57a80000001000000030000026e7303616d730874656c6567617465026e6c0000010001c01300020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01300020001000151800006036e7332c034c01300020001000151800006036e7333c034 43140 b8684f975011fae2dde20000000000000000 b868cf940000000000000000 43141 6f690000000100000000000003626c3102626c06787334616c6c026e6c00001c0001 6f698000000100000003000203626c3102626c06787334616c6c026e6c00001c0001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43142 928f0000000100000000000004636f72700968617a6c65776f6f64026e6c0000060001 928f8403000100000001000004636f72700968617a6c65776f6f64026e6c0000060001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 43143 000000007002faf096770000020405b401010402 000080010000000000000000 43144 94c500000001000000000000036d6567026e6c0000010001 94c580000001000000020000036d6567026e6c0000010001c00c0002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c00c0002000100015180000805726f6b696ec02b 43145 109800000001000000000000066d61737465720364746f07747564656c6674026e6c0000260001 109880000001000000050005066d61737465720364746f07747564656c6674026e6c0000260001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 43146 03da000000010000000000000473746172026373027675026e6c0000010001 03da800000010000000300030473746172026373027675026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800002c00cc0140002000100015180000e036e733107737572666e6574c017c02b0001000100015180000482258104c00c00010001000151800004c01fe72ac04a00010001000151800004c0576a65 43147 380f0000000100000000000003613262026e6c0000ff0001 380f8000000100000002000203613262026e6c0000ff0001c00c0002000100015180000f036e733108696c696d62757267c010c00c00020001000151800006036e7332c028c02400010001000151800004c2b26281c03f00010001000151800004c2b262f7 43148 8c0600000001000000000000036e73320c776562666f726d616c697479026e6c0000010001 8c0680000001000000020002036e73320c776562666f726d616c697479026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0310001000100015180000451047310c00c0001000100015180000451047311 43149 d5d200000001000000000000036e73310c776562666f726d616c697479026e6c0000010001 d5d280000001000000020002036e73310c776562666f726d616c697479026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451047310c03f0001000100015180000451047311 43150 b8684f985010fae2dde10000000000000000 b868cf940000000000000000 43151 b868d4a65010faf0361c0000000000000000 43152 5b160000000100000000000003777777096f70746973706f7274026e6c0000010001 5b168000000100000002000203777777096f70746973706f7274026e6c0000010001c0100002000100015180000a036e733103686978c01ac01000020001000151800006036e7332c032c02e00010001000151800004d5a0da0ac0440001000100015180000451112ec3 43153 8b5b0000000100000000000003777777046f70656c026e6c0000010001 8b5b8000000100000002000203777777046f70656c026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec015c01000020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 43154 0cd8000000010000000000000377777708656c7a656e616172026e6c0000010001 0cd8800000010000000200020377777708656c7a656e616172026e6c0000010001c0100002000100015180000f026e7309656174736572766572c019c01000020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 43155 ff35000000010000000000000673617479616d026e6c00000f0001 ff35840300010000000100000673617479616d026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 43156 b8b700000001000000000000076b75707769656c026e6c0000010001 b8b780000001000000020000076b75707769656c026e6c0000010001c00c0002000100015180000d036e7333036b706e036e657400c00c00020001000151800006036e7334c02c 43157 deda00000001000000000000037777770b78787868617264636f7265026e6c0000010001 deda80000001000000030003037777770b78787868617264636f7265026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc01cc0100002000100015180000704646e7332c035c0100002000100015180000704646e7333c035c03000010001000151800004d44fe803c04a00010001000151800004c3f5c782c05d00010001000151800004d44ff303 43158 df1b00000001000000000000037777770b78787868617264636f7265026e6c0000010001 df1b80000001000000030003037777770b78787868617264636f7265026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc01cc0100002000100015180000704646e7332c035c0100002000100015180000704646e7333c035c03000010001000151800004d44fe803c04a00010001000151800004c3f5c782c05d00010001000151800004d44ff303 43159 b76a00000001000000000000037777770b78787868617264636f7265026e6c0000010001 b76a80000001000000030003037777770b78787868617264636f7265026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc01cc0100002000100015180000704646e7332c035c0100002000100015180000704646e7333c035c03000010001000151800004d44fe803c04a00010001000151800004c3f5c782c05d00010001000151800004d44ff303 43160 b868d4a65018faf0bc1c0000008fc792000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afda7403c4f270003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000444330314148584c30324148584c30320000 43161 4a69000000010000000000000377777706732d63617264026e6c0000010001 4a69800000010000000200020377777706732d63617264026e6c0000010001c0100002000100015180000a026e730469636d63c017c01000020001000151800006036e7332c02ec02b000100010001518000043e643805c041000100010001518000043e643806 43162 1486000000010000000000000377777703696578026e6c0000010001 1486800000010000000300000377777703696578026e6c0000010001c0100002000100015180001607646e732d65753108706f776572646e73036e657400c0100002000100015180000a07646e732d757331c030c0100002000100015180000a07646e732d657532c030 43163 591900000001000000000000086d656c6368696e67026e6c00000f0001 591980000001000000020002086d656c6368696e67026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c015c00c00020001000151800006036e7332c02dc0290001000100015180000450416028c04400010001000151800004c356780c 43164 2354000000010000000000000377777703666f78026e6c0000010001 2354800000010000000200020377777703666f78026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c028000100010001518000043e320da2c03a000100010001518000043ed48264 43165 b868d4b45011fae2358a0000000000000000 43166 e931000000010000000000000d6c6f67697374696368616e6473026e6c0000020001 e931800000010000000200020d6c6f67697374696368616e6473026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ac00c00020001000151800006036e7332c032c02e00010001000151800004c29f4906c04600010001000151800004c29fb004 43167 448000000001000000000000036d783306787334616c6c026e6c0000010001 448080000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 43168 321400000001000000000000036e733203666f78026e6c0000010001 321480000001000000020002036e733203666f78026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc028000100010001518000043e320da2c00c000100010001518000043ed48264 43169 d06900000001000000000000036e733103666f78026e6c0000010001 d06980000001000000020002036e733103666f78026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e320da2c036000100010001518000043ed48264 43170 b868d4b55010fae235890000000000000000 43171 93610000000100000000000004747a6468026e6c0000010001 93618000000100000002000204747a6468026e6c0000010001c00c0002000100015180000e0b6e616d6573657276657231c011c00c0002000100015180000e0b6e616d6573657276657232c011c02500010001000151800004c1acb692c03f00010001000151800004d48e0602 43172 855100000001000000000000037777771364616e737363686f6f6c77657373656c696e67026e6c0000010001 855180000001000000020002037777771364616e737363686f6f6c77657373656c696e67026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c024c01000020001000151800006036e7332c03cc038000100010001518000045104580ac058000100010001518000045104601e 43173 68220000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 68228000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 43174 95e90000000100000000000006666174696d6103646473026e6c0000010001 95e98000000100000003000306666174696d6103646473026e6c0000010001c01300020001000151800017036e733110736361726c65742d696e7465726e6574c017c01300020001000151800006036e7332c02fc01300020001000151800006036e7333c02fc02b00010001000151800004d5ccc302c04e00010001000151800004d5ccc303c06000010001000151800004c277e953 43175 26fe000000010000000000000670726f646973056e76776d6e026e6c0000010001 26fe800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 43176 799700000001000000000000056d69726d61026e6c00000f0001 799780000001000000020000056d69726d61026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02c 43177 328e00000001000000000000026e73096b656e6e69736e6574026e6c0000010001 328e80000001000000020002026e73096b656e6e69736e6574026e6c0000010001c00f00020001000151800006036e7339c00fc00f0002000100015180000e036e733207737572666e6574c019c02d00010001000151800004c0576a61c03f00010001000151800004c0572402 43178 73e700000001000000000000036e7333096b656e6e69736e6574026e6c0000010001 73e780000001000000020002036e7333096b656e6e69736e6574026e6c0000010001c01000020001000151800006036e7339c010c0100002000100015180000e036e733207737572666e6574c01ac02e00010001000151800004c0576a61c04000010001000151800004c0572402 43179 c1fd00000001000000000000036e7331077569746c696a6e026e6c0000010001 c1fd80000001000000020002036e7331077569746c696a6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e3aa5fbc03a00010001000151800004d4ccfc79 43180 c3eb00000001000000000000036e7331077569746c696a6e026e6c0000260001 c3eb80000001000000020002036e7331077569746c696a6e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043e3aa5fbc03a00010001000151800004d4ccfc79 43181 a91000000001000000000000036e7332077569746c696a6e026e6c0000010001 a91080000001000000020002036e7332077569746c696a6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043e3aa5fbc00c00010001000151800004d4ccfc79 43182 6a0900000001000000000000036e7332077569746c696a6e026e6c0000260001 6a0980000001000000020002036e7332077569746c696a6e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043e3aa5fbc00c00010001000151800004d4ccfc79 43183 703a00000001000000000000036e73310769736973776562026e6c0000010001 703a80000001000000030003036e73310769736973776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7334c010c00c00010001000151800004d4ccca65c03a00010001000151800004510440dec04c00010001000151800004510440fa 43184 a29100000001000000000000036e733503777873026e6c0000010001 a29180000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 43185 204e00000001000000000000036e733503777873026e6c0000260001 204e80000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 43186 a7970000000100000000000003777777086d6f736b776f6f64026e6c0000010001 a7978000000100000002000203777777086d6f736b776f6f64026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 43187 9a23000000010000000000000377777707746f7063617368026e6c0000010001 9a23800000010000000200020377777707746f7063617368026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c018c01000020001000151800006036e7332c030c02c0001000100015180000452c04516c0490001000100015180000452c04542 43188 a86200000001000000000000036e7332086d65646961776562026e6c0000010001 a86280000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 43189 155a00000001000000000000036e7333086d65646961776562026e6c0000010001 155a80000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 43190 ecc600000001000000000000036e733206313233623262026e6c0000010001 ecc680000001000000020002036e733206313233623262026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02b000100010001518000045054e5b5c00c000100010001518000045054e5b6 43191 a2d10000000100000000000008686f73746e616d650462696e640000100003 a2d18000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 43192 0bf500000001000000000000056e696575770d73696d70656c636f6e74656e74026e6c0000010001 0bf580000001000000030003056e696575770d73696d70656c636f6e74656e74026e6c0000010001c0120002000100015180000c036e7331056d61786573c020c01200020001000151800006036e7332c038c01200020001000151800006036e7333c038c034000100010001518000045045402ec04c000100010001518000045045402fc05e000100010001518000045045440a 43193 88480000000100000000000003656465026e6c00000f0001 88488000000100000002000103656465026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c02400010001000151800004d5a0fd2a 43194 370b00000001000000000000036e73310973746172746d657570026e6c00001c0001 370b80000001000000020002036e73310973746172746d657570026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4cb1d01c03c00010001000151800004d4cb1d02 43195 243f00000001000000000000036e73320973746172746d657570026e6c00001c0001 243f80000001000000020002036e73320973746172746d657570026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d4cb1d01c00c00010001000151800004d4cb1d02 43196 8e8800100001000000000001036e733103757063026e6c00000100010000290800000080000000 8e8880000001000000030004036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c01410000291000000000000000 43197 c74400100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000080000000 c74480000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 43198 6bd20000000100000000000003777777077569746c696a6e026e6c0000010001 6bd28000000100000002000203777777077569746c696a6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c000100010001518000043e3aa5fbc03e00010001000151800004d4ccfc79 43199 fcc800000001000000000000037777770a636f6d70757365727665026e6c0000010001 fcc880000001000000020000037777770a636f6d70757365727665026e6c0000010001c0100002000100015180001f0e61726c2d6e616d652d7376632d310a636f6d7075736572766503636f6d00c010000200010001518000110e6475622d6e616d652d7376632d31c03e 43200 487a0000000100000000000003777777076631746f646179026e6c0000010001 487a8000000100000002000003777777076631746f646179026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c031 43201 368000000001000000000000067a65706879720473656d61026e6c0000010001 368080000001000000030003067a65706879720473656d61026e6c0000010001c01300020001000151800012047072693103646e73067073696e6574c018c013000200010001518000070470726932c031c013000200010001518000070470726933c031c02c000100010001518000049a0ff9a6c04a000100010001518000049a0ff9aac05d000100010001518000049a0ff9ae 43202 8c980000000100000000000003777777036e7263026e6c0000010001 8c988000000100000003000203777777036e7263026e6c0000010001c01000020001000151800015036e73310b70696e6b726f6363616465036e657400c0100002000100015180000e026e73086d656761706c6578c014c01000020001000151800006036e7331c04cc04900010001000151800004504f6101c06300010001000151800004504f6102 43203 01f128000001000200000000026e6c00000600010970635f706965746572056c6f63616c0768616d61746e6c026e6c00000500fe000000000000c0140001000100000000000484a49332 01f1a8040000000000000000 43204 f11800000001000000000000046d61696c0c6c696e6765636f6c6c656765026e6c0000010001 f11880000001000000020002046d61696c0c6c696e6765636f6c6c656765026e6c0000010001c0110002000100015180000d026e730763697374726f6ec01ec01100020001000151800006036e7332c035c032000100010001518000043ed81f37c04b000100010001518000043ed81f38 43205 3941000000010000000000000a7a65656c616e646e6574026e6c0000010001 3941800000010000000200020a7a65656c616e646e6574026e6c0000010001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc02b00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 43206 2cf70000000100000000000005776f64616e0369637303656c6503747565026e6c0000010001 2cf78000000100000003000305776f64616e0369637303656c6503747565026e6c0000010001c01a0002000100015180000a0774756567617465c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec03200010001000151800004839b0203c04800010001000151800004839b0303c05a00010001000151800004c0576a65 43207 cbcb0010000100000000000106787334616c6c026e6c00000f00010000290800000080000000 cbcb8000000100000003000306787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 43208 a13d000000010000000000000b737175617368776f726c64026e6c00000f0001 a13d800000010000000200000b737175617368776f726c64026e6c00000f0001c00c00020001000151800018036e73370e666c6578776562686f7374696e6703636f6d00c00c00020001000151800006036e7338c030 43209 328000000001000000000000037777770431363439026e6c0000010001 328084030001000000010000037777770431363439026e6c0000010001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 43210 ca2300000001000000000000077765626d61696c096c6f67696361636d67026e6c0000010001 ca2380000001000000020000077765626d61696c096c6f67696361636d67026e6c0000010001c0140002000100015180000c026e7303636d6703636f6d00c0140002000100015180000b026e73026e6c036e657400 43211 3bcb0000000100000000000006787334616c6c026e6c00000f0001 3bcb8000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 43212 aa570000000100000000000003777777116d6f746f72626575727375747265636874026e6c0000010001 aa578000000100000002000203777777116d6f746f72626575727375747265636874026e6c0000010001c0100002000100015180000c026e7306787334616c6cc022c01000020001000151800006036e7332c039c03600010001000151800004c26d0642c04e00010001000151800004c26d0963 43213 000000007002faf0285d0000020405b401010402 000080010000000000000000 43214 48d10000000100000000000003626c3102626c06787334616c6c026e6c0000010001 48d18000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43215 777b0000000100000000000003777777087465656e2d736578026e6c0000010001 777b8000000100000002000203777777087465656e2d736578026e6c0000010001c0100002000100015180000a036e733103647768c019c01000020001000151800006036e7332c031c02d00010001000151800004d5efb308c04300010001000151800004d5efb303 43216 8aa30000000100000000000003626c3102626c06787334616c6c026e6c0000260001 8aa38000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43217 171a0000000100000000000005646e732d31056c61646f74026e6c0000010001 171a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43218 b86a79785010faf0232e0000000000000000 b86af9740000000000000000 43219 b86a79785018faf049cd0000008da9c3000000010001000000000e3839333335333139373538362d330000f900010e3839333335333139373538362d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdb8403c4f380003000000304e544c4d535350000100000097b208e00700070029000000090009002000000050435f50494554455248414d41544e4c0000 b86af9740000000000000000 43220 b0f900000001000000000000037777770972656c69706c65696e026e6c0000010001 b0f980000001000000020001037777770972656c69706c65696e026e6c0000010001c01000020001000151800014096361636f666f6e697803756369036b756ec01ac0100002000100015180000b086361707962617261c038c04e0001000100015180000483ae3c15 43221 b8df001000010000000000010766313031303836057570632d66066368656c6c6f026e6c00000100010000290800000080000000 b8df800000010000000300040766313031303836057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c420000291000000000000000 43222 2bf700000001000000000000036e73310974656c656b6162656c026e6c0000010001 2bf780000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 43223 da4900000001000000000000036e733103757063026e6c0000010001 da4980000001000000030003036e733103757063026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e046e733032066368656c6c6fc014c0100002000100015180000c036e7331056132303030c014c00c00010001000151800004d48e1c42c03600010001000151800004d4534483c050000100010001518000043e6c0141 43224 b86a79865011fae2229e0000000000000000 b86af9840000000000000000 43225 772800000001000000000000046e733032066368656c6c6f026e6c0000010001 772880000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 43226 7e2a00000001000000000000037777770c62616b656e2d6f6e6c696e65026e6c0000010001 7e2a80000001000000020002037777770c62616b656e2d6f6e6c696e65026e6c0000010001c01000020001000151800012036e73310b737461727464657369676ec01dc01000020001000151800006036e7332c035c03100010001000151800004d5f73823c04f000100010001518000043ed45149 43227 f75700000001000000000000046265616e026e6c00001c0001 f75780000001000000020002046265616e026e6c00001c0001c00c00020001000151800010036e733109696e746572686f7374c011c00c00020001000151800006036e7335c029c02500010001000151800004d91a7429c04100010001000151800004d554e583 43228 84ce000000010000000000000f57533031352d64616e69656c6c657304636f72700968617a6c65776f6f64026e6c0000060001 84ce840300010000000100000f57533031352d64616e69656c6c657304636f72700968617a6c65776f6f64026e6c0000060001c02b00060001000038400036026e730f646f6d61696e2d7265676973747279c02b0a686f73746d6173746572c0420bf1e540000070800000384000278d0000003840 43229 2aef0000000100000000000003796670026e6c00000f0001 2aef8000000100000002000203796670026e6c00000f0001c00c0002000100015180000d046e73303105696e6f726dc010c00c00020001000151800007046e733032c029c02400010001000151800004d973c41ac03d00010001000151800004d973c41c 43230 20a6000000010000000000000a6970353033633431633405737065656406706c616e6574026e6c0000010001 20a6800000010000000300030a6970353033633431633405737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 43231 341100000001000000000000037777770472696765026e6c0000010001 341180000001000000020002037777770472696765026e6c0000010001c0100002000100015180000c036e733105636176656fc015c01000020001000151800006036e7332c02dc029000100010001518000045112a002c041000100010001518000045112a102 43232 000000007002faf025ca0000020405b401010402 000080010000000000000000 43233 b86a79875010fae2229d0000000000000000 b86af9840000000000000000 43234 326c00000001000000000000036e733109756e69736572766572026e6c0000010001 326c80000001000000020002036e733109756e69736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3454b03c03c00010001000151800004d119a2fa 43235 b86b60fc5010faf039160000000000000000 b86be0f40000000000000000 43236 b86b60fc5018faf03bd00000008dcfa8000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdb8403c4f380003000000304e544c4d535350000100000097b208e00700070029000000090009002000000050435f50494554455248414d41544e4c0000 b86be0f40000000000000000 43237 c358000000010000000000000661726f3131310861726f6e736f686e026e6c0000010001 c358800000010000000300030661726f3131310861726f6e736f686e026e6c0000010001c0130002000100015180000f036e7331086e6f766178657373c01cc01300020001000151800006036e7332c034c01300020001000151800006036e7333c034c03000010001000151800004d5c98015c04b00010001000151800004d5c9bf12c05d00010001000151800004d5ef9c26 43238 b86b610a5011fae238860000000000000000 b86be1040000000000000000 43239 030f00100001000000000001046e65777306787334616c6c026e6c0000ff00010000290800000080000000 030f80000001000000030003046e65777306787334616c6c026e6c0000ff0001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d09630000291000000000000000 43240 9a820000000100000000000004504f4132026e6c0000010001 9a828403000100000001000004504f4132026e6c0000010001c01100060001000038400036026e730f646f6d61696e2d7265676973747279c0110a686f73746d6173746572c0280bf1e540000070800000384000278d0000003840 43241 d134000000010000000000000377777708626c616465746d63026e6c0000010001 d134800000010000000200020377777708626c616465746d63026e6c0000010001c01000020001000151800011036e73310a726564686f7374696e67c019c01000020001000151800006036e7332c031c02d00010001000151800004d5efa404c04a00010001000151800004d5efa405 43242 dda5000000010000000000000766313031303836057570632d66066368656c6c6f026e6c0000010001 dda5800000010000000300030766313031303836057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 43243 c01700000001000000000000036e73330767617574656e67026e6c0000010001 c01780000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43244 f25c00000001000000000000036e73340767617574656e67026e6c0000010001 f25c80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43245 d4ed0000000100000000000009652d6c756e61746963026e6c0000010001 d4ed8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 43246 b46a0000000100000000000009652d6c756e61746963026e6c0000010001 b46a8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 43247 000000007002faf0f53f0000020405b401010402 000080010000000000000000 43248 b86b610b5010fae238850000000000000000 b86be1040000000000000000 43249 820400000001000000000000036e733103616270026e6c0000010001 820480000001000000020001036e733103616270026e6c0000010001c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c1adc287 43250 b86bf32d5010faf0765a0000000000000000 43251 2e8900000001000000000000067a65706879720473656d61026e6c0000010001 2e8980000001000000030003067a65706879720473656d61026e6c0000010001c01300020001000151800012047072693103646e73067073696e6574c018c013000200010001518000070470726932c031c013000200010001518000070470726933c031c02c000100010001518000049a0ff9a6c04a000100010001518000049a0ff9aac05d000100010001518000049a0ff9ae 43252 b86bf32d5018faf05d640000008deb58000000010001000000000e3839333335333139373538362d320000f900010e3839333335333139373538362d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afdb8403c4f380003000000304e544c4d535350000100000097b208e00700070029000000090009002000000050435f50494554455248414d41544e4c0000 43253 b195000000010000000000000769746f6c616e67026e6c00000f0001 b195800000010000000200020769746f6c616e67026e6c00000f0001c00c0002000100015180000f036e7331086974736c6f676963c014c00c0002000100015180000e026e7308646961706c617a61c014c02800010001000151800004d59ae111c04300010001000151800004c2a54621 43254 cd9b000000010000000000000377777709626f6f746e6f646967026e6c0000010001 cd9b800000010000000200020377777709626f6f746e6f646967026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01ac01000020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 43255 b86bf33b5011fae275ca0000000000000000 43256 3bd5000000010000000000000563696e6475026e6c00000f0001 3bd5800000010000000200000563696e6475026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 43257 5ac300000001000000000000086263742d6263746e026e6c00000f0001 5ac380000001000000020002086263742d6263746e026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 43258 e42f00000001000000000000037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001 e42f80000001000000030003037777770f686f726f73636f6f706f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c034000100010001518000043e45a282c046000100010001518000043e45a283c058000100010001518000043e45a284 43259 b86bf33c5010fae275c90000000000000000 43260 a29a000000010000000000000a6c6f6b61616c756e6974026e6c0000020001 a29a800000010000000200020a6c6f6b61616c756e6974026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 43261 63e7000000010000000000000b76616e77696a6b76657266026e6c00001c0001 63e7800000010000000200000b76616e77696a6b76657266026e6c00001c0001c00c0002000100015180000f04686e73300774697363616c69c018c00c0002000100015180000704686e7331c031 43262 2ed70000000100000000000007706963736572760e6265796f6e642d7265616c697479026e6c0000010001 2ed78000000100000002000207706963736572760e6265796f6e642d7265616c697479026e6c0000010001c0140002000100015180000d036e73310674696b74616bc023c01400020001000151800009036e733202696fc023c037000100010001518000045111281dc0500001000100015180000451112202 43263 ccc500000001000000000000037777770b7275696c65656e6c696e6b026e6c0000010001 ccc580000001000000020000037777770b7275696c65656e6c696e6b026e6c0000010001c01000020001000151800014036e73310d666c65746873686f7374696e67c01cc01000020001000151800006036e7332c034 43264 c3f90000000100000000000003766261026e6c00000f0001 c3f98000000100000003000203766261026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000b026e73026e6c036e657400c02400010001000151800004d4883c23c03600010001000151800004c14e4887 43265 9f0800000001000000000000046e65777306787334616c6c026e6c0000ff0001 9f0880000001000000030002046e65777306787334616c6c026e6c0000ff0001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 43266 06b228000001000200000000026e6c000006000109696e7465726e65743105656c616e32026e6c00000500fe000000000000c01400010001000000000004640a0a02 06b2a8040000000000000000 43267 000000007002faf085460000020405b401010402 000080010000000000000000 43268 b3de0000000100000000000003777777076e65746661726d026e6c0000010001 b3de8000000100000002000203777777076e65746661726d026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c018c01000020001000151800006036e7332c030c02c00010001000151800004505fa002c04700010001000151800004505fac02 43269 168a00000001000000000000037777770c6631636f6d70657469746965026e6c0000010001 168a80000001000000030003037777770c6631636f6d70657469746965026e6c0000010001c0100002000100015180000c036e7331056d61786573c01dc01000020001000151800006036e7332c035c01000020001000151800006036e7333c035c031000100010001518000045045402ec049000100010001518000045045402fc05b000100010001518000045045440a 43270 b86cc7b65010fbec30db0000000000000000 43271 b86cc7b65018fbecbc930000008d0bd8000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff84403c510400030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000 43272 4ebc0000000100000000000006636c69656e7407626f736e65656b026e6c0000010001 4ebc8403000100000001000006636c69656e7407626f736e65656b026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 43273 8c6600100001000000000001036e73310974656c656b6162656c026e6c00000100010000290800000000000000 8c6680000001000000020003036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d45344830000291000000000000000 43274 c63300100001000000000001046e733032066368656c6c6f026e6c00000100010000290800000000000000 c63380000001000000030004046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c420000291000000000000000 43275 c3b200000001000000000000036e73310974656c656b6162656c026e6c0000010001 c3b280000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 43276 61d900000001000000000000046e733032066368656c6c6f026e6c0000010001 61d980000001000000030003046e733032066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 43277 b3f10000000100000000000003707469026e6c00000f0001 b3f18000000100000002000203707469026e6c00000f0001c00c0002000100015180000e036e7331076970746f776572c010c00c00020001000151800006036e7332c028c024000100010001518000043ecc4065c03e000100010001518000043ecc4066 43278 b86cc7c45011fbde304b0000000000000000 43279 000500000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 000580000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43280 e9dc00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 e9dc80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43281 000000007002faf003060000020405b401010402 000080010000000000000000 43282 b86cc7c55010fbde304a0000000000000000 43283 b86eaaeb5010fbeccb630000000000000000 43284 c7e300000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 c7e380000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43285 b86eaaeb5018fbec587d0000008d0b78000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff84403c510400030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000 43286 242100000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 242180000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 43287 f0ef00000001000000000000037777770b6861766568656b7765726b026e6c0000010001 f0ef80000001000000020002037777770b6861766568656b7765726b026e6c0000010001c0100002000100015180000d026e730777696c64686572c01cc01000020001000151800006036e7332c033c030000100010001518000043ed44661c049000100010001518000043ed44660 43288 b86eaaf95011fbdecad30000000000000000 43289 000000007002faf0d33e0000020405b401010402 000080010000000000000000 43290 1f8900000001000000000000024e530743495354524f4e024e4c0000010001 1f8980000001000000020002024e530743495354524f4e024e4c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 43291 dbc000000001000000000000037777770a636173686d6173746572026e6c0000010001 dbc080000001000000020000037777770a636173686d6173746572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c032 43292 b86eaafa5010fbdecad20000000000000000 43293 b86f5d985010fbece8ee0000000000000000 b86fdd940000000000000000 43294 b86f5d985018fbec36500000008d4b30000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005103677373096d6963726f736f667403636f6d00403aff84403c510400030000002e4e544c4d535350000100000097b208e005000500290000000900090020000000494e5445524e455431454c414e320000 b86fdd940000000000000000 43295 842300100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 842380000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 43296 f9ce00100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 f9ce80000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 43297 b86f5da65011fbdee85e0000000000000000 b86fdda40000000000000000 43298 5c1800000001000000000000036e733103766261026e6c0000010001 5c1880000001000000030002036e733103766261026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004d4883c23c03600010001000151800004c14e4887 43299 176900000001000000000000036e733103766261026e6c0000260001 176980000001000000030002036e733103766261026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004d4883c23c03600010001000151800004c14e4887 43300 dbf000000001000000000000116c6f6b616c6562656c617374696e67656e026e6c0000020001 dbf080000001000000020002116c6f6b616c6562656c617374696e67656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ec00c00020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 43301 174d0000000100000000000006636861726973026e6c00000f0001 174d8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43302 b86f5da75010fbdee85d0000000000000000 b86fdda40000000000000000 43303 a589000000010000000000000b7374617274706167696e61026e6c0000010001 a589800000010000000300030b7374617274706167696e61026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 43304 66ba000000010000000000000377777703746663026e6c0000010001 66ba800000010000000200020377777703746663026e6c0000010001c0100002000100015180000d026e73076e65746c616e64c014c01000020001000151800006036e7332c02bc02800010001000151800004d9aa2042c04100010001000151800004d9aa2c06 43305 973b0000000100000000000003777777077569746c696a6e026e6c0000010001 973b8000000100000002000203777777077569746c696a6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c000100010001518000043e3aa5fbc03e00010001000151800004d4ccfc79 43306 000828000001000200000000026e6c00000600010f57533031352d64616e69656c6c657304636f72700968617a6c65776f6f64026e6c00000500fe000000000000c01400010001000000000004c297cb0e 0008a8040000000000000000 43307 2f31000000010000000000000a7661737375706c696573026e6c00000f0001 2f31840300010000000100000a7661737375706c696573026e6c00000f0001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 43308 fd6d00000001000000000000044d41494c0475627675027675026e6c00000f0001 fd6d80000001000000030003044d41494c0475627675027675026e6c00000f0001c01600020001000151800005026e73c016c0160002000100015180000a0473746172026373c016c0160002000100015180000e036e733107737572666e6574c019c02d0001000100015180000482258104c03e00010001000151800004c01fe72ac05400010001000151800004c0576a65 43309 f5730000000100000000000005656c766961026e6c00000f0001 f5738000000100000002000005656c766961026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c029 43310 1835000000010000000000000377777707636f7272616469026e6c0000010001 1835800000010000000200000377777707636f7272616469026e6c0000010001c0100002000100015180000f026e73066e656269747303636f6d00c01000020001000151800006036e7332c02f 43311 e86e000000010000000000000377777718686f6c6c616e64636173696e6f2d65726564697669736965026e6c0000010001 e86e800000010000000300030377777718686f6c6c616e64636173696e6f2d65726564697669736965026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c029c01000020001000151800006036e7332c041c01000020001000151800006036e7333c041c03d00010001000151800004c3f13ceec05900010001000151800004c372eb43c06b000100010001518000043e320e8f 43312 ae1b000000010000000000000472656a6f067a656e676572026e6c0000010001 ae1b800000010000000200020472656a6f067a656e676572026e6c0000010001c0110002000100015180000c036e7330056e65786974c018c01100020001000151800006036e7331c030c02c00010001000151800004d4ccf5d3c04400010001000151800004d4ccf5d4 43313 11fe00000001000000000000037777771164656879706f746865656b77696e6b656c026e6c0000010001 11fe80000001000000020002037777771164656879706f746865656b77696e6b656c026e6c0000010001c0100002000100015180000b04646e733103627367c022c0100002000100015180000704646e7332c03bc036000100010001518000043e3a8553c04d000100010001518000043e3a8554 43314 7c900000000100000000000003626c3102626c06787334616c6c026e6c0000010001 7c908000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43315 2f4628000001000000010000026e6c0000060001095f6b65726265726f73045f7564700a544f5047524f57455253026e6c00002100010000025800230000006400580d706463746f7067726f776572730a544f5047524f57455253026e6c00 2f46a8040000000000000000 43316 856c00000001000000000000037777770472696765026e6c0000010001 856c80000001000000020002037777770472696765026e6c0000010001c0100002000100015180000c036e733105636176656fc015c01000020001000151800006036e7332c02dc029000100010001518000045112a002c041000100010001518000045112a102 43317 9ce100000001000000000000036e6f63056c69616373026e6c0000010001 9ce180000001000000030002036e6f63056c69616373026e6c0000010001c01000020001000151800002c00cc010000200010001518000080561746c6173c010c010000200010001518000140672756c7761790a6c656964656e756e6976c016c00c0001000100015180000484e52c0bc0380001000100015180000484e52c19 43318 e55200000001000000000000036e6f63056c69616373026e6c00001c0001 e55280000001000000030002036e6f63056c69616373026e6c00001c0001c01000020001000151800002c00cc010000200010001518000080561746c6173c010c010000200010001518000140672756c7761790a6c656964656e756e6976c016c00c0001000100015180000484e52c0bc0380001000100015180000484e52c19 43319 606000000001000000000000086d61696c67617465056c69616373026e6c0000010001 606080000001000000030002086d61696c67617465056c69616373026e6c0000010001c01500020001000151800006036e6f63c015c015000200010001518000080561746c6173c015c015000200010001518000140672756c7761790a6c656964656e756e6976c01bc02f0001000100015180000484e52c0bc0410001000100015180000484e52c19 43320 65a000000001000000000000086d61696c67617465056c69616373026e6c00001c0001 65a080000001000000030002086d61696c67617465056c69616373026e6c00001c0001c01500020001000151800006036e6f63c015c015000200010001518000080561746c6173c015c015000200010001518000140672756c7761790a6c656964656e756e6976c01bc02f0001000100015180000484e52c0bc0410001000100015180000484e52c19 43321 3fea00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 3fea80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 43322 e53700000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 e53780000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43323 59aa0000000100000000000006696e61637473026e6c0000010001 59aa8000000100000002000206696e61637473026e6c0000010001c00c00020001000151800012036e73310b736c61636b736572766572c013c00c00020001000151800006036e7332c02bc027000100010001518000043ed444c0c045000100010001518000043ed44d0a 43324 0000000070024000ddd30000020405b401010402 000080010000000000000000 43325 e1a900000001000000000000037777770472696765026e6c0000010001 e1a980000001000000020002037777770472696765026e6c0000010001c0100002000100015180000c036e733105636176656fc015c01000020001000151800006036e7332c02dc029000100010001518000045112a002c041000100010001518000045112a102 43326 ac790000000100000000000004444e533203523249026e6c0000010001 ac798000000100000002000204444e533203523249026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0290001000100015180000491050e02c00c0001000100015180000491050e22 43327 a8770000000100000000000004444e533103523249026e6c0000010001 a8778000000100000002000204444e533103523249026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c0001000100015180000491050e02c0370001000100015180000491050e22 43328 b86ffc6a50104470513d0000000000000000 43329 d8240000000100000000000007616c7465726e6f026e6c00000f0001 d8248000000100000002000207616c7465726e6f026e6c00000f0001c00c0002000100015180000f036e7331086461786973776562c014c00c00020001000151800006036e7332c02cc02800010001000151800004c323c083c04300010001000151800004c323c084 43330 0e9200000001000000000000067a65706879720473656d61026e6c0000010001 0e9280000001000000030003067a65706879720473656d61026e6c0000010001c01300020001000151800012047072693103646e73067073696e6574c018c013000200010001518000070470726932c031c013000200010001518000070470726933c031c02c000100010001518000049a0ff9a6c04a000100010001518000049a0ff9aac05d000100010001518000049a0ff9ae 43331 b86ffc6a50184470fc390000009600da000000010001000000000f313233363935303538313236362d330000f900010f313233363935303538313236362d330000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000 43332 d5ea000000010000000000000377777708726f7a65676f6c66026e6c0000010001 d5ea800000010000000200020377777708726f7a65676f6c66026e6c0000010001c0100002000100015180000e036e733107686f7477697265c019c01000020001000151800006036e7332c031c02d0001000100015180000451044b03c0470001000100015180000451044bc8 43333 b86ffc785011446250a40000000000000000 43334 926d00000001000000000000037777770863616e6e61626973026e6c0000010001 926d80000001000000020000037777770863616e6e61626973026e6c0000010001c01000020001000151800013026e730a6e61616d736572766572036e657400c01000020001000151800006036e7331c030 43335 0000000070024000f56e0000020405b401010402 000080010000000000000000 43336 bd5c0000000100000000000009535449434b44454154026e6c0000020001 bd5c8403000100000001000009535449434b44454154026e6c0000020001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 43337 f64c0000000100000000000003777777046f687261026e6c0000010001 f64c8000000100000002000003777777046f687261026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02d 43338 b86ffc795010446250a30000000000000000 43339 beb40000000100000000000005646e732d32056c61646f74026e6c0000010001 beb48000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43340 4ccb0000000100000000000005646e732d31056c61646f74026e6c0000010001 4ccb8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43341 b870e1475010447083fa0000000000000000 43342 b870e147501844709691000000969a40000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000 43343 611a0000000100000000000007317365727665720b65696c616e64686f6f6664026e6c0000010001 611a8403000100000001000007317365727665720b65696c616e64686f6f6664026e6c0000010001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 43344 886800000001000000000000037777770a68616e73616e64657273026e6c0000010001 886880000001000000030003037777770a68616e73616e64657273026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004c3f13ceec04b00010001000151800004c372eb43c05d000100010001518000043e320e8f 43345 b7990000000100000000000002706d026e6c0000ff0001 b7998000000100000002000002706d026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c029 43346 b10e00000001000000000000036e7331046177676f026e6c0000010001 b10e80000001000000020002036e7331046177676f026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d9aa124cc03700010001000151800004d9aa124d 43347 3b0b00000001000000000000036e7332046177676f026e6c0000010001 3b0b80000001000000020002036e7332046177676f026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02900010001000151800004d9aa124cc00c00010001000151800004d9aa124d 43348 b870e1555011446283610000000000000000 43349 d2ed00000001000000000000037777770b74696573746f776f726c64026e6c0000010001 d2ed80000001000000020000037777770b74696573746f776f726c64026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c035 43350 5ab200000001000000000000026e7309747269706c652d6974026e6c0000010001 5ab280000001000000030003026e7309747269706c652d6974026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b086e7331636f6c6f32c00fc00f0002000100015180000b086e7331636f6c6f33c00fc00c00010001000151800004d584b002c03b00010001000151800004d47ffe42c05200010001000151800004504542ad 43351 fea400000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000010001 fea480000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 43352 000000007002400031f30000020405b401010402 000080010000000000000000 43353 7f5200000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000260001 7f5280000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 43354 9fce00000001000000000000036e73320d63656e747269636f6e6c696e65026e6c0000010001 9fce80000001000000020002036e73320d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d481ec0cc00c00010001000151800004d590e63a 43355 27dc00000001000000000000036e73320d63656e747269636f6e6c696e65026e6c0000260001 27dc80000001000000020002036e73320d63656e747269636f6e6c696e65026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03200010001000151800004d481ec0cc00c00010001000151800004d590e63a 43356 b870e1565010446283600000000000000000 43357 6eaf0000000100000000000005646e732d31056c61646f74026e6c0000010001 6eaf8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43358 b871b54f50104470ec750000000000000000 43359 b871b54f50184470e88c00000096b0c0000000010001000000000f313233363935303538313236362d320000f900010f313233363935303538313236362d320000f900ff00000000005a03677373096d6963726f736f667403636f6d00403afd2b403c4eab0003000000374e544c4d535350000100000097b208e00a000a002d0000000d000d0020000000504443544f5047524f57455253544f5047524f574552530000 43360 14a70000000100000000000005646e732d31056c61646f74026e6c0000010001 14a78000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43361 adc300000001000000000000037777770773656b7366616e026e6c0000010001 adc380000001000000020001037777770773656b7366616e026e6c0000010001c0100002000100015180000a026e7304696d636fc018c01000020001000151800013036e7332097669727475616c787303636f6d00c02c000100010001518000043e81810a 43362 1c540000000100000000000003777777127a6f656b6a65656967656e656e6572676965026e6c0000010001 1c548403000100000001000003777777127a6f656b6a65656967656e656e6572676965026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 43363 b871b55d50114462ebdc0000000000000000 43364 f1a600000001000000000000085f6b706173737764045f7463700d696e7472612d6b6c6174746572026e6c0000060001 f1a684030001000000010000085f6b706173737764045f7463700d696e7472612d6b6c6174746572026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 43365 7ce700000001000000000000026e73076e656473746174026e6c0000010001 7ce780000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43366 dca000000001000000000000037777770a7065746572627275696e026e6c0000010001 dca080000001000000020002037777770a7065746572627275696e026e6c0000010001c0100002000100015180000f0472617131076e657474756e65c01bc01000020001000151800006036e7332c034c02f00010001000151800004d4ccf78dc04a00010001000151800004d4ccf78e 43367 dbb2000000010000000000001167616c65726965646564726965686f656b026e6c0000010001 dbb2800000010000000200001167616c65726965646564726965686f656b026e6c0000010001c00c00020001000151800019036e73310f6c696e6b67696473686f7374696e6703636f6d00c00c00020001000151800006036e7332c036 43368 380400000001000000000000036e7333076e656473746174026e6c0000010001 380480000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 43369 50cb00000001000000000000085f6b706173737764045f7564700d696e7472612d6b6c6174746572026e6c0000060001 50cb84030001000000010000085f6b706173737764045f7564700d696e7472612d6b6c6174746572026e6c0000060001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 43370 5132001000010000000000010631376769726c026e6c00000100010000290800000000000000 5132800000010000000200010631376769726c026e6c0000010001c00c0002000100015180000e036e73310774697363616c69c013c00c00020001000151800006036e7332c02b0000291000000000000000 43371 b871b55e50104462ebdb0000000000000000 43372 224e00000001000000000000037777771872656372656174696563656e7472616e656465726c616e64026e6c0000010001 224e80000001000000020000037777771872656372656174696563656e7472616e656465726c616e64026e6c0000010001c01000020001000151800011036e73310a747770686f7374696e67c029c01000020001000151800006036e7332c041 43373 451900000001000000000000026e7303786f73026e6c0000010001 451980000001000000020001026e7303786f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800010036e7332096e657473797374656dc013c00c00010001000151800004d41acfe2 43374 cad300000001000000000000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730d696e7472612d6b6c6174746572026e6c0000060001 cad384030001000000010000055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730d696e7472612d6b6c6174746572026e6c0000060001c04400060001000038400036026e730f646f6d61696e2d7265676973747279c0440a686f73746d6173746572c05b0bf1e540000070800000384000278d0000003840 43375 57d800000001000000000000037777770c6575726f7365727669636573026e6c0000010001 57d880000001000000020000037777770c6575726f7365727669636573026e6c0000010001c0100002000100015180000c026e7306766576696461c01dc01000020001000151800006036e7332c034 43376 f8fb0000000100000000000005646e732d31056c61646f74026e6c0000010001 f8fb8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43377 561700000001000000000000056665776562027675026e6c0000ff0001 561780000001000000030003056665776562027675026e6c0000ff0001c01200020001000151800005026e73c012c0120002000100015180000a0473746172026373c012c0120002000100015180000e036e733107737572666e6574c015c0290001000100015180000482258104c03a00010001000151800004c01fe72ac05000010001000151800004c0576a65 43378 88060000000100000000000003666869026e6c00000f0001 88068000000100000002000203666869026e6c00000f0001c00c0002000100015180000d026e73076e65746c616e64c010c00c00020001000151800006036e7332c027c02400010001000151800004d9aa2042c03d00010001000151800004d9aa2c06 43379 95040000000100000000000003627361026e6c0000010001 95048000000100000002000003627361026e6c0000010001c00c00020001000151800010036e733106736563757265036e657400c00c00020001000151800006036e7332c028 43380 2ded0000000100000000000005646e732d31056c61646f74026e6c0000010001 2ded8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43381 d1e900000001000000000000036e733109666972737466696e64026e6c0000010001 d1e980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43382 d1ea00000001000000000000036e733209666972737466696e64026e6c0000010001 d1ea80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43383 e7ff00000001000000000000026937026e6c0000010001 e7ff80000001000000030002026937026e6c0000010001c00c0002000100015180000d036e733106776964657873c00fc00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c027c02300010001000151800004d4ccc0fcc058000100010001518000043efa0703 43384 de7e00000001000000000000036e73310a6d756c74696b6162656c026e6c0000010001 de7e80000001000000030002036e73310a6d756c74696b6162656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 43385 ebaf0000000100000000000003777777086171756172696f6d026e6c0000010001 ebaf8000000100000002000203777777086171756172696f6d026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c019c01000020001000151800006036e7332c030c02d00010001000151800004c3402003c04600010001000151800004c340202b 43386 59ae00000001000000000000056c6f686572026e6c00001c0001 59ae80000001000000020002056c6f686572026e6c00001c0001c00c0002000100015180000a036e733103677673c012c00c00020001000151800006036e7332c02ac026000100010001518000045054e1aac03c00010001000151800004d4ccc646 43387 2dee0000000100000000000005646e732d32056c61646f74026e6c0000010001 2dee8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43388 867a00000001000000000000096d696e64706f776572026e6c00000f0001 867a80000001000000020000096d696e64706f776572026e6c00000f0001c00c0002000100015180000c026e7306766576696461c016c00c00020001000151800006036e7332c02d 43389 8a1500000001000000000000037777770773656b7366616e026e6c0000010001 8a1580000001000000020001037777770773656b7366616e026e6c0000010001c0100002000100015180000a026e7304696d636fc018c01000020001000151800013036e7332097669727475616c787303636f6d00c02c000100010001518000043e81810a 43390 ef3f00000001000000000000036e73310a6d756c74696b6162656c026e6c0000260001 ef3f80000001000000030002036e73310a6d756c74696b6162656c026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 43391 fdb4000000010000000000000477656e740564656d6f6e026e6c0000ff0001 fdb4800000010000000300020477656e740564656d6f6e026e6c0000ff0001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c0110002000100015180000f036e73320564656d6f6e036e657400c02b00010001000151800004c29f4906c03d00010001000151800004c29fb004 43392 05b400000001000000000000036677310a737072656e67656c6f6f026e6c0000010001 05b480000001000000020002036677310a737072656e67656c6f6f026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01bc01000020001000151800006036e7332c033c02f00010001000151800004d43d0f08c04d00010001000151800004d43d19e2 43393 819a00100001000000000001036e733103617474026e6c00000100010000290800000000000000 819a80000001000000020003036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d0000291000000000000000 43394 c0cd00100001000000000001036e733103617474026e6c00002600010000290800000000000000 c0cd80000001000000020003036e733103617474026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d0000291000000000000000 43395 a22d00100001000000000001036e733203617474026e6c00000100010000290800000000000000 a22d80000001000000020003036e733203617474026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d0000291000000000000000 43396 9ec50000000100000000000005646e732d31056c61646f74026e6c0000010001 9ec58000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43397 784200100001000000000001036e733203617474026e6c00002600010000290800000000000000 784280000001000000020003036e733203617474026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d0000291000000000000000 43398 3a320000000100000000000006647570616330026e6c00000f0001 3a328403000100000001000006647570616330026e6c00000f0001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 43399 d1ec00000001000000000000036e733109666972737466696e64026e6c0000010001 d1ec80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43400 a9a7000000010000000000000631376769726c026e6c0000010001 a9a7800000010000000200000631376769726c026e6c0000010001c00c0002000100015180000e036e73310774697363616c69c013c00c00020001000151800006036e7332c02b 43401 d1ed00000001000000000000036e733209666972737466696e64026e6c0000010001 d1ed80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43402 4e1b00000001000000000000036e733103617474026e6c0000010001 4e1b80000001000000020002036e733103617474026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 43403 93eb00000001000000000000036e733103617474026e6c0000260001 93eb80000001000000020002036e733103617474026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2970216c03600010001000151800004c297024d 43404 84d400000001000000000000036e733203617474026e6c0000260001 84d480000001000000020002036e733203617474026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004c2970216c00c00010001000151800004c297024d 43405 ae7e28000001000000020000026e6c00000600012439653263393166622d313132322d343037302d386363392d373561623332666464633337065f6d736463730970726b766477696c64026e6c00000500ff000000000000c014000500010000025800190a77326b736572766572310970726b766477696c64026e6c00 ae7ea8040000000000000000 43406 f61e00000001000000000000037777770e646574656c65666f6f6e67696461026e6c0000010001 f61e84030001000000010000037777770e646574656c65666f6f6e67696461026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 43407 e93e0000000100000000000003626c3402626c06787334616c6c026e6c0000010001 e93e8000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43408 23f900000001000000000000027463036164730974656c656772616166026e6c0000010001 23f980000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 43409 999600000001000000000000027463036164730974656c656772616166026e6c0000010001 999680000001000000020000027463036164730974656c656772616166026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c035 43410 6f5200000001000000000000036e73320a6d756c74696b6162656c026e6c0000010001 6f5280000001000000030002036e73320a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 43411 000000007002faf0225800000204055001010402 000080010000000000000000 43412 443628000001000200000000024e4c00000600010b67656d736c6477323030300847454d534c44324b0a534c4945445245434854024e4c00000500fe000000000000c01400010001000000000004ac100166 4436a8040000000000000000 43413 b1c20000000100000000000003777777076a6f62706f6f6c026e6c0000010001 b1c28000000100000003000203777777076a6f62706f6f6c026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 43414 b873d47b5010ff00bda80000000000000000 43415 b873d47b5018ff002785000000923da3000000010001000000000f313531313832383438383231302d330000f900010f313531313832383438383231302d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b0027403c51a70003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 43416 1fa728000001000000010000026e6c0000060001055f6c646170045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d736463730b626973677665726f6c6d65026e6c00002100010000025800220000006401850b64632d68756e74736d616e0b626973677665726f6c6d65026e6c00 1fa7a8040000000000000000 43417 723b0000000100000000000008616562766d61696c06787334616c6c026e6c0000010001 723b8000000100000003000208616562766d61696c06787334616c6c026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7332c015c0150002000100015180000d026e730472697065036e657400c03000010001000151800004c26d0642c04100010001000151800004c26d0963 43418 30f20000000100000000000005646e732d31056c61646f74026e6c0000010001 30f28000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43419 5bda00000001000000000000036e73320a6d756c74696b6162656c026e6c0000260001 5bda80000001000000030002036e73320a6d756c74696b6162656c026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c00c0001000100015180000450f2e006 43420 4e1000000001000000000000056d61696c3207677265656e6962026e6c00000f0001 4e1080000001000000020000056d61696c3207677265656e6962026e6c00000f0001c0120002000100015180000b026e73026e6c036e657400c0120002000100015180001206617574683630026e73026e6c027575c034 43421 241800000001000000000000036d736e056972737369036f7267086368616b6f746179026e6c0000010001 241880000001000000030000036d736e056972737369036f7267086368616b6f746179026e6c0000010001c01a00020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01a00020001000151800006036e7332c03bc01a00020001000151800006036e7333c03b 43422 b873d4895011fef2bd130000000000000000 43423 1f0d0000000100000000000008686f73746e616d650462696e640000100003 1f0d8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 43424 000000007002faf0f7480000020405b401010402 000080010000000000000000 43425 000000007002faf0332200000204055001010402 000080010000000000000000 43426 000000007002faf07aff0000020405b401010402 000080010000000000000000 43427 b873d48a5010fef2bd120000000000000000 43428 b8756c445010ff0036a80000000000000000 b875ec440000000000000000 43429 b8760bd75010faf0e3650000000000000000 b8768bd40000000000000000 43430 9ff300000001000000000000046e7330320462696374026e6c0000010001 9ff380000001000000020002046e7330320462696374026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800002c00cc02a00010001000151800004d413d6c8c00c00010001000151800004d413d604 43431 b874af045010faf0bc830000000000000000 43432 b8756c445018ff00da670000009204c1000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b0027403c51a70003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 b875ec440000000000000000 43433 b874af045018faf097a50000009250ac000000010001000000000f313330353637303035383030322d330000f900010f313330353637303035383030322d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e0080008002b0000000b000b002000000047454d534c44573230303047454d534c44324b0000 43434 b8760bd75018faf0c670000000955c40000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd89403c4f090003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000 b8768bd40000000000000000 43435 917b000000010000000000000576616c6d61026e6c0000010001 917b800000010000000300030576616c6d61026e6c0000010001c00c0002000100015180000e076e73617574683103626974c012c00c0002000100015180000a076e736175746832c02ec00c0002000100015180000a076e736175746833c02ec02600010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 43436 b8760be55011fae2e2cd0000000000000000 b8768be40000000000000000 43437 b8756c525011fef236130000000000000000 b875ec540000000000000000 43438 9dd40000000100000000000005646e732d31056c61646f74026e6c0000010001 9dd48000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43439 000000007002faf0cc390000020405b401010402 000080010000000000000000 43440 cc470000000100000000000005646e732d32056c61646f74026e6c0000010001 cc478000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43441 b874af125011fae2bbee0000000000000000 43442 000000007002faf0865700000204055001010402 000080010000000000000000 43443 0eb0000000010000000000000561636b6572026e6c00001c0001 0eb0800000010000000200000561636b6572026e6c00001c0001c00c00020001000151800015026e730c776f726c64686f7374696e67036f726700c00c00020001000151800008026e73026175c029 43444 b8760be65010fae2e2cc0000000000000000 b8768be40000000000000000 43445 b87704245010faf03c520000000000000000 b87780010000000000000000 43446 000000007002faf0d3060000020405b401010402 000080010000000000000000 43447 b8756c535010fef236120000000000000000 b875ec540000000000000000 43448 b8778b1f5010ff006b000000000000000000 43449 243400000001000000000000057269636173026e6c00000f0001 243480000001000000030003057269636173026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c012c00c0002000100015180000a076e736175746832c02ec00c0002000100015180000a076e736175746833c02ec02600010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 43450 b87704245018faf0c21d00000095ba80000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd89403c4f090003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000 b87780010000000000000000 43451 b874af135010fae2bbed0000000000000000 43452 23de000000010000000000000a7474702d646f6d61696e026e6c0000060001 23de840300010000000100000a7474702d646f6d61696e026e6c0000060001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 43453 89530000000100000000000005646e732d31056c61646f74026e6c0000010001 89538000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43454 972d0000000100000000000003777777166c6974657261747575726765736368696564656e6973026e6c0000010001 972d8000000100000002000203777777166c6974657261747575726765736368696564656e6973026e6c0000010001c0100002000100015180000a036e7331036e7873c027c01000020001000151800006036e7332c03fc03b00010001000151800004d973c015c05100010001000151800004d973c102 43455 b8778b1f5018ff007616000000929d6a000000010001000000000f313531313832383438383231302d320000f900010f313531313832383438383231302d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b0027403c51a70003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 43456 2b5800000001000000000000056a6170706f026e6c0000010001 2b5880000001000000020000056a6170706f026e6c0000010001c00c0002000100015180000f036e7336086a726f6e6c696e65c012c00c00020001000151800014036e73330d686f73746e656465726c616e64c012 43457 b87704325011fae23bba0000000000000000 b87780010000000000000000 43458 b8784b705010faf0fbd10000000000000000 b878cb740000000000000000 43459 000000007002faf035460000020405b401010402 000080010000000000000000 43460 b8784b705018faf060fe00000092c7a2000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e0080008002b0000000b000b002000000047454d534c44573230303047454d534c44324b0000 b878cb740000000000000000 43461 b8778b2d5011fef26a6b0000000000000000 43462 003b00000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 003b80000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 43463 32a500000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000260001 32a580000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 43464 7f7200000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 7f7280000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43465 eb8100000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c0000260001 eb8180000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43466 274400000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 274480000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43467 ec6800000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c0000260001 ec6880000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43468 b87704335010fae23bb90000000000000000 b87780010000000000000000 43469 b878f3165010faf0b66a0000000000000000 43470 e2050000000100000000000008626c7565666973680a6f70656e6f6666696365026e6c0000010001 e2058000000100000002000008626c7565666973680a6f70656e6f6666696365026e6c0000010001c01500020001000151800010026e73076379736f6e657403636f6d00c01500020001000151800006036e7331c037 43471 b8778b2e5010fef26a6a0000000000000000 43472 b878f3165018faf0a036000000955680000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd89403c4f090003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000 43473 b8784b7e5011fae2fb3c0000000000000000 b878cb740000000000000000 43474 b878f3245011fae2b5d20000000000000000 43475 a8f30000000100000000000005646e732d31056c61646f74026e6c0000010001 a8f38000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43476 07b600000001000000000000086174617261786961026e6c0000010001 07b680000001000000020000086174617261786961026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 43477 000000007002faf0ea1e0000020405b401010402 000080010000000000000000 43478 b8784b7f5010fae2fb3b0000000000000000 b878cb740000000000000000 43479 854e00000001000000000000037777770a6b63726f65726d6f6e64026e6c0000010001 854e80000001000000020002037777770a6b63726f65726d6f6e64026e6c0000010001c0100002000100015180000e036e73310769736973776562c01bc01000020001000151800006036e7332c033c02f00010001000151800004d4ccca65c04900010001000151800004510440de 43480 b878f3255010fae2b5d10000000000000000 43481 86c600000001000000000000037777770d62726973776172656e68756973026e6c0000010001 86c680000001000000020002037777770d62726973776172656e68756973026e6c0000010001c0100002000100015180000a026e730469636d63c01ec01000020001000151800006036e7332c035c032000100010001518000043e643805c048000100010001518000043e643806 43482 b87984425010faf0da160000000000000000 43483 5d17000000010000000000000377777707626f727361746f026e6c0000010001 5d17800000010000000200020377777707626f727361746f026e6c0000010001c0100002000100015180000b026e73057162616c6cc018c0100002000100015180000f026e7309747269706c652d6974c018c02c00010001000151800004d584b024c04300010001000151800004d584b002 43484 b87984425018faf0c84d000000923e98000000010001000000000f313330353637303035383030322d320000f900010f313330353637303035383030322d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403afd0f403c4e8f0003000000334e544c4d535350000100000097b208e0080008002b0000000b000b002000000047454d534c44573230303047454d534c44324b0000 43485 278e000000010000000000000377777707696b6f6e727476026e6c0000010001 278e800000010000000200000377777707696b6f6e727476026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c02f 43486 b41f0000000100000000000005646e732d31056c61646f74026e6c0000010001 b41f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43487 b9bc0000000100000000000003777777096c75667468616e7361026e6c0000010001 b9bc8000000100000002000203777777096c75667468616e7361026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c01ac01000020001000151800006036e7332c031c02e00010001000151800004d513b013c04b00010001000151800004d513b012 43488 1db600000001000000000000026e7308767575727765726b026e6c0000010001 1db680000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 43489 b87984505011fae2d9810000000000000000 43490 31450000000100000000000005646e732d31056c61646f74026e6c0000010001 31458000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43491 b87984515010fae2d9800000000000000000 43492 fcac0000000100000000000003777777076665657374656e026e6c0000010001 fcac8000000100000002000203777777076665657374656e026e6c0000010001c0100002000100015180000e036e733107662d6163746966c018c01000020001000151800006036e7332c030c02c00010001000151800004d5f72f2dc04600010001000151800004d5c1d528 43493 7d790000000100000000000004646e733206626c6978656d026e6c0000010001 7d798000000100000003000304646e733206626c6978656d026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0110002000100015180000704646e7333c011c02c00010001000151800004d44fe803c00c00010001000151800004c3f5c782c04d00010001000151800004d44ff303 43494 b91e0000000100000000000004646e733306626c6978656d026e6c0000010001 b91e8000000100000003000304646e733306626c6978656d026e6c0000010001c0110002000100015180000704646e7331c011c0110002000100015180000704646e7332c011c01100020001000151800002c00cc02c00010001000151800004d44fe803c03f00010001000151800004c3f5c782c00c00010001000151800004d44ff303 43495 e2dd000000010000000000000a6a6f616e6b6e65636874026e6c00000f0001 e2dd800000010000000300020a6a6f616e6b6e65636874026e6c00000f0001c00c0002000100015180000d036e733106776964657873c017c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 43496 6e680000000100000000000004646e733306626c6978656d026e6c0000260001 6e688000000100000003000304646e733306626c6978656d026e6c0000260001c0110002000100015180000704646e7331c011c0110002000100015180000704646e7332c011c01100020001000151800002c00cc02c00010001000151800004d44fe803c03f00010001000151800004c3f5c782c00c00010001000151800004d44ff303 43497 1be20000000100000000000004646e733206626c6978656d026e6c0000260001 1be28000000100000003000304646e733206626c6978656d026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc0110002000100015180000704646e7333c011c02c00010001000151800004d44fe803c00c00010001000151800004c3f5c782c04d00010001000151800004d44ff303 43498 d1cd0000000100000000000005646e732d31056c61646f74026e6c0000010001 d1cd8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43499 22bd0000000100000000000005646e732d31056c61646f74026e6c0000010001 22bd8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43500 e6e20000000100000000000005646e732d32056c61646f74026e6c0000010001 e6e28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43501 169e00000001000000000000067a65706879720473656d61026e6c0000010001 169e80000001000000030003067a65706879720473656d61026e6c0000010001c01300020001000151800012047072693103646e73067073696e6574c018c013000200010001518000070470726932c031c013000200010001518000070470726933c031c02c000100010001518000049a0ff9a6c04a000100010001518000049a0ff9aac05d000100010001518000049a0ff9ae 43502 995a00000001000000000000026e7306787334616c6c026e6c0000010001 995a80000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 43503 dbdd0000000100000000000005646e732d31056c61646f74026e6c0000010001 dbdd8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43504 8133000000010000000000000a7374617274726176656c026e6c0000ff0001 8133800000010000000200020a7374617274726176656c026e6c0000ff0001c00c00020001000151800009026e73036f6b65c017c00c00020001000151800006036e7332c02ec02b00010001000151800004c13acc3bc04000010001000151800004c13acc27 43505 23390000000100000000000007766462636f6d70026e6c00001c0001 23398000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 43506 9cbb000000010000000000000567656e6965026e6c00000f0001 9cbb800000010000000200020567656e6965026e6c00000f0001c00c0002000100015180000d026e73076e65746c616e64c012c00c00020001000151800006036e7332c029c02600010001000151800004d9aa2042c03f00010001000151800004d9aa2c06 43507 08930000000100000000000005646e732d31056c61646f74026e6c0000010001 08938000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43508 5a0e000000010000000000000b636f6d3474726164696e67026e6c0000ff0001 5a0e800000010000000300010b636f6d3474726164696e67026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc018c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c04ac02c000100010001518000043efa0202 43509 d9b300000001000000000000037777770f63616d706572736361726176616e73026e6c0000010001 d9b380000001000000030002037777770f63616d706572736361726176616e73026e6c0000010001c0100002000100015180000903646e73026469c020c0100002000100015180000704646e7332c038c0100002000100015180000704646e7333c038c03400010001000151800004c286fb03c05c00010001000151800004d4cb1285 43510 0d79000000010000000000000379786b026e6c00001c0001 0d79800000010000000300000379786b026e6c00001c0001c00c00020001000151800015036e73310b70726f6c6f636174696f6e036e657400c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028 43511 e4dd00100001000000000001036e733203626f73026e6c00000100010000290800000080000000 e4dd80000001000000020003036e733203626f73026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004d5881e43c00c00010001000151800004d51392030000291000000000000000 43512 cefa00000001000000000000056169737476026e6c00000f0001 cefa80000001000000020002056169737476026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c012c00c00020001000151800006036e7332c029c02600010001000151800004d4cb0e42c04100010001000151800004d4cb1221 43513 c9ba00100001000000000001026e7303626f73026e6c00000100010000290800000080000000 c9ba80000001000000020003026e7303626f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5881e43c03500010001000151800004d51392030000291000000000000000 43514 3bca0000000100000000000005646e732d31056c61646f74026e6c0000010001 3bca8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43515 85460000000100000000000003706f700c667973696f70687973696373026e6c00001c0001 85468000000100000003000203706f700c667973696f70687973696373026e6c00001c0001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 43516 aa3d000000010000000000000c667973696f70687973696373026e6c0000ff0001 aa3d800000010000000300020c667973696f70687973696373026e6c0000ff0001c00c0002000100015180000d036e733106776964657873c019c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 43517 88e90000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 88e98000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 43518 02b900000001000000000000096c6f6e6776696c6c65026e6c0000020001 02b980000001000000020002096c6f6e6776696c6c65026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 43519 27d70000000100000000000005646e732d31056c61646f74026e6c0000010001 27d78000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43520 97ea0000000100000000000004736d747003726463026e6c0000010001 97ea8000000100000002000204736d747003726463026e6c0000010001c011000200010001518000100d7372726463303134646d7a3034c011c011000200010001518000100d7372726463303132646d7a3033c011c02900010001000151800004d973e064c04500010001000151800004d973e054 43521 2c32000000010000000000000869702d73706163650262790870726f7365727665026e6c0000010001 2c32800000010000000300020869702d73706163650262790870726f7365727665026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800012036e73320970726f2d736572766502626500c01800020001000151800006036e7333c018c035000100010001518000045054e055c06500010001000151800004d4ccc655 43522 0aa400000001000000000000026e73076e656473746174026e6c0000010001 0aa480000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43523 0cd5000000010000000000000874726176656c736f066e7434616c6c026e6c0000010001 0cd5800000010000000200020874726176656c736f066e7434616c6c026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000d036e733206787334616c6cc01cc03000010001000151800004c26d3402c04100010001000151800004c26d0963 43524 d18328000001000000010000026e6c0000060001055f6c646170045f746370026463065f6d736463730b6465626f646567726f6570026e6c000021000100000258001d000000640185067365727665720b6465626f646567726f6570026e6c00 d183a8040000000000000000 43525 a2b80000000100000000000005646e732d31056c61646f74026e6c0000010001 a2b88000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43526 000000007002faf05a680000020405b401010402 000080010000000000000000 43527 776a00000001000000000000036e73330767617574656e67026e6c0000010001 776a80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43528 20a900000001000000000000036e73340767617574656e67026e6c0000010001 20a980000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43529 802100000001000000000000054d4f4c454e0350434d026e6c0000010001 802180000001000000020001054d4f4c454e0350434d026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 43530 fa2500000001000000000000054d4f4c454e0350434d026e6c00001c0001 fa2580000001000000020001054d4f4c454e0350434d026e6c00001c0001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 43531 963e000000010000000000000377777707726f6e64756974026e6c0000010001 963e800000010000000200020377777707726f6e64756974026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c018c0100002000100015180000805726f62696ec033c02c00010001000151800004913a1e04c04800010001000151800004913a1a34 43532 42bf0000000100000000000005646e732d31056c61646f74026e6c0000010001 42bf8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43533 17a9000000010000000000000b72656b656e6a6572696a6b026e6c00001c0001 17a9800000010000000200000b72656b656e6a6572696a6b026e6c00001c0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c032 43534 b87a075c5010faf0c7450000000000000000 b87a80010000000000000000 43535 f7390000000100000000000003706f700b7469626d6f6c656e616172026e6c0000010001 f7398000000100000002000003706f700b7469626d6f6c656e616172026e6c0000010001c01000020001000151800014036e73310d646e73636f6d656f6e6c696e65c01cc01000020001000151800006036e7333c034 43536 b87a075c5018faf0598400000088bd00000000010001000000000f313432353932393134323239302d330000f900010f313432353932393134323239302d330000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe8d403c500d0003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000 b87a80010000000000000000 43537 9a0e0000000100000000000003444453024e4c00000f0001 9a0e8000000100000003000303444453024e4c00000f0001c00c00020001000151800017036e733110736361726c65742d696e7465726e6574c010c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028c02400010001000151800004d5ccc302c04700010001000151800004d5ccc303c05900010001000151800004c277e953 43538 03c400000001000000000000037777770e6172626569647372656368746572026e6c0000010001 03c480000001000000020000037777770e6172626569647372656368746572026e6c0000010001c0100002000100015180000f04686e73300774697363616c69c01fc0100002000100015180000704686e7331c038 43539 3fe5000000010000000000000f616972706f72742d73657276696365026e6c0000010001 3fe5800000010000000200020f616972706f72742d73657276696365026e6c0000010001c00c0002000100015180000a036e7331036e7873c01cc00c00020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 43540 66740000000100000000000003777777056865657273026e6c0000010001 66748000000100000002000003777777056865657273026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c030 43541 baf200000001000000000000096d6d70726f7879303202656f026e6c0000010001 baf280000001000000020002096d6d70726f7879303202656f026e6c0000010001c01600020001000151800010066d696e6e6965066f6d726f6570c019c0160002000100015180000805726f62696ec034c02d00010001000151800004913a1e04c04900010001000151800004913a1a34 43542 b87a076a5011fae2c6ba0000000000000000 b87a80010000000000000000 43543 9c7b00000001000000000000036e733109666972737466696e64026e6c0000010001 9c7b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43544 58e20000000100000000000005646e732d31056c61646f74026e6c0000010001 58e28000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43545 000000007002faf01b310000020405b401010402 000080010000000000000000 43546 876d00000001000000000000166c6f6f6467696574657276616e76696c73746572656e026e6c0000020001 876d80000001000000020002166c6f6f6467696574657276616e76696c73746572656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec023c00c00020001000151800006036e7332c03bc03700010001000151800004c29f4906c04f00010001000151800004c29fb004 43547 9cc000000001000000000000036e733203626f73026e6c0000010001 9cc080000001000000020002036e733203626f73026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004d5881e43c00c00010001000151800004d5139203 43548 4e6000000001000000000000026e7303626f73026e6c0000010001 4e6080000001000000020002026e7303626f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5881e43c03500010001000151800004d5139203 43549 b87a076b5010fae2c6b90000000000000000 b87a80010000000000000000 43550 b77d00000001000000000000076e6f7669727573036a6d69026e6c0000260001 b77d80000001000000020001076e6f7669727573036a6d69026e6c0000260001c01400020001000151800002c00cc0140002000100015180000b026e73026e6c036e657400c00c00010001000151800004d4ce6842 43551 b69f00000001000000000000037777771077696c64657276616e6b696e73697465026e6c0000010001 b69f80000001000000020000037777771077696c64657276616e6b696e73697465026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c038 43552 b87c49885010faf045e00000000000000000 b87cc9840000000000000000 43553 b87c49885018faf02e20000000886800000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe8d403c500d0003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000 b87cc9840000000000000000 43554 73b50000000100000000000005646e732d31056c61646f74026e6c0000010001 73b58000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43555 5bc60000000100000000000010766f726465726d616e317d6d79776562026e6c00000f0001 5bc68403000100000001000010766f726465726d616e317d6d79776562026e6c00000f0001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 43556 8c6400000001000000000000046e73303803777873026e6c0000010001 8c6480000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 43557 b87c49965011fae245550000000000000000 b87cc9940000000000000000 43558 9d3600000001000000000000037777770968756973706c65696e026e6c0000010001 9d3680000001000000020002037777770968756973706c65696e026e6c0000010001c0100002000100015180000b036e73330474656c65c01ac01000020001000151800006036e7334c032c02e000100010001518000043ed45203c045000100010001518000043ed45204 43559 000000007002faf02f960000020405b401010402 000080010000000000000000 43560 dbce00000001000000000000036e733209666972737466696e64026e6c0000010001 dbce80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43561 b87c49975010fae245540000000000000000 b87cc9940000000000000000 43562 b87d3c4e5010faf0677e0000000000000000 b87dbc440000000000000000 43563 b87d3c4e5018faf05abe000000885b00000000010001000000000f313432353932393134323239302d320000f900010f313432353932393134323239302d320000f900ff00000000004c03677373096d6963726f736f667403636f6d00403afe8e403c500e0003000000294e544c4d535350000100000097b208e0030003002600000006000600200000005345525645524442470000 b87dbc440000000000000000 43564 d34b0000000100000000000005646e732d31056c61646f74026e6c0000010001 d34b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43565 1a27000000010000000000000377777707686f746d61696c026e6c0000010001 1a27800000010000000200000377777707686f746d61696c026e6c0000010001c01000020001000151800011036e733107686f746d61696c03636f6d00c01000020001000151800006036e7333c030 43566 ada20000000100000000000009637962657264756465026e6c00000f0001 ada28000000100000003000309637962657264756465026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c016c00c0002000100015180000a076e736175746832c032c00c0002000100015180000a076e736175746833c032c02a00010001000151800004d5880c33c04400010001000151800004d5880c3bc05a00010001000151800004d4ccc00b 43567 a174000000010000000000000b776f726c646f6e6c696e65026e6c00001c0001 a174800000010000000300020b776f726c646f6e6c696e65026e6c00001c0001c00c0002000100015180000f04616e73310774697363616c69c018c00c0002000100015180000704616e7332c031c00c0002000100015180001404616e73330a74697363616c696e657402626500c02c00010001000151800004c3f14d38c04700010001000151800004c3f13325 43568 b87d3c5c5011fae266f30000000000000000 b87dbc540000000000000000 43569 02ab00000001000000000000026e73076e656473746174026e6c0000010001 02ab80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43570 a5b90000000100000000000005646e732d31056c61646f74026e6c0000010001 a5b98000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43571 b87d3c5d5010fae266f20000000000000000 b87dbc540000000000000000 43572 d7d700000001000000000000066d696e66696e026e6c0000ff0001 d7d780000001000000020001066d696e66696e026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c0002000100015180000b026e73026e6c036e657400c02700010001000151800004c2b2a748 43573 2a6800000001000000000000036e7331107365637572656e616d65736572766572026e6c0000010001 2a6880000001000000020002036e7331107365637572656e616d65736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000442a4f102c0430001000100015180000442a4f105 43574 153400000001000000000000036e7332107365637572656e616d65736572766572026e6c0000010001 153480000001000000020002036e7332107365637572656e616d65736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0350001000100015180000442a4f102c00c0001000100015180000442a4f105 43575 60aa0000000100000000000005646e732d31056c61646f74026e6c0000010001 60aa8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43576 f2e30000000100000000000006636861726973026e6c00000f0001 f2e38000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43577 bd8d00000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000010001 bd8d80000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43578 a9d70000000100000000000005746f706563026e6c0000ff0001 a9d78000000100000002000005746f706563026e6c0000ff0001c00c0002000100015180000c036e723705692d702d64c012c00c00020001000151800006036e7236c02a 43579 eb3f0000000100000000000006726567656c74026e6c0000ff0001 eb3f8000000100000002000006726567656c74026e6c0000ff0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02b 43580 2c120000000100000000000005647330313806787334616c6c026e6c0000010001 2c128000000100000003000205647330313806787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 43581 f73f00000001000000000000036e73330767617574656e67026e6c0000010001 f73f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43582 71c70000000100000000000005646e732d31056c61646f74026e6c0000010001 71c78000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43583 c73000000001000000000000036e73340767617574656e67026e6c0000010001 c73080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43584 ed34000000010000000000000967656c6468616c656e026e6c00000f0001 ed34800000010000000200000967656c6468616c656e026e6c00000f0001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 43585 69f100000001000000000000094d4c424c4f434b4552026e6c0000020001 69f184030001000000010000094d4c424c4f434b4552026e6c0000020001c01600060001000038400036026e730f646f6d61696e2d7265676973747279c0160a686f73746d6173746572c02d0bf1e540000070800000384000278d0000003840 43586 990500000001000000000000036e733109666972737466696e64026e6c0000010001 990580000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43587 b6930000000100000000000003777777046f70656c026e6c0000010001 b6938000000100000002000203777777046f70656c026e6c0000010001c0100002000100015180000c036e73310564656d6f6ec015c01000020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 43588 1e8d000000010000000000000656424e4554340e61726e6f6c642d73696564736d61026e6c0000010001 1e8d800000010000000200000656424e4554340e61726e6f6c642d73696564736d61026e6c0000010001c0130002000100015180000d036e7331036b706e036e657400c01300020001000151800006036e7332c03a 43589 6bf60000000100000000000005646e732d32056c61646f74026e6c0000010001 6bf68000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43590 6bf50000000100000000000005646e732d31056c61646f74026e6c0000010001 6bf58000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43591 1a200000000100000000000003777777057473636e6c026e6c0000010001 1a208000000100000002000203777777057473636e6c026e6c0000010001c0100002000100015180000d026e73077374616e6e6574c016c01000020001000151800006036e7332c02dc02a00010001000151800004d5852414c04300010001000151800004d5852418 43592 c71a00000001000000000000036e733209666972737466696e64026e6c0000010001 c71a80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43593 2fbb0000000100000000000005646e732d31056c61646f74026e6c0000010001 2fbb8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43594 8ea5000000010000000000000e656e65726769656f6e6c696f6e65026e6c00000f0001 8ea5840300010000000100000e656e65726769656f6e6c696f6e65026e6c00000f0001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 43595 6c670000000100000000000005646e732d31056c61646f74026e6c0000010001 6c678000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43596 17cc000000010000000000000662757265617503636461026e6c0000ff0001 17cc800000010000000200020662757265617503636461026e6c0000ff0001c01300020001000151800009026e730369736dc017c01300020001000151800006036e7332c02ec02b00010001000151800004d994ab02c04000010001000151800004d994ab03 43597 affb00000001000000000000026e730b6973642d686f6c6c616e64026e6c00001c0001 affb80000001000000020002026e730b6973642d686f6c6c616e64026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5e38d0ac03d00010001000151800004d5e38205 43598 1a0b00000001000000000000036e73320b6973642d686f6c6c616e64026e6c00001c0001 1a0b80000001000000020002036e73320b6973642d686f6c6c616e64026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc03000010001000151800004d5e38d0ac00c00010001000151800004d5e38205 43599 0a2f00000001000000000000077365796d6f75720b6973642d686f6c6c616e64026e6c00001c0001 0a2f80000001000000020002077365796d6f75720b6973642d686f6c6c616e64026e6c00001c0001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c03400010001000151800004d5e38d0ac04500010001000151800004d5e38205 43600 2ce10000000100000000000009646f7272657061616c026e6c00000f0001 2ce18000000100000002000009646f7272657061616c026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c016c00c0002000100015180000704686e7331c02f 43601 ac140000000100000000000005646e732d31056c61646f74026e6c0000010001 ac148000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43602 9398000000010000000000000b6f7564696e616672696b61026e6c00000f0001 9398800000010000000200020b6f7564696e616672696b61026e6c00000f0001c00c0002000100015180001103646e730a636f6e63657074736661c018c00c0002000100015180001004646e733208636f6e6365707473c018c02c00010001000151800004d5c51c03c04900010001000151800004d5c51e1c 43603 1ea900000001000000000000066b61726d6163036d6373026e6c0000ff0001 1ea980000001000000020001066b61726d6163036d6373026e6c0000ff0001c01300020001000151800005026e73c013c01300020001000151800010036e7332096379626572636f6d6dc017c02b00010001000151800004d5c40185 43604 a1d10000000100000000000005646e732d31056c61646f74026e6c0000010001 a1d18000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43605 8b3700000001000000000000026e73027675026e6c0000010001 8b3780000001000000030003026e73027675026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000a0473746172026373c00fc00f0002000100015180000e036e733107737572666e6574c012c00c0001000100015180000482258104c03400010001000151800004c01fe72ac04a00010001000151800004c0576a65 43606 8f0500000001000000000000056d61696c3207696e666f6e6574026e6c0000010001 8f0580000001000000020002056d61696c3207696e666f6e6574026e6c0000010001c0120002000100015180000704646e7331c012c0120002000100015180000704646e7332c012c02e00010001000151800004d4bd01c4c04100010001000151800004d4bd7f83 43607 f568000000010000000000000377777706766961766961026e6c0000010001 f568800000010000000200020377777706766961766961026e6c0000010001c01000020001000151800009026e730369736dc017c01000020001000151800006036e7332c02ec02b00010001000151800004d994ab02c04000010001000151800004d994ab03 43608 8f030000000100000000000005646e732d31056c61646f74026e6c0000010001 8f038000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43609 37480000000100000000000005646e732d31056c61646f74026e6c0000010001 37488000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43610 1db6000000010000000000000670726f646973056e76776d6e026e6c0000010001 1db6800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 43611 25460000000100000000000003737477026e6c0000ff0001 25468000000100000002000203737477026e6c0000ff0001c00c000200010001518000070469726973c00cc00c0002000100015180000e036e733107737572666e6574c010c02400010001000151800004c3a95a82c03700010001000151800004c0576a65 43612 0e6d0000000100000000000005646e732d31056c61646f74026e6c0000010001 0e6d8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43613 ffd2000000010000000000000a6d61696c73657276657204656d6973026e6c0000010001 ffd2800000010000000200000a6d61696c73657276657204656d6973026e6c0000010001c0170002000100015180000b026e73026e6c036e657400c0170002000100015180001206617574683630026e73026e6c027575c036 43614 9df1000000010000000000000377777710766f73656e7465727461696e6d656e74026e6c0000010001 9df1800000010000000200000377777710766f73656e7465727461696e6d656e74026e6c0000010001c01000020001000151800017036e73310d666173747365727665726e6c32036e657400c01000020001000151800006036e7332c039 43615 411d00000001000000000000036e73320d7061676570726f636573736f72026e6c0000010001 411d80000001000000030001036e73320d7061676570726f636573736f72026e6c0000010001c0100002000100015180000d026e7307706167656e6963c01ec01000020001000151800006036e7332c035c0100002000100015180000d036e73320663617374656cc01ec05d00010001000151800004c3558245 43616 9d4b00000001000000000000026e730d7061676570726f636573736f72026e6c0000010001 9d4b80000001000000030001026e730d7061676570726f636573736f72026e6c0000010001c00f0002000100015180000d026e7307706167656e6963c01dc00f00020001000151800006036e7332c034c00f0002000100015180000d036e73320663617374656cc01dc05c00010001000151800004c3558245 43617 9ef8000000010000000000003b6c6f6f6e76657270616b6b656e2d736163686574732d626c6973746572732d76657273747569766572732d666c61636f6e732d6165726f736f6c73026e6c0000020001 9ef8800000010000000200023b6c6f6f6e76657270616b6b656e2d736163686574732d626c6973746572732d76657273747569766572732d666c61636f6e732d6165726f736f6c73026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec048c00c00020001000151800006036e7332c060c05c00010001000151800004c29f4906c07400010001000151800004c29fb004 43618 f253000000010000000000000c61616e6e656d6572626f7574026e6c0000ff0001 f253800000010000000300010c61616e6e656d6572626f7574026e6c0000ff0001c00c0002000100015180000d026e7307696e746f756368c019c00c00020001000151800010026e7307696e746f756368036e657400c00c00020001000151800007046e733031c049c02d00010001000151800004d413c001 43619 f83100100001000000000001036e733503777873026e6c00000100010000290800000000000000 f83180000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 43620 ce7700000001000000000000085453434c49454e5406444e53424441024e4c0000010001 ce7784030001000000010000085453434c49454e5406444e53424441024e4c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 43621 54750000000100000000000006636861726973026e6c00001c0001 54758000000100000002000006636861726973026e6c00001c0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43622 c0b700000001000000000000037777770766757863617073026e6c0000010001 c0b780000001000000020000037777770766757863617073026e6c0000010001c01000020001000151800013026e730a646168686f7374696e6703636f6d00c01000020001000151800006036e7332c02f 43623 ca1a00000001000000000000036e733103636865026e6c0000010001 ca1a80000001000000020002036e733103636865026e6c0000010001c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004c2ab59fdc03600010001000151800004c0576a65 43624 3db100000001000000000000036e733203636865026e6c0000010001 3db180000001000000020002036e733203636865026e6c0000010001c01000020001000151800006036e7331c010c0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004c2ab59fdc03a00010001000151800004c0576a65 43625 2700000000010000000000000670726f646973056e76776d6e026e6c0000010001 2700800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 43626 6f3a000000010000000000000377777707746f7063617368026e6c0000010001 6f3a800000010000000200020377777707746f7063617368026e6c0000010001c01000020001000151800011036e73310a686f73746d6173746572c018c01000020001000151800006036e7332c030c02c0001000100015180000452c04516c0490001000100015180000452c04542 43627 047d000000010000000000000377777709706f7070656570657203636f6d096472616368746e6574026e6c00001c0001 047d840300010000000100000377777709706f7070656570657203636f6d096472616368746e6574026e6c00001c0001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 43628 5cd70000000100000000000003626c3402626c06787334616c6c026e6c0000010001 5cd78000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43629 39e000000001000000000000066c656e6e6570026e6c00000f0001 39e080000001000000020002066c656e6e6570026e6c00000f0001c00c0002000100015180000e036e733107656c63616e6574c013c00c00020001000151800006036e7332c02bc02700010001000151800004c1ac2d36c04100010001000151800004c1ac2d35 43630 185600000001000000000000076e73617574683103626974026e6c0000010001 185680000001000000030003076e73617574683103626974026e6c0000010001c01400020001000151800002c00cc0140002000100015180000a076e736175746832c014c0140002000100015180000a076e736175746833c014c00c00010001000151800004d5880c33c03a00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 43631 861b00000001000000000000076e73617574683203626974026e6c0000010001 861b80000001000000030003076e73617574683203626974026e6c0000010001c0140002000100015180000a076e736175746831c014c01400020001000151800002c00cc0140002000100015180000a076e736175746833c014c02c00010001000151800004d5880c33c00c00010001000151800004d5880c3bc05000010001000151800004d4ccc00b 43632 d7130000000100000000000003706f70086765617274736a65026e6c0000010001 d7138000000100000002000003706f70086765617274736a65026e6c0000010001c01000020001000151800014036e73310a6272696e6b686f737432036e657400c01000020001000151800006036e7332c031 43633 98f40000000100000000000008706f6c697469656b0b7a6f7267706f727461616c026e6c0000010001 98f48000000100000003000308706f6c697469656b0b7a6f7267706f727461616c026e6c0000010001c015000200010001518000110161026e7309636f6d626f64617461c021c015000200010001518000040162c037c015000200010001518000040163c037c03500010001000151800004d5de0b44c05200010001000151800004d5de0b45c06200010001000151800004d5de0b4e 43634 911700000001000000000000037330320474657261026e6c00000f0001 911780000001000000030002037330320474657261026e6c00000f0001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 43635 a40100000001000000000000036e733503777873026e6c0000010001 a40180000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 43636 09dd0000000100000000000012676c6f62616c2d73706f7274732d636f6d6d026e6c0000ff0001 09dd8000000100000002000012676c6f62616c2d73706f7274732d636f6d6d026e6c0000ff0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c03e 43637 c3c00000000100000000000007646f6c66696a6e026e6c0000ff0001 c3c08000000100000003000307646f6c66696a6e026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 43638 5106000000010000000000000f73686f776b6f72707364696e647561026e6c00000f0001 5106800000010000000200000f73686f776b6f72707364696e647561026e6c00000f0001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c036 43639 584900000001000000000000037777770d7365782d617274696b656c656e026e6c0000010001 584980000001000000020002037777770d7365782d617274696b656c656e026e6c0000010001c01000020001000151800011026e730b6973642d686f6c6c616e64c01ec01000020001000151800006036e7332c035c03200010001000151800004d5e38d0ac04f00010001000151800004d5e38205 43640 58ea00000001000000000000037777770f726f6164696e7374616c6c61746965026e6c0000010001 58ea80000001000000020001037777770f726f6164696e7374616c6c61746965026e6c0000010001c0100002000100015180000a036e733303777873c020c01000020001000151800006036e7334c038c04a00010001000151800004d5ef9a65 43641 13ec00000001000000000000037777770f726f6164696e7374616c6c61746965026e6c0000010001 13ec80000001000000020001037777770f726f6164696e7374616c6c61746965026e6c0000010001c0100002000100015180000a036e733303777873c020c01000020001000151800006036e7334c038c04a00010001000151800004d5ef9a65 43642 d71b00000001000000000000036d783103626974026e6c0000010001 d71b80000001000000030003036d783103626974026e6c0000010001c0100002000100015180000a076e736175746831c010c0100002000100015180000a076e736175746832c010c0100002000100015180000a076e736175746833c010c02800010001000151800004d5880c33c03e00010001000151800004d5880c3bc05400010001000151800004d4ccc00b 43643 5111000000010000000000000377777706707261786973026e6c0000010001 5111800000010000000300030377777706707261786973026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c017c01000020001000151800006036e7332c02fc01000020001000151800006036e7333c02fc02b00010001000151800004c3f13ceec04700010001000151800004c372eb43c059000100010001518000043e320e8f 43644 2270000000010000000000000668656c69756d056964657461026e6c0000010001 2270800000010000000300030668656c69756d056964657461026e6c0000010001c01300020001000151800010036e7331096d61726b6772616166c019c01300020001000151800006036e7332c031c01300020001000151800006036e7333c031c02d00010001000151800004c3f13ceec04900010001000151800004c372eb43c05b000100010001518000043e320e8f 43645 542d00000001000000000000037777770d6772617469736d6f6b6b656c73026e6c0000010001 542d80000001000000020000037777770d6772617469736d6f6b6b656c73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c035 43646 bfe500000001000000000000037777770b7365612d6578616d656e73026e6c0000010001 bfe580000001000000020002037777770b7365612d6578616d656e73026e6c0000010001c0100002000100015180000d026e730763697374726f6ec01cc01000020001000151800006036e7332c033c030000100010001518000043ed81f37c049000100010001518000043ed81f38 43647 53070000000100000000000008776f726d686f6c65056172637573026e6c0000010001 53078000000100000002000108776f726d686f6c65056172637573026e6c0000010001c01500020001000151800002c00cc0150002000100015180000b026e73026e6c036e657400c00c00010001000151800004c2b28701 43648 1c9c0000000100000000000008776f726d686f6c65056172637573026e6c0000260001 1c9c8000000100000002000108776f726d686f6c65056172637573026e6c0000260001c01500020001000151800002c00cc0150002000100015180000b026e73026e6c036e657400c00c00010001000151800004c2b28701 43649 1e6d0000000100000000000008686f73746e616d650462696e640000100003 1e6d8000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 43650 de1400000001000000000000036e733109666972737466696e64026e6c0000010001 de1480000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43651 fc6300000001000000000000036e733209666972737466696e64026e6c0000010001 fc6380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43652 84c228000001000200000000026e6c0000060001056c75786f7208696e7465726e6574026e6c00000500fe000000000000c01400010001000000000004c0a80128 84c2a8040000000000000000 43653 90ba0000000100000000000005646e732d31056c61646f74026e6c0000010001 90ba8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43654 3e0b0000000100000000000005646e732d32056c61646f74026e6c0000010001 3e0b8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43655 22ea000000010000000000000a736572766f2d77726170026e6c00000f0001 22ea800000010000000200020a736572766f2d77726170026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec017c00c00020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 43656 0000000070024000eb4a0000020405b401010402 000080010000000000000000 43657 223c00000001000000000000106c6f6f6e77616172646566696c746572026e6c0000020001 223c80000001000000020002106c6f6f6e77616172646566696c746572026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01dc00c00020001000151800006036e7332c035c03100010001000151800004c29f4906c04900010001000151800004c29fb004 43658 0a570000000100000000000006756e696d6f670475726c73026e6c0000010001 0a578000000100000002000206756e696d6f670475726c73026e6c0000010001c01300020001000151800012036e73350b73696c766572706f696e74c018c01300020001000151800006036e7336c030c02c0001000100015180000450f7c702c04a0001000100015180000450f7c602 43659 b87f0582501005b494490000000000000000 b87f80010000000000000000 43660 b87f058250184470519b0000008cc780000000010001000000000f313036353135313838393432362d330000f900010f313036353135313838393432362d330000f900ff00000000005003677373096d6963726f736f667403636f6d00403af2f9403c447900030000002d4e544c4d535350000100000097b200e0080008002500000005000500200000004c55584f52494e5445524e45540000 b87f80010000000000000000 43661 c0fb00000001000000000000037777770d7569746761616e736b72616e74026e6c0000010001 c0fb80000001000000020002037777770d7569746761616e736b72616e74026e6c0000010001c01000020001000151800015036e73310e726567696f70726f766964657273c01ec01000020001000151800006036e7332c036c03200010001000151800004d41da001c05300010001000151800004d41da1fe 43662 67ff0000000100000000000003777777076a6f62706f6f6c026e6c0000010001 67ff8000000100000003000203777777076a6f62706f6f6c026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 43663 87fe0000000100000000000006776468303131066e7434616c6c026e6c0000010001 87fe8000000100000002000206776468303131066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 43664 349200000001000000000000037777770477636373026e6c0000010001 349280000001000000020000037777770477636373026e6c0000010001c01000020001000151800016036e73310c776f726c6477696465646e73036e657400c01000020001000151800006036e7332c02d 43665 9f7300000001000000000000036e73310b64696e65726f6e6c696e65026e6c0000010001 9f7380000001000000020002036e73310b64696e65726f6e6c696e65026e6c0000010001c0100002000100015180000d026e73077072657a656e74c01cc01000020001000151800006036e7332c033c030000100010001518000043ec07802c049000100010001518000043ec07803 43666 41e600000001000000000000036e73320b64696e65726f6e6c696e65026e6c0000010001 41e680000001000000020002036e73320b64696e65726f6e6c696e65026e6c0000010001c0100002000100015180000d026e73077072657a656e74c01cc01000020001000151800006036e7332c033c030000100010001518000043ec07802c049000100010001518000043ec07803 43667 1a6100000001000000000000036e73330b64696e65726f6e6c696e65026e6c0000010001 1a6180000001000000020002036e73330b64696e65726f6e6c696e65026e6c0000010001c0100002000100015180000d026e73077072657a656e74c01cc01000020001000151800006036e7332c033c030000100010001518000043ec07802c049000100010001518000043ec07803 43668 00000000700240000e870000020405b401010402 000080010000000000000000 43669 b87f97b7501005b425500000000000000000 43670 b87f97b75018447052630000008c58c0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af2f9403c447900030000002d4e544c4d535350000100000097b200e0080008002500000005000500200000004c55584f52494e5445524e45540000 43671 69ed00000001000000000000037777770b6e69657577756262656e61026e6c0000010001 69ed80000001000000020000037777770b6e69657577756262656e61026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 43672 aea200000001000000000000036e733109666972737466696e64026e6c0000010001 aea280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43673 09ab00000001000000000000066d61696c6d65026e6c00000f0001 09ab80000001000000030002066d61696c6d65026e6c00000f0001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 43674 8b3f00000001000000000000036e733209666972737466696e64026e6c0000010001 8b3f80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43675 0e9f00000001000000000000076172626f726973026e6c00000f0001 0e9f80000001000000020002076172626f726973026e6c00000f0001c00c00020001000151800011036e73310a666f726d6d61696c6572c014c00c00020001000151800006036e7332c02cc028000100010001518000045054f5d7c045000100010001518000045054f5d8 43676 256900000001000000000000044b656e47026e6c00000f0001 256980000001000000020002044b656e47026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec011c00c00020001000151800006036e7332c029c02500010001000151800004c29f4906c03d00010001000151800004c29fb004 43677 e8b30000000100000000000005646168627606787334616c6c026e6c0000010001 e8b38000000100000003000205646168627606787334616c6c026e6c0000010001c01200020001000151800005026e73c012c01200020001000151800006036e7332c012c0120002000100015180000d026e730472697065036e657400c02d00010001000151800004c26d0642c03e00010001000151800004c26d0963 43678 dc0200000001000000000000095f6b65726265726f73045f7463700b626973677665726f6c6d65026e6c0000060001 dc0284030001000000010000095f6b65726265726f73045f7463700b626973677665726f6c6d65026e6c0000060001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 43679 6d2d0000000100000000000003777777076564692d746965026e6c0000010001 6d2d8000000100000002000203777777076564692d746965026e6c0000010001c0100002000100015180000c036e73310563736e6574c018c01000020001000151800006036e7332c030c02c00010001000151800004c2451012c04400010001000151800004c2451212 43680 1c0300000001000000000000066272756e656c026e6c0000ff0001 1c0380000001000000020000066272756e656c026e6c0000ff0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c02a 43681 7c5f00000001000000000000026e73076e656473746174026e6c00001c0001 7c5f80000001000000020002026e73076e656473746174026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43682 301d00000001000000000000036e7332076e656473746174026e6c0000010001 301d80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43683 f16a00000001000000000000036e7332076e656473746174026e6c00001c0001 f16a80000001000000020002036e7332076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43684 4cab00000001000000000000036e7333076e656473746174026e6c00001c0001 4cab80000001000000020002036e7333076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 43685 566f00000001000000000000036e7334076e656473746174026e6c0000010001 566f80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43686 e81300000001000000000000036e7334076e656473746174026e6c00001c0001 e81380000001000000020002036e7334076e656473746174026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43687 533e00000001000000000000036e733103696e67026e6c00001c0001 533e80000001000000020002036e733103696e67026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 43688 c9b300000001000000000000036e733203696e67026e6c00001c0001 c9b380000001000000020002036e733203696e67026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 43689 a39a00000001000000000000036e733103696e67026e6c0000260001 a39a80000001000000020002036e733103696e67026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000491dd19c2c0360001000100015180000491dd5dc2 43690 af4700000001000000000000036e733203696e67026e6c0000260001 af4780000001000000020002036e733203696e67026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0280001000100015180000491dd19c2c00c0001000100015180000491dd5dc2 43691 64ed00000001000000000000086c6f67696e6e65740870617373706f727403636f6d096472616368746e6574026e6c00001c0001 64ed84030001000000010000086c6f67696e6e65740870617373706f727403636f6d096472616368746e6574026e6c00001c0001c02c00060001000038400036026e730f646f6d61696e2d7265676973747279c02c0a686f73746d6173746572c0430bf1e540000070800000384000278d0000003840 43692 a2b300000001000000000000066f7a77617265026e6c0000010001 a2b380000001000000020000066f7a77617265026e6c0000010001c00c00020001000151800011026e7308786c736572766572036e657400c00c00020001000151800006036e7332c02a 43693 fa10000000010000000000000767657069646165026e6c0000010001 fa10800000010000000200020767657069646165026e6c0000010001c00c0002000100015180000a036e7331036e7873c014c00c00020001000151800006036e7332c02cc02800010001000151800004d973c015c03e00010001000151800004d973c102 43694 8d52000000010000000000000e6c697474656e736572616469656c026e6c0000010001 8d52800000010000000200020e6c697474656e736572616469656c026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc01bc00c00020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 43695 fdf6000000010000000000000377777711726f656c6f6673726163696e677465616d026e6c0000010001 fdf6800000010000000200000377777711726f656c6f6673726163696e677465616d026e6c0000010001c0100002000100015180000c026e7306766576696461c022c01000020001000151800006036e7332c039 43696 1faa28000001000000010000026e6c0000060001095f6b65726265726f73045f7463700b626973677665726f6c6d65026e6c00002100010000025800220000006400580b64632d68756e74736d616e0b626973677665726f6c6d65026e6c00 1faaa8040000000000000000 43697 519c000000010000000000000377777709737461727467696473026e6c0000010001 519c800000010000000200020377777709737461727467696473026e6c0000010001c01000020001000151800010036e7331096e65746e6174696f6ec01ac01000020001000151800006036e7332c032c02e00010001000151800004d5efb105c04a00010001000151800004505faa0a 43698 da7d0000000100000000000003646d69087a776f6c73776562026e6c0000010001 da7d8000000100000002000003646d69087a776f6c73776562026e6c0000010001c01000020001000151800013036e733009696e7465726c697a65036e657400c01000020001000151800006036e7331c031 43699 000000007002faf0bdf60000020405b401010402 000080010000000000000000 43700 26c000000001000000000000036e73300461736d6c024e4c0000010001 26c080000001000000030001036e73300461736d6c024e4c0000010001c01000020001000151800002c00cc0100002000100015180000d026e730461736d6c03636f6d00c01000020001000151800006036e7331c03ac00c00010001000151800004c26979c2 43701 547c0000000100000000000007646f6364617461026e6c00000f0001 547c8000000100000002000007646f6364617461026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c014c00c0002000100015180000704686e7331c02d 43702 50d200000001000000000000037777770a74726176656c63697479026e6c0000010001 50d280000001000000020002037777770a74726176656c63697479026e6c0000010001c0100002000100015180000d04646e733105692d702d64c01bc0100002000100015180000704646e7332c034c02f00010001000151800004d9124003c04800010001000151800004d9124104 43703 f0f00000000100000000000003656465026e6c00000f0001 f0f08000000100000002000103656465026e6c00000f0001c00c00020001000151800006036e7331c00cc00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c02400010001000151800004d5a0fd2a 43704 b8807c0e5010faf0b61b0000000000000000 b880fc040000000000000000 43705 863500000001000000000000036e733303777873026e6c0000010001 863580000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 43706 b8807c0e5018faf0e626000000950d40000000010001000000000f313231393737303731323038322d330000f900010f313231393737303731323038322d330000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd8a403c4f0a0003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000 b880fc040000000000000000 43707 bf3f000000010000000000000964636e6c646d7a30320f6461696d6c657263687279736c6572026e6c0000010001 bf3f800000010000000200010964636e6c646d7a30320f6461696d6c657263687279736c6572026e6c0000010001c01600020001000151800002c00cc0160002000100015180000b026e73026e6c036e657400c00c00010001000151800004c14e3f46 43708 a0c2000000010000000000000a6265746572686f72656e026e6c00000f0001 a0c2800000010000000200010a6265746572686f72656e026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c017c04400010001000151800004c2860043 43709 b8807c1c5011fae2b5830000000000000000 b880fc140000000000000000 43710 000000007002faf0c3a40000020405b401010402 000080010000000000000000 43711 b8807c1d5010fae2b5820000000000000000 b880fc140000000000000000 43712 b88124355010faf013a20000000000000000 b881a4330000000000000000 43713 b88124355018faf0e66d000000956b80000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd8a403c4f0a0003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000 b881a4330000000000000000 43714 21c200000001000000000000037777770a706f7374657273616c65026e6c0000010001 21c280000001000000020002037777770a706f7374657273616c65026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01bc01000020001000151800006036e7332c033c02f000100010001518000045104580ac04f000100010001518000045104601e 43715 98c20000000100000000000004646e73320471776562026e6c0000010001 98c28000000100000002000204646e73320471776562026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 43716 d1160000000100000000000004646e73310471776562026e6c0000010001 d1168000000100000002000204646e73310471776562026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 43717 93c30000000100000000000004646e73310471776562026e6c00001c0001 93c38000000100000002000204646e73310471776562026e6c00001c0001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 43718 e02c0000000100000000000004646e73310471776562026e6c0000260001 e02c8000000100000002000204646e73310471776562026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 43719 9fb30000000100000000000004646e73320471776562026e6c00001c0001 9fb38000000100000002000204646e73320471776562026e6c00001c0001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 43720 8b860000000100000000000004646e73320471776562026e6c0000260001 8b868000000100000002000204646e73320471776562026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 43721 b88124435011fae2130a0000000000000000 b881a4430000000000000000 43722 000000007002faf018ba0000020405b401010402 000080010000000000000000 43723 02490000000100000000000005646e732d31056c61646f74026e6c0000010001 02498000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43724 b88124445010fae213090000000000000000 b881a4430000000000000000 43725 c50d0000000100000000000005646e732d32056c61646f74026e6c0000010001 c50d8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43726 b881d8d95010faf0b4120000000000000000 43727 d8510000000100000000000007636e766469626f026e6c0000010001 d8518000000100000002000207636e766469626f026e6c0000010001c00c0002000100015180000c046e7330310462696374c014c00c00020001000151800007046e733032c02dc02800010001000151800004d413d6c8c04000010001000151800004d413d604 43728 b881d8d95018faf04ede00000095a380000000010001000000000f313231393737303731323038322d320000f900010f313231393737303731323038322d320000f900ff00000000005903677373096d6963726f736f667403636f6d00403afd8a403c4f0a0003000000364e544c4d535350000100000097b208e00b000b002b0000000b000b002000000044432d48554e54534d414e424953475645524f4c4d450000 43729 ba7500000001000000000000027464076368656d70726f026e6c0000060001 ba7584030001000000010000027464076368656d70726f026e6c0000060001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 43730 b22300000001000000000000037777770672686d776562026e6c0000010001 b22380000001000000030002037777770672686d776562026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 43731 b881d8e75011fae2b37a0000000000000000 43732 b40300000001000000000000067369746573310d696e7465727265676973746572026e6c0000010001 b40380000001000000020000067369746573310d696e7465727265676973746572026e6c0000010001c01300020001000151800017036e73310d696e746572726567697374657203636f6d00c01300020001000151800006036e7332c039 43733 4e1e000000010000000000000377777710686f656b737472616a7577656c696572026e6c0000010001 4e1e800000010000000200020377777710686f656b737472616a7577656c696572026e6c0000010001c0100002000100015180000a026e730469636d63c021c01000020001000151800006036e7332c038c035000100010001518000043e643805c04b000100010001518000043e643806 43734 be620000000100000000000008616c6c6f6365616e026e6c0000ff0001 be628000000100000002000208616c6c6f6365616e026e6c0000ff0001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 43735 b881d8e85010fae2b3790000000000000000 43736 7af000000001000000000000046d61696c07646f6364617461026e6c0000010001 7af080000001000000020000046d61696c07646f6364617461026e6c0000010001c0110002000100015180000f04686e73300774697363616c69c019c0110002000100015180000704686e7331c032 43737 3337000000010000000000001764656e6174696f6e616c65766163617475726562616e6b026e6c0000010001 3337800000010000000300021764656e6174696f6e616c65766163617475726562616e6b026e6c0000010001c00c0002000100015180000d036e733106776964657873c024c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c03cc03800010001000151800004d4ccc0fcc06d000100010001518000043efa0703 43738 78ba0000000100000000000003777777056c6572656e026e6c0000010001 78ba8000000100000002000203777777056c6572656e026e6c0000010001c0100002000100015180000a036e7331036e7873c016c01000020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 43739 5e8d0000000100000000000008756d636e6574303203617a6e026e6c00001c0001 5e8d8000000100000003000308756d636e6574303203617a6e026e6c00001c0001c0150002000100015180000b08756d636e65743031c015c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483aedc02c00c0001000100015180000483aee402c05200010001000151800004c0576a65 43740 a27b0000000100000000000008756d636e6574303203617a6e026e6c0000260001 a27b8000000100000003000308756d636e6574303203617a6e026e6c0000260001c0150002000100015180000b08756d636e65743031c015c01500020001000151800002c00cc0150002000100015180000e036e733107737572666e6574c019c02d0001000100015180000483aedc02c00c0001000100015180000483aee402c05200010001000151800004c0576a65 43741 4d580000000100000000000008756d636e6574303103617a6e026e6c00001c0001 4d588000000100000003000308756d636e6574303103617a6e026e6c00001c0001c01500020001000151800002c00cc0150002000100015180000b08756d636e65743032c015c0150002000100015180000e036e733107737572666e6574c019c00c0001000100015180000483aedc02c03b0001000100015180000483aee402c05200010001000151800004c0576a65 43742 85d70000000100000000000008756d636e6574303103617a6e026e6c0000260001 85d78000000100000003000308756d636e6574303103617a6e026e6c0000260001c01500020001000151800002c00cc0150002000100015180000b08756d636e65743032c015c0150002000100015180000e036e733107737572666e6574c019c00c0001000100015180000483aedc02c03b0001000100015180000483aee402c05200010001000151800004c0576a65 43743 17d800100001000000000001036e7334076e656473746174026e6c00000100010000290800000080000000 17d880000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 43744 70ef00100001000000000001036e7332076e656473746174026e6c00000100010000290800000080000000 70ef80000001000000020003036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 43745 2e1d0000000100000000000004736d74700763697479616972026e6c0000010001 2e1d8000000100000002000004736d74700763697479616972026e6c0000010001c01100020001000151800018036e73310e66696e616c2d66726f6e74696572036e657400c01100020001000151800006036e7332c031 43746 798000000001000000000000037777770d6b6c65696e6b6170697461616c026e6c0000010001 798080000001000000030002037777770d6b6c65696e6b6170697461616c026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 43747 ca7a00000001000000000000037777770961657363756c616170026e6c0000010001 ca7a80000001000000020002037777770961657363756c616170026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c01ac01000020001000151800006036e7332c031c02e00010001000151800004c3402003c04700010001000151800004c340202b 43748 66e000000001000000000000037777770e646174696e672d73657276696365026e6c0000010001 66e080000001000000020002037777770e646174696e672d73657276696365026e6c0000010001c0100002000100015180000b026e730564616e6479c01fc01000020001000151800006036e7332c036c03300010001000151800004c1ad2b11c04a00010001000151800004d50abe20 43749 6a56000000010000000000000a70696e6b656c6f746a65076265676865796e026e6c0000010001 6a56800000010000000200000a70696e6b656c6f746a65076265676865796e026e6c0000010001c01700020001000151800012026e7309686f7374696e673475036e657400c01700020001000151800006036e7332c036 43750 776f00000001000000000000036e733109666972737466696e64026e6c0000010001 776f80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43751 4c7300000001000000000000036e733209666972737466696e64026e6c0000010001 4c7380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43752 129600000001000000000000026e73076e656473746174026e6c0000010001 129680000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43753 541b0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 541b8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 43754 333000000001000000000000037777770473757266026e6c0000010001 333080000001000000030003037777770473757266026e6c0000010001c0100002000100015180000f036e7331086d6f746966616374c015c01000020001000151800006036e7332c02dc0100002000100015180000e036e733207737572666e6574c015c02900010001000151800004d44ebd9dc04400010001000151800004d44ebd9ec05600010001000151800004c0572402 43755 1ea700000001000000000000036e733109666972737466696e64026e6c0000010001 1ea780000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43756 25b400000001000000000000036e733209666972737466696e64026e6c0000010001 25b480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43757 2f1c00000001000000000000086d6972726f72656407666c6162626572026e6c0000010001 2f1c80000001000000030002086d6972726f72656407666c6162626572026e6c0000010001c0150002000100015180000d036e733106776964657873c01dc01500020001000151800010036e733206776964657873036e657400c01500020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 43758 34c50000000100000000000008616473657276657206776562616473026e6c0000010001 34c58000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 43759 a8860000000100000000000006636861726973026e6c00000f0001 a8868000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43760 8ca200000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 8ca280000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 43761 c65100000001000000000000036e7334096b6162656c666f6f6e026e6c0000010001 c65180000001000000020002036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f03 43762 db900000000100000000000003777777117665726f756465726465766c6f6572656e026e6c0000010001 db908000000100000002000203777777117665726f756465726465766c6f6572656e026e6c0000010001c01000020001000151800012036e73310b736c61636b736572766572c022c01000020001000151800006036e7332c03ac036000100010001518000043ed444c0c054000100010001518000043ed44d0a 43763 4e8000000001000000000000046164737004696c7365026e6c0000010001 4e8080000001000000030003046164737004696c7365026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02a000100010001518000043e45a282c03c000100010001518000043e45a283c04e000100010001518000043e45a284 43764 e63a00000001000000000000037777770b666c616262657267617374026e6c0000010001 e63a84030001000000010000037777770b666c616262657267617374026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 43765 0e5200000001000000000000037777770674726f66656f026e6c0000010001 0e5280000001000000020001037777770674726f66656f026e6c0000010001c0100002000100015180000a036e733303777873c017c01000020001000151800006036e7334c02fc04100010001000151800004d5ef9a65 43766 9725000000010000000000000550432d3132186d74646c616e64736368617073617263686974656374656e026e6c0000010001 9725800000010000000200020550432d3132186d74646c616e64736368617073617263686974656374656e026e6c0000010001c0120002000100015180000c026e7306787334616c6cc02bc01200020001000151800006036e7332c042c03f00010001000151800004c26d0642c05700010001000151800004c26d0963 43767 f3e5000000010000000000000450433138186d74646c616e64736368617073617263686974656374656e026e6c0000010001 f3e5800000010000000200020450433138186d74646c616e64736368617073617263686974656374656e026e6c0000010001c0110002000100015180000c026e7306787334616c6cc02ac01100020001000151800006036e7332c041c03e00010001000151800004c26d0642c05600010001000151800004c26d0963 43768 43b6000000010000000000000d6138302d3132362d32372d3537046164736c06787334616c6c026e6c0000010001 43b6800000010000000300020d6138302d3132362d32372d3537046164736c06787334616c6c026e6c0000010001c01f00020001000151800005026e73c01fc01f00020001000151800006036e7332c01fc01f0002000100015180000d026e730472697065036e657400c03a00010001000151800004c26d0642c04b00010001000151800004c26d0963 43769 187c000000010000000000000b68756e6b656d6f6c6c6572026e6c0000010001 187c800000010000000300030b68756e6b656d6f6c6c6572026e6c0000010001c00c00020001000151800010036e7331096d61726b6772616166c018c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030c02c00010001000151800004c3f13ceec04800010001000151800004c372eb43c05a000100010001518000043e320e8f 43770 50fe00000001000000000000036e733206766576696461026e6c0000010001 50fe80000001000000030002036e733206766576696461026e6c0000010001c0100002000100015180000d036e733106776964657873c017c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02fc02b00010001000151800004d4ccc0fcc060000100010001518000043efa0703 43771 078a000000010000000000000866616c6c6261636b067874646e6574026e6c0000010001 078a800000010000000200020866616c6c6261636b067874646e6574026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800006036e7331c015c03000010001000151800004c16e9d02c04100010001000151800004d9cc165f 43772 a8d00000000100000000000004736d7470067874646e6574026e6c0000010001 a8d08000000100000002000204736d7470067874646e6574026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7331c011c02c00010001000151800004c16e9d02c03d00010001000151800004d9cc165f 43773 254700000001000000000000037777770472696765026e6c0000010001 254780000001000000020002037777770472696765026e6c0000010001c0100002000100015180000c036e733105636176656fc015c01000020001000151800006036e7332c02dc029000100010001518000045112a002c041000100010001518000045112a102 43774 d55b000000010000000000000866616c6c6261636b046d61696c06776964657873026e6c0000010001 d55b800000010000000300020866616c6c6261636b046d61696c06776964657873026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800010036e733206776964657873036e657400c01a00020001000151800006036e7333c01ac03500010001000151800004d4ccc0fcc063000100010001518000043efa0703 43775 178b000000010000000000000377777710736f6c6c6963697461746965696e666f026e6c0000010001 178b800000010000000200020377777710736f6c6c6963697461746965696e666f026e6c0000010001c0100002000100015180000f026e7309656174736572766572c021c01000020001000151800006036e7332c038c03500010001000151800004d4cb0e42c05000010001000151800004d4cb1221 43776 d11a000000010000000000000377777708636c69636b666565026e6c0000010001 d11a800000010000000200020377777708636c69636b666565026e6c0000010001c0100002000100015180000b036e7331046e732d31c019c01000020001000151800006036e7332c031c02d000100010001518000045045a0cdc04400010001000151800004d4cceec8 43777 2da0000000010000000000000874726f7577776562026e6c0000010001 2da0800000010000000300030874726f7577776562026e6c0000010001c00c0002000100015180000e076e73617574683103626974c015c00c0002000100015180000a076e736175746832c031c00c0002000100015180000a076e736175746833c031c02900010001000151800004d5880c33c04300010001000151800004d5880c3bc05900010001000151800004d4ccc00b 43778 183100000001000000000000126c6f6f706261616e6f7269656e7461746965026e6c0000020001 183180000001000000020002126c6f6f706261616e6f7269656e7461746965026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01fc00c00020001000151800006036e7332c037c03300010001000151800004c29f4906c04b00010001000151800004c29fb004 43779 e1f000000001000000000000036e733107686f7374696e6703656269026e6c0000010001 e1f080000001000000020001036e733107686f7374696e6703656269026e6c0000010001c01800020001000151800002c00cc0180002000100015180000d03646e73036b706e03636f6d00c00c00010001000151800004c1ad9c46 43780 88c20000000100000000000009686f636f7061727473026e6c00000f0001 88c28000000100000002000209686f636f7061727473026e6c00000f0001c00c00020001000151800012036e73310b676c6f62616c7369746573c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d4cce37ac04800010001000151800004d94d8b0c 43781 f2e300000001000000000000037777770472656e7a026e6c0000010001 f2e380000001000000030003037777770472656e7a026e6c0000010001c0100002000100015180000e076e73617574683103626974c015c0100002000100015180000a076e736175746832c031c0100002000100015180000a076e736175746833c031c02900010001000151800004d5880c33c04300010001000151800004d5880c3bc05900010001000151800004d4ccc00b 43782 4df400000001000000000000046d61696c0c776f6f72646c6f6f69657273026e6c0000010001 4df480000001000000020002046d61696c0c776f6f72646c6f6f69657273026e6c0000010001c0110002000100015180000f026e7309656174736572766572c01ec01100020001000151800006036e7332c035c03200010001000151800004d4cb0e42c04d00010001000151800004d4cb1221 43783 424500000001000000000000037777770473696d61026e6c0000010001 424580000001000000020002037777770473696d61026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c015c01000020001000151800006036e7332c02dc02900010001000151800004d43d0f08c04700010001000151800004d43d19e2 43784 51c90010000100000000000105737461747308626f6f6b696e6773026e6c00000100010000290800000080000000 51c98000000100000002000205737461747308626f6f6b696e6773026e6c0000010001c01200020001000151800009026e730374656ec01bc0120002000100015180000b026e73026e6c036e657400c02f00010001000151800004c36c4b010000291000000000000000 43785 86b400000001000000000000067768646e7331056577656b61026e6c0000010001 86b480000001000000020002067768646e7331056577656b61026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7333c013c02d0001000100015180000451ab6504c03f0001000100015180000451ab660e 43786 804000000001000000000000067768646e7332056577656b61026e6c0000010001 804080000001000000020002067768646e7332056577656b61026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7333c013c02d0001000100015180000451ab6504c03f0001000100015180000451ab660e 43787 da4b000000010000000000000773747564656e740868736c656964656e026e6c0000010001 da4b800000010000000200020773747564656e740868736c656964656e026e6c0000010001c01400020001000151800006036e7331c014c0140002000100015180000e036e733107737572666e6574c01dc03100010001000151800004c3a95702c04300010001000151800004c0576a65 43788 32790000000100000000000009736d74702d6f75743506787334616c6c026e6c00000f0001 32798000000100000003000209736d74702d6f75743506787334616c6c026e6c00000f0001c01600020001000151800005026e73c016c01600020001000151800006036e7332c016c0160002000100015180000d026e730472697065036e657400c03100010001000151800004c26d0642c04200010001000151800004c26d0963 43789 aece000000010000000000000365676d026e6c0000010001 aece800000010000000200020365676d026e6c0000010001c00c0002000100015180000e036e733107626265796f6e64c010c00c00020001000151800006036e7332c028c024000100010001518000043eb1900bc03e000100010001518000043eb19002 43790 88f100000001000000000000036e733104686f6d65026e6c0000010001 88f180000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 43791 11210010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 11218000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 43792 e60a00000001000000000000037777770a68696c746f6e6d656164026e6c0000010001 e60a84030001000000010000037777770a68696c746f6e6d656164026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 43793 400c0000000100000000000003777777036e6864026e6c0000010001 400c8000000100000003000303777777036e6864026e6c0000010001c0100002000100015180000e076e73617574683103626974c014c0100002000100015180000a076e736175746832c030c0100002000100015180000a076e736175746833c030c02800010001000151800004d5880c33c04200010001000151800004d5880c3bc05800010001000151800004d4ccc00b 43794 1ccc0000000100000000000003777777096d656469616d656e75026e6c0000010001 1ccc8000000100000003000303777777096d656469616d656e75026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 43795 88a2000000010000000000000a496e746572706f6c6973026e6c0000ff0001 88a2800000010000000200000a496e746572706f6c6973026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 43796 fd080000000100000000000003626c3102626c06787334616c6c026e6c0000010001 fd088000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43797 464a000000010000000000000d66756e696e6475737472696573026e6c00000f0001 464a800000010000000300020d66756e696e6475737472696573026e6c00000f0001c00c0002000100015180000f036e7331086c65617365776562c01ac00c00020001000151800006036e7332c032c00c00020001000151800012036e7333086c65617365776562036f726700c02e000100010001518000043ed44079c049000100010001518000043ed4407a 43798 6e2e00000001000000000000056d656c7365026e6c0000ff0001 6e2e80000001000000020000056d656c7365026e6c0000ff0001c00c0002000100015180000f04686e73300774697363616c69c012c00c0002000100015180000704686e7331c02b 43799 06d4000000010000000000000672656c6179310b776f726c646f6e6c696e65026e6c0000010001 06d4800000010000000300020672656c6179310b776f726c646f6e6c696e65026e6c0000010001c0130002000100015180000f04616e73310774697363616c69c01fc0130002000100015180000704616e7332c038c0130002000100015180001404616e73330a74697363616c696e657402626500c03300010001000151800004c3f14d38c04e00010001000151800004c3f13325 43800 648a00000001000000000000046d61696c076575726f6e6574026e6c0000010001 648a80000001000000020001046d61696c076575726f6e6574026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000d026e73046575726f036e657400c02d00010001000151800004c2860043 43801 6f8b000000010000000000000f616472656e616c696e73706f727473026e6c0000010001 6f8b800000010000000200020f616472656e616c696e73706f727473026e6c0000010001c00c00020001000151800013036e73310c62656472696a76656e776562c01cc00c00020001000151800006036e7332c034c03000010001000151800004d90867fec04f00010001000151800004c1ad2bfe 43802 97af000000010000000000000661736f706f73026e6c0000ff0001 97af800000010000000200000661736f706f73026e6c0000ff0001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 43803 8116000000010000000000000a69706435346262396138077072656d69756d06706c616e6574026e6c0000010001 8116800000010000000300030a69706435346262396138077072656d69756d06706c616e6574026e6c0000010001c01f0002000100015180000b046e73303803777873c026c01f00020001000151800007046e733039c03fc01f00020001000151800006036e7334c03fc03a00010001000151800004c3790128c05100010001000151800004c3790143c06400010001000151800004d5ef9a65 43804 2f7000000001000000000000037777770e62622d6164766572746973696e67026e6c0000010001 2f7080000001000000020000037777770e62622d6164766572746973696e67026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c036 43805 a48100000001000000000000066462696e6574026e6c00000f0001 a48180000001000000020002066462696e6574026e6c00000f0001c00c0002000100015180000d026e730777697a7a626974c013c00c00020001000151800006036e7332c02ac027000100010001518000043e3a360bc040000100010001518000043e3a360c 43806 1290000000010000000000000377777703646674026e6c0000010001 1290800000010000000200000377777703646674026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c02c 43807 f703000000010000000000000f6361726176616e732d6f6e6c696e65026e6c00000f0001 f703800000010000000200020f6361726176616e732d6f6e6c696e65026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01cc00c00020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 43808 248c000000010000000000000663616c646963026e6c00000f0001 248c800000010000000200000663616c646963026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02b 43809 cab600000001000000000000055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f736974657304686f6e6b026e6c0000060001 cab680000001000000020002055f6c646170045f746370155374616e64616172642d6565727374652d73697465065f736974657304686f6e6b026e6c0000060001c0340002000100015180000f036e73310864736267726f6570c039c03400020001000151800006036e7332c051c04d00010001000151800004d4362461c06800010001000151800004c36c2c36 43810 0c4a0000000100000000000003777777096575726f6368616d70026e6c0000010001 0c4a8000000100000002000203777777096575726f6368616d70026e6c0000010001c01000020001000151800016036e73310f73696d706c65736f6c7574696f6e73c01ac01000020001000151800006036e7332c032c02e00010001000151800004d973cc32c05000010001000151800004d973cc33 43811 45ae0000000100000000000006636861726973026e6c00000f0001 45ae8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43812 87df00000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 87df80000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 43813 87e000000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 87e080000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 43814 87e200000001000000000000036e73310d666c65746873686f7374696e67026e6c0000010001 87e280000001000000020000036e73310d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 43815 87e300000001000000000000036e73320d666c65746873686f7374696e67026e6c0000010001 87e380000001000000020000036e73320d666c65746873686f7374696e67026e6c0000010001c01000020001000151800013036e73310c616374697665646f6d61696ec01ec01000020001000151800006036e7332c036 43816 d4e7000000010000000000000a696e746572696d6e6574026e6c00001c0001 d4e7800000010000000200000a696e746572696d6e6574026e6c00001c0001c00c00020001000151800013036e733009696e7465726c697a65036e657400c00c00020001000151800006036e7331c02f 43817 02550000000100000000000004616a6178066e696b686566026e6c0000010001 02558000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 43818 fd19000000010000000000000377777707676f6c64776562026e6c0000010001 fd19800000010000000200000377777707676f6c64776562026e6c0000010001c0100002000100015180000e026e730562622d6964036e657400c01000020001000151800006036e7332c02f 43819 dae3000000010000000000000377777711726f7474657264616d2d616972706f7274026e6c0000010001 dae3800000010000000200020377777711726f7474657264616d2d616972706f7274026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c022c01000020001000151800006036e7332c03ac03600010001000151800004505fa002c05100010001000151800004505fac02 43820 c5f80000000100000000000007646f6c66696a6e026e6c0000ff0001 c5f88000000100000003000307646f6c66696a6e026e6c0000ff0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc028000100010001518000043e45a282c03a000100010001518000043e45a283c04c000100010001518000043e45a284 43821 611a0000000100000000000005646e732d31056c61646f74026e6c0000010001 611a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43822 5ead00000001000000000000036e7334076e656473746174026e6c0000010001 5ead80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43823 3d610000000100000000000005646e732d32056c61646f74026e6c0000010001 3d618000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 43824 32b900000001000000000000036e7332076e656473746174026e6c0000010001 32b980000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 43825 919f00000001000000000000046d61696c076c616361726469026e6c0000010001 919f80000001000000020002046d61696c076c616361726469026e6c0000010001c0110002000100015180000e026e730874657272617a7572c019c01100020001000151800006036e7332c030c02d00010001000151800004d5880e9ac04700010001000151800004d59ae202 43826 488000000001000000000000094747425345525645520d6767622d64616d73706f727433026e6c0000010001 488084030001000000010000094747425345525645520d6767622d64616d73706f727433026e6c0000010001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 43827 7106000000010000000000000368696f0368656e026e6c00000f0001 7106800000010000000300030368696f0368656e026e6c00000f0001c0100002000100015180000d0a6a75666665726265656bc010c0100002000100015180000e036e733107737572666e6574c014c0100002000100015180000b036e7332046873696ac014c02800010001000151800004914c0248c04100010001000151800004c0576a65c05b000100010001518000049102d715 43828 375b000000010000000000000868696e7474656368026e6c00000f0001 375b800000010000000300030868696e7474656368026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02900010001000151800004c2ab32e1c03b00010001000151800004c2ab32e2c04d00010001000151800004c3405ec2 43829 b3da00000001000000000000036e73310868696e7474656368026e6c0000010001 b3da80000001000000030003036e73310868696e7474656368026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004c2ab32e1c03b00010001000151800004c2ab32e2c04d00010001000151800004c3405ec2 43830 5be600000001000000000000036e73320868696e7474656368026e6c0000010001 5be680000001000000030003036e73320868696e7474656368026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02d00010001000151800004c2ab32e1c00c00010001000151800004c2ab32e2c04d00010001000151800004c3405ec2 43831 238200000001000000000000036e73330868696e7474656368026e6c0000010001 238280000001000000030003036e73330868696e7474656368026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02d00010001000151800004c2ab32e1c03f00010001000151800004c2ab32e2c00c00010001000151800004c3405ec2 43832 7ef600000001000000000000086261726d61746f6e026e6c00000f0001 7ef680000001000000020002086261726d61746f6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02900010001000151800004d5a0da96c03b00010001000151800004d5a0da64 43833 e5d700000001000000000000036e73320a77656273797374656d73026e6c0000010001 e5d780000001000000020002036e73320a77656273797374656d73026e6c0000010001c01000020001000151800007046e733031c010c01000020001000151800007046e733032c010c02f00010001000151800004d4cccf12c042000100010001518000043eddd552 43834 882800000001000000000000037777770b627575726d6569736a6573026e6c0000010001 882880000001000000020000037777770b627575726d6569736a6573026e6c0000010001c01000020001000151800010036e73610674696e74656c03636f6d00c01000020001000151800006036e7362c034 43835 664600000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000260001 664680000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000260001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 43836 05e7000000010000000000000377777705667567726f026e6c0000010001 05e7800000010000000200000377777705667567726f026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c030 43837 b7ef00000001000000000000037777771273686f70737570706c6965732d6c69737365026e6c0000010001 b7ef80000001000000030001037777771273686f70737570706c6965732d6c69737365026e6c0000010001c0100002000100015180000e026e7308767575727765726bc023c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c055c037000100010001518000043efa0202 43838 f3400000000100000000000005737461747308626f6f6b696e6773026e6c0000010001 f3408000000100000002000105737461747308626f6f6b696e6773026e6c0000010001c01200020001000151800009026e730374656ec01bc0120002000100015180000b026e73026e6c036e657400c02f00010001000151800004c36c4b01 43839 da7200000001000000000000026e73076575726f6e6574026e6c0000010001 da7280000001000000020001026e73076575726f6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000d026e73046575726f036e657400c00c00010001000151800004c2860043 43840 4f9a0000000100000000000003777777056b69647a7a026e6c0000010001 4f9a8000000100000003000103777777056b69647a7a026e6c0000010001c0100002000100015180000e026e7308767575727765726bc016c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c048c02a000100010001518000043efa0202 43841 fb0d00000001000000000000037777770e696374636f6e7472616374696e67026e6c0000010001 fb0d80000001000000020000037777770e696374636f6e7472616374696e67026e6c0000010001c0100002000100015180000c026e7306766576696461c01fc01000020001000151800006036e7332c036 43842 6e7b00000001000000000000037777770974686567616c6c6f70026e6c0000010001 6e7b80000001000000020000037777770974686567616c6c6f70026e6c0000010001c01000020001000151800012036e7331097072696f72686f737402626500c01000020001000151800006036e7332c032 43843 b65000000001000000000000037777770e6f766572686569647362616e656e026e6c0000010001 b65080000001000000020000037777770e6f766572686569647362616e656e026e6c0000010001c01000020001000151800013036e73310368617306686f7374697402626500c0100002000100015180000a036e7332036c7578c03b 43844 36c8000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c0000ff0001 36c8800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c0000ff0001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 43845 c15900000001000000000000076e7376696e6c310b76616e6465726c616e6465026e6c0000010001 c15980000001000000030001076e7376696e6c310b76616e6465726c616e6465026e6c0000010001c01400020001000151800002c00cc01400020001000151800012026e7302756b06707273657276036e657400c01400020001000151800008026e73026e6cc048c00c00010001000151800004c34bb162 43846 bf860000000100000000000004646e7330026975026e6c0000010001 bf868000000100000002000204646e7330026975026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7331c011c00c00010001000151800004d91a7002c03600010001000151800004d91a7103 43847 dfc30000000100000000000004646e7331026975026e6c0000010001 dfc38000000100000002000204646e7331026975026e6c0000010001c0110002000100015180000704646e7330c011c01100020001000151800002c00cc02800010001000151800004d91a7002c00c00010001000151800004d91a7103 43848 5d8300000001000000000000037777770c73626b656d70656e6c616e64026e6c0000010001 5d8380000001000000020001037777770c73626b656d70656e6c616e64026e6c0000010001c0100002000100015180000a036e733303777873c01dc01000020001000151800006036e7334c035c04700010001000151800004d5ef9a65 43849 fcf20000000100000000000006636861726973026e6c0000010001 fcf28000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43850 da4c00000001000000000000036e73320568616e7a65026e6c0000010001 da4c80000001000000030003036e73320568616e7a65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004912106efc00c00010001000151800004912106eec04a00010001000151800004c0576a65 43851 6ad700000001000000000000036e73310568616e7a65026e6c0000010001 6ad780000001000000030003036e73310568616e7a65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c016c00c00010001000151800004912106efc03800010001000151800004912106eec04a00010001000151800004c0576a65 43852 78d200000001000000000000037777770e6d616b6561676f6f647374617274026e6c0000010001 78d280000001000000020002037777770e6d616b6561676f6f647374617274026e6c0000010001c01000020001000151800010036e733109756e69736572766572c01fc01000020001000151800006036e7332c037c03300010001000151800004c3454b03c04f00010001000151800004d119a2fa 43853 1e6a0000000100000000000003777777036a686d026e6c0000010001 1e6a8000000100000002000103777777036a686d026e6c0000010001c0100002000100015180000d026e73046575726f036e657400c0100002000100015180000d026e73076575726f6e6574c014c04100010001000151800004c2860043 43854 8b58000000010000000000000564656d6f6e026e6c00000f0001 8b58800000010000000300020564656d6f6e026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000f036e73320564656d6f6e036e657400c02600010001000151800004c29f4906c03800010001000151800004c29fb004 43855 50a500000001000000000000036e7332086d65646961776562026e6c0000010001 50a580000001000000020000036e7332086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 43856 864900000001000000000000036e7333086d65646961776562026e6c0000010001 864980000001000000020000036e7333086d65646961776562026e6c0000010001c01000020001000151800013036e7331086d6564696177656204696e666f00c01000020001000151800006036e7332c031 43857 db3e00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 db3e80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 43858 f68b00100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 f68b80000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 43859 9e3800000001000000000000037777770a6d61726a6f6c65696e77026e6c0000010001 9e3880000001000000020002037777770a6d61726a6f6c65696e77026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5c9e8c8c04f00010001000151800004d5c9e8c9 43860 546800000001000000000000036e733007686f73746c6162026e6c0000010001 546880000001000000020002036e733007686f73746c6162026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7331c010c00c00010001000151800004c3eaad40c03a00010001000151800004c3eaad41 43861 9d0300000001000000000000036e733107686f73746c6162026e6c0000010001 9d0380000001000000020002036e733107686f73746c6162026e6c0000010001c01000020001000151800006036e7330c010c01000020001000151800002c00cc02c00010001000151800004c3eaad40c00c00010001000151800004c3eaad41 43862 a3e900000001000000000000037777771c64656261736b657462616c6c7369746576616e6e656465726c616e64026e6c0000010001 a3e980000001000000020002037777771c64656261736b657462616c6c7369746576616e6e656465726c616e64026e6c0000010001c0100002000100015180000f026e7309656174736572766572c02dc01000020001000151800006036e7332c044c04100010001000151800004d4cb0e42c05c00010001000151800004d4cb1221 43863 9f8000000001000000000000026e73076e656473746174026e6c0000010001 9f8080000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43864 a78f00000001000000000000036e7333076e656473746174026e6c0000010001 a78f80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 43865 8f5800000001000000000000036e73310b64696e65726f6e6c696e65026e6c0000010001 8f5880000001000000020002036e73310b64696e65726f6e6c696e65026e6c0000010001c0100002000100015180000d026e73077072657a656e74c01cc01000020001000151800006036e7332c033c030000100010001518000043ec07802c049000100010001518000043ec07803 43866 de4e00000001000000000000036e73320b64696e65726f6e6c696e65026e6c0000010001 de4e80000001000000020002036e73320b64696e65726f6e6c696e65026e6c0000010001c0100002000100015180000d026e73077072657a656e74c01cc01000020001000151800006036e7332c033c030000100010001518000043ec07802c049000100010001518000043ec07803 43867 c96a00000001000000000000036e73330b64696e65726f6e6c696e65026e6c0000010001 c96a80000001000000020002036e73330b64696e65726f6e6c696e65026e6c0000010001c0100002000100015180000d026e73077072657a656e74c01cc01000020001000151800006036e7332c033c030000100010001518000043ec07802c049000100010001518000043ec07803 43868 7bbc0000000100000000000016535449434854494e4741524f4d415448455241504945026e6c0000020001 7bbc8000000100000003000116535449434854494e4741524f4d415448455241504945026e6c0000020001c00c0002000100015180000e026e7308767575727765726bc023c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c055c037000100010001518000043efa0202 43869 59ff00000001000000000000046d61696c0a706d706172746e657273026e6c0000010001 59ff80000001000000020002046d61696c0a706d706172746e657273026e6c0000010001c01100020001000151800014036e73310d78786c776562686f7374696e67c01cc01100020001000151800006036e7332c034c030000100010001518000045104580ac050000100010001518000045104601e 43870 e015000000010000000000000761313832313037057570632d61066368656c6c6f026e6c0000010001 e015800000010000000300030761313832313037057570632d61066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 43871 9f3700000001000000000000076e6f7669727573036a6d69026e6c0000260001 9f3780000001000000020001076e6f7669727573036a6d69026e6c0000260001c01400020001000151800002c00cc0140002000100015180000b026e73026e6c036e657400c00c00010001000151800004d4ce6842 43872 dc0c00000001000000000000076f70656e6e61700567757a6564026e6c0000010001 dc0c80000001000000020002076f70656e6e61700567757a6564026e6c0000010001c0140002000100015180000e036e73310773656172636879c01ac01400020001000151800006036e7332c032c02e00010001000151800004d9aa1235c04800010001000151800004507e81e0 43873 b384000000010000000000000776656e73746572026e6c00000f0001 b384800000010000000300020776656e73746572026e6c00000f0001c00c0002000100015180000d036e733106776964657873c014c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02cc02800010001000151800004d4ccc0fcc05d000100010001518000043efa0703 43874 eb3a000000010000000000000377777708636f757273696e67026e6c0000010001 eb3a800000010000000200000377777708636f757273696e67026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c033 43875 48e200000001000000000000037777770c6765736368696564656e6973026e6c0000010001 48e280000001000000030001037777770c6765736368696564656e6973026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01dc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04fc031000100010001518000043efa0202 43876 a9f20000000100000000000012676f6564652d6865726465727363686f6f6c026e6c00000f0001 a9f28000000100000002000212676f6564652d6865726465727363686f6f6c026e6c00000f0001c00c0002000100015180000d036e7331066e6c74726565c01fc00c00020001000151800006036e7332c037c03300010001000151800004d4b20403c04c00010001000151800004d5881e45 43877 85d400000001000000000000026e7311656e7465727072697365686f7374696e67026e6c00001c0001 85d480000001000000020001026e7311656e7465727072697365686f7374696e67026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d5358e02 43878 81eb0000000100000000000004736d747011656e7465727072697365686f7374696e67026e6c00001c0001 81eb8000000100000002000104736d747011656e7465727072697365686f7374696e67026e6c00001c0001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03700010001000151800004d5358e02 43879 0dfe0000000100000000000004736d747011656e7465727072697365686f7374696e67026e6c0000010001 0dfe8000000100000002000104736d747011656e7465727072697365686f7374696e67026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03700010001000151800004d5358e02 43880 62610000000100000000000007776f6c6d61696c026e6c00001c0001 62618000000100000003000207776f6c6d61696c026e6c00001c0001c00c0002000100015180000f04616e73310774697363616c69c014c00c0002000100015180000704616e7332c02dc00c0002000100015180001404616e73330a74697363616c696e657402626500c02800010001000151800004c3f14d38c04300010001000151800004c3f13325 43881 18120000000100000000000008686f73746e616d650462696e640000100003 18128000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 43882 6e220000000100000000000003626c3402626c06787334616c6c026e6c0000010001 6e228000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 43883 214c00000001000000000000136c6f6f706261616e7065727370656374696566026e6c0000020001 214c80000001000000020002136c6f6f706261616e7065727370656374696566026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec020c00c00020001000151800006036e7332c038c03400010001000151800004c29f4906c04c00010001000151800004c29fb004 43884 8984000000010000000000000b636f6d6d69742d6172626f026e6c00000f0001 8984800000010000000200000b636f6d6d69742d6172626f026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c030 43885 89a30000000100000000000003667261026e6c00000f0001 89a38000000100000003000303667261026e6c00000f0001c00c0002000100015180000e04646e733106626c6978656dc010c00c0002000100015180000704646e7332c029c00c0002000100015180000704646e7333c029c02400010001000151800004d44fe803c03e00010001000151800004c3f5c782c05100010001000151800004d44ff303 43886 052400000001000000000000046d61696c066368656c6c6f026e6c0000010001 052480000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 43887 43270000000100000000000003777777106f72616e6a65766572656e6967696e67026e6c0000010001 43278000000100000002000003777777106f72616e6a65766572656e6967696e67026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800018036e73310e73706c69742d696e66696e697479036e657400 43888 a76f00000001000000000000046d61696c03617470026e6c0000010001 a76f80000001000000020001046d61696c03617470026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800013036e7332026e6c0669676e697465036e657400c02900010001000151800004d4298505 43889 8a4600000001000000000000026e730a7a65656c616e646e6574026e6c0000010001 8a4680000001000000020002026e730a7a65656c616e646e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 43890 039200000001000000000000037777770d6475746368746f707369746573026e6c0000010001 039280000001000000020002037777770d6475746368746f707369746573026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01ec01000020001000151800006036e7332c036c03200010001000151800004d5efa011c04d00010001000151800004d5efa075 43891 c52300000001000000000000026e730a7a65656c616e646e6574026e6c0000260001 c52380000001000000020002026e730a7a65656c616e646e6574026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d473c0c1c03c00010001000151800004d473c0c3 43892 77d700000001000000000000036e73320a7a65656c616e646e6574026e6c0000010001 77d780000001000000020002036e73320a7a65656c616e646e6574026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 43893 3ed600000001000000000000036e73320a7a65656c616e646e6574026e6c0000260001 3ed680000001000000020002036e73320a7a65656c616e646e6574026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02f00010001000151800004d473c0c1c00c00010001000151800004d473c0c3 43894 275a0000000100000000000005786d61696c076e617674656368026e6c0000010001 275a8000000100000002000005786d61696c076e617674656368026e6c0000010001c0120002000100015180000d036e7331036b706e036e657400c01200020001000151800006036e7332c032 43895 531500100001000000000000087773696e746930370377696e03747565026e6c00000f0001 531580000001000000030003087773696e746930370377696e03747565026e6c00000f0001c0190002000100015180000a0774756567617465c019c01900020001000151800006036e7332c019c0190002000100015180000e036e733107737572666e6574c01dc03100010001000151800004839b0203c04700010001000151800004839b0303c05900010001000151800004c0576a65 43896 572800000001000000000000037777770e6772617469732d7469656e657273026e6c0000010001 572880000001000000020002037777770e6772617469732d7469656e657273026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac01fc01000020001000151800006036e7332c037c03300010001000151800004d5efa011c04e00010001000151800004d5efa075 43897 8efc0000000100000000000003777777136c756e6172657374776174657262656464656e026e6c0000010001 8efc8000000100000002000003777777136c756e6172657374776174657262656464656e026e6c0000010001c01000020001000151800017056e6f7274680b646f6d65696e736c756973036f726700c0100002000100015180000805736f757468c03e 43898 5c08000000010000000000000b776f726c64616363657373026e6c00000f0001 5c08800000010000000200010b776f726c64616363657373026e6c00000f0001c00c0002000100015180000a036e733303777873c018c00c00020001000151800006036e7334c030c04200010001000151800004d5ef9a65 43899 84480000000100000000000004696c7365026e6c00000f0001 84488000000100000003000304696c7365026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc025000100010001518000043e45a282c037000100010001518000043e45a283c049000100010001518000043e45a284 43900 524c0000000100000000000008647664776f726c64026e6c00000f0001 524c8000000100000003000008647664776f726c64026e6c00000f0001c00c00020001000151800017076e73686f73743103737432056c79636575036e657400c00c0002000100015180000a076e73686f737432c031c00c0002000100015180000a076e73686f737433c031 43901 db54000000010000000000000377777709626f72646a65706170026e6c0000010001 db54800000010000000300000377777709626f72646a65706170026e6c0000010001c01000020001000151800015036e73310b70726f6c6f636174696f6e036e657400c01000020001000151800006036e7332c032c01000020001000151800006036e7333c032 43902 a57500000001000000000000086c6f6f796d616e73026e6c0000020001 a57580000001000000020002086c6f6f796d616e73026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c29f4906c04100010001000151800004c29fb004 43903 18380000000100000000000003777777156272616e64776565726b656e6e656d65726c616e64026e6c0000010001 18388000000100000002000203777777156272616e64776565726b656e6e656d65726c616e64026e6c0000010001c0100002000100015180000f0472617131076e657474756e65c026c01000020001000151800006036e7332c03fc03a00010001000151800004d4ccf78dc05500010001000151800004d4ccf78e 43904 5d64000000010000000000000a6d6f6c2d6575726f7065026e6c0000ff0001 5d64800000010000000200000a6d6f6c2d6575726f7065026e6c0000ff0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c02e 43905 ec5a0000000100000000000004616a6178066e696b686566026e6c0000010001 ec5a8000000100000004000204616a6178066e696b686566026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046c656461c011c0110002000100015180000f0564786d6f6e046365726e02636800c0110002000100015180000d026e730472697065036e657400c00c00010001000151800004c010c701c03a00010001000151800004c010c704 43906 820f00000001000000000000057769737061026e6c00000f0001 820f80000001000000020000057769737061026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c 43907 336d00000001000000000000024e53087261626f62616e6b026e6c00001c0001 336d80000001000000020001024e53087261626f62616e6b026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 43908 4060000000010000000000000572656c6179087261626f62616e6b026e6c0000010001 4060800000010000000200010572656c6179087261626f62616e6b026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02f0001000100015180000491484fde 43909 3687000000010000000000000b61746c6173616476696573026e6c00000f0001 3687800000010000000200020b61746c6173616476696573026e6c00000f0001c00c0002000100015180000e036e733107647265636f6d6dc018c00c00020001000151800006036e7332c030c02c00010001000151800004d5c42546c04600010001000151800004d5c42547 43910 e20200000001000000000000036e733207747564656c6674026e6c00001c0001 e20280000001000000050005036e733207747564656c6674026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c00c0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 43911 b93f00000001000000000000036e733207747564656c6674026e6c0000260001 b93f80000001000000050005036e733207747564656c6674026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c02c0001000100015180000482a1b401c00c0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 43912 8ece00000001000000000000036e733107747564656c6674026e6c00001c0001 8ece80000001000000050005036e733107747564656c6674026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c00c0001000100015180000482a1b401c03a0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 43913 4d8b00000001000000000000036e733107747564656c6674026e6c0000260001 4d8b80000001000000050005036e733107747564656c6674026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800009036e7331026574c010c0100002000100015180000d07647574746e636202746ec010c0100002000100015180000e036e733107737572666e6574c018c00c0001000100015180000482a1b401c03a0001000100015180000482a1b441c04c0001000100015180000482a12111c0610001000100015180000482a1bc8cc07a00010001000151800004c0576a65 43914 ffc400000001000000000000096d61696c686f73743207747564656c6674026e6c0000010001 ffc480000001000000050005096d61696c686f73743207747564656c6674026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c01600020001000151800009036e7331026574c016c0160002000100015180000d07647574746e636202746ec016c0160002000100015180000e036e733107737572666e6574c01ec0320001000100015180000482a1b401c0440001000100015180000482a1b441c0560001000100015180000482a12111c06b0001000100015180000482a1bc8cc08400010001000151800004c0576a65 43915 a6e500000001000000000000056c6f70656e026e6c0000020001 a6e580000001000000020002056c6f70656e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 43916 30c000000001000000000000037777770b6d61726b74706c61617473026e6c0000010001 30c080000001000000020000037777770b6d61726b74706c61617473026e6c0000010001c0100002000100015180000f036e733105796b6f6f6e036e657400c01000020001000151800006036e7332c034 43917 6d9b00000001000000000000067a737673756b026e6c0000010001 6d9b84030001000000010000067a737673756b026e6c0000010001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 43918 7d6a00000001000000000000026e730763697374726f6e026e6c0000010001 7d6a80000001000000020002026e730763697374726f6e026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043ed81f37c039000100010001518000043ed81f38 43919 169a000000010000000000000b747269746f6e67726f6570026e6c00000f0001 169a800000010000000300030b747269746f6e67726f6570026e6c00000f0001c00c00020001000151800015036e73310e6469726563747365727669636573c018c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030c02c00010001000151800004d994aa05c04d00010001000151800004d994aa06c05f00010001000151800004d994aa07 43920 3f0e00000001000000000000037777770f686f6d6f736578706c6161746a6573026e6c0000010001 3f0e80000001000000020002037777770f686f6d6f736578706c6161746a6573026e6c0000010001c0100002000100015180000c04646e73310470696e73c020c0100002000100015180000704646e7332c039c03400010001000151800004d9c26101c04c00010001000151800004d9c26002 43921 18300000000100000000000007766462636f6d70026e6c00001c0001 18308000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 43922 104d0000000100000000000007766462636f6d70026e6c00001c0001 104d8000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 43923 10590000000100000000000007766462636f6d70026e6c00001c0001 10598000000100000003000107766462636f6d70026e6c00001c0001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 43924 eeab00000001000000000000106c7578776f6f6462656e656c75786276026e6c00000f0001 eeab84030001000000010000106c7578776f6f6462656e656c75786276026e6c00000f0001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 43925 2c7e000000010000000000000a656c656374726f6c7578026e6c0000ff0001 2c7e800000010000000200000a656c656374726f6c7578026e6c0000ff0001c00c00020001000151800012026e730a656c656374726f6c757802736500c00c00020001000151800014036e73320d646f6d61696e6e6574776f726bc039 43926 cda0000000010000000000000c616265747465727072696365026e6c00000f0001 cda0800000010000000300020c616265747465727072696365026e6c00000f0001c00c0002000100015180000d036e733106776964657873c019c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 43927 25b000000001000000000000037777770974656c656772616166026e6c0000010001 25b080000001000000020000037777770974656c656772616166026e6c0000010001c01000020001000151800013036e73300974656c656772616166036e657400c01000020001000151800006036e7331c032 43928 42b60000000100000000000006636861726973026e6c0000010001 42b68000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 43929 d9ce00000001000000000000066472616b6573026e6c00001c0001 d9ce80000001000000020002066472616b6573026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 43930 83be0000000100000000000004617369610374656e026e6c0000010001 83be8000000100000002000104617369610374656e026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c36c4b01 43931 60e10000000100000000000004617369610374656e026e6c0000260001 60e18000000100000002000104617369610374656e026e6c0000260001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02900010001000151800004c36c4b01 43932 f06400000001000000000000037777771c706c617474656c616e646c6161747a6963686e6965746b697374656e026e6c00001c0001 f06480000001000000020000037777771c706c617474656c616e646c6161747a6963686e6965746b697374656e026e6c00001c0001c01000020001000151800011026e7308786c736572766572036e657400c01000020001000151800006036e7332c044 43933 5e3f00000001000000000000037777770c7269702d636f6c6f666f6f6e026e6c0000010001 5e3f84030001000000010000037777770c7269702d636f6c6f666f6f6e026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 43934 efcd0000000100000000000003777777177363686f6e6b636f6d7075746572736f6c7574696f6e73026e6c0000010001 efcd8000000100000002000203777777177363686f6e6b636f6d7075746572736f6c7574696f6e73026e6c0000010001c0100002000100015180000f026e7309656174736572766572c028c01000020001000151800006036e7332c03fc03c00010001000151800004d4cb0e42c05700010001000151800004d4cb1221 43935 8eef0000000100000000000003777777177363686f6e6b636f6d7075746572736f6c7574696f6e73026e6c0000010001 8eef8000000100000002000203777777177363686f6e6b636f6d7075746572736f6c7574696f6e73026e6c0000010001c0100002000100015180000f026e7309656174736572766572c028c01000020001000151800006036e7332c03fc03c00010001000151800004d4cb0e42c05700010001000151800004d4cb1221 43936 23cf00000001000000000000036e73330767617574656e67026e6c0000010001 23cf80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43937 23d000000001000000000000036e73340767617574656e67026e6c0000010001 23d080000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43938 a7e70000000100000000000013706572736f6f6e6c696a6b652d6c656e696e67107261626f62616e6b2d6575726f706173026e6c0000010001 a7e78000000100000002000213706572736f6f6e6c696a6b652d6c656e696e67107261626f62616e6b2d6575726f706173026e6c0000010001c0200002000100015180000a036e733103696166c031c02000020001000151800006036e7332c049c045000100010001518000045059e040c05b000100010001518000045059ee03 43939 24bd000000010000000000000974656c656d65646961026e6c00001c0001 24bd800000010000000200020974656c656d65646961026e6c00001c0001c00c0002000100015180000e036e73310765766964656e74c016c00c00020001000151800006036e7332c02ec02a00010001000151800004c36d19c4c04400010001000151800004c36d1942 43940 c14f00000001000000000000036e73330767617574656e67026e6c0000010001 c14f80000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43941 772300000001000000000000036e73340767617574656e67026e6c0000010001 772380000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 43942 220d00000001000000000000036e73310974656c656b6162656c026e6c0000010001 220d80000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 43943 220d00000001000000000000037777770c6765696c65706f65736a6573026e6c0000010001 220d80000001000000020000037777770c6765696c65706f65736a6573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c034 43944 1dfd0000000100000000000005776b746873026e6c00000f0001 1dfd8000000100000002000205776b746873026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 43945 a33c00000001000000000000066c6f72616765026e6c0000020001 a33c80000001000000020002066c6f72616765026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 43946 7837000000010000000000000377777712617262656964736465736b756e646967656e026e6c0000010001 7837800000010000000200020377777712617262656964736465736b756e646967656e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c023c01000020001000151800006036e7332c03ac03700010001000151800004d4cb0e42c05200010001000151800004d4cb1221 43947 17f9000000010000000000000764697669647573026e6c0000010001 17f9800000010000000200000764697669647573026e6c0000010001c00c0002000100015180000f036e73310561676e2d65036e657400c00c00020001000151800006036e7332c02c 43948 b87f97c550114462e6040000000000000000 43949 4ced00000001000000000000056e65627572026e6c0000010001 4ced80000001000000030003056e65627572026e6c0000010001c00c00020001000151800014026e730e61726765776562686f7374696e67c012c00c00020001000151800006036e7330c029c00c00020001000151800006036e7333c029c02600010001000151800004c3561682c04600010001000151800004c3561683c05800010001000151800004d5de0bfa 43950 0000000070024000e5880000020405b401010402 000080010000000000000000 43951 b87f97c650104462e6030000000000000000 43952 8f8a00000001000000000000037777770b76726f75776f6e6c696e65026e6c0000010001 8f8a80000001000000030000037777770b76726f75776f6e6c696e65026e6c0000010001c01000020001000151800010036e733106666173747873036e657400c01000020001000151800006036e7332c034c01000020001000151800006036e7333c034 43953 b8866f32501005b424d00000000000000000 b886ef340000000000000000 43954 b8f700000001000000000000067370656c6c65026e6c00000f0001 b8f780000001000000020000067370656c6c65026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02a 43955 b8866f3250184470a3e30000008c04c0000000010001000000000f313036353135313838393432362d320000f900010f313036353135313838393432362d320000f900ff00000000005003677373096d6963726f736f667403636f6d00403af2fa403c447a00030000002d4e544c4d535350000100000097b200e0080008002500000005000500200000004c55584f52494e5445524e45540000 b886ef340000000000000000 43956 85470000000100000000000006736d7470303903777873026e6c00000f0001 85478000000100000003000306736d7470303903777873026e6c00000f0001c01300020001000151800007046e733038c013c01300020001000151800007046e733039c013c01300020001000151800006036e7334c013c02b00010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 43957 90dd000000010000000000000377777708666f636f6c617265026e6c0000010001 90dd800000010000000200010377777708666f636f6c617265026e6c0000010001c0100002000100015180000d026e7307696e746f756368c019c01000020001000151800010026e7307696e746f756368036e657400c02d00010001000151800004d413c001 43958 1a9d00000001000000000000026e73076e656473746174026e6c0000010001 1a9d80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 43959 dd0400000001000000000000037777770b7365612d6578616d656e73026e6c0000010001 dd0480000001000000020002037777770b7365612d6578616d656e73026e6c0000010001c0100002000100015180000d026e730763697374726f6ec01cc01000020001000151800006036e7332c033c030000100010001518000043ed81f37c049000100010001518000043ed81f38 43960 b8866f4050114462e5840000000000000000 b886ef440000000000000000 43961 609d000000010000000000000b626f7577696e666f737973026e6c00000f0001 609d800000010000000200000b626f7577696e666f737973026e6c00000f0001c00c00020001000151800012026e73096e6c686f7374696e67036e657400c00c00020001000151800006036e7331c02f 43962 b8866f4150104462e5830000000000000000 b886ef440000000000000000 43963 dbf600000001000000000000036e733503777873026e6c0000010001 dbf680000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 43964 330200100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 330280000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 43965 fc1e000000010000000000000762616e6e65727303647161026e6c0000010001 fc1e800000010000000200000762616e6e65727303647161026e6c0000010001c0140002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0140002000100015180000805726f6b696ec033 43966 998100100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 998180000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 43967 50ca00000001000000000000066272756e656c026e6c0000010001 50ca80000001000000020000066272756e656c026e6c0000010001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c02a 43968 768500100001000000000001036e7333076e656473746174026e6c00000100010000290800000080000000 768580000001000000020003036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d0000291000000000000000 43969 e195000000010000000000000363766c026e6c00000f0001 e195800000010000000200020363766c026e6c00000f0001c00c00020001000151800009036e7331026973c010c00c00020001000151800006036e7332c028c02400010001000151800004d5852102c03900010001000151800004d5c41503 43970 490f00100001000000000001026e73076e656473746174026e6c00000100010000290800000080000000 490f80000001000000020003026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d0000291000000000000000 43971 55d000000001000000000000036e7332076e65746c616e64026e6c00001c0001 55d080000001000000020002036e7332076e65746c616e64026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 43972 8aa900000001000000000000036e7332076e65746c616e64026e6c0000260001 8aa980000001000000020002036e7332076e65746c616e64026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 43973 6f3a00000001000000000000026e73076e65746c616e64026e6c00001c0001 6f3a80000001000000020002026e73076e65746c616e64026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 43974 b08d00000001000000000000026e73076e65746c616e64026e6c0000260001 b08d80000001000000020002026e73076e65746c616e64026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 43975 667100000001000000000000036e7332076e65746c616e64026e6c0000010001 667180000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 43976 752a00000001000000000000036e7332076e65746c616e64026e6c00001c0001 752a80000001000000020002036e7332076e65746c616e64026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 43977 363200000001000000000000036e7332076e65746c616e64026e6c0000260001 363280000001000000020002036e7332076e65746c616e64026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 43978 65cd00000001000000000000026e73076e65746c616e64026e6c0000010001 65cd80000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 43979 631600000001000000000000026e73076e65746c616e64026e6c00001c0001 631680000001000000020002026e73076e65746c616e64026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 43980 280328000001000000010000026e6c0000060001055f6c646170045f74637003706463065f6d7364637306726f63767565026e6c000021000100000258001c0000006401850a726f637365727665723206726f63767565026e6c00 2803a8040000000000000000 43981 2bb100000001000000000000026e73076e65746c616e64026e6c0000260001 2bb180000001000000020002026e73076e65746c616e64026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 43982 06af00000001000000000000076e65746d61696c0a726f636176656e747573026e6c0000010001 06af80000001000000020002076e65746d61696c0a726f636176656e747573026e6c0000010001c0140002000100015180000d036e7331066e6c74726565c01fc01400020001000151800006036e7332c037c03300010001000151800004d4b20403c04c00010001000151800004d5881e45 43983 2c4e0000000100000000000003777777117061726b6572656e616d7374657264616d026e6c0000010001 2c4e8000000100000002000203777777117061726b6572656e616d7374657264616d026e6c0000010001c0100002000100015180000d026e73076b6e6f77617265c022c01000020001000151800006036e7332c039c03600010001000151800004c3402003c04f00010001000151800004c340202b 43984 9f91000000010000000000000a7377697463686a6f6273026e6c0000010001 9f91800000010000000200020a7377697463686a6f6273026e6c0000010001c00c00020001000151800009036e7331026973c017c00c00020001000151800006036e7332c02fc02b00010001000151800004d5852102c04000010001000151800004d5c41503 43985 025a00000001000000000000116c6f72616e676572696574696c62757267026e6c0000020001 025a80000001000000020002116c6f72616e676572696574696c62757267026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec01ec00c00020001000151800006036e7332c036c03200010001000151800004c29f4906c04a00010001000151800004c29fb004 43986 645a00000001000000000000036d783004696c7365026e6c0000010001 645a80000001000000030003036d783004696c7365026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c029000100010001518000043e45a282c03b000100010001518000043e45a283c04d000100010001518000043e45a284 43987 000000007002ff00758500000204055001010402 000080010000000000000000 43988 8786000000010000000000000477697368036e6574026e6c00000f0001 8786840300010000000100000477697368036e6574026e6c00000f0001c01500060001000038400036026e730f646f6d61696e2d7265676973747279c0150a686f73746d6173746572c02c0bf1e540000070800000384000278d0000003840 43989 ff450000000100000000000003777777036e7469026e6c0000010001 ff458000000100000002000003777777036e7469026e6c0000010001c01000020001000151800016036e73610c73697465657874656e64657203636f6d00c01000020001000151800006036e7362c02c 43990 cb7c00000001000000000000036e733109666972737466696e64026e6c0000010001 cb7c80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43991 5b0b00000001000000000000037777770661742d647767026e6c0000010001 5b0b80000001000000020000037777770661742d647767026e6c0000010001c01000020001000151800011036e733107636174616c6f6703636f6d00c01000020001000151800006036e7333c02f 43992 b8873df25010ff00ab5b0000000000000000 b887bdf40000000000000000 43993 e92600000001000000000000037777770b7765626164766973653475026e6c0000010001 e92680000001000000020002037777770b7765626164766973653475026e6c0000010001c01000020001000151800010036e733109686f73746e65746276c01cc01000020001000151800006036e7332c034c0300001000100015180000451113264c04c00010001000151800004d5c42851 43994 b8873df25018ff001b780000008f5b0e000000010001000000000f313034373937323032303234322d330000f900010f313034373937323032303234322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afe3d403c4fbd0003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000 b887bdf40000000000000000 43995 b8873e005011fef2aac90000000000000000 b887be040000000000000000 43996 c37b00000001000000000000036e733209666972737466696e64026e6c0000010001 c37b80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 43997 000000007002ff001e8b00000204055001010402 000080010000000000000000 43998 a400000000010000000000000c64656c667a696a6c2d677469026e6c00000f0001 a400840300010000000100000c64656c667a696a6c2d677469026e6c00000f0001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 43999 03be000000010000000000000867656172736f6674026e6c00001c0001 03be800000010000000200000867656172736f6674026e6c00001c0001c00c00020001000151800014026e730b686f6c6c616e64686f7374036e657400c00c00020001000151800006036e7332c02c 44000 b8873e015010fef2aac80000000000000000 b887be040000000000000000 44001 f2ba000000010000000000000377777705666964696e026e6c0000010001 f2ba800000010000000200020377777705666964696e026e6c0000010001c0100002000100015180000b026e7305706c616e74c016c01000020001000151800006036e7332c02dc02a00010001000151800004d59f0037c04100010001000151800004d59f0046 44002 b887f30b5010ff009f470000000000000000 44003 b0bb000000010000000000000a776f726c646f6e6c696e026e6c0000ff0001 b0bb840300010000000100000a776f726c646f6e6c696e026e6c0000ff0001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 44004 8c6700000001000000000000036e733109666972737466696e64026e6c0000010001 8c6780000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44005 23d200000001000000000000036e73330767617574656e67026e6c0000010001 23d280000001000000020000036e73330767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 44006 23d300000001000000000000036e73340767617574656e67026e6c0000010001 23d380000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 44007 75fd00000001000000000000047573686e026e6c00000f0001 75fd80000001000000020000047573686e026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c029 44008 2457000000010000000000000377777709686973746f63617361026e6c0000010001 2457800000010000000300020377777709686973746f63617361026e6c0000010001c0100002000100015180000d036e733106776964657873c01ac01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c032c02e00010001000151800004d4ccc0fcc063000100010001518000043efa0703 44009 619600000001000000000000056c6f72656c026e6c0000020001 619680000001000000020002056c6f72656c026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec012c00c00020001000151800006036e7332c02ac02600010001000151800004c29f4906c03e00010001000151800004c29fb004 44010 7fba00000001000000000000026e73076e656473746174026e6c0000010001 7fba80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 44011 07bc00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 07bc80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44012 065800000001000000000000037777770c76616e6465726c696e64656e026e6c0000010001 065880000001000000020000037777770c76616e6465726c696e64656e026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c035 44013 2c4000000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 2c4080000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44014 0e060000000100000000000006626570706965086d6963726f776562026e6c0000010001 0e068000000100000002000206626570706965086d6963726f776562026e6c0000010001c0130002000100015180000a036e7331036e7873c01cc01300020001000151800006036e7332c034c03000010001000151800004d973c015c04600010001000151800004d973c102 44015 b87f05905010446254fe0000000000000000 b87f80010000000000000000 44016 00f500000001000000000000036e7331036e7873026e6c0000010001 00f580000001000000020002036e7331036e7873026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d973c015c03600010001000151800004d973c102 44017 bfdd00000001000000000000036e7333076e656473746174026e6c0000010001 bfdd80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 44018 000b28000001000200000000026e6c0000060001066d657869636f037777770b77656e6e656b65736e6574026e6c00000500fe000000000000c01400010001000000000004c0a80003 000ba8040000000000000000 44019 0bbd0000000100000000000008657965746f657965026e6c00000f0001 0bbd8000000100000002000208657965746f657965026e6c00000f0001c00c0002000100015180000d036e73310663617374656cc015c00c00020001000151800006036e7332c02dc02900010001000151800004c3558244c04200010001000151800004c3558245 44020 51ec000000010000000000000377777708776f6f6e73646167026e6c0000010001 51ec800000010000000200000377777708776f6f6e73646167026e6c0000010001c01000020001000151800011036e73310764726965626974036e657400c01000020001000151800006036e7332c031 44021 d967000000010000000000000377777708706f737462616e6b026e6c0000010001 d967800000010000000200020377777708706f737462616e6b026e6c0000010001c0100002000100015180000a036e733103696e67c019c01000020001000151800006036e7332c031c02d0001000100015180000491dd19c2c0430001000100015180000491dd5dc2 44022 266200000001000000000000066d636d777777086c6f7374626f7973026e6c0000010001 266280000001000000020002066d636d777777086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c0130002000100015180000906706f6c6c7578c013c030000100010001518000043e32050ac04500010001000151800004c297d912 44023 00000000700240003e080000020405b401010402 000080010000000000000000 44024 11480000000100000000000003777777056c6f74746f026e6c0000010001 11488000000100000002000203777777056c6f74746f026e6c0000010001c0100002000100015180000b036e733104696e666fc016c01000020001000151800006036e7332c02ec02a00010001000151800004504fc020c04100010001000151800004504fc021 44025 f48400000001000000000000036e733209666972737466696e64026e6c0000010001 f48480000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44026 c4520000000100000000000003777777096465616a6163696564026e6c0000010001 c4528000000100000002000203777777096465616a6163696564026e6c0000010001c01000020001000151800010036e7331096e657467726f756e64c01ac01000020001000151800006036e7332c032c02e000100010001518000045054e415c04a0001000100015180000451046014 44027 0a140000000100000000000003777777086c65747373746174026e6c0000010001 0a148000000100000002000203777777086c65747373746174026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02d00010001000151800004d973cc69c03f00010001000151800004d973cc6a 44028 c2680000000100000000000003777777057370656373026e6c0000010001 c2688000000100000002000003777777057370656373026e6c0000010001c01000020001000151800010036e73310673697465347503636f6d00c01000020001000151800006036e7332c02e 44029 22930000000100000000000003726463026e6c00000f0001 22938000000100000002000203726463026e6c00000f0001c00c000200010001518000100d7372726463303134646d7a3034c00cc00c000200010001518000100d7372726463303132646d7a3033c00cc02400010001000151800004d973e064c04000010001000151800004d973e054 44030 bbb900000001000000000000037777770a707261676d612d616465026e6c0000010001 bbb980000001000000020002037777770a707261676d612d616465026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01bc01000020001000151800006036e7332c032c02f00010001000151800004c26d0642c04700010001000151800004c26d0963 44031 73260000000100000000000005646e732d31056c61646f74026e6c0000010001 73268000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44032 330800000001000000000000026e7308767575727765726b026e6c0000010001 330880000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 44033 2c910000000100000000000003777777057661646562026e6c0000010001 2c918000000100000002000003777777057661646562026e6c0000010001c010000200010001518000170767726965746a65096171756173656e736503636f6d00c01000020001000151800012046e73303107696e746f756368036e657400 44034 07d700000001000000000000034e53330f444f4d41494e2d5245474953545259024e4c0000010001 07d780000001000000030002034e53330f444f4d41494e2d5245474953545259024e4c0000010001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 44035 3d2800000001000000000000046e65777306697474707562026e6c0000010001 3d2880000001000000020001046e65777306697474707562026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02c00010001000151800004c14fcc01 44036 73270000000100000000000005646e732d32056c61646f74026e6c0000010001 73278000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44037 43e500000001000000000000036d78320765766964656e74026e6c0000010001 43e580000001000000020002036d78320765766964656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c36d19c4c03e00010001000151800004c36d1942 44038 1f0b00000001000000000000036d78310765766964656e74026e6c0000010001 1f0b80000001000000020002036d78310765766964656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c36d19c4c03e00010001000151800004c36d1942 44039 f8b100000001000000000000036d78310765766964656e74026e6c0000010001 f8b180000001000000020002036d78310765766964656e74026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02c00010001000151800004c36d19c4c03e00010001000151800004c36d1942 44040 b8888b9e5010447022250000000000000000 44041 b2500000000100000000000002343703323031033136350236370a626c61636b686f6c657307656173796e6574026e6c0000010001 b2508000000100000002000202343703323031033136350236370a626c61636b686f6c657307656173796e6574026e6c0000010001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 44042 b8888b9e50184470c7750000008e386c000000010001000000000e3936323037323637343332322d330000f900010e3936323037323637343332322d330000f900ff00000000005403677373096d6963726f736f667403636f6d0032f53d9532f68f150003000000314e544c4d535350000100000097b200c00b000b002600000006000600200000004d455849434f57454e4e454b45534e45540000 44043 2fed000000010000000000000377777704766f6365026e6c0000010001 2fed800000010000000200010377777704766f6365026e6c0000010001c0100002000100015180000d026e7307696e746f756368c015c01000020001000151800010026e7307696e746f756368036e657400c02900010001000151800004d413c001 44044 aa7200000001000000000000036e733109666972737466696e64026e6c0000010001 aa7280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44045 2fae00000001000000000000036e7333076e656473746174026e6c0000010001 2fae80000001000000020002036e7333076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d4482615c00c00010001000151800004d5c4021d 44046 8baf00000001000000000000026e73076e656473746174026e6c0000010001 8baf80000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 44047 e2e900000001000000000000036e733209666972737466696e64026e6c0000010001 e2e980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44048 61100000000100000000000003777777166465626f6572646572696a2d6265656b62657267656e026e6c0000010001 61108403000100000001000003777777166465626f6572646572696a2d6265656b62657267656e026e6c0000010001c02700060001000038400036026e730f646f6d61696e2d7265676973747279c0270a686f73746d6173746572c03e0bf1e540000070800000384000278d0000003840 44049 b8888bac5011446221940000000000000000 44050 6e5100000001000000000000024e530f444f4d41494e2d5245474953545259026e6c0000010001 6e5180000001000000030002024e530f444f4d41494e2d5245474953545259026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 44051 0000000070024000a7870000020405b401010402 000080010000000000000000 44052 7b2500000001000000000000036e733109756e69736572766572026e6c0000010001 7b2580000001000000020002036e733109756e69736572766572026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c3454b03c03c00010001000151800004d119a2fa 44053 e5b200000001000000000000036e733209756e69736572766572026e6c0000010001 e5b280000001000000020002036e733209756e69736572766572026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004c3454b03c00c00010001000151800004d119a2fa 44054 3bb50000000100000000000006736572766572036f7664026e6c0000010001 3bb58000000100000002000206736572766572036f7664026e6c0000010001c0130002000100015180000c036e73310564656d6f6ec017c01300020001000151800006036e7332c02fc02b00010001000151800004c29f4906c04300010001000151800004c29fb004 44055 b8888bad5010446221930000000000000000 44056 bb0800000001000000000000037777770461616169026e6c0000010001 bb0880000001000000030002037777770461616169026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 44057 bc0200000001000000000000037777770d6d61757269636562616b6b6572026e6c0000010001 bc0280000001000000020000037777770d6d61757269636562616b6b6572026e6c0000010001c01000020001000151800013046e733135087a6f6e656564697403636f6d00c01000020001000151800007046e733136c037 44058 811e0000000100000000000005646e732d32056c61646f74026e6c0000010001 811e8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44059 811d0000000100000000000005646e732d31056c61646f74026e6c0000010001 811d8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44060 e88f00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 e88f80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44061 178700000001000000000000037777770b6a62616b6c61617373656e026e6c0000010001 178780000001000000020002037777770b6a62616b6c61617373656e026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c01cc01000020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 44062 aeb700000001000000000000046d61696c036d6567026e6c00001c0001 aeb780000001000000020000046d61696c036d6567026e6c00001c0001c0110002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0110002000100015180000805726f6b696ec030 44063 5ff000000001000000000000046d61696c036d6567026e6c0000260001 5ff080000001000000020000046d61696c036d6567026e6c0000260001c0110002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c0110002000100015180000805726f6b696ec030 44064 f04d00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 f04d80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44065 68860000000100000000000004646e7331057467776562026e6c0000010001 68868000000100000002000204646e7331057467776562026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac1cc03900010001000151800004d994ac1d 44066 34430000000100000000000004646e7332057467776562026e6c0000010001 34438000000100000002000204646e7332057467776562026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d994ac1cc00c00010001000151800004d994ac1d 44067 5c3600000001000000000000036e73310f6578636c757369766564657369676e026e6c00001c0001 5c3680000001000000020002036e73310f6578636c757369766564657369676e026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d97261bec04200010001000151800004d97261bd 44068 f74800000001000000000000036e73320f6578636c757369766564657369676e026e6c0000260001 f74880000001000000020002036e73320f6578636c757369766564657369676e026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03400010001000151800004d97261bec00c00010001000151800004d97261bd 44069 5ce100000001000000000000036e73320f6578636c757369766564657369676e026e6c00001c0001 5ce180000001000000020002036e73320f6578636c757369766564657369676e026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03400010001000151800004d97261bec00c00010001000151800004d97261bd 44070 7cec00000001000000000000036e73310f6578636c757369766564657369676e026e6c0000260001 7cec80000001000000020002036e73310f6578636c757369766564657369676e026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d97261bec04200010001000151800004d97261bd 44071 c2c300000001000000000000037777771561647669657363656e7472756d6b6c61617373656e026e6c0000010001 c2c380000001000000020002037777771561647669657363656e7472756d6b6c61617373656e026e6c0000010001c0100002000100015180000d036e733106786c6164736cc026c01000020001000151800006036e7332c03ec03a00010001000151800004d5a0da0ac0530001000100015180000451112ec3 44072 8ed000000001000000000000036e733109666972737466696e64026e6c0000010001 8ed080000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44073 b71300000001000000000000036e733209666972737466696e64026e6c0000010001 b71380000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44074 cc4f00000001000000000000146f736e6162727565636b65722d7a656974756e67027330026e6c0000010001 cc4f80000001000000020002146f736e6162727565636b65722d7a656974756e67027330026e6c0000010001c0210002000100015180000d026e73076e656473746174c024c02100020001000151800006036e7333c03bc03800010001000151800004d4482615c05100010001000151800004d5c4021d 44075 7fa600000001000000000000146f736e6162727565636b65722d7a656974756e67027330026e6c0000010001 7fa680000001000000020002146f736e6162727565636b65722d7a656974756e67027330026e6c0000010001c0210002000100015180000d026e73076e656473746174c024c02100020001000151800006036e7333c03bc03800010001000151800004d4482615c05100010001000151800004d5c4021d 44076 1e7b00000001000000000000036e7335046372696f026e6c0000010001 1e7b80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44077 5d8600000001000000000000036e7336046372696f026e6c0000010001 5d8680000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44078 83180000000100000000000003777777096f756467617374656c026e6c0000010001 83188000000100000003000303777777096f756467617374656c026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc01ac0100002000100015180000704646e7332c033c0100002000100015180000704646e7333c033c02e00010001000151800004d44fe803c04800010001000151800004c3f5c782c05b00010001000151800004d44ff303 44079 0ca70000000100000000000003777777087475746368666f72026e6c0000010001 0ca78000000100000002000203777777087475746368666f72026e6c0000010001c01000020001000151800009036e7331026973c019c01000020001000151800006036e7332c031c02d00010001000151800004d5852102c04200010001000151800004d5c41503 44080 901a00000001000000000000036e7331046372696f026e6c0000010001 901a80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44081 69410000000100000000000003777777056c6572656e026e6c0000010001 69418000000100000002000203777777056c6572656e026e6c0000010001c0100002000100015180000a036e7331036e7873c016c01000020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 44082 22c000000001000000000000036e7332046372696f026e6c0000010001 22c080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44083 cc3400000001000000000000056461636f73026e6c0000ff0001 cc3480000001000000030001056461636f73026e6c0000ff0001c00c0002000100015180000e026e7308767575727765726bc012c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c044c026000100010001518000043efa0202 44084 7fd200000001000000000000037777770f686f6d6f736578706c6161746a6573026e6c0000010001 7fd280000001000000020002037777770f686f6d6f736578706c6161746a6573026e6c0000010001c0100002000100015180000c04646e73310470696e73c020c0100002000100015180000704646e7332c039c03400010001000151800004d9c26101c04c00010001000151800004d9c26002 44085 aa8a00000001000000000000026e73066863636e6574026e6c0000010001 aa8a80000001000000020000026e73066863636e6574026e6c0000010001c00f000200010001518000180661757468313003646e7307696e7465726e6c036e657400c00f0002000100015180000906617574683230c031 44086 066a0000000100000000000003627676026e6c00000f0001 066a8000000100000002000203627676026e6c00000f0001c00c0002000100015180000e036e7331076167726f776562c010c00c00020001000151800006036e7332c028c024000100010001518000043e5de217c03e000100010001518000043e5de222 44087 97450000000100000000000003626c3102626c06787334616c6c026e6c0000010001 97458000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44088 b88953b450104470c38d0000000000000000 b889d3b40000000000000000 44089 b88953b450184470223e0000008e810c000000010001000000000e3936323037323637343332322d320000f900010e3936323037323637343332322d320000f900ff00000000005403677373096d6963726f736f667403636f6d0032f53d9532f68f150003000000314e544c4d535350000100000097b200c00b000b002600000006000600200000004d455849434f57454e4e454b45534e45540000 b889d3b40000000000000000 44090 ee0f000000010000000000001076616e6d6175726963656465686f6e64026e6c0000010001 ee0f840300010000000100001076616e6d6175726963656465686f6e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 44091 d53d00000001000000000000066765617064330364736c0b7669616e6574776f726b73026e6c0000010001 d53d80000001000000020002066765617064330364736c0b7669616e6574776f726b73026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c03700010001000151800004d43d0f08c04900010001000151800004d43d19e2 44092 c97200000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 c97280000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44093 627b00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 627b80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44094 b88953c250114462c2fc0000000000000000 b889d3c40000000000000000 44095 5dae000000010000000000000377777708636f72656e646f6e026e6c0000010001 5dae800000010000000200000377777708636f72656e646f6e026e6c0000010001c01000020001000151800011036e7333076361706361766503636f6d00c01000020001000151800006036e7334c031 44096 0000000070024000525e0000020405b401010402 000080010000000000000000 44097 10630000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 10638000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 44098 eeee00000001000000000000036e73320564656d6f6e026e6c0000010001 eeee80000001000000030002036e73320564656d6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000f036e73320564656d6f6e036e657400c02a00010001000151800004c29f4906c00c00010001000151800004c29fb004 44099 30d300000001000000000000036e73310564656d6f6e026e6c0000010001 30d380000001000000030002036e73310564656d6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000f036e73320564656d6f6e036e657400c00c00010001000151800004c29f4906c03800010001000151800004c29fb004 44100 196400000001000000000000037777770d72656461637469657374617274026e6c0000010001 196480000001000000030002037777770d72656461637469657374617274026e6c0000010001c0100002000100015180000d036e733106776964657873c01ec01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 44101 8a02000000010000000000000c6c6f72656c70617261736f6c026e6c0000020001 8a02800000010000000200020c6c6f72656c70617261736f6c026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec019c00c00020001000151800006036e7332c031c02d00010001000151800004c29f4906c04500010001000151800004c29fb004 44102 b0a600000001000000000000064d41545249580a72656d636b75696a6572026e6c0000060001 b0a684030001000000010000064d41545249580a72656d636b75696a6572026e6c0000060001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 44103 b88953c350104462c2fb0000000000000000 b889d3c40000000000000000 44104 5372000000010000000000000a74657273706567656c74026e6c00001c0001 5372800000010000000200020a74657273706567656c74026e6c00001c0001c00c00020001000151800012026e730c686f6c696461796d65646961c017c00c00020001000151800006036e7333c02ec02b000100010001518000049265424dc049000100010001518000045054ebbf 44105 3b1e00000001000000000000076d61696c616d730c72656564627573696e657373026e6c00001c0001 3b1e80000001000000020001076d61696c616d730c72656564627573696e657373026e6c00001c0001c01400020001000151800012036e733107686f7374696e6703656269c021c0140002000100015180000d03646e73036b706e03636f6d00c03500010001000151800004c1ad9c46 44106 fba70000000100000000000007746f7368696261026e6c0000010001 fba78000000100000002000107746f7368696261026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02800010001000151800004c1ad6a42 44107 b88b7a195010447047fd0000000000000000 b88bfa140000000000000000 44108 b88b7a195018447009840000008e1e36000000010001000000000e3936323037323637343332322d320000f900010e3936323037323637343332322d320000f900ff00000000005403677373096d6963726f736f667403636f6d0032f53d9532f68f150003000000314e544c4d535350000100000097b200c00b000b002600000006000600200000004d455849434f57454e4e454b45534e45540000 b88bfa140000000000000000 44109 d83b00000001000000000000046d61696c0e76616e686565727761617264656e026e6c0000010001 d83b80000001000000020002046d61696c0e76616e686565727761617264656e026e6c0000010001c0110002000100015180000f026e7309656174736572766572c020c01100020001000151800006036e7332c037c03400010001000151800004d4cb0e42c04f00010001000151800004d4cb1221 44110 8c7f000000010000000000000268740567616d6b6f026e6c0000010001 8c7f800000010000000200000268740567616d6b6f026e6c0000010001c00f0002000100015180000f04686e73300774697363616c69c015c00f0002000100015180000704686e7331c02e 44111 3d8000000001000000000000096b7261616d69646565026e6c0000010001 3d8080000001000000020002096b7261616d69646565026e6c0000010001c00c00020001000151800010036e7331097465727261686f7374c016c00c00020001000151800006036e7332c02ec02a0001000100015180000451044ecec046000100010001518000044500d44a 44112 b88b7a2750114462476c0000000000000000 b88bfa240000000000000000 44113 96c800000001000000000000066b616d70656e026e6c0000010001 96c880000001000000020002066b616d70656e026e6c0000010001c00c0002000100015180000e026e73086d656761706c6578c013c00c00020001000151800006036e7331c02ac02700010001000151800004504f6101c04100010001000151800004504f6102 44114 7a0900000001000000000000037777771c64656261736b657462616c6c7369746576616e6e656465726c616e64026e6c0000010001 7a0980000001000000020002037777771c64656261736b657462616c6c7369746576616e6e656465726c616e64026e6c0000010001c0100002000100015180000f026e7309656174736572766572c02dc01000020001000151800006036e7332c044c04100010001000151800004d4cb0e42c05c00010001000151800004d4cb1221 44115 00ae0000000100000000000009656173792d64697363026e6c00000f0001 00ae8000000100000002000209656173792d64697363026e6c00000f0001c00c0002000100015180000b036e73310470696e65c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d59c0201c04100010001000151800004c3c1a303 44116 4e96000000010000000000000377777704616c6469026e6c0000010001 4e96800000010000000200000377777704616c6469026e6c0000010001c0100002000100015180001a046e73303904626e69630b62657274656c736d616e6e02646500c01000020001000151800007046e733137c02e 44117 42700000000100000000000003777777027669026e6c0000010001 42708000000100000002000203777777027669026e6c0000010001c0100002000100015180000c026e7306787334616c6cc013c01000020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 44118 54380000000100000000000003777777066e6f76617476026e6c0000010001 54388000000100000002000203777777066e6f76617476026e6c0000010001c01000020001000151800010066d696e6e6965066f6d726f6570c017c0100002000100015180000805726f62696ec032c02b00010001000151800004913a1e04c04700010001000151800004913a1a34 44119 65ca00000001000000000000066c6f72696a6e026e6c0000020001 65ca80000001000000020002066c6f72696a6e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 44120 879b00000001000000000000036e73330e61726765776562686f7374696e67026e6c0000010001 879b80000001000000030003036e73330e61726765776562686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7330c010c01000020001000151800002c00cc03300010001000151800004c3561682c04400010001000151800004c3561683c00c00010001000151800004d5de0bfa 44121 8e6200000001000000000000037777770777656777696a73026e6c0000010001 8e6280000001000000020002037777770777656777696a73026e6c0000010001c01000020001000151800013036e73310c62656472696a76656e776562c018c01000020001000151800006036e7332c030c02c00010001000151800004d90867fec04b00010001000151800004c1ad2bfe 44122 b88b7a2850104462476b0000000000000000 b88bfa240000000000000000 44123 b2b600000001000000000000037777771472756974657273706f72746a6f766965686f6666026e6c0000010001 b2b680000001000000020000037777771472756974657273706f72746a6f766965686f6666026e6c0000010001c0100002000100015180000f036e73310561676e2d65036e657400c01000020001000151800006036e7332c03d 44124 1d2e00000001000000000000046d61696c066368656c6c6f026e6c0000010001 1d2e80000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 44125 7c0c000000010000000000000377777709736578687569736a65026e6c0000010001 7c0c800000010000000300000377777709736578687569736a65026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036c0100002000100015180000a076e73686f737433c036 44126 203b00000001000000000000037777770e67726174697370757a7a656c656e026e6c0000010001 203b80000001000000020000037777770e67726174697370757a7a656c656e026e6c0000010001c01000020001000151800010056e73313530047061697203636f6d00c0100002000100015180000c056e73303030036e7330c03e 44127 15ad0010000100000000000108737465653833313905737065656406706c616e6574026e6c00000100010000290800000080000000 15ad8000000100000003000408737465653833313905737065656406706c616e6574026e6c0000010001c01b0002000100015180000b046e73303803777873c022c01b00020001000151800007046e733039c03bc01b00020001000151800006036e7334c03bc03600010001000151800004c3790128c04d00010001000151800004c3790143c06000010001000151800004d5ef9a650000291000000000000000 44128 77ec0010000100000000000108737465653833313905737065656406706c616e6574026e6c00002600010000290800000080000000 77ec8000000100000003000408737465653833313905737065656406706c616e6574026e6c0000260001c01b0002000100015180000b046e73303803777873c022c01b00020001000151800007046e733039c03bc01b00020001000151800006036e7334c03bc03600010001000151800004c3790128c04d00010001000151800004c3790143c06000010001000151800004d5ef9a650000291000000000000000 44129 27d800000001000000000000147370656b736e696a6465727472616e73706f7274026e6c00000f0001 27d880000001000000020002147370656b736e696a6465727472616e73706f7274026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c021c00c00020001000151800006036e7332c038c03500010001000151800004d4cb0e42c05000010001000151800004d4cb1221 44130 3bf60000000100000000000008737465653833313905737065656406706c616e6574026e6c0000010001 3bf68000000100000003000308737465653833313905737065656406706c616e6574026e6c0000010001c01b0002000100015180000b046e73303803777873c022c01b00020001000151800007046e733039c03bc01b00020001000151800006036e7334c03bc03600010001000151800004c3790128c04d00010001000151800004c3790143c06000010001000151800004d5ef9a65 44131 8ef30000000100000000000008737465653833313905737065656406706c616e6574026e6c0000260001 8ef38000000100000003000308737465653833313905737065656406706c616e6574026e6c0000260001c01b0002000100015180000b046e73303803777873c022c01b00020001000151800007046e733039c03bc01b00020001000151800006036e7334c03bc03600010001000151800004c3790128c04d00010001000151800004c3790143c06000010001000151800004d5ef9a65 44132 d1d500000001000000000000036e733109666972737466696e64026e6c0000010001 d1d580000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44133 8cb900000001000000000000036e733209666972737466696e64026e6c0000010001 8cb980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44134 29f9000000010000000000000377777703657664026e6c0000010001 29f9800000010000000200000377777703657664026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 44135 85e9000000010000000000000377777706617265613137026e6c0000010001 85e9800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 44136 bf6200000001000000000000037777770879706576656e7473026e6c0000010001 bf6280000001000000020000037777770879706576656e7473026e6c0000010001c0100002000100015180000c026e7306766576696461c019c01000020001000151800006036e7332c030 44137 3be400000001000000000000037777770a696e666f6b6170706572026e6c0000010001 3be484030001000000010000037777770a696e666f6b6170706572026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 44138 40b000000001000000000000026e73077461736b696e67026e6c0000010001 40b080000001000000030001026e73077461736b696e67026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00f0002000100015180000c026e730678786c696e6bc017c00c00010001000151800004c3c1cf02 44139 9df2000000010000000000000673656375726507656e64656d6f6c026e6c0000010001 9df2800000010000000200000673656375726507656e64656d6f6c026e6c0000010001c0130002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0130002000100015180000d036e7332036b706e036e657400 44140 2e3300000001000000000000026e7311656e7465727072697365686f7374696e67026e6c0000260001 2e3380000001000000020001026e7311656e7465727072697365686f7374696e67026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004d5358e02 44141 123d0000000100000000000004736d747011656e7465727072697365686f7374696e67026e6c0000010001 123d8000000100000002000104736d747011656e7465727072697365686f7374696e67026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c03700010001000151800004d5358e02 44142 799100000001000000000000066c6f726f6276026e6c0000020001 799180000001000000020002066c6f726f6276026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c29f4906c03f00010001000151800004c29fb004 44143 b87f05905011446254fe0000000000000000 b87f80010000000000000000 44144 728100000001000000000000024e53085241424f42414e4b026e6c0000010001 728180000001000000020001024e53085241424f42414e4b026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000b026e73026e6c036e657400c00c0001000100015180000491484fde 44145 b87f05915010446254fd0000000000000000 b87f80010000000000000000 44146 20cc00000001000000000000037777770b6d61726b74706c61617473026e6c0000010001 20cc80000001000000020000037777770b6d61726b74706c61617473026e6c0000010001c0100002000100015180000f036e733105796b6f6f6e036e657400c01000020001000151800006036e7332c034 44147 00e800000001000000000000036e7332076e65746c616e64026e6c0000010001 00e880000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 44148 637f00000001000000000000026e73076e65746c616e64026e6c0000010001 637f80000001000000020002026e73076e65746c616e64026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d9aa2042c03900010001000151800004d9aa2c06 44149 c21300000001000000000000046b696c6f0c6d657373616765626f617264026e6c0000010001 c21380000001000000020000046b696c6f0c6d657373616765626f617264026e6c0000010001c01100020001000151800012026e73096e6c686f7374696e67036e657400c01100020001000151800006036e7331c035 44150 fb6a0000000100000000000006706f7274616c0c74656c6567726161666e6574026e6c0000010001 fb6a8000000100000002000006706f7274616c0c74656c6567726161666e6574026e6c0000010001c01300020001000151800013036e73300974656c656772616166036e657400c01300020001000151800006036e7331c038 44151 fa4700000001000000000000037777770a6e6f6f7264626f726768026e6c0000010001 fa4780000001000000030000037777770a6e6f6f7264626f726768026e6c0000010001c01000020001000151800013036e7331096a61636f62736e657403636f6d00c01000020001000151800012046e73303107696e746f756368036e657400c01000020001000151800006036e7332c033 44152 089d00000001000000000000036e7332076e656473746174026e6c0000010001 089d80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 44153 d9c9000000010000000000000e67757972612d65786368616e6765086775797261696e74026e6c0000010001 d9c9800000010000000200000e67757972612d65786368616e6765086775797261696e74026e6c0000010001c01b0002000100015180000f036e73310571696e6970036e657400c01b00020001000151800006036e7332c03c 44154 b33700000001000000000000036e7334076e656473746174026e6c0000010001 b33780000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 44155 035600000001000000000000037777770d6d6973756e64657273746f6f64026e6c0000010001 035680000001000000020000037777770d6d6973756e64657273746f6f64026e6c0000010001c0100002000100015180000f036e7331053132337873036e657400c01000020001000151800006036e7333c036 44156 bd0b00000001000000000000036e733109666972737466696e64026e6c0000010001 bd0b80000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44157 a69e00000001000000000000036e733209666972737466696e64026e6c0000010001 a69e80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44158 09f80000000100000000000003626c3102626c06787334616c6c026e6c0000010001 09f88000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44159 7b09000000010000000000000b66612d7269657476656c64056d79776562026e6c0000020001 7b09800000010000000200000b66612d7269657476656c64056d79776562026e6c0000020001c018000200010001518000160b6d797765622d61757468300777616e61646f6fc01ec0180002000100015180000e0b6d797765622d6175746831c03e 44160 ae9600000001000000000000036e733309736974656279746573026e6c0000010001 ae9680000001000000030003036e733309736974656279746573026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02e00010001000151800004c2a55e5ac04000010001000151800004c356781cc00c000100010001518000043ec58016 44161 c7860000000100000000000005646e732d31056c61646f74026e6c0000010001 c7868000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44162 c5cb0000000100000000000005646e732d32056c61646f74026e6c0000010001 c5cb8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44163 e0fc0000000100000000000003777777066d6174757265026e6c0000010001 e0fc8000000100000002000203777777066d6174757265026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c017c01000020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad41 44164 11a700000001000000000000066472616b6573026e6c00001c0001 11a780000001000000020002066472616b6573026e6c00001c0001c00c0002000100015180000c026e7306787334616c6cc013c00c00020001000151800006036e7332c02ac02700010001000151800004c26d0642c03f00010001000151800004c26d0963 44165 784f00000001000000000000036e73310974656c656b6162656c026e6c0000010001 784f80000001000000020002036e73310974656c656b6162656c026e6c0000010001c0100002000100015180000a036e733103757063c01ac0100002000100015180000e046e733032066368656c6c6fc01ac02e00010001000151800004d48e1c42c04400010001000151800004d4534483 44166 322100000001000000000000046a706f77076767772d6f7073026e6c0000010001 322180000001000000020002046a706f77076767772d6f7073026e6c0000010001c0110002000100015180000f026e7309656174736572766572c019c01100020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 44167 83cf00100001000000000001036e7332076e656473746174026e6c00000100010000290800000000000000 83cf80000001000000020003036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 44168 178100100001000000000001036e7332076e656473746174026e6c00002600010000290800000000000000 178180000001000000020003036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 44169 101d00100001000000000001036e7334076e656473746174026e6c00000100010000290800000000000000 101d80000001000000020003036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 44170 eed900100001000000000001036e7334076e656473746174026e6c00002600010000290800000000000000 eed980000001000000020003036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d0000291000000000000000 44171 3caf00000001000000000000037777770e616a61782532306f726c616e646f026e6c0000010001 3caf84030001000000010000037777770e616a61782532306f726c616e646f026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 44172 4db900000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 4db980000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 44173 f5a700000001000000000000036d346e056d62757975026e6c0000010001 f5a780000001000000020000036d346e056d62757975026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c02d 44174 82b800000001000000000000036e733109756e69736f75726365026e6c0000010001 82b880000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 44175 65ac000000010000000000000377777703777264026e6c0000010001 65ac800000010000000200020377777703777264026e6c0000010001c0100002000100015180000f036e733108696e74726f776562c014c01000020001000151800006036e7332c02cc0280001000100015180000450416028c04300010001000151800004c356780c 44176 646600000001000000000000037777771275747265636874736e6965757773626c6164026e6c0000010001 646680000001000000020002037777771275747265636874736e6965757773626c6164026e6c0000010001c0100002000100015180000e036e7331076e657463617374c023c01000020001000151800006036e7332c03bc03700010001000151800004c2970101c05100010001000151800004c297012d 44177 765900000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 765980000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44178 8a1b00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 8a1b80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44179 bd8700000001000000000000036e733503777873026e6c0000010001 bd8780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44180 e37800000001000000000000046e73303803777873026e6c0000010001 e37880000001000000030003046e73303803777873026e6c0000010001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 44181 328500000001000000000000046e73303903777873026e6c0000010001 328580000001000000030003046e73303903777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 44182 b2b50000000100000000000004726f6f7307656e64656d6f6c026e6c0000010001 b2b58000000100000002000004726f6f7307656e64656d6f6c026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c0110002000100015180000d036e7332036b706e036e657400 44183 6058000000010000000000000974656d702d72697465026e6c00000f0001 6058800000010000000200020974656d702d72697465026e6c00000f0001c00c0002000100015180000c026e73067574722d6978c016c00c00020001000151800006036e7332c02dc02a0001000100015180000451113206c04200010001000151800004d5c42806 44184 55d500000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 55d580000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44185 c70c00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 c70c80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44186 52fa00000001000000000000037777770865617374626f7973026e6c0000010001 52fa80000001000000020002037777770865617374626f7973026e6c0000010001c0100002000100015180000c04646e73310470696e73c019c0100002000100015180000704646e7332c032c02d00010001000151800004d9c26101c04500010001000151800004d9c26002 44187 fb2000000001000000000000036e73310b7669616e6574776f726b73026e6c00001c0001 fb2080000001000000020002036e73310b7669616e6574776f726b73026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 44188 f55400000001000000000000036e73310b7669616e6574776f726b73026e6c0000260001 f55480000001000000020002036e73310b7669616e6574776f726b73026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d43d0f08c03e00010001000151800004d43d19e2 44189 99f300000001000000000000036e73320b7669616e6574776f726b73026e6c00001c0001 99f380000001000000020002036e73320b7669616e6574776f726b73026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 44190 7a4500000001000000000000036e73320b7669616e6574776f726b73026e6c0000260001 7a4580000001000000020002036e73320b7669616e6574776f726b73026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03000010001000151800004d43d0f08c00c00010001000151800004d43d19e2 44191 4b58000000010000000000000b7374617274706167696e61026e6c0000010001 4b58800000010000000300030b7374617274706167696e61026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 44192 d9e800000001000000000000056d61696c33057669736971026e6c0000010001 d9e880000001000000020002056d61696c33057669736971026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000d036e733206787334616c6cc018c02c00010001000151800004507e17d4c03d00010001000151800004c26d0963 44193 b02300000001000000000000026e7303626f73026e6c0000010001 b02380000001000000020002026e7303626f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5881e43c03500010001000151800004d5139203 44194 6c4800000001000000000000036e733203626f73026e6c0000010001 6c4880000001000000020002036e733203626f73026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004d5881e43c00c00010001000151800004d5139203 44195 4532001000010000000000010377777707746f7067616d65026e6c00000100010000290800000080000000 4532800000010000000200010377777707746f7067616d65026e6c0000010001c0100002000100015180000f02763109706365787472656d65c018c01000020001000151800005027632c02f0000291000000000000000 44196 7d1c00000001000000000000037777770462656872026e6c0000010001 7d1c80000001000000030002037777770462656872026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 44197 4e02000000010000000000000377777702707a026e6c0000010001 4e02800000010000000300010377777702707a026e6c0000010001c0100002000100015180000e026e7308767575727765726bc013c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c045c027000100010001518000043efa0202 44198 af3600100001000000000001036e73310b776f726c646f6e6c696e65026e6c00000100010000290800000000000000 af3680000001000000030003036e73310b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f133250000291000000000000000 44199 abe200100001000000000001036e73320b776f726c646f6e6c696e65026e6c00000100010000290800000000000000 abe280000001000000030003036e73320b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f133250000291000000000000000 44200 e2e6000000010000000000000770726576696577056e6c736d73026e6c0000010001 e2e6800000010000000200000770726576696577056e6c736d73026e6c0000010001c01400020001000151800011036e73310a6461632d706c616e6574c01ac01400020001000151800006036e7332c032 44201 717300000001000000000000036e73310a6461632d706c616e6574026e6c0000010001 717380000001000000030003036e73310a6461632d706c616e6574026e6c0000010001c0100002000100015180000c036e7331056264726567c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d44ff4dac04700010001000151800004d44ff642c05900010001000151800004c3f5c70a 44202 ceca00000001000000000000036e73320a6461632d706c616e6574026e6c0000010001 ceca80000001000000030003036e73320a6461632d706c616e6574026e6c0000010001c0100002000100015180000c036e7331056264726567c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d44ff4dac04700010001000151800004d44ff642c05900010001000151800004c3f5c70a 44203 f63900000001000000000000036e7331066e6c74726565026e6c0000010001 f63980000001000000020002036e7331066e6c74726565026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4b20403c03900010001000151800004d5881e45 44204 f0e60000000100000000000003777777097768656c6672696368026e6c0000010001 f0e68000000100000002000003777777097768656c6672696368026e6c0000010001c0100002000100015180000f036e7331056279303038036e657400c01000020001000151800006036e7332c032 44205 c1dd000000010000000000000377777707746f7067616d65026e6c0000010001 c1dd800000010000000200000377777707746f7067616d65026e6c0000010001c0100002000100015180000f02763109706365787472656d65c018c01000020001000151800005027632c02f 44206 7aad0000000100000000000003777777097765626d6173746572026e6c0000010001 7aad8000000100000002000003777777097765626d6173746572026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c031 44207 0cdd00000001000000000000037777770e686f74656c617070656c73636861026e6c0000010001 0cdd80000001000000020002037777770e686f74656c617070656c73636861026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01fc01000020001000151800006036e7332c036c03300010001000151800004d4cb0e42c04e00010001000151800004d4cb1221 44208 61db00000001000000000000036e733103646c61026e6c0000010001 61db80000001000000020002036e733103646c61026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1a412c036000100010001518000043eb1a413 44209 156f00000001000000000000036e733203646c61026e6c0000010001 156f80000001000000020002036e733203646c61026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc028000100010001518000043eb1a412c00c000100010001518000043eb1a413 44210 aae200000001000000000000036e73310b776f726c646f6e6c696e65026e6c0000010001 aae280000001000000030002036e73310b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 44211 557100000001000000000000036e73320b776f726c646f6e6c696e65026e6c0000010001 557180000001000000030002036e73320b776f726c646f6e6c696e65026e6c0000010001c0100002000100015180000f04616e73310774697363616c69c01cc0100002000100015180000704616e7332c035c0100002000100015180001404616e73330a74697363616c696e657402626500c03000010001000151800004c3f14d38c04b00010001000151800004c3f13325 44212 0f3d000000010000000000000d70616e6461736f667477617265026e6c0000ff0001 0f3d800000010000000200000d70616e6461736f667477617265026e6c0000ff0001c00c0002000100015180000c03646e73036b706e02626500c00c00020001000151800005026e73c032 44213 418300000001000000000000026e73077374616e6e6574026e6c0000010001 418380000001000000020002026e73077374616e6e6574026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5852414c03900010001000151800004d5852418 44214 143900000001000000000000036e733107676f6c69617468026e6c0000010001 143980000001000000020002036e733107676f6c69617468026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f379c03a00010001000151800004507f48c2 44215 3e5200000001000000000000036e733107676f6c69617468026e6c00001c0001 3e5280000001000000020002036e733107676f6c69617468026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f379c03a00010001000151800004507f48c2 44216 9f2900000001000000000000036e733107676f6c69617468026e6c0000260001 9f2980000001000000020002036e733107676f6c69617468026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054f379c03a00010001000151800004507f48c2 44217 e3dd00000001000000000000046e73303903777873026e6c00001c0001 e3dd80000001000000030003046e73303903777873026e6c00001c0001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 44218 efb600000001000000000000046e73303903777873026e6c0000260001 efb680000001000000030003046e73303903777873026e6c0000260001c01100020001000151800007046e733038c011c01100020001000151800002c00cc01100020001000151800006036e7334c011c02900010001000151800004c3790128c00c00010001000151800004c3790143c04a00010001000151800004d5ef9a65 44219 cf6c00000001000000000000036e733503777873026e6c00001c0001 cf6c80000001000000030003036e733503777873026e6c00001c0001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44220 c5e700000001000000000000046e73303803777873026e6c00001c0001 c5e780000001000000030003046e73303803777873026e6c00001c0001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 44221 bc2900000001000000000000036e733503777873026e6c0000260001 bc2980000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44222 c8db00000001000000000000046e73303803777873026e6c0000260001 c8db80000001000000030003046e73303803777873026e6c0000260001c01100020001000151800002c00cc01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c00c00010001000151800004c3790128c03700010001000151800004c3790143c04a00010001000151800004d5ef9a65 44223 6666000000010000000000000a6970353033636430353905737065656406706c616e6574026e6c0000010001 6666800000010000000300030a6970353033636430353905737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 44224 45520000000100000000000009686869656d73747261026e6c0000010001 45528000000100000002000009686869656d73747261026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c030 44225 1fd1000000010000000000000c61727469732d686f72656361026e6c0000010001 1fd1800000010000000200000c61727469732d686f72656361026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c033 44226 4c4d00000001000000000000036e7332076e656473746174026e6c0000010001 4c4d80000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 44227 9ada00000001000000000000036e7332076e656473746174026e6c0000260001 9ada80000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 44228 e6ac00000001000000000000036e7334076e656473746174026e6c0000010001 e6ac80000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 44229 735600000001000000000000036e7334076e656473746174026e6c0000260001 735680000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 44230 84ef00000001000000000000037777770773657877697368026e6c0000010001 84ef80000001000000020002037777770773657877697368026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac018c01000020001000151800006036e7332c030c02c00010001000151800004d5efa011c04700010001000151800004d5efa075 44231 821700000001000000000000037777771074686561746572626f75776b756e6465026e6c0000010001 821780000001000000020001037777771074686561746572626f75776b756e6465026e6c0000010001c0100002000100015180000e036e7331076f6d732d6e6574c021c01000020001000151800006036e7333c039c03500010001000151800004d5efb22f 44232 469a000000010000000000000377777711706574657270616e7370656564726f636b026e6c0000010001 469a800000010000000200000377777711706574657270616e7370656564726f636b026e6c0000010001c0100002000100015180001504646e73310a65617379736572766572036e657400c0100002000100015180000704646e7332c03b 44233 0d0900000001000000000000064b5542535531034b5542024e4c0000010001 0d0980000001000000030003064b5542535531034b5542024e4c0000010001c01300020001000151800009066b7562737532c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c017c02b0001000100015180000489380028c00c000100010001518000048938001bc04e00010001000151800004c0576a65 44234 d52f0000000100000000000003777777067878786f6d61026e6c0000010001 d52f8000000100000002000003777777067878786f6d61026e6c0000010001c0100002000100015180000d036e7331046564697302617400c01000020001000151800006036e7332c02f 44235 8d2300100001000000000001036e733503777873026e6c00000100010000290800000000000000 8d2380000001000000030004036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a650000291000000000000000 44236 451500000001000000000000023465026e6c00000f0001 451580000001000000020002023465026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec00fc00c00020001000151800006036e7332c027c02300010001000151800004c29f4906c03b00010001000151800004c29fb004 44237 bfd700000001000000000000026e730f646f6d61696e2d7265676973747279026e6c00001c0001 bfd780000001000000030002026e730f646f6d61696e2d7265676973747279026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 44238 391500000001000000000000026e730f646f6d61696e2d7265676973747279026e6c0000260001 391580000001000000030002026e730f646f6d61696e2d7265676973747279026e6c0000260001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 44239 7c6f00000001000000000000037777770b6465776966616e73697465026e6c0000010001 7c6f80000001000000020000037777770b6465776966616e73697465026e6c0000010001c0100002000100015180000d036e7331046564697302617400c01000020001000151800006036e7332c034 44240 17a100000001000000000000037777770b787472656d65766964656f026e6c0000010001 17a180000001000000020002037777770b787472656d65766964656f026e6c0000010001c0100002000100015180000b036e7331046e732d31c01cc01000020001000151800006036e7332c034c030000100010001518000045045a0cdc04700010001000151800004d4cceec8 44241 e3ed000000010000000000000362776403727773076d696e76656e77026e6c00000f0001 e3ed800000010000000300020362776403727773076d696e76656e77026e6c00000f0001c01400020001000151800005026e73c014c01400020001000151800006036e7331c014c0140002000100015180000d036e7332036b706e036e657400c03000010001000151800004c297be47c04100010001000151800004c297be48 44242 a2d500000001000000000000047269766d026e6c00000f0001 a2d580000001000000020002047269766d026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000e036e733107737572666e6574c011c0250001000100015180000483e00314c03600010001000151800004c0576a65 44243 579d000000010000000000000377777709646f72647473657777026e6c0000010001 579d800000010000000300010377777709646f72647473657777026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 44244 b62e00000001000000000000036e733503777873026e6c0000010001 b62e80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44245 1b700000000100000000000008626a7a2d616d7a77026e6c00000f0001 1b708000000100000002000208626a7a2d616d7a77026e6c00000f0001c00c0002000100015180000d026e73076b6e6f77617265c015c00c00020001000151800006036e7332c02cc02900010001000151800004c3402003c04200010001000151800004c340202b 44246 6fbf00000001000000000000037777770a62616279626f6f6d6572026e6c0000010001 6fbf80000001000000020001037777770a62616279626f6f6d6572026e6c0000010001c0100002000100015180000c026e7306636f62776562c01bc01000020001000151800011026e73087363686970686f6c036e657400c02f0001000100015180000450f26001 44247 72f500000001000000000000037777770361636e026e6c0000010001 72f580000001000000020000037777770361636e026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 44248 0d4900000001000000000000046e65777306697474707562026e6c0000010001 0d4980000001000000020001046e65777306697474707562026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02c00010001000151800004c14fcc01 44249 0d4000000001000000000000046e65777306697474707562026e6c0000010001 0d4080000001000000020001046e65777306697474707562026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02c00010001000151800004c14fcc01 44250 e595000000010000000000000376766b036b766b026e6c00000f0001 e595800000010000000200020376766b036b766b026e6c00000f0001c0100002000100015180000d026e73076b6e6f77617265c014c01000020001000151800006036e7332c02bc02800010001000151800004c3402003c04100010001000151800004c340202b 44251 b72b000000010000000000000767726179646f6e026e6c00001c0001 b72b800000010000000200020767726179646f6e026e6c00001c0001c00c0002000100015180000704706c6f70c00cc00c0002000100015180000c036e73310563736e6574c014c028000100010001518000043e3a0e32c03b00010001000151800004c2451012 44252 a83d00000001000000000000037777770d6b656c6c797365727669636573026e6c0000010001 a83d80000001000000020002037777770d6b656c6c797365727669636573026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01ec01000020001000151800013036e73320c636f6e63657074732d696374c01ec03200010001000151800004d5c51c03c04f00010001000151800004d5c51e4b 44253 74cb00000001000000000000077365727665723907626c7565646e73026e6c00000f0001 74cb80000001000000020002077365727665723907626c7565646e73026e6c00000f0001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c03000010001000151800004d5c401c0c04200010001000151800004d5c4035a 44254 24ca0000000100000000000003777777137363686f7577656e2d64756976656e6c616e64026e6c0000010001 24ca8403000100000001000003777777137363686f7577656e2d64756976656e6c616e64026e6c0000010001c02400060001000038400036026e730f646f6d61696e2d7265676973747279c0240a686f73746d6173746572c03b0bf1e540000070800000384000278d0000003840 44255 685d00000001000000000000037777770c73656b73616472657373656e026e6c0000010001 685d80000001000000020002037777770c73656b73616472657373656e026e6c0000010001c0100002000100015180000c036e733105642d6f2d73c01dc01000020001000151800006036e7332c035c0310001000100015180000451ad076cc0490001000100015180000451ad076d 44256 542c0000000100000000000003777777176165676f6e62656472696a667370656e73696f656e656e026e6c0000010001 542c8000000100000002000003777777176165676f6e62656472696a667370656e73696f656e656e026e6c0000010001c01000020001000151800015026e730d646f6d61696e6e6574776f726b02736500c01000020001000151800006036e7332c03f 44257 390c00000001000000000000037777770873796d616e746563026e6c0000010001 390c80000001000000030000037777770873796d616e746563026e6c0000010001c01000020001000151800012036e73310873796d616e74656303636f6d00c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031 44258 bae200000001000000000000036e733109666972737466696e64026e6c0000010001 bae280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44259 1de80000000100000000000004646f6f72026e6c00000f0001 1de88000000100000002000004646f6f72026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c011c00c0002000100015180000704686e7331c02a 44260 b0e800000001000000000000036e733209666972737466696e64026e6c0000010001 b0e880000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44261 d7500000000100000000000003626c3102626c06787334616c6c026e6c0000010001 d7508000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44262 e4ec000000010000000000000377777706617265613137026e6c0000010001 e4ec800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 44263 238d00000001000000000000036e733109756e69736f75726365026e6c0000010001 238d80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 44264 5a7c000000010000000000000b6c6f752d68616e73746f6e026e6c0000020001 5a7c800000010000000200020b6c6f752d68616e73746f6e026e6c0000020001c00c0002000100015180000c036e73310564656d6f6ec018c00c00020001000151800006036e7332c030c02c00010001000151800004c29f4906c04400010001000151800004c29fb004 44265 3840000000010000000000001076616e6d6175726963656465686f6e64026e6c0000010001 3840840300010000000100001076616e6d6175726963656465686f6e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 44266 f34d00100001000000000001036e733103727567026e6c00000100010000290800000000000000 f34d80000001000000030004036e733103727567026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004817d0406c03600010001000151800004817d040dc04800010001000151800004c0576a650000291000000000000000 44267 1cd400100001000000000001036e733103727567026e6c00002600010000290800000000000000 1cd480000001000000030004036e733103727567026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004817d0406c03600010001000151800004817d040dc04800010001000151800004c0576a650000291000000000000000 44268 475a00100001000000000001036e733203727567026e6c00000100010000290800000000000000 475a80000001000000030004036e733203727567026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004817d0406c00c00010001000151800004817d040dc04800010001000151800004c0576a650000291000000000000000 44269 a3ad00100001000000000001036e733203727567026e6c00002600010000290800000000000000 a3ad80000001000000030004036e733203727567026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004817d0406c00c00010001000151800004817d040dc04800010001000151800004c0576a650000291000000000000000 44270 bef30000000100000000000005646e732d31056c61646f74026e6c0000010001 bef38000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44271 40ad0000000100000000000005646e732d32056c61646f74026e6c0000010001 40ad8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44272 0eb00010000100000000000103626c3102626c06787334616c6c026e6c00000100010000290800000080000000 0eb08000000100000003000303626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d09630000291000000000000000 44273 36e300000001000000000000037777770f686f6d6f736578706c6161746a6573026e6c0000010001 36e380000001000000020002037777770f686f6d6f736578706c6161746a6573026e6c0000010001c0100002000100015180000c04646e73310470696e73c020c0100002000100015180000704646e7332c039c03400010001000151800004d9c26101c04c00010001000151800004d9c26002 44274 423c000000010000000000000377777709626f6f7a616c6c656e026e6c0000010001 423c800000010000000300010377777709626f6f7a616c6c656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 44275 3fe000000001000000000000036e733103727567026e6c0000010001 3fe080000001000000030003036e733103727567026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004817d0406c03600010001000151800004817d040dc04800010001000151800004c0576a65 44276 cfdd00000001000000000000036e733103727567026e6c0000260001 cfdd80000001000000030003036e733103727567026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004817d0406c03600010001000151800004817d040dc04800010001000151800004c0576a65 44277 b9a000000001000000000000036e733203727567026e6c0000260001 b9a080000001000000030003036e733203727567026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004817d0406c00c00010001000151800004817d040dc04800010001000151800004c0576a65 44278 815100000001000000000000036e733203727567026e6c0000010001 815180000001000000030003036e733203727567026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004817d0406c00c00010001000151800004817d040dc04800010001000151800004c0576a65 44279 65ab00100001000000000001036e733107737572666e6574026e6c00000100010000290800000080000000 65ab80000001000000040004036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a650000291000000000000000 44280 18d4000000010000000000000377777716706c6174666f726d67656e746563686e6f6c6f676965026e6c0000010001 18d4800000010000000300000377777716706c6174666f726d67656e746563686e6f6c6f676965026e6c0000010001c01000020001000151800010036e73310669646565656c036e657400c01000020001000151800006036e7332c03fc01000020001000151800006036e7333c03f 44281 bfd2000000010000000000000377777709616476656e74697374026e6c0000010001 bfd2800000010000000200020377777709616476656e74697374026e6c0000010001c01000020001000151800012036e73310b73697465686f7374696e67c01ac01000020001000151800006036e7332c032c02e00010001000151800004cf2410f1c04c00010001000151800004cf2410f2 44282 84d50000000100000000000003646e62026e6c00000f0001 84d58000000100000002000003646e62026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02a 44283 9f240000000100000000000002343703323031033136350236370a626c61636b686f6c657307656173796e6574026e6c0000050001 9f248000000100000002000202343703323031033136350236370a626c61636b686f6c657307656173796e6574026e6c0000050001c02500020001000151800006036e7330c025c02500020001000151800006036e7331c025c04100010001000151800004c2a55e01c05300010001000151800004c2a55e05 44284 8720000000010000000000000377777707686f70616b6565026e6c0000010001 8720800000010000000200000377777707686f70616b6565026e6c0000010001c01000020001000151800012036e733108636f7665736f6674036e657400c010000200010001518000120377773208636f7665736f667403636f6d00 44285 705e00000001000000000000156865616c7468616e646669746e65737367726f7570026e6c00000f0001 705e80000001000000030003156865616c7468616e646669746e65737367726f7570026e6c00000f0001c00c0002000100015180000b04646e733103766970c022c00c0002000100015180000704646e7332c03bc00c0002000100015180000704646e7333c03bc03600010001000151800004d44fe803c04d00010001000151800004c3f5c782c06000010001000151800004d44ff303 44286 f05800000001000000000000086561737964697363026e6c00000f0001 f05880000001000000020002086561737964697363026e6c00000f0001c00c00020001000151800013036e73310c62656472696a76656e776562c015c00c00020001000151800006036e7332c02dc02900010001000151800004d90867fec04800010001000151800004c1ad2bfe 44287 d76100000001000000000000036e733109666972737466696e64026e6c0000010001 d76180000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44288 8f1900000001000000000000036e733209666972737466696e64026e6c0000010001 8f1980000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44289 843300000001000000000000064f424a564953026e6c0000020001 843384030001000000010000064f424a564953026e6c0000020001c01300060001000038400036026e730f646f6d61696e2d7265676973747279c0130a686f73746d6173746572c02a0bf1e540000070800000384000278d0000003840 44290 2d3200000001000000000000046d61696c066368656c6c6f026e6c0000010001 2d3280000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 44291 0860000000010000000000000e7072696e732d746563686e69656b026e6c00000f0001 0860800000010000000200010e7072696e732d746563686e69656b026e6c00000f0001c00c00020001000151800013036e73310c636f6e63657074732d696374c01bc00c00020001000151800006036e7332c033c04e00010001000151800004d5c51e4b 44292 c79c00000001000000000000056f6469756d05746d666562026e6c00000f0001 c79c84030001000000010000056f6469756d05746d666562026e6c00000f0001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 44293 6cf9000000010000000000000f4a4f48414e534348554954454d414b026e6c0000010001 6cf9840300010000000100000f4a4f48414e534348554954454d414b026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 44294 a9700000000100000000000003626c3102626c06787334616c6c026e6c0000010001 a9708000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44295 cf350000000100000000000003626c3102626c06787334616c6c026e6c0000010001 cf358000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44296 ec5000000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 ec5080000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 44297 344400100001000000000001036d783306787334616c6c026e6c00000100010000290800000080000000 344480000001000000030003036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d09630000291000000000000000 44298 ece3000000010000000000000377777716706c6174666f726d67656e746563686e6f6c6f676965026e6c0000010001 ece3800000010000000300000377777716706c6174666f726d67656e746563686e6f6c6f676965026e6c0000010001c01000020001000151800010036e73310669646565656c036e657400c01000020001000151800006036e7332c03fc01000020001000151800006036e7333c03f 44299 f43b00000001000000000000036e733107737572666e6574026e6c0000010001 f43b80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 44300 5b1e0000000100000000000003777777057061746865026e6c0000010001 5b1e8000000100000002000203777777057061746865026e6c0000010001c0100002000100015180000e036e733207737570706f7274c016c01000020001000151800006036e7334c02ec02a00010001000151800004c372e7c8c04400010001000151800004c372e6fe 44301 ddfa00000001000000000000037777770b636861696e2d6d6574616c026e6c0000010001 ddfa80000001000000030003037777770b636861696e2d6d6574616c026e6c0000010001c010000200010001518000180b6e616d6573657276657231096469676974616c7573c01cc0100002000100015180000e0b6e616d6573657276657232c03cc0100002000100015180000e0b6e616d6573657276657233c03cc0300001000100015180000451ad2020c0540001000100015180000451ad2021c06e0001000100015180000452c049aa 44302 8c68000000010000000000000377777706617265613137026e6c0000010001 8c68800000010000000200000377777706617265613137026e6c0000010001c01000020001000151800010036e733109666972737466696e64c017c01000020001000151800006036e7332c02f 44303 812b0000000100000000000005646e732d31056c61646f74026e6c0000010001 812b8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44304 812c0000000100000000000005646e732d32056c61646f74026e6c0000010001 812c8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44305 812d00000001000000000000037777770a64756976656e666f746f026e6c0000010001 812d80000001000000020000037777770a64756976656e666f746f026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01bc0100002000100015180000805646e732d32c035 44306 704c0000000100000000000008696e76756c6c656e026e6c0000010001 704c8000000100000003000208696e76756c6c656e026e6c0000010001c00c0002000100015180000d036e733106776964657873c015c00c00020001000151800010036e733206776964657873036e657400c00c00020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 44307 4c6a00000001000000000000046e733032066368656c6c6f026e6c00001c0001 4c6a80000001000000030003046e733032066368656c6c6f026e6c00001c0001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 44308 978e00000001000000000000046e733032066368656c6c6f026e6c0000260001 978e80000001000000030003046e733032066368656c6c6f026e6c0000260001c01100020001000151800007046e733031c011c01100020001000151800002c00cc0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c00c00010001000151800004d4534483c04d00010001000151800004d48e1c42 44309 1b090000000100000000000008667265656d61696c026e6c0000010001 1b098000000100000003000208667265656d61696c026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c015c00c0002000100015180000704616e7332c02ec00c0002000100015180001404616e73330a74697363616c696e657402626500c02900010001000151800004c3f14d38c04400010001000151800004c3f13325 44310 e268000000010000000000000470696e6706787334616c6c026e6c0000010001 e268800000010000000300020470696e6706787334616c6c026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c0110002000100015180000d026e730472697065036e657400c02c00010001000151800004c26d0642c03d00010001000151800004c26d0963 44311 7aa90000000100000000000006643638323331057570632d64066368656c6c6f026e6c0000010001 7aa98000000100000003000306643638323331057570632d64066368656c6c6f026e6c0000010001c01900020001000151800007046e733031c019c01900020001000151800007046e733032c019c0190002000100015180000a036e733103757063c020c03400010001000151800004d4534482c04700010001000151800004d4534483c05a00010001000151800004d48e1c42 44312 947000000001000000000000056873656276026e6c00000f0001 947080000001000000020000056873656276026e6c00000f0001c00c0002000100015180000c036e723105692d702d64c012c00c00020001000151800006036e7232c02a 44313 939900000001000000000000037777770b7665727a616d656c6c656e026e6c0000010001 939984030001000000010000037777770b7665727a616d656c6c656e026e6c0000010001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 44314 b18800000001000000000000036e733202696f026e6c0000010001 b18880000001000000020002036e733202696f026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0270001000100015180000451112102c00c0001000100015180000451112202 44315 757800000001000000000000036e733202696f026e6c00001c0001 757880000001000000020002036e733202696f026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0270001000100015180000451112102c00c0001000100015180000451112202 44316 841c00000001000000000000036e733202696f026e6c0000260001 841c80000001000000020002036e733202696f026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0270001000100015180000451112102c00c0001000100015180000451112202 44317 b59600000001000000000000036e733102696f026e6c0000010001 b59680000001000000020002036e733102696f026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451112102c0350001000100015180000451112202 44318 257300000001000000000000036e733102696f026e6c00001c0001 257380000001000000020002036e733102696f026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451112102c0350001000100015180000451112202 44319 0dea00000001000000000000036e733102696f026e6c0000260001 0dea80000001000000020002036e733102696f026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000451112102c0350001000100015180000451112202 44320 8e1700000001000000000000046d61696c057369727573026e6c0000010001 8e1780000001000000030003046d61696c057369727573026e6c0000010001c01100020001000151800010036e733109736974656279746573c017c01100020001000151800006036e7332c02fc01100020001000151800006036e7333c02fc02b00010001000151800004c2a55e5ac04700010001000151800004c356781cc059000100010001518000043ec58016 44321 0a5b000000010000000000000773657834616c6c026e6c0000010001 0a5b800000010000000200000773657834616c6c026e6c0000010001c00c00020001000151800012036e7331086379626572616374036e657400c00c00020001000151800006036e7332c02c 44322 32660000000100000000000006626f696b6f6e026e6c00000f0001 32668000000100000002000206626f696b6f6e026e6c00000f0001c00c0002000100015180000a036e733103696166c013c00c00020001000151800006036e7332c02bc027000100010001518000045059e040c03d000100010001518000045059ee03 44323 38d6000000010000000000000773657276657231087369746574726171026e6c0000010001 38d6800000010000000200000773657276657231087369746574726171026e6c0000010001c0140002000100015180000f036e733105796b6f6f6e036e657400c01400020001000151800006036e7332c035 44324 9a2200000001000000000000036d783306787334616c6c026e6c0000010001 9a2280000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 44325 ff7000000001000000000000046d61696c076e65746578706f026e6c0000010001 ff7080000001000000020002046d61696c076e65746578706f026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02d000100010001518000043efa0ac2c03e000100010001518000043efa0a82 44326 eb6b00000001000000000000066d6164726964076e65746578706f026e6c0000010001 eb6b80000001000000020002066d6164726964076e65746578706f026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c02f000100010001518000043efa0ac2c040000100010001518000043efa0a82 44327 106500000001000000000000037777770a61737472616c6c696f6e026e6c0000010001 106580000001000000020002037777770a61737472616c6c696f6e026e6c0000010001c0100002000100015180000a036e733103696166c01bc01000020001000151800006036e7332c033c02f000100010001518000045059e040c045000100010001518000045059ee03 44328 ef4f000000010000000000000a656c656374726162656c026e6c0000010001 ef4f800000010000000200010a656c656374726162656c026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c02b00010001000151800004d535c463 44329 cc63001000010000000000010a6175746f747261646572086175746f7765656b026e6c00000100010000290800000080000000 cc63800000010000000300010a6175746f747261646572086175746f7765656b026e6c0000010001c01700020001000151800010036e733106666173747873036e657400c01700020001000151800006036e7332c038c01700020001000151800006036e7333c0380000291000000000000000 44330 9f6200000001000000000000036e733109666972737466696e64026e6c0000010001 9f6280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44331 b9a20000000100000000000010706c617374696b66616e74617374696b026e6c00000f0001 b9a28000000100000002000010706c617374696b66616e74617374696b026e6c00000f0001c00c0002000100015180000c026e7306766576696461c01dc00c00020001000151800006036e7332c034 44332 87bd00000001000000000000036e733209666972737466696e64026e6c0000010001 87bd80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44333 50060000000100000000000003626c3102626c06787334616c6c026e6c0000010001 50068000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44334 42d70000000100000000000003626c3102626c06787334616c6c026e6c0000010001 42d78000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44335 040200000001000000000000036e733109776869726c77696e64026e6c0000010001 040280000001000000020002036e733109776869726c77696e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e683c03c00010001000151800004d973c5bd 44336 c11a00000001000000000000036e733109776869726c77696e64026e6c0000260001 c11a80000001000000020002036e733109776869726c77696e64026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000045054e683c03c00010001000151800004d973c5bd 44337 b05c00000001000000000000036e733209776869726c77696e64026e6c0000010001 b05c80000001000000020002036e733209776869726c77696e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054e683c00c00010001000151800004d973c5bd 44338 2c5a00000001000000000000036e733209776869726c77696e64026e6c0000260001 2c5a80000001000000020002036e733209776869726c77696e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000045054e683c00c00010001000151800004d973c5bd 44339 0f480000000100000000000006636861726973026e6c00000f0001 0f488000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 44340 6bd400000001000000000000115354494e472d494e2d5448452d5441494c026e6c0000020001 6bd484030001000000010000115354494e472d494e2d5448452d5441494c026e6c0000020001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 44341 97f0000000010000000000000562696e636b026e6c00001c0001 97f0800000010000000200020562696e636b026e6c00001c0001c00c0002000100015180000b036e73310470696e65c012c00c00020001000151800006036e7332c02ac02600010001000151800004d59c0201c03d00010001000151800004c3c1a303 44342 ddae00000001000000000000036e733306696e61646765026e6c0000010001 ddae80000001000000020001036e733306696e61646765026e6c0000010001c01000020001000151800002c00cc01000020001000151800012036e7337087a6f6e656564697403636f6d00c00c00010001000151800004d9164114 44343 fbcd0000000100000000000006636861726973026e6c00000f0001 fbcd8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 44344 eed700000001000000000000036e733306696e61646765026e6c0000260001 eed780000001000000020001036e733306696e61646765026e6c0000260001c01000020001000151800002c00cc01000020001000151800012036e7337087a6f6e656564697403636f6d00c00c00010001000151800004d9164114 44345 73220000000100000000000006504c414e4554024e4c0000ff0001 73228000000100000003000306504c414e4554024e4c0000ff0001c00c0002000100015180000b046e73303803777873c013c00c00020001000151800007046e733039c02cc00c00020001000151800006036e7334c02cc02700010001000151800004c3790128c03e00010001000151800004c3790143c05100010001000151800004d5ef9a65 44346 fd870000000100000000000006636861726973026e6c0000010001 fd878000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 44347 e71f00000001000000000000076379636c6f6e65026e6c00000f0001 e71f80000001000000020002076379636c6f6e65026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c014c00c00020001000151800006036e7332c02cc02800010001000151800004d43d0f08c04600010001000151800004d43d19e2 44348 e5e600000001000000000000037777770c6265726e657273656e6e656e026e6c0000010001 e5e680000001000000020002037777770c6265726e657273656e6e656e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 44349 d039000000010000000000001076616e6d6175726963656465686f6e64026e6c0000010001 d039840300010000000100001076616e6d6175726963656465686f6e64026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 44350 92ab00000001000000000000056d61696c3109636c65616e706f7274026e6c0000010001 92ab80000001000000020002056d61696c3109636c65616e706f7274026e6c0000010001c01200020001000151800015036e73310e6f6f7374656e646f72702d696374c01cc01200020001000151800006036e7332c034c03000010001000151800004d44fe9e0c05100010001000151800004d44fe9e1 44351 aaaf0000000100000000000003777777076f72696f6e636f026e6c0000010001 aaaf8000000100000002000003777777076f72696f6e636f026e6c0000010001c0100002000100015180000d026e730468736367036e657400c01000020001000151800006036e7332c02f 44352 ccb3000000010000000000000377777703313072026e6c0000010001 ccb3800000010000000200020377777703313072026e6c0000010001c0100002000100015180000f036e73310861746c616e74697ac014c01000020001000151800006036e7332c02cc02800010001000151800004d5efa011c04300010001000151800004d5efa075 44353 b657000000010000000000000a6175746f747261646572086175746f7765656b026e6c0000010001 b657800000010000000300000a6175746f747261646572086175746f7765656b026e6c0000010001c01700020001000151800010036e733106666173747873036e657400c01700020001000151800006036e7332c038c01700020001000151800006036e7333c038 44354 cb4d00000001000000000000046a6f686e0b6c756c6d6161727261616b026e6c0000010001 cb4d80000001000000030002046a6f686e0b6c756c6d6161727261616b026e6c0000010001c01100020001000151800015036e73310e666c6578776562686f7374696e67c01dc01100020001000151800006036e7332c035c01100020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c03100010001000151800004cf2cd7adc0520001000100015180000452c04365 44355 6aba00000001000000000000036d783209414d5354455244414d024e4c0000010001 6aba80000001000000030002036d783209414d5354455244414d024e4c0000010001c01000020001000151800015036e73310b70696e6b726f6363616465036e657400c0100002000100015180000e026e73086d656761706c6578c01ac01000020001000151800006036e7331c052c04f00010001000151800004504f6101c06900010001000151800004504f6102 44356 12e800000001000000000000034e5332044c554d43024e4c0000010001 12e880000001000000030003034e5332044c554d43024e4c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c015c029000100010001518000049158d2eac00c000100010001518000049158d30ac04900010001000151800004c0576a65 44357 2a2300000001000000000000034e5331044c554d43024e4c0000010001 2a2380000001000000030003034e5331044c554d43024e4c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c015c00c000100010001518000049158d2eac037000100010001518000049158d30ac04900010001000151800004c0576a65 44358 477000000001000000000000026e7303617a72026e6c0000010001 477080000001000000030003026e7303617a72026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000e036e733107737572666e6574c013c00c000100010001518000049c53fc99c035000100010001518000049c53fcfdc04700010001000151800004c0576a65 44359 2dbb0000000100000000000006706f6c6c7578086c6f7374626f7973026e6c0000010001 2dbb8000000100000002000206706f6c6c7578086c6f7374626f7973026e6c0000010001c0130002000100015180000906636173746f72c013c01300020001000151800002c00cc030000100010001518000043e32050ac00c00010001000151800004c297d912 44360 e0560000000100000000000006706f6c6c7578086c6f7374626f7973026e6c00001c0001 e0568000000100000002000206706f6c6c7578086c6f7374626f7973026e6c00001c0001c0130002000100015180000906636173746f72c013c01300020001000151800002c00cc030000100010001518000043e32050ac00c00010001000151800004c297d912 44361 ebf40000000100000000000006706f6c6c7578086c6f7374626f7973026e6c0000260001 ebf48000000100000002000206706f6c6c7578086c6f7374626f7973026e6c0000260001c0130002000100015180000906636173746f72c013c01300020001000151800002c00cc030000100010001518000043e32050ac00c00010001000151800004c297d912 44362 b9490000000100000000000006636173746f72086c6f7374626f7973026e6c0000010001 b9498000000100000002000206636173746f72086c6f7374626f7973026e6c0000010001c01300020001000151800002c00cc0130002000100015180000906706f6c6c7578c013c00c000100010001518000043e32050ac03e00010001000151800004c297d912 44363 99f60000000100000000000006636173746f72086c6f7374626f7973026e6c00001c0001 99f68000000100000002000206636173746f72086c6f7374626f7973026e6c00001c0001c01300020001000151800002c00cc0130002000100015180000906706f6c6c7578c013c00c000100010001518000043e32050ac03e00010001000151800004c297d912 44364 d7010000000100000000000006636173746f72086c6f7374626f7973026e6c0000260001 d7018000000100000002000206636173746f72086c6f7374626f7973026e6c0000260001c01300020001000151800002c00cc0130002000100015180000906706f6c6c7578c013c00c000100010001518000043e32050ac03e00010001000151800004c297d912 44365 445200000001000000000000036e7332046e667261026e6c00001c0001 445280000001000000030003036e7332046e667261026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c015c02900010001000151800004c0570196c00c00010001000151800004c0570197c04900010001000151800004c0576a65 44366 601600000001000000000000036e7332046e667261026e6c0000260001 601680000001000000030003036e7332046e667261026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c015c02900010001000151800004c0570196c00c00010001000151800004c0570197c04900010001000151800004c0576a65 44367 e1da00000001000000000000036e7331046e667261026e6c00001c0001 e1da80000001000000030003036e7331046e667261026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c015c00c00010001000151800004c0570196c03700010001000151800004c0570197c04900010001000151800004c0576a65 44368 b68800000001000000000000036e7331046e667261026e6c0000260001 b68880000001000000030003036e7331046e667261026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c015c00c00010001000151800004c0570196c03700010001000151800004c0570197c04900010001000151800004c0576a65 44369 b6f300000001000000000000036e733205786c722d38026e6c0000010001 b6f380000001000000020002036e733205786c722d38026e6c0000010001c01000020001000151800009036e7331026973c016c01000020001000151800006036e7332c02ec02a00010001000151800004d5852102c03f00010001000151800004d5c41503 44370 c2520000000100000000000003777777086175746f6c616e64026e6c0000010001 c2528000000100000002000203777777086175746f6c616e64026e6c0000010001c0100002000100015180000c026e7306787334616c6cc019c01000020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 44371 1adf0000000100000000000003777777036d736e026e6c0000010001 1adf8000000100000003000003777777036d736e026e6c0000010001c0100002000100015180001204646e733302756b046d736674036e657400c0100002000100015180000a04646e7331026370c030c0100002000100015180000a04646e7331026463c030 44372 09bb00000001000000000000037777771163762064657a7765696c616e6365657273026e6c0000010001 09bb84030001000000010000037777771163762064657a7765696c616e6365657273026e6c0000010001c02200060001000038400036026e730f646f6d61696e2d7265676973747279c0220a686f73746d6173746572c0390bf1e540000070800000384000278d0000003840 44373 06a000000001000000000000067a65706879720473656d61026e6c0000010001 06a080000001000000030003067a65706879720473656d61026e6c0000010001c01300020001000151800012047072693103646e73067073696e6574c018c013000200010001518000070470726932c031c013000200010001518000070470726933c031c02c000100010001518000049a0ff9a6c04a000100010001518000049a0ff9aac05d000100010001518000049a0ff9ae 44374 7a1b00000001000000000000036d7831076e65746c616e64026e6c0000010001 7a1b80000001000000020002036d7831076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c02c00010001000151800004d9aa2042c03d00010001000151800004d9aa2c06 44375 ddc6000000010000000000000673656375726509706f7374706c617a61026e6c0000010001 ddc6800000010000000200020673656375726509706f7374706c617a61026e6c0000010001c0130002000100015180000e036e733207737570706f7274c01dc01300020001000151800006036e7334c035c03100010001000151800004c372e7c8c04b00010001000151800004c372e6fe 44376 7c6200100001000000000001077765626d61696c03777873026e6c00000100010000290800000080000000 7c6280000001000000030004077765626d61696c03777873026e6c0000010001c01400020001000151800007046e733038c014c01400020001000151800007046e733039c014c01400020001000151800006036e7334c014c02c00010001000151800004c3790128c03f00010001000151800004c3790143c05200010001000151800004d5ef9a650000291000000000000000 44377 3a38000000010000000000000966616c6c6261636b31086473646575726e65026e6c0000010001 3a38800000010000000200020966616c6c6261636b31086473646575726e65026e6c0000010001c01600020001000151800006036e7331c016c01600020001000151800006036e7332c016c0330001000100015180000452968003c04500010001000151800004d5a0f984 44378 d81800000001000000000000036e733503777873026e6c0000010001 d81880000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44379 ca390000000100000000000003777777056665646578026e6c0000010001 ca398000000100000002000203777777056665646578026e6c0000010001c0100002000100015180000c04646e73310471776562c016c0100002000100015180000704646e7332c02fc02a00010001000151800004d994ac0cc04200010001000151800004d5c42f6c 44380 0142000000010000000000000477697368026e6c0000ff0001 0142800000010000000300020477697368026e6c0000ff0001c00c0002000100015180000f04616e73310774697363616c69c011c00c0002000100015180000704616e7332c02ac00c0002000100015180001404616e73330a74697363616c696e657402626500c02500010001000151800004c3f14d38c04000010001000151800004c3f13325 44381 1f1600000001000000000000077765626d61696c03777873026e6c0000010001 1f1680000001000000030003077765626d61696c03777873026e6c0000010001c01400020001000151800007046e733038c014c01400020001000151800007046e733039c014c01400020001000151800006036e7334c014c02c00010001000151800004c3790128c03f00010001000151800004c3790143c05200010001000151800004d5ef9a65 44382 5d12000000010000000000000866616c6c6261636b08767575727765726b026e6c0000010001 5d12800000010000000300010866616c6c6261636b08767575727765726b026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 44383 9b370000000100000000000003777777047573686e026e6c0000010001 9b378000000100000002000003777777047573686e026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c02d 44384 000828000001000200000000026e6c00000600010f57533031352d64616e69656c6c657304636f72700968617a6c65776f6f64026e6c00000500fe000000000000c01400010001000000000004c297cb0e 0008a8040000000000000000 44385 186a000000010000000000000d6963702d736f6c7574696f6e73026e6c00000f0001 186a800000010000000200000d6963702d736f6c7574696f6e73026e6c00000f0001c00c00020001000151800010036e73310977696e646f74636f6dc01ac00c00020001000151800006036e7332c032 44386 09f10000000100000000000003777777026c31026e6c0000010001 09f18000000100000002000003777777026c31026e6c0000010001c0100002000100015180000d036e7333036b706e036e657400c01000020001000151800006036e7334c02b 44387 799f0000000100000000000003746273026e6c0000010001 799f8000000100000003000103746273026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc010c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c042c024000100010001518000043efa0202 44388 dc3a000000010000000000000e776f6e696e67706172746e657273026e6c00000f0001 dc3a800000010000000200000e776f6e696e67706172746e657273026e6c00000f0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c03a 44389 967f00000001000000000000036e7331086765656e70756e74026e6c00001c0001 967f80000001000000020002036e7331086765656e70756e74026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccd865c03b000100010001518000045054ec34 44390 f3c400000001000000000000036e7331086765656e70756e74026e6c0000260001 f3c480000001000000020002036e7331086765656e70756e74026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d4ccd865c03b000100010001518000045054ec34 44391 57e800000001000000000000036e7332086765656e70756e74026e6c00001c0001 57e880000001000000020002036e7332086765656e70756e74026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d4ccd865c00c000100010001518000045054ec34 44392 619c00000001000000000000036e7332086765656e70756e74026e6c0000260001 619c80000001000000020002036e7332086765656e70756e74026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d00010001000151800004d4ccd865c00c000100010001518000045054ec34 44393 d33f00000001000000000000036e73310864757463686e6574026e6c0000010001 d33f80000001000000020000036e73310864757463686e6574026e6c0000010001c01000020001000151800018036e73310e746865696e7465726e65746f6e65036e657400c01000020001000151800006036e7332c031 44394 98ba00000001000000000000036e73320864757463686e6574026e6c0000010001 98ba80000001000000020000036e73320864757463686e6574026e6c0000010001c01000020001000151800018036e73310e746865696e7465726e65746f6e65036e657400c01000020001000151800006036e7332c031 44395 1fce0000000100000000000006696d6167657306676f6f676c65026e6c0000010001 1fce8000000100000003000006696d6167657306676f6f676c65026e6c0000010001c01300020001000151800010036e733106676f6f676c6503636f6d00c01300020001000151800006036e7332c032c01300020001000151800006036e7333c032 44396 863f00000001000000000000037777770d666c616262657267617374656e026e6c0000010001 863f84030001000000010000037777770d666c616262657267617374656e026e6c0000010001c01e00060001000038400036026e730f646f6d61696e2d7265676973747279c01e0a686f73746d6173746572c0350bf1e540000070800000384000278d0000003840 44397 ef5d00000001000000000000036e7335046372696f026e6c0000010001 ef5d80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44398 492200000001000000000000036e7336046372696f026e6c0000010001 492280000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44399 330d000000010000000000000377777703776562026e6c0000010001 330d800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44400 30a100000001000000000000036e7331046372696f026e6c0000010001 30a180000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44401 5acf00000001000000000000036e7332046372696f026e6c0000010001 5acf80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44402 689400000001000000000000037777770a72656372656174696566026e6c0000010001 689480000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44403 507200000001000000000000036e7331046372696f026e6c0000010001 507280000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44404 8c0400000001000000000000036e7332046372696f026e6c0000010001 8c0480000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44405 4e650000000100000000000003626c3102626c06787334616c6c026e6c0000010001 4e658000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44406 266000000001000000000000046d61696c0a64656c74616c6c6f7964026e6c0000010001 266080000001000000020000046d61696c0a64656c74616c6c6f7964026e6c0000010001c0110002000100015180000d036e7333036b706e036e657400c01100020001000151800006036e7334c034 44407 47680000000100000000000006636861726973026e6c0000010001 47688000000100000002000006636861726973026e6c0000010001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 44408 812f0000000100000000000005646e732d31056c61646f74026e6c0000010001 812f8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44409 81300000000100000000000005646e732d32056c61646f74026e6c0000010001 81308000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44410 dd2a0000000100000000000006485342444e5309485342524142414e54026e6c0000010001 dd2a8000000100000002000206485342444e5309485342524142414e54026e6c0000010001c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01dc00c00010001000151800004913001fac03f00010001000151800004c0576a65 44411 6f1d00000001000000000000037777770c6265726e657273656e6e656e026e6c0000010001 6f1d80000001000000020002037777770c6265726e657273656e6e656e026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 44412 388000000001000000000000037777770c77656263726561746f727334026e6c0000010001 388080000001000000020001037777770c77656263726561746f727334026e6c0000010001c0100002000100015180000d036e733106776964657873c01dc01000020001000151800010036e733206776964657873036e657400c03100010001000151800004d4ccc0fc 44413 5114000000010000000000000377777709666c65766f6c616e64026e6c0000010001 5114800000010000000200000377777709666c65766f6c616e64026e6c0000010001c0100002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c0100002000100015180000d077669312d6e7330026174c039 44414 161100000001000000000000046b77696b09656174736572766572026e6c0000010001 161180000001000000020002046b77696b09656174736572766572026e6c0000010001c01100020001000151800005026e73c011c01100020001000151800006036e7332c011c02f00010001000151800004d4cb0e42c04000010001000151800004d4cb1221 44415 79b400000001000000000000037777770b6f6e6c696e652d64617461026e6c0000010001 79b480000001000000020002037777770b6f6e6c696e652d64617461026e6c0000010001c0100002000100015180000b036e73310431326e73c01cc01000020001000151800006036e7332c034c030000100010001518000043ed44ca0c047000100010001518000043ed4440c 44416 e5e20000000100000000000007697463636f6d70026e6c00000f0001 e5e28000000100000002000207697463636f6d70026e6c00000f0001c00c00020001000151800014036e73310d6d6576657273686f7374696e67c014c00c00020001000151800006036e7332c02cc02800010001000151800004d5c9e8c8c04800010001000151800004d5c9e8c9 44417 325e00000001000000000000037777771166696e616e636574656c65766973696f6e026e6c0000010001 325e80000001000000020002037777771166696e616e636574656c65766973696f6e026e6c0000010001c01000020001000151800011026e730b666163696e676661637473c022c01000020001000151800006036e7332c039c03600010001000151800004d513b013c05300010001000151800004d513b012 44418 b3fc00000001000000000000026763065f6d736463730a6e706363656e7472756d0463766e6e026e6c0000060001 b3fc84030001000000010000026763065f6d736463730a6e706363656e7472756d0463766e6e026e6c0000060001c02600060001000038400036026e730f646f6d61696e2d7265676973747279c0260a686f73746d6173746572c03d0bf1e540000070800000384000278d0000003840 44419 7da100100001000000000001046a616d6f026e6c00000f00010000290800000080000000 7da180000001000000020001046a616d6f026e6c00000f0001c00c0002000100015180000c036e7331036e6c6902646b00c00c00020001000151800006036e7332c0290000291000000000000000 44420 112e0000000100000000000006432d31376e74084b6f6e646172444d026e6c0000060001 112e8403000100000001000006432d31376e74084b6f6e646172444d026e6c0000060001c01c00060001000038400036026e730f646f6d61696e2d7265676973747279c01c0a686f73746d6173746572c0330bf1e540000070800000384000278d0000003840 44421 893b00000001000000000000037777770477656572026e6c0000010001 893b80000001000000020002037777770477656572026e6c0000010001c010000200010001518000110568656e7279086d6574656f636f6ec015c0100002000100015180000e036e733207737572666e6574c015c02900010001000151800004c057690ac04600010001000151800004c0572402 44422 24db000000010000000000000c616e67656c6f2d657374657206746d66776562026e6c0000010001 24db800000010000000200000c616e67656c6f2d657374657206746d66776562026e6c0000010001c01900020001000151800011056c656d6f6e0571696e6970036e657400c01900020001000151800007046c696d65c03a 44423 f709000000010000000000000966697265666c696573026e6c00000f0001 f709800000010000000200020966697265666c696573026e6c00000f0001c00c0002000100015180000b036e733104656e6f6dc016c00c00020001000151800006036e7332c02ec02a00010001000151800004d87a0479c04100010001000151800004d86296b6 44424 2db9000000010000000000000670726f646973056e76776d6e026e6c0000010001 2db9800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 44425 3bf90000000100000000000007747067706f7374026e6c00000f0001 3bf98000000100000002000207747067706f7374026e6c00000f0001c00c0002000100015180000e036e733207737570706f7274c014c00c00020001000151800006036e7334c02cc02800010001000151800004c372e7c8c04200010001000151800004c372e6fe 44426 c0ba0000000100000000000007706f6f74657273026e6c00000f0001 c0ba8000000100000003000307706f6f74657273026e6c00000f0001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec014c00c00020001000151800006036e7331c031c00c00020001000151800006036e7332c031c02800010001000151800004d42d2005c04600010001000151800004d42d2003c05800010001000151800004d42d2103 44427 0d6000000001000000000000046e65777306697474707562026e6c0000010001 0d6080000001000000020001046e65777306697474707562026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02c00010001000151800004c14fcc01 44428 30760000000100000000000003777777086d6574656f636f6e026e6c0000010001 30768000000100000003000303777777086d6574656f636f6e026e6c0000010001c010000200010001518000080568656e7279c010c010000200010001518000090670616c6f6d61c010c0100002000100015180000e036e733207737572666e6574c019c02d00010001000151800004c057690ac04100010001000151800004c057690bc05600010001000151800004c0572402 44429 056800000001000000000000046e65777306697474707562026e6c0000010001 056880000001000000020001046e65777306697474707562026e6c0000010001c01100020001000151800005026e73c011c0110002000100015180000b026e73026e6c036e657400c02c00010001000151800004c14fcc01 44430 9f7900000001000000000000037777770b677265656e646972656374026e6c0000010001 9f7980000001000000020000037777770b677265656e646972656374026e6c0000010001c01000020001000151800018036e73310e6e6574776f726b696e6734616c6c03636f6d00c01000020001000151800018036e73320e6e6574776f726b696e6734616c6c036e657400 44431 a39100000001000000000000024e530a444f4244454e48414147024e4c0000010001 a39180000001000000020002024e530a444f4244454e48414147024e4c0000010001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01ac00c00010001000151800004c05706f0c03c00010001000151800004c0576a65 44432 0abd000000010000000000000a7765627265706f72747306677265636f6d026e6c0000010001 0abd800000010000000300020a7765627265706f72747306677265636f6d026e6c0000010001c0170002000100015180000d036e733106776964657873c01ec01700020001000151800010036e733206776964657873036e657400c01700020001000151800006036e7333c036c03200010001000151800004d4ccc0fcc067000100010001518000043efa0703 44433 bebf0000000100000000000003777777066d6174757265026e6c0000010001 bebf8000000100000002000203777777066d6174757265026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c017c01000020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad41 44434 cb6a00000001000000000000037777770c76657277656e2d66696c6d73026e6c0000010001 cb6a80000001000000020000037777770c76657277656e2d66696c6d73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c034 44435 1fa400000001000000000000046d61696c03777873026e6c0000010001 1fa480000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 44436 338600000001000000000000037777770b72696a6b736d757365756d026e6c0000010001 338680000001000000020000037777770b72696a6b736d757365756d026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c034 44437 2f0c000000010000000000000670726f646973056e76776d6e026e6c0000010001 2f0c800000010000000200020670726f646973056e76776d6e026e6c0000010001c0130002000100015180000c036e73310563736e6574c019c01300020001000151800006036e7332c031c02d00010001000151800004c2451012c04500010001000151800004c2451212 44438 c1c2000000010000000000000661736f706f73026e6c00000f0001 c1c2800000010000000200000661736f706f73026e6c00000f0001c00c00020001000151800010036e7331066576736f6674036e657400c00c00020001000151800006036e7332c02b 44439 f821000000010000000000000a6970353033636430353905737065656406706c616e6574026e6c0000010001 f821800000010000000300030a6970353033636430353905737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 44440 11cc000000010000000000000377777707696e74656e7a65026e6c0000010001 11cc800000010000000300010377777707696e74656e7a65026e6c0000010001c0100002000100015180000e026e7308767575727765726bc018c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04ac02c000100010001518000043efa0202 44441 33c8000000010000000000000a77326b736572766572310970726b766477696c64026e6c0000060001 33c8840300010000000100000a77326b736572766572310970726b766477696c64026e6c0000060001c02100060001000038400036026e730f646f6d61696e2d7265676973747279c0210a686f73746d6173746572c0380bf1e540000070800000384000278d0000003840 44442 4ec6000000010000000000000b76616c6b656e686f7273740476616c6b026e6c00000f0001 4ec6800000010000000200020b76616c6b656e686f7273740476616c6b026e6c00000f0001c01800020001000151800012026e730c6d65676170726f7669646572c01dc01800020001000151800006036e7332c034c0310001000100015180000450474002c04f0001000100015180000450474102 44443 e3860000000100000000000003777777086d74726565787878026e6c0000010001 e3868000000100000002000003777777086d74726565787878026e6c0000010001c01000020001000151800013036e7331097669727475616c787303636f6d00c01000020001000151800006036e7332c031 44444 62c728000001000200000000026e6c00000600010a77326b736572766572310970726b766477696c64026e6c00000500fe000000000000c014000100010000000000040a000001 62c7a8040000000000000000 44445 09ce00000001000000000000057473757275026e6c0000010001 09ce80000001000000020001057473757275026e6c0000010001c00c0002000100015180000a036e733303777873c012c00c00020001000151800006036e7334c02ac03c00010001000151800004d5ef9a65 44446 2100000000010000000000000974656c656b6162656c026e6c00000f0001 2100800000010000000200020974656c656b6162656c026e6c00000f0001c00c0002000100015180000a036e733103757063c016c00c0002000100015180000e046e733032066368656c6c6fc016c02a00010001000151800004d48e1c42c04000010001000151800004d4534483 44447 b0600010000100000000000103666c79036b6c6d026e6c00000100010000290800000080000000 b0608000000100000002000203666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab1550120000291000000000000000 44448 000000007002faf089aa00000204055001010402 000080010000000000000000 44449 d8300010000100000000000103666c79036b6c6d026e6c00002600010000290800000080000000 d8308000000100000002000203666c79036b6c6d026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab1550120000291000000000000000 44450 661500000001000000000000056961656876026e6c00000f0001 661580000001000000020002056961656876026e6c00000f0001c00c00020001000151800012036e73310b7669616e6574776f726b73c012c00c00020001000151800006036e7332c02ac02600010001000151800004d43d0f08c04400010001000151800004d43d19e2 44451 b89059d55010ff009f840000000000000000 b890d9d40000000000000000 44452 82e8000000010000000000000377777710666f726d756c6172696a7363686f6f6c026e6c0000010001 82e8800000010000000200020377777710666f726d756c6172696a7363686f6f6c026e6c0000010001c0100002000100015180000f026e7309656174736572766572c021c01000020001000151800006036e7332c038c03500010001000151800004d4cb0e42c05000010001000151800004d4cb1221 44453 b89059d55018ff00bd6e000000927286000000010001000000000f313436303238383838303635382d330000f900010f313436303238383838303635382d330000f900ff00000000005603677373096d6963726f736f667403636f6d00403b002b403c51ab0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 b890d9d40000000000000000 44454 8bc90000000100000000000003777777087175616474696572026e6c0000010001 8bc98000000100000002000203777777087175616474696572026e6c0000010001c0100002000100015180000f036e73310864696d6d65646961c019c01000020001000151800006036e7332c031c02d000100010001518000043eddda10c048000100010001518000043eb1e4dc 44455 a94600000001000000000000036e733109666972737466696e64026e6c0000010001 a94680000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44456 a94700000001000000000000036e733209666972737466696e64026e6c0000010001 a94780000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44457 b89059e35011fef29eef0000000000000000 b890d9e40000000000000000 44458 000000007002faf08e5d00000204055001010402 000080010000000000000000 44459 bcee00000001000000000000037777771062726162616e7462756e67616c6f7773026e6c0000010001 bcee80000001000000020002037777771062726162616e7462756e67616c6f7773026e6c0000010001c01000020001000151800012026e730c686f6c696461796d65646961c021c01000020001000151800006036e7333c038c035000100010001518000049265424dc053000100010001518000045054ebbf 44460 dc6600000001000000000000037777770c616d61746575726c696e6b73026e6c0000010001 dc6680000001000000020000037777770c616d61746575726c696e6b73026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c034 44461 8e9600000001000000000000036339380e63656e747572696f6e2d616b6b75026e6c0000010001 8e9680000001000000020001036339380e63656e747572696f6e2d616b6b75026e6c0000010001c010000200010001518000130b737061726373657276657204706c6578c01fc0100002000100015180000b026e73026e6c036e657400c03300010001000151800004c1439a0a 44462 b89059e45010fef29eee0000000000000000 b890d9e40000000000000000 44463 b89138d85010ff00c5330000000000000000 b891b8d40000000000000000 44464 b89138d85018ff00a8dc00000092adc8000000010001000000000f313436303238383838303635382d320000f900010f313436303238383838303635382d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b002b403c51ab0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 b891b8d40000000000000000 44465 b89138e65011fef2c49e0000000000000000 b891b8e40000000000000000 44466 000000007002faf0622900000204055001010402 000080010000000000000000 44467 b6ca01000001000000000000036e73310a6d756c74696b6162656c026e6c0000010001 b6ca81000001000000030002036e73310a6d756c74696b6162656c026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c0001000100015180000450f2e002c03d0001000100015180000450f2e006 44468 b89138e75010fef2c49d0000000000000000 b891b8e40000000000000000 44469 b893d5bc5010ff00fc180000000000000000 44470 a94900000001000000000000036e733109666972737466696e64026e6c0000010001 a94980000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44471 a94a00000001000000000000036e733209666972737466696e64026e6c0000010001 a94a80000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44472 da7800000001000000000000036e7335046372696f026e6c0000010001 da7880000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44473 5e9500000001000000000000036e7336046372696f026e6c0000010001 5e9580000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44474 b15f000000010000000000000377777703776562026e6c0000010001 b15f800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44475 b893d5bc5018ff004d31000000924059000000010001000000000f313436303238383838303635382d320000f900010f313436303238383838303635382d320000f900ff00000000005603677373096d6963726f736f667403636f6d00403b002b403c51ab0003000000334e544c4d535350000100000097b208e0090009002a0000000a000a002000000057324b5345525645523150524b564457494c440000 44476 7e8000000001000000000000036e73310c62656472696a76656e776562026e6c00001c0001 7e8080000001000000020002036e73310c62656472696a76656e776562026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d90867fec03f00010001000151800004c1ad2bfe 44477 046f00000001000000000000036e73310c62656472696a76656e776562026e6c0000260001 046f80000001000000020002036e73310c62656472696a76656e776562026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d90867fec03f00010001000151800004c1ad2bfe 44478 b8de00000001000000000000036e73320c62656472696a76656e776562026e6c00001c0001 b8de80000001000000020002036e73320c62656472696a76656e776562026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03100010001000151800004d90867fec00c00010001000151800004c1ad2bfe 44479 1eb700000001000000000000036e73320c62656472696a76656e776562026e6c0000260001 1eb780000001000000020002036e73320c62656472696a76656e776562026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc03100010001000151800004d90867fec00c00010001000151800004c1ad2bfe 44480 454100000001000000000000036e7331046372696f026e6c0000010001 454180000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44481 a97d00000001000000000000036e7332046372696f026e6c0000010001 a97d80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44482 aba700000001000000000000037777770a72656372656174696566026e6c0000010001 aba780000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44483 7687000000010000000000000631326d6f7665026e6c0000010001 7687800000010000000300020631326d6f7665026e6c0000010001c00c0002000100015180000f04616e73310774697363616c69c013c00c0002000100015180000704616e7332c02cc00c0002000100015180001404616e73330a74697363616c696e657402626500c02700010001000151800004c3f14d38c04200010001000151800004c3f13325 44484 f95e0000000100000000000008717569636b6e6574026e6c00000f0001 f95e8000000100000003000208717569636b6e6574026e6c00000f0001c00c00020001000151800011036e73310a6d756c74696b6162656cc015c00c00020001000151800006036e7332c02dc00c00020001000151800014036e73300a6d756c74696b6162656c036e657400c0290001000100015180000450f2e002c0460001000100015180000450f2e006 44485 f6290000000100000000000003666c79036b6c6d026e6c0000010001 f6298000000100000002000103666c79036b6c6d026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 44486 b893d5ca5011fef2fb830000000000000000 44487 4a740000000100000000000003666c79036b6c6d026e6c0000260001 4a748000000100000002000103666c79036b6c6d026e6c0000260001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c02800010001000151800004ab155012 44488 40ec000000010000000000000763656e74726963026e6c00000f0001 40ec800000010000000200000763656e74726963026e6c00000f0001c00c0002000100015180000d036e7331036b706e036e657400c00c00020001000151800006036e7332c02c 44489 b893d5cb5010fef2fb820000000000000000 44490 125000000001000000000000046a616d6f026e6c00000f0001 125080000001000000020000046a616d6f026e6c00000f0001c00c0002000100015180000c036e7331036e6c6902646b00c00c00020001000151800006036e7332c029 44491 c59500000001000000000000036e7331066974686f7374026e6c0000010001 c59580000001000000020002036e7331066974686f7374026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5852a55c03900010001000151800004d5852a64 44492 c6e400000001000000000000037777770668617469626f026e6c0000010001 c6e480000001000000030001037777770668617469626f026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 44493 13b1000000010000000000000a7374617274726176656c026e6c0000010001 13b1800000010000000200020a7374617274726176656c026e6c0000010001c00c00020001000151800009026e73036f6b65c017c00c00020001000151800006036e7332c02ec02b00010001000151800004c13acc3bc04000010001000151800004c13acc27 44494 35500000000100000000000006535441544f5208524553454152434803505454024e4c0000010001 35508000000100000002000006535441544f5208524553454152434803505454024e4c0000010001c01c0002000100015180000d03646e73036b706e03636f6d00c01c0002000100015180000d036e7332036b706e036e657400 44495 8dfe000000010000000000000b6e6f64652d632d66346537056132303030026e6c0000010001 8dfe800000010000000300020b6e6f64652d632d66346537056132303030026e6c0000010001c01800020001000151800006036e7331c018c01800020001000151800010036e733109756e69736f75726365c01ec01800020001000151800006036e7332c018c032000100010001518000043e6c0141c060000100010001518000043e6c0142 44496 e6960000000100000000000003777777056f706c6f6f026e6c0000010001 e6968000000100000003000303777777056f706c6f6f026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc016c0100002000100015180000704646e7332c02fc0100002000100015180000704646e7333c02fc02a00010001000151800004d44fe803c04400010001000151800004c3f5c782c05700010001000151800004d44ff303 44497 373e000000010000000000000561636b6572026e6c00001c0001 373e800000010000000200000561636b6572026e6c00001c0001c00c00020001000151800015026e730c776f726c64686f7374696e67036f726700c00c00020001000151800008026e73026175c029 44498 6c7700000001000000000000036e73310862657374686f7374026e6c0000010001 6c7780000001000000020002036e73310862657374686f7374026e6c0000010001c0100002000100015180000e036e733107736b616e646e73c019c01000020001000151800006036e7332c031c02d00010001000151800004d9aa1271c04700010001000151800004d9aa1272 44499 5c8400000001000000000000036e73320862657374686f7374026e6c0000010001 5c8480000001000000020002036e73320862657374686f7374026e6c0000010001c0100002000100015180000e036e733107736b616e646e73c019c01000020001000151800006036e7332c031c02d00010001000151800004d9aa1271c04700010001000151800004d9aa1272 44500 6a21000000010000000000000377777718726f746172792d6a6575676475697477697373656c696e67026e6c0000010001 6a21800000010000000200020377777718726f746172792d6a6575676475697477697373656c696e67026e6c0000010001c0100002000100015180000a036e733103696166c029c01000020001000151800006036e7332c041c03d000100010001518000045059e040c053000100010001518000045059ee03 44501 bd890000000100000000000009677261706861726d61026e6c00000f0001 bd898000000100000002000209677261706861726d61026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 44502 658c0000000100000000000005646e732d31056c61646f74026e6c0000010001 658c8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44503 cec40000000100000000000003626c3102626c06787334616c6c026e6c0000010001 cec48000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44504 8f810000000100000000000005646e732d32056c61646f74026e6c0000010001 8f818000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44505 089600000001000000000000086174617261786961026e6c0000010001 089680000001000000020000086174617261786961026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c02f 44506 8ac9000000010000000000000d36322d3137372d3139362d333007626265796f6e64026e6c0000010001 8ac9800000010000000200020d36322d3137372d3139362d333007626265796f6e64026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800006036e7332c01ac036000100010001518000043eb1900bc048000100010001518000043eb19002 44507 84e90000000100000000000005646e732d31056c61646f74026e6c0000010001 84e98000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44508 84ea0000000100000000000005646e732d32056c61646f74026e6c0000010001 84ea8000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44509 1f20000000010000000000000765617379626974026e6c0000010001 1f20800000010000000300010765617379626974026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc014c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c046c028000100010001518000043efa0202 44510 0e0000100001000000000001036e7331046e696f7a026e6c00000100010000290800000000000000 0e0080000001000000030003036e7331046e696f7a026e6c0000010001c01000020001000151800002c00cc01000020001000151800008056c69776562c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c000100010001518000049101d228c037000100010001518000049101d21e0000291000000000000000 44511 838000100001000000000001056c69776562046e696f7a026e6c00000100010000290800000000000000 838080000001000000030003056c69776562046e696f7a026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800002c00cc01200020001000151800014036e73300a6d756c74696b6162656c036e657400c02b000100010001518000049101d228c00c000100010001518000049101d21e0000291000000000000000 44512 0f400000000100000000000003637769026e6c00000f0001 0f408000000100000002000203637769026e6c00000f0001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc02400010001000151800004c010bf08c03600010001000151800004c010bf23 44513 976c000000010000000000000377777705706f6f7374026e6c0000010001 976c800000010000000200020377777705706f6f7374026e6c0000010001c01000020001000151800012036e73310b7669616e6574776f726b73c016c01000020001000151800006036e7332c02ec02a00010001000151800004d43d0f08c04800010001000151800004d43d19e2 44514 f51d0000000100000000000003777777087072656e6574616c026e6c0000010001 f51d8000000100000003000303777777087072656e6574616c026e6c0000010001c01000020001000151800010036e7331096d61726b6772616166c019c01000020001000151800006036e7332c031c01000020001000151800006036e7333c031c02d00010001000151800004c3f13ceec04900010001000151800004c372eb43c05b000100010001518000043e320e8f 44515 c24300000001000000000000037777770a31386a61617267696473026e6c0000010001 c24380000001000000020002037777770a31386a61617267696473026e6c0000010001c0100002000100015180000b036e7331046e732d31c01bc01000020001000151800006036e7332c033c02f000100010001518000045045a0cdc04600010001000151800004d4cceec8 44516 9014000000010000000000000b736373766f6c656e64616d026e6c00000f0001 9014800000010000000200020b736373766f6c656e64616d026e6c00000f0001c00c00020001000151800010036e7331096c6971756964776562c018c00c00020001000151800006036e7332c030c02c0001000100015180000451ad0716c0480001000100015180000451ad0717 44517 eee000000001000000000000037777770e6d6172697469656d6d757365756d026e6c0000010001 eee080000001000000020002037777770e6d6172697469656d6d757365756d026e6c0000010001c0100002000100015180000f036e733108696e7465726d6178c01fc01000020001000151800006036e7332c037c03300010001000151800004505fa002c04e00010001000151800004505fac02 44518 8362000000010000000000000377777705626f6b6f65026e6c0000010001 8362800000010000000200020377777705626f6b6f65026e6c0000010001c01000020001000151800006036e7333c010c01000020001000151800006036e7334c010c02a00010001000151800004d554b1dcc03c00010001000151800004d5540479 44519 c83b0000000100000000000003646173026e6c00000f0001 c83b8000000100000003000303646173026e6c00000f0001c00c00020001000151800010036e7331096d61726b6772616166c010c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028c02400010001000151800004c3f13ceec04000010001000151800004c372eb43c052000100010001518000043e320e8f 44520 6da20000000100000000000003777777093275686f7374696e67026e6c0000010001 6da28000000100000002000203777777093275686f7374696e67026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c02e000100010001518000043ed45d0cc040000100010001518000043ed45d0d 44521 20db000000010000000000000773657276657231087369746574726171026e6c0000010001 20db800000010000000200000773657276657231087369746574726171026e6c0000010001c0140002000100015180000f036e733105796b6f6f6e036e657400c01400020001000151800006036e7332c035 44522 d1e7001000010000000000010663616e646561026e6c00000f00010000290800000080000000 d1e7800000010000000300040663616e646561026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b0000291000000000000000 44523 6d20000000010000000000000377777703767665026e6c0000010001 6d20800000010000000300030377777703767665026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02800010001000151800004c14e9e14c03a00010001000151800004c14e9e22c04c00010001000151800004d4ce7a43 44524 be1200100001000000000001046e7330310a6c696e6b736572766572026e6c00000100010000290800000080000000 be1280000001000000020003046e7330310a6c696e6b736572766572026e6c0000010001c01100020001000151800015036e73310e6d656761626974686f7374696e67c01cc01100020001000151800006036e7332c034c0300001000100015180000452c04516c0510001000100015180000452c045420000291000000000000000 44525 2f8a00100001000000000001046e7330320a6c696e6b736572766572026e6c00000100010000290800000080000000 2f8a80000001000000020003046e7330320a6c696e6b736572766572026e6c0000010001c01100020001000151800015036e73310e6d656761626974686f7374696e67c01cc01100020001000151800006036e7332c034c0300001000100015180000452c04516c0510001000100015180000452c045420000291000000000000000 44526 244400000001000000000000037777770b737765657461646f6e6973026e6c0000010001 244480000001000000020002037777770b737765657461646f6e6973026e6c0000010001c0100002000100015180000c04646e73310470696e73c01cc0100002000100015180000704646e7332c035c03000010001000151800004d9c26101c04800010001000151800004d9c26002 44527 8ef100000001000000000000066d61737465720364746f07747564656c6674026e6c0000010001 8ef180000001000000050005066d61737465720364746f07747564656c6674026e6c0000010001c01700020001000151800006036e7331c017c01700020001000151800006036e7332c017c01700020001000151800009036e7331026574c017c0170002000100015180000d07647574746e636202746ec017c0170002000100015180000e036e733107737572666e6574c01fc0330001000100015180000482a1b401c0450001000100015180000482a1b441c0570001000100015180000482a12111c06c0001000100015180000482a1bc8cc08500010001000151800004c0576a65 44528 2ec7000000010000000000000b77617469736d696a6e6970026e6c0000010001 2ec7800000010000000200020b77617469736d696a6e6970026e6c0000010001c00c0002000100015180000e036e733107756e6974656368c018c00c00020001000151800006036e7332c030c02c00010001000151800004511121f8c0460001000100015180000451112184 44529 bdba000000010000000000000c727363726f7474657264616d026e6c00000f0001 bdba800000010000000200000c727363726f7474657264616d026e6c00000f0001c00c00020001000151800010026e730777697265687562036e657400c00c00020001000151800006036e7332c030 44530 93e7000000010000000000000b6d656761737570706f7274026e6c00000f0001 93e7800000010000000200000b6d656761737570706f7274026e6c00000f0001c00c00020001000151800013026e730a6e61616d736572766572036e657400c00c00020001000151800006036e7331c02f 44531 64a5000000010000000000000377777708666f746f70726574026e6c0000010001 64a5800000010000000300020377777708666f746f70726574026e6c0000010001c0100002000100015180000d036e733106776964657873c019c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c031c02d00010001000151800004d4ccc0fcc062000100010001518000043efa0703 44532 7f9f000000010000000000000a6970353033633363616405737065656406706c616e6574026e6c0000010001 7f9f800000010000000300030a6970353033633363616405737065656406706c616e6574026e6c0000010001c01d0002000100015180000b046e73303803777873c024c01d00020001000151800007046e733039c03dc01d00020001000151800006036e7334c03dc03800010001000151800004c3790128c04f00010001000151800004c3790143c06200010001000151800004d5ef9a65 44533 507400000001000000000000037777770d7469636b6574747261636b6572026e6c0000010001 507480000001000000020002037777770d7469636b6574747261636b6572026e6c0000010001c0100002000100015180001103646e730a636f6e63657074736661c01ec0100002000100015180001004646e733208636f6e6365707473c01ec03200010001000151800004d5c51c03c04f00010001000151800004d5c51e1c 44534 60f4000000010000000000000377777703766568026e6c0000010001 60f4800000010000000200000377777703766568026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c02e 44535 42dc00000001000000000000056c6f76656e026e6c00000f0001 42dc80000001000000020002056c6f76656e026e6c00000f0001c00c0002000100015180000b036e73310477656233c012c00c00020001000151800006036e7332c02ac02600010001000151800004d436240ec03d00010001000151800004c2b262ef 44536 a4c5000000010000000000000377777709737065656c7370656c026e6c0000010001 a4c5800000010000000200000377777709737065656c7370656c026e6c0000010001c01000020001000151800018036e73330e666c6578776562686f7374696e6703636f6d00c01000020001000151800006036e7334c032 44537 f0d700000001000000000000036e733503777873026e6c0000010001 f0d780000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44538 aed500000001000000000000036e733503777873026e6c0000260001 aed580000001000000030003036e733503777873026e6c0000260001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44539 9dfa0000000100000000000006736572766572066b6f72707574026e6c0000060001 9dfa8403000100000001000006736572766572066b6f72707574026e6c0000060001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 44540 0d7000000001000000000000037777770769727361756e61026e6c0000010001 0d7080000001000000020002037777770769727361756e61026e6c0000010001c01000020001000151800014036e73310d6d6576657273686f7374696e67c018c01000020001000151800006036e7332c030c02c00010001000151800004d5c9e8c8c04c00010001000151800004d5c9e8c9 44541 f4970000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 f4978000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 44542 6c98000000010000000000000a6777656264657369676e026e6c0000ff0001 6c98800000010000000200020a6777656264657369676e026e6c0000ff0001c00c0002000100015180000f026e7309656174736572766572c017c00c00020001000151800006036e7332c02ec02b00010001000151800004d4cb0e42c04600010001000151800004d4cb1221 44543 ccf800000001000000000000026e730e64617461636f6e686f7374696e67026e6c0000010001 ccf880000001000000020002026e730e64617461636f6e686f7374696e67026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d43d2934c04000010001000151800004d468d143 44544 46c600000001000000000000036e73320e64617461636f6e686f7374696e67026e6c0000010001 46c680000001000000020002036e73320e64617461636f6e686f7374696e67026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc03300010001000151800004d43d2934c00c00010001000151800004d468d143 44545 17c500000001000000000000046e7330310a6c696e6b736572766572026e6c0000010001 17c580000001000000020002046e7330310a6c696e6b736572766572026e6c0000010001c01100020001000151800015036e73310e6d656761626974686f7374696e67c01cc01100020001000151800006036e7332c034c0300001000100015180000452c04516c0510001000100015180000452c04542 44546 5d6d00000001000000000000046e7330320a6c696e6b736572766572026e6c0000010001 5d6d80000001000000020002046e7330320a6c696e6b736572766572026e6c0000010001c01100020001000151800015036e73310e6d656761626974686f7374696e67c01cc01100020001000151800006036e7332c034c0300001000100015180000452c04516c0510001000100015180000452c04542 44547 dc5500000001000000000000036e733109756e69736f75726365026e6c0000010001 dc5580000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 44548 885528000001000200000000026e6c000006000106736572766572066b6f72707574026e6c00000500fe000000000000c01400010001000000000004c0a80003 8855a8040000000000000000 44549 3534000000010000000000000663616e646561026e6c00000f0001 3534800000010000000300030663616e646561026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c013c00c0002000100015180000a076e736175746832c02fc00c0002000100015180000a076e736175746833c02fc02700010001000151800004d5880c33c04100010001000151800004d5880c3bc05700010001000151800004d4ccc00b 44550 656c00000001000000000000054d4f4c454e0350434d026e6c0000010001 656c80000001000000020001054d4f4c454e0350434d026e6c0000010001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 44551 c9c700000001000000000000054d4f4c454e0350434d026e6c00001c0001 c9c780000001000000020001054d4f4c454e0350434d026e6c00001c0001c01200020001000151800005026e73c012c0120002000100015180000b026e73026e6c036e657400c02a00010001000151800004c143e6dc 44552 53e800000001000000000000037777770666616e2d6f66026e6c0000010001 53e880000001000000030001037777770666616e2d6f66026e6c0000010001c0100002000100015180000e026e7308767575727765726bc017c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c049c02b000100010001518000043efa0202 44553 33e100000001000000000000036e7331046e696f7a026e6c0000010001 33e180000001000000030002036e7331046e696f7a026e6c0000010001c01000020001000151800002c00cc01000020001000151800008056c69776562c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c00c000100010001518000049101d228c037000100010001518000049101d21e 44554 59f5000000010000000000000b6576656e656d656e74656e09756974736c6167656e026e6c0000010001 59f5800000010000000300010b6576656e656d656e74656e09756974736c6167656e026e6c0000010001c0180002000100015180000e026e7308767575727765726bc022c01800020001000151800012036e733208767575727765726b036e657400c01800020001000151800006036e7333c054c036000100010001518000043efa0202 44555 2c4801000001000000000000056b6f726e6f026e6c00000f000100 2c4885030001000000010000056b6f726e6f026e6c00000f0001c01200060001000038400036026e730f646f6d61696e2d7265676973747279c0120a686f73746d6173746572c0290bf1e540000070800000384000278d0000003840 44556 00000000700240005b1100000204055001010402 000080010000000000000000 44557 55fe00000001000000000000036e733303777873026e6c0000010001 55fe80000001000000030003036e733303777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44558 226d0000000100000000000003777777107a656e74726f7079706172746e657273026e6c0000010001 226d8000000100000002000003777777107a656e74726f7079706172746e657273026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c03b 44559 00bf000000010000000000000377777709676f2d63656e747265026e6c0000010001 00bf800000010000000200020377777709676f2d63656e747265026e6c0000010001c0100002000100015180000e036e733107686f7477697265c01ac01000020001000151800006036e7332c032c02e0001000100015180000451044b03c0480001000100015180000451044bc8 44560 19d000000001000000000000037777770f617263686974656374656e7765726b026e6c0000010001 19d080000001000000020002037777770f617263686974656374656e7765726b026e6c0000010001c0100002000100015180000c026e7306787334616c6cc020c01000020001000151800006036e7332c037c03400010001000151800004c26d0642c04c00010001000151800004c26d0963 44561 6e3400000001000000000000067370642d6f67026e6c0000010001 6e3480000001000000020002067370642d6f67026e6c0000010001c00c0002000100015180000a036e733103777332c013c00c00020001000151800006036e7332c02bc027000100010001518000045054e5f3c03d000100010001518000045054e5f4 44562 683b000000010000000000000c756e6978616476616e6365640b7669616e6574776f726b73026e6c0000010001 683b800000010000000200020c756e6978616476616e6365640b7669616e6574776f726b73026e6c0000010001c01900020001000151800006036e7331c019c01900020001000151800006036e7332c019c03900010001000151800004d43d0f08c04b00010001000151800004d43d19e2 44563 661700000001000000000000037777770b616466697265776f726b73026e6c0000010001 661780000001000000020002037777770b616466697265776f726b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 44564 73c60000000100000000000003706f7003777873026e6c0000010001 73c68000000100000003000303706f7003777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44565 dfab00000001000000000000076865696a73656e026e6c0000010001 dfab80000001000000020002076865696a73656e026e6c0000010001c00c0002000100015180000f026e7309656174736572766572c014c00c00020001000151800006036e7332c02bc02800010001000151800004d4cb0e42c04300010001000151800004d4cb1221 44566 23ab000000010000000000000468747470077765626e743034067365727665720477656233026e6c0000010001 23ab800000010000000200020468747470077765626e743034067365727665720477656233026e6c0000010001c02000020001000151800006036e7331c020c02000020001000151800006036e7332c020c03900010001000151800004d436240ec04b00010001000151800004c2b262ef 44567 5cc40000000100000000000007686f73746e6574026e6c00000f0001 5cc48000000100000002000207686f73746e6574026e6c00000f0001c00c00020001000151800010036e733109686f73746e65746276c014c00c00020001000151800006036e7332c02cc0280001000100015180000451113264c04400010001000151800004d5c42851 44568 d3a500000001000000000000037777770f617263686974656374656e7765726b026e6c0000010001 d3a580000001000000020002037777770f617263686974656374656e7765726b026e6c0000010001c0100002000100015180000c026e7306787334616c6cc020c01000020001000151800006036e7332c037c03400010001000151800004c26d0642c04c00010001000151800004c26d0963 44569 3f1b0000000100000000000003777777076879756e646169026e6c026e6c0000010001 3f1b8403000100000001000003777777076879756e646169026e6c026e6c0000010001c01b00060001000038400036026e730f646f6d61696e2d7265676973747279c01b0a686f73746d6173746572c0320bf1e540000070800000384000278d0000003840 44570 45a700000001000000000000036e73310d63656e747269636f6e6c696e65026e6c0000010001 45a780000001000000020002036e73310d63656e747269636f6e6c696e65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d481ec0cc04000010001000151800004d590e63a 44571 b887f30b5018ff0072d80000008ff89a000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afe3d403c4fbd0003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000 44572 40140000000100000000000009696e65742d737276310472616574026e6c0000010001 40148000000100000002000109696e65742d737276310472616574026e6c0000010001c01600020001000151800002c00cc0160002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1430d21 44573 264d00000001000000000000036e733109776570726f76696465026e6c0000010001 264d80000001000000020002036e733109776570726f76696465026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9db5c03c00010001000151800004d5ef9dbe 44574 adfe00000001000000000000036e733109776570726f76696465026e6c0000260001 adfe80000001000000020002036e733109776570726f76696465026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5ef9db5c03c00010001000151800004d5ef9dbe 44575 56ff00000001000000000000036e733209776570726f76696465026e6c0000010001 56ff80000001000000020002036e733209776570726f76696465026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9db5c00c00010001000151800004d5ef9dbe 44576 722800000001000000000000036e733209776570726f76696465026e6c0000260001 722880000001000000020002036e733209776570726f76696465026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e00010001000151800004d5ef9db5c00c00010001000151800004d5ef9dbe 44577 b887f3195011fef29eb50000000000000000 44578 000000007002ff00e15100000204055001010402 000080010000000000000000 44579 b887f31a5010fef29eb40000000000000000 44580 67390000000100000000000005646e732d32056c61646f74026e6c0000010001 67398000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44581 67380000000100000000000005646e732d31056c61646f74026e6c0000010001 67388000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44582 b8971ae65010ff003a240000000000000000 b8979ae40000000000000000 44583 2cf600000001000000000000037777770966656d667573696f6e026e6c0000010001 2cf680000001000000030003037777770966656d667573696f6e026e6c0000010001c01000020001000151800010036e733109656e6368616e746564c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e00010001000151800004d5ef8589c04a00010001000151800004d5ef8593c05c00010001000151800004d5ef8005 44584 b8971ae65018ff00a9f90000008f5656000000010001000000000f313034373937323032303234322d320000f900010f313034373937323032303234322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afe40403c4fc00003000000304e544c4d535350000100000097b208e0060006002a0000000a000a0020000000524f4353455256455232524f435655450000 b8979ae40000000000000000 44585 863700000001000000000000034e533205414d415a45024e4c0000010001 863780000001000000020002034e533205414d415a45024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02a00010001000151800004c26d6d05c00c00010001000151800004d4ccc0f2 44586 b8971af45011fef239920000000000000000 b8979af40000000000000000 44587 000000007002faf06fb40000020405b401010402 000080010000000000000000 44588 81d000000001000000000000037777770b6f6e6c696e652d64617461026e6c0000010001 81d080000001000000020002037777770b6f6e6c696e652d64617461026e6c0000010001c0100002000100015180000b036e73310431326e73c01cc01000020001000151800006036e7332c034c030000100010001518000043ed44ca0c047000100010001518000043ed4440c 44589 121200000001000000000000026e73076e656473746174026e6c0000010001 121280000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 44590 b8971af55010fef239910000000000000000 b8979af40000000000000000 44591 ef4e00000001000000000000036e73320431326e73026e6c0000010001 ef4e80000001000000020002036e73320431326e73026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc029000100010001518000043ed44ca0c00c000100010001518000043ed4440c 44592 e66c00000001000000000000036e73310431326e73026e6c0000010001 e66c80000001000000020002036e73310431326e73026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043ed44ca0c037000100010001518000043ed4440c 44593 083b000000010000000000000970636d7366727430310370636d024e4c0000010001 083b800000010000000200010970636d7366727430310370636d024e4c0000010001c01600020001000151800005026e73c016c0160002000100015180000b026e73026e6c036e657400c02e00010001000151800004c143e6dc 44594 7d2800000001000000000000037777770f64696b6b696564696b6f6e6c696e65026e6c0000010001 7d2880000001000000020000037777770f64696b6b696564696b6f6e6c696e65026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c020c0100002000100015180000805646e732d32c03a 44595 d0840000000100000000000003777777087665726f6e696361026e6c0000010001 d0848000000100000002000203777777087665726f6e696361026e6c0000010001c0100002000100015180000f036e7331086261736971776562c019c01000020001000151800006036e7332c031c02d0001000100015180000452c04516c0480001000100015180000452c04542 44596 221900000001000000000000026e73076e656473746174026e6c0000010001 221980000001000000020002026e73076e656473746174026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7333c00fc00c00010001000151800004d4482615c03900010001000151800004d5c4021d 44597 10f80000000100000000000003777777076265676865796e026e6c0000010001 10f88000000100000002000003777777076265676865796e026e6c0000010001c01000020001000151800012026e7309686f7374696e673475036e657400c01000020001000151800006036e7332c02f 44598 611900000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 611980000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44599 07e900000001000000000000066368656c6c6f026e6c0000010001 07e980000001000000030003066368656c6c6f026e6c0000010001c00c00020001000151800007046e733031c00cc00c00020001000151800007046e733032c00cc00c0002000100015180000a036e733103757063c013c02700010001000151800004d4534482c03a00010001000151800004d4534483c04d00010001000151800004d48e1c42 44600 570d00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 570d80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44601 9e1d00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 9e1d80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44602 4c6e00000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 4c6e80000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44603 be3000000001000000000000026e73067a6f6e6e6574026e6c0000010001 be3080000001000000020002026e73067a6f6e6e6574026e6c0000010001c00f00020001000151800002c00cc00f0002000100015180000e026e7308767575727765726bc016c00c000100010001518000043e3a3204c038000100010001518000043efa0202 44604 69e00000000100000000000006787334616c6c026e6c00000f0001 69e08000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 44605 1cfe0000000100000000000005646e732d31056c61646f74026e6c0000010001 1cfe8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44606 7ee20000000100000000000005646e732d32056c61646f74026e6c0000010001 7ee28000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44607 52bf00000001000000000000037777770d6261626576616e64657765656b026e6c0000010001 52bf80000001000000020002037777770d6261626576616e64657765656b026e6c0000010001c0100002000100015180000b036e7331046e732d31c01ec01000020001000151800006036e7332c036c032000100010001518000045045a0cdc04900010001000151800004d4cceec8 44608 e8c100000001000000000000076d656d62657273096d7966726565776562026e6c0000010001 e8c180000001000000020002076d656d62657273096d7966726565776562026e6c0000010001c0140002000100015180000b036e7331046e732d31c01ec01400020001000151800006036e7332c036c032000100010001518000045045a0cdc04900010001000151800004d4cceec8 44609 5f1500000001000000000000036e7332046372696f026e6c0000010001 5f1580000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44610 7cc400000001000000000000036e7335046372696f026e6c0000010001 7cc480000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44611 ec3e00000001000000000000036e7336046372696f026e6c0000010001 ec3e80000001000000020000036e7336046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44612 16be000000010000000000000867726f626f756d61026e6c00001c0001 16be800000010000000200000867726f626f756d61026e6c00001c0001c00c0002000100015180000f04686e73300774697363616c69c015c00c0002000100015180000704686e7331c02e 44613 69050000000100000000000007736d2d74656368026e6c0000020001 69058403000100000001000007736d2d74656368026e6c0000020001c01400060001000038400036026e730f646f6d61696e2d7265676973747279c0140a686f73746d6173746572c02b0bf1e540000070800000384000278d0000003840 44614 4ae300000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b626973677665726f6c6d65026e6c0000060001 4ae384030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b626973677665726f6c6d65026e6c0000060001c04600060001000038400036026e730f646f6d61696e2d7265676973747279c0460a686f73746d6173746572c05d0bf1e540000070800000384000278d0000003840 44615 6c1b00000001000000000000046d61696c0d62616b6f6e7368697070696e67026e6c0000010001 6c1b80000001000000020001046d61696c0d62616b6f6e7368697070696e67026e6c0000010001c0110002000100015180001007617374657269780577746e6574c01fc0110002000100015180000d0670696361726403647376c01fc03300010001000151800004c36db552 44616 8768000000010000000000000c6876726f6e646572686f7564026e6c0000010001 8768800000010000000200020c6876726f6e646572686f7564026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc019c00c00020001000151800006036e7332c030c02d00010001000151800004c26d0642c04500010001000151800004c26d0963 44617 2fc50000000100000000000003626c3402626c06787334616c6c026e6c0000010001 2fc58000000100000003000203626c3402626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44618 e46c00000001000000000000086d6972726f72656407666c6162626572026e6c0000010001 e46c80000001000000030002086d6972726f72656407666c6162626572026e6c0000010001c0150002000100015180000d036e733106776964657873c01dc01500020001000151800010036e733206776964657873036e657400c01500020001000151800006036e7333c035c03100010001000151800004d4ccc0fcc066000100010001518000043efa0703 44619 83b700000001000000000000086d616e726f6c6c6f026e6c00000f0001 83b780000001000000020002086d616e726f6c6c6f026e6c00000f0001c00c0002000100015180000c036e7331056f72696f6ec015c00c00020001000151800006036e7332c02dc02900010001000151800004c2862282c04100010001000151800004c2862b02 44620 a22500000001000000000000026e73076d696e76656e77026e6c0000010001 a22580000001000000030002026e73076d696e76656e77026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c297be47c03900010001000151800004c297be48 44621 1fad28000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f73697465730b626973677665726f6c6d65026e6c00002100010000025800220000006400580b64632d68756e74736d616e0b626973677665726f6c6d65026e6c00 1fada8040000000000000000 44622 83de00000001000000000000026e73076d696e76656e77026e6c00001c0001 83de80000001000000030002026e73076d696e76656e77026e6c00001c0001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c297be47c03900010001000151800004c297be48 44623 000000007002faf07bee0000020405b401010402 000080010000000000000000 44624 3ca600000001000000000000026e73076d696e76656e77026e6c0000260001 3ca680000001000000030002026e73076d696e76656e77026e6c0000260001c00f00020001000151800002c00cc00f00020001000151800006036e7331c00fc00f0002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c297be47c03900010001000151800004c297be48 44625 fabe0000000100000000000003777777056c6f666172026e6c0000010001 fabe8000000100000003000303777777056c6f666172026e6c0000010001c0100002000100015180000b036e7331046e667261c016c01000020001000151800006036e7332c02ec0100002000100015180000e036e733107737572666e6574c016c02a00010001000151800004c0570196c04100010001000151800004c0570197c05300010001000151800004c0576a65 44626 fbd800000001000000000000036e7331076d696e76656e77026e6c0000010001 fbd880000001000000030002036e7331076d696e76656e77026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c02c00010001000151800004c297be47c00c00010001000151800004c297be48 44627 e0a800000001000000000000036e7331076d696e76656e77026e6c00001c0001 e0a880000001000000030002036e7331076d696e76656e77026e6c00001c0001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c02c00010001000151800004c297be47c00c00010001000151800004c297be48 44628 22a700000001000000000000036e7331076d696e76656e77026e6c0000260001 22a780000001000000030002036e7331076d696e76656e77026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c02c00010001000151800004c297be47c00c00010001000151800004c297be48 44629 b898e9c85010faf006410000000000000000 44630 985000000001000000000000036e733103696467026e6c00001c0001 985080000001000000030003036e733103696467026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 44631 791500000001000000000000036e733103696467026e6c0000260001 791580000001000000030003036e733103696467026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c0001000100015180000451af4646c0360001000100015180000451af4647c04800010001000151800004d5a0fde6 44632 a7f500000001000000000000036e733203696467026e6c00001c0001 a7f580000001000000030003036e733203696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 44633 abea00000001000000000000036e733203696467026e6c0000260001 abea80000001000000030003036e733203696467026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c0280001000100015180000451af4646c00c0001000100015180000451af4647c04800010001000151800004d5a0fde6 44634 04a100000001000000000000036e733303696467026e6c00001c0001 04a180000001000000030003036e733303696467026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 44635 138000000001000000000000036e733303696467026e6c0000260001 138080000001000000030003036e733303696467026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0280001000100015180000451af4646c03a0001000100015180000451af4647c00c00010001000151800004d5a0fde6 44636 9dca00000001000000000000036b726f026e6c00000f0001 9dca80000001000000020002036b726f026e6c00000f0001c00c00020001000151800010066d696e6e6965066f6d726f6570c010c00c0002000100015180000805726f62696ec02bc02400010001000151800004913a1e04c04000010001000151800004913a1a34 44637 295e00000001000000000000036e7331046372696f026e6c0000010001 295e80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44638 e2ce00000001000000000000036e7332046372696f026e6c0000010001 e2ce80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44639 395d000000010000000000000377777703776562026e6c0000010001 395d800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44640 33e800000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 33e880000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 44641 7a3f0000000100000000000003777777097362736f6e6c696e65026e6c0000010001 7a3f8000000100000002000203777777097362736f6e6c696e65026e6c0000010001c0100002000100015180000b036e73310476646e73c01ac01000020001000151800006036e7332c032c02e000100010001518000045117f60bc045000100010001518000045117f60c 44642 406400000001000000000000036e7331046372696f026e6c0000010001 406480000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44643 77e200000001000000000000036e7332046372696f026e6c0000010001 77e280000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44644 159800000001000000000000037777770a72656372656174696566026e6c0000010001 159880000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44645 263600000001000000000000036e7331046372696f026e6c0000010001 263680000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44646 865800000001000000000000034e53320f444f4d41494e2d5245474953545259026e6c00001c0001 865880000001000000030002034e53320f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 44647 8c3200000001000000000000036e7332046372696f026e6c0000010001 8c3280000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44648 61f900000001000000000000024e530f444f4d41494e2d5245474953545259026e6c00001c0001 61f980000001000000030002024e530f444f4d41494e2d5245474953545259026e6c00001c0001c00f00020001000151800002c00cc00f0002000100015180000e036e733107737572666e6574c01fc00f0002000100015180000b026e73026e6c036e657400c00c00010001000151800004c1b09002c04100010001000151800004c0576a65 44649 ba37000000010000000000000377777703776562026e6c0000010001 ba37800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44650 c92c00000001000000000000036e7331046372696f026e6c0000010001 c92c80000001000000020000036e7331046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44651 c52200000001000000000000036e7332046372696f026e6c0000010001 c52280000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44652 dbdc0000000100000000000008686f75736561647303696467026e6c0000010001 dbdc8000000100000003000308686f75736561647303696467026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c02d0001000100015180000451af4646c03f0001000100015180000451af4647c05100010001000151800004d5a0fde6 44653 b50f00000001000000000000036e7332076e65746c616e64026e6c0000010001 b50f80000001000000020002036e7332076e65746c616e64026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c00010001000151800004d9aa2042c00c00010001000151800004d9aa2c06 44654 37f20000000100000000000008686f73746e616d650462696e640000100003 37f28000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 44655 fd990000000100000000000008686f73746e616d650462696e640000100003 fd998000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 44656 04b6000000010000000000000766313031303836057570632d66066368656c6c6f026e6c0000010001 04b6800000010000000300030766313031303836057570632d66066368656c6c6f026e6c0000010001c01a00020001000151800007046e733031c01ac01a00020001000151800007046e733032c01ac01a0002000100015180000a036e733103757063c021c03500010001000151800004d4534482c04800010001000151800004d4534483c05b00010001000151800004d48e1c42 44657 b9a900000001000000000000034e53350f444f4d41494e2d5245474953545259026e6c00001c0001 b9a980000001000000030002034e53350f444f4d41494e2d5245474953545259026e6c00001c0001c01000020001000151800005026e73c010c0100002000100015180000e036e733107737572666e6574c020c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004c1b09002c04500010001000151800004c0576a65 44658 fcb6000000010000000000000b67656c7265766973696f6e026e6c0000ff0001 fcb6800000010000000200000b67656c7265766973696f6e026e6c0000ff0001c00c0002000100015180002007616d312d6e7330026e6c0f7072696f7269747974656c65636f6d036e657400c00c0002000100015180000d077669312d6e7330026174c037 44659 54a600000001000000000000096d756c7469636f7079026e6c00000f0001 54a680000001000000020002096d756c7469636f7079026e6c00000f0001c00c0002000100015180000c036e73310564656d6f6ec016c00c00020001000151800006036e7332c02ec02a00010001000151800004c29f4906c04200010001000151800004c29fb004 44660 54d80000000100000000000008686f73746e616d650462696e640000100003 54d88000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 44661 aaff0000000100000000000004706f7033057175726561026e6c0000010001 aaff8000000100000002000204706f7033057175726561026e6c0000010001c01100020001000151800010036e7331096d6173746572646e73c017c01100020001000151800006036e7332c02fc02b000100010001518000045054f347c047000100010001518000043e94a047 44662 4c720000000100000000000005666f72756d086e65646c696e7578026e6c0000010001 4c728000000100000003000305666f72756d086e65646c696e7578026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800006036e7332c012c01200020001000151800006036e7333c012c02f00010001000151800004d5ef87d2c04100010001000151800004d5ef87d3c05300010001000151800004d5ef8005 44663 142a00000001000000000000037777770c64656c6674636c7573746572026e6c0000010001 142a80000001000000030003037777770c64656c6674636c7573746572026e6c0000010001c010000200010001518000120664672d7376310867656f64656c6674c01dc0100002000100015180000e036e733107737572666e6574c01dc0100002000100015180000a077769672d777331c038c0310001000100015180000491030101c04f00010001000151800004c0576a65c0690001000100015180000491030104 44664 926b000000010000000000000377777709747275636b7765726b026e6c0000010001 926b800000010000000300010377777709747275636b7765726b026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01ac01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04cc02e000100010001518000043efa0202 44665 1d9e00000001000000000000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637309706972616d6964656e026e6c0000060001 1d9e84030001000000010000095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637309706972616d6964656e026e6c0000060001c04e00060001000038400036026e730f646f6d61696e2d7265676973747279c04e0a686f73746d6173746572c0650bf1e540000070800000384000278d0000003840 44666 ed5b28000001000000010000026e6c0000060001095f6b65726265726f73045f7463701744656661756c742d46697273742d536974652d4e616d65065f7369746573026463065f6d7364637309706972616d6964656e026e6c00002100010000025800210000006400580c736273706972616d6964656e09706972616d6964656e026e6c00 ed5ba8040000000000000000 44667 00000000700240002fbf00000204057a01010402 000080010000000000000000 44668 2a0800000001000000000000046d61696c0776697370726f78026e6c0000010001 2a0880000001000000020002046d61696c0776697370726f78026e6c0000010001c0110002000100015180000c036e733105636176656fc019c01100020001000151800006036e7332c031c02d000100010001518000045112a002c045000100010001518000045112a102 44669 b7a400000001000000000000037777770c73757266736e656c6e616172026e6c0000010001 b7a480000001000000020002037777770c73757266736e656c6e616172026e6c0000010001c0100002000100015180000f026e7309656174736572766572c01dc01000020001000151800006036e7332c034c03100010001000151800004d4cb0e42c04c00010001000151800004d4cb1221 44670 799d000000010000000000000a6e656465727765657274027370026e6c0000010001 799d800000010000000200020a6e656465727765657274027370026e6c0000010001c01700020001000151800005026e73c017c01700020001000151800006036e7332c017c02e00010001000151800004c356785dc03f00010001000151800004d468d113 44671 b89baf9f501041b8f2450000000000000000 44672 054000000001000000000000046d61696c066368656c6c6f026e6c0000010001 054080000001000000030003046d61696c066368656c6c6f026e6c0000010001c01100020001000151800007046e733031c011c01100020001000151800007046e733032c011c0110002000100015180000a036e733103757063c018c02c00010001000151800004d4534482c03f00010001000151800004d4534483c05200010001000151800004d48e1c42 44673 b89baf9f501841b8f68800000094b100000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa7e403c4bfe0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000 44674 21ca00000001000000000001026e75026e6c00000100010000290500000000000000 21ca80000001000000030004026e75026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc023000100010001518000043e45a282c035000100010001518000043e45a283c047000100010001518000043e45a2840000291000000000000000 44675 b89bafad501141aaf1ae0000000000000000 44676 0000000070024000a23a00000204057a01010402 000080010000000000000000 44677 444a00000001000000000000037777770870632d6163746966026e6c0000010001 444a84030001000000010000037777770870632d6163746966026e6c0000010001c01900060001000038400036026e730f646f6d61696e2d7265676973747279c0190a686f73746d6173746572c0300bf1e540000070800000384000278d0000003840 44678 b89bafae501041aaf1ad0000000000000000 44679 679300000001000000000000037777770b6861727279706f74746572026e6c0000010001 679380000001000000020002037777770b6861727279706f74746572026e6c0000010001c01000020001000151800009036e7331026973c01cc01000020001000151800006036e7332c034c03000010001000151800004d5852102c04500010001000151800004d5c41503 44680 b89c5852501041b8bc0d0000000000000000 b89cd8540000000000000000 44681 b89c5852501841b8f051000000948200000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa7e403c4bfe0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000 b89cd8540000000000000000 44682 21ca00000001000000000000026e75026e6c0000010001 21ca80000001000000030003026e75026e6c0000010001c00c00020001000151800006036e7331c00cc00c00020001000151800006036e7332c00cc00c00020001000151800006036e7333c00cc023000100010001518000043e45a282c035000100010001518000043e45a283c047000100010001518000043e45a284 44683 2dcc00000001000000000000036d783306787334616c6c026e6c0000010001 2dcc80000001000000030002036d783306787334616c6c026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7332c010c0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c03c00010001000151800004c26d0963 44684 b89c5860501141aabb760000000000000000 b89cd8640000000000000000 44685 0000000070024000da6600000204057a01010402 000080010000000000000000 44686 af8b00000001000000000000037777770a6d756c74696b6162656c026e6c0000010001 af8b80000001000000030002037777770a6d756c74696b6162656c026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800014036e73300a6d756c74696b6162656c036e657400c02f0001000100015180000450f2e002c0410001000100015180000450f2e006 44687 b89c5861501041aabb750000000000000000 b89cd8640000000000000000 44688 b89cfce5501041b84fa60000000000000000 44689 b89cfce5501841b8b2ea000000945300000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005803677373096d6963726f736f667403636f6d00403afa7e403c4bfe0003000000354e544c4d535350000100000097b200e0090009002c0000000c000c0020000000534253504952414d4944454e504952414d4944454e0000 44690 88ce000000010000000000000666696e616365026e6c00000f0001 88ce800000010000000200000666696e616365026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c013c00c0002000100015180000704686e7331c02c 44691 b89cfcf3501141aa4f0f0000000000000000 44692 b89cfcf4501041aa4f0e0000000000000000 44693 6281000000010000000000000436303632106173736f63696174656e756d6265727303636f6d0774656265626574026e6c0000010001 6281840300010000000100000436303632106173736f63696174656e756d6265727303636f6d0774656265626574026e6c0000010001c02e00060001000038400036026e730f646f6d61696e2d7265676973747279c02e0a686f73746d6173746572c0450bf1e540000070800000384000278d0000003840 44694 eb3a000000010000000000000139033134320236300236390a626c61636b686f6c657307656173796e6574026e6c0000010001 eb3a800000010000000200020139033134320236300236390a626c61636b686f6c657307656173796e6574026e6c0000010001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 44695 49d9000000010000000000000377777709717569636b73746570026e6c0000010001 49d9800000010000000200020377777709717569636b73746570026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01ac01000020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 44696 b0d70000000100000000000005646e732d31056c61646f74026e6c0000010001 b0d78000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44697 25970000000100000000000005646e732d32056c61646f74026e6c0000010001 25978000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44698 ead200000001000000000000077370656369616c06787334616c6c026e6c0000010001 ead280000001000000030002077370656369616c06787334616c6c026e6c0000010001c01400020001000151800005026e73c014c01400020001000151800006036e7332c014c0140002000100015180000d026e730472697065036e657400c02f00010001000151800004c26d0642c04000010001000151800004c26d0963 44699 b53200000001000000000000086d6f746f72687532066e7434616c6c026e6c0000010001 b53280000001000000020002086d6f746f72687532066e7434616c6c026e6c0000010001c01500020001000151800005026e73c015c0150002000100015180000d036e733206787334616c6cc01cc03000010001000151800004c26d3402c04100010001000151800004c26d0963 44700 c9e9000000010000000000000377777709776f6f6e6b72616e74026e6c0000010001 c9e9800000010000000200000377777709776f6f6e6b72616e74026e6c0000010001c01000020001000151800011036e733107636f6e78696f6e036e657400c01000020001000151800006036e7332c032 44701 23cc0000000100000000000006636861726973026e6c00000f0001 23cc8000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 44702 f7d90000000100000000000005646e732d31056c61646f74026e6c0000010001 f7d98000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44703 028300000001000000000000036e7332046372696f026e6c0000010001 028380000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44704 e54600000001000000000000037777770a72656372656174696566026e6c0000010001 e54680000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44705 6814000000010000000000000377777708666f6e64736f677a026e6c0000010001 6814800000010000000200020377777708666f6e64736f677a026e6c0000010001c0100002000100015180000e0474726578066e6574726578c019c01000020001000151800006036e7332c032c02d00010001000151800004d4cccf1fc047000100010001518000043eb1a02b 44706 aa7000000001000000000000036e7332046372696f026e6c0000010001 aa7080000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44707 18e00000000100000000000003777777046c657861026e6c0000010001 18e08000000100000003000203777777046c657861026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 44708 38e900000001000000000000037777770a6977616e6e6164617465026e6c0000010001 38e980000001000000020000037777770a6977616e6e6164617465026e6c0000010001c01000020001000151800011036e73330a6f70656e2d646f6f7273c01bc01000020001000151800006036e7334c033 44709 230300000001000000000000036e7335046372696f026e6c0000010001 230380000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44710 5354000000010000000000000377777703776562026e6c0000010001 5354800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44711 96d700000001000000000000036e7335046372696f026e6c0000010001 96d780000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44712 98dd00000001000000000000056f72646f730367726e056672656961026e6c00000f0001 98dd80000001000000020002056f72646f730367726e056672656961026e6c00000f0001c0160002000100015180000906706f6c6c7578c016c0160002000100015180000e07636172746d616e03616f67c01cc03000010001000151800004c1acf7fac04500010001000151800004c05716fa 44713 a65900000001000000000000036e7332046372696f026e6c0000010001 a65980000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44714 35a200000001000000000000037777770a72656372656174696566026e6c0000010001 35a280000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44715 b80600000001000000000000036e7332046372696f026e6c0000010001 b80680000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44716 597400000001000000000000037777770562616e6173026e6c0000010001 597480000001000000020000037777770562616e6173026e6c0000010001c01000020001000151800011036e73310a6d61696e736572766572c016c01000020001000151800006036e7332c02e 44717 5fec000000010000000000000c6d706d616e6167656d656e74026e6c00000f0001 5fec800000010000000200000c6d706d616e6167656d656e74026e6c00000f0001c00c0002000100015180000f036e73310571696e6970036e657400c00c00020001000151800006036e7332c031 44718 c57400000001000000000000037777770d7261626f62616e6b67726f6570026e6c0000010001 c57480000001000000020001037777770d7261626f62616e6b67726f6570026e6c0000010001c0100002000100015180000e026e73087261626f62616e6bc01ec0100002000100015180000b026e73026e6c036e657400c0320001000100015180000491484fde 44719 ea1900000001000000000000036e7335046372696f026e6c0000010001 ea1980000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44720 2461000000010000000000000377777703776562026e6c0000010001 2461800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44721 d0ac00000001000000000000036e7335046372696f026e6c0000010001 d0ac80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44722 3d0a00000001000000000000036e7332046372696f026e6c0000010001 3d0a80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44723 e5f000000001000000000000037777770a72656372656174696566026e6c0000010001 e5f080000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44724 d59e00000001000000000000036e7332046372696f026e6c0000010001 d59e80000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44725 603300000001000000000000036e7335046372696f026e6c0000010001 603380000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44726 38a8000000010000000000000377777703776562026e6c0000010001 38a8800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44727 5aa800000001000000000000036e7335046372696f026e6c0000010001 5aa880000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44728 e32b0000000100000000000003777777086962666f72756d73026e6c0000010001 e32b8000000100000002000203777777086962666f72756d73026e6c0000010001c0100002000100015180000f026e7309656174736572766572c019c01000020001000151800006036e7332c030c02d00010001000151800004d4cb0e42c04800010001000151800004d4cb1221 44729 5cc8000000010000000000001868616c6b657368616e64656c736f6e6465726e656d696e67026e6c00000f0001 5cc8800000010000000200021868616c6b657368616e64656c736f6e6465726e656d696e67026e6c00000f0001c00c00020001000151800010036e733109686f73746e65746276c025c00c00020001000151800006036e7332c03dc0390001000100015180000451113264c05500010001000151800004d5c42851 44730 2b38000000010000000000000970616e6e6f6e696361026e6c0000010001 2b38800000010000000200020970616e6e6f6e696361026e6c0000010001c00c0002000100015180000a036e7331036e7873c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d973c015c04000010001000151800004d973c102 44731 de7c00000001000000000000046d61696c086561737966696c65026e6c0000010001 de7c80000001000000020002046d61696c086561737966696c65026e6c0000010001c0110002000100015180000f026e7309656174736572766572c01ac01100020001000151800006036e7332c031c02e00010001000151800004d4cb0e42c04900010001000151800004d4cb1221 44732 093b00000001000000000000036e73320461786974026e6c0000010001 093b80000001000000030003036e73320461786974026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c029000100010001518000043e3a440bc00c000100010001518000043e3a440cc04900010001000151800004d43d5c83 44733 9d1e00100001000000000001056669716173026e6c0000ff00010000290800000080000000 9d1e80000001000000020001056669716173026e6c0000ff0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c02c0000291000000000000000 44734 618200000001000000000000054d54504333044857444c026e6c0000010001 618284030001000000010000054d54504333044857444c026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 44735 68a0000000010000000000000b70726f756464657369676e026e6c0000010001 68a0800000010000000300030b70726f756464657369676e026e6c0000010001c00c00020001000151800010036e733109736974656279746573c018c00c00020001000151800006036e7332c030c00c00020001000151800006036e7333c030c02c00010001000151800004c2a55e5ac04800010001000151800004c356781cc05a000100010001518000043ec58016 44736 70bb000000010000000000000377777703636264026e6c0000010001 70bb800000010000000300030377777703636264026e6c0000010001c0100002000100015180000e046865726101780463756369c014c0100002000100015180000c066865726d6573026e6cc02fc01000020001000151800009066865726d6573c02dc02800010001000151800004d47d8001c04200010001000151800004c143ef02c05a00010001000151800004d47d8002 44737 5e7900000001000000000000037777770a64757463687465656e73026e6c0000010001 5e7980000001000000020001037777770a64757463687465656e73026e6c0000010001c0100002000100015180000a026e7304696d636fc01bc01000020001000151800013036e7332097669727475616c787303636f6d00c02f000100010001518000043e81810a 44738 44d2000000010000000000000377777708636861746769726c026e6c0000010001 44d2800000010000000200000377777708636861746769726c026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c030 44739 28200000000100000000000004646e73310570726f7869026e6c0000010001 28208000000100000002000204646e73310570726f7869026e6c0000010001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d4cb090cc03900010001000151800004d4cb090d 44740 7a4e0000000100000000000004646e73320570726f7869026e6c0000010001 7a4e8000000100000002000204646e73320570726f7869026e6c0000010001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02b00010001000151800004d4cb090cc00c00010001000151800004d4cb090d 44741 fa5300000001000000000000037777771b64696572656e626573636865726d696e672d67726f6e696e67656e026e6c0000010001 fa5380000001000000020000037777771b64696572656e626573636865726d696e672d67726f6e696e67656e026e6c0000010001c0100002000100015180000c036e723605692d702d64c02cc01000020001000151800006036e7237c044 44742 012f28000001000200000000026e6c0000060001065453444f4355026e6c00000500fe000000000000c01400010001000000000004c009c83c 012fa8040000000000000000 44743 97cd00000001000000000000037777770d7265666c65637465646d696e64026e6c0000010001 97cd80000001000000020000037777770d7265666c65637465646d696e64026e6c0000010001c01000020001000151800010036e733109706365787472656d65c01ec01000020001000151800006036e7332c036 44744 4bbe00000001000000000000036e733107737572666e6574026e6c0000010001 4bbe80000001000000040003036e733107737572666e6574026e6c0000010001c0100002000100015180000906737572766973c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc0100002000100015180000c036e7330026a61036e657400c02c00010001000151800004c0576c03c04100010001000151800004c0572402c00c00010001000151800004c0576a65 44745 efcd00000001000000000000055f6c646170045f746370026463065f6d736463730c6f70656e627573696e657373026e6c0000210001 efcd80000001000000020000055f6c646170045f746370026463065f6d736463730c6f70656e627573696e657373026e6c0000210001c0210002000100015180000b026e73026e6c036e657400c0210002000100015180001206617574683630026e73026e6c027575c048 44746 53120000000100000000000003777777167765657273746174696f6e2d646f6574696e6368656d026e6c0000010001 53128000000100000002000003777777167765657273746174696f6e2d646f6574696e6368656d026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800018036e73310e73706c69742d696e66696e697479036e657400 44747 92d1000000010000000000000c6b656d70656e73747265656b026e6c0000010001 92d1800000010000000200020c6b656d70656e73747265656b026e6c0000010001c00c00020001000151800012036e73310b7669616e6574776f726b73c019c00c00020001000151800006036e7332c031c02d00010001000151800004d43d0f08c04b00010001000151800004d43d19e2 44748 cfcf00000001000000000000036e733103746d6e026e6c0000010001 cfcf80000001000000020002036e733103746d6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d5a0d8fac03600010001000151800004d5a0d9fa 44749 4a5800000001000000000000037777770c74656c65666f6f6e67646973026e6c0000010001 4a5884030001000000010000037777770c74656c65666f6f6e67646973026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 44750 000000007002faf06c420000020405b401010402 000080010000000000000000 44751 a53000000001000000000000036e733203746d6e026e6c0000010001 a53080000001000000020002036e733203746d6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02800010001000151800004d5a0d8fac00c00010001000151800004d5a0d9fa 44752 100c00000001000000000000036e733203747565026e6c0000010001 100c80000001000000030003036e733203747565026e6c0000010001c0100002000100015180000a0774756567617465c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004839b0203c00c00010001000151800004839b0303c04c00010001000151800004c0576a65 44753 023900000001000000000000077475656761746503747565026e6c0000010001 023980000001000000030003077475656761746503747565026e6c0000010001c01400020001000151800002c00cc01400020001000151800006036e7332c014c0140002000100015180000e036e733107737572666e6574c018c00c00010001000151800004839b0203c03a00010001000151800004839b0303c04c00010001000151800004c0576a65 44754 b89f748d5010faf06bc90000000000000000 b89ff4840000000000000000 44755 e7f400000001000000000000037777770a64697678706c61796572026e6c0000010001 e7f480000001000000020002037777770a64697678706c61796572026e6c0000010001c01000020001000151800014036e73310d78786c776562686f7374696e67c01bc01000020001000151800006036e7332c033c02f000100010001518000045104580ac04f000100010001518000045104601e 44756 25d200000001000000000000026e7306787334616c6c026e6c0000010001 25d280000001000000030002026e7306787334616c6c026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00f0002000100015180000d026e730472697065036e657400c00c00010001000151800004c26d0642c03800010001000151800004c26d0963 44757 b89f748d5018faf029bd0000008ed048000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af976403c4af600030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005453444f43554f4c59534c414745520000 b89ff4840000000000000000 44758 15d2000000010000000000000866616c6c6261636b046d61696c06776964657873026e6c0000010001 15d2800000010000000300020866616c6c6261636b046d61696c06776964657873026e6c0000010001c01a00020001000151800006036e7331c01ac01a00020001000151800010036e733206776964657873036e657400c01a00020001000151800006036e7333c01ac03500010001000151800004d4ccc0fcc063000100010001518000043efa0703 44759 54aa000000010000000000000866616c6c6261636b08767575727765726b026e6c0000010001 54aa800000010000000300010866616c6c6261636b08767575727765726b026e6c0000010001c01500020001000151800005026e73c015c01500020001000151800012036e733208767575727765726b036e657400c01500020001000151800006036e7333c047c032000100010001518000043efa0202 44760 18dd000000010000000000000565666e657403626974026e6c0000010001 18dd800000010000000300030565666e657403626974026e6c0000010001c0120002000100015180000a076e736175746831c012c0120002000100015180000a076e736175746832c012c0120002000100015180000a076e736175746833c012c02a00010001000151800004d5880c33c04000010001000151800004d5880c3bc05600010001000151800004d4ccc00b 44761 85e700100001000000000001026e7303626f73026e6c00000100010000290800000080000000 85e780000001000000020003026e7303626f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5881e43c03500010001000151800004d51392030000291000000000000000 44762 40b400100001000000000001036e733203626f73026e6c00000100010000290800000080000000 40b480000001000000020003036e733203626f73026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004d5881e43c00c00010001000151800004d51392030000291000000000000000 44763 b89f749b5011fae26b380000000000000000 b89ff4940000000000000000 44764 000000007002faf091260000020405b401010402 000080010000000000000000 44765 6dea00000001000000000000066b6f6d62696e026e6c0000010001 6dea80000001000000020001066b6f6d62696e026e6c0000010001c00c000200010001518000130b737061726373657276657204706c6578c013c00c0002000100015180000b026e73026e6c036e657400c02700010001000151800004c1439a0a 44766 58a9000000010000000000000d62657374757572736b616d65720661736f706f73026e6c0000010001 58a9800000010000000200000d62657374757572736b616d65720661736f706f73026e6c0000010001c01a00020001000151800010036e7331066576736f6674036e657400c01a00020001000151800006036e7332c039 44767 b57a000000010000000000000474617869026e6c00000f0001 b57a800000010000000200020474617869026e6c00000f0001c00c0002000100015180000d03706e7306636f6d6c6f67c011c00c0002000100015180000603736e73c029c02500010001000151800004d5a0c803c03e00010001000151800004d5a0c804 44768 970d000000010000000000000d62657374757572736b616d65720661736f706f73026e6c0000010001 970d800000010000000200000d62657374757572736b616d65720661736f706f73026e6c0000010001c01a00020001000151800010036e7331066576736f6674036e657400c01a00020001000151800006036e7332c039 44769 205a00000001000000000000026e7303626f73026e6c0000010001 205a80000001000000020002026e7303626f73026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c00010001000151800004d5881e43c03500010001000151800004d5139203 44770 102d00000001000000000000036e733203626f73026e6c0000010001 102d80000001000000020002036e733203626f73026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02800010001000151800004d5881e43c00c00010001000151800004d5139203 44771 323e0000000100000000000003777777036d736e026e6c0000010001 323e8000000100000003000003777777036d736e026e6c0000010001c0100002000100015180001204646e733302756b046d736674036e657400c0100002000100015180000a04646e7331026370c030c0100002000100015180000a04646e7331026463c030 44772 b89f749c5010fae26b370000000000000000 b89ff4940000000000000000 44773 b8a055e75010faf0af520000000000000000 b8a0d5e40000000000000000 44774 7e23000000010000000000000768696768776179026e6c00000f0001 7e23800000010000000200000768696768776179026e6c00000f0001c00c00020001000151800012036e73310866696e616c69737403636f6d00c00c00020001000151800006036e7332c02c 44775 7b290010000100000000000106787334616c6c026e6c00000f00010000290800000000000000 7b298000000100000003000306787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d09630000291000000000000000 44776 b8a055e75018faf0a56c0000008e9923000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af976403c4af600030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005453444f43554f4c59534c414745520000 b8a0d5e40000000000000000 44777 dcc400000001000000000000036e73320f732d686572746f67656e626f736368026e6c0000010001 dcc480000001000000030002036e73320f732d686572746f67656e626f736368026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c03400010001000151800004c29725e3c00c00010001000151800004c29725ec 44778 c67500000001000000000000036e73320f732d686572746f67656e626f736368026e6c00001c0001 c67580000001000000030002036e73320f732d686572746f67656e626f736368026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c03400010001000151800004c29725e3c00c00010001000151800004c29725ec 44779 7d1600000001000000000000036e73320f732d686572746f67656e626f736368026e6c0000260001 7d1680000001000000030002036e73320f732d686572746f67656e626f736368026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000d036e7332036b706e036e657400c03400010001000151800004c29725e3c00c00010001000151800004c29725ec 44780 6bd200000001000000000000036e73310f732d686572746f67656e626f736368026e6c0000010001 6bd280000001000000030002036e73310f732d686572746f67656e626f736368026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c29725e3c04200010001000151800004c29725ec 44781 43af00000001000000000000036e73310f732d686572746f67656e626f736368026e6c00001c0001 43af80000001000000030002036e73310f732d686572746f67656e626f736368026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c29725e3c04200010001000151800004c29725ec 44782 605600000001000000000000036e73310f732d686572746f67656e626f736368026e6c0000260001 605680000001000000030002036e73310f732d686572746f67656e626f736368026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000d036e7332036b706e036e657400c00c00010001000151800004c29725e3c04200010001000151800004c29725ec 44783 aae100100001000000000001036e73320f6761726e69657270726f6a65637473026e6c00000100010000290800000080000000 aae180000001000000020003036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e1420000291000000000000000 44784 a27900000001000000000000036e73320f6761726e69657270726f6a65637473026e6c0000010001 a27980000001000000020002036e73320f6761726e69657270726f6a65637473026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7331c010c034000100010001518000045117e122c045000100010001518000045117e142 44785 e7400000000100000000000006787334616c6c026e6c00000f0001 e7408000000100000003000206787334616c6c026e6c00000f0001c00c00020001000151800005026e73c00cc00c00020001000151800006036e7332c00cc00c0002000100015180000d026e730472697065036e657400c02700010001000151800004c26d0642c03800010001000151800004c26d0963 44786 446a0000000100000000000006696d6167657306637532646179026e6c0000010001 446a8000000100000002000206696d6167657306637532646179026e6c0000010001c01300020001000151800012036e73310b6d6564696164657369676ec01ac01300020001000151800006036e7332c032c02e00010001000151800004c3b1f203c04c00010001000151800004d4ccf533 44787 e685000000010000000000000374736c0d696e766973696f6e706f776572026e6c0000010001 e685800000010000000200020374736c0d696e766973696f6e706f776572026e6c0000010001c01000020001000151800011036e73310a667574757265666c6578c01ec01000020001000151800006036e7332c036c03200010001000151800004d9aa122bc04f00010001000151800004d9aa122c 44788 b8a055f55011fae2aec10000000000000000 b8a0d5f40000000000000000 44789 8a6d000000010000000000000a736f6e6572616d61696c026e6c00000f0001 8a6d800000010000000200000a736f6e6572616d61696c026e6c00000f0001c00c00020001000151800011036e73310774647364617461036e657400c00c00020001000151800006036e7332c02f 44790 000000007002faf0a72f0000020405b401010402 000080010000000000000000 44791 eb2200000001000000000000034e5331074e4544434f4d50024e4c0000010001 eb2280000001000000020001034e5331074e4544434f4d50024e4c0000010001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1a80d 44792 3a8c00000001000000000000034e5331074e4544434f4d50024e4c0000260001 3a8c80000001000000020001034e5331074e4544434f4d50024e4c0000260001c01000020001000151800002c00cc0100002000100015180000b026e73026e6c036e657400c00c00010001000151800004c3c1a80d 44793 ecb600000001000000000000036e733109666972737466696e64026e6c0000010001 ecb680000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44794 6350000000010000000000000377777703776562026e6c0000010001 6350800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44795 01300000000100000000000003777777077374616f6b6179026e6c0000010001 01308403000100000001000003777777077374616f6b6179026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 44796 b8a055f65010fae2aec00000000000000000 b8a0d5f40000000000000000 44797 b8a134165010faf0e72b0000000000000000 b8a1b4140000000000000000 44798 04ee0000000100000000000005776f64616e0369637303656c6503747565026e6c0000010001 04ee8000000100000003000305776f64616e0369637303656c6503747565026e6c0000010001c01a0002000100015180000a0774756567617465c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec03200010001000151800004839b0203c04800010001000151800004839b0303c05a00010001000151800004c0576a65 44799 b8a134165018faf0631b0000008e134e000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af976403c4af600030000002f4e544c4d535350000100000097b208e0090009002600000006000600200000005453444f43554f4c59534c414745520000 b8a1b4140000000000000000 44800 466c0000000100000000000015616e636f746865656b5f5f73696572746567656c7306636c75626964026e6c0000010001 466c8000000100000002000015616e636f746865656b5f5f73696572746567656c7306636c75626964026e6c0000010001c02200020001000151800014036e73310a646f6c7068696e2d6973036e657400c02200020001000151800006036e7332c041 44801 5e4800000001000000000000036e733403777873026e6c0000010001 5e4880000001000000030003036e733403777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800002c00cc02800010001000151800004c3790128c03b00010001000151800004c3790143c00c00010001000151800004d5ef9a65 44802 17ea00000001000000000000036e733503777873026e6c0000010001 17ea80000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44803 b8a134245011fae2e69a0000000000000000 b8a1b4240000000000000000 44804 a09500000001000000000000037777770b6b61617274656e73746164026e6c0000010001 a09580000001000000030002037777770b6b61617274656e73746164026e6c0000010001c0100002000100015180000d036e733106776964657873c01cc01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c034c03000010001000151800004d4ccc0fcc065000100010001518000043efa0703 44805 ffec000000010000000000000377777708626f6f6b696e6773026e6c0000010001 ffec800000010000000200010377777708626f6f6b696e6773026e6c0000010001c01000020001000151800009026e730374656ec019c0100002000100015180000b026e73026e6c036e657400c02d00010001000151800004c36c4b01 44806 4e5400100001000000000000126175746f7061727473686f6f6664646f7270026e6c00001c0001 4e5480000001000000030003126175746f7061727473686f6f6664646f7270026e6c00001c0001c00c0002000100015180000f036e7331087769726569747570c01fc00c00020001000151800006036e7332c037c00c00020001000151800006036e7333c037c03300010001000151800004d5ef8035c04e00010001000151800004d5efb035c06000010001000151800004d5ef8135 44807 5dd8000000010000000000000377777704646d6d64026e6c0000010001 5dd8800000010000000200000377777704646d6d64026e6c0000010001c01000020001000151800019036e73310f6c696e6b67696473686f7374696e67036e657400c01000020001000151800006036e7332c02d 44808 b8a134255010fae2e6990000000000000000 b8a1b4240000000000000000 44809 c4a800000001000000000000036e7332076f727468616e63026e6c0000010001 c4a880000001000000020002036e7332076f727468616e63026e6c0000010001c0100002000100015180000a036e7331036e7873c018c01000020001000151800006036e7332c030c02c00010001000151800004d973c015c04200010001000151800004d973c102 44810 1fc8000000010000000000000b61646e656465726c616e64026e6c00000f0001 1fc8800000010000000200000b61646e656465726c616e64026e6c00000f0001c00c0002000100015180000d026e730468736367036e657400c00c00020001000151800006036e7332c02f 44811 26cf0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 26cf8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44812 9fff0000000100000000000003706f700574656c6532026e6c0000010001 9fff8000000100000003000003706f700574656c6532026e6c0000010001c010000200010001518000140566616c756e03646e730473776970036e657400c01000020001000151800009066b616c6d6172c030c0100002000100015180000a026e7304756e6932c039 44813 373f00000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 373f80000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 44814 01e50000000100000000000003626c3102626c06787334616c6c026e6c0000260001 01e58000000100000003000203626c3102626c06787334616c6c026e6c0000260001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44815 6abe00000001000000000000034e533206585334414c4c024e4c0000010001 6abe80000001000000030002034e533206585334414c4c024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc0100002000100015180000d026e730472697065036e657400c02b00010001000151800004c26d0642c00c00010001000151800004c26d0963 44816 596500000001000000000000036e7335046372696f026e6c0000010001 596580000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44817 ac0800000001000000000000036e7332046372696f026e6c0000010001 ac0880000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44818 c44f00000001000000000000037777770a72656372656174696566026e6c0000010001 c44f80000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44819 7c8900000001000000000000036e7332046372696f026e6c0000010001 7c8980000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44820 73c100000001000000000000036e733104686f6d65026e6c0000010001 73c180000001000000030003036e733104686f6d65026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c00c00010001000151800004d47842ccc03700010001000151800004d5338161c04900010001000151800004d533804b 44821 eb850000000100000000000005776f64616e0369637303656c6503747565026e6c0000010001 eb858000000100000003000305776f64616e0369637303656c6503747565026e6c0000010001c01a0002000100015180000a0774756567617465c01ac01a00020001000151800006036e7332c01ac01a0002000100015180000e036e733107737572666e6574c01ec03200010001000151800004839b0203c04800010001000151800004839b0303c05a00010001000151800004c0576a65 44822 6f80000000010000000000000b6d7573696374726176656c026e6c00000f0001 6f80800000010000000200020b6d7573696374726176656c026e6c00000f0001c00c00020001000151800010036e7331096e657467726f756e64c018c00c00020001000151800006036e7332c030c02c000100010001518000045054e415c0480001000100015180000451046014 44823 02b400000001000000000000037777770f62656c617374696e676469656e7374026e6c0000010001 02b480000001000000020001037777770f62656c617374696e676469656e7374026e6c0000010001c01000020001000151800005026e73c010c0100002000100015180000b026e73026e6c036e657400c03400010001000151800004d4880935 44824 48f200000001000000000000036e733204686f6d65026e6c0000010001 48f280000001000000030003036e733204686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc01000020001000151800006036e7333c010c02900010001000151800004d47842ccc00c00010001000151800004d5338161c04900010001000151800004d533804b 44825 395400000001000000000000037777771a647575727a616d6562656472696a76656e7465727265696e656e026e6c0000010001 395480000001000000030001037777771a647575727a616d6562656472696a76656e7465727265696e656e026e6c0000010001c0100002000100015180000e026e7308767575727765726bc02bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c05dc03f000100010001518000043efa0202 44826 915f00000001000000000000037777770a73746172746b6162656c026e6c0000010001 915f80000001000000030001037777770a73746172746b6162656c026e6c0000010001c0100002000100015180000e026e7308767575727765726bc01bc01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c04dc02f000100010001518000043efa0202 44827 a47900000001000000000000036e733304686f6d65026e6c0000010001 a47980000001000000030003036e733304686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800002c00cc02900010001000151800004d47842ccc03b00010001000151800004d5338161c00c00010001000151800004d533804b 44828 bc5200000001000000000000036e733404686f6d65026e6c0000010001 bc5280000001000000030003036e733404686f6d65026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c01000020001000151800006036e7333c010c02900010001000151800004d47842ccc03b00010001000151800004d5338161c04d00010001000151800004d533804b 44829 e70200000001000000000000036e733109666972737466696e64026e6c0000010001 e70280000001000000020000036e733109666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44830 cee100000001000000000000036e733209666972737466696e64026e6c0000010001 cee180000001000000020000036e733209666972737466696e64026e6c0000010001c01000020001000151800010026e73076379736f6e657403636f6d00c01000020001000151800006036e7331c031 44831 e7890000000100000000000008616473657276657206776562616473026e6c0000010001 e7898000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 44832 d42b00000001000000000000036e7335046372696f026e6c0000010001 d42b80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44833 1dcd000000010000000000000377777703776562026e6c0000010001 1dcd800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44834 72cc00000001000000000000036e7335046372696f026e6c0000010001 72cc80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44835 49c5000000010000000000002465636534633030352d633430302d343231322d386234382d316537633466383766326561065f6d736463730a6e706363656e7472756d0463766e6e026e6c0000060001 49c5840300010000000100002465636534633030352d633430302d343231322d386234382d316537633466383766326561065f6d736463730a6e706363656e7472756d0463766e6e026e6c0000060001c04800060001000038400036026e730f646f6d61696e2d7265676973747279c0480a686f73746d6173746572c05f0bf1e540000070800000384000278d0000003840 44836 10e50000000100000000000003706f700c737469636874696e67616e75026e6c00001c0001 10e58000000100000002000003706f700c737469636874696e67616e75026e6c00001c0001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c036 44837 57ef0000000100000000000003706f700c737469636874696e67616e75026e6c0000260001 57ef8000000100000002000003706f700c737469636874696e67616e75026e6c0000260001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c036 44838 1663000000010000000000000377777706616474726171026e6c0000010001 1663800000010000000200000377777706616474726171026e6c0000010001c0100002000100015180000f036e733105796b6f6f6e036e657400c01000020001000151800006036e7332c02f 44839 73e3000000010000000000000377777708636f6e2d6e656374026e6c0000010001 73e3800000010000000200000377777708636f6e2d6e656374026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c043 44840 94e60000000100000000000007636f6e74726f6c026e6c00000f0001 94e68000000100000002000007636f6e74726f6c026e6c00000f0001c00c00020001000151800018036e7330026e6c0b7369746570726f7465637403636f6d00c00c00020001000151800006036e7331c02c 44841 2ee8000000010000000000000139033134320236300236390a626c61636b686f6c657307656173796e6574026e6c0000050001 2ee8800000010000000200020139033134320236300236390a626c61636b686f6c657307656173796e6574026e6c0000050001c02300020001000151800006036e7330c023c02300020001000151800006036e7331c023c03f00010001000151800004c2a55e01c05100010001000151800004c2a55e05 44842 8e6200000001000000000000095f6b65726265726f73045f746370026463065f6d736463730a6e706363656e7472756d0463766e6e026e6c0000060001 8e6284030001000000010000095f6b65726265726f73045f746370026463065f6d736463730a6e706363656e7472756d0463766e6e026e6c0000060001c03500060001000038400036026e730f646f6d61696e2d7265676973747279c0350a686f73746d6173746572c04c0bf1e540000070800000384000278d0000003840 44843 da16000000010000000000000377777712636f756e74646f776e696e62656472696a66026e6c0000010001 da16800000010000000200000377777712636f756e74646f776e696e62656472696a66026e6c0000010001c0100002000100015180000d036e73310662697a646576c023c01000020001000151800006036e7332c03b 44844 02cc0000000100000000000005646e732d31056c61646f74026e6c0000010001 02cc8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44845 fad30000000100000000000005646e732d32056c61646f74026e6c0000010001 fad38000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 44846 989d0000000100000000000009616476616e74616765026e6c0000010001 989d8000000100000002000209616476616e74616765026e6c0000010001c00c0002000100015180000c026e7306787334616c6cc016c00c00020001000151800006036e7332c02dc02a00010001000151800004c26d0642c04200010001000151800004c26d0963 44847 58df00000001000000000000037777770b6469726563746c65617365026e6c0000010001 58df80000001000000020002037777770b6469726563746c65617365026e6c0000010001c0100002000100015180000c036e7331057669727475c01cc01000020001000151800006036e7332c034c03000010001000151800004d9726102c04800010001000151800004d58141c4 44848 ae7e000000010000000000000869636c656964656e026e6c00000f0001 ae7e800000010000000200020869636c656964656e026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc015c00c00020001000151800006036e7332c02cc02900010001000151800004c26d0642c04100010001000151800004c26d0963 44849 d129000000010000000000000377777709706c63646972656374026e6c0000010001 d129800000010000000200000377777709706c63646972656374026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c036 44850 974000000001000000000000037777770c6a7562696c6561736f6e6773026e6c0000010001 974084030001000000010000037777770c6a7562696c6561736f6e6773026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 44851 f263000000010000000000000377777709736570746574746573026e6c0000010001 f263800000010000000200000377777709736570746574746573026e6c0000010001c0100002000100015180000f026e7306777367617465036e657400c01000020001000151800006036e7332c031 44852 da6700000001000000000000136469726967656e74696e74656b7374656e7072026e6c00000f0001 da6780000001000000020000136469726967656e74696e74656b7374656e7072026e6c00000f0001c00c0002000100015180000f04686e73300774697363616c69c020c00c0002000100015180000704686e7331c039 44853 a4030000000100000000000003777777066d6174757265026e6c0000010001 a4038000000100000002000203777777066d6174757265026e6c0000010001c0100002000100015180000e036e733007686f73746c6162c017c01000020001000151800006036e7331c02fc02b00010001000151800004c3eaad40c04500010001000151800004c3eaad41 44854 aeee001000010000000000010377777702746906746572656e61026e6c00000100010000290800000000000000 aeee800000010000000200030377777702746906746572656e61026e6c0000010001c01300020001000151800006036e7331c013c0130002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004c0571e02c04000010001000151800004c0576a650000291000000000000000 44855 49c20000000100000000000008686f73746e616d650462696e640000100003 49c28000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 44856 baf20000000100000000000008686f73746e616d650462696e640000100003 baf28000000100010000000008686f73746e616d650462696e640000100003c00c0010000300000000000605656c697a61 44857 5777000000010000000000000377777702746906746572656e61026e6c0000010001 5777800000010000000200020377777702746906746572656e61026e6c0000010001c01300020001000151800006036e7331c013c0130002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004c0571e02c04000010001000151800004c0576a65 44858 2aa20000000100000000000002393402323403313335033134340964796e61626c6f636b07656173796e6574026e6c0000100001 2aa28000000100000002000202393402323403313335033134340964796e61626c6f636b07656173796e6574026e6c0000100001c02400020001000151800006036e7330c024c02400020001000151800006036e7331c024c04000010001000151800004c2a55e01c05200010001000151800004c2a55e05 44859 b73700000001000000000000036e7331096b6162656c666f6f6e026e6c0000010001 b73780000001000000020002036e7331096b6162656c666f6f6e026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7334c010c00c000100010001518000043e2d2d2cc03c000100010001518000043e2d3f03 44860 0ca600000001000000000000036e7334096b6162656c666f6f6e026e6c0000010001 0ca680000001000000020002036e7334096b6162656c666f6f6e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02e000100010001518000043e2d2d2cc00c000100010001518000043e2d3f03 44861 cd080000000100000000000003626c3102626c06787334616c6c026e6c0000010001 cd088000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44862 28f90000000100000000000003777777076e6f7a7a6d616e026e6c0000010001 28f98000000100000002000203777777076e6f7a7a6d616e026e6c0000010001c0100002000100015180000a036e733103677673c018c01000020001000151800006036e7332c030c02c000100010001518000045054e1aac04200010001000151800004d4ccc646 44863 dc070000000100000000000005636f627261066b6f6e626962026e6c00001c0001 dc078000000100000003000305636f627261066b6f6e626962026e6c00001c0001c01200020001000151800002c00cc0120002000100015180000906707974686f6ec012c0120002000100015180000e036e733107737572666e6574c019c00c00010001000151800004c0571f16c03b00010001000151800004c0571f0bc05000010001000151800004c0576a65 44864 76960000000100000000000005636f627261066b6f6e626962026e6c0000260001 76968000000100000003000305636f627261066b6f6e626962026e6c0000260001c01200020001000151800002c00cc0120002000100015180000906707974686f6ec012c0120002000100015180000e036e733107737572666e6574c019c00c00010001000151800004c0571f16c03b00010001000151800004c0571f0bc05000010001000151800004c0576a65 44865 827c0000000100000000000006707974686f6e066b6f6e626962026e6c00001c0001 827c8000000100000003000306707974686f6e066b6f6e626962026e6c00001c0001c0130002000100015180000805636f627261c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004c0571f16c00c00010001000151800004c0571f0bc05000010001000151800004c0576a65 44866 4ff40000000100000000000006707974686f6e066b6f6e626962026e6c0000260001 4ff48000000100000003000306707974686f6e066b6f6e626962026e6c0000260001c0130002000100015180000805636f627261c013c01300020001000151800002c00cc0130002000100015180000e036e733107737572666e6574c01ac02e00010001000151800004c0571f16c00c00010001000151800004c0571f0bc05000010001000151800004c0576a65 44867 62d3000000010000000000000377777712616e6e656672616e6b737469636874696e67026e6c0000010001 62d3840300010000000100000377777712616e6e656672616e6b737469636874696e67026e6c0000010001c02300060001000038400036026e730f646f6d61696e2d7265676973747279c0230a686f73746d6173746572c03a0bf1e540000070800000384000278d0000003840 44868 6a3000000001000000000000037777770378626e026e6c0000010001 6a3080000001000000020000037777770378626e026e6c0000010001c0100002000100015180000f036e73310571696e6970036e657400c01000020001000151800006036e7332c02c 44869 1eef00000001000000000000037777770a696e667261736b696c6c026e6c0000010001 1eef80000001000000020002037777770a696e667261736b696c6c026e6c0000010001c0100002000100015180000a036e733103686978c01bc01000020001000151800006036e7332c033c02f00010001000151800004d5a0da0ac0450001000100015180000451112ec3 44870 1f8a0000000100000000000004777777320c7374657272656e6265757273026e6c0000010001 1f8a8000000100000002000004777777320c7374657272656e6265757273026e6c0000010001c0110002000100015180001204726f6f7307656e64656d6f6c03636f6d00c01100020001000151800007046e6f7661c037 44871 27340000000100000000000004777777770b626572747665726265656b026e6c0000010001 27348000000100000003000304777777770b626572747665726265656b026e6c0000010001c0110002000100015180000c036e7331053266617374c01dc01100020001000151800006036e7332c035c01100020001000151800006036e7333c035c0310001000100015180000450f7c022c049000100010001518000043e858122c05b000100010001518000045117eb22 44872 a4b300000001000000000000037777771168617264636f726567616c6c6572696573026e6c0000010001 a4b380000001000000020000037777771168617264636f726567616c6c6572696573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c039 44873 e0fd00000001000000000000036e733103736369036b756e026e6c0000010001 e0fd80000001000000030003036e733103736369036b756e026e6c0000010001c0140002000100015180000f08636170796261726103756369c014c01400020001000151800002c00cc0140002000100015180000e036e733107737572666e6574c018c02c0001000100015180000483ae3c15c00c0001000100015180000483aee004c05500010001000151800004c0576a65 44874 e5f60000000100000000000008636170796261726103756369036b756e026e6c0000010001 e5f68000000100000003000308636170796261726103756369036b756e026e6c0000010001c01900020001000151800002c00cc0190002000100015180000a036e733103736369c019c0190002000100015180000e036e733107737572666e6574c01dc00c0001000100015180000483ae3c15c03f0001000100015180000483aee004c05500010001000151800004c0576a65 44875 0b3900100001000000000001036e733109756e69736f75726365026e6c00000100010000290800000080000000 0b3980000001000000020001036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c0320000291000000000000000 44876 292c000000010000000000000872616b65746e6574026e6c00000f0001 292c800000010000000200020872616b65746e6574026e6c00000f0001c00c0002000100015180001103646e730a636f6e63657074736661c015c00c0002000100015180001004646e733208636f6e6365707473c015c02900010001000151800004d5c51c03c04600010001000151800004d5c51e1c 44877 e04600000001000000000000037777770e6b6f6e696e6b6c696a6b68756973026e6c0000010001 e04680000001000000020000037777770e6b6f6e696e6b6c696a6b68756973026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c039 44878 7baa000000010000000000000377777709616e696d652d64627a026e6c0000010001 7baa840300010000000100000377777709616e696d652d64627a026e6c0000010001c01a00060001000038400036026e730f646f6d61696e2d7265676973747279c01a0a686f73746d6173746572c0310bf1e540000070800000384000278d0000003840 44879 0c1a0000000100000000000004686f6d65066863636e6574026e6c0000010001 0c1a8000000100000002000004686f6d65066863636e6574026e6c0000010001c011000200010001518000180661757468313003646e7307696e7465726e6c036e657400c0110002000100015180000906617574683230c033 44880 63ff00000001000000000000026e73057972616d73026e6c0000010001 63ff80000001000000020000026e73057972616d73026e6c0000010001c00f0002000100015180001103646e7307626974626f6f6d036e657400c00f0002000100015180000704646e7332c02d 44881 cf4e00000001000000000000046d61696c076d6f62696c6572026e6c0000010001 cf4e80000001000000020000046d61696c076d6f62696c6572026e6c0000010001c0110002000100015180000f026e7306777367617465036e657400c01100020001000151800006036e7332c030 44882 49da000000010000000000000677656c6c6572066e7434616c6c026e6c0000010001 49da800000010000000200020677656c6c6572066e7434616c6c026e6c0000010001c01300020001000151800005026e73c013c0130002000100015180000d036e733206787334616c6cc01ac02e00010001000151800004c26d3402c03f00010001000151800004c26d0963 44883 2f5500000001000000000000066962626e6574026e6c0000010001 2f5580000001000000020000066962626e6574026e6c0000010001c00c0002000100015180000b026e73057972616d73c013c00c0002000100015180000b026e73026e6c036e657400 44884 7e6600000001000000000000026e7306636f62776562026e6c0000010001 7e6680000001000000020001026e7306636f62776562026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800011026e73087363686970686f6c036e657400c00c0001000100015180000450f26001 44885 f20000000001000000000000036e733306636f62776562026e6c0000010001 f20080000001000000020001036e733306636f62776562026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800011026e73087363686970686f6c036e657400c02b0001000100015180000450f26001 44886 741000100001000000000001026e7308767575727765726b026e6c00000100010000290800000080000000 741080000001000000030002026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa02020000291000000000000000 44887 6eed00100001000000000001036e733208767575727765726b026e6c00000100010000290800000080000000 6eed80000001000000030002036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa02020000291000000000000000 44888 5ad1000000010000000000000a63726173686561676c65026e6c0000060001 5ad1840300010000000100000a63726173686561676c65026e6c0000060001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 44889 0b4a00000001000000000000036e733109756e69736f75726365026e6c0000010001 0b4a80000001000000020000036e733109756e69736f75726365026e6c0000010001c0100002000100015180000d036e7331036b706e036e657400c01000020001000151800006036e7332c032 44890 3ee400000001000000000000037777770f6b616e6a657276616e64657765656b026e6c0000010001 3ee480000001000000020002037777770f6b616e6a657276616e64657765656b026e6c0000010001c0100002000100015180000b036e7331046e732d31c020c01000020001000151800006036e7332c038c034000100010001518000045045a0cdc04b00010001000151800004d4cceec8 44891 91b2000000010000000000000377777707746f7067616d65026e6c0000010001 91b2800000010000000200000377777707746f7067616d65026e6c0000010001c0100002000100015180000f02763109706365787472656d65c018c01000020001000151800005027632c02f 44892 528900000001000000000000026e7308767575727765726b026e6c0000010001 528980000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 44893 fb1200000001000000000000036e733208767575727765726b026e6c0000010001 fb1280000001000000030001036e733208767575727765726b026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800012036e733208767575727765726b036e657400c01000020001000151800006036e7333c042c02d000100010001518000043efa0202 44894 d6290000000100000000000003777777116c656575776172646572636f7572616e74026e6c0000010001 d6298000000100000003000303777777116c656575776172646572636f7572616e74026e6c0000010001c01000020001000151800011036e73310a6e6463686f6c64696e67c022c01000020001000151800006036e7332c03ac01000020001000151800006036e7333c03ac03600010001000151800004c1ad573dc05300010001000151800004c1ad573ec06500010001000151800004d5880089 44895 e92700000001000000000000037777770b616466697265776f726b73026e6c0000010001 e92780000001000000020002037777770b616466697265776f726b73026e6c0000010001c0100002000100015180000c026e7306787334616c6cc01cc01000020001000151800006036e7332c033c03000010001000151800004c26d0642c04800010001000151800004c26d0963 44896 18f40000000100000000000003777777046c657861026e6c0000010001 18f48000000100000003000203777777046c657861026e6c0000010001c0100002000100015180000d036e733106776964657873c015c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c02dc02900010001000151800004d4ccc0fcc05e000100010001518000043efa0703 44897 18f900000001000000000000037777770a6977616e6e6164617465026e6c0000010001 18f980000001000000020000037777770a6977616e6e6164617465026e6c0000010001c01000020001000151800011036e73330a6f70656e2d646f6f7273c01bc01000020001000151800006036e7334c033 44898 27ba000000010000000000000a7665726d65696a776562026e6c00000f0001 27ba800000010000000200020a7665726d65696a776562026e6c00000f0001c00c0002000100015180000a026e730469636d63c017c00c00020001000151800006036e7332c02ec02b000100010001518000043e643805c041000100010001518000043e643806 44899 36a300000001000000000000026e7308767575727765726b026e6c0000010001 36a380000001000000030001026e7308767575727765726b026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800012036e733208767575727765726b036e657400c00f00020001000151800006036e7333c03ec00c000100010001518000043efa0202 44900 a73900000001000000000000037777771168617264636f726567616c6c6572696573026e6c0000010001 a73980000001000000020000037777771168617264636f726567616c6c6572696573026e6c0000010001c01000020001000151800012026e73096e6c686f7374696e67036e657400c01000020001000151800006036e7331c039 44901 40f8000000010000000000000377777703707474026e6c0000010001 40f8800000010000000200000377777703707474026e6c0000010001c0100002000100015180000d03646e73036b706e03636f6d00c0100002000100015180000d036e7332036b706e036e657400 44902 bba60000000100000000000003646173026e6c00000f0001 bba68000000100000003000303646173026e6c00000f0001c00c00020001000151800010036e7331096d61726b6772616166c010c00c00020001000151800006036e7332c028c00c00020001000151800006036e7333c028c02400010001000151800004c3f13ceec04000010001000151800004c372eb43c052000100010001518000043e320e8f 44903 160a000000010000000000000a736f6e6572616d61696c026e6c0000ff0001 160a800000010000000200000a736f6e6572616d61696c026e6c0000ff0001c00c00020001000151800011036e73310774647364617461036e657400c00c00020001000151800006036e7332c02f 44904 10de00100001000000000000046a616d6f026e6c00000f0001 10de80000001000000020000046a616d6f026e6c00000f0001c00c0002000100015180000c036e7331036e6c6902646b00c00c00020001000151800006036e7332c029 44905 39d300000001000000000000047365633203646e73067073696e6574026e6c0000010001 39d380000001000000030003047365633203646e73067073696e6574026e6c0000010001c015000200010001518000070470726931c011c015000200010001518000070470726932c011c015000200010001518000070470726933c011c030000100010001518000049a0ff9a6c043000100010001518000049a0ff9aac056000100010001518000049a0ff9ae 44906 2e70000000010000000000000a647272696a6e6d6f6e64026e6c00000f0001 2e70800000010000000200020a647272696a6e6d6f6e64026e6c00000f0001c00c0002000100015180000f036e733108696e7465726d6178c017c00c00020001000151800006036e7332c02fc02b00010001000151800004505fa002c04600010001000151800004505fac02 44907 382a00100001000000000001056c69776562046e696f7a026e6c00000100010000290800000000000000 382a80000001000000030003056c69776562046e696f7a026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800002c00cc01200020001000151800014036e73300a6d756c74696b6162656c036e657400c02b000100010001518000049101d228c00c000100010001518000049101d21e0000291000000000000000 44908 e5fc00000001000000000000036e7335046372696f026e6c0000010001 e5fc80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44909 360c000000010000000000000377777703776562026e6c0000010001 360c800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44910 e13d00000001000000000000036e7335046372696f026e6c0000010001 e13d80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44911 78b60000000100000000000005622d6f6e65026e6c0000010001 78b68000000100000002000205622d6f6e65026e6c0000010001c00c00020001000151800009036e7331026973c012c00c00020001000151800006036e7332c02ac02600010001000151800004d5852102c03b00010001000151800004d5c41503 44912 34c60000000100000000000008616473657276657206776562616473026e6c0000010001 34c68000000100000002000208616473657276657206776562616473026e6c0000010001c01500020001000151800012036e73310b7669616e6574776f726b73c01cc01500020001000151800006036e7332c034c03000010001000151800004d43d0f08c04e00010001000151800004d43d19e2 44913 ca6d000000010000000000000761646469736f6e026e6c00000f0001 ca6d800000010000000200000761646469736f6e026e6c00000f0001c00c00020001000151800010036e73310673697465347503636f6d00c00c00020001000151800006036e7332c02c 44914 b1b200000001000000000000036e7332046372696f026e6c0000010001 b1b280000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44915 da2200000001000000000000037777770a72656372656174696566026e6c0000010001 da2280000001000000020000037777770a72656372656174696566026e6c0000010001c0100002000100015180000b036e7331046372696fc01bc01000020001000151800006036e7332c033 44916 508500000001000000000000036e7332046372696f026e6c0000010001 508580000001000000020000036e7332046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44917 d3c3000000010000000000000567677a6261026e6c00001c0001 d3c3800000010000000200020567677a6261026e6c00001c0001c00c0002000100015180000f036e73330874656c6562797465c012c00c00020001000151800006036e7334c02ac02600010001000151800004d5d38115c04100010001000151800004d5d38116 44918 38b000000001000000000000086d6f64657374616c026e6c00000f0001 38b080000001000000030000086d6f64657374616c026e6c00000f0001c00c0002000100015180000f036e73310570616e7361036e657400c00c00020001000151800006036e7332c02dc00c00020001000151800006036e7333c02d 44919 7ffa0000000100000000000003706f70136164766965736275726f76616e64657277616c026e6c0000010001 7ffa8000000100000003000003706f70136164766965736275726f76616e64657277616c026e6c0000010001c01000020001000151800017076e73686f73743103737432056c79636575036e657400c0100002000100015180000a076e73686f737432c040c0100002000100015180000a076e73686f737433c040 44920 08ff000000010000000000000644454d41414e024e4c0000010001 08ff800000010000000200020644454d41414e024e4c0000010001c00c0002000100015180000c026e73067574722d6978c013c00c00020001000151800006036e7332c02ac0270001000100015180000451113206c03f00010001000151800004d5c42806 44921 00b00000000100000000000003777777127a756964776573742d6e656465726c616e64026e6c0000010001 00b08000000100000002000003777777127a756964776573742d6e656465726c616e64026e6c0000010001c01000020001000151800017036e73310d6e616d65636f6d6d616e64657203636f6d00c01000020001000151800006036e7332c03b 44922 08ae00000001000000000000037777770e6b756e737467656f677261666965026e6c0000010001 08ae80000001000000020000037777770e6b756e737467656f677261666965026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c049 44923 20b800000001000000000000037777770e6b756e737467656f677261666965026e6c0000010001 20b880000001000000020000037777770e6b756e737467656f677261666965026e6c0000010001c0100002000100015180001b026e7312796f75726e616d65776562686f7374696e6703636f6d00c01000020001000151800015026e730f796f75726e616d65686f7374696e67c049 44924 287400000001000000000000036e7335046372696f026e6c0000010001 287480000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44925 151f000000010000000000000377777703776562026e6c0000010001 151f800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44926 5bc000000001000000000000036e7335046372696f026e6c0000010001 5bc080000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44927 dfd100000001000000000000036e7332076e65746578706f026e6c0000010001 dfd180000001000000020002036e7332076e65746578706f026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043efa0ac2c00c000100010001518000043efa0a82 44928 a47800000001000000000000026e73076e65746578706f026e6c0000010001 a47880000001000000020002026e73076e65746578706f026e6c0000010001c00f00020001000151800002c00cc00f00020001000151800006036e7332c00fc00c000100010001518000043efa0ac2c039000100010001518000043efa0a82 44929 101f00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 101f80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44930 ed8800000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 ed8880000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44931 c72e00000001000000000000037777770c73706f7274706c616e6e6572026e6c0000010001 c72e80000001000000020002037777770c73706f7274706c616e6e6572026e6c0000010001c0100002000100015180000b036e73310477656233c01dc01000020001000151800006036e7332c035c03100010001000151800004d436240ec04800010001000151800004c2b262ef 44932 c21c00000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 c21c80000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44933 746b000000010000000000000e63656e747261616c626568656572026e6c0000010001 746b800000010000000300030e63656e747261616c626568656572026e6c0000010001c00c00020001000151800012047072693103646e73067073696e6574c01bc00c000200010001518000070470726932c034c00c000200010001518000070470726933c034c02f000100010001518000049a0ff9a6c04d000100010001518000049a0ff9aac060000100010001518000049a0ff9ae 44934 610400000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 610480000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44935 6e330000000100000000000003777777067a7376737571026e6c0000010001 6e338403000100000001000003777777067a7376737571026e6c0000010001c01700060001000038400036026e730f646f6d61696e2d7265676973747279c0170a686f73746d6173746572c02e0bf1e540000070800000384000278d0000003840 44936 e785000000010000000000000a6e6574776f726b657273026e6c00000f0001 e785800000010000000200000a6e6574776f726b657273026e6c00000f0001c00c0002000100015180000b026e73026e6c036e657400c00c0002000100015180001206617574683630026e73026e6c027575c031 44937 00e200000001000000000000096772616669656b6173026e6c00000f0001 00e280000001000000020001096772616669656b6173026e6c00000f0001c00c00020001000151800005026e73c00cc00c0002000100015180000d036e7332036b706e036e657400c02a00010001000151800004c1ac0103 44938 b36200000001000000000000037777770b6772656d696f2d756e696f026e6c0000010001 b36280000001000000020000037777770b6772656d696f2d756e696f026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 44939 cde50000000100000000000008706172746e657273076d6f62656c6c65026e6c0000010001 cde58000000100000002000008706172746e657273076d6f62656c6c65026e6c0000010001c01500020001000151800010036e7331096d6f62696c6c696f6ec01dc01500020001000151800006036e7332c035 44940 c2bf00000001000000000000046265726b026e6c0000ff0001 c2bf80000001000000020000046265726b026e6c0000ff0001c00c0002000100015180001e0673696e67656c09616d7374657264616d0764617461776562036e657400c00c0002000100015180000805726f6b696ec02c 44941 1f880000000100000000000003626c3102626c06787334616c6c026e6c0000010001 1f888000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 44942 0c89000000010000000000000850434f4f535431310a4f6f737465696e646572026e6c0000060001 0c89840300010000000100000850434f4f535431310a4f6f737465696e646572026e6c0000060001c02000060001000038400036026e730f646f6d61696e2d7265676973747279c0200a686f73746d6173746572c0370bf1e540000070800000384000278d0000003840 44943 da470000000100000000000003777777176175746f6d6174657269616c656e7265696a6e64657273026e6c0000010001 da478000000100000002000203777777176175746f6d6174657269616c656e7265696a6e64657273026e6c0000010001c0100002000100015180000a036e733103686978c028c01000020001000151800006036e7332c040c03c00010001000151800004d5a0da0ac0520001000100015180000451112ec3 44944 0e8f000000010000000000000673657863616d06706167696e61026e6c0000010001 0e8f800000010000000300030673657863616d06706167696e61026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c02e000100010001518000043e45a282c040000100010001518000043e45a283c052000100010001518000043e45a284 44945 9a5b28000001000200000000026e6c00000600010969772d30303137323206746b74657374026e6c00000500fe000000000000c01400010001000000000004c0a800ce 9a5ba8040000000000000000 44946 5e2300000001000000000000036e733503777873026e6c0000010001 5e2380000001000000030003036e733503777873026e6c0000010001c01000020001000151800007046e733038c010c01000020001000151800007046e733039c010c01000020001000151800006036e7334c010c02800010001000151800004c3790128c03b00010001000151800004c3790143c04e00010001000151800004d5ef9a65 44947 2e4500000001000000000000056c69776562046e696f7a026e6c0000010001 2e4580000001000000030002056c69776562046e696f7a026e6c0000010001c01200020001000151800006036e7331c012c01200020001000151800002c00cc01200020001000151800014036e73300a6d756c74696b6162656c036e657400c02b000100010001518000049101d228c00c000100010001518000049101d21e 44948 000000007002faf0b79b0000020405b401010402 000080010000000000000000 44949 000328000001000200000000026e6c00000600010850434f4f535431310a4f6f737465696e646572026e6c00000500fe000000000000c014000100010000000000045073bc50 0003a8040000000000000000 44950 93bd0000000100000000000005736d7470310874656c6562797465026e6c0000010001 93bd8000000100000002000205736d7470310874656c6562797465026e6c0000010001c01200020001000151800006036e7333c012c01200020001000151800006036e7334c012c02f00010001000151800004d5d38115c04100010001000151800004d5d38116 44951 14130000000100000000000003777777077374616f6b6179026e6c0000010001 14138403000100000001000003777777077374616f6b6179026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 44952 b8a596575010faf095520000000000000000 44953 f7d4000000010000000000000d6175746f74656c656772616166026e6c0000010001 f7d4800000010000000200000d6175746f74656c656772616166026e6c0000010001c00c00020001000151800013036e73300974656c656772616166036e657400c00c00020001000151800006036e7331c032 44954 b8a596575018faf088240000008e42e5000000010001000000000f313038323333313735383631302d330000f900010f313038323333313735383631302d330000f900ff00000000005203677373096d6963726f736f667403636f6d00403af53e403c46be00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000 44955 5d2100000001000000000000037777770962697a617273697465026e6c0000010001 5d2180000001000000030003037777770962697a617273697465026e6c0000010001c0100002000100015180000c036e7331056d61786573c01ac01000020001000151800006036e7332c032c01000020001000151800006036e7333c032c02e000100010001518000045045402ec046000100010001518000045045402fc058000100010001518000045045440a 44956 961600000001000000000000037777770770657567656f74026e6c0000010001 961680000001000000020002037777770770657567656f74026e6c0000010001c0100002000100015180000e036e73310768756d616e2d69c018c01000020001000151800006036e7332c030c02c00010001000151800004c1ad2884c04600010001000151800004c1ad2886 44957 773500000001000000000000037777770b336c636f6d707574657273026e6c0000010001 773580000001000000020000037777770b336c636f6d707574657273026e6c0000010001c0100002000100015180000e05646e732d31056c61646f74c01cc0100002000100015180000805646e732d32c036 44958 b8a596655011fae294c10000000000000000 44959 000000007002faf07bfa00000204056401010402 000080010000000000000000 44960 000000007002faf0ae140000020405b401010402 000080010000000000000000 44961 157400000001000000000000146e69657577736272696576656e73657276696365026e6c0000010001 157480000001000000030001146e69657577736272696576656e73657276696365026e6c0000010001c00c0002000100015180000e026e7308767575727765726bc021c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c053c035000100010001518000043efa0202 44962 eef4000000010000000000000e666f72626f2d6c696e6f6c65756d026e6c00000f0001 eef4800000010000000200010e666f72626f2d6c696e6f6c65756d026e6c00000f0001c00c0002000100015180000d026e73046575726f036e657400c00c0002000100015180000d026e73076575726f6e6574c01bc04800010001000151800004c2860043 44963 b8a596665010fae294c00000000000000000 44964 b8a674795010fd5c78d20000000000000000 b8a6f4740000000000000000 44965 b8a70de15010faf014400000000000000000 b8a78de40000000000000000 44966 b62b00000001000000000000036e73320768756d616e2d69026e6c00001c0001 b62b80000001000000020002036e73320768756d616e2d69026e6c00001c0001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c1ad2884c00c00010001000151800004c1ad2886 44967 0ee500000001000000000000036e73320768756d616e2d69026e6c0000260001 0ee580000001000000020002036e73320768756d616e2d69026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c00010001000151800004c1ad2884c00c00010001000151800004c1ad2886 44968 6d2e00000001000000000000036e73310768756d616e2d69026e6c00001c0001 6d2e80000001000000020002036e73310768756d616e2d69026e6c00001c0001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c1ad2884c03a00010001000151800004c1ad2886 44969 1a4c00000001000000000000036e73310768756d616e2d69026e6c0000260001 1a4c80000001000000020002036e73310768756d616e2d69026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c1ad2884c03a00010001000151800004c1ad2886 44970 cf7700000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 cf7780000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44971 b8a70de15018faf0b7340000008e93c3000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af53e403c46be00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000 b8a78de40000000000000000 44972 202000000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 202080000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44973 3d250000000100000000000004646e7331057368656c6c026e6c0000010001 3d258000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 44974 80d5000000010000000000000377777707626f6f6b6d616e026e6c0000010001 80d5800000010000000300020377777707626f6f6b6d616e026e6c0000010001c0100002000100015180000d036e733106776964657873c018c01000020001000151800010036e733206776964657873036e657400c01000020001000151800006036e7333c030c02c00010001000151800004d4ccc0fcc061000100010001518000043efa0703 44975 393900000001000000000000036e733203736369036b756e026e6c0000010001 393980000001000000030003036e733203736369036b756e026e6c0000010001c0140002000100015180000f08636170796261726103756369c014c01400020001000151800006036e7331c010c0140002000100015180000e036e733107737572666e6574c018c02c0001000100015180000483ae3c15c0470001000100015180000483aee004c05900010001000151800004c0576a65 44976 cf490000000100000000000007616e737765727303736369036b756e026e6c0000010001 cf498000000100000003000307616e737765727303736369036b756e026e6c0000010001c0180002000100015180000f08636170796261726103756369c018c01800020001000151800006036e7331c014c0180002000100015180000e036e733107737572666e6574c01cc0300001000100015180000483ae3c15c04b0001000100015180000483aee004c05d00010001000151800004c0576a65 44977 b8a674795018fd5c78830000008f059c000000010001000000000e3931303533333036363737302d330000f900010e3931303533333036363737302d330000f900ff00000000005503677373096d6963726f736f667403636f6d00403af386403c45060003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431314f4f535445494e4445520000 b8a6f4740000000000000000 44978 ecdb0000000100000000000008636f6d636f726465026e6c00000f0001 ecdb8000000100000003000108636f6d636f726465026e6c00000f0001c00c0002000100015180000e026e7308767575727765726bc015c00c00020001000151800012036e733208767575727765726b036e657400c00c00020001000151800006036e7333c047c029000100010001518000043efa0202 44979 b8a70def5011fae213af0000000000000000 b8a78de40000000000000000 44980 f95e00000001000000000000036e7335046372696f026e6c0000010001 f95e80000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44981 3611000000010000000000000377777703776562026e6c0000010001 3611800000010000000200000377777703776562026e6c0000010001c0100002000100015180000b036e7335046372696fc014c01000020001000151800006036e7336c02c 44982 bcb900000001000000000000036e7335046372696f026e6c0000010001 bcb980000001000000020000036e7335046372696f026e6c0000010001c0100002000100015180000d056372696f31047372767ac015c01000020001000151800008056372696f32c02f 44983 000000007002faf0e3ce0000020405b401010402 000080010000000000000000 44984 b8a674875011fd4e78400000000000000000 b8a6f4840000000000000000 44985 ec2500000001000000000000036e73310c616374697665646f6d61696e026e6c0000010001 ec2580000001000000030000036e73310c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44986 f07600000001000000000000036e73320c616374697665646f6d61696e026e6c0000010001 f07680000001000000030000036e73320c616374697665646f6d61696e026e6c0000010001c01000020001000151800019036e73310f616374697665646f6d61696e646e73036e657400c01000020001000151800006036e7332c035c01000020001000151800006036e7333c035 44987 000000007002faf0fefc00000204056401010402 000080010000000000000000 44988 6e010000000100000000000003777777096b696e6465726e6574026e6c0000010001 6e018000000100000003000003777777096b696e6465726e6574026e6c0000010001c01000020001000151800019096d7476692d646e7331096d74766575726f706503636f6d00c01000020001000151800012047365633103646e73067073696e6574c01ac010000200010001518000070473656332c058 44989 d85900000001000000000000036e7331096d6f62696c6c696f6e026e6c0000010001 d85980000001000000030003036e7331096d6f62696c6c696f6e026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 44990 2cf300000001000000000000036e7332096d6f62696c6c696f6e026e6c0000010001 2cf380000001000000030003036e7332096d6f62696c6c696f6e026e6c0000010001c0100002000100015180000e076e73617574683103626974c01ac0100002000100015180000a076e736175746832c036c0100002000100015180000a076e736175746833c036c02e00010001000151800004d5880c33c04800010001000151800004d5880c3bc05e00010001000151800004d4ccc00b 44991 b8a70df05010fae213ae0000000000000000 b8a78df40000000000000000 44992 58e00000000100000000000105666c6e6574026e6c00000f00010000291000000000000000 58e08000000100000002000305666c6e6574026e6c00000f0001c00c0002000100015180001103646e730a636f6e63657074736661c012c00c0002000100015180001004646e733208636f6e6365707473c012c02600010001000151800004d5c51c03c04300010001000151800004d5c51e1c0000291000000000000000 44993 b8a674885010fd4e783f0000000000000000 b8a6f4840000000000000000 44994 b8a7ad145010faf0aac60000000000000000 44995 b8a87d065010fd5cf3450000000000000000 b8a8fd040000000000000000 44996 b8a7ad145018faf0518f0000008e8fef000000010001000000000f313038323333313735383631302d320000f900010f313038323333313735383631302d320000f900ff00000000005203677373096d6963726f736f667403636f6d00403af53e403c46be00030000002f4e544c4d535350000100000097b208e00600060029000000090009002000000049572d303031373232544b544553540000 44997 b8a87d065018fd5cc9920000008f3100000000010001000000000e3931303533333036363737302d320000f900010e3931303533333036363737302d320000f900ff00000000005503677373096d6963726f736f667403636f6d00403af386403c45060003000000324e544c4d535350000100000097b208e00a000a0028000000080008002000000050434f4f535431314f4f535445494e4445520000 b8a8fd040000000000000000 44998 822f000000010000000000000b64656a6f6e67696e747261026e6c00000f0001 822f800000010000000200020b64656a6f6e67696e747261026e6c00000f0001c00c0002000100015180000e036e733107626265796f6e64c018c00c00020001000151800006036e7332c030c02c000100010001518000043eb1900bc046000100010001518000043eb19002 44999 b8a7ad225011fae2aa350000000000000000 45000 c6790000000100000000000003626c3102626c06787334616c6c026e6c0000010001 c6798000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 unbound-1.13.1/testdata/iter_scrub_dname_rev.rpl0000644000175000017500000001267514010434640021423 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test scrub of reversed DNAME and CNAME in answer section RANGE_BEGIN 0 100 ; all adresses ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; x.y.example.com. IN A ; SECTION AUTHORITY ; com. IN NS a.gtld-servers.net. ; SECTION ADDITIONAL ; a.gtld-servers.net. IN A 192.5.6.30 ; ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; x.y.example.com. IN A ; SECTION AUTHORITY ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.y.example.com. IN A SECTION ANSWER x.y.example.com. IN CNAME x.z.example.com. y.example.com. DNAME z.example.com. y.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. ALCQdkXflwgQVKCFeYgCAx3ipuoPsGJVZjNeUriXE4nd94h50zJWDJ4= ;{id = 2854} x.z.example.com. IN A 10.20.30.0 SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AA3IkI13XbKFU5NSqBVA9oM1WiyEKCy4DYFOAdihDf6uHps9lce3kEc= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. AKcUlwrSz2xYKnQ7b7oMblRa0rKjfUNT900bIkGjLKLWDUGc8mKZE2M= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.z.example.com. IN A SECTION ANSWER x.z.example.com. IN A 10.20.30.40 x.z.example.com. 3600 IN RRSIG A 3 4 3600 20070926134150 20070829134150 2854 example.com. ADZ12PiZGEjVUyLLYkct/SBE2WT4D5IkMOKdcl0dzQ0XRAC5y/0bS7A= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ADesKDqTIOswg5QC6eTIQvGu3DHsPMz1htpHLcDJwE8IpURTnMuD0Mw= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. ACYkeSRNcLVXeL+R9AM9e1GbxTwXNXpy1M5hcyuVkhkY2d5jGrkye7I= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ACHcJehLt4Hz+rAdxMPE96o7HJAEFohFXbxrKYlG+0WLfYAvH2nxU8k= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. AInP69g8uR1n/aRg4gmGu8UoM+zZYgjOqbNN2IvOxw3bk/q+g05jKg0= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION x.y.example.com. IN A ENTRY_END STEP 90 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO SECTION QUESTION x.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. y.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. ALCQdkXflwgQVKCFeYgCAx3ipuoPsGJVZjNeUriXE4nd94h50zJWDJ4= ;{id = 2854} x.y.example.com. IN CNAME x.z.example.com. x.z.example.com. IN A 10.20.30.40 x.z.example.com. 3600 IN RRSIG A 3 4 3600 20070926134150 20070829134150 2854 example.com. ADZ12PiZGEjVUyLLYkct/SBE2WT4D5IkMOKdcl0dzQ0XRAC5y/0bS7A= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ADesKDqTIOswg5QC6eTIQvGu3DHsPMz1htpHLcDJwE8IpURTnMuD0Mw= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. ACYkeSRNcLVXeL+R9AM9e1GbxTwXNXpy1M5hcyuVkhkY2d5jGrkye7I= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_emptydp.rpl0000644000175000017500000001564114010434640017743 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator with empty delegation from cache. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. ; sneak in some data into the cache to simulate partial data after timeouts ; gets scrubbed anyway. example.net. NS ns.example.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ; com zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ENTRY_END ; net zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ; example.net. zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER ENTRY_END ; example.com. zone ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ; bogus ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ; make sure glue fetch is done. STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.net. IN AAAA ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_deleg_nons.rpl0000644000175000017500000002251314010434640020211 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with unsigned delegation with no NS bit in NSEC ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns3.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION foo.www.example.com. IN A SECTION ANSWER foo.www.example.com. IN A 1.2.3.4 ; unsigned, no delegation. ENTRY_END ; DS query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN DS SECTION ANSWER SECTION AUTHORITY ; NSEC3 here: 1 0 1 1234 ; www.example.com. -> h8c0nvkuibedn7ia997iegdl7h0i6h8b. h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE= ;www.example.com. IN NSEC zzz.example.com. RRSIG NSEC ;www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA9Dm626WvHXHPQXJkVyjyTqJ/dCHfZgt6PWCn9gd8ZmPxyl3STW3iI= example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; DS query for foo.www.example.com returns the referral without record. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION foo.www.example.com. IN DS SECTION ANSWER SECTION AUTHORITY mipf0g23547qunto04vboegh9vadsrpo.example.com. IN NSEC3 1 0 1 1234 mipf0g23547qunto04vboegh9vadsrpq TXT mipf0g23547qunto04vboegh9vadsrpo.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. ADc6JrdKuTmIJe4sAjpKZSUZKdHdfhmREk2F5A5cftU9053b0/3ILQM= example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} ;www.example.com. IN NS ns3.example.com. ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE= ;SECTION ADDITIONAL ;ns3.example.com. IN A 1.2.3.5 ; NSEC3 here: 1 0 1 1234 ; www.example.com. -> h8c0nvkuibedn7ia997iegdl7h0i6h8b. ; *.www.example.com. -> cg2lpgpr8k7ck69h7bqu3od9pkht2o79. ; foo.www.example.com. -> mipf0g23547qunto04vboegh9vadsrpo. ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. IN NSEC3 1 0 1 1234 h8c0nvkuibedn7ia997iegdl7h0i6h8c TXT ;h8c0nvkuibedn7ia997iegdl7h0i6h8b.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AH+bPQZST3COwJ1vSe05N7E5BM2GmXzJUKsiWwXKrmm/XjYKSxSuNPE= ;cg2lpgpr8k7ck69h7bqu3od9pkht2o78.example.com. IN NSEC3 1 0 1 1234 cg2lpgpr8k7ck69h7bqu3od9pkht2o89 TXT ;cg2lpgpr8k7ck69h7bqu3od9pkht2o78.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. ACzxBHMyDB5tTrXijboPSsB0ws1lJe3/B62QNAMcZv7l9DYNDEDKsXY= ;mipf0g23547qunto04vboegh9vadsrph.example.com. IN NSEC3 1 0 1 1234 mipf0g23547qunto04vboegh9vadsrpp TXT ;mipf0g23547qunto04vboegh9vadsrph.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134150 20070829134150 2854 example.com. AG2B7lrIVtBgg+WIt0yNYekGDBKkY7xkKfI0GLQ8q3brGy/+jubxba0= ;www.example.com. IN NSEC zzz.example.com. RRSIG NSEC ;www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA9Dm626WvHXHPQXJkVyjyTqJ/dCHfZgt6PWCn9gd8ZmPxyl3STW3iI= ;example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 ;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END ; ns3.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION foo.www.example.com. IN DS SECTION ANSWER SECTION AUTHORITY foo.www.example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION foo.www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION foo.www.example.com. IN A SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_qds_badanc.rpl0000644000175000017500000002007014010434640020147 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with DS query and a bad anchor ; The anchor is the wrong side of the zone cut; no parent anchor. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to DS query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+005+30899.key0000644000175000017500000000023614010434640020614 0ustar wouterwouterexample.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} unbound-1.13.1/testdata/auth_xfr_ixfr.rpl0000644000175000017500000002102514010434640020077 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: master: 1.2.3.44 ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.5 mail.example.com. 3600 IN A 1.2.3.6 mail.example.com. 3600 IN A 1.2.3.7 zup.example.com. 3600 IN A 1.2.3.4 yyy.example.com. 3600 IN A 1.2.3.4 yyy.example.com. 3600 IN AAAA 2001:db8::5 r1.example.com. 3600 IN A 1.2.3.4 r1.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= r2.example.com. 3600 IN A 1.2.3.4 r2.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= r2.example.com. 3600 IN RRSIG AAAA 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= r3.example.com. 3600 IN A 1.2.3.4 r3.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= r3.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12345 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= add.example.com. 3600 IN A 1.2.3.4 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with IXFR ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER ; serial, refresh, retry, expire, minimum example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN IXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 www.example.com. IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.6 zup.example.com. 3600 IN A 1.2.3.4 yyy.example.com. 3600 IN AAAA 2001:db8::5 r1.example.com. 3600 IN A 1.2.3.4 r2.example.com. 3600 IN A 1.2.3.4 r3.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12345 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 EXTRA_PACKET REPLY QR AA NOERROR SECTION QUESTION example.com. IN IXFR SECTION ANSWER www.example.com. IN A 1.2.3.5 mail.example.com. 3600 IN A 1.2.3.8 mail.example.com. IN AAAA 2001:db8::5 add2.example.com. 3600 IN A 1.2.3.4 example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 TIME_PASSES ELAPSE 1 ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END STEP 30 TIME_PASSES ELAPSE 3600 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.5 ENTRY_END ; the zonefile was updated with new contents STEP 70 CHECK_TEMPFILE example.com FILE_BEGIN example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. add.example.com. 3600 IN A 1.2.3.4 add2.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.5 mail.example.com. 3600 IN A 1.2.3.7 mail.example.com. 3600 IN A 1.2.3.8 mail.example.com. 3600 IN AAAA 2001:db8::5 r1.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= r2.example.com. 3600 IN RRSIG AAAA 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= r2.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= r3.example.com. 3600 IN A 1.2.3.4 r3.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk= www.example.com. 3600 IN A 1.2.3.5 yyy.example.com. 3600 IN A 1.2.3.4 FILE_END SCENARIO_END unbound-1.13.1/testdata/fwd_oneport.tdir/0000755000175000017500000000000014010434640017777 5ustar wouterwouterunbound-1.13.1/testdata/fwd_oneport.tdir/fwd_oneport.testns0000644000175000017500000000173114010434640023571 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=1 SECTION QUESTION www1 IN A SECTION ANSWER www1 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=1 SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.50 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=1 SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.60 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=1 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.70 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=1 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.80 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=1 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.90 ENTRY_END unbound-1.13.1/testdata/fwd_oneport.tdir/fwd_oneport.pre0000644000175000017500000000162414010434640023040 0ustar wouterwouter# #-- fwd_oneport.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT -f 9 fwd_oneport.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_oneport.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log sleep 2 unbound-1.13.1/testdata/fwd_oneport.tdir/fwd_oneport.post0000644000175000017500000000072514010434640023240 0ustar wouterwouter# #-- fwd_oneport.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID # find all extra forked testns and kill them. pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` for p in $pidlist; do kill_pid $p done # kill unbound kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_oneport.tdir/fwd_oneport.conf0000644000175000017500000000056114010434640023176 0ustar wouterwouterserver: verbosity: 4 num-threads: 1 interface: 127.0.0.1 port: @PORT@ outgoing-range: 2 outgoing-port-avoid: 0-65535 outgoing-port-permit: 20675 directory: "" pidfile: "unbound.pid" chroot: "" username: "" num-queries-per-thread: 1024 use-syslog: no do-not-query-localhost: no udp-connect: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_oneport.tdir/fwd_oneport.dsc0000644000175000017500000000046514010434640023025 0ustar wouterwouterBaseName: fwd_oneport Version: 1.0 Description: Forward udp over one port with 2 fds CreationDate: Mon Apr 14 10:39:27 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_oneport.pre Post: fwd_oneport.post Test: fwd_oneport.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_oneport.tdir/fwd_oneport.test0000644000175000017500000000441214010434640023227 0ustar wouterwouter# #-- fwd_oneport.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test # skip the single query test # so that all three queries get timeouts during the later test. # #echo "> dig www1.example.com." #dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile #echo "> cat logfiles" #cat fwd.log #cat unbound.log #echo "> check answer for single query" #if grep "10.20.30.40" outfile; then #echo "OK" #else #echo "Not OK" #exit 1 #fi echo "> do queries" dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & digpid1=$! dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & digpid2=$! dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & digpid3=$! dig @localhost -p $UNBOUND_PORT www4.example.com. >outfile4 & digpid4=$! dig @localhost -p $UNBOUND_PORT www5.example.com. >outfile5 & digpid5=$! dig @localhost -p $UNBOUND_PORT www6.example.com. >outfile6 & digpid6=$! sleep 12 kill -9 $digpid1 kill -9 $digpid2 kill -9 $digpid3 kill -9 $digpid4 kill -9 $digpid5 kill -9 $digpid6 echo "> cat outfile1" cat outfile1 echo "> cat outfile2" cat outfile2 echo "> cat outfile3" cat outfile3 echo "> cat outfile4" cat outfile4 echo "> cat outfile5" cat outfile5 echo "> cat outfile6" cat outfile6 echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check for ID bit collisions" grep "pending reply" unbound.log > ids numsend=`cat ids | wc -l` cat ids | awk '{print $8};' | sort -u > ids2 numuniq=`cat ids2 | wc -l` if test $numuniq -ne $numsend; then echo "got a ID number clash. could not do test, sorry" exit 0 fi echo "> check answers for queries" if grep "10.20.30.40" outfile1; then echo "1 is OK" else echo "1 is not OK" exit 1 fi if grep "10.20.30.50" outfile2; then echo "2 is OK" else echo "2 is not OK" exit 1 fi if grep "10.20.30.60" outfile3; then echo "3 is OK" else echo "3 is not OK" exit 1 fi if grep "10.20.30.70" outfile4; then echo "4 is OK" else echo "4 is not OK" exit 1 fi if grep "10.20.30.80" outfile5; then echo "5 is OK" else echo "5 is not OK" exit 1 fi if grep "10.20.30.90" outfile6; then echo "6 is OK" else echo "6 is not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/val_ds_sha2.crpl0000644000175000017500000001561714010434640017571 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-dsa: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with SHA256 DS digest ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; SHA256 DS for sub.example.com. sub.example.com. 3600 IN DS 30899 5 2 51be8e847cc663f2775d0f2b6d15e41553c97ecb99b8dd667f18244e2f652033 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. AJ6FL7yKjrpEEO8WMKlG7TVZoGjgFblJeu0rkJCmJxfdeh6ysUlWQWs= ;{id = 2854} ; SHA1 DS for sub.example.com. ;sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/doh_downstream_endpoint.tdir/0000755000175000017500000000000014010434640022366 5ustar wouterwouterunbound-1.13.1/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.conf0000644000175000017500000000057214010434640030156 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1@@PORT@ https-port: @PORT@ tls-service-key: "unbound_server.key" tls-service-pem: "unbound_server.pem" use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no http-endpoint: "/abc" local-zone: "example.net" static local-data: "www.example.net. IN A 1.2.3.1" unbound-1.13.1/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.post0000644000175000017500000000064314010434640030215 0ustar wouterwouter# #-- doh_downstream.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.test0000644000175000017500000000251214010434640030204 0ustar wouterwouter# #-- doh_downstream.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) echo "> query www.example.net. endpoint /dns-query" $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound.log echo "Not OK" exit 1 fi if grep "status 404" outfile; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" echo "> query www.example.net. endpoint /abc" $PRE/dohclient -e /abc -s 127.0.0.1 -p $UNBOUND_PORT www.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound.log echo "Not OK" exit 1 fi if grep ":status 200" outfile; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.pre0000644000175000017500000000141614010434640030015 0ustar wouterwouter# #-- doh_downstream.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 1 UNBOUND_PORT=$RND_PORT echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < doh_downstream_endpoint.conf > ub.conf # start unbound in the background $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_unbound_up unbound.log unbound-1.13.1/testdata/doh_downstream_endpoint.tdir/unbound_server.key0000644000175000017500000000156714010434640026151 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA 3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS 6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP 0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.dsc0000644000175000017500000000052714010434640030002 0ustar wouterwouterBaseName: doh_downstream Version: 1.0 Description: Test DNS-over-HTTPS query processing, endpoint setting CreationDate: Mon Jun 12 12:00:00 CET 2020 Maintainer: Category: Component: CmdDepends: Depends: Help: Pre: doh_downstream_endpoint.pre Post: doh_downstream_endpoint.post Test: doh_downstream_endpoint.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/doh_downstream_endpoint.tdir/unbound_server.pem0000644000175000017500000000115314010434640026131 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== -----END CERTIFICATE----- unbound-1.13.1/testdata/Kexample.com.+003+02854.ds0000644000175000017500000000011214010434640020407 0ustar wouterwouterexample.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b unbound-1.13.1/testdata/Kexample.com.+005+16486.key0000644000175000017500000000024214010434640020605 0ustar wouterwouterexample.com. 3600 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} unbound-1.13.1/testdata/dnstap.tdir/0000755000175000017500000000000014010434640016742 5ustar wouterwouterunbound-1.13.1/testdata/dnstap.tdir/unbound_server.key0000644000175000017500000000463314010434640022522 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap.tdir/dnstap.post0000644000175000017500000000075414010434640021150 0ustar wouterwouter# #-- dnstap.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log exit 0 unbound-1.13.1/testdata/dnstap.tdir/unbound_server.pem0000644000175000017500000000246614010434640022515 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap.tdir/unbound_control.pem0000644000175000017500000000247614010434640022670 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap.tdir/dnstap.conf0000644000175000017500000000201714010434640021102 0ustar wouterwouterserver: verbosity: 2 num-threads: 3 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap.tdir/dnstap.dsc0000644000175000017500000000043414010434640020727 0ustar wouterwouterBaseName: dnstap Version: 1.0 Description: test dnstap socket communication CreationDate: Tue Jan 21 13:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap.pre Post: dnstap.post Test: dnstap.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnstap.tdir/dnstap.test0000644000175000017500000000552214010434640021140 0ustar wouterwouter# #-- dnstap.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> wait for log to happen on timer" sleep 3 echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> make 10 queries to spread them over threads" dig @127.0.0.1 -p $UNBOUND_PORT q1.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q2.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q3.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q4.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q5.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q6.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q7.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q8.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q9.example.net. dig @127.0.0.1 -p $UNBOUND_PORT q10.example.net. echo "> wait for log to happen on timer" sleep 3 for x in q1 q2 q3 q4 5 q6 q7 q8 q9 q10; do if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 10; fi if grep "$x.example.net" tap.log; then echo "yes it is in tap.log"; else echo "$x.example.net. information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi done echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap.tdir/dnstap.pre0000644000175000017500000000354014010434640020745 0ustar wouterwouter# #-- dnstap.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up and make the dnstap.socket file wait_server_up "tap.errlog" "creating unix socket" if test ! -S dnstap.socket; then echo "the dnstap.socket file does not exist!" fi # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < dnstap.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf -vvvv >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap.tdir/unbound_control.key0000644000175000017500000000462714010434640022677 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap.tdir/dnstap.testns0000644000175000017500000000050314010434640021473 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/host_file.template0000644000175000017500000000050014010434640020214 0ustar wouterwouter# list of hosts and options for each. You need keyed ssh access to each. # It must be one tab delimited only. Very strict syntax. # hostname description directory variables linux.example.com Linux Fedora Core i386 src/unbound/trunk solaris.example.com Solaris 10 sparc64 nsd_trunk LDNS=/var/local/ldns unbound-1.13.1/testdata/iter_ns_spoof.rpl0000644000175000017500000001230414010434640020100 0ustar wouterwouter; config options server: harden-referral-path: yes target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test NS record spoof protection. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; for simplicity the root server is authoritative for root-servers.net ; and also for gtld-servers.net ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.50 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ;; answer to the spoofed query ; spoofed reply answer. ; here we put it in the nameserver for ease. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION bad123.example.com. IN A SECTION ANSWER bad123.example.com. IN A 6.6.6.6 SECTION AUTHORITY ; evil NS set. example.com. IN NS bad123.example.com. ENTRY_END RANGE_END ; evil server RANGE_BEGIN 0 100 ADDRESS 6.6.6.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 6.6.6.6 SECTION AUTHORITY example.com. IN NS bad123.example.com. SECTION ADDITIONAL bad123.example.com. IN A 6.6.6.6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 6.6.6.6 SECTION AUTHORITY example.com. IN NS bad123.example.com. SECTION ADDITIONAL bad123.example.com. IN A 6.6.6.6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION bad123.example.com. IN A SECTION ANSWER bad123.example.com. IN A 6.6.6.6 SECTION AUTHORITY ; evil NS set. example.com. IN NS bad123.example.com. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; spoofed query STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION bad123.example.com. IN A ENTRY_END ; recursion happens here. STEP 30 CHECK_ANSWER ENTRY_BEGIN ; no matching here, just accept the answer to the spoofed query. ; it is wrong, but only one query ... ; this test is to check further on, that we still have the right nameserver. ;MATCH all REPLY QR RD RA NOERROR SECTION QUESTION bad123.example.com. IN A SECTION ANSWER bad123.example.com. IN A 6.6.6.6 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; a new query STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.50 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_xfr_probesoa.rpl0000644000175000017500000001051014010434640020736 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: master: 1.2.3.44 ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.4 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with probe of SOA ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER ; serial, refresh, retry, expire, minimum example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END STEP 30 TIME_PASSES ELAPSE 3600 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END ; the zonefile was updated with new contents STEP 70 CHECK_TEMPFILE example.com FILE_BEGIN example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.4 FILE_END SCENARIO_END unbound-1.13.1/testdata/remote-threaded.tdir/0000755000175000017500000000000014010434640020522 5ustar wouterwouterunbound-1.13.1/testdata/remote-threaded.tdir/bad_server.pem0000644000175000017500000000115314010434640023341 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++ DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/remote-threaded.tdir/remote-threaded.conf0000644000175000017500000000104614010434640024443 0ustar wouterwouterserver: verbosity: 2 num-threads: 4 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/remote-threaded.tdir/bad_server.key0000644000175000017500000000156714010434640023361 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC9hurNHBtB7QFEuPJOnCylUWUF2/US3v9yQQQXnstuXMQXRaq1 1uviLmwaGurV9tngX59HITsBT74NQrtFKfEDLViLrm2arAM9Ozsn4tnv30HXPRDj UOc1M05Q7UzjaSrOv+TkPEqyhtUyaP1DYo0bcmbxtSkYc2ZEWCwhPklUwQIDAQAB AoGATjzZxN4ramWaNnJapJTX4U7eczK/0pB3xwSL2exVcjOdRzYdKH+WVIJxYb1m 3/jNLFCNAeH356yxeevoPr73nG75YJ9I1ZWQWTnS3SDK6JD1+3pmAD0bQWFoitpf FoSH9H4X5gFB5vCZ99YVoYH1UXWPcgvUHwxz0voImt6lCKECQQD4YQ4A3M0+Ki8v Hl+5FKULnS0UtBkweCvkF/X1zZRjjYr6hLnqldFkkgTBKWe17pUXX0nwRMbP1YZX i+vDq5JNAkEAw1eYsmC0nVAMawo57N6LYavGv/n5u1cvpTpKDtn4cXH0Uqq13Kyu 2FUTzan2NhCEK78UzbWaeewBJmxYda1+RQJAdShKk6uTAEyjnwUjv8h2JWlJN2fQ LeWxRlDrCruiz+aW9J4gl/99GoQpy/c83TshhjnDRZsbcDNWv/rXBZ/rTQJAFQva CtX6f7yBKgM3DHtJvyM3zbVMH9Ab9QxbsE/xwZ9KeKGl6Hm+eNZpxM3cFiUfaGs0 /ZjkZOB1m0MvILaplQJAXC3PJ/E+87banGZRJl5qtS6/HoX5lH9TPkL8Essy7ANO 2BT2OTQawD1A+VKIrQHXs085Of8tQUfrfHHt7s3Kqg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/remote-threaded.tdir/remote-threaded.testns0000644000175000017500000000050314010434640025033 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/remote-threaded.tdir/remote-threaded.test0000644000175000017500000001654714010434640024511 0ustar wouterwouter# #-- remote-threaded.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # exit value is 1 on usage $PRE/unbound-control -h if test $? -ne 1; then echo "wrong exit value for usage." exit 1 else echo "exit value for usage: OK" fi # use lock-verify if possible # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # exit value is 1 when a bad command is given. echo "$PRE/unbound-control -c ub.conf blablargh" $PRE/unbound-control -c ub.conf blablargh if test $? -ne 1; then echo "wrong exit value on error." echo "> cat logfiles" cat fwd.log cat unbound.log exit 1 else echo "correct exit value on error" fi # reload the server. test if the server came up by putting a new # local-data element in the server. echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf echo "$PRE/unbound-control -c ub.conf reload" $PRE/unbound-control -c ub.conf reload if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig afterreload." dig @127.0.0.1 -p $UNBOUND_PORT afterreload. | tee outfile echo "> check answer" if grep "5.6.7.8" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # must have had queries now. 1 since reload. echo "$PRE/unbound-control -c ub.conf stats" $PRE/unbound-control -c ub.conf stats > tmp.$$ if test $? -ne 0; then echo "wrong exit value after success" cat fwd.log cat unbound.log exit 1 fi if grep "^total.num.queries=[1-9][0-9]*$" tmp.$$; then echo "OK" else echo "bad stats" cat tmp.$$ exit 1 fi # verbosity echo "$PRE/unbound-control -c ub.conf verbosity 4" $PRE/unbound-control -c ub.conf verbosity 4 if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # check syntax error in parse echo "$PRE/unbound-control -c ub.conf verbosity jkdf" $PRE/unbound-control -c ub.conf verbosity jkdf if test $? -ne 1; then echo "wrong exit value after failure" exit 1 fi # check bad credentials cp ub.conf bad.conf echo "remote-control:" >> bad.conf echo " server-key-file: bad_server.key" >> bad.conf echo " server-cert-file: bad_server.pem" >> bad.conf echo " control-key-file: bad_control.key" >> bad.conf echo " control-cert-file: bad_control.pem" >> bad.conf echo "$PRE/unbound-control -c bad.conf verbosity 2" $PRE/unbound-control -c bad.conf verbosity 2 if test $? -ne 1; then echo "wrong exit value after failure" exit 1 fi # create a new local zone echo "> test of local zone" echo "$PRE/unbound-control -c ub.conf local_zone example.net static" $PRE/unbound-control -c ub.conf local_zone example.net static if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1" $PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1 if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # check that www.example.net exists echo "> dig www.example.net." dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> check answer" if grep "192.0.2.1" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # check that mail.example.net has nxdomain echo "> dig mail.example.net." dig @127.0.0.1 -p $UNBOUND_PORT mail.example.net. | tee outfile echo "> check answer" if grep "NXDOMAIN" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # remove www.example.net - check it gets nxdomain echo "$PRE/unbound-control -c ub.conf local_data_remove www.example.net" $PRE/unbound-control -c ub.conf local_data_remove www.example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig www.example.net." dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> check answer" if grep "NXDOMAIN" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # remove example.net - check its gone. echo "$PRE/unbound-control -c ub.conf local_zone_remove example.net" $PRE/unbound-control -c ub.conf local_zone_remove example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "> dig www.example.net." dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> check answer" if grep "SERVFAIL" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # dump the cache echo "> test cache dump" # fillup cache echo "dig www.example.com" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. echo "$PRE/unbound-control -c ub.conf dump_cache" $PRE/unbound-control -c ub.conf dump_cache > tmp.$$ if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi cat tmp.$$ # we do not look at content. Only thread 0 content. # because it may not be there when it is compiled with processes only. if grep MSG_CACHE tmp.$$; then echo "OK this is a cache dump" else echo "Not OK cache dump" exit 1 fi # test lookup echo "$PRE/unbound-control -c ub.conf lookup www.example.com" $PRE/unbound-control -c ub.conf lookup www.example.com if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # answer to lookup is meaningless because of use a forwarder, oh well. # load the cache dump. echo "$PRE/unbound-control -c ub.conf load_cache < tmp.$$" $PRE/unbound-control -c ub.conf load_cache < tmp.$$ if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # do not check if cache dump contents are present ; other threads # may not have gotten it when it is compiled with processes only. # flushing echo "$PRE/unbound-control -c ub.conf flush www.example.net" $PRE/unbound-control -c ub.conf flush www.example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "$PRE/unbound-control -c ub.conf flush_type www.example.net TXT" $PRE/unbound-control -c ub.conf flush_type www.example.net TXT if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi echo "$PRE/unbound-control -c ub.conf flush_zone example.net" $PRE/unbound-control -c ub.conf flush_zone example.net if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # now stop the server echo "$PRE/unbound-control -c ub.conf stop" $PRE/unbound-control -c ub.conf stop if test $? -ne 0; then echo "wrong exit value after success" exit 1 fi # see if the server has really exited. TRY_MAX=20 for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do if kill -0 $UNBOUND_PID 2>&1 | tee tmp.$$; then echo "not stopped yet, waiting" sleep 1 else echo "stopped OK; break" break; fi if grep "No such process" tmp.$$; then echo "stopped OK; break" break; fi done if kill -0 $UNBOUND_PID; then echo "still up!" echo "> cat logfiles" cat fwd.log cat unbound.log echo "not stopped, failure" exit 1 else echo "stopped OK" if test -f ublocktrace.0; then if $PRE/lock-verify ublocktrace.*; then echo "lock-verify test worked." else echo "lock-verify test failed." cat fwd.log cat unbound.log exit 1 fi fi fi echo "> cat logfiles" cat fwd.log cat unbound.log echo "> OK" exit 0 unbound-1.13.1/testdata/remote-threaded.tdir/bad_control.key0000644000175000017500000000156714010434640023533 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDti51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4G SLOE02/hKDkdkOvaUG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtO DWc3tXPT1IlSEN0xnAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQAB AoGAG3w/DatfMCu/nS5OdQx9BSqPgNbnUSqux9xA0fhgPTlN0T3oRtPcqa7JUDUW PryI/a62ry+zGkw98N2AxolCZg3N7Z3vuRx2FMcKKNwpTzDmcZW7TmMk5FPof6gE PnYl/ff0w+kxqA+L2EexH3Xi6ApLSZcjyzKWj+dL2AuT9gkCQQD3dPitwITxgCAD IaHw23e3FRkM/hw1Gp8bt6nbuxitVxxpO96q1EQ+fCy/mf0bMEJDp3xzMEIfP3r4 GmNbaxa1AkEA9b8LeBLbQ2cm2+UMeUgygBsRirdUQ786auqH38Jbvi/j6S9sDl2x q1vRtikEBZJWfkhsOzrzwFDKe1bI/EEn9wJAAzOwRA9JqRZPU7sLrWIpmmTbfh+L neRKSsGFoSI6n4ORCouLxgoZF/XjXldPvxpQwS9ZnOPy9xSLMsqknno0QQJAeDtA IT8Yh6GwIWWu9KeeDY8wxe1sDLlCm4yjbZZpzGMh3rSU6XJtuqjxsW3fydoO9zn3 ugLdvvnIFxAexUwbgQJBANyM13xcObfUJOj9rjlGCh0CDh/04ONl8SH8HBnM8guA RJI5S6vBHweVRopEZcF1sQm6wMf3ej/sGkyyNvJxRkY= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/remote-threaded.tdir/remote-threaded.pre0000644000175000017500000000202014010434640024275 0ustar wouterwouter# #-- remote-threaded.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT remote-threaded.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < remote-threaded.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/remote-threaded.tdir/unbound_server.key0000644000175000017500000000463314010434640024302 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/remote-threaded.tdir/unbound_server.pem0000644000175000017500000000246614010434640024275 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/remote-threaded.tdir/unbound_control.pem0000644000175000017500000000247614010434640024450 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/remote-threaded.tdir/bad_control.pem0000644000175000017500000000116314010434640023514 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK 4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH 5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F -----END CERTIFICATE----- unbound-1.13.1/testdata/remote-threaded.tdir/remote-threaded.post0000644000175000017500000000061714010434640024506 0ustar wouterwouter# #-- remote-threaded.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID # unbound stopped by test (if successful) kill $UNBOUND_PID >/dev/null 2>&1 kill $UNBOUND_PID >/dev/null 2>&1 exit 0 unbound-1.13.1/testdata/remote-threaded.tdir/remote-threaded.dsc0000644000175000017500000000051514010434640024267 0ustar wouterwouterBaseName: remote-threaded Version: 1.0 Description: remote control test with thread communication CreationDate: Wed Dec 3 15:00:38 CET 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: remote-threaded.pre Post: remote-threaded.post Test: remote-threaded.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/remote-threaded.tdir/unbound_control.key0000644000175000017500000000462714010434640024457 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/val_anchor_nx_nosig.rpl0000644000175000017500000002120614010434640021250 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with unsigned denial of trust anchor ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.sub.example.com. IN DS SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION sub.example.com. IN DNSKEY SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b21_nodataent.rpl0000644000175000017500000000671714010434640021620 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.2.1 no data empty nonterminal. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION y.w.example. IN A SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR matches the QNAME and shows that the A type bit is not set. ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. NSEC3 1 1 12 aabbccdd ( k8udemvp1j2f7eg6jebps17vp3n8i58h ) ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. gPkFp1s2QDQ6wQzcg1uSebZ61W33rUBDcTj7 2F3kQ490fEdp7k1BUIfbcZtPbX3YCpE+sIt0 MpzVSKfTwx4uYA== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION y.w.example. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION y.w.example. IN A SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. NSEC3 1 1 12 aabbccdd ( k8udemvp1j2f7eg6jebps17vp3n8i58h ) ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. gPkFp1s2QDQ6wQzcg1uSebZ61W33rUBDcTj7 2F3kQ490fEdp7k1BUIfbcZtPbX3YCpE+sIt0 MpzVSKfTwx4uYA== ) SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nodata_hasdata.rpl0000644000175000017500000001107414010434640021027 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata response, that proves the data. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; Denies A, note this is the end of the NSEC chain. www.example.com. IN NSEC example.com. A RRSIG NSEC www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDA8yqBITvLruoQjn/eqjYjwCwySAhUAk5/f3H1HKMsvM+spmmswwFtndyY= ;{id = 2854} ; Denies wildcard example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFGlz/gvGdVxEo3Kpr+MijEGCZgwaAhRU7qbF13vmCVgR8dFw7LQFKopV6w== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nodata_ent.rpl0000644000175000017500000001243414010434640020211 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata on empty nonterminal response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} ; Denies A, note this is the end of the NSEC chain. u.example.com. IN NSEC y.www.example.com. RRSIG NSEC u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCvUG2P/8Q8b02C6agrgtJX4YfBbwIUaF/fIuS4OFmGVNkFzgiLAkpze3M= ;{id = 2854} ; Denies wildcard example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFGlz/gvGdVxEo3Kpr+MijEGCZgwaAhRU7qbF13vmCVgR8dFw7LQFKopV6w== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} u.example.com. IN NSEC y.www.example.com. RRSIG NSEC u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCvUG2P/8Q8b02C6agrgtJX4YfBbwIUaF/fIuS4OFmGVNkFzgiLAkpze3M= ;{id = 2854} example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFGlz/gvGdVxEo3Kpr+MijEGCZgwaAhRU7qbF13vmCVgR8dFw7LQFKopV6w== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_any.rpl0000644000175000017500000000554514010434640016667 0ustar wouterwouter; This is a comment. ; config options go here. forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Test query and cache with type ANY RANGE_BEGIN 0 1000 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN ANY SECTION ANSWER ;; different type in this answer. www.example.com. IN TXT "text" ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA ::5 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.foo.com. IN ANY SECTION ANSWER www.foo.com. IN A 1.2.3.77 www.foo.com. IN AAAA ::77 ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; unneccesary nothing steps. STEP 20 NOTHING STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ; test cache synthesis STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN ANY ENTRY_END STEP 50 NOTHING STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN ANY SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ; and again ; the synthesized result itself is not added to the cache STEP 62 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN ANY ENTRY_END STEP 63 NOTHING STEP 64 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN ANY SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ; AAAA lookup to add more data in cache STEP 70 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 80 NOTHING STEP 90 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA ::5 ENTRY_END ; test cache synthesis of AAAA, and two rrsets. STEP 100 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN ANY ENTRY_END STEP 110 NOTHING STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN ANY SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. IN AAAA ::5 ENTRY_END ; test query that is not synthesized from cache. STEP 130 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.foo.com. IN ANY ENTRY_END STEP 140 NOTHING STEP 150 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.foo.com. IN ANY SECTION ANSWER www.foo.com. IN A 1.2.3.77 www.foo.com. IN AAAA ::77 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_negcache_nta.rpl0000644000175000017500000001315214010434640020472 0ustar wouterwouter; config options ; The island of trust is at testzone.nlnetlabs.nl server: trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes domain-insecure: "ant.testzone.nlnetlabs.nl" stub-zone: name: "testzone.nlnetlabs.nl" stub-addr: 185.49.140.60 stub-zone: name: "ant.testzone.nlnetlabs.nl" stub-addr: 185.49.140.61 CONFIG_END SCENARIO_BEGIN Test to not do aggressive NSEC for domains under NTA ; testzone.nlnetlabs.nl nameserver RANGE_BEGIN 0 100 ADDRESS 185.49.140.60 ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION testzone.nlnetlabs.nl. IN DNSKEY SECTION ANSWER testzone.nlnetlabs.nl. 3600 IN DNSKEY 256 3 8 AwEAAbrNEg01ByEpUUiip+GNAkNVjUfeX7sl9kPUssR3JQvhCJWVs7aBY0Ae1cNtQWgzCmidGorlXvEY2nNBiMM4l7IXqopJsgyj+Cb3nQPVLi/7yVwUb+AIwSJw1gRFElMYonsMOL9qUrJi8BBCnCR0EqkL+X4slmtkXSJbzQAwvHI7 testzone.nlnetlabs.nl. 3600 IN DNSKEY 257 3 8 AwEAAbn0eGV0wqMBQNSVTY//BoiOD7bexC7FcVv0fH9bwjKOA8I+ob377E14vZN2xRLC2b1GG5iBckjeI+N2dB9eC2KRnScU3Gbmtw75BBYfm/y4Hu72zEjEZ0ZGv6gjSZRv/1o87ODAwQaxN8/dQD+5U/5xu12XM39bCJZx2GWTbf5L testzone.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 8 3 3600 20180313101254 20180213101254 2926 testzone.nlnetlabs.nl. gSLZb/dSKutRlAKSo8ZCC1R+SkvABMYBRQsms77WPfYCDbt5GbXeuGqwGdadjEN8gGSU+qrYNxBZRhlYY6d2vtl+DGh67qwteHSwOCw0VvU64eVh38maJA1U673U4JtlBALzBOA/UHmXPlCgPPoW3BG0U3T2Qir/mqOmegmpBcw= SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NS ns.nlnetlabs.nl. testzone.nlnetlabs.nl. 3600 IN RRSIG NS 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. Ox0iKc+z3i1qR1wMr8TBPYzuYO5UTaLrBsDagJAd25fvCkGN+h3HPmWlCIW0cBHsS+IaHXr1JhWutjSCc4UBcY+sT7Y7Fw3V1qdZW2KzbSgWUyPkTXoYcIIVLacSUTXEyltW6jj61WEI/RaUGUCJortvwH5iv1Hzee343isxObI= SECTION ADDITIONAL ENTRY_END ; response for antelope.testzone.nlnetlabs.nl. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION antelope.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= SECTION ADDITIONAL ENTRY_END RANGE_END ; ant.testzone.nlnetlabs.nl nameserver RANGE_BEGIN 0 100 ADDRESS 185.49.140.61 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ant.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER ant.testzone.nlnetlabs.nl. 10 IN TXT "domain under NTA" ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION antelope.testzone.nlnetlabs.nl. IN TXT ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO AD NXDOMAIN SECTION QUESTION antelope.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= SECTION ADDITIONAL ENTRY_END ; query for ant.testzone.nlnetlabs.nl, which is below an NTA STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ant.testzone.nlnetlabs.nl. IN TXT ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION ant.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER ant.testzone.nlnetlabs.nl. 10 IN TXT "domain under NTA" ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+012+60385.private0000644000175000017500000000023514010434640021464 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 12 (ECC-GOST) GostAsn1: MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgIge0NaZG76WD9K6vNRD1yDuVPtKlEtFQbHIjoB106B6Hc= unbound-1.13.1/testdata/net_signed_servfail.rpl0000644000175000017500000010223214010434640021241 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: ". IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk)}" val-override-date: "20110207110823" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with DS introduction for .net ; the report for a bug in BIND is on ; http://www.verisignlabs.com/documents/BIND-DS-Servfail.pdf. ; they saw a pattern of servfail/nonservfail every 1 minute (1 day really) ; after introduction of a .NET DS in the root for a running validator. ; K.ROOT-SERVERS.NET. (before .net DS introduction) RANGE_BEGIN 0 99 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . 360 IN NS K.ROOT-SERVERS.NET. . 360 IN RRSIG NS 5 0 360 20110214110823 20110205110823 55582 . vk0d/Bpr1NJFXh4eIG+JrTcBmeo7fxB5cHSBzfQLsuahzMd2x0VuBTvWjl1ziGrNEL/jEl64E41+s3nInUoXmg== ;{id = 55582} SECTION ADDITIONAL K.ROOT-SERVERS.NET. 360 IN A 193.0.14.129 k.root-servers.net. 360 IN RRSIG A 5 3 360 20110214110823 20110205110823 55582 . L/ldGIu3qvN9LxHWkT4nkgu/7wM4zCmQDvCeGvR5lnOAyesKQsO44XhrVFTZ7eZHHffCoXF0bNA47wkTLiio2w== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN DNSKEY SECTION ANSWER . 60 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} . 60 IN RRSIG DNSKEY 5 0 60 20110214110823 20110205110823 55582 . WbDYJXdisfjhZ1gZ2U/VO2Hn9P2bPcQ6OEAhip6e5vtbtVFVYV6WhHuwcqE89VZGlrcTyQDHGVj+Yx17bmvX5g== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. 120 IN NS a.gtld-servers.net. net. 60 IN NSEC nl. NS RRSIG NSEC net. 60 IN RRSIG NSEC 5 1 60 20110214110823 20110205110823 55582 . OAo8N6bM0SqXZiUT7q/j4LlT2UDpn8ia2NcKwm1KCpve+FUFNWHY670aJ5tx8PCYXk+FFfunPVMtQBRJMAUgtg== ;{id = 55582} SECTION ADDITIONAL a.gtld-servers.net. 120 IN A 192.5.6.30 ENTRY_END RANGE_END ; K.ROOT-SERVERS.NET. (after .net DS introduction) RANGE_BEGIN 100 1000 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . 360 IN NS K.ROOT-SERVERS.NET. . 360 IN RRSIG NS 5 0 360 20110214110823 20110205110823 55582 . vk0d/Bpr1NJFXh4eIG+JrTcBmeo7fxB5cHSBzfQLsuahzMd2x0VuBTvWjl1ziGrNEL/jEl64E41+s3nInUoXmg== ;{id = 55582} SECTION ADDITIONAL K.ROOT-SERVERS.NET. 360 IN A 193.0.14.129 k.root-servers.net. 360 IN RRSIG A 5 3 360 20110214110823 20110205110823 55582 . L/ldGIu3qvN9LxHWkT4nkgu/7wM4zCmQDvCeGvR5lnOAyesKQsO44XhrVFTZ7eZHHffCoXF0bNA47wkTLiio2w== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN DNSKEY SECTION ANSWER . 60 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} . 60 IN RRSIG DNSKEY 5 0 60 20110214110823 20110205110823 55582 . WbDYJXdisfjhZ1gZ2U/VO2Hn9P2bPcQ6OEAhip6e5vtbtVFVYV6WhHuwcqE89VZGlrcTyQDHGVj+Yx17bmvX5g== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN DS SECTION ANSWER net. 60 IN DS 30899 5 1 cd056cca0e95e76acb7c0934d63082570078c5e8 net. 60 IN RRSIG DS 5 1 60 20110214110823 20110205110823 55582 . LFpCyJVQZFIqVEsI8CxV1GAhyvb1KTwanKEYTfw8ySsUuPL1M/YOuYehCw6JR7PFubLUem8OwO0Wu64/o3mP4Q== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. 120 IN NS a.gtld-servers.net. net. 60 IN DS 30899 5 1 cd056cca0e95e76acb7c0934d63082570078c5e8 net. 60 IN RRSIG DS 5 1 60 20110214110823 20110205110823 55582 . LFpCyJVQZFIqVEsI8CxV1GAhyvb1KTwanKEYTfw8ySsUuPL1M/YOuYehCw6JR7PFubLUem8OwO0Wu64/o3mP4Q== ;{id = 55582} SECTION ADDITIONAL a.gtld-servers.net. 120 IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 1000 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. 120 IN NS a.gtld-servers.net. net. 120 IN RRSIG NS 5 1 120 20110214110823 20110205110823 30899 net. YnBGgfp1HPjgqxooKBYSR8cVL0MCPwT1w0z1ABXlq3mv40BR3gG041HnSQ35vj5Jrx3m8OmmX+bZYIalZsjPzw== ;{id = 30899} SECTION ADDITIONAL a.gtld-servers.net. 120 IN A 192.5.6.30 a.gtld-servers.net. 120 IN RRSIG A 5 3 120 20110214110823 20110205110823 30899 net. QVDWcK9A1vBOwUmN1juqFWW/BTbY56npDnjf3FtLHsUzpwWfxd2GsbYda2pMXvOLI+C0/SRjkcmcjNIXXMFFFQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN DNSKEY SECTION ANSWER net. 60 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} net. 60 IN RRSIG DNSKEY 5 1 60 20110214110823 20110205110823 30899 net. RlK9lmXX69AkYLsGtNwraiaLboon6gZsSQADf3Z2r8MeBXo+zg24xWdBxXZRGNe8tkmvUOMxsAxFETJRmY1icQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION signed.net. IN DS SECTION ANSWER signed.net. 60 IN DS 16486 5 1 d98b27d62ec1be02346ca0c513a6562a03373fc3 signed.net. 60 IN RRSIG DS 5 2 60 20110214110823 20110205110823 30899 net. JECbUqFSmPNXwG7q0wgBTXgk0u0q/5SuJh53gSthu027kpaYIL9gCAro0k9ZTzkpL2gc/T75iqQakMoWzWrvqQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION signed.net. IN NS SECTION AUTHORITY signed.net. 120 IN NS ns.signed.net. signed.net. 60 IN DS 16486 5 1 d98b27d62ec1be02346ca0c513a6562a03373fc3 signed.net. 60 IN RRSIG DS 5 2 60 20110214110823 20110205110823 30899 net. JECbUqFSmPNXwG7q0wgBTXgk0u0q/5SuJh53gSthu027kpaYIL9gCAro0k9ZTzkpL2gc/T75iqQakMoWzWrvqQ== ;{id = 30899} SECTION ADDITIONAL ns.signed.net. 120 IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION unsigned.net. IN DS SECTION AUTHORITY unsigned.net. 60 IN NSEC net. NS RRSIG NSEC unsigned.net. 60 IN RRSIG NSEC 5 2 60 20110214110823 20110205110823 30899 net. BQVqD7KBhS6+mthhFmLajE899bt4aI5FqXIR0eJqhf8MYqXYYpF+R841QjpNjRQcDKeenu4TCeA3OtlGp3FoXA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION unsigned.net. IN NS SECTION AUTHORITY unsigned.net. 120 IN NS ns.unsigned.net. unsigned.net. 60 IN NSEC net. NS RRSIG NSEC unsigned.net. 60 IN RRSIG NSEC 5 2 60 20110214110823 20110205110823 30899 net. BQVqD7KBhS6+mthhFmLajE899bt4aI5FqXIR0eJqhf8MYqXYYpF+R841QjpNjRQcDKeenu4TCeA3OtlGp3FoXA== ;{id = 30899} SECTION ADDITIONAL ns.unsigned.net. 120 IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.unsigned.net. RANGE_BEGIN 0 1000 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END RANGE_END ; ns.signed.net. RANGE_BEGIN 0 1000 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION signed.net. IN DNSKEY SECTION ANSWER signed.net. 60 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} signed.net. 60 IN RRSIG DNSKEY 5 2 60 20110214110823 20110205110823 16486 signed.net. MSTL72Tx6duOuvU7t1WgqeidjJzPw+hR1khHiCgA07wYyjOzIMhUvSIUJElbk7znTH9I1cW+e14Gn4OeV2S/Lg== ;{id = 16486} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END RANGE_END ; a series of queries. The first starts by priming the cache with ; the contents (that includes the signed and unsigned subdomain). ; then we probe every 10 seconds, and they must all succeed for 3 minutes, ; because in the graphs in the report there is an alternating 1 minute OK ; 1 minute servfail in the results (for BIND; this test is to make sure we ; do not suffer the same fate). STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 2 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 3 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END ; after 10 seconds STEP 10 TIME_PASSES ELAPSE 10 STEP 11 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 12 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 13 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 50 IN A 10.20.30.40 www.signed.net. 50 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 50 IN A 10.20.30.44 ENTRY_END ; at 50 seconds STEP 50 TIME_PASSES ELAPSE 40 STEP 51 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 52 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 53 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 10 IN A 10.20.30.40 www.signed.net. 10 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 54 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 10 IN A 10.20.30.44 ENTRY_END ; introduce .net DS record, time at 70 s. STEP 100 TIME_PASSES ELAPSE 20 STEP 101 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 102 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 103 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 104 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END ; a very long list of tests that try every 10 seconds ; no strict ttl matches so it can be copy and pasted. STEP 200 TIME_PASSES ELAPSE 10 STEP 201 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 202 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 203 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 204 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 210 TIME_PASSES ELAPSE 10 STEP 211 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 212 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 213 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 214 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 220 TIME_PASSES ELAPSE 10 STEP 221 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 222 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 223 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 224 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 230 TIME_PASSES ELAPSE 10 STEP 231 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 232 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 233 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 234 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 240 TIME_PASSES ELAPSE 10 STEP 241 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 242 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 243 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 244 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 250 TIME_PASSES ELAPSE 10 STEP 251 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 252 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 253 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 254 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 260 TIME_PASSES ELAPSE 10 STEP 261 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 262 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 263 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 264 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 270 TIME_PASSES ELAPSE 10 STEP 271 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 272 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 273 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 274 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 280 TIME_PASSES ELAPSE 10 STEP 281 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 282 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 283 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 284 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 290 TIME_PASSES ELAPSE 10 STEP 291 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 292 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 293 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 294 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 300 TIME_PASSES ELAPSE 10 STEP 301 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 302 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 303 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 304 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 310 TIME_PASSES ELAPSE 10 STEP 311 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 312 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 313 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 314 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 320 TIME_PASSES ELAPSE 10 STEP 321 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 322 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 323 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 324 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 330 TIME_PASSES ELAPSE 10 STEP 331 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 332 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 333 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 334 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 340 TIME_PASSES ELAPSE 10 STEP 341 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 342 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 343 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 344 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 350 TIME_PASSES ELAPSE 10 STEP 351 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 352 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 353 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 354 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 360 TIME_PASSES ELAPSE 10 STEP 361 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 362 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 363 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 364 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 370 TIME_PASSES ELAPSE 10 STEP 371 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 372 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 373 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 374 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 380 TIME_PASSES ELAPSE 10 STEP 381 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 382 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 383 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 384 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 390 TIME_PASSES ELAPSE 10 STEP 391 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 392 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 393 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 394 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 400 TIME_PASSES ELAPSE 10 STEP 401 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 402 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 403 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 404 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 410 TIME_PASSES ELAPSE 10 STEP 411 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 412 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 413 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 414 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 420 TIME_PASSES ELAPSE 10 STEP 421 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 422 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 423 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 424 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 430 TIME_PASSES ELAPSE 10 STEP 431 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 432 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 433 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 434 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 440 TIME_PASSES ELAPSE 10 STEP 441 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 442 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 443 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 444 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 450 TIME_PASSES ELAPSE 10 STEP 451 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 452 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 453 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 454 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 460 TIME_PASSES ELAPSE 10 STEP 461 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 462 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 463 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 464 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 470 TIME_PASSES ELAPSE 10 STEP 471 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 472 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 473 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 474 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 480 TIME_PASSES ELAPSE 10 STEP 481 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 482 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 483 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 484 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END STEP 490 TIME_PASSES ELAPSE 10 STEP 491 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.signed.net. IN A ENTRY_END STEP 492 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.unsigned.net. IN A ENTRY_END STEP 493 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.signed.net. IN A SECTION ANSWER www.signed.net. 60 IN A 10.20.30.40 www.signed.net. 60 IN RRSIG A 5 3 60 20110214110823 20110205110823 16486 signed.net. Q7leQsS7zlMGD1he8yfa8TfgSNc0boERx/qprOB691cgzD6Cnx2InP57hYgoR09iNXU8Zrng4hpF6CJLGZKhvw== ;{id = 16486} ENTRY_END STEP 494 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.unsigned.net. IN A SECTION ANSWER www.unsigned.net. 60 IN A 10.20.30.44 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_scrub_cname_an.rpl0000644000175000017500000000665614010434640021226 0ustar wouterwouter; config options server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test scrub of CNAME in answer section STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; root prime is sent STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION . IN NS ENTRY_END STEP 30 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; query sent to root server STEP 40 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 50 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; query sent to .com server STEP 60 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; STEP 62 CHECK_OUT_QUERY ; ENTRY_BEGIN ; MATCH qname qtype opcode ; SECTION QUESTION ; com. IN NS ; ENTRY_END ; STEP 63 REPLY ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; com. IN NS ; SECTION ANSWER ; com. IN NS a.gtld-servers.net. ; SECTION ADDITIONAL ; a.gtld-servers.net. IN A 192.5.6.30 ; ENTRY_END STEP 70 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ; this query reply has to be scrubbed STEP 80 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; STEP 82 CHECK_OUT_QUERY ; ENTRY_BEGIN ; MATCH qname qtype opcode ; SECTION QUESTION ; example.com. IN NS ; ENTRY_END ; STEP 83 REPLY ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END STEP 90 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME next.example.com. next.example.com. IN A 10.20.30.0 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ; iterator should try again and ask the other nameserver. STEP 100 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION next.example.com. IN A ENTRY_END STEP 110 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION next.example.com. IN A SECTION ANSWER next.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ; is the final answer correct? STEP 200 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME next.example.com. next.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_capsid.tdir/0000755000175000017500000000000014010434640017554 5ustar wouterwouterunbound-1.13.1/testdata/fwd_capsid.tdir/fwd_capsid.dsc0000644000175000017500000000045114010434640022352 0ustar wouterwouterBaseName: fwd_capsid Version: 1.0 Description: Forward and check 0x20 bits. CreationDate: Mon Oct 6 16:25:09 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_capsid.pre Post: fwd_capsid.post Test: fwd_capsid.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_capsid.tdir/fwd_capsid.conf0000644000175000017500000000041514010434640022526 0ustar wouterwouterserver: verbosity: 4 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no use-caps-for-id: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_capsid.tdir/fwd_capsid.testns0000644000175000017500000000032314010434640023117 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id copy_query SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_capsid.tdir/fwd_capsid.post0000644000175000017500000000045314010434640022570 0ustar wouterwouter# #-- fwd_capsid.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_capsid.tdir/fwd_capsid.pre0000644000175000017500000000160514010434640022371 0ustar wouterwouter# #-- fwd_capsid.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_capsid.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_capsid.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_capsid.tdir/fwd_capsid.test0000644000175000017500000000077014010434640022564 0ustar wouterwouter# #-- fwd_capsid.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/iter_req_qname.rpl0000644000175000017500000000414214010434640020223 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test a query name in the reply is required by resolver ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; always the same reply since we cannot match anything from the qsection. ENTRY_BEGIN MATCH opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ; no query section! ; www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. ; the query name is echoed properly to *our* client STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_soamin.rpl0000644000175000017500000001015314010434640017540 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test cache of SOA with minimum ttl and normal ttl. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER example.com. 86400 IN SOA dns1.icann.org. hostmaster.icann.org. 2010074630 7200 3600 1209600 3600 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION nx.example.com. IN A SECTION AUTHORITY example.com. 3600 IN SOA dns1.icann.org. hostmaster.icann.org. 2010074630 7200 3600 1209600 3600 ENTRY_END RANGE_END ; put both queries with SOA records into the cache and then query them from ; the cache. ; first the nxdomain, so that the positive SOA answer later overrides the ; SOA from the authority section from that nxdomain. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION nx.example.com. IN A SECTION AUTHORITY example.com. 3600 IN SOA dns1.icann.org. hostmaster.icann.org. 2010074630 7200 3600 1209600 3600 ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN SOA ENTRY_END ; recursion happens here. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER example.com. 86400 IN SOA dns1.icann.org. hostmaster.icann.org. 2010074630 7200 3600 1209600 3600 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; now check them from the cache (no seconds elapsed). STEP 110 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx.example.com. IN A ENTRY_END STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION nx.example.com. IN A SECTION AUTHORITY example.com. 3600 IN SOA dns1.icann.org. hostmaster.icann.org. 2010074630 7200 3600 1209600 3600 ENTRY_END STEP 130 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN SOA ENTRY_END STEP 140 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER example.com. 86400 IN SOA dns1.icann.org. hostmaster.icann.org. 2010074630 7200 3600 1209600 3600 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/08-host-lib.tdir/0000755000175000017500000000000014010434640017417 5ustar wouterwouterunbound-1.13.1/testdata/08-host-lib.tdir/08-host-lib.hosts0000644000175000017500000000070114010434640022445 0ustar wouterwouter# Host Database # # This file should contain the addresses and aliases for local hosts that # share this file. Replace 'my.domain' below with the domainname of your # machine. # ::1 localhost localhost.my.domain 127.0.0.1 localhost localhost.my.domain # Imaginary network. 10.0.0.2 myname.my.domain myname 10.0.0.3 myfriend.my.domain myfriend 10.20.30.40 virtual.virtual.virtual.local unbound-1.13.1/testdata/08-host-lib.tdir/08-host-lib.test0000644000175000017500000001057214010434640022273 0ustar wouterwouter# #-- 08-host-lib.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep FORK $PRE/config.h | grep "define" >/dev/null 2>&1; then # nothing : else echo "forking is not available; test skipped." exit 0 fi # test if fwder is up echo "> dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile" dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile if grep "10.20.30.40" outfile; then echo "fwder is up" else cat fwd.log echo "fwder not up" exit 1 fi rm outfile # create asynclook get_make echo "> (cd $PRE ; $MAKE asynclook)" (cd $PRE ; $MAKE asynclook) if test ! -x $PRE/asynclook; then echo "cannot build asynclook test program" exit 1 fi (cd $PRE ; $MAKE lock-verify) # check the locks. function locktest() { if test -x $PRE/lock-verify -a -f ublocktrace.0; then $PRE/lock-verify ublocktrace.* if test $? -ne 0; then echo "lock-verify error" exit 1 fi fi } # test hosts reading (directed at local auth info) echo '> $PRE/asynclook -H 08-host-lib.hosts virtual.virtual.virtual.local 2>&1 | tee outfile' $PRE/asynclook -H 08-host-lib.hosts virtual.virtual.virtual.local 2>&1 | tee outfile if grep "virtual.virtual.virtual.local: 10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi locktest rm outfile # test async lookups (directed at testns) echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile' $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile echo '> $PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile # test cancellation echo '> $PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile echo '> $PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile # test blocking mode echo '> $PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile echo '> $PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile echo "> cat logfiles" cat fwd.log exit 0 unbound-1.13.1/testdata/08-host-lib.tdir/08-host-lib.dsc0000644000175000017500000000046314010434640022063 0ustar wouterwouterBaseName: 08-host-lib Version: 1.0 Description: Test async lookup using libunbound CreationDate: Fri May 16 13:21:58 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: 08-host-lib.pre Post: 08-host-lib.post Test: 08-host-lib.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/08-host-lib.tdir/08-host-lib.post0000644000175000017500000000042714010434640022277 0ustar wouterwouter# #-- 08-host-lib.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID unbound-1.13.1/testdata/08-host-lib.tdir/08-host-lib.pre0000644000175000017500000000101714010434640022074 0ustar wouterwouter# #-- 08-host-lib.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 FWD_PORT=$(($RND_PORT + 1)) echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT 08-host-lib.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log unbound-1.13.1/testdata/08-host-lib.tdir/08-host-lib.testns0000644000175000017500000000077414010434640022637 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ; for priming query ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION @ IN NS SECTION ANSWER @ IN NS 127.0.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/iter_ds_locate_ns_nosoa.rpl0000644000175000017500000000530514010434640022111 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test locate of NS records for DS without a SOA record ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; content of root-servers.net ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN NS SECTION ANSWER root-servers.net. IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 SECTION AUTHORITY root-servers.net. IN NS K.ROOT-SERVERS.NET. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN AAAA SECTION ANSWER SECTION AUTHORITY root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION ANSWER SECTION AUTHORITY ;root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION root-servers.net. IN A SECTION AUTHORITY root-servers.net. IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION root-servers.net. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION ANSWER SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/edns_cache.tdir/0000755000175000017500000000000014010434640017525 5ustar wouterwouterunbound-1.13.1/testdata/edns_cache.tdir/edns_cache.pre0000644000175000017500000000236014010434640022312 0ustar wouterwouter# #-- edns_cache.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 3 UNBOUND_PORT=$RND_PORT STUB1_PORT=$(($RND_PORT + 1)) STUB2_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "STUB1_PORT=$STUB1_PORT" >> .tpkg.var.test echo "STUB2_PORT=$STUB2_PORT" >> .tpkg.var.test # start stub1 get_ldns_testns $LDNS_TESTNS -6 -p $STUB1_PORT edns_cache.stub1 >stub1.log 2>&1 & STUB1_PID=$! echo "STUB1_PID=$STUB1_PID" >> .tpkg.var.test # start stub2 $LDNS_TESTNS -p $STUB2_PORT edns_cache.stub2 >stub2.log 2>&1 & STUB2_PID=$! echo "STUB2_PID=$STUB2_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@STUB1_PORT\@/'$STUB1_PORT'/' -e 's/@STUB2_PORT\@/'$STUB2_PORT'/' < edns_cache.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test # wait for stubs to come up wait_ldns_testns_up stub1.log wait_ldns_testns_up stub2.log # wait for unbound to come up wait_unbound_up unbound.log unbound-1.13.1/testdata/edns_cache.tdir/edns_cache.post0000644000175000017500000000050114010434640022504 0ustar wouterwouter# #-- edns_cache.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $STUB1_PID kill_pid $STUB2_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/edns_cache.tdir/edns_cache.stub20000644000175000017500000000107414010434640022564 0ustar wouterwouter; nameserver test file $ORIGIN example.net. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname noedns REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname noedns REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION netdns.example.net. IN A SECTION ANSWER netdns.example.net. IN A 127.0.0.1 ENTRY_END ; fail EDNS queries for netdns. ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA FORMERR ADJUST copy_id SECTION QUESTION netdns.example.net. IN A ENTRY_END unbound-1.13.1/testdata/edns_cache.tdir/edns_cache.stub10000644000175000017500000000107614010434640022565 0ustar wouterwouter; nameserver test file ; this is ::1 and the EDNS working server. $ORIGIN . $TTL 3600 ; root prime ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION . IN NS SECTION ANSWER . IN NS root.server. SECTION AUTHORITY SECTION ADDITIONAL root.server. IN A 127.0.0.1 ENTRY_END ; referral to example.net ENTRY_BEGIN MATCH opcode subdomain REPLY QR NOERROR ADJUST copy_id copy_query SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS netdns.example.net. SECTION ADDITIONAL netdns.example.net. IN A 127.0.0.1 ENTRY_END unbound-1.13.1/testdata/edns_cache.tdir/edns_cache.dsc0000644000175000017500000000047014010434640022275 0ustar wouterwouterBaseName: edns_cache Version: 1.0 Description: Server does not support EDNS and cache this. CreationDate: Tue Nov 30 12:34:37 CET 2010 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: edns_cache.pre Post: edns_cache.post Test: edns_cache.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/edns_cache.tdir/edns_cache.conf0000644000175000017500000000050014010434640022443 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: ::1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no stub-zone: name: "example.net" stub-addr: "127.0.0.1@@STUB2_PORT@" # a k a root hints stub-zone: name: "." stub-addr: "::1@@STUB1_PORT@" unbound-1.13.1/testdata/edns_cache.tdir/edns_cache.test0000644000175000017500000000144414010434640022505 0ustar wouterwouter# #-- edns_cache.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test # notice that we use one stub server on IPv6 ::1 that supports EDNS that # gives referrals to the other server on IPv4 127.0.0.1 that is nonEDNS. PRE="../.." # do the test echo "> dig netdns.example.net." dig @::1 -p $UNBOUND_PORT netdns.example.net. | tee outfile echo "> dig www.example.net." dig @::1 -p $UNBOUND_PORT www.example.net. | tee outfile echo "> cat stub1.log" cat stub1.log echo "> cat stub2.log" cat stub2.log echo "> cat unbound.log" cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/val_nsec3_entnodata_optout.rpl0000644000175000017500000001571014010434640022557 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 response for NODATA ENT with optout. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ent.example.com. IN DS SECTION AUTHORITY ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; OPTOUT b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= ; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag. ; OPTOUT SPAN around it 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AFgtC3UEm/Tu4HIjfDHIDmZkvgwHF0kWKcD3wP2hs+/wOfaILtXBr4c= ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ent.example.com. IN A SECTION AUTHORITY ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; OPTOUT b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= ; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag. ; OPTOUT SPAN around it 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AFgtC3UEm/Tu4HIjfDHIDmZkvgwHF0kWKcD3wP2hs+/wOfaILtXBr4c= ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ent.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION ent.example.com. IN A SECTION ANSWER SECTION AUTHORITY b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk7oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AFgtC3UEm/Tu4HIjfDHIDmZkvgwHF0kWKcD3wP2hs+/wOfaILtXBr4c= SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_donotq127.rpl0000644000175000017500000000522114010434640020010 0ustar wouterwouter; config options server: qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator donotquery of 127/8. ; The scenario presents an iteration chain that has 127.0.0.2 and ; 127.255.255.255 as nameserver IPs, like a spam-blocklist. ; these are 127/8 localhost and should be blocked, causing servfail. ; if not blocked, they cause a lookup, but this file does not specify ; 127.* responses, so testbound will fail the test. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ns.example.com. IN A 127.255.255.255 ns2.example.com. IN A 127.0.0.2 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ns.example.com. IN A 127.255.255.255 ns2.example.com. IN A 127.0.0.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ipsecmod_enabled.crpl0000644000175000017500000001114414010434640020650 0ustar wouterwouter; Test ipsecmod-enabled option. ; config options server: access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: no ipsecmod-max-ttl: 200 ipsecmod-enabled: no qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test ipsecmod-enabled option ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - check that the get the same answer from cache ; - check that we don't get the IPSECKEY answer from cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; response to IPSECKEY query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION ANSWER example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Query without RD, check if cached and with correct TTL STEP 11 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Query without RD, check if IPSECKEY cached STEP 21 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN IPSECKEY ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_pcnamech.rpl0000644000175000017500000001752014010434640020035 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with parent child differ with extra child name. ; child has extra name and it has to be used once the other one stops working. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END RANGE_END ; the working version, until time 49. RANGE_BEGIN 0 49 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.55 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.44 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; Broken. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 49 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END RANGE_BEGIN 50 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END RANGE_BEGIN 50 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.55 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.44 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ; server stops working. STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ; still pending query needs removal. STEP 70 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.net. IN AAAA ENTRY_END STEP 71 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ds_afterprime.rpl0000644000175000017500000001304414010434640020717 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test DS lookup after key prime is done. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DS SECTION AUTHORITY com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1251367385 1800 900 604800 86400 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION example.com. IN DS ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION example.com. IN DS SECTION AUTHORITY com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1251367385 1800 900 604800 86400 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/00-lint.tdir/0000755000175000017500000000000014010434640016634 5ustar wouterwouterunbound-1.13.1/testdata/00-lint.tdir/00-lint.dsc0000644000175000017500000000037414010434640020516 0ustar wouterwouterBaseName: 00-lint Version: 1.0 Description: Put source into lint. CreationDate: Wed Jan 3 14:12:02 CET 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: 00-lint.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/00-lint.tdir/00-lint.test0000644000175000017500000000043314010434640020720 0ustar wouterwouter# #-- 00-lint.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." get_make (cd $PRE ; $MAKE lint) unbound-1.13.1/testdata/val_ds_sha2_downgrade.crpl0000644000175000017500000001656114010434640021622 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-dsa: yes fake-sha1: yes trust-anchor-signaling: no harden-algo-downgrade: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with SHA256 DS downgrade to SHA1 ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; Downgrade attack: false SHA2, correct SHA1 ; SHA256 DS for sub.example.com. ;sub.example.com. 3600 IN DS 30899 5 2 51be8e847cc663f2775d0f2b6d15e41553c97ecb99b8dd667f18244e2f652033 ; BAD SHA256 DS sub.example.com. 3600 IN DS 30899 5 2 51be8e847cc663f2775d0f2b6d15e41553c97ecb99b8dd667f18244e2f652000 ; SHA1 DS for sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. ACqqpk1ow07XJvN1orEpiWOeqMLdDKQtTgWB8Mp6CF/9VTfHuWWmsu8= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN AAAA ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. ; must servfail, BOGUS STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER ;www.sub.example.com. 3600 IN A 11.11.11.11 ;www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_init_legacy.rpl0000644000175000017500000001702414010434640021654 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com bg. 3600 IN DNSKEY 257 3 5 AwEAAdSkAKz985k77l1wsGJJb0ITOjJnYNW7viMGMu6gxn+k94g+JBnVK3ic6vgtpgApKZXLPF/1IYtBxc6Xd+EtrJ9QMhCOhDK5enHYwmWoo/P4zSu1RIDDsi2xge7HQt3rzGiZB6L3CWm1gmLIYoYUKmpq2QttVtTcziEmP+MbO/WVvJsQYDMFb/eszILyPRB76kSmSz56k+lHl6BWwv4LUchKWNf8s0pJsI357FVqdXaqjES6PqbNeymPW6rvMRSRFFp7KGLrizPJjsMfBIvyXkya5Gx4Y81wPqoRbW74efgD5bXsPCwitI/WayJ5h99VL8VtH4Ed0/b7F/H0CqFUohAipZkwLyimagxcWPem0WvGRXy/o/XHr/n1aG9D4SVUrGFQZsUk+PztJdYhLw2zNTgmIW+/RGUzowyhkmqD4CC+cn7BgXJTAig3REQ6GSfmEbQk8mDwhmIKw/GOLNiUL9EIGmZintg/zdzU4fb8Wn+4oBtOBFmzrw1uWEgDtsmLpVZcJPnvrIOE+lVnist1b4mTz7OSFApcOquwpTaMxsaSu9cufbN0jpBzslhSwaUyWXNruxAypuIlOXWt6yPAJ+u6pZ7db7APj5XY5Pff16/zWTfC2xI5OpFsn2vuEsi816lknDwfi6vYihx10VBwlcfUus0cuZ+SxUGj9fHq3+TX ;{id = 64693 (ksk), size = 4096b} ;;state=2 ;;count=0 ;;lastchange=1253688984 ;;Wed Sep 23 06:56:24 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust in unbound with legacy autotrust file ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION bg. IN NS SECTION AUTHORITY bg. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION bg. IN DNSKEY SECTION ANSWER bg. 3600 IN DNSKEY 257 3 5 AwEAAdSkAKz985k77l1wsGJJb0ITOjJnYNW7viMGMu6gxn+k94g+JBnV K3ic6vgtpgApKZXLPF/1IYtBxc6Xd+EtrJ9QMhCOhDK5enHYwmWoo/P4 zSu1RIDDsi2xge7HQt3rzGiZB6L3CWm1gmLIYoYUKmpq2QttVtTcziEm P+MbO/WVvJsQYDMFb/eszILyPRB76kSmSz56k+lHl6BWwv4LUchKWNf8 s0pJsI357FVqdXaqjES6PqbNeymPW6rvMRSRFFp7KGLrizPJjsMfBIvy Xkya5Gx4Y81wPqoRbW74efgD5bXsPCwitI/WayJ5h99VL8VtH4Ed0/b7 F/H0CqFUohAipZkwLyimagxcWPem0WvGRXy/o/XHr/n1aG9D4SVUrGFQ ZsUk+PztJdYhLw2zNTgmIW+/RGUzowyhkmqD4CC+cn7BgXJTAig3REQ6 GSfmEbQk8mDwhmIKw/GOLNiUL9EIGmZintg/zdzU4fb8Wn+4oBtOBFmz rw1uWEgDtsmLpVZcJPnvrIOE+lVnist1b4mTz7OSFApcOquwpTaMxsaS u9cufbN0jpBzslhSwaUyWXNruxAypuIlOXWt6yPAJ+u6pZ7db7APj5XY 5Pff16/zWTfC2xI5OpFsn2vuEsi816lknDwfi6vYihx10VBwlcfUus0c uZ+SxUGj9fHq3+TX bg. 3600 IN DNSKEY 256 3 5 AwEAAcgZKgxv/GlzYF/7ExO7fd4M23oC4z5vZa9A5kjiHDhK3fWbX7Zb 6i3Do668AVo2OVPJkhLHgueRkvON6G1AuKnNPr/aqYkswHp5RK4+bDz4 MYIgNxTHxVnmR0xY3K63xDinP1MP4bXfo8qoJDgYM25zQg4yZ5etrH+k l/fPK0Tr bg. 3600 IN DNSKEY 256 3 5 AwEAAduUF9stPDvXkFznyZ/lL1CPJWHhmHqFv7zZHKtpd0YdoRSxJlT/ KtlEX5TFXOwiaodc5VPTPsUmkoIJ8XW+v9ocjzIPbKErSvQ1HsRNxjFR mUgnRGUeD7rlqGqwheEMlXD57IYAm5Vfs4RPp+zyp1PYVwDtamGPmWny 1xdOwiXF bg. 3600 IN DNSKEY 257 3 5 AwEAAblV90SQjp4rI9ZLQs3pwcvkmlEt0OogfuI5cm4l+b3fHGA3YtVU Tz8j6SzpMQR/psx5KzFzqIJc8YRdLJSFhiBaLxDYPltcjFSie71Ln2U0 +PPn5NHqUzCYTysLtRG0sl8FHmFGEY4OmkevpDZCX9sscDdt0MfiVwoN 23Ni3nHuSrGewgr0RI4nBrcrBWII7oAfhyZ9XKWmlZpRM8aNHA6hijix ZsSzTNYAfr9r+s/lpiDG2ybiju1H6sKhL/jY02UdMTFiLFdRZ6yuOzxw FXWQE/d7cSe5dSCYMU5EmD2Qy0nbGG0YSD9e0iehw01Fr70HfIV9uNXM zqHrrTyajMtlft/z9aUug5qIVxFSczNSRCyJedcJU+9OZUMj90yXQLeG 2soa6QOfAUyYZLs9OgOIKoE0c7hQRIicPM5bK0ycUM3NTcIYUzDV8zZZ Fo0xaM1QEIMdXz4kCfFS6V4lUleufTCDTI0CkTq9g14ia464HFXb4WKD 6eHl0hvnXAviPAqrma0K1iX9efjxiDumyAIJlm/plBL39CMuX/ENyER8 XXqv9aXAAcdlN2EYsbejGJ262SjvGIMzEVoUKd9UqrnSe44w/2+lzL6a WYqFz6njejH6rbzcof2MoEt1QC47G80gZzFk/tn1mMIKKMbQyvMy7+6K HaTKSHnJCXr27klR bg. 3600 IN RRSIG DNSKEY 5 1 3600 20091023110015 20090923110015 12576 bg. n73VW50NVGhJYvXUjuobebUFYS3NiVkYoZ9oW+lKtbp4AUQHf7HfIxKk aOesl1EeXMI+IcAIyMkmJQDVPBEpf5WhWarGVthAxOXradSSYKI0Nvuf 4cXoig8tM1n2qScNWlEwQTdNxZl5bQND61ZSPWWTpA3bt4iu8lWqXxFB O2g= bg. 3600 IN RRSIG DNSKEY 5 1 3600 20091023110015 20090923110015 46846 bg. O4eZhJMy+A8aJL63rK04fFeDrn/CLLkuXW+NePdcuyDEaHwX0UwvuNxy V8aGQNtp+YJCfVzc4Qw9lrTCg+qS4o8qDtj4/p27HHtQ4+owLM2gi1pS Ek9/Ct8FabsuBAR+f4/SCVtf75+QT7kfNzJqN1/o6GU8W9/CILGzD52f kHxqpW8k0pPUrZ4r5UkpUiZTFoLe8lkSN30Dlc84dFOH8myuoDbiwH5B GjdrR8xwe5e2+wnsAkzcwN0+7ND1mIGCjebrdnfyCV3eMDzrDu2ZH8Bt swPShC+8VbnGcEmNfGycaIvwFJO89zQ0YBPbfiX07n+2mDIcfvHpq0cD iL0As6rbvEq9tmePkHrggN1DuuxZWInhfmUCOZK62F33rxefJv/VmM5T C45fvAh5RzetMhuRHq6Upxcma1hqlY7hz3PfQTHl0cPNI3ZnJOrfg5pe 04Tlu7KfVdSuhsS71+I8dotokCMdocoft9kPyQxfSln4/eoSPTYa/oaL pUJJfjdTS2XkgVL5zm8aC33273hzz82eLuHNc78x0Gac+QLknNJMwylx OYXn27o53TufSb8fkh4M3IiU53qY6IhCTQqEFwqiANodvQaOV6nrs4+D jRKbdviwxM7Tt2SQ3Z3d64kuD6T23C9FdovSGpRG5SHALcTdd8O9pUyk /mPoNBWKOuw= bg. 3600 IN RRSIG DNSKEY 5 1 3600 20091023110015 20090923110015 64693 bg. DVh3tlQ6LnQ4HC5G9DFPszU8OmKDKBPIbp4DIKt/TbKWRpbMLfwzBUwR EHr6qkrdwKyUgo59JoDeeb0cXCFooxtIhZMLv2ntlPTPTp+4jEoi/t9P KhqTS2r3Ptbj3wVypdRwi45wChro0XW+ZNmbh/BRSo8eKJVZcor9rj5b soPwfPVvKe+iQ18PWxTXE4FLDv3wQ1/5EpqaAbOjvvCnuOCMUYotjvZt GwDcAx98mPLY42zQfc+EoN9qnlEfsu9zZOVgQQDgvb+yTbyLaP9yRp13 PIf3jQ4IPMAtL9ONGokd1Jl6v0hXIVTlMoF0EGgtcDiE2KZ64hhtY+t9 Z8sraETJxxdTeX/E81+9I3cBL1VVAT9Fe9nzfXd1sP0FKjaVcIzJnsZ4 lBVZE0iDA2ZaMVeaH8z/38eMHIhn+J2ZiMwz/5b/ueHFfiAjFedbSQrR ALOSggmFd2v6uh8X4osM9Gxg8Q3fDhqGjSkEQIc/VdEMQbh2yU0o+X8q 5r13WkEmS0pKJhvPXocpRWdqfKb2QwnswU6pxbuBuwUd1i087YkTSl/R QREOZNgtfw2qpwv6Lm3q5DT5igF0G78OS3L58aSm0nHxQx9WsCE19/pe 66o1hH3Umx1Q/B7Zt4ZD0R9YE1w20qUcb9HmZumt0LJWtIgTrOuW+6SE WgGvpjXrHS8= ENTRY_END RANGE_END ; set date/time to wed sep 23. STEP 5 TIME_PASSES EVAL ${1253688984 + 7200 + 10800} STEP 6 TRAFFIC ; do the probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 3200 ${timeout} 3600} ; the auto probing should have been done now. STEP 11 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: bg. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0+$probe0} ;;${ctime $t0+$probe0} ;;query_failed: 0 ;;query_interval: 3600 ;;retry_time: 3600 bg. 3600 IN DNSKEY 257 3 5 AwEAAblV90SQjp4rI9ZLQs3pwcvkmlEt0OogfuI5cm4l+b3fHGA3YtVUTz8j6SzpMQR/psx5KzFzqIJc8YRdLJSFhiBaLxDYPltcjFSie71Ln2U0+PPn5NHqUzCYTysLtRG0sl8FHmFGEY4OmkevpDZCX9sscDdt0MfiVwoN23Ni3nHuSrGewgr0RI4nBrcrBWII7oAfhyZ9XKWmlZpRM8aNHA6hijixZsSzTNYAfr9r+s/lpiDG2ybiju1H6sKhL/jY02UdMTFiLFdRZ6yuOzxwFXWQE/d7cSe5dSCYMU5EmD2Qy0nbGG0YSD9e0iehw01Fr70HfIV9uNXMzqHrrTyajMtlft/z9aUug5qIVxFSczNSRCyJedcJU+9OZUMj90yXQLeG2soa6QOfAUyYZLs9OgOIKoE0c7hQRIicPM5bK0ycUM3NTcIYUzDV8zZZFo0xaM1QEIMdXz4kCfFS6V4lUleufTCDTI0CkTq9g14ia464HFXb4WKD6eHl0hvnXAviPAqrma0K1iX9efjxiDumyAIJlm/plBL39CMuX/ENyER8XXqv9aXAAcdlN2EYsbejGJ262SjvGIMzEVoUKd9UqrnSe44w/2+lzL6aWYqFz6njejH6rbzcof2MoEt1QC47G80gZzFk/tn1mMIKKMbQyvMy7+6KHaTKSHnJCXr27klR ;{id = 46846 (ksk), size = 4096b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t0} ;;${ctime $t0} bg. 3600 IN DNSKEY 257 3 5 AwEAAdSkAKz985k77l1wsGJJb0ITOjJnYNW7viMGMu6gxn+k94g+JBnVK3ic6vgtpgApKZXLPF/1IYtBxc6Xd+EtrJ9QMhCOhDK5enHYwmWoo/P4zSu1RIDDsi2xge7HQt3rzGiZB6L3CWm1gmLIYoYUKmpq2QttVtTcziEmP+MbO/WVvJsQYDMFb/eszILyPRB76kSmSz56k+lHl6BWwv4LUchKWNf8s0pJsI357FVqdXaqjES6PqbNeymPW6rvMRSRFFp7KGLrizPJjsMfBIvyXkya5Gx4Y81wPqoRbW74efgD5bXsPCwitI/WayJ5h99VL8VtH4Ed0/b7F/H0CqFUohAipZkwLyimagxcWPem0WvGRXy/o/XHr/n1aG9D4SVUrGFQZsUk+PztJdYhLw2zNTgmIW+/RGUzowyhkmqD4CC+cn7BgXJTAig3REQ6GSfmEbQk8mDwhmIKw/GOLNiUL9EIGmZintg/zdzU4fb8Wn+4oBtOBFmzrw1uWEgDtsmLpVZcJPnvrIOE+lVnist1b4mTz7OSFApcOquwpTaMxsaSu9cufbN0jpBzslhSwaUyWXNruxAypuIlOXWt6yPAJ+u6pZ7db7APj5XY5Pff16/zWTfC2xI5OpFsn2vuEsi816lknDwfi6vYihx10VBwlcfUus0cuZ+SxUGj9fHq3+TX ;{id = 64693 (ksk), size = 4096b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1253688984 ;;Wed Sep 23 06:56:24 2009 FILE_END SCENARIO_END unbound-1.13.1/testdata/val_mal_wc.rpl0000644000175000017500000001152714010434640017341 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata, wildcards and ENT ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION b.example.com. IN DS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION b.example.com. IN DS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION b.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. 86394 IN SOA NS.IANA.ORG. NSTLD.IANA.ORG. 2007092000 1800 900 604800 86400 example.com. 86394 IN RRSIG SOA 3 2 86394 20070926135752 20070829135752 2854 example.com. MCwCFFHjDbVjiPywHcXm669wMUJ7dlcoAhRfuauTUoExMSx96lTVYbBHOXtQEw== ;{id = 2854} ; note that b.example.com. is an empty nonterminal *.example.com. 3600 IN NSEC *.b.example.com. A MX RRSIG NSEC *.example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFE9CopvxP6w/1HqnqxNluh1Qbgk0AhRgKrdjk/YoEm4tcYflNX6McDMCgQ== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION b.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION b.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. 86394 IN SOA NS.IANA.ORG. NSTLD.IANA.ORG. 2007092000 1800 900 604800 86400 example.com. 86394 IN RRSIG SOA 3 2 86394 20070926135752 20070829135752 2854 example.com. MCwCFFHjDbVjiPywHcXm669wMUJ7dlcoAhRfuauTUoExMSx96lTVYbBHOXtQEw== ;{id = 2854} *.example.com. 3600 IN NSEC *.b.example.com. A MX RRSIG NSEC *.example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFE9CopvxP6w/1HqnqxNluh1Qbgk0AhRgKrdjk/YoEm4tcYflNX6McDMCgQ== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ipsecmod_max_ttl.crpl0000644000175000017500000001154414010434640020732 0ustar wouterwouter; Test ipsecmod-max-ttl option. ; config options server: access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: no ipsecmod-max-ttl: 200 qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test ipsecmod-max-ttl option ; Scenario overview: ; - query for example.com. IN A ; - check that query for example.com. IN IPSECKEY is generated ; - check that we get an answer for example.com. IN A with the correct TTL ; - check that the get the same answer from cache ; - check that we get the IPSECKEY answer from cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; response to IPSECKEY query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION ANSWER example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION example.com. IN IPSECKEY ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 200 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Query without RD, check if cached and with correct TTL STEP 11 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 200 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Query without RD, check if IPSECKEY cached STEP 21 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN IPSECKEY ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION ANSWER example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/0000755000175000017500000000000014010434640021310 5ustar wouterwouterunbound-1.13.1/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test0000644000175000017500000000265414010434640026057 0ustar wouterwouter# #-- dnstap_tls_badcert.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log; then echo "it is in tap.log"; echo "but there should not be a connection" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "information not in tap.log" fi echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.dsc0000644000175000017500000000053414010434640025644 0ustar wouterwouterBaseName: dnstap_tls_badcert Version: 1.0 Description: test dnstap tls with bad cert for authentication CreationDate: Tue Feb 18 13:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap_tls_badcert.pre Post: dnstap_tls_badcert.post Test: dnstap_tls_badcert.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.conf0000644000175000017500000000252414010434640026021 0ustar wouterwouterserver: verbosity: 4 num-threads: 1 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-ip: "127.0.0.1@@TAPPORT@" dnstap-tls: yes dnstap-tls-server-name: "unbound" # the actual tls cert bundle that authenticates the server # is the unbound_server.pem bundle. # we pass the wrong bundle. (of another key we also use in the client # authentication test) dnstap-tls-cert-bundle: "unbound_control.pem" dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post0000644000175000017500000000106514010434640026060 0ustar wouterwouter# #-- dnstap_tls_badcert.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log echo "> tap logfiles" cat tap.log cat tap.errlog cat fwd.log exit 0 unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/unbound_server.key0000644000175000017500000000463314010434640025070 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/unbound_server.pem0000644000175000017500000000246614010434640025063 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/unbound_control.pem0000644000175000017500000000247614010434640025236 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre0000644000175000017500000000364114010434640025663 0ustar wouterwouter# #-- dnstap_tls_badcert.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 4 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) TAP_PORT=$(($RND_PORT + 3)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap_tls_badcert.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap.errlog" "start of service" # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_badcert.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.testns0000644000175000017500000000050314010434640026407 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dnstap_tls_badcert.tdir/unbound_control.key0000644000175000017500000000462714010434640025245 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/test_sigs.ecdsa_p2560000644000175000017500000000134314010434640020272 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test ECDSA P256 signatures from draft-ietf-dnsext-ecdsa-04 ENTRY_BEGIN SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 257 3 13 ( GojIhhXUN/u4v54ZQqGSnyhWJwaubCvTmeexv7bR6edb krSqQpF64cYbcB7wNcP+e+MAnLr+Wi9xMWyQLc8NAA== ) ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. 3600 IN A 192.0.2.1 www.example.net. 3600 IN RRSIG A 13 3 3600 ( 20100909100439 20100812100439 55648 example.net. qx6wLYqmh+l9oCKTN6qIc+bw6ya+KJ8oMz0YP107epXA yGmt+3SNruPFKG7tZoLBLlUzGGus7ZwmwWep666VCw== ) ENTRY_END unbound-1.13.1/testdata/val_nodata_entwc.rpl0000644000175000017500000001247114010434640020544 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard nodata on empty nonterminal response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} ; Denies A, note this is the end of the NSEC chain. *.u.example.com. IN NSEC y.www.example.com. RRSIG NSEC *.u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFEiVqFPbtbpIh8NrE/YjNCDPFYZgAhR9/9SDX2lwxckJZR299JcRRsjnqw== ;{id = 2854} ; Denies wildcard example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFGlz/gvGdVxEo3Kpr+MijEGCZgwaAhRU7qbF13vmCVgR8dFw7LQFKopV6w== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} *.u.example.com. IN NSEC y.www.example.com. RRSIG NSEC *.u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFEiVqFPbtbpIh8NrE/YjNCDPFYZgAhR9/9SDX2lwxckJZR299JcRRsjnqw== ;{id = 2854} example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFGlz/gvGdVxEo3Kpr+MijEGCZgwaAhRU7qbF13vmCVgR8dFw7LQFKopV6w== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ds_gost.crpl0000644000175000017500000001601114010434640017675 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with GOST DS digest ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; GOST DS for sub.example.com. sub.example.com. 3600 IN DS 60385 12 3 2be04f63b3d069fd65f81a3b810b661a00d39be3ff00d1c7481a150b93b0d027 ; xepov-bofek-fuset-bipiz-tunoz-mukyf-rybyb-ranic-pobet-fakov-fozob-bagus-ludac-pyheb-rygor-bygyd-lyxyx ; SHA DS for sub.example.com. ;sub.example.com. 3600 IN DS 60385 12 1 0a66f7923318bb1e208bfd975ffa2e30cfcdf962 ; xedik-katin-dasec-myvic-vumum-rizan-luluz-paraf-befas-tovek-dyxax ;sub.example.com. 3600 IN DS 60385 12 2 cd3290b84b457d02ca29846a005a5eba61640256ced8deca0ef8345d2cd34a58 ; xufef-dugir-modog-hyzyb-dadod-nicuk-pubyh-polor-pomuk-gobuh-kufet-mulus-pofyz-metoh-tarit-fudih-moxex sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. ADwjiGkzrz8RPRJ6LAB37cNEQxTXSaR6Stu/GwGvcQ7KVGH/Qw76ktI= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 12 3 3600 20070926134150 20070829134150 60385 sub.example.com. LAgerMKnwGgapo7tDs2jV8kjA+RminByvkR6qHineRDv4SYbRdDlCtYcFR4CoYo9aigLPej1WBmaZjFV+/7AVA== ;{id = 60385} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. qYVQEwiVNWwRRoDJxK3c3LaXtfvOm/YzOEzXbN2MxPHZXHaa2nCzWLsILNstot/wTAbrk4wNcT16gKxF5JguNw== ;{id = 60385} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 12 9SZY+xB3wKtrLoRHzkBs9L3fjcvazjnk5HF3gMaD1PVp4pthrwgHIm0TUaLrd3YCa2VCl5wj+MzbhZi8NEJ/Cg== ;{id = 60385 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 12 3 3600 20070926134150 20070829134150 60385 sub.example.com. zyZCppfMjlMS9xs3pJfbWkdA6EgV5MqI11AdVRV8pBsyI7diYLWm8RAHlhEI5MT59A6IT6Di9YjOCvWJjzZ9tA== ;{id = 60385} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 12 3 3600 20070926134150 20070829134150 60385 sub.example.com. 3y6qmOn5GIytQQtXmdhkyL0+8Um7uNzOA0m0CkWFtzN81T98jHdGcCGNC3CIGMyhKaWKqPlOoSwIfm55fa4qRA== ;{id = 60385} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. VS97UxG9Kn7DIYFCnBDJQ3n7sQ+aYF42/cU6s8jF1Y4nHSorKPFa0KHn0WVmaW33hA+Vs4BWTvJ1/JOpbiJskA== ;{id = 60385} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. KVDpNBH83UM8l1e9yAdXA1fV+wFJSJF4NtOnDLTtbpfyVbndNW3tvPc2YfLBxTEZeUCns2QrqcmIMdZ086frOQ== ;{id = 60385} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. KVDpNBH83UM8l1e9yAdXA1fV+wFJSJF4NtOnDLTtbpfyVbndNW3tvPc2YfLBxTEZeUCns2QrqcmIMdZ086frOQ== ;{id = 60385} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/clang-analysis.tdir/0000755000175000017500000000000014010434640020356 5ustar wouterwouterunbound-1.13.1/testdata/clang-analysis.tdir/clang-analysis.dsc0000644000175000017500000000036014010434640023755 0ustar wouterwouterBaseName: clang-analysis Version: 1.0 Description: clang analysis CreationDate: Wed 12 Sep 16:00:26 CEST 2018 Maintainer: Wouter Wijngaards Category: Component: Depends: Help: Pre: Post: Test: clang-analysis.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/clang-analysis.tdir/clang-analysis.test0000644000175000017500000000520014010434640024161 0ustar wouterwouter# #-- clang-analysis.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test # common functions . ../common.sh PRE="../.." if test ! -x "`which clang 2>&1`"; then echo "No clang in path" exit 0 fi #echo "have clang" # test if assertions are enabled if grep "^#define UNBOUND_DEBUG" $PRE/config.h >/dev/null; then : else echo "UNBOUND_DEBUG is not enabled, skip test" # no unbound debug means no assertions, and clang analyzer uses # the assertions to make inferences. exit 0 fi # read value from Makefile # $1: result variable name # $2: string on Makefile # $3: Makefile location read_value () { x=`grep "$2" $3 | sed -e "s/$2//"` eval $1="'""$x""'" # print what we just read #echo $1"="'"'"`eval echo '$'$1`"'"' } # read some values from the Makefile read_value srcdir '^srcdir=' $PRE/Makefile read_value CPPFLAGS '^CPPFLAGS=' $PRE/Makefile read_value LIBOBJS '^LIBOBJS= *' $PRE/Makefile read_value DNSCRYPT_SRC '^DNSCRYPT_SRC= *' $PRE/Makefile read_value DNSTAP_SRC '^DNSTAP_SRC= *' $PRE/Makefile read_value WITH_PYTHONMODULE '^WITH_PYTHONMODULE= *' $PRE/Makefile read_value WINAPPS '^WINAPPS= *' $PRE/Makefile #echo dir is $dir # turn libobjs into C files compatfiles=`echo "$LIBOBJS" | sed -e 's?..LIBOBJDIR.?compat/?g' -e 's/.U.o/.c/g'` #echo compatfiles are $compatfiles #echo if test "$WITH_PYTHONMODULE" = "yes"; then PYTHONMOD_SRC="pythonmod/*.c"; fi if test ! -z "$WINAPPS"; then WIN_SRC="winrc/*.c"; fi cd $PRE; odir=`pwd` cd $srcdir # check the files in the srcdir fail="no" for x in cachedb/*.c daemon/*.c dns64/*.c $DNSCRYPT_SRC $DNSTAP_SRC edns-subnet/*.c ipsecmod/*.c iterator/*.c libunbound/*.c $PYTHONMOD_SRC respip/*.c services/*.c services/*/*.c sldns/*.c smallapp/*.c util/*.c util/*/*.c validator/*.c $WIN_SRC $compatfiles testcode/*.c; do if test "$x" = "util/configlexer.c"; then continue; fi if test "$x" = "util/configparser.c"; then continue; fi if test "$x" = "testcode/signit.c"; then continue; fi if test "$x" = "compat/reallocarray.c"; then continue; fi echo clang --analyze $CPPFLAGS $x plist=`basename $x .c`.plist rm -rf $plist #echo "(cd $odir; clang --analyze $CPPFLAGS $srcdir/$x 2>&1 ) | tee tmp.$$" (cd "$odir"; clang --analyze $CPPFLAGS $srcdir/$x 2>&1 ) | tee tmp.$$ if grep -e warning -e error tmp.$$ >/dev/null; then fail="yes" fails="$fails $x" fi rm -rf $plist tmp.$$ done echo if test "$fail" = "yes"; then echo "Failures" echo "create reports in file.plist dir with clang --analyze --analyzer-output html $CPPFLAGS""$fails" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/val_dnametoolong.rpl0000644000175000017500000002126314010434640020563 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a dname too long response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR YXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER ; length ; www. = 4 ; long1234567890abcdef. = 21 ; long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef. = 12 * 21 = 252 example.com. IN DNAME long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFBdWQE6lzktCN4vdAx9HY1zZe6dYAhUAghsHM4lSJAykdvp5p0wppml03K0= ;{id = 2854} ; unsigned CNAME synthesis is too long SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER ; from *.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO YXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER example.com. IN DNAME long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef.long1234567890abcdef. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFBdWQE6lzktCN4vdAx9HY1zZe6dYAhUAghsHM4lSJAykdvp5p0wppml03K0= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_stubfirst.rpl0000644000175000017500000000541214010434640020301 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. stub-zone: name: "example.com" stub-addr: 1.2.3.6 # failing server stub-first: yes CONFIG_END SCENARIO_BEGIN Test stub-first directive ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; local authority (that fails a lot) RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION example.com. IN NS SECTION ANSWER ;example.com. IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ;www.example.com. IN A 10.20.30.50 SECTION AUTHORITY ;example.com. IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametonodata.rpl0000644000175000017500000001676314010434640020723 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname to nodata ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFGtYzScyRnHV8U/jOIPYwrlI9t3oAhRF0PIf+IthUR7uCWIvskWp5CfReQ== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER SECTION AUTHORITY www.example.net. IN NSEC example.net. MX NSEC RRSIG www.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. Z+3/WKJEqhWoMOQLC7Yb1dTVGaqzmU0bZ2cH9jSfNQZiT0O37yzCNNUmMsW4gsJOh3o61iZ+hxpze3aO3aedqQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFGtYzScyRnHV8U/jOIPYwrlI9t3oAhRF0PIf+IthUR7uCWIvskWp5CfReQ== ;{id = 2854} SECTION AUTHORITY www.example.net. IN NSEC example.net. MX NSEC RRSIG www.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. Z+3/WKJEqhWoMOQLC7Yb1dTVGaqzmU0bZ2cH9jSfNQZiT0O37yzCNNUmMsW4gsJOh3o61iZ+hxpze3aO3aedqQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/root_hints.tdir/0000755000175000017500000000000014010434640017641 5ustar wouterwouterunbound-1.13.1/testdata/root_hints.tdir/root_hints.test0000644000175000017500000000320414010434640022731 0ustar wouterwouter# #-- 06-ianaports.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # dig 9 ? digv=`dig -v 2>&1 | wc -l` if test $digv -ne 1; then echo "Dig too old. skip test" exit 0 fi eval `grep ^srcdir= $PRE/Makefile` echo "srcdir="$srcdir # obtain list from compiled in settings: grep "ROOT-SERVERS.NET." $PRE/$srcdir/iterator/iter_hints.c > curlist echo "Current list:" cat curlist result="0" # dig all servers and check if same for rs in A.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET.; do addr4=`dig +short $rs A` addr6=`dig +short $rs AAAA` # all IP4 must be present as listed. if test -z "$addr4" ; then echo "$rs A is removed! It has changed!" result="1" fi if grep $rs curlist | grep "$addr4" >/dev/null; then echo "$rs is OK: A $addr4" else echo "$rs A now $addr4, it has changed!" result="1" fi # if IP6 is "" then it must be "" as well in the compiled hints if test -z "$addr6" ; then if grep $rs curlist | grep ":" >/dev/null; then echo "$rs AAAA now removed, it has changed!" result="1" else echo $rs' is OK: AAAA ""' fi else # root server has an IP6. if grep $rs curlist | grep "$addr6" >/dev/null; then echo "$rs is OK: AAAA $addr6" else echo "$rs AAAA now $addr6, it has changed!" result="1" fi fi done exit $result unbound-1.13.1/testdata/root_hints.tdir/root_hints.dsc0000644000175000017500000000041714010434640022526 0ustar wouterwouterBaseName: root_hints Version: 1.0 Description: check if root hints have changed. CreationDate: Thu Oct 22 12:42:40 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: root_hints.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/val_nodata_zonecut.rpl0000644000175000017500000001051414010434640021107 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata response from wrong side of zonecut ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; Denies A, note this is the end of the NSEC chain. ; from wrong side of zone-cut www.example.com. 3600 IN NSEC example.com. NS DS RRSIG NSEC www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. AA+3mzAYPyQ8G9EKxeyNM+UZY+RtCiS5BOkS8h4wSxMT3lfVdadGpn8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+008+55566.ds0000644000175000017500000000013614010434640020432 0ustar wouterwouterexample.com. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af unbound-1.13.1/testdata/test_packets.30000644000175000017500000007166414010434640017303 0ustar wouterwouter1576 1ca000000001000000000000036e73310762617365776562026e6c0000010001 1ca080000001000000020002036e73310762617365776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004d535d035c03a00010001000151800004d535d034 1577 221c0000000100000000000009652d6c756e61746963026e6c0000010001 221c8000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 1578 b9ab000000010000000000000962626469676974616c026e6c0000010001 b9ab800000010000000200000962626469676974616c026e6c0000010001c00c0002000100015180001105646e732d33056c61646f7403636f6d00c00c0002000100015180000805646e732d34c030 1579 b2c21baf5011fae2e9c00000000000000000 b2c29ba40000000000000000 1580 e1be0000000100000000000008686f75736561647303696467026e6c0000010001 e1be8000000100000003000308686f75736561647303696467026e6c0000010001c01500020001000151800006036e7331c015c01500020001000151800006036e7332c015c01500020001000151800006036e7333c015c02d0001000100015180000451af4646c03f0001000100015180000451af4647c05100010001000151800004d5a0fde6 1581 000000007002faf00a970000020405b401010402 000080010000000000000000 1582 02ac00000001000000000000036e73310563736e6574026e6c0000010001 02ac80000001000000020002036e73310563736e6574026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c00010001000151800004c2451012c03800010001000151800004c2451212 1583 153e00000001000000000000095f6b65726265726f73045f746370026463065f6d736463730644494b534954024e4c0000210001 153e84030001000000010000095f6b65726265726f73045f746370026463065f6d736463730644494b534954024e4c0000210001c02c00060001000038400036026e730f646f6d61696e2d7265676973747279c02c0a686f73746d6173746572c0430bf1e540000070800000384000278d0000003840 1584 b2c21bb05010fae2e9bf0000000000000000 b2c29bb40000000000000000 1585 b2c2d04f5010faf0b4380000000000000000 1586 b2c2d04f5018faf0747c0000008f552d000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afc84403c4e040003000000304e544c4d535350000100000097b208e00b000b002500000005000500200000004e54465331544543484e4f50414e454c0000 1587 bf28000000010000000000000962696a656e6b6f7266026e6c0000010001 bf28800000010000000300030962696a656e6b6f7266026e6c0000010001c00c00020001000151800010036e7331096d61726b6772616166c016c00c00020001000151800006036e7332c02ec00c00020001000151800006036e7333c02ec02a00010001000151800004c3f13ceec04600010001000151800004c372eb43c058000100010001518000043e320e8f 1588 f95900000001000000000000037777770766636f72696f6e026e6c0000010001 f95984030001000000010000037777770766636f72696f6e026e6c0000010001c01800060001000038400036026e730f646f6d61696e2d7265676973747279c0180a686f73746d6173746572c02f0bf1e540000070800000384000278d0000003840 1589 b2c2d05d5011fae2b3a60000000000000000 1590 000000007002faf0d9770000020405b401010402 000080010000000000000000 1591 b2c2d05e5010fae2b3a50000000000000000 1592 a18b00000001000000000000036e733107626265796f6e64026e6c0000010001 a18b80000001000000020002036e733107626265796f6e64026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 1593 b2c379ae5010faf0d9b90000000000000000 b2c3f9a40000000000000000 1594 410400000001000000000000036e733107626265796f6e64026e6c0000260001 410480000001000000020002036e733107626265796f6e64026e6c0000260001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c000100010001518000043eb1900bc03a000100010001518000043eb19002 1595 852300000001000000000000037777770f64616d696174652d636f6c6c656765026e6c0000010001 852380000001000000020002037777770f64616d696174652d636f6c6c656765026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c020c01000020001000151800006036e7332c038c03400010001000151800004d4b20403c04d00010001000151800004d5881e45 1596 208200000001000000000000036e733207626265796f6e64026e6c0000010001 208280000001000000020002036e733207626265796f6e64026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 1597 883a00000001000000000000036e733207626265796f6e64026e6c0000260001 883a80000001000000020002036e733207626265796f6e64026e6c0000260001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02c000100010001518000043eb1900bc00c000100010001518000043eb19002 1598 b2c379ae5018faf0d58e0000008f199c000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afc84403c4e040003000000304e544c4d535350000100000097b208e00b000b002500000005000500200000004e54465331544543484e4f50414e454c0000 b2c3f9a40000000000000000 1599 2a640000000100000000000009652d6c756e61746963026e6c0000010001 2a648000000100000002000009652d6c756e61746963026e6c0000010001c00c0002000100015180000e036e73330767617574656e67c016c00c00020001000151800006036e7334c02e 1600 99a400000001000000000000037777770e7765736c6579736e65696a646572026e6c0000010001 99a480000001000000020000037777770e7765736c6579736e65696a646572026e6c0000010001c01000020001000151800014046e733031096772616669782d697303636f6d00c01000020001000151800007046e733033c038 1601 7ab500000001000000000000096d61696c686f7374320b66726565686f7374696e67026e6c0000010001 7ab580000001000000020000096d61696c686f7374320b66726565686f7374696e67026e6c0000010001c0160002000100015180001105646e732d33056c61646f7403636f6d00c0160002000100015180000805646e732d34c03c 1602 c3e800000001000000000000037777770f64616d696174652d636f6c6c656765026e6c0000010001 c3e880000001000000020002037777770f64616d696174652d636f6c6c656765026e6c0000010001c0100002000100015180000d036e7331066e6c74726565c020c01000020001000151800006036e7332c038c03400010001000151800004d4b20403c04d00010001000151800004d5881e45 1603 95af00100001000000000001046d61696c03777873026e6c00000100010000290800000080000000 95af80000001000000030004046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a650000291000000000000000 1604 b2c379bc5011fae2d9270000000000000000 b2c3f9b40000000000000000 1605 61be00000001000000000000037777771a676f6c666261616e68657472696a6b76616e6e696a6d6567656e026e6c0000010001 61be80000001000000020000037777771a676f6c666261616e68657472696a6b76616e6e696a6d6567656e026e6c0000010001c0100002000100015180000b026e73026e6c036e657400c0100002000100015180001206617574683630026e73026e6c027575c045 1606 f99c00000001000000000000095f6b65726265726f73045f746370026463065f6d736463730b746563686e6f70616e656c026e6c0000060001 f99c84030001000000010000095f6b65726265726f73045f746370026463065f6d736463730b746563686e6f70616e656c026e6c0000060001c03100060001000038400036026e730f646f6d61696e2d7265676973747279c0310a686f73746d6173746572c0480bf1e540000070800000384000278d0000003840 1607 d8bd00000001000000000000037777770c636170636974796368657679026e6c0000010001 d8bd84030001000000010000037777770c636170636974796368657679026e6c0000010001c01d00060001000038400036026e730f646f6d61696e2d7265676973747279c01d0a686f73746d6173746572c0340bf1e540000070800000384000278d0000003840 1608 f05f00000001000000000000087261626f62616e6b026e6c0000010001 f05f80000001000000020001087261626f62616e6b026e6c0000010001c00c00020001000151800005026e73c00cc00c0002000100015180000b026e73026e6c036e657400c0290001000100015180000491484fde 1609 b2c379bd5010fae2d9260000000000000000 b2c3f9b40000000000000000 1610 175928000001000000010000026e6c0000060001095f6b65726265726f73045f746370026463065f6d736463730b746563686e6f70616e656c026e6c000021000100000258001c000000640058056e746673310b746563686e6f70616e656c026e6c00 1759a8040000000000000000 1611 4d9a0000000100000000000005646e732d31056c61646f74026e6c0000010001 4d9a8000000100000002000005646e732d31056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 1612 adb60000000100000000000005646e732d32056c61646f74026e6c0000010001 adb68000000100000002000005646e732d32056c61646f74026e6c0000010001c0120002000100015180001105646e732d33056c61646f7403636f6d00c0120002000100015180000805646e732d34c032 1613 b22d00000001000000000000037777771777696a6b766572656e6967696e672d68616e65766f6574026e6c0000010001 b22d84030001000000010000037777771777696a6b766572656e6967696e672d68616e65766f6574026e6c0000010001c02800060001000038400036026e730f646f6d61696e2d7265676973747279c0280a686f73746d6173746572c03f0bf1e540000070800000384000278d0000003840 1614 ba9a00000001000000000000037777771076616b616e746965776f6e696e67656e0f76616b616e7469652d61616e626f64026e6c0000010001 ba9a80000001000000020000037777771076616b616e746965776f6e696e67656e0f76616b616e7469652d61616e626f64026e6c0000010001c02100020001000151800011036e733005736572766502636f02756b00c02100020001000151800010036e7330057365727665036e6574c052 1615 000000007002faf0ec1e0000020405b401010402 000080010000000000000000 1616 8f9e00000001000000000000097463676e777331313608686e65746f6e7477026e6c0000010001 8f9e84030001000000010000097463676e777331313608686e65746f6e7477026e6c0000010001c01f00060001000038400036026e730f646f6d61696e2d7265676973747279c01f0a686f73746d6173746572c0360bf1e540000070800000384000278d0000003840 1617 230b0000000100000000000004646e73310471776562026e6c0000260001 230b8000000100000002000204646e73310471776562026e6c0000260001c01100020001000151800002c00cc0110002000100015180000704646e7332c011c00c00010001000151800004d994ac0cc03800010001000151800004d5c42f6c 1618 f8200000000100000000000004646e73320471776562026e6c0000260001 f8208000000100000002000204646e73320471776562026e6c0000260001c0110002000100015180000704646e7331c011c01100020001000151800002c00cc02a00010001000151800004d994ac0cc00c00010001000151800004d5c42f6c 1619 825800000001000000000000046d61696c0761627374726163026e6c0000010001 825880000001000000020002046d61696c0761627374726163026e6c0000010001c01100020001000151800013036e73310c706f77657273657276657233c019c01100020001000151800006036e7332c031c02d000100010001518000045104741ec04c000100010001518000045104741f 1620 f8f000000001000000000000037777770d6165726f736f6c64657369676e026e6c0000010001 f8f080000001000000020002037777770d6165726f736f6c64657369676e026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800006036e7332c010c0320001000100015180000451044432c0440001000100015180000451044433 1621 cd46000000010000000000000c626c65696a656e6265726768026e6c0000ff0001 cd46800000010000000200020c626c65696a656e6265726768026e6c0000ff0001c00c00020001000151800010036e7331096e657467726f756e64c019c00c00020001000151800006036e7332c031c02d000100010001518000045054e415c0490001000100015180000451046014 1622 b2c4383f5010faf02dcf0000000000000000 b2c4b8340000000000000000 1623 5e1200000001000000000000037777770864616e69656c6c61026e6c0000010001 5e1280000001000000020002037777770864616e69656c6c61026e6c0000010001c01000020001000151800012026e730c6d65676170726f7669646572c019c01000020001000151800006036e7332c030c02d0001000100015180000450474002c04b0001000100015180000450474102 1624 b2c4383f5018faf0d3750000008f6ec9000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afc84403c4e040003000000304e544c4d535350000100000097b208e00b000b002500000005000500200000004e54465331544543484e4f50414e454c0000 b2c4b8340000000000000000 1625 e81f000000010000000000000d7469636b6574736576656e7473026e6c00000f0001 e81f800000010000000200020d7469636b6574736576656e7473026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc01ac00c00020001000151800006036e7332c031c02e00010001000151800004c26d0642c04600010001000151800004c26d0963 1626 6bf800100001000000000001034e53320743495354524f4e024e4c00000100010000290800000080000000 6bf880000001000000020003034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f380000291000000000000000 1627 b2c4384d5011fae22d3d0000000000000000 b2c4b8440000000000000000 1628 000000007002faf042610000020405b401010402 000080010000000000000000 1629 39f400000001000000000000036e73320a6461632d706c616e6574026e6c0000010001 39f480000001000000030003036e73320a6461632d706c616e6574026e6c0000010001c0100002000100015180000c036e7331056264726567c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f00010001000151800004d44ff4dac04700010001000151800004d44ff642c05900010001000151800004c3f5c70a 1630 b2c4384e5010fae22d3c0000000000000000 b2c4b8440000000000000000 1631 6adb00000001000000000000037777770773657870657274026e6c0000010001 6adb80000001000000030003037777770773657870657274026e6c0000010001c0100002000100015180000e04646e733106626c6978656dc018c0100002000100015180000704646e7332c031c0100002000100015180000704646e7333c031c02c00010001000151800004d44fe803c04600010001000151800004c3f5c782c05900010001000151800004d44ff303 1632 b2c4e8a95010faf0d3a60000000000000000 1633 3a440000000100000000000006504152495445024e4c00000f0001 3a448000000100000002000206504152495445024e4c00000f0001c00c0002000100015180000c036e7331056f72696f6ec013c00c00020001000151800006036e7332c02bc02700010001000151800004c2862282c03f00010001000151800004c2862b02 1634 e9e400000001000000000000037777770b617564696f636f76657273026e6c0000010001 e9e480000001000000020000037777770b617564696f636f76657273026e6c0000010001c0100002000100015180001105646e732d33056c61646f7403636f6d00c0100002000100015180000805646e732d34c036 1635 b2c4e8a95018faf0b5df0000008f3338000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afc84403c4e040003000000304e544c4d535350000100000097b208e00b000b002500000005000500200000004e54465331544543484e4f50414e454c0000 1636 02eb00000001000000000000046d61696c03777873026e6c0000010001 02eb80000001000000030003046d61696c03777873026e6c0000010001c01100020001000151800007046e733038c011c01100020001000151800007046e733039c011c01100020001000151800006036e7334c011c02900010001000151800004c3790128c03c00010001000151800004c3790143c04f00010001000151800004d5ef9a65 1637 e16d00000001000000000000086a756c69657474650762657374776562026e6c0000010001 e16d80000001000000020002086a756c69657474650762657374776562026e6c0000010001c0150002000100015180000e08706f7765722d6133026133c01dc0150002000100015180000c09706f7765722d697078c03ac0310001000100015180000451113b42c04b00010001000151800004d5ab40e6 1638 04920000000100000000000003323034033139320236310232340770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 04928000000100000002000203323034033139320236310232340770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02d00020001000151800006036e7330c02dc02d00020001000151800006036e7331c02dc04900010001000151800004c2a55e01c05b00010001000151800004c2a55e05 1639 b2c4e8b75011fae2d3140000000000000000 1640 000000007002faf00f9e0000020405b401010402 000080010000000000000000 1641 613000000001000000000000046d61696c086e65646c696e7578026e6c0000010001 613080000001000000030003046d61696c086e65646c696e7578026e6c0000010001c01100020001000151800006036e7331c011c01100020001000151800006036e7332c011c01100020001000151800006036e7333c011c02e00010001000151800004d5ef87d2c04000010001000151800004d5ef87d3c05200010001000151800004d5ef8005 1642 b2c4e8b85010fae2d3130000000000000000 1643 e6930000000100000000000006636861726973026e6c00000f0001 e6938000000100000002000006636861726973026e6c00000f0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 1644 b2c581cb5010faf007c10000000000000000 1645 b2c581cb5018faf0258a0000008ff7a7000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afc84403c4e040003000000304e544c4d535350000100000097b208e00b000b002500000005000500200000004e54465331544543484e4f50414e454c0000 1646 e97b00000001000000000000036e73310b7669727475616c686f7374026e6c0000010001 e97b80000001000000020000036e73310b7669727475616c686f7374026e6c0000010001c01000020001000151800013036e733109676c6f62616c6e656403636f6d00c01000020001000151800006036e7332c034 1647 e97c00000001000000000000036e73320b7669727475616c686f7374026e6c0000010001 e97c80000001000000020000036e73320b7669727475616c686f7374026e6c0000010001c01000020001000151800013036e733109676c6f62616c6e656403636f6d00c01000020001000151800006036e7332c034 1648 bffb0000000100000000000003626c3102626c06787334616c6c026e6c0000010001 bffb8000000100000003000203626c3102626c06787334616c6c026e6c0000010001c01300020001000151800005026e73c013c01300020001000151800006036e7332c013c0130002000100015180000d026e730472697065036e657400c02e00010001000151800004c26d0642c03f00010001000151800004c26d0963 1649 37fd00000001000000000000036e73340767617574656e67026e6c0000010001 37fd80000001000000020000036e73340767617574656e67026e6c0000010001c0100002000100015180000d036e7331066c696e6b7570c018c01000020001000151800006036e7332c030 1650 73360000000100000000000004646e7331057368656c6c026e6c0000010001 73368000000100000003000004646e7331057368656c6c026e6c0000010001c0110002000100015180001004646e7331057368656c6c03636f6d00c0110002000100015180000704646e7332c030c0110002000100015180000704646e7333c030 1651 8bea00000001000000000000037777770764736c6465736b026e6c0000010001 8bea80000001000000020000037777770764736c6465736b026e6c0000010001c01000020001000151800014036e73310a676f6c64766973696f6e03636f6d00c01000020001000151800006036e7332c030 1652 35fc00000001000000000000034e53320743495354524f4e024e4c0000010001 35fc80000001000000020002034e53320743495354524f4e024e4c0000010001c01000020001000151800005026e73c010c01000020001000151800002c00cc02c000100010001518000043ed81f37c00c000100010001518000043ed81f38 1653 b2c581d95011fae2072f0000000000000000 1654 e94000000001000000000000037777770a6c696e6b746970706572026e6c0000010001 e94080000001000000030003037777770a6c696e6b746970706572026e6c0000010001c0100002000100015180000c036e7331056d61786573c01bc01000020001000151800006036e7332c033c01000020001000151800006036e7333c033c02f000100010001518000045045402ec047000100010001518000045045402fc059000100010001518000045045440a 1655 77be0000000100000000000003777777086879706f686f6d65026e6c0000010001 77be8000000100000002000003777777086879706f686f6d65026e6c0000010001c01000020001000151800013036e733109696d6167653264617903636f6d00c01000020001000151800006036e7332c031 1656 4fb500000001000000000000036e733208696e74726f776562026e6c0000010001 4fb580000001000000020002036e733208696e74726f776562026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc02d0001000100015180000450416028c00c00010001000151800004c356780c 1657 b2c581da5010fae2072e0000000000000000 1658 5c6a0010000100000000000007636172746d616e076e6574666c6f77026e6c0000010001 5c6a8000000100000002000207636172746d616e076e6574666c6f77026e6c0000010001c01400020001000151800006036e7331c014c01400020001000151800006036e7332c014c030000100010001518000043eb1ef24c042000100010001518000043eb1ef25 1659 92d100000001000000000000036e7332076e656473746174026e6c0000010001 92d180000001000000020002036e7332076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 1660 921500000001000000000000036e7334076e656473746174026e6c0000010001 921580000001000000020002036e7334076e656473746174026e6c0000010001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 1661 ba9500000001000000000000036e7332076e656473746174026e6c0000260001 ba9580000001000000020002036e7332076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 1662 3a9f00000001000000000000036e7334076e656473746174026e6c0000260001 3a9f80000001000000020002036e7334076e656473746174026e6c0000260001c01000020001000151800005026e73c010c01000020001000151800006036e7333c010c02c00010001000151800004d4482615c03d00010001000151800004d5c4021d 1663 175c28000001000000010000026e6c0000060001095f6b65726265726f73045f746370155374616e64616172642d6565727374652d73697465065f7369746573026463065f6d736463730b746563686e6f70616e656c026e6c000021000100000258001c000000640058056e746673310b746563686e6f70616e656c026e6c00 175ca8040000000000000000 1664 3cfa00000001000000000000036e733108696e74726f776562026e6c0000010001 3cfa80000001000000020002036e733108696e74726f776562026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c00c0001000100015180000450416028c03b00010001000151800004c356780c 1665 e0ea0000000100000000000006636f6f6b696504696c7365026e6c0000010001 e0ea8000000100000003000306636f6f6b696504696c7365026e6c0000010001c01300020001000151800006036e7331c013c01300020001000151800006036e7332c013c01300020001000151800006036e7333c013c02c000100010001518000043e45a282c03e000100010001518000043e45a283c050000100010001518000043e45a284 1666 000000007002faf01bd90000020405b401010402 000080010000000000000000 1667 ddaf000000010000000000000377777709766572626f7577656e026e6c0000010001 ddaf800000010000000200020377777709766572626f7577656e026e6c0000010001c0100002000100015180000f036e7331086765656e70756e74c01ac01000020001000151800006036e7332c032c02e00010001000151800004d4ccd865c049000100010001518000045054ec34 1668 b2c62b8d5010faf06a390000000000000000 b2c6ab840000000000000000 1669 b2c62b8d5018faf031d50000008f4cd4000000010001000000000f313133333837313336363136322d330000f900010f313133333837313336363136322d330000f900ff00000000005303677373096d6963726f736f667403636f6d00403afc84403c4e040003000000304e544c4d535350000100000097b208e00b000b002500000005000500200000004e54465331544543484e4f50414e454c0000 b2c6ab840000000000000000 1670 897c0000000100000000000004686f6d650774697363616c69026e6c0000010001 897c8000000100000003000204686f6d650774697363616c69026e6c0000010001c0110002000100015180000704616e7331c011c0110002000100015180000704616e7332c011c0110002000100015180001404616e73330a74697363616c696e657402626500c02d00010001000151800004c3f14d38c04000010001000151800004c3f13325 1671 4caa00000001000000000000086f76657268656964047a6f656b026e6c0000010001 4caa80000001000000020002086f76657268656964047a6f656b026e6c0000010001c0150002000100015180000d026e73076e65746c616e64c01ac01500020001000151800006036e7332c031c02e00010001000151800004d9aa2042c04700010001000151800004d9aa2c06 1672 5eb200000001000000000000086f76657268656964047a6f656b026e6c0000010001 5eb280000001000000020002086f76657268656964047a6f656b026e6c0000010001c0150002000100015180000d026e73076e65746c616e64c01ac01500020001000151800006036e7332c031c02e00010001000151800004d9aa2042c04700010001000151800004d9aa2c06 1673 b2c62b9b5011fae269a70000000000000000 b2c6ab940000000000000000 1674 000000007002faf04d060000020405b401010402 000080010000000000000000 1675 e97f00000001000000000000036e73320b7669727475616c686f7374026e6c0000010001 e97f80000001000000020000036e73320b7669727475616c686f7374026e6c0000010001c01000020001000151800013036e733109676c6f62616c6e656403636f6d00c01000020001000151800006036e7332c034 1676 e97e00000001000000000000036e73310b7669727475616c686f7374026e6c0000010001 e97e80000001000000020000036e73310b7669727475616c686f7374026e6c0000010001c01000020001000151800013036e733109676c6f62616c6e656403636f6d00c01000020001000151800006036e7332c034 1677 c36200000001000000000000046d61696c06737469626265026e6c0000010001 c36280000001000000020002046d61696c06737469626265026e6c0000010001c01100020001000151800011026e730b666163696e676661637473c018c01100020001000151800006036e7332c02fc02c00010001000151800004d513b013c04900010001000151800004d513b012 1678 7637000000010000000000000777656276696577026e6c00000f0001 7637800000010000000200000777656276696577026e6c00000f0001c00c00020001000151800012036e73310b6d6565737465726c696a6bc014c00c00020001000151800006036e7332c02c 1679 e7000000000100000000000005627261616d026e6c00000f0001 e7008000000100000002000205627261616d026e6c00000f0001c00c0002000100015180000b036e73310461786974c012c00c00020001000151800006036e7332c02ac026000100010001518000043e3a440bc03d000100010001518000043e3a440c 1680 b2c62b9c5010fae269a60000000000000000 b2c6ab940000000000000000 1681 e5cc000000010000000000000f6d656c6b7765672d686f6c6c616e64026e6c00000f0001 e5cc800000010000000300030f6d656c6b7765672d686f6c6c616e64026e6c00000f0001c00c0002000100015180000e076e73617574683103626974c01cc00c0002000100015180000a076e736175746832c038c00c0002000100015180000a076e736175746833c038c03000010001000151800004d5880c33c04a00010001000151800004d5880c3bc06000010001000151800004d4ccc00b 1682 3a0f000000010000000000000964656e68656c646572026e6c00000f0001 3a0f800000010000000200020964656e68656c646572026e6c00000f0001c00c00020001000151800011036e73310a7765626275726f646e73c016c00c00020001000151800006036e7332c02ec02a00010001000151800004d51380cec04700010001000151800004d513806a 1683 b2c6b1045010faf015ef0000000000000000 1684 b2c6b1045018faf01a1d0000008f1143000000010001000000000f313133333837313336363136322d320000f900010f313133333837313336363136322d320000f900ff00000000005303677373096d6963726f736f667403636f6d00403afc84403c4e040003000000304e544c4d535350000100000097b208e00b000b002500000005000500200000004e54465331544543484e4f50414e454c0000 1685 c22900000001000000000000036e733103727567026e6c0000010001 c22980000001000000030003036e733103727567026e6c0000010001c01000020001000151800002c00cc01000020001000151800006036e7332c010c0100002000100015180000e036e733107737572666e6574c014c00c00010001000151800004817d0406c03600010001000151800004817d040dc04800010001000151800004c0576a65 1686 ab8400000001000000000000036e733203727567026e6c0000010001 ab8480000001000000030003036e733203727567026e6c0000010001c01000020001000151800006036e7331c010c01000020001000151800002c00cc0100002000100015180000e036e733107737572666e6574c014c02800010001000151800004817d0406c00c00010001000151800004817d040dc04800010001000151800004c0576a65 1687 0359000000010000000000000f50432d30392054454120262052494108627275696e686f66026e6c0000010001 0359800000010000000300020f50432d30392054454120262052494108627275696e686f66026e6c0000010001c01c0002000100015180000d036e733106776964657873c025c01c00020001000151800010036e733206776964657873036e657400c01c00020001000151800006036e7333c03dc03900010001000151800004d4ccc0fcc06e000100010001518000043efa0703 1688 38fd0000000100000000000006636861726973026e6c0000ff0001 38fd8000000100000002000006636861726973026e6c0000ff0001c00c0002000100015180000c026e7306766576696461c013c00c00020001000151800006036e7332c02a 1689 4e9100000001000000000000076e6372766e6574026e6c00000f0001 4e9180000001000000030003076e6372766e6574026e6c00000f0001c00c0002000100015180001208736f6c7574696f6e06736f6c636f6ec014c00c00020001000151800006036e7331c031c00c00020001000151800006036e7332c031c02800010001000151800004d42d2005c04600010001000151800004d42d2003c05800010001000151800004d42d2103 1690 964b00000001000000000000066b7669616e61036b7669026e6c0000010001 964b80000001000000030003066b7669616e61036b7669026e6c0000010001c01300020001000151800009066b7669657870c013c01300020001000151800002c00cc0130002000100015180000e04616a6178066e696b686566c017c02b00010001000151800004817d0f01c00c00010001000151800004817d0f02c04e00010001000151800004c010c701 1691 0ba600000001000000000000066b7669617376036b7669026e6c0000010001 0ba680000001000000030003066b7669617376036b7669026e6c0000010001c01300020001000151800009066b7669657870c013c01300020001000151800009066b7669616e61c013c0130002000100015180000e04616a6178066e696b686566c017c02b00010001000151800004817d0f01c04000010001000151800004817d0f02c05500010001000151800004c010c701 1692 85d300000001000000000000066b7669657870036b7669026e6c0000010001 85d380000001000000030003066b7669657870036b7669026e6c0000010001c01300020001000151800002c00cc01300020001000151800009066b7669616e61c013c0130002000100015180000e04616a6178066e696b686566c017c00c00010001000151800004817d0f01c03900010001000151800004817d0f02c04e00010001000151800004c010c701 1693 11fc000000010000000000000234330332313503313733033134320770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001 11fc800000010000000200020234330332313503313733033134320770726f786965730a626c61636b686f6c657307656173796e6574026e6c00001c0001c02e00020001000151800006036e7330c02ec02e00020001000151800006036e7331c02ec04a00010001000151800004c2a55e01c05c00010001000151800004c2a55e05 1694 769c000000010000000000000a6d61726b656e6865656d026e6c00000f0001 769c800000010000000200020a6d61726b656e6865656d026e6c00000f0001c00c0002000100015180000c026e7306787334616c6cc017c00c00020001000151800006036e7332c02ec02b00010001000151800004c26d0642c04300010001000151800004c26d0963 1695 9355000000010000000000000d3231312d3233322d34372d343708696e746572746e7303636f6d06787369746573026e6c0000010001 9355800000010000000200020d3231312d3233322d34372d343708696e746572746e7303636f6d06787369746573026e6c0000010001c02700020001000151800006036e7331c027c02700020001000151800006036e7332c027c042000100010001518000045054f526c054000100010001518000045054f527 1696 51c600000001000000000000056761726f74026e6c00000f0001 51c680000001000000020002056761726f74026e6c00000f0001c00c0002000100015180000f026e7309656174736572766572c012c00c00020001000151800006036e7332c029c02600010001000151800004d4cb0e42c04100010001000151800004d4cb1221 1697 b2c6b1125011fae2155d0000000000000000 1698 000000007002faf041280000020405b401010402 000080010000000000000000 1699 c1f700000001000000000000096e696a656e6b616d70026e6c00000f0001 c1f780000001000000020002096e696a656e6b616d70026e6c00000f0001c00c0002000100015180000f036e733108696e74726f776562c016c00c00020001000151800006036e7332c02ec02a0001000100015180000450416028c04500010001000151800004c356780c unbound-1.13.1/testdata/subnet_derived.crpl0000644000175000017500000000615414010434640020402 0ustar wouterwouterserver: send-client-subnet: 5.0.15.10 send-client-subnet: 193.0.14.129 max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache validator iterator" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Must not send subnet option for 'derived' queries. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 15 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 5.0.15.10 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 5.0.15.10 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 5.0.15.10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ednsdata ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 15 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ENTRY_END RANGE_END ;; ---------------------------------------- STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_edns_bksec.tdir/0000755000175000017500000000000014010434640020411 5ustar wouterwouterunbound-1.13.1/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.conf0000644000175000017500000000075014010434640024222 0ustar wouterwouterserver: verbosity: 5 # num-threads: 1 interface: 127.0.0.1 port: UPORT use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no # key +005+30899 trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" # validation time val-override-date: "20100406005004" fake-sha1: yes forward-zone: name: "." forward-addr: "127.0.0.1@TOPORT" stub-zone: name: "example.com" stub-addr: "127.0.0.1@TOPORT" unbound-1.13.1/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.post0000644000175000017500000000045714010434640024266 0ustar wouterwouter# #-- fwd_edns_bksec.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.testns0000644000175000017500000000437314010434640024622 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ; DNSKEY lookup works. ENTRY_BEGIN MATCH opcode qtype qname UDP DO REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20100429005004 20100401005004 30899 example.com. CcIIAhvwMsSnPzJdT1onlMK8jgQnKzYoklOsm8ab644jhQfWo/BIXyJ1l9ImK4J2+quIHdrXESTMHJ5KNRs2Sw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ;example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20100429005004 20100401005004 30899 example.com. CcIIAhvwMsSnPzJdT1onlMK8jgQnKzYoklOsm8ab644jhQfWo/BIXyJ1l9ImK4J2+quIHdrXESTMHJ5KNRs2Sw== ;{id = 30899} ENTRY_END ; the first part has nasty having a 'timeout'. ENTRY_BEGIN MATCH opcode qtype qname UDP DO REPLY QR FORMERR ADJUST copy_id SECTION QUESTION nasty IN A ENTRY_END ; the next part has nasty recover (with timing to be exactly during noEDNS). ; therefore we return the signature to make our test run fast. ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION nasty IN A SECTION ANSWER nasty IN A 10.20.30.77 nasty.example.com. 3600 IN RRSIG A 5 3 3600 20100429005004 20100401005004 30899 example.com. nV1rzF6ow8sp5k315hczuO1xRQT5MrS14BEZ0Md71/EoCfVtjD+WK63w2MnPzqLIw3YRyfC1S/bMc3B7cVZv5A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname UDP DO REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 www IN A 10.20.30.41 www IN A 10.20.30.42 www.example.com. 3600 IN RRSIG A 5 3 3600 20100429005004 20100401005004 30899 example.com. gM9dI2Ew/zsRMD8ZrqetGo4xYts51quV4/CaOemUPAx8LOvGNJMGrHpJ1Q+CW7CWTauqNscFLlgUcmUQ2+RIlA== ;{id = 30899} ENTRY_END ; fake answer so we can distinguish it ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.test0000644000175000017500000000166614010434640024263 0ustar wouterwouter# #-- fwd_edns_bksec.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test # # First the nasty name. # The server should not have performed EDNS fallback and cached it. echo "> dig nasty.example.com." dig @localhost -p $UNBOUND_PORT nasty.example.com. | tee outfile # no answer possible for it. echo "> check backed-off" if grep "10.20.30.77" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # Then the www name. # See if we can still get the EDNS data. echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.pre0000644000175000017500000000161714010434640024066 0ustar wouterwouter# #-- fwd_edns_bksec.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -v -p $FWD_PORT fwd_edns_bksec.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/UPORT/'$UNBOUND_PORT'/' -e 's/TOPORT/'$FWD_PORT'/' < fwd_edns_bksec.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.dsc0000644000175000017500000000050314010434640024042 0ustar wouterwouterBaseName: fwd_edns_bksec Version: 1.0 Description: Forward EDNS backoff for DNSSEC domain CreationDate: Tue Apr 6 08:45:57 CEST 2010 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_edns_bksec.pre Post: fwd_edns_bksec.post Test: fwd_edns_bksec.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/val_cnametopos.rpl0000644000175000017500000001670114010434640020246 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a cname to positive ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnamewctoposwc.rpl0000644000175000017500000002115314010434640021127 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard cname to positive wildcard ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; *.example.com. IN CNAME www.example.net. www.example.com. 3600 IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFCA2HhM4cInPoUZ58o6t9CVlqv+kAhRjxWXvnFecgDxnDphpEVEoc0Ps6Q== ;{id = 2854} SECTION AUTHORITY ; weird NSEC that denies everything. But validly signed, so valid. ; extreme version of 'white lies' :-) example.com. IN NSEC example.com. SOA NS A NSEC RRSIG DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCSPaRH721mYjuTGb6fZ+nR3pnVxAIUAxEctE1hzMQSw0CWJSMLHS/A+Xk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER ; from *.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 2 3600 20070926134150 20070829134150 30899 example.net. quSyDbSeHRvyMmanqq5rW+APC9MKOswbRLB5QP/G+C2iyokQFLuRTlX9Wmo/jo1Oo1MGBefJUmP9NdRd2EqABA== ;{id = 30899} SECTION AUTHORITY wab.example.net IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFCA2HhM4cInPoUZ58o6t9CVlqv+kAhRjxWXvnFecgDxnDphpEVEoc0Ps6Q== ;{id = 2854} www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 2 3600 20070926134150 20070829134150 30899 example.net. quSyDbSeHRvyMmanqq5rW+APC9MKOswbRLB5QP/G+C2iyokQFLuRTlX9Wmo/jo1Oo1MGBefJUmP9NdRd2EqABA== ;{id = 30899} SECTION AUTHORITY example.com. IN NSEC example.com. SOA NS A NSEC RRSIG DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCSPaRH721mYjuTGb6fZ+nR3pnVxAIUAxEctE1hzMQSw0CWJSMLHS/A+Xk= ;{id = 2854} wab.example.net IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/04-checkconf.tdir/0000755000175000017500000000000014010434640017615 5ustar wouterwouterunbound-1.13.1/testdata/04-checkconf.tdir/include.withsomeclauses.30000644000175000017500000000003514010434640024540 0ustar wouterwouteridentity: "withsomeclauses3" unbound-1.13.1/testdata/04-checkconf.tdir/include.withoutclauses.20000644000175000017500000000003414010434640024402 0ustar wouterwouteridentity: "withoutclauses2" unbound-1.13.1/testdata/04-checkconf.tdir/include.withsomeclauses.10000644000175000017500000000004514010434640024537 0ustar wouterwouterserver: identity: "withsomeclauses1" unbound-1.13.1/testdata/04-checkconf.tdir/include.include.withclauses.30000644000175000017500000000003714010434640025300 0ustar wouterwouterinclude: include.withclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.include.withclauses.20000644000175000017500000000003714010434640025277 0ustar wouterwouterinclude: include.withclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/warn.algo0000644000175000017500000000025414010434640021431 0ustar wouterwouterserver: chroot: "" directory: "" pidfile: "" username: "" logfile: "" trust-anchor: "jelte.nlnetlabs.nl. DS 42860 2000 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A" unbound-1.13.1/testdata/04-checkconf.tdir/include.withclauses.10000644000175000017500000000004114010434640023647 0ustar wouterwouterserver: identity: "withclauses1" unbound-1.13.1/testdata/04-checkconf.tdir/include.includetop.withclauses.10000644000175000017500000000005014010434640026014 0ustar wouterwouterinclude-toplevel: include.withclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.includetop.withoutclauses.10000644000175000017500000000005314010434640026547 0ustar wouterwouterinclude-toplevel: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/good.ifport0000644000175000017500000000112314010434640021767 0ustar wouterwouter# # bug301 : unbound-checkconf cannot parse interface '0.0.0.0@5353' #Use this to include other text into the file. #include: "otherfile.conf" # The server clause sets the main parameters. server: # specify the interfaces to answer queries from by ip-address. # If you give none the default (all) interface is used. # specify every interface on a new 'interface:' labelled line. interface: 192.0.2.153 interface: 192.0.2.154 interface: 2001:DB8::5 interface: 0.0.0.0@5353 # config chroot: "" username: "nobody" directory: "." logfile: "" use-syslog: no pidfile: "unbound.pid" unbound-1.13.1/testdata/04-checkconf.tdir/good.min0000644000175000017500000000025614010434640021255 0ustar wouterwouter# the minimal passing config - include in your bad.x to verify that # it is your option which triggers failure server: chroot: "" username: "" directory: "." pidfile: "" unbound-1.13.1/testdata/04-checkconf.tdir/bad.include-toplevel.30000644000175000017500000000027214010434640023702 0ustar wouterwouterinclude-toplevel: include.withclauses.* server: identity: "top 1" include: include.withoutclauses.* include-toplevel: include.withclauses.* include: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.includetop.withclauses.30000644000175000017500000000005014010434640026016 0ustar wouterwouterinclude-toplevel: include.withclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.withoutclauses.30000644000175000017500000000003414010434640024403 0ustar wouterwouteridentity: "withoutclauses3" unbound-1.13.1/testdata/04-checkconf.tdir/04-checkconf.test0000644000175000017500000000265614010434640022673 0ustar wouterwouter# #-- 04-checkconf.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # test that failed exit code is used $PRE/unbound-checkconf bla bla bla>/dev/null if test $? != 1; then echo "exit code for usage wrong" exit 1 fi $PRE/unbound-checkconf -h >/dev/null if test $? != 1; then echo "exit code for usage wrong" exit 1 fi $PRE/unbound-checkconf notexist_file if test $? != 1; then echo "exit code for nofile wrong" exit 1 fi # detect windows if grep "define UB_ON_WINDOWS 1" ../../config.h; then onwin=1 else onwin=0 fi # test check of config files. for f in bad.*; do echo echo $PRE/unbound-checkconf $f if test $f = "bad.user" -a $onwin -eq 1; then echo "skipped on windows" continue fi $PRE/unbound-checkconf $f if test $? != 1; then echo "exit code case $f wrong" exit 1 fi done for f in good.*; do echo echo $PRE/unbound-checkconf $f $PRE/unbound-checkconf $f if test $? != 0; then echo "exit code case $f wrong" exit 1 fi done echo $PRE/unbound-checkconf warn.algo $PRE/unbound-checkconf warn.algo > outfile 2>&1 if test $? != 0; then cat outfile echo "wrong exit code, warning should not fail with error" exit 1 fi cat outfile if grep "unsupported algo" outfile; then echo "OK" else echo "Failed, should print warning" exit 1 fi exit 0 unbound-1.13.1/testdata/04-checkconf.tdir/bad.badfwd0000644000175000017500000000026714010434640021521 0ustar wouterwouterserver: # to make sure the check doesn't fail on username or chrootdir. username: "" chroot: "" directory: "" forward-zone: name: "example.com" forward-addr: 123.123.AAAA.123 unbound-1.13.1/testdata/04-checkconf.tdir/include.include.withoutclauses.30000644000175000017500000000004214010434640026024 0ustar wouterwouterinclude: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.includetop.withoutclauses.30000644000175000017500000000005314010434640026551 0ustar wouterwouterinclude-toplevel: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/bad.user0000644000175000017500000000010214010434640021234 0ustar wouterwouterserver: username: blabla_noexist_user chroot: "" directory: "" unbound-1.13.1/testdata/04-checkconf.tdir/include.withsomeclauses.20000644000175000017500000000003514010434640024537 0ustar wouterwouteridentity: "withsomeclauses2" unbound-1.13.1/testdata/04-checkconf.tdir/bad.include-toplevel.70000644000175000017500000000060714010434640023710 0ustar wouterwouterinclude-toplevel: include.withclauses.* include-toplevel: include.withclauses.* server: identity: "top 1" include: include.withoutclauses.* include-toplevel: include.withclauses.* include: include.withclauses.* include-toplevel: include.withclauses.* server: identity: "top 2" include-toplevel: include.includetop.withclauses.* include-toplevel: include.include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.withclauses.30000644000175000017500000000004114010434640023651 0ustar wouterwouterserver: identity: "withclauses3" unbound-1.13.1/testdata/04-checkconf.tdir/bad.dscp0000644000175000017500000000011714010434640021215 0ustar wouterwouterinclude: "good.min" server: # an abnormal value for the option ip-dscp: 500 unbound-1.13.1/testdata/04-checkconf.tdir/good.all0000644000175000017500000002105414010434640021241 0ustar wouterwouter# To test, all options are used. # # Example configuration file. # # See unbound.conf(5) man page. # # this is a comment. #Use this to include other text into the file. #include: "otherfile.conf" # The server clause sets the main parameters. server: # whitespace is not necessary, but looks cleaner. # verbosity number, 0 is least verbose. 1 is default. verbosity: 2 # number of threads to create. 1 disables threading. num-threads: 1 # specify the interfaces to answer queries from by ip-address. # If you give none the default (all) interface is used. # specify every interface on a new 'interface:' labelled line. interface: 192.0.2.153 interface: 192.0.2.154 interface: 2001:DB8::5 # port to answer queries from port: 53 # number of port to allocate per thread, determines the size of the # port range. A larger port range gives more resistance to certain # spoof attacks, as it gets harder to guess which port is used. # But also takes more system resources (for open sockets). outgoing-range: 16 outgoing-port-permit: 1000-1020 outgoing-port-avoid: 2000-2048 outgoing-port-avoid: 3000 # number of outgoing simultaneous tcp buffers to hold per thread. outgoing-num-tcp: 10 # number of incoming simultaneous tcp buffers to hold per thread. incoming-num-tcp: 10 # buffer size for handling DNS data. No messages larger than this # size can be sent or received, by UDP or TCP. In bytes. msg-buffer-size: 65552 # the amount of memory to use for the message cache. # in bytes. default is 4 Mb msg-cache-size: 4194304 # the number of slabs to use for the message cache. # the number of slabs must be a power of 2. # more slabs reduce lock contention, but fragment memory usage. msg-cache-slabs: 4 # the number of queries that a thread gets to service. num-queries-per-thread: 1024 # the amount of memory to use for the RRset cache. # in bytes. default is 4 Mb rrset-cache-size: 4194304 # the number of slabs to use for the RRset cache. # the number of slabs must be a power of 2. # more slabs reduce lock contention, but fragment memory usage. rrset-cache-slabs: 4 # the time to live (TTL) value for cached roundtrip times and # EDNS version information for hosts. In seconds. infra-host-ttl: 900 # the time to live (TTL) value for cached lame delegations. In sec. infra-lame-ttl: 900 # the number of slabs to use for the Infrastructure cache. # the number of slabs must be a power of 2. # more slabs reduce lock contention, but fragment memory usage. infra-cache-slabs: 4 # the maximum number of hosts that are cached (roundtrip times, EDNS). infra-cache-numhosts: 10000 # the maximum size of the lame zones cached per host. in bytes. infra-cache-lame-size: 10240 # Enable IPv4, "yes" or "no". do-ip4: yes # Enable IPv6, "yes" or "no". do-ip6: yes # Enable UDP, "yes" or "no". do-udp: yes # Enable TCP, "yes" or "no". do-tcp: yes # if given, a chroot(2) is done to the given directory. # i.e. you can chroot to the working directory, for example, # for extra security, but make sure all files are in that directory. chroot: "" # if given, user privileges are dropped (after binding port), # and the given username is assumed. Default is nothing "". username: "nobody" # the working directory. directory: "." # the log file, "" means log to stderr. # Use of this option sets use-syslog to "no". logfile: "" # Log to syslog(3) if yes. The log facility LOG_DAEMON is used to # log to, with identity "unbound". If yes, it overrides the logfile. use-syslog: no # the pid file. pidfile: "unbound.pid" # enable to not answer id.server and hostname.bind queries. hide-identity: no # enable to not answer version.server and version.bind queries. hide-version: no # the identity to report. Leave "" or default to return hostname. identity: "" # the version to report. Leave "" or default to return package version. version: "" # the target fetch policy. # series of integers describing the policy per dependency depth. # The number of values in the list determines the maximum dependency # depth the recursor will pursue before giving up. Each integer means: # -1 : fetch all targets opportunistically, # 0: fetch on demand, # positive value: fetch that many targets opportunistically. # Enclose the list of numbers between quotes (""). target-fetch-policy: "3 2 1 0 0" # Harden against very small EDNS buffer sizes. harden-short-bufsize: yes # Harden against unseemly large queries. harden-large-queries: yes # Harden against out of zone rrsets, to avoid spoofing attempts. harden-glue: yes # Do not query the following addresses. No DNS queries are sent there. # List one address per entry. To block other ports than the default # DNS port, use "1.2.3.4@123" to block port 123 for 1.2.3.4. do-not-query-address: 127.0.0.1 do-not-query-address: 127.0.0.2 do-not-query-address: 127.255.255.255 do-not-query-address: ::1 # module configuration of the server. A string with identifiers # separated by spaces. "iterator" or "validator iterator" module-config: "validator iterator" # File with trusted keys for validation. Specify more than one file # with several entries, one file per entry. # Zone file format, with DS and DNSKEY entries. trust-anchor-file: "" # Trusted key for validation. DS or DNSKEY. specify the RR on a # single line, surrounded by "". TTL is ignored. class is IN default. # (These examples are from August 2007 and may not be valid anymore). trust-anchor: "nlnetlabs.nl. DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ==" trust-anchor: "jelte.nlnetlabs.nl. DS 42860 5 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A" # File with trusted keys for validation. Specify more than one file # with several entries, one file per entry. Like trust-anchor-file # but has a different file format. Format is BIND-9 style format, # the trusted-keys { name flag proto algo "key"; }; clauses are read. trusted-keys-file: "" # Override the date for validation with a specific fixed date. # Do not set this unless you are debugging signature inception # and expiration. "" or "0" turns the feature off. val-override-date: "" # The time to live for bogus data, rrsets and messages. This avoids # some of the revalidation, until the time interval expires. in secs. val-bogus-ttl: 900 # Should additional section of secure message also be kept clean of # unsecure data. Useful to shield the users of this validator from # potential bogus data in the additional section. All unsigned data # in the additional section is removed from secure messages. val-clean-additional: yes # Turn permissive mode on to permit bogus messages. Thus, messages # for which security checks failed will be returned to clients, # instead of SERVFAIL. It still performs the security checks, which # result in interesting log files and possibly the AD bit in # replies if the message is found secure. The default is off. val-permissive-mode: no # It is possible to configure NSEC3 maximum iteration counts per # keysize. Keep this table very short, as linear search is done. # A message with an NSEC3 with larger count is marked insecure. # List in ascending order the keysize and count values. val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500" # the amount of memory to use for the key cache. # in bytes. default is 4 Mb key-cache-size: 4194304 # the number of slabs to use for the key cache. # the number of slabs must be a power of 2. # more slabs reduce lock contention, but fragment memory usage. key-cache-slabs: 4 # the value of the Differentiated Services Codepoint (DSCP) # in the differentiated services field (DS) of the outgoing # IP packets ip-dscp: 5 # Stub zones. # Create entries like below, to make all queries for 'example.com' and # 'example.org' go to the given list of nameservers. list zero or more # nameservers by hostname or by ipaddress. stub-zone: name: "example.com" stub-addr: 192.0.2.68 stub-zone: name: "example.org" stub-host: ns.example.com. # Forward zones # Create entries like below, to make all queries for 'example.com' and # 'example.org' go to the given list of servers. These servers have to handle # recursion to other nameservers. List zero or more nameservers by hostname # or by ipaddress. Use an entry with name "." to forward all queries. forward-zone: name: "example.com" forward-addr: 192.0.2.68 forward-addr: 192.0.2.73@5355 # forward to port 5355. forward-zone: name: "example.org" forward-host: fwd.example.com unbound-1.13.1/testdata/04-checkconf.tdir/include.include.withoutclauses.10000644000175000017500000000004214010434640026022 0ustar wouterwouterinclude: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/bad.include-toplevel.20000644000175000017500000000023314010434640023676 0ustar wouterwouterinclude-toplevel: include.withclauses.* server: identity: "top 1" include: include.withoutclauses.* include-toplevel: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.includetop.withoutclauses.20000644000175000017500000000005314010434640026550 0ustar wouterwouterinclude-toplevel: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.include.withclauses.10000644000175000017500000000003714010434640025276 0ustar wouterwouterinclude: include.withclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/bad.bind0000644000175000017500000000104014010434640021174 0ustar wouterwouter# test daemon options { directory "/home/wouter/bla"; version "test BIND 24"; pid-file "/home/wouter/named_24.pid"; dnssec-enable yes; listen-on-v6 { any; }; }; // logging clause logging { channel mainlog { file "named_24.log" size 10m; severity info; }; category default { mainlog; }; }; zone "." IN { type hint; file "root.servers"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "localhost.rev"; allow-update { none; }; }; unbound-1.13.1/testdata/04-checkconf.tdir/bad.include-toplevel.60000644000175000017500000000052714010434640023710 0ustar wouterwouterinclude-toplevel: include.withclauses.* include-toplevel: include.withclauses.* server: identity: "top 1" include: include.withoutclauses.* include-toplevel: include.withclauses.* include: include.withclauses.* include-toplevel: include.withclauses.* server: identity: "top 2" include-toplevel: include.includetop.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.withoutclauses.10000644000175000017500000000003414010434640024401 0ustar wouterwouteridentity: "withoutclauses1" unbound-1.13.1/testdata/04-checkconf.tdir/good.include-toplevel0000644000175000017500000000074514010434640023750 0ustar wouterwouterinclude-toplevel: include.withclauses.* include-toplevel: include.withclauses.* server: identity: "top 1" include: include.withoutclauses.* include-toplevel: include.withclauses.* include: include.withclauses.* include-toplevel: include.withclauses.* server: identity: "top 2" include-toplevel: include.includetop.withclauses.* include-toplevel: include.include.withclauses.* include-toplevel: include.include.withclauses.* server: chroot: "" directory: "" username: "" unbound-1.13.1/testdata/04-checkconf.tdir/good.include0000644000175000017500000000015214010434640022110 0ustar wouterwouter# include some file to test include functionality. include: "good.all" server: identity: "my identity" unbound-1.13.1/testdata/04-checkconf.tdir/04-checkconf.dsc0000644000175000017500000000041514010434640022454 0ustar wouterwouterBaseName: 04-checkconf Version: 1.0 Description: Test configuration checker. CreationDate: Fri Sep 28 15:46:27 CEST 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: 04-checkconf.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/04-checkconf.tdir/bad.include-toplevel.10000644000175000017500000000011114010434640023670 0ustar wouterwouterinclude-toplevel: include.withoutclauses.* server: identity: "top 1" unbound-1.13.1/testdata/04-checkconf.tdir/include.withclauses.20000644000175000017500000000004114010434640023650 0ustar wouterwouterserver: identity: "withclauses2" unbound-1.13.1/testdata/04-checkconf.tdir/include.include.withoutclauses.20000644000175000017500000000004214010434640026023 0ustar wouterwouterinclude: include.withoutclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/include.includetop.withclauses.20000644000175000017500000000005014010434640026015 0ustar wouterwouterinclude-toplevel: include.withclauses.* unbound-1.13.1/testdata/04-checkconf.tdir/bad.badip0000644000175000017500000000004514010434640021343 0ustar wouterwouterserver: interface: 123.AAAA.123.123 unbound-1.13.1/testdata/04-checkconf.tdir/bad.include-toplevel.50000644000175000017500000000037514010434640023710 0ustar wouterwouterinclude-toplevel: include.withclauses.* server: identity: "top 1" include: include.withoutclauses.* include-toplevel: include.withsomeclauses.* include: include.withclauses.* include-toplevel: include.withclauses.* server: identity: "top 2" unbound-1.13.1/testdata/04-checkconf.tdir/bad.badif0000644000175000017500000000044114010434640021331 0ustar wouterwouter# bad host and interface lines. server: username: "" interface: 127.0.0.1 interface: 127.0.0.1 interface: 127.0.0.1 outgoing-interface: ::1 outgoing-interface: ::1 outgoing-interface: ::1 forward-zone: name: root. forward-host: 127.0.0.1 stub-zone: name: com. stub-host: ::3 unbound-1.13.1/testdata/04-checkconf.tdir/bad.include-toplevel.40000644000175000017500000000034214010434640023701 0ustar wouterwouterinclude-toplevel: include.withclauses.* server: identity: "top 1" include: include.withoutclauses.* include-toplevel: include.withclauses.* include: include.withclauses.* include-toplevel: include.withoutclauses.* unbound-1.13.1/testdata/iter_hint_lame.rpl0000644000175000017500000000422614010434640020216 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterative resolve with lame hints. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b3_optout_noce.rpl0000644000175000017500000001466714010434640022124 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.3 optout unsigned, without ce. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION c.example. IN DS SECTION AUTHORITY ;; NSEC3 RR that covers the "next closer" name (c.example) ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ;; NSEC3 RR that matches the closest encloser (example) ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom ;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ;0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA DO NOERROR SECTION QUESTION c.example. IN MX SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. ;; NSEC3 RR that covers the "next closer" name (c.example) ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ;; NSEC3 RR that matches the closest encloser (example) ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom ; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END ; ns1.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns1.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns2.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END ; ns2.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns1.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns2.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mc.c.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION mc.c.example. IN MX ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_cname_double.rpl0000644000175000017500000000565514010434640020702 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test double cname in reply. ; this is in response to an error report from Robert Edmonds, ; about resolution of images-na.ssl-images-amazon.com. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.next.com. IN A SECTION AUTHORITY next.com. IN NS ns.next.com. SECTION ADDITIONAL ns.next.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; two CNAMEs for one name? www.example.com. IN CNAME www.next.com. www.example.com. IN CNAME www.next.com. SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.next.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SECTION QUESTION www.next.com. IN A SECTION ANSWER www.next.com. IN A 10.20.30.40 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION next.com. IN NS SECTION ANSWER next.com. IN NS ns.next.com. SECTION ADDITIONAL ns.next.com. IN A 1.2.3.5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.next.com. www.next.com. IN A 10.20.30.40 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_addpend_nosignnew.rpl0000644000175000017500000002155414010434640023056 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust ADDPEND state cannot add new key ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 20 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 21 50 ADDRESS 1.2.3.4 ; badly signed DNSKEY probe only signed with ADDPEND key ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; new KSK example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. JDeT7Z5zP9iw3RDFT4Yo+UMHo7qDNr3KjwIopAr+T3OyVGvoOWkDV+nqHIj3UNNzrjzWvoLpZaUrZuhaqily7w== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. rOxbAROwiW21OR8HjINk3IBs9bsxJKjipQ5EU4wWutiF/jr6KNT6LgtZv0TaFSiBHN/Jqz1wB2ODD2HXwLQ4DQ== ;{id = 60946} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} ; probe must be a failed probe! no larger than 3600 STEP 24 ASSIGN probe2 = ${range 3200 ${timeout} 3600} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 6 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END SCENARIO_END unbound-1.13.1/testdata/acl.rpl0000644000175000017500000000153714010434640015774 0ustar wouterwouter; config options server: hide-identity: no hide-version: no identity: "test-identity" version: "test-version" access-control: 20.0.0.0/8 allow access-control: 20.40.0.0/16 refuse access-control: 20.40.80.0/24 deny CONFIG_END SCENARIO_BEGIN Test access control list ; version.bind. ; allow STEP 1 QUERY ADDRESS 20.1.2.3 ENTRY_BEGIN SECTION QUESTION version.bind. CH TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA SECTION QUESTION version.bind. CH TXT SECTION ANSWER version.bind. 0 CH TXT "test-version" ENTRY_END ; refuse STEP 3 QUERY ADDRESS 20.40.2.3 ENTRY_BEGIN SECTION QUESTION version.bind. CH TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR REFUSED ENTRY_END ; deny (drop) STEP 5 QUERY ADDRESS 20.40.80.3 ENTRY_BEGIN SECTION QUESTION version.bind. CH TXT ENTRY_END ; no answer must be pending SCENARIO_END unbound-1.13.1/testdata/iter_resolve_minimised_nx.rpl0000644000175000017500000000470214010434640022477 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: yes minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterative qname minimised resolve of www.ent.example.com. Simulate broken nameserver that gives NXDOMAIN responses on empty-non-terminals. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION ent.example.com. IN A SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.ent.example.com. IN A SECTION ANSWER www.ent.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.ent.example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.ent.example.com. IN A SECTION ANSWER www.ent.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_ns_badip.rpl0000644000175000017500000001062714010434640020037 0ustar wouterwouter; config options server: target-fetch-policy: "3 2 1 0 0" qname-minimisation: "no" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator with delegation with bad IP address ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . SOA bla bla 1 2 3 4 5 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns.example.com. 10 IN A 1.2.3.4 ns2.example.com. 3600 IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION foo.com. IN A SECTION AUTHORITY foo.com. IN NS ns.example.com. foo.com. IN NS ns2.example.com. ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 10 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN NS ns2.example.com. SECTION ADDITIONAL ns.example.com. 10 IN A 1.2.3.4 ns2.example.com. 3600 IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. 10 IN A 1.2.3.4 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN NS ns2.example.com. SECTION ADDITIONAL ns2.example.com. 3600 IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns2.example.com. IN A SECTION ANSWER ns2.example.com. 3600 IN A 1.2.3.5 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN NS ns2.example.com. SECTION ADDITIONAL ns.example.com. 10 IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA bla. bla. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns2.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA bla. bla. 1 2 3 4 5 ENTRY_END ; foo.com contents. ENTRY_BEGIN MATCH opcode qtype qname REPLY QR NOERROR SECTION QUESTION www.foo.com. IN A SECTION ANSWER www.foo.com. 10 IN A 10.20.30.40 SECTION AUTHORITY foo.com. 3600 IN NS ns.example.com. foo.com. 3600 IN NS ns2.example.com. ENTRY_END RANGE_END ; ns2.example.com. (lame) RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION www.example.com. IN A ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.foo.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.foo.com. IN A SECTION ANSWER www.foo.com. 10 IN A 10.20.30.40 SECTION AUTHORITY foo.com. 3600 IN NS ns.example.com. foo.com. 3600 IN NS ns2.example.com. ENTRY_END STEP 15 TRAFFIC ; Now move the time so good server times out and bad remains. STEP 20 TIME_PASSES ELAPSE 20 ; Try query again. STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.foo.com. IN A ENTRY_END STEP 35 TRAFFIC ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.foo.com. IN A SECTION ANSWER www.foo.com. 10 IN A 10.20.30.40 SECTION AUTHORITY foo.com. 3600 IN NS ns.example.com. foo.com. 3600 IN NS ns2.example.com. ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_dsnsec.rpl0000644000175000017500000002442714010434640017361 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test pickup of DS NSEC from the cache. ; make sure unbound does not pick up the wrong nsec. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; barely valid nodata for AAAA ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for tub.example.com ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NXDOMAIN SECTION QUESTION tub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY ; SOA record example.com IN SOA ns.iana.org. NSTLD.iana.org. 2009061200 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. AAvpEruGS0UJzMoO6ou/+y8ZyHjjrFC6HKDWU8a61Ru9qtl4R66fC1c= ;{id = 2854} ; qname denial sub.example.com. IN NSEC wub.example.com. NS DS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA4+SSCI8kQZ2/iGj+9rxpNZyaIJNNRZ4eM0fEw2D5fVR/+WLUZ9GdE= ;{id = 2854} ; wildcard denial example.com. IN NSEC blub.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. AARheDFiRjrnKHzsPloUJ0FC+8aAM6H49Lnm2AJrgxE9RlBlH2E4sRo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; DS query for sub.example.com ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; query for a domain next to it, so the wrong NSEC gets in the cache. STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.tub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION www.tub.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA ns.iana.org. NSTLD.iana.org. 2009061200 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. AAvpEruGS0UJzMoO6ou/+y8ZyHjjrFC6HKDWU8a61Ru9qtl4R66fC1c= ;{id = 2854} sub.example.com. 3600 IN NSEC wub.example.com. NS DS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AA4+SSCI8kQZ2/iGj+9rxpNZyaIJNNRZ4eM0fEw2D5fVR/+WLUZ9GdE= ;{id = 2854} example.com. 3600 IN NSEC blub.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. AARheDFiRjrnKHzsPloUJ0FC+8aAM6H49Lnm2AJrgxE9RlBlH2E4sRo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; query of interest. STEP 30 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/local_acl_taglist.rpl0000644000175000017500000000615714010434640020700 0ustar wouterwouter; config options server: define-tag: "tag1 tag2 tag3" define-tag: "tag4" local-zone: "example." redirect local-data: 'example. IN TXT "data 0"' local-zone: "d.example." static local-data: 'd.example. IN TXT "data 1"' local-zone: "c.d.example." redirect local-data: 'c.d.example. IN TXT "data 2"' local-zone: "b.c.d.example." redirect local-data: 'b.c.d.example. IN TXT "data 3"' local-zone: "foo." redirect local-data: 'foo. IN TXT "data plain 4"' ; no tags for local-zones example. and c.d.example. local-zone-tag: "d.example." "tag1 tag2" local-zone-tag: "b.c.d.example." "tag3" local-zone-tag: "foo." "tag4" access-control: 10.10.10.0/24 allow access-control-tag: 10.10.10.20/32 "tag1" access-control-tag: 10.10.10.30/32 "tag2 tag3" access-control-tag: 10.10.10.40/32 "tag3" access-control-tag: 10.10.10.50/32 "tag4" access-control-tag-data: 10.10.10.50/32 "tag4" 'TXT "data tag4"' access-control-tag: 10.10.10.60/32 "tag4" CONFIG_END SCENARIO_BEGIN Test local data queries STEP 1 QUERY ADDRESS 10.10.10.10 ENTRY_BEGIN SECTION QUESTION d.example. IN TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION d.example. IN TXT SECTION ANSWER d.example. IN TXT "data 0" ENTRY_END STEP 3 QUERY ADDRESS 10.10.10.20 ENTRY_BEGIN SECTION QUESTION d.example. IN TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION d.example. IN TXT SECTION ANSWER d.example. IN TXT "data 1" ENTRY_END STEP 5 QUERY ADDRESS 10.10.10.30 ENTRY_BEGIN SECTION QUESTION d.example. IN TXT ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION d.example. IN TXT SECTION ANSWER d.example. IN TXT "data 1" ENTRY_END STEP 7 QUERY ADDRESS 10.10.10.40 ENTRY_BEGIN SECTION QUESTION d.example. IN TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION d.example. IN TXT SECTION ANSWER d.example. IN TXT "data 0" ENTRY_END STEP 9 QUERY ADDRESS 10.10.10.20 ENTRY_BEGIN SECTION QUESTION c.d.example. IN TXT ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION c.d.example. IN TXT SECTION ANSWER c.d.example. IN TXT "data 2" ENTRY_END STEP 11 QUERY ADDRESS 10.10.10.20 ENTRY_BEGIN SECTION QUESTION a.b.c.d.example. IN TXT ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION a.b.c.d.example. IN TXT SECTION ANSWER a.b.c.d.example. IN TXT "data 2" ENTRY_END STEP 13 QUERY ADDRESS 10.10.10.30 ENTRY_BEGIN SECTION QUESTION a.b.c.d.example. IN TXT ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION a.b.c.d.example. IN TXT SECTION ANSWER a.b.c.d.example. IN TXT "data 3" ENTRY_END STEP 15 QUERY ADDRESS 10.10.10.50 ENTRY_BEGIN SECTION QUESTION www.foo. IN TXT ENTRY_END STEP 16 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION www.foo. IN TXT SECTION ANSWER www.foo. IN TXT "data tag4" ENTRY_END STEP 17 QUERY ADDRESS 10.10.10.60 ENTRY_BEGIN SECTION QUESTION www.foo. IN TXT ENTRY_END STEP 18 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA SECTION QUESTION www.foo. IN TXT SECTION ANSWER www.foo. IN TXT "data plain 4" ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametonsec.rpl0000644000175000017500000001407614010434640020400 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with CNAME to insecure NSEC delegation ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ; no NSECs to prove this, not needed in test, but could be there SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.sub.example.com. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134802 20070829134802 2854 example.com. AKvv+5rFiCFiNRbdpna4rQtyARsLltUL9lXRWgpBVB5voJNJ9g/n/f4= ;{id = 2854} SECTION AUTHORITY sub.example.com. IN NSEC zzz.example.com. NS sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134802 20070829134802 2854 example.com. AJPvjSrqGbe3ZBOxV9J3XyFeOqrcPfIYPIWnlmj6G+PebJdAkvwIu9o= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; this server also serves the zone sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN SOA a. b. 1 2 3 4 5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.sub.example.com. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134802 20070829134802 2854 example.com. AKvv+5rFiCFiNRbdpna4rQtyARsLltUL9lXRWgpBVB5voJNJ9g/n/f4= ;{id = 2854} SECTION AUTHORITY sub.example.com. IN NSEC zzz.example.com. NS sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134802 20070829134802 2854 example.com. AJPvjSrqGbe3ZBOxV9J3XyFeOqrcPfIYPIWnlmj6G+PebJdAkvwIu9o= ;{id = 2854} sub.example.com. IN SOA a. b. 1 2 3 4 5 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/serve_expired_zerottl.rpl0000644000175000017500000000602714010434640021663 0ustar wouterwouter; config options server: module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-expired: yes serve-expired-reply-ttl: 123 stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test 0 TLL with serve-expired ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct 0 TTL ; - query again; this time the answer has >0 TTL ; - check the answer ; - query one last time after expiration ; - check that the configured reply ttl is used ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 0 IN A 5.6.7.8 SECTION AUTHORITY example.com. 0 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 0 IN A 1.2.3.4 ENTRY_END RANGE_END RANGE_BEGIN 11 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. 10 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 10 IN A 1.2.3.4 ENTRY_END RANGE_END ; Let some time to pass so that timenow > 0 STEP 1 TIME_PASSES ELAPSE 3600 ; Query with RD flag STEP 2 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer with 0 TTL STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 0 IN A 5.6.7.8 SECTION AUTHORITY example.com. 0 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 0 IN A 1.2.3.4 ENTRY_END ; Let some time to pass STEP 11 TIME_PASSES ELAPSE 1 ; Query with RD flag STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer STEP 29 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. 10 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 10 IN A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire STEP 30 TIME_PASSES ELAPSE 11 ; Query with RD flag STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer STEP 49 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 123 IN A 5.6.7.8 SECTION AUTHORITY example.com. 123 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 123 IN A 1.2.3.4 ENTRY_END ; Give time for the pending query to get answered STEP 50 TRAFFIC SCENARIO_END unbound-1.13.1/testdata/val_cnametocloser_nosig.rpl0000644000175000017500000000714714010434640022137 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" trust-anchor: "a.b.example.com. 3600 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8=" val-override-date: "20091113091234" fake-sha1: yes trust-anchor-signaling: no forward-zone: name: "." forward-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test validator with CNAME to closer anchor optout missing sigs. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN CNAME www.a.b.example.com. www.example.com. 3600 IN RRSIG CNAME 5 3 3600 20091213091234 20091111091234 30899 example.com. mfQXJgOsRe8wiqNDZT4+ygSgRqzNowJ20o5+b681Mssp0xc007dq1ZaUYwUCdZjTn/GhF+f74t0UI1oqsFw2XA== ;{id = 30899} SECTION AUTHORITY ;; nsec3param 1 1 1 d399eaab ; example.com. -> l0c0e5lac37ai0lpij31sj699hkktdmb. ; b.example.com. -> 1lq6sb4omkd2vgj0l8lro2cbie223hco. ;; closest encloser: example.com. l0c0e5lac37ai0lpij31sj699hkktdmb.example.com. IN NSEC3 1 1 1 d399eaab l0c0e5lac37ai0lpij31sj699hkktdmc SOA NS DNSKEY NSEC3PARAM RRSIG l0c0e5lac37ai0lpij31sj699hkktdmb.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20091213091234 20091111091234 30899 example.com. qjV0zsbDWLuoOQQ3tgCE2zo1z31bK9nv/Wh6xqKhmhyFI87nw2HM0lZGfRQrpWvWfBDczLRxHH9WNZkeIzv28w== ;{id = 30899} ;; nextcloser is: b.example.com. ; under optout range. ; disproof of DS using the optout range. 1lq4sb4omkd2vgj0l8lro2cbie223hco.example.com. IN NSEC3 1 1 1 d399eaab 1lq8sb4omkd2vgj0l8lro2cbie223hco NS RRSIG 1lq4sb4omkd2vgj0l8lro2cbie223hco.example.com. 3600 IN RRSIG NSEC3 5 3 3600 20091213091234 20091111091234 30899 example.com. ZOJhHYt+YkGHBxHynuXlyZ8PEGg4YyqD/roWiEtBoP2PiGoPNCNqtWd0WjRgsUT0YFp/VqjqAU/RH8D45B8S8A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.a.b.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY ; NSEC that proves there is no AAAA record www.a.b.example.com. IN NSEC zzz.a.b.example.com. A NSEC RRSIG MX ; signature missing! ;www.a.b.example.com. 3600 IN RRSIG NSEC 5 5 3600 20091213091234 20091111091234 16486 a.b.example.com. pOj+aOIolZ8VXlLpaLD1NsYVbl8FW4wmsJbiVTYAMcyDOlgxOsbhTtlB4jQ7uV9pRVAzkvdm1V5wc/1PcncTuw== ;{id = 16486} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20091213091234 20091111091234 30899 example.com. hc+1QLqhy6lcfgH95k6eabsXrYsdH2oTLqDu6BjHYrmLi0kX4ZDiOI+syhIcGw9+hRqW1j8t+lsHvzvi7BgcXg== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.b.example.com. IN DNSKEY SECTION ANSWER a.b.example.com. 3600 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ; signature missing! ;a.b.example.com. 3600 IN RRSIG DNSKEY 5 4 3600 20091213091234 20091111091234 16486 a.b.example.com. kPftbF2Rut5h2Sc2k/gp27XS+4I9WQ/EYa5NJOnqfJZqpw/es7GuLyWAAZyvNhBDIUEenXtZ8k1H8F8poKdNXw== ;{id = 16486} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_addpend_nosign.rpl0000644000175000017500000002164214010434640022342 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust ADDPEND state cannot sign ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 20 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 21 50 ADDRESS 1.2.3.4 ; badly signed DNSKEY probe only signed with ADDPEND key ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} ;example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} ; probe must be a failed probe! no larger than 3600 STEP 24 ASSIGN probe2 = ${range 3200 ${timeout} 3600} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 6 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END SCENARIO_END unbound-1.13.1/testdata/subnet_not_whitelisted.crpl0000644000175000017500000000567014010434640022167 0ustar wouterwouterserver: send-client-subnet: 9.9.9.9/32 client-subnet-opcode: 20730 max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache validator iterator" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Subnet option MUST NOT be send to any host RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ednsdata ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 5.0.15.10 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 5.0.15.10 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 5.0.15.10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ednsdata ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END RANGE_END ;; ---------------------------------------- STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_pcdiff.rpl0000644000175000017500000000751114010434640017511 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with recursion and parent child differ. ; and the child gives bad information. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.net. ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. ; The parent-IP version RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.55 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net IN A 1.2.3.55 ENTRY_END RANGE_END ; ns.example.net ; The child IP version. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. ; scrubbed off ;SECTION ADDITIONAL ;ns.example.net IN A 1.2.3.44 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/local_nodefault.rpl0000644000175000017500000000213114010434640020357 0ustar wouterwouter; config options ; The island of trust is at example.com server: local-zone: "10.in-addr.arpa" nodefault qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test local data with nodefault for as112 zone. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION 40.30.20.10.in-addr.arpa. IN PTR SECTION ANSWER SECTION AUTHORITY . IN SOA invalid. invalid. 1 2 3 4 5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION 40.30.20.10.in-addr.arpa. IN PTR ENTRY_END ; not blocked! ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION 40.30.20.10.in-addr.arpa. IN PTR SECTION ANSWER SECTION AUTHORITY . IN SOA invalid. invalid. 1 2 3 4 5 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_stub_noroot.rpl0000644000175000017500000000472214010434640020453 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" trust-anchor: "lp0.eu. IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3" val-override-date: "20100913111500" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 81.187.81.187 stub-zone: name: "lp0.eu" stub-addr: 81.2.80.65 stub-prime: no CONFIG_END SCENARIO_BEGIN Test validation of stub zone without root prime. ; this server does not respond. (for the root) RANGE_BEGIN 0 100 ADDRESS 81.187.81.187 ENTRY_BEGIN MATCH ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION . IN NS ENTRY_END RANGE_END ; lp0.eu server RANGE_BEGIN 0 100 ADDRESS 81.2.80.65 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION lp0.eu. IN DNSKEY SECTION ANSWER lp0.eu. 3600 IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30900 (ksk), size = 512b} lp0.eu. 3600 IN RRSIG DNSKEY 5 2 3600 20101013111500 20100909111500 30900 lp0.eu. zWYOT1zmB2k7hMl7mke7k1UNp4lDveUxi2EnF0tW++j2/qJopiAAcFHBo2GOo88jHcLWycurf0Qo+YGXfFbpEg== ;{id = 30900} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION proxima.lp0.eu. IN A SECTION ANSWER proxima.lp0.eu. IN A 81.2.80.65 proxima.lp0.eu. 3600 IN RRSIG A 5 3 3600 20101013111500 20100909111500 30900 lp0.eu. xwS3PLSlxh500pDYh/t6fnLzxQAra6n3nhzk4fVqLzwmneBIfcx4F/vO44wRzXSprz1UbMkVUcruTbQYlLFBEg== ;{id = 30900} SECTION AUTHORITY lp0.eu. IN NS proxima.lp0.eu. lp0.eu. 3600 IN RRSIG NS 5 2 3600 20101013111500 20100909111500 30900 lp0.eu. KM7Zfwc1b0Ay8Ezer0ZAERPbmgGzKIrTfZMxzXzSkVx5DWirTtdgPTNVG/y9fkN4tUARNhElN2eb0ufb04Hdgw== ;{id = 30900} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION proxima.lp0.eu. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION proxima.lp0.eu. IN A SECTION ANSWER proxima.lp0.eu. IN A 81.2.80.65 proxima.lp0.eu. 3600 IN RRSIG A 5 3 3600 20101013111500 20100909111500 30900 lp0.eu. xwS3PLSlxh500pDYh/t6fnLzxQAra6n3nhzk4fVqLzwmneBIfcx4F/vO44wRzXSprz1UbMkVUcruTbQYlLFBEg== ;{id = 30900} SECTION AUTHORITY lp0.eu. IN NS proxima.lp0.eu. lp0.eu. 3600 IN RRSIG NS 5 2 3600 20101013111500 20100909111500 30900 lp0.eu. KM7Zfwc1b0Ay8Ezer0ZAERPbmgGzKIrTfZMxzXzSkVx5DWirTtdgPTNVG/y9fkN4tUARNhElN2eb0ufb04Hdgw== ;{id = 30900} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ipsecmod_hook.sh0000755000175000017500000000012514010434640017670 0ustar wouterwouterecho " ---[ IPsec external hook FAIL; only care if ipsecmod-strict: yes ]---" exit 1 unbound-1.13.1/testdata/val_dnametopos.rpl0000644000175000017500000002105314010434640020243 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a dname to positive ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER example.com. IN DNAME example.net. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFH1xw24Hswia3g10AVL1yFUHUPdFAhQDrA+qZJwqXRPg2C1oiNPk9fosGg== ;{id = 2854} ; unsigned CNAME www.example.com. IN CNAME www.example.net. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER ; from *.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER example.com. 3600 IN DNAME example.net. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFH1xw24Hswia3g10AVL1yFUHUPdFAhQDrA+qZJwqXRPg2C1oiNPk9fosGg== ;{id = 2854} www.example.com. 0 IN CNAME www.example.net. www.example.net. 3600 IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; Check cache response for DNAME ; so 100+ the authority will not respond any more : must be from cache. STEP 110 TIME_PASSES ELAPSE 10 STEP 120 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER example.com. 3590 IN DNAME example.net. example.com. 3590 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFH1xw24Hswia3g10AVL1yFUHUPdFAhQDrA+qZJwqXRPg2C1oiNPk9fosGg== ;{id = 2854} www.example.com. 3590 IN CNAME www.example.net. www.example.net. 3590 IN A 11.12.13.14 www.example.net. 3590 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_keyprefetch.rpl0000644000175000017500000001650514010434640020411 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" prefetch-key: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with key prefetch ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/serve_expired_ttl.rpl0000644000175000017500000000376214010434640020766 0ustar wouterwouter; config options server: module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-expired: yes serve-expired-ttl: 10 stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test serve-expired ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - query again right after the TTL expired + serve-expired-ttl ; - check that we get an updated answer and not the cached one ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer (should be cached) STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire + serve-expired-ttl STEP 11 TIME_PASSES ELAPSE 3611 ; Query again STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got an updated answer STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_entnodata_optout_match.rpl0000644000175000017500000001575014010434640023737 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NODATA ENT with nsec3 optout matches the ent. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ent.example.com. IN DS SECTION AUTHORITY ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; OPTOUT b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= ; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag. ; OPTOUT 2kekcu37chvrqjb272ptidu9jhk8oqag.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk8oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AJl6kanB5RTIcTJysEzDUNqQAr0ftIqzGzQw2+v8RLEbn3Yhi1bEfOQ= ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ent.example.com. IN A SECTION AUTHORITY ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; OPTOUT b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= ; ent.example.com. -> 2kekcu37chvrqjb272ptidu9jhk8oqag. ; OPTOUT 2kekcu37chvrqjb272ptidu9jhk8oqag.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk8oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AJl6kanB5RTIcTJysEzDUNqQAr0ftIqzGzQw2+v8RLEbn3Yhi1bEfOQ= ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ent.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION ent.example.com. IN A SECTION ANSWER SECTION AUTHORITY b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA RRSIG DNSKEY b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AHNLlpOM8cBFBBdzUO9nQC/O6mw3rDUrqcdiSwMKAIckd3k5WZvoP78= 2kekcu37chvrqjb272ptidu9jhk8oqag.example.com. 3600 IN NSEC3 1 1 123 aabb00123456bbccdd 2kekcu37chvrqjb272ptidu9jhk9oqag 2kekcu37chvrqjb272ptidu9jhk8oqag.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AJl6kanB5RTIcTJysEzDUNqQAr0ftIqzGzQw2+v8RLEbn3Yhi1bEfOQ= SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/07-confroot.tdir/0000755000175000017500000000000014010434640017526 5ustar wouterwouterunbound-1.13.1/testdata/07-confroot.tdir/07-confroot.dsc0000644000175000017500000000041714010434640022300 0ustar wouterwouterBaseName: 07-confroot Version: 1.0 Description: test checkconf with chroot dir. CreationDate: Mon Apr 14 14:54:59 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: 07-confroot.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/07-confroot.tdir/07-confroot.test0000644000175000017500000001410214010434640022502 0ustar wouterwouter# #-- 07-confroot.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." if uname | grep "MINGW" >/dev/null; then # no chroot, no need to test. # (test fails on / en \ comparisons, by the way). echo "no chroot on windows, end test" exit 0 fi # create config file cwd=`pwd -P` subdir=$cwd/subdir user=`whoami` mkdir subdir if test $? -ne 0; then echo "could not create subdir" exit 1 fi cat > test.conf < subdir/root.ca echo "a.root-servers.net. IN A 127.0.0.1" >> subdir/root.ca echo ". CH NS b.root-servers.net." > subdir/root.cb echo "b.root-servers.net. CH A 127.0.0.1" >> subdir/root.cb echo ". HS NS c.root-servers.net." > subdir/root.cc echo "c.root-servers.net. HS A 127.0.0.1" >> subdir/root.cc echo "" > subdir/trustkeys.conf echo "" > subdir/trustkeys2.conf echo "" > subdir/trustkeys3.conf echo "" > subdir/trustanchor.conf echo "" > subdir/trustanchor2.conf echo "" > subdir/trustanchor3.conf $PRE/unbound-checkconf test.conf if test $? -ne 0; then echo "Checkconf of config with chroot inside it failed" exit 1 fi echo "OK 1" ### NEXT TEST cat > test.conf < test.conf < test.conf < test.conf < test.conf < test.conf < test.conf <> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT -f 9 fwd_waitudp.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_waitudp.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_waitudp.tdir/fwd_waitudp.post0000644000175000017500000000075214010434640023216 0ustar wouterwouter# #-- fwd_waitudp.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh # kill fwder kill_pid $FWD_PID # find all extra forked testns and kill them. pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` for p in $pidlist; do kill_pid $p done # kill unbound kill_pid $UNBOUND_PID exit 0 unbound-1.13.1/testdata/fwd_waitudp.tdir/fwd_waitudp.test0000644000175000017500000000257514010434640023215 0ustar wouterwouter# #-- fwd_waitudp.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test # skip the single query test # so that all three queries get timeouts during the later test. # #echo "> dig www1.example.com." #dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile #echo "> cat logfiles" #cat fwd.log #cat unbound.log #echo "> check answer for single query" #if grep "10.20.30.40" outfile; then #echo "OK" #else #echo "Not OK" #exit 1 #fi echo "> do three queries" dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & digpid1=$! dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & digpid2=$! dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & digpid3=$! sleep 15 kill -9 $digpid1 kill -9 $digpid2 kill -9 $digpid3 echo "> cat outfile1" cat outfile1 echo "> cat outfile2" cat outfile2 echo "> cat outfile3" cat outfile3 echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answers for three queries" if grep "10.20.30.40" outfile1; then echo "1 is OK" else echo "1 is not OK" exit 1 fi if grep "10.20.30.50" outfile2; then echo "2 is OK" else echo "2 is not OK" exit 1 fi if grep "10.20.30.60" outfile3; then echo "3 is OK" else echo "3 is not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_waitudp.tdir/fwd_waitudp.conf0000644000175000017500000000044514010434640023155 0ustar wouterwouterserver: verbosity: 4 num-threads: 1 interface: 127.0.0.1 port: @PORT@ outgoing-range: 1 directory: "" pidfile: "unbound.pid" chroot: "" username: "" num-queries-per-thread: 1024 use-syslog: no do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/val_nsec3_b1_nameerror.rpl0000644000175000017500000001203614010434640021542 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.1 name error. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NXDOMAIN SECTION QUESTION a.c.x.w.example. IN A SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR that covers the "next closer" name (c.x.w.example) ;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ;; NSEC3 RR that matches the closest encloser (x.w.example) ;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995 b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== ) ;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example) ;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.c.x.w.example. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION a.c.x.w.example. IN A SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_sigs.sha1_and_2560000644000175000017500000000621314010434640020512 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test multiple signature algos: RSASHA1 + RSASHA256 signatures. ; RSA key from ldns tool ENTRY_BEGIN SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1443 (zsk), size = 1024b} example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ENTRY_END ; both signatures valid ENTRY_BEGIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 192.0.2.66 www.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 1443 example.com. sX+BZ6Qdq0Td/THR1HgOnWh9URNP03KMEgjpnRGbS74NqlmlqLU3HcimOT/lUD7xsZTeOIWw5kAcQePxU3UrjS5gsIttIXAfrHFmOtTsyb0O4w0/RpR0QYxRl1hk4zQRPzHeEkgxNTe+y9V9gYe7iv9OddXsfwEnmqQiXk+tdsU= ;{id = 1443} www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Ip2xOAgSq3HdeGEMyQ0jafKNOOJO7Ca+huBgBPSj7B3txTlP9hBzlV0rb0XULymEiQLSpIPm4EY7xzom7z6aKA== ;{id = 30899} ENTRY_END ; the SHA1 invalid ENTRY_BEGIN SECTION QUESTION bogus.example.com. IN A SECTION ANSWER bogus.example.com. 3600 IN A 192.0.2.66 bogus.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 1443 example.com. qaYKAK9+t5HggYjHduA5d3A3i41HoU0ct0yqNzsYQqElFkH0d1aTjRDExD0PGeVbMTocMBru+ID9cLot3kwgn8aZL6UI3AwV6MR+0lianuA8DyhuqpD8OwkZ+LJxNsfq3t5ospXlBhyaI95S7lC3N6dsHDj4qtOwyE42fnQkedE= ;{id = 1443} bogus.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Ip2xOAgSq3HdeGEMyQ0jafKNOOJO7Ca+huBgBPSj7B3txTlP9hBzlV0rb0XULymEiQLSpIPm4EY7xzom7z6aKA== ;{id = 30899} ENTRY_END ; the SHA256 invalid ENTRY_BEGIN SECTION QUESTION bogus.example.com. IN A SECTION ANSWER bogus.example.com. 3600 IN A 192.0.2.66 bogus.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 1443 example.com. sX+BZ6Qdq0Td/THR1HgOnWh9URNP03KMEgjpnRGbS74NqlmlqLU3HcimOT/lUD7xsZTeOIWw5kAcQePxU3UrjS5gsIttIXAfrHFmOtTsyb0O4w0/RpR0QYxRl1hk4zQRPzHeEkgxNTe+y9V9gYe7iv9OddXsfwEnmqQiXk+tdsU= ;{id = 1443} bogus.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. EetlYQbmdt8deu6LIOYTxwHsMnivWBaxClTlLTPooUjgE+upQfCbG25mdY/wx+lM8fthKry+z65YACR8opA0Sw== ;{id = 30899} ENTRY_END ; SHA1 and SHA256 not valid ENTRY_BEGIN SECTION QUESTION bogus.example.com. IN A SECTION ANSWER bogus.example.com. 3600 IN A 192.0.2.66 bogus.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 1443 example.com. sX+BZ6Qdq0Td/THR1HgOnWh9URNP03KMEgjpnRGbS74NqlmlqLU3HcimOT/lUD7xsZTeOIWw5kAcQePxU3UrjS5gsIttIXAfrHFmOtTsyb0O4w0/RpR0QYxRl1hk4zQRPzHeEkgxNTe+y9V9gYe7iv9OddXsfwEnmqQiXk+tdsU= ;{id = 1443} bogus.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Ip2xOAgSq3HdeGEMyQ0jafKNOOJO7Ca+huBgBPSj7B3txTlP9hBzlV0rb0XULymEiQLSpIPm4EY7xzom7z6aKA== ;{id = 30899} ENTRY_END unbound-1.13.1/testdata/iter_recurse.rpl0000644000175000017500000001010014010434640017712 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with recursion for NS target. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.net. ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net IN A 1.2.3.44 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.net. ; scrubbed off ;SECTION ADDITIONAL ;ns.example.net IN A 1.2.3.44 ENTRY_END ; due to ordering of answer packets, this is still outstanding, remove it STEP 21 CHECK_OUT_QUERY ENTRY_BEGIN ADJUST copy_id MATCH qname qtype REPLY QR SECTION QUESTION ns.example.net IN AAAA ENTRY_END SCENARIO_END unbound-1.13.1/testdata/stub_udp6.tdir/0000755000175000017500000000000014010434640017364 5ustar wouterwouterunbound-1.13.1/testdata/stub_udp6.tdir/stub_udp6.testns0000644000175000017500000000133414010434640022542 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 SECTION AUTHORITY @ IN NS ns.example.com. SECTION ADDITIONAL ns IN A 127.0.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION mail IN A SECTION ANSWER mail IN A 10.20.30.66 SECTION AUTHORITY @ IN NS ns.example.com. SECTION ADDITIONAL ns IN A 127.0.0.1 ENTRY_END ; root prime ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION . IN NS SECTION ANSWER . IN NS root.server. SECTION AUTHORITY SECTION ADDITIONAL root.server. IN A 127.0.0.1 ENTRY_END unbound-1.13.1/testdata/stub_udp6.tdir/stub_udp6.test0000644000175000017500000000142714010434640022204 0ustar wouterwouter# #-- stub_udp6.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @::1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi # check delegations from cache by doing second test echo "> dig mail.example.com." dig @::1 -p $UNBOUND_PORT mail.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.66" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/stub_udp6.tdir/stub_udp6.pre0000644000175000017500000000160514010434640022011 0ustar wouterwouter# #-- stub_udp6.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -6 -p $FWD_PORT stub_udp6.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stub_udp6.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/stub_udp6.tdir/stub_udp6.conf0000644000175000017500000000051314010434640022145 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: ::1 outgoing-interface: ::1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no stub-zone: name: "example.com" stub-addr: "::1@@TOPORT@" # a k a root hints stub-zone: name: "." stub-addr: "::1@@TOPORT@" unbound-1.13.1/testdata/stub_udp6.tdir/stub_udp6.post0000644000175000017500000000045214010434640022207 0ustar wouterwouter# #-- stub_udp6.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/stub_udp6.tdir/stub_udp6.dsc0000644000175000017500000000046014010434640021772 0ustar wouterwouterBaseName: stub_udp6 Version: 1.0 Description: Stub server contacted via UDP over IPv6. CreationDate: Wed Mar 10 13:33:06 CET 2010 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: stub_udp6.pre Post: stub_udp6.post Test: stub_udp6.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/Kexample.com.+005+16486.ds0000644000175000017500000000021714010434640020425 0ustar wouterwouterexample.com. 3600 IN DS 16486 5 1 9adff86d0a468b5989a686df8076269b3a31ba54 ; xokit-zevek-tydyg-kydoh-nydap-kicet-zybil-konon-ruvef-covuh-gyxex unbound-1.13.1/testdata/ssl_req_timeout.tdir/0000755000175000017500000000000014010434640020667 5ustar wouterwouterunbound-1.13.1/testdata/ssl_req_timeout.tdir/ssl_req_timeout.pre0000644000175000017500000000163214010434640024617 0ustar wouterwouter# #-- ssl_req_timeout.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT ssl_req_timeout.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_timeout.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/ssl_req_timeout.tdir/ssl_req_timeout.testns0000644000175000017500000000172614010434640025355 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=4 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=4 SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=4 SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END unbound-1.13.1/testdata/ssl_req_timeout.tdir/unbound_server.key0000644000175000017500000000463314010434640024447 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ssl_req_timeout.tdir/ssl_req_timeout.conf0000644000175000017500000000107014010434640024752 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no ssl-port: @PORT@ ssl-service-key: "unbound_server.key" ssl-service-pem: "unbound_server.pem" local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" tcp-idle-timeout: 2000 local-zone: "drop.net" deny forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/ssl_req_timeout.tdir/unbound_server.pem0000644000175000017500000000246614010434640024442 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/ssl_req_timeout.tdir/ssl_req_timeout.dsc0000644000175000017500000000047414010434640024605 0ustar wouterwouterBaseName: ssl_req_timeout Version: 1.0 Description: Test ssl request order timeouts. CreationDate: Mon Jan 21 11:23:00 CET 2018 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: ssl_req_timeout.pre Post: ssl_req_timeout.post Test: ssl_req_timeout.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/ssl_req_timeout.tdir/ssl_req_timeout.post0000644000175000017500000000051414010434640025014 0ustar wouterwouter# #-- ssl_req_timeout.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat fwd.log cat unbound.log unbound-1.13.1/testdata/ssl_req_timeout.tdir/ssl_req_timeout.test0000644000175000017500000000706714010434640025020 0ustar wouterwouter# #-- ssl_req_timeout.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # check what sort of netcat we have if nc -h 2>&1 | grep "q secs"; then ncopt="-q 3 -i 4" else ncopt="-i 4" fi # this test query should just work (server is up) echo "> query www1.example.net." $PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # multiple requests that are answered immediately and then the timeout echo "> query www1.example.net. www2.example.net. www3.example.net. www.example.com." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN www.example.com. A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "stream closed" outfile; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # multiple requests that are waiting for answers and then the timeout echo "> query www2.example.com. www2.example.com. www3.example.com." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN www2.example.com A IN www3.example.com A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "stream closed" outfile; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # wait a bit sleep 2 # echo a couple requests to the other side and then wait for the timeout. # this creates waiting answers in the reply queue. echo "> nc www.example.net www2.example.net www3.example.net" ( echo "0021eb410100000100000000000003777777076578616d706c65036e657400000100010022eb41010000010000000000000477777732076578616d706c65036e657400000100010022eb41010000010000000000000477777733076578616d706c65036e65740000010001" | xxd -r -p ; sleep 10 ; echo "") | nc $ncopt --ssl 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile echo "OK" exit 0 unbound-1.13.1/testdata/tls_reuse.tdir/0000755000175000017500000000000014010434640017456 5ustar wouterwouterunbound-1.13.1/testdata/tls_reuse.tdir/tls_reuse.pre0000644000175000017500000000222214010434640022171 0ustar wouterwouter# #-- tls_reuse.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT UPSTREAM_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tls_reuse.conf > ub.conf # start unbound in the background #$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & $PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test wait_unbound_up unbound.log # make upstream config file sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tls_reuse.conf2 > ub2.conf # start upstream unbound in the background #$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & $PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & UPSTREAM_PID=$! echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test wait_unbound_up unbound2.log cat .tpkg.var.test unbound-1.13.1/testdata/tls_reuse.tdir/tls_reuse.dsc0000644000175000017500000000043214010434640022155 0ustar wouterwouterBaseName: tls_reuse Version: 1.0 Description: Test tls stream reuse. CreationDate: Wed Jun 30 16:37:00 CET 2020 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: tls_reuse.pre Post: tls_reuse.post Test: tls_reuse.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tls_reuse.tdir/unbound_server.key0000644000175000017500000000463314010434640023236 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/tls_reuse.tdir/tls_reuse.conf20000644000175000017500000000220114010434640022407 0ustar wouterwouter# this is the upstream server that has pipelining and responds to queries. server: verbosity: 1 # num-threads: 1 interface: 127.0.0.1@@PORT@ port: @PORT@ use-syslog: no directory: . pidfile: "unbound2.pid" chroot: "" username: "" do-not-query-localhost: no tls-port: @PORT@ tls-service-key: "unbound_server.key" tls-service-pem: "unbound_server.pem" tcp-idle-timeout: 10000 log-queries: yes log-replies: yes log-identity: "upstream" local-zone: "." refuse local-zone: "example.com" static local-data: "www.example.com A 10.20.30.40" local-data: "www1.example.com A 10.20.30.41" local-data: "www2.example.com A 10.20.30.42" local-data: "www3.example.com A 10.20.30.43" local-data: "www4.example.com A 10.20.30.44" local-data: "www5.example.com A 10.20.30.45" local-data: "www6.example.com A 10.20.30.46" local-data: "www7.example.com A 10.20.30.47" local-zone: "drop.net" deny local-zone: "refuse.net" refuse local-zone: "more.net" redirect local-data: "more.net A 10.20.30.40" # if queries escape, send them to localhost forward-zone: name: "." forward-tls-upstream: yes forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/tls_reuse.tdir/tls_reuse.test0000644000175000017500000001644114010434640022372 0ustar wouterwouter# #-- tls_reuse.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) echo "> query www1.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.com" outfile | grep "10.20.30.41"; then echo "content OK" else echo "result contents not OK, for www1.example.com" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for www1.example.com" exit 1 fi echo "OK" echo "" # this should be reused on the same tcp stream: echo "> query www2.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "www2.example.com" outfile | grep "10.20.30.42"; then echo "content OK" else echo "result contents not OK, for www2.example.com" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for www2.example.com" exit 1 fi echo "> query refuse.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "rcode: SERVFAIL" outfile; then echo "content OK" else echo "result contents not OK, for refuse.net" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for refuse.net" exit 1 fi echo "> query www3.example.com." echo "> query www4.example.com." echo "> query www5.example.com." echo "> query www6.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 & wait if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "www3.example.com" outfile3 | grep "10.20.30.43"; then echo "content OK" else echo "result contents not OK, for www3.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www3.example.com" exit 1 fi if grep "www4.example.com" outfile4 | grep "10.20.30.44"; then echo "content OK" else echo "result contents not OK, for www4.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www4.example.com" exit 1 fi if grep "www5.example.com" outfile5 | grep "10.20.30.45"; then echo "content OK" else echo "result contents not OK, for www5.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www5.example.com" exit 1 fi if grep "www6.example.com" outfile6 | grep "10.20.30.46"; then echo "content OK" else echo "result contents not OK, for www6.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www6.example.com" exit 1 fi echo "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net" $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile for x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do if grep "$x" outfile | grep "10.20.30.40"; then echo "content OK for $x" else echo "result contents not OK, for $x" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for $x" exit 1 fi done # make the server timeout to drop the upstream connection echo "> sleep 15" sleep 15 # see if we are still up. echo "> query a7.more.net" $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile for x in a7.more.net; do if grep "$x" outfile | grep "10.20.30.40"; then echo "content OK for $x" else echo "result contents not OK, for $x" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for $x" exit 1 fi done # dropconn.drop.net make the server drop the connection. echo "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net" $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile # cannot really check outfile, because it may or may not have answers depending # on how fast the other server responds or the drop happens, but there are # a bunch of connection drops, whilst resolving the other queries. echo "> query drop.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT drop.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "rcode: SERVFAIL" outfile; then echo "content OK" else echo "result contents not OK, for drop.net" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for drop.net" exit 1 fi # timeouts at the end. (so that the server is not marked as failed for # the other tests). echo "> query q1.drop.net." echo "> query q2.drop.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 & wait if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile1 cat outfile2 cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile1 cat outfile2 if grep "rcode: SERVFAIL" outfile1; then echo "content OK" else echo "result contents not OK, for q1.drop.net" echo "> cat logfiles" cat outfile1 cat outfile2 cat unbound2.log cat unbound.log echo "result contents not OK, for q1.drop.net" exit 1 fi if grep "rcode: SERVFAIL" outfile2; then echo "content OK" else echo "result contents not OK, for q2.drop.net" echo "> cat logfiles" cat outfile1 cat outfile2 cat unbound2.log cat unbound.log echo "result contents not OK, for q2.drop.net" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/tls_reuse.tdir/unbound_server.pem0000644000175000017500000000246614010434640023231 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/tls_reuse.tdir/unbound_control.pem0000644000175000017500000000247614010434640023404 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/tls_reuse.tdir/tls_reuse.conf0000644000175000017500000000047114010434640022334 0ustar wouterwouterserver: verbosity: 5 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no tls-cert-bundle: "unbound_server.pem" tls-upstream: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@#unbound" unbound-1.13.1/testdata/tls_reuse.tdir/tls_reuse.post0000644000175000017500000000074514010434640022400 0ustar wouterwouter# #-- tls_reuse.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid `cat unbound2.pid` if test -f unbound2.log; then echo ">>> upstream log" cat unbound2.log fi #kill_pid $UNBOUND_PID kill_pid `cat unbound.pid` if test -f unbound.log; then echo ">>> unbound log" cat unbound.log fi unbound-1.13.1/testdata/tls_reuse.tdir/unbound_control.key0000644000175000017500000000462714010434640023413 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/val_unsecds_qtypeds.rpl0000644000175000017500000001423714010434640021315 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with insecure delegation and qtype DS. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; query for missing DS record. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; query for missing DS record. on wrong side of zone cut. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY sub.example.com. IN SOA ns.sub.example.com. h.sub.example.com. 2007090504 1800 1800 2419200 7200 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/0000755000175000017500000000000014010434640021623 5ustar wouterwouterunbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post0000644000175000017500000000063014010434640026703 0ustar wouterwouter# #-- dnscrypt_cert_chacha.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh # Check if we can run the test. . ./precheck.sh kill_pid $FWD_PID if [ $xchacha20 -ne 0 ]; then kill_pid $UNBOUND_PID fi unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test0000644000175000017500000001162514010434640026703 0ustar wouterwouter# #-- dnscrypt_cert_chacha.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # Check if we can run the test. . ./precheck.sh # do the test if [ $xchacha20 -eq 0 ]; then # Unbound would exit before we can attempt any tests. echo "OK" exit 0 fi # Query plain request over DNSCrypt channel get closed # We use TCP to avoid hanging on waiting for UDP. # We expect `outfile` to contain no DNS payload echo "> dig TCP www.example.com. DNSCrypt port" dig +tcp @127.0.0.1 -p $DNSCRYPT_PORT www.example.com. A | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "QUESTION SECTION" outfile; then echo "NOK" exit 1 else echo "OK" fi # Plaintext query on unbound port works correctly. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi # Plaintext query on unbound port works correctly with TCP. echo "> dig TCP www.example.com." dig +tcp @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi for opt in '' '+tcp' do # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. # Check that it returns 1.cert. echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. DNSCrypt plaintext ${opt}" dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then echo "OK" else echo "Not OK" exit 1 fi # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. # Check that it returns 2.cert. echo "> dig TXT 2.dnscrypt-cert.example.com. 2_salsa.CERT. DNSCrypt plaintext ${opt}" dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep -F 'DNSC\000\001\000\000AX\031\201\243\201LI<-\146]LU\247LY\2376\014K\194$D\151&\008\236\008\220\143We\029\227\030\233\015[4\\\146\174\166`{}\161W\209\228\215\002\205|\207*\011\162$\175\210[\006\245\243W\191\189Z\216\210x\025\204\247\173\227t\138\018\162~\152\253\211\031z\\\002m5\008\254\2244\245\243W\191\189Z\216\210Y\160\203\009Y\160\203\009u\210\207\137' outfile; then echo "OK" else echo "NOK" exit 1 fi # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. # Check that it returns 2_chacha.cert echo "> dig TXT 2.dnscrypt-cert.example.com. 2_CHACHA.CERT. DNSCrypt plaintext ${opt}" dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" grep -F 'DNSC\000\002\000\000\1716\226\255*\244\002L\177g\025_\127tR\151\246R\203\178\153\248\006\137\"\138\173|G/,\160\152\015\010\172\184\220`\175\217\255,\162\018\178-d\007\246k0\003I[\205w\026)\204B\002\161\010\245\243W\191\189Z\216\210x\025\204\247\173\227t\138\018\162~\152\253\211\031z\\\002m5\008\254\2244\246\243W\191\189Z\216\210Y\160\2158Y\160\2158u\210\219\184' outfile cert_found=$? if [ \( $cert_found -eq 0 -a $xchacha20 -eq 1 \) -o \( $cert_found -ne 0 -a $xchacha20 -eq 0 \) ]; then echo "OK" else echo "Not OK" exit 1 fi # Certificates are local-data for unbound. We can also retrieve them from unbound # port. echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. Unbound ${opt}" dig ${opt} @127.0.0.1 -p $UNBOUND_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then echo "OK" else echo "Not OK" exit 1 fi done exit 0 unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/1_chacha.cert0000644000175000017500000000017414010434640024133 0ustar wouterwouterDNSC¬#ëÊb5û ³)Éös±¿XAÃøå#¬Âæ¼  BÈŸŸÿ:(’Ø J@œ5¢Ìar›‡ 9’;Ü  ªÃ¿2˰D´eÆhˆ{Øs;Sd2^šá<CÍ+SÛAÄ¿2˰DY ×8Y ×8uÒÛ¸unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/1.cert0000644000175000017500000000017414010434640022644 0ustar wouterwouterDNSC+WS«'OMFð: `uD“\ f^©÷ç„îÍÝZóMpaN4Ôl±?ð,f“Aj¸SÍ}1°eâ¾: O[s6q–€©J5cDíò:ú0UË¡’„…)js./O[s6q–W¾4êW¾4êYŸhjunbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.dsc0000644000175000017500000000051114010434640026465 0ustar wouterwouterBaseName: dnscrypt_cert_chacha Version: 1.0 Description: dnscrypt cert retrieval. CreationDate: Fri Mar 03 10:08:08 CEST 2017 Maintainer: Emmanuel Bretelle Category: Component: CmdDepends: Depends: Help: Pre: dnscrypt_cert_chacha.pre Post: dnscrypt_cert_chacha.post Test: dnscrypt_cert_chacha.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/precheck.sh0000644000175000017500000000051414010434640023743 0ustar wouterwouter# dnscrypt precheck.sh # if no dnscrypt; exit if grep "define USE_DNSCRYPT 1" $PRE/config.h; then echo "have dnscrypt" else echo "no dnscrypt" exit 0 fi # if no xchacha20 support in unbound; exit if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then xchacha20=1 else xchacha20=0 fi unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/1_salsa.cert0000644000175000017500000000017414010434640024027 0ustar wouterwouterDNSCiæ±hgÒ ¬>8÷®šUؼ˜‘yUþзqBQžS½´– K Üøì`ƒ®Ö!Xkʘ½Tà´)'9uÿ2˰D´eÆhˆ{Øs;Sd2^šá<CÍ+SÛAÿ2˰DY Ë Y Ë uÒωunbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.testns0000644000175000017500000000061614010434640027242 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA TC NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname TCP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 www IN A 10.20.30.41 www IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/1.key0000644000175000017500000000004014010434640022467 0ustar wouterwouter®öÝìK¬‡#‘€4ùsŽ pèÖôÁæÀx!¹»AŠ"mMunbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/2_salsa.cert0000644000175000017500000000017414010434640024030 0ustar wouterwouterDNSCAXÉóÉLI<-’]LU÷LYí6KÂ$D—&ìÜWeãé[4\’®¦`{}¡WÑä×Í|Ï* ¢$¯Ò[õóW¿½ZØÒxÌ÷­ãtŠ¢~˜ýÓz\m5þà4õóW¿½ZØÒY Ë Y Ë uÒωunbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre0000644000175000017500000000246014010434640026507 0ustar wouterwouter# #-- dnscrypt_cert_chacha.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # Check if we can run the test. . ./precheck.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) DNSCRYPT_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "DNSCRYPT_PORT=$DNSCRYPT_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnscrypt_cert_chacha.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' \ -e 's/@DNSCRYPT_PORT\@/'$DNSCRYPT_PORT'/' < dnscrypt_cert_chacha.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log if [ $xchacha20 -eq 0 ]; then # no xchacha20 support, we expect unbound to exit with an error message. wait_server_up unbound.log "Certificate for XChacha20 but libsodium does not support it" else wait_unbound_up unbound.log fi unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/2.cert0000644000175000017500000000017414010434640022645 0ustar wouterwouterDNSCÛ€Ü ±¼ ˜4ÕÒF8i¾bUbf³»a:®»Ÿ6Îú÷óòe⦡ú¸£wàxj†ƒh ÑR<àŽv¾RÁ§ g"ÎÒê|ÑêØùeE£p)4•±}0~6Žv¾RÁ§ gX.¢èX.¢èZÖhunbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/2_chacha.cert0000644000175000017500000000017414010434640024134 0ustar wouterwouterDNSC«6âÿ*ôL±g_tR—öR˲™ø‰"Š­|G/, ˜ ¬¸Ü`¯Ùÿ,¢²-dök0I[Íw)ÌB¡ õóW¿½ZØÒxÌ÷­ãtŠ¢~˜ýÓz\m5þà4öóW¿½ZØÒY ×8Y ×8uÒÛ¸unbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/2.key0000644000175000017500000000004014010434640022470 0ustar wouterwouterm7Ÿñâƒx;‘%׸õé*•ÜR¯äÓ¯¹mDªñunbound-1.13.1/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.conf0000644000175000017500000000112414010434640026642 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 port: @PORT@ interface: 0.0.0.0 interface: 0.0.0.0@@DNSCRYPT_PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnscrypt: dnscrypt-enable: yes dnscrypt-port: @DNSCRYPT_PORT@ dnscrypt-provider: 2.dnscrypt-cert.example.com. dnscrypt-secret-key: 1.key dnscrypt-secret-key: 2.key dnscrypt-provider-cert: 1_salsa.cert dnscrypt-provider-cert: 2_chacha.cert dnscrypt-provider-cert: 2_salsa.cert unbound-1.13.1/testdata/local_acl_override.rpl0000644000175000017500000000313614010434640021042 0ustar wouterwouter; config options server: local-zone: "1.example." transparent local-zone: "2.example." transparent access-control: 10.10.10.0/24 allow local-zone-override: "1.example." 10.10.10.20/32 refuse local-zone-override: "2.example." 10.10.10.30/32 refuse local-zone-override: "2.example." 10.10.10.40/32 always_nxdomain forward-zone: name: "example." forward-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test local data queries RANGE_BEGIN 0 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 1.example. IN TXT SECTION ANSWER 1.example. IN TXT "data 1" ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 2.example. IN TXT SECTION ANSWER 2.example. IN TXT "data 2" ENTRY_END RANGE_END STEP 1 QUERY ADDRESS 10.10.10.10 ENTRY_BEGIN REPLY RD SECTION QUESTION 1.example. IN TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION 1.example. IN TXT SECTION ANSWER 1.example. IN TXT "data 1" ENTRY_END STEP 3 QUERY ADDRESS 10.10.10.20 ENTRY_BEGIN SECTION QUESTION 1.example. IN TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA REFUSED SECTION QUESTION 1.example. IN TXT ENTRY_END STEP 5 QUERY ADDRESS 10.10.10.30 ENTRY_BEGIN SECTION QUESTION 2.example. IN TXT ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA REFUSED SECTION QUESTION 2.example. IN TXT ENTRY_END STEP 7 QUERY ADDRESS 10.10.10.40 ENTRY_BEGIN SECTION QUESTION 2.example. IN TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AA NXDOMAIN SECTION QUESTION 2.example. IN TXT ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ans_dsent.rpl0000644000175000017500000002073714010434640020060 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with empty nonterminals on the trust chain. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; responses to DS empty nonterminal queries. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION 194.example.com. IN DS SECTION AUTHORITY example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFCOn5qKBIV7bwFMBA+Qqiblx0cylAhUAoFiGtFm2wHhJpq9MooTYdeVw45s= ;{id = 2854} ; This NSEC proves the NOERROR/NODATA case. 194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC 194.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDcoKl74U9FjsuYF3Vc0E8GQ2GgzAhUAhlyhO2MMcAWQMxIhEZ4MguokN5g= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; this should be NOERROR. REPLY QR AA NOERROR SECTION QUESTION 0.194.example.com. IN DS SECTION AUTHORITY example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFCOn5qKBIV7bwFMBA+Qqiblx0cylAhUAoFiGtFm2wHhJpq9MooTYdeVw45s= ;{id = 2854} ; This NSEC proves the NOERROR/NODATA case. 194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC 194.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDcoKl74U9FjsuYF3Vc0E8GQ2GgzAhUAhlyhO2MMcAWQMxIhEZ4MguokN5g= ;{id = 2854} ENTRY_END ; response for delegation to sub zone. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION ANSWER SECTION AUTHORITY 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN DS 30899 RSASHA1 1 aa46f0717075d9750ac3596c659a2e326b33c28c 0.0.194.example.com. 3600 IN RRSIG DS 3 5 3600 20070926135752 20070829135752 2854 example.com. MCwCFC9GIqtp/103hktw6bPpD83gr+0iAhQ8yev2yUaR9l64rYBUYTJqOoTKdw== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub zone ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.0.194.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN DS 30899 RSASHA1 1 aa46f0717075d9750ac3596c659a2e326b33c28c 0.0.194.example.com. 3600 IN RRSIG DS 3 5 3600 20070926135752 20070829135752 2854 example.com. MCwCFC9GIqtp/103hktw6bPpD83gr+0iAhQ8yev2yUaR9l64rYBUYTJqOoTKdw== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. for zone 0.0.194.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.0.194.example.com. IN NS SECTION ANSWER 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20070926135752 20070829135752 30899 0.0.194.example.com. KXDA+/PJAE+dXhv6O6Z0ZovDwabSRJcIt+GT5AL6ewlj46hzo/SDKUtEhYCeT1IVQvYtXrESwFZjpp7N0rXXBg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to DNSKEY priming query ; 0.0.194.example.com. 3600 IN DS 30899 RSASHA1 1 aa46f0717075d9750ac3596c659a2e326b33c28c ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.0.194.example.com. IN DNSKEY SECTION ANSWER 0.0.194.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} 0.0.194.example.com. 3600 IN RRSIG DNSKEY 5 5 3600 20070926135752 20070829135752 30899 0.0.194.example.com. fSmc7ef6NwbDXC0o4wPc/aa8LakW5ZJwEZ4xPYl3tTZKmPNM7hPXskl1tFlvst9Va4u37F62v+16trprHb+SCQ== ;{id = 30899} SECTION AUTHORITY 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20070926135752 20070829135752 30899 0.0.194.example.com. KXDA+/PJAE+dXhv6O6Z0ZovDwabSRJcIt+GT5AL6ewlj46hzo/SDKUtEhYCeT1IVQvYtXrESwFZjpp7N0rXXBg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION ANSWER 328.0.0.194.example.com. IN A 11.11.11.11 328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20070926135752 20070829135752 30899 0.0.194.example.com. chZW77mqywhw/4ch6BxXQ4EbFgb9zgh2xF75FLlKq/7ey6CfHSJRpJRjRqtMTn+1i18UL2B4nPS/WnK5DZeqlA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION 328.0.0.194.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION ANSWER 328.0.0.194.example.com. 3600 IN A 11.11.11.11 328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20070926135752 20070829135752 30899 0.0.194.example.com. chZW77mqywhw/4ch6BxXQ4EbFgb9zgh2xF75FLlKq/7ey6CfHSJRpJRjRqtMTn+1i18UL2B4nPS/WnK5DZeqlA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+005+30899.ds0000644000175000017500000000011314010434640020424 0ustar wouterwouterexample.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512 unbound-1.13.1/testdata/val_nsec3_nods.rpl0000644000175000017500000001730014010434640020130 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 with no DS referral. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_dnsseclame_ds_ok.rpl0000644000175000017500000002366014010434640021556 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test dnssec-lame detection at ds point, which is ok. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY ; no NS set. not needed for this test. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ; fine DNSKEY response. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; correct delegation with DS ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; server is not DNSSEC lame. ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. C/0b+sqlsdSTkhd+aDXb6ELyuQreosIGBzLCtWxYGD+Q9QGB5rN8uB+4+48yhw36pd3MfeAn06AgAnJ6eu8tJg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_signatures.40000644000175000017500000000427614010434640020031 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; dnssec-keygen 9.4.2: /usr/sbin/dnssec-keygen -a DSA -b 768 -n ZONE nlnetlabs.nl ; Knlnetlabs.nl.+003+03793 ; private key file ; Private-key-format: v1.2 ; Algorithm: 3 (DSA) ; Prime(p): lHKDKRMhV1yBk/gXk3IL29jkPwWwOqEskebo/hC0ieobdQkeuf9B3AgzCdn2hQOWVGoIMWyxChhqHVLwnQzUGY/uAhTZgSXBG47eHZC+Pj1hgX9tkB+9kzoK5jKhstR9 ; Subprime(q): 6u+5FI/H5WmwyTPWB5K0LjegVb0= ; Base(g): hWj33Fnu7b9vhIriw6nXnJKpeus9pffjSaKzVJBNnlWTMXbo3+w3rObnJlbkVLfRsY4F8boWn1EbUUHCaRIW3bsqziE739S8HBJDDwxYx85n0xRqkg0djWoCG2e4uv4o ; Private_value(x): xSLjPW1PE6twDgObqfkUk6EXO+g= ; Public_value(y): ORFJhDQMHGQNdWXlh05vAJJ8Fqm6u+72qsIY2pnSgWL7vQIL6sKKJL14oIVJbsZW9FIjQCFpqe19leUdzUDQa9AxB8WSRAzmh4S6tWkmbAGpUjoAUJSLtqV1NgvH8ESg ; DSA key from bind tool 9.4.2 ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN DNSKEY SECTION ANSWER nlnetlabs.nl. IN DNSKEY 256 3 3 BOrvuRSPx+VpsMkz1geStC43oFW9lHKDKRMhV1yBk/gXk3IL29jkPwWw OqEskebo/hC0ieobdQkeuf9B3AgzCdn2hQOWVGoIMWyxChhqHVLwnQzU GY/uAhTZgSXBG47eHZC+Pj1hgX9tkB+9kzoK5jKhstR9hWj33Fnu7b9v hIriw6nXnJKpeus9pffjSaKzVJBNnlWTMXbo3+w3rObnJlbkVLfRsY4F 8boWn1EbUUHCaRIW3bsqziE739S8HBJDDwxYx85n0xRqkg0djWoCG2e4 uv4oORFJhDQMHGQNdWXlh05vAJJ8Fqm6u+72qsIY2pnSgWL7vQIL6sKK JL14oIVJbsZW9FIjQCFpqe19leUdzUDQa9AxB8WSRAzmh4S6tWkmbAGp UjoAUJSLtqV1NgvH8ESg ENTRY_END ; entry to test ; from ; /usr/sbin/dnssec-signzone nlnetlabs.nl ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN SOA SECTION ANSWER nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. ( 2008040100 28800 7200 604800 3600 ) nlnetlabs.nl. 10200 RRSIG SOA 3 2 10200 20080515133546 ( 20080415133546 3793 nlnetlabs.nl. BHMt1eWN8HzfFOqrqL1PrsED43JVCrybDYL1 GJXymKlkWRAjar0wT6o= ) ENTRY_END ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN NS SECTION ANSWER nlnetlabs.nl. 10200 NS omval.tednet.nl. nlnetlabs.nl. 10200 NS ns7.domain-registry.nl. nlnetlabs.nl. 10200 NS open.nlnetlabs.nl. nlnetlabs.nl. 10200 RRSIG NS 3 2 10200 20080515133546 ( 20080415133546 3793 nlnetlabs.nl. BJZaThgkBaF3k6t2q+tr0ngKcF2EntSOn9gX Ut9Xipj3CdioZl8b0cY= ) ENTRY_END unbound-1.13.1/testdata/doh_downstream_notls.tdir/0000755000175000017500000000000014010434640021705 5ustar wouterwouterunbound-1.13.1/testdata/doh_downstream_notls.tdir/doh_downstream_notls.conf0000644000175000017500000000123414010434640027010 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1@@PORT@ https-port: @PORT@ tls-service-key: "unbound_server.key" tls-service-pem: "unbound_server.pem" use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no http-query-buffer-size: 1G http-response-buffer-size: 1G http-max-streams: 200 http-notls-downstream: yes local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" local-zone: "drop.net" deny tcp-upstream: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/doh_downstream_notls.tdir/unbound_server.key0000644000175000017500000000156714010434640025470 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA 3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS 6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP 0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/doh_downstream_notls.tdir/unbound_server.pem0000644000175000017500000000115314010434640025450 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== -----END CERTIFICATE----- unbound-1.13.1/testdata/doh_downstream_notls.tdir/doh_downstream_notls.pre0000644000175000017500000000202414010434640026647 0ustar wouterwouter# #-- doh_downstream_notls.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT doh_downstream_notls.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < doh_downstream_notls.conf > ub.conf # start unbound in the background $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/doh_downstream_notls.tdir/doh_downstream_notls.dsc0000644000175000017500000000051514010434640026635 0ustar wouterwouterBaseName: doh_downstream_notls Version: 1.0 Description: Test DNS-over-HTTP query processing with no-tls CreationDate: Mon Jun 12 12:00:00 CET 2020 Maintainer: Category: Component: CmdDepends: Depends: Help: Pre: doh_downstream_notls.pre Post: doh_downstream_notls.post Test: doh_downstream_notls.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/doh_downstream_notls.tdir/doh_downstream_notls.test0000644000175000017500000002351414010434640027047 0ustar wouterwouter# #-- doh_downstream_notls.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) # this test query should just work (server is up) echo "> query www1.example.net." $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # multiple requests (from localdata) echo "> query www1.example.net. www2.example.net. www3.example.net." $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net." $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.com" outfile | grep "10.20.30.42"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net." $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www3.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.com" outfile | grep "10.20.30.43"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query www4.example.com. www3.example.net." $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www4.example.com" outfile | grep "10.20.30.44"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query a1.example.com. - a90.example.com." $PRE/dohclient -n -s 127.0.0.1 -p $UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi num_ans=$(grep -B 3 "a.example.com. IN A" outfile | grep "rcode: NOERROR" | wc -l ) if test "$num_ans" -ne 90; then echo "number of answers not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/doh_downstream_notls.tdir/doh_downstream_notls.post0000644000175000017500000000067314010434640027056 0ustar wouterwouter# #-- doh_downstream_notls.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/doh_downstream_notls.tdir/doh_downstream_notls.testns0000644000175000017500000000233614010434640027407 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END ; lots of noerror/nodata answers for other queries (a.. queries) ENTRY_BEGIN MATCH opcode qtype subdomain REPLY QR AA NOERROR ADJUST copy_id copy_query SECTION QUESTION a.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600 ENTRY_END unbound-1.13.1/testdata/ttl_min.rpl0000644000175000017500000000750014010434640016677 0ustar wouterwouter; config options server: access-control: 127.0.0.1 allow_snoop cache-min-ttl: 10 qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test TTL min option for messages in the cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 5 IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 ENTRY_END RANGE_END ; start by passing time ; so we are not at 0 STEP 1 TIME_PASSES ELAPSE 10 ; query for the record STEP 8 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA CD SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 10 IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; wait for 7 seconds STEP 20 TIME_PASSES ELAPSE 7 ; do a lookup to check TTLs. STEP 25 QUERY ENTRY_BEGIN REPLY SECTION QUESTION www.example.com. IN A ENTRY_END STEP 26 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3593 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3593 IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_lame_noaa.rpl0000644000175000017500000001010314010434640020161 0ustar wouterwouter; config options server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test lame detection if AA bit is omitted ; the query is answered with a reply that has ; no AA bit ; no SOA record ; noanswer/noerror ; NS record in there which is not a down delegation (==). ; the query is not sent to a forward zone STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; root prime is sent STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION . IN NS ENTRY_END STEP 30 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; query sent to root server STEP 40 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 50 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; query sent to .com server STEP 60 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; answer the NS queries that have been generated ; STEP 62 CHECK_OUT_QUERY ; ENTRY_BEGIN ; MATCH qname qtype opcode ; SECTION QUESTION ; com. IN NS ; ENTRY_END ; ; STEP 63 REPLY ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; com. IN NS ; SECTION ANSWER ; com. IN NS a.gtld-servers.net. ; SECTION ADDITIONAL ; a.gtld-servers.net. IN A 192.5.6.30 ; ENTRY_END STEP 70 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns2.example.com. IN A 168.192.3.3 ENTRY_END ; no matter which one the iterator tries first, we present it as 'lame' ; query to ns1.example.com or ns2.example.com. STEP 80 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; STEP 82 CHECK_OUT_QUERY ; ENTRY_BEGIN ; MATCH qname qtype opcode ; SECTION QUESTION ; example.com. IN NS ; ENTRY_END ; ; STEP 83 REPLY ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; example.com. IN NS ns2.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ns2.example.com. IN A 168.192.3.3 ; ENTRY_END ; STEP 90 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY ; This is the BROKEN ANSWER here. ; it is lame. A delegation to example.com. itself. example.com. IN NS ns1.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns2.example.com. IN A 168.192.3.3 ENTRY_END ; iterator should try again and ask the other nameserver. STEP 100 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 110 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns2.example.com. IN A 168.192.3.3 ENTRY_END ; is the final answer correct? STEP 200 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns2.example.com. IN A 168.192.3.3 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_wild_pos.rpl0000644000175000017500000001212714010434640017714 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with direct wildcard positive response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION *.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION *.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION *.example.com. IN A SECTION ANSWER *.example.com. IN A 10.20.30.40 *.example.com. 3600 IN RRSIG A 3 2 3600 20070926134150 20070829134150 2854 example.com. AG3iIIzflgRHsIlOKiSHADHIn/NmfNgESAslc1wIjxys5r9w4CxNIGs= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION *.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION *.example.com. IN A SECTION ANSWER *.example.com. IN A 10.20.30.40 *.example.com. 3600 IN RRSIG A 3 2 3600 20070926134150 20070829134150 2854 example.com. AG3iIIzflgRHsIlOKiSHADHIn/NmfNgESAslc1wIjxys5r9w4CxNIGs= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nodatawc_badce.rpl0000644000175000017500000001103614010434640021010 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard nodata, bad closest encloser ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; wildcard is *.com, *.com. IN NSEC com. RRSIG NSEC *.com. 3600 IN RRSIG NSEC 3 1 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCdZKVAPYKe6WhoeuK4+J2hd3F2DgIUXv9Dif1uZsSjboLYVx7Wp0DEg78= ;{id = 2854} ; this NSEC denies original query name from a different zone ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCfm3mQakqw9pd8SluduiMXYYc+/wIULqIBxw1bK8QEwCrd8E6T50P4BEw= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametodname.rpl0000644000175000017500000001677214010434640020541 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a cname to a dname ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN DNAME SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN DNAME SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN DNAME SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN DNAME SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN DNAME SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN DNAME SECTION ANSWER www.example.net. IN DNAME blarg.com. www.example.net. 3600 IN RRSIG DNAME RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. ByevtOI1ChCDb8CD8Qvu2pNcooUWN4LkNXQj0vzSLp62rCltiWWTg8iU6DiojeOx2inVqx+PZXyiX1nX80kCgg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN DNAME ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN DNAME SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} www.example.net. IN DNAME blarg.com. www.example.net. 3600 IN RRSIG DNAME RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. ByevtOI1ChCDb8CD8Qvu2pNcooUWN4LkNXQj0vzSLp62rCltiWWTg8iU6DiojeOx2inVqx+PZXyiX1nX80kCgg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b3_optout_nonc.rpl0000644000175000017500000001464214010434640022126 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.3 optout unsigned, without nc. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION c.example. IN DS SECTION AUTHORITY ;; NSEC3 RR that covers the "next closer" name (c.example) ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck ;35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) ;35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ;; NSEC3 RR that matches the closest encloser (example) ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA DO NOERROR SECTION QUESTION c.example. IN MX SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. ;; NSEC3 RR that covers the "next closer" name (c.example) ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck ; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) ; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ;; NSEC3 RR that matches the closest encloser (example) ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END ; ns1.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns1.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns2.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END ; ns2.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns1.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns2.c.example. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mc.c.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION mc.c.example. IN MX ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_capsid_fallback.tdir/0000755000175000017500000000000014010434640021373 5ustar wouterwouterunbound-1.13.1/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.post0000644000175000017500000000046414010434640026230 0ustar wouterwouter# #-- fwd_capsid_fallback.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.conf0000644000175000017500000000041514010434640026164 0ustar wouterwouterserver: verbosity: 4 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no use-caps-for-id: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.testns0000644000175000017500000000050514010434640026557 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION ; WEIRD CAPS! ; probably not the query! WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A SECTION ANSWER wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.dsc0000644000175000017500000000051614010434640026012 0ustar wouterwouterBaseName: fwd_capsid_fallback Version: 1.0 Description: Forward and do 0x20 fallback. CreationDate: Mon Oct 6 16:30:15 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_capsid_fallback.pre Post: fwd_capsid_fallback.post Test: fwd_capsid_fallback.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.test0000644000175000017500000000103514010434640026215 0ustar wouterwouter# #-- fwd_capsid_fallback.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT wwwabcdefghijklmnopqrstuvwxyzwww.example.com | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.pre0000644000175000017500000000163714010434640026034 0ustar wouterwouter# #-- fwd_capsid_fallback.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_capsid_fallback.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_capsid_fallback.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/test_packets.50000644000175000017500000000446714010434640017302 0ustar wouterwouter; Hand made test packets. ; By Wouter Wijngaards. ; These DNS packets contain interesting compression cases. ; ;-- next packet -- ; 0. A valid packet (handmade) ; id flags qd an ns ar -- header 4242 0000 0001 0001 0000 0000 ; query: qname example.com. qtype A(1) qclass IN(1) 07 6578616d706c65 03 636f6d 00 0001 0001 ; answer: example.com type class ttl rdatalen 10.x address. 07 6578616d706c65 03 636f6d 00 0001 0001 00000101 0004 0a203040 ;-- next packet -- ; 0b. correct compression from answer to query. 4242 0000 0001 0001 0000 0000 07 6578616d706c65 03 636f6d 00 0001 0001 c00c 0001 0001 00000101 0004 0a203040 ;-- next packet -- ; 1. Compression from query to answer. 4242 0000 0001 0001 0000 0000 c012 0001 0001 07 6578616d706c65 03 636f6d 00 0001 0001 00000101 0004 0a203040 ;-- next packet -- ; 2. Compression loop answer 1 to answer 2. 4242 0000 0001 0002 0000 0000 07 6578616d706c65 03 636f6d 00 0001 0001 c02d 0001 0001 00000101 0004 0a203040 07 6578616d706c65 03 636f6d 00 0001 0001 00000101 0004 0a203050 ;-- next packet -- ; 2b. Compression loop answer 2 to answer 1. 4242 0000 0001 0002 0000 0000 07 6578616d706c65 03 636f6d 00 0001 0001 07 6578616d706c65 03 636f6d 00 0001 0001 00000101 0004 0a203050 c01d 0001 0001 00000101 0004 0a203040 ;-- next packet -- ; 3. Compression loop to self (in answer section). 4242 0000 0001 0001 0000 0000 07 6578616d706c65 03 636f6d 00 0001 0001 c01d 0001 0001 00000101 0004 0a203040 ;-- next packet -- ; 4. bad compression pointer - to header. 4242 0000 0001 0001 0000 0000 07 6578616d706c65 03 636f6d 00 0001 0001 c004 0001 0001 00000101 0004 0a203040 ;-- next packet -- ; 5. bad compression pointer - exceeds packet. 4242 0000 0001 0001 0000 0000 07 6578616d706c65 03 636f6d 00 0001 0001 c0bb 0001 0001 00000101 0004 0a203040 ;-- next packet -- ; 6. double OPT record. ; id flags qd an ns ar -- header 4242 0000 0001 0001 0000 0002 ; query: qname example.com. qtype A(1) qclass IN(1) 07 6578616d706c65 03 636f6d 00 0001 0001 ; answer: example.com type class ttl rdatalen 10.x address. 07 6578616d706c65 03 636f6d 00 0001 0001 00000101 0004 0a203040 ; additional: . OPT 4096 00 0029 1000 00000000 0000 ; additional: . OPT 4096 00 0029 1000 00000001 0000 unbound-1.13.1/testdata/trust_cname_chain.rpl0000644000175000017500000000572514010434640020726 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test trust in cname chain answer ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME xxx.example.com. xxx.example.com. IN CNAME yyy.example.com. yyy.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION xxx.example.com. IN A SECTION ANSWER xxx.example.com. IN CNAME yyy.example.com. yyy.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION yyy.example.com. IN A SECTION ANSWER yyy.example.com. IN A 10.20.30.42 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; This stores it into cache. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME xxx.example.com. xxx.example.com. IN CNAME yyy.example.com. ;;; did not trust the remainder of the CNAME chain! yyy.example.com. IN A 10.20.30.42 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_got6only.rpl0000644000175000017500000000463014010434640020036 0ustar wouterwouter; config options server: do-ip6: no target-fetch-policy: "0 0 0 0 0 " qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator when only ip6 in dp but doip6 is no ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.bla.com. SECTION ADDITIONAL ; not included ;ns.bla.com. IN A 1.2.3.4 ; and this one is useless because do-ip6 is "no" ns.bla.com. IN AAAA ::53 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.bla.com. IN A SECTION ANSWER ns.bla.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+003+02854.private0000644000175000017500000000066414010434640021467 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 3 (DSA) Prime(p): +sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKQ== Subprime(q): tctSxapStjclgRHdPhMEkgizvSM= Base(g): LGE7N8tUTWCoDQ/B5lHx21jdo1BJGfew+nAmvoyL8+pAoAwytn1yQml/X5tAw46/GDPPZTUZLXxvfJkpyBMwRg== Private_value(x): XMs4XYi1oNckzTPvGMkgG5IiuzY= Public_value(y): ic3fxmWM4vwTdg80NDLK0sGF37DSxTgW7PDyTFuC2CMXnjnuq1IJFjhewgvQ4f3XbkNUK7CYZmQBBX3egcmFfg== unbound-1.13.1/testdata/stream_ssl.tdir/0000755000175000017500000000000014010434640017625 5ustar wouterwouterunbound-1.13.1/testdata/stream_ssl.tdir/stream_ssl.post0000644000175000017500000000053714010434640022715 0ustar wouterwouter# #-- stream_ssl.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $UNBOUNDSERV_PID kill_pid $UNBOUNDCLIE_PID cat unboundserv.log cat unboundclie.log unbound-1.13.1/testdata/stream_ssl.tdir/stream_ssl.test0000644000175000017500000000301114010434640022675 0ustar wouterwouter# #-- stream_ssl.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # first test streamtcp against the server unbound. echo "> streamtcp -s www.example.com A IN" $PRE/streamtcp -s -f 127.0.0.1@$SERV_PORT www.example.com. A IN >outfile 2>outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr echo "SSLSERVICE" cat unboundserv.log echo "SSLCLIENT" cat unboundclie.log echo "Not OK" exit 1 else echo "exit status OK" fi echo "> cat logfiles" cat outfile cat outerr echo "SSLSERVICE" cat unboundserv.log echo "SSLCLIENT" cat unboundclie.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi rm -f outfile # test client unbound (no SSL towards it, but it does SSL to the SSL service) echo "> dig www.example.com A IN" dig @127.0.0.1 -p $CLIE_PORT www.example.com. >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile echo "SSLSERVICE" cat unboundserv.log echo "SSLCLIENT" cat unboundclie.log echo "Not OK" exit 1 else echo "exit status OK" fi echo "> cat logfiles" cat outfile echo "SSLSERVICE" cat unboundserv.log echo "SSLCLIENT" cat unboundclie.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/stream_ssl.tdir/unbound_server.key0000644000175000017500000000463314010434640023405 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/stream_ssl.tdir/ticket1.dat0000644000175000017500000000012014010434640021654 0ustar wouterwouterXÁ„d¨,f}¼Œš;òJ‚qéÌŒÍ ¨ñs%Ã[)œMÎï½éo“Á¶@ðÓÙ5n_wÛ¿ô›ÃÃÅI¢KæâCºšÓúÊè"unbound-1.13.1/testdata/stream_ssl.tdir/ticket2.dat0000644000175000017500000000012014010434640021655 0ustar wouterwouters×ß¶|ÜNü*Ô2a{IiÒ6ù™'õÐÝ ²Äi9I½ÛÅ+ȵj"WzëÙ)s0“ˆ÷ÔD%õh ³H€“O£é…´K©ëò @unbound-1.13.1/testdata/stream_ssl.tdir/unbound_server.pem0000644000175000017500000000246614010434640023400 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/stream_ssl.tdir/unbound_control.pem0000644000175000017500000000247614010434640023553 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/stream_ssl.tdir/stream_ssl.clie.conf0000644000175000017500000000050214010434640023560 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @CLIEPORT@ use-syslog: no directory: . pidfile: "unbound-clie.pid" chroot: "" username: "" do-not-query-localhost: no ssl-upstream: yes tls-cert-bundle: unbound_server.pem forward-zone: name: "." forward-addr: "127.0.0.1@@SERVPORT@#unbound" unbound-1.13.1/testdata/stream_ssl.tdir/stream_ssl.pre0000644000175000017500000000203414010434640022510 0ustar wouterwouter# #-- stream_ssl.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 SERV_PORT=$RND_PORT CLIE_PORT=$(($RND_PORT + 1)) echo "SERV_PORT=$SERV_PORT" >> .tpkg.var.test echo "CLIE_PORT=$CLIE_PORT" >> .tpkg.var.test # make config files sed -e 's/@SERVPORT\@/'$SERV_PORT'/' -e 's/@CLIEPORT\@/'$CLIE_PORT'/' < stream_ssl.serv.conf > ubserv.conf sed -e 's/@SERVPORT\@/'$SERV_PORT'/' -e 's/@CLIEPORT\@/'$CLIE_PORT'/' < stream_ssl.clie.conf > ubclie.conf # start unbound in the background PRE="../.." $PRE/unbound -d -v -v -v -v -c ubserv.conf >unboundserv.log 2>&1 & UNBOUNDSERV_PID=$! echo "UNBOUNDSERV_PID=$UNBOUNDSERV_PID" >> .tpkg.var.test $PRE/unbound -d -v -v -v -v -c ubclie.conf >unboundclie.log 2>&1 & UNBOUNDCLIE_PID=$! echo "UNBOUNDCLIE_PID=$UNBOUNDCLIE_PID" >> .tpkg.var.test cat .tpkg.var.test wait_unbound_up unboundserv.log wait_unbound_up unboundclie.log unbound-1.13.1/testdata/stream_ssl.tdir/stream_ssl.serv.conf0000644000175000017500000000100114010434640023616 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @SERVPORT@ use-syslog: no directory: . pidfile: "unbound-serv.pid" chroot: "" username: "" do-not-query-localhost: yes local-data: "www.example.com. IN A 10.20.30.40" ssl-port: @SERVPORT@ ssl-service-key: "unbound_server.key" ssl-service-pem: "unbound_server.pem" tls-session-ticket-keys: "ticket1.dat" tls-session-ticket-keys: "ticket2.dat" # no other queries should reach here. forward-zone: name: "." forward-addr: "127.0.0.1" unbound-1.13.1/testdata/stream_ssl.tdir/stream_ssl.dsc0000644000175000017500000000045414010434640022477 0ustar wouterwouterBaseName: stream_ssl Version: 1.0 Description: Stream queries over SSL channel. CreationDate: Wed Nov 9 14:02:31 CET 2011 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: stream_ssl.pre Post: stream_ssl.post Test: stream_ssl.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/stream_ssl.tdir/unbound_control.key0000644000175000017500000000462714010434640023562 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/val_positive_nosigs.rpl0000644000175000017500000001173014010434640021317 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with positive response, signatures removed. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; barely valid nodata for AAAA ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DS query for subzone ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN DS SECTION ANSWER ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_fwdstubroot.rpl0000644000175000017500000000624414010434640020642 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. forward-zone: name: "." forward-addr: 10.0.0.1 stub-zone: name: "sub.example.com" stub-addr: 10.0.0.2 CONFIG_END SCENARIO_BEGIN Test iterative resolve with a stub under a forward root zone ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ; No answers from the actual root, blocked. RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; forwarder for example.com. RANGE_BEGIN 0 100 ADDRESS 10.0.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.0.0.4 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; fail all other queries ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.com. IN A ENTRY_END RANGE_END ; stub for sub.example.com. RANGE_BEGIN 0 100 ADDRESS 10.0.0.2 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.0.0.5 SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; try to resolve from stub zone STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.sub.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.0.0.5 SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.44 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_tcp.tdir/0000755000175000017500000000000014010434640017077 5ustar wouterwouterunbound-1.13.1/testdata/fwd_tcp.tdir/fwd_tcp.testns0000644000175000017500000000031414010434640021765 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_tcp.tdir/fwd_tcp.post0000644000175000017500000000045014010434640021433 0ustar wouterwouter# #-- fwd_tcp.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_tcp.tdir/fwd_tcp.dsc0000644000175000017500000000044614010434640021224 0ustar wouterwouterBaseName: fwd_tcp Version: 1.0 Description: Forward a TCP packet and return reply. CreationDate: Thu Feb 8 12:57:38 CET 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_tcp.pre Post: fwd_tcp.post Test: fwd_tcp.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_tcp.tdir/fwd_tcp.pre0000644000175000017500000000157414010434640021244 0ustar wouterwouter# #-- fwd_tcp.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_tcp.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_tcp.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_tcp.tdir/fwd_tcp.test0000644000175000017500000000077114010434640021433 0ustar wouterwouter# #-- fwd_tcp.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost +vc -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_tcp.tdir/fwd_tcp.conf0000644000175000017500000000036514010434640021400 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/val_any_dname.rpl0000644000175000017500000002726614010434640020041 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with response to qtype ANY that includes DNAME ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN ANY SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN ANY SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN ANY SECTION ANSWER example.com. 86400 IN SOA open.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 86400 IN RRSIG SOA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCSs8KJepwaIp5vu++/0hk04lkXvgIUdphJSAE/MYob30WcRei9/nL49tE= ;{id = 2854} example.com. 3600 IN DNAME example.net. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCdje5lZfq9kENX9a8lOOKn79BRlQIUbVCx/fXo0kfvAgC5kB8Dvd5LodQ= ;{id = 2854} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHq7BNVAeLW+Uw/rkjVS08lrMDk/AhR+bvChHfiE4jLb6uoyE54/irCuqA== ;{id = 2854} example.com. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.example.com. example.com. 600 IN RRSIG NAPTR 3 2 600 20070926134150 20070829134150 2854 example.com. MC0CFE8qs66bzuOyKmTIacamrmqabMRzAhUAn0MujX1LB0UpTHuLMgdgMgJJlq4= ;{id = 2854} example.com. 86400 IN AAAA 2001:7b8:206:1::1 example.com. 86400 IN RRSIG AAAA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFEqS4WHyqhUkv7t42TsBZJk/Q9paAhUAtTZ8GaXGpot0PmsM0oGzQU+2iw4= ;{id = 2854} example.com. 86400 IN TXT "Stichting NLnet Labs" example.com. 86400 IN RRSIG TXT 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH3otn2u8zXczBS8L0VKpyAYZGSkAhQLGaQclkzMAzlB5j73opFjdkh8TA== ;{id = 2854} example.com. 86400 IN MX 100 v.net.example. example.com. 86400 IN MX 50 open.example.com. example.com. 86400 IN RRSIG MX 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFEKh3jeqh69zcOqWWv3GNKlMECPyAhR9HJkcPLqlyVWUccWDFJfGGcQfdg== ;{id = 2854} example.com. 86400 IN NS v.net.example. example.com. 86400 IN NS open.example.com. example.com. 86400 IN NS ns7.domain-registry.example. example.com. 86400 IN RRSIG NS 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCaRn30X4neKW7KYoTa2kcsoOLgfgIURvKEyDczLypWlx99KpxzMxRYhEc= ;{id = 2854} example.com. 86400 IN A 213.154.224.1 example.com. 86400 IN RRSIG A 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH8kSLxmRTwzlGDxvF1e4y/gM+5dAhQkzyQ2a6Gf+CMaHzVScaUvTt9HhQ== ;{id = 2854} example.com. 18000 IN NSEC _sip._udp.example.com. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY example.com. 18000 IN RRSIG NSEC 3 2 18000 20070926134150 20070829134150 2854 example.com. MCwCFBzOGtpgq4uJ2jeuLPYl2HowIRzDAhQVXNz1haQ1mI7z9lt5gcvWW+lFhA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ns7.domain-registry.example. 80173 IN A 62.4.86.230 open.example.com. 600 IN A 213.154.224.1 open.example.com. 600 IN AAAA 2001:7b8:206:1::53 open.example.com. 600 IN AAAA 2001:7b8:206:1::1 v.net.example. 28800 IN A 213.154.224.17 v.net.example. 28800 IN AAAA 2001:7b8:206:1:200:39ff:fe59:b187 johnny.example.com. 600 IN A 213.154.224.44 open.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCh8bja923UJmg1+sYXMK8WIE4dpgIUQe9sZa0GOcUYSgb2rXoogF8af+Y= ;{id = 2854} open.example.com. 600 IN RRSIG AAAA 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCRGJgIS6kEVG7aJfovuG/q3cgOWwIUYEIFCnfRQlMIYWF7BKMQoMbdkE0= ;{id = 2854} johnny.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MCwCFAh0/zSpCd/9eMNz7AyfnuGQFD1ZAhQEpNFNw4XByNEcbi/vsVeii9kp7g== ;{id = 2854} _sip._udp.example.com. 600 IN RRSIG SRV 3 4 600 20070926134150 20070829134150 2854 example.com. MCwCFFSRVgOcq1ihVuO6MhCuzWs6SxpVAhRPHHCKy0JxymVkYeFOxTkbVSWMMw== ;{id = 2854} _sip._udp.example.com. 600 IN SRV 0 0 5060 johnny.example.com. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN MATCH TCP REPLY RD DO SECTION QUESTION example.com. IN ANY ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION example.com. IN ANY SECTION ANSWER example.com. 86400 IN SOA open.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 86400 IN RRSIG SOA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCSs8KJepwaIp5vu++/0hk04lkXvgIUdphJSAE/MYob30WcRei9/nL49tE= ;{id = 2854} example.com. 3600 IN DNAME example.net. example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCdje5lZfq9kENX9a8lOOKn79BRlQIUbVCx/fXo0kfvAgC5kB8Dvd5LodQ= ;{id = 2854} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHq7BNVAeLW+Uw/rkjVS08lrMDk/AhR+bvChHfiE4jLb6uoyE54/irCuqA== ;{id = 2854} example.com. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.example.com. example.com. 600 IN RRSIG NAPTR 3 2 600 20070926134150 20070829134150 2854 example.com. MC0CFE8qs66bzuOyKmTIacamrmqabMRzAhUAn0MujX1LB0UpTHuLMgdgMgJJlq4= ;{id = 2854} example.com. 86400 IN AAAA 2001:7b8:206:1::1 example.com. 86400 IN RRSIG AAAA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFEqS4WHyqhUkv7t42TsBZJk/Q9paAhUAtTZ8GaXGpot0PmsM0oGzQU+2iw4= ;{id = 2854} example.com. 86400 IN TXT "Stichting NLnet Labs" example.com. 86400 IN RRSIG TXT 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH3otn2u8zXczBS8L0VKpyAYZGSkAhQLGaQclkzMAzlB5j73opFjdkh8TA== ;{id = 2854} example.com. 86400 IN MX 100 v.net.example. example.com. 86400 IN MX 50 open.example.com. example.com. 86400 IN RRSIG MX 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFEKh3jeqh69zcOqWWv3GNKlMECPyAhR9HJkcPLqlyVWUccWDFJfGGcQfdg== ;{id = 2854} example.com. 86400 IN NS v.net.example. example.com. 86400 IN NS open.example.com. example.com. 86400 IN NS ns7.domain-registry.example. example.com. 86400 IN RRSIG NS 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCaRn30X4neKW7KYoTa2kcsoOLgfgIURvKEyDczLypWlx99KpxzMxRYhEc= ;{id = 2854} example.com. 86400 IN A 213.154.224.1 example.com. 86400 IN RRSIG A 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH8kSLxmRTwzlGDxvF1e4y/gM+5dAhQkzyQ2a6Gf+CMaHzVScaUvTt9HhQ== ;{id = 2854} example.com. 18000 IN NSEC _sip._udp.example.com. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY example.com. 18000 IN RRSIG NSEC 3 2 18000 20070926134150 20070829134150 2854 example.com. MCwCFBzOGtpgq4uJ2jeuLPYl2HowIRzDAhQVXNz1haQ1mI7z9lt5gcvWW+lFhA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL open.example.com. 600 IN A 213.154.224.1 open.example.com. 600 IN AAAA 2001:7b8:206:1::53 open.example.com. 600 IN AAAA 2001:7b8:206:1::1 _sip._udp.example.com. 600 IN SRV 0 0 5060 johnny.example.com. open.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCh8bja923UJmg1+sYXMK8WIE4dpgIUQe9sZa0GOcUYSgb2rXoogF8af+Y= ;{id = 2854} open.example.com. 600 IN RRSIG AAAA 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCRGJgIS6kEVG7aJfovuG/q3cgOWwIUYEIFCnfRQlMIYWF7BKMQoMbdkE0= ;{id = 2854} _sip._udp.example.com. 600 IN RRSIG SRV 3 4 600 20070926134150 20070829134150 2854 example.com. MCwCFFSRVgOcq1ihVuO6MhCuzWs6SxpVAhRPHHCKy0JxymVkYeFOxTkbVSWMMw== ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/edns_keepalive.rpl0000644000175000017500000000642714010434640020216 0ustar wouterwouterserver: verbosity: 3 edns-tcp-keepalive: yes edns-tcp-keepalive-timeout: 30000 # Hardwired to this in fake_event.c stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN TCP Keepalive RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END ;; ---------------------------------------- STEP 1 QUERY ENTRY_BEGIN MATCH TCP ednsdata REPLY RD SECTION QUESTION www.example.com. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 0b ; Opcode 11 00 02 ; Length 2 00 ff ; Timeout HEX_EDNSDATA_END ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH TCP ednsdata REPLY RD FORMERR SECTION QUESTION www.example.com. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; Empty HEX_EDNSDATA_END ENTRY_END STEP 20 QUERY ENTRY_BEGIN MATCH TCP ednsdata REPLY RD SECTION QUESTION . IN NS SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 0b ; Opcode 11 00 00 ; Length 0 HEX_EDNSDATA_END ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH TCP ednsdata REPLY QR RD RA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 0b ; Opcode 11 00 02 ; Length 2 01 2c ; 30s = 300 10th secs HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; Check that a subsequent query on the connection without keepalive will ; generate a keepalive reply because we've already seen one. STEP 40 QUERY ENTRY_BEGIN MATCH TCP ednsdata REPLY RD SECTION QUESTION . IN NS SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; Empty HEX_EDNSDATA_END ENTRY_END STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH TCP ednsdata REPLY QR RD RA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 0b ; Opcode 11 00 02 ; Length 2 01 2c ; 30s = 300 10th secs HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_optout_cache.rpl0000644000175000017500000002254414010434640021650 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 span change and cache effects. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ; blacklisted address to stop it from using it, the negative answer uses its ; nsec3-hash which is alittle inconvenient ; ns.example.com. -> 7l9dbddmge35f7vr9mec78dqr6l3236k. ns.example.com. IN AAAA ::1 ns.example.com. 3600 IN RRSIG AAAA 3 3 3600 20070926135752 20070829135752 2854 example.com. AExGBc6JU/xwwoSIeK/DtX8kr7AgOecx5Z2FnRiz/YSpnWGnFDt26ec= ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; DS query ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY example.com. IN SOA a. b. 1 2 3 4 5 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. AAkQt1yoMF7s4gCYlojFzi0ubw6Uo4uWPSJTz6Dp/2iWUVDbxDKpy+E= ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; proof that there is no DS here. ; ce: b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig53sqh NS SOA DNSKEY NSEC3PARAM RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AKHQ0gnNP5WDab1yqbd+Bt12CSSff88sqeDR40dvhiWOcYA8mmyjYNA= ; span around sub.example.com., same span as foo.example.com, but it has ; just changed and it is now larger to accomodate sub.example.com. 6obgmo062d9935unjnnj2su5otaj9334.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 9r1f0ieoutlnjc03meng9e3bn2n0o9pd NS DS RRSIG 6obgmo062d9935unjnnj2su5otaj9334.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. ABzruSKUUcJRNlYDqZ4UmQH/WnzeXt9Gozp3chS4cR0sqsEeGjL54eQ= ; span around sub.example.com. from previous delegation in nsec3-chain ;7r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 9r1f0ieoutlnjc03meng9e3bn2n0o9pd NS DS RRSIG ;7r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AF2FOKiIfOV9KrDTuP4RwnDI6lZnmhRHE+HAh8UHEq87uakYUEHfGUY= ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; proof that there is no DS here. ; ce: b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig53sqh NS SOA DNSKEY NSEC3PARAM RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AKHQ0gnNP5WDab1yqbd+Bt12CSSff88sqeDR40dvhiWOcYA8mmyjYNA= ; span around sub.example.com., same span as foo.example.com, but it has ; just changed and it is now larger to accomodate sub.example.com. 6obgmo062d9935unjnnj2su5otaj9334.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 9r1f0ieoutlnjc03meng9e3bn2n0o9pd NS DS RRSIG 6obgmo062d9935unjnnj2su5otaj9334.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. ABzruSKUUcJRNlYDqZ4UmQH/WnzeXt9Gozp3chS4cR0sqsEeGjL54eQ= ; span around sub.example.com. from previous delegation in nsec3-chain ;7r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 9r1f0ieoutlnjc03meng9e3bn2n0o9pd NS DS RRSIG ;7r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AF2FOKiIfOV9KrDTuP4RwnDI6lZnmhRHE+HAh8UHEq87uakYUEHfGUY= SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION foo.example.com. IN A SECTION AUTHORITY foo.example.com. IN NS ns.sub.example.com. ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. ; foo.example.com. -> 7obgmo062d9935unjnnj2su5otaj9334. ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. ; proof that there is no DS here. ; ce: b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig53sqh NS SOA DNSKEY NSEC3PARAM RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. AKHQ0gnNP5WDab1yqbd+Bt12CSSff88sqeDR40dvhiWOcYA8mmyjYNA= ; span around sub.example.com. from previous delegation in nsec3-chain ; note it does not cover sub.example.com. 6obgmo062d9935unjnnj2su5otaj9334.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 7r1f0ieoutlnjc03meng9e3bn2n0o9pd NS DS RRSIG 6obgmo062d9935unjnnj2su5otaj9334.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. ABQZ49PmeXGxUmMebbKcYI/Y3mhMdlHmshohKTbGhEsNF11OjPYmr9c= SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN NS SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.foo.example.com. IN A SECTION ANSWER www.foo.example.com. IN A 1.2.3.124 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.foo.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.foo.example.com. IN A SECTION ANSWER www.foo.example.com. IN A 1.2.3.124 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/rpz_qname.rpl0000644000175000017500000001160414010434640017225 0ustar wouterwouter; config options server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no rpz: name: "rpz.example.com." zonefile: TEMPFILE_NAME rpz.example.com TEMPFILE_CONTENTS rpz.example.com $ORIGIN example.com. rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.rpz.example.com. 3600 IN NS ns2.rpz.example.com. $ORIGIN rpz.example.com. a CNAME . a CNAME *. ; duplicate CNAME here on purpose *.a TXT "wildcard local data" b.a CNAME *. c.a CNAME rpz-passthru. TEMPFILE_END rpz: name: "rpz2.example.com." zonefile: TEMPFILE_NAME rpz2.example.com TEMPFILE_CONTENTS rpz2.example.com $ORIGIN example.com. rpz2 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.rpz.example.com. 3600 IN NS ns2.rpz.example.com. $ORIGIN rpz2.example.com. a TXT "local data 2nd zone" d TXT "local data 2nd zone" e CNAME *.a.example. *.e CNAME *.b.example. drop CNAME rpz-drop. TEMPFILE_END stub-zone: name: "a." stub-addr: 10.20.30.40 stub-zone: name: "example." stub-addr: 10.20.30.50 CONFIG_END SCENARIO_BEGIN Test all support RPZ action for QNAME trigger ; a. RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a. IN NS SECTION ANSWER a. IN NS ns.a. SECTION ADDITIONAL ns.a IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION c.a. IN TXT SECTION ANSWER c.a. IN TXT "answer from upstream ns" ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.b.a. IN TXT SECTION ANSWER x.b.a. IN TXT "answer from upstream ns" ENTRY_END RANGE_END ; example. RANGE_BEGIN 0 100 ADDRESS 10.20.30.50 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN NS SECTION ANSWER example. IN NS ns.example. SECTION ADDITIONAL ns.example IN A 10.20.30.50 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION e.a.example. IN TXT SECTION ANSWER e.a.example. IN TXT "e.a.example. answer from upstream ns" ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION something.e.b.example. IN TXT SECTION ANSWER something.e.b.example. IN TXT "*.b.example. answer from upstream ns" ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN TXT ENTRY_END STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NXDOMAIN SECTION QUESTION a. IN TXT SECTION ANSWER ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.a. IN TXT ENTRY_END STEP 21 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION a.a. IN TXT SECTION ANSWER a.a. IN TXT "wildcard local data" ENTRY_END STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b.a. IN TXT ENTRY_END STEP 31 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION b.a. IN TXT SECTION ANSWER ENTRY_END STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION x.a. IN TXT ENTRY_END STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION x.a. IN TXT SECTION ANSWER x.a. IN TXT "wildcard local data" ENTRY_END STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION x.a.a. IN TXT ENTRY_END STEP 51 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION x.a.a. IN TXT SECTION ANSWER x.a.a. IN TXT "wildcard local data" ENTRY_END STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c.a. IN TXT ENTRY_END STEP 61 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION c.a. IN TXT SECTION ANSWER c.a. IN TXT "answer from upstream ns" ENTRY_END STEP 70 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION x.b.a. IN TXT ENTRY_END STEP 71 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION x.b.a. IN TXT SECTION ANSWER x.b.a. IN TXT "answer from upstream ns" ENTRY_END STEP 80 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN TXT ENTRY_END STEP 81 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION d. IN TXT SECTION ANSWER d. IN TXT "local data 2nd zone" ENTRY_END STEP 82 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION e. IN TXT ENTRY_END STEP 83 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION e. IN TXT SECTION ANSWER e. IN CNAME e.a.example. e.a.example. IN TXT "e.a.example. answer from upstream ns" ENTRY_END STEP 84 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION something.e. IN TXT ENTRY_END STEP 85 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION something.e. IN TXT SECTION ANSWER something.e. IN CNAME something.e.b.example. something.e.b.example. IN TXT "*.b.example. answer from upstream ns" ENTRY_END ; deny zone STEP 90 QUERY ENTRY_BEGIN SECTION QUESTION drop. IN TXT ENTRY_END ; no answer is checked at exit of testbound. SCENARIO_END unbound-1.13.1/testdata/stop_nxdomain_minimised.rpl0000644000175000017500000000601714010434640022153 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" harden-below-nxdomain: yes qname-minimisation: yes trust-anchor: ". IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3" val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. stub-zone: name: "anotherexample.local." stub-addr: 10.20.30.40 CONFIG_END SCENARIO_BEGIN Test stop cache search on nxdomain for QNAME minimised query ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN DNSKEY SECTION ANSWER . 3600 IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30900 (ksk), size = 512b} . 3600 IN RRSIG DNSKEY 5 0 3600 20070926134150 20070829134150 30900 . BlVcSh8xSgm7ne+XVCJwNHQKjk5kTJgG4Fa3sOSfp3YUjb2YclmVWyIw7XEHl0/C6CN5gdy18idnM6vT6Hy42A== ;{id = 30900} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION local. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400 . 86400 IN RRSIG SOA 5 0 86400 20070926134150 20070829134150 30900 . bOYbFZZp7vWWC2oxV+kph+YXjoQj2f6QJktlgmzRI7oReFX9jy/LibTPQi/sW0SGHpLaj3G5p4IfIlBibne4DA== ;{id = 30900} . 86400 IN NSEC ac. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG NSEC 5 0 86400 20070926134150 20070829134150 30900 . U+/m5+FmczzkosEx1aTP7MK/F3PpcKWct8CzM1jhjwNe2RlnW7qFe0IH8SLzD/elvxDTQMpJSMlKOhUUdapB8g== ;{id = 30900} lk. 86400 IN NSEC lr. NS DS RRSIG NSEC lk. 86400 IN RRSIG NSEC 5 1 86400 20070926134150 20070829134150 30900 . j6Pw5Eu9vGHDJcckTSWa8YD1b7FV7c/Z8aVkLfJCH+iPcaa40/LSp784+t2PnAAXL8fgriNL6jF/ve1rti3ANQ== ;{id = 30900} ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION anotherexample.local. IN TXT SECTION ANSWER anotherexample.local. 86400 IN TXT "should not resolve this" ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.local. IN TXT ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION example.local. IN TXT SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400 ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION anotherexample.local. IN TXT ENTRY_END ; query should be answered using NXDOMAIN for local in cache STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION anotherexample.local. IN TXT SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/local_nodefault.tdir/0000755000175000017500000000000014010434640020604 5ustar wouterwouterunbound-1.13.1/testdata/local_nodefault.tdir/local_nodefault.testns0000644000175000017500000000061514010434640025203 0ustar wouterwouter; nameserver test file $ORIGIN 30.172.in-addr.arpa. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION 1.0 IN A SECTION ANSWER 1.0 IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION 1.0.29.172.in-addr.arpa. IN A SECTION ANSWER 1.0.29.172.in-addr.arpa. IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/local_nodefault.tdir/local_nodefault.dsc0000644000175000017500000000052314010434640024432 0ustar wouterwouterBaseName: local_nodefault Version: 1.0 Description: Create a stub zone to replace a default local zone CreationDate: Tue Jun 3 14:08:00 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: local_nodefault.pre Post: local_nodefault.post Test: local_nodefault.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/local_nodefault.tdir/local_nodefault.pre0000644000175000017500000000162414010434640024452 0ustar wouterwouter# #-- local_nodefault.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT local_nodefault.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < local_nodefault.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/local_nodefault.tdir/local_nodefault.conf0000644000175000017500000000107014010434640024604 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no # trailing . local-zone: "30.172.in-addr.arpa." nodefault # no trailing . local-zone: "29.172.in-addr.arpa" nodefault forward-zone: name: "." # invalid address to be sure it fails. forward-addr: "127.0.0.5@@TOPORT@" forward-zone: name: "30.172.in-addr.arpa" forward-addr: "127.0.0.1@@TOPORT@" forward-zone: name: "29.172.in-addr.arpa" forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/local_nodefault.tdir/local_nodefault.test0000644000175000017500000000241114010434640024636 0ustar wouterwouter# #-- local_nodefault.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # this one should have NXDOMAIN builtin # echo "> dig 1.0.31.172.in-addr.arpa." dig @localhost -p $UNBOUND_PORT 1.0.31.172.in-addr.arpa. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "NXDOMAIN" outfile; then echo "OK for a blocked by default zone" else echo "Not OK" exit 1 fi # this one should give our own data as the reply echo "> dig 1.0.30.172.in-addr.arpa." dig @localhost -p $UNBOUND_PORT 1.0.30.172.in-addr.arpa. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK for nodefault zone" else echo "Not OK" exit 1 fi # this one should give our own data as the reply # but different trailing dot in unbound.conf file echo "> dig 1.0.29.172.in-addr.arpa." dig @localhost -p $UNBOUND_PORT 1.0.29.172.in-addr.arpa. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK for nodefault zone" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/local_nodefault.tdir/local_nodefault.post0000644000175000017500000000046114010434640024647 0ustar wouterwouter# #-- local_nodefault.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/val_referglue.rpl0000644000175000017500000002414214010434640020054 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" directory: "" access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cache referral with unsigned glue ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns2.sub.example.com. example.com. 3600 IN RRSIG NS DSA 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCiyp/3hxwKS5QZPnjk36t16s4QTwIUI0m+MBVOAPacANrXXFKieyZd39o= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ns2.sub.example.com. IN A 100.200.30.40 ENTRY_END ; referral, for all types ENTRY_BEGIN MATCH opcode qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns2.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns2.sub.example.com. sub.example.com. IN NSEC tlib.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABdrfr+eKT1syk2qFlV01wLOqQdvNMpEtPmGAM6CrtyQAje/ddXSi9A= ;{id = 2854} ns2.sub.example.com. IN A 100.200.30.40 ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.sub.example.com. example.com. 3600 IN RRSIG NS DSA 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCiyp/3hxwKS5QZPnjk36t16s4QTwIUI0m+MBVOAPacANrXXFKieyZd39o= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ns2.sub.example.com. IN A 100.200.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.sub.example.com. example.com. 3600 IN RRSIG NS DSA 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCiyp/3hxwKS5QZPnjk36t16s4QTwIUI0m+MBVOAPacANrXXFKieyZd39o= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ; This is from an unsigned subzone ns2.sub.example.com. IN A 100.200.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFEG4WWIYBDknWlr2d8S42UZHRuByAhRgnDELUAccGZTCVzG+xl/locivpA== ;{id = 2854} ENTRY_END RANGE_END ; ns2.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 100.200.30.40 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns2.sub.example.com. example.com. 3600 IN RRSIG NS DSA 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCiyp/3hxwKS5QZPnjk36t16s4QTwIUI0m+MBVOAPacANrXXFKieyZd39o= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.sub.example.com. example.com. 3600 IN RRSIG NS DSA 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCiyp/3hxwKS5QZPnjk36t16s4QTwIUI0m+MBVOAPacANrXXFKieyZd39o= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.sub.example.com. example.com. 3600 IN RRSIG NS DSA 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCiyp/3hxwKS5QZPnjk36t16s4QTwIUI0m+MBVOAPacANrXXFKieyZd39o= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ; This is from an unsigned subzone ns2.sub.example.com. IN A 100.200.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFEG4WWIYBDknWlr2d8S42UZHRuByAhRgnDELUAccGZTCVzG+xl/locivpA== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns2.sub.example.com. IN A SECTION ANSWER ns2.sub.example.com. IN A 100.200.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns2.sub.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; first ask for +CD and get the data in the cache. STEP 1 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 3 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA CD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.sub.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ; already validated and thus stripped from the answer. ;ns2.sub.example.com. IN A 100.200.30.40 ENTRY_END ; now the data is in the cache, validate a referral from cache ; note, no recursion desired STEP 5 QUERY ENTRY_BEGIN REPLY DO SECTION QUESTION bla.example.com. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AD DO NOERROR SECTION QUESTION bla.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN NS ns2.sub.example.com. example.com. 3600 IN RRSIG NS DSA 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCiyp/3hxwKS5QZPnjk36t16s4QTwIUI0m+MBVOAPacANrXXFKieyZd39o= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_positive_wc_nodeny.rpl0000644000175000017500000001164114010434640022003 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with positive wildcard without qname denial ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; from ; *.example.com. IN A 10.20.30.40 www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFFi0g6v/20JyUxoQq7XM0iQnaMMOAhRjhUCLZjMqR1tj2MGGOgfhb1BSyw== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ; denies www.example.com. ; ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC ; ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFGbrr95DAxBIRKFmr4BUm5OxXWMUAhUAsduS0iF2Pa7FagrbAPrJxZ2KPNs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametooptout.rpl0000644000175000017500000002406314010434640020777 0ustar wouterwouter; config options server: trust-anchor: "GOV. DS 26079 7 2 4ED5FFBC8A40262B56E1232135B929192804ACC006930D087AAB38A611C89041" val-override-date: "20091113091234" fake-sha1: yes trust-anchor-signaling: no forward-zone: name: "." forward-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test validator with CNAME to optout NSEC3 span NODATA RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.hud.gov. IN AAAA SECTION ANSWER www.hud.gov. 86400 IN CNAME www.content.hud.gov. www.hud.gov. 86400 IN RRSIG CNAME 7 3 86400 20091204150200 20091104150200 64775 hud.gov. taZtumaTp8eSlcj0vEGnY0Up05RtlC2NhHrtHDUdq1TskAPQH8Eu9AoVe6gKrFEyCC1ixprOhT8Ni661d/ZykdzgceZ8KgFIlSQ84Whm59yB2gcbXLen9rApF0+NuyRgdAph6yjMYMtfoRQWAASG7SqS/v52dkHNf/a9PXaDvHBvjoiTK+dXPKFulkmEl0KyhXBdsikl6/Xd68FF41FdDNzWS8ZzYCdd4CWaXXkwTtPSFsKyXGZeXOTxqGQJnD+hNBkn2sAca1oLiAsfaiCHec66I+rHGXT+mPB7HXez32jbbeInkgB7M2TUoRXehifuloR8sur8Xck9FPRv24Si8A== ;{id = 64775} SECTION AUTHORITY content.hud.gov. 86400 IN NS drfswitch.hud.gov. content.hud.gov. 86400 IN NS lanswitch.hud.gov. 3RUD2HK5O5KA0IC6BF22C1T4R1BJGJ3R.hud.gov. 86400 IN NSEC3 1 1 5 abcd 42bsks495i3mb2s3f6nhusc6rfm54g4g A NS SOA MX RRSIG DNSKEY NSEC3PARAM ; flags: optout 3RUD2HK5O5KA0IC6BF22C1T4R1BJGJ3R.hud.gov. 86400 IN RRSIG NSEC3 7 3 86400 20091204150200 20091104150200 64775 hud.gov. APf75Nx4eY9eHov3T9hduDLuG4TJfVfEUEhSgm7HIZRvSPFgajHz2q+Wy6888G3C0T1Zft1qL2PdHMonK6H1OEE+NiOxroDsZaH+aWZjAsbIO86qQ2xcC+/Z9DsddQtONk0zAqpuYxHSn879rAk/BIKeDukNoBChHCSTy8olUFiYt7XEmjz5AOoc8R5VQhMQi/vmbmC0BoFOemDxxowG2MX27Hj2MbVBEJiT8xioFEk41jsdDI0WQtpnory2NT/UM4kWZdmDdxbpwu2F8oixe3oi4AOI9j3EukoOZT9f0Sx+tCg/I9zLNZJi+VuI5oUlpZkSH5EoUyRgK33eO+KJhQ== ;{id = 64775} GO8CPDSLPULIOURE31GBK5JJKA0BKIVN.hud.gov. 86400 IN NSEC3 1 1 5 abcd gvfjd9enpjtet8a14uhb8hlrfeon2b72 A RRSIG ; flags: optout GO8CPDSLPULIOURE31GBK5JJKA0BKIVN.hud.gov. 86400 IN RRSIG NSEC3 7 3 86400 20091204150200 20091104150200 64775 hud.gov. eQFg/RvJ640k+Fa5yIUZwkx8FvsYSivykYFjc6dOiGt7r3VprfxwGWeYpyjYr/+mzu0ugE5ePDjZWtr5naK3dvqmt7qKk4/nEvVDoUmrg7joIUmeTzami9RB9lzCq2O/ddempQ6jpwfjiIDuEKUxHMpBFpw8QQZnZSZHKKQCDB4pOj8U8J/wNJXCS+SP7plU1hEVroC+QXCOYS8NHY2wFyeuW7A+xvg9tyYp9PH6c5MoNMkRQt36Kdvfk1nk3osktwalJNLmMhDr/vtErFieGGD6E9Ud9Pg70bPF2G5nqwwLDRevy7hIFjaMDHfYrcWc4B5hrUSpGtLJkYog9vsd2w== ;{id = 64775} SECTION ADDITIONAL drfswitch.hud.gov. 86400 IN A 170.97.167.1 lanswitch.hud.gov. 86400 IN A 170.97.67.78 drfswitch.hud.gov. 86400 IN RRSIG A 7 3 86400 20091204150200 20091104150200 64775 hud.gov. ub6Anb7XgDMRsTYxqKDRUOYnntLetcJMXM9SVbG7Cb2n+ccp4OO38u6KnGO1i8U5rhTQ6WPlG6iKA+8U0mQuWp3fkzBaE+a5R3eEfzLlRE/MbjUqHjTb0MVYQnMWaA7YXmj/1BNFjBuAam+J3QnU4JR3RqN9WDmHXYx8IUEY9BYSWvTMhOnzebRu6z9MUBQWFfm69pFxf0Z1SkpInznU/mxGdGlslzxL8ScKAUMSBiQG1tyL90OEXW3Yp7kbOtpTxGrXucpMiMB9lXI/z9UiRJenZrJ7swyyyJ5Do0TjCiS3oS8RBhX8ou09sNftUmF9crKz/BdNq90wVYoHXYz9vg== ;{id = 64775} lanswitch.hud.gov. 86400 IN RRSIG A 7 3 86400 20091204150200 20091104150200 64775 hud.gov. QO+quzaZXrIBZy0JXhx85/8auhBj8dCqeidaUCs6rzCd/lgUDt7B/mH8IanU33o+PyKsBN+B5r9bavFFCNc4sPDUVwNcnZfKCyFQvvUnI3rztCJb/ESYnJ/xu/5g966cRLOajzAvvLAWZ6vT4p3b9+CpaONOJ19D08RpwsWnTkqiEP/UiXaWBpVwyt4JHN0oiNmMGshk5zjbHir1gUInd7QbJk3SpyiIgHT5Z4nhTUGkd1sIve++aIxjsQ8MVrE+INw4v56dJaoYD6bqQewmg2yAr9nYemYUHYi8+USy7/anEaUsOvk9zZfncevTfY/sOORFWoD15bHF2BWUo2YwaQ== ;{id = 64775} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.content.hud.gov. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION GOV. IN DNSKEY SECTION ANSWER GOV. 86400 IN DNSKEY 256 3 7 AwEAAaQ6vDoHd2QDRBLwB+n63RxnmJExvIcOz7uv9gM+l8QSMAJTTCDpqJ8R+8UfYs97cn6LM3cT3kcl9V0GnjljNzNMk39W11Ej7htNcbf4u1n5z2e4WsnpjQJJmKoWv2FORIfJmLKbxzGILSK13mrDUETj9onhdtOsjkhcK/7S+h1d ;{id = 51998 (zsk), size = 1024b} GOV. 86400 IN DNSKEY 257 3 7 AwEAAZ1OCt7zZxeaROvzXNCNlqQWIi++p5ABXSoxqJ65WQko6xrI9RImK7IBT5roFhXjBDGJ8ld9CYIEN94kK83K/QwUGCJ+v3vIQFi09IqsPeRdHTQyghWWbhzAZpnlZ16imXB4yFZjdbV2iM66KcgsESQMPEcIayDQJh6JEi1wmslrYvRRJ6YPOWrlLD0RmdtCaRuzlUE0RiWSem/i8vDFdmsSwChRMcORklKqjqt1+RBIiEFJGKIz7lGc9DXRwkBfb+halii+jrELiZAPzfO7rf08l3QlgHEuxclTTdEaxctPd2O2U/Hl9tRgkxRL/Zv1i0sEx2mOJGcUCeVm4Hf2aM8= ;{id = 26079 (ksk), size = 2048b} GOV. 86400 IN RRSIG DNSKEY 7 1 86400 20091117211705 20091112211705 26079 gov. OR2ltuGs0IxWqikvqWIoXLy7gPpWafolM+fyQ9uyuzPdxILo8QboVzfRr3Q8X/hOa6MRwR0KHGci2NH/29p9cekafdMbOer0kvh0hndnf+yGLuDcd9HLj5hpoZ5uecZ2r02OWtRHCKetAPF95SYrIQBzoqUNOswdDlSTW1R8v/BQ6UpztuUQcciZJxARbXlovzSkMbnoyjtehgKjXPP/Zy79vSwhjpTJ4XAsc2E3Tw1qAE7ZZUzYpN8uGmAQYVtZraQIjazE/A+xVo+XB0dZdhlM00xUs6GNuZytckUOqecBKZ2IKlxBe+kBEkj2nz1PBRAzmZUoS3ZZPkKaA6ygTA== ;{id = 26079} GOV. 86400 IN RRSIG DNSKEY 7 1 86400 20091117211705 20091112211705 51998 gov. VDizeuAywZB0tQm4kmbOSGhrK1eJYC9VSSND/wG7oTj/oWDAKMEke1XrQXGEoIFyBKZk5dHpUB6tmEA9RPLMwI51ue66pM9RRT1aNLba08r6TDzr6ZxKjtqBDj4Xy16h6PWZ2jC9JASGeNGINg6zCeVmU75yqXh6+X+KeypO64E= ;{id = 51998} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION hud.gov. IN DS SECTION ANSWER hud.gov. 86399 IN DS 52146 7 2 54af554fc3ffc532bb898b9ab39f1276fd17b59d3e44772c3142ea62680d71c7 ; xihap-zehog-zybyz-zecaf-dyvym-nydun-pusan-zagil-kezyc-lutyn-tazog-gyted-sosig-depyk-dypeb-tasas-lexix hud.gov. 86399 IN RRSIG DS 7 2 86400 20091117211705 20091112211705 51998 gov. FHDstL7xVBBedCaG83M884pnxCV8PY9GjUulwH7BSTVIaFBJe/kxlKGTsD0j5x4QfezjBWKenjpvw5SiMGeQOnIJeA/z6Ze9QBCGVrbx0ZgoKEoSRyfD0vIjvM7J4T2PLgslI8fsMpWFs4KzmujKJNRVq4aFzFk9k8bFCJnEPJk= ;{id = 51998} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION hud.gov. IN DNSKEY SECTION ANSWER hud.gov. 86400 IN DNSKEY 256 3 7 AwEAAcAOoW+zclZqs8kCGmm290DImA1DDfKqbifB1oGNjOcmz6xz6PigLa8ORaAG0zpabZwLMXyhMaKbseR+beGnOf2wh5N0oxN8grCNTJm+YAMeyvCn2dz3J8YEoclyST4bhU38MGFsEVVZukXsIniFfvnKfpVxArpO7ocbDXI+EN3RA8EHFTIHOCfEbCS7zyO0mtrdM88Y/tIX9fjsYUig6lfVUNISJUL4TyUMpmi8/hu2dLdTuXXIAEMx/vyQHVFq2ZZM0nnDJ9vJCZEgwFAjUE5/BjlrDgofonxdY8SLDbQvn11z/SPugKiA16bdO6i/ND4FjEhG2HUJHeeQCrZ61rE= ;{id = 64775 (zsk), size = 2048b} hud.gov. 86400 IN DNSKEY 256 3 7 AwEAAfFubFVJ6m7jO8HvInmFEXivfnqZZpS7SnsucTlfGg5yhIayzS3tC0UMAt1QU+pEIyVH+qa2fG2+/45gAp+iG3zwyepyZuup8eo/SlXefWXZ9CIjBNaaptd2sSDsuF8mPtdQmtm3AbPqGEe7p7edIHHJBxPy90AzJQeKppyRcRcrGO3QNC9Glso177NbHZVZuY46V63RdaY3Qf5t7/03xy/Z68KWFEJKUCBxkHjAVIH0KaT9M37dPzs9L7F/+NyOLfMUzk87ctv4ivW9dcJRf79aulzoIV4LlGu0ZsrvxRZ5t+ind+GDeTvaKseH0NWF5Am2dG/QrHtewQL9qGztjN8= ;{id = 41402 (zsk), size = 2048b} hud.gov. 86400 IN DNSKEY 257 3 7 AwEAAZ50d20TkOzWzJD+anUMSIMfGaI8m4If6DMax4NQnZ34yta6UOb907SRqBs2vJ+MpcJkyRuLx/Z9vGlfZQ7V9eBgI62EZwmfiitanwSFPZgCzM8nVswpDS+/CmaHhXUoLdgNgUYh4WSl/7fXroluC/18xyMl3ZGQRRjJftpQSMXubP/n9nCHZXE5YiDw1cRklqA4lLyNeXBgadWa8klekr89WNij454KApevbg0GSudEJw7IWzbOb09npvQ1hnLz8pmDsaahfIsGBvcHSUEJrjSkk3J1oHDj0B7Gxm+tZH4Er21RTucEWeroyIJSQmsYN+Cm0FyfgJ75bNEsRe5M4Vc= ;{id = 52146 (ksk), size = 2048b} hud.gov. 86400 IN RRSIG DNSKEY 7 2 86400 20091204150200 20091104150200 52146 hud.gov. KWIA6wH6BqwuF7d6dyTbfqbcLgbUG2ZKJA4vVfhWqOC76Xnt7gXPLeB2GQwwyhSR0s3IHIzAB0Uj+RAGGcz2NH5JanfxNC9rAvubYESXSlLr/FC33exLeOxGisJZzRnPpk5NynXwyT8TXul1ew48/Mpyi7j6+tlqakqHw2HlId7oblxO2cjN6JV0JLZ44l7tCw6ALYhamA48PQ1WeJbGcfH7buCEG7S1ceZSZlG6kml+u7pb65QL9AZjCnDIecXk7B3HMCdIT8zyrO8QK0GiLMMak9RogF/5gBiH/WDCq7146vcVneW/Hn/+hLnY104iOKuadJcbmStlMF5k0iBzng== ;{id = 52146} hud.gov. 86400 IN RRSIG DNSKEY 7 2 86400 20091204150200 20091104150200 64775 hud.gov. V0JSAtTmQn76T408nyntg1ydX5sVvq8RSCN/Bf+cqTPXMFlPpmOs4VQv791bY85n28qOehV7Ws2CrhfxbyFbyYRXPBtWkg6jH3JXicYPn7Abm7E5N2Y6Mkm1Z9xt/APCw+aSkt0swMJzYBO5P5aeDesIB+Pz5I+SLuOPin3GFjGYL+YB5j5rTY/Nqnp2eQytF0SoFdqCIPCP7l9ZtYdaxBDQNX3Hklm4dRYP5U9wL8sqaeUwgKjJTGcbXiXdPXF9+3AojshKMpk14lcplHcy+cQ4p5ehSngtDwdWtG8gcWKCg829I/1iOFcnPgJ1YK1DdPVEGTgUFgGGwTx+HYMsPA== ;{id = 64775} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.hud.gov. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.hud.gov. IN AAAA SECTION ANSWER www.hud.gov. 86400 IN CNAME www.content.hud.gov. www.hud.gov. 86400 IN RRSIG CNAME 7 3 86400 20091204150200 20091104150200 64775 hud.gov. taZtumaTp8eSlcj0vEGnY0Up05RtlC2NhHrtHDUdq1TskAPQH8Eu9AoVe6gKrFEyCC1ixprOhT8Ni661d/ZykdzgceZ8KgFIlSQ84Whm59yB2gcbXLen9rApF0+NuyRgdAph6yjMYMtfoRQWAASG7SqS/v52dkHNf/a9PXaDvHBvjoiTK+dXPKFulkmEl0KyhXBdsikl6/Xd68FF41FdDNzWS8ZzYCdd4CWaXXkwTtPSFsKyXGZeXOTxqGQJnD+hNBkn2sAca1oLiAsfaiCHec66I+rHGXT+mPB7HXez32jbbeInkgB7M2TUoRXehifuloR8sur8Xck9FPRv24Si8A== ;{id = 64775} SECTION AUTHORITY 3RUD2HK5O5KA0IC6BF22C1T4R1BJGJ3R.hud.gov. 86400 IN NSEC3 1 1 5 abcd 42bsks495i3mb2s3f6nhusc6rfm54g4g A NS SOA MX RRSIG DNSKEY NSEC3PARAM ; flags: optout 3RUD2HK5O5KA0IC6BF22C1T4R1BJGJ3R.hud.gov. 86400 IN RRSIG NSEC3 7 3 86400 20091204150200 20091104150200 64775 hud.gov. APf75Nx4eY9eHov3T9hduDLuG4TJfVfEUEhSgm7HIZRvSPFgajHz2q+Wy6888G3C0T1Zft1qL2PdHMonK6H1OEE+NiOxroDsZaH+aWZjAsbIO86qQ2xcC+/Z9DsddQtONk0zAqpuYxHSn879rAk/BIKeDukNoBChHCSTy8olUFiYt7XEmjz5AOoc8R5VQhMQi/vmbmC0BoFOemDxxowG2MX27Hj2MbVBEJiT8xioFEk41jsdDI0WQtpnory2NT/UM4kWZdmDdxbpwu2F8oixe3oi4AOI9j3EukoOZT9f0Sx+tCg/I9zLNZJi+VuI5oUlpZkSH5EoUyRgK33eO+KJhQ== ;{id = 64775} GO8CPDSLPULIOURE31GBK5JJKA0BKIVN.hud.gov. 86400 IN NSEC3 1 1 5 abcd gvfjd9enpjtet8a14uhb8hlrfeon2b72 A RRSIG ; flags: optout GO8CPDSLPULIOURE31GBK5JJKA0BKIVN.hud.gov. 86400 IN RRSIG NSEC3 7 3 86400 20091204150200 20091104150200 64775 hud.gov. eQFg/RvJ640k+Fa5yIUZwkx8FvsYSivykYFjc6dOiGt7r3VprfxwGWeYpyjYr/+mzu0ugE5ePDjZWtr5naK3dvqmt7qKk4/nEvVDoUmrg7joIUmeTzami9RB9lzCq2O/ddempQ6jpwfjiIDuEKUxHMpBFpw8QQZnZSZHKKQCDB4pOj8U8J/wNJXCS+SP7plU1hEVroC+QXCOYS8NHY2wFyeuW7A+xvg9tyYp9PH6c5MoNMkRQt36Kdvfk1nk3osktwalJNLmMhDr/vtErFieGGD6E9Ud9Pg70bPF2G5nqwwLDRevy7hIFjaMDHfYrcWc4B5hrUSpGtLJkYog9vsd2w== ;{id = 64775} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_cycle_noh.rpl0000644000175000017500000001015214010434640020214 0ustar wouterwouter; config options server: harden-glue: "no" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution where disabled scrubber avoids cycle ; query for ns.example.com, needs ns.example.net, needs ns.example.com. ; scrubber disabled, so extra glue is trusted. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.1 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.2 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.2 SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.1 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.com. IN A ENTRY_END ; recursion happens here. ; cycle detected and it fails. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.2 SECTION AUTHORITY example.com. IN NS ns.example.net. ; scrubbed off ; SECTION ADDITIONAL ; ns.example.net. IN A 1.2.3.1 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/rpz_respip_override.rpl0000644000175000017500000001002014010434640021314 0ustar wouterwouter; config options server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no rpz: name: "rpz.example.com." rpz-action-override: disabled zonefile: TEMPFILE_NAME rpz.example.com TEMPFILE_CONTENTS rpz.example.com $ORIGIN rpz.example.com. 32.1.113.0.203.rpz-ip A 192.0.2.1 TEMPFILE_END rpz: name: "rpz2.example.com." zonefile: TEMPFILE_NAME rpz2.example.com TEMPFILE_CONTENTS rpz2.example.com $ORIGIN rpz2.example.com. 32.1.113.0.203.rpz-ip A 192.0.2.2 TEMPFILE_END rpz: name: "rpz3.example.com." rpz-action-override: nodata zonefile: TEMPFILE_NAME rpz3.example.com TEMPFILE_CONTENTS rpz3.example.com $ORIGIN rpz3.example.com. 32.3.113.0.203.rpz-ip CNAME . TEMPFILE_END rpz: name: "rpz4.example.com." rpz-action-override: nxdomain zonefile: TEMPFILE_NAME rpz4.example.com TEMPFILE_CONTENTS rpz4.example.com $ORIGIN rpz4.example.com. 32.4.113.0.203.rpz-ip CNAME *. TEMPFILE_END rpz: name: "rpz5.example.com." rpz-action-override: passthru zonefile: TEMPFILE_NAME rpz5.example.com TEMPFILE_CONTENTS rpz5.example.com $ORIGIN rpz5.example.com. 32.5.113.0.203.rpz-ip A 192.0.2.5 TEMPFILE_END rpz: name: "rpz6.example.com." rpz-action-override: cname rpz-cname-override: ns. zonefile: TEMPFILE_NAME rpz6.example.com TEMPFILE_CONTENTS rpz6.example.com $ORIGIN rpz6.example.com. 32.6.113.0.203.rpz-ip A 192.0.2.6 TEMPFILE_END rpz: name: "rpz7.example.com." rpz-action-override: drop zonefile: TEMPFILE_NAME rpz7.example.com TEMPFILE_CONTENTS rpz7.example.com $ORIGIN rpz7.example.com. 32.7.113.0.203.rpz-ip A 192.0.2.7 TEMPFILE_END stub-zone: name: "." stub-addr: 10.20.30.40 CONFIG_END SCENARIO_BEGIN Test all supported RPZ action for response IP address trigger ; c. RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS ns. SECTION ADDITIONAL ns. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns. IN A SECTION ANSWER ns. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a. IN A SECTION ANSWER a. IN A 203.0.113.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION b. IN A SECTION ANSWER b. IN A 203.0.113.3 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION c. IN A SECTION ANSWER c. IN A 203.0.113.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION d. IN A SECTION ANSWER d. IN A 203.0.113.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION e. IN A SECTION ANSWER e. IN A 203.0.113.6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION f. IN A SECTION ANSWER f. IN A 203.0.113.7 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN A ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION a. IN A SECTION ANSWER a. IN A 192.0.2.2 ENTRY_END STEP 3 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN A ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION b. IN A SECTION ANSWER ENTRY_END STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION c. IN A SECTION ANSWER ENTRY_END STEP 7 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN A ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION d. IN A SECTION ANSWER d. IN A 203.0.113.5 ENTRY_END STEP 9 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION e. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION e. IN A SECTION ANSWER e. IN CNAME ns. ns. IN A 10.20.30.40 ENTRY_END STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION f. IN A ENTRY_END ; no answer is checked at exit of testbound. STEP 12 TIME_PASSES ELAPSE 10 SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b2_nodata_nons.rpl0000644000175000017500000000652414010434640022061 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.2 no data, without NSEC3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ; response to DS query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns1.example. IN DS ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns1.example. IN MX SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR matches the QNAME and shows that the MX type bit is not set. ;2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. NSEC3 1 1 12 aabbccdd ( 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG ) ;2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OmBvJ1Vgg1hCKMXHFiNeIYHK9XVW0iLDLwJN 4TFoNxZuP03gAXEI634YwOc4YBNITrj413iq NI6mRk/r1dOSUw== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ns1.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION ns1.example. IN MX SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametonx.rpl0000644000175000017500000002002714010434640020066 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname to nxdomain ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFGtYzScyRnHV8U/jOIPYwrlI9t3oAhRF0PIf+IthUR7uCWIvskWp5CfReQ== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.net. IN A SECTION ANSWER SECTION AUTHORITY example.net. IN NSEC abc.example.net. SOA NS DNSKEY NSEC RRSIG example.net. 3600 IN RRSIG NSEC 5 2 3600 20070926134150 20070829134150 30899 example.net. SEHthmjHyqGlzaOp3Dx6Jn5Fnvvtknw/IF6YSFY8NZLe+YSh1oRJbdEkQ8G92IT08n1jSN6jvKRsFBOUoFOQAw== ;{id = 30899} wab.example.net. IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFGtYzScyRnHV8U/jOIPYwrlI9t3oAhRF0PIf+IthUR7uCWIvskWp5CfReQ== ;{id = 2854} SECTION AUTHORITY example.net. IN NSEC abc.example.net. SOA NS DNSKEY NSEC RRSIG example.net. 3600 IN RRSIG NSEC 5 2 3600 20070926134150 20070829134150 30899 example.net. SEHthmjHyqGlzaOp3Dx6Jn5Fnvvtknw/IF6YSFY8NZLe+YSh1oRJbdEkQ8G92IT08n1jSN6jvKRsFBOUoFOQAw== ;{id = 30899} wab.example.net. IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd.rpl0000644000175000017500000000144614010434640016014 0ustar wouterwouter; This is a comment. ; config options go here. forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Sample of a valid query RANGE_BEGIN 0 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END RANGE_END RANGE_BEGIN 200 300 RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; unneccesary nothing steps. STEP 2 NOTHING STEP 3 NOTHING STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nodata.rpl0000644000175000017500000001104014010434640017333 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; Denies A, note this is the end of the NSEC chain. www.example.com. IN NSEC example.com. RRSIG NSEC www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCreYgWjFPE/E47n+KUp6vAPIfS4gIUaof1QcUQeIcsxVi1/M73CuHVwEc= ;{id = 2854} ; Denies wildcard ;example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY ;example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFGlz/gvGdVxEo3Kpr+MijEGCZgwaAhRU7qbF13vmCVgR8dFw7LQFKopV6w== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY www.example.com. IN NSEC example.com. RRSIG NSEC www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCreYgWjFPE/E47n+KUp6vAPIfS4gIUaof1QcUQeIcsxVi1/M73CuHVwEc= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/doh_downstream.tdir/0000755000175000017500000000000014010434640020466 5ustar wouterwouterunbound-1.13.1/testdata/doh_downstream.tdir/doh_downstream.test0000644000175000017500000002346114010434640024412 0ustar wouterwouter# #-- doh_downstream.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) # this test query should just work (server is up) echo "> query www1.example.net." $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # multiple requests (from localdata) echo "> query www1.example.net. www2.example.net. www3.example.net." $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net." $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.com" outfile | grep "10.20.30.42"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net." $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www3.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.com" outfile | grep "10.20.30.43"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query www4.example.com. www3.example.net." $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www4.example.com" outfile | grep "10.20.30.44"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query a1.example.com. - a90.example.com." $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi num_ans=$(grep -B 3 "a.example.com. IN A" outfile | grep "rcode: NOERROR" | wc -l ) if test "$num_ans" -ne 90; then echo "number of answers not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/doh_downstream.tdir/doh_downstream.conf0000644000175000017500000000120014010434640024343 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1@@PORT@ https-port: @PORT@ tls-service-key: "unbound_server.key" tls-service-pem: "unbound_server.pem" use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no http-query-buffer-size: 1G http-response-buffer-size: 1G http-max-streams: 200 local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" local-zone: "drop.net" deny tcp-upstream: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/doh_downstream.tdir/doh_downstream.dsc0000644000175000017500000000045214010434640024177 0ustar wouterwouterBaseName: doh_downstream Version: 1.0 Description: Test DNS-over-HTTPS query processing CreationDate: Mon Jun 12 12:00:00 CET 2020 Maintainer: Category: Component: CmdDepends: Depends: Help: Pre: doh_downstream.pre Post: doh_downstream.post Test: doh_downstream.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/doh_downstream.tdir/unbound_server.key0000644000175000017500000000156714010434640024251 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA 3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS 6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP 0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/doh_downstream.tdir/doh_downstream.pre0000644000175000017500000000200214010434640024205 0ustar wouterwouter# #-- doh_downstream.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT doh_downstream.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < doh_downstream.conf > ub.conf # start unbound in the background $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/doh_downstream.tdir/unbound_server.pem0000644000175000017500000000115314010434640024231 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== -----END CERTIFICATE----- unbound-1.13.1/testdata/doh_downstream.tdir/doh_downstream.post0000644000175000017500000000066514010434640024421 0ustar wouterwouter# #-- doh_downstream.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/doh_downstream.tdir/doh_downstream.testns0000644000175000017500000000233614010434640024751 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END ; lots of noerror/nodata answers for other queries (a.. queries) ENTRY_BEGIN MATCH opcode qtype subdomain REPLY QR AA NOERROR ADJUST copy_id copy_query SECTION QUESTION a.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600 ENTRY_END unbound-1.13.1/testdata/val_nsec3_nods_negcache.rpl0000644000175000017500000001741114010434640021750 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 with no DS referral from neg cache. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END ; get DS proof from neg cache ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; sub.example.com. IN DS ; SECTION AUTHORITY ; ; proof that there is no DS here. ; ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ; ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. ; 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG ; 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEC78oZJjqlV6kVyQb4X0o6tsUpUAhUAk+bgth7eeN+aO8ts2+yLSyzSX9g= ;{id = 2854} ; ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/01-doc.tdir/0000755000175000017500000000000014010434640016434 5ustar wouterwouterunbound-1.13.1/testdata/01-doc.tdir/01-doc.dsc0000644000175000017500000000037014010434640020112 0ustar wouterwouterBaseName: 01-doc Version: 1.0 Description: Check documentation CreationDate: Wed Jan 3 15:15:01 CET 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: 01-doc.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/01-doc.tdir/01-doc.test0000644000175000017500000000263014010434640020321 0ustar wouterwouter# #-- 01-doc.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh set_doxygen_path PRE="../.." get_make (cd $PRE ; $MAKE doc) > mylog 2>&1 bad=0 if grep -e "Warning" -e "warning" -e "Error" -e "error" mylog >/dev/null 2>&1; then cat mylog bad=1 else # "doxygen ok" cat mylog fi (cd $PRE; find . -name "*.h" -print) >hlist (cd $PRE; find . -name "*.c" -print) >>hlist # filter out config.h fgrep -v -e "config.h" hlist > ilist; mv ilist hlist fgrep -v -e "util/configparser" hlist > ilist; mv ilist hlist fgrep -v -e "util/configlexer" hlist > ilist; mv ilist hlist fgrep -v -e "util/configyyrename" hlist > ilist; mv ilist hlist fgrep -v -e "util/locks.h" hlist > ilist; mv ilist hlist fgrep -v -e "util/storage/lookup3.c" hlist > ilist; mv ilist hlist fgrep -v -e "ldns-src/" hlist > ilist; mv ilist hlist fgrep -v -e "libunbound/python/libunbound_wrap.c" hlist > ilist; mv ilist hlist fgrep -v -e "pythonmod/interface.h" hlist > ilist; mv ilist hlist fgrep -v -e "dnstap" hlist > ilist; mv ilist hlist # filter out compat fgrep -v -e "compat/" hlist > ilist; mv ilist hlist for h in `cat hlist`; do if fgrep "`basename $h`" $PRE/doc/html/files.html >/dev/null; then : # ok else echo "Warning: $h has no documentation." bad=1 fi done exit $bad unbound-1.13.1/testdata/autotrust_revtp.rpl0000644000175000017500000001074014010434640020523 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;next_probe_time: 1258967360 ;;Mon Nov 23 10:09:20 2009 ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with trust point revocation ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; revoked keys example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} example.com. 10800 IN DNSKEY 385 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16614 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55710 example.com. zOSlB1iwtlP2lum1RK0WoDQrMVj0JKwk2E5Mu1okzV38hAx3Xm9IGMK6WrNkVVLmx4OkhYmdPVA95jVsFpwLMw== ;{id = 55710} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 16614 example.com. qP49cCYP3lvNnLBYty/JxAwHqBIGjpup5zQ7qpjPnaZpBb/TlpOhY17LBZrqD86VvBbEVz5tkxC9UrCy85ePDQ== ;{id = 16614} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END ; set date/time to Mon Nov 23 09:46:40 2009 STEP 5 TIME_PASSES EVAL ${1258962400 + 7200} STEP 6 TRAFFIC ; do the probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 0 ${timeout} 0} STEP 9 ASSIGN tp = ${1258962400} ; the auto probing should have been done now. STEP 11 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;REVOKED ; The zone has all keys revoked, and is ; considered as if it has no trust anchors. ; the remainder of the file is the last probe. ; to restart the trust anchor, overwrite this file. ; with one containing valid DNSKEYs or DSes. ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${0} ;;${ctime 0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 10800 IN DNSKEY 385 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16614 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; correct unsigned response works after trust point revocation. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nodatawc_one.rpl0000644000175000017500000001046314010434640020536 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard nodata response with one NSEC ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; wildcard, Denies A, note this is the end of the NSEC chain. *.example.com. IN NSEC example.com. RRSIG NSEC *.example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFEwIBOyCychIo8y/JnBLLrhQdejHAhUAtKBLVPEvhF2haaX/RNUGLji1Xw0= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY *.example.com. IN NSEC example.com. RRSIG NSEC *.example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFEwIBOyCychIo8y/JnBLLrhQdejHAhUAtKBLVPEvhF2haaX/RNUGLji1Xw0= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_resolve_minimised_refused.rpl0000644000175000017500000000443114010434640023506 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: yes minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterative qname minimised resolve of www.refused.example.com. Simulate broken nameserver that gives REFUSED responses on QTYPE=NS queries. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION refused.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION www.refused.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.refused.example.com. IN AAAA SECTION ANSWER www.refused.example.com. IN AAAA ::1 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.refused.example.com. IN AAAA ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.refused.example.com. IN AAAA SECTION ANSWER www.refused.example.com. IN AAAA ::1 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/black_ent.rpl0000644000175000017500000003677214010434640017170 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacklist for ENT response ; 'ENT' Empty Non Terminal ; which needs a valid NSEC(3) proof. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ; no ns.blabla.com, try that later ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ; make priming query succeed example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END ; ENT request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY rub.example.com. IN NSEC sub.sub.example.com. RRSIG NSEC A rub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. AAUOa/L9F/ZrGfXSov4WRhTTbd8+CsdTJeM4Nk973wcLZ27A4YiIlTs= ;{id = 2854} ; extraneous DS sub.sub.example.com. IN NSEC tub.example.com. RRSIG NSEC DS sub.sub.example.com. 3600 IN RRSIG NSEC 3 4 3600 20030926134150 20030829134150 2854 example.com. AJVJEBTIlbnAHF0HR0skEfTVS28hMrbUHzBx5CMfY/NhxZohQtGVcwo= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.sub.example.com. IN DS SECTION ANSWER sub.sub.example.com. 3600 IN DS 30899 5 1 dea269e4bccaa019a4ba0cf5b198292f28faeee1 sub.sub.example.com. 3600 IN RRSIG DS 3 4 3600 20030926134150 20030829134150 2854 example.com. AGQoKQd4UT+e4AMdYdDznxWo9cybYZyRAgC7exEgJ1asYRmmgvJG7Zw= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.sub.example.com. IN NS SECTION AUTHORITY sub.sub.example.com. IN NS ns.sub.sub.example.com. sub.sub.example.com. IN NS ns.foo.com. sub.sub.example.com. 3600 IN DS 30899 5 1 dea269e4bccaa019a4ba0cf5b198292f28faeee1 sub.sub.example.com. 3600 IN RRSIG DS 3 4 3600 20030926134150 20030829134150 2854 example.com. AGQoKQd4UT+e4AMdYdDznxWo9cybYZyRAgC7exEgJ1asYRmmgvJG7Zw= ;{id = 2854} SECTION ADDITIONAL ns.sub.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ; ENT request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY rub.example.com. IN NSEC sub.sub.example.com. RRSIG NSEC A rub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AKxt275OlwQmfqO36rTYkPXBqdoyaD3lId4q+UA4+Gs50qfn/RkuIOs= ;{id = 2854} ; extraneous DS sub.sub.example.com. IN NSEC tub.example.com. RRSIG NSEC DS sub.sub.example.com. 3600 IN RRSIG NSEC 3 4 3600 20070926134150 20070829134150 2854 example.com. AJlIjBQvBluNTu1883DMH9ZtBVfKTXVEH2LvLV785UcwGELnwRYfZbA= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.sub.example.com. IN DS SECTION ANSWER sub.sub.example.com. 3600 IN DS 30899 5 1 dea269e4bccaa019a4ba0cf5b198292f28faeee1 sub.sub.example.com. 3600 IN RRSIG DS 3 4 3600 20070926134150 20070829134150 2854 example.com. AAPYiFzyEyehaff0hYTyOBFHF6qiCE7I7Zoa7Atn2F+HN2N/g/RloN8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.sub.example.com. IN NS SECTION AUTHORITY sub.sub.example.com. IN NS ns.sub.sub.example.com. sub.sub.example.com. IN NS ns.foo.com. sub.sub.example.com. 3600 IN DS 30899 5 1 dea269e4bccaa019a4ba0cf5b198292f28faeee1 sub.sub.example.com. 3600 IN RRSIG DS 3 4 3600 20070926134150 20070829134150 2854 example.com. AAPYiFzyEyehaff0hYTyOBFHF6qiCE7I7Zoa7Atn2F+HN2N/g/RloN8= ;{id = 2854} SECTION ADDITIONAL ns.sub.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.sub.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.sub.example.com. IN DNSKEY SECTION ANSWER sub.sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.sub.example.com. 3600 IN RRSIG DNSKEY 5 4 3600 20070926134150 20070829134150 30899 sub.sub.example.com. RO6LECPRS3aL6kRp++qbSIdNiJvhvYTJr0fupJMF5lPuTwI5HhAL5mAHjrmc3r0LeFE9iRpjFmdp/p1i0qVWzQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.sub.example.com. IN NS SECTION ANSWER sub.sub.example.com. IN NS ns.sub.sub.example.com. sub.sub.example.com. IN NS ns.foo.com. sub.sub.example.com. 3600 IN RRSIG NS 5 4 3600 20070926134150 20070829134150 30899 sub.sub.example.com. blhq9ELWjE5YhhLn1UN3K/QTh52w/ZkGv+hI8HbL1a9Av6W67H2jsb1B5iaPbOagKzAIPId9qtcskjCo3DSaHg== ;{id = 30899} SECTION ADDITIONAL ns.sub.sub.example.com. IN A 1.2.4.6 ns.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20070926134150 20070829134150 30899 sub.sub.example.com. JU2A7WvVR3AB7Ni9Qjfv7sxetc0jIfRgeERj8x+UUWdPiEBEkhUvD+ba6eLu5irMRWCj7CXIM81Mgl58QXCqfg== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.sub.example.com. IN A SECTION ANSWER ns.sub.sub.example.com. IN A 1.2.4.6 ns.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20070926134150 20070829134150 30899 sub.sub.example.com. JU2A7WvVR3AB7Ni9Qjfv7sxetc0jIfRgeERj8x+UUWdPiEBEkhUvD+ba6eLu5irMRWCj7CXIM81Mgl58QXCqfg== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.sub.example.com. IN NSEC nt.sub.sub.example.com. NSEC RRSIG A ns.sub.sub.example.com. 3600 IN RRSIG NSEC 5 5 3600 20070926134150 20070829134150 30899 sub.sub.example.com. zoir16lVMbPOFS81l20ZXyqWlXYvQg99zzfOiH5tzpbqPYHxrnQvsfJgTMR7rZvYG55Qh64Y4J1MSw+U2QAgmw== ;{id = 30899} sub.sub.example.com. IN SOA sub.sub.example.com. hostmaster.sub.sub.example.com. 1 2 3 4 5 sub.sub.example.com. 3600 IN RRSIG SOA 5 4 3600 20070926134150 20070829134150 30899 sub.sub.example.com. aAKz5eF2EdRP5HVojabqDkvINeXczBAZyBesjC0+DtMmb7WvaUQzKQfYtBdWhE7CdrnPYuHPg4WlNbn0f7DsCw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.sub.example.com. IN A SECTION ANSWER www.sub.sub.example.com. IN A 10.20.30.40 www.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20070926134150 20070829134150 30899 sub.sub.example.com. ZXZoHA8pavJZELucMJpXLWQXNaIYXO4ryXpkp2BVZbW9sdcYCobWPyyzN5nmBatm+CaWLd6fjhwXh+OVVIH1Gg== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.sub.example.com. IN A SECTION ANSWER www.sub.sub.example.com. IN A 10.20.30.40 www.sub.sub.example.com. 3600 IN RRSIG A 5 5 3600 20070926134150 20070829134150 30899 sub.sub.example.com. ZXZoHA8pavJZELucMJpXLWQXNaIYXO4ryXpkp2BVZbW9sdcYCobWPyyzN5nmBatm+CaWLd6fjhwXh+OVVIH1Gg== ;{id = 30899} ENTRY_END ; remove pending ns.blabla.com AAAA msg STEP 30 QUERY ENTRY_BEGIN REPLY RD DO CD SECTION QUESTION ns.blabla.com. IN AAAA ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD CD RA DO NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION ANSWER SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_signatures.30000644000175000017500000000372414010434640020025 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; created test keys with bind tools: ; dnssec-keygen 9.4.2: /usr/sbin/dnssec-keygen -a DSA -b 512 -n ZONE nlnetlabs.nl ; Knlnetlabs.nl.+003+03510 ; private key file: ; Private-key-format: v1.2 ; Algorithm: 3 (DSA) ; Prime(p): 4nziv5P4tsXwaf71EoyKFoLzFq0/wN5fb6yb8IY5uwmVh5hvO0M4lR8LAjwimCIo3SYEdCnUPkl8WbJYHkRm9w== ; Subprime(q): 3ueDKL3Jc2Ue1G/ZCfhwMEyR4v0= ; Base(g): Ji9iYukmprX5qXO7V0MALKCTsfvz3kef2TsZdpM/VdetDK53OwKE1NRTMU6PSPGyumedOrkSD2BLa7CT1dJRJQ== ; Private_value(x): wlEfaVwW10q6Re/ZOBL9PLJJb20= ; Public_value(y): cHuTGyrkbj5QVkgmFm3KEpLnb5c7jH6tapeU5ugEIJiacbroPhfz/9vPw8tkZedBGImuYPSohRPfHIQPMxfxAg== ; DSA key from bind tool 9.4.2 ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN DNSKEY SECTION ANSWER nlnetlabs.nl. IN DNSKEY 256 3 3 AN7ngyi9yXNlHtRv2Qn4cDBMkeL94nziv5P4tsXwaf71EoyKFoLzFq0/ wN5fb6yb8IY5uwmVh5hvO0M4lR8LAjwimCIo3SYEdCnUPkl8WbJYHkRm 9yYvYmLpJqa1+alzu1dDACygk7H7895Hn9k7GXaTP1XXrQyudzsChNTU UzFOj0jxsrpnnTq5Eg9gS2uwk9XSUSVwe5MbKuRuPlBWSCYWbcoSkudv lzuMfq1ql5Tm6AQgmJpxuug+F/P/28/Dy2Rl50EYia5g9KiFE98chA8z F/EC ENTRY_END ; entry to test ; from ; /usr/sbin/dnssec-signzone nlnetlabs.nl ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN SOA SECTION ANSWER nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. ( 2008040100 28800 7200 604800 3600 ) nlnetlabs.nl. 10200 RRSIG SOA 3 2 10200 20080515132632 ( 20080415132632 3510 nlnetlabs.nl. ACYwIl9GQofKJ2xdgx1YelKbtmLrWRl8f+eC ToRnfyQ+gvdUIX3mTTw= ) ENTRY_END ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN NS SECTION ANSWER nlnetlabs.nl. 10200 NS omval.tednet.nl. nlnetlabs.nl. 10200 NS ns7.domain-registry.nl. nlnetlabs.nl. 10200 NS open.nlnetlabs.nl. nlnetlabs.nl. 10200 RRSIG NS 3 2 10200 20080515132632 ( 20080415132632 3510 nlnetlabs.nl. AEYy9ZN3KEDHybhZbL3PoR71jMQuufKM1lej +obA6uL6CjYQAPrL9tk= ) ENTRY_END unbound-1.13.1/testdata/iter_prefetch_change2.rpl0000644000175000017500000001413214010434640021442 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" prefetch: "yes" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver prefetch and a moved domain 2. ; for slightly different query pattern. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 500 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. (before sale of domain) RANGE_BEGIN 0 30 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. 86400 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 86400 IN A 192.168.0.1 ENTRY_END RANGE_END ; a.gtld-servers.net. (after sale of domain) RANGE_BEGIN 40 500 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END RANGE_END ; ns.example.com. first owner RANGE_BEGIN 0 500 ADDRESS 192.168.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 300 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 300 IN A 192.168.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 300 IN A 10.1.1.1 SECTION AUTHORITY example.com. 300 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 300 IN A 192.168.0.1 ENTRY_END RANGE_END ; ns.example.com. new owner RANGE_BEGIN 0 500 ADDRESS 172.16.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION old-ns.example.com. IN A SECTION ANSWER old-ns.example.com. 86400 IN A 172.16.0.1 SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 86400 IN A 10.2.2.2 SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 300 IN A 10.1.1.1 SECTION AUTHORITY example.com. 300 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 300 IN A 192.168.0.1 ENTRY_END ; after 40 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 40 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 260 IN A 10.1.1.1 SECTION AUTHORITY example.com. 260 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 260 IN A 192.168.0.1 ENTRY_END ; after 230 we are 30 seconds before expiry, prefetch happens. STEP 50 TIME_PASSES ELAPSE 230 STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 30 IN A 10.1.1.1 SECTION AUTHORITY example.com. 30 IN NS old-ns.example.com. SECTION ADDITIONAL old-ns.example.com. 30 IN A 192.168.0.1 ENTRY_END STEP 80 TRAFFIC ; let traffic flow for prefetch to happen ; we updated from the old-ns. STEP 90 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 100 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 86400 IN A 10.2.2.2 SECTION AUTHORITY example.com. 86400 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86400 IN A 172.16.0.1 ENTRY_END ; the NS record times out after 31 seconds. STEP 160 TIME_PASSES ELAPSE 31 ; fetch it STEP 170 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 180 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 86369 IN A 10.2.2.2 SECTION AUTHORITY example.com. 86369 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86369 IN A 172.16.0.1 ENTRY_END ; a reply from cache STEP 190 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 200 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 86369 IN A 10.2.2.2 SECTION AUTHORITY example.com. 86369 IN NS new-ns.example.com. SECTION ADDITIONAL new-ns.example.com. 86369 IN A 172.16.0.1 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/subnet_format_ip4.crpl0000644000175000017500000000603114010434640021016 0ustar wouterwouterserver: send-client-subnet: 5.0.15.10 max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache validator iterator" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Subnet option ONLY in final query RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode opcode qtype qname ednsdata ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 5.0.15.10 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 5.0.15.10 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 5.0.15.10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ednsdata ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 15 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ENTRY_END RANGE_END ;; ---------------------------------------- STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b1_nameerror_nowc.rpl0000644000175000017500000001204714010434640022572 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.1 name error without wc NSEC3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NXDOMAIN SECTION QUESTION a.c.x.w.example. IN A SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR that covers the "next closer" name (c.x.w.example) ;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ;; NSEC3 RR that matches the closest encloser (x.w.example) ;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995 b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== ) ;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example) ;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m ;35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) ;35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.c.x.w.example. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION a.c.x.w.example. IN A SECTION ANSWER SECTION AUTHORITY ; example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) ; example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ; b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) ; b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== ) SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_nsec3_wild.rpl0000644000175000017500000002746714010434640020322 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "test-ns-signed.dev.internet.nl." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME test-ns-signed.dev.internet.nl ## this is the inline file /tmp/xxx.test-ns-signed.dev.internet.nl ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS test-ns-signed.dev.internet.nl test-ns-signed.dev.internet.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 4 14400 3600 604800 3600 test-ns-signed.dev.internet.nl. 3600 IN RRSIG SOA 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. ybb0Hc7NC+QOFEEv4cX2+Umlk+miiOAHmeP2Uwvg6lqfxkk+3g7yWBEKMinXjLKz0odWZ6fki6M/3yBPQX8SV0OCRY5gYvAHAjbxAIHozIM+5iwOkRQhNF1DRgQ3BLjL93f6T5e5Z4y1812iOpu4GYswXW/UTOZACXz2UiaCPAg= test-ns-signed.dev.internet.nl. 3600 IN NS ns.test-ns-signed.dev.internet.nl. test-ns-signed.dev.internet.nl. 3600 IN RRSIG NS 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. KqiwTF3hKm1ZHGbgx6MVzZYHlS1p7+Xrikx4izMHFbWiD6ki6lrJBJsnH9j/hH1cwHxjXslOeJh0hdBdbn8la0meZPsebOyUbEjoLPzRLzKNLDBuA4BUJnRGQJy21CX7XooXAMAmR8YFipO8CojI9EogU2m2o9YkfbpacFWQoTk= test-ns-signed.dev.internet.nl. 3600 IN DNSKEY 256 3 8 AwEAAc6c8tpMXBSOFLu/9n4aUUDK43wN4B7A2UDqZi0IOkyptxWCFghleyZeeN5uq6p9MoUt8lS73mFmIYC0ux5zBO3uVaJQ9u+00qRAEVg/RgBwa58y2f/zNtFV/f7mBSPcPTiEjUh0bwHSiTvUn/8JkrvjyAcbQMO0YOsRof5q6tzl ;{id = 32784 (zsk), size = 1024b} test-ns-signed.dev.internet.nl. 3600 IN DNSKEY 257 3 8 AwEAAdC0hBJP1U8lbZ6JFXn0ouK6VipiraN7I8oog62SuEd/fqAupys7A/Ih6WK/UoJorjlnccEL8euNMaS4kNogvoBrFx8ciIWKcbot5mtwc4WDr3cnR+HIZNCUFVkIxsMqE7HCD0yn0zhkB60shED+ZHs8zpyU+cjnsOSizxOnIY+F ;{id = 54502 (ksk), size = 1024b} test-ns-signed.dev.internet.nl. 3600 IN RRSIG DNSKEY 8 4 3600 20190205132351 20190108132351 54502 test-ns-signed.dev.internet.nl. X3qN+plfjf45FA4pr/tcUqUCR9ajDqwtNe4TS19WOJogVL/Gf/N5/ToOCrs3s+a7VrJl58WvSJquDM8xAS8f4oJggKgHFhopce8tMTGRxkRvJo4y+tt3vCveh/zjHLAnbOaBGA4CJ/IPhRqzHzcX/SjSv0EACWd6XpQIWogRv6c= test-ns-signed.dev.internet.nl. 3600 IN NSEC3PARAM 1 0 1 - test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3PARAM 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. A/1xUGO46uIz+9vjPGfWVD99akwU9bd/UlnVG9LPfoTzG7TMWSoZ4ksg8k8ub8K1TrkDmQokNHSW0Gt6qwoRh17c+p1h/SFlDVL83wgTc4NqG43OQjgGU9RV035XU+VESlO3lavifhlu8rHWBJTlhiXcMGq6H+zvoz4sx9p5GNM= 93stp7o7i5n9gb83uu7vv6h8qltk14ig.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - fee0c2kfhi6bnljce6vehaenqq3pbupu NS SOA RRSIG DNSKEY NSEC3PARAM 93stp7o7i5n9gb83uu7vv6h8qltk14ig.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. YoTRDQ7sSvERcY1WwAH4oRRR7DmaAwA8/H70jdMeSU4wsnM/VM03kDcc2sgq5edmHiZoTWnq7nEb/1Y7Ro0YrqTUQdYFZvXi6UjZQrKI9nqAGnhdXZWlZJHmYpn2+2Emd+bYHkwvKaPnfnnKjUoGVBH8Hly0HBYKPUF1/viquB0= kl94uofq16t2vlq0bmampf6e4o9k5hbi.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1 kl94uofq16t2vlq0bmampf6e4o9k5hbi.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. NI5zJ/k1kPVZ1abms5OoME/wazb77Ltduyk6ZevAnt4tKydZYwSsjEd0Ixknw9xnakCABn5rAYEXctARN0KCwCkNHR7TYlTAJT14hlDYjbad2u2HT9L1kzAnfj3BeLZl/LRADeMbTtzrkTSF3Dnezurb94fMnUnKt2hPfQfj560= fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. WIb3ISP1nlafbyWoWa4z7sG5IS+V86PyvEMHdD/64hgsFkrCu483XK7VNnBz28SL/631JXA1R19O+UxeWhTUyctp8QSt6cEZcMPY8b7yG97rNFNvhSw75rSXXt+JwgIYHPHQV5oqPtVmEpQM5SfJd+hs+Nn1bJcWB3UaESNNAMQ= *.a.b.test-ns-signed.dev.internet.nl. 3600 IN TXT "a" *.a.b.test-ns-signed.dev.internet.nl. 3600 IN RRSIG TXT 8 6 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. eNcJkQXdTO1z21od0sXbgqtABhhr/9tNC/Zx8zYbhXkfj7rufN71yk9xqgu6TG0MeJV26ISrqIGRVFJFmTRvO1LLxoKkEPhqe+08nqRztxXZajCV+dDeFoGIDcXJg6tAxB+MJznkKDtZPpIWvyt1WwdYfcMrGtE9AmR3K1/P/xE= 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 93stp7o7i5n9gb83uu7vv6h8qltk14ig TXT RRSIG 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. gtxoiTa3FRUqoRLvkWSxmWQ+DfijVd26gpKH3+GmGIcNB/sr/Cf8kERRwVVHvgzYIcvdJcys5b2LUXnZJwcdAlx7efZPWgNZzWxJrw6ES25LCWJOrp31isWn9FlAZGIbnpyEXxD2apBSmtyPnKbTgU6lHHS9jrsYHu4G8Zouv3k= ns.test-ns-signed.dev.internet.nl. 3600 IN A 185.49.141.11 ns.test-ns-signed.dev.internet.nl. 3600 IN RRSIG A 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. F9sXEVAmlRn+/84WbuvegiCwstNxMDMQLl0Obv2CTPpee4U6psbmXrlzczjjjkE6aLjsIHYdcXCzEWTrmukT+V9jzaGPRJvxNvC0ASWyzggAoh0Z++Hl4cVa9587o6I9ODayehFI9Pgdem+RVdb4zlWuzi9FmKXgeTlgWN54tPg= ns.test-ns-signed.dev.internet.nl. 3600 IN AAAA 2a04:b900:0:100::11 ns.test-ns-signed.dev.internet.nl. 3600 IN RRSIG AAAA 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. F1XRrx/QgfzJ1RS7d0m23QoIPx1G8WL1SrlTOm7pk5vWTL07w7HEw2TETblkjnitJGKfN9ebsIum/cDPUZc3UqLkguP2UCWpePnlllTJuwmG0Z+wyINIR4xF4PQlqttvzThBkD2JKWb/o0W8dQyXTj+jJ1vCZ0NjjA2N4+iJIQE= i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - kl94uofq16t2vlq0bmampf6e4o9k5hbi A AAAA RRSIG i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU= TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with NSEC3 wildcard ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION something.a.b.test-ns-signed.dev.internet.nl. IN TXT ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA DO NOERROR SECTION QUESTION something.a.b.test-ns-signed.dev.internet.nl. IN TXT SECTION ANSWER something.a.b.test-ns-signed.dev.internet.nl. IN TXT "a" something.a.b.test-ns-signed.dev.internet.nl. 3600 IN RRSIG TXT 8 6 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. eNcJkQXdTO1z21od0sXbgqtABhhr/9tNC/Zx8zYbhXkfj7rufN71yk9xqgu6TG0MeJV26ISrqIGRVFJFmTRvO1LLxoKkEPhqe+08nqRztxXZajCV+dDeFoGIDcXJg6tAxB+MJznkKDtZPpIWvyt1WwdYfcMrGtE9AmR3K1/P/xE= SECTION AUTHORITY i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - KL94UOFQ16T2VLQ0BMAMPF6E4O9K5HBI A AAAA RRSIG i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU= ENTRY_END ; Check that the reply for a wildcard nodata answer contains the NSEC3s. ; qname denial NSEC3, closest encloser NSEC3, and type bitmap NSEC3. STEP 30 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION something.a.b.test-ns-signed.dev.internet.nl. IN AAAA ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA DO NOERROR SECTION QUESTION something.a.b.test-ns-signed.dev.internet.nl. IN AAAA SECTION ANSWER SECTION AUTHORITY test-ns-signed.dev.internet.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 4 14400 3600 604800 3600 test-ns-signed.dev.internet.nl. 3600 IN RRSIG SOA 8 4 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. ybb0Hc7NC+QOFEEv4cX2+Umlk+miiOAHmeP2Uwvg6lqfxkk+3g7yWBEKMinXjLKz0odWZ6fki6M/3yBPQX8SV0OCRY5gYvAHAjbxAIHozIM+5iwOkRQhNF1DRgQ3BLjL93f6T5e5Z4y1812iOpu4GYswXW/UTOZACXz2UiaCPAg= ;{id = 32784} 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - 93stp7o7i5n9gb83uu7vv6h8qltk14ig TXT RRSIG 7ag3p2pfrvq09dpn63cvga8ub1rnrrg1.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. gtxoiTa3FRUqoRLvkWSxmWQ+DfijVd26gpKH3+GmGIcNB/sr/Cf8kERRwVVHvgzYIcvdJcys5b2LUXnZJwcdAlx7efZPWgNZzWxJrw6ES25LCWJOrp31isWn9FlAZGIbnpyEXxD2apBSmtyPnKbTgU6lHHS9jrsYHu4G8Zouv3k= ;{id = 32784} fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv fee0c2kfhi6bnljce6vehaenqq3pbupu.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. WIb3ISP1nlafbyWoWa4z7sG5IS+V86PyvEMHdD/64hgsFkrCu483XK7VNnBz28SL/631JXA1R19O+UxeWhTUyctp8QSt6cEZcMPY8b7yG97rNFNvhSw75rSXXt+JwgIYHPHQV5oqPtVmEpQM5SfJd+hs+Nn1bJcWB3UaESNNAMQ= ;{id = 32784} i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN NSEC3 1 0 1 - kl94uofq16t2vlq0bmampf6e4o9k5hbi A AAAA RRSIG i6pi4e3o98e7vtkpjfhqn7g77d3mjcnv.test-ns-signed.dev.internet.nl. 3600 IN RRSIG NSEC3 8 5 3600 20190205132351 20190108132351 32784 test-ns-signed.dev.internet.nl. xLysIqn3r3rdHE3GvwVjZwUyuFClhkhgrQdwyc66RuHKE3MfSuhVr9cHTCJzhipF5TwQTbUpLOr74r99bzdiIY8Xkgjy2M0nc76v1ObSGJdPPjGTevbhDOnavUURwOR/q0NqqO2iPrgFjOVMZ+8uwRJtCty2iAVZfVG+qDzs8hU= ;{id = 32784} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_packets.40000644000175000017500000020235614010434640017276 0ustar wouterwouter; DNSSEC test packets. ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 2e 15 85 00 00 01 00 01 00 03 00 05 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 01 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 01 00 01 00 01 51 80 00 04 d5 9a e0 01 09 6e ; 41- 60 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 ; 61- 80 00 18 03 6e 73 37 0f 64 6f 6d 61 69 6e 2d 72 65 67 69 73 74 ; 81- 100 72 79 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 101- 120 00 02 00 01 00 01 51 80 00 13 04 6f 70 65 6e 09 6e 6c 6e 65 ; 121- 140 74 6c 61 62 73 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 141- 160 6e 6c 00 00 02 00 01 00 01 51 80 00 11 05 6f 6d 76 61 6c 06 ; 161- 180 74 65 64 6e 65 74 02 6e 6c 00 04 6f 70 65 6e 09 6e 6c 6e 65 ; 181- 200 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 00 01 51 80 00 04 d5 ; 201- 220 9a e0 01 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e ; 221- 240 6c 00 00 1c 00 01 00 01 51 80 00 10 20 01 07 b8 02 06 00 01 ; 241- 260 00 00 00 00 00 00 00 53 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c ; 261- 280 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 00 10 20 01 07 ; 281- 300 b8 02 06 00 01 00 00 00 00 00 00 00 01 05 6f 6d 76 61 6c 06 ; 301- 320 74 65 64 6e 65 74 02 6e 6c 00 00 01 00 01 00 00 70 80 00 04 ; 321- 340 d5 9a e0 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c ; 341- 360 00 00 1c 00 01 00 00 70 80 00 10 20 01 07 b8 02 06 00 01 02 ; 361- 380 00 39 ff fe 59 b1 87 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 4d 79 85 00 00 01 00 02 00 04 00 08 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 01 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 01 00 01 00 01 51 80 00 04 d5 9a e0 01 09 6e ; 41- 60 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 ; 61- 80 00 a0 00 01 05 02 00 01 51 80 46 3d 18 29 46 15 8b 29 ab 0f ; 81- 100 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 46 0f 5f 69 aa fe ; 101- 120 22 ae bf 65 52 2f 18 39 d7 3c 76 6b b0 4d a8 e4 32 46 60 e2 ; 121- 140 3b 68 5f 3f b1 3a 7b 4f 3f 47 62 45 89 19 60 a8 04 53 19 9b ; 141- 160 6c 7d 5a eb fe ce b3 2e 5b 2d 7d e5 87 3f 53 f7 3a ab c3 39 ; 161- 180 83 bb 1a 77 a1 1a 36 4d bc 46 4d 28 3c ba 93 70 d7 dd dc 2e ; 181- 200 f9 9b ea eb a8 75 8e 6b a2 03 41 4f f6 36 77 8a 61 87 72 b3 ; 201- 220 4f db 96 20 19 04 93 f8 63 cb 0a 55 cf 25 95 9c fd 94 e6 90 ; 221- 240 7f 5f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 ; 241- 260 00 01 51 80 00 18 03 6e 73 37 0f 64 6f 6d 61 69 6e 2d 72 65 ; 261- 280 67 69 73 74 72 79 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 ; 281- 300 02 6e 6c 00 00 02 00 01 00 01 51 80 00 13 04 6f 70 65 6e 09 ; 301- 320 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 09 6e 6c 6e 65 74 6c ; 321- 340 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 11 05 6f 6d ; 341- 360 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 09 6e 6c 6e 65 74 ; 361- 380 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 02 ; 381- 400 05 02 00 01 51 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e ; 401- 420 65 74 6c 61 62 73 02 6e 6c 00 ad 07 18 03 3f 18 f6 5c 35 8d ; 421- 440 5b 89 d8 cf 6a 11 fc 3c 32 6b bc 06 e3 c4 c8 ec 47 83 1d ab ; 441- 460 a0 ea e3 af 43 b0 f5 ec aa 5d 4e aa fa 79 6f 1a 2d fc 1f 44 ; 461- 480 81 7a 61 a2 49 76 0b 8e 9d 9f 34 95 66 56 89 99 dc f6 31 6e ; 481- 500 42 bb 16 45 93 60 44 7b 19 3a c4 e6 9a ab 69 9a b5 84 8f 86 ; 501- 520 b5 17 af c1 e0 4c b1 33 eb 67 cc cf 5b f6 e9 27 ff f3 d9 d0 ; 521- 540 c5 8e f0 91 b0 ab 77 93 18 e7 7e dc 44 1e f1 73 72 7e 04 6f ; 541- 560 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 ; 561- 580 01 00 01 51 80 00 04 d5 9a e0 01 04 6f 70 65 6e 09 6e 6c 6e ; 581- 600 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 00 10 ; 601- 620 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 53 04 6f 70 65 ; 621- 640 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 ; 641- 660 01 51 80 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 ; 661- 680 01 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 00 01 ; 681- 700 00 01 00 00 70 80 00 04 d5 9a e0 11 05 6f 6d 76 61 6c 06 74 ; 701- 720 65 64 6e 65 74 02 6e 6c 00 00 1c 00 01 00 00 70 80 00 10 20 ; 721- 740 01 07 b8 02 06 00 01 02 00 39 ff fe 59 b1 87 04 6f 70 65 6e ; 741- 760 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 ; 761- 780 51 80 00 a0 00 01 05 03 00 01 51 80 46 3d 18 29 46 15 8b 29 ; 781- 800 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 33 42 f9 d1 ; 801- 820 94 cb d3 27 dc e3 6b fd 80 34 a8 c0 ab 2a 76 f8 ef 9d c2 f7 ; 821- 840 b4 08 2f ff 3c 35 c1 b4 13 46 5b 05 38 e7 97 96 41 b9 01 ff ; 841- 860 8c 0b de 62 78 29 68 2f fe fb 53 7a 61 92 3f 89 79 3e df 49 ; 861- 880 cc ad a3 f7 45 13 7b 99 4c 0b 74 06 ee 1e 97 5a fc 6b 74 60 ; 881- 900 6d a7 68 24 5f 01 f8 5a e2 84 ad 18 cf 52 ff f7 a5 66 84 76 ; 901- 920 b0 34 5c 42 8f c6 58 c2 38 c4 8c 6b 7a 72 90 4c 9c 77 90 d4 ; 921- 940 dc cf cf 2a 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 941- 960 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 1c 05 03 00 01 51 ; 961- 980 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 ; 981-1000 73 02 6e 6c 00 53 09 41 45 b5 88 59 88 6e 2a 21 8e 42 ac 80 ; 1001-1020 7c e2 9f 2e d4 f6 48 3f 70 40 d8 61 1d 3f ea e2 ba ad 20 83 ; 1021-1040 80 bc 7e 3f 40 e7 41 74 9c c3 7c 51 30 e6 f2 99 50 0a 3f d9 ; 1041-1060 26 5a fd d2 38 09 79 e5 27 f1 25 80 e5 13 58 a5 2b 95 70 c3 ; 1061-1080 53 cd ee 0e c3 07 32 f6 73 17 60 b2 1d 3a b0 a4 0c 8f ef c3 ; 1081-1100 65 5e 87 01 98 51 51 a9 fe c0 f7 b2 0d 02 d8 29 40 b2 a8 c4 ; 1101-1120 8d 52 da 36 f9 98 f9 c4 6d 6e 1b ed 42 00 00 29 10 00 00 00 ; 1121-1140 80 00 00 00 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- b2 88 85 03 00 01 00 00 00 01 00 00 04 7a 61 72 66 09 6e 6c ; 1- 20 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 09 6e 6c 6e 65 ; 21- 40 74 6c 61 62 73 02 6e 6c 00 00 06 00 01 00 00 46 50 00 40 04 ; 41- 60 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 0a 68 ; 61- 80 6f 73 74 6d 61 73 74 65 72 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 81- 100 6e 6c 00 77 a1 02 58 00 00 70 80 00 00 1c 20 00 09 3a 80 00 ; 101- 120 00 46 50 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1c be 85 03 00 01 00 00 00 06 00 01 04 7a 61 72 66 09 6e 6c ; 1- 20 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 09 6e 6c 6e 65 ; 21- 40 74 6c 61 62 73 02 6e 6c 00 00 06 00 01 00 00 46 50 00 40 04 ; 41- 60 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 0a 68 ; 61- 80 6f 73 74 6d 61 73 74 65 72 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 81- 100 6e 6c 00 77 a1 02 58 00 00 70 80 00 00 1c 20 00 09 3a 80 00 ; 101- 120 00 46 50 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 ; 121- 140 01 00 00 46 50 00 a0 00 06 05 02 00 01 51 80 46 3d 18 29 46 ; 141- 160 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 81 ; 161- 180 de 4b b8 1d 81 1f 95 cb ca 8e fa 04 bc b6 a4 05 7f b1 7f de ; 181- 200 e7 bd cc 8f 39 63 1d 0a 9a ac 7c b7 eb b5 e5 e8 38 a0 d6 9d ; 201- 220 ec 34 06 43 9b 5a 4f 61 f3 18 21 32 c7 79 43 6f 99 32 b8 25 ; 221- 240 54 3b 19 6c 25 d3 3e ef ec 2a d1 1e 4a 86 f6 17 ca 84 07 44 ; 241- 260 73 a2 39 df d1 66 09 c1 e2 21 83 bf 79 73 2b 8d 2d bb bf 37 ; 261- 280 c5 e0 95 a9 2a f3 79 75 67 1d 90 29 5c 57 06 07 4b 69 25 05 ; 281- 300 dd 63 05 91 c5 81 0d 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c ; 301- 320 00 00 2f 00 01 00 00 46 50 00 21 04 5f 73 69 70 04 5f 75 64 ; 321- 340 70 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 07 62 01 80 ; 341- 360 08 10 03 80 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e ; 361- 380 00 01 00 00 46 50 00 a0 00 2f 05 02 00 00 46 50 46 3d 18 29 ; 381- 400 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 401- 420 53 04 6e cf ce b4 19 e1 40 c5 47 36 02 c5 1b fa ab 43 57 ec ; 421- 440 d1 57 da 02 d6 13 16 b1 4d 15 58 d1 a6 cb 5d 27 67 71 33 c2 ; 441- 460 87 16 12 af 45 99 7f 95 74 19 71 e3 ea 33 b5 60 39 21 15 11 ; 461- 480 af 5d df 33 f3 c4 9d 9c 62 9f ba f8 10 f6 18 4c eb 92 84 8a ; 481- 500 85 5c a3 83 aa 00 01 c8 48 b7 5b de 80 9a 38 00 3d d9 cd f5 ; 501- 520 09 68 06 7f 5c 83 4e 2c a1 99 76 53 dc 01 ac 06 f1 ed 9a a4 ; 521- 540 d3 03 17 33 4b 71 bd 94 03 77 77 77 09 6e 6c 6e 65 74 6c 61 ; 541- 560 62 73 02 6e 6c 00 00 2f 00 01 00 00 46 50 00 16 09 6e 6c 6e ; 561- 580 65 74 6c 61 62 73 02 6e 6c 00 00 06 40 00 00 08 00 03 03 77 ; 581- 600 77 77 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 ; 601- 620 00 00 46 50 00 a0 00 2f 05 03 00 00 46 50 46 3d 18 29 46 15 ; 621- 640 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 3f f2 ; 641- 660 fd 50 50 3a ea 29 bf 75 26 28 0c 22 72 29 77 5a 8f ef 2f 34 ; 661- 680 96 18 27 32 79 57 1e 08 ce 04 0f 22 c8 4e 32 db 1d 90 c6 68 ; 681- 700 0c 23 c8 43 44 2a ab fe e6 bb 90 3a 73 7d 79 44 63 93 e8 97 ; 701- 720 4f aa 51 f5 91 c2 ee d3 13 ea 94 68 4b 1d fc 9c 8e f5 1a 7b ; 721- 740 5f f6 09 e8 94 58 7e 26 4e 00 9e 98 a5 b9 c7 4d 34 8c f0 1e ; 741- 760 8e 74 f1 6d 54 ef d0 45 70 57 5a d0 fe 3d 54 78 e0 96 70 0e ; 761- 780 a7 b8 e2 be 13 00 00 00 29 10 00 00 00 80 00 00 00 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 95 7c 85 00 00 01 00 00 00 01 00 00 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 07 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 06 00 01 00 00 46 50 00 40 04 6f 70 65 6e 09 ; 41- 60 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 0a 68 6f 73 74 6d 61 ; 61- 80 73 74 65 72 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 77 a1 ; 81- 100 02 58 00 00 70 80 00 00 1c 20 00 09 3a 80 00 00 46 50 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 78 1a 85 00 00 01 00 00 00 04 00 01 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 07 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 06 00 01 00 00 46 50 00 40 04 6f 70 65 6e 09 ; 41- 60 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 0a 68 6f 73 74 6d 61 ; 61- 80 73 74 65 72 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 77 a1 ; 81- 100 02 58 00 00 70 80 00 00 1c 20 00 09 3a 80 00 00 46 50 09 6e ; 101- 120 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 00 46 50 ; 121- 140 00 a0 00 06 05 02 00 01 51 80 46 3d 18 29 46 15 8b 29 ab 0f ; 141- 160 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 81 de 4b b8 1d 81 ; 161- 180 1f 95 cb ca 8e fa 04 bc b6 a4 05 7f b1 7f de e7 bd cc 8f 39 ; 181- 200 63 1d 0a 9a ac 7c b7 eb b5 e5 e8 38 a0 d6 9d ec 34 06 43 9b ; 201- 220 5a 4f 61 f3 18 21 32 c7 79 43 6f 99 32 b8 25 54 3b 19 6c 25 ; 221- 240 d3 3e ef ec 2a d1 1e 4a 86 f6 17 ca 84 07 44 73 a2 39 df d1 ; 241- 260 66 09 c1 e2 21 83 bf 79 73 2b 8d 2d bb bf 37 c5 e0 95 a9 2a ; 261- 280 f3 79 75 67 1d 90 29 5c 57 06 07 4b 69 25 05 dd 63 05 91 c5 ; 281- 300 81 0d 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2f 00 01 ; 301- 320 00 00 46 50 00 21 04 5f 73 69 70 04 5f 75 64 70 09 6e 6c 6e ; 321- 340 65 74 6c 61 62 73 02 6e 6c 00 00 07 62 01 80 08 10 03 80 09 ; 341- 360 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 00 46 ; 361- 380 50 00 a0 00 2f 05 02 00 00 46 50 46 3d 18 29 46 15 8b 29 ab ; 381- 400 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 53 04 6e cf ce ; 401- 420 b4 19 e1 40 c5 47 36 02 c5 1b fa ab 43 57 ec d1 57 da 02 d6 ; 421- 440 13 16 b1 4d 15 58 d1 a6 cb 5d 27 67 71 33 c2 87 16 12 af 45 ; 441- 460 99 7f 95 74 19 71 e3 ea 33 b5 60 39 21 15 11 af 5d df 33 f3 ; 461- 480 c4 9d 9c 62 9f ba f8 10 f6 18 4c eb 92 84 8a 85 5c a3 83 aa ; 481- 500 00 01 c8 48 b7 5b de 80 9a 38 00 3d d9 cd f5 09 68 06 7f 5c ; 501- 520 83 4e 2c a1 99 76 53 dc 01 ac 06 f1 ed 9a a4 d3 03 17 33 4b ; 521- 540 71 bd 94 00 00 29 10 00 00 00 80 00 00 00 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0d 5b 85 00 00 01 00 01 00 03 00 05 04 64 69 76 61 09 6e 6c ; 1- 20 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 04 64 69 76 61 ; 21- 40 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 00 01 ; 41- 60 51 80 00 04 d5 9a e0 26 09 6e 6c 6e 65 74 6c 61 62 73 02 6e ; 61- 80 6c 00 00 02 00 01 00 01 51 80 00 18 03 6e 73 37 0f 64 6f 6d ; 81- 100 61 69 6e 2d 72 65 67 69 73 74 72 79 02 6e 6c 00 09 6e 6c 6e ; 101- 120 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 13 ; 121- 140 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 09 ; 141- 160 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 ; 161- 180 80 00 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 ; 181- 200 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 ; 201- 220 01 00 01 00 01 51 80 00 04 d5 9a e0 01 04 6f 70 65 6e 09 6e ; 221- 240 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 ; 241- 260 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 01 04 6f ; 261- 280 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 ; 281- 300 01 00 01 51 80 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 ; 301- 320 00 00 53 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 ; 321- 340 00 01 00 01 00 00 70 80 00 04 d5 9a e0 11 05 6f 6d 76 61 6c ; 341- 360 06 74 65 64 6e 65 74 02 6e 6c 00 00 1c 00 01 00 00 70 80 00 ; 361- 380 10 20 01 07 b8 02 06 00 01 02 00 39 ff fe 59 b1 87 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0e 87 85 00 00 01 00 02 00 04 00 08 04 64 69 76 61 09 6e 6c ; 1- 20 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 04 64 69 76 61 ; 21- 40 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 00 01 ; 41- 60 51 80 00 04 d5 9a e0 26 04 64 69 76 61 09 6e 6c 6e 65 74 6c ; 61- 80 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 01 05 ; 81- 100 03 00 01 51 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 ; 101- 120 74 6c 61 62 73 02 6e 6c 00 7d 90 9b 21 31 d6 0d b5 91 2b b1 ; 121- 140 e8 ff 90 4a 39 6f 61 bd 50 61 ee 64 8c 50 99 4a 95 04 cd 9e ; 141- 160 48 d8 d4 13 2a 7f 3a f2 ff 5f e5 2b ec 58 56 b7 e7 95 b0 89 ; 161- 180 23 84 be 57 bd fd 85 59 2e b2 a1 dd 0c 59 23 63 9d 77 68 b0 ; 181- 200 1d 37 84 2b 47 1b 70 00 04 2e 27 56 3c 39 37 e9 9e 93 74 34 ; 201- 220 1b d9 46 7a 8f cf b5 c2 03 b8 fe 65 97 f9 0f 09 04 f4 6e fd ; 221- 240 38 fc 47 c6 e0 b6 2f 21 77 d1 f1 05 65 6a 87 7f 26 09 6e 6c ; 241- 260 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 ; 261- 280 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 09 6e ; 281- 300 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 ; 301- 320 00 18 03 6e 73 37 0f 64 6f 6d 61 69 6e 2d 72 65 67 69 73 74 ; 321- 340 72 79 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 341- 360 00 02 00 01 00 01 51 80 00 13 04 6f 70 65 6e 09 6e 6c 6e 65 ; 361- 380 74 6c 61 62 73 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 381- 400 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 02 05 02 00 01 51 ; 401- 420 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 ; 421- 440 73 02 6e 6c 00 ad 07 18 03 3f 18 f6 5c 35 8d 5b 89 d8 cf 6a ; 441- 460 11 fc 3c 32 6b bc 06 e3 c4 c8 ec 47 83 1d ab a0 ea e3 af 43 ; 461- 480 b0 f5 ec aa 5d 4e aa fa 79 6f 1a 2d fc 1f 44 81 7a 61 a2 49 ; 481- 500 76 0b 8e 9d 9f 34 95 66 56 89 99 dc f6 31 6e 42 bb 16 45 93 ; 501- 520 60 44 7b 19 3a c4 e6 9a ab 69 9a b5 84 8f 86 b5 17 af c1 e0 ; 521- 540 4c b1 33 eb 67 cc cf 5b f6 e9 27 ff f3 d9 d0 c5 8e f0 91 b0 ; 541- 560 ab 77 93 18 e7 7e dc 44 1e f1 73 72 7e 04 6f 70 65 6e 09 6e ; 561- 580 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 00 01 51 80 ; 581- 600 00 04 d5 9a e0 01 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 ; 601- 620 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 00 10 20 01 07 b8 02 ; 621- 640 06 00 01 00 00 00 00 00 00 00 01 04 6f 70 65 6e 09 6e 6c 6e ; 641- 660 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 00 10 ; 661- 680 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 53 05 6f 6d 76 ; 681- 700 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 00 01 00 01 00 00 70 ; 701- 720 80 00 04 d5 9a e0 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 ; 721- 740 02 6e 6c 00 00 1c 00 01 00 00 70 80 00 10 20 01 07 b8 02 06 ; 741- 760 00 01 02 00 39 ff fe 59 b1 87 04 6f 70 65 6e 09 6e 6c 6e 65 ; 761- 780 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 ; 781- 800 01 05 03 00 01 51 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c ; 801- 820 6e 65 74 6c 61 62 73 02 6e 6c 00 33 42 f9 d1 94 cb d3 27 dc ; 821- 840 e3 6b fd 80 34 a8 c0 ab 2a 76 f8 ef 9d c2 f7 b4 08 2f ff 3c ; 841- 860 35 c1 b4 13 46 5b 05 38 e7 97 96 41 b9 01 ff 8c 0b de 62 78 ; 861- 880 29 68 2f fe fb 53 7a 61 92 3f 89 79 3e df 49 cc ad a3 f7 45 ; 881- 900 13 7b 99 4c 0b 74 06 ee 1e 97 5a fc 6b 74 60 6d a7 68 24 5f ; 901- 920 01 f8 5a e2 84 ad 18 cf 52 ff f7 a5 66 84 76 b0 34 5c 42 8f ; 921- 940 c6 58 c2 38 c4 8c 6b 7a 72 90 4c 9c 77 90 d4 dc cf cf 2a 04 ; 941- 960 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e ; 961- 980 00 01 00 01 51 80 00 a0 00 1c 05 03 00 01 51 80 46 3d 18 29 ; 981-1000 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 1001-1020 53 09 41 45 b5 88 59 88 6e 2a 21 8e 42 ac 80 7c e2 9f 2e d4 ; 1021-1040 f6 48 3f 70 40 d8 61 1d 3f ea e2 ba ad 20 83 80 bc 7e 3f 40 ; 1041-1060 e7 41 74 9c c3 7c 51 30 e6 f2 99 50 0a 3f d9 26 5a fd d2 38 ; 1061-1080 09 79 e5 27 f1 25 80 e5 13 58 a5 2b 95 70 c3 53 cd ee 0e c3 ; 1081-1100 07 32 f6 73 17 60 b2 1d 3a b0 a4 0c 8f ef c3 65 5e 87 01 98 ; 1101-1120 51 51 a9 fe c0 f7 b2 0d 02 d8 29 40 b2 a8 c4 8d 52 da 36 f9 ; 1121-1140 98 f9 c4 6d 6e 1b ed 42 00 00 29 10 00 00 00 80 00 00 00 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 5c 21 87 00 00 01 00 02 00 00 00 00 04 64 69 76 61 09 6e 6c ; 1- 20 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 04 64 69 76 61 ; 21- 40 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 ; 41- 60 51 80 00 a0 00 01 05 03 00 01 51 80 46 3d 18 29 46 15 8b 29 ; 61- 80 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 7d 90 9b 21 ; 81- 100 31 d6 0d b5 91 2b b1 e8 ff 90 4a 39 6f 61 bd 50 61 ee 64 8c ; 101- 120 50 99 4a 95 04 cd 9e 48 d8 d4 13 2a 7f 3a f2 ff 5f e5 2b ec ; 121- 140 58 56 b7 e7 95 b0 89 23 84 be 57 bd fd 85 59 2e b2 a1 dd 0c ; 141- 160 59 23 63 9d 77 68 b0 1d 37 84 2b 47 1b 70 00 04 2e 27 56 3c ; 161- 180 39 37 e9 9e 93 74 34 1b d9 46 7a 8f cf b5 c2 03 b8 fe 65 97 ; 181- 200 f9 0f 09 04 f4 6e fd 38 fc 47 c6 e0 b6 2f 21 77 d1 f1 05 65 ; 201- 220 6a 87 7f 26 04 64 69 76 61 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 221- 240 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 1c 05 03 00 01 51 ; 241- 260 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 ; 261- 280 73 02 6e 6c 00 de 55 75 bf 56 52 fb 36 13 2a c6 1b cd 95 d1 ; 281- 300 3f 28 f8 60 f8 b9 d5 e1 4b ae 51 e5 b2 3c c3 87 43 53 04 19 ; 301- 320 13 64 42 86 62 9c f3 b7 af b7 52 29 c5 cd 53 d2 5e 70 cb 59 ; 321- 340 4e 66 7b 02 d5 d6 29 46 1a 2a 6c 4b 22 81 b8 93 65 0d 9d 12 ; 341- 360 de e8 9d 59 41 17 d2 c4 fd d2 76 92 fc fb 83 3d 97 85 06 f9 ; 361- 380 f5 08 c8 dc 2b d4 7c e0 da eb 96 ff 5a be 15 c3 17 4c b3 a7 ; 381- 400 c3 54 84 55 b6 be f2 cd 05 ca 99 5d c8 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- f6 7d 85 00 00 01 00 03 00 04 00 08 04 64 69 76 61 09 6e 6c ; 1- 20 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 04 64 69 76 61 ; 21- 40 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 ; 41- 60 51 80 00 a0 00 01 05 03 00 01 51 80 46 3d 18 29 46 15 8b 29 ; 61- 80 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 7d 90 9b 21 ; 81- 100 31 d6 0d b5 91 2b b1 e8 ff 90 4a 39 6f 61 bd 50 61 ee 64 8c ; 101- 120 50 99 4a 95 04 cd 9e 48 d8 d4 13 2a 7f 3a f2 ff 5f e5 2b ec ; 121- 140 58 56 b7 e7 95 b0 89 23 84 be 57 bd fd 85 59 2e b2 a1 dd 0c ; 141- 160 59 23 63 9d 77 68 b0 1d 37 84 2b 47 1b 70 00 04 2e 27 56 3c ; 161- 180 39 37 e9 9e 93 74 34 1b d9 46 7a 8f cf b5 c2 03 b8 fe 65 97 ; 181- 200 f9 0f 09 04 f4 6e fd 38 fc 47 c6 e0 b6 2f 21 77 d1 f1 05 65 ; 201- 220 6a 87 7f 26 04 64 69 76 61 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 221- 240 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 1c 05 03 00 01 51 ; 241- 260 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 ; 261- 280 73 02 6e 6c 00 de 55 75 bf 56 52 fb 36 13 2a c6 1b cd 95 d1 ; 281- 300 3f 28 f8 60 f8 b9 d5 e1 4b ae 51 e5 b2 3c c3 87 43 53 04 19 ; 301- 320 13 64 42 86 62 9c f3 b7 af b7 52 29 c5 cd 53 d2 5e 70 cb 59 ; 321- 340 4e 66 7b 02 d5 d6 29 46 1a 2a 6c 4b 22 81 b8 93 65 0d 9d 12 ; 341- 360 de e8 9d 59 41 17 d2 c4 fd d2 76 92 fc fb 83 3d 97 85 06 f9 ; 361- 380 f5 08 c8 dc 2b d4 7c e0 da eb 96 ff 5a be 15 c3 17 4c b3 a7 ; 381- 400 c3 54 84 55 b6 be f2 cd 05 ca 99 5d c8 04 64 69 76 61 09 6e ; 401- 420 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 00 46 50 ; 421- 440 00 a0 00 2f 05 03 00 00 46 50 46 3d 18 29 46 15 8b 29 ab 0f ; 441- 460 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 5a 75 f4 5c 4f fc ; 461- 480 4e 1b 16 09 6f a9 12 d2 ac c3 ef 00 4f 45 f8 f9 e7 d5 77 58 ; 481- 500 2a 2a da cd cd 7a a3 0b 4c 18 30 d1 c2 89 f6 e3 49 64 9c 81 ; 501- 520 f1 a8 e9 f5 29 35 e0 f0 c9 e7 33 42 3d d5 c5 0c b8 da e6 27 ; 521- 540 29 45 96 df 89 5d 32 30 d6 8b b0 ee 07 d7 63 17 17 3a 44 c5 ; 541- 560 1a 13 bf 72 a8 ec fe 2d 88 82 8a 3b 43 4a 30 a0 af 87 64 33 ; 561- 580 23 42 ec 46 0d 19 f2 d9 34 31 ee 6b 11 f3 10 22 49 8a d7 5f ; 581- 600 15 65 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 ; 601- 620 00 01 51 80 00 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 ; 621- 640 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 ; 641- 660 01 00 01 51 80 00 18 03 6e 73 37 0f 64 6f 6d 61 69 6e 2d 72 ; 661- 680 65 67 69 73 74 72 79 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 ; 681- 700 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 13 04 6f 70 65 6e ; 701- 720 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 09 6e 6c 6e 65 74 ; 721- 740 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 02 ; 741- 760 05 02 00 01 51 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e ; 761- 780 65 74 6c 61 62 73 02 6e 6c 00 ad 07 18 03 3f 18 f6 5c 35 8d ; 781- 800 5b 89 d8 cf 6a 11 fc 3c 32 6b bc 06 e3 c4 c8 ec 47 83 1d ab ; 801- 820 a0 ea e3 af 43 b0 f5 ec aa 5d 4e aa fa 79 6f 1a 2d fc 1f 44 ; 821- 840 81 7a 61 a2 49 76 0b 8e 9d 9f 34 95 66 56 89 99 dc f6 31 6e ; 841- 860 42 bb 16 45 93 60 44 7b 19 3a c4 e6 9a ab 69 9a b5 84 8f 86 ; 861- 880 b5 17 af c1 e0 4c b1 33 eb 67 cc cf 5b f6 e9 27 ff f3 d9 d0 ; 881- 900 c5 8e f0 91 b0 ab 77 93 18 e7 7e dc 44 1e f1 73 72 7e 04 6f ; 901- 920 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 ; 921- 940 01 00 01 51 80 00 04 d5 9a e0 01 04 6f 70 65 6e 09 6e 6c 6e ; 941- 960 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 00 10 ; 961- 980 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 01 04 6f 70 65 ; 981-1000 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 ; 1001-1020 01 51 80 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 ; 1021-1040 53 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 00 01 ; 1041-1060 00 01 00 00 70 80 00 04 d5 9a e0 11 05 6f 6d 76 61 6c 06 74 ; 1061-1080 65 64 6e 65 74 02 6e 6c 00 00 1c 00 01 00 00 70 80 00 10 20 ; 1081-1100 01 07 b8 02 06 00 01 02 00 39 ff fe 59 b1 87 04 6f 70 65 6e ; 1101-1120 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 ; 1121-1140 51 80 00 a0 00 01 05 03 00 01 51 80 46 3d 18 29 46 15 8b 29 ; 1141-1160 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 33 42 f9 d1 ; 1161-1180 94 cb d3 27 dc e3 6b fd 80 34 a8 c0 ab 2a 76 f8 ef 9d c2 f7 ; 1181-1200 b4 08 2f ff 3c 35 c1 b4 13 46 5b 05 38 e7 97 96 41 b9 01 ff ; 1201-1220 8c 0b de 62 78 29 68 2f fe fb 53 7a 61 92 3f 89 79 3e df 49 ; 1221-1240 cc ad a3 f7 45 13 7b 99 4c 0b 74 06 ee 1e 97 5a fc 6b 74 60 ; 1241-1260 6d a7 68 24 5f 01 f8 5a e2 84 ad 18 cf 52 ff f7 a5 66 84 76 ; 1261-1280 b0 34 5c 42 8f c6 58 c2 38 c4 8c 6b 7a 72 90 4c 9c 77 90 d4 ; 1281-1300 dc cf cf 2a 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 1301-1320 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 1c 05 03 00 01 51 ; 1321-1340 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 ; 1341-1360 73 02 6e 6c 00 53 09 41 45 b5 88 59 88 6e 2a 21 8e 42 ac 80 ; 1361-1380 7c e2 9f 2e d4 f6 48 3f 70 40 d8 61 1d 3f ea e2 ba ad 20 83 ; 1381-1400 80 bc 7e 3f 40 e7 41 74 9c c3 7c 51 30 e6 f2 99 50 0a 3f d9 ; 1401-1420 26 5a fd d2 38 09 79 e5 27 f1 25 80 e5 13 58 a5 2b 95 70 c3 ; 1421-1440 53 cd ee 0e c3 07 32 f6 73 17 60 b2 1d 3a b0 a4 0c 8f ef c3 ; 1441-1460 65 5e 87 01 98 51 51 a9 fe c0 f7 b2 0d 02 d8 29 40 b2 a8 c4 ; 1461-1480 8d 52 da 36 f9 98 f9 c4 6d 6e 1b ed 42 00 00 29 10 00 00 00 ; 1481-1500 80 00 00 00 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- f6 7d 85 00 00 01 00 01 00 03 00 05 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 30 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 30 00 01 00 01 51 80 00 86 01 01 03 05 01 03 ; 41- 60 f3 cd 35 8c cf ca 92 58 84 25 7d 19 cf 72 4c 76 06 25 66 91 ; 61- 80 53 7a 2c fb a9 3b 79 9b cf b1 61 2d 29 e6 db a9 fa 88 6f 4d ; 81- 100 2d bc bd ec 98 b8 e7 76 96 65 8d cc e7 fc 49 05 23 92 da f5 ; 101- 120 ad 72 8d ad f0 2d 3e c5 e3 b5 6d cf dd e9 94 f2 df 60 c7 72 ; 121- 140 1a 56 ea b0 c7 d6 fa 7c e8 b9 7e 85 ad 2d 9b 0c b2 f5 03 fb ; 141- 160 cb 66 d5 c3 9c d2 6c 50 ab 79 f9 3c a8 25 01 81 f1 e6 f5 b1 ; 161- 180 f3 30 6d 54 05 8b 44 21 09 6e 6c 6e 65 74 6c 61 62 73 02 6e ; 181- 200 6c 00 00 02 00 01 00 01 51 80 00 18 03 6e 73 37 0f 64 6f 6d ; 201- 220 61 69 6e 2d 72 65 67 69 73 74 72 79 02 6e 6c 00 09 6e 6c 6e ; 221- 240 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 13 ; 241- 260 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 09 ; 261- 280 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 ; 281- 300 80 00 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 ; 301- 320 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 ; 321- 340 01 00 01 00 01 51 80 00 04 d5 9a e0 01 04 6f 70 65 6e 09 6e ; 341- 360 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 ; 361- 380 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 53 04 6f ; 381- 400 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 ; 401- 420 01 00 01 51 80 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 ; 421- 440 00 00 01 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 ; 441- 460 00 01 00 01 00 00 70 80 00 04 d5 9a e0 11 05 6f 6d 76 61 6c ; 461- 480 06 74 65 64 6e 65 74 02 6e 6c 00 00 1c 00 01 00 00 70 80 00 ; 481- 500 10 20 01 07 b8 02 06 00 01 02 00 39 ff fe 59 b1 87 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 7d b9 85 00 00 01 00 02 00 04 00 08 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 30 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 30 00 01 00 01 51 80 00 86 01 01 03 05 01 03 ; 41- 60 f3 cd 35 8c cf ca 92 58 84 25 7d 19 cf 72 4c 76 06 25 66 91 ; 61- 80 53 7a 2c fb a9 3b 79 9b cf b1 61 2d 29 e6 db a9 fa 88 6f 4d ; 81- 100 2d bc bd ec 98 b8 e7 76 96 65 8d cc e7 fc 49 05 23 92 da f5 ; 101- 120 ad 72 8d ad f0 2d 3e c5 e3 b5 6d cf dd e9 94 f2 df 60 c7 72 ; 121- 140 1a 56 ea b0 c7 d6 fa 7c e8 b9 7e 85 ad 2d 9b 0c b2 f5 03 fb ; 141- 160 cb 66 d5 c3 9c d2 6c 50 ab 79 f9 3c a8 25 01 81 f1 e6 f5 b1 ; 161- 180 f3 30 6d 54 05 8b 44 21 09 6e 6c 6e 65 74 6c 61 62 73 02 6e ; 181- 200 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 30 05 02 00 01 51 80 ; 201- 220 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 ; 221- 240 02 6e 6c 00 e6 20 9a 3f 0b d4 7f fe e3 aa ac 29 eb d1 4e 9c ; 241- 260 eb dd 76 21 9c cc 7a 4d 42 f2 47 16 f7 06 fb 48 e5 fd f6 73 ; 261- 280 91 23 e1 dc 7b 43 8b 64 72 f7 06 5e a3 08 8f bd 38 7e 16 22 ; 281- 300 ea a2 a2 a3 10 3c 0c d0 ec 67 26 b7 06 7e e6 71 b8 8a 3a a9 ; 301- 320 7f 00 d5 14 db 2c 32 02 b0 5e 65 25 07 a3 89 71 00 f2 3c db ; 321- 340 20 86 01 1e 53 80 d9 46 46 04 ec 26 8d 35 97 cc 81 a9 fe d8 ; 341- 360 5b 25 6b 2e e9 f7 0c eb e7 6e b0 37 09 6e 6c 6e 65 74 6c 61 ; 361- 380 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 11 05 6f 6d 76 ; 381- 400 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 09 6e 6c 6e 65 74 6c ; 401- 420 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 18 03 6e 73 ; 421- 440 37 0f 64 6f 6d 61 69 6e 2d 72 65 67 69 73 74 72 79 02 6e 6c ; 441- 460 00 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 ; 461- 480 01 51 80 00 13 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 ; 481- 500 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e ; 501- 520 00 01 00 01 51 80 00 a0 00 02 05 02 00 01 51 80 46 3d 18 29 ; 521- 540 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 541- 560 ad 07 18 03 3f 18 f6 5c 35 8d 5b 89 d8 cf 6a 11 fc 3c 32 6b ; 561- 580 bc 06 e3 c4 c8 ec 47 83 1d ab a0 ea e3 af 43 b0 f5 ec aa 5d ; 581- 600 4e aa fa 79 6f 1a 2d fc 1f 44 81 7a 61 a2 49 76 0b 8e 9d 9f ; 601- 620 34 95 66 56 89 99 dc f6 31 6e 42 bb 16 45 93 60 44 7b 19 3a ; 621- 640 c4 e6 9a ab 69 9a b5 84 8f 86 b5 17 af c1 e0 4c b1 33 eb 67 ; 641- 660 cc cf 5b f6 e9 27 ff f3 d9 d0 c5 8e f0 91 b0 ab 77 93 18 e7 ; 661- 680 7e dc 44 1e f1 73 72 7e 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c ; 681- 700 61 62 73 02 6e 6c 00 00 01 00 01 00 01 51 80 00 04 d5 9a e0 ; 701- 720 01 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 721- 740 00 1c 00 01 00 01 51 80 00 10 20 01 07 b8 02 06 00 01 00 00 ; 741- 760 00 00 00 00 00 53 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 ; 761- 780 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 00 10 20 01 07 b8 02 ; 781- 800 06 00 01 00 00 00 00 00 00 00 01 05 6f 6d 76 61 6c 06 74 65 ; 801- 820 64 6e 65 74 02 6e 6c 00 00 01 00 01 00 00 70 80 00 04 d5 9a ; 821- 840 e0 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 00 ; 841- 860 1c 00 01 00 00 70 80 00 10 20 01 07 b8 02 06 00 01 02 00 39 ; 861- 880 ff fe 59 b1 87 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 ; 881- 900 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 01 05 03 00 01 ; 901- 920 51 80 46 3d 18 29 46 15 8b 29 ab 0f 09 6e 6c 6e 65 74 6c 61 ; 921- 940 62 73 02 6e 6c 00 33 42 f9 d1 94 cb d3 27 dc e3 6b fd 80 34 ; 941- 960 a8 c0 ab 2a 76 f8 ef 9d c2 f7 b4 08 2f ff 3c 35 c1 b4 13 46 ; 961- 980 5b 05 38 e7 97 96 41 b9 01 ff 8c 0b de 62 78 29 68 2f fe fb ; 981-1000 53 7a 61 92 3f 89 79 3e df 49 cc ad a3 f7 45 13 7b 99 4c 0b ; 1001-1020 74 06 ee 1e 97 5a fc 6b 74 60 6d a7 68 24 5f 01 f8 5a e2 84 ; 1021-1040 ad 18 cf 52 ff f7 a5 66 84 76 b0 34 5c 42 8f c6 58 c2 38 c4 ; 1041-1060 8c 6b 7a 72 90 4c 9c 77 90 d4 dc cf cf 2a 04 6f 70 65 6e 09 ; 1061-1080 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 ; 1081-1100 80 00 a0 00 1c 05 03 00 01 51 80 46 3d 18 29 46 15 8b 29 ab ; 1101-1120 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 53 09 41 45 b5 ; 1121-1140 88 59 88 6e 2a 21 8e 42 ac 80 7c e2 9f 2e d4 f6 48 3f 70 40 ; 1141-1160 d8 61 1d 3f ea e2 ba ad 20 83 80 bc 7e 3f 40 e7 41 74 9c c3 ; 1161-1180 7c 51 30 e6 f2 99 50 0a 3f d9 26 5a fd d2 38 09 79 e5 27 f1 ; 1181-1200 25 80 e5 13 58 a5 2b 95 70 c3 53 cd ee 0e c3 07 32 f6 73 17 ; 1201-1220 60 b2 1d 3a b0 a4 0c 8f ef c3 65 5e 87 01 98 51 51 a9 fe c0 ; 1221-1240 f7 b2 0d 02 d8 29 40 b2 a8 c4 8d 52 da 36 f9 98 f9 c4 6d 6e ; 1241-1260 1b ed 42 00 00 29 10 00 00 00 80 00 00 00 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50 e5 81 80 00 01 00 08 00 0a 00 18 02 73 65 00 00 30 00 01 ; 1- 20 02 73 65 00 00 30 00 01 00 00 0e 10 00 86 01 00 03 05 01 03 ; 21- 40 db 42 4d 16 35 1a f6 8e 87 cb dc 52 4a 49 1f 15 27 68 bc 86 ; 41- 60 c5 d4 0b 6b e9 e0 bf 69 ab ce 9c 6b ad fe 4b 00 fb 9a 59 74 ; 61- 80 f2 36 1f 61 8d 9f b2 7e 63 84 fc 72 45 8d 57 bd ae ca c2 1a ; 81- 100 77 e6 8d 4d 5f 21 c1 05 c0 66 06 45 77 af 60 46 4b d7 3a d9 ; 101- 120 8c d2 8f 2b ff 44 8e 32 1e 0b 3e d3 73 55 b2 a9 4d 68 cc fd ; 121- 140 0b 0d f8 a2 fd 38 2b ae 6c e3 96 52 27 47 c5 83 4e 55 55 50 ; 141- 160 a0 09 49 62 de 1e a1 25 02 73 65 00 00 30 00 01 00 00 0e 10 ; 161- 180 00 88 01 00 03 05 03 01 00 01 b9 a9 68 15 f6 09 f9 32 a4 7b ; 181- 200 0e c9 8f 95 f6 df d3 87 18 f3 75 9c 8b de 4f 3d f9 5b b7 6f ; 201- 220 51 a5 60 46 fb 10 c2 f0 84 5e 67 e4 49 89 11 c4 5e 55 de 26 ; 221- 240 67 9e 5b 54 0a d4 43 c1 af 86 2a 17 b6 8a 19 ad d2 ba db 4c ; 241- 260 15 38 78 28 ca 1c ed 2c 98 5c 8c f4 96 19 fc c1 46 59 8d 66 ; 261- 280 11 72 48 34 b7 49 e8 58 31 5e 82 17 1b 00 88 55 e2 e1 bb ae ; 281- 300 13 5d de 1a dd 92 df 3d 64 a1 b5 8c 34 74 b3 55 6e 29 02 73 ; 301- 320 65 00 00 30 00 01 00 00 0e 10 00 88 01 00 03 05 03 01 00 01 ; 321- 340 cd e7 e2 f5 7b 7f a4 db 46 34 a9 7c 00 dc 20 19 fe 30 3a b3 ; 341- 360 b8 55 28 fa cd db f3 9c 02 f1 3a 7e 77 51 03 94 b3 c5 ff 91 ; 361- 380 88 47 86 37 3f ef 2e d4 ea 4f 2a e0 82 ce ea ef 7e 27 2c fc ; 381- 400 78 86 41 4d c9 92 fd f0 94 53 f9 71 92 c1 4a 90 a2 c1 ac d8 ; 401- 420 db 9d ee 27 05 e9 22 d4 be 96 23 fa 00 af a4 38 ec 2c 11 64 ; 421- 440 d8 c4 6e af bc 1a 1d 9b f0 12 4d ba ac d8 5a a8 90 54 cf 2d ; 441- 460 6e f8 95 33 a9 e7 56 b9 02 73 65 00 00 30 00 01 00 00 0e 10 ; 461- 480 01 08 01 01 03 05 03 01 00 01 ac 4f 31 c4 76 c7 41 db 41 5e ; 481- 500 16 79 90 7a a0 40 d7 fa bd 10 33 ae 4a 6e 14 e3 ad 6d 59 68 ; 501- 520 04 66 3e 11 19 65 ed d8 f6 27 e0 12 ea bb bd 9f f3 19 95 1d ; 521- 540 10 63 56 cb e2 59 ce eb 34 95 4a 6d c2 08 c6 c2 15 12 d7 9e ; 541- 560 7c 1d be 09 29 46 db 39 37 0c f2 9c 17 96 3d 04 89 7d e8 0c ; 561- 580 55 66 8c 73 b8 e3 88 0b 90 13 94 29 47 ff 98 2e c7 bd fc 18 ; 581- 600 1f f0 5e db 61 a7 0a 5a e2 9c a2 69 d4 e8 38 cb 0c ce f5 68 ; 601- 620 25 32 4e e3 6d f5 b7 de 05 0a be 2a d3 1e bd b9 18 be d2 4d ; 621- 640 05 33 05 be 54 b3 1b 7c 96 09 f2 4d 41 ec d6 dd c9 c0 26 39 ; 641- 660 84 a6 7a 0a a1 71 98 05 59 3f 6d 22 81 38 b1 8a 7f f5 2d ca ; 661- 680 e0 5f f2 8c 10 67 7f 6e eb c5 e2 a2 42 c9 db a2 78 7b a4 b9 ; 681- 700 8d c7 e1 73 00 71 1f b1 89 ad a7 21 43 ef 9b fa 32 59 1f 01 ; 701- 720 5b f8 56 77 33 af 9d 20 93 86 51 df df 18 98 95 e0 db b7 fa ; 721- 740 35 39 34 34 f4 0d 02 73 65 00 00 30 00 01 00 00 0e 10 01 08 ; 741- 760 01 01 03 05 03 01 00 01 be b1 45 91 c4 7f e3 f2 17 97 71 12 ; 761- 780 fc f4 04 71 07 6f 38 ae ea 26 5a 88 d5 bf ca 34 9a 65 c9 ab ; 781- 800 99 98 91 30 5f 05 3e 9a 43 f9 7b 8a 49 ab b4 ae 0b b8 78 1c ; 801- 820 18 76 99 04 a0 c5 51 e0 58 48 f1 fa e4 b8 f1 c8 b9 ed 8b 3f ; 821- 840 51 13 a3 ed a1 0a b7 6b eb 42 b5 e7 7f 32 2e fc db 3a 13 31 ; 841- 860 5e de a4 9e 33 cd f8 e9 5a 94 c9 82 92 76 9d 6a 87 ca 81 ae ; 861- 880 45 2c a3 8f 42 cd 82 de 7c 3a 00 7e 16 50 d1 ab 72 19 83 31 ; 881- 900 50 70 47 07 d9 75 05 d8 65 35 de b2 a5 0b 98 63 0a ee 6c 23 ; 901- 920 40 63 b1 7a b4 43 41 6a c5 bf c3 61 36 75 55 df 53 e2 85 a6 ; 921- 940 01 75 0d 53 26 3b df 19 2f c5 61 92 70 bf f0 5d 76 21 0b 88 ; 941- 960 b7 94 9c d5 ae dc 03 ac 44 0b 21 80 e7 03 04 e0 0f 52 f2 89 ; 961- 980 34 4a ba 44 71 0b 16 6b d7 38 e7 b6 77 c1 f6 cb 3b f4 d8 43 ; 981-1000 10 8a 4e 86 c1 49 b5 e8 3a d2 76 65 fe 49 67 de 95 0b 3e f4 ; 1001-1020 42 c5 37 a9 02 73 65 00 00 2e 00 01 00 00 0e 10 00 96 00 30 ; 1021-1040 05 01 00 00 0e 10 46 2e a3 b7 46 26 25 d5 95 7b 02 73 65 00 ; 1041-1060 a5 f8 54 11 87 a1 c5 0a 62 cf 21 27 61 8f 82 4e 32 8f ca 1e ; 1061-1080 25 10 34 48 4c 23 46 52 fc 7c 79 c5 91 77 8a 81 b3 08 29 d2 ; 1081-1100 89 64 d3 4c ad 20 b9 b3 4e e3 e2 6b bb d6 e1 56 59 c0 aa b8 ; 1101-1120 12 c5 b3 39 2e 8f 4a ae c1 b3 78 07 8f ac 40 4f 28 a0 ea 98 ; 1121-1140 6f 1f 80 f3 d3 70 11 1b 4b c0 fc 5d f3 f2 a6 32 22 10 1f e7 ; 1141-1160 c8 40 82 9a 4c 21 d1 93 ce 17 87 b6 2a 42 67 89 f9 5c 71 a1 ; 1161-1180 89 a3 5f b0 e0 15 3d d0 02 73 65 00 00 2e 00 01 00 00 0e 10 ; 1181-1200 01 16 00 30 05 01 00 00 0e 10 46 47 a6 80 46 12 1c 59 18 16 ; 1201-1220 02 73 65 00 4c bd 74 15 bd 17 0b e1 34 d1 b5 57 4f 18 c8 7d ; 1221-1240 7c 80 75 22 d7 f4 43 aa 7b 83 61 e8 c1 70 cd d5 8c 93 2a c7 ; 1241-1260 b6 7f 9c 73 79 52 1a 58 68 54 ef 12 83 4a 5f f3 45 e6 25 65 ; 1261-1280 fe 4f 18 72 b3 84 ea 9c 4b 54 39 ad 1b 18 29 ed 0b ca e2 80 ; 1281-1300 3c 07 98 44 09 55 95 d3 57 0f 0a 81 af 61 d0 9c 93 7c aa b3 ; 1301-1320 7c 36 52 f3 f2 e6 93 0c 20 06 5c 45 c6 45 fe 5c 8c 84 24 d0 ; 1321-1340 e9 c5 87 1e 1b 83 e2 30 b8 2a 41 59 b7 5b a5 a6 b0 22 0e bf ; 1341-1360 55 c9 99 5a ff 7b 43 74 a4 d1 8f d0 ed f5 20 d1 8d a3 e3 f9 ; 1361-1380 f8 c6 db 4d e3 3d 6e 33 9c 49 c4 14 3a b8 59 db bc 02 ef 94 ; 1381-1400 d6 d1 f3 74 f9 2c 0d 5e 98 61 8f f7 3a 22 85 18 8f 4c 36 df ; 1401-1420 3e 2f 1b 5f 4a 5c a1 39 ff fd 33 52 ab 43 b9 7e 89 5e d1 ac ; 1421-1440 e0 bd d4 88 56 39 c1 e3 4a ef f0 41 0a ee d2 96 5b c1 d8 d3 ; 1441-1460 4a 55 48 d3 e9 cf dc 96 b8 22 ca f7 75 fd 6d df cf d8 b2 2e ; 1461-1480 02 73 65 00 00 2e 00 01 00 00 0e 10 01 16 00 30 05 01 00 00 ; 1481-1500 0e 10 46 47 a6 80 46 12 1c 59 45 16 02 73 65 00 20 f7 f4 13 ; 1501-1520 08 99 61 ca f1 75 9f 71 9a c8 c4 06 77 1a 48 a8 d8 4f 45 e8 ; 1521-1540 25 92 b2 5c 16 b1 14 b4 79 44 23 23 37 20 0e 36 2f 57 8f 17 ; 1541-1560 c3 69 65 49 11 a9 40 86 06 13 ff f6 d6 ac 5e 58 ea de aa de ; 1561-1580 06 d4 19 1b 0d 58 84 83 c2 1a 01 2b 6e 7b 18 e6 38 5f 2d eb ; 1581-1600 c5 76 01 60 a4 52 5a 23 ec 7c d0 e6 21 ca 6f 29 9e 83 5f db ; 1601-1620 fb 49 0b 03 ad 09 5b 3b 28 23 1c cb 99 82 5b 1c 81 a7 7d ca ; 1621-1640 00 fd 52 22 66 19 51 1d c6 ac da 2d 65 6d 53 40 e7 b7 c0 6c ; 1641-1660 97 73 7d e2 df e7 75 df 7b 6b 7d a9 9e cb e2 6a d3 35 0c 31 ; 1661-1680 ee 6b 98 44 c7 17 47 4a 3c 69 d4 1b eb 90 40 79 6f 86 bb 53 ; 1681-1700 a6 8c e7 04 4d e4 c3 6b a6 13 5f f8 21 76 f3 ff cd de c9 88 ; 1701-1720 9f 2a 0b a5 4a aa 43 13 f1 cd 2c 28 98 9c eb 91 cc 0a da ca ; 1721-1740 d8 b5 47 78 ed c2 f4 19 78 27 f7 05 d6 4a 4f 93 7a 22 43 3d ; 1741-1760 59 15 da 1c 60 7a 46 ca 86 95 c3 77 02 73 65 00 00 02 00 01 ; 1761-1780 00 02 7b f1 00 09 01 63 02 4e 53 02 73 65 00 02 73 65 00 00 ; 1781-1800 02 00 01 00 02 7b f1 00 09 01 64 02 4e 53 02 73 65 00 02 73 ; 1801-1820 65 00 00 02 00 01 00 02 7b f1 00 09 01 65 02 4e 53 02 73 65 ; 1821-1840 00 02 73 65 00 00 02 00 01 00 02 7b f1 00 09 01 66 02 4e 53 ; 1841-1860 02 73 65 00 02 73 65 00 00 02 00 01 00 02 7b f1 00 09 01 67 ; 1861-1880 02 4e 53 02 73 65 00 02 73 65 00 00 02 00 01 00 02 7b f1 00 ; 1881-1900 09 01 68 02 4e 53 02 73 65 00 02 73 65 00 00 02 00 01 00 02 ; 1901-1920 7b f1 00 09 01 69 02 4e 53 02 73 65 00 02 73 65 00 00 02 00 ; 1921-1940 01 00 02 7b f1 00 09 01 41 02 4e 53 02 73 65 00 02 73 65 00 ; 1941-1960 00 02 00 01 00 02 7b f1 00 09 01 62 02 4e 53 02 73 65 00 02 ; 1961-1980 73 65 00 00 2e 00 01 00 02 a3 00 00 96 00 02 05 01 00 02 a3 ; 1981-2000 00 46 2e ad 6a 46 27 22 f5 95 7b 02 73 65 00 d0 db 15 15 e6 ; 2001-2020 6f 13 58 01 d7 c2 07 d1 54 e4 bf 64 00 6d ca a6 b7 61 5e 69 ; 2021-2040 2f e8 b4 b1 3e 91 d6 65 21 9e 92 82 c7 e8 6b ec 2a 1c 86 60 ; 2041-2060 6d 52 03 9c d3 7c 29 3b 60 46 0f 41 83 86 59 66 95 76 9c 83 ; 2061-2080 22 fd 27 aa c6 68 ce 41 44 c0 bb bb 8e 56 79 c1 66 3c 9b 07 ; 2081-2100 ed 50 05 88 22 24 88 0e 83 09 7f 6d 81 4c 12 ab 79 df f2 d9 ; 2101-2120 0b 6d 41 38 55 7b 7c ac 5d cd 28 04 a6 b0 54 9b 89 82 9e 39 ; 2121-2140 7e c9 5b 01 41 02 4e 53 02 73 65 00 00 01 00 01 00 02 7b f1 ; 2141-2160 00 04 c0 24 90 6b 01 41 02 4e 53 02 73 65 00 00 1c 00 01 00 ; 2161-2180 02 7b f1 00 10 20 01 06 98 00 09 03 01 00 00 00 00 00 00 00 ; 2181-2200 53 01 62 02 4e 53 02 73 65 00 00 01 00 01 00 02 7b f1 00 04 ; 2201-2220 c0 24 85 6b 01 63 02 4e 53 02 73 65 00 00 01 00 01 00 02 7b ; 2221-2240 f1 00 04 c0 24 87 6b 01 64 02 4e 53 02 73 65 00 00 01 00 01 ; 2241-2260 00 02 7b f3 00 04 51 e4 08 10 01 65 02 4e 53 02 73 65 00 00 ; 2261-2280 01 00 01 00 02 7b f1 00 04 51 e4 0a 39 01 66 02 4e 53 02 73 ; 2281-2300 65 00 00 01 00 01 00 02 7b f1 00 04 c0 24 7d 35 01 66 02 4e ; 2301-2320 53 02 73 65 00 00 1c 00 01 00 02 7b f1 00 10 20 01 06 b0 00 ; 2321-2340 07 00 00 00 00 00 00 00 00 00 53 01 67 02 4e 53 02 73 65 00 ; 2341-2360 00 01 00 01 00 02 7b f3 00 04 82 ef 05 72 01 67 02 4e 53 02 ; 2361-2380 73 65 00 00 1c 00 01 00 02 7b f3 00 10 20 01 06 b0 00 0e 00 ; 2381-2400 03 00 00 00 00 00 00 00 01 01 68 02 4e 53 02 73 65 00 00 01 ; 2401-2420 00 01 00 02 7b f1 00 04 c7 07 31 1e 01 69 02 4e 53 02 73 65 ; 2421-2440 00 00 01 00 01 00 02 7b f1 00 04 c2 92 6a 16 01 41 02 4e 53 ; 2441-2460 02 73 65 00 00 2e 00 01 00 02 7b f1 00 96 00 01 05 03 00 02 ; 2461-2480 a3 00 46 2e bd b4 46 27 06 d4 95 7b 02 73 65 00 36 41 6c 4e ; 2481-2500 6b 37 41 ba 9c 84 4c ca 8a 25 b0 f4 5e b5 38 da 51 78 f6 57 ; 2501-2520 b3 2a b8 06 24 66 06 8f fc e6 48 f6 bd 2e eb 5c 25 f8 ca 6e ; 2521-2540 a2 71 52 c3 b2 1a 21 b4 d3 69 35 b8 65 96 b7 15 9e e2 fa 25 ; 2541-2560 23 6e da e3 20 c1 bd 15 b6 40 86 2d 50 52 33 33 75 c3 97 2c ; 2561-2580 50 e5 3a ec 92 ca 32 b6 e7 7c 72 f0 8c bc dc cb 33 65 b5 0d ; 2581-2600 2b 99 21 81 0a 78 74 41 0a 89 6b 87 dc 4c 31 70 2a 8c f8 68 ; 2601-2620 10 26 e5 2a 01 41 02 4e 53 02 73 65 00 00 2e 00 01 00 02 7b ; 2621-2640 f1 00 96 00 1c 05 03 00 02 a3 00 46 2f f8 c0 46 27 06 d4 95 ; 2641-2660 7b 02 73 65 00 8b 6e 8e 8e 07 47 bc 80 ad dc 07 a4 b3 2f 3c ; 2661-2680 0e 75 a6 50 5e 8b 07 80 19 aa 11 77 74 be 9c fc a5 21 26 2f ; 2681-2700 56 3f cc 0a 46 91 06 78 39 86 5d c1 df 9b b2 1f 2f f5 97 7a ; 2701-2720 a7 91 36 6e 12 56 8c d1 d7 e0 0a b5 1b 8f 0b ac 7d df 4b 32 ; 2721-2740 4d 4a e1 a4 9f 4f 3e 6a dc fe ee d4 f8 00 40 e6 34 48 98 2f ; 2741-2760 c7 b9 df 49 63 80 8d 91 87 8d 24 2d 6d 7f ce e6 eb 93 5d 8b ; 2761-2780 d5 a3 e0 00 64 df 94 51 88 f8 b2 14 c1 01 62 02 4e 53 02 73 ; 2781-2800 65 00 00 2e 00 01 00 02 7b f1 00 96 00 01 05 03 00 02 a3 00 ; 2801-2820 46 30 17 a6 46 27 06 d4 95 7b 02 73 65 00 49 a8 36 07 fd bb ; 2821-2840 2e a3 d3 f0 f7 3d 66 f3 b1 78 74 3b 74 92 b0 97 3e 7a 3c 01 ; 2841-2860 d5 35 97 67 d2 bc d0 47 70 dc cd b6 98 ba 95 b9 db 35 ed b4 ; 2861-2880 c1 68 94 ce 52 df 9d 44 a7 22 27 66 d2 19 4a 70 80 6e 3d cc ; 2881-2900 60 e2 b5 7f 37 3a c1 18 b5 01 41 4a 76 ae 21 33 03 f1 e4 23 ; 2901-2920 0c d7 17 d1 3f 9e 01 d2 0e f3 11 d8 f1 ef 49 ec 75 5c eb fc ; 2921-2940 e3 74 4e 40 a9 eb 80 25 b5 a1 39 c8 e2 b6 cb 7c e3 43 fb 18 ; 2941-2960 f0 2d 01 63 02 4e 53 02 73 65 00 00 2e 00 01 00 02 7b f1 00 ; 2961-2980 96 00 01 05 03 00 02 a3 00 46 2f e5 19 46 27 06 d4 95 7b 02 ; 2981-3000 73 65 00 0d b2 38 33 08 15 51 95 35 8a 52 ef 0f 09 74 51 a2 ; 3001-3020 c8 41 ee a4 d2 01 54 0b 01 1f fb 73 d3 e8 3b 36 2c c5 29 75 ; 3021-3040 78 49 5f 25 03 fa c2 a2 da 7c 59 6c 68 90 dc 9c 7c 6e 88 83 ; 3041-3060 75 a8 de a9 6c 33 13 f6 61 f5 97 89 cf b6 ff 5f 08 e7 77 04 ; 3061-3080 13 67 da 56 1f 88 26 6b 3e db 91 bb 9c 7a 33 ec 7c a9 18 f0 ; 3081-3100 55 28 a3 04 52 fb e0 3d ec 82 b1 8a fa 70 0e 76 4c 40 53 f6 ; 3101-3120 3c 4f e6 86 ed 7f 25 cc cf 84 a1 01 64 02 4e 53 02 73 65 00 ; 3121-3140 00 2e 00 01 00 02 7b f3 00 96 00 01 05 03 00 02 a3 00 46 2f ; 3141-3160 66 45 46 27 06 d4 95 7b 02 73 65 00 d8 0b 9f 5a 79 a2 b5 a3 ; 3161-3180 03 af a6 c6 6d 46 0a c4 45 c8 2c 58 3f a8 eb a6 19 da 01 f2 ; 3181-3200 d4 24 e4 83 99 93 6f 79 d0 c1 a1 29 9e 1f b3 e9 92 ab bd c5 ; 3201-3220 5f 2b 27 e1 4c 8a ec 4c 48 fb ac f7 05 34 6d d3 76 78 77 41 ; 3221-3240 8f 32 92 d3 38 35 4c 18 1b f9 67 7d e0 82 c8 91 69 9b f7 ec ; 3241-3260 7f c1 93 21 c8 2e e7 a8 95 0f 6f 2f 1c d0 f4 93 f8 09 18 07 ; 3261-3280 cc d5 3e e7 88 26 f8 7c c8 6e 4c 3d 29 e8 22 82 af c3 f6 3c ; 3281-3300 01 65 02 4e 53 02 73 65 00 00 2e 00 01 00 02 7b f1 00 96 00 ; 3301-3320 01 05 03 00 02 a3 00 46 2f d6 16 46 27 06 d4 95 7b 02 73 65 ; 3321-3340 00 93 c6 b0 7d be 20 b2 2a da b5 20 c8 52 c7 06 3d 3f 0b 2b ; 3341-3360 a2 2a d8 74 85 47 7c 8c 8d 6e f1 c1 4d ea ea e9 88 ad af d2 ; 3361-3380 5d 31 85 36 c6 9f e5 88 f2 4b 7e 94 cc 4a b7 29 68 ef 19 55 ; 3381-3400 eb 0a f0 f3 12 07 3f a4 72 d9 dc 86 ab f3 9c 36 e1 ec 70 cd ; 3401-3420 d3 cd 29 4d f4 c6 f3 b4 a6 b9 98 b7 63 66 8a 68 1a be 0c d7 ; 3421-3440 32 af 89 14 87 6d d0 32 62 02 69 4b 71 1c bb f9 d6 f1 72 7d ; 3441-3460 a8 8b c3 1e af 97 75 36 9c 01 66 02 4e 53 02 73 65 00 00 2e ; 3461-3480 00 01 00 02 7b f1 00 96 00 01 05 03 00 02 a3 00 46 2f ca 31 ; 3481-3500 46 27 06 d4 95 7b 02 73 65 00 6f dd d9 ae 84 61 ea e3 a3 40 ; 3501-3520 f0 dc 78 f3 db ad f8 a2 08 92 c1 f7 0a 66 65 2d 4b be d6 8d ; 3521-3540 e2 a5 86 24 ff ed f8 f2 a2 87 b4 5a c2 c3 ee 3c 51 36 90 16 ; 3541-3560 e0 de c3 30 43 eb c5 c2 d8 30 fe 93 3c c5 cd 32 74 46 ff 0c ; 3561-3580 32 c3 d8 1d cb 76 e0 0b 39 03 7f c8 07 58 50 2f 4d 69 20 1e ; 3581-3600 e1 c3 4b 78 89 d1 f7 3f 80 42 9d 32 d2 cc f9 de de f7 47 b3 ; 3601-3620 3f 62 98 89 f7 94 14 cf 1b 42 e7 4f 3c 50 d9 f2 05 9a 01 66 ; 3621-3640 02 4e 53 02 73 65 00 00 2e 00 01 00 02 7b f1 00 96 00 1c 05 ; 3641-3660 03 00 02 a3 00 46 2f cc f8 46 27 06 d4 95 7b 02 73 65 00 56 ; 3661-3680 64 a5 e6 69 52 b9 6b 57 b1 0f 2a 8a 5b c5 2f 74 39 1d 6b 63 ; 3681-3700 dd 06 01 5d a9 84 13 0f 1b b1 73 bb 3a 6e 2d 46 f3 83 b8 d3 ; 3701-3720 f5 a8 40 41 05 2a a4 8e 0a c6 6c 6a 26 19 fd f8 ab e7 73 ce ; 3721-3740 52 a4 77 66 56 5b d4 26 42 00 30 9b 3d b0 93 4a 3d e4 70 ca ; 3741-3760 6f a0 2a 20 b6 cb d1 20 b8 05 2f 7c 44 4f 50 f6 8d 70 06 1a ; 3761-3780 7d 8e f5 88 f3 42 63 18 23 0c bc 5d 0a a5 ce 64 2b 4c 9f 3d ; 3781-3800 17 56 c2 64 aa 9c ef 01 67 02 4e 53 02 73 65 00 00 2e 00 01 ; 3801-3820 00 02 7b f3 00 96 00 01 05 03 00 02 a3 00 46 30 07 7e 46 27 ; 3821-3840 06 d4 95 7b 02 73 65 00 39 90 c1 fe 3d b9 69 33 6b 82 7d 36 ; 3841-3860 13 10 1d 14 b2 ca e8 4a e9 dd 32 38 aa a2 6e bf c9 96 32 a9 ; 3861-3880 b5 8d e6 51 be bb 43 4a b6 24 a6 68 39 38 93 0d 20 4c 38 52 ; 3881-3900 cb 6c b1 c8 9d ba f3 cd 36 32 43 65 5f 13 44 8e 0c 01 4e fd ; 3901-3920 d0 ec f7 12 bd 97 8e 4a ac d9 0b 6c 4b 61 f2 17 26 ac a8 cd ; 3921-3940 6b a2 fb f6 54 56 53 03 a0 79 56 e4 b1 69 1f 6a 66 c7 f0 fc ; 3941-3960 db c1 e2 6d 83 5f 2c 7b 9b 99 35 f5 a7 3d 4d 0a 01 67 02 4e ; 3961-3980 53 02 73 65 00 00 2e 00 01 00 02 7b f3 00 96 00 1c 05 03 00 ; 3981-4000 02 a3 00 46 2d cf 81 46 27 06 d4 95 7b 02 73 65 00 73 cf 2a ; 4001-4020 01 60 76 4a 11 2d 2d 98 62 b3 63 dc 42 4c be e9 e9 81 f3 fb ; 4021-4040 c1 83 8b 1e d1 ab d3 73 1d a9 bc bc 25 35 5f ea dc 07 25 99 ; 4041-4060 09 6d b5 ac 9a 04 b2 17 5a c4 61 22 fe 96 a9 d0 16 90 44 18 ; 4061-4080 1d c1 6a 06 8d 2e 48 91 cf 36 75 75 26 5c ef 82 5e 73 4f 10 ; 4081-4100 51 1d ea fd 7d a9 db af 23 44 c1 73 62 98 a6 1e c6 61 5e 3e ; 4101-4120 20 b9 f8 ce 6a 39 3e fc 41 34 5e c7 9d fc 5e cb cb 0d e3 84 ; 4121-4140 bb b2 a1 53 8f 01 68 02 4e 53 02 73 65 00 00 2e 00 01 00 02 ; 4141-4160 7b f1 00 96 00 01 05 03 00 02 a3 00 46 30 0c fe 46 27 06 d4 ; 4161-4180 95 7b 02 73 65 00 3f c3 f3 ff 24 18 26 47 e0 3c 6a bf 3a 96 ; 4181-4200 79 bc 62 52 b1 25 78 d3 71 4b b3 7d d9 60 c5 ca 89 34 75 1e ; 4201-4220 20 18 ef cf 8b bd 77 2a 7c 21 83 1f d1 0e f5 2a c9 5d 77 0b ; 4221-4240 b2 b1 8d df d5 52 a7 b8 94 18 d4 42 70 cb 42 fc 4f ab 50 2f ; 4241-4260 ce ac 3e dc c4 94 d3 d1 ae ac 12 70 4a e1 f8 a5 c4 06 dd 1b ; 4261-4280 da f9 06 28 b3 3d 07 06 71 22 fc 3e f0 4d f0 94 b8 2d e9 40 ; 4281-4300 03 16 d7 96 ac 38 44 58 93 7f 8b 73 6e a3 00 00 29 10 00 00 ; 4301-4320 00 80 00 00 00 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- b4 e2 87 00 00 01 00 02 00 00 00 00 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 2e 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 06 05 02 00 01 ; 41- 60 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 ; 61- 80 62 73 02 6e 6c 00 5c 33 2b 93 5d f9 18 8f c6 7d f8 26 d2 d3 ; 81- 100 da 50 a3 60 42 df 19 1b cb e7 40 4a 7b 88 bb 41 08 68 8f 27 ; 101- 120 7d 4f 05 17 86 89 08 a1 a3 7f 56 1f f4 91 db cc 8b 9b 8e a0 ; 121- 140 03 dc 03 d8 2a 35 f7 ed 2e 01 41 9d b2 42 de 3e 50 4a ab 45 ; 141- 160 9d ac cd 1c a0 90 51 12 be 6c ae 51 20 a5 34 b0 38 e9 83 1d ; 161- 180 99 57 d2 a6 2f 53 a2 4c 4e 97 47 c7 d9 43 72 a6 4a d2 83 be ; 181- 200 ed f6 e4 34 6e 48 1b ae ed 2c c5 65 d0 ec 09 6e 6c 6e 65 74 ; 201- 220 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 02 ; 221- 240 05 02 00 01 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e ; 241- 260 65 74 6c 61 62 73 02 6e 6c 00 81 18 16 b9 0b 65 db e0 00 19 ; 261- 280 68 06 01 11 46 67 4e 8c 51 c6 66 46 78 d7 7a ec b4 1f 8a 1e ; 281- 300 d7 3c 44 4a 55 b0 16 b5 25 b6 ad 25 2f 7d 24 16 d2 4e 08 67 ; 301- 320 ac 95 fa b3 61 cc 13 9d 72 c2 22 76 9b d4 dc 17 6b 3e 58 d5 ; 321- 340 c3 4b 6f b4 fa 60 17 68 46 57 b8 b5 f3 3d b7 f5 a5 df e3 e4 ; 341- 360 bb 8c 6f 33 07 f2 c8 8f c7 ff 6c 13 72 8d 4c 54 a4 ae 70 29 ; 361- 380 24 72 ba 7d fe e7 c7 4d 18 e4 5d f1 24 17 9a 8e 79 e4 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- fe c1 85 00 00 01 00 09 00 03 00 06 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 2e 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 06 05 02 00 01 ; 41- 60 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 ; 61- 80 62 73 02 6e 6c 00 5c 33 2b 93 5d f9 18 8f c6 7d f8 26 d2 d3 ; 81- 100 da 50 a3 60 42 df 19 1b cb e7 40 4a 7b 88 bb 41 08 68 8f 27 ; 101- 120 7d 4f 05 17 86 89 08 a1 a3 7f 56 1f f4 91 db cc 8b 9b 8e a0 ; 121- 140 03 dc 03 d8 2a 35 f7 ed 2e 01 41 9d b2 42 de 3e 50 4a ab 45 ; 141- 160 9d ac cd 1c a0 90 51 12 be 6c ae 51 20 a5 34 b0 38 e9 83 1d ; 161- 180 99 57 d2 a6 2f 53 a2 4c 4e 97 47 c7 d9 43 72 a6 4a d2 83 be ; 181- 200 ed f6 e4 34 6e 48 1b ae ed 2c c5 65 d0 ec 09 6e 6c 6e 65 74 ; 201- 220 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 02 ; 221- 240 05 02 00 01 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e ; 241- 260 65 74 6c 61 62 73 02 6e 6c 00 81 18 16 b9 0b 65 db e0 00 19 ; 261- 280 68 06 01 11 46 67 4e 8c 51 c6 66 46 78 d7 7a ec b4 1f 8a 1e ; 281- 300 d7 3c 44 4a 55 b0 16 b5 25 b6 ad 25 2f 7d 24 16 d2 4e 08 67 ; 301- 320 ac 95 fa b3 61 cc 13 9d 72 c2 22 76 9b d4 dc 17 6b 3e 58 d5 ; 321- 340 c3 4b 6f b4 fa 60 17 68 46 57 b8 b5 f3 3d b7 f5 a5 df e3 e4 ; 341- 360 bb 8c 6f 33 07 f2 c8 8f c7 ff 6c 13 72 8d 4c 54 a4 ae 70 29 ; 361- 380 24 72 ba 7d fe e7 c7 4d 18 e4 5d f1 24 17 9a 8e 79 e4 09 6e ; 381- 400 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 ; 401- 420 00 a0 00 01 05 02 00 01 51 80 46 4e f9 ff 46 27 6c ff ab 0f ; 421- 440 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ca ee ca 28 cd cf ; 441- 460 f4 fd a5 6e 5c ad 3f d5 89 7c 06 69 93 30 93 f7 0f b2 43 07 ; 461- 480 eb ad ce 8e f0 da 75 b9 5e 46 d5 28 40 9d 51 17 9e 2d 3d f3 ; 481- 500 85 1b dd 85 4a 82 9d 32 5c ff 27 c9 83 8f 36 04 89 94 52 3b ; 501- 520 01 29 01 62 36 1a 66 67 f7 43 16 5b 2a 19 77 d1 cc 73 7c 86 ; 521- 540 44 4c f5 d0 db a4 f5 ea 62 98 0f 18 9f 72 2c 73 5f cb 62 c2 ; 541- 560 7f 45 91 99 53 bb 70 44 93 3a f5 ea 3c 23 80 3f a6 19 06 33 ; 561- 580 3f 69 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 ; 581- 600 00 01 51 80 00 a0 00 0f 05 02 00 01 51 80 46 4e f9 ff 46 27 ; 601- 620 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 8f 79 ; 621- 640 3e 49 68 56 05 e7 6c 01 6d f6 cf 6f f3 5d 5b cb e8 c1 ff fd ; 641- 660 a2 45 de 61 25 44 0d 4f 47 ea 54 8a 46 0f 58 1a 43 dc b4 3b ; 661- 680 02 b4 a3 11 a2 c5 45 0a 4b b2 f1 7a 3b 39 8d b0 ad 02 2e 60 ; 681- 700 15 dd fb b5 66 3a e1 b7 6f 5c 2d ea 99 21 a1 7e d9 8c da d8 ; 701- 720 94 6f e5 fc 1c 1f 0a b2 f6 18 7f 11 66 54 37 ad 1d f1 72 32 ; 721- 740 dd db 48 6b 53 4a 39 54 77 9b dc 54 f0 da 0c ae 94 7d 82 22 ; 741- 760 05 7f ab bb 3b 79 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 761- 780 00 2e 00 01 00 01 51 80 00 a0 00 10 05 02 00 01 51 80 46 4e ; 781- 800 f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e ; 801- 820 6c 00 ce 39 43 cf 06 19 80 eb 18 77 90 6a 43 52 d6 de 3a d0 ; 821- 840 b3 5f 00 49 34 6e bd 2a 38 2b a1 4e 24 7a 59 03 c8 72 90 15 ; 841- 860 c0 59 e0 8b aa da a9 06 f5 a8 25 5d 46 fc 46 d8 63 46 56 d0 ; 861- 880 34 b4 dd ae 6f f6 e6 41 bc ca cf f7 f0 66 be ba a1 cd 2e 9f ; 881- 900 06 91 fe 3c 08 b4 5d de ce 11 ee 22 6d e9 ec 2e 3b 97 60 d4 ; 901- 920 0e f8 de 63 ff a8 42 7f ab a9 26 90 b8 72 21 5d fd 80 f3 64 ; 921- 940 09 1f 0e 9c 89 6a 91 08 46 8b 09 6e 6c 6e 65 74 6c 61 62 73 ; 941- 960 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 1c 05 02 00 01 ; 961- 980 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 ; 981-1000 62 73 02 6e 6c 00 9b a2 35 6e 53 03 58 22 75 43 ae 1a e2 51 ; 1001-1020 09 4e fb 37 0f 60 eb 77 0f bc 4d c0 27 e7 34 a4 3a 27 30 c0 ; 1021-1040 4d 45 ad 4b 4d a1 82 54 92 ad 47 95 2b 78 70 6b c4 c7 f4 a3 ; 1041-1060 d3 55 77 51 09 ce 2a 6e d9 a2 5c 91 ed c1 14 91 0e 49 b5 4b ; 1061-1080 3c 08 3d c1 f0 dc 5d 82 48 97 be 3c eb d9 84 ce 7c 62 27 0c ; 1081-1100 b4 92 65 80 5a 3f 39 af f6 96 08 cd 40 3c e2 06 6f 36 df dc ; 1101-1120 ae 58 fb 9f fe b1 6a b1 fc 86 1d 7b 4d 7a 09 6e 6c 6e 65 74 ; 1121-1140 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 00 02 58 00 a0 00 23 ; 1141-1160 05 02 00 00 02 58 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e ; 1161-1180 65 74 6c 61 62 73 02 6e 6c 00 dc bc 30 a6 b8 6f f6 3b 07 af ; 1181-1200 cb 44 32 80 97 70 f9 f0 17 a0 cf d4 f8 cd a0 0d 8f cb 31 3b ; 1201-1220 82 b8 8d e7 f0 76 26 28 5e 7f c9 06 a7 53 f2 29 4a 06 18 54 ; 1221-1240 9b 0d 9a 18 8d c1 95 51 31 6b 4e 9e 82 c0 40 33 7e 0f d4 29 ; 1241-1260 19 b1 ee 96 41 97 ff f8 ea 14 0c d0 f2 fc 1c 41 95 c8 2f 82 ; 1261-1280 b0 8c 62 1f b7 d0 ea a4 f1 4e 35 0b 85 23 2f ba 44 bd 05 c4 ; 1281-1300 2a 47 f8 62 e1 80 d8 76 fb 8e 89 4f 87 66 19 69 7a 57 09 6e ; 1301-1320 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 00 46 50 ; 1321-1340 00 a0 00 2f 05 02 00 00 46 50 46 4e f9 ff 46 27 6c ff ab 0f ; 1341-1360 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 42 6f f9 6d 68 59 ; 1361-1380 0c c9 c2 43 f4 1a fd eb f1 2b 42 48 9c 77 87 fe 92 d6 c4 3e ; 1381-1400 ba e5 03 ee 23 99 18 7f 49 46 83 d1 b0 2b f9 eb 62 5d be a5 ; 1401-1420 9f 74 43 d3 36 27 cb 61 54 20 c5 6f e7 62 17 d9 07 5f e5 bb ; 1421-1440 73 4d 93 ca d5 35 d7 06 e2 56 78 44 65 ed 08 a7 c3 e0 c5 db ; 1441-1460 fc 07 56 9b e5 0d 4b ab 53 95 11 7f 50 10 3f 78 5b 58 f6 e7 ; 1461-1480 31 35 11 80 b1 bc 99 ec a0 e6 59 dc cd 39 4f ae 31 bc df e1 ; 1481-1500 6d 0d 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 ; 1501-1520 00 01 51 80 00 a0 00 30 05 02 00 01 51 80 46 4e f9 ff 46 27 ; 1521-1540 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 4e ca ; 1541-1560 77 bd 35 15 34 fc b0 14 74 ed 4e d0 c3 52 e8 36 d5 80 86 ec ; 1561-1580 fc 06 65 af f0 37 48 56 a1 a3 4e 25 c9 55 a6 f1 35 85 e2 75 ; 1581-1600 c1 2d 4e 28 a0 70 7d 9c 03 9f 6c d2 94 2f 7e 20 a1 9a 80 64 ; 1601-1620 22 0f 95 24 e1 ad 91 eb 5a 78 73 a5 65 3a eb 29 09 fb 37 37 ; 1621-1640 9b 7c be 32 f7 d2 ab ba 88 28 3c 4e 92 24 8d 83 0f 3a 1e 4e ; 1641-1660 60 be 00 95 6b e5 4c c2 6c df f8 93 8b da 6f f7 a7 a5 e8 11 ; 1661-1680 2c 25 df 8d d2 7f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 1681-1700 00 02 00 01 00 01 51 80 00 13 04 6f 70 65 6e 09 6e 6c 6e 65 ; 1701-1720 74 6c 61 62 73 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 02 ; 1721-1740 6e 6c 00 00 02 00 01 00 01 51 80 00 11 05 6f 6d 76 61 6c 06 ; 1741-1760 74 65 64 6e 65 74 02 6e 6c 00 09 6e 6c 6e 65 74 6c 61 62 73 ; 1761-1780 02 6e 6c 00 00 02 00 01 00 01 51 80 00 18 03 6e 73 37 0f 64 ; 1781-1800 6f 6d 61 69 6e 2d 72 65 67 69 73 74 72 79 02 6e 6c 00 03 6e ; 1801-1820 73 37 0f 64 6f 6d 61 69 6e 2d 72 65 67 69 73 74 72 79 02 6e ; 1821-1840 6c 00 00 01 00 01 00 00 44 09 00 04 3e 04 56 e6 04 6f 70 65 ; 1841-1860 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 01 00 01 00 ; 1861-1880 01 51 80 00 04 d5 9a e0 01 04 6f 70 65 6e 09 6e 6c 6e 65 74 ; 1881-1900 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 00 10 20 01 ; 1901-1920 07 b8 02 06 00 01 00 00 00 00 00 00 00 53 04 6f 70 65 6e 09 ; 1921-1940 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 ; 1941-1960 80 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 01 05 ; 1961-1980 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 00 01 00 01 ; 1981-2000 00 00 70 80 00 04 d5 9a e0 11 05 6f 6d 76 61 6c 06 74 65 64 ; 2001-2020 6e 65 74 02 6e 6c 00 00 1c 00 01 00 00 70 80 00 10 20 01 07 ; 2021-2040 b8 02 06 00 01 02 00 39 ff fe 59 b1 87 ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 56 4e 85 00 00 01 00 09 00 04 00 09 09 6e 6c 6e 65 74 6c 61 ; 1- 20 62 73 02 6e 6c 00 00 2e 00 01 09 6e 6c 6e 65 74 6c 61 62 73 ; 21- 40 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 06 05 02 00 01 ; 41- 60 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 ; 61- 80 62 73 02 6e 6c 00 5c 33 2b 93 5d f9 18 8f c6 7d f8 26 d2 d3 ; 81- 100 da 50 a3 60 42 df 19 1b cb e7 40 4a 7b 88 bb 41 08 68 8f 27 ; 101- 120 7d 4f 05 17 86 89 08 a1 a3 7f 56 1f f4 91 db cc 8b 9b 8e a0 ; 121- 140 03 dc 03 d8 2a 35 f7 ed 2e 01 41 9d b2 42 de 3e 50 4a ab 45 ; 141- 160 9d ac cd 1c a0 90 51 12 be 6c ae 51 20 a5 34 b0 38 e9 83 1d ; 161- 180 99 57 d2 a6 2f 53 a2 4c 4e 97 47 c7 d9 43 72 a6 4a d2 83 be ; 181- 200 ed f6 e4 34 6e 48 1b ae ed 2c c5 65 d0 ec 09 6e 6c 6e 65 74 ; 201- 220 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 02 ; 221- 240 05 02 00 01 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e ; 241- 260 65 74 6c 61 62 73 02 6e 6c 00 81 18 16 b9 0b 65 db e0 00 19 ; 261- 280 68 06 01 11 46 67 4e 8c 51 c6 66 46 78 d7 7a ec b4 1f 8a 1e ; 281- 300 d7 3c 44 4a 55 b0 16 b5 25 b6 ad 25 2f 7d 24 16 d2 4e 08 67 ; 301- 320 ac 95 fa b3 61 cc 13 9d 72 c2 22 76 9b d4 dc 17 6b 3e 58 d5 ; 321- 340 c3 4b 6f b4 fa 60 17 68 46 57 b8 b5 f3 3d b7 f5 a5 df e3 e4 ; 341- 360 bb 8c 6f 33 07 f2 c8 8f c7 ff 6c 13 72 8d 4c 54 a4 ae 70 29 ; 361- 380 24 72 ba 7d fe e7 c7 4d 18 e4 5d f1 24 17 9a 8e 79 e4 09 6e ; 381- 400 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 ; 401- 420 00 a0 00 01 05 02 00 01 51 80 46 4e f9 ff 46 27 6c ff ab 0f ; 421- 440 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ca ee ca 28 cd cf ; 441- 460 f4 fd a5 6e 5c ad 3f d5 89 7c 06 69 93 30 93 f7 0f b2 43 07 ; 461- 480 eb ad ce 8e f0 da 75 b9 5e 46 d5 28 40 9d 51 17 9e 2d 3d f3 ; 481- 500 85 1b dd 85 4a 82 9d 32 5c ff 27 c9 83 8f 36 04 89 94 52 3b ; 501- 520 01 29 01 62 36 1a 66 67 f7 43 16 5b 2a 19 77 d1 cc 73 7c 86 ; 521- 540 44 4c f5 d0 db a4 f5 ea 62 98 0f 18 9f 72 2c 73 5f cb 62 c2 ; 541- 560 7f 45 91 99 53 bb 70 44 93 3a f5 ea 3c 23 80 3f a6 19 06 33 ; 561- 580 3f 69 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 ; 581- 600 00 01 51 80 00 a0 00 0f 05 02 00 01 51 80 46 4e f9 ff 46 27 ; 601- 620 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 8f 79 ; 621- 640 3e 49 68 56 05 e7 6c 01 6d f6 cf 6f f3 5d 5b cb e8 c1 ff fd ; 641- 660 a2 45 de 61 25 44 0d 4f 47 ea 54 8a 46 0f 58 1a 43 dc b4 3b ; 661- 680 02 b4 a3 11 a2 c5 45 0a 4b b2 f1 7a 3b 39 8d b0 ad 02 2e 60 ; 681- 700 15 dd fb b5 66 3a e1 b7 6f 5c 2d ea 99 21 a1 7e d9 8c da d8 ; 701- 720 94 6f e5 fc 1c 1f 0a b2 f6 18 7f 11 66 54 37 ad 1d f1 72 32 ; 721- 740 dd db 48 6b 53 4a 39 54 77 9b dc 54 f0 da 0c ae 94 7d 82 22 ; 741- 760 05 7f ab bb 3b 79 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 761- 780 00 2e 00 01 00 01 51 80 00 a0 00 10 05 02 00 01 51 80 46 4e ; 781- 800 f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e ; 801- 820 6c 00 ce 39 43 cf 06 19 80 eb 18 77 90 6a 43 52 d6 de 3a d0 ; 821- 840 b3 5f 00 49 34 6e bd 2a 38 2b a1 4e 24 7a 59 03 c8 72 90 15 ; 841- 860 c0 59 e0 8b aa da a9 06 f5 a8 25 5d 46 fc 46 d8 63 46 56 d0 ; 861- 880 34 b4 dd ae 6f f6 e6 41 bc ca cf f7 f0 66 be ba a1 cd 2e 9f ; 881- 900 06 91 fe 3c 08 b4 5d de ce 11 ee 22 6d e9 ec 2e 3b 97 60 d4 ; 901- 920 0e f8 de 63 ff a8 42 7f ab a9 26 90 b8 72 21 5d fd 80 f3 64 ; 921- 940 09 1f 0e 9c 89 6a 91 08 46 8b 09 6e 6c 6e 65 74 6c 61 62 73 ; 941- 960 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 1c 05 02 00 01 ; 961- 980 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 ; 981-1000 62 73 02 6e 6c 00 9b a2 35 6e 53 03 58 22 75 43 ae 1a e2 51 ; 1001-1020 09 4e fb 37 0f 60 eb 77 0f bc 4d c0 27 e7 34 a4 3a 27 30 c0 ; 1021-1040 4d 45 ad 4b 4d a1 82 54 92 ad 47 95 2b 78 70 6b c4 c7 f4 a3 ; 1041-1060 d3 55 77 51 09 ce 2a 6e d9 a2 5c 91 ed c1 14 91 0e 49 b5 4b ; 1061-1080 3c 08 3d c1 f0 dc 5d 82 48 97 be 3c eb d9 84 ce 7c 62 27 0c ; 1081-1100 b4 92 65 80 5a 3f 39 af f6 96 08 cd 40 3c e2 06 6f 36 df dc ; 1101-1120 ae 58 fb 9f fe b1 6a b1 fc 86 1d 7b 4d 7a 09 6e 6c 6e 65 74 ; 1121-1140 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 00 02 58 00 a0 00 23 ; 1141-1160 05 02 00 00 02 58 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e ; 1161-1180 65 74 6c 61 62 73 02 6e 6c 00 dc bc 30 a6 b8 6f f6 3b 07 af ; 1181-1200 cb 44 32 80 97 70 f9 f0 17 a0 cf d4 f8 cd a0 0d 8f cb 31 3b ; 1201-1220 82 b8 8d e7 f0 76 26 28 5e 7f c9 06 a7 53 f2 29 4a 06 18 54 ; 1221-1240 9b 0d 9a 18 8d c1 95 51 31 6b 4e 9e 82 c0 40 33 7e 0f d4 29 ; 1241-1260 19 b1 ee 96 41 97 ff f8 ea 14 0c d0 f2 fc 1c 41 95 c8 2f 82 ; 1261-1280 b0 8c 62 1f b7 d0 ea a4 f1 4e 35 0b 85 23 2f ba 44 bd 05 c4 ; 1281-1300 2a 47 f8 62 e1 80 d8 76 fb 8e 89 4f 87 66 19 69 7a 57 09 6e ; 1301-1320 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 00 46 50 ; 1321-1340 00 a0 00 2f 05 02 00 00 46 50 46 4e f9 ff 46 27 6c ff ab 0f ; 1341-1360 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 42 6f f9 6d 68 59 ; 1361-1380 0c c9 c2 43 f4 1a fd eb f1 2b 42 48 9c 77 87 fe 92 d6 c4 3e ; 1381-1400 ba e5 03 ee 23 99 18 7f 49 46 83 d1 b0 2b f9 eb 62 5d be a5 ; 1401-1420 9f 74 43 d3 36 27 cb 61 54 20 c5 6f e7 62 17 d9 07 5f e5 bb ; 1421-1440 73 4d 93 ca d5 35 d7 06 e2 56 78 44 65 ed 08 a7 c3 e0 c5 db ; 1441-1460 fc 07 56 9b e5 0d 4b ab 53 95 11 7f 50 10 3f 78 5b 58 f6 e7 ; 1461-1480 31 35 11 80 b1 bc 99 ec a0 e6 59 dc cd 39 4f ae 31 bc df e1 ; 1481-1500 6d 0d 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 ; 1501-1520 00 01 51 80 00 a0 00 30 05 02 00 01 51 80 46 4e f9 ff 46 27 ; 1521-1540 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 4e ca ; 1541-1560 77 bd 35 15 34 fc b0 14 74 ed 4e d0 c3 52 e8 36 d5 80 86 ec ; 1561-1580 fc 06 65 af f0 37 48 56 a1 a3 4e 25 c9 55 a6 f1 35 85 e2 75 ; 1581-1600 c1 2d 4e 28 a0 70 7d 9c 03 9f 6c d2 94 2f 7e 20 a1 9a 80 64 ; 1601-1620 22 0f 95 24 e1 ad 91 eb 5a 78 73 a5 65 3a eb 29 09 fb 37 37 ; 1621-1640 9b 7c be 32 f7 d2 ab ba 88 28 3c 4e 92 24 8d 83 0f 3a 1e 4e ; 1641-1660 60 be 00 95 6b e5 4c c2 6c df f8 93 8b da 6f f7 a7 a5 e8 11 ; 1661-1680 2c 25 df 8d d2 7f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 ; 1681-1700 00 02 00 01 00 01 51 80 00 18 03 6e 73 37 0f 64 6f 6d 61 69 ; 1701-1720 6e 2d 72 65 67 69 73 74 72 79 02 6e 6c 00 09 6e 6c 6e 65 74 ; 1721-1740 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 13 04 6f ; 1741-1760 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 09 6e 6c ; 1761-1780 6e 65 74 6c 61 62 73 02 6e 6c 00 00 02 00 01 00 01 51 80 00 ; 1781-1800 11 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 09 6e ; 1801-1820 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 ; 1821-1840 00 a0 00 02 05 02 00 01 51 80 46 4e f9 ff 46 27 6c ff ab 0f ; 1841-1860 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 81 18 16 b9 0b 65 ; 1861-1880 db e0 00 19 68 06 01 11 46 67 4e 8c 51 c6 66 46 78 d7 7a ec ; 1881-1900 b4 1f 8a 1e d7 3c 44 4a 55 b0 16 b5 25 b6 ad 25 2f 7d 24 16 ; 1901-1920 d2 4e 08 67 ac 95 fa b3 61 cc 13 9d 72 c2 22 76 9b d4 dc 17 ; 1921-1940 6b 3e 58 d5 c3 4b 6f b4 fa 60 17 68 46 57 b8 b5 f3 3d b7 f5 ; 1941-1960 a5 df e3 e4 bb 8c 6f 33 07 f2 c8 8f c7 ff 6c 13 72 8d 4c 54 ; 1961-1980 a4 ae 70 29 24 72 ba 7d fe e7 c7 4d 18 e4 5d f1 24 17 9a 8e ; 1981-2000 79 e4 03 6e 73 37 0f 64 6f 6d 61 69 6e 2d 72 65 67 69 73 74 ; 2001-2020 72 79 02 6e 6c 00 00 01 00 01 00 00 43 f3 00 04 3e 04 56 e6 ; 2021-2040 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 ; 2041-2060 01 00 01 00 01 51 80 00 04 d5 9a e0 01 04 6f 70 65 6e 09 6e ; 2061-2080 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 01 00 01 51 80 ; 2081-2100 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 00 00 53 04 6f ; 2101-2120 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 1c 00 ; 2121-2140 01 00 01 51 80 00 10 20 01 07 b8 02 06 00 01 00 00 00 00 00 ; 2141-2160 00 00 01 05 6f 6d 76 61 6c 06 74 65 64 6e 65 74 02 6e 6c 00 ; 2161-2180 00 01 00 01 00 00 70 80 00 04 d5 9a e0 11 05 6f 6d 76 61 6c ; 2181-2200 06 74 65 64 6e 65 74 02 6e 6c 00 00 1c 00 01 00 00 70 80 00 ; 2201-2220 10 20 01 07 b8 02 06 00 01 02 00 39 ff fe 59 b1 87 04 6f 70 ; 2221-2240 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 00 2e 00 01 ; 2241-2260 00 01 51 80 00 a0 00 01 05 03 00 01 51 80 46 4e f9 ff 46 27 ; 2261-2280 6c ff ab 0f 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 bd 11 ; 2281-2300 d7 c8 6f 7f f1 b8 d7 6c 2e c0 eb 5b 65 6c 5e 32 bc ba 0e 50 ; 2301-2320 c6 d2 b2 65 71 81 44 6e 2a 22 3c 98 39 16 71 f1 56 2d 8f 0d ; 2321-2340 02 8a e8 7d ad 93 f1 f6 85 d0 fc 19 13 26 de 5a 1f ee 33 7d ; 2341-2360 f0 9b 5b 15 63 1a a6 33 55 d4 d3 23 4f c5 ac cf 48 71 f5 ed ; 2361-2380 44 17 eb d3 db fe 98 ea 7e fb b3 7d 8f 2a 6b f7 87 af 15 aa ; 2381-2400 78 ee cb e5 24 2b 04 46 a9 e2 96 fa 41 2a 99 42 5d 3e 22 07 ; 2401-2420 b9 bc 99 62 ad 61 04 6f 70 65 6e 09 6e 6c 6e 65 74 6c 61 62 ; 2421-2440 73 02 6e 6c 00 00 2e 00 01 00 01 51 80 00 a0 00 1c 05 03 00 ; 2441-2460 01 51 80 46 4e f9 ff 46 27 6c ff ab 0f 09 6e 6c 6e 65 74 6c ; 2461-2480 61 62 73 02 6e 6c 00 a7 45 db c2 3c 05 77 76 03 b8 7e e7 9c ; 2481-2500 3d 64 12 7c 9d f9 17 f2 a0 4a 94 74 19 bd a3 6b 3e 62 da e6 ; 2501-2520 87 0e 07 1d fb 5c 5c 0e f9 ab 97 87 71 c1 78 d4 b5 b0 21 65 ; 2521-2540 fe 26 95 40 ed b4 d6 0c f5 ce a1 34 32 2a 54 1e e0 b5 34 0f ; 2541-2560 71 01 8f bf 66 48 d7 a7 12 85 a5 a0 25 d2 5c 5f 3a 15 87 b5 ; 2561-2580 bd 4a 3c 0c 34 4b 48 21 48 ac d7 92 02 6b 28 55 35 28 8b b6 ; 2581-2600 cf 72 b4 2c c3 22 88 8b b0 75 80 0c 35 13 02 00 00 29 10 00 ; 2601-2620 00 00 80 00 00 00 unbound-1.13.1/testdata/rrset_rettl.rpl0000644000175000017500000000473014010434640017604 0ustar wouterwouter; This is a comment. ; config options go here. server: minimal-responses: no forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN RRset TTL is not greedily updated from message. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; the query is sent to the forwarder - no cache yet. STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 3 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; authoritative answer REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. 100 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. 100 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END ; another query passes along STEP 6 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION bla.example.com. IN A ENTRY_END STEP 7 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION bla.example.com. IN A ENTRY_END STEP 8 REPLY ; This answer has a fresh TTL ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; authoritative answer REPLY QR AA RD RA NOERROR SECTION QUESTION bla.example.com. IN A SECTION ANSWER bla.example.com. IN A 10.20.30.140 SECTION AUTHORITY example.com. 200 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 9 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA SECTION QUESTION bla.example.com. IN A SECTION ANSWER bla.example.com. IN A 10.20.30.140 SECTION AUTHORITY example.com. 100 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END ; original www.example.com query STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; immediate answer without an OUT_QUERY happening (checked on exit) ; also, the answer does not have AA set ; NS rrset has not been updated. No greedy TTL has happened. STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. 100 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_referd.rpl0000644000175000017500000001235414010434640017345 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" harden-referral-path: no access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cache referral ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. AD8qRJvXxOtmSuy8Ogyo0roA294qOtNT2E1m05kSU0jbxN4qLYn0OmU= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END RANGE_END ; first ask for +CD and get the data in the cache. STEP 1 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 3 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA CD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; now the data is in the cache, validate a referral from cache ; note, no recursion desired STEP 5 QUERY ENTRY_BEGIN REPLY DO SECTION QUESTION bla.example.com. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AD DO NOERROR SECTION QUESTION bla.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+008+29332.private0000644000175000017500000000324714010434640021474 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 8 (RSASHA256) Modulus: vhYw5MEtMW+YGtrmbpIrhV9WI7Oa/JQBTSq/zrVlBd4QW/CWd2o1T2vBGwzGtJYBizmccSsoOfj26wL8fLHFbXjvuIYUeF+AviaM2t4mb3N+3ZAUHVUttFsQ9h0MwsKfhyjSqcbv8obxbaLw/KbUvt/5pETBsuj7/vXoBLY9tooyF9YsouKrnCcFxQKVAw3MKLCGrEMmnWh4+p+RV15SBc62CLR1hEgrJAWEnlVYnbaemiL8aJ/RcsIAMCUDBEspzyj/ImQLGyTOCkenDkKSLWVyWDRqriyw649FD6d7ogdgLP0PabDO6VuWEsVqYp2rtofM23g2XLGGkA1UWIosPw== PublicExponent: AQAB PrivateExponent: J6G4z/j20zfRHshFAwi2yjf2Xbs0tTSmkNA47YAkb/S8tG6U8JDUTJrKyDkBtOURrVV1qKK24F9oG9ejjNwDra9pS6+o1PAUh5DCDWAD43jRGqDPkM4RmWjjQG0OHA039ZYtVfiETqyT6afvVr3x3VoVUoqDWCn7YE0k8taMR2JsvDLTF+yoM4s73ccHcaRoIOcjgZGjBOSE5B3ENBWr0fkZZGk9NAbNUWR2iS/mxxU74w7ctzXDhGdM84gFY3nNSB94v2YBlS758pqHlsXUOhHp43uWMOQxUPkbzWq8eKVEmP9enMd2YHZDP2Lk/NcLxO6qRtA7yIcZz0QH9jUJAQ== Prime1: 5neg9VsNRQ6ypiqPs1BdH2CLb7xrKHlzbgowVG20Xr7T8q+1MirbZtaw9bf/0Op1dozYLR7PZN3fSeEmod+MyJ7EeuyqziIxVce1v/n/vsC2/sg0EIJYFM1nYMJbTBmm1bqMnqo9IGSLQHKkxay2+/4z4jaVCzfA7DqaNoU5VKs= Prime2: 0yVP6Ipi40BZtJFmyw2Yz3SGIZC4uyucIPXH0BAmDhzrj9WmgI2CUyMHq2votztsRF/TgdXCIllUTEnN8za+qku7bqXb/hyc2o26Lhlnym7266rgshGObFu2V0otbJ8gcUyYKqzAqZL3PAohKTZGcz4gq+Pw6LteRfr1+o+f/r0= Exponent1: H1YexZ22xTAFbICW/2uq7cxDyVKWQ2+YGVs7TQ+JmeRaj0IC4ipfoLEKaK63EuH+TLtD3Ya17mIYrUP268Wor9KeppQteU++44n/FXZZpscvWp9ALQp8DYAMUWS74zINtDvkSOKe4xuor3+nFdWxH7xls5l2VIslKTmipE0jCXc= Exponent2: LppgrcHFm8T7R7iECLNClB9y73ui2mUAu+GjrY+y5pCJiaCtdFhHeJQVwEc8AR1Tgy/nXhPRGoW+7mun0lO1955piz1+dfLYyABaJIyk9PBS/ackmwj294GymEeeCQiCP5+ZQmoIyCTQ/uZ5dUAugocm7OmNpcCdSTLgEeKbfL0= Coefficient: JAejyx84aLRhzkSMi01pAHxCx/8VNTlDm3Dp5eFANfffbOLnWGpHs9LgDugrJwJqBKgpkTR0SflKC2eZIa79yyPQSU1gG6Pa8gxQ5/+EPvPrVjkiG3gOweAcfzcfTdQ0KorfrdMulmHraFyWasV2P8/eImFTzjtrYUmJjDxEc84= unbound-1.13.1/testdata/autotrust_init_fail.rpl0000644000175000017500000001433714010434640021327 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with failed initial trust anchor ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ns.example.com. IN NSEC nugget.example.com. A NSEC RRSIG ns.example.com. 3600 IN RRSIG NSEC 5 3 3600 20090924111500 20090821111500 30899 example.com. WRUQ5d5aBO5AXbvnfCd0AWfKGvQIuAjT2qydGkUIaLZaiP4nj+JdquEy1nGvBwYQ9gWyP7b6C6UGrUnVcNBpcw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 ASSIGN t0 = ${time} STEP 7 ASSIGN probe = ${range 3200 ${timeout} 3600} ; the auto probing should have been done now. STEP 8 CHECK_AUTOTRUST example.com FILE_BEGIN example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} FILE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END ; The autotrust anchor was probed due to the query. STEP 30 CHECK_AUTOTRUST example.com FILE_BEGIN example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} FILE_END ; wait and see if autotrust probes (the unchanged) domain again. STEP 40 TIME_PASSES EVAL ${$probe} STEP 50 TRAFFIC STEP 65 ASSIGN probe2 = ${range 3200 ${timeout} 3600} STEP 70 CHECK_AUTOTRUST example.com FILE_BEGIN example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} FILE_END SCENARIO_END unbound-1.13.1/testdata/fwd_0ttlservfail.rpl0000644000175000017500000000265314010434640020514 0ustar wouterwouter; This is a comment. ; config options go here. server: serve-expired: yes forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Zero ttl answer needs to override servfail in cache. RANGE_BEGIN 0 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END RANGE_END RANGE_BEGIN 200 300 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 0 IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END ; enough to pass by the TTL of the servfail answer in cache STEP 50 TIME_PASSES ELAPSE 40 ; this query triggers a prefetch STEP 210 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 220 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END ; this query gets the 0ttl answer STEP 230 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 240 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 0 IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_negcache_nxdomain.rpl0000644000175000017500000001463614010434640021535 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes stub-zone: name: "testzone.nlnetlabs.nl" stub-addr: 185.49.140.60 CONFIG_END SCENARIO_BEGIN Test validator with negative cache NXDOMAIN response (aggressive NSEC) ; testzone.nlnetlabs.nl nameserver RANGE_BEGIN 0 100 ADDRESS 185.49.140.60 ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION testzone.nlnetlabs.nl. IN DNSKEY SECTION ANSWER testzone.nlnetlabs.nl. 3600 IN DNSKEY 256 3 8 AwEAAbrNEg01ByEpUUiip+GNAkNVjUfeX7sl9kPUssR3JQvhCJWVs7aBY0Ae1cNtQWgzCmidGorlXvEY2nNBiMM4l7IXqopJsgyj+Cb3nQPVLi/7yVwUb+AIwSJw1gRFElMYonsMOL9qUrJi8BBCnCR0EqkL+X4slmtkXSJbzQAwvHI7 testzone.nlnetlabs.nl. 3600 IN DNSKEY 257 3 8 AwEAAbn0eGV0wqMBQNSVTY//BoiOD7bexC7FcVv0fH9bwjKOA8I+ob377E14vZN2xRLC2b1GG5iBckjeI+N2dB9eC2KRnScU3Gbmtw75BBYfm/y4Hu72zEjEZ0ZGv6gjSZRv/1o87ODAwQaxN8/dQD+5U/5xu12XM39bCJZx2GWTbf5L testzone.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 8 3 3600 20180313101254 20180213101254 2926 testzone.nlnetlabs.nl. gSLZb/dSKutRlAKSo8ZCC1R+SkvABMYBRQsms77WPfYCDbt5GbXeuGqwGdadjEN8gGSU+qrYNxBZRhlYY6d2vtl+DGh67qwteHSwOCw0VvU64eVh38maJA1U673U4JtlBALzBOA/UHmXPlCgPPoW3BG0U3T2Qir/mqOmegmpBcw= SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NS ns.nlnetlabs.nl. testzone.nlnetlabs.nl. 3600 IN RRSIG NS 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. Ox0iKc+z3i1qR1wMr8TBPYzuYO5UTaLrBsDagJAd25fvCkGN+h3HPmWlCIW0cBHsS+IaHXr1JhWutjSCc4UBcY+sT7Y7Fw3V1qdZW2KzbSgWUyPkTXoYcIIVLacSUTXEyltW6jj61WEI/RaUGUCJortvwH5iv1Hzee343isxObI= SECTION ADDITIONAL ENTRY_END ; response for antelope.testzone.nlnetlabs.nl. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION antelope.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= SECTION ADDITIONAL ENTRY_END ; No answer for ant.testzone.nlnetlabs.nl RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION antelope.testzone.nlnetlabs.nl. IN TXT ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO AD NXDOMAIN SECTION QUESTION antelope.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= SECTION ADDITIONAL ENTRY_END ; query for ant.testzone.nlnetlabs.nl, which isn't on the testzone nameserver STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ant.testzone.nlnetlabs.nl. IN TXT ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION ant.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_pc_a.rpl0000644000175000017500000001036714010434640017163 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with parent child differ for type A. ; the parent has the correct A record. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; the working version. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ftp.example.com. IN A SECTION ANSWER ftp.example.com. IN A 10.20.30.10 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; Broken. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ; now that the bad child NS record is in cache, ask something else. STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ; test cache of parent data STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ftp.example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ftp.example.com. IN A SECTION ANSWER ftp.example.com. IN A 10.20.30.10 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_resolve.rpl0000644000175000017500000000423114010434640017731 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test basic iterative resolve of www.example.com. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ds_gost_downgrade.crpl0000644000175000017500000002045214010434640021733 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no harden-algo-downgrade: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with GOST DS digest downgrade attack ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; downgrade: false GOST, correct SHA sub.example.com. 3600 IN DS 60385 12 3 2be04f63b3d069fd65f81a3b810b661a00d39be3ff00d1c7481a150b93b0d028 ; correct GOST DS for sub.example.com. ; sub.example.com. 3600 IN DS 60385 12 3 2be04f63b3d069fd65f81a3b810b661a00d39be3ff00d1c7481a150b93b0d027 ; xepov-bofek-fuset-bipiz-tunoz-mukyf-rybyb-ranic-pobet-fakov-fozob-bagus-ludac-pyheb-rygor-bygyd-lyxyx ; SHA1 DS for sub.example.com. sub.example.com. 3600 IN DS 60385 12 1 0a66f7923318bb1e208bfd975ffa2e30cfcdf962 ; xedik-katin-dasec-myvic-vumum-rizan-luluz-paraf-befas-tovek-dyxax ; SHA256 DS for sub.example.com. sub.example.com. 3600 IN DS 60385 12 2 cd3290b84b457d02ca29846a005a5eba61640256ced8deca0ef8345d2cd34a58 ; xufef-dugir-modog-hyzyb-dadod-nicuk-pubyh-polor-pomuk-gobuh-kufet-mulus-pofyz-metoh-tarit-fudih-moxex ; signs SHA1, SHA2 and GOST DSes sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. ADB1PPtGoPKRrhNtRtkqeqpgnZdbPOdJMgjdZVxPfgGCoMTu3JFQVbo= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 12 3 3600 20070926134150 20070829134150 60385 sub.example.com. 6mNrX32/DC2RU1A+yWCccn5H6wnsbNYTlf8e/LyF1fsuNfw6tH12sKGBCtk1mp4HpDIgH02HDHplJskSFOvzTw== ;{id = 60385} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. kJEyinL7BkpiPW2HxmFHRLAi68EdrLXToJiK83a5cedDe5ABL7c/k+nFHd3WjATUtVoueY3pSnCDVCJaFmd+/A== ;{id = 60385} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. kJEyinL7BkpiPW2HxmFHRLAi68EdrLXToJiK83a5cedDe5ABL7c/k+nFHd3WjATUtVoueY3pSnCDVCJaFmd+/A== ;{id = 60385} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 12 3 3600 20070926134150 20070829134150 60385 sub.example.com. 6mNrX32/DC2RU1A+yWCccn5H6wnsbNYTlf8e/LyF1fsuNfw6tH12sKGBCtk1mp4HpDIgH02HDHplJskSFOvzTw== ;{id = 60385} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 12 9SZY+xB3wKtrLoRHzkBs9L3fjcvazjnk5HF3gMaD1PVp4pthrwgHIm0TUaLrd3YCa2VCl5wj+MzbhZi8NEJ/Cg== ;{id = 60385 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 12 3 3600 20070926134150 20070829134150 60385 sub.example.com. zyZCppfMjlMS9xs3pJfbWkdA6EgV5MqI11AdVRV8pBsyI7diYLWm8RAHlhEI5MT59A6IT6Di9YjOCvWJjzZ9tA== ;{id = 60385} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 12 3 3600 20070926134150 20070829134150 60385 sub.example.com. 6mNrX32/DC2RU1A+yWCccn5H6wnsbNYTlf8e/LyF1fsuNfw6tH12sKGBCtk1mp4HpDIgH02HDHplJskSFOvzTw== ;{id = 60385} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. kJEyinL7BkpiPW2HxmFHRLAi68EdrLXToJiK83a5cedDe5ABL7c/k+nFHd3WjATUtVoueY3pSnCDVCJaFmd+/A== ;{id = 60385} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. KVDpNBH83UM8l1e9yAdXA1fV+wFJSJF4NtOnDLTtbpfyVbndNW3tvPc2YfLBxTEZeUCns2QrqcmIMdZ086frOQ== ;{id = 60385} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN AAAA ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. ; must servfail bogus STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER ;www.sub.example.com. 3600 IN A 11.11.11.11 ;www.sub.example.com. 3600 IN RRSIG A 12 4 3600 20070926134150 20070829134150 60385 sub.example.com. KVDpNBH83UM8l1e9yAdXA1fV+wFJSJF4NtOnDLTtbpfyVbndNW3tvPc2YfLBxTEZeUCns2QrqcmIMdZ086frOQ== ;{id = 60385} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_any.rpl0000644000175000017500000002635014010434640016666 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with response to qtype ANY ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN ANY SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN ANY SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN ANY SECTION ANSWER example.com. 86400 IN SOA open.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 86400 IN RRSIG SOA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCSs8KJepwaIp5vu++/0hk04lkXvgIUdphJSAE/MYob30WcRei9/nL49tE= ;{id = 2854} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHq7BNVAeLW+Uw/rkjVS08lrMDk/AhR+bvChHfiE4jLb6uoyE54/irCuqA== ;{id = 2854} example.com. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.example.com. example.com. 600 IN RRSIG NAPTR 3 2 600 20070926134150 20070829134150 2854 example.com. MC0CFE8qs66bzuOyKmTIacamrmqabMRzAhUAn0MujX1LB0UpTHuLMgdgMgJJlq4= ;{id = 2854} example.com. 86400 IN AAAA 2001:7b8:206:1::1 example.com. 86400 IN RRSIG AAAA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFEqS4WHyqhUkv7t42TsBZJk/Q9paAhUAtTZ8GaXGpot0PmsM0oGzQU+2iw4= ;{id = 2854} example.com. 86400 IN TXT "Stichting NLnet Labs" example.com. 86400 IN RRSIG TXT 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH3otn2u8zXczBS8L0VKpyAYZGSkAhQLGaQclkzMAzlB5j73opFjdkh8TA== ;{id = 2854} example.com. 86400 IN MX 100 v.net.example. example.com. 86400 IN MX 50 open.example.com. example.com. 86400 IN RRSIG MX 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFEKh3jeqh69zcOqWWv3GNKlMECPyAhR9HJkcPLqlyVWUccWDFJfGGcQfdg== ;{id = 2854} example.com. 86400 IN NS v.net.example. example.com. 86400 IN NS open.example.com. example.com. 86400 IN NS ns7.domain-registry.example. example.com. 86400 IN RRSIG NS 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCaRn30X4neKW7KYoTa2kcsoOLgfgIURvKEyDczLypWlx99KpxzMxRYhEc= ;{id = 2854} example.com. 86400 IN A 213.154.224.1 example.com. 86400 IN RRSIG A 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH8kSLxmRTwzlGDxvF1e4y/gM+5dAhQkzyQ2a6Gf+CMaHzVScaUvTt9HhQ== ;{id = 2854} example.com. 18000 IN NSEC _sip._udp.example.com. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY example.com. 18000 IN RRSIG NSEC 3 2 18000 20070926134150 20070829134150 2854 example.com. MCwCFBzOGtpgq4uJ2jeuLPYl2HowIRzDAhQVXNz1haQ1mI7z9lt5gcvWW+lFhA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ns7.domain-registry.example. 80173 IN A 62.4.86.230 open.example.com. 600 IN A 213.154.224.1 open.example.com. 600 IN AAAA 2001:7b8:206:1::53 open.example.com. 600 IN AAAA 2001:7b8:206:1::1 v.net.example. 28800 IN A 213.154.224.17 v.net.example. 28800 IN AAAA 2001:7b8:206:1:200:39ff:fe59:b187 johnny.example.com. 600 IN A 213.154.224.44 open.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCh8bja923UJmg1+sYXMK8WIE4dpgIUQe9sZa0GOcUYSgb2rXoogF8af+Y= ;{id = 2854} open.example.com. 600 IN RRSIG AAAA 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCRGJgIS6kEVG7aJfovuG/q3cgOWwIUYEIFCnfRQlMIYWF7BKMQoMbdkE0= ;{id = 2854} johnny.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MCwCFAh0/zSpCd/9eMNz7AyfnuGQFD1ZAhQEpNFNw4XByNEcbi/vsVeii9kp7g== ;{id = 2854} _sip._udp.example.com. 600 IN RRSIG SRV 3 4 600 20070926134150 20070829134150 2854 example.com. MCwCFFSRVgOcq1ihVuO6MhCuzWs6SxpVAhRPHHCKy0JxymVkYeFOxTkbVSWMMw== ;{id = 2854} _sip._udp.example.com. 600 IN SRV 0 0 5060 johnny.example.com. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN MATCH TCP REPLY RD DO SECTION QUESTION example.com. IN ANY ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION example.com. IN ANY SECTION ANSWER example.com. 86400 IN SOA open.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 86400 IN RRSIG SOA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCSs8KJepwaIp5vu++/0hk04lkXvgIUdphJSAE/MYob30WcRei9/nL49tE= ;{id = 2854} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHq7BNVAeLW+Uw/rkjVS08lrMDk/AhR+bvChHfiE4jLb6uoyE54/irCuqA== ;{id = 2854} example.com. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.example.com. example.com. 600 IN RRSIG NAPTR 3 2 600 20070926134150 20070829134150 2854 example.com. MC0CFE8qs66bzuOyKmTIacamrmqabMRzAhUAn0MujX1LB0UpTHuLMgdgMgJJlq4= ;{id = 2854} example.com. 86400 IN AAAA 2001:7b8:206:1::1 example.com. 86400 IN RRSIG AAAA 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFEqS4WHyqhUkv7t42TsBZJk/Q9paAhUAtTZ8GaXGpot0PmsM0oGzQU+2iw4= ;{id = 2854} example.com. 86400 IN TXT "Stichting NLnet Labs" example.com. 86400 IN RRSIG TXT 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH3otn2u8zXczBS8L0VKpyAYZGSkAhQLGaQclkzMAzlB5j73opFjdkh8TA== ;{id = 2854} example.com. 86400 IN MX 100 v.net.example. example.com. 86400 IN MX 50 open.example.com. example.com. 86400 IN RRSIG MX 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFEKh3jeqh69zcOqWWv3GNKlMECPyAhR9HJkcPLqlyVWUccWDFJfGGcQfdg== ;{id = 2854} example.com. 86400 IN NS v.net.example. example.com. 86400 IN NS open.example.com. example.com. 86400 IN NS ns7.domain-registry.example. example.com. 86400 IN RRSIG NS 3 2 86400 20070926134150 20070829134150 2854 example.com. MC0CFQCaRn30X4neKW7KYoTa2kcsoOLgfgIURvKEyDczLypWlx99KpxzMxRYhEc= ;{id = 2854} example.com. 86400 IN A 213.154.224.1 example.com. 86400 IN RRSIG A 3 2 86400 20070926134150 20070829134150 2854 example.com. MCwCFH8kSLxmRTwzlGDxvF1e4y/gM+5dAhQkzyQ2a6Gf+CMaHzVScaUvTt9HhQ== ;{id = 2854} example.com. 18000 IN NSEC _sip._udp.example.com. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY example.com. 18000 IN RRSIG NSEC 3 2 18000 20070926134150 20070829134150 2854 example.com. MCwCFBzOGtpgq4uJ2jeuLPYl2HowIRzDAhQVXNz1haQ1mI7z9lt5gcvWW+lFhA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL open.example.com. 600 IN A 213.154.224.1 open.example.com. 600 IN AAAA 2001:7b8:206:1::53 open.example.com. 600 IN AAAA 2001:7b8:206:1::1 _sip._udp.example.com. 600 IN SRV 0 0 5060 johnny.example.com. open.example.com. 600 IN RRSIG A 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCh8bja923UJmg1+sYXMK8WIE4dpgIUQe9sZa0GOcUYSgb2rXoogF8af+Y= ;{id = 2854} open.example.com. 600 IN RRSIG AAAA 3 3 600 20070926134150 20070829134150 2854 example.com. MC0CFQCRGJgIS6kEVG7aJfovuG/q3cgOWwIUYEIFCnfRQlMIYWF7BKMQoMbdkE0= ;{id = 2854} _sip._udp.example.com. 600 IN RRSIG SRV 3 4 600 20070926134150 20070829134150 2854 example.com. MCwCFFSRVgOcq1ihVuO6MhCuzWs6SxpVAhRPHHCKy0JxymVkYeFOxTkbVSWMMw== ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnamewctonx.rpl0000644000175000017500000002073614010434640020427 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard cname to nxdomain ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFDwBErFx90ixZDOdIsKz1QaXA1WzAhUAprOUlV1d5fmUiOp7DZ0TWWcM81Q= ;{id = 2854} SECTION AUTHORITY u.example.com. IN NSEC z.example.com. NSEC RRSIG u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCdc/AWOi3BbYLOClSaw7uVkEf0/AhRJLUUXhuvEsdxEXESjotO3tJZyog== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.net. IN A SECTION ANSWER SECTION AUTHORITY example.net. IN NSEC abc.example.net. SOA NS DNSKEY NSEC RRSIG example.net. 3600 IN RRSIG NSEC 5 2 3600 20070926134150 20070829134150 30899 example.net. SEHthmjHyqGlzaOp3Dx6Jn5Fnvvtknw/IF6YSFY8NZLe+YSh1oRJbdEkQ8G92IT08n1jSN6jvKRsFBOUoFOQAw== ;{id = 30899} wab.example.net. IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFDwBErFx90ixZDOdIsKz1QaXA1WzAhUAprOUlV1d5fmUiOp7DZ0TWWcM81Q= ;{id = 2854} SECTION AUTHORITY u.example.com. IN NSEC z.example.com. NSEC RRSIG u.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCdc/AWOi3BbYLOClSaw7uVkEf0/AhRJLUUXhuvEsdxEXESjotO3tJZyog== ;{id = 2854} example.net. IN NSEC abc.example.net. SOA NS DNSKEY NSEC RRSIG example.net. 3600 IN RRSIG NSEC 5 2 3600 20070926134150 20070829134150 30899 example.net. SEHthmjHyqGlzaOp3Dx6Jn5Fnvvtknw/IF6YSFY8NZLe+YSh1oRJbdEkQ8G92IT08n1jSN6jvKRsFBOUoFOQAw== ;{id = 30899} wab.example.net. IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_primenoglue.rpl0000644000175000017500000002236314010434640020606 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator with root prime answer without glue. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL ; glue ommitted! ;K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. ; sneak in some data into the cache to simulate partial data after timeouts ; scrubbed away... example.net. NS ns.example.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ; com zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ENTRY_END ; net zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION A.ROOT-SERVERS.NET. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION AUTHORITY ROOT-SERVERS.NET. IN NS A.ROOT-SERVERS.NET. SECTION ADDITIONAL A.ROOT-SERVERS.NET. IN A 198.41.0.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END RANGE_END ; A.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 198.41.0.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ROOT-SERVERS.NET. IN NS SECTION ANSWER ROOT-SERVERS.NET. IN NS A.ROOT-SERVERS.NET. SECTION ADDITIONAL A.ROOT-SERVERS.NET. IN A 198.41.0.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION A.ROOT-SERVERS.NET. IN A SECTION ANSWER A.ROOT-SERVERS.NET. IN A 198.41.0.4 SECTION AUTHORITY ROOT-SERVERS.NET. IN NS A.ROOT-SERVERS.NET. ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION A.ROOT-SERVERS.NET. IN AAAA SECTION ANSWER SECTION AUTHORITY ROOT-SERVERS.NET. IN NS A.ROOT-SERVERS.NET. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION ANSWER ; no ip6 address: we want to use only one address for K. to avoid having ; to duplicate the entries in this file for both addresses. ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ; example.net. zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER ENTRY_END ; example.com. zone ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ; make sure glue fetch is done. STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.net. IN AAAA ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 13 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_droptoomany.rpl0000644000175000017500000000331414010434640020443 0ustar wouterwouter; config options go here. server: num-queries-per-thread: 1 forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Test too many queries asked, last is dropped. ; query responses from authority servers. RANGE_BEGIN 0 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.40 SECTION AUTHORITY www.example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 10.20.30.50 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; NO REPLY (this step is not needed) STEP 3 NOTHING ; another query STEP 4 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.net. IN A ENTRY_END ; reply from first query returns STEP 5 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ; This answer does not arrive, the query was dropped ;STEP 11 CHECK_ANSWER ;ENTRY_BEGIN ;MATCH opcode qname qtype ;SECTION QUESTION ;www.example.net. IN A ;SECTION ANSWER ;www.example.net. IN A 10.20.30.40 ;ENTRY_END SCENARIO_END ; testbound checks before exit: ; * no more pending queries outstanding. ; * and no answers that have not been checked. unbound-1.13.1/testdata/val_nokeyprime.rpl0000644000175000017500000000756614010434640020271 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with failed key prime, no keys. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; barely valid nodata for AAAA ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007101500 28800 7200 604800 18000 SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/0000755000175000017500000000000014010434640023051 5ustar wouterwouterunbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.post0000644000175000017500000000064314010434640031363 0ustar wouterwouter# #-- doh_downstream.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi . ../common.sh kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.dsc0000644000175000017500000000054314010434640031146 0ustar wouterwouterBaseName: doh_downstream_buffer_size Version: 1.0 Description: Test DNS-over-HTTPS http-response-buffer-size CreationDate: Mon Jun 12 12:00:00 CET 2020 Maintainer: Category: Component: CmdDepends: Depends: Help: Pre: doh_downstream_buffer_size.pre Post: doh_downstream_buffer_size.post Test: doh_downstream_buffer_size.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/unbound_server.key0000644000175000017500000000156714010434640026634 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA 3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS 6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP 0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/unbound_server.pem0000644000175000017500000000115314010434640026614 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== -----END CERTIFICATE----- unbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.pre0000644000175000017500000000142214010434640031160 0ustar wouterwouter# #-- doh_downstream.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 1 UNBOUND_PORT=$RND_PORT echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < doh_downstream_buffer_size.conf > ub.conf # start unbound in the background $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_unbound_up unbound.log unbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.conf0000644000175000017500000000060114010434640031315 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1@@PORT@ https-port: @PORT@ tls-service-key: "unbound_server.key" tls-service-pem: "unbound_server.pem" use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no http-response-buffer-size: 500 local-zone: "example.net" redirect local-data: "example.net. IN A 1.2.3.1" unbound-1.13.1/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.test0000644000175000017500000000217714010434640031361 0ustar wouterwouter# #-- doh_downstream.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) echo "> query www.example.net. endpoint /dns-query" $PRE/dohclient -s 127.0.0.1 -p $UNBOUND_PORT 1.example.net. A IN 2.example.net. A IN 3.example.net. A IN 4.example.net. A IN 5.example.net. A IN 6.example.net. A IN 7.example.net. A IN 8.example.net. A IN 9.example.net. A IN 10.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound.log echo "Not OK" exit 1 fi num=$(grep "ANSWER SEC" outfile | wc -l) # 58 byte answers, 500 byte max response buffer -> 8 answers if [ $num -eq 8 ]; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/ipsecmod_whitelist.crpl0000644000175000017500000001460414010434640021276 0ustar wouterwouter; Test ipsecmod-whitelist option. ; config options server: access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: no ipsecmod-max-ttl: 200 ipsecmod-whitelist: white.example.com qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test ipsecmod-whitelist option ; Scenario overview: ; - query for black.example.com. IN A ; - check that we get an answer for black.example.com. IN A with the correct TTL ; - check that an answer for black.example.com. IN IPSECKEY is not cached (not given) ; - query for white.example.com. IN A ; - check that query for white.example.com. IN IPSECKEY is generated ; - check that we get an answer for white.example.com. IN A with the correct TTL ; - check that the get the same answer from cache ; - check that we get the IPSECKEY answer from cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION white.example.com. IN A SECTION ANSWER white.example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION white.example.com. IN IPSECKEY SECTION ANSWER white.example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION black.example.com. IN A SECTION ANSWER black.example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION black.example.com. IN IPSECKEY SECTION ANSWER black.example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION black.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION black.example.com. IN A SECTION ANSWER black.example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 11 QUERY ENTRY_BEGIN SECTION QUESTION black.example.com. IN IPSECKEY ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION black.example.com. IN IPSECKEY SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION white.example.com. IN A ENTRY_END STEP 21 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION white.example.com. IN IPSECKEY ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION white.example.com. IN A SECTION ANSWER white.example.com. 200 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 31 QUERY ENTRY_BEGIN SECTION QUESTION white.example.com. IN A ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA NOERROR SECTION QUESTION white.example.com. IN A SECTION ANSWER white.example.com. 200 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 41 QUERY ENTRY_BEGIN SECTION QUESTION white.example.com. IN IPSECKEY ENTRY_END STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION white.example.com. IN IPSECKEY SECTION ANSWER white.example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+009+48886.key0000644000175000017500000000064314010434640020627 0ustar wouterwouterexample.com. 3600 IN DNSKEY 256 3 9 AwEAAazmeO3BNv+xPYuFbQp8JN4XX+iKNuvJgD2QG5jRXI0IP5by+JGSob20OEmbPLqKcXWMRPICTyPBDaBh0tXA66DVlHV8rCtAT5Yqdrz2qw05SNYCGWJulscR6GM0e4gkO1FrBINr385IiMH3sJegBzm2HUbyb2I+xuFIfl7SgMuZ5fahHnhjDwsdgw+19OQlbYDRmNhMvtJemomIiGzPwrxEtKBlcUevcFPX7cPU7lpbcZwVP16xhLbtSNwMHvoCoRpJrAtdDGiSyAzTQef+jWuaUlFCPle6Qkghi51zmpBrPunqRCoYg7LIyJ9zS/KzPKX2zN2ASu9KJD3tDW9OSZM= ;{id = 48886 (zsk), size = 2048b} unbound-1.13.1/testdata/auth_zonefile_dnssec.rpl0000644000175000017500000001212614010434640021424 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: no ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com $ORIGIN example.com. example 3600 IN SOA dns.example.de. hostmaster.dns.example.de. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with zonefile and dnssec ; the zone file has signatures, used upstream, unbound validates the reply. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD DO RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_keyprefetch_verify.rpl0000644000175000017500000002132714010434640021773 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" prefetch-key: yes prefetch: yes fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with key prefetch and verify with the anchor ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 20 TIME_PASSES ELAPSE 3400 ; now the key gets prefetched and has to be verified with the anchor, ; not with the key itself. ; this answer is from cache enyway. STEP 30 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DNSKEY ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END STEP 50 TRAFFIC SCENARIO_END unbound-1.13.1/testdata/val_nx_overreach.rpl0000644000175000017500000001150514010434640020556 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with overreaching NSEC record ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; wildcard denial example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} ; qname denial ; The overreaching NSEC record; it tries to deny other .com zones! wab.example.com. IN NSEC wzz.foo.com. A NSEC RRSIG wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. AEimIB2N5u7AQOb5IBMnckASZ4MlhBxziJy+zVUjLov/s7q85j8eWQc= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/serve_expired_ttl_client_timeout.rpl0000644000175000017500000000512414010434640024064 0ustar wouterwouter; config options server: module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-expired: yes serve-expired-ttl: 10 serve-expired-client-timeout: 1 stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test serve-expired ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - query again right after the TTL expired + serve-expired-ttl ; - check that we get an updated answer and not the cached one ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 20 ADDRESS 1.2.3.4 ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer (should be cached) STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire + serve-expired-ttl STEP 11 TIME_PASSES ELAPSE 3611 ; Query again STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Allow the client timer to expire STEP 31 TIME_PASSES ELAPSE 1 ; We shouldn't get a reply here. ; There is cached data but serve-expired-ttl has passed. STEP 40 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; authoritative answer REPLY QR AA RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; Check that we got the updated answer STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/black_prime_entry.rpl0000644000175000017500000002336614010434640020732 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacklist prime gives bad key entry ; the data response needs a blacklist action as well, since it also ; comes from an 'expired signatures' name server. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 99 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 99 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ; no ns.blabla.com, try that later ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 99 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 99 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END ; ns.example.com. ; later on, making sure DNSKEY primes give testbound failure. RANGE_BEGIN 100 200 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ftp.example.com. IN A SECTION ANSWER ftp.example.com. IN A 10.20.33.33 ; very bad signature ftp.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A ENTRY_END STEP 100 TIME_PASSES ELAPSE 10 ; second query should not result in going to the network. STEP 110 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ftp.example.com. IN A ENTRY_END ; recursion happens here. STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION ftp.example.com. IN A ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nx_nowc.rpl0000644000175000017500000001145414010434640017551 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nxdomain response missing wildcard denial ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; wildcard denial ;example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG ;example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} ; qname denial wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ldnsrr.c20000644000175000017500000216146414010434640017317 0ustar wouterwouter096E6C6E65746C616273026E6C0000060001000027D80040046F70656E096E6C6E65746C616273026E6C000A686F73746D6173746572096E6C6E65746C616273026E6C00780B651C0000708000001C2000093A8000000E10 nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. 2014012700 28800 7200 604800 3600 096E6C6E65746C616273026E6C00002E0001000027D800A000060802000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00CFCD73ECF3E2B7AA6068571895DCAADF49CEE5E6259DA10D9E59AA5FFE94D396F96DFD3DC86006A92EA3B35020DC8BA6C39F236EB23BB3A2A425020F57A51C4F856A3BF816694F17E0847649D81415D5143481B81175F318708A91BF7D599DEB477A2DC4966045346E8129094204CBF4527CE05F616B61642C0BDAAAD1020B3C nlnetlabs.nl. 10200 IN RRSIG SOA 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. z81z7PPit6pgaFcYldyq30nO5eYlnaENnlmqX/6U05b5bf09yGAGqS6js1Ag3Iumw58jbrI7s6KkJQIPV6UcT4VqO/gWaU8X4IR2SdgUFdUUNIG4EXXzGHCKkb99WZ3rR3otxJZgRTRugSkJQgTL9FJ84F9ha2FkLAvaqtECCzw= ;{id = 42393} 096E6C6E65746C616273026E6C00002E0001000027D800A000010802000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0089C78682C0498CF17271717C166FA6E900C89F7519B283E56D8241C7353D6440314773D0423B7777BF5DA55596CD032FED232EB57CB8F4A967CE9C3A8FCD5E508B991C94F60297E2A225FE06F93B19D5A89C3144B30FA834E4EC716B415D74924B2E2BD5EEF59602C8D7E3251F6F5E1AAE0C9B207D48B90A8E20561ECC5AE540 nlnetlabs.nl. 10200 IN RRSIG A 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. iceGgsBJjPFycXF8Fm+m6QDIn3UZsoPlbYJBxzU9ZEAxR3PQQjt3d79dpVWWzQMv7SMutXy49Klnzpw6j81eUIuZHJT2ApfioiX+Bvk7GdWonDFEsw+oNOTscWtBXXSSSy4r1e71lgLI1+MlH29eGq4MmyB9SLkKjiBWHsxa5UA= ;{id = 42393} 096E6C6E65746C616273026E6C00002E0001000027D800A000020802000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C002AEB82616A77DD63AFFC583D2E5605E8FDE2FDF2F46DFB79FBB726582C4163400F1C6A46B9828F2012D261AB45C1A5DA260A4B712DBA42BBD7601F4367CDD58AC221E952C6DE619BEACC2A09B61C163AC9C4860842AC84715617C9CF6D690490F9234018640C23F414371A80575A6E85E41AF237B990CC96310F6873007516AE nlnetlabs.nl. 10200 IN RRSIG NS 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. KuuCYWp33WOv/Fg9LlYF6P3i/fL0bft5+7cmWCxBY0APHGpGuYKPIBLSYatFwaXaJgpLcS26QrvXYB9DZ83VisIh6VLG3mGb6swqCbYcFjrJxIYIQqyEcVYXyc9taQSQ+SNAGGQMI/QUNxqAV1puheQa8je5kMyWMQ9ocwB1Fq4= ;{id = 42393} 096E6C6E65746C616273026E6C00002E0001000027D800A0000F0802000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00966F5EE1643D0FC2E15B9CF3B4389D0E88E6FE5D689B626CE73C5B6D844D8FC6A1BF797F08BDC3FBE1BC54F5C295471F806EFED5C322D20FC0E05AA37588547D3B3EC5B280C03CC294FD117FECDE5AD9857EFF60AFFA5262434E8D66E295CEDD7D1244EC5BE5E386601C319D37ADA3C0E223FCF65FD204C9C7CA81BAECC5CA2F nlnetlabs.nl. 10200 IN RRSIG MX 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. lm9e4WQ9D8LhW5zztDidDojm/l1om2Js5zxbbYRNj8ahv3l/CL3D++G8VPXClUcfgG7+1cMi0g/A4FqjdYhUfTs+xbKAwDzClP0Rf+zeWtmFfv9gr/pSYkNOjWbilc7dfRJE7Fvl44ZgHDGdN62jwOIj/PZf0gTJx8qBuuzFyi8= ;{id = 42393} 096E6C6E65746C616273026E6C00002E0001000027D800A000100802000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C006B78D29F1F68AC32AD8605B10A1C8720397B9CA3C3C187A1515A6B32CE458B10CEE607CE72A1A61263F42AD4796598870FAC7C9CABEA735BFD6427F294644767FB989987701CE890141C6AE61A7D85996A697059B75B811C815FF7868C5B73C6A0CEDDEC746F9B22AD206213578A6A187722F63E332401B18222307033E867D0 nlnetlabs.nl. 10200 IN RRSIG TXT 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. a3jSnx9orDKthgWxChyHIDl7nKPDwYehUVprMs5FixDO5gfOcqGmEmP0KtR5ZZiHD6x8nKvqc1v9ZCfylGRHZ/uYmYdwHOiQFBxq5hp9hZlqaXBZt1uBHIFf94aMW3PGoM7d7HRvmyKtIGITV4pqGHci9j4zJAGxgiIwcDPoZ9A= ;{id = 42393} 096E6C6E65746C616273026E6C00002E0001000027D800A0001C0802000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C009F0B78F2F603869479CF8D31CE9700B257F1A98577F40B9F9F0294F3DAE5CDC9F99F3C1A089241BAE9DD7D5819A988901EB5C65B1E18E8EAF69EA1043C79FD1DEDE353B76389C681468EA3C1EE49797D1EC08C75E7FF61DFE74FBDEBF94C702D5736C29866152EED0BC08E824FA98C0F56538C4082BC24569116840F3C15AD5A nlnetlabs.nl. 10200 IN RRSIG AAAA 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. nwt48vYDhpR5z40xzpcAslfxqYV39AufnwKU89rlzcn5nzwaCJJBuundfVgZqYiQHrXGWx4Y6Or2nqEEPHn9He3jU7djicaBRo6jwe5JeX0ewIx15/9h3+dPvev5THAtVzbCmGYVLu0LwI6CT6mMD1ZTjECCvCRWkRaEDzwVrVo= ;{id = 42393} 096E6C6E65746C616273026E6C00002E00010000025800A00023080200000258530B29F452E63FF4A599096E6C6E65746C616273026E6C0029AFE9F3104D2AE2307B18CE1B5CE5816BBA46DCBDBEC8C39CF25BFB4CB7FD0E1DC766D1BB56A234F14F68FA23C6726513CFFFA3093CA51A837BE54A3F8C0AEE1E9ABFC65CC4A5A28B00E7D2577AB80385A4C24863E42BAD7A441843329E0E907B1151B2560D5D0BA214542036D7F9E5205923914A5530F6E0555D4528F4E9A0 nlnetlabs.nl. 600 IN RRSIG NAPTR 8 2 600 20140224111604 20140127111604 42393 nlnetlabs.nl. Ka/p8xBNKuIwexjOG1zlgWu6Rty9vsjDnPJb+0y3/Q4dx2bRu1aiNPFPaPojxnJlE8//owk8pRqDe+VKP4wK7h6av8ZcxKWiiwDn0ld6uAOFpMJIY+QrrXpEGEMyng6QexFRslYNXQuiFFQgNtf55SBZI5FKVTD24FVdRSj06aA= ;{id = 42393} 096E6C6E65746C616273026E6C00002E000100000E1001200030080200000E10530B29F452E63FF4C5AA096E6C6E65746C616273026E6C00ACC5B5F66A3C2BCC2735935AE83F3498F51FFB8D8432428ECD2F454AA611BFF113C17038B63B50B3E60B307AAA736BC6036CB654B63EE402F2B26A24F7AF49677208D797D25E5BB0CD9D23C28A255C80DCE8FF45B9B5DCF43749B624917E454A716C743F8F19E173C6ADBD32435E0E1D7B1C4A97D643B25353E57AE5DC823ADDA659AAF3DAF134F941345599411ED53A50DB4DDA5CBF6A1DB480AB5AA8F1908E3E680A52CDCD969BB3803C97E93AB3A1E323150799C11B4B79340BE2909C2A21E963BCFC4C9A39FFCE4D03B8529B452D98F52B11AC76A911289CA2F57CBAF053EF8FC6FB00E64797B09FFCCA26AE8E4BA886BDB59A4F07A1D7EE803DED00915B nlnetlabs.nl. 3600 IN RRSIG DNSKEY 8 2 3600 20140224111604 20140127111604 50602 nlnetlabs.nl. rMW19mo8K8wnNZNa6D80mPUf+42EMkKOzS9FSqYRv/ETwXA4tjtQs+YLMHqqc2vGA2y2VLY+5ALysmok969JZ3II15fSXluwzZ0jwoolXIDc6P9FubXc9DdJtiSRfkVKcWx0P48Z4XPGrb0yQ14OHXscSpfWQ7JTU+V65dyCOt2mWarz2vE0+UE0VZlBHtU6UNtN2ly/ah20gKtaqPGQjj5oClLNzZabs4A8l+k6s6HjIxUHmcEbS3k0C+KQnCoh6WO8/EyaOf/OTQO4UptFLZj1KxGsdqkRKJyi9Xy68FPvj8b7AOZHl7Cf/Momro5LqIa9tZpPB6HX7oA97QCRWw== ;{id = 50602} 096E6C6E65746C616273026E6C00002E0001000027D800A000630802000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00838E2EA6EDAF2D45D92A5AD660D87B991833226F2053391D146B3F3D8FDA134088BA74F30D51DF9A422845D97383CF3B95A0A4348D32C30439640BF899C2E5C883F71AC4247AD95A21A36B3875ECFD9A4BDB50D664C75F7197D353CB4886482549D5A3765ADF319D6CAF717970A550163A71E76001F201CE857007B4A5B4F9F7 nlnetlabs.nl. 10200 IN RRSIG SPF 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. g44upu2vLUXZKlrWYNh7mRgzIm8gUzkdFGs/PY/aE0CIunTzDVHfmkIoRdlzg887laCkNI0ywwQ5ZAv4mcLlyIP3GsQketlaIaNrOHXs/ZpL21DWZMdfcZfTU8tIhkglSdWjdlrfMZ1sr3F5cKVQFjpx52AB8gHOhXAHtKW0+fc= ;{id = 42393} 096E6C6E65746C616273026E6C00002E000100000E1000A0002F080200000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C0068A1BBDBDA37669917BF6FB7A36306D8C3A2448D6B1B83465323A730849D88AC6AC813EA2827B9570EDC623BC54690E7EA69E9EC3188C2D04308B7B35FA6B035E39DA91AC742AA54C3E076F7002AC601192FE76032BFDDDAA8BF86DB176FCC39EAB1980B58873DFAC64D5549CAC14A856E59821B094FC4487D2BA08DD57A10C8 nlnetlabs.nl. 3600 IN RRSIG NSEC 8 2 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. aKG729o3ZpkXv2+3o2MG2MOiRI1rG4NGUyOnMISdiKxqyBPqKCe5Vw7cYjvFRpDn6mnp7DGIwtBDCLezX6awNeOdqRrHQqpUw+B29wAqxgEZL+dgMr/d2qi/htsXb8w56rGYC1iHPfrGTVVJysFKhW5ZghsJT8RIfSugjdV6EMg= ;{id = 42393} 096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 nlnetlabs.nl. 10200 IN A 213.154.224.1 096E6C6E65746C616273026E6C0000020001000027D80013046F70656E096E6C6E65746C616273026E6C00 nlnetlabs.nl. 10200 IN NS open.nlnetlabs.nl. 096E6C6E65746C616273026E6C0000020001000027D80010056D63766178056E6C6E6574026E6C00 nlnetlabs.nl. 10200 IN NS mcvax.nlnet.nl. 096E6C6E65746C616273026E6C0000020001000027D80011076E732D65787431047369646E026E6C00 nlnetlabs.nl. 10200 IN NS ns-ext1.sidn.nl. 096E6C6E65746C616273026E6C00000F0001000027D800150032046F70656E096E6C6E65746C616273026E6C00 nlnetlabs.nl. 10200 IN MX 50 open.nlnetlabs.nl. 096E6C6E65746C616273026E6C00000F0001000027D80012005A056D63766178056E6C6E6574026E6C00 nlnetlabs.nl. 10200 IN MX 90 mcvax.nlnet.nl. 096E6C6E65746C616273026E6C0000100001000027D8001A19537469636874696E67204E4C6E6574204C616273207A6F6E65 nlnetlabs.nl. 10200 IN TXT "Stichting NLnet Labs zone" 096E6C6E65746C616273026E6C0000100001000027D8003534763D73706631206970343A3231332E3135342E3232342E302F3234206970363A323030313A3762383A3230363A313A3A302F3634 nlnetlabs.nl. 10200 IN TXT "v=spf1 ip4:213.154.224.0/24 ip6:2001:7b8:206:1::0/64" 096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 096E6C6E65746C616273026E6C0000230001000002580027001400000173075349502B44325500045F736970045F756470096E6C6E65746C616273026E6C00 nlnetlabs.nl. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.nlnetlabs.nl. 096E6C6E65746C616273026E6C000030000100000E1000880100030803010001D47B5D1F7939A00DF51CFB4DBB4F6A543D82E424EF37F14C760D2A1B22C13640F73F85D7A9C3D15781964EDD362937113A53D862C0C2BF6C9ED1BCF7C270BAB0837B7E77C073EF8D9B4C09D893569DDC442AE3B8212FA05A6664D37CD87D20687FF8BFC9A4BFF4010C09034A77188F3FC5A87280798CB770C72363A4725707A1 nlnetlabs.nl. 3600 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh ;{id = 42393 (zsk), size = 1024b} 096E6C6E65746C616273026E6C000030000100000E1001080101030803010001BC0BE8BB974CB5ED6F6DC2B17869931C7219B1055113A1FCBF01580D44105F0B750E119AC8F80F90FCB809D114390D84CE9788823DC5CB1ABF00463701F1CD46A28F831942ED6FAF371F18824B702D50A5A666487F56A8860541C8BE4F8B3851F0EBAD2F7AC0EFC7D2726F1666AF5955FFEE9D50E9DBF402BC335CC5DA1C6AD155D1202B63034B7745467831E490B97F00FB627C07D3C100A05463740A177BE7AD38078668E4FD2068D53392CA90DDA4E9F211BD9DA5F5EBB9FE8FA1E4BFA4A4345C6A95B64222F6D6109C9B0A56E742E57F1F4EBE4F8CED3063A78893ED373C80BCD166BDB82E65C4C8005BE78596DDAA05E64F0364FA2DF688148F154DFDD3 nlnetlabs.nl. 3600 IN DNSKEY 257 3 8 AwEAAbwL6LuXTLXtb23CsXhpkxxyGbEFUROh/L8BWA1EEF8LdQ4Rmsj4D5D8uAnRFDkNhM6XiII9xcsavwBGNwHxzUaij4MZQu1vrzcfGIJLcC1QpaZmSH9WqIYFQci+T4s4UfDrrS96wO/H0nJvFmavWVX/7p1Q6dv0ArwzXMXaHGrRVdEgK2MDS3dFRngx5JC5fwD7YnwH08EAoFRjdAoXe+etOAeGaOT9IGjVM5LKkN2k6fIRvZ2l9eu5/o+h5L+kpDRcapW2QiL21hCcmwpW50Llfx9Ovk+M7TBjp4iT7Tc8gLzRZr24LmXEyABb54WW3aoF5k8DZPot9ogUjxVN/dM= ;{id = 50602 (ksk), size = 2048b} 096E6C6E65746C616273026E6C0000630001000027D8003534763D73706631206970343A3231332E3135342E3232342E302F3234206970363A323030313A3762383A3230363A313A3A302F3634 nlnetlabs.nl. 10200 IN SPF "v=spf1 ip4:213.154.224.0/24 ip6:2001:7b8:206:1::0/64" 096E6C6E65746C616273026E6C00002F000100000E10002406366761746532096E6C6E65746C616273026E6C00000D62018008100380000000000010 nlnetlabs.nl. 3600 IN NSEC 6gate2.nlnetlabs.nl. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY SPF 06366761746532096E6C6E65746C616273026E6C0000010001000027D80004D59AE033 6gate2.nlnetlabs.nl. 10200 IN A 213.154.224.51 06366761746532096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00B8DC31A1093D71D00AC7B69C5E81005C7C4937FED4EC17FDE30F797C29F6435B62E5621BF491016490FA713D6E42A89E21266028E69ED5962EB4FC25A4683F9DFF5A1D6874A5F96D86EDF68C8DD84C71AA44FFF07C644F0BD83DBAA8ED57B3B2B6267B7AAC6966330D961DB68404CC1956905C2B40F197076E42653395BB5807 6gate2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. uNwxoQk9cdAKx7acXoEAXHxJN/7U7Bf94w95fCn2Q1ti5WIb9JEBZJD6cT1uQqieISZgKOae1ZYutPwlpGg/nf9aHWh0pflthu32jI3YTHGqRP/wfGRPC9g9uqjtV7OytiZ7eqxpZjMNlh22hATMGVaQXCtA8ZcHbkJlM5W7WAc= ;{id = 42393} 06366761746532096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0072F41734B426E97C6CA62373D6CCA7544B31998B4DEEAFAF73D2A0B5DC30BE1D71FF5389411D100708D32AC8FAFCAE7FD7B3D6785D3002D10CC80B132C712EF429F7C591094CEA9F84318F50AD6244150396F44C646A0A7ED1ABA985CCEA0F06883E280AC9AC2559E803F04680D115E6EBC74E6D0A5E14D45AFD00E73310F775 6gate2.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. cvQXNLQm6XxspiNz1synVEsxmYtN7q+vc9Kgtdwwvh1x/1OJQR0QBwjTKsj6/K5/17PWeF0wAtEMyAsTLHEu9Cn3xZEJTOqfhDGPUK1iRBUDlvRMZGoKftGrqYXM6g8GiD4oCsmsJVnoA/BGgNEV5uvHTm0KXhTUWv0A5zMQ93U= ;{id = 42393} 06366761746532096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00867F9A22A29C40E0A6E9D6172869DA5989DBA2D07699C6FA9020217D2266C36178A3F0A85B350B380B2F804C24463F8FD50C8A7E14F03956ABECCBE50957852FF87C25198E80B3BB73D0AA090549208B61189FF6EEFBCEB0C4519CA4A16B4BAD1945F98B2A27349DC782782354359C178C5D46F0DF21D4B4F081EC66CA3A3F53 6gate2.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. hn+aIqKcQOCm6dYXKGnaWYnbotB2mcb6kCAhfSJmw2F4o/CoWzULOAsvgEwkRj+P1QyKfhTwOVar7MvlCVeFL/h8JRmOgLO7c9CqCQVJIIthGJ/27vvOsMRRnKSha0utGUX5iyonNJ3HgngjVDWcF4xdRvDfIdS08IHsZso6P1M= ;{id = 42393} 06366761746532096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C003A6A0CB16DE6D70F475B45CCD5CAB0886829D32D2EBA93860B460474A5AA1315957E703A48C623645419D28240FA2936B5335C7F0C78C96963FBCF90D4411505001FB3270A52AB2A7B9F2DED0C9FFE90B3D9E1B429321E9092892ED374F10D1948991D325C344244736B75CAE37CC530DCACF11FF5C5FC0BB639C0F00B7E182A 6gate2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. OmoMsW3m1w9HW0XM1cqwiGgp0y0uupOGC0YEdKWqExWVfnA6SMYjZFQZ0oJA+ik2tTNcfwx4yWlj+8+Q1EEVBQAfsycKUqsqe58t7Qyf/pCz2eG0KTIekJKJLtN08Q0ZSJkdMlw0QkRza3XK43zFMNys8R/1xfwLtjnA8At+GCo= ;{id = 42393} 06366761746532096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000051 6gate2.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::51 06366761746532096E6C6E65746C616273026E6C00002C0001000027D800160101E3397141AE97D1D685F2BD9130EC1A06434533FD 6gate2.nlnetlabs.nl. 10200 IN SSHFP 1 1 E3397141AE97D1D685F2BD9130EC1A06434533FD 06366761746532096E6C6E65746C616273026E6C00002C0001000027D8001602014FAA8F69C8CB5DFAA8BE9D1D197C01984DDED163 6gate2.nlnetlabs.nl. 10200 IN SSHFP 2 1 4FAA8F69C8CB5DFAA8BE9D1D197C01984DDED163 06366761746532096E6C6E65746C616273026E6C00002F000100000E1000210362677006366761746532096E6C6E65746C616273026E6C00000640000008000B 6gate2.nlnetlabs.nl. 3600 IN NSEC bgp.6gate2.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0362677006366761746532096E6C6E65746C616273026E6C00001C0001000027D80010200107B8004000010000000000000013 bgp.6gate2.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1::13 0362677006366761746532096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00CCC98911F74FBEFE5A1B316BCFB71102BA372CA053FB6FAC3BB6B1E9380255E130B5130A391B352B7E4FCEAF701F531BC906F1F964F77A7E73908162B59A36D0C44A0A52EEE8A6FD4A145C926AEBD16629C12F33EF373CF579FB83C7171EE72D5F145718D5D1982E50A6098C8E43714688FB90729CE97D53AC12798FA721B981 bgp.6gate2.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. zMmJEfdPvv5aGzFrz7cRAro3LKBT+2+sO7ax6TgCVeEwtRMKORs1K35Pzq9wH1MbyQbx+WT3en5zkIFitZo20MRKClLu6Kb9ShRckmrr0WYpwS8z7zc89Xn7g8cXHuctXxRXGNXRmC5QpgmMjkNxRoj7kHKc6X1TrBJ5j6chuYE= ;{id = 42393} 0362677006366761746532096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C00CD1D1CAB2B09034AE754A286EC31C4158B7988A786E633BE87328D9B7AE90A8045C2252F41D002545F8870A259D8DBF2ACCE6F88EE8D3F9DC6A64E58CB6E3F5980F6659187C35F4EE27C35EA26106F5AC73ADCFE8DAD52C555D1C216F0894D1094380FF8C743EC6670E23A81B64FA7FFA324506FB171BDEF38B196B3440C263F bgp.6gate2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. zR0cqysJA0rnVKKG7DHEFYt5iKeG5jO+hzKNm3rpCoBFwiUvQdACVF+IcKJZ2NvyrM5viO6NP53Gpk5Yy24/WYD2ZZGHw19O4nw16iYQb1rHOtz+ja1SxVXRwhbwiU0QlDgP+MdD7GZw4jqBtk+n/6MkUG+xcb3vOLGWs0QMJj8= ;{id = 42393} 0362677006366761746532096E6C6E65746C616273026E6C00002F000100000E1000220472696E6706366761746532096E6C6E65746C616273026E6C000006000000080003 bgp.6gate2.nlnetlabs.nl. 3600 IN NSEC ring.6gate2.nlnetlabs.nl. AAAA RRSIG NSEC 0472696E6706366761746532096E6C6E65746C616273026E6C00001C0001000027D800102001067C14C000000000000000000001 ring.6gate2.nlnetlabs.nl. 10200 IN AAAA 2001:67c:14c0::1 0472696E6706366761746532096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0032E637512745AF05A2735F7B8B89913AE73CD4FE195C3C8EF69C4EA6D51125714E14A13D0BC39FBD1CF996B01335D50F53324B01CBD329693E2764C39533B3B10F5BE4AB242081F3D77C84C8BF94F2B6890154719559A9C0EAAAD15B93D51CF15FE49C5F687136CC6C897CFA944BCF60BA2E68D35C4BAF526E493C732B941B50 ring.6gate2.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. MuY3USdFrwWic197i4mROuc81P4ZXDyO9pxOptURJXFOFKE9C8OfvRz5lrATNdUPUzJLAcvTKWk+J2TDlTOzsQ9b5KskIIHz13yEyL+U8raJAVRxlVmpwOqq0VuT1RzxX+ScX2hxNsxsiXz6lEvPYLouaNNcS69Sbkk8cyuUG1A= ;{id = 42393} 0472696E6706366761746532096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C00172462601BC85F49B1BFA73AF7A9539460656C3E8010786C2041A33EA9EB449F7D49323B3CB6E72256247113595BD00E1575BF3916334CDC20A5652C1BCD4596C9D7B41708AA5C44222531B48424BDFA54F4E26C2E3B4475642D41746B4F2CDA2D5FE3972A335B4041AD73D8D9E8C3BBA07A68CCB8B9DAD924E06308BEEBBD28 ring.6gate2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. FyRiYBvIX0mxv6c696lTlGBlbD6AEHhsIEGjPqnrRJ99STI7PLbnIlYkcRNZW9AOFXW/ORYzTNwgpWUsG81FlsnXtBcIqlxEIiUxtIQkvfpU9OJsLjtEdWQtQXRrTyzaLV/jlyozW0BBrXPY2ejDu6B6aMy4udrZJOBjCL7rvSg= ;{id = 42393} 0472696E6706366761746532096E6C6E65746C616273026E6C00002F000100000E10001C05366F6E6C79096E6C6E65746C616273026E6C000006000000080003 ring.6gate2.nlnetlabs.nl. 3600 IN NSEC 6only.nlnetlabs.nl. AAAA RRSIG NSEC 05366F6E6C79096E6C6E65746C616273026E6C00000F0001000027D8001B000A046D61696C05366F6E6C79096E6C6E65746C616273026E6C00 6only.nlnetlabs.nl. 10200 IN MX 10 mail.6only.nlnetlabs.nl. 05366F6E6C79096E6C6E65746C616273026E6C00002E0001000027D800A0000F0803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00D3E660BC52481874B1C424EB99B5C03BC099F54902DCB010F774A5377BE0A0353694F267817D1F57229603E0FF7B8AD96E09692222349E69D4177C0F10569D3E7EF9063001064E9CFA215F7B217F4E3C49BEA2B0D068369FFEBC9E3DA02195BC6E11FAD7D5C69E9A650B59FB849A417B680E49CA303AF93772F034BD469DE35F 6only.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. 0+ZgvFJIGHSxxCTrmbXAO8CZ9UkC3LAQ93SlN3vgoDU2lPJngX0fVyKWA+D/e4rZbglpIiI0nmnUF3wPEFadPn75BjABBk6c+iFfeyF/TjxJvqKw0Gg2n/68nj2gIZW8bhH619XGnpplC1n7hJpBe2gOScowOvk3cvA0vUad418= ;{id = 42393} 05366F6E6C79096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C0022A75A8F291441079219937416A376716597A91B18EED2C8C940B47BE94C7B271D7FD80ED118BAE2524F2F5DAF5D69FBDF260F9D22F1FCD37FC95032C10E9B9BB89363DBA326605BCAF8535DA869D5EB9B6FFE1503BFD4E361495E3E5C1AECF41EE6AC88E97C2DDA0FCD6E3A1FDC962FACD67FE67B20FC72E71A4264B1B4B6B9 6only.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. IqdajykUQQeSGZN0FqN2cWWXqRsY7tLIyUC0e+lMeycdf9gO0Ri64lJPL12vXWn73yYPnSLx/NN/yVAywQ6bm7iTY9ujJmBbyvhTXahp1eubb/4VA7/U42FJXj5cGuz0HuasiOl8LdoPzW46H9yWL6zWf+Z7IPxy5xpCZLG0trk= ;{id = 42393} 05366F6E6C79096E6C6E65746C616273026E6C00002F000100000E100021046D61696C05366F6E6C79096E6C6E65746C616273026E6C000006000100000003 6only.nlnetlabs.nl. 3600 IN NSEC mail.6only.nlnetlabs.nl. MX RRSIG NSEC 046D61696C05366F6E6C79096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 mail.6only.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 046D61696C05366F6E6C79096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00AFE5C98425F3FB8BA2A2339B8A3C574C7B37EBB252982A86D889237BF97931D439D3500EBAEDB4E73D74A6AD7C6D33B639D4DECFA0DF9B056252A7AAA2F26C51714DD0E5110143F254CE0D1FF2DA9E22A77082D67B4627A7351876314A309449533C65799985C910DC74718849DF7BA813EB498BF81C512393353856DE35E3FC mail.6only.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. r+XJhCXz+4uiojObijxXTHs367JSmCqG2Ikje/l5MdQ501AOuu205z10pq18bTO2OdTez6DfmwViUqeqovJsUXFN0OURAUPyVM4NH/LaniKncILWe0YnpzUYdjFKMJRJUzxleZmFyRDcdHGISd97qBPrSYv4HFEjkzU4Vt414/w= ;{id = 42393} 046D61696C05366F6E6C79096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C006694A485639388C1397129063436A15A91197B8D8C8303CA96AB201761A7694E3EC05802A8D03E99A7BA8E71624D32AB4F5A5B810F1778A05D4FC91C256BC9DB53DAF106E6E8BBA89E457FE9FCFD5BE214F746DA53CBF762BA48B95A5077505DF98C2C5EEF3CA851E1EC6325F92DB6ED9A9A1A06BE02462F7717D7295889EAAC mail.6only.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. ZpSkhWOTiME5cSkGNDahWpEZe42MgwPKlqsgF2GnaU4+wFgCqNA+mae6jnFiTTKrT1pbgQ8XeKBdT8kcJWvJ21Pa8Qbm6LuonkV/6fz9W+IU90baU8v3YrpIuVpQd1Bd+YwsXu88qFHh7GMl+S227ZqaGga+AkYvdxfXKViJ6qw= ;{id = 42393} 046D61696C05366F6E6C79096E6C6E65746C616273026E6C00002F000100000E100022013001310131055F64616E65096E6C6E65746C616273026E6C000006000000080003 mail.6only.nlnetlabs.nl. 3600 IN NSEC 0.1.1._dane.nlnetlabs.nl. AAAA RRSIG NSEC 013001310131055F64616E65096E6C6E65746C616273026E6C0000340001000027D800230001016F2851409D710504A35115ABCB9A6DD3F2577EC937C9EF1938926FA82FD6FF5D 0.1.1._dane.nlnetlabs.nl. 10200 IN TLSA 0 1 1 6F2851409D710504A35115ABCB9A6DD3F2577EC937C9EF1938926FA82FD6FF5D 013001310131055F64616E65096E6C6E65746C616273026E6C00002E0001000027D800A000340806000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0003308A6858B0001F161794556A505F8061402174D2091D06AA7DAB91CD63E10C6F1024A84B24EABEE35C7F9C32A7941BA58B64B5612DE832808FC32418CB894BC75B0D2ADB76E4DB5CC86DCC0BED984AC818A3A81EF05554A52E15A3683A5576AAAF304F65E3AC557FB34527A23592C807FA017DF3F0A2CD25B09A0644FBEFA3 0.1.1._dane.nlnetlabs.nl. 10200 IN RRSIG TLSA 8 6 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. AzCKaFiwAB8WF5RValBfgGFAIXTSCR0Gqn2rkc1j4QxvECSoSyTqvuNcf5wyp5QbpYtktWEt6DKAj8MkGMuJS8dbDSrbduTbXMhtzAvtmErIGKOoHvBVVKUuFaNoOlV2qq8wT2XjrFV/s0UnojWSyAf6AX3z8KLNJbCaBkT776M= ;{id = 42393} 013001310131055F64616E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080600000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C003E02AA93447DAC074233A9976F6CEBBA672C3E8AA855A4DB82197AAB34D82367FD2A88385F624E9D90960C0F824B314B54455F03D1DCF8F46EF8DC4FBA67D386F570D0A14CB64E3451E91653293EBEC4AC8CA691067B3D051B8088806E41A5029005020FCBED8CE316FBE1AA8B85B90FAA7FB75D53D21795DE5D3CAB3249791D 0.1.1._dane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 6 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. PgKqk0R9rAdCM6mXb2zrumcsPoqoVaTbghl6qzTYI2f9Kog4X2JOnZCWDA+CSzFLVEVfA9Hc+PRu+NxPumfThvVw0KFMtk40UekWUyk+vsSsjKaRBns9BRuAiIBuQaUCkAUCD8vtjOMW++Gqi4W5D6p/t11T0heV3l08qzJJeR0= ;{id = 42393} 013001310131055F64616E65096E6C6E65746C616273026E6C00002F000100000E100023013101310131055F64616E65096E6C6E65746C616273026E6C00000700000000000308 0.1.1._dane.nlnetlabs.nl. 3600 IN NSEC 1.1.1._dane.nlnetlabs.nl. RRSIG NSEC TLSA 013101310131055F64616E65096E6C6E65746C616273026E6C0000340001000027D800230101010D1FCBD71686199607A132744A4918FC209565C91FA8E9FFEEA0AAFD6B9305F6 1.1.1._dane.nlnetlabs.nl. 10200 IN TLSA 1 1 1 0D1FCBD71686199607A132744A4918FC209565C91FA8E9FFEEA0AAFD6B9305F6 013101310131055F64616E65096E6C6E65746C616273026E6C00002E0001000027D800A000340806000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C001558C595FCCCC0F0BD4C87B6924747318B8D0F87D3E75FA796EEA45F6E159F7778A50D6EDFA7DE23543172E9354DDD04BECA76D9CA9082C5DE04599BFC8CCDBD6199A9FBEDF69537B998CEAF7A35462E67D5E6BF6B2D15E76EC58EE23498C4C56B732EE9B82E9A119F04A1A365C7B76DB06E55C2DB7EF0D0C29E8F2BB9B3402D 1.1.1._dane.nlnetlabs.nl. 10200 IN RRSIG TLSA 8 6 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. FVjFlfzMwPC9TIe2kkdHMYuND4fT51+nlu6kX24Vn3d4pQ1u36feI1Qxcuk1Td0Evsp22cqQgsXeBFmb/IzNvWGZqfvt9pU3uZjOr3o1Ri5n1ea/ay0V527FjuI0mMTFa3Mu6bgumhGfBKGjZce3bbBuVcLbfvDQwp6PK7mzQC0= ;{id = 42393} 013101310131055F64616E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080600000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C00BE7B9B30AE90E25EB4CE0B7E13DA01FBA32900794402840B30DCE70953E95E8B6E01F0AC3E44A1A8FCCBC2D10D1344D0EB275D82398F5CC9711BA79E5C3745CA5C46EE0215900D03E518B996E2578DDAAA705D4D093166F3F471D46476D3F2CF6EAC8CB41DA5DCEE1C150F1274AE3632C7CADA9624D42F2DBB2BF250BD5C6381 1.1.1._dane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 6 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. vnubMK6Q4l60zgt+E9oB+6MpAHlEAoQLMNznCVPpXotuAfCsPkShqPzLwtENE0TQ6yddgjmPXMlxG6eeXDdFylxG7gIVkA0D5Ri5luJXjdqqcF1NCTFm8/Rx1GR20/LPbqyMtB2l3O4cFQ8SdK42MsfK2pYk1C8tuyvyUL1cY4E= ;{id = 42393} 013101310131055F64616E65096E6C6E65746C616273026E6C00002F000100000E100023013301310131055F64616E65096E6C6E65746C616273026E6C00000700000000000308 1.1.1._dane.nlnetlabs.nl. 3600 IN NSEC 3.1.1._dane.nlnetlabs.nl. RRSIG NSEC TLSA 013301310131055F64616E65096E6C6E65746C616273026E6C0000340001000027D800230301010D1FCBD71686199607A132744A4918FC209565C91FA8E9FFEEA0AAFD6B9305F6 3.1.1._dane.nlnetlabs.nl. 10200 IN TLSA 3 1 1 0D1FCBD71686199607A132744A4918FC209565C91FA8E9FFEEA0AAFD6B9305F6 013301310131055F64616E65096E6C6E65746C616273026E6C00002E0001000027D800A000340806000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C001485C1926DE0AC4AA3690DB02B1FBADD0D56FA1D37A6F2A19297202D79355F0FABB393152F0321982D7C90839A60EFA5ECBF3C6B8C951705D2A81B1C5B071F973DD721FADF679A571780AE8079DAA3643C3FB5DAE97693B166ED3D07143B20126F2BCE156A771AADBDD92F065DCFED61098FD793CF4917C1CF916C070D5CD392 3.1.1._dane.nlnetlabs.nl. 10200 IN RRSIG TLSA 8 6 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. FIXBkm3grEqjaQ2wKx+63Q1W+h03pvKhkpcgLXk1Xw+rs5MVLwMhmC18kIOaYO+l7L88a4yVFwXSqBscWwcflz3XIfrfZ5pXF4CugHnao2Q8P7Xa6XaTsWbtPQcUOyASbyvOFWp3Gq292S8GXc/tYQmP15PPSRfBz5FsBw1c05I= ;{id = 42393} 013301310131055F64616E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080600000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C00103514E63FCAAAB7BF781CD2748DE69D2E1FFB561435D25E101186D237DEBFE0ECA7FEC0F49FA53E4EDF975A2A7BC8AB241416BB5F9636FB9E44AF515A84A02186FA3B973C4B2A31B0FE97F59DE31446D048568C28947A2E350AFB7F6F0EE4080343CA96C69F3F59959DADCEAA44647209F058744AF46E4FDDFA135A9118C1BA 3.1.1._dane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 6 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. EDUU5j/Kqre/eBzSdI3mnS4f+1YUNdJeEBGG0jfev+Dsp/7A9J+lPk7fl1oqe8irJBQWu1+WNvueRK9RWoSgIYb6O5c8SyoxsP6X9Z3jFEbQSFaMKJR6LjUK+39vDuQIA0PKlsafP1mVna3OqkRkcgnwWHRK9G5P3foTWpEYwbo= ;{id = 42393} 013301310131055F64616E65096E6C6E65746C616273026E6C00002F000100000E10001E065F646D617263096E6C6E65746C616273026E6C00000700000000000308 3.1.1._dane.nlnetlabs.nl. 3600 IN NSEC _dmarc.nlnetlabs.nl. RRSIG NSEC TLSA 065F646D617263096E6C6E65746C616273026E6C0000100001000027D800441B763D444D415243313B20703D6E6F6E653B2073703D6E6F6E653B2000267275613D6D61696C746F3A646D6172632D666565646261636B406E6C6E65746C6162732E6E6C _dmarc.nlnetlabs.nl. 10200 IN TXT "v=DMARC1; p=none; sp=none; " "" "rua=mailto:dmarc-feedback@nlnetlabs.nl" 065F646D617263096E6C6E65746C616273026E6C00002E0001000027D800A000100803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C003E36E9A606C6B7BE314B6424A413FE7873CAF49DBD2E01A1EBBC810756DF9AF8445A74BBE316162D297CB7C533D6A364D96BC2384B845D42C554E29C74D200D02E6F412F2D292CD537BEFA8E256BE7BA014EFF241232F11BF5FF8819AA5F0A3901DE80A601DE679F360146C59B24756B6E6E07EFFD430F687706D675EAB58362 _dmarc.nlnetlabs.nl. 10200 IN RRSIG TXT 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. PjbppgbGt74xS2QkpBP+eHPK9J29LgGh67yBB1bfmvhEWnS74xYWLSl8t8Uz1qNk2WvCOEuEXULFVOKcdNIA0C5vQS8tKSzVN776jiVr57oBTv8kEjLxG/X/iBmqXwo5Ad6ApgHeZ582AUbFmyR1a25uB+/9Qw9odwbWdeq1g2I= ;{id = 42393} 065F646D617263096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C00B777FFB6B3289DAD3BDE8820FAC2E4ED0D14060B8C7BDBA68501DAFBCFB3DF023C99A641DAA502C523F6747DFF695217C85F547AA6B3025FE78DFEEF15EC28391423BCA4DD2B903A714F86D3DF5C46341E523A0BC8EF35B3719CBAFB6CADB7A21D4F0179DC7333FFC7492618740A623DD8A7708D44FC9619455EDF36030B7ECB _dmarc.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. t3f/trMona073ogg+sLk7Q0UBguMe9umhQHa+8+z3wI8maZB2qUCxSP2dH3/aVIXyF9UeqazAl/njf7vFewoORQjvKTdK5A6cU+G099cRjQeUjoLyO81s3GcuvtsrbeiHU8BedxzM//HSSYYdApiPdincI1E/JYZRV7fNgMLfss= ;{id = 42393} 065F646D617263096E6C6E65746C616273026E6C00002F000100000E1000290764656661756C740A5F646F6D61696E6B6579096E6C6E65746C616273026E6C000006000080000003 _dmarc.nlnetlabs.nl. 3600 IN NSEC default._domainkey.nlnetlabs.nl. TXT RRSIG NSEC 0764656661756C740A5F646F6D61696E6B6579096E6C6E65746C616273026E6C0000100001000027D8010327763D444B494D313B20723D706F73746D61737465723B20673D2A3B206B3D7273613B20743D793BDA703D4D4947664D413047435371475349623344514542415155414134474E4144434269514B426751444F42786B496C4E736B31665668554F38665A7336714A56362F5A4645736C74564975544844556E316451584F53716F303453434F586975526773467A784B4B414F715A4B6B736A4564787A634749375549616B66797A4845656F4165654A437249516F59334E63544F6D365A34616B355832345838645049693230373559774641486977454C7468746777747276557057723655304B426D456558747951346E6B2B2B48523261734A4951494441514142 default._domainkey.nlnetlabs.nl. 10200 IN TXT "v=DKIM1; r=postmaster; g=*; k=rsa; t=y;" "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOBxkIlNsk1fVhUO8fZs6qJV6/ZFEsltVIuTHDUn1dQXOSqo04SCOXiuRgsFzxKKAOqZKksjEdxzcGI7UIakfyzHEeoAeeJCrIQoY3NcTOm6Z4ak5X24X8dPIi2075YwFAHiwELthtgwtrvUpWr6U0KBmEeXtyQ4nk++HR2asJIQIDAQAB" 0764656661756C740A5F646F6D61696E6B6579096E6C6E65746C616273026E6C00002E0001000027D800A000100804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C009E787A15F0E1C28118026E5FF5BE5E56D1E5D78ABC1016FE1069A2671041510578F712E3228B927850635538C90EEE99BEB867C51E9A4C34751863A12AB68447B7644F074DE9219242D3281116F60D14C62FDEEDA0095A5AD612978C84D5808F31A8FFB62C43AF7D84295B5B882F27CCFAC3220DF077699AFFE2D308BE71B37F default._domainkey.nlnetlabs.nl. 10200 IN RRSIG TXT 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. nnh6FfDhwoEYAm5f9b5eVtHl14q8EBb+EGmiZxBBUQV49xLjIouSeFBjVTjJDu6ZvrhnxR6aTDR1GGOhKraER7dkTwdN6SGSQtMoERb2DRTGL97toAlaWtYSl4yE1YCPMaj/tixDr32EKVtbiC8nzPrDIg3wd2ma/+LTCL5xs38= ;{id = 42393} 0764656661756C740A5F646F6D61696E6B6579096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C0010CFDECC6BEF54FAE3C0D338237384093AA41BA297DF8BBD64D290B6209D0C30A8EA68EF18B10063395AB12B041712F2E2D3C140D27627F8914F322D34A25B8A9E5FEEBBDA81FA0A5C96DC1D5A291FB7A1F678C174B5AF4EB16A529BAB3E8CA35368F00A2739EDD65F4A7D27FF53FC6C5F2DE4C79C797ACA87AE471085E70502 default._domainkey.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. EM/ezGvvVPrjwNM4I3OECTqkG6KX34u9ZNKQtiCdDDCo6mjvGLEAYzlasSsEFxLy4tPBQNJ2J/iRTzItNKJbip5f7rvagfoKXJbcHVopH7eh9njBdLWvTrFqUpurPoyjU2jwCic57dZfSn0n/1P8bF8t5MeceXrKh65HEIXnBQI= ;{id = 42393} 0764656661756C740A5F646F6D61696E6B6579096E6C6E65746C616273026E6C00002F000100000E10002907736C657574656C0A5F646F6D61696E6B6579096E6C6E65746C616273026E6C000006000080000003 default._domainkey.nlnetlabs.nl. 3600 IN NSEC sleutel._domainkey.nlnetlabs.nl. TXT RRSIG NSEC 07736C657574656C0A5F646F6D61696E6B6579096E6C6E65746C616273026E6C0000100001000027D8010F28763D444B494D313B20723D706F73746D61737465723B20673D2A3B206B3D7273613B20743D793B20002A703D4D4947664D413047435371475349623344514542415155414134474E4144434269514B4267514379002A656C7574386D54612F724368672F6933774B58745165422F7837355365755733656E58426B3968324662002A625253487155352B4D774B762B6A6F61584E6756494B4A4F7748454D3961776146362B49753768764F63002A5A4B42656E5A6159726A52414C7576626C53363171653863694243353056712B4E733858754133676D4D002A55735A417448585455776C4466476634595177437267534C624A6E7A48464F304A4853686F447943423800085251494441514142 sleutel._domainkey.nlnetlabs.nl. 10200 IN TXT "v=DKIM1; r=postmaster; g=*; k=rsa; t=y; " "" "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy" "" "elut8mTa/rChg/i3wKXtQeB/x75SeuW3enXBk9h2Fb" "" "bRSHqU5+MwKv+joaXNgVIKJOwHEM9awaF6+Iu7hvOc" "" "ZKBenZaYrjRALuvblS61qe8ciBC50Vq+Ns8XuA3gmM" "" "UsZAtHXTUwlDfGf4YQwCrgSLbJnzHFO0JHShoDyCB8" "" "RQIDAQAB" 07736C657574656C0A5F646F6D61696E6B6579096E6C6E65746C616273026E6C00002E0001000027D800A000100804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00CD72F65153618545AE6BBABEC97899011506E649289EC4F74642E9AF45F052DF9B2ACE7DD43BEE9E983D1B37E5DFB8B49787E0E5BC4D38700D134D55D9DC6A9D2FE134103D694597569578900A53B04AF10F352F45DCDB27C574E7C2F03A0EE9BA71C74446F1C5624E8A2B1FE9A91AC99C64879173ED46E263A8ECDFDF340447 sleutel._domainkey.nlnetlabs.nl. 10200 IN RRSIG TXT 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. zXL2UVNhhUWua7q+yXiZARUG5kkonsT3RkLpr0XwUt+bKs591Dvunpg9Gzfl37i0l4fg5bxNOHANE01V2dxqnS/hNBA9aUWXVpV4kApTsErxDzUvRdzbJ8V058LwOg7punHHREbxxWJOiisf6akayZxkh5Fz7UbiY6js3980BEc= ;{id = 42393} 07736C657574656C0A5F646F6D61696E6B6579096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C000D88E0A15ED0750196FEBC1B34AAAEC8B6C3E7AC0FE5AF177EE60D5EBB9F64EEEEBD943D87AC08B80F7F01743E681AD416F0E2C4011D6EE06D6060A8BB7EFF1572D8E7AEF06BDAFC25472A6413C8D163EEEB57C2EAADB8A4AF2F89FAAC769870A211E774DFF330610BB809A28508833F88B4C3AE4D638C3632040771597913A1 sleutel._domainkey.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. DYjgoV7QdQGW/rwbNKquyLbD56wP5a8XfuYNXrufZO7uvZQ9h6wIuA9/AXQ+aBrUFvDixAEdbuBtYGCou37/FXLY567wa9r8JUcqZBPI0WPu61fC6q24pK8vifqsdphwohHndN/zMGELuAmihQiDP4i0w65NY4w2MgQHcVl5E6E= ;{id = 42393} 07736C657574656C0A5F646F6D61696E6B6579096E6C6E65746C616273026E6C00002F000100000E100020046F6C6166045F706B61096E6C6E65746C616273026E6C000006000080000003 sleutel._domainkey.nlnetlabs.nl. 3600 IN NSEC olaf._pka.nlnetlabs.nl. TXT RRSIG NSEC 046F6C6166045F706B61096E6C6E65746C616273026E6C0000100001000005DC006A69763D706B616C3B6670723D364645373333364538393742414434383236414134323630423444464443364237363039323238373B7572693D687474703A2F2F7777772E6E6C6E65746C6162732E6E6C2F7E6F6C61662F6B6F6C6B6D616E2E7067702E7075622E617363 olaf._pka.nlnetlabs.nl. 1500 IN TXT "v=pkal;fpr=6FE7336E897BAD4826AA4260B4DFDC6B76092287;uri=http://www.nlnetlabs.nl/~olaf/kolkman.pgp.pub.asc" 046F6C6166045F706B61096E6C6E65746C616273026E6C00002E0001000005DC00A000100804000005DC530B29F452E63FF4A599096E6C6E65746C616273026E6C000E3DB9AC055CEC9B555F057A712B6D298CF09435752F772C0B5CE2EE443D8A071A219F690C3D20299F0979E4F0F287D0114E0642A7D81668846C04BED83BFD5AE60D6CB928820405BADD1FCD63428049DB61B031076B83B844D0987B81DA8B11BB0ED11B8ED3A8F5EBF72E61391486BA9AED1825A4698CDC706F1A01657CB643 olaf._pka.nlnetlabs.nl. 1500 IN RRSIG TXT 8 4 1500 20140224111604 20140127111604 42393 nlnetlabs.nl. Dj25rAVc7JtVXwV6cSttKYzwlDV1L3csC1zi7kQ9igcaIZ9pDD0gKZ8JeeTw8ofQEU4GQqfYFmiEbAS+2Dv9WuYNbLkoggQFut0fzWNCgEnbYbAxB2uDuETQmHuB2osRuw7RG47TqPXr9y5hORSGuprtGCWkaYzccG8aAWV8tkM= ;{id = 42393} 046F6C6166045F706B61096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C009CAF9BC9C74DA74E7383511D0FA53FF446F2DD3F43DFF9476C30066C4C0B5AAC8C42A9B641E57B0979C00E1A755C13004CC4446ACBA9C734AD97C21E7C381BEFCBF19615795812CD1FD382AC5644DFFA1E7AC85475F7D58E3E18B8806FB4C217945854A075482F45715CBEF59BA4DAC73A78BBA494B10521650594E5FC63608F olaf._pka.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. nK+bycdNp05zg1EdD6U/9Eby3T9D3/lHbDAGbEwLWqyMQqm2QeV7CXnADhp1XBMATMREasupxzStl8IefDgb78vxlhV5WBLNH9OCrFZE3/oeeshUdffVjj4YuIBvtMIXlFhUoHVIL0VxXL71m6Taxzp4u6SUsQUhZQWU5fxjYI8= ;{id = 42393} 046F6C6166045F706B61096E6C6E65746C616273026E6C00002F000100000E1000220677696C6C656D045F706B61096E6C6E65746C616273026E6C000006000080000003 olaf._pka.nlnetlabs.nl. 3600 IN NSEC willem._pka.nlnetlabs.nl. TXT RRSIG NSEC 0677696C6C656D045F706B61096E6C6E65746C616273026E6C0000100001000005DC006B6A763D706B616C3B6670723D444333344545354442323431374243433135314535313030453546384638323132463737413439383B7572693D687474703A2F2F7777772E6E6C6E65746C6162732E6E6C2F7E77696C6C656D2F746F6F726F702E7067702E7075622E617363 willem._pka.nlnetlabs.nl. 1500 IN TXT "v=pkal;fpr=DC34EE5DB2417BCC151E5100E5F8F8212F77A498;uri=http://www.nlnetlabs.nl/~willem/toorop.pgp.pub.asc" 0677696C6C656D045F706B61096E6C6E65746C616273026E6C00002E0001000005DC00A000100804000005DC530B29F452E63FF4A599096E6C6E65746C616273026E6C0036AFB2112BE2CDB8822FD7003DCB53E9550FB2BCBC1740927B88BF2EE99EB76728B6E0D014EDE6F187AF62F0B316A57D058B29587D6386ADF561ACC54D30522C780D6D2F62766E967DAE6368E6357E7AB7A5F8C790B20C2D35BAB9C1C58364F752C2B316A4137645DCE09E1A0E89E677C8E873728F30F83A7A4E23F920BA2C49 willem._pka.nlnetlabs.nl. 1500 IN RRSIG TXT 8 4 1500 20140224111604 20140127111604 42393 nlnetlabs.nl. Nq+yESvizbiCL9cAPctT6VUPsry8F0CSe4i/Lumet2cotuDQFO3m8YevYvCzFqV9BYspWH1jhq31YazFTTBSLHgNbS9idm6Wfa5jaOY1fnq3pfjHkLIMLTW6ucHFg2T3UsKzFqQTdkXc4J4aDonmd8joc3KPMPg6ek4j+SC6LEk= ;{id = 42393} 0677696C6C656D045F706B61096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C005505EDB5A37306F692B0565585E6F03FB76E981639D216E852AA27B09BD1C1D48D9E402F8427A1FA11F0D74A58FF6A6D0BC017A0FC3EC682937B7371B3AF3C2B0BFD829D17BC0529969C09EC60A7CDBF9C1D3CBB9374DF256ABEB2C7ACCCBDFD6D5ACDD10A9344D81EF896FDE2226BBC459075760703676672E2FF42938ECBB2 willem._pka.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. VQXttaNzBvaSsFZVhebwP7dumBY50hboUqonsJvRwdSNnkAvhCeh+hHw10pY/2ptC8AXoPw+xoKTe3Nxs688Kwv9gp0XvAUplpwJ7GCnzb+cHTy7k3TfJWq+sseszL39bVrN0QqTRNge+Jb94iJrvEWQdXYHA2dmcuL/QpOOy7I= ;{id = 42393} 0677696C6C656D045F706B61096E6C6E65746C616273026E6C00002F000100000E10001F035F3235045F746370096E6C6E65746C616273026E6C000006000080000003 willem._pka.nlnetlabs.nl. 3600 IN NSEC _25._tcp.nlnetlabs.nl. TXT RRSIG NSEC 035F3235045F746370096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _25._tcp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 035F3235045F746370096E6C6E65746C616273026E6C00002E0001000027D800A000050804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00078F9E316CE93E8241FB697AB1B996124BDE4920304D4D65D2AA248F0A3A51E8198E814B485F31F3B4FF0D806BC191E5128B3B35A2730B128CEC0DD77D38AB45FA01332FE3C8AA03B7F4EBC03EA6E714ADAAB8CF951E15D77BF70BD77C2E1C35D7963349ED3B15DC65937C6EB4CC57816E798DDEFF1222D98DFF1A1C7B9DA4F4 _25._tcp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. B4+eMWzpPoJB+2l6sbmWEkveSSAwTU1l0qokjwo6UegZjoFLSF8x87T/DYBrwZHlEos7NaJzCxKM7A3XfTirRfoBMy/jyKoDt/TrwD6m5xStqrjPlR4V13v3C9d8Lhw115YzSe07Fdxlk3xutMxXgW55jd7/EiLZjf8aHHudpPQ= ;{id = 42393} 035F3235045F746370096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C00481C46323BFD9568BD4B79D6A876EBEE4E9CB96BB2550F9ED580E8D26FC55066FD9B3BE867DDE8C7648DCCF04F0F01F9D6F05F5BA89955C90877200B77E7801F27CA6EFCC287F7BD2BAD7AD0D6BE8FF81DDFB81CED9D43B37C715DA2C13528B484AB75DD2BCA437CB9759BCB895DCE953A6AA3DD5CBD4D209E122C9589464E40 _25._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. SBxGMjv9lWi9S3nWqHbr7k6cuWuyVQ+e1YDo0m/FUGb9mzvoZ93ox2SNzPBPDwH51vBfW6iZVckIdyALd+eAHyfKbvzCh/e9K6160Na+j/gd37gc7Z1Ds3xxXaLBNSi0hKt13SvKQ3y5dZvLiV3OlTpqo91cvU0gnhIslYlGTkA= ;{id = 42393} 035F3235045F746370096E6C6E65746C616273026E6C00002F000100000E100020045F343433045F746370096E6C6E65746C616273026E6C000006040000000003 _25._tcp.nlnetlabs.nl. 3600 IN NSEC _443._tcp.nlnetlabs.nl. CNAME RRSIG NSEC 045F343433045F746370096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _443._tcp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343433045F746370096E6C6E65746C616273026E6C00002E0001000027D800A000050804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00B0B2D9D0BC9BCE38FCA85CE7646E9CAD77615873D53D3DF27735A19C333517E401AE84DEF45944EE32A09C4E9E00CD2D92955C5934D7675DA9E29A80A6E5545DC9C623B8B2B025790C28F139C528C4D7E3C296C880BF589732015F652EA73C33DFC057F7A2543DCD5559C1B69535BD99C4C87D0456A433AE1D10E421EF7497DE _443._tcp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. sLLZ0Lybzjj8qFznZG6crXdhWHPVPT3ydzWhnDM1F+QBroTe9FlE7jKgnE6eAM0tkpVcWTTXZ12p4pqApuVUXcnGI7iysCV5DCjxOcUoxNfjwpbIgL9YlzIBX2Uupzwz38BX96JUPc1VWcG2lTW9mcTIfQRWpDOuHRDkIe90l94= ;{id = 42393} 045F343433045F746370096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C0057AEAE02BDDEC0E24992C9C7D2729192B62FE258D03F5844BBCE812C85966CD4F808EB94D48878A3761B602F61B31A4E42B48FAD48CBB1CE523C2385C6B80AEF54D206B92227054C561970898C68892215BCFE490E5A0076BF6C88C229AF4434BCBF855EC5D00B506DEF5D72D0B97BD5405C6EAA9B3B8B704C06384B19F3EBEB _443._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. V66uAr3ewOJJksnH0nKRkrYv4ljQP1hEu86BLIWWbNT4COuU1Ih4o3YbYC9hsxpOQrSPrUjLsc5SPCOFxrgK71TSBrkiJwVMVhlwiYxoiSIVvP5JDloAdr9siMIpr0Q0vL+FXsXQC1Bt711y0Ll71UBcbqqbO4twTAY4Sxnz6+s= ;{id = 42393} 045F343433045F746370096E6C6E65746C616273026E6C00002F000100000E100023075F63616C646176045F746370096E6C6E65746C616273026E6C000006040000000003 _443._tcp.nlnetlabs.nl. 3600 IN NSEC _caldav._tcp.nlnetlabs.nl. CNAME RRSIG NSEC 075F63616C646176045F746370096E6C6E65746C616273026E6C0000210001000027D80019000000001F48046963616C096E6C6E65746C616273026E6C00 _caldav._tcp.nlnetlabs.nl. 10200 IN SRV 0 0 8008 ical.nlnetlabs.nl. 075F63616C646176045F746370096E6C6E65746C616273026E6C00002E0001000027D800A000210804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00399FE5BDDF06F69BBC7EDF833E48B68C4C72E740C2265D91F111E93CC09E9B6088C3C2F861AFC88363271876D03068DD8582EF320F0F7E7B80F45997FC5DE814F4BB992635F9BD1D8AB35A423A323293646067E9A5F5B0259C6CF67E8CBBD0BB5AFC63BBAF321C3ED3B2700C26C718D408258C460ADA5EA2CC6E8E0B646D97A2 _caldav._tcp.nlnetlabs.nl. 10200 IN RRSIG SRV 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. OZ/lvd8G9pu8ft+DPki2jExy50DCJl2R8RHpPMCem2CIw8L4Ya/Ig2MnGHbQMGjdhYLvMg8PfnuA9FmX/F3oFPS7mSY1+b0dirNaQjoyMpNkYGfppfWwJZxs9n6Mu9C7Wvxju68yHD7TsnAMJscY1AgljEYK2l6izG6OC2Rtl6I= ;{id = 42393} 075F63616C646176045F746370096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C003625134D294A036899783B4B746147F090C1A334ECDDB4F8CDA172BE9E17F8EF1F913DDCE0FC402CDD5BAED7A3EA02C678C7C9735941A5F4242334846C9BCF2192CC58D21D5E81E64EF805EDFC02F182C97A5C96C0B9181692C0D1F4A9C7EC36F796DDB840F5A0FA753FC049694355447774850A191C6DE16D8DE98B6367BFEB _caldav._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. NiUTTSlKA2iZeDtLdGFH8JDBozTs3bT4zaFyvp4X+O8fkT3c4PxALN1brtej6gLGeMfJc1lBpfQkIzSEbJvPIZLMWNIdXoHmTvgF7fwC8YLJelyWwLkYFpLA0fSpx+w295bduED1oPp1P8BJaUNVRHd0hQoZHG3hbY3pi2Nnv+s= ;{id = 42393} 075F63616C646176045F746370096E6C6E65746C616273026E6C00002F000100000E100024085F63616C64617673045F746370096E6C6E65746C616273026E6C000006000000004003 _caldav._tcp.nlnetlabs.nl. 3600 IN NSEC _caldavs._tcp.nlnetlabs.nl. SRV RRSIG NSEC 085F63616C64617673045F746370096E6C6E65746C616273026E6C0000210001000027D800190000000020FB046963616C096E6C6E65746C616273026E6C00 _caldavs._tcp.nlnetlabs.nl. 10200 IN SRV 0 0 8443 ical.nlnetlabs.nl. 085F63616C64617673045F746370096E6C6E65746C616273026E6C00002E0001000027D800A000210804000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0096F87F88A6E938E55E608D94848F340C762E58C5701D66CB16E16D1F378428E77B301C58DB9AB8F665856338FC44AD740B8E9819E1D3B33A97290A4E70736BD5E07AA986EEE8915540239AF9D8ABD08EAD77ECA10DBE3D97AFF9639DFE28C2C97DCD41D69D6132226C024DE578E1B87874D97B6D3D291ADE485F5FAF078F1C72 _caldavs._tcp.nlnetlabs.nl. 10200 IN RRSIG SRV 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. lvh/iKbpOOVeYI2UhI80DHYuWMVwHWbLFuFtHzeEKOd7MBxY25q49mWFYzj8RK10C46YGeHTszqXKQpOcHNr1eB6qYbu6JFVQCOa+dir0I6td+yhDb49l6/5Y53+KMLJfc1B1p1hMiJsAk3leOG4eHTZe209KRreSF9frwePHHI= ;{id = 42393} 085F63616C64617673045F746370096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C0065B3EB35B340B369F33642938DCEA08C7DEE75B4A04D27752F6ED29B6AF85600F2485E3E43D04C9891AF5E305BDA69A3A2BCA70C3DA60A0E6AFC48FF32B68708EE69910231093330A25B7BA7649B2C29048DFBC6B1F6CC09E1386F609FBEFE1074C4AF984B2730EA60E209450037ED4E39FCEE2A411C73E446C714A7FE99F698 _caldavs._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. ZbPrNbNAs2nzNkKTjc6gjH3udbSgTSd1L27Sm2r4VgDySF4+Q9BMmJGvXjBb2mmjorynDD2mCg5q/Ej/MraHCO5pkQIxCTMwolt7p2SbLCkEjfvGsfbMCeE4b2Cfvv4QdMSvmEsnMOpg4glFADftTjn87ipBHHPkRscUp/6Z9pg= ;{id = 42393} 085F63616C64617673045F746370096E6C6E65746C616273026E6C00002F000100000E100023075F6A6162626572045F746370096E6C6E65746C616273026E6C000006000000004003 _caldavs._tcp.nlnetlabs.nl. 3600 IN NSEC _jabber._tcp.nlnetlabs.nl. SRV RRSIG NSEC 075F6A6162626572045F746370096E6C6E65746C616273026E6C0000210001000002580019000500001495046F70656E096E6C6E65746C616273026E6C00 _jabber._tcp.nlnetlabs.nl. 600 IN SRV 5 0 5269 open.nlnetlabs.nl. 075F6A6162626572045F746370096E6C6E65746C616273026E6C00002E00010000025800A00021080400000258530B29F452E63FF4A599096E6C6E65746C616273026E6C002BB8256AC85F0FFE2A69AAC737881BB84EC2B4C2F6BBCA9FCF9393BECCF7D867BD6BA31B177FAE94A92C939D7B1F5302202EA3A48185C9A19BC48ABA99670FAE3CD9F99D7D8844E586886486EAF994F74F7D6C93E0A9C08251312A20D11A7AE3B6D12E0B3BEC3E9EFF316D0CBD5EEC4F51A76B816A403579F3A600B9B94B47AB _jabber._tcp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. K7glashfD/4qaarHN4gbuE7CtML2u8qfz5OTvsz32Ge9a6MbF3+ulKksk517H1MCIC6jpIGFyaGbxIq6mWcPrjzZ+Z19iETlhohkhur5lPdPfWyT4KnAglExKiDRGnrjttEuCzvsPp7/MW0MvV7sT1Gna4FqQDV586YAublLR6s= ;{id = 42393} 075F6A6162626572045F746370096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C000851A976C278427831A325A5F0107C32364A31EE8898709D18EE69B7C50058FCF1D0AE08DACB14FC58A18B832DD60842DD83EBFE7552CE43A1C53EB7215C97A87B896329C3A50A14BCF11C4C16B620CE79834979AAB4C4AFED8A682F5D7331EDF713FF173BB2060CBBF2057AB7D9B3E3EA2B0AED8371981A2E27D763488C815D _jabber._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. CFGpdsJ4QngxoyWl8BB8MjZKMe6ImHCdGO5pt8UAWPzx0K4I2ssU/Fihi4Mt1ghC3YPr/nVSzkOhxT63IVyXqHuJYynDpQoUvPEcTBa2IM55g0l5qrTEr+2KaC9dczHt9xP/FzuyBgy78gV6t9mz4+orCu2DcZgaLifXY0iMgV0= ;{id = 42393} 075F6A6162626572045F746370096E6C6E65746C616273026E6C00002F000100000E1000280C5F786D70702D636C69656E74045F746370096E6C6E65746C616273026E6C000006000000004003 _jabber._tcp.nlnetlabs.nl. 3600 IN NSEC _xmpp-client._tcp.nlnetlabs.nl. SRV RRSIG NSEC 0C5F786D70702D636C69656E74045F746370096E6C6E65746C616273026E6C0000210001000002580019000500001466046F70656E096E6C6E65746C616273026E6C00 _xmpp-client._tcp.nlnetlabs.nl. 600 IN SRV 5 0 5222 open.nlnetlabs.nl. 0C5F786D70702D636C69656E74045F746370096E6C6E65746C616273026E6C00002E00010000025800A00021080400000258530B29F452E63FF4A599096E6C6E65746C616273026E6C004992038F6E2F726ED1991D791EC0409910649344772D1021920487B4B05EFDA301496BC4D8EC00FB3F04D79029E479F09DF7B396F2DAD8FA89D1665E8A1DC6B57B7FE394B229CAF2B6C428FB0F999D1E068ABB7614CA07F3F06C4FDD3798123780C04417E065380F966BC5A769D85D5E1A0388B32C13282F1D226F51609AC6F5 _xmpp-client._tcp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. SZIDj24vcm7RmR15HsBAmRBkk0R3LRAhkgSHtLBe/aMBSWvE2OwA+z8E15Ap5HnwnfezlvLa2PqJ0WZeih3GtXt/45SyKcrytsQo+w+ZnR4Girt2FMoH8/BsT903mBI3gMBEF+BlOA+Wa8WnadhdXhoDiLMsEygvHSJvUWCaxvU= ;{id = 42393} 0C5F786D70702D636C69656E74045F746370096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C00CA3676C9A9AE531E4E2786E74D027D493A3131449872AE6836E480009FCC40859F6F2F03B0B1A02F3E0E522A79F0A72B26A48F39B5579A2BCD4DC170E4B23B0034883F1BE62C67B1DBB4AFEC9C1A4B12FE9DBF90B561E136B8AEAFE7FA07654D2329DCC939B4B1627791DB7E98ECDE3F5EDFB0B9A6E008FD9246B90B58216423 _xmpp-client._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. yjZ2yamuUx5OJ4bnTQJ9SToxMUSYcq5oNuSAAJ/MQIWfby8DsLGgLz4OUip58KcrJqSPObVXmivNTcFw5LI7ADSIPxvmLGex27Sv7JwaSxL+nb+QtWHhNriur+f6B2VNIyncyTm0sWJ3kdt+mOzeP17fsLmm4Aj9kka5C1ghZCM= ;{id = 42393} 0C5F786D70702D636C69656E74045F746370096E6C6E65746C616273026E6C00002F000100000E1000280C5F786D70702D736572766572045F746370096E6C6E65746C616273026E6C000006000000004003 _xmpp-client._tcp.nlnetlabs.nl. 3600 IN NSEC _xmpp-server._tcp.nlnetlabs.nl. SRV RRSIG NSEC 0C5F786D70702D736572766572045F746370096E6C6E65746C616273026E6C0000210001000002580019000500001495046F70656E096E6C6E65746C616273026E6C00 _xmpp-server._tcp.nlnetlabs.nl. 600 IN SRV 5 0 5269 open.nlnetlabs.nl. 0C5F786D70702D736572766572045F746370096E6C6E65746C616273026E6C00002E00010000025800A00021080400000258530B29F452E63FF4A599096E6C6E65746C616273026E6C0089E4A6F8B0C580569640347C6E75DF3B6E7FD3DBC440B7DD3530B14C852C9EBFBD24057658FB71FEFB77EB903790175E80DFD09CF972EBFEC9B389F11EAD82124C423B54D3CFF43CF764958E3E441C9C756EDDBA19EC74AA63D5CFE94073D73A8410D9C7A8653A73A0F06B560B8EACBE16904CB89487DD95C7E4B8ED68E73196 _xmpp-server._tcp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. ieSm+LDFgFaWQDR8bnXfO25/09vEQLfdNTCxTIUsnr+9JAV2WPtx/vt365A3kBdegN/QnPly6/7Js4nxHq2CEkxCO1TTz/Q892SVjj5EHJx1bt26Gex0qmPVz+lAc9c6hBDZx6hlOnOg8GtWC46svhaQTLiUh92Vx+S47WjnMZY= ;{id = 42393} 0C5F786D70702D736572766572045F746370096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C000C8C2611798AE0DDCFDCB5FBC7B6554092A2332F4EFD0029611C1BBF61A4FDA1F6BDBA19626D052D62F59B25AD5100341369BDA4A2ED26F5F9B1B7E38C7AA3827C4BACC9182EC1496584F411DFBB762EBE89015685A5C155C54B442C6F343C09157C4B3D7442C2963D9D9614C23D4E199E3FA33D4243FD4885F4C3CAB8FD1798 _xmpp-server._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. DIwmEXmK4N3P3LX7x7ZVQJKiMy9O/QApYRwbv2Gk/aH2vboZYm0FLWL1myWtUQA0E2m9pKLtJvX5sbfjjHqjgnxLrMkYLsFJZYT0Ed+7di6+iQFWhaXBVcVLRCxvNDwJFXxLPXRCwpY9nZYUwj1OGZ4/oz1CQ/1IhfTDyrj9F5g= ;{id = 42393} 0C5F786D70702D736572766572045F746370096E6C6E65746C616273026E6C00002F000100000E100020045F736970045F756470096E6C6E65746C616273026E6C000006000000004003 _xmpp-server._tcp.nlnetlabs.nl. 3600 IN NSEC _sip._udp.nlnetlabs.nl. SRV RRSIG NSEC 045F736970045F756470096E6C6E65746C616273026E6C000021000100000258001C0000000013C4076F62656C69736B096E6C6E65746C616273026E6C00 _sip._udp.nlnetlabs.nl. 600 IN SRV 0 0 5060 obelisk.nlnetlabs.nl. 045F736970045F756470096E6C6E65746C616273026E6C00002E00010000025800A00021080400000258530B29F452E63FF4A599096E6C6E65746C616273026E6C004E375FA6609E868321A31C1D16678C0F644E0A6B9F8792084B19F4BE8B2626BC11A1120201313F53A7E34DE8F707A8E836B89915BEA52827D4230F8217C8EB5E77AF057C90680198B68FEB11BA6C37F6CD382A99AB84FE8A56922AD9719C249D711944278B70C9969B9858C4B099AE85CEF08DAA8EE80E916169031B6AC6A468 _sip._udp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. TjdfpmCehoMhoxwdFmeMD2ROCmufh5IISxn0vosmJrwRoRICATE/U6fjTej3B6joNriZFb6lKCfUIw+CF8jrXnevBXyQaAGYto/rEbpsN/bNOCqZq4T+ilaSKtlxnCSdcRlEJ4twyZabmFjEsJmuhc7wjaqO6A6RYWkDG2rGpGg= ;{id = 42393} 045F736970045F756470096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C007476D475CA08802F018710666D7F2B369D01EAAAA5FCD93CCBEABE824FF42252129A93F05B62A6817215670E32B81C7DC069140042690B815E247C03C31CCAD30870166869E51324DE314F7F2076D1899553A84A376E1585B89E3303B0A655B2A70804BFFE700601044A165AD2937F16FD4240D884E461A03A1CA0159B678430 _sip._udp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. dHbUdcoIgC8BhxBmbX8rNp0B6qql/Nk8y+q+gk/0IlISmpPwW2KmgXIVZw4yuBx9wGkUAEJpC4FeJHwDwxzK0whwFmhp5RMk3jFPfyB20YmVU6hKN24VhbieMwOwplWypwgEv/5wBgEEShZa0pN/Fv1CQNiE5GGgOhygFZtnhDA= ;{id = 42393} 045F736970045F756470096E6C6E65746C616273026E6C00002F000100000E10001F08616C63617472617A096E6C6E65746C616273026E6C000006000000004003 _sip._udp.nlnetlabs.nl. 3600 IN NSEC alcatraz.nlnetlabs.nl. SRV RRSIG NSEC 08616C63617472617A096E6C6E65746C616273026E6C0000010001000027D80004D59AE019 alcatraz.nlnetlabs.nl. 10200 IN A 213.154.224.25 08616C63617472617A096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C00634C9C6B47269CD076CB8CF3E51A6B6A647B5FFCAE981650E7BB0C74E301804E73E0C53A50ACD779FA35BC7910D933F9144B5C84AC8EE5EFE9EDA8597035753E3CB2135202C9D8D9764678DB9CC060699205EE5947CEDC32ED460FD64988CFC06B4BCE5B365DB23160AAED969450EB339F86636EF35FE664FCDFA3843CCBD706 alcatraz.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. Y0yca0cmnNB2y4zz5RpramR7X/yumBZQ57sMdOMBgE5z4MU6UKzXefo1vHkQ2TP5FEtchKyO5e/p7ahZcDV1PjyyE1ICydjZdkZ425zAYGmSBe5ZR87cMu1GD9ZJiM/Aa0vOWzZdsjFgqu2WlFDrM5+GY27zX+Zk/N+jhDzL1wY= ;{id = 42393} 08616C63617472617A096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0071BEF176507E0F5A0E7A07711AA3A20ADD6CE3EEA63807348CEB98C5F53A2CD359228D36557523FC8DA9C96344281B66982DC02826C94229C23CC3F872098480449E3B39648EEF724C2F9A4782FD88950FA8562378D09736B510C79FF4B68F4347A0A084802C27991EDA1198611AA64E02702BD30F19BEE095338CA47D45D55A alcatraz.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. cb7xdlB+D1oOegdxGqOiCt1s4+6mOAc0jOuYxfU6LNNZIo02VXUj/I2pyWNEKBtmmC3AKCbJQinCPMP4cgmEgESeOzlkju9yTC+aR4L9iJUPqFYjeNCXNrUQx5/0to9DR6CghIAsJ5ke2hGYYRqmTgJwK9MPGb7glTOMpH1F1Vo= ;{id = 42393} 08616C63617472617A096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0037DED980234C22B8DB5604FD97691CCB571D3726CBC77F0FBD1C74C2B51A590C53F2189DD2D77C6AD2101961D20D0772F942775E140789F37597B9C9D26F4945089376A926530D0A5B0F5CE484AC7D3417865775BB01999FAF1E258717B413B065ED5AE0038C95A133D642DADD02CF8A4B9E9F9717E4B1927DAF7CFD13AA3722 alcatraz.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. N97ZgCNMIrjbVgT9l2kcy1cdNybLx38PvRx0wrUaWQxT8hid0td8atIQGWHSDQdy+UJ3XhQHifN1l7nJ0m9JRQiTdqkmUw0KWw9c5ISsfTQXhld1uwGZn68eJYcXtBOwZe1a4AOMlaEz1kLa3QLPikuen5cX5LGSfa98/ROqNyI= ;{id = 42393} 08616C63617472617A096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C002502C279A895DADBAD7EE346B1F4E9CF8E164CF4EF085177D88235FA407AA45207D58A9860BE89801C7CA5918C046C78C8E328C97C6E7BF80F155D2E35F19034C9A17AD7C4B70265B0D4CD9DB720D602CA36ACE74BE790CAF8B8997679DE7EE12AF28FD6B48ABD8560CF1938C6F7DC3DAE86A7C5164901ADBEEC34EBBB415C56 alcatraz.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. JQLCeaiV2tutfuNGsfTpz44WTPTvCFF32II1+kB6pFIH1YqYYL6JgBx8pZGMBGx4yOMoyXxue/gPFV0uNfGQNMmhetfEtwJlsNTNnbcg1gLKNqznS+eQyvi4mXZ53n7hKvKP1rSKvYVgzxk4xvfcPa6Gp8UWSQGtvuw067tBXFY= ;{id = 42393} 08616C63617472617A096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021CC0FFFE3C3D00 alcatraz.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21c:c0ff:fe3c:3d00 08616C63617472617A096E6C6E65746C616273026E6C00002C0001000027D800160101B944A464623DFE578BE5351837E725E866671D47 alcatraz.nlnetlabs.nl. 10200 IN SSHFP 1 1 B944A464623DFE578BE5351837E725E866671D47 08616C63617472617A096E6C6E65746C616273026E6C00002C0001000027D800160201A0989A25D41E77D56E37FFC5DF1716CAB3B1A16B alcatraz.nlnetlabs.nl. 10200 IN SSHFP 2 1 A0989A25D41E77D56E37FFC5DF1716CAB3B1A16B 08616C63617472617A096E6C6E65746C616273026E6C00002C0001000027D800160301C2511B00B3D725B8F2BCF27AF735C2946EAFD757 alcatraz.nlnetlabs.nl. 10200 IN SSHFP 3 1 C2511B00B3D725B8F2BCF27AF735C2946EAFD757 08616C63617472617A096E6C6E65746C616273026E6C00002F000100000E10001D06616C65786961096E6C6E65746C616273026E6C00000640000008000B alcatraz.nlnetlabs.nl. 3600 IN NSEC alexia.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 06616C65786961096E6C6E65746C616273026E6C0000010001000027D80004D59AE0D2 alexia.nlnetlabs.nl. 10200 IN A 213.154.224.210 06616C65786961096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C000BB746112AFF8C039254716882E165F6EA961FAA618BE186C91F4D3BAE0B6618BD24FA0F7A0568E981CB60E5200AB8897CFA6CD2A9C77D09425D22CD14439281E07D3FA562CC1366A1E74041ABDCD52CE49D918CB7177C3A64329789A781DF4E6B336EE87321FD7DA84C49ABF5F1D9B0F381AF1A173B6361F6EFDD8096DFB340 alexia.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. C7dGESr/jAOSVHFoguFl9uqWH6phi+GGyR9NO64LZhi9JPoPegVo6YHLYOUgCriJfPps0qnHfQlCXSLNFEOSgeB9P6VizBNmoedAQavc1SzknZGMtxd8OmQyl4mngd9OazNu6HMh/X2oTEmr9fHZsPOBrxoXO2Nh9u/dgJbfs0A= ;{id = 42393} 06616C65786961096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F452E63FF4A599096E6C6E65746C616273026E6C0068BBD4FF407D82F25E0544BAE81331293A61F61F0C0C44711D328F216413EE598017DF58CBC3A4DFAD728162D0E0B591F4FCB967F27C0D70D0A669E3A7BE084078AC4F11365AC310CC7FD9046C50588B2ABFAF5495B9A83D36EE88C2CC936363F8873B3454B6AC3DB5AF42AD974E6EA9D881E3EAF0D71CF5D0FF7F6C43B2A403 alexia.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. aLvU/0B9gvJeBUS66BMxKTph9h8MDERxHTKPIWQT7lmAF99Yy8Ok361ygWLQ4LWR9Py5Z/J8DXDQpmnjp74IQHisTxE2WsMQzH/ZBGxQWIsqv69UlbmoPTbuiMLMk2Nj+Ic7NFS2rD21r0Ktl05uqdiB4+rw1xz10P9/bEOypAM= ;{id = 42393} 06616C65786961096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F452E63FF4A599096E6C6E65746C616273026E6C002CD3F78EBF4A82AB78FC546E08DB0AD1F8C102F97684D2A262B112351717F5186D7A8C3B0CA7D0A4A366A20CF7CC0050128861ECDDDF47C541897EE45305CB51A2C91E46347CABA362D56CB9C8535724C3F14D20E896AACD9F15A1552B905BE706AE72D897E7AAD617FC9BD1258F09D386CBD13C96A73116823B2162CC0F1199 alexia.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. LNP3jr9Kgqt4/FRuCNsK0fjBAvl2hNKiYrESNRcX9Rhteow7DKfQpKNmogz3zABQEohh7N3fR8VBiX7kUwXLUaLJHkY0fKujYtVsuchTVyTD8U0g6JaqzZ8VoVUrkFvnBq5y2JfnqtYX/JvRJY8J04bL0TyWpzEWgjshYswPEZk= ;{id = 42393} 06616C65786961096E6C6E65746C616273026E6C00002C0001000027D800160101B91A18FE2C6E91D6C36E49C76913601F71E8D458 alexia.nlnetlabs.nl. 10200 IN SSHFP 1 1 B91A18FE2C6E91D6C36E49C76913601F71E8D458 06616C65786961096E6C6E65746C616273026E6C00002C0001000027D80022010258DD96744E805C4950B3C0817BBBE97A80AF42446EBD458B05F7F8797FB8D806 alexia.nlnetlabs.nl. 10200 IN SSHFP 1 2 58DD96744E805C4950B3C0817BBBE97A80AF42446EBD458B05F7F8797FB8D806 06616C65786961096E6C6E65746C616273026E6C00002C0001000027D800160201A89C7B38263F4186D8520C6C85237C38578D5441 alexia.nlnetlabs.nl. 10200 IN SSHFP 2 1 A89C7B38263F4186D8520C6C85237C38578D5441 06616C65786961096E6C6E65746C616273026E6C00002C0001000027D80022020201907DB6FED4A633ED021B1A939D0387931C800BE4929887A4AA79FBE365E0AB alexia.nlnetlabs.nl. 10200 IN SSHFP 2 2 01907DB6FED4A633ED021B1A939D0387931C800BE4929887A4AA79FBE365E0AB 06616C65786961096E6C6E65746C616273026E6C00002F000100000E10001C05616C706861096E6C6E65746C616273026E6C00000640000000000B alexia.nlnetlabs.nl. 3600 IN NSEC alpha.nlnetlabs.nl. A SSHFP RRSIG NSEC 05616C706861096E6C6E65746C616273026E6C0000010001000027D80004D59AE03B alpha.nlnetlabs.nl. 10200 IN A 213.154.224.59 05616C706861096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00725D64725DF5FCE33045F9E8218045DD53D760FF991C79F26BA20B9BCD9B3D604993BDA6DA57BEA33120A74DE144039233EE362F2BBA2B2AD8726D435220EAC5CDD2AD36609326EC0733D11E8805C15B72D5909B6C5D9A1C1FB34C5376D5A75C8AAF863AB87919B3FB9C64C9E2A678302A478083E20F949EB18E1FB4D03A1CA1 alpha.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. cl1kcl31/OMwRfnoIYBF3VPXYP+ZHHnya6ILm82bPWBJk72m2le+ozEgp03hRAOSM+42Lyu6KyrYcm1DUiDqxc3SrTZgkybsBzPRHogFwVty1ZCbbF2aHB+zTFN21adciq+GOrh5GbP7nGTJ4qZ4MCpHgIPiD5SesY4ftNA6HKE= ;{id = 42393} 05616C706861096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006F1B4B5BB0D9A61EC293AF63259ABD5282A19FC064D4E723C16D6A4F131547E89375E9F5993666E4279F41EFB84FD35992147C3634C3B28D8C20F40D9F19757B99DB22F9BF48F480F35BBAEF282C1E600E784561D8572E09390644456D566F016ACAC55762B33551B3D06E3BE357932A03E707A868D274C57D3D56676F4D058E alpha.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bxtLW7DZph7Ck69jJZq9UoKhn8Bk1OcjwW1qTxMVR+iTden1mTZm5CefQe+4T9NZkhR8NjTDso2MIPQNnxl1e5nbIvm/SPSA81u67ygsHmAOeEVh2FcuCTkGREVtVm8BasrFV2KzNVGz0G4741eTKgPnB6ho0nTFfT1WZ29NBY4= ;{id = 42393} 05616C706861096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0056D0587436DAACDA920FFA3453F9CE5CF8C0B2810DEBBD36E3ED00F86632E332EEBD8E070AD88E48BC5EBEBCB4B18B79B85EEA6AE420E2FB8F4828749E22F35B090AE33064C97D7C3D2C33287476DA15B19609564C37255DEA13E5B34FAA6B77D405BA9B51CF759C4D070D2B8721F0548239CE3B137EEC79FA77D8CAA181559A alpha.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VtBYdDbarNqSD/o0U/nOXPjAsoEN67024+0A+GYy4zLuvY4HCtiOSLxevry0sYt5uF7qauQg4vuPSCh0niLzWwkK4zBkyX18PSwzKHR22hWxlglWTDclXeoT5bNPqmt31AW6m1HPdZxNBw0rhyHwVII5zjsTfux5+nfYyqGBVZo= ;{id = 42393} 05616C706861096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004FDEE8DEAD0E332FA3D7D0121D8FF3C6FAB92C784126E4E51CDD9130868A5EE192BAF5256D458076D664D61735A561353AD1DA8B77555F14CDBD326405D493CD1C96B896FBB5A6DFE3C9B1B3F03CA4FB3A029B2B9D1D3F0712173C4CE672236D8C0B2CFD4E67B47C983CB920EF2A98AC8B81CD466A7C28EF00E448853C444F86 alpha.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T97o3q0OMy+j19ASHY/zxvq5LHhBJuTlHN2RMIaKXuGSuvUlbUWAdtZk1hc1pWE1OtHai3dVXxTNvTJkBdSTzRyWuJb7tabf48mxs/A8pPs6ApsrnR0/BxIXPEzmciNtjAss/U5ntHyYPLkg7yqYrIuBzUZqfCjvAORIhTxET4Y= ;{id = 42393} 05616C706861096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000007 alpha.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::7 05616C706861096E6C6E65746C616273026E6C00002C0001000027D800160101B64058566EF5987D784E3ECE10078FD47DFF77CB alpha.nlnetlabs.nl. 10200 IN SSHFP 1 1 B64058566EF5987D784E3ECE10078FD47DFF77CB 05616C706861096E6C6E65746C616273026E6C00002C0001000027D8001602014E8F99D5B341DBEBA0C8D620ED463C14A8026EDF alpha.nlnetlabs.nl. 10200 IN SSHFP 2 1 4E8F99D5B341DBEBA0C8D620ED463C14A8026EDF 05616C706861096E6C6E65746C616273026E6C00002C0001000027D8001603013544B26A0618AF50938755BAFDB9418F46B63578 alpha.nlnetlabs.nl. 10200 IN SSHFP 3 1 3544B26A0618AF50938755BAFDB9418F46B63578 05616C706861096E6C6E65746C616273026E6C00002F000100000E100020036F6C6405616C706861096E6C6E65746C616273026E6C00000640000008000B alpha.nlnetlabs.nl. 3600 IN NSEC old.alpha.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 036F6C6405616C706861096E6C6E65746C616273026E6C0000010001000027D80004D59AE08E old.alpha.nlnetlabs.nl. 10200 IN A 213.154.224.142 036F6C6405616C706861096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002E4F4BAB0C072DE743234E9978373073EFC9430FB669727E8E0B99A3A2CAA8D0CDF221674623C370096AE81CC7F248A253294FF18F61C349B863D00FB2E835B8F0CA4DFA14C1C06133E56FB017C9CDCD031CC166AB3AC8E70EFBF8015F3F7C07DC260F06AE8F5E38A717C29F4350C3034277534AD2C5B239EBE3799F142F69F6 old.alpha.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Lk9LqwwHLedDI06ZeDcwc+/JQw+2aXJ+jguZo6LKqNDN8iFnRiPDcAlq6BzH8kiiUylP8Y9hw0m4Y9APsug1uPDKTfoUwcBhM+VvsBfJzc0DHMFmqzrI5w77+AFfP3wH3CYPBq6PXjinF8KfQ1DDA0J3U0rSxbI56+N5nxQvafY= ;{id = 42393} 036F6C6405616C706861096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001540C8DBBB2F8791FABC08E91ADAAC85151C92E8C0979BE15D9B0BC0B4A5ED866CF65DF1BD8D6761A4C0F89DE1E03566676F2C55E8DAD950C2C47EFDF780C346EDFEC7B1EBD2D594E7A69B07E94113D257977C27D895760C158EAA8FA1226C5C9797B5B944254FA65D9EE9D9B25F1369601B3F74F104D95DB5204DF15601EB0B old.alpha.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FUDI27svh5H6vAjpGtqshRUckujAl5vhXZsLwLSl7YZs9l3xvY1nYaTA+J3h4DVmZ28sVeja2VDCxH7994DDRu3+x7Hr0tWU56abB+lBE9JXl3wn2JV2DBWOqo+hImxcl5e1uUQlT6ZdnunZsl8TaWAbP3TxBNldtSBN8VYB6ws= ;{id = 42393} 036F6C6405616C706861096E6C6E65746C616273026E6C00002E0001000027D800A0002C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006BC52013A14E585976D7AC7716D2DDA3CEB0EE95FA9E2E8F514F522A117E50CEA7226B79D3B3975FECE99DF3C5FCA2A5E6E1DEB0540361CE9CFA1171F2705152683372E304DA60CF1DC7537301F62DB85A6B54051770A09E3F263D7B899711232107560B881AB8A0133CAF149548F1D9CC3A3D4D4948E541D0ECBADCDE8C5D46 old.alpha.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a8UgE6FOWFl216x3FtLdo86w7pX6ni6PUU9SKhF+UM6nImt507OXX+zpnfPF/KKl5uHesFQDYc6c+hFx8nBRUmgzcuME2mDPHcdTcwH2Lbhaa1QFF3Cgnj8mPXuJlxEjIQdWC4gauKATPK8UlUjx2cw6PU1JSOVB0Oy63N6MXUY= ;{id = 42393} 036F6C6405616C706861096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008D51C8E2579F9C1AC0CA3B814791F660B8B42FDA2FDBFF909B87CAE2D9BA60ACC72A1667410DAF9F102F00DFA9369C847EE0AC2EDBC02D1BCA7373F43E179B6E96BF79C01C5454AF22D94563B2EAB9849AEC88C23614D0BD6FA63EBF0B11D1EA368C824DCBD19DB42249C3FD3B530C068083B1D7420CF7AE71DF7C4DC37125D6 old.alpha.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jVHI4lefnBrAyjuBR5H2YLi0L9ov2/+Qm4fK4tm6YKzHKhZnQQ2vnxAvAN+pNpyEfuCsLtvALRvKc3P0Phebbpa/ecAcVFSvItlFY7LquYSa7IjCNhTQvW+mPr8LEdHqNoyCTcvRnbQiScP9O1MMBoCDsddCDPeucd98TcNxJdY= ;{id = 42393} 036F6C6405616C706861096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010250DAFFFE3D01D6 old.alpha.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:250:daff:fe3d:1d6 036F6C6405616C706861096E6C6E65746C616273026E6C00002C0001000027D800160101B64058566EF5987D784E3ECE10078FD47DFF77CB old.alpha.nlnetlabs.nl. 10200 IN SSHFP 1 1 B64058566EF5987D784E3ECE10078FD47DFF77CB 036F6C6405616C706861096E6C6E65746C616273026E6C00002C0001000027D8001602014E8F99D5B341DBEBA0C8D620ED463C14A8026EDF old.alpha.nlnetlabs.nl. 10200 IN SSHFP 2 1 4E8F99D5B341DBEBA0C8D620ED463C14A8026EDF 036F6C6405616C706861096E6C6E65746C616273026E6C00002C0001000027D8001603013544B26A0618AF50938755BAFDB9418F46B63578 old.alpha.nlnetlabs.nl. 10200 IN SSHFP 3 1 3544B26A0618AF50938755BAFDB9418F46B63578 036F6C6405616C706861096E6C6E65746C616273026E6C00002F000100000E10001D06616D616C6961096E6C6E65746C616273026E6C00000640000008000B old.alpha.nlnetlabs.nl. 3600 IN NSEC amalia.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 06616D616C6961096E6C6E65746C616273026E6C0000010001000027D80004D59AE0D1 amalia.nlnetlabs.nl. 10200 IN A 213.154.224.209 06616D616C6961096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A2C9355B490AF9D5C6D49D046C35415AF0DEA834EC445D9099B7B2108080F585884DF972CF155D897EABCB5579A5C80B7348FBD927F9A55B30C16E7C7E35B8A1E91EFBFA0CA4C220BB81DAC3EF3156B6DD85A45DD757478E50BBF5756A3386D49E972D30504B1FC7DCBE70517AEE5CA99CB439077CA5EC5E5E79844656896998 amalia.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. osk1W0kK+dXG1J0EbDVBWvDeqDTsRF2QmbeyEICA9YWITflyzxVdiX6ry1V5pcgLc0j72Sf5pVswwW58fjW4oeke+/oMpMIgu4Haw+8xVrbdhaRd11dHjlC79XVqM4bUnpctMFBLH8fcvnBReu5cqZy0OQd8pexeXnmERlaJaZg= ;{id = 42393} 06616D616C6961096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B1CE1573F2F5E41AC603ECD2A0461C9CCA3840195402FE25E725876D48EEBCCC596FF7FBDC2DA560779908BFFE139A1D8A74880DA07C7269A7B078B77C163CAF9ECCD66D75338B5B5352550D67AABA63E40999C5929564673567453257A7F0927CAB9269D7F1356F1DF2382B84A2FD88297405601C064A7BE86937C917CDEA94 amalia.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sc4Vc/L15BrGA+zSoEYcnMo4QBlUAv4l5yWHbUjuvMxZb/f73C2lYHeZCL/+E5odinSIDaB8cmmnsHi3fBY8r57M1m11M4tbU1JVDWequmPkCZnFkpVkZzVnRTJXp/CSfKuSadfxNW8d8jgrhKL9iCl0BWAcBkp76Gk3yRfN6pQ= ;{id = 42393} 06616D616C6961096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0024C59308FE39CB177EA49DDA8B82C8117D7F0A263AA90B8ABC494AC1D20CC07119BA16533F3FF6CD1B196B226026367384D4C8F5BB3074AABE754689E738B0012F18B1AC0EDDAACBFF12AF088F460C8A9F0FDB1A971F8415736E038047C3FF868712ACA93394A3B558911DDFC0ABFEF0CC5541606196B34E1BA24061DF4815E4 amalia.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. JMWTCP45yxd+pJ3ai4LIEX1/CiY6qQuKvElKwdIMwHEZuhZTPz/2zRsZayJgJjZzhNTI9bswdKq+dUaJ5ziwAS8YsawO3arL/xKvCI9GDIqfD9salx+EFXNuA4BHw/+GhxKsqTOUo7VYkR3fwKv+8MxVQWBhlrNOG6JAYd9IFeQ= ;{id = 42393} 06616D616C6961096E6C6E65746C616273026E6C00002C0001000027D80016010124526B0DB9CD858285E297732E47586D0F0A894D amalia.nlnetlabs.nl. 10200 IN SSHFP 1 1 24526B0DB9CD858285E297732E47586D0F0A894D 06616D616C6961096E6C6E65746C616273026E6C00002C0001000027D800220102874F4343A9DAC9AEC8E17611B3424F08AE46274000D4AA03DECAF645D0BF59D3 amalia.nlnetlabs.nl. 10200 IN SSHFP 1 2 874F4343A9DAC9AEC8E17611B3424F08AE46274000D4AA03DECAF645D0BF59D3 06616D616C6961096E6C6E65746C616273026E6C00002C0001000027D80016020136F26D5F0887C93B1C76626083CC3826EA929711 amalia.nlnetlabs.nl. 10200 IN SSHFP 2 1 36F26D5F0887C93B1C76626083CC3826EA929711 06616D616C6961096E6C6E65746C616273026E6C00002C0001000027D800220202A22D01A9B4920A8281F41D280B065B03DEDA6AFD268B6679D18F9D3E40E27DF0 amalia.nlnetlabs.nl. 10200 IN SSHFP 2 2 A22D01A9B4920A8281F41D280B065B03DEDA6AFD268B6679D18F9D3E40E27DF0 06616D616C6961096E6C6E65746C616273026E6C00002F000100000E10001F08617065786F6E6C79096E6C6E65746C616273026E6C00000640000000000B amalia.nlnetlabs.nl. 3600 IN NSEC apexonly.nlnetlabs.nl. A SSHFP RRSIG NSEC 08617065786F6E6C79096E6C6E65746C616273026E6C0000020001000027D800230C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00 apexonly.nlnetlabs.nl. 10200 IN NS willemtoorop.friends.nlnetlabs.nl. 08617065786F6E6C79096E6C6E65746C616273026E6C00002B0001000027D8002483C708028FA16EC68A557AC5808941EE9E9563C526B42DAC09262DDF1A7C7A81051101C7 apexonly.nlnetlabs.nl. 10200 IN DS 33735 8 2 8FA16EC68A557AC5808941EE9E9563C526B42DAC09262DDF1A7C7A81051101C7 08617065786F6E6C79096E6C6E65746C616273026E6C00002E0001000027D800A0002B0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0086F7332374645908B1DA5A5EE9881BE5DE3DD835B427AA0B09BF3CE838912614651FE68E352AB6A342B3524FD52F7C52C0C8D257EC335AA4F7392E729BDF161541271C49EA75F5791E8403C9C880CEBA2D41E5045EA96A1E6FA3A4836083C6EE044E232FAB4C7A646C1C0DCFE7669984C070395FDAF5A95F362C0004221BBDCA apexonly.nlnetlabs.nl. 10200 IN RRSIG DS 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hvczI3RkWQix2lpe6Ygb5d492DW0J6oLCb886DiRJhRlH+aONSq2o0KzUk/VL3xSwMjSV+wzWqT3OS5ym98WFUEnHEnqdfV5HoQDyciAzrotQeUEXqlqHm+jpINgg8buBE4jL6tMemRsHA3P52aZhMBwOV/a9alfNiwABCIbvco= ;{id = 42393} 08617065786F6E6C79096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007CE5FD6AC359D8D512117F490AB11362614DAA9F7954A40F19FA1C9AD1C32065C70027A97C56EC511F9B2E0050787683B9792DAB493CC9D93DDA46AB2E93BD3514452E260311B5B4CC904287E1883CDCFC3D72BB03B75D9856040BE6CA487FEB316B6D74E0938B5CDEB695924526DFC26D50FB7F8CD9A75797C45FDE13ACE5BD apexonly.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fOX9asNZ2NUSEX9JCrETYmFNqp95VKQPGfocmtHDIGXHACepfFbsUR+bLgBQeHaDuXktq0k8ydk92karLpO9NRRFLiYDEbW0zJBCh+GIPNz8PXK7A7ddmFYEC+bKSH/rMWttdOCTi1zetpWSRSbfwm1Q+3+M2adXl8Rf3hOs5b0= ;{id = 42393} 08617065786F6E6C79096E6C6E65746C616273026E6C00002F000100000E10001D06617265613531096E6C6E65746C616273026E6C000006200000000013 apexonly.nlnetlabs.nl. 3600 IN NSEC area51.nlnetlabs.nl. NS DS RRSIG NSEC 06617265613531096E6C6E65746C616273026E6C0000010001000027D80004D59AE06B area51.nlnetlabs.nl. 10200 IN A 213.154.224.107 06617265613531096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0021816F0022C0E467503F3207DC9450411A4C89EE02E56A06688AA7302EC89C2E8A83F8C23177456B25C836B0F44D9AFA493BF752973BCE512D437263CC557E254862EA00C400C20A0CD0B9771BDCB5B4C6F1CB0F445D4910EA8148D338555BD3CA36312625180C407E81DFDA8AEAF421A7361FEE50D6F9E007A827E2CED58D2C area51.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IYFvACLA5GdQPzIH3JRQQRpMie4C5WoGaIqnMC7InC6Kg/jCMXdFayXINrD0TZr6STv3Upc7zlEtQ3JjzFV+JUhi6gDEAMIKDNC5dxvctbTG8csPRF1JEOqBSNM4VVvTyjYxJiUYDEB+gd/aiur0Iac2H+5Q1vngB6gn4s7VjSw= ;{id = 42393} 06617265613531096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C92C384824C939C5DC6F5918B476A663F34A9918CAFE823AE63F513497A0890E74964635EC418DB256E1F287C6CCE9F419A32BD0C67E14F1FE0686920C9996CC6719D473E37E4FF1DFC13F80C4B1D6BFAD87B374E293DE67FEE87642A010F95FD8968447FDA0BAD954AD71F8F089C3E903C31683F7B9B804DE83CC8B56E8D9EA area51.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ySw4SCTJOcXcb1kYtHamY/NKmRjK/oI65j9RNJegiQ50lkY17EGNslbh8ofGzOn0GaMr0MZ+FPH+BoaSDJmWzGcZ1HPjfk/x38E/gMSx1r+th7N04pPeZ/7odkKgEPlf2JaER/2gutlUrXH48InD6QPDFoP3ubgE3oPMi1bo2eo= ;{id = 42393} 06617265613531096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003F140865CFC95AFC71C92E740CC7B393ED7998A49A90D197CFC060171DCA2860E2340A06FA75B241BBDE03680C226FCB46D909EE5FA1B193F4B99094417A60C1D56009140BDB8946050777B0817C14A58DAE2B3AB84C0A2F9715C9EC329AF9C38997934CD704B743C5EE5BAB24D0729F9AE71E8471938645B81894F640099835 area51.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. PxQIZc/JWvxxyS50DMezk+15mKSakNGXz8BgFx3KKGDiNAoG+nWyQbveA2gMIm/LRtkJ7l+hsZP0uZCUQXpgwdVgCRQL24lGBQd3sIF8FKWNris6uEwKL5cVyewymvnDiZeTTNcEt0PF7lurJNByn5rnHoRxk4ZFuBiU9kAJmDU= ;{id = 42393} 06617265613531096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004F408AF3B6A87F4A169B36B27208299245FB8E4DE51D9868A7902DBE03793A75AF5CD8E9F14874D32F67E508C228C3FDBD1C6B6D64872089DBBF6CB0837C629897BCA93023EB167F0767CE17663F6D23AC72175E21EF2708C6E7949E86B546522014C3804F0B7F6620EDCBF040D9A541A6E4777B6BB90BC3B7B65DD59ABAF530 area51.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T0CK87aof0oWmzaycggpkkX7jk3lHZhop5AtvgN5OnWvXNjp8Uh00y9n5QjCKMP9vRxrbWSHIInbv2ywg3ximJe8qTAj6xZ/B2fOF2Y/bSOschdeIe8nCMbnlJ6GtUZSIBTDgE8Lf2Yg7cvwQNmlQabkd3truQvDt7Zd1Zq69TA= ;{id = 42393} 06617265613531096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001DAD385FFFEE1F7D0 area51.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:dad3:85ff:fee1:f7d0 06617265613531096E6C6E65746C616273026E6C00002C0001000027D8001601012979793C1D7AB8B8228C1FEF0F916E9E3AF33E2A area51.nlnetlabs.nl. 10200 IN SSHFP 1 1 2979793C1D7AB8B8228C1FEF0F916E9E3AF33E2A 06617265613531096E6C6E65746C616273026E6C00002C0001000027D800160201BDEB0D0A01B28A188EE1DB6F09942FF4F1A6B785 area51.nlnetlabs.nl. 10200 IN SSHFP 2 1 BDEB0D0A01B28A188EE1DB6F09942FF4F1A6B785 06617265613531096E6C6E65746C616273026E6C00002F000100000E10001D06617269616E65096E6C6E65746C616273026E6C00000640000008000B area51.nlnetlabs.nl. 3600 IN NSEC ariane.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 06617269616E65096E6C6E65746C616273026E6C0000010001000027D80004D59AE0D3 ariane.nlnetlabs.nl. 10200 IN A 213.154.224.211 06617269616E65096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C000F193B6BF77D15BAE91DB75395943210225A4EBF54866A1F059FAC1F213ADB1A70BA6BF85669C1664E09B3B60649245A208FCCA11D56CF7A27FAB615ACA8AF49A8C5B1566F31D107AC450616CD80DF641CC5E6E043A55BED79F092ECA4FE9A2AA7DC802C36F2CA2FD9AD28D5ADB6213EA8D011B92D01C5666948BD07417EC5F3 ariane.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Dxk7a/d9FbrpHbdTlZQyECJaTr9UhmofBZ+sHyE62xpwumv4VmnBZk4Js7YGSSRaII/MoR1Wz3on+rYVrKivSajFsVZvMdEHrEUGFs2A32QcxebgQ6Vb7Xnwkuyk/poqp9yALDbyyi/ZrSjVrbYhPqjQEbktAcVmaUi9B0F+xfM= ;{id = 42393} 06617269616E65096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A796BE7A3F64E2572F4EFD42AA92FF8478A573A9BC3B07DC2F85AA4021E823DE0D2CFEDE54597C48309F5A5C6F4765451E7476B0CBE776B91A8B4B20E706ED1F2BC677722C11EE141B42362FB1C6B75CDA10357AB260C1B5789B862EFB71825AEAAE570D85C5685C53AA9E10F076A973FC3A2770B858265B5B19A3F8832B27D9 ariane.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. p5a+ej9k4lcvTv1CqpL/hHilc6m8OwfcL4WqQCHoI94NLP7eVFl8SDCfWlxvR2VFHnR2sMvndrkai0sg5wbtHyvGd3IsEe4UG0I2L7HGt1zaEDV6smDBtXibhi77cYJa6q5XDYXFaFxTqp4Q8Hapc/w6J3C4WCZbWxmj+IMrJ9k= ;{id = 42393} 06617269616E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0092623B293ED0C4CF1411305F6E97141BE78C29E2664B88D479130C69D64457BA2723F0286D1A4F2D17FBCF8E1C3DC9F1AAADD474CBABA6228B5AC6EA52E58E4A6CD06A320D48E27A36BAF1E4013F937BFE61928C98BDE3561A19323C935BAC1190F27D01F0ADC694CCBD3B3CB5C491DE8BB6E6C242B7C48DECAA64DCB50A4B91 ariane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kmI7KT7QxM8UETBfbpcUG+eMKeJmS4jUeRMMadZEV7onI/AobRpPLRf7z44cPcnxqq3UdMurpiKLWsbqUuWOSmzQajINSOJ6Nrrx5AE/k3v+YZKMmL3jVhoZMjyTW6wRkPJ9AfCtxpTMvTs8tcSR3ou25sJCt8SN7Kpk3LUKS5E= ;{id = 42393} 06617269616E65096E6C6E65746C616273026E6C00002C0001000027D800160101248ECE56A3DDAA931DE2FD2F26EFA93031517740 ariane.nlnetlabs.nl. 10200 IN SSHFP 1 1 248ECE56A3DDAA931DE2FD2F26EFA93031517740 06617269616E65096E6C6E65746C616273026E6C00002C0001000027D80022010262E3A3A5E75ACFF2DC2D42752FC2F7EB1BB83E8440BEA635AB4BCE943EFF7C0F ariane.nlnetlabs.nl. 10200 IN SSHFP 1 2 62E3A3A5E75ACFF2DC2D42752FC2F7EB1BB83E8440BEA635AB4BCE943EFF7C0F 06617269616E65096E6C6E65746C616273026E6C00002C0001000027D80016020122B076311F36A0CAF39733285CE7944B8716302E ariane.nlnetlabs.nl. 10200 IN SSHFP 2 1 22B076311F36A0CAF39733285CE7944B8716302E 06617269616E65096E6C6E65746C616273026E6C00002C0001000027D800220202D1C0519EE0C52684683D87446F4AA4069F91830B4CEF3F85C3CF73E0C9055665 ariane.nlnetlabs.nl. 10200 IN SSHFP 2 2 D1C0519EE0C52684683D87446F4AA4069F91830B4CEF3F85C3CF73E0C9055665 06617269616E65096E6C6E65746C616273026E6C00002F000100000E1000220B61746C61732D70726F6265096E6C6E65746C616273026E6C00000640000000000B ariane.nlnetlabs.nl. 3600 IN NSEC atlas-probe.nlnetlabs.nl. A SSHFP RRSIG NSEC 0B61746C61732D70726F6265096E6C6E65746C616273026E6C0000010001000027D80004D59AE02B atlas-probe.nlnetlabs.nl. 10200 IN A 213.154.224.43 0B61746C61732D70726F6265096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C000ED23493C33D47B50866660B6A1A5F3D2CD71C4CE7102C5CC6B9D5EDFE7194FA8D5CDA24466E4BB5862FF9C410D710EABD80FF203E97D93EA115069CB105F90E3631BBAA6B68030E5EB3E81302D7F9D5A696FD17E0182F298D7DB4DCF3F9B3116ACB0A9D16A84A7258949A9DFB35B77A0CC1CB86F560191D9714541CBEB3A8F3 atlas-probe.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. DtI0k8M9R7UIZmYLahpfPSzXHEznECxcxrnV7f5xlPqNXNokRm5LtYYv+cQQ1xDqvYD/ID6X2T6hFQacsQX5DjYxu6praAMOXrPoEwLX+dWmlv0X4BgvKY19tNzz+bMRassKnRaoSnJYlJqd+zW3egzBy4b1YBkdlxRUHL6zqPM= ;{id = 42393} 0B61746C61732D70726F6265096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D3A36A3BF40435401A0D1059305FF3837BD8BFDB3702872E52337DBAF6F3409F3BA8181C1C76206A4207CBD32AF47C4A01915FC5F68CE7BD58977B15A90D3FF03970520FB89986F6EADEF25A70DBA46C2AE186F3662770B1F2C449B50D5A0A87FF937E4317AD016B9E1EE5D427A86E60B6EC2C417BA4DA1C5B675142866531E6 atlas-probe.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 06NqO/QENUAaDRBZMF/zg3vYv9s3AocuUjN9uvbzQJ87qBgcHHYgakIHy9Mq9HxKAZFfxfaM571Yl3sVqQ0/8DlwUg+4mYb26t7yWnDbpGwq4YbzZidwsfLESbUNWgqH/5N+QxetAWueHuXUJ6huYLbsLEF7pNocW2dRQoZlMeY= ;{id = 42393} 0B61746C61732D70726F6265096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0063D658876632BE489417F53E362C70FA08473D092F5AA12310EBD63C44BF470B19D4E51E57E2E1A875F67CB13FBDEF7DBE6A8D8D6B2E7607EBBCC9D13234E3DF8C9EFA13D2043934964EB7D66AABFB9C3287C9127838C606B74050CF952BA1EA15AA848DED9290C1561887B7ED0CD9EDE6ED2DC935F165687CAD8AAF997737B3 atlas-probe.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Y9ZYh2YyvkiUF/U+Nixw+ghHPQkvWqEjEOvWPES/RwsZ1OUeV+LhqHX2fLE/ve99vmqNjWsudgfrvMnRMjTj34ye+hPSBDk0lk631mqr+5wyh8kSeDjGBrdAUM+VK6HqFaqEje2SkMFWGIe37QzZ7ebtLck18WVofK2Kr5l3N7M= ;{id = 42393} 0B61746C61732D70726F6265096E6C6E65746C616273026E6C00001C0001000027D80010200107B80206000102204AFFFEC82538 atlas-probe.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:220:4aff:fec8:2538 0B61746C61732D70726F6265096E6C6E65746C616273026E6C00002F000100000E10001C056178696F6D096E6C6E65746C616273026E6C000006400000080003 atlas-probe.nlnetlabs.nl. 3600 IN NSEC axiom.nlnetlabs.nl. A AAAA RRSIG NSEC 056178696F6D096E6C6E65746C616273026E6C0000010001000027D80004D59AE02C axiom.nlnetlabs.nl. 10200 IN A 213.154.224.44 056178696F6D096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00061EA46C68CE29361EE092B1540EB561270C3D63EB64358D8E92578627ED1F362F108FDB9434AEBFBE4383891F3B3D28846DFD16B859B6168BE83E09B98B83ABC729FC80520AD391D6C820BA8A82DC0C679E5F5B650A077B4DD6BD991BB8EA7AA9D800B56137A03CA1AEB0C6B130AF18F7775CD3AED40B37B049E1761961E42D axiom.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Bh6kbGjOKTYe4JKxVA61YScMPWPrZDWNjpJXhiftHzYvEI/blDSuv75Dg4kfOz0ohG39FrhZthaL6D4JuYuDq8cp/IBSCtOR1sgguoqC3Axnnl9bZQoHe03WvZkbuOp6qdgAtWE3oDyhrrDGsTCvGPd3XNOu1As3sEnhdhlh5C0= ;{id = 42393} 056178696F6D096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00890ABD372021589285176415551F8F8E42F056C1E72EC22B3ED5D5CC7A66833D0DA772A2C3968417033175937FEB7C83BEAA0508D3EEF8C4C26BABA4C34445C1EC11F049C7448861ED00CFF803D116B6C3E92172F5E3A1DDE429A86907053F39235C8FC791975588265CB3B1B48635D81BA3FE0D8FBEED1C3C87652992922FD9 axiom.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iQq9NyAhWJKFF2QVVR+PjkLwVsHnLsIrPtXVzHpmgz0Np3Kiw5aEFwMxdZN/63yDvqoFCNPu+MTCa6ukw0RFwewR8EnHRIhh7QDP+APRFrbD6SFy9eOh3eQpqGkHBT85I1yPx5GXVYgmXLOxtIY12Buj/g2Pvu0cPIdlKZKSL9k= ;{id = 42393} 056178696F6D096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0053E0CE4B2A4CD84DC18928C7C708A0599CD853D5ECB202C1A013B9E4F9DE074F3C7A654BD6A8C4D25B82A500435959ADEADA64279161494C77BA6635775CED7E7F62E291CA8DA3B0D624F4681D807B9BB8EB4045B5DF9FB8AEA34E8E9C882689AE611998B6F22AA14CF508A776F32EF7ED62F3C1D709DD69F3D0BAD016419E0E axiom.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. U+DOSypM2E3BiSjHxwigWZzYU9XssgLBoBO55PneB088emVL1qjE0luCpQBDWVmt6tpkJ5FhSUx3umY1d1ztfn9i4pHKjaOw1iT0aB2Ae5u460BFtd+fuK6jTo6ciCaJrmEZmLbyKqFM9QindvMu9+1i88HXCd1p89C60BZBng4= ;{id = 42393} 056178696F6D096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0085624CD655AADD3164F903CF05F7D4EBC6821F338307D57CD6D78A6CDD1AB121BB182FF357D1E5985505EDC675F19F8D44BE4FD3FE5C80588BF3654B1522DD76BD82C359DC3D8C409AA0C4422E9133A4ABC1A8ECF2DB9D52C205A9737A82B0FB3A2D3A2E817DFD1658AC52B088F11B05C50F2C13148B4E4570BF8086BF8838A8 axiom.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. hWJM1lWq3TFk+QPPBffU68aCHzODB9V81teKbN0asSG7GC/zV9HlmFUF7cZ18Z+NRL5P0/5cgFiL82VLFSLddr2Cw1ncPYxAmqDEQi6RM6Srwajs8tudUsIFqXN6grD7Oi06LoF9/RZYrFKwiPEbBcUPLBMUi05FcL+Ahr+IOKg= ;{id = 42393} 056178696F6D096E6C6E65746C616273026E6C00001C0001000027D80010200107B80206000102224DFFFE554D46 axiom.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:222:4dff:fe55:4d46 056178696F6D096E6C6E65746C616273026E6C00002C0001000027D800160101604CC3A8A6795466E88EEE22ABCD9DCFE6BA7F9C axiom.nlnetlabs.nl. 10200 IN SSHFP 1 1 604CC3A8A6795466E88EEE22ABCD9DCFE6BA7F9C 056178696F6D096E6C6E65746C616273026E6C00002C0001000027D8001602016D199FF75CDC453D376591031FE2C6257E4C5F49 axiom.nlnetlabs.nl. 10200 IN SSHFP 2 1 6D199FF75CDC453D376591031FE2C6257E4C5F49 056178696F6D096E6C6E65746C616273026E6C00002F000100000E10001E07617A6B6162616E096E6C6E65746C616273026E6C00000640000008000B axiom.nlnetlabs.nl. 3600 IN NSEC azkaban.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 07617A6B6162616E096E6C6E65746C616273026E6C0000010001000027D80004D59AE01F azkaban.nlnetlabs.nl. 10200 IN A 213.154.224.31 07617A6B6162616E096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0008B25FB940FA5227FB5388F5058808AB3716CF269AE0FC3EA94791D551E2462F429558EB491A56BECE60B81678522F8DD828C10333188CDD5B685A5B7C8A66243A37794A9EBEA8BF014BFA733DE15DC92B555B5E3DCC3EE6B262F1F39B524DF0D8372E9355F6C0103C86AA9D10F3AA8091C6C59C239D5F82694F567945907243 azkaban.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CLJfuUD6Uif7U4j1BYgIqzcWzyaa4Pw+qUeR1VHiRi9ClVjrSRpWvs5guBZ4Ui+N2CjBAzMYjN1baFpbfIpmJDo3eUqevqi/AUv6cz3hXckrVVtePcw+5rJi8fObUk3w2Dcuk1X2wBA8hqqdEPOqgJHGxZwjnV+CaU9WeUWQckM= ;{id = 42393} 07617A6B6162616E096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C8D934CBF2705625B6C1C40C025E643AA33EBE69BDED293A2BD6CDD092995C736D5808B53981CA63D118B13EFB0970ED1A8D5DC7C7432426C5E5D735E91AE06DF69D01BB6577F04AF1A6109019D2BE4147109193DEF86A3746AC39156D33F29AA3A80633B1F2732BE5FCC0EF74A99FA477030B75C25791B772E21550D545E076 azkaban.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yNk0y/JwViW2wcQMAl5kOqM+vmm97Sk6K9bN0JKZXHNtWAi1OYHKY9EYsT77CXDtGo1dx8dDJCbF5dc16RrgbfadAbtld/BK8aYQkBnSvkFHEJGT3vhqN0asORVtM/Kao6gGM7Hycyvl/MDvdKmfpHcDC3XCV5G3cuIVUNVF4HY= ;{id = 42393} 07617A6B6162616E096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B2B5ED37ED6A456EBB6C5F91B90853835B5631C68E938BCC542EC334E453E2D6FD2BDFC315C36E31D26B89B5FE8947D59EB7F1CEBE26140DDD1EA02C6F08DB820953907DE2236C2F8B29E1F07E62273D4E1992BDBCE1B3092846AADD406D69F55A28BE4B128D75C47F3B840119310A410C31AF2C14A4B9D27AD36AAC4117F047 azkaban.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. srXtN+1qRW67bF+RuQhTg1tWMcaOk4vMVC7DNORT4tb9K9/DFcNuMdJribX+iUfVnrfxzr4mFA3dHqAsbwjbgglTkH3iI2wviynh8H5iJz1OGZK9vOGzCShGqt1AbWn1Wii+SxKNdcR/O4QBGTEKQQwxrywUpLnSetNqrEEX8Ec= ;{id = 42393} 07617A6B6162616E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0049AAD08BE22EB346F0F8C41CE66327A2544DC0D198CCB0CF3A574B386EC6A0DEE8309CB034D95E470C3C22D185236C2A990C5F42C981D348B369D423E9BA2A648E6D797550D61A91074B44C2FC5EF7170DCF6D0CA4298EE1D87A417FFB32B6D149830BABF2014C6931A7A7D994756F99A046305DF2F37AE649AF1EEAC311B59B azkaban.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SarQi+Ius0bw+MQc5mMnolRNwNGYzLDPOldLOG7GoN7oMJywNNleRww8ItGFI2wqmQxfQsmB00izadQj6boqZI5teXVQ1hqRB0tEwvxe9xcNz20MpCmO4dh6QX/7MrbRSYMLq/IBTGkxp6fZlHVvmaBGMF3y83rmSa8e6sMRtZs= ;{id = 42393} 07617A6B6162616E096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001000000000000001F azkaban.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1f 07617A6B6162616E096E6C6E65746C616273026E6C00002C0001000027D8001601016243EC2D53E6F6F0C34368C65A44182205C5B0D4 azkaban.nlnetlabs.nl. 10200 IN SSHFP 1 1 6243EC2D53E6F6F0C34368C65A44182205C5B0D4 07617A6B6162616E096E6C6E65746C616273026E6C00002C0001000027D8001602019B6E52735388C32C62A6CE38000809897C922DA9 azkaban.nlnetlabs.nl. 10200 IN SSHFP 2 1 9B6E52735388C32C62A6CE38000809897C922DA9 07617A6B6162616E096E6C6E65746C616273026E6C00002C0001000027D800160301120D6B12587D5520FA736D6485FB52210B5584C2 azkaban.nlnetlabs.nl. 10200 IN SSHFP 3 1 120D6B12587D5520FA736D6485FB52210B5584C2 07617A6B6162616E096E6C6E65746C616273026E6C00002F000100000E1000230C6261636B75702D73746F7265096E6C6E65746C616273026E6C00000640000008000B azkaban.nlnetlabs.nl. 3600 IN NSEC backup-store.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0C6261636B75702D73746F7265096E6C6E65746C616273026E6C0000050001000027D8001607676F72696C6C61096E6C6E65746C616273026E6C00 backup-store.nlnetlabs.nl. 10200 IN CNAME gorilla.nlnetlabs.nl. 0C6261636B75702D73746F7265096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00592730B868D0A8E2A9B321BD1598DC29EBA3CEC615281511806B14BE618C44CDFEC894CB464B7DA63DBD493318C1855C6F20F8C2245D0B23103450109963218E097581CEB9A37500D4B303111B3E1F1C4F19E4A48B1748CBAFD842D2E98B15702138EBDC04ACCCEB85FFD65E4CF3C9CA39C5F8B2C39983753293090EF9E5A047 backup-store.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WScwuGjQqOKpsyG9FZjcKeujzsYVKBURgGsUvmGMRM3+yJTLRkt9pj29STMYwYVcbyD4wiRdCyMQNFAQmWMhjgl1gc65o3UA1LMDERs+HxxPGeSkixdIy6/YQtLpixVwITjr3ASszOuF/9ZeTPPJyjnF+LLDmYN1MpMJDvnloEc= ;{id = 42393} 0C6261636B75702D73746F7265096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0061A4947F012F0FE06DB5FF2B1486B84B4023EED76B37A0B6F7863F53418763EF8214FF949E13925A02D64ACAB39CE4DF8F5ED6A22C68CFE318ED288749995DEA1DF5B722EF7F434D780AB89CA427CC6A1BF3727A26809368435D318FF6F41E0947FA5F127953E1A2D19E7AD0D79CA8C4CC6F16FF103D7D68E8344F9305B437A7 backup-store.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. YaSUfwEvD+Bttf8rFIa4S0Aj7tdrN6C294Y/U0GHY++CFP+UnhOSWgLWSsqznOTfj17Woixoz+MY7SiHSZld6h31tyLvf0NNeAq4nKQnzGob83J6JoCTaENdMY/29B4JR/pfEnlT4aLRnnrQ15yoxMxvFv8QPX1o6DRPkwW0N6c= ;{id = 42393} 0C6261636B75702D73746F7265096E6C6E65746C616273026E6C00002F000100000E10001C0562616C6F75096E6C6E65746C616273026E6C000006040000000003 backup-store.nlnetlabs.nl. 3600 IN NSEC balou.nlnetlabs.nl. CNAME RRSIG NSEC 0562616C6F75096E6C6E65746C616273026E6C0000010001000027D80004D59AE06A balou.nlnetlabs.nl. 10200 IN A 213.154.224.106 0562616C6F75096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004B601404907688E92AA280908807F15D502802AFD9E2DC93340D3E90A1D2318FA7A0A7580AFF0DF09408DAE14287A7C429D27836FEF7FE3D98430B5B2781FC26EB88AF4483D5D8507BE06736219A63CFA82184FFB510AB8F3214F278E24DE0F508FB3F41916297C7CC8384E2CED4FFA083E2724C9CBFB012FA09EAE3EDBA0A8C balou.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. S2AUBJB2iOkqooCQiAfxXVAoAq/Z4tyTNA0+kKHSMY+noKdYCv8N8JQI2uFCh6fEKdJ4Nv73/j2YQwtbJ4H8JuuIr0SD1dhQe+BnNiGaY8+oIYT/tRCrjzIU8njiTeD1CPs/QZFil8fMg4TiztT/oIPickycv7AS+gnq4+26Cow= ;{id = 42393} 0562616C6F75096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008F1C67AA4B402D5CBB021D7158E2300A5D5AF8EC6E2D0C5699F50A5462D6DF235B85BBEEC6793B10C98679E1F2AFCA0E49AD7E8871A58FEA7733D3E4A495080327117CEAAB34D48D5384DCD0B86C43E41B33DD4485ADF11051CDB8EBD4C30106E653AEC45E863A7F5908032BC90C2B0C774ADCB5D9EA96A9BCB1F20F083767D9 balou.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jxxnqktALVy7Ah1xWOIwCl1a+OxuLQxWmfUKVGLW3yNbhbvuxnk7EMmGeeHyr8oOSa1+iHGlj+p3M9PkpJUIAycRfOqrNNSNU4Tc0LhsQ+QbM91Eha3xEFHNuOvUwwEG5lOuxF6GOn9ZCAMryQwrDHdK3LXZ6papvLHyDwg3Z9k= ;{id = 42393} 0562616C6F75096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004F40CA0839E2AF041E428A7565A74555CC09B2A1A2CAAF161472543FBCEC838AEF63037A0165E8C41D96CE6129AE1C0E28419E6BCB8C24343C7B72CC0BA2464C82B1F951335C574D9FCEA72E041874DC1ED56CE084951ACB6AB56AD7AD5C207A1A9E6F9C80F964AA9EF650C1593B5E31F86D2792CF2419F1D70ACA3BA096EB30 balou.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. T0DKCDnirwQeQop1ZadFVcwJsqGiyq8WFHJUP7zsg4rvYwN6AWXoxB2WzmEprhwOKEGea8uMJDQ8e3LMC6JGTIKx+VEzXFdNn86nLgQYdNwe1WzghJUay2q1atetXCB6Gp5vnID5ZKqe9lDBWTteMfhtJ5LPJBnx1wrKO6CW6zA= ;{id = 42393} 0562616C6F75096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002BB9D820B1A757682FAC72AAB8D7239D0483821F2E33BEDF4E9AB1CF460434921309CABD7B6BCED9434FAC80AADB299A471DCC71905A50E6FFAA043B70CA0B25EE1AACA55944ECAB7331B050B6A9C0A27C2423013C3232DBD88A398AAFB7F586807B75BB7E4C316D418B3EEEC659CA67D569248376CCD4A8CC6905A7C4887DF7 balou.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. K7nYILGnV2gvrHKquNcjnQSDgh8uM77fTpqxz0YENJITCcq9e2vO2UNPrICq2ymaRx3McZBaUOb/qgQ7cMoLJe4arKVZROyrczGwULapwKJ8JCMBPDIy29iKOYqvt/WGgHt1u35MMW1Biz7uxlnKZ9VpJIN2zNSozGkFp8SIffc= ;{id = 42393} 0562616C6F75096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021422FFFE13A1E9 balou.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:214:22ff:fe13:a1e9 0562616C6F75096E6C6E65746C616273026E6C00002C0001000027D8001601013B6531DEA06624D1C9ECC9A91D2A077EE5BD8AA9 balou.nlnetlabs.nl. 10200 IN SSHFP 1 1 3B6531DEA06624D1C9ECC9A91D2A077EE5BD8AA9 0562616C6F75096E6C6E65746C616273026E6C00002C0001000027D80016020112D68C712D4D33B453059DF239853113C88AA26F balou.nlnetlabs.nl. 10200 IN SSHFP 2 1 12D68C712D4D33B453059DF239853113C88AA26F 0562616C6F75096E6C6E65746C616273026E6C00002F000100000E10001D06626172746F6B096E6C6E65746C616273026E6C00000640000008000B balou.nlnetlabs.nl. 3600 IN NSEC bartok.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 06626172746F6B096E6C6E65746C616273026E6C0000010001000027D80004D59AE032 bartok.nlnetlabs.nl. 10200 IN A 213.154.224.50 06626172746F6B096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C000CAADD4EAF427B6C155AA080D60D17F71C34432A63C829D651277D54753A7504D2C5621981DF7C8C41D975942F89EE8B020538FDF342733FA0CA04CC72094C7BAE1D639BE93D3EBF48D2C57DEA9648B3DEA469987C75661E55DC7692F439F75E3E968E0FA812949E4A6A74CDAB10017DE8C19ADB389CA971354ECF3C8C6343F5 bartok.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. DKrdTq9Ce2wVWqCA1g0X9xw0QypjyCnWUSd9VHU6dQTSxWIZgd98jEHZdZQvie6LAgU4/fNCcz+gygTMcglMe64dY5vpPT6/SNLFfeqWSLPepGmYfHVmHlXcdpL0OfdePpaOD6gSlJ5KanTNqxABfejBmts4nKlxNU7PPIxjQ/U= ;{id = 42393} 06626172746F6B096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D3141D44C1441D9A195A1C12B1B6AC01DE7FD2EB08E8A81F70691403B52D89EBB331015C9A582169491B519BDEF36C669F3FBCD0CFCF57848F093CFD01463BC8A8355DE2C8255B7D7A3DD5C48A922C85141C8B2D2686CA3CC090EC22165B1E8371F8A5C897190EFC7161F2EFB166412B856E82D93DA7B36D42F6AF96D0D115F8 bartok.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0xQdRMFEHZoZWhwSsbasAd5/0usI6KgfcGkUA7UtieuzMQFcmlghaUkbUZve82xmnz+80M/PV4SPCTz9AUY7yKg1XeLIJVt9ej3VxIqSLIUUHIstJobKPMCQ7CIWWx6DcfilyJcZDvxxYfLvsWZBK4Vugtk9p7NtQvavltDRFfg= ;{id = 42393} 06626172746F6B096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00113D8ED7F669AFC8D757F21C16AE267DFB4767B3925E76EC4F18700EF21B263E4CD2EF456D24681ACF70D2477AF86D2656C9DBF03785F154E4BD7597A2B8F3B3266A3B0F98B822F27DC89E193A096C1E6B7E932E222CAFE1B7B2E1699CF23B79B5AE86F9123369BA32940446AD01948D6733D0983463B71D7C60D55E74C79E64 bartok.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ET2O1/Zpr8jXV/IcFq4mfftHZ7OSXnbsTxhwDvIbJj5M0u9FbSRoGs9w0kd6+G0mVsnb8DeF8VTkvXWXorjzsyZqOw+YuCLyfcieGToJbB5rfpMuIiyv4bey4Wmc8jt5ta6G+RIzaboylARGrQGUjWcz0Jg0Y7cdfGDVXnTHnmQ= ;{id = 42393} 06626172746F6B096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001C10173633500983EF0211B7E36F63A34A5182F31554A4FB3FDDBF0F67747279ADED205F6F58536321E062B64C057C4A2E8B6D19053AE14263104CCADB7A1FCAF83B2C26919EF7DD1202066B7519A76B959AD3D016686E0A798871495A9549188A41D09DE28F353E3F9C2F32F6EC7BA034FB8CE75BCD173FF2CCFBB10052FF4E bartok.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HBAXNjNQCYPvAhG3429jo0pRgvMVVKT7P92/D2d0cnmt7SBfb1hTYyHgYrZMBXxKLottGQU64UJjEEzK23ofyvg7LCaRnvfdEgIGa3UZp2uVmtPQFmhuCnmIcUlalUkYikHQneKPNT4/nC8y9ux7oDT7jOdbzRc/8sz7sQBS/04= ;{id = 42393} 06626172746F6B096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021676FFFEB83C02 bartok.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:216:76ff:feb8:3c02 06626172746F6B096E6C6E65746C616273026E6C00002C0001000027D800160101A8B153B03F64A09B6FC214B5BCE75CF19E0D2865 bartok.nlnetlabs.nl. 10200 IN SSHFP 1 1 A8B153B03F64A09B6FC214B5BCE75CF19E0D2865 06626172746F6B096E6C6E65746C616273026E6C00002C0001000027D8001602017070C07AAA3ABC4670865AC7CAAC4038EBECF8AF bartok.nlnetlabs.nl. 10200 IN SSHFP 2 1 7070C07AAA3ABC4670865AC7CAAC4038EBECF8AF 06626172746F6B096E6C6E65746C616273026E6C00002C0001000027D800160301F1F3BAF7D59C68D98151C913B440F6C1D8FB622E bartok.nlnetlabs.nl. 10200 IN SSHFP 3 1 F1F3BAF7D59C68D98151C913B440F6C1D8FB622E 06626172746F6B096E6C6E65746C616273026E6C00002F000100000E10001F08626568656D6F7468096E6C6E65746C616273026E6C00000640000008000B bartok.nlnetlabs.nl. 3600 IN NSEC behemoth.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 08626568656D6F7468096E6C6E65746C616273026E6C0000050001000027D8001908626568656D6F74680A6F76657265696E646572036E657400 behemoth.nlnetlabs.nl. 10200 IN CNAME behemoth.overeinder.net. 08626568656D6F7468096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00274DA00D558CBE539DD0B2F3DEB9EE59BE3A68D98D678B4B961DDCF8B90B85DB535592C55189BC317E31BDFBAFCF6FBCE1458EC91AB4343C9FB625D4AD60416215172C1AAD08EBB135B17C3056B5260810F9819384727638BB4A1580B526E3F8D659F830FA2F2236B1073CE267385848F2581FD10BDA3E9A75E7CA14C74BFE12 behemoth.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. J02gDVWMvlOd0LLz3rnuWb46aNmNZ4tLlh3c+LkLhdtTVZLFUYm8MX4xvfuvz2+84UWOyRq0NDyftiXUrWBBYhUXLBqtCOuxNbF8MFa1JggQ+YGThHJ2OLtKFYC1JuP41ln4MPovIjaxBzziZzhYSPJYH9EL2j6adefKFMdL/hI= ;{id = 42393} 08626568656D6F7468096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C26AD8C13516A2D99B631073D7C1AB8DB492F1DCBA2DFE8C10678CB974D70DF0875F717AA882B895AE91474BC494B99E0E4C98DEA1CB9BF5DE6B9BCD2FC4C60AB10028ABDBC6F2EDB666A57C93717E557CE81EF96D4544D8B6D8B716A83D0B91B9AA429490A0A326E667D71F3D31AD2BAFBCC86709FC45638AEC5F4459D8998E behemoth.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wmrYwTUWotmbYxBz18GrjbSS8dy6Lf6MEGeMuXTXDfCHX3F6qIK4la6RR0vElLmeDkyY3qHLm/Xea5vNL8TGCrEAKKvbxvLttmalfJNxflV86B75bUVE2LbYtxaoPQuRuapClJCgoybmZ9cfPTGtK6+8yGcJ/EVjiuxfRFnYmY4= ;{id = 42393} 08626568656D6F7468096E6C6E65746C616273026E6C00002F000100000E10001B0462656C61096E6C6E65746C616273026E6C000006040000000003 behemoth.nlnetlabs.nl. 3600 IN NSEC bela.nlnetlabs.nl. CNAME RRSIG NSEC 0462656C61096E6C6E65746C616273026E6C0000010001000027D80004D59AE016 bela.nlnetlabs.nl. 10200 IN A 213.154.224.22 0462656C61096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001C54AA3EA26D419CD2D915B5563990681D3DECE6FA2EEF48837A93852A52AFFD13D20890AD3EBC3974DEAE957D32F5B29959B2148DC2268977DF49A6B721F331D2BC5DDE49418033CB4A6D7602063D098665967B714C856BBF32AC1431295BF144EF8EF61AB934B71EAE49B9FD35A45F2D7DB960C3978A5DDF8CD6E5A9FF7F25 bela.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HFSqPqJtQZzS2RW1VjmQaB097Ob6Lu9Ig3qThSpSr/0T0giQrT68OXTerpV9MvWymVmyFI3CJol330mmtyHzMdK8Xd5JQYAzy0ptdgIGPQmGZZZ7cUyFa78yrBQxKVvxRO+O9hq5NLcerkm5/TWkXy19uWDDl4pd34zW5an/fyU= ;{id = 42393} 0462656C61096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004592DEC9C41F925472E79CD3B792BA1B5A5F9390BEC391826A63817012A4C4C0B45445003C0B77E634EA1B62B3BCF3059762C5EFF2C86CF232ECB88EC2229F4BCBC3A5E3E9B9CECF95BADD0521B727BDBACD873C7F6E316EFC72F4C8E621A0F67D51325B489D7132329DA9862AC22A0EC1F79BC04F75A988302D0A6748CBAD82 bela.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RZLeycQfklRy55zTt5K6G1pfk5C+w5GCamOBcBKkxMC0VEUAPAt35jTqG2KzvPMFl2LF7/LIbPIy7LiOwiKfS8vDpePpuc7PlbrdBSG3J726zYc8f24xbvxy9MjmIaD2fVEyW0idcTIynamGKsIqDsH3m8BPdamIMC0KZ0jLrYI= ;{id = 42393} 0462656C61096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00154C5BC00E8743D033DBCA600B7DDED1F53B1C0E1CE7A8669F861C90D053185FDB461122F8C1C91E833ADCBFCECCCAE068655D035548E4C9F878F59DE7982C9C06285F1E4974DA0616A70F20EFC30AA5251CE0224920F74A5B3F52C97879CDC7293DFCB1A8CD105D383A9C77B219D1E0DA28BAAEC12F0E0FC38FE65C54369D3E bela.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FUxbwA6HQ9Az28pgC33e0fU7HA4c56hmn4YckNBTGF/bRhEi+MHJHoM63L/OzMrgaGVdA1VI5Mn4ePWd55gsnAYoXx5JdNoGFqcPIO/DCqUlHOAiSSD3Sls/Usl4ec3HKT38sajNEF04Opx3shnR4Noouq7BLw4Pw4/mXFQ2nT4= ;{id = 42393} 0462656C61096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000C01657068BA7BC28B0512C79736FC62597C18EA8DE3D4E6EE8F8DBE52832262B11DAEE0510150A70F4C25505FFA3DC668B4F4E6F92129AA6C3937669C15BBCA54AE4DCC98411927EC24E86CAEFA9B9D4A27489210EAB825D16194C8841287965A3BE146978CA8438FEFB0C4C01B698F13CF0B92197693A1420E1CFA22A0386D bela.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DAFlcGi6e8KLBRLHlzb8Yll8GOqN49Tm7o+NvlKDImKxHa7gUQFQpw9MJVBf+j3GaLT05vkhKapsOTdmnBW7ylSuTcyYQRkn7CTobK76m51KJ0iSEOq4JdFhlMiEEoeWWjvhRpeMqEOP77DEwBtpjxPPC5IZdpOhQg4c+iKgOG0= ;{id = 42393} 0462656C61096E6C6E65746C616273026E6C00001C0001000027D80010200107B80206000102224DFFFE554CCB bela.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:222:4dff:fe55:4ccb 0462656C61096E6C6E65746C616273026E6C00002C0001000027D800160101CB43092FDF932BECE7FDAE60412D47BFD4837E32 bela.nlnetlabs.nl. 10200 IN SSHFP 1 1 CB43092FDF932BECE7FDAE60412D47BFD4837E32 0462656C61096E6C6E65746C616273026E6C00002C0001000027D800160201B85F5AFD56896ECB66B8F11194BEA1B43C32CA2D bela.nlnetlabs.nl. 10200 IN SSHFP 2 1 B85F5AFD56896ECB66B8F11194BEA1B43C32CA2D 0462656C61096E6C6E65746C616273026E6C00002C0001000027D800160301D8DA794FCF4ABF727025AAD3C54E41D348C17E1C bela.nlnetlabs.nl. 10200 IN SSHFP 3 1 D8DA794FCF4ABF727025AAD3C54E41D348C17E1C 0462656C61096E6C6E65746C616273026E6C00002F000100000E10001C05626C6F6773096E6C6E65746C616273026E6C00000640000008000B bela.nlnetlabs.nl. 3600 IN NSEC blogs.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 05626C6F6773096E6C6E65746C616273026E6C0000010001000027D80004D59AE087 blogs.nlnetlabs.nl. 10200 IN A 213.154.224.135 05626C6F6773096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0088F404A46522FF907ACA1D2F7F4A0EC091E147CEFB08E4CB1A7FD3C81257E90D612753496A8A9BA7839661D62B1DB9DC02C6E09C9444761BFDA102E0EBAEB7D5A5F602A2AD65BFC8B230556042C8E1D126082A29B83D5611F5847E01DF12236FF58488597D22B57692D7DD57A4F778263396D8BF4D915B953C5854CF448332BD blogs.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iPQEpGUi/5B6yh0vf0oOwJHhR877COTLGn/TyBJX6Q1hJ1NJaoqbp4OWYdYrHbncAsbgnJREdhv9oQLg66631aX2AqKtZb/IsjBVYELI4dEmCCopuD1WEfWEfgHfEiNv9YSIWX0itXaS191XpPd4JjOW2L9NkVuVPFhUz0SDMr0= ;{id = 42393} 05626C6F6773096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001CE0E554028A7BBDCFCC189886968B6AC70D1A39816288FEA342E14314AD634C94A51EE97C74A5B5B6DB983AEC36645324B3E46AFCD23E6043C0B7B5B62B0C049374B30BDF8E9DBCC19FA2894D990E7C12870726DC4B8D1E16620D28D87D289F55DBCF8469BAC3A4A700284C82566987063A35CB6F89E444956164F8486351CD blogs.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HODlVAKKe73PzBiYhpaLascNGjmBYoj+o0LhQxStY0yUpR7pfHSltbbbmDrsNmRTJLPkavzSPmBDwLe1tisMBJN0swvfjp28wZ+iiU2ZDnwShwcm3EuNHhZiDSjYfSifVdvPhGm6w6SnAChMglZphwY6NctvieRElWFk+EhjUc0= ;{id = 42393} 05626C6F6773096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004C291CEE7459658105C4972524F9420C54CDC668778FC8C86114F9EEB7132401EF86BC8242BDEDB17B73C0E5F31D4DF48F2884D63D4C0D4759CDAADD3F05CDD59404BBB6CA771C8DCBE9BBB2704DA1AA597B96C055BF9CF12E2ACB42563BAD6813158580E2079697C4A2517F925412BCB1BD1C5E862C8D917345199DD367B929 blogs.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TCkc7nRZZYEFxJclJPlCDFTNxmh3j8jIYRT57rcTJAHvhryCQr3tsXtzwOXzHU30jyiE1j1MDUdZzardPwXN1ZQEu7bKdxyNy+m7snBNoapZe5bAVb+c8S4qy0JWO61oExWFgOIHlpfEolF/klQSvLG9HF6GLI2Rc0UZndNnuSk= ;{id = 42393} 05626C6F6773096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004C937ECE2F4D7AA36EA390CBFFBA448C1D36FA2CB68FB44AB6358BE93E5958B060496807F18EF28605AC1BE4C9303C8E85259B04329B7E128F1BF632AA2BA72284F4B7F5C34F647E298DD1ED8FEEBA91E4E09DD7BAE7F557ED13B433B0B5B5E420DD24D4C55E0298D1D88AB1575FE3413EA8474DC930A0A94A998D8DCEA182AA blogs.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. TJN+zi9NeqNuo5DL/7pEjB02+iy2j7RKtjWL6T5ZWLBgSWgH8Y7yhgWsG+TJMDyOhSWbBDKbfhKPG/YyqiunIoT0t/XDT2R+KY3R7Y/uupHk4J3Xuuf1V+0TtDOwtbXkIN0k1MVeApjR2IqxV1/jQT6oR03JMKCpSpmNjc6hgqo= ;{id = 42393} 05626C6F6773096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF000900000000 blogs.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:9:: 05626C6F6773096E6C6E65746C616273026E6C00002C0001000027D800160101C0C1D59D9219402303D4ADE4CEAB40193D3CE55A blogs.nlnetlabs.nl. 10200 IN SSHFP 1 1 C0C1D59D9219402303D4ADE4CEAB40193D3CE55A 05626C6F6773096E6C6E65746C616273026E6C00002C0001000027D800160201154A0526AFCF080F205490DBADFB75220383B787 blogs.nlnetlabs.nl. 10200 IN SSHFP 2 1 154A0526AFCF080F205490DBADFB75220383B787 05626C6F6773096E6C6E65746C616273026E6C00002F000100000E10001E012A05626C6F6773096E6C6E65746C616273026E6C00000640000008000B blogs.nlnetlabs.nl. 3600 IN NSEC *.blogs.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 012A05626C6F6773096E6C6E65746C616273026E6C0000010001000027D80004D59AE087 *.blogs.nlnetlabs.nl. 10200 IN A 213.154.224.135 012A05626C6F6773096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007D987ED225BAA394EE426A2D4800BEF2A200C6C33A9325C9F11DC4BB23B0BD3BAFA3F0F0B089BB836CACA37EC1998EAD2854FC02C82D05D7AD8BBD665D28F80DA585660FFCBB9F164211DC08AE4B09A5C00F982A2E7D9C9FE0BE9F21BC406A7158BB03EE3C457F8BC947DC66035CA1301D0D0FA34A2380DEDC28C7CE31002DFE *.blogs.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fZh+0iW6o5TuQmotSAC+8qIAxsM6kyXJ8R3EuyOwvTuvo/DwsIm7g2yso37BmY6tKFT8AsgtBdeti71mXSj4DaWFZg/8u58WQhHcCK5LCaXAD5gqLn2cn+C+nyG8QGpxWLsD7jxFf4vJR9xmA1yhMB0ND6NKI4De3CjHzjEALf4= ;{id = 42393} 012A05626C6F6773096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0009559165CD8246767832204C92437B0D295101570CE1B4654D7BD845852737CA1F0627C6C6E7876A33F2F4A66D74444DBD0E5DB2FDE52D7B5F875700C073F629FD1DF9A24C7B62CE188E3EC03CA7EC30DB39CA260C2B341682C17AB796527EE9BD35A1EE8D972B29E92EE6D8A992F18A265D9A58CF3B2FB7C0CF08734D540D3F *.blogs.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CVWRZc2CRnZ4MiBMkkN7DSlRAVcM4bRlTXvYRYUnN8ofBifGxueHajPy9KZtdERNvQ5dsv3lLXtfh1cAwHP2Kf0d+aJMe2LOGI4+wDyn7DDbOcomDCs0FoLBereWUn7pvTWh7o2XKynpLubYqZLxiiZdmljPOy+3wM8Ic01UDT8= ;{id = 42393} 012A05626C6F6773096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008772E2891069D0805485F9BA915A4059D3CC0E7C6B0DCFEA69677025173EA2D63CFCBA4D0B1781A5FFD0BF1720FE22E1C1B4284FD3AB39717699124532993152ED75817FB752DA510A897150E257E5C04B7DDEA679E8B8D1F5675AD4C058400972115250B026A8B3D5E9CFEFE2A83736D583A4A00A822328A34D6EBAA03CCEB4 *.blogs.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. h3LiiRBp0IBUhfm6kVpAWdPMDnxrDc/qaWdwJRc+otY8/LpNCxeBpf/Qvxcg/iLhwbQoT9OrOXF2mRJFMpkxUu11gX+3UtpRColxUOJX5cBLfd6meei40fVnWtTAWEAJchFSULAmqLPV6c/v4qg3NtWDpKAKgiMoo01uuqA8zrQ= ;{id = 42393} 012A05626C6F6773096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF000900000000 *.blogs.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:9:: 012A05626C6F6773096E6C6E65746C616273026E6C00002F000100000E10001C05626F677573096E6C6E65746C616273026E6C000006400000080003 *.blogs.nlnetlabs.nl. 3600 IN NSEC bogus.nlnetlabs.nl. A AAAA RRSIG NSEC 05626F677573096E6C6E65746C616273026E6C00001000010000000A000E0D77696C6C20626520426F677573 bogus.nlnetlabs.nl. 10 IN TXT "will be Bogus" 05626F677573096E6C6E65746C616273026E6C00002E00010000000A00A0001008030000000A530B29F552E63FF5A599096E6C6E65746C616273026E6C0041EFA2CDDF5D3AF63865582104BB9A0C9612F4BC9C97A253218DD54FC5856F3DD06C912D9D34EBFDF79B4DD1F186E395EBF3F9BD17C53BB7C346B1F7283D1E70CDB4D6966A28F7E5B6BF6E386D78B819439085741E97CA67DF83BBD2F8B6E5136100D142EF09778213276CA6535B9B33E79259D235C38808A20F704E676F792A bogus.nlnetlabs.nl. 10 IN RRSIG TXT 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. Qe+izd9dOvY4ZVghBLuaDJYS9Lycl6JTIY3VT8WFbz3QbJEtnTTr/febTdHxhuOV6/P5vRfFO7fDRrH3KD0ecM201pZqKPfltr9uOG14uBlDkIV0HpfKZ9+Du9L4tuUTYQDRQu8Jd4ITJ2ymU1ubM+eSWdI1w4gIog9wTmdveSo= ;{id = 42393} 05626F677573096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008253C9B22DFEF7D2D31C55488576900ABA4DC943F6F5B31ECA2C7562B797F3CEE2D1EF0C5341C26B1A8AFE9507EAFE8EB0992FFD0E37AF61A393265E3D7A4B79D80FA697C295114A781F826A619EE66AD393CD66BD82895AD31ABBBFBC47D7E857EC6CD06CB25F37396853123C87071CDBD0AFCBE28D8D430CDCA10EA5037212 bogus.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. glPJsi3+99LTHFVIhXaQCrpNyUP29bMeyix1YreX887i0e8MU0HCaxqK/pUH6v6OsJkv/Q43r2GjkyZePXpLedgPppfClRFKeB+CamGe5mrTk81mvYKJWtMau7+8R9foV+xs0GyyXzc5aFMSPIcHHNvQr8vijY1DDNyhDqUDchI= ;{id = 42393} 05626F677573096E6C6E65746C616273026E6C00002F000100000E10001C0562726F6572096E6C6E65746C616273026E6C000006000080000003 bogus.nlnetlabs.nl. 3600 IN NSEC broer.nlnetlabs.nl. TXT RRSIG NSEC 0562726F6572096E6C6E65746C616273026E6C0000010001000027D80004D59AE003 broer.nlnetlabs.nl. 10200 IN A 213.154.224.3 0562726F6572096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B2799E7AF5429E127DF44A5EA6436342F78D299CF95417B42976A580104C2EAA05E85E73551D0E1EB987B5358B32B58E5F4AB212233465E2CA2A9E86283C5E05244140C246D6DB3BF69EC8DB97E2D7ABD50705BFF71A6E73A0003F9911FE55B8EF0FA72FF6DDD064BCC60BED89EB3675F2A2F221372E0C9757EC6985C052B09E broer.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. snmeevVCnhJ99EpepkNjQveNKZz5VBe0KXalgBBMLqoF6F5zVR0OHrmHtTWLMrWOX0qyEiM0ZeLKKp6GKDxeBSRBQMJG1ts79p7I25fi16vVBwW/9xpuc6AAP5kR/lW47w+nL/bd0GS8xgvties2dfKi8iE3LgyXV+xphcBSsJ4= ;{id = 42393} 0562726F6572096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004EC45127807D3DBC401CA9EF6D4D7AA5821A17EAE619F4EC7E8E2E1BB5D6896E061B630BAB34B3FCD9055328C4B671D74A08CC36254369A8604473273862BE3124D7CFCF6F17CBE29537E40F84B398B0665312179D9EB2E3C13B2D57E7947A705A363954679668D3386D88B7483991387F218EBE1F7A66636130534079619CD6 broer.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TsRRJ4B9PbxAHKnvbU16pYIaF+rmGfTsfo4uG7XWiW4GG2MLqzSz/NkFUyjEtnHXSgjMNiVDaahgRHMnOGK+MSTXz89vF8vilTfkD4SzmLBmUxIXnZ6y48E7LVfnlHpwWjY5VGeWaNM4bYi3SDmROH8hjr4femZjYTBTQHlhnNY= ;{id = 42393} 0562726F6572096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002FBEA2017D131C0589F86BACE9187E7608A405573EA741738269376FF94196BDF294BB7059FAEB3F67015BED0082B0E3487F9C9B4B2F2D65B9D0FD1A21F29F9A67F776B5D20130F10C3B2C0A0E7BF804ACCA636705E2A87008037E8D58724D935947C40E105C25498F0E3D3F68EE72B27C36BF551AEB19C67C7E5FB1C695AC17 broer.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. L76iAX0THAWJ+Gus6Rh+dgikBVc+p0Fzgmk3b/lBlr3ylLtwWfrrP2cBW+0AgrDjSH+cm0svLWW50P0aIfKfmmf3drXSATDxDDssCg57+ASsymNnBeKocAgDfo1Yck2TWUfEDhBcJUmPDj0/aO5ysnw2v1Ua6xnGfH5fscaVrBc= ;{id = 42393} 0562726F6572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C003CA368703248E3A6C0D16D8288CC2EED9419405EDE89EFAC4891679454B9135B44BA680CCD3A05B29930805261A22B83D902A4D1DBA28F86B8C5D27626D26D02DDECF4B2D3B17EB8F159CE917F7662D11D8B3E7A658EFD8F7785770EA13E81D28A7109664AA063843C4C0B92EC5B40001BF4F8D9CAF26BA9589B9391C46F32B3 broer.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. PKNocDJI46bA0W2CiMwu7ZQZQF7eie+sSJFnlFS5E1tEumgMzToFspkwgFJhoiuD2QKk0duij4a4xdJ2JtJtAt3s9LLTsX648VnOkX92YtEdiz56ZY79j3eFdw6hPoHSinEJZkqgY4Q8TAuS7FtAABv0+NnK8mupWJuTkcRvMrM= ;{id = 42393} 0562726F6572096E6C6E65746C616273026E6C00001C0001000027D80010200107B80206000100BB000000000000 broer.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:bb:: 0562726F6572096E6C6E65746C616273026E6C00002C0001000027D8001601018290EB11D74E7147221920FB92990ABDE012244D broer.nlnetlabs.nl. 10200 IN SSHFP 1 1 8290EB11D74E7147221920FB92990ABDE012244D 0562726F6572096E6C6E65746C616273026E6C00002C0001000027D80016020146D8DC5C57933CD04F6F9E459B0D07BA2CABA21C broer.nlnetlabs.nl. 10200 IN SSHFP 2 1 46D8DC5C57933CD04F6F9E459B0D07BA2CABA21C 0562726F6572096E6C6E65746C616273026E6C00002F000100000E10001C056365726573096E6C6E65746C616273026E6C00000640000008000B broer.nlnetlabs.nl. 3600 IN NSEC ceres.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 056365726573096E6C6E65746C616273026E6C0000050001000027D800160773697867617465096E6C6E65746C616273026E6C00 ceres.nlnetlabs.nl. 10200 IN CNAME sixgate.nlnetlabs.nl. 056365726573096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00085A71772681F595C3174E93CD4293019B1CE4ACAB1764A08BF6F1451B66058EED3AEE289F3BF9B97EE2964BC87B1BB1ADB886ECEC7CE65CA19E711D25B4E9E3B9764A41D05A19CAB5803E3510FB48E795C48E95DDBE2D7D9BF801418E01A78BA2B4472581E058C3E40229AC8DE0F1FD10D2310E4E6C1A0574458463240C779D ceres.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CFpxdyaB9ZXDF06TzUKTAZsc5KyrF2Sgi/bxRRtmBY7tOu4onzv5uX7ilkvIexuxrbiG7Ox85lyhnnEdJbTp47l2SkHQWhnKtYA+NRD7SOeVxI6V3b4tfZv4AUGOAaeLorRHJYHgWMPkAimsjeDx/RDSMQ5ObBoFdEWEYyQMd50= ;{id = 42393} 056365726573096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0020EC385DBC37EB797380DDD604924E5B4CB6403CFE5E96EFA91939CD0525309F95676D82A2CAAB6B787630840E8D5A6DE0266F477C38F8D6E1E549A5E411F28533B533C3483659C1094039B8847F91C4CC3D092F31750F99A2A5A2042AE1AE81D99985CBAA07EBEBBD0BC1F0DF098827428304B929E9B3DDFB14C8D6968055CD ceres.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IOw4Xbw363lzgN3WBJJOW0y2QDz+XpbvqRk5zQUlMJ+VZ22Cosqra3h2MIQOjVpt4CZvR3w4+Nbh5Uml5BHyhTO1M8NINlnBCUA5uIR/kcTMPQkvMXUPmaKlogQq4a6B2ZmFy6oH6+u9C8Hw3wmIJ0KDBLkp6bPd+xTI1paAVc0= ;{id = 42393} 056365726573096E6C6E65746C616273026E6C00002F000100000E10001C05636F6E6368096E6C6E65746C616273026E6C000006040000000003 ceres.nlnetlabs.nl. 3600 IN NSEC conch.nlnetlabs.nl. CNAME RRSIG NSEC 05636F6E6368096E6C6E65746C616273026E6C0000010001000027D80004D59AE010 conch.nlnetlabs.nl. 10200 IN A 213.154.224.16 05636F6E6368096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0060159F6BC10F4EC1470F1E69488F0EF1485D420834F9BF83AC69340E61547A62A82AE10890DEBD0B7B301562082012D9A76EE7998166E2AB464D354EBC20C64FC35FA5FDEFDAC7A8EE61CB9411126FB2105252C5F514EA36C1ED7460422524E78BA4F0CDB817BF6F555EA0A95D471451A63E2FF901C01DFE06B8266D616F74C3 conch.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YBWfa8EPTsFHDx5pSI8O8UhdQgg0+b+DrGk0DmFUemKoKuEIkN69C3swFWIIIBLZp27nmYFm4qtGTTVOvCDGT8Nfpf3v2seo7mHLlBESb7IQUlLF9RTqNsHtdGBCJSTni6TwzbgXv29VXqCpXUcUUaY+L/kBwB3+BrgmbWFvdMM= ;{id = 42393} 05636F6E6368096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0006F432579921F45957FEDF086D67E2767334997CA5A08C89B82132CBBCD7C0BC30C330B83A77A4193D382B566E80FE34210EBDAF129EB5156E27BD284834A45EAD05DAC8FBCB570FD5D11B7AB284E3C224FFA7858957A318E5C9FFE3C12F89A30CA94285F7A5DF3BAE70C831E2B13CC781DF334303B767B53A72956C0CA3C570 conch.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. BvQyV5kh9FlX/t8IbWfidnM0mXyloIyJuCEyy7zXwLwwwzC4OnekGT04K1ZugP40IQ69rxKetRVuJ70oSDSkXq0F2sj7y1cP1dEberKE48Ik/6eFiVejGOXJ/+PBL4mjDKlChfel3zuucMgx4rE8x4HfM0MDt2e1OnKVbAyjxXA= ;{id = 42393} 05636F6E6368096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0025EA0AEF0853F464B961570F52D9FFF698E4D392915E8F33167C2D6989986547FDB3296DEA4D4A0A4D1F91CA56B885A84E5C1F489EDBB105F3F3480EAF447481EF5F9B4FB13538FAB68052F6B8CD274DDD2C10ECDFC81DEEDA1333062550DDA01AEBC321227BBC286F66F7019CEBE757A92A50C15740110DD389D6AC23373CA2 conch.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. JeoK7whT9GS5YVcPUtn/9pjk05KRXo8zFnwtaYmYZUf9sylt6k1KCk0fkcpWuIWoTlwfSJ7bsQXz80gOr0R0ge9fm0+xNTj6toBS9rjNJ03dLBDs38gd7toTMwYlUN2gGuvDISJ7vChvZvcBnOvnV6kqUMFXQBEN04nWrCM3PKI= ;{id = 42393} 05636F6E6368096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010A0020FFFEA51267 conch.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fea5:1267 05636F6E6368096E6C6E65746C616273026E6C00002F000100000E1000210A636F6E666572656E6365096E6C6E65746C616273026E6C000006400000080003 conch.nlnetlabs.nl. 3600 IN NSEC conference.nlnetlabs.nl. A AAAA RRSIG NSEC 0A636F6E666572656E6365096E6C6E65746C616273026E6C00000500010000000A0013046F70656E096E6C6E65746C616273026E6C00 conference.nlnetlabs.nl. 10 IN CNAME open.nlnetlabs.nl. 0A636F6E666572656E6365096E6C6E65746C616273026E6C00002E00010000000A00A0000508030000000A530B29F552E63FF5A599096E6C6E65746C616273026E6C00A9716F80435813A6BFBAA9AF01F390D516AFFF402E30D58DBC391E1AD20A2D97293DEB42DEBBEBD1A7A72A68FDE0AF7D394D6D23630DDD72E0D0C0A1EF1416B42BE8ADAD29934371ED1257019ECED11D79E6CC4EBEF9AED31794756629ABAE9A81A3457DDC1184E733312A89BA2F0F4382A081BF84568C5EC5BC3C54FF517CDE conference.nlnetlabs.nl. 10 IN RRSIG CNAME 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. qXFvgENYE6a/uqmvAfOQ1Rav/0AuMNWNvDkeGtIKLZcpPetC3rvr0aenKmj94K99OU1tI2MN3XLg0MCh7xQWtCvora0pk0Nx7RJXAZ7O0R155sxOvvmu0xeUdWYpq66agaNFfdwRhOczMSqJui8PQ4Kggb+EVoxexbw8VP9RfN4= ;{id = 42393} 0A636F6E666572656E6365096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00911C8A19CA7DDC04E88962BFB02C92F361DA61EFCB8BF5819B1CB156582E645C9E544DF0B8EC8DF8640D60F38CBB3BE3D394B56E118CCADD4076AF67F5C50E5364757617B67981EBEF4825D975FE441FF8B66CBF63CFADEEA0C6C792751793D16AC41A1A31C50DA557D902E8DD8EFD05EBCAD90C4EC6407E908626004556E8C6 conference.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kRyKGcp93AToiWK/sCyS82HaYe/Li/WBmxyxVlguZFyeVE3wuOyN+GQNYPOMuzvj05S1bhGMyt1Adq9n9cUOU2R1dhe2eYHr70gl2XX+RB/4tmy/Y8+t7qDGx5J1F5PRasQaGjHFDaVX2QLo3Y79BevK2QxOxkB+kIYmAEVW6MY= ;{id = 42393} 0A636F6E666572656E6365096E6C6E65746C616273026E6C00002F000100000E1000330C5F786D70702D636C69656E74045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C000006040000000003 conference.nlnetlabs.nl. 3600 IN NSEC _xmpp-client._tcp.conference.nlnetlabs.nl. CNAME RRSIG NSEC 0C5F786D70702D636C69656E74045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C0000210001000002580019000500001466046F70656E096E6C6E65746C616273026E6C00 _xmpp-client._tcp.conference.nlnetlabs.nl. 600 IN SRV 5 0 5222 open.nlnetlabs.nl. 0C5F786D70702D636C69656E74045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C00002E00010000025800A00021080500000258530B29F552E63FF5A599096E6C6E65746C616273026E6C0077815C3EEC07868DF5CA99A6428990154AE133D505CADAC36EC922F3EE58FD08195A5D9BB6B5E2E80CBD0DA468C142E6B0411C010CE85558C7DB104ECB9C4CB4620FACFBDFFE0E37B6A7338D8D719A41767829663F31EEB424F1F8E7FFBF5F7CF77436932D69F6A5BBED5F33826FD5BC806B4856BAB0027C19B91BB181A9D7A7 _xmpp-client._tcp.conference.nlnetlabs.nl. 600 IN RRSIG SRV 8 5 600 20140224111605 20140127111605 42393 nlnetlabs.nl. d4FcPuwHho31ypmmQomQFUrhM9UFytrDbski8+5Y/QgZWl2btrXi6Ay9DaRowULmsEEcAQzoVVjH2xBOy5xMtGIPrPvf/g43tqczjY1xmkF2eClmPzHutCTx+Of/v19893Q2ky1p9qW77V8zgm/VvIBrSFa6sAJ8GbkbsYGp16c= ;{id = 42393} 0C5F786D70702D636C69656E74045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B761F3DA14278535994A9BCAA96BC6572983FD4262FD6434C4C04FA402488BC3A5936ACA679B878672AB159EF15F264E9F9F3EBC25675946B2B72249BF78A7B20608BDB35B264C698C9645772FDD7886B98B493687068429929EDDAA819D820E59F213EADE36EFDD2BEEC1C1D619336B39484885A90B34C12A8C6AF1B4E72E3A _xmpp-client._tcp.conference.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. t2Hz2hQnhTWZSpvKqWvGVymD/UJi/WQ0xMBPpAJIi8Olk2rKZ5uHhnKrFZ7xXyZOn58+vCVnWUaytyJJv3insgYIvbNbJkxpjJZFdy/deIa5i0k2hwaEKZKe3aqBnYIOWfIT6t42790r7sHB1hkzazlISIWpCzTBKoxq8bTnLjo= ;{id = 42393} 0C5F786D70702D636C69656E74045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C00002F000100000E1000330C5F786D70702D736572766572045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C000006000000004003 _xmpp-client._tcp.conference.nlnetlabs.nl. 3600 IN NSEC _xmpp-server._tcp.conference.nlnetlabs.nl. SRV RRSIG NSEC 0C5F786D70702D736572766572045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C0000210001000002580019000500001495046F70656E096E6C6E65746C616273026E6C00 _xmpp-server._tcp.conference.nlnetlabs.nl. 600 IN SRV 5 0 5269 open.nlnetlabs.nl. 0C5F786D70702D736572766572045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C00002E00010000025800A00021080500000258530B29F552E63FF5A599096E6C6E65746C616273026E6C007D685E40EFA1EF3A2533182A0508D47E662668E185718E0BD0EEFCD242B04FC1E2215CED7547FDF47B1D66874D29CEB5D12EE24B6147265FBD8573C058971914777604D3DCC6EF507E103881873963D9EB66A01597470FCDD9A5B85CDF46CC4AC5D96C0EC6FE29C73D56E71CB8B57373810CC8897B8412533C9CD0DAD400D037 _xmpp-server._tcp.conference.nlnetlabs.nl. 600 IN RRSIG SRV 8 5 600 20140224111605 20140127111605 42393 nlnetlabs.nl. fWheQO+h7zolMxgqBQjUfmYmaOGFcY4L0O780kKwT8HiIVztdUf99HsdZodNKc610S7iS2FHJl+9hXPAWJcZFHd2BNPcxu9QfhA4gYc5Y9nrZqAVl0cPzdmluFzfRsxKxdlsDsb+Kcc9VuccuLVzc4EMyIl7hBJTPJzQ2tQA0Dc= ;{id = 42393} 0C5F786D70702D736572766572045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004855CFC0D6397173B20B249D27AA8C63C61DAA6BFC617A44264C3A69CD0A180C4D46419A633D8AE45A5896AE2866A68605A39AECD160B73206F5556B2EBAEB3F9089A6D07D185179BBE21FA5C37FDF059672AA98850AACADA85DEA0748ED2F1A729239B23F21DD93C52B582313DF7C2928B4FB1922B0BCFC9727B838F4C0FC2B _xmpp-server._tcp.conference.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SFXPwNY5cXOyCySdJ6qMY8Ydqmv8YXpEJkw6ac0KGAxNRkGaYz2K5FpYlq4oZqaGBaOa7NFgtzIG9VVrLrrrP5CJptB9GFF5u+IfpcN/3wWWcqqYhQqsrahd6gdI7S8acpI5sj8h3ZPFK1gjE998KSi0+xkisLz8lye4OPTA/Cs= ;{id = 42393} 0C5F786D70702D736572766572045F7463700A636F6E666572656E6365096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313030096E6C6E65746C616273026E6C000006000000004003 _xmpp-server._tcp.conference.nlnetlabs.nl. 3600 IN NSEC dhcp-100.nlnetlabs.nl. SRV RRSIG NSEC 08646863702D313030096E6C6E65746C616273026E6C0000010001000027D80004D59AE064 dhcp-100.nlnetlabs.nl. 10200 IN A 213.154.224.100 08646863702D313030096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003B3664BFDF2C0957AB689C254BAF3016C369C2A7865ED74E56DAB68DEBAB7006D54CD2ABEC124D4C5838181F0FEB368A0A109A309E00BF740C5F4AB9DD86AD2F46A1566229BD72585B1FECBDED03BD4A44E02EB0D14DBD1A18A40B6D098E56563625B07F7FD99DF7A03B6080FCFDA3EB613283D10503B1CBC18FE1224E23AB28 dhcp-100.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. OzZkv98sCVeraJwlS68wFsNpwqeGXtdOVtq2jeurcAbVTNKr7BJNTFg4GB8P6zaKChCaMJ4Av3QMX0q53YatL0ahVmIpvXJYWx/sve0DvUpE4C6w0U29GhikC20JjlZWNiWwf3/ZnfegO2CA/P2j62Eyg9EFA7HLwY/hIk4jqyg= ;{id = 42393} 08646863702D313030096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009924D433D508B91BC21E9C3B2A56EFF7DD3BBFE3923B362D3108AD185504E64E271B69CB6B02C33906A2B154691511F9E7D0F58201C09F64959F27FF3E4D063ACC10F5E6B9075459CD93A983388400CC0B56E26F7E84838194E15EFAFD6D7B624B4F0BCF2A0753931F8F3182B6BA40736F0FE5F79663CBA4B9C7FFDD4036A9DD dhcp-100.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mSTUM9UIuRvCHpw7Klbv9907v+OSOzYtMQitGFUE5k4nG2nLawLDOQaisVRpFRH559D1ggHAn2SVnyf/Pk0GOswQ9ea5B1RZzZOpgziEAMwLVuJvfoSDgZThXvr9bXtiS08LzyoHU5MfjzGCtrpAc28P5feWY8ukucf/3UA2qd0= ;{id = 42393} 08646863702D313030096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313031096E6C6E65746C616273026E6C000006400000000003 dhcp-100.nlnetlabs.nl. 3600 IN NSEC dhcp-101.nlnetlabs.nl. A RRSIG NSEC 08646863702D313031096E6C6E65746C616273026E6C0000010001000027D80004D59AE065 dhcp-101.nlnetlabs.nl. 10200 IN A 213.154.224.101 08646863702D313031096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0047D399A0BCAD7F96B28846DABFD4DD1AEA518B448556DDC772BE171F72148245EBA8C024B99BA6F244D482F15B25F3183A77E48F7FBC5ECFC7EF6E1093925CF8AA022F6BAB8C92A9BE383222F24DB1F210B9A1BD784D19475A4C8CD72A1F3A56C67CD5E34EA1696AD31DFC7C1C8051A846B0E6693A27106C3D0F40EA8ABE749F dhcp-101.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. R9OZoLytf5ayiEbav9TdGupRi0SFVt3Hcr4XH3IUgkXrqMAkuZum8kTUgvFbJfMYOnfkj3+8Xs/H724Qk5Jc+KoCL2urjJKpvjgyIvJNsfIQuaG9eE0ZR1pMjNcqHzpWxnzV406haWrTHfx8HIBRqEaw5mk6JxBsPQ9A6oq+dJ8= ;{id = 42393} 08646863702D313031096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00435C1947DAB66EBBCEA88E94AB73B6A0FD05250410AE08010CBE93169546434C5D348755BC81D6F34B93666E474F8AD7996462CDEA084167C4B876F3E92A9F69842298458801D5DD957F5812AE045C08981FE90301586B910CF7E6DD81C2FB4926A001E32F24A00A9FF45770E76A98116BDB5945DF2C79A0B49109FEB9FCF4D0 dhcp-101.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Q1wZR9q2brvOqI6Uq3O2oP0FJQQQrggBDL6TFpVGQ0xdNIdVvIHW80uTZm5HT4rXmWRizeoIQWfEuHbz6SqfaYQimEWIAdXdlX9YEq4EXAiYH+kDAVhrkQz35t2BwvtJJqAB4y8koAqf9Fdw52qYEWvbWUXfLHmgtJEJ/rn89NA= ;{id = 42393} 08646863702D313031096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313630096E6C6E65746C616273026E6C000006400000000003 dhcp-101.nlnetlabs.nl. 3600 IN NSEC dhcp-160.nlnetlabs.nl. A RRSIG NSEC 08646863702D313630096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A0 dhcp-160.nlnetlabs.nl. 10200 IN A 213.154.224.160 08646863702D313630096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00AE20E3073EFD8AE744FDF70F1A7DB299DDD3FB04DB85F7995587EA40CE539FBFECF8976D92B9ABC66BE308DACB3CA256D3148D7260ECF5E5C0E82FAB45E42BE12353DAB7008E232AF286E0B2C81A6802B85AA3DA09F54581E51D197CF98593EEEE17F3F75AB6C7E8ED5DFCB02DF7459E3895504E44734FC015252968A27CBC55 dhcp-160.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. riDjBz79iudE/fcPGn2ymd3T+wTbhfeZVYfqQM5Tn7/s+JdtkrmrxmvjCNrLPKJW0xSNcmDs9eXA6C+rReQr4SNT2rcAjiMq8obgssgaaAK4WqPaCfVFgeUdGXz5hZPu7hfz91q2x+jtXfywLfdFnjiVUE5Ec0/AFSUpaKJ8vFU= ;{id = 42393} 08646863702D313630096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0054E9B770164D4B389B940702EE7554330825060EBBB31D4610CAFD6B7630E4A24D072D6F0E597C3F6DD67E7EDEC25F330797310ACD38D992B535FDDEEFC5A4D3E0109309CA6C5B2E5F972DD08A6FCE22427559AD33E069809F2116F1D126BE35529117158EE933772C76B3DEF2D4181899F2AA71DD466BDB53D74A42BB39C525 dhcp-160.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. VOm3cBZNSziblAcC7nVUMwglBg67sx1GEMr9a3Yw5KJNBy1vDll8P23Wfn7ewl8zB5cxCs042ZK1Nf3e78Wk0+AQkwnKbFsuX5ct0IpvziJCdVmtM+BpgJ8hFvHRJr41UpEXFY7pM3csdrPe8tQYGJnyqnHdRmvbU9dKQrs5xSU= ;{id = 42393} 08646863702D313630096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313631096E6C6E65746C616273026E6C000006400000000003 dhcp-160.nlnetlabs.nl. 3600 IN NSEC dhcp-161.nlnetlabs.nl. A RRSIG NSEC 08646863702D313631096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A1 dhcp-161.nlnetlabs.nl. 10200 IN A 213.154.224.161 08646863702D313631096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0096D66BF1D41D05A0EB4CBE06B3E4597A9F2AC4886AE7DFC6C6BB83E3153B8B840D432B64C4574ABA5254555BAC097427E0C507E02B70E24771B25C9DDD217BDAB850605EF8A54FD03FD7EA5865D801B8891B8E800CB57731E9465ADEBEDA9816A017DADDF1D4097F0BD3125EF84EBE6D44B533CC5DE18683C47A2AA05CAA0775 dhcp-161.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ltZr8dQdBaDrTL4Gs+RZep8qxIhq59/GxruD4xU7i4QNQytkxFdKulJUVVusCXQn4MUH4Ctw4kdxslyd3SF72rhQYF74pU/QP9fqWGXYAbiJG46ADLV3MelGWt6+2pgWoBfa3fHUCX8L0xJe+E6+bUS1M8xd4YaDxHoqoFyqB3U= ;{id = 42393} 08646863702D313631096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C1B27C76EE1E4018704622837577C9D81CDCF5D504B221F1666E6A30F70DD9DFEFEA4027CBA936ACC1DDC9B38F83A067D849725C79C40DC51D6F49781D1E2A510F5E0E600FD8813CB35D431D80F5683C889F58E09226D48C0AA702A469516D92F12C9F01F687898B62D8BE7FB61F0B86BAECA04438CA85517F137DA8FD25CC34 dhcp-161.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wbJ8du4eQBhwRiKDdXfJ2Bzc9dUEsiHxZm5qMPcN2d/v6kAny6k2rMHdybOPg6Bn2ElyXHnEDcUdb0l4HR4qUQ9eDmAP2IE8s11DHYD1aDyIn1jgkibUjAqnAqRpUW2S8SyfAfaHiYti2L5/th8LhrrsoEQ4yoVRfxN9qP0lzDQ= ;{id = 42393} 08646863702D313631096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313632096E6C6E65746C616273026E6C000006400000000003 dhcp-161.nlnetlabs.nl. 3600 IN NSEC dhcp-162.nlnetlabs.nl. A RRSIG NSEC 08646863702D313632096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A2 dhcp-162.nlnetlabs.nl. 10200 IN A 213.154.224.162 08646863702D313632096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008C13EBCAFD82D411CB65BAE5C6F7E8C5DBBF195D84162D87A822A614457124A674732CA44C61B292780ADA9AB680F4942045A232320F3DA943FEBD4F2489B66FD025121A32044373DACCAAD9E590104CD0D6E9182068C37E9FE320E4AEB0AE6AF49ADAA413D3EC82D5E62138B05D9298A7D828D7915BCA05F9CD95753BC10B7F dhcp-162.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jBPryv2C1BHLZbrlxvfoxdu/GV2EFi2HqCKmFEVxJKZ0cyykTGGykngK2pq2gPSUIEWiMjIPPalD/r1PJIm2b9AlEhoyBENz2syq2eWQEEzQ1ukYIGjDfp/jIOSusK5q9JrapBPT7ILV5iE4sF2SmKfYKNeRW8oF+c2VdTvBC38= ;{id = 42393} 08646863702D313632096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001DBDCD6E0C5A485C42F2073091C61805E772703AFD91F5CC2855B7A6B2541FEEB098DF44216CA6BE7E7BF06823F3852621E86C1B6F51EAB8E712797773958DBE2EBC36B36E5349C61626DD20B286EF6B0615019B2F2163C4A1BB1E2B1ACAEEBD61CA8A19E11C44DE2BB06CB57CC831EC379C16F29010E252E6AF3C887D734135 dhcp-162.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Hb3NbgxaSFxC8gcwkcYYBedycDr9kfXMKFW3prJUH+6wmN9EIWymvn578Ggj84UmIehsG29R6rjnEnl3c5WNvi68NrNuU0nGFibdILKG72sGFQGbLyFjxKG7Hisayu69YcqKGeEcRN4rsGy1fMgx7DecFvKQEOJS5q88iH1zQTU= ;{id = 42393} 08646863702D313632096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313633096E6C6E65746C616273026E6C000006400000000003 dhcp-162.nlnetlabs.nl. 3600 IN NSEC dhcp-163.nlnetlabs.nl. A RRSIG NSEC 08646863702D313633096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A3 dhcp-163.nlnetlabs.nl. 10200 IN A 213.154.224.163 08646863702D313633096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D13E67AF32831EEE3BBB2A20D8261E6A77C4D6FE2B7A6CC3F3B3E0AB72A05CBFF2352986834AD9E07E790C872AC2E8227466F72C1D19A19F2F35EE6BA0DE40DE09A50CCBF566EC60C231420B2B64B62F0D98497CA96BA92A4BF3F49F3CBAFF57E3AB84C4A3EBB288C803EB37F46D5AFD81D827D4EAEF17EE5659E1CFDC0CC056 dhcp-163.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0T5nrzKDHu47uyog2CYeanfE1v4remzD87Pgq3KgXL/yNSmGg0rZ4H55DIcqwugidGb3LB0ZoZ8vNe5roN5A3gmlDMv1ZuxgwjFCCytkti8NmEl8qWupKkvz9J88uv9X46uExKPrsojIA+s39G1a/YHYJ9Tq7xfuVlnhz9wMwFY= ;{id = 42393} 08646863702D313633096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000E7CD4AEFCE81708CBAEFBC615E322BA4F631A6C42C3899ABF11E78FE15F7B4EC1C742EF3F7FC316A6D40FC0EA9260F8D5B265608C362FB4CAC3B9E26BAA2918774A95E9BE3156A23ABFD65D05107CF9DFFF1E5E6051F43E643DD39F5063BE6C3F807BB588145744D01135D21D9FEF22E322E39F8B0B194C96754376DB3E260B dhcp-163.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DnzUrvzoFwjLrvvGFeMiuk9jGmxCw4mavxHnj+Ffe07Bx0LvP3/DFqbUD8DqkmD41bJlYIw2L7TKw7nia6opGHdKlem+MVaiOr/WXQUQfPnf/x5eYFH0PmQ9059QY75sP4B7tYgUV0TQETXSHZ/vIuMi45+LCxlMlnVDdts+Jgs= ;{id = 42393} 08646863702D313633096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313634096E6C6E65746C616273026E6C000006400000000003 dhcp-163.nlnetlabs.nl. 3600 IN NSEC dhcp-164.nlnetlabs.nl. A RRSIG NSEC 08646863702D313634096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A4 dhcp-164.nlnetlabs.nl. 10200 IN A 213.154.224.164 08646863702D313634096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008205E97E7091715756482FC18FC34170B2A871F1E24CE8100EF76434E5425702E61E078CC19823D7F463FED455FE6C1B217D33389474ED083EC5289F3CDB0940EEDB41D419527AC49D92A54ECBB2A2DE4D0E588A8385A5A6DEEABE4548E42A897AF276D5CAD241C123CD03BFF611E3C62CF6495E01BD332FFC9A585C533EA7F6 dhcp-164.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ggXpfnCRcVdWSC/Bj8NBcLKocfHiTOgQDvdkNOVCVwLmHgeMwZgj1/Rj/tRV/mwbIX0zOJR07Qg+xSifPNsJQO7bQdQZUnrEnZKlTsuyot5NDliKg4Wlpt7qvkVI5CqJevJ21crSQcEjzQO/9hHjxiz2SV4BvTMv/JpYXFM+p/Y= ;{id = 42393} 08646863702D313634096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002ACD6E433F746A67960501BC45069EB492D3642CE2BA33B90FB7F28484BE52E523E502EEF29DC6578CA454FBBD83CF6290E1373F0AA07A7B6B1BC933119F2F7000D4016488E765EE82983E27B1E310E55BC892D487FF22DAD0773BBDEF8467562A4A8A3F85D6BBCF036DE6650D1EA4A1296FE8423A124C9AFDE678405E8E8631 dhcp-164.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ks1uQz90ameWBQG8RQaetJLTZCziujO5D7fyhIS+UuUj5QLu8p3GV4ykVPu9g89ikOE3PwqgentrG8kzEZ8vcADUAWSI52Xugpg+J7HjEOVbyJLUh/8i2tB3O73vhGdWKkqKP4XWu88DbeZlDR6koSlv6EI6Ekya/eZ4QF6OhjE= ;{id = 42393} 08646863702D313634096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313635096E6C6E65746C616273026E6C000006400000000003 dhcp-164.nlnetlabs.nl. 3600 IN NSEC dhcp-165.nlnetlabs.nl. A RRSIG NSEC 08646863702D313635096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A5 dhcp-165.nlnetlabs.nl. 10200 IN A 213.154.224.165 08646863702D313635096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00CF207A4C1C07F5FED89E0BEF8B4CC4DD1CB975EC3D8C6F986ADAD260AE748EB992D9B9886CC187D16AD73162925818D5A4226C9A95269DE3982916789DA7A47D9D84389952816EDE5EF53E7B602A7D66FEB79222B05887004C22D5D65971513D0D5ED66C51E17FD644462C3390DD999CD8E5DD0C502B7650EB7503F7E61FEB8B dhcp-165.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. zyB6TBwH9f7Yngvvi0zE3Ry5dew9jG+YatrSYK50jrmS2bmIbMGH0WrXMWKSWBjVpCJsmpUmneOYKRZ4naekfZ2EOJlSgW7eXvU+e2AqfWb+t5IisFiHAEwi1dZZcVE9DV7WbFHhf9ZERiwzkN2ZnNjl3QxQK3ZQ63UD9+Yf64s= ;{id = 42393} 08646863702D313635096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C006F8E8E5A5C3B69A0A0A33DF262B61ED4FCE51FD0FDEDD2CA873C9F631DFEBA8001DB9CF3EDACB8AD16D8CB16CA8C86907EFDB8BF89720733F80114C417DD16C0D3AEE385694463BD8D0706516B854370B95F4DABB4FD3AC0DC983C37F4C39568B51A9160E6B9BF52F1EB451DA1A8AB8A0F695740AEE88860B8DEB3F37DE7F2E6 dhcp-165.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. b46OWlw7aaCgoz3yYrYe1PzlH9D97dLKhzyfYx3+uoAB25zz7ay4rRbYyxbKjIaQfv24v4lyBzP4ARTEF90WwNOu44VpRGO9jQcGUWuFQ3C5X02rtP06wNyYPDf0w5VotRqRYOa5v1Lx60Udoairig9pV0Cu6IhguN6z833n8uY= ;{id = 42393} 08646863702D313635096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313636096E6C6E65746C616273026E6C000006400000000003 dhcp-165.nlnetlabs.nl. 3600 IN NSEC dhcp-166.nlnetlabs.nl. A RRSIG NSEC 08646863702D313636096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A6 dhcp-166.nlnetlabs.nl. 10200 IN A 213.154.224.166 08646863702D313636096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008991713CF1B37BAFC44E7A1D9C6F3178235C55EC3F9DFBBD21BC14FE98739E41D91AF29CE75DB10E778582BD2349EF046296745A645267B749497098EB690A174DF75816C7241C547424053F594EA53A6B7FA8CBCDCAC3B7FF4E5E5CC36DA7FF4925C6499F41E9561A233D3DA3DC959E33271D3F142EF47BEDA9525ABE39B36D dhcp-166.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iZFxPPGze6/ETnodnG8xeCNcVew/nfu9IbwU/phznkHZGvKc512xDneFgr0jSe8EYpZ0WmRSZ7dJSXCY62kKF033WBbHJBxUdCQFP1lOpTprf6jLzcrDt/9OXlzDbaf/SSXGSZ9B6VYaIz09o9yVnjMnHT8ULvR77alSWr45s20= ;{id = 42393} 08646863702D313636096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00D2F564C0522857BC4FD4C51B0AC90A68D7EFC97C89B915DAAF680AA1232CE775EB3C5A3576C222F2401AF8C92FB9ED265A19619EA43CFDF1AC47EF79DBE13266E963A014C238FEAEEBC65A6DE1DF9CB120E4C8B7ADCC4FC996DB2608F0420EB169C98279616A5AD913F9CCED57F8C570264E3B9DDBE7B18ED2E49B8B27700D1B dhcp-166.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. 0vVkwFIoV7xP1MUbCskKaNfvyXyJuRXar2gKoSMs53XrPFo1dsIi8kAa+Mkvue0mWhlhnqQ8/fGsR+952+EyZuljoBTCOP6u68ZabeHfnLEg5Mi3rcxPyZbbJgjwQg6xacmCeWFqWtkT+cztV/jFcCZOO53b57GO0uSbiydwDRs= ;{id = 42393} 08646863702D313636096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313637096E6C6E65746C616273026E6C000006400000000003 dhcp-166.nlnetlabs.nl. 3600 IN NSEC dhcp-167.nlnetlabs.nl. A RRSIG NSEC 08646863702D313637096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A7 dhcp-167.nlnetlabs.nl. 10200 IN A 213.154.224.167 08646863702D313637096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00465A5726031BAB75A3EE15FE97CB1F765B9A41314F339EA7E96D7181516A29EB883834B910C5644AC164D3C09DB501EAC05D2E358A1FBD3810B1B58CD2FD27B71297FB7DE7862C640E848852B1EE14F59E0AD6B8FB1B7AAB12B3E6ABAAD81EF0F46013FDF6DFE8857BCB491B4B28833595CE9929F0183A2209DF6C418BB2D1B8 dhcp-167.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RlpXJgMbq3Wj7hX+l8sfdluaQTFPM56n6W1xgVFqKeuIODS5EMVkSsFk08CdtQHqwF0uNYofvTgQsbWM0v0ntxKX+33nhixkDoSIUrHuFPWeCta4+xt6qxKz5quq2B7w9GAT/fbf6IV7y0kbSyiDNZXOmSnwGDoiCd9sQYuy0bg= ;{id = 42393} 08646863702D313637096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B290004E40F8B998B0DFD0134EFA309227CD2331CF5FCE0C9348DC3B05D4EAACD848F8C3E2FC540784148482ED77A4FA15F11960C6463120A95773A3F75CF585D4AA37EC1A7FCE3E576B1FEA466BBA10AA0D1E2A87BBC35732D9E5449EDB5C381314DA257216B9E0FA57A2E050613106BE8D9CF64C028F06BB7847295F524AEF dhcp-167.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. spAATkD4uZiw39ATTvowkifNIzHPX84Mk0jcOwXU6qzYSPjD4vxUB4QUhILtd6T6FfEZYMZGMSCpV3Oj91z1hdSqN+waf84+V2sf6kZruhCqDR4qh7vDVzLZ5USe21w4ExTaJXIWueD6V6LgUGExBr6NnPZMAo8Gu3hHKV9SSu8= ;{id = 42393} 08646863702D313637096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313638096E6C6E65746C616273026E6C000006400000000003 dhcp-167.nlnetlabs.nl. 3600 IN NSEC dhcp-168.nlnetlabs.nl. A RRSIG NSEC 08646863702D313638096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A8 dhcp-168.nlnetlabs.nl. 10200 IN A 213.154.224.168 08646863702D313638096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004FB184E3F2B1A7286624CA028D66D1FDBF059D41852ED2B444131ECF0E8B3DDCFF1EF4571BEB57B69DA11D3EDE0ED6D683EF63F638E58CF73A7BA8167CFD4E6DF4A639D39F293D63FA2E55418D4520C306493D281057BD1C1666D46B6EC818B02B374C4FD6A2A964BACB857065EFA7C80D8F7F1B93215299326767DC542DB4EC dhcp-168.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. T7GE4/KxpyhmJMoCjWbR/b8FnUGFLtK0RBMezw6LPdz/HvRXG+tXtp2hHT7eDtbWg+9j9jjljPc6e6gWfP1ObfSmOdOfKT1j+i5VQY1FIMMGST0oEFe9HBZm1GtuyBiwKzdMT9aiqWS6y4VwZe+nyA2PfxuTIVKZMmdn3FQttOw= ;{id = 42393} 08646863702D313638096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C006D7C943D53663FC0C7A4C3F1AD4B1761BF0F18CE749032B735AD62335CC067841DE65B3A6A53C055CCA6B73AE4C0104AB6A32DA507A97E37677A368FD687386F6C066AA42718540D13A26D85C5F33DC04784CB063D688D610201B9045E1E8EC928154DE83B7F54D39694A566C18D05FFB3E40D8028EABA5DD4C94CB5F1BDA5E1 dhcp-168.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. bXyUPVNmP8DHpMPxrUsXYb8PGM50kDK3Na1iM1zAZ4Qd5ls6alPAVcymtzrkwBBKtqMtpQepfjdnejaP1oc4b2wGaqQnGFQNE6JthcXzPcBHhMsGPWiNYQIBuQReHo7JKBVN6Dt/VNOWlKVmwY0F/7PkDYAo6rpd1MlMtfG9peE= ;{id = 42393} 08646863702D313638096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313639096E6C6E65746C616273026E6C000006400000000003 dhcp-168.nlnetlabs.nl. 3600 IN NSEC dhcp-169.nlnetlabs.nl. A RRSIG NSEC 08646863702D313639096E6C6E65746C616273026E6C0000010001000027D80004D59AE0A9 dhcp-169.nlnetlabs.nl. 10200 IN A 213.154.224.169 08646863702D313639096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002ECBF30B072907FB887FF76E760BE6016496F1776EFC468296FCB521A5CB53EC7176385642C819B6C0207AB36CD9EACFD6A678FC0171218C296D1872C5AD36EE9613CC49F7D7FBEE4265D0E4E0560DCCD7E96CF79613BD9A71000DB06E0D82CB75BCB1A992DEAFBAC9BF34013D8FD9EF3BE35EF0983B2903FCAA8975FF14A14C dhcp-169.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. LsvzCwcpB/uIf/dudgvmAWSW8Xdu/EaClvy1IaXLU+xxdjhWQsgZtsAgerNs2erP1qZ4/AFxIYwpbRhyxa027pYTzEn31/vuQmXQ5OBWDczX6Wz3lhO9mnEADbBuDYLLdbyxqZLer7rJvzQBPY/Z7zvjXvCYOykD/KqJdf8UoUw= ;{id = 42393} 08646863702D313639096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002EDCA6DEF2FE33F720663D55E98B9C7C0E2D3392F2F3E01931E56D206D91BF7081586DBC2AD0CA3C88EFDE3AB12F96C5013F23BDF8E07AE618859B7D5FF6186205B7D42E88385E89964F9B8CFBCCA431B05B8BA02CE620231D001F29488C6FF799F9761AFCACD1D3222FF2C5B5DAC2CC2C8CE530DABE0997910CBC4E83DD6700 dhcp-169.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ltym3vL+M/cgZj1V6YucfA4tM5Ly8+AZMeVtIG2Rv3CBWG28KtDKPIjv3jqxL5bFAT8jvfjgeuYYhZt9X/YYYgW31C6IOF6Jlk+bjPvMpDGwW4ugLOYgIx0AHylIjG/3mfl2Gvys0dMiL/LFtdrCzCyM5TDavgmXkQy8ToPdZwA= ;{id = 42393} 08646863702D313639096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313730096E6C6E65746C616273026E6C000006400000000003 dhcp-169.nlnetlabs.nl. 3600 IN NSEC dhcp-170.nlnetlabs.nl. A RRSIG NSEC 08646863702D313730096E6C6E65746C616273026E6C0000010001000027D80004D59AE0AA dhcp-170.nlnetlabs.nl. 10200 IN A 213.154.224.170 08646863702D313730096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003A2269CA176D231504EB543E11D747FA028227045217B43CAA678843EA44DBCB9F2F33553E8EEB5033CA9A5AEB1B9EF2DAB4D7BFFDBB23869C1C92D4C9E2E4AA3295165D0D586344C2D222CF51209C40F8BC76DD9A464B78AD800D1E82944EC696E5202C4644167EEADE9FB30E80D3E47CD0884C1E903746E2D32C5C3BB584F2 dhcp-170.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. OiJpyhdtIxUE61Q+EddH+gKCJwRSF7Q8qmeIQ+pE28ufLzNVPo7rUDPKmlrrG57y2rTXv/27I4acHJLUyeLkqjKVFl0NWGNEwtIiz1EgnED4vHbdmkZLeK2ADR6ClE7GluUgLEZEFn7q3p+zDoDT5HzQiEwekDdG4tMsXDu1hPI= ;{id = 42393} 08646863702D313730096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B950C5792A2C4FEA642B805ED37CFAA774AFAC7CEC61D07BE6BA26463C201A962A5FCB6419E6D5D63C68881B9DB556A358EC1FA81898D53118727CBE54FEBEC512A789C8EFDCAD38BDEFA9FBAA492339154FAC2CB0BAF03E4A4D8A167BA8BBC91C170E16AE7F545F1F82B2EE1E1AB495BE6D1069DAF681C0675BA046DF9EA064 dhcp-170.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uVDFeSosT+pkK4Be03z6p3SvrHzsYdB75romRjwgGpYqX8tkGebV1jxoiBudtVajWOwfqBiY1TEYcny+VP6+xRKnicjv3K04ve+p+6pJIzkVT6wssLrwPkpNihZ7qLvJHBcOFq5/VF8fgrLuHhq0lb5tEGna9oHAZ1ugRt+eoGQ= ;{id = 42393} 08646863702D313730096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313731096E6C6E65746C616273026E6C000006400000000003 dhcp-170.nlnetlabs.nl. 3600 IN NSEC dhcp-171.nlnetlabs.nl. A RRSIG NSEC 08646863702D313731096E6C6E65746C616273026E6C0000010001000027D80004D59AE0AB dhcp-171.nlnetlabs.nl. 10200 IN A 213.154.224.171 08646863702D313731096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B77610F0F97966B72DAFCF5AF30509EBBAB61E414D27D283829AF00B4F54DC5D40103A13CE163F62D40ABE02C2223489C5958A12AA1AF148FA2C39D5DC368EB3FD35B9BB5152733C483F431DE819C50C7EBF2519372774BE6B19D39F4F16BF830145D6FDFDD6B7980865C3AB04A602F39198109FED4C3AA0BE2EA4D9AFD49BA2 dhcp-171.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. t3YQ8Pl5Zrctr89a8wUJ67q2HkFNJ9KDgprwC09U3F1AEDoTzhY/YtQKvgLCIjSJxZWKEqoa8Uj6LDnV3DaOs/01ubtRUnM8SD9DHegZxQx+vyUZNyd0vmsZ059PFr+DAUXW/f3Wt5gIZcOrBKYC85GYEJ/tTDqgvi6k2a/Um6I= ;{id = 42393} 08646863702D313731096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000E16A50BA042B48F71B3E3445539E725B688088FE52AF42FE75AEA02C9D01F292D0D376EEE0A4D0A5007B6D73519FE922E784966232E337A8F7EE3B2D969A38CACCA4EDE5DDF940EAA8AA29127961750249294FC0759CBFD287B2C3F86EFA3AEC99A26B59843BCD5CD7B24134E6FDA15AAF4ABEA60037D1106F9F2626E47A436 dhcp-171.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DhalC6BCtI9xs+NEVTnnJbaICI/lKvQv51rqAsnQHyktDTdu7gpNClAHttc1Gf6SLnhJZiMuM3qPfuOy2WmjjKzKTt5d35QOqoqikSeWF1AkkpT8B1nL/Sh7LD+G76OuyZomtZhDvNXNeyQTTm/aFar0q+pgA30RBvnyYm5HpDY= ;{id = 42393} 08646863702D313731096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313732096E6C6E65746C616273026E6C000006400000000003 dhcp-171.nlnetlabs.nl. 3600 IN NSEC dhcp-172.nlnetlabs.nl. A RRSIG NSEC 08646863702D313732096E6C6E65746C616273026E6C0000010001000027D80004D59AE0AC dhcp-172.nlnetlabs.nl. 10200 IN A 213.154.224.172 08646863702D313732096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005177302435D3BD98E873BB2CF7010B7147FE83F8D687B10DBDDE6CC9A2D5AFAC4398CD8D04B9F373919A75E8743890099B8EC08A63E09FD2084F441DC9FF0909D6544F4D62486B00B9A6600C8AAB7256167956728CEC9C3F46FBE02AB704B536656353CB2DE383DCDA07F994B9CCB790D976D562DB42D6D04B5A36B3DE169930 dhcp-172.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. UXcwJDXTvZjoc7ss9wELcUf+g/jWh7ENvd5syaLVr6xDmM2NBLnzc5Gadeh0OJAJm47AimPgn9IIT0Qdyf8JCdZUT01iSGsAuaZgDIqrclYWeVZyjOycP0b74Cq3BLU2ZWNTyy3jg9zaB/mUucy3kNl21WLbQtbQS1o2s94WmTA= ;{id = 42393} 08646863702D313732096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000612B2914CEBFEEE7CAC1F6E468F7BAE31F1A838E4A4DED92B34499029D9F886FB7C5FAD5775BE0AE53CBB9A93180B4AC80F2A587BAF05E11AAA38290CA384D10894CA0ADCED68517A37D94511199E0B19A51D12EF1B1FA7C3CFB01D281DDBEEEE2362AB554BFD7A53958C80BE0ACD06369F86D430F6F751019FFA1AF7F25D9F dhcp-172.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. BhKykUzr/u58rB9uRo97rjHxqDjkpN7ZKzRJkCnZ+Ib7fF+tV3W+CuU8u5qTGAtKyA8qWHuvBeEaqjgpDKOE0QiUygrc7WhRejfZRREZngsZpR0S7xsfp8PPsB0oHdvu7iNiq1VL/XpTlYyAvgrNBjafhtQw9vdRAZ/6GvfyXZ8= ;{id = 42393} 08646863702D313732096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313733096E6C6E65746C616273026E6C000006400000000003 dhcp-172.nlnetlabs.nl. 3600 IN NSEC dhcp-173.nlnetlabs.nl. A RRSIG NSEC 08646863702D313733096E6C6E65746C616273026E6C0000010001000027D80004D59AE0AD dhcp-173.nlnetlabs.nl. 10200 IN A 213.154.224.173 08646863702D313733096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001FC7FF92EDBC2B917C24ED8451B7FF62207B06A1B478A6DC297B627173360EBA48D77C90F165227B7741CB7EC07BEBD4AFBB4C3BCC9BB0196396E3EF08780F1225D725C5AAA727D077B8611C5C2E3936DA3EB8FBC64FD1418F01919A5847D422BD592D317640C2EBC31C5EC5F15BF3C0F4D4E74E28932C3D56582B5593CDF21A dhcp-173.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. H8f/ku28K5F8JO2EUbf/YiB7BqG0eKbcKXticXM2DrpI13yQ8WUie3dBy37Ae+vUr7tMO8ybsBljluPvCHgPEiXXJcWqpyfQd7hhHFwuOTbaPrj7xk/RQY8BkZpYR9QivVktMXZAwuvDHF7F8VvzwPTU504okyw9VlgrVZPN8ho= ;{id = 42393} 08646863702D313733096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00434006ECDD1EB723C7F929A8A20823054A9BC287CDBEE30D5545F058E2209389CCAD7D29814FAA9BEFF94421E56D76336BB12DE58D52968332A26FA332430CE18C59D9BE3844AD775583EF5BF3F13F36FD1B5A0FB46AE07F9377AB8405D2AD6D8F2897D8DC2EBBB07562032D546F96E430D8BCD644454FEB0E5025093B453701 dhcp-173.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Q0AG7N0etyPH+SmooggjBUqbwofNvuMNVUXwWOIgk4nMrX0pgU+qm+/5RCHlbXYza7Et5Y1SloMyom+jMkMM4YxZ2b44RK13VYPvW/PxPzb9G1oPtGrgf5N3q4QF0q1tjyiX2Nwuu7B1YgMtVG+W5DDYvNZERU/rDlAlCTtFNwE= ;{id = 42393} 08646863702D313733096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313734096E6C6E65746C616273026E6C000006400000000003 dhcp-173.nlnetlabs.nl. 3600 IN NSEC dhcp-174.nlnetlabs.nl. A RRSIG NSEC 08646863702D313734096E6C6E65746C616273026E6C0000010001000027D80004D59AE0AE dhcp-174.nlnetlabs.nl. 10200 IN A 213.154.224.174 08646863702D313734096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00AB60E5942526F4336A0C4B884F42A13FCA08BC6B87EA0C0C95615A33D9EC46FDD47BA13C1F1CCCBCF0FE983E66ED458431563238082AEA53367DEB3A1175C5B3D7D6DCD3D012996A20FE4941C9780B95CD4D49ECB80FED484371A8D483631BE65A329016C369BC318D2EDEB53E91E4731CF0773FC65A60ABFF4D5D01D887114B dhcp-174.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. q2DllCUm9DNqDEuIT0KhP8oIvGuH6gwMlWFaM9nsRv3Ue6E8HxzMvPD+mD5m7UWEMVYyOAgq6lM2fes6EXXFs9fW3NPQEplqIP5JQcl4C5XNTUnsuA/tSENxqNSDYxvmWjKQFsNpvDGNLt61PpHkcxzwdz/GWmCr/01dAdiHEUs= ;{id = 42393} 08646863702D313734096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0077C4354E6F7CBCCB5E533E326D739EF064E0EE4901A2056EC14F04327B4097B38AC13801B97635DC58366F4BAAAF3A784C48BC24571DB741CEE4DCA81F3A8199BA021090F7C4ABA12985345CF6EA6D76EEA026B3CCC7A4BC36AAB44C9D88207BBB7743DB20134CC7F9BDD53007F464F0E097DF819945EAAFA876D04053DCFBD5 dhcp-174.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. d8Q1Tm98vMteUz4ybXOe8GTg7kkBogVuwU8EMntAl7OKwTgBuXY13Fg2b0uqrzp4TEi8JFcdt0HO5NyoHzqBmboCEJD3xKuhKYU0XPbqbXbuoCazzMekvDaqtEydiCB7u3dD2yATTMf5vdUwB/Rk8OCX34GZReqvqHbQQFPc+9U= ;{id = 42393} 08646863702D313734096E6C6E65746C616273026E6C00002F000100000E10001F08646863702D313735096E6C6E65746C616273026E6C000006400000000003 dhcp-174.nlnetlabs.nl. 3600 IN NSEC dhcp-175.nlnetlabs.nl. A RRSIG NSEC 08646863702D313735096E6C6E65746C616273026E6C0000010001000027D80004D59AE0AF dhcp-175.nlnetlabs.nl. 10200 IN A 213.154.224.175 08646863702D313735096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A26D741EEB13CBF2DAB66EE1FB7EDF2CB80C3B36C5E280E6687DB6DB9472F1C5D4C0A308F94BE9BB6C26957066BBE399C52D6CE9B3516360CCB2A88BBA94925F5DFB8D7E1AAE2B5340816720E1ADA0B754A8220E6AE73155D4A6CBCC6712EA89D90BCB2D9C40889DE4107D6425733E1B9053CCE4B559CEC21C3AC94E2B6B6C47 dhcp-175.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. om10HusTy/Latm7h+37fLLgMOzbF4oDmaH2225Ry8cXUwKMI+Uvpu2wmlXBmu+OZxS1s6bNRY2DMsqiLupSSX137jX4aritTQIFnIOGtoLdUqCIOaucxVdSmy8xnEuqJ2QvLLZxAiJ3kEH1kJXM+G5BTzOS1Wc7CHDrJTitrbEc= ;{id = 42393} 08646863702D313735096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002AFD4494D85B6113B8B5D7A3E37E00C71D20389C2624B01A45D0D9731687AA94115EDCDD40E929E5D19B0C3D54259A87CD846EE6379CFCE93BDDD5FD2926F712EE639B329860402F83371B5F598FBCB924F8BD2AF96E6A9B58A7D2EF707E742F2DD7057C9B5C3A54A96FC2FACFB78A078F87DC8910181F8D9E94A0FE6073F16E dhcp-175.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Kv1ElNhbYRO4tdej434Axx0gOJwmJLAaRdDZcxaHqpQRXtzdQOkp5dGbDD1UJZqHzYRu5jec/Ok73dX9KSb3Eu5jmzKYYEAvgzcbX1mPvLkk+L0q+W5qm1in0u9wfnQvLdcFfJtcOlSpb8L6z7eKB4+H3IkQGB+NnpSg/mBz8W4= ;{id = 42393} 08646863702D313735096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3634096E6C6E65746C616273026E6C000006400000000003 dhcp-175.nlnetlabs.nl. 3600 IN NSEC dhcp-64.nlnetlabs.nl. A RRSIG NSEC 07646863702D3634096E6C6E65746C616273026E6C0000010001000027D80004D59AE040 dhcp-64.nlnetlabs.nl. 10200 IN A 213.154.224.64 07646863702D3634096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D01DF5794E09DC1A6EC3032FF8FE5234C1DB454E6931D719B5DA65C0E6679A55EAC6E736228E31DD1FFEBED79FC0E8F3EF1E61B3525A816B61FD9D373CB088A6CDF9C59DC84E59087CA922DCDB20A33CBABD3B573293BA527DE6C077B454EA8221A6C67E7E60A0D48D5DDEF3316659BD374977151D07E516E22715B26FDD9FF0 dhcp-64.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0B31eU4J3BpuwwMv+P5SNMHbRU5pMdcZtdplwOZnmlXqxuc2Io4x3R/+vtefwOjz7x5hs1JagWth/Z03PLCIps35xZ3ITlkIfKki3Nsgozy6vTtXMpO6Un3mwHe0VOqCIabGfn5goNSNXd7zMWZZvTdJdxUdB+UW4icVsm/dn/A= ;{id = 42393} 07646863702D3634096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00AB8FE22E6C44AC9696F33673D89DAA2BD0CFCED66DD3148694C2E63A00450128B643CAE5BDB2EB60582CC2AF6C7CCB5C815E2CA439FA343B417BBF807C8CAED40AAF11B021C3468BFD92148FECBE31B988BF21BB5361A8760BA1C88C62894C46B16EBCBD85A2FA33A37C2A83A472650684740BFE0D85A5C7C88296997C543F32 dhcp-64.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. q4/iLmxErJaW8zZz2J2qK9DPztZt0xSGlMLmOgBFASi2Q8rlvbLrYFgswq9sfMtcgV4spDn6NDtBe7+AfIyu1AqvEbAhw0aL/ZIUj+y+MbmIvyG7U2GodguhyIxiiUxGsW68vYWi+jOjfCqDpHJlBoR0C/4NhaXHyIKWmXxUPzI= ;{id = 42393} 07646863702D3634096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3635096E6C6E65746C616273026E6C000006400000000003 dhcp-64.nlnetlabs.nl. 3600 IN NSEC dhcp-65.nlnetlabs.nl. A RRSIG NSEC 07646863702D3635096E6C6E65746C616273026E6C0000010001000027D80004D59AE041 dhcp-65.nlnetlabs.nl. 10200 IN A 213.154.224.65 07646863702D3635096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006CB7BC455AE339B9F1A02DAC9D16E0C71745BC735D0EBDBA3A54118B107395FF0ED17ED17B70EA2E79178DA42CBBB328A16F97DEA4F0E500B31FDEC269E765FC1AE56FECF0309B16E5BB767F6622FAABF4D9D0C1BF31D2715BFE8D25D13DE14C1E48502A15038BFCBC239FE4492CA9503E4621CDD01F365B5C38A77A9955E77C dhcp-65.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bLe8RVrjObnxoC2snRbgxxdFvHNdDr26OlQRixBzlf8O0X7Re3DqLnkXjaQsu7MooW+X3qTw5QCzH97Caedl/Brlb+zwMJsW5bt2f2Yi+qv02dDBvzHScVv+jSXRPeFMHkhQKhUDi/y8I5/kSSypUD5GIc3QHzZbXDineplV53w= ;{id = 42393} 07646863702D3635096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0058427C2BFB412004288F9DB802978043D8AAB8362085D5C9E0D35A837CF015863384C2C8E5478AA0F76774CB24C3489FFA0D49D724A998D540F51BB4A93C56C82CA0DA4C15D570E1CD129FF6ED1BDE347E04D7C780A075C7977CC0FF0BB7E330357BA878FA2A43F790E59D119076246C51B349F9BE49B4E178FE0A5F8A671804 dhcp-65.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. WEJ8K/tBIAQoj524ApeAQ9iquDYghdXJ4NNag3zwFYYzhMLI5UeKoPdndMskw0if+g1J1ySpmNVA9Ru0qTxWyCyg2kwV1XDhzRKf9u0b3jR+BNfHgKB1x5d8wP8Lt+MwNXuoePoqQ/eQ5Z0RkHYkbFGzSfm+SbTheP4KX4pnGAQ= ;{id = 42393} 07646863702D3635096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3636096E6C6E65746C616273026E6C000006400000000003 dhcp-65.nlnetlabs.nl. 3600 IN NSEC dhcp-66.nlnetlabs.nl. A RRSIG NSEC 07646863702D3636096E6C6E65746C616273026E6C0000010001000027D80004D59AE042 dhcp-66.nlnetlabs.nl. 10200 IN A 213.154.224.66 07646863702D3636096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0089DCE0CE5D1FC9A9D68D923D92381C9EA3EAE7A1641002DB9F283E331AB6E46AAED800178B0C3C3EAF5BD003B0C204F84A706155D67E28EB5D84B7F0C8B6FB2AD0739E2CB2EC497E351E194E8AD966EF88F0BEC939FA92018FF8A5327392733312BFEC3A8B92C814DDA8D2629172802B7D4F0F239A88B30C91F67200B0516195 dhcp-66.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. idzgzl0fyanWjZI9kjgcnqPq56FkEALbnyg+Mxq25Gqu2AAXiww8Pq9b0AOwwgT4SnBhVdZ+KOtdhLfwyLb7KtBzniyy7El+NR4ZTorZZu+I8L7JOfqSAY/4pTJzknMzEr/sOouSyBTdqNJikXKAK31PDyOaiLMMkfZyALBRYZU= ;{id = 42393} 07646863702D3636096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001454C1E4787C73E61F42235C3FB079F470D2EA117A895021DE1AB474345BA253C2FD84393A75CF8AF9D0999B82ACA8E4E1B76061E4D6C86DC4E0893145CF730744EC11C7F87973C09F4EA358B9806C87AD84E5043EEE8C12FB898DC45A93200FF65D9E262BD3D1D8B569CEC08D7663160854B028296F24ABD3362CBBB97BFA6F dhcp-66.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FFTB5Hh8c+YfQiNcP7B59HDS6hF6iVAh3hq0dDRbolPC/YQ5OnXPivnQmZuCrKjk4bdgYeTWyG3E4IkxRc9zB0TsEcf4eXPAn06jWLmAbIethOUEPu6MEvuJjcRakyAP9l2eJivT0di1ac7AjXZjFghUsCgpbySr0zYsu7l7+m8= ;{id = 42393} 07646863702D3636096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3637096E6C6E65746C616273026E6C000006400000000003 dhcp-66.nlnetlabs.nl. 3600 IN NSEC dhcp-67.nlnetlabs.nl. A RRSIG NSEC 07646863702D3637096E6C6E65746C616273026E6C0000010001000027D80004D59AE043 dhcp-67.nlnetlabs.nl. 10200 IN A 213.154.224.67 07646863702D3637096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008A40740C7EE9CC4956C27E12145BB4EDC73F0588B79667904D2EDE8F9C506166851E1ECBEA3467698D3CE9D970B7E6E6A6EA3BBE0126D30B8D2AB1898C93A6DACC0F6E9E3919DB9D761DFB07B7AB0D1A117950BAE82A61E4A7D4D05E88F3AE76B03FC08BE648C67BC3005730AF23A5405FE9641571F1869BC7A7D25251808778 dhcp-67.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ikB0DH7pzElWwn4SFFu07cc/BYi3lmeQTS7ej5xQYWaFHh7L6jRnaY086dlwt+bmpuo7vgEm0wuNKrGJjJOm2swPbp45Gduddh37B7erDRoReVC66Cph5KfU0F6I8652sD/Ai+ZIxnvDAFcwryOlQF/pZBVx8Yabx6fSUlGAh3g= ;{id = 42393} 07646863702D3637096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000CDDE72E2ED6C92B2FD27AB3E67B728C7306DCC0B3DAD03DEA4948C664173E0C906E733AA497C385A8CA537318BB49B9B338C96D2198724CD7F1A725B0DD9F7BDD03998C3363B005835DA94FB7F32886B4C344982C37CD33E9DC2CFA44CE890D79739811F242A3BA28CB857CF92172383665CF72DA0D95A18122042F03489B9B dhcp-67.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DN3nLi7WySsv0nqz5ntyjHMG3MCz2tA96klIxmQXPgyQbnM6pJfDhajKU3MYu0m5szjJbSGYckzX8aclsN2fe90DmYwzY7AFg12pT7fzKIa0w0SYLDfNM+ncLPpEzokNeXOYEfJCo7ooy4V8+SFyODZlz3LaDZWhgSIELwNIm5s= ;{id = 42393} 07646863702D3637096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3638096E6C6E65746C616273026E6C000006400000000003 dhcp-67.nlnetlabs.nl. 3600 IN NSEC dhcp-68.nlnetlabs.nl. A RRSIG NSEC 07646863702D3638096E6C6E65746C616273026E6C0000010001000027D80004D59AE044 dhcp-68.nlnetlabs.nl. 10200 IN A 213.154.224.68 07646863702D3638096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A3759F50D9C0665AD7E12607C0126AA788E2E5FEAD6D728049992D8937E4FE7380941AB2FB0F4713EF43D8226FF7B982953FE0D40439F74554727E2D22B8E6A9A88ED452AA5ACC5FBA8489B12F01FF5A74B787D125F4C7AF1BAD48EEB146E95A37070C374F670CA419639BE148382BD3AC6DDA428DB0482119ED8444953CF4CC dhcp-68.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. o3WfUNnAZlrX4SYHwBJqp4ji5f6tbXKASZktiTfk/nOAlBqy+w9HE+9D2CJv97mClT/g1AQ590VUcn4tIrjmqaiO1FKqWsxfuoSJsS8B/1p0t4fRJfTHrxutSO6xRulaNwcMN09nDKQZY5vhSDgr06xt2kKNsEghGe2ERJU89Mw= ;{id = 42393} 07646863702D3638096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0023501A0221FEEB61E07F1F8AEF3C38639BD93F26092B5BF5A76B7A213DE3A39DDA8AA33CBF476B980E32E84FCCEC66EC5EA54C35B750CF4C9B6077BD916F66118BCFE4C07538DBA0CA16CCCBA13F4231B25CC4C73E0DEE7F33DA5C4D683B3D9E7E963F3F35F69FC6CB58C194AE227F462851246E246817C7490C5DEA8BD5A430 dhcp-68.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. I1AaAiH+62Hgfx+K7zw4Y5vZPyYJK1v1p2t6IT3jo53aiqM8v0drmA4y6E/M7GbsXqVMNbdQz0ybYHe9kW9mEYvP5MB1ONugyhbMy6E/QjGyXMTHPg3ufzPaXE1oOz2efpY/PzX2n8bLWMGUriJ/RihRJG4kaBfHSQxd6ovVpDA= ;{id = 42393} 07646863702D3638096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3639096E6C6E65746C616273026E6C000006400000000003 dhcp-68.nlnetlabs.nl. 3600 IN NSEC dhcp-69.nlnetlabs.nl. A RRSIG NSEC 07646863702D3639096E6C6E65746C616273026E6C0000010001000027D80004D59AE045 dhcp-69.nlnetlabs.nl. 10200 IN A 213.154.224.69 07646863702D3639096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D3971A0D529FE96998D7EF4B424C478F36AE08CA3AFFF26136BE53E87B3647DA82070AFD16CD73CB7C76A759BCB8DAE85A15F0816DD2FAAAD990BCAAEF5451B1D450D1E65DD3B854377CD7AAADF911CE6CB52975FA9591797C79E3F4AABB4DF14CADDB179BAEB092573C1379A4279112EF63477D97EE9B426A03DC15A18225F3 dhcp-69.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 05caDVKf6WmY1+9LQkxHjzauCMo6//JhNr5T6Hs2R9qCBwr9Fs1zy3x2p1m8uNroWhXwgW3S+qrZkLyq71RRsdRQ0eZd07hUN3zXqq35Ec5stSl1+pWReXx54/Squ03xTK3bF5uusJJXPBN5pCeREu9jR32X7ptCagPcFaGCJfM= ;{id = 42393} 07646863702D3639096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A32A6235A3DA51EAD626CD6464C9C690447B182D12ACB5F3D60ADC1C91FB669966C6E38D77887255EF2161EA70E61E887D957C4E474CF44AB033FE66CBDF0367D3BB9547D8172CB9775E7D5860446F09A73B934A442476D3A3232429247AD55B9B00276D9A737AB4254B0A520A9639FE0B1455508CAD1466ADB4D139FC60DDC8 dhcp-69.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. oypiNaPaUerWJs1kZMnGkER7GC0SrLXz1grcHJH7ZplmxuONd4hyVe8hYepw5h6IfZV8TkdM9EqwM/5my98DZ9O7lUfYFyy5d159WGBEbwmnO5NKRCR206MjJCkketVbmwAnbZpzerQlSwpSCpY5/gsUVVCMrRRmrbTROfxg3cg= ;{id = 42393} 07646863702D3639096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3730096E6C6E65746C616273026E6C000006400000000003 dhcp-69.nlnetlabs.nl. 3600 IN NSEC dhcp-70.nlnetlabs.nl. A RRSIG NSEC 07646863702D3730096E6C6E65746C616273026E6C0000010001000027D80004D59AE046 dhcp-70.nlnetlabs.nl. 10200 IN A 213.154.224.70 07646863702D3730096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00411B75D82F7B32C158C9BF1DD49F3F800ACE502FE5E929851269C62C88680BD23C6D5757867B96423E5DC9BA206154239D66676C02BD0E04461AB5F416C38F21A83397F1B397A0735508583EE235A66C6703715F4ED59E3F3DE48F52E5A09104E8BA269AC48B848D86567FE654705482ACD580171A9F3F2853C7E6951D7B7DE1 dhcp-70.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QRt12C97MsFYyb8d1J8/gArOUC/l6SmFEmnGLIhoC9I8bVdXhnuWQj5dybogYVQjnWZnbAK9DgRGGrX0FsOPIagzl/Gzl6BzVQhYPuI1pmxnA3FfTtWePz3kj1LloJEE6LommsSLhI2GVn/mVHBUgqzVgBcanz8oU8fmlR17feE= ;{id = 42393} 07646863702D3730096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00010FECB4201AA7ABC20FB1FDF58C21C9D0A4B549E4D6FF622A464E654669CD7EAB2C0823F862F2DBBCAA7EE39191CDBB077F3E68D6800194E96D5B9FF9BE892D45F6336B3B0512D0F244509B179E81D48B8729E9B434A3B76F9E5995F7BC4DC542689C709C1AF82CDC1D2922CFCE74B0BD0764A186D0E8E6C0E595250E16C415 dhcp-70.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. AQ/stCAap6vCD7H99YwhydCktUnk1v9iKkZOZUZpzX6rLAgj+GLy27yqfuORkc27B38+aNaAAZTpbVuf+b6JLUX2M2s7BRLQ8kRQmxeegdSLhynptDSjt2+eWZX3vE3FQmiccJwa+CzcHSkiz850sL0HZKGG0OjmwOWVJQ4WxBU= ;{id = 42393} 07646863702D3730096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3731096E6C6E65746C616273026E6C000006400000000003 dhcp-70.nlnetlabs.nl. 3600 IN NSEC dhcp-71.nlnetlabs.nl. A RRSIG NSEC 07646863702D3731096E6C6E65746C616273026E6C0000010001000027D80004D59AE047 dhcp-71.nlnetlabs.nl. 10200 IN A 213.154.224.71 07646863702D3731096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0041AB280D0771548762A69A0E4A93593E4C90FBECB950E82EACDD995C911B207D83D98B0A2BCA15CA0EBEE1B964E501505A73FDB40D1AFDEC9EEE3EE7FE2B0618B16A3BB178D18A30A7527398B2D2C1D4EB9F55098B4ADC77FB439872E2BCB4D7E1D9BD628C5373EF46986AAAB01F9E58221895496522D60B7381F7FC6A3DDA15 dhcp-71.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QasoDQdxVIdippoOSpNZPkyQ++y5UOgurN2ZXJEbIH2D2YsKK8oVyg6+4blk5QFQWnP9tA0a/eye7j7n/isGGLFqO7F40Yowp1JzmLLSwdTrn1UJi0rcd/tDmHLivLTX4dm9YoxTc+9GmGqqsB+eWCIYlUllItYLc4H3/Go92hU= ;{id = 42393} 07646863702D3731096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001E67D885637C4299B1A20C0FE666FE276B5714D92A9FFD37C03326A34C94EC9C76760E7661C46A11B95EDC0F824D06194229805D2D7CB036A8389754FE2E62625D501228E19EA2FEC6B80F6ECADD28842664B337E03CC0601C67E115144AE6336100D7CA7ADB59E46AC67EA79AC021FB8DD4492DEC40349000659940D43DE4FB dhcp-71.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HmfYhWN8QpmxogwP5mb+J2tXFNkqn/03wDMmo0yU7Jx2dg52YcRqEble3A+CTQYZQimAXS18sDaoOJdU/i5iYl1QEijhnqL+xrgPbsrdKIQmZLM34DzAYBxn4RUUSuYzYQDXynrbWeRqxn6nmsAh+43USS3sQDSQAGWZQNQ95Ps= ;{id = 42393} 07646863702D3731096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3732096E6C6E65746C616273026E6C000006400000000003 dhcp-71.nlnetlabs.nl. 3600 IN NSEC dhcp-72.nlnetlabs.nl. A RRSIG NSEC 07646863702D3732096E6C6E65746C616273026E6C0000010001000027D80004D59AE048 dhcp-72.nlnetlabs.nl. 10200 IN A 213.154.224.72 07646863702D3732096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009E526036D540C789C00CCD66560F47387E2AE3C7B39E409D6C7A687B6868008AC03CA64C9C3D6A577CA2B5BBE5C4B6ECBA451758B8D76D80919A6F416EB9F1B92556B4C81C89C6369050846F0E01AB3F4435987A69FC69BB90F045EB3D75F5373364E84BEC7046BEC36DF19F1F3DF54815CF5AF43BB8E4B65CE1E5DC5428E965 dhcp-72.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nlJgNtVAx4nADM1mVg9HOH4q48eznkCdbHpoe2hoAIrAPKZMnD1qV3yitbvlxLbsukUXWLjXbYCRmm9BbrnxuSVWtMgcicY2kFCEbw4Bqz9ENZh6afxpu5DwRes9dfU3M2ToS+xwRr7DbfGfHz31SBXPWvQ7uOS2XOHl3FQo6WU= ;{id = 42393} 07646863702D3732096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009709BB31E83524976AD950B364A0B8683FD62E0BA3DA718290CC2B740DD6BCC1168FC6B6469C6B288C7753D60F7D769A789269CC608BA5BA404ED04F01EE8A5B40387941A71C84433B9547E7E66704FFC7828D574C52271FB009E5315EA73D17643311CAE5148C2C3C52B76642C733D1F85CDA09CD4BAFDFF439154C0D1F6B53 dhcp-72.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. lwm7Meg1JJdq2VCzZKC4aD/WLguj2nGCkMwrdA3WvMEWj8a2RpxrKIx3U9YPfXaaeJJpzGCLpbpATtBPAe6KW0A4eUGnHIRDO5VH5+ZnBP/Hgo1XTFInH7AJ5TFepz0XZDMRyuUUjCw8UrdmQscz0fhc2gnNS6/f9DkVTA0fa1M= ;{id = 42393} 07646863702D3732096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3733096E6C6E65746C616273026E6C000006400000000003 dhcp-72.nlnetlabs.nl. 3600 IN NSEC dhcp-73.nlnetlabs.nl. A RRSIG NSEC 07646863702D3733096E6C6E65746C616273026E6C0000010001000027D80004D59AE049 dhcp-73.nlnetlabs.nl. 10200 IN A 213.154.224.73 07646863702D3733096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A8A8A039CBACB772C762C218252EF71F0039D73C58BB208EC6650C384A3D5D4B78135C9C53CF5AFFF99860F51AC0048ED7B66046C589875343811FED157F0EB7250AA6E669EDB3B4038F7EC1F202181AD8E5249F3F04FBA5E17988C5610FE002513ACEC0386FD259C14E91AE58E5BFC87632047164655289E22747EF58A00B42 dhcp-73.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qKigOcust3LHYsIYJS73HwA51zxYuyCOxmUMOEo9XUt4E1ycU89a//mYYPUawASO17ZgRsWJh1NDgR/tFX8OtyUKpuZp7bO0A49+wfICGBrY5SSfPwT7peF5iMVhD+ACUTrOwDhv0lnBTpGuWOW/yHYyBHFkZVKJ4idH71igC0I= ;{id = 42393} 07646863702D3733096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BB04D503315A0C9BA985625BE9C868332BA05E3C8A626EAB5DF82E0B6E15FA7BE50077A1DC12312DEFF4E3D403DAD194F38C3DE52A6143C089112BF34FC40B0AC518EF641EFE696D94453253685EE1454E85F4FEB802C0B871ECB952B50583047A2F0CF656F320AC44B90964BEF8A99959EDB092AE43393F30412F39E0A01F51 dhcp-73.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uwTVAzFaDJuphWJb6choMyugXjyKYm6rXfguC24V+nvlAHeh3BIxLe/049QD2tGU84w95SphQ8CJESvzT8QLCsUY72Qe/mltlEUyU2he4UVOhfT+uALAuHHsuVK1BYMEei8M9lbzIKxEuQlkvvipmVntsJKuQzk/MEEvOeCgH1E= ;{id = 42393} 07646863702D3733096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3734096E6C6E65746C616273026E6C000006400000000003 dhcp-73.nlnetlabs.nl. 3600 IN NSEC dhcp-74.nlnetlabs.nl. A RRSIG NSEC 07646863702D3734096E6C6E65746C616273026E6C0000010001000027D80004D59AE04A dhcp-74.nlnetlabs.nl. 10200 IN A 213.154.224.74 07646863702D3734096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0001682A6E34C880F175AE2FDFE0FCABD732F7CA8250A9CFF46F19C9E1BCEC827765168CD1E3EBE6CD877909116ADDC9FD0D18329BD156A0141EB69BBB125ED732451989A4E3BD376A580A53E9DAC38F9A32FD8E0AF55DF5D4B801D9B2596BA96AB471A901907145536FDCB036DCB65B8768DFEDA1063C61C844BA1577444A8478 dhcp-74.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. AWgqbjTIgPF1ri/f4Pyr1zL3yoJQqc/0bxnJ4bzsgndlFozR4+vmzYd5CRFq3cn9DRgym9FWoBQetpu7El7XMkUZiaTjvTdqWApT6drDj5oy/Y4K9V311LgB2bJZa6lqtHGpAZBxRVNv3LA23LZbh2jf7aEGPGHIRLoVd0RKhHg= ;{id = 42393} 07646863702D3734096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00D25EC53150FB6BE073B3DE39002608D59191386191D63024CBE810555220E0FABA661B2F19E68D41FD36C17695556B853C18C4C7EC7839FEDE10E0C909FFA2255BA5DF13AAAA10BF0457F2C7B889C3F3A52711C4F0AA914EFEE0979E402DED2E34A4220C95416D4EB831D61B5553FEA86DACABDA107C4723642BDD58AD51D8CB dhcp-74.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. 0l7FMVD7a+Bzs945ACYI1ZGROGGR1jAky+gQVVIg4Pq6ZhsvGeaNQf02wXaVVWuFPBjEx+x4Of7eEODJCf+iJVul3xOqqhC/BFfyx7iJw/OlJxHE8KqRTv7gl55ALe0uNKQiDJVBbU64MdYbVVP+qG2sq9oQfEcjZCvdWK1R2Ms= ;{id = 42393} 07646863702D3734096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3735096E6C6E65746C616273026E6C000006400000000003 dhcp-74.nlnetlabs.nl. 3600 IN NSEC dhcp-75.nlnetlabs.nl. A RRSIG NSEC 07646863702D3735096E6C6E65746C616273026E6C0000010001000027D80004D59AE04B dhcp-75.nlnetlabs.nl. 10200 IN A 213.154.224.75 07646863702D3735096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A92D1C58917D8B70742F88906B173F60D42656BF4AD9452CB3E4DE9B6815B009EFD37E906943C9F8E102F5441F69C03B22BCF52088EACBE70BBC5CE1710CFCCC5D81A5B3332EDA8C0F174A14C8C58C52BCCC75CEEACBA4B5DB3F68E9C9A338D8F1D9281B3463C0D20438D0C3F46B2C740DA7E5446ECF46A3AD55147738A6DBF3 dhcp-75.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qS0cWJF9i3B0L4iQaxc/YNQmVr9K2UUss+Tem2gVsAnv036QaUPJ+OEC9UQfacA7Irz1IIjqy+cLvFzhcQz8zF2BpbMzLtqMDxdKFMjFjFK8zHXO6suktds/aOnJozjY8dkoGzRjwNIEONDD9GssdA2n5URuz0ajrVUUdzim2/M= ;{id = 42393} 07646863702D3735096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0083F3FE72DF65BA4A08EDA2E031FD0BFA0D1CD9C0E48B3DA67415789AB5F277FA16C3B9CD6BA1661124A0DE1CC2970F2731DAD3EE23FC5453A750A8F4D8C326BA8AE9539AAA6BD55B081A8AC9199F71A9A0EDC19367A3E5DAF193D57D67313A55D3EE1076AD9BE00B07EF36E66C8F36FD973EDAB5D5505D045194C24E9D595688 dhcp-75.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. g/P+ct9lukoI7aLgMf0L+g0c2cDkiz2mdBV4mrXyd/oWw7nNa6FmESSg3hzClw8nMdrT7iP8VFOnUKj02MMmuorpU5qqa9VbCBqKyRmfcamg7cGTZ6Pl2vGT1X1nMTpV0+4Qdq2b4AsH7zbmbI82/Zc+2rXVUF0EUZTCTp1ZVog= ;{id = 42393} 07646863702D3735096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3736096E6C6E65746C616273026E6C000006400000000003 dhcp-75.nlnetlabs.nl. 3600 IN NSEC dhcp-76.nlnetlabs.nl. A RRSIG NSEC 07646863702D3736096E6C6E65746C616273026E6C0000010001000027D80004D59AE04C dhcp-76.nlnetlabs.nl. 10200 IN A 213.154.224.76 07646863702D3736096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001F66FE3B0D243FE15ACBC97950EC07EDCA478E88E296FAF1E849EC6E4335C4BA5E7E57535D0E1A38082FEDB72EC02F1E1F29F6764F1B8501D9907337E6ECF5469D08CBC94CF5AF0F7D2DC97960D859652EBE74059A403B797C973DB126D5B0208F0D7AF95DE1E781F91A27F291946ABEE81C3BC225051C5B54C162058EE7EBB6 dhcp-76.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. H2b+Ow0kP+Fay8l5UOwH7cpHjojilvrx6EnsbkM1xLpefldTXQ4aOAgv7bcuwC8eHyn2dk8bhQHZkHM35uz1Rp0Iy8lM9a8PfS3JeWDYWWUuvnQFmkA7eXyXPbEm1bAgjw16+V3h54H5GifykZRqvugcO8IlBRxbVMFiBY7n67Y= ;{id = 42393} 07646863702D3736096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0029CDE5698B7C5ACB60893A66F82DED58E31DF803D90E04D3FE6D56B91B7C4540448F24C695EA10D6615C26D3383D0065E62411CB0C0261398F07EDB1AA853FF8A13BB5ED7D7401460D454FF5D5C582AA27ADF4ED91FD8568E12B8246517DFA97CC0D943D5B949B417C89F92EE55BB9EBA6E73058DEC080FC54218A6ACE40EABF dhcp-76.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Kc3laYt8WstgiTpm+C3tWOMd+APZDgTT/m1WuRt8RUBEjyTGleoQ1mFcJtM4PQBl5iQRywwCYTmPB+2xqoU/+KE7te19dAFGDUVP9dXFgqonrfTtkf2FaOErgkZRffqXzA2UPVuUm0F8ifku5Vu566bnMFjewID8VCGKas5A6r8= ;{id = 42393} 07646863702D3736096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3737096E6C6E65746C616273026E6C000006400000000003 dhcp-76.nlnetlabs.nl. 3600 IN NSEC dhcp-77.nlnetlabs.nl. A RRSIG NSEC 07646863702D3737096E6C6E65746C616273026E6C0000010001000027D80004D59AE04D dhcp-77.nlnetlabs.nl. 10200 IN A 213.154.224.77 07646863702D3737096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00640F375F00D860FC86C709F688A0458B6841E85A1907B974F321A47A830A1151079CA7CA88AD9FCEAB383142B39A6751F491732D9AFA882F21B76C2D938E5A567DD566F63B1384402BC9E98F30A90AB1CDB89D62065C48E0791E0B979E5D6489EB0E28B0C231C65D574FFBC339219AAFE3545455674040C62B0D042E95D7E9AA dhcp-77.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZA83XwDYYPyGxwn2iKBFi2hB6FoZB7l08yGkeoMKEVEHnKfKiK2fzqs4MUKzmmdR9JFzLZr6iC8ht2wtk45aVn3VZvY7E4RAK8npjzCpCrHNuJ1iBlxI4HkeC5eeXWSJ6w4osMIxxl1XT/vDOSGar+NUVFVnQEDGKw0ELpXX6ao= ;{id = 42393} 07646863702D3737096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0025D46820BF0129AF97C731BF3EDC53B2FC4B707C09193983BEE70AF530FB3D2B949DBE94B4575B7C32FCF9A78A9A018ABB3C218FC67590EBC40B5AAE3FD75A445ABAB8696B598938E00E3F73CAF372DC59E9FDD673B950C289BFD3B3C568C37742EE1602152A9EFE03A47B2A0516DF7BD0DDF4C3C7AB9B12C11534C1AAC9D180 dhcp-77.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. JdRoIL8BKa+XxzG/PtxTsvxLcHwJGTmDvucK9TD7PSuUnb6UtFdbfDL8+aeKmgGKuzwhj8Z1kOvEC1quP9daRFq6uGlrWYk44A4/c8rzctxZ6f3Wc7lQwom/07PFaMN3Qu4WAhUqnv4DpHsqBRbfe9Dd9MPHq5sSwRU0warJ0YA= ;{id = 42393} 07646863702D3737096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3738096E6C6E65746C616273026E6C000006400000000003 dhcp-77.nlnetlabs.nl. 3600 IN NSEC dhcp-78.nlnetlabs.nl. A RRSIG NSEC 07646863702D3738096E6C6E65746C616273026E6C0000010001000027D80004D59AE04E dhcp-78.nlnetlabs.nl. 10200 IN A 213.154.224.78 07646863702D3738096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0034F37D33C5DDD5C74DF7C357A6E3BEE1A86B80A64F7E7BAE46E6BD3E62F76F1366FB7A60BCDD5C071F2D487172230179DE2C6601D6F6147F2EBD503CBA5E24E066DE62CACB7C4B53C7E9562F81F7C7B72973FAB2EE565E0B6430672729E95D105BBF67A6FC49EB08A15AC909E93B730173E89F78C159B40094C18A79ECDAB58C dhcp-78.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NPN9M8Xd1cdN98NXpuO+4ahrgKZPfnuuRua9PmL3bxNm+3pgvN1cBx8tSHFyIwF53ixmAdb2FH8uvVA8ul4k4GbeYsrLfEtTx+lWL4H3x7cpc/qy7lZeC2QwZycp6V0QW79npvxJ6wihWskJ6TtzAXPon3jBWbQAlMGKeezatYw= ;{id = 42393} 07646863702D3738096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C386B8F08CADFE96C428CB9697264DF07D7FBA1E39B560288B8CF1328BB3D9C8BFD5345759C08B94F026497A7E86841F41A85782B4D009132ECC9EC01E66E65B7821EA5D89CF972C4C48B6E9EC2171AE004C3B6F00D1E51AD5404C48D645B8B35903BF47CAD17CFFFA02F8B4F6BCBB92D35C121AD21D650338A99D9429D05FC6 dhcp-78.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. w4a48Iyt/pbEKMuWlyZN8H1/uh45tWAoi4zxMouz2ci/1TRXWcCLlPAmSXp+hoQfQahXgrTQCRMuzJ7AHmbmW3gh6l2Jz5csTEi26ewhca4ATDtvANHlGtVATEjWRbizWQO/R8rRfP/6Avi09ry7ktNcEhrSHWUDOKmdlCnQX8Y= ;{id = 42393} 07646863702D3738096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3739096E6C6E65746C616273026E6C000006400000000003 dhcp-78.nlnetlabs.nl. 3600 IN NSEC dhcp-79.nlnetlabs.nl. A RRSIG NSEC 07646863702D3739096E6C6E65746C616273026E6C0000010001000027D80004D59AE04F dhcp-79.nlnetlabs.nl. 10200 IN A 213.154.224.79 07646863702D3739096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001B32F3D6334020ED8089743ABE592776F32C3CDE78E5301C4BC2CE68D3F3EB97EDAF35DC52E3AA3340556D5A0C7AD7E52354CC325A8E4CAC3D514B1AAFA0E1AEA4B5B0BD37EA955776F58A9637800B0439A072AD283ADE1DE746B95BC12AFEFEBC80D0453E151A61AE5FF3BBE2170D33AF3C50E8B22A05A8F538133DFD46E568 dhcp-79.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GzLz1jNAIO2AiXQ6vlkndvMsPN545TAcS8LOaNPz65ftrzXcUuOqM0BVbVoMetflI1TMMlqOTKw9UUsar6DhrqS1sL036pVXdvWKljeACwQ5oHKtKDreHedGuVvBKv7+vIDQRT4VGmGuX/O74hcNM688UOiyKgWo9TgTPf1G5Wg= ;{id = 42393} 07646863702D3739096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002159023D46053D92CB198196821970BA9750D788891DC419DA6F8DCB889ADC1CB06807397F7706CCDA5E745069D48F2AECB31C9B63F6E5B8AE33572517BD3DC584D644B9B7B087F035A5C055AA1B37B2289FE918604DB6D6A23432FF8EDD152980DE611D73C4ADBEBF4CE09802BBD9E749922487F5940E3C71F1C5C3D1C97621 dhcp-79.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IVkCPUYFPZLLGYGWghlwupdQ14iJHcQZ2m+Ny4ia3BywaAc5f3cGzNpedFBp1I8q7LMcm2P25biuM1clF709xYTWRLm3sIfwNaXAVaobN7Ion+kYYE221qI0Mv+O3RUpgN5hHXPErb6/TOCYArvZ50mSJIf1lA48cfHFw9HJdiE= ;{id = 42393} 07646863702D3739096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3830096E6C6E65746C616273026E6C000006400000000003 dhcp-79.nlnetlabs.nl. 3600 IN NSEC dhcp-80.nlnetlabs.nl. A RRSIG NSEC 07646863702D3830096E6C6E65746C616273026E6C0000010001000027D80004D59AE050 dhcp-80.nlnetlabs.nl. 10200 IN A 213.154.224.80 07646863702D3830096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00642451415617CA95B8D30F45FA17EC01CEAB17B13BC4C0D4F121125D4B3A75081D98FB8E8D9ACA7EFBD758223D431A5E8D02F2E6C1237F003AFC776693C1E3BFDA8216A1238DB9DF0F75BC3082AAF253EFB4480E57120EFF67A634960CCAEE1D3C31D05DC21E52C24F8CFEDE3A5C722D9D1EC29569F8B40D0F33DE2FB43AC996 dhcp-80.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZCRRQVYXypW40w9F+hfsAc6rF7E7xMDU8SESXUs6dQgdmPuOjZrKfvvXWCI9QxpejQLy5sEjfwA6/Hdmk8Hjv9qCFqEjjbnfD3W8MIKq8lPvtEgOVxIO/2emNJYMyu4dPDHQXcIeUsJPjP7eOlxyLZ0ewpVp+LQNDzPeL7Q6yZY= ;{id = 42393} 07646863702D3830096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000126984F8E151739B3E3FB0BE4ABC4E23AC90EC1E3745A198E749810118DA8D0E3BF6EA019235D8B4C7F6B177E090809A7BF156CA946669BB4FE14489348526B3F8E6EEBEB697F014442874E255C10087834C061EC673EE399BA12D9FD72CA0B618A35D79265F5ACA0E47AE8B52C863EA58237B04FB1CCC37D7EDB45EF670031 dhcp-80.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ASaYT44VFzmz4/sL5KvE4jrJDsHjdFoZjnSYEBGNqNDjv26gGSNdi0x/axd+CQgJp78VbKlGZpu0/hRIk0hSaz+ObuvraX8BREKHTiVcEAh4NMBh7Gc+45m6Etn9csoLYYo115Jl9ayg5HrotSyGPqWCN7BPsczDfX7bRe9nADE= ;{id = 42393} 07646863702D3830096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3831096E6C6E65746C616273026E6C000006400000000003 dhcp-80.nlnetlabs.nl. 3600 IN NSEC dhcp-81.nlnetlabs.nl. A RRSIG NSEC 07646863702D3831096E6C6E65746C616273026E6C0000010001000027D80004D59AE051 dhcp-81.nlnetlabs.nl. 10200 IN A 213.154.224.81 07646863702D3831096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0033CC3B51411EC70FA91E9D5CB4B6D91016B6367558C28D65307D9D282994166671006E57CEE8C9A8567DB3F8BAFE21E4C4D45F260E0650BAF01C03C81E77E74F142FEFE6E79975D4468E302F30E1E991E5E4E1199D60ABF97716A9FAC7FBCF90A4E6E0FFCCC621E526D95B904A12B3244FD91ED396E28B9CF7149B916A7D7D71 dhcp-81.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. M8w7UUEexw+pHp1ctLbZEBa2NnVYwo1lMH2dKCmUFmZxAG5XzujJqFZ9s/i6/iHkxNRfJg4GULrwHAPIHnfnTxQv7+bnmXXURo4wLzDh6ZHl5OEZnWCr+XcWqfrH+8+QpObg/8zGIeUm2VuQShKzJE/ZHtOW4ouc9xSbkWp9fXE= ;{id = 42393} 07646863702D3831096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0020241AED93BF063B29C03181B5FBAB5150B36E6363F67530E4AFAD15C9504DF3C09A335DDB978291658834363855C93FA2CEEE56A8FAF3689C4E558E1E1612C5BB0758CABB7B4B8FF4718F57EDA0E0BA40E88471B9BEA37DFF04295A09A4DBEF6A13C363F08EFCC5539807994A52CCEBF9472ABC2461E6BBA3B92375FB7EF6F5 dhcp-81.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ICQa7ZO/BjspwDGBtfurUVCzbmNj9nUw5K+tFclQTfPAmjNd25eCkWWINDY4Vck/os7uVqj682icTlWOHhYSxbsHWMq7e0uP9HGPV+2g4LpA6IRxub6jff8EKVoJpNvvahPDY/CO/MVTmAeZSlLM6/lHKrwkYea7o7kjdft+9vU= ;{id = 42393} 07646863702D3831096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3832096E6C6E65746C616273026E6C000006400000000003 dhcp-81.nlnetlabs.nl. 3600 IN NSEC dhcp-82.nlnetlabs.nl. A RRSIG NSEC 07646863702D3832096E6C6E65746C616273026E6C0000010001000027D80004D59AE052 dhcp-82.nlnetlabs.nl. 10200 IN A 213.154.224.82 07646863702D3832096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00BD78F331607F9B971723AB90073F9E94B1426AB7ACF209F4348540DC4F7C6571E01A25E82DD45B8F567C8C8C206B2A1260549B1AAD2570F0267CAB755FC5326315C61A1D7F60C23B43FF555AC3B3CB326A2F4B753E94536FA57D17E867F7731BF1126F76B2E27E5969E6197D58118C5F25A69507F6682A441D2ABE145EFEB841 dhcp-82.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. vXjzMWB/m5cXI6uQBz+elLFCares8gn0NIVA3E98ZXHgGiXoLdRbj1Z8jIwgayoSYFSbGq0lcPAmfKt1X8UyYxXGGh1/YMI7Q/9VWsOzyzJqL0t1PpRTb6V9F+hn93Mb8RJvdrLifllp5hl9WBGMXyWmlQf2aCpEHSq+FF7+uEE= ;{id = 42393} 07646863702D3832096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0078A7918810FF074A8CD4BA236C1A74F422C67ADE6DD1E60E6D5B6858B19A1408B0B120031D6037808A708FFF141A6075A082BA50C65BE731B4F93A97EE255D62AF046B76A3771F098AEC4CE8516570319E053976709CB356B594F87D2BC2B81067A84C8689BA90163011CFA19CE921E6AC34984AAEE6DE12E8B2E23A51237730 dhcp-82.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. eKeRiBD/B0qM1LojbBp09CLGet5t0eYObVtoWLGaFAiwsSADHWA3gIpwj/8UGmB1oIK6UMZb5zG0+TqX7iVdYq8Ea3ajdx8JiuxM6FFlcDGeBTl2cJyzVrWU+H0rwrgQZ6hMhom6kBYwEc+hnOkh5qw0mEqu5t4S6LLiOlEjdzA= ;{id = 42393} 07646863702D3832096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3833096E6C6E65746C616273026E6C000006400000000003 dhcp-82.nlnetlabs.nl. 3600 IN NSEC dhcp-83.nlnetlabs.nl. A RRSIG NSEC 07646863702D3833096E6C6E65746C616273026E6C0000010001000027D80004D59AE053 dhcp-83.nlnetlabs.nl. 10200 IN A 213.154.224.83 07646863702D3833096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00ABE0B335BC26B616BD1D38352200331F56868A10F6332C833A1C8103339D78B79BD75B63FDB7FBCBA0760DE9536A6051B32EBB01328C4136CFFE069ED9433BF072C8FF28D13C344A45F968D3031EFC6B520C2076D7A597BF58EAFD772850418B40F80657E0AA50D22D5F60F6A9C4DE1D335ADD6175D27C4157FBF15392AAD83D dhcp-83.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. q+CzNbwmtha9HTg1IgAzH1aGihD2MyyDOhyBAzOdeLeb11tj/bf7y6B2DelTamBRsy67ATKMQTbP/gae2UM78HLI/yjRPDRKRflo0wMe/GtSDCB216WXv1jq/XcoUEGLQPgGV+CqUNItX2D2qcTeHTNa3WF10nxBV/vxU5Kq2D0= ;{id = 42393} 07646863702D3833096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007A517F67A82D6BC169D6363D59B780B1E39A15158DF11B3338BB3E14D244F2FEE71BB80F1607F4E7BB4A3C4E91AA24123B5057839F665AF94D5410C9B012D59D56809E10F720D8225D253189AABA11DBB8724E8154CE657FA791F4D94DE15B55D7ABEA06D33C4F0B8A86EB99BE3AD1496D9C2880A837B552362C1AEA2019DE65 dhcp-83.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. elF/Z6gta8Fp1jY9WbeAseOaFRWN8RszOLs+FNJE8v7nG7gPFgf057tKPE6RqiQSO1BXg59mWvlNVBDJsBLVnVaAnhD3INgiXSUxiaq6Edu4ck6BVM5lf6eR9NlN4VtV16vqBtM8TwuKhuuZvjrRSW2cKICoN7VSNiwa6iAZ3mU= ;{id = 42393} 07646863702D3833096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3834096E6C6E65746C616273026E6C000006400000000003 dhcp-83.nlnetlabs.nl. 3600 IN NSEC dhcp-84.nlnetlabs.nl. A RRSIG NSEC 07646863702D3834096E6C6E65746C616273026E6C0000010001000027D80004D59AE054 dhcp-84.nlnetlabs.nl. 10200 IN A 213.154.224.84 07646863702D3834096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006467620687C84558B22F8C9CC7E04C2AEC0FEAD64624C163BC2E9D66126AF0CFBEA10D024B2898E4B12971B5CE6F92BE87520D637CCD4FA0AC92B1A9985B387F27880693DFD7073F9360DE65C8AC9C0F5D0922D658BBE3806D1311E8B8CBDC5F9ED8E8D589119D7B3879C0A7F3498028795935B4C382AF95F36217A8B1DBB481 dhcp-84.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZGdiBofIRViyL4ycx+BMKuwP6tZGJMFjvC6dZhJq8M++oQ0CSyiY5LEpcbXOb5K+h1INY3zNT6CskrGpmFs4fyeIBpPf1wc/k2DeZcisnA9dCSLWWLvjgG0TEei4y9xfntjo1YkRnXs4ecCn80mAKHlZNbTDgq+V82IXqLHbtIE= ;{id = 42393} 07646863702D3834096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000A5E3CCFB20ADC53D48D9AE65A1BFC0178093F0F6784D3CCE6E215C0A9E6CCA35C5DE1A90331CD14F0DF1B719913A02CEDAA8E869CE57E78F2F26EB43058FC4266311C7A6331C5854D37B342CE6D61251603315383B18FB6A2F65EF413673C2B7D451A458F337C3818BC60D0D784B1DC243CDCD905C851B96885F6A080034E52 dhcp-84.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Cl48z7IK3FPUjZrmWhv8AXgJPw9nhNPM5uIVwKnmzKNcXeGpAzHNFPDfG3GZE6As7aqOhpzlfnjy8m60MFj8QmYxHHpjMcWFTTezQs5tYSUWAzFTg7GPtqL2XvQTZzwrfUUaRY8zfDgYvGDQ14Sx3CQ83NkFyFG5aIX2oIADTlI= ;{id = 42393} 07646863702D3834096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3835096E6C6E65746C616273026E6C000006400000000003 dhcp-84.nlnetlabs.nl. 3600 IN NSEC dhcp-85.nlnetlabs.nl. A RRSIG NSEC 07646863702D3835096E6C6E65746C616273026E6C0000010001000027D80004D59AE055 dhcp-85.nlnetlabs.nl. 10200 IN A 213.154.224.85 07646863702D3835096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00486F70031E6E06CCC9F34DECD4688F5A1075BA774F079989977A2A6A1B00FC66A1AF1B3D56108606473F112275E1921550CA47C924C8149D2DF269C73C25E587EF778355105C2DB1AFD83D444EFCB5483065CD2C03B3E86B6D7330FEBAA51B3F389F6EDE6E8A3BC76C97FF5B8F1DDC74D762E6A74F966DEBC85F71D4100D2485 dhcp-85.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. SG9wAx5uBszJ803s1GiPWhB1undPB5mJl3oqahsA/Gahrxs9VhCGBkc/ESJ14ZIVUMpHySTIFJ0t8mnHPCXlh+93g1UQXC2xr9g9RE78tUgwZc0sA7Poa21zMP66pRs/OJ9u3m6KO8dsl/9bjx3cdNdi5qdPlm3ryF9x1BANJIU= ;{id = 42393} 07646863702D3835096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0011B7ED38D7850E4B8915764EB932FD8FD38C2CA16C63928D473D9514DD5747CC590C353EC5A609FC29185DEBC05A9CFD599E278B75B22648C2BFCC4501D714BB2EB8FB207C1CB5DF8933A2BEB60CA4E9B395DDE9CE96839303F02BEBE2562E3D46585A530C4EA0CDE8993484421FAEC4491A04278954AD8CB1AE8C6172EA40C6 dhcp-85.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. EbftONeFDkuJFXZOuTL9j9OMLKFsY5KNRz2VFN1XR8xZDDU+xaYJ/CkYXevAWpz9WZ4ni3WyJkjCv8xFAdcUuy64+yB8HLXfiTOivrYMpOmzld3pzpaDkwPwK+viVi49RlhaUwxOoM3omTSEQh+uxEkaBCeJVK2Msa6MYXLqQMY= ;{id = 42393} 07646863702D3835096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3836096E6C6E65746C616273026E6C000006400000000003 dhcp-85.nlnetlabs.nl. 3600 IN NSEC dhcp-86.nlnetlabs.nl. A RRSIG NSEC 07646863702D3836096E6C6E65746C616273026E6C0000010001000027D80004D59AE056 dhcp-86.nlnetlabs.nl. 10200 IN A 213.154.224.86 07646863702D3836096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0004B7D96436C5C0BB1F50315A7B39415C058E31E872D5151B87872950FBB2535A98BC3CC54BD9A0E673FAFF6D07138806DAC5869772E0C44E339EE5548119EAF7EE5726E00273A9394270ABB242BB11408F699CF2B29DE8CC67220F0002465E3A7E969CFBD621D74A01AAD88EE2795C893AD6D0568AB02EDDB9B04FEB1B80041D dhcp-86.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. BLfZZDbFwLsfUDFaezlBXAWOMehy1RUbh4cpUPuyU1qYvDzFS9mg5nP6/20HE4gG2sWGl3LgxE4znuVUgRnq9+5XJuACc6k5QnCrskK7EUCPaZzysp3ozGciDwACRl46fpac+9Yh10oBqtiO4nlciTrW0FaKsC7dubBP6xuABB0= ;{id = 42393} 07646863702D3836096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002171725E2BE1C93ED51C7B64D409C3041BFDB37B7C3817481BBA6F065012B0BDE1A924319171DDAAA4DCDC0861C619B314D6B8088AC7D6EB17FC51C1D76F6CE4B5A4E34C5863D448836C91D56531EFD892F926DC496ADE3B4504517AE1BFAC46ABC65619507BE5517004056C32E25B1250E77ED0E4FBF12C27830E198D44040E dhcp-86.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IXFyXivhyT7VHHtk1AnDBBv9s3t8OBdIG7pvBlASsL3hqSQxkXHdqqTc3AhhxhmzFNa4CIrH1usX/FHB129s5LWk40xYY9RIg2yR1WUx79iS+SbcSWreO0UEUXrhv6xGq8ZWGVB75VFwBAVsMuJbElDnftDk+/EsJ4MOGY1EBA4= ;{id = 42393} 07646863702D3836096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3837096E6C6E65746C616273026E6C000006400000000003 dhcp-86.nlnetlabs.nl. 3600 IN NSEC dhcp-87.nlnetlabs.nl. A RRSIG NSEC 07646863702D3837096E6C6E65746C616273026E6C0000010001000027D80004D59AE057 dhcp-87.nlnetlabs.nl. 10200 IN A 213.154.224.87 07646863702D3837096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0080E79373EEA816C45CD06D8072F38A994D38620C82FD60ACD20508F7F570BEBB057F7543578069C65F5A643D63587F8A75B6B7A793914BDD1A65E8B7D64789AF39D874F65D715869413AA131F88E0746CE0ED6D867B757D215EDAB9CA883EEFFCA0963436703A3BE2A1B2BD5331D5271AD316D6BC66374479F15FE76C365C6DD dhcp-87.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. gOeTc+6oFsRc0G2AcvOKmU04YgyC/WCs0gUI9/VwvrsFf3VDV4Bpxl9aZD1jWH+Kdba3p5ORS90aZei31keJrznYdPZdcVhpQTqhMfiOB0bODtbYZ7dX0hXtq5yog+7/ygljQ2cDo74qGyvVMx1Sca0xbWvGY3RHnxX+dsNlxt0= ;{id = 42393} 07646863702D3837096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C8E410E960634D5C0D10611FC1BEDD64AAF5F5FB46BF0AF7BA8489248831BD949F932896DCA91FA856F00DBE3D63DD24D8EA2BED85002944A60CE310E0BA675F432FF6D3C106D510B1CC05DE46F263A1F5498AA48E869FFFD4660E5C32C9DD9839438DAC619B3A871A18DC6FEFE3EAAE4B3A9736531A7E0A9E7029C429FA6942 dhcp-87.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. yOQQ6WBjTVwNEGEfwb7dZKr19ftGvwr3uoSJJIgxvZSfkyiW3KkfqFbwDb49Y90k2Oor7YUAKUSmDOMQ4LpnX0Mv9tPBBtUQscwF3kbyY6H1SYqkjoaf/9RmDlwyyd2YOUONrGGbOocaGNxv7+Pqrks6lzZTGn4KnnApxCn6aUI= ;{id = 42393} 07646863702D3837096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3838096E6C6E65746C616273026E6C000006400000000003 dhcp-87.nlnetlabs.nl. 3600 IN NSEC dhcp-88.nlnetlabs.nl. A RRSIG NSEC 07646863702D3838096E6C6E65746C616273026E6C0000010001000027D80004D59AE058 dhcp-88.nlnetlabs.nl. 10200 IN A 213.154.224.88 07646863702D3838096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009481E7B8A7F510422C91DCE547892E618C24033B2CC9E019B6C17EB335FBCC8F3ED261449FCA719479AA3675B3F11384E949A70D0A0D2B935CDD34CD27AA6F15BA049DD753BEB820E87074A6E24C1F052DE2ED4DEC24CC79419080DE69DD93D5C58EA967532C298D61BF0EA87D3B04B4A20EFBCD6DF76828CEA3F8BD426F9201 dhcp-88.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lIHnuKf1EEIskdzlR4kuYYwkAzssyeAZtsF+szX7zI8+0mFEn8pxlHmqNnWz8ROE6UmnDQoNK5Nc3TTNJ6pvFboEnddTvrgg6HB0puJMHwUt4u1N7CTMeUGQgN5p3ZPVxY6pZ1MsKY1hvw6ofTsEtKIO+81t92gozqP4vUJvkgE= ;{id = 42393} 07646863702D3838096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A6D056C7A0B174646F49C8592D5D83D0817B683CB47960A8E40FCA50613F9B61511DA387411966474C7B01F2EB3A374348AFF72BAA94430DA78458BEA76808795C4FF8D93FA45ED11CB220D8FC53D384141B7336A074A50D262A83C7F30D8E9333BDE004797405A23E6566B5FE6EE1E372D478FB641A35794B55AAAC9AFFA54C dhcp-88.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ptBWx6CxdGRvSchZLV2D0IF7aDy0eWCo5A/KUGE/m2FRHaOHQRlmR0x7AfLrOjdDSK/3K6qUQw2nhFi+p2gIeVxP+Nk/pF7RHLIg2PxT04QUG3M2oHSlDSYqg8fzDY6TM73gBHl0BaI+ZWa1/m7h43LUePtkGjV5S1WqrJr/pUw= ;{id = 42393} 07646863702D3838096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3839096E6C6E65746C616273026E6C000006400000000003 dhcp-88.nlnetlabs.nl. 3600 IN NSEC dhcp-89.nlnetlabs.nl. A RRSIG NSEC 07646863702D3839096E6C6E65746C616273026E6C0000010001000027D80004D59AE059 dhcp-89.nlnetlabs.nl. 10200 IN A 213.154.224.89 07646863702D3839096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00028B302DAF7C62DBE34130FC630535260A0CCFB79C124A77FEAFC96215199911CFB1B3AE9FE41B1CAF18BA13AADFAA14F4C855DBD2A1C8FECDBBD8842CA81D18A3F3F8F727185AB4F4021B0CAEBA4EF221F039A28837D565C9A3A35D459A2FEA5FEB97063A2AA67547B2B3503D7CC2224363DEBF607AF4CB45F223362BD47050 dhcp-89.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. AoswLa98YtvjQTD8YwU1JgoMz7ecEkp3/q/JYhUZmRHPsbOun+QbHK8YuhOq36oU9MhV29KhyP7Nu9iELKgdGKPz+PcnGFq09AIbDK66TvIh8DmiiDfVZcmjo11Fmi/qX+uXBjoqpnVHsrNQPXzCIkNj3r9gevTLRfIjNivUcFA= ;{id = 42393} 07646863702D3839096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0049BE3343D72B99336F912665D549DF56254B8E64E01BDD9F0754AA2209BDCC62E141D40028B9CE57A3917FE4EBF7F56FE813A0421767D6844299A96A4D99120A23FCCC15ECF0F4086B92CBCEACA70A664BDD2A833A3DC9126E804C9171D4F2630FAF949BFD69954B19074EFBFA3DE0A86172B0CCD3B650E99055D79259B8421B dhcp-89.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Sb4zQ9crmTNvkSZl1UnfViVLjmTgG92fB1SqIgm9zGLhQdQAKLnOV6ORf+Tr9/Vv6BOgQhdn1oRCmalqTZkSCiP8zBXs8PQIa5LLzqynCmZL3SqDOj3JEm6ATJFx1PJjD6+Um/1plUsZB077+j3gqGFysMzTtlDpkFXXklm4Qhs= ;{id = 42393} 07646863702D3839096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3930096E6C6E65746C616273026E6C000006400000000003 dhcp-89.nlnetlabs.nl. 3600 IN NSEC dhcp-90.nlnetlabs.nl. A RRSIG NSEC 07646863702D3930096E6C6E65746C616273026E6C0000010001000027D80004D59AE05A dhcp-90.nlnetlabs.nl. 10200 IN A 213.154.224.90 07646863702D3930096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009B8C0A2864F889AEEB7DFB252F1178F39A6EFEC1EBB4C4D10EC49E24F3A62296F9B9D763755C07EF07319ACB4884887AA4C5FB515D016A8204E543243FFA9F7DA1AC5BB8680BB5CACE807CD5116FB46AE4547FDE1F789BBF2CA79E5A44DDEF3FA4D6C8733363F17383C7773F3F9712E1CAE84A75151D110CBE5075B80141C8FF dhcp-90.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. m4wKKGT4ia7rffslLxF485pu/sHrtMTRDsSeJPOmIpb5uddjdVwH7wcxmstIhIh6pMX7UV0BaoIE5UMkP/qffaGsW7hoC7XKzoB81RFvtGrkVH/eH3ibvyynnlpE3e8/pNbIczNj8XODx3c/P5cS4croSnUVHREMvlB1uAFByP8= ;{id = 42393} 07646863702D3930096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00304A806BCD3969E21EF60F11060E73C26AA46FE31DC48E857510BDDED9B8ED338FAF0EF0478EBA1B1BACCA591E2B8F2AB5531D5E553EEF6F1B7F682D6C589B0607BFA101A21D5BFFED907ADB747A1384D5D605291865AADF92457FF36413BF1349B821304BD5E32F95AC1EBA28A403D228B51D9A2327BDACA20D89133FEB5E2D dhcp-90.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. MEqAa805aeIe9g8RBg5zwmqkb+MdxI6FdRC93tm47TOPrw7wR466GxusylkeK48qtVMdXlU+728bf2gtbFibBge/oQGiHVv/7ZB623R6E4TV1gUpGGWq35JFf/NkE78TSbghMEvV4y+VrB66KKQD0ii1HZojJ72sog2JEz/rXi0= ;{id = 42393} 07646863702D3930096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3931096E6C6E65746C616273026E6C000006400000000003 dhcp-90.nlnetlabs.nl. 3600 IN NSEC dhcp-91.nlnetlabs.nl. A RRSIG NSEC 07646863702D3931096E6C6E65746C616273026E6C0000010001000027D80004D59AE05B dhcp-91.nlnetlabs.nl. 10200 IN A 213.154.224.91 07646863702D3931096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0011E41ADCF9E215EECD6CDE5ACC49354883892E26F21F53102119336100EAEAEEA1AA75F75A9E84E709F7C69A55F51F4FCEAD786EA247A1FE6AA0464B82A40C51872E7BDA3A2905A6774400405740D390991EFC5BF0C1AA90A7D180063BAB214F58A8DF2CC0156EB7AF51910D88B411601DF2B5F5E3790E6CDD564563CFA94E24 dhcp-91.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. EeQa3PniFe7NbN5azEk1SIOJLibyH1MQIRkzYQDq6u6hqnX3Wp6E5wn3xppV9R9Pzq14bqJHof5qoEZLgqQMUYcue9o6KQWmd0QAQFdA05CZHvxb8MGqkKfRgAY7qyFPWKjfLMAVbrevUZENiLQRYB3ytfXjeQ5s3VZFY8+pTiQ= ;{id = 42393} 07646863702D3931096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00604DE1C8D475A32437683937810FC6DAB2F6EF5D6E3B2DF531C1D0952AFCAA382D26A4ACF773F98076D45F112EC13ADCBFB4EC018372703985D31B3523195652A604AFD24D9E7AC857B2C7ED099E7179810295A577480B8EF3F2E08C1CE82709C27807152E509D35280EE3CBD33EA3293DC2DBBD480C584D02D9A2F869C0C32F dhcp-91.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. YE3hyNR1oyQ3aDk3gQ/G2rL2711uOy31McHQlSr8qjgtJqSs93P5gHbUXxEuwTrcv7TsAYNycDmF0xs1IxlWUqYEr9JNnnrIV7LH7QmecXmBApWld0gLjvPy4Iwc6CcJwngHFS5QnTUoDuPL0z6jKT3C271IDFhNAtmi+GnAwy8= ;{id = 42393} 07646863702D3931096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3932096E6C6E65746C616273026E6C000006400000000003 dhcp-91.nlnetlabs.nl. 3600 IN NSEC dhcp-92.nlnetlabs.nl. A RRSIG NSEC 07646863702D3932096E6C6E65746C616273026E6C0000010001000027D80004D59AE05C dhcp-92.nlnetlabs.nl. 10200 IN A 213.154.224.92 07646863702D3932096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A1D6F5691600B9D7962F15E0CF1CA39DB11E5995FAC40366547252BB8D493DCD82E8DB5890E7020C6A1B72F78578A58644BA0B1AEBF3CE2CB2DB9479B4A774A0F81302982F7608A93CCCACBE2EB96A732C275257513E113584DB5A183F027354AB338130D0AD5C5BE1AEE8DE0445DE128E6A3D4EA5FA6EEDABCEFDEEA6EC0B0C dhcp-92.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. odb1aRYAudeWLxXgzxyjnbEeWZX6xANmVHJSu41JPc2C6NtYkOcCDGobcveFeKWGRLoLGuvzziyy25R5tKd0oPgTApgvdgipPMysvi65anMsJ1JXUT4RNYTbWhg/AnNUqzOBMNCtXFvhrujeBEXeEo5qPU6l+m7tq8797qbsCww= ;{id = 42393} 07646863702D3932096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0027CFD5B4FC1F6114F5BB8D214BEB5E01F3800003E52E1D548728B1F7B4456716D2B6BBFE44AA5AF718B4C809CD9F43BC52F7BB9633176D3BE1A3483FF3E332FFECFA75497D3A8365740413FA64A40B5F7C19A2E0E5E0E73D0DB577EE38FE5DD11594A94F61971BC1150D77882AB7A289FCD5DF37D896937C6413017506EDED66 dhcp-92.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. J8/VtPwfYRT1u40hS+teAfOAAAPlLh1Uhyix97RFZxbStrv+RKpa9xi0yAnNn0O8Uve7ljMXbTvho0g/8+My/+z6dUl9OoNldAQT+mSkC198GaLg5eDnPQ21d+44/l3RFZSpT2GXG8EVDXeIKreiifzV3zfYlpN8ZBMBdQbt7WY= ;{id = 42393} 07646863702D3932096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3933096E6C6E65746C616273026E6C000006400000000003 dhcp-92.nlnetlabs.nl. 3600 IN NSEC dhcp-93.nlnetlabs.nl. A RRSIG NSEC 07646863702D3933096E6C6E65746C616273026E6C0000010001000027D80004D59AE05D dhcp-93.nlnetlabs.nl. 10200 IN A 213.154.224.93 07646863702D3933096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001A8910EA15DFD40BCBB13C5AED924D8FB7705F989071D0428505BF67B78AC42EAAF36BF1570FDC21BD418650B3C17D091CF77910E901E5A3F46EA0D04A5621E69DD5D4660C692D326F0AF6603FD89B8937BE6B770CDE6977B9944AF230554BBAD0730C377B35EEF50FEC6C7E6C81114664D11EEF2FD9437F83E40A0272A48E79 dhcp-93.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GokQ6hXf1AvLsTxa7ZJNj7dwX5iQcdBChQW/Z7eKxC6q82vxVw/cIb1BhlCzwX0JHPd5EOkB5aP0bqDQSlYh5p3V1GYMaS0ybwr2YD/Ym4k3vmt3DN5pd7mUSvIwVUu60HMMN3s17vUP7Gx+bIERRmTRHu8v2UN/g+QKAnKkjnk= ;{id = 42393} 07646863702D3933096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0065B434E33EEFAE639509386F9E02B40B58E2B715649E109287CB1FF60F9C1B5B6534EDA19AB8AF3E2ADF04BCA8E2AC5193666BD50ACAFFD32060D80CE5EC8A30C2C5C4F15BBD76E81651F5752D946B09926F0EC242845D7C5FEDF13449204E05C58458967EE71453EC211B84BEEEF73423D13E0E33D97B01AE600BE20BA86B63 dhcp-93.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ZbQ04z7vrmOVCThvngK0C1jitxVknhCSh8sf9g+cG1tlNO2hmrivPirfBLyo4qxRk2Zr1QrK/9MgYNgM5eyKMMLFxPFbvXboFlH1dS2UawmSbw7CQoRdfF/t8TRJIE4FxYRYln7nFFPsIRuEvu73NCPRPg4z2XsBrmAL4guoa2M= ;{id = 42393} 07646863702D3933096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3934096E6C6E65746C616273026E6C000006400000000003 dhcp-93.nlnetlabs.nl. 3600 IN NSEC dhcp-94.nlnetlabs.nl. A RRSIG NSEC 07646863702D3934096E6C6E65746C616273026E6C0000010001000027D80004D59AE05E dhcp-94.nlnetlabs.nl. 10200 IN A 213.154.224.94 07646863702D3934096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00BCE3387D6460652E7C3176167EC96A79126DBEA996A5E9517968D869443B18013270EC4741AB82F9502C4236071FDE32591CC5BF062CDE61CDEB8BA0F596C9F77D9AB8F8C9C443379B6DD24FDC7C8C411AA02DBBCE7CBC87EB288786B078528F3415027019194F897985E973DCF1C04DAA4CE5ABC56816BEA4BAA41F489D48F2 dhcp-94.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. vOM4fWRgZS58MXYWfslqeRJtvqmWpelReWjYaUQ7GAEycOxHQauC+VAsQjYHH94yWRzFvwYs3mHN64ug9ZbJ932auPjJxEM3m23ST9x8jEEaoC27zny8h+soh4aweFKPNBUCcBkZT4l5helz3PHATapM5avFaBa+pLqkH0idSPI= ;{id = 42393} 07646863702D3934096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0062419C9B50F7E56594F69AE20781E52317194E0FEEE163398D9C06652A1BF0F45D1B4765EC6856AFB9EEFE5D8514370DB0B4152CDEB36C097848EF06CD32A55998CC4BC9E70EAABBDB1AB744DB7D9E722E027BA513406F94C3F47C8BA372854BDDCF762280C2B1529F80F47451A285AC8F56BF3E15CA51FA2119070062ECCCF6 dhcp-94.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. YkGcm1D35WWU9priB4HlIxcZTg/u4WM5jZwGZSob8PRdG0dl7GhWr7nu/l2FFDcNsLQVLN6zbAl4SO8GzTKlWZjMS8nnDqq72xq3RNt9nnIuAnulE0BvlMP0fIujcoVL3c92IoDCsVKfgPR0UaKFrI9Wvz4VylH6IRkHAGLszPY= ;{id = 42393} 07646863702D3934096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3935096E6C6E65746C616273026E6C000006400000000003 dhcp-94.nlnetlabs.nl. 3600 IN NSEC dhcp-95.nlnetlabs.nl. A RRSIG NSEC 07646863702D3935096E6C6E65746C616273026E6C0000010001000027D80004D59AE05F dhcp-95.nlnetlabs.nl. 10200 IN A 213.154.224.95 07646863702D3935096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007C00836D328878A9051770B422B8D48F27301E5170FDC014126298C0C9B644CBE8A171B2EE35FCB72FB47D594959E98ADA3814EAA812395F2E4ACE64E993647B4962E2F5A340DAAAAB24DAA8B181D6278224865BFCD02FF86FFF72351B979B7BFB50E929C05FB4CD2C961E4E7EF35C7FE464D6FF07D5BBE357972904C6E979CF dhcp-95.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fACDbTKIeKkFF3C0IrjUjycwHlFw/cAUEmKYwMm2RMvooXGy7jX8ty+0fVlJWemK2jgU6qgSOV8uSs5k6ZNke0li4vWjQNqqqyTaqLGB1ieCJIZb/NAv+G//cjUbl5t7+1DpKcBftM0slh5OfvNcf+Rk1v8H1bvjV5cpBMbpec8= ;{id = 42393} 07646863702D3935096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A4E4DDA29E8C7E8214A37D9C41F8120E3B9E3D1347804973DE56BFAB7B73E1DE5FF66A7F401251D778EB64C0D9ACC33868D4D6DA3051C502EDAE354DBAC41E6E27B05187DEA51F0C77491F7FAA1D204D5B1EA8204E68169BFE19F00AB2B8643640A302BE911E7C58CCE9024A453FDB65D48D44D86CCE9D18E9C5B4D5789AC561 dhcp-95.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. pOTdop6MfoIUo32cQfgSDjuePRNHgElz3la/q3tz4d5f9mp/QBJR13jrZMDZrMM4aNTW2jBRxQLtrjVNusQebiewUYfepR8Md0kff6odIE1bHqggTmgWm/4Z8AqyuGQ2QKMCvpEefFjM6QJKRT/bZdSNRNhszp0Y6cW01XiaxWE= ;{id = 42393} 07646863702D3935096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3936096E6C6E65746C616273026E6C000006400000000003 dhcp-95.nlnetlabs.nl. 3600 IN NSEC dhcp-96.nlnetlabs.nl. A RRSIG NSEC 07646863702D3936096E6C6E65746C616273026E6C0000010001000027D80004D59AE060 dhcp-96.nlnetlabs.nl. 10200 IN A 213.154.224.96 07646863702D3936096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00841648A0DC0AC78466776956E5036631BF570F859431E57734547061626779CDA3E1A26072CEB222FF4ABC734C7F00CC1E6F8BECBB3BEB3AD4C6284A5D68C0BFB335450F2E3200D9BBDA57F5474C67DE0569037BB641709D620786C569EFC37833757975039E3E293AC5207B5691E3F1108419AF6AAF099F8E481933514C2060 dhcp-96.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hBZIoNwKx4Rmd2lW5QNmMb9XD4WUMeV3NFRwYWJnec2j4aJgcs6yIv9KvHNMfwDMHm+L7Ls76zrUxihKXWjAv7M1RQ8uMgDZu9pX9UdMZ94FaQN7tkFwnWIHhsVp78N4M3V5dQOePik6xSB7VpHj8RCEGa9qrwmfjkgZM1FMIGA= ;{id = 42393} 07646863702D3936096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004940557CDB751AC3AD206D828AEF2D38449A4DA799637E62389CD4AE92E9954EBD1130247A8FB980CC3228E23DD6925CE5E13B7CF8F1B44512C7C1F3E3FBA660FD88C50C30C600307C5DDDE17EFCB289B5415F3602DF59FD8512059147B2C3817503D137AFAB68DBFAD9EFC9752890BB06681263A9DE9D2FCE6E9C6E972435AE dhcp-96.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SUBVfNt1GsOtIG2Ciu8tOESaTaeZY35iOJzUrpLplU69ETAkeo+5gMwyKOI91pJc5eE7fPjxtEUSx8Hz4/umYP2IxQwwxgAwfF3d4X78som1QV82At9Z/YUSBZFHssOBdQPRN6+raNv62e/JdSiQuwZoEmOp3p0vzm6cbpckNa4= ;{id = 42393} 07646863702D3936096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3937096E6C6E65746C616273026E6C000006400000000003 dhcp-96.nlnetlabs.nl. 3600 IN NSEC dhcp-97.nlnetlabs.nl. A RRSIG NSEC 07646863702D3937096E6C6E65746C616273026E6C0000010001000027D80004D59AE061 dhcp-97.nlnetlabs.nl. 10200 IN A 213.154.224.97 07646863702D3937096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004542676240CE6D2BBDBF4FAC82E706C31B6ABD08677E84B5ADB940B0526684356C58B9AEAE481BE1B840DD9DCFD430B15F341C35DBB2C20A718DED58CE82DF7A5E047DCAB8BC2912248D74198308033F166A68910B70574AE5766865C8DF2B04C90E79D94411C7A54F7A02280ED844C3FAE7744E5C9A928441B384AB9D440022 dhcp-97.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RUJnYkDObSu9v0+sgucGwxtqvQhnfoS1rblAsFJmhDVsWLmurkgb4bhA3Z3P1DCxXzQcNduywgpxje1YzoLfel4Efcq4vCkSJI10GYMIAz8WamiRC3BXSuV2aGXI3ysEyQ552UQRx6VPegIoDthEw/rndE5cmpKEQbOEq51EACI= ;{id = 42393} 07646863702D3937096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001CD6E3DF6F4FD100F22A4863F69ABEA74067DDC688E7F076AF7D55B80B1AF8183D7F7728A23F43CB01A518F7F432A9A3346C4BB3E0FED4BF679460F567AE34155C50A263A1507B680A82136B93070B44DA7FABF4EC4A3350E646DCB47FC7197A8E247076470219E83979D30CE0E35A7FA646F6584B84F63CC752A132C69FE0AA dhcp-97.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HNbj329P0QDyKkhj9pq+p0Bn3caI5/B2r31VuAsa+Bg9f3cooj9DywGlGPf0MqmjNGxLs+D+1L9nlGD1Z640FVxQomOhUHtoCoITa5MHC0Taf6v07EozUOZG3LR/xxl6jiRwdkcCGeg5edMM4ONaf6ZG9lhLhPY8x1KhMsaf4Ko= ;{id = 42393} 07646863702D3937096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3938096E6C6E65746C616273026E6C000006400000000003 dhcp-97.nlnetlabs.nl. 3600 IN NSEC dhcp-98.nlnetlabs.nl. A RRSIG NSEC 07646863702D3938096E6C6E65746C616273026E6C0000010001000027D80004D59AE062 dhcp-98.nlnetlabs.nl. 10200 IN A 213.154.224.98 07646863702D3938096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006BA22A7897D967ACE0A2831E54A8A7883D886F4E50E41042D9AD8B399341C457F1D8A3101CF2D34F583BEF74EBAB8581DA22DF5EE5AF3CE0BDF0B590A3C51D96345DF6C2FC216EB19E048999B0C177DE313A9D21046B68A8E86BD15F50FABA0F2E74F5FE25E3A4DC18D7BEF22A18BE70EAD4D2325A39D9642B23AB8C0271CB1F dhcp-98.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a6IqeJfZZ6zgooMeVKiniD2Ib05Q5BBC2a2LOZNBxFfx2KMQHPLTT1g773Trq4WB2iLfXuWvPOC98LWQo8UdljRd9sL8IW6xngSJmbDBd94xOp0hBGtoqOhr0V9Q+roPLnT1/iXjpNwY177yKhi+cOrU0jJaOdlkKyOrjAJxyx8= ;{id = 42393} 07646863702D3938096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009B12E443785B56FEA9914B213DF115C175C188517FDE984CAD344A416DB394B246F02AA0FF378989DD04B6C7B142E0F286E8DF4650368A48E90A22B280F4A5DF16BE76E0ECEE4FB2DA1F5704C5BC6BAD5F7CD85DF2AF3860C54833BE9A3FAD32B364226F67FB3A78B3FDDE0CAE01DE45C67E77FB61952ADAAD62B46D04E04305 dhcp-98.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mxLkQ3hbVv6pkUshPfEVwXXBiFF/3phMrTRKQW2zlLJG8Cqg/zeJid0EtsexQuDyhujfRlA2ikjpCiKygPSl3xa+duDs7k+y2h9XBMW8a61ffNhd8q84YMVIM76aP60ys2Qib2f7Oniz/d4MrgHeRcZ+d/thlSrarWK0bQTgQwU= ;{id = 42393} 07646863702D3938096E6C6E65746C616273026E6C00002F000100000E10001E07646863702D3939096E6C6E65746C616273026E6C000006400000000003 dhcp-98.nlnetlabs.nl. 3600 IN NSEC dhcp-99.nlnetlabs.nl. A RRSIG NSEC 07646863702D3939096E6C6E65746C616273026E6C0000010001000027D80004D59AE063 dhcp-99.nlnetlabs.nl. 10200 IN A 213.154.224.99 07646863702D3939096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0059632760650FAE3AF14ED2BEB7FA7B2F7066048EDA76B712DC7781FE2D2221BD3DE1E4A74E4431244F81CDB1F7832A94A16E46EA9B4E7E5263170DD386AD0B9C63880A370E84906B79208B2A6ED0FDCA0ABC2B7A07744CDCAF0CDF7B17BDBC42AD22B94AABF62F5519460C2D14F40F21E8AA045B0E9EFA81F9B61CF038226724 dhcp-99.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WWMnYGUPrjrxTtK+t/p7L3BmBI7adrcS3HeB/i0iIb094eSnTkQxJE+BzbH3gyqUoW5G6ptOflJjFw3Thq0LnGOICjcOhJBreSCLKm7Q/coKvCt6B3RM3K8M33sXvbxCrSK5Sqv2L1UZRgwtFPQPIeiqBFsOnvqB+bYc8DgiZyQ= ;{id = 42393} 07646863702D3939096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007DF364B6634AD9ED7F5F03E92547D92918A1296C3612E0D16B4DB58B0335DACF6CEBC543DBBC6E60973E104B926875DDA688E3E2B8474FB170622750F5A9E3F589875968E90C3AC2D56DF17E719909127DFAB52A56F34F2115CF4E57A03350A9ECFD2201A3BF3CAAED3597806AD658DB27D14C0B9731E899C49732CC0B28D328 dhcp-99.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ffNktmNK2e1/XwPpJUfZKRihKWw2EuDRa021iwM12s9s68VD27xuYJc+EEuSaHXdpojj4rhHT7FwYidQ9anj9YmHWWjpDDrC1W3xfnGZCRJ9+rUqVvNPIRXPTlegM1Cp7P0iAaO/PKrtNZeAatZY2yfRTAuXMeiZxJcyzAso0yg= ;{id = 42393} 07646863702D3939096E6C6E65746C616273026E6C00002F000100000E10001C056469636874096E6C6E65746C616273026E6C000006400000000003 dhcp-99.nlnetlabs.nl. 3600 IN NSEC dicht.nlnetlabs.nl. A RRSIG NSEC 056469636874096E6C6E65746C616273026E6C0000010001000027D80004D59AE0FA dicht.nlnetlabs.nl. 10200 IN A 213.154.224.250 056469636874096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009FC6C9CB40649A6ABD185DB3A4929EFA7E95F52D41F443C4440E67FB30E6270321BCCA5E3E7EAA44B1A07C5D9E9AA0457C9BCD2E59DC7B0ECFC982B3CF1BBEF91CA6587C87E085F8DD84A1A2CB3BC014F71BF03F39E4F78C9FB35B4697B60992DAD76B8F33F7252809885697995088368BD3B390F22C21BC901423E19FA45C91 dicht.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. n8bJy0Bkmmq9GF2zpJKe+n6V9S1B9EPERA5n+zDmJwMhvMpePn6qRLGgfF2emqBFfJvNLlncew7PyYKzzxu++RymWHyH4IX43YShoss7wBT3G/A/OeT3jJ+zW0aXtgmS2tdrjzP3JSgJiFaXmVCINovTs5DyLCG8kBQj4Z+kXJE= ;{id = 42393} 056469636874096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004C094CBEC69B5776567914A879EB522337459FF98DFAC2C6941FA91B31F8934A64D2A5CDFEB7177DA123876FEF0344F796DE423707B27130FB5D89815EE85E18FB72E555F32BE51112D3E00FB5CCED9E4818B9AF3A9C8E63E97478EAA48A97128AC4962881AE0CFD78FC7ED8437ED273F7090BDB19025CFB462AD426842422C3 dicht.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. TAlMvsabV3ZWeRSoeetSIzdFn/mN+sLGlB+pGzH4k0pk0qXN/rcXfaEjh2/vA0T3lt5CNweycTD7XYmBXuheGPty5VXzK+UREtPgD7XM7Z5IGLmvOpyOY+l0eOqkipcSisSWKIGuDP14/H7YQ37Sc/cJC9sZAlz7RirUJoQkIsM= ;{id = 42393} 056469636874096E6C6E65746C616273026E6C00002F000100000E10001D06646E732D6C67096E6C6E65746C616273026E6C000006400000000003 dicht.nlnetlabs.nl. 3600 IN NSEC dns-lg.nlnetlabs.nl. A RRSIG NSEC 06646E732D6C67096E6C6E65746C616273026E6C0000050001000027D800140462657274097365637265742D7767036F726700 dns-lg.nlnetlabs.nl. 10200 IN CNAME bert.secret-wg.org. 06646E732D6C67096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0084820BF14BA6808927C929B9AC8E0E467F80A9EB1EF8D6BAC6755C50BE0D432DAE8D2901EA8A599BD3B05F6993666F8B268238925D35C0E38B55986922D5F32A5A4943F895D3F41DE4211BC32BB54221AF712A51BEC689B85621FD77D4C3A1C226C6E1706631560CFD1B08B2E8D8BCCBBD6AA4696E51FF6DC2DBE56264F94F40 dns-lg.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hIIL8UumgIknySm5rI4ORn+Aqese+Na6xnVcUL4NQy2ujSkB6opZm9OwX2mTZm+LJoI4kl01wOOLVZhpItXzKlpJQ/iV0/Qd5CEbwyu1QiGvcSpRvsaJuFYh/XfUw6HCJsbhcGYxVgz9Gwiy6Ni8y71qpGluUf9twtvlYmT5T0A= ;{id = 42393} 06646E732D6C67096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C003D4D19FF711B1B88A937417E88D4ED8D920CA148FE767043AF96A156BCE5844D679B6D3BFB618A69B59B5FEAB655324A1B3491D83E875005BB9B5AA005CEB10400C608A9CD2F8B4220E0E4F07CAD135636CB807F18D13A67FB6AF06C2B4B4DD6459A21EDAF6A221B297985C652813F1CF161629A0D18A9F4584B1247C906D487 dns-lg.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. PU0Z/3EbG4ipN0F+iNTtjZIMoUj+dnBDr5ahVrzlhE1nm207+2GKabWbX+q2VTJKGzSR2D6HUAW7m1qgBc6xBADGCKnNL4tCIODk8HytE1Y2y4B/GNE6Z/tq8GwrS03WRZoh7a9qIhspeYXGUoE/HPFhYpoNGKn0WEsSR8kG1Ic= ;{id = 42393} 06646E732D6C67096E6C6E65746C616273026E6C00002F000100000E10002E036F737804746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C000006040000000003 dns-lg.nlnetlabs.nl. 3600 IN NSEC osx.test.dnssec-trigger.nlnetlabs.nl. CNAME RRSIG NSEC 036F737804746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00001000010000000A004A08302E3132726334304063653538653133383064653264336432363566353361313032313636383536646366666534356263346564653462363233636536636530613136616466316563 osx.test.dnssec-trigger.nlnetlabs.nl. 10 IN TXT "0.12rc40" "ce58e1380de2d3d265f53a102166856dcffe45bc4ede4b623ce6ce0a16adf1ec" 036F737804746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E00010000000A00A0001008050000000A530B29F552E63FF5A599096E6C6E65746C616273026E6C00C3950B37AB845911F2A6FDFCC3E2EC082A202B8CD8738899F26ACF07492AB34D09262ADF91845B4188A860A4CCEE76E5E162E0DF8603C8350F11A4D5F597FCFFC40A2BAFA58AED966124CAD7F28FA5FD18FA352D76D3FE3E5E5D6D6E2FEC1F499F1F19A74CAEA099B513FBEE9B5FC9A3A2E8D2C0F3BE9652C4D96DD7C2D616D2 osx.test.dnssec-trigger.nlnetlabs.nl. 10 IN RRSIG TXT 8 5 10 20140224111605 20140127111605 42393 nlnetlabs.nl. w5ULN6uEWRHypv38w+LsCCogK4zYc4iZ8mrPB0kqs00JJirfkYRbQYioYKTM7nbl4WLg34YDyDUPEaTV9Zf8/8QKK6+liu2WYSTK1/KPpf0Y+jUtdtP+Pl5dbW4v7B9Jnx8Zp0yuoJm1E/vum1/Jo6Lo0sDzvpZSxNlt18LWFtI= ;{id = 42393} 036F737804746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0075D2AEEC30D00BA06E72187B3230D1E716FEB372720DC1FB476E87625E66A617F65A593B3AF61B761A042A3819D78A6918C1E869ACAF1A1912F27EC68C814E814E9BF48010B3D0911CC39126AFD602435238991020C7DF9EC4E1B0BF2124840FD0E21E42EF125A216087628CA5F6BA53098E574FCAAE9B24A52AEF1F4DCEC7C8 osx.test.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ddKu7DDQC6Buchh7MjDR5xb+s3JyDcH7R26HYl5mphf2Wlk7OvYbdhoEKjgZ14ppGMHoaayvGhkS8n7GjIFOgU6b9IAQs9CRHMORJq/WAkNSOJkQIMffnsThsL8hJIQP0OIeQu8SWiFgh2KMpfa6UwmOV0/KrpskpSrvH03Ox8g= ;{id = 42393} 036F737804746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002F000100000E10002E0373726304746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C000006000080000003 osx.test.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC src.test.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC 0373726304746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00001000010000000A004D0B302E31312E3939726333304066373765333433643735333439393330393930356266316265346561313566633066333139633261656132306233653530316530653465353536363035663635 src.test.dnssec-trigger.nlnetlabs.nl. 10 IN TXT "0.11.99rc30" "f77e343d753499309905bf1be4ea15fc0f319c2aea20b3e501e0e4e556605f65" 0373726304746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E00010000000A00A0001008050000000A530B29F552E63FF5A599096E6C6E65746C616273026E6C004CF9A97C3DD52757685997CA69BEF418FB8F9225ED46589080F8BEF02DED3E9FA59C6BF153C3AB74D2593046E3E0CB9E0075AEBDEE5045A4A18ECF3717AE35D7B51C87D159342CCE2AD71D99F964E2E00BC4D21A0A569E9B2BC35BCAD200B6A7D7B2A7F8AF7182A963C0F5B03BA459149908A11A0997E911A503556988973D7F src.test.dnssec-trigger.nlnetlabs.nl. 10 IN RRSIG TXT 8 5 10 20140224111605 20140127111605 42393 nlnetlabs.nl. TPmpfD3VJ1doWZfKab70GPuPkiXtRliQgPi+8C3tPp+lnGvxU8OrdNJZMEbj4MueAHWuve5QRaShjs83F64117Uch9FZNCzOKtcdmflk4uALxNIaClaemyvDW8rSALan17Kn+K9xgqljwPWwO6RZFJkIoRoJl+kRpQNVaYiXPX8= ;{id = 42393} 0373726304746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00CF947918DE0E5EA54DFDFE4B093BB0CA3B66691EACD151878FEF1A7CEC20B930A21C1CA39B2FCFF6D6F045DB69283F6552801C2D89CB9891B2F16623B4B717585C05D94C453F3E5D3CEDDCBEC5DD07FE9CB5551DEAD649847809A055D9E2AFFC4EE68B585A89F821F3063DB4FC027A09710A2F8982DD030C18518ABC04D684BE src.test.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. z5R5GN4OXqVN/f5LCTuwyjtmaR6s0VGHj+8afOwguTCiHByjmy/P9tbwRdtpKD9lUoAcLYnLmJGy8WYjtLcXWFwF2UxFPz5dPO3cvsXdB/6ctVUd6tZJhHgJoFXZ4q/8TuaLWFqJ+CHzBj20/AJ6CXEKL4mC3QMMGFGKvATWhL4= ;{id = 42393} 0373726304746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002F000100000E10002E0377696E04746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C000006000080000003 src.test.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC win.test.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC 0377696E04746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00001000010000000A004A08302E3131726334374036333462633539346230313362346463326130653266623935396663376361366661313532623861386131303065303734653130363262656461376264396464 win.test.dnssec-trigger.nlnetlabs.nl. 10 IN TXT "0.11rc47" "634bc594b013b4dc2a0e2fb959fc7ca6fa152b8a8a100e074e1062beda7bd9dd" 0377696E04746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E00010000000A00A0001008050000000A530B29F552E63FF5A599096E6C6E65746C616273026E6C004E6473013EF78A1439B29F115282CB335986EB043E6FA9EA82277B52C61575DABAFB6763FFA8A022DC49F23FDF6239EEBCF00B4DEF0873A19E4C73E5DD1E631556C5F9638E46FB6D70EB2778D64A6E5D4C694FF5DC348B670D6E188496459E66C108B7F20B47CA50CD5C162BA0F88BED09D6E790EC44A963CD96AA16DA76EE7F win.test.dnssec-trigger.nlnetlabs.nl. 10 IN RRSIG TXT 8 5 10 20140224111605 20140127111605 42393 nlnetlabs.nl. TmRzAT73ihQ5sp8RUoLLM1mG6wQ+b6nqgid7UsYVddq6+2dj/6igItxJ8j/fYjnuvPALTe8Ic6GeTHPl3R5jFVbF+WOORvttcOsneNZKbl1MaU/13DSLZw1uGISWRZ5mwQi38gtHylDNXBYroPiL7QnW55DsRKljzZaqFtp27n8= ;{id = 42393} 0377696E04746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00CDCBD191A7CAB632F18D573FE9E001BC9EAA999AFF647B561A2C0F26D60403FF19C9EE94D420365EE8F5D745CE9931E9926C313E4343B05E8B7BA333EEECF3CCFE79AE189AEC92DED552A486F63843BEA8E9D76FE0C410543A0B360F9A13E8D0BECCFE388D6CA9B5CE5E057C1AEF4582AA892EA9FD7ACEA5C88C4E1A393F45EF win.test.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. zcvRkafKtjLxjVc/6eABvJ6qmZr/ZHtWGiwPJtYEA/8Zye6U1CA2Xuj110XOmTHpkmwxPkNDsF6Le6Mz7uzzzP55rhia7JLe1VKkhvY4Q76o6ddv4MQQVDoLNg+aE+jQvsz+OI1sqbXOXgV8Gu9FgqqJLqn9es6lyIxOGjk/Re8= ;{id = 42393} 0377696E04746573740E646E737365632D74726967676572096E6C6E65746C616273026E6C00002F000100000E100031036F73780776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C000006000080000003 win.test.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC osx.version.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC 036F73780776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C0000100001000027D8004604302E31314037373536356566346132356630373338336335376165346439366364336264356663666530383933303166323035346363663230666336333663373665373130 osx.version.dnssec-trigger.nlnetlabs.nl. 10200 IN TXT "0.11" "77565ef4a25f07383c57ae4d96cd3bd5fcfe089301f2054ccf20fc636c76e710" 036F73780776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E0001000027D800A000100805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00172A29DC528F02B8568B76574A650D6D022D9CECF14A4A252BB173B7AC1489EFED7E61CB6803A80640BF71B1F053431A32403C955A9D6FE7E75DDFEA94F702AD5068748CAC3AD4E1CCB3737A6004B0E74820F0772A8A9D512460A75FB0F49BB145AB83E553907C956B88B0D4CA7F182368CBC15D5FC806694E2357F5C310D820 osx.version.dnssec-trigger.nlnetlabs.nl. 10200 IN RRSIG TXT 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Fyop3FKPArhWi3ZXSmUNbQItnOzxSkolK7Fzt6wUie/tfmHLaAOoBkC/cbHwU0MaMkA8lVqdb+fnXd/qlPcCrVBodIysOtThzLNzemAEsOdIIPB3KoqdUSRgp1+w9JuxRauD5VOQfJVriLDUyn8YI2jLwV1fyAZpTiNX9cMQ2CA= ;{id = 42393} 036F73780776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0095ED08E16B3C89CE49572DD36B42D38148779B0C92D094BA512EF52C1945FFB0F8BAF6252A1C1D2012303B91DB10D4D700E203CB86DF34419FD0815EACB58BD577F20690A07604FE5770B0D37902272B2AB043745BE9051E5DE4E506008A46242C6E4CCC74ACACB444E0F1965C06B05CE43F40A7EED9A7BE7A06FB944FEB3C30 osx.version.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. le0I4Ws8ic5JVy3Ta0LTgUh3mwyS0JS6US71LBlF/7D4uvYlKhwdIBIwO5HbENTXAOIDy4bfNEGf0IFerLWL1XfyBpCgdgT+V3Cw03kCJysqsEN0W+kFHl3k5QYAikYkLG5MzHSsrLRE4PGWXAawXOQ/QKfu2ae+egb7lE/rPDA= ;{id = 42393} 036F73780776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002F000100000E100031037372630776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C000006000080000003 osx.version.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC src.version.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC 037372630776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C0000100001000027D8004604302E31314063323263666636613531663061653865303733393361623739333564343466616161626665336438333431626138626238353138393339316463646664396662 src.version.dnssec-trigger.nlnetlabs.nl. 10200 IN TXT "0.11" "c22cff6a51f0ae8e07393ab7935d44faaabfe3d8341ba8bb85189391dcdfd9fb" 037372630776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E0001000027D800A000100805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006CAE818373E3F012B6D5D61DB7F461B6A1D7CF08FE0F0C830FC68D3DEAA185A1149B30F7B053A4FB933E04974DB7DF26BFE1F9AA2CB452E9E8E51617D63DA5B4FCDC461D1E501D4105AFF41A944458AA328659C7F4FB260AB38DEDE56F8BF555337C60FCD1F6EED8942EE3217BEA0AD75707A1BB512792023FC51F142D34835B src.version.dnssec-trigger.nlnetlabs.nl. 10200 IN RRSIG TXT 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bK6Bg3Pj8BK21dYdt/RhtqHXzwj+DwyDD8aNPeqhhaEUmzD3sFOk+5M+BJdNt98mv+H5qiy0Uuno5RYX1j2ltPzcRh0eUB1BBa/0GpREWKoyhlnH9PsmCrON7eVvi/VVM3xg/NH27tiULuMhe+oK11cHobtRJ5ICP8UfFC00g1s= ;{id = 42393} 037372630776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B0B00882E3AB573F60E984AA239A1E415DD3887685C9AC7D13EBFB0C1CE41E63D0C4B26A6582DD63DD69C565F729790066DD32FAED03B5BCB37D5C5E350A2224242A0BA5371A7A077B7ADF541DE059E2B00BE07811BA0F519005F7227585719B2D4BBB66BB32A5CD21A2D9C819828EB6C37AAD1613E894780F5C305B0B99814B src.version.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. sLAIguOrVz9g6YSqI5oeQV3TiHaFyax9E+v7DBzkHmPQxLJqZYLdY91pxWX3KXkAZt0y+u0DtbyzfVxeNQoiJCQqC6U3GnoHe3rfVB3gWeKwC+B4EboPUZAF9yJ1hXGbLUu7Zrsypc0hotnIGYKOtsN6rRYT6JR4D1wwWwuZgUs= ;{id = 42393} 037372630776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002F000100000E1000310377696E0776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C000006000080000003 src.version.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC win.version.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC 0377696E0776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C0000100001000027D8004604302E31314033666264656365333832383835326630343065633233383836656664313061356432613432383666343761616662643731386133363037376466643965313064 win.version.dnssec-trigger.nlnetlabs.nl. 10200 IN TXT "0.11" "3fbdece3828852f040ec23886efd10a5d2a4286f47aafbd718a36077dfd9e10d" 0377696E0776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E0001000027D800A000100805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0037387EC2DD476BFB0593952DFF30A0B96D806BE99B9C18E5CFA0C2E4D6B1C8C8AC53DAD41A145DC07349409B8E74B4F2B22A2AE298DE442966C1DC23517B4111F637C493CDE6869C65814728242C49CD11B0BEE7CD44F9F963C8E1853D59F427129BDC4D2D5829C3CF1B0B37EA1291CCEFA074D8A8E6765C9DAE75F8E4F1A4DF win.version.dnssec-trigger.nlnetlabs.nl. 10200 IN RRSIG TXT 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Nzh+wt1Ha/sFk5Ut/zCguW2Aa+mbnBjlz6DC5NaxyMisU9rUGhRdwHNJQJuOdLTysioq4pjeRClmwdwjUXtBEfY3xJPN5oacZYFHKCQsSc0RsL7nzUT5+WPI4YU9WfQnEpvcTS1YKcPPGws36hKRzO+gdNio5nZcna51+OTxpN8= ;{id = 42393} 0377696E0776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C4CAACF34BA5E9C58DB1AEC4AC49243BA8226808F59754C907FBF8B80537C9233E3F14C2B77D1AB31FC0508AC2CB192CC572B0E16B70B75B82DBC7A6EB41352084FBA7E60AAD93B8DA274E2703510736F20EED418D269CE33C8DBE88DA8412CED404B769FC667EBB6A005B9D831663135690D581E66B28FA3C8E554D598E13C8 win.version.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. xMqs80ul6cWNsa7ErEkkO6giaAj1l1TJB/v4uAU3ySM+PxTCt30asx/AUIrCyxksxXKw4Wtwt1uC28em60E1IIT7p+YKrZO42idOJwNRBzbyDu1BjSac4zyNvojahBLO1AS3afxmfrtqAFudgxZjE1aQ1YHmayj6PI5VTVmOE8g= ;{id = 42393} 0377696E0776657273696F6E0E646E737365632D74726967676572096E6C6E65746C616273026E6C00002F000100000E10002009646F6C67756C647572096E6C6E65746C616273026E6C000006000080000003 win.version.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC dolguldur.nlnetlabs.nl. TXT RRSIG NSEC 09646F6C67756C647572096E6C6E65746C616273026E6C0000010001000027D80004D59AE00D dolguldur.nlnetlabs.nl. 10200 IN A 213.154.224.13 09646F6C67756C647572096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00791A7293055E75F0DAFFDBC1D53011A905FC2F45F493FD2F63E153A1005A95C8860119DB52BCA801AE1683F101C78D6C8821C34D2F34AF3831832D789014738F43A5CEFBA193E93AF1E3CC9CF3B60F75E052C4271B871655987631E72A968461F6008F5D60CFC07024A84713AF733AD0C514494198E78D9BB3DA8DE66D6C7963 dolguldur.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. eRpykwVedfDa/9vB1TARqQX8L0X0k/0vY+FToQBalciGARnbUryoAa4Wg/EBx41siCHDTS80rzgxgy14kBRzj0Olzvuhk+k68ePMnPO2D3XgUsQnG4cWVZh2MecqloRh9gCPXWDPwHAkqEcTr3M60MUUSUGY542bs9qN5m1seWM= ;{id = 42393} 09646F6C67756C647572096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A1BC00A30D69EA38924DD3DAA1A9A62F06A4B313F1972BAE9AEA84CC74C16AEB558E045A3433F657CD300FC3DE09453F968D4C12C8F9BD3F269268551B30BBE6E1F213F5965800C6EAD142AC749624ED4FA0C1CD91DBDB3158F712334E3137EE340DEC02D5F0ABD7D465553E5C05AB0BA3AAB7BE2B9C895328BD897E6C352829 dolguldur.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. obwAow1p6jiSTdPaoammLwaksxPxlyuumuqEzHTBautVjgRaNDP2V80wD8PeCUU/lo1MEsj5vT8mkmhVGzC75uHyE/WWWADG6tFCrHSWJO1PoMHNkdvbMVj3EjNOMTfuNA3sAtXwq9fUZVU+XAWrC6Oqt74rnIlTKL2Jfmw1KCk= ;{id = 42393} 09646F6C67756C647572096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0090B8CE85364679D13AD6B85926B9D86D036318A35140415601C7458B7CE4A7CD09889D329F5F0FF36D2B79A8567EFF69618ECE1B5CC10A7B05FE74F0F3CBCE5AC53F4EE1FFD624C2A6E7FF856553301B1CAC28FDDAB13432C047F7BB219A71506D80F5B23222E2F209F14E45B51A1C0CC8B78F2BF64E3B90EC792C75382B2ED9 dolguldur.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kLjOhTZGedE61rhZJrnYbQNjGKNRQEFWAcdFi3zkp80JiJ0yn18P820reahWfv9pYY7OG1zBCnsF/nTw88vOWsU/TuH/1iTCpuf/hWVTMBscrCj92rE0MsBH97shmnFQbYD1sjIi4vIJ8U5FtRocDMi3jyv2TjuQ7HksdTgrLtk= ;{id = 42393} 09646F6C67756C647572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0016ACFD6862DE262B01E28D0585AD431FB9E7382938A2482D773242EFA56D4F2C4A0EB4BC857FF8A7BD6F3D373AEC9B9022383A7635DA3028455E7E55E9E4BF186E59DB6185F172D21BB680BA2945406C121BEB8660D10B7A80A27FF0C839666DD99B653B8F30E76D69FB91F9BB26EDFCAF30A879244F5EC43514A12ABE12944B dolguldur.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Fqz9aGLeJisB4o0Fha1DH7nnOCk4okgtdzJC76VtTyxKDrS8hX/4p71vPTc67JuQIjg6djXaMChFXn5V6eS/GG5Z22GF8XLSG7aAuilFQGwSG+uGYNELeoCif/DIOWZt2ZtlO48w521p+5H5uybt/K8wqHkkT17ENRShKr4SlEs= ;{id = 42393} 09646F6C67756C647572096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021D09FFFE6AAA56 dolguldur.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21d:9ff:fe6a:aa56 09646F6C67756C647572096E6C6E65746C616273026E6C00002C0001000027D800160101ADB23C8980AF34D9A637E93EF6B19A8F44B61F9C dolguldur.nlnetlabs.nl. 10200 IN SSHFP 1 1 ADB23C8980AF34D9A637E93EF6B19A8F44B61F9C 09646F6C67756C647572096E6C6E65746C616273026E6C00002C0001000027D800160201F591E1602245E501B55DE0B69358DE79282299B8 dolguldur.nlnetlabs.nl. 10200 IN SSHFP 2 1 F591E1602245E501B55DE0B69358DE79282299B8 09646F6C67756C647572096E6C6E65746C616273026E6C00002C0001000027D800160301AFDF808CA232EC012605F59746850E71F2A9B584 dolguldur.nlnetlabs.nl. 10200 IN SSHFP 3 1 AFDF808CA232EC012605F59746850E71F2A9B584 09646F6C67756C647572096E6C6E65746C616273026E6C00002F000100000E1000250E646F6C67756C6475722D62636531096E6C6E65746C616273026E6C00000640000008000B dolguldur.nlnetlabs.nl. 3600 IN NSEC dolguldur-bce1.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0E646F6C67756C6475722D62636531096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021D09FFFE6AAA54 dolguldur-bce1.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21d:9ff:fe6a:aa54 0E646F6C67756C6475722D62636531096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00439E6F7E56BDFED0C25D737C227487466880996FA67B16D98D4C4087B3562F6431E30B9E239D1434FCD24D3970BFA27EAB04EDAEDF7ED79B2543B12D9AEBC5EF67874622455A14C34EBB7F82284DE0D6C9F8A2DE7E07C294CDBF602185768D6130F285A10B9FC91F1D301F7854C3E0A8E86288C66F15A8638168B00E7EA6A355 dolguldur-bce1.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Q55vfla9/tDCXXN8InSHRmiAmW+mexbZjUxAh7NWL2Qx4wueI50UNPzSTTlwv6J+qwTtrt9+15slQ7EtmuvF72eHRiJFWhTDTrt/gihN4NbJ+KLefgfClM2/YCGFdo1hMPKFoQufyR8dMB94VMPgqOhiiMZvFahjgWiwDn6mo1U= ;{id = 42393} 0E646F6C67756C6475722D62636531096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B8B7B20B0CA6AA10C4F55665ED986C450DB3449D5BA56370B13298A418640D8243EB1AE7CFF7C7FDC13D5D19A8AABCC425D922270CE1248B5E8E5492511BCBE4216466CB633CEB8F490A631BB929EFE022C1EF7506BE8C2A39BF0916B73910F91A1D71D36A1B2AEDEDA3ACD603B2F3D26F7C99E03CD41D862D1E84DF39600983 dolguldur-bce1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uLeyCwymqhDE9VZl7ZhsRQ2zRJ1bpWNwsTKYpBhkDYJD6xrnz/fH/cE9XRmoqrzEJdkiJwzhJItejlSSURvL5CFkZstjPOuPSQpjG7kp7+Aiwe91Br6MKjm/CRa3ORD5Gh1x02obKu3to6zWA7Lz0m98meA81B2GLR6E3zlgCYM= ;{id = 42393} 0E646F6C67756C6475722D62636531096E6C6E65746C616273026E6C00002F000100000E1000200964726F6D6564617279096E6C6E65746C616273026E6C000006000000080003 dolguldur-bce1.nlnetlabs.nl. 3600 IN NSEC dromedary.nlnetlabs.nl. AAAA RRSIG NSEC 0964726F6D6564617279096E6C6E65746C616273026E6C0000010001000027D80004D59AE088 dromedary.nlnetlabs.nl. 10200 IN A 213.154.224.136 0964726F6D6564617279096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0087A23A05BAD6658C63856AF3725A5BB31818CF07D715E76001A9EF364BC4BFDDBAE873A53A66C902677C2EB02E80173DF90D3C4ADCA7880D3A5918D99F179091A31534D1052212564CD9824AC4C9A4B715302BE232DE6EB653829BD6F308C9D9FD0039E4E08C6304C3A23ED971AC52F297B80ED0AEB910B725DD06580E1885FB dromedary.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. h6I6BbrWZYxjhWrzclpbsxgYzwfXFedgAanvNkvEv9266HOlOmbJAmd8LrAugBc9+Q08StyniA06WRjZnxeQkaMVNNEFIhJWTNmCSsTJpLcVMCviMt5utlOCm9bzCMnZ/QA55OCMYwTDoj7ZcaxS8pe4DtCuuRC3Jd0GWA4Yhfs= ;{id = 42393} 0964726F6D6564617279096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0029515C04F0FCF3138BF90DD7A22A9D5E95E52A40CEE518FCC6FD15B54C60F09079C1D6C4B6706EFA33DCE7C9A5A49E48CEA830CC5D43F3431307660AA836666E139BD2312D22C4FC8D26E0B5F31C03245C01FBDBFAC5408E9C38EDB9A2F51454F46E781AB717577C00104648315BE61FB4EE61B88E69242F8EE142BB01091513 dromedary.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. KVFcBPD88xOL+Q3XoiqdXpXlKkDO5Rj8xv0VtUxg8JB5wdbEtnBu+jPc58mlpJ5IzqgwzF1D80MTB2YKqDZmbhOb0jEtIsT8jSbgtfMcAyRcAfvb+sVAjpw47bmi9RRU9G54GrcXV3wAEEZIMVvmH7TuYbiOaSQvjuFCuwEJFRM= ;{id = 42393} 0964726F6D6564617279096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C22256AA3114BCCF8B54DA8089C17547C4C87B4E61F4507AE5E1F69D7926C42B7D306A51610F1FD9C85B915763EA86C9F0E10F3A48F20F70822AC150B740CE99E8FB51BCD99B488509FA2EC5E2AC596D5155E7AD57FE1FFA7E8C79A6C88F03479AE8AAA1DEE681FB9E40AF7F1161FD8D8D5B294B6F928ADFD4F0D74572C3D071 dromedary.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wiJWqjEUvM+LVNqAicF1R8TIe05h9FB65eH2nXkmxCt9MGpRYQ8f2chbkVdj6obJ8OEPOkjyD3CCKsFQt0DOmej7UbzZm0iFCfouxeKsWW1RVeetV/4f+n6MeabIjwNHmuiqod7mgfueQK9/EWH9jY1bKUtvkorf1PDXRXLD0HE= ;{id = 42393} 0964726F6D6564617279096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B26B8FD99B211DE40977AFC8E39370BABD15B8949C7529411B78B3622A14BB23C1240EE962C2E9B20A197A388ECF088BD0AD5FDB55FDF49ECC58F06F1533EE48548805EAA0B71D869166B1447F57C6381B4F5E8D1B3790E0A4AFB3670638A58997C5D87248AA167E0849D5FB0FBEFB210054DC2F494F58F6AB577A506B4A8C0D dromedary.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. smuP2ZshHeQJd6/I45Nwur0VuJScdSlBG3izYioUuyPBJA7pYsLpsgoZejiOzwiL0K1f21X99J7MWPBvFTPuSFSIBeqgtx2GkWaxRH9XxjgbT16NGzeQ4KSvs2cGOKWJl8XYckiqFn4ISdX7D777IQBU3C9JT1j2q1d6UGtKjA0= ;{id = 42393} 0964726F6D6564617279096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF001000000000 dromedary.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:10:: 0964726F6D6564617279096E6C6E65746C616273026E6C00002C0001000027D800160101B41C41F78C3A773CDA1C14346EBCE0D0AC1B7804 dromedary.nlnetlabs.nl. 10200 IN SSHFP 1 1 B41C41F78C3A773CDA1C14346EBCE0D0AC1B7804 0964726F6D6564617279096E6C6E65746C616273026E6C00002C0001000027D800160201B82DAE815E4CE0727498B61FA108D72FD65167EE dromedary.nlnetlabs.nl. 10200 IN SSHFP 2 1 B82DAE815E4CE0727498B61FA108D72FD65167EE 0964726F6D6564617279096E6C6E65746C616273026E6C00002C0001000027D8001603011B2EBB6699E0AA530538F5F9A6BBECC59114DD17 dromedary.nlnetlabs.nl. 10200 IN SSHFP 3 1 1B2EBB6699E0AA530538F5F9A6BBECC59114DD17 0964726F6D6564617279096E6C6E65746C616273026E6C00002F000100000E10001B0464733130096E6C6E65746C616273026E6C00000640000008000B dromedary.nlnetlabs.nl. 3600 IN NSEC ds10.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0464733130096E6C6E65746C616273026E6C0000010001000027D80004D59AE09F ds10.nlnetlabs.nl. 10200 IN A 213.154.224.159 0464733130096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008FD058FB9700E14B421FD7941C3DDDCBCE90DE3FDC2A5159DA07CC1A1A8FBEEE8FAC891C080CB290361F8538E4793494F48C7047C85F71B7DF73E62998CADDA5D7976E885E46F2AC77634293524E9A2D6F53BD04E2A35BEF1B068BB6EAB4B66A2D9A0BF7E55693F149E0A9E3C387250866633DCC94E6D6226E072EB9E0814E31 ds10.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. j9BY+5cA4UtCH9eUHD3dy86Q3j/cKlFZ2gfMGhqPvu6PrIkcCAyykDYfhTjkeTSU9IxwR8hfcbffc+YpmMrdpdeXboheRvKsd2NCk1JOmi1vU70E4qNb7xsGi7bqtLZqLZoL9+VWk/FJ4Knjw4clCGZjPcyU5tYibgcuueCBTjE= ;{id = 42393} 0464733130096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00640F99F6DA56C1A9BAC8FD1A005A236B715547D35BCCB07143870FF26CBCA8230F052FBF0F71F0D513EC6C287140E209C020A65750AD4BAFE42402C0D3775C589271E128BED0581D340D3A27D44145F619298420509B996DFEE75047A01A7678E4B03EE5441DD45D7D3F01686F358C02A2A562E5F0F4FB87A2166E6F82A34611 ds10.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ZA+Z9tpWwam6yP0aAFoja3FVR9NbzLBxQ4cP8my8qCMPBS+/D3Hw1RPsbChxQOIJwCCmV1CtS6/kJALA03dcWJJx4Si+0FgdNA06J9RBRfYZKYQgUJuZbf7nUEegGnZ45LA+5UQd1F19PwFobzWMAqKlYuXw9PuHohZub4KjRhE= ;{id = 42393} 0464733130096E6C6E65746C616273026E6C00002F000100000E1000250265310B6578706572696D656E7473096E6C6E65746C616273026E6C000006400000000003 ds10.nlnetlabs.nl. 3600 IN NSEC e1.experiments.nlnetlabs.nl. A RRSIG NSEC 0265310B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265310B6578706572696D656E7473096E6C6E65746C616273026E6C00 e1.experiments.nlnetlabs.nl. 10200 IN NS ns.e1.experiments.nlnetlabs.nl. 0265310B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265320B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e1.experiments.nlnetlabs.nl. 3600 IN NSEC e2.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265310B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007231774C1A3080DC8D7D13D399632280B1A3AD606169D7B503DE56FF1210F00558C3045E8548DB2F79296AC9DA87B04C50C859407A12607D90A765BFD0B5E3C8845EB2543B210109585B816D4CF4E015550A0751FC830E646454CEA020B09F6BC3A6C6F39477A9CA1BB01D291051D65C8251B3FD3901E66E00D28BA7E39ACE49 e1.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. cjF3TBowgNyNfRPTmWMigLGjrWBhade1A95W/xIQ8AVYwwRehUjbL3kpasnah7BMUMhZQHoSYH2Qp2W/0LXjyIReslQ7IQEJWFuBbUz04BVVCgdR/IMOZGRUzqAgsJ9rw6bG85R3qcobsB0pEFHWXIJRs/05AeZuANKLp+Oazkk= ;{id = 42393} 026E730265310B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000011 ns.e1.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::11 0265320B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265320B6578706572696D656E7473096E6C6E65746C616273026E6C00 e2.experiments.nlnetlabs.nl. 10200 IN NS ns.e2.experiments.nlnetlabs.nl. 0265320B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265330B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e2.experiments.nlnetlabs.nl. 3600 IN NSEC e3.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265320B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BB53EBBFE4A53994BAC8F33AF3DF721021CD6B89D7293C83EDEF4AF01FC4C03EC9E1560F5B3BF3468DFD5701A47449F4D6FF7B2A57047F78389A67009F33DC7441994FF89874C6150AB6295D5D46843A9E3ED2BD5E790246379E5A214D3AD809C49F08E453EA93410A599E6050CBE0488CF541898C3C539877CB8C0C405AEFA7 e2.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. u1Prv+SlOZS6yPM6899yECHNa4nXKTyD7e9K8B/EwD7J4VYPWzvzRo39VwGkdEn01v97KlcEf3g4mmcAnzPcdEGZT/iYdMYVCrYpXV1GhDqePtK9XnkCRjeeWiFNOtgJxJ8I5FPqk0EKWZ5gUMvgSIz1QYmMPFOYd8uMDEBa76c= ;{id = 42393} 026E730265320B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000012 ns.e2.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::12 0265330B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265330B6578706572696D656E7473096E6C6E65746C616273026E6C00 e3.experiments.nlnetlabs.nl. 10200 IN NS ns.e3.experiments.nlnetlabs.nl. 0265330B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265340B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e3.experiments.nlnetlabs.nl. 3600 IN NSEC e4.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265330B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008DBF3B6E5A0394D6CB1E8C47611F17C1403B9B92AC1FAC08EC7DA7A91E39BD5BBD122FAB790E687AA73DF850AC24770DE94D9443380089C2EF1301A4B86A58FD4E598C4B764C056E49CF740392C063479C95A7AD3B7F86EA44CF6911012FB1C2AB719C9B6BFEADE1762BF55549B6B288DC376295EDDF8CCB30BC5D8D92B5DF93 e3.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jb87bloDlNbLHoxHYR8XwUA7m5KsH6wI7H2nqR45vVu9Ei+reQ5oeqc9+FCsJHcN6U2UQzgAicLvEwGkuGpY/U5ZjEt2TAVuSc90A5LAY0eclaetO3+G6kTPaREBL7HCq3Gcm2v+reF2K/VVSbayiNw3YpXt34zLMLxdjZK135M= ;{id = 42393} 026E730265330B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000013 ns.e3.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::13 0265340B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265340B6578706572696D656E7473096E6C6E65746C616273026E6C00 e4.experiments.nlnetlabs.nl. 10200 IN NS ns.e4.experiments.nlnetlabs.nl. 0265340B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265350B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e4.experiments.nlnetlabs.nl. 3600 IN NSEC e5.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265340B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C260DF7BBA985AC87FE7C9211B969115BA1722CD4C77AED35BEBF1FB11911C38D85C85088DEDBB211E025162E3E780118C869E071E9C776020D2478AFBD87AA308B13FD1A2DA2571324E05E1443ACD0AC561066576D3987894BD3239273A23A70ED30B3CD49F02808A88BEE194F56E6877BDB0A7CEDA958AEDCD26A563FD0933 e4.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wmDfe7qYWsh/58khG5aRFboXIs1Md67TW+vx+xGRHDjYXIUIje27IR4CUWLj54ARjIaeBx6cd2Ag0keK+9h6owixP9Gi2iVxMk4F4UQ6zQrFYQZldtOYeJS9MjknOiOnDtMLPNSfAoCKiL7hlPVuaHe9sKfO2pWK7c0mpWP9CTM= ;{id = 42393} 026E730265340B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000014 ns.e4.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::14 0265350B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265350B6578706572696D656E7473096E6C6E65746C616273026E6C00 e5.experiments.nlnetlabs.nl. 10200 IN NS ns.e5.experiments.nlnetlabs.nl. 0265350B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265360B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e5.experiments.nlnetlabs.nl. 3600 IN NSEC e6.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265350B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0021B2EEDD89795BE181CA347EAF053FB9C06855D19DADC5B2E118CA2E52F1646CAC487C84340D250F7022915FC4D87969F06BB2AD1F0660820BFC5D070E223E44FC21EAEC4C36603394F6EE3EA3A722DF34D426BEC96CD8979815364F920FD0AD28C5C82D0EE82F92AFFAA36F2DE2ED5B220C0D49DDD416D0CC3CD87DF9C78819 e5.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IbLu3Yl5W+GByjR+rwU/ucBoVdGdrcWy4RjKLlLxZGysSHyENA0lD3AikV/E2Hlp8GuyrR8GYIIL/F0HDiI+RPwh6uxMNmAzlPbuPqOnIt801Ca+yWzYl5gVNk+SD9CtKMXILQ7oL5Kv+qNvLeLtWyIMDUnd1BbQzDzYffnHiBk= ;{id = 42393} 026E730265350B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000015 ns.e5.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::15 0265360B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265360B6578706572696D656E7473096E6C6E65746C616273026E6C00 e6.experiments.nlnetlabs.nl. 10200 IN NS ns.e6.experiments.nlnetlabs.nl. 0265360B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265370B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e6.experiments.nlnetlabs.nl. 3600 IN NSEC e7.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265360B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A0C9E5007FB4CEBBA24F2C9C5E65574F97371B0E8F2592C89BE5BAB70E5436B0542F7DD2B14759DD44973F14CD1540870A542DDBC190538C31704009B3002A59D869FCF243C1AA73960ACAEC5CDFEC6A03EA4AE75F24063A29090436BC5DC4963F2FB4A75BCEB442267A8CF6457766FC94B8E75C51A72D19420D2897CBD4B71B e6.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. oMnlAH+0zruiTyycXmVXT5c3Gw6PJZLIm+W6tw5UNrBUL33SsUdZ3USXPxTNFUCHClQt28GQU4wxcEAJswAqWdhp/PJDwapzlgrK7Fzf7GoD6krnXyQGOikJBDa8XcSWPy+0p1vOtEImeoz2RXdm/JS451xRpy0ZQg0ol8vUtxs= ;{id = 42393} 026E730265360B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000016 ns.e6.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::16 0265370B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265370B6578706572696D656E7473096E6C6E65746C616273026E6C00 e7.experiments.nlnetlabs.nl. 10200 IN NS ns.e7.experiments.nlnetlabs.nl. 0265370B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265380B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e7.experiments.nlnetlabs.nl. 3600 IN NSEC e8.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265370B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C72769863BFCC951412C2D26C40DDD8A83569D1BEE289F61AC01D85714511AF247022F2DEDB7CD16BF4D726DC00B196E3896E47EB4BBD55FEDA6A9CD2A42EF960B84D4BE6D1A26DF8A178B90DB1BFC80ADD3856E952638CEA5B6977E33330B3086F3472EAE0B02755C04380796830F68219A808CB5BF61D2E2A0984885E0D983 e7.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. xydphjv8yVFBLC0mxA3dioNWnRvuKJ9hrAHYVxRRGvJHAi8t7bfNFr9Ncm3ACxluOJbkfrS71V/tpqnNKkLvlguE1L5tGibfiheLkNsb/ICt04VulSY4zqW2l34zMwswhvNHLq4LAnVcBDgHloMPaCGagIy1v2HS4qCYSIXg2YM= ;{id = 42393} 026E730265370B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000017 ns.e7.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::17 0265380B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265380B6578706572696D656E7473096E6C6E65746C616273026E6C00 e8.experiments.nlnetlabs.nl. 10200 IN NS ns.e8.experiments.nlnetlabs.nl. 0265380B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265390B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e8.experiments.nlnetlabs.nl. 3600 IN NSEC e9.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265380B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A9FFE65AF65DFA8838D0C302AF1E01BC0F88D68A49EE2C2F9B54C7E33680B97E0F594ED9D5FD4BE9A746E9A91A299E183E7EAC3E6CD5277431BC0FF0351019B5962D3D5C4C8EC24DA1B0250DA1E5F5B19F05E57BDF87B99B3465752305018CE448605F30C7DE562D9961468E579302B6C0F1B2F5431702AC6CF1412968B1370C e8.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. qf/mWvZd+og40MMCrx4BvA+I1opJ7iwvm1TH4zaAuX4PWU7Z1f1L6adG6akaKZ4YPn6sPmzVJ3QxvA/wNRAZtZYtPVxMjsJNobAlDaHl9bGfBeV734e5mzRldSMFAYzkSGBfMMfeVi2ZYUaOV5MCtsDxsvVDFwKsbPFBKWixNww= ;{id = 42393} 026E730265380B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000018 ns.e8.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::18 0265390B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265390B6578706572696D656E7473096E6C6E65746C616273026E6C00 e9.experiments.nlnetlabs.nl. 10200 IN NS ns.e9.experiments.nlnetlabs.nl. 0265390B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265610B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 e9.experiments.nlnetlabs.nl. 3600 IN NSEC ea.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265390B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007CE06F24F3F80217B7504A563D7AD890EBDAE846FB9D6B12DD00E128188687275B4C10D98764EA75808D32E7196A84D8A4685E7400FDDB616FB177A2BB5C625F5F47ED7584BB288FD2809BC94F83CDB03BC6E912816DA0C15F3B78F298F8C90760096751D294B66E70A30B5C75A6E4EF9018092EFF0FE4968B45F5B0B01CCDC4 e9.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fOBvJPP4Ahe3UEpWPXrYkOva6Eb7nWsS3QDhKBiGhydbTBDZh2TqdYCNMucZaoTYpGhedAD922FvsXeiu1xiX19H7XWEuyiP0oCbyU+DzbA7xukSgW2gwV87ePKY+MkHYAlnUdKUtm5wowtcdabk75AYCS7/D+SWi0X1sLAczcQ= ;{id = 42393} 026E730265390B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000019 ns.e9.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::19 0265610B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265610B6578706572696D656E7473096E6C6E65746C616273026E6C00 ea.experiments.nlnetlabs.nl. 10200 IN NS ns.ea.experiments.nlnetlabs.nl. 0265610B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265620B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 ea.experiments.nlnetlabs.nl. 3600 IN NSEC eb.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265610B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B0CE0F685FEB36828D8C808BFE57831569D89F8EBF01AE8BC06AA57C265E1BB4A3EAD02852D89BD023E2770BE326DE208A17960A895C20ED4927E16D3873FE1EE04157B9B66E5B781D78F3E5F565A9BCD34A8FD8D62401D1A8728A5C1CCC9E25564F44ADF96ADD18877B0BB740BB5700DF3C4CC7BFB607EAC0D651B84CE8774B ea.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. sM4PaF/rNoKNjICL/leDFWnYn46/Aa6LwGqlfCZeG7Sj6tAoUtib0CPidwvjJt4giheWColcIO1JJ+FtOHP+HuBBV7m2blt4HXjz5fVlqbzTSo/Y1iQB0ahyilwczJ4lVk9Erflq3RiHewu3QLtXAN88TMe/tgfqwNZRuEzod0s= ;{id = 42393} 026E730265610B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E100000000001A ns.ea.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1a 0265620B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265620B6578706572696D656E7473096E6C6E65746C616273026E6C00 eb.experiments.nlnetlabs.nl. 10200 IN NS ns.eb.experiments.nlnetlabs.nl. 0265620B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265630B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 eb.experiments.nlnetlabs.nl. 3600 IN NSEC ec.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265620B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008E925ADCC2CBF3E7F2CCF4160D065B07D88DEA6D099A4D325DE9F1EB5E9A7B1DE75F3CEF5B32B37C4BDA61D97C685E7A0E252E819FF7D894EB461143DE341996B9139EEDA9A7B44639F1CE911648F27BB46EF522A210AACB0D483A473FCD2CDC6F56236AB49C74D18B73D59DD1ED0182480718BEFCC804E7B69CADFEB6E05559 eb.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jpJa3MLL8+fyzPQWDQZbB9iN6m0Jmk0yXenx616aex3nXzzvWzKzfEvaYdl8aF56DiUugZ/32JTrRhFD3jQZlrkTnu2pp7RGOfHOkRZI8nu0bvUiohCqyw1IOkc/zSzcb1YjarScdNGLc9Wd0e0BgkgHGL78yATntpyt/rbgVVk= ;{id = 42393} 026E730265620B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E100000000001B ns.eb.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1b 0265630B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265630B6578706572696D656E7473096E6C6E65746C616273026E6C00 ec.experiments.nlnetlabs.nl. 10200 IN NS ns.ec.experiments.nlnetlabs.nl. 0265630B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265640B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 ec.experiments.nlnetlabs.nl. 3600 IN NSEC ed.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265630B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002884B071DA76A17D5D2B5C05F9F70CC45D6EE06BCF17667BAE0A62A524F13F2AEC1CA77DC7842C62F2ABB769DDC1D176780385FE2B93209EFBCDE11E69F672155C35C6D5B9698DB3FEE408B09CE8EF080AF5A8072AE6B8556854D7A1D5AE825C454230635D6EBDD8F4A1174E79A11F85897A002B85D9BDAED97D24A8E5581026 ec.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. KISwcdp2oX1dK1wF+fcMxF1u4GvPF2Z7rgpipSTxPyrsHKd9x4QsYvKrt2ndwdF2eAOF/iuTIJ77zeEeafZyFVw1xtW5aY2z/uQIsJzo7wgK9agHKua4VWhU16HVroJcRUIwY11uvdj0oRdOeaEfhYl6ACuF2b2u2X0kqOVYECY= ;{id = 42393} 026E730265630B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E100000000001C ns.ec.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1c 0265640B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265640B6578706572696D656E7473096E6C6E65746C616273026E6C00 ed.experiments.nlnetlabs.nl. 10200 IN NS ns.ed.experiments.nlnetlabs.nl. 0265640B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265650B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 ed.experiments.nlnetlabs.nl. 3600 IN NSEC ee.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265640B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000A3BF7506E6ADB52B1F9EA062E0250554AB036E47AC24E9B8EC1662EB3A22AE73971B23DFE73D8E81603E0D66E297F382B5DAD3B614714A9725C2B21C0F5EF322AC76FB1B80B2830D3E9F90A15779CC53DE47FF34F74FC046C28D4315063EC1E1287841AC0C594FE6DEACC390A259B2250F51BB82C86E7D801798DFF48F9D4AE ed.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Cjv3UG5q21Kx+eoGLgJQVUqwNuR6wk6bjsFmLrOiKuc5cbI9/nPY6BYD4NZuKX84K12tO2FHFKlyXCshwPXvMirHb7G4Cygw0+n5ChV3nMU95H/zT3T8BGwo1DFQY+weEoeEGsDFlP5t6sw5CiWbIlD1G7gshufYAXmN/0j51K4= ;{id = 42393} 026E730265640B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E100000000001D ns.ed.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1d 0265650B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265650B6578706572696D656E7473096E6C6E65746C616273026E6C00 ee.experiments.nlnetlabs.nl. 10200 IN NS ns.ee.experiments.nlnetlabs.nl. 0265650B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E1000250265660B6578706572696D656E7473096E6C6E65746C616273026E6C000006200000000003 ee.experiments.nlnetlabs.nl. 3600 IN NSEC ef.experiments.nlnetlabs.nl. NS RRSIG NSEC 0265650B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00207E53146A08C016F29767F3BD70F7011883A1EADEDBBFE96E990ED4D3078E7773812CA1236864E287EE8BA7DDFED7E3C204F32ECA10E53EAA6CE0F604F647D8C5CE93AA17454DEA9950C809A934DE724AC5BC78B2E6069ED9E1597B1B71BC651CD3920976F6A81BEC56F192586F162F4F618B49DE34474D0142AAB0C07D3084 ee.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IH5TFGoIwBbyl2fzvXD3ARiDoere27/pbpkO1NMHjndzgSyhI2hk4ofui6fd/tfjwgTzLsoQ5T6qbOD2BPZH2MXOk6oXRU3qmVDICak03nJKxbx4suYGntnhWXsbcbxlHNOSCXb2qBvsVvGSWG8WL09hi0neNEdNAUKqsMB9MIQ= ;{id = 42393} 026E730265650B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E100000000001E ns.ee.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1e 0265660B6578706572696D656E7473096E6C6E65746C616273026E6C0000020001000027D80020026E730265660B6578706572696D656E7473096E6C6E65746C616273026E6C00 ef.experiments.nlnetlabs.nl. 10200 IN NS ns.ef.experiments.nlnetlabs.nl. 0265660B6578706572696D656E7473096E6C6E65746C616273026E6C00002F000100000E10001D06666C75666679096E6C6E65746C616273026E6C000006200000000003 ef.experiments.nlnetlabs.nl. 3600 IN NSEC fluffy.nlnetlabs.nl. NS RRSIG NSEC 0265660B6578706572696D656E7473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002F3C58ED8559ED806C46756769E2229FCDA73294AC42C1670CFCD776F4D3BDCAB2E3C8780B1F686B0825A0E936C33849F8B57A15DAD4CD62A81D43F51986C2B245069E5BE040E85F36E590C3C5A448898DB7834E0887B7E8EBA204BE6044B964C308FE198E14354705803E1DE4D8712E471739A3899CC02BEA2451516A15AA38 ef.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. LzxY7YVZ7YBsRnVnaeIin82nMpSsQsFnDPzXdvTTvcqy48h4Cx9oawgloOk2wzhJ+LV6FdrUzWKoHUP1GYbCskUGnlvgQOhfNuWQw8WkSImNt4NOCIe36OuiBL5gRLlkwwj+GY4UNUcFgD4d5NhxLkcXOaOJnMAr6iRRUWoVqjg= ;{id = 42393} 026E730265660B6578706572696D656E7473096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E100000000001F ns.ef.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1f 06666C75666679096E6C6E65746C616273026E6C0000010001000027D80004D59AE02A fluffy.nlnetlabs.nl. 10200 IN A 213.154.224.42 06666C75666679096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00211CA17C37432E1D26CC098297E17C82B626262C4E88E4C8A0A5AEABE16BE08232E6843100D0B083B7B5BD8F76ECE12C85A1F7F32939737DDFCABD0CC2FC86EC4086E71F2BFCF649AE7645C589F9D4C764232F831E972F56CD83FC5EBAE9F589BCCC2FFF131CF1E6A239A8E85E5828AA36B51D1D6A78DDC7FB78A725ABF676DC fluffy.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IRyhfDdDLh0mzAmCl+F8grYmJixOiOTIoKWuq+Fr4IIy5oQxANCwg7e1vY927OEshaH38yk5c33fyr0MwvyG7ECG5x8r/PZJrnZFxYn51MdkIy+DHpcvVs2D/F666fWJvMwv/xMc8eaiOajoXlgoqja1HR1qeN3H+3inJav2dtw= ;{id = 42393} 06666C75666679096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C2790E71537617D0ACF285FFD7651448A64C19B4F5F81E7155C154F5A59F94D50C586801E2B9E5CC1DB1D0E7F4078C8600D2049E8E74F534F6594F8C4FB792E521D12F2E850A902BE50BB2EFA179040FE2562033717DAAAEBDB828F6657DF5EAD5C88FB2A38AA3AF7F182D89A2E33D3AFB6809621A213EFAF332B221DDC2EBE3 fluffy.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wnkOcVN2F9Cs8oX/12UUSKZMGbT1+B5xVcFU9aWflNUMWGgB4rnlzB2x0Of0B4yGANIEno509TT2WU+MT7eS5SHRLy6FCpAr5Quy76F5BA/iViAzcX2qrr24KPZlffXq1ciPsqOKo69/GC2JouM9OvtoCWIaIT768zKyId3C6+M= ;{id = 42393} 06666C75666679096E6C6E65746C616273026E6C00002F000100000E1000280962617274736D69746807667269656E6473096E6C6E65746C616273026E6C000006400000000003 fluffy.nlnetlabs.nl. 3600 IN NSEC bartsmith.friends.nlnetlabs.nl. A RRSIG NSEC 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C0000010001000027D80004D59AE0F2 bartsmith.friends.nlnetlabs.nl. 10200 IN A 213.154.224.242 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00CB4B9A5BD960B3BC5A6CA891005B2E1DE0CCEB85E737E43934B8B1CF4D56430A4AE026D2E0672416D1B0082258B6C64B9BC4DD47E11E0C6539BBD3A5D9BFC5DA5FA9D149B86BB4ED38A9420BF1D8A1262BD2A9598A9EA002AB354B2C0A779EB8E276CE1A64F65A7A2612610C9EFB8615309A35F7CEC00239B6C7EF81C4E84565 bartsmith.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. y0uaW9lgs7xabKiRAFsuHeDM64XnN+Q5NLixz01WQwpK4CbS4GckFtGwCCJYtsZLm8TdR+EeDGU5u9Ol2b/F2l+p0Um4a7TtOKlCC/HYoSYr0qlZip6gAqs1SywKd5644nbOGmT2WnomEmEMnvuGFTCaNffOwAI5tsfvgcToRWU= ;{id = 42393} 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008E9F09D4C425B252C82B02D261AA4D71807A5642C2B2DEE67A43A70DFD2AE6988E5B2D776461E2DC005E485D28C63C4741559F2F7A6BBBEC8291D93B985575035D8771A3CCB8ADDF174B27C6A9D9FD2A6AB60B073B58A812948CBB00A5F0FEB16B5055D4F2DCAE6E45335749D423FC0DCA22AED3E4D44A59E1318C6B46207209 bartsmith.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jp8J1MQlslLIKwLSYapNcYB6VkLCst7mekOnDf0q5piOWy13ZGHi3ABeSF0oxjxHQVWfL3pru+yCkdk7mFV1A12HcaPMuK3fF0snxqnZ/SpqtgsHO1ioEpSMuwCl8P6xa1BV1PLcrm5FM1dJ1CP8DcoirtPk1EpZ4TGMa0Ygcgk= ;{id = 42393} 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0002C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00CA5BB9A5A31B75B81198CC7DBC424A663C3AC218D920D6763EF1E22CC37492B28671DE24BB01034583BC808CE356905D1A3650D1B0B571CBC0E9D9E8486FDDE239BC35F4EB6751E81689D585C86E941300D19E2637AFF8DF153B73031FEF262651DF4712F898EB0BA92F86EB090E59E20773BC7BBFC3DA539C81CABF027A7DCB bartsmith.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ylu5paMbdbgRmMx9vEJKZjw6whjZINZ2PvHiLMN0krKGcd4kuwEDRYO8gIzjVpBdGjZQ0bC1ccvA6dnoSG/d4jm8NfTrZ1HoFonVhchulBMA0Z4mN6/43xU7cwMf7yYmUd9HEviY6wupL4brCQ5Z4gdzvHu/w9pTnIHKvwJ6fcs= ;{id = 42393} 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008C53C4BC6B308D38B14D5E1DF4A00C04457783DB265CD8B74B6AAC024F27475E9E096D1E13B503F346E804ADB2FF709327881A908673D668419D99BC9FF0C4B8781DEB81BEFF77AE316E3A5F41F103A517B5909A74FC960890FDDD954C9BBFA637F791F0E673D54B4BB26411B0524767E252CB95B792537E3FCDA7C2A26000D6 bartsmith.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jFPEvGswjTixTV4d9KAMBEV3g9smXNi3S2qsAk8nR16eCW0eE7UD80boBK2y/3CTJ4gakIZz1mhBnZm8n/DEuHgd64G+/3euMW46X0HxA6UXtZCadPyWCJD93ZVMm7+mN/eR8OZz1UtLsmQRsFJHZ+JSy5W3klN+P82nwqJgANY= ;{id = 42393} 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF000700000000 bartsmith.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:7:: 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002C0001000027D8001601015C5754E45839891C9CBB30538D5745321E135CDA bartsmith.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 5C5754E45839891C9CBB30538D5745321E135CDA 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002C0001000027D8001602013FD8568AA33165AC9FFD2E63C43F124C9E341FB6 bartsmith.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 3FD8568AA33165AC9FFD2E63C43F124C9E341FB6 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002C0001000027D800160301032577474762D0CEC79654FB7B1E3DBB9104E4B9 bartsmith.friends.nlnetlabs.nl. 10200 IN SSHFP 3 1 032577474762D0CEC79654FB7B1E3DBB9104E4B9 0962617274736D69746807667269656E6473096E6C6E65746C616273026E6C00002F000100000E10002C0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00000640000008000B bartsmith.friends.nlnetlabs.nl. 3600 IN NSEC klaaswierenga.friends.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C0000010001000027D80004D59AE0F5 klaaswierenga.friends.nlnetlabs.nl. 10200 IN A 213.154.224.245 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A2909FA965B80AACDDA1C5774AC4398AAF73090735B89145A1DB4003149B686F1126DF761ED7DC0F6A89F41B4EF19598B0D0C1D4FE137B07B91F5EFD451CDCFEC8D408F125838A6CA91D55276E6F69218BD047AB87B6444251C27A1798F6A35B07ED5E3084B17C80F0A74E64A2733B65ECDE29A1A7838EE6BC57529E91805120 klaaswierenga.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. opCfqWW4CqzdocV3SsQ5iq9zCQc1uJFFodtAAxSbaG8RJt92HtfcD2qJ9BtO8ZWYsNDB1P4Tewe5H179RRzc/sjUCPElg4psqR1VJ25vaSGL0Eerh7ZEQlHCeheY9qNbB+1eMISxfIDwp05konM7ZezeKaGng47mvFdSnpGAUSA= ;{id = 42393} 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0089E13B15221327730AB745E62B33F85E6C6F4D323AB8F6E518ECDC1395A639F2FCD39278E431E173B2E3550D3B65D1C6B198115DF1733259D69E7B8BFFC010A2CAF17E1C0976050EEE44CF6A8DD3F1BADDBA652E3A0E374FCD4DA8C6B2E4D7DBF0835EAE845AE857A06C48C1DA393D0E42A4807E566B796B6B75A5D926D52CA6 klaaswierenga.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ieE7FSITJ3MKt0XmKzP4XmxvTTI6uPblGOzcE5WmOfL805J45DHhc7LjVQ07ZdHGsZgRXfFzMlnWnnuL/8AQosrxfhwJdgUO7kTPao3T8brdumUuOg43T81NqMay5Nfb8INeroRa6FegbEjB2jk9DkKkgH5Wa3lra3Wl2SbVLKY= ;{id = 42393} 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0002C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007FD68BDDB3A7C4345922547FADBEA8F44E08572BC4DD71E68328CF40B0524F06C25B0E399867DE9B69CBBDE92FFA9BE175BF771AF03232163D0DF7BE59CA5E1B0F514EB847F2DC25D38816CF082A1DC04B076EAB4C64227BB74EEBA7E7FBD76CA78EDD8DFF67A3426CACA3FFB341802F414CCDD06F037036F96C10A78B8F7314 klaaswierenga.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. f9aL3bOnxDRZIlR/rb6o9E4IVyvE3XHmgyjPQLBSTwbCWw45mGfem2nLvekv+pvhdb93GvAyMhY9Dfe+WcpeGw9RTrhH8twl04gWzwgqHcBLB26rTGQie7dO66fn+9dsp47djf9no0JsrKP/s0GAL0FMzdBvA3A2+WwQp4uPcxQ= ;{id = 42393} 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C8676E9752BD40AD974BEF80316AECD3C3E2A20CBB694D88C37AC5362AAABC0153069691A6F6B6E1AAA716F6F9D99B881AF2B7553F8D250A39B1BD9CD50B592EC51B40128A615567235EC48099E7A7A74F37CB37F2ABC0B190DB84CD7264417728066D33719DCE76F542CEA9F5EAFD2EBA4C594572073CE8B07985F7F67CA42D klaaswierenga.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. yGdul1K9QK2XS++AMWrs08Piogy7aU2Iw3rFNiqqvAFTBpaRpva24aqnFvb52ZuIGvK3VT+NJQo5sb2c1QtZLsUbQBKKYVVnI17EgJnnp6dPN8s38qvAsZDbhM1yZEF3KAZtM3Gdznb1Qs6p9er9LrpMWUVyBzzosHmF9/Z8pC0= ;{id = 42393} 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF001500000000 klaaswierenga.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:15:: 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002C0001000027D800160101FD05DEBFC4A849DDE4263F021DC1CDDDCFA76579 klaaswierenga.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 FD05DEBFC4A849DDE4263F021DC1CDDDCFA76579 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002C0001000027D800160201FF77160242E18D4C06F09929367760CEE3F193AE klaaswierenga.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 FF77160242E18D4C06F09929367760CEE3F193AE 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002C0001000027D8001603017EBFCC9B2B4D9B70196676E2CEF071CEE0183199 klaaswierenga.friends.nlnetlabs.nl. 10200 IN SSHFP 3 1 7EBFCC9B2B4D9B70196676E2CEF071CEE0183199 0D6B6C61617377696572656E676107667269656E6473096E6C6E65746C616273026E6C00002F000100000E10002D0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00000640000008000B klaaswierenga.friends.nlnetlabs.nl. 3600 IN NSEC sebastiankippe.friends.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C0000010001000027D80004D59AE0F4 sebastiankippe.friends.nlnetlabs.nl. 10200 IN A 213.154.224.244 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C88F06109816579BA42C923E3AC235C83FBE94C359972D2EB007679C8DBDB48B3739AAF17FAF9BC8B748D263E5BC71D748FCAE94DD6E37D94BC1FF4FA8D4F69712D548D5BD197C0797B554F8CDA2653F732B37D8136AA9A76FB49A3D60B9A258DB33359D5AAFA6028CFB3A7E95D6BAABD9545CC635BF9F34737EB85F340F02A1 sebastiankippe.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yI8GEJgWV5ukLJI+OsI1yD++lMNZly0usAdnnI29tIs3Oarxf6+byLdI0mPlvHHXSPyulN1uN9lLwf9PqNT2lxLVSNW9GXwHl7VU+M2iZT9zKzfYE2qpp2+0mj1guaJY2zM1nVqvpgKM+zp+lda6q9lUXMY1v580c364XzQPAqE= ;{id = 42393} 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005058E52104FBF5920CE47B1E0DDB4F1CE9266737EFFE4325DE9767602BCAACADA8A1B4CE5632C9079CC58C71ADDFDEF60D416D863C325BDB9838719A625180542881D37F3AC15F98A85F9DC9BDFE9471A9DF63E9B5A306CDD6124D61D361BE73F48B8D1105DA105109FDEC489AF4EF63B12A19BBC072F5B239676C60ECF0090B sebastiankippe.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. UFjlIQT79ZIM5HseDdtPHOkmZzfv/kMl3pdnYCvKrK2oobTOVjLJB5zFjHGt3972DUFthjwyW9uYOHGaYlGAVCiB0386wV+YqF+dyb3+lHGp32PptaMGzdYSTWHTYb5z9IuNEQXaEFEJ/exImvTvY7EqGbvAcvWyOWdsYOzwCQs= ;{id = 42393} 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0002C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0063D56DC8460D422FABF743CD67FE074AA35E98FA2C188782DC0C9C4A9141DB8C23A18BD28DAE8AD87A510653AB403E5EB0C71E30308866F8745C1851DFE81F9A90513A25EFF02C78730C1A59E2AAE35B0CC55DB126BD0B4CAD0EB99C1E65B5B6D1591C977F3CE06616E216505F9AE4DEBE86FA0182C62EAA4C59D9985E303FD9 sebastiankippe.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Y9VtyEYNQi+r90PNZ/4HSqNemPosGIeC3AycSpFB24wjoYvSja6K2HpRBlOrQD5esMceMDCIZvh0XBhR3+gfmpBROiXv8Cx4cwwaWeKq41sMxV2xJr0LTK0OuZweZbW20Vkcl3884GYW4hZQX5rk3r6G+gGCxi6qTFnZmF4wP9k= ;{id = 42393} 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A47960EDFD3C4297EF27F6C2DCB1CA70212E0C4AEC7BADEE974905C92BB52C651D5BB83B40C1B4FFC2FA8D5F7BE83CFA84276761C14EA91C3144A1A59EECBBA5161C6BE120101F243884F3FE2457E4B34234EEF557ADD49500965A4065C0397596B7F8A45BCCCEE3693E87CE0E0D10468582078664C3627DDE3304721155A4B8 sebastiankippe.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. pHlg7f08QpfvJ/bC3LHKcCEuDErse63ul0kFySu1LGUdW7g7QMG0/8L6jV976Dz6hCdnYcFOqRwxRKGlnuy7pRYca+EgEB8kOITz/iRX5LNCNO71V63UlQCWWkBlwDl1lrf4pFvMzuNpPofODg0QRoWCB4Zkw2J93jMEchFVpLg= ;{id = 42393} 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF001100000000 sebastiankippe.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:11:: 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00002C0001000027D8001601014CCB30371C21EAD3FAA25E8FC13FAC565FD7212E sebastiankippe.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 4CCB30371C21EAD3FAA25E8FC13FAC565FD7212E 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00002C0001000027D800160201A7FBFC0DAA906AFC71693B27CB427EDED2A50FD4 sebastiankippe.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 A7FBFC0DAA906AFC71693B27CB427EDED2A50FD4 0E73656261737469616E6B6970706507667269656E6473096E6C6E65746C616273026E6C00002F000100000E10002B0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00000640000008000B sebastiankippe.friends.nlnetlabs.nl. 3600 IN NSEC willemtoorop.friends.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C0000010001000027D80004D59AE0F3 willemtoorop.friends.nlnetlabs.nl. 10200 IN A 213.154.224.243 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008AF8125371B28982CDDF235F0C9B45A601FCFAB4FFF020A726444A00E1208448CA83849EF698884F08563FF71D5985652D92CEF5D981B65ED59B003B985A568E0F6CED6231233EEF1CC94CD0A6C37383D48C7B5F07B1CA86C9BC8B453FE11B48D3C2D3C2C2705E457CA89BFCB420C2BF6ED9D48E20E2BDE07493C123D8BC98EC willemtoorop.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ivgSU3GyiYLN3yNfDJtFpgH8+rT/8CCnJkRKAOEghEjKg4Se9piITwhWP/cdWYVlLZLO9dmBtl7VmwA7mFpWjg9s7WIxIz7vHMlM0KbDc4PUjHtfB7HKhsm8i0U/4RtI08LTwsJwXkV8qJv8tCDCv27Z1I4g4r3gdJPBI9i8mOw= ;{id = 42393} 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C5488F1EDA4BF8329A61E23FBF4766B6B0AF309F36D77AF7DE1302C94CFE49910A841CB703771BEDA044F22BAD3AA85E849D42CEF3D86422010DE7A27C9A7C4DD1E0916CCD91288ED3C20124BC64DE70F076FBA7A796B8D5FDCFB855078B31558C2A2EC2EAF7DE6595F0A7C92BA29578323DB26C85B2C5EB714526CC1F7D7FA9 willemtoorop.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xUiPHtpL+DKaYeI/v0dmtrCvMJ8213r33hMCyUz+SZEKhBy3A3cb7aBE8iutOqhehJ1CzvPYZCIBDeeifJp8TdHgkWzNkSiO08IBJLxk3nDwdvunp5a41f3PuFUHizFVjCouwur33mWV8KfJK6KVeDI9smyFssXrcUUmzB99f6k= ;{id = 42393} 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002E0001000027D800A0002C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006E68935537F9FFFAE75710C033ADDD6C01ED0878B4759BEC5BB3568DB6D5D8CB7BF901B059979BE3738B8B4A99DB2ED7ADBE3E98363578B9DA81594054EBC8B2ED8902495E69D3ABE9D74476A660C91CD063E83C57D0A490F3F1A74969FEE791F5FBB8FF43EB49E04545599A2503A4194A414D663039A34574112A057DFC89EA willemtoorop.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bmiTVTf5//rnVxDAM63dbAHtCHi0dZvsW7NWjbbV2Mt7+QGwWZeb43OLi0qZ2y7Xrb4+mDY1eLnagVlAVOvIsu2JAkleadOr6ddEdqZgyRzQY+g8V9CkkPPxp0lp/ueR9fu4/0PrSeBFRVmaJQOkGUpBTWYwOaNFdBEqBX38ieo= ;{id = 42393} 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BCFD464343AD39F45D793BA40BC76625EE22239DCEFEAD7C03E9D4F30CB8822EC01B6157185D6D95201990E3BE7F8D85F2A6D89040EAB91571AD21F689CD9334330F567D248E8386ED8B37BC4B1A86C1A6A579395097173A42EAF860420971E31DE68F2577372950BC6A789A40C49B8D1DB662C76BED0F530D3A89AD4B1DE390 willemtoorop.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. vP1GQ0OtOfRdeTukC8dmJe4iI53O/q18A+nU8wy4gi7AG2FXGF1tlSAZkOO+f42F8qbYkEDquRVxrSH2ic2TNDMPVn0kjoOG7Ys3vEsahsGmpXk5UJcXOkLq+GBCCXHjHeaPJXc3KVC8aniaQMSbjR22Ysdr7Q9TDTqJrUsd45A= ;{id = 42393} 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF000800000000 willemtoorop.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:8:: 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002C0001000027D800160101E19C781CF4239B0E9EBBF9391AB805E1D29E7F10 willemtoorop.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 E19C781CF4239B0E9EBBF9391AB805E1D29E7F10 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002C0001000027D8001602011F0BE2F173A3287201549251B176C23047FFCDD6 willemtoorop.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 1F0BE2F173A3287201549251B176C23047FFCDD6 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002C0001000027D8001603014E2DDCE23B238E1E65951DFC5EC0B1E88970AFBB willemtoorop.friends.nlnetlabs.nl. 10200 IN SSHFP 3 1 4E2DDCE23B238E1E65951DFC5EC0B1E88970AFBB 0C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00002F000100000E10001B0467617279096E6C6E65746C616273026E6C00000640000008000B willemtoorop.friends.nlnetlabs.nl. 3600 IN NSEC gary.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 0467617279096E6C6E65746C616273026E6C0000010001000027D80004D59AE03A gary.nlnetlabs.nl. 10200 IN A 213.154.224.58 0467617279096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00304B5A1E75CC16A149824699DFC420465EACEB917C722DFBBE488E2B013D78239F3DB4D97453860FF1B738C94B576C58E7D8C62E990A242C3CE3CF0A4680C7600CCDD58763CA788A91835920584135942C9CCED8B8E3B49AD21A5181E708740D260534C6661AABC28DC05A48965F2BFA501177C08D6EE4552BF9E8A2EE46A789 gary.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. MEtaHnXMFqFJgkaZ38QgRl6s65F8ci37vkiOKwE9eCOfPbTZdFOGD/G3OMlLV2xY59jGLpkKJCw8488KRoDHYAzN1YdjyniKkYNZIFhBNZQsnM7YuOO0mtIaUYHnCHQNJgU0xmYaq8KNwFpIll8r+lARd8CNbuRVK/noou5Gp4k= ;{id = 42393} 0467617279096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006173C16BBEE01BF9487AA385AC55AFC6353656F44413D0AFEF104D4CE01FFFD49CF9C423B84553311C3EB9372333BCA72F248740F509900454149AF0D0C3CB479D4AE426C6EF4E2E4A6BD318FF3D6BE408CFC445F2BA175027F3BC7D70EDF1B85BBB991E6E173DB3ABBDF16C07EDDE33BE81C7378190172032B938C66A99F13D gary.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YXPBa77gG/lIeqOFrFWvxjU2VvREE9Cv7xBNTOAf/9Sc+cQjuEVTMRw+uTcjM7ynLySHQPUJkARUFJrw0MPLR51K5CbG704uSmvTGP89a+QIz8RF8roXUCfzvH1w7fG4W7uZHm4XPbOrvfFsB+3eM76BxzeBkBcgMrk4xmqZ8T0= ;{id = 42393} 0467617279096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00AFF084CDB718C9925C1C70543DDB45959BA6A246256748CE5E3255633AC2F7019B7522B3E611E7D4DA11C149588FE702F7155BACDF74F65F434E4FDE5CA9D6C645AD23E454D013062C7B6FB66C2D0E4B70CBEA55E2219B75B1C089AF595C12AFFEC534EB88E91CFAEFE44F4CC755200D7457FB8C9FB82B0D2DCCBACA72113E6A gary.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. r/CEzbcYyZJcHHBUPdtFlZumokYlZ0jOXjJVYzrC9wGbdSKz5hHn1NoRwUlYj+cC9xVbrN909l9DTk/eXKnWxkWtI+RU0BMGLHtvtmwtDktwy+pV4iGbdbHAia9ZXBKv/sU064jpHPrv5E9Mx1UgDXRX+4yfuCsNLcy6ynIRPmo= ;{id = 42393} 0467617279096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A37F26E06BD273D2A9A9EEC007EE9A46B6DF2EDAF262F99106EC1278437B68A10B136F080F898BECB61CD4624C846097AC0EB9AA2D40B8410E8197A0779C40B7A7C61FB38832FB1D65A8AD8FFE6696AE239DDD20EFADD708CD07A2B4E731E7F0851A99D08741D52E3D66428AF4CDFD84805A87A70143B93DD38BF4A23DDD4DC8 gary.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. o38m4GvSc9Kpqe7AB+6aRrbfLtryYvmRBuwSeEN7aKELE28ID4mL7LYc1GJMhGCXrA65qi1AuEEOgZegd5xAt6fGH7OIMvsdZaitj/5mlq4jnd0g763XCM0HorTnMefwhRqZ0IdB1S49ZkKK9M39hIBah6cBQ7k904v0oj3dTcg= ;{id = 42393} 0467617279096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021676FFFEB81853 gary.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:216:76ff:feb8:1853 0467617279096E6C6E65746C616273026E6C00002C0001000027D800160101ED3C7439869AD75F0EC2BD4B4509865E5E1E4288 gary.nlnetlabs.nl. 10200 IN SSHFP 1 1 ED3C7439869AD75F0EC2BD4B4509865E5E1E4288 0467617279096E6C6E65746C616273026E6C00002C0001000027D800160201941AFEC19E19564A8D146AF0ED61232850D783CB gary.nlnetlabs.nl. 10200 IN SSHFP 2 1 941AFEC19E19564A8D146AF0ED61232850D783CB 0467617279096E6C6E65746C616273026E6C00002F000100000E10001A03676974096E6C6E65746C616273026E6C00000640000008000B gary.nlnetlabs.nl. 3600 IN NSEC git.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 03676974096E6C6E65746C616273026E6C0000050001000027D80015066769746C6162096E6C6E65746C616273026E6C00 git.nlnetlabs.nl. 10200 IN CNAME gitlab.nlnetlabs.nl. 03676974096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B3089838EC3EFA196D5AB1402E5C59773A3127201329F6E34AA2AAE7F55C22C6678FA97B281D38BB6420F040A43B1E04C6F503C0184C5158CFDB3D3348CE9ED6865420E6432A282984221502160A40D0B3E8F31226471523BFEF03737690F3555082B8B516B0238E77D6733C593A8021D90236F887513E3F3761C6F010849568 git.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. swiYOOw++hltWrFALlxZdzoxJyATKfbjSqKq5/VcIsZnj6l7KB04u2Qg8ECkOx4ExvUDwBhMUVjP2z0zSM6e1oZUIOZDKigphCIVAhYKQNCz6PMSJkcVI7/vA3N2kPNVUIK4tRawI4531nM8WTqAIdkCNviHUT4/N2HG8BCElWg= ;{id = 42393} 03676974096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004EDB67C38989482CC4199039BB7E19DD4B35FA3C1B8D862E5116900B8641F055BD3E0F66177B4C4E42517F5E83C85E65D55221D9B5DAF63E2943504C75074EE261F72DD70C3C93F9C29E3C8E840732C01A0A452BA48A20BC315E26FA4C2F2EA19F6FDBA9EBB7839C7C62212E72DF04931E87FE8F3EED818A2805679AAD66618D git.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Tttnw4mJSCzEGZA5u34Z3Us1+jwbjYYuURaQC4ZB8FW9Pg9mF3tMTkJRf16DyF5l1VIh2bXa9j4pQ1BMdQdO4mH3LdcMPJP5wp48joQHMsAaCkUrpIogvDFeJvpMLy6hn2/bqeu3g5x8YiEuct8Ekx6H/o8+7YGKKAVnmq1mYY0= ;{id = 42393} 03676974096E6C6E65746C616273026E6C00002F000100000E100024045F343433045F74637003676974096E6C6E65746C616273026E6C000006040000000003 git.nlnetlabs.nl. 3600 IN NSEC _443._tcp.git.nlnetlabs.nl. CNAME RRSIG NSEC 045F343433045F74637003676974096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _443._tcp.git.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343433045F74637003676974096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007C7FBD927DF3735469FB03150B3FE99812A3DFB65B86514B45B3AFE1A5F7E4C9A633069A7A3F05D09ECFCC1D73D927B25E51E212EB35834C84EAE27B47826E8D1DD071B3B0064E0540AB4E46F46AC87E58133F9FA16F414E6BC2A1E1D9DF718B933E828D8AEE4CCAA518F19AA899CBD94CEC21464E2812A0C3CF51EAC1C72A9C _443._tcp.git.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fH+9kn3zc1Rp+wMVCz/pmBKj37ZbhlFLRbOv4aX35MmmMwaaej8F0J7PzB1z2SeyXlHiEus1g0yE6uJ7R4JujR3QcbOwBk4FQKtORvRqyH5YEz+foW9BTmvCoeHZ33GLkz6CjYruTMqlGPGaqJnL2UzsIUZOKBKgw89R6sHHKpw= ;{id = 42393} 045F343433045F74637003676974096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000A1EBA9A277C3A7F073E2EA169D6640D0EEFD1FD879D1BB2C3303D4A878E5B85B4F3E7DB4998E28096CDFB66D924317E07435756381923B0265C390E8873D3B028F1904CEBE25A7C2C1663E9C8585945B5CA7EB6417813A4965D6E962428B41E9C4B673873B0116BAC9557F3BE4F41BB14E2FD1BA898DF29D904E8E6DAE123C6 _443._tcp.git.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ch66mid8On8HPi6hadZkDQ7v0f2HnRuywzA9SoeOW4W08+fbSZjigJbN+2bZJDF+B0NXVjgZI7AmXDkOiHPTsCjxkEzr4lp8LBZj6chYWUW1yn62QXgTpJZdbpYkKLQenEtnOHOwEWuslVfzvk9BuxTi/RuomN8p2QTo5trhI8Y= ;{id = 42393} 045F343433045F74637003676974096E6C6E65746C616273026E6C00002F000100000E10001D066769746C6162096E6C6E65746C616273026E6C000006040000000003 _443._tcp.git.nlnetlabs.nl. 3600 IN NSEC gitlab.nlnetlabs.nl. CNAME RRSIG NSEC 066769746C6162096E6C6E65746C616273026E6C0000010001000027D80004D59AE089 gitlab.nlnetlabs.nl. 10200 IN A 213.154.224.137 066769746C6162096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A5AE359BAAD2D9E6F84A64EE30D855CC3B96484E25CA1EF24D3F7F144119B76791687C8CF758C19331F796D59AA42F5FE15657DFC2C622F6BA4A1E5A9EB380EABBE1EA0849F8D5991C4F35D358E3B8F1A5DDA9EE85047EED598B584A413301092B559C4CA691B69BEE2FE348EEB9DC177997003807806E3B312B1A890CB778AE gitlab.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pa41m6rS2eb4SmTuMNhVzDuWSE4lyh7yTT9/FEEZt2eRaHyM91jBkzH3ltWapC9f4VZX38LGIva6Sh5anrOA6rvh6ghJ+NWZHE8101jjuPGl3anuhQR+7VmLWEpBMwEJK1WcTKaRtpvuL+NI7rncF3mXADgHgG47MSsaiQy3eK4= ;{id = 42393} 066769746C6162096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0074D344040F70508EC6BAC41E97FA4AF0BFF1D83E6109D01F7F80E4209256AEEE3318913AB3F731D43CAAC02C9E3D6D5D3519C1BC03A39D93BAC9AF5C147A88315870940F6F6DD177A9F1FE9783081CD88E32FDE75B51240AE8F14EB85355147FD3E63E16F1FCAFA10E1236E39D0FB693D59BA3D2406EF69A912AA2B9775DF4F4 gitlab.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. dNNEBA9wUI7GusQel/pK8L/x2D5hCdAff4DkIJJWru4zGJE6s/cx1DyqwCyePW1dNRnBvAOjnZO6ya9cFHqIMVhwlA9vbdF3qfH+l4MIHNiOMv3nW1EkCujxTrhTVRR/0+Y+FvH8r6EOEjbjnQ+2k9Wbo9JAbvaakSqiuXdd9PQ= ;{id = 42393} 066769746C6162096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00624A1066ACD1E827D04E45C605809FD79B58E51C07DEA80F9F1F13C62C40E3FC545BF5287277C6BEA2B331DF1CA5CF7AE089B1FE9E653AB31E57365B58079930FE5CCC5EE9644E0811AD90EFCBF9EC27244A1CCFA57152E4F3B6FDD75B3642F3E1D16403F77F06248C4CDBFE06BC6EB95F66B9BFD8466515B92929CD0FA8524D gitlab.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YkoQZqzR6CfQTkXGBYCf15tY5RwH3qgPnx8TxixA4/xUW/UocnfGvqKzMd8cpc964Imx/p5lOrMeVzZbWAeZMP5czF7pZE4IEa2Q78v57CckShzPpXFS5PO2/ddbNkLz4dFkA/d/BiSMTNv+BrxuuV9mub/YRmUVuSkpzQ+oUk0= ;{id = 42393} 066769746C6162096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008935519B4D49FCE6B99BDEC25DE1262A1AB311CA5BB8CF72DF7EBD90DF4AAE87E31CD96760516C074055E9CD72C1FA74D21FA9C523326ECDEFBF54433DBFC34938479BA588251461C1D2F11E378E4962AB1657266D1E2FB97DEA853552959EE2AFC8B1643F8B44A4DF59025A11E42F568F3B30D6525C574B8DCA5FAF6434C681 gitlab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. iTVRm01J/Oa5m97CXeEmKhqzEcpbuM9y3369kN9KrofjHNlnYFFsB0BV6c1ywfp00h+pxSMybs3vv1RDPb/DSThHm6WIJRRhwdLxHjeOSWKrFlcmbR4vuX3qhTVSlZ7ir8ixZD+LRKTfWQJaEeQvVo87MNZSXFdLjcpfr2Q0xoE= ;{id = 42393} 066769746C6162096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF001700000000 gitlab.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:17:: 066769746C6162096E6C6E65746C616273026E6C00002C0001000027D800160101CA58E26C1F97DFB9F98264A02306DCDBB9C4E7AF gitlab.nlnetlabs.nl. 10200 IN SSHFP 1 1 CA58E26C1F97DFB9F98264A02306DCDBB9C4E7AF 066769746C6162096E6C6E65746C616273026E6C00002C0001000027D800160201F4A1BEFC4CDAF0056CAD2BF7E86444FD7090FA2E gitlab.nlnetlabs.nl. 10200 IN SSHFP 2 1 F4A1BEFC4CDAF0056CAD2BF7E86444FD7090FA2E 066769746C6162096E6C6E65746C616273026E6C00002C0001000027D800160301ADC8B9E5B9C0D9DE26DF01AAB16B6CEACF18BEAA gitlab.nlnetlabs.nl. 10200 IN SSHFP 3 1 ADC8B9E5B9C0D9DE26DF01AAB16B6CEACF18BEAA 066769746C6162096E6C6E65746C616273026E6C00002F000100000E100027045F343433045F746370066769746C6162096E6C6E65746C616273026E6C00000640000008000B gitlab.nlnetlabs.nl. 3600 IN NSEC _443._tcp.gitlab.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 045F343433045F746370066769746C6162096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _443._tcp.gitlab.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343433045F746370066769746C6162096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0016E348E4653B7474C627F3FDB73C857CEFB927F8B2C0FC098D8460AC0023461B15A16653AC9670E9275B914022C949D83834FFEC7363533F00DD5A550AFD9766954E1A81E60BF80548C1559DCD8C62BF7D0597D7E4C98E8934BB154DEB269929F1373D381B6985B0A9EEBD810692B12AFF54671FE5502265FAF9E1C10CC799BD _443._tcp.gitlab.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FuNI5GU7dHTGJ/P9tzyFfO+5J/iywPwJjYRgrAAjRhsVoWZTrJZw6SdbkUAiyUnYODT/7HNjUz8A3VpVCv2XZpVOGoHmC/gFSMFVnc2MYr99BZfX5MmOiTS7FU3rJpkp8Tc9OBtphbCp7r2BBpKxKv9UZx/lUCJl+vnhwQzHmb0= ;{id = 42393} 045F343433045F746370066769746C6162096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001662F19A7E116140201055A6EFB2821B9E1BD8C3976FBDFF64014D07D7E699A64AA12CDD15054E0AFBE225EAF9938C7DC11F21B1207D030BCB0CE83A1828BBC479E878001C58DD9E38C0432D1E7959B7223EA493E7EDB18468710727852C1A685FF3666EC89DA36FFDF642DF4FDD4236AD6E4197AE13FD5C5C1AFAD1D935DDAB _443._tcp.gitlab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FmLxmn4RYUAgEFWm77KCG54b2MOXb73/ZAFNB9fmmaZKoSzdFQVOCvviJer5k4x9wR8hsSB9AwvLDOg6GCi7xHnoeAAcWN2eOMBDLR55WbciPqST5+2xhGhxByeFLBpoX/Nmbsido2/99kLfT91CNq1uQZeuE/1cXBr60dk13as= ;{id = 42393} 045F343433045F746370066769746C6162096E6C6E65746C616273026E6C00002F000100000E100020096769746C61622D6369096E6C6E65746C616273026E6C000006040000000003 _443._tcp.gitlab.nlnetlabs.nl. 3600 IN NSEC gitlab-ci.nlnetlabs.nl. CNAME RRSIG NSEC 096769746C61622D6369096E6C6E65746C616273026E6C0000050001000027D80015066769746C6162096E6C6E65746C616273026E6C00 gitlab-ci.nlnetlabs.nl. 10200 IN CNAME gitlab.nlnetlabs.nl. 096769746C61622D6369096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009311E9AA47450A87F87680F62FCE3A87EC8CCC687804D262F9588900100BCEBD6F1A1CB8694035049915EAA650960F5B0853B6D4875CAAD009DB349A0DC4D2025587101560FF90232F8E870C2E69BFC9D330C266FE6CC12D88E306430B45FFD9B978087FBF4638280C43F025E1A68B736585AF520E168C01475E5BCB2EF58461 gitlab-ci.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kxHpqkdFCof4doD2L846h+yMzGh4BNJi+ViJABALzr1vGhy4aUA1BJkV6qZQlg9bCFO21IdcqtAJ2zSaDcTSAlWHEBVg/5AjL46HDC5pv8nTMMJm/mzBLYjjBkMLRf/ZuXgIf79GOCgMQ/Al4aaLc2WFr1IOFowBR15byy71hGE= ;{id = 42393} 096769746C61622D6369096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C006E8D96B671F557397D39DEEA1F96877987B73A9C8B2AFA87E523869874ACE9DE1264B31774C0A6DA2E839B3E85E00AB5CC5CA3B32A8FBABE2F3DCA1D8951046F4229B9BBA58F37605308DBA7B8B312A24E6B043BEA5401529335FDF6EC72B513FC494A740D2F126FBA6E9E3ED1103FC519AB8522298BE93CCB64A78945C0576D gitlab-ci.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. bo2WtnH1Vzl9Od7qH5aHeYe3OpyLKvqH5SOGmHSs6d4SZLMXdMCm2i6Dmz6F4Aq1zFyjsyqPur4vPcodiVEEb0IpubuljzdgUwjbp7izEqJOawQ76lQBUpM1/fbscrUT/ElKdA0vEm+6bp4+0RA/xRmrhSIpi+k8y2SniUXAV20= ;{id = 42393} 096769746C61622D6369096E6C6E65746C616273026E6C00002F000100000E10002A045F343433045F746370096769746C61622D6369096E6C6E65746C616273026E6C000006040000000003 gitlab-ci.nlnetlabs.nl. 3600 IN NSEC _443._tcp.gitlab-ci.nlnetlabs.nl. CNAME RRSIG NSEC 045F343433045F746370096769746C61622D6369096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _443._tcp.gitlab-ci.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343433045F746370096769746C61622D6369096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B51CC5FBF65FC044DA3FD2485BE063A9003A8770EDB2F6E62C2C33F85D07A8896840D7AC51951FDB930FD2213276803B00F14ECEBF1F7602A4987144977B61057FF1E293CDC1C90F5F42AC66CB174DE6A9264C4986D01B4A6582EB7611F93B2407C7B2ACAE9089DFAE8D155B68695D103CC0C11816D223DF274A5592BA4CDC9E _443._tcp.gitlab-ci.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. tRzF+/ZfwETaP9JIW+BjqQA6h3DtsvbmLCwz+F0HqIloQNesUZUf25MP0iEydoA7APFOzr8fdgKkmHFEl3thBX/x4pPNwckPX0KsZssXTeapJkxJhtAbSmWC63YR+TskB8eyrK6Qid+ujRVbaGldEDzAwRgW0iPfJ0pVkrpM3J4= ;{id = 42393} 045F343433045F746370096769746C61622D6369096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BA126C81754F5CC7F6F3F203E9B88358BF8F62C218187ED9A3D69CE2DE21BC82BBA2702C0949CA52A34F92C8705E478F19269B1F7839AD06ECD4A76A1103BDA60A9B5DF06D4713429C3BCBF260C2D3D2BD5620D7EE915E93C45168541B87D8E940B0D0DFF3D4C5BCC807146B03E94F202BCB6408A033C703C97BADCF03544465 _443._tcp.gitlab-ci.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uhJsgXVPXMf28/ID6biDWL+PYsIYGH7Zo9ac4t4hvIK7onAsCUnKUqNPkshwXkePGSabH3g5rQbs1KdqEQO9pgqbXfBtRxNCnDvL8mDC09K9ViDX7pFek8RRaFQbh9jpQLDQ3/PUxbzIBxRrA+lPICvLZAigM8cDyXutzwNURGU= ;{id = 42393} 045F343433045F746370096769746C61622D6369096E6C6E65746C616273026E6C00002F000100000E10001C05676C6F6F6D096E6C6E65746C616273026E6C000006040000000003 _443._tcp.gitlab-ci.nlnetlabs.nl. 3600 IN NSEC gloom.nlnetlabs.nl. CNAME RRSIG NSEC 05676C6F6F6D096E6C6E65746C616273026E6C0000010001000027D80004D59AE028 gloom.nlnetlabs.nl. 10200 IN A 213.154.224.40 05676C6F6F6D096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0072479A96470049ADBFE2E63F09BD2B3CFB69D4FF4F0BD3AA6EB0D8874C5FBD4431F6E029FA6C59210B63EEB195AD762908147F345F964DEA0CA7C0303E6042A8C323310EBB143BD4FE05F313D1A6B4F8F8F1A4522A2F19FF6EB4BF1DFDC9A1393E689BCA91D22105072BBD138E1E3423E90060A05859C0974B93E4A8DEE77AAF gloom.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ckealkcASa2/4uY/Cb0rPPtp1P9PC9OqbrDYh0xfvUQx9uAp+mxZIQtj7rGVrXYpCBR/NF+WTeoMp8AwPmBCqMMjMQ67FDvU/gXzE9GmtPj48aRSKi8Z/260vx39yaE5PmibypHSIQUHK70Tjh40I+kAYKBYWcCXS5PkqN7neq8= ;{id = 42393} 05676C6F6F6D096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00AE7A68D14E516F1E1D1EFD82659872D220FE240A660010E03FA3449E82875FB13300D7F2996FE0B3E0C94988C7B6ADDCBD7F512AE0778129F3CAAEFE0AD8CF93BA471CCE9222AA59459EB53A1C16CCFCFE230CC9A730BA618FAFCC7A5B466DA28DAAB7E80CEB787A0FA441E873356CDE18F296CB2C81CF03C1B22AEF00DD6E21 gloom.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rnpo0U5Rbx4dHv2CZZhy0iD+JApmABDgP6NEnoKHX7EzANfymW/gs+DJSYjHtq3cvX9RKuB3gSnzyq7+CtjPk7pHHM6SIqpZRZ61OhwWzPz+IwzJpzC6YY+vzHpbRm2ijaq36AzreHoPpEHoczVs3hjylsssgc8DwbIq7wDdbiE= ;{id = 42393} 05676C6F6F6D096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B8EB40F33B0EC64062888FEE9F6DB3A6112747490275B2FE1DB5FCF8BCF8378E1C21B16AEC540614F6359A930B7B0E7BEFACEC8489A3E2A1BB91E93A8FDC46AA544C51A60E126EF331E68C57E857FDB42E99903B1EC0AB5F970435DE13E00331BBCEC858D0CCDB02A250CDC8D57863550F80D86A5E47F56B89F9DC06E47BF56A gloom.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. uOtA8zsOxkBiiI/un22zphEnR0kCdbL+HbX8+Lz4N44cIbFq7FQGFPY1mpMLew5776zshImj4qG7kek6j9xGqlRMUaYOEm7zMeaMV+hX/bQumZA7HsCrX5cENd4T4AMxu87IWNDM2wKiUM3I1XhjVQ+A2GpeR/VrifncBuR79Wo= ;{id = 42393} 05676C6F6F6D096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009EE0B062856B1BB6FC2A62AC211D66947104B644E816A9D8229EA3886B259B2D351578D9F4FCE2C15CE31339ACE49A1CEDA4C6C9870047C9C7F7D5B7CE6B11B5387C06FBE57B2B1B06AA55E4BE57737893444B77677884F6D0BB6A782A08D0026D3C4F03557AF98F8E99ACB5A60325D0E22F167AA252A6328F629AFD6DCE9CF9 gloom.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. nuCwYoVrG7b8KmKsIR1mlHEEtkToFqnYIp6jiGslmy01FXjZ9PziwVzjEzms5Joc7aTGyYcAR8nH99W3zmsRtTh8BvvleysbBqpV5L5Xc3iTREt3Z3iE9tC7angqCNACbTxPA1V6+Y+Omay1pgMl0OIvFnqiUqYyj2Ka/W3OnPk= ;{id = 42393} 05676C6F6F6D096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010203BAFFFE052E3E gloom.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:baff:fe05:2e3e 05676C6F6F6D096E6C6E65746C616273026E6C00002C0001000027D80016010155D8297F7C8015C4661182EE82287C3AB94D2107 gloom.nlnetlabs.nl. 10200 IN SSHFP 1 1 55D8297F7C8015C4661182EE82287C3AB94D2107 05676C6F6F6D096E6C6E65746C616273026E6C00002F000100000E10001E07676F72696C6C61096E6C6E65746C616273026E6C00000640000008000B gloom.nlnetlabs.nl. 3600 IN NSEC gorilla.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 07676F72696C6C61096E6C6E65746C616273026E6C0000010001000027D80004D59AE03C gorilla.nlnetlabs.nl. 10200 IN A 213.154.224.60 07676F72696C6C61096E6C6E65746C616273026E6C0000020001000027D8001607676F72696C6C61096E6C6E65746C616273026E6C00 gorilla.nlnetlabs.nl. 10200 IN NS gorilla.nlnetlabs.nl. 07676F72696C6C61096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000060 gorilla.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::60 07676F72696C6C61096E6C6E65746C616273026E6C00002F000100000E10001C056861746869096E6C6E65746C616273026E6C000006200000000003 gorilla.nlnetlabs.nl. 3600 IN NSEC hathi.nlnetlabs.nl. NS RRSIG NSEC 07676F72696C6C61096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0009822AE4E6E576F2F8ED7244906F7F61E7EFCE903553AEA72694FEE3E2FF9B3DE5AA8163E32AB6EC7D9BE4F7E8BCE92B03550B18C01DD1147886C8F17EB1F53612614E435ADB86B4AD96A86DB299E949457FC8B108A1FAECEFEE8DCFA86286E6CB7A0A46A3F543D1D850012894C91B7627DCD43E786037B9AFB0519BC7EAC879 gorilla.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. CYIq5ObldvL47XJEkG9/YefvzpA1U66nJpT+4+L/mz3lqoFj4yq27H2b5PfovOkrA1ULGMAd0RR4hsjxfrH1NhJhTkNa24a0rZaobbKZ6UlFf8ixCKH67O/ujc+oYobmy3oKRqP1Q9HYUAEolMkbdifc1D54YDe5r7BRm8fqyHk= ;{id = 42393} 056861746869096E6C6E65746C616273026E6C0000010001000027D80004D59AE06C hathi.nlnetlabs.nl. 10200 IN A 213.154.224.108 056861746869096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00134DEB1033AC104F67A6FE7ADE65509B321C16CA00C31C7FEFB85A6B5781F20001DD1DC3B8171203CB50CFB7FF9F171261FB44B35877029514271291CDC913F9BD3E6FD3C8D0516A76F6F13926E62BAB17F582E0F2968A0E6A440E9229CFE6314C7BD9793E26DFB448CC7C59EADCC25FA14016184DBC4D25D81B7E3F8120D5BB hathi.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. E03rEDOsEE9npv563mVQmzIcFsoAwxx/77haa1eB8gAB3R3DuBcSA8tQz7f/nxcSYftEs1h3ApUUJxKRzckT+b0+b9PI0FFqdvbxOSbmK6sX9YLg8paKDmpEDpIpz+YxTHvZeT4m37RIzHxZ6tzCX6FAFhhNvE0l2Bt+P4Eg1bs= ;{id = 42393} 056861746869096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C60D2B4A32DC40EE213758A376079D01AD7ECE2EA2515A7DBDB95BF2070A823C39046F42F8B56391BC80A85721817D799E2BAE1123120ECCF8C497C0E87FFCDA83FB0780D5DA933BB707B55DC64B30BBE9616EBF2E5AF9039FD5BB41E042EEDF85040EEB464117D56D47D0085FBF45AB226C8F316C9E68FB3B73B3FD41F617E6 hathi.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xg0rSjLcQO4hN1ijdgedAa1+zi6iUVp9vblb8gcKgjw5BG9C+LVjkbyAqFchgX15niuuESMSDsz4xJfA6H/82oP7B4DV2pM7twe1XcZLMLvpYW6/Llr5A5/Vu0HgQu7fhQQO60ZBF9VtR9AIX79FqyJsjzFsnmj7O3Oz/UH2F+Y= ;{id = 42393} 056861746869096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0047672417C8A7D73DC795DF4573BD18FC3CF426E2ED0D2802352C75F6DE4A4CDA54EB5AB36E16CBCBBD8473D4D1EFB7B6AC1152D16E38630D6D6ABB0343919410465A056091D8F2273FFDD6531470926B2504FA8800C1CD0C295D974BDD1B3449B07D6B9AB1837DFC1BA7A5C1A443CE84CBCF222BFB99745460A9CC15CCEE489A hathi.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. R2ckF8in1z3Hld9Fc70Y/Dz0JuLtDSgCNSx19t5KTNpU61qzbhbLy72Ec9TR77e2rBFS0W44Yw1tarsDQ5GUEEZaBWCR2PInP/3WUxRwkmslBPqIAMHNDCldl0vdGzRJsH1rmrGDffwbp6XBpEPOhMvPIiv7mXRUYKnMFczuSJo= ;{id = 42393} 056861746869096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004445C856BC0C247E287B45F5A860184F8BFA32C297D38A23E6155BEE2AAE5361453C1DF3482F1C1659EEA5D867CF720C014801FF3B0885520909078D7A3B17D83BEB46F3F313A69ED3E414D1D634162577EDCA89005622ECAACFC2ACA6F4465FE5800A2BCB15C72E59712ABCDF7834986EB6788BD3E35715EAC4936F99D6D864 hathi.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. REXIVrwMJH4oe0X1qGAYT4v6MsKX04oj5hVb7iquU2FFPB3zSC8cFlnupdhnz3IMAUgB/zsIhVIJCQeNejsX2DvrRvPzE6ae0+QU0dY0FiV37cqJAFYi7KrPwqym9EZf5YAKK8sVxy5ZcSq833g0mG62eIvT41cV6sSTb5nW2GQ= ;{id = 42393} 056861746869096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021143FFFEDD6238 hathi.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:211:43ff:fedd:6238 056861746869096E6C6E65746C616273026E6C00002C0001000027D800160101957658025F4A10217CC50CAD487E7D08C3897F28 hathi.nlnetlabs.nl. 10200 IN SSHFP 1 1 957658025F4A10217CC50CAD487E7D08C3897F28 056861746869096E6C6E65746C616273026E6C00002C0001000027D800160201A4BCB1F8909C7A9F93AFAD1048F96DA9279F1F60 hathi.nlnetlabs.nl. 10200 IN SSHFP 2 1 A4BCB1F8909C7A9F93AFAD1048F96DA9279F1F60 056861746869096E6C6E65746C616273026E6C00002F000100000E10001E07686F7473706F74096E6C6E65746C616273026E6C00000640000008000B hathi.nlnetlabs.nl. 3600 IN NSEC hotspot.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 07686F7473706F74096E6C6E65746C616273026E6C0000050001000027D8001506666C75666679096E6C6E65746C616273026E6C00 hotspot.nlnetlabs.nl. 10200 IN CNAME fluffy.nlnetlabs.nl. 07686F7473706F74096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003BF527436E984736716D6CE4C95698C29987AB1F41878BD445CE8A328882B85D9B2D071B23E0AA330E2DAE7192A3B4F857BE5FD9E5188E1B439734684F6D05ECE8EE681418CE6A82013062C00BB995AEE135040D0E002BAD551E28AE90746A6DE7901F30555211A8489A64784DB784B5B7EC8C78677A8475BC15845F540F88C8 hotspot.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. O/UnQ26YRzZxbWzkyVaYwpmHqx9Bh4vURc6KMoiCuF2bLQcbI+CqMw4trnGSo7T4V75f2eUYjhtDlzRoT20F7OjuaBQYzmqCATBiwAu5la7hNQQNDgArrVUeKK6QdGpt55AfMFVSEahImmR4TbeEtbfsjHhneoR1vBWEX1QPiMg= ;{id = 42393} 07686F7473706F74096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009B90771111D8F03BA8C14F53A07887E914B6C52D9883C43875F8CE171101C38A1E115D5B5670F4831DE9A2E3EC78B812F77BE650F8434B46483AA8EAD2975A6D9AE2A928E083FAF95B9AF578DC9C781A4BAF091573F6E79A1EED096FBB6CE14541AC5E59E5EFC8AC4235E2F33564A81368226D25829E193E4DDD3E65AA9DC0BE hotspot.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. m5B3ERHY8DuowU9ToHiH6RS2xS2Yg8Q4dfjOFxEBw4oeEV1bVnD0gx3pouPseLgS93vmUPhDS0ZIOqjq0pdabZriqSjgg/r5W5r1eNyceBpLrwkVc/bnmh7tCW+7bOFFQaxeWeXvyKxCNeLzNWSoE2gibSWCnhk+Td0+ZaqdwL4= ;{id = 42393} 07686F7473706F74096E6C6E65746C616273026E6C00002F000100000E10001F08687032303535646E096E6C6E65746C616273026E6C000006040000000003 hotspot.nlnetlabs.nl. 3600 IN NSEC hp2055dn.nlnetlabs.nl. CNAME RRSIG NSEC 08687032303535646E096E6C6E65746C616273026E6C0000010001000027D80004D59AE024 hp2055dn.nlnetlabs.nl. 10200 IN A 213.154.224.36 08687032303535646E096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009600BB855C98ACBD69C4610376D02E01423F4A012E41C7770E558675DAB59FFFEF5EB0A3DB0F2F8A43503F394D6FA10ED6B27B2F2BF7DE1B56566CF0A4524FED4D293C3633AB0A665DAF001CB20E542A0D105E1353D7759559F9ED5D4B9943FB0F528EF5F6CFC9B60FC5192D7E4B63B7489B09438D667F78F206FEA1CB95B84A hp2055dn.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lgC7hVyYrL1pxGEDdtAuAUI/SgEuQcd3DlWGddq1n//vXrCj2w8vikNQPzlNb6EO1rJ7Lyv33htWVmzwpFJP7U0pPDYzqwpmXa8AHLIOVCoNEF4TU9d1lVn57V1LmUP7D1KO9fbPybYPxRktfktjt0ibCUONZn948gb+ocuVuEo= ;{id = 42393} 08687032303535646E096E6C6E65746C616273026E6C00002E0001000027D800A000100803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A70FF704477C363BBF7021E715690647260AFDAA7096308F286C698EA86807C5D2C8E646D7BAAD85AC857277BDCFC858C8F01521F77478D773227833FC755C3CB1CEA1268F5B1FC4A153EC46282B6DD94DDF69901EA25A07779084929B83F254F4FDC4875EF5A5C9A88BCD4A5CE3159C9326FB23D86876022C2170B96C32595E hp2055dn.nlnetlabs.nl. 10200 IN RRSIG TXT 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pw/3BEd8Nju/cCHnFWkGRyYK/apwljCPKGxpjqhoB8XSyOZG17qthayFcne9z8hYyPAVIfd0eNdzIngz/HVcPLHOoSaPWx/EoVPsRigrbdlN32mQHqJaB3eQhJKbg/JU9P3Eh171pcmoi81KXOMVnJMm+yPYaHYCLCFwuWwyWV4= ;{id = 42393} 08687032303535646E096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004222DC8AFC8D33AFD4F09D3BA34A8A64B16DA9E59F76C53C2BAA40D071D98F770BF5EC3646656F1B7ABE65D809EADA98F90579EBE1B0586F57745F70490D000D4C59A851C3CE9CD9DA67E276F1ECB30CB9EDB1D4F8C57BC0B77FC1959819830266C2FD77F2B0E8CAD1D33B6098B33C244272EC32A54BBBAA46C930F5A0E1C065 hp2055dn.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QiLcivyNM6/U8J07o0qKZLFtqeWfdsU8K6pA0HHZj3cL9ew2RmVvG3q+ZdgJ6tqY+QV56+GwWG9XdF9wSQ0ADUxZqFHDzpzZ2mfidvHsswy57bHU+MV7wLd/wZWYGYMCZsL9d/Kw6MrR0ztgmLM8JEJy7DKlS7uqRskw9aDhwGU= ;{id = 42393} 08687032303535646E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A2184618AE6AC8996C3BF1A42CC05B3FC46809951CF31F72634DE57EDE1FB563D1ECB79F4B840F2AA90FEE63E3F176D7418E63262D306329352E5AE5628DAC97216EE9DBD704540182D04360EBBEF15B635BC6C01DF655F5D694F6A1E1BDDFF76E2E8C7BC5A71B39C4E13BA6B9F8DCE0EE5175F0E4DB1C3296B697A805F7F06A hp2055dn.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ohhGGK5qyJlsO/GkLMBbP8RoCZUc8x9yY03lft4ftWPR7LefS4QPKqkP7mPj8XbXQY5jJi0wYyk1LlrlYo2slyFu6dvXBFQBgtBDYOu+8VtjW8bAHfZV9daU9qHhvd/3bi6Me8WnGznE4Tumufjc4O5RdfDk2xwylraXqAX38Go= ;{id = 42393} 08687032303535646E096E6C6E65746C616273026E6C0000100001000027D80014134850204C617365724A6574205032303535646E hp2055dn.nlnetlabs.nl. 10200 IN TXT "HP LaserJet P2055dn" 08687032303535646E096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600011EC1DEFFFE81FE6F hp2055dn.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:1ec1:deff:fe81:fe6f 08687032303535646E096E6C6E65746C616273026E6C00002F000100000E10001A03696162096E6C6E65746C616273026E6C000006400080080003 hp2055dn.nlnetlabs.nl. 3600 IN NSEC iab.nlnetlabs.nl. A TXT AAAA RRSIG NSEC 03696162096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 iab.nlnetlabs.nl. 10200 IN A 213.154.224.1 03696162096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00053A36D395B919FBE0D650B00D9D3D4227A2BBA490C2F66F44BFEEF61FD82B812542DFEA4CEED337C5EF8DBF53DD17B142460DBF82578E4F7953AC033FEE8891CFC01C73A76DC328DDBEB776A0F9E50460408A23533FABA69482BCEFBE471462F271EBA80857B3E69F1573710F1E3D897E7A09164C77754848689E8B24B1EF61 iab.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. BTo205W5Gfvg1lCwDZ09Qieiu6SQwvZvRL/u9h/YK4ElQt/qTO7TN8Xvjb9T3RexQkYNv4JXjk95U6wDP+6Ikc/AHHOnbcMo3b63dqD55QRgQIojUz+rppSCvO++RxRi8nHrqAhXs+afFXNxDx49iX56CRZMd3VISGieiySx72E= ;{id = 42393} 03696162096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00959FF726FA840C877EC78C65FD2BA01D08411EE8525CFFF16AA70DC96AA3973BF30A891E21F9ECF4B7D04A1A42EF058017B041EBC6437964B0A15E7EF3C191493856F46FA42AED57636F8957FE9AA98B21B11BCA97D387FD17B0D96240AAD156188FF35CC4CCEE6214BDBA8E26049F0BF9BD3A7E3B4615A80F456FDA2B14E526 iab.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lZ/3JvqEDId+x4xl/SugHQhBHuhSXP/xaqcNyWqjlzvzCokeIfns9LfQShpC7wWAF7BB68ZDeWSwoV5+88GRSThW9G+kKu1XY2+JV/6aqYshsRvKl9OH/Rew2WJAqtFWGI/zXMTM7mIUvbqOJgSfC/m9On47RhWoD0Vv2isU5SY= ;{id = 42393} 03696162096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0048FA38B89B4644286B4F5514B9990C717AB26062291CB86E5C01D4080FA14CDA2044D58658AB8345534ED2465DC62CCD1C40372D01677AB1421DB4AA4C7105C00D4AB2D5F9EB288F7B75BFB9C5CE278CF1C0C953288847204B158B3F3B27145086DB0543554F59C152149B1D9B0ABA53F0B657E5DCBF395090A6147CBB8926C0 iab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SPo4uJtGRChrT1UUuZkMcXqyYGIpHLhuXAHUCA+hTNogRNWGWKuDRVNO0kZdxizNHEA3LQFnerFCHbSqTHEFwA1KstX56yiPe3W/ucXOJ4zxwMlTKIhHIEsViz87JxRQhtsFQ1VPWcFSFJsdmwq6U/C2V+XcvzlQkKYUfLuJJsA= ;{id = 42393} 03696162096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 iab.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 03696162096E6C6E65746C616273026E6C00002F000100000E10001E0377777703696162096E6C6E65746C616273026E6C000006400000080003 iab.nlnetlabs.nl. 3600 IN NSEC www.iab.nlnetlabs.nl. A AAAA RRSIG NSEC 0377777703696162096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 www.iab.nlnetlabs.nl. 10200 IN A 213.154.224.1 0377777703696162096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C1E9779DCC2802892C455FB510897713378E76A4F8B7B0BFC7732CEC92CC1D5E5B050933C40D85AA880CD492F580212B318F711CF714BB51C86003B10C799E91BA5FCC28E6F75C04AD57E1EB605993E835FF8E64FD946C33B825AA87824CEFF06F0BBE4AD6C447BEBB86109E6951D27D57F3D70F341DC75D749CD3B055AB7C01 www.iab.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wel3ncwoAoksRV+1EIl3EzeOdqT4t7C/x3Ms7JLMHV5bBQkzxA2FqogM1JL1gCErMY9xHPcUu1HIYAOxDHmekbpfzCjm91wErVfh62BZk+g1/45k/ZRsM7glqoeCTO/wbwu+StbER767hhCeaVHSfVfz1w80HcdddJzTsFWrfAE= ;{id = 42393} 0377777703696162096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0040C8E9F0417265693A79AB3E4B5C5E10CFEC1894C2A383852F92956ED13DF2D1B3A436A921046A49EC252DD27290E76499C80EB7B8AA692FE2517DF6BAA510C12B1C8B9B6D5F94834E516343589829025232B2529514E82A378AC570AC82D00B3854EF0F2840CE7EE1BC462AAE6B9D6DCD3625784D538CD92C872F26D0E6CE1D www.iab.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QMjp8EFyZWk6eas+S1xeEM/sGJTCo4OFL5KVbtE98tGzpDapIQRqSewlLdJykOdkmcgOt7iqaS/iUX32uqUQwSsci5ttX5SDTlFjQ1iYKQJSMrJSlRToKjeKxXCsgtALOFTvDyhAzn7hvEYqrmudbc02JXhNU4zZLIcvJtDmzh0= ;{id = 42393} 0377777703696162096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0021B15FEEE05802DC01795D78BAE977D838C0FDEE35B61D928C2F3B542479A8C5FC4968D3C4B13AE86389BA7E4872521CD076C02AB247B3BDF174EFF070CF0DD405FD3A28C740FDA9A6578C020150150B102654F81740E45E5F1A9FF445BF35ECD4D4D56818CEF340CC73D0D19F888C6C69A9A1C6DA60E9EEBE48A197C454C2E7 www.iab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IbFf7uBYAtwBeV14uul32DjA/e41th2SjC87VCR5qMX8SWjTxLE66GOJun5IclIc0HbAKrJHs73xdO/wcM8N1AX9OijHQP2ppleMAgFQFQsQJlT4F0DkXl8an/RFvzXs1NTVaBjO80DMc9DRn4iMbGmpocbaYOnuvkihl8RUwuc= ;{id = 42393} 0377777703696162096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 www.iab.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 0377777703696162096E6C6E65746C616273026E6C00002F000100000E10001B0469616E61096E6C6E65746C616273026E6C000006400000080003 www.iab.nlnetlabs.nl. 3600 IN NSEC iana.nlnetlabs.nl. A AAAA RRSIG NSEC 0469616E61096E6C6E65746C616273026E6C0000010001000027D80004D59AE080 iana.nlnetlabs.nl. 10200 IN A 213.154.224.128 0469616E61096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006240B45897B807FC578081053B31BF4A4F5DFD531D26D20D472743315A5C4395F6588E50700DDC0A78B66921EC92B6B805224F4A74963C8F15050F1E10381D16C483994D25A0E9F974950ACA0A9969BEFADDD76DEE84C02A6A0EF5E3E38BD485C2577F780379D5CCBC01C72E86D33741A526854B9CDB00D308EAE7BE5818080D iana.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YkC0WJe4B/xXgIEFOzG/Sk9d/VMdJtINRydDMVpcQ5X2WI5QcA3cCni2aSHskra4BSJPSnSWPI8VBQ8eEDgdFsSDmU0loOn5dJUKygqZab763ddt7oTAKmoO9ePji9SFwld/eAN51cy8AccuhtM3QaUmhUuc2wDTCOrnvlgYCA0= ;{id = 42393} 0469616E61096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00BC2AF01CAD3D5AC57E8885578D69ACE598C2C4E1E4375C97BEE53472EE539AF43B734771BA35E0EB1433FCEC49B2BF5D60FAA231A473F2A4DFE0E2F3DE2098B2C605761069E3677FFA38B38E9BF7AAC45D184A6BBCAB0F43DF854678A3486A1BCDAC9B8D27C937A995F44712D09292D9D5FFCA1A434C8C33A9802C8FE84970D9 iana.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. vCrwHK09WsV+iIVXjWms5ZjCxOHkN1yXvuU0cu5TmvQ7c0dxujXg6xQz/OxJsr9dYPqiMaRz8qTf4OLz3iCYssYFdhBp42d/+jizjpv3qsRdGEprvKsPQ9+FRnijSGobzaybjSfJN6mV9EcS0JKS2dX/yhpDTIwzqYAsj+hJcNk= ;{id = 42393} 0469616E61096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C1C7B14543D6C6DA2DAA4E68F70005265AE7607A2157C93F069372109B9BF2CB0899BDA38A4B7C61CAFF7FBC0E66CCF4E9C14728DBC593FBCBCDF390F3049505F228F0F4D735FAC0D3402D15269005D7BE5D20ACABAF7945CC9CBC39542221E8361CFE7A7BCE4289295D5EAC99DC00FCA21DF0838DC10C7A82584A386CC03DFB iana.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wcexRUPWxtotqk5o9wAFJlrnYHohV8k/BpNyEJub8ssImb2jikt8Ycr/f7wOZsz06cFHKNvFk/vLzfOQ8wSVBfIo8PTXNfrA00AtFSaQBde+XSCsq695RcycvDlUIiHoNhz+envOQokpXV6smdwA/KId8IONwQx6glhKOGzAPfs= ;{id = 42393} 0469616E61096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00CAAFD051202FAEE9BD1BA6F9A66D864AD78E57078260653490C9F55CC6CF429CC83DD5F42568FDE26BF3108B5FA79BF524BDB2B2AB2920B447C43DEFF27A6D7125E885A46EC088ADE01065C2512837D62E9E4D6D059E9085A8DD2A12E5E5BF8F484D559DF16D1FE31B66211A81143FF718A9D9E83D36F14C8043D661CCA615C3 iana.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. yq/QUSAvrum9G6b5pm2GSteOVweCYGU0kMn1XMbPQpzIPdX0JWj94mvzEItfp5v1JL2ysqspILRHxD3v8nptcSXohaRuwIit4BBlwlEoN9Yunk1tBZ6QhajdKhLl5b+PSE1VnfFtH+MbZiEagRQ/9xip2eg9NvFMgEPWYcymFcM= ;{id = 42393} 0469616E61096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000128 iana.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::128 0469616E61096E6C6E65746C616273026E6C00002C0001000027D80016010191DB62C36C051F0E6414FA1F5BF9678E6C554DBF iana.nlnetlabs.nl. 10200 IN SSHFP 1 1 91DB62C36C051F0E6414FA1F5BF9678E6C554DBF 0469616E61096E6C6E65746C616273026E6C00002C0001000027D800160201138764C92D6A727F6EAD120826333A43788217E4 iana.nlnetlabs.nl. 10200 IN SSHFP 2 1 138764C92D6A727F6EAD120826333A43788217E4 0469616E61096E6C6E65746C616273026E6C00002F000100000E10001B046963616C096E6C6E65746C616273026E6C00000640000008000B iana.nlnetlabs.nl. 3600 IN NSEC ical.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 046963616C096E6C6E65746C616273026E6C0000010001000027D80004D59AE01E ical.nlnetlabs.nl. 10200 IN A 213.154.224.30 046963616C096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005DD9018C3EA2D707609258E924F882C0E4D9090C252316F8DDBAAC7112CA1CEF9AA015135EDF79B7185EB11C227C7CA7FE0259704B631AEFED7360999756DC0C1856C70256AEBDEF5C9F0E9DFE3EBA3E90C6D313BEC12D203EC284CF1F52544865AFB5E498F682F7A28F71A1145E57343FC02EF9AD992183050EAF66F16AFB30 ical.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. XdkBjD6i1wdgkljpJPiCwOTZCQwlIxb43bqscRLKHO+aoBUTXt95txhesRwifHyn/gJZcEtjGu/tc2CZl1bcDBhWxwJWrr3vXJ8Onf4+uj6QxtMTvsEtID7ChM8fUlRIZa+15Jj2gveij3GhFF5XND/ALvmtmSGDBQ6vZvFq+zA= ;{id = 42393} 046963616C096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009F80EF38F75E4DE31E884F25955D365FF77E0A7479485F82FA1AAE348E4A988106F3AF4819CDA503A7FF38BF646AFBB085E1167FE1110722A9734A175779DB2AD0AC22E820CC45FAE8DCF09D25BEDFCB8BA8A289FF3084F2E82A91318D6561B81D9924771A19B9837C7D2878ECD9BF59FE0CAA451406058826B1D7D9337307D3 ical.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. n4DvOPdeTeMeiE8llV02X/d+CnR5SF+C+hquNI5KmIEG869IGc2lA6f/OL9kavuwheEWf+ERByKpc0oXV3nbKtCsIuggzEX66NzwnSW+38uLqKKJ/zCE8ugqkTGNZWG4HZkkdxoZuYN8fSh47Nm/Wf4MqkUUBgWIJrHX2TNzB9M= ;{id = 42393} 046963616C096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008348A95B85EA6F5DD3DEFBC7034A316A8A3FBD0D95210F9215BEB16F0BBA2028BFA9B05F66D9F428156A37834327D36E20DD28E7D448D78E793383958FC06D94E8657723FD7DE77340677C0595E566D2D0ED74E0F7FD91B164DD6222C7FB18030AB9A56AE8E0C39D5CB1654DF92AD3DB8CC19D7FC4180A8B48F4B197BFC4667E ical.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. g0ipW4Xqb13T3vvHA0oxaoo/vQ2VIQ+SFb6xbwu6ICi/qbBfZtn0KBVqN4NDJ9NuIN0o59RI1455M4OVj8BtlOhldyP9fedzQGd8BZXlZtLQ7XTg9/2RsWTdYiLH+xgDCrmlaujgw51csWVN+SrT24zBnX/EGAqLSPSxl7/EZn4= ;{id = 42393} 046963616C096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021E52FFFEF39000 ical.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21e:52ff:fef3:9000 046963616C096E6C6E65746C616273026E6C00002F000100000E10001A03696969096E6C6E65746C616273026E6C000006400000080003 ical.nlnetlabs.nl. 3600 IN NSEC iii.nlnetlabs.nl. A AAAA RRSIG NSEC 03696969096E6C6E65746C616273026E6C0000010001000027D80004D59AE090 iii.nlnetlabs.nl. 10200 IN A 213.154.224.144 03696969096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009A464050C213F095D2F9F9D15A04FDF5397F7E2C86B143253EBF31D9CF4155BDE4EAF692A98493AD29CB3532BCC895E0017801DB21EEDC4DFD2DFA4C9775FF2CCF2B0DB3C72C0C8BE760B2041D51042BF98C1D78582C169E7457777E20D062B7E442517E360F65E69A476DD46A2475796670ED76C978030B290FA77937E50D0A iii.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. mkZAUMIT8JXS+fnRWgT99Tl/fiyGsUMlPr8x2c9BVb3k6vaSqYSTrSnLNTK8yJXgAXgB2yHu3E39LfpMl3X/LM8rDbPHLAyL52CyBB1RBCv5jB14WCwWnnRXd34g0GK35EJRfjYPZeaaR23UaiR1eWZw7XbJeAMLKQ+neTflDQo= ;{id = 42393} 03696969096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00599E5CB5434EEACF73F8870FD56D2B70C61CEFC4BC8421A3DA3FE13B542D290C7E657C1C57A635355B9D8F5DA6F7B7C43940B32F8434977FFB735B43F675078E9B891D820075622AB07BE2605486205663DE7A67ADF341373C0E5CDCA046224D3D1B65BBA72BE16E0FA98459027D87C529EF949BB310DFFEC0881781DB8BC54D iii.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WZ5ctUNO6s9z+IcP1W0rcMYc78S8hCGj2j/hO1QtKQx+ZXwcV6Y1NVudj12m97fEOUCzL4Q0l3/7c1tD9nUHjpuJHYIAdWIqsHviYFSGIFZj3npnrfNBNzwOXNygRiJNPRtlu6cr4W4PqYRZAn2HxSnvlJuzEN/+wIgXgduLxU0= ;{id = 42393} 03696969096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001E57E51C740B77B358C4134BEBC7178887801736268C54D17F6CC00502DC4AA87AA5EB35BFB56CDF49C7BFD4E05060A4DFB6FB9BA54193E10B5ACF5C95C5F1C156F3556E108CED4D1A9E9553F63DE8685EC91D63CAB84644B2DBAA0E7CB807F1DBCC3FF8D968DC8977833B13C1ED5E1547BF233638BBB9CBB55D511FD2A4C3FE iii.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HlflHHQLd7NYxBNL68cXiIeAFzYmjFTRf2zABQLcSqh6pes1v7Vs30nHv9TgUGCk37b7m6VBk+ELWs9clcXxwVbzVW4QjO1NGp6VU/Y96GheyR1jyrhGRLLbqg58uAfx28w/+Nlo3Il3gzsTwe1eFUe/IzY4u7nLtV1RH9Kkw/4= ;{id = 42393} 03696969096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0041CEC2E2AABEE39FC0ECC680124A0F8B6EB9E5C5A13AEF4F2C30F088AFD4F6D5B556C8B9D3DD243659E1CB11077C894ED2D76B975363F7EB94C0AAB8CFE4AEE81A491309764B472BD7323D5AF6D92B7CBEC833B57CD3749C77C012157E5AD782406F786A4184756A833F2ED19E94A244C6DBB4E5B83A2F7418EAA3B86E9F7A0C iii.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Qc7C4qq+45/A7MaAEkoPi2655cWhOu9PLDDwiK/U9tW1Vsi5090kNlnhyxEHfIlO0tdrl1Nj9+uUwKq4z+Su6BpJEwl2S0cr1zI9WvbZK3y+yDO1fNN0nHfAEhV+WteCQG94akGEdWqDPy7RnpSiRMbbtOW4Oi90GOqjuG6fegw= ;{id = 42393} 03696969096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF002600000000 iii.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:26:: 03696969096E6C6E65746C616273026E6C00002C0001000027D800160101F378328FC941C9113DB75669A5A42F6C3CF577D3 iii.nlnetlabs.nl. 10200 IN SSHFP 1 1 F378328FC941C9113DB75669A5A42F6C3CF577D3 03696969096E6C6E65746C616273026E6C00002C0001000027D8001602019B85990B00B395A4DF5E5FA0E29E262BDDD7A148 iii.nlnetlabs.nl. 10200 IN SSHFP 2 1 9B85990B00B395A4DF5E5FA0E29E262BDDD7A148 03696969096E6C6E65746C616273026E6C00002C0001000027D800160301512D31550546D1DB31D6467D4E67D87207939981 iii.nlnetlabs.nl. 10200 IN SSHFP 3 1 512D31550546D1DB31D6467D4E67D87207939981 03696969096E6C6E65746C616273026E6C00002F000100000E100024045F343433045F74637003696969096E6C6E65746C616273026E6C00000640000008000B iii.nlnetlabs.nl. 3600 IN NSEC _443._tcp.iii.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 045F343433045F74637003696969096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _443._tcp.iii.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343433045F74637003696969096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C000815F2EA57F744DC562F0D39C52BB01FEA8084CFE58D66AA217CE487087B930CBFDFF6108D592D1A799730FF4868237E89C8583CC17039C299B3C1155CD95D39F84A97F6B9697B43C521DED571EC27E2A67902F353F20820D6E3890E679083DB95046BF3AC50FD4FFC252A33A03B9C0295B5943F144C5373834CDD527AE377A3 _443._tcp.iii.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CBXy6lf3RNxWLw05xSuwH+qAhM/ljWaqIXzkhwh7kwy/3/YQjVktGnmXMP9IaCN+ichYPMFwOcKZs8EVXNldOfhKl/a5aXtDxSHe1XHsJ+KmeQLzU/IIINbjiQ5nkIPblQRr86xQ/U/8JSozoDucApW1lD8UTFNzg0zdUnrjd6M= ;{id = 42393} 045F343433045F74637003696969096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0034CCFA35A40B97C564BF9E7FB96BABDB6239C6476DAF4065014CC16CCADA18C8962A48758103919E8A3E20055653731FFEFF1602C73CC9F2D43F24388789B639C4FA736327DE385C3C71C3851379EAC04B4E75DD84256A123E3BFBDD82256B9C4DEB7330725389CEFA8600CD0A30AF27D16CEDDCBE1DA08D8C4B5D9DF643615F _443._tcp.iii.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. NMz6NaQLl8Vkv55/uWur22I5xkdtr0BlAUzBbMraGMiWKkh1gQORnoo+IAVWU3Mf/v8WAsc8yfLUPyQ4h4m2OcT6c2Mn3jhcPHHDhRN56sBLTnXdhCVqEj47+92CJWucTetzMHJTic76hgDNCjCvJ9Fs7dy+HaCNjEtdnfZDYV8= ;{id = 42393} 045F343433045F74637003696969096E6C6E65746C616273026E6C00002F000100000E10001B04696D6170096E6C6E65746C616273026E6C000006040000000003 _443._tcp.iii.nlnetlabs.nl. 3600 IN NSEC imap.nlnetlabs.nl. CNAME RRSIG NSEC 04696D6170096E6C6E65746C616273026E6C0000050001000027D80013046F70656E096E6C6E65746C616273026E6C00 imap.nlnetlabs.nl. 10200 IN CNAME open.nlnetlabs.nl. 04696D6170096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009A205F36B4FF9F4D3B9EDC270B1912A742CE704929A28E54CEF136E134D2C56B19C51D1C12AAB5B3A9F8DA431C7A3903A8C73FC32EA68EA64B177835E97F1B7E1FE540A2E5693864719E7F2FAEC2847EA83B3CF1FC76C1DE489DA1659767609D061A0BB8C89BCBF877EFC9A43586E66E5D5CC49BB0FCD3E59481A6FE36E6FBD3 imap.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. miBfNrT/n007ntwnCxkSp0LOcEkpoo5UzvE24TTSxWsZxR0cEqq1s6n42kMcejkDqMc/wy6mjqZLF3g16X8bfh/lQKLlaThkcZ5/L67ChH6oOzzx/HbB3kidoWWXZ2CdBhoLuMiby/h378mkNYbmbl1cxJuw/NPllIGm/jbm+9M= ;{id = 42393} 04696D6170096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C005C49D0F1A5B2449C2CD5EF06953F190BB74E8DFE6FA17DA679B66CFDD85E1A02B14F9641D0DB013033B3850958886F146B51F66B6904650817E2760941C466CA48C6743EC82C1B1F27BCF32D03BAE0A9D62AFF7401EE4D18AA4348054E235D0B815CEC9FDAB7EF943603755EA17C04FB5A98214C696634D0D5D6382AD98A1572 imap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. XEnQ8aWyRJws1e8GlT8ZC7dOjf5voX2mebZs/dheGgKxT5ZB0NsBMDOzhQlYiG8Ua1H2a2kEZQgX4nYJQcRmykjGdD7ILBsfJ7zzLQO64KnWKv90Ae5NGKpDSAVOI10LgVzsn9q375Q2A3VeoXwE+1qYIUxpZjTQ1dY4KtmKFXI= ;{id = 42393} 04696D6170096E6C6E65746C616273026E6C00002F000100000E100025045F393933045F74637004696D6170096E6C6E65746C616273026E6C000006040000000003 imap.nlnetlabs.nl. 3600 IN NSEC _993._tcp.imap.nlnetlabs.nl. CNAME RRSIG NSEC 045F393933045F74637004696D6170096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _993._tcp.imap.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F393933045F74637004696D6170096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0089357A96D3CFA7BB159A7A7953EFB746A200355B06F1F778EEC1050AE59D0D080802F9E2882743C3D4FABF74E1C2563E5A5CDD5569B5B06FFD0D4F975C5AA5760A8542B978E64E597EE3E572834BFD421E3C91D7813E7E342FBBE16C08AB4CB535EC9404FCD5904BA31CB4C413749D21CF43AAB3B2CB0752F2E8B82C5BB6F0AB _993._tcp.imap.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iTV6ltPPp7sVmnp5U++3RqIANVsG8fd47sEFCuWdDQgIAvniiCdDw9T6v3ThwlY+WlzdVWm1sG/9DU+XXFqldgqFQrl45k5ZfuPlcoNL/UIePJHXgT5+NC+74WwIq0y1NeyUBPzVkEujHLTEE3SdIc9DqrOyywdS8ui4LFu28Ks= ;{id = 42393} 045F393933045F74637004696D6170096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C006938721FE0303D5611AF6C07FA8C5AE562BDE86CAEDDB63EB93862EFCBB8FD8749D682FF10E43DA18E038B8BF5D924C6AEB634D134D76D9E4BC77F52BAD2AE4E2288588381BCCED17CBE16EAC5F1160F203534FE5B5620E67FF3D005AB8A6DBCF7982864257A35A5B167C55CFF88CEBA9EA5283A1AD6CCA3698EBD43F3C8D34C _993._tcp.imap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. aThyH+AwPVYRr2wH+oxa5WK96Gyu3bY+uThi78u4/YdJ1oL/EOQ9oY4Di4v12STGrrY00TTXbZ5Lx39SutKuTiKIWIOBvM7RfL4W6sXxFg8gNTT+W1Yg5n/z0AWrim2895goZCV6NaWxZ8Vc/4jOup6lKDoa1syjaY69Q/PI00w= ;{id = 42393} 045F393933045F74637004696D6170096E6C6E65746C616273026E6C00002F000100000E10001C056970646E73096E6C6E65746C616273026E6C000006040000000003 _993._tcp.imap.nlnetlabs.nl. 3600 IN NSEC ipdns.nlnetlabs.nl. CNAME RRSIG NSEC 056970646E73096E6C6E65746C616273026E6C0000020001000027D80016076D65726D616964096E6C6E65746C616273026E6C00 ipdns.nlnetlabs.nl. 10200 IN NS mermaid.nlnetlabs.nl. 056970646E73096E6C6E65746C616273026E6C00002F000100000E100028055F35323232045F746370066A6162626572096E6C6E65746C616273026E6C000006200000000003 ipdns.nlnetlabs.nl. 3600 IN NSEC _5222._tcp.jabber.nlnetlabs.nl. NS RRSIG NSEC 056970646E73096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00432F4A0B9BE3F7D058BDE02F6E6A3531C38CB1330D6C59D904A9B5B6F420EFDFC75799A34B4774F6A0F49B9023D3765BE9256454B2053EF3A0CEC850F8C65610C8D85BBC88C7F0EC13CDD3BEA2507AEFEEBCB86C4C2003C97008F5BE1F113C02870BD567F613816E2F602CF25C2842E7F449A2281344D9981C0C0BADB40A3739 ipdns.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Qy9KC5vj99BYveAvbmo1McOMsTMNbFnZBKm1tvQg79/HV5mjS0d09qD0m5Aj03Zb6SVkVLIFPvOgzshQ+MZWEMjYW7yIx/DsE83TvqJQeu/uvLhsTCADyXAI9b4fETwChwvVZ/YTgW4vYCzyXChC5/RJoigTRNmYHAwLrbQKNzk= ;{id = 42393} 055F35323232045F746370066A6162626572096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _5222._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 055F35323232045F746370066A6162626572096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009EDB5269A813F5BC66E191794CB72D0A3558E7645094435FD9216B8D3DB999A377DF1DA37D44C101882A8D62C943F815E94C3E99F25F2D943290551E3BD24EAF08C151A8187006BCE55730FE09A33565B46224231B000679086E487F9501475BDFB0E2D3FE895ED6AA1603E3D8E47446F8AB7C1D7A3BE39835EA7E62E6580E84 _5222._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nttSaagT9bxm4ZF5TLctCjVY52RQlENf2SFrjT25maN33x2jfUTBAYgqjWLJQ/gV6Uw+mfJfLZQykFUeO9JOrwjBUagYcAa85Vcw/gmjNWW0YiQjGwAGeQhuSH+VAUdb37Di0/6JXtaqFgPj2OR0RvirfB16O+OYNep+YuZYDoQ= ;{id = 42393} 055F35323232045F746370066A6162626572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0042C473E0207E9D3E8FC2C30DB9A6BD625C067A9A7598181D41E8DD2172220C061AB3AF442738E617D748CC26CC836C63B428F40FE34501D81736571538712CD1AFDA4817263C157934961419F10531E8E0E28667B75A687E1FDD985F8FAF9CB6B108835B227DD134D62ED1301A26D9004742199016C78FED6DA91DEBBE5F7F8B _5222._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. QsRz4CB+nT6PwsMNuaa9YlwGepp1mBgdQejdIXIiDAYas69EJzjmF9dIzCbMg2xjtCj0D+NFAdgXNlcVOHEs0a/aSBcmPBV5NJYUGfEFMejg4oZnt1pofh/dmF+Pr5y2sQiDWyJ90TTWLtEwGibZAEdCGZAWx4/tbakd675ff4s= ;{id = 42393} 055F35323232045F746370066A6162626572096E6C6E65746C616273026E6C00002F000100000E100028055F35323233045F746370066A6162626572096E6C6E65746C616273026E6C000006040000000003 _5222._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC _5223._tcp.jabber.nlnetlabs.nl. CNAME RRSIG NSEC 055F35323233045F746370066A6162626572096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _5223._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 055F35323233045F746370066A6162626572096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0015CD894A7634EAF2525BEEA2FDB14D08D7BE56B0D0170A7904B132C2568DC44DC4056BAC8DCBD35235B6E8343675F64DED1DDC6F6D5583A0548B6EAD7157FA3494F301A9F4E0FFB4B7811D7F200C42513DDAA60C788492C85B6E620666DCC225546EC747D272D173A0B1992A41270D3FDB894C525E8E2DB2319672B4D05D7A31 _5223._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Fc2JSnY06vJSW+6i/bFNCNe+VrDQFwp5BLEywlaNxE3EBWusjcvTUjW26DQ2dfZN7R3cb21Vg6BUi26tcVf6NJTzAan04P+0t4EdfyAMQlE92qYMeISSyFtuYgZm3MIlVG7HR9Jy0XOgsZkqQScNP9uJTFJeji2yMZZytNBdejE= ;{id = 42393} 055F35323233045F746370066A6162626572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002334DA12FB777FA8C06CCF27A875EC6074A91EC1E49BDC7286554724A39FC9187E1CEB60AD0B90C4627F0722788D4A1FAC6A1D8C3A7B376B40F21B36EF03215DA60F4CF82D6D443636B896ABAC1A13071A3FE4F8842A57C18E87E590217AF31611151D336268BFC6F1DAED441037637A781DBC3D6B4F3644A0E7BC6F91F0634E _5223._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IzTaEvt3f6jAbM8nqHXsYHSpHsHkm9xyhlVHJKOfyRh+HOtgrQuQxGJ/ByJ4jUofrGodjDp7N2tA8hs27wMhXaYPTPgtbUQ2NriWq6waEwcaP+T4hCpXwY6H5ZAhevMWERUdM2Jov8bx2u1EEDdjengdvD1rTzZEoOe8b5HwY04= ;{id = 42393} 055F35323233045F746370066A6162626572096E6C6E65746C616273026E6C00002F000100000E100028055F35323639045F746370066A6162626572096E6C6E65746C616273026E6C000006040000000003 _5223._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC _5269._tcp.jabber.nlnetlabs.nl. CNAME RRSIG NSEC 055F35323639045F746370066A6162626572096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _5269._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 055F35323639045F746370066A6162626572096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0037F7F05CC4FF9601C684D528E790E0583BA42260470F176A04A09AB51AD251A800966D50C92D980A662FC6320D3423E7A8623F9FD3E49A8E9C2A5AF68783D2E7606968BBABC0C6D0B6AA81B9402ED1741B8D149572DA3FE8B2AFED56172B2E7AE073C4A42AED54817C50989208193E12E6ADF6FD44E156417F892981C12A0ECB _5269._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. N/fwXMT/lgHGhNUo55DgWDukImBHDxdqBKCatRrSUagAlm1QyS2YCmYvxjINNCPnqGI/n9Pkmo6cKlr2h4PS52BpaLurwMbQtqqBuUAu0XQbjRSVcto/6LKv7VYXKy564HPEpCrtVIF8UJiSCBk+Euat9v1E4VZBf4kpgcEqDss= ;{id = 42393} 055F35323639045F746370066A6162626572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00AFC6311134827FDA41941B5D4FC0B4953BA097BE5D94950FDCB3B3CD5781301208517E5D73B1AEE8ED50055F0ED4634E1C6DE248C5EE05E52AF0F1833FE4196AF0254CF50719E1FF9B62734ED082F45080E7D6FCF3153523FC11F393D768FC08BE673A051BFD58579F634E520EDF2A355ABDED8B869C43A2F242858491BAA15D _5269._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. r8YxETSCf9pBlBtdT8C0lTugl75dlJUP3LOzzVeBMBIIUX5dc7Gu6O1QBV8O1GNOHG3iSMXuBeUq8PGDP+QZavAlTPUHGeH/m2JzTtCC9FCA59b88xU1I/wR85PXaPwIvmc6BRv9WFefY05SDt8qNVq97YuGnEOi8kKFhJG6oV0= ;{id = 42393} 055F35323639045F746370066A6162626572096E6C6E65746C616273026E6C00002F000100000E100028055F35323730045F746370066A6162626572096E6C6E65746C616273026E6C000006040000000003 _5269._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC _5270._tcp.jabber.nlnetlabs.nl. CNAME RRSIG NSEC 055F35323730045F746370066A6162626572096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _5270._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 055F35323730045F746370066A6162626572096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005432D7696AEDBC1C6F32DDD232B12901C87966EC8CE45463B67BB3D0D455D9DCB6A7BC31A4EBE017A12EEFC5E489FE1202E3F6CBFB5B36CE656180962B65E596265532F00C678EB2A79CD4B181E310781E252DEA5CD61FC6C212E437FA980A44F4983F62B67BB5870BA3ECCDDACE78726C8E19B9FDEC473540E5DF32BC932684 _5270._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VDLXaWrtvBxvMt3SMrEpAch5ZuyM5FRjtnuz0NRV2dy2p7wxpOvgF6Eu78Xkif4SAuP2y/tbNs5lYYCWK2XlliZVMvAMZ46yp5zUsYHjEHgeJS3qXNYfxsIS5Df6mApE9Jg/YrZ7tYcLo+zN2s54cmyOGbn97Ec1QOXfMryTJoQ= ;{id = 42393} 055F35323730045F746370066A6162626572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0054CD7B53BEAF6661E5808B5799B20B43C1015B5D2394BECDC014C08A7348A2DCD279CABC0DCC50C63D7EA424B3DD536361982F5B11CA09FDECD7E7AA23B54F152D04460AD910F3B1CF8A2978C2908F43C992E4FFA007C2864BF20D71D09EC33E9A75C6853742774D05FCBC76D24F46852FEEDE42D7576CAD029AD333B3936B83 _5270._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. VM17U76vZmHlgItXmbILQ8EBW10jlL7NwBTAinNIotzSecq8DcxQxj1+pCSz3VNjYZgvWxHKCf3s1+eqI7VPFS0ERgrZEPOxz4opeMKQj0PJkuT/oAfChkvyDXHQnsM+mnXGhTdCd00F/Lx20k9GhS/u3kLXV2ytAprTM7OTa4M= ;{id = 42393} 055F35323730045F746370066A6162626572096E6C6E65746C616273026E6C00002F000100000E10001D066B616D65656C096E6C6E65746C616273026E6C000006040000000003 _5270._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC kameel.nlnetlabs.nl. CNAME RRSIG NSEC 066B616D65656C096E6C6E65746C616273026E6C0000010001000027D80004D59AE08F kameel.nlnetlabs.nl. 10200 IN A 213.154.224.143 066B616D65656C096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009B6DCB5B672F13C920B23B4D193166188D053F669AA282EE9A590A6F49BF5C41E841A849BA233B43A8ED96FB64793409C392F840C5CF1B9BB9F1FA267CD31DFD9E1097D8DCA186E535E8823789E1BA705D01D292C6D8F148EB9785708C43AE784E3BCAE030FC3E4167FFDF330505EB7F47F0E5C9DC44B210FEFE1C26D2A85F51 kameel.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. m23LW2cvE8kgsjtNGTFmGI0FP2aaooLumlkKb0m/XEHoQahJuiM7Q6jtlvtkeTQJw5L4QMXPG5u58fomfNMd/Z4Ql9jcoYblNeiCN4nhunBdAdKSxtjxSOuXhXCMQ654TjvK4DD8PkFn/98zBQXrf0fw5cncRLIQ/v4cJtKoX1E= ;{id = 42393} 066B616D65656C096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006B87FF8142B438E453BB349AAA2C69FB684464A1AC4A76BE590375B7ED31DA2DA18F4B19E0D0F81F8958CA1BA6F7E8B2C08F844DF36C6A596672D978B76F4977204D8A8E14FD7B4EE0DC6B28E1FB686A50852E0387A2082C9737B921078FC764019E5FDEBE6921F9B3772F7DEEFA0712B94125971CA4D74CC4C101EC81412A58 kameel.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a4f/gUK0OORTuzSaqixp+2hEZKGsSna+WQN1t+0x2i2hj0sZ4ND4H4lYyhum9+iywI+ETfNsallmctl4t29JdyBNio4U/XtO4NxrKOH7aGpQhS4Dh6IILJc3uSEHj8dkAZ5f3r5pIfmzdy997voHErlBJZccpNdMxMEB7IFBKlg= ;{id = 42393} 066B616D65656C096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003B728FE6A735A6B5CA96023F06FAE17D0C4C33DD3AACE66CA3C9893FAEEDA0EF93970ED3EAE3C02F49A5CD21D918219219428156509F45A921B3F4591397B4B8082972E369B88299C20580DA0B39D6F25CC376F188575089B37A4586B000223B2A16736DD56F782131CB890720B262020FD4B6E7FCC6139740287EAB2F802AB4 kameel.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. O3KP5qc1prXKlgI/BvrhfQxMM906rOZso8mJP67toO+Tlw7T6uPAL0mlzSHZGCGSGUKBVlCfRakhs/RZE5e0uAgpcuNpuIKZwgWA2gs51vJcw3bxiFdQibN6RYawACI7KhZzbdVveCExy4kHILJiAg/Utuf8xhOXQCh+qy+AKrQ= ;{id = 42393} 066B616D65656C096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009BD718396D87CF5909F1C28EED15851C7DC57D3B31C632E6A9410E32FD8996E8082B3E782DF7921DE861637311288D90D3B4EE972B8F5A6BAC48818DFD7E12568CF5682F50857A8FA5C03E6B0660365A14AFF4CEEECD31840C7D22C5AEB6BB369197792A1637C48FB2ADFABD44BA275B80D5604D14B3D72361AB1FB45096C188 kameel.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. m9cYOW2Hz1kJ8cKO7RWFHH3FfTsxxjLmqUEOMv2JlugIKz54LfeSHehhY3MRKI2Q07TulyuPWmusSIGN/X4SVoz1aC9QhXqPpcA+awZgNloUr/TO7s0xhAx9IsWutrs2kZd5KhY3xI+yrfq9RLonW4DVYE0Us9cjYasftFCWwYg= ;{id = 42393} 066B616D65656C096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF002500000000 kameel.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:25:: 066B616D65656C096E6C6E65746C616273026E6C00002C0001000027D800160101A5322E0D8C10AD454A33C132FA158EFCBE9F2C49 kameel.nlnetlabs.nl. 10200 IN SSHFP 1 1 A5322E0D8C10AD454A33C132FA158EFCBE9F2C49 066B616D65656C096E6C6E65746C616273026E6C00002C0001000027D8001602017D2CBE4FCEE2724816E33311313EE64410D1A6E2 kameel.nlnetlabs.nl. 10200 IN SSHFP 2 1 7D2CBE4FCEE2724816E33311313EE64410D1A6E2 066B616D65656C096E6C6E65746C616273026E6C00002C0001000027D8001603010F3CD2F5583C838A02EA88DA659F57C9A5C6CE34 kameel.nlnetlabs.nl. 10200 IN SSHFP 3 1 0F3CD2F5583C838A02EA88DA659F57C9A5C6CE34 066B616D65656C096E6C6E65746C616273026E6C00002F000100000E10001B046B65726E096E6C6E65746C616273026E6C00000640000008000B kameel.nlnetlabs.nl. 3600 IN NSEC kern.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 046B65726E096E6C6E65746C616273026E6C0000010001000027D80004D59AE01E kern.nlnetlabs.nl. 10200 IN A 213.154.224.30 046B65726E096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C0AE24FB7525242A9E1B6354777C0D3C52DF22CBD47439BDDD9099C0970EFB4CB95FDF9D9F04DE06CD536C2EB8D6C6EF5F5AD22B8E309D0F05A61160A00C8145AC6BD33EF5FF780FD062D4CE69889CAD696D344F166B7A33D0AE3EA279C04B702493BC85FCB48FAE39F845D650D227A5D4FBC6EF1AD9BE974CF54D0D2FFD2883 kern.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wK4k+3UlJCqeG2NUd3wNPFLfIsvUdDm93ZCZwJcO+0y5X9+dnwTeBs1TbC641sbvX1rSK44wnQ8FphFgoAyBRaxr0z71/3gP0GLUzmmInK1pbTRPFmt6M9CuPqJ5wEtwJJO8hfy0j645+EXWUNInpdT7xu8a2b6XTPVNDS/9KIM= ;{id = 42393} 046B65726E096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001C81EE7DBA740DE2ECA7A0DD785A3DDDCD1BE75DE1420F6833C38D6DFFECA5064033FF8859C730471171533FAFD93E18D67F4FEE7A4DFAECF6FF606FC401B7D10E108E4019EC41AFE65A02AE0F04DBF0F52FACAF10ED1879CAE2F538636C361F409E1058A1BF5B49D8E32427C107CE5E438DB43D59506DA8E9BB247025E19817 kern.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HIHufbp0DeLsp6DdeFo93c0b513hQg9oM8ONbf/spQZAM/+IWccwRxFxUz+v2T4Y1n9P7npN+uz2/2BvxAG30Q4QjkAZ7EGv5loCrg8E2/D1L6yvEO0Yecri9ThjbDYfQJ4QWKG/W0nY4yQnwQfOXkONtD1ZUG2o6bskcCXhmBc= ;{id = 42393} 046B65726E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BA1B52C09462F76278E1A89C0E14F3E98E320B62592DEDE8ECAFE6AE5B0CD680F7CE54E1D85319A5C795E2604EDDB83C0A118BD60B447DFAD328C323A89866717CB47D2F542917A5187A3D04C33C16878B7095B78628BF44A0F94C5D8B19BA2BDB535447CA415E7B0BDACCF137A8B44819C96B068F2A3353F99DB9D04FEA40CB kern.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uhtSwJRi92J44aicDhTz6Y4yC2JZLe3o7K/mrlsM1oD3zlTh2FMZpceV4mBO3bg8ChGL1gtEffrTKMMjqJhmcXy0fS9UKRelGHo9BMM8FoeLcJW3hii/RKD5TF2LGbor21NUR8pBXnsL2szxN6i0SBnJawaPKjNT+Z250E/qQMs= ;{id = 42393} 046B65726E096E6C6E65746C616273026E6C00002C0001000027D800160101507A065F7173879238F947D09904D50F30F5E864 kern.nlnetlabs.nl. 10200 IN SSHFP 1 1 507A065F7173879238F947D09904D50F30F5E864 046B65726E096E6C6E65746C616273026E6C00002C0001000027D80016020185F482729396EEF58401030BFC128A5BE8225146 kern.nlnetlabs.nl. 10200 IN SSHFP 2 1 85F482729396EEF58401030BFC128A5BE8225146 046B65726E096E6C6E65746C616273026E6C00002F000100000E10001B046B697769096E6C6E65746C616273026E6C00000640000000000B kern.nlnetlabs.nl. 3600 IN NSEC kiwi.nlnetlabs.nl. A SSHFP RRSIG NSEC 046B697769096E6C6E65746C616273026E6C0000010001000027D80004D59AE01A kiwi.nlnetlabs.nl. 10200 IN A 213.154.224.26 046B697769096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A80B01A120600F939B50E186F50EA7ECB8FAB2A975F1B3E806B1EEF01F39CA15D24DB1BD8C2565312B880FCD6BFF4419F2D0D53222D04A79502AA941E418C134ADCF81591CF63B6A41C09B0B6D47839BA56FD876AD0A5EFE5CCF2C158A9D8C01800998DFF1112F082643BDD1BA59C0EAD0E5458F4AE8E6DBD8C391C0D1E181DA kiwi.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qAsBoSBgD5ObUOGG9Q6n7Lj6sql18bPoBrHu8B85yhXSTbG9jCVlMSuID81r/0QZ8tDVMiLQSnlQKqlB5BjBNK3PgVkc9jtqQcCbC21Hg5ulb9h2rQpe/lzPLBWKnYwBgAmY3/ERLwgmQ73RulnA6tDlRY9K6Obb2MORwNHhgdo= ;{id = 42393} 046B697769096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007CBBAD2FAEFF254F023B98FF01A32D70339905EF772948B8D00C920BA7FE33161F2D3891F828736156C1B53A828F3E893572836F2B7C42B9D3820D67C8393D2F5524AE5196C649E6C65673FCDE29FB30C8A6DFCCD9D158E345B024519C9476F482BA44FDEB205C2A20187F0C809C2B33F43068B7D26D0FA527C296FBFB3C3A96 kiwi.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fLutL67/JU8CO5j/AaMtcDOZBe93KUi40AySC6f+MxYfLTiR+ChzYVbBtTqCjz6JNXKDbyt8QrnTgg1nyDk9L1UkrlGWxknmxlZz/N4p+zDIpt/M2dFY40WwJFGclHb0grpE/esgXCogGH8MgJwrM/QwaLfSbQ+lJ8KW+/s8OpY= ;{id = 42393} 046B697769096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006B28D83D009A180C4030E17FC85E1419C3551634C7F04DF47E923C90A3F67CAF32E97ECF1A3FEF31D8DDE04327979165D5C926BC333A203D9CF1148832F43F0523829DDF897E23CA2B679B2434AD050B725D734BCC142D3FE20EA5AA56F761AC4842C5A6D10ABC07D34E8A0452743EE06A18CFDD38C1D672A28C9284A36219C7 kiwi.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ayjYPQCaGAxAMOF/yF4UGcNVFjTH8E30fpI8kKP2fK8y6X7PGj/vMdjd4EMnl5Fl1ckmvDM6ID2c8RSIMvQ/BSOCnd+JfiPKK2ebJDStBQtyXXNLzBQtP+IOpapW92GsSELFptEKvAfTTooEUnQ+4GoYz904wdZyooyShKNiGcc= ;{id = 42393} 046B697769096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C003EF7C2822B262ACAA93C756320AE82AC2F02AEC61127524720349523CA3707C0039527E47E1868CDA9BF1D1C57FBA0BD95A2837E1E29073EDC37F7A559155A0816C922EBF103309A8E942EB55950596DCB3B969C5FBB61EB6B74328E37FD4E6882FC95A7ED17951E3B96E60138DCFC6681FAFE18F4948774521D5E5C53F0E4BF kiwi.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. PvfCgismKsqpPHVjIK6CrC8CrsYRJ1JHIDSVI8o3B8ADlSfkfhhozam/HRxX+6C9laKDfh4pBz7cN/elWRVaCBbJIuvxAzCajpQutVlQWW3LO5acX7th62t0Mo43/U5ogvyVp+0XlR47luYBONz8ZoH6/hj0lId0Uh1eXFPw5L8= ;{id = 42393} 046B697769096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001020423FFFE5E33E0 kiwi.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:204:23ff:fe5e:33e0 046B697769096E6C6E65746C616273026E6C00002C0001000027D800160101BEA78730A01455690B08C58A05F401CB8C6AE160 kiwi.nlnetlabs.nl. 10200 IN SSHFP 1 1 BEA78730A01455690B08C58A05F401CB8C6AE160 046B697769096E6C6E65746C616273026E6C00002C0001000027D800160201582E0A63857B1C98C62C1378C760FF821E98877D kiwi.nlnetlabs.nl. 10200 IN SSHFP 2 1 582E0A63857B1C98C62C1378C760FF821E98877D 046B697769096E6C6E65746C616273026E6C00002F000100000E10001D066C6162736170096E6C6E65746C616273026E6C00000640000008000B kiwi.nlnetlabs.nl. 3600 IN NSEC labsap.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 066C6162736170096E6C6E65746C616273026E6C0000010001000027D80004D59AE03F labsap.nlnetlabs.nl. 10200 IN A 213.154.224.63 066C6162736170096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C3BD643C460D981A0FEB442B7534EFC3C78A1A6B202D0DAE340BF0B5F9A243DA1E589BA4CF0340F1A9A392B76D7C0532B34B6024FC9CEA13279138BB776F549BE9DADD26154AAC19D07086AA102CA143CE4BCA62B185F51B0DFC33085B5634DC47F78B3055CCC6677F550B8CA3FA1F05224F5E803C3025455AB9065F65D5B3E1 labsap.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. w71kPEYNmBoP60QrdTTvw8eKGmsgLQ2uNAvwtfmiQ9oeWJukzwNA8amjkrdtfAUys0tgJPyc6hMnkTi7d29Um+na3SYVSqwZ0HCGqhAsoUPOS8pisYX1Gw38MwhbVjTcR/eLMFXMxmd/VQuMo/ofBSJPXoA8MCVFWrkGX2XVs+E= ;{id = 42393} 066C6162736170096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C005DCC32FD111302888A423B34A9DE45E2A1D592F7CDA2A5ADA0634EAD2823BEAE69AA03122FAA777C8417D4CA0061A5B6CC71AF2A27DCA7AA280847AED1235611A975FF56B86CF63CC2FAE9ECBBDA19A2DF1970D112CDBFB9E9B8BB2A56894BCEBE63092221F482A7AFC05A0175EF298CAE3248F8774A203FF87DBE652CD6B544 labsap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Xcwy/RETAoiKQjs0qd5F4qHVkvfNoqWtoGNOrSgjvq5pqgMSL6p3fIQX1MoAYaW2zHGvKifcp6ooCEeu0SNWEal1/1a4bPY8wvrp7LvaGaLfGXDREs2/uem4uypWiUvOvmMJIiH0gqevwFoBde8pjK4ySPh3SiA/+H2+ZSzWtUQ= ;{id = 42393} 066C6162736170096E6C6E65746C616273026E6C00002F000100000E100020096C657669617468616E096E6C6E65746C616273026E6C000006400000000003 labsap.nlnetlabs.nl. 3600 IN NSEC leviathan.nlnetlabs.nl. A RRSIG NSEC 096C657669617468616E096E6C6E65746C616273026E6C0000010001000027D80004D59AE015 leviathan.nlnetlabs.nl. 10200 IN A 213.154.224.21 096C657669617468616E096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001195AFB102CB9BF7D5D5D2BEC91E390613F98A71A4938DC9CE1753A7C8C5F0D32C14F3E424535C4A97F7FEFDA866881639086747A800F35F9BBDFE25A35C54AB2FD11B04C48D0016CAE1C13D417FE3CC630ABD95D87AE3122564B8079CBDB8AF31DA9C8CD1AC5F7703439744EE32425EB9C1F307F017CE59728768FB7F99AC13 leviathan.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. EZWvsQLLm/fV1dK+yR45BhP5inGkk43JzhdTp8jF8NMsFPPkJFNcSpf3/v2oZogWOQhnR6gA81+bvf4lo1xUqy/RGwTEjQAWyuHBPUF/48xjCr2V2HrjEiVkuAecvbivMdqcjNGsX3cDQ5dE7jJCXrnB8wfwF85Zcodo+3+ZrBM= ;{id = 42393} 096C657669617468616E096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009BBB69BB0FAD43D25FE1BD76C76D29DE6376F809586CE5E238F41D8D4D2945182FE6EE53A8B28EE933551BBBD09F1246CB4DE2727E8788497342521AC6D7FB0FDD73FC3231050A5EF6C421B2A0EA194B60BB33735B7EAAF8086F915F7C2A197E3E3A25D7FDA828D6DB07203E17504D5270FAA60ED44CBA882CD536084D3996ED leviathan.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. m7tpuw+tQ9Jf4b12x20p3mN2+AlYbOXiOPQdjU0pRRgv5u5TqLKO6TNVG7vQnxJGy03icn6HiElzQlIaxtf7D91z/DIxBQpe9sQhsqDqGUtguzNzW36q+AhvkV98Khl+Pjol1/2oKNbbByA+F1BNUnD6pg7UTLqILNU2CE05lu0= ;{id = 42393} 096C657669617468616E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BC01728ED11C3943FAA65FFF9CFCB1396C5641105A806BF81879A62D06A9F4AA66393634EA0EE47E987B063E3E5D2B20A352D55D90AFD30013DF22181D2097A10F2272CFDFC9CF7712A8D62526095D46E410AB383E10A415B4C56E58785220629D8A4A785BAD84C7F4F7C45EC9517601D78154497EEB4D0DBB130AD63AE69CCA leviathan.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. vAFyjtEcOUP6pl//nPyxOWxWQRBagGv4GHmmLQap9KpmOTY06g7kfph7Bj4+XSsgo1LVXZCv0wAT3yIYHSCXoQ8ics/fyc93EqjWJSYJXUbkEKs4PhCkFbTFblh4UiBinYpKeFuthMf098ReyVF2AdeBVEl+600NuxMK1jrmnMo= ;{id = 42393} 096C657669617468616E096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010A0020FFFED204DB leviathan.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fed2:4db 096C657669617468616E096E6C6E65746C616273026E6C00002F000100000E100020096C6F63616C686F7374096E6C6E65746C616273026E6C000006400000080003 leviathan.nlnetlabs.nl. 3600 IN NSEC localhost.nlnetlabs.nl. A AAAA RRSIG NSEC 096C6F63616C686F7374096E6C6E65746C616273026E6C0000010001000027D800047F000001 localhost.nlnetlabs.nl. 10200 IN A 127.0.0.1 096C6F63616C686F7374096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B790B52BA78861A3232CDC8BEC03043F3E27C8E1C8D8FC5573A6548F069A41779D0468CDDD79280264D4F0B03E3854F35CC6DC5644C6B39E6263670A7338F5C8583963C1517B5E87C872409AC96CD7F6C4D978977A3B3FBE37DB061863C67431D23246D05983843F053EE6D779364FB58BF915F9AF8B468BF8B21FE282B4DCF6 localhost.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. t5C1K6eIYaMjLNyL7AMEPz4nyOHI2PxVc6ZUjwaaQXedBGjN3XkoAmTU8LA+OFTzXMbcVkTGs55iY2cKczj1yFg5Y8FRe16HyHJAmsls1/bE2XiXejs/vjfbBhhjxnQx0jJG0FmDhD8FPubXeTZPtYv5Ffmvi0aL+LIf4oK03PY= ;{id = 42393} 096C6F63616C686F7374096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C006789CB9F3DFAC59E901F755C27C504F41DA2942D44734C924250F0EDAF55608303FAC9B2C538A5F2BAC8E1061CCCEFBE86D39FF9F09EB2D2DEC1E7FF1E34DCFD26C1B11AEE2E89DA6763732283DBBF3C34B69D0C98D08FB96B043E130610746A2B63F9AD0D75CD1FE8D27C7ED61746F4A876DCFF40D4AE7CECC57DD40FB40054 localhost.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Z4nLnz36xZ6QH3VcJ8UE9B2ilC1Ec0ySQlDw7a9VYIMD+smyxTil8rrI4QYczO++htOf+fCestLewef/HjTc/SbBsRruLonaZ2NzIoPbvzw0tp0MmNCPuWsEPhMGEHRqK2P5rQ11zR/o0nx+1hdG9Kh23P9A1K587MV91A+0AFQ= ;{id = 42393} 096C6F63616C686F7374096E6C6E65746C616273026E6C00002F000100000E10001E076C6F67686F7374096E6C6E65746C616273026E6C000006400000000003 localhost.nlnetlabs.nl. 3600 IN NSEC loghost.nlnetlabs.nl. A RRSIG NSEC 076C6F67686F7374096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 loghost.nlnetlabs.nl. 10200 IN A 213.154.224.1 076C6F67686F7374096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001902AC4BBA80F7706DED54EF6D868002B2613723578E020C74221975323AEDF7D8DD32DE26F0E84B654603DDF845BBF629C789C181A8EACEFF29413722DDC11ADA61DD0449F12BD58C9B8071BE432405E48E48D78EDA2A8EC2F8659B7DBD451161BF28BA73E6BC375E78C51071F3BCA973EA5C7C926AE0C369B56B28D13AA5A0 loghost.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GQKsS7qA93Bt7VTvbYaAArJhNyNXjgIMdCIZdTI67ffY3TLeJvDoS2VGA934Rbv2KceJwYGo6s7/KUE3It3BGtph3QRJ8SvVjJuAcb5DJAXkjkjXjtoqjsL4ZZt9vUURYb8ounPmvDdeeMUQcfO8qXPqXHySauDDabVrKNE6paA= ;{id = 42393} 076C6F67686F7374096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C6763D59F01C5BF1666601898996AF042838C3704DF33965CEA8DA3ED1BB04943F6CE24C49BEE98EDED92473E57E976EB10E84CC2A5CB295DC346B26A3E13B9A6FCBB1EEC403A2B8221DBCD9E988C05B1CF0750C1C30439B58830207E85B674E675F542B27923CBD33CD3215F3FE104F4B9581F006CE287CEE4A3F9542EDC0B7 loghost.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xnY9WfAcW/FmZgGJiZavBCg4w3BN8zllzqjaPtG7BJQ/bOJMSb7pjt7ZJHPlfpdusQ6EzCpcspXcNGsmo+E7mm/Lse7EA6K4Ih282emIwFsc8HUMHDBDm1iDAgfoW2dOZ19UKyeSPL0zzTIV8/4QT0uVgfAGzih87ko/lULtwLc= ;{id = 42393} 076C6F67686F7374096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0069FF5CB6CA9B6612FEA33238782F5588B4389C96F72DA14285253E815EA753D8E5363D50EF25CFAA52314BD049081572EFF26636C7AC4271A2E6C151218A5561EF979D4299A60CF48CBF2DE099FFAD7AC15A6BBDA393BBABAF6F7D32726BD99FF815CC62A3A88309550E0F6D8DD6350830DA5E7EDC4AED401F51D91C67CE2309 loghost.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. af9ctsqbZhL+ozI4eC9ViLQ4nJb3LaFChSU+gV6nU9jlNj1Q7yXPqlIxS9BJCBVy7/JmNsesQnGi5sFRIYpVYe+XnUKZpgz0jL8t4Jn/rXrBWmu9o5O7q69vfTJya9mf+BXMYqOogwlVDg9tjdY1CDDaXn7cSu1AH1HZHGfOIwk= ;{id = 42393} 076C6F67686F7374096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 loghost.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 076C6F67686F7374096E6C6E65746C616273026E6C00002F000100000E10001D066C756D6D656C096E6C6E65746C616273026E6C000006400000080003 loghost.nlnetlabs.nl. 3600 IN NSEC lummel.nlnetlabs.nl. A AAAA RRSIG NSEC 066C756D6D656C096E6C6E65746C616273026E6C0000010001000027D80004D59AE021 lummel.nlnetlabs.nl. 10200 IN A 213.154.224.33 066C756D6D656C096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003E2D8D94859951CE203DA9E3715EA06F7ED5F273759C4E2190E757F3005DDBF56479FCB4B01677D285A2893B010AF920E40073F4763D27AB3BF69B64BF85ECB30E0D8A7F49091A852DC9F015B9D5365BE271792A719B0551C471F0BDC3FC0BA20B283AE9D059F1AB3D53FA2F9FC0F14576A899937D5290BBED489037B1521214 lummel.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Pi2NlIWZUc4gPanjcV6gb37V8nN1nE4hkOdX8wBd2/Vkefy0sBZ30oWiiTsBCvkg5ABz9HY9J6s79ptkv4Xssw4Nin9JCRqFLcnwFbnVNlvicXkqcZsFUcRx8L3D/AuiCyg66dBZ8as9U/ovn8DxRXaomZN9UpC77UiQN7FSEhQ= ;{id = 42393} 066C756D6D656C096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00546F7F8B520D8A31E1DD81B677136BFD09C36B8CB656837FB44656FD5F8FCA50AACC772C2A38E49837B048251671F0F7DB3AE03C19B749C8E390A9900142CB041AE390F8DA2BB18EAA205CE8B11EB4512D519111D36286A275C95F2A7763B90C3253039542F6D7DC5E2998F94B75A6B65CE48D6A07B67F1D53A27B0AA40B69BE lummel.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VG9/i1INijHh3YG2dxNr/QnDa4y2VoN/tEZW/V+PylCqzHcsKjjkmDewSCUWcfD32zrgPBm3ScjjkKmQAULLBBrjkPjaK7GOqiBc6LEetFEtUZER02KGonXJXyp3Y7kMMlMDlUL219xeKZj5S3WmtlzkjWoHtn8dU6J7CqQLab4= ;{id = 42393} 066C756D6D656C096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0095F635DC25E6E33ED425A154B1B0FE6D70C6E8E685731AC23AA9DE46D7FCAC1DE7F284620D1AABA935FAE6F88C8A584BD8BB0FC89C59D7505457AF0D4F31D964D7FD9832BA34C5830BE041DA715FAF4F3F35402DAFD06175B0E429F78FAABCF5B50E0090428F37D7D130E68D75E45DDFEC07C4CEEB5B46C6149297412A3871D8 lummel.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lfY13CXm4z7UJaFUsbD+bXDG6OaFcxrCOqneRtf8rB3n8oRiDRqrqTX65viMilhL2LsPyJxZ11BUV68NTzHZZNf9mDK6NMWDC+BB2nFfr08/NUAtr9BhdbDkKfePqrz1tQ4AkEKPN9fRMOaNdeRd3+wHxM7rW0bGFJKXQSo4cdg= ;{id = 42393} 066C756D6D656C096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00AA9F59964955B9D60C580CAB51E8F4ED315AA3FD17534F333A5DB6A664855C89CF30FAA7F3D177EA796125524240648AFDC93A70058037DF3AB27BC964DFE1C510DB4D2B4C77823B42C90AB3083C206F928D8A856DB583ABC60335D4DF28045805961B5BD22D94D6E9A7BB8B63B59C0B79C710D04C8414616E4820F178D83E85 lummel.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. qp9ZlklVudYMWAyrUej07TFao/0XU08zOl22pmSFXInPMPqn89F36nlhJVJCQGSK/ck6cAWAN986snvJZN/hxRDbTStMd4I7QskKswg8IG+SjYqFbbWDq8YDNdTfKARYBZYbW9ItlNbpp7uLY7WcC3nHENBMhBRhbkgg8XjYPoU= ;{id = 42393} 066C756D6D656C096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021372FFFEFB2434 lummel.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:213:72ff:fefb:2434 066C756D6D656C096E6C6E65746C616273026E6C00002C0001000027D800160101714D9E0C26DC8A36D6BC9329DF9FBA734C80E059 lummel.nlnetlabs.nl. 10200 IN SSHFP 1 1 714D9E0C26DC8A36D6BC9329DF9FBA734C80E059 066C756D6D656C096E6C6E65746C616273026E6C00002C0001000027D80016020116A961CD6C8603459C1916C0A5A7A0318485AB69 lummel.nlnetlabs.nl. 10200 IN SSHFP 2 1 16A961CD6C8603459C1916C0A5A7A0318485AB69 066C756D6D656C096E6C6E65746C616273026E6C00002C0001000027D80016030143707AEE3D74D8B8D292CD8556B32FEE2D43C805 lummel.nlnetlabs.nl. 10200 IN SSHFP 3 1 43707AEE3D74D8B8D292CD8556B32FEE2D43C805 066C756D6D656C096E6C6E65746C616273026E6C00002F000100000E10001D066C7573747261096E6C6E65746C616273026E6C00000640000008000B lummel.nlnetlabs.nl. 3600 IN NSEC lustra.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 066C7573747261096E6C6E65746C616273026E6C0000010001000027D80004D59AE034 lustra.nlnetlabs.nl. 10200 IN A 213.154.224.52 066C7573747261096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B1CF0E4CE05E0FBA87CB82D0D3EF452A27B012112FAD46BD11777A2F232478ACE899E7BEE78E71F8D1083DC58FDB8E5F78207699FE24088CCF8AC77F0C82B98C8590CBC73E09047FEDBA488489DA88F00BF8FE7BAEED0C11E887F134AFBE0EAB926BFB511A31A743FDB022CFC2FD468E7BD7B342D9A56EECDA434A28BDE10477 lustra.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sc8OTOBeD7qHy4LQ0+9FKiewEhEvrUa9EXd6LyMkeKzomee+545x+NEIPcWP245feCB2mf4kCIzPisd/DIK5jIWQy8c+CQR/7bpIhInaiPAL+P57ru0MEeiH8TSvvg6rkmv7URoxp0P9sCLPwv1GjnvXs0LZpW7s2kNKKL3hBHc= ;{id = 42393} 066C7573747261096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0034AB5069524C65F5127C4359FFD55D044FE77CFCEC5A0CA02F1E24D9F247FACC26326A9CD6AAE15391CC498059671D06E31CB8101DBF3D97F1762E0F42E3E49D62FF6BAF12614596EAD38AA750421DF09BF6F29F87BD77F63ABAAF4840241FA6AE4A1C9B8542A22B44ECBAFBF209C22105E7F618F55D384019ABB61B35624C48 lustra.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NKtQaVJMZfUSfENZ/9VdBE/nfPzsWgygLx4k2fJH+swmMmqc1qrhU5HMSYBZZx0G4xy4EB2/PZfxdi4PQuPknWL/a68SYUWW6tOKp1BCHfCb9vKfh7139jq6r0hAJB+mrkocm4VCoitE7Lr78gnCIQXn9hj1XThAGau2GzViTEg= ;{id = 42393} 066C7573747261096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C38035C44D1F1D63729CEE705DEA146D1227C01BBEEF8098F3965DEE030B0B011F76E9E945A8934E5174504F46FCDACD3016CE8517D8ADC2101DDA3AE1D563A88A31B0C8684FD66131BD6807024755A6BD38F1172323A070D30702EF4E1491BE15C7086A77B3DAC8048D25F88538DBB6ADFAAA9E07C45AA5B769CED8E07F6630 lustra.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. w4A1xE0fHWNynO5wXeoUbRInwBu+74CY85Zd7gMLCwEfdunpRaiTTlF0UE9G/NrNMBbOhRfYrcIQHdo64dVjqIoxsMhoT9ZhMb1oBwJHVaa9OPEXIyOgcNMHAu9OFJG+FccIanez2sgEjSX4hTjbtq36qp4HxFqlt2nO2OB/ZjA= ;{id = 42393} 066C7573747261096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010A0020FFFEC65984 lustra.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fec6:5984 066C7573747261096E6C6E65746C616273026E6C00002F000100000E100020096D61676E657369756D096E6C6E65746C616273026E6C000006400000080003 lustra.nlnetlabs.nl. 3600 IN NSEC magnesium.nlnetlabs.nl. A AAAA RRSIG NSEC 096D61676E657369756D096E6C6E65746C616273026E6C0000010001000027D80004D59AE01D magnesium.nlnetlabs.nl. 10200 IN A 213.154.224.29 096D61676E657369756D096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001EEEED8B903C14A2A7B98B484DC2F51DE2D9B34D97869B92CBCB064337F0A8D9F61094BF4497FF7E1916967F645AC55C7B5B3A42BC56E18E38815B3B1793B72BD79D27B0FEF20565A650E04985727C9388730EF8A92536BAA779AA6BE5DCE4FA146ECA3387D08E80D7980B6EB278A7A97097296E5CC96C7902643A247C225CE5 magnesium.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Hu7ti5A8FKKnuYtITcL1HeLZs02XhpuSy8sGQzfwqNn2EJS/RJf/fhkWln9kWsVce1s6QrxW4Y44gVs7F5O3K9edJ7D+8gVlplDgSYVyfJOIcw74qSU2uqd5qmvl3OT6FG7KM4fQjoDXmAtusninqXCXKW5cyWx5AmQ6JHwiXOU= ;{id = 42393} 096D61676E657369756D096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003602E51857A6A2714E65A7A948FFB08625A69818D1ED41555E16E4DF6432F3B21CA061FAF5C68549DFE9E535C39426A64398F2961F70B63D1C2B097FD8B8FC54C6CF443B33303F9D42B78EF51F3C3445E2D24E05E801FB2A633549E5AD49C2E733E743A4163733ED64E602801BA3AF48244A80D6A88AA6AB077FDDC4D7C3499F magnesium.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NgLlGFemonFOZaepSP+whiWmmBjR7UFVXhbk32Qy87IcoGH69caFSd/p5TXDlCamQ5jylh9wtj0cKwl/2Lj8VMbPRDszMD+dQreO9R88NEXi0k4F6AH7KmM1SeWtScLnM+dDpBY3M+1k5gKAG6OvSCRKgNaoiqarB3/dxNfDSZ8= ;{id = 42393} 096D61676E657369756D096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0003E71E85F9471A032BB00157FFA0BD749D87E63DE32A0271BDCF685BE8FDA912AADB80D6C93A6CB796AF27FD842C5EDF98CA3868E6F302C605BA3FB41CBD452FFDC4474CE6AFB051765269105DC58287A14890B6A4ED416BEE52AF5C70A6AE9D9F942E322E99C820977221C7AC8697767FCC3E88E13204E133410735E17BCE63 magnesium.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. A+cehflHGgMrsAFX/6C9dJ2H5j3jKgJxvc9oW+j9qRKq24DWyTpst5avJ/2ELF7fmMo4aObzAsYFuj+0HL1FL/3ER0zmr7BRdlJpEF3FgoehSJC2pO1Ba+5Sr1xwpq6dn5QuMi6ZyCCXciHHrIaXdn/MPojhMgThM0EHNeF7zmM= ;{id = 42393} 096D61676E657369756D096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010225BCFFFEE7C3A8 magnesium.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:225:bcff:fee7:c3a8 096D61676E657369756D096E6C6E65746C616273026E6C00002F000100000E10001A036D616E096E6C6E65746C616273026E6C000006400000080003 magnesium.nlnetlabs.nl. 3600 IN NSEC man.nlnetlabs.nl. A AAAA RRSIG NSEC 036D616E096E6C6E65746C616273026E6C0000010001000027D80004D59AE037 man.nlnetlabs.nl. 10200 IN A 213.154.224.55 036D616E096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0095EDD9577200386AADDBD481E37F2E660ADA35D563B0BF9CCC5C2AB0C765AE6677089F1FC43B678C7A9B1BB6D370466F74507F0E24E1A2997B8C1F2934D44F16BE82337560EC661D45E2605DCFC359BA12D709637D563D7A9AF7231F86B037EBBAE725423767C4394811E8595149C482EDF185EB972FAEDB3249797D6C95724D man.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. le3ZV3IAOGqt29SB438uZgraNdVjsL+czFwqsMdlrmZ3CJ8fxDtnjHqbG7bTcEZvdFB/DiThopl7jB8pNNRPFr6CM3Vg7GYdReJgXc/DWboS1wljfVY9epr3Ix+GsDfruuclQjdnxDlIEehZUUnEgu3xheuXL67bMkl5fWyVck0= ;{id = 42393} 036D616E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007E4B848546C901BEB8419D74B74A73804B3713130F3ADB2F8474E9227C3D1869D21A151EC1277247C2CD9A3B9BBAA08E95D51B13EE9D3DD70DBB086B7EF689C994E576EE36308361B5109E2A8F4D014C24C5517D06B4F84C2ECDCFE54E45A3C93C3E7E27C46072D8C4E2453A8D04D9BF308C92BC71CCC140099445EF9407BF78 man.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fkuEhUbJAb64QZ10t0pzgEs3ExMPOtsvhHTpInw9GGnSGhUewSdyR8LNmjubuqCOldUbE+6dPdcNuwhrfvaJyZTldu42MINhtRCeKo9NAUwkxVF9BrT4TC7Nz+VORaPJPD5+J8RgctjE4kU6jQTZvzCMkrxxzMFACZRF75QHv3g= ;{id = 42393} 036D616E096E6C6E65746C616273026E6C00002F000100000E10001D066D6178696D61096E6C6E65746C616273026E6C000006400000000003 man.nlnetlabs.nl. 3600 IN NSEC maxima.nlnetlabs.nl. A RRSIG NSEC 066D6178696D61096E6C6E65746C616273026E6C0000010001000027D80004D59AE0D0 maxima.nlnetlabs.nl. 10200 IN A 213.154.224.208 066D6178696D61096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005685916A42C2F92B732ED4DE51D4BD06A1AC6EE19A5CFCAD3ACC913A090B7F1E58C1F650F52F886CEF424EBF0C6933DB874402710C7DC64D374BCB9E6F145872E62D3840FA4652B30A0712CB261E6ED1E0A45B2B978BDDD894221B2A3A0E2DF1BE76223544CC803856D5F3976E5C14689B1B9F2242EDE5A6A1ABD7EDA2488B5A maxima.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VoWRakLC+StzLtTeUdS9BqGsbuGaXPytOsyROgkLfx5YwfZQ9S+IbO9CTr8MaTPbh0QCcQx9xk03S8uebxRYcuYtOED6RlKzCgcSyyYebtHgpFsrl4vd2JQiGyo6Di3xvnYiNUTMgDhW1fOXblwUaJsbnyJC7eWmoavX7aJIi1o= ;{id = 42393} 066D6178696D61096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009AAA5B3E6392F46D7B6D8490F4E1B82D17F985143D54278051A98E91A8D89997AF6D8123D050D284FE21F2EB0C28AE7E507CD1568E04B6B5F2D746D2506ADD90918530F81CE8422AFF4FFF852600869CCF99D7BBEB9CF2C39AB98D917284AF1832DB6936D74E51C2D6D0B256E4E9C30B63CA20D9DA83BDFE210813F8B8B4014A maxima.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mqpbPmOS9G17bYSQ9OG4LRf5hRQ9VCeAUamOkajYmZevbYEj0FDShP4h8usMKK5+UHzRVo4EtrXy10bSUGrdkJGFMPgc6EIq/0//hSYAhpzPmde765zyw5q5jZFyhK8YMttpNtdOUcLW0LJW5OnDC2PKINnag73+IQgT+Li0AUo= ;{id = 42393} 066D6178696D61096E6C6E65746C616273026E6C00002F000100000E10001C056D63766178096E6C6E65746C616273026E6C000006400000000003 maxima.nlnetlabs.nl. 3600 IN NSEC mcvax.nlnetlabs.nl. A RRSIG NSEC 056D63766178096E6C6E65746C616273026E6C0000010001000027D80004C010C5E5 mcvax.nlnetlabs.nl. 10200 IN A 192.16.197.229 056D63766178096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C000940B45F298243B61F150D6A9232FBDF5A0F738FFCD12FBD0082820C8A4E703FBF2868AB2C23615E8533EF753FEC86EC9B466339F6751ED14A71E4678CE97FB86634D34ED6C5B6ACFCEEEDC0630F7A0E87A78751F44F7AF2E539D7EE8FAAEEBB90FAAB5DE45914E6C7FDB0A9192AB52408DA3EB9D27062DAE16AE20E2BF4FCE6 mcvax.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CUC0XymCQ7YfFQ1qkjL731oPc4/80S+9AIKCDIpOcD+/KGirLCNhXoUz73U/7Ibsm0ZjOfZ1HtFKceRnjOl/uGY0007Wxbas/O7twGMPeg6Hp4dR9E968uU51+6Pqu67kPqrXeRZFObH/bCpGSq1JAjaPrnScGLa4WriDiv0/OY= ;{id = 42393} 056D63766178096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005BB0FCB8B342D8D9745D5185013B87980C48F3102378629CDD6B657CD14982071396C2EB51158F83A8AB61C7DDCC5A8CA69ACA6EE9C440567B3A5F80EDF09B25EF47330D767520387D0DBF3CFBF2387781F34FBEC7A0E377FFB0F65603E79F44F57B498F87512D94793C0536758DF10D73C8FAB748472A9F9C69CD49B01ADDA1 mcvax.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. W7D8uLNC2Nl0XVGFATuHmAxI8xAjeGKc3WtlfNFJggcTlsLrURWPg6irYcfdzFqMpprKbunEQFZ7Ol+A7fCbJe9HMw12dSA4fQ2/PPvyOHeB80++x6Djd/+w9lYD559E9XtJj4dRLZR5PAU2dY3xDXPI+rdIRyqfnGnNSbAa3aE= ;{id = 42393} 056D63766178096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00CBC5F1A270F6E4447A5A9345EF755F2C57E251778F54BBB0BDF17257E8E8B46D8DE872BC99D0456905FE7A3DFD428D14C5691FD4487B6C4652602791ED35DDD9FA7D0818AC9AA9CD4F29238BBBC1348A2BCEDF20B27B6262575A2C3099B60D1DB3711EC4149B7CE87E9BDF1340C1843A20163469F5CEB44E5F22378B7AC317EA mcvax.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. y8XxonD25ER6WpNF73VfLFfiUXePVLuwvfFyV+jotG2N6HK8mdBFaQX+ej39Qo0UxWkf1Eh7bEZSYCeR7TXd2fp9CBismqnNTykji7vBNIorzt8gsntiYldaLDCZtg0ds3EexBSbfOh+m98TQMGEOiAWNGn1zrROXyI3i3rDF+o= ;{id = 42393} 056D63766178096E6C6E65746C616273026E6C00002C0001000027D80016010151C86252CB0488653C798766A266CB8142AE2333 mcvax.nlnetlabs.nl. 10200 IN SSHFP 1 1 51C86252CB0488653C798766A266CB8142AE2333 056D63766178096E6C6E65746C616273026E6C00002C0001000027D8001602019E3B089D4B8A9B360C88D44C9D07C13146C87219 mcvax.nlnetlabs.nl. 10200 IN SSHFP 2 1 9E3B089D4B8A9B360C88D44C9D07C13146C87219 056D63766178096E6C6E65746C616273026E6C00002F000100000E10001E076D65726D616964096E6C6E65746C616273026E6C00000640000000000B mcvax.nlnetlabs.nl. 3600 IN NSEC mermaid.nlnetlabs.nl. A SSHFP RRSIG NSEC 076D65726D616964096E6C6E65746C616273026E6C0000010001000027D80004D59AE02D mermaid.nlnetlabs.nl. 10200 IN A 213.154.224.45 076D65726D616964096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00AC7985252932373A6D50122E41A68AAF6CDBD94E47D448AF3B18C4171200BD90AC187D977DF5913C63961E38B82F8DEEDB2215FB0B406457B38D10E4159ADE8304000A2DFEFBF8EBC158467F9E64C25EB61CBAAE2DA8EB447667ADF23855E4DEBB7D382217900B869CD9BF9598F11A84E3FCD93CECDAC240D6D418AC1D54E640 mermaid.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rHmFJSkyNzptUBIuQaaKr2zb2U5H1EivOxjEFxIAvZCsGH2XffWRPGOWHji4L43u2yIV+wtAZFezjRDkFZregwQACi3++/jrwVhGf55kwl62HLquLajrRHZnrfI4VeTeu304IheQC4ac2b+VmPEahOP82Tzs2sJA1tQYrB1U5kA= ;{id = 42393} 076D65726D616964096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000289EAA88CB538E34E8CCDADB24C543012675BC61B58C98F41D0A1FAAB8BB7726F434C0A5E2A8B8663C16157487C3F7E639A8AD48E7396054115AC206286D9619356B283C4F938774CF8A41EFCE48A6DA39BBD83931BEF3B5C0F18D9841DF54921831FF3D1384DA7E0D93D1D7D37E3DC7F222AB87EA11C1BB740122543CBD235 mermaid.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. AonqqIy1OONOjM2tskxUMBJnW8YbWMmPQdCh+quLt3JvQ0wKXiqLhmPBYVdIfD9+Y5qK1I5zlgVBFawgYobZYZNWsoPE+Th3TPikHvzkim2jm72DkxvvO1wPGNmEHfVJIYMf89E4Tafg2T0dfTfj3H8iKrh+oRwbt0ASJUPL0jU= ;{id = 42393} 076D65726D616964096E6C6E65746C616273026E6C00002F000100000E10001B046D696E65096E6C6E65746C616273026E6C000006400000000003 mermaid.nlnetlabs.nl. 3600 IN NSEC mine.nlnetlabs.nl. A RRSIG NSEC 046D696E65096E6C6E65746C616273026E6C0000010001000027D80004D59AE092 mine.nlnetlabs.nl. 10200 IN A 213.154.224.146 046D696E65096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0042E20B393F28BA11AECBDFABCD1F815EE6B9967F5671849B7B77F763DEB0EB2070A3DC25505F1A6981023FB565333A662F96D6A7617A0F971E13A627B9F2CE7425D5005F5B483F4BB064D4A074E5A73E407064D8B061BB8653D0B97B8481D9184D79D2A59B0827839AB904D9933D82D9740B6BB700125D884E8DB11E0BA87957 mine.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QuILOT8ouhGuy9+rzR+BXua5ln9WcYSbe3f3Y96w6yBwo9wlUF8aaYECP7VlMzpmL5bWp2F6D5ceE6YnufLOdCXVAF9bSD9LsGTUoHTlpz5AcGTYsGG7hlPQuXuEgdkYTXnSpZsIJ4OauQTZkz2C2XQLa7cAEl2ITo2xHguoeVc= ;{id = 42393} 046D696E65096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00145F23D05E821D18326A78BA39F4A2B846A36879331481DB69DC615980F96A8C6787D51D515DEF3E99E4C8FEF9B25FF1F9E2EC1E7CD12338000B137FDC2811DA0DDC1045EC009E74C2AA9056BE47DCEEC8130C09B3F8DEF068128C2D01417A4AECF7C56521D2B1347B1EA35CA68CB15E5A690C14C02AC97F09D4A4CF2FA8DE98 mine.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FF8j0F6CHRgyani6OfSiuEajaHkzFIHbadxhWYD5aoxnh9UdUV3vPpnkyP75sl/x+eLsHnzRIzgACxN/3CgR2g3cEEXsAJ50wqqQVr5H3O7IEwwJs/je8GgSjC0BQXpK7PfFZSHSsTR7HqNcpoyxXlppDBTAKsl/CdSkzy+o3pg= ;{id = 42393} 046D696E65096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004EF86E3182DBCD9F962F4D9E1E72E8ABE605C22354326BBBA07730A463E85C4A7F5984482CE8F016D5D91062472F14884A193E77367F97ACCDFCCDDCC358D87655DD47F6460BD6F00191488F995E272F4A5B34EAA729EE7BBC2127C278A16EAD70B53C3DB0DA5B89949FD46F4011337065267302DB64FA5EC1AF6358F29092D5 mine.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TvhuMYLbzZ+WL02eHnLoq+YFwiNUMmu7oHcwpGPoXEp/WYRILOjwFtXZEGJHLxSIShk+dzZ/l6zN/M3cw1jYdlXdR/ZGC9bwAZFIj5leJy9KWzTqpynue7whJ8J4oW6tcLU8PbDaW4mUn9RvQBEzcGUmcwLbZPpewa9jWPKQktU= ;{id = 42393} 046D696E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A6D831BA0024A2AB71FBEDCB70627CE8B17F4B3FBDF6175D7236DF01F0CB0B0F659F3793ABF8B36D81EF6AAF012ED3AF06E4EA52945A463FB4F8D90ABEEEFD5475FEAA231D930D0C4902983A2B2D7AD9EA14E6508BACC3B3E79E219469239D7FAE503BD3CCE215F8ED8AD70CA7676EA10C1C7F9EAF7A065EF91F017CCDA7F1A2 mine.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ptgxugAkoqtx++3LcGJ86LF/Sz+99hddcjbfAfDLCw9lnzeTq/izbYHvaq8BLtOvBuTqUpRaRj+0+NkKvu79VHX+qiMdkw0MSQKYOistetnqFOZQi6zDs+eeIZRpI51/rlA708ziFfjtitcMp2duoQwcf56vegZe+R8BfM2n8aI= ;{id = 42393} 046D696E65096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF002800000000 mine.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:28:: 046D696E65096E6C6E65746C616273026E6C00002C0001000027D8001601015598148ABD16CA46A5F1978D0566D253375A5F27 mine.nlnetlabs.nl. 10200 IN SSHFP 1 1 5598148ABD16CA46A5F1978D0566D253375A5F27 046D696E65096E6C6E65746C616273026E6C00002C0001000027D800160201C0535C157EB97B21B2E52CC66AA933A8ABD7BCB8 mine.nlnetlabs.nl. 10200 IN SSHFP 2 1 C0535C157EB97B21B2E52CC66AA933A8ABD7BCB8 046D696E65096E6C6E65746C616273026E6C00002C0001000027D80016030110B764904D485D2BA9F55231D1BFEF01E15CF249 mine.nlnetlabs.nl. 10200 IN SSHFP 3 1 10B764904D485D2BA9F55231D1BFEF01E15CF249 046D696E65096E6C6E65746C616273026E6C00002F000100000E10001C056D69727265096E6C6E65746C616273026E6C00000640000008000B mine.nlnetlabs.nl. 3600 IN NSEC mirre.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 056D69727265096E6C6E65746C616273026E6C0000050001000027D800110472706B6907737572666E6574026E6C00 mirre.nlnetlabs.nl. 10200 IN CNAME rpki.surfnet.nl. 056D69727265096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004F86D9AD8659BBE9306D842207F86B619B72C0D04B5E17C876BB5E44E3D419AEAE60A4C18906B22C18DB1FB40D39E7A7E6EC7A25949E1EE6024469BB61528A742C367C9E9167560B890309B3146EF4A3A7C70BEF978F3499BBF48CC0115B7E3C2EDFC6F886E691840D7B5A69A7025EF6F306CC6E88E726A0B0E11EFB31967A9F mirre.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. T4bZrYZZu+kwbYQiB/hrYZtywNBLXhfIdrteROPUGa6uYKTBiQayLBjbH7QNOeen5ux6JZSeHuYCRGm7YVKKdCw2fJ6RZ1YLiQMJsxRu9KOnxwvvl480mbv0jMARW348Lt/G+IbmkYQNe1pppwJe9vMGzG6I5yagsOEe+zGWep8= ;{id = 42393} 056D69727265096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0079EA8CC6352D6DDB4376E7C9BA785E0BD024B5A51CEB7745D6F0263A244CFB346F9787C0D490FCFC8868E222A1722CCEAE1916F8CE018D43866DF7C362B90A196CB3E2D4099E3474BF7151294FEF1B3060EA469276EDFCEC49F9156848CF66BA0568EAD5FF6B710CFAB093810F49E010F6BA6566BA492A80C2E6B10BAC104BEF mirre.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. eeqMxjUtbdtDdufJunheC9AktaUc63dF1vAmOiRM+zRvl4fA1JD8/Iho4iKhcizOrhkW+M4BjUOGbffDYrkKGWyz4tQJnjR0v3FRKU/vGzBg6kaSdu387En5FWhIz2a6BWjq1f9rcQz6sJOBD0ngEPa6ZWa6SSqAwuaxC6wQS+8= ;{id = 42393} 056D69727265096E6C6E65746C616273026E6C00002F000100000E100020096D6F62792D6469636B096E6C6E65746C616273026E6C000006040000000003 mirre.nlnetlabs.nl. 3600 IN NSEC moby-dick.nlnetlabs.nl. CNAME RRSIG NSEC 096D6F62792D6469636B096E6C6E65746C616273026E6C0000010001000027D80004D59AE01C moby-dick.nlnetlabs.nl. 10200 IN A 213.154.224.28 096D6F62792D6469636B096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00AE3696FD28CF65047DA297A8C03F427F612C2CC48810C55159A66FBB5EE3CB4B3A7B9328E075A1BF3760882C83BAC5C0EE835C1548D8211EBF51D384F5FC3E0996A2F4A2D7E3F4BC54E7E694551927C1B4E0ED1CDF6F7E69EEBE9FCEDB1AB7B91893949EA3B1F0B7233E2CC973404E20D01FD8DB02178DAB704B15FA26C527E6 moby-dick.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rjaW/SjPZQR9opeowD9Cf2EsLMSIEMVRWaZvu17jy0s6e5Mo4HWhvzdgiCyDusXA7oNcFUjYIR6/UdOE9fw+CZai9KLX4/S8VOfmlFUZJ8G04O0c329+ae6+n87bGre5GJOUnqOx8LcjPizJc0BOINAf2NsCF42rcEsV+ibFJ+Y= ;{id = 42393} 096D6F62792D6469636B096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0049457251F6E941645D9F9F46AB482BC59974116CB64F91E18B20397D3E1FBDFB9A4C00D1D9079A1FA217E46A49EB454A03978EA02F4E0536624ACC6D775033FA733C8078298D371570DBC2136A314804BAA0D573FB37AC001F629CC641EC68BFA67078823BE2E1C77CF94301E37220F32A2894E772B74E139C7177AC752C250D moby-dick.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. SUVyUfbpQWRdn59Gq0grxZl0EWy2T5HhiyA5fT4fvfuaTADR2QeaH6IX5GpJ60VKA5eOoC9OBTZiSsxtd1Az+nM8gHgpjTcVcNvCE2oxSAS6oNVz+zesAB9inMZB7Gi/pnB4gjvi4cd8+UMB43Ig8yoolOdyt04TnHF3rHUsJQ0= ;{id = 42393} 096D6F62792D6469636B096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B1E2F45D30B6CA2C4A2587C29B2EE37A8745757536AB954F319F0C325F0F3D1F9020C3041525B299084912FC15C2DDD2DC5E4F406A7B5F8FA6D37360B70F734BC192E9B40AF37729B923F873AEB707E9F5A721EE92D747474D682B8F2ABF607C7855AFF9039E52723A5A9B76521108D71B37D777034978AA1500AEDF08E97A37 moby-dick.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. seL0XTC2yixKJYfCmy7jeodFdXU2q5VPMZ8MMl8PPR+QIMMEFSWymQhJEvwVwt3S3F5PQGp7X4+m03Ngtw9zS8GS6bQK83cpuSP4c663B+n1pyHuktdHR01oK48qv2B8eFWv+QOeUnI6Wpt2UhEI1xs313cDSXiqFQCu3wjpejc= ;{id = 42393} 096D6F62792D6469636B096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010A0020FFFEE91C9F moby-dick.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fee9:1c9f 096D6F62792D6469636B096E6C6E65746C616273026E6C00002F000100000E10001E076D6F6E69746F72096E6C6E65746C616273026E6C000006400000080003 moby-dick.nlnetlabs.nl. 3600 IN NSEC monitor.nlnetlabs.nl. A AAAA RRSIG NSEC 076D6F6E69746F72096E6C6E65746C616273026E6C0000050001000027D80015066E6167696F73096E6C6E65746C616273026E6C00 monitor.nlnetlabs.nl. 10200 IN CNAME nagios.nlnetlabs.nl. 076D6F6E69746F72096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00CB37B7F1799C1F6DFF18AEBB4D5E1B5E639AA638011123F8FAD6EB09D7D81681B0095B601ED74EE23D2E261E460DA076BF8F8E04098A82B5C107FC4E4E566EDD1FDCDC0C899DD6DDDA0D621EA012988A9F61791B2F1890854F5055E23015A0A554B87A9F14C2D7E2641BF3BA52E744F0F65F494958E40EE005D6976606ECACDC monitor.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yze38XmcH23/GK67TV4bXmOapjgBESP4+tbrCdfYFoGwCVtgHtdO4j0uJh5GDaB2v4+OBAmKgrXBB/xOTlZu3R/c3AyJndbd2g1iHqASmIqfYXkbLxiQhU9QVeIwFaClVLh6nxTC1+JkG/O6UudE8PZfSUlY5A7gBdaXZgbsrNw= ;{id = 42393} 076D6F6E69746F72096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00386D0BBAD886954F0BDFCEE89A33C31022FA321F30FB17022354A9E14F5FB1362302DBB4A51501F7247E7A50511F1096DFC371AC7A4BC4429304AB824F9D610AE1C058A1011853BD18EE3F415F8781C1B0AC32678FE3C43F69D8648A881EF67F71F292367A48A4DEDCFB93683C8258A14EAB31A1A119CE3AF83B76FB758988C3 monitor.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. OG0LutiGlU8L387omjPDECL6Mh8w+xcCI1Sp4U9fsTYjAtu0pRUB9yR+elBRHxCW38NxrHpLxEKTBKuCT51hCuHAWKEBGFO9GO4/QV+HgcGwrDJnj+PEP2nYZIqIHvZ/cfKSNnpIpN7c+5NoPIJYoU6rMaGhGc46+Dt2+3WJiMM= ;{id = 42393} 076D6F6E69746F72096E6C6E65746C616273026E6C00002F000100000E10001C056D6F74656C096E6C6E65746C616273026E6C000006040000000003 monitor.nlnetlabs.nl. 3600 IN NSEC motel.nlnetlabs.nl. CNAME RRSIG NSEC 056D6F74656C096E6C6E65746C616273026E6C0000010001000027D80004D59AE007 motel.nlnetlabs.nl. 10200 IN A 213.154.224.7 056D6F74656C096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004BE3FF81B9D241D2FEF669E497935D61FEBEFD2B062BD97EA6968A3C505F0B5EB740A857E1FFFF12F53BE088F44A443BA75A008F1E034D30DE03FE0DFC073E17E86F78BF8524E1381B04FF03BABFD47252D389E1AD1F9AEF41474DE4F9D790944FB8331BB0D0468FCE8D2E43995B19741D0944AF2D190ED980FB56D8F2FD5C76 motel.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. S+P/gbnSQdL+9mnkl5NdYf6+/SsGK9l+ppaKPFBfC163QKhX4f//EvU74Ij0SkQ7p1oAjx4DTTDeA/4N/Ac+F+hveL+FJOE4GwT/A7q/1HJS04nhrR+a70FHTeT515CUT7gzG7DQRo/OjS5DmVsZdB0JRK8tGQ7ZgPtW2PL9XHY= ;{id = 42393} 056D6F74656C096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D0555B30EE8CFEEA383AA8F079527FDE6E09FC53D4EA6766B0622F8EDF21952A7BED1A2C267D4C66BAAC6C7A0AF80AD8276677D9066E8402672E6F9153F6DBCE2CE9B3E69D9ACCA699927CB26DB4FB1FC502530B0A5C86FC5183A82347919E3EB7FCC337D704C809C32DC9C25D124479374180DC93F5893D7B70CC8B8C234CB1 motel.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0FVbMO6M/uo4OqjweVJ/3m4J/FPU6mdmsGIvjt8hlSp77RosJn1MZrqsbHoK+ArYJ2Z32QZuhAJnLm+RU/bbzizps+admsymmZJ8sm20+x/FAlMLClyG/FGDqCNHkZ4+t/zDN9cEyAnDLcnCXRJEeTdBgNyT9Yk9e3DMi4wjTLE= ;{id = 42393} 056D6F74656C096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0064609D2D4D950FFDCB1807DD70D1EE6F438EECBEB2B44BFE20AAA8682C41F71C38C0D8458A32998A79646256B00BECA5392D3C5A8215DE1F1956A117F1D71EFD40E66BBE93BD9B05D520DB65464CF5A92453A3E8FE83A6784F059C287E3AE0C2D9DC74204EBD78F4924BAAB55CE1378001413A649683F1F633FFA21AA3F7CFB7 motel.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ZGCdLU2VD/3LGAfdcNHub0OO7L6ytEv+IKqoaCxB9xw4wNhFijKZinlkYlawC+ylOS08WoIV3h8ZVqEX8dce/UDma76TvZsF1SDbZUZM9akkU6Po/oOmeE8FnCh+OuDC2dx0IE69ePSSS6q1XOE3gAFBOmSWg/H2M/+iGqP3z7c= ;{id = 42393} 056D6F74656C096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000007 motel.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::7 056D6F74656C096E6C6E65746C616273026E6C00002F000100000E10001B046D756973096E6C6E65746C616273026E6C000006400000080003 motel.nlnetlabs.nl. 3600 IN NSEC muis.nlnetlabs.nl. A AAAA RRSIG NSEC 046D756973096E6C6E65746C616273026E6C0000010001000027D80004D59AE038 muis.nlnetlabs.nl. 10200 IN A 213.154.224.56 046D756973096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C336B8238800F47E3A1D6E5F53B2BDAF0373BCE6195480E63D8263A213196CEFB1EECF636BD7379B736D4C6FD265D4D71825A387C8E1EA66AB2067E22C1332CEFE22D9E815DD4069A86C7402CFE8092A968C96A3D598475AD0C36E74FB1F749F4EDEA9BD9CD3DC7DF3FDBB63F3D85CF17A45271CAC3936B37D048E742EB64F87 muis.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wza4I4gA9H46HW5fU7K9rwNzvOYZVIDmPYJjohMZbO+x7s9ja9c3m3NtTG/SZdTXGCWjh8jh6marIGfiLBMyzv4i2egV3UBpqGx0As/oCSqWjJaj1ZhHWtDDbnT7H3SfTt6pvZzT3H3z/btj89hc8XpFJxysOTazfQSOdC62T4c= ;{id = 42393} 046D756973096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00AEB729B92EF6BBCCEE8459E1233B759AA5B0B91C5A590C8BD7827AE7208E428FA21CC720F1DD7115FC9A9FF1C56E856B345996A6C56450B8B2AAE52A4506EE00BBB113CF92912C2DB231502717A65BB03E0CB87CC4BACC83BCB144A97905352325E28D2B6280509466C2E3C78E09BF5ACED9A6F8E1A156485AE5C1326B3FD0D2 muis.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. rrcpuS72u8zuhFnhIzt1mqWwuRxaWQyL14J65yCOQo+iHMcg8d1xFfyan/HFboVrNFmWpsVkULiyquUqRQbuALuxE8+SkSwtsjFQJxemW7A+DLh8xLrMg7yxRKl5BTUjJeKNK2KAUJRmwuPHjgm/Ws7ZpvjhoVZIWuXBMms/0NI= ;{id = 42393} 046D756973096E6C6E65746C616273026E6C00002F000100000E10001C056D7973716C096E6C6E65746C616273026E6C000006400000000003 muis.nlnetlabs.nl. 3600 IN NSEC mysql.nlnetlabs.nl. A RRSIG NSEC 056D7973716C096E6C6E65746C616273026E6C0000050001000027D80013046F70656E096E6C6E65746C616273026E6C00 mysql.nlnetlabs.nl. 10200 IN CNAME open.nlnetlabs.nl. 056D7973716C096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0008DAD7F122ECC6C29317E739892FFE616F53B119CCBBC12410484C9EDF53EB3B7A568FC1D19686047A40D706F40AF176B0295B17C47B14A8952AF152603A82C30DFFC82758BC8F5D5924C1F883ADFD24915CFC5CCE7DB572B1FA7439DFDC3E7F266487D425D91C994AD2FF7892B4796AD6C3E23C15B52B5079C8253B7157F1D6 mysql.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CNrX8SLsxsKTF+c5iS/+YW9TsRnMu8EkEEhMnt9T6zt6Vo/B0ZaGBHpA1wb0CvF2sClbF8R7FKiVKvFSYDqCww3/yCdYvI9dWSTB+IOt/SSRXPxczn21crH6dDnf3D5/JmSH1CXZHJlK0v94krR5atbD4jwVtStQecglO3FX8dY= ;{id = 42393} 056D7973716C096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0093FCD5C18E6E5A71CDFCFD6B2E50F6ABAF397B99B43BCA7991C3D0079B347A2CBB960B6C406BF4724B2E2ED414F415F113331F6C3F995E7C40EC617B8A39B125A590EA6C4ED80BC156E12C729707872BE924929D7C103705A5A67D7DF0CA175F95ADBA52C7A299B4538A00AE01550162021176996D24578C40A9F5E4E67064D7 mysql.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. k/zVwY5uWnHN/P1rLlD2q685e5m0O8p5kcPQB5s0eiy7lgtsQGv0cksuLtQU9BXxEzMfbD+ZXnxA7GF7ijmxJaWQ6mxO2AvBVuEscpcHhyvpJJKdfBA3BaWmfX3wyhdfla26UseimbRTigCuAVUBYgIRdpltJFeMQKn15OZwZNc= ;{id = 42393} 056D7973716C096E6C6E65746C616273026E6C00002F000100000E10001D066E6167696F73096E6C6E65746C616273026E6C000006040000000003 mysql.nlnetlabs.nl. 3600 IN NSEC nagios.nlnetlabs.nl. CNAME RRSIG NSEC 066E6167696F73096E6C6E65746C616273026E6C0000010001000027D80004D59AE086 nagios.nlnetlabs.nl. 10200 IN A 213.154.224.134 066E6167696F73096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003F3E7108844AE31B697AB706079B8723D13C5763D0425D4D9FB4C1E1B2688756F0131C0903238A400DEEB38E7354D46D9B4447EA79C11049767F5B28999193582C7AE6148D7D154FEC29EEBF2683BA1F8518C2FE58687EFE006C3C7B237DE0BAA4F3357FE41A6AF816BBB3F989F91612FAD496417C771F60D0B9A45EE6D6D93C nagios.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Pz5xCIRK4xtpercGB5uHI9E8V2PQQl1Nn7TB4bJoh1bwExwJAyOKQA3us45zVNRtm0RH6nnBEEl2f1somZGTWCx65hSNfRVP7CnuvyaDuh+FGML+WGh+/gBsPHsjfeC6pPM1f+QaavgWu7P5ifkWEvrUlkF8dx9g0LmkXubW2Tw= ;{id = 42393} 066E6167696F73096E6C6E65746C616273026E6C00002E0001000027D800A0000F0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001A058A70665D2FB2FF1BE72BBB1A951C4CA2DFFA1960C87A11D951FD7BF6FB76CA14246209D6E7F6858F0948B5DC6D90CE90BB2D4AF5E7377D5E0611E85F5A41A40531082DB7E7F731564C9591D1C2C439FD6807476F2BC09C131F4E6DC119DE806BB4DBBB3A81FF5D0A505B51A203CBA5741A6451B9C81FD2675B9BA4491107 nagios.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GgWKcGZdL7L/G+cruxqVHEyi3/oZYMh6EdlR/Xv2+3bKFCRiCdbn9oWPCUi13G2QzpC7LUr15zd9XgYR6F9aQaQFMQgtt+f3MVZMlZHRwsQ5/WgHR28rwJwTH05twRnegGu027s6gf9dClBbUaIDy6V0GmRRucgf0mdbm6RJEQc= ;{id = 42393} 066E6167696F73096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0058FB7081F47CABBE303F20DBBCB7A22CCF6B82C9E107CB364AC42D4103823EB022396B07F0C7C2AEC7210CF288A71F0D6EF42D8CC28F836C89E12AEA948AADC812A170656A40BE1BC7548926E97378116216AB90612038995F046424A04A6C1A398BC1511D468EDE042EDBA57AE0EB574ED6E57319656BB28722799E6292A6D1 nagios.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WPtwgfR8q74wPyDbvLeiLM9rgsnhB8s2SsQtQQOCPrAiOWsH8MfCrschDPKIpx8NbvQtjMKPg2yJ4SrqlIqtyBKhcGVqQL4bx1SJJulzeBFiFquQYSA4mV8EZCSgSmwaOYvBUR1Gjt4ELtuleuDrV07W5XMZZWuyhyJ5nmKSptE= ;{id = 42393} 066E6167696F73096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009D737D85258BCE25B5FE48F49622729E4FA3C110DD8096333A1D44548C5C10421F0F151DD3781300865237F5FB577291F0A84D8BFBFCA06FB98727C62306003EE98A7D22152A37756712587590D2AEB41838BA9A81A6C2B8FF567976F542B733D97AC84D351C00568EF056130EFFDB26324BA4D43B7009233AACE182057F109F nagios.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nXN9hSWLziW1/kj0liJynk+jwRDdgJYzOh1EVIxcEEIfDxUd03gTAIZSN/X7V3KR8KhNi/v8oG+5hyfGIwYAPumKfSIVKjd1ZxJYdZDSrrQYOLqagabCuP9WeXb1Qrcz2XrITTUcAFaO8FYTDv/bJjJLpNQ7cAkjOqzhggV/EJ8= ;{id = 42393} 066E6167696F73096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0014F57DCA41EAD0F8358C9BCAD403DB0E796DD1ED0AE86706C68BEE4AD722B3422A595F6E46A5B8EC4DE5E9BA953189022474AD9573291753F31BCCD36769C6E83AA59C8215B29258D4F6D50BC69EF2C6B7FE24B7F7C13AD4AAFEF195C1BDD02CC1EE7670CB546C8D09FE464D8BCFF0A1BF8889ECCE03B6F9373B1490C4444EA6 nagios.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FPV9ykHq0Pg1jJvK1APbDnlt0e0K6GcGxovuStcis0IqWV9uRqW47E3l6bqVMYkCJHStlXMpF1PzG8zTZ2nG6DqlnIIVspJY1PbVC8ae8sa3/iS398E61Kr+8ZXBvdAswe52cMtUbI0J/kZNi8/wob+IiezOA7b5NzsUkMRETqY= ;{id = 42393} 066E6167696F73096E6C6E65746C616273026E6C00000F0001000027D8001B000A046D61696C05366F6E6C79096E6C6E65746C616273026E6C00 nagios.nlnetlabs.nl. 10200 IN MX 10 mail.6only.nlnetlabs.nl. 066E6167696F73096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF000400000000 nagios.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:4:: 066E6167696F73096E6C6E65746C616273026E6C00002C0001000027D8001601010E1A0600D0A7F2511C8D57410422D9A99618F201 nagios.nlnetlabs.nl. 10200 IN SSHFP 1 1 0E1A0600D0A7F2511C8D57410422D9A99618F201 066E6167696F73096E6C6E65746C616273026E6C00002C0001000027D8001602014EF80FEA0025691257FF34B992118BD9360257F2 nagios.nlnetlabs.nl. 10200 IN SSHFP 2 1 4EF80FEA0025691257FF34B992118BD9360257F2 066E6167696F73096E6C6E65746C616273026E6C00002C0001000027D800160301AF21A784B933B4B2F28967845B41E0119F91D3BF nagios.nlnetlabs.nl. 10200 IN SSHFP 3 1 AF21A784B933B4B2F28967845B41E0119F91D3BF 066E6167696F73096E6C6E65746C616273026E6C00002F000100000E10001A036E6577096E6C6E65746C616273026E6C00000640010008000B nagios.nlnetlabs.nl. 3600 IN NSEC new.nlnetlabs.nl. A MX AAAA SSHFP RRSIG NSEC 036E6577096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 new.nlnetlabs.nl. 10200 IN A 213.154.224.1 036E6577096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007384799A52EC582A2182F00A1F52D4DFB2D694446712F9A1713F141A65A776CA1402A9AF92D09417C8B9A364DB66DD81D343EEF5410C2E0451DC0B72E5385D91D57133F3573A34DBB5889FF4F3A4F045CF2D3F558CC9A0C7E349ABB53FAF7B1812CF196B9966B43ED041BAAC03055358EEFA7D3E75667DB4999D4DE39D2AE91F new.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. c4R5mlLsWCohgvAKH1LU37LWlERnEvmhcT8UGmWndsoUAqmvktCUF8i5o2TbZt2B00Pu9UEMLgRR3Aty5ThdkdVxM/NXOjTbtYif9POk8EXPLT9VjMmgx+NJq7U/r3sYEs8Za5lmtD7QQbqsAwVTWO76fT51Zn20mZ1N450q6R8= ;{id = 42393} 036E6577096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C20C97BC9EA23AC64106FAE02A74981448E91636E3BBEEDFB188C2ACD5B4C3ABBE25BBCF88E54DFBB2E1006EF14A92B47C2CEE0264484CB30BB7A59E173E1B2BC748A3D99F80587F1E4D483AA8BC4AC04EDAC2BB9376061FBE54D28E3610A6F04FD580AD9853870F4803180F50F19F6FAF4E3EF2B8FC880E1B572CCF289E89CC new.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wgyXvJ6iOsZBBvrgKnSYFEjpFjbju+7fsYjCrNW0w6u+JbvPiOVN+7LhAG7xSpK0fCzuAmRITLMLt6WeFz4bK8dIo9mfgFh/Hk1IOqi8SsBO2sK7k3YGH75U0o42EKbwT9WArZhThw9IAxgPUPGfb69OPvK4/IgOG1cszyieicw= ;{id = 42393} 036E6577096E6C6E65746C616273026E6C00002F000100000E100027104E4C6E65744C6162732D6269742D6777096E6C6E65746C616273026E6C000006400000000003 new.nlnetlabs.nl. 3600 IN NSEC NLnetLabs-bit-gw.nlnetlabs.nl. A RRSIG NSEC 106E6C6E65746C6162732D6269742D6777096E6C6E65746C616273026E6C0000010001000027D80004D5881F66 nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN A 213.136.31.102 106E6C6E65746C6162732D6269742D6777096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A0376CC76E43C2A90EADF84D6AAF1E82D9ED6AE4595D1AFD27C73A564CABC2D49DCB17C6CAFF4E223834BF757364BE19CFD1E72C3E33AC491A55D6A965C6156F730BDF3C77ED5D2D4BC9B6BF42922217DFA9C32714A69D3F6AB387C1812B03B17CEA1B710525873A56CCD73356BEC8438A67309BE77A2582052BE5E344B8A99F nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. oDdsx25DwqkOrfhNaq8egtntauRZXRr9J8c6VkyrwtSdyxfGyv9OIjg0v3VzZL4Zz9HnLD4zrEkaVdapZcYVb3ML3zx37V0tS8m2v0KSIhffqcMnFKadP2qzh8GBKwOxfOobcQUlhzpWzNczVr7IQ4pnMJvneiWCBSvl40S4qZ8= ;{id = 42393} 106E6C6E65746C6162732D6269742D6777096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0030DEA845844928EF73134AD900014A6AFBDAFDB58FFDAFCD66EA6D40909B737B7FC081F132C1E5F22928BF5DE3A01B37A12E1B8D3E6F590C2385CB2E2E6F000F96C640B51B9D2C91EC3DA9B53C6BF8B70D7982260DDA346994C4724F75FB96D6C54A88572039D2A0C1BAC5F6897BD0CD5288A97C5EAA90B235C7EC6FE142BFC3 nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. MN6oRYRJKO9zE0rZAAFKavva/bWP/a/NZuptQJCbc3t/wIHxMsHl8ikov13joBs3oS4bjT5vWQwjhcsuLm8AD5bGQLUbnSyR7D2ptTxr+LcNeYImDdo0aZTEck91+5bWxUqIVyA50qDBusX2iXvQzVKIqXxeqpCyNcfsb+FCv8M= ;{id = 42393} 106E6C6E65746C6162732D6269742D6777096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00D281CDD713D70BB2D7DD4B6B82E166338865F522A9E5DF850FA913A12CD91DBAEF8BFCF4D156F23A3BB242A83B3179D8E28D344B8602D03294DE8EE69D633E5EAF080B0196C926D5FD7F79175A25453F15621E1C5BF0827B025C4F4F630551D4DCB6B24FA675173B204EA96DC613C75AE5970939D200784EC6195AC47EB08AD5 nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. 0oHN1xPXC7LX3UtrguFmM4hl9SKp5d+FD6kToSzZHbrvi/z00VbyOjuyQqg7MXnY4o00S4YC0DKU3o7mnWM+Xq8ICwGWySbV/X95F1olRT8VYh4cW/CCewJcT09jBVHU3LayT6Z1FzsgTqltxhPHWuWXCTnSAHhOxhlaxH6witU= ;{id = 42393} 106E6C6E65746C6162732D6269742D6777096E6C6E65746C616273026E6C00001C0001000027D80010200107B8004000010000000000000003 nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1::3 106E6C6E65746C6162732D6269742D6777096E6C6E65746C616273026E6C00002F000100000E10001D066E732D657874096E6C6E65746C616273026E6C000006400000080003 nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN NSEC ns-ext.nlnetlabs.nl. A AAAA RRSIG NSEC 066E732D657874096E6C6E65746C616273026E6C0000010001000027D80004D59AE004 ns-ext.nlnetlabs.nl. 10200 IN A 213.154.224.4 066E732D657874096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003D847C5E67F7D76774444DDC0F453979F38FBC54A6D69A1A4CA4E7431E032FED58CAEB830B97DE8ECE0D169211B5BDCDB3F5142B6F22C410CB086D759E42812F056863A2C5FAEC873FF555495234EB8A2F14AB04CEE3C192CD041EDBD51F729281421FD37CC84A755AE83486F70248D09E9957887F27D5CE8C91D9A17D66EC34 ns-ext.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. PYR8Xmf312d0RE3cD0U5efOPvFSm1poaTKTnQx4DL+1YyuuDC5fejs4NFpIRtb3Ns/UUK28ixBDLCG11nkKBLwVoY6LF+uyHP/VVSVI064ovFKsEzuPBks0EHtvVH3KSgUIf03zISnVa6DSG9wJI0J6ZV4h/J9XOjJHZoX1m7DQ= ;{id = 42393} 066E732D657874096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00ABAB0A6ACA1AA96371F4EB8FA1E63BDDB03DE25CDABE9D7160679890FCFB8D929EEA148D94AD674F063A542010333674B30351F37DC7F0517AE255FD78D0768E38B27A9D92D6296332BF2234E293A90A82EC9B25D6CC0278279D97910874C5F801F6FA28D6BF6400329073477F2801CD4F9696539B040EC009B332804881927C ns-ext.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. q6sKasoaqWNx9OuPoeY73bA94lzavp1xYGeYkPz7jZKe6hSNlK1nTwY6VCAQMzZ0swNR833H8FF64lX9eNB2jjiyep2S1iljMr8iNOKTqQqC7Jsl1swCeCedl5EIdMX4Afb6KNa/ZAAykHNHfygBzU+WllObBA7ACbMygEiBknw= ;{id = 42393} 066E732D657874096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004F78BC1C528E36908AA15325D9080D2E667343021BD99FA0A74921830120DA622195478297FA9139F3C5D97B3E41CF7D85403573C1C22CEB6674450E91F2BA31877AB17BE51195FD6FBA280BB5D32CEDB095104896D1AA3363A2EE7C96115608853EF7081DD88DC0880821183000D52EC93E462DCC087DB7343CBF18867F7F23 ns-ext.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T3i8HFKONpCKoVMl2QgNLmZzQwIb2Z+gp0khgwEg2mIhlUeCl/qROfPF2Xs+Qc99hUA1c8HCLOtmdEUOkfK6MYd6sXvlEZX9b7ooC7XTLO2wlRBIltGqM2Oi7nyWEVYIhT73CB3YjcCICCEYMADVLsk+Ri3MCH23NDy/GIZ/fyM= ;{id = 42393} 066E732D657874096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000040053 ns-ext.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::4:53 066E732D657874096E6C6E65746C616273026E6C00002F000100000E10001C056E732D7074096E6C6E65746C616273026E6C000006400000080003 ns-ext.nlnetlabs.nl. 3600 IN NSEC ns-pt.nlnetlabs.nl. A AAAA RRSIG NSEC 056E732D7074096E6C6E65746C616273026E6C0000010001000027D80004D59AE08D ns-pt.nlnetlabs.nl. 10200 IN A 213.154.224.141 056E732D7074096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008680883AD6D0457492F3A27F469B02A52AC1BFF5C7FB2BFBC40D3B805C5FA30C8E7F99EA9BF6E7A61A8B58CFF097964CFFE97107B911B400E2BA949DF467B1DEEE1DF6AF390D6DB34E33472BEB4CEA4D04473BAC3AA382B03B5BA5F0C6D06D8F30D71CDD3CFCB3DEE6A16E5C4733E6152C43082D4E57073492F350646992B310 ns-pt.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hoCIOtbQRXSS86J/RpsCpSrBv/XH+yv7xA07gFxfowyOf5nqm/bnphqLWM/wl5ZM/+lxB7kRtADiupSd9Gex3u4d9q85DW2zTjNHK+tM6k0ERzusOqOCsDtbpfDG0G2PMNcc3Tz8s97moW5cRzPmFSxDCC1OVwc0kvNQZGmSsxA= ;{id = 42393} 056E732D7074096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00238EBD063DA18786999967335D5A7C3954DE4062865597FC211DBD3AE490B422ADB3F4F9E0645E3FB69AB585960AED8A4F977DB5C525CEACE6F7A9799704305B869ED1228C5358B23419E7698E6D81652EB055B2A067D3651B1744593F689EB913E312BA7A270960885AD442977A6A910C36DA637B22CADA5312942DB8FC4AAD ns-pt.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. I469Bj2hh4aZmWczXVp8OVTeQGKGVZf8IR29OuSQtCKts/T54GReP7aatYWWCu2KT5d9tcUlzqzm96l5lwQwW4ae0SKMU1iyNBnnaY5tgWUusFWyoGfTZRsXRFk/aJ65E+MSunonCWCIWtRCl3pqkQw22mN7IsraUxKULbj8Sq0= ;{id = 42393} 056E732D7074096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00555E01CD42C42A0C8FC684651CD7E3C4C3D5979F60567E6928F26138959BA4538E71B1DBD98F931DA23608DC581326D5555D730D5AB441FB63A37B0DBAAD0FAB62B1AD68E9C05CC6BD9ABD7A7B10509B901CC573C14044439977A34C623EE483B64B0A8FBBE495B038CFE7906199E9B0DBD4B0F1CD9F2D01398AC7F1DD6205C8 ns-pt.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. VV4BzULEKgyPxoRlHNfjxMPVl59gVn5pKPJhOJWbpFOOcbHb2Y+THaI2CNxYEybVVV1zDVq0Qftjo3sNuq0Pq2KxrWjpwFzGvZq9ensQUJuQHMVzwUBEQ5l3o0xiPuSDtksKj7vklbA4z+eQYZnpsNvUsPHNny0BOYrH8d1iBcg= ;{id = 42393} 056E732D7074096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000040141 ns-pt.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::4:141 056E732D7074096E6C6E65746C616273026E6C00002F000100000E10001A036E7331096E6C6E65746C616273026E6C000006400000080003 ns-pt.nlnetlabs.nl. 3600 IN NSEC ns1.nlnetlabs.nl. A AAAA RRSIG NSEC 036E7331096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 ns1.nlnetlabs.nl. 10200 IN A 213.154.224.1 036E7331096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001544B64FF904CD3090E204FDCE54D7D18FB0112D58685F4D61F24BD186981808F216A5C94BB391BFBCE42E4CAD33076293D300B231D9031CB03C189BF1408812F134A888537BFCDD05CF72D54C2E20FBB3FB96DE3ACC2D906CABE98E659FBD4552C11767BE9080727C7A268F47206C7BD11CBEE9231ED162686142E338C92BD6 ns1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FUS2T/kEzTCQ4gT9zlTX0Y+wES1YaF9NYfJL0YaYGAjyFqXJS7ORv7zkLkytMwdik9MAsjHZAxywPBib8UCIEvE0qIhTe/zdBc9y1UwuIPuz+5beOswtkGyr6Y5ln71FUsEXZ76QgHJ8eiaPRyBse9EcvukjHtFiaGFC4zjJK9Y= ;{id = 42393} 036E7331096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00894A5440C1E27BDD460E259A669FF3F3D4415A060298C95E41EF74D606ABB16C9D8CD0AC948E8958ED52B3D3581AA604BFAD57103F5A3C36E90E5D1AC875F256F37DB7065243153F2679F5D74C2787FFB624EC4DF21D1968533FEA56E53337EA0F1DA1D352B5CB071BC2DA97712BCFF6D70278CE992180FD12C0104AFBE67821 ns1.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iUpUQMHie91GDiWaZp/z89RBWgYCmMleQe901garsWydjNCslI6JWO1Ss9NYGqYEv61XED9aPDbpDl0ayHXyVvN9twZSQxU/Jnn110wnh/+2JOxN8h0ZaFM/6lblMzfqDx2h01K1ywcbwtqXcSvP9tcCeM6ZIYD9EsAQSvvmeCE= ;{id = 42393} 036E7331096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007E3D1A6C2F62A118E00D6007E4635A1C8FB96D64F5FBC10DE18573477F817236639E122144DB1477924C379BAB8197C71D05EC5C6BCA38C66A73A736BA25EB828C0EA24BACB8D53BE418FF414846BEA8F97AB42EE4D3AEFAA96D40C1A9991F592BFA8CC00516E081F352CD56AA354968159CBF407128CEB40EE10E838558C1F7 ns1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fj0abC9ioRjgDWAH5GNaHI+5bWT1+8EN4YVzR3+BcjZjnhIhRNsUd5JMN5urgZfHHQXsXGvKOMZqc6c2uiXrgowOokusuNU75Bj/QUhGvqj5erQu5NOu+qltQMGpmR9ZK/qMwAUW4IHzUs1WqjVJaBWcv0BxKM60DuEOg4VYwfc= ;{id = 42393} 036E7331096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 ns1.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 036E7331096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000053 ns1.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::53 036E7331096E6C6E65746C616273026E6C00002F000100000E10001E076E73642D786672096E6C6E65746C616273026E6C000006400000080003 ns1.nlnetlabs.nl. 3600 IN NSEC nsd-xfr.nlnetlabs.nl. A AAAA RRSIG NSEC 076E73642D786672096E6C6E65746C616273026E6C0000010001000027D80004D59AE031 nsd-xfr.nlnetlabs.nl. 10200 IN A 213.154.224.49 076E73642D786672096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006B936DFDD694A37BD8C50F9940E941C869901F0431D582B8D6B055B75EAC9CB858EAE76775798A04F051198EA1227EB54300ED21D410949AC6FB2E0C573ED52BA65EE780BC16BB8D27436BA67342DAD35AA72480E13C1BD2DBD0A106DD83499C22CE244E8F3F32820D7EFD7B38DAB8E9202BAEAF5C9D1B2F1060697109EBD213 nsd-xfr.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a5Nt/daUo3vYxQ+ZQOlByGmQHwQx1YK41rBVt16snLhY6udndXmKBPBRGY6hIn61QwDtIdQQlJrG+y4MVz7VK6Ze54C8FruNJ0NrpnNC2tNapySA4Twb0tvQoQbdg0mcIs4kTo8/MoINfv17ONq46SArrq9cnRsvEGBpcQnr0hM= ;{id = 42393} 076E73642D786672096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A79083EAEFCA195F69B20C2940B1937BB7132DCAE9CEAA273CE96E548EE63808BFC004322393959493627EA0B43F07FBC79C363317D7D6822B51F67A0757FD99F63B5ABAEFF3C4A4F15FC7E3AD1ABA93FFCD8261A4F369CF3381F6EADFA1D19A42B04B0E1E79B26786C743CB0B5453A926329A2ABDD3891344A157D2B32A172A nsd-xfr.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. p5CD6u/KGV9psgwpQLGTe7cTLcrpzqonPOluVI7mOAi/wAQyI5OVlJNifqC0Pwf7x5w2MxfX1oIrUfZ6B1f9mfY7Wrrv88Sk8V/H460aupP/zYJhpPNpzzOB9urfodGaQrBLDh55smeGx0PLC1RTqSYymiq904kTRKFX0rMqFyo= ;{id = 42393} 076E73642D786672096E6C6E65746C616273026E6C00002F000100000E10001C056E73656333096E6C6E65746C616273026E6C000006400000000003 nsd-xfr.nlnetlabs.nl. 3600 IN NSEC nsec3.nlnetlabs.nl. A RRSIG NSEC 056E73656333096E6C6E65746C616273026E6C0000010001000027D80004D59AE015 nsec3.nlnetlabs.nl. 10200 IN A 213.154.224.21 056E73656333096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006B39CC8CF3015CDC485AEF83467A025830473CE3B769D20E29C29D4FFF4325D5B5422EACFFF0CED5895BF64921D6E0D08ACC2105C2E7DC4E7FFB1971FB38572DCB85848604190BC14E09D46C38D6AC37F1C9E31FD09F5ECED8E7DAFD8AEA81A5F6BBB6CF1A31D389E7C92EDF1B54D4CC863130F00702516169A07689E1A4D194 nsec3.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. aznMjPMBXNxIWu+DRnoCWDBHPOO3adIOKcKdT/9DJdW1Qi6s//DO1Ylb9kkh1uDQiswhBcLn3E5/+xlx+zhXLcuFhIYEGQvBTgnUbDjWrDfxyeMf0J9eztjn2v2K6oGl9ru2zxox04nnyS7fG1TUzIYxMPAHAlFhaaB2ieGk0ZQ= ;{id = 42393} 056E73656333096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001F274D4E9BC6277B412876C51F6B059D7268898A421B61DEE4EC4B35D9D09E615CC676E091292B1605848DB6B2A63EC2AE7A28F111C009C1D1E978D791BF2734C887B1C1CE49686BF6CF9ACF1CB567257AEE3D635D9328B283D9B1585148AF9A06E13A93097F8C94D6DE3E6AE59BA208ED7C40026298C48FB61DD4216DE4BB40 nsec3.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HydNTpvGJ3tBKHbFH2sFnXJoiYpCG2He5OxLNdnQnmFcxnbgkSkrFgWEjbaypj7Crnoo8RHACcHR6XjXkb8nNMiHscHOSWhr9s+azxy1ZyV67j1jXZMosoPZsVhRSK+aBuE6kwl/jJTW3j5q5ZuiCO18QAJimMSPth3UIW3ku0A= ;{id = 42393} 056E73656333096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00B8BC6A033F5F9502E9F8A174AA0AFDA44E69D7E61A66167307B02A5AB80832C38A06E064918083B2C737775F00FAB19DC1037F07297D76405BF6ADBDA9810C8837E365E9C926FB88FD15BCE0DC7754E69A2400B23119BA6F0865A5B7AFE4EAC09D65D19AE56085D5FD3E50B5FDBDCB31747D6CC7E72DE557D54A30EB2B949716 nsec3.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uLxqAz9flQLp+KF0qgr9pE5p1+YaZhZzB7AqWrgIMsOKBuBkkYCDssc3d18A+rGdwQN/Byl9dkBb9q29qYEMiDfjZenJJvuI/RW84Nx3VOaaJACyMRm6bwhlpbev5OrAnWXRmuVghdX9PlC1/b3LMXR9bMfnLeVX1Uow6yuUlxY= ;{id = 42393} 056E73656333096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010A0020FFFED204DB nsec3.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fed2:4db 056E73656333096E6C6E65746C616273026E6C00002F000100000E10001E076F62656C69736B096E6C6E65746C616273026E6C000006400000080003 nsec3.nlnetlabs.nl. 3600 IN NSEC obelisk.nlnetlabs.nl. A AAAA RRSIG NSEC 076F62656C69736B096E6C6E65746C616273026E6C0000010001000027D80004D59AE07E obelisk.nlnetlabs.nl. 10200 IN A 213.154.224.126 076F62656C69736B096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002BB7EF94BE319DFBC4DA526E3FF961696AC19300459258414B17A36ECDE0FF28447E287BEE10316BF33BE29CCA0B7636369031BA90907BA00B3EFAB6390DDF75C8B751F54C16CB8C76248C294E477F7F62240103C5A4C3F3655AB042D64E0CFC2E5F117B1C9BB7ACFBC0778941A3925C6BF8426546AA98CEEF4C779DDAE205C0 obelisk.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. K7fvlL4xnfvE2lJuP/lhaWrBkwBFklhBSxejbs3g/yhEfih77hAxa/M74pzKC3Y2NpAxupCQe6ALPvq2OQ3fdci3UfVMFsuMdiSMKU5Hf39iJAEDxaTD82VasELWTgz8Ll8Rexybt6z7wHeJQaOSXGv4QmVGqpjO70x3ndriBcA= ;{id = 42393} 076F62656C69736B096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D330166383FD04E425310A462813D73BC580B058EC6B7E88BD2D71AC02CF68E44B2BD5C2701192B07FA167AB04E4E329A45659B2A633C13EBB09BDEF2DFA08FC45E9E34D315F649BDE7CC793980E728831D56842FC29D80D800530B07F7A0AE43B6A059FDE175E920A6E6212777E33F1A0216E23D5B7B6D9A49257C46EA5DC6B obelisk.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0zAWY4P9BOQlMQpGKBPXO8WAsFjsa36IvS1xrALPaORLK9XCcBGSsH+hZ6sE5OMppFZZsqYzwT67Cb3vLfoI/EXp400xX2Sb3nzHk5gOcogx1WhC/CnYDYAFMLB/egrkO2oFn94XXpIKbmISd34z8aAhbiPVt7bZpJJXxG6l3Gs= ;{id = 42393} 076F62656C69736B096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000EDC6391EA62B4F9A2C7DB7E9F2CD0E9B50FA7927B328432A937EDE71647905AA8C1DFE5D46AB5ECD30A003B6A9AA099EEF0CBB5B2DC7CFDA0395B8DE35F0F7A8B4A55DD36760399724379DDCF4B93CC75AABE5809FFA9CB3D2594EA7FA2969DEC69D3F094C5819E7F7D267AE2F6B57F0CF7C120BF9959C4684B082918ACE9B1 obelisk.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DtxjkepitPmix9t+nyzQ6bUPp5J7MoQyqTft5xZHkFqowd/l1Gq17NMKADtqmqCZ7vDLtbLcfP2gOVuN418PeotKVd02dgOZckN53c9Lk8x1qr5YCf+pyz0llOp/opad7GnT8JTFgZ5/fSZ64va1fwz3wSC/mVnEaEsIKRis6bE= ;{id = 42393} 076F62656C69736B096E6C6E65746C616273026E6C00002C0001000027D8001601010257F12A5FF223048FBE7424227A5F5736F1D556 obelisk.nlnetlabs.nl. 10200 IN SSHFP 1 1 0257F12A5FF223048FBE7424227A5F5736F1D556 076F62656C69736B096E6C6E65746C616273026E6C00002C0001000027D80016020100FA2CC6497D6DDDEDD499437A518393BEBAC127 obelisk.nlnetlabs.nl. 10200 IN SSHFP 2 1 00FA2CC6497D6DDDEDD499437A518393BEBAC127 076F62656C69736B096E6C6E65746C616273026E6C00002F000100000E10001A036F6473096E6C6E65746C616273026E6C00000640000000000B obelisk.nlnetlabs.nl. 3600 IN NSEC ods.nlnetlabs.nl. A SSHFP RRSIG NSEC 036F6473096E6C6E65746C616273026E6C0000010001000027D80004D59AE082 ods.nlnetlabs.nl. 10200 IN A 213.154.224.130 036F6473096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002A4737415668BF597E612707E136DD701D18D6FDF184EDF2477626BCD9D9A466FC89512D959F07A427A42788381E53D92E29CC312D6EC35D64153920272369E7E8C7CB183C1180268857C5E6638228A7E07FFB9068E9A9C14C2C83C8775D7778B5E1831A6CA9A6266E7985E46EAD3C7BA24BA5306E689388BDF9B8D8CBA38D10 ods.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Kkc3QVZov1l+YScH4TbdcB0Y1v3xhO3yR3YmvNnZpGb8iVEtlZ8HpCekJ4g4HlPZLinMMS1uw11kFTkgJyNp5+jHyxg8EYAmiFfF5mOCKKfgf/uQaOmpwUwsg8h3XXd4teGDGmyppiZueYXkbq08e6JLpTBuaJOIvfm42MujjRA= ;{id = 42393} 036F6473096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001C41A01E582AA3FBB0987219011AAC6AC1A9A797FF34BC474344A6186B5C059664C30D7ED494956B1A6A91A8672797AA11D140B8C77031EFBBDAF9732A05E46A75CCE82E74E4814D3DB76E263B2D8843F007F9B0845FBE9793A6E803E6F68907BA8F2110275F0FA028A4412DECC922C4870B1590C570C4D0EE0D1390FABE09EB ods.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HEGgHlgqo/uwmHIZARqsasGpp5f/NLxHQ0SmGGtcBZZkww1+1JSVaxpqkahnJ5eqEdFAuMdwMe+72vlzKgXkanXM6C505IFNPbduJjstiEPwB/mwhF++l5Om6APm9okHuo8hECdfD6AopEEt7MkixIcLFZDFcMTQ7g0TkPq+Ces= ;{id = 42393} 036F6473096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A504CE96E79412ACCC257D9BD90B23D7B018B95658F4E951E6B05717FB00E7E6ED36A57C86780D550868871C5D46524779733DA9417630225849D050743D29A68BA691559795832089FB491658BA28D42BE28060BB7ED2BB939C452959B1D1D68BA184357E909C62C693A4E20303461B7148C86514CA6B1B04185575BF36C659 ods.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pQTOlueUEqzMJX2b2Qsj17AYuVZY9OlR5rBXF/sA5+btNqV8hngNVQhohxxdRlJHeXM9qUF2MCJYSdBQdD0ppoumkVWXlYMgiftJFli6KNQr4oBgu37Su5OcRSlZsdHWi6GENX6QnGLGk6TiAwNGG3FIyGUUymsbBBhVdb82xlk= ;{id = 42393} 036F6473096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002FFC0D7C017636E7E651C912146A92613FECA122393F3E4A9C2BADFC9CB2BE694B6B96DF99D008C0927FD5632FBEA77DF824C148F32524CDDF3F8FC27E341978916B1E717B7341493B9A407CA1202BEBC342691DCFA2937FE5BDD95280856720B798BC0DBA2A1F156310EB1DB0CC2E0FA18833BCB5D7B8ACCC3591B7DA06DF26 ods.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. L/wNfAF2NufmUckSFGqSYT/soSI5Pz5KnCut/JyyvmlLa5bfmdAIwJJ/1WMvvqd9+CTBSPMlJM3fP4/CfjQZeJFrHnF7c0FJO5pAfKEgK+vDQmkdz6KTf+W92VKAhWcgt5i8DboqHxVjEOsdsMwuD6GIM7y117iszDWRt9oG3yY= ;{id = 42393} 036F6473096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000130 ods.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::130 036F6473096E6C6E65746C616273026E6C00002C0001000027D8001601019C78228717D1AEBDB4E5C6156CE4559E50A562A1 ods.nlnetlabs.nl. 10200 IN SSHFP 1 1 9C78228717D1AEBDB4E5C6156CE4559E50A562A1 036F6473096E6C6E65746C616273026E6C00002C0001000027D80016020135BB7D1F0250EF1B9177EB36D26FD01EBEB633C4 ods.nlnetlabs.nl. 10200 IN SSHFP 2 1 35BB7D1F0250EF1B9177EB36D26FD01EBEB633C4 036F6473096E6C6E65746C616273026E6C00002F000100000E10001C056F6D76616C096E6C6E65746C616273026E6C00000640000008000B ods.nlnetlabs.nl. 3600 IN NSEC omval.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 056F6D76616C096E6C6E65746C616273026E6C0000050001000027D800140573616E6E65096E6C6E65746C616273026E6C00 omval.nlnetlabs.nl. 10200 IN CNAME sanne.nlnetlabs.nl. 056F6D76616C096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C71BE527E5C9E2E4E2231341F6172D46145512D212827C91D2791E2D1DE06DFB1B48D55BF32BA46649072F767C24ADEF9261FD698B2BEE542A61072D87D752B8FABE026FD8C56448D62420F9A25DB8234957FAF7A7A992B4DA69B6717E8446C8568076280856025B163B722DC322FB4721A067777EB679885DF7D5FF16CB2884 omval.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xxvlJ+XJ4uTiIxNB9hctRhRVEtISgnyR0nkeLR3gbfsbSNVb8yukZkkHL3Z8JK3vkmH9aYsr7lQqYQcth9dSuPq+Am/YxWRI1iQg+aJduCNJV/r3p6mStNpptnF+hEbIVoB2KAhWAlsWO3ItwyL7RyGgZ3d+tnmIXffV/xbLKIQ= ;{id = 42393} 056F6D76616C096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C003B769BE65364A1E6D11145E1F44492D743908734123DE8FBB74F10A8642584354423CC23096732972C990A5710B76ECF0C23C30C13CB2290484348033CF4A6016640AA87F45DEB3A1BB8D18AE09D6F066C9282B5C630FCBC79154A7740A46DDBC22AD491E6159C83920DC50DDDD25ADB1A2DE5F74978D887A4D6F77F2572A7E6 omval.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. O3ab5lNkoebREUXh9ESS10OQhzQSPej7t08QqGQlhDVEI8wjCWcylyyZClcQt27PDCPDDBPLIpBIQ0gDPPSmAWZAqof0Xes6G7jRiuCdbwZskoK1xjD8vHkVSndApG3bwirUkeYVnIOSDcUN3dJa2xot5fdJeNiHpNb3fyVyp+Y= ;{id = 42393} 056F6D76616C096E6C6E65746C616273026E6C00002F000100000E10001B046F6E7978096E6C6E65746C616273026E6C000006040000000003 omval.nlnetlabs.nl. 3600 IN NSEC onyx.nlnetlabs.nl. CNAME RRSIG NSEC 046F6E7978096E6C6E65746C616273026E6C0000010001000027D80004D59AE020 onyx.nlnetlabs.nl. 10200 IN A 213.154.224.32 046F6E7978096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009EAB50C66C900C799135ED4B8DAA3E897D0AA1C9C922FB193BB22845E22800418FBBED8C3FE732DF75BFB654543BB3AD32818F16AA163E56F8ACD2B0132F47AE0C5BF5E640B324C0EA8148D6C52FB33F619625A4566AF3E51149D0A4A33FCBC3B550EFC63A0BD46026356F352E731354D66A5EFC5DC825098A218063D6B61098 onyx.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nqtQxmyQDHmRNe1Ljao+iX0KocnJIvsZO7IoReIoAEGPu+2MP+cy33W/tlRUO7OtMoGPFqoWPlb4rNKwEy9Hrgxb9eZAsyTA6oFI1sUvsz9hliWkVmrz5RFJ0KSjP8vDtVDvxjoL1GAmNW81LnMTVNZqXvxdyCUJiiGAY9a2EJg= ;{id = 42393} 046F6E7978096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C8BEEEB194F7D6F6A1AECA66FFF658716730D2EC3ABE4ACC75F0D70CF91D28858FA229C2FCA4301ED692621A6D5E75BCFF0773EB53D62DECA7FBA1A78C40C15BBB8EF65C98E41DBDD42DBA94978135E4E90FC34272B97FF9EBF439C0E3AF93E3CC841E25583A4A1C669689D51D0AFC178057A8CAA636EAC91934D6228553550B onyx.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yL7usZT31vahrspm//ZYcWcw0uw6vkrMdfDXDPkdKIWPoinC/KQwHtaSYhptXnW8/wdz61PWLeyn+6GnjEDBW7uO9lyY5B291C26lJeBNeTpD8NCcrl/+ev0OcDjr5PjzIQeJVg6ShxmlonVHQr8F4BXqMqmNurJGTTWIoVTVQs= ;{id = 42393} 046F6E7978096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005AE33C5703029BD234281E0FAFF7A63ED7A12A30A272F4863442D8F56C409BB2362E1E488AA10C7C2FC8AA3D2F8737896DEA946686EC99A92B87EF26BB26E1549185997051B2EB3379848DCF5E3A271063918DBEDC8788D6773DFBBE2C8C47F5827940AABFC4247E34C350E9DA10A5D548BF533D3B9559454CEDBDE3AB19AA39 onyx.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WuM8VwMCm9I0KB4Pr/emPtehKjCicvSGNELY9WxAm7I2Lh5IiqEMfC/Iqj0vhzeJbeqUZobsmakrh+8muybhVJGFmXBRsuszeYSNz146JxBjkY2+3IeI1nc9+74sjEf1gnlAqr/EJH40w1Dp2hCl1Ui/Uz07lVlFTO2946sZqjk= ;{id = 42393} 046F6E7978096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009DA61F6B855A28DC5BBCC3EC639CBD0AB8C323B5201198C999F81AD40A06760E646C824FFB2DD53E92C455F9C74B08393882F9BB54AF88E82A7AD242DAF8924FA7C3F7EFA4420CE198CCA347D29AE3358FFDCB52BBC0C2391E53321DF4F103817CD6DFD211954D26215F6597F2ABCA1DC9E3A15D64E1F5061D86DE35CFC45FF7 onyx.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. naYfa4VaKNxbvMPsY5y9CrjDI7UgEZjJmfga1AoGdg5kbIJP+y3VPpLEVfnHSwg5OIL5u1SviOgqetJC2viST6fD9++kQgzhmMyjR9Ka4zWP/ctSu8DCOR5TMh308QOBfNbf0hGVTSYhX2WX8qvKHcnjoV1k4fUGHYbeNc/EX/c= ;{id = 42393} 046F6E7978096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010203BAFFFE052D9E onyx.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:baff:fe05:2d9e 046F6E7978096E6C6E65746C616273026E6C00002C0001000027D8001601011A752CEF2B1E785A91E27D16CF3E1A3F5F335DDE onyx.nlnetlabs.nl. 10200 IN SSHFP 1 1 1A752CEF2B1E785A91E27D16CF3E1A3F5F335DDE 046F6E7978096E6C6E65746C616273026E6C00002C0001000027D800160201784DDE0A38C94250445CABF91342F7230368E2C1 onyx.nlnetlabs.nl. 10200 IN SSHFP 2 1 784DDE0A38C94250445CABF91342F7230368E2C1 046F6E7978096E6C6E65746C616273026E6C00002F000100000E10001B046F70656E096E6C6E65746C616273026E6C00000640000008000B onyx.nlnetlabs.nl. 3600 IN NSEC open.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 046F70656E096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 open.nlnetlabs.nl. 10200 IN A 213.154.224.1 046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001B3BDA234644EF4F2CB881465779EAAB716E6E94D9A7837C7516D158D1C2D290060BFB3A71F2F6EF0EC328E3BD8EFA1B7ECEF8AF03ADA282C2AA64C4445A2705B6A69377CC3EBBA78430B9495C09628BE85A96E316BF0CC451AFC8871C6B3F44FCBA7B62258DC2BDCF04770D089D7244AC561470D450442305C36D7A51A641AA open.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GzvaI0ZE708suIFGV3nqq3FubpTZp4N8dRbRWNHC0pAGC/s6cfL27w7DKOO9jvobfs74rwOtooLCqmTERFonBbamk3fMPrunhDC5SVwJYovoWpbjFr8MxFGvyIccaz9E/Lp7YiWNwr3PBHcNCJ1yRKxWFHDUUEQjBcNtelGmQao= ;{id = 42393} 046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A0000F0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D3D33F40440FD12F26EEBBFA3BB7EBB1B05089039A37000CBF1C1698B6F5B95422E05BCB98D4B2345855AD62CFEE25A414A3CAE0C8BE8FCE83AE52AA2297E6F992C2C0AC4EF4ED43F39BC4DB594AC12D59CE30EDF0A8B6E84FD606E7EAE6C001A261BFFE5B1EE90777796B50FCC407780CEB4BFFB09A599AE3FEEAEC18F0B687 open.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 09M/QEQP0S8m7rv6O7frsbBQiQOaNwAMvxwWmLb1uVQi4FvLmNSyNFhVrWLP7iWkFKPK4Mi+j86DrlKqIpfm+ZLCwKxO9O1D85vE21lKwS1ZzjDt8Ki26E/WBufq5sABomG//lse6Qd3eWtQ/MQHeAzrS/+wmlma4/7q7Bjwtoc= ;{id = 42393} 046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006F6C6B0CFAF81CC977A4105E74ADFB923930F6715B1829C252C2EB681EB18040DF7699AE6FB7CA0ED0008908390DB78C9E505691629BDFCAD356C0F7431AFB40E51F825B43441836C3A14DCABAA6CAFBC9D23A57BDC046F27A200C9AFA4C2041376FC731C2A7D9156836F55CE5CCAB98A2D00BFEC86921D3B9ACFE8CF91D6740 open.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. b2xrDPr4HMl3pBBedK37kjkw9nFbGCnCUsLraB6xgEDfdpmub7fKDtAAiQg5DbeMnlBWkWKb38rTVsD3Qxr7QOUfgltDRBg2w6FNyrqmyvvJ0jpXvcBG8nogDJr6TCBBN2/HMcKn2RVoNvVc5cyrmKLQC/7IaSHTuaz+jPkdZ0A= ;{id = 42393} 046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005C9CC7F7D6D3E480CA7B95C8CCD546DC358A6809A6FACD18B29C09CF3F9464AB643C560631496D37040B8476AEA2E5FBDEC5ECCAC51EBA957164B05F6D4AA72228BF062273FF02F18C9ED0D1C7BAF4A05E3713D0E4ABC1F43648490103E60666160C31F6052F22005DCD465C232EE4E232F6D634B5A206ED6E73D7692F7C0C70 open.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. XJzH99bT5IDKe5XIzNVG3DWKaAmm+s0YspwJzz+UZKtkPFYGMUltNwQLhHauouX73sXsysUeupVxZLBfbUqnIii/BiJz/wLxjJ7Q0ce69KBeNxPQ5KvB9DZISQED5gZmFgwx9gUvIgBdzUZcIy7k4jL21jS1ogbtbnPXaS98DHA= ;{id = 42393} 046F70656E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C005198232DC0F715B3823E0854660E26679A73173BEDC62EA6168B41D1B7BD2E68823B2A44B14AFF84C8D7306F1FFF14D6F38261301DAABA4234A069F42EE43918A9E4F2E34A1F5FDA43D9A71440D843816BAFBED1E4843740A2FDF480043EC412C30672FE9321E073CDA2F4DF0FA69EC036E5FF07E9081C881CB8D0E6AA782B3C open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. UZgjLcD3FbOCPghUZg4mZ5pzFzvtxi6mFotB0be9LmiCOypEsUr/hMjXMG8f/xTW84JhMB2qukI0oGn0LuQ5GKnk8uNKH1/aQ9mnFEDYQ4Frr77R5IQ3QKL99IAEPsQSwwZy/pMh4HPNovTfD6aewDbl/wfpCByIHLjQ5qp4Kzw= ;{id = 42393} 046F70656E096E6C6E65746C616273026E6C00000F0001000027D800150032046F70656E096E6C6E65746C616273026E6C00 open.nlnetlabs.nl. 10200 IN MX 50 open.nlnetlabs.nl. 046F70656E096E6C6E65746C616273026E6C00000F0001000027D800130064056F6D76616C067465646E6574026E6C00 open.nlnetlabs.nl. 10200 IN MX 100 omval.tednet.nl. 046F70656E096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 open.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 046F70656E096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000053 open.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::53 046F70656E096E6C6E65746C616273026E6C00002C0001000027D80016010174CF48095EAF33D2097E750A79715908CB16D7C7 open.nlnetlabs.nl. 10200 IN SSHFP 1 1 74CF48095EAF33D2097E750A79715908CB16D7C7 046F70656E096E6C6E65746C616273026E6C00002C0001000027D800160201CA0D875F829DA13EEAC25C580C495590C12583A2 open.nlnetlabs.nl. 10200 IN SSHFP 2 1 CA0D875F829DA13EEAC25C580C495590C12583A2 046F70656E096E6C6E65746C616273026E6C00002F000100000E100024035F3235045F746370046F70656E096E6C6E65746C616273026E6C00000640010008000B open.nlnetlabs.nl. 3600 IN NSEC _25._tcp.open.nlnetlabs.nl. A MX AAAA SSHFP RRSIG NSEC 035F3235045F746370046F70656E096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _25._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 035F3235045F746370046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001C33E85CD7BCCD71AE4BB31CACC227EEB66F4A5520F3FB3412231E14E728A12F48D37D79B9E00B48E4A4685F240901FCD91BF2FFC34BDAF2214020C8E3FD266ADF22B2F4B4BCD64C85D5A42657187D9410FAB7365A2F7325B45A5C7DEAE5477442B8C8BADCEAE577C23899BE89CC88871EB9FC8DE7E37B8DE36B06B8295A5772 _25._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HDPoXNe8zXGuS7McrMIn7rZvSlUg8/s0EiMeFOcooS9I0315ueALSOSkaF8kCQH82Rvy/8NL2vIhQCDI4/0mat8isvS0vNZMhdWkJlcYfZQQ+rc2Wi9zJbRaXH3q5Ud0QrjIutzq5XfCOJm+icyIhx65/I3n43uN42sGuClaV3I= ;{id = 42393} 035F3235045F746370046F70656E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00CCF939D67F48F6078855368CEB6056455A75C40B1F50FB9EEC34299E6668A80D4BC21AB19B14F6D965A1B979B2BED77DBC8E5A8F0D64AFB421280DE24903FA0D27045D8B647F63F7E76994E59A80589FCC2E288577765456C01A2AEA1CB3E530337FFCFB16835F1B2250948D4F2383B40FBD1136CCEC392B4E23665E32B6CFF0 _25._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. zPk51n9I9geIVTaM62BWRVp1xAsfUPue7DQpnmZoqA1LwhqxmxT22WWhuXmyvtd9vI5ajw1kr7QhKA3iSQP6DScEXYtkf2P352mU5ZqAWJ/MLiiFd3ZUVsAaKuocs+UwM3/8+xaDXxsiUJSNTyODtA+9ETbM7DkrTiNmXjK2z/A= ;{id = 42393} 035F3235045F746370046F70656E096E6C6E65746C616273026E6C00002F000100000E100025045F343635045F746370046F70656E096E6C6E65746C616273026E6C000006040000000003 _25._tcp.open.nlnetlabs.nl. 3600 IN NSEC _465._tcp.open.nlnetlabs.nl. CNAME RRSIG NSEC 045F343635045F746370046F70656E096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _465._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343635045F746370046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B0F96CED17E05D67FBE5EE96CC828A2E6E9C81161241863C8CC7C486461B238B6388F4D690597CF9BBD6D2BE0E9875F854D2AF6D637097D8D24F0B4282148223B3120881699574A6AB4639F639FFE99C1AC772BBF059D24806F9D8926026CD45EF2F3127036FD2F17BDA24AEB4307679AB986C7DB20E1608C506FCA031CA325A _465._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sPls7RfgXWf75e6WzIKKLm6cgRYSQYY8jMfEhkYbI4tjiPTWkFl8+bvW0r4OmHX4VNKvbWNwl9jSTwtCghSCI7MSCIFplXSmq0Y59jn/6Zwax3K78FnSSAb52JJgJs1F7y8xJwNv0vF72iSutDB2eauYbH2yDhYIxQb8oDHKMlo= ;{id = 42393} 045F343635045F746370046F70656E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008509EE4454F65C839D28C9DE60CC00939BF68A69909974FEF1503AC6ADC1A3E645AE33AC7B0D782799751E243B7F0544DE4B91CB55E07DC3A3C6598A04B3D4BA0AC726207D11C0BBE54F866039A80AE971D808F38B73AB8D294B4EA3C0E031D41EB2F0FFBBDD1F41E4153E6E2CCFBF479977A7C520C61827845B0FB8C81BC338 _465._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. hQnuRFT2XIOdKMneYMwAk5v2immQmXT+8VA6xq3Bo+ZFrjOsew14J5l1HiQ7fwVE3kuRy1XgfcOjxlmKBLPUugrHJiB9EcC75U+GYDmoCulx2Ajzi3OrjSlLTqPA4DHUHrLw/7vdH0HkFT5uLM+/R5l3p8UgxhgnhFsPuMgbwzg= ;{id = 42393} 045F343635045F746370046F70656E096E6C6E65746C616273026E6C00002F000100000E100025045F353837045F746370046F70656E096E6C6E65746C616273026E6C000006040000000003 _465._tcp.open.nlnetlabs.nl. 3600 IN NSEC _587._tcp.open.nlnetlabs.nl. CNAME RRSIG NSEC 045F353837045F746370046F70656E096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _587._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F353837045F746370046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0082841C95272967BA7257057FE9B6B7D14CD721848B0851D88836687B1BA3CDE739532CA576748728FC80E3444EFE605F06C3EE157F7990A7FDFD0D2B100BDB91A6C5AC300B17AABE13EB639BE7AE4A11B9A6D2E5D0B7DF3005B002CB4EEC66D6115C9449E1DB51EA42AE2C92917EC43B217FA73A206D826CCDC3F28B41B1C8A6 _587._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. goQclScpZ7pyVwV/6ba30UzXIYSLCFHYiDZoexujzec5UyyldnSHKPyA40RO/mBfBsPuFX95kKf9/Q0rEAvbkabFrDALF6q+E+tjm+euShG5ptLl0LffMAWwAstO7GbWEVyUSeHbUepCriySkX7EOyF/pzogbYJszcPyi0GxyKY= ;{id = 42393} 045F353837045F746370046F70656E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00622E3C81EC0B9692518EA1BA7E96569A4BF42B193B3E0FD06E3DA8079AA784519FB08C00F03E90B1738FF0C88093DC693AA75EE170A5A8C0601C72DF84DBD5F0CF815986242FC6E8813274EAACBC65AA6BBA8BEB2E3F1BF6BF9B96FD742EADD38F0ED076CF6F1076A3FB4F53723FDCC3FD7AEDBFC36CB652DFECDAF08C3249D6 _587._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Yi48gewLlpJRjqG6fpZWmkv0Kxk7Pg/Qbj2oB5qnhFGfsIwA8D6QsXOP8MiAk9xpOqde4XClqMBgHHLfhNvV8M+BWYYkL8bogTJ06qy8ZapruovrLj8b9r+blv10Lq3Tjw7Qds9vEHaj+09Tcj/cw/167b/DbLZS3+za8IwySdY= ;{id = 42393} 045F353837045F746370046F70656E096E6C6E65746C616273026E6C00002F000100000E100025045F393933045F746370046F70656E096E6C6E65746C616273026E6C000006040000000003 _587._tcp.open.nlnetlabs.nl. 3600 IN NSEC _993._tcp.open.nlnetlabs.nl. CNAME RRSIG NSEC 045F393933045F746370046F70656E096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _993._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F393933045F746370046F70656E096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0032F71C1DA59EDFE00CEAB2F870F2F6B3DF590F3943314D155E55D4A5A0C21742141F676C7FCD9C19008973F90150FF54125E7AB40DAEDAFAE02D76E1F4D4F8DC1872157D64096BBDF6A936A849F29E41CB554CE2E60B847D03D60824EA7997BC54F52958958275EFC0ED51A0C0EE5358B55DDB47898612537D96A63A9EFED533 _993._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. MvccHaWe3+AM6rL4cPL2s99ZDzlDMU0VXlXUpaDCF0IUH2dsf82cGQCJc/kBUP9UEl56tA2u2vrgLXbh9NT43BhyFX1kCWu99qk2qEnynkHLVUzi5guEfQPWCCTqeZe8VPUpWJWCde/A7VGgwO5TWLVd20eJhhJTfZamOp7+1TM= ;{id = 42393} 045F393933045F746370046F70656E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008A17A13100A13608B1E5C63F6E645AC897D0411EE19C8DA142080C0EB07150BCF54939C6A7419D1B9E06FE66A784755AE17399EA2E55337E921B9B47F085464786FF635B45B3C51650BE8C5AC2B7DC1D4DEA9149D709234293F2D8363C13CE827CFA0793E29B51AEC329E4935A955FC83619F546D942A093834797CF3D7090BE _993._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ihehMQChNgix5cY/bmRayJfQQR7hnI2hQggMDrBxULz1STnGp0GdG54G/manhHVa4XOZ6i5VM36SG5tH8IVGR4b/Y1tFs8UWUL6MWsK33B1N6pFJ1wkjQpPy2DY8E86CfPoHk+KbUa7DKeSTWpVfyDYZ9UbZQqCTg0eXzz1wkL4= ;{id = 42393} 045F393933045F746370046F70656E096E6C6E65746C616273026E6C00002F000100000E10001D066F70656E2D36096E6C6E65746C616273026E6C000006040000000003 _993._tcp.open.nlnetlabs.nl. 3600 IN NSEC open-6.nlnetlabs.nl. CNAME RRSIG NSEC 066F70656E2D36096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 open-6.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 066F70656E2D36096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000053 open-6.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::53 066F70656E2D36096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003B2AB67B11CCB2999F3B88B8D4F78DAC729EE1A87AE9390362A7AD4055ABA8CB3F939F6F53919FF80534B0B75BEA094BC622BF2AFA03B4E17B33CCA435B27929CB7CD63820490F1DC48C6EFEDD08C540DFBFD70882085A38156FFA30D8D6337887935C98191208DBCAF91F8D31C2978CCCDAA584350DF03515E6ECD0D6A59514 open-6.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Oyq2exHMspmfO4i41PeNrHKe4ah66TkDYqetQFWrqMs/k59vU5Gf+AU0sLdb6glLxiK/KvoDtOF7M8ykNbJ5Kct81jggSQ8dxIxu/t0IxUDfv9cIgghaOBVv+jDY1jN4h5NcmBkSCNvK+R+NMcKXjMzapYQ1DfA1Febs0NallRQ= ;{id = 42393} 066F70656E2D36096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00026DD8FEB6826C9AA990AE7399EA0C9CDD69158E2963C1D33082F3C1FB67E03563B701FDF72856307B679A9F889B2EB80B307212D6C1AEC3A99504F71D9EF257982ADFDF65DBC4A565544F092A24C668668AE6184B94E375B2EB5CDDACF3CD3044327A8E2C4528F73936C8499BBFCDDF01C337ACC1B4BA0FB8BF964094120886 open-6.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Am3Y/raCbJqpkK5zmeoMnN1pFY4pY8HTMILzwftn4DVjtwH99yhWMHtnmp+Imy64CzByEtbBrsOplQT3HZ7yV5gq399l28SlZVRPCSokxmhmiuYYS5TjdbLrXN2s880wRDJ6jixFKPc5NshJm7/N3wHDN6zBtLoPuL+WQJQSCIY= ;{id = 42393} 066F70656E2D36096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002A65D5B2A37DC57BE3FB6042D048E6908629EE49FFCE49FCD2B1CF1F78042F9B08089B63B715118C13EB20357EB7C689F861E6371DE52E6FE7B8E67BC62B75BF586A030FBA9FEC49E5822A23FBA4F6D93558877D598E7CFF381781BF59A52EDC1F31DB86C54DEAF9B02E748B64CA93178D6B2F918CDDCE270E86BC96E6BEA677 open-6.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. KmXVsqN9xXvj+2BC0EjmkIYp7kn/zkn80rHPH3gEL5sICJtjtxURjBPrIDV+t8aJ+GHmNx3lLm/nuOZ7xit1v1hqAw+6n+xJ5YIqI/uk9tk1WId9WY58/zgXgb9ZpS7cHzHbhsVN6vmwLnSLZMqTF41rL5GM3c4nDoa8lua+pnc= ;{id = 42393} 066F70656E2D36096E6C6E65746C616273026E6C00002C0001000027D80016010174CF48095EAF33D2097E750A79715908CB16D7C7 open-6.nlnetlabs.nl. 10200 IN SSHFP 1 1 74CF48095EAF33D2097E750A79715908CB16D7C7 066F70656E2D36096E6C6E65746C616273026E6C00002C0001000027D800160201CA0D875F829DA13EEAC25C580C495590C12583A2 open-6.nlnetlabs.nl. 10200 IN SSHFP 2 1 CA0D875F829DA13EEAC25C580C495590C12583A2 066F70656E2D36096E6C6E65746C616273026E6C00002F000100000E10001F086F76657276696577096E6C6E65746C616273026E6C00000600000008000B open-6.nlnetlabs.nl. 3600 IN NSEC overview.nlnetlabs.nl. AAAA SSHFP RRSIG NSEC 086F76657276696577096E6C6E65746C616273026E6C0000050001000027D80015066E6167696F73096E6C6E65746C616273026E6C00 overview.nlnetlabs.nl. 10200 IN CNAME nagios.nlnetlabs.nl. 086F76657276696577096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009655668384BEF38A282BBBC1262B653C90677FCE5DC184817FE053B88B9A06C38A96321BBDADEF4B3FE25CFC5E1E3ADC2990AC93273D168055699FA612B33111E595C8ED172F3775725CEDBA3A7633FA783AECD5FA8115F0C42ACD4388377626AC1EA4792586D6341D5B90BCAB417E5C55FD4B3E147EF0F792AC17C287F3F85C overview.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. llVmg4S+84ooK7vBJitlPJBnf85dwYSBf+BTuIuaBsOKljIbva3vSz/iXPxeHjrcKZCskyc9FoBVaZ+mErMxEeWVyO0XLzd1clztujp2M/p4OuzV+oEV8MQqzUOIN3YmrB6keSWG1jQdW5C8q0F+XFX9Sz4UfvD3kqwXwofz+Fw= ;{id = 42393} 086F76657276696577096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00990C871E56244C5E4A1DF996309CD1992422DC1A1F859993FC13CD6CA4EBBC9BEB160EBAB9315CDF5A4E770E8228B136F0EFAE4B10FDA1F04C8FBB443DFCE4FEC851A4933F18D04F5B64655F874C1E940E85CCD4EE6F1225463428287E0ABB9B8F24822E4B95AC6270E70D5581C70B7D12DA7A5CAF5DC57B92054FE2A88182D5 overview.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mQyHHlYkTF5KHfmWMJzRmSQi3BofhZmT/BPNbKTrvJvrFg66uTFc31pOdw6CKLE28O+uSxD9ofBMj7tEPfzk/shRpJM/GNBPW2RlX4dMHpQOhczU7m8SJUY0KCh+CrubjySCLkuVrGJw5w1VgccLfRLaelyvXcV7kgVP4qiBgtU= ;{id = 42393} 086F76657276696577096E6C6E65746C616273026E6C00002F000100000E10001A0370616E096E6C6E65746C616273026E6C000006040000000003 overview.nlnetlabs.nl. 3600 IN NSEC pan.nlnetlabs.nl. CNAME RRSIG NSEC 0370616E096E6C6E65746C616273026E6C0000010001000027D80004D59AE026 pan.nlnetlabs.nl. 10200 IN A 213.154.224.38 0370616E096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A9C3B5E226A4421896214EDEBADB6B92CF65CE5D145EAC8353A9C9299CCA270B42D453DFBE08D1F8BBEE7041112E3D5B201107600350E2003973F9397A5500EB2ED5D0BE1422DAF959536BA56629A9256A1E59A01500A6D0CF597EB9840CD054C5B8E0C49238927F89075FCECF6ED0BD12C28DEA60A587BA32FE36F9A7E8C47B pan.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qcO14iakQhiWIU7euttrks9lzl0UXqyDU6nJKZzKJwtC1FPfvgjR+LvucEERLj1bIBEHYANQ4gA5c/k5elUA6y7V0L4UItr5WVNrpWYpqSVqHlmgFQCm0M9ZfrmEDNBUxbjgxJI4kn+JB1/Oz27QvRLCjepgpYe6Mv42+afoxHs= ;{id = 42393} 0370616E096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0076DDDF12DC19E4120B25866509778B901DA28581D448EBA2D2F1FB3E3104DB7D570E7EFE7D76CE3EB2E60DC1D5B613B78CA6C3F3E17BF2BC128D4DABF38F5CE1BD86B90763F5B52C2AF1FF2E71C8D3488AA9E48B77801442FF0A868B469928FA77875FBA8ABA705631BC8FD988CB621EA3B96D403E5339DDCF0989562BEC289A pan.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. dt3fEtwZ5BILJYZlCXeLkB2ihYHUSOui0vH7PjEE231XDn7+fXbOPrLmDcHVthO3jKbD8+F78rwSjU2r849c4b2GuQdj9bUsKvH/LnHI00iKqeSLd4AUQv8KhotGmSj6d4dfuoq6cFYxvI/ZiMtiHqO5bUA+UzndzwmJVivsKJo= ;{id = 42393} 0370616E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0037CC49817996AB4FD5855C09ED6251FC69AA696570DB1CC6AD06A47D0AA4A843BDDB0FDF84BF738C523F2EBDBBBDBFB2E8BB1EF50FB91F90A43466421E3CE51DE93E54F1D85B92B23EDD0D605E1D7FACB8BCB11020A122374D56C2EBBDD329A07CDE60E68681B1E23D791C12BE68A7531E66D9BB27399C94AAC2F51167562CE9 pan.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. N8xJgXmWq0/VhVwJ7WJR/GmqaWVw2xzGrQakfQqkqEO92w/fhL9zjFI/Lr27vb+y6Lse9Q+5H5CkNGZCHjzlHek+VPHYW5KyPt0NYF4df6y4vLEQIKEiN01Wwuu90ymgfN5g5oaBseI9eRwSvminUx5m2bsnOZyUqsL1EWdWLOk= ;{id = 42393} 0370616E096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001021CC0FFFE11B9B8 pan.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21c:c0ff:fe11:b9b8 0370616E096E6C6E65746C616273026E6C00002F000100000E10001D06706172726F74096E6C6E65746C616273026E6C000006400000080003 pan.nlnetlabs.nl. 3600 IN NSEC parrot.nlnetlabs.nl. A AAAA RRSIG NSEC 06706172726F74096E6C6E65746C616273026E6C00001C0001000027D800102001067C14C00000021372FFFEFB12D1 parrot.nlnetlabs.nl. 10200 IN AAAA 2001:67c:14c0:0:213:72ff:fefb:12d1 06706172726F74096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D137641E034C21C0C0F450F0790D937BB80C7305E1161CFE7F1428315789874C9053BE970DF659E318AB294A15010083718C42A99A9452DEAF85EC219CBB8C7E8766A73A1A88CC23B3D660B60D76375519EA07AB26274EF32F3997BA2AC86B0159A93C5139E6630E68145BE628237693EBF59B48E69739110A30884998A9D2CC parrot.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0TdkHgNMIcDA9FDweQ2Te7gMcwXhFhz+fxQoMVeJh0yQU76XDfZZ4xirKUoVAQCDcYxCqZqUUt6vhewhnLuMfodmpzoaiMwjs9Zgtg12N1UZ6gerJidO8y85l7oqyGsBWak8UTnmYw5oFFvmKCN2k+v1m0jmlzkRCjCISZip0sw= ;{id = 42393} 06706172726F74096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003CE0AAB4503C814CD1AB16977043811D99F5CABCB69B1229CB4A26D74B0C264DC471D033BC5E03B5FFA81CDDD2A34F800F3474190A60D3986856139B0C111FC3D4440D070C61EA6748E756C21BB94516903BEDE17D837112BCAEF25BAF4A42CC3595E838EFBF9769DBF7A3684EF1705D16C81102F0B337217EE0BE5EFEEBE4B9 parrot.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. POCqtFA8gUzRqxaXcEOBHZn1yry2mxIpy0om10sMJk3EcdAzvF4Dtf+oHN3So0+ADzR0GQpg05hoVhObDBEfw9REDQcMYepnSOdWwhu5RRaQO+3hfYNxEryu8luvSkLMNZXoOO+/l2nb96NoTvFwXRbIEQLwszchfuC+Xv7r5Lk= ;{id = 42393} 06706172726F74096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00975A01A9E4C2A29CCC1EDC7D3839060046E9032A2F58970B373F6C9AF43E7DB322FB399A90342CE71B458BD40EC20338187639168F78FFB4320FE9D9C2AACE44245D4C8F9DFD529D46773AF2A1D93C885B413BF6345A479703A55E3A031F790EE592284A97483205FF06FEA6A273A8838CDFFB427AE5B9D81A27A3B7BB8ACC01 parrot.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. l1oBqeTCopzMHtx9ODkGAEbpAyovWJcLNz9smvQ+fbMi+zmakDQs5xtFi9QOwgM4GHY5Fo94/7QyD+nZwqrORCRdTI+d/VKdRnc68qHZPIhbQTv2NFpHlwOlXjoDH3kO5ZIoSpdIMgX/Bv6monOog4zf+0J65bnYGiejt7uKzAE= ;{id = 42393} 06706172726F74096E6C6E65746C616273026E6C00002C0001000027D800160101236402543271F5A0B9812DE20FC4C2C6A67133B8 parrot.nlnetlabs.nl. 10200 IN SSHFP 1 1 236402543271F5A0B9812DE20FC4C2C6A67133B8 06706172726F74096E6C6E65746C616273026E6C00002C0001000027D800160201C6DC2F86740D2647D38F29C23176A470C5ECC99F parrot.nlnetlabs.nl. 10200 IN SSHFP 2 1 C6DC2F86740D2647D38F29C23176A470C5ECC99F 06706172726F74096E6C6E65746C616273026E6C00002C0001000027D800160301BEB7AEF3528B63AAA7163C07B9ED167C6715C14E parrot.nlnetlabs.nl. 10200 IN SSHFP 3 1 BEB7AEF3528B63AAA7163C07B9ED167C6715C14E 06706172726F74096E6C6E65746C616273026E6C00002F000100000E1000220B706172726F742D65746831096E6C6E65746C616273026E6C00000600000008000B parrot.nlnetlabs.nl. 3600 IN NSEC parrot-eth1.nlnetlabs.nl. AAAA SSHFP RRSIG NSEC 0B706172726F742D65746831096E6C6E65746C616273026E6C00001C0001000027D800102001067C14C00000021372FFFEFB12D3 parrot-eth1.nlnetlabs.nl. 10200 IN AAAA 2001:67c:14c0:0:213:72ff:fefb:12d3 0B706172726F742D65746831096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B1F0448E6482756768CDD5489E216745208A4C78446E606337C5749F5F478576BA6C46E07A67800966F4BED865B7765597B28B5E8F576055C2459F3B5096432B4BBE203DE03253E785678C90AB48F7612205CE747F621B32C1C53B3E7FB625D1C5E368CA9252B60A7742B4DA8DE6C3380F4B1BB6C4919E3C40ABB9CF0DC8BD8D parrot-eth1.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sfBEjmSCdWdozdVIniFnRSCKTHhEbmBjN8V0n19HhXa6bEbgemeACWb0vthlt3ZVl7KLXo9XYFXCRZ87UJZDK0u+ID3gMlPnhWeMkKtI92EiBc50f2IbMsHFOz5/tiXRxeNoypJStgp3QrTajebDOA9LG7bEkZ48QKu5zw3IvY0= ;{id = 42393} 0B706172726F742D65746831096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D0577918B97CEFF25CBF0AAF575052B7FD78E0FBAA239E9B4FA1A79FA25D239F731917F1C8BEC68E43D510E9152ED9150B9C34F3FBDF6A63DC3C9358BEA59E9859E13EA7D1626F743836A3B813745E58A8305BF726F5205B6D19730535BB5F7887982A87E06820A954A750564C22CB383FA089934B5C5EA3D7D646950CC9816D parrot-eth1.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0Fd5GLl87/JcvwqvV1BSt/144PuqI56bT6Gnn6JdI59zGRfxyL7GjkPVEOkVLtkVC5w08/vfamPcPJNYvqWemFnhPqfRYm90ODajuBN0XlioMFv3JvUgW20ZcwU1u194h5gqh+BoIKlUp1BWTCLLOD+giZNLXF6j19ZGlQzJgW0= ;{id = 42393} 0B706172726F742D65746831096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00354AFEC42E2159F59085538F0592BDCB97CAF551C9C1DA35F8930BB2AF910021AC83F8D1DFA7EF828E72D417910F161A00D0F3B27974179836127E1576CA52D6287A6E22F1F8E1A84EEFD40BFF445E29F76846C74C78E9807959206D3C71C8CD22F0FF676DF3123596951E30E40F3B7E74A942435DE9F749F158422229862039 parrot-eth1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. NUr+xC4hWfWQhVOPBZK9y5fK9VHJwdo1+JMLsq+RACGsg/jR36fvgo5y1BeRDxYaANDzsnl0F5g2En4VdspS1ih6biLx+OGoTu/UC/9EXin3aEbHTHjpgHlZIG08ccjNIvD/Z23zEjWWlR4w5A87fnSpQkNd6fdJ8VhCIimGIDk= ;{id = 42393} 0B706172726F742D65746831096E6C6E65746C616273026E6C00002C0001000027D800160101236402543271F5A0B9812DE20FC4C2C6A67133B8 parrot-eth1.nlnetlabs.nl. 10200 IN SSHFP 1 1 236402543271F5A0B9812DE20FC4C2C6A67133B8 0B706172726F742D65746831096E6C6E65746C616273026E6C00002C0001000027D800160201C6DC2F86740D2647D38F29C23176A470C5ECC99F parrot-eth1.nlnetlabs.nl. 10200 IN SSHFP 2 1 C6DC2F86740D2647D38F29C23176A470C5ECC99F 0B706172726F742D65746831096E6C6E65746C616273026E6C00002C0001000027D800160301BEB7AEF3528B63AAA7163C07B9ED167C6715C14E parrot-eth1.nlnetlabs.nl. 10200 IN SSHFP 3 1 BEB7AEF3528B63AAA7163C07B9ED167C6715C14E 0B706172726F742D65746831096E6C6E65746C616273026E6C00002F000100000E10001D0670686F626F73096E6C6E65746C616273026E6C00000600000008000B parrot-eth1.nlnetlabs.nl. 3600 IN NSEC phobos.nlnetlabs.nl. AAAA SSHFP RRSIG NSEC 0670686F626F73096E6C6E65746C616273026E6C0000010001000027D80004D59AE067 phobos.nlnetlabs.nl. 10200 IN A 213.154.224.103 0670686F626F73096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002D2EEF9FF0B8956C3A98EBB8A9F8B0D5AEB5AFCBD903C74AE3608A13C87D385DFB630EDC1FDEED2AE59F9370EF433BFCF0A19862FE852BA6F27FA587543F5EF1F3222AB1BCB8A2E3B4E3F9CC80AEA279F712CB4640F4F8EFB2C4B3B66E73B400128BADC9CC827EE3905E8CB4AE249E8C993DB4F71298712D8AF4560BDC1C1784 phobos.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. LS7vn/C4lWw6mOu4qfiw1a61r8vZA8dK42CKE8h9OF37Yw7cH97tKuWfk3DvQzv88KGYYv6FK6byf6WHVD9e8fMiKrG8uKLjtOP5zICuonn3EstGQPT477LEs7Zuc7QAEoutycyCfuOQXoy0riSejJk9tPcSmHEtivRWC9wcF4Q= ;{id = 42393} 0670686F626F73096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008EF58826717612593E148043C90A3B984E32885B67D0DB7134D955DFD8600484878F0E45E90C9A796F519A0B6F6332D7B738CDEDF0DB42B3E1C24AAB75055A2899E614E19D20EC10C21B4A650D8575BBA9C6EE2503BC7469B4C91E4E07E695F1E003087D584E750859E3D424DB482AEAD7B9E2DFBF0FC05772370E9E0E5B8412 phobos.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jvWIJnF2Elk+FIBDyQo7mE4yiFtn0NtxNNlV39hgBISHjw5F6QyaeW9RmgtvYzLXtzjN7fDbQrPhwkqrdQVaKJnmFOGdIOwQwhtKZQ2Fdbupxu4lA7x0abTJHk4H5pXx4AMIfVhOdQhZ49Qk20gq6te54t+/D8BXcjcOng5bhBI= ;{id = 42393} 0670686F626F73096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0099D6EFF54F757FCC17425BDDCB9C801202B1069765A4548528BBDD2A667AACEAFAF3660A424FB56134EEA374A0EF45F7765C3A617E22982FDAE92B0C49FF784456D6466E7C8513B2549F7FAD77EAEF7EC0F1C044F41A0F18423E71316CEA6A8FA7584C689E9A643175E9452E66B49E51D77C7AA31803838770712BA0D867A507 phobos.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. mdbv9U91f8wXQlvdy5yAEgKxBpdlpFSFKLvdKmZ6rOr682YKQk+1YTTuo3Sg70X3dlw6YX4imC/a6SsMSf94RFbWRm58hROyVJ9/rXfq737A8cBE9BoPGEI+cTFs6mqPp1hMaJ6aZDF16UUuZrSeUdd8eqMYA4OHcHEroNhnpQc= ;{id = 42393} 0670686F626F73096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A26608F24CE37F730CCBD32DE11B6D8BE4E2865A2ADCD9D6DE2537113E524AD3F2B6677A59171D1ED2AD7531CD438744C5B36AA3697B63DCF2CAA41123C6C29A3009514E9845321D0CC35BEB28497EBB5AE280ACB397B82380D3E011408C04FA1CF7BFD24D3577683A911859E8C59086B4BA66832CFBFEF3520D935497A5D2BB phobos.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. omYI8kzjf3MMy9Mt4Rtti+Tihloq3NnW3iU3ET5SStPytmd6WRcdHtKtdTHNQ4dExbNqo2l7Y9zyyqQRI8bCmjAJUU6YRTIdDMNb6yhJfrta4oCss5e4I4DT4BFAjAT6HPe/0k01d2g6kRhZ6MWQhrS6ZoMs+/7zUg2TVJel0rs= ;{id = 42393} 0670686F626F73096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001020F1FFFFE68F6B7 phobos.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:20f:1fff:fe68:f6b7 0670686F626F73096E6C6E65746C616273026E6C00002C0001000027D800160101CF3E74EBEBF9DE88D1A14BCFC387C00607E682ED phobos.nlnetlabs.nl. 10200 IN SSHFP 1 1 CF3E74EBEBF9DE88D1A14BCFC387C00607E682ED 0670686F626F73096E6C6E65746C616273026E6C00002C0001000027D800160201241A96919F7837B20DB540C7B1E0A0A7F45C8A07 phobos.nlnetlabs.nl. 10200 IN SSHFP 2 1 241A96919F7837B20DB540C7B1E0A0A7F45C8A07 0670686F626F73096E6C6E65746C616273026E6C00002F000100000E10001E07706C7569736A65096E6C6E65746C616273026E6C00000640000008000B phobos.nlnetlabs.nl. 3600 IN NSEC pluisje.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 07706C7569736A65096E6C6E65746C616273026E6C0000050001000027D8001506666C75666679096E6C6E65746C616273026E6C00 pluisje.nlnetlabs.nl. 10200 IN CNAME fluffy.nlnetlabs.nl. 07706C7569736A65096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C2FAD89F675D7EEBB3F85DB9F9D8DA1787CCAA782AECA40490573E26F44CC60BC1140CEDD1922137E0B9EA39BF4BA83FE892671A54E9127575D8B0BA7A514D7F01AAA2C1DBB6F2EDCE540C092AE1376B8BE348306D1AA25D9964FE888FBE72A615C6E3E65AAC7CFA1D31BDA7DF06354C7F0B620C8D8536B4AF40DF5138BC3CCE pluisje.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wvrYn2ddfuuz+F25+djaF4fMqngq7KQEkFc+JvRMxgvBFAzt0ZIhN+C56jm/S6g/6JJnGlTpEnV12LC6elFNfwGqosHbtvLtzlQMCSrhN2uL40gwbRqiXZlk/oiPvnKmFcbj5lqsfPodMb2n3wY1TH8LYgyNhTa0r0DfUTi8PM4= ;{id = 42393} 07706C7569736A65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00904426753FF3E6A2D308AFE012B697E2BAF0D848F4C9E53C43EAD2F034C7884760C0E3C1141F8DE7ABE372D75A2746BB9E8CBF047BFB3A6DFF20307217697DF1ADE2CA8784E5A8DE5F8F3FB2E11F8663B9517009AD3CCC9C5340601C1102C9714B3663C99CD0939131AFF63B68024533AB52CE817E24118F37AE1FF39A74BFB8 pluisje.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kEQmdT/z5qLTCK/gEraX4rrw2Ej0yeU8Q+rS8DTHiEdgwOPBFB+N56vjctdaJ0a7noy/BHv7Om3/IDByF2l98a3iyoeE5ajeX48/suEfhmO5UXAJrTzMnFNAYBwRAslxSzZjyZzQk5Exr/Y7aAJFM6tSzoF+JBGPN64f85p0v7g= ;{id = 42393} 07706C7569736A65096E6C6E65746C616273026E6C00002F000100000E10001D0672326D696E65096E6C6E65746C616273026E6C000006040000000003 pluisje.nlnetlabs.nl. 3600 IN NSEC r2mine.nlnetlabs.nl. CNAME RRSIG NSEC 0672326D696E65096E6C6E65746C616273026E6C0000050001000027D80013046D696E65096E6C6E65746C616273026E6C00 r2mine.nlnetlabs.nl. 10200 IN CNAME mine.nlnetlabs.nl. 0672326D696E65096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00901C3922E22BE6DB42E118452862C4391D1249F848757DE3ED9FA483B8200A8C3DC84C586F092ECFF635B67820359E00BCA2CE519E54412D15FF11FCF0453FC02C74053A4996BEF5B2958240177130386B92951778FBBEB1CCA275E70EEC05D7496BC3C75E6F0CE7F44B905E03C107B35DBB2C89EACE848683B27B47CFBD740D r2mine.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kBw5IuIr5ttC4RhFKGLEOR0SSfhIdX3j7Z+kg7ggCow9yExYbwkuz/Y1tnggNZ4AvKLOUZ5UQS0V/xH88EU/wCx0BTpJlr71spWCQBdxMDhrkpUXePu+scyidecO7AXXSWvDx15vDOf0S5BeA8EHs127LInqzoSGg7J7R8+9dA0= ;{id = 42393} 0672326D696E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00169BD45D073D22778A4683640AEAED67159A9D059806A69383F733A68473DEC425597CE81DA4F5505ED8146F4E28FA5DC0825813E9D5F0FC80DD677BC4F5F5303C2DFBC53C88F50D88420DC4EE6AA644C6A5A867E51D9492784D92514919D890953440ED0CECBABE6F6FEB772027F78EB588B606F8C63792222EBEABC371BAB1 r2mine.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FpvUXQc9IneKRoNkCurtZxWanQWYBqaTg/czpoRz3sQlWXzoHaT1UF7YFG9OKPpdwIJYE+nV8PyA3Wd7xPX1MDwt+8U8iPUNiEINxO5qpkTGpahn5R2UknhNklFJGdiQlTRA7Qzsur5vb+t3ICf3jrWItgb4xjeSIi6+q8NxurE= ;{id = 42393} 0672326D696E65096E6C6E65746C616273026E6C00002F000100000E10001D06726164697573096E6C6E65746C616273026E6C000006040000000003 r2mine.nlnetlabs.nl. 3600 IN NSEC radius.nlnetlabs.nl. CNAME RRSIG NSEC 06726164697573096E6C6E65746C616273026E6C0000010001000027D80004D59AE093 radius.nlnetlabs.nl. 10200 IN A 213.154.224.147 06726164697573096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007C9053CB826CBE174BA35A87135869E166804CD6F4763400E827C085E51138D4975D27AF7DF9BC6124113A702F2E99D5E80E8DC98060D35E8F9ED065C15717F5CB3AE2DA2BB82F118C2DB09457B3C0D3AEDFCA391879663410F0E27A57C677EEB765344F46298B30278370968416CFBB1480CA83CD115EA41A41816C71BB9B8D radius.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fJBTy4JsvhdLo1qHE1hp4WaATNb0djQA6CfAheURONSXXSevffm8YSQROnAvLpnV6A6NyYBg016PntBlwVcX9cs64toruC8RjC2wlFezwNOu38o5GHlmNBDw4npXxnfut2U0T0YpizAng3CWhBbPuxSAyoPNEV6kGkGBbHG7m40= ;{id = 42393} 06726164697573096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00D21770207DB05A4B802791DDFB6323B69B8D2CD456398C6055C06219D424E5EAEA7B0FC81CE1C1830735482F275FB9100F15E2BFFF88378D6433205F6247D5EF7D639776263058AD52FA9E265707BF83736A7B0F95F7E11FB84FF3C9DC9C6A2130E5501C1347C723E4DC63AA9A77039470661EA10632B7F5190533557B401E6D radius.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0hdwIH2wWkuAJ5Hd+2MjtpuNLNRWOYxgVcBiGdQk5erqew/IHOHBgwc1SC8nX7kQDxXiv/+IN41kMyBfYkfV731jl3YmMFitUvqeJlcHv4NzansPlffhH7hP88ncnGohMOVQHBNHxyPk3GOqmncDlHBmHqEGMrf1GQUzVXtAHm0= ;{id = 42393} 06726164697573096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001AFC2574C73029D08D63EA9A084DC1AE11BDD8CCA256F9A118331E15FDCF0ED975433F7AE79414DDCF86DD79815D183D3EF023BA342028A2B9CB4AEFB9A4F05A6D4FE11387CCABAF257467FC55521991A448BF3E436467A502761EB2E4E7007AD8CC54545B611B2BE52D4F4BD04AFDC373D8A65D1ED6B898DC82B87FC228EDDC radius.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GvwldMcwKdCNY+qaCE3BrhG92MyiVvmhGDMeFf3PDtl1Qz9655QU3c+G3XmBXRg9PvAjujQgKKK5y0rvuaTwWm1P4ROHzKuvJXRn/FVSGZGkSL8+Q2RnpQJ2HrLk5wB62MxUVFthGyvlLU9L0Er9w3PYpl0e1riY3IK4f8Io7dw= ;{id = 42393} 06726164697573096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001E5DB531FAE93CBDFC86B2402F8AE1D4C6E33C4688310FC267C99FA3939441DBBEA1BE7FC472D5C274085A1A244C9C541360CC6F815A4CC29F6701CAA520766DDF3E5117DBCE60AADE92A410EE35BC76FBFDA2F9A36A8B97BB69B57D01ABFF1A4AF511A2B1E9F9407935132EB01EBDDF866D804381AF4D9C581EB8F34EEE7CD6 radius.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Hl21MfrpPL38hrJAL4rh1MbjPEaIMQ/CZ8mfo5OUQdu+ob5/xHLVwnQIWhokTJxUE2DMb4FaTMKfZwHKpSB2bd8+URfbzmCq3pKkEO41vHb7/aL5o2qLl7tptX0Bq/8aSvURorHp+UB5NRMusB6934ZtgEOBr02cWB64807ufNY= ;{id = 42393} 06726164697573096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF002900000000 radius.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:29:: 06726164697573096E6C6E65746C616273026E6C00002C0001000027D8001601015E43419E9239E5FA11E9FD62E43D7D2DD68B8E8D radius.nlnetlabs.nl. 10200 IN SSHFP 1 1 5E43419E9239E5FA11E9FD62E43D7D2DD68B8E8D 06726164697573096E6C6E65746C616273026E6C00002C0001000027D8001602017204FD27ED4E7C8606AF3BF29EB4932BEDDBD3C1 radius.nlnetlabs.nl. 10200 IN SSHFP 2 1 7204FD27ED4E7C8606AF3BF29EB4932BEDDBD3C1 06726164697573096E6C6E65746C616273026E6C00002C0001000027D8001603012AAA7EEBA4B08802488E1AF6551C091025C7536A radius.nlnetlabs.nl. 10200 IN SSHFP 3 1 2AAA7EEBA4B08802488E1AF6551C091025C7536A 06726164697573096E6C6E65746C616273026E6C00002F000100000E10001E077265646D696E65096E6C6E65746C616273026E6C00000640000008000B radius.nlnetlabs.nl. 3600 IN NSEC redmine.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 077265646D696E65096E6C6E65746C616273026E6C0000050001000027D800130462656C61096E6C6E65746C616273026E6C00 redmine.nlnetlabs.nl. 10200 IN CNAME bela.nlnetlabs.nl. 077265646D696E65096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B7B08951B3F0A41FDACCA3265971F7577186EB930DECEA2D5DE3043D4AEECCE0E4E861085EA8DE379A8F1956168DE2AF313D58509A39A573BB562F22169208185487FAA36476E6CB25346FD877553E8B0B7A868C34BC67E93C473731A21996577E40A7A7D1D6955DDC8EB8905214932252724ED083DF988CC543F68F61417BF0 redmine.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. t7CJUbPwpB/azKMmWXH3V3GG65MN7OotXeMEPUruzODk6GEIXqjeN5qPGVYWjeKvMT1YUJo5pXO7Vi8iFpIIGFSH+qNkdubLJTRv2HdVPosLeoaMNLxn6TxHNzGiGZZXfkCnp9HWlV3cjriQUhSTIlJyTtCD35iMxUP2j2FBe/A= ;{id = 42393} 077265646D696E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002B1F188AB86B1FD740E90DA13ECD7D0D70068527799E492EEE333D445D5491A1090AF1DA6F3D2E32142648BBCFA0336B77EFFF34850CC6DF1F7900256B3702A47EC0A986CF64B25A120BF1AC7FC8AAF56E96F086F1DD404CC3D6B7BDD7D558AB8BA891675F58BD86660D2CE748F8BF3EBAF6D21D45A9206D75C179A63925FA5D redmine.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Kx8YirhrH9dA6Q2hPs19DXAGhSd5nkku7jM9RF1UkaEJCvHabz0uMhQmSLvPoDNrd+//NIUMxt8feQAlazcCpH7AqYbPZLJaEgvxrH/IqvVulvCG8d1ATMPWt73X1Viri6iRZ19YvYZmDSznSPi/Prr20h1FqSBtdcF5pjkl+l0= ;{id = 42393} 077265646D696E65096E6C6E65746C616273026E6C00002F000100000E1000240462696E64087265736F6C766572096E6C6E65746C616273026E6C000006040000000003 redmine.nlnetlabs.nl. 3600 IN NSEC bind.resolver.nlnetlabs.nl. CNAME RRSIG NSEC 0462696E64087265736F6C766572096E6C6E65746C616273026E6C0000010001000027D80004D59AE018 bind.resolver.nlnetlabs.nl. 10200 IN A 213.154.224.24 0462696E64087265736F6C766572096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C86E4DB5DFCBCECC46800610C1D9FAA2EE749CBCA7B25B8419D5F9138EA74D45A75A5A9B811953A651A920D7C8BC77F7FA5C3FF21FB9AEB6CC4EB8E517133D779BE776D1D0A29BBFFBC5F9B43438AFE32F6039EDB5CED579A545FA954C1C242A4448253CD810AA3F85235B324F88EB9F45A81D7AA74AA795AC202E338580B826 bind.resolver.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yG5Ntd/LzsxGgAYQwdn6ou50nLynsluEGdX5E46nTUWnWlqbgRlTplGpINfIvHf3+lw/8h+5rrbMTrjlFxM9d5vndtHQopu/+8X5tDQ4r+MvYDnttc7VeaVF+pVMHCQqREglPNgQqj+FI1syT4jrn0WoHXqnSqeVrCAuM4WAuCY= ;{id = 42393} 0462696E64087265736F6C766572096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0066D281536426E3958EBB24B5DBD3788C3E53EC514E54B9F270587C1A1DF4CB456F7EC7A0501FEBEC207F59841B9DE019C9BA501CA571083D5E79BD4F87C0CBE8D64F384F11A2F24A819CAEFA4AFA58E802F17248B56877787C93AD8AF55FD819ADBEB9DB9E35AEEEA9FB10F444D082B1C5868E1D2D0A3A439F3C8CBC123808BD bind.resolver.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZtKBU2Qm45WOuyS129N4jD5T7FFOVLnycFh8Gh30y0VvfsegUB/r7CB/WYQbneAZybpQHKVxCD1eeb1Ph8DL6NZPOE8RovJKgZyu+kr6WOgC8XJItWh3eHyTrYr1X9gZrb652541ru6p+xD0RNCCscWGjh0tCjpDnzyMvBI4CL0= ;{id = 42393} 0462696E64087265736F6C766572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002F5944082D4FA50023AFD511A3DB642A4E709FD3AD0D38062B0F693900D185A60338DCF6485E08283BD2999FF44EDBE724DD210E4004E76EEC4275264FC6122C9438EEB18CE131EE43EDA86064AC83EEA3377E9D3F963F4FDDBFC431E64E6F075D4620A7C72A8F72717A8B5587A206C4EBD839E0D8E1EEA1D7AD2FE511212149 bind.resolver.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. L1lECC1PpQAjr9URo9tkKk5wn9OtDTgGKw9pOQDRhaYDONz2SF4IKDvSmZ/0TtvnJN0hDkAE527sQnUmT8YSLJQ47rGM4THuQ+2oYGSsg+6jN36dP5Y/T92/xDHmTm8HXUYgp8cqj3JxeotVh6IGxOvYOeDY4e6h160v5REhIUk= ;{id = 42393} 0462696E64087265736F6C766572096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000024 bind.resolver.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::24 0462696E64087265736F6C766572096E6C6E65746C616273026E6C00002F000100000E10002707756E626F756E64087265736F6C766572096E6C6E65746C616273026E6C000006400000080003 bind.resolver.nlnetlabs.nl. 3600 IN NSEC unbound.resolver.nlnetlabs.nl. A AAAA RRSIG NSEC 07756E626F756E64087265736F6C766572096E6C6E65746C616273026E6C0000010001000027D80004D59AE017 unbound.resolver.nlnetlabs.nl. 10200 IN A 213.154.224.23 07756E626F756E64087265736F6C766572096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0046B305FB3FF672025622862AB8F1AE9F1ED9646B8DB90EA25403A5BFB9113883BA2848B8383757E30ECAA35674EC58FE3231D9A220B4EA0BCAC3429E6011012A895055F4886102AE2C5EFD0AB6A05A8EA433B8E981D7AE3B734EF3FBF20CBD5535540CBB79C6DD690D3330D572076A9C5EE2935EDC2AF284A274FEB634B4EC46 unbound.resolver.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RrMF+z/2cgJWIoYquPGunx7ZZGuNuQ6iVAOlv7kROIO6KEi4ODdX4w7Ko1Z07Fj+MjHZoiC06gvKw0KeYBEBKolQVfSIYQKuLF79CragWo6kM7jpgdeuO3NO8/vyDL1VNVQMu3nG3WkNMzDVcgdqnF7ik17cKvKEonT+tjS07EY= ;{id = 42393} 07756E626F756E64087265736F6C766572096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008C0C3224A67FDE645DAF8A30E2E2E91A880D4028327D6EA6D6F767E3E19106203AEA86E75116EF5355F83345D76A1231894C838380039CF09CA234C32F9832D0D08503EF74B6B6959AB4E3AD46A9348D451AD4EB04521178C0EC588405A011C49F75404A63CA4B090A245F7D7D7FF7380DF960FE5CDDD0BB861A39214540627B unbound.resolver.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jAwyJKZ/3mRdr4ow4uLpGogNQCgyfW6m1vdn4+GRBiA66obnURbvU1X4M0XXahIxiUyDg4ADnPCcojTDL5gy0NCFA+90traVmrTjrUapNI1FGtTrBFIReMDsWIQFoBHEn3VASmPKSwkKJF99fX/3OA35YP5c3dC7hho5IUVAYns= ;{id = 42393} 07756E626F756E64087265736F6C766572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007930A3E1ADC2A3270ED2C660B5D6ABDB1FA4346D8CCA2AB3DB3FC5F73B2CAB3BD24203B821A80605D88B4073C6EDCDC9E4786B99A0582D2470561730B99B9724FF34F0D713212D8720122758F5F0BD7A73C5CC19EBF63E8DF9255241793BAB3296AEF43C0028C652EE84D6EFA3CADBF720A879476E2E301917D471BB74896BFB unbound.resolver.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. eTCj4a3CoycO0sZgtdar2x+kNG2Myiqz2z/F9zssqzvSQgO4IagGBdiLQHPG7c3J5HhrmaBYLSRwVhcwuZuXJP808NcTIS2HIBInWPXwvXpzxcwZ6/Y+jfklUkF5O6sylq70PAAoxlLuhNbvo8rb9yCoeUduLjAZF9Rxu3SJa/s= ;{id = 42393} 07756E626F756E64087265736F6C766572096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000023 unbound.resolver.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::23 07756E626F756E64087265736F6C766572096E6C6E65746C616273026E6C00002F000100000E10001D06726970653637096E6C6E65746C616273026E6C000006400000080003 unbound.resolver.nlnetlabs.nl. 3600 IN NSEC ripe67.nlnetlabs.nl. A AAAA RRSIG NSEC 06726970653637096E6C6E65746C616273026E6C0000020001000027D80018026E7306726970653637096E6C6E65746C616273026E6C00 ripe67.nlnetlabs.nl. 10200 IN NS ns.ripe67.nlnetlabs.nl. 06726970653637096E6C6E65746C616273026E6C00002F000100000E10001B04726F746F096E6C6E65746C616273026E6C000006200000000003 ripe67.nlnetlabs.nl. 3600 IN NSEC roto.nlnetlabs.nl. NS RRSIG NSEC 06726970653637096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0091B0FC2C9AB0192E2A3E71C26F637A15D98BCF05803A714D908A14C798CE0645BE053521020A7C810F98717F31C9F838C280ECB46BD48CE58419591D4BC32169D26B976B9C4332F491BD6336289A7DA7DC0F9ED53740ACBF3542DEBBB1C61FC0F1E71C1A4BF4C846CAC454116F8E67B2F49118945C4B8B4C3E16E51501AD2377 ripe67.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kbD8LJqwGS4qPnHCb2N6FdmLzwWAOnFNkIoUx5jOBkW+BTUhAgp8gQ+YcX8xyfg4woDstGvUjOWEGVkdS8MhadJrl2ucQzL0kb1jNiiafafcD57VN0CsvzVC3ruxxh/A8eccGkv0yEbKxFQRb45nsvSRGJRcS4tMPhblFQGtI3c= ;{id = 42393} 026E7306726970653637096E6C6E65746C616273026E6C00001C0001000027D80010200107B800400001D0E1000000000002 ns.ripe67.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::2 04726F746F096E6C6E65746C616273026E6C0000010001000027D80004D59AE099 roto.nlnetlabs.nl. 10200 IN A 213.154.224.153 04726F746F096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00CB592217CDEA8E5C5DD68963AD860E42B73B8C9308D19674ACDEBF7D649DDB52AE3BCFD3FA8A12AEEF0A541331A4D24A97BDD04E89368C0E7496D0E60CC29F9D185E2643E6299BD1B7EBCB2C3A27C9D688099A21958F2EBE89BD96DCD5323AD83F78971965355CE597AFB24B2E843D99932F2565465D68E9E625D2386597358A roto.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. y1kiF83qjlxd1oljrYYOQrc7jJMI0ZZ0rN6/fWSd21KuO8/T+ooSru8KVBMxpNJKl73QTok2jA50ltDmDMKfnRheJkPmKZvRt+vLLDonydaICZohlY8uvom9ltzVMjrYP3iXGWU1XOWXr7JLLoQ9mZMvJWVGXWjp5iXSOGWXNYo= ;{id = 42393} 04726F746F096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0077342B7A7A6E693A4A95342649DD790DF7F671D6B489874F0FA2A9AA0145F06786B9E983A04C285F3F415512C3AE027E65660B9B3F16F75FD81184F854FF513B7622D41CF181853B10614458F311E95CDFEEB124EE1CEB59E70D7AA68BE2816F23FC2294B93ADA2F100FC6CA7310ADD2B3DA19F271A033DF634E6A3DD30E9B54 roto.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. dzQrenpuaTpKlTQmSd15Dff2cda0iYdPD6KpqgFF8GeGuemDoEwoXz9BVRLDrgJ+ZWYLmz8W91/YEYT4VP9RO3Yi1BzxgYU7EGFEWPMR6Vzf7rEk7hzrWecNeqaL4oFvI/wilLk62i8QD8bKcxCt0rPaGfJxoDPfY05qPdMOm1Q= ;{id = 42393} 04726F746F096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0009D2FC06D256F56A9ED36F6963E4E5B5789443877CBAA4D64B70A8358E33C9DB60542144B69E380311DD452E7848BD36290C9C765DE02A328F22279A9879592E16E9FCC70F35BA3BB58F88CEDAED682E12B273EE24D6EB05921F0F45D023BAC3DE87DF7173FEA21180F5314581284B53E426FDBAB7F1D73F3D657B98BB20F6AB roto.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. CdL8BtJW9Wqe029pY+TltXiUQ4d8uqTWS3CoNY4zydtgVCFEtp44AxHdRS54SL02KQycdl3gKjKPIieamHlZLhbp/McPNbo7tY+IztrtaC4SsnPuJNbrBZIfD0XQI7rD3offcXP+ohGA9TFFgShLU+Qm/bq38dc/PWV7mLsg9qs= ;{id = 42393} 04726F746F096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000153 roto.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::153 04726F746F096E6C6E65746C616273026E6C00002F000100000E10001B0472706B69096E6C6E65746C616273026E6C000006400000080003 roto.nlnetlabs.nl. 3600 IN NSEC rpki.nlnetlabs.nl. A AAAA RRSIG NSEC 0472706B69096E6C6E65746C616273026E6C0000010001000027D80004D59AE009 rpki.nlnetlabs.nl. 10200 IN A 213.154.224.9 0472706B69096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001912322E522E6AF69D8E6C4D464046E29A5895341DF91408773CB73D0B1A25625562FD33E4E14C86B4479A95FC8C1C3D44982D8E51BE27AC6DF095BB9ED10392B76D073EE1E836816A4FF5A631DCBBC3348654244FB03AC020072D9717D9A1037C08E59CD3BBF2DFFFABF08415B3C12592BD29AA475C7234A44D0DC3B3971C71 rpki.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GRIyLlIuavadjmxNRkBG4ppYlTQd+RQIdzy3PQsaJWJVYv0z5OFMhrRHmpX8jBw9RJgtjlG+J6xt8JW7ntEDkrdtBz7h6DaBak/1pjHcu8M0hlQkT7A6wCAHLZcX2aEDfAjlnNO78t//q/CEFbPBJZK9KapHXHI0pE0Nw7OXHHE= ;{id = 42393} 0472706B69096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B8918718F8F1917E1BF9C31872A33C15ECF531A806239C3E38824C6590B753B97C89DBC3634E382BF4D8236E1A285CE9C159B66156E549CD5A55013C707FDB4BEC2C00F9C45CB0E12036FC6E4D92737C63D72598D1ED445DCB26219D3B734990DD0A28488340328BCEC4F64A630DCC1477C3083154329ABF7249A330628AD7B7 rpki.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. uJGHGPjxkX4b+cMYcqM8Fez1MagGI5w+OIJMZZC3U7l8idvDY044K/TYI24aKFzpwVm2YVblSc1aVQE8cH/bS+wsAPnEXLDhIDb8bk2Sc3xj1yWY0e1EXcsmIZ07c0mQ3QooSINAMovOxPZKYw3MFHfDCDFUMpq/ckmjMGKK17c= ;{id = 42393} 0472706B69096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0021426357A84530E04B5487BFF866C232BC8C7BC9EDFBC241FB39BBDEE4B1B9E8CE735AD77C7BFC6B6517D95DBFAF2206445CB8C2D638443F0532B0DB6E31870342A8EC0DE0D8B7D0A0E2D3232F8AE8E417A6E732423B4F9F2E172F169B9C513613A10D2652CCE32D0EEDEEFE490E350A1C06283C17B7B6FAA1243EEC13769CB9 rpki.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IUJjV6hFMOBLVIe/+GbCMryMe8nt+8JB+zm73uSxuejOc1rXfHv8a2UX2V2/ryIGRFy4wtY4RD8FMrDbbjGHA0Ko7A3g2LfQoOLTIy+K6OQXpucyQjtPny4XLxabnFE2E6ENJlLM4y0O7e7+SQ41ChwGKDwXt7b6oSQ+7BN2nLk= ;{id = 42393} 0472706B69096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009B50CD971F1BA53142F284A27F5F5EAC909D5E7FD25C9188213727E1EF33E4D49617EFFDAD7FE47CBEF99DA1122962347DED2F7125D2A03629B187D57976A0AEFCD117AE230FE50F4439FB85840564D3DB1034D0AB4CE2528AA6C2C30B43444525E39C1E7DF173B77EC7CD212881F55F6B0DA31F50854925B1D0AB3E350CAF6A rpki.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. m1DNlx8bpTFC8oSif19erJCdXn/SXJGIITcn4e8z5NSWF+/9rX/kfL75naESKWI0fe0vcSXSoDYpsYfVeXagrvzRF64jD+UPRDn7hYQFZNPbEDTQq0ziUoqmwsMLQ0RFJeOcHn3xc7d+x80hKIH1X2sNox9QhUklsdCrPjUMr2o= ;{id = 42393} 0472706B69096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010BAC000300000000 rpki.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:bac:3:: 0472706B69096E6C6E65746C616273026E6C00002C0001000027D800160101B4A8A3D4666C1D78F12E7EC01A8CDA045D263B74 rpki.nlnetlabs.nl. 10200 IN SSHFP 1 1 B4A8A3D4666C1D78F12E7EC01A8CDA045D263B74 0472706B69096E6C6E65746C616273026E6C00002C0001000027D8001602010C494EEF742E482001BD6FFCC8AEC370D1A8FE3B rpki.nlnetlabs.nl. 10200 IN SSHFP 2 1 0C494EEF742E482001BD6FFCC8AEC370D1A8FE3B 0472706B69096E6C6E65746C616273026E6C00002F000100000E100019027274096E6C6E65746C616273026E6C00000640000008000B rpki.nlnetlabs.nl. 3600 IN NSEC rt.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 027274096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 rt.nlnetlabs.nl. 10200 IN A 213.154.224.1 027274096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00CB1274032F9C2CFBCE1391830870E39DF9C1085B75A957B2F943F19D3FC4EEE0AF448E2EB58C3A45235C92166EC352D35BFC43F4320293465B1CA28608092F7A4F4F678E61B0AE3886D6372488460A5B6460275B29AFE6327EA4F5B5DE5EFE7B19346CB316530F04FF6CA8138E2CB5CE83DA7D93ADCC7E84A13F6604BACE7C63 rt.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yxJ0Ay+cLPvOE5GDCHDjnfnBCFt1qVey+UPxnT/E7uCvRI4utYw6RSNckhZuw1LTW/xD9DICk0ZbHKKGCAkvek9PZ45hsK44htY3JIhGCltkYCdbKa/mMn6k9bXeXv57GTRssxZTDwT/bKgTjiy1zoPafZOtzH6EoT9mBLrOfGM= ;{id = 42393} 027274096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0091B507B6847C6751B75AF299A78C4521525A0688515BE4F04EEED97DB396051A4A78DA970E0423E9C5EB91E0597DFBC3308C00E269D619D42CE12B552F8D4C5956DA516053249D385784B351843903E4A44C20C527BDCA63123BD34AA4ADD8A7135E0C56BB88855789D9428A0943C99F0CF9A8FCB9393303035358C27579C6AE rt.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kbUHtoR8Z1G3WvKZp4xFIVJaBohRW+TwTu7ZfbOWBRpKeNqXDgQj6cXrkeBZffvDMIwA4mnWGdQs4StVL41MWVbaUWBTJJ04V4SzUYQ5A+SkTCDFJ73KYxI700qkrdinE14MVruIhVeJ2UKKCUPJnwz5qPy5OTMDA1NYwnV5xq4= ;{id = 42393} 027274096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004FC016E7ADC285C510D667DCBA9C8B625047B8F1B7701F2BB1B14356D831F96FB58668DEF15A6C67CEBE97C504C27E1157C70534FEA0BB2B1A20B85B9260FB144DDD747601E47BC9F873A570E820C38A94C60E66F77CDA3C7B3E447E9950D383957E05D11D1D7F7891205D4DB6A22A0103DE63AE11CC9E5AAD3F7B2E8F832981 rt.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T8AW563ChcUQ1mfcupyLYlBHuPG3cB8rsbFDVtgx+W+1hmje8VpsZ86+l8UEwn4RV8cFNP6guysaILhbkmD7FE3ddHYB5HvJ+HOlcOggw4qUxg5m93zaPHs+RH6ZUNODlX4F0R0df3iRIF1NtqIqAQPeY64RzJ5arT97Lo+DKYE= ;{id = 42393} 027274096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 rt.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 027274096E6C6E65746C616273026E6C00002F000100000E10001B0473616C74096E6C6E65746C616273026E6C000006400000080003 rt.nlnetlabs.nl. 3600 IN NSEC salt.nlnetlabs.nl. A AAAA RRSIG NSEC 0473616C74096E6C6E65746C616273026E6C0000010001000027D80004D59AE091 salt.nlnetlabs.nl. 10200 IN A 213.154.224.145 0473616C74096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007FD4D7A86B5169C2EA95BB2B698686195C25427D9139F255945071287CB63617B2B4D0529326640E4DA35A91DDFABDCBA972E0997BDA26AB1A349485432FA02E4F94B2CB713BAFA128F2E3594CC7C350DF36B5786318F7C8457DEB64E9CA6BAD56BAE2149F663825ECE9AC5E66EE7229F14D804C4B62515BF44295AC4F63A801 salt.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. f9TXqGtRacLqlbsraYaGGVwlQn2ROfJVlFBxKHy2NheytNBSkyZkDk2jWpHd+r3LqXLgmXvaJqsaNJSFQy+gLk+UsstxO6+hKPLjWUzHw1DfNrV4Yxj3yEV962TpymutVrriFJ9mOCXs6axeZu5yKfFNgExLYlFb9EKVrE9jqAE= ;{id = 42393} 0473616C74096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008E920031D9FEC84E6EF83AC63E02E38D1440B03323EE0E565BE7713C7AF085FB51007CD26C370AD38117C5709ED05106074F9A75A51EEC42565CD9FACBDCA753F95EA1A261DE9C90458846BA1E1D4CFDD4922CFAD7EEB38308E6707CA5650F805A48264E1BDC2103444962877DF2F0869CC19802ACB126BEB2AF92CF67345F67 salt.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jpIAMdn+yE5u+DrGPgLjjRRAsDMj7g5WW+dxPHrwhftRAHzSbDcK04EXxXCe0FEGB0+adaUe7EJWXNn6y9ynU/leoaJh3pyQRYhGuh4dTP3Ukiz61+6zgwjmcHylZQ+AWkgmThvcIQNESWKHffLwhpzBmAKssSa+sq+Sz2c0X2c= ;{id = 42393} 0473616C74096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0096D4A91BCB9E60C70248EA9B8A4172BED02FA1CA7EBE1233C3C65F817EDCBBF7BF950A9AE6A82B83E4474692B0986B0040885C5CEFD96FF596D11B7DD8CFC448216E805E6D80AA4365A252B2E69AF5D3693B5F4BAB51BA844698C830AB1ED7FD6417629929F29D40AC535FAA9E3971C0CC49FF73446ADBAD7D6E0A1BE06DC76B salt.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ltSpG8ueYMcCSOqbikFyvtAvocp+vhIzw8ZfgX7cu/e/lQqa5qgrg+RHRpKwmGsAQIhcXO/Zb/WW0Rt92M/ESCFugF5tgKpDZaJSsuaa9dNpO19Lq1G6hEaYyDCrHtf9ZBdimSnynUCsU1+qnjlxwMxJ/3NEatutfW4KG+Btx2s= ;{id = 42393} 0473616C74096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF002700000000 salt.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:27:: 0473616C74096E6C6E65746C616273026E6C00002F000100000E10001B0473616E65096E6C6E65746C616273026E6C000006400000080003 salt.nlnetlabs.nl. 3600 IN NSEC sane.nlnetlabs.nl. A AAAA RRSIG NSEC 0473616E65096E6C6E65746C616273026E6C0000010001000027D80004D59AE006 sane.nlnetlabs.nl. 10200 IN A 213.154.224.6 0473616E65096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003BB8A0D4EB88F54616FC38E6561DBFA52A951D0C2DF6884BD72C73ACF58095BC6600B4C670D1D45DD1B9924BD1C3FE87780F3741D2DAD83D7493A12C4EBB93A2405613CBD8427886CC38D02E6281098260D4E94F93224B76EDE37C623589AEE7C2F8BCC6E0775FE64CB242A884988D381CBD5978719D2CE1F08D3BA3FA6529FA sane.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. O7ig1OuI9UYW/DjmVh2/pSqVHQwt9ohL1yxzrPWAlbxmALTGcNHUXdG5kkvRw/6HeA83QdLa2D10k6EsTruTokBWE8vYQniGzDjQLmKBCYJg1OlPkyJLdu3jfGI1ia7nwvi8xuB3X+ZMskKohJiNOBy9WXhxnSzh8I07o/plKfo= ;{id = 42393} 0473616E65096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005011C64BD683AF7FB2E9B0699B807829CD9A6FE30D938F131DF9039C3B57A2F95AA06178A11AF27DF0646EFF008DC9BBA820DF19C93D931314E14A824051351A54287D78EBA4512DF288A9497CBC2B752A484DAE45CAE7B90EDF856B346C50BA3B332B46C2015C85E2996771BF21D60E4A121BFC10806F6169472BB684829DDE sane.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. UBHGS9aDr3+y6bBpm4B4Kc2ab+MNk48THfkDnDtXovlaoGF4oRryffBkbv8Ajcm7qCDfGck9kxMU4UqCQFE1GlQofXjrpFEt8oipSXy8K3UqSE2uRcrnuQ7fhWs0bFC6OzMrRsIBXIXimWdxvyHWDkoSG/wQgG9haUcrtoSCnd4= ;{id = 42393} 0473616E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C000B7484E60F0D7E3956356A55A9021F6F78B432E852258A4307A8E582371AAB450D1CA79215E664623FC2F1B05F683C64825833B86B61D39597F93EB41E2E6627A2657F139638DBE17286AE9A27CCDF42834ECF58C963B41CBB1E323B10E2C377EF2D3B1137F0DF65BFC0CBCC869B380843A8AF22A56F1083982B9BF7ED6BBED1 sane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. C3SE5g8NfjlWNWpVqQIfb3i0MuhSJYpDB6jlgjcaq0UNHKeSFeZkYj/C8bBfaDxkglgzuGth05WX+T60Hi5mJ6JlfxOWONvhcoaumifM30KDTs9YyWO0HLseMjsQ4sN37y07ETfw32W/wMvMhps4CEOoryKlbxCDmCub9+1rvtE= ;{id = 42393} 0473616E65096E6C6E65746C616273026E6C00002C0001000027D800160101F899FD53D7C64116C900636BA15638CCD243AC64 sane.nlnetlabs.nl. 10200 IN SSHFP 1 1 F899FD53D7C64116C900636BA15638CCD243AC64 0473616E65096E6C6E65746C616273026E6C00002C0001000027D80016020149B299B7BE787B5D789D2AC9A9532A02224CC59E sane.nlnetlabs.nl. 10200 IN SSHFP 2 1 49B299B7BE787B5D789D2AC9A9532A02224CC59E 0473616E65096E6C6E65746C616273026E6C00002F000100000E10001C0573616E6E65096E6C6E65746C616273026E6C00000640000000000B sane.nlnetlabs.nl. 3600 IN NSEC sanne.nlnetlabs.nl. A SSHFP RRSIG NSEC 0573616E6E65096E6C6E65746C616273026E6C0000010001000027D80004D59AE027 sanne.nlnetlabs.nl. 10200 IN A 213.154.224.39 0573616E6E65096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C007DA7731AA4E89D57788CF4FB2D9BCF20A0C2C60C16578560EA0387054B9090335912FBE7B8ACA5BB81A9F5321BB94E8455ECB71E00CD93FEC459D34E00B624A6179DAADA6577EB5730DA20306C3550CF5F44D4D709D952007100814C582331D5D722AD73A9AC2EE4DF328A2F011CA206401AB113ADB98AD7AACA8992E82B5728 sanne.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fadzGqTonVd4jPT7LZvPIKDCxgwWV4Vg6gOHBUuQkDNZEvvnuKylu4Gp9TIbuU6EVey3HgDNk/7EWdNOALYkphedqtpld+tXMNogMGw1UM9fRNTXCdlSAHEAgUxYIzHV1yKtc6msLuTfMoovARyiBkAasROtuYrXqsqJkugrVyg= ;{id = 42393} 0573616E6E65096E6C6E65746C616273026E6C00002E0001000027D800A0000F0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0099E0C6791856C9691345D16612A3B40BD04D5C6A9606B09641D895DA8E69CFE8D207FE2608D3F5A7729F9966235C4E4BC07C39DC8397FB55C3B7694361C23C98BF0CB7C0BF27BE3500E622A9231B0C4782B55187DD2F9A90AA404A3351C7E7788F6B7943E5D4500ABE9F6BF192417A9F7FFE7EF3F707B9A33AD86AB902B5A82C sanne.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. meDGeRhWyWkTRdFmEqO0C9BNXGqWBrCWQdiV2o5pz+jSB/4mCNP1p3KfmWYjXE5LwHw53IOX+1XDt2lDYcI8mL8Mt8C/J741AOYiqSMbDEeCtVGH3S+akKpASjNRx+d4j2t5Q+XUUAq+n2vxkkF6n3/+fvP3B7mjOthquQK1qCw= ;{id = 42393} 0573616E6E65096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0036399B1FF8C0C509E10C14C0231AD06A51F52E7B3B203AB631B76F412E163E07257BD13430773E42C28593B3703C28D11BE2DE44AD24DC1B652D9ED5DFE8BFBC12D97EB4D163AA030891B86C3C79B48EC5106947B64B07C6AC25D7EFCCE94BAAE519B24A0237218B9D919C7BD68FBEB29B5593D3F9D71C2A4362B9EF7C9A3359 sanne.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NjmbH/jAxQnhDBTAIxrQalH1Lns7IDq2MbdvQS4WPgcle9E0MHc+QsKFk7NwPCjRG+LeRK0k3BtlLZ7V3+i/vBLZfrTRY6oDCJG4bDx5tI7FEGlHtksHxqwl1+/M6Uuq5RmySgI3IYudkZx71o++sptVk9P51xwqQ2K573yaM1k= ;{id = 42393} 0573616E6E65096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B2E248CB2B6E6DA3FD4BD105130D803C96EB7507BA4268E6DA704DCFEFE68A43C63A1AF80CC4BAA5ABEA293FB42E65BF3885F06400B5D42B69991FD74E270FBD2DBC927634960F7BA4B6CA72D7E9CDF1DFC78D76415BDB5291021598ACDB86C52D33DADE688943D33148BF2BFB8795238895C0831BDE893BA073A41DD10FDE05 sanne.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. suJIyytubaP9S9EFEw2APJbrdQe6Qmjm2nBNz+/mikPGOhr4DMS6pavqKT+0LmW/OIXwZAC11CtpmR/XTicPvS28knY0lg97pLbKctfpzfHfx412QVvbUpECFZis24bFLTPa3miJQ9MxSL8r+4eVI4iVwIMb3ok7oHOkHdEP3gU= ;{id = 42393} 0573616E6E65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00A4019AC698C24761791A8336F90752CDD8759F1542D5166E5DD29C7D30DF3C4469BC59EEC6C2BE76301F3AA79A80A1BE562791F0333A4C91A22E480DC97D0E72C04CF9069574AD5888D65DA05406C982E05673452D93B6EB9012B99E9CCE4502068F4457B375076202A42E31F608B80135D37B35C3C2E47F472083B0995042C5 sanne.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. pAGaxpjCR2F5GoM2+QdSzdh1nxVC1RZuXdKcfTDfPERpvFnuxsK+djAfOqeagKG+VieR8DM6TJGiLkgNyX0OcsBM+QaVdK1YiNZdoFQGyYLgVnNFLZO265ASuZ6czkUCBo9EV7N1B2ICpC4x9gi4ATXTezXDwuR/RyCDsJlQQsU= ;{id = 42393} 0573616E6E65096E6C6E65746C616273026E6C00000F0001000027D8001600320573616E6E65096E6C6E65746C616273026E6C00 sanne.nlnetlabs.nl. 10200 IN MX 50 sanne.nlnetlabs.nl. 0573616E6E65096E6C6E65746C616273026E6C00000F0001000027D80015004B046F70656E096E6C6E65746C616273026E6C00 sanne.nlnetlabs.nl. 10200 IN MX 75 open.nlnetlabs.nl. 0573616E6E65096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000017 sanne.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::17 0573616E6E65096E6C6E65746C616273026E6C00002C0001000027D800160101F66C63214C667F9C6E7FE0CD3279E5AD373A5F08 sanne.nlnetlabs.nl. 10200 IN SSHFP 1 1 F66C63214C667F9C6E7FE0CD3279E5AD373A5F08 0573616E6E65096E6C6E65746C616273026E6C00002C0001000027D8001602013BD2D7189B791521CC000AD9A35AE3CE98926C93 sanne.nlnetlabs.nl. 10200 IN SSHFP 2 1 3BD2D7189B791521CC000AD9A35AE3CE98926C93 0573616E6E65096E6C6E65746C616273026E6C00002C0001000027D800160301692BDF4A4777F7FB0E4673F832D552A56FD3C532 sanne.nlnetlabs.nl. 10200 IN SSHFP 3 1 692BDF4A4777F7FB0E4673F832D552A56FD3C532 0573616E6E65096E6C6E65746C616273026E6C00002F000100000E1000230C73652D646E732D70726F6265096E6C6E65746C616273026E6C00000640010008000B sanne.nlnetlabs.nl. 3600 IN NSEC se-dns-probe.nlnetlabs.nl. A MX AAAA SSHFP RRSIG NSEC 0C73652D646E732D70726F6265096E6C6E65746C616273026E6C0000010001000027D80004D59AE005 se-dns-probe.nlnetlabs.nl. 10200 IN A 213.154.224.5 0C73652D646E732D70726F6265096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00846990A7CBE01E1346B3098CF977335CBEFB5A6CD715E0A6209929917BC0147FFBD3F33E1F38460732FDD91ABAE9E1406CB877414F299BCB463B5BC85EC9417EC5A1383013F9BF461B9D4125DE4E204980C1D7E189A4BF8ACBA00692963F66D789E548A01398D3673115CC7290FD3784B26DB42EBBDCC567071BE60572837ECD se-dns-probe.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hGmQp8vgHhNGswmM+XczXL77WmzXFeCmIJkpkXvAFH/70/M+HzhGBzL92Rq66eFAbLh3QU8pm8tGO1vIXslBfsWhODAT+b9GG51BJd5OIEmAwdfhiaS/isugBpKWP2bXieVIoBOY02cxFcxykP03hLJttC673MVnBxvmBXKDfs0= ;{id = 42393} 0C73652D646E732D70726F6265096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00001373AEE7064277858ABF9FB1F2C791B2CADC03C13DBE82DF945AF7A67DCD10FC602B85A65A43BA077A9FD786B8AC77440E441CB534346A6DB1B1D8EDCC3F920D4A2349E27748AB631DE14D4805C2E55822047E11B3D04B60A60AD60B8C6DB8DEF8BAAF7613DD960910BC9BA19AB4E9360938E3862968E33E67CD982527234A se-dns-probe.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ABNzrucGQneFir+fsfLHkbLK3APBPb6C35Ra96Z9zRD8YCuFplpDugd6n9eGuKx3RA5EHLU0NGptsbHY7cw/kg1KI0nid0irYx3hTUgFwuVYIgR+EbPQS2CmCtYLjG243vi6r3YT3ZYJELyboZq06TYJOOOGKWjjPmfNmCUnI0o= ;{id = 42393} 0C73652D646E732D70726F6265096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0099273DAE749B7785B76C5C440905C74BAA0CB97D714A3B013C554EA0317898C00900AC97450A891FAA8619609C2E78F416128BEAE23F6C378423C16B6E5F4EB0F603A5D2297EE7A4857D7C398623FF8BBC3F155707A7DFD6760C38C907795E844E4DC4A4F94718352EC1B42714DADFB607DA306DF03BA6687F5226C69925B30F se-dns-probe.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mSc9rnSbd4W3bFxECQXHS6oMuX1xSjsBPFVOoDF4mMAJAKyXRQqJH6qGGWCcLnj0FhKL6uI/bDeEI8Frbl9OsPYDpdIpfuekhX18OYYj/4u8PxVXB6ff1nYMOMkHeV6ETk3EpPlHGDUuwbQnFNrftgfaMG3wO6Zof1Imxpklsw8= ;{id = 42393} 0C73652D646E732D70726F6265096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000005 se-dns-probe.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::5 0C73652D646E732D70726F6265096E6C6E65746C616273026E6C00002F000100000E10001F087369646E6C616273096E6C6E65746C616273026E6C000006400000080003 se-dns-probe.nlnetlabs.nl. 3600 IN NSEC sidnlabs.nlnetlabs.nl. A AAAA RRSIG NSEC 087369646E6C616273096E6C6E65746C616273026E6C0000010001000027D80004D59AE08E sidnlabs.nlnetlabs.nl. 10200 IN A 213.154.224.142 087369646E6C616273096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006818380269F180C5C2ACF364BA360F98F8DAD3A592D582A4C94725FE5685C5232FB0E02484E55889E04C238771DE955564BD8C7ABFF56EC1F36383B86E5B183F6E7578CEAD3A7B0193F27AA8433CDAFA45BD3CE8857706CB2A3F6BD1AA238B8B7727D9AEA716B02934C2DB2B928AC576F24D90EA36A66542D5D3F8FF90D58119 sidnlabs.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. aBg4AmnxgMXCrPNkujYPmPja06WS1YKkyUcl/laFxSMvsOAkhOVYieBMI4dx3pVVZL2Mer/1bsHzY4O4blsYP251eM6tOnsBk/J6qEM82vpFvTzohXcGyyo/a9GqI4uLdyfZrqcWsCk0wtsrkorFdvJNkOo2pmVC1dP4/5DVgRk= ;{id = 42393} 087369646E6C616273096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00170E076C5D4ADB5BF81E95300EBA9745DE0300D0C9766540828F41FC5F678D97899B0A08C08F6F05C332C99C8C0C90C9ADEC3C07EC2B6FD35672303B3B1C249E8153E10E3AB79FE20DFD7C4D632F5A4B142F39785A61FD600242941D5EAD32F627FC05F94C205DEFF77962BBB395FCDA6EA80F5AC17D3C93B834DF05BE6EE457 sidnlabs.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Fw4HbF1K21v4HpUwDrqXRd4DANDJdmVAgo9B/F9njZeJmwoIwI9vBcMyyZyMDJDJrew8B+wrb9NWcjA7OxwknoFT4Q46t5/iDf18TWMvWksULzl4WmH9YAJClB1erTL2J/wF+UwgXe/3eWK7s5X82m6oD1rBfTyTuDTfBb5u5Fc= ;{id = 42393} 087369646E6C616273096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C003D65A06D184539DEAC6922922144803C7068D3E10B19E0D914E5462F4B1C810F80CC54A3A797E808787A49B0CF9C9C2D203F69B91A73CF86B071EF28ED206C04B5D1EA74CC04F0A88ADFACB383D6D3A14B80644DFB03FD5FF6A611ADF92B81D3B23836122FD43810C794F62567F9598D5CE95ECCD2C6F655FF0C4F3F420CCF11 sidnlabs.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. PWWgbRhFOd6saSKSIUSAPHBo0+ELGeDZFOVGL0scgQ+AzFSjp5foCHh6SbDPnJwtID9puRpzz4awce8o7SBsBLXR6nTMBPCoit+ss4PW06FLgGRN+wP9X/amEa35K4HTsjg2Ei/UOBDHlPYlZ/lZjVzpXszSxvZV/wxPP0IMzxE= ;{id = 42393} 087369646E6C616273096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00626866A77878B8DC4C731A1E7686B0F838C957443A7520AE687B7AD10AC7F950CCC6526B19B94469923B1EA28C37BA9B1DC02588ADA31E92D50725D4A2A00243B67D0E17C7A5603A64E36EDC1C479561845320221F1F6491FB767A7CF99199376ABED4526D2584B9B239291D4C7E2B90B976FEA959A1D1B839C03DC10B37C5F2 sidnlabs.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ymhmp3h4uNxMcxoedoaw+DjJV0Q6dSCuaHt60QrH+VDMxlJrGblEaZI7HqKMN7qbHcAliK2jHpLVByXUoqACQ7Z9DhfHpWA6ZONu3BxHlWGEUyAiHx9kkft2enz5kZk3ar7UUm0lhLmyOSkdTH4rkLl2/qlZodG4OcA9wQs3xfI= ;{id = 42393} 087369646E6C616273096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF002400000000 sidnlabs.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:24:: 087369646E6C616273096E6C6E65746C616273026E6C00002C0001000027D8001601012E0AFA0551B9C86CD1D885F459E189A8EF93701B sidnlabs.nlnetlabs.nl. 10200 IN SSHFP 1 1 2E0AFA0551B9C86CD1D885F459E189A8EF93701B 087369646E6C616273096E6C6E65746C616273026E6C00002C0001000027D800160201C1301EF4F4820AD7723DD382A0B04AE3F03AD13F sidnlabs.nlnetlabs.nl. 10200 IN SSHFP 2 1 C1301EF4F4820AD7723DD382A0B04AE3F03AD13F 087369646E6C616273096E6C6E65746C616273026E6C00002C0001000027D8001603015811302F8A3EF03BC32BB1ABE3C747DD7D9ABB8B sidnlabs.nlnetlabs.nl. 10200 IN SSHFP 3 1 5811302F8A3EF03BC32BB1ABE3C747DD7D9ABB8B 087369646E6C616273096E6C6E65746C616273026E6C00002F000100000E10001A03736970096E6C6E65746C616273026E6C00000640000008000B sidnlabs.nlnetlabs.nl. 3600 IN NSEC sip.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 03736970096E6C6E65746C616273026E6C00000500010000000A0016076F62656C69736B096E6C6E65746C616273026E6C00 sip.nlnetlabs.nl. 10 IN CNAME obelisk.nlnetlabs.nl. 03736970096E6C6E65746C616273026E6C00002E00010000000A00A0000508030000000A530B29F552E63FF5A599096E6C6E65746C616273026E6C0093E13BA638D8BA56EBCC0DD59961ED3813644776995FB14ED432FEFCC924C554887F1165BCE2C8530D012191FB104DCAD6D524B37EE0E7A60D28FD4C5A528D5FD6F7A4AD1A3D67680426043F06239978D9BC4CD0710EC6E00E42D554E7CE8139282B295A034A37AAD9B363DA182CA14E6AEACD3072F797A1B214FF2488D3980C sip.nlnetlabs.nl. 10 IN RRSIG CNAME 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. k+E7pjjYulbrzA3VmWHtOBNkR3aZX7FO1DL+/MkkxVSIfxFlvOLIUw0BIZH7EE3K1tUks37g56YNKP1MWlKNX9b3pK0aPWdoBCYEPwYjmXjZvEzQcQ7G4A5C1VTnzoE5KCspWgNKN6rZs2PaGCyhTmrqzTBy95ehshT/JIjTmAw= ;{id = 42393} 03736970096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BA332D84DDF6E21E7966FD4C8A07415D5D52F7BCCA368B9D7EEF008E9294EE47A692C33A9D5A8CF0D3D88C559CB691C7364A9E2A242B96FF957BED33FD6572FCF57686BA44903609704B8E4460ECDE47BAC2A99905825AB92C8A2739454CA5DC569E1C4B5E6C8ADCFBB8BFDC737A6C09F7B386AD8BE05FB49DC56D7BD91EA548 sip.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ujMthN324h55Zv1MigdBXV1S97zKNoudfu8AjpKU7kemksM6nVqM8NPYjFWctpHHNkqeKiQrlv+Ve+0z/WVy/PV2hrpEkDYJcEuORGDs3ke6wqmZBYJauSyKJzlFTKXcVp4cS15sitz7uL/cc3psCfezhq2L4F+0ncVte9kepUg= ;{id = 42393} 03736970096E6C6E65746C616273026E6C00002F000100000E10001E0773697867617465096E6C6E65746C616273026E6C000006040000000003 sip.nlnetlabs.nl. 3600 IN NSEC sixgate.nlnetlabs.nl. CNAME RRSIG NSEC 0773697867617465096E6C6E65746C616273026E6C0000010001000027D80004D59AE029 sixgate.nlnetlabs.nl. 10200 IN A 213.154.224.41 0773697867617465096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A1BD138A707EAAC6F3BD08B5924F049A5752375918E20F0F74410AE3EDDA367670CA552BD716431D520F9FBBE6E6E815D8F76468B923B7D97B744C8472AF2BD53781F77D7A5C31D17EFE19005E0165A9743944855A8478434AC61F5EC124B5C721129F708EF782EC786098C122BE4134787480A90AE64F41BEDF33B04359F3ED sixgate.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ob0TinB+qsbzvQi1kk8EmldSN1kY4g8PdEEK4+3aNnZwylUr1xZDHVIPn7vm5ugV2PdkaLkjt9l7dEyEcq8r1TeB9316XDHRfv4ZAF4BZal0OUSFWoR4Q0rGH17BJLXHIRKfcI73gux4YJjBIr5BNHh0gKkK5k9Bvt8zsENZ8+0= ;{id = 42393} 0773697867617465096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A57CBA238168515C37C46214929CF9CE12EC451AC9F391EA30C9FDD91A30FDEB90458106ECAD13DE0AA70B28D2F09A11EB13B8352238595612DAF8ACEB0EAB73E509F9304B39C6964E6D7EBF5CFA094A0D1D785C8D1D0F253D00C7E3D6EDC325701AB50638D8CD6CEF1963A965181E7896002B29014CE5DC5C5A83BC421B9125 sixgate.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pXy6I4FoUVw3xGIUkpz5zhLsRRrJ85HqMMn92Row/euQRYEG7K0T3gqnCyjS8JoR6xO4NSI4WVYS2vis6w6rc+UJ+TBLOcaWTm1+v1z6CUoNHXhcjR0PJT0Ax+PW7cMlcBq1BjjYzWzvGWOpZRgeeJYAKykBTOXcXFqDvEIbkSU= ;{id = 42393} 0773697867617465096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002B5CBD7D0F96E6146476ED4848FA55DB4BC1853CC86C9B0712648907DF838BCBEC5010D7C66BE9117C36221A15BB3EC22E0D8EDA95AC0D41EAD97FD4609E1F1C8AD67BAC98EC13D7C4BC4F1A2ED74DA67995AF7E601C53FE750CF3FFD70130D5D3128E0233BDC9C018BD797571F5CFEF2920FDD15E0953ACCEDEB5986CD2FC26 sixgate.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. K1y9fQ+W5hRkdu1ISPpV20vBhTzIbJsHEmSJB9+Di8vsUBDXxmvpEXw2IhoVuz7CLg2O2pWsDUHq2X/UYJ4fHIrWe6yY7BPXxLxPGi7XTaZ5la9+YBxT/nUM8//XATDV0xKOAjO9ycAYvXl1cfXP7ykg/dFeCVOszt61mGzS/CY= ;{id = 42393} 0773697867617465096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00CDF5C149AD70342F82A2DD3FA1669C67346365DC89F3F3785296A171051A2C9D4754F6607B647E6BCD4111419E94922D1EBC0F33F91075648613EF95F0F6D9A8B5DFE03B2FAB41312C7433ED3D80F01D60387CB11E8CFA4428C12957BCA1B036468C54D07D3D4CBE28EAEBA155B0B1FE22EBDC2B89BAA7EFD64D60FC417FF5DF sixgate.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. zfXBSa1wNC+Cot0/oWacZzRjZdyJ8/N4UpahcQUaLJ1HVPZge2R+a81BEUGelJItHrwPM/kQdWSGE++V8PbZqLXf4Dsvq0ExLHQz7T2A8B1gOHyxHoz6RCjBKVe8obA2RoxU0H09TL4o6uuhVbCx/iLr3CuJuqfv1k1g/EF/9d8= ;{id = 42393} 0773697867617465096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010250BFFFFE5E33E0 sixgate.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:250:bfff:fe5e:33e0 0773697867617465096E6C6E65746C616273026E6C00002C0001000027D8001601017EE7E899A067F1CBFF755FE212B4EFAD9797CDAE sixgate.nlnetlabs.nl. 10200 IN SSHFP 1 1 7EE7E899A067F1CBFF755FE212B4EFAD9797CDAE 0773697867617465096E6C6E65746C616273026E6C00002C0001000027D80016020103A80B4632B239DE059B86975D660768786066ED sixgate.nlnetlabs.nl. 10200 IN SSHFP 2 1 03A80B4632B239DE059B86975D660768786066ED 0773697867617465096E6C6E65746C616273026E6C00002C0001000027D80016030196AC54D0FB9C42878DC1DD0AE0EE1FFA51936AE3 sixgate.nlnetlabs.nl. 10200 IN SSHFP 3 1 96AC54D0FB9C42878DC1DD0AE0EE1FFA51936AE3 0773697867617465096E6C6E65746C616273026E6C00002F000100000E10001B04736D7470096E6C6E65746C616273026E6C00000640000008000B sixgate.nlnetlabs.nl. 3600 IN NSEC smtp.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 04736D7470096E6C6E65746C616273026E6C0000050001000027D80013046F70656E096E6C6E65746C616273026E6C00 smtp.nlnetlabs.nl. 10200 IN CNAME open.nlnetlabs.nl. 04736D7470096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00AD11EBBCFF5B1877C05F40AF1E20AC8DC5D62693CFC208EB5CD4965C1B95812AAB2C774635F5BAFB0AA0F2AAC34845A127FC139F192CCBF0D87E7D0384F36A417B6740F35F798691FCAEC25ACDC0025ACD5B071BFC4B72D725CB5E3A562CB7BAA122F438022A16E984273D3C95F27E603BB0D56416A65ED1810EF0C37AE6E2F5 smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rRHrvP9bGHfAX0CvHiCsjcXWJpPPwgjrXNSWXBuVgSqrLHdGNfW6+wqg8qrDSEWhJ/wTnxksy/DYfn0DhPNqQXtnQPNfeYaR/K7CWs3AAlrNWwcb/Ety1yXLXjpWLLe6oSL0OAIqFumEJz08lfJ+YDuw1WQWpl7RgQ7ww3rm4vU= ;{id = 42393} 04736D7470096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00825840378E62746B00E501F6AD0EEEDCCC1998BD3EEEF00BAAC896308AA57712263A833C09B3F738820FE3A7222A71D0A4B7E8D6C6F8801AC8201898EDE2C7481533819EEF8B9B098899908572A71021180619192274EFEAEA5B4F27765BCDCD2185825F2E50B16F3B0CAEAB0BAFD27DBA008649B7F42AA4F54FAC298180D793 smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. glhAN45idGsA5QH2rQ7u3MwZmL0+7vALqsiWMIqldxImOoM8CbP3OIIP46ciKnHQpLfo1sb4gBrIIBiY7eLHSBUzgZ7vi5sJiJmQhXKnECEYBhkZInTv6upbTyd2W83NIYWCXy5QsW87DK6rC6/SfboAhkm39Cqk9U+sKYGA15M= ;{id = 42393} 04736D7470096E6C6E65746C616273026E6C00002F000100000E100024035F3235045F74637004736D7470096E6C6E65746C616273026E6C000006040000000003 smtp.nlnetlabs.nl. 3600 IN NSEC _25._tcp.smtp.nlnetlabs.nl. CNAME RRSIG NSEC 035F3235045F74637004736D7470096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _25._tcp.smtp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 035F3235045F74637004736D7470096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0012E22A1CE42AF4EAC0DAE93282735FC4AECC126D5F5D947807429839237D7F9864D54F3AF46DFB64625A60DFA8B9717414A587FF5257D4A08D78E52177625114ECDFC41B3E7F05363723A5C56C81D2AD393D3ED6B1728B76A742A39680B4706D934B645BBD2AA7EA16A21615F0D9C26E44C3A279A8E19170C53DFE91490D40C8 _25._tcp.smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. EuIqHOQq9OrA2ukygnNfxK7MEm1fXZR4B0KYOSN9f5hk1U869G37ZGJaYN+ouXF0FKWH/1JX1KCNeOUhd2JRFOzfxBs+fwU2NyOlxWyB0q05PT7WsXKLdqdCo5aAtHBtk0tkW70qp+oWohYV8NnCbkTDonmo4ZFwxT3+kUkNQMg= ;{id = 42393} 035F3235045F74637004736D7470096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008843E3DDEDA72F7A0B9FEB964447623BD0A5A83A840CD3CB00977BB1FDFE78D792FC7B66959511C12234285092524F05EBABF02B39615821AE223D17CF3E70587D657F09CC833F1CCAAF50C1F17A3F690E53DD7638E72F0DB42BF02C70934B2F4A416EC08F3C56BA8D21505ECADD64BEB733B8F6596AE9A30B0370E66E1961E1 _25._tcp.smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. iEPj3e2nL3oLn+uWREdiO9ClqDqEDNPLAJd7sf3+eNeS/HtmlZURwSI0KFCSUk8F66vwKzlhWCGuIj0Xzz5wWH1lfwnMgz8cyq9QwfF6P2kOU912OOcvDbQr8Cxwk0svSkFuwI88VrqNIVBeyt1kvrczuPZZaumjCwNw5m4ZYeE= ;{id = 42393} 035F3235045F74637004736D7470096E6C6E65746C616273026E6C00002F000100000E100025045F343635045F74637004736D7470096E6C6E65746C616273026E6C000006040000000003 _25._tcp.smtp.nlnetlabs.nl. 3600 IN NSEC _465._tcp.smtp.nlnetlabs.nl. CNAME RRSIG NSEC 045F343635045F74637004736D7470096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _465._tcp.smtp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343635045F74637004736D7470096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00658EAF134FBE487275C5327AEEA0B3A77522C9DA13AE84C570506FD7390327DF4FACD04604943909AA81A38E5DE5CDB89B995E313F30A6A0C12CA4317CE6F70B873DF0DAE0356C60D3B6BFF8AC029AAA6AE4EB214DF75551195414B98503242D794192F9707CD2B359A0EFED7B21523FDE5666E49BD89C53E9942E2490F40CAE _465._tcp.smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZY6vE0++SHJ1xTJ67qCzp3UiydoTroTFcFBv1zkDJ99PrNBGBJQ5CaqBo45d5c24m5leMT8wpqDBLKQxfOb3C4c98NrgNWxg07a/+KwCmqpq5OshTfdVURlUFLmFAyQteUGS+XB80rNZoO/teyFSP95WZuSb2JxT6ZQuJJD0DK4= ;{id = 42393} 045F343635045F74637004736D7470096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0057D5A4018BD6D18A787325C2B1F458A87E3D2F76630087EA1F57938E269C7506FE4220D49D78AC547C1B34A7EEC7271D377E076E1B3E289339CFD3C62343BA0633970DACC37FDC6F8841E258920C0ADA84F3A8772071DB03F3321A264E448E261C14AC940935081CE6E0773E02906D54642374900C9611B5DEC97106CFAC0DCC _465._tcp.smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. V9WkAYvW0Yp4cyXCsfRYqH49L3ZjAIfqH1eTjiacdQb+QiDUnXisVHwbNKfuxycdN34Hbhs+KJM5z9PGI0O6BjOXDazDf9xviEHiWJIMCtqE86h3IHHbA/MyGiZORI4mHBSslAk1CBzm4Hc+ApBtVGQjdJAMlhG13slxBs+sDcw= ;{id = 42393} 045F343635045F74637004736D7470096E6C6E65746C616273026E6C00002F000100000E100025045F353837045F74637004736D7470096E6C6E65746C616273026E6C000006040000000003 _465._tcp.smtp.nlnetlabs.nl. 3600 IN NSEC _587._tcp.smtp.nlnetlabs.nl. CNAME RRSIG NSEC 045F353837045F74637004736D7470096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _587._tcp.smtp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F353837045F74637004736D7470096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00B9C0FAEF08D1B975B3DDBDD6FFCBA9129948E23804B076194A3937B2C13628F44FA71EBC3EF2B459AF3D3522DF2DDE8A7407E8DA1FB775B61C2AADC8BE4363DE0781042625E59F0149CE08C3C87FE38D70021FDD17AB8B78D11019BA3FDE396075F1C9376366E3DDBB9A02A371CDE244BED5D9D7DFF99D7CD793203B0BCCE5CA _587._tcp.smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ucD67wjRuXWz3b3W/8upEplI4jgEsHYZSjk3ssE2KPRPpx68PvK0Wa89NSLfLd6KdAfo2h+3dbYcKq3IvkNj3geBBCYl5Z8BSc4Iw8h/441wAh/dF6uLeNEQGbo/3jlgdfHJN2Nm4927mgKjcc3iRL7V2dff+Z1815MgOwvM5co= ;{id = 42393} 045F353837045F74637004736D7470096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C009E7CB15519B7E455908075079809664A42D517E29BEC7391EB228902B5BD804B867837E7D25164BF16A1AE5771479ABF04B4097B6F546871BFC92624EEA7BF0E7798B449246E0BD245FD26E54E8A723C846D94573D2F96369CB7FDCFB3138E8DE648B623B3361766D4FEC03F96E22E394694BB27117415582DD41CA50D9B7EE0 _587._tcp.smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. nnyxVRm35FWQgHUHmAlmSkLVF+Kb7HOR6yKJArW9gEuGeDfn0lFkvxahrldxR5q/BLQJe29UaHG/ySYk7qe/DneYtEkkbgvSRf0m5U6KcjyEbZRXPS+WNpy3/c+zE46N5ki2I7M2F2bU/sA/luIuOUaUuycRdBVYLdQcpQ2bfuA= ;{id = 42393} 045F353837045F74637004736D7470096E6C6E65746C616273026E6C00002F000100000E10001C05736E6F6D30096E6C6E65746C616273026E6C000006040000000003 _587._tcp.smtp.nlnetlabs.nl. 3600 IN NSEC snom0.nlnetlabs.nl. CNAME RRSIG NSEC 05736E6F6D30096E6C6E65746C616273026E6C0000010001000027D80004D59AE0C8 snom0.nlnetlabs.nl. 10200 IN A 213.154.224.200 05736E6F6D30096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A7AB67BD75A624816F289BE5AAA66683B42E6382F64A5279CBEF6D3782CFAEB32C5687B5E9008E3951155A793731E7B92A7A257640ECB9777601515682E1007773BBAFB109339D7843AAB648EE07719085CAE08738604BC9FDE1ADFB0C24CACF53E0062F8A34E4973FF37D65476E78D80762B8F15C225C96CB956A42978E9C5A snom0.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. p6tnvXWmJIFvKJvlqqZmg7QuY4L2SlJ5y+9tN4LPrrMsVoe16QCOOVEVWnk3Mee5KnoldkDsuXd2AVFWguEAd3O7r7EJM514Q6q2SO4HcZCFyuCHOGBLyf3hrfsMJMrPU+AGL4o05Jc/831lR2542AdiuPFcIlyWy5VqQpeOnFo= ;{id = 42393} 05736E6F6D30096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0083883E067C684F21818219E3BE390B6B342218EA58AEB2687A8E4000138FCD62F1CEDE2367B56C13662CA42C67A3706870E95AAE812B6A1268FC1E66E18BE8CAC7311497429F2D698E9471A84BCFF2177FF440AFC86563AC89BF1BD1390ED9008061E8C8C32B24FD5A4BB2A98D031F686CCD10CBA195E4E623504487AF08FD01 snom0.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. g4g+BnxoTyGBghnjvjkLazQiGOpYrrJoeo5AABOPzWLxzt4jZ7VsE2YspCxno3BocOlaroErahJo/B5m4YvoyscxFJdCny1pjpRxqEvP8hd/9ECvyGVjrIm/G9E5DtkAgGHoyMMrJP1aS7KpjQMfaGzNEMuhleTmI1BEh68I/QE= ;{id = 42393} 05736E6F6D30096E6C6E65746C616273026E6C00002F000100000E10001C05736E6F6D31096E6C6E65746C616273026E6C000006400000000003 snom0.nlnetlabs.nl. 3600 IN NSEC snom1.nlnetlabs.nl. A RRSIG NSEC 05736E6F6D31096E6C6E65746C616273026E6C0000010001000027D80004D59AE0C9 snom1.nlnetlabs.nl. 10200 IN A 213.154.224.201 05736E6F6D31096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0042CEF64D347796CCE0B427382C6F889AE88984F0014A1B9C1A5014CE42A49C3B136CA133D22654264488E7BBF37657F17FDBC4BFE154E69C328F78FD0BF2511CBCFFD00CF4418FF17299A0F48B7625781E55C5352AE6D955BB8475485EC42A5F2E9C2AF7154DE057166F5FD4FCBBFFE9F5A935E82820B33E1286F017808E1673 snom1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Qs72TTR3lszgtCc4LG+ImuiJhPABShucGlAUzkKknDsTbKEz0iZUJkSI57vzdlfxf9vEv+FU5pwyj3j9C/JRHLz/0Az0QY/xcpmg9It2JXgeVcU1KubZVbuEdUhexCpfLpwq9xVN4FcWb1/U/Lv/6fWpNegoILM+EobwF4COFnM= ;{id = 42393} 05736E6F6D31096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0006B3F2D004947B46B7CF3EDE5C25C1DB8773E843DDA2694E6C122BEC7E9E4EA84074202B3FB0B848CA8602EEE55201B3F4551A511D12061B6CD14660194533DDDEA860FCDE4613DFDB2D5D307134FB45FCBF756C1826B16852AD691A9E58C0964CD710BB034A8EADE7B6CDC5B796AD5F547A9C91262124EFBBCDBCAF651FF538 snom1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. BrPy0ASUe0a3zz7eXCXB24dz6EPdomlObBIr7H6eTqhAdCArP7C4SMqGAu7lUgGz9FUaUR0SBhts0UZgGUUz3d6oYPzeRhPf2y1dMHE0+0X8v3VsGCaxaFKtaRqeWMCWTNcQuwNKjq3nts3Ft5atX1R6nJEmISTvu828r2Uf9Tg= ;{id = 42393} 05736E6F6D31096E6C6E65746C616273026E6C00002F000100000E10001C05736E6F6D32096E6C6E65746C616273026E6C000006400000000003 snom1.nlnetlabs.nl. 3600 IN NSEC snom2.nlnetlabs.nl. A RRSIG NSEC 05736E6F6D32096E6C6E65746C616273026E6C0000010001000027D80004D59AE0CA snom2.nlnetlabs.nl. 10200 IN A 213.154.224.202 05736E6F6D32096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C442721EED9B2DF17EA29CED6352521E3921F1E535522DEE9157D1D9635A66F0C9C79733DFB5C31FE0049D3D7FF1FF3C376C4537B48F1F4C2D6EB9273871451EDE340464E9EAB3BEE68335B264D747B1F157A40E3A1DE87309BAD4CEEF55A739F1B115DE919A54B0BD7EA12A2DA6D52607C6D501395332373C9734E50EDED3AC snom2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xEJyHu2bLfF+opztY1JSHjkh8eU1Ui3ukVfR2WNaZvDJx5cz37XDH+AEnT1/8f88N2xFN7SPH0wtbrknOHFFHt40BGTp6rO+5oM1smTXR7HxV6QOOh3ocwm61M7vVac58bEV3pGaVLC9fqEqLabVJgfG1QE5UzI3PJc05Q7e06w= ;{id = 42393} 05736E6F6D32096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001907C7E6589A5E6C0D7C4E8ED42C2272836F490D520C0A19B758B0D7513771BF37DFA9255270BF98CB1A3B0442B8A9D76AF07E85441193F63E0FC6D643949755E92130FFB8C1A13066B7BB67B85D61D005617D91B4F8A401F1AB24D9D58BC3CD6C49CA1500080BE3936847F3DE8068AD668DDBD0757E0622EAB3FA022DB7EA82 snom2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. GQfH5liaXmwNfE6O1CwicoNvSQ1SDAoZt1iw11E3cb8336klUnC/mMsaOwRCuKnXavB+hUQRk/Y+D8bWQ5SXVekhMP+4waEwZre7Z7hdYdAFYX2RtPikAfGrJNnVi8PNbEnKFQAIC+OTaEfz3oBorWaN29B1fgYi6rP6Ai236oI= ;{id = 42393} 05736E6F6D32096E6C6E65746C616273026E6C00002F000100000E10001C05736E6F6D33096E6C6E65746C616273026E6C000006400000000003 snom2.nlnetlabs.nl. 3600 IN NSEC snom3.nlnetlabs.nl. A RRSIG NSEC 05736E6F6D33096E6C6E65746C616273026E6C0000010001000027D80004D59AE0CB snom3.nlnetlabs.nl. 10200 IN A 213.154.224.203 05736E6F6D33096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008DD3342DB8A469AD858C3317F803C7329134F12D43E822E7C9D025FB0C8E0CC5CCDDC1B0C16599A528EBA4401A9190A60A36809245D401ECD97A30DA4D005CF609BCD7829B3071C036C550B6B1684410CDE11FC13D9E511870D386B83D2D99435BF6DE9D1660F17AC063C85936D6D4E5628CD4AA4E3831A9352084DAF71CE36B snom3.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jdM0Lbikaa2FjDMX+APHMpE08S1D6CLnydAl+wyODMXM3cGwwWWZpSjrpEAakZCmCjaAkkXUAezZejDaTQBc9gm814KbMHHANsVQtrFoRBDN4R/BPZ5RGHDThrg9LZlDW/benRZg8XrAY8hZNtbU5WKM1KpOODGpNSCE2vcc42s= ;{id = 42393} 05736E6F6D33096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C6E0145F2E5D5F4372F5183797B0F33977504963054FDEE0C3309823E09706CA9F1ADEE0971835B4CEC8AA7E2ABE1C0E15B67EF0357A7E655822BEE2D3F70D38E6031358C7328B5F45DB02807A1D76159762E23BABD2D445B354C0E386A2071B7C879E95D51B0B18DF57625224CA89470C740F42201B8F57EE3F7085942C7112 snom3.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. xuAUXy5dX0Ny9Rg3l7DzOXdQSWMFT97gwzCYI+CXBsqfGt7glxg1tM7Iqn4qvhwOFbZ+8DV6fmVYIr7i0/cNOOYDE1jHMotfRdsCgHoddhWXYuI7q9LURbNUwOOGogcbfIeeldUbCxjfV2JSJMqJRwx0D0IgG49X7j9whZQscRI= ;{id = 42393} 05736E6F6D33096E6C6E65746C616273026E6C00002F000100000E10002009736F6D657468696E67096E6C6E65746C616273026E6C000006400000000003 snom3.nlnetlabs.nl. 3600 IN NSEC something.nlnetlabs.nl. A RRSIG NSEC 09736F6D657468696E67096E6C6E65746C616273026E6C00001000010000000A0008076E6F7468696E67 something.nlnetlabs.nl. 10 IN TXT "nothing" 09736F6D657468696E67096E6C6E65746C616273026E6C00002E00010000000A00A0001008030000000A530B29F552E63FF5A599096E6C6E65746C616273026E6C002CF51A28A75EAF45B00F28DDC16BF46A78BE47C3E16B73CB8839D355B636CB809873059826A8BA7B0BF4EE515EF4431C97777102E002DB25798D72FB2D2904D23D8444560A7928A823F2E47635A8E549B4F0A8DEE489983BCA6633D2B703ABBEB8AB1FDFE7858F61A23175A758A9348678DAEDFB5E54B6A1FFB645B28EBA73A9 something.nlnetlabs.nl. 10 IN RRSIG TXT 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. LPUaKKder0WwDyjdwWv0ani+R8Pha3PLiDnTVbY2y4CYcwWYJqi6ewv07lFe9EMcl3dxAuAC2yV5jXL7LSkE0j2ERFYKeSioI/LkdjWo5Um08Kje5ImYO8pmM9K3A6u+uKsf3+eFj2GiMXWnWKk0hnja7fteVLah/7ZFso66c6k= ;{id = 42393} 09736F6D657468696E67096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00BF7790E0D6FC3F0D33D67B9EC089AAB1E7FCE0C0A8F2F76044FF51545A1FF2653A366D906B4B871B1C6289EAA0E4E5B6661345C226A5B322479AECB7B7862DD6737935A6D58A64BAFE90DFF552FDF35A3C4F19418EA3EBABEC0B9961115718EAC9E47AD994FE8D9161E22896F0D26F5FA2088CD5B502E7B7DEA057F700B970DC something.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. v3eQ4Nb8Pw0z1nuewImqsef84MCo8vdgRP9RVFof8mU6Nm2Qa0uHGxxiieqg5OW2ZhNFwialsyJHmuy3t4Yt1nN5NabVimS6/pDf9VL981o8TxlBjqPrq+wLmWERVxjqyeR62ZT+jZFh4iiW8NJvX6IIjNW1Aue33qBX9wC5cNw= ;{id = 42393} 09736F6D657468696E67096E6C6E65746C616273026E6C00002F000100000E10001D06737061726335096E6C6E65746C616273026E6C000006000080000003 something.nlnetlabs.nl. 3600 IN NSEC sparc5.nlnetlabs.nl. TXT RRSIG NSEC 06737061726335096E6C6E65746C616273026E6C0000010001000027D80004D59AE02F sparc5.nlnetlabs.nl. 10200 IN A 213.154.224.47 06737061726335096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0079594D5B0CF7AFDFB24AA3B739CFA4EA341E03CF62FC07E6D21EC9996CB81FA2496365FBD286BBA56BABACFA65DDAD4F28F114EE49710FB2505757A11B9CF6AB065EFA366CBFDD76A6EE1B0F2A98BBA9A6202C8EAE387A59D8BC2579AA74895910DD65347A8D2E775207374E3F44E69FECE31A9C381B838B03C88C688B3EC213 sparc5.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. eVlNWwz3r9+ySqO3Oc+k6jQeA89i/Afm0h7JmWy4H6JJY2X70oa7pWurrPpl3a1PKPEU7klxD7JQV1ehG5z2qwZe+jZsv912pu4bDyqYu6mmICyOrjh6Wdi8JXmqdIlZEN1lNHqNLndSBzdOP0Tmn+zjGpw4G4OLA8iMaIs+whM= ;{id = 42393} 06737061726335096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004A2D7512965C1F4C361948DC9D4EB714D0139DD123595584CE9699E7B4B920C016F77BBA8A8082CC27946382B2A9C950F387FD9419D98A95DBA1E95191DA179FC39750780DFA79C1CAF67E465EF4541328E5C96EF6EFB3DA5E4317DBE72569F759E7DA657911A1D16BD4329951817DD60A79E74818E38E9BDB29EEEF10AC42C1 sparc5.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Si11EpZcH0w2GUjcnU63FNATndEjWVWEzpaZ57S5IMAW93u6ioCCzCeUY4KyqclQ84f9lBnZipXboelRkdoXn8OXUHgN+nnByvZ+Rl70VBMo5clu9u+z2l5DF9vnJWn3WefaZXkRodFr1DKZUYF91gp550gY446b2ynu7xCsQsE= ;{id = 42393} 06737061726335096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0048191807F631D98CBFD6FCF4657C9ED78BB2DBF9C02CC835107D66E427C34BFA3309D5E51F41F57C567D4AB4D3C6110B0EFA143FF73E598EA3275F761B2563A4ED47E85FCC77B72AD0F13BBD5FCDED3B8CC2A9570FB5B213BDC3BE67F678253F51D925D037A2B1D918D0DFDD3E6009E4869854B78AB0C3824D9CD70681C2EF60 sparc5.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SBkYB/Yx2Yy/1vz0ZXye14uy2/nALMg1EH1m5CfDS/ozCdXlH0H1fFZ9SrTTxhELDvoUP/c+WY6jJ192GyVjpO1H6F/Md7cq0PE7vV/N7TuMwqlXD7WyE73Dvmf2eCU/Udkl0DeisdkY0N/dPmAJ5IaYVLeKsMOCTZzXBoHC72A= ;{id = 42393} 06737061726335096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010A0020FFFEA78F78 sparc5.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fea7:8f78 06737061726335096E6C6E65746C616273026E6C00002F000100000E10001D06737069646572096E6C6E65746C616273026E6C000006400000080003 sparc5.nlnetlabs.nl. 3600 IN NSEC spider.nlnetlabs.nl. A AAAA RRSIG NSEC 06737069646572096E6C6E65746C616273026E6C0000010001000027D80004D59AE07D spider.nlnetlabs.nl. 10200 IN A 213.154.224.125 06737069646572096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00457A7238CC1166102989143ED1CB52779F91280D8F4AE1568A5ADE6647F9DC6565E782F03FFD15C23D5AD25113CE9DE3EFE1D303A51B7AFD3C5B1B8EF08DE6CB585233DCF84B2960FB1A1FB8D3D09922EF8D94CF7787B2B5AB4AFDFD3B45CA1FBF4103F65F19E013A395EC8F96403D8258C5CB1C33A9034936BB8D7BD379C8AD spider.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RXpyOMwRZhApiRQ+0ctSd5+RKA2PSuFWilreZkf53GVl54LwP/0Vwj1a0lETzp3j7+HTA6Ubev08WxuO8I3my1hSM9z4Sylg+xofuNPQmSLvjZTPd4eytatK/f07Rcofv0ED9l8Z4BOjleyPlkA9gljFyxwzqQNJNruNe9N5yK0= ;{id = 42393} 06737069646572096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001EFE639E16DFD3EDA4FA8AB5EFC2789C8CCF04D4CCC505915F33A45D1B2E778D07EC2A476C2DD76122895D5D84904693932D80EF5BFADDA5A4F95A0611822067B2E9AD01D011EE01B84A5CD085E07C38E028F527918856F6BE03C0FA01854866762A491887A5EAD992517D2DE713B62E0C406CE25E753D91D70123F50D39BCE3 spider.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Hv5jnhbf0+2k+oq178J4nIzPBNTMxQWRXzOkXRsud40H7CpHbC3XYSKJXV2EkEaTky2A71v63aWk+VoGEYIgZ7LprQHQEe4BuEpc0IXgfDjgKPUnkYhW9r4DwPoBhUhmdipJGIel6tmSUX0t5xO2LgxAbOJedT2R1wEj9Q05vOM= ;{id = 42393} 06737069646572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00312BB59CD51F55EE36CCDA486E0BEF0FF885C13460382504690852D91D714C5211BD20FBE47C9A480F945E5D99B2326C848004761D213908A661E15AE6107C5F3F993E3DF0CFC15643CDCD0586E2F3BCA3091BB11592846D3AA403281C39BE1F63DDBAF3F3AFD3B570A993B87987C2C42FB44F27CD170B5DC74A5D32777C62C6 spider.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. MSu1nNUfVe42zNpIbgvvD/iFwTRgOCUEaQhS2R1xTFIRvSD75HyaSA+UXl2ZsjJshIAEdh0hOQimYeFa5hB8Xz+ZPj3wz8FWQ83NBYbi87yjCRuxFZKEbTqkAygcOb4fY9268/Ov07VwqZO4eYfCxC+0TyfNFwtdx0pdMnd8YsY= ;{id = 42393} 06737069646572096E6C6E65746C616273026E6C00002C0001000027D80016010163B9074714CC78736BAFFA1E6776975C2EB082F3 spider.nlnetlabs.nl. 10200 IN SSHFP 1 1 63B9074714CC78736BAFFA1E6776975C2EB082F3 06737069646572096E6C6E65746C616273026E6C00002C0001000027D800160201E7A277786CFCF0CB1A4167A680DDAE27A59407D5 spider.nlnetlabs.nl. 10200 IN SSHFP 2 1 E7A277786CFCF0CB1A4167A680DDAE27A59407D5 06737069646572096E6C6E65746C616273026E6C00002F000100000E10001B0473746572096E6C6E65746C616273026E6C00000640000000000B spider.nlnetlabs.nl. 3600 IN NSEC ster.nlnetlabs.nl. A SSHFP RRSIG NSEC 0473746572096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 ster.nlnetlabs.nl. 10200 IN A 213.154.224.1 0473746572096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00C8D86E2696EA97F2D6C87AF7216E66B84334D19D816A8AB14257C07FEFB76EC7B1F45B122554F25AF63F298AB71C82F22F737DEC164EDB5FB1F51ABE7AAE52B010E63C9E77D3AD726DA42EABFE46C3BC85C714A8435464A2B7B4FC317C11E32858F36325AC966123EA6DB567809DF332BF79E1AF25352FAFF3C3C30442B19934 ster.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yNhuJpbql/LWyHr3IW5muEM00Z2BaoqxQlfAf++3bsex9FsSJVTyWvY/KYq3HILyL3N97BZO21+x9Rq+eq5SsBDmPJ53061ybaQuq/5Gw7yFxxSoQ1Rkore0/DF8EeMoWPNjJayWYSPqbbVngJ3zMr954a8lNS+v88PDBEKxmTQ= ;{id = 42393} 0473746572096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009859E9C6FABFA58A431C9963B2660947D202EA41A7545A5089153338700842CCEE24AF52D314D5E410683E7ACF57F02D7418D5BACD29EBBA91A6ADA6D9210E9D1874EE2953DA44BF52414C5B159C1D5056EF905513CFE87D9BC8FDE30165BCDAD1AA5B9B5D59FCC4C7BDB308237B799C0B65E39271C7CE394309BC2F8F0710CF ster.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. mFnpxvq/pYpDHJljsmYJR9IC6kGnVFpQiRUzOHAIQszuJK9S0xTV5BBoPnrPV/AtdBjVus0p67qRpq2m2SEOnRh07ilT2kS/UkFMWxWcHVBW75BVE8/ofZvI/eMBZbza0apbm11Z/MTHvbMII3t5nAtl45Jxx845Qwm8L48HEM8= ;{id = 42393} 0473746572096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C008C6B78C6CCC45ADF80FA0700D130E0EEA969F7874BC65814B8E13CAEF8602FA18F58AF8EEB9995ABA577096EE544E45780DA9AD3E676102ABBAD4B74AE7EC137EA01874A80493371BC69103D2F338F92E972F82BE2803B8715EF5F13F3DAE453429DAFAC287AC2F83EC06FE0E6044B020723E6ABF8D00DFCF663507BA2E4FC12 ster.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jGt4xszEWt+A+gcA0TDg7qlp94dLxlgUuOE8rvhgL6GPWK+O65mVq6V3CW7lRORXgNqa0+Z2ECq7rUt0rn7BN+oBh0qASTNxvGkQPS8zj5Lpcvgr4oA7hxXvXxPz2uRTQp2vrCh6wvg+wG/g5gRLAgcj5qv40A389mNQe6Lk/BI= ;{id = 42393} 0473746572096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 ster.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 0473746572096E6C6E65746C616273026E6C00002F000100000E10001C057374756E31096E6C6E65746C616273026E6C000006400000080003 ster.nlnetlabs.nl. 3600 IN NSEC stun1.nlnetlabs.nl. A AAAA RRSIG NSEC 057374756E31096E6C6E65746C616273026E6C0000010001000027D80004D59AE02E stun1.nlnetlabs.nl. 10200 IN A 213.154.224.46 057374756E31096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00367DAE7BA3D14826F473E66C4E6F2F60577525E89815FE9A8972362CC62F0AAB1DD864E25586654D51F772BCE87B63B48ABA58DB7F81EDC5FA72E0081C17997EBFB1A8ECD9AFD6DD25C049EEA982F61759C80086DA0778F5698CA7CC707E18398A881A53D6CDA2AA78559FFCA3BC19CF1C30068C5A4181D42B01409085E17038 stun1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Nn2ue6PRSCb0c+ZsTm8vYFd1JeiYFf6aiXI2LMYvCqsd2GTiVYZlTVH3crzoe2O0irpY23+B7cX6cuAIHBeZfr+xqOzZr9bdJcBJ7qmC9hdZyACG2gd49WmMp8xwfhg5iogaU9bNoqp4VZ/8o7wZzxwwBoxaQYHUKwFAkIXhcDg= ;{id = 42393} 057374756E31096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C005332CDC616A48E9D19EAF784078477E38B279AA7E44511ED2F881BB227E6744E07D1C1BFDE99F98A8A7C02A35C31D2F02315C0DBF2F49A10777A40CD1E70B773D16923E12A2490CB4243454105701C9E3DECCA47523557EC18B4D529F9CA6F3F5E8977AF254551C1FE0F34AD14E80FA095956BE37E3E0E73F6ACC48457872284 stun1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. UzLNxhakjp0Z6veEB4R344snmqfkRRHtL4gbsifmdE4H0cG/3pn5iop8AqNcMdLwIxXA2/L0mhB3ekDNHnC3c9FpI+EqJJDLQkNFQQVwHJ497MpHUjVX7Bi01Sn5ym8/Xol3ryVFUcH+DzStFOgPoJWVa+N+Pg5z9qzEhFeHIoQ= ;{id = 42393} 057374756E31096E6C6E65746C616273026E6C00002F000100000E10001C057374756E32096E6C6E65746C616273026E6C000006400000000003 stun1.nlnetlabs.nl. 3600 IN NSEC stun2.nlnetlabs.nl. A RRSIG NSEC 057374756E32096E6C6E65746C616273026E6C0000010001000027D80004D59AE030 stun2.nlnetlabs.nl. 10200 IN A 213.154.224.48 057374756E32096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0018B082690B1B2F4CE25B51F5785D79A03C50AA354068169F5BEC73755E23F3E07A1803ABA9C55CB67C8829F574488A233ABC5E7B0DF64D76FF47203DB1B44C15C83B889FEBD20A9A3C299C8408C6D1B561FD468B56126674220A428023706C79CC84CD9E3279F9A9E614203F750E339AE856941E2B042829DD43AA9D49572263 stun2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GLCCaQsbL0ziW1H1eF15oDxQqjVAaBafW+xzdV4j8+B6GAOrqcVctnyIKfV0SIojOrxeew32TXb/RyA9sbRMFcg7iJ/r0gqaPCmchAjG0bVh/UaLVhJmdCIKQoAjcGx5zITNnjJ5+anmFCA/dQ4zmuhWlB4rBCgp3UOqnUlXImM= ;{id = 42393} 057374756E32096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C004B3CAD6D5B2B1D7E13AF9F27C08350D483642808475ED8E16F4481C135CC5D209143CBB360F830D4E69A90BBFFA0E83DAEB3FDCE4AE785EEA247D627F0056EB3F634CF8B3A0E5E73395C7EAEDF8E03B759E0962536E1F703707E447ABA5E2060C822E79BDCF95E8CC22EE0CD0AF7DF7AE226029DE41005B0D35FDF9390117950 stun2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SzytbVsrHX4Tr58nwINQ1INkKAhHXtjhb0SBwTXMXSCRQ8uzYPgw1OaakLv/oOg9rrP9zkrnhe6iR9Yn8AVus/Y0z4s6Dl5zOVx+rt+OA7dZ4JYlNuH3A3B+RHq6XiBgyCLnm9z5XozCLuDNCvffeuImAp3kEAWw01/fk5AReVA= ;{id = 42393} 057374756E32096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636831096E6C6E65746C616273026E6C000006400000000003 stun2.nlnetlabs.nl. 3600 IN NSEC switch1.nlnetlabs.nl. A RRSIG NSEC 0773776974636831096E6C6E65746C616273026E6C0000010001000027D80004D59AE06F switch1.nlnetlabs.nl. 10200 IN A 213.154.224.111 0773776974636831096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00374A0F3E0B700AD95B0A44D148B7235070DF27CE527A4EF0471689443B8B7B0E897C136C552FE87C98FCE294DBB4E39C675120216900AE2AF926A688751158B3E72C877E2E55C75A389BF07EDC912A4D08B49B2CE7B7F7EC1ADE729D0236216EEF05EFDC120D23B667E6FAD95594BDCF196304660747251886244B8E51D01BC2 switch1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. N0oPPgtwCtlbCkTRSLcjUHDfJ85Sek7wRxaJRDuLew6JfBNsVS/ofJj84pTbtOOcZ1EgIWkArir5JqaIdRFYs+csh34uVcdaOJvwftyRKk0ItJss57f37Brecp0CNiFu7wXv3BINI7Zn5vrZVZS9zxljBGYHRyUYhiRLjlHQG8I= ;{id = 42393} 0773776974636831096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00968E6BADD51E81404967B419D33279CDE00CC5183C3FE0FF30D4CB9075FF7039C3E46B97EFB30E61B9B7791177AC15E59989736C5D20B423F871C33A2F59E2477F59DC1B9DC0761073DDA0BFF807EB1DA09745219BD11A59158BE83B8F9DFBED8BC0164E2F8DB7D2108ACE6E07B9DA72E6595FD2AB54B95715A4762E7CAF5C85 switch1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. lo5rrdUegUBJZ7QZ0zJ5zeAMxRg8P+D/MNTLkHX/cDnD5GuX77MOYbm3eRF3rBXlmYlzbF0gtCP4ccM6L1niR39Z3BudwHYQc92gv/gH6x2gl0Uhm9EaWRWL6DuPnfvti8AWTi+Nt9IQis5uB7nacuZZX9KrVLlXFaR2LnyvXIU= ;{id = 42393} 0773776974636831096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636832096E6C6E65746C616273026E6C000006400000000003 switch1.nlnetlabs.nl. 3600 IN NSEC switch2.nlnetlabs.nl. A RRSIG NSEC 0773776974636832096E6C6E65746C616273026E6C0000010001000027D80004D59AE070 switch2.nlnetlabs.nl. 10200 IN A 213.154.224.112 0773776974636832096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004248F21D1F1E901C5EB6B8114D2763128330A2FA3409BEFD325CD176A7FD46B46C71DF8F879B083F5565FDC2D0470CB2A1C81E275BCB52B4419711A79855C55FBD6F5333A65276967904B7E1F36A949FF6E93620E3DAEE435C2F359C4A7DF621B90FEC8EB148FEE886F700D4630342918BBA8E9BB5C0D15D65915816ABCB81FA switch2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QkjyHR8ekBxetrgRTSdjEoMwovo0Cb79MlzRdqf9RrRscd+Ph5sIP1Vl/cLQRwyyocgeJ1vLUrRBlxGnmFXFX71vUzOmUnaWeQS34fNqlJ/26TYg49ruQ1wvNZxKffYhuQ/sjrFI/uiG9wDUYwNCkYu6jpu1wNFdZZFYFqvLgfo= ;{id = 42393} 0773776974636832096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00178090D56466C34379F206297FCC76729E995531A919031863C03774F73120C9085F450BED7FD06872AD965F832BC4D893162ED6496461436CF46DF2ABD47E50ABB9BB30E0BB89B5A2B3DDEB2B57FFC9482E1AEEAFA3054C57CF4E0A07F68E50D6EA2D279665356C6433F457F08AEAD87CD75D96EDEF50D3C4BA02F825097113 switch2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. F4CQ1WRmw0N58gYpf8x2cp6ZVTGpGQMYY8A3dPcxIMkIX0UL7X/QaHKtll+DK8TYkxYu1klkYUNs9G3yq9R+UKu5uzDgu4m1orPd6ytX/8lILhrur6MFTFfPTgoH9o5Q1uotJ5ZlNWxkM/RX8Irq2HzXXZbt71DTxLoC+CUJcRM= ;{id = 42393} 0773776974636832096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636833096E6C6E65746C616273026E6C000006400000000003 switch2.nlnetlabs.nl. 3600 IN NSEC switch3.nlnetlabs.nl. A RRSIG NSEC 0773776974636833096E6C6E65746C616273026E6C0000010001000027D80004D59AE071 switch3.nlnetlabs.nl. 10200 IN A 213.154.224.113 0773776974636833096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00A9C98318717F28D0B85CD9C65B50A4706804B951207C32249ACFEAB1952EB1EDA4074809F38A38E1FD86A054E04AE507AAB137521AEEA75B8CEE9324F6F115410F2B00826AFC46D1392F0C423A1442EAAED60EF55DF0140D0325B4AC3E1AB5AEE07C6D95EA5FA3159FC0C491F60643A29F53138CCAD9B6F39852678AEF4F5CFB switch3.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qcmDGHF/KNC4XNnGW1CkcGgEuVEgfDIkms/qsZUuse2kB0gJ84o44f2GoFTgSuUHqrE3Uhrup1uM7pMk9vEVQQ8rAIJq/EbROS8MQjoUQuqu1g71XfAUDQMltKw+GrWu4HxtlepfoxWfwMSR9gZDop9TE4zK2bbzmFJniu9PXPs= ;{id = 42393} 0773776974636833096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C002DDF6882A3B63C770FD971D011F4D88EA1C9241A9D7D23EAE727A0D297EAE3F51EF3801E9E9378660DFAD214A67BAF77C2F7D25CB53E7F47B02F8F8C7458430DF85EAB573BC7967ED4C77BFC15B1433B90020BB03E144C9F64D2B7B7532EE47DB43E619FC56D7E74572CE4048E2AA7617013CAF39161B0F40E08E807ED40160B switch3.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ld9ogqO2PHcP2XHQEfTYjqHJJBqdfSPq5yeg0pfq4/Ue84AenpN4Zg360hSme693wvfSXLU+f0ewL4+MdFhDDfheq1c7x5Z+1Md7/BWxQzuQAguwPhRMn2TSt7dTLuR9tD5hn8VtfnRXLOQEjiqnYXATyvORYbD0DgjoB+1AFgs= ;{id = 42393} 0773776974636833096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636834096E6C6E65746C616273026E6C000006400000000003 switch3.nlnetlabs.nl. 3600 IN NSEC switch4.nlnetlabs.nl. A RRSIG NSEC 0773776974636834096E6C6E65746C616273026E6C0000010001000027D80004D59AE072 switch4.nlnetlabs.nl. 10200 IN A 213.154.224.114 0773776974636834096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C002A95F3D6A38CEDC8F2FAB8BBECCB661683E215AB99356C8D2B15142E488C91D64BA4F6B76EED8A247E4DB379BD126B2E46DA7863D4B7D347D3AA6DE3D50B559AD378B806DBDCE6B7D4417A34C66283563477417F2CC287BDDD9DB25B6B24D65701C90064EA155483BB093CFD48C81C14A19C1DA2C7532EC09213D5E03D6FCAE8 switch4.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. KpXz1qOM7cjy+ri77MtmFoPiFauZNWyNKxUULkiMkdZLpPa3bu2KJH5Ns3m9EmsuRtp4Y9S300fTqm3j1QtVmtN4uAbb3Oa31EF6NMZig1Y0d0F/LMKHvd2dsltrJNZXAckAZOoVVIO7CTz9SMgcFKGcHaLHUy7AkhPV4D1vyug= ;{id = 42393} 0773776974636834096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C005A5A56747FE8555C1214BFF993D6B82500516DEDF710A27C127DA06E3554EE9A77322200BD2A4B4C5F43EB28F28DF89166EBA32FC17399C25AEA89685BF5F1C16F8C31F89B90318B1C9528D2977444D79DC2119060876B3AD6686F22E7476F8F51121663198B402B0592445B26CF16C9352FBC33F7DF9D2C643AE9D1CD36B056 switch4.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. WlpWdH/oVVwSFL/5k9a4JQBRbe33EKJ8En2gbjVU7pp3MiIAvSpLTF9D6yjyjfiRZuujL8FzmcJa6oloW/XxwW+MMfibkDGLHJUo0pd0RNedwhGQYIdrOtZobyLnR2+PURIWYxmLQCsFkkRbJs8WyTUvvDP3350sZDrp0c02sFY= ;{id = 42393} 0773776974636834096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636835096E6C6E65746C616273026E6C000006400000000003 switch4.nlnetlabs.nl. 3600 IN NSEC switch5.nlnetlabs.nl. A RRSIG NSEC 0773776974636835096E6C6E65746C616273026E6C0000010001000027D80004D59AE073 switch5.nlnetlabs.nl. 10200 IN A 213.154.224.115 0773776974636835096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001773DA795C78DA09C7DCCC2E3A08E73397E53CBF5E5B0D78A4390C15927E3F60241ABC2C347D7309A8A0BA393F3B8B72A92A8F3ADA8FEAECC78865DD23A19B281DC874B91F4E5DFC4BE912932781AE0FDF372D36A49E344137AF754A6E4E1C31FF00D517C313159C0EBB1FAEE33DB5A0385C3B10C683573542802260065BEC49 switch5.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. F3PaeVx42gnH3MwuOgjnM5flPL9eWw14pDkMFZJ+P2AkGrwsNH1zCaigujk/O4tyqSqPOtqP6uzHiGXdI6GbKB3IdLkfTl38S+kSkyeBrg/fNy02pJ40QTevdUpuThwx/wDVF8MTFZwOux+u4z21oDhcOxDGg1c1QoAiYAZb7Ek= ;{id = 42393} 0773776974636835096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C005A6CCACA9D9B4C28F062AD129F5B8000D1C5C3F0B103640EF84217F64DE9F6BCE6526DB5203712FF4877136244ED76098822B64BB3321E2C430ECA22E1BC43287A4077D2B9319EC4B565171FCDA5BDDF9ECB6015F8AC75ECE5985871B512E23D9B4E101900F9774367B2B223FDC6E948AF82504DEB47F5728D58C1F60165CEFA switch5.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. WmzKyp2bTCjwYq0Sn1uAANHFw/CxA2QO+EIX9k3p9rzmUm21IDcS/0h3E2JE7XYJiCK2S7MyHixDDsoi4bxDKHpAd9K5MZ7EtWUXH82lvd+ey2AV+Kx17OWYWHG1EuI9m04QGQD5d0NnsrIj/cbpSK+CUE3rR/VyjVjB9gFlzvo= ;{id = 42393} 0773776974636835096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636836096E6C6E65746C616273026E6C000006400000000003 switch5.nlnetlabs.nl. 3600 IN NSEC switch6.nlnetlabs.nl. A RRSIG NSEC 0773776974636836096E6C6E65746C616273026E6C0000010001000027D80004D59AE074 switch6.nlnetlabs.nl. 10200 IN A 213.154.224.116 0773776974636836096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C008DA57F35846084F8CF1010294311090445E7CD400FDD36287DCB26650D49974E68958D36B8DB0E9029BC6E18102558C027DC3563386E2B0D0C2087076B1C9924DCD5DF2C74E3F4CD22872673BC7971F644D3D8D8A1D3B70F6C5F61732E85A76D66E851338085BF603D579750D55A17B14584D77126139EE6747E9F2F15839199 switch6.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jaV/NYRghPjPEBApQxEJBEXnzUAP3TYofcsmZQ1Jl05olY02uNsOkCm8bhgQJVjAJ9w1YzhuKw0MIIcHaxyZJNzV3yx04/TNIocmc7x5cfZE09jYodO3D2xfYXMuhadtZuhRM4CFv2A9V5dQ1VoXsUWE13EmE57mdH6fLxWDkZk= ;{id = 42393} 0773776974636836096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0006DA902FA4905922EE026C339E60A54AF419531AFFFF1FC2FC6567AB6811F4BB9195FD1A16354D42402B2E813674764680652060C6B9BC0CE4C92FA458FCC6A4F877EC55ED2698ABF0A3441F39EE9CF2B2762BB28E0347D534B2855DF25E0A2AD5E57A0F44F2B648E258E48B5D9FABC991B7AF6117D968B41CDB074C7698346D switch6.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. BtqQL6SQWSLuAmwznmClSvQZUxr//x/C/GVnq2gR9LuRlf0aFjVNQkArLoE2dHZGgGUgYMa5vAzkyS+kWPzGpPh37FXtJpir8KNEHznunPKydiuyjgNH1TSyhV3yXgoq1eV6D0TytkjiWOSLXZ+ryZG3r2EX2Wi0HNsHTHaYNG0= ;{id = 42393} 0773776974636836096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636837096E6C6E65746C616273026E6C000006400000000003 switch6.nlnetlabs.nl. 3600 IN NSEC switch7.nlnetlabs.nl. A RRSIG NSEC 0773776974636837096E6C6E65746C616273026E6C0000010001000027D80004D59AE075 switch7.nlnetlabs.nl. 10200 IN A 213.154.224.117 0773776974636837096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00264BE1C885E05AB86C45B7C7CEDAA7AB449E934D3FDA162793780C922E1AC80FE682925F9B90C31CC5B72E10E35602241D70E365B8E2AE9D718EB375C2CB06DD1849A4507E07314C87C8DB82F6DFE4948896FECBC497B67204DDAAD6F0F0EBC6C0DDB4E3D1BAABE949C8E48016701E261114147294C60E25EF2EF1AC62FAED3A switch7.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. JkvhyIXgWrhsRbfHztqnq0Sek00/2hYnk3gMki4ayA/mgpJfm5DDHMW3LhDjVgIkHXDjZbjirp1xjrN1wssG3RhJpFB+BzFMh8jbgvbf5JSIlv7LxJe2cgTdqtbw8OvGwN2049G6q+lJyOSAFnAeJhEUFHKUxg4l7y7xrGL67To= ;{id = 42393} 0773776974636837096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0077C1ACBDFB5BEA92363B9DB49E1287E648BE057A86D2FC39F0C1F6DC3105F6BB08CF578998BBF8E23E5DE2D509AA55F0FF3363D7AD5FD8A4F8BB29073004C93CD11A935993272EC84517F33D5A6B60AC0ACA33814EBAA89516946286B61BDF24B3D6B283FB8193FCA956D0F829BA9C724EFF01E1F681DB4B5A5033DADCD82B1E switch7.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. d8Gsvftb6pI2O520nhKH5ki+BXqG0vw58MH23DEF9rsIz1eJmLv44j5d4tUJqlXw/zNj161f2KT4uykHMATJPNEak1mTJy7IRRfzPVprYKwKyjOBTrqolRaUYoa2G98ks9ayg/uBk/ypVtD4Kbqcck7/AeH2gdtLWlAz2tzYKx4= ;{id = 42393} 0773776974636837096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0071D3BBD806F20C1448FAC850AEC8D8C3FEDE775B0832985927FE908394B5CF77752AC89211B5F4E9F66D2B29EB2CEFB39798175E3EFB05B0B3A140EA1C8660AB107E4D23A9760524D9E64A3C68AB681458B8DC526B80ECBA7F7FDA5B5D498D656429799227C5A5013B2196D28934884A6035D58354A7DB22EAE7F0FC7DE8609E switch7.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. cdO72AbyDBRI+shQrsjYw/7ed1sIMphZJ/6Qg5S1z3d1KsiSEbX06fZtKynrLO+zl5gXXj77BbCzoUDqHIZgqxB+TSOpdgUk2eZKPGiraBRYuNxSa4Dsun9/2ltdSY1lZCl5kifFpQE7IZbSiTSISmA11YNUp9si6ufw/H3oYJ4= ;{id = 42393} 0773776974636837096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010212F2FFFEECD040 switch7.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:212:f2ff:feec:d040 0773776974636837096E6C6E65746C616273026E6C00002F000100000E10001E0773776974636838096E6C6E65746C616273026E6C000006400000080003 switch7.nlnetlabs.nl. 3600 IN NSEC switch8.nlnetlabs.nl. A AAAA RRSIG NSEC 0773776974636838096E6C6E65746C616273026E6C0000010001000027D80004D59AE076 switch8.nlnetlabs.nl. 10200 IN A 213.154.224.118 0773776974636838096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00ACCA939BA5E7B29538285D41EEAF218F3D102307ED6BCFABE66F8BA352F5F774D6DDE57CA9ED2B0F45423C2ACAA40B6871CD23506E3CE1BFFF760E5207FD734ECFC1589186C0C1A32DCDC44493B979309BF1D849E5BED27EA5CD537B883BD54BE92E1C13BBB84CE2437B04725F8CE88A3C085679219E07E43933342154EDBC57 switch8.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rMqTm6XnspU4KF1B7q8hjz0QIwfta8+r5m+Lo1L193TW3eV8qe0rD0VCPCrKpAtocc0jUG484b//dg5SB/1zTs/BWJGGwMGjLc3ERJO5eTCb8dhJ5b7SfqXNU3uIO9VL6S4cE7u4TOJDewRyX4zoijwIVnkhngfkOTM0IVTtvFc= ;{id = 42393} 0773776974636838096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00737C98FDD069642600B7383F5E86D51E1C00750431EBCCC6251E6FD6A7B20393E805C84860D4CC558C991AEA16C9B667A5D5535D911E0F2276F9113B495BC2E6203E39BA7E7053ABFF23EDDF877D423C01842D92751821842E7611D79A14995DEE8BB1D1A4B45C9D6EDB024D96562FEEABA34C0C2623231BF793B4564FB09EAD switch8.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. c3yY/dBpZCYAtzg/XobVHhwAdQQx68zGJR5v1qeyA5PoBchIYNTMVYyZGuoWybZnpdVTXZEeDyJ2+RE7SVvC5iA+Obp+cFOr/yPt34d9QjwBhC2SdRghhC52EdeaFJld7oux0aS0XJ1u2wJNllYv7qujTAwmIyMb95O0Vk+wnq0= ;{id = 42393} 0773776974636838096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C001E51BBFBBEA4EE8077F0619B296078CC44D17B39CED8C8135471D0F015545CDE88EDD8E84A59A350CFEF7F5B6AD5A0E9A377FDA229B5778E85B85DF022864B56C17ED58F0B94F029B40072BCD27E8E3D9192144BBC55BD5BAA3C12994DD04A43330B96BB206A367645427EE09F9372AFDA79270E3BC6BBFDC4420DD8C8FDE6FC switch8.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HlG7+76k7oB38GGbKWB4zETReznO2MgTVHHQ8BVUXN6I7djoSlmjUM/vf1tq1aDpo3f9oim1d46FuF3wIoZLVsF+1Y8LlPAptAByvNJ+jj2RkhRLvFW9W6o8EplN0EpDMwuWuyBqNnZFQn7gn5Nyr9p5Jw47xrv9xEIN2Mj95vw= ;{id = 42393} 0773776974636838096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010212F2FFFEEE6380 switch8.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:212:f2ff:feee:6380 0773776974636838096E6C6E65746C616273026E6C00002F000100000E10001F08746573742D777777096E6C6E65746C616273026E6C000006400000080003 switch8.nlnetlabs.nl. 3600 IN NSEC test-www.nlnetlabs.nl. A AAAA RRSIG NSEC 08746573742D777777096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 test-www.nlnetlabs.nl. 10200 IN A 213.154.224.1 08746573742D777777096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001364215615147E9854633A690E4AF6E3DA3FA3972AB6EE4A2EC3792524D3610AE4B729E2B3CC57B922B7B1ABBB77348EAFEDE282876FA56D27A6B526C8063F91DF29537567D93FB3F7A098E7CA4E3B8628A3984BADF0AF9205387737CF7924E4C35C341A0479CFD89943F1A5BD56C4AA277AD267A4C126ABE8DE2E9E53F11057 test-www.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. E2QhVhUUfphUYzppDkr249o/o5cqtu5KLsN5JSTTYQrktynis8xXuSK3sau7dzSOr+3igodvpW0nprUmyAY/kd8pU3Vn2T+z96CY58pOO4Yoo5hLrfCvkgU4dzfPeSTkw1w0GgR5z9iZQ/GlvVbEqid60mekwSar6N4unlPxEFc= ;{id = 42393} 08746573742D777777096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C006276FA2F2AB67BAB6E82F60C817B03D64201CBAD67A0433E95F2C3AC15E52E1E8409CA2A689FFC7E4F69C3D3496769704299387F28F13FCD1D4E9D352B36F909D2933C874464B7B303A03BF1161545820D308DBB1450C0251FD585D3893F4EA889CC9AFED73D4A1E8352D7E63E50C67C9FC5D6519FFE51CB118D3C2979DF70F5 test-www.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Ynb6Lyq2e6tugvYMgXsD1kIBy61noEM+lfLDrBXlLh6ECcoqaJ/8fk9pw9NJZ2lwQpk4fyjxP80dTp01Kzb5CdKTPIdEZLezA6A78RYVRYINMI27FFDAJR/VhdOJP06oicya/tc9Sh6DUtfmPlDGfJ/F1lGf/lHLEY08KXnfcPU= ;{id = 42393} 08746573742D777777096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C007D7C09AAA5E6D8B404AC2FD0D2F04637E017119D129B50AED02BF558331AEB8D0A0C3C4B7A8BCCF37375F336563BDED1E3EEB7F5E4C1998E0B56BCDE8727543815A8A3560CA2ACAF2791325C0CBBB6EE364C78D46AAA49A59CCBF40FAD3575A0E886B188CA965ABD4C44F888BC673E5FB2588148FFA5B510C370E3DD751A4896 test-www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fXwJqqXm2LQErC/Q0vBGN+AXEZ0Sm1Cu0Cv1WDMa640KDDxLeovM83N18zZWO97R4+639eTBmY4LVrzehydUOBWoo1YMoqyvJ5EyXAy7tu42THjUaqpJpZzL9A+tNXWg6IaxiMqWWr1MRPiIvGc+X7JYgUj/pbUQw3Dj3XUaSJY= ;{id = 42393} 08746573742D777777096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 test-www.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 08746573742D777777096E6C6E65746C616273026E6C00002F000100000E10001C05756D627261096E6C6E65746C616273026E6C000006400000080003 test-www.nlnetlabs.nl. 3600 IN NSEC umbra.nlnetlabs.nl. A AAAA RRSIG NSEC 05756D627261096E6C6E65746C616273026E6C0000010001000027D80004D59AE025 umbra.nlnetlabs.nl. 10200 IN A 213.154.224.37 05756D627261096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C005DB4821C4F60EC942655893D25717F59976A8F5B644BF309DD79E475307E87AB90F618AF9464B7D266D0E25A3C3995E0D84BC077BC2C7D8B72E0E6C382D55C907D8AF589A524FB5637826FE1420354D5AD42D055B2A385D5E2BC8C323C62D601354F98770153779B387527D112BA0497B01F7836C460B8F5976D36639ECFDA47 umbra.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. XbSCHE9g7JQmVYk9JXF/WZdqj1tkS/MJ3XnkdTB+h6uQ9hivlGS30mbQ4lo8OZXg2EvAd7wsfYty4ObDgtVckH2K9YmlJPtWN4Jv4UIDVNWtQtBVsqOF1eK8jDI8YtYBNU+YdwFTd5s4dSfREroEl7AfeDbEYLj1l202Y57P2kc= ;{id = 42393} 05756D627261096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0021F512ED5599E410907F21E6A400F7EA6BE39EDC6537A83E25B112C5D230197699DAD1175234F769A28EA161C5ACE720AF2B5218E4F1E45C90AE32677EB00C1634208764359A9693BE06E0ADC8DBDE6355BDA71A5E83968B8839628C5CEC18F10EC0EA924DFCD06E73E84D3CEF8AC78EC007A446D0E7196FA9C3F26319D91F90 umbra.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IfUS7VWZ5BCQfyHmpAD36mvjntxlN6g+JbESxdIwGXaZ2tEXUjT3aaKOoWHFrOcgrytSGOTx5FyQrjJnfrAMFjQgh2Q1mpaTvgbgrcjb3mNVvacaXoOWi4g5Yoxc7BjxDsDqkk380G5z6E0874rHjsAHpEbQ5xlvqcPyYxnZH5A= ;{id = 42393} 05756D627261096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0014FF2836655492272E419ABEB1E75EE5D05F96BBE604E340C9A5B33F24E308226D50EE402FDDDBC82629B500EA8262355092EE97F7AD692708E52F235480A27299ED1FB9CF0F80D3A55129E832BB773F8B4B81D867185139B385A107372DB33686170160B56EDAFFE3D144784BC55D09434CEE358BC89C24553D9F8E842EF16C umbra.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FP8oNmVUkicuQZq+sede5dBflrvmBONAyaWzPyTjCCJtUO5AL93byCYptQDqgmI1UJLul/etaScI5S8jVICicpntH7nPD4DTpVEp6DK7dz+LS4HYZxhRObOFoQc3LbM2hhcBYLVu2v/j0UR4S8VdCUNM7jWLyJwkVT2fjoQu8Ww= ;{id = 42393} 05756D627261096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00697F7678504D276F8CBE7F3CF7FD9C4CBFBAD28D24C93B8DAF9F9DB1D21FBE0066ED74326A8D75C5F97E2828312983F28446D0BAC3035DAAC99F3AAF3D2D48E17255CA1C509C4990A03AEB9DCB3C55E8E54E94370B0A217C765B5B51AB56513C045A93A60422BE168065DDD63A27CE81DC4CC901B02D960FC180B11E1520BC03 umbra.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. aX92eFBNJ2+Mvn889/2cTL+60o0kyTuNr5+dsdIfvgBm7XQyao11xfl+KCgxKYPyhEbQusMDXarJnzqvPS1I4XJVyhxQnEmQoDrrncs8VejlTpQ3CwohfHZbW1GrVlE8BFqTpgQivhaAZd3WOifOgdxMyQGwLZYPwYCxHhUgvAM= ;{id = 42393} 05756D627261096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010203BAFFFE062060 umbra.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:baff:fe06:2060 05756D627261096E6C6E65746C616273026E6C00002C0001000027D800160101E898476127D38FC18600E77421A7E44F1CB3B266 umbra.nlnetlabs.nl. 10200 IN SSHFP 1 1 E898476127D38FC18600E77421A7E44F1CB3B266 05756D627261096E6C6E65746C616273026E6C00002C0001000027D800160201164C09BCEAE3466B3F2AEE99C0AEDD91E106F7CA umbra.nlnetlabs.nl. 10200 IN SSHFP 2 1 164C09BCEAE3466B3F2AEE99C0AEDD91E106F7CA 05756D627261096E6C6E65746C616273026E6C00002F000100000E10001E07756E626F756E64096E6C6E65746C616273026E6C00000640000008000B umbra.nlnetlabs.nl. 3600 IN NSEC unbound.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 07756E626F756E64096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 unbound.nlnetlabs.nl. 10200 IN A 213.154.224.1 07756E626F756E64096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004126773D3C801A56691282BF98A37FB18E50475CA6EF815046AE2553E62CA07D872B0BB1BA4178F4BEEF76AFB770A03DE47CB989035858B4CDB7CF2CD2F98F1F0B700F49A96ED1327E7E2C268552EE51D02EBF0DD07CC67153320F579D4B20B1ADC07807DDF48600C87C47CB33B02FA9025C19F51870696D362D7F33F0B62DCB unbound.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QSZ3PTyAGlZpEoK/mKN/sY5QR1ym74FQRq4lU+YsoH2HKwuxukF49L7vdq+3cKA95Hy5iQNYWLTNt88s0vmPHwtwD0mpbtEyfn4sJoVS7lHQLr8N0HzGcVMyD1edSyCxrcB4B930hgDIfEfLM7AvqQJcGfUYcGltNi1/M/C2Lcs= ;{id = 42393} 07756E626F756E64096E6C6E65746C616273026E6C00002E0001000027D800A0000F0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C0020DB448D05CA17181BECE0E8ED55878AEC78514624BE0D9ED8A76369966DBE6AB5FEE3F334197C9A84813E626C78D08E32A214BF7944B3FD3A9F891B042F64DA7D8BCA332C92714D45B58AB5ED0740F685B25EB747A98FFB6747950A4DC46A192C74F2F6BD9597350D85E9498689F1EEB9FE6CA03AFEB6732762D7B8BEE115E1 unbound.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. INtEjQXKFxgb7ODo7VWHiux4UUYkvg2e2KdjaZZtvmq1/uPzNBl8moSBPmJseNCOMqIUv3lEs/06n4kbBC9k2n2LyjMsknFNRbWKte0HQPaFsl63R6mP+2dHlQpNxGoZLHTy9r2VlzUNhelJhonx7rn+bKA6/rZzJ2LXuL7hFeE= ;{id = 42393} 07756E626F756E64096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00CA84C86BE2084D18555D9BEA84FC59FC3E0E8A75B2E9108ECAAA1B1FBD8ECD6584FCF920F390738C2C9A8C4589D2416A35D6A4FE873738DF77C6BA4BD35C294E56B21EEBC33625B542098207F4218374F69F87E1288F4C56C1CC72F4EF85C7F2EE77594E01FE9F0B65A8EE6A163A419668A67CD6172BEC75584AAA181FDBB8A3 unbound.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yoTIa+IITRhVXZvqhPxZ/D4OinWy6RCOyqobH72OzWWE/Pkg85BzjCyajEWJ0kFqNdak/oc3ON93xrpL01wpTlayHuvDNiW1QgmCB/Qhg3T2n4fhKI9MVsHMcvTvhcfy7ndZTgH+nwtlqO5qFjpBlmimfNYXK+x1WEqqGB/buKM= ;{id = 42393} 07756E626F756E64096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00906E37403DCA1E372EC471FBD2088F19ECC885C83EC8597A23825265C65AE0BFAEFB69D9FD2D98E25925892C15242271EE591DE89DB7CDEF789FF0ED35889ABF77C3577D140D63DF37D4DE11D2B0D6F5A68E55478607D780A198D4F47F6C4FF7DB3734B2C198CC3EB2A63F9AA2AEF08D99E9A9613C2C8791FB00671306EBED4F unbound.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kG43QD3KHjcuxHH70giPGezIhcg+yFl6I4JSZcZa4L+u+2nZ/S2Y4lkliSwVJCJx7lkd6J23ze94n/DtNYiav3fDV30UDWPfN9TeEdKw1vWmjlVHhgfXgKGY1PR/bE/32zc0ssGYzD6ypj+aoq7wjZnpqWE8LIeR+wBnEwbr7U8= ;{id = 42393} 07756E626F756E64096E6C6E65746C616273026E6C00000F0001000027D80015000A046F70656E096E6C6E65746C616273026E6C00 unbound.nlnetlabs.nl. 10200 IN MX 10 open.nlnetlabs.nl. 07756E626F756E64096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 unbound.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 07756E626F756E64096E6C6E65746C616273026E6C00002F000100000E10001B047572656E096E6C6E65746C616273026E6C000006400100080003 unbound.nlnetlabs.nl. 3600 IN NSEC uren.nlnetlabs.nl. A MX AAAA RRSIG NSEC 047572656E096E6C6E65746C616273026E6C0000050001000027D800230C77696C6C656D746F6F726F7007667269656E6473096E6C6E65746C616273026E6C00 uren.nlnetlabs.nl. 10200 IN CNAME willemtoorop.friends.nlnetlabs.nl. 047572656E096E6C6E65746C616273026E6C00002E0001000027D800A000050803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C00797AAFCBF4F61C14E34F81568F7352358F428AF51C183BF55E4971ADC8F846B22B136BDE5C137FE0E9D0EEC3A504A1340E259D04EDD35B8ADA3BF685A45B818C5415FA7BF863634325821F8067EFE8C69DD6DCDC88F8228394E06C66918851388957E9A48B346F5BC87C30C678180EF125E8E2DB7CD2AD90574F4FBFD67ECD47 uren.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. eXqvy/T2HBTjT4FWj3NSNY9CivUcGDv1Xklxrcj4RrIrE2veXBN/4OnQ7sOlBKE0DiWdBO3TW4raO/aFpFuBjFQV+nv4Y2NDJYIfgGfv6Mad1tzciPgig5TgbGaRiFE4iVfppIs0b1vIfDDGeBgO8SXo4tt80q2QV09Pv9Z+zUc= ;{id = 42393} 047572656E096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C0072BF4125C664D93FE4520AA909FFC887F8A9A50F00D02CADD0BE6AE099177D9DA3A0D22F7D1413151CDD478DCCADC0965D0F47748995ED5575FFEFF72A0A052958E5698FAE2C156FABD36966AFD8E50AEDAE2600C7AD20D4353B17FAF3C4A1785E039D9E430D333EE0DB139C6E988D75E9BCDA35EAE025CC03EAE3EA6384BF3D uren.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. cr9BJcZk2T/kUgqpCf/Ih/ippQ8A0Cyt0L5q4JkXfZ2joNIvfRQTFRzdR43MrcCWXQ9HdImV7VV1/+/3KgoFKVjlaY+uLBVvq9NpZq/Y5QrtriYAx60g1DU7F/rzxKF4XgOdnkMNMz7g2xOcbpiNdem82jXq4CXMA+rj6mOEvz0= ;{id = 42393} 047572656E096E6C6E65746C616273026E6C00002F000100000E10001E0776696572746A65096E6C6E65746C616273026E6C000006040000000003 uren.nlnetlabs.nl. 3600 IN NSEC viertje.nlnetlabs.nl. CNAME RRSIG NSEC 0776696572746A65096E6C6E65746C616273026E6C0000010001000027D80004D59AE03E viertje.nlnetlabs.nl. 10200 IN A 213.154.224.62 0776696572746A65096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C004D4928369991D23D33C938CD8E3C7EA35C5567E2CE1DC7F3D947A075930C9C0078F0D82F5D6A0F0BB8C40B120C4C6E4B424205670ADD5E58BFF6B6F8A63DE193B90A27DA05E572E13235355C320B854E29FA7D22B93FB63D8E3A9E37A409B86E8C9663228B7868D32B4BAF666809B552B2556CCA165DCD455814A50DA20496F8 viertje.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TUkoNpmR0j0zyTjNjjx+o1xVZ+LOHcfz2UegdZMMnAB48NgvXWoPC7jECxIMTG5LQkIFZwrdXli/9rb4pj3hk7kKJ9oF5XLhMjU1XDILhU4p+n0iuT+2PY46njekCbhujJZjIot4aNMrS69maAm1UrJVbMoWXc1FWBSlDaIElvg= ;{id = 42393} 0776696572746A65096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C001530A96BDB9E58999F504ADFFE0DAE04A232328FC69AACD453FF00FC716C49C3B61A21BACC13F71C142196E83570FD5E8790088BE15AFD8D9AE847866A51A539CEC7394E5BE04DF96D07969940FAAF743EB6BEAA34AFCD25231DCBB1415E43580073C4D71444F1D9B596FE0726779AE51245E94D79157A0CB84F8AC07AD5433F viertje.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FTCpa9ueWJmfUErf/g2uBKIyMo/GmqzUU/8A/HFsScO2GiG6zBP3HBQhlug1cP1eh5AIi+Fa/Y2a6EeGalGlOc7HOU5b4E35bQeWmUD6r3Q+tr6qNK/NJSMdy7FBXkNYAHPE1xRE8dm1lv4HJnea5RJF6U15FXoMuE+KwHrVQz8= ;{id = 42393} 0776696572746A65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F552E63FF5A599096E6C6E65746C616273026E6C00C2D32E6708D35E6534ABBAC6E2BF25E8CDAC299C3CA7AB0F3128F7F19F3D359732F943C48C8681B7DCE769EEAEDD8EDF21534191886451A1BBEBDB3C1F5E2EB18EBCD5BCDCCE8FF4E4974B7843E74FACD79B26F906A73ABC424633046722C68F8E1FB9428543EF1BE97DFFB6FCB8A9DE6B93D709B16490F7AAE4207BC9BA059E viertje.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wtMuZwjTXmU0q7rG4r8l6M2sKZw8p6sPMSj38Z89NZcy+UPEjIaBt9znae6u3Y7fIVNBkYhkUaG769s8H14usY681bzczo/05JdLeEPnT6zXmyb5Bqc6vEJGMwRnIsaPjh+5QoVD7xvpff+2/Lip3muT1wmxZJD3quQge8m6BZ4= ;{id = 42393} 0776696572746A65096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001020393FFFEEA3086 viertje.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:93ff:feea:3086 0776696572746A65096E6C6E65746C616273026E6C00002F000100000E10001D0676696A666A65096E6C6E65746C616273026E6C000006400000080003 viertje.nlnetlabs.nl. 3600 IN NSEC vijfje.nlnetlabs.nl. A AAAA RRSIG NSEC 0676696A666A65096E6C6E65746C616273026E6C0000010001000027D80004D59AE00E vijfje.nlnetlabs.nl. 10200 IN A 213.154.224.14 0676696A666A65096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F552E63FF5A599096E6C6E65746C616273026E6C009233C6DE424A98080BF175BD1C50D1F975461F9593460C6C98F90EA45CEC87391107F1D50CDAD44A6BB672135EA4C44FCB453A9F68A98E4643AAB7E66B9A4C0B3DDBFEEBDBDF95ED5DCA06E36E90EB58F64E6B887E2BDB7B38EC3C01D31AC8C182F089EB4DCA34E32137CFC5F91BF9E82E8230B2FCC666E3FBA40CE4A098B42E vijfje.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kjPG3kJKmAgL8XW9HFDR+XVGH5WTRgxsmPkOpFzshzkRB/HVDNrUSmu2chNepMRPy0U6n2ipjkZDqrfma5pMCz3b/uvb35XtXcoG426Q61j2TmuIfivbezjsPAHTGsjBgvCJ603KNOMhN8/F+Rv56C6CMLL8xmbj+6QM5KCYtC4= ;{id = 42393} 0676696A666A65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C001694CA384AAA8C674A3AC32E7D92BD7E5EEFB7BBEA9F627CB36059892A474725C29141ED80FB46C48B7904592267FBE74DA6FC2506B49F80EEC26ED10D9CDD9DE745559FE3C2EB102543CB66309B2E6F7EA62CD6FCC3D33759634CB5CE14D4EA9743D0BA12DFBD6D13439FEAC634146506B517C7ACCFBAB6861A1F3362714AA9 vijfje.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. FpTKOEqqjGdKOsMufZK9fl7vt7vqn2J8s2BZiSpHRyXCkUHtgPtGxIt5BFkiZ/vnTab8JQa0n4Duwm7RDZzdnedFVZ/jwusQJUPLZjCbLm9+pizW/MPTN1ljTLXOFNTql0PQuhLfvW0TQ5/qxjQUZQa1F8esz7q2hhofM2JxSqk= ;{id = 42393} 0676696A666A65096E6C6E65746C616273026E6C00002F000100000E1000230C76696A666A652D6361626C65096E6C6E65746C616273026E6C000006400000000003 vijfje.nlnetlabs.nl. 3600 IN NSEC vijfje-cable.nlnetlabs.nl. A RRSIG NSEC 0C76696A666A652D6361626C65096E6C6E65746C616273026E6C0000010001000027D80004D59AE00F vijfje-cable.nlnetlabs.nl. 10200 IN A 213.154.224.15 0C76696A666A652D6361626C65096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C005EF694A95C50B4894241A90F4EBD74ADE17723C539406FCFE61D0E1856FD26760FA02F3F6C2947473F5DA5BEBF8C397C7DD90BC9481548B3BEAB2553368BCE680A892997766A2DD0B3D21C6080CD051044E47C61EC4F818E7A03EB180C4FE02404E40A43119C5B6DAB503707078E2749546A64C033927BC047C308127D6061C3 vijfje-cable.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. XvaUqVxQtIlCQakPTr10reF3I8U5QG/P5h0OGFb9JnYPoC8/bClHRz9dpb6/jDl8fdkLyUgVSLO+qyVTNovOaAqJKZd2ai3Qs9IcYIDNBRBE5Hxh7E+BjnoD6xgMT+AkBOQKQxGcW22rUDcHB44nSVRqZMAzknvAR8MIEn1gYcM= ;{id = 42393} 0C76696A666A652D6361626C65096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C005B37DB428E99DA150069DEA323622BC339FAD6BAFCAE066E3914D8C845F4724C68F87BD5772D0A9C590E6B896741292262FBBFCE8AFFE207B93B629B6AD81775E831D8E0CDB42566618C4AEE9A522F3C4519844CDACF4455C9BF11EC0D458330C38AF5D242C49F7E303BE0B24F4A5DC29A66D3F5479E5AB4D9140D55DB648A67 vijfje-cable.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. WzfbQo6Z2hUAad6jI2Irwzn61rr8rgZuORTYyEX0ckxo+HvVdy0KnFkOa4lnQSkiYvu/zor/4ge5O2KbatgXdegx2ODNtCVmYYxK7ppSLzxFGYRM2s9EVcm/EewNRYMww4r10kLEn34wO+CyT0pdwppm0/VHnlq02RQNVdtkimc= ;{id = 42393} 0C76696A666A652D6361626C65096E6C6E65746C616273026E6C00002F000100000E10001E0776706E2D313739096E6C6E65746C616273026E6C000006400000000003 vijfje-cable.nlnetlabs.nl. 3600 IN NSEC vpn-179.nlnetlabs.nl. A RRSIG NSEC 0776706E2D313739096E6C6E65746C616273026E6C0000010001000027D80004D59AE0B3 vpn-179.nlnetlabs.nl. 10200 IN A 213.154.224.179 0776706E2D313739096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00B339B4815EB4642F3DE3BED20EE4C9FF6ED04D5CCF2B6D84CB9D46AB44C76818F6E3B0E72DEFC6F21B687E69DC8F1519DB872FA63F99AA08406E90A3DE54A61C55689EAD2192E611A89BA966C0D503CA4E33D3ECD6D0290E56A825D948300577DB8CF85E50EE910B4BC241BE650D2D601FD622A46D9D95B42F984D43315F1FBF vpn-179.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. szm0gV60ZC89477SDuTJ/27QTVzPK22Ey51Gq0THaBj247DnLe/G8htofmncjxUZ24cvpj+ZqghAbpCj3lSmHFVonq0hkuYRqJupZsDVA8pOM9Ps1tApDlaoJdlIMAV324z4XlDukQtLwkG+ZQ0tYB/WIqRtnZW0L5hNQzFfH78= ;{id = 42393} 0776706E2D313739096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C008958A8C2503241044D029C557FEDDCB6F4FEC79E78A408397FC90BCA9282F5C814DA3C6F9F7BBE19DC8054E6FC0DC79BCA7D414ECF2D004B46044BBFBA63902ABE5712BDEB018BC225B0277EDE5027A102D82F45F4DED74A5F51EF398D09E684EE1E84E7959E7AC3EA9F8B1EC94B851B045A24181D9166AF92EA1B4D550D67DF vpn-179.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. iViowlAyQQRNApxVf+3ctvT+x554pAg5f8kLypKC9cgU2jxvn3u+GdyAVOb8Dcebyn1BTs8tAEtGBEu/umOQKr5XEr3rAYvCJbAnft5QJ6EC2C9F9N7XSl9R7zmNCeaE7h6E55WeesPqn4seyUuFGwRaJBgdkWavkuobTVUNZ98= ;{id = 42393} 0776706E2D313739096E6C6E65746C616273026E6C00002F000100000E10001E0776706E2D313830096E6C6E65746C616273026E6C000006400000000003 vpn-179.nlnetlabs.nl. 3600 IN NSEC vpn-180.nlnetlabs.nl. A RRSIG NSEC 0776706E2D313830096E6C6E65746C616273026E6C0000010001000027D80004D59AE0B4 vpn-180.nlnetlabs.nl. 10200 IN A 213.154.224.180 0776706E2D313830096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00A00A413845774F77D659EDF5391103C0304036784B62E6E4DB1E36E4ACC11EA51F781AA36ADCB2BE011EF9C7BF35D34AD939E8537F0E83526C0E317F89A55B25F18E1A2A500AD3953827CBE44860CAA80012C8DF67789416A08C9DD0FE274FB77FAE70FB01FCDA3AA7920E14972D1E8068F565A4EF885C745380972EAD0681B8 vpn-180.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. oApBOEV3T3fWWe31OREDwDBANnhLYubk2x425KzBHqUfeBqjatyyvgEe+ce/NdNK2TnoU38Og1JsDjF/iaVbJfGOGipQCtOVOCfL5EhgyqgAEsjfZ3iUFqCMndD+J0+3f65w+wH82jqnkg4Uly0egGj1ZaTviFx0U4CXLq0Ggbg= ;{id = 42393} 0776706E2D313830096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C000A9075F6E586635575BB6D0DF9D0B687F94903736DAB31A8940775A3C2A226F561E088652C3F4D73C888E3271CE3E6E2B7DC58F6E6CBC51B852242FC5C9EF9D3C77B478B37C59A48043B9227967E38E2C3B025CEB154F5059778CC84122BD26E172867B1B3470CC686FB634E62A8B41CAF1193F0A54E1EBEFB1B0073B45C01E4 vpn-180.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. CpB19uWGY1V1u20N+dC2h/lJA3NtqzGolAd1o8KiJvVh4IhlLD9Nc8iI4ycc4+bit9xY9ubLxRuFIkL8XJ7508d7R4s3xZpIBDuSJ5Z+OOLDsCXOsVT1BZd4zIQSK9JuFyhnsbNHDMaG+2NOYqi0HK8Rk/ClTh6++xsAc7RcAeQ= ;{id = 42393} 0776706E2D313830096E6C6E65746C616273026E6C00002F000100000E10001E0776706E2D313831096E6C6E65746C616273026E6C000006400000000003 vpn-180.nlnetlabs.nl. 3600 IN NSEC vpn-181.nlnetlabs.nl. A RRSIG NSEC 0776706E2D313831096E6C6E65746C616273026E6C0000010001000027D80004D59AE0B5 vpn-181.nlnetlabs.nl. 10200 IN A 213.154.224.181 0776706E2D313831096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0087BC4061F3C472C1791A0D90DF16A6DB7581A629E710882F80F131CB9C3982AA1D06F65018E332230193CD6877930C5416D0A94B4E104FACF506E92A69B1515528FA3D277CEEF4709EE21778DDD2ED041D94833194E1A015EC5E896C7D6FD515E572253A76B43A77AFB94967E87AB2F3E95655C08ABCB1993CA616178F8E9B53 vpn-181.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. h7xAYfPEcsF5Gg2Q3xam23WBpinnEIgvgPExy5w5gqodBvZQGOMyIwGTzWh3kwxUFtCpS04QT6z1BukqabFRVSj6PSd87vRwnuIXeN3S7QQdlIMxlOGgFexeiWx9b9UV5XIlOna0OnevuUln6Hqy8+lWVcCKvLGZPKYWF4+Om1M= ;{id = 42393} 0776706E2D313831096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00D1CFA9C24350734835B43EFA181BA3C310EDCCEB3B68C9D216D3565D6E58A7F44D4D1815E455CE2C4BB55167ED5E980609AC5767FB4A7C039B02CC43B79EC1CF5F3C159B29F976F83E2AEAC41C995C87A60F2908FD9013566BFEC16B0111CC14277357F43EAFA1AEE3B0BD67E810AE61932B8EFA92D98BE046A5CA3BC37F0288 vpn-181.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. 0c+pwkNQc0g1tD76GBujwxDtzOs7aMnSFtNWXW5Yp/RNTRgV5FXOLEu1UWftXpgGCaxXZ/tKfAObAsxDt57Bz188FZsp+Xb4PirqxByZXIemDykI/ZATVmv+wWsBEcwUJ3NX9D6voa7jsL1n6BCuYZMrjvqS2YvgRqXKO8N/Aog= ;{id = 42393} 0776706E2D313831096E6C6E65746C616273026E6C00002F000100000E10001E0776706E2D313832096E6C6E65746C616273026E6C000006400000000003 vpn-181.nlnetlabs.nl. 3600 IN NSEC vpn-182.nlnetlabs.nl. A RRSIG NSEC 0776706E2D313832096E6C6E65746C616273026E6C0000010001000027D80004D59AE0B6 vpn-182.nlnetlabs.nl. 10200 IN A 213.154.224.182 0776706E2D313832096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0035F1BFBCCACA2AE18D3B73E67A2697E647CEB646312EBE8273E1E77C28061EDD902EB3163884506A4B857ECC426493C9CE2DE248E83479FACD63BD8968F9D5A8220A2C345198E76657B91FFC908CC97467D14C7B7A6B310070124F67A226187F5CC3FEE23082E14AB28696396445AEAA4B23EDE0C2D7F2E7A7900B6ED18A0F98 vpn-182.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. NfG/vMrKKuGNO3PmeiaX5kfOtkYxLr6Cc+HnfCgGHt2QLrMWOIRQakuFfsxCZJPJzi3iSOg0efrNY72JaPnVqCIKLDRRmOdmV7kf/JCMyXRn0Ux7emsxAHAST2eiJhh/XMP+4jCC4UqyhpY5ZEWuqksj7eDC1/Lnp5ALbtGKD5g= ;{id = 42393} 0776706E2D313832096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00B77964E658A77B29791CCAE307A3D2331584ADA79F6172EE66D276337475534A7DCF278FF23BE60DA4F67D20F4CC03577A2F603917A1BCDE3623E87C5A21EB60CC487CC57E4EF92F96E29202E496320FFD208EF374FF0451FF98D18CDE2670775A46033E879D3BC3283DCFB72FEF5AB25489BE1B5E4EE84022DF210AF9516D8D vpn-182.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. t3lk5lineyl5HMrjB6PSMxWEraefYXLuZtJ2M3R1U0p9zyeP8jvmDaT2fSD0zANXei9gORehvN42I+h8WiHrYMxIfMV+TvkvluKSAuSWMg/9II7zdP8EUf+Y0YzeJnB3WkYDPoedO8MoPc+3L+9aslSJvhteTuhAIt8hCvlRbY0= ;{id = 42393} 0776706E2D313832096E6C6E65746C616273026E6C00002F000100000E10001F0876706E2D6A616170096E6C6E65746C616273026E6C000006400000000003 vpn-182.nlnetlabs.nl. 3600 IN NSEC vpn-jaap.nlnetlabs.nl. A RRSIG NSEC 0876706E2D6A616170096E6C6E65746C616273026E6C0000010001000027D80004D59AE0B2 vpn-jaap.nlnetlabs.nl. 10200 IN A 213.154.224.178 0876706E2D6A616170096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0064826C041CF6C7F6FFFDAEE64D43AD43EE61B169FF8CC657C14F8791703175EA335AD1CCCF81F8169C05D6A858D3558D2A8637CE91E4A7405FB08FEDAE0B0DC9CCF0E62B51FB52184E7C7D4FA49019B5D9A7EE1453ACAEC9721CA9D4B0F442A069D045848ED67A1883C9BEF419BC2E1E8B664D4071A925A4983F2559DC6847F7 vpn-jaap.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. ZIJsBBz2x/b//a7mTUOtQ+5hsWn/jMZXwU+HkXAxdeozWtHMz4H4FpwF1qhY01WNKoY3zpHkp0BfsI/trgsNyczw5itR+1IYTnx9T6SQGbXZp+4UU6yuyXIcqdSw9EKgadBFhI7WehiDyb70GbwuHotmTUBxqSWkmD8lWdxoR/c= ;{id = 42393} 0876706E2D6A616170096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C007D6A879742F09F83D5D58A446611488B9CA04CB2E41495106797CF87F991015B97DFEF2F603C7F5771ADC6BCD85234FF73B50D950CCC1A4F33AE383D5A002CA746BBB64B56490AE1C173BE709DD7C2B40DE628DB0B89817749338EFEED879D70BE4B3237B9649FAF6C447C215DF4F092B8F334CD9F050B11AB4DBAB7895D9488 vpn-jaap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. fWqHl0Lwn4PV1YpEZhFIi5ygTLLkFJUQZ5fPh/mRAVuX3+8vYDx/V3GtxrzYUjT/c7UNlQzMGk8zrjg9WgAsp0a7tktWSQrhwXO+cJ3XwrQN5ijbC4mBd0kzjv7th51wvksyN7lkn69sRHwhXfTwkrjzNM2fBQsRq026t4ldlIg= ;{id = 42393} 0876706E2D6A616170096E6C6E65746C616273026E6C00002F000100000E10001F0876706E2D6F6C6166096E6C6E65746C616273026E6C000006400000000003 vpn-jaap.nlnetlabs.nl. 3600 IN NSEC vpn-olaf.nlnetlabs.nl. A RRSIG NSEC 0876706E2D6F6C6166096E6C6E65746C616273026E6C0000010001000027D80004D59AE0B0 vpn-olaf.nlnetlabs.nl. 10200 IN A 213.154.224.176 0876706E2D6F6C6166096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0072479D28A885C98749E885737689E2A5AFA55A682629E397E3B83A4D462F622F3A616EFD0649D5707B22E62FBB743E8C19A1F4DF2813AF9F9631006C2C30FAA21422579002AE1BBDF2296720D1A0E5D2CF383C393E06A9000C9CF6882E8AE63E64A42ABFF2FFC304A2C54FBCF6880540DC4445070ED049982DD3327D5C4EC2D1 vpn-olaf.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. ckedKKiFyYdJ6IVzdonipa+lWmgmKeOX47g6TUYvYi86YW79BknVcHsi5i+7dD6MGaH03ygTr5+WMQBsLDD6ohQiV5ACrhu98ilnINGg5dLPODw5PgapAAyc9oguiuY+ZKQqv/L/wwSixU+89ogFQNxERQcO0EmYLdMyfVxOwtE= ;{id = 42393} 0876706E2D6F6C6166096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00B69AA953D01B938BBB5AE2ED679359CBE331D7CE57E2036BC76A763B35802B01DAFDDE47A829BCDFF50BD52B3CD431029CED68767AA7D25B314F2EEE36D903E124D885C1F6794AD7B573EBA78CE91A640B523867C10DD67A04C6112DADF9DCF298345D1707D50E777EF4CD32331957930C6319B29E049B7D05A123DF426D9C60 vpn-olaf.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. tpqpU9Abk4u7WuLtZ5NZy+Mx185X4gNrx2p2OzWAKwHa/d5HqCm83/UL1Ss81DECnO1odnqn0lsxTy7uNtkD4STYhcH2eUrXtXPrp4zpGmQLUjhnwQ3WegTGES2t+dzymDRdFwfVDnd+9M0yMxlXkwxjGbKeBJt9BaEj30JtnGA= ;{id = 42393} 0876706E2D6F6C6166096E6C6E65746C616273026E6C00002F000100000E1000200976706E2D6F6C616632096E6C6E65746C616273026E6C000006400000000003 vpn-olaf.nlnetlabs.nl. 3600 IN NSEC vpn-olaf2.nlnetlabs.nl. A RRSIG NSEC 0976706E2D6F6C616632096E6C6E65746C616273026E6C0000010001000027D80004D59AE0B1 vpn-olaf2.nlnetlabs.nl. 10200 IN A 213.154.224.177 0976706E2D6F6C616632096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C004E62F0DFDDA9EEB88B1DDB651B7C024FFB83774CC9C28D76D0D97194215E2258014423E60B2A5E5F9E8E5E38CED48008A3606C69DC0917D847F0266DBA4334D0E364BA0B5F6AC77A0CAD8E6A90EFCA1B16A001A9A2F212DAFAD7FBB53D99DB4CDB7743A4EAEB688530399D01D4E0080A2B727AEC59474784C642D9C182FDE9D6 vpn-olaf2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. TmLw392p7riLHdtlG3wCT/uDd0zJwo120NlxlCFeIlgBRCPmCypeX56OXjjO1IAIo2BsadwJF9hH8CZtukM00ONkugtfasd6DK2OapDvyhsWoAGpovIS2vrX+7U9mdtM23dDpOrraIUwOZ0B1OAICityeuxZR0eExkLZwYL96dY= ;{id = 42393} 0976706E2D6F6C616632096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00C6D1E5F9F95296072893F1B9B9CF9C4D34E51DB7B26C0AD4A04723F62E306879CAA959FE28CA0CAFE34F1FBD6D244C4609A0AAAEF93BE46E4A3C8C247DC4114702D4363F99605E10020C3D00FC862BEBBE8D96C9F52A596FFF4292B65BCD9B8B9D0CC45FFDCFFD0B5C3D376FD97E2B28E08AC653DF99BC8FE806E16F07D86338 vpn-olaf2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. xtHl+flSlgcok/G5uc+cTTTlHbeybArUoEcj9i4waHnKqVn+KMoMr+NPH71tJExGCaCqrvk75G5KPIwkfcQRRwLUNj+ZYF4QAgw9APyGK+u+jZbJ9SpZb/9CkrZbzZuLnQzEX/3P/QtcPTdv2X4rKOCKxlPfmbyP6AbhbwfYYzg= ;{id = 42393} 0976706E2D6F6C616632096E6C6E65746C616273026E6C00002F000100000E10001A03777777096E6C6E65746C616273026E6C000006400000000003 vpn-olaf2.nlnetlabs.nl. 3600 IN NSEC www.nlnetlabs.nl. A RRSIG NSEC 03777777096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 www.nlnetlabs.nl. 10200 IN A 213.154.224.1 03777777096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C003B06F4D332D515808BBF9C39914C2ADC66AB11FE31B28B3423E722F7DEB3760CBE5B4331A34D85DC90A6559EDDBA0D07AD5BB3FF275DEA3E9EFEA6C291884DF236DB395A2E7FF110D699E1A4736BEEE8598D1D5C188897FA641FC3CB147FA580B15F013E806FE618769CEDECADAE1BAFD16C65AB5BD086AE438F2791CCC1BF6B www.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. Owb00zLVFYCLv5w5kUwq3GarEf4xsos0I+ci996zdgy+W0Mxo02F3JCmVZ7dug0HrVuz/ydd6j6e/qbCkYhN8jbbOVouf/EQ1pnhpHNr7uhZjR1cGIiX+mQfw8sUf6WAsV8BPoBv5hh2nO3sra4br9FsZatb0IauQ48nkczBv2s= ;{id = 42393} 03777777096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00AFE54DD7D9A08A6D4029D1B8A27CDC35F1B07E96E45958E1ED13FE58003B92EF70DD72B68DD1E21776F5404E3DA2201BB2CE3752B425A7ED3C9BFE99B7118D92C0B1400D50023E03F7242A6A945F09B27688C6EBC98D5A0A94F88BD080177A0E370EB1AC9645FDFC553EFCBD26BBAA29FB190E5D991E85C2B40FDE7822B58611 www.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. r+VN19mgim1AKdG4onzcNfGwfpbkWVjh7RP+WAA7ku9w3XK2jdHiF3b1QE49oiAbss43UrQlp+08m/6ZtxGNksCxQA1QAj4D9yQqapRfCbJ2iMbryY1aCpT4i9CAF3oONw6xrJZF/fxVPvy9JruqKfsZDl2ZHoXCtA/eeCK1hhE= ;{id = 42393} 03777777096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00327F6DA9D087F29ACC614E16F74FE1A4D0D034D4AE210D639FE9BDA1C9C215628CF235C6B869E686366DB4F4B0FEC87A03C55AE7D6D2B91812C88836BA0C43D4542817DB1BEFB380932AB47F18127833B1E9A6DDE1278B58D6EFA9333C12979749A6F307C133E32F9C09F5483AD835F10714F0B64762171AA0D40AAA5ABAFA9C www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. Mn9tqdCH8prMYU4W90/hpNDQNNSuIQ1jn+m9ocnCFWKM8jXGuGnmhjZttPSw/sh6A8Va59bSuRgSyIg2ugxD1FQoF9sb77OAkyq0fxgSeDOx6abd4SeLWNbvqTM8EpeXSabzB8Ez4y+cCfVIOtg18QcU8LZHYhcaoNQKqlq6+pw= ;{id = 42393} 03777777096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 www.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 03777777096E6C6E65746C616273026E6C00002F000100000E100024045F343433045F74637003777777096E6C6E65746C616273026E6C000006400000080003 www.nlnetlabs.nl. 3600 IN NSEC _443._tcp.www.nlnetlabs.nl. A AAAA RRSIG NSEC 045F343433045F74637003777777096E6C6E65746C616273026E6C0000050001000027D8001A013301310131055F64616E65096E6C6E65746C616273026E6C00 _443._tcp.www.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. 045F343433045F74637003777777096E6C6E65746C616273026E6C00002E0001000027D800A000050805000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00AAB7D8E877184C514FDCE92F5732709262562D34DBAB4EA3C297DB9D45DB9C8494F76B97010B8FBB23B3C727F4390C32E90F294252308EA6E67035245887C1061BF13FA1475A6D17AC8E8728EA2AC6AE45CF520AB21B399FB8D167C21FA1D32B2BE391B76148C09530C6108BAD7FF438C99F0193DEFEC011DC33873920515C94 _443._tcp.www.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. qrfY6HcYTFFP3OkvVzJwkmJWLTTbq06jwpfbnUXbnISU92uXAQuPuyOzxyf0OQwy6Q8pQlIwjqbmcDUkWIfBBhvxP6FHWm0XrI6HKOoqxq5Fz1IKshs5n7jRZ8IfodMrK+ORt2FIwJUwxhCLrX/0OMmfAZPe/sAR3DOHOSBRXJQ= ;{id = 42393} 045F343433045F74637003777777096E6C6E65746C616273026E6C00002E000100000E1000A0002F080500000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C0035D5CE1A98D2E8782078E17F95CEA27B6184FBF1000BC6F3209F47D5FC688E0952727F70BFFF9FF5A0383064F54B6CE049043E34BE9B8C33002FE16034C578435FF94EACE9FAAEC0FE4F7FCE7F155C2932FA04F3B26ED64332A78B36E9DDFC4DF1E1C80D2ABA8D99CA2BA6494AE39F3EE07A10266D3E98A1D6C04D5C20245AD5 _443._tcp.www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. NdXOGpjS6HggeOF/lc6ie2GE+/EAC8bzIJ9H1fxojglScn9wv/+f9aA4MGT1S2zgSQQ+NL6bjDMAL+FgNMV4Q1/5Tqzp+q7A/k9/zn8VXCky+gTzsm7WQzKnizbp3fxN8eHIDSq6jZnKK6ZJSuOfPuB6ECZtPpih1sBNXCAkWtU= ;{id = 42393} 045F343433045F74637003777777096E6C6E65746C616273026E6C00002F000100000E10001E0377697003777777096E6C6E65746C616273026E6C000006040000000003 _443._tcp.www.nlnetlabs.nl. 3600 IN NSEC wip.www.nlnetlabs.nl. CNAME RRSIG NSEC 0377697003777777096E6C6E65746C616273026E6C0000010001000027D80004D59AE001 wip.www.nlnetlabs.nl. 10200 IN A 213.154.224.1 0377697003777777096E6C6E65746C616273026E6C00002E0001000027D800A000010804000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C009BD6292E194F7E8BEBF1DC23F359C20A23CB7DE511DFE5141D77962EE5B832D6CD04793B70E7072FD890D8A31298F30E919FAE204767347B2C664AC1376B5DB58FB42044BC48803568DF7C52E1A33237BFAE5128B50F8D116F965F84017F4097EB78A25AE33A2005280267A6073527CEFF3B726C86B44F4E712E79339042F032 wip.www.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. m9YpLhlPfovr8dwj81nCCiPLfeUR3+UUHXeWLuW4MtbNBHk7cOcHL9iQ2KMSmPMOkZ+uIEdnNHssZkrBN2tdtY+0IES8SIA1aN98UuGjMje/rlEotQ+NEW+WX4QBf0CX63iiWuM6IAUoAmemBzUnzv87cmyGtE9OcS55M5BC8DI= ;{id = 42393} 0377697003777777096E6C6E65746C616273026E6C00002E0001000027D800A0001C0804000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C009F5EF0100F1528B9C8D84242ED22E9CBA8C9AFAB163676D2CA7E6B2342CFFE35B43FE82FFB4A162B93F8F7D15821F8CCD22FA1D098581D1C0B70A2F709E664FF654D379420941B23B0406CCE6B686EBA4978936F99E3BC253259D0C92FCCB2D67773128655ACB2D7CBC2A0B7D2E354819177280214CB8E0B6436FE553D04522A wip.www.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. n17wEA8VKLnI2EJC7SLpy6jJr6sWNnbSyn5rI0LP/jW0P+gv+0oWK5P499FYIfjM0i+h0JhYHRwLcKL3CeZk/2VNN5QglBsjsEBszmtobrpJeJNvmeO8JTJZ0MkvzLLWd3MShlWsstfLwqC30uNUgZF3KAIUy44LZDb+VT0EUio= ;{id = 42393} 0377697003777777096E6C6E65746C616273026E6C00002E000100000E1000A0002F080400000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00350D871FA696B6C7C5A1278E45B53611A2E3357E71CA9BEBE12DD1F184FDB66C95FF5CD0799779B646E1B4379CE487212CCFDDF280212A403A227B207F9E94AF52ECD9A3F2E4FBF696C3A86907B6C5945A0D46797DF81B5B5859538799006C8D8F586D443BAD527745788EFAC60C195C81857175C05E5CADB9915014CA7D04D6 wip.www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. NQ2HH6aWtsfFoSeORbU2EaLjNX5xypvr4S3R8YT9tmyV/1zQeZd5tkbhtDec5IchLM/d8oAhKkA6Insgf56Ur1Ls2aPy5Pv2lsOoaQe2xZRaDUZ5ffgbW1hZU4eZAGyNj1htRDutUndFeI76xgwZXIGFcXXAXlytuZFQFMp9BNY= ;{id = 42393} 0377697003777777096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010000000000000001 wip.www.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 0377697003777777096E6C6E65746C616273026E6C00002F000100000E10001B04786D7070096E6C6E65746C616273026E6C000006400000080003 wip.www.nlnetlabs.nl. 3600 IN NSEC xmpp.nlnetlabs.nl. A AAAA RRSIG NSEC 04786D7070096E6C6E65746C616273026E6C0000010001000027D80004D59AE094 xmpp.nlnetlabs.nl. 10200 IN A 213.154.224.148 04786D7070096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00A7EC3326691FB7DEAF4F0D5B935BCA8797363807108784E43CFC299DF5A062C8B67A10BB7A8D35E42C32F33A2AB46811FB653D5A049303078858AAB29DAE3270FCE09ECD86105C0196CBFF8363051D847ACDC64B9DABDC2AB82B133B813B9D6D77BC023E7141F21410A16C60F9C6D1260398C248ED54F1D2EE0B981B42C8834C xmpp.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. p+wzJmkft96vTw1bk1vKh5c2OAcQh4TkPPwpnfWgYsi2ehC7eo015Cwy8zoqtGgR+2U9WgSTAweIWKqyna4ycPzgns2GEFwBlsv/g2MFHYR6zcZLnavcKrgrEzuBO51td7wCPnFB8hQQoWxg+cbRJgOYwkjtVPHS7guYG0LIg0w= ;{id = 42393} 04786D7070096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00CBD87CE9D1CBF0A0C2946B5C2F6D24EF4614201E5B96763A6DB642A3E5056E7A02170C49577F3C75047E3BF4249B71DC37F7AAAAA8AD1EBF6B38F6EC254B83749E13881CE3617EF571102F19C125FDC4E6249DA1CE32836140C8D64CE7DFC958D8C8E1C916A38806E55E2E82C88B54A19638A90CDADDC67AF6FFA30A676678C9 xmpp.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. y9h86dHL8KDClGtcL20k70YUIB5blnY6bbZCo+UFbnoCFwxJV388dQR+O/Qkm3HcN/eqqqitHr9rOPbsJUuDdJ4TiBzjYX71cRAvGcEl/cTmJJ2hzjKDYUDI1kzn38lY2MjhyRajiAblXi6CyItUoZY4qQza3cZ69v+jCmdmeMk= ;{id = 42393} 04786D7070096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C004C6245487AADE535AC18F46098479595C3DEC57CB50B4E0A9DFD56FCFABBB9090212B867D51BA4D797F3781844CF4C135F86F4FD997226B0F36623105E7B2653BE0F8C1D3ADB2D2B5C5DAB6D4F3397994AD5B05675A2EB019F341A48FAD7175B9992B5D4B6BAED4F2D1DAC3E0F3FECC3A131FDF1C21B6633C517A4A279695187 xmpp.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. TGJFSHqt5TWsGPRgmEeVlcPexXy1C04Knf1W/Pq7uQkCErhn1Ruk15fzeBhEz0wTX4b0/ZlyJrDzZiMQXnsmU74PjB062y0rXF2rbU8zl5lK1bBWdaLrAZ80Gkj61xdbmZK11La67U8tHaw+Dz/sw6Ex/fHCG2YzxRekonlpUYc= ;{id = 42393} 04786D7070096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C005E6BBE6733A41B4577B8EFC9E3D04C9CE7631164659D84CF271F2C5B7FDECBDF260226C94F589AFAD4BCA1FD66C8311ED69F6BBA0E6948B62D352155E750FEFB1CA26B8D75725282B2E39C15E6A0F9FB0AFB2D696F8972D91C8ECCC671453C7A268593B40DD1248496F41BB1F6F135F55DD4633EE330A7EA70FAA36E244B1046 xmpp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. Xmu+ZzOkG0V3uO/J49BMnOdjEWRlnYTPJx8sW3/ey98mAibJT1ia+tS8of1myDEe1p9rug5pSLYtNSFV51D++xyia411clKCsuOcFeag+fsK+y1pb4ly2RyOzMZxRTx6JoWTtA3RJISW9Bux9vE19V3UYz7jMKfqcPqjbiRLEEY= ;{id = 42393} 04786D7070096E6C6E65746C616273026E6C00001C0001000027D80010200107B802060001B0EF003000000000 xmpp.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:30:: 04786D7070096E6C6E65746C616273026E6C00002C0001000027D80016010144278B2B38155946ACAA742191D802592FE5D974 xmpp.nlnetlabs.nl. 10200 IN SSHFP 1 1 44278B2B38155946ACAA742191D802592FE5D974 04786D7070096E6C6E65746C616273026E6C00002C0001000027D80016020164C62234F12768515F5EA1312FA04AEEF2C21B5E xmpp.nlnetlabs.nl. 10200 IN SSHFP 2 1 64C62234F12768515F5EA1312FA04AEEF2C21B5E 04786D7070096E6C6E65746C616273026E6C00002C0001000027D800160301FDE976561F905F1DA58E8C8CA8D7F6884D115A67 xmpp.nlnetlabs.nl. 10200 IN SSHFP 3 1 FDE976561F905F1DA58E8C8CA8D7F6884D115A67 04786D7070096E6C6E65746C616273026E6C00002F000100000E10001C05796F62726F096E6C6E65746C616273026E6C00000640000008000B xmpp.nlnetlabs.nl. 3600 IN NSEC yobro.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 05796F62726F096E6C6E65746C616273026E6C0000010001000027D80004D59AE035 yobro.nlnetlabs.nl. 10200 IN A 213.154.224.53 05796F62726F096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00C389A991EE82211E79C5A42A31B340FC534416CD650A57BB722ED21198C745AA6F5935461A73B7EED003E328141DC77F2C540B25A55B03ACA2A4F0A0223A26C201D474369496C2499879E418305B19B39958AD31D2E3E1DCEFA348FD1AF9D1B16AD0DAE89D7886DD9394385DB155C205CB29C4B1AE7104AB33D9E8138C2DA8DC yobro.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. w4mpke6CIR55xaQqMbNA/FNEFs1lCle7ci7SEZjHRapvWTVGGnO37tAD4ygUHcd/LFQLJaVbA6yipPCgIjomwgHUdDaUlsJJmHnkGDBbGbOZWK0x0uPh3O+jSP0a+dGxatDa6J14ht2TlDhdsVXCBcspxLGucQSrM9noE4wtqNw= ;{id = 42393} 05796F62726F096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00967AD6883872197A92243D8A23871CADCB2303F20F470A09074B040E48C5420A73AFE715E25CBF664F9654FECD5A242D1966273A8428EA7567B3E41ADD5D8101D6E3894CE1D9CE40F1D3F11AF9F7FD35CB41D6940FABBF92C4CF505053A2C60D5719332617C2795E80409872E8CD6630F1AE0B33C0E3589D890881C1350756CA yobro.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. lnrWiDhyGXqSJD2KI4ccrcsjA/IPRwoJB0sEDkjFQgpzr+cV4ly/Zk+WVP7NWiQtGWYnOoQo6nVns+Qa3V2BAdbjiUzh2c5A8dPxGvn3/TXLQdaUD6u/ksTPUFBTosYNVxkzJhfCeV6AQJhy6M1mMPGuCzPA41idiQiBwTUHVso= ;{id = 42393} 05796F62726F096E6C6E65746C616273026E6C00002F000100000E10001C057A61726961096E6C6E65746C616273026E6C000006400000000003 yobro.nlnetlabs.nl. 3600 IN NSEC zaria.nlnetlabs.nl. A RRSIG NSEC 057A61726961096E6C6E65746C616273026E6C0000010001000027D80004D59AE0D4 zaria.nlnetlabs.nl. 10200 IN A 213.154.224.212 057A61726961096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00009896E1DDC115DF362FBA581F3D780A059D12AB7C84FE6F3490B502E50BF19DC67183AE49417CA8A25E218E2FD5EA0912B80EEF82513803D86BF28B40B2759C433C25582BF470760FE0824869B00FBF6FCFB60505E19EC63A0A73D9DEC820B2FBE15A9B023959B097CF64BA21C761D3ED73FAAD2650155A6E54ACE68BBDC3F5 zaria.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. AJiW4d3BFd82L7pYHz14CgWdEqt8hP5vNJC1AuUL8Z3GcYOuSUF8qKJeIY4v1eoJErgO74JROAPYa/KLQLJ1nEM8JVgr9HB2D+CCSGmwD79vz7YFBeGexjoKc9neyCCy++FamwI5WbCXz2S6Icdh0+1z+q0mUBVablSs5ou9w/U= ;{id = 42393} 057A61726961096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0001F5D931C4E4BBAC6394C518DB620525371927C18D13703083FFECFA776DD17C022D0CDCA6F8979CEBA1C9AEA0569AE9168C3A5DD07565A6BC82F3B503D0D714FDA6CF803FFB0A7753CF2E4B95344976E35AE7D630AF49AC464A5324BFA985FFA4B7D7218D5EE2333E7655A5DFF1966D6C1589F19B3BF8068FB8F3F897D6A964 zaria.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. AfXZMcTku6xjlMUY22IFJTcZJ8GNE3Awg//s+ndt0XwCLQzcpviXnOuhya6gVprpFow6XdB1Zaa8gvO1A9DXFP2mz4A/+wp3U88uS5U0SXbjWufWMK9JrEZKUyS/qYX/pLfXIY1e4jM+dlWl3/GWbWwVifGbO/gGj7jz+JfWqWQ= ;{id = 42393} 057A61726961096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00B7055014C664F52CA75356E9D00FE923322EA52E66D4CB3D5952A451D55CF0DA164CE42AF2EC8601B035846E9E3F9C00F2C40A194BF57D535E4E94F3AE290B5D10C0E936A87FEEAE53F24F4164AE02BD189074E5ADAB9EE9E48E3C574A2A5CEA6107AEFF7301FF30B0B176BD53FF1EC23EBA458080E5E30415FDA92790B21475 zaria.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. twVQFMZk9SynU1bp0A/pIzIupS5m1Ms9WVKkUdVc8NoWTOQq8uyGAbA1hG6eP5wA8sQKGUv1fVNeTpTzrikLXRDA6Taof+6uU/JPQWSuAr0YkHTlraue6eSOPFdKKlzqYQeu/3MB/zCwsXa9U/8ewj66RYCA5eMEFf2pJ5CyFHU= ;{id = 42393} 057A61726961096E6C6E65746C616273026E6C00002C0001000027D800160101A440F57393E55A79BD3EB97D71CBA914C15F9DC2 zaria.nlnetlabs.nl. 10200 IN SSHFP 1 1 A440F57393E55A79BD3EB97D71CBA914C15F9DC2 057A61726961096E6C6E65746C616273026E6C00002C0001000027D800160201A5D6C312388F9CDABC3D550084D41C1471C1ECF2 zaria.nlnetlabs.nl. 10200 IN SSHFP 2 1 A5D6C312388F9CDABC3D550084D41C1471C1ECF2 057A61726961096E6C6E65746C616273026E6C00002F000100000E10001A037A697A096E6C6E65746C616273026E6C00000640000000000B zaria.nlnetlabs.nl. 3600 IN NSEC ziz.nlnetlabs.nl. A SSHFP RRSIG NSEC 037A697A096E6C6E65746C616273026E6C0000010001000027D80004D59AE01B ziz.nlnetlabs.nl. 10200 IN A 213.154.224.27 037A697A096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0099A61AE8F080FB6B9ACF74084B585851F8D6F96CCD7708BA7F88ADB5BEB5D4F98F9CEF554E5E53455BCC81CF58F1F10A3CD4CF2BF8A6FEA8DC0215D548423CA064745B0EA6A28A2563D97A78174EE43DCDA1B9EFF7C899AA9593B9A04E6D38827EC24A9923D48F9AD89FEC783A5FCDE78638C5F3EE42A1FCB82C58E8F3B46872 ziz.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. maYa6PCA+2uaz3QIS1hYUfjW+WzNdwi6f4ittb611PmPnO9VTl5TRVvMgc9Y8fEKPNTPK/im/qjcAhXVSEI8oGR0Ww6mooolY9l6eBdO5D3Nobnv98iZqpWTuaBObTiCfsJKmSPUj5rYn+x4Ol/N54Y4xfPuQqH8uCxY6PO0aHI= ;{id = 42393} 037A697A096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0016262D58A85CC922663DFFCF55DFD460A25E01C7EB54391156ADB107136BE7F0061080EE870962B1389D53DA37ED3CDBA610651BAC56376BCA8FE71E98929B3035738D4C618ED9C9AF122C83779D77964EA6411F5A6073200F61E818565A7160575DBD205B75A23295E70DD40375AD75E2490BEC3099E4D4053972038E8A0686 ziz.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. FiYtWKhcySJmPf/PVd/UYKJeAcfrVDkRVq2xBxNr5/AGEIDuhwlisTidU9o37TzbphBlG6xWN2vKj+cemJKbMDVzjUxhjtnJrxIsg3edd5ZOpkEfWmBzIA9h6BhWWnFgV129IFt1ojKV5w3UA3WtdeJJC+wwmeTUBTlyA46KBoY= ;{id = 42393} 037A697A096E6C6E65746C616273026E6C00002E0001000027D800A0002C0803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C00C8AD6468F6674B674DB4F14589EFAF2FC9B4CF0D05DBB7210EC51032D1838A2E882BF9BD0323468A0CFF9A8ADBE6ED22DAD8CCFDE3C2C53D8B3D738C42F628F2D58DCAC2064553E97380F07AF4957C23B3C6955F4013AFA16A2DB38F14D4F91E4C334B3669EE44831A71A472C90566FB3DF99CBCF47168546B266597542D3F77 ziz.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. yK1kaPZnS2dNtPFFie+vL8m0zw0F27chDsUQMtGDii6IK/m9AyNGigz/morb5u0i2tjM/ePCxT2LPXOMQvYo8tWNysIGRVPpc4DwevSVfCOzxpVfQBOvoWots48U1PkeTDNLNmnuRIMacaRyyQVm+z35nLz0cWhUayZll1QtP3c= ;{id = 42393} 037A697A096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C00C5F5096D2D0E7EA452F44B275D519613EE46F71DEFA24A5C49302A239656E7024DAE10AB2A717BDEE5A3314C58B3469CFDB477252A029B2B5783B861247E862E4C2847C62F2F7946B2AC9E6D7A98ABC8F96551195A49E133DB6AED6D21E7714C565FF3D2BF8DCFCA10A1A69807D9A33A9ED2250A6593DE19B45446B5D9EE5869 ziz.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. xfUJbS0OfqRS9EsnXVGWE+5G9x3vokpcSTAqI5ZW5wJNrhCrKnF73uWjMUxYs0ac/bR3JSoCmytXg7hhJH6GLkwoR8YvL3lGsqyebXqYq8j5ZVEZWknhM9tq7W0h53FMVl/z0r+Nz8oQoaaYB9mjOp7SJQplk94ZtFRGtdnuWGk= ;{id = 42393} 037A697A096E6C6E65746C616273026E6C00001C0001000027D80010200107B80206000102144FFFFE3B655F ziz.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:214:4fff:fe3b:655f 037A697A096E6C6E65746C616273026E6C00002C0001000027D8001601010C7080A7A7E931F4B22FB937E10FB8BFFF42F49B ziz.nlnetlabs.nl. 10200 IN SSHFP 1 1 0C7080A7A7E931F4B22FB937E10FB8BFFF42F49B 037A697A096E6C6E65746C616273026E6C00002C0001000027D80016020179A780A6DBD2F1217CCE21B02A35CAF0E0481C55 ziz.nlnetlabs.nl. 10200 IN SSHFP 2 1 79A780A6DBD2F1217CCE21B02A35CAF0E0481C55 037A697A096E6C6E65746C616273026E6C00002F000100000E10001F087A6F696462657267096E6C6E65746C616273026E6C00000640000008000B ziz.nlnetlabs.nl. 3600 IN NSEC zoidberg.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC 087A6F696462657267096E6C6E65746C616273026E6C0000010001000027D80004D59AE012 zoidberg.nlnetlabs.nl. 10200 IN A 213.154.224.18 087A6F696462657267096E6C6E65746C616273026E6C00002E0001000027D800A000010803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C003FAF7E289FF9D4BCCA48E3377486BAB1543F99FEDCD000C5CE373B8F90311D26FDCF295B54377F7915E9C25D5D9115D133C943CE02F70EEFB44F6DF5AABC52366B7D2A4F8783D7C786B9B2135FBB734CDC3E9B4BBD136339B65F95453B1FFAC78479D2FEA0D13BB5CC3797A4763E7FA62B29721E4BF6120C584658F66B81FD39 zoidberg.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. P69+KJ/51LzKSOM3dIa6sVQ/mf7c0ADFzjc7j5AxHSb9zylbVDd/eRXpwl1dkRXRM8lDzgL3Du+0T231qrxSNmt9Kk+Hg9fHhrmyE1+7c0zcPptLvRNjObZflUU7H/rHhHnS/qDRO7XMN5ekdj5/pispch5L9hIMWEZY9muB/Tk= ;{id = 42393} 087A6F696462657267096E6C6E65746C616273026E6C00002E0001000027D800A0001C0803000027D8530B29F652E63FF6A599096E6C6E65746C616273026E6C0041D1C267DD6F0FE18C044956C07949348F70AFB67B8AC5D185C424723041D66B1296B08D3FB74C8B562F20AFB74E12B3BF3157C249E39AC1F4D6311785F0D33E352C024D5C17331CBF80BCE11172424773F8131CBB5577972BE917C8A99DFCE2D5C80E28D1DD1D5B619B1E890893B8C1DA1F6E55A43787E70D416276B7D51B8E zoidberg.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. QdHCZ91vD+GMBElWwHlJNI9wr7Z7isXRhcQkcjBB1msSlrCNP7dMi1YvIK+3ThKzvzFXwknjmsH01jEXhfDTPjUsAk1cFzMcv4C84RFyQkdz+BMcu1V3lyvpF8ipnfzi1cgOKNHdHVthmx6JCJO4wdofblWkN4fnDUFidrfVG44= ;{id = 42393} 087A6F696462657267096E6C6E65746C616273026E6C00002E000100000E1000A0002F080300000E10530B29F652E63FF6A599096E6C6E65746C616273026E6C002246030CAA0386F75632A50108FA87DF4B0AA12161DCAD6CE87DD0B94C6BDE41C864876775CA1B0AAFAD85FAC6695FCABD5B65385459B0C1E88C978843B440867FB2C43BEB1ABC608813AF530A30E7337073723A314595EA81960D385439B7BF747AF2BA61E09E011507BCDEBC1670B255E91BE9ECA3161BC0F4D34E8B6DD97C zoidberg.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. IkYDDKoDhvdWMqUBCPqH30sKoSFh3K1s6H3QuUxr3kHIZIdndcobCq+thfrGaV/KvVtlOFRZsMHojJeIQ7RAhn+yxDvrGrxgiBOvUwow5zNwc3I6MUWV6oGWDThUObe/dHryumHgngEVB7zevBZwslXpG+nsoxYbwPTTTott2Xw= ;{id = 42393} 087A6F696462657267096E6C6E65746C616273026E6C00001C0001000027D80010200107B8020600010219D1FFFEB185E8 zoidberg.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:219:d1ff:feb1:85e8 087A6F696462657267096E6C6E65746C616273026E6C00002F000100000E100016096E6C6E65746C616273026E6C000006400000080003 zoidberg.nlnetlabs.nl. 3600 IN NSEC nlnetlabs.nl. A AAAA RRSIG NSEC 096E6C6E65746C616273026E6C0000060001000027D80040046F70656E096E6C6E65746C616273026E6C000A686F73746D6173746572096E6C6E65746C616273026E6C00780B651C0000708000001C2000093A8000000E10 nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. 2014012700 28800 7200 604800 3600 unbound-1.13.1/testdata/autotrust_rollalgo_unknown.rpl0000644000175000017500000003167614010434640022770 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with algorithm rollover to unknown algo ; from RSASHA1(5) to 'unknown' (157) ; 157 is really the algocode for HMACMD5, which is not used for DNSSEC. ; the signatures are made with a DSA key (02855) but the algorithm is ; edited (afterwards) to be 157. So the RRSIGs do not verify. ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 02855 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 157 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; and two ZSKs (omitted) for both algorithms. ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. Wp40P+Odx5gh1Zpjwa1YBwwKnqhobPSkv55sEb21vvKpLE2NNt7B6vZqRLg+bBiW0T/vRdo4w+7whKANVuPrtA== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 157 2 10800 20091024111500 20090921111500 2855 example.com. AKdhmjqEbe0STsFNq/UxOidElaWHWCy2hSPQ7oN0Tsq56w6Hsk72PpM= ;{id = 2855} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 02855 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 157 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. FXY4N99Udr/2Q+9oU4Dil9B8XQCBcaU0NlqJ9HnwZoLqzKiPhtxNlldU2Ab5TmuXfnkTT1bTYvsq5Dz6P3ezbw== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 157 2 10800 20091124111500 20091018111500 2855 example.com. ABJyZ97htJyBFk5wsKml3YAz81FpXkQKdJeC++fB5ysvl3i+zKJFzTo= ;{id = 2855} ENTRY_END RANGE_END ; ns.example.com. KSK 55582-REVOKED and 02855 RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 157 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. w5hXwGyeLHWTzdStx4yjB7LNzt86u9A+Qpl3rtQlTKN/qkWIT+Hxa3M32P6jhFTpf+Iq1K9T06mKM21L3TQAOg== ;{id = 55710} example.com. 10800 IN RRSIG DNSKEY 157 2 10800 20091224111500 20091118111500 2855 example.com. AFAbqLJsTDBfwAipE84ETdFTfzKHs7pzdyzjTKHR2VXygGvHY4QsBaA= ;{id = 2855} ; wrong keytag: 55582 ENTRY_END RANGE_END ; ns.example.com. KSK 02855 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 157 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2855 (ksk), size = 1688b} ; signatures example.com. 10800 IN RRSIG DNSKEY 157 2 10800 20101224111500 20101118111500 2855 example.com. AJv9ujre3iUykHlhJpLYPqsXq12lmQp+AHUPSPpE5zuUhXAPjbnbewk= ;{id = 2855} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${10*24*3600} STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t3} ;;${ctime $t3} ;;last_success: ${$t3} ;;${ctime $t3} ;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 11 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${11*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} ; no more timeout STEP 54 ASSIGN probe5 = ${range 0 ${timeout} 0} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;REVOKED ; The zone has all keys revoked, and is ; considered as if it has no trust anchors. ; the remainder of the file is the last probe. ; to restart the trust anchor, overwrite this file. ; with one containing valid DNSKEYs or DSes. ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: 0 ;;${ctime 0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, the old key is removed from storage STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 0 ${timeout} 0} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;REVOKED ; The zone has all keys revoked, and is ; considered as if it has no trust anchors. ; the remainder of the file is the last probe. ; to restart the trust anchor, overwrite this file. ; with one containing valid DNSKEYs or DSes. ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: 0 ;;${ctime 0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_cname_sub.rpl0000644000175000017500000002316314010434640021125 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 wildcard CNAME to subzone. ; to test the zone determination routines in nsec3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ;from *.example.com. IN CNAME www.sub.example.com. www.example.com. IN CNAME www.sub.example.com. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCjVxqOi0bcgHgxVkwzJqIi6iNJswIUZxbmItvoyEczTclgVtHsr9Jmf+w= ;{id = 2854} SECTION AUTHORITY ; cover qname next closer name. ; H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3. s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN SOA ns.sub.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 sub.example.com. 3600 IN RRSIG SOA 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBLls0z0ncWxTXzDt4uLAuJsr932AhQvVeUJevgwAL6mfmLL6fAf2IZ7mg== ;{id = 2854} ; closest encloser, H(sub.example.com). = 8r1f0ieoutlnjc03meng9e3bn2n0o9pd 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd SOA NS MX RRSIG 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBX1qVlth+YE+y57p5C7X00bLthDAhRIF2xoHF0exs29obE7JjVthwXfHA== ;{id = 2854} ; wildcard denial, H(*.sub.example.com.) = hq432j8q183b54mejh50200pqo8rvlog hq432j8q183b54mejh50200pqo7rvlog.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd hq432j8q183b54mejh50200pqo9rvlog A RRSIG hq432j8q183b54mejh50200pqo7rvlog.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFAOXoeUk1d0cxT9p1gUvBrybAQCSAhQ5eLWaK932TxxY4U6NAxgst4O4uA== ;{id = 2854} ; next closer denial H(www.sub.example.com.) = ecllopkacmb753v6jlld4d371l1u8gme ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd ecllopkacmb753v6jlld4d371l1u9gme A RRSIG ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFAuD3qb/+CWyqjBRt/RDjZvsSyCGAhQivfP3zr1+2Uknw9RhXUcUO0g6Lg== ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.sub.example.com. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCjVxqOi0bcgHgxVkwzJqIi6iNJswIUZxbmItvoyEczTclgVtHsr9Jmf+w= ;{id = 2854} SECTION AUTHORITY SECTION AUTHORITY s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} sub.example.com. IN SOA ns.sub.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 sub.example.com. 3600 IN RRSIG SOA 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBLls0z0ncWxTXzDt4uLAuJsr932AhQvVeUJevgwAL6mfmLL6fAf2IZ7mg== ;{id = 2854} 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd SOA NS MX RRSIG 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBX1qVlth+YE+y57p5C7X00bLthDAhRIF2xoHF0exs29obE7JjVthwXfHA== ;{id = 2854} hq432j8q183b54mejh50200pqo7rvlog.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd hq432j8q183b54mejh50200pqo9rvlog A RRSIG hq432j8q183b54mejh50200pqo7rvlog.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFAOXoeUk1d0cxT9p1gUvBrybAQCSAhQ5eLWaK932TxxY4U6NAxgst4O4uA== ;{id = 2854} ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd ecllopkacmb753v6jlld4d371l1u9gme A RRSIG ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFAuD3qb/+CWyqjBRt/RDjZvsSyCGAhQivfP3zr1+2Uknw9RhXUcUO0g6Lg== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_wcany.rpl0000644000175000017500000001373214010434640020313 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 wildcard qtype ANY response. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN ANY SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN ANY SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN ANY SECTION ANSWER ; *.example.com. IN A 1.2.3.123 ; *.example.com. IN AAAA ::5 ; *.example.com. IN MX 10 mail.example.com. www.example.com. 3600 IN MX 10 mail.example.com. www.example.com. 3600 IN RRSIG MX 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFBncNdBkFSOTvqF7RtZ4bZuojWF8AhQlEv7Iw8BpQ7YkZQidRDJdx+BrGw== ;{id = 2854} www.example.com. 3600 IN AAAA ::5 www.example.com. 3600 IN RRSIG AAAA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFCWSH0WGURY1mQwpL08SN1XF9p39AhUAgwbFk0frQC62UxhNfn4pu7iq8q4= ;{id = 2854} www.example.com. 3600 IN A 1.2.3.123 www.example.com. 3600 IN RRSIG A 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFCypz6dZfecwPbJ3BKrXEA7jw5kkAhRz1vprGL0idsKos8szoybKXe17Jw== ;{id = 2854} SECTION AUTHORITY ; next closer name, H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3. s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN ANY ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN ANY SECTION ANSWER www.example.com. 3600 IN MX 10 mail.example.com. www.example.com. 3600 IN RRSIG MX 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFBncNdBkFSOTvqF7RtZ4bZuojWF8AhQlEv7Iw8BpQ7YkZQidRDJdx+BrGw== ;{id = 2854} www.example.com. 3600 IN AAAA ::5 www.example.com. 3600 IN RRSIG AAAA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFCWSH0WGURY1mQwpL08SN1XF9p39AhUAgwbFk0frQC62UxhNfn4pu7iq8q4= ;{id = 2854} www.example.com. 3600 IN A 1.2.3.123 www.example.com. 3600 IN RRSIG A 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFCypz6dZfecwPbJ3BKrXEA7jw5kkAhRz1vprGL0idsKos8szoybKXe17Jw== ;{id = 2854} SECTION AUTHORITY s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_entds.rpl0000644000175000017500000002213114010434640017205 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with lots of ENTs in the chain of trust ; query is for a.1.2.b.3.4.c.5.6.example.com. ; labels 1-6 are empty nonterminals. ; there are DNSKEYs at labels b, c, example.com. ; and DSes at b and c. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for ENT DS queries. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION 6.example.com. IN DS SECTION AUTHORITY example.com. NSEC c.5.6.example.com. SOA DNSKEY NS RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCoocKDsR+Hius4e+5zJPlXeeWNowIUO+pa14FBcWH/dCNK5R0vRrlWY5s= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION 5.6.example.com. IN DS SECTION AUTHORITY example.com. NSEC c.5.6.example.com. SOA DNSKEY NS RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCoocKDsR+Hius4e+5zJPlXeeWNowIUO+pa14FBcWH/dCNK5R0vRrlWY5s= ;{id = 2854} ENTRY_END ; response for query in question - delegation ; and all other queries, receive a delegation to c.5.6.example.com. ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.1.2.b.3.4.c.5.6.example.com. IN A SECTION ANSWER SECTION AUTHORITY c.5.6.example.com. IN NS ns.c.5.6.example.com. c.5.6.example.com. 3600 IN DS 2854 3 1 4449f16fa7d712283aa43cc8dcc8e07c05856e08 c.5.6.example.com. 3600 IN RRSIG DS 3 5 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCgiF7eFL89mSqjUPEpQuL5QEa1OgIUWdfUmMkwVBwOgmxlxZIKfGs5od0= ;{id = 2854} SECTION ADDITIONAL ns.c.5.6.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.c.5.6.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION c.5.6.example.com. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION c.5.6.example.com. IN DNSKEY SECTION ANSWER c.5.6.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} c.5.6.example.com. 3600 IN RRSIG DNSKEY 3 5 3600 20070926134150 20070829134150 2854 c.5.6.example.com. MC0CFHsYd4tGO5BotXFzG9d8fzHkX576AhUAoZ2d1FNUBsrwxl6XSz/hoxme/4Q= ;{id = 2854} ENTRY_END ; response to DS queries. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION 4.c.5.6.example.com. IN DS SECTION AUTHORITY 3.c.5.6.example.com. IN NSEC b.3.4.c.5.6.example.com. NS DS RRSIG NSEC 3.c.5.6.example.com. 3600 IN RRSIG NSEC 3 6 3600 20070926134150 20070829134150 2854 c.5.6.example.com. MCwCFFFF5WwGibkPunDt0BW2W9lncACcAhQuFh7FbfCE1ulJqBFf1YxjvT/WHQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION 3.4.c.5.6.example.com. IN DS SECTION AUTHORITY 3.c.5.6.example.com. IN NSEC b.3.4.c.5.6.example.com. NS DS RRSIG NSEC 3.c.5.6.example.com. 3600 IN RRSIG NSEC 3 6 3600 20070926134150 20070829134150 2854 c.5.6.example.com. MCwCFFFF5WwGibkPunDt0BW2W9lncACcAhQuFh7FbfCE1ulJqBFf1YxjvT/WHQ== ;{id = 2854} ENTRY_END ; any other query gets a referral ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY AA QR NOERROR SECTION QUESTION 4.c.5.6.example.com. IN DS SECTION AUTHORITY b.3.4.c.5.6.example.com. IN NS ns.b.3.4.c.5.6.example.com. b.3.4.c.5.6.example.com. 3600 IN DS 30899 5 1 849ebbdefa338db3e6c3ddffd58851523ba701de b.3.4.c.5.6.example.com. 3600 IN RRSIG DS 3 8 3600 20070926134150 20070829134150 2854 c.5.6.example.com. MC0CFEuXbvClpAOx7E1SXeH0d+Q4jpySAhUAtbEbQ8qtRF5chUOWNtg31ESAjWg= ;{id = 2854} SECTION ADDITIONAL ns.b.3.4.c.5.6.example.com. IN A 1.2.3.7 ENTRY_END RANGE_END ; ns.b.3.4.c.5.6.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION b.3.4.c.5.6.example.com. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION b.3.4.c.5.6.example.com. IN DNSKEY SECTION ANSWER b.3.4.c.5.6.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} b.3.4.c.5.6.example.com. 3600 IN RRSIG DNSKEY 5 8 3600 20070926134150 20070829134150 30899 b.3.4.c.5.6.example.com. KNftlGVkrfvo3l3Wliq+i695MqJI9B8QnTVhCHKhFPZfEq0HCxV8gO3ZlaTUle1YEnr7+yXUritXlzjFOlf1hw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.1.2.b.3.4.c.5.6.example.com. IN A SECTION ANSWER a.1.2.b.3.4.c.5.6.example.com. IN A 11.11.11.11 a.1.2.b.3.4.c.5.6.example.com. 3600 IN RRSIG A 5 11 3600 20070926134150 20070829134150 30899 b.3.4.c.5.6.example.com. GUZcUHhxAvc6FYwAzVJcTqsjz5L36bGA45dyeSupEGEhhUJj0wm/FaYCAlO8J+H2zcFEqbgK0KzHdrFmNHkgUQ== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.1.2.b.3.4.c.5.6.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION a.1.2.b.3.4.c.5.6.example.com. IN A SECTION ANSWER a.1.2.b.3.4.c.5.6.example.com. 3600 IN A 11.11.11.11 a.1.2.b.3.4.c.5.6.example.com. 3600 IN RRSIG A 5 11 3600 20070926134150 20070829134150 30899 b.3.4.c.5.6.example.com. GUZcUHhxAvc6FYwAzVJcTqsjz5L36bGA45dyeSupEGEhhUJj0wm/FaYCAlO8J+H2zcFEqbgK0KzHdrFmNHkgUQ== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/nsid_ascii.rpl0000644000175000017500000000161514010434640017337 0ustar wouterwouter; config options server: nsid: "ascii_hopsa kidee" stub-zone: name: "example." stub-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test EDNS string tag option RANGE_BEGIN 0 1000 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN A SECTION ANSWER example. IN A 198.51.100.1 SECTION ADDITIONAL ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 03 ; Opcode NSID (3) 00 00 ; Length 0 HEX_EDNSDATA_END ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION example. IN A SECTION ANSWER example. IN A 198.51.100.1 SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 03 ; Opcode NSID (3) 00 0b ; Length 11 68 6F 70 73 61 20 ; "hopsa " 6B 69 64 65 65 ; "kidee" HEX_EDNSDATA_END ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_nods_soa.rpl0000644000175000017500000002004114010434640020766 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 with no DS referral abuse of apex. ; abusing subzone apex NSEC3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION ns.example.com. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS SOA DNSKEY RRSIG 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC4CFQCeKcyw76yvOvfa2+qtxv8bKcEyJwIVAJBeIGST4Y8Tk8YkQI0suee3Bxb1 ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS SOA DNSKEY RRSIG 8r1f0ieoutlnjc03meng9e3bn2n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC4CFQCeKcyw76yvOvfa2+qtxv8bKcEyJwIVAJBeIGST4Y8Tk8YkQI0suee3Bxb1 ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ctrl_pipe.tdir/0000755000175000017500000000000014010434640017432 5ustar wouterwouterunbound-1.13.1/testdata/ctrl_pipe.tdir/bad_server.pem0000644000175000017500000000115314010434640022251 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++ DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_pipe.tdir/bad_server.key0000644000175000017500000000156714010434640022271 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC9hurNHBtB7QFEuPJOnCylUWUF2/US3v9yQQQXnstuXMQXRaq1 1uviLmwaGurV9tngX59HITsBT74NQrtFKfEDLViLrm2arAM9Ozsn4tnv30HXPRDj UOc1M05Q7UzjaSrOv+TkPEqyhtUyaP1DYo0bcmbxtSkYc2ZEWCwhPklUwQIDAQAB AoGATjzZxN4ramWaNnJapJTX4U7eczK/0pB3xwSL2exVcjOdRzYdKH+WVIJxYb1m 3/jNLFCNAeH356yxeevoPr73nG75YJ9I1ZWQWTnS3SDK6JD1+3pmAD0bQWFoitpf FoSH9H4X5gFB5vCZ99YVoYH1UXWPcgvUHwxz0voImt6lCKECQQD4YQ4A3M0+Ki8v Hl+5FKULnS0UtBkweCvkF/X1zZRjjYr6hLnqldFkkgTBKWe17pUXX0nwRMbP1YZX i+vDq5JNAkEAw1eYsmC0nVAMawo57N6LYavGv/n5u1cvpTpKDtn4cXH0Uqq13Kyu 2FUTzan2NhCEK78UzbWaeewBJmxYda1+RQJAdShKk6uTAEyjnwUjv8h2JWlJN2fQ LeWxRlDrCruiz+aW9J4gl/99GoQpy/c83TshhjnDRZsbcDNWv/rXBZ/rTQJAFQva CtX6f7yBKgM3DHtJvyM3zbVMH9Ab9QxbsE/xwZ9KeKGl6Hm+eNZpxM3cFiUfaGs0 /ZjkZOB1m0MvILaplQJAXC3PJ/E+87banGZRJl5qtS6/HoX5lH9TPkL8Essy7ANO 2BT2OTQawD1A+VKIrQHXs085Of8tQUfrfHHt7s3Kqg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ctrl_pipe.tdir/bad_control.key0000644000175000017500000000156714010434640022443 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDti51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4G SLOE02/hKDkdkOvaUG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtO DWc3tXPT1IlSEN0xnAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQAB AoGAG3w/DatfMCu/nS5OdQx9BSqPgNbnUSqux9xA0fhgPTlN0T3oRtPcqa7JUDUW PryI/a62ry+zGkw98N2AxolCZg3N7Z3vuRx2FMcKKNwpTzDmcZW7TmMk5FPof6gE PnYl/ff0w+kxqA+L2EexH3Xi6ApLSZcjyzKWj+dL2AuT9gkCQQD3dPitwITxgCAD IaHw23e3FRkM/hw1Gp8bt6nbuxitVxxpO96q1EQ+fCy/mf0bMEJDp3xzMEIfP3r4 GmNbaxa1AkEA9b8LeBLbQ2cm2+UMeUgygBsRirdUQ786auqH38Jbvi/j6S9sDl2x q1vRtikEBZJWfkhsOzrzwFDKe1bI/EEn9wJAAzOwRA9JqRZPU7sLrWIpmmTbfh+L neRKSsGFoSI6n4ORCouLxgoZF/XjXldPvxpQwS9ZnOPy9xSLMsqknno0QQJAeDtA IT8Yh6GwIWWu9KeeDY8wxe1sDLlCm4yjbZZpzGMh3rSU6XJtuqjxsW3fydoO9zn3 ugLdvvnIFxAexUwbgQJBANyM13xcObfUJOj9rjlGCh0CDh/04ONl8SH8HBnM8guA RJI5S6vBHweVRopEZcF1sQm6wMf3ej/sGkyyNvJxRkY= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ctrl_pipe.tdir/ctrl_pipe.pre0000644000175000017500000000210614010434640022122 0ustar wouterwouter# #-- ctrl_pipe.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT ctrl_pipe.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file CONTROL_PATH=/tmp CONTROL_PID=$$ sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's?@PATH\@?'$CONTROL_PATH'?' -e 's/@PID@/'$CONTROL_PID'/' < ctrl_pipe.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test echo "CONTROL_PATH=$CONTROL_PATH" >> .tpkg.var.test echo "CONTROL_PID=$CONTROL_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/ctrl_pipe.tdir/ctrl_pipe.post0000644000175000017500000000071314010434640022323 0ustar wouterwouter# #-- ctrl_pipe.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID # it was stopped with unbound-control (if the test succeeded) kill $UNBOUND_PID >/dev/null 2>&1 kill $UNBOUND_PID >/dev/null 2>&1 rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID exit 0 unbound-1.13.1/testdata/ctrl_pipe.tdir/ctrl_pipe.conf0000644000175000017500000000100514010434640022256 0ustar wouterwouterserver: verbosity: 4 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no remote-control: control-enable: yes control-interface: @PATH@/controlpipe.@PID@ control-use-cert: no #server-key-file: "unbound_server.key" #server-cert-file: "unbound_server.pem" #control-key-file: "unbound_control.key" #control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/ctrl_pipe.tdir/unbound_server.key0000644000175000017500000000463314010434640023212 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ctrl_pipe.tdir/unbound_server.pem0000644000175000017500000000246614010434640023205 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_pipe.tdir/unbound_control.pem0000644000175000017500000000247614010434640023360 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_pipe.tdir/ctrl_pipe.testns0000644000175000017500000000050314010434640022653 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/ctrl_pipe.tdir/bad_control.pem0000644000175000017500000000116314010434640022424 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK 4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH 5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_pipe.tdir/ctrl_pipe.test0000644000175000017500000000227514010434640022322 0ustar wouterwouter# #-- ctrl_pipe.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # exit value is 1 on usage $PRE/unbound-control -c ub.conf status if test $? -ne 0; then echo "wrong exit value." cat fwd.log cat unbound.log exit 1 else echo "exit value: OK" fi $PRE/unbound-control -c ub.conf local_data froob.example.net A 192.0.2.1 if test $? -ne 0; then echo "wrong exit value." cat fwd.log cat unbound.log exit 1 else echo "exit value: OK" fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> dig froob.example.net." dig @127.0.0.1 -p $UNBOUND_PORT froob.example.net. | tee outfile echo "> check answer" if grep "192.0.2.1" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> cat logfiles" cat fwd.log cat unbound.log echo "> OK" exit 0 unbound-1.13.1/testdata/ctrl_pipe.tdir/unbound_control.key0000644000175000017500000000462714010434640023367 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ctrl_pipe.tdir/ctrl_pipe.dsc0000644000175000017500000000044614010434640022112 0ustar wouterwouterBaseName: ctrl_pipe Version: 1.0 Description: unix pipe test unbound-control CreationDate: Fri 16 Jan 13:25:48 CET 2015 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: ctrl_pipe.pre Post: ctrl_pipe.post Test: ctrl_pipe.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/local_typetransparent.rpl0000644000175000017500000000356014010434640021650 0ustar wouterwouter; config options ; The island of trust is at example.com server: local-zone: "example.com." typetransparent local-data: "mail.example.com. IN A 10.20.30.40" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test local data with typetransparent zone ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mail.example.com. IN MX SECTION ANSWER mail.example.com. IN MX 100 mail.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA 2001::1 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION mail.example.com. IN A ENTRY_END ; get straight answer from localdata STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA DO NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.40 SECTION AUTHORITY ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION mail.example.com. IN MX ENTRY_END ; get internet answer for other type. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION mail.example.com. IN MX SECTION ANSWER mail.example.com. IN MX 100 mail.example.com. ENTRY_END STEP 40 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN AAAA ENTRY_END ; get internet answer for other name. STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA 2001::1 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ldnsrr.c30000644000175000017500000101164114010434640017306 0ustar wouterwouter0C74797065732D7369676E6564027762087369646E6C616273026E6C000006000100015180003D036E7364087369646E6C616273026E6C000A686F73746D6173746572087369646E6C616273026E6C0077FD526100000E1000000258001BAF8000000E10 types-signed.wb.sidnlabs.nl. 86400 IN SOA nsd.sidnlabs.nl. hostmaster.sidnlabs.nl. 2013090401 3600 600 1814400 3600 0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010001518000AF000608040001518052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00152E7FD817AC8F7BF4CCB4866EC4B3B4B2F8F3E79F160A55003BCB511CDDE430B5333DD6F71E72203BC39A626CF28FFD13C7F408A15F080B0FEDD0727E3493B0D5E9F371D20B8801DCE26004628572F09D063A86E2535E665BD7DB9D74CF95ADE08F40A7EE31AE975BEC6C7E9CB7F2B19528CE83D7653B675D142BFDF5089523 types-signed.wb.sidnlabs.nl. 86400 IN RRSIG SOA 8 4 86400 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. FS5/2Besj3v0zLSGbsSztLL48+efFgpVADvLURzd5DC1Mz3W9x5yIDvDmmJs8o/9E8f0CKFfCAsP7dByfjSTsNXp83HSC4gB3OJgBGKFcvCdBjqG4lNeZlvX2510z5Wt4I9Ap+4xrpdb7Gx+nLfysZUozoPXZTtnXRQr/fUIlSM= ;{id = 62298} 0C74797065732D7369676E6564027762087369646E6C616273026E6C00000200010000003C0011036E7364087369646E6C616273026E6C00 types-signed.wb.sidnlabs.nl. 60 IN NS nsd.sidnlabs.nl. 0C74797065732D7369676E6564027762087369646E6C616273026E6C00000200010000003C0012046B6E6F74087369646E6C616273026E6C00 types-signed.wb.sidnlabs.nl. 60 IN NS knot.sidnlabs.nl. 0C74797065732D7369676E6564027762087369646E6C616273026E6C00000200010000003C0012046E736434087369646E6C616273026E6C00 types-signed.wb.sidnlabs.nl. 60 IN NS nsd4.sidnlabs.nl. 0C74797065732D7369676E6564027762087369646E6C616273026E6C00000200010000003C00130562696E6439087369646E6C616273026E6C00 types-signed.wb.sidnlabs.nl. 60 IN NS bind9.sidnlabs.nl. 0C74797065732D7369676E6564027762087369646E6C616273026E6C00000200010000003C00140662696E643130087369646E6C616273026E6C00 types-signed.wb.sidnlabs.nl. 60 IN NS bind10.sidnlabs.nl. 0C74797065732D7369676E6564027762087369646E6C616273026E6C00000200010000003C001608706F776572646E73087369646E6C616273026E6C00 types-signed.wb.sidnlabs.nl. 60 IN NS powerdns.sidnlabs.nl. 0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000208040000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BA3DA6143757B97248F9A847256745AA90DE9CB8773F6B247B333DDF70BE16968B2DCD782611C84E32F90A80219DA24622E0C901CFCFA1C08B825F9F16C1204454AF2BFB2FAB32C29334C0FB5C34E03EC97682A3E0D1649147B9AF259D0E76943EFA786F6CA4E486A7E893179183636753F02045A91353F7A9CF0F30E16A5C3A types-signed.wb.sidnlabs.nl. 60 IN RRSIG NS 8 4 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uj2mFDdXuXJI+ahHJWdFqpDenLh3P2skezM933C+FpaLLc14JhHITjL5CoAhnaJGIuDJAc/PocCLgl+fFsEgRFSvK/svqzLCkzTA+1w04D7JdoKj4NFkkUe5ryWdDnaUPvp4b2yk5Ian6JMXkYNjZ1PwIEWpE1P3qc8PMOFqXDo= ;{id = 62298} 0C74797065732D7369676E6564027762087369646E6C616273026E6C00003000010001518000880100030803010001D7B53C9C988E7476474466CC3BA260A461FE5764BF4CE754E6307E3B0764D2E0D1A84B23E52CBE08419A29A851219AF5DE8291DDDDA1D6C76315298C562C25F75EABEAA2998163AC6F1B500D810F6B8931A835FD01BB0D3529DE31DA574435DEBFFCDBD404974B23ACB201C42EF04A5AAED3275F633E555FB5F403C8B5BC39BD types-signed.wb.sidnlabs.nl. 86400 IN DNSKEY 256 3 8 AwEAAde1PJyYjnR2R0RmzDuiYKRh/ldkv0znVOYwfjsHZNLg0ahLI+UsvghBmimoUSGa9d6Ckd3dodbHYxUpjFYsJfdeq+qimYFjrG8bUA2BD2uJMag1/QG7DTUp3jHaV0Q13r/829QEl0sjrLIBxC7wSlqu0ydfYz5VX7X0A8i1vDm9 ;{id = 62298 (zsk), size = 1024b} 0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010001518000AF003008040001518052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002814BF2CD8FF2B000AFFB428CDECAAFDD33DAE745905F01E244082EED758BCA1BBF77C8B7966A1D6E4B7C98BA51D35CDFA3C8F67B6A07DB8ABEEF4719D7739A3D36224ABA64F9FCA7B46414431A5496C80FC0A8C7E46E2C242D69D4038E3CC0D1DB0FEDDA73177E6A1B3B5D3CF5AA712F60B840F2091B5BB3DF54299A37AAAA4 types-signed.wb.sidnlabs.nl. 86400 IN RRSIG DNSKEY 8 4 86400 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. KBS/LNj/KwAK/7Qozeyq/dM9rnRZBfAeJECC7tdYvKG793yLeWah1uS3yYulHTXN+jyPZ7agfbir7vRxnXc5o9NiJKumT5/Ke0ZBRDGlSWyA/AqMfkbiwkLWnUA448wNHbD+3acxd+ahs7XTz1qnEvYLhA8gkbW7PfVCmaN6qqQ= ;{id = 62298} 0C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002801610C74797065732D7369676E6564027762087369646E6C616273026E6C00000722000000000380 types-signed.wb.sidnlabs.nl. 3600 IN NSEC a.types-signed.wb.sidnlabs.nl. NS SOA RRSIG NSEC DNSKEY 0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080400000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B55DC7CDE44F4A9D49BC6B969335B95A2450947D4C55C21D7453D3E8FD455C77F3287BC0EBF9040711F4A91ADAC6AC7EF928FB3D7ED2991EEA1E86B62145406305578B031FED59B5891F517AACA530339262708222B4E3FC7D6B90CDA885269B9F838D9A6BB199E1E09B82232876C8B8A3F2398D761DC34F5748FB77033A5E8D types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tV3HzeRPSp1JvGuWkzW5WiRQlH1MVcIddFPT6P1FXHfzKHvA6/kEBxH0qRraxqx++Sj7PX7SmR7qHoa2IUVAYwVXiwMf7Vm1iR9ReqylMDOSYnCCIrTj/H1rkM2ohSabn4ONmmuxmeHgm4IjKHbIuKPyOY12HcNPV0j7dwM6Xo0= ;{id = 62298} 01610C74797065732D7369676E6564027762087369646E6C616273026E6C00000100010000003C0004D5881FDD a.types-signed.wb.sidnlabs.nl. 60 IN A 213.136.31.221 01610C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C559E7582596EE34600A9B219D9596C536BBB28FB5B12953BD84827532166D7A7CF85745F3C34D0F6DC4BDEBF07F47018E22AF939873A300881E8E1DDB4D44B50700506B01B9ED52320E8383ABD7AEC07D5CEB7E780C1752C177762229B4307403E8C9E9BCF1B3E0CE64623B785A40C3F7829C8BCE30EBA742B4ECF2A354B74F a.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. xVnnWCWW7jRgCpshnZWWxTa7so+1sSlTvYSCdTIWbXp8+FdF88NND23Evevwf0cBjiKvk5hzowCIHo4d201EtQcAUGsBue1SMg6Dg6vXrsB9XOt+eAwXUsF3diIptDB0A+jJ6bzxs+DOZGI7eFpAw/eCnIvOMOunQrTs8qNUt08= ;{id = 62298} 01610C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029036130310C74797065732D7369676E6564027762087369646E6C616273026E6C000006400000000003 a.types-signed.wb.sidnlabs.nl. 3600 IN NSEC a01.types-signed.wb.sidnlabs.nl. A RRSIG NSEC 01610C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C8C27D0F6DCEA8A3DE18BA84D864361DEBB92BD95ED53A087CEEDF43567095AEABC08BD78B1BC19BFB36DB49EB2060C4D142D10BD14BE84B21FD819E7B5D1E10E79B0A9683992C8247DF846B78F5099A492192D814312EF7CAE56AF152C7783D14FA459D08950C8F9EE859B86D4F60EC6CA2BD587BC327AEF69001D52B31C83C a.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. yMJ9D23OqKPeGLqE2GQ2Heu5K9le1ToIfO7fQ1Zwla6rwIvXixvBm/s220nrIGDE0ULRC9FL6Esh/YGee10eEOebCpaDmSyCR9+Ea3j1CZpJIZLYFDEu98rlavFSx3g9FPpFnQiVDI+e6Fm4bU9g7GyivVh7wyeu9pAB1SsxyDw= ;{id = 62298} 036130310C74797065732D7369676E6564027762087369646E6C616273026E6C00000100010000003C000400000000 a01.types-signed.wb.sidnlabs.nl. 60 IN A 0.0.0.0 036130310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C6F62261D5B4390B7A5D7B7BBE0199CED496D21157069EC6C50CCE785F66A33BCD6C579F4EED97559309618C4E84DA3A1EF61B74F8A556CED90AFEF09734FAC7648E3FE787B7E6D9048A181B69DCF2C7BFBA1F4AD23C203E9E94E29808142FC46B0A7B98CCD947B6DC274BE56527B7BE393109D8680B76B4A5E1E688E2C5A45D a01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. xvYiYdW0OQt6XXt7vgGZztSW0hFXBp7GxQzOeF9mozvNbFefTu2XVZMJYYxOhNo6HvYbdPilVs7ZCv7wlzT6x2SOP+eHt+bZBIoYG2nc8se/uh9K0jwgPp6U4pgIFC/Eawp7mMzZR7bcJ0vlZSe3vjkxCdhoC3a0peHmiOLFpF0= ;{id = 62298} 036130310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029036130320C74797065732D7369676E6564027762087369646E6C616273026E6C000006400000000003 a01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC a02.types-signed.wb.sidnlabs.nl. A RRSIG NSEC 036130310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0073D833E8E9157EEB2F3B51BD1DF6FBE4EAC56AACFA433454843F8FCAA618977291BF8780BFDABBDF5D2CBCA5CA1D5941F852CD08632C32306506E782174998FE7A7DD9CF2EBF16EA384AC691FD6F5354800FF3C0EFD19D7A673FF7EABD6E67C749A5B4FF8787386867532D91E1A91CC42EEDF149B9FB3E96608A099168D004B6 a01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. c9gz6OkVfusvO1G9Hfb75OrFaqz6QzRUhD+PyqYYl3KRv4eAv9q7310svKXKHVlB+FLNCGMsMjBlBueCF0mY/np92c8uvxbqOErGkf1vU1SAD/PA79Gdemc/9+q9bmfHSaW0/4eHOGhnUy2R4akcxC7t8Um5+z6WYIoJkWjQBLY= ;{id = 62298} 036130320C74797065732D7369676E6564027762087369646E6C616273026E6C00000100010000003C0004FFFFFFFF a02.types-signed.wb.sidnlabs.nl. 60 IN A 255.255.255.255 036130320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007AAA7FCC2E6373DCA978D0AC99CB7B0CD5C8C8A3C40D05B106DD06E3639650E9A6061DE55519E01BBD512FCDD51C56E8325C6C0140632916F0F640CA335BF0A31703B4E385D196D84E78FE0BA4C03C321E8805427C0EE4D64BC5B7096104355558C28E79594C77EAEBF2D42C18AB4D13D2091E64B854DCFE187EFD5B5CC78A49 a02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eqp/zC5jc9ypeNCsmct7DNXIyKPEDQWxBt0G42OWUOmmBh3lVRngG71RL83VHFboMlxsAUBjKRbw9kDKM1vwoxcDtOOF0ZbYTnj+C6TAPDIeiAVCfA7k1kvFtwlhBDVVWMKOeVlMd+rr8tQsGKtNE9IJHmS4VNz+GH79W1zHikk= ;{id = 62298} 036130320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A04616161610C74797065732D7369676E6564027762087369646E6C616273026E6C000006400000000003 a02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC aaaa.types-signed.wb.sidnlabs.nl. A RRSIG NSEC 036130320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C3E75FFA8967071E982D29C4FAC6B0AB3F7C7AC1FC3D34BAADE78F7E0EAD53DA94B7E2FEF46959F009E63899716FF8ACB0F71A0F856F069AC24312D2187D2327BEC8B0787CE4A64D798DCB15C97B39692CE7010F362E49682A838E6328B04E4BADBFFF412D9C4748185A5841B5C6E1BD022447338F235EEC0E54FE7E51542E8A a02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. w+df+olnBx6YLSnE+sawqz98esH8PTS6reePfg6tU9qUt+L+9GlZ8AnmOJlxb/issPcaD4VvBprCQxLSGH0jJ77IsHh85KZNeY3LFcl7OWks5wEPNi5JaCqDjmMosE5Lrb//QS2cR0gYWlhBtcbhvQIkRzOPI17sDlT+flFULoo= ;{id = 62298} 04616161610C74797065732D7369676E6564027762087369646E6C616273026E6C00001C00010000003C0010200107B80C0500000000000000800004 aaaa.types-signed.wb.sidnlabs.nl. 60 IN AAAA 2001:7b8:c05::80:4 04616161610C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001C08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0034217882ADA06FCD8AE71C661AA484E237A8DED0B284F9042B7850988669B861CB691915E5758A10D2A5E84C61354CB659401832A6BA16D2F97F6B44CA629E6261CBC0100F489A4395C5E21E678CC98F6D419885869838F30B546E0CAF6C082ABDB354EA47FC614FD86904A832EFC70CF8ED3086C863D2FE0A9A610F8F418325 aaaa.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AAAA 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. NCF4gq2gb82K5xxmGqSE4jeo3tCyhPkEK3hQmIZpuGHLaRkV5XWKENKl6ExhNUy2WUAYMqa6FtL5f2tEymKeYmHLwBAPSJpDlcXiHmeMyY9tQZiFhpg48wtUbgyvbAgqvbNU6kf8YU/YaQSoMu/HDPjtMIbIY9L+CpphD49BgyU= ;{id = 62298} 04616161610C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0561667364620C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000080003 aaaa.types-signed.wb.sidnlabs.nl. 3600 IN NSEC afsdb.types-signed.wb.sidnlabs.nl. AAAA RRSIG NSEC 04616161610C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C008113642B479C1F6FD36D0AF2C8A3AFB2ED509CA4F87078117147D961AD14F95E79DF68200F097D431B723CA2BB05BB803D2B9C2E77122AFFE1F96CBEC061D54D99177604847B541E1006C54E8F8706E593BEF28891DF0A4E7C05453D9E7EE4ED0BEAFA57F363C1BE78673564471C6FA3A482B2728A80CBC7CE33AC1B3C036EDE aaaa.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. gRNkK0ecH2/TbQryyKOvsu1QnKT4cHgRcUfZYa0U+V5532ggDwl9QxtyPKK7BbuAPSucLncSKv/h+Wy+wGHVTZkXdgSEe1QeEAbFTo+HBuWTvvKIkd8KTnwFRT2efuTtC+r6V/Njwb54ZzVkRxxvo6SCsnKKgMvHzjOsGzwDbt4= ;{id = 62298} 0561667364620C74797065732D7369676E6564027762087369646E6C616273026E6C00001200010000003C00273039076166736E6F64650C74797065732D7369676E6564027762087369646E6C616273026E6C00 afsdb.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 12345 afsnode.types-signed.wb.sidnlabs.nl. 0561667364620C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001208050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D337260602C05D7D8E689FB7F20E09379A03C2C5E5A1541C3F7307B125C08BC99651CDA9618C65E7C2053DA361AA6F50EAB4A79E0DBB570171070DA53F54B21A6B2088CB606D757ACF4B8C3FD4D2E3708C8901C5B76EDC3272FD9E433C049053A2B2878921C3E028EC007F358B456973132D4A33B5FEBA21CC2CA9E404EAC452 afsdb.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0zcmBgLAXX2OaJ+38g4JN5oDwsXloVQcP3MHsSXAi8mWUc2pYYxl58IFPaNhqm9Q6rSnng27VwFxBw2lP1SyGmsgiMtgbXV6z0uMP9TS43CMiQHFt27cMnL9nkM8BJBTorKHiSHD4CjsAH81i0VpcxMtSjO1/rohzCyp5ATqxFI= ;{id = 62298} 0561667364620C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07616673646230310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000020000003 afsdb.types-signed.wb.sidnlabs.nl. 3600 IN NSEC afsdb01.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC 0561667364620C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0039F04E019CDF47A6E9435D0B50DFED2BCC651A742FB3BB023E51389D768BCDE97C11D38BC83623EA869ECFE73C4F12252FFDD746C33DC26914B942749F0BB99A5B8FC31F96D30479AFC045E29C76DA4E5810FF8561BB73FC75E4AC25025451B7467E21B0B5F4489E05A91BECB33C5A9F358B0C61381E199AE10A4D815865CF49 afsdb.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OfBOAZzfR6bpQ10LUN/tK8xlGnQvs7sCPlE4nXaLzel8EdOLyDYj6oaez+c8TxIlL/3XRsM9wmkUuUJ0nwu5mluPwx+W0wR5r8BF4px22k5YEP+FYbtz/HXkrCUCVFG3Rn4hsLX0SJ4FqRvsszxanzWLDGE4Hhma4QpNgVhlz0k= ;{id = 62298} 07616673646230310C74797065732D7369676E6564027762087369646E6C616273026E6C00001200010000003C0028000008686F73746E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00 afsdb01.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 0 hostname.types-signed.wb.sidnlabs.nl. 07616673646230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001208050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00433236F737B6C742F95134A430A07D8B51F1286CF64B11CC47F2E57FD541BB93DC7DD3F0EBFEDBE37CD22EBA7D0D908BD960534BFF5A3D65FD3FF435EC998353CD751BE31DCB5A248D5CA84F4E0514A4551447A653A4F9084C9C688293CD5A9005D33EBFCEDB927C81F9EBA09B7A07D00F2B58E5AD67F9A0E4CBEF050C259C28 afsdb01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. QzI29ze2x0L5UTSkMKB9i1HxKGz2SxHMR/Llf9VBu5PcfdPw6/7b43zSLrp9DZCL2WBTS/9aPWX9P/Q17JmDU811G+Mdy1okjVyoT04FFKRVFEemU6T5CEycaIKTzVqQBdM+v87bknyB+eugm3oH0A8rWOWtZ/mg5MvvBQwlnCg= ;{id = 62298} 07616673646230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07616673646230320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000020000003 afsdb01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC afsdb02.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC 07616673646230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001CEF6BE6C935642319DEFB9903EF8F0FE1F9647263184F18A003E6459EF0C8DECE0DC09E731FCC5351F10CB28B0C986993D6204034A6DF2C5C8200D2CFFD77A1B8ECC886659F308142B3034AF534CA4AB3DB59AC7C99187BF900E6F76CF9F30748F941F4C19811A274D5FE44CE44A617EF43F357B8B952E535353785F6266BF4 afsdb01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HO9r5sk1ZCMZ3vuZA++PD+H5ZHJjGE8YoAPmRZ7wyN7ODcCecx/MU1HxDLKLDJhpk9YgQDSm3yxcggDSz/13objsyIZlnzCBQrMDSvU0ykqz21msfJkYe/kA5vds+fMHSPlB9MGYEaJ01f5EzkSmF+9D81e4uVLlNTU3hfYma/Q= ;{id = 62298} 07616673646230320C74797065732D7369676E6564027762087369646E6C616273026E6C00001200010000003C0003FFFF00 afsdb02.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 65535 . 07616673646230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001208050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00591C251983C795E59A14EAC58971CD36D965B01AD46AFD4D87CE0A0FB741C6915082CC02A9FAB523D3302C426333A3B9C7890981326CF00A28974B056CE63B22188BC1CAC02864133DA2969E3F6E006BB2A721C3880CCA99B9B0619120AFF0428105A8AC7095CA7C1B99CB51E0B9D8B816FF9A92AD9517E4422D366D330F6613 afsdb02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. WRwlGYPHleWaFOrFiXHNNtllsBrUav1Nh84KD7dBxpFQgswCqfq1I9MwLEJjM6O5x4kJgTJs8Aool0sFbOY7IhiLwcrAKGQTPaKWnj9uAGuypyHDiAzKmbmwYZEgr/BCgQWorHCVynwbmctR4LnYuBb/mpKtlRfkQi02bTMPZhM= ;{id = 62298} 07616673646230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029036364730C74797065732D7369676E6564027762087369646E6C616273026E6C000006000020000003 afsdb02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cds.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC 07616673646230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00786146DC4D929A6DB5EA3DC641C39B1DD80CDAFC32B271DD0D295C90DE49C4A310F4F9E6865DC058DDCB470A6056974E6C660B8A725A4646FF7DE59496069E98921E153699CDDDD95F9406FDE81E68EA22E10D290FBBB075E796A5C6DEA65B46AF7683E2A83B5A405403106C78A9C04BD8EBBDB0B7885EF3D17CDF376AC24865 afsdb02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eGFG3E2Smm216j3GQcObHdgM2vwysnHdDSlckN5JxKMQ9Pnmhl3AWN3LRwpgVpdObGYLinJaRkb/feWUlgaemJIeFTaZzd3ZX5QG/egeaOoi4Q0pD7uwdeeWpcbepltGr3aD4qg7WkBUAxBseKnAS9jrvbC3iF7z0XzfN2rCSGU= ;{id = 62298} 036364730C74797065732D7369676E6564027762087369646E6C616273026E6C00003B00010000003C0024FCB2080286632F83494B1D7037E72949FD6CD8689C5DAAF4DF1E5D7E6EF3BA28ECE1E3C8 cds.types-signed.wb.sidnlabs.nl. 60 IN CDS 64690 8 2 86632F83494B1D7037E72949FD6CD8689C5DAAF4DF1E5D7E6EF3BA28ECE1E3C8 036364730C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007BAC8D49E16C3744DE3C9EF198C05480F5238C4962012D61912CE532C41509C770A89F55624352BD7F31D772D4CF76D4E02041D658904ED3F4F3A85BA34F372444D336BC8CD7FBEE808B5D371571B4B4C1419E4723091939D3475279C031C5BADB9DD224927755309AE05A1893653A63A9F21CE5249A721AC6415BEE683099A8 cds.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CDS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. e6yNSeFsN0TePJ7xmMBUgPUjjEliAS1hkSzlMsQVCcdwqJ9VYkNSvX8x13LUz3bU4CBB1liQTtP086hbo083JETTNryM1/vugItdNxVxtLTBQZ5HIwkZOdNHUnnAMcW6253SJJJ3VTCa4FoYk2U6Y6nyHOUkmnIaxkFb7mgwmag= ;{id = 62298} 036364730C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C04636572740C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030010 cds.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cert.types-signed.wb.sidnlabs.nl. RRSIG NSEC CDS 036364730C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0039771AE91719DEF01A03D67B508F84D1C51D98A99CADDA4D0A125A54F5195AA2ACFDC37586F081E0FD0C7EC316B0EE6AE159483A0C877D252C233D4718578D0DE2BD8E776363152D13B1EF4473EB97E3E082B5639082D01DF02CD27D7CEF4EDB297A6D2A1B42148465CDE9C445D3FECFCDD2935E40A0D05E8CA520BE51623A21 cds.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OXca6RcZ3vAaA9Z7UI+E0cUdmKmcrdpNChJaVPUZWqKs/cN1hvCB4P0MfsMWsO5q4VlIOgyHfSUsIz1HGFeNDeK9jndjYxUtE7HvRHPrl+PggrVjkILQHfAs0n18707bKXptKhtCFIRlzenERdP+z83Sk15AoNBejKUgvlFiOiE= ;{id = 62298} 04636572740C74797065732D7369676E6564027762087369646E6C616273026E6C00002500010000003C0055FFFEFFFFFE33115C6F2F64FF2BDE74C7D080ACE11F97ABD0CBBFBC82F3E39224B2471E1468225829FF1B11E16A2E9502E1C0A0D533E18A14D6D55F4824AA4189FAFFFD7553A36577CD2311E0BC693ACEF8A2A609A6 cert.types-signed.wb.sidnlabs.nl. 60 IN CERT 65534 65535 254 MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= 04636572740C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00274412A0D2BF0FB8C5C6BA44A485ED6C15FC1AF76F58F0541F6D07D76A26E0A6A2E4D51E242BFC30DF1E847B32F540998E0D3E4BE0729D106CBF06A326239332BD42EE92ACD3BEC9BBF5E331AD2E9A8625B436C1C76E90DFAAF09CD3793BDCDBFDDC970F1064B0AFEDC19562359AD10AAF742FE7049305C332D8E2A9703C65A8 cert.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CERT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. J0QSoNK/D7jFxrpEpIXtbBX8GvdvWPBUH20H12om4Kai5NUeJCv8MN8ehHsy9UCZjg0+S+BynRBsvwajJiOTMr1C7pKs077Ju/XjMa0umoYltDbBx26Q36rwnNN5O9zb/dyXDxBksK/twZViNZrRCq90L+cEkwXDMtjiqXA8Zag= ;{id = 62298} 04636572740C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C066365727430310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000403 cert.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cert01.types-signed.wb.sidnlabs.nl. CERT RRSIG NSEC 04636572740C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0063ED2B1B822B5B9A6CCB0F4ED01D8F159FC2146A67AFE335F5D50FF7E7A5E816E38D8A6483217F9F8B7948D601611CBB52A830FEA1082063889B0949CB13D7D7D0EF9790A2E13F118DB1647184166FB0C63CB7D26837ABA6C7782F30CC01CD5AAA17871574A7458158DF179390B1AB6673AAFF013FF3DA15FD9BE76121A21383 cert.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Y+0rG4IrW5psyw9O0B2PFZ/CFGpnr+M19dUP9+el6BbjjYpkgyF/n4t5SNYBYRy7Uqgw/qEIIGOImwlJyxPX19Dvl5Ci4T8RjbFkcYQWb7DGPLfSaDerpsd4LzDMAc1aqheHFXSnRYFY3xeTkLGrZnOq/wE/89oV/ZvnYSGiE4M= ;{id = 62298} 066365727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002500010000003C0055FFFEFFFFFE33115C6F2F64FF2BDE74C7D080ACE11F97ABD0CBBFBC82F3E39224B2471E1468225829FF1B11E16A2E9502E1C0A0D533E18A14D6D55F4824AA4189FAFFFD7553A36577CD2311E0BC693ACEF8A2A609A6 cert01.types-signed.wb.sidnlabs.nl. 60 IN CERT 65534 65535 254 MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= 066365727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009A90B71BB343F532B68023474EB75EE1B34DCCFFE3462F944B043310C50E2A8FAB0223800095F3FF73B11850632C420FC20E5DF03CD985FD44715EBA1EA347C5A5B5824E8D43009B75382F800794309DC6CCDC839EB9A9692DC222A5113CEA3FD53D8CA02F83BE842EC4EE4CE44B900EC878533EB5EC7CD4139338EFA4DAA917 cert01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CERT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. mpC3G7ND9TK2gCNHTrde4bNNzP/jRi+USwQzEMUOKo+rAiOAAJXz/3OxGFBjLEIPwg5d8DzZhf1EcV66HqNHxaW1gk6NQwCbdTgvgAeUMJ3GzNyDnrmpaS3CIqURPOo/1T2MoC+DvoQuxO5M5EuQDsh4Uz617HzUE5M476TaqRc= ;{id = 62298} 066365727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B05636E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000403 cert01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cname.types-signed.wb.sidnlabs.nl. CERT RRSIG NSEC 066365727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009D36804E7EF0B73782B4E5693CC1F9D2013E0B7D8CED83CB6D72193DDF53685556376D64FF21357FFFFF066746877E21C2D78BB974E0838ED9D2BC47A2DBD8BCECBB224CAA3D0D77FD160391FD56FFF69345A0946D5A5FC8D219ED98EAE436310B888AC8CCD8274691327F8A323307199BAF759B070A9D7D41D32F855FD1B07A cert01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. nTaATn7wtzeCtOVpPMH50gE+C32M7YPLbXIZPd9TaFVWN21k/yE1f///BmdGh34hwteLuXTgg47Z0rxHotvYvOy7IkyqPQ13/RYDkf1W//aTRaCUbVpfyNIZ7Zjq5DYxC4iKyMzYJ0aRMn+KMjMHGZuvdZsHCp19QdMvhV/RsHo= ;{id = 62298} 05636E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00000500010000003C0021037777770C74797065732D7369676E6564027762087369646E6C616273026E6C00 cname.types-signed.wb.sidnlabs.nl. 60 IN CNAME www.types-signed.wb.sidnlabs.nl. 05636E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C008AE9608C314758EA41D919D530502EDCDC740104346EAD005E750E40599ADF142DD996575285E32DE6C3650484E9AE9A7C21BD217820E4E91AE90CE9D4DFE27519EC288363A498BA22A740388A95C611B463D5FE0D2D076D1F308A2916AC156E05B93A019B07F7C49E3D8874BBA221A076F7299A8572C81BDFB3E4A6F158836B cname.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. iulgjDFHWOpB2RnVMFAu3Nx0AQQ0bq0AXnUOQFma3xQt2ZZXUoXjLebDZQSE6a6afCG9IXgg5Oka6Qzp1N/idRnsKINjpJi6IqdAOIqVxhG0Y9X+DS0HbR8wiikWrBVuBbk6AZsH98SePYh0u6IhoHb3KZqFcsgb37PkpvFYg2s= ;{id = 62298} 05636E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07636E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C000006040000000003 cname.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cname01.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC 05636E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005658F2FBA621CCD401CFE1E9F2FF81DFE1B543791CFDAB2BC609DCAD6609D37D62C7B7799F9CB38E26F914C0C24421B13B0DFD3D1701B2E9924B3826AFD12941EC1F3C7403D19238F064EA85CC6ED8DBBA5AA14DDCE2E384695E1029F9E96C0AF69534B20440F82A681AE3E573384DBDC0144419728F3752D3CF6C340350568A cname.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Vljy+6YhzNQBz+Hp8v+B3+G1Q3kc/asrxgncrWYJ031ix7d5n5yzjib5FMDCRCGxOw39PRcBsumSSzgmr9EpQewfPHQD0ZI48GTqhcxu2Nu6WqFN3OLjhGleECn56WwK9pU0sgRA+CpoGuPlczhNvcAURBlyjzdS089sNANQVoo= ;{id = 62298} 07636E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00000500010000003C000E0C636E616D652D74617267657400 cname01.types-signed.wb.sidnlabs.nl. 60 IN CNAME cname-target. 07636E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000470C42BCFA53A94827D24D23A539AF9CFFA51FB08F757D3BCF1A39A04D58B11D1242C01467F67E21C11B1C73D3856CE69AFC348DE69449F5382036CB0FD8ED58CFA4FC3DC9199EF9001314F5D2E7B122E858E65231FFE251008C24474AFF70E6DBF5B87A41D41F878FBFF628E7B6950CEDBDB9F4BE33D2791CD96430FE6C53C cname01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BHDEK8+lOpSCfSTSOlOa+c/6UfsI91fTvPGjmgTVixHRJCwBRn9n4hwRscc9OFbOaa/DSN5pRJ9TggNssP2O1Yz6T8PckZnvkAExT10uexIuhY5lIx/+JRAIwkR0r/cObb9bh6QdQfh4+/9ijntpUM7b259L4z0nkc2WQw/mxTw= ;{id = 62298} 07636E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07636E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C000006040000000003 cname01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cname02.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC 07636E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BAF6DF2E189412F35463EDC7A1A40D39E381DDD08FE7B4C79FB1EE53D7EBE9F54639691FD350204E2833A64E97FD1C81D0B2AD8BC862577567E098A673196364438EC5438AC0E5F5AB12246EB6C4E0312F8969B668EEA39AC9140FD26701F209CD40F17859AF6660C9BEB72EA55301BAC451C7E6C3D76A97B8DBFBEDE10D9464 cname01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uvbfLhiUEvNUY+3HoaQNOeOB3dCP57THn7HuU9fr6fVGOWkf01AgTigzpk6X/RyB0LKti8hiV3Vn4JimcxljZEOOxUOKwOX1qxIkbrbE4DEviWm2aO6jmskUD9JnAfIJzUDxeFmvZmDJvrcupVMBusRRx+bD12qXuNv77eENlGQ= ;{id = 62298} 07636E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00000500010000003C002A0C636E616D652D7461726765740C74797065732D7369676E6564027762087369646E6C616273026E6C00 cname02.types-signed.wb.sidnlabs.nl. 60 IN CNAME cname-target.types-signed.wb.sidnlabs.nl. 07636E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007C8DD5D5B4ED0919954C63A3B846C5E2E7B8BECC49CD3A4BBE834375A3EDAECAAE491EA911401069496506772D003F5036A6A2A1C0646EF23E62A9967BE00B9168E30764430E669C1E7F74EEC347530A438BAE1A92A1D23D8A4F5FB2812E61578ACF1295580CB6BB1FA9300F1158706E6DC79896C851485DF3182B6254D057F4 cname02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fI3V1bTtCRmVTGOjuEbF4ue4vsxJzTpLvoNDdaPtrsquSR6pEUAQaUllBnctAD9QNqaiocBkbvI+YqmWe+ALkWjjB2RDDmacHn907sNHUwpDi64akqHSPYpPX7KBLmFXis8SlVgMtrsfqTAPEVhwbm3HmJbIUUhd8xgrYlTQV/Q= ;{id = 62298} 07636E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0564686369640C74797065732D7369676E6564027762087369646E6C616273026E6C000006040000000003 cname02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dhcid.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC 07636E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003078A2199EFFDF1D3CD0742242B5705AF53C671DCEC8D2EDC58260AF5D1065E43C3C302AEEE89336E3FC777C59F92C37BC6FD1296CCA07531D7FF7320AEA114BDEF1B69A51CA71B728E4A4DC74D8FC53E7E6A49EF4D35B538C99BC35FBCABFAD7473B11017B9B2ED612AAFADDFB1887F603306E805D84AD197A53106B5EA504B cname02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MHiiGZ7/3x080HQiQrVwWvU8Zx3OyNLtxYJgr10QZeQ8PDAq7uiTNuP8d3xZ+Sw3vG/RKWzKB1Mdf/cyCuoRS97xtppRynG3KOSk3HTY/FPn5qSe9NNbU4yZvDX7yr+tdHOxEBe5su1hKq+t37GIf2AzBugF2ErRl6UxBrXqUEs= ;{id = 62298} 0564686369640C74797065732D7369676E6564027762087369646E6C616273026E6C00003100010000003C0023000201636FC0B8271C82825BB1AC5C41CF5351AA69B4FEBD94E8F17CDB95000DA48C40 dhcid.types-signed.wb.sidnlabs.nl. 60 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA= 0564686369640C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00AF9284ECFB7B5961918033A1F3CB50529E4E7B3BEAAC81F552DE0BF337322FC9FE5E27CECBDB699ED9272A34ED66C64C9F38670A3C18C007E93A3134583D7327E7CB4CDBBECB7DB8BB5BA0B19495A65FD76F50606D47BA335FF6DBAD7612A19C193C1EBADF7C1E5247CFA9620255A6A35C806247B4BA32F573A4C19D74349DB5 dhcid.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DHCID 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. r5KE7Pt7WWGRgDOh88tQUp5OezvqrIH1Ut4L8zcyL8n+XifOy9tpntknKjTtZsZMnzhnCjwYwAfpOjE0WD1zJ+fLTNu+y324u1ugsZSVpl/Xb1BgbUe6M1/22612EqGcGTweut98HlJHz6liAlWmo1yAYke0ujL1c6TBnXQ0nbU= ;{id = 62298} 0564686369640C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C05646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00000700000000000340 dhcid.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname.types-signed.wb.sidnlabs.nl. RRSIG NSEC DHCID 0564686369640C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C004763CE81F01C48BB8DA3C045BB4B55221922D910F342EFB96DFC1BBDC54BA65B0A45F7EBF81CB6E339BA2583310733B6DACD7D36926F5938BA78EFE0AC8DAF897A46BC62494FE71BD60D160C01664298E1D3788D5619CEB29FC38A6D9D83128F992E1B7F84EF3009D95C43E0E297F3B9336C59FADF6F7A6B7A8CFB800833EDC6 dhcid.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R2POgfAcSLuNo8BFu0tVIhki2RDzQu+5bfwbvcVLplsKRffr+By24zm6JYMxBzO22s19NpJvWTi6eO/grI2viXpGvGJJT+cb1g0WDAFmQpjh03iNVhnOsp/Dim2dgxKPmS4bf4TvMAnZXEPg4pfzuTNsWfrfb3preoz7gAgz7cY= ;{id = 62298} 05646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00002700010000003C000E0C646E616D652D74617267657400 dname.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target. 05646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002708050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0038F1778C6B7DCE675FED229C5B6C890FE953F13D09559065DBDB50CAF241C1B8B8E04C5963F40187561B39F2663C96EAFC6E6F13A48A04CD3B925F0EBA780A0BBA54E49B08E28B31E436DA7418A793484315D884AAC47D93806775C6E03158C6DC323796947976D77047FC7B1937BB25CE46135DA63FD6DA035402EEE0401D6E dname.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OPF3jGt9zmdf7SKcW2yJD+lT8T0JVZBl29tQyvJBwbi44ExZY/QBh1YbOfJmPJbq/G5vE6SKBM07kl8OungKC7pU5JsI4osx5DbadBink0hDFdiEqsR9k4BndcbgMVjG3DI3lpR5dtdwR/x7GTe7Jc5GE12mP9baA1QC7uBAHW4= ;{id = 62298} 05646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07646E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000103 dname.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname01.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC 05646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0047E0AFF4CD48696E8ED970FB858809E391C618FA2835CC04F8AD436BB56EBF0030C96C8AD08A770789DFCDDACED85F4F179D6E3DE6CAAF33C0E355FAD80C630B5663DDCFCFCD242A3B02CE36691D2C1CCA69C4F482557ACB3B89701E5747A5C801397E037BE0189CE3D6685C17AC235791756C4F2FE1BE32B2AF650C2CBF702F dname.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R+Cv9M1IaW6O2XD7hYgJ45HGGPooNcwE+K1Da7VuvwAwyWyK0Ip3B4nfzdrO2F9PF51uPebKrzPA41X62AxjC1Zj3c/PzSQqOwLONmkdLBzKacT0glV6yzuJcB5XR6XIATl+A3vgGJzj1mhcF6wjV5F1bE8v4b4ysq9lDCy/cC8= ;{id = 62298} 07646E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00002700010000003C000E0C646E616D652D74617267657400 dname01.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target. 07646E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002708050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001E15DA2D587694300FC44E9727FBAA506BE92B7BF2A0FA18D9BB292022A3949368B1EA4C6C1B3DE463E69E85D8DFCECBFE8DB481117B96BB3DE397A7000B83F475720538D49EE220053D9420AA4EABCA7BF662E361812095298344CE61E3CF7A3D3B5104ADDA18A722FC63F20F8B43893CEE04C5C1858048EE33E4D3DBF8FAED dname01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HhXaLVh2lDAPxE6XJ/uqUGvpK3vyoPoY2bspICKjlJNosepMbBs95GPmnoXY387L/o20gRF7lrs945enAAuD9HVyBTjUnuIgBT2UIKpOq8p79mLjYYEglSmDRM5h4896PTtRBK3aGKci/GPyD4tDiTzuBMXBhYBI7jPk09v4+u0= ;{id = 62298} 07646E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07646E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000103 dname01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname02.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC 07646E616D6530310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D11822FC8451D9B21AB0F18AFDC337AF1CDFF458B135DBF973B033B58024599BAC20F8E7335F3091EDC5C087E9302BE61EE9978AFE93AAF6D589430932787B99A03F9B36D138A5C7538D5BACF676CBECA9338E828461391FB23B9A5762260F9475B9C8BCC8F00A6679870AF7F3296B772824F81BC809264E29F26EB66266F3F7 dname01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0Rgi/IRR2bIasPGK/cM3rxzf9FixNdv5c7AztYAkWZusIPjnM18wke3FwIfpMCvmHumXiv6TqvbViUMJMnh7maA/mzbROKXHU41brPZ2y+ypM46ChGE5H7I7mldiJg+UdbnIvMjwCmZ5hwr38ylrdygk+BvICSZOKfJutmJm8/c= ;{id = 62298} 07646E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00002700010000003C002A0C646E616D652D7461726765740C74797065732D7369676E6564027762087369646E6C616273026E6C00 dname02.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target.types-signed.wb.sidnlabs.nl. 07646E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002708050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0087B08F9E21FEC45DF46655AA9AD37E2DF51CA8C99AE6FA77EB756D022201578A8B86C2A6F128E270118CCEF1CD4D2A97B9E7C3CD96CAB7C409AF80A136E22502456ACCB4AAE85D9F2EAFF5E369D2F19CF69B9BB3632EE3EEA9B7F65699E7988891833CECD3B6B7C33251636E9337C30F9BC9A4F3FC6242198B6F1A659A38885F dname02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. h7CPniH+xF30ZlWqmtN+LfUcqMma5vp363VtAiIBV4qLhsKm8SjicBGMzvHNTSqXuefDzZbKt8QJr4ChNuIlAkVqzLSq6F2fLq/142nS8Zz2m5uzYy7j7qm39laZ55iIkYM87NO2t8MyUWNukzfDD5vJpPP8YkIZi28aZZo4iF8= ;{id = 62298} 07646E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07646E616D6530330C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000103 dname02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname03.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC 07646E616D6530320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005B45FA364152AB4E3499F9F0AA822F30FFE11A0779CD7955258840337DE095D7B9213D975EE25827BA96D76ED7AD53358E104C5AC4C4937A5D25E8EAD4ED85CEF3155488513C83A886896256F36AE065C1C4BA4994DF9A42886A7D38BC840EF5F29A8E24575FF1F02C7D35BB4C24E17394F0C820764877F4FFB800FDB33D2415 dname02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. W0X6NkFSq040mfnwqoIvMP/hGgd5zXlVJYhAM33glde5IT2XXuJYJ7qW127XrVM1jhBMWsTEk3pdJejq1O2FzvMVVIhRPIOoholiVvNq4GXBxLpJlN+aQohqfTi8hA718pqOJFdf8fAsfTW7TCThc5TwyCB2SHf0/7gA/bM9JBU= ;{id = 62298} 07646E616D6530330C74797065732D7369676E6564027762087369646E6C616273026E6C00002700010000003C000100 dname03.types-signed.wb.sidnlabs.nl. 60 IN DNAME . 07646E616D6530330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002708050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00AB4E94D6E677558C008FAD101942510332C1DB2144A99C0352A3D46671F2B1BB3397B4B918392DE1A023B0BD5F5A9BD7A70A463EA904BF4CB15FFC2E7B60317D1551137C8EF9386C9FB4C88A702852B3E69C582833165C2A8C369B7583A29B402F7614F8E4800C4DA90AE62559E13E12892C075F7773834D30FE8612C9D61F8E dname03.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. q06U1uZ3VYwAj60QGUJRAzLB2yFEqZwDUqPUZnHysbszl7S5GDkt4aAjsL1fWpvXpwpGPqkEv0yxX/wue2AxfRVRE3yO+Thsn7TIinAoUrPmnFgoMxZcKow2m3WDoptAL3YU+OSADE2pCuYlWeE+EoksB193c4NNMP6GEsnWH44= ;{id = 62298} 07646E616D6530330C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000103 dname03.types-signed.wb.sidnlabs.nl. 3600 IN NSEC gpos.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC 07646E616D6530330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00CFCE6808CE405CC73016F9685E75C161BEAA5869D2A6C9B584F4C22BD0CFE199C44F2F8C68BC7CEEF64DAEA444A78C9BB78271C487CD3A76885F757E5D98CEC0B35D173FE21040453AA59C34A6155199A9E1D8FACC67A36646021298D2F9CAEE31E2E022AB152BF32981795D796FC5532F017A091FD7928996BA1E5EF2E665DC dname03.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. z85oCM5AXMcwFvloXnXBYb6qWGnSpsm1hPTCK9DP4ZnETy+MaLx87vZNrqREp4ybt4JxxIfNOnaIX3V+XZjOwLNdFz/iEEBFOqWcNKYVUZmp4dj6zGejZkYCEpjS+cruMeLgIqsVK/MpgXldeW/FUy8Begkf15KJlroeXvLmZdw= ;{id = 62298} 0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C00001B00010000003C00120532332E36370532332E36370532332E3637 gpos.types-signed.wb.sidnlabs.nl. 60 IN GPOS "23.67" "23.67" "23.67" 0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0049CBABEED1B9089695C552489294378669AE1B934A81076F364E3D3E68F239E34AC106D4554F009A39A7813B1C8E02076B0A0737DACE4CCC7BF3CD20F4DFF9C19934DAAD81F23FB743C89CA941387CFC6B1506525634206D4918FA9CBE9707A88B25B0F6FF10E295551E4643488EA87FE7E051BD9E6D8AEF42F01574BB56BEE4 gpos.types-signed.wb.sidnlabs.nl. 60 IN RRSIG GPOS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Scur7tG5CJaVxVJIkpQ3hmmuG5NKgQdvNk49PmjyOeNKwQbUVU8AmjmngTscjgIHawoHN9rOTMx7880g9N/5wZk02q2B8j+3Q8icqUE4fPxrFQZSVjQgbUkY+py+lweoiyWw9v8Q4pVVHkZDSI6of+fgUb2ebYrvQvAVdLtWvuQ= ;{id = 62298} 0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0568696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000100003 gpos.types-signed.wb.sidnlabs.nl. 3600 IN NSEC hinfo.types-signed.wb.sidnlabs.nl. GPOS RRSIG NSEC 0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0037B66B1841B1F155AEE2BC14425FCC166A5BD822825927726096E57EAC9CAF410366B7FC3B73F16B52D0EA402C804AED7AFB00F89BF98AAA56758C95AB4BC660AB759973D5503FDC48DCBBD7C00235DFBCDBCCCFA23D09425142B7E3143028500FEA485F969401E8B85F44E8A5C6DCEB2368685F1F4A0B699E89273B945039CD gpos.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. N7ZrGEGx8VWu4rwUQl/MFmpb2CKCWSdyYJblfqycr0EDZrf8O3Pxa1LQ6kAsgErtevsA+Jv5iqpWdYyVq0vGYKt1mXPVUD/cSNy718ACNd+828zPoj0JQlFCt+MUMChQD+pIX5aUAei4X0Topcbc6yNoaF8fSgtpnoknO5RQOc0= ;{id = 62298} 0568696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00000D00010000003C00161047656E6572696320504320636C6F6E65044D794F53 hinfo.types-signed.wb.sidnlabs.nl. 60 IN HINFO "Generic PC clone" "MyOS" 0568696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B387E7452441A650E4C290CBBD2CB905CB2AC88DF818F032CDCE6817C2262442BD3459C25D4BD7A033AE070D8ABBB2D384894AFAA7618CA9BCCAD44D6C4E2253DC9C9ECE2DA1335890792283893DFE4DD93838117D90685DBB58AC14B421D74FA73AC24967691964A4356491961BB904F43C3A9134A5FBB9D803DD607081CADF hinfo.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. s4fnRSRBplDkwpDLvSy5BcsqyI34GPAyzc5oF8ImJEK9NFnCXUvXoDOuBw2Ku7LThIlK+qdhjKm8ytRNbE4iU9ycns4toTNYkHkig4k9/k3ZODgRfZBoXbtYrBS0IddPpzrCSWdpGWSkNWSRlhu5BPQ8OpE0pfu52APdYHCByt8= ;{id = 62298} 0568696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D0768696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000400000003 hinfo.types-signed.wb.sidnlabs.nl. 3600 IN NSEC hinfo01.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC 0568696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BC780429579844A4A5C119FE4E12494D2FF7ED0C651956CFBA5DAADAD46E0AB6700BC091AFB526459C38CCF5E37EBB21A7F087FA9F674D75A49A7D38BF4BABEF47BA799B8777E8A88CB998A0F24A9E1140FD1CE8D8C3EEFE9DBDB9823A337E6CB564DE3C06546A8648BC3FFBA3ECB7EA04ACA584404573B8BD9750C7ECDD7DF5 hinfo.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vHgEKVeYRKSlwRn+ThJJTS/37QxlGVbPul2q2tRuCrZwC8CRr7UmRZw4zPXjfrshp/CH+p9nTXWkmn04v0ur70e6eZuHd+iojLmYoPJKnhFA/Rzo2MPu/p29uYI6M35stWTePAZUaoZIvD/7o+y36gSspYRARXO4vZdQx+zdffU= ;{id = 62298} 0768696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00000D00010000003C001C1047656E6572696320504320636C6F6E650A4E65744253442D312E34 hinfo01.types-signed.wb.sidnlabs.nl. 60 IN HINFO "Generic PC clone" "NetBSD-1.4" 0768696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002D194761A6316BE8ED94EE13A8FF3951E077A8B2C75A5F93209AF81181502440612BF46C821EB3FB45BA40E2FC33056A56026BAFA6DC388D7FC996073285944B56E3CC219AD640CFE76F5301F25BDE4050A01C541D2F8B82EC3B54B579196587A3FD123CE1636915DD28DF84EEED0A6165C1C86ABA2C9D0B7B4DA7972BAAE97A hinfo01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LRlHYaYxa+jtlO4TqP85UeB3qLLHWl+TIJr4EYFQJEBhK/Rsgh6z+0W6QOL8MwVqVgJrr6bcOI1/yZYHMoWUS1bjzCGa1kDP529TAfJb3kBQoBxUHS+Lguw7VLV5GWWHo/0SPOFjaRXdKN+E7u0KYWXByGq6LJ0Le02nlyuq6Xo= ;{id = 62298} 0768696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D0768696E666F30320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000400000003 hinfo01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC hinfo02.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC 0768696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C5269C3EDCA14B8ED88CEB569B5265766945E18FEB15B241C0694399A8E54874B3CA648172BDB232BDD88A214322D77804CFC03638982B1D279004DB16F37F57DB6848E12EBB0C32BC140DE2141993650643718E59D848ABBA043C82AF371C4D6CD4F4B612149C6B7DACDEAEF0A441FB691624759FD2CA12F33778A2A1F24634 hinfo01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. xSacPtyhS47YjOtWm1JldmlF4Y/rFbJBwGlDmajlSHSzymSBcr2yMr3YiiFDItd4BM/ANjiYKx0nkATbFvN/V9toSOEuuwwyvBQN4hQZk2UGQ3GOWdhIq7oEPIKvNxxNbNT0thIUnGt9rN6u8KRB+2kWJHWf0soS8zd4oqHyRjQ= ;{id = 62298} 0768696E666F30320C74797065732D7369676E6564027762087369646E6C616273026E6C00000D00010000003C000A025043064E6574425344 hinfo02.types-signed.wb.sidnlabs.nl. 60 IN HINFO "PC" "NetBSD" 0768696E666F30320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0050F27CFAB319CCB5A076DC2495C6BD1B8906E6663F77BD0246D5C8299C7081DE08BB171244F7FE2B477BFD21243E3F6A4F534AB4528C521BCB01E042724D19EBB1C8278F4A7B56B4665E4E3494D26FE75E0958D2688D9CE39FE9DC3D722EDDB3C2A7FB1B5E8696929DE2CA86919B4FE49AE1DF3F7C122FE1C2202AAAAB9F8183 hinfo02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. UPJ8+rMZzLWgdtwklca9G4kG5mY/d70CRtXIKZxwgd4IuxcSRPf+K0d7/SEkPj9qT1NKtFKMUhvLAeBCck0Z67HIJ49Ke1a0Zl5ONJTSb+deCVjSaI2c45/p3D1yLt2zwqf7G16GlpKd4sqGkZtP5Jrh3z98Ei/hwiAqqqufgYM= ;{id = 62298} 0768696E666F30320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046973646E0C74797065732D7369676E6564027762087369646E6C616273026E6C000006000400000003 hinfo02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC 0768696E666F30320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0042FF916DC600FF419E4B06A7F1BE27A4CD6DF0C87EA64921CF361FB40C08A4408335E51922B7E58B84028AA9CAD040F35E94C667C912CAF5533A90B43FAF4C33582CD0AA315FBF22303D670DBFF09C4305EA28FC63FC2C3DA549475C79B94A7B4EDF607D301C22A91442EB143228B333DF980A4A75DA8172539AF16AF66F0B31 hinfo02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Qv+RbcYA/0GeSwan8b4npM1t8Mh+pkkhzzYftAwIpECDNeUZIrfli4QCiqnK0EDzXpTGZ8kSyvVTOpC0P69MM1gs0KoxX78iMD1nDb/wnEMF6ij8Y/wsPaVJR1x5uUp7Tt9gfTAcIqkUQusUMiizM9+YCkp12oFyU5rxavZvCzE= ;{id = 62298} 046973646E0C74797065732D7369676E6564027762087369646E6C616273026E6C00001400010000003C00180C6973646E2D616464726573730A73756261646472657373 isdn.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" 046973646E0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0061ADBE53518516A4E3A9CE0C93F55A3D5F4FFF70D7981957FF4F02EC7C14A1713CE783878B9CE9A93A26EB83D845D5BC032BC90D454313E26783457A6844332D332AEA09E28D760D1858C8507BF44EBA300FA352FE03A3ACD34AED47710557E0A9042EEA3CCF53457EE1D8C71AB8E4F2F4E35E786A4D89CC08310ED08F1281E7 isdn.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Ya2+U1GFFqTjqc4Mk/VaPV9P/3DXmBlX/08C7HwUoXE854OHi5zpqTom64PYRdW8AyvJDUVDE+Jng0V6aEQzLTMq6gnijXYNGFjIUHv0TrowD6NS/gOjrNNK7UdxBVfgqQQu6jzPU0V+4djHGrjk8vTjXnhqTYnMCDEO0I8Sgec= ;{id = 62298} 046973646E0C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C066973646E30310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000008000003 isdn.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn01.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC 046973646E0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0033F9D3D8729BC1E27FBB63F72726530166BB984CE39784F2188E89B018A4B1D8F7049B70A7AD5EBB641BBC3C657CFB8FF18DDE1D5C068E5AC48A67DA8EAE0F648DB34C3F7519E0260802BF5AF73D8362F5F69660CB0F04839BF5BB68EF9929327447DD08E39ACE2B74E505FF4406BD11E07122EAA062990CA5C3D58D57064792 isdn.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. M/nT2HKbweJ/u2P3JyZTAWa7mEzjl4TyGI6JsBiksdj3BJtwp61eu2QbvDxlfPuP8Y3eHVwGjlrEimfajq4PZI2zTD91GeAmCAK/Wvc9g2L19pZgyw8Eg5v1u2jvmSkydEfdCOOazit05QX/RAa9EeBxIuqgYpkMpcPVjVcGR5I= ;{id = 62298} 066973646E30310C74797065732D7369676E6564027762087369646E6C616273026E6C00001400010000003C000D0C6973646E2D61646472657373 isdn01.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" 066973646E30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0025661F00A5AB22A374BCA1E81488DD1C474973BCC9A32135B216F21A6371CD8608816102B217A1467B2589FB135BF6E386C872DB863E00D1292D6BAED653184D9F622EAA196A3DEF385AD4C407F42476ACAC3371AF5D7579550ADC21D829C713B35B54EEAE1EBF44F09BB04E4EF20DF764E288E06ABDE19D9988491CD524F7F1 isdn01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. JWYfAKWrIqN0vKHoFIjdHEdJc7zJoyE1shbyGmNxzYYIgWECshehRnslifsTW/bjhshy24Y+ANEpLWuu1lMYTZ9iLqoZaj3vOFrUxAf0JHasrDNxr111eVUK3CHYKccTs1tU7q4ev0Twm7BOTvIN92TiiOBqveGdmYhJHNUk9/E= ;{id = 62298} 066973646E30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C066973646E30320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000008000003 isdn01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn02.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC 066973646E30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006201C022F9A512BE073608B228D510F7450042ED9C90F58CCE24F03DC04A6A50173DA0D15C1BEED673605EC891851CD1539CD0680ACE338FDA1A264D017FB97E5CE901A3D84D1AD484B63718B8AA9BF6BC6F50D5AB3B55AFB33CF7A6443D804D6A80AF38999FBB0D4D691223103B3CC7D20D2EA9EC28DADC45A20D0186FA7AE9 isdn01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. YgHAIvmlEr4HNgiyKNUQ90UAQu2ckPWMziTwPcBKalAXPaDRXBvu1nNgXsiRhRzRU5zQaArOM4/aGiZNAX+5flzpAaPYTRrUhLY3GLiqm/a8b1DVqztVr7M896ZEPYBNaoCvOJmfuw1NaRIjEDs8x9INLqnsKNrcRaINAYb6euk= ;{id = 62298} 066973646E30320C74797065732D7369676E6564027762087369646E6C616273026E6C00001400010000003C00180C6973646E2D616464726573730A73756261646472657373 isdn02.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" 066973646E30320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BE7FEF5228FC39172DF42EFEA5CF75D99B804A5C9281260BB36390D0CC9EC2E166B767DAE8546BE1B3FBF34BA43CFCBB88C1983641F486A69B9B4AC13E6DBB09854E330A0E53BE44B273D563FB46AA7D5DC9390D276F2211429EBD4D5C811A209BE84F076B2528D5CECD80085185398A85C414A54A82F4A698D0EE28AA010202 isdn02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vn/vUij8ORct9C7+pc912ZuASlySgSYLs2OQ0MyewuFmt2fa6FRr4bP780ukPPy7iMGYNkH0hqabm0rBPm27CYVOMwoOU75EsnPVY/tGqn1dyTkNJ28iEUKevU1cgRogm+hPB2slKNXOzYAIUYU5ioXEFKVKgvSmmNDuKKoBAgI= ;{id = 62298} 066973646E30320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C066973646E30330C74797065732D7369676E6564027762087369646E6C616273026E6C000006000008000003 isdn02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn03.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC 066973646E30320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005B70D2DBB8DD7281692C6ACF22B728C23E731A7599C0B243AA5F6275AF7499A22CD5CD97C098D7BABFA6B147FA7220F74FBBDC1310843728DCB9121F5EBBCAFEA0AE583A4F2B4A47C3648643CA17E02C3F8218118FF21E2BE3038E6336668275436C9634A167B603F3101C2CEDCAA3A412CE033E397BB59ABEC63635DD109B06 isdn02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. W3DS27jdcoFpLGrPIrcowj5zGnWZwLJDql9ida90maIs1c2XwJjXur+msUf6ciD3T7vcExCENyjcuRIfXrvK/qCuWDpPK0pHw2SGQ8oX4Cw/ghgRj/IeK+MDjmM2ZoJ1Q2yWNKFntgPzEBws7cqjpBLOAz45e7WavsY2Nd0QmwY= ;{id = 62298} 066973646E30330C74797065732D7369676E6564027762087369646E6C616273026E6C00001400010000003C000D0C6973646E2D61646472657373 isdn03.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" 066973646E30330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B91462706D45C9048E5E65843BEDE1213450CA7F2E39D3C8489AC384F45600941A143F65BE71B8CEEBB494E3D0B0743F4B560BB1A70E43FBDF6CE32535EDC2A274AFA4AC38B44DAD0DC0715AF923B78E8A67F92B8A7EF6E6FB932364FA906CB61FF252EF5F5743AA58ED681C1C7AE05085CBF77B5CA8AA81124210A69FB9C3BD isdn03.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uRRicG1FyQSOXmWEO+3hITRQyn8uOdPISJrDhPRWAJQaFD9lvnG4zuu0lOPQsHQ/S1YLsacOQ/vfbOMlNe3ConSvpKw4tE2tDcBxWvkjt46KZ/krin725vuTI2T6kGy2H/JS719XQ6pY7WgcHHrgUIXL93tcqKqBEkIQpp+5w70= ;{id = 62298} 066973646E30330C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C066973646E30340C74797065732D7369676E6564027762087369646E6C616273026E6C000006000008000003 isdn03.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn04.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC 066973646E30330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00A286BF39805CB0E0A5A46B01324C2F5F1F4D0120F7B12D303167075193EAFDC886C478831B056BC4A512CAA0E01617E5AB026CECC173CAE893029EBC7F61B7965A2BDE1924EE28627699A0016BB9A16B9ABDE68BFE377625CF38D63095A0EBF6765167CD9C2C768BE0404F779669324D6C0B47C408B1EC6B59704418503DC21F isdn03.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ooa/OYBcsOClpGsBMkwvXx9NASD3sS0wMWcHUZPq/ciGxHiDGwVrxKUSyqDgFhflqwJs7MFzyuiTAp68f2G3llor3hkk7ihidpmgAWu5oWuaveaL/jd2Jc841jCVoOv2dlFnzZwsdovgQE93lmkyTWwLR8QIsexrWXBEGFA9wh8= ;{id = 62298} 066973646E30340C74797065732D7369676E6564027762087369646E6C616273026E6C00001400010000003C00180C6973646E2D616464726573730A73756261646472657373 isdn04.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" 066973646E30340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BDE59E2A715FE714287678F2455B7013185771FDD72FAA327FA404F65F146087D972CAEB772E4531AABBE253C0ADDC386AAF88FB0B7D2CABDBA160650BF42B793F32004046F8E1E260BAF7AA7D83F4A50816752BBE1536F259C84D168A9649E8932D5115904B4027B2F818CDF80BF74368BB46B3F947EA6E3AA49FEC5138AB03 isdn04.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. veWeKnFf5xQodnjyRVtwExhXcf3XL6oyf6QE9l8UYIfZcsrrdy5FMaq74lPArdw4aq+I+wt9LKvboWBlC/QreT8yAEBG+OHiYLr3qn2D9KUIFnUrvhU28lnITRaKlknoky1RFZBLQCey+BjN+Av3Q2i7RrP5R+puOqSf7FE4qwM= ;{id = 62298} 066973646E30340C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100028026B780C74797065732D7369676E6564027762087369646E6C616273026E6C000006000008000003 isdn04.types-signed.wb.sidnlabs.nl. 3600 IN NSEC kx.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC 066973646E30340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003F56EC419B949B8DAFD999F12E8A305912E87F305228E138F9F8C79B007F96F8F455070368C2907597D366154DE2C105F520D7F20331D2BDB2E8444640A6CFFBABBBF148A7DB835C6A5E8051D5970886F5A173F6FAB7E392BA523B702B743FCFDC87200E97C7004AE0EDAABE8E56D362E5BF6F6030ECE9E99D693F13BACB2DD5 isdn04.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. P1bsQZuUm42v2ZnxLoowWRLofzBSKOE4+fjHmwB/lvj0VQcDaMKQdZfTZhVN4sEF9SDX8gMx0r2y6ERGQKbP+6u78Uin24Ncal6AUdWXCIb1oXP2+rfjkrpSO3ArdD/P3IcgDpfHAErg7aq+jlbTYuW/b2Aw7OnpnWk/E7rLLdU= ;{id = 62298} 026B780C74797065732D7369676E6564027762087369646E6C616273026E6C00002400010000003C0022000A026B780C74797065732D7369676E6564027762087369646E6C616273026E6C00 kx.types-signed.wb.sidnlabs.nl. 60 IN KX 10 kx.types-signed.wb.sidnlabs.nl. 026B780C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001D39E7A108FE9179D718086B31EBC38CC96D23B40E9AC2BB0D1AEDC1F25286E89915FFDF439C1D0CA7B6BDA60743B02C4CDE46BCF56D22F8BF6A71C69F892DB7938D9E448E1D20488D1BB42080D821A179BFB90AA67CDCF498A6DFDDF7644C8D6B74C45E4594734014C3D6D83F2B4F66A8E017AD60F021A5B3443CC79AC7E41E kx.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HTnnoQj+kXnXGAhrMevDjMltI7QOmsK7DRrtwfJShuiZFf/fQ5wdDKe2vaYHQ7AsTN5GvPVtIvi/anHGn4ktt5ONnkSOHSBIjRu0IIDYIaF5v7kKpnzc9Jim3933ZEyNa3TEXkWUc0AUw9bYPytPZqjgF61g8CGls0Q8x5rH5B4= ;{id = 62298} 026B780C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046B7830310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000803 kx.types-signed.wb.sidnlabs.nl. 3600 IN NSEC kx01.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC 026B780C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0049395CD27535477D94221632AD640FA34F2B67D648891ACA2B305BC6F668F5B4F3DAE55634FC04267A739A62B6BEAC977DB9391DA4F7B46F9E9C490EDF201CB78C8E043696E849DC46674216A6CAD9F9B1F613BE3FEA70F53A2A624FFAF183CA2E236B18C5EAC65F117E6A57F90549740C2E23B2C6D4D3D3DB87937DF1F7E1DE kx.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. STlc0nU1R32UIhYyrWQPo08rZ9ZIiRrKKzBbxvZo9bTz2uVWNPwEJnpzmmK2vqyXfbk5HaT3tG+enEkO3yAct4yOBDaW6EncRmdCFqbK2fmx9hO+P+pw9ToqYk/68YPKLiNrGMXqxl8RfmpX+QVJdAwuI7LG1NPT24eTffH34d4= ;{id = 62298} 046B7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00002400010000003C0023000A036B64630C74797065732D7369676E6564027762087369646E6C616273026E6C00 kx01.types-signed.wb.sidnlabs.nl. 60 IN KX 10 kdc.types-signed.wb.sidnlabs.nl. 046B7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00949BE15AB6863033083A462D713A52E437A08351F61F8A91052F2A111429D2904495D29A97150132A57F67A78F40CE79D8A51746517EA51B7319C2EF5ECD5E5FF92FE2CCF9FB6804A4EE36BBC83E0D4E17FD52BD71B11255CFD1590B060A78724F8AB38B3CC82240856B9580FF186804F98ADB0998C3324FA03BCD6604900FCF kx01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. lJvhWraGMDMIOkYtcTpS5Degg1H2H4qRBS8qERQp0pBEldKalxUBMqV/Z6ePQM552KUXRlF+pRtzGcLvXs1eX/kv4sz5+2gEpO42u8g+DU4X/VK9cbESVc/RWQsGCnhyT4qzizzIIkCFa5WA/xhoBPmK2wmYwzJPoDvNZgSQD88= ;{id = 62298} 046B7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046B7830320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000803 kx01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC kx02.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC 046B7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00704AE0DB56C1CD1641A737E824DEA1383870A246F9E19165794BCE02AD44A227E61D5722FAF02EE4BD253D4D8101B30F8EC43DFD04263B2248F1365F6F15AF1ED1E245C648D309B94282B1317811AB502082B9539CA801B5F90084F8AE24537286FB03CD857C7D5F1E21FD146B1BA4F391A1722B84FCCAA92493D3CD4A973FFF kx01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. cErg21bBzRZBpzfoJN6hODhwokb54ZFleUvOAq1EoifmHVci+vAu5L0lPU2BAbMPjsQ9/QQmOyJI8TZfbxWvHtHiRcZI0wm5QoKxMXgRq1AggrlTnKgBtfkAhPiuJFNyhvsDzYV8fV8eIf0Uaxuk85GhciuE/MqpJJPTzUqXP/8= ;{id = 62298} 046B7830320C74797065732D7369676E6564027762087369646E6C616273026E6C00002400010000003C0003000A00 kx02.types-signed.wb.sidnlabs.nl. 60 IN KX 10 . 046B7830320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009BCA45823DDD82F9A41FF021C0123EC35CBCC3AEC5A74355C009025DA3B24D287C1D96CB3E66A9932ED30B3581B1CEAB21EBBFC8D12A0A1844A87DC54DD857B46882F1CB8ACBB4DAEF220FD088EA0115D70DD4AF299A876E816FF75C0E8D11FACEF906C101B3A09BA48A6A842D422E6552E96D63280CF1A1CB7B13E078B701E0 kx02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. m8pFgj3dgvmkH/AhwBI+w1y8w67Fp0NVwAkCXaOyTSh8HZbLPmapky7TCzWBsc6rIeu/yNEqChhEqH3FTdhXtGiC8cuKy7Ta7yIP0IjqARXXDdSvKZqHboFv91wOjRH6zvkGwQGzoJukimqELUIuZVLpbWMoDPGhy3sT4Hi3AeA= ;{id = 62298} 046B7830320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029036C33320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000803 kx02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC l32.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC 046B7830320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00667C5D0349B39BB79BE3420CF11E3364066D1A268F2BF95E576CBE17CB122255692E2CCB5BA5591C7DC46A2CCA9D05D482A51BC566BE4AA3A022F5463A57B3DF2801C8A1C94E20402B2E0D6A749E7169A6D2F435377E46BEA71B1AECCD102B64B43F0B07D2F90BB028E343E60CFD6542F831780A83EF8699D673599AF22474C2 kx02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZnxdA0mzm7eb40IM8R4zZAZtGiaPK/leV2y+F8sSIlVpLizLW6VZHH3EaizKnQXUgqUbxWa+SqOgIvVGOlez3ygByKHJTiBAKy4NanSecWmm0vQ1N35GvqcbGuzNECtktD8LB9L5C7Ao40PmDP1lQvgxeAqD74aZ1nNZmvIkdMI= ;{id = 62298} 036C33320C74797065732D7369676E6564027762087369646E6C616273026E6C00006900010000003C0006000AC0000201 l32.types-signed.wb.sidnlabs.nl. 60 IN L32 10 192.0.2.1 036C33320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C32B9C1FF9DCBA100FA5F933658B71C8BA9352C433F959F1F9D13591779EF5C61D0D46B17DC545672E8B7116667604448EF6D78B2846B15140453B47AFF44055817C91C8ECCBCFB82EC8E7844527564DD647DFD30A817D2B15C7B2D3CD40525AD349F42A0D9D5AF7EA3F7214CC8A54DEBE70DDFA2A4587C060B50F8D5A1D64FC l32.types-signed.wb.sidnlabs.nl. 60 IN RRSIG L32 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. wyucH/ncuhAPpfkzZYtxyLqTUsQz+Vnx+dE1kXee9cYdDUaxfcVFZy6LcRZmdgREjvbXiyhGsVFARTtHr/RAVYF8kcjsy8+4LsjnhEUnVk3WR9/TCoF9KxXHstPNQFJa00n0Kg2dWvfqP3IUzIpU3r5w3foqRYfAYLUPjVodZPw= ;{id = 62298} 036C33320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100031036C36340C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000040 l32.types-signed.wb.sidnlabs.nl. 3600 IN NSEC l64.types-signed.wb.sidnlabs.nl. RRSIG NSEC L32 036C33320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003618267BD98B5FE7DFD44B66A31AFB1006B01D7302A460AD6FB44CC22FF677C27F60AA350572BBE6D7970A325E488946FF9257AA4D4CD6AC3C412931F9A5A828251206BF1B990B75A982ACE9150AD0BA13D5F5DF0566E501063BA7BB76AC4B7C549BE177B6E5A41DFF64292ECE0ED3667F7ACCCC07EA65C161128232FE092B25 l32.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Nhgme9mLX+ff1Etmoxr7EAawHXMCpGCtb7RMwi/2d8J/YKo1BXK75teXCjJeSIlG/5JXqk1M1qw8QSkx+aWoKCUSBr8bmQt1qYKs6RUK0LoT1fXfBWblAQY7p7t2rEt8VJvhd7blpB3/ZCkuzg7TZn96zMwH6mXBYRKCMv4JKyU= ;{id = 62298} 036C36340C74797065732D7369676E6564027762087369646E6C616273026E6C00006A00010000003C000A000A2A000D7800040503 l64.types-signed.wb.sidnlabs.nl. 60 IN L64 10 2a00:0d78:0004:0503 036C36340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006A08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0014BE0DF88D725B5049361F508D8AF7420D226D96C9F520CC62AF7DBA10BCEE7B5DCF85FA3172E51DBC25BF584D623CD315B14E92CBA30ABCF303D9EA20A7CFD55FE3AC76B031BBCE45223D82A42C06F7FC3CC9D2BA11E306085732AAAA8480340CFA8FAE1C75B20D9232F78146860BC6E35C968071248FC8BFE3DE9AE3B2E127 l64.types-signed.wb.sidnlabs.nl. 60 IN RRSIG L64 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. FL4N+I1yW1BJNh9QjYr3Qg0ibZbJ9SDMYq99uhC87ntdz4X6MXLlHbwlv1hNYjzTFbFOksujCrzzA9nqIKfP1V/jrHawMbvORSI9gqQsBvf8PMnSuhHjBghXMqqqhIA0DPqPrhx1sg2SMveBRoYLxuNcloBxJI/Iv+PemuOy4Sc= ;{id = 62298} 036C36340C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100031036C6F630C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000020 l64.types-signed.wb.sidnlabs.nl. 3600 IN NSEC loc.types-signed.wb.sidnlabs.nl. RRSIG NSEC L64 036C36340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003023888603877FDEC33CA964AEC98A491C65C570570BC883696C61E792C249F294E206799178F30984A2725376D7138756C7D3CCD7EB42833E728B8248C75A0BC5B62C097BF92332A988AC6DBC91D77D2B231FD0567A2484F3F85C8C9A4AA0D5596CE94A5457D782E3585B9B175E19F8D53DB9796717F8803134FCDDFB470BD1 l64.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MCOIhgOHf97DPKlkrsmKSRxlxXBXC8iDaWxh55LCSfKU4gZ5kXjzCYSiclN21xOHVsfTzNfrQoM+couCSMdaC8W2LAl7+SMyqYisbbyR130rIx/QVnokhPP4XIyaSqDVWWzpSlRX14LjWFubF14Z+NU9uXlnF/iAMTT83ftHC9E= ;{id = 62298} 036C6F630C74797065732D7369676E6564027762087369646E6C616273026E6C00001D00010000003C0010002325238CE82360854A10A000989A68 loc.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 00.000 N 24 39 00.000 E 10m 20m 2000m 20m 036C6F630C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0081730F8F1A032FB7770A530916F5DFF1E56B53E72BCBFFAF3C4DD2C42E4AA3F2BD998347EE6D5C7095AAB7D53FD3F2FC8094BCF132DFAC14D739FCA8BA1C297B941CED642E63FB671BE6168CF9AF00E7D0A0F7E7E23BFCCB0CBF29B52C01BD5006CF6D85087ACBBD8A197A89BAAD7B62EC388F2CF010C84A31FDFDD09B2760A5 loc.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. gXMPjxoDL7d3ClMJFvXf8eVrU+cry/+vPE3SxC5Ko/K9mYNH7m1ccJWqt9U/0/L8gJS88TLfrBTXOfyouhwpe5Qc7WQuY/tnG+YWjPmvAOfQoPfn4jv8ywy/KbUsAb1QBs9thQh6y72KGXqJuq17Yuw4jyzwEMhKMf390JsnYKU= ;{id = 62298} 036C6F630C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B056C6F6330310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000040003 loc.types-signed.wb.sidnlabs.nl. 3600 IN NSEC loc01.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC 036C6F630C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002DA87CBC56A6C94FCD24D4418C5D65B1D920883618D31E53E91346B176C330719120EC721EED5FE830CA504EBDDB131317F041D2D2C6D23C0EE0557D500B6D521718F043B015E199AC85EB3D8C386C24A69F9E519F50F620449267EF36A08D1B03E154B51B8D0B224CFCD87381DBFCA2CC7B97738B16BEB21FD704BEF62BBFD9 loc.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Lah8vFamyU/NJNRBjF1lsdkgiDYY0x5T6RNGsXbDMHGRIOxyHu1f6DDKUE692xMTF/BB0tLG0jwO4FV9UAttUhcY8EOwFeGZrIXrPYw4bCSmn55Rn1D2IESSZ+82oI0bA+FUtRuNCyJM/Nhzgdv8osx7l3OLFr6yH9cEvvYrv9k= ;{id = 62298} 056C6F6330310C74797065732D7369676E6564027762087369646E6C616273026E6C00001D00010000003C0010002325238CE82360854A10A000989A68 loc01.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 00.000 N 24 39 00.000 E 10m 20m 2000m 20m 056C6F6330310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00128D516F8CE942540EE7A0DB557DC7B044C9A90C367A6F87C7826A2BAB0B955CE13FFEDB836969532ACA1492651E61EDE7BE9BF9ECBE97D36318117DD337FB82F2498D725080551831ED9D15E9F9FA7A421E168482E6483F39124BF2F8C6427FB347FBBF1C651F5E05353F5B5F8DC99C27268A6ED27D1C7DCE314A91CD8980D8 loc01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Eo1Rb4zpQlQO56DbVX3HsETJqQw2em+Hx4JqK6sLlVzhP/7bg2lpUyrKFJJlHmHt576b+ey+l9NjGBF90zf7gvJJjXJQgFUYMe2dFen5+npCHhaEguZIPzkSS/L4xkJ/s0f7vxxlH14FNT9bX43JnCcmim7SfRx9zjFKkc2JgNg= ;{id = 62298} 056C6F6330310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B056C6F6330320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000040003 loc01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC loc02.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC 056C6F6330310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000E90DD4116B8D7EE57446312864F4B54254EFF6C74C54FCA7225105700FD092C8EBFAFA0867A126AFF6E2704828A0260A4C2BC0A715F8B5E4F7DFE25D8EA8997A7D85A6417983AE45263BF9B44020B5A3FDF6D054CA77AC70E194C9542382E5CB97EB4E401AF10859052BA0E3B98CED2FD230C6EE6DECEF62B6A12895D966C33 loc01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DpDdQRa41+5XRGMShk9LVCVO/2x0xU/KciUQVwD9CSyOv6+ghnoSav9uJwSCigJgpMK8CnFfi15Pff4l2OqJl6fYWmQXmDrkUmO/m0QCC1o/320FTKd6xw4ZTJVCOC5cuX605AGvEIWQUroOO5jO0v0jDG7m3s72K2oSiV2WbDM= ;{id = 62298} 056C6F6330320C74797065732D7369676E6564027762087369646E6C616273026E6C00001D00010000003C0010002300138CE82360854A10A000989A68 loc02.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 00.000 N 24 39 00.000 E 10m 20m 0.00m 10m 056C6F6330320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0053D5052F1A36F741BBEA1F58930593F80F6570F1AC9963F6B960BE80912EA5865C2372DECE6C528778451C8D871BA01B2021DA7A9B7AF629EC108738410AE830DF2DEF622B35A1EB368E796897F5285E64B10F7F747796D009CBEE82E1D8A8DA0970649443E3B5363579AC9C4E6AAFD7C77328755B8B8A01A9CF73DBE4B16068 loc02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. U9UFLxo290G76h9YkwWT+A9lcPGsmWP2uWC+gJEupYZcI3LezmxSh3hFHI2HG6AbICHaept69insEIc4QQroMN8t72IrNaHrNo55aJf1KF5ksQ9/dHeW0AnL7oLh2KjaCXBklEPjtTY1eaycTmqv18dzKHVbi4oBqc9z2+SxYGg= ;{id = 62298} 056C6F6330320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100028026C700C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000040003 loc02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC lp.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC 056C6F6330320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B277F761834847BCDE78EAED1C5C063E0FB4B0B4BBAA544BA5440AD2864B96CB2BD71CEA84E774F55DEEC7D60C630CCA4215A5443AD532FADCEB46463EF4D600E96F654161082D2192C2AC6B582B65F707B49B76776C9AE56AD8C71CB44433FD20178EA30AF3181C31DD4B04C54D3C5E964A39E13C0C07984B04D61A3EB54221 loc02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. snf3YYNIR7zeeOrtHFwGPg+0sLS7qlRLpUQK0oZLlssr1xzqhOd09V3ux9YMYwzKQhWlRDrVMvrc60ZGPvTWAOlvZUFhCC0hksKsa1grZfcHtJt2d2ya5WrYxxy0RDP9IBeOowrzGBwx3UsExU08XpZKOeE8DAeYSwTWGj61QiE= ;{id = 62298} 026C700C74797065732D7369676E6564027762087369646E6C616273026E6C00006B00010000003C001B000A0B6C36342D7375626E657431076578616D706C6503636F6D00 lp.types-signed.wb.sidnlabs.nl. 60 IN LP 10 l64-subnet1.example.com. 026C700C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C008FDB63E2B70629AD5AF5DE907DD330C703F4A35998D44FB731740A163AD0918659353FBB0D6DCFBB1A6B025315992DD9A45721507D4F83536FDA020394720210B03E35894C9D8766CEDE5E49FC5D52F460684D43301344BEA0C62EF3C6E6392A412A3DE5795AA6543D1D410D40F8017660FA47A0AE7E89FB23F7C83A9DD3CFE2 lp.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. j9tj4rcGKa1a9d6QfdMwxwP0o1mY1E+3MXQKFjrQkYZZNT+7DW3PuxprAlMVmS3ZpFchUH1Pg1Nv2gIDlHICELA+NYlMnYdmzt5eSfxdUvRgaE1DMBNEvqDGLvPG5jkqQSo95XlaplQ9HUENQPgBdmD6R6Cufon7I/fIOp3Tz+I= ;{id = 62298} 026C700C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100030026D620C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000010 lp.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mb.types-signed.wb.sidnlabs.nl. RRSIG NSEC LP 026C700C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0007399B93DB821BB06930D3DB5812239EB2E3709DC426FC4F5BEFE8F93A9694DF1D695EBE37BFA859CD4AF03BA9A060754C2417CA45CB47C2C1453725D035B80E2B4421993EA50C65FBE2F52CDF09262185BEFB53A3DDC55716C7BA89A34757E72E0DFAB1C768DC6948006F5D6BF355E4003B6BCAF5BA10D9F428AB0EFBDD4DFA lp.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Bzmbk9uCG7BpMNPbWBIjnrLjcJ3EJvxPW+/o+TqWlN8daV6+N7+oWc1K8DupoGB1TCQXykXLR8LBRTcl0DW4DitEIZk+pQxl++L1LN8JJiGFvvtTo93FVxbHuomjR1fnLg36scdo3GlIAG9da/NV5AA7a8r1uhDZ9CirDvvdTfo= ;{id = 62298} 026D620C74797065732D7369676E6564027762087369646E6C616273026E6C00000700010000003C0025076D61696C626F780C74797065732D7369676E6564027762087369646E6C616273026E6C00 mb.types-signed.wb.sidnlabs.nl. 60 IN MB mailbox.types-signed.wb.sidnlabs.nl. 026D620C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000708050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001CC364B63B9214A10E49128940E5399CCB27BDA74F5FA8FE31E24A87D59B4AF83D67B487A5A9017AA0D348C291BED2893D3DDF1F7D8D80C8E514E57C4D26ACE7D6C9069CC76DF9DF04C5818D56F88D9CECC32B5F2A67615CBA1E491AD58D4C1E40B444DCE206D2ABCA13FC12785D1CD1F309547E9E11C7BE6B1A95D0900D10D6 mb.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HMNktjuSFKEOSRKJQOU5nMsnvadPX6j+MeJKh9WbSvg9Z7SHpakBeqDTSMKRvtKJPT3fH32NgMjlFOV8TSas59bJBpzHbfnfBMWBjVb4jZzswytfKmdhXLoeSRrVjUweQLRE3OIG0qvKE/wSeF0c0fMJVH6eEce+axqV0JANENY= ;{id = 62298} 026D620C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046D6230310C74797065732D7369676E6564027762087369646E6C616273026E6C000006010000000003 mb.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mb01.types-signed.wb.sidnlabs.nl. MB RRSIG NSEC 026D620C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009BC273C87D910A2FE6010F4BF279EE22C0E3AF85FF484673199FCB2BB95B450DF4E48D283930B18260099C22E2E27DBDA2A09C3F581ACA6289A1AD024A95DADA589EDA98CDB96035BD3B5C422337426E29C9CC0594D527663A71001994B62CACCDE86D6F789A26DA5FB9700A154B0AD932F9C8966842FB78C390A0F474BE24D9 mb.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. m8JzyH2RCi/mAQ9L8nnuIsDjr4X/SEZzGZ/LK7lbRQ305I0oOTCxgmAJnCLi4n29oqCcP1gaymKJoa0CSpXa2lie2pjNuWA1vTtcQiM3Qm4pycwFlNUnZjpxABmUtiyszehtb3iaJtpfuXAKFUsK2TL5yJZoQvt4w5Cg9HS+JNk= ;{id = 62298} 046D6230310C74797065732D7369676E6564027762087369646E6C616273026E6C00000800010000003C0025076D61646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00 mb01.types-signed.wb.sidnlabs.nl. 60 IN MG madname.types-signed.wb.sidnlabs.nl. 046D6230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C004CFEB8707B2EC2019A0F65F1B2BF788CF9E71769A5EABFEC7E1E8D5F5D0443D7F87F4C33751ADE049DEBBFEEFA1095FEBD99A24FBD2F645ABD8E760FC45EA737BCD848FB972C9AA85C6F6A750180D74CA2B35996B7920B0747C352DCD29EDD4147E45AA417C78C4C5EFF85BFE97601BB7819C3241245708E171472D3854E18FF mb01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. TP64cHsuwgGaD2Xxsr94jPnnF2ml6r/sfh6NX10EQ9f4f0wzdRreBJ3rv+76EJX+vZmiT70vZFq9jnYPxF6nN7zYSPuXLJqoXG9qdQGA10yis1mWt5ILB0fDUtzSnt1BR+RapBfHjExe/4W/6XYBu3gZwyQSRXCOFxRy04VOGP8= ;{id = 62298} 046D6230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046D6230320C74797065732D7369676E6564027762087369646E6C616273026E6C000006008000000003 mb01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mb02.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC 046D6230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0094091AD1B69EBFC2FAB5AC5A17FFAECF5992675FA01E67FC820B1F6A139F4B3D26180D0E31FC773F7D095A981AA9E123567CE6C5A4DCA7D4A5AAC7BAFD208BD171E1F6CC5C7932A9F019AF1A059DF8796355946053575D6ACD5F7C60D2D2272B2DC876A27707D04110209A33704FEEB41E578E063C94A004BCFF0AF8341DD100 mb01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. lAka0baev8L6taxaF/+uz1mSZ1+gHmf8ggsfahOfSz0mGA0OMfx3P30JWpgaqeEjVnzmxaTcp9Slqse6/SCL0XHh9sxceTKp8BmvGgWd+HljVZRgU1ddas1ffGDS0icrLch2oncH0EEQIJozcE/utB5XjgY8lKAEvP8K+DQd0QA= ;{id = 62298} 046D6230320C74797065732D7369676E6564027762087369646E6C616273026E6C00000800010000003C000100 mb02.types-signed.wb.sidnlabs.nl. 60 IN MG . 046D6230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0047D3D581302DFE1B5C5F10A927E93B44AA4D15702C88BABA39814B65ADBFE84E68FFFBDDF35CD97DEB612ED98284C0CB80112D7DA0C03CE3ABF0BD0D589646BC029C4D1EDF435D3D86A76AA3DED58B39C68E5BF778193A0BAD65988ED6F03ED16DA32562D145B4E8C79AB7A2A4277EF73D468FE7FF1DD3CA336BB056A8403231 mb02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R9PVgTAt/htcXxCpJ+k7RKpNFXAsiLq6OYFLZa2/6E5o//vd81zZfethLtmChMDLgBEtfaDAPOOr8L0NWJZGvAKcTR7fQ109hqdqo97ViznGjlv3eBk6C61lmI7W8D7RbaMlYtFFtOjHmreipCd+9z1Gj+f/HdPKM2uwVqhAMjE= ;{id = 62298} 046D6230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100028026D640C74797065732D7369676E6564027762087369646E6C616273026E6C000006008000000003 mb02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC md.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC 046D6230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0082204D6DA0937D633C74774FC492D17B57D4470941C1D66F64D0321DC5F442DF6DBAD24F5F70816ED9D01DAE94C2988DBE71FBDD5FC2EFC4EF2C1706EBF22C51A71E1E50F8B8A3110A8A62F38396A0446DA43A0DC60FF1DFCA64E11602D5BB5FEF3C8B0AAF0EF9EC9F756AC4AC9B429D62FD4EC5978E4AA2074372CC3D164B4A mb02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. giBNbaCTfWM8dHdPxJLRe1fURwlBwdZvZNAyHcX0Qt9tutJPX3CBbtnQHa6UwpiNvnH73V/C78TvLBcG6/IsUaceHlD4uKMRCopi84OWoERtpDoNxg/x38pk4RYC1btf7zyLCq8O+eyfdWrErJtCnWL9TsWXjkqiB0NyzD0WS0o= ;{id = 62298} 026D640C74797065732D7369676E6564027762087369646E6C616273026E6C00000300010000003C002D0F6D61696C64657374696E6174696F6E0C74797065732D7369676E6564027762087369646E6C616273026E6C00 md.types-signed.wb.sidnlabs.nl. 60 IN MD maildestination.types-signed.wb.sidnlabs.nl. 026D640C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0057CB1B8E5DC61C97139673CCAC5C894AC816890D67537CDDC72492A206D9086449A145D318DDD2F02420E149D8C48D1E1512D8777D628C347508421FD226F87222D0C71F1F863B320761D4011B5AABC1850336D1185024F978CA5F7C7F77A1947EB45DABAD39712CBA6E07DF42D8E89358BE347D8BC02F2D4980FC720ED5C92D md.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MD 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. V8sbjl3GHJcTlnPMrFyJSsgWiQ1nU3zdxySSogbZCGRJoUXTGN3S8CQg4UnYxI0eFRLYd31ijDR1CEIf0ib4ciLQxx8fhjsyB2HUARtaq8GFAzbRGFAk+XjKX3x/d6GUfrRdq605cSy6bgffQtjok1i+NH2LwC8tSYD8cg7VyS0= ;{id = 62298} 026D640C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100028026D660C74797065732D7369676E6564027762087369646E6C616273026E6C000006100000000003 md.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mf.types-signed.wb.sidnlabs.nl. MD RRSIG NSEC 026D640C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00570F2EB40A47A454EE136ABB1989E6161E486248ECDB5C6E139E1CB53857C6C3500706B102B21B4245961F85626234C8DC2DE65F32E07476009BD26C3FB6D1CE8AD9E9911FBCFFC96F897352FC6C1C19426B40CA64E7025CA44E3BC36AEACBBDC2C775CC9F2FE0ECA14CD0667DBB61B29CFE425AF496C1B2AC05AA75AC8E7911 md.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Vw8utApHpFTuE2q7GYnmFh5IYkjs21xuE54ctThXxsNQBwaxArIbQkWWH4ViYjTI3C3mXzLgdHYAm9JsP7bRzorZ6ZEfvP/Jb4lzUvxsHBlCa0DKZOcCXKROO8Nq6su9wsd1zJ8v4OyhTNBmfbthspz+Qlr0lsGyrAWqdayOeRE= ;{id = 62298} 026D660C74797065732D7369676E6564027762087369646E6C616273026E6C00000400010000003C002B0D6D61696C666F727761726465720C74797065732D7369676E6564027762087369646E6C616273026E6C00 mf.types-signed.wb.sidnlabs.nl. 60 IN MF mailforwarder.types-signed.wb.sidnlabs.nl. 026D660C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001A68FCEAB32F07C83CF70A6B285F4205E1BAF64BAEDB5EDAC29D690B3BD10EE0E5E40A5160CEEAF65EA8C877DBB02F925E779ED32002FC8E23E719ACD88451B43EE4B9D9B40ECEE87DFC904B865C89460AA0F7A6B1959C05AE623CFF8D42E3BF8CF37841462642E6F3DD8E4184F091382CAC777AA03424A4FD98665620D64E37 mf.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Gmj86rMvB8g89wprKF9CBeG69kuu217awp1pCzvRDuDl5ApRYM7q9l6oyHfbsC+SXnee0yAC/I4j5xms2IRRtD7kudm0Ds7offyQS4ZciUYKoPemsZWcBa5iPP+NQuO/jPN4QUYmQubz3Y5BhPCROCysd3qgNCSk/ZhmViDWTjc= ;{id = 62298} 026D660C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100028026D670C74797065732D7369676E6564027762087369646E6C616273026E6C000006080000000003 mf.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mg.types-signed.wb.sidnlabs.nl. MF RRSIG NSEC 026D660C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006891F178CD9142759EEB12DF1FBE44606BC4A6EA38B507BA70B861280A628121AFF2CB3CA696CF7B5EEA4AF1713C9148A69FAFCA3AC0B6EF3D02F73B70FE143EE5DB44A784DD757EAA81FBDD44C9E85B3E8B5A77742B977969E95CD9BFAF59C6A24EEDABE0428ACB48385BEC12245337486C50F1FBD5E05D53B21CE2557A067A mf.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. aJHxeM2RQnWe6xLfH75EYGvEpuo4tQe6cLhhKApigSGv8ss8ppbPe17qSvFxPJFIpp+vyjrAtu89Avc7cP4UPuXbRKeE3XV+qoH73UTJ6Fs+i1p3dCuXeWnpXNm/r1nGok7tq+BCistIOFvsEiRTN0hsUPH71eBdU7Ic4lV6Bno= ;{id = 62298} 026D670C74797065732D7369676E6564027762087369646E6C616273026E6C00000800010000003C002D0F6D61696C67726F75706D656D6265720C74797065732D7369676E6564027762087369646E6C616273026E6C00 mg.types-signed.wb.sidnlabs.nl. 60 IN MG mailgroupmember.types-signed.wb.sidnlabs.nl. 026D670C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001BC62AC02A5E0627A39F789FC2719F8486B38D9260CC3518FE9F6DA9DD2B3C6E2EC01BCCA4226BC7A9A46FC4D63C05E64DFF8D587972E6D8B978E81515B96C7D5DAC1E5EEC70AE7300DB0808598BD3981F2D3A163C275BA4527772EAEFE4F1D62AF94060E66DF36B341D673714B3281E8E4E68D374846AEF80ADD07975C7102B mg.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. G8YqwCpeBiejn3ifwnGfhIazjZJgzDUY/p9tqd0rPG4uwBvMpCJrx6mkb8TWPAXmTf+NWHly5ti5eOgVFblsfV2sHl7scK5zANsICFmL05gfLToWPCdbpFJ3curv5PHWKvlAYOZt82s0HWc3FLMoHo5OaNN0hGrvgK3QeXXHECs= ;{id = 62298} 026D670C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046D6730310C74797065732D7369676E6564027762087369646E6C616273026E6C000006008000000003 mg.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mg01.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC 026D670C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00666DCB78D770395351FAB42CF08218A934B11831417EB46CA81A2B99817FAF1557708C92FAD03CAFB548E01981B61C1F3286D8B3716803A69B1FBF012B544CB1F091EB6907F444E70CCF6C4EFDED6ED150A1DC806E22A155F5742C96772F132A9E24C79411FCD3C6CE4BCB0926DA2E8699E3C18FA54EB319C099315731082676 mg.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Zm3LeNdwOVNR+rQs8IIYqTSxGDFBfrRsqBormYF/rxVXcIyS+tA8r7VI4BmBthwfMobYs3FoA6abH78BK1RMsfCR62kH9ETnDM9sTv3tbtFQodyAbiKhVfV0LJZ3LxMqniTHlBH808bOS8sJJtouhpnjwY+lTrMZwJkxVzEIJnY= ;{id = 62298} 046D6730310C74797065732D7369676E6564027762087369646E6C616273026E6C00000800010000003C0025076D676D6E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00 mg01.types-signed.wb.sidnlabs.nl. 60 IN MG mgmname.types-signed.wb.sidnlabs.nl. 046D6730310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0057584E8D70217F7AF5A66CA57BE5EB5168D8735C8F09CBCEC36E570DBCA923597948367C13E31B8CCB531E4C29521B321F2270BDE1E7840EF355BA34E9E4C55AB03864F60EC93582AF2340884502709920EAD33E3A3410E366D5B041D1DDDCD2FBA933FC8D2BF4D21A369A786714C594511428244432FA7392F234012B457C48 mg01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. V1hOjXAhf3r1pmyle+XrUWjYc1yPCcvOw25XDbypI1l5SDZ8E+MbjMtTHkwpUhsyHyJwveHnhA7zVbo06eTFWrA4ZPYOyTWCryNAiEUCcJkg6tM+OjQQ42bVsEHR3dzS+6kz/I0r9NIaNpp4ZxTFlFEUKCREMvpzkvI0AStFfEg= ;{id = 62298} 046D6730310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046D6730320C74797065732D7369676E6564027762087369646E6C616273026E6C000006008000000003 mg01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mg02.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC 046D6730310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00965EA55B0D6FA2B176CF0CDC1C8763BD76668CEE9FB639172C8ABEB11C61BC742CF8C9CE4565FD9A708E51BC214D812CCD837740688CA3441914F513470B73E38F3BA004590376FC7F85D7EC333870F1CA710B5074DEA47C071C1CC7BE67E416093C3E8BC244144E6BFDC22545B30D5D5AC1B5E0AE1D3C574D49C0D4412CBADF mg01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ll6lWw1vorF2zwzcHIdjvXZmjO6ftjkXLIq+sRxhvHQs+MnORWX9mnCOUbwhTYEszYN3QGiMo0QZFPUTRwtz4487oARZA3b8f4XX7DM4cPHKcQtQdN6kfAccHMe+Z+QWCTw+i8JEFE5r/cIlRbMNXVrBteCuHTxXTUnA1EEsut8= ;{id = 62298} 046D6730320C74797065732D7369676E6564027762087369646E6C616273026E6C00000800010000003C000100 mg02.types-signed.wb.sidnlabs.nl. 60 IN MG . 046D6730320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00814A48EC9E056077137560D1ACCF0601D163208F0478CB8954ED9D2ACCEB12FF2AEDBF43A6CF4A9C4D206758D63A977BE9D572D15C1D93E2597BFEF64165DB1F79BF2ED93186300ADB42DA5F2C6CEA2F10A3EFB512EB7DD1D1D02B9E525072FA54B966687F32EC1A2ADBFF0D43B75F1AE733DEE36C6355568D6BA62DCAD3D980 mg02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. gUpI7J4FYHcTdWDRrM8GAdFjII8EeMuJVO2dKszrEv8q7b9Dps9KnE0gZ1jWOpd76dVy0Vwdk+JZe/72QWXbH3m/LtkxhjAK20LaXyxs6i8Qo++1Eut90dHQK55SUHL6VLlmaH8y7Boq2/8NQ7dfGucz3uNsY1VWjWumLcrT2YA= ;{id = 62298} 046D6730320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B056D696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C000006008000000003 mg02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC minfo.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC 046D6730320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00393AEBDF51BD90EA8161A2A20DC8EE9A0EE7F37F29381755FCB17BC3A99ABF0D85509F32E02D063AF1904868F5D8E87821CD5F0737ECE04A740BA6F9563E7C7567AC2C92418B71AA387C72BFD6CF68BB698C3BC808DD81AB44F4D9066266E9BB5CC747421F4FE6B22915E93A0138A04403C3FA42D77A460613CA8BD1F43EF314 mg02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OTrr31G9kOqBYaKiDcjumg7n838pOBdV/LF7w6mavw2FUJ8y4C0GOvGQSGj12Oh4Ic1fBzfs4Ep0C6b5Vj58dWesLJJBi3GqOHxyv9bPaLtpjDvICN2Bq0T02QZiZum7XMdHQh9P5rIpFek6ATigRAPD+kLXekYGE8qL0fQ+8xQ= ;{id = 62298} 056D696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00000E00010000003C002209626F786D617374657203666F6F0362617200076D61696C626F7805746865726500 minfo.types-signed.wb.sidnlabs.nl. 60 IN MINFO boxmaster.foo.bar. mailbox.there. 056D696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000E08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00640FE71C2231D066C2A2415B3C73B684CBDA3C97AC22FDE008E8159A396ECC6ACEE6024CCB27AB34B626C15B308937487F8B25FB08BDE36D723C984CE70855648F8DC378B1063BF0837F57E6A606E123FAD94201D90B9418125C37E5D5AE38681A696381D35C6CADEEE076EA56C6469784EB845DCEE763EEDCBF6D442F7D8E07 minfo.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZA/nHCIx0GbCokFbPHO2hMvaPJesIv3gCOgVmjluzGrO5gJMyyerNLYmwVswiTdIf4sl+wi9421yPJhM5whVZI+Nw3ixBjvwg39X5qYG4SP62UIB2QuUGBJcN+XVrjhoGmljgdNcbK3u4HbqVsZGl4TrhF3O52Pu3L9tRC99jgc= ;{id = 62298} 056D696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D076D696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000200000003 minfo.types-signed.wb.sidnlabs.nl. 3600 IN NSEC minfo01.types-signed.wb.sidnlabs.nl. MINFO RRSIG NSEC 056D696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00715B36317F7022514399CFB4D3E84469AB69A749230AD914CEA2408C60102910EF87DA103961413A6F6F133B31AD42C13B380B344A6458BBF371CFA2930E699BDDF4EBA5ADF24E7068B99B0EA20B032D64C29B91F081554EA8C5AC6DEAD135720EBA808FB689073DACD3AC3DF646C4DAF4A2960AC3650B60DCF8C1BCDF8D25B7 minfo.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. cVs2MX9wIlFDmc+00+hEaatpp0kjCtkUzqJAjGAQKRDvh9oQOWFBOm9vEzsxrULBOzgLNEpkWLvzcc+ikw5pm93066Wt8k5waLmbDqILAy1kwpuR8IFVTqjFrG3q0TVyDrqAj7aJBz2s06w99kbE2vSilgrDZQtg3PjBvN+NJbc= ;{id = 62298} 076D696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00000E00010000003C00020000 minfo01.types-signed.wb.sidnlabs.nl. 60 IN MINFO . . 076D696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000E08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003CB31E1C90A158134ED8B59B5B1B2E2281DBA2FA52DC1260108AAB3E0D2E84EDFC54CCD08E7957476271D95072041B41D697AFE0B86EAD4B12CDD63197975CB5C595FF8E50FCC9C94A884EC3D084C498649707FF47D554D2514560B975DEF1D6F136E5468EA13BFB467BD23156CEDFBD0D1C5B3DB41249C5512BF4C0E4A29478 minfo01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. PLMeHJChWBNO2LWbWxsuIoHbovpS3BJgEIqrPg0uhO38VMzQjnlXR2Jx2VByBBtB1pev4LhurUsSzdYxl5dctcWV/45Q/MnJSohOw9CExJhklwf/R9VU0lFFYLl13vHW8TblRo6hO/tGe9IxVs7fvQ0cWz20EknFUSv0wOSilHg= ;{id = 62298} 076D696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100028026D720C74797065732D7369676E6564027762087369646E6C616273026E6C000006000200000003 minfo01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mr.types-signed.wb.sidnlabs.nl. MINFO RRSIG NSEC 076D696E666F30310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BA0C86E32AC03E9A5DD77FC6172BAD10148AF3DEDE44090ED72C145A086BE39D1424B95B1132D82C8580EAC47807EA92DC722E3E6AFEE57086AD2A6A0C0D80170CDB26DD9051FC920F2C9C30BA53564E0F5525256D06335931145E541AD6BA8B63A653368D52A972C7EA0A2D5103CB1A417A6EEA5811283335EFA0E546EC289D minfo01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ugyG4yrAPppd13/GFyutEBSK897eRAkO1ywUWghr450UJLlbETLYLIWA6sR4B+qS3HIuPmr+5XCGrSpqDA2AFwzbJt2QUfySDyycMLpTVk4PVSUlbQYzWTEUXlQa1rqLY6ZTNo1SqXLH6gotUQPLGkF6bupYESgzNe+g5UbsKJ0= ;{id = 62298} 026D720C74797065732D7369676E6564027762087369646E6C616273026E6C00000900010000003C00280A6D61696C72656E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00 mr.types-signed.wb.sidnlabs.nl. 60 IN MR mailrename.types-signed.wb.sidnlabs.nl. 026D720C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006C10E517DED2588CFF9B07DB683EEBD0BCA48DEC046A2FD0253AC54A4635954F24881192E3D56F9D016D779AF456D77A9493CC7AC166A12F8245F7DDB9E66D46170CAB0FA131A8A342542721C4BA15F9EBBBFAD60AF28A69F3D45FF478D511D8D0ECE21CE2B190427E7F83D1CDB68780CCECB1DE3834C5789CA72238985797C9 mr.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. bBDlF97SWIz/mwfbaD7r0LykjewEai/QJTrFSkY1lU8kiBGS49VvnQFtd5r0Vtd6lJPMesFmoS+CRffdueZtRhcMqw+hMaijQlQnIcS6Ffnru/rWCvKKafPUX/R41RHY0OziHOKxkEJ+f4PRzbaHgMzssd44NMV4nKciOJhXl8k= ;{id = 62298} 026D720C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046D7230310C74797065732D7369676E6564027762087369646E6C616273026E6C000006004000000003 mr.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mr01.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC 026D720C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0077658CCDA142E59BD47C633C857A63AFCC9C32FFF5CB37C1C56BF2F96F2D0A2EA1994B7D6CACF3B03C4ED36F678A86BCA10667255B7B83E7E795A0CF1472846CD62BDE14A5D2603D8ED914644787C0451DE326B4FCACF7F327447D2FA21FDD160D95DD9AB74909781368B79225FA261585F5F1DD6DEA360110E86F8380B8B1E2 mr.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. d2WMzaFC5ZvUfGM8hXpjr8ycMv/1yzfBxWvy+W8tCi6hmUt9bKzzsDxO029nioa8oQZnJVt7g+fnlaDPFHKEbNYr3hSl0mA9jtkUZEeHwEUd4ya0/Kz38ydEfS+iH90WDZXdmrdJCXgTaLeSJfomFYX18d1t6jYBEOhvg4C4seI= ;{id = 62298} 046D7230310C74797065732D7369676E6564027762087369646E6C616273026E6C00000900010000003C0024066D726E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00 mr01.types-signed.wb.sidnlabs.nl. 60 IN MR mrname.types-signed.wb.sidnlabs.nl. 046D7230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003619B48BD4C137D18DF7D40B68F3B43568F46249202A98F0AEBBE124E07993CA4F33CC17D04FBFC74B594F203D8CE2B6710A56D16021C43A6F32F4C00D0A0602A3F2631917EEDC572B11E1ADBD3975E3CA7C975138819C2CED5E6D0A381CF6A0CF3345EA9A7444D71C2DA6B218491E0AF0AF0A36027D36704256E33C99CE4521 mr01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Nhm0i9TBN9GN99QLaPO0NWj0YkkgKpjwrrvhJOB5k8pPM8wX0E+/x0tZTyA9jOK2cQpW0WAhxDpvMvTADQoGAqPyYxkX7txXKxHhrb05dePKfJdROIGcLO1ebQo4HPagzzNF6pp0RNccLaayGEkeCvCvCjYCfTZwQlbjPJnORSE= ;{id = 62298} 046D7230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046D7230320C74797065732D7369676E6564027762087369646E6C616273026E6C000006004000000003 mr01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mr02.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC 046D7230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00478637D403C323DF3B801E3C40BBDA18D9E02ABF93E850EC7EE90D076921B838E00BA668C829FFCC7D37FDCB8E2737FB3AF8249B9066A7A5D1F3DB622A307917A5F9F928321F21A57E5BD2534DDF7CFF5ACC15EE240DC3B43C6704CADAE3439C98D17A708BE316D1BFB38F2ED62C8671E0D8B0952D816BD2277D33C5F7592E26 mr01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R4Y31APDI987gB48QLvaGNngKr+T6FDsfukNB2khuDjgC6ZoyCn/zH03/cuOJzf7Ovgkm5Bmp6XR89tiKjB5F6X5+SgyHyGlflvSU03ffP9azBXuJA3DtDxnBMra40OcmNF6cIvjFtG/s48u1iyGceDYsJUtgWvSJ30zxfdZLiY= ;{id = 62298} 046D7230320C74797065732D7369676E6564027762087369646E6C616273026E6C00000900010000003C000100 mr02.types-signed.wb.sidnlabs.nl. 60 IN MR . 046D7230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001C8B4D5C345AEC9A7C43DD44F66E2BED6C42AC9857891E07BE2D649E754B3BDF2B4EE2EE90DB60092787B3670DD62B88A5A5CB69D77C85A01905E2BE3B9668F4CEDB685F901F43A4705C34C1A68A8B1627B04003FC06607E82B7D2A68E965899623F6D53E51D88850CC48C5BC8DAD40DF7FA4BD62B2986386B35676F085197E1 mr02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HItNXDRa7Jp8Q91E9m4r7WxCrJhXiR4Hvi1knnVLO98rTuLukNtgCSeHs2cN1iuIpaXLadd8haAZBeK+O5Zo9M7baF+QH0OkcFw0waaKixYnsEAD/AZgfoK30qaOlliZYj9tU+UdiIUMxIxbyNrUDff6S9YrKYY4azVnbwhRl+E= ;{id = 62298} 046D7230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100028026D780C74797065732D7369676E6564027762087369646E6C616273026E6C000006004000000003 mr02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mx.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC 046D7230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002C776E37CBA1FFA37C542A2B5BC77FC50379C59CD7A4E9B7D7A378A1D06BB2D259ED0F4E0F4648BC673AF8455435D2E79E833B87CDEF64C5BB0B42839ACE1C6565E2A3F582F33A01444D67CE64720207370C87B269A1E93B0BDFE4995CB3AE7B183E54C37F7317E249B6725B27564AF90BE3D555E49FE274162FF8C4621E2CD7 mr02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LHduN8uh/6N8VCorW8d/xQN5xZzXpOm316N4odBrstJZ7Q9OD0ZIvGc6+EVUNdLnnoM7h83vZMW7C0KDms4cZWXio/WC8zoBRE1nzmRyAgc3DIeyaaHpOwvf5Jlcs657GD5Uw39zF+JJtnJbJ1ZK+Qvj1VXkn+J0Fi/4xGIeLNc= ;{id = 62298} 026D780C74797065732D7369676E6564027762087369646E6C616273026E6C00000F00010000003C002E000A0E6D61696C646F65736E74776F726B0C74797065732D7369676E6564027762087369646E6C616273026E6C00 mx.types-signed.wb.sidnlabs.nl. 60 IN MX 10 maildoesntwork.types-signed.wb.sidnlabs.nl. 026D780C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000F08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000E83AAE736148C3E5C0800C673F617BAB0CB1A25C843BB1AAA3BBB2D2535F1C9F6FD35EA14B044A24A80EEF27160DBEFCD4F2F52C69439F5B4A6B37E24728A1D64D59DC82888291994AE4302D58DDCE4EDAF99DA1C1FD71874243C0E624E8ADB82FC9415C86E7C7936AEF27E67AC262869FEF59989414EB4FB4337DCB111DBF8 mx.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DoOq5zYUjD5cCADGc/YXurDLGiXIQ7saqju7LSU18cn2/TXqFLBEokqA7vJxYNvvzU8vUsaUOfW0prN+JHKKHWTVncgoiCkZlK5DAtWN3OTtr5naHB/XGHQkPA5iTorbgvyUFchufHk2rvJ+Z6wmKGn+9ZmJQU60+0M33LER2/g= ;{id = 62298} 026D780C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A046D7830310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000100000003 mx.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mx01.types-signed.wb.sidnlabs.nl. MX RRSIG NSEC 026D780C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009D10FC9E30258366DD6ABA74A55A5C8DF204B429A6191B191BD058E52E8BEE92081B0919333B92FBD27DF1776A844F90E2C379DB3915A0253920B6D5E51B0E4BBB858FADFE9782A4E94AC5FBFDC2018818BDEC79F109E2523FA247C358983C0F301226DB58CAD29C8EE629E136AEDA6E293E6F45793D9B9059C3DF9D2C63551F mx.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. nRD8njAlg2bdarp0pVpcjfIEtCmmGRsZG9BY5S6L7pIIGwkZMzuS+9J98XdqhE+Q4sN52zkVoCU5ILbV5RsOS7uFj63+l4Kk6UrF+/3CAYgYvex58QniUj+iR8NYmDwPMBIm21jK0pyO5inhNq7abik+b0V5PZuQWcPfnSxjVR8= ;{id = 62298} 046D7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00000F00010000003C0024000A046D61696C0C74797065732D7369676E6564027762087369646E6C616273026E6C00 mx01.types-signed.wb.sidnlabs.nl. 60 IN MX 10 mail.types-signed.wb.sidnlabs.nl. 046D7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000F08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00A86C1132A50A84C3913B75996FC8C4CD142F7E2B916D9180B6D0C81001C6C5B4B021FF3F6A0F20637CDF1509DA8347BF5DCAA16E28D9B80806BBCA8FB337AD81935DC1A110FCCCC342D6FB62ABAF989A57D8B004D10DB425FBA5AA0EA7D6E6C83AA343B0BF5FFA789D423E1D01E7DF9A2716E680BE83EFC04C64AEB0D7198A77 mx01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. qGwRMqUKhMORO3WZb8jEzRQvfiuRbZGAttDIEAHGxbSwIf8/ag8gY3zfFQnag0e/XcqhbijZuAgGu8qPszetgZNdwaEQ/MzDQtb7YquvmJpX2LAE0Q20Jfulqg6n1ubIOqNDsL9f+nidQj4dAeffmicW5oC+g+/ATGSusNcZinc= ;{id = 62298} 046D7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B056E617074720C74797065732D7369676E6564027762087369646E6C616273026E6C000006000100000003 mx01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC naptr.types-signed.wb.sidnlabs.nl. MX RRSIG NSEC 046D7830310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003C3CCCEDF93B97506A9847EF4C77FA4343EE2153409259EF19840F5B0F7665895EAB26AEA21DE98447D80A49617AE19955FB489EB01695360011291746E18F7E5A113140E010BB89A3FFF4308C35989051F3DC4DC4122CB35D195B0B698D22AD8B199BE535D58EB26536D1633C8FE25EB90D42C698013F319C763DE94940A92E mx01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. PDzM7fk7l1BqmEfvTHf6Q0PuIVNAklnvGYQPWw92ZYleqyauoh3phEfYCklheuGZVftInrAWlTYAESkXRuGPfloRMUDgELuJo//0MIw1mJBR89xNxBIss10ZWwtpjSKtixmb5TXVjrJlNtFjPI/iXrkNQsaYAT8xnHY96UlAqS4= ;{id = 62298} 056E617074720C74797065732D7369676E6564027762087369646E6C616273026E6C00002300010000003C003F00640064017308687474702B6C407200056E617074720B7265706C6163656D656E740C74797065732D7369676E6564027762087369646E6C616273026E6C00 naptr.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 100 100 "s" "http+l@r" "" naptr.replacement.types-signed.wb.sidnlabs.nl. 056E617074720C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007D709F918305386C15999995B7D9C850918778642152A1AECDB0ED26E6211D32A6C160E9404B743C1F7220ECAF25C8C21AD69372B11CDB3EB11F89FE8116F9EDA37CC41C8536A935422B2B18284E6A586E6D76D5EFB470466D3521A3D3E8125781254E34136F3419F71EAD8048FC7610F96D13D115BE23A64FC104488602F3E3 naptr.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fXCfkYMFOGwVmZmVt9nIUJGHeGQhUqGuzbDtJuYhHTKmwWDpQEt0PB9yIOyvJcjCGtaTcrEc2z6xH4n+gRb57aN8xByFNqk1QisrGChOalhubXbV77RwRm01IaPT6BJXgSVONBNvNBn3Hq2ASPx2EPltE9EVviOmT8EESIYC8+M= ;{id = 62298} 056E617074720C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D076E6170747230310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000001003 naptr.types-signed.wb.sidnlabs.nl. 3600 IN NSEC naptr01.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC 056E617074720C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C008F72EBD35A0EEE36E8DF434B927FE5F7018E5534A4DBE9DFC5650DC3B72C77C45C52847D96B90B61A84FEE454333020BF2C1AC4F1B14FDD56B004F84BBB357C26974EAE5E8FAB86CF9FF648614566DBE86BF813D72525325B8E568A8B0B8ABA518089AC7F62DE3D6A9236AC59F27D139C42359E3D3E0F86199859203B739F49D naptr.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. j3Lr01oO7jbo30NLkn/l9wGOVTSk2+nfxWUNw7csd8RcUoR9lrkLYahP7kVDMwIL8sGsTxsU/dVrAE+Eu7NXwml06uXo+rhs+f9khhRWbb6Gv4E9clJTJbjlaKiwuKulGAiax/Yt49apI2rFnyfROcQjWePT4PhhmYWSA7c59J0= ;{id = 62298} 076E6170747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002300010000003C00080000000000000000 naptr01.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 0 0 "" "" "" . 076E6170747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00A6015315625DC63DA865A9E2734B06E021517623CA635DA025BA678AF42801C961BA508563679A4C7DC2E11BD503BAE227933CF7D702084664AC00F48677C5A90064612A9DCD38171E9E9073899EE93E95589FB87576700FA291E6DF8AB234C119914BB30BA47EF4A273210DC30529F705A7AF189922A3956D7F4FD7FC5AE798 naptr01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. pgFTFWJdxj2oZanic0sG4CFRdiPKY12gJbpnivQoAclhulCFY2eaTH3C4RvVA7riJ5M899cCCEZkrAD0hnfFqQBkYSqdzTgXHp6Qc4me6T6VWJ+4dXZwD6KR5t+KsjTBGZFLswukfvSicyENwwUp9wWnrxiZIqOVbX9P1/xa55g= ;{id = 62298} 076E6170747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D076E6170747230320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000001003 naptr01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC naptr02.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC 076E6170747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B9E57CD3A00F82157DA43373BC5ACBF33E89A1B2B4CF114BE33F1083AA0E70D404BAC06243857E07191E7546108529FC88F6665FB3191CC4450821D3D9A8FF58C4B09DBF632D94A2D1B182EA52BBDAF176349A4A82C4597A37011EF1346E256FD6C2ADA919D1C8EF6BA3F68F5670EFAD27FD949148899FB0FF57A8DDBBE3B85B naptr01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ueV806APghV9pDNzvFrL8z6JobK0zxFL4z8Qg6oOcNQEusBiQ4V+BxkedUYQhSn8iPZmX7MZHMRFCCHT2aj/WMSwnb9jLZSi0bGC6lK72vF2NJpKgsRZejcBHvE0biVv1sKtqRnRyO9ro/aPVnDvrSf9lJFIiZ+w/1eo3bvjuFs= ;{id = 62298} 076E6170747230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002300010000003C001DFFFFFFFF06626C7572676805626C6F726606626C6C6C626203666F6F00 naptr02.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 65535 65535 "blurgh" "blorf" "blllbb" foo. 076E6170747230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002300010000003C001DFFFFFFFF06626C7572676805626C6F726606626C6C6C626203666F6F00 naptr02.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 65535 65535 "blurgh" "blorf" "blllbb" foo. 076E6170747230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003A80331F59470338C74C7BC3C87EF2FA8651E1CB35719915F6B17F301B0017D9B6A038D2B00831C55A4EC45C4AF7716BB3AADC6791A928DED6A3C2E8F2ADD85516F5857491CFC15F518C6E2FD3835C964E70C06297AF28A700ADFCE73ABA41851DD4356EB944C9939084BEA8CAD76C6B9C33A79E97AC2A5176AB6E5F34743B33 naptr02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OoAzH1lHAzjHTHvDyH7y+oZR4cs1cZkV9rF/MBsAF9m2oDjSsAgxxVpOxFxK93Frs6rcZ5GpKN7Wo8Lo8q3YVRb1hXSRz8FfUYxuL9ODXJZOcMBil68opwCt/Oc6ukGFHdQ1brlEyZOQhL6oytdsa5wzp56XrCpRdqtuXzR0OzM= ;{id = 62298} 076E6170747230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029036E69640C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000001003 naptr02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC nid.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC 076E6170747230320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00771231AA7D7B77FC30B7F238621B7E70767DB7B233F61AA628D583B002EF204B8C3DEDC299D43A5FF9E00B82C2467F3A7FDB240071EB29CE95CC893E60E1C6648F7AC42CAB961586F0D5ADD356D12DDC3597ECBFB5E1587860F05560C10C0D540E674CDEB9E52C1A59542132DE1E52BD739CD7B9DC8C8E360AF9DF9612C9B26F naptr02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dxIxqn17d/wwt/I4Yht+cHZ9t7Iz9hqmKNWDsALvIEuMPe3CmdQ6X/ngC4LCRn86f9skAHHrKc6VzIk+YOHGZI96xCyrlhWG8NWt01bRLdw1l+y/teFYeGDwVWDBDA1UDmdM3rnlLBpZVCEy3h5SvXOc17ncjI42CvnflhLJsm8= ;{id = 62298} 036E69640C74797065732D7369676E6564027762087369646E6C616273026E6C00006800010000003C000A000A0094019801520169 nid.types-signed.wb.sidnlabs.nl. 60 IN NID 10 0094:0198:0152:0169 036E69640C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0025627D858D06C3BD42EE062F18A51A03B18E71470CDFBC080FA85576FDEAC46791D4F2AA6CFA3C8B6ADB1B42F449D7A085C4711C990A001C7DA3B5C415EEB5D5E7B91C4F0012EFF7BB9639C1D49CD5F74611985B6A11EED2F1F9ADC87321984A7848FCCC0A9E0E8469EBA6E168473A54E07C6444DA39B160FD6C32398766B081 nid.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NID 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. JWJ9hY0Gw71C7gYvGKUaA7GOcUcM37wID6hVdv3qxGeR1PKqbPo8i2rbG0L0SdeghcRxHJkKABx9o7XEFe611ee5HE8AEu/3u5Y5wdSc1fdGEZhbahHu0vH5rchzIZhKeEj8zAqeDoRp66bhaEc6VOB8ZETaObFg/WwyOYdmsIE= ;{id = 62298} 036E69640C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100033056E696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000080 nid.types-signed.wb.sidnlabs.nl. 3600 IN NSEC ninfo.types-signed.wb.sidnlabs.nl. RRSIG NSEC NID 036E69640C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002355971859ACDABB66B00BDF3A048C199A2752159B0CE8483BB9B487EA1A90AA8D4DBB34265BAFCC5FAC26BCE52469E661DC59DC3EEA3F918368C0E3CB4707320F7A0412B099170C1497C60DF68936F1338BFC8D61975BC12958D34F9788B59F49ADFF3A4048CB1C7AB6FC06C2390231398725701D8514875FA36DEDD1A3E85D nid.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. I1WXGFms2rtmsAvfOgSMGZonUhWbDOhIO7m0h+oakKqNTbs0JluvzF+sJrzlJGnmYdxZ3D7qP5GDaMDjy0cHMg96BBKwmRcMFJfGDfaJNvEzi/yNYZdbwSlY00+XiLWfSa3/OkBIyxx6tvwGwjkCMTmHJXAdhRSHX6Nt7dGj6F0= ;{id = 62298} 056E696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00003800010000003C001B1A54686973207A6F6E65206973206578706572696D656E74616C2E ninfo.types-signed.wb.sidnlabs.nl. 60 IN TYPE56 \# 27 1A54686973207A6F6E65206973206578706572696D656E74616C2E 056E696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0010DDA8F8BDB9541F905C47FAB758667C4C952BC6687191FB39EC8B85CD76AA77298A46A6DFD3AADF05F4568C142054A211A3188610B9A756BBDE9DA4E30EE1ABB615BC7D10FFB82DF5003EE3710E66A3655E2B44730F024DB416ABA1DBEBA2C3F41449B3822244A9F5F073435B3A75D248E414A3B2F61B2DBC5603DC7C1945D2 ninfo.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TYPE56 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. EN2o+L25VB+QXEf6t1hmfEyVK8ZocZH7OeyLhc12qncpikam39Oq3wX0VowUIFSiEaMYhhC5p1a73p2k4w7hq7YVvH0Q/7gt9QA+43EOZqNlXitEcw8CTbQWq6Hb66LD9BRJs4IiRKn18HNDWzp10kjkFKOy9hstvFYD3HwZRdI= ;{id = 62298} 056E696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C046E7361700C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030080 ninfo.types-signed.wb.sidnlabs.nl. 3600 IN NSEC nsap.types-signed.wb.sidnlabs.nl. RRSIG NSEC TYPE56 056E696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B6691341982A6AD71BE177F79A60E1164C135355B9838AE6F63C000C6F42D8120CD979EC5AB6DDB61E9B4F287AB71F2744E9A0FE1B58AFEF4906EE24081D020390644E45B6336C9A241B20451D46D3839C4878E6BA1A22B828B04A8DC4CEDBDA45ADB5D5C06891EB024747D64BF1F3C3558C6B19DDF8175EE598ED596EE5D4B8 ninfo.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tmkTQZgqatcb4Xf3mmDhFkwTU1W5g4rm9jwADG9C2BIM2XnsWrbdth6bTyh6tx8nROmg/htYr+9JBu4kCB0CA5BkTkW2M2yaJBsgRR1G04OcSHjmuhoiuCiwSo3EztvaRa211cBokesCR0fWS/Hzw1WMaxnd+Bde5ZjtWW7l1Lg= ;{id = 62298} 046E7361700C74797065732D7369676E6564027762087369646E6C616273026E6C00001600010000003C0003012345 nsap.types-signed.wb.sidnlabs.nl. 60 IN NSAP 0x012345 046E7361700C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001608050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C004F7D97EC839DDB784F81AE1AA6DAAD49268E22784F52D3EB42E6742BBD1784B7911C02D01BAE5C140F41B1E887AE6D9FD23A062B53A9E7ED38D6B2940441485720A3C33CF71811E81D20E244E9CDBA56D4A501A792705BD73C77433DFB546CC8D8D25CD63A91761DE9A9953AC01BF367A1DF0C4CAF4A4CA1E21005271F5AE596 nsap.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NSAP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. T32X7IOd23hPga4aptqtSSaOInhPUtPrQuZ0K70XhLeRHALQG65cFA9BseiHrm2f0joGK1Op5+041rKUBEFIVyCjwzz3GBHoHSDiROnNulbUpQGnknBb1zx3Qz37VGzI2NJc1jqRdh3pqZU6wBvzZ6HfDEyvSkyh4hAFJx9a5ZY= ;{id = 62298} 046E7361700C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C066E73617030310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000002000003 nsap.types-signed.wb.sidnlabs.nl. 3600 IN NSEC nsap01.types-signed.wb.sidnlabs.nl. NSAP RRSIG NSEC 046E7361700C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B57148523D96FB94FD47D42019D6E330DF8FAEE7089010C0F9815B22AF881929A1D5A0C7E5FBB3C5BF9AE184F679C90FFA61EDAAC76EC7A5D8CC86C0A5018B6C26C003C2358E090A7AB2D1E5D5B8AA3802907CA2A28B1C5557AE821EC35036CB8316164544A5748C5037CC347D38DF4FDD86C107498E9F8278F5E0BDEBB8DDDE nsap.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tXFIUj2W+5T9R9QgGdbjMN+PrucIkBDA+YFbIq+IGSmh1aDH5fuzxb+a4YT2eckP+mHtqsdux6XYzIbApQGLbCbAA8I1jgkKerLR5dW4qjgCkHyiooscVVeugh7DUDbLgxYWRUSldIxQN8w0fTjfT92GwQdJjp+CePXgveu43d4= ;{id = 62298} 066E73617030310C74797065732D7369676E6564027762087369646E6C616273026E6C00001600010000003C001447000580005A0000000001E133FFFFFF00016100 nsap01.types-signed.wb.sidnlabs.nl. 60 IN NSAP 0x47000580005A0000000001E133FFFFFF00016100 066E73617030310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001608050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00115CEC1D59D29C102FD901D3EE1B6862F1F6EC9C6DD8D60D7C08CD75C11F9C8C67C78A9695233DD5A4E9506A81CFCEB2EF2F3B6B90A71FE2EAEE6E5FEEF537736E0BAD318CCECBB472C32CBE014CCE1E88709CF63F2D9ADB656F86D170C02DA98CAC23B5DC1851715B42EE050042DFEA8E4D61A062B076F92A2FA394699DAAAE nsap01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NSAP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. EVzsHVnSnBAv2QHT7htoYvH27Jxt2NYNfAjNdcEfnIxnx4qWlSM91aTpUGqBz86y7y87a5CnH+Lq7m5f7vU3c24LrTGMzsu0csMsvgFMzh6IcJz2Py2a22VvhtFwwC2pjKwjtdwYUXFbQu4FAELf6o5NYaBisHb5Ki+jlGmdqq4= ;{id = 62298} 066E73617030310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0570747230310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000002000003 nsap01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC ptr01.types-signed.wb.sidnlabs.nl. NSAP RRSIG NSEC 066E73617030310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009875879E0F93B9331FF60C80E6DF1D5EB1B9AF228E8AE9777B8C2811FE4F893E3147B608957A15E6975370255D20E20A27A38F656F9ED417DEA7B3CC14FE96B508D67DD248AB93DACCB76399E92962C4D43A7967736F22F50165BB069ECDEA0BD4EC5F175116C91AFF1A8B6A256A9ADF302D957F1F4E165910252D147EEE97EE nsap01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. mHWHng+TuTMf9gyA5t8dXrG5ryKOiul3e4woEf5PiT4xR7YIlXoV5pdTcCVdIOIKJ6OPZW+e1Bfep7PMFP6WtQjWfdJIq5PazLdjmekpYsTUOnlnc28i9QFluwaezeoL1OxfF1EWyRr/GotqJWqa3zAtlX8fThZZECUtFH7ul+4= ;{id = 62298} 0570747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00000C00010000003C001D0C74797065732D7369676E6564027762087369646E6C616273026E6C00 ptr01.types-signed.wb.sidnlabs.nl. 60 IN PTR types-signed.wb.sidnlabs.nl. 0570747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000C08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002212DF6A2113C795CCCFC7DB9DB6F6FD11FC5FDDCAD99FE3BF8F2E65FE38FA6681F2F5D72F14D4ED275D9DCEEDCEAB0212EE2603FBDB87F5D8B076550914B6A0460AD381D15D36FF7DD1D3CBAD1604E14DC71D10C7602452C406C0018339EE57010EA4B2C9D3BEA9AFFED323EBE026503D23720D6673E9E83886D17384F4CC39 ptr01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. IhLfaiETx5XMz8fbnbb2/RH8X93K2Z/jv48uZf44+maB8vXXLxTU7Sddnc7tzqsCEu4mA/vbh/XYsHZVCRS2oEYK04HRXTb/fdHTy60WBOFNxx0Qx2AkUsQGwAGDOe5XAQ6kssnTvqmv/tMj6+AmUD0jcg1mc+noOIbRc4T0zDk= ;{id = 62298} 0570747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E1000280270780C74797065732D7369676E6564027762087369646E6C616273026E6C000006000800000003 ptr01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC px.types-signed.wb.sidnlabs.nl. PTR RRSIG NSEC 0570747230310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00773F1B78FEE91FAC301BE3345573AB64CD0F43FEB5AD0F2A29494761430710FCB41C8A713E54217159E581D030AC1836B44FF6FEFA4464F11714F5BDFB0A3E2107CBE3CB003DE87B6345C5A3FDB489E6A8C2519270969EE9B8FC6DDEA4EF25C12F35CF26F8B2EFD04AE4AB9241ACFF9D6A2D93A7508FE908DE1C0BF1C58CF26C ptr01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dz8beP7pH6wwG+M0VXOrZM0PQ/61rQ8qKUlHYUMHEPy0HIpxPlQhcVnlgdAwrBg2tE/2/vpEZPEXFPW9+wo+IQfL48sAPeh7Y0XFo/20ieaowlGScJae6bj8bd6k7yXBLzXPJviy79BK5KuSQaz/nWotk6dQj+kI3hwL8cWM8mw= ;{id = 62298} 0270780C74797065732D7369676E6564027762087369646E6C616273026E6C00001A00010000003C004B000A066D61703832320C74797065732D7369676E6564027762087369646E6C616273026E6C00076D6170783430300C74797065732D7369676E6564027762087369646E6C616273026E6C00 px.types-signed.wb.sidnlabs.nl. 60 IN PX 10 map822.types-signed.wb.sidnlabs.nl. mapx400.types-signed.wb.sidnlabs.nl. 0270780C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001A08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00AD9AFFCA32BA4C9A230EC209F35248E3C9D56062014C42FE0ABC4573E56249E95DE1A6E34BB2573DB072FAA5A76FD2CAA90B544D49DEB3D34EB09575B1E2AE8F77F2E5D91819B12F6BF9B5219C4705A33D742BEFCC23B74AFCC8FB23B81B3B1B56841806DC7D9587AF5861674AEAF0ABED5F7BBC39EA77AB82F34C9402077DA2 px.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rZr/yjK6TJojDsIJ81JI48nVYGIBTEL+CrxFc+ViSeld4abjS7JXPbBy+qWnb9LKqQtUTUnes9NOsJV1seKuj3fy5dkYGbEva/m1IZxHBaM9dCvvzCO3SvzI+yO4GzsbVoQYBtx9lYevWGFnSurwq+1fe7w56nergvNMlAIHfaI= ;{id = 62298} 0270780C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A04726B65790C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000200003 px.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rkey.types-signed.wb.sidnlabs.nl. PX RRSIG NSEC 0270780C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00975F55577CF9128482A354124AD181AB18C4A87963CD4C9846EB7D488C9FCD06763757BFC30F83EFD690A754192F478CDC0AE68F12B1087E9E2BBD32F6345DDEC67CCA5F4FC8342172A8DD82D19D3C9CBDB8EC66F4545C0491D3B5B4609BF86C5908EE21BB4DB9A21715F32B9EC299ED29B3ECD0952D71AD0C4693C6EFC7FAAA px.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. l19VV3z5EoSCo1QSStGBqxjEqHljzUyYRut9SIyfzQZ2N1e/ww+D79aQp1QZL0eM3ArmjxKxCH6eK70y9jRd3sZ8yl9PyDQhcqjdgtGdPJy9uOxm9FRcBJHTtbRgm/hsWQjuIbtNuaIXFfMrnsKZ7Smz7NCVLXGtDEaTxu/H+qo= ;{id = 62298} 04726B65790C74797065732D7369676E6564027762087369646E6C616273026E6C00003900010000003C00880000010803010001D7B53C9C988E7476474466CC3BA260A461FE5764BF4CE754E6307E3B0764D2E0D1A84B23E52CBE08419A29A851219AF5DE8291DDDDA1D6C76315298C562C25F75EABEAA2998163AC6F1B500D810F6B8931A835FD01BB0D3529DE31DA574435DEBFFCDBD404974B23ACB201C42EF04A5AAED3275F633E555FB5F403C8B5BC39BD rkey.types-signed.wb.sidnlabs.nl. 60 IN TYPE57 \# 136 0000010803010001D7B53C9C988E7476474466CC3BA260A461FE5764BF4CE754E6307E3B0764D2E0D1A84B23E52CBE08419A29A851219AF5DE8291DDDDA1D6C76315298C562C25F75EABEAA2998163AC6F1B500D810F6B8931A835FD01BB0D3529DE31DA574435DEBFFCDBD404974B23ACB201C42EF04A5AAED3275F633E555FB5F403C8B5BC39BD 04726B65790C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0072C9B63B54B7E59C175D2B9CD66D9F242BC6B501F602EF4A07035CEC492227F36C675848605200D5CEBC940CE9C333BA2D5ECA10AD9A92D3D0A4E7610585E093D40720087311D3B9E5040F890E6E1D34C422583086E6893A82FB9AC2670AD496262151558045918EBE8DBDB7BD0D0365EABC99DC89E65F36652F143E0CBD8981 rkey.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TYPE57 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. csm2O1S35ZwXXSuc1m2fJCvGtQH2Au9KBwNc7EkiJ/NsZ1hIYFIA1c68lAzpwzO6LV7KEK2aktPQpOdhBYXgk9QHIAhzEdO55QQPiQ5uHTTEIlgwhuaJOoL7msJnCtSWJiFRVYBFkY6+jb23vQ0DZeq8mdyJ5l82ZS8UPgy9iYE= ;{id = 62298} 04726B65790C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A0272700C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030040 rkey.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rp.types-signed.wb.sidnlabs.nl. RRSIG NSEC TYPE57 04726B65790C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C39087F2C3A4D58DBFFFB0DCC824CCEDA7FD36F85126E40E4DF826BFD5EED2985902074815C6254FDD21F8079B03B0C04694FCE4396E8872A29F50BC9644B4693CE7DC61D45E95F40AF7719551B1CC878DCA65AB2872237BE79959FD56BB2F48AEC065312006DBF2213683D6B399948993461761D727DC0BC8EA85389CAEC83E rkey.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. w5CH8sOk1Y2//7DcyCTM7af9NvhRJuQOTfgmv9Xu0phZAgdIFcYlT90h+AebA7DARpT85DluiHKin1C8lkS0aTzn3GHUXpX0CvdxlVGxzIeNymWrKHIje+eZWf1Wuy9IrsBlMSAG2/IhNoPWs5mUiZNGF2HXJ9wLyOqFOJyuyD4= ;{id = 62298} 0272700C74797065732D7369676E6564027762087369646E6C616273026E6C00001100010000003C002200037478740C74797065732D7369676E6564027762087369646E6C616273026E6C00 rp.types-signed.wb.sidnlabs.nl. 60 IN RP . txt.types-signed.wb.sidnlabs.nl. 0272700C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D2601452142C09B0AE02923437DD34B11F77C013A638DCC6FE653EF4E46D31FAC3760411154DF1D12587EBFDDAB17FD187AD2F5A05C9AAE383F070D7C9086DC3299FFF10FCFA3B1170B3E4A54E199FE157EC2C6D8ABA5C845ACF05BE7BC20937A17780D5E0E4757CA57F1E2B7C6F83085E0FB4BAE0AA59D98D6A3DD456881586 rp.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0mAUUhQsCbCuApI0N900sR93wBOmONzG/mU+9ORtMfrDdgQRFU3x0SWH6/3asX/Rh60vWgXJquOD8HDXyQhtwymf/xD8+jsRcLPkpU4Zn+FX7CxtirpchFrPBb57wgk3oXeA1eDkdXylfx4rfG+DCF4PtLrgqlnZjWo91FaIFYY= ;{id = 62298} 0272700C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A04727030310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000040000003 rp.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rp01.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC 0272700C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00316C9D51ECECA8EC86EB575D60F6C81CAABB9C7B84C8613F2807C21E16C4C4770E6EFE31D4924B79786C3DE655F6986EBDC03F44315E4247AA35CA9BC3FB6DD247CD34908C8F01707030103909DB669EE5C82055FF9AE004010DC4AE0E6F1F00373F57F1A9939B2CBB1664F1622D16939F734BF4D3CE9142F239CC5B155B6366 rp.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MWydUezsqOyG61ddYPbIHKq7nHuEyGE/KAfCHhbExHcObv4x1JJLeXhsPeZV9phuvcA/RDFeQkeqNcqbw/tt0kfNNJCMjwFwcDAQOQnbZp7lyCBV/5rgBAENxK4Obx8ANz9X8amTmyy7FmTxYi0Wk59zS/TTzpFC8jnMWxVbY2Y= ;{id = 62298} 04727030310C74797065732D7369676E6564027762087369646E6C616273026E6C00001100010000003C004F0A6D626F782D646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00097478742D646E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00 rp01.types-signed.wb.sidnlabs.nl. 60 IN RP mbox-dname.types-signed.wb.sidnlabs.nl. txt-dname.types-signed.wb.sidnlabs.nl. 04727030310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000DFD1CB6DA5B8546EB42253AC4F94477B5BCA1F4086DF2893CC6EAE39EEF41D9814AC8A2A1A8E161A31C5F7C6D9BCFBD1AFBA0AB031EE220E929B0EC3794DA82DFADAAECBDCB1CA11E34E5AD2F1D83CACF2EEC6F24C0BC195F6960911E74A991A0BA22A914056F5DBDD12960FDEF5CBA054AEFA6FA2F7E8772BD334BCE9AAD5F rp01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Df0cttpbhUbrQiU6xPlEd7W8ofQIbfKJPMbq457vQdmBSsiioajhYaMcX3xtm8+9GvugqwMe4iDpKbDsN5Tagt+tquy9yxyhHjTlrS8dg8rPLuxvJMC8GV9pYJEedKmRoLoiqRQFb1290Slg/e9cugVK76b6L36Hcr0zS86arV8= ;{id = 62298} 04727030310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A04727030320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000040000003 rp01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rp02.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC 04727030310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003BB4B3B1624EBAAC452D219C41BD275CA3FCE626F3F1B1A0586644F64D27E35F49687C551507DC46A73312B5343224877EA2A703988459101F8F43039A0D6F03125D2967BF0A8944960AB5E3A531E0B5D0648743606C051494A5A04E01B5621904D281E63C24D8FD3550B6DF60B544082F5CFA78645316E482CCD220C267FFC9 rp01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. O7SzsWJOuqxFLSGcQb0nXKP85ibz8bGgWGZE9k0n419JaHxVFQfcRqczErU0MiSHfqKnA5iEWRAfj0MDmg1vAxJdKWe/ColElgq146Ux4LXQZIdDYGwFFJSloE4BtWIZBNKB5jwk2P01ULbfYLVECC9c+nhkUxbkgszSIMJn/8k= ;{id = 62298} 04727030320C74797065732D7369676E6564027762087369646E6C616273026E6C00001100010000003C00020000 rp02.types-signed.wb.sidnlabs.nl. 60 IN RP . . 04727030320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00CCB7C8E92D968D0379DF329F359873CD545DE5442D3936CF357BA423C5C2E9788E1E25DD998CC59B2E5FDFF22B00D8F15FCF5ADE87200C22F0A89C1EFA81B30E3C4432DC311270056314BA91FC400DEE6BD2F5FD3B36C749560BAE5D15D0AEE0B6D1B87F3896CE3DA8977E87417C1FAFDC71D3E6DFC7918C3583D85905A17EB7 rp02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. zLfI6S2WjQN53zKfNZhzzVRd5UQtOTbPNXukI8XC6XiOHiXdmYzFmy5f3/IrANjxX89a3ocgDCLwqJwe+oGzDjxEMtwxEnAFYxS6kfxADe5r0vX9OzbHSVYLrl0V0K7gttG4fziWzj2ol36HQXwfr9xx0+bfx5GMNYPYWQWhfrc= ;{id = 62298} 04727030320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E1000280272740C74797065732D7369676E6564027762087369646E6C616273026E6C000006000040000003 rp02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rt.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC 04727030320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0067D65685F0DB2C958C91B8117E9CCF01162B590AA4ECD0C130D88566CBE825FB5BC48EA1B3DF9EC77E8BD4CAF49127E99F1A59B2AF5D7F073242A9CABF1E8D6297AAAFCB8B339368C90651725D76C3D510A4AC892CAF845483F8765BDC8F2A6E0EAB6B95DE79DC13DD2477AF6FA92893633F44A7593B34E88CF8B44FCF2CF5B3 rp02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Z9ZWhfDbLJWMkbgRfpzPARYrWQqk7NDBMNiFZsvoJftbxI6hs9+ex36L1Mr0kSfpnxpZsq9dfwcyQqnKvx6NYpeqr8uLM5NoyQZRcl12w9UQpKyJLK+EVIP4dlvcjypuDqtrld553BPdJHevb6kok2M/RKdZOzTojPi0T88s9bM= ;{id = 62298} 0272740C74797065732D7369676E6564027762087369646E6C616273026E6C00001500010000003C0026000A067274686F73740C74797065732D7369676E6564027762087369646E6C616273026E6C00 rt.types-signed.wb.sidnlabs.nl. 60 IN RT 10 rthost.types-signed.wb.sidnlabs.nl. 0272740C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009B46AB2E51455A0DC4B89F0C2DC14D0859D3F526537F1CDEF6623FE5E0BA28522CE28D6B42A5D3BE74753FAEBD7C26D58B7748731514943D969A1BBBEA2CF9D8B790ACDFC1CFF2E84031577875E474EA64FE48274395BEF744843F595EED66EA0CE9E742C362FA4D2CEB71C3F784268F3578517CB17CCFFECBF527FC84F8261C rt.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. m0arLlFFWg3EuJ8MLcFNCFnT9SZTfxze9mI/5eC6KFIs4o1rQqXTvnR1P669fCbVi3dIcxUUlD2Wmhu76iz52LeQrN/Bz/LoQDFXeHXkdOpk/kgnQ5W+90SEP1le7WbqDOnnQsNi+k0s63HD94QmjzV4UXyxfM/+y/Un/IT4Jhw= ;{id = 62298} 0272740C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A04727430310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000004000003 rt.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rt01.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC 0272740C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D3BDB0FB8F619CEDA6D53D82A694F14AFEFBA2AAA58D24417F1D7B66ABFD865FB8EBAB7002F3EAE45FE450618D8905B7063FFF2785A41E299A2889DA3C330B174BFC131FF44688F24FA2062C1FE56D260B7974C56882FE061EBE2B80BD9610D0A4E2CF8D79406DF7EB0A03B33E486D42179989E5CF07251F757C079733B93E7F rt.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 072w+49hnO2m1T2CppTxSv77oqqljSRBfx17Zqv9hl+466twAvPq5F/kUGGNiQW3Bj//J4WkHimaKInaPDMLF0v8Ex/0RojyT6IGLB/lbSYLeXTFaIL+Bh6+K4C9lhDQpOLPjXlAbffrCgOzPkhtQheZieXPByUfdXwHlzO5Pn8= ;{id = 62298} 04727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00001500010000003C0031000011696E7465726D6564696174652D686F73740C74797065732D7369676E6564027762087369646E6C616273026E6C00 rt01.types-signed.wb.sidnlabs.nl. 60 IN RT 0 intermediate-host.types-signed.wb.sidnlabs.nl. 04727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0039D3DE5EF82B984705D0D4F8714C4EBBF21046C44DC7681BEABAD10A5F61BC7F49C298DACCD18BD8820A07E5EF04B7D3B622F82548805DF623D69DB3D48693AF7C956D1670C2BD7AEEFFC3D6D06764598187C377A716D23A2744A360831973EE26D6235C04FC289A5A42B6938F05F262A5CB5A41EB7B2D084DE1AE2BA0ACC009 rt01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OdPeXvgrmEcF0NT4cUxOu/IQRsRNx2gb6rrRCl9hvH9JwpjazNGL2IIKB+XvBLfTtiL4JUiAXfYj1p2z1IaTr3yVbRZwwr167v/D1tBnZFmBh8N3pxbSOidEo2CDGXPuJtYjXAT8KJpaQraTjwXyYqXLWkHrey0ITeGuK6CswAk= ;{id = 62298} 04727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A04727430320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000004000003 rt01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rt02.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC 04727430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C7DDA07BDFC645F5A302E489C7A06E859B2E44E5B0267CD9F02B5149225801FCFD4D45CCA51C48E163200BFE9BCD1E22D53CAEF7FA3DAEFEA1C6BE44B6FFCEA5DE735BC717FBFF510B03FDF55C10A3C1E05F06DFBCB398E9E2A305A69BCF0B7DAF16C948BDDA9E58870ACF5FB8187B06DC441BB77EF7F8BB421CE486DB99D58F rt01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. x92ge9/GRfWjAuSJx6BuhZsuROWwJnzZ8CtRSSJYAfz9TUXMpRxI4WMgC/6bzR4i1Tyu9/o9rv6hxr5Etv/Opd5zW8cX+/9RCwP99VwQo8HgXwbfvLOY6eKjBaabzwt9rxbJSL3anliHCs9fuBh7BtxEG7d+9/i7QhzkhtuZ1Y8= ;{id = 62298} 04727430320C74797065732D7369676E6564027762087369646E6C616273026E6C00001500010000003C0003FFFF00 rt02.types-signed.wb.sidnlabs.nl. 60 IN RT 65535 . 04727430320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00CF38E23A6A10153D6018A70C5E6EFB13E0A7D9A18F7686018E4AB6308D83995D981C08AA46B120063C4DBEF57345FDC268A8F77760FF84E905FE974DFD2675581AA4E7D2497C190A13FC23AF93601A450ADA079B30C4896C23117CF989674BC24C4AEDBD0F69F703675D6AF9ADD7E772EBF8CAA4C61263785E712FEC45AE411B rt02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. zzjiOmoQFT1gGKcMXm77E+Cn2aGPdoYBjkq2MI2DmV2YHAiqRrEgBjxNvvVzRf3CaKj3d2D/hOkF/pdN/SZ1WBqk59JJfBkKE/wjr5NgGkUK2gebMMSJbCMRfPmJZ0vCTErtvQ9p9wNnXWr5rdfncuv4yqTGEmN4XnEv7EWuQRs= ;{id = 62298} 04727430320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029037370660C74797065732D7369676E6564027762087369646E6C616273026E6C000006000004000003 rt02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC spf.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC 04727430320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D075C82A28F2497BE3EDA86CA4E9B936AF818EF9D5CA2FD31BF37846C45231094E54776D96005BDE5C0A035D2559C1C3104D7456E8D447E8C3E30F1383ADCC5761EA2F9C22A013E65B5ADE131A9EF5C4E63AB1D5D0A86FCA198E00070075EA052C674898941F339DC4BC9C8E478DCA614B7C2E0C6F6E0BFAC96C24F1A20D1DC5 rt02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0HXIKijySXvj7ahspOm5Nq+BjvnVyi/TG/N4RsRSMQlOVHdtlgBb3lwKA10lWcHDEE10VujUR+jD4w8Tg63MV2HqL5wioBPmW1reExqe9cTmOrHV0KhvyhmOAAcAdeoFLGdImJQfM53EvJyOR43KYUt8Lgxvbgv6yWwk8aINHcU= ;{id = 62298} 037370660C74797065732D7369676E6564027762087369646E6C616273026E6C00006300010000003C002625763D73706631202B6D7820613A636F6C6F2E6578616D706C652E636F6D2F3238202D616C6C spf.types-signed.wb.sidnlabs.nl. 60 IN SPF "v=spf1 +mx a:colo.example.com/28 -all" 037370660C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00456101C17F8C7C242E019E7BCEF46304F10E12B5BDBD3CC8A9EA293A79314F94FBA4B5A3AD6500B73A6D4C7C66678F014F021384989329FB671ACEB1AA116AC3502804EFB20A9C4F485BE01B1D562FA9C39A817FD9476DABC70A684921C9141BDE56C4A3F6AE44F2CB7703CB876C97D21A06FCC0ED0CE05ECAA7B6B84AC333B8 spf.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SPF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. RWEBwX+MfCQuAZ57zvRjBPEOErW9vTzIqeopOnkxT5T7pLWjrWUAtzptTHxmZ48BTwIThJiTKftnGs6xqhFqw1AoBO+yCpxPSFvgGx1WL6nDmoF/2Udtq8cKaEkhyRQb3lbEo/auRPLLdwPLh2yX0hoG/MDtDOBeyqe2uErDM7g= ;{id = 62298} 037370660C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100030037372760C74797065732D7369676E6564027762087369646E6C616273026E6C00000D00000000000300000000000010 spf.types-signed.wb.sidnlabs.nl. 3600 IN NSEC srv.types-signed.wb.sidnlabs.nl. RRSIG NSEC SPF 037370660C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002B8E5E8F5123E78C9972420200C8AE7CED24336556387EC49BE8E120256388B45995019C453389EC418118AF4BE98E675B0CE57A8F10A6E8C10F5D1E8F1D5CA0C5FECC2D9F1CDF56254795D550DE097B613A5F80395A5DC0E1B0609B81B15248B55580DE89077632F98DF5F56BEA1994AC91A92C682320502709642FFC8473E6 spf.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. K45ej1Ej54yZckICAMiufO0kM2VWOH7Em+jhICVjiLRZlQGcRTOJ7EGBGK9L6Y5nWwzleo8QpujBD10ejx1coMX+zC2fHN9WJUeV1VDeCXthOl+AOVpdwOGwYJuBsVJItVWA3okHdjL5jfX1a+oZlKyRqSxoIyBQJwlkL/yEc+Y= ;{id = 62298} 037372760C74797065732D7369676E6564027762087369646E6C616273026E6C00002100010000003C0030FFFFFFFFFFFF0C6F6C642D736C6F772D626F780C74797065732D7369676E6564027762087369646E6C616273026E6C00 srv.types-signed.wb.sidnlabs.nl. 60 IN SRV 65535 65535 65535 old-slow-box.types-signed.wb.sidnlabs.nl. 037372760C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00085086CEAD8365292BB1C6E0B44B384D8D45F91B05F0538A1A30B54C363DCC7EC9527C4227297B381EA4F5DB771F8323F6B922F16E1E63FFDECE8FEE3A7A87739D5620F0625BBAEE3C09094E748F43AF0FB601CEE18A34C9D57EF02A8A65D0F048DA3850FE34EFDA94A6AB18E577656BFEB27F401D19888B32E29B14FCB39401 srv.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. CFCGzq2DZSkrscbgtEs4TY1F+RsF8FOKGjC1TDY9zH7JUnxCJyl7OB6k9dt3H4Mj9rki8W4eY//ezo/uOnqHc51WIPBiW7ruPAkJTnSPQ68PtgHO4Yo0ydV+8CqKZdDwSNo4UP4079qUpqsY5Xdla/6yf0AdGYiLMuKbFPyzlAE= ;{id = 62298} 037372760C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0573727630310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000004003 srv.types-signed.wb.sidnlabs.nl. 3600 IN NSEC srv01.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC 037372760C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00895639958555044C68F66485E9AB872540360A57BBF3C9F8C2B93692E2A18AF3ECC60F52D9BE8EE019D1755C807ECBDEF70284E99B22C73B9EBE3326F1BD3CA4D44DF0FDFA36DD6633ABE27E05F627B233D3D9285E2156F100A119A2BD2ABBDCA17899E49F6AAD8350CCEDEE1D91EA16B621A5F431F4F53612A0E087C5ED2E23 srv.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. iVY5lYVVBExo9mSF6auHJUA2Cle788n4wrk2kuKhivPsxg9S2b6O4BnRdVyAfsve9wKE6ZsixzuevjMm8b08pNRN8P36Nt1mM6vifgX2J7Iz09koXiFW8QChGaK9KrvcoXiZ5J9qrYNQzO3uHZHqFrYhpfQx9PU2EqDgh8XtLiM= ;{id = 62298} 0573727630310C74797065732D7369676E6564027762087369646E6C616273026E6C00002100010000003C000B00000000000003666F6F00 srv01.types-signed.wb.sidnlabs.nl. 60 IN SRV 0 0 0 foo. 0573727630310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002CD4D5495F305C9CE1C2A7FA2D0D7C7EDD739D38BBBE1736D25B43A527EAAC30590B6DF509229D7C34BD37190B87271A53B373003D9109BC04FDC603E45DDC9F55C85B6D48A40564CD206F51739C79A5A648CA9C7E7BE0B4CBA3EFE81A7D262B291A74E3BBD3CF33E5D1BB47A9D609375E7C65D269F88F13BDE72D214133B29D srv01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LNTVSV8wXJzhwqf6LQ18ft1znTi7vhc20ltDpSfqrDBZC231CSKdfDS9NxkLhycaU7NzAD2RCbwE/cYD5F3cn1XIW21IpAVkzSBvUXOceaWmSMqcfnvgtMuj7+gafSYrKRp047vTzzPl0btHqdYJN158ZdJp+I8TvectIUEzsp0= ;{id = 62298} 0573727630310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0573727630320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000004003 srv01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC srv02.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC 0573727630310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00AE3F62146AB7244E19DAC2072E80F9E2EBAF5C4CFBCF6C0D25C7894FB45D290A55CA7DC5894B61F9A681FF0654BBAAF04145D6A141160898D5AEBD32DC0F884B1C2E28C5FC6A83097CCC197BCAA9C35BE17C63FF90171EEAAD6DB79DA04F218FE5A3F7AB2BC55E00CEEB2E851560F1C928C6A0955BA01C5843D843B082401EC6 srv01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rj9iFGq3JE4Z2sIHLoD54uuvXEz7z2wNJceJT7RdKQpVyn3FiUth+aaB/wZUu6rwQUXWoUEWCJjVrr0y3A+ISxwuKMX8aoMJfMwZe8qpw1vhfGP/kBce6q1tt52gTyGP5aP3qyvFXgDO6y6FFWDxySjGoJVboBxYQ9hDsIJAHsY= ;{id = 62298} 0573727630320C74797065732D7369676E6564027762087369646E6C616273026E6C00002100010000003C0030FFFFFFFFFFFF0C6F6C642D736C6F772D626F780C74797065732D7369676E6564027762087369646E6C616273026E6C00 srv02.types-signed.wb.sidnlabs.nl. 60 IN SRV 65535 65535 65535 old-slow-box.types-signed.wb.sidnlabs.nl. 0573727630320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002EACB1753E92C2EF5D64E44E7116DAA402DEE878F690549F8B4E2330C3A580FDAE494958F6FB1F87FAE6787AA85FF6EA892B63246CC5BD3727FCC3102BEC9BB98443F970E9249F282C4ADB8F548EE52E8A29D001E96B0CC99FAFE7309016BC61FEE81400BD9B6BCC4612E136006520A1A3EF25141AEE15EE7B87766CC2C3AF78 srv02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LqyxdT6Swu9dZOROcRbapALe6Hj2kFSfi04jMMOlgP2uSUlY9vsfh/rmeHqoX/bqiStjJGzFvTcn/MMQK+ybuYRD+XDpJJ8oLErbj1SO5S6KKdAB6WsMyZ+v5zCQFrxh/ugUAL2ba8xGEuE2AGUgoaPvJRQa7hXue4d2bMLDr3g= ;{id = 62298} 0573727630320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C0674616C696E6B0C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000004003 srv02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC talink.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC 0573727630320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0078DFBCD398516BE2BDEC0857EAACC870069AA1C21AB1647F59903CE3034401763449E8BCF2E37992DD9084266F46C5E1A1F88AEF0A4A918DFC11F03FDF3F4724D06C3AC0E66E8E6A6252446B1D7BB40B430E41B7EC4F340816AE0811C6B910117B593AC3AE96DF0D0C23BAA0765605CE0B81EBDCEF21B6D8504152295B5D4852 srv02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eN+805hRa+K97AhX6qzIcAaaocIasWR/WZA84wNEAXY0Sei88uN5kt2QhCZvRsXhofiK7wpKkY38EfA/3z9HJNBsOsDmbo5qYlJEax17tAtDDkG37E80CBauCBHGuRARe1k6w66W3w0MI7qgdlYFzguB69zvIbbYUEFSKVtdSFI= ;{id = 62298} 0674616C696E6B0C74797065732D7369676E6564027762087369646E6C616273026E6C00003A00010000003C0020026830076578616D706C6503636F6D00026831076578616D706C6503636F6D00 talink.types-signed.wb.sidnlabs.nl. 60 IN TALINK h0.example.com. h1.example.com. 0674616C696E6B0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003A08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000460664413F05EC3A1BBD570BF9B17975FD44CE4CDC4ADDCA56602F16A1E4D653AB55BB02F0C2BC9E575FA284AE1F6584A46CC20C541764B2A9613385BB0E26A9AEDD23BFF2199AF7859FF45BBAB1CC69AC79A069901F51C3BFBA08F94D6156AB3AC1111E0CE2CAD3EF69E3A014AD1C1B3CC752C2D3CEB64AD2E9AD2FFDF9FA4 talink.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TALINK 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BGBmRBPwXsOhu9Vwv5sXl1/UTOTNxK3cpWYC8WoeTWU6tVuwLwwryeV1+ihK4fZYSkbMIMVBdksqlhM4W7Diaprt0jv/IZmveFn/RburHMaax5oGmQH1HDv7oI+U1hVqs6wREeDOLK0+9p46AUrRwbPMdSwtPOtkrS6a0v/fn6Q= ;{id = 62298} 0674616C696E6B0C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C04746C73610C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030020 talink.types-signed.wb.sidnlabs.nl. 3600 IN NSEC tlsa.types-signed.wb.sidnlabs.nl. RRSIG NSEC TALINK 0674616C696E6B0C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0060E1F004624CD3B9FC3ED1ABDDEEA03301F3F8EC565379F31A5ABD9EE11120AB8B8891FE890FB9452A922EA587A164F44C06542B871F565002AA62E37E64C1BBC60A8DB58F921879912FE4B439D5958C4140376C6A645E1A7B4A43BCD9BA314ABE5D4025C0451BB9F22F6FAEB835D569275CA27809788B24268A3DFEA000A77E talink.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. YOHwBGJM07n8PtGr3e6gMwHz+OxWU3nzGlq9nuERIKuLiJH+iQ+5RSqSLqWHoWT0TAZUK4cfVlACqmLjfmTBu8YKjbWPkhh5kS/ktDnVlYxBQDdsamReGntKQ7zZujFKvl1AJcBFG7nyL2+uuDXVaSdcongJeIskJoo9/qAAp34= ;{id = 62298} 04746C73610C74797065732D7369676E6564027762087369646E6C616273026E6C00003400010000003C004301010292003BA34942DC74152E2F2C408D29ECA5A520E7F2E06BB944F4DCA346BAF63C1B177615D466F6C4B71C216A50292BD58C9EBDD2F74E38FE51FFD48C43326CBC tlsa.types-signed.wb.sidnlabs.nl. 60 IN TLSA 1 1 2 92003BA34942DC74152E2F2C408D29ECA5A520E7F2E06BB944F4DCA346BAF63C1B177615D466F6C4B71C216A50292BD58C9EBDD2F74E38FE51FFD48C43326CBC 04746C73610C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00CDF2D66C5A7233727509DCF1533BD3B881201A38B55698C061D3CB198F0FD19CD15D618E1FC1A71FE2229CF67115B86585F5E29B77FA5D51E634DAD12AA8DA4818633956AFEF2805555CFEF4C5C97E8E9EC5C23704BC6F6C67077D72BC7F53D42ECF5EE50C8962BBE364C1D4D7B0B77CBC89866D1A0582F12E7E6F06CE06C9D2 tlsa.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TLSA 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. zfLWbFpyM3J1CdzxUzvTuIEgGji1VpjAYdPLGY8P0ZzRXWGOH8GnH+IinPZxFbhlhfXim3f6XVHmNNrRKqjaSBhjOVav7ygFVVz+9MXJfo6excI3BLxvbGcHfXK8f1PULs9e5QyJYrvjZMHU17C3fLyJhm0aBYLxLn5vBs4GydI= ;{id = 62298} 04746C73610C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002A037478740C74797065732D7369676E6564027762087369646E6C616273026E6C00000700000000000308 tlsa.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt.types-signed.wb.sidnlabs.nl. RRSIG NSEC TLSA 04746C73610C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0097F52F8B14A82A9CAC0A35A306CA9E98F35AB8BA98D824BE14A8235CBBE93CCA3A576C0E83D36AB951F08EB298CB52FD303E4D8D6790762033CC4A036CB8BBB0898FE5303053D5E4DDFFBD719FC1D5DD280A08E9315C304DA8883F7F3E10E9E6910185F466878EC57C60EC5035E2B8E074483414E50079B458F9BA36E4C5789F tlsa.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. l/UvixSoKpysCjWjBsqemPNauLqY2CS+FKgjXLvpPMo6V2wOg9NquVHwjrKYy1L9MD5NjWeQdiAzzEoDbLi7sImP5TAwU9Xk3f+9cZ/B1d0oCgjpMVwwTaiIP38+EOnmkQGF9GaHjsV8YOxQNeK44HRINBTlAHm0WPm6NuTFeJ8= ;{id = 62298} 037478740C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C001405224A75737405736F6D65220122057465787422 txt.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"Just" "some\"" "\"" "text\"" 037478740C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C008BD56AA1A540EDBA0C4E8C89205FCC77D142551210620869DA88C33C65378505B9055464096FAFCA8F660272FEF9898EC9FFE69078A9328F8958C8A0B43FE6904AD124E1C0CFD025E5439D0C56E9DE8BACA71039484FCD99C1FAC1C9F088246227AE05A44A898901F146006B66EA8B649F0965FCAE69C120411A8D2EF406E241 txt.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. i9VqoaVA7boMToyJIF/Md9FCVRIQYghp2ojDPGU3hQW5BVRkCW+vyo9mAnL++YmOyf/mkHipMo+JWMigtD/mkErRJOHAz9Al5UOdDFbp3ouspxA5SE/NmcH6wcnwiCRiJ64FpEqJiQHxRgBrZuqLZJ8JZfyuacEgQRqNLvQG4kE= ;{id = 62298} 037478740C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt01.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 037478740C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0078954E69CC79D8C8EEBBF34BF3EFF6565D66B9587437F5B215D91482FC4DB0311769504211CF9528C0AAA81C18FE1B0B5BDDDF35BE31E59599E5B450C79858AB23295953C1044D5F0BB2B9F5FE80848F22E2A9E2E7FB82A7017B5F9A9BA6EDFAEE934007B197856D441102CFB93E9218C2F47230FE883183829DC99646529830 txt.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eJVOacx52Mjuu/NL8+/2Vl1muVh0N/WyFdkUgvxNsDEXaVBCEc+VKMCqqBwY/hsLW93fNb4x5ZWZ5bRQx5hYqyMpWVPBBE1fC7K59f6AhI8i4qni5/uCpwF7X5qbpu367pNAB7GXhW1EEQLPuT6SGML0cjD+iDGDgp3JlkZSmDA= ;{id = 62298} 0574787430310C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000403666F6F txt01.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" 0574787430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BAF485241B5AC03407D32844CA9FBD69372E1CFCA7714723FC4CDDC197F00DBE86E34F3A91CD5618D72E3532B31EB6AD8A60A3D769BAAA71FCA302F19C837A3039CB686A5AD3544D2C07CEC81AE5ABD850CF6AD793A6525958A813754F014C73691652530669546D7A746A989C4661A356451F5D2D6E21479A4C29AFBF0D9800 txt01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uvSFJBtawDQH0yhEyp+9aTcuHPyncUcj/EzdwZfwDb6G4086kc1WGNcuNTKzHratimCj12m6qnH8owLxnIN6MDnLaGpa01RNLAfOyBrlq9hQz2rXk6ZSWVioE3VPAUxzaRZSUwZpVG16dGqYnEZho1ZFH10tbiFHmkwpr78NmAA= ;{id = 62298} 0574787430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt02.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003CF324223B2312A4D068D7440F5AA6856C47475AC6AD76579F7F1DC33C1054E695FB07E36210D2506C4EDA77DE7CF3B61067F2CE9DB0809AD327F3E96DA78394699284F77B2150B29989C5AB641826D6D13D4266A3802A8FACFBA8839E9D11D2B9DAE756DC8113827EF5464B4E3262BA9826A9B03CFA9A7FCEB704A9C80DD091 txt01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. PPMkIjsjEqTQaNdED1qmhWxHR1rGrXZXn38dwzwQVOaV+wfjYhDSUGxO2nfefPO2EGfyzp2wgJrTJ/PpbaeDlGmShPd7IVCymYnFq2QYJtbRPUJmo4Aqj6z7qIOenRHSudrnVtyBE4J+9UZLTjJiupgmqbA8+pp/zrcEqcgN0JE= ;{id = 62298} 0574787430320C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000803666F6F03626172 txt02.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" "bar" 0574787430320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B61880BFFE98FB6CE1370A023F4EB5385060026D0E188AA2AE3799D6C134A3C30647EE9AB41045A1ED003890E21983A4354EFFDDEB572608CE7B1F8D54D4F1718B55A8D12828A49B870F620CDA20BB875C8C01F96A899EBE60B0F5CC48F04709B956DFFBF779267AD4196261197FE7B858FCB19E027679579AC211B15969070C txt02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. thiAv/6Y+2zhNwoCP061OFBgAm0OGIqirjeZ1sE0o8MGR+6atBBFoe0AOJDiGYOkNU7/3etXJgjOex+NVNTxcYtVqNEoKKSbhw9iDNogu4dcjAH5aomevmCw9cxI8EcJuVbf+/d5JnrUGWJhGX/nuFj8sZ4CdnlXmsIRsVlpBww= ;{id = 62298} 0574787430320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430330C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt03.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0069190076BB65B21AE47F094B08FBE8D1E9995630C1CF93E7102ECDE51D0B982C775969EF7B7545781D44F6BC2BDEEFC5C68B6D099ED6C39E9D628F191B98D2FE07278FA7F8B0EE2916FED9C88F512F06827B6E84FE984BB1C965C9C7B2DEB106BDF2A9E85EAB9194E8B365BE02C9FEE63E9A1BC0A1560A98C1B33C0CAA31A049 txt02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. aRkAdrtlshrkfwlLCPvo0emZVjDBz5PnEC7N5R0LmCx3WWnve3VFeB1E9rwr3u/FxottCZ7Ww56dYo8ZG5jS/gcnj6f4sO4pFv7ZyI9RLwaCe26E/phLscllycey3rEGvfKp6F6rkZTos2W+Asn+5j6aG8ChVgqYwbM8DKoxoEk= ;{id = 62298} 0574787430330C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000403666F6F txt03.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" 0574787430330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005A4BA080E4AAEEFDBA92DC3EDBBB72A429D0D8F2D9D144A4432A2A9DB4C74CAAF8BC5D5B0D96BE08C5F81826A7B27F1682A2F4AF14485EB29258230BADEBA8AE0F11AD39388026D0CA74806D67EAC9DEC3A545BB7D7735B90951845967DE471408BF7C02F8F1FAFD7AAA428A199669F46C1A6A9606FB20F5CC34CEFD66458513 txt03.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. WkuggOSq7v26ktw+27typCnQ2PLZ0USkQyoqnbTHTKr4vF1bDZa+CMX4GCansn8WgqL0rxRIXrKSWCMLreuorg8RrTk4gCbQynSAbWfqyd7DpUW7fXc1uQlRhFln3kcUCL98Avjx+v16qkKKGZZp9GwaapYG+yD1zDTO/WZFhRM= ;{id = 62298} 0574787430330C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430340C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt03.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt04.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009DD6B0FEB54F97547379B144F5F32F6A8253FC454D0DBC9B70C08995430C18A69640DDA102FE4C06F179C3952976C715BFEA4BA627A7414C5B0648A095B8FE03F4BF279A65A2FB34238F0315AC70D636A6EBA133AE3F6608324BABD1712119A4EC6F80F44803796BAA4A5A68ECDABA012284A5C6017074B141B6195D661E1FC4 txt03.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ndaw/rVPl1RzebFE9fMvaoJT/EVNDbybcMCJlUMMGKaWQN2hAv5MBvF5w5UpdscVv+pLpienQUxbBkiglbj+A/S/J5plovs0I48DFaxw1jam66Ezrj9mCDJLq9FxIRmk7G+A9EgDeWuqSlpo7Nq6ASKEpcYBcHSxQbYZXWYeH8Q= ;{id = 62298} 0574787430340C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000803666F6F03626172 txt04.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" "bar" 0574787430340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000C86EC0C5DE52EB9C3235EAC5F43DDDAF5C54BA22942AAFB304A926A51E70B43A17BD66648E87D6F52DF536CD948C8C6BD0E501B3BDBAAC02984461FFC7334F0C3755F616309D5F1CCC862E4BCD4B32B27455FBB0F509C266A0D22783DE0B6053AC86E2C39E9D36F130C4EDE2E6023A631A9400DDF90AD4DB169C6818D4A7869 txt04.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DIbsDF3lLrnDI16sX0Pd2vXFS6IpQqr7MEqSalHnC0Ohe9ZmSOh9b1LfU2zZSMjGvQ5QGzvbqsAphEYf/HM08MN1X2FjCdXxzMhi5LzUsysnRV+7D1CcJmoNIng94LYFOshuLDnp028TDE7eLmAjpjGpQA3fkK1NsWnGgY1KeGk= ;{id = 62298} 0574787430340C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430350C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt04.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt05.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B5E9355D66E7E11E110C81F4C273DFC805261341C5E53914C80FD6D9DEFFB63FCF4B21D254E335804735985A38ADEF72CC02945A869C45E1D5B282493127CB44298415EC414015E631983C532C28F07CCFED89708D1DF85A4DCF942026E856EF9F35449024966BEE831BDF73B31F86CEA46EB0B6BE9EC44EDEE1896A6331CC44 txt04.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tek1XWbn4R4RDIH0wnPfyAUmE0HF5TkUyA/W2d7/tj/PSyHSVOM1gEc1mFo4re9yzAKUWoacReHVsoJJMSfLRCmEFexBQBXmMZg8Uywo8HzP7YlwjR34Wk3PlCAm6FbvnzVEkCSWa+6DG99zsx+GzqRusLa+nsRO3uGJamMxzEQ= ;{id = 62298} 0574787430350C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000807666F6F20626172 txt05.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" 0574787430350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002C3ECB6C8F92E28F8C3A18934B4BA8E4D585CE520CB897E9DD2F302274CA48A8592CE6911BE4BE5EFC82D6B3023BC5A0C15C6D1878E48A794A5853291085F5DEED67BCDC55B4B9E4557EB1238DB2F34AB85ACF1997F5A8BF0C8A27B2DD9E4CEB33FB9DA5741C024D17322935CC1764244E8B6CA1E821CEDE8354C5F25F545908 txt05.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LD7LbI+S4o+MOhiTS0uo5NWFzlIMuJfp3S8wInTKSKhZLOaRG+S+XvyC1rMCO8WgwVxtGHjkinlKWFMpEIX13u1nvNxVtLnkVX6xI42y80q4Ws8Zl/WovwyKJ7LdnkzrM/udpXQcAk0XMik1zBdkJE6LbKHoIc7eg1TF8l9UWQg= ;{id = 62298} 0574787430350C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430360C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt05.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt06.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00049035F97A89E76C0275504C3143A8C0F468C49785FD3994D2E30C4082CC855E57EC435D4435398148442C9ABDE07CC54DD66C433A9E847D11D2794578E43B78BFA1BBB7B2D4E9723643715B9A507DC02ABC48965EB42EE35B1CC91A82B353DC0CCF10C5F5D0EFD17CB1AF7E24782439690B886782824D89B95B621CFBB90167 txt05.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BJA1+XqJ52wCdVBMMUOowPRoxJeF/TmU0uMMQILMhV5X7ENdRDU5gUhELJq94HzFTdZsQzqehH0R0nlFeOQ7eL+hu7ey1OlyNkNxW5pQfcAqvEiWXrQu41scyRqCs1PcDM8QxfXQ79F8sa9+JHgkOWkLiGeCgk2JuVtiHPu5AWc= ;{id = 62298} 0574787430360C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000807666F6F20626172 txt06.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" 0574787430360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001693E3E25DCE053707AC78DB183FDC7D97CEFCBEBD3DBB9AF3EB173D150CB421AB3F7242386991FA2C090553E572AA332F33B88DA3E02B81E09F45A300A0E978DA00B29D7700B8D0EE4747558973FBDACC60E7F1766E7CD66A59D4D463B71551BA55B23692F434E9D07BF4C41C3120022677B86BC713426F995CB01E06B71668 txt06.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. FpPj4l3OBTcHrHjbGD/cfZfO/L69Pbua8+sXPRUMtCGrP3JCOGmR+iwJBVPlcqozLzO4jaPgK4Hgn0WjAKDpeNoAsp13ALjQ7kdHVYlz+9rMYOfxdm581mpZ1NRjtxVRulWyNpL0NOnQe/TEHDEgAiZ3uGvHE0JvmVywHga3Fmg= ;{id = 62298} 0574787430360C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430370C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt06.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt07.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0085CD08D248F0B6D700EFDA6DB9B89A2591215DC1E0FC1DC53A870430111E422681FAF6485CD8F65E67E13079A9A6B129CC5EB74205A6702B15BD08167BE658E521B40B63D95D6871F4AD2B4144C2697703F53870BE805D6D4BD24D63436DFA0276D4C69F6AC83582E7F013B40CF6F81538C662E5A14EFFD122FEA3908BF649EB txt06.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. hc0I0kjwttcA79ptubiaJZEhXcHg/B3FOocEMBEeQiaB+vZIXNj2XmfhMHmpprEpzF63QgWmcCsVvQgWe+ZY5SG0C2PZXWhx9K0rQUTCaXcD9ThwvoBdbUvSTWNDbfoCdtTGn2rINYLn8BO0DPb4FTjGYuWhTv/RIv6jkIv2Ses= ;{id = 62298} 0574787430370C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000807666F6F20626172 txt07.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" 0574787430370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005B1F105472039EC943ED4692C8661E77DBC84CB3E69DD8186C116354CB8FE24B400D2A3337B493FDA45D43A1FCB7AD4415F02F2A558B0D7EFDF8EA48590F11B84380E6B510355AD342260D2C236F1AE74827A2C501AE5B4E957D9E5E81FED08B2862044F40700CDA6AEACF2C82980887AE7913832AED4BCABF9568B6A010AC64 txt07.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Wx8QVHIDnslD7UaSyGYed9vITLPmndgYbBFjVMuP4ktADSozN7ST/aRdQ6H8t61EFfAvKlWLDX79+OpIWQ8RuEOA5rUQNVrTQiYNLCNvGudIJ6LFAa5bTpV9nl6B/tCLKGIET0BwDNpq6s8sgpgIh655E4Mq7UvKv5VotqAQrGQ= ;{id = 62298} 0574787430370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430380C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt07.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt08.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00A350B2E5D3C33A32BC09D93C17A14A1CD88F223F2DD7DFF41CDAAC0B8BF8B31844C7239EBA15A32057A962AA9890F95D830E1F5C5B0E28913DC9466517DC6D298223CBDBAA26B9FEAAFB12E680F2EAFE0D42FD572A00BD315E3E949115D7126E2AFAE1FA9C6EA7F85E2C05BEF3FF31966537A4BC2C960DC8241182AE408EAF0B txt07.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. o1Cy5dPDOjK8Cdk8F6FKHNiPIj8t19/0HNqsC4v4sxhExyOeuhWjIFepYqqYkPldgw4fXFsOKJE9yUZlF9xtKYIjy9uqJrn+qvsS5oDy6v4NQv1XKgC9MV4+lJEV1xJuKvrh+pxup/heLAW+8/8xlmU3pLwslg3IJBGCrkCOrws= ;{id = 62298} 0574787430380C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000807666F6F0A626172 txt08.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo\010bar" 0574787430380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007EAF50D5E3D3AFC367CB51F1F4F023F84610B30AAD49CD6582938222D77A36FB7CA10B78E76158405EAED1509E66E1FE4D61C8B9877455DC7AE7394267CE7108928F85B85FAB33240E45C1C2363F8BEE72F8EA4B7536EB15ADD57F0F769DF8C1BD39164FD2C75278F32E8ED7A1A8881C07992998BD82ABEAAD739426CD67ED8C txt08.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fq9Q1ePTr8Nny1Hx9PAj+EYQswqtSc1lgpOCItd6Nvt8oQt452FYQF6u0VCeZuH+TWHIuYd0Vdx65zlCZ85xCJKPhbhfqzMkDkXBwjY/i+5y+OpLdTbrFa3Vfw92nfjBvTkWT9LHUnjzLo7XoaiIHAeZKZi9gqvqrXOUJs1n7Yw= ;{id = 62298} 0574787430380C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787430390C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt08.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt09.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00045A9E069174356C639F3E496F82EA4649C1AC7D378C1F56E3C122E5811220D0DCE1C6BB2137DEBECAB61C68242AA6CDEC77D16E07BE9F0919A7E061DBD4825CAEFE9646A255EA15B902B54EBE6DC2B9B6479E78782A95EC492C0E3038A10A939DF5DBA202D6221F10CCFE2B07571C2D41784CB69A6D727211EFE533CF9F2060 txt08.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BFqeBpF0NWxjnz5Jb4LqRknBrH03jB9W48Ei5YESINDc4ca7ITfevsq2HGgkKqbN7HfRbge+nwkZp+Bh29SCXK7+lkaiVeoVuQK1Tr5twrm2R554eCqV7EksDjA4oQqTnfXbogLWIh8QzP4rB1ccLUF4TLaabXJyEe/lM8+fIGA= ;{id = 62298} 0574787430390C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000807666F6F0A626172 txt09.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo\010bar" 0574787430390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0004931F8D7A5AC5F385A61D80BBB4580A906ECF5F5DBC9A780B6D45BB4DDB10DEB4FE9E92739F56CF510C7602A5C22656323F689215DAD1AC28093BFFD8F1A4588890BD508ADA42705D1F6461CE85379C4F488D3684E85C24AD98974A80828E6791AB887E32F74132181C10C04A297ABFE52144AFE9E13CCD17EB4B639185D09E txt09.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BJMfjXpaxfOFph2Au7RYCpBuz19dvJp4C21Fu03bEN60/p6Sc59Wz1EMdgKlwiZWMj9okhXa0awoCTv/2PGkWIiQvVCK2kJwXR9kYc6FN5xPSI02hOhcJK2Yl0qAgo5nkauIfjL3QTIYHBDASil6v+UhRK/p4TzNF+tLY5GF0J4= ;{id = 62298} 0574787430390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787431300C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt09.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt10.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787430390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0082E41AB417CF62A108879C393508BAA05D1104596E6A4D17CB3B51033B29AE41478CAA4E8FFB8836E749E5F59ECF5D6ABDA0FECA0915AEB908C1F59515B4D3BFD33A07544208CA58AE97EC2CD86D726B0B9574035F615FE1898631F783B5FCA249B7275256C08696E47073EDDCD21341CDD9E38332F7B20EC3339B25290CCD2E txt09.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. guQatBfPYqEIh5w5NQi6oF0RBFluak0XyztRAzsprkFHjKpOj/uINudJ5fWez11qvaD+ygkVrrkIwfWVFbTTv9M6B1RCCMpYrpfsLNhtcmsLlXQDX2Ff4YmGMfeDtfyiSbcnUlbAhpbkcHPt3NITQc3Z44My97IOwzObJSkMzS4= ;{id = 62298} 0574787431300C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C000807666F6F20626172 txt10.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" 0574787431300C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00079ABF65F4B0AF532D43D8F7C87DB58EA95E7BC3BD8EC1F6DF89DB1E5D5DD8FF2B7B564817A3AFA521E7CA98F68599B7CC477D7E766957D2C0C7697313DA6032E49FA690E9263D87175EEEA7FC86310687450D052364D268EC5D2AE2A699362AFB758176549B98769D63A7D61F7649733797B55C437755671499D5B42903B842 txt10.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. B5q/ZfSwr1MtQ9j3yH21jqlee8O9jsH234nbHl1d2P8re1ZIF6OvpSHnypj2hZm3zEd9fnZpV9LAx2lzE9pgMuSfppDpJj2HF17up/yGMQaHRQ0FI2TSaOxdKuKmmTYq+3WBdlSbmHadY6fWH3ZJczeXtVxDd1VnFJnVtCkDuEI= ;{id = 62298} 0574787431300C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787431310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt10.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt11.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787431300C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0009BB90E7994FE5F4F0F33ED788C31615092B594359BA645CE4C75B094FEA47A3EA3EDE2F963ED175826A6C2193C8017AE2C63311A7099C048CB9B5FAAC1B1F2640F014AFF45EB281A17FF1E16B20086178FF12525117191EF396F5C268FF82F6BF5885C30E7AAFD4E032490C6764310FDEB69CFEF340D3AE4F07EAC9975138E5 txt10.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. CbuQ55lP5fTw8z7XiMMWFQkrWUNZumRc5MdbCU/qR6PqPt4vlj7RdYJqbCGTyAF64sYzEacJnASMubX6rBsfJkDwFK/0XrKBoX/x4WsgCGF4/xJSURcZHvOW9cJo/4L2v1iFww56r9TgMkkMZ2QxD962nP7zQNOuTwfqyZdROOU= ;{id = 62298} 0574787431310C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C00060522666F6F22 txt11.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"foo\"" 0574787431310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0092018C6609F373A95EB06AEED7058650B80EA1F11E8C915D12A5E847876B346D71131ECC200373E797E0A27A59E4AC7253AA5B49BFB2DE2563087F2F4B8EE0265EB0FE2AD0994C44045A94312B4C9133DE780D1CA8613AED11EC6AE0FBDA71104FDF721CB9E81BB4AF78061ADE5934B3D15D1C69E3C4410939FC04CB07B99E99 txt11.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. kgGMZgnzc6lesGru1wWGULgOofEejJFdEqXoR4drNG1xEx7MIANz55fgonpZ5KxyU6pbSb+y3iVjCH8vS47gJl6w/irQmUxEBFqUMStMkTPeeA0cqGE67RHsauD72nEQT99yHLnoG7SveAYa3lk0s9FdHGnjxEEJOfwEywe5npk= ;{id = 62298} 0574787431310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574787431320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt11.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt12.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787431310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0005A3586586F1ADEA3D768E15E2CA2329160249C380F804690E81D5EA553C8D28B6B8D7B3CCB7EC22CC6DCDD2786B400A415A8F627AB75E48216661FD1949347C674A490D10ED98C78ECC7798636534A986475988B0BBAC89E5415C091F3F733A5D82409FD46F136B84CCC87420DA2E04E3C8754C89332761E4FBC27173C0EBBD txt11.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BaNYZYbxreo9do4V4sojKRYCScOA+ARpDoHV6lU8jSi2uNezzLfsIsxtzdJ4a0AKQVqPYnq3XkghZmH9GUk0fGdKSQ0Q7ZjHjsx3mGNlNKmGR1mIsLusieVBXAkfP3M6XYJAn9RvE2uEzMh0INouBOPIdUyJMydh5PvCcXPA670= ;{id = 62298} 0574787431320C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C00060522666F6F22 txt12.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"foo\"" 0574787431320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00541ACC2F0568FC015005BA404D5302E45988D6EA7F98A63C2031569966F234F8B2A2530584498F9D359DDEA9FDF9680413C1818D1BA3F12F587ABCEE1CEE71819798AB193A0B1AAB8716B6D3D268E7D2901128D3D197A913E13F2ACB2B901503EE28A49DFC781837BC47141048C664F907CEE512CADCC34548747151F3A9F833 txt12.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VBrMLwVo/AFQBbpATVMC5FmI1up/mKY8IDFWmWbyNPiyolMFhEmPnTWd3qn9+WgEE8GBjRuj8S9YerzuHO5xgZeYqxk6Cxqrhxa209Jo59KQESjT0ZepE+E/KssrkBUD7iiknfx4GDe8RxQQSMZk+QfO5RLK3MNFSHRxUfOp+DM= ;{id = 62298} 0574787431320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574797065310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 txt12.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type1.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 0574787431320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B01A2B49A52907AC1D54ADD42FD9111B1CF087E4690E5E0ACC6ACB5253EB5008C03088BF16E32F4691B132F908BF4A28D985AEFE4B7CC9D198906988EF012BFECA9CF1534AA029D7766AD2E98DE689CA7BD68FCC5236E0412688AA9D4454DE2BB476E802858DA45F5644493008D944F94EB4257C57DDF4FD1D3F0C078CBE8ACE txt12.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. sBorSaUpB6wdVK3UL9kRGxzwh+RpDl4KzGrLUlPrUAjAMIi/FuMvRpGxMvkIv0oo2YWu/kt8ydGYkGmI7wEr/sqc8VNKoCnXdmrS6Y3micp71o/MUjbgQSaIqp1EVN4rtHboAoWNpF9WREkwCNlE+U60JXxX3fT9HT8MB4y+is4= ;{id = 62298} 0574797065310C74797065732D7369676E6564027762087369646E6C616273026E6C00000100010000003C0004D5881FDD type1.types-signed.wb.sidnlabs.nl. 60 IN A 213.136.31.221 0574797065310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001E72D8B48B5B914AC2598422D3FE4CFB9F4396B15E8BDB3C61025D66BEF3BDFFCFE32FDBF73F3BDFC1BE5A1826AFFF918900E4413CF9DF200D70FAAE493A8F5FF297A19C940B294D55FAB9374FF9F21CD4DA0966CE45A197FC285C2497EB00E3973EECD3A2135D5DABDD736781425D33D7BE15CE312DEB3DC96B669B857B9940 type1.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HnLYtItbkUrCWYQi0/5M+59DlrFei9s8YQJdZr7zvf/P4y/b9z8738G+Whgmr/+RiQDkQTz53yANcPquSTqPX/KXoZyUCylNVfq5N0/58hzU2glmzkWhl/woXCSX6wDjlz7s06ITXV2r3XNngUJdM9e+Fc4xLes9yWtmm4V7mUA= ;{id = 62298} 0574797065310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D07747970653130340C74797065732D7369676E6564027762087369646E6C616273026E6C000006400000000003 type1.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type104.types-signed.wb.sidnlabs.nl. A RRSIG NSEC 0574797065310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C004BE03DAD5F34D73B25CBB1BA9D04DD4544DBC8870003A8690F7B6274F24F73525A5A715CBE54B7FE05B1869E7D01403DE3ADABE6A44F77C9AA7B5C3EAA9D7A0E58AAA5DDBC29CD61985C43172061BE3DC2C551DD53D4D7270C3384C26E9C98D835A16B8A81C7C30CF8356436EE26562421D79D17EAEFC1EA9C71BE518ECBD366 type1.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. S+A9rV801zsly7G6nQTdRUTbyIcAA6hpD3tidPJPc1JaWnFcvlS3/gWxhp59AUA9462r5qRPd8mqe1w+qp16Dliqpd28Kc1hmFxDFyBhvj3CxVHdU9TXJwwzhMJunJjYNaFrioHHwwz4NWQ27iZWJCHXnRfq78HqnHG+UY7L02Y= ;{id = 62298} 07747970653130340C74797065732D7369676E6564027762087369646E6C616273026E6C00006800010000003C000A000A0094019801520169 type104.types-signed.wb.sidnlabs.nl. 60 IN NID 10 0094:0198:0152:0169 07747970653130340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D566532AF6419B038FD5C8652BDE327C0008889DB84C480BCA508F22A9A51AD2145DE21C0AD1D44F1AB40C74433E7807E1B4D5FD23748B11F399FBA156CF506775953AE4BFCD76C88F14D5DB62936A291C082ABA77A0B3AB77BF30EB85A39967D95372C2117DF51E9FFFCF8F5C2B2281656EB77A04D7BC8830D3CBA8AB6667C3 type104.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NID 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 1WZTKvZBmwOP1chlK94yfAAIiJ24TEgLylCPIqmlGtIUXeIcCtHUTxq0DHRDPngH4bTV/SN0ixHzmfuhVs9QZ3WVOuS/zXbIjxTV22KTaikcCCq6d6Czq3e/MOuFo5ln2VNywhF99R6f/8+PXCsigWVut3oE17yIMNPLqKtmZ8M= ;{id = 62298} 07747970653130340C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10003507747970653130350C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000080 type104.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type105.types-signed.wb.sidnlabs.nl. RRSIG NSEC NID 07747970653130340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B325AAB62B8B48111FE764A8AB15DB94B2C6E4807AEE43C3626E318AEB8CF1684D64E4D97F4951B0949A26DF27AEFF684DB1E2F8B78F6BCC071EDE041DE5E21103BF805E204DC211313E549821D39E0918CD667989619C4705E25B91E7962A432CC09BAAFDD1D39C4A36846E8017CFB5819B8036DED3953E77BD4E50D312D006 type104.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. syWqtiuLSBEf52SoqxXblLLG5IB67kPDYm4xiuuM8WhNZOTZf0lRsJSaJt8nrv9oTbHi+LePa8wHHt4EHeXiEQO/gF4gTcIRMT5UmCHTngkYzWZ5iWGcRwXiW5HnlipDLMCbqv3R05xKNoRugBfPtYGbgDbe05U+d71OUNMS0AY= ;{id = 62298} 07747970653130350C74797065732D7369676E6564027762087369646E6C616273026E6C00006900010000003C0006000AC0000201 type105.types-signed.wb.sidnlabs.nl. 60 IN L32 10 192.0.2.1 07747970653130350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0018539C6E19DDDA7E8A3F64C209F027A5699490AC0A4A94E8E91AFA6381649248E35ADC2114D86F1CA04B87305215DE2649327248253759940068005A7CAED1EBA6217E7A493BC18498AE90995A9E8550E93C08F906D20F99408CA8D18B1AA20627DE5139B16A8266416B9FE9E1D2F10BA97AF0B2181856A80D338AED8A323D38 type105.types-signed.wb.sidnlabs.nl. 60 IN RRSIG L32 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. GFOcbhnd2n6KP2TCCfAnpWmUkKwKSpTo6Rr6Y4FkkkjjWtwhFNhvHKBLhzBSFd4mSTJySCU3WZQAaABafK7R66YhfnpJO8GEmK6QmVqehVDpPAj5BtIPmUCMqNGLGqIGJ95RObFqgmZBa5/p4dLxC6l68LIYGFaoDTOK7YoyPTg= ;{id = 62298} 07747970653130350C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10003507747970653130360C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000040 type105.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type106.types-signed.wb.sidnlabs.nl. RRSIG NSEC L32 07747970653130350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001616926FFD37517788775845EDAD313ACB6586E3460D6C0A3C679D41F5449B8D5F0F2CDBD3F3B66A185017CBCE10706B0A82306DB13AAD9CF05D785A987B9D4A2AD6D6BD09CEC16BFA1CCFE3FAF33181466B19F1E49D60ED049F464CE04E4FF2AB2A4C50D0B07CC1DCC8B4C3ACA42A1F4F8C3EA82C428D705C1EF1CE6682EDEA type105.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. FhaSb/03UXeId1hF7a0xOstlhuNGDWwKPGedQfVEm41fDyzb0/O2ahhQF8vOEHBrCoIwbbE6rZzwXXhamHudSirW1r0JzsFr+hzP4/rzMYFGaxnx5J1g7QSfRkzgTk/yqypMUNCwfMHcyLTDrKQqH0+MPqgsQo1wXB7xzmaC7eo= ;{id = 62298} 07747970653130360C74797065732D7369676E6564027762087369646E6C616273026E6C00006A00010000003C000A000A2A000D7800040503 type106.types-signed.wb.sidnlabs.nl. 60 IN L64 10 2a00:0d78:0004:0503 07747970653130360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006A08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00AEF76EB3B886E8C728758AFB258A15F122A3D6239CBB859A2BA33D19E839A5B78DBCA9953E52BA342B00E8387DFAEE763425AF6E2853899E90578193BAD080A17CD6EBF6CFAB03BE1E4B677BCDB26B5FB7BD15AE8FB7A38BBE26A0BC03F1CF1C1A6F044CEDC7D8C12FD62E31467C3D3E607631A8876CF289E7A4B67E8BA8BB93 type106.types-signed.wb.sidnlabs.nl. 60 IN RRSIG L64 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rvdus7iG6McodYr7JYoV8SKj1iOcu4WaK6M9Geg5pbeNvKmVPlK6NCsA6Dh9+u52NCWvbihTiZ6QV4GTutCAoXzW6/bPqwO+Hktne82ya1+3vRWuj7eji74moLwD8c8cGm8ETO3H2MEv1i4xRnw9PmB2MaiHbPKJ56S2fouou5M= ;{id = 62298} 07747970653130360C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10003507747970653130370C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000020 type106.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type107.types-signed.wb.sidnlabs.nl. RRSIG NSEC L64 07747970653130360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0085076B7E7134981FB306A9E7AE276BB519BF861218000BC2B5D5DEABFBA7DE5A198549064E73A0C1397769614FD378FEDDA4A28457D0D6C6B90A3E09D6C18B3C54F9A75F9EA066335B1DCC3CEB7DBD68F7AAA0E1C17B77E9D01083C80FBA7C4CA535266E44BD55C60FB03FBBB1D4672A36E017652E5234E262616E631D5E1D21 type106.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. hQdrfnE0mB+zBqnnridrtRm/hhIYAAvCtdXeq/un3loZhUkGTnOgwTl3aWFP03j+3aSihFfQ1sa5Cj4J1sGLPFT5p1+eoGYzWx3MPOt9vWj3qqDhwXt36dAQg8gPunxMpTUmbkS9VcYPsD+7sdRnKjbgF2UuUjTiYmFuYx1eHSE= ;{id = 62298} 07747970653130370C74797065732D7369676E6564027762087369646E6C616273026E6C00006B00010000003C001B000A0B6C36342D7375626E657431076578616D706C6503636F6D00 type107.types-signed.wb.sidnlabs.nl. 60 IN LP 10 l64-subnet1.example.com. 07747970653130370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006A9BCD9615969BC5451373A1A80686BAF4994D7F73E9D04F977E5683DBDF935F6C69E3C19E447B2717B70E9CF4F0016FAD4FDD71B9BDC0D70E77A8E52AE748573983FC9D3A579048F25AD9BC41F5EDD0EAE88613B66F28642876E18C2BD444AEAFCD4C3E42DFA8C1328B02C07AB899CBBF60AA676EAE2C779911066BB3FE77F9 type107.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. apvNlhWWm8VFE3OhqAaGuvSZTX9z6dBPl35Wg9vfk19saePBnkR7Jxe3Dpz08AFvrU/dcbm9wNcOd6jlKudIVzmD/J06V5BI8lrZvEH17dDq6IYTtm8oZCh24Ywr1ESur81MPkLfqMEyiwLAeriZy79gqmdurix3mREGa7P+d/k= ;{id = 62298} 07747970653130370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100034067479706531310C74797065732D7369676E6564027762087369646E6C616273026E6C00000E0000000000030000000000000010 type107.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type11.types-signed.wb.sidnlabs.nl. RRSIG NSEC LP 07747970653130370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005A6CB3E2ABFA42752071ADC3D73D83DF1C2C9E3C97807735797FACACB8B86CFEF0ADA194E5E0433B99A2501DDA9E478C6AE1FDB180FC63956ED945EAD07D81A25CDD90CF8E5486ADB00104AD0A1815350786FDF45AF9718329DD0917132EE20F22CB587A9AC13FC40D582BD9EEBE8AEEA6796658341C24D02E886B4462EE45D1 type107.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Wmyz4qv6QnUgca3D1z2D3xwsnjyXgHc1eX+srLi4bP7wraGU5eBDO5miUB3ankeMauH9sYD8Y5Vu2UXq0H2BolzdkM+OVIatsAEErQoYFTUHhv30WvlxgyndCRcTLuIPIstYeprBP8QNWCvZ7r6K7qZ5Zlg0HCTQLohrRGLuRdE= ;{id = 62298} 067479706531310C74797065732D7369676E6564027762087369646E6C616273026E6C00000B00010000003C000A0A00000106E00005A060 type11.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 tcp 0 1 2 21 23 24 26 33 34 067479706531310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006CD9FF11E609BBB56BD60D0AEBD0E20B790ADB9D1926B5DA2E0770B717250B31A5D1C8FA96278125C3D124E3039EDDF04D065FB5D101DBB3FA7B9B4337D38E547773719AD5319CFD865A6A9307B27D2512F0325729C75CF22D59D9682D511D8565BA7157120A5E3E35934EF2FA27EF333142854B5B9EE47FCAC9062535A0C137 type11.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. bNn/EeYJu7Vr1g0K69DiC3kK250ZJrXaLgdwtxclCzGl0cj6lieBJcPRJOMDnt3wTQZftdEB27P6e5tDN9OOVHdzcZrVMZz9hlpqkweyfSUS8DJXKcdc8i1Z2WgtUR2FZbpxVxIKXj41k07y+ifvMzFChUtbnuR/yskGJTWgwTc= ;{id = 62298} 067479706531310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531320C74797065732D7369676E6564027762087369646E6C616273026E6C000006001000000003 type11.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type12.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC 067479706531310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B8CF3CFACBF9AA4ADC3236C72818F419380A7833836DBD70B2BB0162B204E76DEE2167FABAE9EC7830F3BA169AB36698F2407412DD4601157679EF8B9ACC246DD85BD74AA18D10E539B6BD83CBB79E0EC3FD70C22157EB29A837969B46A6A25ACB401307BA50B33DE75C7249031528595030907C6D69C5BB12800A2C49E8E570 type11.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uM88+sv5qkrcMjbHKBj0GTgKeDODbb1wsrsBYrIE523uIWf6uunseDDzuhaas2aY8kB0Et1GARV2ee+Lmswkbdhb10qhjRDlOba9g8u3ng7D/XDCIVfrKag3lptGpqJay0ATB7pQsz3nXHJJAxUoWVAwkHxtacW7EoAKLEno5XA= ;{id = 62298} 067479706531320C74797065732D7369676E6564027762087369646E6C616273026E6C00000C00010000003C001D0C74797065732D7369676E6564027762087369646E6C616273026E6C00 type12.types-signed.wb.sidnlabs.nl. 60 IN PTR types-signed.wb.sidnlabs.nl. 067479706531320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000C08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C79D7695C91FFB2FF4B3986ABE384F4DB95130DD19E04EA18CAC0024BE4FCADBE0BBA435E4360AC625E550F98D893ABDF715DC44F301DF9905EB2A340E88559A42267C8E75376A5B0B2C96097E0A83A99A0C72BDD9D29385644A76ABF5978244D56764DC9F25DB268133305E5C3C0D8A1A465B6E34C8449F918ED883991E4977 type12.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. x512lckf+y/0s5hqvjhPTblRMN0Z4E6hjKwAJL5Pytvgu6Q15DYKxiXlUPmNiTq99xXcRPMB35kF6yo0DohVmkImfI51N2pbCyyWCX4Kg6maDHK92dKThWRKdqv1l4JE1Wdk3J8l2yaBMzBeXDwNihpGW240yESfkY7Yg5keSXc= ;{id = 62298} 067479706531320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531330C74797065732D7369676E6564027762087369646E6C616273026E6C000006000800000003 type12.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type13.types-signed.wb.sidnlabs.nl. PTR RRSIG NSEC 067479706531320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D31A0EBF2678BC5C995D9A3FCF064436F5365C9778C8B43771582B9FF3380CE4C0FF0C5B2C8EF19C05E94F15228BBC397625667E40F34BBAC65110E82E098E18CFD08AE42BD7F99A8CC20B91408D872D16144945BE9D091F11D96D93B9C33B9D5DE9ABE7F3788F37287AAE1C2CD0EB6AAEAB5B1DEE430E558B00FE03A29EB656 type12.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0xoOvyZ4vFyZXZo/zwZENvU2XJd4yLQ3cVgrn/M4DOTA/wxbLI7xnAXpTxUii7w5diVmfkDzS7rGURDoLgmOGM/QiuQr1/majMILkUCNhy0WFElFvp0JHxHZbZO5wzudXemr5/N4jzcoeq4cLNDraq6rWx3uQw5ViwD+A6KetlY= ;{id = 62298} 067479706531330C74797065732D7369676E6564027762087369646E6C616273026E6C00000D00010000003C00161047656E6572696320504320636C6F6E65044D794F53 type13.types-signed.wb.sidnlabs.nl. 60 IN HINFO "Generic PC clone" "MyOS" 067479706531330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0004D1AAC324F692573047C535FD3089BA83272A849ED383B7EA68090799D8AA5CC34AF84523A7D78700092677EFDE94086EE2A6654BC81350D795828ADB9AED8A2D4A87B89143E9F45867F03A621C5491738A30F7DC7C5A8D1A7E58FC629F395A67DCC92B033E75601568B7BD9E1805099BF0E1D0A78054EE617D639FBEAB7212 type13.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BNGqwyT2klcwR8U1/TCJuoMnKoSe04O36mgJB5nYqlzDSvhFI6fXhwAJJnfv3pQIbuKmZUvIE1DXlYKK25rtii1Kh7iRQ+n0WGfwOmIcVJFzijD33HxajRp+WPxinzlaZ9zJKwM+dWAVaLe9nhgFCZvw4dCngFTuYX1jn76rchI= ;{id = 62298} 067479706531330C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531340C74797065732D7369676E6564027762087369646E6C616273026E6C000006000400000003 type13.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type14.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC 067479706531330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C1E7153B155A3F6C42B416034430D2B8E98CFE61A5968928E30F4FAA92CAC5BC1F9B58C07BCCA999115309FE8D9F49971E41290E4B0762877B1CF358DC6F8AB7ADCCBA610BCB99D06E4CCE406E2FFBF3AF18C2023958273BD9EE43DDBA6B85B0369020B813B070E5616E67589AC9E1E2D2ADE8DDA94F7BEDF2157B3B7DF309F6 type13.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. wecVOxVaP2xCtBYDRDDSuOmM/mGlloko4w9PqpLKxbwfm1jAe8ypmRFTCf6Nn0mXHkEpDksHYod7HPNY3G+Kt63MumELy5nQbkzOQG4v+/OvGMICOVgnO9nuQ926a4WwNpAguBOwcOVhbmdYmsnh4tKt6N2pT3vt8hV7O33zCfY= ;{id = 62298} 067479706531340C74797065732D7369676E6564027762087369646E6C616273026E6C00000E00010000003C002209626F786D617374657203666F6F0362617200076D61696C626F7805746865726500 type14.types-signed.wb.sidnlabs.nl. 60 IN MINFO boxmaster.foo.bar. mailbox.there. 067479706531340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000E08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00845C0F5672160BAFAA2964887EC2BFA70D525F041D199E84E745DAECCB541B1312BAACC94685B8824FD109568F0CC1C303C51625EE6FB8CDBF4058FD4F8359AB6BC46380A07B982CEF27F36B19743DFCADB6CE8EB9500194D3701D9C97C085B1CEE22EDE338D2C8A3745CD776FA62F6F40741F3897E8BD8A58417F77E7E11DC2 type14.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. hFwPVnIWC6+qKWSIfsK/pw1SXwQdGZ6E50Xa7MtUGxMSuqzJRoW4gk/RCVaPDMHDA8UWJe5vuM2/QFj9T4NZq2vEY4Cge5gs7yfzaxl0Pfytts6OuVABlNNwHZyXwIWxzuIu3jONLIo3Rc13b6Yvb0B0HziX6L2KWEF/d+fhHcI= ;{id = 62298} 067479706531340C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531350C74797065732D7369676E6564027762087369646E6C616273026E6C000006000200000003 type14.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type15.types-signed.wb.sidnlabs.nl. MINFO RRSIG NSEC 067479706531340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00317FEB3B70FDD1A7772BD7B8789BB69168FB7F4F3AB159B0569F0A1A9D8E0ED069DE7CDFD8E699CF804D04CEC124EA015C9B73E5DF207D6639ABD1145D99210786F4500C2930ACD5AD7A2711EF663CF8EBDFBCA7FF25F46ACF87FCE1185FBB6956179FD866BF79CA3D5E04D4D50921268FF41215D740B0D24E8788992575BFA1 type14.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MX/rO3D90ad3K9e4eJu2kWj7f086sVmwVp8KGp2ODtBp3nzf2OaZz4BNBM7BJOoBXJtz5d8gfWY5q9EUXZkhB4b0UAwpMKzVrXonEe9mPPjr37yn/yX0as+H/OEYX7tpVhef2Ga/eco9XgTU1QkhJo/0EhXXQLDSToeImSV1v6E= ;{id = 62298} 067479706531350C74797065732D7369676E6564027762087369646E6C616273026E6C00000F00010000003C002E000A0E6D61696C646F65736E74776F726B0C74797065732D7369676E6564027762087369646E6C616273026E6C00 type15.types-signed.wb.sidnlabs.nl. 60 IN MX 10 maildoesntwork.types-signed.wb.sidnlabs.nl. 067479706531350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000F08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006A50B273CB8EDE2AB15117DFA05C5808A787F7E9C86C4B79BBE38D429454E71F23721EF039ED45EF4EAF262EEBBD61656ADA7B54CCD57566CBF9C7C5E785B1058CF191ED365192896D548D6D9F5F8F3FB2BBB2A50198CD0911BBF86DA838EB38094B5FF57B3B10168DDFF0539127B3CE85347D440EA4212E1A13F3E04E53D122 type15.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. alCyc8uO3iqxURffoFxYCKeH9+nIbEt5u+ONQpRU5x8jch7wOe1F706vJi7rvWFlatp7VMzVdWbL+cfF54WxBYzxke02UZKJbVSNbZ9fjz+yu7KlAZjNCRG7+G2oOOs4CUtf9Xs7EBaN3/BTkSezzoU0fUQOpCEuGhPz4E5T0SI= ;{id = 62298} 067479706531350C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531360C74797065732D7369676E6564027762087369646E6C616273026E6C000006000100000003 type15.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type16.types-signed.wb.sidnlabs.nl. MX RRSIG NSEC 067479706531350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0055DA837B8FA08335692B8C3A42830DB7ACAA93296A3BFE075E0AFA16B858C1D9CFB019866EF5AEB858A0228A5A2C069B7AC6018263713A29E3C4ADC64721D93821D50FEEBD81027B0A9289D1523B6D15DBFC4A0817E85BDE88E7C18153E252BFA900C6C0030D997C30E03E16D8BBECCE896038BB43BAF831FCEE3E1DF2F9A75D type15.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VdqDe4+ggzVpK4w6QoMNt6yqkylqO/4HXgr6FrhYwdnPsBmGbvWuuFigIopaLAabesYBgmNxOinjxK3GRyHZOCHVD+69gQJ7CpKJ0VI7bRXb/EoIF+hb3ojnwYFT4lK/qQDGwAMNmXww4D4W2LvszolgOLtDuvgx/O4+HfL5p10= ;{id = 62298} 067479706531360C74797065732D7369676E6564027762087369646E6C616273026E6C00001000010000003C001405224A75737405736F6D65220122057465787422 type16.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"Just" "some\"" "\"" "text\"" 067479706531360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001008050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007B63449597EC2286BC37168C09C0505D6333A280D7A3C4DB5FD7B6DDB548B9A10E7B9632B732E0A3178AA09E41C57CDDF9C495B6833E8240B6F5FD86853F2D5AB77F09564E55BB3103FAA81EDF7AAB1F8BB872AE88DA4112B24B5469B8649E0568F01C4876759177A4EE9A0325B4E27B37B0EA89ABF99113F47F2C6BBB153327 type16.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. e2NElZfsIoa8NxaMCcBQXWMzooDXo8TbX9e23bVIuaEOe5YytzLgoxeKoJ5BxXzd+cSVtoM+gkC29f2GhT8tWrd/CVZOVbsxA/qoHt96qx+LuHKuiNpBErJLVGm4ZJ4FaPAcSHZ1kXek7poDJbTiezew6omr+ZET9H8sa7sVMyc= ;{id = 62298} 067479706531360C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531370C74797065732D7369676E6564027762087369646E6C616273026E6C000006000080000003 type16.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type17.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC 067479706531360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0022AF5481EA695CFE716B83587EA1076BFA323195721DC5A1A16E65C468C3621CAD395CA50F250DDB81360B17C8419C5CDDF54F53CE3CA0C34C97A843615D35C1BBC1A4F1EC2AAD74CE91F210952B19DC0314B20723E8525B01579879E1F376F7CB372AE3484BE995BC74091E9544E0A419125B32C47FB2211D2EAEF7EFC72B59 type16.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Iq9UgeppXP5xa4NYfqEHa/oyMZVyHcWhoW5lxGjDYhytOVylDyUN24E2CxfIQZxc3fVPU848oMNMl6hDYV01wbvBpPHsKq10zpHyEJUrGdwDFLIHI+hSWwFXmHnh83b3yzcq40hL6ZW8dAkelUTgpBkSWzLEf7IhHS6u9+/HK1k= ;{id = 62298} 067479706531370C74797065732D7369676E6564027762087369646E6C616273026E6C00001100010000003C002200037478740C74797065732D7369676E6564027762087369646E6C616273026E6C00 type17.types-signed.wb.sidnlabs.nl. 60 IN RP . txt.types-signed.wb.sidnlabs.nl. 067479706531370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0036A94354CE471C31EC3AC3783BA4187D6DCC614A0DC78544D33C6FB41970B7EC9D867C656E2BFB1BCA40722515AED2BA7ECC666BAB671E7AB4457501B94D03534828F63F406E377D6ED8D098636D467DF1CC92A9D31E59014766098165D439B3DB9B221A24078330D7DED6E66D271183BDE9FE4C6DEFF07BFC9AF34DE2030FED type17.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. NqlDVM5HHDHsOsN4O6QYfW3MYUoNx4VE0zxvtBlwt+ydhnxlbiv7G8pAciUVrtK6fsxma6tnHnq0RXUBuU0DU0go9j9Abjd9btjQmGNtRn3xzJKp0x5ZAUdmCYFl1Dmz25siGiQHgzDX3tbmbScRg73p/kxt7/B7/JrzTeIDD+0= ;{id = 62298} 067479706531370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531380C74797065732D7369676E6564027762087369646E6C616273026E6C000006000040000003 type17.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type18.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC 067479706531370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0055936C79CC62D1B06E6DE44F56CAED4C95D1F1B388142ED365F5295268AE689233822EE68973F170DA90025B970E0B12CFF51142582C62CB39D307A6A350C42621522CBCFDFDD9CC55EBBDAE3F09D75F371757F1B8F4104F54B564B92B97ED12FB870169C44EAB4C1B26FEF0D8332630E07DE038773C728E58E073CC396FEFFB type17.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VZNsecxi0bBubeRPVsrtTJXR8bOIFC7TZfUpUmiuaJIzgi7miXPxcNqQAluXDgsSz/URQlgsYss50wemo1DEJiFSLLz9/dnMVeu9rj8J1183F1fxuPQQT1S1ZLkrl+0S+4cBacROq0wbJv7w2DMmMOB94Dh3PHKOWOBzzDlv7/s= ;{id = 62298} 067479706531380C74797065732D7369676E6564027762087369646E6C616273026E6C00001200010000003C00273039076166736E6F64650C74797065732D7369676E6564027762087369646E6C616273026E6C00 type18.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 12345 afsnode.types-signed.wb.sidnlabs.nl. 067479706531380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001208050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00610CFAFDED06A23B267830F4EC89B66D07B6E102FE55B3E3821E520AB6E72D514B1C060FC4DB5A27F12B1C34F40E2D99A57AB8E7547682AF1C562D0E6B6A27E7D83380D769E6D109FBD7F398E8DD6BB6ADBB457B906D439EE328A9B889DE1443DB4905F2AA7C06AB26DBB42C3007A22A2A818DEF64F4012322DF09931BE3156C type18.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. YQz6/e0GojsmeDD07Im2bQe24QL+VbPjgh5SCrbnLVFLHAYPxNtaJ/ErHDT0Di2ZpXq451R2gq8cVi0Oa2on59gzgNdp5tEJ+9fzmOjda7atu0V7kG1DnuMoqbiJ3hRD20kF8qp8Bqsm27QsMAeiKiqBje9k9AEjIt8JkxvjFWw= ;{id = 62298} 067479706531380C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706531390C74797065732D7369676E6564027762087369646E6C616273026E6C000006000020000003 type18.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type19.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC 067479706531380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009DA2934C057BE75EEA6016192CF88374021A4575633A69AE87BF7A495DCB3BEC6D23C176963EB76BEDF5907E2C27F317A66E6039B789A6FE8CCE3AA0EBC9E3CB8052072B5499F9F75923A1C8A43548EC2CEA0DC5DAC27B8EBD478A75EDD9605A2F2B9BEAC700B8E4C34295CB3D7BCDD49CEE346504812F1F97AC957E7493F809 type18.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. naKTTAV7517qYBYZLPiDdAIaRXVjOmmuh796SV3LO+xtI8F2lj63a+31kH4sJ/MXpm5gObeJpv6Mzjqg68njy4BSBytUmfn3WSOhyKQ1SOws6g3F2sJ7jr1HinXt2WBaLyub6scAuOTDQpXLPXvN1JzuNGUEgS8fl6yVfnST+Ak= ;{id = 62298} 067479706531390C74797065732D7369676E6564027762087369646E6C616273026E6C00001300010000003C000B0A33303333303333303333 type19.types-signed.wb.sidnlabs.nl. 60 IN X25 "3033033033" 067479706531390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00CB1435F13DA39A918CDEEE1BA9C5BD15EBA402434DF0A1363A0DDC6CF6FC0E046A5E50CE334C8DCA099A1872A932DDCF1E55FF6EBF33362C6B65F6A11D73C307E20ADFE3F05A032478976D9146CF01B1E29C28B09CEB8E853C6E9D2995C2E18028DF98275E327DC99847160D7BC819B5E3FF3EA7254C8AC333AAF69E203999C5 type19.types-signed.wb.sidnlabs.nl. 60 IN RRSIG X25 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. yxQ18T2jmpGM3u4bqcW9FeukAkNN8KE2Og3cbPb8DgRqXlDOM0yNygmaGHKpMt3PHlX/br8zNixrZfahHXPDB+IK3+PwWgMkeJdtkUbPAbHinCiwnOuOhTxunSmVwuGAKN+YJ14yfcmYRxYNe8gZteP/PqclTIrDM6r2niA5mcU= ;{id = 62298} 067479706531390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532300C74797065732D7369676E6564027762087369646E6C616273026E6C000006000010000003 type19.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type20.types-signed.wb.sidnlabs.nl. X25 RRSIG NSEC 067479706531390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0030D30AEA9FC35111E7D134FB0DB48EC3E6DAEEF2019B03742011ADE10C592C2CB98CE1EE86921F718B57783FACFB2791760A64AA9E102DA23F7AA5F095A313C52F3273F4189A857D94A180AE7235BB6FFDE7863199C29F664AD1B5A0435A1D667C114EFE198DCD735D5322A962702196D7766EF29FFDFB394C4A5A6AB48CDD91 type19.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MNMK6p/DURHn0TT7DbSOw+ba7vIBmwN0IBGt4QxZLCy5jOHuhpIfcYtXeD+s+yeRdgpkqp4QLaI/eqXwlaMTxS8yc/QYmoV9lKGArnI1u2/954YxmcKfZkrRtaBDWh1mfBFO/hmNzXNdUyKpYnAhltd2bvKf/fs5TEpaarSM3ZE= ;{id = 62298} 067479706532300C74797065732D7369676E6564027762087369646E6C616273026E6C00001400010000003C00180C6973646E2D616464726573730A73756261646472657373 type20.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" 067479706532300C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003E87F64D1DAC92B9DE83228DCDDE1FFE0A89C746BB3906DB1768A1BDCBC6CA6F29010D384BFD2ED7E4CD9E470C4BBFE53BB5DC62C484B564CC601F787DCA90ECB6A2294F7128E936899C6D3068F8378E9E0530B6101B389647CED450B5663DCB5CC2D2C28C5EC8990E5895F3220AA50C7969A223B716F4BF0D5B3FAE69AEF792 type20.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Pof2TR2skrnegyKNzd4f/gqJx0a7OQbbF2ihvcvGym8pAQ04S/0u1+TNnkcMS7/lO7XcYsSEtWTMYB94fcqQ7LaiKU9xKOk2iZxtMGj4N46eBTC2EBs4lkfO1FC1Zj3LXMLSwoxeyJkOWJXzIgqlDHlpoiO3FvS/DVs/rmmu95I= ;{id = 62298} 067479706532300C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532310C74797065732D7369676E6564027762087369646E6C616273026E6C000006000008000003 type20.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type21.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC 067479706532300C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00295C19B04B2FEC64F9740D0C8DA48CAE00A7AF61502486FEC0384F1F82C6265A9ADA0C1462F74297643F105642B7157743A993086B005F8E86936C9D57D706E2BA52DAF0FC6A5C42FF19B45B60BACE3F9E1023F809738728600CD42F7464DD29F5F1F3CCF08A0FC70758B28F8B8EC25CE27F86440D430644CD44221B9F6626B0 type20.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. KVwZsEsv7GT5dA0MjaSMrgCnr2FQJIb+wDhPH4LGJlqa2gwUYvdCl2Q/EFZCtxV3Q6mTCGsAX46Gk2ydV9cG4rpS2vD8alxC/xm0W2C6zj+eECP4CXOHKGAM1C90ZN0p9fHzzPCKD8cHWLKPi47CXOJ/hkQNQwZEzUQiG59mJrA= ;{id = 62298} 067479706532310C74797065732D7369676E6564027762087369646E6C616273026E6C00001500010000003C0026000A067274686F73740C74797065732D7369676E6564027762087369646E6C616273026E6C00 type21.types-signed.wb.sidnlabs.nl. 60 IN RT 10 rthost.types-signed.wb.sidnlabs.nl. 067479706532310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00526E5CF996A1A75CA27CC6E8E3608C4ECEAF96154012257FE2F8DDE3549525283DC1D69F2C5C593C5C4D44E736AA6A863D1D4353E44D71FEEEE3B006D6395DE8F28134F55212BFD10EB6F91824E831D3CF3CC830A79799F6D53D5ADB887FA2FE92211DCD27FB23DD7B1B248B60F9EF0B21C8A9F1489779F09D24A4BEE2C3B865 type21.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Um5c+Zahp1yifMbo42CMTs6vlhVAEiV/4vjd41SVJSg9wdafLFxZPFxNROc2qmqGPR1DU+RNcf7u47AG1jld6PKBNPVSEr/RDrb5GCToMdPPPMgwp5eZ9tU9WtuIf6L+kiEdzSf7I917GySLYPnvCyHIqfFIl3nwnSSkvuLDuGU= ;{id = 62298} 067479706532310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532320C74797065732D7369676E6564027762087369646E6C616273026E6C000006000004000003 type21.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type22.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC 067479706532310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007D9960A3FE9ED8906407B2F05C300C805CE4C83A2E74E863AE234E4A144E6B210D3B22BB949484D73DC8D0A4C7959552691CF341529339A995A974C31F37CA8857F12E384D1FDF4FCF55D130B84F03A6F4D57CBB31126B0C22E2E8AA02B22135ACE68A49CE587D6411438A410017AEC9346B2E7CB3CD6C3C9E20721620E78B23 type21.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fZlgo/6e2JBkB7LwXDAMgFzkyDoudOhjriNOShROayENOyK7lJSE1z3I0KTHlZVSaRzzQVKTOamVqXTDHzfKiFfxLjhNH99Pz1XRMLhPA6b01Xy7MRJrDCLi6KoCsiE1rOaKSc5YfWQRQ4pBABeuyTRrLnyzzWw8niByFiDniyM= ;{id = 62298} 067479706532320C74797065732D7369676E6564027762087369646E6C616273026E6C00001600010000003C001447000580005A0000000001E133FFFFFF00016100 type22.types-signed.wb.sidnlabs.nl. 60 IN NSAP 0x47000580005A0000000001E133FFFFFF00016100 067479706532320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001608050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005EF66E752297DFD1983E3543632EC347E983B86CB3FC75B0436C3CBB09DD07E46239B4BC92D1FA7437984D3BCA73000A11CB7FD2DB447C98060427A27A3206D4F2AEAB92D6136934E83D3084D9157B7F1E1818FA76A9B3A2200554AC0384106F3CA0F3580C5C5A73DAB9CED2F43364ED58F1F25580510EEBF744336351091B86 type22.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NSAP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. XvZudSKX39GYPjVDYy7DR+mDuGyz/HWwQ2w8uwndB+RiObS8ktH6dDeYTTvKcwAKEct/0ttEfJgGBCeiejIG1PKuq5LWE2k06D0whNkVe38eGBj6dqmzoiAFVKwDhBBvPKDzWAxcWnPauc7S9DNk7Vjx8lWAUQ7r90QzY1EJG4Y= ;{id = 62298} 067479706532320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532360C74797065732D7369676E6564027762087369646E6C616273026E6C000006000002000003 type22.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type26.types-signed.wb.sidnlabs.nl. NSAP RRSIG NSEC 067479706532320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003EFCB61BD5CC7518A211C94BF9930F665CD8E52BB76DAD551CD9D84A9815989953F060F9192052096532DB5E22E02A63F2F8233AB423D8EA5D538445E08592D0DF88F6A0452D840D3914EEA4F21781A7E13CDFC622EB4C5CF037BE57F02D6B858E6606C9F7A3E916290ABD249898337C5967DA0EF364984369A71DFF9C85E38E type22.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Pvy2G9XMdRiiEclL+ZMPZlzY5Su3ba1VHNnYSpgVmJlT8GD5GSBSCWUy214i4Cpj8vgjOrQj2OpdU4RF4IWS0N+I9qBFLYQNORTupPIXgafhPN/GIutMXPA3vlfwLWuFjmYGyfej6RYpCr0kmJgzfFln2g7zZJhDaacd/5yF444= ;{id = 62298} 067479706532360C74797065732D7369676E6564027762087369646E6C616273026E6C00001A00010000003C004B000A066D61703832320C74797065732D7369676E6564027762087369646E6C616273026E6C00076D6170783430300C74797065732D7369676E6564027762087369646E6C616273026E6C00 type26.types-signed.wb.sidnlabs.nl. 60 IN PX 10 map822.types-signed.wb.sidnlabs.nl. mapx400.types-signed.wb.sidnlabs.nl. 067479706532360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001A08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0007BC7E6C58CCE5E16BF4CFA26F477CD74804445F84883BE10554235BA6B94900A14957C43BF8FB303ED7113174BC69CB6070BA5018B1567A707EF3E9D5CE0560E9BDD6D8862FAB070717C6F9F60F8B043FFDC228680061DBC169A5F487165578D7EB178DCA0AC3675C2337021926099789A1BD72DF6FEFACA81E7D9739C79ABF type26.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. B7x+bFjM5eFr9M+ib0d810gERF+EiDvhBVQjW6a5SQChSVfEO/j7MD7XETF0vGnLYHC6UBixVnpwfvPp1c4FYOm91tiGL6sHBxfG+fYPiwQ//cIoaABh28FppfSHFlV41+sXjcoKw2dcIzcCGSYJl4mhvXLfb++sqB59lznHmr8= ;{id = 62298} 067479706532360C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000200003 type26.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type27.types-signed.wb.sidnlabs.nl. PX RRSIG NSEC 067479706532360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B37F1C2B73BB1D6A5EE4A53E2E9E8F893F0A4E20FD62BC7C1C56D2A40D59AC7CD25157555FC677BB9DCAA76C3F07710B381DBB61EEF2A8896A67F1AF40107DFC5BD74B62593ACFFBE407DEA015E12D72294725BDC7B8218FDC5E991A5676CC9BAC59B8A2D743F3A3A479226167D54973C7DAE32267D2AD6DE873CC8ABDCFA07E type26.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. s38cK3O7HWpe5KU+Lp6PiT8KTiD9Yrx8HFbSpA1ZrHzSUVdVX8Z3u53Kp2w/B3ELOB27Ye7yqIlqZ/GvQBB9/FvXS2JZOs/75AfeoBXhLXIpRyW9x7ghj9xemRpWdsybrFm4otdD86OkeSJhZ9VJc8fa4yJn0q1t6HPMir3PoH4= ;{id = 62298} 067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C00001B00010000003C00120532332E36370532332E36370532332E3637 type27.types-signed.wb.sidnlabs.nl. 60 IN GPOS "23.67" "23.67" "23.67" 067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0013BF8CA0C46CABE234D3A0D55A9D4D2A30449E21A25E889DBAE3499A2C567B8F652C2CB2F67A83767D6B5963205F7FBF83A79318E702C558E30688507E062029FCF4EBD2EC5DEE7DFEB6C3C2F326131920401A05444AAA326CC9D118139C43A4A0DC834ECE3ECF883DAC78B03031F15432A5ACD4331587F43B22176CBA0A6E14 type27.types-signed.wb.sidnlabs.nl. 60 IN RRSIG GPOS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. E7+MoMRsq+I006DVWp1NKjBEniGiXoiduuNJmixWe49lLCyy9nqDdn1rWWMgX3+/g6eTGOcCxVjjBohQfgYgKfz069LsXe59/rbDwvMmExkgQBoFREqqMmzJ0RgTnEOkoNyDTs4+z4g9rHiwMDHxVDKlrNQzFYf0OyIXbLoKbhQ= ;{id = 62298} 067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532380C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000100003 type27.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type28.types-signed.wb.sidnlabs.nl. GPOS RRSIG NSEC 067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C005FA879F3D1C9D30ACAB487853ABD326942CF6FAC281F629AE5B65DAF5095824E1C3AEE6D368FFCD0AB912540E07A08C0F002C91671C910D25B07EAE86E05BE30C8C776B771623DFA92623A54DAD4215E5FECC6AA5409C43C5C1A9E61F523C22C32B602B685B21D2AD1C0DB1BDA0437FAC962A8CF6E4D7B38AECC4B709255924C type27.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. X6h589HJ0wrKtIeFOr0yaULPb6woH2Ka5bZdr1CVgk4cOu5tNo/80KuRJUDgegjA8ALJFnHJENJbB+robgW+MMjHdrdxYj36kmI6VNrUIV5f7MaqVAnEPFwanmH1I8IsMrYCtoWyHSrRwNsb2gQ3+sliqM9uTXs4rsxLcJJVkkw= ;{id = 62298} 067479706532380C74797065732D7369676E6564027762087369646E6C616273026E6C00001C00010000003C0010200107B80C0500000000000000800004 type28.types-signed.wb.sidnlabs.nl. 60 IN AAAA 2001:7b8:c05::80:4 067479706532380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001C08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00AA2FC22A85C6F37F758FE28B30415328F22C239286C97766EE24E56F365A5453FEF070C066BA639FD13E6BD65FAE8744C42DAC0FBB3334491A3A46E14C01062D5994116D8E6A341C64B7A15AC59488B7B1BE1A4380A7D67DD87900950AB5077E7C5F6493E3587EA81CDA9D10553EED1818664B133A0A7BEE50A607FC4699035A type28.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AAAA 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. qi/CKoXG8391j+KLMEFTKPIsI5KGyXdm7iTlbzZaVFP+8HDAZrpjn9E+a9ZfrodExC2sD7szNEkaOkbhTAEGLVmUEW2OajQcZLehWsWUiLexvhpDgKfWfdh5AJUKtQd+fF9kk+NYfqgc2p0QVT7tGBhmSxM6CnvuUKYH/EaZA1o= ;{id = 62298} 067479706532380C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532390C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000080003 type28.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type29.types-signed.wb.sidnlabs.nl. AAAA RRSIG NSEC 067479706532380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0044B6B17BB55C82073DC54D291632081B6486C5A743118D087DC012E962033FF5492A413106B452EB1F0687A174FA95E251F88D6CF177FCCC4B6B99CA73646978B526DE12CAFFA14B8078FCF354C009A85E6AD84DC7C5BBD4F0BABD43B487F282CB9EC4D157C4773C377388BE840C0C0D933308E0E30AA7377BB7AD488D22BFA9 type28.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. RLaxe7Vcggc9xU0pFjIIG2SGxadDEY0IfcAS6WIDP/VJKkExBrRS6x8Gh6F0+pXiUfiNbPF3/MxLa5nKc2RpeLUm3hLK/6FLgHj881TACaheathNx8W71PC6vUO0h/KCy57E0VfEdzw3c4i+hAwMDZMzCODjCqc3e7etSI0iv6k= ;{id = 62298} 067479706532390C74797065732D7369676E6564027762087369646E6C616273026E6C00001D00010000003C0010002325238CE82360854A10A000989A68 type29.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 00.000 N 24 39 00.000 E 10m 20m 2000m 20m 067479706532390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001D08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00773797EE5E6DFECA51B59E29778C2A298852D0C43ECF4881F669C3D6899167DCBCA965B2CDEE827C8A3FD56B8B15A18B667FDEE9F26776F1FFA32587C0707707FD8F27F035D4F94114EAD802A35654E7E2F300F7FA1D9EC9B7693CFDF6655BCB3C70D6FB2C19CC4D4FA7DC2AD97531CA030F8F18F1393268A20E7581461B87FE type29.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dzeX7l5t/spRtZ4pd4wqKYhS0MQ+z0iB9mnD1omRZ9y8qWWyze6CfIo/1WuLFaGLZn/e6fJndvH/oyWHwHB3B/2PJ/A11PlBFOrYAqNWVOfi8wD3+h2eybdpPP32ZVvLPHDW+ywZzE1Pp9wq2XUxygMPjxjxOTJoog51gUYbh/4= ;{id = 62298} 067479706532390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574797065330C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000040003 type29.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type3.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC 067479706532390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BDB57CC449238634F579867CBD19A93EE5F5A54704529643D9EB855F8E713775627A8E64AD9167D0E4DAD169AD5726296C1C1627004310BD1F6DFD571C19C1782C2B14344AEF07407CAC85049478BBF755E62FC044ED7F8174E8CA99534B72487695D199BF89ED46731D50AF17EB15A2BA89F1935ED81AFF6F4A83E6F122FE51 type29.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vbV8xEkjhjT1eYZ8vRmpPuX1pUcEUpZD2euFX45xN3Vieo5krZFn0OTa0WmtVyYpbBwWJwBDEL0fbf1XHBnBeCwrFDRK7wdAfKyFBJR4u/dV5i/ARO1/gXToyplTS3JIdpXRmb+J7UZzHVCvF+sVorqJ8ZNe2Br/b0qD5vEi/lE= ;{id = 62298} 0574797065330C74797065732D7369676E6564027762087369646E6C616273026E6C00000300010000003C002D0F6D61696C64657374696E6174696F6E0C74797065732D7369676E6564027762087369646E6C616273026E6C00 type3.types-signed.wb.sidnlabs.nl. 60 IN MD maildestination.types-signed.wb.sidnlabs.nl. 0574797065330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0074C05F690F450A80517066CF8B10B270801C46C6E1698DCC77377BBBC2DE4197325608D92F0A1EB7B947C176663306F199FDA45D800DA6DB817004EE2B5CF851C8DF743F1FF70A002EA5736657EAA9BB96FF7500AFA9B6FF72DD11FA10EF3829F0D31677A9DDCF779E76CD04CF9509A4BB72532C552E1032FB5BA4871CD90754 type3.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MD 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dMBfaQ9FCoBRcGbPixCycIAcRsbhaY3Mdzd7u8LeQZcyVgjZLwoet7lHwXZmMwbxmf2kXYANptuBcATuK1z4UcjfdD8f9woALqVzZlfqqbuW/3UAr6m2/3LdEfoQ7zgp8NMWd6ndz3eeds0Ez5UJpLtyUyxVLhAy+1ukhxzZB1Q= ;{id = 62298} 0574797065330C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706533330C74797065732D7369676E6564027762087369646E6C616273026E6C000006100000000003 type3.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type33.types-signed.wb.sidnlabs.nl. MD RRSIG NSEC 0574797065330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00BD5A512FED79316CC332589D316A1E86D20F7FBF33917092964744E7C31DFDF5AB848BF43FDD2E2A779C37D55CF20B7E1BFD33619AB427696AE377915F12BD17789C9CD3E72AAE5C1FBF71C148D4600E38449CA9F89A00EA7D9A49152D9950DAA2A804A5E54AC8769A76EA34130C76CDD9CA4508B31DAE6118D2D0C31E88D4BA type3.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vVpRL+15MWzDMlidMWoehtIPf78zkXCSlkdE58Md/fWrhIv0P90uKnecN9Vc8gt+G/0zYZq0J2lq43eRXxK9F3icnNPnKq5cH79xwUjUYA44RJyp+JoA6n2aSRUtmVDaoqgEpeVKyHaaduo0Ewx2zdnKRQizHa5hGNLQwx6I1Lo= ;{id = 62298} 067479706533330C74797065732D7369676E6564027762087369646E6C616273026E6C00002100010000003C0030FFFFFFFFFFFF0C6F6C642D736C6F772D626F780C74797065732D7369676E6564027762087369646E6C616273026E6C00 type33.types-signed.wb.sidnlabs.nl. 60 IN SRV 65535 65535 65535 old-slow-box.types-signed.wb.sidnlabs.nl. 067479706533330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0054BF20268131FF6311F93EDA4B52FAE5644280659E9CE17AF40E93C0FDA769CAFB0EE7B2BA240E298FB7C4CF5FBBE078D8D0DBB331D0C22725DC6F8DC044B48B3A69E78CBA1D1F2FC3F7E01035B4D1026308C328C79BBF07918A7E20A0EFF091A9020909E4A3EF97629A699383F6EB299B6F8C8A5CCDB48B77C889C176F24C53 type33.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VL8gJoEx/2MR+T7aS1L65WRCgGWenOF69A6TwP2nacr7DueyuiQOKY+3xM9fu+B42NDbszHQwicl3G+NwES0izpp54y6HR8vw/fgEDW00QJjCMMox5u/B5GKfiCg7/CRqQIJCeSj75dimmmTg/brKZtvjIpczbSLd8iJwXbyTFM= ;{id = 62298} 067479706533330C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706533350C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000004003 type33.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type35.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC 067479706533330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0033A38561B0A2A9948105A8121B1EED11A796A2DF882E743034A5121FC9A8ACC02C67DC9C9293B2ABBA18D97ED3D36243492FF4647C9047452E907EC10FBD99E1D80C23327C9E6D21A1ABBFB1202346959167956891FF581335C42AF45DC2A73AABE2E34FC2AE59578A30AF70FAE04FEB08184B9028F87A95D2182D6CD9E3611A type33.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. M6OFYbCiqZSBBagSGx7tEaeWot+ILnQwNKUSH8morMAsZ9yckpOyq7oY2X7T02JDSS/0ZHyQR0UukH7BD72Z4dgMIzJ8nm0hoau/sSAjRpWRZ5Vokf9YEzXEKvRdwqc6q+LjT8KuWVeKMK9w+uBP6wgYS5Ao+HqV0hgtbNnjYRo= ;{id = 62298} 067479706533350C74797065732D7369676E6564027762087369646E6C616273026E6C00002300010000003C003F00640064017308687474702B6C407200056E617074720B7265706C6163656D656E740C74797065732D7369676E6564027762087369646E6C616273026E6C00 type35.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 100 100 "s" "http+l@r" "" naptr.replacement.types-signed.wb.sidnlabs.nl. 067479706533350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009C19EEDA585AB44AC64668D3795FE282A4794657F9BAEA0713130C74A01624E3410628501E6F896A64BE86164360A50BB1E86ACF64615C70099379F93E03440830DFC3C86E0CE1CFCCD598414D18DD8DFFA2B063E7351630F92BB37151F3128FA22D10354788493B4F06D9D926351D594C602F8906D2C5D06421D2C19BD1C90E type35.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. nBnu2lhatErGRmjTeV/igqR5Rlf5uuoHExMMdKAWJONBBihQHm+JamS+hhZDYKULsehqz2RhXHAJk3n5PgNECDDfw8huDOHPzNWYQU0Y3Y3/orBj5zUWMPkrs3FR8xKPoi0QNUeISTtPBtnZJjUdWUxgL4kG0sXQZCHSwZvRyQ4= ;{id = 62298} 067479706533350C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706533360C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000001003 type35.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type36.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC 067479706533350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00A6977F257ABD09285F999B03BCA5B6FD8B39524AC5E3851867258AA348F11A56090D130E1D69893CA623FD45E831B7A4E1FFDFA7A8B3F68BE97AAA3ADDB37D28A3CD738186771AA8148EAEC65589F66D8BE957115CE9E129E28B4D116900C9FB981747055818658917F2ED15667CB12F6CDF0EA685882E15685D32C9C7677B34 type35.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ppd/JXq9CShfmZsDvKW2/Ys5UkrF44UYZyWKo0jxGlYJDRMOHWmJPKYj/UXoMbek4f/fp6iz9ovpeqo63bN9KKPNc4GGdxqoFI6uxlWJ9m2L6VcRXOnhKeKLTRFpAMn7mBdHBVgYZYkX8u0VZnyxL2zfDqaFiC4VaF0yycdnezQ= ;{id = 62298} 067479706533360C74797065732D7369676E6564027762087369646E6C616273026E6C00002400010000003C0022000A026B780C74797065732D7369676E6564027762087369646E6C616273026E6C00 type36.types-signed.wb.sidnlabs.nl. 60 IN KX 10 kx.types-signed.wb.sidnlabs.nl. 067479706533360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C002F98CBD797366929192B6056CA2DBBEBB31B18AA744508DAFC4A0A2047300BD4A4DE812F21749F87BC05B139EE9A3CB8C2DAD344DF3832939980F6871FB9E24724F3C17BEC179DB0E04EC2546562DD7A0EAEF76AC67A4B241E760E885ADD111F517BD4D9F785C67874453340F7D40CF06ED3B46E5F4E1B7990CC77FC602CDAB7 type36.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. L5jL15c2aSkZK2BWyi2767MbGKp0RQja/EoKIEcwC9Sk3oEvIXSfh7wFsTnumjy4wtrTRN84MpOZgPaHH7niRyTzwXvsF52w4E7CVGVi3XoOrvdqxnpLJB52Doha3REfUXvU2feFxnh0RTNA99QM8G7TtG5fTht5kMx3/GAs2rc= ;{id = 62298} 067479706533360C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706533370C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000803 type36.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type37.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC 067479706533360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0077A60055EFEBD967DB3D15CE97ABA9D555A9D17503447F93AED8BA8A8057D32F9CB163F0E230E5205706ACEA040A860FA5FF605326DC490B646CDF68D5A7D63C4C4390E30927B77F255C68017102232AA180DBF95B46E73C90A704A4B0D87FB161FAC81C0A91E4B373717DDBD8FDE520D0F2E49997AFE4C3C957E89070A40B1F type36.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. d6YAVe/r2WfbPRXOl6up1VWp0XUDRH+Trti6ioBX0y+csWPw4jDlIFcGrOoECoYPpf9gUybcSQtkbN9o1afWPExDkOMJJ7d/JVxoAXECIyqhgNv5W0bnPJCnBKSw2H+xYfrIHAqR5LNzcX3b2P3lINDy5JmXr+TDyVfokHCkCx8= ;{id = 62298} 067479706533370C74797065732D7369676E6564027762087369646E6C616273026E6C00002500010000003C0055FFFEFFFFFE33115C6F2F64FF2BDE74C7D080ACE11F97ABD0CBBFBC82F3E39224B2471E1468225829FF1B11E16A2E9502E1C0A0D533E18A14D6D55F4824AA4189FAFFFD7553A36577CD2311E0BC693ACEF8A2A609A6 type37.types-signed.wb.sidnlabs.nl. 60 IN CERT 65534 65535 254 MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= 067479706533370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C004A508E9762CF3169255799A6302E19F4BCC4CBD1888593E6F9D557869ECB15CD029B147DE33029E8DACD426A3FE4B00C09CA9669766D061B320E0421719160F75F4956498AEF2889F5BCEA220F1141434EB4C878A48F53B58820EC54573373243EEFB24F2EC762FFEB161B803375FD220213A1D79E55E480AD2631F6188E0210 type37.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CERT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. SlCOl2LPMWklV5mmMC4Z9LzEy9GIhZPm+dVXhp7LFc0CmxR94zAp6NrNQmo/5LAMCcqWaXZtBhsyDgQhcZFg919JVkmK7yiJ9bzqIg8RQUNOtMh4pI9TtYgg7FRXM3MkPu+yTy7HYv/rFhuAM3X9IgITodeeVeSArSYx9hiOAhA= ;{id = 62298} 067479706533370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706533390C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000403 type37.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type39.types-signed.wb.sidnlabs.nl. CERT RRSIG NSEC 067479706533370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00A3F53595336329EFF2423BA7B9582BECF007F6CBBB1C04D6F3417EFC7D87F91F80A5AEA4B5D3F89991554DD51AC529C3DCACD5E87D98E25F12649D98A2A9AE9000F29E0ADFC1CAB3D17CB41D397F128F41AE7646A94678CF20C1B192B7BAF90CDEC2CE0C64503588414A61149F431438045779C247E81B9F04FDDCB2F5081D9E type37.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. o/U1lTNjKe/yQjunuVgr7PAH9su7HATW80F+/H2H+R+Apa6ktdP4mZFVTdUaxSnD3KzV6H2Y4l8SZJ2YoqmukADyngrfwcqz0Xy0HTl/Eo9BrnZGqUZ4zyDBsZK3uvkM3sLODGRQNYhBSmEUn0MUOARXecJH6BufBP3csvUIHZ4= ;{id = 62298} 067479706533390C74797065732D7369676E6564027762087369646E6C616273026E6C00002700010000003C000E0C646E616D652D74617267657400 type39.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target. 067479706533390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF002708050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00666102AA42F2ED0C389C6A3C1780DC2A9B3949E02315AEE9FE70B1A45F331991FD2D00B0CF13A6C2534295DEA89839D8B1CC773A01471BE189FB7ACC4635BE67201CF54D58F766C3A448C3CFB50A756994A53513EEB2740AEAF4F065787563E108F8CE1EA36789C9999C6E655D90B34ACB0513DB63B8BB2FCD9AC847CAD4C46F type39.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZmECqkLy7Qw4nGo8F4DcKps5SeAjFa7p/nCxpF8zGZH9LQCwzxOmwlNCld6omDnYscx3OgFHG+GJ+3rMRjW+ZyAc9U1Y92bDpEjDz7UKdWmUpTUT7rJ0Cur08GV4dWPhCPjOHqNnicmZnG5lXZCzSssFE9tjuLsvzZrIR8rUxG8= ;{id = 62298} 067479706533390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574797065340C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000000103 type39.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type4.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC 067479706533390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0029B6CE781C9E09ED9879F8CA23953548F5188B0382935B7060A6FA8799A6F8D2F4C440E26224FEA9D4A9F2C474B2D7B555687A82B8A427067C13F69A159944B1B7CA44431D4F4371D9A589384704E353FBCBACF9BE28EF225F0CB01F342F3702C02D0FC8E83FD8460764E4EDCE28224DA033F60A7ADC84C3AC25EBC9CA286F05 type39.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. KbbOeByeCe2YefjKI5U1SPUYiwOCk1twYKb6h5mm+NL0xEDiYiT+qdSp8sR0ste1VWh6grikJwZ8E/aaFZlEsbfKREMdT0Nx2aWJOEcE41P7y6z5vijvIl8MsB80LzcCwC0PyOg/2EYHZOTtzigiTaAz9gp63ITDrCXrycoobwU= ;{id = 62298} 0574797065340C74797065732D7369676E6564027762087369646E6C616273026E6C00000400010000003C002B0D6D61696C666F727761726465720C74797065732D7369676E6564027762087369646E6C616273026E6C00 type4.types-signed.wb.sidnlabs.nl. 60 IN MF mailforwarder.types-signed.wb.sidnlabs.nl. 0574797065340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00795FADE35280832C3F48D7C0151743C57D2B45A86F05B5492064FAABD8197D7DB90842B5476F690F05FBAC6D7B6D52BA31DB0A54539965EC0A1AF8E81D443E9B11CEE76175FC8ED14CBC95C9ED33FA8AA2C131CAE9321D4789EBB441897B0C0D73F3F7C6C465F18FE15E96C261704149E0ECAC8C660651D66CA224C5072D1ED4 type4.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eV+t41KAgyw/SNfAFRdDxX0rRahvBbVJIGT6q9gZfX25CEK1R29pDwX7rG17bVK6MdsKVFOZZewKGvjoHUQ+mxHO52F1/I7RTLyVye0z+oqiwTHK6TIdR4nrtEGJewwNc/P3xsRl8Y/hXpbCYXBBSeDsrIxmBlHWbKIkxQctHtQ= ;{id = 62298} 0574797065340C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706534390C74797065732D7369676E6564027762087369646E6C616273026E6C000006080000000003 type4.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type49.types-signed.wb.sidnlabs.nl. MF RRSIG NSEC 0574797065340C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0002B8C2DE0BB2A14FE489C55937A6901CF217EB42661855B74E5C1AA4877BC29591CBB7AD99C89428F477FBDAB1D3FC5B67CC2E3EDA3C2AC13ED3CDCFD859DDDA0C24E7A75EBCE20A95FC498792C3FEF0E138274ABFD7D9DFCB242F1CD7B515F6633AF587C3E13B433395D8C1D8734BA2B9F2A61F8F5C66F7A005216A38376FB7 type4.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ArjC3guyoU/kicVZN6aQHPIX60JmGFW3TlwapId7wpWRy7etmciUKPR3+9qx0/xbZ8wuPto8KsE+083P2Fnd2gwk56devOIKlfxJh5LD/vDhOCdKv9fZ38skLxzXtRX2Yzr1h8PhO0MzldjB2HNLornyph+PXGb3oAUhajg3b7c= ;{id = 62298} 067479706534390C74797065732D7369676E6564027762087369646E6C616273026E6C00003100010000003C0023000201636FC0B8271C82825BB1AC5C41CF5351AA69B4FEBD94E8F17CDB95000DA48C40 type49.types-signed.wb.sidnlabs.nl. 60 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA= 067479706534390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C004F25023648D4D5C1F548BEC27599259D4AE78398E159839091757E9516EBFE0DA527785B227C99D231A9E21AB27BD8CDEDDAD30F95DA06DCDEB31CE4C8413A2A80021205A9BC2622D326FAED444E44B6D29DF93D57AE545A34D04D687D51092BF03B753D5290D7CC34BA4897087B0FD2C6C02B2938992C85369B0508B2B8E8BB type49.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DHCID 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. TyUCNkjU1cH1SL7CdZklnUrng5jhWYOQkXV+lRbr/g2lJ3hbInyZ0jGp4hqye9jN7drTD5XaBtzesxzkyEE6KoACEgWpvCYi0yb67URORLbSnfk9V65UWjTQTWh9UQkr8Dt1PVKQ18w0ukiXCHsP0sbAKyk4mSyFNpsFCLK46Ls= ;{id = 62298} 067479706534390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C0574797065350C74797065732D7369676E6564027762087369646E6C616273026E6C00000700000000000340 type49.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type5.types-signed.wb.sidnlabs.nl. RRSIG NSEC DHCID 067479706534390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00AD4E315A771397331D8132C9573DD66F4E59A5680C452B80CAE889366FA7D3EB439F84B9AB9A11C24D96F0C673332B8AC7D88B261134C54E47E03C5E201CF27AD58A563687697B7AFA16F422DB6B05E5BF3C7544FE13DB4BAAF93B3A27E594D4E83CE0C584A73215AE8A558B1EB521B35CDA47A05FE910C9C3219CF562BBE9E5 type49.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rU4xWncTlzMdgTLJVz3Wb05ZpWgMRSuAyuiJNm+n0+tDn4S5q5oRwk2W8MZzMyuKx9iLJhE0xU5H4DxeIBzyetWKVjaHaXt6+hb0IttrBeW/PHVE/hPbS6r5Ozon5ZTU6DzgxYSnMhWuilWLHrUhs1zaR6Bf6RDJwyGc9WK76eU= ;{id = 62298} 0574797065350C74797065732D7369676E6564027762087369646E6C616273026E6C00000500010000003C0021037777770C74797065732D7369676E6564027762087369646E6C616273026E6C00 type5.types-signed.wb.sidnlabs.nl. 60 IN CNAME www.types-signed.wb.sidnlabs.nl. 0574797065350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000508050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D27B676C96D3CA1D345CFF79B177C4C6262B5AA37857AEBC8DAA614555CABB3332562B9842FE57A97BCE737EC135EFC0D70EEF0417886DD2ED8CD02715A111E563F315D94AE27AD32CB8046A4CD9E4EC2DDCAB9D1E47F568CA5158704C5EE93B25F7A40A45B0FCC321E56A6B6F8226DEED80F34C47554EBD4728529F6B7AF25E type5.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0ntnbJbTyh00XP95sXfExiYrWqN4V668japhRVXKuzMyViuYQv5XqXvOc37BNe/A1w7vBBeIbdLtjNAnFaER5WPzFdlK4nrTLLgEakzZ5Owt3KudHkf1aMpRWHBMXuk7JfekCkWw/MMh5Wprb4Im3u2A80xHVU69RyhSn2t68l4= ;{id = 62298} 0574797065350C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706535320C74797065732D7369676E6564027762087369646E6C616273026E6C000006040000000003 type5.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type52.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC 0574797065350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00956B573C494D3D1D83EFECE600F23492D2CA44CF8E8A98115AB4E340F158D7AA727D26B79D7C2EE0E4F8DDF5A5D9F043E617CDDD4673648CDE375330B6BF396838A203B4EBA9B6B889D369EEBA1B3B8D63D635163B570AA9A39CA7F2C1BFCA8A9E38826E4E76D8179E67B9C97B5001CF32FCEA639DBCBE1010F26F8CB8D55935 type5.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. lWtXPElNPR2D7+zmAPI0ktLKRM+OipgRWrTjQPFY16pyfSa3nXwu4OT43fWl2fBD5hfN3UZzZIzeN1Mwtr85aDiiA7Trqba4idNp7robO41j1jUWO1cKqaOcp/LBv8qKnjiCbk522BeeZ7nJe1ABzzL86mOdvL4QEPJvjLjVWTU= ;{id = 62298} 067479706535320C74797065732D7369676E6564027762087369646E6C616273026E6C00003400010000003C004301010292003BA34942DC74152E2F2C408D29ECA5A520E7F2E06BB944F4DCA346BAF63C1B177615D466F6C4B71C216A50292BD58C9EBDD2F74E38FE51FFD48C43326CBC type52.types-signed.wb.sidnlabs.nl. 60 IN TLSA 1 1 2 92003BA34942DC74152E2F2C408D29ECA5A520E7F2E06BB944F4DCA346BAF63C1B177615D466F6C4B71C216A50292BD58C9EBDD2F74E38FE51FFD48C43326CBC 067479706535320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003408050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007C3A756D265A46898DC495A94D7E933F1972DD812433544BB1399008C59EB6B916931484338FD3EA05219F5AA8365265E7ACFA2B995C1917C4B85381CF5D6D1CEEACE97354A1021772A58113C6B9C538D2ED511F9C581DF0A02E7542F1213E168527F9E72201963628A9C4BE5BD1908C493B7ECE94918B740EE0D2FF4A4198BA type52.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TLSA 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fDp1bSZaRomNxJWpTX6TPxly3YEkM1RLsTmQCMWetrkWkxSEM4/T6gUhn1qoNlJl56z6K5lcGRfEuFOBz11tHO6s6XNUoQIXcqWBE8a5xTjS7VEfnFgd8KAudULxIT4WhSf55yIBljYoqcS+W9GQjEk7fs6UkYt0DuDS/0pBmLo= ;{id = 62298} 067479706535320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D067479706535360C74797065732D7369676E6564027762087369646E6C616273026E6C00000700000000000308 type52.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type56.types-signed.wb.sidnlabs.nl. RRSIG NSEC TLSA 067479706535320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006B1F8CC540B4EEB2939CEC12AE51C9A45E7DC801E1853F68D3383A6BD918ACB6556876FBB2F0CC37DAAA15AE0B785F6B137B83FCBB41A982732C93E156A708F5AB9AFAF1FFB8111B3397E0F051EA97F8D313D0ED9063DBCE557A4C6B4DBFD3133A339B5CD921BB00D1EF14443A6EB99D9D554E0696E5B631D57F727998965A00 type52.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ax+MxUC07rKTnOwSrlHJpF59yAHhhT9o0zg6a9kYrLZVaHb7svDMN9qqFa4LeF9rE3uD/LtBqYJzLJPhVqcI9aua+vH/uBEbM5fg8FHql/jTE9DtkGPbzlV6TGtNv9MTOjObXNkhuwDR7xREOm65nZ1VTgaW5bYx1X9yeZiWWgA= ;{id = 62298} 067479706535360C74797065732D7369676E6564027762087369646E6C616273026E6C00003800010000003C001B1A54686973207A6F6E65206973206578706572696D656E74616C2E type56.types-signed.wb.sidnlabs.nl. 60 IN TYPE56 \# 27 1A54686973207A6F6E65206973206578706572696D656E74616C2E 067479706535360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B12E7FABA91D6B5DE3551B7201515C94C61DCFB936DC679466ED2BBFAB1A295B1991F4FDEB593888EE8AC2F8F9E2D27CCFC5080E72D4C0FF8E40C020E341D0D1444EFCDC7CB1A6F6EAC0642EBEF66A261613F2EE4FD0A945AC8CF222D61C6320122C489899A2A22A47A1E2CDDBC35CB8CD6CBE6BCB50E7035257871DCA713E6B type56.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TYPE56 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. sS5/q6kda13jVRtyAVFclMYdz7k23GeUZu0rv6saKVsZkfT961k4iO6Kwvj54tJ8z8UIDnLUwP+OQMAg40HQ0URO/Nx8sab26sBkLr72aiYWE/LuT9CpRayM8iLWHGMgEixImJmioipHoeLN28NcuM1svmvLUOcDUleHHcpxPms= ;{id = 62298} 067479706535360C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002E067479706535370C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030080 type56.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type57.types-signed.wb.sidnlabs.nl. RRSIG NSEC TYPE56 067479706535360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00A048098B52D7427863BAF72B594F82610E0381575AB2657B25754F432CDD57839144DA03303329040D9E8BABC5E8DA469B975C2EB48A14B1697EA2413B8FAABAE09B98CD9101710567C719A592CD900D75ACCC497F05C6E08103CB08754EC96D85C60BD6E928CB5B06EB01103E069D71EB5F10FE4593BB0C1F83F7D9BC09634B type56.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. oEgJi1LXQnhjuvcrWU+CYQ4DgVdasmV7JXVPQyzdV4ORRNoDMDMpBA2ei6vF6NpGm5dcLrSKFLFpfqJBO4+quuCbmM2RAXEFZ8cZpZLNkA11rMxJfwXG4IEDywh1TslthcYL1ukoy1sG6wEQPgadcetfEP5Fk7sMH4P32bwJY0s= ;{id = 62298} 067479706535370C74797065732D7369676E6564027762087369646E6C616273026E6C00003900010000003C00880000010803010001D7B53C9C988E7476474466CC3BA260A461FE5764BF4CE754E6307E3B0764D2E0D1A84B23E52CBE08419A29A851219AF5DE8291DDDDA1D6C76315298C562C25F75EABEAA2998163AC6F1B500D810F6B8931A835FD01BB0D3529DE31DA574435DEBFFCDBD404974B23ACB201C42EF04A5AAED3275F633E555FB5F403C8B5BC39BD type57.types-signed.wb.sidnlabs.nl. 60 IN TYPE57 \# 136 0000010803010001D7B53C9C988E7476474466CC3BA260A461FE5764BF4CE754E6307E3B0764D2E0D1A84B23E52CBE08419A29A851219AF5DE8291DDDDA1D6C76315298C562C25F75EABEAA2998163AC6F1B500D810F6B8931A835FD01BB0D3529DE31DA574435DEBFFCDBD404974B23ACB201C42EF04A5AAED3275F633E555FB5F403C8B5BC39BD 067479706535370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B886C444A3B0560A1FCB3CD124567D86B6DF794FD31E0F16DEC9F8F0C6D75391319EBD94E2FF4638CF5C49BE69F24B50F01C77DEE2983FE53F294888BF0A3AC4BFA8D2F6BC38E0A4021DB76FEFC7B5FB17BC65CE8CB509AC14C3A598E5F8327B278E0733D1B09D1E03860B062EC940BFC6B8DC08B2E9285144F991E769222D4F type57.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TYPE57 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uIbERKOwVgofyzzRJFZ9hrbfeU/THg8W3sn48MbXU5Exnr2U4v9GOM9cSb5p8ktQ8Bx33uKYP+U/KUiIvwo6xL+o0va8OOCkAh23b+/HtfsXvGXOjLUJrBTDpZjl+DJ7J44HM9GwnR4DhgsGLslAv8a43Aiy6ShRRPmR52kiLU8= ;{id = 62298} 067479706535370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002E067479706535380C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030040 type57.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type58.types-signed.wb.sidnlabs.nl. RRSIG NSEC TYPE57 067479706535370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0010AD4D7FD5DD692E7927B4885A17E2EC5B34C8EE854A2CDAFBCE28483783AFE7A81D3EA0CEB84E23FED082F981D5F6F37BD26EF6EFC2F4C821D06E5116AA927A9D091A5FD7B44113848B8F322F6E5DF92ECFE3F197690E546F6459BA389FABC8D3C1277E07B2FADF681CDE107C07365081F59A01EB61265F264D1E2DC5503487 type57.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. EK1Nf9XdaS55J7SIWhfi7Fs0yO6FSiza+84oSDeDr+eoHT6gzrhOI/7QgvmB1fbze9Ju9u/C9Mgh0G5RFqqSep0JGl/XtEEThIuPMi9uXfkuz+Pxl2kOVG9kWbo4n6vI08Enfgey+t9oHN4QfAc2UIH1mgHrYSZfJk0eLcVQNIc= ;{id = 62298} 067479706535380C74797065732D7369676E6564027762087369646E6C616273026E6C00003A00010000003C0020026830076578616D706C6503636F6D00026831076578616D706C6503636F6D00 type58.types-signed.wb.sidnlabs.nl. 60 IN TALINK h0.example.com. h1.example.com. 067479706535380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003A08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00C9C41FB39C617477B0864A428B90B67D37DD4011DA80BBA5DD17E9D9553C408B9ADB2BC520C38E3117AEA752362084FE89BA883DFB59EA6FFA9BEB6356BB993D268AA097013D487BA041AB636DCCB23511D9BC451226DFDF7EED642CEFD1EF26BC69EBEE097AF589DFC9C963BF6962816C7C0CDF4312A38D884E6698FB6A90FD type58.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TALINK 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ycQfs5xhdHewhkpCi5C2fTfdQBHagLul3Rfp2VU8QIua2yvFIMOOMReup1I2IIT+ibqIPftZ6m/6m+tjVruZPSaKoJcBPUh7oEGrY23MsjUR2bxFEibf337tZCzv0e8mvGnr7gl69Ynfycljv2ligWx8DN9DEqONiE5mmPtqkP0= ;{id = 62298} 067479706535380C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002E067479706535390C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030020 type58.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type59.types-signed.wb.sidnlabs.nl. RRSIG NSEC TALINK 067479706535380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000ED11D2F06C798CE081095580E53DB40D30033ACF692C58CB5B617E489C8B89DBCB1129A028EE1C8D74231AC812385203C062629DFE7112874A97EA2DD20031113673D5ADEB9F2643F519D3F76AEE7DA95F82E880C6F0290CE7F3759C545189DE13FA0CE9A2A5B1A252AEDD57E582111479390F7A6E5ED742950453EDD6A6A78 type58.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DtEdLwbHmM4IEJVYDlPbQNMAM6z2ksWMtbYX5InIuJ28sRKaAo7hyNdCMayBI4UgPAYmKd/nESh0qX6i3SADERNnPVreufJkP1GdP3au59qV+C6IDG8CkM5/N1nFRRid4T+gzpoqWxolKu3VflghEUeTkPem5e10KVBFPt1qang= ;{id = 62298} 067479706535390C74797065732D7369676E6564027762087369646E6C616273026E6C00003B00010000003C0024FCB2080286632F83494B1D7037E72949FD6CD8689C5DAAF4DF1E5D7E6EF3BA28ECE1E3C8 type59.types-signed.wb.sidnlabs.nl. 60 IN CDS 64690 8 2 86632F83494B1D7037E72949FD6CD8689C5DAAF4DF1E5D7E6EF3BA28ECE1E3C8 067479706535390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF003B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0073997BF33E9EECBCAAA6D07C08024AD8358CC26974167BCD432802FB68E6CD1C361539D098FCC57D43B8D104D27AAD32070BEBFC60F002E5D998B615E76580EEFB74F2E8B0E155C0D5782C9E15D89DA036B770C2ACBAD21EE3453D0070C386BD2A154EC7F6481CF69B226E2E12873DE0F753B16F7B5220CDDD13A93C9240F8E2 type59.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CDS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. c5l78z6e7LyqptB8CAJK2DWMwml0FnvNQygC+2jmzRw2FTnQmPzFfUO40QTSeq0yBwvr/GDwAuXZmLYV52WA7vt08uiw4VXA1XgsnhXYnaA2t3DCrLrSHuNFPQBww4a9KhVOx/ZIHPabIm4uEoc94PdTsW97UiDN3ROpPJJA+OI= ;{id = 62298} 067479706535390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002D0574797065370C74797065732D7369676E6564027762087369646E6C616273026E6C0000080000000000030010 type59.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type7.types-signed.wb.sidnlabs.nl. RRSIG NSEC CDS 067479706535390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000766B940EAFF1131A7869B0754EC734F0DD15D485109FE7858BF2AD6247B913536FD5BFF72ED4769EA290BF047ED143B0FB6751FE50B5BFA4168F3EFD8C7A8C228C17AFC31C404FC6D6B5697CA7853F9B007A9109BAB891ADD3275E93CB7629097CE4B04EB2ACAF7EF9C32BD724835BCF8CB34F63A44BEC4C747347B694C1537 type59.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. B2a5QOr/ETGnhpsHVOxzTw3RXUhRCf54WL8q1iR7kTU2/Vv/cu1HaeopC/BH7RQ7D7Z1H+ULW/pBaPPv2MeowijBevwxxAT8bWtWl8p4U/mwB6kQm6uJGt0ydek8t2KQl85LBOsqyvfvnDK9ckg1vPjLNPY6RL7Ex0c0e2lMFTc= ;{id = 62298} 0574797065370C74797065732D7369676E6564027762087369646E6C616273026E6C00000700010000003C0025076D61696C626F780C74797065732D7369676E6564027762087369646E6C616273026E6C00 type7.types-signed.wb.sidnlabs.nl. 60 IN MB mailbox.types-signed.wb.sidnlabs.nl. 0574797065370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000708050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006D6E25734BABC71FC9D7DFF7DEA810243D44C7DFA721638C148C10349EE76F398B03044E6BBA971711FA32927053D2ECA63DE95D238B69A9BD1D11B588082E13832D17B0BCC7DEFAD8441845305F5BF9CF5901A26CC4F1ABB9C9DC0A7AF8E3689A56BB25E22DA082D05B17B31CBF8BCDD0CC41AF6419970F66069C25DA5E8920 type7.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. bW4lc0urxx/J19/33qgQJD1Ex9+nIWOMFIwQNJ7nbzmLAwROa7qXFxH6MpJwU9Lspj3pXSOLaam9HRG1iAguE4MtF7C8x9762EQYRTBfW/nPWQGibMTxq7nJ3Ap6+ONomla7JeItoILQWxezHL+LzdDMQa9kGZcPZgacJdpeiSA= ;{id = 62298} 0574797065370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574797065380C74797065732D7369676E6564027762087369646E6C616273026E6C000006010000000003 type7.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type8.types-signed.wb.sidnlabs.nl. MB RRSIG NSEC 0574797065370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C006644E43E3825D8096B3A02203151C9EDEBF0AC65D67211674A7090AB2E9F797EDB1D5790052714A0AFF039182653661A2C3ECC1E696F72016AC67818B64787D374F83E925F2FD8EC86DF65646B836B0F0084E295A755E717967AF51A10D5E97B2585A27F39FC43B0B70A0287F8BEE810F15C0DCB7B83702B00941A22C66E4A11 type7.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZkTkPjgl2AlrOgIgMVHJ7evwrGXWchFnSnCQqy6feX7bHVeQBScUoK/wORgmU2YaLD7MHmlvcgFqxngYtkeH03T4PpJfL9jsht9lZGuDaw8AhOKVp1XnF5Z69RoQ1el7JYWifzn8Q7C3CgKH+L7oEPFcDct7g3ArAJQaIsZuShE= ;{id = 62298} 0574797065380C74797065732D7369676E6564027762087369646E6C616273026E6C00000800010000003C002D0F6D61696C67726F75706D656D6265720C74797065732D7369676E6564027762087369646E6C616273026E6C00 type8.types-signed.wb.sidnlabs.nl. 60 IN MG mailgroupmember.types-signed.wb.sidnlabs.nl. 0574797065380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000808050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0089CCDC17A2A6472F3A0C36D84D7ACAB3AC55D4B007C267A88E4F0BFBE4649FD230903953112EBFC5A92F83777E59900FA78AF846DDE357D616ECC8174E3BAEDF37962872257F4931AD86245C6875284CDF836FC004CB576A6613CC12F0513A10C664D0240FE5F4C93F5284F7E114196E1E2AEECB257A593875C1DF705665A11C type8.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. iczcF6KmRy86DDbYTXrKs6xV1LAHwmeojk8L++Rkn9IwkDlTES6/xakvg3d+WZAPp4r4Rt3jV9YW7MgXTjuu3zeWKHIlf0kxrYYkXGh1KEzfg2/ABMtXamYTzBLwUToQxmTQJA/l9Mk/UoT34RQZbh4q7sslelk4dcHfcFZloRw= ;{id = 62298} 0574797065380C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0574797065390C74797065732D7369676E6564027762087369646E6C616273026E6C000006008000000003 type8.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type9.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC 0574797065380C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C001CAB9CF013C4620C86D2DF36CA7AF55E6BE81A93553DDA8D6A10FEA633A521522FE34BC19EE7C667C966EB94752652AB7CF121EF69B24F60CD98E162F417A4BC7243E7E04FF1C14B1D0766A27CAAA01AF43DB7AB5F362DE5FBC1FE0544936BB6AED8FF651F7EC7A71C59DB9D8485EA8E5DC42C3723C07A68C357306E8E8D8FA0 type8.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HKuc8BPEYgyG0t82ynr1XmvoGpNVPdqNahD+pjOlIVIv40vBnufGZ8lm65R1JlKrfPEh72myT2DNmOFi9BekvHJD5+BP8cFLHQdmonyqoBr0PberXzYt5fvB/gVEk2u2rtj/ZR9+x6ccWdudhIXqjl3ELDcjwHpow1cwbo6Nj6A= ;{id = 62298} 0574797065390C74797065732D7369676E6564027762087369646E6C616273026E6C00000900010000003C00280A6D61696C72656E616D650C74797065732D7369676E6564027762087369646E6C616273026E6C00 type9.types-signed.wb.sidnlabs.nl. 60 IN MR mailrename.types-signed.wb.sidnlabs.nl. 0574797065390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000908050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007E9CCEE6E21991F8F051D27F2050626065414AD5D462C8D990E7016A74926CE24D4AE1569BFE6F75DA3DE5175020E3A0DFEF9C758847F41D79BDBA9EB42E2476F9F4AA41F113F534BC70A0989516C25AB501FDFC4ECF7F5AC27E3AD41E512EA2E60B4843CB0CB5279D7784F777F3AC64D8167568E02FEE49757432574DA3B235 type9.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fpzO5uIZkfjwUdJ/IFBiYGVBStXUYsjZkOcBanSSbOJNSuFWm/5vddo95RdQIOOg3++cdYhH9B15vbqetC4kdvn0qkHxE/U0vHCgmJUWwlq1Af38Ts9/WsJ+OtQeUS6i5gtIQ8sMtSedd4T3d/OsZNgWdWjgL+5JdXQyV02jsjU= ;{id = 62298} 0574797065390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706539390C74797065732D7369676E6564027762087369646E6C616273026E6C000006004000000003 type9.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type99.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC 0574797065390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00ACAF3441F6B2EA06B3AC5EBFD93F838F27CADDE73CE0C02BF16D4ACACB747CD6D6D9E17D5C15D0444609C98343559D66844F6511D0BDEFB7ADCB86F30BC2C5E35B6D9B40F28F8964716DF2EBC6819F9CC58B7F3CBE6F28497F0A1D55D030B986C840F5F9BA92C89CF876C8D87328D6D27BD7376FCBF3B68F834027762B9EA949 type9.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rK80Qfay6gazrF6/2T+DjyfK3ec84MAr8W1Kyst0fNbW2eF9XBXQREYJyYNDVZ1mhE9lEdC977ety4bzC8LF41ttm0Dyj4lkcW3y68aBn5zFi388vm8oSX8KHVXQMLmGyED1+bqSyJz4dsjYcyjW0nvXN2/L87aPg0AndiueqUk= ;{id = 62298} 067479706539390C74797065732D7369676E6564027762087369646E6C616273026E6C00006300010000003C002625763D73706631202B6D7820613A636F6C6F2E6578616D706C652E636F6D2F3238202D616C6C type99.types-signed.wb.sidnlabs.nl. 60 IN SPF "v=spf1 +mx a:colo.example.com/28 -all" 067479706539390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF006308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007BE80F299CEF2ADE102DE7995277B387252B124C3C2B062864E427A74384AD162B5907D21B4FA92163EA9909A372DBF62AEAEE5A81FC4432D89BDE32303CC0FB0B8FC420A398FB2DA3ADCD5C2CD71C6B89508421AB50D86D68574306B7D7732CD8EAAE8FCE003F1F9F881DE102E94F265B45EBC6F75C5B293141881513000566 type99.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SPF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. e+gPKZzvKt4QLeeZUnezhyUrEkw8KwYoZOQnp0OErRYrWQfSG0+pIWPqmQmjctv2KuruWoH8RDLYm94yMDzA+wuPxCCjmPsto63NXCzXHGuJUIQhq1DYbWhXQwa313Ms2Oquj84APx+fiB3hAulPJltF68b3XFspMUGIFRMABWY= ;{id = 62298} 067479706539390C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10003003776B730C74797065732D7369676E6564027762087369646E6C616273026E6C00000D00000000000300000000000010 type99.types-signed.wb.sidnlabs.nl. 3600 IN NSEC wks.types-signed.wb.sidnlabs.nl. RRSIG NSEC SPF 067479706539390C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C000BF173CBB81D152D94323BA05F9CD0C7F20D36FDA59C122A42A7B72C24D4CA2450BB307707441233BD4E47FBA8FA3222F524978E06DCD2CA719E24B6C776B68D345424FBBE32B3FD342A4CC0233381CF2545769820A173293054D207A3E410BAA7B1D06FA9E0E85B34B1FCA90F52F1B2D13137DA51D4B8B868F8791EBF54D507 type99.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. C/Fzy7gdFS2UMjugX5zQx/INNv2lnBIqQqe3LCTUyiRQuzB3B0QSM71OR/uo+jIi9SSXjgbc0spxniS2x3a2jTRUJPu+MrP9NCpMwCMzgc8lRXaYIKFzKTBU0gej5BC6p7HQb6ng6Fs0sfypD1LxstExN9pR1Li4aPh5Hr9U1Qc= ;{id = 62298} 03776B730C74797065732D7369676E6564027762087369646E6C616273026E6C00000B00010000003C000A0A00000106E00005A060 wks.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 tcp 0 1 2 21 23 24 26 33 34 03776B730C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C009F701D990D4713040E9A68527D76706368EAC0979ADB9A6C07F08940E7FEB2B3B6BC977AE26804A40D087A44B1F1A8CA92D8A51EA39533B13F1EAA8D64357230A08E56B5618D266E23B7B6B8D8F79825A6B5432C984B0457704B2E4C3436FCF83173A5FA074F102483A8B75C739EA9B61A22452DF9C2F1B69475D4C635221906 wks.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. n3AdmQ1HEwQOmmhSfXZwY2jqwJea25psB/CJQOf+srO2vJd64mgEpA0IekSx8ajKktilHqOVM7E/HqqNZDVyMKCOVrVhjSZuI7e2uNj3mCWmtUMsmEsEV3BLLkw0Nvz4MXOl+gdPECSDqLdcc56pthoiRS35wvG2lHXUxjUiGQY= ;{id = 62298} 03776B730C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B05776B7330310C74797065732D7369676E6564027762087369646E6C616273026E6C000006001000000003 wks.types-signed.wb.sidnlabs.nl. 3600 IN NSEC wks01.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC 03776B730C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C004646BF2DCEA8D73FE608B97BFD19A4BA0BFDA0686AC90721B7FB0C238201D365E94D5632469A539ED5844AEB0A5D0D9C46A374E88AB19FD4619340D560A81126A3637B0116646EED03FBB7E92BB25C2792B479A06E4A16F7AD9958CD500DCF23F816074B5A532A4C7AC7EE4485BD32F92C8C672CBADB6F5625F4992D4E7808BE wks.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Rka/Lc6o1z/mCLl7/Rmkugv9oGhqyQcht/sMI4IB02XpTVYyRppTntWESusKXQ2cRqN06Iqxn9Rhk0DVYKgRJqNjewEWZG7tA/u36SuyXCeStHmgbkoW962ZWM1QDc8j+BYHS1pTKkx6x+5Ehb0y+SyMZyy6229WJfSZLU54CL4= ;{id = 62298} 05776B7330310C74797065732D7369676E6564027762087369646E6C616273026E6C00000B00010000003C000A0A00000106E00005A060 wks01.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 tcp 0 1 2 21 23 24 26 33 34 05776B7330310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0097B1D87F38DC2212100D9DB3209974803E63B1877387FD6A41140B15719B8D09577AB11AC3F60124F5F344F166D5C694F31CF6ADB92A317572A086670EDEA91FECBF31F14D950863B30586D2ADD61947E9525C9F242A5213415D75FA21EF7EB69B8DA62D381B7E8AE7260BB16E07582D0FCD7CB8A7AC57817CD124E19142536D wks01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. l7HYfzjcIhIQDZ2zIJl0gD5jsYdzh/1qQRQLFXGbjQlXerEaw/YBJPXzRPFm1caU8xz2rbkqMXVyoIZnDt6pH+y/MfFNlQhjswWG0q3WGUfpUlyfJCpSE0Fddfoh7362m42mLTgbfornJguxbgdYLQ/NfLinrFeBfNEk4ZFCU20= ;{id = 62298} 05776B7330310C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B05776B7330320C74797065732D7369676E6564027762087369646E6C616273026E6C000006001000000003 wks01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC wks02.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC 05776B7330310C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00D01001A192EE66714896D115CCFE402266CF993F711D456B71B1BAB0D097F3023E3F682FE2D44DB0A7E7790688C8A78F327F75D370B597EECE17B49F5516D438C619E76A41B62D32065D04082ADFE235D60596777B4BDC5CD0340699FD7CBC5E6321CB6B08479653C2CB6F6FD67B38CE95A3BC8A61C46DD7F5F9C4055673448E wks01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0BABoZLuZnFIltEVzP5AImbPmT9xHUVrcbG6sNCX8wI+P2gv4tRNsKfneQaIyKePMn9103C1l+7OF7SfVRbUOMYZ52pBti0yBl0ECCrf4jXWBZZ3e0vcXNA0Bpn9fLxeYyHLawhHllPCy29v1ns4zpWjvIphxG3X9fnEBVZzRI4= ;{id = 62298} 05776B7330320C74797065732D7369676E6564027762087369646E6C616273026E6C00000B00010000003C000C0A00000111E0000000000004 wks02.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 udp 0 1 2 53 05776B7330320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C003FEA7581C41B3B823FB01414664B6BCF8435A2C58814814694AF28F92CC85CC8F199D372DFABE3C16E927F2F7B0B271B2D114843682B3EFFDC3DA5EDA0C6FEBAC1C2A03B65E6C4AF2D32459A0F61A50FB19B5D86BEE9D9BC06001B1F5F66273E42F2DA85283E723A97D4CD2847D07AF20731F9DB8C74BCDAC2551C22A5FC8260 wks02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. P+p1gcQbO4I/sBQUZktrz4Q1osWIFIFGlK8o+SzIXMjxmdNy36vjwW6Sfy97CycbLRFIQ2grPv/cPaXtoMb+usHCoDtl5sSvLTJFmg9hpQ+xm12GvunZvAYAGx9fZic+QvLahSg+cjqX1M0oR9B68gcx+duMdLzawlUcIqX8gmA= ;{id = 62298} 05776B7330320C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029037777770C74797065732D7369676E6564027762087369646E6C616273026E6C000006001000000003 wks02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC www.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC 05776B7330320C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0013435E4DDC01BDFA2E234BEFD5FA26F48BEF8A8F67BC064C0A8B0A2E748BF2D57A9D5E0720E071F0699E5EC72DC8B4A6FC074006D29EE4B9767A66E5A632C7B8022D3B654220D5DF19E6E8743CDFE7163651B0138697F01B1E695C1AFD77E0D75B11C97A3E546FD78E5B3B60C41D64D86D6EF80C69404058F32C220E8A7BCF89 wks02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. E0NeTdwBvfouI0vv1fom9Ivvio9nvAZMCosKLnSL8tV6nV4HIOBx8GmeXsctyLSm/AdABtKe5Ll2emblpjLHuAItO2VCINXfGebodDzf5xY2UbAThpfwGx5pXBr9d+DXWxHJej5Ub9eOWztgxB1k2G1u+AxpQEBY8ywiDop7z4k= ;{id = 62298} 037777770C74797065732D7369676E6564027762087369646E6C616273026E6C00000100010000003C0004D5881FDD www.types-signed.wb.sidnlabs.nl. 60 IN A 213.136.31.221 037777770C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF000108050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B0FE97F5148BEB30C9EFAD9664B82CDB01B77C39263DA72CD1E4F9AA08C76410714D992FA29E5F00FB5A2AAD78B4FFA97CDD7EA5AD668EB58FA4EC2EBDCA42DB949AF31EB82127E6FA983C4510E61253363603AEEDAE23C6D38ECE301C412E45A5FE333C76E8DA3113A1C4DCBFB5CE1A29EA7B7DD2C409738ADDB27E464D9099 www.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. sP6X9RSL6zDJ762WZLgs2wG3fDkmPacs0eT5qgjHZBBxTZkvop5fAPtaKq14tP+pfN1+pa1mjrWPpOwuvcpC25Sa8x64ISfm+pg8RRDmElM2NgOu7a4jxtOOzjAcQS5Fpf4zPHbo2jETocTcv7XOGinqe33SxAlzit2yfkZNkJk= ;{id = 62298} 037777770C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E100029037832350C74797065732D7369676E6564027762087369646E6C616273026E6C000006400000000003 www.types-signed.wb.sidnlabs.nl. 3600 IN NSEC x25.types-signed.wb.sidnlabs.nl. A RRSIG NSEC 037777770C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C008F694DB17EE6C657534A6C274D0A13E9A2B3636429CD1AA347D691052A63554FC59D3F33735FE7CFDCB7FA1EADAEF6F80666EC49FB6710C24A430B5C88D18EE4A35C0DAC9924D43BE1F88463077D084BF01184189D44435131CEB19FECDBBB767DBE72E3E6C8FBD8544CC89D5ACCF7B181FFDE1E37AB23FCADDE9DBF7BFF11C2 www.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. j2lNsX7mxldTSmwnTQoT6aKzY2QpzRqjR9aRBSpjVU/FnT8zc1/nz9y3+h6trvb4BmbsSftnEMJKQwtciNGO5KNcDayZJNQ74fiEYwd9CEvwEYQYnURDUTHOsZ/s27t2fb5y4+bI+9hUTMidWsz3sYH/3h43qyP8rd6dv3v/EcI= ;{id = 62298} 037832350C74797065732D7369676E6564027762087369646E6C616273026E6C00001300010000003C000B0A33303333303333303333 x25.types-signed.wb.sidnlabs.nl. 60 IN X25 "3033033033" 037832350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001308050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C007D8AA21CF0CA444990DBC72FDA49854BA90FE2765837BFA166C8E4A10F7CDD54866CFF3398F01F3E77D5B2EC19CFE2C79D47CB41C099ACBCCAD8AE2B0811ECB8A6D22E46706106BD54B7795373D8F4AAE3F528FED800ADC46D8A5F6F3944B9D1E99572C801CAF76B9DA947C9514E4BA113AEBB3DFB4DE44C63F0EF4A9CFFBA29 x25.types-signed.wb.sidnlabs.nl. 60 IN RRSIG X25 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fYqiHPDKREmQ28cv2kmFS6kP4nZYN7+hZsjkoQ983VSGbP8zmPAfPnfVsuwZz+LHnUfLQcCZrLzK2K4rCBHsuKbSLkZwYQa9VLd5U3PY9Krj9Sj+2ACtxG2KX285RLnR6ZVyyAHK92udqUfJUU5LoROuuz37TeRMY/DvSpz/uik= ;{id = 62298} 037832350C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E1000250C74797065732D7369676E6564027762087369646E6C616273026E6C000006000010000003 x25.types-signed.wb.sidnlabs.nl. 3600 IN NSEC types-signed.wb.sidnlabs.nl. X25 RRSIG NSEC 037832350C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0002A2DE7B343205D8D75C47B9BCDB52CCEACE3D02CABE5DE3005E95DE1205B5976C6C0131AE32D75EBC5EA11DFBB4FC6D3AA17DE7F1ED5D815A0E6B9542D9447620E8CC81CD0AD052DCAB55AC8565774D152DDDF140B35A93B5FD5A1318348979709E6074B15573FB5529C2F672B683C9732C8D70C0D28D8DC67A5565AB643FB7 x25.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. AqLeezQyBdjXXEe5vNtSzOrOPQLKvl3jAF6V3hIFtZdsbAExrjLXXrxeoR37tPxtOqF95/HtXYFaDmuVQtlEdiDozIHNCtBS3KtVrIVld00VLd3xQLNak7X9WhMYNIl5cJ5gdLFVc/tVKcL2craDyXMsjXDA0o2NxnpVZatkP7c= ;{id = 62298} unbound-1.13.1/testdata/autotrust_addpend_once.rpl0000644000175000017500000002657614010434640022004 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with ADDPEND seen once ; this should fail. ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} ;example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; ns.example.com. KSK 55582-REVOKED and 60946 RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. qLKZUJEi3ajSJ4/b7xl0BwhzW6JtjsojpZ+2nUx1PvaeQVoTmyWxjxc2tAmJGcBPqMqzeY470xvyMDvGTOiQCQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. EW2YB+2yNX9LTNDPVwkcGnRTTx38pOiwBaixdwxmDgqWKXLDLM6Kd2Xv9tveS39RnSZ5H1inRXE55q+rL6Re3g== ;{id = 55710} ; wrong keytag: ;example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55582 example.com. nH/6HauVJI4GGz78UoK/38cOOrEqsYZP0jFzfCC3OyIlclVTjAFvjVPlVMGK7sA5Nw1v20YtFTQkXZgbrRuInQ== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. xKSBZr4vOsEUKlVoNb6SOV69DM7xFOJI4gPFKq5Tv4APIMJ/9G3odoDmNcLCVyYGzhoDik5hciJnZio6UHgzAA== ;{id = 60946} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 30899 example.com. TfFGz1kDtkn3ixbKMJvQDZ0uGw/eW+inIiPqQVPQtO2WiocKrnYnzwv/AqwnFvEar70dF15/zffNIF+ipOS5/g== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 60946 example.com. X0Ci//w0czN/J5RvypHGqp56n1tLdapi92ODAqjM7QpZXbSHaJ7wfPG1PZzvdxHUZUVyf8uy2stjg/XoLGHMWA== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; t2 is removed second poll time. ; t3 is removed third poll time. ; 31 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${31*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} ; it fails! ADDPEND not valid for signing this answer. STEP 44 ASSIGN probe4 = ${range 3200 ${timeout} 3600} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 6 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_optout_ad.rpl0000644000175000017500000005017014010434640021165 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. DS 57024 7 1 46d134be319b2cc910b9938f1cb25dc41abb27bf" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with optout NSEC3 response that gets no AD. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 7 2 3600 20070926134150 20070829134150 57024 example.com. fIE3H2v3wAm3GPajsdgJn+A8R4Cp7dMXf1PSUQ8BfklzMBMJjpc0oM/S7u/HVLYQs1jx8CMdw2TZEpIPfo6Rl0TekDqNtVk6IBw1H+zxDFwf3v7UdOjm8s6FfoEJcZ5yEFV/Lps82NzHCR9uqprhv6ddQdAeVNA5QHis1c5Y1P0= ;{id = 57024} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. b0iX5vuTqngB5F0ORFrFLx8sAeTHGJVcPpD34iNFY71ZoFnHrHfAMWC3RAWz+nQ1NmH1oDdA8NTYN/aQQNzwEz4VmVYA2PANBSiwSY3q3gp9PWZU6CfRNf2dU/210H0y35FroQpADszmwC+Hlbcvll+bQj3fSyT2W/69kRVssj4= ;{id = 57024} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 257 3 7 AwEAAbvre/wK/WVeoj0SiwVkTD+NefvHPru9YIqLWY0m+0E5NYOpJZdc+PGQQYRzFNOlugVZtFirmv5Lmz7GNiASXtG/IFi//SlE30DxEKQOjt2F6qSZTZ1nZ5XOIMGTwWyp4OoI0egk5JavC5mQbyXqcj82ywt6F5Z3CmnThVl6MtOv ;{id = 57024 (ksk), size = 1024b} example.com. 3600 IN RRSIG DNSKEY 7 2 3600 20070926134150 20070829134150 57024 example.com. lqOo8W7UffLZIKBoIJg8OAPkmCWptnstiLIg1bAtzuEZDZFr2KNZGv+5k6hbRJKYnZRLReY4v8G9Eg0GCC/44gLm8BZlnh/4jLOjMH9MKusFV/jNqz/HABITYn1pBwvVak7lzqN+bmL0KMyWf1MzPWilx4fM9YWinsQFILVLPL0= ;{id = 57024} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 7 2 3600 20070926134150 20070829134150 57024 example.com. fIE3H2v3wAm3GPajsdgJn+A8R4Cp7dMXf1PSUQ8BfklzMBMJjpc0oM/S7u/HVLYQs1jx8CMdw2TZEpIPfo6Rl0TekDqNtVk6IBw1H+zxDFwf3v7UdOjm8s6FfoEJcZ5yEFV/Lps82NzHCR9uqprhv6ddQdAeVNA5QHis1c5Y1P0= ;{id = 57024} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. b0iX5vuTqngB5F0ORFrFLx8sAeTHGJVcPpD34iNFY71ZoFnHrHfAMWC3RAWz+nQ1NmH1oDdA8NTYN/aQQNzwEz4VmVYA2PANBSiwSY3q3gp9PWZU6CfRNf2dU/210H0y35FroQpADszmwC+Hlbcvll+bQj3fSyT2W/69kRVssj4= ;{id = 57024} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} ; optout ; example.com. -> onib9mgub9h0rml3cdf5bgrj59dkjhvk. ; sub.example.com. -> kg19n32806c832kijdnglq8p9m2r5mdj. ; *.example.com. -> 4f3cnt8cu22tngec382jj4gde4rb47ub. onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024} jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN MX SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} ; optout ; example.com. -> onib9mgub9h0rml3cdf5bgrj59dkjhvk. ; sub.example.com. -> kg19n32806c832kijdnglq8p9m2r5mdj. ; *.example.com. -> 4f3cnt8cu22tngec382jj4gde4rb47ub. onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024} jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION rub.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} ; optout ; example.com. -> onib9mgub9h0rml3cdf5bgrj59dkjhvk. ; rub.example.com. -> c2bqk3tb4foaenfbp1v0pdk6mor3r7vo. ; *.example.com. -> 4f3cnt8cu22tngec382jj4gde4rb47ub. onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM 22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. NSEC3 1 1 0 - f2bqk3tb4foaenfbp1v0pdk6mor3r7vo NS RRSIG onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024} 22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jk6EYU9qTrmNeeKuQRG7iKyfNJnBt45MToPVpAQ+LoGDC3muy4bkWeKspj68cN9E5wNijfmm1eFK3khSSEnM50mfJbpiwlbKgL0VZz33Zn+Wu8b7sTtdDwDH7MUBLRwHeb7W+NtQIEXPLs4Z3BXHzAXy5ZpSjQ3PJZn6zBx4/dw= ;{id = 57024} SECTION ADDITIONAL ENTRY_END ; wildcard expansion ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.wild.example.com. IN A SECTION ANSWER ; *.wild.example.com. IN A 77.88.99.0 a.wild.example.com. IN A 77.88.99.0 a.wild.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. GWV6cQprrpAsaYla5z7N9tppdb+X0ZjOsiWBuBueSACHU8CzsYPMbwKUZlTNbQ4mSVRRDa0rM1niYoZF9oqyAfbn5HBLi62TRjrBLHfvatDgSiZCa4mauUfzUS+U7FfUXikNIigG0aN0xdpJ//urmecjNSKg2aW4M0DYsm7keMI= ;{id = 57024} SECTION AUTHORITY ; a.wild.example.com -> ad1535hlgg914unuuaei9jfh4ofr44uo. covered by optout ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024} ; for wild.example.com the closest encloser ; wild.example.com -> 8aeigskl5tmraedgji7v1lqbmqs8qv7u. 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.wild.example.com. IN MX SECTION ANSWER SECTION AUTHORITY ; wildcard no data example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} ; wild.example.com -> 8aeigskl5tmraedgji7v1lqbmqs8qv7u. ; *.wild.example.com. -> nvec78au1hpuma9eebeji5n06eq33gbk. ; the NSEC3 for the wildcard *.wild.example.com. , with optout, A RRSIG nvec78au1hpuma9eebeji5n06eq33gbk.example.com. IN NSEC3 1 1 0 - ovec78au1hpuma9eebeji5n06eq33gbk A RRSIG nvec78au1hpuma9eebeji5n06eq33gbk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jE+b5p+stQumm+tLZdaBT+KBpwYI7wRXijRHWcqiUp2SY1uV7HxBdW8aedVTqpFe8kYbMUgI3pCOAitmiI9R6SJg3q7022QOb9y+0/xSmIDqxATVPTJbkzVBInfWrulRtn7o3HmOyoIc9/w7NnNxFYpwtFL08jTBRr8XRTWDM7Q= ;{id = 57024} ; NSEC3 for the closest encloser, wild.example.com. (an empty nonterminal) 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024} ; a.wild.example.com -> ad1535hlgg914unuuaei9jfh4ofr44uo. covered by optout ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN MX ENTRY_END ; recursion happens here. ; no AD flag on this because an optout NSEC3 is used. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION sub.example.com. IN MX SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024} jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024} SECTION ADDITIONAL ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END ; recursion happens here. ; no AD flag here because of RFC5155 9.2 section. ; even though we are sure there is no DS, this is what the RFC says. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024} jg19n32806c832kijdnglq8p9m2r5mdj.example.com. NSEC3 1 1 0 - lg19n32806c832kijdnglq8p9m2r5mdj NS DS RRSIG jg19n32806c832kijdnglq8p9m2r5mdj.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. f7ZSCahAuKOLXquM0jpdU6I9AX31CgGicRiB3aU4jvqQp/EygbCNn5kfpyXY0FvZvzggpl8naXSStOPN9dy3bb0NwGQkJcYD94NEw307T8uEunOvx1ug5TuakBAwqjY8xKM3xab3LnWYRtx4zdln/3ZDHvBUwfzkxUZrzeKjpiI= ;{id = 57024} SECTION ADDITIONAL ENTRY_END STEP 40 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION rub.example.com. IN A ENTRY_END ; recursion happens here. ; no AD flag here because of RFC5155 9.2 section. ; also for NXDOMAIN STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION rub.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. NSEC3 1 1 0 - pnib9mgub9h0rml3cdf5bgrj59dkjhvk NS SOA RRSIG DNSKEY NSEC3PARAM onib9mgub9h0rml3cdf5bgrj59dkjhvk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jHrF+lnyRL1LE/Bwz6C+jZg3E/2qQkVSboGxya6iX71v0zA3eUsob9m9l3gHNlhwhyahbamHUKx+OMvtYuzRa+RMv4ObuLRIt8StdixeXaUU+rx7C2qCKOFsa5q4HzK4bLYPfyb5T9w67HbzHPLEllXPA7tghzyzCM9qBtbvwK4= ;{id = 57024} 22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. NSEC3 1 1 0 - f2bqk3tb4foaenfbp1v0pdk6mor3r7vo NS RRSIG 22bqk3tb4foaenfbp1v0pdk6mor3r7vo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jk6EYU9qTrmNeeKuQRG7iKyfNJnBt45MToPVpAQ+LoGDC3muy4bkWeKspj68cN9E5wNijfmm1eFK3khSSEnM50mfJbpiwlbKgL0VZz33Zn+Wu8b7sTtdDwDH7MUBLRwHeb7W+NtQIEXPLs4Z3BXHzAXy5ZpSjQ3PJZn6zBx4/dw= ;{id = 57024} SECTION ADDITIONAL ENTRY_END STEP 60 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.wild.example.com. IN A ENTRY_END ; query is a wildcard expansion, covered by optout. ; hence it is without AD flag (even though we are sure this wildcard exists, ; we are not sure that there is no delegation covered by the optout span ; with the name a.wild.example.com). STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION a.wild.example.com. IN A SECTION ANSWER a.wild.example.com. IN A 77.88.99.0 a.wild.example.com. 3600 IN RRSIG A 7 3 3600 20070926134150 20070829134150 57024 example.com. GWV6cQprrpAsaYla5z7N9tppdb+X0ZjOsiWBuBueSACHU8CzsYPMbwKUZlTNbQ4mSVRRDa0rM1niYoZF9oqyAfbn5HBLi62TRjrBLHfvatDgSiZCa4mauUfzUS+U7FfUXikNIigG0aN0xdpJ//urmecjNSKg2aW4M0DYsm7keMI= ;{id = 57024} SECTION AUTHORITY ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024} 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024} ENTRY_END STEP 80 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.wild.example.com. IN MX ENTRY_END ; nodata wildcard expansion, we are sure that the wildcard does not have ; the data that is requested, but there an optout flag set on the wildcard ; expansion denial, thus we are not sure of a.wild.example.com delegation ; under the optout. STEP 90 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION a.wild.example.com. IN MX SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. noc.example.com. 2009310622 1800 900 604800 86400 example.com. 3600 IN RRSIG SOA 7 2 3600 20070926134150 20070829134150 57024 example.com. HlyER7bYPiSJ9jdjjRBucQexYr932Oor1TvxSLPWw5fuWvr/fFitKVnLqC+lqBIeOby44KiDr0rIk+ZqYjWWKNjaLm5wMfhQzbsAgGTQxmO07jnYOGQG9SI6DSbR9GJdZ7imu5sx5oo5dze73MxgLMZIethGaFMkktYN53+AzG0= ;{id = 57024} nvec78au1hpuma9eebeji5n06eq33gbk.example.com. IN NSEC3 1 1 0 - ovec78au1hpuma9eebeji5n06eq33gbk A RRSIG nvec78au1hpuma9eebeji5n06eq33gbk.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. jE+b5p+stQumm+tLZdaBT+KBpwYI7wRXijRHWcqiUp2SY1uV7HxBdW8aedVTqpFe8kYbMUgI3pCOAitmiI9R6SJg3q7022QOb9y+0/xSmIDqxATVPTJbkzVBInfWrulRtn7o3HmOyoIc9/w7NnNxFYpwtFL08jTBRr8XRTWDM7Q= ;{id = 57024} 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. IN NSEC3 1 1 0 - 9aeigskl5tmraedgji7v1lqbmqs8qv7u 8aeigskl5tmraedgji7v1lqbmqs8qv7u.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. afV7c9knpxmD5c6UKrqw5J/06eokPwSb3HZi3TI63tzFcswuMjj4d7NKJmdpA+uo0aweVZgcOp+O+v9urgNYNYbxOy02qqOetLph8YWH7MQTftaGBwKD7gZMbnUArryPCtrlJz0i0GzoWvVTZnsjrrlDtP/ogLDnCKyi7Q0si+k= ;{id = 57024} ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. IN NSEC3 1 1 0 - ae1535hlgg914unuuaei9jfh4ofr44uo NS RRSIG ac1535hlgg914unuuaei9jfh4ofr44uo.example.com. 3600 IN RRSIG NSEC3 7 3 3600 20070926134150 20070829134150 57024 example.com. imoxsXE1c3FaXu6uSantJfMPGBgsauf1GhmNpS1lLuaNRjXOhf1PDXwt/GoD/dm2GXJAlWT8u6EK3RXkFwlDIsP7vYFuDfUNCQ/hvYq300sXl1nfW0O1bsoBJahQJuNM+xcbwbnQf0krCTxNthyi2cuiY7RYug6ZTZ3gz4DMkhU= ;{id = 57024} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_malformed.tdir/0000755000175000017500000000000014010434640020257 5ustar wouterwouterunbound-1.13.1/testdata/fwd_malformed.tdir/fwd_malformed.post0000644000175000017500000000045614010434640024001 0ustar wouterwouter# #-- fwd_malformed.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_malformed.tdir/fwd_malformed.pre0000644000175000017500000000161614010434640023601 0ustar wouterwouter# #-- fwd_malformed.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_malformed.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_malformed.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_malformed.tdir/fwd_malformed.dsc0000644000175000017500000000050714010434640023562 0ustar wouterwouterBaseName: fwd_malformed Version: 1.0 Description: Check authority that returns malformed packet. CreationDate: Tue 13 Jun 09:35:40 CEST 2017 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_malformed.pre Post: fwd_malformed.post Test: fwd_malformed.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_malformed.tdir/fwd_malformed.testns0000644000175000017500000000122014010434640024322 0ustar wouterwouter; malformed packet created ENTRY_BEGIN MATCH opcode ADJUST copy_id HEX_ANSWER_BEGIN 03b8 0800 4500 0042 b40d 0000 e4c2 d1e3 d2f8 d48c b5df 1b93 0800 4500 HEX_ANSWER_END ENTRY_END ; malformed packet from reporter ENTRY_BEGIN MATCH opcode ADJUST copy_id HEX_ANSWER_BEGIN 03b8 0800 4500 0042 b40d 0000 7211 548a ; ....E..B....r.T. 8ccd 5119 d857 89d5 0035 6b80 002e 0000 ; ..Q..W...5k..... cdb2 8015 0001 0000 0000 0001 0558 7a6a ; .............Xzj 7051 0378 797a e4c2 d1e3 d2f8 d48c b5df ; pQ.xyz.......... 1b93 0800 4500 ; ....E. HEX_ANSWER_END ENTRY_END unbound-1.13.1/testdata/fwd_malformed.tdir/fwd_malformed.test0000644000175000017500000000077014010434640023772 0ustar wouterwouter# #-- fwd_malformed.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "SERVFAIL" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_malformed.tdir/fwd_malformed.conf0000644000175000017500000000041514010434640023734 0ustar wouterwouterserver: verbosity: 5 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no use-caps-for-id: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/val_positive.rpl0000644000175000017500000001200314010434640017727 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with positive response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ds.sha3840000644000175000017500000000344514010434640017117 0ustar wouterwouter; ; DS match test file. ; test matching of DS hash against DNSKEYs. ; ; enter ENTRYs with a DS and a DNSKEY. ; These are matched against another. ; If the query name starts with 'yes' then it must match. ; If the query name starts with 'no' then it must not match. ; These are SHA256 and SHA384 tests from the draft-ietf-dnsext-ecdsa-04 ENTRY_BEGIN SECTION QUESTION yes. IN A SECTION ANSWER example.net. 3600 IN DS 55648 13 2 ( b4c8c1fe2e7477127b27115656ad6256f424625bf5c1 e2770ce6d6e37df61d17 ) example.net. 3600 IN DNSKEY 257 3 13 ( GojIhhXUN/u4v54ZQqGSnyhWJwaubCvTmeexv7bR6edb krSqQpF64cYbcB7wNcP+e+MAnLr+Wi9xMWyQLc8NAA== ) ENTRY_END ENTRY_BEGIN SECTION QUESTION yes. IN A SECTION ANSWER example.net. 3600 IN DS 10771 14 4 ( 72d7b62976ce06438e9c0bf319013cf801f09ecc84b8 d7e9495f27e305c6a9b0563a9b5f4d288405c3008a94 6df983d6 ) example.net. 3600 IN DNSKEY 257 3 14 ( xKYaNhWdGOfJ+nPrL8/arkwf2EY3MDJ+SErKivBVSum1 w/egsXvSADtNJhyem5RCOpgQ6K8X1DRSEkrbYQ+OB+v8 /uX45NBwY8rp65F6Glur8I/mlVNgF6W/qTI37m40 ) ENTRY_END ; same entry as above, but corrupted by a change in the DS, MUST fail ENTRY_BEGIN SECTION QUESTION no. IN A SECTION ANSWER example.net. 3600 IN DS 55648 13 2 ( b4c8c1fe2e7477126b27115656ad6256f424625bf5c1 e2770ce6d6e37df61d17 ) example.net. 3600 IN DNSKEY 257 3 13 ( GojIhhXUN/u4v54ZQqGSnyhWJwaubCvTmeexv7bR6edb krSqQpF64cYbcB7wNcP+e+MAnLr+Wi9xMWyQLc8NAA== ) ENTRY_END ; same entry as above, but corrupted by a change in the DS, MUST fail ENTRY_BEGIN SECTION QUESTION no. IN A SECTION ANSWER example.net. 3600 IN DS 10771 14 4 ( 72d7b62976ce06438e9c0cf319013cf801f09ecc84b8 d7e9495f27e305c6a9b0563a9b5f4d288405c3008a94 6df983d6 ) example.net. 3600 IN DNSKEY 257 3 14 ( xKYaNhWdGOfJ+nPrL8/arkwf2EY3MDJ+SErKivBVSum1 w/egsXvSADtNJhyem5RCOpgQ6K8X1DRSEkrbYQ+OB+v8 /uX45NBwY8rp65F6Glur8I/mlVNgF6W/qTI37m40 ) ENTRY_END unbound-1.13.1/testdata/val_nsec3_b3_optout.rpl0000644000175000017500000001360114010434640021103 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.3 referral to optout unsigned zone. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION mc.c.example. IN MX SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. ;; NSEC3 RR that covers the "next closer" name (c.example) ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ;; NSEC3 RR that matches the closest encloser (example) ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION c.example. IN DS SECTION AUTHORITY ;; NSEC3 RR that covers the "next closer" name (c.example) ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ;; NSEC3 RR that matches the closest encloser (example) ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ENTRY_END RANGE_END ; ns1.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END ; ns2.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION mc.c.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b21_nodataent_wr.rpl0000644000175000017500000000706314010434640022323 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.2.1 no data empty nonterminal, wrong rr. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION y.w.example. IN A SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR matches the QNAME and shows that the A type bit is not set. ;ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. NSEC3 1 1 12 aabbccdd ( k8udemvp1j2f7eg6jebps17vp3n8i58h ) ;ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. gPkFp1s2QDQ6wQzcg1uSebZ61W33rUBDcTj7 2F3kQ490fEdp7k1BUIfbcZtPbX3YCpE+sIt0 MpzVSKfTwx4uYA== ) ; instead the wrong NSEC3 rr is included 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION y.w.example. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION y.w.example. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametoinsecure.rpl0000644000175000017500000001231014010434640021252 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" trust-anchor: "example.org. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20091011000000" fake-sha1: yes trust-anchor-signaling: no forward-zone: name: "." forward-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test validator with CNAME to insecure NSEC or NSEC3. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20091012000000 20091010000000 30899 example.com. BeCk6+D0ysmO1+X0CjvXH55AO78C7Vxrq58C3YgO0wt2eTG/deZCiWI3bz+3OC64cICbJr5fvCfqUuJDABU/fw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. 3600 IN CNAME unsafe.example.com. www.example.com. 3600 IN RRSIG CNAME 5 3 3600 20091012000000 20091010000000 30899 example.com. FJN0bZitZfxNQNTD1V2vcDBQ9cb4y4YGa35Ilr+VnrBiisAB9ZyrO8umvdtwzV1VPIlfFDQTJrKh5aZparLHPw== ;{id = 30899} SECTION AUTHORITY ; really an insecure delegation, but co-hosted on the server. unsafe.example.com. 3600 IN NSEC v.example.com. NS RRSIG NSEC unsafe.example.com. 3600 IN RRSIG NSEC 5 3 3600 20091012000000 20091010000000 30899 example.com. Le9EsRd2MxkOGRCvGtQkXRDAob5ZJOFQlZbDvcWAh5OXVpmcwZmCHctxw/Zyi4LkNYoYCSCc8PiVRrJM3IsGrQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION unsafe.example.com. IN AAAA SECTION ANSWER ; empty response ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.org. IN DNSKEY SECTION ANSWER example.org. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.org. 3600 IN RRSIG DNSKEY 5 2 3600 20091012000000 20091010000000 30899 example.org. rd9aoXbeaE0zyT96Z0sjN3Mz5Nz/wuRsIH1lwcjwUFmAAT7F+SjwVWeo8nGaTBd8JDSUdiL+VwotEE0I22RrnA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.org. IN AAAA SECTION ANSWER www.example.org. 3600 IN CNAME unsafe.example.org. www.example.org. 3600 IN RRSIG CNAME 5 3 3600 20091012000000 20091010000000 30899 example.org. ZgRbMnunAqa1K46GINIihekkI73/1PkGFSAJRn7bSTxBpLM+qiHJDU1+QgS2SjaSKHqNqbXy/eeG3qX9r9y87g== ;{id = 30899} SECTION AUTHORITY ; really an insecure delegation, but co-hosted on the server. ; h(unsafe.example.org.) = ltchu0548v0cof8f25u2pj4mjf4shcms. ltchu0548v0cof8f25u2pj4mjf4shcms.example.org. IN NSEC3 1 0 1 - ltchu0548v0cof8f25u2pj4mjf4shcmt NS ltchu0548v0cof8f25u2pj4mjf4shcms.example.org. 3600 IN RRSIG NSEC3 5 3 3600 20091012000000 20091010000000 30899 example.org. yxuYgfkg8QTdB5yBMN9Up9GyKu7xjKDScqq95/tsy3lx22tLsdLD9Fojdrq7eB+K7Tr72AejmVJs44v6TmWkZw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION unsafe.example.org. IN AAAA SECTION ANSWER ; empty response ENTRY_END RANGE_END ; NSEC STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. 3600 IN CNAME unsafe.example.com. www.example.com. 3600 IN RRSIG CNAME 5 3 3600 20091012000000 20091010000000 30899 example.com. FJN0bZitZfxNQNTD1V2vcDBQ9cb4y4YGa35Ilr+VnrBiisAB9ZyrO8umvdtwzV1VPIlfFDQTJrKh5aZparLHPw== ;{id = 30899} SECTION AUTHORITY unsafe.example.com. 3600 IN NSEC v.example.com. NS RRSIG NSEC unsafe.example.com. 3600 IN RRSIG NSEC 5 3 3600 20091012000000 20091010000000 30899 example.com. Le9EsRd2MxkOGRCvGtQkXRDAob5ZJOFQlZbDvcWAh5OXVpmcwZmCHctxw/Zyi4LkNYoYCSCc8PiVRrJM3IsGrQ== ;{id = 30899} ENTRY_END ; NSEC3 STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.org. IN AAAA ENTRY_END ; recursion happens here. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.org. IN AAAA SECTION ANSWER www.example.org. 3600 IN CNAME unsafe.example.org. www.example.org. 3600 IN RRSIG CNAME 5 3 3600 20091012000000 20091010000000 30899 example.org. ZgRbMnunAqa1K46GINIihekkI73/1PkGFSAJRn7bSTxBpLM+qiHJDU1+QgS2SjaSKHqNqbXy/eeG3qX9r9y87g== ;{id = 30899} SECTION AUTHORITY ltchu0548v0cof8f25u2pj4mjf4shcms.example.org. 3600 IN NSEC3 1 0 1 - ltchu0548v0cof8f25u2pj4mjf4shcmt NS ltchu0548v0cof8f25u2pj4mjf4shcms.example.org. 3600 IN RRSIG NSEC3 5 3 3600 20091012000000 20091010000000 30899 example.org. yxuYgfkg8QTdB5yBMN9Up9GyKu7xjKDScqq95/tsy3lx22tLsdLD9Fojdrq7eB+K7Tr72AejmVJs44v6TmWkZw== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/tcp_conn_limit.tdir/0000755000175000017500000000000014010434640020452 5ustar wouterwouterunbound-1.13.1/testdata/tcp_conn_limit.tdir/tcp_conn_limit.dsc0000644000175000017500000000046514010434640024153 0ustar wouterwouterBaseName: tcp_conn_limit Version: 1.0 Description: Test tcp-connection-limit setting. CreationDate: Fri Aug 3 17:18:00 BST 2018 Maintainer: dr. J. Hague Category: Component: CmdDepends: Depends: Help: Pre: tcp_conn_limit.pre Post: tcp_conn_limit.post Test: tcp_conn_limit.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tcp_conn_limit.tdir/tcp_conn_limit.post0000644000175000017500000000045714010434640024370 0ustar wouterwouter# #-- tcp_conn_limit.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/tcp_conn_limit.tdir/tcp_conn_limit.testns0000644000175000017500000000115714010434640024721 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH UDP opcode qtype qname REPLY QR AA NOERROR TC ADJUST copy_id SECTION QUESTION www IN A ENTRY_END ENTRY_BEGIN MATCH TCP opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END unbound-1.13.1/testdata/tcp_conn_limit.tdir/tcp_conn_limit.pre0000644000175000017500000000162114010434640024163 0ustar wouterwouter# #-- tcp_conn_limit.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT tcp_conn_limit.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_conn_limit.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/tcp_conn_limit.tdir/tcp_conn_limit.test0000644000175000017500000000156514010434640024363 0ustar wouterwouter# #-- tcp_conn_limit.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test # Set unbound to limit all IPv4 addresses to 0 connections. # Make sure TCP connection fails. if uname | grep MINGW >/dev/null; then echo "no job control in shell on windows. end test" exit 0 fi PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # test query should fail. echo "> query www.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN >outfile 2>&1 if test "$?" -eq 0; then echo "exit status OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "exit status not OK" fi echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "OK" exit 0 unbound-1.13.1/testdata/tcp_conn_limit.tdir/tcp_conn_limit.conf0000644000175000017500000000043114010434640024320 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no tcp-connection-limit: 0.0.0.0/0 0 forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/local_norec.tdir/0000755000175000017500000000000014010434640017731 5ustar wouterwouterunbound-1.13.1/testdata/local_norec.tdir/local_norec.testns0000644000175000017500000000053114010434640023452 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION foo IN A SECTION ANSWER foo IN A 10.20.30.50 ENTRY_END unbound-1.13.1/testdata/local_norec.tdir/local_norec.pre0000644000175000017500000000161014010434640022717 0ustar wouterwouter# #-- local_norec.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT local_norec.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < local_norec.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/local_norec.tdir/local_norec.dsc0000644000175000017500000000050014010434640022677 0ustar wouterwouterBaseName: local_norec Version: 1.0 Description: Local-data and access control allow_snoop test. CreationDate: Mon Sep 1 14:26:00 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: local_norec.pre Post: local_norec.post Test: local_norec.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/local_norec.tdir/local_norec.post0000644000175000017500000000045414010434640023123 0ustar wouterwouter# #-- local_norec.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/local_norec.tdir/local_norec.conf0000644000175000017500000000074714010434640023070 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-data: "foo.example.com. A 1.1.1.1" access-control: 0.0.0.0/0 allow_snoop access-control: 127.0.0.0/8 allow_snoop access-control: ::0/0 allow_snoop access-control: ::1 allow_snoop access-control: ::ffff:127.0.0.1 allow_snoop forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/local_norec.tdir/local_norec.test0000644000175000017500000000256014010434640023115 0ustar wouterwouter# #-- local_norec.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test # # www.example.com is available through recursion. # foo.example.com is available through local-data (and recursion...). # echo "> dig www.example.com. +RD" dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> dig www.example.com. +norec" dig @localhost +norec -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> dig foo.example.com. +RD" dig @localhost -p $UNBOUND_PORT foo.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "1.1.1.1" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> dig foo.example.com. +norec" dig @localhost +norec -p $UNBOUND_PORT foo.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "1.1.1.1" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/06-ianaports.tdir/0000755000175000017500000000000014010434640017674 5ustar wouterwouterunbound-1.13.1/testdata/06-ianaports.tdir/06-ianaports.test0000644000175000017500000000125714010434640023025 0ustar wouterwouter# #-- 06-ianaports.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh mkdir util get_make echo "> $MAKE -f $PRE/Makefile iana_update" $MAKE -f $PRE/Makefile iana_update if test $? -ne 0; then echo "cannot iana update" exit 1 fi diff -u $PRE/util/iana_ports.inc util/iana_ports.inc if test $? -ne 0; then echo "IANA assigned ports have updated, make iana_update and commit" echo "cp util/iana_ports.inc $PRE/util/iana_ports.inc" cp util/iana_ports.inc $PRE/util/iana_ports.inc exit 1 fi exit 0 unbound-1.13.1/testdata/06-ianaports.tdir/06-ianaports.dsc0000644000175000017500000000043414010434640022613 0ustar wouterwouterBaseName: 06-ianaports Version: 1.0 Description: check if iana assigned ports have changed. CreationDate: Thu Apr 10 12:42:40 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: 06-ianaports.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/test_ldnsrr.20000644000175000017500000071401714010434640017150 0ustar wouterwouter; nlnetlabs.nl AXFR nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. 2014012700 28800 7200 604800 3600 nlnetlabs.nl. 10200 IN RRSIG SOA 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. z81z7PPit6pgaFcYldyq30nO5eYlnaENnlmqX/6U05b5bf09yGAGqS6j s1Ag3Iumw58jbrI7s6KkJQIPV6UcT4VqO/gWaU8X4IR2SdgUFdUUNIG4 EXXzGHCKkb99WZ3rR3otxJZgRTRugSkJQgTL9FJ84F9ha2FkLAvaqtEC Czw= nlnetlabs.nl. 10200 IN RRSIG A 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. iceGgsBJjPFycXF8Fm+m6QDIn3UZsoPlbYJBxzU9ZEAxR3PQQjt3d79d pVWWzQMv7SMutXy49Klnzpw6j81eUIuZHJT2ApfioiX+Bvk7GdWonDFE sw+oNOTscWtBXXSSSy4r1e71lgLI1+MlH29eGq4MmyB9SLkKjiBWHsxa 5UA= nlnetlabs.nl. 10200 IN RRSIG NS 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. KuuCYWp33WOv/Fg9LlYF6P3i/fL0bft5+7cmWCxBY0APHGpGuYKPIBLS YatFwaXaJgpLcS26QrvXYB9DZ83VisIh6VLG3mGb6swqCbYcFjrJxIYI QqyEcVYXyc9taQSQ+SNAGGQMI/QUNxqAV1puheQa8je5kMyWMQ9ocwB1 Fq4= nlnetlabs.nl. 10200 IN RRSIG MX 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. lm9e4WQ9D8LhW5zztDidDojm/l1om2Js5zxbbYRNj8ahv3l/CL3D++G8 VPXClUcfgG7+1cMi0g/A4FqjdYhUfTs+xbKAwDzClP0Rf+zeWtmFfv9g r/pSYkNOjWbilc7dfRJE7Fvl44ZgHDGdN62jwOIj/PZf0gTJx8qBuuzF yi8= nlnetlabs.nl. 10200 IN RRSIG TXT 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. a3jSnx9orDKthgWxChyHIDl7nKPDwYehUVprMs5FixDO5gfOcqGmEmP0 KtR5ZZiHD6x8nKvqc1v9ZCfylGRHZ/uYmYdwHOiQFBxq5hp9hZlqaXBZ t1uBHIFf94aMW3PGoM7d7HRvmyKtIGITV4pqGHci9j4zJAGxgiIwcDPo Z9A= nlnetlabs.nl. 10200 IN RRSIG AAAA 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. nwt48vYDhpR5z40xzpcAslfxqYV39AufnwKU89rlzcn5nzwaCJJBuund fVgZqYiQHrXGWx4Y6Or2nqEEPHn9He3jU7djicaBRo6jwe5JeX0ewIx1 5/9h3+dPvev5THAtVzbCmGYVLu0LwI6CT6mMD1ZTjECCvCRWkRaEDzwV rVo= nlnetlabs.nl. 600 IN RRSIG NAPTR 8 2 600 20140224111604 20140127111604 42393 nlnetlabs.nl. Ka/p8xBNKuIwexjOG1zlgWu6Rty9vsjDnPJb+0y3/Q4dx2bRu1aiNPFP aPojxnJlE8//owk8pRqDe+VKP4wK7h6av8ZcxKWiiwDn0ld6uAOFpMJI Y+QrrXpEGEMyng6QexFRslYNXQuiFFQgNtf55SBZI5FKVTD24FVdRSj0 6aA= nlnetlabs.nl. 3600 IN RRSIG DNSKEY 8 2 3600 20140224111604 20140127111604 50602 nlnetlabs.nl. rMW19mo8K8wnNZNa6D80mPUf+42EMkKOzS9FSqYRv/ETwXA4tjtQs+YL MHqqc2vGA2y2VLY+5ALysmok969JZ3II15fSXluwzZ0jwoolXIDc6P9F ubXc9DdJtiSRfkVKcWx0P48Z4XPGrb0yQ14OHXscSpfWQ7JTU+V65dyC Ot2mWarz2vE0+UE0VZlBHtU6UNtN2ly/ah20gKtaqPGQjj5oClLNzZab s4A8l+k6s6HjIxUHmcEbS3k0C+KQnCoh6WO8/EyaOf/OTQO4UptFLZj1 KxGsdqkRKJyi9Xy68FPvj8b7AOZHl7Cf/Momro5LqIa9tZpPB6HX7oA9 7QCRWw== nlnetlabs.nl. 10200 IN RRSIG SPF 8 2 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. g44upu2vLUXZKlrWYNh7mRgzIm8gUzkdFGs/PY/aE0CIunTzDVHfmkIo Rdlzg887laCkNI0ywwQ5ZAv4mcLlyIP3GsQketlaIaNrOHXs/ZpL21DW ZMdfcZfTU8tIhkglSdWjdlrfMZ1sr3F5cKVQFjpx52AB8gHOhXAHtKW0 +fc= nlnetlabs.nl. 3600 IN RRSIG NSEC 8 2 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. aKG729o3ZpkXv2+3o2MG2MOiRI1rG4NGUyOnMISdiKxqyBPqKCe5Vw7c YjvFRpDn6mnp7DGIwtBDCLezX6awNeOdqRrHQqpUw+B29wAqxgEZL+dg Mr/d2qi/htsXb8w56rGYC1iHPfrGTVVJysFKhW5ZghsJT8RIfSugjdV6 EMg= nlnetlabs.nl. 10200 IN A 213.154.224.1 nlnetlabs.nl. 10200 IN NS open.nlnetlabs.nl. nlnetlabs.nl. 10200 IN NS mcvax.nlnet.nl. nlnetlabs.nl. 10200 IN NS ns-ext1.sidn.nl. nlnetlabs.nl. 10200 IN MX 50 open.nlnetlabs.nl. nlnetlabs.nl. 10200 IN MX 90 mcvax.nlnet.nl. nlnetlabs.nl. 10200 IN TXT "Stichting NLnet Labs zone" nlnetlabs.nl. 10200 IN TXT "v=spf1 ip4:213.154.224.0/24 ip6:2001:7b8:206:1::0/64" nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 nlnetlabs.nl. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.nlnetlabs.nl. nlnetlabs.nl. 3600 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD 0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3c RCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcj Y6RyVweh nlnetlabs.nl. 3600 IN DNSKEY 257 3 8 AwEAAbwL6LuXTLXtb23CsXhpkxxyGbEFUROh/L8BWA1EEF8LdQ4Rmsj4 D5D8uAnRFDkNhM6XiII9xcsavwBGNwHxzUaij4MZQu1vrzcfGIJLcC1Q paZmSH9WqIYFQci+T4s4UfDrrS96wO/H0nJvFmavWVX/7p1Q6dv0Arwz XMXaHGrRVdEgK2MDS3dFRngx5JC5fwD7YnwH08EAoFRjdAoXe+etOAeG aOT9IGjVM5LKkN2k6fIRvZ2l9eu5/o+h5L+kpDRcapW2QiL21hCcmwpW 50Llfx9Ovk+M7TBjp4iT7Tc8gLzRZr24LmXEyABb54WW3aoF5k8DZPot 9ogUjxVN/dM= nlnetlabs.nl. 10200 IN SPF "v=spf1 ip4:213.154.224.0/24 ip6:2001:7b8:206:1::0/64" nlnetlabs.nl. 3600 IN NSEC 6gate2.nlnetlabs.nl. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY SPF 6gate2.nlnetlabs.nl. 10200 IN A 213.154.224.51 6gate2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. uNwxoQk9cdAKx7acXoEAXHxJN/7U7Bf94w95fCn2Q1ti5WIb9JEBZJD6 cT1uQqieISZgKOae1ZYutPwlpGg/nf9aHWh0pflthu32jI3YTHGqRP/w fGRPC9g9uqjtV7OytiZ7eqxpZjMNlh22hATMGVaQXCtA8ZcHbkJlM5W7 WAc= 6gate2.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. cvQXNLQm6XxspiNz1synVEsxmYtN7q+vc9Kgtdwwvh1x/1OJQR0QBwjT Ksj6/K5/17PWeF0wAtEMyAsTLHEu9Cn3xZEJTOqfhDGPUK1iRBUDlvRM ZGoKftGrqYXM6g8GiD4oCsmsJVnoA/BGgNEV5uvHTm0KXhTUWv0A5zMQ 93U= 6gate2.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. hn+aIqKcQOCm6dYXKGnaWYnbotB2mcb6kCAhfSJmw2F4o/CoWzULOAsv gEwkRj+P1QyKfhTwOVar7MvlCVeFL/h8JRmOgLO7c9CqCQVJIIthGJ/2 7vvOsMRRnKSha0utGUX5iyonNJ3HgngjVDWcF4xdRvDfIdS08IHsZso6 P1M= 6gate2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. OmoMsW3m1w9HW0XM1cqwiGgp0y0uupOGC0YEdKWqExWVfnA6SMYjZFQZ 0oJA+ik2tTNcfwx4yWlj+8+Q1EEVBQAfsycKUqsqe58t7Qyf/pCz2eG0 KTIekJKJLtN08Q0ZSJkdMlw0QkRza3XK43zFMNys8R/1xfwLtjnA8At+ GCo= 6gate2.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::51 6gate2.nlnetlabs.nl. 10200 IN SSHFP 1 1 E3397141AE97D1D685F2BD9130EC1A06434533FD 6gate2.nlnetlabs.nl. 10200 IN SSHFP 2 1 4FAA8F69C8CB5DFAA8BE9D1D197C01984DDED163 6gate2.nlnetlabs.nl. 3600 IN NSEC bgp.6gate2.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC bgp.6gate2.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1::13 bgp.6gate2.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. zMmJEfdPvv5aGzFrz7cRAro3LKBT+2+sO7ax6TgCVeEwtRMKORs1K35P zq9wH1MbyQbx+WT3en5zkIFitZo20MRKClLu6Kb9ShRckmrr0WYpwS8z 7zc89Xn7g8cXHuctXxRXGNXRmC5QpgmMjkNxRoj7kHKc6X1TrBJ5j6ch uYE= bgp.6gate2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. zR0cqysJA0rnVKKG7DHEFYt5iKeG5jO+hzKNm3rpCoBFwiUvQdACVF+I cKJZ2NvyrM5viO6NP53Gpk5Yy24/WYD2ZZGHw19O4nw16iYQb1rHOtz+ ja1SxVXRwhbwiU0QlDgP+MdD7GZw4jqBtk+n/6MkUG+xcb3vOLGWs0QM Jj8= bgp.6gate2.nlnetlabs.nl. 3600 IN NSEC ring.6gate2.nlnetlabs.nl. AAAA RRSIG NSEC ring.6gate2.nlnetlabs.nl. 10200 IN AAAA 2001:67c:14c0::1 ring.6gate2.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. MuY3USdFrwWic197i4mROuc81P4ZXDyO9pxOptURJXFOFKE9C8OfvRz5 lrATNdUPUzJLAcvTKWk+J2TDlTOzsQ9b5KskIIHz13yEyL+U8raJAVRx lVmpwOqq0VuT1RzxX+ScX2hxNsxsiXz6lEvPYLouaNNcS69Sbkk8cyuU G1A= ring.6gate2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. FyRiYBvIX0mxv6c696lTlGBlbD6AEHhsIEGjPqnrRJ99STI7PLbnIlYk cRNZW9AOFXW/ORYzTNwgpWUsG81FlsnXtBcIqlxEIiUxtIQkvfpU9OJs LjtEdWQtQXRrTyzaLV/jlyozW0BBrXPY2ejDu6B6aMy4udrZJOBjCL7r vSg= ring.6gate2.nlnetlabs.nl. 3600 IN NSEC 6only.nlnetlabs.nl. AAAA RRSIG NSEC 6only.nlnetlabs.nl. 10200 IN MX 10 mail.6only.nlnetlabs.nl. 6only.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. 0+ZgvFJIGHSxxCTrmbXAO8CZ9UkC3LAQ93SlN3vgoDU2lPJngX0fVyKW A+D/e4rZbglpIiI0nmnUF3wPEFadPn75BjABBk6c+iFfeyF/TjxJvqKw 0Gg2n/68nj2gIZW8bhH619XGnpplC1n7hJpBe2gOScowOvk3cvA0vUad 418= 6only.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. IqdajykUQQeSGZN0FqN2cWWXqRsY7tLIyUC0e+lMeycdf9gO0Ri64lJP L12vXWn73yYPnSLx/NN/yVAywQ6bm7iTY9ujJmBbyvhTXahp1eubb/4V A7/U42FJXj5cGuz0HuasiOl8LdoPzW46H9yWL6zWf+Z7IPxy5xpCZLG0 trk= 6only.nlnetlabs.nl. 3600 IN NSEC mail.6only.nlnetlabs.nl. MX RRSIG NSEC mail.6only.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 mail.6only.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. r+XJhCXz+4uiojObijxXTHs367JSmCqG2Ikje/l5MdQ501AOuu205z10 pq18bTO2OdTez6DfmwViUqeqovJsUXFN0OURAUPyVM4NH/LaniKncILW e0YnpzUYdjFKMJRJUzxleZmFyRDcdHGISd97qBPrSYv4HFEjkzU4Vt41 4/w= mail.6only.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. ZpSkhWOTiME5cSkGNDahWpEZe42MgwPKlqsgF2GnaU4+wFgCqNA+mae6 jnFiTTKrT1pbgQ8XeKBdT8kcJWvJ21Pa8Qbm6LuonkV/6fz9W+IU90ba U8v3YrpIuVpQd1Bd+YwsXu88qFHh7GMl+S227ZqaGga+AkYvdxfXKViJ 6qw= mail.6only.nlnetlabs.nl. 3600 IN NSEC 0.1.1._dane.nlnetlabs.nl. AAAA RRSIG NSEC 0.1.1._dane.nlnetlabs.nl. 10200 IN TLSA 0 1 1 6F2851409D710504A35115ABCB9A6DD3F2577EC937C9EF1938926FA8 2FD6FF5D 0.1.1._dane.nlnetlabs.nl. 10200 IN RRSIG TLSA 8 6 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. AzCKaFiwAB8WF5RValBfgGFAIXTSCR0Gqn2rkc1j4QxvECSoSyTqvuNc f5wyp5QbpYtktWEt6DKAj8MkGMuJS8dbDSrbduTbXMhtzAvtmErIGKOo HvBVVKUuFaNoOlV2qq8wT2XjrFV/s0UnojWSyAf6AX3z8KLNJbCaBkT7 76M= 0.1.1._dane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 6 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. PgKqk0R9rAdCM6mXb2zrumcsPoqoVaTbghl6qzTYI2f9Kog4X2JOnZCW DA+CSzFLVEVfA9Hc+PRu+NxPumfThvVw0KFMtk40UekWUyk+vsSsjKaR Bns9BRuAiIBuQaUCkAUCD8vtjOMW++Gqi4W5D6p/t11T0heV3l08qzJJ eR0= 0.1.1._dane.nlnetlabs.nl. 3600 IN NSEC 1.1.1._dane.nlnetlabs.nl. RRSIG NSEC TLSA 1.1.1._dane.nlnetlabs.nl. 10200 IN TLSA 1 1 1 0D1FCBD71686199607A132744A4918FC209565C91FA8E9FFEEA0AAFD 6B9305F6 1.1.1._dane.nlnetlabs.nl. 10200 IN RRSIG TLSA 8 6 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. FVjFlfzMwPC9TIe2kkdHMYuND4fT51+nlu6kX24Vn3d4pQ1u36feI1Qx cuk1Td0Evsp22cqQgsXeBFmb/IzNvWGZqfvt9pU3uZjOr3o1Ri5n1ea/ ay0V527FjuI0mMTFa3Mu6bgumhGfBKGjZce3bbBuVcLbfvDQwp6PK7mz QC0= 1.1.1._dane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 6 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. vnubMK6Q4l60zgt+E9oB+6MpAHlEAoQLMNznCVPpXotuAfCsPkShqPzL wtENE0TQ6yddgjmPXMlxG6eeXDdFylxG7gIVkA0D5Ri5luJXjdqqcF1N CTFm8/Rx1GR20/LPbqyMtB2l3O4cFQ8SdK42MsfK2pYk1C8tuyvyUL1c Y4E= 1.1.1._dane.nlnetlabs.nl. 3600 IN NSEC 3.1.1._dane.nlnetlabs.nl. RRSIG NSEC TLSA 3.1.1._dane.nlnetlabs.nl. 10200 IN TLSA 3 1 1 0D1FCBD71686199607A132744A4918FC209565C91FA8E9FFEEA0AAFD 6B9305F6 3.1.1._dane.nlnetlabs.nl. 10200 IN RRSIG TLSA 8 6 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. FIXBkm3grEqjaQ2wKx+63Q1W+h03pvKhkpcgLXk1Xw+rs5MVLwMhmC18 kIOaYO+l7L88a4yVFwXSqBscWwcflz3XIfrfZ5pXF4CugHnao2Q8P7Xa 6XaTsWbtPQcUOyASbyvOFWp3Gq292S8GXc/tYQmP15PPSRfBz5FsBw1c 05I= 3.1.1._dane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 6 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. EDUU5j/Kqre/eBzSdI3mnS4f+1YUNdJeEBGG0jfev+Dsp/7A9J+lPk7f l1oqe8irJBQWu1+WNvueRK9RWoSgIYb6O5c8SyoxsP6X9Z3jFEbQSFaM KJR6LjUK+39vDuQIA0PKlsafP1mVna3OqkRkcgnwWHRK9G5P3foTWpEY wbo= 3.1.1._dane.nlnetlabs.nl. 3600 IN NSEC _dmarc.nlnetlabs.nl. RRSIG NSEC TLSA _dmarc.nlnetlabs.nl. 10200 IN TXT "v=DMARC1\; p=none\; sp=none\; " "" "rua=mailto:dmarc-feedback@nlnetlabs.nl" _dmarc.nlnetlabs.nl. 10200 IN RRSIG TXT 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. PjbppgbGt74xS2QkpBP+eHPK9J29LgGh67yBB1bfmvhEWnS74xYWLSl8 t8Uz1qNk2WvCOEuEXULFVOKcdNIA0C5vQS8tKSzVN776jiVr57oBTv8k EjLxG/X/iBmqXwo5Ad6ApgHeZ582AUbFmyR1a25uB+/9Qw9odwbWdeq1 g2I= _dmarc.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. t3f/trMona073ogg+sLk7Q0UBguMe9umhQHa+8+z3wI8maZB2qUCxSP2 dH3/aVIXyF9UeqazAl/njf7vFewoORQjvKTdK5A6cU+G099cRjQeUjoL yO81s3GcuvtsrbeiHU8BedxzM//HSSYYdApiPdincI1E/JYZRV7fNgML fss= _dmarc.nlnetlabs.nl. 3600 IN NSEC default._domainkey.nlnetlabs.nl. TXT RRSIG NSEC default._domainkey.nlnetlabs.nl. 10200 IN TXT "v=DKIM1\; r=postmaster\; g=*\; k=rsa\; t=y\;" "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOBxkIlNsk1fVhUO8fZs6qJV6/ZFEsltVIuTHDUn1dQXOSqo04SCOXiuRgsFzxKKAOqZKksjEdxzcGI7UIakfyzHEeoAeeJCrIQoY3NcTOm6Z4ak5X24X8dPIi2075YwFAHiwELthtgwtrvUpWr6U0KBmEeXtyQ4nk++HR2asJIQIDAQAB" default._domainkey.nlnetlabs.nl. 10200 IN RRSIG TXT 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. nnh6FfDhwoEYAm5f9b5eVtHl14q8EBb+EGmiZxBBUQV49xLjIouSeFBj VTjJDu6ZvrhnxR6aTDR1GGOhKraER7dkTwdN6SGSQtMoERb2DRTGL97t oAlaWtYSl4yE1YCPMaj/tixDr32EKVtbiC8nzPrDIg3wd2ma/+LTCL5x s38= default._domainkey.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. EM/ezGvvVPrjwNM4I3OECTqkG6KX34u9ZNKQtiCdDDCo6mjvGLEAYzla sSsEFxLy4tPBQNJ2J/iRTzItNKJbip5f7rvagfoKXJbcHVopH7eh9njB dLWvTrFqUpurPoyjU2jwCic57dZfSn0n/1P8bF8t5MeceXrKh65HEIXn BQI= default._domainkey.nlnetlabs.nl. 3600 IN NSEC sleutel._domainkey.nlnetlabs.nl. TXT RRSIG NSEC sleutel._domainkey.nlnetlabs.nl. 10200 IN TXT "v=DKIM1\; r=postmaster\; g=*\; k=rsa\; t=y\; " "" "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy" "" "elut8mTa/rChg/i3wKXtQeB/x75SeuW3enXBk9h2Fb" "" "bRSHqU5+MwKv+joaXNgVIKJOwHEM9awaF6+Iu7hvOc" "" "ZKBenZaYrjRALuvblS61qe8ciBC50Vq+Ns8XuA3gmM" "" "UsZAtHXTUwlDfGf4YQwCrgSLbJnzHFO0JHShoDyCB8" "" "RQIDAQAB" sleutel._domainkey.nlnetlabs.nl. 10200 IN RRSIG TXT 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. zXL2UVNhhUWua7q+yXiZARUG5kkonsT3RkLpr0XwUt+bKs591Dvunpg9 Gzfl37i0l4fg5bxNOHANE01V2dxqnS/hNBA9aUWXVpV4kApTsErxDzUv RdzbJ8V058LwOg7punHHREbxxWJOiisf6akayZxkh5Fz7UbiY6js3980 BEc= sleutel._domainkey.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. DYjgoV7QdQGW/rwbNKquyLbD56wP5a8XfuYNXrufZO7uvZQ9h6wIuA9/ AXQ+aBrUFvDixAEdbuBtYGCou37/FXLY567wa9r8JUcqZBPI0WPu61fC 6q24pK8vifqsdphwohHndN/zMGELuAmihQiDP4i0w65NY4w2MgQHcVl5 E6E= sleutel._domainkey.nlnetlabs.nl. 3600 IN NSEC olaf._pka.nlnetlabs.nl. TXT RRSIG NSEC olaf._pka.nlnetlabs.nl. 1500 IN TXT "v=pkal\;fpr=6FE7336E897BAD4826AA4260B4DFDC6B76092287\;uri=http://www.nlnetlabs.nl/~olaf/kolkman.pgp.pub.asc" olaf._pka.nlnetlabs.nl. 1500 IN RRSIG TXT 8 4 1500 20140224111604 20140127111604 42393 nlnetlabs.nl. Dj25rAVc7JtVXwV6cSttKYzwlDV1L3csC1zi7kQ9igcaIZ9pDD0gKZ8J eeTw8ofQEU4GQqfYFmiEbAS+2Dv9WuYNbLkoggQFut0fzWNCgEnbYbAx B2uDuETQmHuB2osRuw7RG47TqPXr9y5hORSGuprtGCWkaYzccG8aAWV8 tkM= olaf._pka.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. nK+bycdNp05zg1EdD6U/9Eby3T9D3/lHbDAGbEwLWqyMQqm2QeV7CXnA Dhp1XBMATMREasupxzStl8IefDgb78vxlhV5WBLNH9OCrFZE3/oeeshU dffVjj4YuIBvtMIXlFhUoHVIL0VxXL71m6Taxzp4u6SUsQUhZQWU5fxj YI8= olaf._pka.nlnetlabs.nl. 3600 IN NSEC willem._pka.nlnetlabs.nl. TXT RRSIG NSEC willem._pka.nlnetlabs.nl. 1500 IN TXT "v=pkal\;fpr=DC34EE5DB2417BCC151E5100E5F8F8212F77A498\;uri=http://www.nlnetlabs.nl/~willem/toorop.pgp.pub.asc" willem._pka.nlnetlabs.nl. 1500 IN RRSIG TXT 8 4 1500 20140224111604 20140127111604 42393 nlnetlabs.nl. Nq+yESvizbiCL9cAPctT6VUPsry8F0CSe4i/Lumet2cotuDQFO3m8Yev YvCzFqV9BYspWH1jhq31YazFTTBSLHgNbS9idm6Wfa5jaOY1fnq3pfjH kLIMLTW6ucHFg2T3UsKzFqQTdkXc4J4aDonmd8joc3KPMPg6ek4j+SC6 LEk= willem._pka.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. VQXttaNzBvaSsFZVhebwP7dumBY50hboUqonsJvRwdSNnkAvhCeh+hHw 10pY/2ptC8AXoPw+xoKTe3Nxs688Kwv9gp0XvAUplpwJ7GCnzb+cHTy7 k3TfJWq+sseszL39bVrN0QqTRNge+Jb94iJrvEWQdXYHA2dmcuL/QpOO y7I= willem._pka.nlnetlabs.nl. 3600 IN NSEC _25._tcp.nlnetlabs.nl. TXT RRSIG NSEC _25._tcp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _25._tcp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. B4+eMWzpPoJB+2l6sbmWEkveSSAwTU1l0qokjwo6UegZjoFLSF8x87T/ DYBrwZHlEos7NaJzCxKM7A3XfTirRfoBMy/jyKoDt/TrwD6m5xStqrjP lR4V13v3C9d8Lhw115YzSe07Fdxlk3xutMxXgW55jd7/EiLZjf8aHHud pPQ= _25._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. SBxGMjv9lWi9S3nWqHbr7k6cuWuyVQ+e1YDo0m/FUGb9mzvoZ93ox2SN zPBPDwH51vBfW6iZVckIdyALd+eAHyfKbvzCh/e9K6160Na+j/gd37gc 7Z1Ds3xxXaLBNSi0hKt13SvKQ3y5dZvLiV3OlTpqo91cvU0gnhIslYlG TkA= _25._tcp.nlnetlabs.nl. 3600 IN NSEC _443._tcp.nlnetlabs.nl. CNAME RRSIG NSEC _443._tcp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _443._tcp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. sLLZ0Lybzjj8qFznZG6crXdhWHPVPT3ydzWhnDM1F+QBroTe9FlE7jKg nE6eAM0tkpVcWTTXZ12p4pqApuVUXcnGI7iysCV5DCjxOcUoxNfjwpbI gL9YlzIBX2Uupzwz38BX96JUPc1VWcG2lTW9mcTIfQRWpDOuHRDkIe90 l94= _443._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. V66uAr3ewOJJksnH0nKRkrYv4ljQP1hEu86BLIWWbNT4COuU1Ih4o3Yb YC9hsxpOQrSPrUjLsc5SPCOFxrgK71TSBrkiJwVMVhlwiYxoiSIVvP5J DloAdr9siMIpr0Q0vL+FXsXQC1Bt711y0Ll71UBcbqqbO4twTAY4Sxnz 6+s= _443._tcp.nlnetlabs.nl. 3600 IN NSEC _caldav._tcp.nlnetlabs.nl. CNAME RRSIG NSEC _caldav._tcp.nlnetlabs.nl. 10200 IN SRV 0 0 8008 ical.nlnetlabs.nl. _caldav._tcp.nlnetlabs.nl. 10200 IN RRSIG SRV 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. OZ/lvd8G9pu8ft+DPki2jExy50DCJl2R8RHpPMCem2CIw8L4Ya/Ig2Mn GHbQMGjdhYLvMg8PfnuA9FmX/F3oFPS7mSY1+b0dirNaQjoyMpNkYGfp pfWwJZxs9n6Mu9C7Wvxju68yHD7TsnAMJscY1AgljEYK2l6izG6OC2Rt l6I= _caldav._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. NiUTTSlKA2iZeDtLdGFH8JDBozTs3bT4zaFyvp4X+O8fkT3c4PxALN1b rtej6gLGeMfJc1lBpfQkIzSEbJvPIZLMWNIdXoHmTvgF7fwC8YLJelyW wLkYFpLA0fSpx+w295bduED1oPp1P8BJaUNVRHd0hQoZHG3hbY3pi2Nn v+s= _caldav._tcp.nlnetlabs.nl. 3600 IN NSEC _caldavs._tcp.nlnetlabs.nl. SRV RRSIG NSEC _caldavs._tcp.nlnetlabs.nl. 10200 IN SRV 0 0 8443 ical.nlnetlabs.nl. _caldavs._tcp.nlnetlabs.nl. 10200 IN RRSIG SRV 8 4 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. lvh/iKbpOOVeYI2UhI80DHYuWMVwHWbLFuFtHzeEKOd7MBxY25q49mWF Yzj8RK10C46YGeHTszqXKQpOcHNr1eB6qYbu6JFVQCOa+dir0I6td+yh Db49l6/5Y53+KMLJfc1B1p1hMiJsAk3leOG4eHTZe209KRreSF9frweP HHI= _caldavs._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. ZbPrNbNAs2nzNkKTjc6gjH3udbSgTSd1L27Sm2r4VgDySF4+Q9BMmJGv XjBb2mmjorynDD2mCg5q/Ej/MraHCO5pkQIxCTMwolt7p2SbLCkEjfvG sfbMCeE4b2Cfvv4QdMSvmEsnMOpg4glFADftTjn87ipBHHPkRscUp/6Z 9pg= _caldavs._tcp.nlnetlabs.nl. 3600 IN NSEC _jabber._tcp.nlnetlabs.nl. SRV RRSIG NSEC _jabber._tcp.nlnetlabs.nl. 600 IN SRV 5 0 5269 open.nlnetlabs.nl. _jabber._tcp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. K7glashfD/4qaarHN4gbuE7CtML2u8qfz5OTvsz32Ge9a6MbF3+ulKks k517H1MCIC6jpIGFyaGbxIq6mWcPrjzZ+Z19iETlhohkhur5lPdPfWyT 4KnAglExKiDRGnrjttEuCzvsPp7/MW0MvV7sT1Gna4FqQDV586YAublL R6s= _jabber._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. CFGpdsJ4QngxoyWl8BB8MjZKMe6ImHCdGO5pt8UAWPzx0K4I2ssU/Fih i4Mt1ghC3YPr/nVSzkOhxT63IVyXqHuJYynDpQoUvPEcTBa2IM55g0l5 qrTEr+2KaC9dczHt9xP/FzuyBgy78gV6t9mz4+orCu2DcZgaLifXY0iM gV0= _jabber._tcp.nlnetlabs.nl. 3600 IN NSEC _xmpp-client._tcp.nlnetlabs.nl. SRV RRSIG NSEC _xmpp-client._tcp.nlnetlabs.nl. 600 IN SRV 5 0 5222 open.nlnetlabs.nl. _xmpp-client._tcp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. SZIDj24vcm7RmR15HsBAmRBkk0R3LRAhkgSHtLBe/aMBSWvE2OwA+z8E 15Ap5HnwnfezlvLa2PqJ0WZeih3GtXt/45SyKcrytsQo+w+ZnR4Girt2 FMoH8/BsT903mBI3gMBEF+BlOA+Wa8WnadhdXhoDiLMsEygvHSJvUWCa xvU= _xmpp-client._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. yjZ2yamuUx5OJ4bnTQJ9SToxMUSYcq5oNuSAAJ/MQIWfby8DsLGgLz4O Uip58KcrJqSPObVXmivNTcFw5LI7ADSIPxvmLGex27Sv7JwaSxL+nb+Q tWHhNriur+f6B2VNIyncyTm0sWJ3kdt+mOzeP17fsLmm4Aj9kka5C1gh ZCM= _xmpp-client._tcp.nlnetlabs.nl. 3600 IN NSEC _xmpp-server._tcp.nlnetlabs.nl. SRV RRSIG NSEC _xmpp-server._tcp.nlnetlabs.nl. 600 IN SRV 5 0 5269 open.nlnetlabs.nl. _xmpp-server._tcp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. ieSm+LDFgFaWQDR8bnXfO25/09vEQLfdNTCxTIUsnr+9JAV2WPtx/vt3 65A3kBdegN/QnPly6/7Js4nxHq2CEkxCO1TTz/Q892SVjj5EHJx1bt26 Gex0qmPVz+lAc9c6hBDZx6hlOnOg8GtWC46svhaQTLiUh92Vx+S47Wjn MZY= _xmpp-server._tcp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. DIwmEXmK4N3P3LX7x7ZVQJKiMy9O/QApYRwbv2Gk/aH2vboZYm0FLWL1 myWtUQA0E2m9pKLtJvX5sbfjjHqjgnxLrMkYLsFJZYT0Ed+7di6+iQFW haXBVcVLRCxvNDwJFXxLPXRCwpY9nZYUwj1OGZ4/oz1CQ/1IhfTDyrj9 F5g= _xmpp-server._tcp.nlnetlabs.nl. 3600 IN NSEC _sip._udp.nlnetlabs.nl. SRV RRSIG NSEC _sip._udp.nlnetlabs.nl. 600 IN SRV 0 0 5060 obelisk.nlnetlabs.nl. _sip._udp.nlnetlabs.nl. 600 IN RRSIG SRV 8 4 600 20140224111604 20140127111604 42393 nlnetlabs.nl. TjdfpmCehoMhoxwdFmeMD2ROCmufh5IISxn0vosmJrwRoRICATE/U6fj Tej3B6joNriZFb6lKCfUIw+CF8jrXnevBXyQaAGYto/rEbpsN/bNOCqZ q4T+ilaSKtlxnCSdcRlEJ4twyZabmFjEsJmuhc7wjaqO6A6RYWkDG2rG pGg= _sip._udp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. dHbUdcoIgC8BhxBmbX8rNp0B6qql/Nk8y+q+gk/0IlISmpPwW2KmgXIV Zw4yuBx9wGkUAEJpC4FeJHwDwxzK0whwFmhp5RMk3jFPfyB20YmVU6hK N24VhbieMwOwplWypwgEv/5wBgEEShZa0pN/Fv1CQNiE5GGgOhygFZtn hDA= _sip._udp.nlnetlabs.nl. 3600 IN NSEC alcatraz.nlnetlabs.nl. SRV RRSIG NSEC alcatraz.nlnetlabs.nl. 10200 IN A 213.154.224.25 alcatraz.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. Y0yca0cmnNB2y4zz5RpramR7X/yumBZQ57sMdOMBgE5z4MU6UKzXefo1 vHkQ2TP5FEtchKyO5e/p7ahZcDV1PjyyE1ICydjZdkZ425zAYGmSBe5Z R87cMu1GD9ZJiM/Aa0vOWzZdsjFgqu2WlFDrM5+GY27zX+Zk/N+jhDzL 1wY= alcatraz.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. cb7xdlB+D1oOegdxGqOiCt1s4+6mOAc0jOuYxfU6LNNZIo02VXUj/I2p yWNEKBtmmC3AKCbJQinCPMP4cgmEgESeOzlkju9yTC+aR4L9iJUPqFYj eNCXNrUQx5/0to9DR6CghIAsJ5ke2hGYYRqmTgJwK9MPGb7glTOMpH1F 1Vo= alcatraz.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. N97ZgCNMIrjbVgT9l2kcy1cdNybLx38PvRx0wrUaWQxT8hid0td8atIQ GWHSDQdy+UJ3XhQHifN1l7nJ0m9JRQiTdqkmUw0KWw9c5ISsfTQXhld1 uwGZn68eJYcXtBOwZe1a4AOMlaEz1kLa3QLPikuen5cX5LGSfa98/ROq NyI= alcatraz.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. JQLCeaiV2tutfuNGsfTpz44WTPTvCFF32II1+kB6pFIH1YqYYL6JgBx8 pZGMBGx4yOMoyXxue/gPFV0uNfGQNMmhetfEtwJlsNTNnbcg1gLKNqzn S+eQyvi4mXZ53n7hKvKP1rSKvYVgzxk4xvfcPa6Gp8UWSQGtvuw067tB XFY= alcatraz.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21c:c0ff:fe3c:3d00 alcatraz.nlnetlabs.nl. 10200 IN SSHFP 1 1 B944A464623DFE578BE5351837E725E866671D47 alcatraz.nlnetlabs.nl. 10200 IN SSHFP 2 1 A0989A25D41E77D56E37FFC5DF1716CAB3B1A16B alcatraz.nlnetlabs.nl. 10200 IN SSHFP 3 1 C2511B00B3D725B8F2BCF27AF735C2946EAFD757 alcatraz.nlnetlabs.nl. 3600 IN NSEC alexia.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC alexia.nlnetlabs.nl. 10200 IN A 213.154.224.210 alexia.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. C7dGESr/jAOSVHFoguFl9uqWH6phi+GGyR9NO64LZhi9JPoPegVo6YHL YOUgCriJfPps0qnHfQlCXSLNFEOSgeB9P6VizBNmoedAQavc1SzknZGM txd8OmQyl4mngd9OazNu6HMh/X2oTEmr9fHZsPOBrxoXO2Nh9u/dgJbf s0A= alexia.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111604 20140127111604 42393 nlnetlabs.nl. aLvU/0B9gvJeBUS66BMxKTph9h8MDERxHTKPIWQT7lmAF99Yy8Ok361y gWLQ4LWR9Py5Z/J8DXDQpmnjp74IQHisTxE2WsMQzH/ZBGxQWIsqv69U lbmoPTbuiMLMk2Nj+Ic7NFS2rD21r0Ktl05uqdiB4+rw1xz10P9/bEOy pAM= alexia.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111604 20140127111604 42393 nlnetlabs.nl. LNP3jr9Kgqt4/FRuCNsK0fjBAvl2hNKiYrESNRcX9Rhteow7DKfQpKNm ogz3zABQEohh7N3fR8VBiX7kUwXLUaLJHkY0fKujYtVsuchTVyTD8U0g 6JaqzZ8VoVUrkFvnBq5y2JfnqtYX/JvRJY8J04bL0TyWpzEWgjshYswP EZk= alexia.nlnetlabs.nl. 10200 IN SSHFP 1 1 B91A18FE2C6E91D6C36E49C76913601F71E8D458 alexia.nlnetlabs.nl. 10200 IN SSHFP 1 2 58DD96744E805C4950B3C0817BBBE97A80AF42446EBD458B05F7F879 7FB8D806 alexia.nlnetlabs.nl. 10200 IN SSHFP 2 1 A89C7B38263F4186D8520C6C85237C38578D5441 alexia.nlnetlabs.nl. 10200 IN SSHFP 2 2 01907DB6FED4A633ED021B1A939D0387931C800BE4929887A4AA79FB E365E0AB alexia.nlnetlabs.nl. 3600 IN NSEC alpha.nlnetlabs.nl. A SSHFP RRSIG NSEC alpha.nlnetlabs.nl. 10200 IN A 213.154.224.59 alpha.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. cl1kcl31/OMwRfnoIYBF3VPXYP+ZHHnya6ILm82bPWBJk72m2le+ozEg p03hRAOSM+42Lyu6KyrYcm1DUiDqxc3SrTZgkybsBzPRHogFwVty1ZCb bF2aHB+zTFN21adciq+GOrh5GbP7nGTJ4qZ4MCpHgIPiD5SesY4ftNA6 HKE= alpha.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bxtLW7DZph7Ck69jJZq9UoKhn8Bk1OcjwW1qTxMVR+iTden1mTZm5Cef Qe+4T9NZkhR8NjTDso2MIPQNnxl1e5nbIvm/SPSA81u67ygsHmAOeEVh 2FcuCTkGREVtVm8BasrFV2KzNVGz0G4741eTKgPnB6ho0nTFfT1WZ29N BY4= alpha.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VtBYdDbarNqSD/o0U/nOXPjAsoEN67024+0A+GYy4zLuvY4HCtiOSLxe vry0sYt5uF7qauQg4vuPSCh0niLzWwkK4zBkyX18PSwzKHR22hWxlglW TDclXeoT5bNPqmt31AW6m1HPdZxNBw0rhyHwVII5zjsTfux5+nfYyqGB VZo= alpha.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T97o3q0OMy+j19ASHY/zxvq5LHhBJuTlHN2RMIaKXuGSuvUlbUWAdtZk 1hc1pWE1OtHai3dVXxTNvTJkBdSTzRyWuJb7tabf48mxs/A8pPs6Apsr nR0/BxIXPEzmciNtjAss/U5ntHyYPLkg7yqYrIuBzUZqfCjvAORIhTxE T4Y= alpha.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::7 alpha.nlnetlabs.nl. 10200 IN SSHFP 1 1 B64058566EF5987D784E3ECE10078FD47DFF77CB alpha.nlnetlabs.nl. 10200 IN SSHFP 2 1 4E8F99D5B341DBEBA0C8D620ED463C14A8026EDF alpha.nlnetlabs.nl. 10200 IN SSHFP 3 1 3544B26A0618AF50938755BAFDB9418F46B63578 alpha.nlnetlabs.nl. 3600 IN NSEC old.alpha.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC old.alpha.nlnetlabs.nl. 10200 IN A 213.154.224.142 old.alpha.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Lk9LqwwHLedDI06ZeDcwc+/JQw+2aXJ+jguZo6LKqNDN8iFnRiPDcAlq 6BzH8kiiUylP8Y9hw0m4Y9APsug1uPDKTfoUwcBhM+VvsBfJzc0DHMFm qzrI5w77+AFfP3wH3CYPBq6PXjinF8KfQ1DDA0J3U0rSxbI56+N5nxQv afY= old.alpha.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FUDI27svh5H6vAjpGtqshRUckujAl5vhXZsLwLSl7YZs9l3xvY1nYaTA +J3h4DVmZ28sVeja2VDCxH7994DDRu3+x7Hr0tWU56abB+lBE9JXl3wn 2JV2DBWOqo+hImxcl5e1uUQlT6ZdnunZsl8TaWAbP3TxBNldtSBN8VYB 6ws= old.alpha.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a8UgE6FOWFl216x3FtLdo86w7pX6ni6PUU9SKhF+UM6nImt507OXX+zp nfPF/KKl5uHesFQDYc6c+hFx8nBRUmgzcuME2mDPHcdTcwH2Lbhaa1QF F3Cgnj8mPXuJlxEjIQdWC4gauKATPK8UlUjx2cw6PU1JSOVB0Oy63N6M XUY= old.alpha.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jVHI4lefnBrAyjuBR5H2YLi0L9ov2/+Qm4fK4tm6YKzHKhZnQQ2vnxAv AN+pNpyEfuCsLtvALRvKc3P0Phebbpa/ecAcVFSvItlFY7LquYSa7IjC NhTQvW+mPr8LEdHqNoyCTcvRnbQiScP9O1MMBoCDsddCDPeucd98TcNx JdY= old.alpha.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:250:daff:fe3d:1d6 old.alpha.nlnetlabs.nl. 10200 IN SSHFP 1 1 B64058566EF5987D784E3ECE10078FD47DFF77CB old.alpha.nlnetlabs.nl. 10200 IN SSHFP 2 1 4E8F99D5B341DBEBA0C8D620ED463C14A8026EDF old.alpha.nlnetlabs.nl. 10200 IN SSHFP 3 1 3544B26A0618AF50938755BAFDB9418F46B63578 old.alpha.nlnetlabs.nl. 3600 IN NSEC amalia.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC amalia.nlnetlabs.nl. 10200 IN A 213.154.224.209 amalia.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. osk1W0kK+dXG1J0EbDVBWvDeqDTsRF2QmbeyEICA9YWITflyzxVdiX6r y1V5pcgLc0j72Sf5pVswwW58fjW4oeke+/oMpMIgu4Haw+8xVrbdhaRd 11dHjlC79XVqM4bUnpctMFBLH8fcvnBReu5cqZy0OQd8pexeXnmERlaJ aZg= amalia.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sc4Vc/L15BrGA+zSoEYcnMo4QBlUAv4l5yWHbUjuvMxZb/f73C2lYHeZ CL/+E5odinSIDaB8cmmnsHi3fBY8r57M1m11M4tbU1JVDWequmPkCZnF kpVkZzVnRTJXp/CSfKuSadfxNW8d8jgrhKL9iCl0BWAcBkp76Gk3yRfN 6pQ= amalia.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. JMWTCP45yxd+pJ3ai4LIEX1/CiY6qQuKvElKwdIMwHEZuhZTPz/2zRsZ ayJgJjZzhNTI9bswdKq+dUaJ5ziwAS8YsawO3arL/xKvCI9GDIqfD9sa lx+EFXNuA4BHw/+GhxKsqTOUo7VYkR3fwKv+8MxVQWBhlrNOG6JAYd9I FeQ= amalia.nlnetlabs.nl. 10200 IN SSHFP 1 1 24526B0DB9CD858285E297732E47586D0F0A894D amalia.nlnetlabs.nl. 10200 IN SSHFP 1 2 874F4343A9DAC9AEC8E17611B3424F08AE46274000D4AA03DECAF645 D0BF59D3 amalia.nlnetlabs.nl. 10200 IN SSHFP 2 1 36F26D5F0887C93B1C76626083CC3826EA929711 amalia.nlnetlabs.nl. 10200 IN SSHFP 2 2 A22D01A9B4920A8281F41D280B065B03DEDA6AFD268B6679D18F9D3E 40E27DF0 amalia.nlnetlabs.nl. 3600 IN NSEC apexonly.nlnetlabs.nl. A SSHFP RRSIG NSEC apexonly.nlnetlabs.nl. 10200 IN NS willemtoorop.friends.nlnetlabs.nl. apexonly.nlnetlabs.nl. 10200 IN DS 33735 8 2 8FA16EC68A557AC5808941EE9E9563C526B42DAC09262DDF1A7C7A81 051101C7 apexonly.nlnetlabs.nl. 10200 IN RRSIG DS 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hvczI3RkWQix2lpe6Ygb5d492DW0J6oLCb886DiRJhRlH+aONSq2o0Kz Uk/VL3xSwMjSV+wzWqT3OS5ym98WFUEnHEnqdfV5HoQDyciAzrotQeUE XqlqHm+jpINgg8buBE4jL6tMemRsHA3P52aZhMBwOV/a9alfNiwABCIb vco= apexonly.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fOX9asNZ2NUSEX9JCrETYmFNqp95VKQPGfocmtHDIGXHACepfFbsUR+b LgBQeHaDuXktq0k8ydk92karLpO9NRRFLiYDEbW0zJBCh+GIPNz8PXK7 A7ddmFYEC+bKSH/rMWttdOCTi1zetpWSRSbfwm1Q+3+M2adXl8Rf3hOs 5b0= apexonly.nlnetlabs.nl. 3600 IN NSEC area51.nlnetlabs.nl. NS DS RRSIG NSEC area51.nlnetlabs.nl. 10200 IN A 213.154.224.107 area51.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IYFvACLA5GdQPzIH3JRQQRpMie4C5WoGaIqnMC7InC6Kg/jCMXdFayXI NrD0TZr6STv3Upc7zlEtQ3JjzFV+JUhi6gDEAMIKDNC5dxvctbTG8csP RF1JEOqBSNM4VVvTyjYxJiUYDEB+gd/aiur0Iac2H+5Q1vngB6gn4s7V jSw= area51.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ySw4SCTJOcXcb1kYtHamY/NKmRjK/oI65j9RNJegiQ50lkY17EGNslbh 8ofGzOn0GaMr0MZ+FPH+BoaSDJmWzGcZ1HPjfk/x38E/gMSx1r+th7N0 4pPeZ/7odkKgEPlf2JaER/2gutlUrXH48InD6QPDFoP3ubgE3oPMi1bo 2eo= area51.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. PxQIZc/JWvxxyS50DMezk+15mKSakNGXz8BgFx3KKGDiNAoG+nWyQbve A2gMIm/LRtkJ7l+hsZP0uZCUQXpgwdVgCRQL24lGBQd3sIF8FKWNris6 uEwKL5cVyewymvnDiZeTTNcEt0PF7lurJNByn5rnHoRxk4ZFuBiU9kAJ mDU= area51.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T0CK87aof0oWmzaycggpkkX7jk3lHZhop5AtvgN5OnWvXNjp8Uh00y9n 5QjCKMP9vRxrbWSHIInbv2ywg3ximJe8qTAj6xZ/B2fOF2Y/bSOschde Ie8nCMbnlJ6GtUZSIBTDgE8Lf2Yg7cvwQNmlQabkd3truQvDt7Zd1Zq6 9TA= area51.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:dad3:85ff:fee1:f7d0 area51.nlnetlabs.nl. 10200 IN SSHFP 1 1 2979793C1D7AB8B8228C1FEF0F916E9E3AF33E2A area51.nlnetlabs.nl. 10200 IN SSHFP 2 1 BDEB0D0A01B28A188EE1DB6F09942FF4F1A6B785 area51.nlnetlabs.nl. 3600 IN NSEC ariane.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC ariane.nlnetlabs.nl. 10200 IN A 213.154.224.211 ariane.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Dxk7a/d9FbrpHbdTlZQyECJaTr9UhmofBZ+sHyE62xpwumv4VmnBZk4J s7YGSSRaII/MoR1Wz3on+rYVrKivSajFsVZvMdEHrEUGFs2A32Qcxebg Q6Vb7Xnwkuyk/poqp9yALDbyyi/ZrSjVrbYhPqjQEbktAcVmaUi9B0F+ xfM= ariane.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. p5a+ej9k4lcvTv1CqpL/hHilc6m8OwfcL4WqQCHoI94NLP7eVFl8SDCf WlxvR2VFHnR2sMvndrkai0sg5wbtHyvGd3IsEe4UG0I2L7HGt1zaEDV6 smDBtXibhi77cYJa6q5XDYXFaFxTqp4Q8Hapc/w6J3C4WCZbWxmj+IMr J9k= ariane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kmI7KT7QxM8UETBfbpcUG+eMKeJmS4jUeRMMadZEV7onI/AobRpPLRf7 z44cPcnxqq3UdMurpiKLWsbqUuWOSmzQajINSOJ6Nrrx5AE/k3v+YZKM mL3jVhoZMjyTW6wRkPJ9AfCtxpTMvTs8tcSR3ou25sJCt8SN7Kpk3LUK S5E= ariane.nlnetlabs.nl. 10200 IN SSHFP 1 1 248ECE56A3DDAA931DE2FD2F26EFA93031517740 ariane.nlnetlabs.nl. 10200 IN SSHFP 1 2 62E3A3A5E75ACFF2DC2D42752FC2F7EB1BB83E8440BEA635AB4BCE94 3EFF7C0F ariane.nlnetlabs.nl. 10200 IN SSHFP 2 1 22B076311F36A0CAF39733285CE7944B8716302E ariane.nlnetlabs.nl. 10200 IN SSHFP 2 2 D1C0519EE0C52684683D87446F4AA4069F91830B4CEF3F85C3CF73E0 C9055665 ariane.nlnetlabs.nl. 3600 IN NSEC atlas-probe.nlnetlabs.nl. A SSHFP RRSIG NSEC atlas-probe.nlnetlabs.nl. 10200 IN A 213.154.224.43 atlas-probe.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. DtI0k8M9R7UIZmYLahpfPSzXHEznECxcxrnV7f5xlPqNXNokRm5LtYYv +cQQ1xDqvYD/ID6X2T6hFQacsQX5DjYxu6praAMOXrPoEwLX+dWmlv0X 4BgvKY19tNzz+bMRassKnRaoSnJYlJqd+zW3egzBy4b1YBkdlxRUHL6z qPM= atlas-probe.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 06NqO/QENUAaDRBZMF/zg3vYv9s3AocuUjN9uvbzQJ87qBgcHHYgakIH y9Mq9HxKAZFfxfaM571Yl3sVqQ0/8DlwUg+4mYb26t7yWnDbpGwq4Ybz ZidwsfLESbUNWgqH/5N+QxetAWueHuXUJ6huYLbsLEF7pNocW2dRQoZl MeY= atlas-probe.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Y9ZYh2YyvkiUF/U+Nixw+ghHPQkvWqEjEOvWPES/RwsZ1OUeV+LhqHX2 fLE/ve99vmqNjWsudgfrvMnRMjTj34ye+hPSBDk0lk631mqr+5wyh8kS eDjGBrdAUM+VK6HqFaqEje2SkMFWGIe37QzZ7ebtLck18WVofK2Kr5l3 N7M= atlas-probe.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:220:4aff:fec8:2538 atlas-probe.nlnetlabs.nl. 3600 IN NSEC axiom.nlnetlabs.nl. A AAAA RRSIG NSEC axiom.nlnetlabs.nl. 10200 IN A 213.154.224.44 axiom.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Bh6kbGjOKTYe4JKxVA61YScMPWPrZDWNjpJXhiftHzYvEI/blDSuv75D g4kfOz0ohG39FrhZthaL6D4JuYuDq8cp/IBSCtOR1sgguoqC3Axnnl9b ZQoHe03WvZkbuOp6qdgAtWE3oDyhrrDGsTCvGPd3XNOu1As3sEnhdhlh 5C0= axiom.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iQq9NyAhWJKFF2QVVR+PjkLwVsHnLsIrPtXVzHpmgz0Np3Kiw5aEFwMx dZN/63yDvqoFCNPu+MTCa6ukw0RFwewR8EnHRIhh7QDP+APRFrbD6SFy 9eOh3eQpqGkHBT85I1yPx5GXVYgmXLOxtIY12Buj/g2Pvu0cPIdlKZKS L9k= axiom.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. U+DOSypM2E3BiSjHxwigWZzYU9XssgLBoBO55PneB088emVL1qjE0luC pQBDWVmt6tpkJ5FhSUx3umY1d1ztfn9i4pHKjaOw1iT0aB2Ae5u460BF td+fuK6jTo6ciCaJrmEZmLbyKqFM9QindvMu9+1i88HXCd1p89C60BZB ng4= axiom.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. hWJM1lWq3TFk+QPPBffU68aCHzODB9V81teKbN0asSG7GC/zV9HlmFUF 7cZ18Z+NRL5P0/5cgFiL82VLFSLddr2Cw1ncPYxAmqDEQi6RM6Srwajs 8tudUsIFqXN6grD7Oi06LoF9/RZYrFKwiPEbBcUPLBMUi05FcL+Ahr+I OKg= axiom.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:222:4dff:fe55:4d46 axiom.nlnetlabs.nl. 10200 IN SSHFP 1 1 604CC3A8A6795466E88EEE22ABCD9DCFE6BA7F9C axiom.nlnetlabs.nl. 10200 IN SSHFP 2 1 6D199FF75CDC453D376591031FE2C6257E4C5F49 axiom.nlnetlabs.nl. 3600 IN NSEC azkaban.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC azkaban.nlnetlabs.nl. 10200 IN A 213.154.224.31 azkaban.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CLJfuUD6Uif7U4j1BYgIqzcWzyaa4Pw+qUeR1VHiRi9ClVjrSRpWvs5g uBZ4Ui+N2CjBAzMYjN1baFpbfIpmJDo3eUqevqi/AUv6cz3hXckrVVte Pcw+5rJi8fObUk3w2Dcuk1X2wBA8hqqdEPOqgJHGxZwjnV+CaU9WeUWQ ckM= azkaban.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yNk0y/JwViW2wcQMAl5kOqM+vmm97Sk6K9bN0JKZXHNtWAi1OYHKY9EY sT77CXDtGo1dx8dDJCbF5dc16RrgbfadAbtld/BK8aYQkBnSvkFHEJGT 3vhqN0asORVtM/Kao6gGM7Hycyvl/MDvdKmfpHcDC3XCV5G3cuIVUNVF 4HY= azkaban.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. srXtN+1qRW67bF+RuQhTg1tWMcaOk4vMVC7DNORT4tb9K9/DFcNuMdJr ibX+iUfVnrfxzr4mFA3dHqAsbwjbgglTkH3iI2wviynh8H5iJz1OGZK9 vOGzCShGqt1AbWn1Wii+SxKNdcR/O4QBGTEKQQwxrywUpLnSetNqrEEX 8Ec= azkaban.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SarQi+Ius0bw+MQc5mMnolRNwNGYzLDPOldLOG7GoN7oMJywNNleRww8 ItGFI2wqmQxfQsmB00izadQj6boqZI5teXVQ1hqRB0tEwvxe9xcNz20M pCmO4dh6QX/7MrbRSYMLq/IBTGkxp6fZlHVvmaBGMF3y83rmSa8e6sMR tZs= azkaban.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1f azkaban.nlnetlabs.nl. 10200 IN SSHFP 1 1 6243EC2D53E6F6F0C34368C65A44182205C5B0D4 azkaban.nlnetlabs.nl. 10200 IN SSHFP 2 1 9B6E52735388C32C62A6CE38000809897C922DA9 azkaban.nlnetlabs.nl. 10200 IN SSHFP 3 1 120D6B12587D5520FA736D6485FB52210B5584C2 azkaban.nlnetlabs.nl. 3600 IN NSEC backup-store.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC backup-store.nlnetlabs.nl. 10200 IN CNAME gorilla.nlnetlabs.nl. backup-store.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WScwuGjQqOKpsyG9FZjcKeujzsYVKBURgGsUvmGMRM3+yJTLRkt9pj29 STMYwYVcbyD4wiRdCyMQNFAQmWMhjgl1gc65o3UA1LMDERs+HxxPGeSk ixdIy6/YQtLpixVwITjr3ASszOuF/9ZeTPPJyjnF+LLDmYN1MpMJDvnl oEc= backup-store.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. YaSUfwEvD+Bttf8rFIa4S0Aj7tdrN6C294Y/U0GHY++CFP+UnhOSWgLW SsqznOTfj17Woixoz+MY7SiHSZld6h31tyLvf0NNeAq4nKQnzGob83J6 JoCTaENdMY/29B4JR/pfEnlT4aLRnnrQ15yoxMxvFv8QPX1o6DRPkwW0 N6c= backup-store.nlnetlabs.nl. 3600 IN NSEC balou.nlnetlabs.nl. CNAME RRSIG NSEC balou.nlnetlabs.nl. 10200 IN A 213.154.224.106 balou.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. S2AUBJB2iOkqooCQiAfxXVAoAq/Z4tyTNA0+kKHSMY+noKdYCv8N8JQI 2uFCh6fEKdJ4Nv73/j2YQwtbJ4H8JuuIr0SD1dhQe+BnNiGaY8+oIYT/ tRCrjzIU8njiTeD1CPs/QZFil8fMg4TiztT/oIPickycv7AS+gnq4+26 Cow= balou.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jxxnqktALVy7Ah1xWOIwCl1a+OxuLQxWmfUKVGLW3yNbhbvuxnk7EMmG eeHyr8oOSa1+iHGlj+p3M9PkpJUIAycRfOqrNNSNU4Tc0LhsQ+QbM91E ha3xEFHNuOvUwwEG5lOuxF6GOn9ZCAMryQwrDHdK3LXZ6papvLHyDwg3 Z9k= balou.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. T0DKCDnirwQeQop1ZadFVcwJsqGiyq8WFHJUP7zsg4rvYwN6AWXoxB2W zmEprhwOKEGea8uMJDQ8e3LMC6JGTIKx+VEzXFdNn86nLgQYdNwe1Wzg hJUay2q1atetXCB6Gp5vnID5ZKqe9lDBWTteMfhtJ5LPJBnx1wrKO6CW 6zA= balou.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. K7nYILGnV2gvrHKquNcjnQSDgh8uM77fTpqxz0YENJITCcq9e2vO2UNP rICq2ymaRx3McZBaUOb/qgQ7cMoLJe4arKVZROyrczGwULapwKJ8JCMB PDIy29iKOYqvt/WGgHt1u35MMW1Biz7uxlnKZ9VpJIN2zNSozGkFp8SI ffc= balou.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:214:22ff:fe13:a1e9 balou.nlnetlabs.nl. 10200 IN SSHFP 1 1 3B6531DEA06624D1C9ECC9A91D2A077EE5BD8AA9 balou.nlnetlabs.nl. 10200 IN SSHFP 2 1 12D68C712D4D33B453059DF239853113C88AA26F balou.nlnetlabs.nl. 3600 IN NSEC bartok.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC bartok.nlnetlabs.nl. 10200 IN A 213.154.224.50 bartok.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. DKrdTq9Ce2wVWqCA1g0X9xw0QypjyCnWUSd9VHU6dQTSxWIZgd98jEHZ dZQvie6LAgU4/fNCcz+gygTMcglMe64dY5vpPT6/SNLFfeqWSLPepGmY fHVmHlXcdpL0OfdePpaOD6gSlJ5KanTNqxABfejBmts4nKlxNU7PPIxj Q/U= bartok.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0xQdRMFEHZoZWhwSsbasAd5/0usI6KgfcGkUA7UtieuzMQFcmlghaUkb UZve82xmnz+80M/PV4SPCTz9AUY7yKg1XeLIJVt9ej3VxIqSLIUUHIst JobKPMCQ7CIWWx6DcfilyJcZDvxxYfLvsWZBK4Vugtk9p7NtQvavltDR Ffg= bartok.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ET2O1/Zpr8jXV/IcFq4mfftHZ7OSXnbsTxhwDvIbJj5M0u9FbSRoGs9w 0kd6+G0mVsnb8DeF8VTkvXWXorjzsyZqOw+YuCLyfcieGToJbB5rfpMu Iiyv4bey4Wmc8jt5ta6G+RIzaboylARGrQGUjWcz0Jg0Y7cdfGDVXnTH nmQ= bartok.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HBAXNjNQCYPvAhG3429jo0pRgvMVVKT7P92/D2d0cnmt7SBfb1hTYyHg YrZMBXxKLottGQU64UJjEEzK23ofyvg7LCaRnvfdEgIGa3UZp2uVmtPQ FmhuCnmIcUlalUkYikHQneKPNT4/nC8y9ux7oDT7jOdbzRc/8sz7sQBS /04= bartok.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:216:76ff:feb8:3c02 bartok.nlnetlabs.nl. 10200 IN SSHFP 1 1 A8B153B03F64A09B6FC214B5BCE75CF19E0D2865 bartok.nlnetlabs.nl. 10200 IN SSHFP 2 1 7070C07AAA3ABC4670865AC7CAAC4038EBECF8AF bartok.nlnetlabs.nl. 10200 IN SSHFP 3 1 F1F3BAF7D59C68D98151C913B440F6C1D8FB622E bartok.nlnetlabs.nl. 3600 IN NSEC behemoth.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC behemoth.nlnetlabs.nl. 10200 IN CNAME behemoth.overeinder.net. behemoth.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. J02gDVWMvlOd0LLz3rnuWb46aNmNZ4tLlh3c+LkLhdtTVZLFUYm8MX4x vfuvz2+84UWOyRq0NDyftiXUrWBBYhUXLBqtCOuxNbF8MFa1JggQ+YGT hHJ2OLtKFYC1JuP41ln4MPovIjaxBzziZzhYSPJYH9EL2j6adefKFMdL /hI= behemoth.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wmrYwTUWotmbYxBz18GrjbSS8dy6Lf6MEGeMuXTXDfCHX3F6qIK4la6R R0vElLmeDkyY3qHLm/Xea5vNL8TGCrEAKKvbxvLttmalfJNxflV86B75 bUVE2LbYtxaoPQuRuapClJCgoybmZ9cfPTGtK6+8yGcJ/EVjiuxfRFnY mY4= behemoth.nlnetlabs.nl. 3600 IN NSEC bela.nlnetlabs.nl. CNAME RRSIG NSEC bela.nlnetlabs.nl. 10200 IN A 213.154.224.22 bela.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HFSqPqJtQZzS2RW1VjmQaB097Ob6Lu9Ig3qThSpSr/0T0giQrT68OXTe rpV9MvWymVmyFI3CJol330mmtyHzMdK8Xd5JQYAzy0ptdgIGPQmGZZZ7 cUyFa78yrBQxKVvxRO+O9hq5NLcerkm5/TWkXy19uWDDl4pd34zW5an/ fyU= bela.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RZLeycQfklRy55zTt5K6G1pfk5C+w5GCamOBcBKkxMC0VEUAPAt35jTq G2KzvPMFl2LF7/LIbPIy7LiOwiKfS8vDpePpuc7PlbrdBSG3J726zYc8 f24xbvxy9MjmIaD2fVEyW0idcTIynamGKsIqDsH3m8BPdamIMC0KZ0jL rYI= bela.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FUxbwA6HQ9Az28pgC33e0fU7HA4c56hmn4YckNBTGF/bRhEi+MHJHoM6 3L/OzMrgaGVdA1VI5Mn4ePWd55gsnAYoXx5JdNoGFqcPIO/DCqUlHOAi SSD3Sls/Usl4ec3HKT38sajNEF04Opx3shnR4Noouq7BLw4Pw4/mXFQ2 nT4= bela.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DAFlcGi6e8KLBRLHlzb8Yll8GOqN49Tm7o+NvlKDImKxHa7gUQFQpw9M JVBf+j3GaLT05vkhKapsOTdmnBW7ylSuTcyYQRkn7CTobK76m51KJ0iS EOq4JdFhlMiEEoeWWjvhRpeMqEOP77DEwBtpjxPPC5IZdpOhQg4c+iKg OG0= bela.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:222:4dff:fe55:4ccb bela.nlnetlabs.nl. 10200 IN SSHFP 1 1 CB43092FDF932BECE7FDAE60412D47BFD4837E32 bela.nlnetlabs.nl. 10200 IN SSHFP 2 1 B85F5AFD56896ECB66B8F11194BEA1B43C32CA2D bela.nlnetlabs.nl. 10200 IN SSHFP 3 1 D8DA794FCF4ABF727025AAD3C54E41D348C17E1C bela.nlnetlabs.nl. 3600 IN NSEC blogs.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC blogs.nlnetlabs.nl. 10200 IN A 213.154.224.135 blogs.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iPQEpGUi/5B6yh0vf0oOwJHhR877COTLGn/TyBJX6Q1hJ1NJaoqbp4OW YdYrHbncAsbgnJREdhv9oQLg66631aX2AqKtZb/IsjBVYELI4dEmCCop uD1WEfWEfgHfEiNv9YSIWX0itXaS191XpPd4JjOW2L9NkVuVPFhUz0SD Mr0= blogs.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HODlVAKKe73PzBiYhpaLascNGjmBYoj+o0LhQxStY0yUpR7pfHSltbbb mDrsNmRTJLPkavzSPmBDwLe1tisMBJN0swvfjp28wZ+iiU2ZDnwShwcm 3EuNHhZiDSjYfSifVdvPhGm6w6SnAChMglZphwY6NctvieRElWFk+Ehj Uc0= blogs.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TCkc7nRZZYEFxJclJPlCDFTNxmh3j8jIYRT57rcTJAHvhryCQr3tsXtz wOXzHU30jyiE1j1MDUdZzardPwXN1ZQEu7bKdxyNy+m7snBNoapZe5bA Vb+c8S4qy0JWO61oExWFgOIHlpfEolF/klQSvLG9HF6GLI2Rc0UZndNn uSk= blogs.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. TJN+zi9NeqNuo5DL/7pEjB02+iy2j7RKtjWL6T5ZWLBgSWgH8Y7yhgWs G+TJMDyOhSWbBDKbfhKPG/YyqiunIoT0t/XDT2R+KY3R7Y/uupHk4J3X uuf1V+0TtDOwtbXkIN0k1MVeApjR2IqxV1/jQT6oR03JMKCpSpmNjc6h gqo= blogs.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:9:: blogs.nlnetlabs.nl. 10200 IN SSHFP 1 1 C0C1D59D9219402303D4ADE4CEAB40193D3CE55A blogs.nlnetlabs.nl. 10200 IN SSHFP 2 1 154A0526AFCF080F205490DBADFB75220383B787 blogs.nlnetlabs.nl. 3600 IN NSEC *.blogs.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC *.blogs.nlnetlabs.nl. 10200 IN A 213.154.224.135 *.blogs.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fZh+0iW6o5TuQmotSAC+8qIAxsM6kyXJ8R3EuyOwvTuvo/DwsIm7g2ys o37BmY6tKFT8AsgtBdeti71mXSj4DaWFZg/8u58WQhHcCK5LCaXAD5gq Ln2cn+C+nyG8QGpxWLsD7jxFf4vJR9xmA1yhMB0ND6NKI4De3CjHzjEA Lf4= *.blogs.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CVWRZc2CRnZ4MiBMkkN7DSlRAVcM4bRlTXvYRYUnN8ofBifGxueHajPy 9KZtdERNvQ5dsv3lLXtfh1cAwHP2Kf0d+aJMe2LOGI4+wDyn7DDbOcom DCs0FoLBereWUn7pvTWh7o2XKynpLubYqZLxiiZdmljPOy+3wM8Ic01U DT8= *.blogs.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. h3LiiRBp0IBUhfm6kVpAWdPMDnxrDc/qaWdwJRc+otY8/LpNCxeBpf/Q vxcg/iLhwbQoT9OrOXF2mRJFMpkxUu11gX+3UtpRColxUOJX5cBLfd6m eei40fVnWtTAWEAJchFSULAmqLPV6c/v4qg3NtWDpKAKgiMoo01uuqA8 zrQ= *.blogs.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:9:: *.blogs.nlnetlabs.nl. 3600 IN NSEC bogus.nlnetlabs.nl. A AAAA RRSIG NSEC bogus.nlnetlabs.nl. 10 IN TXT "will be Bogus" bogus.nlnetlabs.nl. 10 IN RRSIG TXT 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. Qe+izd9dOvY4ZVghBLuaDJYS9Lycl6JTIY3VT8WFbz3QbJEtnTTr/feb TdHxhuOV6/P5vRfFO7fDRrH3KD0ecM201pZqKPfltr9uOG14uBlDkIV0 HpfKZ9+Du9L4tuUTYQDRQu8Jd4ITJ2ymU1ubM+eSWdI1w4gIog9wTmdv eSo= bogus.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. glPJsi3+99LTHFVIhXaQCrpNyUP29bMeyix1YreX887i0e8MU0HCaxqK /pUH6v6OsJkv/Q43r2GjkyZePXpLedgPppfClRFKeB+CamGe5mrTk81m vYKJWtMau7+8R9foV+xs0GyyXzc5aFMSPIcHHNvQr8vijY1DDNyhDqUD chI= bogus.nlnetlabs.nl. 3600 IN NSEC broer.nlnetlabs.nl. TXT RRSIG NSEC broer.nlnetlabs.nl. 10200 IN A 213.154.224.3 broer.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. snmeevVCnhJ99EpepkNjQveNKZz5VBe0KXalgBBMLqoF6F5zVR0OHrmH tTWLMrWOX0qyEiM0ZeLKKp6GKDxeBSRBQMJG1ts79p7I25fi16vVBwW/ 9xpuc6AAP5kR/lW47w+nL/bd0GS8xgvties2dfKi8iE3LgyXV+xphcBS sJ4= broer.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TsRRJ4B9PbxAHKnvbU16pYIaF+rmGfTsfo4uG7XWiW4GG2MLqzSz/NkF UyjEtnHXSgjMNiVDaahgRHMnOGK+MSTXz89vF8vilTfkD4SzmLBmUxIX nZ6y48E7LVfnlHpwWjY5VGeWaNM4bYi3SDmROH8hjr4femZjYTBTQHlh nNY= broer.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. L76iAX0THAWJ+Gus6Rh+dgikBVc+p0Fzgmk3b/lBlr3ylLtwWfrrP2cB W+0AgrDjSH+cm0svLWW50P0aIfKfmmf3drXSATDxDDssCg57+ASsymNn BeKocAgDfo1Yck2TWUfEDhBcJUmPDj0/aO5ysnw2v1Ua6xnGfH5fscaV rBc= broer.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. PKNocDJI46bA0W2CiMwu7ZQZQF7eie+sSJFnlFS5E1tEumgMzToFspkw gFJhoiuD2QKk0duij4a4xdJ2JtJtAt3s9LLTsX648VnOkX92YtEdiz56 ZY79j3eFdw6hPoHSinEJZkqgY4Q8TAuS7FtAABv0+NnK8mupWJuTkcRv MrM= broer.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:bb:: broer.nlnetlabs.nl. 10200 IN SSHFP 1 1 8290EB11D74E7147221920FB92990ABDE012244D broer.nlnetlabs.nl. 10200 IN SSHFP 2 1 46D8DC5C57933CD04F6F9E459B0D07BA2CABA21C broer.nlnetlabs.nl. 3600 IN NSEC ceres.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC ceres.nlnetlabs.nl. 10200 IN CNAME sixgate.nlnetlabs.nl. ceres.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CFpxdyaB9ZXDF06TzUKTAZsc5KyrF2Sgi/bxRRtmBY7tOu4onzv5uX7i lkvIexuxrbiG7Ox85lyhnnEdJbTp47l2SkHQWhnKtYA+NRD7SOeVxI6V 3b4tfZv4AUGOAaeLorRHJYHgWMPkAimsjeDx/RDSMQ5ObBoFdEWEYyQM d50= ceres.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IOw4Xbw363lzgN3WBJJOW0y2QDz+XpbvqRk5zQUlMJ+VZ22Cosqra3h2 MIQOjVpt4CZvR3w4+Nbh5Uml5BHyhTO1M8NINlnBCUA5uIR/kcTMPQkv MXUPmaKlogQq4a6B2ZmFy6oH6+u9C8Hw3wmIJ0KDBLkp6bPd+xTI1paA Vc0= ceres.nlnetlabs.nl. 3600 IN NSEC conch.nlnetlabs.nl. CNAME RRSIG NSEC conch.nlnetlabs.nl. 10200 IN A 213.154.224.16 conch.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YBWfa8EPTsFHDx5pSI8O8UhdQgg0+b+DrGk0DmFUemKoKuEIkN69C3sw FWIIIBLZp27nmYFm4qtGTTVOvCDGT8Nfpf3v2seo7mHLlBESb7IQUlLF 9RTqNsHtdGBCJSTni6TwzbgXv29VXqCpXUcUUaY+L/kBwB3+BrgmbWFv dMM= conch.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. BvQyV5kh9FlX/t8IbWfidnM0mXyloIyJuCEyy7zXwLwwwzC4OnekGT04 K1ZugP40IQ69rxKetRVuJ70oSDSkXq0F2sj7y1cP1dEberKE48Ik/6eF iVejGOXJ/+PBL4mjDKlChfel3zuucMgx4rE8x4HfM0MDt2e1OnKVbAyj xXA= conch.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. JeoK7whT9GS5YVcPUtn/9pjk05KRXo8zFnwtaYmYZUf9sylt6k1KCk0f kcpWuIWoTlwfSJ7bsQXz80gOr0R0ge9fm0+xNTj6toBS9rjNJ03dLBDs 38gd7toTMwYlUN2gGuvDISJ7vChvZvcBnOvnV6kqUMFXQBEN04nWrCM3 PKI= conch.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fea5:1267 conch.nlnetlabs.nl. 3600 IN NSEC conference.nlnetlabs.nl. A AAAA RRSIG NSEC conference.nlnetlabs.nl. 10 IN CNAME open.nlnetlabs.nl. conference.nlnetlabs.nl. 10 IN RRSIG CNAME 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. qXFvgENYE6a/uqmvAfOQ1Rav/0AuMNWNvDkeGtIKLZcpPetC3rvr0aen Kmj94K99OU1tI2MN3XLg0MCh7xQWtCvora0pk0Nx7RJXAZ7O0R155sxO vvmu0xeUdWYpq66agaNFfdwRhOczMSqJui8PQ4Kggb+EVoxexbw8VP9R fN4= conference.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kRyKGcp93AToiWK/sCyS82HaYe/Li/WBmxyxVlguZFyeVE3wuOyN+GQN YPOMuzvj05S1bhGMyt1Adq9n9cUOU2R1dhe2eYHr70gl2XX+RB/4tmy/ Y8+t7qDGx5J1F5PRasQaGjHFDaVX2QLo3Y79BevK2QxOxkB+kIYmAEVW 6MY= conference.nlnetlabs.nl. 3600 IN NSEC _xmpp-client._tcp.conference.nlnetlabs.nl. CNAME RRSIG NSEC _xmpp-client._tcp.conference.nlnetlabs.nl. 600 IN SRV 5 0 5222 open.nlnetlabs.nl. _xmpp-client._tcp.conference.nlnetlabs.nl. 600 IN RRSIG SRV 8 5 600 20140224111605 20140127111605 42393 nlnetlabs.nl. d4FcPuwHho31ypmmQomQFUrhM9UFytrDbski8+5Y/QgZWl2btrXi6Ay9 DaRowULmsEEcAQzoVVjH2xBOy5xMtGIPrPvf/g43tqczjY1xmkF2eClm PzHutCTx+Of/v19893Q2ky1p9qW77V8zgm/VvIBrSFa6sAJ8GbkbsYGp 16c= _xmpp-client._tcp.conference.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. t2Hz2hQnhTWZSpvKqWvGVymD/UJi/WQ0xMBPpAJIi8Olk2rKZ5uHhnKr FZ7xXyZOn58+vCVnWUaytyJJv3insgYIvbNbJkxpjJZFdy/deIa5i0k2 hwaEKZKe3aqBnYIOWfIT6t42790r7sHB1hkzazlISIWpCzTBKoxq8bTn Ljo= _xmpp-client._tcp.conference.nlnetlabs.nl. 3600 IN NSEC _xmpp-server._tcp.conference.nlnetlabs.nl. SRV RRSIG NSEC _xmpp-server._tcp.conference.nlnetlabs.nl. 600 IN SRV 5 0 5269 open.nlnetlabs.nl. _xmpp-server._tcp.conference.nlnetlabs.nl. 600 IN RRSIG SRV 8 5 600 20140224111605 20140127111605 42393 nlnetlabs.nl. fWheQO+h7zolMxgqBQjUfmYmaOGFcY4L0O780kKwT8HiIVztdUf99Hsd ZodNKc610S7iS2FHJl+9hXPAWJcZFHd2BNPcxu9QfhA4gYc5Y9nrZqAV l0cPzdmluFzfRsxKxdlsDsb+Kcc9VuccuLVzc4EMyIl7hBJTPJzQ2tQA 0Dc= _xmpp-server._tcp.conference.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SFXPwNY5cXOyCySdJ6qMY8Ydqmv8YXpEJkw6ac0KGAxNRkGaYz2K5FpY lq4oZqaGBaOa7NFgtzIG9VVrLrrrP5CJptB9GFF5u+IfpcN/3wWWcqqY hQqsrahd6gdI7S8acpI5sj8h3ZPFK1gjE998KSi0+xkisLz8lye4OPTA /Cs= _xmpp-server._tcp.conference.nlnetlabs.nl. 3600 IN NSEC dhcp-100.nlnetlabs.nl. SRV RRSIG NSEC dhcp-100.nlnetlabs.nl. 10200 IN A 213.154.224.100 dhcp-100.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. OzZkv98sCVeraJwlS68wFsNpwqeGXtdOVtq2jeurcAbVTNKr7BJNTFg4 GB8P6zaKChCaMJ4Av3QMX0q53YatL0ahVmIpvXJYWx/sve0DvUpE4C6w 0U29GhikC20JjlZWNiWwf3/ZnfegO2CA/P2j62Eyg9EFA7HLwY/hIk4j qyg= dhcp-100.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mSTUM9UIuRvCHpw7Klbv9907v+OSOzYtMQitGFUE5k4nG2nLawLDOQai sVRpFRH559D1ggHAn2SVnyf/Pk0GOswQ9ea5B1RZzZOpgziEAMwLVuJv foSDgZThXvr9bXtiS08LzyoHU5MfjzGCtrpAc28P5feWY8ukucf/3UA2 qd0= dhcp-100.nlnetlabs.nl. 3600 IN NSEC dhcp-101.nlnetlabs.nl. A RRSIG NSEC dhcp-101.nlnetlabs.nl. 10200 IN A 213.154.224.101 dhcp-101.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. R9OZoLytf5ayiEbav9TdGupRi0SFVt3Hcr4XH3IUgkXrqMAkuZum8kTU gvFbJfMYOnfkj3+8Xs/H724Qk5Jc+KoCL2urjJKpvjgyIvJNsfIQuaG9 eE0ZR1pMjNcqHzpWxnzV406haWrTHfx8HIBRqEaw5mk6JxBsPQ9A6oq+ dJ8= dhcp-101.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Q1wZR9q2brvOqI6Uq3O2oP0FJQQQrggBDL6TFpVGQ0xdNIdVvIHW80uT Zm5HT4rXmWRizeoIQWfEuHbz6SqfaYQimEWIAdXdlX9YEq4EXAiYH+kD AVhrkQz35t2BwvtJJqAB4y8koAqf9Fdw52qYEWvbWUXfLHmgtJEJ/rn8 9NA= dhcp-101.nlnetlabs.nl. 3600 IN NSEC dhcp-160.nlnetlabs.nl. A RRSIG NSEC dhcp-160.nlnetlabs.nl. 10200 IN A 213.154.224.160 dhcp-160.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. riDjBz79iudE/fcPGn2ymd3T+wTbhfeZVYfqQM5Tn7/s+Jdtkrmrxmvj CNrLPKJW0xSNcmDs9eXA6C+rReQr4SNT2rcAjiMq8obgssgaaAK4WqPa CfVFgeUdGXz5hZPu7hfz91q2x+jtXfywLfdFnjiVUE5Ec0/AFSUpaKJ8 vFU= dhcp-160.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. VOm3cBZNSziblAcC7nVUMwglBg67sx1GEMr9a3Yw5KJNBy1vDll8P23W fn7ewl8zB5cxCs042ZK1Nf3e78Wk0+AQkwnKbFsuX5ct0IpvziJCdVmt M+BpgJ8hFvHRJr41UpEXFY7pM3csdrPe8tQYGJnyqnHdRmvbU9dKQrs5 xSU= dhcp-160.nlnetlabs.nl. 3600 IN NSEC dhcp-161.nlnetlabs.nl. A RRSIG NSEC dhcp-161.nlnetlabs.nl. 10200 IN A 213.154.224.161 dhcp-161.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ltZr8dQdBaDrTL4Gs+RZep8qxIhq59/GxruD4xU7i4QNQytkxFdKulJU VVusCXQn4MUH4Ctw4kdxslyd3SF72rhQYF74pU/QP9fqWGXYAbiJG46A DLV3MelGWt6+2pgWoBfa3fHUCX8L0xJe+E6+bUS1M8xd4YaDxHoqoFyq B3U= dhcp-161.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wbJ8du4eQBhwRiKDdXfJ2Bzc9dUEsiHxZm5qMPcN2d/v6kAny6k2rMHd ybOPg6Bn2ElyXHnEDcUdb0l4HR4qUQ9eDmAP2IE8s11DHYD1aDyIn1jg kibUjAqnAqRpUW2S8SyfAfaHiYti2L5/th8LhrrsoEQ4yoVRfxN9qP0l zDQ= dhcp-161.nlnetlabs.nl. 3600 IN NSEC dhcp-162.nlnetlabs.nl. A RRSIG NSEC dhcp-162.nlnetlabs.nl. 10200 IN A 213.154.224.162 dhcp-162.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jBPryv2C1BHLZbrlxvfoxdu/GV2EFi2HqCKmFEVxJKZ0cyykTGGykngK 2pq2gPSUIEWiMjIPPalD/r1PJIm2b9AlEhoyBENz2syq2eWQEEzQ1ukY IGjDfp/jIOSusK5q9JrapBPT7ILV5iE4sF2SmKfYKNeRW8oF+c2VdTvB C38= dhcp-162.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Hb3NbgxaSFxC8gcwkcYYBedycDr9kfXMKFW3prJUH+6wmN9EIWymvn57 8Ggj84UmIehsG29R6rjnEnl3c5WNvi68NrNuU0nGFibdILKG72sGFQGb LyFjxKG7Hisayu69YcqKGeEcRN4rsGy1fMgx7DecFvKQEOJS5q88iH1z QTU= dhcp-162.nlnetlabs.nl. 3600 IN NSEC dhcp-163.nlnetlabs.nl. A RRSIG NSEC dhcp-163.nlnetlabs.nl. 10200 IN A 213.154.224.163 dhcp-163.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0T5nrzKDHu47uyog2CYeanfE1v4remzD87Pgq3KgXL/yNSmGg0rZ4H55 DIcqwugidGb3LB0ZoZ8vNe5roN5A3gmlDMv1ZuxgwjFCCytkti8NmEl8 qWupKkvz9J88uv9X46uExKPrsojIA+s39G1a/YHYJ9Tq7xfuVlnhz9wM wFY= dhcp-163.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DnzUrvzoFwjLrvvGFeMiuk9jGmxCw4mavxHnj+Ffe07Bx0LvP3/DFqbU D8DqkmD41bJlYIw2L7TKw7nia6opGHdKlem+MVaiOr/WXQUQfPnf/x5e YFH0PmQ9059QY75sP4B7tYgUV0TQETXSHZ/vIuMi45+LCxlMlnVDdts+ Jgs= dhcp-163.nlnetlabs.nl. 3600 IN NSEC dhcp-164.nlnetlabs.nl. A RRSIG NSEC dhcp-164.nlnetlabs.nl. 10200 IN A 213.154.224.164 dhcp-164.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ggXpfnCRcVdWSC/Bj8NBcLKocfHiTOgQDvdkNOVCVwLmHgeMwZgj1/Rj /tRV/mwbIX0zOJR07Qg+xSifPNsJQO7bQdQZUnrEnZKlTsuyot5NDliK g4Wlpt7qvkVI5CqJevJ21crSQcEjzQO/9hHjxiz2SV4BvTMv/JpYXFM+ p/Y= dhcp-164.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ks1uQz90ameWBQG8RQaetJLTZCziujO5D7fyhIS+UuUj5QLu8p3GV4yk VPu9g89ikOE3PwqgentrG8kzEZ8vcADUAWSI52Xugpg+J7HjEOVbyJLU h/8i2tB3O73vhGdWKkqKP4XWu88DbeZlDR6koSlv6EI6Ekya/eZ4QF6O hjE= dhcp-164.nlnetlabs.nl. 3600 IN NSEC dhcp-165.nlnetlabs.nl. A RRSIG NSEC dhcp-165.nlnetlabs.nl. 10200 IN A 213.154.224.165 dhcp-165.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. zyB6TBwH9f7Yngvvi0zE3Ry5dew9jG+YatrSYK50jrmS2bmIbMGH0WrX MWKSWBjVpCJsmpUmneOYKRZ4naekfZ2EOJlSgW7eXvU+e2AqfWb+t5Ii sFiHAEwi1dZZcVE9DV7WbFHhf9ZERiwzkN2ZnNjl3QxQK3ZQ63UD9+Yf 64s= dhcp-165.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. b46OWlw7aaCgoz3yYrYe1PzlH9D97dLKhzyfYx3+uoAB25zz7ay4rRbY yxbKjIaQfv24v4lyBzP4ARTEF90WwNOu44VpRGO9jQcGUWuFQ3C5X02r tP06wNyYPDf0w5VotRqRYOa5v1Lx60Udoairig9pV0Cu6IhguN6z833n 8uY= dhcp-165.nlnetlabs.nl. 3600 IN NSEC dhcp-166.nlnetlabs.nl. A RRSIG NSEC dhcp-166.nlnetlabs.nl. 10200 IN A 213.154.224.166 dhcp-166.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iZFxPPGze6/ETnodnG8xeCNcVew/nfu9IbwU/phznkHZGvKc512xDneF gr0jSe8EYpZ0WmRSZ7dJSXCY62kKF033WBbHJBxUdCQFP1lOpTprf6jL zcrDt/9OXlzDbaf/SSXGSZ9B6VYaIz09o9yVnjMnHT8ULvR77alSWr45 s20= dhcp-166.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. 0vVkwFIoV7xP1MUbCskKaNfvyXyJuRXar2gKoSMs53XrPFo1dsIi8kAa +Mkvue0mWhlhnqQ8/fGsR+952+EyZuljoBTCOP6u68ZabeHfnLEg5Mi3 rcxPyZbbJgjwQg6xacmCeWFqWtkT+cztV/jFcCZOO53b57GO0uSbiydw DRs= dhcp-166.nlnetlabs.nl. 3600 IN NSEC dhcp-167.nlnetlabs.nl. A RRSIG NSEC dhcp-167.nlnetlabs.nl. 10200 IN A 213.154.224.167 dhcp-167.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RlpXJgMbq3Wj7hX+l8sfdluaQTFPM56n6W1xgVFqKeuIODS5EMVkSsFk 08CdtQHqwF0uNYofvTgQsbWM0v0ntxKX+33nhixkDoSIUrHuFPWeCta4 +xt6qxKz5quq2B7w9GAT/fbf6IV7y0kbSyiDNZXOmSnwGDoiCd9sQYuy 0bg= dhcp-167.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. spAATkD4uZiw39ATTvowkifNIzHPX84Mk0jcOwXU6qzYSPjD4vxUB4QU hILtd6T6FfEZYMZGMSCpV3Oj91z1hdSqN+waf84+V2sf6kZruhCqDR4q h7vDVzLZ5USe21w4ExTaJXIWueD6V6LgUGExBr6NnPZMAo8Gu3hHKV9S Su8= dhcp-167.nlnetlabs.nl. 3600 IN NSEC dhcp-168.nlnetlabs.nl. A RRSIG NSEC dhcp-168.nlnetlabs.nl. 10200 IN A 213.154.224.168 dhcp-168.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. T7GE4/KxpyhmJMoCjWbR/b8FnUGFLtK0RBMezw6LPdz/HvRXG+tXtp2h HT7eDtbWg+9j9jjljPc6e6gWfP1ObfSmOdOfKT1j+i5VQY1FIMMGST0o EFe9HBZm1GtuyBiwKzdMT9aiqWS6y4VwZe+nyA2PfxuTIVKZMmdn3FQt tOw= dhcp-168.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. bXyUPVNmP8DHpMPxrUsXYb8PGM50kDK3Na1iM1zAZ4Qd5ls6alPAVcym tzrkwBBKtqMtpQepfjdnejaP1oc4b2wGaqQnGFQNE6JthcXzPcBHhMsG PWiNYQIBuQReHo7JKBVN6Dt/VNOWlKVmwY0F/7PkDYAo6rpd1MlMtfG9 peE= dhcp-168.nlnetlabs.nl. 3600 IN NSEC dhcp-169.nlnetlabs.nl. A RRSIG NSEC dhcp-169.nlnetlabs.nl. 10200 IN A 213.154.224.169 dhcp-169.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. LsvzCwcpB/uIf/dudgvmAWSW8Xdu/EaClvy1IaXLU+xxdjhWQsgZtsAg erNs2erP1qZ4/AFxIYwpbRhyxa027pYTzEn31/vuQmXQ5OBWDczX6Wz3 lhO9mnEADbBuDYLLdbyxqZLer7rJvzQBPY/Z7zvjXvCYOykD/KqJdf8U oUw= dhcp-169.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ltym3vL+M/cgZj1V6YucfA4tM5Ly8+AZMeVtIG2Rv3CBWG28KtDKPIjv 3jqxL5bFAT8jvfjgeuYYhZt9X/YYYgW31C6IOF6Jlk+bjPvMpDGwW4ug LOYgIx0AHylIjG/3mfl2Gvys0dMiL/LFtdrCzCyM5TDavgmXkQy8ToPd ZwA= dhcp-169.nlnetlabs.nl. 3600 IN NSEC dhcp-170.nlnetlabs.nl. A RRSIG NSEC dhcp-170.nlnetlabs.nl. 10200 IN A 213.154.224.170 dhcp-170.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. OiJpyhdtIxUE61Q+EddH+gKCJwRSF7Q8qmeIQ+pE28ufLzNVPo7rUDPK mlrrG57y2rTXv/27I4acHJLUyeLkqjKVFl0NWGNEwtIiz1EgnED4vHbd mkZLeK2ADR6ClE7GluUgLEZEFn7q3p+zDoDT5HzQiEwekDdG4tMsXDu1 hPI= dhcp-170.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uVDFeSosT+pkK4Be03z6p3SvrHzsYdB75romRjwgGpYqX8tkGebV1jxo iBudtVajWOwfqBiY1TEYcny+VP6+xRKnicjv3K04ve+p+6pJIzkVT6ws sLrwPkpNihZ7qLvJHBcOFq5/VF8fgrLuHhq0lb5tEGna9oHAZ1ugRt+e oGQ= dhcp-170.nlnetlabs.nl. 3600 IN NSEC dhcp-171.nlnetlabs.nl. A RRSIG NSEC dhcp-171.nlnetlabs.nl. 10200 IN A 213.154.224.171 dhcp-171.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. t3YQ8Pl5Zrctr89a8wUJ67q2HkFNJ9KDgprwC09U3F1AEDoTzhY/YtQK vgLCIjSJxZWKEqoa8Uj6LDnV3DaOs/01ubtRUnM8SD9DHegZxQx+vyUZ Nyd0vmsZ059PFr+DAUXW/f3Wt5gIZcOrBKYC85GYEJ/tTDqgvi6k2a/U m6I= dhcp-171.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DhalC6BCtI9xs+NEVTnnJbaICI/lKvQv51rqAsnQHyktDTdu7gpNClAH ttc1Gf6SLnhJZiMuM3qPfuOy2WmjjKzKTt5d35QOqoqikSeWF1AkkpT8 B1nL/Sh7LD+G76OuyZomtZhDvNXNeyQTTm/aFar0q+pgA30RBvnyYm5H pDY= dhcp-171.nlnetlabs.nl. 3600 IN NSEC dhcp-172.nlnetlabs.nl. A RRSIG NSEC dhcp-172.nlnetlabs.nl. 10200 IN A 213.154.224.172 dhcp-172.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. UXcwJDXTvZjoc7ss9wELcUf+g/jWh7ENvd5syaLVr6xDmM2NBLnzc5Ga deh0OJAJm47AimPgn9IIT0Qdyf8JCdZUT01iSGsAuaZgDIqrclYWeVZy jOycP0b74Cq3BLU2ZWNTyy3jg9zaB/mUucy3kNl21WLbQtbQS1o2s94W mTA= dhcp-172.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. BhKykUzr/u58rB9uRo97rjHxqDjkpN7ZKzRJkCnZ+Ib7fF+tV3W+CuU8 u5qTGAtKyA8qWHuvBeEaqjgpDKOE0QiUygrc7WhRejfZRREZngsZpR0S 7xsfp8PPsB0oHdvu7iNiq1VL/XpTlYyAvgrNBjafhtQw9vdRAZ/6Gvfy XZ8= dhcp-172.nlnetlabs.nl. 3600 IN NSEC dhcp-173.nlnetlabs.nl. A RRSIG NSEC dhcp-173.nlnetlabs.nl. 10200 IN A 213.154.224.173 dhcp-173.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. H8f/ku28K5F8JO2EUbf/YiB7BqG0eKbcKXticXM2DrpI13yQ8WUie3dB y37Ae+vUr7tMO8ybsBljluPvCHgPEiXXJcWqpyfQd7hhHFwuOTbaPrj7 xk/RQY8BkZpYR9QivVktMXZAwuvDHF7F8VvzwPTU504okyw9VlgrVZPN 8ho= dhcp-173.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Q0AG7N0etyPH+SmooggjBUqbwofNvuMNVUXwWOIgk4nMrX0pgU+qm+/5 RCHlbXYza7Et5Y1SloMyom+jMkMM4YxZ2b44RK13VYPvW/PxPzb9G1oP tGrgf5N3q4QF0q1tjyiX2Nwuu7B1YgMtVG+W5DDYvNZERU/rDlAlCTtF NwE= dhcp-173.nlnetlabs.nl. 3600 IN NSEC dhcp-174.nlnetlabs.nl. A RRSIG NSEC dhcp-174.nlnetlabs.nl. 10200 IN A 213.154.224.174 dhcp-174.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. q2DllCUm9DNqDEuIT0KhP8oIvGuH6gwMlWFaM9nsRv3Ue6E8HxzMvPD+ mD5m7UWEMVYyOAgq6lM2fes6EXXFs9fW3NPQEplqIP5JQcl4C5XNTUns uA/tSENxqNSDYxvmWjKQFsNpvDGNLt61PpHkcxzwdz/GWmCr/01dAdiH EUs= dhcp-174.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. d8Q1Tm98vMteUz4ybXOe8GTg7kkBogVuwU8EMntAl7OKwTgBuXY13Fg2 b0uqrzp4TEi8JFcdt0HO5NyoHzqBmboCEJD3xKuhKYU0XPbqbXbuoCaz zMekvDaqtEydiCB7u3dD2yATTMf5vdUwB/Rk8OCX34GZReqvqHbQQFPc +9U= dhcp-174.nlnetlabs.nl. 3600 IN NSEC dhcp-175.nlnetlabs.nl. A RRSIG NSEC dhcp-175.nlnetlabs.nl. 10200 IN A 213.154.224.175 dhcp-175.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. om10HusTy/Latm7h+37fLLgMOzbF4oDmaH2225Ry8cXUwKMI+Uvpu2wm lXBmu+OZxS1s6bNRY2DMsqiLupSSX137jX4aritTQIFnIOGtoLdUqCIO aucxVdSmy8xnEuqJ2QvLLZxAiJ3kEH1kJXM+G5BTzOS1Wc7CHDrJTitr bEc= dhcp-175.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Kv1ElNhbYRO4tdej434Axx0gOJwmJLAaRdDZcxaHqpQRXtzdQOkp5dGb DD1UJZqHzYRu5jec/Ok73dX9KSb3Eu5jmzKYYEAvgzcbX1mPvLkk+L0q +W5qm1in0u9wfnQvLdcFfJtcOlSpb8L6z7eKB4+H3IkQGB+NnpSg/mBz 8W4= dhcp-175.nlnetlabs.nl. 3600 IN NSEC dhcp-64.nlnetlabs.nl. A RRSIG NSEC dhcp-64.nlnetlabs.nl. 10200 IN A 213.154.224.64 dhcp-64.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0B31eU4J3BpuwwMv+P5SNMHbRU5pMdcZtdplwOZnmlXqxuc2Io4x3R/+ vtefwOjz7x5hs1JagWth/Z03PLCIps35xZ3ITlkIfKki3Nsgozy6vTtX MpO6Un3mwHe0VOqCIabGfn5goNSNXd7zMWZZvTdJdxUdB+UW4icVsm/d n/A= dhcp-64.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. q4/iLmxErJaW8zZz2J2qK9DPztZt0xSGlMLmOgBFASi2Q8rlvbLrYFgs wq9sfMtcgV4spDn6NDtBe7+AfIyu1AqvEbAhw0aL/ZIUj+y+MbmIvyG7 U2GodguhyIxiiUxGsW68vYWi+jOjfCqDpHJlBoR0C/4NhaXHyIKWmXxU PzI= dhcp-64.nlnetlabs.nl. 3600 IN NSEC dhcp-65.nlnetlabs.nl. A RRSIG NSEC dhcp-65.nlnetlabs.nl. 10200 IN A 213.154.224.65 dhcp-65.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bLe8RVrjObnxoC2snRbgxxdFvHNdDr26OlQRixBzlf8O0X7Re3DqLnkX jaQsu7MooW+X3qTw5QCzH97Caedl/Brlb+zwMJsW5bt2f2Yi+qv02dDB vzHScVv+jSXRPeFMHkhQKhUDi/y8I5/kSSypUD5GIc3QHzZbXDineplV 53w= dhcp-65.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. WEJ8K/tBIAQoj524ApeAQ9iquDYghdXJ4NNag3zwFYYzhMLI5UeKoPdn dMskw0if+g1J1ySpmNVA9Ru0qTxWyCyg2kwV1XDhzRKf9u0b3jR+BNfH gKB1x5d8wP8Lt+MwNXuoePoqQ/eQ5Z0RkHYkbFGzSfm+SbTheP4KX4pn GAQ= dhcp-65.nlnetlabs.nl. 3600 IN NSEC dhcp-66.nlnetlabs.nl. A RRSIG NSEC dhcp-66.nlnetlabs.nl. 10200 IN A 213.154.224.66 dhcp-66.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. idzgzl0fyanWjZI9kjgcnqPq56FkEALbnyg+Mxq25Gqu2AAXiww8Pq9b 0AOwwgT4SnBhVdZ+KOtdhLfwyLb7KtBzniyy7El+NR4ZTorZZu+I8L7J OfqSAY/4pTJzknMzEr/sOouSyBTdqNJikXKAK31PDyOaiLMMkfZyALBR YZU= dhcp-66.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FFTB5Hh8c+YfQiNcP7B59HDS6hF6iVAh3hq0dDRbolPC/YQ5OnXPivnQ mZuCrKjk4bdgYeTWyG3E4IkxRc9zB0TsEcf4eXPAn06jWLmAbIethOUE Pu6MEvuJjcRakyAP9l2eJivT0di1ac7AjXZjFghUsCgpbySr0zYsu7l7 +m8= dhcp-66.nlnetlabs.nl. 3600 IN NSEC dhcp-67.nlnetlabs.nl. A RRSIG NSEC dhcp-67.nlnetlabs.nl. 10200 IN A 213.154.224.67 dhcp-67.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ikB0DH7pzElWwn4SFFu07cc/BYi3lmeQTS7ej5xQYWaFHh7L6jRnaY08 6dlwt+bmpuo7vgEm0wuNKrGJjJOm2swPbp45Gduddh37B7erDRoReVC6 6Cph5KfU0F6I8652sD/Ai+ZIxnvDAFcwryOlQF/pZBVx8Yabx6fSUlGA h3g= dhcp-67.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DN3nLi7WySsv0nqz5ntyjHMG3MCz2tA96klIxmQXPgyQbnM6pJfDhajK U3MYu0m5szjJbSGYckzX8aclsN2fe90DmYwzY7AFg12pT7fzKIa0w0SY LDfNM+ncLPpEzokNeXOYEfJCo7ooy4V8+SFyODZlz3LaDZWhgSIELwNI m5s= dhcp-67.nlnetlabs.nl. 3600 IN NSEC dhcp-68.nlnetlabs.nl. A RRSIG NSEC dhcp-68.nlnetlabs.nl. 10200 IN A 213.154.224.68 dhcp-68.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. o3WfUNnAZlrX4SYHwBJqp4ji5f6tbXKASZktiTfk/nOAlBqy+w9HE+9D 2CJv97mClT/g1AQ590VUcn4tIrjmqaiO1FKqWsxfuoSJsS8B/1p0t4fR JfTHrxutSO6xRulaNwcMN09nDKQZY5vhSDgr06xt2kKNsEghGe2ERJU8 9Mw= dhcp-68.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. I1AaAiH+62Hgfx+K7zw4Y5vZPyYJK1v1p2t6IT3jo53aiqM8v0drmA4y 6E/M7GbsXqVMNbdQz0ybYHe9kW9mEYvP5MB1ONugyhbMy6E/QjGyXMTH Pg3ufzPaXE1oOz2efpY/PzX2n8bLWMGUriJ/RihRJG4kaBfHSQxd6ovV pDA= dhcp-68.nlnetlabs.nl. 3600 IN NSEC dhcp-69.nlnetlabs.nl. A RRSIG NSEC dhcp-69.nlnetlabs.nl. 10200 IN A 213.154.224.69 dhcp-69.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 05caDVKf6WmY1+9LQkxHjzauCMo6//JhNr5T6Hs2R9qCBwr9Fs1zy3x2 p1m8uNroWhXwgW3S+qrZkLyq71RRsdRQ0eZd07hUN3zXqq35Ec5stSl1 +pWReXx54/Squ03xTK3bF5uusJJXPBN5pCeREu9jR32X7ptCagPcFaGC JfM= dhcp-69.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. oypiNaPaUerWJs1kZMnGkER7GC0SrLXz1grcHJH7ZplmxuONd4hyVe8h Yepw5h6IfZV8TkdM9EqwM/5my98DZ9O7lUfYFyy5d159WGBEbwmnO5NK RCR206MjJCkketVbmwAnbZpzerQlSwpSCpY5/gsUVVCMrRRmrbTROfxg 3cg= dhcp-69.nlnetlabs.nl. 3600 IN NSEC dhcp-70.nlnetlabs.nl. A RRSIG NSEC dhcp-70.nlnetlabs.nl. 10200 IN A 213.154.224.70 dhcp-70.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QRt12C97MsFYyb8d1J8/gArOUC/l6SmFEmnGLIhoC9I8bVdXhnuWQj5d ybogYVQjnWZnbAK9DgRGGrX0FsOPIagzl/Gzl6BzVQhYPuI1pmxnA3Ff TtWePz3kj1LloJEE6LommsSLhI2GVn/mVHBUgqzVgBcanz8oU8fmlR17 feE= dhcp-70.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. AQ/stCAap6vCD7H99YwhydCktUnk1v9iKkZOZUZpzX6rLAgj+GLy27yq fuORkc27B38+aNaAAZTpbVuf+b6JLUX2M2s7BRLQ8kRQmxeegdSLhynp tDSjt2+eWZX3vE3FQmiccJwa+CzcHSkiz850sL0HZKGG0OjmwOWVJQ4W xBU= dhcp-70.nlnetlabs.nl. 3600 IN NSEC dhcp-71.nlnetlabs.nl. A RRSIG NSEC dhcp-71.nlnetlabs.nl. 10200 IN A 213.154.224.71 dhcp-71.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QasoDQdxVIdippoOSpNZPkyQ++y5UOgurN2ZXJEbIH2D2YsKK8oVyg6+ 4blk5QFQWnP9tA0a/eye7j7n/isGGLFqO7F40Yowp1JzmLLSwdTrn1UJ i0rcd/tDmHLivLTX4dm9YoxTc+9GmGqqsB+eWCIYlUllItYLc4H3/Go9 2hU= dhcp-71.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HmfYhWN8QpmxogwP5mb+J2tXFNkqn/03wDMmo0yU7Jx2dg52YcRqEble 3A+CTQYZQimAXS18sDaoOJdU/i5iYl1QEijhnqL+xrgPbsrdKIQmZLM3 4DzAYBxn4RUUSuYzYQDXynrbWeRqxn6nmsAh+43USS3sQDSQAGWZQNQ9 5Ps= dhcp-71.nlnetlabs.nl. 3600 IN NSEC dhcp-72.nlnetlabs.nl. A RRSIG NSEC dhcp-72.nlnetlabs.nl. 10200 IN A 213.154.224.72 dhcp-72.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nlJgNtVAx4nADM1mVg9HOH4q48eznkCdbHpoe2hoAIrAPKZMnD1qV3yi tbvlxLbsukUXWLjXbYCRmm9BbrnxuSVWtMgcicY2kFCEbw4Bqz9ENZh6 afxpu5DwRes9dfU3M2ToS+xwRr7DbfGfHz31SBXPWvQ7uOS2XOHl3FQo 6WU= dhcp-72.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. lwm7Meg1JJdq2VCzZKC4aD/WLguj2nGCkMwrdA3WvMEWj8a2RpxrKIx3 U9YPfXaaeJJpzGCLpbpATtBPAe6KW0A4eUGnHIRDO5VH5+ZnBP/Hgo1X TFInH7AJ5TFepz0XZDMRyuUUjCw8UrdmQscz0fhc2gnNS6/f9DkVTA0f a1M= dhcp-72.nlnetlabs.nl. 3600 IN NSEC dhcp-73.nlnetlabs.nl. A RRSIG NSEC dhcp-73.nlnetlabs.nl. 10200 IN A 213.154.224.73 dhcp-73.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qKigOcust3LHYsIYJS73HwA51zxYuyCOxmUMOEo9XUt4E1ycU89a//mY YPUawASO17ZgRsWJh1NDgR/tFX8OtyUKpuZp7bO0A49+wfICGBrY5SSf PwT7peF5iMVhD+ACUTrOwDhv0lnBTpGuWOW/yHYyBHFkZVKJ4idH71ig C0I= dhcp-73.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uwTVAzFaDJuphWJb6choMyugXjyKYm6rXfguC24V+nvlAHeh3BIxLe/0 49QD2tGU84w95SphQ8CJESvzT8QLCsUY72Qe/mltlEUyU2he4UVOhfT+ uALAuHHsuVK1BYMEei8M9lbzIKxEuQlkvvipmVntsJKuQzk/MEEvOeCg H1E= dhcp-73.nlnetlabs.nl. 3600 IN NSEC dhcp-74.nlnetlabs.nl. A RRSIG NSEC dhcp-74.nlnetlabs.nl. 10200 IN A 213.154.224.74 dhcp-74.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. AWgqbjTIgPF1ri/f4Pyr1zL3yoJQqc/0bxnJ4bzsgndlFozR4+vmzYd5 CRFq3cn9DRgym9FWoBQetpu7El7XMkUZiaTjvTdqWApT6drDj5oy/Y4K 9V311LgB2bJZa6lqtHGpAZBxRVNv3LA23LZbh2jf7aEGPGHIRLoVd0RK hHg= dhcp-74.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. 0l7FMVD7a+Bzs945ACYI1ZGROGGR1jAky+gQVVIg4Pq6ZhsvGeaNQf02 wXaVVWuFPBjEx+x4Of7eEODJCf+iJVul3xOqqhC/BFfyx7iJw/OlJxHE 8KqRTv7gl55ALe0uNKQiDJVBbU64MdYbVVP+qG2sq9oQfEcjZCvdWK1R 2Ms= dhcp-74.nlnetlabs.nl. 3600 IN NSEC dhcp-75.nlnetlabs.nl. A RRSIG NSEC dhcp-75.nlnetlabs.nl. 10200 IN A 213.154.224.75 dhcp-75.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qS0cWJF9i3B0L4iQaxc/YNQmVr9K2UUss+Tem2gVsAnv036QaUPJ+OEC 9UQfacA7Irz1IIjqy+cLvFzhcQz8zF2BpbMzLtqMDxdKFMjFjFK8zHXO 6suktds/aOnJozjY8dkoGzRjwNIEONDD9GssdA2n5URuz0ajrVUUdzim 2/M= dhcp-75.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. g/P+ct9lukoI7aLgMf0L+g0c2cDkiz2mdBV4mrXyd/oWw7nNa6FmESSg 3hzClw8nMdrT7iP8VFOnUKj02MMmuorpU5qqa9VbCBqKyRmfcamg7cGT Z6Pl2vGT1X1nMTpV0+4Qdq2b4AsH7zbmbI82/Zc+2rXVUF0EUZTCTp1Z Vog= dhcp-75.nlnetlabs.nl. 3600 IN NSEC dhcp-76.nlnetlabs.nl. A RRSIG NSEC dhcp-76.nlnetlabs.nl. 10200 IN A 213.154.224.76 dhcp-76.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. H2b+Ow0kP+Fay8l5UOwH7cpHjojilvrx6EnsbkM1xLpefldTXQ4aOAgv 7bcuwC8eHyn2dk8bhQHZkHM35uz1Rp0Iy8lM9a8PfS3JeWDYWWUuvnQF mkA7eXyXPbEm1bAgjw16+V3h54H5GifykZRqvugcO8IlBRxbVMFiBY7n 67Y= dhcp-76.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Kc3laYt8WstgiTpm+C3tWOMd+APZDgTT/m1WuRt8RUBEjyTGleoQ1mFc JtM4PQBl5iQRywwCYTmPB+2xqoU/+KE7te19dAFGDUVP9dXFgqonrfTt kf2FaOErgkZRffqXzA2UPVuUm0F8ifku5Vu566bnMFjewID8VCGKas5A 6r8= dhcp-76.nlnetlabs.nl. 3600 IN NSEC dhcp-77.nlnetlabs.nl. A RRSIG NSEC dhcp-77.nlnetlabs.nl. 10200 IN A 213.154.224.77 dhcp-77.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZA83XwDYYPyGxwn2iKBFi2hB6FoZB7l08yGkeoMKEVEHnKfKiK2fzqs4 MUKzmmdR9JFzLZr6iC8ht2wtk45aVn3VZvY7E4RAK8npjzCpCrHNuJ1i BlxI4HkeC5eeXWSJ6w4osMIxxl1XT/vDOSGar+NUVFVnQEDGKw0ELpXX 6ao= dhcp-77.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. JdRoIL8BKa+XxzG/PtxTsvxLcHwJGTmDvucK9TD7PSuUnb6UtFdbfDL8 +aeKmgGKuzwhj8Z1kOvEC1quP9daRFq6uGlrWYk44A4/c8rzctxZ6f3W c7lQwom/07PFaMN3Qu4WAhUqnv4DpHsqBRbfe9Dd9MPHq5sSwRU0warJ 0YA= dhcp-77.nlnetlabs.nl. 3600 IN NSEC dhcp-78.nlnetlabs.nl. A RRSIG NSEC dhcp-78.nlnetlabs.nl. 10200 IN A 213.154.224.78 dhcp-78.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NPN9M8Xd1cdN98NXpuO+4ahrgKZPfnuuRua9PmL3bxNm+3pgvN1cBx8t SHFyIwF53ixmAdb2FH8uvVA8ul4k4GbeYsrLfEtTx+lWL4H3x7cpc/qy 7lZeC2QwZycp6V0QW79npvxJ6wihWskJ6TtzAXPon3jBWbQAlMGKeeza tYw= dhcp-78.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. w4a48Iyt/pbEKMuWlyZN8H1/uh45tWAoi4zxMouz2ci/1TRXWcCLlPAm SXp+hoQfQahXgrTQCRMuzJ7AHmbmW3gh6l2Jz5csTEi26ewhca4ATDtv ANHlGtVATEjWRbizWQO/R8rRfP/6Avi09ry7ktNcEhrSHWUDOKmdlCnQ X8Y= dhcp-78.nlnetlabs.nl. 3600 IN NSEC dhcp-79.nlnetlabs.nl. A RRSIG NSEC dhcp-79.nlnetlabs.nl. 10200 IN A 213.154.224.79 dhcp-79.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GzLz1jNAIO2AiXQ6vlkndvMsPN545TAcS8LOaNPz65ftrzXcUuOqM0BV bVoMetflI1TMMlqOTKw9UUsar6DhrqS1sL036pVXdvWKljeACwQ5oHKt KDreHedGuVvBKv7+vIDQRT4VGmGuX/O74hcNM688UOiyKgWo9TgTPf1G 5Wg= dhcp-79.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IVkCPUYFPZLLGYGWghlwupdQ14iJHcQZ2m+Ny4ia3BywaAc5f3cGzNpe dFBp1I8q7LMcm2P25biuM1clF709xYTWRLm3sIfwNaXAVaobN7Ion+kY YE221qI0Mv+O3RUpgN5hHXPErb6/TOCYArvZ50mSJIf1lA48cfHFw9HJ diE= dhcp-79.nlnetlabs.nl. 3600 IN NSEC dhcp-80.nlnetlabs.nl. A RRSIG NSEC dhcp-80.nlnetlabs.nl. 10200 IN A 213.154.224.80 dhcp-80.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZCRRQVYXypW40w9F+hfsAc6rF7E7xMDU8SESXUs6dQgdmPuOjZrKfvvX WCI9QxpejQLy5sEjfwA6/Hdmk8Hjv9qCFqEjjbnfD3W8MIKq8lPvtEgO VxIO/2emNJYMyu4dPDHQXcIeUsJPjP7eOlxyLZ0ewpVp+LQNDzPeL7Q6 yZY= dhcp-80.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ASaYT44VFzmz4/sL5KvE4jrJDsHjdFoZjnSYEBGNqNDjv26gGSNdi0x/ axd+CQgJp78VbKlGZpu0/hRIk0hSaz+ObuvraX8BREKHTiVcEAh4NMBh 7Gc+45m6Etn9csoLYYo115Jl9ayg5HrotSyGPqWCN7BPsczDfX7bRe9n ADE= dhcp-80.nlnetlabs.nl. 3600 IN NSEC dhcp-81.nlnetlabs.nl. A RRSIG NSEC dhcp-81.nlnetlabs.nl. 10200 IN A 213.154.224.81 dhcp-81.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. M8w7UUEexw+pHp1ctLbZEBa2NnVYwo1lMH2dKCmUFmZxAG5XzujJqFZ9 s/i6/iHkxNRfJg4GULrwHAPIHnfnTxQv7+bnmXXURo4wLzDh6ZHl5OEZ nWCr+XcWqfrH+8+QpObg/8zGIeUm2VuQShKzJE/ZHtOW4ouc9xSbkWp9 fXE= dhcp-81.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ICQa7ZO/BjspwDGBtfurUVCzbmNj9nUw5K+tFclQTfPAmjNd25eCkWWI NDY4Vck/os7uVqj682icTlWOHhYSxbsHWMq7e0uP9HGPV+2g4LpA6IRx ub6jff8EKVoJpNvvahPDY/CO/MVTmAeZSlLM6/lHKrwkYea7o7kjdft+ 9vU= dhcp-81.nlnetlabs.nl. 3600 IN NSEC dhcp-82.nlnetlabs.nl. A RRSIG NSEC dhcp-82.nlnetlabs.nl. 10200 IN A 213.154.224.82 dhcp-82.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. vXjzMWB/m5cXI6uQBz+elLFCares8gn0NIVA3E98ZXHgGiXoLdRbj1Z8 jIwgayoSYFSbGq0lcPAmfKt1X8UyYxXGGh1/YMI7Q/9VWsOzyzJqL0t1 PpRTb6V9F+hn93Mb8RJvdrLifllp5hl9WBGMXyWmlQf2aCpEHSq+FF7+ uEE= dhcp-82.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. eKeRiBD/B0qM1LojbBp09CLGet5t0eYObVtoWLGaFAiwsSADHWA3gIpw j/8UGmB1oIK6UMZb5zG0+TqX7iVdYq8Ea3ajdx8JiuxM6FFlcDGeBTl2 cJyzVrWU+H0rwrgQZ6hMhom6kBYwEc+hnOkh5qw0mEqu5t4S6LLiOlEj dzA= dhcp-82.nlnetlabs.nl. 3600 IN NSEC dhcp-83.nlnetlabs.nl. A RRSIG NSEC dhcp-83.nlnetlabs.nl. 10200 IN A 213.154.224.83 dhcp-83.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. q+CzNbwmtha9HTg1IgAzH1aGihD2MyyDOhyBAzOdeLeb11tj/bf7y6B2 DelTamBRsy67ATKMQTbP/gae2UM78HLI/yjRPDRKRflo0wMe/GtSDCB2 16WXv1jq/XcoUEGLQPgGV+CqUNItX2D2qcTeHTNa3WF10nxBV/vxU5Kq 2D0= dhcp-83.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. elF/Z6gta8Fp1jY9WbeAseOaFRWN8RszOLs+FNJE8v7nG7gPFgf057tK PE6RqiQSO1BXg59mWvlNVBDJsBLVnVaAnhD3INgiXSUxiaq6Edu4ck6B VM5lf6eR9NlN4VtV16vqBtM8TwuKhuuZvjrRSW2cKICoN7VSNiwa6iAZ 3mU= dhcp-83.nlnetlabs.nl. 3600 IN NSEC dhcp-84.nlnetlabs.nl. A RRSIG NSEC dhcp-84.nlnetlabs.nl. 10200 IN A 213.154.224.84 dhcp-84.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZGdiBofIRViyL4ycx+BMKuwP6tZGJMFjvC6dZhJq8M++oQ0CSyiY5LEp cbXOb5K+h1INY3zNT6CskrGpmFs4fyeIBpPf1wc/k2DeZcisnA9dCSLW WLvjgG0TEei4y9xfntjo1YkRnXs4ecCn80mAKHlZNbTDgq+V82IXqLHb tIE= dhcp-84.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Cl48z7IK3FPUjZrmWhv8AXgJPw9nhNPM5uIVwKnmzKNcXeGpAzHNFPDf G3GZE6As7aqOhpzlfnjy8m60MFj8QmYxHHpjMcWFTTezQs5tYSUWAzFT g7GPtqL2XvQTZzwrfUUaRY8zfDgYvGDQ14Sx3CQ83NkFyFG5aIX2oIAD TlI= dhcp-84.nlnetlabs.nl. 3600 IN NSEC dhcp-85.nlnetlabs.nl. A RRSIG NSEC dhcp-85.nlnetlabs.nl. 10200 IN A 213.154.224.85 dhcp-85.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. SG9wAx5uBszJ803s1GiPWhB1undPB5mJl3oqahsA/Gahrxs9VhCGBkc/ ESJ14ZIVUMpHySTIFJ0t8mnHPCXlh+93g1UQXC2xr9g9RE78tUgwZc0s A7Poa21zMP66pRs/OJ9u3m6KO8dsl/9bjx3cdNdi5qdPlm3ryF9x1BAN JIU= dhcp-85.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. EbftONeFDkuJFXZOuTL9j9OMLKFsY5KNRz2VFN1XR8xZDDU+xaYJ/CkY XevAWpz9WZ4ni3WyJkjCv8xFAdcUuy64+yB8HLXfiTOivrYMpOmzld3p zpaDkwPwK+viVi49RlhaUwxOoM3omTSEQh+uxEkaBCeJVK2Msa6MYXLq QMY= dhcp-85.nlnetlabs.nl. 3600 IN NSEC dhcp-86.nlnetlabs.nl. A RRSIG NSEC dhcp-86.nlnetlabs.nl. 10200 IN A 213.154.224.86 dhcp-86.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. BLfZZDbFwLsfUDFaezlBXAWOMehy1RUbh4cpUPuyU1qYvDzFS9mg5nP6 /20HE4gG2sWGl3LgxE4znuVUgRnq9+5XJuACc6k5QnCrskK7EUCPaZzy sp3ozGciDwACRl46fpac+9Yh10oBqtiO4nlciTrW0FaKsC7dubBP6xuA BB0= dhcp-86.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IXFyXivhyT7VHHtk1AnDBBv9s3t8OBdIG7pvBlASsL3hqSQxkXHdqqTc 3AhhxhmzFNa4CIrH1usX/FHB129s5LWk40xYY9RIg2yR1WUx79iS+Sbc SWreO0UEUXrhv6xGq8ZWGVB75VFwBAVsMuJbElDnftDk+/EsJ4MOGY1E BA4= dhcp-86.nlnetlabs.nl. 3600 IN NSEC dhcp-87.nlnetlabs.nl. A RRSIG NSEC dhcp-87.nlnetlabs.nl. 10200 IN A 213.154.224.87 dhcp-87.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. gOeTc+6oFsRc0G2AcvOKmU04YgyC/WCs0gUI9/VwvrsFf3VDV4Bpxl9a ZD1jWH+Kdba3p5ORS90aZei31keJrznYdPZdcVhpQTqhMfiOB0bODtbY Z7dX0hXtq5yog+7/ygljQ2cDo74qGyvVMx1Sca0xbWvGY3RHnxX+dsNl xt0= dhcp-87.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. yOQQ6WBjTVwNEGEfwb7dZKr19ftGvwr3uoSJJIgxvZSfkyiW3KkfqFbw Db49Y90k2Oor7YUAKUSmDOMQ4LpnX0Mv9tPBBtUQscwF3kbyY6H1SYqk joaf/9RmDlwyyd2YOUONrGGbOocaGNxv7+Pqrks6lzZTGn4KnnApxCn6 aUI= dhcp-87.nlnetlabs.nl. 3600 IN NSEC dhcp-88.nlnetlabs.nl. A RRSIG NSEC dhcp-88.nlnetlabs.nl. 10200 IN A 213.154.224.88 dhcp-88.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lIHnuKf1EEIskdzlR4kuYYwkAzssyeAZtsF+szX7zI8+0mFEn8pxlHmq NnWz8ROE6UmnDQoNK5Nc3TTNJ6pvFboEnddTvrgg6HB0puJMHwUt4u1N 7CTMeUGQgN5p3ZPVxY6pZ1MsKY1hvw6ofTsEtKIO+81t92gozqP4vUJv kgE= dhcp-88.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ptBWx6CxdGRvSchZLV2D0IF7aDy0eWCo5A/KUGE/m2FRHaOHQRlmR0x7 AfLrOjdDSK/3K6qUQw2nhFi+p2gIeVxP+Nk/pF7RHLIg2PxT04QUG3M2 oHSlDSYqg8fzDY6TM73gBHl0BaI+ZWa1/m7h43LUePtkGjV5S1WqrJr/ pUw= dhcp-88.nlnetlabs.nl. 3600 IN NSEC dhcp-89.nlnetlabs.nl. A RRSIG NSEC dhcp-89.nlnetlabs.nl. 10200 IN A 213.154.224.89 dhcp-89.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. AoswLa98YtvjQTD8YwU1JgoMz7ecEkp3/q/JYhUZmRHPsbOun+QbHK8Y uhOq36oU9MhV29KhyP7Nu9iELKgdGKPz+PcnGFq09AIbDK66TvIh8Dmi iDfVZcmjo11Fmi/qX+uXBjoqpnVHsrNQPXzCIkNj3r9gevTLRfIjNivU cFA= dhcp-89.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Sb4zQ9crmTNvkSZl1UnfViVLjmTgG92fB1SqIgm9zGLhQdQAKLnOV6OR f+Tr9/Vv6BOgQhdn1oRCmalqTZkSCiP8zBXs8PQIa5LLzqynCmZL3SqD Oj3JEm6ATJFx1PJjD6+Um/1plUsZB077+j3gqGFysMzTtlDpkFXXklm4 Qhs= dhcp-89.nlnetlabs.nl. 3600 IN NSEC dhcp-90.nlnetlabs.nl. A RRSIG NSEC dhcp-90.nlnetlabs.nl. 10200 IN A 213.154.224.90 dhcp-90.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. m4wKKGT4ia7rffslLxF485pu/sHrtMTRDsSeJPOmIpb5uddjdVwH7wcx mstIhIh6pMX7UV0BaoIE5UMkP/qffaGsW7hoC7XKzoB81RFvtGrkVH/e H3ibvyynnlpE3e8/pNbIczNj8XODx3c/P5cS4croSnUVHREMvlB1uAFB yP8= dhcp-90.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. MEqAa805aeIe9g8RBg5zwmqkb+MdxI6FdRC93tm47TOPrw7wR466Gxus ylkeK48qtVMdXlU+728bf2gtbFibBge/oQGiHVv/7ZB623R6E4TV1gUp GGWq35JFf/NkE78TSbghMEvV4y+VrB66KKQD0ii1HZojJ72sog2JEz/r Xi0= dhcp-90.nlnetlabs.nl. 3600 IN NSEC dhcp-91.nlnetlabs.nl. A RRSIG NSEC dhcp-91.nlnetlabs.nl. 10200 IN A 213.154.224.91 dhcp-91.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. EeQa3PniFe7NbN5azEk1SIOJLibyH1MQIRkzYQDq6u6hqnX3Wp6E5wn3 xppV9R9Pzq14bqJHof5qoEZLgqQMUYcue9o6KQWmd0QAQFdA05CZHvxb 8MGqkKfRgAY7qyFPWKjfLMAVbrevUZENiLQRYB3ytfXjeQ5s3VZFY8+p TiQ= dhcp-91.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. YE3hyNR1oyQ3aDk3gQ/G2rL2711uOy31McHQlSr8qjgtJqSs93P5gHbU XxEuwTrcv7TsAYNycDmF0xs1IxlWUqYEr9JNnnrIV7LH7QmecXmBApWl d0gLjvPy4Iwc6CcJwngHFS5QnTUoDuPL0z6jKT3C271IDFhNAtmi+GnA wy8= dhcp-91.nlnetlabs.nl. 3600 IN NSEC dhcp-92.nlnetlabs.nl. A RRSIG NSEC dhcp-92.nlnetlabs.nl. 10200 IN A 213.154.224.92 dhcp-92.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. odb1aRYAudeWLxXgzxyjnbEeWZX6xANmVHJSu41JPc2C6NtYkOcCDGob cveFeKWGRLoLGuvzziyy25R5tKd0oPgTApgvdgipPMysvi65anMsJ1JX UT4RNYTbWhg/AnNUqzOBMNCtXFvhrujeBEXeEo5qPU6l+m7tq8797qbs Cww= dhcp-92.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. J8/VtPwfYRT1u40hS+teAfOAAAPlLh1Uhyix97RFZxbStrv+RKpa9xi0 yAnNn0O8Uve7ljMXbTvho0g/8+My/+z6dUl9OoNldAQT+mSkC198GaLg 5eDnPQ21d+44/l3RFZSpT2GXG8EVDXeIKreiifzV3zfYlpN8ZBMBdQbt 7WY= dhcp-92.nlnetlabs.nl. 3600 IN NSEC dhcp-93.nlnetlabs.nl. A RRSIG NSEC dhcp-93.nlnetlabs.nl. 10200 IN A 213.154.224.93 dhcp-93.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GokQ6hXf1AvLsTxa7ZJNj7dwX5iQcdBChQW/Z7eKxC6q82vxVw/cIb1B hlCzwX0JHPd5EOkB5aP0bqDQSlYh5p3V1GYMaS0ybwr2YD/Ym4k3vmt3 DN5pd7mUSvIwVUu60HMMN3s17vUP7Gx+bIERRmTRHu8v2UN/g+QKAnKk jnk= dhcp-93.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ZbQ04z7vrmOVCThvngK0C1jitxVknhCSh8sf9g+cG1tlNO2hmrivPirf BLyo4qxRk2Zr1QrK/9MgYNgM5eyKMMLFxPFbvXboFlH1dS2UawmSbw7C QoRdfF/t8TRJIE4FxYRYln7nFFPsIRuEvu73NCPRPg4z2XsBrmAL4guo a2M= dhcp-93.nlnetlabs.nl. 3600 IN NSEC dhcp-94.nlnetlabs.nl. A RRSIG NSEC dhcp-94.nlnetlabs.nl. 10200 IN A 213.154.224.94 dhcp-94.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. vOM4fWRgZS58MXYWfslqeRJtvqmWpelReWjYaUQ7GAEycOxHQauC+VAs QjYHH94yWRzFvwYs3mHN64ug9ZbJ932auPjJxEM3m23ST9x8jEEaoC27 zny8h+soh4aweFKPNBUCcBkZT4l5helz3PHATapM5avFaBa+pLqkH0id SPI= dhcp-94.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. YkGcm1D35WWU9priB4HlIxcZTg/u4WM5jZwGZSob8PRdG0dl7GhWr7nu /l2FFDcNsLQVLN6zbAl4SO8GzTKlWZjMS8nnDqq72xq3RNt9nnIuAnul E0BvlMP0fIujcoVL3c92IoDCsVKfgPR0UaKFrI9Wvz4VylH6IRkHAGLs zPY= dhcp-94.nlnetlabs.nl. 3600 IN NSEC dhcp-95.nlnetlabs.nl. A RRSIG NSEC dhcp-95.nlnetlabs.nl. 10200 IN A 213.154.224.95 dhcp-95.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fACDbTKIeKkFF3C0IrjUjycwHlFw/cAUEmKYwMm2RMvooXGy7jX8ty+0 fVlJWemK2jgU6qgSOV8uSs5k6ZNke0li4vWjQNqqqyTaqLGB1ieCJIZb /NAv+G//cjUbl5t7+1DpKcBftM0slh5OfvNcf+Rk1v8H1bvjV5cpBMbp ec8= dhcp-95.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. pOTdop6MfoIUo32cQfgSDjuePRNHgElz3la/q3tz4d5f9mp/QBJR13jr ZMDZrMM4aNTW2jBRxQLtrjVNusQebiewUYfepR8Md0kff6odIE1bHqgg TmgWm/4Z8AqyuGQ2QKMCvpEefFjM6QJKRT/bZdSNRNhszp0Y6cW01Xia xWE= dhcp-95.nlnetlabs.nl. 3600 IN NSEC dhcp-96.nlnetlabs.nl. A RRSIG NSEC dhcp-96.nlnetlabs.nl. 10200 IN A 213.154.224.96 dhcp-96.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hBZIoNwKx4Rmd2lW5QNmMb9XD4WUMeV3NFRwYWJnec2j4aJgcs6yIv9K vHNMfwDMHm+L7Ls76zrUxihKXWjAv7M1RQ8uMgDZu9pX9UdMZ94FaQN7 tkFwnWIHhsVp78N4M3V5dQOePik6xSB7VpHj8RCEGa9qrwmfjkgZM1FM IGA= dhcp-96.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SUBVfNt1GsOtIG2Ciu8tOESaTaeZY35iOJzUrpLplU69ETAkeo+5gMwy KOI91pJc5eE7fPjxtEUSx8Hz4/umYP2IxQwwxgAwfF3d4X78som1QV82 At9Z/YUSBZFHssOBdQPRN6+raNv62e/JdSiQuwZoEmOp3p0vzm6cbpck Na4= dhcp-96.nlnetlabs.nl. 3600 IN NSEC dhcp-97.nlnetlabs.nl. A RRSIG NSEC dhcp-97.nlnetlabs.nl. 10200 IN A 213.154.224.97 dhcp-97.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RUJnYkDObSu9v0+sgucGwxtqvQhnfoS1rblAsFJmhDVsWLmurkgb4bhA 3Z3P1DCxXzQcNduywgpxje1YzoLfel4Efcq4vCkSJI10GYMIAz8WamiR C3BXSuV2aGXI3ysEyQ552UQRx6VPegIoDthEw/rndE5cmpKEQbOEq51E ACI= dhcp-97.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HNbj329P0QDyKkhj9pq+p0Bn3caI5/B2r31VuAsa+Bg9f3cooj9DywGl GPf0MqmjNGxLs+D+1L9nlGD1Z640FVxQomOhUHtoCoITa5MHC0Taf6v0 7EozUOZG3LR/xxl6jiRwdkcCGeg5edMM4ONaf6ZG9lhLhPY8x1KhMsaf 4Ko= dhcp-97.nlnetlabs.nl. 3600 IN NSEC dhcp-98.nlnetlabs.nl. A RRSIG NSEC dhcp-98.nlnetlabs.nl. 10200 IN A 213.154.224.98 dhcp-98.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a6IqeJfZZ6zgooMeVKiniD2Ib05Q5BBC2a2LOZNBxFfx2KMQHPLTT1g7 73Trq4WB2iLfXuWvPOC98LWQo8UdljRd9sL8IW6xngSJmbDBd94xOp0h BGtoqOhr0V9Q+roPLnT1/iXjpNwY177yKhi+cOrU0jJaOdlkKyOrjAJx yx8= dhcp-98.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mxLkQ3hbVv6pkUshPfEVwXXBiFF/3phMrTRKQW2zlLJG8Cqg/zeJid0E tsexQuDyhujfRlA2ikjpCiKygPSl3xa+duDs7k+y2h9XBMW8a61ffNhd 8q84YMVIM76aP60ys2Qib2f7Oniz/d4MrgHeRcZ+d/thlSrarWK0bQTg QwU= dhcp-98.nlnetlabs.nl. 3600 IN NSEC dhcp-99.nlnetlabs.nl. A RRSIG NSEC dhcp-99.nlnetlabs.nl. 10200 IN A 213.154.224.99 dhcp-99.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WWMnYGUPrjrxTtK+t/p7L3BmBI7adrcS3HeB/i0iIb094eSnTkQxJE+B zbH3gyqUoW5G6ptOflJjFw3Thq0LnGOICjcOhJBreSCLKm7Q/coKvCt6 B3RM3K8M33sXvbxCrSK5Sqv2L1UZRgwtFPQPIeiqBFsOnvqB+bYc8Dgi ZyQ= dhcp-99.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ffNktmNK2e1/XwPpJUfZKRihKWw2EuDRa021iwM12s9s68VD27xuYJc+ EEuSaHXdpojj4rhHT7FwYidQ9anj9YmHWWjpDDrC1W3xfnGZCRJ9+rUq VvNPIRXPTlegM1Cp7P0iAaO/PKrtNZeAatZY2yfRTAuXMeiZxJcyzAso 0yg= dhcp-99.nlnetlabs.nl. 3600 IN NSEC dicht.nlnetlabs.nl. A RRSIG NSEC dicht.nlnetlabs.nl. 10200 IN A 213.154.224.250 dicht.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. n8bJy0Bkmmq9GF2zpJKe+n6V9S1B9EPERA5n+zDmJwMhvMpePn6qRLGg fF2emqBFfJvNLlncew7PyYKzzxu++RymWHyH4IX43YShoss7wBT3G/A/ OeT3jJ+zW0aXtgmS2tdrjzP3JSgJiFaXmVCINovTs5DyLCG8kBQj4Z+k XJE= dicht.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. TAlMvsabV3ZWeRSoeetSIzdFn/mN+sLGlB+pGzH4k0pk0qXN/rcXfaEj h2/vA0T3lt5CNweycTD7XYmBXuheGPty5VXzK+UREtPgD7XM7Z5IGLmv OpyOY+l0eOqkipcSisSWKIGuDP14/H7YQ37Sc/cJC9sZAlz7RirUJoQk IsM= dicht.nlnetlabs.nl. 3600 IN NSEC dns-lg.nlnetlabs.nl. A RRSIG NSEC dns-lg.nlnetlabs.nl. 10200 IN CNAME bert.secret-wg.org. dns-lg.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hIIL8UumgIknySm5rI4ORn+Aqese+Na6xnVcUL4NQy2ujSkB6opZm9Ow X2mTZm+LJoI4kl01wOOLVZhpItXzKlpJQ/iV0/Qd5CEbwyu1QiGvcSpR vsaJuFYh/XfUw6HCJsbhcGYxVgz9Gwiy6Ni8y71qpGluUf9twtvlYmT5 T0A= dns-lg.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. PU0Z/3EbG4ipN0F+iNTtjZIMoUj+dnBDr5ahVrzlhE1nm207+2GKabWb X+q2VTJKGzSR2D6HUAW7m1qgBc6xBADGCKnNL4tCIODk8HytE1Y2y4B/ GNE6Z/tq8GwrS03WRZoh7a9qIhspeYXGUoE/HPFhYpoNGKn0WEsSR8kG 1Ic= dns-lg.nlnetlabs.nl. 3600 IN NSEC osx.test.dnssec-trigger.nlnetlabs.nl. CNAME RRSIG NSEC osx.test.dnssec-trigger.nlnetlabs.nl. 10 IN TXT "0.12rc40" "ce58e1380de2d3d265f53a102166856dcffe45bc4ede4b623ce6ce0a16adf1ec" osx.test.dnssec-trigger.nlnetlabs.nl. 10 IN RRSIG TXT 8 5 10 20140224111605 20140127111605 42393 nlnetlabs.nl. w5ULN6uEWRHypv38w+LsCCogK4zYc4iZ8mrPB0kqs00JJirfkYRbQYio YKTM7nbl4WLg34YDyDUPEaTV9Zf8/8QKK6+liu2WYSTK1/KPpf0Y+jUt dtP+Pl5dbW4v7B9Jnx8Zp0yuoJm1E/vum1/Jo6Lo0sDzvpZSxNlt18LW FtI= osx.test.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ddKu7DDQC6Buchh7MjDR5xb+s3JyDcH7R26HYl5mphf2Wlk7OvYbdhoE KjgZ14ppGMHoaayvGhkS8n7GjIFOgU6b9IAQs9CRHMORJq/WAkNSOJkQ IMffnsThsL8hJIQP0OIeQu8SWiFgh2KMpfa6UwmOV0/KrpskpSrvH03O x8g= osx.test.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC src.test.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC src.test.dnssec-trigger.nlnetlabs.nl. 10 IN TXT "0.11.99rc30" "f77e343d753499309905bf1be4ea15fc0f319c2aea20b3e501e0e4e556605f65" src.test.dnssec-trigger.nlnetlabs.nl. 10 IN RRSIG TXT 8 5 10 20140224111605 20140127111605 42393 nlnetlabs.nl. TPmpfD3VJ1doWZfKab70GPuPkiXtRliQgPi+8C3tPp+lnGvxU8OrdNJZ MEbj4MueAHWuve5QRaShjs83F64117Uch9FZNCzOKtcdmflk4uALxNIa ClaemyvDW8rSALan17Kn+K9xgqljwPWwO6RZFJkIoRoJl+kRpQNVaYiX PX8= src.test.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. z5R5GN4OXqVN/f5LCTuwyjtmaR6s0VGHj+8afOwguTCiHByjmy/P9tbw RdtpKD9lUoAcLYnLmJGy8WYjtLcXWFwF2UxFPz5dPO3cvsXdB/6ctVUd 6tZJhHgJoFXZ4q/8TuaLWFqJ+CHzBj20/AJ6CXEKL4mC3QMMGFGKvATW hL4= src.test.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC win.test.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC win.test.dnssec-trigger.nlnetlabs.nl. 10 IN TXT "0.11rc47" "634bc594b013b4dc2a0e2fb959fc7ca6fa152b8a8a100e074e1062beda7bd9dd" win.test.dnssec-trigger.nlnetlabs.nl. 10 IN RRSIG TXT 8 5 10 20140224111605 20140127111605 42393 nlnetlabs.nl. TmRzAT73ihQ5sp8RUoLLM1mG6wQ+b6nqgid7UsYVddq6+2dj/6igItxJ 8j/fYjnuvPALTe8Ic6GeTHPl3R5jFVbF+WOORvttcOsneNZKbl1MaU/1 3DSLZw1uGISWRZ5mwQi38gtHylDNXBYroPiL7QnW55DsRKljzZaqFtp2 7n8= win.test.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. zcvRkafKtjLxjVc/6eABvJ6qmZr/ZHtWGiwPJtYEA/8Zye6U1CA2Xuj1 10XOmTHpkmwxPkNDsF6Le6Mz7uzzzP55rhia7JLe1VKkhvY4Q76o6ddv 4MQQVDoLNg+aE+jQvsz+OI1sqbXOXgV8Gu9FgqqJLqn9es6lyIxOGjk/ Re8= win.test.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC osx.version.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC osx.version.dnssec-trigger.nlnetlabs.nl. 10200 IN TXT "0.11" "77565ef4a25f07383c57ae4d96cd3bd5fcfe089301f2054ccf20fc636c76e710" osx.version.dnssec-trigger.nlnetlabs.nl. 10200 IN RRSIG TXT 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Fyop3FKPArhWi3ZXSmUNbQItnOzxSkolK7Fzt6wUie/tfmHLaAOoBkC/ cbHwU0MaMkA8lVqdb+fnXd/qlPcCrVBodIysOtThzLNzemAEsOdIIPB3 KoqdUSRgp1+w9JuxRauD5VOQfJVriLDUyn8YI2jLwV1fyAZpTiNX9cMQ 2CA= osx.version.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. le0I4Ws8ic5JVy3Ta0LTgUh3mwyS0JS6US71LBlF/7D4uvYlKhwdIBIw O5HbENTXAOIDy4bfNEGf0IFerLWL1XfyBpCgdgT+V3Cw03kCJysqsEN0 W+kFHl3k5QYAikYkLG5MzHSsrLRE4PGWXAawXOQ/QKfu2ae+egb7lE/r PDA= osx.version.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC src.version.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC src.version.dnssec-trigger.nlnetlabs.nl. 10200 IN TXT "0.11" "c22cff6a51f0ae8e07393ab7935d44faaabfe3d8341ba8bb85189391dcdfd9fb" src.version.dnssec-trigger.nlnetlabs.nl. 10200 IN RRSIG TXT 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bK6Bg3Pj8BK21dYdt/RhtqHXzwj+DwyDD8aNPeqhhaEUmzD3sFOk+5M+ BJdNt98mv+H5qiy0Uuno5RYX1j2ltPzcRh0eUB1BBa/0GpREWKoyhlnH 9PsmCrON7eVvi/VVM3xg/NH27tiULuMhe+oK11cHobtRJ5ICP8UfFC00 g1s= src.version.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. sLAIguOrVz9g6YSqI5oeQV3TiHaFyax9E+v7DBzkHmPQxLJqZYLdY91p xWX3KXkAZt0y+u0DtbyzfVxeNQoiJCQqC6U3GnoHe3rfVB3gWeKwC+B4 EboPUZAF9yJ1hXGbLUu7Zrsypc0hotnIGYKOtsN6rRYT6JR4D1wwWwuZ gUs= src.version.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC win.version.dnssec-trigger.nlnetlabs.nl. TXT RRSIG NSEC win.version.dnssec-trigger.nlnetlabs.nl. 10200 IN TXT "0.11" "3fbdece3828852f040ec23886efd10a5d2a4286f47aafbd718a36077dfd9e10d" win.version.dnssec-trigger.nlnetlabs.nl. 10200 IN RRSIG TXT 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Nzh+wt1Ha/sFk5Ut/zCguW2Aa+mbnBjlz6DC5NaxyMisU9rUGhRdwHNJ QJuOdLTysioq4pjeRClmwdwjUXtBEfY3xJPN5oacZYFHKCQsSc0RsL7n zUT5+WPI4YU9WfQnEpvcTS1YKcPPGws36hKRzO+gdNio5nZcna51+OTx pN8= win.version.dnssec-trigger.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. xMqs80ul6cWNsa7ErEkkO6giaAj1l1TJB/v4uAU3ySM+PxTCt30asx/A UIrCyxksxXKw4Wtwt1uC28em60E1IIT7p+YKrZO42idOJwNRBzbyDu1B jSac4zyNvojahBLO1AS3afxmfrtqAFudgxZjE1aQ1YHmayj6PI5VTVmO E8g= win.version.dnssec-trigger.nlnetlabs.nl. 3600 IN NSEC dolguldur.nlnetlabs.nl. TXT RRSIG NSEC dolguldur.nlnetlabs.nl. 10200 IN A 213.154.224.13 dolguldur.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. eRpykwVedfDa/9vB1TARqQX8L0X0k/0vY+FToQBalciGARnbUryoAa4W g/EBx41siCHDTS80rzgxgy14kBRzj0Olzvuhk+k68ePMnPO2D3XgUsQn G4cWVZh2MecqloRh9gCPXWDPwHAkqEcTr3M60MUUSUGY542bs9qN5m1s eWM= dolguldur.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. obwAow1p6jiSTdPaoammLwaksxPxlyuumuqEzHTBautVjgRaNDP2V80w D8PeCUU/lo1MEsj5vT8mkmhVGzC75uHyE/WWWADG6tFCrHSWJO1PoMHN kdvbMVj3EjNOMTfuNA3sAtXwq9fUZVU+XAWrC6Oqt74rnIlTKL2Jfmw1 KCk= dolguldur.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kLjOhTZGedE61rhZJrnYbQNjGKNRQEFWAcdFi3zkp80JiJ0yn18P820r eahWfv9pYY7OG1zBCnsF/nTw88vOWsU/TuH/1iTCpuf/hWVTMBscrCj9 2rE0MsBH97shmnFQbYD1sjIi4vIJ8U5FtRocDMi3jyv2TjuQ7HksdTgr Ltk= dolguldur.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Fqz9aGLeJisB4o0Fha1DH7nnOCk4okgtdzJC76VtTyxKDrS8hX/4p71v PTc67JuQIjg6djXaMChFXn5V6eS/GG5Z22GF8XLSG7aAuilFQGwSG+uG YNELeoCif/DIOWZt2ZtlO48w521p+5H5uybt/K8wqHkkT17ENRShKr4S lEs= dolguldur.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21d:9ff:fe6a:aa56 dolguldur.nlnetlabs.nl. 10200 IN SSHFP 1 1 ADB23C8980AF34D9A637E93EF6B19A8F44B61F9C dolguldur.nlnetlabs.nl. 10200 IN SSHFP 2 1 F591E1602245E501B55DE0B69358DE79282299B8 dolguldur.nlnetlabs.nl. 10200 IN SSHFP 3 1 AFDF808CA232EC012605F59746850E71F2A9B584 dolguldur.nlnetlabs.nl. 3600 IN NSEC dolguldur-bce1.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC dolguldur-bce1.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21d:9ff:fe6a:aa54 dolguldur-bce1.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Q55vfla9/tDCXXN8InSHRmiAmW+mexbZjUxAh7NWL2Qx4wueI50UNPzS TTlwv6J+qwTtrt9+15slQ7EtmuvF72eHRiJFWhTDTrt/gihN4NbJ+KLe fgfClM2/YCGFdo1hMPKFoQufyR8dMB94VMPgqOhiiMZvFahjgWiwDn6m o1U= dolguldur-bce1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uLeyCwymqhDE9VZl7ZhsRQ2zRJ1bpWNwsTKYpBhkDYJD6xrnz/fH/cE9 XRmoqrzEJdkiJwzhJItejlSSURvL5CFkZstjPOuPSQpjG7kp7+Aiwe91 Br6MKjm/CRa3ORD5Gh1x02obKu3to6zWA7Lz0m98meA81B2GLR6E3zlg CYM= dolguldur-bce1.nlnetlabs.nl. 3600 IN NSEC dromedary.nlnetlabs.nl. AAAA RRSIG NSEC dromedary.nlnetlabs.nl. 10200 IN A 213.154.224.136 dromedary.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. h6I6BbrWZYxjhWrzclpbsxgYzwfXFedgAanvNkvEv9266HOlOmbJAmd8 LrAugBc9+Q08StyniA06WRjZnxeQkaMVNNEFIhJWTNmCSsTJpLcVMCvi Mt5utlOCm9bzCMnZ/QA55OCMYwTDoj7ZcaxS8pe4DtCuuRC3Jd0GWA4Y hfs= dromedary.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. KVFcBPD88xOL+Q3XoiqdXpXlKkDO5Rj8xv0VtUxg8JB5wdbEtnBu+jPc 58mlpJ5IzqgwzF1D80MTB2YKqDZmbhOb0jEtIsT8jSbgtfMcAyRcAfvb +sVAjpw47bmi9RRU9G54GrcXV3wAEEZIMVvmH7TuYbiOaSQvjuFCuwEJ FRM= dromedary.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wiJWqjEUvM+LVNqAicF1R8TIe05h9FB65eH2nXkmxCt9MGpRYQ8f2chb kVdj6obJ8OEPOkjyD3CCKsFQt0DOmej7UbzZm0iFCfouxeKsWW1RVeet V/4f+n6MeabIjwNHmuiqod7mgfueQK9/EWH9jY1bKUtvkorf1PDXRXLD 0HE= dromedary.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. smuP2ZshHeQJd6/I45Nwur0VuJScdSlBG3izYioUuyPBJA7pYsLpsgoZ ejiOzwiL0K1f21X99J7MWPBvFTPuSFSIBeqgtx2GkWaxRH9XxjgbT16N GzeQ4KSvs2cGOKWJl8XYckiqFn4ISdX7D777IQBU3C9JT1j2q1d6UGtK jA0= dromedary.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:10:: dromedary.nlnetlabs.nl. 10200 IN SSHFP 1 1 B41C41F78C3A773CDA1C14346EBCE0D0AC1B7804 dromedary.nlnetlabs.nl. 10200 IN SSHFP 2 1 B82DAE815E4CE0727498B61FA108D72FD65167EE dromedary.nlnetlabs.nl. 10200 IN SSHFP 3 1 1B2EBB6699E0AA530538F5F9A6BBECC59114DD17 dromedary.nlnetlabs.nl. 3600 IN NSEC ds10.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC ds10.nlnetlabs.nl. 10200 IN A 213.154.224.159 ds10.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. j9BY+5cA4UtCH9eUHD3dy86Q3j/cKlFZ2gfMGhqPvu6PrIkcCAyykDYf hTjkeTSU9IxwR8hfcbffc+YpmMrdpdeXboheRvKsd2NCk1JOmi1vU70E 4qNb7xsGi7bqtLZqLZoL9+VWk/FJ4Knjw4clCGZjPcyU5tYibgcuueCB TjE= ds10.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ZA+Z9tpWwam6yP0aAFoja3FVR9NbzLBxQ4cP8my8qCMPBS+/D3Hw1RPs bChxQOIJwCCmV1CtS6/kJALA03dcWJJx4Si+0FgdNA06J9RBRfYZKYQg UJuZbf7nUEegGnZ45LA+5UQd1F19PwFobzWMAqKlYuXw9PuHohZub4Kj RhE= ds10.nlnetlabs.nl. 3600 IN NSEC e1.experiments.nlnetlabs.nl. A RRSIG NSEC e1.experiments.nlnetlabs.nl. 10200 IN NS ns.e1.experiments.nlnetlabs.nl. e1.experiments.nlnetlabs.nl. 3600 IN NSEC e2.experiments.nlnetlabs.nl. NS RRSIG NSEC e1.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. cjF3TBowgNyNfRPTmWMigLGjrWBhade1A95W/xIQ8AVYwwRehUjbL3kp asnah7BMUMhZQHoSYH2Qp2W/0LXjyIReslQ7IQEJWFuBbUz04BVVCgdR /IMOZGRUzqAgsJ9rw6bG85R3qcobsB0pEFHWXIJRs/05AeZuANKLp+Oa zkk= ns.e1.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::11 e2.experiments.nlnetlabs.nl. 10200 IN NS ns.e2.experiments.nlnetlabs.nl. e2.experiments.nlnetlabs.nl. 3600 IN NSEC e3.experiments.nlnetlabs.nl. NS RRSIG NSEC e2.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. u1Prv+SlOZS6yPM6899yECHNa4nXKTyD7e9K8B/EwD7J4VYPWzvzRo39 VwGkdEn01v97KlcEf3g4mmcAnzPcdEGZT/iYdMYVCrYpXV1GhDqePtK9 XnkCRjeeWiFNOtgJxJ8I5FPqk0EKWZ5gUMvgSIz1QYmMPFOYd8uMDEBa 76c= ns.e2.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::12 e3.experiments.nlnetlabs.nl. 10200 IN NS ns.e3.experiments.nlnetlabs.nl. e3.experiments.nlnetlabs.nl. 3600 IN NSEC e4.experiments.nlnetlabs.nl. NS RRSIG NSEC e3.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jb87bloDlNbLHoxHYR8XwUA7m5KsH6wI7H2nqR45vVu9Ei+reQ5oeqc9 +FCsJHcN6U2UQzgAicLvEwGkuGpY/U5ZjEt2TAVuSc90A5LAY0eclaet O3+G6kTPaREBL7HCq3Gcm2v+reF2K/VVSbayiNw3YpXt34zLMLxdjZK1 35M= ns.e3.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::13 e4.experiments.nlnetlabs.nl. 10200 IN NS ns.e4.experiments.nlnetlabs.nl. e4.experiments.nlnetlabs.nl. 3600 IN NSEC e5.experiments.nlnetlabs.nl. NS RRSIG NSEC e4.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wmDfe7qYWsh/58khG5aRFboXIs1Md67TW+vx+xGRHDjYXIUIje27IR4C UWLj54ARjIaeBx6cd2Ag0keK+9h6owixP9Gi2iVxMk4F4UQ6zQrFYQZl dtOYeJS9MjknOiOnDtMLPNSfAoCKiL7hlPVuaHe9sKfO2pWK7c0mpWP9 CTM= ns.e4.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::14 e5.experiments.nlnetlabs.nl. 10200 IN NS ns.e5.experiments.nlnetlabs.nl. e5.experiments.nlnetlabs.nl. 3600 IN NSEC e6.experiments.nlnetlabs.nl. NS RRSIG NSEC e5.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IbLu3Yl5W+GByjR+rwU/ucBoVdGdrcWy4RjKLlLxZGysSHyENA0lD3Ai kV/E2Hlp8GuyrR8GYIIL/F0HDiI+RPwh6uxMNmAzlPbuPqOnIt801Ca+ yWzYl5gVNk+SD9CtKMXILQ7oL5Kv+qNvLeLtWyIMDUnd1BbQzDzYffnH iBk= ns.e5.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::15 e6.experiments.nlnetlabs.nl. 10200 IN NS ns.e6.experiments.nlnetlabs.nl. e6.experiments.nlnetlabs.nl. 3600 IN NSEC e7.experiments.nlnetlabs.nl. NS RRSIG NSEC e6.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. oMnlAH+0zruiTyycXmVXT5c3Gw6PJZLIm+W6tw5UNrBUL33SsUdZ3USX PxTNFUCHClQt28GQU4wxcEAJswAqWdhp/PJDwapzlgrK7Fzf7GoD6krn XyQGOikJBDa8XcSWPy+0p1vOtEImeoz2RXdm/JS451xRpy0ZQg0ol8vU txs= ns.e6.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::16 e7.experiments.nlnetlabs.nl. 10200 IN NS ns.e7.experiments.nlnetlabs.nl. e7.experiments.nlnetlabs.nl. 3600 IN NSEC e8.experiments.nlnetlabs.nl. NS RRSIG NSEC e7.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. xydphjv8yVFBLC0mxA3dioNWnRvuKJ9hrAHYVxRRGvJHAi8t7bfNFr9N cm3ACxluOJbkfrS71V/tpqnNKkLvlguE1L5tGibfiheLkNsb/ICt04Vu lSY4zqW2l34zMwswhvNHLq4LAnVcBDgHloMPaCGagIy1v2HS4qCYSIXg 2YM= ns.e7.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::17 e8.experiments.nlnetlabs.nl. 10200 IN NS ns.e8.experiments.nlnetlabs.nl. e8.experiments.nlnetlabs.nl. 3600 IN NSEC e9.experiments.nlnetlabs.nl. NS RRSIG NSEC e8.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. qf/mWvZd+og40MMCrx4BvA+I1opJ7iwvm1TH4zaAuX4PWU7Z1f1L6adG 6akaKZ4YPn6sPmzVJ3QxvA/wNRAZtZYtPVxMjsJNobAlDaHl9bGfBeV7 34e5mzRldSMFAYzkSGBfMMfeVi2ZYUaOV5MCtsDxsvVDFwKsbPFBKWix Nww= ns.e8.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::18 e9.experiments.nlnetlabs.nl. 10200 IN NS ns.e9.experiments.nlnetlabs.nl. e9.experiments.nlnetlabs.nl. 3600 IN NSEC ea.experiments.nlnetlabs.nl. NS RRSIG NSEC e9.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fOBvJPP4Ahe3UEpWPXrYkOva6Eb7nWsS3QDhKBiGhydbTBDZh2TqdYCN MucZaoTYpGhedAD922FvsXeiu1xiX19H7XWEuyiP0oCbyU+DzbA7xukS gW2gwV87ePKY+MkHYAlnUdKUtm5wowtcdabk75AYCS7/D+SWi0X1sLAc zcQ= ns.e9.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::19 ea.experiments.nlnetlabs.nl. 10200 IN NS ns.ea.experiments.nlnetlabs.nl. ea.experiments.nlnetlabs.nl. 3600 IN NSEC eb.experiments.nlnetlabs.nl. NS RRSIG NSEC ea.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. sM4PaF/rNoKNjICL/leDFWnYn46/Aa6LwGqlfCZeG7Sj6tAoUtib0CPi dwvjJt4giheWColcIO1JJ+FtOHP+HuBBV7m2blt4HXjz5fVlqbzTSo/Y 1iQB0ahyilwczJ4lVk9Erflq3RiHewu3QLtXAN88TMe/tgfqwNZRuEzo d0s= ns.ea.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1a eb.experiments.nlnetlabs.nl. 10200 IN NS ns.eb.experiments.nlnetlabs.nl. eb.experiments.nlnetlabs.nl. 3600 IN NSEC ec.experiments.nlnetlabs.nl. NS RRSIG NSEC eb.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jpJa3MLL8+fyzPQWDQZbB9iN6m0Jmk0yXenx616aex3nXzzvWzKzfEva Ydl8aF56DiUugZ/32JTrRhFD3jQZlrkTnu2pp7RGOfHOkRZI8nu0bvUi ohCqyw1IOkc/zSzcb1YjarScdNGLc9Wd0e0BgkgHGL78yATntpyt/rbg VVk= ns.eb.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1b ec.experiments.nlnetlabs.nl. 10200 IN NS ns.ec.experiments.nlnetlabs.nl. ec.experiments.nlnetlabs.nl. 3600 IN NSEC ed.experiments.nlnetlabs.nl. NS RRSIG NSEC ec.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. KISwcdp2oX1dK1wF+fcMxF1u4GvPF2Z7rgpipSTxPyrsHKd9x4QsYvKr t2ndwdF2eAOF/iuTIJ77zeEeafZyFVw1xtW5aY2z/uQIsJzo7wgK9agH Kua4VWhU16HVroJcRUIwY11uvdj0oRdOeaEfhYl6ACuF2b2u2X0kqOVY ECY= ns.ec.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1c ed.experiments.nlnetlabs.nl. 10200 IN NS ns.ed.experiments.nlnetlabs.nl. ed.experiments.nlnetlabs.nl. 3600 IN NSEC ee.experiments.nlnetlabs.nl. NS RRSIG NSEC ed.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Cjv3UG5q21Kx+eoGLgJQVUqwNuR6wk6bjsFmLrOiKuc5cbI9/nPY6BYD 4NZuKX84K12tO2FHFKlyXCshwPXvMirHb7G4Cygw0+n5ChV3nMU95H/z T3T8BGwo1DFQY+weEoeEGsDFlP5t6sw5CiWbIlD1G7gshufYAXmN/0j5 1K4= ns.ed.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1d ee.experiments.nlnetlabs.nl. 10200 IN NS ns.ee.experiments.nlnetlabs.nl. ee.experiments.nlnetlabs.nl. 3600 IN NSEC ef.experiments.nlnetlabs.nl. NS RRSIG NSEC ee.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IH5TFGoIwBbyl2fzvXD3ARiDoere27/pbpkO1NMHjndzgSyhI2hk4ofu i6fd/tfjwgTzLsoQ5T6qbOD2BPZH2MXOk6oXRU3qmVDICak03nJKxbx4 suYGntnhWXsbcbxlHNOSCXb2qBvsVvGSWG8WL09hi0neNEdNAUKqsMB9 MIQ= ns.ee.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1e ef.experiments.nlnetlabs.nl. 10200 IN NS ns.ef.experiments.nlnetlabs.nl. ef.experiments.nlnetlabs.nl. 3600 IN NSEC fluffy.nlnetlabs.nl. NS RRSIG NSEC ef.experiments.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. LzxY7YVZ7YBsRnVnaeIin82nMpSsQsFnDPzXdvTTvcqy48h4Cx9oawgl oOk2wzhJ+LV6FdrUzWKoHUP1GYbCskUGnlvgQOhfNuWQw8WkSImNt4NO CIe36OuiBL5gRLlkwwj+GY4UNUcFgD4d5NhxLkcXOaOJnMAr6iRRUWoV qjg= ns.ef.experiments.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::1f fluffy.nlnetlabs.nl. 10200 IN A 213.154.224.42 fluffy.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IRyhfDdDLh0mzAmCl+F8grYmJixOiOTIoKWuq+Fr4IIy5oQxANCwg7e1 vY927OEshaH38yk5c33fyr0MwvyG7ECG5x8r/PZJrnZFxYn51MdkIy+D HpcvVs2D/F666fWJvMwv/xMc8eaiOajoXlgoqja1HR1qeN3H+3inJav2 dtw= fluffy.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wnkOcVN2F9Cs8oX/12UUSKZMGbT1+B5xVcFU9aWflNUMWGgB4rnlzB2x 0Of0B4yGANIEno509TT2WU+MT7eS5SHRLy6FCpAr5Quy76F5BA/iViAz cX2qrr24KPZlffXq1ciPsqOKo69/GC2JouM9OvtoCWIaIT768zKyId3C 6+M= fluffy.nlnetlabs.nl. 3600 IN NSEC bartsmith.friends.nlnetlabs.nl. A RRSIG NSEC bartsmith.friends.nlnetlabs.nl. 10200 IN A 213.154.224.242 bartsmith.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. y0uaW9lgs7xabKiRAFsuHeDM64XnN+Q5NLixz01WQwpK4CbS4GckFtGw CCJYtsZLm8TdR+EeDGU5u9Ol2b/F2l+p0Um4a7TtOKlCC/HYoSYr0qlZ ip6gAqs1SywKd5644nbOGmT2WnomEmEMnvuGFTCaNffOwAI5tsfvgcTo RWU= bartsmith.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jp8J1MQlslLIKwLSYapNcYB6VkLCst7mekOnDf0q5piOWy13ZGHi3ABe SF0oxjxHQVWfL3pru+yCkdk7mFV1A12HcaPMuK3fF0snxqnZ/SpqtgsH O1ioEpSMuwCl8P6xa1BV1PLcrm5FM1dJ1CP8DcoirtPk1EpZ4TGMa0Yg cgk= bartsmith.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ylu5paMbdbgRmMx9vEJKZjw6whjZINZ2PvHiLMN0krKGcd4kuwEDRYO8 gIzjVpBdGjZQ0bC1ccvA6dnoSG/d4jm8NfTrZ1HoFonVhchulBMA0Z4m N6/43xU7cwMf7yYmUd9HEviY6wupL4brCQ5Z4gdzvHu/w9pTnIHKvwJ6 fcs= bartsmith.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jFPEvGswjTixTV4d9KAMBEV3g9smXNi3S2qsAk8nR16eCW0eE7UD80bo BK2y/3CTJ4gakIZz1mhBnZm8n/DEuHgd64G+/3euMW46X0HxA6UXtZCa dPyWCJD93ZVMm7+mN/eR8OZz1UtLsmQRsFJHZ+JSy5W3klN+P82nwqJg ANY= bartsmith.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:7:: bartsmith.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 5C5754E45839891C9CBB30538D5745321E135CDA bartsmith.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 3FD8568AA33165AC9FFD2E63C43F124C9E341FB6 bartsmith.friends.nlnetlabs.nl. 10200 IN SSHFP 3 1 032577474762D0CEC79654FB7B1E3DBB9104E4B9 bartsmith.friends.nlnetlabs.nl. 3600 IN NSEC klaaswierenga.friends.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC klaaswierenga.friends.nlnetlabs.nl. 10200 IN A 213.154.224.245 klaaswierenga.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. opCfqWW4CqzdocV3SsQ5iq9zCQc1uJFFodtAAxSbaG8RJt92HtfcD2qJ 9BtO8ZWYsNDB1P4Tewe5H179RRzc/sjUCPElg4psqR1VJ25vaSGL0Eer h7ZEQlHCeheY9qNbB+1eMISxfIDwp05konM7ZezeKaGng47mvFdSnpGA USA= klaaswierenga.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ieE7FSITJ3MKt0XmKzP4XmxvTTI6uPblGOzcE5WmOfL805J45DHhc7Lj VQ07ZdHGsZgRXfFzMlnWnnuL/8AQosrxfhwJdgUO7kTPao3T8brdumUu Og43T81NqMay5Nfb8INeroRa6FegbEjB2jk9DkKkgH5Wa3lra3Wl2SbV LKY= klaaswierenga.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. f9aL3bOnxDRZIlR/rb6o9E4IVyvE3XHmgyjPQLBSTwbCWw45mGfem2nL vekv+pvhdb93GvAyMhY9Dfe+WcpeGw9RTrhH8twl04gWzwgqHcBLB26r TGQie7dO66fn+9dsp47djf9no0JsrKP/s0GAL0FMzdBvA3A2+WwQp4uP cxQ= klaaswierenga.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. yGdul1K9QK2XS++AMWrs08Piogy7aU2Iw3rFNiqqvAFTBpaRpva24aqn Fvb52ZuIGvK3VT+NJQo5sb2c1QtZLsUbQBKKYVVnI17EgJnnp6dPN8s3 8qvAsZDbhM1yZEF3KAZtM3Gdznb1Qs6p9er9LrpMWUVyBzzosHmF9/Z8 pC0= klaaswierenga.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:15:: klaaswierenga.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 FD05DEBFC4A849DDE4263F021DC1CDDDCFA76579 klaaswierenga.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 FF77160242E18D4C06F09929367760CEE3F193AE klaaswierenga.friends.nlnetlabs.nl. 10200 IN SSHFP 3 1 7EBFCC9B2B4D9B70196676E2CEF071CEE0183199 klaaswierenga.friends.nlnetlabs.nl. 3600 IN NSEC sebastiankippe.friends.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC sebastiankippe.friends.nlnetlabs.nl. 10200 IN A 213.154.224.244 sebastiankippe.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yI8GEJgWV5ukLJI+OsI1yD++lMNZly0usAdnnI29tIs3Oarxf6+byLdI 0mPlvHHXSPyulN1uN9lLwf9PqNT2lxLVSNW9GXwHl7VU+M2iZT9zKzfY E2qpp2+0mj1guaJY2zM1nVqvpgKM+zp+lda6q9lUXMY1v580c364XzQP AqE= sebastiankippe.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. UFjlIQT79ZIM5HseDdtPHOkmZzfv/kMl3pdnYCvKrK2oobTOVjLJB5zF jHGt3972DUFthjwyW9uYOHGaYlGAVCiB0386wV+YqF+dyb3+lHGp32Pp taMGzdYSTWHTYb5z9IuNEQXaEFEJ/exImvTvY7EqGbvAcvWyOWdsYOzw CQs= sebastiankippe.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Y9VtyEYNQi+r90PNZ/4HSqNemPosGIeC3AycSpFB24wjoYvSja6K2HpR BlOrQD5esMceMDCIZvh0XBhR3+gfmpBROiXv8Cx4cwwaWeKq41sMxV2x Jr0LTK0OuZweZbW20Vkcl3884GYW4hZQX5rk3r6G+gGCxi6qTFnZmF4w P9k= sebastiankippe.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. pHlg7f08QpfvJ/bC3LHKcCEuDErse63ul0kFySu1LGUdW7g7QMG0/8L6 jV976Dz6hCdnYcFOqRwxRKGlnuy7pRYca+EgEB8kOITz/iRX5LNCNO71 V63UlQCWWkBlwDl1lrf4pFvMzuNpPofODg0QRoWCB4Zkw2J93jMEchFV pLg= sebastiankippe.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:11:: sebastiankippe.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 4CCB30371C21EAD3FAA25E8FC13FAC565FD7212E sebastiankippe.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 A7FBFC0DAA906AFC71693B27CB427EDED2A50FD4 sebastiankippe.friends.nlnetlabs.nl. 3600 IN NSEC willemtoorop.friends.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC willemtoorop.friends.nlnetlabs.nl. 10200 IN A 213.154.224.243 willemtoorop.friends.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ivgSU3GyiYLN3yNfDJtFpgH8+rT/8CCnJkRKAOEghEjKg4Se9piITwhW P/cdWYVlLZLO9dmBtl7VmwA7mFpWjg9s7WIxIz7vHMlM0KbDc4PUjHtf B7HKhsm8i0U/4RtI08LTwsJwXkV8qJv8tCDCv27Z1I4g4r3gdJPBI9i8 mOw= willemtoorop.friends.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xUiPHtpL+DKaYeI/v0dmtrCvMJ8213r33hMCyUz+SZEKhBy3A3cb7aBE 8iutOqhehJ1CzvPYZCIBDeeifJp8TdHgkWzNkSiO08IBJLxk3nDwdvun p5a41f3PuFUHizFVjCouwur33mWV8KfJK6KVeDI9smyFssXrcUUmzB99 f6k= willemtoorop.friends.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. bmiTVTf5//rnVxDAM63dbAHtCHi0dZvsW7NWjbbV2Mt7+QGwWZeb43OL i0qZ2y7Xrb4+mDY1eLnagVlAVOvIsu2JAkleadOr6ddEdqZgyRzQY+g8 V9CkkPPxp0lp/ueR9fu4/0PrSeBFRVmaJQOkGUpBTWYwOaNFdBEqBX38 ieo= willemtoorop.friends.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. vP1GQ0OtOfRdeTukC8dmJe4iI53O/q18A+nU8wy4gi7AG2FXGF1tlSAZ kOO+f42F8qbYkEDquRVxrSH2ic2TNDMPVn0kjoOG7Ys3vEsahsGmpXk5 UJcXOkLq+GBCCXHjHeaPJXc3KVC8aniaQMSbjR22Ysdr7Q9TDTqJrUsd 45A= willemtoorop.friends.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:8:: willemtoorop.friends.nlnetlabs.nl. 10200 IN SSHFP 1 1 E19C781CF4239B0E9EBBF9391AB805E1D29E7F10 willemtoorop.friends.nlnetlabs.nl. 10200 IN SSHFP 2 1 1F0BE2F173A3287201549251B176C23047FFCDD6 willemtoorop.friends.nlnetlabs.nl. 10200 IN SSHFP 3 1 4E2DDCE23B238E1E65951DFC5EC0B1E88970AFBB willemtoorop.friends.nlnetlabs.nl. 3600 IN NSEC gary.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC gary.nlnetlabs.nl. 10200 IN A 213.154.224.58 gary.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. MEtaHnXMFqFJgkaZ38QgRl6s65F8ci37vkiOKwE9eCOfPbTZdFOGD/G3 OMlLV2xY59jGLpkKJCw8488KRoDHYAzN1YdjyniKkYNZIFhBNZQsnM7Y uOO0mtIaUYHnCHQNJgU0xmYaq8KNwFpIll8r+lARd8CNbuRVK/noou5G p4k= gary.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YXPBa77gG/lIeqOFrFWvxjU2VvREE9Cv7xBNTOAf/9Sc+cQjuEVTMRw+ uTcjM7ynLySHQPUJkARUFJrw0MPLR51K5CbG704uSmvTGP89a+QIz8RF 8roXUCfzvH1w7fG4W7uZHm4XPbOrvfFsB+3eM76BxzeBkBcgMrk4xmqZ 8T0= gary.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. r/CEzbcYyZJcHHBUPdtFlZumokYlZ0jOXjJVYzrC9wGbdSKz5hHn1NoR wUlYj+cC9xVbrN909l9DTk/eXKnWxkWtI+RU0BMGLHtvtmwtDktwy+pV 4iGbdbHAia9ZXBKv/sU064jpHPrv5E9Mx1UgDXRX+4yfuCsNLcy6ynIR Pmo= gary.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. o38m4GvSc9Kpqe7AB+6aRrbfLtryYvmRBuwSeEN7aKELE28ID4mL7LYc 1GJMhGCXrA65qi1AuEEOgZegd5xAt6fGH7OIMvsdZaitj/5mlq4jnd0g 763XCM0HorTnMefwhRqZ0IdB1S49ZkKK9M39hIBah6cBQ7k904v0oj3d Tcg= gary.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:216:76ff:feb8:1853 gary.nlnetlabs.nl. 10200 IN SSHFP 1 1 ED3C7439869AD75F0EC2BD4B4509865E5E1E4288 gary.nlnetlabs.nl. 10200 IN SSHFP 2 1 941AFEC19E19564A8D146AF0ED61232850D783CB gary.nlnetlabs.nl. 3600 IN NSEC git.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC git.nlnetlabs.nl. 10200 IN CNAME gitlab.nlnetlabs.nl. git.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. swiYOOw++hltWrFALlxZdzoxJyATKfbjSqKq5/VcIsZnj6l7KB04u2Qg 8ECkOx4ExvUDwBhMUVjP2z0zSM6e1oZUIOZDKigphCIVAhYKQNCz6PMS JkcVI7/vA3N2kPNVUIK4tRawI4531nM8WTqAIdkCNviHUT4/N2HG8BCE lWg= git.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Tttnw4mJSCzEGZA5u34Z3Us1+jwbjYYuURaQC4ZB8FW9Pg9mF3tMTkJR f16DyF5l1VIh2bXa9j4pQ1BMdQdO4mH3LdcMPJP5wp48joQHMsAaCkUr pIogvDFeJvpMLy6hn2/bqeu3g5x8YiEuct8Ekx6H/o8+7YGKKAVnmq1m YY0= git.nlnetlabs.nl. 3600 IN NSEC _443._tcp.git.nlnetlabs.nl. CNAME RRSIG NSEC _443._tcp.git.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _443._tcp.git.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fH+9kn3zc1Rp+wMVCz/pmBKj37ZbhlFLRbOv4aX35MmmMwaaej8F0J7P zB1z2SeyXlHiEus1g0yE6uJ7R4JujR3QcbOwBk4FQKtORvRqyH5YEz+f oW9BTmvCoeHZ33GLkz6CjYruTMqlGPGaqJnL2UzsIUZOKBKgw89R6sHH Kpw= _443._tcp.git.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ch66mid8On8HPi6hadZkDQ7v0f2HnRuywzA9SoeOW4W08+fbSZjigJbN +2bZJDF+B0NXVjgZI7AmXDkOiHPTsCjxkEzr4lp8LBZj6chYWUW1yn62 QXgTpJZdbpYkKLQenEtnOHOwEWuslVfzvk9BuxTi/RuomN8p2QTo5trh I8Y= _443._tcp.git.nlnetlabs.nl. 3600 IN NSEC gitlab.nlnetlabs.nl. CNAME RRSIG NSEC gitlab.nlnetlabs.nl. 10200 IN A 213.154.224.137 gitlab.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pa41m6rS2eb4SmTuMNhVzDuWSE4lyh7yTT9/FEEZt2eRaHyM91jBkzH3 ltWapC9f4VZX38LGIva6Sh5anrOA6rvh6ghJ+NWZHE8101jjuPGl3anu hQR+7VmLWEpBMwEJK1WcTKaRtpvuL+NI7rncF3mXADgHgG47MSsaiQy3 eK4= gitlab.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. dNNEBA9wUI7GusQel/pK8L/x2D5hCdAff4DkIJJWru4zGJE6s/cx1Dyq wCyePW1dNRnBvAOjnZO6ya9cFHqIMVhwlA9vbdF3qfH+l4MIHNiOMv3n W1EkCujxTrhTVRR/0+Y+FvH8r6EOEjbjnQ+2k9Wbo9JAbvaakSqiuXdd 9PQ= gitlab.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YkoQZqzR6CfQTkXGBYCf15tY5RwH3qgPnx8TxixA4/xUW/UocnfGvqKz Md8cpc964Imx/p5lOrMeVzZbWAeZMP5czF7pZE4IEa2Q78v57CckShzP pXFS5PO2/ddbNkLz4dFkA/d/BiSMTNv+BrxuuV9mub/YRmUVuSkpzQ+o Uk0= gitlab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. iTVRm01J/Oa5m97CXeEmKhqzEcpbuM9y3369kN9KrofjHNlnYFFsB0BV 6c1ywfp00h+pxSMybs3vv1RDPb/DSThHm6WIJRRhwdLxHjeOSWKrFlcm bR4vuX3qhTVSlZ7ir8ixZD+LRKTfWQJaEeQvVo87MNZSXFdLjcpfr2Q0 xoE= gitlab.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:17:: gitlab.nlnetlabs.nl. 10200 IN SSHFP 1 1 CA58E26C1F97DFB9F98264A02306DCDBB9C4E7AF gitlab.nlnetlabs.nl. 10200 IN SSHFP 2 1 F4A1BEFC4CDAF0056CAD2BF7E86444FD7090FA2E gitlab.nlnetlabs.nl. 10200 IN SSHFP 3 1 ADC8B9E5B9C0D9DE26DF01AAB16B6CEACF18BEAA gitlab.nlnetlabs.nl. 3600 IN NSEC _443._tcp.gitlab.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC _443._tcp.gitlab.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _443._tcp.gitlab.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FuNI5GU7dHTGJ/P9tzyFfO+5J/iywPwJjYRgrAAjRhsVoWZTrJZw6Sdb kUAiyUnYODT/7HNjUz8A3VpVCv2XZpVOGoHmC/gFSMFVnc2MYr99BZfX 5MmOiTS7FU3rJpkp8Tc9OBtphbCp7r2BBpKxKv9UZx/lUCJl+vnhwQzH mb0= _443._tcp.gitlab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FmLxmn4RYUAgEFWm77KCG54b2MOXb73/ZAFNB9fmmaZKoSzdFQVOCvvi Jer5k4x9wR8hsSB9AwvLDOg6GCi7xHnoeAAcWN2eOMBDLR55WbciPqST 5+2xhGhxByeFLBpoX/Nmbsido2/99kLfT91CNq1uQZeuE/1cXBr60dk1 3as= _443._tcp.gitlab.nlnetlabs.nl. 3600 IN NSEC gitlab-ci.nlnetlabs.nl. CNAME RRSIG NSEC gitlab-ci.nlnetlabs.nl. 10200 IN CNAME gitlab.nlnetlabs.nl. gitlab-ci.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kxHpqkdFCof4doD2L846h+yMzGh4BNJi+ViJABALzr1vGhy4aUA1BJkV 6qZQlg9bCFO21IdcqtAJ2zSaDcTSAlWHEBVg/5AjL46HDC5pv8nTMMJm /mzBLYjjBkMLRf/ZuXgIf79GOCgMQ/Al4aaLc2WFr1IOFowBR15byy71 hGE= gitlab-ci.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. bo2WtnH1Vzl9Od7qH5aHeYe3OpyLKvqH5SOGmHSs6d4SZLMXdMCm2i6D mz6F4Aq1zFyjsyqPur4vPcodiVEEb0IpubuljzdgUwjbp7izEqJOawQ7 6lQBUpM1/fbscrUT/ElKdA0vEm+6bp4+0RA/xRmrhSIpi+k8y2SniUXA V20= gitlab-ci.nlnetlabs.nl. 3600 IN NSEC _443._tcp.gitlab-ci.nlnetlabs.nl. CNAME RRSIG NSEC _443._tcp.gitlab-ci.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _443._tcp.gitlab-ci.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. tRzF+/ZfwETaP9JIW+BjqQA6h3DtsvbmLCwz+F0HqIloQNesUZUf25MP 0iEydoA7APFOzr8fdgKkmHFEl3thBX/x4pPNwckPX0KsZssXTeapJkxJ htAbSmWC63YR+TskB8eyrK6Qid+ujRVbaGldEDzAwRgW0iPfJ0pVkrpM 3J4= _443._tcp.gitlab-ci.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uhJsgXVPXMf28/ID6biDWL+PYsIYGH7Zo9ac4t4hvIK7onAsCUnKUqNP kshwXkePGSabH3g5rQbs1KdqEQO9pgqbXfBtRxNCnDvL8mDC09K9ViDX 7pFek8RRaFQbh9jpQLDQ3/PUxbzIBxRrA+lPICvLZAigM8cDyXutzwNU RGU= _443._tcp.gitlab-ci.nlnetlabs.nl. 3600 IN NSEC gloom.nlnetlabs.nl. CNAME RRSIG NSEC gloom.nlnetlabs.nl. 10200 IN A 213.154.224.40 gloom.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ckealkcASa2/4uY/Cb0rPPtp1P9PC9OqbrDYh0xfvUQx9uAp+mxZIQtj 7rGVrXYpCBR/NF+WTeoMp8AwPmBCqMMjMQ67FDvU/gXzE9GmtPj48aRS Ki8Z/260vx39yaE5PmibypHSIQUHK70Tjh40I+kAYKBYWcCXS5PkqN7n eq8= gloom.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rnpo0U5Rbx4dHv2CZZhy0iD+JApmABDgP6NEnoKHX7EzANfymW/gs+DJ SYjHtq3cvX9RKuB3gSnzyq7+CtjPk7pHHM6SIqpZRZ61OhwWzPz+IwzJ pzC6YY+vzHpbRm2ijaq36AzreHoPpEHoczVs3hjylsssgc8DwbIq7wDd biE= gloom.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. uOtA8zsOxkBiiI/un22zphEnR0kCdbL+HbX8+Lz4N44cIbFq7FQGFPY1 mpMLew5776zshImj4qG7kek6j9xGqlRMUaYOEm7zMeaMV+hX/bQumZA7 HsCrX5cENd4T4AMxu87IWNDM2wKiUM3I1XhjVQ+A2GpeR/VrifncBuR7 9Wo= gloom.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. nuCwYoVrG7b8KmKsIR1mlHEEtkToFqnYIp6jiGslmy01FXjZ9PziwVzj Ezms5Joc7aTGyYcAR8nH99W3zmsRtTh8BvvleysbBqpV5L5Xc3iTREt3 Z3iE9tC7angqCNACbTxPA1V6+Y+Omay1pgMl0OIvFnqiUqYyj2Ka/W3O nPk= gloom.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:baff:fe05:2e3e gloom.nlnetlabs.nl. 10200 IN SSHFP 1 1 55D8297F7C8015C4661182EE82287C3AB94D2107 gloom.nlnetlabs.nl. 3600 IN NSEC gorilla.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC gorilla.nlnetlabs.nl. 10200 IN A 213.154.224.60 gorilla.nlnetlabs.nl. 10200 IN NS gorilla.nlnetlabs.nl. gorilla.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::60 gorilla.nlnetlabs.nl. 3600 IN NSEC hathi.nlnetlabs.nl. NS RRSIG NSEC gorilla.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. CYIq5ObldvL47XJEkG9/YefvzpA1U66nJpT+4+L/mz3lqoFj4yq27H2b 5PfovOkrA1ULGMAd0RR4hsjxfrH1NhJhTkNa24a0rZaobbKZ6UlFf8ix CKH67O/ujc+oYobmy3oKRqP1Q9HYUAEolMkbdifc1D54YDe5r7BRm8fq yHk= hathi.nlnetlabs.nl. 10200 IN A 213.154.224.108 hathi.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. E03rEDOsEE9npv563mVQmzIcFsoAwxx/77haa1eB8gAB3R3DuBcSA8tQ z7f/nxcSYftEs1h3ApUUJxKRzckT+b0+b9PI0FFqdvbxOSbmK6sX9YLg 8paKDmpEDpIpz+YxTHvZeT4m37RIzHxZ6tzCX6FAFhhNvE0l2Bt+P4Eg 1bs= hathi.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xg0rSjLcQO4hN1ijdgedAa1+zi6iUVp9vblb8gcKgjw5BG9C+LVjkbyA qFchgX15niuuESMSDsz4xJfA6H/82oP7B4DV2pM7twe1XcZLMLvpYW6/ Llr5A5/Vu0HgQu7fhQQO60ZBF9VtR9AIX79FqyJsjzFsnmj7O3Oz/UH2 F+Y= hathi.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. R2ckF8in1z3Hld9Fc70Y/Dz0JuLtDSgCNSx19t5KTNpU61qzbhbLy72E c9TR77e2rBFS0W44Yw1tarsDQ5GUEEZaBWCR2PInP/3WUxRwkmslBPqI AMHNDCldl0vdGzRJsH1rmrGDffwbp6XBpEPOhMvPIiv7mXRUYKnMFczu SJo= hathi.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. REXIVrwMJH4oe0X1qGAYT4v6MsKX04oj5hVb7iquU2FFPB3zSC8cFlnu pdhnz3IMAUgB/zsIhVIJCQeNejsX2DvrRvPzE6ae0+QU0dY0FiV37cqJ AFYi7KrPwqym9EZf5YAKK8sVxy5ZcSq833g0mG62eIvT41cV6sSTb5nW 2GQ= hathi.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:211:43ff:fedd:6238 hathi.nlnetlabs.nl. 10200 IN SSHFP 1 1 957658025F4A10217CC50CAD487E7D08C3897F28 hathi.nlnetlabs.nl. 10200 IN SSHFP 2 1 A4BCB1F8909C7A9F93AFAD1048F96DA9279F1F60 hathi.nlnetlabs.nl. 3600 IN NSEC hotspot.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC hotspot.nlnetlabs.nl. 10200 IN CNAME fluffy.nlnetlabs.nl. hotspot.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. O/UnQ26YRzZxbWzkyVaYwpmHqx9Bh4vURc6KMoiCuF2bLQcbI+CqMw4t rnGSo7T4V75f2eUYjhtDlzRoT20F7OjuaBQYzmqCATBiwAu5la7hNQQN DgArrVUeKK6QdGpt55AfMFVSEahImmR4TbeEtbfsjHhneoR1vBWEX1QP iMg= hotspot.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. m5B3ERHY8DuowU9ToHiH6RS2xS2Yg8Q4dfjOFxEBw4oeEV1bVnD0gx3p ouPseLgS93vmUPhDS0ZIOqjq0pdabZriqSjgg/r5W5r1eNyceBpLrwkV c/bnmh7tCW+7bOFFQaxeWeXvyKxCNeLzNWSoE2gibSWCnhk+Td0+Zaqd wL4= hotspot.nlnetlabs.nl. 3600 IN NSEC hp2055dn.nlnetlabs.nl. CNAME RRSIG NSEC hp2055dn.nlnetlabs.nl. 10200 IN A 213.154.224.36 hp2055dn.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lgC7hVyYrL1pxGEDdtAuAUI/SgEuQcd3DlWGddq1n//vXrCj2w8vikNQ PzlNb6EO1rJ7Lyv33htWVmzwpFJP7U0pPDYzqwpmXa8AHLIOVCoNEF4T U9d1lVn57V1LmUP7D1KO9fbPybYPxRktfktjt0ibCUONZn948gb+ocuV uEo= hp2055dn.nlnetlabs.nl. 10200 IN RRSIG TXT 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pw/3BEd8Nju/cCHnFWkGRyYK/apwljCPKGxpjqhoB8XSyOZG17qthayF cne9z8hYyPAVIfd0eNdzIngz/HVcPLHOoSaPWx/EoVPsRigrbdlN32mQ HqJaB3eQhJKbg/JU9P3Eh171pcmoi81KXOMVnJMm+yPYaHYCLCFwuWwy WV4= hp2055dn.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QiLcivyNM6/U8J07o0qKZLFtqeWfdsU8K6pA0HHZj3cL9ew2RmVvG3q+ ZdgJ6tqY+QV56+GwWG9XdF9wSQ0ADUxZqFHDzpzZ2mfidvHsswy57bHU +MV7wLd/wZWYGYMCZsL9d/Kw6MrR0ztgmLM8JEJy7DKlS7uqRskw9aDh wGU= hp2055dn.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ohhGGK5qyJlsO/GkLMBbP8RoCZUc8x9yY03lft4ftWPR7LefS4QPKqkP 7mPj8XbXQY5jJi0wYyk1LlrlYo2slyFu6dvXBFQBgtBDYOu+8VtjW8bA HfZV9daU9qHhvd/3bi6Me8WnGznE4Tumufjc4O5RdfDk2xwylraXqAX3 8Go= hp2055dn.nlnetlabs.nl. 10200 IN TXT "HP LaserJet P2055dn" hp2055dn.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:1ec1:deff:fe81:fe6f hp2055dn.nlnetlabs.nl. 3600 IN NSEC iab.nlnetlabs.nl. A TXT AAAA RRSIG NSEC iab.nlnetlabs.nl. 10200 IN A 213.154.224.1 iab.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. BTo205W5Gfvg1lCwDZ09Qieiu6SQwvZvRL/u9h/YK4ElQt/qTO7TN8Xv jb9T3RexQkYNv4JXjk95U6wDP+6Ikc/AHHOnbcMo3b63dqD55QRgQIoj Uz+rppSCvO++RxRi8nHrqAhXs+afFXNxDx49iX56CRZMd3VISGieiySx 72E= iab.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lZ/3JvqEDId+x4xl/SugHQhBHuhSXP/xaqcNyWqjlzvzCokeIfns9LfQ ShpC7wWAF7BB68ZDeWSwoV5+88GRSThW9G+kKu1XY2+JV/6aqYshsRvK l9OH/Rew2WJAqtFWGI/zXMTM7mIUvbqOJgSfC/m9On47RhWoD0Vv2isU 5SY= iab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SPo4uJtGRChrT1UUuZkMcXqyYGIpHLhuXAHUCA+hTNogRNWGWKuDRVNO 0kZdxizNHEA3LQFnerFCHbSqTHEFwA1KstX56yiPe3W/ucXOJ4zxwMlT KIhHIEsViz87JxRQhtsFQ1VPWcFSFJsdmwq6U/C2V+XcvzlQkKYUfLuJ JsA= iab.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 iab.nlnetlabs.nl. 3600 IN NSEC www.iab.nlnetlabs.nl. A AAAA RRSIG NSEC www.iab.nlnetlabs.nl. 10200 IN A 213.154.224.1 www.iab.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wel3ncwoAoksRV+1EIl3EzeOdqT4t7C/x3Ms7JLMHV5bBQkzxA2FqogM 1JL1gCErMY9xHPcUu1HIYAOxDHmekbpfzCjm91wErVfh62BZk+g1/45k /ZRsM7glqoeCTO/wbwu+StbER767hhCeaVHSfVfz1w80HcdddJzTsFWr fAE= www.iab.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QMjp8EFyZWk6eas+S1xeEM/sGJTCo4OFL5KVbtE98tGzpDapIQRqSewl LdJykOdkmcgOt7iqaS/iUX32uqUQwSsci5ttX5SDTlFjQ1iYKQJSMrJS lRToKjeKxXCsgtALOFTvDyhAzn7hvEYqrmudbc02JXhNU4zZLIcvJtDm zh0= www.iab.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IbFf7uBYAtwBeV14uul32DjA/e41th2SjC87VCR5qMX8SWjTxLE66GOJ un5IclIc0HbAKrJHs73xdO/wcM8N1AX9OijHQP2ppleMAgFQFQsQJlT4 F0DkXl8an/RFvzXs1NTVaBjO80DMc9DRn4iMbGmpocbaYOnuvkihl8RU wuc= www.iab.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 www.iab.nlnetlabs.nl. 3600 IN NSEC iana.nlnetlabs.nl. A AAAA RRSIG NSEC iana.nlnetlabs.nl. 10200 IN A 213.154.224.128 iana.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. YkC0WJe4B/xXgIEFOzG/Sk9d/VMdJtINRydDMVpcQ5X2WI5QcA3cCni2 aSHskra4BSJPSnSWPI8VBQ8eEDgdFsSDmU0loOn5dJUKygqZab763ddt 7oTAKmoO9ePji9SFwld/eAN51cy8AccuhtM3QaUmhUuc2wDTCOrnvlgY CA0= iana.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. vCrwHK09WsV+iIVXjWms5ZjCxOHkN1yXvuU0cu5TmvQ7c0dxujXg6xQz /OxJsr9dYPqiMaRz8qTf4OLz3iCYssYFdhBp42d/+jizjpv3qsRdGEpr vKsPQ9+FRnijSGobzaybjSfJN6mV9EcS0JKS2dX/yhpDTIwzqYAsj+hJ cNk= iana.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wcexRUPWxtotqk5o9wAFJlrnYHohV8k/BpNyEJub8ssImb2jikt8Ycr/ f7wOZsz06cFHKNvFk/vLzfOQ8wSVBfIo8PTXNfrA00AtFSaQBde+XSCs q695RcycvDlUIiHoNhz+envOQokpXV6smdwA/KId8IONwQx6glhKOGzA Pfs= iana.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. yq/QUSAvrum9G6b5pm2GSteOVweCYGU0kMn1XMbPQpzIPdX0JWj94mvz EItfp5v1JL2ysqspILRHxD3v8nptcSXohaRuwIit4BBlwlEoN9Yunk1t BZ6QhajdKhLl5b+PSE1VnfFtH+MbZiEagRQ/9xip2eg9NvFMgEPWYcym FcM= iana.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::128 iana.nlnetlabs.nl. 10200 IN SSHFP 1 1 91DB62C36C051F0E6414FA1F5BF9678E6C554DBF iana.nlnetlabs.nl. 10200 IN SSHFP 2 1 138764C92D6A727F6EAD120826333A43788217E4 iana.nlnetlabs.nl. 3600 IN NSEC ical.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC ical.nlnetlabs.nl. 10200 IN A 213.154.224.30 ical.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. XdkBjD6i1wdgkljpJPiCwOTZCQwlIxb43bqscRLKHO+aoBUTXt95txhe sRwifHyn/gJZcEtjGu/tc2CZl1bcDBhWxwJWrr3vXJ8Onf4+uj6QxtMT vsEtID7ChM8fUlRIZa+15Jj2gveij3GhFF5XND/ALvmtmSGDBQ6vZvFq +zA= ical.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. n4DvOPdeTeMeiE8llV02X/d+CnR5SF+C+hquNI5KmIEG869IGc2lA6f/ OL9kavuwheEWf+ERByKpc0oXV3nbKtCsIuggzEX66NzwnSW+38uLqKKJ /zCE8ugqkTGNZWG4HZkkdxoZuYN8fSh47Nm/Wf4MqkUUBgWIJrHX2TNz B9M= ical.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. g0ipW4Xqb13T3vvHA0oxaoo/vQ2VIQ+SFb6xbwu6ICi/qbBfZtn0KBVq N4NDJ9NuIN0o59RI1455M4OVj8BtlOhldyP9fedzQGd8BZXlZtLQ7XTg 9/2RsWTdYiLH+xgDCrmlaujgw51csWVN+SrT24zBnX/EGAqLSPSxl7/E Zn4= ical.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21e:52ff:fef3:9000 ical.nlnetlabs.nl. 3600 IN NSEC iii.nlnetlabs.nl. A AAAA RRSIG NSEC iii.nlnetlabs.nl. 10200 IN A 213.154.224.144 iii.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. mkZAUMIT8JXS+fnRWgT99Tl/fiyGsUMlPr8x2c9BVb3k6vaSqYSTrSnL NTK8yJXgAXgB2yHu3E39LfpMl3X/LM8rDbPHLAyL52CyBB1RBCv5jB14 WCwWnnRXd34g0GK35EJRfjYPZeaaR23UaiR1eWZw7XbJeAMLKQ+neTfl DQo= iii.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WZ5ctUNO6s9z+IcP1W0rcMYc78S8hCGj2j/hO1QtKQx+ZXwcV6Y1NVud j12m97fEOUCzL4Q0l3/7c1tD9nUHjpuJHYIAdWIqsHviYFSGIFZj3npn rfNBNzwOXNygRiJNPRtlu6cr4W4PqYRZAn2HxSnvlJuzEN/+wIgXgduL xU0= iii.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HlflHHQLd7NYxBNL68cXiIeAFzYmjFTRf2zABQLcSqh6pes1v7Vs30nH v9TgUGCk37b7m6VBk+ELWs9clcXxwVbzVW4QjO1NGp6VU/Y96GheyR1j yrhGRLLbqg58uAfx28w/+Nlo3Il3gzsTwe1eFUe/IzY4u7nLtV1RH9Kk w/4= iii.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Qc7C4qq+45/A7MaAEkoPi2655cWhOu9PLDDwiK/U9tW1Vsi5090kNlnh yxEHfIlO0tdrl1Nj9+uUwKq4z+Su6BpJEwl2S0cr1zI9WvbZK3y+yDO1 fNN0nHfAEhV+WteCQG94akGEdWqDPy7RnpSiRMbbtOW4Oi90GOqjuG6f egw= iii.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:26:: iii.nlnetlabs.nl. 10200 IN SSHFP 1 1 F378328FC941C9113DB75669A5A42F6C3CF577D3 iii.nlnetlabs.nl. 10200 IN SSHFP 2 1 9B85990B00B395A4DF5E5FA0E29E262BDDD7A148 iii.nlnetlabs.nl. 10200 IN SSHFP 3 1 512D31550546D1DB31D6467D4E67D87207939981 iii.nlnetlabs.nl. 3600 IN NSEC _443._tcp.iii.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC _443._tcp.iii.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _443._tcp.iii.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CBXy6lf3RNxWLw05xSuwH+qAhM/ljWaqIXzkhwh7kwy/3/YQjVktGnmX MP9IaCN+ichYPMFwOcKZs8EVXNldOfhKl/a5aXtDxSHe1XHsJ+KmeQLz U/IIINbjiQ5nkIPblQRr86xQ/U/8JSozoDucApW1lD8UTFNzg0zdUnrj d6M= _443._tcp.iii.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. NMz6NaQLl8Vkv55/uWur22I5xkdtr0BlAUzBbMraGMiWKkh1gQORnoo+ IAVWU3Mf/v8WAsc8yfLUPyQ4h4m2OcT6c2Mn3jhcPHHDhRN56sBLTnXd hCVqEj47+92CJWucTetzMHJTic76hgDNCjCvJ9Fs7dy+HaCNjEtdnfZD YV8= _443._tcp.iii.nlnetlabs.nl. 3600 IN NSEC imap.nlnetlabs.nl. CNAME RRSIG NSEC imap.nlnetlabs.nl. 10200 IN CNAME open.nlnetlabs.nl. imap.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. miBfNrT/n007ntwnCxkSp0LOcEkpoo5UzvE24TTSxWsZxR0cEqq1s6n4 2kMcejkDqMc/wy6mjqZLF3g16X8bfh/lQKLlaThkcZ5/L67ChH6oOzzx /HbB3kidoWWXZ2CdBhoLuMiby/h378mkNYbmbl1cxJuw/NPllIGm/jbm +9M= imap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. XEnQ8aWyRJws1e8GlT8ZC7dOjf5voX2mebZs/dheGgKxT5ZB0NsBMDOz hQlYiG8Ua1H2a2kEZQgX4nYJQcRmykjGdD7ILBsfJ7zzLQO64KnWKv90 Ae5NGKpDSAVOI10LgVzsn9q375Q2A3VeoXwE+1qYIUxpZjTQ1dY4KtmK FXI= imap.nlnetlabs.nl. 3600 IN NSEC _993._tcp.imap.nlnetlabs.nl. CNAME RRSIG NSEC _993._tcp.imap.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _993._tcp.imap.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iTV6ltPPp7sVmnp5U++3RqIANVsG8fd47sEFCuWdDQgIAvniiCdDw9T6 v3ThwlY+WlzdVWm1sG/9DU+XXFqldgqFQrl45k5ZfuPlcoNL/UIePJHX gT5+NC+74WwIq0y1NeyUBPzVkEujHLTEE3SdIc9DqrOyywdS8ui4LFu2 8Ks= _993._tcp.imap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. aThyH+AwPVYRr2wH+oxa5WK96Gyu3bY+uThi78u4/YdJ1oL/EOQ9oY4D i4v12STGrrY00TTXbZ5Lx39SutKuTiKIWIOBvM7RfL4W6sXxFg8gNTT+ W1Yg5n/z0AWrim2895goZCV6NaWxZ8Vc/4jOup6lKDoa1syjaY69Q/PI 00w= _993._tcp.imap.nlnetlabs.nl. 3600 IN NSEC ipdns.nlnetlabs.nl. CNAME RRSIG NSEC ipdns.nlnetlabs.nl. 10200 IN NS mermaid.nlnetlabs.nl. ipdns.nlnetlabs.nl. 3600 IN NSEC _5222._tcp.jabber.nlnetlabs.nl. NS RRSIG NSEC ipdns.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Qy9KC5vj99BYveAvbmo1McOMsTMNbFnZBKm1tvQg79/HV5mjS0d09qD0 m5Aj03Zb6SVkVLIFPvOgzshQ+MZWEMjYW7yIx/DsE83TvqJQeu/uvLhs TCADyXAI9b4fETwChwvVZ/YTgW4vYCzyXChC5/RJoigTRNmYHAwLrbQK Nzk= _5222._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _5222._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nttSaagT9bxm4ZF5TLctCjVY52RQlENf2SFrjT25maN33x2jfUTBAYgq jWLJQ/gV6Uw+mfJfLZQykFUeO9JOrwjBUagYcAa85Vcw/gmjNWW0YiQj GwAGeQhuSH+VAUdb37Di0/6JXtaqFgPj2OR0RvirfB16O+OYNep+YuZY DoQ= _5222._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. QsRz4CB+nT6PwsMNuaa9YlwGepp1mBgdQejdIXIiDAYas69EJzjmF9dI zCbMg2xjtCj0D+NFAdgXNlcVOHEs0a/aSBcmPBV5NJYUGfEFMejg4oZn t1pofh/dmF+Pr5y2sQiDWyJ90TTWLtEwGibZAEdCGZAWx4/tbakd675f f4s= _5222._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC _5223._tcp.jabber.nlnetlabs.nl. CNAME RRSIG NSEC _5223._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _5223._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Fc2JSnY06vJSW+6i/bFNCNe+VrDQFwp5BLEywlaNxE3EBWusjcvTUjW2 6DQ2dfZN7R3cb21Vg6BUi26tcVf6NJTzAan04P+0t4EdfyAMQlE92qYM eISSyFtuYgZm3MIlVG7HR9Jy0XOgsZkqQScNP9uJTFJeji2yMZZytNBd ejE= _5223._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. IzTaEvt3f6jAbM8nqHXsYHSpHsHkm9xyhlVHJKOfyRh+HOtgrQuQxGJ/ ByJ4jUofrGodjDp7N2tA8hs27wMhXaYPTPgtbUQ2NriWq6waEwcaP+T4 hCpXwY6H5ZAhevMWERUdM2Jov8bx2u1EEDdjengdvD1rTzZEoOe8b5Hw Y04= _5223._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC _5269._tcp.jabber.nlnetlabs.nl. CNAME RRSIG NSEC _5269._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _5269._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. N/fwXMT/lgHGhNUo55DgWDukImBHDxdqBKCatRrSUagAlm1QyS2YCmYv xjINNCPnqGI/n9Pkmo6cKlr2h4PS52BpaLurwMbQtqqBuUAu0XQbjRSV cto/6LKv7VYXKy564HPEpCrtVIF8UJiSCBk+Euat9v1E4VZBf4kpgcEq Dss= _5269._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. r8YxETSCf9pBlBtdT8C0lTugl75dlJUP3LOzzVeBMBIIUX5dc7Gu6O1Q BV8O1GNOHG3iSMXuBeUq8PGDP+QZavAlTPUHGeH/m2JzTtCC9FCA59b8 8xU1I/wR85PXaPwIvmc6BRv9WFefY05SDt8qNVq97YuGnEOi8kKFhJG6 oV0= _5269._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC _5270._tcp.jabber.nlnetlabs.nl. CNAME RRSIG NSEC _5270._tcp.jabber.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _5270._tcp.jabber.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VDLXaWrtvBxvMt3SMrEpAch5ZuyM5FRjtnuz0NRV2dy2p7wxpOvgF6Eu 78Xkif4SAuP2y/tbNs5lYYCWK2XlliZVMvAMZ46yp5zUsYHjEHgeJS3q XNYfxsIS5Df6mApE9Jg/YrZ7tYcLo+zN2s54cmyOGbn97Ec1QOXfMryT JoQ= _5270._tcp.jabber.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. VM17U76vZmHlgItXmbILQ8EBW10jlL7NwBTAinNIotzSecq8DcxQxj1+ pCSz3VNjYZgvWxHKCf3s1+eqI7VPFS0ERgrZEPOxz4opeMKQj0PJkuT/ oAfChkvyDXHQnsM+mnXGhTdCd00F/Lx20k9GhS/u3kLXV2ytAprTM7OT a4M= _5270._tcp.jabber.nlnetlabs.nl. 3600 IN NSEC kameel.nlnetlabs.nl. CNAME RRSIG NSEC kameel.nlnetlabs.nl. 10200 IN A 213.154.224.143 kameel.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. m23LW2cvE8kgsjtNGTFmGI0FP2aaooLumlkKb0m/XEHoQahJuiM7Q6jt lvtkeTQJw5L4QMXPG5u58fomfNMd/Z4Ql9jcoYblNeiCN4nhunBdAdKS xtjxSOuXhXCMQ654TjvK4DD8PkFn/98zBQXrf0fw5cncRLIQ/v4cJtKo X1E= kameel.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a4f/gUK0OORTuzSaqixp+2hEZKGsSna+WQN1t+0x2i2hj0sZ4ND4H4lY yhum9+iywI+ETfNsallmctl4t29JdyBNio4U/XtO4NxrKOH7aGpQhS4D h6IILJc3uSEHj8dkAZ5f3r5pIfmzdy997voHErlBJZccpNdMxMEB7IFB Klg= kameel.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. O3KP5qc1prXKlgI/BvrhfQxMM906rOZso8mJP67toO+Tlw7T6uPAL0ml zSHZGCGSGUKBVlCfRakhs/RZE5e0uAgpcuNpuIKZwgWA2gs51vJcw3bx iFdQibN6RYawACI7KhZzbdVveCExy4kHILJiAg/Utuf8xhOXQCh+qy+A KrQ= kameel.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. m9cYOW2Hz1kJ8cKO7RWFHH3FfTsxxjLmqUEOMv2JlugIKz54LfeSHehh Y3MRKI2Q07TulyuPWmusSIGN/X4SVoz1aC9QhXqPpcA+awZgNloUr/TO 7s0xhAx9IsWutrs2kZd5KhY3xI+yrfq9RLonW4DVYE0Us9cjYasftFCW wYg= kameel.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:25:: kameel.nlnetlabs.nl. 10200 IN SSHFP 1 1 A5322E0D8C10AD454A33C132FA158EFCBE9F2C49 kameel.nlnetlabs.nl. 10200 IN SSHFP 2 1 7D2CBE4FCEE2724816E33311313EE64410D1A6E2 kameel.nlnetlabs.nl. 10200 IN SSHFP 3 1 0F3CD2F5583C838A02EA88DA659F57C9A5C6CE34 kameel.nlnetlabs.nl. 3600 IN NSEC kern.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC kern.nlnetlabs.nl. 10200 IN A 213.154.224.30 kern.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wK4k+3UlJCqeG2NUd3wNPFLfIsvUdDm93ZCZwJcO+0y5X9+dnwTeBs1T bC641sbvX1rSK44wnQ8FphFgoAyBRaxr0z71/3gP0GLUzmmInK1pbTRP Fmt6M9CuPqJ5wEtwJJO8hfy0j645+EXWUNInpdT7xu8a2b6XTPVNDS/9 KIM= kern.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HIHufbp0DeLsp6DdeFo93c0b513hQg9oM8ONbf/spQZAM/+IWccwRxFx Uz+v2T4Y1n9P7npN+uz2/2BvxAG30Q4QjkAZ7EGv5loCrg8E2/D1L6yv EO0Yecri9ThjbDYfQJ4QWKG/W0nY4yQnwQfOXkONtD1ZUG2o6bskcCXh mBc= kern.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uhtSwJRi92J44aicDhTz6Y4yC2JZLe3o7K/mrlsM1oD3zlTh2FMZpceV 4mBO3bg8ChGL1gtEffrTKMMjqJhmcXy0fS9UKRelGHo9BMM8FoeLcJW3 hii/RKD5TF2LGbor21NUR8pBXnsL2szxN6i0SBnJawaPKjNT+Z250E/q QMs= kern.nlnetlabs.nl. 10200 IN SSHFP 1 1 507A065F7173879238F947D09904D50F30F5E864 kern.nlnetlabs.nl. 10200 IN SSHFP 2 1 85F482729396EEF58401030BFC128A5BE8225146 kern.nlnetlabs.nl. 3600 IN NSEC kiwi.nlnetlabs.nl. A SSHFP RRSIG NSEC kiwi.nlnetlabs.nl. 10200 IN A 213.154.224.26 kiwi.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qAsBoSBgD5ObUOGG9Q6n7Lj6sql18bPoBrHu8B85yhXSTbG9jCVlMSuI D81r/0QZ8tDVMiLQSnlQKqlB5BjBNK3PgVkc9jtqQcCbC21Hg5ulb9h2 rQpe/lzPLBWKnYwBgAmY3/ERLwgmQ73RulnA6tDlRY9K6Obb2MORwNHh gdo= kiwi.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fLutL67/JU8CO5j/AaMtcDOZBe93KUi40AySC6f+MxYfLTiR+ChzYVbB tTqCjz6JNXKDbyt8QrnTgg1nyDk9L1UkrlGWxknmxlZz/N4p+zDIpt/M 2dFY40WwJFGclHb0grpE/esgXCogGH8MgJwrM/QwaLfSbQ+lJ8KW+/s8 OpY= kiwi.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ayjYPQCaGAxAMOF/yF4UGcNVFjTH8E30fpI8kKP2fK8y6X7PGj/vMdjd 4EMnl5Fl1ckmvDM6ID2c8RSIMvQ/BSOCnd+JfiPKK2ebJDStBQtyXXNL zBQtP+IOpapW92GsSELFptEKvAfTTooEUnQ+4GoYz904wdZyooyShKNi Gcc= kiwi.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. PvfCgismKsqpPHVjIK6CrC8CrsYRJ1JHIDSVI8o3B8ADlSfkfhhozam/ HRxX+6C9laKDfh4pBz7cN/elWRVaCBbJIuvxAzCajpQutVlQWW3LO5ac X7th62t0Mo43/U5ogvyVp+0XlR47luYBONz8ZoH6/hj0lId0Uh1eXFPw 5L8= kiwi.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:204:23ff:fe5e:33e0 kiwi.nlnetlabs.nl. 10200 IN SSHFP 1 1 BEA78730A01455690B08C58A05F401CB8C6AE160 kiwi.nlnetlabs.nl. 10200 IN SSHFP 2 1 582E0A63857B1C98C62C1378C760FF821E98877D kiwi.nlnetlabs.nl. 3600 IN NSEC labsap.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC labsap.nlnetlabs.nl. 10200 IN A 213.154.224.63 labsap.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. w71kPEYNmBoP60QrdTTvw8eKGmsgLQ2uNAvwtfmiQ9oeWJukzwNA8amj krdtfAUys0tgJPyc6hMnkTi7d29Um+na3SYVSqwZ0HCGqhAsoUPOS8pi sYX1Gw38MwhbVjTcR/eLMFXMxmd/VQuMo/ofBSJPXoA8MCVFWrkGX2XV s+E= labsap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Xcwy/RETAoiKQjs0qd5F4qHVkvfNoqWtoGNOrSgjvq5pqgMSL6p3fIQX 1MoAYaW2zHGvKifcp6ooCEeu0SNWEal1/1a4bPY8wvrp7LvaGaLfGXDR Es2/uem4uypWiUvOvmMJIiH0gqevwFoBde8pjK4ySPh3SiA/+H2+ZSzW tUQ= labsap.nlnetlabs.nl. 3600 IN NSEC leviathan.nlnetlabs.nl. A RRSIG NSEC leviathan.nlnetlabs.nl. 10200 IN A 213.154.224.21 leviathan.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. EZWvsQLLm/fV1dK+yR45BhP5inGkk43JzhdTp8jF8NMsFPPkJFNcSpf3 /v2oZogWOQhnR6gA81+bvf4lo1xUqy/RGwTEjQAWyuHBPUF/48xjCr2V 2HrjEiVkuAecvbivMdqcjNGsX3cDQ5dE7jJCXrnB8wfwF85Zcodo+3+Z rBM= leviathan.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. m7tpuw+tQ9Jf4b12x20p3mN2+AlYbOXiOPQdjU0pRRgv5u5TqLKO6TNV G7vQnxJGy03icn6HiElzQlIaxtf7D91z/DIxBQpe9sQhsqDqGUtguzNz W36q+AhvkV98Khl+Pjol1/2oKNbbByA+F1BNUnD6pg7UTLqILNU2CE05 lu0= leviathan.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. vAFyjtEcOUP6pl//nPyxOWxWQRBagGv4GHmmLQap9KpmOTY06g7kfph7 Bj4+XSsgo1LVXZCv0wAT3yIYHSCXoQ8ics/fyc93EqjWJSYJXUbkEKs4 PhCkFbTFblh4UiBinYpKeFuthMf098ReyVF2AdeBVEl+600NuxMK1jrm nMo= leviathan.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fed2:4db leviathan.nlnetlabs.nl. 3600 IN NSEC localhost.nlnetlabs.nl. A AAAA RRSIG NSEC localhost.nlnetlabs.nl. 10200 IN A 127.0.0.1 localhost.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. t5C1K6eIYaMjLNyL7AMEPz4nyOHI2PxVc6ZUjwaaQXedBGjN3XkoAmTU 8LA+OFTzXMbcVkTGs55iY2cKczj1yFg5Y8FRe16HyHJAmsls1/bE2XiX ejs/vjfbBhhjxnQx0jJG0FmDhD8FPubXeTZPtYv5Ffmvi0aL+LIf4oK0 3PY= localhost.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Z4nLnz36xZ6QH3VcJ8UE9B2ilC1Ec0ySQlDw7a9VYIMD+smyxTil8rrI 4QYczO++htOf+fCestLewef/HjTc/SbBsRruLonaZ2NzIoPbvzw0tp0M mNCPuWsEPhMGEHRqK2P5rQ11zR/o0nx+1hdG9Kh23P9A1K587MV91A+0 AFQ= localhost.nlnetlabs.nl. 3600 IN NSEC loghost.nlnetlabs.nl. A RRSIG NSEC loghost.nlnetlabs.nl. 10200 IN A 213.154.224.1 loghost.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GQKsS7qA93Bt7VTvbYaAArJhNyNXjgIMdCIZdTI67ffY3TLeJvDoS2VG A934Rbv2KceJwYGo6s7/KUE3It3BGtph3QRJ8SvVjJuAcb5DJAXkjkjX jtoqjsL4ZZt9vUURYb8ounPmvDdeeMUQcfO8qXPqXHySauDDabVrKNE6 paA= loghost.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xnY9WfAcW/FmZgGJiZavBCg4w3BN8zllzqjaPtG7BJQ/bOJMSb7pjt7Z JHPlfpdusQ6EzCpcspXcNGsmo+E7mm/Lse7EA6K4Ih282emIwFsc8HUM HDBDm1iDAgfoW2dOZ19UKyeSPL0zzTIV8/4QT0uVgfAGzih87ko/lULt wLc= loghost.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. af9ctsqbZhL+ozI4eC9ViLQ4nJb3LaFChSU+gV6nU9jlNj1Q7yXPqlIx S9BJCBVy7/JmNsesQnGi5sFRIYpVYe+XnUKZpgz0jL8t4Jn/rXrBWmu9 o5O7q69vfTJya9mf+BXMYqOogwlVDg9tjdY1CDDaXn7cSu1AH1HZHGfO Iwk= loghost.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 loghost.nlnetlabs.nl. 3600 IN NSEC lummel.nlnetlabs.nl. A AAAA RRSIG NSEC lummel.nlnetlabs.nl. 10200 IN A 213.154.224.33 lummel.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Pi2NlIWZUc4gPanjcV6gb37V8nN1nE4hkOdX8wBd2/Vkefy0sBZ30oWi iTsBCvkg5ABz9HY9J6s79ptkv4Xssw4Nin9JCRqFLcnwFbnVNlvicXkq cZsFUcRx8L3D/AuiCyg66dBZ8as9U/ovn8DxRXaomZN9UpC77UiQN7FS EhQ= lummel.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VG9/i1INijHh3YG2dxNr/QnDa4y2VoN/tEZW/V+PylCqzHcsKjjkmDew SCUWcfD32zrgPBm3ScjjkKmQAULLBBrjkPjaK7GOqiBc6LEetFEtUZER 02KGonXJXyp3Y7kMMlMDlUL219xeKZj5S3WmtlzkjWoHtn8dU6J7CqQL ab4= lummel.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. lfY13CXm4z7UJaFUsbD+bXDG6OaFcxrCOqneRtf8rB3n8oRiDRqrqTX6 5viMilhL2LsPyJxZ11BUV68NTzHZZNf9mDK6NMWDC+BB2nFfr08/NUAt r9BhdbDkKfePqrz1tQ4AkEKPN9fRMOaNdeRd3+wHxM7rW0bGFJKXQSo4 cdg= lummel.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. qp9ZlklVudYMWAyrUej07TFao/0XU08zOl22pmSFXInPMPqn89F36nlh JVJCQGSK/ck6cAWAN986snvJZN/hxRDbTStMd4I7QskKswg8IG+SjYqF bbWDq8YDNdTfKARYBZYbW9ItlNbpp7uLY7WcC3nHENBMhBRhbkgg8XjY PoU= lummel.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:213:72ff:fefb:2434 lummel.nlnetlabs.nl. 10200 IN SSHFP 1 1 714D9E0C26DC8A36D6BC9329DF9FBA734C80E059 lummel.nlnetlabs.nl. 10200 IN SSHFP 2 1 16A961CD6C8603459C1916C0A5A7A0318485AB69 lummel.nlnetlabs.nl. 10200 IN SSHFP 3 1 43707AEE3D74D8B8D292CD8556B32FEE2D43C805 lummel.nlnetlabs.nl. 3600 IN NSEC lustra.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC lustra.nlnetlabs.nl. 10200 IN A 213.154.224.52 lustra.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sc8OTOBeD7qHy4LQ0+9FKiewEhEvrUa9EXd6LyMkeKzomee+545x+NEI PcWP245feCB2mf4kCIzPisd/DIK5jIWQy8c+CQR/7bpIhInaiPAL+P57 ru0MEeiH8TSvvg6rkmv7URoxp0P9sCLPwv1GjnvXs0LZpW7s2kNKKL3h BHc= lustra.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NKtQaVJMZfUSfENZ/9VdBE/nfPzsWgygLx4k2fJH+swmMmqc1qrhU5HM SYBZZx0G4xy4EB2/PZfxdi4PQuPknWL/a68SYUWW6tOKp1BCHfCb9vKf h7139jq6r0hAJB+mrkocm4VCoitE7Lr78gnCIQXn9hj1XThAGau2GzVi TEg= lustra.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. w4A1xE0fHWNynO5wXeoUbRInwBu+74CY85Zd7gMLCwEfdunpRaiTTlF0 UE9G/NrNMBbOhRfYrcIQHdo64dVjqIoxsMhoT9ZhMb1oBwJHVaa9OPEX IyOgcNMHAu9OFJG+FccIanez2sgEjSX4hTjbtq36qp4HxFqlt2nO2OB/ ZjA= lustra.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fec6:5984 lustra.nlnetlabs.nl. 3600 IN NSEC magnesium.nlnetlabs.nl. A AAAA RRSIG NSEC magnesium.nlnetlabs.nl. 10200 IN A 213.154.224.29 magnesium.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Hu7ti5A8FKKnuYtITcL1HeLZs02XhpuSy8sGQzfwqNn2EJS/RJf/fhkW ln9kWsVce1s6QrxW4Y44gVs7F5O3K9edJ7D+8gVlplDgSYVyfJOIcw74 qSU2uqd5qmvl3OT6FG7KM4fQjoDXmAtusninqXCXKW5cyWx5AmQ6JHwi XOU= magnesium.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NgLlGFemonFOZaepSP+whiWmmBjR7UFVXhbk32Qy87IcoGH69caFSd/p 5TXDlCamQ5jylh9wtj0cKwl/2Lj8VMbPRDszMD+dQreO9R88NEXi0k4F 6AH7KmM1SeWtScLnM+dDpBY3M+1k5gKAG6OvSCRKgNaoiqarB3/dxNfD SZ8= magnesium.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. A+cehflHGgMrsAFX/6C9dJ2H5j3jKgJxvc9oW+j9qRKq24DWyTpst5av J/2ELF7fmMo4aObzAsYFuj+0HL1FL/3ER0zmr7BRdlJpEF3FgoehSJC2 pO1Ba+5Sr1xwpq6dn5QuMi6ZyCCXciHHrIaXdn/MPojhMgThM0EHNeF7 zmM= magnesium.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:225:bcff:fee7:c3a8 magnesium.nlnetlabs.nl. 3600 IN NSEC man.nlnetlabs.nl. A AAAA RRSIG NSEC man.nlnetlabs.nl. 10200 IN A 213.154.224.55 man.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. le3ZV3IAOGqt29SB438uZgraNdVjsL+czFwqsMdlrmZ3CJ8fxDtnjHqb G7bTcEZvdFB/DiThopl7jB8pNNRPFr6CM3Vg7GYdReJgXc/DWboS1wlj fVY9epr3Ix+GsDfruuclQjdnxDlIEehZUUnEgu3xheuXL67bMkl5fWyV ck0= man.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fkuEhUbJAb64QZ10t0pzgEs3ExMPOtsvhHTpInw9GGnSGhUewSdyR8LN mjubuqCOldUbE+6dPdcNuwhrfvaJyZTldu42MINhtRCeKo9NAUwkxVF9 BrT4TC7Nz+VORaPJPD5+J8RgctjE4kU6jQTZvzCMkrxxzMFACZRF75QH v3g= man.nlnetlabs.nl. 3600 IN NSEC maxima.nlnetlabs.nl. A RRSIG NSEC maxima.nlnetlabs.nl. 10200 IN A 213.154.224.208 maxima.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. VoWRakLC+StzLtTeUdS9BqGsbuGaXPytOsyROgkLfx5YwfZQ9S+IbO9C Tr8MaTPbh0QCcQx9xk03S8uebxRYcuYtOED6RlKzCgcSyyYebtHgpFsr l4vd2JQiGyo6Di3xvnYiNUTMgDhW1fOXblwUaJsbnyJC7eWmoavX7aJI i1o= maxima.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mqpbPmOS9G17bYSQ9OG4LRf5hRQ9VCeAUamOkajYmZevbYEj0FDShP4h 8usMKK5+UHzRVo4EtrXy10bSUGrdkJGFMPgc6EIq/0//hSYAhpzPmde7 65zyw5q5jZFyhK8YMttpNtdOUcLW0LJW5OnDC2PKINnag73+IQgT+Li0 AUo= maxima.nlnetlabs.nl. 3600 IN NSEC mcvax.nlnetlabs.nl. A RRSIG NSEC mcvax.nlnetlabs.nl. 10200 IN A 192.16.197.229 mcvax.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CUC0XymCQ7YfFQ1qkjL731oPc4/80S+9AIKCDIpOcD+/KGirLCNhXoUz 73U/7Ibsm0ZjOfZ1HtFKceRnjOl/uGY0007Wxbas/O7twGMPeg6Hp4dR 9E968uU51+6Pqu67kPqrXeRZFObH/bCpGSq1JAjaPrnScGLa4WriDiv0 /OY= mcvax.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. W7D8uLNC2Nl0XVGFATuHmAxI8xAjeGKc3WtlfNFJggcTlsLrURWPg6ir YcfdzFqMpprKbunEQFZ7Ol+A7fCbJe9HMw12dSA4fQ2/PPvyOHeB80++ x6Djd/+w9lYD559E9XtJj4dRLZR5PAU2dY3xDXPI+rdIRyqfnGnNSbAa 3aE= mcvax.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. y8XxonD25ER6WpNF73VfLFfiUXePVLuwvfFyV+jotG2N6HK8mdBFaQX+ ej39Qo0UxWkf1Eh7bEZSYCeR7TXd2fp9CBismqnNTykji7vBNIorzt8g sntiYldaLDCZtg0ds3EexBSbfOh+m98TQMGEOiAWNGn1zrROXyI3i3rD F+o= mcvax.nlnetlabs.nl. 10200 IN SSHFP 1 1 51C86252CB0488653C798766A266CB8142AE2333 mcvax.nlnetlabs.nl. 10200 IN SSHFP 2 1 9E3B089D4B8A9B360C88D44C9D07C13146C87219 mcvax.nlnetlabs.nl. 3600 IN NSEC mermaid.nlnetlabs.nl. A SSHFP RRSIG NSEC mermaid.nlnetlabs.nl. 10200 IN A 213.154.224.45 mermaid.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rHmFJSkyNzptUBIuQaaKr2zb2U5H1EivOxjEFxIAvZCsGH2XffWRPGOW Hji4L43u2yIV+wtAZFezjRDkFZregwQACi3++/jrwVhGf55kwl62HLqu LajrRHZnrfI4VeTeu304IheQC4ac2b+VmPEahOP82Tzs2sJA1tQYrB1U 5kA= mermaid.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. AonqqIy1OONOjM2tskxUMBJnW8YbWMmPQdCh+quLt3JvQ0wKXiqLhmPB YVdIfD9+Y5qK1I5zlgVBFawgYobZYZNWsoPE+Th3TPikHvzkim2jm72D kxvvO1wPGNmEHfVJIYMf89E4Tafg2T0dfTfj3H8iKrh+oRwbt0ASJUPL 0jU= mermaid.nlnetlabs.nl. 3600 IN NSEC mine.nlnetlabs.nl. A RRSIG NSEC mine.nlnetlabs.nl. 10200 IN A 213.154.224.146 mine.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QuILOT8ouhGuy9+rzR+BXua5ln9WcYSbe3f3Y96w6yBwo9wlUF8aaYEC P7VlMzpmL5bWp2F6D5ceE6YnufLOdCXVAF9bSD9LsGTUoHTlpz5AcGTY sGG7hlPQuXuEgdkYTXnSpZsIJ4OauQTZkz2C2XQLa7cAEl2ITo2xHguo eVc= mine.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FF8j0F6CHRgyani6OfSiuEajaHkzFIHbadxhWYD5aoxnh9UdUV3vPpnk yP75sl/x+eLsHnzRIzgACxN/3CgR2g3cEEXsAJ50wqqQVr5H3O7IEwwJ s/je8GgSjC0BQXpK7PfFZSHSsTR7HqNcpoyxXlppDBTAKsl/CdSkzy+o 3pg= mine.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TvhuMYLbzZ+WL02eHnLoq+YFwiNUMmu7oHcwpGPoXEp/WYRILOjwFtXZ EGJHLxSIShk+dzZ/l6zN/M3cw1jYdlXdR/ZGC9bwAZFIj5leJy9KWzTq pynue7whJ8J4oW6tcLU8PbDaW4mUn9RvQBEzcGUmcwLbZPpewa9jWPKQ ktU= mine.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ptgxugAkoqtx++3LcGJ86LF/Sz+99hddcjbfAfDLCw9lnzeTq/izbYHv aq8BLtOvBuTqUpRaRj+0+NkKvu79VHX+qiMdkw0MSQKYOistetnqFOZQ i6zDs+eeIZRpI51/rlA708ziFfjtitcMp2duoQwcf56vegZe+R8BfM2n 8aI= mine.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:28:: mine.nlnetlabs.nl. 10200 IN SSHFP 1 1 5598148ABD16CA46A5F1978D0566D253375A5F27 mine.nlnetlabs.nl. 10200 IN SSHFP 2 1 C0535C157EB97B21B2E52CC66AA933A8ABD7BCB8 mine.nlnetlabs.nl. 10200 IN SSHFP 3 1 10B764904D485D2BA9F55231D1BFEF01E15CF249 mine.nlnetlabs.nl. 3600 IN NSEC mirre.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC mirre.nlnetlabs.nl. 10200 IN CNAME rpki.surfnet.nl. mirre.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. T4bZrYZZu+kwbYQiB/hrYZtywNBLXhfIdrteROPUGa6uYKTBiQayLBjb H7QNOeen5ux6JZSeHuYCRGm7YVKKdCw2fJ6RZ1YLiQMJsxRu9KOnxwvv l480mbv0jMARW348Lt/G+IbmkYQNe1pppwJe9vMGzG6I5yagsOEe+zGW ep8= mirre.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. eeqMxjUtbdtDdufJunheC9AktaUc63dF1vAmOiRM+zRvl4fA1JD8/Iho 4iKhcizOrhkW+M4BjUOGbffDYrkKGWyz4tQJnjR0v3FRKU/vGzBg6kaS du387En5FWhIz2a6BWjq1f9rcQz6sJOBD0ngEPa6ZWa6SSqAwuaxC6wQ S+8= mirre.nlnetlabs.nl. 3600 IN NSEC moby-dick.nlnetlabs.nl. CNAME RRSIG NSEC moby-dick.nlnetlabs.nl. 10200 IN A 213.154.224.28 moby-dick.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rjaW/SjPZQR9opeowD9Cf2EsLMSIEMVRWaZvu17jy0s6e5Mo4HWhvzdg iCyDusXA7oNcFUjYIR6/UdOE9fw+CZai9KLX4/S8VOfmlFUZJ8G04O0c 329+ae6+n87bGre5GJOUnqOx8LcjPizJc0BOINAf2NsCF42rcEsV+ibF J+Y= moby-dick.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. SUVyUfbpQWRdn59Gq0grxZl0EWy2T5HhiyA5fT4fvfuaTADR2QeaH6IX 5GpJ60VKA5eOoC9OBTZiSsxtd1Az+nM8gHgpjTcVcNvCE2oxSAS6oNVz +zesAB9inMZB7Gi/pnB4gjvi4cd8+UMB43Ig8yoolOdyt04TnHF3rHUs JQ0= moby-dick.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. seL0XTC2yixKJYfCmy7jeodFdXU2q5VPMZ8MMl8PPR+QIMMEFSWymQhJ EvwVwt3S3F5PQGp7X4+m03Ngtw9zS8GS6bQK83cpuSP4c663B+n1pyHu ktdHR01oK48qv2B8eFWv+QOeUnI6Wpt2UhEI1xs313cDSXiqFQCu3wjp ejc= moby-dick.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fee9:1c9f moby-dick.nlnetlabs.nl. 3600 IN NSEC monitor.nlnetlabs.nl. A AAAA RRSIG NSEC monitor.nlnetlabs.nl. 10200 IN CNAME nagios.nlnetlabs.nl. monitor.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yze38XmcH23/GK67TV4bXmOapjgBESP4+tbrCdfYFoGwCVtgHtdO4j0u Jh5GDaB2v4+OBAmKgrXBB/xOTlZu3R/c3AyJndbd2g1iHqASmIqfYXkb LxiQhU9QVeIwFaClVLh6nxTC1+JkG/O6UudE8PZfSUlY5A7gBdaXZgbs rNw= monitor.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. OG0LutiGlU8L387omjPDECL6Mh8w+xcCI1Sp4U9fsTYjAtu0pRUB9yR+ elBRHxCW38NxrHpLxEKTBKuCT51hCuHAWKEBGFO9GO4/QV+HgcGwrDJn j+PEP2nYZIqIHvZ/cfKSNnpIpN7c+5NoPIJYoU6rMaGhGc46+Dt2+3WJ iMM= monitor.nlnetlabs.nl. 3600 IN NSEC motel.nlnetlabs.nl. CNAME RRSIG NSEC motel.nlnetlabs.nl. 10200 IN A 213.154.224.7 motel.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. S+P/gbnSQdL+9mnkl5NdYf6+/SsGK9l+ppaKPFBfC163QKhX4f//EvU7 4Ij0SkQ7p1oAjx4DTTDeA/4N/Ac+F+hveL+FJOE4GwT/A7q/1HJS04nh rR+a70FHTeT515CUT7gzG7DQRo/OjS5DmVsZdB0JRK8tGQ7ZgPtW2PL9 XHY= motel.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0FVbMO6M/uo4OqjweVJ/3m4J/FPU6mdmsGIvjt8hlSp77RosJn1MZrqs bHoK+ArYJ2Z32QZuhAJnLm+RU/bbzizps+admsymmZJ8sm20+x/FAlML ClyG/FGDqCNHkZ4+t/zDN9cEyAnDLcnCXRJEeTdBgNyT9Yk9e3DMi4wj TLE= motel.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ZGCdLU2VD/3LGAfdcNHub0OO7L6ytEv+IKqoaCxB9xw4wNhFijKZinlk YlawC+ylOS08WoIV3h8ZVqEX8dce/UDma76TvZsF1SDbZUZM9akkU6Po /oOmeE8FnCh+OuDC2dx0IE69ePSSS6q1XOE3gAFBOmSWg/H2M/+iGqP3 z7c= motel.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::7 motel.nlnetlabs.nl. 3600 IN NSEC muis.nlnetlabs.nl. A AAAA RRSIG NSEC muis.nlnetlabs.nl. 10200 IN A 213.154.224.56 muis.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wza4I4gA9H46HW5fU7K9rwNzvOYZVIDmPYJjohMZbO+x7s9ja9c3m3Nt TG/SZdTXGCWjh8jh6marIGfiLBMyzv4i2egV3UBpqGx0As/oCSqWjJaj 1ZhHWtDDbnT7H3SfTt6pvZzT3H3z/btj89hc8XpFJxysOTazfQSOdC62 T4c= muis.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. rrcpuS72u8zuhFnhIzt1mqWwuRxaWQyL14J65yCOQo+iHMcg8d1xFfya n/HFboVrNFmWpsVkULiyquUqRQbuALuxE8+SkSwtsjFQJxemW7A+DLh8 xLrMg7yxRKl5BTUjJeKNK2KAUJRmwuPHjgm/Ws7ZpvjhoVZIWuXBMms/ 0NI= muis.nlnetlabs.nl. 3600 IN NSEC mysql.nlnetlabs.nl. A RRSIG NSEC mysql.nlnetlabs.nl. 10200 IN CNAME open.nlnetlabs.nl. mysql.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. CNrX8SLsxsKTF+c5iS/+YW9TsRnMu8EkEEhMnt9T6zt6Vo/B0ZaGBHpA 1wb0CvF2sClbF8R7FKiVKvFSYDqCww3/yCdYvI9dWSTB+IOt/SSRXPxc zn21crH6dDnf3D5/JmSH1CXZHJlK0v94krR5atbD4jwVtStQecglO3FX 8dY= mysql.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. k/zVwY5uWnHN/P1rLlD2q685e5m0O8p5kcPQB5s0eiy7lgtsQGv0cksu LtQU9BXxEzMfbD+ZXnxA7GF7ijmxJaWQ6mxO2AvBVuEscpcHhyvpJJKd fBA3BaWmfX3wyhdfla26UseimbRTigCuAVUBYgIRdpltJFeMQKn15OZw ZNc= mysql.nlnetlabs.nl. 3600 IN NSEC nagios.nlnetlabs.nl. CNAME RRSIG NSEC nagios.nlnetlabs.nl. 10200 IN A 213.154.224.134 nagios.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Pz5xCIRK4xtpercGB5uHI9E8V2PQQl1Nn7TB4bJoh1bwExwJAyOKQA3u s45zVNRtm0RH6nnBEEl2f1somZGTWCx65hSNfRVP7CnuvyaDuh+FGML+ WGh+/gBsPHsjfeC6pPM1f+QaavgWu7P5ifkWEvrUlkF8dx9g0LmkXubW 2Tw= nagios.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GgWKcGZdL7L/G+cruxqVHEyi3/oZYMh6EdlR/Xv2+3bKFCRiCdbn9oWP CUi13G2QzpC7LUr15zd9XgYR6F9aQaQFMQgtt+f3MVZMlZHRwsQ5/WgH R28rwJwTH05twRnegGu027s6gf9dClBbUaIDy6V0GmRRucgf0mdbm6RJ EQc= nagios.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WPtwgfR8q74wPyDbvLeiLM9rgsnhB8s2SsQtQQOCPrAiOWsH8MfCrsch DPKIpx8NbvQtjMKPg2yJ4SrqlIqtyBKhcGVqQL4bx1SJJulzeBFiFquQ YSA4mV8EZCSgSmwaOYvBUR1Gjt4ELtuleuDrV07W5XMZZWuyhyJ5nmKS ptE= nagios.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nXN9hSWLziW1/kj0liJynk+jwRDdgJYzOh1EVIxcEEIfDxUd03gTAIZS N/X7V3KR8KhNi/v8oG+5hyfGIwYAPumKfSIVKjd1ZxJYdZDSrrQYOLqa gabCuP9WeXb1Qrcz2XrITTUcAFaO8FYTDv/bJjJLpNQ7cAkjOqzhggV/ EJ8= nagios.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FPV9ykHq0Pg1jJvK1APbDnlt0e0K6GcGxovuStcis0IqWV9uRqW47E3l 6bqVMYkCJHStlXMpF1PzG8zTZ2nG6DqlnIIVspJY1PbVC8ae8sa3/iS3 98E61Kr+8ZXBvdAswe52cMtUbI0J/kZNi8/wob+IiezOA7b5NzsUkMRE TqY= nagios.nlnetlabs.nl. 10200 IN MX 10 mail.6only.nlnetlabs.nl. nagios.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:4:: nagios.nlnetlabs.nl. 10200 IN SSHFP 1 1 0E1A0600D0A7F2511C8D57410422D9A99618F201 nagios.nlnetlabs.nl. 10200 IN SSHFP 2 1 4EF80FEA0025691257FF34B992118BD9360257F2 nagios.nlnetlabs.nl. 10200 IN SSHFP 3 1 AF21A784B933B4B2F28967845B41E0119F91D3BF nagios.nlnetlabs.nl. 3600 IN NSEC new.nlnetlabs.nl. A MX AAAA SSHFP RRSIG NSEC new.nlnetlabs.nl. 10200 IN A 213.154.224.1 new.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. c4R5mlLsWCohgvAKH1LU37LWlERnEvmhcT8UGmWndsoUAqmvktCUF8i5 o2TbZt2B00Pu9UEMLgRR3Aty5ThdkdVxM/NXOjTbtYif9POk8EXPLT9V jMmgx+NJq7U/r3sYEs8Za5lmtD7QQbqsAwVTWO76fT51Zn20mZ1N450q 6R8= new.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wgyXvJ6iOsZBBvrgKnSYFEjpFjbju+7fsYjCrNW0w6u+JbvPiOVN+7Lh AG7xSpK0fCzuAmRITLMLt6WeFz4bK8dIo9mfgFh/Hk1IOqi8SsBO2sK7 k3YGH75U0o42EKbwT9WArZhThw9IAxgPUPGfb69OPvK4/IgOG1cszyie icw= new.nlnetlabs.nl. 3600 IN NSEC NLnetLabs-bit-gw.nlnetlabs.nl. A RRSIG NSEC nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN A 213.136.31.102 nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. oDdsx25DwqkOrfhNaq8egtntauRZXRr9J8c6VkyrwtSdyxfGyv9OIjg0 v3VzZL4Zz9HnLD4zrEkaVdapZcYVb3ML3zx37V0tS8m2v0KSIhffqcMn FKadP2qzh8GBKwOxfOobcQUlhzpWzNczVr7IQ4pnMJvneiWCBSvl40S4 qZ8= nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. MN6oRYRJKO9zE0rZAAFKavva/bWP/a/NZuptQJCbc3t/wIHxMsHl8iko v13joBs3oS4bjT5vWQwjhcsuLm8AD5bGQLUbnSyR7D2ptTxr+LcNeYIm Ddo0aZTEck91+5bWxUqIVyA50qDBusX2iXvQzVKIqXxeqpCyNcfsb+FC v8M= nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. 0oHN1xPXC7LX3UtrguFmM4hl9SKp5d+FD6kToSzZHbrvi/z00VbyOjuy Qqg7MXnY4o00S4YC0DKU3o7mnWM+Xq8ICwGWySbV/X95F1olRT8VYh4c W/CCewJcT09jBVHU3LayT6Z1FzsgTqltxhPHWuWXCTnSAHhOxhlaxH6w itU= nlnetlabs-bit-gw.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1::3 nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN NSEC ns-ext.nlnetlabs.nl. A AAAA RRSIG NSEC ns-ext.nlnetlabs.nl. 10200 IN A 213.154.224.4 ns-ext.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. PYR8Xmf312d0RE3cD0U5efOPvFSm1poaTKTnQx4DL+1YyuuDC5fejs4N FpIRtb3Ns/UUK28ixBDLCG11nkKBLwVoY6LF+uyHP/VVSVI064ovFKsE zuPBks0EHtvVH3KSgUIf03zISnVa6DSG9wJI0J6ZV4h/J9XOjJHZoX1m 7DQ= ns-ext.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. q6sKasoaqWNx9OuPoeY73bA94lzavp1xYGeYkPz7jZKe6hSNlK1nTwY6 VCAQMzZ0swNR833H8FF64lX9eNB2jjiyep2S1iljMr8iNOKTqQqC7Jsl 1swCeCedl5EIdMX4Afb6KNa/ZAAykHNHfygBzU+WllObBA7ACbMygEiB knw= ns-ext.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T3i8HFKONpCKoVMl2QgNLmZzQwIb2Z+gp0khgwEg2mIhlUeCl/qROfPF 2Xs+Qc99hUA1c8HCLOtmdEUOkfK6MYd6sXvlEZX9b7ooC7XTLO2wlRBI ltGqM2Oi7nyWEVYIhT73CB3YjcCICCEYMADVLsk+Ri3MCH23NDy/GIZ/ fyM= ns-ext.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::4:53 ns-ext.nlnetlabs.nl. 3600 IN NSEC ns-pt.nlnetlabs.nl. A AAAA RRSIG NSEC ns-pt.nlnetlabs.nl. 10200 IN A 213.154.224.141 ns-pt.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hoCIOtbQRXSS86J/RpsCpSrBv/XH+yv7xA07gFxfowyOf5nqm/bnphqL WM/wl5ZM/+lxB7kRtADiupSd9Gex3u4d9q85DW2zTjNHK+tM6k0ERzus OqOCsDtbpfDG0G2PMNcc3Tz8s97moW5cRzPmFSxDCC1OVwc0kvNQZGmS sxA= ns-pt.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. I469Bj2hh4aZmWczXVp8OVTeQGKGVZf8IR29OuSQtCKts/T54GReP7aa tYWWCu2KT5d9tcUlzqzm96l5lwQwW4ae0SKMU1iyNBnnaY5tgWUusFWy oGfTZRsXRFk/aJ65E+MSunonCWCIWtRCl3pqkQw22mN7IsraUxKULbj8 Sq0= ns-pt.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. VV4BzULEKgyPxoRlHNfjxMPVl59gVn5pKPJhOJWbpFOOcbHb2Y+THaI2 CNxYEybVVV1zDVq0Qftjo3sNuq0Pq2KxrWjpwFzGvZq9ensQUJuQHMVz wUBEQ5l3o0xiPuSDtksKj7vklbA4z+eQYZnpsNvUsPHNny0BOYrH8d1i Bcg= ns-pt.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::4:141 ns-pt.nlnetlabs.nl. 3600 IN NSEC ns1.nlnetlabs.nl. A AAAA RRSIG NSEC ns1.nlnetlabs.nl. 10200 IN A 213.154.224.1 ns1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FUS2T/kEzTCQ4gT9zlTX0Y+wES1YaF9NYfJL0YaYGAjyFqXJS7ORv7zk LkytMwdik9MAsjHZAxywPBib8UCIEvE0qIhTe/zdBc9y1UwuIPuz+5be OswtkGyr6Y5ln71FUsEXZ76QgHJ8eiaPRyBse9EcvukjHtFiaGFC4zjJ K9Y= ns1.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. iUpUQMHie91GDiWaZp/z89RBWgYCmMleQe901garsWydjNCslI6JWO1S s9NYGqYEv61XED9aPDbpDl0ayHXyVvN9twZSQxU/Jnn110wnh/+2JOxN 8h0ZaFM/6lblMzfqDx2h01K1ywcbwtqXcSvP9tcCeM6ZIYD9EsAQSvvm eCE= ns1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fj0abC9ioRjgDWAH5GNaHI+5bWT1+8EN4YVzR3+BcjZjnhIhRNsUd5JM N5urgZfHHQXsXGvKOMZqc6c2uiXrgowOokusuNU75Bj/QUhGvqj5erQu 5NOu+qltQMGpmR9ZK/qMwAUW4IHzUs1WqjVJaBWcv0BxKM60DuEOg4VY wfc= ns1.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 ns1.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::53 ns1.nlnetlabs.nl. 3600 IN NSEC nsd-xfr.nlnetlabs.nl. A AAAA RRSIG NSEC nsd-xfr.nlnetlabs.nl. 10200 IN A 213.154.224.49 nsd-xfr.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. a5Nt/daUo3vYxQ+ZQOlByGmQHwQx1YK41rBVt16snLhY6udndXmKBPBR GY6hIn61QwDtIdQQlJrG+y4MVz7VK6Ze54C8FruNJ0NrpnNC2tNapySA 4Twb0tvQoQbdg0mcIs4kTo8/MoINfv17ONq46SArrq9cnRsvEGBpcQnr 0hM= nsd-xfr.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. p5CD6u/KGV9psgwpQLGTe7cTLcrpzqonPOluVI7mOAi/wAQyI5OVlJNi fqC0Pwf7x5w2MxfX1oIrUfZ6B1f9mfY7Wrrv88Sk8V/H460aupP/zYJh pPNpzzOB9urfodGaQrBLDh55smeGx0PLC1RTqSYymiq904kTRKFX0rMq Fyo= nsd-xfr.nlnetlabs.nl. 3600 IN NSEC nsec3.nlnetlabs.nl. A RRSIG NSEC nsec3.nlnetlabs.nl. 10200 IN A 213.154.224.21 nsec3.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. aznMjPMBXNxIWu+DRnoCWDBHPOO3adIOKcKdT/9DJdW1Qi6s//DO1Ylb 9kkh1uDQiswhBcLn3E5/+xlx+zhXLcuFhIYEGQvBTgnUbDjWrDfxyeMf 0J9eztjn2v2K6oGl9ru2zxox04nnyS7fG1TUzIYxMPAHAlFhaaB2ieGk 0ZQ= nsec3.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HydNTpvGJ3tBKHbFH2sFnXJoiYpCG2He5OxLNdnQnmFcxnbgkSkrFgWE jbaypj7Crnoo8RHACcHR6XjXkb8nNMiHscHOSWhr9s+azxy1ZyV67j1j XZMosoPZsVhRSK+aBuE6kwl/jJTW3j5q5ZuiCO18QAJimMSPth3UIW3k u0A= nsec3.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. uLxqAz9flQLp+KF0qgr9pE5p1+YaZhZzB7AqWrgIMsOKBuBkkYCDssc3 d18A+rGdwQN/Byl9dkBb9q29qYEMiDfjZenJJvuI/RW84Nx3VOaaJACy MRm6bwhlpbev5OrAnWXRmuVghdX9PlC1/b3LMXR9bMfnLeVX1Uow6yuU lxY= nsec3.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fed2:4db nsec3.nlnetlabs.nl. 3600 IN NSEC obelisk.nlnetlabs.nl. A AAAA RRSIG NSEC obelisk.nlnetlabs.nl. 10200 IN A 213.154.224.126 obelisk.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. K7fvlL4xnfvE2lJuP/lhaWrBkwBFklhBSxejbs3g/yhEfih77hAxa/M7 4pzKC3Y2NpAxupCQe6ALPvq2OQ3fdci3UfVMFsuMdiSMKU5Hf39iJAED xaTD82VasELWTgz8Ll8Rexybt6z7wHeJQaOSXGv4QmVGqpjO70x3ndri BcA= obelisk.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0zAWY4P9BOQlMQpGKBPXO8WAsFjsa36IvS1xrALPaORLK9XCcBGSsH+h Z6sE5OMppFZZsqYzwT67Cb3vLfoI/EXp400xX2Sb3nzHk5gOcogx1WhC /CnYDYAFMLB/egrkO2oFn94XXpIKbmISd34z8aAhbiPVt7bZpJJXxG6l 3Gs= obelisk.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. DtxjkepitPmix9t+nyzQ6bUPp5J7MoQyqTft5xZHkFqowd/l1Gq17NMK ADtqmqCZ7vDLtbLcfP2gOVuN418PeotKVd02dgOZckN53c9Lk8x1qr5Y Cf+pyz0llOp/opad7GnT8JTFgZ5/fSZ64va1fwz3wSC/mVnEaEsIKRis 6bE= obelisk.nlnetlabs.nl. 10200 IN SSHFP 1 1 0257F12A5FF223048FBE7424227A5F5736F1D556 obelisk.nlnetlabs.nl. 10200 IN SSHFP 2 1 00FA2CC6497D6DDDEDD499437A518393BEBAC127 obelisk.nlnetlabs.nl. 3600 IN NSEC ods.nlnetlabs.nl. A SSHFP RRSIG NSEC ods.nlnetlabs.nl. 10200 IN A 213.154.224.130 ods.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Kkc3QVZov1l+YScH4TbdcB0Y1v3xhO3yR3YmvNnZpGb8iVEtlZ8HpCek J4g4HlPZLinMMS1uw11kFTkgJyNp5+jHyxg8EYAmiFfF5mOCKKfgf/uQ aOmpwUwsg8h3XXd4teGDGmyppiZueYXkbq08e6JLpTBuaJOIvfm42Muj jRA= ods.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HEGgHlgqo/uwmHIZARqsasGpp5f/NLxHQ0SmGGtcBZZkww1+1JSVaxpq kahnJ5eqEdFAuMdwMe+72vlzKgXkanXM6C505IFNPbduJjstiEPwB/mw hF++l5Om6APm9okHuo8hECdfD6AopEEt7MkixIcLFZDFcMTQ7g0TkPq+ Ces= ods.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pQTOlueUEqzMJX2b2Qsj17AYuVZY9OlR5rBXF/sA5+btNqV8hngNVQho hxxdRlJHeXM9qUF2MCJYSdBQdD0ppoumkVWXlYMgiftJFli6KNQr4oBg u37Su5OcRSlZsdHWi6GENX6QnGLGk6TiAwNGG3FIyGUUymsbBBhVdb82 xlk= ods.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. L/wNfAF2NufmUckSFGqSYT/soSI5Pz5KnCut/JyyvmlLa5bfmdAIwJJ/ 1WMvvqd9+CTBSPMlJM3fP4/CfjQZeJFrHnF7c0FJO5pAfKEgK+vDQmkd z6KTf+W92VKAhWcgt5i8DboqHxVjEOsdsMwuD6GIM7y117iszDWRt9oG 3yY= ods.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::130 ods.nlnetlabs.nl. 10200 IN SSHFP 1 1 9C78228717D1AEBDB4E5C6156CE4559E50A562A1 ods.nlnetlabs.nl. 10200 IN SSHFP 2 1 35BB7D1F0250EF1B9177EB36D26FD01EBEB633C4 ods.nlnetlabs.nl. 3600 IN NSEC omval.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC omval.nlnetlabs.nl. 10200 IN CNAME sanne.nlnetlabs.nl. omval.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xxvlJ+XJ4uTiIxNB9hctRhRVEtISgnyR0nkeLR3gbfsbSNVb8yukZkkH L3Z8JK3vkmH9aYsr7lQqYQcth9dSuPq+Am/YxWRI1iQg+aJduCNJV/r3 p6mStNpptnF+hEbIVoB2KAhWAlsWO3ItwyL7RyGgZ3d+tnmIXffV/xbL KIQ= omval.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. O3ab5lNkoebREUXh9ESS10OQhzQSPej7t08QqGQlhDVEI8wjCWcylyyZ ClcQt27PDCPDDBPLIpBIQ0gDPPSmAWZAqof0Xes6G7jRiuCdbwZskoK1 xjD8vHkVSndApG3bwirUkeYVnIOSDcUN3dJa2xot5fdJeNiHpNb3fyVy p+Y= omval.nlnetlabs.nl. 3600 IN NSEC onyx.nlnetlabs.nl. CNAME RRSIG NSEC onyx.nlnetlabs.nl. 10200 IN A 213.154.224.32 onyx.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. nqtQxmyQDHmRNe1Ljao+iX0KocnJIvsZO7IoReIoAEGPu+2MP+cy33W/ tlRUO7OtMoGPFqoWPlb4rNKwEy9Hrgxb9eZAsyTA6oFI1sUvsz9hliWk Vmrz5RFJ0KSjP8vDtVDvxjoL1GAmNW81LnMTVNZqXvxdyCUJiiGAY9a2 EJg= onyx.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yL7usZT31vahrspm//ZYcWcw0uw6vkrMdfDXDPkdKIWPoinC/KQwHtaS YhptXnW8/wdz61PWLeyn+6GnjEDBW7uO9lyY5B291C26lJeBNeTpD8NC crl/+ev0OcDjr5PjzIQeJVg6ShxmlonVHQr8F4BXqMqmNurJGTTWIoVT VQs= onyx.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. WuM8VwMCm9I0KB4Pr/emPtehKjCicvSGNELY9WxAm7I2Lh5IiqEMfC/I qj0vhzeJbeqUZobsmakrh+8muybhVJGFmXBRsuszeYSNz146JxBjkY2+ 3IeI1nc9+74sjEf1gnlAqr/EJH40w1Dp2hCl1Ui/Uz07lVlFTO2946sZ qjk= onyx.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. naYfa4VaKNxbvMPsY5y9CrjDI7UgEZjJmfga1AoGdg5kbIJP+y3VPpLE VfnHSwg5OIL5u1SviOgqetJC2viST6fD9++kQgzhmMyjR9Ka4zWP/ctS u8DCOR5TMh308QOBfNbf0hGVTSYhX2WX8qvKHcnjoV1k4fUGHYbeNc/E X/c= onyx.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:baff:fe05:2d9e onyx.nlnetlabs.nl. 10200 IN SSHFP 1 1 1A752CEF2B1E785A91E27D16CF3E1A3F5F335DDE onyx.nlnetlabs.nl. 10200 IN SSHFP 2 1 784DDE0A38C94250445CABF91342F7230368E2C1 onyx.nlnetlabs.nl. 3600 IN NSEC open.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC open.nlnetlabs.nl. 10200 IN A 213.154.224.1 open.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GzvaI0ZE708suIFGV3nqq3FubpTZp4N8dRbRWNHC0pAGC/s6cfL27w7D KOO9jvobfs74rwOtooLCqmTERFonBbamk3fMPrunhDC5SVwJYovoWpbj Fr8MxFGvyIccaz9E/Lp7YiWNwr3PBHcNCJ1yRKxWFHDUUEQjBcNtelGm Qao= open.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 09M/QEQP0S8m7rv6O7frsbBQiQOaNwAMvxwWmLb1uVQi4FvLmNSyNFhV rWLP7iWkFKPK4Mi+j86DrlKqIpfm+ZLCwKxO9O1D85vE21lKwS1ZzjDt 8Ki26E/WBufq5sABomG//lse6Qd3eWtQ/MQHeAzrS/+wmlma4/7q7Bjw toc= open.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. b2xrDPr4HMl3pBBedK37kjkw9nFbGCnCUsLraB6xgEDfdpmub7fKDtAA iQg5DbeMnlBWkWKb38rTVsD3Qxr7QOUfgltDRBg2w6FNyrqmyvvJ0jpX vcBG8nogDJr6TCBBN2/HMcKn2RVoNvVc5cyrmKLQC/7IaSHTuaz+jPkd Z0A= open.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. XJzH99bT5IDKe5XIzNVG3DWKaAmm+s0YspwJzz+UZKtkPFYGMUltNwQL hHauouX73sXsysUeupVxZLBfbUqnIii/BiJz/wLxjJ7Q0ce69KBeNxPQ 5KvB9DZISQED5gZmFgwx9gUvIgBdzUZcIy7k4jL21jS1ogbtbnPXaS98 DHA= open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. UZgjLcD3FbOCPghUZg4mZ5pzFzvtxi6mFotB0be9LmiCOypEsUr/hMjX MG8f/xTW84JhMB2qukI0oGn0LuQ5GKnk8uNKH1/aQ9mnFEDYQ4Frr77R 5IQ3QKL99IAEPsQSwwZy/pMh4HPNovTfD6aewDbl/wfpCByIHLjQ5qp4 Kzw= open.nlnetlabs.nl. 10200 IN MX 50 open.nlnetlabs.nl. open.nlnetlabs.nl. 10200 IN MX 100 omval.tednet.nl. open.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 open.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::53 open.nlnetlabs.nl. 10200 IN SSHFP 1 1 74CF48095EAF33D2097E750A79715908CB16D7C7 open.nlnetlabs.nl. 10200 IN SSHFP 2 1 CA0D875F829DA13EEAC25C580C495590C12583A2 open.nlnetlabs.nl. 3600 IN NSEC _25._tcp.open.nlnetlabs.nl. A MX AAAA SSHFP RRSIG NSEC _25._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _25._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. HDPoXNe8zXGuS7McrMIn7rZvSlUg8/s0EiMeFOcooS9I0315ueALSOSk aF8kCQH82Rvy/8NL2vIhQCDI4/0mat8isvS0vNZMhdWkJlcYfZQQ+rc2 Wi9zJbRaXH3q5Ud0QrjIutzq5XfCOJm+icyIhx65/I3n43uN42sGuCla V3I= _25._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. zPk51n9I9geIVTaM62BWRVp1xAsfUPue7DQpnmZoqA1LwhqxmxT22WWh uXmyvtd9vI5ajw1kr7QhKA3iSQP6DScEXYtkf2P352mU5ZqAWJ/MLiiF d3ZUVsAaKuocs+UwM3/8+xaDXxsiUJSNTyODtA+9ETbM7DkrTiNmXjK2 z/A= _25._tcp.open.nlnetlabs.nl. 3600 IN NSEC _465._tcp.open.nlnetlabs.nl. CNAME RRSIG NSEC _465._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _465._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sPls7RfgXWf75e6WzIKKLm6cgRYSQYY8jMfEhkYbI4tjiPTWkFl8+bvW 0r4OmHX4VNKvbWNwl9jSTwtCghSCI7MSCIFplXSmq0Y59jn/6Zwax3K7 8FnSSAb52JJgJs1F7y8xJwNv0vF72iSutDB2eauYbH2yDhYIxQb8oDHK Mlo= _465._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. hQnuRFT2XIOdKMneYMwAk5v2immQmXT+8VA6xq3Bo+ZFrjOsew14J5l1 HiQ7fwVE3kuRy1XgfcOjxlmKBLPUugrHJiB9EcC75U+GYDmoCulx2Ajz i3OrjSlLTqPA4DHUHrLw/7vdH0HkFT5uLM+/R5l3p8UgxhgnhFsPuMgb wzg= _465._tcp.open.nlnetlabs.nl. 3600 IN NSEC _587._tcp.open.nlnetlabs.nl. CNAME RRSIG NSEC _587._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _587._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. goQclScpZ7pyVwV/6ba30UzXIYSLCFHYiDZoexujzec5UyyldnSHKPyA 40RO/mBfBsPuFX95kKf9/Q0rEAvbkabFrDALF6q+E+tjm+euShG5ptLl 0LffMAWwAstO7GbWEVyUSeHbUepCriySkX7EOyF/pzogbYJszcPyi0Gx yKY= _587._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Yi48gewLlpJRjqG6fpZWmkv0Kxk7Pg/Qbj2oB5qnhFGfsIwA8D6QsXOP 8MiAk9xpOqde4XClqMBgHHLfhNvV8M+BWYYkL8bogTJ06qy8Zapruovr Lj8b9r+blv10Lq3Tjw7Qds9vEHaj+09Tcj/cw/167b/DbLZS3+za8Iwy SdY= _587._tcp.open.nlnetlabs.nl. 3600 IN NSEC _993._tcp.open.nlnetlabs.nl. CNAME RRSIG NSEC _993._tcp.open.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _993._tcp.open.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. MvccHaWe3+AM6rL4cPL2s99ZDzlDMU0VXlXUpaDCF0IUH2dsf82cGQCJ c/kBUP9UEl56tA2u2vrgLXbh9NT43BhyFX1kCWu99qk2qEnynkHLVUzi 5guEfQPWCCTqeZe8VPUpWJWCde/A7VGgwO5TWLVd20eJhhJTfZamOp7+ 1TM= _993._tcp.open.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ihehMQChNgix5cY/bmRayJfQQR7hnI2hQggMDrBxULz1STnGp0GdG54G /manhHVa4XOZ6i5VM36SG5tH8IVGR4b/Y1tFs8UWUL6MWsK33B1N6pFJ 1wkjQpPy2DY8E86CfPoHk+KbUa7DKeSTWpVfyDYZ9UbZQqCTg0eXzz1w kL4= _993._tcp.open.nlnetlabs.nl. 3600 IN NSEC open-6.nlnetlabs.nl. CNAME RRSIG NSEC open-6.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 open-6.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::53 open-6.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Oyq2exHMspmfO4i41PeNrHKe4ah66TkDYqetQFWrqMs/k59vU5Gf+AU0 sLdb6glLxiK/KvoDtOF7M8ykNbJ5Kct81jggSQ8dxIxu/t0IxUDfv9cI gghaOBVv+jDY1jN4h5NcmBkSCNvK+R+NMcKXjMzapYQ1DfA1Febs0Nal lRQ= open-6.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Am3Y/raCbJqpkK5zmeoMnN1pFY4pY8HTMILzwftn4DVjtwH99yhWMHtn mp+Imy64CzByEtbBrsOplQT3HZ7yV5gq399l28SlZVRPCSokxmhmiuYY S5TjdbLrXN2s880wRDJ6jixFKPc5NshJm7/N3wHDN6zBtLoPuL+WQJQS CIY= open-6.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. KmXVsqN9xXvj+2BC0EjmkIYp7kn/zkn80rHPH3gEL5sICJtjtxURjBPr IDV+t8aJ+GHmNx3lLm/nuOZ7xit1v1hqAw+6n+xJ5YIqI/uk9tk1WId9 WY58/zgXgb9ZpS7cHzHbhsVN6vmwLnSLZMqTF41rL5GM3c4nDoa8lua+ pnc= open-6.nlnetlabs.nl. 10200 IN SSHFP 1 1 74CF48095EAF33D2097E750A79715908CB16D7C7 open-6.nlnetlabs.nl. 10200 IN SSHFP 2 1 CA0D875F829DA13EEAC25C580C495590C12583A2 open-6.nlnetlabs.nl. 3600 IN NSEC overview.nlnetlabs.nl. AAAA SSHFP RRSIG NSEC overview.nlnetlabs.nl. 10200 IN CNAME nagios.nlnetlabs.nl. overview.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. llVmg4S+84ooK7vBJitlPJBnf85dwYSBf+BTuIuaBsOKljIbva3vSz/i XPxeHjrcKZCskyc9FoBVaZ+mErMxEeWVyO0XLzd1clztujp2M/p4OuzV +oEV8MQqzUOIN3YmrB6keSWG1jQdW5C8q0F+XFX9Sz4UfvD3kqwXwofz +Fw= overview.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mQyHHlYkTF5KHfmWMJzRmSQi3BofhZmT/BPNbKTrvJvrFg66uTFc31pO dw6CKLE28O+uSxD9ofBMj7tEPfzk/shRpJM/GNBPW2RlX4dMHpQOhczU 7m8SJUY0KCh+CrubjySCLkuVrGJw5w1VgccLfRLaelyvXcV7kgVP4qiB gtU= overview.nlnetlabs.nl. 3600 IN NSEC pan.nlnetlabs.nl. CNAME RRSIG NSEC pan.nlnetlabs.nl. 10200 IN A 213.154.224.38 pan.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qcO14iakQhiWIU7euttrks9lzl0UXqyDU6nJKZzKJwtC1FPfvgjR+Lvu cEERLj1bIBEHYANQ4gA5c/k5elUA6y7V0L4UItr5WVNrpWYpqSVqHlmg FQCm0M9ZfrmEDNBUxbjgxJI4kn+JB1/Oz27QvRLCjepgpYe6Mv42+afo xHs= pan.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. dt3fEtwZ5BILJYZlCXeLkB2ihYHUSOui0vH7PjEE231XDn7+fXbOPrLm DcHVthO3jKbD8+F78rwSjU2r849c4b2GuQdj9bUsKvH/LnHI00iKqeSL d4AUQv8KhotGmSj6d4dfuoq6cFYxvI/ZiMtiHqO5bUA+UzndzwmJVivs KJo= pan.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. N8xJgXmWq0/VhVwJ7WJR/GmqaWVw2xzGrQakfQqkqEO92w/fhL9zjFI/ Lr27vb+y6Lse9Q+5H5CkNGZCHjzlHek+VPHYW5KyPt0NYF4df6y4vLEQ IKEiN01Wwuu90ymgfN5g5oaBseI9eRwSvminUx5m2bsnOZyUqsL1EWdW LOk= pan.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:21c:c0ff:fe11:b9b8 pan.nlnetlabs.nl. 3600 IN NSEC parrot.nlnetlabs.nl. A AAAA RRSIG NSEC parrot.nlnetlabs.nl. 10200 IN AAAA 2001:67c:14c0:0:213:72ff:fefb:12d1 parrot.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0TdkHgNMIcDA9FDweQ2Te7gMcwXhFhz+fxQoMVeJh0yQU76XDfZZ4xir KUoVAQCDcYxCqZqUUt6vhewhnLuMfodmpzoaiMwjs9Zgtg12N1UZ6ger JidO8y85l7oqyGsBWak8UTnmYw5oFFvmKCN2k+v1m0jmlzkRCjCISZip 0sw= parrot.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. POCqtFA8gUzRqxaXcEOBHZn1yry2mxIpy0om10sMJk3EcdAzvF4Dtf+o HN3So0+ADzR0GQpg05hoVhObDBEfw9REDQcMYepnSOdWwhu5RRaQO+3h fYNxEryu8luvSkLMNZXoOO+/l2nb96NoTvFwXRbIEQLwszchfuC+Xv7r 5Lk= parrot.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. l1oBqeTCopzMHtx9ODkGAEbpAyovWJcLNz9smvQ+fbMi+zmakDQs5xtF i9QOwgM4GHY5Fo94/7QyD+nZwqrORCRdTI+d/VKdRnc68qHZPIhbQTv2 NFpHlwOlXjoDH3kO5ZIoSpdIMgX/Bv6monOog4zf+0J65bnYGiejt7uK zAE= parrot.nlnetlabs.nl. 10200 IN SSHFP 1 1 236402543271F5A0B9812DE20FC4C2C6A67133B8 parrot.nlnetlabs.nl. 10200 IN SSHFP 2 1 C6DC2F86740D2647D38F29C23176A470C5ECC99F parrot.nlnetlabs.nl. 10200 IN SSHFP 3 1 BEB7AEF3528B63AAA7163C07B9ED167C6715C14E parrot.nlnetlabs.nl. 3600 IN NSEC parrot-eth1.nlnetlabs.nl. AAAA SSHFP RRSIG NSEC parrot-eth1.nlnetlabs.nl. 10200 IN AAAA 2001:67c:14c0:0:213:72ff:fefb:12d3 parrot-eth1.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. sfBEjmSCdWdozdVIniFnRSCKTHhEbmBjN8V0n19HhXa6bEbgemeACWb0 vthlt3ZVl7KLXo9XYFXCRZ87UJZDK0u+ID3gMlPnhWeMkKtI92EiBc50 f2IbMsHFOz5/tiXRxeNoypJStgp3QrTajebDOA9LG7bEkZ48QKu5zw3I vY0= parrot-eth1.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0Fd5GLl87/JcvwqvV1BSt/144PuqI56bT6Gnn6JdI59zGRfxyL7GjkPV EOkVLtkVC5w08/vfamPcPJNYvqWemFnhPqfRYm90ODajuBN0XlioMFv3 JvUgW20ZcwU1u194h5gqh+BoIKlUp1BWTCLLOD+giZNLXF6j19ZGlQzJ gW0= parrot-eth1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. NUr+xC4hWfWQhVOPBZK9y5fK9VHJwdo1+JMLsq+RACGsg/jR36fvgo5y 1BeRDxYaANDzsnl0F5g2En4VdspS1ih6biLx+OGoTu/UC/9EXin3aEbH THjpgHlZIG08ccjNIvD/Z23zEjWWlR4w5A87fnSpQkNd6fdJ8VhCIimG IDk= parrot-eth1.nlnetlabs.nl. 10200 IN SSHFP 1 1 236402543271F5A0B9812DE20FC4C2C6A67133B8 parrot-eth1.nlnetlabs.nl. 10200 IN SSHFP 2 1 C6DC2F86740D2647D38F29C23176A470C5ECC99F parrot-eth1.nlnetlabs.nl. 10200 IN SSHFP 3 1 BEB7AEF3528B63AAA7163C07B9ED167C6715C14E parrot-eth1.nlnetlabs.nl. 3600 IN NSEC phobos.nlnetlabs.nl. AAAA SSHFP RRSIG NSEC phobos.nlnetlabs.nl. 10200 IN A 213.154.224.103 phobos.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. LS7vn/C4lWw6mOu4qfiw1a61r8vZA8dK42CKE8h9OF37Yw7cH97tKuWf k3DvQzv88KGYYv6FK6byf6WHVD9e8fMiKrG8uKLjtOP5zICuonn3EstG QPT477LEs7Zuc7QAEoutycyCfuOQXoy0riSejJk9tPcSmHEtivRWC9wc F4Q= phobos.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jvWIJnF2Elk+FIBDyQo7mE4yiFtn0NtxNNlV39hgBISHjw5F6QyaeW9R mgtvYzLXtzjN7fDbQrPhwkqrdQVaKJnmFOGdIOwQwhtKZQ2Fdbupxu4l A7x0abTJHk4H5pXx4AMIfVhOdQhZ49Qk20gq6te54t+/D8BXcjcOng5b hBI= phobos.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. mdbv9U91f8wXQlvdy5yAEgKxBpdlpFSFKLvdKmZ6rOr682YKQk+1YTTu o3Sg70X3dlw6YX4imC/a6SsMSf94RFbWRm58hROyVJ9/rXfq737A8cBE 9BoPGEI+cTFs6mqPp1hMaJ6aZDF16UUuZrSeUdd8eqMYA4OHcHEroNhn pQc= phobos.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. omYI8kzjf3MMy9Mt4Rtti+Tihloq3NnW3iU3ET5SStPytmd6WRcdHtKt dTHNQ4dExbNqo2l7Y9zyyqQRI8bCmjAJUU6YRTIdDMNb6yhJfrta4oCs s5e4I4DT4BFAjAT6HPe/0k01d2g6kRhZ6MWQhrS6ZoMs+/7zUg2TVJel 0rs= phobos.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:20f:1fff:fe68:f6b7 phobos.nlnetlabs.nl. 10200 IN SSHFP 1 1 CF3E74EBEBF9DE88D1A14BCFC387C00607E682ED phobos.nlnetlabs.nl. 10200 IN SSHFP 2 1 241A96919F7837B20DB540C7B1E0A0A7F45C8A07 phobos.nlnetlabs.nl. 3600 IN NSEC pluisje.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC pluisje.nlnetlabs.nl. 10200 IN CNAME fluffy.nlnetlabs.nl. pluisje.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. wvrYn2ddfuuz+F25+djaF4fMqngq7KQEkFc+JvRMxgvBFAzt0ZIhN+C5 6jm/S6g/6JJnGlTpEnV12LC6elFNfwGqosHbtvLtzlQMCSrhN2uL40gw bRqiXZlk/oiPvnKmFcbj5lqsfPodMb2n3wY1TH8LYgyNhTa0r0DfUTi8 PM4= pluisje.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kEQmdT/z5qLTCK/gEraX4rrw2Ej0yeU8Q+rS8DTHiEdgwOPBFB+N56vj ctdaJ0a7noy/BHv7Om3/IDByF2l98a3iyoeE5ajeX48/suEfhmO5UXAJ rTzMnFNAYBwRAslxSzZjyZzQk5Exr/Y7aAJFM6tSzoF+JBGPN64f85p0 v7g= pluisje.nlnetlabs.nl. 3600 IN NSEC r2mine.nlnetlabs.nl. CNAME RRSIG NSEC r2mine.nlnetlabs.nl. 10200 IN CNAME mine.nlnetlabs.nl. r2mine.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kBw5IuIr5ttC4RhFKGLEOR0SSfhIdX3j7Z+kg7ggCow9yExYbwkuz/Y1 tnggNZ4AvKLOUZ5UQS0V/xH88EU/wCx0BTpJlr71spWCQBdxMDhrkpUX ePu+scyidecO7AXXSWvDx15vDOf0S5BeA8EHs127LInqzoSGg7J7R8+9 dA0= r2mine.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. FpvUXQc9IneKRoNkCurtZxWanQWYBqaTg/czpoRz3sQlWXzoHaT1UF7Y FG9OKPpdwIJYE+nV8PyA3Wd7xPX1MDwt+8U8iPUNiEINxO5qpkTGpahn 5R2UknhNklFJGdiQlTRA7Qzsur5vb+t3ICf3jrWItgb4xjeSIi6+q8Nx urE= r2mine.nlnetlabs.nl. 3600 IN NSEC radius.nlnetlabs.nl. CNAME RRSIG NSEC radius.nlnetlabs.nl. 10200 IN A 213.154.224.147 radius.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fJBTy4JsvhdLo1qHE1hp4WaATNb0djQA6CfAheURONSXXSevffm8YSQR OnAvLpnV6A6NyYBg016PntBlwVcX9cs64toruC8RjC2wlFezwNOu38o5 GHlmNBDw4npXxnfut2U0T0YpizAng3CWhBbPuxSAyoPNEV6kGkGBbHG7 m40= radius.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. 0hdwIH2wWkuAJ5Hd+2MjtpuNLNRWOYxgVcBiGdQk5erqew/IHOHBgwc1 SC8nX7kQDxXiv/+IN41kMyBfYkfV731jl3YmMFitUvqeJlcHv4NzansP lffhH7hP88ncnGohMOVQHBNHxyPk3GOqmncDlHBmHqEGMrf1GQUzVXtA Hm0= radius.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GvwldMcwKdCNY+qaCE3BrhG92MyiVvmhGDMeFf3PDtl1Qz9655QU3c+G 3XmBXRg9PvAjujQgKKK5y0rvuaTwWm1P4ROHzKuvJXRn/FVSGZGkSL8+ Q2RnpQJ2HrLk5wB62MxUVFthGyvlLU9L0Er9w3PYpl0e1riY3IK4f8Io 7dw= radius.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Hl21MfrpPL38hrJAL4rh1MbjPEaIMQ/CZ8mfo5OUQdu+ob5/xHLVwnQI WhokTJxUE2DMb4FaTMKfZwHKpSB2bd8+URfbzmCq3pKkEO41vHb7/aL5 o2qLl7tptX0Bq/8aSvURorHp+UB5NRMusB6934ZtgEOBr02cWB64807u fNY= radius.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:29:: radius.nlnetlabs.nl. 10200 IN SSHFP 1 1 5E43419E9239E5FA11E9FD62E43D7D2DD68B8E8D radius.nlnetlabs.nl. 10200 IN SSHFP 2 1 7204FD27ED4E7C8606AF3BF29EB4932BEDDBD3C1 radius.nlnetlabs.nl. 10200 IN SSHFP 3 1 2AAA7EEBA4B08802488E1AF6551C091025C7536A radius.nlnetlabs.nl. 3600 IN NSEC redmine.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC redmine.nlnetlabs.nl. 10200 IN CNAME bela.nlnetlabs.nl. redmine.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. t7CJUbPwpB/azKMmWXH3V3GG65MN7OotXeMEPUruzODk6GEIXqjeN5qP GVYWjeKvMT1YUJo5pXO7Vi8iFpIIGFSH+qNkdubLJTRv2HdVPosLeoaM NLxn6TxHNzGiGZZXfkCnp9HWlV3cjriQUhSTIlJyTtCD35iMxUP2j2FB e/A= redmine.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Kx8YirhrH9dA6Q2hPs19DXAGhSd5nkku7jM9RF1UkaEJCvHabz0uMhQm SLvPoDNrd+//NIUMxt8feQAlazcCpH7AqYbPZLJaEgvxrH/IqvVulvCG 8d1ATMPWt73X1Viri6iRZ19YvYZmDSznSPi/Prr20h1FqSBtdcF5pjkl +l0= redmine.nlnetlabs.nl. 3600 IN NSEC bind.resolver.nlnetlabs.nl. CNAME RRSIG NSEC bind.resolver.nlnetlabs.nl. 10200 IN A 213.154.224.24 bind.resolver.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yG5Ntd/LzsxGgAYQwdn6ou50nLynsluEGdX5E46nTUWnWlqbgRlTplGp INfIvHf3+lw/8h+5rrbMTrjlFxM9d5vndtHQopu/+8X5tDQ4r+MvYDnt tc7VeaVF+pVMHCQqREglPNgQqj+FI1syT4jrn0WoHXqnSqeVrCAuM4WA uCY= bind.resolver.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZtKBU2Qm45WOuyS129N4jD5T7FFOVLnycFh8Gh30y0VvfsegUB/r7CB/ WYQbneAZybpQHKVxCD1eeb1Ph8DL6NZPOE8RovJKgZyu+kr6WOgC8XJI tWh3eHyTrYr1X9gZrb652541ru6p+xD0RNCCscWGjh0tCjpDnzyMvBI4 CL0= bind.resolver.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. L1lECC1PpQAjr9URo9tkKk5wn9OtDTgGKw9pOQDRhaYDONz2SF4IKDvS mZ/0TtvnJN0hDkAE527sQnUmT8YSLJQ47rGM4THuQ+2oYGSsg+6jN36d P5Y/T92/xDHmTm8HXUYgp8cqj3JxeotVh6IGxOvYOeDY4e6h160v5REh IUk= bind.resolver.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::24 bind.resolver.nlnetlabs.nl. 3600 IN NSEC unbound.resolver.nlnetlabs.nl. A AAAA RRSIG NSEC unbound.resolver.nlnetlabs.nl. 10200 IN A 213.154.224.23 unbound.resolver.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RrMF+z/2cgJWIoYquPGunx7ZZGuNuQ6iVAOlv7kROIO6KEi4ODdX4w7K o1Z07Fj+MjHZoiC06gvKw0KeYBEBKolQVfSIYQKuLF79CragWo6kM7jp gdeuO3NO8/vyDL1VNVQMu3nG3WkNMzDVcgdqnF7ik17cKvKEonT+tjS0 7EY= unbound.resolver.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jAwyJKZ/3mRdr4ow4uLpGogNQCgyfW6m1vdn4+GRBiA66obnURbvU1X4 M0XXahIxiUyDg4ADnPCcojTDL5gy0NCFA+90traVmrTjrUapNI1FGtTr BFIReMDsWIQFoBHEn3VASmPKSwkKJF99fX/3OA35YP5c3dC7hho5IUVA Yns= unbound.resolver.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. eTCj4a3CoycO0sZgtdar2x+kNG2Myiqz2z/F9zssqzvSQgO4IagGBdiL QHPG7c3J5HhrmaBYLSRwVhcwuZuXJP808NcTIS2HIBInWPXwvXpzxcwZ 6/Y+jfklUkF5O6sylq70PAAoxlLuhNbvo8rb9yCoeUduLjAZF9Rxu3SJ a/s= unbound.resolver.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::23 unbound.resolver.nlnetlabs.nl. 3600 IN NSEC ripe67.nlnetlabs.nl. A AAAA RRSIG NSEC ripe67.nlnetlabs.nl. 10200 IN NS ns.ripe67.nlnetlabs.nl. ripe67.nlnetlabs.nl. 3600 IN NSEC roto.nlnetlabs.nl. NS RRSIG NSEC ripe67.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kbD8LJqwGS4qPnHCb2N6FdmLzwWAOnFNkIoUx5jOBkW+BTUhAgp8gQ+Y cX8xyfg4woDstGvUjOWEGVkdS8MhadJrl2ucQzL0kb1jNiiafafcD57V N0CsvzVC3ruxxh/A8eccGkv0yEbKxFQRb45nsvSRGJRcS4tMPhblFQGt I3c= ns.ripe67.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:40:1:d0e1::2 roto.nlnetlabs.nl. 10200 IN A 213.154.224.153 roto.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. y1kiF83qjlxd1oljrYYOQrc7jJMI0ZZ0rN6/fWSd21KuO8/T+ooSru8K VBMxpNJKl73QTok2jA50ltDmDMKfnRheJkPmKZvRt+vLLDonydaICZoh lY8uvom9ltzVMjrYP3iXGWU1XOWXr7JLLoQ9mZMvJWVGXWjp5iXSOGWX NYo= roto.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. dzQrenpuaTpKlTQmSd15Dff2cda0iYdPD6KpqgFF8GeGuemDoEwoXz9B VRLDrgJ+ZWYLmz8W91/YEYT4VP9RO3Yi1BzxgYU7EGFEWPMR6Vzf7rEk 7hzrWecNeqaL4oFvI/wilLk62i8QD8bKcxCt0rPaGfJxoDPfY05qPdMO m1Q= roto.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. CdL8BtJW9Wqe029pY+TltXiUQ4d8uqTWS3CoNY4zydtgVCFEtp44AxHd RS54SL02KQycdl3gKjKPIieamHlZLhbp/McPNbo7tY+IztrtaC4SsnPu JNbrBZIfD0XQI7rD3offcXP+ohGA9TFFgShLU+Qm/bq38dc/PWV7mLsg 9qs= roto.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::153 roto.nlnetlabs.nl. 3600 IN NSEC rpki.nlnetlabs.nl. A AAAA RRSIG NSEC rpki.nlnetlabs.nl. 10200 IN A 213.154.224.9 rpki.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GRIyLlIuavadjmxNRkBG4ppYlTQd+RQIdzy3PQsaJWJVYv0z5OFMhrRH mpX8jBw9RJgtjlG+J6xt8JW7ntEDkrdtBz7h6DaBak/1pjHcu8M0hlQk T7A6wCAHLZcX2aEDfAjlnNO78t//q/CEFbPBJZK9KapHXHI0pE0Nw7OX HHE= rpki.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. uJGHGPjxkX4b+cMYcqM8Fez1MagGI5w+OIJMZZC3U7l8idvDY044K/TY I24aKFzpwVm2YVblSc1aVQE8cH/bS+wsAPnEXLDhIDb8bk2Sc3xj1yWY 0e1EXcsmIZ07c0mQ3QooSINAMovOxPZKYw3MFHfDCDFUMpq/ckmjMGKK 17c= rpki.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IUJjV6hFMOBLVIe/+GbCMryMe8nt+8JB+zm73uSxuejOc1rXfHv8a2UX 2V2/ryIGRFy4wtY4RD8FMrDbbjGHA0Ko7A3g2LfQoOLTIy+K6OQXpucy QjtPny4XLxabnFE2E6ENJlLM4y0O7e7+SQ41ChwGKDwXt7b6oSQ+7BN2 nLk= rpki.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. m1DNlx8bpTFC8oSif19erJCdXn/SXJGIITcn4e8z5NSWF+/9rX/kfL75 naESKWI0fe0vcSXSoDYpsYfVeXagrvzRF64jD+UPRDn7hYQFZNPbEDTQ q0ziUoqmwsMLQ0RFJeOcHn3xc7d+x80hKIH1X2sNox9QhUklsdCrPjUM r2o= rpki.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:bac:3:: rpki.nlnetlabs.nl. 10200 IN SSHFP 1 1 B4A8A3D4666C1D78F12E7EC01A8CDA045D263B74 rpki.nlnetlabs.nl. 10200 IN SSHFP 2 1 0C494EEF742E482001BD6FFCC8AEC370D1A8FE3B rpki.nlnetlabs.nl. 3600 IN NSEC rt.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC rt.nlnetlabs.nl. 10200 IN A 213.154.224.1 rt.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yxJ0Ay+cLPvOE5GDCHDjnfnBCFt1qVey+UPxnT/E7uCvRI4utYw6RSNc khZuw1LTW/xD9DICk0ZbHKKGCAkvek9PZ45hsK44htY3JIhGCltkYCdb Ka/mMn6k9bXeXv57GTRssxZTDwT/bKgTjiy1zoPafZOtzH6EoT9mBLrO fGM= rt.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kbUHtoR8Z1G3WvKZp4xFIVJaBohRW+TwTu7ZfbOWBRpKeNqXDgQj6cXr keBZffvDMIwA4mnWGdQs4StVL41MWVbaUWBTJJ04V4SzUYQ5A+SkTCDF J73KYxI700qkrdinE14MVruIhVeJ2UKKCUPJnwz5qPy5OTMDA1NYwnV5 xq4= rt.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. T8AW563ChcUQ1mfcupyLYlBHuPG3cB8rsbFDVtgx+W+1hmje8VpsZ86+ l8UEwn4RV8cFNP6guysaILhbkmD7FE3ddHYB5HvJ+HOlcOggw4qUxg5m 93zaPHs+RH6ZUNODlX4F0R0df3iRIF1NtqIqAQPeY64RzJ5arT97Lo+D KYE= rt.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 rt.nlnetlabs.nl. 3600 IN NSEC salt.nlnetlabs.nl. A AAAA RRSIG NSEC salt.nlnetlabs.nl. 10200 IN A 213.154.224.145 salt.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. f9TXqGtRacLqlbsraYaGGVwlQn2ROfJVlFBxKHy2NheytNBSkyZkDk2j WpHd+r3LqXLgmXvaJqsaNJSFQy+gLk+UsstxO6+hKPLjWUzHw1DfNrV4 Yxj3yEV962TpymutVrriFJ9mOCXs6axeZu5yKfFNgExLYlFb9EKVrE9j qAE= salt.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jpIAMdn+yE5u+DrGPgLjjRRAsDMj7g5WW+dxPHrwhftRAHzSbDcK04EX xXCe0FEGB0+adaUe7EJWXNn6y9ynU/leoaJh3pyQRYhGuh4dTP3Ukiz6 1+6zgwjmcHylZQ+AWkgmThvcIQNESWKHffLwhpzBmAKssSa+sq+Sz2c0 X2c= salt.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ltSpG8ueYMcCSOqbikFyvtAvocp+vhIzw8ZfgX7cu/e/lQqa5qgrg+RH RpKwmGsAQIhcXO/Zb/WW0Rt92M/ESCFugF5tgKpDZaJSsuaa9dNpO19L q1G6hEaYyDCrHtf9ZBdimSnynUCsU1+qnjlxwMxJ/3NEatutfW4KG+Bt x2s= salt.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:27:: salt.nlnetlabs.nl. 3600 IN NSEC sane.nlnetlabs.nl. A AAAA RRSIG NSEC sane.nlnetlabs.nl. 10200 IN A 213.154.224.6 sane.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. O7ig1OuI9UYW/DjmVh2/pSqVHQwt9ohL1yxzrPWAlbxmALTGcNHUXdG5 kkvRw/6HeA83QdLa2D10k6EsTruTokBWE8vYQniGzDjQLmKBCYJg1OlP kyJLdu3jfGI1ia7nwvi8xuB3X+ZMskKohJiNOBy9WXhxnSzh8I07o/pl Kfo= sane.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. UBHGS9aDr3+y6bBpm4B4Kc2ab+MNk48THfkDnDtXovlaoGF4oRryffBk bv8Ajcm7qCDfGck9kxMU4UqCQFE1GlQofXjrpFEt8oipSXy8K3UqSE2u RcrnuQ7fhWs0bFC6OzMrRsIBXIXimWdxvyHWDkoSG/wQgG9haUcrtoSC nd4= sane.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. C3SE5g8NfjlWNWpVqQIfb3i0MuhSJYpDB6jlgjcaq0UNHKeSFeZkYj/C 8bBfaDxkglgzuGth05WX+T60Hi5mJ6JlfxOWONvhcoaumifM30KDTs9Y yWO0HLseMjsQ4sN37y07ETfw32W/wMvMhps4CEOoryKlbxCDmCub9+1r vtE= sane.nlnetlabs.nl. 10200 IN SSHFP 1 1 F899FD53D7C64116C900636BA15638CCD243AC64 sane.nlnetlabs.nl. 10200 IN SSHFP 2 1 49B299B7BE787B5D789D2AC9A9532A02224CC59E sane.nlnetlabs.nl. 3600 IN NSEC sanne.nlnetlabs.nl. A SSHFP RRSIG NSEC sanne.nlnetlabs.nl. 10200 IN A 213.154.224.39 sanne.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. fadzGqTonVd4jPT7LZvPIKDCxgwWV4Vg6gOHBUuQkDNZEvvnuKylu4Gp 9TIbuU6EVey3HgDNk/7EWdNOALYkphedqtpld+tXMNogMGw1UM9fRNTX CdlSAHEAgUxYIzHV1yKtc6msLuTfMoovARyiBkAasROtuYrXqsqJkugr Vyg= sanne.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. meDGeRhWyWkTRdFmEqO0C9BNXGqWBrCWQdiV2o5pz+jSB/4mCNP1p3Kf mWYjXE5LwHw53IOX+1XDt2lDYcI8mL8Mt8C/J741AOYiqSMbDEeCtVGH 3S+akKpASjNRx+d4j2t5Q+XUUAq+n2vxkkF6n3/+fvP3B7mjOthquQK1 qCw= sanne.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. NjmbH/jAxQnhDBTAIxrQalH1Lns7IDq2MbdvQS4WPgcle9E0MHc+QsKF k7NwPCjRG+LeRK0k3BtlLZ7V3+i/vBLZfrTRY6oDCJG4bDx5tI7FEGlH tksHxqwl1+/M6Uuq5RmySgI3IYudkZx71o++sptVk9P51xwqQ2K573ya M1k= sanne.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. suJIyytubaP9S9EFEw2APJbrdQe6Qmjm2nBNz+/mikPGOhr4DMS6pavq KT+0LmW/OIXwZAC11CtpmR/XTicPvS28knY0lg97pLbKctfpzfHfx412 QVvbUpECFZis24bFLTPa3miJQ9MxSL8r+4eVI4iVwIMb3ok7oHOkHdEP 3gU= sanne.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. pAGaxpjCR2F5GoM2+QdSzdh1nxVC1RZuXdKcfTDfPERpvFnuxsK+djAf OqeagKG+VieR8DM6TJGiLkgNyX0OcsBM+QaVdK1YiNZdoFQGyYLgVnNF LZO265ASuZ6czkUCBo9EV7N1B2ICpC4x9gi4ATXTezXDwuR/RyCDsJlQ QsU= sanne.nlnetlabs.nl. 10200 IN MX 50 sanne.nlnetlabs.nl. sanne.nlnetlabs.nl. 10200 IN MX 75 open.nlnetlabs.nl. sanne.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::17 sanne.nlnetlabs.nl. 10200 IN SSHFP 1 1 F66C63214C667F9C6E7FE0CD3279E5AD373A5F08 sanne.nlnetlabs.nl. 10200 IN SSHFP 2 1 3BD2D7189B791521CC000AD9A35AE3CE98926C93 sanne.nlnetlabs.nl. 10200 IN SSHFP 3 1 692BDF4A4777F7FB0E4673F832D552A56FD3C532 sanne.nlnetlabs.nl. 3600 IN NSEC se-dns-probe.nlnetlabs.nl. A MX AAAA SSHFP RRSIG NSEC se-dns-probe.nlnetlabs.nl. 10200 IN A 213.154.224.5 se-dns-probe.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. hGmQp8vgHhNGswmM+XczXL77WmzXFeCmIJkpkXvAFH/70/M+HzhGBzL9 2Rq66eFAbLh3QU8pm8tGO1vIXslBfsWhODAT+b9GG51BJd5OIEmAwdfh iaS/isugBpKWP2bXieVIoBOY02cxFcxykP03hLJttC673MVnBxvmBXKD fs0= se-dns-probe.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ABNzrucGQneFir+fsfLHkbLK3APBPb6C35Ra96Z9zRD8YCuFplpDugd6 n9eGuKx3RA5EHLU0NGptsbHY7cw/kg1KI0nid0irYx3hTUgFwuVYIgR+ EbPQS2CmCtYLjG243vi6r3YT3ZYJELyboZq06TYJOOOGKWjjPmfNmCUn I0o= se-dns-probe.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. mSc9rnSbd4W3bFxECQXHS6oMuX1xSjsBPFVOoDF4mMAJAKyXRQqJH6qG GWCcLnj0FhKL6uI/bDeEI8Frbl9OsPYDpdIpfuekhX18OYYj/4u8PxVX B6ff1nYMOMkHeV6ETk3EpPlHGDUuwbQnFNrftgfaMG3wO6Zof1Imxpkl sw8= se-dns-probe.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::5 se-dns-probe.nlnetlabs.nl. 3600 IN NSEC sidnlabs.nlnetlabs.nl. A AAAA RRSIG NSEC sidnlabs.nlnetlabs.nl. 10200 IN A 213.154.224.142 sidnlabs.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. aBg4AmnxgMXCrPNkujYPmPja06WS1YKkyUcl/laFxSMvsOAkhOVYieBM I4dx3pVVZL2Mer/1bsHzY4O4blsYP251eM6tOnsBk/J6qEM82vpFvTzo hXcGyyo/a9GqI4uLdyfZrqcWsCk0wtsrkorFdvJNkOo2pmVC1dP4/5DV gRk= sidnlabs.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Fw4HbF1K21v4HpUwDrqXRd4DANDJdmVAgo9B/F9njZeJmwoIwI9vBcMy yZyMDJDJrew8B+wrb9NWcjA7OxwknoFT4Q46t5/iDf18TWMvWksULzl4 WmH9YAJClB1erTL2J/wF+UwgXe/3eWK7s5X82m6oD1rBfTyTuDTfBb5u 5Fc= sidnlabs.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. PWWgbRhFOd6saSKSIUSAPHBo0+ELGeDZFOVGL0scgQ+AzFSjp5foCHh6 SbDPnJwtID9puRpzz4awce8o7SBsBLXR6nTMBPCoit+ss4PW06FLgGRN +wP9X/amEa35K4HTsjg2Ei/UOBDHlPYlZ/lZjVzpXszSxvZV/wxPP0IM zxE= sidnlabs.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ymhmp3h4uNxMcxoedoaw+DjJV0Q6dSCuaHt60QrH+VDMxlJrGblEaZI7 HqKMN7qbHcAliK2jHpLVByXUoqACQ7Z9DhfHpWA6ZONu3BxHlWGEUyAi Hx9kkft2enz5kZk3ar7UUm0lhLmyOSkdTH4rkLl2/qlZodG4OcA9wQs3 xfI= sidnlabs.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:24:: sidnlabs.nlnetlabs.nl. 10200 IN SSHFP 1 1 2E0AFA0551B9C86CD1D885F459E189A8EF93701B sidnlabs.nlnetlabs.nl. 10200 IN SSHFP 2 1 C1301EF4F4820AD7723DD382A0B04AE3F03AD13F sidnlabs.nlnetlabs.nl. 10200 IN SSHFP 3 1 5811302F8A3EF03BC32BB1ABE3C747DD7D9ABB8B sidnlabs.nlnetlabs.nl. 3600 IN NSEC sip.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC sip.nlnetlabs.nl. 10 IN CNAME obelisk.nlnetlabs.nl. sip.nlnetlabs.nl. 10 IN RRSIG CNAME 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. k+E7pjjYulbrzA3VmWHtOBNkR3aZX7FO1DL+/MkkxVSIfxFlvOLIUw0B IZH7EE3K1tUks37g56YNKP1MWlKNX9b3pK0aPWdoBCYEPwYjmXjZvEzQ cQ7G4A5C1VTnzoE5KCspWgNKN6rZs2PaGCyhTmrqzTBy95ehshT/JIjT mAw= sip.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. ujMthN324h55Zv1MigdBXV1S97zKNoudfu8AjpKU7kemksM6nVqM8NPY jFWctpHHNkqeKiQrlv+Ve+0z/WVy/PV2hrpEkDYJcEuORGDs3ke6wqmZ BYJauSyKJzlFTKXcVp4cS15sitz7uL/cc3psCfezhq2L4F+0ncVte9ke pUg= sip.nlnetlabs.nl. 3600 IN NSEC sixgate.nlnetlabs.nl. CNAME RRSIG NSEC sixgate.nlnetlabs.nl. 10200 IN A 213.154.224.41 sixgate.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ob0TinB+qsbzvQi1kk8EmldSN1kY4g8PdEEK4+3aNnZwylUr1xZDHVIP n7vm5ugV2PdkaLkjt9l7dEyEcq8r1TeB9316XDHRfv4ZAF4BZal0OUSF WoR4Q0rGH17BJLXHIRKfcI73gux4YJjBIr5BNHh0gKkK5k9Bvt8zsENZ 8+0= sixgate.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. pXy6I4FoUVw3xGIUkpz5zhLsRRrJ85HqMMn92Row/euQRYEG7K0T3gqn CyjS8JoR6xO4NSI4WVYS2vis6w6rc+UJ+TBLOcaWTm1+v1z6CUoNHXhc jR0PJT0Ax+PW7cMlcBq1BjjYzWzvGWOpZRgeeJYAKykBTOXcXFqDvEIb kSU= sixgate.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. K1y9fQ+W5hRkdu1ISPpV20vBhTzIbJsHEmSJB9+Di8vsUBDXxmvpEXw2 IhoVuz7CLg2O2pWsDUHq2X/UYJ4fHIrWe6yY7BPXxLxPGi7XTaZ5la9+ YBxT/nUM8//XATDV0xKOAjO9ycAYvXl1cfXP7ykg/dFeCVOszt61mGzS /CY= sixgate.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. zfXBSa1wNC+Cot0/oWacZzRjZdyJ8/N4UpahcQUaLJ1HVPZge2R+a81B EUGelJItHrwPM/kQdWSGE++V8PbZqLXf4Dsvq0ExLHQz7T2A8B1gOHyx Hoz6RCjBKVe8obA2RoxU0H09TL4o6uuhVbCx/iLr3CuJuqfv1k1g/EF/ 9d8= sixgate.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:250:bfff:fe5e:33e0 sixgate.nlnetlabs.nl. 10200 IN SSHFP 1 1 7EE7E899A067F1CBFF755FE212B4EFAD9797CDAE sixgate.nlnetlabs.nl. 10200 IN SSHFP 2 1 03A80B4632B239DE059B86975D660768786066ED sixgate.nlnetlabs.nl. 10200 IN SSHFP 3 1 96AC54D0FB9C42878DC1DD0AE0EE1FFA51936AE3 sixgate.nlnetlabs.nl. 3600 IN NSEC smtp.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC smtp.nlnetlabs.nl. 10200 IN CNAME open.nlnetlabs.nl. smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rRHrvP9bGHfAX0CvHiCsjcXWJpPPwgjrXNSWXBuVgSqrLHdGNfW6+wqg 8qrDSEWhJ/wTnxksy/DYfn0DhPNqQXtnQPNfeYaR/K7CWs3AAlrNWwcb /Ety1yXLXjpWLLe6oSL0OAIqFumEJz08lfJ+YDuw1WQWpl7RgQ7ww3rm 4vU= smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. glhAN45idGsA5QH2rQ7u3MwZmL0+7vALqsiWMIqldxImOoM8CbP3OIIP 46ciKnHQpLfo1sb4gBrIIBiY7eLHSBUzgZ7vi5sJiJmQhXKnECEYBhkZ InTv6upbTyd2W83NIYWCXy5QsW87DK6rC6/SfboAhkm39Cqk9U+sKYGA 15M= smtp.nlnetlabs.nl. 3600 IN NSEC _25._tcp.smtp.nlnetlabs.nl. CNAME RRSIG NSEC _25._tcp.smtp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _25._tcp.smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. EuIqHOQq9OrA2ukygnNfxK7MEm1fXZR4B0KYOSN9f5hk1U869G37ZGJa YN+ouXF0FKWH/1JX1KCNeOUhd2JRFOzfxBs+fwU2NyOlxWyB0q05PT7W sXKLdqdCo5aAtHBtk0tkW70qp+oWohYV8NnCbkTDonmo4ZFwxT3+kUkN QMg= _25._tcp.smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. iEPj3e2nL3oLn+uWREdiO9ClqDqEDNPLAJd7sf3+eNeS/HtmlZURwSI0 KFCSUk8F66vwKzlhWCGuIj0Xzz5wWH1lfwnMgz8cyq9QwfF6P2kOU912 OOcvDbQr8Cxwk0svSkFuwI88VrqNIVBeyt1kvrczuPZZaumjCwNw5m4Z YeE= _25._tcp.smtp.nlnetlabs.nl. 3600 IN NSEC _465._tcp.smtp.nlnetlabs.nl. CNAME RRSIG NSEC _465._tcp.smtp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _465._tcp.smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ZY6vE0++SHJ1xTJ67qCzp3UiydoTroTFcFBv1zkDJ99PrNBGBJQ5CaqB o45d5c24m5leMT8wpqDBLKQxfOb3C4c98NrgNWxg07a/+KwCmqpq5Osh TfdVURlUFLmFAyQteUGS+XB80rNZoO/teyFSP95WZuSb2JxT6ZQuJJD0 DK4= _465._tcp.smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. V9WkAYvW0Yp4cyXCsfRYqH49L3ZjAIfqH1eTjiacdQb+QiDUnXisVHwb NKfuxycdN34Hbhs+KJM5z9PGI0O6BjOXDazDf9xviEHiWJIMCtqE86h3 IHHbA/MyGiZORI4mHBSslAk1CBzm4Hc+ApBtVGQjdJAMlhG13slxBs+s Dcw= _465._tcp.smtp.nlnetlabs.nl. 3600 IN NSEC _587._tcp.smtp.nlnetlabs.nl. CNAME RRSIG NSEC _587._tcp.smtp.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _587._tcp.smtp.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. ucD67wjRuXWz3b3W/8upEplI4jgEsHYZSjk3ssE2KPRPpx68PvK0Wa89 NSLfLd6KdAfo2h+3dbYcKq3IvkNj3geBBCYl5Z8BSc4Iw8h/441wAh/d F6uLeNEQGbo/3jlgdfHJN2Nm4927mgKjcc3iRL7V2dff+Z1815MgOwvM 5co= _587._tcp.smtp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. nnyxVRm35FWQgHUHmAlmSkLVF+Kb7HOR6yKJArW9gEuGeDfn0lFkvxah rldxR5q/BLQJe29UaHG/ySYk7qe/DneYtEkkbgvSRf0m5U6KcjyEbZRX PS+WNpy3/c+zE46N5ki2I7M2F2bU/sA/luIuOUaUuycRdBVYLdQcpQ2b fuA= _587._tcp.smtp.nlnetlabs.nl. 3600 IN NSEC snom0.nlnetlabs.nl. CNAME RRSIG NSEC snom0.nlnetlabs.nl. 10200 IN A 213.154.224.200 snom0.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. p6tnvXWmJIFvKJvlqqZmg7QuY4L2SlJ5y+9tN4LPrrMsVoe16QCOOVEV Wnk3Mee5KnoldkDsuXd2AVFWguEAd3O7r7EJM514Q6q2SO4HcZCFyuCH OGBLyf3hrfsMJMrPU+AGL4o05Jc/831lR2542AdiuPFcIlyWy5VqQpeO nFo= snom0.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. g4g+BnxoTyGBghnjvjkLazQiGOpYrrJoeo5AABOPzWLxzt4jZ7VsE2Ys pCxno3BocOlaroErahJo/B5m4YvoyscxFJdCny1pjpRxqEvP8hd/9ECv yGVjrIm/G9E5DtkAgGHoyMMrJP1aS7KpjQMfaGzNEMuhleTmI1BEh68I /QE= snom0.nlnetlabs.nl. 3600 IN NSEC snom1.nlnetlabs.nl. A RRSIG NSEC snom1.nlnetlabs.nl. 10200 IN A 213.154.224.201 snom1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Qs72TTR3lszgtCc4LG+ImuiJhPABShucGlAUzkKknDsTbKEz0iZUJkSI 57vzdlfxf9vEv+FU5pwyj3j9C/JRHLz/0Az0QY/xcpmg9It2JXgeVcU1 KubZVbuEdUhexCpfLpwq9xVN4FcWb1/U/Lv/6fWpNegoILM+EobwF4CO FnM= snom1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. BrPy0ASUe0a3zz7eXCXB24dz6EPdomlObBIr7H6eTqhAdCArP7C4SMqG Au7lUgGz9FUaUR0SBhts0UZgGUUz3d6oYPzeRhPf2y1dMHE0+0X8v3Vs GCaxaFKtaRqeWMCWTNcQuwNKjq3nts3Ft5atX1R6nJEmISTvu828r2Uf 9Tg= snom1.nlnetlabs.nl. 3600 IN NSEC snom2.nlnetlabs.nl. A RRSIG NSEC snom2.nlnetlabs.nl. 10200 IN A 213.154.224.202 snom2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. xEJyHu2bLfF+opztY1JSHjkh8eU1Ui3ukVfR2WNaZvDJx5cz37XDH+AE nT1/8f88N2xFN7SPH0wtbrknOHFFHt40BGTp6rO+5oM1smTXR7HxV6QO Oh3ocwm61M7vVac58bEV3pGaVLC9fqEqLabVJgfG1QE5UzI3PJc05Q7e 06w= snom2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. GQfH5liaXmwNfE6O1CwicoNvSQ1SDAoZt1iw11E3cb8336klUnC/mMsa OwRCuKnXavB+hUQRk/Y+D8bWQ5SXVekhMP+4waEwZre7Z7hdYdAFYX2R tPikAfGrJNnVi8PNbEnKFQAIC+OTaEfz3oBorWaN29B1fgYi6rP6Ai23 6oI= snom2.nlnetlabs.nl. 3600 IN NSEC snom3.nlnetlabs.nl. A RRSIG NSEC snom3.nlnetlabs.nl. 10200 IN A 213.154.224.203 snom3.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jdM0Lbikaa2FjDMX+APHMpE08S1D6CLnydAl+wyODMXM3cGwwWWZpSjr pEAakZCmCjaAkkXUAezZejDaTQBc9gm814KbMHHANsVQtrFoRBDN4R/B PZ5RGHDThrg9LZlDW/benRZg8XrAY8hZNtbU5WKM1KpOODGpNSCE2vcc 42s= snom3.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. xuAUXy5dX0Ny9Rg3l7DzOXdQSWMFT97gwzCYI+CXBsqfGt7glxg1tM7I qn4qvhwOFbZ+8DV6fmVYIr7i0/cNOOYDE1jHMotfRdsCgHoddhWXYuI7 q9LURbNUwOOGogcbfIeeldUbCxjfV2JSJMqJRwx0D0IgG49X7j9whZQs cRI= snom3.nlnetlabs.nl. 3600 IN NSEC something.nlnetlabs.nl. A RRSIG NSEC something.nlnetlabs.nl. 10 IN TXT "nothing" something.nlnetlabs.nl. 10 IN RRSIG TXT 8 3 10 20140224111605 20140127111605 42393 nlnetlabs.nl. LPUaKKder0WwDyjdwWv0ani+R8Pha3PLiDnTVbY2y4CYcwWYJqi6ewv0 7lFe9EMcl3dxAuAC2yV5jXL7LSkE0j2ERFYKeSioI/LkdjWo5Um08Kje 5ImYO8pmM9K3A6u+uKsf3+eFj2GiMXWnWKk0hnja7fteVLah/7ZFso66 c6k= something.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. v3eQ4Nb8Pw0z1nuewImqsef84MCo8vdgRP9RVFof8mU6Nm2Qa0uHGxxi ieqg5OW2ZhNFwialsyJHmuy3t4Yt1nN5NabVimS6/pDf9VL981o8TxlB jqPrq+wLmWERVxjqyeR62ZT+jZFh4iiW8NJvX6IIjNW1Aue33qBX9wC5 cNw= something.nlnetlabs.nl. 3600 IN NSEC sparc5.nlnetlabs.nl. TXT RRSIG NSEC sparc5.nlnetlabs.nl. 10200 IN A 213.154.224.47 sparc5.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. eVlNWwz3r9+ySqO3Oc+k6jQeA89i/Afm0h7JmWy4H6JJY2X70oa7pWur rPpl3a1PKPEU7klxD7JQV1ehG5z2qwZe+jZsv912pu4bDyqYu6mmICyO rjh6Wdi8JXmqdIlZEN1lNHqNLndSBzdOP0Tmn+zjGpw4G4OLA8iMaIs+ whM= sparc5.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Si11EpZcH0w2GUjcnU63FNATndEjWVWEzpaZ57S5IMAW93u6ioCCzCeU Y4KyqclQ84f9lBnZipXboelRkdoXn8OXUHgN+nnByvZ+Rl70VBMo5clu 9u+z2l5DF9vnJWn3WefaZXkRodFr1DKZUYF91gp550gY446b2ynu7xCs QsE= sparc5.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SBkYB/Yx2Yy/1vz0ZXye14uy2/nALMg1EH1m5CfDS/ozCdXlH0H1fFZ9 SrTTxhELDvoUP/c+WY6jJ192GyVjpO1H6F/Md7cq0PE7vV/N7TuMwqlX D7WyE73Dvmf2eCU/Udkl0DeisdkY0N/dPmAJ5IaYVLeKsMOCTZzXBoHC 72A= sparc5.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:a00:20ff:fea7:8f78 sparc5.nlnetlabs.nl. 3600 IN NSEC spider.nlnetlabs.nl. A AAAA RRSIG NSEC spider.nlnetlabs.nl. 10200 IN A 213.154.224.125 spider.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. RXpyOMwRZhApiRQ+0ctSd5+RKA2PSuFWilreZkf53GVl54LwP/0Vwj1a 0lETzp3j7+HTA6Ubev08WxuO8I3my1hSM9z4Sylg+xofuNPQmSLvjZTP d4eytatK/f07Rcofv0ED9l8Z4BOjleyPlkA9gljFyxwzqQNJNruNe9N5 yK0= spider.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Hv5jnhbf0+2k+oq178J4nIzPBNTMxQWRXzOkXRsud40H7CpHbC3XYSKJ XV2EkEaTky2A71v63aWk+VoGEYIgZ7LprQHQEe4BuEpc0IXgfDjgKPUn kYhW9r4DwPoBhUhmdipJGIel6tmSUX0t5xO2LgxAbOJedT2R1wEj9Q05 vOM= spider.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. MSu1nNUfVe42zNpIbgvvD/iFwTRgOCUEaQhS2R1xTFIRvSD75HyaSA+U Xl2ZsjJshIAEdh0hOQimYeFa5hB8Xz+ZPj3wz8FWQ83NBYbi87yjCRux FZKEbTqkAygcOb4fY9268/Ov07VwqZO4eYfCxC+0TyfNFwtdx0pdMnd8 YsY= spider.nlnetlabs.nl. 10200 IN SSHFP 1 1 63B9074714CC78736BAFFA1E6776975C2EB082F3 spider.nlnetlabs.nl. 10200 IN SSHFP 2 1 E7A277786CFCF0CB1A4167A680DDAE27A59407D5 spider.nlnetlabs.nl. 3600 IN NSEC ster.nlnetlabs.nl. A SSHFP RRSIG NSEC ster.nlnetlabs.nl. 10200 IN A 213.154.224.1 ster.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yNhuJpbql/LWyHr3IW5muEM00Z2BaoqxQlfAf++3bsex9FsSJVTyWvY/ KYq3HILyL3N97BZO21+x9Rq+eq5SsBDmPJ53061ybaQuq/5Gw7yFxxSo Q1Rkore0/DF8EeMoWPNjJayWYSPqbbVngJ3zMr954a8lNS+v88PDBEKx mTQ= ster.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. mFnpxvq/pYpDHJljsmYJR9IC6kGnVFpQiRUzOHAIQszuJK9S0xTV5BBo PnrPV/AtdBjVus0p67qRpq2m2SEOnRh07ilT2kS/UkFMWxWcHVBW75BV E8/ofZvI/eMBZbza0apbm11Z/MTHvbMII3t5nAtl45Jxx845Qwm8L48H EM8= ster.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. jGt4xszEWt+A+gcA0TDg7qlp94dLxlgUuOE8rvhgL6GPWK+O65mVq6V3 CW7lRORXgNqa0+Z2ECq7rUt0rn7BN+oBh0qASTNxvGkQPS8zj5Lpcvgr 4oA7hxXvXxPz2uRTQp2vrCh6wvg+wG/g5gRLAgcj5qv40A389mNQe6Lk /BI= ster.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 ster.nlnetlabs.nl. 3600 IN NSEC stun1.nlnetlabs.nl. A AAAA RRSIG NSEC stun1.nlnetlabs.nl. 10200 IN A 213.154.224.46 stun1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Nn2ue6PRSCb0c+ZsTm8vYFd1JeiYFf6aiXI2LMYvCqsd2GTiVYZlTVH3 crzoe2O0irpY23+B7cX6cuAIHBeZfr+xqOzZr9bdJcBJ7qmC9hdZyACG 2gd49WmMp8xwfhg5iogaU9bNoqp4VZ/8o7wZzxwwBoxaQYHUKwFAkIXh cDg= stun1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. UzLNxhakjp0Z6veEB4R344snmqfkRRHtL4gbsifmdE4H0cG/3pn5iop8 AqNcMdLwIxXA2/L0mhB3ekDNHnC3c9FpI+EqJJDLQkNFQQVwHJ497MpH UjVX7Bi01Sn5ym8/Xol3ryVFUcH+DzStFOgPoJWVa+N+Pg5z9qzEhFeH IoQ= stun1.nlnetlabs.nl. 3600 IN NSEC stun2.nlnetlabs.nl. A RRSIG NSEC stun2.nlnetlabs.nl. 10200 IN A 213.154.224.48 stun2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. GLCCaQsbL0ziW1H1eF15oDxQqjVAaBafW+xzdV4j8+B6GAOrqcVctnyI KfV0SIojOrxeew32TXb/RyA9sbRMFcg7iJ/r0gqaPCmchAjG0bVh/UaL VhJmdCIKQoAjcGx5zITNnjJ5+anmFCA/dQ4zmuhWlB4rBCgp3UOqnUlX ImM= stun2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. SzytbVsrHX4Tr58nwINQ1INkKAhHXtjhb0SBwTXMXSCRQ8uzYPgw1Oaa kLv/oOg9rrP9zkrnhe6iR9Yn8AVus/Y0z4s6Dl5zOVx+rt+OA7dZ4JYl NuH3A3B+RHq6XiBgyCLnm9z5XozCLuDNCvffeuImAp3kEAWw01/fk5AR eVA= stun2.nlnetlabs.nl. 3600 IN NSEC switch1.nlnetlabs.nl. A RRSIG NSEC switch1.nlnetlabs.nl. 10200 IN A 213.154.224.111 switch1.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. N0oPPgtwCtlbCkTRSLcjUHDfJ85Sek7wRxaJRDuLew6JfBNsVS/ofJj8 4pTbtOOcZ1EgIWkArir5JqaIdRFYs+csh34uVcdaOJvwftyRKk0ItJss 57f37Brecp0CNiFu7wXv3BINI7Zn5vrZVZS9zxljBGYHRyUYhiRLjlHQ G8I= switch1.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. lo5rrdUegUBJZ7QZ0zJ5zeAMxRg8P+D/MNTLkHX/cDnD5GuX77MOYbm3 eRF3rBXlmYlzbF0gtCP4ccM6L1niR39Z3BudwHYQc92gv/gH6x2gl0Uh m9EaWRWL6DuPnfvti8AWTi+Nt9IQis5uB7nacuZZX9KrVLlXFaR2Lnyv XIU= switch1.nlnetlabs.nl. 3600 IN NSEC switch2.nlnetlabs.nl. A RRSIG NSEC switch2.nlnetlabs.nl. 10200 IN A 213.154.224.112 switch2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QkjyHR8ekBxetrgRTSdjEoMwovo0Cb79MlzRdqf9RrRscd+Ph5sIP1Vl /cLQRwyyocgeJ1vLUrRBlxGnmFXFX71vUzOmUnaWeQS34fNqlJ/26TYg 49ruQ1wvNZxKffYhuQ/sjrFI/uiG9wDUYwNCkYu6jpu1wNFdZZFYFqvL gfo= switch2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. F4CQ1WRmw0N58gYpf8x2cp6ZVTGpGQMYY8A3dPcxIMkIX0UL7X/QaHKt ll+DK8TYkxYu1klkYUNs9G3yq9R+UKu5uzDgu4m1orPd6ytX/8lILhru r6MFTFfPTgoH9o5Q1uotJ5ZlNWxkM/RX8Irq2HzXXZbt71DTxLoC+CUJ cRM= switch2.nlnetlabs.nl. 3600 IN NSEC switch3.nlnetlabs.nl. A RRSIG NSEC switch3.nlnetlabs.nl. 10200 IN A 213.154.224.113 switch3.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. qcmDGHF/KNC4XNnGW1CkcGgEuVEgfDIkms/qsZUuse2kB0gJ84o44f2G oFTgSuUHqrE3Uhrup1uM7pMk9vEVQQ8rAIJq/EbROS8MQjoUQuqu1g71 XfAUDQMltKw+GrWu4HxtlepfoxWfwMSR9gZDop9TE4zK2bbzmFJniu9P XPs= switch3.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. Ld9ogqO2PHcP2XHQEfTYjqHJJBqdfSPq5yeg0pfq4/Ue84AenpN4Zg36 0hSme693wvfSXLU+f0ewL4+MdFhDDfheq1c7x5Z+1Md7/BWxQzuQAguw PhRMn2TSt7dTLuR9tD5hn8VtfnRXLOQEjiqnYXATyvORYbD0DgjoB+1A Fgs= switch3.nlnetlabs.nl. 3600 IN NSEC switch4.nlnetlabs.nl. A RRSIG NSEC switch4.nlnetlabs.nl. 10200 IN A 213.154.224.114 switch4.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. KpXz1qOM7cjy+ri77MtmFoPiFauZNWyNKxUULkiMkdZLpPa3bu2KJH5N s3m9EmsuRtp4Y9S300fTqm3j1QtVmtN4uAbb3Oa31EF6NMZig1Y0d0F/ LMKHvd2dsltrJNZXAckAZOoVVIO7CTz9SMgcFKGcHaLHUy7AkhPV4D1v yug= switch4.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. WlpWdH/oVVwSFL/5k9a4JQBRbe33EKJ8En2gbjVU7pp3MiIAvSpLTF9D 6yjyjfiRZuujL8FzmcJa6oloW/XxwW+MMfibkDGLHJUo0pd0RNedwhGQ YIdrOtZobyLnR2+PURIWYxmLQCsFkkRbJs8WyTUvvDP3350sZDrp0c02 sFY= switch4.nlnetlabs.nl. 3600 IN NSEC switch5.nlnetlabs.nl. A RRSIG NSEC switch5.nlnetlabs.nl. 10200 IN A 213.154.224.115 switch5.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. F3PaeVx42gnH3MwuOgjnM5flPL9eWw14pDkMFZJ+P2AkGrwsNH1zCaig ujk/O4tyqSqPOtqP6uzHiGXdI6GbKB3IdLkfTl38S+kSkyeBrg/fNy02 pJ40QTevdUpuThwx/wDVF8MTFZwOux+u4z21oDhcOxDGg1c1QoAiYAZb 7Ek= switch5.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. WmzKyp2bTCjwYq0Sn1uAANHFw/CxA2QO+EIX9k3p9rzmUm21IDcS/0h3 E2JE7XYJiCK2S7MyHixDDsoi4bxDKHpAd9K5MZ7EtWUXH82lvd+ey2AV +Kx17OWYWHG1EuI9m04QGQD5d0NnsrIj/cbpSK+CUE3rR/VyjVjB9gFl zvo= switch5.nlnetlabs.nl. 3600 IN NSEC switch6.nlnetlabs.nl. A RRSIG NSEC switch6.nlnetlabs.nl. 10200 IN A 213.154.224.116 switch6.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. jaV/NYRghPjPEBApQxEJBEXnzUAP3TYofcsmZQ1Jl05olY02uNsOkCm8 bhgQJVjAJ9w1YzhuKw0MIIcHaxyZJNzV3yx04/TNIocmc7x5cfZE09jY odO3D2xfYXMuhadtZuhRM4CFv2A9V5dQ1VoXsUWE13EmE57mdH6fLxWD kZk= switch6.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. BtqQL6SQWSLuAmwznmClSvQZUxr//x/C/GVnq2gR9LuRlf0aFjVNQkAr LoE2dHZGgGUgYMa5vAzkyS+kWPzGpPh37FXtJpir8KNEHznunPKydiuy jgNH1TSyhV3yXgoq1eV6D0TytkjiWOSLXZ+ryZG3r2EX2Wi0HNsHTHaY NG0= switch6.nlnetlabs.nl. 3600 IN NSEC switch7.nlnetlabs.nl. A RRSIG NSEC switch7.nlnetlabs.nl. 10200 IN A 213.154.224.117 switch7.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. JkvhyIXgWrhsRbfHztqnq0Sek00/2hYnk3gMki4ayA/mgpJfm5DDHMW3 LhDjVgIkHXDjZbjirp1xjrN1wssG3RhJpFB+BzFMh8jbgvbf5JSIlv7L xJe2cgTdqtbw8OvGwN2049G6q+lJyOSAFnAeJhEUFHKUxg4l7y7xrGL6 7To= switch7.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. d8Gsvftb6pI2O520nhKH5ki+BXqG0vw58MH23DEF9rsIz1eJmLv44j5d 4tUJqlXw/zNj161f2KT4uykHMATJPNEak1mTJy7IRRfzPVprYKwKyjOB TrqolRaUYoa2G98ks9ayg/uBk/ypVtD4Kbqcck7/AeH2gdtLWlAz2tzY Kx4= switch7.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. cdO72AbyDBRI+shQrsjYw/7ed1sIMphZJ/6Qg5S1z3d1KsiSEbX06fZt KynrLO+zl5gXXj77BbCzoUDqHIZgqxB+TSOpdgUk2eZKPGiraBRYuNxS a4Dsun9/2ltdSY1lZCl5kifFpQE7IZbSiTSISmA11YNUp9si6ufw/H3o YJ4= switch7.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:212:f2ff:feec:d040 switch7.nlnetlabs.nl. 3600 IN NSEC switch8.nlnetlabs.nl. A AAAA RRSIG NSEC switch8.nlnetlabs.nl. 10200 IN A 213.154.224.118 switch8.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. rMqTm6XnspU4KF1B7q8hjz0QIwfta8+r5m+Lo1L193TW3eV8qe0rD0VC PCrKpAtocc0jUG484b//dg5SB/1zTs/BWJGGwMGjLc3ERJO5eTCb8dhJ 5b7SfqXNU3uIO9VL6S4cE7u4TOJDewRyX4zoijwIVnkhngfkOTM0IVTt vFc= switch8.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. c3yY/dBpZCYAtzg/XobVHhwAdQQx68zGJR5v1qeyA5PoBchIYNTMVYyZ GuoWybZnpdVTXZEeDyJ2+RE7SVvC5iA+Obp+cFOr/yPt34d9QjwBhC2S dRghhC52EdeaFJld7oux0aS0XJ1u2wJNllYv7qujTAwmIyMb95O0Vk+w nq0= switch8.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. HlG7+76k7oB38GGbKWB4zETReznO2MgTVHHQ8BVUXN6I7djoSlmjUM/v f1tq1aDpo3f9oim1d46FuF3wIoZLVsF+1Y8LlPAptAByvNJ+jj2RkhRL vFW9W6o8EplN0EpDMwuWuyBqNnZFQn7gn5Nyr9p5Jw47xrv9xEIN2Mj9 5vw= switch8.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:212:f2ff:feee:6380 switch8.nlnetlabs.nl. 3600 IN NSEC test-www.nlnetlabs.nl. A AAAA RRSIG NSEC test-www.nlnetlabs.nl. 10200 IN A 213.154.224.1 test-www.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. E2QhVhUUfphUYzppDkr249o/o5cqtu5KLsN5JSTTYQrktynis8xXuSK3 sau7dzSOr+3igodvpW0nprUmyAY/kd8pU3Vn2T+z96CY58pOO4Yoo5hL rfCvkgU4dzfPeSTkw1w0GgR5z9iZQ/GlvVbEqid60mekwSar6N4unlPx EFc= test-www.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. Ynb6Lyq2e6tugvYMgXsD1kIBy61noEM+lfLDrBXlLh6ECcoqaJ/8fk9p w9NJZ2lwQpk4fyjxP80dTp01Kzb5CdKTPIdEZLezA6A78RYVRYINMI27 FFDAJR/VhdOJP06oicya/tc9Sh6DUtfmPlDGfJ/F1lGf/lHLEY08KXnf cPU= test-www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. fXwJqqXm2LQErC/Q0vBGN+AXEZ0Sm1Cu0Cv1WDMa640KDDxLeovM83N1 8zZWO97R4+639eTBmY4LVrzehydUOBWoo1YMoqyvJ5EyXAy7tu42THjU aqpJpZzL9A+tNXWg6IaxiMqWWr1MRPiIvGc+X7JYgUj/pbUQw3Dj3XUa SJY= test-www.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 test-www.nlnetlabs.nl. 3600 IN NSEC umbra.nlnetlabs.nl. A AAAA RRSIG NSEC umbra.nlnetlabs.nl. 10200 IN A 213.154.224.37 umbra.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. XbSCHE9g7JQmVYk9JXF/WZdqj1tkS/MJ3XnkdTB+h6uQ9hivlGS30mbQ 4lo8OZXg2EvAd7wsfYty4ObDgtVckH2K9YmlJPtWN4Jv4UIDVNWtQtBV sqOF1eK8jDI8YtYBNU+YdwFTd5s4dSfREroEl7AfeDbEYLj1l202Y57P 2kc= umbra.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. IfUS7VWZ5BCQfyHmpAD36mvjntxlN6g+JbESxdIwGXaZ2tEXUjT3aaKO oWHFrOcgrytSGOTx5FyQrjJnfrAMFjQgh2Q1mpaTvgbgrcjb3mNVvaca XoOWi4g5Yoxc7BjxDsDqkk380G5z6E0874rHjsAHpEbQ5xlvqcPyYxnZ H5A= umbra.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FP8oNmVUkicuQZq+sede5dBflrvmBONAyaWzPyTjCCJtUO5AL93byCYp tQDqgmI1UJLul/etaScI5S8jVICicpntH7nPD4DTpVEp6DK7dz+LS4HY ZxhRObOFoQc3LbM2hhcBYLVu2v/j0UR4S8VdCUNM7jWLyJwkVT2fjoQu 8Ww= umbra.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. aX92eFBNJ2+Mvn889/2cTL+60o0kyTuNr5+dsdIfvgBm7XQyao11xfl+ KCgxKYPyhEbQusMDXarJnzqvPS1I4XJVyhxQnEmQoDrrncs8VejlTpQ3 CwohfHZbW1GrVlE8BFqTpgQivhaAZd3WOifOgdxMyQGwLZYPwYCxHhUg vAM= umbra.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:baff:fe06:2060 umbra.nlnetlabs.nl. 10200 IN SSHFP 1 1 E898476127D38FC18600E77421A7E44F1CB3B266 umbra.nlnetlabs.nl. 10200 IN SSHFP 2 1 164C09BCEAE3466B3F2AEE99C0AEDD91E106F7CA umbra.nlnetlabs.nl. 3600 IN NSEC unbound.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC unbound.nlnetlabs.nl. 10200 IN A 213.154.224.1 unbound.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. QSZ3PTyAGlZpEoK/mKN/sY5QR1ym74FQRq4lU+YsoH2HKwuxukF49L7v dq+3cKA95Hy5iQNYWLTNt88s0vmPHwtwD0mpbtEyfn4sJoVS7lHQLr8N 0HzGcVMyD1edSyCxrcB4B930hgDIfEfLM7AvqQJcGfUYcGltNi1/M/C2 Lcs= unbound.nlnetlabs.nl. 10200 IN RRSIG MX 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. INtEjQXKFxgb7ODo7VWHiux4UUYkvg2e2KdjaZZtvmq1/uPzNBl8moSB PmJseNCOMqIUv3lEs/06n4kbBC9k2n2LyjMsknFNRbWKte0HQPaFsl63 R6mP+2dHlQpNxGoZLHTy9r2VlzUNhelJhonx7rn+bKA6/rZzJ2LXuL7h FeE= unbound.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. yoTIa+IITRhVXZvqhPxZ/D4OinWy6RCOyqobH72OzWWE/Pkg85BzjCya jEWJ0kFqNdak/oc3ON93xrpL01wpTlayHuvDNiW1QgmCB/Qhg3T2n4fh KI9MVsHMcvTvhcfy7ndZTgH+nwtlqO5qFjpBlmimfNYXK+x1WEqqGB/b uKM= unbound.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. kG43QD3KHjcuxHH70giPGezIhcg+yFl6I4JSZcZa4L+u+2nZ/S2Y4lkl iSwVJCJx7lkd6J23ze94n/DtNYiav3fDV30UDWPfN9TeEdKw1vWmjlVH hgfXgKGY1PR/bE/32zc0ssGYzD6ypj+aoq7wjZnpqWE8LIeR+wBnEwbr 7U8= unbound.nlnetlabs.nl. 10200 IN MX 10 open.nlnetlabs.nl. unbound.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 unbound.nlnetlabs.nl. 3600 IN NSEC uren.nlnetlabs.nl. A MX AAAA RRSIG NSEC uren.nlnetlabs.nl. 10200 IN CNAME willemtoorop.friends.nlnetlabs.nl. uren.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. eXqvy/T2HBTjT4FWj3NSNY9CivUcGDv1Xklxrcj4RrIrE2veXBN/4OnQ 7sOlBKE0DiWdBO3TW4raO/aFpFuBjFQV+nv4Y2NDJYIfgGfv6Mad1tzc iPgig5TgbGaRiFE4iVfppIs0b1vIfDDGeBgO8SXo4tt80q2QV09Pv9Z+ zUc= uren.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. cr9BJcZk2T/kUgqpCf/Ih/ippQ8A0Cyt0L5q4JkXfZ2joNIvfRQTFRzd R43MrcCWXQ9HdImV7VV1/+/3KgoFKVjlaY+uLBVvq9NpZq/Y5QrtriYA x60g1DU7F/rzxKF4XgOdnkMNMz7g2xOcbpiNdem82jXq4CXMA+rj6mOE vz0= uren.nlnetlabs.nl. 3600 IN NSEC viertje.nlnetlabs.nl. CNAME RRSIG NSEC viertje.nlnetlabs.nl. 10200 IN A 213.154.224.62 viertje.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. TUkoNpmR0j0zyTjNjjx+o1xVZ+LOHcfz2UegdZMMnAB48NgvXWoPC7jE CxIMTG5LQkIFZwrdXli/9rb4pj3hk7kKJ9oF5XLhMjU1XDILhU4p+n0i uT+2PY46njekCbhujJZjIot4aNMrS69maAm1UrJVbMoWXc1FWBSlDaIE lvg= viertje.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. FTCpa9ueWJmfUErf/g2uBKIyMo/GmqzUU/8A/HFsScO2GiG6zBP3HBQh lug1cP1eh5AIi+Fa/Y2a6EeGalGlOc7HOU5b4E35bQeWmUD6r3Q+tr6q NK/NJSMdy7FBXkNYAHPE1xRE8dm1lv4HJnea5RJF6U15FXoMuE+KwHrV Qz8= viertje.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111605 20140127111605 42393 nlnetlabs.nl. wtMuZwjTXmU0q7rG4r8l6M2sKZw8p6sPMSj38Z89NZcy+UPEjIaBt9zn ae6u3Y7fIVNBkYhkUaG769s8H14usY681bzczo/05JdLeEPnT6zXmyb5 Bqc6vEJGMwRnIsaPjh+5QoVD7xvpff+2/Lip3muT1wmxZJD3quQge8m6 BZ4= viertje.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:203:93ff:feea:3086 viertje.nlnetlabs.nl. 3600 IN NSEC vijfje.nlnetlabs.nl. A AAAA RRSIG NSEC vijfje.nlnetlabs.nl. 10200 IN A 213.154.224.14 vijfje.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111605 20140127111605 42393 nlnetlabs.nl. kjPG3kJKmAgL8XW9HFDR+XVGH5WTRgxsmPkOpFzshzkRB/HVDNrUSmu2 chNepMRPy0U6n2ipjkZDqrfma5pMCz3b/uvb35XtXcoG426Q61j2TmuI fivbezjsPAHTGsjBgvCJ603KNOMhN8/F+Rv56C6CMLL8xmbj+6QM5KCY tC4= vijfje.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. FpTKOEqqjGdKOsMufZK9fl7vt7vqn2J8s2BZiSpHRyXCkUHtgPtGxIt5 BFkiZ/vnTab8JQa0n4Duwm7RDZzdnedFVZ/jwusQJUPLZjCbLm9+pizW /MPTN1ljTLXOFNTql0PQuhLfvW0TQ5/qxjQUZQa1F8esz7q2hhofM2Jx Sqk= vijfje.nlnetlabs.nl. 3600 IN NSEC vijfje-cable.nlnetlabs.nl. A RRSIG NSEC vijfje-cable.nlnetlabs.nl. 10200 IN A 213.154.224.15 vijfje-cable.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. XvaUqVxQtIlCQakPTr10reF3I8U5QG/P5h0OGFb9JnYPoC8/bClHRz9d pb6/jDl8fdkLyUgVSLO+qyVTNovOaAqJKZd2ai3Qs9IcYIDNBRBE5Hxh 7E+BjnoD6xgMT+AkBOQKQxGcW22rUDcHB44nSVRqZMAzknvAR8MIEn1g YcM= vijfje-cable.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. WzfbQo6Z2hUAad6jI2Irwzn61rr8rgZuORTYyEX0ckxo+HvVdy0KnFkO a4lnQSkiYvu/zor/4ge5O2KbatgXdegx2ODNtCVmYYxK7ppSLzxFGYRM 2s9EVcm/EewNRYMww4r10kLEn34wO+CyT0pdwppm0/VHnlq02RQNVdtk imc= vijfje-cable.nlnetlabs.nl. 3600 IN NSEC vpn-179.nlnetlabs.nl. A RRSIG NSEC vpn-179.nlnetlabs.nl. 10200 IN A 213.154.224.179 vpn-179.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. szm0gV60ZC89477SDuTJ/27QTVzPK22Ey51Gq0THaBj247DnLe/G8hto fmncjxUZ24cvpj+ZqghAbpCj3lSmHFVonq0hkuYRqJupZsDVA8pOM9Ps 1tApDlaoJdlIMAV324z4XlDukQtLwkG+ZQ0tYB/WIqRtnZW0L5hNQzFf H78= vpn-179.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. iViowlAyQQRNApxVf+3ctvT+x554pAg5f8kLypKC9cgU2jxvn3u+GdyA VOb8Dcebyn1BTs8tAEtGBEu/umOQKr5XEr3rAYvCJbAnft5QJ6EC2C9F 9N7XSl9R7zmNCeaE7h6E55WeesPqn4seyUuFGwRaJBgdkWavkuobTVUN Z98= vpn-179.nlnetlabs.nl. 3600 IN NSEC vpn-180.nlnetlabs.nl. A RRSIG NSEC vpn-180.nlnetlabs.nl. 10200 IN A 213.154.224.180 vpn-180.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. oApBOEV3T3fWWe31OREDwDBANnhLYubk2x425KzBHqUfeBqjatyyvgEe +ce/NdNK2TnoU38Og1JsDjF/iaVbJfGOGipQCtOVOCfL5EhgyqgAEsjf Z3iUFqCMndD+J0+3f65w+wH82jqnkg4Uly0egGj1ZaTviFx0U4CXLq0G gbg= vpn-180.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. CpB19uWGY1V1u20N+dC2h/lJA3NtqzGolAd1o8KiJvVh4IhlLD9Nc8iI 4ycc4+bit9xY9ubLxRuFIkL8XJ7508d7R4s3xZpIBDuSJ5Z+OOLDsCXO sVT1BZd4zIQSK9JuFyhnsbNHDMaG+2NOYqi0HK8Rk/ClTh6++xsAc7Rc AeQ= vpn-180.nlnetlabs.nl. 3600 IN NSEC vpn-181.nlnetlabs.nl. A RRSIG NSEC vpn-181.nlnetlabs.nl. 10200 IN A 213.154.224.181 vpn-181.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. h7xAYfPEcsF5Gg2Q3xam23WBpinnEIgvgPExy5w5gqodBvZQGOMyIwGT zWh3kwxUFtCpS04QT6z1BukqabFRVSj6PSd87vRwnuIXeN3S7QQdlIMx lOGgFexeiWx9b9UV5XIlOna0OnevuUln6Hqy8+lWVcCKvLGZPKYWF4+O m1M= vpn-181.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. 0c+pwkNQc0g1tD76GBujwxDtzOs7aMnSFtNWXW5Yp/RNTRgV5FXOLEu1 UWftXpgGCaxXZ/tKfAObAsxDt57Bz188FZsp+Xb4PirqxByZXIemDykI /ZATVmv+wWsBEcwUJ3NX9D6voa7jsL1n6BCuYZMrjvqS2YvgRqXKO8N/ Aog= vpn-181.nlnetlabs.nl. 3600 IN NSEC vpn-182.nlnetlabs.nl. A RRSIG NSEC vpn-182.nlnetlabs.nl. 10200 IN A 213.154.224.182 vpn-182.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. NfG/vMrKKuGNO3PmeiaX5kfOtkYxLr6Cc+HnfCgGHt2QLrMWOIRQakuF fsxCZJPJzi3iSOg0efrNY72JaPnVqCIKLDRRmOdmV7kf/JCMyXRn0Ux7 emsxAHAST2eiJhh/XMP+4jCC4UqyhpY5ZEWuqksj7eDC1/Lnp5ALbtGK D5g= vpn-182.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. t3lk5lineyl5HMrjB6PSMxWEraefYXLuZtJ2M3R1U0p9zyeP8jvmDaT2 fSD0zANXei9gORehvN42I+h8WiHrYMxIfMV+TvkvluKSAuSWMg/9II7z dP8EUf+Y0YzeJnB3WkYDPoedO8MoPc+3L+9aslSJvhteTuhAIt8hCvlR bY0= vpn-182.nlnetlabs.nl. 3600 IN NSEC vpn-jaap.nlnetlabs.nl. A RRSIG NSEC vpn-jaap.nlnetlabs.nl. 10200 IN A 213.154.224.178 vpn-jaap.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. ZIJsBBz2x/b//a7mTUOtQ+5hsWn/jMZXwU+HkXAxdeozWtHMz4H4FpwF 1qhY01WNKoY3zpHkp0BfsI/trgsNyczw5itR+1IYTnx9T6SQGbXZp+4U U6yuyXIcqdSw9EKgadBFhI7WehiDyb70GbwuHotmTUBxqSWkmD8lWdxo R/c= vpn-jaap.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. fWqHl0Lwn4PV1YpEZhFIi5ygTLLkFJUQZ5fPh/mRAVuX3+8vYDx/V3Gt xrzYUjT/c7UNlQzMGk8zrjg9WgAsp0a7tktWSQrhwXO+cJ3XwrQN5ijb C4mBd0kzjv7th51wvksyN7lkn69sRHwhXfTwkrjzNM2fBQsRq026t4ld lIg= vpn-jaap.nlnetlabs.nl. 3600 IN NSEC vpn-olaf.nlnetlabs.nl. A RRSIG NSEC vpn-olaf.nlnetlabs.nl. 10200 IN A 213.154.224.176 vpn-olaf.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. ckedKKiFyYdJ6IVzdonipa+lWmgmKeOX47g6TUYvYi86YW79BknVcHsi 5i+7dD6MGaH03ygTr5+WMQBsLDD6ohQiV5ACrhu98ilnINGg5dLPODw5 PgapAAyc9oguiuY+ZKQqv/L/wwSixU+89ogFQNxERQcO0EmYLdMyfVxO wtE= vpn-olaf.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. tpqpU9Abk4u7WuLtZ5NZy+Mx185X4gNrx2p2OzWAKwHa/d5HqCm83/UL 1Ss81DECnO1odnqn0lsxTy7uNtkD4STYhcH2eUrXtXPrp4zpGmQLUjhn wQ3WegTGES2t+dzymDRdFwfVDnd+9M0yMxlXkwxjGbKeBJt9BaEj30Jt nGA= vpn-olaf.nlnetlabs.nl. 3600 IN NSEC vpn-olaf2.nlnetlabs.nl. A RRSIG NSEC vpn-olaf2.nlnetlabs.nl. 10200 IN A 213.154.224.177 vpn-olaf2.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. TmLw392p7riLHdtlG3wCT/uDd0zJwo120NlxlCFeIlgBRCPmCypeX56O XjjO1IAIo2BsadwJF9hH8CZtukM00ONkugtfasd6DK2OapDvyhsWoAGp ovIS2vrX+7U9mdtM23dDpOrraIUwOZ0B1OAICityeuxZR0eExkLZwYL9 6dY= vpn-olaf2.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. xtHl+flSlgcok/G5uc+cTTTlHbeybArUoEcj9i4waHnKqVn+KMoMr+NP H71tJExGCaCqrvk75G5KPIwkfcQRRwLUNj+ZYF4QAgw9APyGK+u+jZbJ 9SpZb/9CkrZbzZuLnQzEX/3P/QtcPTdv2X4rKOCKxlPfmbyP6AbhbwfY Yzg= vpn-olaf2.nlnetlabs.nl. 3600 IN NSEC www.nlnetlabs.nl. A RRSIG NSEC www.nlnetlabs.nl. 10200 IN A 213.154.224.1 www.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. Owb00zLVFYCLv5w5kUwq3GarEf4xsos0I+ci996zdgy+W0Mxo02F3JCm VZ7dug0HrVuz/ydd6j6e/qbCkYhN8jbbOVouf/EQ1pnhpHNr7uhZjR1c GIiX+mQfw8sUf6WAsV8BPoBv5hh2nO3sra4br9FsZatb0IauQ48nkczB v2s= www.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. r+VN19mgim1AKdG4onzcNfGwfpbkWVjh7RP+WAA7ku9w3XK2jdHiF3b1 QE49oiAbss43UrQlp+08m/6ZtxGNksCxQA1QAj4D9yQqapRfCbJ2iMbr yY1aCpT4i9CAF3oONw6xrJZF/fxVPvy9JruqKfsZDl2ZHoXCtA/eeCK1 hhE= www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. Mn9tqdCH8prMYU4W90/hpNDQNNSuIQ1jn+m9ocnCFWKM8jXGuGnmhjZt tPSw/sh6A8Va59bSuRgSyIg2ugxD1FQoF9sb77OAkyq0fxgSeDOx6abd 4SeLWNbvqTM8EpeXSabzB8Ez4y+cCfVIOtg18QcU8LZHYhcaoNQKqlq6 +pw= www.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 www.nlnetlabs.nl. 3600 IN NSEC _443._tcp.www.nlnetlabs.nl. A AAAA RRSIG NSEC _443._tcp.www.nlnetlabs.nl. 10200 IN CNAME 3.1.1._dane.nlnetlabs.nl. _443._tcp.www.nlnetlabs.nl. 10200 IN RRSIG CNAME 8 5 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. qrfY6HcYTFFP3OkvVzJwkmJWLTTbq06jwpfbnUXbnISU92uXAQuPuyOz xyf0OQwy6Q8pQlIwjqbmcDUkWIfBBhvxP6FHWm0XrI6HKOoqxq5Fz1IK shs5n7jRZ8IfodMrK+ORt2FIwJUwxhCLrX/0OMmfAZPe/sAR3DOHOSBR XJQ= _443._tcp.www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. NdXOGpjS6HggeOF/lc6ie2GE+/EAC8bzIJ9H1fxojglScn9wv/+f9aA4 MGT1S2zgSQQ+NL6bjDMAL+FgNMV4Q1/5Tqzp+q7A/k9/zn8VXCky+gTz sm7WQzKnizbp3fxN8eHIDSq6jZnKK6ZJSuOfPuB6ECZtPpih1sBNXCAk WtU= _443._tcp.www.nlnetlabs.nl. 3600 IN NSEC wip.www.nlnetlabs.nl. CNAME RRSIG NSEC wip.www.nlnetlabs.nl. 10200 IN A 213.154.224.1 wip.www.nlnetlabs.nl. 10200 IN RRSIG A 8 4 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. m9YpLhlPfovr8dwj81nCCiPLfeUR3+UUHXeWLuW4MtbNBHk7cOcHL9iQ 2KMSmPMOkZ+uIEdnNHssZkrBN2tdtY+0IES8SIA1aN98UuGjMje/rlEo tQ+NEW+WX4QBf0CX63iiWuM6IAUoAmemBzUnzv87cmyGtE9OcS55M5BC 8DI= wip.www.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 4 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. n17wEA8VKLnI2EJC7SLpy6jJr6sWNnbSyn5rI0LP/jW0P+gv+0oWK5P4 99FYIfjM0i+h0JhYHRwLcKL3CeZk/2VNN5QglBsjsEBszmtobrpJeJNv meO8JTJZ0MkvzLLWd3MShlWsstfLwqC30uNUgZF3KAIUy44LZDb+VT0E Uio= wip.www.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. NQ2HH6aWtsfFoSeORbU2EaLjNX5xypvr4S3R8YT9tmyV/1zQeZd5tkbh tDec5IchLM/d8oAhKkA6Insgf56Ur1Ls2aPy5Pv2lsOoaQe2xZRaDUZ5 ffgbW1hZU4eZAGyNj1htRDutUndFeI76xgwZXIGFcXXAXlytuZFQFMp9 BNY= wip.www.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1::1 wip.www.nlnetlabs.nl. 3600 IN NSEC xmpp.nlnetlabs.nl. A AAAA RRSIG NSEC xmpp.nlnetlabs.nl. 10200 IN A 213.154.224.148 xmpp.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. p+wzJmkft96vTw1bk1vKh5c2OAcQh4TkPPwpnfWgYsi2ehC7eo015Cwy 8zoqtGgR+2U9WgSTAweIWKqyna4ycPzgns2GEFwBlsv/g2MFHYR6zcZL navcKrgrEzuBO51td7wCPnFB8hQQoWxg+cbRJgOYwkjtVPHS7guYG0LI g0w= xmpp.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. y9h86dHL8KDClGtcL20k70YUIB5blnY6bbZCo+UFbnoCFwxJV388dQR+ O/Qkm3HcN/eqqqitHr9rOPbsJUuDdJ4TiBzjYX71cRAvGcEl/cTmJJ2h zjKDYUDI1kzn38lY2MjhyRajiAblXi6CyItUoZY4qQza3cZ69v+jCmdm eMk= xmpp.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. TGJFSHqt5TWsGPRgmEeVlcPexXy1C04Knf1W/Pq7uQkCErhn1Ruk15fz eBhEz0wTX4b0/ZlyJrDzZiMQXnsmU74PjB062y0rXF2rbU8zl5lK1bBW daLrAZ80Gkj61xdbmZK11La67U8tHaw+Dz/sw6Ex/fHCG2YzxRekonlp UYc= xmpp.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. Xmu+ZzOkG0V3uO/J49BMnOdjEWRlnYTPJx8sW3/ey98mAibJT1ia+tS8 of1myDEe1p9rug5pSLYtNSFV51D++xyia411clKCsuOcFeag+fsK+y1p b4ly2RyOzMZxRTx6JoWTtA3RJISW9Bux9vE19V3UYz7jMKfqcPqjbiRL EEY= xmpp.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:b0ef:30:: xmpp.nlnetlabs.nl. 10200 IN SSHFP 1 1 44278B2B38155946ACAA742191D802592FE5D974 xmpp.nlnetlabs.nl. 10200 IN SSHFP 2 1 64C62234F12768515F5EA1312FA04AEEF2C21B5E xmpp.nlnetlabs.nl. 10200 IN SSHFP 3 1 FDE976561F905F1DA58E8C8CA8D7F6884D115A67 xmpp.nlnetlabs.nl. 3600 IN NSEC yobro.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC yobro.nlnetlabs.nl. 10200 IN A 213.154.224.53 yobro.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. w4mpke6CIR55xaQqMbNA/FNEFs1lCle7ci7SEZjHRapvWTVGGnO37tAD 4ygUHcd/LFQLJaVbA6yipPCgIjomwgHUdDaUlsJJmHnkGDBbGbOZWK0x 0uPh3O+jSP0a+dGxatDa6J14ht2TlDhdsVXCBcspxLGucQSrM9noE4wt qNw= yobro.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. lnrWiDhyGXqSJD2KI4ccrcsjA/IPRwoJB0sEDkjFQgpzr+cV4ly/Zk+W VP7NWiQtGWYnOoQo6nVns+Qa3V2BAdbjiUzh2c5A8dPxGvn3/TXLQdaU D6u/ksTPUFBTosYNVxkzJhfCeV6AQJhy6M1mMPGuCzPA41idiQiBwTUH Vso= yobro.nlnetlabs.nl. 3600 IN NSEC zaria.nlnetlabs.nl. A RRSIG NSEC zaria.nlnetlabs.nl. 10200 IN A 213.154.224.212 zaria.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. AJiW4d3BFd82L7pYHz14CgWdEqt8hP5vNJC1AuUL8Z3GcYOuSUF8qKJe IY4v1eoJErgO74JROAPYa/KLQLJ1nEM8JVgr9HB2D+CCSGmwD79vz7YF BeGexjoKc9neyCCy++FamwI5WbCXz2S6Icdh0+1z+q0mUBVablSs5ou9 w/U= zaria.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. AfXZMcTku6xjlMUY22IFJTcZJ8GNE3Awg//s+ndt0XwCLQzcpviXnOuh ya6gVprpFow6XdB1Zaa8gvO1A9DXFP2mz4A/+wp3U88uS5U0SXbjWufW MK9JrEZKUyS/qYX/pLfXIY1e4jM+dlWl3/GWbWwVifGbO/gGj7jz+JfW qWQ= zaria.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. twVQFMZk9SynU1bp0A/pIzIupS5m1Ms9WVKkUdVc8NoWTOQq8uyGAbA1 hG6eP5wA8sQKGUv1fVNeTpTzrikLXRDA6Taof+6uU/JPQWSuAr0YkHTl raue6eSOPFdKKlzqYQeu/3MB/zCwsXa9U/8ewj66RYCA5eMEFf2pJ5Cy FHU= zaria.nlnetlabs.nl. 10200 IN SSHFP 1 1 A440F57393E55A79BD3EB97D71CBA914C15F9DC2 zaria.nlnetlabs.nl. 10200 IN SSHFP 2 1 A5D6C312388F9CDABC3D550084D41C1471C1ECF2 zaria.nlnetlabs.nl. 3600 IN NSEC ziz.nlnetlabs.nl. A SSHFP RRSIG NSEC ziz.nlnetlabs.nl. 10200 IN A 213.154.224.27 ziz.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. maYa6PCA+2uaz3QIS1hYUfjW+WzNdwi6f4ittb611PmPnO9VTl5TRVvM gc9Y8fEKPNTPK/im/qjcAhXVSEI8oGR0Ww6mooolY9l6eBdO5D3Nobnv 98iZqpWTuaBObTiCfsJKmSPUj5rYn+x4Ol/N54Y4xfPuQqH8uCxY6PO0 aHI= ziz.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. FiYtWKhcySJmPf/PVd/UYKJeAcfrVDkRVq2xBxNr5/AGEIDuhwlisTid U9o37TzbphBlG6xWN2vKj+cemJKbMDVzjUxhjtnJrxIsg3edd5ZOpkEf WmBzIA9h6BhWWnFgV129IFt1ojKV5w3UA3WtdeJJC+wwmeTUBTlyA46K BoY= ziz.nlnetlabs.nl. 10200 IN RRSIG SSHFP 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. yK1kaPZnS2dNtPFFie+vL8m0zw0F27chDsUQMtGDii6IK/m9AyNGigz/ morb5u0i2tjM/ePCxT2LPXOMQvYo8tWNysIGRVPpc4DwevSVfCOzxpVf QBOvoWots48U1PkeTDNLNmnuRIMacaRyyQVm+z35nLz0cWhUayZll1Qt P3c= ziz.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. xfUJbS0OfqRS9EsnXVGWE+5G9x3vokpcSTAqI5ZW5wJNrhCrKnF73uWj MUxYs0ac/bR3JSoCmytXg7hhJH6GLkwoR8YvL3lGsqyebXqYq8j5ZVEZ WknhM9tq7W0h53FMVl/z0r+Nz8oQoaaYB9mjOp7SJQplk94ZtFRGtdnu WGk= ziz.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:214:4fff:fe3b:655f ziz.nlnetlabs.nl. 10200 IN SSHFP 1 1 0C7080A7A7E931F4B22FB937E10FB8BFFF42F49B ziz.nlnetlabs.nl. 10200 IN SSHFP 2 1 79A780A6DBD2F1217CCE21B02A35CAF0E0481C55 ziz.nlnetlabs.nl. 3600 IN NSEC zoidberg.nlnetlabs.nl. A AAAA SSHFP RRSIG NSEC zoidberg.nlnetlabs.nl. 10200 IN A 213.154.224.18 zoidberg.nlnetlabs.nl. 10200 IN RRSIG A 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. P69+KJ/51LzKSOM3dIa6sVQ/mf7c0ADFzjc7j5AxHSb9zylbVDd/eRXp wl1dkRXRM8lDzgL3Du+0T231qrxSNmt9Kk+Hg9fHhrmyE1+7c0zcPptL vRNjObZflUU7H/rHhHnS/qDRO7XMN5ekdj5/pispch5L9hIMWEZY9muB /Tk= zoidberg.nlnetlabs.nl. 10200 IN RRSIG AAAA 8 3 10200 20140224111606 20140127111606 42393 nlnetlabs.nl. QdHCZ91vD+GMBElWwHlJNI9wr7Z7isXRhcQkcjBB1msSlrCNP7dMi1Yv IK+3ThKzvzFXwknjmsH01jEXhfDTPjUsAk1cFzMcv4C84RFyQkdz+BMc u1V3lyvpF8ipnfzi1cgOKNHdHVthmx6JCJO4wdofblWkN4fnDUFidrfV G44= zoidberg.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20140224111606 20140127111606 42393 nlnetlabs.nl. IkYDDKoDhvdWMqUBCPqH30sKoSFh3K1s6H3QuUxr3kHIZIdndcobCq+t hfrGaV/KvVtlOFRZsMHojJeIQ7RAhn+yxDvrGrxgiBOvUwow5zNwc3I6 MUWV6oGWDThUObe/dHryumHgngEVB7zevBZwslXpG+nsoxYbwPTTTott 2Xw= zoidberg.nlnetlabs.nl. 10200 IN AAAA 2001:7b8:206:1:219:d1ff:feb1:85e8 zoidberg.nlnetlabs.nl. 3600 IN NSEC nlnetlabs.nl. A AAAA RRSIG NSEC nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. 2014012700 28800 7200 604800 3600 ;; WHEN: Fri Jan 31 10:50:28 CET 2014 ;; XFR size: 1430 records (messages 9, bytes 140058) unbound-1.13.1/testdata/auth_xfr_ixfrnotimpl.rpl0000644000175000017500000001211414010434640021501 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: master: 1.2.3.44 ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.5 mail.example.com. 3600 IN A 1.2.3.6 mail.example.com. 3600 IN A 1.2.3.7 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with IXFR NOTIMPL fallback ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER ; serial, refresh, retry, expire, minimum example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOTIMPL SECTION QUESTION example.com. IN IXFR SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. IN NS ns.example.net. EXTRA_PACKET REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER www.example.com. IN A 1.2.3.6 example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 TIME_PASSES ELAPSE 1 ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END STEP 30 TIME_PASSES ELAPSE 3600 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.6 ENTRY_END ; the zonefile was updated with new contents STEP 70 CHECK_TEMPFILE example.com FILE_BEGIN example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.6 FILE_END SCENARIO_END unbound-1.13.1/testdata/val_nodatawc_nodeny.rpl0000644000175000017500000001110614010434640021244 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard nodata response without qdenial ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; wildcard, Denies A, note this is the end of the NSEC chain. *.example.com. IN NSEC ns.example.com. RRSIG NSEC *.example.com. IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFG0+PaReanKYupgDsJMHBBl7qaAOAhRApLLtiHNSl326iqVz/icLUJ6+Kg== ;{id = 2854} ; this NSEC denies original query name ;ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC ;ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCfm3mQakqw9pd8SluduiMXYYc+/wIULqIBxw1bK8QEwCrd8E6T50P4BEw= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+009+48886.private0000644000175000017500000000324714010434640021514 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 9 (RSASHA512) Modulus: rOZ47cE2/7E9i4VtCnwk3hdf6Io268mAPZAbmNFcjQg/lvL4kZKhvbQ4SZs8uopxdYxE8gJPI8ENoGHS1cDroNWUdXysK0BPlip2vParDTlI1gIZYm6WxxHoYzR7iCQ7UWsEg2vfzkiIwfewl6AHObYdRvJvYj7G4Uh+XtKAy5nl9qEeeGMPCx2DD7X05CVtgNGY2Ey+0l6aiYiIbM/CvES0oGVxR69wU9ftw9TuWltxnBU/XrGEtu1I3Awe+gKhGkmsC10MaJLIDNNB5/6Na5pSUUI+V7pCSCGLnXOakGs+6epEKhiDssjIn3NL8rM8pfbM3YBK70okPe0Nb05Jkw== PublicExponent: AQAB PrivateExponent: FeWqcxIBUSi1TrI7ORS35pi3QNAgXIRMhX92v0fknMfqpcdny6fybAAjEM9kRYu7CtQU90FrnG+atjEtbnzcWqYyAx8i/udKLQ57szraNvaGTvQ9GsY+uj9+WvIOoxNTn+AZ1jsXQRzWlRo1dz6BK8Hwu0eA68Rfk7CGsKOgRCioONwz8m9/GTTxMsZ+VcLkenK/IyYOCnh47vrNkUGb5+3g9Bunkbymcjyhw79DLdMvRRYoqzvhAiGS8r+EpOtAA443iZ+RwfEae7U0VUJEPEEytLb3EZx2qjvWuXtN84tCvXpdum0M7y9dfDojH+I7ZvhiOIMmnWd20ldgjqqOQQ== Prime1: 0xom8n5L5YrcHIHTAZtQK039Ozqay5vOz6QvqqEiXevAdYdDUQVuX3VSAWCScF9OxfPXHZhX8z4hNpjc8zDirVUDlWRf77Shp1kjdhBZvwwxOp28uuXvg6g3VtTirEp0iwCCt6Wy4HErAKRFFZ0sEq5nzp/fn2y71AAWezLk4Gs= Prime2: 0axZNMdHG2ornNjoOJzQAgDDibmqBHgebkJg/f6IWI2X1ew044Qg+67t7VzvnkVe7UiVjLJYsnlVmXhIPA618hSIvPb2WH4QFNVBAW8Q9WeCSvczuTeyjg5BxZVNta4tSWrpm+oYLcwn0MDWJMCynQmT5C5pDjEQtlbQrutCZXk= Exponent1: pQ8+wr6jw3BG2PddsFTrY2DQjv4syOUj2NFNAAKL55oNWxgPN4uimHsYSsFi3wB2jGszmQ1kP2ol+BWgNXrU0qi1a5sXNEstVrdo9cilE6+J0oZBanWdSHlAA+Hi9sokxAb7LnMeIUX7VL4c0mCZdGXv/uycooAXgRUsftn1gc8= Exponent2: Zc1Ukree4sSt4D3AopwgsphEWH54+iqIO+imxyvqb3RwIEHLfBwPF6RbiT/yZ9ouuO7hDasaPa2DzjwEdoR9+sfVjEosWdL7Y+IW6edPSJe1P0i/KFLOswJhFNnlHS0wd9EdE8KZcsMJIeY/EyEsl+qqj8Oo5mcUQjPspsE7P6E= Coefficient: SkqMe/RECHeiSYo+DBGMOdBiCKrxDc02W1lVCM9k9tD7lN6OA2KdhxTWGtfNI147kQkRnR8Q6Qv/ushy9S+dYScDXjqB3n1vpKaklvPdWOXGokJds6zgiviUKxtYuFiDoluPNEdHblk9sThkTBb2qpb17R9xUNIX4zRidkQweHQ= unbound-1.13.1/testdata/speed_local.tdir/0000755000175000017500000000000014010434640017723 5ustar wouterwouterunbound-1.13.1/testdata/speed_local.tdir/speed_local.conf0000644000175000017500000000036714010434640023052 0ustar wouterwouterserver: verbosity: 1 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/speed_local.tdir/speed_local.testns0000644000175000017500000000031014010434640023431 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/speed_local.tdir/speed_local.post0000644000175000017500000000043214010434640023103 0ustar wouterwouter# #-- speed_local.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $UNBOUND_PID unbound-1.13.1/testdata/speed_local.tdir/speed_local.dsc0000644000175000017500000000046014010434640022670 0ustar wouterwouterBaseName: speed_local Version: 1.0 Description: Speed test with localhost query. CreationDate: Thu Feb 14 16:51:55 CET 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: speed_local.pre Post: speed_local.post Test: speed_local.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/speed_local.tdir/speed_local.test0000644000175000017500000000160414010434640023077 0ustar wouterwouter# #-- speed_local.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE perf) echo "> perf version.server" $PRE/perf -d 1 -a "version.server CH TXT -" 127.0.0.1@$UNBOUND_PORT 2>&1 | tee outfile echo -n "version-server " > line.txt if grep "average qps" outfile >> line.txt 2>&1; then echo "OK" else echo "> cat logfiles" cat unbound.log echo "Not OK" exit 1 fi echo "> perf localhost" $PRE/perf -d 1 -a "localhost IN A -" 127.0.0.1@$UNBOUND_PORT 2>&1 | tee outfile echo -n "localhost-addr " >> line.txt if grep "average qps" outfile >> line.txt 2>&1; then echo "OK" else echo "> cat logfiles" cat unbound.log echo "Not OK" exit 1 fi cat line.txt >> ../.perfstats.txt exit 0 unbound-1.13.1/testdata/speed_local.tdir/speed_local.pre0000644000175000017500000000125314010434640022706 0ustar wouterwouter# #-- speed_local.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < speed_local.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_unbound_up unbound.log unbound-1.13.1/testdata/Kexample.com.+007+57024.ds0000644000175000017500000000021714010434640020420 0ustar wouterwouterexample.com. 3600 IN DS 57024 7 1 46d134be319b2cc910b9938f1cb25dc41abb27bf ; xicit-citor-vasin-rarus-nygir-nagam-zulor-dylos-gokar-ranor-zixyx unbound-1.13.1/testdata/tcp_sigpipe.tdir/0000755000175000017500000000000014010434640017757 5ustar wouterwouterunbound-1.13.1/testdata/tcp_sigpipe.tdir/tcp_sigpipe.pre0000644000175000017500000000161014010434640022773 0ustar wouterwouter# #-- tcp_sigpipe.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT tcp_sigpipe.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_sigpipe.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/tcp_sigpipe.tdir/tcp_sigpipe.dsc0000644000175000017500000000046514010434640022765 0ustar wouterwouterBaseName: tcp_sigpipe Version: 1.0 Description: Generate SIGPIPE over a TCP channel. CreationDate: Tue Apr 22 13:45:04 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: tcp_sigpipe.pre Post: tcp_sigpipe.post Test: tcp_sigpipe.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tcp_sigpipe.tdir/tcp_sigpipe.test0000644000175000017500000000162114010434640023166 0ustar wouterwouter# #-- tcp_sigpipe.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test if uname | grep MINGW >/dev/null; then echo "no job control in shell on windows. end test" exit 0 fi PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # first test a single TCP query. echo "> query www.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN >outfile 2>&1 & kill -PIPE $UNBOUND_PID wait if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "exit status OK" fi echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/tcp_sigpipe.tdir/tcp_sigpipe.conf0000644000175000017500000000036614010434640023141 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/tcp_sigpipe.tdir/tcp_sigpipe.post0000644000175000017500000000045414010434640023177 0ustar wouterwouter# #-- tcp_sigpipe.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns0000644000175000017500000000115714010434640023533 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH UDP opcode qtype qname REPLY QR AA NOERROR TC ADJUST copy_id SECTION QUESTION www IN A ENTRY_END ENTRY_BEGIN MATCH TCP opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END unbound-1.13.1/testdata/Kexample.com.+005+55582.private0000644000175000017500000000104514010434640021471 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 5 (RSASHA1) Modulus: zdnkNAMmkfig9020LgFRAeTnRcwP50evivymweaK8hrzeHFHkJGAK132wQ0Jb0B7w4g7X3HD239E9oQCpBr44Q== PublicExponent: AQAB PrivateExponent: DE8+TTnvAYWboo47+xBLFtDoX40fWlY4EhifpDK0FlwYtslxlSkCZkynCwYtZ+DKVpqRHfKqiJ58YLHSfh3NLQ== Prime1: 9Gn4mzILOWnw5w1x2qeDj5yTny3un0J1PnPhPsPlpHs= Prime2: 15vzQpJ7l5rh1grtqEbom/mxaUX49CzMS6zi9xfHX1M= Exponent1: qknPEWobkePzGTgv1DUUH5Hq9GPPNpzaDSo1jEJ2lFM= Exponent2: FTrI0BRGUR4yAHZhAkHBI6KJYnk+UySaFRV336aavfs= Coefficient: iaMsVK9xzKl9+2tiaoNQNcVQSTkP5oI2upGqfOsQXbg= unbound-1.13.1/testdata/root_anchor.tdir/0000755000175000017500000000000014010434640017766 5ustar wouterwouterunbound-1.13.1/testdata/root_anchor.tdir/root_anchor.test0000644000175000017500000000276414010434640023215 0ustar wouterwouter# source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # only do this test if the network is up. echo "is the net up?" if dig @k.root-servers.net . SOA 2>&1 | grep NOERROR ; then echo yes else echo no exit 0 fi # test that unbound-anchor, its builtin DNSKEY, works. # so the https is disabled (go to 127.0.0.1@10099). $PRE/unbound-anchor -u "127.0.0.1" -P 10099 -a test.ds -v # check that the test.ds file is OK. if $PRE/unbound-host -f test.ds -t SOA -v . 2>&1 | grep "(secure)"; then echo "The builtin DS root anchors work" else echo "The builtin DS root anchors do not work" exit 1 fi echo "" # test that unbound-anchor, the builtin certificate, works # so, force https with -F and the -c is a nonexistant file $PRE/unbound-anchor -a test.cert -c test.pem -v -F # check that the test.cert file is OK. if $PRE/unbound-host -f test.cert -t SOA -v . 2>&1 | grep "(secure)"; then echo "The builtin root update certificate works" else echo "The builtin root update certificate does not work" exit 1 fi # use curl to see if the PGP certificate has been updated. curl --time-cond "20170203 10:00:00" https://data.iana.org/root-anchors/icannbundle.pem > newcert if test -n "`cat newcert`"; then echo "icannbundle.pem has been updated" cat newcert echo "icannbundle.pem has been updated" exit 1 else echo "icannbundle.pem has not been updated" fi exit 0 unbound-1.13.1/testdata/root_anchor.tdir/root_anchor.dsc0000644000175000017500000000042114010434640022773 0ustar wouterwouterBaseName: root_anchor Version: 1.0 Description: check if root anchor has changed. CreationDate: Tue Sep 28 12:43:09 CEST 2010 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: root_anchor.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/iter_scrub_ns_fwd.rpl0000644000175000017500000000326414010434640020735 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. forward-zone: name: "example.com" forward-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test scrubber to scrub NS record for lamelike reply from fwd ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY RD RA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; must be scrubbed www.burritolovers.com. IN A 10.20.30.40 SECTION AUTHORITY example1234.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY RD RA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; LAME com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nx_nsec3_collision.rpl0000644000175000017500000002067214010434640021673 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nxdomain NSEC3 with a collision. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; some collisions added here. Say different chains are being signed ; and some colliding NSEC3 RRs are generated. ; closest encloser, H(example.com) = 6md8numosa4q9ugkffdo1bmm82t5j39s ; for 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 123 aabb00123456bbccdd 6md8numosa4q9ugkffdo1bmm82t5j49s A RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j49s SOA NS MX DNSKEY RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFHndWrEEbuzezs/4lxeiMgEuUsUbAhR72gJgd/Zmhf80yoxCauw9k5OkCw== ;{id = 2854} ; wildcard denial, H(*.example.com.) = 4f3cnt8cu22tngec382jj4gde4rb47ub ; for 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 18 - 4f3cnt8cu22tngec382jj4gde4rb87ub A RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb48ub A MX RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 19 - 4f3cnt8cu22tngec382jj4gde4rb87ub A RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFDRwji51WCXJg7W/3+Jx586af5qgAhQPxHegtzu1I/QbvCNrOOON05N1rw== ;{id = 2854} ; next closer name, H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3. ; for 1 1 123 aaabb... s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 18 - s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 19 - s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 00 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 01 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 02 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 03 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFDLy4GbR8ZaKHATVJGnGxzpsuq60AhQ1/pRbXi1ZbcYohzHgWzNC50fC5A== ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 123 aabb00123456bbccdd 6md8numosa4q9ugkffdo1bmm82t5j49s A RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j49s SOA NS MX DNSKEY RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFHndWrEEbuzezs/4lxeiMgEuUsUbAhR72gJgd/Zmhf80yoxCauw9k5OkCw== ;{id = 2854} 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 18 - 4f3cnt8cu22tngec382jj4gde4rb87ub A RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb48ub A MX RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. NSEC3 1 1 19 - 4f3cnt8cu22tngec382jj4gde4rb87ub A RRSIG 4f3cnt8cu22tngec382jj4gde4rb46ub.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFDRwji51WCXJg7W/3+Jx586af5qgAhQPxHegtzu1I/QbvCNrOOON05N1rw== ;{id = 2854} s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 18 - s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 19 - s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 00 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 01 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 02 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 20 03 s1unhcti19bkdr98fegs0v46mbu3t4m4 A RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFDLy4GbR8ZaKHATVJGnGxzpsuq60AhQ1/pRbXi1ZbcYohzHgWzNC50fC5A== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/tcp_req_timeout.tdir/0000755000175000017500000000000014010434640020654 5ustar wouterwouterunbound-1.13.1/testdata/tcp_req_timeout.tdir/tcp_req_timeout.test0000644000175000017500000000661714010434640024772 0ustar wouterwouter# #-- tcp_req_timeout.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # check what sort of netcat we have if nc -h 2>&1 | grep "q secs"; then ncopt="-q 3 -i 4" else ncopt="-i 4" fi # this test query should just work (server is up) echo "> query www1.example.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # multiple requests that are answered immediately and then the timeout echo "> query www1.example.net. www2.example.net. www3.example.net. www.example.com." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN www.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "stream closed" outfile; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # multiple requests that are waiting for answers and then the timeout echo "> query www2.example.com. www2.example.com. www3.example.com." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN www2.example.com A IN www3.example.com A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "stream closed" outfile; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # wait a bit sleep 2 # echo a couple requests to the other side and then wait for the timeout. # this creates waiting answers in the reply queue. echo "> nc www.example.net www2.example.net www3.example.net" ( echo "0021eb410100000100000000000003777777076578616d706c65036e657400000100010022eb41010000010000000000000477777732076578616d706c65036e657400000100010022eb41010000010000000000000477777733076578616d706c65036e65740000010001" | xxd -r -p ; sleep 10 ; echo "") | nc $ncopt 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile echo "OK" exit 0 unbound-1.13.1/testdata/tcp_req_timeout.tdir/tcp_req_timeout.pre0000644000175000017500000000163214010434640024571 0ustar wouterwouter# #-- tcp_req_timeout.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT tcp_req_timeout.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_timeout.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/tcp_req_timeout.tdir/tcp_req_timeout.post0000644000175000017500000000051414010434640024766 0ustar wouterwouter# #-- tcp_req_timeout.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat fwd.log cat unbound.log unbound-1.13.1/testdata/tcp_req_timeout.tdir/tcp_req_timeout.testns0000644000175000017500000000172614010434640025327 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=4 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=4 SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=4 SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END unbound-1.13.1/testdata/tcp_req_timeout.tdir/tcp_req_timeout.dsc0000644000175000017500000000047414010434640024557 0ustar wouterwouterBaseName: tcp_req_timeout Version: 1.0 Description: Test tcp request order timeouts. CreationDate: Mon Jan 21 11:23:00 CET 2018 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: tcp_req_timeout.pre Post: tcp_req_timeout.post Test: tcp_req_timeout.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tcp_req_timeout.tdir/tcp_req_timeout.conf0000644000175000017500000000073014010434640024726 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" tcp-idle-timeout: 2000 local-zone: "drop.net" deny forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_ttlexpire.tdir/0000755000175000017500000000000014010434640020331 5ustar wouterwouterunbound-1.13.1/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.pre0000644000175000017500000000161614010434640023725 0ustar wouterwouter# #-- fwd_ttlexpire.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_ttlexpire.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_ttlexpire.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.post0000644000175000017500000000045714010434640024126 0ustar wouterwouter# #-- fwd_ttlexpire.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.dsc0000644000175000017500000000050114010434640023700 0ustar wouterwouterBaseName: fwd_ttlexpire Version: 1.0 Description: forward UDP and TTL expires in the cache CreationDate: Wed May 9 11:08:02 CEST 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_ttlexpire.pre Post: fwd_ttlexpire.post Test: fwd_ttlexpire.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.conf0000644000175000017500000000036714010434640024066 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.test0000644000175000017500000000137114010434640024114 0ustar wouterwouter# #-- fwd_ttlexpire.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi # wait for query to expire. sleep 4 # query again rm outfile echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> cat logfiles" cat fwd.log cat unbound.log exit 0 unbound-1.13.1/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.testns0000644000175000017500000000031214010434640024447 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www 2 IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/auth_zonefile_noup.rpl0000644000175000017500000000721614010434640021132 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: no ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: no ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com $ORIGIN com. example 3600 IN SOA dns.example.de. hostmaster.dns.example.de. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.example.com. 3600 IN NS ns2.example.com. $ORIGIN example.com. www 3600 IN A 1.2.3.4 ns1 3600 IN A 1.2.3.4 ns2 3600 IN AAAA ::2 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with zonefile with no upstream enabled ; and therefore fallback is going to be used. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nx_failwc.rpl0000644000175000017500000000526014010434640020046 0ustar wouterwouter; config options ; The island of trust is at nsecwc.nlnetlabs.nl server: trust-anchor: "nsecwc.nlnetlabs.nl. 10024 IN DS 565 8 2 0C15C04C022700C8713028F6F64CF2343DE627B8F83CDA1C421C65DB 52908A2E" val-override-date: "20181202115531" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "nsecwc.nlnetlabs.nl" stub-addr: "185.49.140.60" CONFIG_END SCENARIO_BEGIN Test validator with nxdomain response with wildcard expanded NSEC record, original NSEC owner does not provide proof for QNAME. CVE-2017-15105 test. ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 185.49.140.60 ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION nsecwc.nlnetlabs.nl. IN DNSKEY SECTION ANSWER nsecwc.nlnetlabs.nl. 3600 IN DNSKEY 257 3 8 AwEAAbTluF4BfJ/FT7Ak5a3VvYG1AqhT8FXxOsVwGTyueyE/hW+fMFMd QlLMf2Lf/gmsnFgn/p7GDmJBLlPTATmLeP3isvAZbK3MDEP2O5UjTVmt LZriTv8xfxYW6emCM54EQjWii64BFWrOeLm9zQqzyaLl53CbIIXqiacV KPteh8GX nsecwc.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. q3bG4e8EtvXKDcNWcyYHeQxLF9l9aJKdmeSubyN6Qc3UVHugd6t3YSxD hlD+g43y7FcdnNHdAPh/jpgC4wtOb5J+5XAuESDHwesmIXOCTJjrb+A8 r+xQK+vsY8FhNZ2r81JZ/KQ/+TcCS5tbYeNZQgENduWAxgGiw3fdrMOV xiU= ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION a.nsecwc.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY !.nsecwc.nlnetlabs.nl. 3600 IN NSEC delegation.nsecwc.nlnetlabs.nl. TXT RRSIG NSEC !.nsecwc.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. ddy1MRbshFuFJswlouNGHsZUF/tYu8BOCztY2JuHeTMyWL7rhRKp73q/ 1RAXMwywKsynT5ioY0bMtEQszeIEn29IYaPDHieLAobjF6BMu1kO7U2/ oEBrSHM/fx28BcaM5G4nfCIm3BlhQhWvk1NDHLn3Q26x4hF/dnmFOUet aXw= nsecwc.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 nsecwc.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. bYibpCDg1LgrnYJgVahgu94LBqLIcNs4iC0SW8LV7pTI1hhuFKbLkO2O ekPdkJAWmu/KTytf8D+cdcK6X/9VS8QCVIF5S0hraHtNezu0f1B5ztg3 7Rqy+uJSucNKoykueAsz2z43GMgO0rGH3bqM7+3ii8p2E2rhzqEtG/D3 qyY= SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.nsecwc.nlnetlabs.nl. IN TXT ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION a.nsecwc.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/edns_client_string.rpl0000644000175000017500000000465414010434640021115 0ustar wouterwouter; config options server: edns-client-string: 10.0.0.0/24 "abc d" edns-client-string: 10.0.0.10/32 "123AbC!" stub-zone: name: "edns-string-abc." stub-addr: 10.0.0.1 stub-zone: name: "edns-string-123." stub-addr: 10.0.0.10 stub-zone: name: "notag." stub-addr: 10.10.0.1 CONFIG_END SCENARIO_BEGIN Test EDNS string tag option RANGE_BEGIN 0 1000 ADDRESS 10.0.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION edns-string-abc. IN A SECTION ANSWER edns-string-abc. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END RANGE_BEGIN 0 1000 ADDRESS 10.0.0.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION edns-string-123. IN A SECTION ANSWER edns-string-123. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END RANGE_BEGIN 0 1000 ADDRESS 10.10.0.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION notag. IN A SECTION ANSWER notag. IN A 10.20.30.40 SECTION ADDITIONAL ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION edns-string-abc. IN A ENTRY_END STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION edns-string-abc. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN fd e9 ; Opcode 65001 00 05 ; Length 5 61 62 63 20 64 ; "abc d" HEX_EDNSDATA_END ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION edns-string-abc. IN A SECTION ANSWER edns-string-abc. IN A 10.20.30.40 ENTRY_END STEP 110 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION edns-string-123. IN A ENTRY_END STEP 120 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION edns-string-123. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN fd e9 ; Opcode 65001 00 07 ; Length 7 31 32 33 41 62 ; "123Ab" 43 21 ; "C!" HEX_EDNSDATA_END ENTRY_END STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION edns-string-123. IN A SECTION ANSWER edns-string-123. IN A 10.20.30.40 ENTRY_END STEP 210 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION notag. IN A ENTRY_END STEP 220 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode ednsdata SECTION QUESTION notag. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN HEX_EDNSDATA_END ENTRY_END STEP 230 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION notag. IN A SECTION ANSWER notag. IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ipsecmod_bogus_ipseckey.crpl0000644000175000017500000002144214010434640022273 0ustar wouterwouter; Test ipsecmod with bogus IPSECKEY ; config options ; The island of trust is at example.com server: trust-anchor: "example.com. IN DS 48069 8 2 fce2bcb0d88b828064faad58e935ca2e32ff0bbd8bd8407a8f344d8f8e8c438a" val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" # test that default value of harden-dnssec-stripped is still yes. fake-sha1: yes trust-anchor-signaling: no access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: no ipsecmod-max-ttl: 200 stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test ipsecmod with bogus IPSECKEY ; Scenario overview: ; - query for example.com. IN A ; - check that query for example.com. IN IPSECKEY is generated ; - check that we get an answer for example.com. IN A with the correct TTL ; - check that the get the same answer from cache ; - check that we don't get the IPSECKEY answer from cache (bogus) ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 86400 IN SOA ns.example.com. example.com. 2002022401 10800 15 604800 10800 example.com. 86400 IN RRSIG SOA 8 2 86400 20170609142855 20170512142855 48069 example.com. fr6oVOsRMnm3D8N01LxzPvT9lWdNDhTlmwR1co42c3H2ra1EjbbKqkLcrXQAsq7E/ddzqgL3RnYS+3USojXycI1xhjXC8YT2xsW3uH8uTY1Qvk1K75lu1OXmDiU6wvHplFowl0OX7sx76lB1itbvsau4bMPMt03sf4u8po7V35s= ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 example.com. 3600 IN RRSIG A 8 2 3600 20170609142855 20170512142855 48069 example.com. Qviw6w8ReMG2WZxenvzj/YwoeM3Ln59Fnw6s1MRWGsD2yA3+y0loFdUEHZdRhrEiV0kvtQGC+kBhMuSMq/cyjprbKLw5pkS9+MMDDnVPP1PQb17LY4NIxPtq710AN1sjhBK6PVa6XN+3ciUmCcLs1ESviQkVKpgAY/QlV0TaarQ= SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END ; response to IPSECKEY query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION ANSWER example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== ;(correct answer) example.com. 3600 IN RRSIG IPSECKEY 8 2 3600 20170609144114 20170512144114 48069 example.com. UqRbG6P8mWQEVt16j86cS6fqEN8c+5t8qtePr9ghRqIxeuPOCkLiSqmXQYcQbOeOK4YoWQ3gD2az2JMWQMxEKeBLpxXZbgZN+2uIZ9LLEkyYjGRulr9kameKTM1feSe31A9mR9IgMNrY/ZeUkfxC+8Q7s8avOqYH2jVMFUg9raE= ; (bogus answer) example.com. 3600 IN RRSIG IPSECKEY 8 2 3600 20170609144114 20170512144114 48069 example.com. Bogus6P8mWQEVt16j86cS6fqEN8c+5t8qtePr9ghRqIxeuPOCkLiSqmXQYcQbOeOK4YoWQ3gD2az2JMWQMxEKeBLpxXZbgZN+2uIZ9LLEkyYjGRulr9kameKTM1feSe31A9mR9IgMNrY/ZeUkfxC+8Q7s8avOqYH2jVMFUg9raE= SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 86400 IN DNSKEY 256 3 8 AwEAAddE7q1HL4Id+gpQ7imk+RyNEhCWgtew5tstsqIR/fXq0RBn0rF4SI1H6ysbb3nfqAV1xRDJ01ddpgfGyz9zXXHQ/H/9qEpeWapqfNTQ5GHHdxBL2iST7XusThfXEyX/pouKIpvtknvtLs8tmH64dajxoJkaejU2EKXKaBaRKcYx ;{id = 48069 (zsk), size = 1024b} example.com. 86400 IN RRSIG DNSKEY 8 2 86400 20170609144114 20170512144114 48069 example.com. mJU3LnubfYW7vhksiC1STWbrSjCe6TG1kEpnk4jRrYovues6bzOTIFSXEMjPW1mikulapnx3nMtTWdrW2InjfP9wLV/u2Wx1Vu3s9uzli/27y//3DOkZSeBa5RZdKpC1h8UB5GAxq4MRiSidgEBB1qaDIaE29sWmn9kPHEgNcgI= SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION example.com. IN IPSECKEY ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION example.com. IN A SECTION ANSWER ENTRY_END ; Query without RD, check if not cached STEP 11 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_valid_use.rpl0000644000175000017500000003015114010434640021334 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with using a valid key for validation ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 30 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; probe failures RANGE_BEGIN 31 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION example.com. IN DNSKEY ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20091124111500 20091018111500 60946 example.com. pI3iwElQXjhje3SnAfwAG/VwdRskQcLdiApbKdUbR7MIsDUpqVjxIUtSIRu/aXNt8EVA8SwZQXNmTYA2SrrBhA== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; put this almost one hour before expiration so that the next query arrives ; before the next poll timer. ; Make this probe fail to keep DNSKEY out of the cache ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${ ${20*24*3600} - 3000 } STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 3200 ${timeout} 3600} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 3010 seconds later, hold down has lapsed. ; but the probe timer does not expire yet! ; key 60946 becomes valid. Use it. ; check this with a data query. STEP 41 TIME_PASSES EVAL ${3010} STEP 42 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; Note the data is signed with the newly valid KSK to make sure it can be used. STEP 43 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20091124111500 20091018111500 60946 example.com. pI3iwElQXjhje3SnAfwAG/VwdRskQcLdiApbKdUbR7MIsDUpqVjxIUtSIRu/aXNt8EVA8SwZQXNmTYA2SrrBhA== ;{id = 60946} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_no_cache.rpl0000644000175000017500000000273014010434640017630 0ustar wouterwouter; This is a comment. ; config options go here. forward-zone: name: "." forward-addr: 216.0.0.1 forward-no-cache: yes CONFIG_END SCENARIO_BEGIN Forward with no_cache set RANGE_BEGIN 0 10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END RANGE_END RANGE_BEGIN 200 300 RANGE_END RANGE_BEGIN 20 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.44 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END RANGE_END RANGE_BEGIN 200 300 RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN REPLY QR RD RA MATCH opcode qname qtype all SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ; make some time pass but not enough to timeout a cached record STEP 10 TIME_PASSES ELAPSE 10 STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 24 CHECK_ANSWER ENTRY_BEGIN REPLY QR RD RA MATCH opcode qname qtype all SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.44 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/serve_expired.rpl0000644000175000017500000000477414010434640020107 0ustar wouterwouter; config options server: module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-expired: yes access-control: 127.0.0.1/32 allow_snoop stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test serve-expired ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - query again (without the RD bit) right after the TTL expired ; - check that we get the expired cached answer (this should trigger prefetching) ; - query with RD bit and check that the cached record was updated ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer (should be cached) STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire STEP 11 TIME_PASSES ELAPSE 3601 ; Query again without RD bit STEP 30 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got a stale answer STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 30 IN A 5.6.7.8 SECTION AUTHORITY example.com. 30 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 30 IN A 1.2.3.4 ENTRY_END ; Query with RD bit (the record should have been prefetched) STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+007+57024.key0000644000175000017500000000036714010434640020610 0ustar wouterwouterexample.com. 3600 IN DNSKEY 257 3 7 AwEAAbvre/wK/WVeoj0SiwVkTD+NefvHPru9YIqLWY0m+0E5NYOpJZdc+PGQQYRzFNOlugVZtFirmv5Lmz7GNiASXtG/IFi//SlE30DxEKQOjt2F6qSZTZ1nZ5XOIMGTwWyp4OoI0egk5JavC5mQbyXqcj82ywt6F5Z3CmnThVl6MtOv ;{id = 57024 (ksk), size = 1024b} unbound-1.13.1/testdata/iter_dnsseclame_bug.rpl0000644000175000017500000002715614010434640021240 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Bug test dnssec-lame detection at ds point with target queries. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. ; Note this timing is so it will provide answers at the beginning. RANGE_BEGIN 0 30 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION e.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ; no example.net delegation answers yet. RANGE_END ; e.gtld-servers.net. ; Note this timing is so it will not provide answers at the beginning, ; but only later on. RANGE_BEGIN 30 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION e.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. ; Note this timing is so it will not provide answers at the beginning, ; but only later on. RANGE_BEGIN 30 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY ; no NS set. not needed for this test. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. C/0b+sqlsdSTkhd+aDXb6ELyuQreosIGBzLCtWxYGD+Q9QGB5rN8uB+4+48yhw36pd3MfeAn06AgAnJ6eu8tJg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ; fine DNSKEY response. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ENTRY_END ; correct delegation with DS ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; This server is DNSSEC LAME! ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION ANSWER ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 SECTION AUTHORITY ; dnssec-lameness detection depends on this information sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END STEP 10 NOTHING ; recursion at time 10. ; first recursion with answers in 0-30 time ; with bug it now resolves to the bad version ; fixed, it stops waiting for more target queries. STEP 40 NOTHING ; next recursion with more answers at time 40. ; recursion happens here. STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/tcp_reuse.tdir/0000755000175000017500000000000014010434640017442 5ustar wouterwouterunbound-1.13.1/testdata/tcp_reuse.tdir/tcp_reuse.test0000644000175000017500000001644214010434640022343 0ustar wouterwouter# #-- tcp_reuse.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) echo "> query www1.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.com" outfile | grep "10.20.30.41"; then echo "content OK" else echo "result contents not OK, for www1.example.com" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for www1.example.com" exit 1 fi echo "OK" echo "" # this should be reused on the same tcp stream: echo "> query www2.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "www2.example.com" outfile | grep "10.20.30.42"; then echo "content OK" else echo "result contents not OK, for www2.example.com" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for www2.example.com" exit 1 fi echo "> query refuse.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "rcode: SERVFAIL" outfile; then echo "content OK" else echo "result contents not OK, for refuse.net" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for refuse.net" exit 1 fi echo "> query www3.example.com." echo "> query www4.example.com." echo "> query www5.example.com." echo "> query www6.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 & wait if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "www3.example.com" outfile3 | grep "10.20.30.43"; then echo "content OK" else echo "result contents not OK, for www3.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www3.example.com" exit 1 fi if grep "www4.example.com" outfile4 | grep "10.20.30.44"; then echo "content OK" else echo "result contents not OK, for www4.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www4.example.com" exit 1 fi if grep "www5.example.com" outfile5 | grep "10.20.30.45"; then echo "content OK" else echo "result contents not OK, for www5.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www5.example.com" exit 1 fi if grep "www6.example.com" outfile6 | grep "10.20.30.46"; then echo "content OK" else echo "result contents not OK, for www6.example.com" echo "> cat logfiles" cat outfile3 cat outfile4 cat outfile5 cat outfile6 cat unbound2.log cat unbound.log echo "result contents not OK, for www6.example.com" exit 1 fi echo "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net" $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile for x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do if grep "$x" outfile | grep "10.20.30.40"; then echo "content OK for $x" else echo "result contents not OK, for $x" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for $x" exit 1 fi done # make the server timeout to drop the upstream connection echo "> sleep 15" sleep 15 # see if we are still up. echo "> query a7.more.net" $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile for x in a7.more.net; do if grep "$x" outfile | grep "10.20.30.40"; then echo "content OK for $x" else echo "result contents not OK, for $x" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for $x" exit 1 fi done # dropconn.drop.net make the server drop the connection. echo "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net" $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile # cannot really check outfile, because it may or may not have answers depending # on how fast the other server responds or the drop happens, but there are # a bunch of connection drops, whilst resolving the other queries. echo "> query drop.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT drop.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi if grep "rcode: SERVFAIL" outfile; then echo "content OK" else echo "result contents not OK, for drop.net" echo "> cat logfiles" cat outfile cat unbound2.log cat unbound.log echo "result contents not OK, for drop.net" exit 1 fi # timeouts at the end. (so that the server is not marked as failed for # the other tests). echo "> query q1.drop.net." echo "> query q2.drop.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 & $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 & wait if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile1 cat outfile2 cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi cat outfile1 cat outfile2 if grep "rcode: SERVFAIL" outfile1; then echo "content OK" else echo "result contents not OK, for q1.drop.net" echo "> cat logfiles" cat outfile1 cat outfile2 cat unbound2.log cat unbound.log echo "result contents not OK, for q1.drop.net" exit 1 fi if grep "rcode: SERVFAIL" outfile2; then echo "content OK" else echo "result contents not OK, for q2.drop.net" echo "> cat logfiles" cat outfile1 cat outfile2 cat unbound2.log cat unbound.log echo "result contents not OK, for q2.drop.net" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/tcp_reuse.tdir/tcp_reuse.pre0000644000175000017500000000222214010434640022141 0ustar wouterwouter# #-- tcp_reuse.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT UPSTREAM_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tcp_reuse.conf > ub.conf # start unbound in the background #$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & $PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test wait_unbound_up unbound.log # make upstream config file sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' < tcp_reuse.conf2 > ub2.conf # start upstream unbound in the background #$PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & $PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & UPSTREAM_PID=$! echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test wait_unbound_up unbound2.log cat .tpkg.var.test unbound-1.13.1/testdata/tcp_reuse.tdir/tcp_reuse.conf0000644000175000017500000000041214010434640022277 0ustar wouterwouterserver: verbosity: 5 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no tcp-upstream: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/tcp_reuse.tdir/tcp_reuse.conf20000644000175000017500000000177714010434640022400 0ustar wouterwouter# this is the upstream server that has pipelining and responds to queries. server: verbosity: 1 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound2.pid" chroot: "" username: "" do-not-query-localhost: no tcp-idle-timeout: 10000 log-queries: yes log-replies: yes log-identity: "upstream" local-zone: "." refuse local-zone: "example.com" static local-data: "www.example.com A 10.20.30.40" local-data: "www1.example.com A 10.20.30.41" local-data: "www2.example.com A 10.20.30.42" local-data: "www3.example.com A 10.20.30.43" local-data: "www4.example.com A 10.20.30.44" local-data: "www5.example.com A 10.20.30.45" local-data: "www6.example.com A 10.20.30.46" local-data: "www7.example.com A 10.20.30.47" local-zone: "drop.net" deny local-zone: "refuse.net" refuse local-zone: "more.net" redirect local-data: "more.net A 10.20.30.40" # if queries escape, send them to localhost forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/tcp_reuse.tdir/tcp_reuse.dsc0000644000175000017500000000043214010434640022125 0ustar wouterwouterBaseName: tcp_reuse Version: 1.0 Description: Test tcp stream reuse. CreationDate: Wed Jun 03 09:37:00 CET 2020 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: tcp_reuse.pre Post: tcp_reuse.post Test: tcp_reuse.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tcp_reuse.tdir/tcp_reuse.post0000644000175000017500000000074514010434640022350 0ustar wouterwouter# #-- tcp_reuse.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid `cat unbound2.pid` if test -f unbound2.log; then echo ">>> upstream log" cat unbound2.log fi #kill_pid $UNBOUND_PID kill_pid `cat unbound.pid` if test -f unbound.log; then echo ">>> unbound log" cat unbound.log fi unbound-1.13.1/testdata/val_nsec3_b3_optout_negcache.rpl0000644000175000017500000001371214010434640022723 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.3 referral optout with negative cache. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION mc.c.example. IN MX SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. ;; NSEC3 RR that covers the "next closer" name (c.example) ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ;; NSEC3 RR that matches the closest encloser (example) ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ; DS must be gotten from neg cache ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA DO NOERROR ; SECTION QUESTION ; c.example. IN DS ; SECTION AUTHORITY ; ;; NSEC3 RR that covers the "next closer" name (c.example) ; ;; H(c.example) = 4g6p9u5gvfshp30pqecj98b3maqbn1ck ; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) ; 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) ; ; ;; NSEC3 RR that matches the closest encloser (example) ; ;; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom ; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ; 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ; ENTRY_END RANGE_END ; ns1.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END ; ns2.c.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.example. IN NS SECTION ANSWER c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION mc.c.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION mc.c.example. IN MX SECTION ANSWER mc.c.example. IN MX 50 mx.c.example. SECTION AUTHORITY c.example. NS ns1.c.example. c.example. NS ns2.c.example. SECTION ADDITIONAL ns1.c.example. A 192.0.2.7 ns2.c.example. A 192.0.2.8 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nodata_entnx.rpl0000644000175000017500000001441514010434640020560 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. IN DS 29332 8 2 751f8b755718a7b4ef8920a4b42407520889c3d2142a64f6ffad9e12fa9fc262" val-override-date: "20140301134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata on empty nonterminal response with rcode NXDOMAIN ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20140320093645 20140220093645 55566 example.com. Z+gwYHWVcSXkIYX35nm3bHzlARf1AsI51gH7lGUSwKoD+ZEePXgkqnVS3jrzl/VjeNrmGutpl1rP1tZvTLD5Hs7Q04BlmhS5X22jiGpfwfdaKbbBUNDuCLN31+W8A4B6PBA+jNO3m3+vYNctWfemWX2YTIxKIyOppFOZP2+ll4A= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20140320093645 20140220093645 55566 example.com. Fgdfl8Jp4xFHxHyjkjaso7pt0AdrRifUEP2fer8pNnW4KIH83uA4OjfYcMwdP4HqSBJFPb04wQLFoDrLDdFp3zSjHwQQm+4OIBffBMXQ42RSWFgjCygOzQ/vdBUsBDV9tf6y/ggQg+CVfI7l2oPrUwMQCrr69KdzzrRRlsivotM= ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 8 AwEAAdug/L739i0mgN2nuK/bhxu3wFn5Ud9nK2+XUmZQlPUEZUC5YZvm1rfMmEWTGBn87fFxEu/kjFZHJ55JLzqsbbpVHLbmKCTT2gYR2FV2WDKROGKuYbVkJIXdKAjJ0ONuK507NinYvlWXIoxHn22KAWOd9wKgSTNHBlmGkX+ts3hh ;{id = 55566 (zsk), size = 1024b} example.com. 3600 IN DNSKEY 257 3 8 AwEAAb4WMOTBLTFvmBra5m6SK4VfViOzmvyUAU0qv861ZQXeEFvwlndqNU9rwRsMxrSWAYs5nHErKDn49usC/HyxxW1477iGFHhfgL4mjNreJm9zft2QFB1VLbRbEPYdDMLCn4co0qnG7/KG8W2i8Pym1L7f+aREwbLo+/716AS2PbaKMhfWLKLiq5wnBcUClQMNzCiwhqxDJp1oePqfkVdeUgXOtgi0dYRIKyQFhJ5VWJ22npoi/Gif0XLCADAlAwRLKc8o/yJkCxskzgpHpw5Cki1lclg0aq4ssOuPRQ+ne6IHYCz9D2mwzulblhLFamKdq7aHzNt4NlyxhpANVFiKLD8= ;{id = 29332 (ksk), size = 2048b} example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20140320093645 20140220093645 29332 example.com. Vjcu4FD2hbHO4jgRXBeWwhUU29DOyUhdcQuRBhcNNZPYS4/MNKrKzhqZ/5jGRx//UffVvZMrVjb2xbJXf0UALrBktbG/yRK0lETXu4JHVtUyCY8jiKlmSl4LabsYC5GvvoLCzXilYFtp1zzagorONmJtmBc9DiP3fp/ju0gZ45/pTn6cLY8cm2/ja5U5SQ4KQ4SVQsiNduvpLAm3CM2qkqOdspWtNEjjG92EXqgBg5lQ0pt5U2wKk3igecACGUiKzrc9qlSBoErS+rDYAZ3TKqUdW489o4hd0vOowvwgb7Z+lqleplyptlCAwpw/djNqA4dX+FTK/oB6lokX5bxnjQ== SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20140320093645 20140220093645 55566 example.com. Z+gwYHWVcSXkIYX35nm3bHzlARf1AsI51gH7lGUSwKoD+ZEePXgkqnVS3jrzl/VjeNrmGutpl1rP1tZvTLD5Hs7Q04BlmhS5X22jiGpfwfdaKbbBUNDuCLN31+W8A4B6PBA+jNO3m3+vYNctWfemWX2YTIxKIyOppFOZP2+ll4A= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20140320093645 20140220093645 55566 example.com. Fgdfl8Jp4xFHxHyjkjaso7pt0AdrRifUEP2fer8pNnW4KIH83uA4OjfYcMwdP4HqSBJFPb04wQLFoDrLDdFp3zSjHwQQm+4OIBffBMXQ42RSWFgjCygOzQ/vdBUsBDV9tf6y/ggQg+CVfI7l2oPrUwMQCrr69KdzzrRRlsivotM= ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION 0.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA ns.example.com. postmaster.example.com. 1337 1200 180 1209600 3600 example.com. 3600 IN RRSIG SOA 8 2 3600 20140320093645 20140220093645 55566 example.com. dcglYOgcxQS6G0PIGitAvMsOUdChGmGAKKb9PYewds2CnoBZq9Tn5F27A4agfJJrUcMC1g3m/O9+kbIYSRs3L9qYwpV/hOu7WLAS/fw+8S3ASSWP2RE+uu0IC1qo0YdHtH5y/cNjqEUcH8uhD1CAYfgKdn3hWEwqXKpWAFrUE7U= ; Denies A and wildcard example.com. 3600 IN NSEC 0.0.0.0.example.com. NS SOA MX TXT RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 8 2 3600 20140320093645 20140220093645 55566 example.com. dL8lR8Wsvow+dCR24E7BTG3NxzxVCJb0wxQ+k8gLVbQMMsMkQEh4gw2zOXkfX21764ULm6RxEww0ibuKnidXLGUEkCc6g+WL2hsnE2DUpwIGZXn/O3VamrB9+GJ+dbCj4NFl+IXNlrfQFsYOiw055jjQjZTxrsCzodnfxqDgwUg= SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION 0.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION 0.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA ns.example.com. postmaster.example.com. 1337 1200 180 1209600 3600 example.com. 3600 IN RRSIG SOA 8 2 3600 20140320093645 20140220093645 55566 example.com. dcglYOgcxQS6G0PIGitAvMsOUdChGmGAKKb9PYewds2CnoBZq9Tn5F27A4agfJJrUcMC1g3m/O9+kbIYSRs3L9qYwpV/hOu7WLAS/fw+8S3ASSWP2RE+uu0IC1qo0YdHtH5y/cNjqEUcH8uhD1CAYfgKdn3hWEwqXKpWAFrUE7U= example.com. 3600 IN NSEC 0.0.0.0.example.com. NS SOA MX TXT RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 8 2 3600 20140320093645 20140220093645 55566 example.com. dL8lR8Wsvow+dCR24E7BTG3NxzxVCJb0wxQ+k8gLVbQMMsMkQEh4gw2zOXkfX21764ULm6RxEww0ibuKnidXLGUEkCc6g+WL2hsnE2DUpwIGZXn/O3VamrB9+GJ+dbCj4NFl+IXNlrfQFsYOiw055jjQjZTxrsCzodnfxqDgwUg= SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ipsecmod_ignore_bogus_ipseckey.crpl0000644000175000017500000002240014010434640023631 0ustar wouterwouter; Test ipsecmod-ignore-bogus option ; config options ; The island of trust is at example.com server: trust-anchor: "example.com. IN DS 48069 8 2 fce2bcb0d88b828064faad58e935ca2e32ff0bbd8bd8407a8f344d8f8e8c438a" val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" # test that default value of harden-dnssec-stripped is still yes. fake-sha1: yes trust-anchor-signaling: no access-control: 127.0.0.1 allow_snoop module-config: "ipsecmod validator iterator" ; ../../ is there because the test runs from testdata/03-testbound.dir ipsecmod-hook: "../../testdata/ipsecmod_hook.sh" ipsecmod-strict: no ipsecmod-max-ttl: 200 ipsecmod-ignore-bogus: yes qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test ipsecmod-ignore-bogus option ; Scenario overview: ; - query for example.com. IN A ; - check that query for example.com. IN IPSECKEY is generated ; - check that we get an answer for example.com. IN A with the correct TTL ; - check that the get the same answer from cache ; - check that we don't get the IPSECKEY answer from cache (bogus) ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 86400 IN SOA ns.example.com. example.com. 2002022401 10800 15 604800 10800 example.com. 86400 IN RRSIG SOA 8 2 86400 20170609142855 20170512142855 48069 example.com. fr6oVOsRMnm3D8N01LxzPvT9lWdNDhTlmwR1co42c3H2ra1EjbbKqkLcrXQAsq7E/ddzqgL3RnYS+3USojXycI1xhjXC8YT2xsW3uH8uTY1Qvk1K75lu1OXmDiU6wvHplFowl0OX7sx76lB1itbvsau4bMPMt03sf4u8po7V35s= ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 example.com. 3600 IN RRSIG A 8 2 3600 20170609142855 20170512142855 48069 example.com. Qviw6w8ReMG2WZxenvzj/YwoeM3Ln59Fnw6s1MRWGsD2yA3+y0loFdUEHZdRhrEiV0kvtQGC+kBhMuSMq/cyjprbKLw5pkS9+MMDDnVPP1PQb17LY4NIxPtq710AN1sjhBK6PVa6XN+3ciUmCcLs1ESviQkVKpgAY/QlV0TaarQ= SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END ; response to IPSECKEY query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN IPSECKEY SECTION ANSWER example.com. 3600 IN IPSECKEY 10 0 2 . AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== ;(correct answer) example.com. 3600 IN RRSIG IPSECKEY 8 2 3600 20170609144114 20170512144114 48069 example.com. UqRbG6P8mWQEVt16j86cS6fqEN8c+5t8qtePr9ghRqIxeuPOCkLiSqmXQYcQbOeOK4YoWQ3gD2az2JMWQMxEKeBLpxXZbgZN+2uIZ9LLEkyYjGRulr9kameKTM1feSe31A9mR9IgMNrY/ZeUkfxC+8Q7s8avOqYH2jVMFUg9raE= ; (bogus answer) example.com. 3600 IN RRSIG IPSECKEY 8 2 3600 20170609144114 20170512144114 48069 example.com. Bogus6P8mWQEVt16j86cS6fqEN8c+5t8qtePr9ghRqIxeuPOCkLiSqmXQYcQbOeOK4YoWQ3gD2az2JMWQMxEKeBLpxXZbgZN+2uIZ9LLEkyYjGRulr9kameKTM1feSe31A9mR9IgMNrY/ZeUkfxC+8Q7s8avOqYH2jVMFUg9raE= SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 86400 IN DNSKEY 256 3 8 AwEAAddE7q1HL4Id+gpQ7imk+RyNEhCWgtew5tstsqIR/fXq0RBn0rF4SI1H6ysbb3nfqAV1xRDJ01ddpgfGyz9zXXHQ/H/9qEpeWapqfNTQ5GHHdxBL2iST7XusThfXEyX/pouKIpvtknvtLs8tmH64dajxoJkaejU2EKXKaBaRKcYx ;{id = 48069 (zsk), size = 1024b} example.com. 86400 IN RRSIG DNSKEY 8 2 86400 20170609144114 20170512144114 48069 example.com. mJU3LnubfYW7vhksiC1STWbrSjCe6TG1kEpnk4jRrYovues6bzOTIFSXEMjPW1mikulapnx3nMtTWdrW2InjfP9wLV/u2Wx1Vu3s9uzli/27y//3DOkZSeBa5RZdKpC1h8UB5GAxq4MRiSidgEBB1qaDIaE29sWmn9kPHEgNcgI= SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20170609142855 20170512142855 48069 example.com. SYFM1dsPEly0PjdShX8EsRnpq6XTysrvUBWB+LjGaC0wn3RFd0A2TG3WhVkUxhjTzRjt9jn3rz+JUJyybrhBkYXjBeBBjLep6Le7PQSct+FFDTIuX8duixfOzEN5LSYRMUnSuAq/z0LJHUB6nqTw8XWRm6EIImdEBc6D0u1KSes= SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 3 3600 20170609142855 20170512142855 48069 example.com. kK5LZnGi2VmVmKUXkVenYCQMHGqwhGaEOwjwVG9ScOVzvqNA+n7KWwxdLDsIVLgr/BjR9Cj9+HYB9hYMhk+LnsbHqf5ovY3+n7CV4v3MDWJBLYt7NHvXwoywbaD71w7koo0SUiBXMB/FyuxRj6BXEk4dlGh7mgHZXE+X/gCYxsM= ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION example.com. IN IPSECKEY ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 200 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Query without RD, check if cached and with correct TTL STEP 11 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 200 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Query without RD, check if IPSECKEY is not cached STEP 21 QUERY ENTRY_BEGIN SECTION QUESTION example.com. IN IPSECKEY ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA SERVFAIL SECTION QUESTION example.com. IN IPSECKEY ENTRY_END SCENARIO_END unbound-1.13.1/testdata/stop_nxdomain.rpl0000644000175000017500000000523514010434640020116 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" harden-below-nxdomain: yes trust-anchor: ". IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3" val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test stop cache search on nxdomain ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN DNSKEY SECTION ANSWER . 3600 IN DNSKEY 257 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30900 (ksk), size = 512b} . 3600 IN RRSIG DNSKEY 5 0 3600 20070926134150 20070829134150 30900 . BlVcSh8xSgm7ne+XVCJwNHQKjk5kTJgG4Fa3sOSfp3YUjb2YclmVWyIw7XEHl0/C6CN5gdy18idnM6vT6Hy42A== ;{id = 30900} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION example.local. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400 . 86400 IN RRSIG SOA 5 0 86400 20070926134150 20070829134150 30900 . bOYbFZZp7vWWC2oxV+kph+YXjoQj2f6QJktlgmzRI7oReFX9jy/LibTPQi/sW0SGHpLaj3G5p4IfIlBibne4DA== ;{id = 30900} . 86400 IN NSEC ac. NS SOA RRSIG NSEC DNSKEY . 86400 IN RRSIG NSEC 5 0 86400 20070926134150 20070829134150 30900 . U+/m5+FmczzkosEx1aTP7MK/F3PpcKWct8CzM1jhjwNe2RlnW7qFe0IH8SLzD/elvxDTQMpJSMlKOhUUdapB8g== ;{id = 30900} lk. 86400 IN NSEC lr. NS DS RRSIG NSEC lk. 86400 IN RRSIG NSEC 5 1 86400 20070926134150 20070829134150 30900 . j6Pw5Eu9vGHDJcckTSWa8YD1b7FV7c/Z8aVkLfJCH+iPcaa40/LSp784+t2PnAAXL8fgriNL6jF/ve1rti3ANQ== ;{id = 30900} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.local. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION example.local. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400 ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION foo.example.local. IN A ENTRY_END ; this query does not get sent to K-ROOT. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION foo.example.local. IN A SECTION AUTHORITY . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2010111601 1800 900 604800 86400 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_resolve_minimised.rpl0000644000175000017500000000537214010434640021776 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test basic iterative qname minimised resolve of www.example.com. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA ::123 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION com. IN A ENTRY_END STEP 30 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION example.com. IN A ENTRY_END STEP 40 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 50 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA ::123 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/stub_udp.tdir/0000755000175000017500000000000014010434640017276 5ustar wouterwouterunbound-1.13.1/testdata/stub_udp.tdir/stub_udp.conf0000644000175000017500000000050414010434640021771 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no stub-zone: name: "example.com" stub-addr: "127.0.0.1@@TOPORT@" # a k a root hints stub-zone: name: "." stub-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/stub_udp.tdir/stub_udp.test0000644000175000017500000000144214010434640022025 0ustar wouterwouter# #-- stub_udp.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi # check delegations from cache by doing second test echo "> dig mail.example.com." dig @127.0.0.1 -p $UNBOUND_PORT mail.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.66" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/stub_udp.tdir/stub_udp.testns0000644000175000017500000000133414010434640022366 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 SECTION AUTHORITY @ IN NS ns.example.com. SECTION ADDITIONAL ns IN A 127.0.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION mail IN A SECTION ANSWER mail IN A 10.20.30.66 SECTION AUTHORITY @ IN NS ns.example.com. SECTION ADDITIONAL ns IN A 127.0.0.1 ENTRY_END ; root prime ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION . IN NS SECTION ANSWER . IN NS root.server. SECTION AUTHORITY SECTION ADDITIONAL root.server. IN A 127.0.0.1 ENTRY_END unbound-1.13.1/testdata/stub_udp.tdir/stub_udp.post0000644000175000017500000000045114010434640022032 0ustar wouterwouter# #-- stub_udp.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/stub_udp.tdir/stub_udp.dsc0000644000175000017500000000044314010434640021617 0ustar wouterwouterBaseName: stub_udp Version: 1.0 Description: Stub server contacted via UDP. CreationDate: Tue Sep 30 15:10:00 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: stub_udp.pre Post: stub_udp.post Test: stub_udp.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/stub_udp.tdir/stub_udp.pre0000644000175000017500000000167714010434640021646 0ustar wouterwouter# #-- stub_udp.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT stub_udp.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stub_udp.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test # wait for forwarder to come up wait_ldns_testns_up fwd.log # wait for unbound to come up wait_unbound_up unbound.log unbound-1.13.1/testdata/Kexample.com.+003+02854.key0000644000175000017500000000054214010434640020600 0ustar wouterwouterexample.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} unbound-1.13.1/testdata/ttl_msg.rpl0000644000175000017500000002215114010434640016701 0ustar wouterwouter; config options ; fetch all extra targets - we want to trigger a lookup in cache server: target-fetch-policy: "-1 -1 -1 -1 -1" qname-minimisation: "no" access-control: 127.0.0.1 allow_snoop stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test TTL countdown on messages in the cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION foo.com. IN A SECTION AUTHORITY foo.com. IN NS ns.foo.com. ;foo.com. IN NS nx1.example.com. SECTION ADDITIONAL ns.foo.com. IN A 1.2.5.6 ENTRY_END RANGE_END ; ns.foo.com RANGE_BEGIN 0 100 ADDRESS 1.2.5.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION foo.com. IN NS SECTION ANSWER foo.com. IN NS ns.foo.com. ;foo.com. IN NS nx1.example.com. SECTION ADDITIONAL ns.foo.com. IN A 1.2.5.6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.foo.com. IN A SECTION ANSWER ;www.foo.com. IN A 1.2.5.6 www.foo.com. IN CNAME nx1.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.foo.com. IN A SECTION ANSWER ns.foo.com. IN A 1.2.5.6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.foo.com. IN AAAA SECTION AUTHORITY foo.com. IN SOA . . 1 2 3 4 3600 ENTRY_END RANGE_END ; ns.example.com. --- serial=15 RANGE_BEGIN 0 20 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION nx2.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.com. --- serial=17 RANGE_BEGIN 20 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 17 28800 7200 604800 10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 17 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION nx2.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 17 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END RANGE_END ; start by passing time ; so we are not at 0 STEP 1 TIME_PASSES ELAPSE 10 ; query for NXDOMAIN STEP 8 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION nx1.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN CD SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END ; wait for 5 seconds STEP 20 TIME_PASSES ELAPSE 5 ; do a lookup for nx1.example.com just to check TTLs... STEP 25 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION nx1.example.com. IN A ENTRY_END STEP 26 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN CD SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 5 IN SOA . . 15 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END ; cause a lookup that refreshes the TTL on the SOA record STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx2.example.com. IN A ENTRY_END STEP 31 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION nx2.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 17 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END ; do a lookup for nx1.example.com to check TTLs updated STEP 35 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION nx1.example.com. IN A ENTRY_END STEP 36 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN CD SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 17 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END ; cause a lookup for nx1.example.com bypassing the cache. ; with bug; this causes msg ttl for nx1 to be time(NOW)+ttl. ; so 15+5 = 20 ; visiable in debug log as "msg ttl is %d" STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.foo.com. IN A ENTRY_END STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION www.foo.com. IN A SECTION ANSWER ;www.foo.com IN A 1.2.5.6 www.foo.com IN CNAME nx1.example.com. SECTION AUTHORITY example.com. 10 IN SOA . . 17 28800 7200 604800 10 ENTRY_END ; now cause lookup from cache by not passing CD flag ; (validator has a look, and stores after iterator cache lookup). STEP 45 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx1.example.com. IN A ENTRY_END STEP 46 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 10 IN SOA . . 17 28800 7200 604800 10 SECTION ADDITIONAL ENTRY_END ; the message should timeout in 5 seconds, wait 7 STEP 50 TIME_PASSES ELAPSE 7 ; it is still there? (nonRD query) STEP 55 QUERY ENTRY_BEGIN REPLY SECTION QUESTION nx1.example.com. IN A ENTRY_END ; this answer is the bug - NXDOMAIN too long in the cache. ;STEP 56 CHECK_ANSWER ;ENTRY_BEGIN ;MATCH all ttl ;REPLY QR RA NXDOMAIN ;SECTION QUESTION ;nx1.example.com. IN A ;SECTION ANSWER ;SECTION AUTHORITY ;example.com. 3 IN SOA . . 17 28800 7200 604800 10 ;SECTION ADDITIONAL ;ENTRY_END ; Now the correct answer: no such cached query. STEP 56 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA NOERROR SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_qds_oneanc.rpl0000644000175000017500000002000414010434640020177 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with DS query and one anchor ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to DS query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_cname_nx.rpl0000644000175000017500000000532214010434640020044 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test cname followed by nxdomain reply rcode. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.next.com. IN A SECTION AUTHORITY next.com. IN NS ns.next.com. SECTION ADDITIONAL ns.next.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.next.com. SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.next.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION www.next.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION next.com. IN NS SECTION ANSWER next.com. IN NS ns.next.com. SECTION ADDITIONAL ns.next.com. IN A 1.2.3.5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.next.com. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_sigs.ed255190000644000175000017500000000121614010434640017434 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ENTRY_BEGIN SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 15 +sZnc8HII6xxA9Ili5bboiKH0Ipv/Ap1aucIt/CVF2M= ;{id = 57147 (zsk), size = 256b} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.0.0.1 www.example.com. 3600 IN RRSIG A 15 3 3600 20170627103620 20170530103620 57147 example.com. daYG6zZJ3BJwGOS4PC0tDnxssVNYoenOHocoIfx0GeXNkKHSyXF+XHgD5LKbG3ZN0dZJ/4To5eni9QXOXiR4CA== ENTRY_END unbound-1.13.1/testdata/05-asynclook.tdir/0000755000175000017500000000000014010434640017675 5ustar wouterwouterunbound-1.13.1/testdata/05-asynclook.tdir/05-asynclook.post0000644000175000017500000000043014010434640023025 0ustar wouterwouter# #-- 05-asynclook.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID unbound-1.13.1/testdata/05-asynclook.tdir/05-asynclook.pre0000644000175000017500000000102214010434640022624 0ustar wouterwouter# #-- 05-asynclook.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 FWD_PORT=$(($RND_PORT + 1)) echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT 05-asynclook.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log unbound-1.13.1/testdata/05-asynclook.tdir/05-asynclook.test0000644000175000017500000001077714010434640023036 0ustar wouterwouter# #-- 05-asynclook.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # test if fwder is up echo "> dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile" dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile if grep "10.20.30.40" outfile; then echo "fwder is up" else cat fwd.log echo "fwder not up" exit 1 fi rm outfile # create asynclook get_make echo "> (cd $PRE ; $MAKE asynclook)" (cd $PRE ; $MAKE asynclook) if test ! -x $PRE/asynclook; then echo "cannot build asynclook test program" exit 1 fi (cd $PRE ; $MAKE lock-verify) # check the locks. function locktest() { if test -x $PRE/lock-verify -a -f ublocktrace.0; then $PRE/lock-verify ublocktrace.* if test $? -ne 0; then echo "lock-verify error" exit 1 fi fi } # detect if there is forking on this system. HAVE_FORK=yes if grep "undef HAVE_FORK" $PRE/config.h >/dev/null 2>&1; then HAVE_FORK=no fi if test $HAVE_FORK = yes; then # test hosts reading (directed at local auth info) echo '> $PRE/asynclook -H 05-asynclook.hosts virtual.virtual.virtual.local 2>&1 | tee outfile' $PRE/asynclook -H 05-asynclook.hosts virtual.virtual.virtual.local 2>&1 | tee outfile if grep "virtual.virtual.virtual.local: 10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi locktest rm outfile # test async lookups (directed at testns) echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile' $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile fi #HAVE_FORK echo '> $PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile if test $HAVE_FORK = yes; then # test cancellation echo '> $PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile fi #HAVE_FORK echo '> $PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: cancelled" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile if test $HAVE_FORK = yes; then # test blocking mode echo '> $PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile fi #HAVE_FORK echo '> $PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' $PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile if grep "www.example.com: 10.20.30.40" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi if grep "www2.example.com: 10.20.30.42" outfile; then echo "OK" else cat fwd.log echo "Not OK" exit 1 fi locktest rm outfile echo "> cat logfiles" cat fwd.log exit 0 unbound-1.13.1/testdata/05-asynclook.tdir/05-asynclook.testns0000644000175000017500000000077414010434640023373 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ; for priming query ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION @ IN NS SECTION ANSWER @ IN NS 127.0.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/05-asynclook.tdir/05-asynclook.dsc0000644000175000017500000000046614010434640022622 0ustar wouterwouterBaseName: 05-asynclook Version: 1.0 Description: Test async lookup using libunbound CreationDate: Fri Jan 25 09:50:35 CET 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: 05-asynclook.pre Post: 05-asynclook.post Test: 05-asynclook.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/05-asynclook.tdir/05-asynclook.hosts0000644000175000017500000000070114010434640023201 0ustar wouterwouter# Host Database # # This file should contain the addresses and aliases for local hosts that # share this file. Replace 'my.domain' below with the domainname of your # machine. # ::1 localhost localhost.my.domain 127.0.0.1 localhost localhost.my.domain # Imaginary network. 10.0.0.2 myname.my.domain myname 10.0.0.3 myfriend.my.domain myfriend 10.20.30.40 virtual.virtual.virtual.local unbound-1.13.1/testdata/Kexample.com.+012+60385.key0000644000175000017500000000023714010434640020604 0ustar wouterwouterexample.com. 3600 IN DNSKEY 256 3 12 9SZY+xB3wKtrLoRHzkBs9L3fjcvazjnk5HF3gMaD1PVp4pthrwgHIm0TUaLrd3YCa2VCl5wj+MzbhZi8NEJ/Cg== ;{id = 60385 (zsk), size = 512b} unbound-1.13.1/testdata/nsid_hex.rpl0000644000175000017500000000154214010434640017032 0ustar wouterwouter; config options server: nsid: "0123456789abcdef" stub-zone: name: "example." stub-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test EDNS string tag option RANGE_BEGIN 0 1000 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN A SECTION ANSWER example. IN A 198.51.100.1 SECTION ADDITIONAL ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 03 ; Opcode NSID (3) 00 00 ; Length 0 HEX_EDNSDATA_END ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION example. IN A SECTION ANSWER example. IN A 198.51.100.1 SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 03 ; Opcode NSID (3) 00 08 ; Length 8 01 23 45 67 ; 89 ab cd ef ; HEX_EDNSDATA_END ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_qds_twoanc.rpl0000644000175000017500000002017714010434640020242 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with DS query and two anchors ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to DS query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_packets.60000644000175000017500000002011214010434640017264 0ustar wouterwouter; test packets for unit test ;-- next packet -- ; test packet from nlnetlabs.nl ANY +dnssec last SRV has RRSIG first. 63578490000100190000000D096E6C6E65746C616273026E6C0000FF0001C00C00060001000151800028046F70656EC00C0A686F73746D6173746572C00C77A1A1BB0000708000001C2000093A8000004650C00C002E000100000E1000A00030050200000E1046E6941D46C1AA1D4706096E6C6E65746C616273026E6C00066B3C47EA4915422B5D312C4221165E01BAA2578D947B0485E01336C355EC4ED3A98BBB7BDDEE50F1DD9CB6D0F535AECB7FC1FD2ED465A416245D69652B6A5D85A441618575ACE9E8DF7EB7E8FE887CD5932D5BEB4DA166DDAA6124F7FD4115C4F0A0534E938C7DE9E77E5C37DC43E279F39C6CD893EA788E39958785C53BEDC070002E000100000E1001200030050200000E1046E6941D46C1AA1D9003096E6C6E65746C616273026E6C00B7AEBD8B1306D263E891326B3C92177676BF25E7795B837532591333E214C04096B7E420CC18C797B81F0A3FA577C364A7D4D36A1284723B3DA04CD120F94A4F07EF98FDBA07A44012BDA0C18091F8AE8FA9F2EDB5F6203664DF945FFCA8087B98823FEB0DC87470F9897A40E43D122A3C4717AF728DC7AE08B3A7CC2F56B7F7B0F9261F9DDC61A30DC06D8B73C8CE1EC2DD011034DB5AABA0A738426014BE076BB7015BA269EED5D9A9BCFEF8767A0D7B09644C50476C2EF49C10A138077EC3BDB2D75DB8AE64E766C855D108F374FD22063564A9B6 1254931B60E0572F4CC42874387E9063748F0C828A27C85BE31183CF6F97739EAD719415FD8DD506E074C11C002E000100000E1000A00030050200000E1046E6941D46C1AA1DAB0F096E6C6E65746C616273026E6C0065258E476A661AF6EB0C7B3FB6511A9E8D96C0D86B9563DD0BD3A3FE751F25CE324AB06F7FB00584C82CC4CB293B9321A890194B0ECF1953A202FF0A172E5028D1476D0F854E0D6F14E529329ED991E5CCEE57E0D96C6E74D6F4D58823B978FAF56221F0A8DFB295E50CD20CC70A8812D5CABD6D8C02966D3FBF414F0236DE8CC2480030000100000E100086010003050103A96D8AD435A850015E7FC13089F7FC1B48CFDE57E37E8D864032620A9FA405DD9E7B07ABA981C8D51C43B216403761C22DE45CFE5AAA1D0AB0019F8A9285DEAA25847C88FDD2E9F8CDE8F569963323AE1B29FFAC95737D02E9CECFD9BFE6816662E62602E7A9647A00ECD1519F016E479A8B0A8D056860C8CEB4DA3717E30643C2480030000100000E100106010103050103BA4ED88EABBB996BCC07AD0354193DD95EE75A1A39DB76E527C8BC3D5B088311DF15CB5028E0554AEF1A84005A3817980E91D1ABE98ED7CF417E6797B501A425BE10618EE8EF2213D9E4422E34690651B45360B8555F938950731876B5E918F7721BE5754C14E6C49FFE3A651D916893D89EB0E57529498441FA9D2463019FEEEC4F3BF70336 9EBB7C82EDC75F9D76E4B7D01ED0CA038AF9FECF78064371D068DAAB32E6B9C1B0FB0B85B129769585B3658F4D5A34206600111DE71BA599A6D8AAF0E6006F52B6D8AF22FA3F3E843C2F3510CC8D679531E6C16576CD406930B06809B08B1AA067D5393DD675E2710EEF46A8E0CCFFF9B06714EF3BB4AD6CE86DC2480030000100000E100086010103050103F3CD358CCFCA925884257D19CF724C7606256691537A2CFBA93B799BCFB1612D29E6DBA9FA886F4D2DBCBDEC98B8E77696658DCCE7FC49052392DAF5AD728DADF02D3EC5E3B56DCFDDE994F2DF60C7721A56EAB0C7D6FA7CE8B97E85AD2D9B0CB2F503FBCB66D5C39CD26C50AB79F93CA8250181F1E6F5B1F3306D54058B4421C248002E00010000025800A0002305020000025846E6941D46C1AA1D4706096E6C6E65746C616273026E6C006F0EFD5F3606CDC8501772579B48A24A3522EB2E05A6908BFC9329A63AE2D31640F05B5D26A5ED591A789A705FC54A8D61AB08399F75DCB51380CE647D078670D8330DB2F58517FC74CEF1F9636759C188B8D6FCDE3844411A1F24DA06E371DF17C70F897D1AC23EEFC1CE720E365EF4F4B852BBD25152FB0AEEAEDE0F622A58C52A00230001000002580027001400000173075349502B44325500045F736970045F756470096E6C6E65746C616273026E6C00C5DD002E00010001518000A0001C05020001518046 E6941D46C1AA1D4706096E6C6E65746C616273026E6C00816A6DF6B45D28B9EFEDA508223F84B8EA9FDBC1122D6758E1DC9BF1379B0DE7305AF63A978EF6B4EB6920083B82A30D24A119C233905F24CFC3EB29782C650FE87699D8CAD2AFF98A790A936F11E29F44D9C0F3A5A4986475DC637AC42018A3377313BE8A3A2C59E67A0B390A4AE9647FCA295A0BE6891B616BB274AB3662C4C609001C0001000151800010200107B8020600010000000000000001C609002E00010001518000A0001005020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C0084B11D5C675C84EFF41B5E672E297B4B7171FCF14092236ADC7B356ED4A9A67997A4F4B666C36873EDF3A800BEB4274C4277C408917621F8D380C3A3726FCBA82FF8ED46E5F07DE5AE936993640A62A3F2D2C26EB1DE93E56DE1A277128A442D7AFDEFD264856C35AD59A06A8E881B2CB7205E79805A59B2ACE1A15EDF151338C6D10010000100015180001A19537469636874696E67204E4C6E6574204C616273207A6F6E65C6D1002E00010001518000A0000F05020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C0032FBD313E442240AD077248B87DB4CA1B8BB8AEC94B2E815293DDC93093E10E29D1920BCBF2F84244DD58FB9707C6380D171DDB1B39239305C6FDA81E0AFA8E59C4596D3774CB4939B80CA9473558D AA3CB31FD2E8D756F425A80CDA9EDB48A9547582F998D363D8D64E45E65EFECA8BD11B3036D2B8B1DFF0FFD0F703CE7BB6C7A3000F00010001518000040032C02AC7A3000F00010001518000110064056F6D76616C067465646E6574C7ADC7A3002E00010001518000A0000605020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C0087059806E37D4CFEC617C733F1841B9EB5DBA3F02E7E105E9D23A9998C34F276FE032A83758FA6B4D30A540BCCB0D82AAA1903C8CDF34377712556B08A227613F40FB3A129B6205B16A377227EE682ED9D6F22069BFA24E50FD485C525DE6D1813B056F9AEF2C0CE408BBA7A3E8D9347AA648849B7896275BE6D7EC443B6E1A0C87C002E00010001518000A0000205020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C007588829ABDACCB921070102946174422ECB1057BF9B1DF3A6A179FB03E7CA698C967FDD34EF0973142B6471B161981B0BF9EE066608744D8A60EDC873EFC8461E055915D924BC2FEBCF5DC22D1468EAD2C27D167112FEC0F3C079A91F279EC0925CE54F2AD1EA280D973584633DE119D32F16EAAD012A052D6C66690799AD1D4C92800020001000151800002C02AC92800020001000151800016036E73370F646F6D61696E2D7265676973747279C932C92800020001000151800002C84FC928002E00010001518000A0 000105020001518046E6941D46C1AA1D4706096E6C6E65746C616273026E6C004A8FDD14D1F4655452A6C5A9321434B9A4FC73C1D63E7D30030D716AC1ABBB37E208319F2A80111D211EE6D8A47FF4084401353FD65B2F50CB6D3EC0C9593CFA53630E75AAEB483C70E9B5B754B5EAD88DDCC2B0EE8D9BA4BAC3F8643BE12A3BD9CE6051BDDE14C46CE9608B935F004C0828ECF0C7958E272F71F67DE8DDDE72CA1200010001000151800004D59AE001CA12002E00010000465000A0002F05020000465046E6941D46C1AA1D4706096E6C6E65746C616273026E6C000E85A6563F289CC81E360B46EC09C30D0B16B3E7C75DB01C6F7544594425237D38D02FCC3C304F904DE3617D195BBA1F0642C2906E1F91C8D4CC7E34903837607AC1FEE5A9F1AA22596EDEC40AAD323EC8F9845F2A17C94F266C0F30E604E1C6A38124EA2A5F87E3522A7E100E4A2B85059FDF9C2716DAC5D735CE111237F395CACE002F0001000046500021045F736970045F756470096E6C6E65746C616273026E6C00000762018008100380066A6F686E6E79CB7200010001000002580004D59AE02CC02A00010001000002580004D59AE001C02A001C0001000002580010200107B8020600010000000000000001C02A001C0001000002580010200107B8020600010000000000000053C84F00010001000070800004D59AE011C84F001C00010000 70800010200107B802060001020039FFFE59B187C9D0000100010000FE8B00043E0456E6CB68002E00010000025800A0002105040000025846E6941D46C1AA1D4706096E6C6E65746C616273026E6C0098CEBAD0E8783AE7234B216005CD368086EAE5879C25181A0FF4533F5FE60D5E818D6B10AA5D96D57B9648CD1A530184D128AD1F04BF03316563383A85BF22F8E0E8E2551F419BEFBE849B2C6510A4471D7A285DD071511AF1AEB555A2DDBEDFE535717C1384FA130CEAC5EE86B07A61FAB69C3CEA143FC6AE5006D2152E9CFDCB89002E00010000025800A0000105030000025846E6941C46C1AA1C4706096E6C6E65746C616273026E6C00432C065713ABF3D8C9C40E1A46EF6FE49F2060689C281BACDDC98ECD06F3D354D77B2216E4EE408D080F9DF86F0F1C427B772D32EDCEE989B2AC8D76615E59E6FD11A1A963D5CEEB40F05C04CC4752A7308739B3C6C9C06A92D65522AB674AD2C27DC5DAC91044DE85A5D8126E170E515C52A642F51FB24323DEE893AF9995DCC02A002E00010000025800A0000105030000025846E6941C46C1AA1C4706096E6C6E65746C616273026E6C000EBC0704DD6A076244351A27EE61E35EA294A2E6726C919E8BF33BDF7DC97913FE54C1EAAE26624C3F852C77BA1356AF771C3AC6636A3C23DE82AB03FE9F72515E6289D18779083006FE38152773E0AD6A3E9831006B9EA6 490EEAFE1359AC9FF23F1189E303B838C5D4F3BBDE4FDFC531F1B1095E8BB301F5F8F17C2F20B526C02A002E00010000025800A0001C05030000025846E6941C46C1AA1C4706096E6C6E65746C616273026E6C006D9C956476F8A04DE789F4439DFFB289AED649EC80320B0A68AE004FD5B39D5F3A955B18AB2DB535662B624FC36ECCBAEC421C7C3D3C2E67ADE6B284AE424974BF24CFAC9A6C3AF9541E70C4D4B8F196419D34C7686D5D95693C4C75B560E543BAED77EF343C1D14F0C5CC842757ABC86B6EC9A8C41F38AEF12B9E7886B1251ECB680021000100000258001B0000000013C4066A6F686E6E79096E6C6E65746C616273026E6C000000291000000080000000 ;-- next packet -- ; this packet contains a SOA record, the ; comrite.com. 86400 IN SOA ns15.domaincontrol.com. dns.jomax.net. 2006092800 28800 7200 604800 86400 ; with dns.jomax.net. having its root label compressed 0xc040. 00588400000100000001000007 636F6D7269746503636F6D00001C0001C00C0006000100015180003C046E7331350D646F6D61696E 636F6E74726F6C03636F6D0003646E73056A6F6D6178036E6574C04077928C000000708000001C20 00093A8000015180 unbound-1.13.1/testdata/tcp_idle_timeout.tdir/0000755000175000017500000000000014010434640021002 5ustar wouterwouterunbound-1.13.1/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.conf0000644000175000017500000000041614010434640025203 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no tcp-idle-timeout: 2000 forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.test0000644000175000017500000000265114010434640025240 0ustar wouterwouter# #-- tcp_idle_timeout.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test # Run up unbound with a 2s idle timeout. Try a normal TCP query, check it works, and then check that a connection with a 4s send delay fails. if uname | grep MINGW >/dev/null; then echo "no job control in shell on windows. end test" exit 0 fi PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # first test a single TCP query with no delay. echo "> query www.example.com." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN >outfile 2>&1 if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "exit status OK" fi echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi # now test query with delay should fail. echo "> query www.example.com." $PRE/streamtcp -d 4 -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN >outfile 2>&1 if test "$?" -eq 0; then echo "exit status OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "exit status not OK" fi echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "OK" exit 0 unbound-1.13.1/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.post0000644000175000017500000000046114010434640025243 0ustar wouterwouter# #-- tcp_idle_timeout.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.dsc0000644000175000017500000000047114010434640025030 0ustar wouterwouterBaseName: tcp_idle_timeout Version: 1.0 Description: Test tcp-idle-timeout setting. CreationDate: Thu Jul 12 13:55:00 BST 2018 Maintainer: dr. J. Hague Category: Component: CmdDepends: Depends: Help: Pre: tcp_idle_timeout.pre Post: tcp_idle_timeout.post Test: tcp_idle_timeout.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.testns0000644000175000017500000000114714010434640025600 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH UDP opcode qtype qname REPLY QR AA NOERROR TC ADJUST copy_id SECTION QUESTION www IN A ENTRY_END ENTRY_BEGIN MATCH TCP opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END unbound-1.13.1/testdata/tcp_idle_timeout.tdir/tcp_idle_timeout.pre0000644000175000017500000000162714010434640025051 0ustar wouterwouter# #-- tcp_idle_timeout.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT tcp_idle_timeout.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_idle_timeout.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/val_nodata_failsig.rpl0000644000175000017500000001136614010434640021044 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata response with bogus RRSIG ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; Denies A, note this is the end of the NSEC chain. ; this RRSIG is failed, we set to 0 base64 data to make this easy to detect www.example.com. IN NSEC example.com. RRSIG NSEC ;www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDA8yqBITvLruoQjn/eqjYjwCwySAhUAk5/f3H1HKMsvM+spmmswwFtndyY= ;{id = 2854} www.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. ; Denies wildcard example.com. IN NSEC ns.example.com. NS SOA RRSIG NSEC DNSKEY example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFGlz/gvGdVxEo3Kpr+MijEGCZgwaAhRU7qbF13vmCVgR8dFw7LQFKopV6w== ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b5_wcnodata_noce.rpl0000644000175000017500000001100614010434640022354 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata, without ce. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR that matches the closest encloser (w.example) ;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h ;k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi ) ;k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== ) ;; NSEC3 RR that covers the "next closer" name (z.w.example) ;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03 q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) ;; NSEC3 RR that matches a wildcard at the closest encloser. ;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG ) r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== ) SECTION ADDITIONAL ENTRY_END ; catch glue queries ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN A SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN AAAA SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.z.w.example. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/padding.tdir/0000755000175000017500000000000014010434640017057 5ustar wouterwouterunbound-1.13.1/testdata/padding.tdir/padding.post0000644000175000017500000000120514010434640021372 0ustar wouterwouter# #-- padding.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill_pid `cat unbound2.pid` if test -f unbound2.log; then echo ">>> upstream log" cat unbound2.log fi #kill_pid $UNBOUND_PID kill_pid `cat unbound.pid` if test -f unbound.log; then echo ">>> unbound log" cat unbound.log fi unbound-1.13.1/testdata/padding.tdir/padding.dsc0000644000175000017500000000045014010434640021157 0ustar wouterwouterBaseName: padding Version: 1.0 Description: Test EDNS0 padding option (RFC7830 and RFC8467). CreationDate: Sun Jan 24 16:41:42 CET 2021 Maintainer: Willem Toorop Category: Component: CmdDepends: Depends: Help: Pre: padding.pre Post: padding.post Test: padding.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/padding.tdir/unbound_server.key0000644000175000017500000000463314010434640022637 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/padding.tdir/padding.testns0000644000175000017500000000255514010434640021736 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION txt IN TXT SECTION ANSWER txt IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION fin IN TXT SECTION ANSWER fin IN TXT "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." "fini" ENTRY_END unbound-1.13.1/testdata/padding.tdir/unbound_server.pem0000644000175000017500000000246614010434640022632 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/padding.tdir/unbound_control.pem0000644000175000017500000000247614010434640023005 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/padding.tdir/padding.test0000644000175000017500000001404014010434640021365 0ustar wouterwouterecho There we go... # #-- padding.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi echo "> query www.example.com. A" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi echo "> wait for log to happen on timer" sleep 3 echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> query txt.example.com. TXT" dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile echo "> check answer" if grep "Lorem ipsum" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound2.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "txt.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "txt.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> flush cache entries." $PRE/unbound-control -c ub.conf flush_type www.example.com A $PRE/unbound-control -c ub.conf flush_type txt.example.com TXT echo "> disable padding of responses." $PRE/unbound-control -c ub2.conf set_option pad-responses: no echo "> query www.example.com. A" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> query txt.example.com. TXT" dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile echo "> flush cache entries." $PRE/unbound-control -c ub.conf flush_type www.example.com A $PRE/unbound-control -c ub.conf flush_type txt.example.com TXT echo "> enable padding of responses." $PRE/unbound-control -c ub2.conf set_option pad-responses: yes echo "> set pad responses block size to 64" $PRE/unbound-control -c ub2.conf set_option pad-responses-block-size: 64 echo "> disable padding of queries." $PRE/unbound-control -c ub.conf set_option pad-queries: no echo "> query www.example.com. A" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> query txt.example.com. TXT" dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile echo "> flush cache entries." $PRE/unbound-control -c ub.conf flush_type www.example.com A $PRE/unbound-control -c ub.conf flush_type txt.example.com TXT echo "> enable padding of queries." $PRE/unbound-control -c ub.conf set_option pad-queries: yes echo "> set pad queries block size to 48" $PRE/unbound-control -c ub.conf set_option pad-queries-block-size: 48 echo "> query www.example.com. A" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> query txt.example.com. TXT" dig @127.0.0.1 -p $UNBOUND_PORT txt.example.com. TXT | tee outfile echo "> flush cache entries." $PRE/unbound-control -c ub.conf flush_type www.example.com A $PRE/unbound-control -c ub.conf flush_type txt.example.com TXT echo "> set pad responses block size to 512" $PRE/unbound-control -c ub2.conf set_option pad-responses-block-size: 512 echo "> query www.example.com. A" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> query fin.example.com. TXT" dig @127.0.0.1 -p $UNBOUND_PORT fin.example.com. TXT | tee outfile echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi if grep "fini" tap.log >/dev/null; then :; else sleep 1; fi if grep "fini" tap.log >/dev/null; then :; else sleep 10; fi if grep "fini" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi grep '^;; MSG SIZE rcvd: ' tap.log > message.sizes if diff message.sizes padding.msgsizes then echo "OK - Message sizes matched expected sizes" exit 0 else echo "unexpected message sizes" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi unbound-1.13.1/testdata/padding.tdir/padding.conf20000644000175000017500000000247614010434640021427 0ustar wouterwouter# this is the upstream server that has pipelining and responds to queries. server: verbosity: 1 # num-threads: 1 interface: 127.0.0.1@@PORT@ port: @PORT@ use-syslog: no directory: . pidfile: "unbound2.pid" chroot: "" username: "" do-not-query-localhost: no tls-port: @PORT@ tls-service-key: "unbound_server.key" tls-service-pem: "unbound_server.pem" tcp-idle-timeout: 10000 log-queries: yes log-replies: yes log-identity: "upstream" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT2@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: no dnstap-log-resolver-response-messages: no dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: no dnstap-log-forwarder-response-messages: no unbound-1.13.1/testdata/padding.tdir/padding.conf0000644000175000017500000000112014010434640021326 0ustar wouterwouterserver: interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no tls-cert-bundle: "unbound_server.pem" tls-upstream: yes remote-control: control-enable: yes control-interface: 127.0.0.1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@#unbound" unbound-1.13.1/testdata/padding.tdir/unbound_control.key0000644000175000017500000000462714010434640023014 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/padding.tdir/padding.msgsizes0000644000175000017500000000070314010434640022253 0ustar wouterwouter;; MSG SIZE rcvd: 128 ;; MSG SIZE rcvd: 468 ;; MSG SIZE rcvd: 128 ;; MSG SIZE rcvd: 936 ;; MSG SIZE rcvd: 128 ;; MSG SIZE rcvd: 60 ;; MSG SIZE rcvd: 128 ;; MSG SIZE rcvd: 502 ;; MSG SIZE rcvd: 44 ;; MSG SIZE rcvd: 60 ;; MSG SIZE rcvd: 44 ;; MSG SIZE rcvd: 502 ;; MSG SIZE rcvd: 48 ;; MSG SIZE rcvd: 64 ;; MSG SIZE rcvd: 48 ;; MSG SIZE rcvd: 512 ;; MSG SIZE rcvd: 48 ;; MSG SIZE rcvd: 512 ;; MSG SIZE rcvd: 48 ;; MSG SIZE rcvd: 512 unbound-1.13.1/testdata/padding.tdir/padding.pre0000644000175000017500000000476514010434640021211 0ustar wouterwouter# #-- padding.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 5 UNBOUND_PORT=$RND_PORT UPSTREAM_PORT=$(($RND_PORT + 1)) FWD_PORT=$(($RND_PORT + 2)) CONTROL_PORT=$(($RND_PORT + 3)) CONTROL_PORT2=$(($RND_PORT + 4)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "UPSTREAM_PORT=$UPSTREAM_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test echo "CONTROL_PORT2=$CONTROL_PORT2" >> .tpkg.var.test # start ldns-testnd get_ldns_testns $LDNS_TESTNS -p $FWD_PORT padding.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up and make the dnstap.socket file wait_server_up "tap.errlog" "creating unix socket" if test ! -S dnstap.socket; then echo "the dnstap.socket file does not exist!" fi # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$UPSTREAM_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < padding.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & #$PRE/unbound -d -c ub.conf 2>&1 | tee unbound.log & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test # make upstream config file sed -e 's/@PORT\@/'$UPSTREAM_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT2\@/'$CONTROL_PORT2'/' < padding.conf2 > ub2.conf # start upstream unbound in the background $PRE/unbound -d -c ub2.conf >unbound2.log 2>&1 & #$PRE/unbound -d -c ub2.conf 2>&1 | tee unbound2.log & UPSTREAM_PID=$! echo "UPSTREAM_PID=$UPSTREAM_PID" >> .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log wait_unbound_up unbound2.log cat .tpkg.var.test unbound-1.13.1/testdata/dnstap_tcp.tdir/0000755000175000017500000000000014010434640017610 5ustar wouterwouterunbound-1.13.1/testdata/dnstap_tcp.tdir/dnstap_tcp.conf0000644000175000017500000000210114010434640022610 0ustar wouterwouterserver: verbosity: 2 num-threads: 1 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-ip: "127.0.0.1@@TAPPORT@" dnstap-tls: no dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap_tcp.tdir/dnstap_tcp.dsc0000644000175000017500000000045114010434640022442 0ustar wouterwouterBaseName: dnstap_tcp Version: 1.0 Description: test dnstap tcp and reconnect CreationDate: Tue Feb 14 14:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap_tcp.pre Post: dnstap_tcp.post Test: dnstap_tcp.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnstap_tcp.tdir/dnstap_tcp.pre0000644000175000017500000000353514010434640022465 0ustar wouterwouter# #-- dnstap_tcp.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 4 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) TAP_PORT=$(($RND_PORT + 3)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap_tcp.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -s "127.0.0.1@$TAP_PORT" -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap.errlog" "start of service" # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tcp.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap_tcp.tdir/unbound_server.key0000644000175000017500000000463314010434640023370 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_tcp.tdir/unbound_server.pem0000644000175000017500000000246614010434640023363 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tcp.tdir/unbound_control.pem0000644000175000017500000000247614010434640023536 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tcp.tdir/dnstap_tcp.testns0000644000175000017500000000050314010434640023207 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dnstap_tcp.tdir/dnstap_tcp.post0000644000175000017500000000124014010434640022653 0ustar wouterwouter# #-- dnstap_tcp.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log echo "> tap logfiles" cat tap.log cat tap.errlog echo "> tap2 logfiles" if test -f tap2.log; then cat tap2.log; fi if test -f tap2.errlog; then cat tap2.errlog; fi cat fwd.log exit 0 unbound-1.13.1/testdata/dnstap_tcp.tdir/dnstap_tcp.test0000644000175000017500000000547214010434640022660 0ustar wouterwouter# #-- dnstap_tcp.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "" echo "> test disconnect from the upstream server" kill_pid $DNSTAP_SOCKET_PID dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. # bring log socket back up $PRE/unbound-dnstap-socket -s "127.0.0.1@$TAP_PORT" -l -vvvv 2>tap2.errlog >tap2.log & if test $? -ne 0; then echo "could not start (again) unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap2.errlog" "start of service" dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. sleep 2 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. for x in down up up2; do if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; else echo "$x.example.net. information not in tap2.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog echo "> tap2 logfiles" cat tap2.log cat tap2.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi done echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap_tcp.tdir/unbound_control.key0000644000175000017500000000462714010434640023545 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/fwd_capsid_white.tdir/0000755000175000017500000000000014010434640020754 5ustar wouterwouterunbound-1.13.1/testdata/fwd_capsid_white.tdir/fwd_capsid_white.conf0000644000175000017500000000052114010434640025124 0ustar wouterwouterserver: verbosity: 4 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no use-caps-for-id: yes caps-whitelist: "example.com" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" forward-addr: "127.0.0.1@@TOPORT2@" unbound-1.13.1/testdata/fwd_capsid_white.tdir/fwd_capsid_white.dsc0000644000175000017500000000051114010434640024747 0ustar wouterwouterBaseName: fwd_capsid_white Version: 1.0 Description: Forward and and test 0x20 whitelist. CreationDate: Fri 1 May 14:25:04 CEST 2015 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_capsid_white.pre Post: fwd_capsid_white.post Test: fwd_capsid_white.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns0000644000175000017500000000050514010434640025521 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION ; WEIRD CAPS! ; probably not the query! WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A SECTION ANSWER wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_capsid_white.tdir/fwd_capsid_white.test0000644000175000017500000000104514010434640025160 0ustar wouterwouter# #-- fwd_capsid_white.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT wwwabcdefghijklmnopqrstuvwxyzwww.example.com | tee outfile echo "> cat logfiles" cat fwd.log cat fwd2.log cat unbound.log echo "> check answer" if grep "10.20.30" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns20000644000175000017500000000055214010434640025605 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION ; WEIRD CAPS! ; probably not the query! WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A SECTION ANSWER wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.44 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END unbound-1.13.1/testdata/fwd_capsid_white.tdir/fwd_capsid_white.post0000644000175000017500000000050414010434640025165 0ustar wouterwouter# #-- fwd_capsid_white.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $FWD_PID2 kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_capsid_white.tdir/fwd_capsid_white.pre0000644000175000017500000000226214010434640024771 0ustar wouterwouter# #-- fwd_capsid_white.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) FWD2_PORT=$(($FWD_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "FWD2_PORT=$FWD2_PORT" >> .tpkg.var.test # start forwarder 1 get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_capsid_white.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start forwarder 2 $LDNS_TESTNS -p $FWD2_PORT fwd_capsid_white.testns2 >fwd2.log 2>&1 & FWD_PID2=$! echo "FWD_PID2=$FWD_PID2" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@TOPORT2\@/'$FWD2_PORT'/' < fwd_capsid_white.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_ldns_testns_up fwd2.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_two.rpl0000644000175000017500000000317114010434640016702 0ustar wouterwouter; config options go here. server: num-queries-per-thread: 2 forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Sample of a valid query ; query responses from authority servers. RANGE_BEGIN 0 100 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.40 SECTION AUTHORITY www.example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 10.20.30.50 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; NO REPLY (this step is not needed) STEP 3 NOTHING ; another query STEP 4 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.net. IN A ENTRY_END ; reply from first query returns STEP 5 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.40 ENTRY_END SCENARIO_END ; testbound checks before exit: ; * no more pending queries outstanding. ; * and no answers that have not been checked. unbound-1.13.1/testdata/03-testbound.tdir/0000755000175000017500000000000014010434640017700 5ustar wouterwouterunbound-1.13.1/testdata/03-testbound.tdir/03-testbound.test0000644000175000017500000000667214010434640023043 0ustar wouterwouter# #-- 03-testbound.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." get_make (cd $PRE ; $MAKE testbound) exitval=0 # quiet="" to make verbose if test -f $PRE/unbound_do_valgrind_in_test; then do_valgrind=yes else do_valgrind=no fi VALGRIND_FLAGS="--leak-check=full --show-leak-kinds=all" # valgrind mode for debug #if grep "staticexe=-static" $PRE/Makefile >/dev/null 2>&1; then # if test -x "`which valgrind`"; then # do_valgrind=yes # fi #fi # self-test (unit test of testbound) if test $do_valgrind = "yes"; then echo "valgrind yes" echo if (valgrind $VALGRIND_FLAGS $PRE/testbound -s >tmpout 2>&1;); then echo "selftest OK " else echo "selftest FAILED" exit 1 fi if grep "All heap blocks were freed -- no leaks are possible" tmpout; then : # clean else cat tmpout echo "Memory leaked in selftest" grep "in use at exit" tmpout exit 1 fi if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout; then : # clean else cat tmpout echo "Errors in selftest" grep "ERROR SUMMARY" tmpout exit 1 fi else if ($PRE/testbound -s >/dev/null 2>&1;); then echo "selftest OK " else echo "selftest FAILED" exit 1 fi fi # the .crpl are not always supported and need checking for SHA256 and GOST # support. # the .rpl should work on any system (portable). for input in $PRE/testdata/*.rpl $PRE/testdata/*.crpl; do header=`grep SCENARIO_BEGIN $input | head -1 | sed -e 's/SCENARIO_BEGIN //'` cleaninput=`echo $input | sed -e "s?$PRE/testdata/??"` # detect if SHA256 is needed if echo $cleaninput | grep sha2 >/dev/null 2>&1; then if $PRE/testbound -2 >/dev/null 2>&1; then : # the SHA256 is supported else continue fi fi # detect if GOST is needed if echo $cleaninput | grep gost >/dev/null 2>&1; then if $PRE/testbound -g >/dev/null 2>&1; then : # GOST is supported else continue fi fi # detect if CLIENT_SUBNET is needed if echo $cleaninput | grep subnet >/dev/null 2>&1; then if $PRE/testbound -c >/dev/null 2>&1; then : # CLIENT_SUBNET is supported else continue fi fi # detect if IPSECMOD is needed if echo $cleaninput | grep ipsecmod >/dev/null 2>&1; then if $PRE/testbound -i >/dev/null 2>&1; then : # IPSECMOD is supported else continue fi fi if test $do_valgrind = "yes"; then echo if (valgrind $VALGRIND_FLAGS $PRE/testbound -p $input >tmpout 2>&1;); then echo " OK $cleaninput: $header" else echo "FAILED $cleaninput: $header" exitval=1 fi if grep "All heap blocks were freed -- no leaks are possible" tmpout; then : # clean else grep "^==" tmpout echo "Memory leaked in $cleaninput" grep "in use at exit" tmpout exitval=1 fi if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout; then : # clean else grep "^==" tmpout echo "Errors in $cleaninput" grep "ERROR SUMMARY" tmpout exitval=1 fi else # do valgrind=no if ($PRE/testbound -p $input >/dev/null 2>&1;); then echo " OK $cleaninput: $header" else echo "FAILED $cleaninput: $header" exitval=1 fi fi if test -f ublocktrace.0; then if $PRE/lock-verify ublocktrace.*; then #echo "lock-verify test $input worked." i=i else echo "lock-verify test $input failed." exitval=1 fi fi done exit $exitval unbound-1.13.1/testdata/03-testbound.tdir/03-testbound.dsc0000644000175000017500000000042614010434640022624 0ustar wouterwouterBaseName: 03-testbound Version: 1.0 Description: Run testbound event replay scenarios. CreationDate: Tue Feb 13 16:36:18 CET 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: 03-testbound.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/val_anchor_nx.rpl0000644000175000017500000002142614010434640020055 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with secure proof of trust anchor nxdomain ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.sub.example.com. IN DS SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION sub.example.com. IN DNSKEY SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} blub.example.com. NSEC znub.example.com. A MX RRSIG NSEC blub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCic/WwyMtdDE/84g8l0S0M8AOtnAhR88hQEp5cD5XQ3EmQ79RUuNTCgdg== ;{id = 2854} example.com. NSEC blub.example.com. SOA NS MX DNSKEY RRSIG NSEC example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFFYX7iNIlT79gNFFlvnn44Ittm6HAhUAg7u0hZ4to87qyfkonZu2jVLW3xw= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b4_wild_wr.rpl0000644000175000017500000001114314010434640021220 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.4 wildcard expansion, wrong NSEC3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION a.z.w.example. IN MX SECTION ANSWER a.z.w.example. MX 1 ai.example. a.z.w.example. RRSIG MX 7 2 3600 20150420235959 20051021000000 ( 40430 example. CikebjQwGQPwijVcxgcZcSJKtfynugtlBiKb 9FcBTrmOoyQ4InoWVudhCWsh/URX3lc4WRUM ivEBP6+4KS3ldA== ) SECTION AUTHORITY example. NS ns1.example. example. NS ns2.example. example. RRSIG NS 7 1 3600 20150420235959 20051021000000 ( 40430 example. PVOgtMK1HHeSTau+HwDWC8Ts+6C8qtqd4pQJ qOtdEVgg+MA+ai4fWDEhu3qHJyLcQ9tbD2vv CnMXjtz6SyObxA== ) ;; NSEC3 RR that covers the "next closer" name (z.w.example) ;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03 ;q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) ;q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) ; The wrong NSEC3 here k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi ) k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== ) SECTION ADDITIONAL ai.example. A 192.0.2.9 ai.example. RRSIG A 7 2 3600 20150420235959 20051021000000 ( 40430 example. hVe+wKYMlObTRPhX0NL67GxeZfdxqr/QeR6F tfdAj5+FgYxyzPEjIzvKWy00hWIl6wD3Vws+ rznEn8sQ64UdqA== ) ai.example. AAAA 2001:db8:0:0:0:0:f00:baa9 ai.example. RRSIG AAAA 7 2 3600 20150420235959 20051021000000 ( 40430 example. LcdxKaCB5bGZwPDg+3JJ4O02zoMBrjxqlf6W uaHQZZfTUpb9Nf2nxFGe2XRPfR5tpJT6GdRG cHueLuXkMjBArQ== ) ENTRY_END ; catch glue queries ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN A SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN AAAA SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.z.w.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION a.z.w.example. IN MX SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_init_sigs.rpl0000644000175000017500000001546514010434640021364 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20070926134150 20070829134150 55582 example.com. sT5Se0rwBm0oAOcrX37oidl3zxK9QwvgAyOH+08Jq3V8KS4iPehBjNqXi9OITLgos4dHU/up4Z1BwgwTNYJIgg== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20070926134150 20070829134150 30899 example.com. DnrdGYsSAjAX1z93FQvPL8eX66uS9ip7A21gPTkvGBDwDoNB8JTNdRlEyWeXlipatbcQoZeG8mo87Wgp9eT/PA== ;{id = 30899} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with initial trust anchor with RRSIGs ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 ASSIGN t0 = ${time} ; get probe time and check it. 4800 is about 10% less than 5400. And more than ; the 3600 that a failure timeout would have. STEP 7 ASSIGN probe = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 8 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ; The autotrust anchor was probed due to the query. STEP 30 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END ; wait and see if autotrust probes (the unchanged) domain again. STEP 40 TIME_PASSES EVAL ${$probe} STEP 50 TRAFFIC STEP 65 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 70 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${time} ;;${ctime ${time}} ;;last_success: ${time} ;;${ctime ${time}} ;;next_probe_time: ${$t0 + $probe + $probe2} ;;${ctime $t0 + $probe + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END SCENARIO_END unbound-1.13.1/testdata/black_key_entry.rpl0000644000175000017500000005160514010434640020403 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacked key entry and further queries ; DNSKEY not for prime but further down the chain of trust ; the blacklist action does not help. ; the further queries should not generate traffic to the authority any more. ; until the key entry expires. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 99 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 99 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.foo.com. IN A SECTION ANSWER ns.foo.com. IN A 1.2.4.7 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.foo.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 99 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ; make priming query succeed example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 99 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 99 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. g+YoDwrCF75YCFyqYoxlF+/mNfcscnuZ6LfmfBgPLohlvCCC7jYj/wkc2fxAl3MEK0CriWkHp1hw0QQYkmbbKw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. VCDq+gfZHuziE81Uypxm2va4eXCtoD8F8YKkwNo8laMNUcXh/hvGdbHKXMMghwuJXgxLh89Diu5kywBVwb/AIg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. l3wjlbDU2y7ECix6t1pp5Rtz+qFlADRMohcRsCrnD9b99IoOL0/cTpvvf2V1VTJveIibFGhbcHTuCqAQ4G4FKA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. l3wjlbDU2y7ECix6t1pp5Rtz+qFlADRMohcRsCrnD9b99IoOL0/cTpvvf2V1VTJveIibFGhbcHTuCqAQ4G4FKA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. eVe3iQS2/a1Y57AA2QSlMU/z31xaJ2mwUU36PZh8vlv6shPpQywAT70JdX6+ZsuliRpsbY6crkVXTXJ2qpKTiQ== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. vEX2n1CksMr5jPq9d2BQJMIDwxaXdWlY5mYg+PBmOFI4xngFMKTsXa/+SfJy2SiqAgHTDI6joIo30AdQJsjdHA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. dBK6JOkKlp2G+f7mhInKnQM6DUBnEziTS+KpXzQ/5HT8/h9XkryOt4vAJKGCz0Ew3qRqjLgylsbGrcuxmIO9jA== ;{id = 30899} ENTRY_END RANGE_END ; ns.foo.com. RANGE_BEGIN 0 99 ADDRESS 1.2.4.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. hJ3nkrfyBwPcfpwc9wEwzhF5+ZKUddKBHQuZuHPZBjBwb1BsT7B7ryadttbGE3keQJiwNmK9AqvE0Zb+WkDceg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. qwUibvlPTFnxgiyCNtEJCYqJIgA8WFDqypmsO6TSYje2Rqhq4AaWEVxQwU4bdjmipCGVqtlP8mMyMQHaYNMGKA== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. sZQEMd0ys2mxPRajzBuvy4XdLNVvXMmJSnmfTHUL41d9IxbGN/ifpiIWs2MXOFPnbab05aYadrzZpT/cpDTxmQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END RANGE_END ; ns.sub.example.com. ; This is for after, so only new queries, no requeries allowed. RANGE_BEGIN 100 200 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ftp.sub.example.com. IN A SECTION ANSWER ftp.sub.example.com. IN A 10.20.30.46 ftp.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. nbxk6SiooKsUeVm/ZGskrxKwhOSWdJt9ly9X6Hqji4DKpBskM6bqulmTt/xZ/3G4ZOguYBeiTp8qwlWjl7VoSQ== ;{id = 30899} ENTRY_END RANGE_END ; ns.sub.example.com. ; fixed version RANGE_BEGIN 200 300 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. hJ3nkrfyBwPcfpwc9wEwzhF5+ZKUddKBHQuZuHPZBjBwb1BsT7B7ryadttbGE3keQJiwNmK9AqvE0Zb+WkDceg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. qwUibvlPTFnxgiyCNtEJCYqJIgA8WFDqypmsO6TSYje2Rqhq4AaWEVxQwU4bdjmipCGVqtlP8mMyMQHaYNMGKA== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. sZQEMd0ys2mxPRajzBuvy4XdLNVvXMmJSnmfTHUL41d9IxbGN/ifpiIWs2MXOFPnbab05aYadrzZpT/cpDTxmQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER ENTRY_END ; no more outgoing traffic possible. STEP 110 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ftp.sub.example.com. IN A ENTRY_END STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION ftp.sub.example.com. IN A SECTION ANSWER ENTRY_END ; wait for timeout seconds. STEP 130 TIME_PASSES ELAPSE 901 STEP 210 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 220 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/dnscrypt_cert.tdir/0000755000175000017500000000000014010434640020334 5ustar wouterwouterunbound-1.13.1/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre0000644000175000017500000000210714010434640023727 0ustar wouterwouter# #-- dnscrypt_cert.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # Check if we can run the test. . ./precheck.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) DNSCRYPT_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "DNSCRYPT_PORT=$DNSCRYPT_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnscrypt_cert.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' \ -e 's/@DNSCRYPT_PORT\@/'$DNSCRYPT_PORT'/' < dnscrypt_cert.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnscrypt_cert.tdir/dnscrypt_cert.testns0000644000175000017500000000061614010434640024464 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA TC NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname TCP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 www IN A 10.20.30.41 www IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/dnscrypt_cert.tdir/1_chacha.cert0000644000175000017500000000017414010434640022644 0ustar wouterwouterDNSC¬#ëÊb5û ³)Éös±¿XAÃøå#¬Âæ¼  BÈŸŸÿ:(’Ø J@œ5¢Ìar›‡ 9’;Ü  ªÃ¿2˰D´eÆhˆ{Øs;Sd2^šá<CÍ+SÛAÄ¿2˰DY ×8Y ×8uÒÛ¸unbound-1.13.1/testdata/dnscrypt_cert.tdir/1.cert0000644000175000017500000000017414010434640021355 0ustar wouterwouterDNSC+WS«'OMFð: `uD“\ f^©÷ç„îÍÝZóMpaN4Ôl±?ð,f“Aj¸SÍ}1°eâ¾: O[s6q–€©J5cDíò:ú0UË¡’„…)js./O[s6q–W¾4êW¾4êYŸhjunbound-1.13.1/testdata/dnscrypt_cert.tdir/precheck.sh0000644000175000017500000000051414010434640022454 0ustar wouterwouter# dnscrypt precheck.sh # if no dnscrypt; exit if grep "define USE_DNSCRYPT 1" $PRE/config.h; then echo "have dnscrypt" else echo "no dnscrypt" exit 0 fi # if no xchacha20 support in unbound; exit if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then xchacha20=1 else xchacha20=0 fi unbound-1.13.1/testdata/dnscrypt_cert.tdir/1_salsa.cert0000644000175000017500000000017414010434640022540 0ustar wouterwouterDNSCiæ±hgÒ ¬>8÷®šUؼ˜‘yUþзqBQžS½´– K Üøì`ƒ®Ö!Xkʘ½Tà´)'9uÿ2˰D´eÆhˆ{Øs;Sd2^šá<CÍ+SÛAÿ2˰DY Ë Y Ë uÒωunbound-1.13.1/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post0000644000175000017500000000055514010434640024133 0ustar wouterwouter# #-- dnscrypt_cert.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh # Check if we can run the test. . ./precheck.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/dnscrypt_cert.tdir/1.key0000644000175000017500000000004014010434640021200 0ustar wouterwouter®öÝìK¬‡#‘€4ùsŽ pèÖôÁæÀx!¹»AŠ"mMunbound-1.13.1/testdata/dnscrypt_cert.tdir/2_salsa.cert0000644000175000017500000000017414010434640022541 0ustar wouterwouterDNSCAXÉóÉLI<-’]LU÷LYí6KÂ$D—&ìÜWeãé[4\’®¦`{}¡WÑä×Í|Ï* ¢$¯Ò[õóW¿½ZØÒxÌ÷­ãtŠ¢~˜ýÓz\m5þà4õóW¿½ZØÒY Ë Y Ë uÒωunbound-1.13.1/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test0000644000175000017500000000750314010434640024125 0ustar wouterwouter# #-- dnscrypt_cert.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # Check if we can run the test. . ./precheck.sh # do the test # Query plain request over DNSCrypt channel get closed # We use TCP to avoid hanging on waiting for UDP. # We expect `outfile` to contain no DNS payload echo "> dig TCP www.example.com. DNSCrypt port" dig +tcp @127.0.0.1 -p $DNSCRYPT_PORT www.example.com. A | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "QUESTION SECTION" outfile; then echo "NOK" exit 1 else echo "OK" fi # Plaintext query on unbound port works correctly. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi # Plaintext query on unbound port works correctly with TCP. echo "> dig TCP www.example.com." dig +tcp @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi for opt in '' '+tcp' do # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. # Check that it returns 1.cert. echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. DNSCrypt plaintext ${opt}" dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then echo "OK" else echo "Not OK" exit 1 fi # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. # Check that it returns 2.cert. echo "> dig TXT 2.dnscrypt-cert.example.com. 2_salsa.CERT. DNSCrypt plaintext ${opt}" dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep -F 'DNSC\000\001\000\000AX\031\201\243\201LI<-\146]LU\247LY\2376\014K\194$D\151&\008\236\008\220\143We\029\227\030\233\015[4\\\146\174\166`{}\161W\209\228\215\002\205|\207*\011\162$\175\210[\006\245\243W\191\189Z\216\210x\025\204\247\173\227t\138\018\162~\152\253\211\031z\\\002m5\008\254\2244\245\243W\191\189Z\216\210Y\160\203\009Y\160\203\009u\210\207\137' outfile; then echo "OK" else echo "NOK" exit 1 fi # Certificates are local-data for unbound. We can also retrieve them from unbound # port. echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. Unbound ${opt}" dig ${opt} @127.0.0.1 -p $UNBOUND_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then echo "OK" else echo "Not OK" exit 1 fi done exit 0 unbound-1.13.1/testdata/dnscrypt_cert.tdir/2.cert0000644000175000017500000000017414010434640021356 0ustar wouterwouterDNSCÛ€Ü ±¼ ˜4ÕÒF8i¾bUbf³»a:®»Ÿ6Îú÷óòe⦡ú¸£wàxj†ƒh ÑR<àŽv¾RÁ§ g"ÎÒê|ÑêØùeE£p)4•±}0~6Žv¾RÁ§ gX.¢èX.¢èZÖhunbound-1.13.1/testdata/dnscrypt_cert.tdir/2_chacha.cert0000644000175000017500000000017414010434640022645 0ustar wouterwouterDNSC«6âÿ*ôL±g_tR—öR˲™ø‰"Š­|G/, ˜ ¬¸Ü`¯Ùÿ,¢²-dök0I[Íw)ÌB¡ õóW¿½ZØÒxÌ÷­ãtŠ¢~˜ýÓz\m5þà4öóW¿½ZØÒY ×8Y ×8uÒÛ¸unbound-1.13.1/testdata/dnscrypt_cert.tdir/dnscrypt_cert.conf0000644000175000017500000000105214010434640024064 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 port: @PORT@ interface: 0.0.0.0 interface: 0.0.0.0@@DNSCRYPT_PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnscrypt: dnscrypt-enable: yes dnscrypt-port: @DNSCRYPT_PORT@ dnscrypt-provider: 2.dnscrypt-cert.example.com. dnscrypt-secret-key: 1.key dnscrypt-secret-key: 2.key dnscrypt-provider-cert: 1_salsa.cert dnscrypt-provider-cert: 2_salsa.cert unbound-1.13.1/testdata/dnscrypt_cert.tdir/2.key0000644000175000017500000000004014010434640021201 0ustar wouterwouterm7Ÿñâƒx;‘%׸õé*•ÜR¯äÓ¯¹mDªñunbound-1.13.1/testdata/dnscrypt_cert.tdir/dnscrypt_cert.dsc0000644000175000017500000000045514010434640023716 0ustar wouterwouterBaseName: dnscrypt_cert Version: 1.0 Description: dnscrypt cert retrieval. CreationDate: Fri Mar 03 10:08:08 CEST 2017 Maintainer: Emmanuel Bretelle Category: Component: CmdDepends: Depends: Help: Pre: dnscrypt_cert.pre Post: dnscrypt_cert.post Test: dnscrypt_cert.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/iter_ranoaa_lame.rpl0000644000175000017500000001304514010434640020514 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test detection of RA but no AA lameness ; in this scenario mistakenly, a recursive server is deployed, instead ; of an authoritative server. It gives answers from cache. ; However, unbound is doing recursion on behalf of its client, and does ; not trust the server to do so. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ; this entry; glue will make unbound take this reference first. ; it is however, the lame server. ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA ENTRY_END ; the lame response. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; the wrong answer. www.example.com. IN A 10.20.30.50 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. ; scrubbed off ;SECTION ADDITIONAL ;ns.example.net IN A 1.2.3.44 ENTRY_END ; query still pending STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.net. IN AAAA ENTRY_END ; query still pending STEP 40 CHECK_ANSWER ENTRY_BEGIN REPLY RD RA SECTION QUESTION ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+005+55582.ds0000644000175000017500000000021714010434640020425 0ustar wouterwouterexample.com. 3600 IN DS 55582 5 1 66e829ebd8145e6f030b840ae63b77273c9575e1 ; xiniv-mopov-rakoc-galuk-zibeb-ricob-penuf-rutad-lyzan-hetuv-caxox unbound-1.13.1/testdata/dynlibmod.tdir/0000755000175000017500000000000014010434640017432 5ustar wouterwouterunbound-1.13.1/testdata/dynlibmod.tdir/dynlibmod.conf0000644000175000017500000000127714010434640022271 0ustar wouterwouterserver: verbosity: 2 num-threads: 3 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" module-config: "dynlib iterator" dynlib: dynlib-file: "@DLL_FILE@" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/dynlibmod.tdir/dynlibmod.testns0000644000175000017500000000050314010434640022653 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dynlibmod.tdir/dynlibmod.test0000644000175000017500000000477614010434640022332 0ustar wouterwouter# #-- dynlibmod.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # compile the dynamic library module if grep "define USE_WINSOCK 1" $PRE/config.h; then echo "compile dynamic library dll for mingw" echo "x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a" x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a if test $? != 0; then echo "compile failure" exit 1; fi else echo "compile dynamic library" echo "gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c" gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c if test $? != 0; then echo "compile failure" exit 1; fi fi # start unbound in the background LD_LIBRARY_PATH="." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test wait_unbound_up unbound.log # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check log for dynlibmod info" # wait for a moment for filesystem to catch up. if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 10; fi if grep "hello world from operate" unbound.log; then echo "yes it is in unbound.log"; else echo "information not in unbound.log" echo "failed" echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> cat logfiles" cat fwd.log cat unbound.log echo "> OK" exit 0 unbound-1.13.1/testdata/dynlibmod.tdir/dynlibmod.dsc0000644000175000017500000000043514010434640022110 0ustar wouterwouterBaseName: dynlibmod Version: 1.0 Description: test dynlibmod module CreationDate: Tue May 19 15:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dynlibmod.pre Post: dynlibmod.post Test: dynlibmod.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dynlibmod.tdir/unbound_server.key0000644000175000017500000000463314010434640023212 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dynlibmod.tdir/dynlibmod.post0000644000175000017500000000073214010434640022324 0ustar wouterwouter# #-- dynlibmod.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log exit 0 unbound-1.13.1/testdata/dynlibmod.tdir/unbound_server.pem0000644000175000017500000000246614010434640023205 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dynlibmod.tdir/unbound_control.pem0000644000175000017500000000247614010434640023360 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dynlibmod.tdir/unbound_control.key0000644000175000017500000000462714010434640023367 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dynlibmod.tdir/dynlibmod.pre0000644000175000017500000000212014010434640022116 0ustar wouterwouter# #-- dynlibmod.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dynlibmod.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file if grep "define USE_WINSOCK 1" $PRE/config.h; then DLL_FILE="helloworld.dll" else DLL_FILE="helloworld.so" fi sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@DLL_FILE\@/'$DLL_FILE'/' < dynlibmod.conf > ub.conf cat .tpkg.var.test wait_ldns_testns_up fwd.log unbound-1.13.1/testdata/iter_ds_locate_ns_cname.rpl0000644000175000017500000000553014010434640022055 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test locate of NS records for DS with CNAME ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; content of root-servers.net ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN NS SECTION ANSWER root-servers.net. IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 SECTION AUTHORITY root-servers.net. IN NS K.ROOT-SERVERS.NET. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN AAAA SECTION ANSWER SECTION AUTHORITY root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION ANSWER root-servers.net. IN CNAME blabla.com. ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION blabla.com. IN DS SECTION ANSWER SECTION AUTHORITY . IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION root-servers.net. IN A SECTION AUTHORITY root-servers.net. IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION root-servers.net. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION root-servers.net. IN DS SECTION ANSWER SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/rpz_ixfr.rpl0000644000175000017500000001467614010434640017110 0ustar wouterwouter; config options server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no rrset-roundrobin: no rpz: name: "rpz.example.com." master: 10.20.30.40 zonefile: TEMPFILE_NAME rpz.example.com TEMPFILE_CONTENTS rpz.example.com rpz.example.com. 3600 IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 rpz.example.com. 3600 IN NS ns.rpz.example.net. a.rpz.example.com. IN CNAME *. c.rpz.example.com. IN TXT "hello from initial RPZ" c.rpz.example.com. IN TXT "another hello from initial RPZ" c.rpz.example.com. IN TXT "yet another hello from initial RPZ" d.rpz.example.com. IN CNAME . 32.1.123.0.10.rpz-ip.rpz.example.com. CNAME *. 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.3 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.4 32.4.123.0.10.rpz-ip.rpz.example.com. CNAME . TEMPFILE_END stub-zone: name: "." stub-addr: 10.20.30.40 CONFIG_END SCENARIO_BEGIN Test RPZ QNAME trigger, loaded using IXFR RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS ns. SECTION ADDITIONAL ns. IN NS 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION b. IN TXT SECTION ANSWER b. TXT "hello from upstream" ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION d. IN TXT SECTION ANSWER d. TXT "hello from upstream" ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION a.rpz-ip. IN A SECTION ANSWER a.rpz-ip. IN A 10.0.123.1 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION c.rpz-ip. IN A SECTION ANSWER c.rpz-ip. IN A 10.0.123.3 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR NOERROR AA SECTION QUESTION d.rpz-ip. IN A SECTION ANSWER d.rpz-ip. IN A 10.0.123.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION rpz.example.com. IN SOA SECTION ANSWER rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION rpz.example.com. IN IXFR SECTION ANSWER rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 1 3600 900 86400 3600 a.rpz.example.com. IN CNAME *. c.rpz.example.com. IN TXT "hello from initial RPZ" c.rpz.example.com. IN TXT "another hello from initial RPZ" d.rpz.example.com. IN CNAME . 32.1.123.0.10.rpz-ip.rpz.example.com. CNAME *. 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.3 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.4 32.4.123.0.10.rpz-ip.rpz.example.com. CNAME . rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 b.rpz.example.com. TXT "hello from RPZ" c.rpz.example.com. TXT "hello from RPZ" a.rpz.example.com. CNAME . 32.1.123.0.10.rpz-ip.rpz.example.com. CNAME . 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.5 32.3.123.0.10.rpz-ip.rpz.example.com. A 10.66.0.6 rpz.example.com. IN SOA ns.rpz.example.com. hostmaster.rpz.example.com. 2 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION b. IN TXT SECTION ANSWER b. IN TXT "hello from upstream" ENTRY_END STEP 3 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION a. IN TXT SECTION ANSWER ENTRY_END STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.rpz-ip. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION a.rpz-ip. IN A SECTION ANSWER ENTRY_END STEP 7 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION c. IN TXT SECTION ANSWER c. IN TXT "yet another hello from initial RPZ" c. IN TXT "another hello from initial RPZ" c. IN TXT "hello from initial RPZ" ENTRY_END STEP 9 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c.rpz-ip. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION c.rpz-ip. IN A SECTION ANSWER c.rpz-ip. IN A 10.66.0.4 c.rpz-ip. IN A 10.66.0.3 ENTRY_END STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN TXT ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NXDOMAIN SECTION QUESTION d. IN TXT ENTRY_END STEP 13 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d.rpz-ip. IN A ENTRY_END STEP 15 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION d.rpz-ip. IN A ENTRY_END STEP 16 TIME_PASSES ELAPSE 1 STEP 30 TIME_PASSES ELAPSE 3600 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN TXT ENTRY_END STEP 51 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION b. IN TXT SECTION ANSWER b. IN TXT "hello from RPZ" ENTRY_END STEP 52 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN TXT ENTRY_END STEP 53 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NXDOMAIN SECTION QUESTION a. IN TXT SECTION ANSWER ENTRY_END STEP 54 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.rpz-ip. IN A ENTRY_END STEP 55 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION a.rpz-ip. IN A SECTION ANSWER ENTRY_END STEP 56 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN TXT ENTRY_END STEP 57 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION c. IN TXT SECTION ANSWER c. IN TXT "hello from RPZ" c. IN TXT "yet another hello from initial RPZ" ENTRY_END STEP 58 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c.rpz-ip. IN A ENTRY_END STEP 59 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION c.rpz-ip. IN A SECTION ANSWER c.rpz-ip. IN A 10.66.0.6 c.rpz-ip. IN A 10.66.0.5 ENTRY_END STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN TXT ENTRY_END STEP 61 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION d. IN TXT SECTION ANSWER d. IN TXT "hello from upstream" ENTRY_END STEP 62 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d.rpz-ip. IN A ENTRY_END STEP 63 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION d.rpz-ip. IN A SECTION ANSWER d.rpz-ip. IN A 10.0.123.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ans_nx.rpl0000644000175000017500000002125614010434640017365 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with DS nodata as nxdomain on trust chain ; This is a bug in ANS 2.8.1.0 where it gives an NXDOMAIN instead of ; NOERROR for an empty nonterminal DS query. The proof for this NXDOMAIN ; is the NSEC that proves emptynonterminal. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; responses to DS empty nonterminal queries. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION 194.example.com. IN DS SECTION AUTHORITY example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFCOn5qKBIV7bwFMBA+Qqiblx0cylAhUAoFiGtFm2wHhJpq9MooTYdeVw45s= ;{id = 2854} ; This NSEC proves the NOERROR/NODATA case. 194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC 194.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDcoKl74U9FjsuYF3Vc0E8GQ2GgzAhUAhlyhO2MMcAWQMxIhEZ4MguokN5g= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; Bad NXDOMAIN response, this should be NOERROR. REPLY QR AA NXDOMAIN SECTION QUESTION 0.194.example.com. IN DS SECTION AUTHORITY example.com. 3600 IN SOA ns.example.com. host.example.com. 2007091980 3600 7200 1209600 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFCOn5qKBIV7bwFMBA+Qqiblx0cylAhUAoFiGtFm2wHhJpq9MooTYdeVw45s= ;{id = 2854} ; This NSEC proves the NOERROR/NODATA case. 194.example.com. IN NSEC 0.0.194.example.com. A RRSIG NSEC 194.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFDcoKl74U9FjsuYF3Vc0E8GQ2GgzAhUAhlyhO2MMcAWQMxIhEZ4MguokN5g= ;{id = 2854} ENTRY_END ; response for delegation to sub zone. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION ANSWER SECTION AUTHORITY 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN DS 30899 RSASHA1 1 aa46f0717075d9750ac3596c659a2e326b33c28c 0.0.194.example.com. 3600 IN RRSIG DS 3 5 3600 20070926135752 20070829135752 2854 example.com. MCwCFC9GIqtp/103hktw6bPpD83gr+0iAhQ8yev2yUaR9l64rYBUYTJqOoTKdw== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub zone ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.0.194.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN DS 30899 RSASHA1 1 aa46f0717075d9750ac3596c659a2e326b33c28c 0.0.194.example.com. 3600 IN RRSIG DS 3 5 3600 20070926135752 20070829135752 2854 example.com. MCwCFC9GIqtp/103hktw6bPpD83gr+0iAhQ8yev2yUaR9l64rYBUYTJqOoTKdw== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. for zone 0.0.194.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.0.194.example.com. IN NS SECTION ANSWER 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20070926135752 20070829135752 30899 0.0.194.example.com. KXDA+/PJAE+dXhv6O6Z0ZovDwabSRJcIt+GT5AL6ewlj46hzo/SDKUtEhYCeT1IVQvYtXrESwFZjpp7N0rXXBg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to DNSKEY priming query ; 0.0.194.example.com. 3600 IN DS 30899 RSASHA1 1 aa46f0717075d9750ac3596c659a2e326b33c28c ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 0.0.194.example.com. IN DNSKEY SECTION ANSWER 0.0.194.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} 0.0.194.example.com. 3600 IN RRSIG DNSKEY 5 5 3600 20070926135752 20070829135752 30899 0.0.194.example.com. fSmc7ef6NwbDXC0o4wPc/aa8LakW5ZJwEZ4xPYl3tTZKmPNM7hPXskl1tFlvst9Va4u37F62v+16trprHb+SCQ== ;{id = 30899} SECTION AUTHORITY 0.0.194.example.com. IN NS ns.sub.example.com. 0.0.194.example.com. 3600 IN RRSIG NS 5 5 3600 20070926135752 20070829135752 30899 0.0.194.example.com. KXDA+/PJAE+dXhv6O6Z0ZovDwabSRJcIt+GT5AL6ewlj46hzo/SDKUtEhYCeT1IVQvYtXrESwFZjpp7N0rXXBg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION ANSWER 328.0.0.194.example.com. IN A 11.11.11.11 328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20070926135752 20070829135752 30899 0.0.194.example.com. chZW77mqywhw/4ch6BxXQ4EbFgb9zgh2xF75FLlKq/7ey6CfHSJRpJRjRqtMTn+1i18UL2B4nPS/WnK5DZeqlA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION 328.0.0.194.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION 328.0.0.194.example.com. IN A SECTION ANSWER 328.0.0.194.example.com. 3600 IN A 11.11.11.11 328.0.0.194.example.com. 3600 IN RRSIG A 5 6 3600 20070926135752 20070829135752 30899 0.0.194.example.com. chZW77mqywhw/4ch6BxXQ4EbFgb9zgh2xF75FLlKq/7ey6CfHSJRpJRjRqtMTn+1i18UL2B4nPS/WnK5DZeqlA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_addpend_twice.rpl0000644000175000017500000003273414010434640022164 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with ADDPEND seen twice ; this should work. ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582-REVOKED and 60946 RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. qLKZUJEi3ajSJ4/b7xl0BwhzW6JtjsojpZ+2nUx1PvaeQVoTmyWxjxc2tAmJGcBPqMqzeY470xvyMDvGTOiQCQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. EW2YB+2yNX9LTNDPVwkcGnRTTx38pOiwBaixdwxmDgqWKXLDLM6Kd2Xv9tveS39RnSZ5H1inRXE55q+rL6Re3g== ;{id = 55710} ; wrong keytag: ;example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55582 example.com. nH/6HauVJI4GGz78UoK/38cOOrEqsYZP0jFzfCC3OyIlclVTjAFvjVPlVMGK7sA5Nw1v20YtFTQkXZgbrRuInQ== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. xKSBZr4vOsEUKlVoNb6SOV69DM7xFOJI4gPFKq5Tv4APIMJ/9G3odoDmNcLCVyYGzhoDik5hciJnZio6UHgzAA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 30899 example.com. TfFGz1kDtkn3ixbKMJvQDZ0uGw/eW+inIiPqQVPQtO2WiocKrnYnzwv/AqwnFvEar70dF15/zffNIF+ipOS5/g== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 60946 example.com. X0Ci//w0czN/J5RvypHGqp56n1tLdapi92ODAqjM7QpZXbSHaJ7wfPG1PZzvdxHUZUVyf8uy2stjg/XoLGHMWA== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; t3 is removed third poll time. ; 21 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${21*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, the old key is removed from storage STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} FILE_END SCENARIO_END unbound-1.13.1/testdata/val_negcache_nodata.rpl0000644000175000017500000002241114010434640021154 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes stub-zone: name: "testzone.nlnetlabs.nl" stub-addr: 185.49.140.60 CONFIG_END SCENARIO_BEGIN Test validator with negative cache NXDOMAIN response (aggressive NSEC) ; testzone.nlnetlabs.nl nameserver RANGE_BEGIN 0 100 ADDRESS 185.49.140.60 ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION testzone.nlnetlabs.nl. IN DNSKEY SECTION ANSWER testzone.nlnetlabs.nl. 3600 IN DNSKEY 256 3 8 AwEAAbrNEg01ByEpUUiip+GNAkNVjUfeX7sl9kPUssR3JQvhCJWVs7aBY0Ae1cNtQWgzCmidGorlXvEY2nNBiMM4l7IXqopJsgyj+Cb3nQPVLi/7yVwUb+AIwSJw1gRFElMYonsMOL9qUrJi8BBCnCR0EqkL+X4slmtkXSJbzQAwvHI7 testzone.nlnetlabs.nl. 3600 IN DNSKEY 257 3 8 AwEAAbn0eGV0wqMBQNSVTY//BoiOD7bexC7FcVv0fH9bwjKOA8I+ob377E14vZN2xRLC2b1GG5iBckjeI+N2dB9eC2KRnScU3Gbmtw75BBYfm/y4Hu72zEjEZ0ZGv6gjSZRv/1o87ODAwQaxN8/dQD+5U/5xu12XM39bCJZx2GWTbf5L testzone.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 8 3 3600 20180313101254 20180213101254 2926 testzone.nlnetlabs.nl. gSLZb/dSKutRlAKSo8ZCC1R+SkvABMYBRQsms77WPfYCDbt5GbXeuGqwGdadjEN8gGSU+qrYNxBZRhlYY6d2vtl+DGh67qwteHSwOCw0VvU64eVh38maJA1U673U4JtlBALzBOA/UHmXPlCgPPoW3BG0U3T2Qir/mqOmegmpBcw= SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN NS ns.nlnetlabs.nl. testzone.nlnetlabs.nl. 3600 IN RRSIG NS 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. Ox0iKc+z3i1qR1wMr8TBPYzuYO5UTaLrBsDagJAd25fvCkGN+h3HPmWlCIW0cBHsS+IaHXr1JhWutjSCc4UBcY+sT7Y7Fw3V1qdZW2KzbSgWUyPkTXoYcIIVLacSUTXEyltW6jj61WEI/RaUGUCJortvwH5iv1Hzee343isxObI= SECTION ADDITIONAL ENTRY_END ; NODATA response for alligator.testzone.nlnetlabs.nl A type ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION alligator.testzone.nlnetlabs.nl. IN A SECTION ANSWER SECTION AUTHORITY alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= SECTION ADDITIONAL ENTRY_END ; NXDOMAIN response for emu.testzone.nlnetlabs.nl ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION emu.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY *.elephant.testzone.nlnetlabs.nl. 3600 IN NSEC duck.ent.testzone.nlnetlabs.nl. TXT RRSIG NSEC *.elephant.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GC4dtR5zYvfuIgMpr6gF8jV69wsi2GwGlftTl532H2sZP7nWa5cJmJ59+q4evBZ+P3fLxaZeGBpsp3fn1e7yadLW5PGiA25qrjG0TGVQgOPdIV+lo45sxn7Yn8apiXcJf/vtXZMR7FcHYK/BieTo2hafa2zaftfQVRA7hpJ/HDc= testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= SECTION ADDITIONAL ENTRY_END ; No answer for ant.testzone.nlnetlabs.nl RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION alligator.testzone.nlnetlabs.nl. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO AD NOERROR SECTION QUESTION alligator.testzone.nlnetlabs.nl. IN A SECTION ANSWER SECTION AUTHORITY alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= SECTION ADDITIONAL ENTRY_END ; AAAA query for alligator.testzone.nlnetlabs.nl, which isn't on the testzone nameserver STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION alligator.testzone.nlnetlabs.nl. IN AAAA ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION alligator.testzone.nlnetlabs.nl. IN AAAA SECTION ANSWER SECTION AUTHORITY alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= ENTRY_END STEP 40 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION emu.testzone.nlnetlabs.nl. IN TXT ENTRY_END STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION emu.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY *.elephant.testzone.nlnetlabs.nl. 3600 IN NSEC duck.ent.testzone.nlnetlabs.nl. TXT RRSIG NSEC *.elephant.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GC4dtR5zYvfuIgMpr6gF8jV69wsi2GwGlftTl532H2sZP7nWa5cJmJ59+q4evBZ+P3fLxaZeGBpsp3fn1e7yadLW5PGiA25qrjG0TGVQgOPdIV+lo45sxn7Yn8apiXcJf/vtXZMR7FcHYK/BieTo2hafa2zaftfQVRA7hpJ/HDc= testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= ENTRY_END STEP 60 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ent.testzone.nlnetlabs.nl. IN TXT ENTRY_END ; query for ENT, must result in NOERROR answer STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION ent.testzone.nlnetlabs.nl. IN TXT SECTION ANSWER SECTION AUTHORITY *.elephant.testzone.nlnetlabs.nl. 3600 IN NSEC duck.ent.testzone.nlnetlabs.nl. TXT RRSIG NSEC *.elephant.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GC4dtR5zYvfuIgMpr6gF8jV69wsi2GwGlftTl532H2sZP7nWa5cJmJ59+q4evBZ+P3fLxaZeGBpsp3fn1e7yadLW5PGiA25qrjG0TGVQgOPdIV+lo45sxn7Yn8apiXcJf/vtXZMR7FcHYK/BieTo2hafa2zaftfQVRA7hpJ/HDc= testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_sigs.gost0000644000175000017500000000303014010434640017406 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test GOST signatures using algo number 12. ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN DNSKEY SECTION ANSWER nlnetlabs.nl. 3600 IN DNSKEY 256 3 12 9SZY+xB3wKtrLoRHzkBs9L3fjcvazjnk5HF3gMaD1PVp4pthrwgHIm0TUaLrd3YCa2VCl5wj+MzbhZi8NEJ/Cg== ;{id = 60385 (zsk), size = 512b} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION open.nlnetlabs.nl. IN A SECTION ANSWER open.nlnetlabs.nl. 600 IN A 213.154.224.1 open.nlnetlabs.nl. 600 IN RRSIG A 12 3 600 20090903100515 20090806100515 60385 nlnetlabs.nl. XVxDmt7/gRk13Yv+U+RPuEZ86iCGSVPmTcpMZYJs14Yn6Y/On8X+vgLV6IzxQTxAwGb+D35/dUfT55p6pFo8YQ== ;{id = 60385} ENTRY_END ENTRY_BEGIN SECTION QUESTION open.nlnetlabs.nl. IN AAAA SECTION ANSWER open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::53 open.nlnetlabs.nl. 600 IN RRSIG AAAA 12 3 600 20090903100515 20090806100515 60385 nlnetlabs.nl. +tdW+Uhkl2dBsD3zjGFGg1UtkBgfEhM6aXzERl0gWElgoJ4pCpXTV7VhZQ4yjibpMYjcXsBhQLcN7AuG20Ps9Q== ;{id = 60385} ENTRY_END ENTRY_BEGIN SECTION QUESTION open.nlnetlabs.nl. IN NSEC SECTION ANSWER open.nlnetlabs.nl. 3600 IN NSEC nlnetlabs.nl. A AAAA RRSIG NSEC open.nlnetlabs.nl. 3600 IN RRSIG NSEC 12 3 3600 20090903100515 20090806100515 60385 nlnetlabs.nl. vOzQQh9ITdgD74ohIE37L8mAZcgDt7V+HrrPjCdalsFYw9dvGwuEvc0MfSDmzrFQ7OhL0elwI/A1AfK57M7emQ== ;{id = 60385} ENTRY_END unbound-1.13.1/testdata/version_bind_hide.rpl0000644000175000017500000000215214010434640020701 0ustar wouterwouter; config options server: hide-identity: yes hide-version: yes identity: "test-identity" version: "test-version" ; we rely on the fact that there are no builtin stubs for class CH. CONFIG_END SCENARIO_BEGIN Test config hide options for identity and version queries ; version.bind. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION version.bind. CH TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA REFUSED SECTION QUESTION version.bind. CH TXT ENTRY_END ; version.server. STEP 3 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION version.server. CH TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA REFUSED SECTION QUESTION version.server. CH TXT ENTRY_END ; hostname.bind. STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION hostname.bind. CH TXT ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA REFUSED SECTION QUESTION hostname.bind. CH TXT ENTRY_END ; id.server. STEP 7 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION id.server. CH TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA REFUSED SECTION QUESTION id.server. CH TXT ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_dnsseclame_ta_ok.rpl0000644000175000017500000001701514010434640021551 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test dnssec-lame detection with anchor point that is ok. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134802 20070829134802 2854 example.com. AJwwYIUGH7HgjehzPVkrVUFmFkSGGksGjUX+/zqpCOG9a/cgGC+n40I= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134802 20070829134802 2854 example.com. ABUu7ITHLl6vfuWzedIp03igXknUR1gYPBl8X6uIDrvraN1bjQJPXME= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ; the response is not lame at all. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134802 20070829134802 2854 example.com. AJwwYIUGH7HgjehzPVkrVUFmFkSGGksGjUX+/zqpCOG9a/cgGC+n40I= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134802 20070829134802 2854 example.com. ABUu7ITHLl6vfuWzedIp03igXknUR1gYPBl8X6uIDrvraN1bjQJPXME= ;{id = 2854} ENTRY_END ; response is not lame. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametonodata_nonsec.rpl0000644000175000017500000001743314010434640022263 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname to nodata ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY ; NSEC here ... SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFGtYzScyRnHV8U/jOIPYwrlI9t3oAhRF0PIf+IthUR7uCWIvskWp5CfReQ== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER SECTION AUTHORITY ; NSEC here SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER SECTION AUTHORITY ;www.example.net. IN NSEC example.net. MX NSEC RRSIG ;www.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. Z+3/WKJEqhWoMOQLC7Yb1dTVGaqzmU0bZ2cH9jSfNQZiT0O37yzCNNUmMsW4gsJOh3o61iZ+hxpze3aO3aedqQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN DS SECTION ANSWER SECTION AUTHORITY www.example.net. IN NSEC example.net. MX NSEC RRSIG www.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. Z+3/WKJEqhWoMOQLC7Yb1dTVGaqzmU0bZ2cH9jSfNQZiT0O37yzCNNUmMsW4gsJOh3o61iZ+hxpze3aO3aedqQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_stub_leak.rpl0000644000175000017500000000772714010434640020240 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 stub-zone: name: "example.com" stub-addr: 10.0.1.1 stub-zone: name: "example.net" stub-addr: 10.0.5.1 CONFIG_END SCENARIO_BEGIN Test stub zone leaking to the internet on last resort fallback ; root server RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ; root prime ENTRY_BEGIN MATCH qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net. IN A 193.0.14.129 ENTRY_END RANGE_END ; stub server for example.com RANGE_BEGIN 0 100 ADDRESS 10.0.1.1 ; subzone is delegated ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION subzone.example.com. IN A SECTION AUTHORITY subzone.example.com. IN NS sub-ns1.example.com. subzone.example.com. IN NS sub-ns2.example.com. subzone.example.com. IN NS example.net. SECTION ADDITIONAL sub-ns1.example.com. IN A 10.0.2.3 sub-ns2.example.com. IN A 10.0.2.4 ENTRY_END ENTRY_BEGIN MATCH opcode question ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub-ns1.example.com. IN A SECTION ANSWER sub-ns1.example.com. IN A 10.0.2.3 ENTRY_END ENTRY_BEGIN MATCH opcode question ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub-ns2.example.com. IN A SECTION ANSWER sub-ns2.example.com. IN A 10.0.2.4 ENTRY_END ENTRY_BEGIN MATCH opcode question ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub-ns1.example.com. IN AAAA SECTION AUTHORITY example.com. 300 SOA master.example.com etc 1 2 3 4 300 ENTRY_END ENTRY_BEGIN MATCH opcode question ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub-ns2.example.com. IN AAAA SECTION AUTHORITY example.com. 300 SOA master.example.com etc 1 2 3 4 300 ENTRY_END RANGE_END ; stub server for example.net RANGE_BEGIN 0 100 ADDRESS 10.0.5.1 ENTRY_BEGIN MATCH opcode question ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 10.0.5.1 ENTRY_END ENTRY_BEGIN MATCH opcode question ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION example.net. IN A SECTION ANSWER example.net. IN A 10.0.5.4 ENTRY_END ENTRY_BEGIN MATCH opcode question ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION example.net. IN AAAA SECTION AUTHORITY example.net. 300 SOA master.example.net etc 1 2 3 4 300 ENTRY_END RANGE_END ; stub server for subzone.example.com RANGE_BEGIN 0 100 ADDRESS 10.0.2.3 ; match anything, servfail ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION subzone.example.com. IN A SECTION ANSWER ENTRY_END RANGE_END ; stub server for subzone.example.com RANGE_BEGIN 0 100 ADDRESS 10.0.2.4 ; match anything, servfail ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION subzone.example.com. IN A SECTION ANSWER ENTRY_END RANGE_END ; stub server for subzone.example.com RANGE_BEGIN 0 100 ADDRESS 10.0.5.4 ; match anything, servfail ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION subzone.example.com. IN A SECTION ANSWER ENTRY_END RANGE_END ; fetch the delegation point for example.net in cache. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.net. IN NS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 10.0.5.1 ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION whatever.subzone.example.com. IN A ENTRY_END ; recursion happens here. ; the query should not leak subzone ns queries to the internet STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION whatever.subzone.example.com. IN A SECTION ANSWER SECTION AUTHORITY ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_no_edns.tdir/0000755000175000017500000000000014010434640017736 5ustar wouterwouterunbound-1.13.1/testdata/fwd_no_edns.tdir/fwd_no_edns.pre0000644000175000017500000000160314010434640022733 0ustar wouterwouter# #-- fwd_no_edns.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_no_edns.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/UPORT/'$UNBOUND_PORT'/' -e 's/TOPORT/'$FWD_PORT'/' < fwd_no_edns.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_no_edns.tdir/fwd_no_edns.conf0000644000175000017500000000036214010434640023073 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: UPORT use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@TOPORT" unbound-1.13.1/testdata/fwd_no_edns.tdir/fwd_no_edns.post0000644000175000017500000000045514010434640023136 0ustar wouterwouter# #-- fwd_no_edns.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_no_edns.tdir/fwd_no_edns.test0000644000175000017500000000077114010434640023131 0ustar wouterwouter# #-- fwd_no_edns.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_no_edns.tdir/fwd_no_edns.testns0000644000175000017500000000061614010434640023470 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname UDP DO REPLY QR AA FORMERR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 www IN A 10.20.30.41 www IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/fwd_no_edns.tdir/fwd_no_edns.dsc0000644000175000017500000000045314010434640022720 0ustar wouterwouterBaseName: fwd_no_edns Version: 1.0 Description: Forward retry with no EDNS CreationDate: Tue May 22 15:17:45 CEST 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_no_edns.pre Post: fwd_no_edns.post Test: fwd_no_edns.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/iter_reclame_two.rpl0000644000175000017500000000755314010434640020565 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterative resolve with two recursion lame servers. ; both servers are recursion lame. The iterator tries both servers, ; but they are both lame. Then it concludes that it only has reclame. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION lame.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION lame.example.com. IN A SECTION ANSWER lame.example.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; lame.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS lame.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 lame.example.com. IN A 1.2.3.5 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+012+60385.ds0000644000175000017500000000031414010434640020416 0ustar wouterwouterexample.com. 3600 IN DS 60385 12 3 c93b6fd6893d42ae60acd15088c2aeea0e0f013e535961855f17299507f70e0d ; xudef-ririt-kidaf-tebyp-vemep-segih-bydes-dyriv-pofab-zibaf-vigyh-numom-halac-lypin-hycaz-lofub-taxex unbound-1.13.1/testdata/Kexample.com.+008+01443.key0000644000175000017500000000036614010434640020602 0ustar wouterwouterexample.com. 3600 IN DNSKEY 256 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1443 (zsk), size = 1024b} unbound-1.13.1/testdata/autotrust_revoked_with_invalid.rpl0000644000175000017500000001007114010434640023560 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 07:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 07:46:40 2009 ;;next_probe_time: 1258967360 ;;Mon Nov 23 09:09:20 2009 ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1256370400 ;;Sat Oct 24 09:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with revoked key amidst invalid keys ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; revoked key and an unknown key example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55710 example.com. nu+W3T0afsJc2MrrsnBZ3adysi39TLUJ0o8GYaR/PFYsYSOigSCnr3xo05aKoNZ2oeQXhmwQVAxfwU1M/jXngQ== ;{id = 55710} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 16486 example.com. LDW5an/v6YzgUhpTm8VJnBCko56WDvzzoqCmjXBwpoGjWXThO2hUyO6w00K90swQvKwgIWsC4y00zFlOgLayJw== ;{id = 16486} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; set date/time to Mon Nov 23 09:46:40 2009 STEP 5 TIME_PASSES EVAL ${1258962400 + 7200} STEP 6 TRAFFIC ; do the probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 3200 ${timeout} 3600} STEP 9 ASSIGN tp = ${1258962400} ; the auto probing should have been done now. STEP 11 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$tp} ;;${ctime $tp} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 6 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1256370400 ;;Sat Oct 24 07:46:40 2009 FILE_END SCENARIO_END unbound-1.13.1/testdata/test_sigs.rsasha256_draft0000644000175000017500000000144614010434640021341 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test RSASHA256 signatures from draft-ietf-dnsext-dnssec-rsasha256-14 ENTRY_BEGIN SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY (256 3 8 AwEAAcFcGsaxxdgiuuGmCkVI my4h99CqT7jwY3pexPGcnUFtR2Fh36BponcwtkZ4cAgtvd4Qs8P kxUdp6p/DlUmObdk= );{id = 9033 (zsk), size = 512b} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. 3600 IN A 192.0.2.91 www.example.net. 3600 IN RRSIG (A 8 3 3600 20300101000000 20000101000000 9033 example.net. kRCOH6u7l0QGy9qpC9 l1sLncJcOKFLJ7GhiUOibu4teYp5VE9RncriShZNz85mwlMgNEa cFYK/lPtPiVYP4bwg== );{id = 9033} ENTRY_END unbound-1.13.1/testdata/Kexample.com.+005+60946.ds0000644000175000017500000000021714010434640020425 0ustar wouterwouterexample.com. 3600 IN DS 60946 5 1 f48a5c8c1eceb7df2d68d1ad29151a77d5650505 ; xutam-pulim-seles-votit-zorek-mygep-tipyc-hakol-luhik-hecib-hoxax unbound-1.13.1/testdata/black_ds_entry.rpl0000644000175000017500000005253414010434640020223 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacked key entry for DS and further queries ; a DS record fails. ; the blacklist action does not help. ; the further queries should not generate traffic to the authority any more. ; until the key entry expires. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 99 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 99 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.foo.com. IN A SECTION ANSWER ns.foo.com. IN A 1.2.4.7 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.foo.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 99 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ; make priming query succeed example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ;example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY ;example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. ;example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ;ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. ;example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} sub.example.com. 3600 IN RRSIG DS 3 3 3600 20030926134150 20030829134150 2854 example.com. AAT/7XwtMjHiT1GFHfV6Wvv4n+oOkqxllNdf9bLnpTHw/8h586yBgwg= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 99 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 99 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. g+YoDwrCF75YCFyqYoxlF+/mNfcscnuZ6LfmfBgPLohlvCCC7jYj/wkc2fxAl3MEK0CriWkHp1hw0QQYkmbbKw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. VCDq+gfZHuziE81Uypxm2va4eXCtoD8F8YKkwNo8laMNUcXh/hvGdbHKXMMghwuJXgxLh89Diu5kywBVwb/AIg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. l3wjlbDU2y7ECix6t1pp5Rtz+qFlADRMohcRsCrnD9b99IoOL0/cTpvvf2V1VTJveIibFGhbcHTuCqAQ4G4FKA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. l3wjlbDU2y7ECix6t1pp5Rtz+qFlADRMohcRsCrnD9b99IoOL0/cTpvvf2V1VTJveIibFGhbcHTuCqAQ4G4FKA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. eVe3iQS2/a1Y57AA2QSlMU/z31xaJ2mwUU36PZh8vlv6shPpQywAT70JdX6+ZsuliRpsbY6crkVXTXJ2qpKTiQ== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20030926134150 20030829134150 30899 sub.example.com. vEX2n1CksMr5jPq9d2BQJMIDwxaXdWlY5mYg+PBmOFI4xngFMKTsXa/+SfJy2SiqAgHTDI6joIo30AdQJsjdHA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. dBK6JOkKlp2G+f7mhInKnQM6DUBnEziTS+KpXzQ/5HT8/h9XkryOt4vAJKGCz0Ew3qRqjLgylsbGrcuxmIO9jA== ;{id = 30899} ENTRY_END RANGE_END ; ns.foo.com. RANGE_BEGIN 0 99 ADDRESS 1.2.4.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. hJ3nkrfyBwPcfpwc9wEwzhF5+ZKUddKBHQuZuHPZBjBwb1BsT7B7ryadttbGE3keQJiwNmK9AqvE0Zb+WkDceg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. qwUibvlPTFnxgiyCNtEJCYqJIgA8WFDqypmsO6TSYje2Rqhq4AaWEVxQwU4bdjmipCGVqtlP8mMyMQHaYNMGKA== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. sZQEMd0ys2mxPRajzBuvy4XdLNVvXMmJSnmfTHUL41d9IxbGN/ifpiIWs2MXOFPnbab05aYadrzZpT/cpDTxmQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END RANGE_END ; ns.sub.example.com. ; This is for after, so only new queries, no requeries allowed. RANGE_BEGIN 100 200 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ftp.sub.example.com. IN A SECTION ANSWER ftp.sub.example.com. IN A 10.20.30.46 ftp.sub.example.com. 3600 IN RRSIG A 5 4 3600 20030926134150 20030829134150 30899 sub.example.com. nbxk6SiooKsUeVm/ZGskrxKwhOSWdJt9ly9X6Hqji4DKpBskM6bqulmTt/xZ/3G4ZOguYBeiTp8qwlWjl7VoSQ== ;{id = 30899} ENTRY_END RANGE_END ; ns.example.com. ; fixed version RANGE_BEGIN 200 300 ADDRESS 1.2.3.4 ; DS request ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. AKslZ9oXcoyeOkPfGkTB3/hxnpdgU5ahzElLyK6B0n6+BdIXeirIEtE= ;{id = 2854} ENTRY_END RANGE_END ; ns.sub.example.com. ; fixed version RANGE_BEGIN 200 300 ADDRESS 1.2.4.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. ;sub.example.com. IN NS ns.foo.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. hJ3nkrfyBwPcfpwc9wEwzhF5+ZKUddKBHQuZuHPZBjBwb1BsT7B7ryadttbGE3keQJiwNmK9AqvE0Zb+WkDceg== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN A SECTION ANSWER ns.sub.example.com. IN A 1.2.4.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. fMRshSYDWgvGAwc24Lzg6746jnoG5shlK+o9CgzU7CQbkeNWmj3oO/0TJGP/zxp52JiDBpzRuTmBlrcJYV/gBA== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.sub.example.com. IN AAAA SECTION AUTHORITY ns.sub.example.com. IN NSEC nt.sub.example.com. NSEC RRSIG A ns.sub.example.com. 3600 IN RRSIG NSEC 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. qwUibvlPTFnxgiyCNtEJCYqJIgA8WFDqypmsO6TSYje2Rqhq4AaWEVxQwU4bdjmipCGVqtlP8mMyMQHaYNMGKA== ;{id = 30899} sub.example.com. IN SOA sub.example.com. hostmaster.sub.example.com. 1 2 3 4 5 sub.example.com. 3600 IN RRSIG SOA 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. sZQEMd0ys2mxPRajzBuvy4XdLNVvXMmJSnmfTHUL41d9IxbGN/ifpiIWs2MXOFPnbab05aYadrzZpT/cpDTxmQ== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER ENTRY_END ; no more outgoing traffic possible. STEP 110 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ftp.sub.example.com. IN A ENTRY_END STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION ftp.sub.example.com. IN A SECTION ANSWER ENTRY_END ; wait for timeout seconds. STEP 130 TIME_PASSES ELAPSE 901 STEP 210 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 220 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 10.20.30.40 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. deNzEy9Hq+6gDZhafC0M7UDuRBm51AA1/FAIauAitNuQlYUzOvWLVHFQ95bn308rCVPqrb4rFDV+gNzxkzm1rw== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_signatures.60000644000175000017500000000454214010434640020027 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; ldns-keygen (svn trunk 1.3.0, 15 april 2008) ; ./ldns-keygen -a DSAMD5 -b 768 nlnetlabs.nl ; Knlnetlabs.nl.+003+51124 ; nlnetlabs.nl. 3600 IN DS 51124 3 1 6f7e3ea1d525f3428ce342596f7375b1c3a71c51 ; Private-key-format: v1.2 ; Algorithm: 3 (DSA) ; Prime(p): 1kpY0hU98SJrpDCTKHv9TQyN6EGcY9FJ8bw0QiQdcm3nx3fkS298V9Y7ZRzjCQmkxVwNrwdhtNpz4MvrByHKy+YE/hSJamNhwKHAtiIAHNggqfutGQwUkfqHmybFO8Kx ; Subprime(q): 3GwgwvHRyOeXNgZqR/5XpaNs6Pc= ; Base(g): Rw1YckcZ/Es07FYrNV6soRTbcQ5NEDj7ITSUdGSLKRPQT0k4ofR3L8aslTeOJESR2s2sIay/ZHoYmdQuwLZ93HLEq5MooPO19c/GnVkOWZm1Ab9H7zttNcoKgzQ64dhT ; Private_value(x): OoN8CQisHVjCIET7B3WdAwERRro= ; Public_value(y): 08zY8i9l5qn1xC829beHq2Hhb8MUIvGHyW+eBchQa4S5XIRwf1rVpnw1iengslp/Y1Kx28/a9GEQbIESQORfxllPV23Uv2OJ3aNV0jP7kI2a7VLVSDSJrCh2wBCFj8tY ; DSA key from ldns tool ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN DNSKEY SECTION ANSWER nlnetlabs.nl. 3600 IN DNSKEY 256 3 3 BNxsIMLx0cjnlzYGakf+V6WjbOj31kpY0hU98SJrpDCTKHv9TQyN6EGcY9FJ8bw0QiQdcm3nx3fkS298V9Y7ZRzjCQmkxVwNrwdhtNpz4MvrByHKy+YE/hSJamNhwKHAtiIAHNggqfutGQwUkfqHmybFO8KxRw1YckcZ/Es07FYrNV6soRTbcQ5NEDj7ITSUdGSLKRPQT0k4ofR3L8aslTeOJESR2s2sIay/ZHoYmdQuwLZ93HLEq5MooPO19c/GnVkOWZm1Ab9H7zttNcoKgzQ64dhT08zY8i9l5qn1xC829beHq2Hhb8MUIvGHyW+eBchQa4S5XIRwf1rVpnw1iengslp/Y1Kx28/a9GEQbIESQORfxllPV23Uv2OJ3aNV0jP7kI2a7VLVSDSJrCh2wBCFj8tY ;{id = 51124 (zsk), size = 768b} ENTRY_END ; entry to test ; from ; ldns-signzone nlnetlabs.nl Knlnetlabs.nl.+003+51124 ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN SOA SECTION ANSWER nlnetlabs.nl. 10200 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. ( 2008040100 28800 7200 604800 3600 ) nlnetlabs.nl. 10200 IN RRSIG SOA 3 2 10200 20080513174626 20080415174626 51124 nlnetlabs.nl. MC0CFB3cRDHQROzkGp4NtLNc4jDA1lhWAhUAgsbb8VMxGqifShEzuCNgczxDHHg= ;{id = 51124} ENTRY_END ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN NS SECTION ANSWER nlnetlabs.nl. 10200 NS omval.tednet.nl. nlnetlabs.nl. 10200 NS ns7.domain-registry.nl. nlnetlabs.nl. 10200 NS open.nlnetlabs.nl. nlnetlabs.nl. 10200 IN RRSIG NS 3 2 10200 20080513174626 20080415174626 51124 nlnetlabs.nl. MCwCFEzgEjT0n/ooV/xZkRMzKNqeF4pkAhQxEPFtMt5LbIlsi9mSi0HS4+RZuA== ;{id = 51124} ENTRY_END unbound-1.13.1/testdata/iter_pcname.rpl0000644000175000017500000001207514010434640017522 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with parent child differ in names. ; the parent has an extra name that is the only working one. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. ; the working version. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; ns.example.net ; Broken. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ; now that the bad child NS record is in cache, ask something else. STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_mod.rpl0000644000175000017500000000427114010434640017035 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" module-config: "iterator" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test basic iterative resolve without validator module ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nodata_failwc.rpl0000644000175000017500000000560514010434640020672 0ustar wouterwouter; config options ; The island of trust is at nsecwc.nlnetlabs.nl server: trust-anchor: "nsecwc.nlnetlabs.nl. 10024 IN DS 565 8 2 0C15C04C022700C8713028F6F64CF2343DE627B8F83CDA1C421C65DB 52908A2E" val-override-date: "20181202115531" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "nsecwc.nlnetlabs.nl" stub-addr: "185.49.140.60" CONFIG_END SCENARIO_BEGIN Test validator with nodata response with wildcard expanded NSEC record, original NSEC owner does not provide proof for QNAME. CVE-2017-15105 test. ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 185.49.140.60 ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION nsecwc.nlnetlabs.nl. IN DNSKEY SECTION ANSWER nsecwc.nlnetlabs.nl. 3600 IN DNSKEY 257 3 8 AwEAAbTluF4BfJ/FT7Ak5a3VvYG1AqhT8FXxOsVwGTyueyE/hW+fMFMd QlLMf2Lf/gmsnFgn/p7GDmJBLlPTATmLeP3isvAZbK3MDEP2O5UjTVmt LZriTv8xfxYW6emCM54EQjWii64BFWrOeLm9zQqzyaLl53CbIIXqiacV KPteh8GX nsecwc.nlnetlabs.nl. 3600 IN RRSIG DNSKEY 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. q3bG4e8EtvXKDcNWcyYHeQxLF9l9aJKdmeSubyN6Qc3UVHugd6t3YSxD hlD+g43y7FcdnNHdAPh/jpgC4wtOb5J+5XAuESDHwesmIXOCTJjrb+A8 r+xQK+vsY8FhNZ2r81JZ/KQ/+TcCS5tbYeNZQgENduWAxgGiw3fdrMOV xiU= ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION _25._tcp.mail.nsecwc.nlnetlabs.nl. IN TLSA SECTION ANSWER SECTION AUTHORITY nsecwc.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 nsecwc.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. bYibpCDg1LgrnYJgVahgu94LBqLIcNs4iC0SW8LV7pTI1hhuFKbLkO2O ekPdkJAWmu/KTytf8D+cdcK6X/9VS8QCVIF5S0hraHtNezu0f1B5ztg3 7Rqy+uJSucNKoykueAsz2z43GMgO0rGH3bqM7+3ii8p2E2rhzqEtG/D3 qyY= ; NSEC has a label lenght of 3, indication that the original owner name is: ; *.nsecwc.nlnetlabs.nl. The NSEC therefore does no prove the NODATA answer. _25._tcp.mail.nsecwc.nlnetlabs.nl. 3600 IN NSEC delegation.nsecwc.nlnetlabs.nl. TXT RRSIG NSEC _25._tcp.mail.nsecwc.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20200101000000 20171108114635 565 nsecwc.nlnetlabs.nl. ddy1MRbshFuFJswlouNGHsZUF/tYu8BOCztY2JuHeTMyWL7rhRKp73q/ 1RAXMwywKsynT5ioY0bMtEQszeIEn29IYaPDHieLAobjF6BMu1kO7U2/ oEBrSHM/fx28BcaM5G4nfCIm3BlhQhWvk1NDHLn3Q26x4hF/dnmFOUet aXw= SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION _25._tcp.mail.nsecwc.nlnetlabs.nl. IN TLSA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION _25._tcp.mail.nsecwc.nlnetlabs.nl. IN TLSA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ldnsrr.50000644000175000017500000017610114010434640017147 0ustar wouterwouter@ IN SOA elektron.atoom.net. miekg.atoom.net. ( 2002120700 21600 7200 604800 3600 ) @ IN A 192.168.1.2 @ IN NS elektron.atoom.net. @ IN MD md.atoom.net. @ IN MF mf.atoom.net. @ IN MB mb.atoom.net. @ IN MG mg.atoom.net. @ IN MR mr.atoom.net. @ IN WKS 192.168.1.2 tcp domain 25 22 123 @ IN WKS 192.168.1.2 udp domain @ IN PTR ptr.atoom.net. @ IN HINFO "host" "info" @ IN MINFO machine.atoom.net. info.atoom.net. @ IN MX 10 elektron.atoom.net. @ IN TXT "text description of domain" @ IN RP miekg.atoom.net. net. @ IN AFSDB 12 atoom.net. @ IN X25 "x25 address in text format" @ IN ISDN "isdn address" @ IN ISDN "isdn address" "subaddress" @ IN RT 0 rt-host @ IN NSAP 0x47.0005.80.005a00.0000.0001.e133.ffffff000161.00 @ IN PX 2 map822 mapx400 @ IN NAPTR 100 10 "" "" "/urn:cid:.+@([^\\.]+\\.)(.*)$/\\2/i" . @ IN NAPTR 100 50 "s" "http+I2L+I2C+I2R" "" _http._tcp.gatech.edu. @ IN KX 10 kx-host ; requires additional section processing @ IN CERT PKIX 65535 1 ( AQOppkQvFlPFLiWZc0NXX5/QY44jphv3vfX0dscHNmTh Ntfx0TUgfBb1YQKJX6MNrzu/vvtV3xpLcCJ+tIP8ADDi MaUYT5Gh6kmn22V7FgHPlCHRJ+AcudQbeYgw1KCYS9D4 6oEvBR8mQ4HFTEkdWg+PETATQk77P1CmmURdogcmzZqZ Ier+VAs6uusIdxrmWeP8j2aYRvozdjvgzmHXSabDDxrn uIbnL4r4qAoc6Q9DAybYA7Ya52gtH06dFOkaQr1dvHu1 iJES16H0SL/OlhsOVrZmM1RFcwDGXcnxiKZ4TdtFeXQ/ 6VN3JegLR5t2FyKzoKYb4klpdZM8JVuVtc/n) @ IN APL ; RFC 1101-like announcement of address ranges for foo.example @ IN APL 1:192.168.32.0/21 !1:192.168.38.0/28 ; CIDR blocks covered by classless delegation @ IN APL ( 1:192.168.42.0/26 1:192.168.42.64/26 1:192.168.42.128/25 ) ; Zone transfer restriction @ IN APL 1:127.0.0.1/32 1:172.16.64.0/22 ; List of address ranges for multicast @ IN APL 1:224.0.0.0/4 2:FF00:0:0:0:0:0:0:0/8 ;; network LOC RR derived from ZIP data. note use of precision defaults @ IN LOC 42 21 54 N 71 06 18 W -24m 30m ;; higher-precision host LOC RR. note use of vertical precision default @ IN LOC 42 21 43.952 N 71 5 6.344 W -24.5m 1m 200m @ IN LOC 52 14 05 N 00 08 50 E 10.33m @ IN LOC 32 7 19 S 116 2 25.999 E 10m @ IN LOC 42 21 28.764 N 71 00 51.617 W -44.99m 2000m ;$ORIGIN blaat.nl. dotted\.label IN MX 10 "foo bar.nl" low.low.low IN DNAME rt-host redir IN CNAME cname.toom.net. highbit-\200\210\201a IN A 127.0.0.1 rt-host IN A 127.0.0.1 IN AAAA ::1 IN X25 "x25 address in text format" IN ISDN "isdn address" kx-host IN A 127.0.0.1 kx-host IN AAAA ::1 IN X25 "x25 address in text format" ;; NXT from rfc 2535 prev-nxt IN A 127.0.0.1 IN AAAA ::1 ; IN NXT bigger-nxt. A AAAA NXT IN NSEC bigger-nxt. A AAAA NXT ;; Insanely long TXT record IN TXT "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Vestibulum faucibus consequat ipsum," "vel pellentesque orci sodales sit amet." "Donec consectetur," "orci ut varius pulvinar," "mauris ante bibendum est," "vel pretium turpis massa auctor sem." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Morbi urna tellus," "ornare nec accumsan vitae," "rutrum id tortor." "Pellentesque non risus eu libero tempus consequat." "Suspendisse a mi elit." "Sed ultrices elit ut sem suscipit malesuada." "Cras sagittis nunc sed risus volutpat fermentum." "Aenean vitae magna lacus." "Etiam eu ligula purus." "Suspendisse eu dui sed ligula sagittis iaculis." "Suspendisse ut sodales orci." "Nunc sit amet sapien justo." "Sed molestie lectus vel lectus gravida bibendum." "In at enim quis lacus pretium tincidunt." "Sed eleifend," "lacus sed porttitor mattis," "erat nibh tincidunt lorem," "quis feugiat nibh dui ac erat." "Curabitur quis felis urna." "Nullam rhoncus," "arcu sed tincidunt posuere," "justo enim adipiscing arcu," "et suscipit tellus leo vitae elit." "Mauris gravida odio non quam tincidunt vel lobortis ligula faucibus." "Mauris vitae dolor at tortor congue imperdiet non id leo." "Proin in diam eu orci laoreet bibendum sed nec justo." "In nec ligula eu sapien suscipit vestibulum." "Etiam eleifend," "nibh vitae semper ultricies," "justo eros semper justo," "eget dictum nisi mauris et ligula." "Donec faucibus dapibus urna," "in ultricies lacus facilisis nec." "Pellentesque dapibus augue in sem pharetra accumsan." "Ut id ullamcorper elit." "Aliquam tellus orci," "lobortis nec molestie sit amet," "imperdiet quis lacus." "Praesent non congue nunc." "Quisque pretium pretium nunc," "nec convallis magna auctor nec." "Etiam accumsan eros sollicitudin augue posuere laoreet id sit amet orci." "Curabitur ut magna velit," "id adipiscing dui." "Morbi viverra vulputate vulputate." "Proin pulvinar justo sed tortor tincidunt id porttitor ipsum posuere." "Curabitur augue leo," "ultrices eget cursus sit amet," "fringilla non nisl." "Morbi et ante est," "non adipiscing mi." "Ut rutrum egestas scelerisque." "Pellentesque quis nisi orci." "In hac habitasse platea dictumst." "Donec sed tincidunt libero." "Proin porttitor placerat risus," "nec blandit sapien pharetra nec." "Phasellus eu risus quis mauris suscipit sollicitudin ut eu neque." "Duis odio lacus," "egestas in molestie adipiscing," "vulputate ut eros." "Nunc molestie orci sed turpis viverra volutpat aliquet mi vestibulum." "Sed interdum consectetur orci at consequat." "Curabitur molestie aliquam tellus," "id dignissim nibh porta sed." "Cras vestibulum orci hendrerit quam ornare condimentum." "Vivamus ultrices lacus ut lorem scelerisque vitae semper elit vulputate." "Aenean sit amet odio massa," "sed rutrum quam." "Ut lacinia enim nec orci rutrum dictum." "Curabitur id auctor ligula." "Nam nibh nulla," "interdum vitae suscipit eu," "porta quis ligula." "Proin lacinia sapien nec dolor viverra at suscipit orci tempus." "Phasellus scelerisque lobortis quam," "sit amet sagittis nibh ornare nec." "Donec sit amet tellus ac ipsum pharetra interdum." "Sed egestas velit et felis iaculis et dignissim est faucibus." "Suspendisse convallis scelerisque dapibus." "Nullam luctus lacinia nisl quis tristique." "Vivamus tincidunt vehicula sem sit amet ultrices." "Nulla arcu lectus," "vestibulum eu molestie in," "eleifend rutrum tortor." "Etiam ligula diam," "ultrices id malesuada vel," "varius ac dolor." "In sit amet sapien justo," "nec dignissim mi." "Vivamus vitae aliquam elit." "Vestibulum suscipit malesuada ipsum id dapibus." "Morbi ullamcorper pharetra velit," "in tempor mauris consequat non." "Praesent malesuada mattis nunc," "at auctor libero viverra id." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Vivamus convallis varius vulputate." "Donec eget tortor neque." "Nunc tempor mi quis enim euismod tincidunt." "Pellentesque et nibh magna," "id cursus enim." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Nunc nunc sapien," "semper in tempor in," "cursus iaculis sapien." "Nunc vitae mattis elit." "Aliquam ut nisl vel lorem porttitor ullamcorper at sed quam." "Mauris a turpis erat." "Pellentesque viverra ligula vel tellus pretium ac auctor nisi imperdiet." "Proin faucibus sagittis odio," "quis semper massa pellentesque ac." "Morbi condimentum nisi vitae libero convallis blandit." "Proin sodales odio arcu." "Suspendisse non venenatis diam." "Sed vitae adipiscing lorem." "Nullam augue felis," "gravida quis commodo ut," "dignissim vel quam." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Pellentesque fermentum nulla at dolor molestie semper." "Sed metus sapien," "mollis a commodo ac," "commodo sed sem." "Suspendisse feugiat elementum lacus," "vel euismod nisl aliquam non." "Curabitur vel auctor neque." "Phasellus et libero vel tortor vestibulum consequat ac in magna." "Nullam congue vestibulum massa," "quis suscipit turpis adipiscing id." "Nullam ullamcorper eros id ipsum vestibulum at pretium augue convallis." "Cras nec purus ac lectus iaculis commodo sit amet eget lacus." "Curabitur blandit molestie est at fringilla." "Praesent at dictum turpis." "Sed laoreet dapibus tellus et gravida." "Fusce vitae ante ut arcu laoreet sollicitudin." "Nulla mollis commodo orci sed mollis." "Ut eleifend aliquet tellus," "vel ultricies lorem luctus vitae." "Donec commodo ullamcorper massa," "at pretium magna fermentum vitae." "Nam rutrum aliquet suscipit." "Aliquam a massa vel odio vehicula semper a in tortor." "Pellentesque aliquam suscipit iaculis." "Donec sodales pretium massa sed tempus." "Phasellus velit urna," "commodo sit amet tristique id," "congue quis eros." "Ut vulputate magna aliquet leo porta id tempus nunc auctor." "Ut condimentum magna sit amet quam ultricies iaculis." "Aenean imperdiet facilisis tellus nec ornare." "Cras nec vulputate sapien." "Morbi ut dui ut magna sodales commodo eget id erat." "Duis erat nisi," "lacinia vitae imperdiet non," "egestas nec purus." "Pellentesque tempor," "erat ut eleifend condimentum," "ipsum lacus ultrices turpis," "a fringilla purus lectus semper nulla." "Proin id nulla mi." "Suspendisse vel sem lacus." "Ut rutrum eros id massa ultricies commodo." "Nulla eget adipiscing ante." "Nunc quis enim a justo pharetra commodo." "Nullam tortor tortor," "volutpat at commodo at," "consectetur sit amet erat." "Quisque pharetra turpis nec libero viverra quis rutrum nunc mattis." "Aenean sed lacus lectus." "Duis et odio tortor." "Aenean ullamcorper ultricies turpis sed volutpat." "Ut et est sem," "et ultrices turpis." "Pellentesque nisi felis," "dictum non tempor lobortis," "iaculis at enim." "Aliquam tellus elit," "volutpat ut tristique sed," "fringilla ac libero." "Duis rutrum quam magna," "ut ultrices ipsum." "Morbi id orci lectus." "Maecenas quis nunc at diam mollis congue." "Aliquam neque lorem," "lobortis sit amet commodo id," "feugiat mattis dolor." "Cras aliquam convallis adipiscing." "Vestibulum varius commodo pulvinar." "Suspendisse eleifend dictum lectus," "vel commodo nibh varius quis." "Phasellus sit amet nisi libero." "In aliquam purus ut mi mattis quis iaculis lacus porta." "Sed ultrices vehicula mauris sed ornare." "Maecenas gravida tincidunt sagittis." "Mauris id hendrerit eros." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Curabitur pharetra diam augue," "sit amet congue felis." "Praesent dignissim eleifend vulputate." "Sed nec vestibulum tellus." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum laoreet," "eros vitae rhoncus aliquet," "ligula turpis congue purus," "non convallis mi nibh eu purus." "Vivamus euismod facilisis lacus tincidunt rutrum." "Vivamus suscipit," "nisi sed semper iaculis," "libero sem pulvinar enim," "a aliquet purus urna ut nulla." "Donec ultrices luctus mauris," "in porttitor enim ullamcorper sit amet." "Morbi pellentesque auctor velit et egestas." "Fusce ac tincidunt massa." "Morbi a velit eget diam tincidunt eleifend." "Curabitur ornare lectus a quam blandit vel fermentum lacus dictum." "Donec vel turpis odio," "ac suscipit orci." "Nulla posuere convallis lacus venenatis feugiat." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Suspendisse potenti." "Suspendisse mollis neque ut neque gravida ut viverra mi ultrices." "Vestibulum at tempor sem." "Mauris vel leo libero." "Aliquam augue justo," "ultricies vel feugiat a," "vulputate sed erat." "Aliquam in ultrices quam." "Phasellus aliquam vestibulum odio at auctor." "Sed dapibus," "felis ac ornare dapibus," "magna dolor bibendum nisl," "eget luctus lacus magna et mauris." "Nulla ipsum augue," "tempor quis consectetur in," "iaculis non dolor." "Suspendisse consectetur felis ac nulla sodales rhoncus." "Maecenas velit ante," "lacinia at convallis quis," "iaculis quis tellus." "Suspendisse imperdiet aliquet dui," "posuere dictum justo fermentum sit amet." "Etiam ac ante diam." "Suspendisse quis dolor dui," "at mollis neque." "Aenean eu nisi lorem," "et ultrices mauris." "Nulla in augue libero," "non suscipit elit." "Cras rhoncus," "est ac fringilla varius," "erat ipsum gravida nisl," "at ornare dui nisi id mauris." "Nullam nec dictum leo." "Phasellus magna sapien," "sagittis quis suscipit quis," "bibendum in odio." "Cras sed ligula tellus," "sit amet fermentum felis." "Pellentesque suscipit feugiat enim," "vitae feugiat eros mattis pretium." "Cras nisi tellus," "placerat nec dapibus eget," "faucibus ac felis." "Proin tempus feugiat sapien," "nec mattis leo pharetra vel." "Maecenas dapibus mi dignissim ligula commodo et facilisis quam tristique." "Praesent varius lacus eu enim pellentesque gravida." "Nam rhoncus mauris pharetra eros vulputate at tincidunt massa fringilla." "Pellentesque in erat nec massa consequat ultrices." "Donec varius elementum leo," "non hendrerit justo tincidunt sit amet." "Donec ac libero augue." "Sed mattis turpis a sem ultricies consequat." "Aenean nunc dui," "commodo eget vestibulum ut," "rutrum in nisl." "Nam augue lorem," "tempor in porta at," "commodo ut ipsum." "Quisque adipiscing aliquet tincidunt." "Suspendisse potenti." "Pellentesque porttitor elit at leo hendrerit pretium nec eu turpis." "Curabitur in elit metus." "Aliquam risus erat," "posuere id adipiscing consequat," "dapibus vel eros." "Maecenas semper felis sed felis tristique varius." "Mauris tempus tortor et metus euismod pellentesque." "Pellentesque dui massa," "euismod non tincidunt id," "aliquet in elit." "Aenean vulputate sem elit." "Pellentesque at tempus magna." "Aenean elementum nisl id ante commodo placerat." "Nam sed mauris tellus." "Pellentesque nec orci nibh," "nec vulputate enim." "Aliquam erat volutpat." "Etiam dignissim justo a orci egestas mattis." "Vivamus ultrices sapien ac turpis venenatis tempor." "Suspendisse consequat volutpat fermentum." "Duis eu orci velit." "Sed placerat," "nisi sed aliquet tincidunt," "risus odio mattis nulla," "non sodales nunc nulla vitae mi." "Nunc consequat pharetra dolor at fringilla." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Vestibulum ultrices tellus quis nisl dignissim rhoncus eget et justo." "Maecenas vitae purus quis leo vehicula venenatis vel ut lectus." "Curabitur nec molestie nisl." "Vestibulum ullamcorper nulla non orci dictum quis lacinia est interdum." "Fusce eget sem risus," "sed volutpat augue." "Suspendisse potenti." "Sed luctus molestie augue," "a varius quam congue in." "Aliquam aliquet orci eget mi euismod consequat." "Ut et vestibulum ante." "Sed vitae metus elit." "Mauris lacus eros," "pellentesque eu vehicula semper," "dapibus consequat nulla." "Sed volutpat erat suscipit sem facilisis at adipiscing orci vehicula." "Pellentesque nisi nulla," "faucibus in rhoncus ut," "rhoncus eleifend turpis." "Aenean odio tortor," "ullamcorper id tincidunt nec," "rhoncus non mi." "Praesent interdum varius orci," "ut venenatis nibh mollis nec." "Ut placerat," "erat nec tincidunt pharetra," "metus lacus venenatis nunc," "et laoreet augue sapien vel lorem." "Sed sit amet viverra est." "Etiam rutrum," "purus ut ultrices aliquet," "neque magna luctus risus," "vel consectetur eros lorem ut odio." "Integer turpis elit," "consectetur ut suscipit sed," "gravida at lorem." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Morbi placerat accumsan malesuada." "Mauris porta," "lacus eget iaculis sagittis," "arcu sem lobortis nulla," "et tempus velit massa quis libero." "Fusce dolor nibh," "bibendum et adipiscing non," "eleifend et odio." "Duis elit eros," "hendrerit at porttitor vitae," "gravida nec arcu." "Praesent malesuada sapien a urna accumsan at hendrerit ipsum porttitor." "Mauris pharetra sagittis urna eu tempor." "Vestibulum purus leo," "pharetra quis ultrices ac," "semper nec erat." "Sed nec massa arcu," "sed tempus dolor." "Fusce vitae dictum eros." "Aenean vestibulum semper turpis," "iaculis auctor dolor vehicula ac." "In fermentum auctor pharetra." "Integer nec eros diam," "eget posuere leo." "Nam tristique," "nibh nec malesuada ornare," "urna odio porta mauris," "accumsan aliquet nunc lectus sit amet mauris." "Vestibulum nulla massa," "semper sit amet blandit sit amet," "venenatis eget sapien." "Vestibulum ultrices congue rhoncus." "Nunc lacinia dapibus imperdiet." "Nunc a eros sed urna pellentesque egestas non sit amet elit." "Integer dolor diam," "vulputate at tristique non," "venenatis in risus." "Sed lacinia luctus ipsum," "ac sagittis arcu molestie quis." "Phasellus pretium nulla quis quam placerat vitae commodo mi congue." "Praesent tristique laoreet elementum." "Praesent venenatis pretium dolor," "eu volutpat est scelerisque sit amet." "Praesent eleifend dictum vehicula." "Donec ullamcorper adipiscing ante ac elementum." "Integer dui nunc," "viverra at rutrum ut," "tincidunt vitae mi." "Donec nec risus id arcu porttitor placerat pulvinar at lacus." "Morbi ac velit sapien," "lacinia egestas nulla." "Mauris elementum dui ac libero ultricies consequat." "Nam non justo at tellus hendrerit rhoncus ultrices molestie augue." "Aenean elit purus," "tempor quis vehicula quis," "lobortis a odio." "Aliquam rhoncus varius lorem," "eu aliquet turpis rutrum a." "Nulla gravida gravida dui," "ac molestie arcu adipiscing vitae." "Cras diam mauris," "cursus vitae congue dictum," "adipiscing id erat." "Suspendisse ornare porta elit id hendrerit." "Praesent nec metus massa," "a egestas risus." "Donec pellentesque viverra diam sit amet pharetra." "Suspendisse lorem mi," "viverra eu auctor non," "volutpat et felis." "Proin id fermentum purus." "Nam eget mattis arcu." "Morbi bibendum rutrum euismod." "Donec aliquet hendrerit tincidunt." "Aenean eu sapien ut nunc dictum feugiat nec at lacus." "Duis commodo nisi nec tortor volutpat quis condimentum turpis aliquam." "Vivamus sollicitudin," "nulla rhoncus consequat posuere," "nisi nibh adipiscing felis," "aliquet porta arcu magna nec sapien." "Ut luctus interdum diam quis sollicitudin." "Ut semper magna sed neque hendrerit mattis." "Nullam turpis dui," "porttitor eget interdum id," "porttitor eu dui." "Ut accumsan," "tellus in eleifend imperdiet," "elit massa facilisis magna," "vitae feugiat tellus lectus eget tellus." "Mauris ac neque ac nibh ultricies imperdiet." "Ut urna lorem," "aliquet et mattis id," "suscipit a lectus." "Nam vehicula porttitor erat sit amet imperdiet." "Sed eu nunc id mauris mollis rutrum." "Pellentesque dui orci," "ullamcorper at fringilla eget," "sollicitudin eget nunc." "Quisque vel metus et enim placerat eleifend sed a leo." "Praesent pharetra hendrerit nibh scelerisque aliquam." "Duis tincidunt vestibulum congue." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Vestibulum non libero ligula." "Ut cursus mauris sed odio imperdiet vehicula." "In fermentum vehicula arcu," "ac commodo augue posuere sed." "Vivamus ultricies," "magna in aliquam suscipit," "tortor leo vestibulum dolor," "ut luctus odio diam nec lacus." "Phasellus et diam metus." "Cras fringilla nibh quis ante tincidunt in euismod leo luctus." "Nulla tincidunt erat sit amet erat viverra eleifend accumsan ligula luctus." "Quisque et risus enim." "Praesent vitae neque ut leo semper malesuada eu sed justo." "Duis pretium vehicula orci sed dignissim." "Cras nec magna in nulla laoreet vulputate quis at enim." "Nulla eget odio tellus." "In placerat massa et purus eleifend non fringilla neque fringilla." "Donec imperdiet ullamcorper nisl," "vel rutrum sapien rutrum a." "Duis luctus," "ante eu tristique commodo," "ipsum libero sollicitudin purus," "quis tempor nibh felis ac quam." "Nullam sodales vehicula elit," "eget egestas neque blandit in." "Mauris egestas faucibus elit," "id pellentesque nibh tincidunt id." "Nam vitae felis magna." "Donec tellus quam," "scelerisque vitae sollicitudin at," "gravida vel est." "Ut sodales velit nec dui sollicitudin a porta mi ullamcorper." "Cras sollicitudin egestas consequat." "Donec id tortor est," "eget tempor diam." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut ullamcorper gravida pharetra." "Proin diam nunc," "feugiat id interdum vel," "porttitor a nisl." "Aliquam aliquet orci sed metus egestas porttitor." "Morbi sollicitudin pulvinar enim." "Etiam tincidunt augue ut quam mollis ac imperdiet odio egestas." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Nunc at enim diam." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Aliquam lorem lectus," "suscipit at vestibulum ac," "scelerisque quis augue." "Morbi felis tellus," "porttitor quis pellentesque ut," "dictum ac nisi." "Integer sit amet massa vel augue lacinia dapibus non vulputate tortor." "Aenean ullamcorper sodales justo," "at fermentum libero sodales et." "Fusce vitae enim ut ligula volutpat placerat." "Pellentesque et mauris nibh," "non lacinia ipsum." "Phasellus ac nibh sit amet nibh vulputate rutrum." "Maecenas id nulla quam." "Maecenas euismod dolor in magna condimentum adipiscing." "Morbi elementum tincidunt mauris in mollis." "Pellentesque sagittis turpis id nunc tempor a eleifend turpis fermentum." "Sed faucibus interdum arcu," "at varius sem aliquet id." "Pellentesque vestibulum iaculis risus," "id dictum lorem gravida ac." "Quisque sagittis arcu vitae eros dapibus vitae convallis nulla mattis." "Nam id dui neque," "ut molestie velit." "Pellentesque pulvinar porta erat eu interdum." "Nunc metus massa," "vestibulum vitae egestas a," "fringilla et odio." "Quisque quis diam lorem," "quis pellentesque velit." "Mauris sapien risus," "suscipit nec vestibulum nec," "rutrum a risus." "Curabitur lobortis condimentum ultricies." "Duis quis dapibus turpis." "Nunc lectus elit," "facilisis at bibendum et," "vestibulum in arcu." "Morbi odio nibh," "feugiat quis tempor ut," "scelerisque ultrices nisi." "Curabitur a accumsan augue." "Integer aliquet porttitor nibh," "nec placerat est pharetra in." "Donec feugiat nisi et odio commodo interdum." "Vestibulum ullamcorper bibendum fermentum." "Fusce eu lacus eget metus malesuada feugiat eu vel erat." "Sed et erat tortor." "Morbi malesuada varius mollis." "Nam accumsan dignissim odio," "quis consectetur mi molestie eget." "Etiam iaculis," "enim eu placerat vehicula," "elit massa pulvinar tellus," "in cursus magna mi non quam." "Vivamus varius tempor semper." "Nulla adipiscing feugiat sollicitudin." "Etiam lacinia placerat dui nec varius." "In vitae metus mauris." "Vestibulum sed magna quis nibh ornare rhoncus ut vitae ipsum." "Duis ligula nunc," "fermentum sed suscipit non," "molestie vel purus." "Suspendisse potenti." "Proin arcu leo," "adipiscing at vehicula ac," "ullamcorper nec diam." "Proin pretium porta urna," "quis fermentum nisl pretium et." "Suspendisse a elit eu nisi molestie lacinia." "Cras at condimentum arcu." "Suspendisse potenti." "Sed ullamcorper ante sit amet urna aliquet ultrices accumsan neque ullamcorper." "Nam sit amet velit vel urna gravida suscipit sit amet non mauris." "Ut non neque arcu." "Praesent gravida sodales lorem," "vitae hendrerit purus bibendum non." "Nulla facilisi." "Mauris ornare," "sem eget tristique vestibulum," "augue metus luctus neque," "sit amet pretium lectus dui et augue." "Curabitur eu convallis turpis." "Ut est est," "vulputate auctor laoreet et," "iaculis eget massa." "Vestibulum ornare porta rhoncus." "Phasellus sagittis orci et orci blandit facilisis viverra leo consectetur." "Curabitur molestie nibh vitae nisi condimentum eget tempor nulla consectetur." "Ut arcu nunc," "mollis nec consectetur nec," "elementum tempus enim." "Nullam vel arcu massa." "In quis accumsan nibh." "Nullam id tristique neque." "Phasellus mattis interdum nisi quis viverra." "Morbi sollicitudin," "leo vel faucibus consequat," "ante est blandit nibh," "id sodales risus nunc ac ligula." "Nullam pellentesque diam nec urna fringilla malesuada." "Maecenas nisi lorem," "bibendum a condimentum in," "commodo vel tellus." "Proin at odio in ante lacinia sodales vel eget elit." "Curabitur eu fermentum est." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Praesent rutrum lectus ac velit consequat hendrerit." "In faucibus dictum mattis." "Sed a justo mi," "eu convallis nibh." "Integer commodo sollicitudin suscipit." "Curabitur vel leo vitae quam ultricies interdum et eget justo." "Proin ultrices lacus et metus vulputate ultrices eu non ligula." "Proin at velit in nisi malesuada lobortis." "Fusce est urna," "pulvinar ac venenatis non," "hendrerit non neque." "Donec id augue ac magna consequat porta." "Donec sed erat vitae velit vehicula rutrum." "Aenean pulvinar dui nec augue pharetra iaculis." "Quisque pretium risus vitae arcu feugiat ac posuere risus sagittis." "Nam diam erat," "rutrum ut interdum non," "laoreet at sem." "Sed enim elit," "tempor eget volutpat ac," "aliquet at sem." "Nunc in urna eu ipsum tempor pharetra eget vitae est." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Nulla ultricies," "ligula quis consequat posuere," "ante risus gravida est," "in pretium elit ipsum nec eros." "Mauris ac leo sit amet nisl rutrum mattis." "Donec facilisis enim eget mauris gravida lacinia." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Vivamus eleifend lacus non erat eleifend lacinia." "Nam vehicula vehicula ipsum ac ultrices." "Aliquam ut massa purus." "Aenean vel est vitae nulla tincidunt malesuada." "Aliquam eleifend," "arcu non tristique tempor," "dui ligula malesuada sem," "iaculis scelerisque magna massa quis quam." "Pellentesque libero mauris," "vulputate sed tincidunt vitae," "vehicula ac ipsum." "Mauris pharetra," "turpis eu tincidunt rhoncus," "quam tortor viverra est," "at pellentesque augue nibh ac nibh." "In ipsum dui," "ullamcorper vel semper quis," "semper id massa." "Phasellus non sem dolor," "at scelerisque tellus." "Curabitur velit augue," "pulvinar in aliquam id," "aliquet vel leo." "Fusce fermentum blandit nunc," "vitae tincidunt leo molestie condimentum." "Suspendisse ut gravida ipsum." "Curabitur vulputate," "mauris sit amet pulvinar sagittis," "ipsum enim feugiat enim," "et porta risus neque eget ante." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Donec eros dolor," "vehicula quis aliquam eget," "ornare id lorem." "Ut dolor lacus," "aliquet ut tempor et," "varius et nunc." "Cras consectetur massa vitae velit mattis a ultrices urna venenatis." "Praesent lacus mi," "bibendum a aliquet quis," "vestibulum non velit." "Proin sit amet elit felis," "eu malesuada justo." "Maecenas auctor urna metus." "Phasellus convallis velit id justo blandit venenatis." "Suspendisse convallis rhoncus orci," "a tincidunt quam varius a." "Fusce scelerisque aliquam odio ac sodales." "Aliquam in lectus arcu." "In vestibulum," "nisi et sagittis dignissim," "purus est feugiat risus," "ac accumsan ante purus in turpis." "Maecenas bibendum condimentum nibh," "quis fringilla quam imperdiet sed." "Nulla ullamcorper suscipit sem euismod rhoncus." "Curabitur lectus justo," "consectetur vitae viverra sed," "fringilla at nunc." "Aliquam justo tortor," "ornare vel rhoncus non," "eleifend sed purus." "Nullam posuere gravida magna," "egestas convallis tellus venenatis quis." "Mauris feugiat," "lectus nec rutrum placerat," "tellus augue convallis velit," "in mattis odio neque in urna." "Quisque quis urna at diam pretium iaculis ut sed dui." "Morbi nibh enim," "accumsan eu convallis et," "bibendum sed dui." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Etiam interdum turpis eu dui adipiscing sagittis." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "In hac habitasse platea dictumst." "Suspendisse sed libero enim," "et dapibus justo." "Aliquam commodo," "turpis sit amet venenatis facilisis," "nibh diam porttitor neque," "nec gravida massa odio a sem." "Morbi quis velit ligula." "Mauris interdum risus nec quam rhoncus eu bibendum mauris pulvinar." "Nunc id orci nec turpis lobortis luctus." "Praesent laoreet lectus vel leo malesuada interdum." "Quisque a mi ac eros mattis pharetra in a quam." "Sed scelerisque ligula vel tellus pulvinar suscipit sollicitudin odio vehicula." "In porta odio auctor justo commodo lobortis." "Nullam porttitor volutpat blandit." "In ut varius nisl." "Nunc pharetra porta luctus." "Mauris in mattis est." "In hac habitasse platea dictumst." "Maecenas sed convallis tellus." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut vehicula metus vitae ipsum hendrerit rutrum." "Nunc dolor nisl," "interdum quis ornare et," "tempor quis dui." "Donec tincidunt varius turpis non cursus." "Nulla lobortis," "lacus eget pellentesque sagittis," "urna elit rhoncus erat," "ac convallis ipsum sapien non lacus." "Morbi pellentesque ligula et velit tempus sagittis." "Morbi tincidunt interdum nunc non suscipit." "Cras faucibus interdum velit accumsan posuere." "Donec a augue risus." "Etiam viverra," "lectus sed mattis lobortis," "erat risus aliquet lorem," "eu semper libero nunc ac erat." "Donec at dui nisi." "Fusce dui tortor," "consequat eget egestas vel," "lobortis elementum mi." "Suspendisse blandit molestie urna vel mollis." "Nam aliquam volutpat bibendum." "Nulla id erat a lectus facilisis vestibulum." "Nunc dictum laoreet magna eu venenatis." "Duis facilisis justo nec enim vehicula nec rutrum purus vulputate." "Sed sollicitudin dui nec purus porttitor lacinia." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent nisl lacus," "rutrum ac congue eu," "scelerisque dictum ligula." "Fusce neque massa," "viverra sed suscipit sit amet," "posuere at ipsum." "Praesent scelerisque libero in nibh gravida sed consectetur turpis vehicula." "Fusce sapien velit," "vestibulum a aliquam in," "bibendum vel mauris." "Phasellus id porta eros." "Aenean nec ligula turpis," "ut tincidunt velit." "Cras commodo congue dui," "id gravida felis iaculis eget." "Nunc varius diam a purus elementum eleifend." "Sed viverra velit sit amet ante ultrices nec varius tellus aliquam." "Suspendisse ante nunc," "suscipit nec sodales ut," "rhoncus a ante." "Nulla risus neque," "fermentum in pharetra nec," "commodo rhoncus nulla." "Aenean fermentum," "ligula nec suscipit ultrices," "ligula neque rhoncus purus," "a mollis sem purus ut nunc." "Nunc aliquam ullamcorper lacinia." "Duis id velit lacus." "Cras convallis sodales vehicula." "Proin nibh nulla," "bibendum sed pellentesque vitae," "blandit vitae quam." "Curabitur et eros velit," "non vehicula sapien." "Suspendisse eu mi nec metus pellentesque egestas." "Curabitur a tellus purus," "ac dictum nisi." "Donec diam ligula," "tincidunt ut posuere vitae," "consequat at nisi." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Nulla auctor nisi sed metus tincidunt blandit." "Nulla facilisi." "Proin volutpat mi sagittis risus fringilla feugiat." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Vivamus sagittis," "metus et sagittis sodales," "massa leo elementum sapien," "id suscipit lectus ligula ac orci." "Nulla dignissim tristique justo," "vel volutpat turpis rutrum convallis." "Sed diam lorem," "ultricies a ultricies eu," "tristique vitae turpis." "Donec pellentesque consectetur tellus non sodales." "Nam id dolor arcu." "Pellentesque nisl eros," "gravida non aliquam auctor," "elementum et felis." "Quisque in pellentesque metus." "Morbi sed lorem non magna fringilla egestas vitae ut nulla." "Aenean vel ante id nibh tincidunt feugiat." "Ut diam lorem," "semper vel elementum ac," "faucibus suscipit nunc." "Ut ultrices pharetra pellentesque." "Sed malesuada," "nulla vitae luctus suscipit," "est ipsum viverra libero," "quis ultrices augue ante eget velit." "Aenean nibh libero," "elementum eget lacinia non," "faucibus ut arcu." "Suspendisse potenti." "Phasellus nisl ante," "faucibus sed aliquam non," "pellentesque vel orci." "Nulla facilisi." "Sed et mauris sit amet enim malesuada congue." "In hac habitasse platea dictumst." "Cras vitae velit a enim sollicitudin elementum interdum a diam." "Nulla purus lectus," "mattis facilisis pretium et," "consectetur ut tellus." "Cras posuere odio eget nibh lacinia ullamcorper." "Aliquam a enim purus." "Donec pharetra tristique magna," "sit amet varius erat facilisis et." "Nullam molestie nisi euismod orci ultrices in mollis tellus accumsan." "Ut placerat hendrerit porttitor." "Nulla sit amet quam risus." "Nunc diam dui," "adipiscing non cursus et," "pharetra sed mi." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Cras eget hendrerit mi." "Donec sagittis tincidunt nisi venenatis egestas." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Suspendisse ac felis erat," "ut placerat nisi." "Curabitur laoreet pellentesque erat sed porttitor." "Sed vel metus leo," "nec congue enim." "Vivamus elit orci," "ultricies ac sagittis nec," "porta a lorem." "Suspendisse volutpat facilisis turpis," "non dapibus mi scelerisque sed." "Ut id libero a lorem rhoncus sollicitudin non non lorem." "Integer erat purus," "laoreet eu pulvinar eget," "condimentum in tellus." "Nam et placerat purus." "Praesent convallis," "nisi id sodales pharetra," "nibh augue tincidunt elit," "sit amet tempor justo orci quis sapien." "Cras imperdiet ligula ultricies lacus vestibulum molestie." "Fusce non suscipit felis." "Aenean sed nisl quis mi dapibus auctor et eget sem." "Vestibulum luctus egestas diam nec aliquet." "Nunc suscipit," "risus non facilisis sagittis," "libero enim rutrum mauris," "at ullamcorper tortor nibh vel turpis." "Morbi sed nisl purus." "In hac habitasse platea dictumst." "Nulla orci dui," "consectetur id laoreet quis," "mollis in nunc." "Phasellus faucibus posuere magna eu semper." "Cras sem turpis," "mattis non pretium at," "feugiat eget lorem." "Mauris in orci nulla," "sed consectetur diam." "Pellentesque dignissim," "erat dictum gravida viverra," "est erat laoreet massa," "at porta sem mi a quam." "Mauris ultricies viverra velit in posuere." "Vestibulum et ligula eros." "Pellentesque eu orci nulla." "Proin lectus enim," "molestie a sagittis id," "elementum quis tortor." "Mauris et ligula ut ligula egestas porttitor nec quis sapien." "Duis nibh dolor," "pharetra eu mollis sit amet," "tempus ut tortor." "Pellentesque tristique mattis nisl sed commodo." "Praesent ut mauris mi." "Donec lectus arcu," "vestibulum tempus convallis in," "vestibulum eget risus." "Cras sit amet tristique metus." "Fusce sodales velit et purus imperdiet semper." "Donec a nibh tellus," "ut pharetra odio." "Proin tellus nulla," "malesuada vitae aliquet bibendum," "congue ut turpis." "Vestibulum vel purus elit," "sit amet tempus purus." "Praesent mi erat," "imperdiet at volutpat eget," "laoreet a purus." "Curabitur ultricies ultricies nisi," "et varius nisi auctor in." "Curabitur vehicula elit et erat imperdiet vitae euismod diam convallis." "Morbi mollis semper risus," "ac varius turpis faucibus et." "Nulla commodo ligula nec nulla blandit ut rhoncus quam semper." "Mauris arcu ligula," "dapibus vel blandit id," "ornare quis arcu." "Proin urna ligula," "dictum aliquet venenatis nec," "pharetra et est." "Donec libero lectus," "scelerisque eget pharetra nec," "scelerisque ut quam." "Integer mi tortor," "mattis a luctus sit amet," "consequat quis mi." "Praesent in orci a nibh cursus malesuada eu a magna." "Nam at ligula purus," "consequat eleifend dui." "Donec tristique velit id turpis ultricies fermentum." "In ut sem eu quam volutpat consequat ut eget augue." "Nam posuere nisl at lectus laoreet scelerisque." "Vivamus nec odio tempus nulla egestas iaculis." "Sed sollicitudin posuere sapien ac interdum." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Quisque aliquam," "massa ut vehicula placerat," "dui dui feugiat sem," "sed blandit sem augue non sapien." "Nulla sit amet justo diam." "Aliquam eget justo vitae lorem condimentum imperdiet a eget nisi." "Etiam quam nulla," "volutpat ac consequat quis," "volutpat ac orci." "Nam fermentum hendrerit pulvinar." "Aliquam erat volutpat." "Mauris sit amet viverra justo." "Cras eget sollicitudin turpis." "Donec congue pretium suscipit." "Nunc tempus tempor augue vitae mattis." "Aenean vel lectus a neque feugiat pretium." "Proin ac purus a nisi tincidunt auctor non eget justo." "Donec et bibendum ipsum." "Nulla facilisi." "Nam pellentesque lacinia fermentum." "Nulla eu ligula turpis," "a cursus dui." "Nullam porttitor molestie bibendum." "Aenean iaculis mi ultrices lorem viverra gravida." "Proin tortor mauris," "fermentum vitae pretium ac," "posuere quis augue." "Cras sodales," "felis sit amet sollicitudin euismod," "lorem dui fermentum nisl," "et vehicula quam enim et est." "Etiam ac dolor sed augue dictum ullamcorper non molestie leo." "Morbi tellus arcu," "imperdiet eget condimentum sit amet," "convallis sodales massa." "Ut id urna eu quam facilisis rhoncus." "Curabitur euismod," "augue ut fringilla congue," "odio risus vestibulum enim," "ac porta augue lacus quis dolor." "Sed dui orci," "rutrum commodo dapibus sed," "fermentum in libero." "Aenean id purus sapien," "in feugiat odio." "Nullam interdum suscipit odio eget vehicula." "Praesent interdum," "sapien vitae consectetur pulvinar," "mauris felis iaculis nisi," "vitae sagittis sapien velit ac neque." "Morbi a purus vel velit vestibulum ullamcorper a vel diam." "Nam nec dui non tellus tincidunt molestie." "Nam lacinia iaculis orci eget pulvinar." "Etiam ac facilisis massa." "Nulla sit amet luctus odio." "Aenean eget turpis turpis," "eget fermentum neque." "Phasellus id lectus nisi." "Suspendisse tristique scelerisque suscipit." "Integer vel nibh elit." "Duis sem justo," "bibendum vel hendrerit vel," "cursus non turpis." "In hac habitasse platea dictumst." "Vestibulum nec quam a dolor consequat fermentum vel in leo." "Donec vel lorem risus," "quis blandit felis." "Sed mollis ornare turpis," "vitae mattis risus mollis eget." "Praesent eleifend iaculis mauris." "Maecenas porta tincidunt egestas." "Quisque at sem leo." "Donec non enim vel risus suscipit vulputate." "Nam a diam placerat dui feugiat commodo at a tortor." "Fusce elit augue," "congue sit amet imperdiet id," "sagittis at quam." "Integer vestibulum felis vel nunc consequat bibendum." "Curabitur rhoncus lacinia risus," "sit amet semper urna elementum vehicula." "Nulla vel ante libero." "Maecenas sed orci non eros venenatis dapibus nec non nibh." "Aliquam erat volutpat." "Quisque aliquet auctor nulla at semper." "Aenean congue pellentesque ipsum." "Aliquam id ante vel eros facilisis consectetur." "Aenean a mi in orci bibendum mattis euismod eget elit." "In sed enim et quam tincidunt semper in quis augue." "Proin sed sapien id magna cursus tristique." "Nunc ac sapien augue." "Aliquam tempus leo ultricies magna interdum tincidunt." "Nulla porttitor gravida ligula in aliquet." "Duis mattis dui non sem vestibulum ac sagittis enim molestie." "Quisque sed dui ligula." "Nullam euismod aliquet enim id tristique." "Curabitur nec lectus consectetur nisi cursus vehicula." "Nulla fringilla vestibulum rutrum." "Quisque malesuada nibh vitae quam feugiat nec placerat eros ultrices." "Pellentesque id dui id nisl eleifend iaculis posuere ut tortor." "Integer eget dui risus," "eu auctor quam." "Aliquam sit amet orci placerat nunc blandit dictum." "Vestibulum nec interdum nisi." "Proin purus nisi," "viverra ultricies accumsan ac," "dignissim nec nulla." "Donec sit amet dolor nisl," "a scelerisque elit." "Phasellus ut arcu lectus." "Sed semper dapibus pellentesque." "Nam vitae urna nulla," "vel auctor orci." "Sed vel magna nibh." "Curabitur pretium imperdiet orci eu ultrices." "Vivamus quis metus pharetra nunc euismod rutrum." "Fusce massa nibh," "venenatis sed ornare at," "posuere sed mauris." "Sed tortor est," "tempor vel fermentum sit amet," "laoreet at nulla." "Proin eu dictum lacus." "Proin nec mattis lectus." "Aliquam semper semper tellus," "ac eleifend orci accumsan non." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Phasellus vitae tortor mauris," "quis blandit nisi." "Donec quis viverra lacus." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Maecenas imperdiet," "leo eu tincidunt gravida," "eros sem lacinia risus," "vitae viverra massa augue eget ante." "Suspendisse ullamcorper lacus ut est bibendum condimentum." "In eget semper mi." "Praesent tellus turpis," "mollis sit amet feugiat at," "gravida eget augue." "Sed ac lacinia massa." "Sed vitae malesuada lorem." "Vivamus pellentesque urna eget sem vehicula pharetra." "Curabitur tristique tortor eget mauris adipiscing semper." "Sed eu nisi vulputate arcu elementum imperdiet." "Morbi gravida est non ante accumsan bibendum." "Cras et lectus augue," "sed congue leo." "Praesent semper," "urna nec pharetra aliquet," "augue purus tristique neque," "eget convallis libero turpis sed mi." "Sed tortor tellus," "tempus ac ullamcorper tempus," "consectetur in dui." "Cras aliquam dapibus turpis," "ut ultrices ligula vulputate a." "Donec molestie porttitor mi," "placerat rutrum neque sodales id." "Fusce quis justo lacus." "Duis eget sem nisi," "ac consectetur augue." "Vestibulum luctus erat non lacus commodo vel tristique dui consectetur." "Mauris tellus nisl," "molestie eget porta vitae," "sagittis sed dolor." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Pellentesque vel odio eget sem aliquet scelerisque eget vitae nunc." "Fusce adipiscing sagittis libero," "quis placerat dui pulvinar eget." "Cras condimentum," "arcu tempor facilisis condimentum," "eros leo ullamcorper urna," "vel tincidunt velit enim eget eros." "Mauris et semper nulla." "Proin mollis sapien nec enim egestas aliquam vestibulum consectetur tellus." "Aenean ut nisl ut sapien iaculis auctor." "Pellentesque dolor tellus," "sodales eu elementum ut," "ullamcorper at nunc." "Vestibulum convallis ornare leo," "ac luctus eros dignissim commodo." "Suspendisse at elit sit amet urna placerat lobortis." "Donec fermentum libero lacus," "in placerat risus." "Nullam ut enim sapien," "nec blandit libero." "Donec in nibh fermentum lacus dapibus bibendum vel ac turpis." "Morbi rhoncus," "purus pharetra sagittis mollis," "lectus ante imperdiet magna," "in vestibulum urna nulla ac erat." "Duis dictum euismod vulputate." "Morbi odio augue," "ultrices a gravida sed," "elementum quis felis." "Nam scelerisque urna id justo dignissim placerat." "Sed convallis lobortis orci vel egestas." "Vestibulum ultricies felis in libero iaculis varius." "Aliquam erat volutpat." "Phasellus ac purus non elit malesuada auctor." "Donec ut sem id enim volutpat posuere." "Donec malesuada est sed odio ornare dignissim." "Cras vitae urna massa," "ut facilisis lorem." "In rutrum interdum lectus," "nec scelerisque tellus consequat pellentesque." "Proin eu molestie neque." "Integer sed enim lectus," "ac aliquet urna." "Phasellus sodales sollicitudin consequat." "Praesent vitae augue ante." "Sed id pellentesque leo." "Integer vehicula enim quis dui aliquet congue." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Curabitur gravida," "quam sed elementum eleifend," "velit nulla dictum est," "ut malesuada augue ligula id dui." "Maecenas bibendum tristique ipsum," "eu gravida elit commodo sed." "Fusce metus tortor," "accumsan ac feugiat id," "volutpat sed tortor." "Vivamus tincidunt mi non purus volutpat ultrices." "Praesent eget metus eu sem tempus pellentesque." "Etiam faucibus sollicitudin dapibus." "Donec tempor massa sit amet mi posuere ullamcorper." "Vestibulum ac dolor ut urna ultrices volutpat." "Integer ipsum urna," "congue tempus vehicula eu," "sodales sit amet velit." "Proin adipiscing urna ut eros sodales vulputate." "Nam faucibus auctor justo non luctus." "Suspendisse ac augue sed augue viverra congue." "Nam ligula erat," "eleifend eu semper eget," "pharetra laoreet nunc." "Phasellus tempor eros a ante tincidunt ultricies." "Fusce sit amet est tristique lacus pharetra tristique." "Pellentesque orci est," "tristique quis tristique id," "imperdiet at neque." "Vivamus ut rutrum mauris." "Nullam sit amet quam turpis," "ut fringilla enim." "Duis sagittis accumsan risus." "In eget risus vel mauris pharetra laoreet nec id arcu." "Cras mollis," "mauris et sagittis laoreet," "est dui hendrerit urna," "at tempor nulla mauris sed odio." "Cras sed hendrerit orci." "Curabitur eros sem," "pretium vel iaculis vel," "accumsan in enim." "Proin mattis," "ligula tincidunt sagittis rutrum," "mauris dui consectetur erat," "ac hendrerit quam risus at purus." "Cras ac ante id libero congue semper at id tortor." "Cras non risus sit amet erat porta dictum sit amet in justo." "Phasellus vel justo odio." "Donec scelerisque varius ligula id bibendum." "Nullam turpis ligula," "fringilla ac semper a," "iaculis a sapien." "Vestibulum in est venenatis metus malesuada lacinia quis id justo." "Vivamus faucibus luctus semper." "Etiam mattis ullamcorper magna," "sit amet faucibus est malesuada euismod." "Duis libero nisl," "molestie a iaculis in," "convallis eu nunc." "Nullam sit amet lorem at purus ullamcorper rutrum sit amet eu orci." "In vel nulla in elit convallis varius nec a lacus." "Nunc ac nunc nisl," "quis condimentum risus." "Donec tempus facilisis odio ac rutrum." "Etiam sed mollis tortor." "Sed ac lorem at urna lacinia porta." "Curabitur vestibulum metus eu augue viverra et accumsan augue ornare." "Phasellus mollis mauris erat," "ut vestibulum arcu." "Praesent pretium condimentum nisl," "id rutrum quam mattis ac." "Nunc vitae arcu leo," "sit amet pretium dui." "Mauris vehicula velit sem," "lobortis cursus tellus." "Ut eleifend dapibus tellus," "in euismod ipsum dapibus at." "Nulla convallis blandit nunc quis lobortis." "Praesent placerat mattis mauris," "sed luctus nisi ultricies vel." "In tristique laoreet tortor sed porta." "Aenean hendrerit orci non est viverra sit amet blandit lorem scelerisque." "Nulla in nulla lacus." "Pellentesque ac enim quam," "id aliquet justo." "Suspendisse diam metus," "placerat eu volutpat ut," "euismod non erat." "Phasellus luctus odio vel orci dapibus sed varius lacus aliquam." "Sed tincidunt feugiat diam vel ornare." "Fusce quis volutpat magna." "Cras malesuada elit at leo fringilla imperdiet et sed libero." "Morbi sit amet tincidunt ligula." "Ut id tempus tellus." "Vestibulum id rhoncus risus." "Ut non magna a lorem semper hendrerit." "Cras vulputate cursus eros," "sit amet tincidunt ligula rutrum fringilla." "Cras mauris nisl," "fringilla sed egestas vel," "accumsan non mauris." "Integer commodo," "tellus consequat mollis pulvinar," "dui elit faucibus arcu," "in lacinia nisi mi eget ligula." "Nulla malesuada semper tortor eu lacinia." "Vestibulum at varius sem." "Vivamus posuere ligula ac tellus faucibus lobortis." "Maecenas sagittis arcu in odio sodales aliquam." "Mauris at felis augue." "Donec venenatis interdum cursus." "Vivamus ante mauris," "dignissim sit amet laoreet vel," "vehicula vel arcu." "Sed facilisis nulla sit amet massa posuere faucibus." "Aliquam elementum elementum felis lacinia vehicula." "Maecenas metus justo," "viverra et pulvinar ut," "venenatis a mauris." "Duis eu ultricies elit." "Donec gravida condimentum magna," "sodales eleifend risus fermentum eget." "Nunc elit urna," "elementum in adipiscing sit amet," "cursus in dui." "Cras at risus non ligula scelerisque scelerisque dictum sed lorem." "Sed semper lorem id magna consequat ut ultricies nunc consectetur." "Suspendisse vehicula," "erat sit amet tempor auctor," "augue risus interdum nunc," "eu adipiscing tortor nisi tempus sem." "Etiam malesuada ipsum ut lectus ultrices faucibus." "Curabitur tellus tellus," "pretium vel accumsan nec," "eleifend nec elit." "Cras semper fermentum ipsum," "sit amet gravida lectus hendrerit non." "Nullam pretium velit vel dolor suscipit in blandit nisi scelerisque." "Curabitur viverra ipsum vitae odio placerat pulvinar." "In cursus elit id turpis aliquam ornare." "Donec consequat turpis feugiat elit tempor sed lobortis arcu aliquam." "Curabitur sit amet sagittis purus." "Curabitur tincidunt arcu sed odio suscipit elementum." "Sed ut nibh a ante adipiscing auctor eleifend a nisi." "Proin sollicitudin sollicitudin blandit." "Ut commodo auctor imperdiet." "Fusce eleifend," "neque non ullamcorper elementum," "felis ipsum cursus libero," "et bibendum augue mi sed ligula." "Curabitur sodales euismod diam vitae dictum." "Maecenas vestibulum," "mi non commodo sollicitudin," "massa quam iaculis odio," "vel tristique tellus nibh vitae tortor." "Vestibulum ut odio eget nisi ultricies auctor ac vitae lorem." "Sed eu lorem elit." "Aliquam erat volutpat." "Suspendisse fermentum nulla lorem." "Morbi eleifend dolor a ligula feugiat vulputate." "Curabitur laoreet auctor quam," "at tincidunt metus cursus in." "Nam aliquam volutpat porttitor." "Aenean id cursus eros." "Vestibulum vel neque diam," "non posuere quam." "Quisque leo sapien," "fermentum quis congue vel," "fringilla vitae arcu." "Mauris semper turpis ac libero volutpat dapibus." "Duis nisi enim," "faucibus eget tempus at," "ultricies nec tellus." "Cras id lectus nisl," "id cursus orci." "Etiam sapien nisl," "mollis sit amet volutpat vel," "volutpat nec nisi." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Nunc ac purus nec leo vestibulum porttitor a blandit arcu." "Proin nec rhoncus neque." "Pellentesque vestibulum pharetra vestibulum." "Sed molestie elit eu dui mollis varius." "Etiam porttitor dictum mi." "Maecenas suscipit sagittis nunc nec porta." "Sed et arcu sit amet sapien convallis vestibulum." "Cras egestas accumsan accumsan." "Quisque accumsan tortor et erat mattis sollicitudin." "Sed molestie turpis eget sem tincidunt nec convallis mi congue." "Etiam ac egestas lorem." "Proin sollicitudin est nec sem vehicula tincidunt." "Proin quis purus ut nisl dapibus euismod." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Nunc lacus ante," "rutrum sed lacinia ut," "fermentum id purus." "Nulla facilisi." "Suspendisse sed lectus nec libero lacinia aliquam." "Sed id ipsum sapien," "id varius ipsum." "Vestibulum at nulla mi," "eget accumsan nibh." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Donec lobortis ultrices iaculis." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec placerat eros ac arcu pellentesque laoreet." "Praesent sagittis pellentesque dictum." "Nulla in metus eget metus vulputate tempus." "Mauris dictum elementum commodo." "Donec tellus est," "suscipit iaculis venenatis ut," "pulvinar sit amet turpis." "Mauris et elit non magna consectetur bibendum." "Mauris pellentesque dui eu libero consectetur fringilla." "Aenean vel ipsum urna." "Maecenas pulvinar sollicitudin magna molestie interdum." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Mauris viverra pretium tortor eget gravida." "Integer commodo molestie turpis quis elementum." "Aenean placerat," "purus eu rhoncus ornare," "ligula nulla consequat dui," "vitae scelerisque augue massa pulvinar quam." "Suspendisse ultricies ultricies neque sit amet luctus." "Ut bibendum leo a lectus blandit eget hendrerit ligula consequat." "In hac habitasse platea dictumst." "Cras tempor," "eros non posuere pulvinar," "magna nisi consectetur lacus," "in ullamcorper ante lectus non justo." "Sed porttitor libero vel nisl bibendum dapibus." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Fusce vitae faucibus mi." "Etiam in libero lobortis nisl lobortis lobortis blandit ut dolor." "Morbi auctor iaculis nulla at venenatis." "Morbi augue nibh," "lobortis ut bibendum id," "pretium nec felis." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Maecenas molestie," "ante nec porttitor bibendum," "tortor tortor aliquet arcu," "sit amet tempus ligula diam sit amet felis." "Phasellus semper posuere augue id rhoncus." "Cras dolor tellus," "posuere id varius in," "hendrerit eu tellus." "Proin vitae turpis non nulla ullamcorper tristique." "In hac habitasse platea dictumst." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed justo quis diam lacinia imperdiet nec eu tortor." "Nullam at quam non metus pretium luctus in ac dui." "Vivamus libero nibh," "adipiscing et tristique non," "accumsan quis sem." "Aliquam condimentum ligula eu lorem sodales fermentum." "Suspendisse ac urna vitae est pharetra vulputate at vel lacus." "Sed vel lorem consequat sapien tristique dignissim." "Praesent sodales fermentum est id iaculis." "Sed sollicitudin ullamcorper suscipit." "Morbi felis massa," "ultricies ac ultrices in," "malesuada volutpat sapien." "Vestibulum vitae egestas arcu." "Suspendisse ac facilisis dui." "Sed lobortis eros ac est adipiscing laoreet." "Nullam urna arcu," "dapibus quis commodo vulputate," "dictum aliquet mi." "Morbi sit amet erat sit amet velit pellentesque aliquam." "Sed eu arcu turpis," "ut vulputate quam." "Nullam ultrices condimentum tortor quis scelerisque." "Morbi lacinia lacinia metus," "vel elementum ante pharetra at." "Fusce mollis magna vel nisi gravida ut fringilla tortor rhoncus." "Aenean aliquam feugiat sapien ac euismod." "Nullam non est tortor." "Pellentesque vestibulum porta lorem ut adipiscing." "Nunc eget enim et dui pellentesque egestas." "Suspendisse ornare mollis odio," "tincidunt tincidunt sapien egestas non." "Cras vulputate," "nisi sit amet vehicula facilisis," "sapien neque adipiscing nisi," "at volutpat est nibh euismod ipsum." "Maecenas scelerisque elementum leo," "eget semper libero auctor a." "Proin vel odio sit amet tortor adipiscing facilisis non vel elit." "Aliquam eget leo libero," "sit amet vulputate est." "Maecenas ut turpis nec est tincidunt rutrum." "Nam laoreet," "justo in dictum tincidunt," "nisi est porttitor diam," "eget pretium libero est dictum odio." "Fusce justo felis," "tempor vitae mattis sit amet," "pretium sagittis sem." "Mauris risus erat," "volutpat sit amet aliquam cursus," "ultricies a nulla." "Aliquam at erat felis." "In imperdiet lacinia purus at luctus." "Suspendisse rutrum lacinia ullamcorper." "Vestibulum tincidunt sodales sollicitudin." "Aliquam sit amet velit purus," "in venenatis nisl." "Vivamus vitae magna quis nisi varius imperdiet ut quis tortor." "Ut pulvinar," "mi a volutpat blandit," "justo tellus tincidunt massa," "id vulputate elit nunc at risus." "Integer venenatis rhoncus enim." "In pretium adipiscing justo," "sed scelerisque urna fringilla sit amet." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam placerat," "est nec ornare convallis," "ante lacus vestibulum quam," "sit amet interdum magna purus ac eros." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam at adipiscing turpis." "Curabitur lobortis velit ut ligula commodo lacinia." "Nullam pellentesque," "velit in convallis consequat," "ipsum massa malesuada lacus," "sit amet sodales odio enim vitae mauris." "Integer eget risus quam." "Maecenas quis risus sit amet risus egestas pulvinar." "Proin nec consectetur est." "Praesent ultricies felis a nisi aliquet pulvinar." "Quisque nec elit at lorem porta malesuada." "Phasellus ac nulla eros," "eget egestas lectus." "Proin a lacus orci," "ornare vehicula posuere." ;; RFC 6742 host1.blaat.nl. IN NID 10 0014:4fff:ff20:ee64 host1.blaat.nl. IN L32 10 10.1.2.0 host1.blaat.nl. IN L64 10 2001:0DB8:1140:1000 host1.blaat.nl. IN LP 10 l64-subnet1.blaat.nl. ;error1 IN NID 1 00fg:4fff:ff20:ee64 ;error2 IN NID 1 00ff:4fff:ff20 ;error3 IN NID 1 00f0 ;error4 IN NID 1 00ff:4fff:ff20:ee64:67 ;error5 IN NID 1 00ff:ff2056:ee64:67 ;error6 IN NID 1 :::1 ;; RFC 6844: CAA caa IN CAA 0 issue "ca.example.net" caa IN CAA 0 iodef "mailto:security@example.com" caa IN CAA 0 iodef "http://iodef.example.com/" caa IN CAA 0 issue "ca.example.net; account=230123" caa IN CAA 0 issue "ca.example.net; policy=ev" caa IN CAA 128 tbs "Unknown" caa IN TYPE257 \# 70 020461757468303E3039060A2B06010401D679020301060960864801 65030402010420614829C81B958911F81164D40DCDBFD49D66CEB3B3 442FF6C9C3A912F9497566020100 ;; RFC 7043: EUI48 and EUI64 eui48 IN EUI48 00-00-5e-90-01-2a eui64 IN EUI64 00-00-5e-ef-00-00-00-2a ;error.eui48 IN EUI48 00-00-5e ; too short ;error.eui48 IN EUI48 00-00-5e-90-01-2a-ef ; too long ;error.eui48 IN EUI48 00-00-5e-9r-01-2a ; non-hex ;error.eui64 IN EUI64 00-00-5e-ef-00-00-2a ; too short ;error.eui64 IN EUI64 00-00-5e-ef-00-00-00-2a-ef ; too long ;error.eui64 IN EUI64 00-00-5e-ef-r0-00-00-2a ; non-hex ; Tests for Unbound ; the text strings should be identical, with () and without (), parse test. txt1 TXT "a" "bb" "ccc" txt2 TXT ( "a" "bb" "ccc" ) txt3 TXT "a b" "bb" " cc c " " " txt4 TXT ( "a b" "bb" " cc c " " " ) ; LOC tests abbey.example.com. 3600 IN LOC 40 32 24.716 N 105 4 25.770 W 1208.00m 600000m 2000m 1m abram.example.com. 3600 IN LOC 40 32 24.716 N 105 4 25.770 W 42849672.91m 1000m 500000m 2000m addie.example.com. 3600 IN LOC 90 0 0.000 S 180 0 0.000 E 42849672.91m 9000000m 9000000m 9000000m addie.example.com. 3600 IN LOC 90 0 0.000 S 180 0 0.000 E 42849672.91m 90000000m 90000000m 80000000m alfrac.example.com. 3600 IN LOC 40 0 0.000 N 105 0 0.000 W 1208.64m 1m 10000m 1m allspec.example.com. 3600 IN LOC 40 32 24.716 N 105 4 25.770 W 1208.00m 600000m 2000m 20m curtin.edu.au.example.com. 3600 IN LOC 32 7 19.000 S 116 2 25.000 E 10.00m 1m 10000m 1m rwy04l.logan-airport.boston.example.com. 3600 IN LOC 42 21 28.764 N 71 0 51.617 W -44.00m 2000m 10000m 1m cambridge-net.kei.com.example.com. 3600 IN LOC 42 21 54.000 N 71 6 18.000 W -24.00m 30m 10000m 1m loiosh.kei.com.example.com. 3600 IN LOC 42 21 43.952 N 71 5 6.344 W -24.00m 1m 200m 1m morefrac.example.com. 3600 IN LOC 40 0 0.000 N 105 0 0.000 W 1208.64m 0.30m 5m 4m negative.example.com. 3600 IN LOC 40 0 0.000 S 105 0 0.000 E -9978.85m 1m 10000m 1m pipex.net.example.com. 3600 IN LOC 52 14 5.000 N 0 8 50.000 E 10.00m 1m 10000m 1m nohpvp.example.com. 3600 IN LOC 40 32 24.716 N 105 4 25.770 W 1208.00m 600000m 10000m 1m nominnosec.example.com. 3600 IN LOC 40 0 0.000 N 105 0 0.000 W 1208.00m 1m 10000m 1m nosec.example.com. 3600 IN LOC 40 32 0.000 N 105 4 0.000 W 1208.00m 1m 10000m 1m noszhpvp.example.com. 3600 IN LOC 40 32 24.716 N 105 4 25.770 W 1208.00m 1m 10000m 1m ; Tests for TXT quotes and parenthesis txt5 TXT Test-String"Test-String" txt6 IN TXT ("v=DKIM1; k=rsa; g=*; s=email; h=sha1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC33ewKxBZARSAPbT96IpW/k3DgdNuFEb896eIf80HcVxWw+w2G+1sQcUjxWUSGp6yTTMEls6n7tthixidyRiE/aWOy3ic/K+927PuCy0M1ZX2QY8gVmOHJbYT3qBQ8toQrvGIer8fQqqJIzO/ATVbHxX8B/z0PsmGI2xxqCyXkOw""IDAQAB;") example.com. 3600 IN CSYNC 66 3 A NS AAAA 9fe6cbb9e933ad0b8b4fa94066474e091ee8be696c224b1c1678fcec._openpgpkey 3600 IN OPENPGPKEY \# 2221 ( 99020d044d6cf351011000ae2731a071cae66040331dcfffbc1abaea01fba2b3 341ad29f4191e1e2e47514cc595e5d3b59ebd460db81cb04e98a753dae963543 74b8c3a420364960a6c6875e66cea7216327c16996557c4d13e25e236b3714e9 32795be889e8b33a295faf6d9015474cfe9c2643603f1e91e01334011a841909 8e2fc9807285b2195cdbb1a9ae1916a26b9e33b3f91cde2f728aa133464a1099 fc2beecaf8f67ee03a999aa97be89ce4a252f804ce27a9efb7a631ca956bfa99 c51d6beca52af39a93353aac43097671074a4bb5b039eb86e99209989d5b6a4a e22b32c1605e712072926095b4640db4b4d16b54a8139048e25ef0098781e524 4222df9b6a6bf2335942527356a29e1063c5bc1297c051ab969a3e0c01fb15e2 0ea63a06b416d6c96f9794c5d80e97afb249d2b907dc46605f1001019dd62774 4bc2ad73f239cd623f945bf9922ec6ceb607ce8818455173199de1ef555bf3e8 5e9702dcab7a30e5e6c0f6827ce6d550df2ba4fa6ef2ed47bceb916aded25a72 7039a09942a0684897cdf2efc13f5169693c19da94d861be40e8b07fe853d297 8389eba876332be7db146f1ec6a957bfe39ac90514b1f870a5d899bb4e1d97af 49294ad09dede6d5a04abdc29332bbe74cf70393b626c0f4fdfef6ee2b01d8a6 a40750c446e159b44d0a783611585385ba912b771364b6eda8a69680026a6bf2 105692fd6f9a6cf19e09550011010001b42357696c6c656d20546f6f726f7020 3c77696c6c656d406e6c6e65746c6162732e6e6c3e89023e0413010200280502 4d6cf351021b23050909660180060b090807030206150802090a0b0416020301 021e01021780000a0910e5f8f8212f77a4985d5b0ffe289b97f7d8e4e5abc537 8b7d6db7c395f98c3d787e3fb598638c41e889aea40cbe5b3001d947c7184c92 9efe6ad1e32ae9acb0802823870bb149c3a7bdfbb591601d8c099b3bdd3b3ddc cb03b4d611dc741d9c49c3b5b87654a21dfb618cfe6087f172b3dc663a9f4c0d ad81476ebe5b6fd966164383bc39303a66272a3fe6a0b9a813d4e249c6b9dacf 748a49a979b3fa24036e47099e1d24ed3310cc04341e0bf3afd4e365a04cd075 b7d1dff607a3b8738abf885a7dc959251785ca626b8c9b476f44439653615437 c715b1a586236132e1f89b0e4a9d2d84e403e6733c90a96ec041d14994b19ec0 d23153bb94d9059851901353ddb60b9c42edf715af6ee4ef111e5afd56092a1f 7662a72af80f8768425324a8a7335c805a49b1c4d3dc279b69114a5c592638ff 22a963bd34d2d4bcc319972b99c197fa31c21b89e627f36ce811297ff707f53e 6c258dab407b7d618ec296317a565c2c8b740a39244d8f82095842f6f84448dc e29bb292c7e15072b00c04f2a0f4cd700f2e7348b703f74bcb8d5f4235fbd282 4f515852ea9be06255f88d81a5046d1f730e9bf103b3335f5f03d74ac2ec6581 4dd920e985b57a3b4e0c699f3103ab033ccf36a5b037b3668365484b58a4462d 79414d27170c9db4285bec72d24a9654354b996d13c14b2994f6725e36fb766d 57a79ed721c3ca248221390d7d6fa65f867fa6fa1369b9020d044d6cf3510110 00a4ece215b3f782bae8fb6c1e3fdc06d1e6242271f41b073fc7a85237788814 7b7168134e0b753c608d07308f188b9489af34f1dab1bb52fc3968d0a705c30a 35ea0226e7d2608931138d56ccf124a9236276462863a8f1c83b3a640167211d eaaadfc557ff7701cbb1d413259cf3f5b18ec6e615000bb4ab73c75b980615cf a9a7778de3bab318cc448eca044e3fdc95ac63aa2b28846d77fe190fe8fbc3a0 3ece39d38675040ff1be064410faad9fc5a8c2efe02f34cc39f3087d6b2e9346 42995fd5a9f2d3a59302c0cbe1fea01002c7eb64c8c4e5f853b5b17aebc7c722 97380b8df9ec7f32f1766b3d76e186dc582eedd5da955b7cacdb4cca69e99e9b 25d22b157a68c9f828170917709d335a000590f2be22fd7a5ed0ff2432969642 e84978428c1a3c8380bb339d21ce9cb8ce8f4d6bc102b70a56042159f26c85f7 8599f931a73fe159cf4ae34c828e66fe84f648af745b5d2b1022d514901a8e48 c1cdae82205fe21a58cab77bbc8c1dd32a94aaf4954e7695f05b7c40a395e07f 34ee0add218904fcd380bb737be2ec5b148942840c58abfa212c10ad6debb265 23aa040dad2191397deb472f0dbeeceb6afb386b7166754a47216c3629f63633 a02c5fd1c116e46c8a682a163426e556ea5c0ecdb472429c0d51bea5e583f889 e70f831251e8b31c231d2f946de8c31a6550f884ea961dfdf75a2c3e366ad48c b5001101000189022404180102000f05024d6cf351021b0c050909660180000a 0910e5f8f8212f77a498ed740ff8e1cd5baa631d75dff18a2aa27def9c416118 d178092a1c327c3cc641fd74bc976f3a1b5da52b95cfea68618b31f2aaee6f82 f30ed934eb98de0105878a4814fc811139ed4b3aa356e3c962c422f0be4d3d59 f8e9e64913964287282a6519cd0b1f3f03615aea223b276efcbc5cd4921787c1 7f70b0967aefdcc5462344399b4180efd75c1185a83d6b691e660f8210e76624 f1a87d988baf9367d26b84dcb5df8c7303c2947c4c238734addccb7970f6c192 f3f5dd5f75127e289f26b2fda0562b44a032ed45ae1fc855dca67d54125ccd36 c16f207e4389b0f4e5ff45fe60328a53b322534868ff0d3d8aca0bb0781ee1fe 62f2c0e6fc468f57ccf795ced9f2b27e3cb6d16fc417bd4ca969a364dc649ea5 c57f0325205eaa77fd9df84431c3be5329773828d0e32c0011cbb885e7131b44 b1fc5267b0b3ff125e7255c233239fc6e8c8844d613dab76833e49a7d947fae6 b3ceb35b2ddce2a0f71f384f74fecda521ae07ce3332e5eb2c79d100ad8f9ace 2a0067c1b590f61dd18ab021d66605aa745b5944d830de4c9f61dcc889354b1a 6203d918a5c2317b6d5f188d8d0cf6dab11c9578f6f41d3089871bbb2963b114 59ab0b4c4220ddafb14c20ecbacab1cec60a522ecc883bd1d539ca61cdd4933c 412fafd631d03eff23b23a4164729e32236947f622fe79a17493154e9a30b257 e3fdf97f0b2e1b8c65fc85bd98) test.add.1. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480584899 300 16 lkEJsjwBeAdfv9RGs6zZrg== 15355 NOERROR 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585012 300 16 k9mSMs2t5vq5FV2DvQvR6g== 59231 NOERROR 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480523776 300 16 sBfx00GRs+tfRTm4uRCjyQ== 25791 0 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585449 300 0 59692 BADSIG 0 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585462 300 16 6wvlG82sEVHyqsTtBLvRQw== 26044 NOERROR 0 unbound-1.13.1/testdata/val_cnametodnametocnametopos.rpl0000644000175000017500000003642714010434640023174 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" trust-anchor: "example.org. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname, dname, cname, positive answer ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.org. IN A SECTION AUTHORITY org. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION org. IN NS SECTION ANSWER org. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.org. IN A SECTION AUTHORITY example.org. IN NS ns.example.org. SECTION ADDITIONAL ns.example.org. IN A 1.2.3.7 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.sub.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFEv1gOb7KEskzkJNtFKKVBxY+Hb2AhUAqKJDIZJvNl+AdzqAt+JgdvnYAF0= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.net. IN DS SECTION ANSWER SECTION AUTHORITY sub.example.net. IN NSEC www.example.net. DNAME RRSIG NSEC sub.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. PsKlcOSNElUi3u7Cn6c5+Sv8CRLTqmooMbvloTwUCkM53SuAirXcCA+9Pz5y0unO9+5IxwdkwssnoCOX5FqnCQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.net. IN A SECTION ANSWER sub.example.net. IN DNAME sub.example.com. sub.example.net. 3600 IN RRSIG DNAME 5 3 3600 20070926134150 20070829134150 30899 example.net. G/UmcL1VmCF2mjB1O9IeNM2DnvayxEy6vOrvA+Ic/Gqcsgnq/f4VTCV9soQQIAWEir2v5Vt8hqPDP8rCRbMnyA== ;{id = 30899} www.sub.example.net. IN CNAME www.sub.example.com. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN CNAME www.example.org. www.sub.example.com. 3600 IN RRSIG CNAME 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. ZE6A4pkyeUpNCscu2oeBv/3JbbirdwUaAMgmQ/ighzacUJCC6Lh8vAL5aYDEyTk7oktb8uS7gmYan171aM9/tg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.org. RANGE_BEGIN 0 100 ADDRESS 1.2.3.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.org. IN NS SECTION ANSWER example.org. IN NS ns.example.org. example.org. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.org. MCwCFAE1sQemdwqUPt4Qo+mr59a66DlFAhRV1mftIFs2YnkmIWsGtikIOJvh5A== ;{id = 2854} SECTION ADDITIONAL ns.example.org. IN A 1.2.3.7 ns.example.org. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.org. MC0CFQC0yXaA8ywsZF+7dHukVIBFD820wQIUONbyI+UX9SDSDFmFnr+ApuTEooY= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.org. IN DNSKEY SECTION ANSWER example.org. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.org. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.org. MC0CFBCSESiUl5XEht/LRecGFuX2Xad7AhUAoURP4DsIEbwMjlB955vziIB798E= ;{id = 2854} SECTION AUTHORITY example.org. IN NS ns.example.org. example.org. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.org. MCwCFAE1sQemdwqUPt4Qo+mr59a66DlFAhRV1mftIFs2YnkmIWsGtikIOJvh5A== ;{id = 2854} SECTION ADDITIONAL ns.example.org. IN A 1.2.3.7 ns.example.org. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.org. MC0CFQC0yXaA8ywsZF+7dHukVIBFD820wQIUONbyI+UX9SDSDFmFnr+ApuTEooY= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.org. IN A SECTION ANSWER www.example.org. IN A 11.11.11.11 www.example.org. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.org. MC0CFB/erEAxSMqW0I51r6VQMq861B+yAhUAqJ7DPU7xHFpWJGILOQ0WW3aDGi0= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN CNAME www.sub.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFEv1gOb7KEskzkJNtFKKVBxY+Hb2AhUAqKJDIZJvNl+AdzqAt+JgdvnYAF0= ;{id = 2854} sub.example.net. 3600 IN DNAME sub.example.com. sub.example.net. 3600 IN RRSIG DNAME 5 3 3600 20070926134150 20070829134150 30899 example.net. G/UmcL1VmCF2mjB1O9IeNM2DnvayxEy6vOrvA+Ic/Gqcsgnq/f4VTCV9soQQIAWEir2v5Vt8hqPDP8rCRbMnyA== ;{id = 30899} www.sub.example.net. 0 IN CNAME www.sub.example.com. www.sub.example.com. 3600 IN CNAME www.example.org. www.sub.example.com. 3600 IN RRSIG CNAME 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. ZE6A4pkyeUpNCscu2oeBv/3JbbirdwUaAMgmQ/ighzacUJCC6Lh8vAL5aYDEyTk7oktb8uS7gmYan171aM9/tg== ;{id = 30899} www.example.org. 3600 IN A 11.11.11.11 www.example.org. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.org. MC0CFB/erEAxSMqW0I51r6VQMq861B+yAhUAqJ7DPU7xHFpWJGILOQ0WW3aDGi0= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_adcopy.rpl0000644000175000017500000001147514010434640017360 0ustar wouterwouter; config options ; The island of trust is at example.com server: #trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator AD bit sent by untrusted upstream ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA RA AD NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA RA AD NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD AD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; ask from cache too STEP 21 QUERY ENTRY_BEGIN REPLY RD AD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 23 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_missing.rpl0000644000175000017500000003337414010434640021044 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with missing key ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 , 55582 is missing RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. ddH76HLQaMMN8O8BWuI9LxFzFOH0iVpdOJg2anl6xvNAnZH0Xtdi/KedsNolEx0EOHFrGrU7dH8w7Ag6sMDUpA== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. fRitjw2TEF+5i17ksiKZNBOGbYiqKKCUXywafBwfcOLiEKr8dapSPQLJst09FjEooRqc3Ii1YbBaL7pbdqfqOw== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 30899 example.com. TfFGz1kDtkn3ixbKMJvQDZ0uGw/eW+inIiPqQVPQtO2WiocKrnYnzwv/AqwnFvEar70dF15/zffNIF+ipOS5/g== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 60946 example.com. X0Ci//w0czN/J5RvypHGqp56n1tLdapi92ODAqjM7QpZXbSHaJ7wfPG1PZzvdxHUZUVyf8uy2stjg/XoLGHMWA== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${10*24*3600} STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t3} ;;${ctime $t3} ;;last_success: ${$t3} ;;${ctime $t3} ;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=3 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 11 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${11*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, the old key is removed from storage STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} FILE_END SCENARIO_END unbound-1.13.1/testdata/fwd_timeout.rpl0000644000175000017500000000104714010434640017557 0ustar wouterwouter; config options go here. forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Forwarder and a timeout happens on server query. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; But the pending query times out! ; OUTBOUND_MSG_RETRY times timeout. STEP 2 TIMEOUT STEP 3 TIMEOUT STEP 4 TIMEOUT STEP 5 TIMEOUT STEP 6 TIMEOUT ; returns servfail STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION REPLY SERVFAIL QR RA RD MATCH all www.example.com. IN A ENTRY_END SCENARIO_END unbound-1.13.1/testdata/10-unbound-anchor.tdir/0000755000175000017500000000000014010434640020611 5ustar wouterwouterunbound-1.13.1/testdata/10-unbound-anchor.tdir/10-unbound-anchor.pre0000644000175000017500000000156714010434640024472 0ustar wouterwouter# #-- 10-unbound-anchor.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." get_random_port 2 PETAL_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "PETAL_PORT=$PETAL_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test get_make (cd $PRE; $MAKE petal) # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT 10-unbound-anchor.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start https daemon $PRE/petal -v -a "127.0.0.1" -p $PETAL_PORT >petal.log 2>&1 & PETAL_PID=$! echo "PETAL_PID=$PETAL_PID" >> .tpkg.var.test cat .tpkg.var.test sed -e "s/@TOPORT@/$FWD_PORT/" < 10-unbound-anchor.conf > ub.conf wait_ldns_testns_up fwd.log wait_petal_up petal.log unbound-1.13.1/testdata/10-unbound-anchor.tdir/signit0000644000175000017500000000070614010434640022034 0ustar wouterwouter# PKCS7 sign it #infile=127.0.0.1/no_more_keys.xml #outfile=127.0.0.1/no_more_keys.p7s infile=127.0.0.1/root.xml outfile=127.0.0.1/root.p7s set -v openssl smime -sign -in $infile -out $outfile -inkey test_cert.key -signer test_cert.pem -outform DER -binary || echo "could not sign" openssl smime -verify -content $infile -in $outfile -inform DER -CAfile test_cert.pem || echo "could not verify" openssl pkcs7 -print_certs -inform der -in $outfile -text unbound-1.13.1/testdata/10-unbound-anchor.tdir/keys/0000755000175000017500000000000014010434640021564 5ustar wouterwouterunbound-1.13.1/testdata/10-unbound-anchor.tdir/keys/test_cert.key0000644000175000017500000000237514010434640024301 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIDfAIBAAKBwQC48GhhmIU66TZKc3QiyF4L5bsm8Aly/y2SzLP+GACepK0OcOtD i2sXrTtoJDvGOPZ9ICqmIy8u/Q/cK26txNEeZFcClLcYF/U+NaqjEwrwkHEIgc3g 8qnKrhzM61I8foAWVT7cqxFHDKYuClNITXk1i//Yzpnf9wvVKQ51W9UOtm/WA7g4 IDHCuAjocyyNC3B7XqYawFDOsdMI4ZW7hC0hIRQOvBkvbvY8WxmsSkdd30u1KmoI Sg4y6OvnikrEEQkCAwEAAQKBwQC3hQlv37RF82sGkm8qnP6Ge+AuEYCu9v44cJ4k hZkH1I5OiEtN6anKAwOyolIWsCwZmrP3zW5jCIiWiRr5oReLOzMEwqK2a//XTdYY oSr38b3ZHUY59VP8Zq75woMGuNed35kAmGxzDRP1gI/TmvTvaHlqYyvxBtxnZJij Za1CrT+a9JvR6hI8xXrE33CF0T6JO1v3v0HeBuve5+83cCHKo+GyqIBjL3FJgefZ EsPz6rGnPDKTYgMyaljFV3LI5ikCYQDlaBnyiWk1C7tYO5x3CRoHoiuiiREZCncK QkSxjiDoSP0rc+3BQp2kG3yy6S9mN4qMQPELEtBa6bORogxNK+Pxg8TRI/+xgeFt bod5Bd4pfl6Y5hXm21JwELFlOzPI3PMCYQDOYK6Z7vegiOJyyAJXMjcI07H8S0Gr SZW8f4tHRzO+RrRpR5ANzarELX7nF/Qj5mPXiZNiiMDGocxqkNzIa5HFLOqBhRkv o7yC1Cj582dUBFHyEbsZxR6UMTPLdE3UaRMCYACC1Nv3dmaJ2ib+KwEQ4h/2Ooao K4OUxGMfdqu2l1gtIXNBVNxDW7qL3SFA57wgj4x0cJUHu7MYJjBC3igl2uIk2wFk RSOOGIR35JFec/o/r9JDYPUcs/hP8TU6hokCBQJgHbH/rZqa+vh3TPjGjXFmRdjg JWNWwaTG7OaVTd5K7bgSwYtQiQvs5Gl/dxUVRg0ilKLxGB6BTpN9bGAHxLbltK9v 1s8l/praxyBr/PsvBQHSILi4aU7ZxY0G3OGRSV0NAmBx28Msdgc0yHh3qSkbwVEr gr7av1iOH73ee+o4CmMWXYUBHOMW5Su0s0QHjNGDMiRiRoCvzYqdLcJj9/sFJxOT CM35WGGeKDMNubX7C6YroQ91q7kUmhi7HHY3QOyhCDU= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup0000755000175000017500000001234214010434640026002 0ustar wouterwouter#!/bin/sh # # unbound-control-setup.sh - set up SSL certificates for unbound-control # # Copyright (c) 2008, NLnet Labs. All rights reserved. # # This software is open source. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # Neither the name of the NLNET LABS nor the names of its contributors may # be used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. # settings: # directory for files DESTDIR=/usr/local/etc/unbound # issuer and subject name for certificates SERVERNAME=petal CLIENTNAME=unbound-anchor # validity period for certificates DAYS=7200 # size of keys in bits BITS=3072 # hash algorithm HASH=sha1 # base name for unbound server keys SVR_BASE=test_cert # base name for unbound-control keys CTL_BASE=unbound_control # we want -rw-r--- access (say you run this as root: grp=yes (server), all=no). umask 0026 # end of options # functions: error ( ) { echo "$0 fatal error: $1" exit 1 } # check arguments: while test $# -ne 0; do case $1 in -d) if test $# -eq 1; then error "need argument for -d"; fi DESTDIR="$2" shift ;; *) echo "unbound-control-setup.sh - setup SSL keys for unbound-control" echo " -d dir use directory to store keys and certificates." echo " default: $DESTDIR" echo "please run this command using the same user id that the " echo "unboun daemon uses, it needs read privileges." exit 1 ;; esac shift done # go!: echo "setup in directory $DESTDIR" cd "$DESTDIR" || error "could not cd to $DESTDIR" # create certificate keys; do not recreate if they already exist. if test -f $SVR_BASE.key; then echo "$SVR_BASE.key exists" else echo "generating $SVR_BASE.key" openssl genrsa -out $SVR_BASE.key $BITS || error "could not genrsa" fi if test -f $CTL_BASE.key; then echo "$CTL_BASE.key exists" else echo "generating $CTL_BASE.key" openssl genrsa -out $CTL_BASE.key $BITS || error "could not genrsa" fi # create self-signed cert for server cat >request.cfg <request.cfg <5ª£ ðqÍàò©Ê®ÌëR<~€U>Ü«G ¦. SHMy5‹ÿØÎ™ß÷ Õ)u[Õ¶oÖ¸8 1¸ès, p{^¦ÀPαÓá•»„-!!¼/nö<[¬JG]ßKµ*jJ2èëçŠJÄ £0 0 U„0  *†H†÷ Áš|¬æÏ0Õu¡r1«¶)ð ÛX$‡I1ólfãZHF@€‰3—gÉgc{/ŠŽûØOf”adu§Yǃ2w¸A|H¿4@„*Ï:“Ø4Š6âŸM*ÙÚ¾†Ã#PöðñížEKÀYÜ ô’ €«ƒI`Q97¶ªãvMO’=¦ƒ4üïRgÔÌÃIœÌøÒ×.:ôHò›Ì"Þàº: ™”A¼A¿¢Hï— Ù4L#B6t] 1‚ô0‚ð030&10 Upetal10 *†H†÷  petal ÞX"K‚¼—ù0 + Ø0 *†H†÷  1  *†H†÷ 0 *†H†÷  1 130117115308Z0# *†H†÷  1ƒôÜ@Ϭš¬€WÞý¿õé§C0y *†H†÷  1l0j0  `†He*0  `†He0  `†He0 *†H†÷ 0*†H†÷ €0 *†H†÷ @0+0 *†H†÷ (0  *†H†÷ À=õrú> ç%B1õÎ3ˆLÇ‹ÕáÍ#pR31üo=¯„Ù¼zg[&Ú!–]‡?àrÔ#9_Tû·&yö7múGHÚßÎHÁpò”¢DÍUMÖ+ù¦²ã:1#97ýÙ§Ð>½£ŽÑÁ“-vôªÏ (ßEYÆxåCS3.0÷"sõ¢©›D »%[|Ã3j"4b™8.dê=ëÑ\›–¬Û073 Ã6ÄÕüÀT@åÎ-bdÈå³rzSÓunbound-1.13.1/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s0000644000175000017500000000221514010434640024701 0ustar wouterwouter0‚‰ *†H†÷  ‚z0‚v1 0 +0  *†H†÷  ‚]0‚Y0‚‚  ÞX"K‚¼—ù0  *†H†÷ 0&10 Upetal10 *†H†÷  petal0 130117115245Z 321004115245Z0&10 Upetal10 *†H†÷  petal0ß0  *†H†÷ Í0ÉÁ¸ðha˜…:é6Jst"È^ å»&ð rÿ-’̳þž¤­pëC‹k­;h$;Æ8ö} *¦#/.ýÜ+n­ÄÑdW”·õ>5ª£ ðqÍàò©Ê®ÌëR<~€U>Ü«G ¦. SHMy5‹ÿØÎ™ß÷ Õ)u[Õ¶oÖ¸8 1¸ès, p{^¦ÀPαÓá•»„-!!¼/nö<[¬JG]ßKµ*jJ2èëçŠJÄ £0 0 U„0  *†H†÷ Áš|¬æÏ0Õu¡r1«¶)ð ÛX$‡I1ólfãZHF@€‰3—gÉgc{/ŠŽûØOf”adu§Yǃ2w¸A|H¿4@„*Ï:“Ø4Š6âŸM*ÙÚ¾†Ã#PöðñížEKÀYÜ ô’ €«ƒI`Q97¶ªãvMO’=¦ƒ4üïRgÔÌÃIœÌøÒ×.:ôHò›Ì"Þàº: ™”A¼A¿¢Hï— Ù4L#B6t] 1‚ô0‚ð030&10 Upetal10 *†H†÷  petal ÞX"K‚¼—ù0 + Ø0 *†H†÷  1  *†H†÷ 0 *†H†÷  1 130117115511Z0# *†H†÷  1ú<ñN@@Øý·Zâ[‹e¥O”0y *†H†÷  1l0j0  `†He*0  `†He0  `†He0 *†H†÷ 0*†H†÷ €0 *†H†÷ @0+0 *†H†÷ (0  *†H†÷ À{Q„°žê¾ w2z8yåפR× Ý°‚Ÿ:û]“3ƒ¦A@úz4Fñ"¿¬ DdÕeü3ëVötP¹ µôwX€¯ ܳ¦K£fAÊnÁ•c½) ˜ó11>¥Ée-B>EßË/^6!N‚öNe9Ä´ç4ªÁ3ÛgV4uÄX ­ ·Ïm¡£“ O†i¯ È}ÿ… ëCWdG¶hJJPr?=8†Îoª‹–W^æ‰(›n‘$MåTŠ{î¸unbound-1.13.1/testdata/10-unbound-anchor.tdir/127.0.0.1/root.xml0000644000175000017500000000061214010434640023261 0ustar wouterwouter . 37348 5 1 b56a31943f14faa31224d147f8b1107b78598eb2 unbound-1.13.1/testdata/10-unbound-anchor.tdir/127.0.0.1/bad.xml0000644000175000017500000000061214010434640023024 0ustar wouterwouter . 37348 5 1 b56a31943f14faa31224d147f8b1107b78590000 unbound-1.13.1/testdata/10-unbound-anchor.tdir/127.0.0.1/bad.p7s0000644000175000017500000000221514010434640022736 0ustar wouterwouter0‚‰ *†H†÷  ‚z0‚v1 0 +0  *†H†÷  ‚]0‚Y0‚‚  ÞX"K‚¼—ù0  *†H†÷ 0&10 Upetal10 *†H†÷  petal0 130117115245Z 321004115245Z0&10 Upetal10 *†H†÷  petal0ß0  *†H†÷ Í0ÉÁ¸ðha˜…:é6Jst"È^ å»&ð rÿ-’̳þž¤­pëC‹k­;h$;Æ8ö} *¦#/.ýÜ+n­ÄÑdW”·õ>5ª£ ðqÍàò©Ê®ÌëR<~€U>Ü«G ¦. SHMy5‹ÿØÎ™ß÷ Õ)u[Õ¶oÖ¸8 1¸ès, p{^¦ÀPαÓá•»„-!!¼/nö<[¬JG]ßKµ*jJ2èëçŠJÄ £0 0 U„0  *†H†÷ Áš|¬æÏ0Õu¡r1«¶)ð ÛX$‡I1ólfãZHF@€‰3—gÉgc{/ŠŽûØOf”adu§Yǃ2w¸A|H¿4@„*Ï:“Ø4Š6âŸM*ÙÚ¾†Ã#PöðñížEKÀYÜ ô’ €«ƒI`Q97¶ªãvMO’=¦ƒ4üïRgÔÌÃIœÌøÒ×.:ôHò›Ì"Þàº: ™”A¼A¿¢Hï— Ù4L#B6t] 1‚ô0‚ð030&10 Upetal10 *†H†÷  petal ÞX"K‚¼—ù0 + Ø0 *†H†÷  1  *†H†÷ 0 *†H†÷  1 130117115308Z0# *†H†÷  1ƒôÜ@Ϭš¬€WÞý¿õé§C0y *†H†÷  1l0j0  `†He*0  `†He0  `†He0 *†H†÷ 0*†H†÷ €0 *†H†÷ @0+0 *†H†÷ (0  *†H†÷ À=õrú> ç%B1õÎ3ˆLÇ‹ÕáÍ#pR31üo=¯„Ù¼zg[&Ú!–]‡?àrÔ#9_Tû·&yö7múGHÚßÎHÁpò”¢DÍUMÖ+ù¦²ã:1#97ýÙ§Ð>½£ŽÑÁ“-vôªÏ (ßEYÆxåCS3.0÷"sõ¢©›D »%[|Ã3j"4b™8.dê=ëÑ\›–¬Û073 Ã6ÄÕüÀT@åÎ-bdÈå³rzSÓunbound-1.13.1/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.xml0000644000175000017500000000125114010434640024767 0ustar wouterwouter . 37348 5 1 b56a31943f14faa31224d147f8b1107b78598eb2 37348 5 1 b56a31943f14faa31224d147f8b1107b78598eb2 unbound-1.13.1/testdata/10-unbound-anchor.tdir/10-unbound-anchor.testns0000644000175000017500000000156714010434640025224 0ustar wouterwouter; nameserver test file $ORIGIN . $TTL 3600 ; for easy test: valid until 2030. ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION . IN DNSKEY SECTION ANSWER . 3600 IN DNSKEY 257 3 5 AwEAAcjV/I6yYY0LGBEqBFZS0K6zcbCVAfarbOoCKBUEfsR/nVdy3pwMydXopUVhg4Z07tTu8w2gYTPALPv5E6EJFJebA34R0OcvTPRDr3671zVwZO9HyQK+RuT/0d7G/pdCeJX2gHHiVrG796nf078O/agtojZ8+HJ1V3oLnDZYBSDWv2oL2LB2Mpj+610W7RrmEmQQm2KaMP6aX3YMbAyBIrDjVzJTir4/WwJEHRHq59Xw91egJkS2bp0KIK3J3tQFqw== ;{id = 37348 (ksk), size = 1536b} . 3600 IN RRSIG DNSKEY 5 0 3600 20300930162500 20100530162500 37348 . tjIVLqaVr2o1pLYxNbozR8OxPnGnCJN/rROZoIVzjEgvofyHx24hGMXak6lIlLHZ9GSmOxUM/71MeunhSdMqfjsoktc7MkpB8eR6ATePjdaPTdRH519wHH7qEkHj5WJNKvJOvG7Q9xs6O3KANErr+iotHjOJYpgbmZFoENJvLzqj4FVJ0bIglgD+SZGJGv9/qA+eWAK7WuWSe+ulMU/WH/SnxB/NKDjSAa//TyjzLhlIRR5UTjLIUymWxG4D3TbJ ;{id = 37348} ENTRY_END unbound-1.13.1/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test0000644000175000017500000000730014010434640024652 0ustar wouterwouter# #-- 10-unbound-anchor.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." OPTS="-u 127.0.0.1 -P $PETAL_PORT -C ub.conf -v -a root.key -c root.pem -n petal" DS=`cat K.+005+37348.ds` # check that the root.key file works. function check_works() { if $PRE/unbound-host -C ub.conf -f root.key -t DNSKEY -v . | grep "(secure)" >/dev/null; then echo OK else echo "not OK" cat fwd.log cat petal.log exit 1 fi } # check that the root.key file works, but insecurely. function check_insecure() { if $PRE/unbound-host -C ub.conf -f root.key -t DNSKEY -v . | grep "(insecure)" >/dev/null; then echo OK else echo "not OK" cat fwd.log cat petal.log exit 1 fi } # test with good start key, and must do 5011 (no URL possible) echo "*** TEST 1 ***" echo $DS > root.key $PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS if test $? != 0; then echo "Exitcode not OK" exit 1 fi check_works # save for test 5 cp root.key root.key.probed # force update with the cert. echo "*** TEST 2 ***" cp test_cert.pem root.pem $PRE/unbound-anchor -F -x "root.xml" -s "root.p7s" $OPTS if test $? != 1; then echo "Exitcode not OK" exit 1 fi check_works # 5011 fails echo "*** TEST 3 ***" echo ". IN DS 37000 5 1 b00000000000000000000100f0000000000000b2" > root.key $PRE/unbound-anchor -x "root.xml" -s "root.p7s" $OPTS if test $? != 1; then echo "Exitcode not OK" exit 1 fi check_works # cert fails (bad p7s). echo "*** TEST 4 ***" echo ". IN DS 44444 5 1 b00000000000000000000100f0000000000000b2" > root.key $PRE/unbound-anchor -F -x "bad.xml" -s "bad.p7s" $OPTS if test $? != 0; then echo "Exitcode not OK" exit 1 fi if grep "DS 44444" root.key >/dev/null ; then echo OK else echo "keyfile changed" exit 1 fi # cert fails (bad name). echo "*** TEST 4b ***" echo ". IN DS 44444 5 1 b00000000000000000000100f0000000000000b2" > root.key $PRE/unbound-anchor -F -x "bad.xml" -s "bad.p7s" $OPTS -n "not-it" if test $? != 0; then echo "Exitcode not OK" exit 1 fi if grep "DS 44444" root.key >/dev/null ; then echo OK else echo "keyfile changed" exit 1 fi # 5011 fails, and probe-time too recent. echo "*** TEST 5 ***" # break the probed key. sed -e 's/bp0KIK3J3/b00KIK0J0/' < root.key.probed > root.key $PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS if test $? != 0; then echo "Exitcode not OK" exit 1 fi if grep "b00KIK0J0" root.key >/dev/null ; then echo OK else echo "keyfile changed" exit 1 fi # 5011 fails, and probe time is very, very old. echo "*** TEST 6 ***" mv root.key bla.key # last probe was Sun Sep 9 03:46:40 2001 sed -e 's/;;last_success: .*$/;;last_success: 1000000000/' < bla.key > root.key rm bla.key $PRE/unbound-anchor -x "root.xml" -s "root.p7s" $OPTS if test $? != 1; then echo "Exitcode not OK" exit 1 fi check_works # 5011 update probe is only needed. echo "*** TEST 7 ***" $PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS if test $? != 0; then echo "Exitcode not OK" exit 1 fi check_works # root goes to insecure (0 anchors). echo "*** TEST 8 ***" $PRE/unbound-anchor -F -x "no_more_keys.xml" -s "no_more_keys.p7s" $OPTS if test $? != 1; then echo "Exitcode not OK" exit 1 fi if grep ";;REVOKED" root.key >/dev/null; then echo "REVOKED"; else echo "not revoked"; exit 1; fi check_insecure # insecure input file echo "*** TEST 9 ***" $PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS if test $? != 0; then echo "Exitcode not OK" exit 1 fi if grep ";;REVOKED" root.key >/dev/null; then echo "REVOKED"; else echo "not revoked"; exit 1; fi check_insecure echo "logs" cat fwd.log cat petal.log exit 0 unbound-1.13.1/testdata/10-unbound-anchor.tdir/petal.key0000644000175000017500000000237514010434640022437 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIDfQIBAAKBwQC1xQ/Kca6zszZbcCtdOTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJ RuN+Rm304SonpwghfP2/ULZNnuDgpG03/32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1 QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ867K029ypjOQtAJ85qdO3mERy7TGtdUcu O6hLeVet419YeQ2F8cfNxn63d7bOzNGLPW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeU J/i4YDWexFYSL+ECAwEAAQKBwCLXXQl+9O+5AEhSnd1Go1Jh0pSA7eBJOuXQcebG Rb7ykp+6C4G2NtDziwwPRNdI6wQQQ0sym18RfyVQHydGr78/nbiIbB3HCn5e92Mh mefzW6ow9Kvm2txLzGKA1lvoyRbNm81jnG/eygi3u7Nqd5PNv+4dHj2RkTlmxOeh qnDMVP5md8uZPv6lYNnrnIzvLCR5vnPNdVwn89AqzI85IcDZdy0R9ZX4NBbsDgAU 6ig6uXuRXvSGiyJ/OUXSrnogaQJhAOjvkHUhVZQkPOxO90TNH4j0GdKKtbSWxIdz lKfuJeBAEqs0TL+C6vbS81Xw3W1alyDdUBk3rJMOBqW6Ryq5HNL+j5H+Jfsh7fvc Yle+5wHGci0P9zCFZCrY8It7n9XFIwJhAMfEi6oJa2G8waPJ1bQhxka82Tf9pnKM XCn/1BBOFjVIx5F842cpA+zp5a62GENTGYPQTTRBB/2/ZwnW5aIkrlg54AtmbqBZ Oh+2kJdJQD/tfoVmc5soUE2ScTHadK5RKwJhAN4w9kjkXS+MSZjX0kIMsBIBVkhh C+aREjJqa9ir7/Ey7RvmLXdYuCxtGLRXp7/R8+rjcK49Tx6O+IRJZe042mfhbq3C EhS1Tr86f4xXix9EXlDhs9bSxrOgcAN9Dv/opQJhAK7eBcPaav0rVfYh/8emqQHS 3fJ9Pu6WnzbEksWTFS2ff9KDGCx9YspIFJ5TF/oXDAaumGZdZrlgirm6O1kr8tGY F97i04PZl1+bWAaWQH+1TUNI43m2WFUPE7coG2tb8QJgcddDg9VlXliZqgcETZfJ kJmYETxrcSn3ao6v116N8yxhEgUgjkmsCTiFgx36iDVnXwK6PIt+sIu8MC7eYNa3 berrv/M21K0LRn20IWRxvUobG070weHCAgkko7fTWgr2 -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/10-unbound-anchor.tdir/test_cert.pem0000644000175000017500000000155314010434640023314 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIICWTCCAYKgAwIBAgIJAN5YIkuCvJf5MA0GCSqGSIb3DQEBBQUAMCYxDjAMBgNV BAMTBXBldGFsMRQwEgYJKoZIhvcNAQkBFgVwZXRhbDAeFw0xMzAxMTcxMTUyNDVa Fw0zMjEwMDQxMTUyNDVaMCYxDjAMBgNVBAMTBXBldGFsMRQwEgYJKoZIhvcNAQkB FgVwZXRhbDCB3zANBgkqhkiG9w0BAQEFAAOBzQAwgckCgcEAuPBoYZiFOuk2SnN0 IsheC+W7JvAJcv8tksyz/hgAnqStDnDrQ4trF607aCQ7xjj2fSAqpiMvLv0P3Ctu rcTRHmRXApS3GBf1PjWqoxMK8JBxCIHN4PKpyq4czOtSPH6AFlU+3KsRRwymLgpT SE15NYv/2M6Z3/cL1SkOdVvVDrZv1gO4OCAxwrgI6HMsjQtwe16mGsBQzrHTCOGV u4QtISEUDrwZL272PFsZrEpHXd9LtSpqCEoOMujr54pKxBEJAgMBAAGjDzANMAsG A1UdDwQEAwIChDANBgkqhkiG9w0BAQUFAAOBwQCaA3ys5hDPMNV1oXIxH6u2KfAX C9tYJId/SR0x8whsZuNaSEZAgImdM5dnyWdjey8Pio772E9/F2aUBGFkdadZx4My d7hBfEi/NECEKs86k9g0ijbin41NKtnajb6GwyNQ9vDx7Z5FS8BZ3CD0BZIdCQUE gKuDSWBROQU3tqrjdk2QTwGQkj2mgzT871Jn1MwZw0mczPjS1y469Ejym8wi3uCd EboDOoGBCpmUQbxBv6JI75cUCdmNNEwjQjZ0XQw= -----END CERTIFICATE----- unbound-1.13.1/testdata/10-unbound-anchor.tdir/10-unbound-anchor.post0000644000175000017500000000046014010434640024660 0ustar wouterwouter# #-- 10-unbound-anchor.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $PETAL_PID unbound-1.13.1/testdata/10-unbound-anchor.tdir/K.+005+37348.private0000644000175000017500000000243114010434640023441 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 5 (RSASHA1) Modulus: yNX8jrJhjQsYESoEVlLQrrNxsJUB9qts6gIoFQR+xH+dV3LenAzJ1eilRWGDhnTu1O7zDaBhM8As+/kToQkUl5sDfhHQ5y9M9EOvfrvXNXBk70fJAr5G5P/R3sb+l0J4lfaAceJWsbv3qd/Tvw79qC2iNnz4cnVXegucNlgFINa/agvYsHYymP7rXRbtGuYSZBCbYpow/ppfdgxsDIEisONXMlOKvj9bAkQdEern1fD3V6AmRLZunQogrcne1AWr PublicExponent: AQAB PrivateExponent: XKH2f4rfW8LGMwSCQ56nCi1SPvQ7l56x+a1M94S/Q7row7ED5E4xuiw4LqwvkhDVJ/meuaZDry7wkLftydT6XoLtNXTaOgejIvclNvtE5C0XIRanLFC/OliUYIDAZNwPGVCYX8ZIfcbi1Sp5Ng9EofCb1haSGn/Wnar31knaweRdTrAUIPl49+QhJmaHCrTtHVuYEOZjIaOPSGIBvxZAk//3yF6FXY3RVRaNRTcELWvLclSdtt52etVV0/SEWhjh Prime1: 4wEpv8UVvqOkOKSxeu1ao42FWHwqzwUdFyNeKrUxg3E7ad5i9V0aaFhqbJKzQtVUreeEtoXsSRvjvbWJ4wSCwEay1qVD4xEJ4UFtasESxQvv1iVsBQ7zEywRkwSIT46/ Prime2: 4n0h+1TXflSEqdxC4lPiwyIC/z+1iyq0kFru70SB395S44HAynbQBdsapZX29msfl+/tiu2DncIXe1oVaDDqPpbrOT5NZMH9xQnZDSCbM8l7Gyx5UB3MsbT+71J2VrAV Exponent1: p81LTDvmyAZ1NX3gyCq+TpolkPQwPNnd2CXHzTAlirFgJvFCG3gYNjvtZ5bFtki2ENtMShQTRzO7lJemds71zCY2ut5toWMN95oCxOA1/LzHLHh7Mf4MBwcTcqbuEElH Exponent2: w0ZyWxkuZxyF+VIQVMVQuT+E6ABNDX03i1LruV4OwC8WtlM0HxxLhREBK41eDd4UslJKM8NO/GDRECh+VoP+IxLKImPGJL5hh1ZTTs8zIXZw7t/shJf82acdOsiVgW51 Coefficient: 10OZvNAPHe/wBO2+AO49EUohPksOxFy9dwspB1XUjlPB9zv93dUfZdou3pjZq1EkxnRChaAwmRMYxks3UiTmDuybMNzKlaFQajyB+UowjA1dStFYbDFpVrIqv6H0q7W2 unbound-1.13.1/testdata/10-unbound-anchor.tdir/petal.pem0000644000175000017500000000142214010434640022420 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIICFzCCAUACCQDO660L5y5LGDANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVw ZXRhbDAeFw0xMDA5MzAxMzQzMDFaFw0zMDA2MTcxMzQzMDFaMBAxDjAMBgNVBAMT BXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC1xQ/Kca6zszZbcCtd OTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJRuN+Rm304SonpwghfP2/ULZNnuDgpG03 /32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ8 67K029ypjOQtAJ85qdO3mERy7TGtdUcuO6hLeVet419YeQ2F8cfNxn63d7bOzNGL PW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeUJ/i4YDWexFYSL+ECAwEAATANBgkqhkiG 9w0BAQUFAAOBwQBBkX9KDP2RXbg+xPmdJ4P6CwvA5x1LZwC++ydVx4NlvT0pWicD ZUnXjcWAJlkeOuUBAqFG7WHTrXpUUAjmdqFVq2yFjteUYBdrFz0RDB2jM9feeKYO mTgxdZyT9a6humxCxt5VfgT02axLjm/2AqCyFPMbf4PASoJDln01AEuZLZ8Xl2gV bYHMnHTGoD1Hu6FNEzRgkMC6XT8X3YjHvzQhpc/qL5wEfEsinQGdX4twsuWbf8xd q7miNnkO8vd0maw= -----END CERTIFICATE----- unbound-1.13.1/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf0000644000175000017500000000023514010434640024620 0ustar wouterwouter# test config to direct traffic to testns. server: do-not-query-localhost: no fake-sha1: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/10-unbound-anchor.tdir/K.+005+37348.ds0000644000175000017500000000020414010434640022371 0ustar wouterwouter. 3600 IN DS 37348 5 1 b56a31943f14faa31224d147f8b1107b78598eb2 ; xotek-pusin-gezoc-gevep-feged-gigyg-livor-cagil-riveh-nafar-duxix unbound-1.13.1/testdata/Kexample.com.+005+55582.key0000644000175000017500000000024214010434640020605 0ustar wouterwouterexample.com. 3600 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} unbound-1.13.1/testdata/test_packets.90000644000175000017500000000235114010434640017274 0ustar wouterwouter; Test that RRSIG(SOA) is matched with the SOA record. ; Test that FORMERR no longer happens. ; This is output from the PowerDNS online signer. ; ;-- next packet -- E2C084000001000000040 0010E686F74656C6C73616E746961676F02736500000F0001C00C0006000100000E10002C036E733 30662696E65726FC01B087265676973747279C0334EDFD75C0000A8C000000E1000093A8000000E1 02075616D326963717673707635356136746A306C6C32336B71376E766D666E6136C00C003200010 0001C2000240100000101AB14D7425114B28CE784C3A3D9B8FC5D920A8D7B5570000762000000000 290C00C002E000100001C2000A50006080200001C204EE938804ED6C38085F80E686F74656C6C736 16E746961676F02736500442DF70F92FCFDF5F5D3560194FCDE01B91CE6AC00910CDDA550F985C84 F4FA1FD8DFD 957F4382C276FD26E5A 3C10C494DCB6D0132F930595A0901D4E0616679EA426F7D45A683CA7236F8532C1E3B3B82EF6B0C0 2E43999F8B8FF0B001968E10AFAEFA7774FC003ED0E43DDEA776596AFD91DADECA5AD505107F97AC 467264EC05B002E000100001C2000A50032080300001C204EE938804ED6C38085F80E686F74656C6 C73616E746961676F027365000D4700DE3055046F2CC0529307903D40FEFC7ECFF29BB5B6B7427EB 11B06669605B1ADFC070DAF801FB3EB59446F6C7BE5D4BC7C725BFEF2F5F416BCC8A090692F5CE76 85923DD102677C9224E69FF10167EF8C0EC18070E986E9F0266C7CBB3270A9CD6C562157EC1074B6 F48553DD58BBE 12A63202C9A1DB7DA5F8560849580000295800000080000000 unbound-1.13.1/testdata/val_adbit.rpl0000644000175000017500000001146214010434640017160 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator AD bit signaling ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD AD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; ask from cache too STEP 21 QUERY ENTRY_BEGIN REPLY RD AD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 23 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/stat_timer.tdir/0000755000175000017500000000000014010434640017624 5ustar wouterwouterunbound-1.13.1/testdata/stat_timer.tdir/stat_timer.pre0000644000175000017500000000160514010434640022511 0ustar wouterwouter# #-- stat_timer.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT stat_timer.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stat_timer.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/stat_timer.tdir/stat_timer.conf0000644000175000017500000000041714010434640022650 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no statistics-interval: 1 forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/stat_timer.tdir/stat_timer.testns0000644000175000017500000000031014010434640023233 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/stat_timer.tdir/stat_timer.dsc0000644000175000017500000000045314010434640022474 0ustar wouterwouterBaseName: stat_timer Version: 1.0 Description: Test statistics-interval timer. CreationDate: Tue Feb 5 14:41:10 CET 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: stat_timer.pre Post: stat_timer.post Test: stat_timer.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/stat_timer.tdir/stat_timer.post0000644000175000017500000000045414010434640022711 0ustar wouterwouter# #-- stat_timer.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/stat_timer.tdir/stat_timer.test0000644000175000017500000000151114010434640022676 0ustar wouterwouter# #-- stat_timer.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # test if unbound is up echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # wait for statistics timer to go off a couple times. sleep 5 n=`grep "server stats" unbound.log | wc | awk '{print $1}'` echo "counted $n stat lines" if test $n -gt 6; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> cat logfiles" cat fwd.log cat unbound.log exit 0 unbound-1.13.1/testdata/iter_pcdirect.rpl0000644000175000017500000001123614010434640020052 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver with parent-child diff for direct impact ; the trouble is resolving this right away. ; otherwise it gets picked out of the cache. ; i.e. on a failed lookup, pickup lame stuff from the cache. ; the nameserver lookup may have failed but produced some (lame) addresses. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION org. IN A SECTION AUTHORITY org. IN NS a0.org.afilias-nst.org. SECTION ADDITIONAL a0.org.afilias-nst.org. IN A 199.19.56.1 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.org. ENTRY_END RANGE_END ; a0.org.afilias-nst.org. RANGE_BEGIN 0 100 ADDRESS 199.19.56.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION org. IN NS SECTION ANSWER org. IN NS a0.org.afilias-nst.org. SECTION ADDITIONAL a0.org.afilias-nst.org. IN A 199.19.56.1 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.org. IN A SECTION AUTHORITY example.org. IN NS ns.example.org. SECTION ADDITIONAL ; parent-side working address. ns.example.org. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.org. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.org. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.org. IN NS SECTION ANSWER example.org. IN NS ns.example.org. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.org. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.50 SECTION AUTHORITY example.com. IN NS ns.example.org. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.org. IN A SECTION ANSWER ; correct answer: ns.example.org. IN A 1.2.3.4 SECTION AUTHORITY ns.example.org. IN NS 1.2.3.4.example.org. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA NOERROR SECTION QUESTION ns.example.org. IN AAAA SECTION ANSWER SECTION AUTHORITY ns.example.org. IN NS 1.2.3.4.example.org. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA RA NXDOMAIN SECTION QUESTION 1.2.3.4.example.org. IN A SECTION ANSWER SECTION AUTHORITY example.org. IN SOA ns.example.org. root.example.org. 2009111400 14400 3600 1209600 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA RA NXDOMAIN SECTION QUESTION 1.2.3.4.example.org. IN AAAA SECTION ANSWER SECTION AUTHORITY example.org. IN SOA ns.example.org. root.example.org. 2009111400 14400 3600 1209600 86400 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.org. ENTRY_END ; perhaps some messages are still pending - allow those to resolve. STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END ; recursion happens here. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.50 SECTION AUTHORITY example.com. IN NS ns.example.org. ENTRY_END SCENARIO_END unbound-1.13.1/testdata/version_bind.rpl0000644000175000017500000000223714010434640017714 0ustar wouterwouter; config options server: hide-identity: no hide-version: no identity: "test-identity" version: "test-version" CONFIG_END SCENARIO_BEGIN Test version.bind identity and version queries ; version.bind. STEP 1 QUERY ENTRY_BEGIN SECTION QUESTION version.bind. CH TXT ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA SECTION QUESTION version.bind. CH TXT SECTION ANSWER version.bind. 0 CH TXT "test-version" ENTRY_END ; version.server. STEP 3 QUERY ENTRY_BEGIN SECTION QUESTION version.server. CH TXT ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA SECTION QUESTION version.server. CH TXT SECTION ANSWER version.server. 0 CH TXT "test-version" ENTRY_END ; hostname.bind. STEP 5 QUERY ENTRY_BEGIN SECTION QUESTION hostname.bind. CH TXT ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA SECTION QUESTION hostname.bind. CH TXT SECTION ANSWER hostname.bind. 0 CH TXT "test-identity" ENTRY_END ; id.server. STEP 7 QUERY ENTRY_BEGIN SECTION QUESTION id.server. CH TXT ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA SECTION QUESTION id.server. CH TXT SECTION ANSWER id.server. 0 CH TXT "test-identity" ENTRY_END SCENARIO_END unbound-1.13.1/testdata/rpz_respip.rpl0000644000175000017500000001510314010434640017424 0ustar wouterwouter; config options server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no rpz: name: "rpz.example.com." zonefile: TEMPFILE_NAME rpz.example.com TEMPFILE_CONTENTS rpz.example.com $ORIGIN example.com. rpz 3600 IN SOA ns1.rpz.example.com. hostmaster.rpz.example.com. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.rpz.example.com. 3600 IN NS ns2.rpz.example.com. $ORIGIN rpz.example.com. 8.0.0.0.10.rpz-ip CNAME *. 16.0.0.10.10.rpz-ip CNAME . 24.0.10.10.10.rpz-ip CNAME rpz-drop. 32.10.10.10.10.rpz-ip CNAME rpz-passthru. 32.zz.db8.2001.rpz-ip CNAME *. 48.zz.aa.db8.2001.rpz-ip CNAME . 64.zz.bb.aa.db8.2001.rpz-ip CNAME rpz-drop. 128.1.zz.cc.bb.aa.db8.2001.rpz-ip CNAME rpz-passthru. 128.123.zz.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db8::123 128.124.0.0.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db8::124 TEMPFILE_END rpz: name: "rpz2.example.com." zonefile: TEMPFILE_NAME rpz2.example.com TEMPFILE_CONTENTS rpz2.example.com $ORIGIN example.com. rpz2 3600 IN SOA ns1.rpz2.example.com. hostmaster.rpz2.example.com. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.rpz2.example.com. 3600 IN NS ns2.rpz2.example.com. $ORIGIN rpz2.example.com. 32.10.10.10.10.rpz-ip A 203.0.113.123 32.123.2.0.192.rpz-ip A 203.0.113.123 128.1.zz.cc.bb.aa.db8.2001.rpz-ip AAAA 2001:db1::123 TEMPFILE_END stub-zone: name: "." stub-addr: 10.20.30.40 CONFIG_END SCENARIO_BEGIN Test all supported RPZ action for response IP address trigger ; c. RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS ns. SECTION ADDITIONAL ns. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a. IN A SECTION ANSWER a. IN A 10.0.0.123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a. IN AAAA SECTION ANSWER a. IN AAAA 2001:db8::123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION b. IN A SECTION ANSWER b. IN A 10.1.0.123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION b. IN AAAA SECTION ANSWER b. IN AAAA 2001:db8:1::123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION c. IN A SECTION ANSWER c. IN A 10.11.0.123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION c. IN AAAA SECTION ANSWER c. IN AAAA 2001:db8:ff::123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION d. IN A SECTION ANSWER d. IN A 10.10.0.123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION d. IN AAAA SECTION ANSWER d. IN AAAA 2001:db8:aa::123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION e. IN A SECTION ANSWER e. IN A 10.10.10.123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION e. IN AAAA SECTION ANSWER e. IN AAAA 2001:db8:aa:bb::123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION f. IN A SECTION ANSWER f. IN A 10.10.10.10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION f. IN AAAA SECTION ANSWER f. IN AAAA 2001:db8:aa:bb:cc::1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION g. IN A SECTION ANSWER g. IN A 192.0.2.123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION g. IN AAAA SECTION ANSWER g. IN AAAA 2001:db8:aa:bb:cc::123 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION h. IN AAAA SECTION ANSWER h. IN AAAA 2001:db8:aa:bb:cc::124 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN A ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION a. IN A SECTION ANSWER ENTRY_END STEP 3 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN AAAA ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION a. IN AAAA SECTION ANSWER ENTRY_END STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN A ENTRY_END STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION b. IN A SECTION ANSWER ENTRY_END STEP 7 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN AAAA ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION b. IN AAAA SECTION ANSWER ENTRY_END STEP 9 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION c. IN A SECTION ANSWER ENTRY_END STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN AAAA ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION c. IN AAAA SECTION ANSWER ENTRY_END STEP 13 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN A ENTRY_END STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION d. IN A SECTION ANSWER ENTRY_END STEP 15 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN AAAA ENTRY_END STEP 16 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NXDOMAIN SECTION QUESTION d. IN AAAA SECTION ANSWER ENTRY_END STEP 17 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION f. IN A ENTRY_END STEP 18 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION f. IN A SECTION ANSWER f. IN A 10.10.10.10 ENTRY_END STEP 19 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION f. IN AAAA ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION f. IN AAAA SECTION ANSWER f. IN AAAA 2001:db8:aa:bb:cc::1 ENTRY_END STEP 21 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION g. IN A ENTRY_END STEP 22 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION g. IN A SECTION ANSWER g. IN A 203.0.113.123 ENTRY_END STEP 23 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION g. IN AAAA ENTRY_END STEP 24 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION g. IN AAAA SECTION ANSWER g. IN AAAA 2001:db8::123 ENTRY_END STEP 25 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION h. IN AAAA ENTRY_END STEP 26 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION h. IN AAAA SECTION ANSWER h. IN AAAA 2001:db8::124 ENTRY_END ; should be dropped STEP 27 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION e. IN A ENTRY_END STEP 28 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION e. IN AAAA ENTRY_END STEP 29 TIME_PASSES ELAPSE 12 SCENARIO_END unbound-1.13.1/testdata/val_cnametooptin.rpl0000644000175000017500000001455514010434640020603 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with CNAME to insecure optin NSEC3 ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.sub.example.com. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134802 20070829134802 2854 example.com. AKvv+5rFiCFiNRbdpna4rQtyARsLltUL9lXRWgpBVB5voJNJ9g/n/f4= ;{id = 2854} SECTION AUTHORITY ; NSEC3PARAM 1 0 1 - ; example.com. -> 9vq38lj9qs6s1aruer131mbtsfnvek2p. ; sub.example.com. -> 7t1ect6t5vp0s7se8si9d07roqupr3gc. ; www.example.com. -> 0lverorlcjoa2lji5rik0otij3lgoj3l. 7t1ect6t5vp0s7se8si9d07roqupr3gc.example.com. IN NSEC3 1 0 1 - 7t1ect6t5vp0s7se8si9d07roqupr3gd NS 7t1ect6t5vp0s7se8si9d07roqupr3gc.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134802 20070829134802 2854 example.com. AIiTSxI4hTDiDzo+bMaOKSvjIyoChgjY19y2NQG/Mtt80sNbDBY126I= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; this server also serves the zone sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN SOA a. b. 1 2 3 4 5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.sub.example.com. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134802 20070829134802 2854 example.com. AKvv+5rFiCFiNRbdpna4rQtyARsLltUL9lXRWgpBVB5voJNJ9g/n/f4= ;{id = 2854} SECTION AUTHORITY 7t1ect6t5vp0s7se8si9d07roqupr3gc.example.com. IN NSEC3 1 0 1 - 7t1ect6t5vp0s7se8si9d07roqupr3gd NS 7t1ect6t5vp0s7se8si9d07roqupr3gc.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926134802 20070829134802 2854 example.com. AIiTSxI4hTDiDzo+bMaOKSvjIyoChgjY19y2NQG/Mtt80sNbDBY126I= ;{id = 2854} sub.example.com. IN SOA a. b. 1 2 3 4 5 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_cached.rpl0000644000175000017500000000307214010434640017300 0ustar wouterwouter; This is a comment. ; config options go here. server: minimal-responses: no forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Query receives answer from the cache STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; the query is sent to the forwarder - no cache yet. STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 3 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; authoritative answer REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END ; another query, same, so it must be answered from the cache STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; immediate answer without an OUT_QUERY happening (checked on exit) ; also, the answer does not have AA set STEP 6 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_domain_sale.rpl0000644000175000017500000001266014010434640020532 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver with a domain sale ; and the old operator is nasty, keeps running his server with the old data. ; and lots of lookups keep going towards the domain. ; eventually, the NS record has to timeout. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. (before sale of domain) RANGE_BEGIN 0 20 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; a.gtld-servers.net. (after sale of domain) RANGE_BEGIN 30 200 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 8.8.8.8 ENTRY_END RANGE_END ; ns.example.com. first owner RANGE_BEGIN 0 200 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; nxdomains for any name,type ; last in RANGE so that it matches everything left over. ; it includes the NS record. ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR AA NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. 3600 IN SOA a. b. 1 2 3 4 5 example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. new owner RANGE_BEGIN 0 200 ADDRESS 8.8.8.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 8.8.8.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 88.88.88.88 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 8.8.8.8 ENTRY_END RANGE_END ; Fetch the old record from the old owner. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 5 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; the domain is sold (right at this time). ; but the information stays in the cache. ; after 1800 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 1800 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 1800 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1800 IN A 1.2.3.4 ENTRY_END ; and ask another query STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nx1.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NXDOMAIN SECTION QUESTION nx1.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; at TTL 5 because TTL is capped at min-ttl of 5 in rdata of SOA example.com. 5 IN SOA a. b. 1 2 3 4 5 ;example.com. 1800 IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. 1800 IN A 1.2.3.4 ENTRY_END ; after another 1900 seconds the domain must have timed out. STEP 70 TIME_PASSES ELAPSE 1900 ; the NS record should have timed out. STEP 80 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 90 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 88.88.88.88 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 8.8.8.8 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ldnsrr.30000644000175000017500000033401014010434640017140 0ustar wouterwoutertypes-signed.wb.sidnlabs.nl. 86400 IN SOA nsd.sidnlabs.nl. hostmaster.sidnlabs.nl. 2013090401 3600 600 1814400 3600 types-signed.wb.sidnlabs.nl. 86400 IN RRSIG SOA 8 4 86400 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. FS5/2Besj3v0zLSGbsSztLL48+efFgpVADvLURzd5DC1Mz3W9x5yIDvDmmJs8o/9E8f0CKFfCAsP7dByfjSTsNXp83HSC4gB3OJgBGKFcvCdBjqG4lNeZlvX2510z5Wt4I9Ap+4xrpdb7Gx+nLfysZUozoPXZTtnXRQr/fUIlSM= types-signed.wb.sidnlabs.nl. 60 IN NS nsd.sidnlabs.nl. types-signed.wb.sidnlabs.nl. 60 IN NS knot.sidnlabs.nl. types-signed.wb.sidnlabs.nl. 60 IN NS nsd4.sidnlabs.nl. types-signed.wb.sidnlabs.nl. 60 IN NS bind9.sidnlabs.nl. types-signed.wb.sidnlabs.nl. 60 IN NS bind10.sidnlabs.nl. types-signed.wb.sidnlabs.nl. 60 IN NS powerdns.sidnlabs.nl. types-signed.wb.sidnlabs.nl. 60 IN RRSIG NS 8 4 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uj2mFDdXuXJI+ahHJWdFqpDenLh3P2skezM933C+FpaLLc14JhHITjL5CoAhnaJGIuDJAc/PocCLgl+fFsEgRFSvK/svqzLCkzTA+1w04D7JdoKj4NFkkUe5ryWdDnaUPvp4b2yk5Ian6JMXkYNjZ1PwIEWpE1P3qc8PMOFqXDo= types-signed.wb.sidnlabs.nl. 86400 IN DNSKEY 256 3 8 AwEAAde1PJyYjnR2R0RmzDuiYKRh/ldkv0znVOYwfjsHZNLg0ahLI+UsvghBmimoUSGa9d6Ckd3dodbHYxUpjFYsJfdeq+qimYFjrG8bUA2BD2uJMag1/QG7DTUp3jHaV0Q13r/829QEl0sjrLIBxC7wSlqu0ydfYz5VX7X0A8i1vDm9 ;{id = 62298 (zsk), size = 1024b} types-signed.wb.sidnlabs.nl. 86400 IN RRSIG DNSKEY 8 4 86400 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. KBS/LNj/KwAK/7Qozeyq/dM9rnRZBfAeJECC7tdYvKG793yLeWah1uS3yYulHTXN+jyPZ7agfbir7vRxnXc5o9NiJKumT5/Ke0ZBRDGlSWyA/AqMfkbiwkLWnUA448wNHbD+3acxd+ahs7XTz1qnEvYLhA8gkbW7PfVCmaN6qqQ= types-signed.wb.sidnlabs.nl. 3600 IN NSEC a.types-signed.wb.sidnlabs.nl. NS SOA RRSIG NSEC DNSKEY types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tV3HzeRPSp1JvGuWkzW5WiRQlH1MVcIddFPT6P1FXHfzKHvA6/kEBxH0qRraxqx++Sj7PX7SmR7qHoa2IUVAYwVXiwMf7Vm1iR9ReqylMDOSYnCCIrTj/H1rkM2ohSabn4ONmmuxmeHgm4IjKHbIuKPyOY12HcNPV0j7dwM6Xo0= a.types-signed.wb.sidnlabs.nl. 60 IN A 213.136.31.221 a.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. xVnnWCWW7jRgCpshnZWWxTa7so+1sSlTvYSCdTIWbXp8+FdF88NND23Evevwf0cBjiKvk5hzowCIHo4d201EtQcAUGsBue1SMg6Dg6vXrsB9XOt+eAwXUsF3diIptDB0A+jJ6bzxs+DOZGI7eFpAw/eCnIvOMOunQrTs8qNUt08= a.types-signed.wb.sidnlabs.nl. 3600 IN NSEC a01.types-signed.wb.sidnlabs.nl. A RRSIG NSEC a.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. yMJ9D23OqKPeGLqE2GQ2Heu5K9le1ToIfO7fQ1Zwla6rwIvXixvBm/s220nrIGDE0ULRC9FL6Esh/YGee10eEOebCpaDmSyCR9+Ea3j1CZpJIZLYFDEu98rlavFSx3g9FPpFnQiVDI+e6Fm4bU9g7GyivVh7wyeu9pAB1SsxyDw= a01.types-signed.wb.sidnlabs.nl. 60 IN A 0.0.0.0 a01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. xvYiYdW0OQt6XXt7vgGZztSW0hFXBp7GxQzOeF9mozvNbFefTu2XVZMJYYxOhNo6HvYbdPilVs7ZCv7wlzT6x2SOP+eHt+bZBIoYG2nc8se/uh9K0jwgPp6U4pgIFC/Eawp7mMzZR7bcJ0vlZSe3vjkxCdhoC3a0peHmiOLFpF0= a01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC a02.types-signed.wb.sidnlabs.nl. A RRSIG NSEC a01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. c9gz6OkVfusvO1G9Hfb75OrFaqz6QzRUhD+PyqYYl3KRv4eAv9q7310svKXKHVlB+FLNCGMsMjBlBueCF0mY/np92c8uvxbqOErGkf1vU1SAD/PA79Gdemc/9+q9bmfHSaW0/4eHOGhnUy2R4akcxC7t8Um5+z6WYIoJkWjQBLY= a02.types-signed.wb.sidnlabs.nl. 60 IN A 255.255.255.255 a02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eqp/zC5jc9ypeNCsmct7DNXIyKPEDQWxBt0G42OWUOmmBh3lVRngG71RL83VHFboMlxsAUBjKRbw9kDKM1vwoxcDtOOF0ZbYTnj+C6TAPDIeiAVCfA7k1kvFtwlhBDVVWMKOeVlMd+rr8tQsGKtNE9IJHmS4VNz+GH79W1zHikk= a02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC aaaa.types-signed.wb.sidnlabs.nl. A RRSIG NSEC a02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. w+df+olnBx6YLSnE+sawqz98esH8PTS6reePfg6tU9qUt+L+9GlZ8AnmOJlxb/issPcaD4VvBprCQxLSGH0jJ77IsHh85KZNeY3LFcl7OWks5wEPNi5JaCqDjmMosE5Lrb//QS2cR0gYWlhBtcbhvQIkRzOPI17sDlT+flFULoo= aaaa.types-signed.wb.sidnlabs.nl. 60 IN AAAA 2001:7b8:c05::80:4 aaaa.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AAAA 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. NCF4gq2gb82K5xxmGqSE4jeo3tCyhPkEK3hQmIZpuGHLaRkV5XWKENKl6ExhNUy2WUAYMqa6FtL5f2tEymKeYmHLwBAPSJpDlcXiHmeMyY9tQZiFhpg48wtUbgyvbAgqvbNU6kf8YU/YaQSoMu/HDPjtMIbIY9L+CpphD49BgyU= aaaa.types-signed.wb.sidnlabs.nl. 3600 IN NSEC afsdb.types-signed.wb.sidnlabs.nl. AAAA RRSIG NSEC aaaa.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. gRNkK0ecH2/TbQryyKOvsu1QnKT4cHgRcUfZYa0U+V5532ggDwl9QxtyPKK7BbuAPSucLncSKv/h+Wy+wGHVTZkXdgSEe1QeEAbFTo+HBuWTvvKIkd8KTnwFRT2efuTtC+r6V/Njwb54ZzVkRxxvo6SCsnKKgMvHzjOsGzwDbt4= afsdb.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 12345 afsnode.types-signed.wb.sidnlabs.nl. afsdb.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0zcmBgLAXX2OaJ+38g4JN5oDwsXloVQcP3MHsSXAi8mWUc2pYYxl58IFPaNhqm9Q6rSnng27VwFxBw2lP1SyGmsgiMtgbXV6z0uMP9TS43CMiQHFt27cMnL9nkM8BJBTorKHiSHD4CjsAH81i0VpcxMtSjO1/rohzCyp5ATqxFI= afsdb.types-signed.wb.sidnlabs.nl. 3600 IN NSEC afsdb01.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC afsdb.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OfBOAZzfR6bpQ10LUN/tK8xlGnQvs7sCPlE4nXaLzel8EdOLyDYj6oaez+c8TxIlL/3XRsM9wmkUuUJ0nwu5mluPwx+W0wR5r8BF4px22k5YEP+FYbtz/HXkrCUCVFG3Rn4hsLX0SJ4FqRvsszxanzWLDGE4Hhma4QpNgVhlz0k= afsdb01.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 0 hostname.types-signed.wb.sidnlabs.nl. afsdb01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. QzI29ze2x0L5UTSkMKB9i1HxKGz2SxHMR/Llf9VBu5PcfdPw6/7b43zSLrp9DZCL2WBTS/9aPWX9P/Q17JmDU811G+Mdy1okjVyoT04FFKRVFEemU6T5CEycaIKTzVqQBdM+v87bknyB+eugm3oH0A8rWOWtZ/mg5MvvBQwlnCg= afsdb01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC afsdb02.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC afsdb01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HO9r5sk1ZCMZ3vuZA++PD+H5ZHJjGE8YoAPmRZ7wyN7ODcCecx/MU1HxDLKLDJhpk9YgQDSm3yxcggDSz/13objsyIZlnzCBQrMDSvU0ykqz21msfJkYe/kA5vds+fMHSPlB9MGYEaJ01f5EzkSmF+9D81e4uVLlNTU3hfYma/Q= afsdb02.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 65535 . afsdb02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. WRwlGYPHleWaFOrFiXHNNtllsBrUav1Nh84KD7dBxpFQgswCqfq1I9MwLEJjM6O5x4kJgTJs8Aool0sFbOY7IhiLwcrAKGQTPaKWnj9uAGuypyHDiAzKmbmwYZEgr/BCgQWorHCVynwbmctR4LnYuBb/mpKtlRfkQi02bTMPZhM= afsdb02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cds.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC afsdb02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eGFG3E2Smm216j3GQcObHdgM2vwysnHdDSlckN5JxKMQ9Pnmhl3AWN3LRwpgVpdObGYLinJaRkb/feWUlgaemJIeFTaZzd3ZX5QG/egeaOoi4Q0pD7uwdeeWpcbepltGr3aD4qg7WkBUAxBseKnAS9jrvbC3iF7z0XzfN2rCSGU= cds.types-signed.wb.sidnlabs.nl. 60 IN TYPE59 \# 36 fc b2 08 02 86 63 2f 83 49 4b 1d 70 37 e7 29 49 fd 6c d8 68 9c 5d aa f4 df 1e 5d 7e 6e f3 ba 28 ec e1 e3 c8 ; RRSIG: cds.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 3b 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 7b ac 8d 49 e1 6c 37 44 de 3c 9e f1 98 c0 54 80 f5 23 8c 49 62 01 2d 61 91 2c e5 32 c4 15 09 c7 70 a8 9f 55 62 43 52 bd 7f 31 d7 72 d4 cf 76 d4 e0 20 41 d6 58 90 4e d3 f4 f3 a8 5b a3 4f 37 24 44 d3 36 bc 8c d7 fb ee 80 8b 5d 37 15 71 b4 b4 c1 41 9e 47 23 09 19 39 d3 47 52 79 c0 31 c5 ba db 9d d2 24 92 77 55 30 9a e0 5a 18 93 65 3a 63 a9 f2 1c e5 24 9a 72 1a c6 41 5b ee 68 30 99 a8 ; NSEC: cds.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 44 04 63 65 72 74 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 10 cds.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OXca6RcZ3vAaA9Z7UI+E0cUdmKmcrdpNChJaVPUZWqKs/cN1hvCB4P0MfsMWsO5q4VlIOgyHfSUsIz1HGFeNDeK9jndjYxUtE7HvRHPrl+PggrVjkILQHfAs0n18707bKXptKhtCFIRlzenERdP+z83Sk15AoNBejKUgvlFiOiE= cert.types-signed.wb.sidnlabs.nl. 60 IN CERT 65534 65535 254 MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= cert.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CERT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. J0QSoNK/D7jFxrpEpIXtbBX8GvdvWPBUH20H12om4Kai5NUeJCv8MN8ehHsy9UCZjg0+S+BynRBsvwajJiOTMr1C7pKs077Ju/XjMa0umoYltDbBx26Q36rwnNN5O9zb/dyXDxBksK/twZViNZrRCq90L+cEkwXDMtjiqXA8Zag= cert.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cert01.types-signed.wb.sidnlabs.nl. CERT RRSIG NSEC cert.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Y+0rG4IrW5psyw9O0B2PFZ/CFGpnr+M19dUP9+el6BbjjYpkgyF/n4t5SNYBYRy7Uqgw/qEIIGOImwlJyxPX19Dvl5Ci4T8RjbFkcYQWb7DGPLfSaDerpsd4LzDMAc1aqheHFXSnRYFY3xeTkLGrZnOq/wE/89oV/ZvnYSGiE4M= cert01.types-signed.wb.sidnlabs.nl. 60 IN CERT 65534 65535 254 MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= cert01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CERT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. mpC3G7ND9TK2gCNHTrde4bNNzP/jRi+USwQzEMUOKo+rAiOAAJXz/3OxGFBjLEIPwg5d8DzZhf1EcV66HqNHxaW1gk6NQwCbdTgvgAeUMJ3GzNyDnrmpaS3CIqURPOo/1T2MoC+DvoQuxO5M5EuQDsh4Uz617HzUE5M476TaqRc= cert01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cname.types-signed.wb.sidnlabs.nl. CERT RRSIG NSEC cert01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. nTaATn7wtzeCtOVpPMH50gE+C32M7YPLbXIZPd9TaFVWN21k/yE1f///BmdGh34hwteLuXTgg47Z0rxHotvYvOy7IkyqPQ13/RYDkf1W//aTRaCUbVpfyNIZ7Zjq5DYxC4iKyMzYJ0aRMn+KMjMHGZuvdZsHCp19QdMvhV/RsHo= cname.types-signed.wb.sidnlabs.nl. 60 IN CNAME www.types-signed.wb.sidnlabs.nl. cname.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. iulgjDFHWOpB2RnVMFAu3Nx0AQQ0bq0AXnUOQFma3xQt2ZZXUoXjLebDZQSE6a6afCG9IXgg5Oka6Qzp1N/idRnsKINjpJi6IqdAOIqVxhG0Y9X+DS0HbR8wiikWrBVuBbk6AZsH98SePYh0u6IhoHb3KZqFcsgb37PkpvFYg2s= cname.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cname01.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC cname.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Vljy+6YhzNQBz+Hp8v+B3+G1Q3kc/asrxgncrWYJ031ix7d5n5yzjib5FMDCRCGxOw39PRcBsumSSzgmr9EpQewfPHQD0ZI48GTqhcxu2Nu6WqFN3OLjhGleECn56WwK9pU0sgRA+CpoGuPlczhNvcAURBlyjzdS089sNANQVoo= cname01.types-signed.wb.sidnlabs.nl. 60 IN CNAME cname-target. cname01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BHDEK8+lOpSCfSTSOlOa+c/6UfsI91fTvPGjmgTVixHRJCwBRn9n4hwRscc9OFbOaa/DSN5pRJ9TggNssP2O1Yz6T8PckZnvkAExT10uexIuhY5lIx/+JRAIwkR0r/cObb9bh6QdQfh4+/9ijntpUM7b259L4z0nkc2WQw/mxTw= cname01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC cname02.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC cname01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uvbfLhiUEvNUY+3HoaQNOeOB3dCP57THn7HuU9fr6fVGOWkf01AgTigzpk6X/RyB0LKti8hiV3Vn4JimcxljZEOOxUOKwOX1qxIkbrbE4DEviWm2aO6jmskUD9JnAfIJzUDxeFmvZmDJvrcupVMBusRRx+bD12qXuNv77eENlGQ= cname02.types-signed.wb.sidnlabs.nl. 60 IN CNAME cname-target.types-signed.wb.sidnlabs.nl. cname02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fI3V1bTtCRmVTGOjuEbF4ue4vsxJzTpLvoNDdaPtrsquSR6pEUAQaUllBnctAD9QNqaiocBkbvI+YqmWe+ALkWjjB2RDDmacHn907sNHUwpDi64akqHSPYpPX7KBLmFXis8SlVgMtrsfqTAPEVhwbm3HmJbIUUhd8xgrYlTQV/Q= cname02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dhcid.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC cname02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MHiiGZ7/3x080HQiQrVwWvU8Zx3OyNLtxYJgr10QZeQ8PDAq7uiTNuP8d3xZ+Sw3vG/RKWzKB1Mdf/cyCuoRS97xtppRynG3KOSk3HTY/FPn5qSe9NNbU4yZvDX7yr+tdHOxEBe5su1hKq+t37GIf2AzBugF2ErRl6UxBrXqUEs= dhcid.types-signed.wb.sidnlabs.nl. 60 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA= dhcid.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DHCID 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. r5KE7Pt7WWGRgDOh88tQUp5OezvqrIH1Ut4L8zcyL8n+XifOy9tpntknKjTtZsZMnzhnCjwYwAfpOjE0WD1zJ+fLTNu+y324u1ugsZSVpl/Xb1BgbUe6M1/22612EqGcGTweut98HlJHz6liAlWmo1yAYke0ujL1c6TBnXQ0nbU= dhcid.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname.types-signed.wb.sidnlabs.nl. RRSIG NSEC DHCID dhcid.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R2POgfAcSLuNo8BFu0tVIhki2RDzQu+5bfwbvcVLplsKRffr+By24zm6JYMxBzO22s19NpJvWTi6eO/grI2viXpGvGJJT+cb1g0WDAFmQpjh03iNVhnOsp/Dim2dgxKPmS4bf4TvMAnZXEPg4pfzuTNsWfrfb3preoz7gAgz7cY= dname.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target. dname.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OPF3jGt9zmdf7SKcW2yJD+lT8T0JVZBl29tQyvJBwbi44ExZY/QBh1YbOfJmPJbq/G5vE6SKBM07kl8OungKC7pU5JsI4osx5DbadBink0hDFdiEqsR9k4BndcbgMVjG3DI3lpR5dtdwR/x7GTe7Jc5GE12mP9baA1QC7uBAHW4= dname.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname01.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC dname.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R+Cv9M1IaW6O2XD7hYgJ45HGGPooNcwE+K1Da7VuvwAwyWyK0Ip3B4nfzdrO2F9PF51uPebKrzPA41X62AxjC1Zj3c/PzSQqOwLONmkdLBzKacT0glV6yzuJcB5XR6XIATl+A3vgGJzj1mhcF6wjV5F1bE8v4b4ysq9lDCy/cC8= dname01.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target. dname01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HhXaLVh2lDAPxE6XJ/uqUGvpK3vyoPoY2bspICKjlJNosepMbBs95GPmnoXY387L/o20gRF7lrs945enAAuD9HVyBTjUnuIgBT2UIKpOq8p79mLjYYEglSmDRM5h4896PTtRBK3aGKci/GPyD4tDiTzuBMXBhYBI7jPk09v4+u0= dname01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname02.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC dname01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0Rgi/IRR2bIasPGK/cM3rxzf9FixNdv5c7AztYAkWZusIPjnM18wke3FwIfpMCvmHumXiv6TqvbViUMJMnh7maA/mzbROKXHU41brPZ2y+ypM46ChGE5H7I7mldiJg+UdbnIvMjwCmZ5hwr38ylrdygk+BvICSZOKfJutmJm8/c= dname02.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target.types-signed.wb.sidnlabs.nl. dname02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. h7CPniH+xF30ZlWqmtN+LfUcqMma5vp363VtAiIBV4qLhsKm8SjicBGMzvHNTSqXuefDzZbKt8QJr4ChNuIlAkVqzLSq6F2fLq/142nS8Zz2m5uzYy7j7qm39laZ55iIkYM87NO2t8MyUWNukzfDD5vJpPP8YkIZi28aZZo4iF8= dname02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC dname03.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC dname02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. W0X6NkFSq040mfnwqoIvMP/hGgd5zXlVJYhAM33glde5IT2XXuJYJ7qW127XrVM1jhBMWsTEk3pdJejq1O2FzvMVVIhRPIOoholiVvNq4GXBxLpJlN+aQohqfTi8hA718pqOJFdf8fAsfTW7TCThc5TwyCB2SHf0/7gA/bM9JBU= dname03.types-signed.wb.sidnlabs.nl. 60 IN DNAME . dname03.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. q06U1uZ3VYwAj60QGUJRAzLB2yFEqZwDUqPUZnHysbszl7S5GDkt4aAjsL1fWpvXpwpGPqkEv0yxX/wue2AxfRVRE3yO+Thsn7TIinAoUrPmnFgoMxZcKow2m3WDoptAL3YU+OSADE2pCuYlWeE+EoksB193c4NNMP6GEsnWH44= dname03.types-signed.wb.sidnlabs.nl. 3600 IN NSEC gpos.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC dname03.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. z85oCM5AXMcwFvloXnXBYb6qWGnSpsm1hPTCK9DP4ZnETy+MaLx87vZNrqREp4ybt4JxxIfNOnaIX3V+XZjOwLNdFz/iEEBFOqWcNKYVUZmp4dj6zGejZkYCEpjS+cruMeLgIqsVK/MpgXldeW/FUy8Begkf15KJlroeXvLmZdw= gpos.types-signed.wb.sidnlabs.nl. 60 IN TYPE27 \# 18 05 32 33 2e 36 37 05 32 33 2e 36 37 05 32 33 2e 36 37 ; RRSIG: gpos.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 1b 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 49 cb ab ee d1 b9 08 96 95 c5 52 48 92 94 37 86 69 ae 1b 93 4a 81 07 6f 36 4e 3d 3e 68 f2 39 e3 4a c1 06 d4 55 4f 00 9a 39 a7 81 3b 1c 8e 02 07 6b 0a 07 37 da ce 4c cc 7b f3 cd 20 f4 df f9 c1 99 34 da ad 81 f2 3f b7 43 c8 9c a9 41 38 7c fc 6b 15 06 52 56 34 20 6d 49 18 fa 9c be 97 07 a8 8b 25 b0 f6 ff 10 e2 95 55 1e 46 43 48 8e a8 7f e7 e0 51 bd 9e 6d 8a ef 42 f0 15 74 bb 56 be e4 ; NSEC: gpos.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 43 05 68 69 6e 66 6f 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 06 00 00 00 10 00 03 gpos.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. N7ZrGEGx8VWu4rwUQl/MFmpb2CKCWSdyYJblfqycr0EDZrf8O3Pxa1LQ6kAsgErtevsA+Jv5iqpWdYyVq0vGYKt1mXPVUD/cSNy718ACNd+828zPoj0JQlFCt+MUMChQD+pIX5aUAei4X0Topcbc6yNoaF8fSgtpnoknO5RQOc0= hinfo.types-signed.wb.sidnlabs.nl. 60 IN HINFO "Generic PC clone" "MyOS" hinfo.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. s4fnRSRBplDkwpDLvSy5BcsqyI34GPAyzc5oF8ImJEK9NFnCXUvXoDOuBw2Ku7LThIlK+qdhjKm8ytRNbE4iU9ycns4toTNYkHkig4k9/k3ZODgRfZBoXbtYrBS0IddPpzrCSWdpGWSkNWSRlhu5BPQ8OpE0pfu52APdYHCByt8= hinfo.types-signed.wb.sidnlabs.nl. 3600 IN NSEC hinfo01.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC hinfo.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vHgEKVeYRKSlwRn+ThJJTS/37QxlGVbPul2q2tRuCrZwC8CRr7UmRZw4zPXjfrshp/CH+p9nTXWkmn04v0ur70e6eZuHd+iojLmYoPJKnhFA/Rzo2MPu/p29uYI6M35stWTePAZUaoZIvD/7o+y36gSspYRARXO4vZdQx+zdffU= hinfo01.types-signed.wb.sidnlabs.nl. 60 IN HINFO "Generic PC clone" "NetBSD-1.4" hinfo01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LRlHYaYxa+jtlO4TqP85UeB3qLLHWl+TIJr4EYFQJEBhK/Rsgh6z+0W6QOL8MwVqVgJrr6bcOI1/yZYHMoWUS1bjzCGa1kDP529TAfJb3kBQoBxUHS+Lguw7VLV5GWWHo/0SPOFjaRXdKN+E7u0KYWXByGq6LJ0Le02nlyuq6Xo= hinfo01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC hinfo02.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC hinfo01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. xSacPtyhS47YjOtWm1JldmlF4Y/rFbJBwGlDmajlSHSzymSBcr2yMr3YiiFDItd4BM/ANjiYKx0nkATbFvN/V9toSOEuuwwyvBQN4hQZk2UGQ3GOWdhIq7oEPIKvNxxNbNT0thIUnGt9rN6u8KRB+2kWJHWf0soS8zd4oqHyRjQ= hinfo02.types-signed.wb.sidnlabs.nl. 60 IN HINFO "PC" "NetBSD" hinfo02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. UPJ8+rMZzLWgdtwklca9G4kG5mY/d70CRtXIKZxwgd4IuxcSRPf+K0d7/SEkPj9qT1NKtFKMUhvLAeBCck0Z67HIJ49Ke1a0Zl5ONJTSb+deCVjSaI2c45/p3D1yLt2zwqf7G16GlpKd4sqGkZtP5Jrh3z98Ei/hwiAqqqufgYM= hinfo02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC hinfo02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Qv+RbcYA/0GeSwan8b4npM1t8Mh+pkkhzzYftAwIpECDNeUZIrfli4QCiqnK0EDzXpTGZ8kSyvVTOpC0P69MM1gs0KoxX78iMD1nDb/wnEMF6ij8Y/wsPaVJR1x5uUp7Tt9gfTAcIqkUQusUMiizM9+YCkp12oFyU5rxavZvCzE= isdn.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" isdn.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Ya2+U1GFFqTjqc4Mk/VaPV9P/3DXmBlX/08C7HwUoXE854OHi5zpqTom64PYRdW8AyvJDUVDE+Jng0V6aEQzLTMq6gnijXYNGFjIUHv0TrowD6NS/gOjrNNK7UdxBVfgqQQu6jzPU0V+4djHGrjk8vTjXnhqTYnMCDEO0I8Sgec= isdn.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn01.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC isdn.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. M/nT2HKbweJ/u2P3JyZTAWa7mEzjl4TyGI6JsBiksdj3BJtwp61eu2QbvDxlfPuP8Y3eHVwGjlrEimfajq4PZI2zTD91GeAmCAK/Wvc9g2L19pZgyw8Eg5v1u2jvmSkydEfdCOOazit05QX/RAa9EeBxIuqgYpkMpcPVjVcGR5I= isdn01.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" isdn01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. JWYfAKWrIqN0vKHoFIjdHEdJc7zJoyE1shbyGmNxzYYIgWECshehRnslifsTW/bjhshy24Y+ANEpLWuu1lMYTZ9iLqoZaj3vOFrUxAf0JHasrDNxr111eVUK3CHYKccTs1tU7q4ev0Twm7BOTvIN92TiiOBqveGdmYhJHNUk9/E= isdn01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn02.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC isdn01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. YgHAIvmlEr4HNgiyKNUQ90UAQu2ckPWMziTwPcBKalAXPaDRXBvu1nNgXsiRhRzRU5zQaArOM4/aGiZNAX+5flzpAaPYTRrUhLY3GLiqm/a8b1DVqztVr7M896ZEPYBNaoCvOJmfuw1NaRIjEDs8x9INLqnsKNrcRaINAYb6euk= isdn02.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" isdn02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vn/vUij8ORct9C7+pc912ZuASlySgSYLs2OQ0MyewuFmt2fa6FRr4bP780ukPPy7iMGYNkH0hqabm0rBPm27CYVOMwoOU75EsnPVY/tGqn1dyTkNJ28iEUKevU1cgRogm+hPB2slKNXOzYAIUYU5ioXEFKVKgvSmmNDuKKoBAgI= isdn02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn03.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC isdn02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. W3DS27jdcoFpLGrPIrcowj5zGnWZwLJDql9ida90maIs1c2XwJjXur+msUf6ciD3T7vcExCENyjcuRIfXrvK/qCuWDpPK0pHw2SGQ8oX4Cw/ghgRj/IeK+MDjmM2ZoJ1Q2yWNKFntgPzEBws7cqjpBLOAz45e7WavsY2Nd0QmwY= isdn03.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" isdn03.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uRRicG1FyQSOXmWEO+3hITRQyn8uOdPISJrDhPRWAJQaFD9lvnG4zuu0lOPQsHQ/S1YLsacOQ/vfbOMlNe3ConSvpKw4tE2tDcBxWvkjt46KZ/krin725vuTI2T6kGy2H/JS719XQ6pY7WgcHHrgUIXL93tcqKqBEkIQpp+5w70= isdn03.types-signed.wb.sidnlabs.nl. 3600 IN NSEC isdn04.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC isdn03.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ooa/OYBcsOClpGsBMkwvXx9NASD3sS0wMWcHUZPq/ciGxHiDGwVrxKUSyqDgFhflqwJs7MFzyuiTAp68f2G3llor3hkk7ihidpmgAWu5oWuaveaL/jd2Jc841jCVoOv2dlFnzZwsdovgQE93lmkyTWwLR8QIsexrWXBEGFA9wh8= isdn04.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" isdn04.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. veWeKnFf5xQodnjyRVtwExhXcf3XL6oyf6QE9l8UYIfZcsrrdy5FMaq74lPArdw4aq+I+wt9LKvboWBlC/QreT8yAEBG+OHiYLr3qn2D9KUIFnUrvhU28lnITRaKlknoky1RFZBLQCey+BjN+Av3Q2i7RrP5R+puOqSf7FE4qwM= isdn04.types-signed.wb.sidnlabs.nl. 3600 IN NSEC kx.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC isdn04.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. P1bsQZuUm42v2ZnxLoowWRLofzBSKOE4+fjHmwB/lvj0VQcDaMKQdZfTZhVN4sEF9SDX8gMx0r2y6ERGQKbP+6u78Uin24Ncal6AUdWXCIb1oXP2+rfjkrpSO3ArdD/P3IcgDpfHAErg7aq+jlbTYuW/b2Aw7OnpnWk/E7rLLdU= kx.types-signed.wb.sidnlabs.nl. 60 IN KX 10 kx.types-signed.wb.sidnlabs.nl. kx.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HTnnoQj+kXnXGAhrMevDjMltI7QOmsK7DRrtwfJShuiZFf/fQ5wdDKe2vaYHQ7AsTN5GvPVtIvi/anHGn4ktt5ONnkSOHSBIjRu0IIDYIaF5v7kKpnzc9Jim3933ZEyNa3TEXkWUc0AUw9bYPytPZqjgF61g8CGls0Q8x5rH5B4= kx.types-signed.wb.sidnlabs.nl. 3600 IN NSEC kx01.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC kx.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. STlc0nU1R32UIhYyrWQPo08rZ9ZIiRrKKzBbxvZo9bTz2uVWNPwEJnpzmmK2vqyXfbk5HaT3tG+enEkO3yAct4yOBDaW6EncRmdCFqbK2fmx9hO+P+pw9ToqYk/68YPKLiNrGMXqxl8RfmpX+QVJdAwuI7LG1NPT24eTffH34d4= kx01.types-signed.wb.sidnlabs.nl. 60 IN KX 10 kdc.types-signed.wb.sidnlabs.nl. kx01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. lJvhWraGMDMIOkYtcTpS5Degg1H2H4qRBS8qERQp0pBEldKalxUBMqV/Z6ePQM552KUXRlF+pRtzGcLvXs1eX/kv4sz5+2gEpO42u8g+DU4X/VK9cbESVc/RWQsGCnhyT4qzizzIIkCFa5WA/xhoBPmK2wmYwzJPoDvNZgSQD88= kx01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC kx02.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC kx01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. cErg21bBzRZBpzfoJN6hODhwokb54ZFleUvOAq1EoifmHVci+vAu5L0lPU2BAbMPjsQ9/QQmOyJI8TZfbxWvHtHiRcZI0wm5QoKxMXgRq1AggrlTnKgBtfkAhPiuJFNyhvsDzYV8fV8eIf0Uaxuk85GhciuE/MqpJJPTzUqXP/8= kx02.types-signed.wb.sidnlabs.nl. 60 IN KX 10 . kx02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. m8pFgj3dgvmkH/AhwBI+w1y8w67Fp0NVwAkCXaOyTSh8HZbLPmapky7TCzWBsc6rIeu/yNEqChhEqH3FTdhXtGiC8cuKy7Ta7yIP0IjqARXXDdSvKZqHboFv91wOjRH6zvkGwQGzoJukimqELUIuZVLpbWMoDPGhy3sT4Hi3AeA= kx02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC l32.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC kx02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZnxdA0mzm7eb40IM8R4zZAZtGiaPK/leV2y+F8sSIlVpLizLW6VZHH3EaizKnQXUgqUbxWa+SqOgIvVGOlez3ygByKHJTiBAKy4NanSecWmm0vQ1N35GvqcbGuzNECtktD8LB9L5C7Ao40PmDP1lQvgxeAqD74aZ1nNZmvIkdMI= l32.types-signed.wb.sidnlabs.nl. 60 IN TYPE105 \# 6 00 0a c0 00 02 01 ; RRSIG: l32.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 69 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 c3 2b 9c 1f f9 dc ba 10 0f a5 f9 33 65 8b 71 c8 ba 93 52 c4 33 f9 59 f1 f9 d1 35 91 77 9e f5 c6 1d 0d 46 b1 7d c5 45 67 2e 8b 71 16 66 76 04 44 8e f6 d7 8b 28 46 b1 51 40 45 3b 47 af f4 40 55 81 7c 91 c8 ec cb cf b8 2e c8 e7 84 45 27 56 4d d6 47 df d3 0a 81 7d 2b 15 c7 b2 d3 cd 40 52 5a d3 49 f4 2a 0d 9d 5a f7 ea 3f 72 14 cc 8a 54 de be 70 dd fa 2a 45 87 c0 60 b5 0f 8d 5a 1d 64 fc ; NSEC: l32.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 49 03 6c 36 34 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 40 l32.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Nhgme9mLX+ff1Etmoxr7EAawHXMCpGCtb7RMwi/2d8J/YKo1BXK75teXCjJeSIlG/5JXqk1M1qw8QSkx+aWoKCUSBr8bmQt1qYKs6RUK0LoT1fXfBWblAQY7p7t2rEt8VJvhd7blpB3/ZCkuzg7TZn96zMwH6mXBYRKCMv4JKyU= l64.types-signed.wb.sidnlabs.nl. 60 IN TYPE106 \# 10 00 0a 2a 00 0d 78 00 04 05 03 ; RRSIG: l64.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 6a 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 14 be 0d f8 8d 72 5b 50 49 36 1f 50 8d 8a f7 42 0d 22 6d 96 c9 f5 20 cc 62 af 7d ba 10 bc ee 7b 5d cf 85 fa 31 72 e5 1d bc 25 bf 58 4d 62 3c d3 15 b1 4e 92 cb a3 0a bc f3 03 d9 ea 20 a7 cf d5 5f e3 ac 76 b0 31 bb ce 45 22 3d 82 a4 2c 06 f7 fc 3c c9 d2 ba 11 e3 06 08 57 32 aa aa 84 80 34 0c fa 8f ae 1c 75 b2 0d 92 32 f7 81 46 86 0b c6 e3 5c 96 80 71 24 8f c8 bf e3 de 9a e3 b2 e1 27 ; NSEC: l64.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 49 03 6c 6f 63 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 20 l64.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MCOIhgOHf97DPKlkrsmKSRxlxXBXC8iDaWxh55LCSfKU4gZ5kXjzCYSiclN21xOHVsfTzNfrQoM+couCSMdaC8W2LAl7+SMyqYisbbyR130rIx/QVnokhPP4XIyaSqDVWWzpSlRX14LjWFubF14Z+NU9uXlnF/iAMTT83ftHC9E= loc.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 0.000 N 24 39 0.000 E 10m 20m 2000m 20m loc.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. gXMPjxoDL7d3ClMJFvXf8eVrU+cry/+vPE3SxC5Ko/K9mYNH7m1ccJWqt9U/0/L8gJS88TLfrBTXOfyouhwpe5Qc7WQuY/tnG+YWjPmvAOfQoPfn4jv8ywy/KbUsAb1QBs9thQh6y72KGXqJuq17Yuw4jyzwEMhKMf390JsnYKU= loc.types-signed.wb.sidnlabs.nl. 3600 IN NSEC loc01.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC loc.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Lah8vFamyU/NJNRBjF1lsdkgiDYY0x5T6RNGsXbDMHGRIOxyHu1f6DDKUE692xMTF/BB0tLG0jwO4FV9UAttUhcY8EOwFeGZrIXrPYw4bCSmn55Rn1D2IESSZ+82oI0bA+FUtRuNCyJM/Nhzgdv8osx7l3OLFr6yH9cEvvYrv9k= loc01.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 0.000 N 24 39 0.000 E 10m 20m 2000m 20m loc01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Eo1Rb4zpQlQO56DbVX3HsETJqQw2em+Hx4JqK6sLlVzhP/7bg2lpUyrKFJJlHmHt576b+ey+l9NjGBF90zf7gvJJjXJQgFUYMe2dFen5+npCHhaEguZIPzkSS/L4xkJ/s0f7vxxlH14FNT9bX43JnCcmim7SfRx9zjFKkc2JgNg= loc01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC loc02.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC loc01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DpDdQRa41+5XRGMShk9LVCVO/2x0xU/KciUQVwD9CSyOv6+ghnoSav9uJwSCigJgpMK8CnFfi15Pff4l2OqJl6fYWmQXmDrkUmO/m0QCC1o/320FTKd6xw4ZTJVCOC5cuX605AGvEIWQUroOO5jO0v0jDG7m3s72K2oSiV2WbDM= loc02.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 0.000 N 24 39 0.000 E 10m 20m 0.00m 10m loc02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. U9UFLxo290G76h9YkwWT+A9lcPGsmWP2uWC+gJEupYZcI3LezmxSh3hFHI2HG6AbICHaept69insEIc4QQroMN8t72IrNaHrNo55aJf1KF5ksQ9/dHeW0AnL7oLh2KjaCXBklEPjtTY1eaycTmqv18dzKHVbi4oBqc9z2+SxYGg= loc02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC lp.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC loc02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. snf3YYNIR7zeeOrtHFwGPg+0sLS7qlRLpUQK0oZLlssr1xzqhOd09V3ux9YMYwzKQhWlRDrVMvrc60ZGPvTWAOlvZUFhCC0hksKsa1grZfcHtJt2d2ya5WrYxxy0RDP9IBeOowrzGBwx3UsExU08XpZKOeE8DAeYSwTWGj61QiE= lp.types-signed.wb.sidnlabs.nl. 60 IN TYPE107 \# 27 00 0a 0b 6c 36 34 2d 73 75 62 6e 65 74 31 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 ; RRSIG: lp.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 6b 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 8f db 63 e2 b7 06 29 ad 5a f5 de 90 7d d3 30 c7 03 f4 a3 59 98 d4 4f b7 31 74 0a 16 3a d0 91 86 59 35 3f bb 0d 6d cf bb 1a 6b 02 53 15 99 2d d9 a4 57 21 50 7d 4f 83 53 6f da 02 03 94 72 02 10 b0 3e 35 89 4c 9d 87 66 ce de 5e 49 fc 5d 52 f4 60 68 4d 43 30 13 44 be a0 c6 2e f3 c6 e6 39 2a 41 2a 3d e5 79 5a a6 54 3d 1d 41 0d 40 f8 01 76 60 fa 47 a0 ae 7e 89 fb 23 f7 c8 3a 9d d3 cf e2 ; NSEC: lp.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 48 02 6d 62 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 10 lp.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Bzmbk9uCG7BpMNPbWBIjnrLjcJ3EJvxPW+/o+TqWlN8daV6+N7+oWc1K8DupoGB1TCQXykXLR8LBRTcl0DW4DitEIZk+pQxl++L1LN8JJiGFvvtTo93FVxbHuomjR1fnLg36scdo3GlIAG9da/NV5AA7a8r1uhDZ9CirDvvdTfo= mb.types-signed.wb.sidnlabs.nl. 60 IN MB mailbox.types-signed.wb.sidnlabs.nl. mb.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HMNktjuSFKEOSRKJQOU5nMsnvadPX6j+MeJKh9WbSvg9Z7SHpakBeqDTSMKRvtKJPT3fH32NgMjlFOV8TSas59bJBpzHbfnfBMWBjVb4jZzswytfKmdhXLoeSRrVjUweQLRE3OIG0qvKE/wSeF0c0fMJVH6eEce+axqV0JANENY= mb.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mb01.types-signed.wb.sidnlabs.nl. MB RRSIG NSEC mb.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. m8JzyH2RCi/mAQ9L8nnuIsDjr4X/SEZzGZ/LK7lbRQ305I0oOTCxgmAJnCLi4n29oqCcP1gaymKJoa0CSpXa2lie2pjNuWA1vTtcQiM3Qm4pycwFlNUnZjpxABmUtiyszehtb3iaJtpfuXAKFUsK2TL5yJZoQvt4w5Cg9HS+JNk= mb01.types-signed.wb.sidnlabs.nl. 60 IN MG madname.types-signed.wb.sidnlabs.nl. mb01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. TP64cHsuwgGaD2Xxsr94jPnnF2ml6r/sfh6NX10EQ9f4f0wzdRreBJ3rv+76EJX+vZmiT70vZFq9jnYPxF6nN7zYSPuXLJqoXG9qdQGA10yis1mWt5ILB0fDUtzSnt1BR+RapBfHjExe/4W/6XYBu3gZwyQSRXCOFxRy04VOGP8= mb01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mb02.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC mb01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. lAka0baev8L6taxaF/+uz1mSZ1+gHmf8ggsfahOfSz0mGA0OMfx3P30JWpgaqeEjVnzmxaTcp9Slqse6/SCL0XHh9sxceTKp8BmvGgWd+HljVZRgU1ddas1ffGDS0icrLch2oncH0EEQIJozcE/utB5XjgY8lKAEvP8K+DQd0QA= mb02.types-signed.wb.sidnlabs.nl. 60 IN MG . mb02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R9PVgTAt/htcXxCpJ+k7RKpNFXAsiLq6OYFLZa2/6E5o//vd81zZfethLtmChMDLgBEtfaDAPOOr8L0NWJZGvAKcTR7fQ109hqdqo97ViznGjlv3eBk6C61lmI7W8D7RbaMlYtFFtOjHmreipCd+9z1Gj+f/HdPKM2uwVqhAMjE= mb02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC md.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC mb02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. giBNbaCTfWM8dHdPxJLRe1fURwlBwdZvZNAyHcX0Qt9tutJPX3CBbtnQHa6UwpiNvnH73V/C78TvLBcG6/IsUaceHlD4uKMRCopi84OWoERtpDoNxg/x38pk4RYC1btf7zyLCq8O+eyfdWrErJtCnWL9TsWXjkqiB0NyzD0WS0o= md.types-signed.wb.sidnlabs.nl. 60 IN MD maildestination.types-signed.wb.sidnlabs.nl. md.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MD 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. V8sbjl3GHJcTlnPMrFyJSsgWiQ1nU3zdxySSogbZCGRJoUXTGN3S8CQg4UnYxI0eFRLYd31ijDR1CEIf0ib4ciLQxx8fhjsyB2HUARtaq8GFAzbRGFAk+XjKX3x/d6GUfrRdq605cSy6bgffQtjok1i+NH2LwC8tSYD8cg7VyS0= md.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mf.types-signed.wb.sidnlabs.nl. MD RRSIG NSEC md.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Vw8utApHpFTuE2q7GYnmFh5IYkjs21xuE54ctThXxsNQBwaxArIbQkWWH4ViYjTI3C3mXzLgdHYAm9JsP7bRzorZ6ZEfvP/Jb4lzUvxsHBlCa0DKZOcCXKROO8Nq6su9wsd1zJ8v4OyhTNBmfbthspz+Qlr0lsGyrAWqdayOeRE= mf.types-signed.wb.sidnlabs.nl. 60 IN MF mailforwarder.types-signed.wb.sidnlabs.nl. mf.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Gmj86rMvB8g89wprKF9CBeG69kuu217awp1pCzvRDuDl5ApRYM7q9l6oyHfbsC+SXnee0yAC/I4j5xms2IRRtD7kudm0Ds7offyQS4ZciUYKoPemsZWcBa5iPP+NQuO/jPN4QUYmQubz3Y5BhPCROCysd3qgNCSk/ZhmViDWTjc= mf.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mg.types-signed.wb.sidnlabs.nl. MF RRSIG NSEC mf.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. aJHxeM2RQnWe6xLfH75EYGvEpuo4tQe6cLhhKApigSGv8ss8ppbPe17qSvFxPJFIpp+vyjrAtu89Avc7cP4UPuXbRKeE3XV+qoH73UTJ6Fs+i1p3dCuXeWnpXNm/r1nGok7tq+BCistIOFvsEiRTN0hsUPH71eBdU7Ic4lV6Bno= mg.types-signed.wb.sidnlabs.nl. 60 IN MG mailgroupmember.types-signed.wb.sidnlabs.nl. mg.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. G8YqwCpeBiejn3ifwnGfhIazjZJgzDUY/p9tqd0rPG4uwBvMpCJrx6mkb8TWPAXmTf+NWHly5ti5eOgVFblsfV2sHl7scK5zANsICFmL05gfLToWPCdbpFJ3curv5PHWKvlAYOZt82s0HWc3FLMoHo5OaNN0hGrvgK3QeXXHECs= mg.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mg01.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC mg.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Zm3LeNdwOVNR+rQs8IIYqTSxGDFBfrRsqBormYF/rxVXcIyS+tA8r7VI4BmBthwfMobYs3FoA6abH78BK1RMsfCR62kH9ETnDM9sTv3tbtFQodyAbiKhVfV0LJZ3LxMqniTHlBH808bOS8sJJtouhpnjwY+lTrMZwJkxVzEIJnY= mg01.types-signed.wb.sidnlabs.nl. 60 IN MG mgmname.types-signed.wb.sidnlabs.nl. mg01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. V1hOjXAhf3r1pmyle+XrUWjYc1yPCcvOw25XDbypI1l5SDZ8E+MbjMtTHkwpUhsyHyJwveHnhA7zVbo06eTFWrA4ZPYOyTWCryNAiEUCcJkg6tM+OjQQ42bVsEHR3dzS+6kz/I0r9NIaNpp4ZxTFlFEUKCREMvpzkvI0AStFfEg= mg01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mg02.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC mg01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ll6lWw1vorF2zwzcHIdjvXZmjO6ftjkXLIq+sRxhvHQs+MnORWX9mnCOUbwhTYEszYN3QGiMo0QZFPUTRwtz4487oARZA3b8f4XX7DM4cPHKcQtQdN6kfAccHMe+Z+QWCTw+i8JEFE5r/cIlRbMNXVrBteCuHTxXTUnA1EEsut8= mg02.types-signed.wb.sidnlabs.nl. 60 IN MG . mg02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. gUpI7J4FYHcTdWDRrM8GAdFjII8EeMuJVO2dKszrEv8q7b9Dps9KnE0gZ1jWOpd76dVy0Vwdk+JZe/72QWXbH3m/LtkxhjAK20LaXyxs6i8Qo++1Eut90dHQK55SUHL6VLlmaH8y7Boq2/8NQ7dfGucz3uNsY1VWjWumLcrT2YA= mg02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC minfo.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC mg02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OTrr31G9kOqBYaKiDcjumg7n838pOBdV/LF7w6mavw2FUJ8y4C0GOvGQSGj12Oh4Ic1fBzfs4Ep0C6b5Vj58dWesLJJBi3GqOHxyv9bPaLtpjDvICN2Bq0T02QZiZum7XMdHQh9P5rIpFek6ATigRAPD+kLXekYGE8qL0fQ+8xQ= minfo.types-signed.wb.sidnlabs.nl. 60 IN MINFO boxmaster.foo.bar. mailbox.there. minfo.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZA/nHCIx0GbCokFbPHO2hMvaPJesIv3gCOgVmjluzGrO5gJMyyerNLYmwVswiTdIf4sl+wi9421yPJhM5whVZI+Nw3ixBjvwg39X5qYG4SP62UIB2QuUGBJcN+XVrjhoGmljgdNcbK3u4HbqVsZGl4TrhF3O52Pu3L9tRC99jgc= minfo.types-signed.wb.sidnlabs.nl. 3600 IN NSEC minfo01.types-signed.wb.sidnlabs.nl. MINFO RRSIG NSEC minfo.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. cVs2MX9wIlFDmc+00+hEaatpp0kjCtkUzqJAjGAQKRDvh9oQOWFBOm9vEzsxrULBOzgLNEpkWLvzcc+ikw5pm93066Wt8k5waLmbDqILAy1kwpuR8IFVTqjFrG3q0TVyDrqAj7aJBz2s06w99kbE2vSilgrDZQtg3PjBvN+NJbc= minfo01.types-signed.wb.sidnlabs.nl. 60 IN MINFO . . minfo01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. PLMeHJChWBNO2LWbWxsuIoHbovpS3BJgEIqrPg0uhO38VMzQjnlXR2Jx2VByBBtB1pev4LhurUsSzdYxl5dctcWV/45Q/MnJSohOw9CExJhklwf/R9VU0lFFYLl13vHW8TblRo6hO/tGe9IxVs7fvQ0cWz20EknFUSv0wOSilHg= minfo01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mr.types-signed.wb.sidnlabs.nl. MINFO RRSIG NSEC minfo01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ugyG4yrAPppd13/GFyutEBSK897eRAkO1ywUWghr450UJLlbETLYLIWA6sR4B+qS3HIuPmr+5XCGrSpqDA2AFwzbJt2QUfySDyycMLpTVk4PVSUlbQYzWTEUXlQa1rqLY6ZTNo1SqXLH6gotUQPLGkF6bupYESgzNe+g5UbsKJ0= mr.types-signed.wb.sidnlabs.nl. 60 IN MR mailrename.types-signed.wb.sidnlabs.nl. mr.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. bBDlF97SWIz/mwfbaD7r0LykjewEai/QJTrFSkY1lU8kiBGS49VvnQFtd5r0Vtd6lJPMesFmoS+CRffdueZtRhcMqw+hMaijQlQnIcS6Ffnru/rWCvKKafPUX/R41RHY0OziHOKxkEJ+f4PRzbaHgMzssd44NMV4nKciOJhXl8k= mr.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mr01.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC mr.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. d2WMzaFC5ZvUfGM8hXpjr8ycMv/1yzfBxWvy+W8tCi6hmUt9bKzzsDxO029nioa8oQZnJVt7g+fnlaDPFHKEbNYr3hSl0mA9jtkUZEeHwEUd4ya0/Kz38ydEfS+iH90WDZXdmrdJCXgTaLeSJfomFYX18d1t6jYBEOhvg4C4seI= mr01.types-signed.wb.sidnlabs.nl. 60 IN MR mrname.types-signed.wb.sidnlabs.nl. mr01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Nhm0i9TBN9GN99QLaPO0NWj0YkkgKpjwrrvhJOB5k8pPM8wX0E+/x0tZTyA9jOK2cQpW0WAhxDpvMvTADQoGAqPyYxkX7txXKxHhrb05dePKfJdROIGcLO1ebQo4HPagzzNF6pp0RNccLaayGEkeCvCvCjYCfTZwQlbjPJnORSE= mr01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mr02.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC mr01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. R4Y31APDI987gB48QLvaGNngKr+T6FDsfukNB2khuDjgC6ZoyCn/zH03/cuOJzf7Ovgkm5Bmp6XR89tiKjB5F6X5+SgyHyGlflvSU03ffP9azBXuJA3DtDxnBMra40OcmNF6cIvjFtG/s48u1iyGceDYsJUtgWvSJ30zxfdZLiY= mr02.types-signed.wb.sidnlabs.nl. 60 IN MR . mr02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HItNXDRa7Jp8Q91E9m4r7WxCrJhXiR4Hvi1knnVLO98rTuLukNtgCSeHs2cN1iuIpaXLadd8haAZBeK+O5Zo9M7baF+QH0OkcFw0waaKixYnsEAD/AZgfoK30qaOlliZYj9tU+UdiIUMxIxbyNrUDff6S9YrKYY4azVnbwhRl+E= mr02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mx.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC mr02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LHduN8uh/6N8VCorW8d/xQN5xZzXpOm316N4odBrstJZ7Q9OD0ZIvGc6+EVUNdLnnoM7h83vZMW7C0KDms4cZWXio/WC8zoBRE1nzmRyAgc3DIeyaaHpOwvf5Jlcs657GD5Uw39zF+JJtnJbJ1ZK+Qvj1VXkn+J0Fi/4xGIeLNc= mx.types-signed.wb.sidnlabs.nl. 60 IN MX 10 maildoesntwork.types-signed.wb.sidnlabs.nl. mx.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DoOq5zYUjD5cCADGc/YXurDLGiXIQ7saqju7LSU18cn2/TXqFLBEokqA7vJxYNvvzU8vUsaUOfW0prN+JHKKHWTVncgoiCkZlK5DAtWN3OTtr5naHB/XGHQkPA5iTorbgvyUFchufHk2rvJ+Z6wmKGn+9ZmJQU60+0M33LER2/g= mx.types-signed.wb.sidnlabs.nl. 3600 IN NSEC mx01.types-signed.wb.sidnlabs.nl. MX RRSIG NSEC mx.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. nRD8njAlg2bdarp0pVpcjfIEtCmmGRsZG9BY5S6L7pIIGwkZMzuS+9J98XdqhE+Q4sN52zkVoCU5ILbV5RsOS7uFj63+l4Kk6UrF+/3CAYgYvex58QniUj+iR8NYmDwPMBIm21jK0pyO5inhNq7abik+b0V5PZuQWcPfnSxjVR8= mx01.types-signed.wb.sidnlabs.nl. 60 IN MX 10 mail.types-signed.wb.sidnlabs.nl. mx01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. qGwRMqUKhMORO3WZb8jEzRQvfiuRbZGAttDIEAHGxbSwIf8/ag8gY3zfFQnag0e/XcqhbijZuAgGu8qPszetgZNdwaEQ/MzDQtb7YquvmJpX2LAE0Q20Jfulqg6n1ubIOqNDsL9f+nidQj4dAeffmicW5oC+g+/ATGSusNcZinc= mx01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC naptr.types-signed.wb.sidnlabs.nl. MX RRSIG NSEC mx01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. PDzM7fk7l1BqmEfvTHf6Q0PuIVNAklnvGYQPWw92ZYleqyauoh3phEfYCklheuGZVftInrAWlTYAESkXRuGPfloRMUDgELuJo//0MIw1mJBR89xNxBIss10ZWwtpjSKtixmb5TXVjrJlNtFjPI/iXrkNQsaYAT8xnHY96UlAqS4= naptr.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 100 100 "s" "http+l@r" "" naptr.replacement.types-signed.wb.sidnlabs.nl. naptr.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fXCfkYMFOGwVmZmVt9nIUJGHeGQhUqGuzbDtJuYhHTKmwWDpQEt0PB9yIOyvJcjCGtaTcrEc2z6xH4n+gRb57aN8xByFNqk1QisrGChOalhubXbV77RwRm01IaPT6BJXgSVONBNvNBn3Hq2ASPx2EPltE9EVviOmT8EESIYC8+M= naptr.types-signed.wb.sidnlabs.nl. 3600 IN NSEC naptr01.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC naptr.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. j3Lr01oO7jbo30NLkn/l9wGOVTSk2+nfxWUNw7csd8RcUoR9lrkLYahP7kVDMwIL8sGsTxsU/dVrAE+Eu7NXwml06uXo+rhs+f9khhRWbb6Gv4E9clJTJbjlaKiwuKulGAiax/Yt49apI2rFnyfROcQjWePT4PhhmYWSA7c59J0= naptr01.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 0 0 "" "" "" . naptr01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. pgFTFWJdxj2oZanic0sG4CFRdiPKY12gJbpnivQoAclhulCFY2eaTH3C4RvVA7riJ5M899cCCEZkrAD0hnfFqQBkYSqdzTgXHp6Qc4me6T6VWJ+4dXZwD6KR5t+KsjTBGZFLswukfvSicyENwwUp9wWnrxiZIqOVbX9P1/xa55g= naptr01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC naptr02.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC naptr01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ueV806APghV9pDNzvFrL8z6JobK0zxFL4z8Qg6oOcNQEusBiQ4V+BxkedUYQhSn8iPZmX7MZHMRFCCHT2aj/WMSwnb9jLZSi0bGC6lK72vF2NJpKgsRZejcBHvE0biVv1sKtqRnRyO9ro/aPVnDvrSf9lJFIiZ+w/1eo3bvjuFs= naptr02.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 65535 65535 "blurgh" "blorf" "blllbb" foo. naptr02.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 65535 65535 "blurgh" "blorf" "blllbb" foo. naptr02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OoAzH1lHAzjHTHvDyH7y+oZR4cs1cZkV9rF/MBsAF9m2oDjSsAgxxVpOxFxK93Frs6rcZ5GpKN7Wo8Lo8q3YVRb1hXSRz8FfUYxuL9ODXJZOcMBil68opwCt/Oc6ukGFHdQ1brlEyZOQhL6oytdsa5wzp56XrCpRdqtuXzR0OzM= naptr02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC nid.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC naptr02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dxIxqn17d/wwt/I4Yht+cHZ9t7Iz9hqmKNWDsALvIEuMPe3CmdQ6X/ngC4LCRn86f9skAHHrKc6VzIk+YOHGZI96xCyrlhWG8NWt01bRLdw1l+y/teFYeGDwVWDBDA1UDmdM3rnlLBpZVCEy3h5SvXOc17ncjI42CvnflhLJsm8= nid.types-signed.wb.sidnlabs.nl. 60 IN TYPE104 \# 10 00 0a 00 94 01 98 01 52 01 69 ; RRSIG: nid.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 68 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 25 62 7d 85 8d 06 c3 bd 42 ee 06 2f 18 a5 1a 03 b1 8e 71 47 0c df bc 08 0f a8 55 76 fd ea c4 67 91 d4 f2 aa 6c fa 3c 8b 6a db 1b 42 f4 49 d7 a0 85 c4 71 1c 99 0a 00 1c 7d a3 b5 c4 15 ee b5 d5 e7 b9 1c 4f 00 12 ef f7 bb 96 39 c1 d4 9c d5 f7 46 11 98 5b 6a 11 ee d2 f1 f9 ad c8 73 21 98 4a 78 48 fc cc 0a 9e 0e 84 69 eb a6 e1 68 47 3a 54 e0 7c 64 44 da 39 b1 60 fd 6c 32 39 87 66 b0 81 ; NSEC: nid.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 51 05 6e 69 6e 66 6f 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 80 nid.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. I1WXGFms2rtmsAvfOgSMGZonUhWbDOhIO7m0h+oakKqNTbs0JluvzF+sJrzlJGnmYdxZ3D7qP5GDaMDjy0cHMg96BBKwmRcMFJfGDfaJNvEzi/yNYZdbwSlY00+XiLWfSa3/OkBIyxx6tvwGwjkCMTmHJXAdhRSHX6Nt7dGj6F0= ninfo.types-signed.wb.sidnlabs.nl. 60 IN TYPE56 \# 27 1a 54 68 69 73 20 7a 6f 6e 65 20 69 73 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 2e ; RRSIG: ninfo.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 38 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 10 dd a8 f8 bd b9 54 1f 90 5c 47 fa b7 58 66 7c 4c 95 2b c6 68 71 91 fb 39 ec 8b 85 cd 76 aa 77 29 8a 46 a6 df d3 aa df 05 f4 56 8c 14 20 54 a2 11 a3 18 86 10 b9 a7 56 bb de 9d a4 e3 0e e1 ab b6 15 bc 7d 10 ff b8 2d f5 00 3e e3 71 0e 66 a3 65 5e 2b 44 73 0f 02 4d b4 16 ab a1 db eb a2 c3 f4 14 49 b3 82 22 44 a9 f5 f0 73 43 5b 3a 75 d2 48 e4 14 a3 b2 f6 1b 2d bc 56 03 dc 7c 19 45 d2 ; NSEC: ninfo.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 44 04 6e 73 61 70 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 80 ninfo.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tmkTQZgqatcb4Xf3mmDhFkwTU1W5g4rm9jwADG9C2BIM2XnsWrbdth6bTyh6tx8nROmg/htYr+9JBu4kCB0CA5BkTkW2M2yaJBsgRR1G04OcSHjmuhoiuCiwSo3EztvaRa211cBokesCR0fWS/Hzw1WMaxnd+Bde5ZjtWW7l1Lg= nsap.types-signed.wb.sidnlabs.nl. 60 IN NSAP 0x012345 nsap.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NSAP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. T32X7IOd23hPga4aptqtSSaOInhPUtPrQuZ0K70XhLeRHALQG65cFA9BseiHrm2f0joGK1Op5+041rKUBEFIVyCjwzz3GBHoHSDiROnNulbUpQGnknBb1zx3Qz37VGzI2NJc1jqRdh3pqZU6wBvzZ6HfDEyvSkyh4hAFJx9a5ZY= nsap.types-signed.wb.sidnlabs.nl. 3600 IN NSEC nsap01.types-signed.wb.sidnlabs.nl. NSAP RRSIG NSEC nsap.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tXFIUj2W+5T9R9QgGdbjMN+PrucIkBDA+YFbIq+IGSmh1aDH5fuzxb+a4YT2eckP+mHtqsdux6XYzIbApQGLbCbAA8I1jgkKerLR5dW4qjgCkHyiooscVVeugh7DUDbLgxYWRUSldIxQN8w0fTjfT92GwQdJjp+CePXgveu43d4= nsap01.types-signed.wb.sidnlabs.nl. 60 IN NSAP 0x47000580005a0000000001e133ffffff00016100 nsap01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NSAP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. EVzsHVnSnBAv2QHT7htoYvH27Jxt2NYNfAjNdcEfnIxnx4qWlSM91aTpUGqBz86y7y87a5CnH+Lq7m5f7vU3c24LrTGMzsu0csMsvgFMzh6IcJz2Py2a22VvhtFwwC2pjKwjtdwYUXFbQu4FAELf6o5NYaBisHb5Ki+jlGmdqq4= nsap01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC ptr01.types-signed.wb.sidnlabs.nl. NSAP RRSIG NSEC nsap01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. mHWHng+TuTMf9gyA5t8dXrG5ryKOiul3e4woEf5PiT4xR7YIlXoV5pdTcCVdIOIKJ6OPZW+e1Bfep7PMFP6WtQjWfdJIq5PazLdjmekpYsTUOnlnc28i9QFluwaezeoL1OxfF1EWyRr/GotqJWqa3zAtlX8fThZZECUtFH7ul+4= ptr01.types-signed.wb.sidnlabs.nl. 60 IN PTR types-signed.wb.sidnlabs.nl. ptr01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. IhLfaiETx5XMz8fbnbb2/RH8X93K2Z/jv48uZf44+maB8vXXLxTU7Sddnc7tzqsCEu4mA/vbh/XYsHZVCRS2oEYK04HRXTb/fdHTy60WBOFNxx0Qx2AkUsQGwAGDOe5XAQ6kssnTvqmv/tMj6+AmUD0jcg1mc+noOIbRc4T0zDk= ptr01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC px.types-signed.wb.sidnlabs.nl. PTR RRSIG NSEC ptr01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dz8beP7pH6wwG+M0VXOrZM0PQ/61rQ8qKUlHYUMHEPy0HIpxPlQhcVnlgdAwrBg2tE/2/vpEZPEXFPW9+wo+IQfL48sAPeh7Y0XFo/20ieaowlGScJae6bj8bd6k7yXBLzXPJviy79BK5KuSQaz/nWotk6dQj+kI3hwL8cWM8mw= px.types-signed.wb.sidnlabs.nl. 60 IN PX 10 map822.types-signed.wb.sidnlabs.nl. mapx400.types-signed.wb.sidnlabs.nl. px.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rZr/yjK6TJojDsIJ81JI48nVYGIBTEL+CrxFc+ViSeld4abjS7JXPbBy+qWnb9LKqQtUTUnes9NOsJV1seKuj3fy5dkYGbEva/m1IZxHBaM9dCvvzCO3SvzI+yO4GzsbVoQYBtx9lYevWGFnSurwq+1fe7w56nergvNMlAIHfaI= px.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rkey.types-signed.wb.sidnlabs.nl. PX RRSIG NSEC px.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. l19VV3z5EoSCo1QSStGBqxjEqHljzUyYRut9SIyfzQZ2N1e/ww+D79aQp1QZL0eM3ArmjxKxCH6eK70y9jRd3sZ8yl9PyDQhcqjdgtGdPJy9uOxm9FRcBJHTtbRgm/hsWQjuIbtNuaIXFfMrnsKZ7Smz7NCVLXGtDEaTxu/H+qo= rkey.types-signed.wb.sidnlabs.nl. 60 IN TYPE57 \# 136 00 00 01 08 03 01 00 01 d7 b5 3c 9c 98 8e 74 76 47 44 66 cc 3b a2 60 a4 61 fe 57 64 bf 4c e7 54 e6 30 7e 3b 07 64 d2 e0 d1 a8 4b 23 e5 2c be 08 41 9a 29 a8 51 21 9a f5 de 82 91 dd dd a1 d6 c7 63 15 29 8c 56 2c 25 f7 5e ab ea a2 99 81 63 ac 6f 1b 50 0d 81 0f 6b 89 31 a8 35 fd 01 bb 0d 35 29 de 31 da 57 44 35 de bf fc db d4 04 97 4b 23 ac b2 01 c4 2e f0 4a 5a ae d3 27 5f 63 3e 55 5f b5 f4 03 c8 b5 bc 39 bd ; RRSIG: rkey.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 39 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 72 c9 b6 3b 54 b7 e5 9c 17 5d 2b 9c d6 6d 9f 24 2b c6 b5 01 f6 02 ef 4a 07 03 5c ec 49 22 27 f3 6c 67 58 48 60 52 00 d5 ce bc 94 0c e9 c3 33 ba 2d 5e ca 10 ad 9a 92 d3 d0 a4 e7 61 05 85 e0 93 d4 07 20 08 73 11 d3 b9 e5 04 0f 89 0e 6e 1d 34 c4 22 58 30 86 e6 89 3a 82 fb 9a c2 67 0a d4 96 26 21 51 55 80 45 91 8e be 8d bd b7 bd 0d 03 65 ea bc 99 dc 89 e6 5f 36 65 2f 14 3e 0c bd 89 81 ; NSEC: rkey.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 42 02 72 70 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 40 rkey.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. w5CH8sOk1Y2//7DcyCTM7af9NvhRJuQOTfgmv9Xu0phZAgdIFcYlT90h+AebA7DARpT85DluiHKin1C8lkS0aTzn3GHUXpX0CvdxlVGxzIeNymWrKHIje+eZWf1Wuy9IrsBlMSAG2/IhNoPWs5mUiZNGF2HXJ9wLyOqFOJyuyD4= rp.types-signed.wb.sidnlabs.nl. 60 IN RP . txt.types-signed.wb.sidnlabs.nl. rp.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0mAUUhQsCbCuApI0N900sR93wBOmONzG/mU+9ORtMfrDdgQRFU3x0SWH6/3asX/Rh60vWgXJquOD8HDXyQhtwymf/xD8+jsRcLPkpU4Zn+FX7CxtirpchFrPBb57wgk3oXeA1eDkdXylfx4rfG+DCF4PtLrgqlnZjWo91FaIFYY= rp.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rp01.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC rp.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MWydUezsqOyG61ddYPbIHKq7nHuEyGE/KAfCHhbExHcObv4x1JJLeXhsPeZV9phuvcA/RDFeQkeqNcqbw/tt0kfNNJCMjwFwcDAQOQnbZp7lyCBV/5rgBAENxK4Obx8ANz9X8amTmyy7FmTxYi0Wk59zS/TTzpFC8jnMWxVbY2Y= rp01.types-signed.wb.sidnlabs.nl. 60 IN RP mbox-dname.types-signed.wb.sidnlabs.nl. txt-dname.types-signed.wb.sidnlabs.nl. rp01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Df0cttpbhUbrQiU6xPlEd7W8ofQIbfKJPMbq457vQdmBSsiioajhYaMcX3xtm8+9GvugqwMe4iDpKbDsN5Tagt+tquy9yxyhHjTlrS8dg8rPLuxvJMC8GV9pYJEedKmRoLoiqRQFb1290Slg/e9cugVK76b6L36Hcr0zS86arV8= rp01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rp02.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC rp01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. O7SzsWJOuqxFLSGcQb0nXKP85ibz8bGgWGZE9k0n419JaHxVFQfcRqczErU0MiSHfqKnA5iEWRAfj0MDmg1vAxJdKWe/ColElgq146Ux4LXQZIdDYGwFFJSloE4BtWIZBNKB5jwk2P01ULbfYLVECC9c+nhkUxbkgszSIMJn/8k= rp02.types-signed.wb.sidnlabs.nl. 60 IN RP . . rp02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. zLfI6S2WjQN53zKfNZhzzVRd5UQtOTbPNXukI8XC6XiOHiXdmYzFmy5f3/IrANjxX89a3ocgDCLwqJwe+oGzDjxEMtwxEnAFYxS6kfxADe5r0vX9OzbHSVYLrl0V0K7gttG4fziWzj2ol36HQXwfr9xx0+bfx5GMNYPYWQWhfrc= rp02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rt.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC rp02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Z9ZWhfDbLJWMkbgRfpzPARYrWQqk7NDBMNiFZsvoJftbxI6hs9+ex36L1Mr0kSfpnxpZsq9dfwcyQqnKvx6NYpeqr8uLM5NoyQZRcl12w9UQpKyJLK+EVIP4dlvcjypuDqtrld553BPdJHevb6kok2M/RKdZOzTojPi0T88s9bM= rt.types-signed.wb.sidnlabs.nl. 60 IN RT 10 rthost.types-signed.wb.sidnlabs.nl. rt.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. m0arLlFFWg3EuJ8MLcFNCFnT9SZTfxze9mI/5eC6KFIs4o1rQqXTvnR1P669fCbVi3dIcxUUlD2Wmhu76iz52LeQrN/Bz/LoQDFXeHXkdOpk/kgnQ5W+90SEP1le7WbqDOnnQsNi+k0s63HD94QmjzV4UXyxfM/+y/Un/IT4Jhw= rt.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rt01.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC rt.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 072w+49hnO2m1T2CppTxSv77oqqljSRBfx17Zqv9hl+466twAvPq5F/kUGGNiQW3Bj//J4WkHimaKInaPDMLF0v8Ex/0RojyT6IGLB/lbSYLeXTFaIL+Bh6+K4C9lhDQpOLPjXlAbffrCgOzPkhtQheZieXPByUfdXwHlzO5Pn8= rt01.types-signed.wb.sidnlabs.nl. 60 IN RT 0 intermediate-host.types-signed.wb.sidnlabs.nl. rt01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. OdPeXvgrmEcF0NT4cUxOu/IQRsRNx2gb6rrRCl9hvH9JwpjazNGL2IIKB+XvBLfTtiL4JUiAXfYj1p2z1IaTr3yVbRZwwr167v/D1tBnZFmBh8N3pxbSOidEo2CDGXPuJtYjXAT8KJpaQraTjwXyYqXLWkHrey0ITeGuK6CswAk= rt01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC rt02.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC rt01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. x92ge9/GRfWjAuSJx6BuhZsuROWwJnzZ8CtRSSJYAfz9TUXMpRxI4WMgC/6bzR4i1Tyu9/o9rv6hxr5Etv/Opd5zW8cX+/9RCwP99VwQo8HgXwbfvLOY6eKjBaabzwt9rxbJSL3anliHCs9fuBh7BtxEG7d+9/i7QhzkhtuZ1Y8= rt02.types-signed.wb.sidnlabs.nl. 60 IN RT 65535 . rt02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. zzjiOmoQFT1gGKcMXm77E+Cn2aGPdoYBjkq2MI2DmV2YHAiqRrEgBjxNvvVzRf3CaKj3d2D/hOkF/pdN/SZ1WBqk59JJfBkKE/wjr5NgGkUK2gebMMSJbCMRfPmJZ0vCTErtvQ9p9wNnXWr5rdfncuv4yqTGEmN4XnEv7EWuQRs= rt02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC spf.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC rt02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0HXIKijySXvj7ahspOm5Nq+BjvnVyi/TG/N4RsRSMQlOVHdtlgBb3lwKA10lWcHDEE10VujUR+jD4w8Tg63MV2HqL5wioBPmW1reExqe9cTmOrHV0KhvyhmOAAcAdeoFLGdImJQfM53EvJyOR43KYUt8Lgxvbgv6yWwk8aINHcU= spf.types-signed.wb.sidnlabs.nl. 60 IN SPF "v=spf1 +mx a:colo.example.com/28 -all" spf.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SPF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. RWEBwX+MfCQuAZ57zvRjBPEOErW9vTzIqeopOnkxT5T7pLWjrWUAtzptTHxmZ48BTwIThJiTKftnGs6xqhFqw1AoBO+yCpxPSFvgGx1WL6nDmoF/2Udtq8cKaEkhyRQb3lbEo/auRPLLdwPLh2yX0hoG/MDtDOBeyqe2uErDM7g= spf.types-signed.wb.sidnlabs.nl. 3600 IN NSEC srv.types-signed.wb.sidnlabs.nl. RRSIG NSEC SPF spf.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. K45ej1Ej54yZckICAMiufO0kM2VWOH7Em+jhICVjiLRZlQGcRTOJ7EGBGK9L6Y5nWwzleo8QpujBD10ejx1coMX+zC2fHN9WJUeV1VDeCXthOl+AOVpdwOGwYJuBsVJItVWA3okHdjL5jfX1a+oZlKyRqSxoIyBQJwlkL/yEc+Y= srv.types-signed.wb.sidnlabs.nl. 60 IN SRV 65535 65535 65535 old-slow-box.types-signed.wb.sidnlabs.nl. srv.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. CFCGzq2DZSkrscbgtEs4TY1F+RsF8FOKGjC1TDY9zH7JUnxCJyl7OB6k9dt3H4Mj9rki8W4eY//ezo/uOnqHc51WIPBiW7ruPAkJTnSPQ68PtgHO4Yo0ydV+8CqKZdDwSNo4UP4079qUpqsY5Xdla/6yf0AdGYiLMuKbFPyzlAE= srv.types-signed.wb.sidnlabs.nl. 3600 IN NSEC srv01.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC srv.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. iVY5lYVVBExo9mSF6auHJUA2Cle788n4wrk2kuKhivPsxg9S2b6O4BnRdVyAfsve9wKE6ZsixzuevjMm8b08pNRN8P36Nt1mM6vifgX2J7Iz09koXiFW8QChGaK9KrvcoXiZ5J9qrYNQzO3uHZHqFrYhpfQx9PU2EqDgh8XtLiM= srv01.types-signed.wb.sidnlabs.nl. 60 IN SRV 0 0 0 foo. srv01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LNTVSV8wXJzhwqf6LQ18ft1znTi7vhc20ltDpSfqrDBZC231CSKdfDS9NxkLhycaU7NzAD2RCbwE/cYD5F3cn1XIW21IpAVkzSBvUXOceaWmSMqcfnvgtMuj7+gafSYrKRp047vTzzPl0btHqdYJN158ZdJp+I8TvectIUEzsp0= srv01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC srv02.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC srv01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rj9iFGq3JE4Z2sIHLoD54uuvXEz7z2wNJceJT7RdKQpVyn3FiUth+aaB/wZUu6rwQUXWoUEWCJjVrr0y3A+ISxwuKMX8aoMJfMwZe8qpw1vhfGP/kBce6q1tt52gTyGP5aP3qyvFXgDO6y6FFWDxySjGoJVboBxYQ9hDsIJAHsY= srv02.types-signed.wb.sidnlabs.nl. 60 IN SRV 65535 65535 65535 old-slow-box.types-signed.wb.sidnlabs.nl. srv02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LqyxdT6Swu9dZOROcRbapALe6Hj2kFSfi04jMMOlgP2uSUlY9vsfh/rmeHqoX/bqiStjJGzFvTcn/MMQK+ybuYRD+XDpJJ8oLErbj1SO5S6KKdAB6WsMyZ+v5zCQFrxh/ugUAL2ba8xGEuE2AGUgoaPvJRQa7hXue4d2bMLDr3g= srv02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC talink.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC srv02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eN+805hRa+K97AhX6qzIcAaaocIasWR/WZA84wNEAXY0Sei88uN5kt2QhCZvRsXhofiK7wpKkY38EfA/3z9HJNBsOsDmbo5qYlJEax17tAtDDkG37E80CBauCBHGuRARe1k6w66W3w0MI7qgdlYFzguB69zvIbbYUEFSKVtdSFI= talink.types-signed.wb.sidnlabs.nl. 60 IN TYPE58 \# 32 02 68 30 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 02 68 31 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 ; RRSIG: talink.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 3a 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 04 60 66 44 13 f0 5e c3 a1 bb d5 70 bf 9b 17 97 5f d4 4c e4 cd c4 ad dc a5 66 02 f1 6a 1e 4d 65 3a b5 5b b0 2f 0c 2b c9 e5 75 fa 28 4a e1 f6 58 4a 46 cc 20 c5 41 76 4b 2a 96 13 38 5b b0 e2 6a 9a ed d2 3b ff 21 99 af 78 59 ff 45 bb ab 1c c6 9a c7 9a 06 99 01 f5 1c 3b fb a0 8f 94 d6 15 6a b3 ac 11 11 e0 ce 2c ad 3e f6 9e 3a 01 4a d1 c1 b3 cc 75 2c 2d 3c eb 64 ad 2e 9a d2 ff df 9f a4 ; NSEC: talink.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 44 04 74 6c 73 61 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 20 talink.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. YOHwBGJM07n8PtGr3e6gMwHz+OxWU3nzGlq9nuERIKuLiJH+iQ+5RSqSLqWHoWT0TAZUK4cfVlACqmLjfmTBu8YKjbWPkhh5kS/ktDnVlYxBQDdsamReGntKQ7zZujFKvl1AJcBFG7nyL2+uuDXVaSdcongJeIskJoo9/qAAp34= tlsa.types-signed.wb.sidnlabs.nl. 60 IN TYPE52 \# 67 01 01 02 92 00 3b a3 49 42 dc 74 15 2e 2f 2c 40 8d 29 ec a5 a5 20 e7 f2 e0 6b b9 44 f4 dc a3 46 ba f6 3c 1b 17 76 15 d4 66 f6 c4 b7 1c 21 6a 50 29 2b d5 8c 9e bd d2 f7 4e 38 fe 51 ff d4 8c 43 32 6c bc ; RRSIG: tlsa.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 34 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 cd f2 d6 6c 5a 72 33 72 75 09 dc f1 53 3b d3 b8 81 20 1a 38 b5 56 98 c0 61 d3 cb 19 8f 0f d1 9c d1 5d 61 8e 1f c1 a7 1f e2 22 9c f6 71 15 b8 65 85 f5 e2 9b 77 fa 5d 51 e6 34 da d1 2a a8 da 48 18 63 39 56 af ef 28 05 55 5c fe f4 c5 c9 7e 8e 9e c5 c2 37 04 bc 6f 6c 67 07 7d 72 bc 7f 53 d4 2e cf 5e e5 0c 89 62 bb e3 64 c1 d4 d7 b0 b7 7c bc 89 86 6d 1a 05 82 f1 2e 7e 6f 06 ce 06 c9 d2 ; NSEC: tlsa.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 42 03 74 78 74 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 07 00 00 00 00 00 03 08 tlsa.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. l/UvixSoKpysCjWjBsqemPNauLqY2CS+FKgjXLvpPMo6V2wOg9NquVHwjrKYy1L9MD5NjWeQdiAzzEoDbLi7sImP5TAwU9Xk3f+9cZ/B1d0oCgjpMVwwTaiIP38+EOnmkQGF9GaHjsV8YOxQNeK44HRINBTlAHm0WPm6NuTFeJ8= txt.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"Just" "some\"" "\"" "text\"" txt.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. i9VqoaVA7boMToyJIF/Md9FCVRIQYghp2ojDPGU3hQW5BVRkCW+vyo9mAnL++YmOyf/mkHipMo+JWMigtD/mkErRJOHAz9Al5UOdDFbp3ouspxA5SE/NmcH6wcnwiCRiJ64FpEqJiQHxRgBrZuqLZJ8JZfyuacEgQRqNLvQG4kE= txt.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt01.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eJVOacx52Mjuu/NL8+/2Vl1muVh0N/WyFdkUgvxNsDEXaVBCEc+VKMCqqBwY/hsLW93fNb4x5ZWZ5bRQx5hYqyMpWVPBBE1fC7K59f6AhI8i4qni5/uCpwF7X5qbpu367pNAB7GXhW1EEQLPuT6SGML0cjD+iDGDgp3JlkZSmDA= txt01.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" txt01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uvSFJBtawDQH0yhEyp+9aTcuHPyncUcj/EzdwZfwDb6G4086kc1WGNcuNTKzHratimCj12m6qnH8owLxnIN6MDnLaGpa01RNLAfOyBrlq9hQz2rXk6ZSWVioE3VPAUxzaRZSUwZpVG16dGqYnEZho1ZFH10tbiFHmkwpr78NmAA= txt01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt02.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. PPMkIjsjEqTQaNdED1qmhWxHR1rGrXZXn38dwzwQVOaV+wfjYhDSUGxO2nfefPO2EGfyzp2wgJrTJ/PpbaeDlGmShPd7IVCymYnFq2QYJtbRPUJmo4Aqj6z7qIOenRHSudrnVtyBE4J+9UZLTjJiupgmqbA8+pp/zrcEqcgN0JE= txt02.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" "bar" txt02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. thiAv/6Y+2zhNwoCP061OFBgAm0OGIqirjeZ1sE0o8MGR+6atBBFoe0AOJDiGYOkNU7/3etXJgjOex+NVNTxcYtVqNEoKKSbhw9iDNogu4dcjAH5aomevmCw9cxI8EcJuVbf+/d5JnrUGWJhGX/nuFj8sZ4CdnlXmsIRsVlpBww= txt02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt03.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. aRkAdrtlshrkfwlLCPvo0emZVjDBz5PnEC7N5R0LmCx3WWnve3VFeB1E9rwr3u/FxottCZ7Ww56dYo8ZG5jS/gcnj6f4sO4pFv7ZyI9RLwaCe26E/phLscllycey3rEGvfKp6F6rkZTos2W+Asn+5j6aG8ChVgqYwbM8DKoxoEk= txt03.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" txt03.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. WkuggOSq7v26ktw+27typCnQ2PLZ0USkQyoqnbTHTKr4vF1bDZa+CMX4GCansn8WgqL0rxRIXrKSWCMLreuorg8RrTk4gCbQynSAbWfqyd7DpUW7fXc1uQlRhFln3kcUCL98Avjx+v16qkKKGZZp9GwaapYG+yD1zDTO/WZFhRM= txt03.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt04.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt03.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ndaw/rVPl1RzebFE9fMvaoJT/EVNDbybcMCJlUMMGKaWQN2hAv5MBvF5w5UpdscVv+pLpienQUxbBkiglbj+A/S/J5plovs0I48DFaxw1jam66Ezrj9mCDJLq9FxIRmk7G+A9EgDeWuqSlpo7Nq6ASKEpcYBcHSxQbYZXWYeH8Q= txt04.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo" "bar" txt04.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DIbsDF3lLrnDI16sX0Pd2vXFS6IpQqr7MEqSalHnC0Ohe9ZmSOh9b1LfU2zZSMjGvQ5QGzvbqsAphEYf/HM08MN1X2FjCdXxzMhi5LzUsysnRV+7D1CcJmoNIng94LYFOshuLDnp028TDE7eLmAjpjGpQA3fkK1NsWnGgY1KeGk= txt04.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt05.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt04.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. tek1XWbn4R4RDIH0wnPfyAUmE0HF5TkUyA/W2d7/tj/PSyHSVOM1gEc1mFo4re9yzAKUWoacReHVsoJJMSfLRCmEFexBQBXmMZg8Uywo8HzP7YlwjR34Wk3PlCAm6FbvnzVEkCSWa+6DG99zsx+GzqRusLa+nsRO3uGJamMxzEQ= txt05.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" txt05.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. LD7LbI+S4o+MOhiTS0uo5NWFzlIMuJfp3S8wInTKSKhZLOaRG+S+XvyC1rMCO8WgwVxtGHjkinlKWFMpEIX13u1nvNxVtLnkVX6xI42y80q4Ws8Zl/WovwyKJ7LdnkzrM/udpXQcAk0XMik1zBdkJE6LbKHoIc7eg1TF8l9UWQg= txt05.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt06.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt05.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BJA1+XqJ52wCdVBMMUOowPRoxJeF/TmU0uMMQILMhV5X7ENdRDU5gUhELJq94HzFTdZsQzqehH0R0nlFeOQ7eL+hu7ey1OlyNkNxW5pQfcAqvEiWXrQu41scyRqCs1PcDM8QxfXQ79F8sa9+JHgkOWkLiGeCgk2JuVtiHPu5AWc= txt06.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" txt06.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. FpPj4l3OBTcHrHjbGD/cfZfO/L69Pbua8+sXPRUMtCGrP3JCOGmR+iwJBVPlcqozLzO4jaPgK4Hgn0WjAKDpeNoAsp13ALjQ7kdHVYlz+9rMYOfxdm581mpZ1NRjtxVRulWyNpL0NOnQe/TEHDEgAiZ3uGvHE0JvmVywHga3Fmg= txt06.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt07.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt06.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. hc0I0kjwttcA79ptubiaJZEhXcHg/B3FOocEMBEeQiaB+vZIXNj2XmfhMHmpprEpzF63QgWmcCsVvQgWe+ZY5SG0C2PZXWhx9K0rQUTCaXcD9ThwvoBdbUvSTWNDbfoCdtTGn2rINYLn8BO0DPb4FTjGYuWhTv/RIv6jkIv2Ses= txt07.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" txt07.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Wx8QVHIDnslD7UaSyGYed9vITLPmndgYbBFjVMuP4ktADSozN7ST/aRdQ6H8t61EFfAvKlWLDX79+OpIWQ8RuEOA5rUQNVrTQiYNLCNvGudIJ6LFAa5bTpV9nl6B/tCLKGIET0BwDNpq6s8sgpgIh655E4Mq7UvKv5VotqAQrGQ= txt07.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt08.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt07.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. o1Cy5dPDOjK8Cdk8F6FKHNiPIj8t19/0HNqsC4v4sxhExyOeuhWjIFepYqqYkPldgw4fXFsOKJE9yUZlF9xtKYIjy9uqJrn+qvsS5oDy6v4NQv1XKgC9MV4+lJEV1xJuKvrh+pxup/heLAW+8/8xlmU3pLwslg3IJBGCrkCOrws= txt08.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo\010bar" txt08.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fq9Q1ePTr8Nny1Hx9PAj+EYQswqtSc1lgpOCItd6Nvt8oQt452FYQF6u0VCeZuH+TWHIuYd0Vdx65zlCZ85xCJKPhbhfqzMkDkXBwjY/i+5y+OpLdTbrFa3Vfw92nfjBvTkWT9LHUnjzLo7XoaiIHAeZKZi9gqvqrXOUJs1n7Yw= txt08.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt09.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt08.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BFqeBpF0NWxjnz5Jb4LqRknBrH03jB9W48Ei5YESINDc4ca7ITfevsq2HGgkKqbN7HfRbge+nwkZp+Bh29SCXK7+lkaiVeoVuQK1Tr5twrm2R554eCqV7EksDjA4oQqTnfXbogLWIh8QzP4rB1ccLUF4TLaabXJyEe/lM8+fIGA= txt09.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo\010bar" txt09.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BJMfjXpaxfOFph2Au7RYCpBuz19dvJp4C21Fu03bEN60/p6Sc59Wz1EMdgKlwiZWMj9okhXa0awoCTv/2PGkWIiQvVCK2kJwXR9kYc6FN5xPSI02hOhcJK2Yl0qAgo5nkauIfjL3QTIYHBDASil6v+UhRK/p4TzNF+tLY5GF0J4= txt09.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt10.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt09.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. guQatBfPYqEIh5w5NQi6oF0RBFluak0XyztRAzsprkFHjKpOj/uINudJ5fWez11qvaD+ygkVrrkIwfWVFbTTv9M6B1RCCMpYrpfsLNhtcmsLlXQDX2Ff4YmGMfeDtfyiSbcnUlbAhpbkcHPt3NITQc3Z44My97IOwzObJSkMzS4= txt10.types-signed.wb.sidnlabs.nl. 60 IN TXT "foo bar" txt10.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. B5q/ZfSwr1MtQ9j3yH21jqlee8O9jsH234nbHl1d2P8re1ZIF6OvpSHnypj2hZm3zEd9fnZpV9LAx2lzE9pgMuSfppDpJj2HF17up/yGMQaHRQ0FI2TSaOxdKuKmmTYq+3WBdlSbmHadY6fWH3ZJczeXtVxDd1VnFJnVtCkDuEI= txt10.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt11.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt10.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. CbuQ55lP5fTw8z7XiMMWFQkrWUNZumRc5MdbCU/qR6PqPt4vlj7RdYJqbCGTyAF64sYzEacJnASMubX6rBsfJkDwFK/0XrKBoX/x4WsgCGF4/xJSURcZHvOW9cJo/4L2v1iFww56r9TgMkkMZ2QxD962nP7zQNOuTwfqyZdROOU= txt11.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"foo\"" txt11.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. kgGMZgnzc6lesGru1wWGULgOofEejJFdEqXoR4drNG1xEx7MIANz55fgonpZ5KxyU6pbSb+y3iVjCH8vS47gJl6w/irQmUxEBFqUMStMkTPeeA0cqGE67RHsauD72nEQT99yHLnoG7SveAYa3lk0s9FdHGnjxEEJOfwEywe5npk= txt11.types-signed.wb.sidnlabs.nl. 3600 IN NSEC txt12.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt11.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BaNYZYbxreo9do4V4sojKRYCScOA+ARpDoHV6lU8jSi2uNezzLfsIsxtzdJ4a0AKQVqPYnq3XkghZmH9GUk0fGdKSQ0Q7ZjHjsx3mGNlNKmGR1mIsLusieVBXAkfP3M6XYJAn9RvE2uEzMh0INouBOPIdUyJMydh5PvCcXPA670= txt12.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"foo\"" txt12.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VBrMLwVo/AFQBbpATVMC5FmI1up/mKY8IDFWmWbyNPiyolMFhEmPnTWd3qn9+WgEE8GBjRuj8S9YerzuHO5xgZeYqxk6Cxqrhxa209Jo59KQESjT0ZepE+E/KssrkBUD7iiknfx4GDe8RxQQSMZk+QfO5RLK3MNFSHRxUfOp+DM= txt12.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type1.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC txt12.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. sBorSaUpB6wdVK3UL9kRGxzwh+RpDl4KzGrLUlPrUAjAMIi/FuMvRpGxMvkIv0oo2YWu/kt8ydGYkGmI7wEr/sqc8VNKoCnXdmrS6Y3micp71o/MUjbgQSaIqp1EVN4rtHboAoWNpF9WREkwCNlE+U60JXxX3fT9HT8MB4y+is4= type1.types-signed.wb.sidnlabs.nl. 60 IN A 213.136.31.221 type1.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HnLYtItbkUrCWYQi0/5M+59DlrFei9s8YQJdZr7zvf/P4y/b9z8738G+Whgmr/+RiQDkQTz53yANcPquSTqPX/KXoZyUCylNVfq5N0/58hzU2glmzkWhl/woXCSX6wDjlz7s06ITXV2r3XNngUJdM9e+Fc4xLes9yWtmm4V7mUA= type1.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type104.types-signed.wb.sidnlabs.nl. A RRSIG NSEC type1.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. S+A9rV801zsly7G6nQTdRUTbyIcAA6hpD3tidPJPc1JaWnFcvlS3/gWxhp59AUA9462r5qRPd8mqe1w+qp16Dliqpd28Kc1hmFxDFyBhvj3CxVHdU9TXJwwzhMJunJjYNaFrioHHwwz4NWQ27iZWJCHXnRfq78HqnHG+UY7L02Y= type104.types-signed.wb.sidnlabs.nl. 60 IN TYPE104 \# 10 00 0a 00 94 01 98 01 52 01 69 ; RRSIG: type104.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 68 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 d5 66 53 2a f6 41 9b 03 8f d5 c8 65 2b de 32 7c 00 08 88 9d b8 4c 48 0b ca 50 8f 22 a9 a5 1a d2 14 5d e2 1c 0a d1 d4 4f 1a b4 0c 74 43 3e 78 07 e1 b4 d5 fd 23 74 8b 11 f3 99 fb a1 56 cf 50 67 75 95 3a e4 bf cd 76 c8 8f 14 d5 db 62 93 6a 29 1c 08 2a ba 77 a0 b3 ab 77 bf 30 eb 85 a3 99 67 d9 53 72 c2 11 7d f5 1e 9f ff cf 8f 5c 2b 22 81 65 6e b7 7a 04 d7 bc 88 30 d3 cb a8 ab 66 67 c3 ; NSEC: type104.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 53 07 74 79 70 65 31 30 35 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 80 type104.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. syWqtiuLSBEf52SoqxXblLLG5IB67kPDYm4xiuuM8WhNZOTZf0lRsJSaJt8nrv9oTbHi+LePa8wHHt4EHeXiEQO/gF4gTcIRMT5UmCHTngkYzWZ5iWGcRwXiW5HnlipDLMCbqv3R05xKNoRugBfPtYGbgDbe05U+d71OUNMS0AY= type105.types-signed.wb.sidnlabs.nl. 60 IN TYPE105 \# 6 00 0a c0 00 02 01 ; RRSIG: type105.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 69 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 18 53 9c 6e 19 dd da 7e 8a 3f 64 c2 09 f0 27 a5 69 94 90 ac 0a 4a 94 e8 e9 1a fa 63 81 64 92 48 e3 5a dc 21 14 d8 6f 1c a0 4b 87 30 52 15 de 26 49 32 72 48 25 37 59 94 00 68 00 5a 7c ae d1 eb a6 21 7e 7a 49 3b c1 84 98 ae 90 99 5a 9e 85 50 e9 3c 08 f9 06 d2 0f 99 40 8c a8 d1 8b 1a a2 06 27 de 51 39 b1 6a 82 66 41 6b 9f e9 e1 d2 f1 0b a9 7a f0 b2 18 18 56 a8 0d 33 8a ed 8a 32 3d 38 ; NSEC: type105.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 53 07 74 79 70 65 31 30 36 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 40 type105.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. FhaSb/03UXeId1hF7a0xOstlhuNGDWwKPGedQfVEm41fDyzb0/O2ahhQF8vOEHBrCoIwbbE6rZzwXXhamHudSirW1r0JzsFr+hzP4/rzMYFGaxnx5J1g7QSfRkzgTk/yqypMUNCwfMHcyLTDrKQqH0+MPqgsQo1wXB7xzmaC7eo= type106.types-signed.wb.sidnlabs.nl. 60 IN TYPE106 \# 10 00 0a 2a 00 0d 78 00 04 05 03 ; RRSIG: type106.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 6a 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 ae f7 6e b3 b8 86 e8 c7 28 75 8a fb 25 8a 15 f1 22 a3 d6 23 9c bb 85 9a 2b a3 3d 19 e8 39 a5 b7 8d bc a9 95 3e 52 ba 34 2b 00 e8 38 7d fa ee 76 34 25 af 6e 28 53 89 9e 90 57 81 93 ba d0 80 a1 7c d6 eb f6 cf ab 03 be 1e 4b 67 7b cd b2 6b 5f b7 bd 15 ae 8f b7 a3 8b be 26 a0 bc 03 f1 cf 1c 1a 6f 04 4c ed c7 d8 c1 2f d6 2e 31 46 7c 3d 3e 60 76 31 a8 87 6c f2 89 e7 a4 b6 7e 8b a8 bb 93 ; NSEC: type106.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 53 07 74 79 70 65 31 30 37 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 20 type106.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. hQdrfnE0mB+zBqnnridrtRm/hhIYAAvCtdXeq/un3loZhUkGTnOgwTl3aWFP03j+3aSihFfQ1sa5Cj4J1sGLPFT5p1+eoGYzWx3MPOt9vWj3qqDhwXt36dAQg8gPunxMpTUmbkS9VcYPsD+7sdRnKjbgF2UuUjTiYmFuYx1eHSE= type107.types-signed.wb.sidnlabs.nl. 60 IN TYPE107 \# 27 00 0a 0b 6c 36 34 2d 73 75 62 6e 65 74 31 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 ; RRSIG: type107.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 6b 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 6a 9b cd 96 15 96 9b c5 45 13 73 a1 a8 06 86 ba f4 99 4d 7f 73 e9 d0 4f 97 7e 56 83 db df 93 5f 6c 69 e3 c1 9e 44 7b 27 17 b7 0e 9c f4 f0 01 6f ad 4f dd 71 b9 bd c0 d7 0e 77 a8 e5 2a e7 48 57 39 83 fc 9d 3a 57 90 48 f2 5a d9 bc 41 f5 ed d0 ea e8 86 13 b6 6f 28 64 28 76 e1 8c 2b d4 44 ae af cd 4c 3e 42 df a8 c1 32 8b 02 c0 7a b8 99 cb bf 60 aa 67 6e ae 2c 77 99 11 06 6b b3 fe 77 f9 ; NSEC: type107.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 52 06 74 79 70 65 31 31 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 0e 00 00 00 00 00 03 00 00 00 00 00 00 00 10 type107.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Wmyz4qv6QnUgca3D1z2D3xwsnjyXgHc1eX+srLi4bP7wraGU5eBDO5miUB3ankeMauH9sYD8Y5Vu2UXq0H2BolzdkM+OVIatsAEErQoYFTUHhv30WvlxgyndCRcTLuIPIstYeprBP8QNWCvZ7r6K7qZ5Zlg0HCTQLohrRGLuRdE= type11.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 tcp 0 1 2 21 23 24 26 33 34 type11.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. bNn/EeYJu7Vr1g0K69DiC3kK250ZJrXaLgdwtxclCzGl0cj6lieBJcPRJOMDnt3wTQZftdEB27P6e5tDN9OOVHdzcZrVMZz9hlpqkweyfSUS8DJXKcdc8i1Z2WgtUR2FZbpxVxIKXj41k07y+ifvMzFChUtbnuR/yskGJTWgwTc= type11.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type12.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC type11.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. uM88+sv5qkrcMjbHKBj0GTgKeDODbb1wsrsBYrIE523uIWf6uunseDDzuhaas2aY8kB0Et1GARV2ee+Lmswkbdhb10qhjRDlOba9g8u3ng7D/XDCIVfrKag3lptGpqJay0ATB7pQsz3nXHJJAxUoWVAwkHxtacW7EoAKLEno5XA= type12.types-signed.wb.sidnlabs.nl. 60 IN PTR types-signed.wb.sidnlabs.nl. type12.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. x512lckf+y/0s5hqvjhPTblRMN0Z4E6hjKwAJL5Pytvgu6Q15DYKxiXlUPmNiTq99xXcRPMB35kF6yo0DohVmkImfI51N2pbCyyWCX4Kg6maDHK92dKThWRKdqv1l4JE1Wdk3J8l2yaBMzBeXDwNihpGW240yESfkY7Yg5keSXc= type12.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type13.types-signed.wb.sidnlabs.nl. PTR RRSIG NSEC type12.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0xoOvyZ4vFyZXZo/zwZENvU2XJd4yLQ3cVgrn/M4DOTA/wxbLI7xnAXpTxUii7w5diVmfkDzS7rGURDoLgmOGM/QiuQr1/majMILkUCNhy0WFElFvp0JHxHZbZO5wzudXemr5/N4jzcoeq4cLNDraq6rWx3uQw5ViwD+A6KetlY= type13.types-signed.wb.sidnlabs.nl. 60 IN HINFO "Generic PC clone" "MyOS" type13.types-signed.wb.sidnlabs.nl. 60 IN RRSIG HINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. BNGqwyT2klcwR8U1/TCJuoMnKoSe04O36mgJB5nYqlzDSvhFI6fXhwAJJnfv3pQIbuKmZUvIE1DXlYKK25rtii1Kh7iRQ+n0WGfwOmIcVJFzijD33HxajRp+WPxinzlaZ9zJKwM+dWAVaLe9nhgFCZvw4dCngFTuYX1jn76rchI= type13.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type14.types-signed.wb.sidnlabs.nl. HINFO RRSIG NSEC type13.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. wecVOxVaP2xCtBYDRDDSuOmM/mGlloko4w9PqpLKxbwfm1jAe8ypmRFTCf6Nn0mXHkEpDksHYod7HPNY3G+Kt63MumELy5nQbkzOQG4v+/OvGMICOVgnO9nuQ926a4WwNpAguBOwcOVhbmdYmsnh4tKt6N2pT3vt8hV7O33zCfY= type14.types-signed.wb.sidnlabs.nl. 60 IN MINFO boxmaster.foo.bar. mailbox.there. type14.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MINFO 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. hFwPVnIWC6+qKWSIfsK/pw1SXwQdGZ6E50Xa7MtUGxMSuqzJRoW4gk/RCVaPDMHDA8UWJe5vuM2/QFj9T4NZq2vEY4Cge5gs7yfzaxl0Pfytts6OuVABlNNwHZyXwIWxzuIu3jONLIo3Rc13b6Yvb0B0HziX6L2KWEF/d+fhHcI= type14.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type15.types-signed.wb.sidnlabs.nl. MINFO RRSIG NSEC type14.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MX/rO3D90ad3K9e4eJu2kWj7f086sVmwVp8KGp2ODtBp3nzf2OaZz4BNBM7BJOoBXJtz5d8gfWY5q9EUXZkhB4b0UAwpMKzVrXonEe9mPPjr37yn/yX0as+H/OEYX7tpVhef2Ga/eco9XgTU1QkhJo/0EhXXQLDSToeImSV1v6E= type15.types-signed.wb.sidnlabs.nl. 60 IN MX 10 maildoesntwork.types-signed.wb.sidnlabs.nl. type15.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. alCyc8uO3iqxURffoFxYCKeH9+nIbEt5u+ONQpRU5x8jch7wOe1F706vJi7rvWFlatp7VMzVdWbL+cfF54WxBYzxke02UZKJbVSNbZ9fjz+yu7KlAZjNCRG7+G2oOOs4CUtf9Xs7EBaN3/BTkSezzoU0fUQOpCEuGhPz4E5T0SI= type15.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type16.types-signed.wb.sidnlabs.nl. MX RRSIG NSEC type15.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VdqDe4+ggzVpK4w6QoMNt6yqkylqO/4HXgr6FrhYwdnPsBmGbvWuuFigIopaLAabesYBgmNxOinjxK3GRyHZOCHVD+69gQJ7CpKJ0VI7bRXb/EoIF+hb3ojnwYFT4lK/qQDGwAMNmXww4D4W2LvszolgOLtDuvgx/O4+HfL5p10= type16.types-signed.wb.sidnlabs.nl. 60 IN TXT "\"Just" "some\"" "\"" "text\"" type16.types-signed.wb.sidnlabs.nl. 60 IN RRSIG TXT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. e2NElZfsIoa8NxaMCcBQXWMzooDXo8TbX9e23bVIuaEOe5YytzLgoxeKoJ5BxXzd+cSVtoM+gkC29f2GhT8tWrd/CVZOVbsxA/qoHt96qx+LuHKuiNpBErJLVGm4ZJ4FaPAcSHZ1kXek7poDJbTiezew6omr+ZET9H8sa7sVMyc= type16.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type17.types-signed.wb.sidnlabs.nl. TXT RRSIG NSEC type16.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Iq9UgeppXP5xa4NYfqEHa/oyMZVyHcWhoW5lxGjDYhytOVylDyUN24E2CxfIQZxc3fVPU848oMNMl6hDYV01wbvBpPHsKq10zpHyEJUrGdwDFLIHI+hSWwFXmHnh83b3yzcq40hL6ZW8dAkelUTgpBkSWzLEf7IhHS6u9+/HK1k= type17.types-signed.wb.sidnlabs.nl. 60 IN RP . txt.types-signed.wb.sidnlabs.nl. type17.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. NqlDVM5HHDHsOsN4O6QYfW3MYUoNx4VE0zxvtBlwt+ydhnxlbiv7G8pAciUVrtK6fsxma6tnHnq0RXUBuU0DU0go9j9Abjd9btjQmGNtRn3xzJKp0x5ZAUdmCYFl1Dmz25siGiQHgzDX3tbmbScRg73p/kxt7/B7/JrzTeIDD+0= type17.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type18.types-signed.wb.sidnlabs.nl. RP RRSIG NSEC type17.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VZNsecxi0bBubeRPVsrtTJXR8bOIFC7TZfUpUmiuaJIzgi7miXPxcNqQAluXDgsSz/URQlgsYss50wemo1DEJiFSLLz9/dnMVeu9rj8J1183F1fxuPQQT1S1ZLkrl+0S+4cBacROq0wbJv7w2DMmMOB94Dh3PHKOWOBzzDlv7/s= type18.types-signed.wb.sidnlabs.nl. 60 IN AFSDB 12345 afsnode.types-signed.wb.sidnlabs.nl. type18.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AFSDB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. YQz6/e0GojsmeDD07Im2bQe24QL+VbPjgh5SCrbnLVFLHAYPxNtaJ/ErHDT0Di2ZpXq451R2gq8cVi0Oa2on59gzgNdp5tEJ+9fzmOjda7atu0V7kG1DnuMoqbiJ3hRD20kF8qp8Bqsm27QsMAeiKiqBje9k9AEjIt8JkxvjFWw= type18.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type19.types-signed.wb.sidnlabs.nl. AFSDB RRSIG NSEC type18.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. naKTTAV7517qYBYZLPiDdAIaRXVjOmmuh796SV3LO+xtI8F2lj63a+31kH4sJ/MXpm5gObeJpv6Mzjqg68njy4BSBytUmfn3WSOhyKQ1SOws6g3F2sJ7jr1HinXt2WBaLyub6scAuOTDQpXLPXvN1JzuNGUEgS8fl6yVfnST+Ak= type19.types-signed.wb.sidnlabs.nl. 60 IN X25 "3033033033" type19.types-signed.wb.sidnlabs.nl. 60 IN RRSIG X25 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. yxQ18T2jmpGM3u4bqcW9FeukAkNN8KE2Og3cbPb8DgRqXlDOM0yNygmaGHKpMt3PHlX/br8zNixrZfahHXPDB+IK3+PwWgMkeJdtkUbPAbHinCiwnOuOhTxunSmVwuGAKN+YJ14yfcmYRxYNe8gZteP/PqclTIrDM6r2niA5mcU= type19.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type20.types-signed.wb.sidnlabs.nl. X25 RRSIG NSEC type19.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. MNMK6p/DURHn0TT7DbSOw+ba7vIBmwN0IBGt4QxZLCy5jOHuhpIfcYtXeD+s+yeRdgpkqp4QLaI/eqXwlaMTxS8yc/QYmoV9lKGArnI1u2/954YxmcKfZkrRtaBDWh1mfBFO/hmNzXNdUyKpYnAhltd2bvKf/fs5TEpaarSM3ZE= type20.types-signed.wb.sidnlabs.nl. 60 IN ISDN "isdn-address" "subaddress" type20.types-signed.wb.sidnlabs.nl. 60 IN RRSIG ISDN 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Pof2TR2skrnegyKNzd4f/gqJx0a7OQbbF2ihvcvGym8pAQ04S/0u1+TNnkcMS7/lO7XcYsSEtWTMYB94fcqQ7LaiKU9xKOk2iZxtMGj4N46eBTC2EBs4lkfO1FC1Zj3LXMLSwoxeyJkOWJXzIgqlDHlpoiO3FvS/DVs/rmmu95I= type20.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type21.types-signed.wb.sidnlabs.nl. ISDN RRSIG NSEC type20.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. KVwZsEsv7GT5dA0MjaSMrgCnr2FQJIb+wDhPH4LGJlqa2gwUYvdCl2Q/EFZCtxV3Q6mTCGsAX46Gk2ydV9cG4rpS2vD8alxC/xm0W2C6zj+eECP4CXOHKGAM1C90ZN0p9fHzzPCKD8cHWLKPi47CXOJ/hkQNQwZEzUQiG59mJrA= type21.types-signed.wb.sidnlabs.nl. 60 IN RT 10 rthost.types-signed.wb.sidnlabs.nl. type21.types-signed.wb.sidnlabs.nl. 60 IN RRSIG RT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Um5c+Zahp1yifMbo42CMTs6vlhVAEiV/4vjd41SVJSg9wdafLFxZPFxNROc2qmqGPR1DU+RNcf7u47AG1jld6PKBNPVSEr/RDrb5GCToMdPPPMgwp5eZ9tU9WtuIf6L+kiEdzSf7I917GySLYPnvCyHIqfFIl3nwnSSkvuLDuGU= type21.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type22.types-signed.wb.sidnlabs.nl. RT RRSIG NSEC type21.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fZlgo/6e2JBkB7LwXDAMgFzkyDoudOhjriNOShROayENOyK7lJSE1z3I0KTHlZVSaRzzQVKTOamVqXTDHzfKiFfxLjhNH99Pz1XRMLhPA6b01Xy7MRJrDCLi6KoCsiE1rOaKSc5YfWQRQ4pBABeuyTRrLnyzzWw8niByFiDniyM= type22.types-signed.wb.sidnlabs.nl. 60 IN NSAP 0x47000580005a0000000001e133ffffff00016100 type22.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NSAP 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. XvZudSKX39GYPjVDYy7DR+mDuGyz/HWwQ2w8uwndB+RiObS8ktH6dDeYTTvKcwAKEct/0ttEfJgGBCeiejIG1PKuq5LWE2k06D0whNkVe38eGBj6dqmzoiAFVKwDhBBvPKDzWAxcWnPauc7S9DNk7Vjx8lWAUQ7r90QzY1EJG4Y= type22.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type26.types-signed.wb.sidnlabs.nl. NSAP RRSIG NSEC type22.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Pvy2G9XMdRiiEclL+ZMPZlzY5Su3ba1VHNnYSpgVmJlT8GD5GSBSCWUy214i4Cpj8vgjOrQj2OpdU4RF4IWS0N+I9qBFLYQNORTupPIXgafhPN/GIutMXPA3vlfwLWuFjmYGyfej6RYpCr0kmJgzfFln2g7zZJhDaacd/5yF444= type26.types-signed.wb.sidnlabs.nl. 60 IN PX 10 map822.types-signed.wb.sidnlabs.nl. mapx400.types-signed.wb.sidnlabs.nl. type26.types-signed.wb.sidnlabs.nl. 60 IN RRSIG PX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. B7x+bFjM5eFr9M+ib0d810gERF+EiDvhBVQjW6a5SQChSVfEO/j7MD7XETF0vGnLYHC6UBixVnpwfvPp1c4FYOm91tiGL6sHBxfG+fYPiwQ//cIoaABh28FppfSHFlV41+sXjcoKw2dcIzcCGSYJl4mhvXLfb++sqB59lznHmr8= type26.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type27.types-signed.wb.sidnlabs.nl. PX RRSIG NSEC type26.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. s38cK3O7HWpe5KU+Lp6PiT8KTiD9Yrx8HFbSpA1ZrHzSUVdVX8Z3u53Kp2w/B3ELOB27Ye7yqIlqZ/GvQBB9/FvXS2JZOs/75AfeoBXhLXIpRyW9x7ghj9xemRpWdsybrFm4otdD86OkeSJhZ9VJc8fa4yJn0q1t6HPMir3PoH4= type27.types-signed.wb.sidnlabs.nl. 60 IN TYPE27 \# 18 05 32 33 2e 36 37 05 32 33 2e 36 37 05 32 33 2e 36 37 ; RRSIG: type27.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 1b 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 13 bf 8c a0 c4 6c ab e2 34 d3 a0 d5 5a 9d 4d 2a 30 44 9e 21 a2 5e 88 9d ba e3 49 9a 2c 56 7b 8f 65 2c 2c b2 f6 7a 83 76 7d 6b 59 63 20 5f 7f bf 83 a7 93 18 e7 02 c5 58 e3 06 88 50 7e 06 20 29 fc f4 eb d2 ec 5d ee 7d fe b6 c3 c2 f3 26 13 19 20 40 1a 05 44 4a aa 32 6c c9 d1 18 13 9c 43 a4 a0 dc 83 4e ce 3e cf 88 3d ac 78 b0 30 31 f1 54 32 a5 ac d4 33 15 87 f4 3b 22 17 6c ba 0a 6e 14 ; NSEC: type27.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 44 06 74 79 70 65 32 38 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 06 00 00 00 10 00 03 type27.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. X6h589HJ0wrKtIeFOr0yaULPb6woH2Ka5bZdr1CVgk4cOu5tNo/80KuRJUDgegjA8ALJFnHJENJbB+robgW+MMjHdrdxYj36kmI6VNrUIV5f7MaqVAnEPFwanmH1I8IsMrYCtoWyHSrRwNsb2gQ3+sliqM9uTXs4rsxLcJJVkkw= type28.types-signed.wb.sidnlabs.nl. 60 IN AAAA 2001:7b8:c05::80:4 type28.types-signed.wb.sidnlabs.nl. 60 IN RRSIG AAAA 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. qi/CKoXG8391j+KLMEFTKPIsI5KGyXdm7iTlbzZaVFP+8HDAZrpjn9E+a9ZfrodExC2sD7szNEkaOkbhTAEGLVmUEW2OajQcZLehWsWUiLexvhpDgKfWfdh5AJUKtQd+fF9kk+NYfqgc2p0QVT7tGBhmSxM6CnvuUKYH/EaZA1o= type28.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type29.types-signed.wb.sidnlabs.nl. AAAA RRSIG NSEC type28.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. RLaxe7Vcggc9xU0pFjIIG2SGxadDEY0IfcAS6WIDP/VJKkExBrRS6x8Gh6F0+pXiUfiNbPF3/MxLa5nKc2RpeLUm3hLK/6FLgHj881TACaheathNx8W71PC6vUO0h/KCy57E0VfEdzw3c4i+hAwMDZMzCODjCqc3e7etSI0iv6k= type29.types-signed.wb.sidnlabs.nl. 60 IN LOC 60 09 0.000 N 24 39 0.000 E 10m 20m 2000m 20m type29.types-signed.wb.sidnlabs.nl. 60 IN RRSIG LOC 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dzeX7l5t/spRtZ4pd4wqKYhS0MQ+z0iB9mnD1omRZ9y8qWWyze6CfIo/1WuLFaGLZn/e6fJndvH/oyWHwHB3B/2PJ/A11PlBFOrYAqNWVOfi8wD3+h2eybdpPP32ZVvLPHDW+ywZzE1Pp9wq2XUxygMPjxjxOTJoog51gUYbh/4= type29.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type3.types-signed.wb.sidnlabs.nl. LOC RRSIG NSEC type29.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vbV8xEkjhjT1eYZ8vRmpPuX1pUcEUpZD2euFX45xN3Vieo5krZFn0OTa0WmtVyYpbBwWJwBDEL0fbf1XHBnBeCwrFDRK7wdAfKyFBJR4u/dV5i/ARO1/gXToyplTS3JIdpXRmb+J7UZzHVCvF+sVorqJ8ZNe2Br/b0qD5vEi/lE= type3.types-signed.wb.sidnlabs.nl. 60 IN MD maildestination.types-signed.wb.sidnlabs.nl. type3.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MD 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. dMBfaQ9FCoBRcGbPixCycIAcRsbhaY3Mdzd7u8LeQZcyVgjZLwoet7lHwXZmMwbxmf2kXYANptuBcATuK1z4UcjfdD8f9woALqVzZlfqqbuW/3UAr6m2/3LdEfoQ7zgp8NMWd6ndz3eeds0Ez5UJpLtyUyxVLhAy+1ukhxzZB1Q= type3.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type33.types-signed.wb.sidnlabs.nl. MD RRSIG NSEC type3.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. vVpRL+15MWzDMlidMWoehtIPf78zkXCSlkdE58Md/fWrhIv0P90uKnecN9Vc8gt+G/0zYZq0J2lq43eRXxK9F3icnNPnKq5cH79xwUjUYA44RJyp+JoA6n2aSRUtmVDaoqgEpeVKyHaaduo0Ewx2zdnKRQizHa5hGNLQwx6I1Lo= type33.types-signed.wb.sidnlabs.nl. 60 IN SRV 65535 65535 65535 old-slow-box.types-signed.wb.sidnlabs.nl. type33.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SRV 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. VL8gJoEx/2MR+T7aS1L65WRCgGWenOF69A6TwP2nacr7DueyuiQOKY+3xM9fu+B42NDbszHQwicl3G+NwES0izpp54y6HR8vw/fgEDW00QJjCMMox5u/B5GKfiCg7/CRqQIJCeSj75dimmmTg/brKZtvjIpczbSLd8iJwXbyTFM= type33.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type35.types-signed.wb.sidnlabs.nl. SRV RRSIG NSEC type33.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. M6OFYbCiqZSBBagSGx7tEaeWot+ILnQwNKUSH8morMAsZ9yckpOyq7oY2X7T02JDSS/0ZHyQR0UukH7BD72Z4dgMIzJ8nm0hoau/sSAjRpWRZ5Vokf9YEzXEKvRdwqc6q+LjT8KuWVeKMK9w+uBP6wgYS5Ao+HqV0hgtbNnjYRo= type35.types-signed.wb.sidnlabs.nl. 60 IN NAPTR 100 100 "s" "http+l@r" "" naptr.replacement.types-signed.wb.sidnlabs.nl. type35.types-signed.wb.sidnlabs.nl. 60 IN RRSIG NAPTR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. nBnu2lhatErGRmjTeV/igqR5Rlf5uuoHExMMdKAWJONBBihQHm+JamS+hhZDYKULsehqz2RhXHAJk3n5PgNECDDfw8huDOHPzNWYQU0Y3Y3/orBj5zUWMPkrs3FR8xKPoi0QNUeISTtPBtnZJjUdWUxgL4kG0sXQZCHSwZvRyQ4= type35.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type36.types-signed.wb.sidnlabs.nl. NAPTR RRSIG NSEC type35.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ppd/JXq9CShfmZsDvKW2/Ys5UkrF44UYZyWKo0jxGlYJDRMOHWmJPKYj/UXoMbek4f/fp6iz9ovpeqo63bN9KKPNc4GGdxqoFI6uxlWJ9m2L6VcRXOnhKeKLTRFpAMn7mBdHBVgYZYkX8u0VZnyxL2zfDqaFiC4VaF0yycdnezQ= type36.types-signed.wb.sidnlabs.nl. 60 IN KX 10 kx.types-signed.wb.sidnlabs.nl. type36.types-signed.wb.sidnlabs.nl. 60 IN RRSIG KX 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. L5jL15c2aSkZK2BWyi2767MbGKp0RQja/EoKIEcwC9Sk3oEvIXSfh7wFsTnumjy4wtrTRN84MpOZgPaHH7niRyTzwXvsF52w4E7CVGVi3XoOrvdqxnpLJB52Doha3REfUXvU2feFxnh0RTNA99QM8G7TtG5fTht5kMx3/GAs2rc= type36.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type37.types-signed.wb.sidnlabs.nl. KX RRSIG NSEC type36.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. d6YAVe/r2WfbPRXOl6up1VWp0XUDRH+Trti6ioBX0y+csWPw4jDlIFcGrOoECoYPpf9gUybcSQtkbN9o1afWPExDkOMJJ7d/JVxoAXECIyqhgNv5W0bnPJCnBKSw2H+xYfrIHAqR5LNzcX3b2P3lINDy5JmXr+TDyVfokHCkCx8= type37.types-signed.wb.sidnlabs.nl. 60 IN CERT 65534 65535 254 MxFcby9k/yvedMfQgKzhH5er0Mu/vILz45IkskceFGgiWCn/GxHhai6VAuHAoNUz4YoU1tVfSCSqQYn6//11U6Nld80jEeC8aTrO+KKmCaY= type37.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CERT 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. SlCOl2LPMWklV5mmMC4Z9LzEy9GIhZPm+dVXhp7LFc0CmxR94zAp6NrNQmo/5LAMCcqWaXZtBhsyDgQhcZFg919JVkmK7yiJ9bzqIg8RQUNOtMh4pI9TtYgg7FRXM3MkPu+yTy7HYv/rFhuAM3X9IgITodeeVeSArSYx9hiOAhA= type37.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type39.types-signed.wb.sidnlabs.nl. CERT RRSIG NSEC type37.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. o/U1lTNjKe/yQjunuVgr7PAH9su7HATW80F+/H2H+R+Apa6ktdP4mZFVTdUaxSnD3KzV6H2Y4l8SZJ2YoqmukADyngrfwcqz0Xy0HTl/Eo9BrnZGqUZ4zyDBsZK3uvkM3sLODGRQNYhBSmEUn0MUOARXecJH6BufBP3csvUIHZ4= type39.types-signed.wb.sidnlabs.nl. 60 IN DNAME dname-target. type39.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZmECqkLy7Qw4nGo8F4DcKps5SeAjFa7p/nCxpF8zGZH9LQCwzxOmwlNCld6omDnYscx3OgFHG+GJ+3rMRjW+ZyAc9U1Y92bDpEjDz7UKdWmUpTUT7rJ0Cur08GV4dWPhCPjOHqNnicmZnG5lXZCzSssFE9tjuLsvzZrIR8rUxG8= type39.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type4.types-signed.wb.sidnlabs.nl. DNAME RRSIG NSEC type39.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. KbbOeByeCe2YefjKI5U1SPUYiwOCk1twYKb6h5mm+NL0xEDiYiT+qdSp8sR0ste1VWh6grikJwZ8E/aaFZlEsbfKREMdT0Nx2aWJOEcE41P7y6z5vijvIl8MsB80LzcCwC0PyOg/2EYHZOTtzigiTaAz9gp63ITDrCXrycoobwU= type4.types-signed.wb.sidnlabs.nl. 60 IN MF mailforwarder.types-signed.wb.sidnlabs.nl. type4.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. eV+t41KAgyw/SNfAFRdDxX0rRahvBbVJIGT6q9gZfX25CEK1R29pDwX7rG17bVK6MdsKVFOZZewKGvjoHUQ+mxHO52F1/I7RTLyVye0z+oqiwTHK6TIdR4nrtEGJewwNc/P3xsRl8Y/hXpbCYXBBSeDsrIxmBlHWbKIkxQctHtQ= type4.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type49.types-signed.wb.sidnlabs.nl. MF RRSIG NSEC type4.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ArjC3guyoU/kicVZN6aQHPIX60JmGFW3TlwapId7wpWRy7etmciUKPR3+9qx0/xbZ8wuPto8KsE+083P2Fnd2gwk56devOIKlfxJh5LD/vDhOCdKv9fZ38skLxzXtRX2Yzr1h8PhO0MzldjB2HNLornyph+PXGb3oAUhajg3b7c= type49.types-signed.wb.sidnlabs.nl. 60 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA= type49.types-signed.wb.sidnlabs.nl. 60 IN RRSIG DHCID 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. TyUCNkjU1cH1SL7CdZklnUrng5jhWYOQkXV+lRbr/g2lJ3hbInyZ0jGp4hqye9jN7drTD5XaBtzesxzkyEE6KoACEgWpvCYi0yb67URORLbSnfk9V65UWjTQTWh9UQkr8Dt1PVKQ18w0ukiXCHsP0sbAKyk4mSyFNpsFCLK46Ls= type49.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type5.types-signed.wb.sidnlabs.nl. RRSIG NSEC DHCID type49.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rU4xWncTlzMdgTLJVz3Wb05ZpWgMRSuAyuiJNm+n0+tDn4S5q5oRwk2W8MZzMyuKx9iLJhE0xU5H4DxeIBzyetWKVjaHaXt6+hb0IttrBeW/PHVE/hPbS6r5Ozon5ZTU6DzgxYSnMhWuilWLHrUhs1zaR6Bf6RDJwyGc9WK76eU= type5.types-signed.wb.sidnlabs.nl. 60 IN CNAME www.types-signed.wb.sidnlabs.nl. type5.types-signed.wb.sidnlabs.nl. 60 IN RRSIG CNAME 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0ntnbJbTyh00XP95sXfExiYrWqN4V668japhRVXKuzMyViuYQv5XqXvOc37BNe/A1w7vBBeIbdLtjNAnFaER5WPzFdlK4nrTLLgEakzZ5Owt3KudHkf1aMpRWHBMXuk7JfekCkWw/MMh5Wprb4Im3u2A80xHVU69RyhSn2t68l4= type5.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type52.types-signed.wb.sidnlabs.nl. CNAME RRSIG NSEC type5.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. lWtXPElNPR2D7+zmAPI0ktLKRM+OipgRWrTjQPFY16pyfSa3nXwu4OT43fWl2fBD5hfN3UZzZIzeN1Mwtr85aDiiA7Trqba4idNp7robO41j1jUWO1cKqaOcp/LBv8qKnjiCbk522BeeZ7nJe1ABzzL86mOdvL4QEPJvjLjVWTU= type52.types-signed.wb.sidnlabs.nl. 60 IN TYPE52 \# 67 01 01 02 92 00 3b a3 49 42 dc 74 15 2e 2f 2c 40 8d 29 ec a5 a5 20 e7 f2 e0 6b b9 44 f4 dc a3 46 ba f6 3c 1b 17 76 15 d4 66 f6 c4 b7 1c 21 6a 50 29 2b d5 8c 9e bd d2 f7 4e 38 fe 51 ff d4 8c 43 32 6c bc ; RRSIG: type52.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 34 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 7c 3a 75 6d 26 5a 46 89 8d c4 95 a9 4d 7e 93 3f 19 72 dd 81 24 33 54 4b b1 39 90 08 c5 9e b6 b9 16 93 14 84 33 8f d3 ea 05 21 9f 5a a8 36 52 65 e7 ac fa 2b 99 5c 19 17 c4 b8 53 81 cf 5d 6d 1c ee ac e9 73 54 a1 02 17 72 a5 81 13 c6 b9 c5 38 d2 ed 51 1f 9c 58 1d f0 a0 2e 75 42 f1 21 3e 16 85 27 f9 e7 22 01 96 36 28 a9 c4 be 5b d1 90 8c 49 3b 7e ce 94 91 8b 74 0e e0 d2 ff 4a 41 98 ba ; NSEC: type52.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 45 06 74 79 70 65 35 36 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 07 00 00 00 00 00 03 08 type52.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ax+MxUC07rKTnOwSrlHJpF59yAHhhT9o0zg6a9kYrLZVaHb7svDMN9qqFa4LeF9rE3uD/LtBqYJzLJPhVqcI9aua+vH/uBEbM5fg8FHql/jTE9DtkGPbzlV6TGtNv9MTOjObXNkhuwDR7xREOm65nZ1VTgaW5bYx1X9yeZiWWgA= type56.types-signed.wb.sidnlabs.nl. 60 IN TYPE56 \# 27 1a 54 68 69 73 20 7a 6f 6e 65 20 69 73 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 2e ; RRSIG: type56.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 38 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 b1 2e 7f ab a9 1d 6b 5d e3 55 1b 72 01 51 5c 94 c6 1d cf b9 36 dc 67 94 66 ed 2b bf ab 1a 29 5b 19 91 f4 fd eb 59 38 88 ee 8a c2 f8 f9 e2 d2 7c cf c5 08 0e 72 d4 c0 ff 8e 40 c0 20 e3 41 d0 d1 44 4e fc dc 7c b1 a6 f6 ea c0 64 2e be f6 6a 26 16 13 f2 ee 4f d0 a9 45 ac 8c f2 22 d6 1c 63 20 12 2c 48 98 99 a2 a2 2a 47 a1 e2 cd db c3 5c b8 cd 6c be 6b cb 50 e7 03 52 57 87 1d ca 71 3e 6b ; NSEC: type56.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 46 06 74 79 70 65 35 37 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 80 type56.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. oEgJi1LXQnhjuvcrWU+CYQ4DgVdasmV7JXVPQyzdV4ORRNoDMDMpBA2ei6vF6NpGm5dcLrSKFLFpfqJBO4+quuCbmM2RAXEFZ8cZpZLNkA11rMxJfwXG4IEDywh1TslthcYL1ukoy1sG6wEQPgadcetfEP5Fk7sMH4P32bwJY0s= type57.types-signed.wb.sidnlabs.nl. 60 IN TYPE57 \# 136 00 00 01 08 03 01 00 01 d7 b5 3c 9c 98 8e 74 76 47 44 66 cc 3b a2 60 a4 61 fe 57 64 bf 4c e7 54 e6 30 7e 3b 07 64 d2 e0 d1 a8 4b 23 e5 2c be 08 41 9a 29 a8 51 21 9a f5 de 82 91 dd dd a1 d6 c7 63 15 29 8c 56 2c 25 f7 5e ab ea a2 99 81 63 ac 6f 1b 50 0d 81 0f 6b 89 31 a8 35 fd 01 bb 0d 35 29 de 31 da 57 44 35 de bf fc db d4 04 97 4b 23 ac b2 01 c4 2e f0 4a 5a ae d3 27 5f 63 3e 55 5f b5 f4 03 c8 b5 bc 39 bd ; RRSIG: type57.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 39 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 b8 86 c4 44 a3 b0 56 0a 1f cb 3c d1 24 56 7d 86 b6 df 79 4f d3 1e 0f 16 de c9 f8 f0 c6 d7 53 91 31 9e bd 94 e2 ff 46 38 cf 5c 49 be 69 f2 4b 50 f0 1c 77 de e2 98 3f e5 3f 29 48 88 bf 0a 3a c4 bf a8 d2 f6 bc 38 e0 a4 02 1d b7 6f ef c7 b5 fb 17 bc 65 ce 8c b5 09 ac 14 c3 a5 98 e5 f8 32 7b 27 8e 07 33 d1 b0 9d 1e 03 86 0b 06 2e c9 40 bf c6 b8 dc 08 b2 e9 28 51 44 f9 91 e7 69 22 2d 4f ; NSEC: type57.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 46 06 74 79 70 65 35 38 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 40 type57.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. EK1Nf9XdaS55J7SIWhfi7Fs0yO6FSiza+84oSDeDr+eoHT6gzrhOI/7QgvmB1fbze9Ju9u/C9Mgh0G5RFqqSep0JGl/XtEEThIuPMi9uXfkuz+Pxl2kOVG9kWbo4n6vI08Enfgey+t9oHN4QfAc2UIH1mgHrYSZfJk0eLcVQNIc= type58.types-signed.wb.sidnlabs.nl. 60 IN TYPE58 \# 32 02 68 30 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 02 68 31 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 ; RRSIG: type58.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 3a 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 c9 c4 1f b3 9c 61 74 77 b0 86 4a 42 8b 90 b6 7d 37 dd 40 11 da 80 bb a5 dd 17 e9 d9 55 3c 40 8b 9a db 2b c5 20 c3 8e 31 17 ae a7 52 36 20 84 fe 89 ba 88 3d fb 59 ea 6f fa 9b eb 63 56 bb 99 3d 26 8a a0 97 01 3d 48 7b a0 41 ab 63 6d cc b2 35 11 d9 bc 45 12 26 df df 7e ed 64 2c ef d1 ef 26 bc 69 eb ee 09 7a f5 89 df c9 c9 63 bf 69 62 81 6c 7c 0c df 43 12 a3 8d 88 4e 66 98 fb 6a 90 fd ; NSEC: type58.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 46 06 74 79 70 65 35 39 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 20 type58.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. DtEdLwbHmM4IEJVYDlPbQNMAM6z2ksWMtbYX5InIuJ28sRKaAo7hyNdCMayBI4UgPAYmKd/nESh0qX6i3SADERNnPVreufJkP1GdP3au59qV+C6IDG8CkM5/N1nFRRid4T+gzpoqWxolKu3VflghEUeTkPem5e10KVBFPt1qang= type59.types-signed.wb.sidnlabs.nl. 60 IN TYPE59 \# 36 fc b2 08 02 86 63 2f 83 49 4b 1d 70 37 e7 29 49 fd 6c d8 68 9c 5d aa f4 df 1e 5d 7e 6e f3 ba 28 ec e1 e3 c8 ; RRSIG: type59.types-signed.wb.sidnlabs.nl. 60 IN TYPE46 \# 175 00 3b 08 05 00 00 00 3c 52 ec 39 00 52 49 63 dc f3 5a 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 73 99 7b f3 3e 9e ec bc aa a6 d0 7c 08 02 4a d8 35 8c c2 69 74 16 7b cd 43 28 02 fb 68 e6 cd 1c 36 15 39 d0 98 fc c5 7d 43 b8 d1 04 d2 7a ad 32 07 0b eb fc 60 f0 02 e5 d9 98 b6 15 e7 65 80 ee fb 74 f2 e8 b0 e1 55 c0 d5 78 2c 9e 15 d8 9d a0 36 b7 70 c2 ac ba d2 1e e3 45 3d 00 70 c3 86 bd 2a 15 4e c7 f6 48 1c f6 9b 22 6e 2e 12 87 3d e0 f7 53 b1 6f 7b 52 20 cd dd 13 a9 3c 92 40 f8 e2 ; NSEC: type59.types-signed.wb.sidnlabs.nl. 3600 IN TYPE47 \# 45 05 74 79 70 65 37 0c 74 79 70 65 73 2d 73 69 67 6e 65 64 02 77 62 08 73 69 64 6e 6c 61 62 73 02 6e 6c 00 00 08 00 00 00 00 00 03 00 10 type59.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. B2a5QOr/ETGnhpsHVOxzTw3RXUhRCf54WL8q1iR7kTU2/Vv/cu1HaeopC/BH7RQ7D7Z1H+ULW/pBaPPv2MeowijBevwxxAT8bWtWl8p4U/mwB6kQm6uJGt0ydek8t2KQl85LBOsqyvfvnDK9ckg1vPjLNPY6RL7Ex0c0e2lMFTc= type7.types-signed.wb.sidnlabs.nl. 60 IN MB mailbox.types-signed.wb.sidnlabs.nl. type7.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MB 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. bW4lc0urxx/J19/33qgQJD1Ex9+nIWOMFIwQNJ7nbzmLAwROa7qXFxH6MpJwU9Lspj3pXSOLaam9HRG1iAguE4MtF7C8x9762EQYRTBfW/nPWQGibMTxq7nJ3Ap6+ONomla7JeItoILQWxezHL+LzdDMQa9kGZcPZgacJdpeiSA= type7.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type8.types-signed.wb.sidnlabs.nl. MB RRSIG NSEC type7.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. ZkTkPjgl2AlrOgIgMVHJ7evwrGXWchFnSnCQqy6feX7bHVeQBScUoK/wORgmU2YaLD7MHmlvcgFqxngYtkeH03T4PpJfL9jsht9lZGuDaw8AhOKVp1XnF5Z69RoQ1el7JYWifzn8Q7C3CgKH+L7oEPFcDct7g3ArAJQaIsZuShE= type8.types-signed.wb.sidnlabs.nl. 60 IN MG mailgroupmember.types-signed.wb.sidnlabs.nl. type8.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MG 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. iczcF6KmRy86DDbYTXrKs6xV1LAHwmeojk8L++Rkn9IwkDlTES6/xakvg3d+WZAPp4r4Rt3jV9YW7MgXTjuu3zeWKHIlf0kxrYYkXGh1KEzfg2/ABMtXamYTzBLwUToQxmTQJA/l9Mk/UoT34RQZbh4q7sslelk4dcHfcFZloRw= type8.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type9.types-signed.wb.sidnlabs.nl. MG RRSIG NSEC type8.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. HKuc8BPEYgyG0t82ynr1XmvoGpNVPdqNahD+pjOlIVIv40vBnufGZ8lm65R1JlKrfPEh72myT2DNmOFi9BekvHJD5+BP8cFLHQdmonyqoBr0PberXzYt5fvB/gVEk2u2rtj/ZR9+x6ccWdudhIXqjl3ELDcjwHpow1cwbo6Nj6A= type9.types-signed.wb.sidnlabs.nl. 60 IN MR mailrename.types-signed.wb.sidnlabs.nl. type9.types-signed.wb.sidnlabs.nl. 60 IN RRSIG MR 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fpzO5uIZkfjwUdJ/IFBiYGVBStXUYsjZkOcBanSSbOJNSuFWm/5vddo95RdQIOOg3++cdYhH9B15vbqetC4kdvn0qkHxE/U0vHCgmJUWwlq1Af38Ts9/WsJ+OtQeUS6i5gtIQ8sMtSedd4T3d/OsZNgWdWjgL+5JdXQyV02jsjU= type9.types-signed.wb.sidnlabs.nl. 3600 IN NSEC type99.types-signed.wb.sidnlabs.nl. MR RRSIG NSEC type9.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. rK80Qfay6gazrF6/2T+DjyfK3ec84MAr8W1Kyst0fNbW2eF9XBXQREYJyYNDVZ1mhE9lEdC977ety4bzC8LF41ttm0Dyj4lkcW3y68aBn5zFi388vm8oSX8KHVXQMLmGyED1+bqSyJz4dsjYcyjW0nvXN2/L87aPg0AndiueqUk= type99.types-signed.wb.sidnlabs.nl. 60 IN SPF "v=spf1 +mx a:colo.example.com/28 -all" type99.types-signed.wb.sidnlabs.nl. 60 IN RRSIG SPF 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. e+gPKZzvKt4QLeeZUnezhyUrEkw8KwYoZOQnp0OErRYrWQfSG0+pIWPqmQmjctv2KuruWoH8RDLYm94yMDzA+wuPxCCjmPsto63NXCzXHGuJUIQhq1DYbWhXQwa313Ms2Oquj84APx+fiB3hAulPJltF68b3XFspMUGIFRMABWY= type99.types-signed.wb.sidnlabs.nl. 3600 IN NSEC wks.types-signed.wb.sidnlabs.nl. RRSIG NSEC SPF type99.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. C/Fzy7gdFS2UMjugX5zQx/INNv2lnBIqQqe3LCTUyiRQuzB3B0QSM71OR/uo+jIi9SSXjgbc0spxniS2x3a2jTRUJPu+MrP9NCpMwCMzgc8lRXaYIKFzKTBU0gej5BC6p7HQb6ng6Fs0sfypD1LxstExN9pR1Li4aPh5Hr9U1Qc= wks.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 tcp 0 1 2 21 23 24 26 33 34 wks.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. n3AdmQ1HEwQOmmhSfXZwY2jqwJea25psB/CJQOf+srO2vJd64mgEpA0IekSx8ajKktilHqOVM7E/HqqNZDVyMKCOVrVhjSZuI7e2uNj3mCWmtUMsmEsEV3BLLkw0Nvz4MXOl+gdPECSDqLdcc56pthoiRS35wvG2lHXUxjUiGQY= wks.types-signed.wb.sidnlabs.nl. 3600 IN NSEC wks01.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC wks.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Rka/Lc6o1z/mCLl7/Rmkugv9oGhqyQcht/sMI4IB02XpTVYyRppTntWESusKXQ2cRqN06Iqxn9Rhk0DVYKgRJqNjewEWZG7tA/u36SuyXCeStHmgbkoW962ZWM1QDc8j+BYHS1pTKkx6x+5Ehb0y+SyMZyy6229WJfSZLU54CL4= wks01.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 tcp 0 1 2 21 23 24 26 33 34 wks01.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. l7HYfzjcIhIQDZ2zIJl0gD5jsYdzh/1qQRQLFXGbjQlXerEaw/YBJPXzRPFm1caU8xz2rbkqMXVyoIZnDt6pH+y/MfFNlQhjswWG0q3WGUfpUlyfJCpSE0Fddfoh7362m42mLTgbfornJguxbgdYLQ/NfLinrFeBfNEk4ZFCU20= wks01.types-signed.wb.sidnlabs.nl. 3600 IN NSEC wks02.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC wks01.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. 0BABoZLuZnFIltEVzP5AImbPmT9xHUVrcbG6sNCX8wI+P2gv4tRNsKfneQaIyKePMn9103C1l+7OF7SfVRbUOMYZ52pBti0yBl0ECCrf4jXWBZZ3e0vcXNA0Bpn9fLxeYyHLawhHllPCy29v1ns4zpWjvIphxG3X9fnEBVZzRI4= wks02.types-signed.wb.sidnlabs.nl. 60 IN WKS 10.0.0.1 udp 0 1 2 domain wks02.types-signed.wb.sidnlabs.nl. 60 IN RRSIG WKS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. P+p1gcQbO4I/sBQUZktrz4Q1osWIFIFGlK8o+SzIXMjxmdNy36vjwW6Sfy97CycbLRFIQ2grPv/cPaXtoMb+usHCoDtl5sSvLTJFmg9hpQ+xm12GvunZvAYAGx9fZic+QvLahSg+cjqX1M0oR9B68gcx+duMdLzawlUcIqX8gmA= wks02.types-signed.wb.sidnlabs.nl. 3600 IN NSEC www.types-signed.wb.sidnlabs.nl. WKS RRSIG NSEC wks02.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. E0NeTdwBvfouI0vv1fom9Ivvio9nvAZMCosKLnSL8tV6nV4HIOBx8GmeXsctyLSm/AdABtKe5Ll2emblpjLHuAItO2VCINXfGebodDzf5xY2UbAThpfwGx5pXBr9d+DXWxHJej5Ub9eOWztgxB1k2G1u+AxpQEBY8ywiDop7z4k= www.types-signed.wb.sidnlabs.nl. 60 IN A 213.136.31.221 www.types-signed.wb.sidnlabs.nl. 60 IN RRSIG A 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. sP6X9RSL6zDJ762WZLgs2wG3fDkmPacs0eT5qgjHZBBxTZkvop5fAPtaKq14tP+pfN1+pa1mjrWPpOwuvcpC25Sa8x64ISfm+pg8RRDmElM2NgOu7a4jxtOOzjAcQS5Fpf4zPHbo2jETocTcv7XOGinqe33SxAlzit2yfkZNkJk= www.types-signed.wb.sidnlabs.nl. 3600 IN NSEC x25.types-signed.wb.sidnlabs.nl. A RRSIG NSEC www.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. j2lNsX7mxldTSmwnTQoT6aKzY2QpzRqjR9aRBSpjVU/FnT8zc1/nz9y3+h6trvb4BmbsSftnEMJKQwtciNGO5KNcDayZJNQ74fiEYwd9CEvwEYQYnURDUTHOsZ/s27t2fb5y4+bI+9hUTMidWsz3sYH/3h43qyP8rd6dv3v/EcI= x25.types-signed.wb.sidnlabs.nl. 60 IN X25 "3033033033" x25.types-signed.wb.sidnlabs.nl. 60 IN RRSIG X25 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. fYqiHPDKREmQ28cv2kmFS6kP4nZYN7+hZsjkoQ983VSGbP8zmPAfPnfVsuwZz+LHnUfLQcCZrLzK2K4rCBHsuKbSLkZwYQa9VLd5U3PY9Krj9Sj+2ACtxG2KX285RLnR6ZVyyAHK92udqUfJUU5LoROuuz37TeRMY/DvSpz/uik= x25.types-signed.wb.sidnlabs.nl. 3600 IN NSEC types-signed.wb.sidnlabs.nl. X25 RRSIG NSEC x25.types-signed.wb.sidnlabs.nl. 3600 IN RRSIG NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. AqLeezQyBdjXXEe5vNtSzOrOPQLKvl3jAF6V3hIFtZdsbAExrjLXXrxeoR37tPxtOqF95/HtXYFaDmuVQtlEdiDozIHNCtBS3KtVrIVld00VLd3xQLNak7X9WhMYNIl5cJ5gdLFVc/tVKcL2craDyXMsjXDA0o2NxnpVZatkP7c= unbound-1.13.1/testdata/dnstap_tls_peername.tdir/0000755000175000017500000000000014010434640021500 5ustar wouterwouterunbound-1.13.1/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.dsc0000644000175000017500000000054514010434640026226 0ustar wouterwouterBaseName: dnstap_tls_peername Version: 1.0 Description: test dnstap tls with auth name and tls authentication CreationDate: Tue Feb 14 14:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap_tls_peername.pre Post: dnstap_tls_peername.post Test: dnstap_tls_peername.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.testns0000644000175000017500000000050314010434640026767 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre0000644000175000017500000000364414010434640026246 0ustar wouterwouter# #-- dnstap_tls_peername.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 4 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) TAP_PORT=$(($RND_PORT + 3)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap_tls_peername.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap.errlog" "start of service" # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_peername.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post0000644000175000017500000000106614010434640026441 0ustar wouterwouter# #-- dnstap_tls_peername.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log echo "> tap logfiles" cat tap.log cat tap.errlog cat fwd.log exit 0 unbound-1.13.1/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.conf0000644000175000017500000000222314010434640026375 0ustar wouterwouterserver: verbosity: 4 num-threads: 1 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-ip: "127.0.0.1@@TAPPORT@" dnstap-tls: yes dnstap-tls-server-name: "unbound" dnstap-tls-cert-bundle: "unbound_server.pem" dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap_tls_peername.tdir/unbound_server.key0000644000175000017500000000463314010434640025260 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test0000644000175000017500000000271314010434640026433 0ustar wouterwouter# #-- dnstap_tls_peername.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap_tls_peername.tdir/unbound_server.pem0000644000175000017500000000246614010434640025253 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_peername.tdir/unbound_control.pem0000644000175000017500000000247614010434640025426 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_peername.tdir/unbound_control.key0000644000175000017500000000462714010434640025435 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/iter_scrub_dname_sec.rpl0000644000175000017500000001676414010434640021404 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test scrub of secure DNAME in answer section RANGE_BEGIN 0 100 ; all adresses ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; x.y.example.com. IN A ; SECTION AUTHORITY ; com. IN NS a.gtld-servers.net. ; SECTION ADDITIONAL ; a.gtld-servers.net. IN A 192.5.6.30 ; ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; x.y.example.com. IN A ; SECTION AUTHORITY ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. y.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. ALCQdkXflwgQVKCFeYgCAx3ipuoPsGJVZjNeUriXE4nd94h50zJWDJ4= ;{id = 2854} x.y.example.com. IN CNAME x.z.example.com. x.z.example.com. IN A 10.20.30.0 SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AA3IkI13XbKFU5NSqBVA9oM1WiyEKCy4DYFOAdihDf6uHps9lce3kEc= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. AKcUlwrSz2xYKnQ7b7oMblRa0rKjfUNT900bIkGjLKLWDUGc8mKZE2M= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.z.example.com. IN A SECTION ANSWER x.z.example.com. IN A 10.20.30.40 x.z.example.com. 3600 IN RRSIG A 3 4 3600 20070926134150 20070829134150 2854 example.com. ADZ12PiZGEjVUyLLYkct/SBE2WT4D5IkMOKdcl0dzQ0XRAC5y/0bS7A= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ADesKDqTIOswg5QC6eTIQvGu3DHsPMz1htpHLcDJwE8IpURTnMuD0Mw= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. ACYkeSRNcLVXeL+R9AM9e1GbxTwXNXpy1M5hcyuVkhkY2d5jGrkye7I= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ACHcJehLt4Hz+rAdxMPE96o7HJAEFohFXbxrKYlG+0WLfYAvH2nxU8k= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. AInP69g8uR1n/aRg4gmGu8UoM+zZYgjOqbNN2IvOxw3bk/q+g05jKg0= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION x.y.example.com. IN A ENTRY_END ; answer to first query (simply puts DNAME in cache) STEP 90 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO SECTION QUESTION x.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. y.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. ALCQdkXflwgQVKCFeYgCAx3ipuoPsGJVZjNeUriXE4nd94h50zJWDJ4= ;{id = 2854} x.y.example.com. IN CNAME x.z.example.com. x.z.example.com. IN A 10.20.30.40 x.z.example.com. 3600 IN RRSIG A 3 4 3600 20070926134150 20070829134150 2854 example.com. ADZ12PiZGEjVUyLLYkct/SBE2WT4D5IkMOKdcl0dzQ0XRAC5y/0bS7A= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ADesKDqTIOswg5QC6eTIQvGu3DHsPMz1htpHLcDJwE8IpURTnMuD0Mw= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. ACYkeSRNcLVXeL+R9AM9e1GbxTwXNXpy1M5hcyuVkhkY2d5jGrkye7I= ;{id = 2854} ENTRY_END ; now, DNAME is secure and can be used from cache. ; new query STEP 200 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION other.y.example.com. IN A ENTRY_END STEP 230 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION other.z.example.com. IN A ENTRY_END STEP 240 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION other.z.example.com. IN A SECTION ANSWER other.z.example.com. IN A 50.60.70.80 other.z.example.com. 3600 IN RRSIG A 3 4 3600 20070926134150 20070829134150 2854 example.com. AAp6G89oAvkyAaeF2d35AJNlzMhedGo0Bcppl0IOyF3HRzoc51vjJoU= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ADesKDqTIOswg5QC6eTIQvGu3DHsPMz1htpHLcDJwE8IpURTnMuD0Mw= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. ACYkeSRNcLVXeL+R9AM9e1GbxTwXNXpy1M5hcyuVkhkY2d5jGrkye7I= ;{id = 2854} ENTRY_END STEP 250 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO SECTION QUESTION other.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. y.example.com. 3600 IN RRSIG DNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. ALCQdkXflwgQVKCFeYgCAx3ipuoPsGJVZjNeUriXE4nd94h50zJWDJ4= ;{id = 2854} other.y.example.com. IN CNAME other.z.example.com. other.z.example.com. IN A 50.60.70.80 other.z.example.com. 3600 IN RRSIG A 3 4 3600 20070926134150 20070829134150 2854 example.com. AAp6G89oAvkyAaeF2d35AJNlzMhedGo0Bcppl0IOyF3HRzoc51vjJoU= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. ADesKDqTIOswg5QC6eTIQvGu3DHsPMz1htpHLcDJwE8IpURTnMuD0Mw= ;{id = 2854} SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ns1.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. ACYkeSRNcLVXeL+R9AM9e1GbxTwXNXpy1M5hcyuVkhkY2d5jGrkye7I= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_revoked_use.rpl0000644000175000017500000004316614010434640021706 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with use of revoked key ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582-REVOKED and 60946 RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. qLKZUJEi3ajSJ4/b7xl0BwhzW6JtjsojpZ+2nUx1PvaeQVoTmyWxjxc2tAmJGcBPqMqzeY470xvyMDvGTOiQCQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. EW2YB+2yNX9LTNDPVwkcGnRTTx38pOiwBaixdwxmDgqWKXLDLM6Kd2Xv9tveS39RnSZ5H1inRXE55q+rL6Re3g== ;{id = 55710} ; wrong keytag: ;example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55582 example.com. nH/6HauVJI4GGz78UoK/38cOOrEqsYZP0jFzfCC3OyIlclVTjAFvjVPlVMGK7sA5Nw1v20YtFTQkXZgbrRuInQ== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. xKSBZr4vOsEUKlVoNb6SOV69DM7xFOJI4gPFKq5Tv4APIMJ/9G3odoDmNcLCVyYGzhoDik5hciJnZio6UHgzAA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 and also KSK 55582 resurrected RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. jTB+ID5gp3U+cxedEPpRvM3tegrBFuVjGR7y9IL+olrtbs5Yr3qeANJwbfO1WVAWiG+EtG876uHny9epo/tlhQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. p6lOsJpkmZUbj1KCSwzxip0NbK0SnjV1LKLayqkWTDiVNkTYHHLHHJfOU8Grb63SDTsZ5lyDocIwJSUBiKuhig== ;{id = 60946} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55582 example.com. NsC5s2quifzA7yQBnbroWHJ9rHfSrBo0V7+c+kZoii2cViOm8636uqcWlaNTqNtD5UI6vzQ5zXF4P8JGoac6ZQ== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; ns.example.com. KSK 55582 used on its own ; so no signature from a real key, only signatures by REVOKED keys RANGE_BEGIN 71 80 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. jTB+ID5gp3U+cxedEPpRvM3tegrBFuVjGR7y9IL+olrtbs5Yr3qeANJwbfO1WVAWiG+EtG876uHny9epo/tlhQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55582 example.com. NsC5s2quifzA7yQBnbroWHJ9rHfSrBo0V7+c+kZoii2cViOm8636uqcWlaNTqNtD5UI6vzQ5zXF4P8JGoac6ZQ== ;{id = 55582} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${10*24*3600} STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t3} ;;${ctime $t3} ;;last_success: ${$t3} ;;${ctime $t3} ;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=3 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 11 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${11*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; couple days later: someone is trying to use the revoked key again! ; like an outofdate authority server. STEP 61 TIME_PASSES EVAL ${10*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t6} ;;${ctime $t6} FILE_END ; couple days later: someone is abusing the revoked key! ; like key material used after revocation STEP 71 TIME_PASSES EVAL ${2*24*3600} STEP 72 TRAFFIC STEP 73 ASSIGN t7 = ${time} STEP 74 ASSIGN probe7 = ${range 3200 ${timeout} 3600} STEP 75 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t7} ;;${ctime $t7} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t7 + $probe7} ;;${ctime $t7 + $probe7} ;;query_failed: 6 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t6} ;;${ctime $t6} FILE_END SCENARIO_END unbound-1.13.1/testdata/refuse_xfr.rpl0000644000175000017500000000110514010434640017374 0ustar wouterwouter; config options CONFIG_END SCENARIO_BEGIN Test AXFR and IXFR queries. ; AXFR STEP 1 QUERY ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN AXFR ENTRY_END STEP 2 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR REFUSED SECTION QUESTION nlnetlabs.nl. IN AXFR ENTRY_END ; IXFR STEP 3 QUERY ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN IXFR SECTION AUTHORITY nlnetlabs.nl. IN SOA mr. op. 12 0 0 0 0 ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR FORMERR SECTION QUESTION nlnetlabs.nl. IN IXFR SECTION AUTHORITY nlnetlabs.nl. IN SOA mr. op. 12 0 0 0 0 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_dnamewc.rpl0000644000175000017500000001762514010434640017522 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a wildcarded dname ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER ; *.example.com. IN DNAME example.net. sub.example.com. IN DNAME example.net. sub.example.com. 3600 IN RRSIG DNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFEyO+NY3QgAf/cF0mmZhsj3TqgoGAhRqJhHoCd+aA1FbBp16WGfk1HmeIg== ;{id = 2854} ; unsigned CNAME; one interpretation of the wildcarded DNAME expansion www.sub.example.com. IN CNAME www.example.net. SECTION AUTHORITY ; prove original does not exist ns.example.com. IN NSEC www.example.com. A RRSIG NSEC ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCCqvDUT+jMCvfm7OHL2IDY75JDmQIUfOtDiiyeSiwjuq3i3OuLnVRyoJ8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.net. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.net. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER ; from *.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ctrl_itr.tdir/0000755000175000017500000000000014010434640017273 5ustar wouterwouterunbound-1.13.1/testdata/ctrl_itr.tdir/ctrl_itr.testns0000644000175000017500000000050314010434640022355 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/ctrl_itr.tdir/bad_server.pem0000644000175000017500000000115314010434640022112 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++ DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_itr.tdir/bad_server.key0000644000175000017500000000156714010434640022132 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC9hurNHBtB7QFEuPJOnCylUWUF2/US3v9yQQQXnstuXMQXRaq1 1uviLmwaGurV9tngX59HITsBT74NQrtFKfEDLViLrm2arAM9Ozsn4tnv30HXPRDj UOc1M05Q7UzjaSrOv+TkPEqyhtUyaP1DYo0bcmbxtSkYc2ZEWCwhPklUwQIDAQAB AoGATjzZxN4ramWaNnJapJTX4U7eczK/0pB3xwSL2exVcjOdRzYdKH+WVIJxYb1m 3/jNLFCNAeH356yxeevoPr73nG75YJ9I1ZWQWTnS3SDK6JD1+3pmAD0bQWFoitpf FoSH9H4X5gFB5vCZ99YVoYH1UXWPcgvUHwxz0voImt6lCKECQQD4YQ4A3M0+Ki8v Hl+5FKULnS0UtBkweCvkF/X1zZRjjYr6hLnqldFkkgTBKWe17pUXX0nwRMbP1YZX i+vDq5JNAkEAw1eYsmC0nVAMawo57N6LYavGv/n5u1cvpTpKDtn4cXH0Uqq13Kyu 2FUTzan2NhCEK78UzbWaeewBJmxYda1+RQJAdShKk6uTAEyjnwUjv8h2JWlJN2fQ LeWxRlDrCruiz+aW9J4gl/99GoQpy/c83TshhjnDRZsbcDNWv/rXBZ/rTQJAFQva CtX6f7yBKgM3DHtJvyM3zbVMH9Ab9QxbsE/xwZ9KeKGl6Hm+eNZpxM3cFiUfaGs0 /ZjkZOB1m0MvILaplQJAXC3PJ/E+87banGZRJl5qtS6/HoX5lH9TPkL8Essy7ANO 2BT2OTQawD1A+VKIrQHXs085Of8tQUfrfHHt7s3Kqg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ctrl_itr.tdir/ctrl_itr.test0000644000175000017500000000142214010434640022015 0ustar wouterwouter# #-- ctrl_itr.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # exit value is 1 on usage $PRE/unbound-control -c ub.conf forward_add +i bla bla if test $? -ne 0; then echo "wrong exit value." cat fwd.log cat unbound.log exit 1 else echo "exit value: OK" fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> cat logfiles" cat fwd.log cat unbound.log echo "> OK" exit 0 unbound-1.13.1/testdata/ctrl_itr.tdir/bad_control.key0000644000175000017500000000156714010434640022304 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDti51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4G SLOE02/hKDkdkOvaUG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtO DWc3tXPT1IlSEN0xnAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQAB AoGAG3w/DatfMCu/nS5OdQx9BSqPgNbnUSqux9xA0fhgPTlN0T3oRtPcqa7JUDUW PryI/a62ry+zGkw98N2AxolCZg3N7Z3vuRx2FMcKKNwpTzDmcZW7TmMk5FPof6gE PnYl/ff0w+kxqA+L2EexH3Xi6ApLSZcjyzKWj+dL2AuT9gkCQQD3dPitwITxgCAD IaHw23e3FRkM/hw1Gp8bt6nbuxitVxxpO96q1EQ+fCy/mf0bMEJDp3xzMEIfP3r4 GmNbaxa1AkEA9b8LeBLbQ2cm2+UMeUgygBsRirdUQ786auqH38Jbvi/j6S9sDl2x q1vRtikEBZJWfkhsOzrzwFDKe1bI/EEn9wJAAzOwRA9JqRZPU7sLrWIpmmTbfh+L neRKSsGFoSI6n4ORCouLxgoZF/XjXldPvxpQwS9ZnOPy9xSLMsqknno0QQJAeDtA IT8Yh6GwIWWu9KeeDY8wxe1sDLlCm4yjbZZpzGMh3rSU6XJtuqjxsW3fydoO9zn3 ugLdvvnIFxAexUwbgQJBANyM13xcObfUJOj9rjlGCh0CDh/04ONl8SH8HBnM8guA RJI5S6vBHweVRopEZcF1sQm6wMf3ej/sGkyyNvJxRkY= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ctrl_itr.tdir/ctrl_itr.dsc0000644000175000017500000000044614010434640021614 0ustar wouterwouterBaseName: ctrl_itr Version: 1.0 Description: iterator only test unbound-control CreationDate: Thu Jan 16 14:08:12 CET 2014 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: ctrl_itr.pre Post: ctrl_itr.post Test: ctrl_itr.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/ctrl_itr.tdir/ctrl_itr.conf0000644000175000017500000000110514010434640021761 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no # disabled validator module-config: "iterator" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/ctrl_itr.tdir/unbound_server.key0000644000175000017500000000463314010434640023053 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ctrl_itr.tdir/ctrl_itr.post0000644000175000017500000000063414010434640022027 0ustar wouterwouter# #-- ctrl_itr.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID # it was stopped with unbound-control (if the test succeeded) kill $UNBOUND_PID >/dev/null 2>&1 kill $UNBOUND_PID >/dev/null 2>&1 exit 0 unbound-1.13.1/testdata/ctrl_itr.tdir/unbound_server.pem0000644000175000017500000000246614010434640023046 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_itr.tdir/unbound_control.pem0000644000175000017500000000247614010434640023221 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_itr.tdir/bad_control.pem0000644000175000017500000000116314010434640022265 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK 4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH 5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F -----END CERTIFICATE----- unbound-1.13.1/testdata/ctrl_itr.tdir/ctrl_itr.pre0000644000175000017500000000177314010434640021635 0ustar wouterwouter# #-- ctrl_itr.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT ctrl_itr.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < ctrl_itr.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/ctrl_itr.tdir/unbound_control.key0000644000175000017500000000462714010434640023230 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/iter_scrub_dname_insec.rpl0000644000175000017500000001150714010434640021721 0ustar wouterwouter; config options server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test scrub of insecure DNAME in answer section STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION x.y.example.com. IN A ENTRY_END ; root prime is sent STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION . IN NS ENTRY_END STEP 30 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ; query sent to root server STEP 40 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION x.y.example.com. IN A ENTRY_END STEP 50 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.y.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; query sent to .com server STEP 60 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION x.y.example.com. IN A ENTRY_END ; STEP 62 CHECK_OUT_QUERY ; ENTRY_BEGIN ; MATCH qname qtype opcode ; SECTION QUESTION ; com. IN NS ; ENTRY_END ; STEP 63 REPLY ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; com. IN NS ; SECTION ANSWER ; com. IN NS a.gtld-servers.net. ; SECTION ADDITIONAL ; a.gtld-servers.net. IN A 192.5.6.30 ; ENTRY_END STEP 70 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.y.example.com. IN A SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END STEP 80 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION x.y.example.com. IN A ENTRY_END ; STEP 82 CHECK_OUT_QUERY ; ENTRY_BEGIN ; MATCH qname qtype opcode ; SECTION QUESTION ; example.com. IN NS ; ENTRY_END ; STEP 83 REPLY ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END STEP 90 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. x.y.example.com. IN CNAME x.z.example.com. x.z.example.com. IN A 10.20.30.0 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END STEP 100 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION x.z.example.com. IN A ENTRY_END STEP 110 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.z.example.com. IN A SECTION ANSWER x.z.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ; answer to first query (simply puts DNAME in cache) STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION x.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. x.y.example.com. IN CNAME x.z.example.com. x.z.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ; now, DNAME insecure from cache should not be used. ; new query STEP 200 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION other.y.example.com. IN A ENTRY_END STEP 210 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION other.y.example.com. IN A ENTRY_END STEP 220 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION other.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. other.y.example.com. IN CNAME other.z.example.com. other.z.example.com. IN A 50.60.70.0 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END STEP 230 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION other.z.example.com. IN A ENTRY_END STEP 240 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION other.z.example.com. IN A SECTION ANSWER other.z.example.com. IN A 50.60.70.80 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END STEP 250 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SECTION QUESTION other.y.example.com. IN A SECTION ANSWER y.example.com. DNAME z.example.com. other.y.example.com. IN CNAME other.z.example.com. other.z.example.com. IN A 50.60.70.80 SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnamenx_rcodenx.rpl0000644000175000017500000002005214010434640021243 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname-nxdomain with rcode nxdomain ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFGtYzScyRnHV8U/jOIPYwrlI9t3oAhRF0PIf+IthUR7uCWIvskWp5CfReQ== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.net. IN A SECTION ANSWER SECTION AUTHORITY example.net. IN NSEC abc.example.net. SOA NS DNSKEY NSEC RRSIG example.net. 3600 IN RRSIG NSEC 5 2 3600 20070926134150 20070829134150 30899 example.net. SEHthmjHyqGlzaOp3Dx6Jn5Fnvvtknw/IF6YSFY8NZLe+YSh1oRJbdEkQ8G92IT08n1jSN6jvKRsFBOUoFOQAw== ;{id = 30899} wab.example.net. IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFGtYzScyRnHV8U/jOIPYwrlI9t3oAhRF0PIf+IthUR7uCWIvskWp5CfReQ== ;{id = 2854} SECTION AUTHORITY example.net. IN NSEC abc.example.net. SOA NS DNSKEY NSEC RRSIG example.net. 3600 IN RRSIG NSEC 5 2 3600 20070926134150 20070829134150 30899 example.net. SEHthmjHyqGlzaOp3Dx6Jn5Fnvvtknw/IF6YSFY8NZLe+YSh1oRJbdEkQ8G92IT08n1jSN6jvKRsFBOUoFOQAw== ;{id = 30899} wab.example.net. IN NSEC wzz.example.net. A NSEC RRSIG wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_revtp_use.rpl0000644000175000017500000001100314010434640021370 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" log-time-ascii: yes val-override-date: '20091018111500' fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;next_probe_time: 1258967360 ;;Mon Nov 23 10:09:20 2009 ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with trust point revocation and instant use ; so not a probe that discovers it but a user query. ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; revoked keys example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} example.com. 10800 IN DNSKEY 385 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16614 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55710 example.com. zOSlB1iwtlP2lum1RK0WoDQrMVj0JKwk2E5Mu1okzV38hAx3Xm9IGMK6WrNkVVLmx4OkhYmdPVA95jVsFpwLMw== ;{id = 55710} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 16614 example.com. qP49cCYP3lvNnLBYty/JxAwHqBIGjpup5zQ7qpjPnaZpBb/TlpOhY17LBZrqD86VvBbEVz5tkxC9UrCy85ePDQ== ;{id = 16614} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ; no AAAA ENTRY_END RANGE_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; correct unsigned response works after trust point revocation. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END STEP 37 ASSIGN t0 = ${time} STEP 41 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;REVOKED ; The zone has all keys revoked, and is ; considered as if it has no trust anchors. ; the remainder of the file is the last probe. ; to restart the trust anchor, overwrite this file. ; with one containing valid DNSKEYs or DSes. ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${0} ;;${ctime 0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} example.com. 10800 IN DNSKEY 385 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16614 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END SCENARIO_END unbound-1.13.1/testdata/autotrust_init.rpl0000644000175000017500000001463714010434640020337 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with initial trust anchor ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 ASSIGN t0 = ${time} ; get probe time and check it. 4800 is about 10% less than 5400. And more than ; the 3600 that a failure timeout would have. STEP 7 ASSIGN probe = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 8 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ; The autotrust anchor was probed due to the query. STEP 30 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END ; wait and see if autotrust probes (the unchanged) domain again. STEP 40 TIME_PASSES EVAL ${$probe} STEP 50 TRAFFIC STEP 65 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 70 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${time} ;;${ctime ${time}} ;;last_success: ${time} ;;${ctime ${time}} ;;next_probe_time: ${$t0 + $probe + $probe2} ;;${ctime $t0 + $probe + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END SCENARIO_END unbound-1.13.1/testdata/dnstap_reconnect.tdir/0000755000175000017500000000000014010434640021002 5ustar wouterwouterunbound-1.13.1/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post0000644000175000017500000000102114010434640025234 0ustar wouterwouter# #-- dnstap_reconnect.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log cat tap.log cat tap.errlog exit 0 unbound-1.13.1/testdata/dnstap_reconnect.tdir/unbound_server.key0000644000175000017500000000463314010434640024562 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_reconnect.tdir/unbound_server.pem0000644000175000017500000000246614010434640024555 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_reconnect.tdir/unbound_control.pem0000644000175000017500000000247614010434640024730 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre0000644000175000017500000000357014010434640025050 0ustar wouterwouter# #-- dnstap_reconnect.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap_reconnect.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up and make the dnstap.socket file wait_server_up "tap.errlog" "creating unix socket" if test ! -S dnstap.socket; then echo "the dnstap.socket file does not exist!" fi # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < dnstap_reconnect.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap_reconnect.tdir/dnstap_reconnect.testns0000644000175000017500000000050314010434640025573 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dnstap_reconnect.tdir/dnstap_reconnect.conf0000644000175000017500000000201714010434640025202 0ustar wouterwouterserver: verbosity: 2 num-threads: 1 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap_reconnect.tdir/unbound_control.key0000644000175000017500000000462714010434640024737 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test0000644000175000017500000000525714010434640025245 0ustar wouterwouter# #-- dnstap_reconnect.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "" echo "> test disconnect from the upstream server" kill_pid $DNSTAP_SOCKET_PID dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. # bring log socket back up $PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap2.errlog >tap2.log & if test $? -ne 0; then echo "could not start (again) unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up and make the dnstap.socket file wait_server_up "tap2.errlog" "creating unix socket" dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. sleep 2 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. for x in down up up2; do if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; else echo "$x.example.net. information not in tap2.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog echo "> tap2 logfiles" cat tap2.log cat tap2.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi done echo "> cat logfiles" cat tap.log cat tap.errlog echo "> tap2 logfiles" cat tap2.log cat tap2.errlog cat fwd.log echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap_reconnect.tdir/dnstap_reconnect.dsc0000644000175000017500000000047114010434640025030 0ustar wouterwouterBaseName: dnstap_reconnect Version: 1.0 Description: test dnstap reconnect CreationDate: Tue Jan 21 13:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap_reconnect.pre Post: dnstap_reconnect.post Test: dnstap_reconnect.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/auth_https.tdir/0000755000175000017500000000000014010434640017634 5ustar wouterwouterunbound-1.13.1/testdata/auth_https.tdir/127.0.0.1/0000755000175000017500000000000014010434640020600 5ustar wouterwouterunbound-1.13.1/testdata/auth_https.tdir/127.0.0.1/example.com.zone0000644000175000017500000000022314010434640023702 0ustar wouterwouterexample.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. IN NS ns.example.net. www.example.com. IN A 1.2.3.4 unbound-1.13.1/testdata/auth_https.tdir/auth_https.pre0000644000175000017500000000167014010434640022533 0ustar wouterwouter# #-- auth_https.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT PETAL_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "PETAL_PORT=$PETAL_PORT" >> .tpkg.var.test get_make (cd $PRE; $MAKE petal) # start https daemon $PRE/petal -v -a "127.0.0.1" -p $PETAL_PORT >petal.log 2>&1 & PETAL_PID=$! echo "PETAL_PID=$PETAL_PID" >> .tpkg.var.test cat .tpkg.var.test wait_petal_up petal.log # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$PETAL_PORT'/' < auth_https.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_unbound_up unbound.log unbound-1.13.1/testdata/auth_https.tdir/auth_https.dsc0000644000175000017500000000045514010434640022516 0ustar wouterwouterBaseName: auth_https Version: 1.0 Description: Perform https for authority zone CreationDate: Tue 13 Jun 09:35:40 CEST 2017 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: auth_https.pre Post: auth_https.post Test: auth_https.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/auth_https.tdir/petal.key0000644000175000017500000000237514010434640021462 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIDfQIBAAKBwQC1xQ/Kca6zszZbcCtdOTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJ RuN+Rm304SonpwghfP2/ULZNnuDgpG03/32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1 QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ867K029ypjOQtAJ85qdO3mERy7TGtdUcu O6hLeVet419YeQ2F8cfNxn63d7bOzNGLPW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeU J/i4YDWexFYSL+ECAwEAAQKBwCLXXQl+9O+5AEhSnd1Go1Jh0pSA7eBJOuXQcebG Rb7ykp+6C4G2NtDziwwPRNdI6wQQQ0sym18RfyVQHydGr78/nbiIbB3HCn5e92Mh mefzW6ow9Kvm2txLzGKA1lvoyRbNm81jnG/eygi3u7Nqd5PNv+4dHj2RkTlmxOeh qnDMVP5md8uZPv6lYNnrnIzvLCR5vnPNdVwn89AqzI85IcDZdy0R9ZX4NBbsDgAU 6ig6uXuRXvSGiyJ/OUXSrnogaQJhAOjvkHUhVZQkPOxO90TNH4j0GdKKtbSWxIdz lKfuJeBAEqs0TL+C6vbS81Xw3W1alyDdUBk3rJMOBqW6Ryq5HNL+j5H+Jfsh7fvc Yle+5wHGci0P9zCFZCrY8It7n9XFIwJhAMfEi6oJa2G8waPJ1bQhxka82Tf9pnKM XCn/1BBOFjVIx5F842cpA+zp5a62GENTGYPQTTRBB/2/ZwnW5aIkrlg54AtmbqBZ Oh+2kJdJQD/tfoVmc5soUE2ScTHadK5RKwJhAN4w9kjkXS+MSZjX0kIMsBIBVkhh C+aREjJqa9ir7/Ey7RvmLXdYuCxtGLRXp7/R8+rjcK49Tx6O+IRJZe042mfhbq3C EhS1Tr86f4xXix9EXlDhs9bSxrOgcAN9Dv/opQJhAK7eBcPaav0rVfYh/8emqQHS 3fJ9Pu6WnzbEksWTFS2ff9KDGCx9YspIFJ5TF/oXDAaumGZdZrlgirm6O1kr8tGY F97i04PZl1+bWAaWQH+1TUNI43m2WFUPE7coG2tb8QJgcddDg9VlXliZqgcETZfJ kJmYETxrcSn3ao6v116N8yxhEgUgjkmsCTiFgx36iDVnXwK6PIt+sIu8MC7eYNa3 berrv/M21K0LRn20IWRxvUobG070weHCAgkko7fTWgr2 -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/auth_https.tdir/auth_https.test0000644000175000017500000000235114010434640022721 0ustar wouterwouter# #-- auth_https.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile if grep SERVFAIL outfile; then echo "> try again" dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 1 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 1 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 1 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 10 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 10 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi echo "> cat logfiles" cat petal.log cat unbound.log echo "> check answer" if grep "1.2.3.4" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/auth_https.tdir/petal.pem0000644000175000017500000000142214010434640021443 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIICFzCCAUACCQDO660L5y5LGDANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVw ZXRhbDAeFw0xMDA5MzAxMzQzMDFaFw0zMDA2MTcxMzQzMDFaMBAxDjAMBgNVBAMT BXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC1xQ/Kca6zszZbcCtd OTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJRuN+Rm304SonpwghfP2/ULZNnuDgpG03 /32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ8 67K029ypjOQtAJ85qdO3mERy7TGtdUcuO6hLeVet419YeQ2F8cfNxn63d7bOzNGL PW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeUJ/i4YDWexFYSL+ECAwEAATANBgkqhkiG 9w0BAQUFAAOBwQBBkX9KDP2RXbg+xPmdJ4P6CwvA5x1LZwC++ydVx4NlvT0pWicD ZUnXjcWAJlkeOuUBAqFG7WHTrXpUUAjmdqFVq2yFjteUYBdrFz0RDB2jM9feeKYO mTgxdZyT9a6humxCxt5VfgT02axLjm/2AqCyFPMbf4PASoJDln01AEuZLZ8Xl2gV bYHMnHTGoD1Hu6FNEzRgkMC6XT8X3YjHvzQhpc/qL5wEfEsinQGdX4twsuWbf8xd q7miNnkO8vd0maw= -----END CERTIFICATE----- unbound-1.13.1/testdata/auth_https.tdir/auth_https.post0000644000175000017500000000047114010434640022730 0ustar wouterwouter# #-- auth_https.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh kill_pid $UNBOUND_PID kill_pid $PETAL_PID unbound-1.13.1/testdata/auth_https.tdir/auth_https.conf0000644000175000017500000000051414010434640022666 0ustar wouterwouterserver: verbosity: 7 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no use-caps-for-id: yes auth-zone: name: "example.com" for-upstream: yes for-downstream: yes url: "https://127.0.0.1:@TOPORT@/example.com.zone" unbound-1.13.1/testdata/iter_ds_reply.rpl0000644000175000017500000001673614010434640020110 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator with DS query and answer reply ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; DS gets an answer from the authoritative server ; (like NSD 4.1.0 answers it) ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; something for wrong type DS query here ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION sub.example.com. IN DS ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+009+48886.ds0000644000175000017500000000021714010434640020442 0ustar wouterwouterexample.com. 3600 IN DS 48886 9 1 eb70a0d5001a3da004b428f01bf15cb5aad22f73 ; xupol-bamyt-hobuc-pyzop-bacur-gupaz-bakoz-cylyr-hepyt-dorol-foxux unbound-1.13.1/testdata/autotrust_rollover.rpl0000644000175000017500000003451114010434640021231 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with prepublish rollover ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582-REVOKED and 60946 RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. qLKZUJEi3ajSJ4/b7xl0BwhzW6JtjsojpZ+2nUx1PvaeQVoTmyWxjxc2tAmJGcBPqMqzeY470xvyMDvGTOiQCQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. EW2YB+2yNX9LTNDPVwkcGnRTTx38pOiwBaixdwxmDgqWKXLDLM6Kd2Xv9tveS39RnSZ5H1inRXE55q+rL6Re3g== ;{id = 55710} ; wrong keytag: ;example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55582 example.com. nH/6HauVJI4GGz78UoK/38cOOrEqsYZP0jFzfCC3OyIlclVTjAFvjVPlVMGK7sA5Nw1v20YtFTQkXZgbrRuInQ== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. xKSBZr4vOsEUKlVoNb6SOV69DM7xFOJI4gPFKq5Tv4APIMJ/9G3odoDmNcLCVyYGzhoDik5hciJnZio6UHgzAA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 30899 example.com. TfFGz1kDtkn3ixbKMJvQDZ0uGw/eW+inIiPqQVPQtO2WiocKrnYnzwv/AqwnFvEar70dF15/zffNIF+ipOS5/g== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 60946 example.com. X0Ci//w0czN/J5RvypHGqp56n1tLdapi92ODAqjM7QpZXbSHaJ7wfPG1PZzvdxHUZUVyf8uy2stjg/XoLGHMWA== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${10*24*3600} STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t3} ;;${ctime $t3} ;;last_success: ${$t3} ;;${ctime $t3} ;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=3 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 11 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${11*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, the old key is removed from storage STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} FILE_END SCENARIO_END unbound-1.13.1/testdata/val_ta_algo_dnskey_dp.rpl0000644000175000017500000002110314010434640021534 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}" trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" harden-algo-downgrade: no fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with multiple algorithm trust anchor without harden ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. AKIIYDOGHogglFqJK94ZtOnF7EfGikgAyloMNRSMCrQgFaFkmcOyjrc= ;{id = 2854} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20070926134150 20070829134150 30899 example.com. J55fsz1GGMnngc4r50xvXDUdaVMlfcLKLVsfMhwNLF+ERac5XV/lLRAc/aSER+qQdsSo0CrjYjy1wat7YQpDAA== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899} www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cname_loop1.rpl0000644000175000017500000001053614010434640020273 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname loop ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.com. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFH0SwLHe7u56TshoVciFRHEl1KqbAhQ3zBOZMlL8bt1DqoDoM5ni8U/1UA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_ldnsrr.c50000644000175000017500000052527514010434640017324 0ustar wouterwouter000006000100000E10003908656C656B74726F6E0561746F6F6D036E657400056D69656B670561746F6F6D036E6574007755EFFC0000546000001C2000093A8000000E10 . 3600 IN SOA elektron.atoom.net. miekg.atoom.net. 2002120700 21600 7200 604800 3600 000001000100000E100004C0A80102 . 3600 IN A 192.168.1.2 000002000100000E10001408656C656B74726F6E0561746F6F6D036E657400 . 3600 IN NS elektron.atoom.net. 000003000100000E10000E026D640561746F6F6D036E657400 . 3600 IN MD md.atoom.net. 000004000100000E10000E026D660561746F6F6D036E657400 . 3600 IN MF mf.atoom.net. 000007000100000E10000E026D620561746F6F6D036E657400 . 3600 IN MB mb.atoom.net. 000008000100000E10000E026D670561746F6F6D036E657400 . 3600 IN MG mg.atoom.net. 000009000100000E10000E026D720561746F6F6D036E657400 . 3600 IN MR mr.atoom.net. 00000B000100000E100015C0A801020600000240000004000000000000000010 . 3600 IN WKS 192.168.1.2 tcp 22 25 53 123 00000B000100000E10000CC0A801021100000000000004 . 3600 IN WKS 192.168.1.2 udp 53 00000C000100000E10000F037074720561746F6F6D036E657400 . 3600 IN PTR ptr.atoom.net. 00000D000100000E10000A04686F737404696E666F . 3600 IN HINFO "host" "info" 00000E000100000E100023076D616368696E650561746F6F6D036E65740004696E666F0561746F6F6D036E657400 . 3600 IN MINFO machine.atoom.net. info.atoom.net. 00000F000100000E100016000A08656C656B74726F6E0561746F6F6D036E657400 . 3600 IN MX 10 elektron.atoom.net. 000010000100000E10001B1A74657874206465736372697074696F6E206F6620646F6D61696E . 3600 IN TXT "text description of domain" 000011000100000E100016056D69656B670561746F6F6D036E657400036E657400 . 3600 IN RP miekg.atoom.net. net. 000012000100000E10000D000C0561746F6F6D036E657400 . 3600 IN AFSDB 12 atoom.net. 000013000100000E10001B1A783235206164647265737320696E207465787420666F726D6174 . 3600 IN X25 "x25 address in text format" 000014000100000E10000D0C6973646E2061646472657373 . 3600 IN ISDN "isdn address" 000014000100000E1000180C6973646E20616464726573730A73756261646472657373 . 3600 IN ISDN "isdn address" "subaddress" 000015000100000E10000B00000772742D686F737400 . 3600 IN RT 0 rt-host. 000016000100000E10001447000580005A0000000001E133FFFFFF00016100 . 3600 IN NSAP 0x47000580005A0000000001E133FFFFFF00016100 00001A000100000E1000130002066D617038323200076D61707834303000 . 3600 IN PX 2 map822. mapx400. 000023000100000E1000280064000A0000202F75726E3A6369643A2E2B40285B5E5C2E5D2B5C2E29282E2A29242F5C322F6900 . 3600 IN NAPTR 100 10 "" "" "/urn:cid:.+@([^\\.]+\\.)(.*)$/\\2/i" . 000023000100000E10002F00640032017310687474702B49324C2B4932432B49325200055F68747470045F746370066761746563680365647500 . 3600 IN NAPTR 100 50 "s" "http+I2L+I2C+I2R" "" _http._tcp.gatech.edu. 000024000100000E10000B000A076B782D686F737400 . 3600 IN KX 10 kx-host. 000025000100000E1001070001FFFF010103A9A6442F1653C52E25997343575F9FD0638E23A61BF7BDF5F476C7073664E136D7F1D135207C16F56102895FA30DAF3BBFBEFB55DF1A4B70227EB483FC0030E231A5184F91A1EA49A7DB657B1601CF9421D127E01CB9D41B798830D4A0984BD0F8EA812F051F264381C54C491D5A0F8F113013424EFB3F50A699445DA20726CD9A9921EAFE540B3ABAEB08771AE659E3FC8F669846FA33763BE0CE61D749A6C30F1AE7B886E72F8AF8A80A1CE90F430326D803B61AE7682D1F4E9D14E91A42BD5DBC7BB5889112D7A1F448BFCE961B0E56B6663354457300C65DC9F188A6784DDB4579743FE9537725E80B479B761722B3A0A61BE2496975933C255B95B5CFE7 . 3600 IN CERT PKIX 65535 1 AQOppkQvFlPFLiWZc0NXX5/QY44jphv3vfX0dscHNmThNtfx0TUgfBb1YQKJX6MNrzu/vvtV3xpLcCJ+tIP8ADDiMaUYT5Gh6kmn22V7FgHPlCHRJ+AcudQbeYgw1KCYS9D46oEvBR8mQ4HFTEkdWg+PETATQk77P1CmmURdogcmzZqZIer+VAs6uusIdxrmWeP8j2aYRvozdjvgzmHXSabDDxrnuIbnL4r4qAoc6Q9DAybYA7Ya52gtH06dFOkaQr1dvHu1iJES16H0SL/OlhsOVrZmM1RFcwDGXcnxiKZ4TdtFeXQ/6VN3JegLR5t2FyKzoKYb4klpdZM8JVuVtc/n 00002A000100000E100000 . 3600 IN APL 00002A000100000E10000E00011503C0A82000011C83C0A826 . 3600 IN APL 1:192.168.32.0/21 !1:192.168.38.0/28 00002A000100000E10001700011A03C0A82A00011A04C0A82A4000011904C0A82A80 . 3600 IN APL 1:192.168.42.0/26 1:192.168.42.64/26 1:192.168.42.128/25 00002A000100000E10000F000120047F00000100011603AC1040 . 3600 IN APL 1:127.0.0.1/32 1:172.16.64.0/22 00002A000100000E10000A00010401E000020801FF . 3600 IN APL 1:224.0.0.0/4 2:ff00:0000:0000:0000:0000:0000:0000:0000/8 00001D000100000E1000100033161389172DD070BE15F000988D20 . 3600 IN LOC 42 21 54.000 N 71 06 18.000 W -24m 30m 10000m 10m 00001D000100000E100010001224138917069070BF2DD800988CEE . 3600 IN LOC 42 21 43.952 N 71 05 06.344 W -24.50m 1m 200m 10m 00001D000100000E100010001216138B3556C88008165000989A89 . 3600 IN LOC 52 14 05.000 N 00 08 50.000 E 10.33m 1m 10000m 10m 00001D000100000E10001000121613791B7D2898E64C4F00989A68 . 3600 IN LOC 32 07 19.000 S 116 02 25.999 E 10m 1m 10000m 10m 00001D000100000E100010002516138916CB3C70C310DF009884ED . 3600 IN LOC 42 21 28.764 N 71 00 51.617 W -44.99m 2000m 10000m 10m 0C646F747465642E6C6162656C00000F000100000E100008000A0422666F6F00 dotted\.label. 3600 IN MX 10 "foo. 036C6F77036C6F77036C6F77000027000100000E1000090772742D686F737400 low.low.low. 3600 IN DNAME rt-host. 057265646972000005000100000E10001005636E616D6504746F6F6D036E657400 redir. 3600 IN CNAME cname.toom.net. 0C686967686269742DC8D2C961000001000100000E1000047F000001 highbit-\200\210\201a. 3600 IN A 127.0.0.1 0772742D686F7374000001000100000E1000047F000001 rt-host. 3600 IN A 127.0.0.1 00001C000100000E10001000000000000000000000000000000001 . 3600 IN AAAA ::1 000013000100000E10001B1A783235206164647265737320696E207465787420666F726D6174 . 3600 IN X25 "x25 address in text format" 000014000100000E10000D0C6973646E2061646472657373 . 3600 IN ISDN "isdn address" 076B782D686F7374000001000100000E1000047F000001 kx-host. 3600 IN A 127.0.0.1 076B782D686F737400001C000100000E10001000000000000000000000000000000001 kx-host. 3600 IN AAAA ::1 000013000100000E10001B1A783235206164647265737320696E207465787420666F726D6174 . 3600 IN X25 "x25 address in text format" 08707265762D6E7874000001000100000E1000047F000001 prev-nxt. 3600 IN A 127.0.0.1 00001C000100000E10001000000000000000000000000000000001 . 3600 IN AAAA ::1 00002F000100000E1000120A6269676765722D6E78740000044000000A . 3600 IN NSEC bigger-nxt. A AAAA NXT 000010000100000E10C3901B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E24566573746962756C756D20666175636962757320636F6E73657175617420697073756D2C2776656C2070656C6C656E746573717565206F72636920736F64616C65732073697420616D65742E12446F6E656320636F6E73656374657475722C186F726369207574207661726975732070756C76696E61722C196D617572697320616E746520626962656E64756D206573742C2476656C207072657469756D20747572706973206D6173736120617563746F722073656D2E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E124D6F7262692075726E612074656C6C75732C1A6F726E617265206E656320616363756D73616E2076697461652C1172757472756D20696420746F72746F722E3250656C6C656E746573717565206E6F6E207269737573206575206C696265726F2074656D70757320636F6E7365717561742E1653757370656E64697373652061206D6920656C69742E2C53656420756C74726963657320656C69742075742073656D207375736369706974206D616C6573756164612E3043726173207361676974746973206E756E632073656420726973757320766F6C7574706174206665726D656E74756D2E1941656E65616E207669746165206D61676E61206C616375732E16457469616D206575206C6967756C612070757275732E2F53757370656E64697373652065752064756920736564206C6967756C6120736167697474697320696163756C69732E1C53757370656E646973736520757420736F64616C6573206F7263692E1B4E756E632073697420616D65742073617069656E206A7573746F2E30536564206D6F6C6573746965206C65637475732076656C206C6563747573206772617669646120626962656E64756D2E28496E20617420656E696D2071756973206C61637573207072657469756D2074696E636964756E742E0D53656420656C656966656E642C1B6C616375732073656420706F72747469746F72206D61747469732C1A65726174206E6962682074696E636964756E74206C6F72656D2C1E717569732066657567696174206E6962682064756920616320657261742E1A43757261626974757220717569732066656C69732075726E612E0F4E756C6C616D2072686F6E6375732C1B61726375207365642074696E636964756E7420706F73756572652C1B6A7573746F20656E696D2061646970697363696E6720617263752C2265742073757363697069742074656C6C7573206C656F20766974616520656C69742E444D61757269732067726176696461206F64696F206E6F6E207175616D2074696E636964756E742076656C206C6F626F72746973206C6967756C612066617563696275732E394D617572697320766974616520646F6C6F7220617420746F72746F7220636F6E67756520696D70657264696574206E6F6E206964206C656F2E3550726F696E20696E206469616D206575206F726369206C616F7265657420626962656E64756D20736564206E6563206A7573746F2E2C496E206E6563206C6967756C612065752073617069656E20737573636970697420766573746962756C756D2E0F457469616D20656C656966656E642C1C6E6962682076697461652073656D70657220756C747269636965732C186A7573746F2065726F732073656D706572206A7573746F2C22656765742064696374756D206E697369206D6175726973206574206C6967756C612E1C446F6E656320666175636962757320646170696275732075726E612C21696E20756C74726963696573206C6163757320666163696C69736973206E65632E3450656C6C656E746573717565206461706962757320617567756520696E2073656D20706861726574726120616363756D73616E2E17557420696420756C6C616D636F7270657220656C69742E14416C697175616D2074656C6C7573206F7263692C1F6C6F626F72746973206E6563206D6F6C65737469652073697420616D65742C15696D706572646965742071756973206C616375732E195072616573656E74206E6F6E20636F6E677565206E756E632E1D51756973717565207072657469756D207072657469756D206E756E632C1F6E656320636F6E76616C6C6973206D61676E6120617563746F72206E65632E48457469616D20616363756D73616E2065726F7320736F6C6C696369747564696E20617567756520706F7375657265206C616F726565742069642073697420616D6574206F7263692E19437572616269747572207574206D61676E612076656C69742C1269642061646970697363696E67206475692E224D6F72626920766976657272612076756C7075746174652076756C7075746174652E4550726F696E2070756C76696E6172206A7573746F2073656420746F72746F722074696E636964756E7420696420706F72747469746F7220697073756D20706F73756572652E14437572616269747572206175677565206C656F2C1E756C7472696365732065676574206375727375732073697420616D65742C136672696E67696C6C61206E6F6E206E69736C2E124D6F72626920657420616E7465206573742C126E6F6E2061646970697363696E67206D692E1E55742072757472756D2065676573746173207363656C657269737175652E1C50656C6C656E7465737175652071756973206E697369206F7263692E21496E206861632068616269746173736520706C617465612064696374756D73742E1B446F6E6563207365642074696E636964756E74206C696265726F2E1F50726F696E20706F72747469746F7220706C6163657261742072697375732C206E656320626C616E6469742073617069656E207068617265747261206E65632E4150686173656C6C75732065752072697375732071756973206D617572697320737573636970697420736F6C6C696369747564696E207574206575206E657175652E1044756973206F64696F206C616375732C1F6567657374617320696E206D6F6C65737469652061646970697363696E672C1276756C7075746174652075742065726F732E454E756E63206D6F6C6573746965206F7263692073656420747572706973207669766572726120766F6C757470617420616C6971756574206D6920766573746962756C756D2E2B53656420696E74657264756D20636F6E7365637465747572206F72636920617420636F6E7365717561742E22437572616269747572206D6F6C657374696520616C697175616D2074656C6C75732C1C6964206469676E697373696D206E69626820706F727461207365642E374372617320766573746962756C756D206F7263692068656E647265726974207175616D206F726E61726520636F6E64696D656E74756D2E48566976616D757320756C747269636573206C61637573207574206C6F72656D207363656C657269737175652076697461652073656D70657220656C69742076756C7075746174652E1B41656E65616E2073697420616D6574206F64696F206D617373612C107365642072757472756D207175616D2E275574206C6163696E696120656E696D206E6563206F7263692072757472756D2064696374756D2E1B43757261626974757220696420617563746F72206C6967756C612E0F4E616D206E696268206E756C6C612C1B696E74657264756D2076697461652073757363697069742065752C12706F7274612071756973206C6967756C612E3F50726F696E206C6163696E69612073617069656E206E656320646F6C6F722076697665727261206174207375736369706974206F7263692074656D7075732E2450686173656C6C7573207363656C65726973717565206C6F626F72746973207175616D2C2273697420616D6574207361676974746973206E696268206F726E617265206E65632E31446F6E65632073697420616D65742074656C6C757320616320697073756D20706861726574726120696E74657264756D2E3D53656420656765737461732076656C69742065742066656C697320696163756C6973206574206469676E697373696D206573742066617563696275732E2A53757370656E646973736520636F6E76616C6C6973207363656C6572697371756520646170696275732E2A4E756C6C616D206C7563747573206C6163696E6961206E69736C2071756973207472697374697175652E31566976616D75732074696E636964756E74207665686963756C612073656D2073697420616D657420756C7472696365732E124E756C6C612061726375206C65637475732C1A766573746962756C756D206575206D6F6C657374696520696E2C17656C656966656E642072757472756D20746F72746F722E12457469616D206C6967756C61206469616D2C1A756C747269636573206964206D616C6573756164612076656C2C1076617269757320616320646F6C6F722E19496E2073697420616D65742073617069656E206A7573746F2C116E6563206469676E697373696D206D692E1B566976616D757320766974616520616C697175616D20656C69742E2F566573746962756C756D207375736369706974206D616C65737561646120697073756D20696420646170696275732E214D6F72626920756C6C616D636F727065722070686172657472612076656C69742C1F696E2074656D706F72206D617572697320636F6E736571756174206E6F6E2E1F5072616573656E74206D616C657375616461206D6174746973206E756E632C1C617420617563746F72206C696265726F20766976657272612069642E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E23566976616D757320636F6E76616C6C6973207661726975732076756C7075746174652E18446F6E6563206567657420746F72746F72206E657175652E2B4E756E632074656D706F72206D69207175697320656E696D20657569736D6F642074696E636964756E742E1B50656C6C656E746573717565206574206E696268206D61676E612C0F69642063757273757320656E696D2E43436C61737320617074656E742074616369746920736F63696F737175206164206C69746F726120746F727175656E742070657220636F6E75626961206E6F737472612C1770657220696E636570746F732068696D656E61656F732E114E756E63206E756E632073617069656E2C1473656D70657220696E2074656D706F7220696E2C1663757273757320696163756C69732073617069656E2E174E756E63207669746165206D617474697320656C69742E3C416C697175616D207574206E69736C2076656C206C6F72656D20706F72747469746F7220756C6C616D636F7270657220617420736564207175616D2E154D617572697320612074757270697320657261742E4850656C6C656E7465737175652076697665727261206C6967756C612076656C2074656C6C7573207072657469756D20616320617563746F72206E69736920696D706572646965742E1D50726F696E206661756369627573207361676974746973206F64696F2C22717569732073656D706572206D617373612070656C6C656E7465737175652061632E364D6F72626920636F6E64696D656E74756D206E697369207669746165206C696265726F20636F6E76616C6C697320626C616E6469742E1850726F696E20736F64616C6573206F64696F20617263752E1F53757370656E6469737365206E6F6E2076656E656E61746973206469616D2E1B5365642076697461652061646970697363696E67206C6F72656D2E134E756C6C616D2061756775652066656C69732C1867726176696461207175697320636F6D6D6F646F2075742C136469676E697373696D2076656C207175616D2E5D50656C6C656E746573717565206861626974616E74206D6F726269207472697374697175652073656E6563747573206574206E65747573206574206D616C6573756164612066616D65732061632074757270697320656765737461732E3650656C6C656E746573717565206665726D656E74756D206E756C6C6120617420646F6C6F72206D6F6C65737469652073656D7065722E11536564206D657475732073617069656E2C146D6F6C6C6973206120636F6D6D6F646F2061632C10636F6D6D6F646F207365642073656D2E2453757370656E6469737365206665756769617420656C656D656E74756D206C616375732C1D76656C20657569736D6F64206E69736C20616C697175616D206E6F6E2E1B4375726162697475722076656C20617563746F72206E657175652E4050686173656C6C7573206574206C696265726F2076656C20746F72746F7220766573746962756C756D20636F6E73657175617420616320696E206D61676E612E1F4E756C6C616D20636F6E67756520766573746962756C756D206D617373612C2371756973207375736369706974207475727069732061646970697363696E672069642E474E756C6C616D20756C6C616D636F727065722065726F7320696420697073756D20766573746962756C756D206174207072657469756D20617567756520636F6E76616C6C69732E3D43726173206E6563207075727573206163206C656374757320696163756C697320636F6D6D6F646F2073697420616D65742065676574206C616375732E2C43757261626974757220626C616E646974206D6F6C657374696520657374206174206672696E67696C6C612E1A5072616573656E742061742064696374756D207475727069732E26536564206C616F7265657420646170696275732074656C6C757320657420677261766964612E2E467573636520766974616520616E74652075742061726375206C616F7265657420736F6C6C696369747564696E2E254E756C6C61206D6F6C6C697320636F6D6D6F646F206F72636920736564206D6F6C6C69732E1B557420656C656966656E6420616C69717565742074656C6C75732C2176656C20756C74726963696573206C6F72656D206C75637475732076697461652E20446F6E656320636F6D6D6F646F20756C6C616D636F72706572206D617373612C216174207072657469756D206D61676E61206665726D656E74756D2076697461652E1C4E616D2072757472756D20616C69717565742073757363697069742E35416C697175616D2061206D617373612076656C206F64696F207665686963756C612073656D706572206120696E20746F72746F722E2650656C6C656E74657371756520616C697175616D20737573636970697420696163756C69732E27446F6E656320736F64616C6573207072657469756D206D61737361207365642074656D7075732E1550686173656C6C75732076656C69742075726E612C1E636F6D6D6F646F2073697420616D6574207472697374697175652069642C11636F6E67756520717569732065726F732E3B55742076756C707574617465206D61676E6120616C6971756574206C656F20706F7274612069642074656D707573206E756E6320617563746F722E35557420636F6E64696D656E74756D206D61676E612073697420616D6574207175616D20756C7472696369657320696163756C69732E2D41656E65616E20696D7065726469657420666163696C697369732074656C6C7573206E6563206F726E6172652E1A43726173206E65632076756C7075746174652073617069656E2E334D6F72626920757420647569207574206D61676E6120736F64616C657320636F6D6D6F646F206567657420696420657261742E0F447569732065726174206E6973692C1C6C6163696E696120766974616520696D70657264696574206E6F6E2C1265676573746173206E65632070757275732E1450656C6C656E7465737175652074656D706F722C1D6572617420757420656C656966656E6420636F6E64696D656E74756D2C1C697073756D206C6163757320756C747269636573207475727069732C2661206672696E67696C6C61207075727573206C65637475732073656D706572206E756C6C612E1250726F696E206964206E756C6C61206D692E1A53757370656E64697373652076656C2073656D206C616375732E2A55742072757472756D2065726F73206964206D6173736120756C7472696369657320636F6D6D6F646F2E1B4E756C6C6120656765742061646970697363696E6720616E74652E284E756E63207175697320656E696D2061206A7573746F20706861726574726120636F6D6D6F646F2E154E756C6C616D20746F72746F7220746F72746F722C17766F6C757470617420617420636F6D6D6F646F2061742C1A636F6E73656374657475722073697420616D657420657261742E435175697371756520706861726574726120747572706973206E6563206C696265726F207669766572726120717569732072757472756D206E756E63206D61747469732E1841656E65616E20736564206C61637573206C65637475732E1444756973206574206F64696F20746F72746F722E3141656E65616E20756C6C616D636F7270657220756C74726963696573207475727069732073656420766F6C75747061742E0E5574206574206573742073656D2C13657420756C747269636573207475727069732E1850656C6C656E746573717565206E6973692066656C69732C1B64696374756D206E6F6E2074656D706F72206C6F626F727469732C10696163756C697320617420656E696D2E14416C697175616D2074656C6C757320656C69742C1A766F6C757470617420757420747269737469717565207365642C146672696E67696C6C61206163206C696265726F2E17447569732072757472756D207175616D206D61676E612C12757420756C74726963657320697073756D2E154D6F726269206964206F726369206C65637475732E294D616563656E61732071756973206E756E63206174206469616D206D6F6C6C697320636F6E6775652E14416C697175616D206E65717565206C6F72656D2C1D6C6F626F727469732073697420616D657420636F6D6D6F646F2069642C1566657567696174206D617474697320646F6C6F722E224372617320616C697175616D20636F6E76616C6C69732061646970697363696E672E23566573746962756C756D2076617269757320636F6D6D6F646F2070756C76696E61722E2353757370656E646973736520656C656966656E642064696374756D206C65637475732C1D76656C20636F6D6D6F646F206E6962682076617269757320717569732E1F50686173656C6C75732073697420616D6574206E697369206C696265726F2E37496E20616C697175616D207075727573207574206D69206D6174746973207175697320696163756C6973206C6163757320706F7274612E2853656420756C747269636573207665686963756C61206D617572697320736564206F726E6172652E244D616563656E617320677261766964612074696E636964756E742073616769747469732E194D61757269732069642068656E6472657269742065726F732E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E1E437572616269747572207068617265747261206469616D2061756775652C1673697420616D657420636F6E6775652066656C69732E265072616573656E74206469676E697373696D20656C656966656E642076756C7075746174652E1A536564206E656320766573746962756C756D2074656C6C75732E6B566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B20566573746962756C756D206C616F726565742C1B65726F732076697461652072686F6E63757320616C69717565742C1B6C6967756C612074757270697320636F6E6775652070757275732C1F6E6F6E20636F6E76616C6C6973206D69206E6962682065752070757275732E31566976616D757320657569736D6F6420666163696C69736973206C616375732074696E636964756E742072757472756D2E11566976616D75732073757363697069742C186E697369207365642073656D70657220696163756C69732C196C696265726F2073656D2070756C76696E617220656E696D2C1E6120616C69717565742070757275732075726E61207574206E756C6C612E1D446F6E656320756C747269636573206C7563747573206D61757269732C27696E20706F72747469746F7220656E696D20756C6C616D636F727065722073697420616D65742E2B4D6F7262692070656C6C656E74657371756520617563746F722076656C697420657420656765737461732E1946757363652061632074696E636964756E74206D617373612E2B4D6F72626920612076656C69742065676574206469616D2074696E636964756E7420656C656966656E642E42437572616269747572206F726E617265206C65637475732061207175616D20626C616E6469742076656C206665726D656E74756D206C616375732064696374756D2E16446F6E65632076656C20747572706973206F64696F2C116163207375736369706974206F7263692E304E756C6C6120706F737565726520636F6E76616C6C6973206C616375732076656E656E6174697320666575676961742E5D50656C6C656E746573717565206861626974616E74206D6F726269207472697374697175652073656E6563747573206574206E65747573206574206D616C6573756164612066616D65732061632074757270697320656765737461732E1453757370656E646973736520706F74656E74692E4153757370656E6469737365206D6F6C6C6973206E65717565207574206E6571756520677261766964612075742076697665727261206D6920756C7472696365732E19566573746962756C756D2061742074656D706F722073656D2E164D61757269732076656C206C656F206C696265726F2E14416C697175616D206175677565206A7573746F2C18756C747269636965732076656C206665756769617420612C1376756C7075746174652073656420657261742E19416C697175616D20696E20756C747269636573207175616D2E2C50686173656C6C757320616C697175616D20766573746962756C756D206F64696F20617420617563746F722E0C53656420646170696275732C1866656C6973206163206F726E61726520646170696275732C1A6D61676E6120646F6C6F7220626962656E64756D206E69736C2C2265676574206C7563747573206C61637573206D61676E61206574206D61757269732E124E756C6C6120697073756D2061756775652C1B74656D706F72207175697320636F6E736563746574757220696E2C12696163756C6973206E6F6E20646F6C6F722E3753757370656E646973736520636F6E73656374657475722066656C6973206163206E756C6C6120736F64616C65732072686F6E6375732E144D616563656E61732076656C697420616E74652C1A6C6163696E696120617420636F6E76616C6C697320717569732C14696163756C697320717569732074656C6C75732E2253757370656E646973736520696D7065726469657420616C6971756574206475692C28706F73756572652064696374756D206A7573746F206665726D656E74756D2073697420616D65742E13457469616D20616320616E7465206469616D2E1B53757370656E6469737365207175697320646F6C6F72206475692C106174206D6F6C6C6973206E657175652E1541656E65616E206575206E697369206C6F72656D2C13657420756C747269636573206D61757269732E164E756C6C6120696E206175677565206C696265726F2C126E6F6E20737573636970697420656C69742E0D437261732072686F6E6375732C18657374206163206672696E67696C6C61207661726975732C186572617420697073756D2067726176696461206E69736C2C1D6174206F726E61726520647569206E697369206964206D61757269732E164E756C6C616D206E65632064696374756D206C656F2E1750686173656C6C7573206D61676E612073617069656E2C1C7361676974746973207175697320737573636970697420717569732C11626962656E64756D20696E206F64696F2E174372617320736564206C6967756C612074656C6C75732C1973697420616D6574206665726D656E74756D2066656C69732E2350656C6C656E746573717565207375736369706974206665756769617420656E696D2C22766974616520666575676961742065726F73206D6174746973207072657469756D2E1143726173206E6973692074656C6C75732C1A706C616365726174206E6563206461706962757320656765742C1266617563696275732061632066656C69732E1C50726F696E2074656D70757320666575676961742073617069656E2C1C6E6563206D6174746973206C656F2070686172657472612076656C2E494D616563656E61732064617069627573206D69206469676E697373696D206C6967756C6120636F6D6D6F646F20657420666163696C69736973207175616D207472697374697175652E335072616573656E7420766172697573206C6163757320657520656E696D2070656C6C656E74657371756520677261766964612E484E616D2072686F6E637573206D61757269732070686172657472612065726F732076756C7075746174652061742074696E636964756E74206D61737361206672696E67696C6C612E3250656C6C656E74657371756520696E2065726174206E6563206D6173736120636F6E73657175617420756C7472696365732E1B446F6E65632076617269757320656C656D656E74756D206C656F2C276E6F6E2068656E647265726974206A7573746F2074696E636964756E742073697420616D65742E16446F6E6563206163206C696265726F2061756775652E2C536564206D61747469732074757270697320612073656D20756C7472696369657320636F6E7365717561742E1041656E65616E206E756E63206475692C1B636F6D6D6F646F206567657420766573746962756C756D2075742C0F72757472756D20696E206E69736C2E104E616D206175677565206C6F72656D2C1374656D706F7220696E20706F7274612061742C11636F6D6D6F646F20757420697073756D2E25517569737175652061646970697363696E6720616C69717565742074696E636964756E742E1453757370656E646973736520706F74656E74692E4350656C6C656E74657371756520706F72747469746F7220656C6974206174206C656F2068656E647265726974207072657469756D206E6563206575207475727069732E1843757261626974757220696E20656C6974206D657475732E13416C697175616D20726973757320657261742C20706F73756572652069642061646970697363696E6720636F6E7365717561742C11646170696275732076656C2065726F732E314D616563656E61732073656D7065722066656C6973207365642066656C697320747269737469717565207661726975732E334D61757269732074656D70757320746F72746F72206574206D6574757320657569736D6F642070656C6C656E7465737175652E1750656C6C656E74657371756520647569206D617373612C19657569736D6F64206E6F6E2074696E636964756E742069642C10616C697175657420696E20656C69742E1A41656E65616E2076756C7075746174652073656D20656C69742E1D50656C6C656E7465737175652061742074656D707573206D61676E612E2F41656E65616E20656C656D656E74756D206E69736C20696420616E746520636F6D6D6F646F20706C6163657261742E164E616D20736564206D61757269732074656C6C75732E1B50656C6C656E746573717565206E6563206F726369206E6962682C136E65632076756C70757461746520656E696D2E16416C697175616D206572617420766F6C75747061742E2C457469616D206469676E697373696D206A7573746F2061206F7263692065676573746173206D61747469732E33566976616D757320756C7472696365732073617069656E206163207475727069732076656E656E617469732074656D706F722E2953757370656E646973736520636F6E73657175617420766F6C7574706174206665726D656E74756D2E1344756973206575206F7263692076656C69742E0D53656420706C6163657261742C1B6E6973692073656420616C69717565742074696E636964756E742C187269737573206F64696F206D6174746973206E756C6C612C206E6F6E20736F64616C6573206E756E63206E756C6C61207669746165206D692E2B4E756E6320636F6E73657175617420706861726574726120646F6C6F72206174206672696E67696C6C612E5D50656C6C656E746573717565206861626974616E74206D6F726269207472697374697175652073656E6563747573206574206E65747573206574206D616C6573756164612066616D65732061632074757270697320656765737461732E45566573746962756C756D20756C7472696365732074656C6C75732071756973206E69736C206469676E697373696D2072686F6E6375732065676574206574206A7573746F2E3F4D616563656E61732076697461652070757275732071756973206C656F207665686963756C612076656E656E617469732076656C207574206C65637475732E1C437572616269747572206E6563206D6F6C6573746965206E69736C2E47566573746962756C756D20756C6C616D636F72706572206E756C6C61206E6F6E206F7263692064696374756D2071756973206C6163696E69612065737420696E74657264756D2E15467573636520656765742073656D2072697375732C1373656420766F6C75747061742061756775652E1453757370656E646973736520706F74656E74692E1A536564206C7563747573206D6F6C65737469652061756775652C186120766172697573207175616D20636F6E67756520696E2E2F416C697175616D20616C6971756574206F7263692065676574206D6920657569736D6F6420636F6E7365717561742E16557420657420766573746962756C756D20616E74652E15536564207669746165206D6574757320656C69742E124D6175726973206C616375732065726F732C2070656C6C656E746573717565206575207665686963756C612073656D7065722C186461706962757320636F6E736571756174206E756C6C612E4553656420766F6C757470617420657261742073757363697069742073656D20666163696C697369732061742061646970697363696E67206F726369207665686963756C612E1850656C6C656E746573717565206E697369206E756C6C612C17666175636962757320696E2072686F6E6375732075742C1872686F6E63757320656C656966656E64207475727069732E1341656E65616E206F64696F20746F72746F722C1D756C6C616D636F727065722069642074696E636964756E74206E65632C0F72686F6E637573206E6F6E206D692E1E5072616573656E7420696E74657264756D20766172697573206F7263692C1D75742076656E656E61746973206E696268206D6F6C6C6973206E65632E0C557420706C6163657261742C1C65726174206E65632074696E636964756E742070686172657472612C1B6D65747573206C616375732076656E656E61746973206E756E632C226574206C616F726565742061756775652073617069656E2076656C206C6F72656D2E195365642073697420616D65742076697665727261206573742E0D457469616D2072757472756D2C1A707572757320757420756C74726963657320616C69717565742C196E65717565206D61676E61206C75637475732072697375732C2376656C20636F6E73656374657475722065726F73206C6F72656D207574206F64696F2E14496E74656765722074757270697320656C69742C1C636F6E7365637465747572207574207375736369706974207365642C1167726176696461206174206C6F72656D2E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E224D6F72626920706C61636572617420616363756D73616E206D616C6573756164612E0D4D617572697320706F7274612C1C6C61637573206567657420696163756C69732073616769747469732C18617263752073656D206C6F626F72746973206E756C6C612C2265742074656D7075732076656C6974206D617373612071756973206C696265726F2E11467573636520646F6C6F72206E6962682C1B626962656E64756D2065742061646970697363696E67206E6F6E2C11656C656966656E64206574206F64696F2E0F4475697320656C69742065726F732C1D68656E64726572697420617420706F72747469746F722076697461652C1167726176696461206E656320617263752E475072616573656E74206D616C6573756164612073617069656E20612075726E6120616363756D73616E2061742068656E64726572697420697073756D20706F72747469746F722E284D61757269732070686172657472612073616769747469732075726E612065752074656D706F722E15566573746962756C756D207075727573206C656F2C1A7068617265747261207175697320756C7472696365732061632C1073656D706572206E656320657261742E13536564206E6563206D6173736120617263752C117365642074656D70757320646F6C6F722E1846757363652076697461652064696374756D2065726F732E2041656E65616E20766573746962756C756D2073656D706572207475727069732C21696163756C697320617563746F7220646F6C6F72207665686963756C612061632E1D496E206665726D656E74756D20617563746F722070686172657472612E16496E7465676572206E65632065726F73206469616D2C116567657420706F7375657265206C656F2E0E4E616D207472697374697175652C1A6E696268206E6563206D616C657375616461206F726E6172652C1775726E61206F64696F20706F727461206D61757269732C2D616363756D73616E20616C6971756574206E756E63206C65637475732073697420616D6574206D61757269732E17566573746962756C756D206E756C6C61206D617373612C2173656D7065722073697420616D657420626C616E6469742073697420616D65742C1676656E656E6174697320656765742073617069656E2E23566573746962756C756D20756C74726963657320636F6E6775652072686F6E6375732E1F4E756E63206C6163696E6961206461706962757320696D706572646965742E3C4E756E6320612065726F73207365642075726E612070656C6C656E7465737175652065676573746173206E6F6E2073697420616D657420656C69742E13496E746567657220646F6C6F72206469616D2C1B76756C70757461746520617420747269737469717565206E6F6E2C1376656E656E6174697320696E2072697375732E19536564206C6163696E6961206C756374757320697073756D2C1F61632073616769747469732061726375206D6F6C657374696520717569732E4350686173656C6C7573207072657469756D206E756C6C612071756973207175616D20706C61636572617420766974616520636F6D6D6F646F206D6920636F6E6775652E255072616573656E7420747269737469717565206C616F7265657420656C656D656E74756D2E215072616573656E742076656E656E61746973207072657469756D20646F6C6F722C25657520766F6C757470617420657374207363656C657269737175652073697420616D65742E225072616573656E7420656C656966656E642064696374756D207665686963756C612E2F446F6E656320756C6C616D636F727065722061646970697363696E6720616E746520616320656C656D656E74756D2E11496E746567657220647569206E756E632C15766976657272612061742072757472756D2075742C1374696E636964756E74207669746165206D692E3D446F6E6563206E6563207269737573206964206172637520706F72747469746F7220706C6163657261742070756C76696E6172206174206C616375732E164D6F7262692061632076656C69742073617069656E2C166C6163696E69612065676573746173206E756C6C612E334D617572697320656C656D656E74756D20647569206163206C696265726F20756C7472696369657320636F6E7365717561742E424E616D206E6F6E206A7573746F2061742074656C6C75732068656E6472657269742072686F6E63757320756C747269636573206D6F6C65737469652061756775652E1241656E65616E20656C69742070757275732C1A74656D706F722071756973207665686963756C6120717569732C106C6F626F727469732061206F64696F2E1D416C697175616D2072686F6E63757320766172697573206C6F72656D2C1B657520616C6971756574207475727069732072757472756D20612E1A4E756C6C6120677261766964612067726176696461206475692C226163206D6F6C657374696520617263752061646970697363696E672076697461652E1143726173206469616D206D61757269732C1B63757273757320766974616520636F6E6775652064696374756D2C1361646970697363696E6720696420657261742E2B53757370656E6469737365206F726E61726520706F72746120656C69742069642068656E6472657269742E195072616573656E74206E6563206D65747573206D617373612C106120656765737461732072697375732E32446F6E65632070656C6C656E7465737175652076697665727261206469616D2073697420616D65742070686172657472612E1553757370656E6469737365206C6F72656D206D692C167669766572726120657520617563746F72206E6F6E2C12766F6C75747061742065742066656C69732E1950726F696E206964206665726D656E74756D2070757275732E154E616D2065676574206D617474697320617263752E1E4D6F72626920626962656E64756D2072757472756D20657569736D6F642E22446F6E656320616C69717565742068656E6472657269742074696E636964756E742E3541656E65616E2065752073617069656E207574206E756E632064696374756D2066657567696174206E6563206174206C616375732E464475697320636F6D6D6F646F206E697369206E656320746F72746F7220766F6C7574706174207175697320636F6E64696D656E74756D2074757270697320616C697175616D2E15566976616D757320736F6C6C696369747564696E2C206E756C6C612072686F6E63757320636F6E73657175617420706F73756572652C1B6E697369206E6962682061646970697363696E672066656C69732C24616C697175657420706F7274612061726375206D61676E61206E65632073617069656E2E2A5574206C756374757320696E74657264756D206469616D207175697320736F6C6C696369747564696E2E2B55742073656D706572206D61676E6120736564206E657175652068656E647265726974206D61747469732E124E756C6C616D20747572706973206475692C1B706F72747469746F72206567657420696E74657264756D2069642C11706F72747469746F72206575206475692E0C557420616363756D73616E2C1D74656C6C757320696E20656C656966656E6420696D706572646965742C1B656C6974206D6173736120666163696C69736973206D61676E612C28766974616520666575676961742074656C6C7573206C656374757320656765742074656C6C75732E2C4D6175726973206163206E65717565206163206E69626820756C7472696369657320696D706572646965742E0E55742075726E61206C6F72656D2C15616C6971756574206574206D61747469732069642C1273757363697069742061206C65637475732E2F4E616D207665686963756C6120706F72747469746F7220657261742073697420616D657420696D706572646965742E24536564206575206E756E63206964206D6175726973206D6F6C6C69732072757472756D2E1650656C6C656E74657371756520647569206F7263692C1E756C6C616D636F72706572206174206672696E67696C6C6120656765742C17736F6C6C696369747564696E2065676574206E756E632E36517569737175652076656C206D6574757320657420656E696D20706C61636572617420656C656966656E64207365642061206C656F2E355072616573656E742070686172657472612068656E647265726974206E696268207363656C6572697371756520616C697175616D2E21447569732074696E636964756E7420766573746962756C756D20636F6E6775652E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E1D566573746962756C756D206E6F6E206C696265726F206C6967756C612E2D557420637572737573206D617572697320736564206F64696F20696D70657264696574207665686963756C612E1B496E206665726D656E74756D207665686963756C6120617263752C1D616320636F6D6D6F646F20617567756520706F7375657265207365642E12566976616D757320756C747269636965732C1A6D61676E6120696E20616C697175616D2073757363697069742C1C746F72746F72206C656F20766573746962756C756D20646F6C6F722C1E7574206C7563747573206F64696F206469616D206E6563206C616375732E1850686173656C6C7573206574206469616D206D657475732E3E43726173206672696E67696C6C61206E696268207175697320616E74652074696E636964756E7420696E20657569736D6F64206C656F206C75637475732E4B4E756C6C612074696E636964756E7420657261742073697420616D65742065726174207669766572726120656C656966656E6420616363756D73616E206C6967756C61206C75637475732E165175697371756520657420726973757320656E696D2E3A5072616573656E74207669746165206E65717565207574206C656F2073656D706572206D616C65737561646120657520736564206A7573746F2E2944756973207072657469756D207665686963756C61206F72636920736564206469676E697373696D2E3743726173206E6563206D61676E6120696E206E756C6C61206C616F726565742076756C707574617465207175697320617420656E696D2E174E756C6C612065676574206F64696F2074656C6C75732E42496E20706C616365726174206D6173736120657420707572757320656C656966656E64206E6F6E206672696E67696C6C61206E65717565206672696E67696C6C612E21446F6E656320696D7065726469657420756C6C616D636F72706572206E69736C2C1B76656C2072757472756D2073617069656E2072757472756D20612E0C44756973206C75637475732C1A616E74652065752074726973746971756520636F6D6D6F646F2C20697073756D206C696265726F20736F6C6C696369747564696E2070757275732C1F717569732074656D706F72206E6962682066656C6973206163207175616D2E1D4E756C6C616D20736F64616C6573207665686963756C6120656C69742C1E656765742065676573746173206E6571756520626C616E64697420696E2E1D4D6175726973206567657374617320666175636962757320656C69742C2269642070656C6C656E746573717565206E6962682074696E636964756E742069642E164E616D2076697461652066656C6973206D61676E612E12446F6E65632074656C6C7573207175616D2C227363656C6572697371756520766974616520736F6C6C696369747564696E2061742C10677261766964612076656C206573742E3D557420736F64616C65732076656C6974206E65632064756920736F6C6C696369747564696E206120706F727461206D6920756C6C616D636F727065722E244372617320736F6C6C696369747564696E206567657374617320636F6E7365717561742E14446F6E656320696420746F72746F72206573742C11656765742074656D706F72206469616D2E78566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B20557420756C6C616D636F7270657220677261766964612070686172657472612E1050726F696E206469616D206E756E632C186665756769617420696420696E74657264756D2076656C2C11706F72747469746F722061206E69736C2E31416C697175616D20616C6971756574206F72636920736564206D65747573206567657374617320706F72747469746F722E214D6F72626920736F6C6C696369747564696E2070756C76696E617220656E696D2E3F457469616D2074696E636964756E74206175677565207574207175616D206D6F6C6C697320616320696D70657264696574206F64696F20656765737461732E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E124E756E6320617420656E696D206469616D2E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E15416C697175616D206C6F72656D206C65637475732C1A737573636970697420617420766573746962756C756D2061632C177363656C6572697371756520717569732061756775652E134D6F7262692066656C69732074656C6C75732C1F706F72747469746F7220717569732070656C6C656E7465737175652075742C0F64696374756D206163206E6973692E46496E74656765722073697420616D6574206D617373612076656C206175677565206C6163696E69612064617069627573206E6F6E2076756C70757461746520746F72746F722E2141656E65616E20756C6C616D636F7270657220736F64616C6573206A7573746F2C1F6174206665726D656E74756D206C696265726F20736F64616C65732065742E2D467573636520766974616520656E696D207574206C6967756C6120766F6C757470617420706C6163657261742E1C50656C6C656E746573717565206574206D6175726973206E6962682C126E6F6E206C6163696E696120697073756D2E3150686173656C6C7573206163206E6962682073697420616D6574206E6962682076756C7075746174652072757472756D2E174D616563656E6173206964206E756C6C61207175616D2E374D616563656E617320657569736D6F6420646F6C6F7220696E206D61676E6120636F6E64696D656E74756D2061646970697363696E672E2B4D6F72626920656C656D656E74756D2074696E636964756E74206D617572697320696E206D6F6C6C69732E4850656C6C656E74657371756520736167697474697320747572706973206964206E756E632074656D706F72206120656C656966656E6420747572706973206665726D656E74756D2E1B53656420666175636962757320696E74657264756D20617263752C196174207661726975732073656D20616C69717565742069642E2650656C6C656E74657371756520766573746962756C756D20696163756C69732072697375732C1B69642064696374756D206C6F72656D20677261766964612061632E465175697371756520736167697474697320617263752076697461652065726F73206461706962757320766974616520636F6E76616C6C6973206E756C6C61206D61747469732E114E616D20696420647569206E657175652C127574206D6F6C65737469652076656C69742E2D50656C6C656E7465737175652070756C76696E617220706F727461206572617420657520696E74657264756D2E114E756E63206D65747573206D617373612C1B766573746962756C756D207669746165206567657374617320612C126672696E67696C6C61206574206F64696F2E18517569737175652071756973206469616D206C6F72656D2C18717569732070656C6C656E7465737175652076656C69742E144D61757269732073617069656E2072697375732C1C7375736369706974206E656320766573746962756C756D206E65632C0F72757472756D20612072697375732E29437572616269747572206C6F626F7274697320636F6E64696D656E74756D20756C747269636965732E194475697320717569732064617069627573207475727069732E114E756E63206C656374757320656C69742C19666163696C6973697320617420626962656E64756D2065742C13766573746962756C756D20696E20617263752E104D6F726269206F64696F206E6962682C176665756769617420717569732074656D706F722075742C1A7363656C6572697371756520756C747269636573206E6973692E1B437572616269747572206120616363756D73616E2061756775652E1F496E746567657220616C697175657420706F72747469746F72206E6962682C1D6E656320706C6163657261742065737420706861726574726120696E2E2C446F6E65632066657567696174206E697369206574206F64696F20636F6D6D6F646F20696E74657264756D2E2A566573746962756C756D20756C6C616D636F7270657220626962656E64756D206665726D656E74756D2E384675736365206575206C616375732065676574206D65747573206D616C65737561646120666575676961742065752076656C20657261742E13536564206574206572617420746F72746F722E1E4D6F726269206D616C65737561646120766172697573206D6F6C6C69732E1C4E616D20616363756D73616E206469676E697373696D206F64696F2C227175697320636F6E7365637465747572206D69206D6F6C657374696520656765742E0E457469616D20696163756C69732C1A656E696D20657520706C616365726174207665686963756C612C1B656C6974206D617373612070756C76696E61722074656C6C75732C1C696E20637572737573206D61676E61206D69206E6F6E207175616D2E1D566976616D7573207661726975732074656D706F722073656D7065722E264E756C6C612061646970697363696E67206665756769617420736F6C6C696369747564696E2E26457469616D206C6163696E696120706C61636572617420647569206E6563207661726975732E16496E207669746165206D65747573206D61757269732E3D566573746962756C756D20736564206D61676E612071756973206E696268206F726E6172652072686F6E63757320757420766974616520697073756D2E1144756973206C6967756C61206E756E632C1B6665726D656E74756D20736564207375736369706974206E6F6E2C136D6F6C65737469652076656C2070757275732E1453757370656E646973736520706F74656E74692E0F50726F696E2061726375206C656F2C1A61646970697363696E67206174207665686963756C612061632C15756C6C616D636F72706572206E6563206469616D2E1950726F696E207072657469756D20706F7274612075726E612C1F71756973206665726D656E74756D206E69736C207072657469756D2065742E2C53757370656E6469737365206120656C6974206575206E697369206D6F6C6573746965206C6163696E69612E194372617320617420636F6E64696D656E74756D20617263752E1453757370656E646973736520706F74656E74692E4F53656420756C6C616D636F7270657220616E74652073697420616D65742075726E6120616C697175657420756C74726963657320616363756D73616E206E6571756520756C6C616D636F727065722E414E616D2073697420616D65742076656C69742076656C2075726E6120677261766964612073757363697069742073697420616D6574206E6F6E206D61757269732E125574206E6F6E206E6571756520617263752E1F5072616573656E74206772617669646120736F64616C6573206C6F72656D2C2376697461652068656E64726572697420707572757320626962656E64756D206E6F6E2E0F4E756C6C6120666163696C6973692E0E4D6175726973206F726E6172652C1E73656D20656765742074726973746971756520766573746962756C756D2C196175677565206D65747573206C7563747573206E657175652C2573697420616D6574207072657469756D206C6563747573206475692065742061756775652E1E43757261626974757220657520636F6E76616C6C6973207475727069732E0B557420657374206573742C1C76756C70757461746520617563746F72206C616F726565742065742C13696163756C69732065676574206D617373612E20566573746962756C756D206F726E61726520706F7274612072686F6E6375732E4A50686173656C6C7573207361676974746973206F726369206574206F72636920626C616E64697420666163696C697369732076697665727261206C656F20636F6E73656374657475722E4D437572616269747572206D6F6C6573746965206E696268207669746165206E69736920636F6E64696D656E74756D20656765742074656D706F72206E756C6C6120636F6E73656374657475722E0D55742061726375206E756E632C1B6D6F6C6C6973206E656320636F6E7365637465747572206E65632C16656C656D656E74756D2074656D70757320656E696D2E164E756C6C616D2076656C2061726375206D617373612E16496E207175697320616363756D73616E206E6962682E1A4E756C6C616D20696420747269737469717565206E657175652E2C50686173656C6C7573206D617474697320696E74657264756D206E697369207175697320766976657272612E134D6F72626920736F6C6C696369747564696E2C1B6C656F2076656C20666175636962757320636F6E7365717561742C16616E74652065737420626C616E646974206E6962682C20696420736F64616C6573207269737573206E756E63206163206C6967756C612E364E756C6C616D2070656C6C656E746573717565206469616D206E65632075726E61206672696E67696C6C61206D616C6573756164612E144D616563656E6173206E697369206C6F72656D2C1A626962656E64756D206120636F6E64696D656E74756D20696E2C13636F6D6D6F646F2076656C2074656C6C75732E3450726F696E206174206F64696F20696E20616E7465206C6163696E696120736F64616C65732076656C206567657420656C69742E1B437572616269747572206575206665726D656E74756D206573742E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E345072616573656E742072757472756D206C65637475732061632076656C697420636F6E7365717561742068656E6472657269742E1A496E2066617563696275732064696374756D206D61747469732E0F5365642061206A7573746F206D692C12657520636F6E76616C6C6973206E6962682E26496E746567657220636F6D6D6F646F20736F6C6C696369747564696E2073757363697069742E3E4375726162697475722076656C206C656F207669746165207175616D20756C7472696369657320696E74657264756D2065742065676574206A7573746F2E3F50726F696E20756C747269636573206C61637573206574206D657475732076756C70757461746520756C747269636573206575206E6F6E206C6967756C612E2A50726F696E2061742076656C697420696E206E697369206D616C657375616461206C6F626F727469732E0F4675736365206573742075726E612C1A70756C76696E61722061632076656E656E61746973206E6F6E2C1468656E647265726974206E6F6E206E657175652E28446F6E6563206964206175677565206163206D61676E6120636F6E73657175617420706F7274612E2B446F6E65632073656420657261742076697461652076656C6974207665686963756C612072757472756D2E2F41656E65616E2070756C76696E617220647569206E656320617567756520706861726574726120696163756C69732E4351756973717565207072657469756D2072697375732076697461652061726375206665756769617420616320706F73756572652072697375732073616769747469732E0E4E616D206469616D20657261742C1772757472756D20757420696E74657264756D206E6F6E2C0F6C616F726565742061742073656D2E0E53656420656E696D20656C69742C1874656D706F72206567657420766F6C75747061742061632C0F616C69717565742061742073656D2E354E756E6320696E2075726E6120657520697073756D2074656D706F722070686172657472612065676574207669746165206573742E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E104E756C6C6120756C747269636965732C1E6C6967756C61207175697320636F6E73657175617420706F73756572652C17616E74652072697375732067726176696461206573742C1F696E207072657469756D20656C697420697073756D206E65632065726F732E2A4D6175726973206163206C656F2073697420616D6574206E69736C2072757472756D206D61747469732E31446F6E656320666163696C6973697320656E696D2065676574206D61757269732067726176696461206C6163696E69612E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E31566976616D757320656C656966656E64206C61637573206E6F6E206572617420656C656966656E64206C6163696E69612E284E616D207665686963756C61207665686963756C6120697073756D20616320756C7472696365732E17416C697175616D207574206D617373612070757275732E2F41656E65616E2076656C20657374207669746165206E756C6C612074696E636964756E74206D616C6573756164612E11416C697175616D20656C656966656E642C1A61726375206E6F6E207472697374697175652074656D706F722C19647569206C6967756C61206D616C6573756164612073656D2C2A696163756C6973207363656C65726973717565206D61676E61206D617373612071756973207175616D2E1B50656C6C656E746573717565206C696265726F206D61757269732C1E76756C707574617465207365642074696E636964756E742076697461652C127665686963756C6120616320697073756D2E104D61757269732070686172657472612C1C7475727069732065752074696E636964756E742072686F6E6375732C187175616D20746F72746F722076697665727261206573742C2361742070656C6C656E746573717565206175677565206E696268206163206E6962682E0D496E20697073756D206475692C1C756C6C616D636F727065722076656C2073656D70657220717569732C1073656D706572206964206D617373612E1850686173656C6C7573206E6F6E2073656D20646F6C6F722C166174207363656C657269737175652074656C6C75732E164375726162697475722076656C69742061756775652C1770756C76696E617220696E20616C697175616D2069642C10616C69717565742076656C206C656F2E1D4675736365206665726D656E74756D20626C616E646974206E756E632C2976697461652074696E636964756E74206C656F206D6F6C657374696520636F6E64696D656E74756D2E1D53757370656E6469737365207574206772617669646120697073756D2E144375726162697475722076756C7075746174652C226D61757269732073697420616D65742070756C76696E61722073616769747469732C18697073756D20656E696D206665756769617420656E696D2C1F657420706F727461207269737573206E65717565206567657420616E74652E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E11446F6E65632065726F7320646F6C6F722C1B7665686963756C61207175697320616C697175616D20656765742C106F726E617265206964206C6F72656D2E0F557420646F6C6F72206C616375732C15616C69717565742075742074656D706F722065742C0F766172697573206574206E756E632E444372617320636F6E7365637465747572206D617373612076697461652076656C6974206D6174746973206120756C7472696365732075726E612076656E656E617469732E125072616573656E74206C61637573206D692C18626962656E64756D206120616C697175657420717569732C15766573746962756C756D206E6F6E2076656C69742E1A50726F696E2073697420616D657420656C69742066656C69732C136575206D616C657375616461206A7573746F2E1B4D616563656E617320617563746F722075726E61206D657475732E3550686173656C6C757320636F6E76616C6C69732076656C6974206964206A7573746F20626C616E6469742076656E656E617469732E2353757370656E646973736520636F6E76616C6C69732072686F6E637573206F7263692C1A612074696E636964756E74207175616D2076617269757320612E2A4675736365207363656C6572697371756520616C697175616D206F64696F20616320736F64616C65732E17416C697175616D20696E206C656374757320617263752E0E496E20766573746962756C756D2C1B6E697369206574207361676974746973206469676E697373696D2C1870757275732065737420666575676961742072697375732C21616320616363756D73616E20616E746520707572757320696E207475727069732E234D616563656E617320626962656E64756D20636F6E64696D656E74756D206E6962682C2271756973206672696E67696C6C61207175616D20696D70657264696574207365642E2F4E756C6C6120756C6C616D636F727065722073757363697069742073656D20657569736D6F642072686F6E6375732E17437572616269747572206C6563747573206A7573746F2C1E636F6E73656374657475722076697461652076697665727261207365642C126672696E67696C6C61206174206E756E632E15416C697175616D206A7573746F20746F72746F722C176F726E6172652076656C2072686F6E637573206E6F6E2C13656C656966656E64207365642070757275732E1D4E756C6C616D20706F73756572652067726176696461206D61676E612C286567657374617320636F6E76616C6C69732074656C6C75732076656E656E6174697320717569732E0F4D617572697320666575676961742C1B6C6563747573206E65632072757472756D20706C6163657261742C1D74656C6C757320617567756520636F6E76616C6C69732076656C69742C1D696E206D6174746973206F64696F206E6571756520696E2075726E612E355175697371756520717569732075726E61206174206469616D207072657469756D20696163756C697320757420736564206475692E104D6F726269206E69626820656E696D2C19616363756D73616E20657520636F6E76616C6C69732065742C11626962656E64756D20736564206475692E43436C61737320617074656E742074616369746920736F63696F737175206164206C69746F726120746F727175656E742070657220636F6E75626961206E6F737472612C1770657220696E636570746F732068696D656E61656F732E31457469616D20696E74657264756D20747572706973206575206475692061646970697363696E672073616769747469732E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E21496E206861632068616269746173736520706C617465612064696374756D73742E1C53757370656E646973736520736564206C696265726F20656E696D2C1165742064617069627573206A7573746F2E10416C697175616D20636F6D6D6F646F2C247475727069732073697420616D65742076656E656E6174697320666163696C697369732C1A6E696268206469616D20706F72747469746F72206E657175652C1D6E65632067726176696461206D61737361206F64696F20612073656D2E184D6F72626920717569732076656C6974206C6967756C612E434D617572697320696E74657264756D207269737573206E6563207175616D2072686F6E63757320657520626962656E64756D206D61757269732070756C76696E61722E284E756E63206964206F726369206E656320747572706973206C6F626F72746973206C75637475732E335072616573656E74206C616F72656574206C65637475732076656C206C656F206D616C65737561646120696E74657264756D2E2F517569737175652061206D692061632065726F73206D617474697320706861726574726120696E2061207175616D2E4F536564207363656C65726973717565206C6967756C612076656C2074656C6C75732070756C76696E617220737573636970697420736F6C6C696369747564696E206F64696F207665686963756C612E2C496E20706F727461206F64696F20617563746F72206A7573746F20636F6D6D6F646F206C6F626F727469732E224E756C6C616D20706F72747469746F7220766F6C757470617420626C616E6469742E12496E20757420766172697573206E69736C2E1B4E756E6320706861726574726120706F727461206C75637475732E154D617572697320696E206D6174746973206573742E21496E206861632068616269746173736520706C617465612064696374756D73742E1E4D616563656E61732073656420636F6E76616C6C69732074656C6C75732E87566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B205574207665686963756C61206D6574757320766974616520697073756D2068656E6472657269742072757472756D2E104E756E6320646F6C6F72206E69736C2C18696E74657264756D2071756973206F726E6172652065742C1074656D706F722071756973206475692E29446F6E65632074696E636964756E742076617269757320747572706973206E6F6E206375727375732E0F4E756C6C61206C6F626F727469732C216C6163757320656765742070656C6C656E7465737175652073616769747469732C1775726E6120656C69742072686F6E63757320657261742C24616320636F6E76616C6C697320697073756D2073617069656E206E6F6E206C616375732E334D6F7262692070656C6C656E746573717565206C6967756C612065742076656C69742074656D7075732073616769747469732E2B4D6F7262692074696E636964756E7420696E74657264756D206E756E63206E6F6E2073757363697069742E2E4372617320666175636962757320696E74657264756D2076656C697420616363756D73616E20706F73756572652E14446F6E656320612061756775652072697375732E0E457469616D20766976657272612C1B6C656374757320736564206D6174746973206C6F626F727469732C196572617420726973757320616C6971756574206C6F72656D2C1E65752073656D706572206C696265726F206E756E6320616320657261742E12446F6E656320617420647569206E6973692E1146757363652064756920746F72746F722C1B636F6E736571756174206567657420656765737461732076656C2C166C6F626F7274697320656C656D656E74756D206D692E2D53757370656E646973736520626C616E646974206D6F6C65737469652075726E612076656C206D6F6C6C69732E1E4E616D20616C697175616D20766F6C757470617420626962656E64756D2E2C4E756C6C6120696420657261742061206C656374757320666163696C6973697320766573746962756C756D2E274E756E632064696374756D206C616F72656574206D61676E612065752076656E656E617469732E424475697320666163696C69736973206A7573746F206E656320656E696D207665686963756C61206E65632072757472756D2070757275732076756C7075746174652E3153656420736F6C6C696369747564696E20647569206E656320707572757320706F72747469746F72206C6163696E69612E6C566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B205072616573656E74206E69736C206C616375732C1472757472756D20616320636F6E6775652065752C1A7363656C657269737175652064696374756D206C6967756C612E124675736365206E65717565206D617373612C1E76697665727261207365642073757363697069742073697420616D65742C11706F737565726520617420697073756D2E4C5072616573656E74207363656C65726973717565206C696265726F20696E206E69626820677261766964612073656420636F6E736563746574757220747572706973207665686963756C612E1346757363652073617069656E2076656C69742C18766573746962756C756D206120616C697175616D20696E2C14626962656E64756D2076656C206D61757269732E1850686173656C6C757320696420706F7274612065726F732E1941656E65616E206E6563206C6967756C61207475727069732C1375742074696E636964756E742076656C69742E184372617320636F6D6D6F646F20636F6E677565206475692C1E696420677261766964612066656C697320696163756C697320656765742E2C4E756E6320766172697573206469616D206120707572757320656C656D656E74756D20656C656966656E642E4353656420766976657272612076656C69742073697420616D657420616E746520756C747269636573206E6563207661726975732074656C6C757320616C697175616D2E1653757370656E646973736520616E7465206E756E632C187375736369706974206E656320736F64616C65732075742C0F72686F6E637573206120616E74652E124E756C6C61207269737573206E657175652C1A6665726D656E74756D20696E207068617265747261206E65632C16636F6D6D6F646F2072686F6E637573206E756C6C612E1141656E65616E206665726D656E74756D2C1D6C6967756C61206E656320737573636970697420756C7472696365732C1B6C6967756C61206E657175652072686F6E6375732070757275732C1B61206D6F6C6C69732073656D207075727573207574206E756E632E214E756E6320616C697175616D20756C6C616D636F72706572206C6163696E69612E14447569732069642076656C6974206C616375732E204372617320636F6E76616C6C697320736F64616C6573207665686963756C612E1150726F696E206E696268206E756C6C612C20626962656E64756D207365642070656C6C656E7465737175652076697461652C13626C616E646974207669746165207175616D2E184375726162697475722065742065726F732076656C69742C146E6F6E207665686963756C612073617069656E2E3153757370656E6469737365206575206D69206E6563206D657475732070656C6C656E74657371756520656765737461732E1943757261626974757220612074656C6C75732070757275732C0F61632064696374756D206E6973692E12446F6E6563206469616D206C6967756C612C1B74696E636964756E7420757420706F73756572652076697461652C12636F6E736571756174206174206E6973692E5D50656C6C656E746573717565206861626974616E74206D6F726269207472697374697175652073656E6563747573206574206E65747573206574206D616C6573756164612066616D65732061632074757270697320656765737461732E2E4E756C6C6120617563746F72206E69736920736564206D657475732074696E636964756E7420626C616E6469742E0F4E756C6C6120666163696C6973692E3350726F696E20766F6C7574706174206D69207361676974746973207269737573206672696E67696C6C6120666575676961742E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E11566976616D75732073616769747469732C1A6D6574757320657420736167697474697320736F64616C65732C1B6D61737361206C656F20656C656D656E74756D2073617069656E2C226964207375736369706974206C6563747573206C6967756C61206163206F7263692E204E756C6C61206469676E697373696D20747269737469717565206A7573746F2C2576656C20766F6C7574706174207475727069732072757472756D20636F6E76616C6C69732E0F536564206469616D206C6F72656D2C19756C74726963696573206120756C747269636965732065752C17747269737469717565207669746165207475727069732E32446F6E65632070656C6C656E74657371756520636F6E73656374657475722074656C6C7573206E6F6E20736F64616C65732E124E616D20696420646F6C6F7220617263752E1750656C6C656E746573717565206E69736C2065726F732C1B67726176696461206E6F6E20616C697175616D20617563746F722C13656C656D656E74756D2065742066656C69732E1E5175697371756520696E2070656C6C656E746573717565206D657475732E3B4D6F72626920736564206C6F72656D206E6F6E206D61676E61206672696E67696C6C612065676573746173207669746165207574206E756C6C612E2A41656E65616E2076656C20616E7465206964206E6962682074696E636964756E7420666575676961742E0E5574206469616D206C6F72656D2C1873656D7065722076656C20656C656D656E74756D2061632C176661756369627573207375736369706974206E756E632E22557420756C7472696365732070686172657472612070656C6C656E7465737175652E0E536564206D616C6573756164612C1C6E756C6C61207669746165206C75637475732073757363697069742C1965737420697073756D2076697665727261206C696265726F2C247175697320756C74726963657320617567756520616E746520656765742076656C69742E1341656E65616E206E696268206C696265726F2C1B656C656D656E74756D2065676574206C6163696E6961206E6F6E2C11666175636962757320757420617263752E1453757370656E646973736520706F74656E74692E1450686173656C6C7573206E69736C20616E74652C1966617563696275732073656420616C697175616D206E6F6E2C1670656C6C656E7465737175652076656C206F7263692E0F4E756C6C6120666163696C6973692E2D536564206574206D61757269732073697420616D657420656E696D206D616C65737561646120636F6E6775652E21496E206861632068616269746173736520706C617465612064696374756D73742E3F437261732076697461652076656C6974206120656E696D20736F6C6C696369747564696E20656C656D656E74756D20696E74657264756D2061206469616D2E134E756C6C61207075727573206C65637475732C1C6D617474697320666163696C69736973207072657469756D2065742C16636F6E73656374657475722075742074656C6C75732E304372617320706F7375657265206F64696F2065676574206E696268206C6163696E696120756C6C616D636F727065722E15416C697175616D206120656E696D2070757275732E1F446F6E656320706861726574726120747269737469717565206D61676E612C2273697420616D657420766172697573206572617420666163696C697369732065742E454E756C6C616D206D6F6C6573746965206E69736920657569736D6F64206F72636920756C74726963657320696E206D6F6C6C69732074656C6C757320616363756D73616E2E20557420706C6163657261742068656E64726572697420706F72747469746F722E1A4E756C6C612073697420616D6574207175616D2072697375732E0E4E756E63206469616D206475692C1961646970697363696E67206E6F6E206375727375732065742C10706861726574726120736564206D692E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E174372617320656765742068656E647265726974206D692E30446F6E65632073616769747469732074696E636964756E74206E6973692076656E656E6174697320656765737461732E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E1A53757370656E64697373652061632066656C697320657261742C11757420706C616365726174206E6973692E32437572616269747572206C616F726565742070656C6C656E74657371756520657261742073656420706F72747469746F722E125365642076656C206D65747573206C656F2C106E656320636F6E67756520656E696D2E12566976616D757320656C6974206F7263692C1A756C74726963696573206163207361676974746973206E65632C0E706F7274612061206C6F72656D2E2653757370656E646973736520766F6C757470617420666163696C69736973207475727069732C1F6E6F6E2064617069627573206D69207363656C65726973717565207365642E385574206964206C696265726F2061206C6F72656D2072686F6E63757320736F6C6C696369747564696E206E6F6E206E6F6E206C6F72656D2E13496E746567657220657261742070757275732C196C616F726565742065752070756C76696E617220656765742C16636F6E64696D656E74756D20696E2074656C6C75732E164E616D20657420706C6163657261742070757275732E135072616573656E7420636F6E76616C6C69732C196E69736920696420736F64616C65732070686172657472612C1A6E6962682061756775652074696E636964756E7420656C69742C2773697420616D65742074656D706F72206A7573746F206F72636920717569732073617069656E2E3A4372617320696D70657264696574206C6967756C6120756C74726963696573206C6163757320766573746962756C756D206D6F6C65737469652E194675736365206E6F6E2073757363697069742066656C69732E3341656E65616E20736564206E69736C2071756973206D69206461706962757320617563746F7220657420656765742073656D2E2B566573746962756C756D206C75637475732065676573746173206469616D206E656320616C69717565742E0E4E756E632073757363697069742C1D7269737573206E6F6E20666163696C697369732073616769747469732C1A6C696265726F20656E696D2072757472756D206D61757269732C26617420756C6C616D636F7270657220746F72746F72206E6962682076656C207475727069732E154D6F72626920736564206E69736C2070757275732E21496E206861632068616269746173736520706C617465612064696374756D73742E0F4E756C6C61206F726369206475692C1C636F6E7365637465747572206964206C616F7265657420717569732C0F6D6F6C6C697320696E206E756E632E2B50686173656C6C757320666175636962757320706F7375657265206D61676E612065752073656D7065722E10437261732073656D207475727069732C166D6174746973206E6F6E207072657469756D2061742C13666575676961742065676574206C6F72656D2E154D617572697320696E206F726369206E756C6C612C1573656420636F6E7365637465747572206469616D2E1750656C6C656E746573717565206469676E697373696D2C1C657261742064696374756D206772617669646120766976657272612C176573742065726174206C616F72656574206D617373612C17617420706F7274612073656D206D692061207175616D2E2A4D617572697320756C7472696369657320766976657272612076656C697420696E20706F73756572652E1A566573746962756C756D206574206C6967756C612065726F732E1B50656C6C656E746573717565206575206F726369206E756C6C612E1250726F696E206C656374757320656E696D2C176D6F6C657374696520612073616769747469732069642C16656C656D656E74756D207175697320746F72746F722E3D4D6175726973206574206C6967756C61207574206C6967756C61206567657374617320706F72747469746F72206E656320717569732073617069656E2E1044756973206E69626820646F6C6F722C1C7068617265747261206575206D6F6C6C69732073697420616D65742C1174656D70757320757420746F72746F722E2F50656C6C656E74657371756520747269737469717565206D6174746973206E69736C2073656420636F6D6D6F646F2E165072616573656E74207574206D6175726973206D692E12446F6E6563206C656374757320617263752C1F766573746962756C756D2074656D70757320636F6E76616C6C697320696E2C16766573746962756C756D20656765742072697375732E1E437261732073697420616D657420747269737469717565206D657475732E2E467573636520736F64616C65732076656C697420657420707572757320696D706572646965742073656D7065722E14446F6E65632061206E6962682074656C6C75732C117574207068617265747261206F64696F2E1350726F696E2074656C6C7573206E756C6C612C216D616C65737561646120766974616520616C697175657420626962656E64756D2C11636F6E677565207574207475727069732E1A566573746962756C756D2076656C20707572757320656C69742C1673697420616D65742074656D7075732070757275732E115072616573656E74206D6920657261742C1B696D7065726469657420617420766F6C757470617420656765742C106C616F7265657420612070757275732E2343757261626974757220756C7472696369657320756C74726963696573206E6973692C19657420766172697573206E69736920617563746F7220696E2E47437572616269747572207665686963756C6120656C6974206574206572617420696D7065726469657420766974616520657569736D6F64206469616D20636F6E76616C6C69732E1A4D6F726269206D6F6C6C69732073656D7065722072697375732C1D616320766172697573207475727069732066617563696275732065742E3E4E756C6C6120636F6D6D6F646F206C6967756C61206E6563206E756C6C6120626C616E6469742075742072686F6E637573207175616D2073656D7065722E134D61757269732061726375206C6967756C612C17646170696275732076656C20626C616E6469742069642C116F726E617265207175697320617263752E1250726F696E2075726E61206C6967756C612C1D64696374756D20616C69717565742076656E656E61746973206E65632C107068617265747261206574206573742E14446F6E6563206C696265726F206C65637475732C1E7363656C657269737175652065676574207068617265747261206E65632C147363656C65726973717565207574207175616D2E12496E7465676572206D6920746F72746F722C196D61747469732061206C75637475732073697420616D65742C12636F6E7365717561742071756973206D692E345072616573656E7420696E206F7263692061206E69626820637572737573206D616C6573756164612065752061206D61676E612E144E616D206174206C6967756C612070757275732C17636F6E73657175617420656C656966656E64206475692E34446F6E6563207472697374697175652076656C69742069642074757270697320756C74726963696573206665726D656E74756D2E33496E2075742073656D206575207175616D20766F6C757470617420636F6E73657175617420757420656765742061756775652E2F4E616D20706F7375657265206E69736C206174206C6563747573206C616F72656574207363656C657269737175652E2E566976616D7573206E6563206F64696F2074656D707573206E756C6C61206567657374617320696163756C69732E2C53656420736F6C6C696369747564696E20706F73756572652073617069656E20616320696E74657264756D2E43436C61737320617074656E742074616369746920736F63696F737175206164206C69746F726120746F727175656E742070657220636F6E75626961206E6F737472612C1770657220696E636570746F732068696D656E61656F732E105175697371756520616C697175616D2C1B6D61737361207574207665686963756C6120706C6163657261742C146475692064756920666575676961742073656D2C2173656420626C616E6469742073656D206175677565206E6F6E2073617069656E2E1A4E756C6C612073697420616D6574206A7573746F206469616D2E41416C697175616D2065676574206A7573746F207669746165206C6F72656D20636F6E64696D656E74756D20696D7065726469657420612065676574206E6973692E11457469616D207175616D206E756C6C612C1B766F6C757470617420616320636F6E73657175617420717569732C11766F6C7574706174206163206F7263692E214E616D206665726D656E74756D2068656E6472657269742070756C76696E61722E16416C697175616D206572617420766F6C75747061742E1E4D61757269732073697420616D65742076697665727261206A7573746F2E1E43726173206567657420736F6C6C696369747564696E207475727069732E1E446F6E656320636F6E677565207072657469756D2073757363697069742E264E756E632074656D7075732074656D706F72206175677565207669746165206D61747469732E2A41656E65616E2076656C206C65637475732061206E657175652066657567696174207072657469756D2E3650726F696E2061632070757275732061206E6973692074696E636964756E7420617563746F72206E6F6E2065676574206A7573746F2E18446F6E656320657420626962656E64756D20697073756D2E0F4E756C6C6120666163696C6973692E234E616D2070656C6C656E746573717565206C6163696E6961206665726D656E74756D2E174E756C6C61206575206C6967756C61207475727069732C0D6120637572737573206475692E234E756C6C616D20706F72747469746F72206D6F6C657374696520626962656E64756D2E3141656E65616E20696163756C6973206D6920756C747269636573206C6F72656D207669766572726120677261766964612E1450726F696E20746F72746F72206D61757269732C1B6665726D656E74756D207669746165207072657469756D2061632C13706F737565726520717569732061756775652E0D4372617320736F64616C65732C2466656C69732073697420616D657420736F6C6C696369747564696E20657569736D6F642C196C6F72656D20647569206665726D656E74756D206E69736C2C1D6574207665686963756C61207175616D20656E696D206574206573742E3D457469616D20616320646F6C6F72207365642061756775652064696374756D20756C6C616D636F72706572206E6F6E206D6F6C6573746965206C656F2E124D6F7262692074656C6C757320617263752C24696D70657264696574206567657420636F6E64696D656E74756D2073697420616D65742C18636F6E76616C6C697320736F64616C6573206D617373612E2555742069642075726E61206575207175616D20666163696C697369732072686F6E6375732E1243757261626974757220657569736D6F642C1A6175677565207574206672696E67696C6C6120636F6E6775652C1B6F64696F20726973757320766573746962756C756D20656E696D2C20616320706F727461206175677565206C61637573207175697320646F6C6F722E0D53656420647569206F7263692C1B72757472756D20636F6D6D6F646F2064617069627573207365642C146665726D656E74756D20696E206C696265726F2E1741656E65616E2069642070757275732073617069656E2C10696E2066657567696174206F64696F2E2C4E756C6C616D20696E74657264756D207375736369706974206F64696F2065676574207665686963756C612E125072616573656E7420696E74657264756D2C2273617069656E20766974616520636F6E73656374657475722070756C76696E61722C1A6D61757269732066656C697320696163756C6973206E6973692C2576697461652073616769747469732073617069656E2076656C6974206163206E657175652E3A4D6F72626920612070757275732076656C2076656C697420766573746962756C756D20756C6C616D636F7270657220612076656C206469616D2E2A4E616D206E656320647569206E6F6E2074656C6C75732074696E636964756E74206D6F6C65737469652E274E616D206C6163696E696120696163756C6973206F72636920656765742070756C76696E61722E19457469616D20616320666163696C69736973206D617373612E1B4E756C6C612073697420616D6574206C7563747573206F64696F2E1A41656E65616E206567657420747572706973207475727069732C1565676574206665726D656E74756D206E657175652E1950686173656C6C7573206964206C6563747573206E6973692E2B53757370656E646973736520747269737469717565207363656C657269737175652073757363697069742E16496E74656765722076656C206E69626820656C69742E0F447569732073656D206A7573746F2C1B626962656E64756D2076656C2068656E6472657269742076656C2C12637572737573206E6F6E207475727069732E21496E206861632068616269746173736520706C617465612064696374756D73742E3B566573746962756C756D206E6563207175616D206120646F6C6F7220636F6E736571756174206665726D656E74756D2076656C20696E206C656F2E16446F6E65632076656C206C6F72656D2072697375732C137175697320626C616E6469742066656C69732E19536564206D6F6C6C6973206F726E617265207475727069732C1F7669746165206D6174746973207269737573206D6F6C6C697320656765742E215072616573656E7420656C656966656E6420696163756C6973206D61757269732E214D616563656E617320706F7274612074696E636964756E7420656765737461732E13517569737175652061742073656D206C656F2E2C446F6E6563206E6F6E20656E696D2076656C2072697375732073757363697069742076756C7075746174652E344E616D2061206469616D20706C61636572617420647569206665756769617420636F6D6D6F646F206174206120746F72746F722E11467573636520656C69742061756775652C1D636F6E6775652073697420616D657420696D706572646965742069642C117361676974746973206174207175616D2E35496E746567657220766573746962756C756D2066656C69732076656C206E756E6320636F6E73657175617420626962656E64756D2E204375726162697475722072686F6E637573206C6163696E69612072697375732C2873697420616D65742073656D7065722075726E6120656C656D656E74756D207665686963756C612E164E756C6C612076656C20616E7465206C696265726F2E3A4D616563656E617320736564206F726369206E6F6E2065726F732076656E656E617469732064617069627573206E6563206E6F6E206E6962682E16416C697175616D206572617420766F6C75747061742E275175697371756520616C697175657420617563746F72206E756C6C612061742073656D7065722E2141656E65616E20636F6E6775652070656C6C656E74657371756520697073756D2E2F416C697175616D20696420616E74652076656C2065726F7320666163696C6973697320636F6E73656374657475722E3641656E65616E2061206D6920696E206F72636920626962656E64756D206D617474697320657569736D6F64206567657420656C69742E33496E2073656420656E696D206574207175616D2074696E636964756E742073656D70657220696E20717569732061756775652E2B50726F696E207365642073617069656E206964206D61676E6120637572737573207472697374697175652E154E756E632061632073617069656E2061756775652E36416C697175616D2074656D707573206C656F20756C74726963696573206D61676E6120696E74657264756D2074696E636964756E742E2A4E756C6C6120706F72747469746F722067726176696461206C6967756C6120696E20616C69717565742E3D44756973206D617474697320647569206E6F6E2073656D20766573746962756C756D20616320736167697474697320656E696D206D6F6C65737469652E17517569737175652073656420647569206C6967756C612E294E756C6C616D20657569736D6F6420616C697175657420656E696D206964207472697374697175652E36437572616269747572206E6563206C656374757320636F6E7365637465747572206E69736920637572737573207665686963756C612E224E756C6C61206672696E67696C6C6120766573746962756C756D2072757472756D2E4551756973717565206D616C657375616461206E696268207669746165207175616D2066657567696174206E656320706C6163657261742065726F7320756C7472696365732E3F50656C6C656E74657371756520696420647569206964206E69736C20656C656966656E6420696163756C697320706F737565726520757420746F72746F722E17496E74656765722065676574206475692072697375732C0F657520617563746F72207175616D2E33416C697175616D2073697420616D6574206F72636920706C616365726174206E756E6320626C616E6469742064696374756D2E1D566573746962756C756D206E656320696E74657264756D206E6973692E1150726F696E207075727573206E6973692C1E7669766572726120756C7472696369657320616363756D73616E2061632C146469676E697373696D206E6563206E756C6C612E1A446F6E65632073697420616D657420646F6C6F72206E69736C2C1361207363656C6572697371756520656C69742E1950686173656C6C75732075742061726375206C65637475732E205365642073656D70657220646170696275732070656C6C656E7465737175652E154E616D2076697461652075726E61206E756C6C612C1076656C20617563746F72206F7263692E135365642076656C206D61676E61206E6962682E2D437572616269747572207072657469756D20696D70657264696574206F72636920657520756C7472696365732E30566976616D75732071756973206D65747573207068617265747261206E756E6320657569736D6F642072757472756D2E114675736365206D61737361206E6962682C1876656E656E6174697320736564206F726E6172652061742C13706F737565726520736564206D61757269732E0F53656420746F72746F72206573742C1E74656D706F722076656C206665726D656E74756D2073697420616D65742C116C616F72656574206174206E756C6C612E1650726F696E2065752064696374756D206C616375732E1850726F696E206E6563206D6174746973206C65637475732E1D416C697175616D2073656D7065722073656D7065722074656C6C75732C1E616320656C656966656E64206F72636920616363756D73616E206E6F6E2E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E1E50686173656C6C757320766974616520746F72746F72206D61757269732C127175697320626C616E646974206E6973692E19446F6E656320717569732076697665727261206C616375732E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E134D616563656E617320696D706572646965742C196C656F2065752074696E636964756E7420677261766964612C1765726F732073656D206C6163696E69612072697375732C2476697461652076697665727261206D61737361206175677565206567657420616E74652E3A53757370656E646973736520756C6C616D636F72706572206C616375732075742065737420626962656E64756D20636F6E64696D656E74756D2E12496E20656765742073656D706572206D692E175072616573656E742074656C6C7573207475727069732C1B6D6F6C6C69732073697420616D657420666575676961742061742C136772617669646120656765742061756775652E15536564206163206C6163696E6961206D617373612E1A536564207669746165206D616C657375616461206C6F72656D2E35566976616D75732070656C6C656E7465737175652075726E6120656765742073656D207665686963756C612070686172657472612E394375726162697475722074726973746971756520746F72746F722065676574206D61757269732061646970697363696E672073656D7065722E2F536564206575206E6973692076756C707574617465206172637520656C656D656E74756D20696D706572646965742E2D4D6F726269206772617669646120657374206E6F6E20616E746520616363756D73616E20626962656E64756D2E1543726173206574206C65637475732061756775652C0F73656420636F6E677565206C656F2E105072616573656E742073656D7065722C1A75726E61206E656320706861726574726120616C69717565742C1C617567756520707572757320747269737469717565206E657175652C246567657420636F6E76616C6C6973206C696265726F2074757270697320736564206D692E1253656420746F72746F722074656C6C75732C1D74656D70757320616320756C6C616D636F727065722074656D7075732C13636F6E736563746574757220696E206475692E1C4372617320616C697175616D2064617069627573207475727069732C1F757420756C747269636573206C6967756C612076756C70757461746520612E1C446F6E6563206D6F6C657374696520706F72747469746F72206D692C21706C6163657261742072757472756D206E6571756520736F64616C65732069642E1746757363652071756973206A7573746F206C616375732E134475697320656765742073656D206E6973692C15616320636F6E73656374657475722061756775652E47566573746962756C756D206C75637475732065726174206E6F6E206C6163757320636F6D6D6F646F2076656C207472697374697175652064756920636F6E73656374657475722E134D61757269732074656C6C7573206E69736C2C1A6D6F6C6573746965206567657420706F7274612076697461652C1373616769747469732073656420646F6C6F722E43436C61737320617074656E742074616369746920736F63696F737175206164206C69746F726120746F727175656E742070657220636F6E75626961206E6F737472612C1770657220696E636570746F732068696D656E61656F732E4350656C6C656E7465737175652076656C206F64696F20656765742073656D20616C6971756574207363656C657269737175652065676574207669746165206E756E632E2146757363652061646970697363696E67207361676974746973206C696265726F2C207175697320706C616365726174206475692070756C76696E617220656765742E114372617320636F6E64696D656E74756D2C22617263752074656D706F7220666163696C6973697320636F6E64696D656E74756D2C1A65726F73206C656F20756C6C616D636F727065722075726E612C2376656C2074696E636964756E742076656C697420656E696D20656765742065726F732E174D61757269732065742073656D706572206E756C6C612E4B50726F696E206D6F6C6C69732073617069656E206E656320656E696D206567657374617320616C697175616D20766573746962756C756D20636F6E73656374657475722074656C6C75732E2841656E65616E207574206E69736C2075742073617069656E20696163756C697320617563746F722E1A50656C6C656E74657371756520646F6C6F722074656C6C75732C18736F64616C657320657520656C656D656E74756D2075742C14756C6C616D636F72706572206174206E756E632E20566573746962756C756D20636F6E76616C6C6973206F726E617265206C656F2C216163206C75637475732065726F73206469676E697373696D20636F6D6D6F646F2E3453757370656E646973736520617420656C69742073697420616D65742075726E6120706C616365726174206C6F626F727469732E1D446F6E6563206665726D656E74756D206C696265726F206C616375732C12696E20706C6163657261742072697375732E164E756C6C616D20757420656E696D2073617069656E2C136E656320626C616E646974206C696265726F2E3D446F6E656320696E206E696268206665726D656E74756D206C61637573206461706962757320626962656E64756D2076656C206163207475727069732E0E4D6F7262692072686F6E6375732C1F7075727573207068617265747261207361676974746973206D6F6C6C69732C1C6C656374757320616E746520696D70657264696574206D61676E612C21696E20766573746962756C756D2075726E61206E756C6C6120616320657261742E1E447569732064696374756D20657569736D6F642076756C7075746174652E114D6F726269206F64696F2061756775652C17756C74726963657320612067726176696461207365642C15656C656D656E74756D20717569732066656C69732E314E616D207363656C657269737175652075726E61206964206A7573746F206469676E697373696D20706C6163657261742E2853656420636F6E76616C6C6973206C6F626F72746973206F7263692076656C20656765737461732E34566573746962756C756D20756C747269636965732066656C697320696E206C696265726F20696163756C6973207661726975732E16416C697175616D206572617420766F6C75747061742E2D50686173656C6C7573206163207075727573206E6F6E20656C6974206D616C65737561646120617563746F722E26446F6E65632075742073656D20696420656E696D20766F6C757470617420706F73756572652E2E446F6E6563206D616C6573756164612065737420736564206F64696F206F726E617265206469676E697373696D2E16437261732076697461652075726E61206D617373612C13757420666163696C69736973206C6F72656D2E1A496E2072757472756D20696E74657264756D206C65637475732C2E6E6563207363656C657269737175652074656C6C757320636F6E7365717561742070656C6C656E7465737175652E1850726F696E206575206D6F6C6573746965206E657175652E18496E74656765722073656420656E696D206C65637475732C10616320616C69717565742075726E612E2950686173656C6C757320736F64616C657320736F6C6C696369747564696E20636F6E7365717561742E1A5072616573656E7420766974616520617567756520616E74652E185365642069642070656C6C656E746573717565206C656F2E2E496E7465676572207665686963756C6120656E696D20717569732064756920616C697175657420636F6E6775652E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E1243757261626974757220677261766964612C1C7175616D2073656420656C656D656E74756D20656C656966656E642C1776656C6974206E756C6C612064696374756D206573742C217574206D616C657375616461206175677565206C6967756C61206964206475692E224D616563656E617320626962656E64756D2074726973746971756520697073756D2C1C6575206772617669646120656C697420636F6D6D6F646F207365642E134675736365206D6574757320746F72746F722C17616363756D73616E20616320666575676961742069642C14766F6C75747061742073656420746F72746F722E31566976616D75732074696E636964756E74206D69206E6F6E20707572757320766F6C757470617420756C7472696365732E2F5072616573656E742065676574206D657475732065752073656D2074656D7075732070656C6C656E7465737175652E24457469616D20666175636962757320736F6C6C696369747564696E20646170696275732E33446F6E65632074656D706F72206D617373612073697420616D6574206D6920706F737565726520756C6C616D636F727065722E2E566573746962756C756D20616320646F6C6F722075742075726E6120756C74726963657320766F6C75747061742E13496E746567657220697073756D2075726E612C1A636F6E6775652074656D707573207665686963756C612065752C17736F64616C65732073697420616D65742076656C69742E3050726F696E2061646970697363696E672075726E612075742065726F7320736F64616C65732076756C7075746174652E254E616D20666175636962757320617563746F72206A7573746F206E6F6E206C75637475732E2E53757370656E646973736520616320617567756520736564206175677565207669766572726120636F6E6775652E104E616D206C6967756C6120657261742C18656C656966656E642065752073656D70657220656765742C167068617265747261206C616F72656574206E756E632E3150686173656C6C75732074656D706F722065726F73206120616E74652074696E636964756E7420756C747269636965732E3646757363652073697420616D65742065737420747269737469717565206C61637573207068617265747261207472697374697175652E1650656C6C656E746573717565206F726369206573742C1C7472697374697175652071756973207472697374697175652069642C13696D70657264696574206174206E657175652E19566976616D75732075742072757472756D206D61757269732E1C4E756C6C616D2073697420616D6574207175616D207475727069732C127574206672696E67696C6C6120656E696D2E1D4475697320736167697474697320616363756D73616E2072697375732E36496E20656765742072697375732076656C206D6175726973207068617265747261206C616F72656574206E656320696420617263752E0C43726173206D6F6C6C69732C1B6D6175726973206574207361676974746973206C616F726565742C17657374206475692068656E6472657269742075726E612C2061742074656D706F72206E756C6C61206D617572697320736564206F64696F2E1843726173207365642068656E647265726974206F7263692E134375726162697475722065726F732073656D2C187072657469756D2076656C20696163756C69732076656C2C11616363756D73616E20696E20656E696D2E0D50726F696E206D61747469732C216C6967756C612074696E636964756E742073616769747469732072757472756D2C1C6D61757269732064756920636F6E736563746574757220657261742C2161632068656E647265726974207175616D2072697375732061742070757275732E324372617320616320616E7465206964206C696265726F20636F6E6775652073656D70657220617420696420746F72746F722E3C43726173206E6F6E2072697375732073697420616D6574206572617420706F7274612064696374756D2073697420616D657420696E206A7573746F2E1950686173656C6C75732076656C206A7573746F206F64696F2E2C446F6E6563207363656C6572697371756520766172697573206C6967756C6120696420626962656E64756D2E154E756C6C616D20747572706973206C6967756C612C166672696E67696C6C612061632073656D70657220612C11696163756C697320612073617069656E2E42566573746962756C756D20696E206573742076656E656E61746973206D65747573206D616C657375616461206C6163696E69612071756973206964206A7573746F2E1F566976616D7573206661756369627573206C75637475732073656D7065722E1F457469616D206D617474697320756C6C616D636F72706572206D61676E612C2873697420616D657420666175636962757320657374206D616C65737561646120657569736D6F642E1144756973206C696265726F206E69736C2C166D6F6C6573746965206120696163756C697320696E2C12636F6E76616C6C6973206575206E756E632E434E756C6C616D2073697420616D6574206C6F72656D20617420707572757320756C6C616D636F727065722072757472756D2073697420616D6574206575206F7263692E32496E2076656C206E756C6C6120696E20656C697420636F6E76616C6C697320766172697573206E65632061206C616375732E124E756E63206163206E756E63206E69736C2C177175697320636F6E64696D656E74756D2072697375732E26446F6E65632074656D70757320666163696C69736973206F64696F2061632072757472756D2E18457469616D20736564206D6F6C6C697320746F72746F722E23536564206163206C6F72656D2061742075726E61206C6163696E696120706F7274612E4543757261626974757220766573746962756C756D206D65747573206575206175677565207669766572726120657420616363756D73616E206175677565206F726E6172652E1D50686173656C6C7573206D6F6C6C6973206D617572697320657261742C13757420766573746962756C756D20617263752E225072616573656E74207072657469756D20636F6E64696D656E74756D206E69736C2C1969642072757472756D207175616D206D61747469732061632E144E756E632076697461652061726375206C656F2C1573697420616D6574207072657469756D206475692E1A4D6175726973207665686963756C612076656C69742073656D2C176C6F626F72746973206375727375732074656C6C75732E1B557420656C656966656E6420646170696275732074656C6C75732C1C696E20657569736D6F6420697073756D20646170696275732061742E2B4E756C6C6120636F6E76616C6C697320626C616E646974206E756E632071756973206C6F626F727469732E205072616573656E7420706C616365726174206D6174746973206D61757269732C1E736564206C7563747573206E69736920756C747269636965732076656C2E26496E20747269737469717565206C616F7265657420746F72746F722073656420706F7274612E4941656E65616E2068656E647265726974206F726369206E6F6E2065737420766976657272612073697420616D657420626C616E646974206C6F72656D207363656C657269737175652E154E756C6C6120696E206E756C6C61206C616375732E1A50656C6C656E74657371756520616320656E696D207175616D2C11696420616C6971756574206A7573746F2E1753757370656E6469737365206469616D206D657475732C18706C61636572617420657520766F6C75747061742075742C11657569736D6F64206E6F6E20657261742E4050686173656C6C7573206C7563747573206F64696F2076656C206F72636920646170696275732073656420766172697573206C6163757320616C697175616D2E265365642074696E636964756E742066657567696174206469616D2076656C206F726E6172652E1A4675736365207175697320766F6C7574706174206D61676E612E3D43726173206D616C65737561646120656C6974206174206C656F206672696E67696C6C6120696D7065726469657420657420736564206C696265726F2E204D6F7262692073697420616D65742074696E636964756E74206C6967756C612E1455742069642074656D7075732074656C6C75732E1C566573746962756C756D2069642072686F6E6375732072697375732E265574206E6F6E206D61676E612061206C6F72656D2073656D7065722068656E6472657269742E1B437261732076756C707574617465206375727375732065726F732C2B73697420616D65742074696E636964756E74206C6967756C612072757472756D206672696E67696C6C612E1143726173206D6175726973206E69736C2C1A6672696E67696C6C612073656420656765737461732076656C2C14616363756D73616E206E6F6E206D61757269732E10496E746567657220636F6D6D6F646F2C2174656C6C757320636F6E736571756174206D6F6C6C69732070756C76696E61722C1764756920656C697420666175636962757320617263752C1F696E206C6163696E6961206E697369206D692065676574206C6967756C612E294E756C6C61206D616C6573756164612073656D70657220746F72746F72206575206C6163696E69612E19566573746962756C756D206174207661726975732073656D2E33566976616D757320706F7375657265206C6967756C612061632074656C6C7573206661756369627573206C6F626F727469732E2F4D616563656E6173207361676974746973206172637520696E206F64696F20736F64616C657320616C697175616D2E164D61757269732061742066656C69732061756775652E20446F6E65632076656E656E6174697320696E74657264756D206375727375732E14566976616D757320616E7465206D61757269732C1F6469676E697373696D2073697420616D6574206C616F726565742076656C2C127665686963756C612076656C20617263752E3453656420666163696C69736973206E756C6C612073697420616D6574206D6173736120706F73756572652066617563696275732E33416C697175616D20656C656D656E74756D20656C656D656E74756D2066656C6973206C6163696E6961207665686963756C612E154D616563656E6173206D65747573206A7573746F2C17766976657272612065742070756C76696E61722075742C1376656E656E617469732061206D61757269732E174475697320657520756C7472696369657320656C69742E20446F6E6563206772617669646120636F6E64696D656E74756D206D61676E612C26736F64616C657320656C656966656E64207269737573206665726D656E74756D20656765742E0F4E756E6320656C69742075726E612C21656C656D656E74756D20696E2061646970697363696E672073697420616D65742C0E63757273757320696E206475692E4243726173206174207269737573206E6F6E206C6967756C61207363656C65726973717565207363656C657269737175652064696374756D20736564206C6F72656D2E425365642073656D706572206C6F72656D206964206D61676E6120636F6E73657175617420757420756C74726963696573206E756E6320636F6E73656374657475722E1553757370656E6469737365207665686963756C612C1C657261742073697420616D65742074656D706F7220617563746F722C1A617567756520726973757320696E74657264756D206E756E632C2565752061646970697363696E6720746F72746F72206E6973692074656D7075732073656D2E32457469616D206D616C65737561646120697073756D207574206C656374757320756C7472696365732066617563696275732E184375726162697475722074656C6C75732074656C6C75732C197072657469756D2076656C20616363756D73616E206E65632C12656C656966656E64206E656320656C69742E1C437261732073656D706572206665726D656E74756D20697073756D2C2673697420616D65742067726176696461206C65637475732068656E647265726974206E6F6E2E444E756C6C616D207072657469756D2076656C69742076656C20646F6C6F7220737573636970697420696E20626C616E646974206E697369207363656C657269737175652E35437572616269747572207669766572726120697073756D207669746165206F64696F20706C6163657261742070756C76696E61722E28496E2063757273757320656C69742069642074757270697320616C697175616D206F726E6172652E45446F6E656320636F6E73657175617420747572706973206665756769617420656C69742074656D706F7220736564206C6F626F72746973206172637520616C697175616D2E224375726162697475722073697420616D65742073616769747469732070757275732E354375726162697475722074696E636964756E74206172637520736564206F64696F20737573636970697420656C656D656E74756D2E35536564207574206E696268206120616E74652061646970697363696E6720617563746F7220656C656966656E642061206E6973692E2850726F696E20736F6C6C696369747564696E20736F6C6C696369747564696E20626C616E6469742E1C557420636F6D6D6F646F20617563746F7220696D706572646965742E0F467573636520656C656966656E642C206E65717565206E6F6E20756C6C616D636F7270657220656C656D656E74756D2C1A66656C697320697073756D20637572737573206C696265726F2C20657420626962656E64756D206175677565206D6920736564206C6967756C612E2C43757261626974757220736F64616C657320657569736D6F64206469616D2076697461652064696374756D2E144D616563656E617320766573746962756C756D2C1C6D69206E6F6E20636F6D6D6F646F20736F6C6C696369747564696E2C186D61737361207175616D20696163756C6973206F64696F2C2776656C207472697374697175652074656C6C7573206E69626820766974616520746F72746F722E3D566573746962756C756D207574206F64696F2065676574206E69736920756C7472696369657320617563746F72206163207669746165206C6F72656D2E12536564206575206C6F72656D20656C69742E16416C697175616D206572617420766F6C75747061742E2253757370656E6469737365206665726D656E74756D206E756C6C61206C6F72656D2E304D6F72626920656C656966656E6420646F6C6F722061206C6967756C6120666575676961742076756C7075746174652E1E437572616269747572206C616F7265657420617563746F72207175616D2C1D61742074696E636964756E74206D657475732063757273757320696E2E1F4E616D20616C697175616D20766F6C757470617420706F72747469746F722E1641656E65616E206964206375727375732065726F732E1A566573746962756C756D2076656C206E65717565206469616D2C116E6F6E20706F7375657265207175616D2E1351756973717565206C656F2073617069656E2C1A6665726D656E74756D207175697320636F6E6775652076656C2C156672696E67696C6C6120766974616520617263752E304D61757269732073656D70657220747572706973206163206C696265726F20766F6C757470617420646170696275732E0F44756973206E69736920656E696D2C18666175636962757320656765742074656D7075732061742C15756C74726963696573206E65632074656C6C75732E1443726173206964206C6563747573206E69736C2C0F696420637572737573206F7263692E12457469616D2073617069656E206E69736C2C1D6D6F6C6C69732073697420616D657420766F6C75747061742076656C2C12766F6C7574706174206E6563206E6973692E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E3A4E756E63206163207075727573206E6563206C656F20766573746962756C756D20706F72747469746F72206120626C616E64697420617263752E1850726F696E206E65632072686F6E637573206E657175652E2C50656C6C656E74657371756520766573746962756C756D20706861726574726120766573746962756C756D2E27536564206D6F6C657374696520656C697420657520647569206D6F6C6C6973207661726975732E1A457469616D20706F72747469746F722064696374756D206D692E2A4D616563656E6173207375736369706974207361676974746973206E756E63206E656320706F7274612E3153656420657420617263752073697420616D65742073617069656E20636F6E76616C6C697320766573746962756C756D2E1F43726173206567657374617320616363756D73616E20616363756D73616E2E345175697371756520616363756D73616E20746F72746F722065742065726174206D617474697320736F6C6C696369747564696E2E3F536564206D6F6C65737469652074757270697320656765742073656D2074696E636964756E74206E656320636F6E76616C6C6973206D6920636F6E6775652E17457469616D2061632065676573746173206C6F72656D2E3250726F696E20736F6C6C696369747564696E20657374206E65632073656D207665686963756C612074696E636964756E742E2950726F696E2071756973207075727573207574206E69736C206461706962757320657569736D6F642E43436C61737320617074656E742074616369746920736F63696F737175206164206C69746F726120746F727175656E742070657220636F6E75626961206E6F737472612C1770657220696E636570746F732068696D656E61656F732E104E756E63206C6163757320616E74652C1672757472756D20736564206C6163696E69612075742C136665726D656E74756D2069642070757275732E0F4E756C6C6120666163696C6973692E3253757370656E646973736520736564206C6563747573206E6563206C696265726F206C6163696E696120616C697175616D2E1453656420696420697073756D2073617069656E2C1069642076617269757320697073756D2E17566573746962756C756D206174206E756C6C61206D692C136567657420616363756D73616E206E6962682E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E20446F6E6563206C6F626F7274697320756C74726963657320696163756C69732E89566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B20446F6E656320706C6163657261742065726F7320616320617263752070656C6C656E746573717565206C616F726565742E265072616573656E742073616769747469732070656C6C656E7465737175652064696374756D2E2B4E756C6C6120696E206D657475732065676574206D657475732076756C7075746174652074656D7075732E204D61757269732064696374756D20656C656D656E74756D20636F6D6D6F646F2E11446F6E65632074656C6C7573206573742C1E737573636970697420696163756C69732076656E656E617469732075742C1970756C76696E61722073697420616D6574207475727069732E2E4D617572697320657420656C6974206E6F6E206D61676E6120636F6E736563746574757220626962656E64756D2E384D61757269732070656C6C656E74657371756520647569206575206C696265726F20636F6E7365637465747572206672696E67696C6C612E1641656E65616E2076656C20697073756D2075726E612E374D616563656E61732070756C76696E617220736F6C6C696369747564696E206D61676E61206D6F6C657374696520696E74657264756D2E5D50656C6C656E746573717565206861626974616E74206D6F726269207472697374697175652073656E6563747573206574206E65747573206574206D616C6573756164612066616D65732061632074757270697320656765737461732E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E3D43756D20736F63696973206E61746F7175652070656E617469627573206574206D61676E6973206469732070617274757269656E74206D6F6E7465732C176E61736365747572207269646963756C7573206D75732E2B4D61757269732076697665727261207072657469756D20746F72746F72206567657420677261766964612E2F496E746567657220636F6D6D6F646F206D6F6C657374696520747572706973207175697320656C656D656E74756D2E1041656E65616E20706C6163657261742C1870757275732065752072686F6E637573206F726E6172652C1B6C6967756C61206E756C6C6120636F6E736571756174206475692C2C7669746165207363656C65726973717565206175677565206D617373612070756C76696E6172207175616D2E3653757370656E646973736520756C7472696369657320756C74726963696573206E657175652073697420616D6574206C75637475732E41557420626962656E64756D206C656F2061206C656374757320626C616E64697420656765742068656E647265726974206C6967756C6120636F6E7365717561742E21496E206861632068616269746173736520706C617465612064696374756D73742E0C437261732074656D706F722C1A65726F73206E6F6E20706F73756572652070756C76696E61722C1D6D61676E61206E69736920636F6E7365637465747572206C616375732C25696E20756C6C616D636F7270657220616E7465206C6563747573206E6F6E206A7573746F2E2F53656420706F72747469746F72206C696265726F2076656C206E69736C20626962656E64756D20646170696275732E5D50656C6C656E746573717565206861626974616E74206D6F726269207472697374697175652073656E6563747573206574206E65747573206574206D616C6573756164612066616D65732061632074757270697320656765737461732E184675736365207669746165206661756369627573206D692E41457469616D20696E206C696265726F206C6F626F72746973206E69736C206C6F626F72746973206C6F626F7274697320626C616E64697420757420646F6C6F722E284D6F72626920617563746F7220696163756C6973206E756C6C612061742076656E656E617469732E114D6F726269206175677565206E6962682C186C6F626F7274697320757420626962656E64756D2069642C127072657469756D206E65632066656C69732E1B4C6F72656D20697073756D20646F6C6F722073697420616D65742C1C636F6E73656374657475722061646970697363696E6720656C69742E124D616563656E6173206D6F6C65737469652C1C616E7465206E656320706F72747469746F7220626962656E64756D2C1B746F72746F7220746F72746F7220616C697175657420617263752C2B73697420616D65742074656D707573206C6967756C61206469616D2073697420616D65742066656C69732E2A50686173656C6C75732073656D70657220706F73756572652061756775652069642072686F6E6375732E124372617320646F6C6F722074656C6C75732C15706F73756572652069642076617269757320696E2C1468656E6472657269742065752074656C6C75732E3350726F696E20766974616520747572706973206E6F6E206E756C6C6120756C6C616D636F72706572207472697374697175652E21496E206861632068616269746173736520706C617465612064696374756D73742E92566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B20467573636520736564206A7573746F2071756973206469616D206C6163696E696120696D70657264696574206E656320657520746F72746F722E324E756C6C616D206174207175616D206E6F6E206D65747573207072657469756D206C756374757320696E206163206475692E14566976616D7573206C696265726F206E6962682C1C61646970697363696E6720657420747269737469717565206E6F6E2C12616363756D73616E20717569732073656D2E36416C697175616D20636F6E64696D656E74756D206C6967756C61206575206C6F72656D20736F64616C6573206665726D656E74756D2E3E53757370656E64697373652061632075726E61207669746165206573742070686172657472612076756C7075746174652061742076656C206C616375732E335365642076656C206C6F72656D20636F6E7365717561742073617069656E20747269737469717565206469676E697373696D2E2A5072616573656E7420736F64616C6573206665726D656E74756D2065737420696420696163756C69732E2653656420736F6C6C696369747564696E20756C6C616D636F727065722073757363697069742E124D6F7262692066656C6973206D617373612C19756C7472696369657320616320756C74726963657320696E2C1A6D616C65737561646120766F6C75747061742073617069656E2E1E566573746962756C756D207669746165206567657374617320617263752E1D53757370656E646973736520616320666163696C69736973206475692E2C536564206C6F626F727469732065726F73206163206573742061646970697363696E67206C616F726565742E114E756C6C616D2075726E6120617263752C1F64617069627573207175697320636F6D6D6F646F2076756C7075746174652C1264696374756D20616C6971756574206D692E384D6F7262692073697420616D657420657261742073697420616D65742076656C69742070656C6C656E74657371756520616C697175616D2E135365642065752061726375207475727069732C1275742076756C707574617465207175616D2E344E756C6C616D20756C74726963657320636F6E64696D656E74756D20746F72746F722071756973207363656C657269737175652E1C4D6F726269206C6163696E6961206C6163696E6961206D657475732C1F76656C20656C656D656E74756D20616E74652070686172657472612061742E404675736365206D6F6C6C6973206D61676E612076656C206E6973692067726176696461207574206672696E67696C6C6120746F72746F722072686F6E6375732E2941656E65616E20616C697175616D20666575676961742073617069656E20616320657569736D6F642E164E756C6C616D206E6F6E2065737420746F72746F722E3250656C6C656E74657371756520766573746962756C756D20706F727461206C6F72656D2075742061646970697363696E672E2B4E756E63206567657420656E696D206574206475692070656C6C656E74657371756520656765737461732E1F53757370656E6469737365206F726E617265206D6F6C6C6973206F64696F2C2774696E636964756E742074696E636964756E742073617069656E2065676573746173206E6F6E2E0F437261732076756C7075746174652C216E6973692073697420616D6574207665686963756C6120666163696C697369732C1D73617069656E206E657175652061646970697363696E67206E6973692C23617420766F6C757470617420657374206E69626820657569736D6F6420697073756D2E234D616563656E6173207363656C6572697371756520656C656D656E74756D206C656F2C1C656765742073656D706572206C696265726F20617563746F7220612E4150726F696E2076656C206F64696F2073697420616D657420746F72746F722061646970697363696E6720666163696C69736973206E6F6E2076656C20656C69742E18416C697175616D2065676574206C656F206C696265726F2C1773697420616D65742076756C707574617465206573742E2C4D616563656E617320757420747572706973206E6563206573742074696E636964756E742072757472756D2E0C4E616D206C616F726565742C1A6A7573746F20696E2064696374756D2074696E636964756E742C186E6973692065737420706F72747469746F72206469616D2C2465676574207072657469756D206C696265726F206573742064696374756D206F64696F2E124675736365206A7573746F2066656C69732C1D74656D706F72207669746165206D61747469732073697420616D65742C157072657469756D2073616769747469732073656D2E124D617572697320726973757320657261742C21766F6C75747061742073697420616D657420616C697175616D206375727375732C12756C747269636965732061206E756C6C612E16416C697175616D20617420657261742066656C69732E25496E20696D70657264696574206C6163696E6961207075727573206174206C75637475732E2753757370656E64697373652072757472756D206C6163696E696120756C6C616D636F727065722E2A566573746962756C756D2074696E636964756E7420736F64616C657320736F6C6C696369747564696E2E1D416C697175616D2073697420616D65742076656C69742070757275732C12696E2076656E656E61746973206E69736C2E3E566976616D7573207669746165206D61676E612071756973206E6973692076617269757320696D70657264696574207574207175697320746F72746F722E0C55742070756C76696E61722C166D69206120766F6C757470617420626C616E6469742C1D6A7573746F2074656C6C75732074696E636964756E74206D617373612C2069642076756C70757461746520656C6974206E756E632061742072697375732E1F496E74656765722076656E656E617469732072686F6E63757320656E696D2E1C496E207072657469756D2061646970697363696E67206A7573746F2C28736564207363656C657269737175652075726E61206672696E67696C6C612073697420616D65742E67566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B20457469616D20706C6163657261742C19657374206E6563206F726E61726520636F6E76616C6C69732C1B616E7465206C6163757320766573746962756C756D207175616D2C2673697420616D657420696E74657264756D206D61676E612070757275732061632065726F732E74566573746962756C756D20616E746520697073756D207072696D697320696E206661756369627573206F726369206C756374757320657420756C74726963657320706F737565726520637562696C69612043757261653B204E756C6C616D2061742061646970697363696E67207475727069732E33437572616269747572206C6F626F727469732076656C6974207574206C6967756C6120636F6D6D6F646F206C6163696E69612E144E756C6C616D2070656C6C656E7465737175652C1D76656C697420696E20636F6E76616C6C697320636F6E7365717561742C1C697073756D206D61737361206D616C657375616461206C616375732C2873697420616D657420736F64616C6573206F64696F20656E696D207669746165206D61757269732E18496E74656765722065676574207269737573207175616D2E344D616563656E617320717569732072697375732073697420616D657420726973757320656765737461732070756C76696E61722E1A50726F696E206E656320636F6E7365637465747572206573742E315072616573656E7420756C747269636965732066656C69732061206E69736920616C69717565742070756C76696E61722E2A51756973717565206E656320656C6974206174206C6F72656D20706F727461206D616C6573756164612E1850686173656C6C7573206163206E756C6C612065726F732C14656765742065676573746173206C65637475732E1350726F696E2061206C61637573206F7263692C186F726E617265207665686963756C6120706F73756572652E . 3600 IN TXT "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Vestibulum faucibus consequat ipsum," "vel pellentesque orci sodales sit amet." "Donec consectetur," "orci ut varius pulvinar," "mauris ante bibendum est," "vel pretium turpis massa auctor sem." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Morbi urna tellus," "ornare nec accumsan vitae," "rutrum id tortor." "Pellentesque non risus eu libero tempus consequat." "Suspendisse a mi elit." "Sed ultrices elit ut sem suscipit malesuada." "Cras sagittis nunc sed risus volutpat fermentum." "Aenean vitae magna lacus." "Etiam eu ligula purus." "Suspendisse eu dui sed ligula sagittis iaculis." "Suspendisse ut sodales orci." "Nunc sit amet sapien justo." "Sed molestie lectus vel lectus gravida bibendum." "In at enim quis lacus pretium tincidunt." "Sed eleifend," "lacus sed porttitor mattis," "erat nibh tincidunt lorem," "quis feugiat nibh dui ac erat." "Curabitur quis felis urna." "Nullam rhoncus," "arcu sed tincidunt posuere," "justo enim adipiscing arcu," "et suscipit tellus leo vitae elit." "Mauris gravida odio non quam tincidunt vel lobortis ligula faucibus." "Mauris vitae dolor at tortor congue imperdiet non id leo." "Proin in diam eu orci laoreet bibendum sed nec justo." "In nec ligula eu sapien suscipit vestibulum." "Etiam eleifend," "nibh vitae semper ultricies," "justo eros semper justo," "eget dictum nisi mauris et ligula." "Donec faucibus dapibus urna," "in ultricies lacus facilisis nec." "Pellentesque dapibus augue in sem pharetra accumsan." "Ut id ullamcorper elit." "Aliquam tellus orci," "lobortis nec molestie sit amet," "imperdiet quis lacus." "Praesent non congue nunc." "Quisque pretium pretium nunc," "nec convallis magna auctor nec." "Etiam accumsan eros sollicitudin augue posuere laoreet id sit amet orci." "Curabitur ut magna velit," "id adipiscing dui." "Morbi viverra vulputate vulputate." "Proin pulvinar justo sed tortor tincidunt id porttitor ipsum posuere." "Curabitur augue leo," "ultrices eget cursus sit amet," "fringilla non nisl." "Morbi et ante est," "non adipiscing mi." "Ut rutrum egestas scelerisque." "Pellentesque quis nisi orci." "In hac habitasse platea dictumst." "Donec sed tincidunt libero." "Proin porttitor placerat risus," "nec blandit sapien pharetra nec." "Phasellus eu risus quis mauris suscipit sollicitudin ut eu neque." "Duis odio lacus," "egestas in molestie adipiscing," "vulputate ut eros." "Nunc molestie orci sed turpis viverra volutpat aliquet mi vestibulum." "Sed interdum consectetur orci at consequat." "Curabitur molestie aliquam tellus," "id dignissim nibh porta sed." "Cras vestibulum orci hendrerit quam ornare condimentum." "Vivamus ultrices lacus ut lorem scelerisque vitae semper elit vulputate." "Aenean sit amet odio massa," "sed rutrum quam." "Ut lacinia enim nec orci rutrum dictum." "Curabitur id auctor ligula." "Nam nibh nulla," "interdum vitae suscipit eu," "porta quis ligula." "Proin lacinia sapien nec dolor viverra at suscipit orci tempus." "Phasellus scelerisque lobortis quam," "sit amet sagittis nibh ornare nec." "Donec sit amet tellus ac ipsum pharetra interdum." "Sed egestas velit et felis iaculis et dignissim est faucibus." "Suspendisse convallis scelerisque dapibus." "Nullam luctus lacinia nisl quis tristique." "Vivamus tincidunt vehicula sem sit amet ultrices." "Nulla arcu lectus," "vestibulum eu molestie in," "eleifend rutrum tortor." "Etiam ligula diam," "ultrices id malesuada vel," "varius ac dolor." "In sit amet sapien justo," "nec dignissim mi." "Vivamus vitae aliquam elit." "Vestibulum suscipit malesuada ipsum id dapibus." "Morbi ullamcorper pharetra velit," "in tempor mauris consequat non." "Praesent malesuada mattis nunc," "at auctor libero viverra id." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Vivamus convallis varius vulputate." "Donec eget tortor neque." "Nunc tempor mi quis enim euismod tincidunt." "Pellentesque et nibh magna," "id cursus enim." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Nunc nunc sapien," "semper in tempor in," "cursus iaculis sapien." "Nunc vitae mattis elit." "Aliquam ut nisl vel lorem porttitor ullamcorper at sed quam." "Mauris a turpis erat." "Pellentesque viverra ligula vel tellus pretium ac auctor nisi imperdiet." "Proin faucibus sagittis odio," "quis semper massa pellentesque ac." "Morbi condimentum nisi vitae libero convallis blandit." "Proin sodales odio arcu." "Suspendisse non venenatis diam." "Sed vitae adipiscing lorem." "Nullam augue felis," "gravida quis commodo ut," "dignissim vel quam." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Pellentesque fermentum nulla at dolor molestie semper." "Sed metus sapien," "mollis a commodo ac," "commodo sed sem." "Suspendisse feugiat elementum lacus," "vel euismod nisl aliquam non." "Curabitur vel auctor neque." "Phasellus et libero vel tortor vestibulum consequat ac in magna." "Nullam congue vestibulum massa," "quis suscipit turpis adipiscing id." "Nullam ullamcorper eros id ipsum vestibulum at pretium augue convallis." "Cras nec purus ac lectus iaculis commodo sit amet eget lacus." "Curabitur blandit molestie est at fringilla." "Praesent at dictum turpis." "Sed laoreet dapibus tellus et gravida." "Fusce vitae ante ut arcu laoreet sollicitudin." "Nulla mollis commodo orci sed mollis." "Ut eleifend aliquet tellus," "vel ultricies lorem luctus vitae." "Donec commodo ullamcorper massa," "at pretium magna fermentum vitae." "Nam rutrum aliquet suscipit." "Aliquam a massa vel odio vehicula semper a in tortor." "Pellentesque aliquam suscipit iaculis." "Donec sodales pretium massa sed tempus." "Phasellus velit urna," "commodo sit amet tristique id," "congue quis eros." "Ut vulputate magna aliquet leo porta id tempus nunc auctor." "Ut condimentum magna sit amet quam ultricies iaculis." "Aenean imperdiet facilisis tellus nec ornare." "Cras nec vulputate sapien." "Morbi ut dui ut magna sodales commodo eget id erat." "Duis erat nisi," "lacinia vitae imperdiet non," "egestas nec purus." "Pellentesque tempor," "erat ut eleifend condimentum," "ipsum lacus ultrices turpis," "a fringilla purus lectus semper nulla." "Proin id nulla mi." "Suspendisse vel sem lacus." "Ut rutrum eros id massa ultricies commodo." "Nulla eget adipiscing ante." "Nunc quis enim a justo pharetra commodo." "Nullam tortor tortor," "volutpat at commodo at," "consectetur sit amet erat." "Quisque pharetra turpis nec libero viverra quis rutrum nunc mattis." "Aenean sed lacus lectus." "Duis et odio tortor." "Aenean ullamcorper ultricies turpis sed volutpat." "Ut et est sem," "et ultrices turpis." "Pellentesque nisi felis," "dictum non tempor lobortis," "iaculis at enim." "Aliquam tellus elit," "volutpat ut tristique sed," "fringilla ac libero." "Duis rutrum quam magna," "ut ultrices ipsum." "Morbi id orci lectus." "Maecenas quis nunc at diam mollis congue." "Aliquam neque lorem," "lobortis sit amet commodo id," "feugiat mattis dolor." "Cras aliquam convallis adipiscing." "Vestibulum varius commodo pulvinar." "Suspendisse eleifend dictum lectus," "vel commodo nibh varius quis." "Phasellus sit amet nisi libero." "In aliquam purus ut mi mattis quis iaculis lacus porta." "Sed ultrices vehicula mauris sed ornare." "Maecenas gravida tincidunt sagittis." "Mauris id hendrerit eros." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Curabitur pharetra diam augue," "sit amet congue felis." "Praesent dignissim eleifend vulputate." "Sed nec vestibulum tellus." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum laoreet," "eros vitae rhoncus aliquet," "ligula turpis congue purus," "non convallis mi nibh eu purus." "Vivamus euismod facilisis lacus tincidunt rutrum." "Vivamus suscipit," "nisi sed semper iaculis," "libero sem pulvinar enim," "a aliquet purus urna ut nulla." "Donec ultrices luctus mauris," "in porttitor enim ullamcorper sit amet." "Morbi pellentesque auctor velit et egestas." "Fusce ac tincidunt massa." "Morbi a velit eget diam tincidunt eleifend." "Curabitur ornare lectus a quam blandit vel fermentum lacus dictum." "Donec vel turpis odio," "ac suscipit orci." "Nulla posuere convallis lacus venenatis feugiat." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Suspendisse potenti." "Suspendisse mollis neque ut neque gravida ut viverra mi ultrices." "Vestibulum at tempor sem." "Mauris vel leo libero." "Aliquam augue justo," "ultricies vel feugiat a," "vulputate sed erat." "Aliquam in ultrices quam." "Phasellus aliquam vestibulum odio at auctor." "Sed dapibus," "felis ac ornare dapibus," "magna dolor bibendum nisl," "eget luctus lacus magna et mauris." "Nulla ipsum augue," "tempor quis consectetur in," "iaculis non dolor." "Suspendisse consectetur felis ac nulla sodales rhoncus." "Maecenas velit ante," "lacinia at convallis quis," "iaculis quis tellus." "Suspendisse imperdiet aliquet dui," "posuere dictum justo fermentum sit amet." "Etiam ac ante diam." "Suspendisse quis dolor dui," "at mollis neque." "Aenean eu nisi lorem," "et ultrices mauris." "Nulla in augue libero," "non suscipit elit." "Cras rhoncus," "est ac fringilla varius," "erat ipsum gravida nisl," "at ornare dui nisi id mauris." "Nullam nec dictum leo." "Phasellus magna sapien," "sagittis quis suscipit quis," "bibendum in odio." "Cras sed ligula tellus," "sit amet fermentum felis." "Pellentesque suscipit feugiat enim," "vitae feugiat eros mattis pretium." "Cras nisi tellus," "placerat nec dapibus eget," "faucibus ac felis." "Proin tempus feugiat sapien," "nec mattis leo pharetra vel." "Maecenas dapibus mi dignissim ligula commodo et facilisis quam tristique." "Praesent varius lacus eu enim pellentesque gravida." "Nam rhoncus mauris pharetra eros vulputate at tincidunt massa fringilla." "Pellentesque in erat nec massa consequat ultrices." "Donec varius elementum leo," "non hendrerit justo tincidunt sit amet." "Donec ac libero augue." "Sed mattis turpis a sem ultricies consequat." "Aenean nunc dui," "commodo eget vestibulum ut," "rutrum in nisl." "Nam augue lorem," "tempor in porta at," "commodo ut ipsum." "Quisque adipiscing aliquet tincidunt." "Suspendisse potenti." "Pellentesque porttitor elit at leo hendrerit pretium nec eu turpis." "Curabitur in elit metus." "Aliquam risus erat," "posuere id adipiscing consequat," "dapibus vel eros." "Maecenas semper felis sed felis tristique varius." "Mauris tempus tortor et metus euismod pellentesque." "Pellentesque dui massa," "euismod non tincidunt id," "aliquet in elit." "Aenean vulputate sem elit." "Pellentesque at tempus magna." "Aenean elementum nisl id ante commodo placerat." "Nam sed mauris tellus." "Pellentesque nec orci nibh," "nec vulputate enim." "Aliquam erat volutpat." "Etiam dignissim justo a orci egestas mattis." "Vivamus ultrices sapien ac turpis venenatis tempor." "Suspendisse consequat volutpat fermentum." "Duis eu orci velit." "Sed placerat," "nisi sed aliquet tincidunt," "risus odio mattis nulla," "non sodales nunc nulla vitae mi." "Nunc consequat pharetra dolor at fringilla." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Vestibulum ultrices tellus quis nisl dignissim rhoncus eget et justo." "Maecenas vitae purus quis leo vehicula venenatis vel ut lectus." "Curabitur nec molestie nisl." "Vestibulum ullamcorper nulla non orci dictum quis lacinia est interdum." "Fusce eget sem risus," "sed volutpat augue." "Suspendisse potenti." "Sed luctus molestie augue," "a varius quam congue in." "Aliquam aliquet orci eget mi euismod consequat." "Ut et vestibulum ante." "Sed vitae metus elit." "Mauris lacus eros," "pellentesque eu vehicula semper," "dapibus consequat nulla." "Sed volutpat erat suscipit sem facilisis at adipiscing orci vehicula." "Pellentesque nisi nulla," "faucibus in rhoncus ut," "rhoncus eleifend turpis." "Aenean odio tortor," "ullamcorper id tincidunt nec," "rhoncus non mi." "Praesent interdum varius orci," "ut venenatis nibh mollis nec." "Ut placerat," "erat nec tincidunt pharetra," "metus lacus venenatis nunc," "et laoreet augue sapien vel lorem." "Sed sit amet viverra est." "Etiam rutrum," "purus ut ultrices aliquet," "neque magna luctus risus," "vel consectetur eros lorem ut odio." "Integer turpis elit," "consectetur ut suscipit sed," "gravida at lorem." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Morbi placerat accumsan malesuada." "Mauris porta," "lacus eget iaculis sagittis," "arcu sem lobortis nulla," "et tempus velit massa quis libero." "Fusce dolor nibh," "bibendum et adipiscing non," "eleifend et odio." "Duis elit eros," "hendrerit at porttitor vitae," "gravida nec arcu." "Praesent malesuada sapien a urna accumsan at hendrerit ipsum porttitor." "Mauris pharetra sagittis urna eu tempor." "Vestibulum purus leo," "pharetra quis ultrices ac," "semper nec erat." "Sed nec massa arcu," "sed tempus dolor." "Fusce vitae dictum eros." "Aenean vestibulum semper turpis," "iaculis auctor dolor vehicula ac." "In fermentum auctor pharetra." "Integer nec eros diam," "eget posuere leo." "Nam tristique," "nibh nec malesuada ornare," "urna odio porta mauris," "accumsan aliquet nunc lectus sit amet mauris." "Vestibulum nulla massa," "semper sit amet blandit sit amet," "venenatis eget sapien." "Vestibulum ultrices congue rhoncus." "Nunc lacinia dapibus imperdiet." "Nunc a eros sed urna pellentesque egestas non sit amet elit." "Integer dolor diam," "vulputate at tristique non," "venenatis in risus." "Sed lacinia luctus ipsum," "ac sagittis arcu molestie quis." "Phasellus pretium nulla quis quam placerat vitae commodo mi congue." "Praesent tristique laoreet elementum." "Praesent venenatis pretium dolor," "eu volutpat est scelerisque sit amet." "Praesent eleifend dictum vehicula." "Donec ullamcorper adipiscing ante ac elementum." "Integer dui nunc," "viverra at rutrum ut," "tincidunt vitae mi." "Donec nec risus id arcu porttitor placerat pulvinar at lacus." "Morbi ac velit sapien," "lacinia egestas nulla." "Mauris elementum dui ac libero ultricies consequat." "Nam non justo at tellus hendrerit rhoncus ultrices molestie augue." "Aenean elit purus," "tempor quis vehicula quis," "lobortis a odio." "Aliquam rhoncus varius lorem," "eu aliquet turpis rutrum a." "Nulla gravida gravida dui," "ac molestie arcu adipiscing vitae." "Cras diam mauris," "cursus vitae congue dictum," "adipiscing id erat." "Suspendisse ornare porta elit id hendrerit." "Praesent nec metus massa," "a egestas risus." "Donec pellentesque viverra diam sit amet pharetra." "Suspendisse lorem mi," "viverra eu auctor non," "volutpat et felis." "Proin id fermentum purus." "Nam eget mattis arcu." "Morbi bibendum rutrum euismod." "Donec aliquet hendrerit tincidunt." "Aenean eu sapien ut nunc dictum feugiat nec at lacus." "Duis commodo nisi nec tortor volutpat quis condimentum turpis aliquam." "Vivamus sollicitudin," "nulla rhoncus consequat posuere," "nisi nibh adipiscing felis," "aliquet porta arcu magna nec sapien." "Ut luctus interdum diam quis sollicitudin." "Ut semper magna sed neque hendrerit mattis." "Nullam turpis dui," "porttitor eget interdum id," "porttitor eu dui." "Ut accumsan," "tellus in eleifend imperdiet," "elit massa facilisis magna," "vitae feugiat tellus lectus eget tellus." "Mauris ac neque ac nibh ultricies imperdiet." "Ut urna lorem," "aliquet et mattis id," "suscipit a lectus." "Nam vehicula porttitor erat sit amet imperdiet." "Sed eu nunc id mauris mollis rutrum." "Pellentesque dui orci," "ullamcorper at fringilla eget," "sollicitudin eget nunc." "Quisque vel metus et enim placerat eleifend sed a leo." "Praesent pharetra hendrerit nibh scelerisque aliquam." "Duis tincidunt vestibulum congue." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Vestibulum non libero ligula." "Ut cursus mauris sed odio imperdiet vehicula." "In fermentum vehicula arcu," "ac commodo augue posuere sed." "Vivamus ultricies," "magna in aliquam suscipit," "tortor leo vestibulum dolor," "ut luctus odio diam nec lacus." "Phasellus et diam metus." "Cras fringilla nibh quis ante tincidunt in euismod leo luctus." "Nulla tincidunt erat sit amet erat viverra eleifend accumsan ligula luctus." "Quisque et risus enim." "Praesent vitae neque ut leo semper malesuada eu sed justo." "Duis pretium vehicula orci sed dignissim." "Cras nec magna in nulla laoreet vulputate quis at enim." "Nulla eget odio tellus." "In placerat massa et purus eleifend non fringilla neque fringilla." "Donec imperdiet ullamcorper nisl," "vel rutrum sapien rutrum a." "Duis luctus," "ante eu tristique commodo," "ipsum libero sollicitudin purus," "quis tempor nibh felis ac quam." "Nullam sodales vehicula elit," "eget egestas neque blandit in." "Mauris egestas faucibus elit," "id pellentesque nibh tincidunt id." "Nam vitae felis magna." "Donec tellus quam," "scelerisque vitae sollicitudin at," "gravida vel est." "Ut sodales velit nec dui sollicitudin a porta mi ullamcorper." "Cras sollicitudin egestas consequat." "Donec id tortor est," "eget tempor diam." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut ullamcorper gravida pharetra." "Proin diam nunc," "feugiat id interdum vel," "porttitor a nisl." "Aliquam aliquet orci sed metus egestas porttitor." "Morbi sollicitudin pulvinar enim." "Etiam tincidunt augue ut quam mollis ac imperdiet odio egestas." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Nunc at enim diam." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Aliquam lorem lectus," "suscipit at vestibulum ac," "scelerisque quis augue." "Morbi felis tellus," "porttitor quis pellentesque ut," "dictum ac nisi." "Integer sit amet massa vel augue lacinia dapibus non vulputate tortor." "Aenean ullamcorper sodales justo," "at fermentum libero sodales et." "Fusce vitae enim ut ligula volutpat placerat." "Pellentesque et mauris nibh," "non lacinia ipsum." "Phasellus ac nibh sit amet nibh vulputate rutrum." "Maecenas id nulla quam." "Maecenas euismod dolor in magna condimentum adipiscing." "Morbi elementum tincidunt mauris in mollis." "Pellentesque sagittis turpis id nunc tempor a eleifend turpis fermentum." "Sed faucibus interdum arcu," "at varius sem aliquet id." "Pellentesque vestibulum iaculis risus," "id dictum lorem gravida ac." "Quisque sagittis arcu vitae eros dapibus vitae convallis nulla mattis." "Nam id dui neque," "ut molestie velit." "Pellentesque pulvinar porta erat eu interdum." "Nunc metus massa," "vestibulum vitae egestas a," "fringilla et odio." "Quisque quis diam lorem," "quis pellentesque velit." "Mauris sapien risus," "suscipit nec vestibulum nec," "rutrum a risus." "Curabitur lobortis condimentum ultricies." "Duis quis dapibus turpis." "Nunc lectus elit," "facilisis at bibendum et," "vestibulum in arcu." "Morbi odio nibh," "feugiat quis tempor ut," "scelerisque ultrices nisi." "Curabitur a accumsan augue." "Integer aliquet porttitor nibh," "nec placerat est pharetra in." "Donec feugiat nisi et odio commodo interdum." "Vestibulum ullamcorper bibendum fermentum." "Fusce eu lacus eget metus malesuada feugiat eu vel erat." "Sed et erat tortor." "Morbi malesuada varius mollis." "Nam accumsan dignissim odio," "quis consectetur mi molestie eget." "Etiam iaculis," "enim eu placerat vehicula," "elit massa pulvinar tellus," "in cursus magna mi non quam." "Vivamus varius tempor semper." "Nulla adipiscing feugiat sollicitudin." "Etiam lacinia placerat dui nec varius." "In vitae metus mauris." "Vestibulum sed magna quis nibh ornare rhoncus ut vitae ipsum." "Duis ligula nunc," "fermentum sed suscipit non," "molestie vel purus." "Suspendisse potenti." "Proin arcu leo," "adipiscing at vehicula ac," "ullamcorper nec diam." "Proin pretium porta urna," "quis fermentum nisl pretium et." "Suspendisse a elit eu nisi molestie lacinia." "Cras at condimentum arcu." "Suspendisse potenti." "Sed ullamcorper ante sit amet urna aliquet ultrices accumsan neque ullamcorper." "Nam sit amet velit vel urna gravida suscipit sit amet non mauris." "Ut non neque arcu." "Praesent gravida sodales lorem," "vitae hendrerit purus bibendum non." "Nulla facilisi." "Mauris ornare," "sem eget tristique vestibulum," "augue metus luctus neque," "sit amet pretium lectus dui et augue." "Curabitur eu convallis turpis." "Ut est est," "vulputate auctor laoreet et," "iaculis eget massa." "Vestibulum ornare porta rhoncus." "Phasellus sagittis orci et orci blandit facilisis viverra leo consectetur." "Curabitur molestie nibh vitae nisi condimentum eget tempor nulla consectetur." "Ut arcu nunc," "mollis nec consectetur nec," "elementum tempus enim." "Nullam vel arcu massa." "In quis accumsan nibh." "Nullam id tristique neque." "Phasellus mattis interdum nisi quis viverra." "Morbi sollicitudin," "leo vel faucibus consequat," "ante est blandit nibh," "id sodales risus nunc ac ligula." "Nullam pellentesque diam nec urna fringilla malesuada." "Maecenas nisi lorem," "bibendum a condimentum in," "commodo vel tellus." "Proin at odio in ante lacinia sodales vel eget elit." "Curabitur eu fermentum est." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Praesent rutrum lectus ac velit consequat hendrerit." "In faucibus dictum mattis." "Sed a justo mi," "eu convallis nibh." "Integer commodo sollicitudin suscipit." "Curabitur vel leo vitae quam ultricies interdum et eget justo." "Proin ultrices lacus et metus vulputate ultrices eu non ligula." "Proin at velit in nisi malesuada lobortis." "Fusce est urna," "pulvinar ac venenatis non," "hendrerit non neque." "Donec id augue ac magna consequat porta." "Donec sed erat vitae velit vehicula rutrum." "Aenean pulvinar dui nec augue pharetra iaculis." "Quisque pretium risus vitae arcu feugiat ac posuere risus sagittis." "Nam diam erat," "rutrum ut interdum non," "laoreet at sem." "Sed enim elit," "tempor eget volutpat ac," "aliquet at sem." "Nunc in urna eu ipsum tempor pharetra eget vitae est." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Nulla ultricies," "ligula quis consequat posuere," "ante risus gravida est," "in pretium elit ipsum nec eros." "Mauris ac leo sit amet nisl rutrum mattis." "Donec facilisis enim eget mauris gravida lacinia." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Vivamus eleifend lacus non erat eleifend lacinia." "Nam vehicula vehicula ipsum ac ultrices." "Aliquam ut massa purus." "Aenean vel est vitae nulla tincidunt malesuada." "Aliquam eleifend," "arcu non tristique tempor," "dui ligula malesuada sem," "iaculis scelerisque magna massa quis quam." "Pellentesque libero mauris," "vulputate sed tincidunt vitae," "vehicula ac ipsum." "Mauris pharetra," "turpis eu tincidunt rhoncus," "quam tortor viverra est," "at pellentesque augue nibh ac nibh." "In ipsum dui," "ullamcorper vel semper quis," "semper id massa." "Phasellus non sem dolor," "at scelerisque tellus." "Curabitur velit augue," "pulvinar in aliquam id," "aliquet vel leo." "Fusce fermentum blandit nunc," "vitae tincidunt leo molestie condimentum." "Suspendisse ut gravida ipsum." "Curabitur vulputate," "mauris sit amet pulvinar sagittis," "ipsum enim feugiat enim," "et porta risus neque eget ante." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Donec eros dolor," "vehicula quis aliquam eget," "ornare id lorem." "Ut dolor lacus," "aliquet ut tempor et," "varius et nunc." "Cras consectetur massa vitae velit mattis a ultrices urna venenatis." "Praesent lacus mi," "bibendum a aliquet quis," "vestibulum non velit." "Proin sit amet elit felis," "eu malesuada justo." "Maecenas auctor urna metus." "Phasellus convallis velit id justo blandit venenatis." "Suspendisse convallis rhoncus orci," "a tincidunt quam varius a." "Fusce scelerisque aliquam odio ac sodales." "Aliquam in lectus arcu." "In vestibulum," "nisi et sagittis dignissim," "purus est feugiat risus," "ac accumsan ante purus in turpis." "Maecenas bibendum condimentum nibh," "quis fringilla quam imperdiet sed." "Nulla ullamcorper suscipit sem euismod rhoncus." "Curabitur lectus justo," "consectetur vitae viverra sed," "fringilla at nunc." "Aliquam justo tortor," "ornare vel rhoncus non," "eleifend sed purus." "Nullam posuere gravida magna," "egestas convallis tellus venenatis quis." "Mauris feugiat," "lectus nec rutrum placerat," "tellus augue convallis velit," "in mattis odio neque in urna." "Quisque quis urna at diam pretium iaculis ut sed dui." "Morbi nibh enim," "accumsan eu convallis et," "bibendum sed dui." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Etiam interdum turpis eu dui adipiscing sagittis." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "In hac habitasse platea dictumst." "Suspendisse sed libero enim," "et dapibus justo." "Aliquam commodo," "turpis sit amet venenatis facilisis," "nibh diam porttitor neque," "nec gravida massa odio a sem." "Morbi quis velit ligula." "Mauris interdum risus nec quam rhoncus eu bibendum mauris pulvinar." "Nunc id orci nec turpis lobortis luctus." "Praesent laoreet lectus vel leo malesuada interdum." "Quisque a mi ac eros mattis pharetra in a quam." "Sed scelerisque ligula vel tellus pulvinar suscipit sollicitudin odio vehicula." "In porta odio auctor justo commodo lobortis." "Nullam porttitor volutpat blandit." "In ut varius nisl." "Nunc pharetra porta luctus." "Mauris in mattis est." "In hac habitasse platea dictumst." "Maecenas sed convallis tellus." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Ut vehicula metus vitae ipsum hendrerit rutrum." "Nunc dolor nisl," "interdum quis ornare et," "tempor quis dui." "Donec tincidunt varius turpis non cursus." "Nulla lobortis," "lacus eget pellentesque sagittis," "urna elit rhoncus erat," "ac convallis ipsum sapien non lacus." "Morbi pellentesque ligula et velit tempus sagittis." "Morbi tincidunt interdum nunc non suscipit." "Cras faucibus interdum velit accumsan posuere." "Donec a augue risus." "Etiam viverra," "lectus sed mattis lobortis," "erat risus aliquet lorem," "eu semper libero nunc ac erat." "Donec at dui nisi." "Fusce dui tortor," "consequat eget egestas vel," "lobortis elementum mi." "Suspendisse blandit molestie urna vel mollis." "Nam aliquam volutpat bibendum." "Nulla id erat a lectus facilisis vestibulum." "Nunc dictum laoreet magna eu venenatis." "Duis facilisis justo nec enim vehicula nec rutrum purus vulputate." "Sed sollicitudin dui nec purus porttitor lacinia." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent nisl lacus," "rutrum ac congue eu," "scelerisque dictum ligula." "Fusce neque massa," "viverra sed suscipit sit amet," "posuere at ipsum." "Praesent scelerisque libero in nibh gravida sed consectetur turpis vehicula." "Fusce sapien velit," "vestibulum a aliquam in," "bibendum vel mauris." "Phasellus id porta eros." "Aenean nec ligula turpis," "ut tincidunt velit." "Cras commodo congue dui," "id gravida felis iaculis eget." "Nunc varius diam a purus elementum eleifend." "Sed viverra velit sit amet ante ultrices nec varius tellus aliquam." "Suspendisse ante nunc," "suscipit nec sodales ut," "rhoncus a ante." "Nulla risus neque," "fermentum in pharetra nec," "commodo rhoncus nulla." "Aenean fermentum," "ligula nec suscipit ultrices," "ligula neque rhoncus purus," "a mollis sem purus ut nunc." "Nunc aliquam ullamcorper lacinia." "Duis id velit lacus." "Cras convallis sodales vehicula." "Proin nibh nulla," "bibendum sed pellentesque vitae," "blandit vitae quam." "Curabitur et eros velit," "non vehicula sapien." "Suspendisse eu mi nec metus pellentesque egestas." "Curabitur a tellus purus," "ac dictum nisi." "Donec diam ligula," "tincidunt ut posuere vitae," "consequat at nisi." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Nulla auctor nisi sed metus tincidunt blandit." "Nulla facilisi." "Proin volutpat mi sagittis risus fringilla feugiat." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Vivamus sagittis," "metus et sagittis sodales," "massa leo elementum sapien," "id suscipit lectus ligula ac orci." "Nulla dignissim tristique justo," "vel volutpat turpis rutrum convallis." "Sed diam lorem," "ultricies a ultricies eu," "tristique vitae turpis." "Donec pellentesque consectetur tellus non sodales." "Nam id dolor arcu." "Pellentesque nisl eros," "gravida non aliquam auctor," "elementum et felis." "Quisque in pellentesque metus." "Morbi sed lorem non magna fringilla egestas vitae ut nulla." "Aenean vel ante id nibh tincidunt feugiat." "Ut diam lorem," "semper vel elementum ac," "faucibus suscipit nunc." "Ut ultrices pharetra pellentesque." "Sed malesuada," "nulla vitae luctus suscipit," "est ipsum viverra libero," "quis ultrices augue ante eget velit." "Aenean nibh libero," "elementum eget lacinia non," "faucibus ut arcu." "Suspendisse potenti." "Phasellus nisl ante," "faucibus sed aliquam non," "pellentesque vel orci." "Nulla facilisi." "Sed et mauris sit amet enim malesuada congue." "In hac habitasse platea dictumst." "Cras vitae velit a enim sollicitudin elementum interdum a diam." "Nulla purus lectus," "mattis facilisis pretium et," "consectetur ut tellus." "Cras posuere odio eget nibh lacinia ullamcorper." "Aliquam a enim purus." "Donec pharetra tristique magna," "sit amet varius erat facilisis et." "Nullam molestie nisi euismod orci ultrices in mollis tellus accumsan." "Ut placerat hendrerit porttitor." "Nulla sit amet quam risus." "Nunc diam dui," "adipiscing non cursus et," "pharetra sed mi." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Cras eget hendrerit mi." "Donec sagittis tincidunt nisi venenatis egestas." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Suspendisse ac felis erat," "ut placerat nisi." "Curabitur laoreet pellentesque erat sed porttitor." "Sed vel metus leo," "nec congue enim." "Vivamus elit orci," "ultricies ac sagittis nec," "porta a lorem." "Suspendisse volutpat facilisis turpis," "non dapibus mi scelerisque sed." "Ut id libero a lorem rhoncus sollicitudin non non lorem." "Integer erat purus," "laoreet eu pulvinar eget," "condimentum in tellus." "Nam et placerat purus." "Praesent convallis," "nisi id sodales pharetra," "nibh augue tincidunt elit," "sit amet tempor justo orci quis sapien." "Cras imperdiet ligula ultricies lacus vestibulum molestie." "Fusce non suscipit felis." "Aenean sed nisl quis mi dapibus auctor et eget sem." "Vestibulum luctus egestas diam nec aliquet." "Nunc suscipit," "risus non facilisis sagittis," "libero enim rutrum mauris," "at ullamcorper tortor nibh vel turpis." "Morbi sed nisl purus." "In hac habitasse platea dictumst." "Nulla orci dui," "consectetur id laoreet quis," "mollis in nunc." "Phasellus faucibus posuere magna eu semper." "Cras sem turpis," "mattis non pretium at," "feugiat eget lorem." "Mauris in orci nulla," "sed consectetur diam." "Pellentesque dignissim," "erat dictum gravida viverra," "est erat laoreet massa," "at porta sem mi a quam." "Mauris ultricies viverra velit in posuere." "Vestibulum et ligula eros." "Pellentesque eu orci nulla." "Proin lectus enim," "molestie a sagittis id," "elementum quis tortor." "Mauris et ligula ut ligula egestas porttitor nec quis sapien." "Duis nibh dolor," "pharetra eu mollis sit amet," "tempus ut tortor." "Pellentesque tristique mattis nisl sed commodo." "Praesent ut mauris mi." "Donec lectus arcu," "vestibulum tempus convallis in," "vestibulum eget risus." "Cras sit amet tristique metus." "Fusce sodales velit et purus imperdiet semper." "Donec a nibh tellus," "ut pharetra odio." "Proin tellus nulla," "malesuada vitae aliquet bibendum," "congue ut turpis." "Vestibulum vel purus elit," "sit amet tempus purus." "Praesent mi erat," "imperdiet at volutpat eget," "laoreet a purus." "Curabitur ultricies ultricies nisi," "et varius nisi auctor in." "Curabitur vehicula elit et erat imperdiet vitae euismod diam convallis." "Morbi mollis semper risus," "ac varius turpis faucibus et." "Nulla commodo ligula nec nulla blandit ut rhoncus quam semper." "Mauris arcu ligula," "dapibus vel blandit id," "ornare quis arcu." "Proin urna ligula," "dictum aliquet venenatis nec," "pharetra et est." "Donec libero lectus," "scelerisque eget pharetra nec," "scelerisque ut quam." "Integer mi tortor," "mattis a luctus sit amet," "consequat quis mi." "Praesent in orci a nibh cursus malesuada eu a magna." "Nam at ligula purus," "consequat eleifend dui." "Donec tristique velit id turpis ultricies fermentum." "In ut sem eu quam volutpat consequat ut eget augue." "Nam posuere nisl at lectus laoreet scelerisque." "Vivamus nec odio tempus nulla egestas iaculis." "Sed sollicitudin posuere sapien ac interdum." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Quisque aliquam," "massa ut vehicula placerat," "dui dui feugiat sem," "sed blandit sem augue non sapien." "Nulla sit amet justo diam." "Aliquam eget justo vitae lorem condimentum imperdiet a eget nisi." "Etiam quam nulla," "volutpat ac consequat quis," "volutpat ac orci." "Nam fermentum hendrerit pulvinar." "Aliquam erat volutpat." "Mauris sit amet viverra justo." "Cras eget sollicitudin turpis." "Donec congue pretium suscipit." "Nunc tempus tempor augue vitae mattis." "Aenean vel lectus a neque feugiat pretium." "Proin ac purus a nisi tincidunt auctor non eget justo." "Donec et bibendum ipsum." "Nulla facilisi." "Nam pellentesque lacinia fermentum." "Nulla eu ligula turpis," "a cursus dui." "Nullam porttitor molestie bibendum." "Aenean iaculis mi ultrices lorem viverra gravida." "Proin tortor mauris," "fermentum vitae pretium ac," "posuere quis augue." "Cras sodales," "felis sit amet sollicitudin euismod," "lorem dui fermentum nisl," "et vehicula quam enim et est." "Etiam ac dolor sed augue dictum ullamcorper non molestie leo." "Morbi tellus arcu," "imperdiet eget condimentum sit amet," "convallis sodales massa." "Ut id urna eu quam facilisis rhoncus." "Curabitur euismod," "augue ut fringilla congue," "odio risus vestibulum enim," "ac porta augue lacus quis dolor." "Sed dui orci," "rutrum commodo dapibus sed," "fermentum in libero." "Aenean id purus sapien," "in feugiat odio." "Nullam interdum suscipit odio eget vehicula." "Praesent interdum," "sapien vitae consectetur pulvinar," "mauris felis iaculis nisi," "vitae sagittis sapien velit ac neque." "Morbi a purus vel velit vestibulum ullamcorper a vel diam." "Nam nec dui non tellus tincidunt molestie." "Nam lacinia iaculis orci eget pulvinar." "Etiam ac facilisis massa." "Nulla sit amet luctus odio." "Aenean eget turpis turpis," "eget fermentum neque." "Phasellus id lectus nisi." "Suspendisse tristique scelerisque suscipit." "Integer vel nibh elit." "Duis sem justo," "bibendum vel hendrerit vel," "cursus non turpis." "In hac habitasse platea dictumst." "Vestibulum nec quam a dolor consequat fermentum vel in leo." "Donec vel lorem risus," "quis blandit felis." "Sed mollis ornare turpis," "vitae mattis risus mollis eget." "Praesent eleifend iaculis mauris." "Maecenas porta tincidunt egestas." "Quisque at sem leo." "Donec non enim vel risus suscipit vulputate." "Nam a diam placerat dui feugiat commodo at a tortor." "Fusce elit augue," "congue sit amet imperdiet id," "sagittis at quam." "Integer vestibulum felis vel nunc consequat bibendum." "Curabitur rhoncus lacinia risus," "sit amet semper urna elementum vehicula." "Nulla vel ante libero." "Maecenas sed orci non eros venenatis dapibus nec non nibh." "Aliquam erat volutpat." "Quisque aliquet auctor nulla at semper." "Aenean congue pellentesque ipsum." "Aliquam id ante vel eros facilisis consectetur." "Aenean a mi in orci bibendum mattis euismod eget elit." "In sed enim et quam tincidunt semper in quis augue." "Proin sed sapien id magna cursus tristique." "Nunc ac sapien augue." "Aliquam tempus leo ultricies magna interdum tincidunt." "Nulla porttitor gravida ligula in aliquet." "Duis mattis dui non sem vestibulum ac sagittis enim molestie." "Quisque sed dui ligula." "Nullam euismod aliquet enim id tristique." "Curabitur nec lectus consectetur nisi cursus vehicula." "Nulla fringilla vestibulum rutrum." "Quisque malesuada nibh vitae quam feugiat nec placerat eros ultrices." "Pellentesque id dui id nisl eleifend iaculis posuere ut tortor." "Integer eget dui risus," "eu auctor quam." "Aliquam sit amet orci placerat nunc blandit dictum." "Vestibulum nec interdum nisi." "Proin purus nisi," "viverra ultricies accumsan ac," "dignissim nec nulla." "Donec sit amet dolor nisl," "a scelerisque elit." "Phasellus ut arcu lectus." "Sed semper dapibus pellentesque." "Nam vitae urna nulla," "vel auctor orci." "Sed vel magna nibh." "Curabitur pretium imperdiet orci eu ultrices." "Vivamus quis metus pharetra nunc euismod rutrum." "Fusce massa nibh," "venenatis sed ornare at," "posuere sed mauris." "Sed tortor est," "tempor vel fermentum sit amet," "laoreet at nulla." "Proin eu dictum lacus." "Proin nec mattis lectus." "Aliquam semper semper tellus," "ac eleifend orci accumsan non." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Phasellus vitae tortor mauris," "quis blandit nisi." "Donec quis viverra lacus." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Maecenas imperdiet," "leo eu tincidunt gravida," "eros sem lacinia risus," "vitae viverra massa augue eget ante." "Suspendisse ullamcorper lacus ut est bibendum condimentum." "In eget semper mi." "Praesent tellus turpis," "mollis sit amet feugiat at," "gravida eget augue." "Sed ac lacinia massa." "Sed vitae malesuada lorem." "Vivamus pellentesque urna eget sem vehicula pharetra." "Curabitur tristique tortor eget mauris adipiscing semper." "Sed eu nisi vulputate arcu elementum imperdiet." "Morbi gravida est non ante accumsan bibendum." "Cras et lectus augue," "sed congue leo." "Praesent semper," "urna nec pharetra aliquet," "augue purus tristique neque," "eget convallis libero turpis sed mi." "Sed tortor tellus," "tempus ac ullamcorper tempus," "consectetur in dui." "Cras aliquam dapibus turpis," "ut ultrices ligula vulputate a." "Donec molestie porttitor mi," "placerat rutrum neque sodales id." "Fusce quis justo lacus." "Duis eget sem nisi," "ac consectetur augue." "Vestibulum luctus erat non lacus commodo vel tristique dui consectetur." "Mauris tellus nisl," "molestie eget porta vitae," "sagittis sed dolor." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Pellentesque vel odio eget sem aliquet scelerisque eget vitae nunc." "Fusce adipiscing sagittis libero," "quis placerat dui pulvinar eget." "Cras condimentum," "arcu tempor facilisis condimentum," "eros leo ullamcorper urna," "vel tincidunt velit enim eget eros." "Mauris et semper nulla." "Proin mollis sapien nec enim egestas aliquam vestibulum consectetur tellus." "Aenean ut nisl ut sapien iaculis auctor." "Pellentesque dolor tellus," "sodales eu elementum ut," "ullamcorper at nunc." "Vestibulum convallis ornare leo," "ac luctus eros dignissim commodo." "Suspendisse at elit sit amet urna placerat lobortis." "Donec fermentum libero lacus," "in placerat risus." "Nullam ut enim sapien," "nec blandit libero." "Donec in nibh fermentum lacus dapibus bibendum vel ac turpis." "Morbi rhoncus," "purus pharetra sagittis mollis," "lectus ante imperdiet magna," "in vestibulum urna nulla ac erat." "Duis dictum euismod vulputate." "Morbi odio augue," "ultrices a gravida sed," "elementum quis felis." "Nam scelerisque urna id justo dignissim placerat." "Sed convallis lobortis orci vel egestas." "Vestibulum ultricies felis in libero iaculis varius." "Aliquam erat volutpat." "Phasellus ac purus non elit malesuada auctor." "Donec ut sem id enim volutpat posuere." "Donec malesuada est sed odio ornare dignissim." "Cras vitae urna massa," "ut facilisis lorem." "In rutrum interdum lectus," "nec scelerisque tellus consequat pellentesque." "Proin eu molestie neque." "Integer sed enim lectus," "ac aliquet urna." "Phasellus sodales sollicitudin consequat." "Praesent vitae augue ante." "Sed id pellentesque leo." "Integer vehicula enim quis dui aliquet congue." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Curabitur gravida," "quam sed elementum eleifend," "velit nulla dictum est," "ut malesuada augue ligula id dui." "Maecenas bibendum tristique ipsum," "eu gravida elit commodo sed." "Fusce metus tortor," "accumsan ac feugiat id," "volutpat sed tortor." "Vivamus tincidunt mi non purus volutpat ultrices." "Praesent eget metus eu sem tempus pellentesque." "Etiam faucibus sollicitudin dapibus." "Donec tempor massa sit amet mi posuere ullamcorper." "Vestibulum ac dolor ut urna ultrices volutpat." "Integer ipsum urna," "congue tempus vehicula eu," "sodales sit amet velit." "Proin adipiscing urna ut eros sodales vulputate." "Nam faucibus auctor justo non luctus." "Suspendisse ac augue sed augue viverra congue." "Nam ligula erat," "eleifend eu semper eget," "pharetra laoreet nunc." "Phasellus tempor eros a ante tincidunt ultricies." "Fusce sit amet est tristique lacus pharetra tristique." "Pellentesque orci est," "tristique quis tristique id," "imperdiet at neque." "Vivamus ut rutrum mauris." "Nullam sit amet quam turpis," "ut fringilla enim." "Duis sagittis accumsan risus." "In eget risus vel mauris pharetra laoreet nec id arcu." "Cras mollis," "mauris et sagittis laoreet," "est dui hendrerit urna," "at tempor nulla mauris sed odio." "Cras sed hendrerit orci." "Curabitur eros sem," "pretium vel iaculis vel," "accumsan in enim." "Proin mattis," "ligula tincidunt sagittis rutrum," "mauris dui consectetur erat," "ac hendrerit quam risus at purus." "Cras ac ante id libero congue semper at id tortor." "Cras non risus sit amet erat porta dictum sit amet in justo." "Phasellus vel justo odio." "Donec scelerisque varius ligula id bibendum." "Nullam turpis ligula," "fringilla ac semper a," "iaculis a sapien." "Vestibulum in est venenatis metus malesuada lacinia quis id justo." "Vivamus faucibus luctus semper." "Etiam mattis ullamcorper magna," "sit amet faucibus est malesuada euismod." "Duis libero nisl," "molestie a iaculis in," "convallis eu nunc." "Nullam sit amet lorem at purus ullamcorper rutrum sit amet eu orci." "In vel nulla in elit convallis varius nec a lacus." "Nunc ac nunc nisl," "quis condimentum risus." "Donec tempus facilisis odio ac rutrum." "Etiam sed mollis tortor." "Sed ac lorem at urna lacinia porta." "Curabitur vestibulum metus eu augue viverra et accumsan augue ornare." "Phasellus mollis mauris erat," "ut vestibulum arcu." "Praesent pretium condimentum nisl," "id rutrum quam mattis ac." "Nunc vitae arcu leo," "sit amet pretium dui." "Mauris vehicula velit sem," "lobortis cursus tellus." "Ut eleifend dapibus tellus," "in euismod ipsum dapibus at." "Nulla convallis blandit nunc quis lobortis." "Praesent placerat mattis mauris," "sed luctus nisi ultricies vel." "In tristique laoreet tortor sed porta." "Aenean hendrerit orci non est viverra sit amet blandit lorem scelerisque." "Nulla in nulla lacus." "Pellentesque ac enim quam," "id aliquet justo." "Suspendisse diam metus," "placerat eu volutpat ut," "euismod non erat." "Phasellus luctus odio vel orci dapibus sed varius lacus aliquam." "Sed tincidunt feugiat diam vel ornare." "Fusce quis volutpat magna." "Cras malesuada elit at leo fringilla imperdiet et sed libero." "Morbi sit amet tincidunt ligula." "Ut id tempus tellus." "Vestibulum id rhoncus risus." "Ut non magna a lorem semper hendrerit." "Cras vulputate cursus eros," "sit amet tincidunt ligula rutrum fringilla." "Cras mauris nisl," "fringilla sed egestas vel," "accumsan non mauris." "Integer commodo," "tellus consequat mollis pulvinar," "dui elit faucibus arcu," "in lacinia nisi mi eget ligula." "Nulla malesuada semper tortor eu lacinia." "Vestibulum at varius sem." "Vivamus posuere ligula ac tellus faucibus lobortis." "Maecenas sagittis arcu in odio sodales aliquam." "Mauris at felis augue." "Donec venenatis interdum cursus." "Vivamus ante mauris," "dignissim sit amet laoreet vel," "vehicula vel arcu." "Sed facilisis nulla sit amet massa posuere faucibus." "Aliquam elementum elementum felis lacinia vehicula." "Maecenas metus justo," "viverra et pulvinar ut," "venenatis a mauris." "Duis eu ultricies elit." "Donec gravida condimentum magna," "sodales eleifend risus fermentum eget." "Nunc elit urna," "elementum in adipiscing sit amet," "cursus in dui." "Cras at risus non ligula scelerisque scelerisque dictum sed lorem." "Sed semper lorem id magna consequat ut ultricies nunc consectetur." "Suspendisse vehicula," "erat sit amet tempor auctor," "augue risus interdum nunc," "eu adipiscing tortor nisi tempus sem." "Etiam malesuada ipsum ut lectus ultrices faucibus." "Curabitur tellus tellus," "pretium vel accumsan nec," "eleifend nec elit." "Cras semper fermentum ipsum," "sit amet gravida lectus hendrerit non." "Nullam pretium velit vel dolor suscipit in blandit nisi scelerisque." "Curabitur viverra ipsum vitae odio placerat pulvinar." "In cursus elit id turpis aliquam ornare." "Donec consequat turpis feugiat elit tempor sed lobortis arcu aliquam." "Curabitur sit amet sagittis purus." "Curabitur tincidunt arcu sed odio suscipit elementum." "Sed ut nibh a ante adipiscing auctor eleifend a nisi." "Proin sollicitudin sollicitudin blandit." "Ut commodo auctor imperdiet." "Fusce eleifend," "neque non ullamcorper elementum," "felis ipsum cursus libero," "et bibendum augue mi sed ligula." "Curabitur sodales euismod diam vitae dictum." "Maecenas vestibulum," "mi non commodo sollicitudin," "massa quam iaculis odio," "vel tristique tellus nibh vitae tortor." "Vestibulum ut odio eget nisi ultricies auctor ac vitae lorem." "Sed eu lorem elit." "Aliquam erat volutpat." "Suspendisse fermentum nulla lorem." "Morbi eleifend dolor a ligula feugiat vulputate." "Curabitur laoreet auctor quam," "at tincidunt metus cursus in." "Nam aliquam volutpat porttitor." "Aenean id cursus eros." "Vestibulum vel neque diam," "non posuere quam." "Quisque leo sapien," "fermentum quis congue vel," "fringilla vitae arcu." "Mauris semper turpis ac libero volutpat dapibus." "Duis nisi enim," "faucibus eget tempus at," "ultricies nec tellus." "Cras id lectus nisl," "id cursus orci." "Etiam sapien nisl," "mollis sit amet volutpat vel," "volutpat nec nisi." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Nunc ac purus nec leo vestibulum porttitor a blandit arcu." "Proin nec rhoncus neque." "Pellentesque vestibulum pharetra vestibulum." "Sed molestie elit eu dui mollis varius." "Etiam porttitor dictum mi." "Maecenas suscipit sagittis nunc nec porta." "Sed et arcu sit amet sapien convallis vestibulum." "Cras egestas accumsan accumsan." "Quisque accumsan tortor et erat mattis sollicitudin." "Sed molestie turpis eget sem tincidunt nec convallis mi congue." "Etiam ac egestas lorem." "Proin sollicitudin est nec sem vehicula tincidunt." "Proin quis purus ut nisl dapibus euismod." "Class aptent taciti sociosqu ad litora torquent per conubia nostra," "per inceptos himenaeos." "Nunc lacus ante," "rutrum sed lacinia ut," "fermentum id purus." "Nulla facilisi." "Suspendisse sed lectus nec libero lacinia aliquam." "Sed id ipsum sapien," "id varius ipsum." "Vestibulum at nulla mi," "eget accumsan nibh." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Donec lobortis ultrices iaculis." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec placerat eros ac arcu pellentesque laoreet." "Praesent sagittis pellentesque dictum." "Nulla in metus eget metus vulputate tempus." "Mauris dictum elementum commodo." "Donec tellus est," "suscipit iaculis venenatis ut," "pulvinar sit amet turpis." "Mauris et elit non magna consectetur bibendum." "Mauris pellentesque dui eu libero consectetur fringilla." "Aenean vel ipsum urna." "Maecenas pulvinar sollicitudin magna molestie interdum." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Cum sociis natoque penatibus et magnis dis parturient montes," "nascetur ridiculus mus." "Mauris viverra pretium tortor eget gravida." "Integer commodo molestie turpis quis elementum." "Aenean placerat," "purus eu rhoncus ornare," "ligula nulla consequat dui," "vitae scelerisque augue massa pulvinar quam." "Suspendisse ultricies ultricies neque sit amet luctus." "Ut bibendum leo a lectus blandit eget hendrerit ligula consequat." "In hac habitasse platea dictumst." "Cras tempor," "eros non posuere pulvinar," "magna nisi consectetur lacus," "in ullamcorper ante lectus non justo." "Sed porttitor libero vel nisl bibendum dapibus." "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." "Fusce vitae faucibus mi." "Etiam in libero lobortis nisl lobortis lobortis blandit ut dolor." "Morbi auctor iaculis nulla at venenatis." "Morbi augue nibh," "lobortis ut bibendum id," "pretium nec felis." "Lorem ipsum dolor sit amet," "consectetur adipiscing elit." "Maecenas molestie," "ante nec porttitor bibendum," "tortor tortor aliquet arcu," "sit amet tempus ligula diam sit amet felis." "Phasellus semper posuere augue id rhoncus." "Cras dolor tellus," "posuere id varius in," "hendrerit eu tellus." "Proin vitae turpis non nulla ullamcorper tristique." "In hac habitasse platea dictumst." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce sed justo quis diam lacinia imperdiet nec eu tortor." "Nullam at quam non metus pretium luctus in ac dui." "Vivamus libero nibh," "adipiscing et tristique non," "accumsan quis sem." "Aliquam condimentum ligula eu lorem sodales fermentum." "Suspendisse ac urna vitae est pharetra vulputate at vel lacus." "Sed vel lorem consequat sapien tristique dignissim." "Praesent sodales fermentum est id iaculis." "Sed sollicitudin ullamcorper suscipit." "Morbi felis massa," "ultricies ac ultrices in," "malesuada volutpat sapien." "Vestibulum vitae egestas arcu." "Suspendisse ac facilisis dui." "Sed lobortis eros ac est adipiscing laoreet." "Nullam urna arcu," "dapibus quis commodo vulputate," "dictum aliquet mi." "Morbi sit amet erat sit amet velit pellentesque aliquam." "Sed eu arcu turpis," "ut vulputate quam." "Nullam ultrices condimentum tortor quis scelerisque." "Morbi lacinia lacinia metus," "vel elementum ante pharetra at." "Fusce mollis magna vel nisi gravida ut fringilla tortor rhoncus." "Aenean aliquam feugiat sapien ac euismod." "Nullam non est tortor." "Pellentesque vestibulum porta lorem ut adipiscing." "Nunc eget enim et dui pellentesque egestas." "Suspendisse ornare mollis odio," "tincidunt tincidunt sapien egestas non." "Cras vulputate," "nisi sit amet vehicula facilisis," "sapien neque adipiscing nisi," "at volutpat est nibh euismod ipsum." "Maecenas scelerisque elementum leo," "eget semper libero auctor a." "Proin vel odio sit amet tortor adipiscing facilisis non vel elit." "Aliquam eget leo libero," "sit amet vulputate est." "Maecenas ut turpis nec est tincidunt rutrum." "Nam laoreet," "justo in dictum tincidunt," "nisi est porttitor diam," "eget pretium libero est dictum odio." "Fusce justo felis," "tempor vitae mattis sit amet," "pretium sagittis sem." "Mauris risus erat," "volutpat sit amet aliquam cursus," "ultricies a nulla." "Aliquam at erat felis." "In imperdiet lacinia purus at luctus." "Suspendisse rutrum lacinia ullamcorper." "Vestibulum tincidunt sodales sollicitudin." "Aliquam sit amet velit purus," "in venenatis nisl." "Vivamus vitae magna quis nisi varius imperdiet ut quis tortor." "Ut pulvinar," "mi a volutpat blandit," "justo tellus tincidunt massa," "id vulputate elit nunc at risus." "Integer venenatis rhoncus enim." "In pretium adipiscing justo," "sed scelerisque urna fringilla sit amet." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam placerat," "est nec ornare convallis," "ante lacus vestibulum quam," "sit amet interdum magna purus ac eros." "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam at adipiscing turpis." "Curabitur lobortis velit ut ligula commodo lacinia." "Nullam pellentesque," "velit in convallis consequat," "ipsum massa malesuada lacus," "sit amet sodales odio enim vitae mauris." "Integer eget risus quam." "Maecenas quis risus sit amet risus egestas pulvinar." "Proin nec consectetur est." "Praesent ultricies felis a nisi aliquet pulvinar." "Quisque nec elit at lorem porta malesuada." "Phasellus ac nulla eros," "eget egestas lectus." "Proin a lacus orci," "ornare vehicula posuere." 05686F73743105626C616174026E6C000068000100000E10000A000A00144FFFFF20EE64 host1.blaat.nl. 3600 IN NID 10 0014:4fff:ff20:ee64 05686F73743105626C616174026E6C000069000100000E100006000A0A010200 host1.blaat.nl. 3600 IN L32 10 10.1.2.0 05686F73743105626C616174026E6C00006A000100000E10000A000A20010DB811401000 host1.blaat.nl. 3600 IN L64 10 2001:0db8:1140:1000 05686F73743105626C616174026E6C00006B000100000E100018000A0B6C36342D7375626E65743105626C616174026E6C00 host1.blaat.nl. 3600 IN LP 10 l64-subnet1.blaat.nl. 03636161000101000100000E1000150005697373756563612E6578616D706C652E6E6574 caa. 3600 IN CAA 0 issue "ca.example.net" 03636161000101000100000E1000220005696F6465666D61696C746F3A7365637572697479406578616D706C652E636F6D caa. 3600 IN CAA 0 iodef "mailto:security@example.com" 03636161000101000100000E1000200005696F646566687474703A2F2F696F6465662E6578616D706C652E636F6D2F caa. 3600 IN CAA 0 iodef "http://iodef.example.com/" 03636161000101000100000E1000250005697373756563612E6578616D706C652E6E65743B206163636F756E743D323330313233 caa. 3600 IN CAA 0 issue "ca.example.net; account=230123" 03636161000101000100000E1000200005697373756563612E6578616D706C652E6E65743B20706F6C6963793D6576 caa. 3600 IN CAA 0 issue "ca.example.net; policy=ev" 03636161000101000100000E10000C8003746273556E6B6E6F776E caa. 3600 IN CAA 128 tbs "Unknown" 03636161000101000100000E100046020461757468303E3039060A2B06010401D67902030106096086480165030402010420614829C81B958911F81164D40DCDBFD49D66CEB3B3442FF6C9C3A912F9497566020100 caa. 3600 IN CAA 2 auth "0>09\006\010+\006\001\004\001\214y\002\003\001\006 `\134H\001e\003\004\002\001\004 aH)\200\027\149\137\017\248\017d\212\013\205\191\212\157f\206\179\179D/\246\201\195\169\018\249Iuf\002\001\000" 05657569343800006C000100000E10000600005E90012A eui48. 3600 IN EUI48 00-00-5e-90-01-2a 05657569363400006D000100000E10000800005EEF0000002A eui64. 3600 IN EUI64 00-00-5e-ef-00-00-00-2a 0474787431000010000100000E100009016102626203636363 txt1. 3600 IN TXT "a" "bb" "ccc" 0474787432000010000100000E100009016102626203636363 txt2. 3600 IN TXT "a" "bb" "ccc" 0474787433000010000100000E10001003612062026262062063632063200120 txt3. 3600 IN TXT "a b" "bb" " cc c " " " 0474787434000010000100000E10001003612062026262062063632063200120 txt4. 3600 IN TXT "a b" "bb" " cc c " " " 056162626579076578616D706C6503636F6D00001D000100000E1000100067251288B2F08C69741F56009A6E60 abbey.example.com. 3600 IN LOC 40 32 24.716 N 105 04 25.770 W 1208m 600000m 2000m 1m 05616272616D076578616D706C6503636F6D00001D000100000E1000100015572588B2F08C69741F56FFFFFFFB abram.example.com. 3600 IN LOC 40 32 24.716 N 105 04 25.770 W 42849672.91m 1000m 500000m 2000m 056164646965076578616D706C6503636F6D00001D000100000E100010009898986CB02700A69FB200FFFFFFFB addie.example.com. 3600 IN LOC 90 00 00.000 S 180 00 00.000 E 42849672.91m 9000000m 9000000m 9000000m 056164646965076578616D706C6503636F6D00001D000100000E100010009999896CB02700A69FB200FFFFFFFB addie.example.com. 3600 IN LOC 90 00 00.000 S 180 00 00.000 E 42849672.91m 90000000m 90000000m 80000000m 06616C66726163076578616D706C6503636F6D00001D000100000E100010001216128895440069782D80009A6EA0 alfrac.example.com. 3600 IN LOC 40 00 00.000 N 105 00 00.000 W 1208.64m 1m 10000m 1m 07616C6C73706563076578616D706C6503636F6D00001D000100000E1000100067252388B2F08C69741F56009A6E60 allspec.example.com. 3600 IN LOC 40 32 24.716 N 105 04 25.770 W 1208m 600000m 2000m 20m 0663757274696E03656475026175076578616D706C6503636F6D00001D000100000E10001000121612791B7D2898E6486800989A68 curtin.edu.au.example.com. 3600 IN LOC 32 07 19.000 S 116 02 25.000 E 10m 1m 10000m 1m 0672777930346C0D6C6F67616E2D616972706F727406626F73746F6E076578616D706C6503636F6D00001D000100000E100010002516128916CB3C70C310DF00988550 rwy04l.logan-airport.boston.example.com. 3600 IN LOC 42 21 28.764 N 71 00 51.617 W -44m 2000m 10000m 1m 0D63616D6272696467652D6E6574036B656903636F6D076578616D706C6503636F6D00001D000100000E1000100033161289172DD070BE15F000988D20 cambridge-net.kei.com.example.com. 3600 IN LOC 42 21 54.000 N 71 06 18.000 W -24m 30m 10000m 1m 066C6F696F7368036B656903636F6D076578616D706C6503636F6D00001D000100000E100010001224128917069070BF2DD800988D20 loiosh.kei.com.example.com. 3600 IN LOC 42 21 43.952 N 71 05 06.344 W -24m 1m 200m 1m 086D6F726566726163076578616D706C6503636F6D00001D000100000E100010003152428895440069782D80009A6EA0 morefrac.example.com. 3600 IN LOC 40 00 00.000 N 105 00 00.000 W 1208.64m 0.30m 5m 4m 086E65676174697665076578616D706C6503636F6D00001D000100000E10001000121612776ABC009687D28000895C83 negative.example.com. 3600 IN LOC 40 00 00.000 S 105 00 00.000 E -9978.85m 1m 10000m 1m 057069706578036E6574076578616D706C6503636F6D00001D000100000E100010001216128B3556C88008165000989A68 pipex.net.example.com. 3600 IN LOC 52 14 05.000 N 00 08 50.000 E 10m 1m 10000m 1m 066E6F68707670076578616D706C6503636F6D00001D000100000E1000100067161288B2F08C69741F56009A6E60 nohpvp.example.com. 3600 IN LOC 40 32 24.716 N 105 04 25.770 W 1208m 600000m 10000m 1m 0A6E6F6D696E6E6F736563076578616D706C6503636F6D00001D000100000E100010001216128895440069782D80009A6E60 nominnosec.example.com. 3600 IN LOC 40 00 00.000 N 105 00 00.000 W 1208m 1m 10000m 1m 056E6F736563076578616D706C6503636F6D00001D000100000E1000100012161288B2900069748400009A6E60 nosec.example.com. 3600 IN LOC 40 32 00.000 N 105 04 00.000 W 1208m 1m 10000m 1m 086E6F737A68707670076578616D706C6503636F6D00001D000100000E1000100012161288B2F08C69741F56009A6E60 noszhpvp.example.com. 3600 IN LOC 40 32 24.716 N 105 04 25.770 W 1208m 1m 10000m 1m 0474787435000010000100000E10001918546573742D537472696E6722546573742D537472696E6722 txt5. 3600 IN TXT "Test-String\"Test-String\"" 0474787436000010000100000E100108FF763D444B494D313B206B3D7273613B20673D2A3B20733D656D61696C3B20683D736861313B20743D733B20703D4D4947664D413047435371475349623344514542415155414134474E4144434269514B42675143333365774B78425A4152534150625439364970572F6B334467644E7546456238393665496638304863567857772B7732472B31735163556A785755534770367954544D456C73366E3774746869786964795269452F61574F793369632F4B2B39323750754379304D315A583251593867566D4F484A6259543371425138746F5172764749657238665171714A497A4F2F4154566248785838422F7A3050736D4749327878714379586B4F77074944415141423B txt6. 3600 IN TXT "v=DKIM1; k=rsa; g=*; s=email; h=sha1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC33ewKxBZARSAPbT96IpW/k3DgdNuFEb896eIf80HcVxWw+w2G+1sQcUjxWUSGp6yTTMEls6n7tthixidyRiE/aWOy3ic/K+927PuCy0M1ZX2QY8gVmOHJbYT3qBQ8toQrvGIer8fQqqJIzO/ATVbHxX8B/z0PsmGI2xxqCyXkOw" "IDAQAB;" 076578616D706C6503636F6D00003E000100000E10000C000000420003000460000008 example.com. 3600 IN CSYNC 66 3 A NS AAAA 3839666536636262396539333361643062386234666139343036363437346530393165653862653639366332323462316331363738666365630B5F6F70656E7067706B657900003D000100000E1008AD99020D044D6CF351011000AE2731A071CAE66040331DCFFFBC1ABAEA01FBA2B3341AD29F4191E1E2E47514CC595E5D3B59EBD460DB81CB04E98A753DAE96354374B8C3A420364960A6C6875E66CEA7216327C16996557C4D13E25E236B3714E932795BE889E8B33A295FAF6D9015474CFE9C2643603F1E91E01334011A8419098E2FC9807285B2195CDBB1A9AE1916A26B9E33B3F91CDE2F728AA133464A1099FC2BEECAF8F67EE03A999AA97BE89CE4A252F804CE27A9EFB7A631CA956BFA99C51D6BECA52AF39A93353AAC43097671074A4BB5B039EB86E99209989D5B6A4AE22B32C1605E712072926095B4640DB4B4D16B54A8139048E25EF0098781E5244222DF9B6A6BF2335942527356A29E1063C5BC1297C051AB969A3E0C01FB15E20EA63A06B416D6C96F9794C5D80E97AFB249D2B907DC46605F1001019DD627744BC2AD73F239CD623F945BF9922EC6CEB607CE8818455173199DE1EF555BF3E85E9702DCAB7A30E5E6C0F6827CE6D550DF2BA4FA6EF2ED47BCEB916ADED25A727039A09942A0684897CDF2EFC13F5169693C19DA94D861BE40E8B07FE853D2978389EBA876332BE7DB146F1EC6A957BFE39AC90514B1F870A5D899BB4E1D97AF49294AD09DEDE6D5A04ABDC29332BBE74CF70393B626C0F4FDFEF6EE2B01D8A6A40750C446E159B44D0A783611585385BA912B771364B6EDA8A69680026A6BF2105692FD6F9A6CF19E09550011010001B42357696C6C656D20546F6F726F70203C77696C6C656D406E6C6E65746C6162732E6E6C3E89023E04130102002805024D6CF351021B23050909660180060B090807030206150802090A0B0416020301021E01021780000A0910E5F8F8212F77A4985D5B0FFE289B97F7D8E4E5ABC5378B7D6DB7C395F98C3D787E3FB598638C41E889AEA40CBE5B3001D947C7184C929EFE6AD1E32AE9ACB0802823870BB149C3A7BDFBB591601D8C099B3BDD3B3DDCCB03B4D611DC741D9C49C3B5B87654A21DFB618CFE6087F172B3DC663A9F4C0DAD81476EBE5B6FD966164383BC39303A66272A3FE6A0B9A813D4E249C6B9DACF748A49A979B3FA24036E47099E1D24ED3310CC04341E0BF3AFD4E365A04CD075B7D1DFF607A3B8738ABF885A7DC959251785CA626B8C9B476F44439653615437C715B1A586236132E1F89B0E4A9D2D84E403E6733C90A96EC041D14994B19EC0D23153BB94D9059851901353DDB60B9C42EDF715AF6EE4EF111E5AFD56092A1F7662A72AF80F8768425324A8A7335C805A49B1C4D3DC279B69114A5C592638FF22A963BD34D2D4BCC319972B99C197FA31C21B89E627F36CE811297FF707F53E6C258DAB407B7D618EC296317A565C2C8B740A39244D8F82095842F6F84448DCE29BB292C7E15072B00C04F2A0F4CD700F2E7348B703F74BCB8D5F4235FBD2824F515852EA9BE06255F88D81A5046D1F730E9BF103B3335F5F03D74AC2EC65814DD920E985B57A3B4E0C699F3103AB033CCF36A5B037B3668365484B58A4462D79414D27170C9DB4285BEC72D24A9654354B996D13C14B2994F6725E36FB766D57A79ED721C3CA248221390D7D6FA65F867FA6FA1369B9020D044D6CF351011000A4ECE215B3F782BAE8FB6C1E3FDC06D1E6242271F41B073FC7A852377888147B7168134E0B753C608D07308F188B9489AF34F1DAB1BB52FC3968D0A705C30A35EA0226E7D2608931138D56CCF124A9236276462863A8F1C83B3A640167211DEAAADFC557FF7701CBB1D413259CF3F5B18EC6E615000BB4AB73C75B980615CFA9A7778DE3BAB318CC448ECA044E3FDC95AC63AA2B28846D77FE190FE8FBC3A03ECE39D38675040FF1BE064410FAAD9FC5A8C2EFE02F34CC39F3087D6B2E934642995FD5A9F2D3A59302C0CBE1FEA01002C7EB64C8C4E5F853B5B17AEBC7C72297380B8DF9EC7F32F1766B3D76E186DC582EEDD5DA955B7CACDB4CCA69E99E9B25D22B157A68C9F828170917709D335A000590F2BE22FD7A5ED0FF2432969642E84978428C1A3C8380BB339D21CE9CB8CE8F4D6BC102B70A56042159F26C85F78599F931A73FE159CF4AE34C828E66FE84F648AF745B5D2B1022D514901A8E48C1CDAE82205FE21A58CAB77BBC8C1DD32A94AAF4954E7695F05B7C40A395E07F34EE0ADD218904FCD380BB737BE2EC5B148942840C58ABFA212C10AD6DEBB26523AA040DAD2191397DEB472F0DBEECEB6AFB386B7166754A47216C3629F63633A02C5FD1C116E46C8A682A163426E556EA5C0ECDB472429C0D51BEA5E583F889E70F831251E8B31C231D2F946DE8C31A6550F884EA961DFDF75A2C3E366AD48CB5001101000189022404180102000F05024D6CF351021B0C050909660180000A0910E5F8F8212F77A498ED740FF8E1CD5BAA631D75DFF18A2AA27DEF9C416118D178092A1C327C3CC641FD74BC976F3A1B5DA52B95CFEA68618B31F2AAEE6F82F30ED934EB98DE0105878A4814FC811139ED4B3AA356E3C962C422F0BE4D3D59F8E9E64913964287282A6519CD0B1F3F03615AEA223B276EFCBC5CD4921787C17F70B0967AEFDCC5462344399B4180EFD75C1185A83D6B691E660F8210E76624F1A87D988BAF9367D26B84DCB5DF8C7303C2947C4C238734ADDCCB7970F6C192F3F5DD5F75127E289F26B2FDA0562B44A032ED45AE1FC855DCA67D54125CCD36C16F207E4389B0F4E5FF45FE60328A53B322534868FF0D3D8ACA0BB0781EE1FE62F2C0E6FC468F57CCF795CED9F2B27E3CB6D16FC417BD4CA969A364DC649EA5C57F0325205EAA77FD9DF84431C3BE5329773828D0E32C0011CBB885E7131B44B1FC5267B0B3FF125E7255C233239FC6E8C8844D613DAB76833E49A7D947FAE6B3CEB35B2DDCE2A0F71F384F74FECDA521AE07CE3332E5EB2C79D100AD8F9ACE2A0067C1B590F61DD18AB021D66605AA745B5944D830DE4C9F61DCC889354B1A6203D918A5C2317B6D5F188D8D0CF6DAB11C9578F6F41D3089871BBB2963B11459AB0B4C4220DDAFB14C20ECBACAB1CEC60A522ECC883BD1D539CA61CDD4933C412FAFD631D03EFF23B23A4164729E32236947F622FE79A17493154E9A30B257E3FDF97F0B2E1B8C65FC85BD98 9fe6cbb9e933ad0b8b4fa94066474e091ee8be696c224b1c1678fcec._openpgpkey. 3600 IN OPENPGPKEY mQINBE1s81EBEACuJzGgccrmYEAzHc//vBq66gH7orM0GtKfQZHh4uR1FMxZXl07WevUYNuBywTpinU9rpY1Q3S4w6QgNklgpsaHXmbOpyFjJ8FpllV8TRPiXiNrNxTpMnlb6InoszopX69tkBVHTP6cJkNgPx6R4BM0ARqEGQmOL8mAcoWyGVzbsamuGRaia54zs/kc3i9yiqEzRkoQmfwr7sr49n7gOpmaqXvonOSiUvgEziep77emMcqVa/qZxR1r7KUq85qTNTqsQwl2cQdKS7WwOeuG6ZIJmJ1bakriKzLBYF5xIHKSYJW0ZA20tNFrVKgTkEjiXvAJh4HlJEIi35tqa/IzWUJSc1ainhBjxbwSl8BRq5aaPgwB+xXiDqY6BrQW1slvl5TF2A6Xr7JJ0rkH3EZgXxABAZ3WJ3RLwq1z8jnNYj+UW/mSLsbOtgfOiBhFUXMZneHvVVvz6F6XAtyrejDl5sD2gnzm1VDfK6T6bvLtR7zrkWre0lpycDmgmUKgaEiXzfLvwT9RaWk8GdqU2GG+QOiwf+hT0peDieuodjMr59sUbx7GqVe/45rJBRSx+HCl2Jm7Th2Xr0kpStCd7ebVoEq9wpMyu+dM9wOTtibA9P3+9u4rAdimpAdQxEbhWbRNCng2EVhThbqRK3cTZLbtqKaWgAJqa/IQVpL9b5ps8Z4JVQARAQABtCNXaWxsZW0gVG9vcm9wIDx3aWxsZW1AbmxuZXRsYWJzLm5sPokCPgQTAQIAKAUCTWzzUQIbIwUJCWYBgAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ5fj4IS93pJhdWw/+KJuX99jk5avFN4t9bbfDlfmMPXh+P7WYY4xB6ImupAy+WzAB2UfHGEySnv5q0eMq6aywgCgjhwuxScOnvfu1kWAdjAmbO907PdzLA7TWEdx0HZxJw7W4dlSiHfthjP5gh/Fys9xmOp9MDa2BR26+W2/ZZhZDg7w5MDpmJyo/5qC5qBPU4knGudrPdIpJqXmz+iQDbkcJnh0k7TMQzAQ0Hgvzr9TjZaBM0HW30d/2B6O4c4q/iFp9yVklF4XKYmuMm0dvREOWU2FUN8cVsaWGI2Ey4fibDkqdLYTkA+ZzPJCpbsBB0UmUsZ7A0jFTu5TZBZhRkBNT3bYLnELt9xWvbuTvER5a/VYJKh92Yqcq+A+HaEJTJKinM1yAWkmxxNPcJ5tpEUpcWSY4/yKpY7000tS8wxmXK5nBl/oxwhuJ5ifzbOgRKX/3B/U+bCWNq0B7fWGOwpYxelZcLIt0CjkkTY+CCVhC9vhESNzim7KSx+FQcrAMBPKg9M1wDy5zSLcD90vLjV9CNfvSgk9RWFLqm+BiVfiNgaUEbR9zDpvxA7MzX18D10rC7GWBTdkg6YW1ejtODGmfMQOrAzzPNqWwN7Nmg2VIS1ikRi15QU0nFwydtChb7HLSSpZUNUuZbRPBSymU9nJeNvt2bVenntchw8okgiE5DX1vpl+Gf6b6E2m5Ag0ETWzzUQEQAKTs4hWz94K66PtsHj/cBtHmJCJx9BsHP8eoUjd4iBR7cWgTTgt1PGCNBzCPGIuUia808dqxu1L8OWjQpwXDCjXqAibn0mCJMRONVszxJKkjYnZGKGOo8cg7OmQBZyEd6qrfxVf/dwHLsdQTJZzz9bGOxuYVAAu0q3PHW5gGFc+pp3eN47qzGMxEjsoETj/claxjqisohG13/hkP6PvDoD7OOdOGdQQP8b4GRBD6rZ/FqMLv4C80zDnzCH1rLpNGQplf1any06WTAsDL4f6gEALH62TIxOX4U7WxeuvHxyKXOAuN+ex/MvF2az124YbcWC7t1dqVW3ys20zKaememyXSKxV6aMn4KBcJF3CdM1oABZDyviL9el7Q/yQylpZC6El4QowaPIOAuzOdIc6cuM6PTWvBArcKVgQhWfJshfeFmfkxpz/hWc9K40yCjmb+hPZIr3RbXSsQItUUkBqOSMHNroIgX+IaWMq3e7yMHdMqlKr0lU52lfBbfECjleB/NO4K3SGJBPzTgLtze+LsWxSJQoQMWKv6ISwQrW3rsmUjqgQNrSGROX3rRy8Nvuzravs4a3FmdUpHIWw2KfY2M6AsX9HBFuRsimgqFjQm5VbqXA7NtHJCnA1RvqXlg/iJ5w+DElHosxwjHS+UbejDGmVQ+ITqlh3991osPjZq1Iy1ABEBAAGJAiQEGAECAA8FAk1s81ECGwwFCQlmAYAACgkQ5fj4IS93pJjtdA/44c1bqmMddd/xiiqife+cQWEY0XgJKhwyfDzGQf10vJdvOhtdpSuVz+poYYsx8qrub4LzDtk065jeAQWHikgU/IEROe1LOqNW48lixCLwvk09Wfjp5kkTlkKHKCplGc0LHz8DYVrqIjsnbvy8XNSSF4fBf3Cwlnrv3MVGI0Q5m0GA79dcEYWoPWtpHmYPghDnZiTxqH2Yi6+TZ9JrhNy134xzA8KUfEwjhzSt3Mt5cPbBkvP13V91En4onyay/aBWK0SgMu1Frh/IVdymfVQSXM02wW8gfkOJsPTl/0X+YDKKU7MiU0ho/w09isoLsHge4f5i8sDm/EaPV8z3lc7Z8rJ+PLbRb8QXvUypaaNk3GSepcV/AyUgXqp3/Z34RDHDvlMpdzgo0OMsABHLuIXnExtEsfxSZ7Cz/xJeclXCMyOfxujIhE1hPat2gz5Jp9lH+uazzrNbLdzioPcfOE90/s2lIa4HzjMy5essedEArY+azioAZ8G1kPYd0YqwIdZmBap0W1lE2DDeTJ9h3MiJNUsaYgPZGKXCMXttXxiNjQz22rEclXj29B0wiYcbuyljsRRZqwtMQiDdr7FMIOy6yrHOxgpSLsyIO9HVOcphzdSTPEEvr9Yx0D7/I7I6QWRynjIjaUf2Iv55oXSTFU6aMLJX4/35fwsuG4xl/IW9mA== 04746573740361646401310000FA00FF00000000003A08686D61632D6D6435077369672D616C670372656703696E74000000583FEEC3012C0010964109B23C0178075FBFD446B3ACD9AE3BFB00000000 test.add.1. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480584899 300 16 lkEJsjwBeAdfv9RGs6zZrg== 15355 NOERROR 0 06626C61626C610000FA00FF00000000003A08686D61632D6D6435077369672D616C670372656703696E74000000583FEF34012C001093D99232CDADE6FAB9155D83BD0BD1EAE75F00000000 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585012 300 16 k9mSMs2t5vq5FV2DvQvR6g== 59231 NOERROR 0 06626C61626C610000FA00FF00000000003A08686D61632D6D6435077369672D616C670372656703696E74000000583F0000012C0010B017F1D34191B3EB5F4539B8B910A3C964BF00000000 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480523776 300 16 sBfx00GRs+tfRTm4uRCjyQ== 25791 NOERROR 0 06626C61626C610000FA00FF00000000002A08686D61632D6D6435077369672D616C670372656703696E74000000583FF0E9012C0000E92C00100000 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585449 300 0 59692 BADSIG 0 06626C61626C610000FA00FF00000000003A08686D61632D6D6435077369672D616C670372656703696E74000000583FF0F6012C0010EB0BE51BCDAC1151F2AAC4ED04BBD14365BC00000000 blabla. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1480585462 300 16 6wvlG82sEVHyqsTtBLvRQw== 26044 NOERROR 0 unbound-1.13.1/testdata/iter_prefetch.rpl0000644000175000017500000001056014010434640020054 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" prefetch: "yes" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver prefetch of almost expired data ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 50 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; after 1800 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 1800 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 1800 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1800 IN A 1.2.3.4 ENTRY_END ; after 1440 we are 360 seconds before the expiry ; (the authority changes behind the scenes to detect new lookup) STEP 50 TIME_PASSES ELAPSE 1440 STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 360 IN A 10.20.30.40 SECTION AUTHORITY example.com. 360 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 360 IN A 1.2.3.4 ENTRY_END STEP 80 TRAFFIC ; let traffic flow for prefetch to happen ; above a cache reply with 10% of the original TTL ; but the actual cache is changed, try to get that STEP 120 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY ; NS rrset picked up from parent-NS (the child-NS timed out at now+prefetch) example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/chaos_trustanchor.rpl0000644000175000017500000001052714010434640020765 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" hide-trustanchor: no val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test chaos trustanchor query ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION trustanchor.unbound. CH TXT ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION trustanchor.unbound. CH TXT SECTION ANSWER trustanchor.unbound. CH TXT "example.com. 2854" ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+008+55566.private0000644000175000017500000000165314010434640021503 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 8 (RSASHA256) Modulus: 26D8vvf2LSaA3ae4r9uHG7fAWflR32crb5dSZlCU9QRlQLlhm+bWt8yYRZMYGfzt8XES7+SMVkcnnkkvOqxtulUctuYoJNPaBhHYVXZYMpE4Yq5htWQkhd0oCMnQ424rnTs2Kdi+VZcijEefbYoBY533AqBJM0cGWYaRf62zeGE= PublicExponent: AQAB PrivateExponent: cWzk2uNIWe0GpHKYKQog7qmpR05BgDTR8+GchoabRyar/A9BX7iJr4aUJWpgChvb7tNMymOoLm61AUQehhjC2YFPAGefSKfMIBq+1IlYOXVS8D1febSKbGLME8ZxjPhl3hn3KI7ohaPJFHObpYTsWGrMKN8fBvx1bTU1ez29WVk= Prime1: 9HItw7KjTC0YwzcizZwm4QrnWhqQ/2wWZ1CR+tCYotMCnmHmFc9mhwPZyd0nvTe2D3f/1v0detIOheh4RZHdnw== Prime2: 5gKEulMicktumAz8UgTVFPfX77qGfn8Yg6ZAImscWpDAvBpcX4X9x5BRIGCGwKBew8kPzSAMc+7gSh0JgA7p/w== Exponent1: eZgyW56IzGPCZZkPnueGD3u1CYUdi3Dg1BOoCfOpeZUtQEvCgCbjAVZRB7ETC3SjA57VjMPr3iSPRN0WtsSQUQ== Exponent2: CZPnRP77Ozkq5Mf9pcivuszLQB9LRG80bR76IrTFHHxUmkCawhuJQssepbN/SPwklhCESO1ht14mFs/4uk1krw== Coefficient: 8Mq70OxnmtJ4jqyNuNQV7UmpLU7Ts5aMuDEofNka9kHjE5br4q6lH+6TmFshEThJk/YKHGUU4T5Fx0hsnlqA+g== unbound-1.13.1/testdata/val_refer_unsignadd.rpl0000644000175000017500000003124714010434640021237 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" access-control: 127.0.0.1 allow_snoop target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a referral with unsigned additional ; but the additional record is from a signed zone, ; and a proper proof for no DS or DSNKEY types is forthcoming. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY ; Skip .com, to provide unsigned referral A record for ns.example.net ; and go straight to example.com. example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.net IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.net IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFEsWNXjGDFwH/0NGClonWUQlBaiFAhR/dt0asVj8M0VKs7PdTEKN/Y9i5w== ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to example.com. DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFEsWNXjGDFwH/0NGClonWUQlBaiFAhR/dt0asVj8M0VKs7PdTEKN/Y9i5w== ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 11.12.13.14 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFC6+BbFcL95vH6SOhMLGotcBospIAhUAhjfof+1VY5GsCp5b9UOD7UydBzI= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFEsWNXjGDFwH/0NGClonWUQlBaiFAhR/dt0asVj8M0VKs7PdTEKN/Y9i5w== ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; example.com zone in ns.example.net. ; response to example.com. DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFEsWNXjGDFwH/0NGClonWUQlBaiFAhR/dt0asVj8M0VKs7PdTEKN/Y9i5w== ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 11.12.13.14 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFC6+BbFcL95vH6SOhMLGotcBospIAhUAhjfof+1VY5GsCp5b9UOD7UydBzI= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; example.net zone in ns.example.net. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; deny DS and DNSKEY types ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN DS SECTION AUTHORITY example.net. IN SOA ns-pri.ripe.net. ops.ripe.net. 2007092101 3600 7200 1209600 7200 example.net. 3600 IN RRSIG SOA 5 2 3600 20070926134150 20070829134150 30899 example.net. E1T+LAsAk7rtA6mnKRlgca5Lk+NJYUNNkfco1CrUp5IZZ1+QL7u7CINQBcndJkvoBwKhdVI8rz2LLW19wIywTw== ;{id = 30899} ns.example.net IN NSEC ns-new.example.net. A AAAA RRSIG NSEC ns.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. HLkPBWA8Hstub8e/zdp/A8xyI6+fnnMsA9oiZ20VBuSTaBknX0SXmVulNhVGfdmz9fYmYFUr1zjqvPFG+ErO8A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN DNSKEY SECTION AUTHORITY example.net. IN SOA ns-pri.ripe.net. ops.ripe.net. 2007092101 3600 7200 1209600 7200 example.net. 3600 IN RRSIG SOA 5 2 3600 20070926134150 20070829134150 30899 example.net. E1T+LAsAk7rtA6mnKRlgca5Lk+NJYUNNkfco1CrUp5IZZ1+QL7u7CINQBcndJkvoBwKhdVI8rz2LLW19wIywTw== ;{id = 30899} ns.example.net IN NSEC ns-new.example.net. A RRSIG NSEC ns.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. fAbDxuMP6lMqi71Wa9nsByG7buoJpfxyQhjps6HXOPzOC24UCCjdvZfZltlRy7Yrfrs28MjHwYEmHFmCeFpfPw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN SOA ns-pri.ripe.net. ops.ripe.net. 2007092101 3600 7200 1209600 7200 example.net. 3600 IN RRSIG SOA 5 2 3600 20070926134150 20070829134150 30899 example.net. E1T+LAsAk7rtA6mnKRlgca5Lk+NJYUNNkfco1CrUp5IZZ1+QL7u7CINQBcndJkvoBwKhdVI8rz2LLW19wIywTw== ;{id = 30899} ns.example.net IN NSEC ns-new.example.net. A RRSIG NSEC ns.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. fAbDxuMP6lMqi71Wa9nsByG7buoJpfxyQhjps6HXOPzOC24UCCjdvZfZltlRy7Yrfrs28MjHwYEmHFmCeFpfPw== ;{id = 30899} ENTRY_END RANGE_END ; prime cache with example.com. NS rrset. STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 11.12.13.14 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFC6+BbFcL95vH6SOhMLGotcBospIAhUAhjfof+1VY5GsCp5b9UOD7UydBzI= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; test nonrec referral validation STEP 11 QUERY ENTRY_BEGIN REPLY DO SECTION QUESTION bla.example.com. IN A ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RA AD DO NOERROR SECTION QUESTION bla.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFEsWNXjGDFwH/0NGClonWUQlBaiFAhR/dt0asVj8M0VKs7PdTEKN/Y9i5w== ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnamenx_dblnsec.rpl0000644000175000017500000001553714010434640021227 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname-nxdomain for duplicate NSEC detection ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION cname.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION cname.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION cname.example.com. IN A SECTION ANSWER cname.example.com. 3600 IN CNAME www.example.com. cname.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFBhJC8qi+g+EOYqzT2q6RxE8Im09AhUAotz8NFnpY+cpEDNBKjM940a74/E= ;{id = 2854} SECTION AUTHORITY ; already includes the necessary NSECs example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; wildcard denial example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} ; qname denial wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; wildcard denial example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} ; qname denial wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION cname.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION cname.example.com. IN A SECTION ANSWER cname.example.com. 3600 IN CNAME www.example.com. cname.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFBhJC8qi+g+EOYqzT2q6RxE8Im09AhUAotz8NFnpY+cpEDNBKjM940a74/E= ;{id = 2854} SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_sigs.rsasha2560000644000175000017500000000165414010434640020162 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test RSASHA256 signatures. ; RSA key from ldns tool ENTRY_BEGIN SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 8 AwEAAbd9WqjzE2Pynz21OG5doSf9hFzMr5dhzz2waZ3vTa+0o5r7AjTAqmA1yH/B3+aAMihUm5ucZSfVqo7+kOaRE8yFj9aivOmA1n1+JLevJq/oyvQyjxQN2Qb89LyaNUT5oKZIiL+uyyhNW3KDR3SSbQ/GBwQNDHVcZi+JDR3RC0r7 ;{id = 1443 (zsk), size = 1024b} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 192.0.2.66 www.example.com. 3600 IN RRSIG A 8 3 3600 20070926134150 20070829134150 1443 example.com. sX+BZ6Qdq0Td/THR1HgOnWh9URNP03KMEgjpnRGbS74NqlmlqLU3HcimOT/lUD7xsZTeOIWw5kAcQePxU3UrjS5gsIttIXAfrHFmOtTsyb0O4w0/RpR0QYxRl1hk4zQRPzHeEkgxNTe+y9V9gYe7iv9OddXsfwEnmqQiXk+tdsU= ;{id = 1443} ENTRY_END unbound-1.13.1/testdata/val_cnameinsectopos.rpl0000644000175000017500000002151014010434640021262 0ustar wouterwouter; config options ; The island of trust is at example.com server: ;trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with an insecure cname to positive cached ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION insecure.example.com. IN A SECTION ANSWER insecure.example.com. IN CNAME www.example.net. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; Get www.example.net validated in the cache. STEP 30 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.net. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; reference the cache object STEP 50 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION insecure.example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION insecure.example.com. IN A SECTION ANSWER insecure.example.com. IN CNAME www.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/black_prime.rpl0000644000175000017500000002406014010434640017501 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with blacklist for prime response ; the data response needs a blacklist action as well, since it also ; comes from an 'expired signatures' name server. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN A SECTION ANSWER ns.blabla.com. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ; no ns.blabla.com, try that later ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. AKJ3xUBdSrCiOFkYajsy93d+h06rewpbmBHItTkL8R/26rw57b1gCIg= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AHNj99mBmP4np19V01nSq990ZIFlIiLWoeHijm/HcOG/o8+DuIp4fL8= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20030926134150 20030829134150 2854 example.com. ACFVLLBtuSX/1z3461tbOwDz9zTHe5S9DbVtwnSO1f2x06fYbMpzSDE= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20030926134150 20030829134150 2854 example.com. AG21xE8CFQzTq6XtHErg28b9EAmqPsoYCUcFPEAoAjFybM6AY4/bMOo= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACiWu7zjBHqgEX3iUoOF7rfpOmIAHj1npKQ+XDIaNlmdkfJxoCwFl04= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. ACmAsKTf7hqDaYK8CQ7FL1cGYPW+blTCnzZGkExFtEUAGrHeze87o+A= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGj9kE8oW3OhOLhkmJ3HBaNIOpvGf3S8zSd5gWmhpxAMc5hh6cxZfpQ= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20030926134150 20030829134150 2854 example.com. ACHETweBNPgbmRoNRdKvxuw4X9qNUUTEpSuwV+HhuiBE83gbB98asAc= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20030926134150 20030829134150 2854 example.com. AGvu9A/nGsbatxJCmnObioIhKg2Tm0Apr0eo+DO1kIDrAHco/bt/EdY= ;{id = 2854} ENTRY_END RANGE_END ; ns.blabla.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL ns.example.com. IN NSEC oof.example.com. NSEC RRSIG A ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ABhDNtJramb2a4R1SK5gb/CTYJybQts6mZ++z3kLiwsrUSZInA4ikeQ= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.blabla.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. AAJHNhPYVG6+550zQga9ZgV8McQZHLboOWjfbdiq2ZC+gUcQeQDDlFs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ; remove pending ns.blabla.com AAAA msg STEP 30 QUERY ENTRY_BEGIN REPLY RD DO CD SECTION QUESTION ns.blabla.com. IN AAAA ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD CD RA DO NOERROR SECTION QUESTION ns.blabla.com. IN AAAA SECTION ANSWER SECTION AUTHORITY com. IN SOA com. com. 2009100100 28800 7200 604800 3600 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/0000755000175000017500000000000014010434640022044 5ustar wouterwouterunbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test0000644000175000017500000000271514010434640027345 0ustar wouterwouter# #-- dnstap_tls_clientauth.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.conf0000644000175000017500000000237214010434640027312 0ustar wouterwouterserver: verbosity: 4 num-threads: 1 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-ip: "127.0.0.1@@TAPPORT@" dnstap-tls: yes dnstap-tls-server-name: "unbound" dnstap-tls-cert-bundle: "unbound_server.pem" dnstap-tls-client-key-file: "unbound_control.key" dnstap-tls-client-cert-file: "unbound_control.pem" dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post0000644000175000017500000000107014010434640027344 0ustar wouterwouter# #-- dnstap_tls_clientauth.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log echo "> tap logfiles" cat tap.log cat tap.errlog cat fwd.log exit 0 unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre0000644000175000017500000000370014010434640027147 0ustar wouterwouter# #-- dnstap_tls_clientauth.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 4 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) TAP_PORT=$(($RND_PORT + 3)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap_tls_clientauth.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -z unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap.errlog" "start of service" # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_clientauth.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/unbound_server.key0000644000175000017500000000463314010434640025624 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.dsc0000644000175000017500000000054214010434640027133 0ustar wouterwouterBaseName: dnstap_tls_clientauth Version: 1.0 Description: test dnstap tls with client authentication CreationDate: Tue Feb 18 14:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap_tls_clientauth.pre Post: dnstap_tls_clientauth.post Test: dnstap_tls_clientauth.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/unbound_server.pem0000644000175000017500000000246614010434640025617 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/unbound_control.pem0000644000175000017500000000247614010434640025772 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.testns0000644000175000017500000000050314010434640027677 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dnstap_tls_clientauth.tdir/unbound_control.key0000644000175000017500000000462714010434640026001 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/test_sigs.revoked0000644000175000017500000000151514010434640020077 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; DNSKEY is revoked. ENTRY_BEGIN SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 384 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 31027 (zsk), size = 512b} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION secure.example.com. IN SOA SECTION ANSWER example.com. 43200 IN SOA home.kuroiwa.eng.br. hostmaster.cesar.sec3.br. 2008040903 86400 86400 8640000 600 example.com. 43200 IN RRSIG SOA 5 2 43200 20081010000000 20080410122550 31027 example.com. af7nqRak6cEeQLytqLHMIUKPsOECA4Cu/Zpm7vdnKSh2q2+/8ZwIxwHLyCEGdiu/mTYffZEHTZytJyzxnB0oxA== ;{id = 31027} ENTRY_END unbound-1.13.1/testdata/serve_expired_client_timeout.rpl0000644000175000017500000000515714010434640023207 0ustar wouterwouter; config options server: module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-expired: yes serve-expired-client-timeout: 1 serve-expired-reply-ttl: 123 stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test serve-expired with client-timeout and reply-ttl ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - query again right after the TTL expired ; - check that we get the expired cached answer with the configured reply ttl ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 20 ADDRESS 1.2.3.4 ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer (should be cached) STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire STEP 11 TIME_PASSES ELAPSE 3600 ; Query again STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Allow the client timer to expire STEP 31 TIME_PASSES ELAPSE 1 ; Check that we got a stale answer STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 123 IN A 5.6.7.8 SECTION AUTHORITY example.com. 123 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 123 IN A 1.2.3.4 ENTRY_END ; Reply to the outstanding query so that the test doesn't fail with ; pending messages. STEP 41 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id ; authoritative answer REPLY QR AA RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 3600 IN A 5.6.7.8 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_ancil.tdir/0000755000175000017500000000000014010434640017377 5ustar wouterwouterunbound-1.13.1/testdata/fwd_ancil.tdir/fwd_ancil.conf0000644000175000017500000000047114010434640022176 0ustar wouterwouterserver: verbosity: 1 # num-threads: 1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no interface-automatic: yes access-control: 0.0.0.0/0 allow access-control: ::0/0 allow forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_ancil.tdir/fwd_ancil.test0000644000175000017500000000417314010434640022233 0ustar wouterwouter# #-- fwd_ancil.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if test `hostname`"" = "dicht.nlnetlabs.nl"; then echo "In jail, no ::1, skip test" exit 0 fi if fgrep "disable interface-automatic" unbound.log; then echo "skip test" exit 0 fi get_make (cd $PRE; $MAKE streamtcp) # detect platform support first echo "> streamtcp -n -u -f 127.0.0.1 www.example.com. A IN" $PRE/streamtcp -n -u -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN | tee outfile sleep 2 echo "> check answer" if ! grep "Please disable interface-automatic" unbound.log; then echo "OK" else echo "No platform support for ancillary data" echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK - but ignore test" exit 0 fi rm outfile # do the test echo "> streamtcp -f 127.0.0.1 www.example.com. A IN" $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi rm outfile echo "> streamtcp -f ::1 www.example.com. A IN" $PRE/streamtcp -f ::1@$UNBOUND_PORT www.example.com. A IN | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi rm outfile echo "> streamtcp -u -f ::1 www.example.com. A IN" $PRE/streamtcp -u -f ::1@$UNBOUND_PORT www.example.com. A IN | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi rm outfile echo "> streamtcp -u -f 127.0.0.1 www.example.com. A IN" $PRE/streamtcp -u -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi rm outfile echo "> cat logfiles" cat fwd.log cat unbound.log exit 0 unbound-1.13.1/testdata/fwd_ancil.tdir/fwd_ancil.testns0000644000175000017500000000031014010434640022561 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_ancil.tdir/fwd_ancil.dsc0000644000175000017500000000046714010434640022027 0ustar wouterwouterBaseName: fwd_ancil Version: 1.0 Description: Test if ip6 ancillary recvmsg and sendmsg work. CreationDate: Tue Jan 15 10:47:37 CET 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_ancil.pre Post: fwd_ancil.post Test: fwd_ancil.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_ancil.tdir/fwd_ancil.pre0000644000175000017500000000226514010434640022042 0ustar wouterwouter# #-- fwd_ancil.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh if test `hostname`"" = "dicht.nlnetlabs.nl"; then echo "In jail, no ::1, skip test" exit 0 fi get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_ancil.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_ancil.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log # wait for unbound to come up # string 'Start of service' in log. wait_server_up_or_fail unbound.log "start of service" "disable interface-automatic" if fgrep "disable interface-automatic" unbound.log; then echo "skip test" exit 1 fi unbound-1.13.1/testdata/fwd_ancil.tdir/fwd_ancil.post0000644000175000017500000000103114010434640022227 0ustar wouterwouter# #-- fwd_ancil.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh if test `hostname`"" = "dicht.nlnetlabs.nl"; then echo "In jail, no ::1, skip test" exit 0 fi kill_pid $FWD_PID if fgrep "service stopped" unbound.log; then exit 0 fi if fgrep "disable interface-automatic" unbound.log; then echo "skip test" exit 0 fi kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_edns_probe.tdir/0000755000175000017500000000000014010434640020431 5ustar wouterwouterunbound-1.13.1/testdata/fwd_edns_probe.tdir/fwd_edns_probe.post0000644000175000017500000000045714010434640024326 0ustar wouterwouter# #-- fwd_edns_probe.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_edns_probe.tdir/fwd_edns_probe.dsc0000644000175000017500000000046514010434640024111 0ustar wouterwouterBaseName: fwd_edns_probe Version: 1.0 Description: Forward with EDNS probing CreationDate: Wed Jan 6 09:45:50 CET 2010 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_edns_probe.pre Post: fwd_edns_probe.post Test: fwd_edns_probe.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_edns_probe.tdir/fwd_edns_probe.pre0000644000175000017500000000161414010434640024123 0ustar wouterwouter# #-- fwd_edns_probe.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_edns_probe.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/UPORT/'$UNBOUND_PORT'/' -e 's/TOPORT/'$FWD_PORT'/' < fwd_edns_probe.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_edns_probe.tdir/fwd_edns_probe.testns0000644000175000017500000000116114010434640024652 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname UDP DO REPLY QR FORMERR ADJUST copy_id SECTION QUESTION nasty IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR FORMERR ADJUST copy_id SECTION QUESTION nasty IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname UDP DO REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 www IN A 10.20.30.41 www IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname UDP REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_edns_probe.tdir/fwd_edns_probe.test0000644000175000017500000000166214010434640024317 0ustar wouterwouter# #-- fwd_edns_probe.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test # # First the nasty name. # The server should not have performed EDNS fallback and cached it. echo "> dig nasty.example.com." dig @localhost -p $UNBOUND_PORT nasty.example.com. | tee outfile # no answer possible for it. echo "> check no-answer" if grep "SERVFAIL" outfile; then echo "OK" else echo "> cat logfiles" cat fwd.log cat unbound.log echo "Not OK" exit 1 fi # Then the www name. # See if we can still get the EDNS data. echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.42" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/fwd_edns_probe.tdir/fwd_edns_probe.conf0000644000175000017500000000036214010434640024261 0ustar wouterwouterserver: verbosity: 5 # num-threads: 1 interface: 127.0.0.1 port: UPORT use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no forward-zone: name: "." forward-addr: "127.0.0.1@TOPORT" unbound-1.13.1/testdata/val_nsec3_nodatawccname.rpl0000644000175000017500000001255214010434640021775 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nodata NSEC3 abused wildcarded CNAME. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; closest encloser 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. NSEC3 1 1 8 - 6md8numosa4q9ugkffdo1bmm82t5j49s SOA NS MX DNSKEY RRSIG 6md8numosa4q9ugkffdo1bmm82t5j39s.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCz/LkFOFcaQzVnyySW9ZoVUnxh7gIUdxyS9vqVDzo8pGhFU+3YogN2ZRk= ;{id = 2854} ; wildcard H(*.example.com.) = 4f3cnt8cu22tngec382jj4gde4rb47ub 4f3cnt8cu22tngec382jj4gde4rb47ub.example.com. NSEC3 1 1 0 - 4f3cnt8cu22tngec382jj4gde4rb48ub CNAME RRSIG 4f3cnt8cu22tngec382jj4gde4rb47ub.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFHo9PHBS+MkNWl2DVXH1h1Z8p0yFAhUAjBVKA5s0q5Bt8YOGdY1+9J6GmDU= ;{id = 2854} ; next closer name, H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3. s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 A MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m2.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFFSH4klZKke48dYyddYDj17gjTS0AhUAltWicpFLWqW98/Af9Qlx70MH8o4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_cname_cache.rpl0000644000175000017500000001242614010434640020465 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterative resolve with cached cname for nameserver ; example.com NS ns.example.com en ns2.example.com ; ns.example.com CNAME ns.bla.nl ; ns.bla.nl A .... ; dan timeout van A record uit cache - refetch. ; ns2.example.com timeed niet uit ; maar geeft altijd servfail. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION nl. IN A SECTION AUTHORITY nl. IN NS ns2.nic.nl. SECTION ADDITIONAL ns2.nic.nl. IN A 192.1.1.2 ENTRY_END RANGE_END ; a.gtld-servers.net. ".com" RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ;;; but really a CNAME in child server ns.example.com. 1 IN A 1.2.3.4 ns2.example.com. IN A 1.2.3.5 ns2.example.com. IN AAAA 2002::5 ENTRY_END ; lame answers back to root for .nl (.com server not authoritative for .nl) ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION nl. IN A SECTION AUTHORITY . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END ; ns2.nic.nl ".nl" RANGE_BEGIN 0 100 ADDRESS 192.1.1.2 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION bla.nl. IN A SECTION AUTHORITY bla.nl. IN NS ns.bla.nl. SECTION ADDITIONAL ns.bla.nl. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.bla.nl "bla..nl" RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.bla.nl. IN A SECTION ANSWER ns.bla.nl. IN A 1.2.3.6 SECTION AUTHORITY bla.nl. IN NS ns.bla.nl. SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.bla.nl. IN AAAA SECTION ANSWER SECTION AUTHORITY bla.nl. IN SOA bla.nl. bla.nl. 1 2 3 4 5 SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.bla.nl. IN MX SECTION ANSWER ns.bla.nl. IN MX 10 bla.nl. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END ; ns.example.com "example.com" RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.com. IN MX SECTION ANSWER ns.example.com IN CNAME ns.bla.nl. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END ; ns2.example.com "example.com" ; bad failing server RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION ns.example.com. IN MX SECTION ANSWER ENTRY_END RANGE_END ; ns2.example.com "example.com" ; bad failing server RANGE_BEGIN 0 100 ADDRESS 2002::5 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION ns.example.com. IN MX SECTION ANSWER ENTRY_END RANGE_END ; get cname in cache. use MX query STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.com. IN MX ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ns.example.com. IN MX SECTION ANSWER ns.example.com. IN CNAME ns.bla.nl ns.bla.nl. IN MX 10 bla.nl. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; get seconds to pass to timeout the A record STEP 15 TIME_PASSES ELAPSE 5 ; get into trouble getting cname for nameserver. STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; there may still be pending ns.bla.nl AAAA queries ; get rid of them like this STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.bla.nl. IN AAAA ENTRY_END STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ns.bla.nl. IN AAAA SECTION ANSWER SECTION AUTHORITY bla.nl. IN SOA bla.nl. bla.nl. 1 2 3 4 5 SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_cycle.rpl0000644000175000017500000000637114010434640017360 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with dependency cycle ; query for ns.example.com, needs ns.example.net, needs ns.example.com. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ; note this will be scrubbed off ns.example.net. IN A 1.2.3.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.net. SECTION ADDITIONAL ; note this will be scrubbed off ns.example.net. IN A 1.2.3.1 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.com. SECTION ADDITIONAL ; note this will be scrubbed off ns.example.com. IN A 1.2.3.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.com. SECTION ADDITIONAL ; note this will be scrubbed off ns.example.com. IN A 1.2.3.2 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.com. IN A ENTRY_END ; recursion happens here. ; cycle detected and it fails. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION ns.example.com. IN A ENTRY_END SCENARIO_END unbound-1.13.1/testdata/doh_downstream_post.tdir/0000755000175000017500000000000014010434640021533 5ustar wouterwouterunbound-1.13.1/testdata/doh_downstream_post.tdir/doh_downstream_post.post0000644000175000017500000000067214010434640026531 0ustar wouterwouter# #-- doh_downstream_post.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/doh_downstream_post.tdir/doh_downstream_post.pre0000644000175000017500000000201714010434640026325 0ustar wouterwouter# #-- doh_downstream_post.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT doh_downstream_post.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < doh_downstream_post.conf > ub.conf # start unbound in the background $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/doh_downstream_post.tdir/doh_downstream_post.conf0000644000175000017500000000120014010434640026455 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1@@PORT@ https-port: @PORT@ tls-service-key: "unbound_server.key" tls-service-pem: "unbound_server.pem" use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no http-query-buffer-size: 1G http-response-buffer-size: 1G http-max-streams: 200 local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" local-zone: "drop.net" deny tcp-upstream: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/doh_downstream_post.tdir/unbound_server.key0000644000175000017500000000156714010434640025316 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA 3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS 6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP 0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/doh_downstream_post.tdir/unbound_server.pem0000644000175000017500000000115314010434640025276 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== -----END CERTIFICATE----- unbound-1.13.1/testdata/doh_downstream_post.tdir/doh_downstream_post.dsc0000644000175000017500000000052114010434640026306 0ustar wouterwouterBaseName: doh_downstream_post Version: 1.0 Description: Test DNS-over-HTTPS query processing, using POST method CreationDate: Mon Jun 12 12:00:00 CET 2020 Maintainer: Category: Component: CmdDepends: Depends: Help: Pre: doh_downstream_post.pre Post: doh_downstream_post.post Test: doh_downstream_post.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/doh_downstream_post.tdir/doh_downstream_post.test0000644000175000017500000002351414010434640026523 0ustar wouterwouter# #-- doh_downstream_post.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) # this test query should just work (server is up) echo "> query www1.example.net." $PRE/dohclient -P -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # multiple requests (from localdata) echo "> query www1.example.net. www2.example.net. www3.example.net." $PRE/dohclient -P -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net." $PRE/dohclient -P -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.com" outfile | grep "10.20.30.42"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net." $PRE/dohclient -P -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www3.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." $PRE/dohclient -P -s 127.0.0.1 -p $UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.com" outfile | grep "10.20.30.43"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query www4.example.com. www3.example.net." $PRE/dohclient -P -s 127.0.0.1 -p $UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www4.example.com" outfile | grep "10.20.30.44"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query a1.example.com. - a90.example.com." $PRE/dohclient -P -s 127.0.0.1 -p $UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi num_ans=$(grep -B 3 "a.example.com. IN A" outfile | grep "rcode: NOERROR" | wc -l ) if test "$num_ans" -ne 90; then echo "number of answers not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/doh_downstream_post.tdir/doh_downstream_post.testns0000644000175000017500000000233614010434640027063 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END ; lots of noerror/nodata answers for other queries (a.. queries) ENTRY_BEGIN MATCH opcode qtype subdomain REPLY QR AA NOERROR ADJUST copy_id copy_query SECTION QUESTION a.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600 ENTRY_END unbound-1.13.1/testdata/val_nsec3_b2_nodata.rpl0000644000175000017500000000673214010434640021025 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.2 no data. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION . IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns1.example. IN MX SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR matches the QNAME and shows that the MX type bit is not set. 2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. NSEC3 1 1 12 aabbccdd ( 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG ) 2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OmBvJ1Vgg1hCKMXHFiNeIYHK9XVW0iLDLwJN 4TFoNxZuP03gAXEI634YwOc4YBNITrj413iq NI6mRk/r1dOSUw== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ns1.example. IN MX ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION ns1.example. IN MX SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) 2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. NSEC3 1 1 12 aabbccdd ( 2vptu5timamqttgl4luu9kg21e0aor3s A RRSIG ) 2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OmBvJ1Vgg1hCKMXHFiNeIYHK9XVW0iLDLwJN 4TFoNxZuP03gAXEI634YwOc4YBNITrj413iq NI6mRk/r1dOSUw== ) SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_unsecds.rpl0000644000175000017500000001260014010434640017534 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with insecure delegation ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; query for missing DS record. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_any_cname.rpl0000644000175000017500000001227614010434640020033 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with response to qtype ANY that includes CNAME ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN ANY SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN ANY SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN ANY SECTION ANSWER www.example.com. 3600 IN CNAME serf.example.com. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. AH/qSA7et6tXS08u4UUsWmXbIedGFpBKhiCqqVAgV8Z95dgn/vrB5ag= ;{id = 2854} www.example.com. 18000 IN NSEC example.com. CNAME RRSIG NSEC www.example.com. 18000 IN RRSIG NSEC 3 3 18000 20070926134150 20070829134150 2854 example.com. ACqeCl/aLq90zkeSfneQY+HnvJTUAeyTF03HWdXr3WhnYzupKAdnuQ4= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION serf.example.com. IN ANY SECTION ANSWER serf.example.com. 3600 IN A 192.0.2.1 serf.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. AGLOiUcDNkSCplT07hT8szlUfMHNfPh6/104ydBt4bJ6UcfXUiM3pV8= ;{id = 2854} serf.example.com. 18000 IN NSEC www.example.com. A RRSIG NSEC serf.example.com. 18000 IN RRSIG NSEC 3 3 18000 20070926134150 20070829134150 2854 example.com. AEBNiqg7Uz+NfNvoyA4KjkqJPb7hrjyS7oPE2MGNgVwUgQrcRIxd7DA= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN MATCH TCP REPLY RD DO SECTION QUESTION www.example.com. IN ANY ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN ANY SECTION ANSWER www.example.com. 3600 IN CNAME serf.example.com. www.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926134150 20070829134150 2854 example.com. AH/qSA7et6tXS08u4UUsWmXbIedGFpBKhiCqqVAgV8Z95dgn/vrB5ag= ;{id = 2854} www.example.com. 18000 IN NSEC example.com. CNAME RRSIG NSEC www.example.com. 18000 IN RRSIG NSEC 3 3 18000 20070926134150 20070829134150 2854 example.com. ACqeCl/aLq90zkeSfneQY+HnvJTUAeyTF03HWdXr3WhnYzupKAdnuQ4= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_xfr_host.rpl0000644000175000017500000001154214010434640020107 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: master: ns.example.net. #master: 1.2.3.44 ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone that needs host name lookup ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.44 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL www.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER ; serial, refresh, retry, expire, minimum example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. IN NS ns.example.com. www.example.com. IN A 1.2.3.4 example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END STEP 30 TIME_PASSES ELAPSE 10 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END ; the zonefile was updated with new contents STEP 70 CHECK_TEMPFILE example.com FILE_BEGIN example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.com. www.example.com. 3600 IN A 1.2.3.4 FILE_END SCENARIO_END unbound-1.13.1/testdata/rpz_qname_override.rpl0000644000175000017500000000667414010434640021137 0ustar wouterwouter; config options server: module-config: "respip validator iterator" target-fetch-policy: "0 0 0 0 0" qname-minimisation: no rpz: name: "rpz.example.com." rpz-action-override: disabled zonefile: TEMPFILE_NAME rpz.example.com TEMPFILE_CONTENTS rpz.example.com $ORIGIN rpz.example.com. a TXT "record zone rpz.example.com" TEMPFILE_END rpz: name: "rpz2.example.com." zonefile: TEMPFILE_NAME rpz2.example.com TEMPFILE_CONTENTS rpz2.example.com $ORIGIN rpz2.example.com. a TXT "record zone rpz2.example.com" TEMPFILE_END rpz: name: "rpz3.example.com." rpz-action-override: nodata zonefile: TEMPFILE_NAME rpz3.example.com TEMPFILE_CONTENTS rpz3.example.com $ORIGIN rpz3.example.com. b CNAME . TEMPFILE_END rpz: name: "rpz4.example.com." rpz-action-override: nxdomain zonefile: TEMPFILE_NAME rpz4.example.com TEMPFILE_CONTENTS rpz4.example.com $ORIGIN rpz4.example.com. c CNAME *. TEMPFILE_END rpz: name: "rpz5.example.com." rpz-action-override: passthru zonefile: TEMPFILE_NAME rpz5.example.com TEMPFILE_CONTENTS rpz5.example.com $ORIGIN rpz5.example.com. d TXT "should be override by passthru" TEMPFILE_END rpz: name: "rpz6.example.com." rpz-action-override: cname rpz-cname-override: "d." zonefile: TEMPFILE_NAME rpz6.example.com TEMPFILE_CONTENTS rpz6.example.com $ORIGIN rpz6.example.com. e TXT "should be override by cname" TEMPFILE_END rpz: name: "rpz7.example.com." rpz-action-override: drop zonefile: TEMPFILE_NAME rpz7.example.com TEMPFILE_CONTENTS rpz7.example.com $ORIGIN rpz7.example.com. f TXT "should be override by drop policy" TEMPFILE_END stub-zone: name: "d." stub-addr: 10.20.30.40 CONFIG_END SCENARIO_BEGIN Test RPZ action overrides for QNAME trigger ; d. RANGE_BEGIN 0 100 ADDRESS 10.20.30.40 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION d. IN TXT SECTION ANSWER d. IN TXT "answer from upstream ns" ENTRY_END RANGE_END ; check disabled override, should be answered using next policy zone STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a. IN TXT ENTRY_END STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION a. IN TXT SECTION ANSWER a TXT "record zone rpz2.example.com" ENTRY_END ; check nodata override, would be NXDOMAIN without override STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION b. IN TXT ENTRY_END STEP 21 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION b. IN TXT SECTION ANSWER ENTRY_END ; check nxdomain override, would be NODATA without override STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION c. IN TXT ENTRY_END STEP 31 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NXDOMAIN SECTION QUESTION c. IN TXT SECTION ANSWER ENTRY_END ; check passthru override, would be localdata without override STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION d. IN TXT ENTRY_END STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION d. IN TXT SECTION ANSWER d. IN TXT "answer from upstream ns" ENTRY_END ; check cname override, would be localdata without override STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION e. IN TXT ENTRY_END STEP 51 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION e. IN TXT SECTION ANSWER e. IN CNAME d. d. IN TXT "answer from upstream ns" ENTRY_END ; check drop override, would be localdata without override STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION f. IN TXT ENTRY_END ; no answer is checked at exit of testbound. SCENARIO_END unbound-1.13.1/testdata/autotrust_init_zsk.rpl0000644000175000017500000001440014010434640021212 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with initial trust anchor ZSK ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 ASSIGN t0 = ${time} ; get probe time and check it. 4800 is about 10% less than 5400. And more than ; the 3600 that a failure timeout would have. STEP 7 ASSIGN probe = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 8 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ; The autotrust anchor was probed due to the query. STEP 30 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;last_success: 1251100000 ;;Mon Aug 24 07:46:40 2009 ;;next_probe_time: ${$t0 + $probe} ;;${ctime $t0 + $probe} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END ; wait and see if autotrust probes (the unchanged) domain again. STEP 40 TIME_PASSES EVAL ${$probe} STEP 50 TRAFFIC STEP 65 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 70 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${time} ;;${ctime ${time}} ;;last_success: ${time} ;;${ctime ${time}} ;;next_probe_time: ${$t0 + $probe + $probe2} ;;${ctime $t0 + $probe + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1251100000 ;;Mon Aug 24 07:46:40 2009 FILE_END SCENARIO_END unbound-1.13.1/testdata/iter_emptydp_for_glue.rpl0000644000175000017500000003152314010434640021622 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "3 2 1 0 0" # make sure it fetches for test qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterator with empty delegation for glue address ; setup: ; query for www.example.com. ; needs example.com served by ns.example.net and ns.example.org ; needs example.net served by ns.example.net and ns.example.org ; needs example.org served by ns.example.net and ns.example.org ; but the cache has all these NS rrsets, but not the addresses. ; observed in the wild this was from the in-addr zone towards two ; domains with such a setup. and high TTL NS, lower for A. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. ; sneak in some data into the cache to simulate partial data after timeouts ; gets scrubbed away now .... example.com. NS ns.example.net. example.com. NS ns.example.org. example.net. NS ns.example.net. example.net. NS ns.example.org. example.org. NS ns.example.net. example.org. NS ns.example.org. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION org. IN A SECTION AUTHORITY org. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ; com zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. NS ns.example.net. example.com. NS ns.example.org. SECTION ADDITIONAL ; no glue! ENTRY_END ; net zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. NS ns.example.net. example.net. NS ns.example.org. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END ; org zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION org. IN A SECTION ANSWER org. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.org. IN A SECTION AUTHORITY example.org. NS ns.example.net. example.org. NS ns.example.org. SECTION ADDITIONAL ns.example.org. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ; example.org. zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.org. IN NS SECTION ANSWER example.org. NS ns.example.net. example.org. NS ns.example.org. SECTION ADDITIONAL ns.example.org. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.org. IN A SECTION ANSWER ns.example.org. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.org. IN AAAA SECTION ANSWER ENTRY_END ; example.net. zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. NS ns.example.net. example.net. NS ns.example.org. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER ENTRY_END ; example.com. zone ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ; bogus message. ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END ; ns.example.org. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ; example.org. zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.org. IN NS SECTION ANSWER example.org. NS ns.example.net. example.org. NS ns.example.org. SECTION ADDITIONAL ns.example.org. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.org. IN A SECTION ANSWER ns.example.org. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.org. IN AAAA SECTION ANSWER ENTRY_END ; example.net. zone ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. NS ns.example.net. example.net. NS ns.example.org. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER ENTRY_END ; example.com. zone ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END ; make sure glue fetch is done. STEP 11 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ns.example.net. IN AAAA ENTRY_END STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; make sure NS fetch is done. STEP 14 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.org. IN NS ENTRY_END STEP 15 CHECK_ANSWER ENTRY_BEGIN MATCH ; none REPLY QR RD RA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/serve_expired_servfail.rpl0000644000175000017500000000450214010434640021767 0ustar wouterwouter; config options server: module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-expired: yes serve-expired-client-timeout: 1800 serve-expired-reply-ttl: 123 log-servfail: yes stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test serve-expired with client-timeout and a SERVFAIL upstream reply ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - query again right after the TTL expired ; - answer from upstream is servfail ; - check that we get the expired cached answer instead ; ns.example.com. RANGE_BEGIN 0 20 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 30 100 ADDRESS 1.2.3.4 ; response to A query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION example.com. IN A ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer (should be cached) STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire STEP 11 TIME_PASSES ELAPSE 3601 ; Query again STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got a stale answer STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 123 IN A 5.6.7.8 SECTION AUTHORITY example.com. 123 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 123 IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_pos_truncns.rpl0000644000175000017500000001121514010434640020446 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with badly truncated positive response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. ; Truncated, no signature for NS record. ;;;example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ;;;SECTION ADDITIONAL ;;;ns.example.com. IN A 1.2.3.4 ;;;ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fetch_glue_cname.rpl0000644000175000017500000000762714010434640020513 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Fetch cnamed glue when missing or timed out. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. ; is missing the glue! ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. ; is missing the glue! ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN CNAME ns2.example.com. SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns2.example.com. IN A SECTION ANSWER ns2.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; due to ordering of answer packets, this is still outstanding, remove it STEP 21 CHECK_OUT_QUERY ENTRY_BEGIN ADJUST copy_id MATCH qname qtype REPLY QR SECTION QUESTION ns.example.com IN AAAA ENTRY_END ; some more recursion needed. ; to finish the NS query STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION . IN NS ENTRY_END STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION AUTHORITY SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/nsid_not_set.rpl0000644000175000017500000000134614010434640017723 0ustar wouterwouter; config options stub-zone: name: "example." stub-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test EDNS string tag option RANGE_BEGIN 0 1000 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN A SECTION ANSWER example. IN A 198.51.100.1 SECTION ADDITIONAL ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example. IN A SECTION ADDITIONAL HEX_EDNSDATA_BEGIN 00 03 ; Opcode NSID (3) 00 00 ; Length 0 HEX_EDNSDATA_END ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION example. IN A SECTION ANSWER example. IN A 198.51.100.1 SECTION ADDITIONAL HEX_EDNSDATA_BEGIN HEX_EDNSDATA_END ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_positive_wc.rpl0000644000175000017500000001300414010434640020422 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with positive wildcard response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; from ; *.example.com. IN A 10.20.30.40 www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFFi0g6v/20JyUxoQq7XM0iQnaMMOAhRjhUCLZjMqR1tj2MGGOgfhb1BSyw== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ; denies www.example.com. ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFGbrr95DAxBIRKFmr4BUm5OxXWMUAhUAsduS0iF2Pa7FagrbAPrJxZ2KPNs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 2 3600 20070926135752 20070829135752 2854 example.com. MCwCFFi0g6v/20JyUxoQq7XM0iQnaMMOAhRjhUCLZjMqR1tj2MGGOgfhb1BSyw== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFGbrr95DAxBIRKFmr4BUm5OxXWMUAhUAsduS0iF2Pa7FagrbAPrJxZ2KPNs= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_twocname.rpl0000644000175000017500000002350414010434640017712 0ustar wouterwouter; config options server: trust-anchor: "ORG. DS 21366 7 1 E6C1716CFB6BDC84E84CE1AB5510DAC69173B5B2" val-override-date: "20091116100204" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no rrset-roundrobin: no forward-zone: name: "." forward-addr: 192.0.2.1 CONFIG_END SCENARIO_BEGIN Test validator with unsigned CNAME to signed CNAME to data RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION k.root-servers.org. IN A SECTION ANSWER k.root-servers.org. 3600 IN CNAME www.ripe.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.ripe.net. IN A SECTION ANSWER www.ripe.net. 900 IN CNAME aquila-www.ripe.net. www.ripe.net. 900 IN RRSIG CNAME 5 3 900 20091216060007 20091116060007 19386 ripe.net. NjCpVZC/LLnoV1pa91GSL9SP65n7eFKoe/OcuKzUPHumXIDrXnE23F1rNfbjYpVrQDEsG6iInI7Edh2MCS4NI4tLwrytEDgCX7ZnqIMIOV2/gJa5ZkLlmVT71Agnfi788q7ozEq14zlhY+brD5kyBiEcfOhH/qkX+zJuGdt1AcQwMxYn/GQ0Z32k5ulBnzrIFWObBksO ;{id = 19386} SECTION AUTHORITY ripe.net. 172800 IN NS ns3.nic.fr. ripe.net. 172800 IN NS sunic.sunet.se. ripe.net. 172800 IN NS ns-pri.ripe.net. ripe.net. 172800 IN NS sns-pb.isc.org. ripe.net. 172800 IN RRSIG NS 5 2 172800 20091216060007 20091116060007 19386 ripe.net. Km2zmkvPOjRddE+SlFBokj2QVroW/R8D2C6u6uCtFI5HVLZTV+oxrIw1ZYYWwe/Jf2CpVBzh3P6iHtWvojM8DHhfkO84wsO33ssqzIzq7e8nDOinqeeGB7yyl642xHCt0jObRewX1hU6Deubs42pFZmO6YKL8Tx6Jb5oe2yyoVebv4bX2qLoEPFw9plE0VavfD397Y4g ;{id = 19386} SECTION ADDITIONAL ns-pri.ripe.net. 172800 IN A 193.0.0.195 ns-pri.ripe.net. 172800 IN AAAA 2001:610:240:0:53::3 ns-pri.ripe.net. 172800 IN RRSIG A 5 3 172800 20091216060007 20091116060007 19386 ripe.net. BRxWwUNDivDxXnrPlj3/VPUBrf/bk8tKljRG0pQ/7XucTUMR9ae1huNVTC+FTrfZjggqU9/PZlyJ9TwI1lp7J1lEua1mByCHObzHlO7Cq/m7sjZ9cFvpIm6ke2c+xxjs3X8mHsiyftSsCCSvB43DLhgcJtib6QZlCpFxa4Y3sg1fx+1GENrbKlcuJGGqkdrAw0irvKEv ;{id = 19386} ns-pri.ripe.net. 172800 IN RRSIG AAAA 5 3 172800 20091216060007 20091116060007 19386 ripe.net. Ngd/GLGHakPj1A4rna19OPFpMPVSgCj7CgBtsuwjGwurMFEje4F4miNleazkdQKqe2kRMpB+Kg2OBnnRZpjR2PR9ZjRv6rss6/DL5qMRkDH6Xghwl5ZZzIONTgRSZlHKaHQZ7BHR2azZTo9wupK7VuE7f7EWmjBc5SDNiNOfwuEujUg2DvO1JOv16P2JLeQ3Vst4ovxW ;{id = 19386} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION aquila-www.ripe.net. IN A SECTION ANSWER aquila-www.ripe.net. 600 IN A 193.0.19.25 aquila-www.ripe.net. 600 IN RRSIG A 5 3 600 20091216060007 20091116060007 19386 ripe.net. RuPSSATpwiS5hY4WTt7x9Hzq1tQ+ttWgq0hpgJPSorqJHlLbvgucXd8LhrcIFmBm/K/3sj9UYP1viCjbqfvjGToUdv+g4z9KrNq3FoAal6WSyTBgxAgvnHjNi9gRTZBm4O+rUQCKUD8XwlG6r3SKo6iOeSM84CHeQkGjsp5GNxpGnIagWkr5BzjKhaaUc+i82vk1SrNa ;{id = 19386} SECTION AUTHORITY ripe.net. 172800 IN NS ns3.nic.fr. ripe.net. 172800 IN NS sunic.sunet.se. ripe.net. 172800 IN NS ns-pri.ripe.net. ripe.net. 172800 IN NS sns-pb.isc.org. ripe.net. 172800 IN RRSIG NS 5 2 172800 20091216060007 20091116060007 19386 ripe.net. Km2zmkvPOjRddE+SlFBokj2QVroW/R8D2C6u6uCtFI5HVLZTV+oxrIw1ZYYWwe/Jf2CpVBzh3P6iHtWvojM8DHhfkO84wsO33ssqzIzq7e8nDOinqeeGB7yyl642xHCt0jObRewX1hU6Deubs42pFZmO6YKL8Tx6Jb5oe2yyoVebv4bX2qLoEPFw9plE0VavfD397Y4g ;{id = 19386} SECTION ADDITIONAL ns-pri.ripe.net. 172800 IN A 193.0.0.195 ns-pri.ripe.net. 172800 IN AAAA 2001:610:240:0:53::3 ns-pri.ripe.net. 172800 IN RRSIG A 5 3 172800 20091216060007 20091116060007 19386 ripe.net. BRxWwUNDivDxXnrPlj3/VPUBrf/bk8tKljRG0pQ/7XucTUMR9ae1huNVTC+FTrfZjggqU9/PZlyJ9TwI1lp7J1lEua1mByCHObzHlO7Cq/m7sjZ9cFvpIm6ke2c+xxjs3X8mHsiyftSsCCSvB43DLhgcJtib6QZlCpFxa4Y3sg1fx+1GENrbKlcuJGGqkdrAw0irvKEv ;{id = 19386} ns-pri.ripe.net. 172800 IN RRSIG AAAA 5 3 172800 20091216060007 20091116060007 19386 ripe.net. Ngd/GLGHakPj1A4rna19OPFpMPVSgCj7CgBtsuwjGwurMFEje4F4miNleazkdQKqe2kRMpB+Kg2OBnnRZpjR2PR9ZjRv6rss6/DL5qMRkDH6Xghwl5ZZzIONTgRSZlHKaHQZ7BHR2azZTo9wupK7VuE7f7EWmjBc5SDNiNOfwuEujUg2DvO1JOv16P2JLeQ3Vst4ovxW ;{id = 19386} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ORG. IN DNSKEY SECTION ANSWER ORG. 900 IN DNSKEY 256 3 7 AwEAAdV7bl0omw53nFPoUZSowSTSTDpQO4K8th19coBjlS0iMIWb0NF5YzGkoeditMS8ZLkgc9wS9txeH6XGHzwqJNc5eQcQEOasmC7vqaopoeN/GP/ZkUMbtNTcN1qzS9WzJ4gToxeNCHkAc7LZGh5XY/v1n599hk/ifotV/ZDGhN+H ;{id = 5273 (zsk), size = 1024b} ORG. 900 IN DNSKEY 257 3 7 AwEAAYpYfj3aaRzzkxWQqMdl7YExY81NdYSv+qayuZDodnZ9IMh0bwMcYaVUdzNAbVeJ8gd6jq1sR3VvP/SR36mmGssbV4Udl5ORDtqiZP2TDNDHxEnKKTX+jWfytZeT7d3AbSzBKC0v7uZrM6M2eoJnl6id66rEUmQC2p9DrrDg9F6tXC9CD/zC7/y+BNNpiOdnM5DXk7HhZm7ra9E7ltL13h2mx7kEgU8e6npJlCoXjraIBgUDthYs48W/sdTDLu7N59rjCG+bpil+c8oZ9f7NR3qmSTpTP1m86RqUQnVErifrH8KjDqL+3wzUdF5ACkYwt1XhPVPU+wSIlzbaAQN49PU= ;{id = 21366 (ksk), size = 2048b} ORG. 900 IN DNSKEY 257 3 7 AwEAAZTjbIO5kIpxWUtyXc8avsKyHIIZ+LjC2Dv8naO+Tz6X2fqzDC1bdq7HlZwtkaqTkMVVJ+8gE9FIreGJ4c8G1GdbjQgbP1OyYIG7OHTc4hv5T2NlyWr6k6QFz98Q4zwFIGTFVvwBhmrMDYsOTtXakK6QwHovA1+83BsUACxlidpwB0hQacbD6x+I2RCDzYuTzj64Jv0/9XsX6AYV3ebcgn4hL1jIR2eJYyXlrAoWxdzxcW//5yeL5RVWuhRxejmnSVnCuxkfS4AQ485KH2tpdbWcCopLJZs6tw8q3jWcpTGzdh/v3xdYfNpQNcPImFlxAun3BtORPA2r8ti6MNoJEHU= ;{id = 9795 (ksk), size = 2048b} ORG. 900 IN DNSKEY 256 3 7 AwEAAaT7yoAEj5kX1rW40gMxUgPYGIc6hIPXihtK44jq6UQlZxTeFdsNX6aNaFpSq9pbI19y4JfQvCPPjw2248fwNzgwxfkdyRk7vzKagad2hs8wQ/C7vYuTUoTjrOBRwnsEHix+jYgKZH+lX1ZRKo/YXyMz05KWH+3j5y0VSrKBcdBZ ;{id = 53990 (zsk), size = 1024b} ORG. 900 IN RRSIG DNSKEY 7 1 900 20091123154522 20091109144522 5273 org. zHcY20bnIBzsl1CXmZdtt8PWPy079Ic3dQ/pLH2z1yCoC+kWGzLIlU/EcWa0rrQzqc9oK+v63xzXFoib3LewcijiGmKYtFcyi3HGfVdJrDFIxmN52x4pZerVZq9NA/FLQ8ZrobkVgYiEAmjMU1OesPPZPwwlPRdSG421q3o3N4Q= ;{id = 5273} ORG. 900 IN RRSIG DNSKEY 7 1 900 20091123154522 20091109144522 21366 org. Xlh0UQl+Ldig/jBS7Ty9rfeUztG5P7Brjr/Du+XlC7KjUkk/gNfpxgPmIKuA3ZLwgwTvEF6i7CD7b5gEKKC2P8Y5kQjKcjcDZl0+5W1IfpFF1Ka546erCy5cznXT23W5bzODNiraMs7KwvwMlD3LeOCiBeldPKeZ0yxWI/3YXmwAbkky4MApX9khSnilSaewcVSzQM/iOVuCR/+5esNvcKqjgWbT3M4vorzjc7YxVxF2BTgxybDOn4OkWvdeSlDiIVVS+VtxK0U7yIc59mpE7WxoRLtw/Qkd8bjh+KF5izQO2Q/7VxhkJ6pBxxumHwQahlgOQYxWMLqUc/EZnXSQpQ== ;{id = 21366} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION root-servers.org. IN DS SECTION ANSWER SECTION AUTHORITY h9p7u7tr2u91d0v0ljs9l1gidnp90u3h.org. 86399 IN NSEC3 1 1 1 d399eaab h9rsfb7fpf2l8hg35cmpc765tdk23rp6 NS SOA RRSIG DNSKEY NSEC3PARAM ; flags: optout h9p7u7tr2u91d0v0ljs9l1gidnp90u3h.org. 86399 IN RRSIG NSEC3 7 2 86400 20091130090148 20091116080148 5273 org. FL7e/4Lhihh9LKAPDKNmlvEHbjkPY/6GLhtVMWtbSfBS8rAaHuInCD/tbQxCmFmT6e3HXHXkUcjC7BSDFPnlhtB8P2iNjvkdZJ72jVTXDY1P6LuK/OJhRT8DjFlHlvjdNgS5/0HCuGYU5A1GPkWGx1waUmblryPApb8HNSAmdYA= ;{id = 5273} i8i48ibuph5kgh999ld485qnt660qdag.org. 86399 IN NSEC3 1 1 1 d399eaab i94atlaqkvkoms2q45m5msds8r3414ft A RRSIG ; flags: optout i8i48ibuph5kgh999ld485qnt660qdag.org. 86399 IN RRSIG NSEC3 7 2 86400 20091125010858 20091111000858 5273 org. WrWFYs2FuzPRYh+hgc8B3ZKL6jiMee2F1FsPNVEx9Ojv76BMELWomI0Zcd90NZbs7kvs5FP1G79s9o3oQHeWVfa6as8Wi6RLn97nX3FVqYI39r7GZnoKj8QGrCsRCatqK4Lsh426X0vzR5CwIA14/XL1w6UQ1KuTHlIu51RidA4= ;{id = 5273} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION k.root-servers.org. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION k.root-servers.org. IN A SECTION ANSWER k.root-servers.org. IN CNAME www.ripe.net. www.ripe.net. 900 IN CNAME aquila-www.ripe.net. www.ripe.net. 900 IN RRSIG CNAME 5 3 900 20091216060007 20091116060007 19386 ripe.net. NjCpVZC/LLnoV1pa91GSL9SP65n7eFKoe/OcuKzUPHumXIDrXnE23F1rNfbjYpVrQDEsG6iInI7Edh2MCS4NI4tLwrytEDgCX7ZnqIMIOV2/gJa5ZkLlmVT71Agnfi788q7ozEq14zlhY+brD5kyBiEcfOhH/qkX+zJuGdt1AcQwMxYn/GQ0Z32k5ulBnzrIFWObBksO ;{id = 19386} aquila-www.ripe.net. 600 IN A 193.0.19.25 aquila-www.ripe.net. 600 IN RRSIG A 5 3 600 20091216060007 20091116060007 19386 ripe.net. RuPSSATpwiS5hY4WTt7x9Hzq1tQ+ttWgq0hpgJPSorqJHlLbvgucXd8LhrcIFmBm/K/3sj9UYP1viCjbqfvjGToUdv+g4z9KrNq3FoAal6WSyTBgxAgvnHjNi9gRTZBm4O+rUQCKUD8XwlG6r3SKo6iOeSM84CHeQkGjsp5GNxpGnIagWkr5BzjKhaaUc+i82vk1SrNa ;{id = 19386} SECTION AUTHORITY ripe.net. 172800 IN NS ns3.nic.fr. ripe.net. 172800 IN NS sunic.sunet.se. ripe.net. 172800 IN NS ns-pri.ripe.net. ripe.net. 172800 IN NS sns-pb.isc.org. ripe.net. 172800 IN RRSIG NS 5 2 172800 20091216060007 20091116060007 19386 ripe.net. Km2zmkvPOjRddE+SlFBokj2QVroW/R8D2C6u6uCtFI5HVLZTV+oxrIw1ZYYWwe/Jf2CpVBzh3P6iHtWvojM8DHhfkO84wsO33ssqzIzq7e8nDOinqeeGB7yyl642xHCt0jObRewX1hU6Deubs42pFZmO6YKL8Tx6Jb5oe2yyoVebv4bX2qLoEPFw9plE0VavfD397Y4g ;{id = 19386} SECTION ADDITIONAL ns-pri.ripe.net. 172800 IN A 193.0.0.195 ns-pri.ripe.net. 172800 IN AAAA 2001:610:240:0:53::3 ns-pri.ripe.net. 172800 IN RRSIG A 5 3 172800 20091216060007 20091116060007 19386 ripe.net. BRxWwUNDivDxXnrPlj3/VPUBrf/bk8tKljRG0pQ/7XucTUMR9ae1huNVTC+FTrfZjggqU9/PZlyJ9TwI1lp7J1lEua1mByCHObzHlO7Cq/m7sjZ9cFvpIm6ke2c+xxjs3X8mHsiyftSsCCSvB43DLhgcJtib6QZlCpFxa4Y3sg1fx+1GENrbKlcuJGGqkdrAw0irvKEv ;{id = 19386} ns-pri.ripe.net. 172800 IN RRSIG AAAA 5 3 172800 20091216060007 20091116060007 19386 ripe.net. Ngd/GLGHakPj1A4rna19OPFpMPVSgCj7CgBtsuwjGwurMFEje4F4miNleazkdQKqe2kRMpB+Kg2OBnnRZpjR2PR9ZjRv6rss6/DL5qMRkDH6Xghwl5ZZzIONTgRSZlHKaHQZ7BHR2azZTo9wupK7VuE7f7EWmjBc5SDNiNOfwuEujUg2DvO1JOv16P2JLeQ3Vst4ovxW ;{id = 19386} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/dnstap_tls_badname.tdir/0000755000175000017500000000000014010434640021273 5ustar wouterwouterunbound-1.13.1/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.dsc0000644000175000017500000000054114010434640025610 0ustar wouterwouterBaseName: dnstap_tls_badname Version: 1.0 Description: test dnstap tls test bad peer name for authentication CreationDate: Tue Feb 18 13:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap_tls_badname.pre Post: dnstap_tls_badname.post Test: dnstap_tls_badname.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test0000644000175000017500000000265514010434640026026 0ustar wouterwouter# #-- dnstap_tls_badname.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log; then echo "it is in tap.log"; echo "but there should not be a connection" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 else echo "information not in tap.log" fi echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post0000644000175000017500000000106514010434640026026 0ustar wouterwouter# #-- dnstap_tls_badname.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log echo "> tap logfiles" cat tap.log cat tap.errlog cat fwd.log exit 0 unbound-1.13.1/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre0000644000175000017500000000364114010434640025631 0ustar wouterwouter# #-- dnstap_tls_badname.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 4 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) TAP_PORT=$(($RND_PORT + 3)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap_tls_badname.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap.errlog" "start of service" # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_badname.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap_tls_badname.tdir/unbound_server.key0000644000175000017500000000463314010434640025053 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.testns0000644000175000017500000000050314010434640026355 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dnstap_tls_badname.tdir/unbound_server.pem0000644000175000017500000000246614010434640025046 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_badname.tdir/unbound_control.pem0000644000175000017500000000247614010434640025221 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.conf0000644000175000017500000000233414010434640025766 0ustar wouterwouterserver: verbosity: 4 num-threads: 1 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-ip: "127.0.0.1@@TAPPORT@" dnstap-tls: yes # actual certificate name: "unbound" # we enter another name here. dnstap-tls-server-name: "anothername" dnstap-tls-cert-bundle: "unbound_server.pem" dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap_tls_badname.tdir/unbound_control.key0000644000175000017500000000462714010434640025230 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/fwd_notcached.rpl0000644000175000017500000000326714010434640020027 0ustar wouterwouter; This is a comment. ; can set commandline options using something like this: ; COMMANDLINE -v ; here config file options: server: msg-cache-size: 1024 forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Query receives answer not from the cache STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; the query is sent to the forwarder - no cache yet. STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 3 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END STEP 4 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ; another query, different, so not from cache. STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.net. IN A ENTRY_END STEP 6 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.net. IN A ENTRY_END STEP 7 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.60 SECTION AUTHORITY www.example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 10.20.30.50 ENTRY_END STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.60 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cname_loop3.rpl0000644000175000017500000001133414010434640020272 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname 3 step loop ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME foo.example.com. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFH0SwLHe7u56TshoVciFRHEl1KqbAhQ3zBOZMlL8bt1DqoDoM5ni8U/1UA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION foo.example.com. IN A SECTION ANSWER foo.example.com. IN CNAME bar.example.com. foo.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFFMlXuWrNL/8aYOl9U9WYjgif8gAAhUAqsC/xOXakHP1SYxMSLANziOik94= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION bar.example.com. IN A SECTION ANSWER bar.example.com. IN CNAME www.example.com. bar.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFAsalUJJSV86uPlfiGS3kKDc0JB7AhQ+qmHqagY/r36Re/J3Q1OfvcA1dA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_rrsig.rpl0000644000175000017500000001341714010434640017225 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with qtype RRSIG response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query for A ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ; RRSIG query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN RRSIG SECTION ANSWER ;www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN RRSIG ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.example.com. IN RRSIG SECTION ANSWER www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b1_nameerror_noce.rpl0000644000175000017500000001016314010434640022545 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.1 name error without ce NSEC3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NXDOMAIN SECTION QUESTION a.c.x.w.example. IN A SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR that covers the "next closer" name (c.x.w.example) ;; H(c.x.w.example) = 0va5bpr2ou0vk0lbqeeljri88laipsfh 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd ( 2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. OSgWSm26B+cS+dDL8b5QrWr/dEWhtCsKlwKL IBHYH6blRxK9rC0bMJPwQ4mLIuw85H2EY762 BOCXJZMnpuwhpA== ) ;; NSEC3 RR that matches the closest encloser (x.w.example) ;; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995 ; b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd ( gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) ; b4um86eghhds6nea196smvmlo4ors995.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. ZkPG3M32lmoHM6pa3D6gZFGB/rhL//Bs3Omh 5u4m/CUiwtblEVOaAKKZd7S959OeiX43aLX3 pOv0TSTyiTxIZg== ) ;; NSEC3 RR that covers wildcard at the closest encloser (*.x.w.example) ;; H(*.x.w.example) = 92pqneegtaue7pjatc3l3qnk738c6v5m 35mthgpgcu1qg68fab165klnsnk3dpvl.example. NSEC3 1 1 12 aabbccdd ( b4um86eghhds6nea196smvmlo4ors995 NS DS RRSIG ) 35mthgpgcu1qg68fab165klnsnk3dpvl.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. g6jPUUpduAJKRljUsN8gB4UagAX0NxY9shwQ Aynzo8EUWH+z6hEIBlUTPGj15eZll6VhQqgZ XtAIR3chwgW+SA== ) SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.c.x.w.example. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION a.c.x.w.example. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/domain_insec_ds.rpl0000644000175000017500000001646514010434640020361 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" domain-insecure: "sub.example.com" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with domain-insecure below a DS ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_nsec3_hash.10000644000175000017500000001336414010434640017656 0ustar wouterwouter; ; NSEC3 hash algo test file. ; The hash cache is maintained for the duration of the file. ; Every entry is a hash test. ; query name is hashed. ; answer AAAA record hash the correct hashed answer name. ; auth NSEC3 record has the hash parameters. ; ; These are from the nsec3-draft-11 example zone. ; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom ENTRY_BEGIN SECTION QUESTION example. IN AAAA SECTION ANSWER 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(a.example) = 35mthgpgcu1qg68fab165klnsnk3dpvl ENTRY_BEGIN SECTION QUESTION a.example. IN AAAA SECTION ANSWER 35mthgpgcu1qg68fab165klnsnk3dpvl.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(ai.example) = gjeqe526plbf1g8mklp59enfd789njgi ENTRY_BEGIN SECTION QUESTION ai.example. IN AAAA SECTION ANSWER gjeqe526plbf1g8mklp59enfd789njgi.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(ns1.example) = 2t7b4g4vsa5smi47k61mv5bv1a22bojr ENTRY_BEGIN SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER 2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(ns2.example) = q04jkcevqvmu85r014c7dkba38o0ji5r ENTRY_BEGIN SECTION QUESTION ns2.example. IN AAAA SECTION ANSWER q04jkcevqvmu85r014c7dkba38o0ji5r.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h ENTRY_BEGIN SECTION QUESTION w.example. IN AAAA SECTION ANSWER k8udemvp1j2f7eg6jebps17vp3n8i58h.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en ENTRY_BEGIN SECTION QUESTION *.w.example. IN AAAA SECTION ANSWER r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(x.w.example) = b4um86eghhds6nea196smvmlo4ors995 ENTRY_BEGIN SECTION QUESTION x.w.example. IN AAAA SECTION ANSWER b4um86eghhds6nea196smvmlo4ors995.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(y.w.example) = ji6neoaepv8b5o6k4ev33abha8ht9fgc ENTRY_BEGIN SECTION QUESTION y.w.example. IN AAAA SECTION ANSWER ji6neoaepv8b5o6k4ev33abha8ht9fgc.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(x.y.w.example) = 2vptu5timamqttgl4luu9kg21e0aor3s ENTRY_BEGIN SECTION QUESTION x.y.w.example. IN AAAA SECTION ANSWER 2vptu5timamqttgl4luu9kg21e0aor3s.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; H(xx.example) = t644ebqk9bibcna874givr6joj62mlhv ; capitalization changed. ENTRY_BEGIN SECTION QUESTION xX.example. IN AAAA SECTION ANSWER t644ebqk9bibcna874givr6joj62mlhv.example. AAAA ::1 SECTION AUTHORITY b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd (gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) ENTRY_END ; H(2t7b4g4vsa5smi47k61mv5bv1a22bojr.example) ; = kohar7mbb8dc2ce8a9qvl8hon4k53uhi ENTRY_BEGIN SECTION QUESTION 2t7b4g4vsa5smi47k61mv5bv1a22bojr.example. IN AAAA SECTION ANSWER kohar7mbb8dc2ce8a9qvl8hon4k53uhi.example. AAAA ::1 SECTION AUTHORITY b4um86eghhds6nea196smvmlo4ors995.example. NSEC3 1 1 12 aabbccdd (gjeqe526plbf1g8mklp59enfd789njgi MX RRSIG ) ENTRY_END ; repeat entry to test the cache. ; H(example) = 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom ENTRY_BEGIN SECTION QUESTION example. IN AAAA SECTION ANSWER 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; repeat entry to test the cache. ; H(a.example) = 35mthgpgcu1qg68fab165klnsnk3dpvl ENTRY_BEGIN SECTION QUESTION a.example. IN AAAA SECTION ANSWER 35mthgpgcu1qg68fab165klnsnk3dpvl.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; repeat entry to test the cache. ; H(ai.example) = gjeqe526plbf1g8mklp59enfd789njgi ENTRY_BEGIN SECTION QUESTION ai.example. IN AAAA SECTION ANSWER gjeqe526plbf1g8mklp59enfd789njgi.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END ; repeat entry to test the cache. ; capitalization of qname. ; H(ai.example) = gjeqe526plbf1g8mklp59enfd789njgi ENTRY_BEGIN SECTION QUESTION AI.example. IN AAAA SECTION ANSWER gjeqe526plbf1g8mklp59enfd789njgi.example. AAAA ::1 SECTION AUTHORITY 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example. NSEC3 1 1 12 aabbccdd (2t7b4g4vsa5smi47k61mv5bv1a22bojr MX DNSKEY NS SOA NSEC3PARAM RRSIG ) ENTRY_END unbound-1.13.1/testdata/local_nosnoop.tdir/0000755000175000017500000000000014010434640020316 5ustar wouterwouterunbound-1.13.1/testdata/local_nosnoop.tdir/local_nosnoop.post0000644000175000017500000000045614010434640024077 0ustar wouterwouter# #-- local_nosnoop.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/local_nosnoop.tdir/local_nosnoop.pre0000644000175000017500000000161614010434640023677 0ustar wouterwouter# #-- local_nosnoop.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT local_nosnoop.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < local_nosnoop.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/local_nosnoop.tdir/local_nosnoop.test0000644000175000017500000000305314010434640024065 0ustar wouterwouter# #-- local_nosnoop.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test # # www.example.com is available through recursion. # foo.example.com is available through local-data (and recursion...). # # so, with 'allow' the cache snoop stops working: # dig +norec for www does not work any more. # echo "> dig www.example.com. +RD" dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> dig www.example.com. +norec" dig @localhost +norec -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "REFUSED" outfile; then echo "OK rcode" else echo "Not OK rcode" exit 1 fi if grep "10.20.30.40" outfile; then echo "Not OK" exit 1 else echo "OK" fi echo "> dig foo.example.com. +RD" dig @localhost -p $UNBOUND_PORT foo.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "1.1.1.1" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> dig foo.example.com. +norec" dig @localhost +norec -p $UNBOUND_PORT foo.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "1.1.1.1" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/local_nosnoop.tdir/local_nosnoop.testns0000644000175000017500000000053114010434640024424 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION foo IN A SECTION ANSWER foo IN A 10.20.30.50 ENTRY_END unbound-1.13.1/testdata/local_nosnoop.tdir/local_nosnoop.dsc0000644000175000017500000000051314010434640023655 0ustar wouterwouterBaseName: local_nosnoop Version: 1.0 Description: Local-data and access control allow no snoop test. CreationDate: Mon Sep 1 14:36:53 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: local_nosnoop.pre Post: local_nosnoop.post Test: local_nosnoop.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/local_nosnoop.tdir/local_nosnoop.conf0000644000175000017500000000071114010434640024031 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-data: "foo.example.com. A 1.1.1.1" access-control: 0.0.0.0/0 allow access-control: 127.0.0.0/8 allow access-control: ::0/0 allow access-control: ::1 allow access-control: ::ffff:127.0.0.1 allow forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_error.rpl0000644000175000017500000000114614010434640017222 0ustar wouterwouter; config options go here. forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Forwarder and an error happens on server query. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; But the pending query fails due to error (say TCP failure or malloc or ...) ; This is iterator/iterator.h OUTBOUND_MSG_RETRY number of errors. STEP 2 ERROR STEP 3 ERROR STEP 4 ERROR STEP 5 ERROR STEP 6 ERROR ; returns servfail STEP 14 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION REPLY SERVFAIL QR RD RA MATCH all www.example.com. IN A ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnametocnamewctoposwc.rpl0000644000175000017500000002612014010434640022475 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b" val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a regular cname to wildcard cname to wildcard response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION start.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION start.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 120 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk= ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 8 AwEAAdWzfjQD2bfQuoQGNYuS0ByosBxiTkoKcy9kMoWOQ/jx9rvTRhHImWxTxFtIyZOoRgn6E6mE71e5Y1q1nuyH544Em+4rNRMMW4bzecQmMmPk+B97MqW9aW6e4BwiCTt52IGfL++5GORYcaITw9UOlQLYH1oHHUNUC6ebHENofLTj ;{id = 64050 (zsk), size = 1024b} example.com. 3600 IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b ;{id = 46426 (ksk), size = 1024b} example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20121126123249 20121029123249 46426 example.com. pisNb/A40XDEiMpcYtxc+yO6osISyfpqz+0UZ61pd70+TLXMF197zr9SqOVJHyRI6G2lSnFggxYrZDpxLbxOW0RY/KfjD3xlI14M/2DieJ1NdlQuYFGgTwxcoINUJ/wRd4YUxkF4JS0D4NBdQ0yQYR0KqDr84oyhnULEHX6WB7s= SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION start.example.com. IN A SECTION ANSWER start.example.com. 3600 IN CNAME x.y.z.wc.example.com. start.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126131853 20121029131853 64050 example.com. uN8+hg2b9kqpso4zTtpb8CdkGkgOdlbayH1Ui7NVSi1Y8un8FDG4NHy2gpCi0zIMpeAOa5bENe3cdTEwYZKHQdvnGjaI/zFWpFAzXsEFg0VlLxDQXSzRB6GtoFoUEYiZBHsmLIy3zWjuihlWK9fRzyPyVtBDDmqU8KK7+H3BYp0= x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com. x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126131853 20121029131853 64050 example.com. NQTIY1uMK1jxVMHOaMB4shedyhdAERZuPiZXytfqSH36hDVMf1C8tSxdbCjJ90lOLEWNtMmT09l5kh14gp1XIaBHzLuDsYmZJVeudBGCaQRkbM5focd2VMd8V4hHQk4odwsRrSY6IETftHeqeFiRifru/rI3x5Dlv8awI6V5TZI= x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126131826 20121029131826 64050 example.com. iS1Pe45xt8SLGlmfmrSPTrnIAlwpIX8leTrsoLgpQJc98aA0XJmO/D32CbMTRZzAM1oBVggm80ht2RIQkX3W1NvN/prcu+Gp0Zrm0rtW+7Q7VwcSbo7jyHh5K8Mppp2OsCleexco5NVAKpDMvD0nyG+CsKtNMQpKK2DlumQsraE= SECTION AUTHORITY *.wc.example.com. 86400 IN NSEC www.example.com. CNAME RRSIG NSEC *.wc.example.com. 86400 IN RRSIG NSEC 8 3 86400 20121126131853 20121029131853 64050 example.com. YrmCLu0uGgD2gcU4p12BGnUGYcrKmfg82MJHSF5OnVmmJxXiSbSBnZPahbJNGA/kPLt+SlDyBTcssZKXWxM6bW7WF57OwffOj7rMyr5vhx7J6OsuWKotPVqnUFDx9j/rOum24yCKqoBWvpW/RYUHLuX1Wm05WMCgNWhuN4wqwiU= *.end.example.com. 86400 IN NSEC escapedtext.example.com. A RRSIG NSEC *.end.example.com. 86400 IN RRSIG NSEC 8 3 86400 20121126131826 20121029131826 64050 example.com. P6uJSImaee+5NHlTP06pMxgO69qxjJc0Uo1+htjVyE8f15MhG8A7NttvzggbtyzmfLMPr7TilM+Mm7hC3pIk/TeBEdH8p+8qypnY0NzPntz5z1+6C6ZTjDXp6NxDwMz7th31r3B3u4xo/K4qMnXmrAFOIE5Lopk0uDGXfjKPCKE= example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126131826 20121029131826 64050 example.com. NgY7UAdkXprnCi/O6c5XoB82tqLBd1bY9LmDG9wwN0zEUR5aHQcOmX9waHyqXQI86SOFQbGCvO2wDLqdqWniw1IYf4S66Vf9KrpaH2gVbvHKiEpGJPeDYQcD5xkv50Lsp4ktcLyuO/dk8ORCP7E2yC5IQVNeFgUfaqttZcJoxuQ= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126131826 20121029131826 64050 example.com. L/EsWsRNhM0Lt8877XYfm0FkVc+utuRPYlW/yxEi/Nzs/mTb9BMrOygsW0qfpYakYgfFvinR7S7ce9/naWidzGkWKYR85g2WFms3/TgchpmfjZHEsNyuT8zsiGrj3bQ3RxpT5cmt/IS2QlOak/RhdtawKfd9aqkMTVpP2idEQwY= ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.y.z.wc.example.com. IN A SECTION ANSWER x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com. x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126131853 20121029131853 64050 example.com. NQTIY1uMK1jxVMHOaMB4shedyhdAERZuPiZXytfqSH36hDVMf1C8tSxdbCjJ90lOLEWNtMmT09l5kh14gp1XIaBHzLuDsYmZJVeudBGCaQRkbM5focd2VMd8V4hHQk4odwsRrSY6IETftHeqeFiRifru/rI3x5Dlv8awI6V5TZI= x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126131826 20121029131826 64050 example.com. iS1Pe45xt8SLGlmfmrSPTrnIAlwpIX8leTrsoLgpQJc98aA0XJmO/D32CbMTRZzAM1oBVggm80ht2RIQkX3W1NvN/prcu+Gp0Zrm0rtW+7Q7VwcSbo7jyHh5K8Mppp2OsCleexco5NVAKpDMvD0nyG+CsKtNMQpKK2DlumQsraE= SECTION AUTHORITY *.wc.example.com. 86400 IN NSEC www.example.com. CNAME RRSIG NSEC *.wc.example.com. 86400 IN RRSIG NSEC 8 3 86400 20121126131853 20121029131853 64050 example.com. YrmCLu0uGgD2gcU4p12BGnUGYcrKmfg82MJHSF5OnVmmJxXiSbSBnZPahbJNGA/kPLt+SlDyBTcssZKXWxM6bW7WF57OwffOj7rMyr5vhx7J6OsuWKotPVqnUFDx9j/rOum24yCKqoBWvpW/RYUHLuX1Wm05WMCgNWhuN4wqwiU= *.end.example.com. 86400 IN NSEC escapedtext.example.com. A RRSIG NSEC *.end.example.com. 86400 IN RRSIG NSEC 8 3 86400 20121126131826 20121029131826 64050 example.com. P6uJSImaee+5NHlTP06pMxgO69qxjJc0Uo1+htjVyE8f15MhG8A7NttvzggbtyzmfLMPr7TilM+Mm7hC3pIk/TeBEdH8p+8qypnY0NzPntz5z1+6C6ZTjDXp6NxDwMz7th31r3B3u4xo/K4qMnXmrAFOIE5Lopk0uDGXfjKPCKE= example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126131826 20121029131826 64050 example.com. NgY7UAdkXprnCi/O6c5XoB82tqLBd1bY9LmDG9wwN0zEUR5aHQcOmX9waHyqXQI86SOFQbGCvO2wDLqdqWniw1IYf4S66Vf9KrpaH2gVbvHKiEpGJPeDYQcD5xkv50Lsp4ktcLyuO/dk8ORCP7E2yC5IQVNeFgUfaqttZcJoxuQ= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126131826 20121029131826 64050 example.com. L/EsWsRNhM0Lt8877XYfm0FkVc+utuRPYlW/yxEi/Nzs/mTb9BMrOygsW0qfpYakYgfFvinR7S7ce9/naWidzGkWKYR85g2WFms3/TgchpmfjZHEsNyuT8zsiGrj3bQ3RxpT5cmt/IS2QlOak/RhdtawKfd9aqkMTVpP2idEQwY= ENTRY_END ENTRY_BEGING MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.y.z.end.example.com. IN A SECTION ANSWER x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126131826 20121029131826 64050 example.com. iS1Pe45xt8SLGlmfmrSPTrnIAlwpIX8leTrsoLgpQJc98aA0XJmO/D32CbMTRZzAM1oBVggm80ht2RIQkX3W1NvN/prcu+Gp0Zrm0rtW+7Q7VwcSbo7jyHh5K8Mppp2OsCleexco5NVAKpDMvD0nyG+CsKtNMQpKK2DlumQsraE= SECTION AUTHORITY *.end.example.com. 86400 IN NSEC escapedtext.example.com. A RRSIG NSEC *.end.example.com. 86400 IN RRSIG NSEC 8 3 86400 20121126131826 20121029131826 64050 example.com. P6uJSImaee+5NHlTP06pMxgO69qxjJc0Uo1+htjVyE8f15MhG8A7NttvzggbtyzmfLMPr7TilM+Mm7hC3pIk/TeBEdH8p+8qypnY0NzPntz5z1+6C6ZTjDXp6NxDwMz7th31r3B3u4xo/K4qMnXmrAFOIE5Lopk0uDGXfjKPCKE= example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126131826 20121029131826 64050 example.com. NgY7UAdkXprnCi/O6c5XoB82tqLBd1bY9LmDG9wwN0zEUR5aHQcOmX9waHyqXQI86SOFQbGCvO2wDLqdqWniw1IYf4S66Vf9KrpaH2gVbvHKiEpGJPeDYQcD5xkv50Lsp4ktcLyuO/dk8ORCP7E2yC5IQVNeFgUfaqttZcJoxuQ= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk= ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION start.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR TC RD RA AD DO NOERROR SECTION QUESTION start.example.com. IN A SECTION ANSWER start.example.com. 3600 IN CNAME x.y.z.wc.example.com. start.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126131853 20121029131853 64050 example.com. uN8+hg2b9kqpso4zTtpb8CdkGkgOdlbayH1Ui7NVSi1Y8un8FDG4NHy2gpCi0zIMpeAOa5bENe3cdTEwYZKHQdvnGjaI/zFWpFAzXsEFg0VlLxDQXSzRB6GtoFoUEYiZBHsmLIy3zWjuihlWK9fRzyPyVtBDDmqU8KK7+H3BYp0= x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com. x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126131853 20121029131853 64050 example.com. NQTIY1uMK1jxVMHOaMB4shedyhdAERZuPiZXytfqSH36hDVMf1C8tSxdbCjJ90lOLEWNtMmT09l5kh14gp1XIaBHzLuDsYmZJVeudBGCaQRkbM5focd2VMd8V4hHQk4odwsRrSY6IETftHeqeFiRifru/rI3x5Dlv8awI6V5TZI= x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126131826 20121029131826 64050 example.com. iS1Pe45xt8SLGlmfmrSPTrnIAlwpIX8leTrsoLgpQJc98aA0XJmO/D32CbMTRZzAM1oBVggm80ht2RIQkX3W1NvN/prcu+Gp0Zrm0rtW+7Q7VwcSbo7jyHh5K8Mppp2OsCleexco5NVAKpDMvD0nyG+CsKtNMQpKK2DlumQsraE= SECTION AUTHORITY *.wc.example.com. 86400 IN NSEC www.example.com. CNAME RRSIG NSEC *.wc.example.com. 86400 IN RRSIG NSEC 8 3 86400 20121126131853 20121029131853 64050 example.com. YrmCLu0uGgD2gcU4p12BGnUGYcrKmfg82MJHSF5OnVmmJxXiSbSBnZPahbJNGA/kPLt+SlDyBTcssZKXWxM6bW7WF57OwffOj7rMyr5vhx7J6OsuWKotPVqnUFDx9j/rOum24yCKqoBWvpW/RYUHLuX1Wm05WMCgNWhuN4wqwiU= *.end.example.com. 86400 IN NSEC escapedtext.example.com. A RRSIG NSEC *.end.example.com. 86400 IN RRSIG NSEC 8 3 86400 20121126131826 20121029131826 64050 example.com. P6uJSImaee+5NHlTP06pMxgO69qxjJc0Uo1+htjVyE8f15MhG8A7NttvzggbtyzmfLMPr7TilM+Mm7hC3pIk/TeBEdH8p+8qypnY0NzPntz5z1+6C6ZTjDXp6NxDwMz7th31r3B3u4xo/K4qMnXmrAFOIE5Lopk0uDGXfjKPCKE= SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_secds.rpl0000644000175000017500000001646714010434640017210 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with secure delegation ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFCW3ix0GD4BSvNLWIbROCJt5DAW9AhRt/kg9kBKJ20UBUdumrBUHqnskdA== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ; sub.example.com. 3600 IN DS 30899 RSASHA1 1 f7ed618f24d5e5202927e1d27bc2e84a141cb4b3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} sub.example.com. 3600 IN RRSIG DNSKEY 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. uNGp99iznjD7oOX02XnQbDnbg75UwBHRvZSKYUorTKvPUnCWMHKdRsQ+mf+Fx3GZ+Fz9BVjoCmQqpnfgXLEYqw== ;{id = 30899} SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN RRSIG NS 5 3 3600 20070926134150 20070829134150 30899 sub.example.com. wcpHeBILHfo8C9uxMhcW03gcURZeUffiKdSTb50ZjzTHgMNhRyMfpcvSpXEd9548A9UTmWKeLZChfr5Z/glONw== ;{id = 30899} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ns.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. UF7shD/gt1FOp2UHgLTNbPzVykklSXFMEtJ1xD+Hholwf/PIzd7zoaIttIYibNa4fUXCqMg22H9P7MRhfmFe6g== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 www.sub.example.com. 3600 IN RRSIG A 5 4 3600 20070926134150 20070829134150 30899 sub.example.com. 0DqqRfRtm7VSEQ4mmBbzrKRqQAay3JAE8DPDGmjtokrrjN9F1G/HxozDV7bjdIh2EChlQea8FPwf/GepJMUVxg== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_unsecds_negcache.rpl0000644000175000017500000001271714010434640021362 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with insecure delegation and DS negative cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response for delegation to sub.example.com. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; query for missing DS record. ; get it from the negative cache instead! ;ENTRY_BEGIN ;MATCH opcode qtype qname ;ADJUST copy_id ;REPLY QR NOERROR ;SECTION QUESTION ;sub.example.com. IN DS ;SECTION ANSWER ;SECTION AUTHORITY ;example.com. IN SOA ns.example.com. h.example.com. 2007090504 1800 1800 2419200 7200 ;example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFC5uwIHSehZtetK2CMNXttSFUB0XAhROFDAgy/FaxR8zFXJzyPdpQG93Sw== ;{id = 2854} ;sub.example.com. IN NSEC www.example.com. NS RRSIG NSEC ;sub.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFDCaiDM6G+glwNW276HWdH+McmjgAhRSwF5OfimNQCqkWgnYotLOwUghKQ== ;{id = 2854} ;SECTION ADDITIONAL ;ns.sub.example.com. IN A 1.2.3.6 ;ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.6 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. 3600 IN A 11.11.11.11 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_dnsseclame_ta.rpl0000644000175000017500000001672614010434640021070 0ustar wouterwouter; config options server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" fake-sha1: yes trust-anchor-signaling: no qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test dnssec-lame detection at anchor point. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ; this entry; glue will make unbound take this reference first. ; it is however, the lame server. ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION e.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134802 20070829134802 2854 example.com. AJwwYIUGH7HgjehzPVkrVUFmFkSGGksGjUX+/zqpCOG9a/cgGC+n40I= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134802 20070829134802 2854 example.com. ABUu7ITHLl6vfuWzedIp03igXknUR1gYPBl8X6uIDrvraN1bjQJPXME= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ; lame DNSKEY response. ; here without sigs (assuming server does unknown-RR type handling) ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} ENTRY_END ; lame NS response ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ; the lame response. No RRSIGS. ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; the wrong answer. www.example.com. IN A 10.20.30.40 SECTION AUTHORITY ; dnssec-lameness detection depends on this information example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_prefetch_ns.rpl0000644000175000017500000001352414010434640020557 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" prefetch: "yes" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolver prefetch of NS record for moved domain ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 200 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. (before sale of domain) RANGE_BEGIN 0 20 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; a.gtld-servers.net. (after sale of domain) RANGE_BEGIN 30 200 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 8.8.8.8 ENTRY_END RANGE_END ; ns.example.com. first owner RANGE_BEGIN 0 200 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. new owner RANGE_BEGIN 0 200 ADDRESS 8.8.8.8 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 8.8.8.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 88.88.88.88 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 8.8.8.8 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 5 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN NS ENTRY_END ; recursion happens here. STEP 15 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 3600 IN NS ns.example.com. SECTION AUTHORITY SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ENTRY_END ; after 1800 secs still the cached answer STEP 20 TIME_PASSES ELAPSE 1800 STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 1800 IN A 10.20.30.40 SECTION AUTHORITY example.com. 1800 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1800 IN A 1.2.3.4 ENTRY_END STEP 44 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN NS ENTRY_END ; recursion happens here. STEP 45 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 1800 IN NS ns.example.com. SECTION AUTHORITY SECTION ADDITIONAL ns.example.com. 1800 IN A 1.2.3.4 ENTRY_END ; after 1440 we are 360 seconds before the expiry STEP 50 TIME_PASSES ELAPSE 1440 STEP 60 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN NS ENTRY_END ; recursion happens here. STEP 70 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 360 IN NS ns.example.com. SECTION AUTHORITY SECTION ADDITIONAL ns.example.com. 360 IN A 1.2.3.4 ENTRY_END STEP 80 TRAFFIC ; let traffic flow for prefetch to happen ; check result of that prefetch STEP 90 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN NS ENTRY_END ; recursion happens here. ; because the prefetch+current makes old-NS expired, new delegation is picked up STEP 91 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 3600 IN NS ns.example.com. SECTION AUTHORITY SECTION ADDITIONAL ns.example.com. 3600 IN A 8.8.8.8 ENTRY_END STEP 100 TIME_PASSES ELAPSE 2360 STEP 120 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 130 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 88.88.88.88 SECTION AUTHORITY example.com. 1240 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 1240 IN A 8.8.8.8 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+005+60946.private0000644000175000017500000000104514010434640021471 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 5 (RSASHA1) Modulus: 6JpSJQilYx9jPkvSx8lNlae430jIFfh6b1WOyipBOw4PUcNCk1vhu68mjuk3ZoELE1Lt7Q4vx7aZUHoItn7x6Q== PublicExponent: AQAB PrivateExponent: Y21D28y8VYifNYvXx8rGvUf6gIdt7+ZM/7ZE2SoCxCjHkHQqWh9k1l5xEjCDZ7YOyFyQAbowMhEsr6C+11UvOQ== Prime1: /4r1mlWLh3x1afMpWPxIfeNFsRHeyujk7GBuCZ0MlkM= Prime2: 6QTa08YMv3JQrdEe8n+zZvMDkOhS/1wltFBn+mt9cmM= Exponent1: 4AWFDBiEanEsSYaXL+By+JF+Lh3Zb4696Y8byCe6uhs= Exponent2: p7bo0bgggMMEsrZrcdrcA2Mx0+CDrGxkbu3YiPNI7UU= Coefficient: ahJU2OH7E2Q1yhzja925x7g4r289nD/GGIHz47e0ysk= unbound-1.13.1/testdata/iter_pcnamerec.rpl0000644000175000017500000001217014010434640020210 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with parent child differ names recursive. ; the parent has an extra name that is the only working one. ; and that name needs its parent-side glue to work. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. ; the working version. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.55 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.55 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END RANGE_END ; ns.example.net ; Broken. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END ; now that the bad child NS record is in cache, ask something else. STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.55 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_signatures.10000644000175000017500000026364414010434640020034 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; DNSKEY used for testing, from august 2007. ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN DNSKEY SECTION ANSWER nlnetlabs.nl. 3600 IN DNSKEY 256 3 5 AQOpbYrUNahQAV5/wTCJ9/wbSM/eV+N+jYZAMmIKn6QF3Z57B6upgcjV HEOyFkA3YcIt5Fz+WqodCrABn4qShd6qJYR8iP3S6fjN6PVpljMjrhsp /6yVc30C6c7P2b/mgWZi5iYC56lkegDs0VGfAW5HmosKjQVoYMjOtNo3 F+MGQw== nlnetlabs.nl. 3600 IN DNSKEY 257 3 5 AQO6TtiOq7uZa8wHrQNUGT3ZXudaGjnbduUnyLw9WwiDEd8Vy1Ao4FVK 7xqEAFo4F5gOkdGr6Y7Xz0F+Z5e1AaQlvhBhjujvIhPZ5EIuNGkGUbRT YLhVX5OJUHMYdrXpGPdyG+V1TBTmxJ/+OmUdkWiT2J6w5XUpSYRB+p0k YwGf7uxPO/cDNp67fILtx1+dduS30B7QygOK+f7PeAZDcdBo2qsy5rnB sPsLhbEpdpWFs2WPTVo0IGYAER3nG6WZptiq8OYAb1K22K8i+j8+hDwv NRDMjWeVMebBZXbNQGkwsGgJsIsaoGfVOT3WdeJxDu9GqODM//mwZxTv O7StbOht nlnetlabs.nl. 3600 IN DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ== ENTRY_END ; first entry; the www site ENTRY_BEGIN SECTION QUESTION www.nlnetlabs.nl. IN A SECTION ANSWER www.nlnetlabs.nl. 600 IN A 213.154.224.1 www.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Luav3fjE1VGhran3tnxR93cgoEyH3Kh//240KDCT8k0U4Tfw6xSBMVjj rf3oH13SXCZfYdJYZbZEahBvysMRm40Izl4+rpfUKzwjHXn1una1o4Gt A48v0fwffCXtUPz1TDFq9IKlVe95uLwjheMF8auDXHLwLItj2lF827Dd VI0= SECTION AUTHORITY nlnetlabs.nl. 86400 IN NS ns7.domain-registry.nl. nlnetlabs.nl. 86400 IN NS open.nlnetlabs.nl. nlnetlabs.nl. 86400 IN NS omval.tednet.nl. nlnetlabs.nl. 86400 IN RRSIG NS 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. mXE8tSPoCvD7f6SjQ4skJi8tvbiloN5dlXNHcwufK1rREEVl8oCJ34VV cldL6tv4APj8w0PXmYOiB3xM3TIFpi33n6eqRjudKiq5906PKaj/zLEE cl+dU64+hg9VL0rsT+Fx7TWs/i+gh6oiQm6MsbG415UWUgqtZLflwmMB SC4= SECTION ADDITIONAL ns7.domain-registry.nl. 8380 IN A 62.4.86.230 open.nlnetlabs.nl. 600 IN A 213.154.224.1 open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::53 open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 omval.tednet.nl. 28800 IN A 213.154.224.17 omval.tednet.nl. 28800 IN AAAA 2001:7b8:206:1:200:39ff:fe59:b187 open.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ViuIpiw1c6a0roF+XCOSFMQ3BCH/qmy+lRcU0Y8jEeoN7vLu5rJlWUuF yuuU3kAx6RFB/XDPjxNzm2OER/JJSUUeagzXSqnJVL8Orj03RGpS2PAW 5p66uf5uMv34VEednxoGoigVHKIBfpIwYIbcaXAkDaRMMpw+ylRWwWee q84= open.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. bcDWQYXDf6XEyNFeYeDJZTcdUCD4hbfzEIMCL1Fap4Lm6FNSvACQ8c+F F48UfJVdvSZeczDKgsHSm7nte81qYu4+lBQm5TuJcMkjgJakHumKGV0Y 17wIJAsMPiacw+NNICweKO4x4RKwNzWgcn1ymktYsiaPIJpOxQCQVJcU tlg= ENTRY_END ENTRY_BEGIN SECTION QUESTION bartok.nlnetlabs.nl. IN MX SECTION ANSWER bartok.nlnetlabs.nl. 600 IN MX 50 bartok.nlnetlabs.nl. bartok.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. bartok.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. kPtROxDJsZMq0XF/sM6tF3MQyaWBPAKGmEdWJ1DAcKwR5GJgBCCPbL4Z poV7NtJwfs0tN+vE5IqdxRu707Px3Omoc9HUJqF7mwu+dr8R4ltMkUGH 4XJpfSty7/4Q4B7Y/BrcJbYduudi4YmwqmO0ffFDJjTjDgJGCGC/DFtE HAo= ENTRY_END ; big zone apex ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN ANY SECTION ANSWER nlnetlabs.nl. 18000 IN NSEC _sip._udp.nlnetlabs.nl. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY nlnetlabs.nl. 18000 IN RRSIG NSEC 5 2 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. RMppeajhOKtJXWq2HRFHN7fbbBVrqQwyr8uuiaSft48JpCA4QfM8/sxD ahqGOt2P5BvMqVeHz6oWPYrxpnoe9NGJBYCnQ50aipTEFohct9HTFUFu cnk2NoEizMHPWWbQOhVxXaL+sQHZhLR69DIu6KwH9SNu8Dks9V2n6Yi5 slg= nlnetlabs.nl. 86400 IN A 213.154.224.1 nlnetlabs.nl. 86400 IN RRSIG A 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. mpbqSRHxv3TUo+MgzQndhWdZp0CqlOyaIPKFp2trycJ7onH63hCZ7Ixd d4sk/DhIfgzoo8HHootbsYvFCHr5oue8qgkAk9bjco7wWFt9KskturwS RS29p8+jTf4uQ0oXOad0IJo07iccpPyqVapIOHjOFwsFKG1ma7TZQRcW Sz0= nlnetlabs.nl. 86400 IN NS open.nlnetlabs.nl. nlnetlabs.nl. 86400 IN NS omval.tednet.nl. nlnetlabs.nl. 86400 IN NS ns7.domain-registry.nl. nlnetlabs.nl. 86400 IN RRSIG NS 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. mXE8tSPoCvD7f6SjQ4skJi8tvbiloN5dlXNHcwufK1rREEVl8oCJ34VV cldL6tv4APj8w0PXmYOiB3xM3TIFpi33n6eqRjudKiq5906PKaj/zLEE cl+dU64+hg9VL0rsT+Fx7TWs/i+gh6oiQm6MsbG415UWUgqtZLflwmMB SC4= nlnetlabs.nl. 86400 IN RRSIG SOA 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. C54bDHKC2sRbVUrDOeM2kXCHpJIFu0LlZWAFVFLf4l1Grfj+B4WcXqel kSVhi/Gpt70VW+zDEOHrS0kcE5XaBnrQE1AUZ9QjGyfjXlRzGWYbyVLD evIFrs7FdIeGKKWWp1YDLUHHF+txDT9NFu6KyEqPbZEVgIVok3skO5Vu jpA= nlnetlabs.nl. 86400 IN MX 100 omval.tednet.nl. nlnetlabs.nl. 86400 IN MX 50 open.nlnetlabs.nl. nlnetlabs.nl. 86400 IN RRSIG MX 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. o9l0WEH53WBdFd+3PE5UHN8kAJVFDb60DcES9oWlBOVwsBMqeTU7eDQr o+wlq1AlUYC+PlFb/W1vLdWN6eCJ//4iPxFJhKoElUEFR+ICPYIIZcD9 VLJM3i4FVsqUwcfgHdOcafciMpMeCgYutxbQDoOwDPe5o+jbynu3gq9a PQ4= nlnetlabs.nl. 86400 IN TXT "Stichting NLnet Labs zone" nlnetlabs.nl. 86400 IN RRSIG TXT 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. lSeFN/S4BATNoC5DG2fYtdSGkC5yxIwOxMH3rChYurB/bD3M4435ySKS Z+vHjLbXQqPtlXw1Jt5ZcVZujRhBM6kEmYZ2XwvC0rPZF0wMtz9nFhxK oc+seBSuP0R9GkbJZReho+JwAYh4F7EC/RQVbHylE1lPAQUHtxCGjmlV EAg= nlnetlabs.nl. 86400 IN AAAA 2001:7b8:206:1::1 nlnetlabs.nl. 86400 IN RRSIG AAAA 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. KGGDcoOAmCby+/xrK7f1b/t/evXfwWgm39VVzE/xButUtPzXv+0htDgO jtUMmouO3GWicIU3fGCffDBCdOmdIrMffjvrR0lKmQAC5JwWPt2FNF/F K7dKh+KrRMp2ruqucpajfvwShWnfesEWaTYWNox1/saLjsw1NXiQ6h+0 2bc= nlnetlabs.nl. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.nlnetlabs.nl. nlnetlabs.nl. 600 IN RRSIG NAPTR 5 2 600 20070912141341 20070815141341 18182 nlnetlabs.nl. cxgMuZWTVJEagjnERLGjnPNZ7JKuyfe3o1gkkjoS1sg+AQb/8nUEKO/A tIoAwqPHWyALjlbOf25mWEIWviYVVt9TDn6d8k4saWNgTdnnCS+Kc5sM fV/Wz0Np/eQRZElBN0fP4QSBv0rk1VjqK1FHnFpSYz/zRV7FqDSQE1nQ 64w= nlnetlabs.nl. 3600 IN DNSKEY 257 3 5 AQO6TtiOq7uZa8wHrQNUGT3ZXudaGjnbduUnyLw9WwiDEd8Vy1Ao4FVK 7xqEAFo4F5gOkdGr6Y7Xz0F+Z5e1AaQlvhBhjujvIhPZ5EIuNGkGUbRT YLhVX5OJUHMYdrXpGPdyG+V1TBTmxJ/+OmUdkWiT2J6w5XUpSYRB+p0k YwGf7uxPO/cDNp67fILtx1+dduS30B7QygOK+f7PeAZDcdBo2qsy5rnB sPsLhbEpdpWFs2WPTVo0IGYAER3nG6WZptiq8OYAb1K22K8i+j8+hDwv NRDMjWeVMebBZXbNQGkwsGgJsIsaoGfVOT3WdeJxDu9GqODM//mwZxTv O7StbOht nlnetlabs.nl. 3600 IN DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ== nlnetlabs.nl. 3600 IN DNSKEY 256 3 5 AQOpbYrUNahQAV5/wTCJ9/wbSM/eV+N+jYZAMmIKn6QF3Z57B6upgcjV HEOyFkA3YcIt5Fz+WqodCrABn4qShd6qJYR8iP3S6fjN6PVpljMjrhsp /6yVc30C6c7P2b/mgWZi5iYC56lkegDs0VGfAW5HmosKjQVoYMjOtNo3 F+MGQw== nlnetlabs.nl. 3600 IN RRSIG DNSKEY 5 2 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. foMQGGiev3Lys1fGMfYiHCHnqE9IIzpOFsXECGmT2kPHCRvXWDRcAGMu DWWfCQBPcAlDLZBKCvpUhp/H/VSLS+EA6wonPWN2dS20cDuPWKm3QsHo 6+wQmw7y5t/ejsd+i370dUTjgT40T5bR6nvXZkOLN0DJvaLk7USDRvRg BNU= nlnetlabs.nl. 3600 IN RRSIG DNSKEY 5 2 3600 20070912141341 20070815141341 36867 nlnetlabs.nl. hw0alVZsoFJqe+u4Meg2VMJ9acbLa85V65RvEAB6RDOqXvaYBhok3kNJ HGR4zq+FYC7i4EKczT7HVKdLtxL9QGt0rzVPq++tcE85861kAgHcLpB9 Iml8QkR7dRER/FpQ1t15gTxoGg6ctlNLfDM6j0x5+S144Rg7gAm1YODB VfL5gSML385EVo2nX7Jiv/Rz1Y6shJ5SzmXnkARqhrJDhQE/Tuf2N+HY sCNatrAv3aNwN0P7a+c99qd5esIb/WVt8eR7cx9Z46nO9GV8HOvfeYxh nMnhlQ/Oy+yG2s2FnJMpD9B4m4WS/m/lBR4pyxHvZR2PQ+/drlJ+oRUS Jt4yhw== nlnetlabs.nl. 3600 IN RRSIG DNSKEY 5 2 3600 20070912141341 20070815141341 43791 nlnetlabs.nl. uykSWt5yfpz/IN2jKEO+XPtCj9KBFuNWz7vIk+HvEDd+KhXp7vpjISvC tI/xK6yRCeTBIbX6uxR8VRsWEtoKuWwXWHhNmpPBWTGdDuguHOLiuGBn NBUSiTPhideDW8qx/cir6I1MtqypHjEr2w9dn21xdYZbieNXpdZWDLQl ufw= nlnetlabs.nl. 86400 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. 2007081501 28800 7200 604800 18000 SECTION ADDITIONAL ns7.domain-registry.nl. 8295 IN A 62.4.86.230 open.nlnetlabs.nl. 600 IN A 213.154.224.1 open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::53 open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 omval.tednet.nl. 28800 IN A 213.154.224.17 omval.tednet.nl. 28800 IN AAAA 2001:7b8:206:1:200:39ff:fe59:b187 johnny.nlnetlabs.nl. 600 IN A 213.154.224.44 open.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ViuIpiw1c6a0roF+XCOSFMQ3BCH/qmy+lRcU0Y8jEeoN7vLu5rJlWUuF yuuU3kAx6RFB/XDPjxNzm2OER/JJSUUeagzXSqnJVL8Orj03RGpS2PAW 5p66uf5uMv34VEednxoGoigVHKIBfpIwYIbcaXAkDaRMMpw+ylRWwWee q84= open.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. bcDWQYXDf6XEyNFeYeDJZTcdUCD4hbfzEIMCL1Fap4Lm6FNSvACQ8c+F F48UfJVdvSZeczDKgsHSm7nte81qYu4+lBQm5TuJcMkjgJakHumKGV0Y 17wIJAsMPiacw+NNICweKO4x4RKwNzWgcn1ymktYsiaPIJpOxQCQVJcU tlg= _sip._udp.nlnetlabs.nl. 600 IN RRSIG SRV 5 4 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ON/hEJ3zq5J7QUKEMT7mDY8Jj++cYCpTJoFfR/XjWC+JxQuQ5kA5HHoI kI6kABBVK+/6Npz1wof3ELQxvz3IU1jxVn2gwwofC2BNcf+MKRw6aSwc BKcDWRsrQwtMRABwZ63ixobXIUOr/NWBoRODrKQ+61ntPFmwHHCFmfwR YJ0= johnny.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. EJAy5kI3QxNNABLIw/asxL2LjCMshjnWMNyUeu1pRd7KM3QQUDygnw+c 50MpE1y4X8LkBXDizazoUXPsqEGhq+fzGeFEhdB0DqrxVXtyQ3ikHa+d oVp2jdGiI5zl3yWBlxr4GtLr59jIB0ZU1sL5F0voBIAGv2i6PqArRswr HBI= _sip._udp.nlnetlabs.nl. 600 IN SRV 0 0 5060 johnny.nlnetlabs.nl. ENTRY_END ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN AXFR SECTION ANSWER ; <<>> DiG 9.4.1-P1 <<>> @open.nlnetlabs.nl. nlnetlabs.nl. AXFR ; (3 servers found) ;; global options: printcmd nlnetlabs.nl. 86400 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. 2007081501 28800 7200 604800 18000 nlnetlabs.nl. 18000 IN NSEC _sip._udp.nlnetlabs.nl. A NS SOA MX TXT AAAA NAPTR RRSIG NSEC DNSKEY nlnetlabs.nl. 18000 IN RRSIG NSEC 5 2 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. RMppeajhOKtJXWq2HRFHN7fbbBVrqQwyr8uuiaSft48JpCA4QfM8/sxD ahqGOt2P5BvMqVeHz6oWPYrxpnoe9NGJBYCnQ50aipTEFohct9HTFUFu cnk2NoEizMHPWWbQOhVxXaL+sQHZhLR69DIu6KwH9SNu8Dks9V2n6Yi5 slg= nlnetlabs.nl. 86400 IN A 213.154.224.1 nlnetlabs.nl. 86400 IN RRSIG A 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. mpbqSRHxv3TUo+MgzQndhWdZp0CqlOyaIPKFp2trycJ7onH63hCZ7Ixd d4sk/DhIfgzoo8HHootbsYvFCHr5oue8qgkAk9bjco7wWFt9KskturwS RS29p8+jTf4uQ0oXOad0IJo07iccpPyqVapIOHjOFwsFKG1ma7TZQRcW Sz0= nlnetlabs.nl. 86400 IN NS ns7.domain-registry.nl. nlnetlabs.nl. 86400 IN NS open.nlnetlabs.nl. nlnetlabs.nl. 86400 IN NS omval.tednet.nl. nlnetlabs.nl. 86400 IN RRSIG NS 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. mXE8tSPoCvD7f6SjQ4skJi8tvbiloN5dlXNHcwufK1rREEVl8oCJ34VV cldL6tv4APj8w0PXmYOiB3xM3TIFpi33n6eqRjudKiq5906PKaj/zLEE cl+dU64+hg9VL0rsT+Fx7TWs/i+gh6oiQm6MsbG415UWUgqtZLflwmMB SC4= nlnetlabs.nl. 86400 IN RRSIG SOA 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. C54bDHKC2sRbVUrDOeM2kXCHpJIFu0LlZWAFVFLf4l1Grfj+B4WcXqel kSVhi/Gpt70VW+zDEOHrS0kcE5XaBnrQE1AUZ9QjGyfjXlRzGWYbyVLD evIFrs7FdIeGKKWWp1YDLUHHF+txDT9NFu6KyEqPbZEVgIVok3skO5Vu jpA= nlnetlabs.nl. 86400 IN MX 50 open.nlnetlabs.nl. nlnetlabs.nl. 86400 IN MX 100 omval.tednet.nl. nlnetlabs.nl. 86400 IN RRSIG MX 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. o9l0WEH53WBdFd+3PE5UHN8kAJVFDb60DcES9oWlBOVwsBMqeTU7eDQr o+wlq1AlUYC+PlFb/W1vLdWN6eCJ//4iPxFJhKoElUEFR+ICPYIIZcD9 VLJM3i4FVsqUwcfgHdOcafciMpMeCgYutxbQDoOwDPe5o+jbynu3gq9a PQ4= nlnetlabs.nl. 86400 IN TXT "Stichting NLnet Labs zone" nlnetlabs.nl. 86400 IN RRSIG TXT 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. lSeFN/S4BATNoC5DG2fYtdSGkC5yxIwOxMH3rChYurB/bD3M4435ySKS Z+vHjLbXQqPtlXw1Jt5ZcVZujRhBM6kEmYZ2XwvC0rPZF0wMtz9nFhxK oc+seBSuP0R9GkbJZReho+JwAYh4F7EC/RQVbHylE1lPAQUHtxCGjmlV EAg= nlnetlabs.nl. 86400 IN AAAA 2001:7b8:206:1::1 nlnetlabs.nl. 86400 IN RRSIG AAAA 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. KGGDcoOAmCby+/xrK7f1b/t/evXfwWgm39VVzE/xButUtPzXv+0htDgO jtUMmouO3GWicIU3fGCffDBCdOmdIrMffjvrR0lKmQAC5JwWPt2FNF/F K7dKh+KrRMp2ruqucpajfvwShWnfesEWaTYWNox1/saLjsw1NXiQ6h+0 2bc= nlnetlabs.nl. 600 IN NAPTR 20 0 "s" "SIP+D2U" "" _sip._udp.nlnetlabs.nl. nlnetlabs.nl. 600 IN RRSIG NAPTR 5 2 600 20070912141341 20070815141341 18182 nlnetlabs.nl. cxgMuZWTVJEagjnERLGjnPNZ7JKuyfe3o1gkkjoS1sg+AQb/8nUEKO/A tIoAwqPHWyALjlbOf25mWEIWviYVVt9TDn6d8k4saWNgTdnnCS+Kc5sM fV/Wz0Np/eQRZElBN0fP4QSBv0rk1VjqK1FHnFpSYz/zRV7FqDSQE1nQ 64w= nlnetlabs.nl. 3600 IN DNSKEY 256 3 5 AQOpbYrUNahQAV5/wTCJ9/wbSM/eV+N+jYZAMmIKn6QF3Z57B6upgcjV HEOyFkA3YcIt5Fz+WqodCrABn4qShd6qJYR8iP3S6fjN6PVpljMjrhsp /6yVc30C6c7P2b/mgWZi5iYC56lkegDs0VGfAW5HmosKjQVoYMjOtNo3 F+MGQw== nlnetlabs.nl. 3600 IN DNSKEY 257 3 5 AQO6TtiOq7uZa8wHrQNUGT3ZXudaGjnbduUnyLw9WwiDEd8Vy1Ao4FVK 7xqEAFo4F5gOkdGr6Y7Xz0F+Z5e1AaQlvhBhjujvIhPZ5EIuNGkGUbRT YLhVX5OJUHMYdrXpGPdyG+V1TBTmxJ/+OmUdkWiT2J6w5XUpSYRB+p0k YwGf7uxPO/cDNp67fILtx1+dduS30B7QygOK+f7PeAZDcdBo2qsy5rnB sPsLhbEpdpWFs2WPTVo0IGYAER3nG6WZptiq8OYAb1K22K8i+j8+hDwv NRDMjWeVMebBZXbNQGkwsGgJsIsaoGfVOT3WdeJxDu9GqODM//mwZxTv O7StbOht nlnetlabs.nl. 3600 IN DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ== nlnetlabs.nl. 3600 IN RRSIG DNSKEY 5 2 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. foMQGGiev3Lys1fGMfYiHCHnqE9IIzpOFsXECGmT2kPHCRvXWDRcAGMu DWWfCQBPcAlDLZBKCvpUhp/H/VSLS+EA6wonPWN2dS20cDuPWKm3QsHo 6+wQmw7y5t/ejsd+i370dUTjgT40T5bR6nvXZkOLN0DJvaLk7USDRvRg BNU= nlnetlabs.nl. 3600 IN RRSIG DNSKEY 5 2 3600 20070912141341 20070815141341 36867 nlnetlabs.nl. hw0alVZsoFJqe+u4Meg2VMJ9acbLa85V65RvEAB6RDOqXvaYBhok3kNJ HGR4zq+FYC7i4EKczT7HVKdLtxL9QGt0rzVPq++tcE85861kAgHcLpB9 Iml8QkR7dRER/FpQ1t15gTxoGg6ctlNLfDM6j0x5+S144Rg7gAm1YODB VfL5gSML385EVo2nX7Jiv/Rz1Y6shJ5SzmXnkARqhrJDhQE/Tuf2N+HY sCNatrAv3aNwN0P7a+c99qd5esIb/WVt8eR7cx9Z46nO9GV8HOvfeYxh nMnhlQ/Oy+yG2s2FnJMpD9B4m4WS/m/lBR4pyxHvZR2PQ+/drlJ+oRUS Jt4yhw== nlnetlabs.nl. 3600 IN RRSIG DNSKEY 5 2 3600 20070912141341 20070815141341 43791 nlnetlabs.nl. uykSWt5yfpz/IN2jKEO+XPtCj9KBFuNWz7vIk+HvEDd+KhXp7vpjISvC tI/xK6yRCeTBIbX6uxR8VRsWEtoKuWwXWHhNmpPBWTGdDuguHOLiuGBn NBUSiTPhideDW8qx/cir6I1MtqypHjEr2w9dn21xdYZbieNXpdZWDLQl ufw= _sip._udp.nlnetlabs.nl. 18000 IN NSEC alpha.nlnetlabs.nl. SRV _sip._udp.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 4 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. R0Mg9z4VQHtZXK3xcv3SOZLlibfhJ4nCXURBzvDSn2C3eI1UHvOdbeZ/ B7L7/1aVlho2kHFwjkPI0wGdTSyPqlc3tSHh9Kr+EuMw2wiqtjKqzROF 9hofI/V/PKYCQGBS31e6Dq2Mi5pfeHfxAaBQ8HoFVyLBvj7Xc33aRXGE DaI= _sip._udp.nlnetlabs.nl. 600 IN SRV 0 0 5060 johnny.nlnetlabs.nl. _sip._udp.nlnetlabs.nl. 600 IN RRSIG SRV 5 4 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ON/hEJ3zq5J7QUKEMT7mDY8Jj++cYCpTJoFfR/XjWC+JxQuQ5kA5HHoI kI6kABBVK+/6Npz1wof3ELQxvz3IU1jxVn2gwwofC2BNcf+MKRw6aSwc BKcDWRsrQwtMRABwZ63ixobXIUOr/NWBoRODrKQ+61ntPFmwHHCFmfwR YJ0= alpha.nlnetlabs.nl. 18000 IN NSEC asus-ap.nlnetlabs.nl. A MX AAAA RRSIG NSEC alpha.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ntDts9XbX6LamoCEkr7nsEBtqC8PMjsbrXmoZUDggDRKIjAjaqRt3tfy 2QdTdVYcPtG1Tj53RqAXGFfIn3+BfpSvkLELO9qIcIFvmaX+wZr458PV okltp9fX8rm2rirspNlHPNCuZBYVWb9gIRJkg64wnDFC31ERqqF+GS8/ iyo= alpha.nlnetlabs.nl. 600 IN A 213.154.224.59 alpha.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Hu76XqcNZI3IjJT6DwIisVWXhGFP3MCYUTH2XHGwpGF9mQOHX+Jbk7NO k88mwZ9CM3ZNLrDWGu1Z8qhd1ZfgvpxAXshqGBvKhne7Rvf/CopP4XWx QEKcA3Zy5EYUo8J+UBJVm/l5cURlDyj3skqBb+inFpL+FysLKRcQx2E5 Mg0= alpha.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. alpha.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. alpha.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. YK+H+ugme14+K8H8zdXcB96wI8gNXloKW1IJVBgjzzAwGooqxRM6LEXt jfD9F+ZA8wn0HnB58a/CZ9S/24+grfdTRjUdeTEl8Cbk0ZR5tqVUFLJt MZSXAKczyXWGXZnCn6htGy6diHm+SL0S2Agr/JhsGBBxSX22tTKcoI+i CxA= alpha.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:202:44ff:fe41:b898 alpha.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. DtljNKbGwkLs+LtvDeRQEXBUTg/TGFjRdrkxp7HEfx/N6n7fWiRgvzo7 va1py1cc+EMxBO6zC2hegCVS5c1lRjwYuIoA1lSfclkZLQFwwJTfyFVe M/Iq2mE0bbPoJhQ6RAhivD+5Yb9JCqRcKM4B2zlAV2LGKlhwMD/Cq8u3 IB8= asus-ap.nlnetlabs.nl. 18000 IN NSEC bartok.nlnetlabs.nl. A RRSIG NSEC asus-ap.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. bCWeNq/W0loWFRQpKPO2bJT6XsEmjfwdP7X8Iz2aIXmHXmfMyNTpFEJH 26vcJJ8D/hMC8zDAKutHWRdcFPwJp+bCg3HJqemLdvzpdSlcGcC/hmr4 zCVLVNWYK/Q/Vq7/cbVWoJTYwVEarwwwATK+Hu3YZFMPOmxoWoHVPaoN bys= asus-ap.nlnetlabs.nl. 600 IN A 213.154.224.63 asus-ap.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. PQFBpiGWor6itylbCSIiowF0iTTGbmS1JyH4Yh2tUsexqlWNSJVvIiL5 EYqdttTSRGGDHkYFas8MN6CWXCvTUAAzAyDHOomHr3qt76n5bPpWXNlQ atz+Q2j+n9sqSrqiFYQ2ubAIyclsMetdRNtZxZvo+0Dqcyn42O6cx+0c L6o= bartok.nlnetlabs.nl. 18000 IN NSEC dhcp-01.nlnetlabs.nl. A MX AAAA RRSIG NSEC bartok.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. Q7VfSibMW/aRxye7XKj1mxq9tT3b76H7PNuqNWmvQplA05Ad4mlBGrnN +THcTIv1ymE0pWzDR94LQkmQZabCzFpP5cwRqoVb5TwLgJBwWIxQeVMp zzFQ43+jYhlpiPnmzrtBMmG+js0gDPDa4446mMDFp9BapJEG1TYg2Mzl 7oQ= bartok.nlnetlabs.nl. 600 IN A 213.154.224.50 bartok.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. J26AYtIbdOrZdLxKSp65MOdbIcMmx+Cty8l9Z0HlsiamAYovhhWWh39+ HqO6H2sJiGXT8dPBrQvvRNbtbLWi2c02WRAtGZt1GFolLIvkgVPGjd0y 0eLJXikN9L7W4j5nspTRBe6GOWIatCg1NwHM7VWNFEsUSZJVNVxBmIVi Dao= bartok.nlnetlabs.nl. 600 IN MX 50 bartok.nlnetlabs.nl. bartok.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. bartok.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. kPtROxDJsZMq0XF/sM6tF3MQyaWBPAKGmEdWJ1DAcKwR5GJgBCCPbL4Z poV7NtJwfs0tN+vE5IqdxRu707Px3Omoc9HUJqF7mwu+dr8R4ltMkUGH 4XJpfSty7/4Q4B7Y/BrcJbYduudi4YmwqmO0ffFDJjTjDgJGCGC/DFtE HAo= bartok.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:216:76ff:feb8:3c02 bartok.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. HKozneYfqXBLk/3VIcSTDGY3jb3fqQfjvl2yKN3rTkYUrewI5EwSMo4p kXfkCZOvhu24UTuPNjJClCa2eDmuCOJ6uRfHprnF5zVEDOXYdibYSF6Q VAHEi7hzKdJVzk+Fg3BYdxkjzx2kq8jCSF7LAMQ7z1I7eJbpRZ/ORafC aHE= dhcp-01.nlnetlabs.nl. 18000 IN NSEC dhcp-02.nlnetlabs.nl. A RRSIG NSEC dhcp-01.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. BhWsjNlZlugg3KMFyaCTK+jX3JXiRsGA7KdKWvP/lvFkBS1nSI4dwwej omkDGiNWa90NGZiBx8A41eqykM9SJNi/+57K6jEKI8X/A1CngK1HxyyS JZyU2sbdSqV7MVERfnd5i7ZbThS5M90G/C2Dr5tJ0pMUJ9mwr1PN7mbj jlw= dhcp-01.nlnetlabs.nl. 3600 IN A 213.154.224.64 dhcp-01.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. Q/uN5lccCVcHi/BW3QL7HbQFSjw+9y3kFy00WCxo52ydjo91bPLME3e3 e988ajyZDWDp9BGmIe6lYjXaVpbzB5semGmlpX6ZKw9Ngq8BVVvCIfcN QLEsqzFsnQCa0wrRXqTeBsGa/msU3y09UJOpMBvVndUxjpX7liAMz5Up Iug= dhcp-02.nlnetlabs.nl. 18000 IN NSEC dhcp-03.nlnetlabs.nl. A RRSIG NSEC dhcp-02.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. h0JZ2yT+qAnoZc8C5x/7F063grW9x9nIyY1yHVhLHknwcJ0i7CA662jA FxdsEpj7r9oUrJKZEBC/txzeAb//mOM6Dt7xaQWL2JaqmGjRaIVhUX7g zmGTXqGxNr8+SSLwe8+D6h+FJHXirO495bk6fpa2AQNxlraCROV7IdFW Sik= dhcp-02.nlnetlabs.nl. 3600 IN A 213.154.224.65 dhcp-02.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. B08kP1Sw3I2JGN9gZ2WOvmo5Kg0dE/9Hu3zyoiJei2Ed8iNnl7G1snYI bBlWqvsbdqxlcwuV5wcwbkgmXsHQbvuSLjShKTyoJglqdMI3etKsseDT 2kBZsxvarrk4fXVlvTI0ICm35tKEgBKT+Nw87z+ZSd/a4zpIToLVIQv4 rio= dhcp-03.nlnetlabs.nl. 18000 IN NSEC dhcp-04.nlnetlabs.nl. A RRSIG NSEC dhcp-03.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. c4G82wM8U9YX0ESAPFfjosrPTivw/6Mbqq+DtqP76tLG2Ukm5xxth81w HgUDiOVegTQpJbaHXdwJL2gjzTsN3WTdn+5/ivGUSdH7SUiIkcge2MGZ Oz0Q/iCvDs/1ftDYW9SWaizuNay5Uyg15LCasf4UrVam5JcQtidGiBif l3g= dhcp-03.nlnetlabs.nl. 3600 IN A 213.154.224.66 dhcp-03.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. bTv4qvtUqco993fs4Oak+BmAU8CyQhk5XUBXoKzXYN4T8Fto5bFUkYi4 tzlzKzNxQpMpKww5uNPBOjxpyi1fBZDt+qZqrGzFiQ6+sq4G1x8qJ7fm h6/wW2QGYNR7A9j9VGmDmlGL9dOwXkNBGuKVPfD8n6GFF1FJ6HNJLqr5 n1U= dhcp-04.nlnetlabs.nl. 18000 IN NSEC dhcp-05.nlnetlabs.nl. A RRSIG NSEC dhcp-04.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ZquGGtHlQKK+D3CUAsWPPK/pyjtR7QBrrs4OTtEFhzJpkvm6kpYi6Gtf TtMy4M8LFFyslQaMsJM63ByzEf2LjNx3vUjgi80vbl4/dZhBDcegaBcB QBUZ3BUdDihfmjoZk/GvT4ddKoU5l8xGhbeG3qKsfNrA5VWVe51UgwiY dpo= dhcp-04.nlnetlabs.nl. 3600 IN A 213.154.224.67 dhcp-04.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. p34f8rWzYb5wQUsk20o+vWv3FfdJ/mbjVoK5zP6WZTIKUMxTAiXihLwB yhgQlOvJKJFT6Q/AZPC55lleZ5h0hE43P6S/9Q9rWRZVUJtrCAqy9xo2 QvRcsM/8VHR8ziehErSGHCSFdsiT6ANNMuO3FC5hBSRLrE8KHO5Aujum 0mg= dhcp-05.nlnetlabs.nl. 18000 IN NSEC dhcp-06.nlnetlabs.nl. A RRSIG NSEC dhcp-05.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. fx9KvvNQgkNrk0cbOJGqUAXIKSKLaS/u3zmdaKKEVJH+Xy2UpX1vGHgF WSgg6Cx8vuYu02yRMBv/PJwI5gg5flAXVfP1+GsT6Zd4c+fapUV6BPFc 7YNANu3eRv1kdjwEVZlKVmmZU9TL6oef+RSXZXiF3Zn8n+Cv+fwRIbGg +0I= dhcp-05.nlnetlabs.nl. 3600 IN A 213.154.224.68 dhcp-05.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. GHUlG1mfvwOPXrgY8pUBAtDj+InxjGRUnilnnhdeYnpB9ioNgNAmYMtG peRjGl8I6TgC2pYySkIP4kXHBG+KU/BrwcNyHNTjwCtfkWRD5em3nUMX SAlbh10ArTwtDBPuNLL/JVXQlVnXFqWdzONRH7coi0CQmE9Pd0HIdDe8 L1c= dhcp-06.nlnetlabs.nl. 18000 IN NSEC dhcp-07.nlnetlabs.nl. A RRSIG NSEC dhcp-06.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. DQcSwxeQL1yAZyxeA0JlRRVgy7NPTvwg8Jblv4eSCj/+hC7MWCNnS7uw syCqo06hxK9cDTppyeiBWFig1+Dd+dSJQF4P8NxEgmLLh2TWXEvPPgFy cd/D4C+Dvra0nuu1QWoEJP/oQrHoxGMiRz5b591XB+MOyfNOXTYw7YEg Qus= dhcp-06.nlnetlabs.nl. 3600 IN A 213.154.224.69 dhcp-06.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. N7ETvKemqDEOlcFfL21Un+IXT+cYrANIGOwnw9EZC2V/qyRVU0m2WlGB T6VgCOZyBAL5D7tEEqBHlWwTqdzstL4R05xlrgwcXuIehMlKhk5NJd+H t8lFw5jWSPhAeL5/8AM7fKV2gubV2W219ogzuvirIMfOtzf4hyXOsxTb 03Y= dhcp-07.nlnetlabs.nl. 18000 IN NSEC dhcp-08.nlnetlabs.nl. A RRSIG NSEC dhcp-07.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. KNII0C76+CbI1nrRS+TcRYpKfr2jNZ4K1dv9KhGPSV74p4X/HlPD3gn4 B2Gyj7kHGP1t8AkIbhpW1PpT1r3AslXkNoI843/P5XcOIQch4xtgXup5 xMp3gm/WQNOK00zrE8DgL/qnl+zVZBjKYPivuCOse9f5uP+2BAc/F09r fEQ= dhcp-07.nlnetlabs.nl. 3600 IN A 213.154.224.70 dhcp-07.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. E4Y9q8xhxzaMHYz9z/2zJm/9GA0mMBIpJENQPOEYTuHA6z17/MZumBym NpuQKmPm89qNIKcSUT3E2Yn/iayPZ7g3B4O6He8FJbv5ZlPXhb+/nZiT POd3gmUGtrGxmmF47u7c+KcMgM8eNS7zLAwHfGYihjbgsW0riTxjzlko 08k= dhcp-08.nlnetlabs.nl. 18000 IN NSEC dhcp-09.nlnetlabs.nl. A RRSIG NSEC dhcp-08.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. DWcPcqjgKVIXnko5DR2uwWDHX2nkp66TY1pcZDKVRCxt1dYO/b28CSHB 7Fnr8J5/fwtV5XKriw4VShk5azAphWke+XA3SCWNUmJ7cK0Rc6XcszwJ 02bHFSHMrfT6uxM6qUSOXJBqoHkhw2clVaeIXJSpmYpFsAF5kgLajOz0 yxM= dhcp-08.nlnetlabs.nl. 3600 IN A 213.154.224.71 dhcp-08.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. UTP/kGB7yZyh8aRFgomdLQHVGoRU6rn9HuoH1Tbcvu8++MmicoeYyXrs ei6W6lVHsZLjVAnWqistb8NAsHeS1MMy0cYHDqFe+NQl1osk6c+lmXu5 VxRG79J8CLXHR3Nr23HPWFLjZ0RRyrRykQsjdpgBlcydnfRgZ3JrXyXw GoI= dhcp-09.nlnetlabs.nl. 18000 IN NSEC dhcp-10.nlnetlabs.nl. A RRSIG NSEC dhcp-09.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. luSV2RpmFyjniakKkCo9sY4ZqgAOIo2k3fWmsZeIKEt7C2XD8bKyVO6v iL/55qSbd8p+xs/W6fvWtoDmlgrVk+e1E47UIu7uthbV/nLCyskwM2y4 ZX9VW/yC5WEgG/bzCKH1AY/ucLdYH4b/hD5IDyhM62ZXAqk/umj5zR27 bQA= dhcp-09.nlnetlabs.nl. 3600 IN A 213.154.224.72 dhcp-09.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. pjayjQAL8C2DUDJSSLxT2WaVbcRAObAGU7MCEQO+KK6jnbKpXM1lzVuC NFy6z0MqyjjcRv6bsBqLW22XJicJ8uEJxqGKD/w3RUF1mXaGVKj07z/G DpAH/ZuPeVWrlXrszLEuqXKeFd+UMvWc+0Wmfyu+SbAySmEeBhT0UqUM 2L4= dhcp-10.nlnetlabs.nl. 3600 IN A 213.154.224.73 dhcp-10.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. A6M/86z7t0FHkSboB/cXkzI4LduR7WYWhMHk/gPOVlWJkVtz6tl/MOaW PIC1Ls7e6qMdNLZpoKxsUUSnjYplurZXOPsi5rR96gWCuR4IRy2Lq+Fu IuVATPhXeKwexSwxDe2A0Ah1RdcTGQRxA763d2tsxenSbmRgSWZRwO/b SnY= dhcp-10.nlnetlabs.nl. 18000 IN NSEC dhcp-11.nlnetlabs.nl. A RRSIG NSEC dhcp-10.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. jKRrUspeXbc+oMTAZxt8C5TLK1PogrPcgIa02XykMJ5r1t/laYI5oXry tWj2S1l41zfNopBmSBGwysDZk67k41lj5Z4Hn9ytLsYzKCaOuOeL8LF0 +R0IlpJKZCZ6EglkyNBnTeXF8XbndoRh8FM6H0OEmftr906k7XQCzIlA WsI= dhcp-11.nlnetlabs.nl. 18000 IN NSEC dhcp-12.nlnetlabs.nl. A RRSIG NSEC dhcp-11.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. BbTDena3H6eEte8SjPGF+B8wQxd2Z024yUVPRs2zWfvLeXShVhJ5PbXJ Z8J4O/8iVxidFPWCr34YdJobtNcDZbMNPdfiLiyWT4LChBEAqWNaBJ7d uVDNxoKiS02aKfrKoOhTWgjf4An0FGmDh30Qxj0Mdq2ck7cNAaVAgCE/ Z5k= dhcp-11.nlnetlabs.nl. 3600 IN A 213.154.224.74 dhcp-11.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. ClbgLhqTC1EbKUoYJRJpIaQQKvBEWcxoOChOntxYTFw6vvPSx4C1M8Fr uDX40OEO0NO/l3IwHpBCBKrtKcP0mpdnkwcB3Zu12dlUuZSv8Syx3bjE ehXFcRktbh45M9JfiIuhI6kiN0SjWdK59LJzJ1PMGAOwiKjk7ZxBtngg qUI= dhcp-12.nlnetlabs.nl. 18000 IN NSEC dhcp-13.nlnetlabs.nl. A RRSIG NSEC dhcp-12.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. FAaeKtLXHurb5H8utLHKy7Y75dgQaE+qzcM8NYRjxrVD2qlHRQb+Wj2E 06He2jnOu/XAMC32Auuj0mllc2ixodg1hTCX2z/HyjM1RHR4dj2ZPCOx arKTpiTVd2J2UUabb5aUQjArlzbq1grIvy5fnkRfP5hBprq9Z8S1acVh 7Hs= dhcp-12.nlnetlabs.nl. 3600 IN A 213.154.224.75 dhcp-12.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. hejfyrYuoJJ4kJEep/dD/zjIAYa1ouw27xRj0G1CyTZuiyEmZrqgwPzc SbWcVI23ZoqooE5EYPfr/l8QJj0JHpc0QNlxVa/lC9BGFHIVVlOZkvmf qYkxBw0AZPzaW6oa7xA0aYHyksLOwAnaVD1G/P9k3TcNceTbRTJTqvIK 0QI= dhcp-13.nlnetlabs.nl. 18000 IN NSEC dhcp-14.nlnetlabs.nl. A RRSIG NSEC dhcp-13.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. NpHGV/R2Nou9bOLma3xNhFYFTs0iFC4ys/pWuyizz8YmWB32/oJCQ2wK kruitBPuEna3AuYtT5sG07AO5e4ueUYXYG2vLSUn+j6JrneL+k25zH2Z rLE68W+J646iIZZ5ruKraJ2Y28J8GZzArshwFwR9oRi+0iM94jdspIV1 qpI= dhcp-13.nlnetlabs.nl. 3600 IN A 213.154.224.76 dhcp-13.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. ZKDNqZ1I/d7KnVUnzakaPHKCj2A1Z8W17c5diDVvrWKeudgeHBM+JD+9 0bfAHH4gbgosKANNTGXA2cpUHlDlJoADhUX5sfd9+l5amxZAqLtC+QnX hea8LuHDIlMQQG66hsX7qvvzVpD1MuK5newEpJfKVUeKHbp+tFRSLGCr u3c= dhcp-14.nlnetlabs.nl. 18000 IN NSEC dhcp-15.nlnetlabs.nl. A RRSIG NSEC dhcp-14.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. c9mU38QvqETEs/v1y0RSeNhP3XELt2dhm4m0cRrYHkqxEERwt9NSDx9n gL9w7xVhVcnfzCXDzIfumqL+ZCjEjavMZ14X6a89CD6lGM+b/dqQoMzw ijeOSTJ6hq0p3lZYS13NXjUaQi8jwCeFNb2q2+TDhF8QPzJrW650Z8IB 5v8= dhcp-14.nlnetlabs.nl. 3600 IN A 213.154.224.77 dhcp-14.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. qUR/vpPkDIEQAa9L+a3QilfzvjYWti3btPUdal0gQD1+hmkMlFOI5wGO aaKyDU6GSU8F/i9VmRs3nuggKWVLoG9PJwkfZoDiJNlE81aZ+sKsGE1b AL2Hw2ZYqnUT7LDtzWt/TslpJcpxS0usfMfQtJN8E8iC7kcFEsCcLtyw z0k= dhcp-15.nlnetlabs.nl. 18000 IN NSEC dhcp-16.nlnetlabs.nl. A RRSIG NSEC dhcp-15.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. lAzCYeVTtrmNilOU9SuymQSyziT/qysJLtf92jY1/u9ZfG0wHMP7HE1n c2k1r2yCPKvjnJbNYEgYZJnjUhk8HH797TWkWQXY1dGJ2Vw4fPeXiB8b qH685V5i4fSjWkW6bk32WqdkpkWkLs1P6lzfWq5aQg3csQRWdOfw3HZ3 6NU= dhcp-15.nlnetlabs.nl. 3600 IN A 213.154.224.78 dhcp-15.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. k9ji4tuqlojJjFKGL/jlpXZDfEn2OUJYQdu5VJOI9vlGVcdKlL/QMERa vLweoleRNTdu0/Tt27caz7TrG0KtLhM71qRS0rd9X8fmGkO2PpxbvuJW yFjY/ckv22Y/K0sKn1zCf6/o1XxR2Wro6D6+V/u7KLYnRm7aVa//D5ef zfk= dhcp-16.nlnetlabs.nl. 18000 IN NSEC dhcp-80.nlnetlabs.nl. A RRSIG NSEC dhcp-16.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. e1rPfAwWPq9LBn2AXGgw43W8eO7K/VUtKvnGJ/ennRKlfJu5vsqDnhje zbQh2PY33jy2LUuLdGv9H3Ba2Hf4i8skK7YjcXI0yBMmWLiBHGoiF9i1 oD55Fpk+77RLJp6XU6wNDodsNGa83zsAfxdySrwy3USNAkIn3AXee5l7 4OQ= dhcp-16.nlnetlabs.nl. 3600 IN A 213.154.224.79 dhcp-16.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. g2qWzNzrbjlZVTGwj0ujmOGZzMmRZ0CNMZbMZVbBrf77aP9Lz1VgDvGL h9MPpBvdk3JanO/xZL+PY2Elkj0iTFGP3uRNteywdcUP2/Xx3nATzJzr eP5mIDZYDKiAmkoqXOLhouWXQ9j1xAJ2uinslw0ZefxaOF6MGpXihdos EYc= dhcp-80.nlnetlabs.nl. 18000 IN NSEC dhcp-81.nlnetlabs.nl. A RRSIG NSEC dhcp-80.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. Q52UtKoSAbaBFrJmT6SH7fHzg2W1HK3ybH/s/sqJSyaqZbf9pZQRopL3 ryiXMX7L4eGXWr4tOuOdVf8j5EboGEJfKDMRBZeQXEgEYw7VlCC0t5dP VALFQP2NKtYa7yZ9rXe7Ua/3duo7ydGpv4/acT0wwNNcW/Risx9pozH0 3OI= dhcp-80.nlnetlabs.nl. 3600 IN A 213.154.224.80 dhcp-80.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. HWdpL/uE9hV1FUjMSotBWtTlEJwT3RR36LcTyUa7/VHeL1H5Grq5QkxM 6Mf1Wv4zT9tjqTouDU7vkGlDvh9JN8eW+MIcV42Sugt27F+Oe/MAP4EW heYUF7Ez/7oZ6RWcq2I3n30x+qK3ehfwBNBfMchyPYEIqRIzWwyPVNjF 6c0= dhcp-81.nlnetlabs.nl. 18000 IN NSEC dhcp-82.nlnetlabs.nl. A RRSIG NSEC dhcp-81.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. R04Tz8a9qYlqNg6JPzNlAl+xGn5CGL3qEHJ6AM1C5uwZ9NU6vYdStNbp /gU7LJlMzcsN5wcS9V3dBsAap+P9awL9TUiPphlJA2O/37VL6pr2GmFF ZAKmJW28YN+dbqfeeiKE2mz6J+ZYcumlO5vPr46g6QtRf0pLFVkVlo12 TEE= dhcp-81.nlnetlabs.nl. 3600 IN A 213.154.224.81 dhcp-81.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. N6lkHwdgk53nhMoHDT/7cWhuybmHPMDZWPFEdNjnoStic3o8zlAOuXZ+ zucX9S6Pefw2fwTXlfxoAAs5TGU4WCY0I2DQszSDcj8polwDY5SJrJDJ Veu1lXXyd4iBzhZRww/VLoBmf44HLbB0kZ7ZbH+xlmwnbkRZ0xR+gvLb XoI= dhcp-82.nlnetlabs.nl. 18000 IN NSEC dhcp-83.nlnetlabs.nl. A RRSIG NSEC dhcp-82.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. HLiIvzxeEKcJF3NHZgrY1EhnZ+91fdLmvqePzKi7RDJZLxiTsCCdET17 FdQWRX4zT9wMg9WhI0Q2jvacomj1FGaW7jOJl9iEhPNPmy+O9HogWmE5 BxICgAkOJzX1SATH1tQnUTgXMarmmZd1YU/hc2mxM+Xtf5g6xs6VXotK VKE= dhcp-82.nlnetlabs.nl. 3600 IN A 213.154.224.82 dhcp-82.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. DhGvag9N4qTDfV2PpZmmDDwSkDx7QTrRAfH4SWU/fM5QYAMSk0P8g/4I dWDRL3BxAvvVNzfm5ATOEe+Kq+xNLDKAMxxRYSbaoeLQtEiRai+QUvrl YU7rgUpszenfwi5c5aVYeI0YvqC8DgLDjqIxcJEqvsi4mbWFYu2u4oJQ B90= dhcp-83.nlnetlabs.nl. 18000 IN NSEC dhcp-84.nlnetlabs.nl. A RRSIG NSEC dhcp-83.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. E2z6O6f4AHqXjlFaOMMyG8Xy9tCD89jgAmpioIqgOB4J/HgZHSzH0xi1 8XjNILyvYDnfjTDEcxUmfPHKBP8u7ngS6dKbKXT4+O4Q3ZeAvYUs3m5v h+U+2oOm5qM21k4CEIQmSSUFVqU44ASry4TbiT+Di9z2iqLDW17ajyr3 3NM= dhcp-83.nlnetlabs.nl. 3600 IN A 213.154.224.83 dhcp-83.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. XNPiy0sSgZgQjrq4fcTpxkRiHI8V6N+twVL1Q4A+3oFbAv4CLrvWZBnX 0N2cagdqFhLLtWNYxIw5P7wrZF/UowcxPa2KCr5DyDpo0JfNWR9En38G +XvV/f96DyR8LDnlfoGb7/PeopHnNP0W3sl5jXQPUBfZe6A1gh8Ph0F2 yzg= dhcp-84.nlnetlabs.nl. 18000 IN NSEC dhcp-85.nlnetlabs.nl. A RRSIG NSEC dhcp-84.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. MfJPB+IQxZs2N2x6qjCT3aJ27it8asZedsMrRii/6ZEvGJ0QQU5+x2xl bh3+mxRxbkTguk4Rf6ZPbbCwI3qa3ReP+V0GQTVFIctNmAV7OCreE5y2 svobwBThQp5Ue7U0l4w2u6r2kGXVISipYgll3rp8JdvhD1bs0HC82qL2 WGY= dhcp-84.nlnetlabs.nl. 3600 IN A 213.154.224.84 dhcp-84.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. KSgsF31Edr0e7wUJEaUGE1OzRU862UXlSISgmqyjLyqrR6HqyvtVAN7E WWz22LNwZdEKUxqkQ3EFNISGxcl0EgnIuM+1mnKNiWGLZY4gcxv9gyxr dHjtJC/03rCfeN5QDFqxwrZwRcChiyXt8sHDM5t43fWjb0bumjkMt0qb tBM= dhcp-85.nlnetlabs.nl. 18000 IN NSEC dhcp-86.nlnetlabs.nl. A RRSIG NSEC dhcp-85.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. HMipwg278ezTwQ7XW2SLz4rF+QVZRMPwVrxQ3elO/io0juBJLGDiI6UX GNZ8HeoBVLKR+EbXR0uzHj8Bu/nD/+5463CXWFDRVH26cBG8ppkD573v H8kkAsf1NBMSPvmxsnk100vfgInjsdVjbjPViVmq0MF+SUrfCDK3UwGi Vz8= dhcp-85.nlnetlabs.nl. 3600 IN A 213.154.224.85 dhcp-85.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. fdbeSnzQ3oDiuT6+h654Z9Q4Ap2G0SNVGzv7fICz5cTW6ofkHHgRGpsl XmZnvHergU4+mesbBsGOq6mQDL5lFVuQpZkoU9U+ZsDTVa4IOHjuxv1Z 7Gq6ipR5Tv/FnJwkxs7IR7G6iikN+cRfWau1b5qfJbjxcxI5IaxxVOjn zGY= dhcp-86.nlnetlabs.nl. 18000 IN NSEC dhcp-87.nlnetlabs.nl. A RRSIG NSEC dhcp-86.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ZiLXpVFO2a/xUFHr+lCLD/1WxSDBTzyfu+m5KCT63eQMyjetTqhic1xo o4Evww2ePf1/WMoUopJ2ho0gnrsNv6fCRQY1apXwPE/5NW36PZn3h4MV ldlSYx1ut/j1THjNf7QxL/Rd+mcixrYcRAByvn2edfrhU5wuCfybI3MO 3/A= dhcp-86.nlnetlabs.nl. 3600 IN A 213.154.224.86 dhcp-86.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. f7O7tH/gA1WhQ/EOEAAsyXpEUH3+XEAC1Kmy1F5zMF6TFB4ynIrqiCbJ Xvdl1AN+WoEClK/bJ+Y9gLjRHzD/fYGSuO1wnPjJRD6WGynVtaYEfSal ly8UHRuywvHlKV4vL6YQ+z/FFegMb47WCvmEd1Gu3QvohyOJrz/aS773 gBo= dhcp-87.nlnetlabs.nl. 18000 IN NSEC dhcp-88.nlnetlabs.nl. A RRSIG NSEC dhcp-87.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. n5zIChy2yTS4ulHqNe2/obbF+JXcKWMs1DnLPRsDm6BaXRjosn32zrj9 P0hoQJNOQxhG8f2xKO+3jYoDXMLKh6qOJrjXjUHeaBBiuj5kxU/EUJRz YspUKC4oEFE3KcA5UNL+siRfdMsnAD+fUVpWs0msrr+aT+rAIeZ44r+B HD0= dhcp-87.nlnetlabs.nl. 3600 IN A 213.154.224.87 dhcp-87.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. c2oRlyKG9hDQ+WUdBshyeKrgBNmeZQi/WTMaWMN/F3iICYGOd3NF0JLd ba9LqpY2BHFvA16y1LfVFY/3aRlmFqp/r8GZcdODyC0UMEf1nSY/gILg sLWTdi3H2Fk7+64FfpUu0o5WaDNWQKHz2lAyDU9h403cOQbaDKh5IIMH y0M= dhcp-88.nlnetlabs.nl. 18000 IN NSEC dhcp-89.nlnetlabs.nl. A RRSIG NSEC dhcp-88.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. EeWOJ4JcjbHxB4qu8du2YOa3Xbww9v6kIia88YCJLfRviaUlSqXxkrdl UOj7HoNWMMVyTAAT+Zc5zGS0IZi5JdxyAZyfdC3mwto3asSDNhsT1HZA qpHiOQIXoT/+yPLgYLtpBxafgiPzLP+V4yW+Q1ZmrBj9jZa0+WILjmHz qv8= dhcp-88.nlnetlabs.nl. 3600 IN A 213.154.224.88 dhcp-88.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. SSdcAQ+8Dpuc+XfIK9R9vhWTjkOabSrolGYzCvrjSnSyTQQbzNGgLOr3 SEt1XOCEKQ9p/uK+MPvytuJhZEIJThhE7umCJ278+q2EfYHvtc22gMuc /S9b1QpX4iwUNmsJRbSFhfhW7huL92kEhwh2ABUwjD5j/wC8DDLKGJdn bvk= dhcp-89.nlnetlabs.nl. 18000 IN NSEC dhcp-90.nlnetlabs.nl. A RRSIG NSEC dhcp-89.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. nEMoh/PDePEoGN8sqX8+cwzViqGADytqVQgsUjD/dR/rpetLAo+r2NKg mAtRpC0lzF5AMFgqheKvqGTyKFhiiHUCwL2JO6xturvGQ88BiQLku0Dl IsNHRqrqPbRdCsMnnh3dFgnlt2RgY0tFAlb0QvtUFS4JFLeZ4zrE0CAX QYQ= dhcp-89.nlnetlabs.nl. 3600 IN A 213.154.224.89 dhcp-89.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. S1QrqU8nF0wHHwkyJDTNz85WGwEZAqK0S3S6U8X5o8j6t6YA5shoqRUg HNNG9i2T2QLAuFDJ6RFKTuC2NjaTtuMlKOJN6eOUBDG7r9JEkTDj79jV EDMjjXOBVhG4DVeughfwSdGX20o/CEcVsD7w/cuG/h86tloLCdAxXf+3 xXQ= ENTRY_END ENTRY_BEGIN SECTION QUESTION nlnetlabs.nl. IN AXFR SECTION ANSWER dhcp-90.nlnetlabs.nl. 18000 IN NSEC dhcp-91.nlnetlabs.nl. A RRSIG NSEC dhcp-90.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. cPEmnWaQJQflV/fR1LTiDn+EfCm9PO7DoIhjvr35dfp9Gx39OJPf5Fnc 4NC2Ay0gnfiJ8RmtWsd5A/rg0HYDAOqI50oHjmgBPjBaCDyclkZdCUdH r4wycksRf8yUWyrOc9EZtF7PekY8Pcd0HtaXG2eWH6h36qPZcuDDZExV ONk= dhcp-90.nlnetlabs.nl. 3600 IN A 213.154.224.90 dhcp-90.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. ZLV7Q/fuq/lxC7NuoSL3a8kkXnbvno7cujDLdqjNZWqMBWFe06GKYyFa lDQ6UDhKOOvavGJaY0dA6k+PoSzoL+bch3Ro+56/8+hNOGL33LDSiycZ 5X4bF7ghW+ggvrGCPoomICfoNVOKefHRBzKGBm6C8zJKjggb4FbDFeh9 DVM= dhcp-91.nlnetlabs.nl. 18000 IN NSEC dhcp-92.nlnetlabs.nl. A RRSIG NSEC dhcp-91.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. cJoIQjSfnuf/OIJXr+IQqHC+fl8bXlHrFEQf5PvdUgmYO5lx6HZ9FB9h dLuqDzLdVzPjf7ncBxiQrt1ng7gySAzeBqjezrTm9XqFoTXyK6W5SASC vSmAx/c8yHCcqsNSIWQWyo56VCF+ampF/xqVRO8xmmJP4EWJ49VOMOgt Smw= dhcp-91.nlnetlabs.nl. 3600 IN A 213.154.224.91 dhcp-91.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. DlSRwEHWgHWe+epmbdI+bo2fI3K+jJcm6plDXxy4b86Uc0wU25QMMbnV 6ksrJ2SAAXUzcdruJLlpdtdnZk6gX29w9KH9OTyIDDi8+Pkff16F1YQ/ 2WBrCDT/ogQFD7hLpmu5i5MuBSxblCigaQy1DWL8ZQLN1uIg+PIOG5mh j20= dhcp-92.nlnetlabs.nl. 18000 IN NSEC dhcp-93.nlnetlabs.nl. A RRSIG NSEC dhcp-92.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. YqjXuYbOomBjOwFVVCv7tg0ofoHrrvZRGmt2QNTHzuyFyvm1tVlYauF7 xHpTnFsdsKJMkWVNX1U05O1+gXI7mv7CiJmwk4ixap/oGNc/qT5ziOMm mEaW+HbD6Q3bMrb3/n3M3dQdU6aSHjKi6PAeqdu8k7101jb6qwJyKih7 cyg= dhcp-92.nlnetlabs.nl. 3600 IN A 213.154.224.92 dhcp-92.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. JGRsNgN+pLLGKqTkPRgGpP7wthjinjxS5aEI/SzyqYJ49jn58gLvUk02 j2rrC4zi14X74qaVg6Rqk5iYEaCnDD8WFF3rrTM2svyrxHtL9WooXVKD meuZUHo/S9em6avaMaJ4ATbrLRnyesDwX9ObKvFPqIB6ngDL7BEbdMcw FXE= dhcp-93.nlnetlabs.nl. 18000 IN NSEC dhcp-94.nlnetlabs.nl. A RRSIG NSEC dhcp-93.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ghKndVKwVwB3GCCbB05AQ+QHErd5hDH/eThxntJzD+t4XwfE/ba7w+15 R3n/rCMP8GZyOXIu4t9qRDuaqyx0Z2vnSDXVie20qilq+liFuSJc08oI OhD+TTUTfc3JeDFSq8966nE2iDOlga/0PlQv1J2ZWlHy6GW7uG9+erCD OQw= dhcp-93.nlnetlabs.nl. 3600 IN A 213.154.224.93 dhcp-93.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. OxOLXxd9IyHhfSZDgH6e3Q4kmu39n/STAFvveQ7lzrzABIiauIHqy2oR mteIYUzy3fV+C+GogeiowA6c9JROKzsU4DQHERP/WGM2TyYGVHrH+vuo FlkNEVUc85hbVySwXgjJDLo3megI0HYatldTNYt5I90mZOgUg7pSpLhG Wo4= dhcp-94.nlnetlabs.nl. 18000 IN NSEC dhcp-95.nlnetlabs.nl. A RRSIG NSEC dhcp-94.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. GiTajmO7Q7P5D9RSjFthAjKb3VFaU3IsEi1WIa9SdDCCgkweHh+a+42V TmbsSUxCEtHtHcutgARIoL1fghxAQUE0d0WPaOHlqsKXcIlOqFGe/uHF phydsYuyba0k5KwP5KQ9vpj55dUHmvE45EGpclooon6/j+dhYjlV15Kh MfI= dhcp-94.nlnetlabs.nl. 3600 IN A 213.154.224.94 dhcp-94.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. gMEfCCsC2RBehO29NobegN3YbUmPE6aml7dSEhVS2vzRXkceZ/kCDn4n yXkbBJA6WhZCR3XjIN9/YvGdCWS7TkbzebQC/btbEp1n0t/yDhjzyt8y 2waiIWM4ooehjyKRtr0B6GXv0UolSzK77JzHVtkaNOkNn0WJyLfY/Xyc 494= dhcp-95.nlnetlabs.nl. 18000 IN NSEC dicht.nlnetlabs.nl. A RRSIG NSEC dhcp-95.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. Fv/xwiUB8s25tD6FRSiaSHpO34hpxPZCGSQrkqExl8vqKP3B3dHtIcCX SiA0u22LlkehvpkoHUWzIhjRK2I5MslqHSzN+ZOmf2FNZd/NJruPPwVz lAjRn3pKQkOV1iqQBj0DlxAsTpI5r6a0dkPRcQ+qKs96xUXY6g9fhU/C pjg= dhcp-95.nlnetlabs.nl. 3600 IN A 213.154.224.95 dhcp-95.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. g9TfAoDLV1A+FXaLFU1pKxXYIk3Jy9nco8uvX6eR1lnuQkLg0ZD5Kmbk Yen8BuqlUDe7Tn7HFQ9/dq4y6eFXyoVi0ysvRw6E4P0yAwKHmvkqK0Sp surB64dt2MWKMekaXas8MTgCiwe6FkSutEO3/q64yGgFZcfcLTOy+8w6 unY= dicht.nlnetlabs.nl. 18000 IN NSEC fable.nlnetlabs.nl. A RRSIG NSEC dicht.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. V+b6TXHkfPt1DpfJdeQLIqlfyaev6ifluTkgA8rYA1ncehDH4OJtWg/a ChZBy8Y9LMzkQMFgqTBGjPlkrE6uzOlBEfZNAP+YA920KUZ84KdFutfL 0FYYracWonskOMdQvdbZNo0pFz/3OZr/9123okc/dCVEA7tavWiBfsBZ o9Q= dicht.nlnetlabs.nl. 3600 IN A 213.154.224.250 dicht.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. enxkeWL8VC9lsXjBnqCZt6BrONS/W6WzNhXJrhDFf/LBZTRdb37MgnGH fCBRqgKn/HozKPKAFtZiqsXrlsQ86P3mzlNm4IUpaj1v+y9syrFOjkyx 4/osLK1CZZdSEMUqROgoE9DQ+UdSJmKto2oUNxjidg8Ewlb7SDPXM/G+ ct0= fable.nlnetlabs.nl. 18000 IN NSEC ferret.nlnetlabs.nl. A AAAA RRSIG NSEC fable.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. p7JVmo3vVvAmgXLqEAljzKxhacRC6/T5r8SwF+t80zoEDTSTnS7wTmcq K/nXkkxUcQv/9fJAC5pZaj4karJURQ2q38EExwyoJGMgUvw7I8wzGZ/k /NMahGyGJLZf8hbcb0jLyvpnnq38V4DsQfbb9CcifcwmJkvS6cgHU6AE aOg= fable.nlnetlabs.nl. 600 IN A 213.154.224.45 fable.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. WWnxLKqS8bZ3WnJfmman1E9Xx+JwXM2/UVF78YjCVqCV8RMT6W2fzPCt ylgCAweIa6aG28hEGzPHCiWlSvQUs+cd2wUWbdDiVwle9FC+Vji9Iszs 19JQy3HEwiuZ4m3eapgYia+DRzJnXg1ZWaFgvhb6IW17DfHPVmcYYHku eQk= fable.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:250:bfff:fe58:4d93 fable.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. oOKls8T7L9tx2AqgyClKIcFquXD6aT3NYJb5ZA3gXGp+cPMbvnfixilu pD7XZF2i08AzmlOxHpd1zNw0jp3IMKebQ5eZcIV4kIyyuY6rFovJCmxW ECcLumjIKlyxb8h3Qj7KSZcPH7Pt0yw/czluGD//5LWA+/7gg+itwk20 2dw= ferret.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. CaP8AdmTbja9YXpxnJfYsLWENSChjjG899PVPoluvQYXbfrLcb465uXe mp8MI03nySvo8786wGe++Icj9bXOzeP7zfUSEPW2UFREd3LsjvZB/wdu dfOApQcWBLrQEvD/++EGgJB7idf4cgrkovtW4elRWFpWHY3GQLCvbjGH UYM= ferret.nlnetlabs.nl. 18000 IN NSEC ferret-e.nlnetlabs.nl. A AAAA RRSIG NSEC ferret.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. FF69Elwu+M4nDJWr+f1UwyaL0UzAoorPOhZ8AZr90uuAeDdhNRZ9fdPj qLb4qqVj+5bDNFS4oxYyf1RZyMsHJPPMwi9j8STFh3uTa56JLSsK8zby CSc90Ik8ipnB/5fe0DThnEHzqGzujuPpX33pTgYd3+OHJCiCsTTJH/ml Tqc= ferret.nlnetlabs.nl. 600 IN A 213.154.224.60 ferret.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. QEZ72Z7l0zhUNTn5IqkoasFWSuV/cRasyTw3eFC/B2AT5l+0SQT1AlRd w1WHKJ+EcCeVdtujX4TbWgSfNB9Cwc90tLvWPTm6bq6WXI+LpfHEPw1m Vxi6dZAjncKN6S5GKYmovpiiipQgpA32vjc/52Ptzep1VZuFIXvHYesC 6kc= ferret.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:20d:93ff:fe86:918d ferret-e.nlnetlabs.nl. 18000 IN NSEC floep.nlnetlabs.nl. A AAAA RRSIG NSEC ferret-e.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. EUhsopQYSHZgNW64CNKUOIgJ3o8NU+EhCXoG0GGyvBQSkUOUAdqzMHJ4 wWXvigqPxpEa24mrMZQKKnHyAq1B/cB8Bt05TCNblOCcUxrDATaUYtOt K16NFIGCmI7gRTt5CTKKjMDrVpH12uDwISk7h2MGCvYVnsA/NN4Y+4BV k8c= ferret-e.nlnetlabs.nl. 600 IN A 213.154.224.61 ferret-e.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. GDL06fR5q0+YsaoRcBHzNZHgZ9GRpIGFQyTdwUQLWGIl3XeyZgiMVU3g w1MNDk1TM/UtTOLgUDu+lG2QJEgRFadU43F2ubcSVrL1PahAoN7Gou7N JlagBdgXE99gi2UfPeePBwcL/COv3U8aTSIiEJ7WVODSVtR9l0PCZ1m9 bfU= ferret-e.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:20d:93ff:fe27:ff66 ferret-e.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Vt9a8m/XSjOcDurL+0H8vDFRXNsSlTgUVlsxmxQoNnw+2O9iA05i7UUl f2iubmnvgUmBpYa8ILp0FHGD6cyqD/O/wKKNpc4W7RoLBelWAwDVrhx/ yx8j5XXr56ER6XjoPPtCpNVNRvXPZ980VQr7HoPzbJWjOCAUovQ4YONT Ny8= floep.nlnetlabs.nl. 18000 IN NSEC gary.nlnetlabs.nl. A MX AAAA RRSIG NSEC floep.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. K5r3od2Qo7nQwgnggvuTpQcB+NX5nlXfFFVH9TRzlx3kSupiEROO3YUd GXtTBl4fw9vDimo2o/VajENF50d0yU6aqfgCHhnjL7rg+pWPbyY6w02M c01/F5RklmwPCiynHebJ/RGXWSKFUi5/hNKr0LCIFae4YydPNUCHyivI 04Y= floep.nlnetlabs.nl. 600 IN A 213.154.224.37 floep.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. pmC5tXXZPnc4Sjfmcn4ADpuUbTdKAx9wIm5hflE6xCYnNGNCCY2LZDBh eggJtjMTsY30a7/ziDCwMiG9LzPoUo3cHURV5vVwSfiqMFDSyMrNxYQU aSa9tl+TdP3pxuGG0MG0MykM0CwnkjZOG2kTtd09pNYgg//iuD7UnAp9 6pw= floep.nlnetlabs.nl. 600 IN MX 100 floep.nlnetlabs.nl. floep.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Ix/ol/iR+Tp70/bxUifh4FRu2lK8WDpj6aGyNFyzUrpSQH0cs5ZL+Xns S5fnhmGjkCm+6WCSr6oT1ncKqNmztwKBXFfAjkLQK9iynxDRC+j/ERuv OfxIh+nlvZ5pZXDIOJx4qzHSGZYi3D4bDL0otSjJjXG4316nzeeGIbFG c6g= floep.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:240:f4ff:fe37:7af9 floep.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. SekN1WZszjlLSrVN2FFkRGSB0MVcTfsX0GEMn9cknFsA5hItnty+0rlf A++miOFdb6NbxNaoCSBLA95eldnEBkTOy3hp5rMHdQpjUxuzv31z3Kc/ tsMFBajyv79SFWibeUxzwS6kdgabO+yA8EN3S3be2f7/+n3dRBYpxxle cm8= gary.nlnetlabs.nl. 18000 IN NSEC hpr.nlnetlabs.nl. A AAAA RRSIG NSEC gary.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. k1ylHPSUOzCI+8eOhyJi1RVtc0g6SB+EqDEi0e45fsBh3Hsa5yr7/bua aK3NUI7OHRVjEg0Bs27UmNTrfzmNpFfties+eh5QTbtJ32DqQzzKCPPu CMfGOYVOqUrSVqAuYDLq2hVQwTLtvV6u7Dc5pCDE2RslGoqhL6BExdn5 0wQ= gary.nlnetlabs.nl. 600 IN A 213.154.224.58 gary.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. FElqOEtxgXvbJJbXE4e/0i7w/tCCCT03SC3Q4AJZ5wzhjyUBRMUQ5fZ7 Xa2YFUYtWvtZnuP74mIHc1mV4lUpGwT3TbXOVqCX45UaIA9GdEoFDeay S2vJbYRrdJewLGJHb8uIqFi+8MvGQWIm0TcCFd4s3CEMpoPASe+KzO3p ET4= gary.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:216:76ff:feb8:1853 gary.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. JiqXQWJj/xzn9NopyM+M0p3EVdg/QuQZbZ+o4bQZ5JWHFvwzXSkjjR6u SDmObQTJCWVmgFvNQav6Y6Xh28Vgw3wO7ut5i3VOs2T7GAF5Ezr2tH2E rPP6NjgmvWgYwNSDCDuyzFIunNocVnUHt1VMk1FpfTxD3IIOY12UBWhL wuA= hpr.nlnetlabs.nl. 18000 IN NSEC iii.nlnetlabs.nl. A TXT RRSIG NSEC hpr.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. aS/em0n3uWpObWr73TyAppJfzVBBqsm3ItqrejZQwvPneUbf/VFTcRCn Rrkr1MkRpGHc1EKe4UOikhc/BLh3/WSlKeAHphVb4FxOHsik1gA9mkWN GgczZiB+iJhoSvXCrB548DcCC3kWRM7llz1GsbVfdJMlMu76G+K8j5DU 4vc= hpr.nlnetlabs.nl. 600 IN A 213.154.224.35 hpr.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. MtNG5jmsGvikF2+8VeM6YmtjtdwyaVtlYp2TOnhf9f/DnwGbHF6IyNp7 e3UCGaVSCe25nO3LXC8Bd/B/vXDrKhlvwdeLHnQttVC/1FukNySWLoIl 2TQMo+awluLnvndbSqinZat3IJwy7V3PHTTJByVagg6qf6SahBwPaxjG 7L4= hpr.nlnetlabs.nl. 600 IN TXT "HP LaserJet 2420" hpr.nlnetlabs.nl. 600 IN RRSIG TXT 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. emQOMgaasP6+meaCM7LWQA1euf7K0cKe84pKOJj5wh9ZcX+gIpORsTlt o7wvqbEq6khMRNkjtyqxaJW06LBw/diXtPqpwNbl+DfEXHmtU/QRoJzm tpEBaqZbmBcWXjBZeZJ3EJ4ZLxl1L52JAwOtW6FFtxDzt46pp5mB2DSZ P2E= iii.nlnetlabs.nl. 18000 IN NSEC ipdns.nlnetlabs.nl. A AAAA RRSIG NSEC iii.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ASgNY0oaCiUS8DJVzRrPlF33EHjAnYhyTfFjXIUqxXraoNhMba1qqgIS AsBUAbaGfBsxl32lbLMvb1utYrCUtfo+ZMxjpr1EK+KhD0QQoudVI7Yk o60VHl6mrsZXFlJ2DBm/FLYbkMbhJFzI7DLLsRN2vQsCeOTjPHcSw9wi 4Yk= iii.nlnetlabs.nl. 600 IN A 213.154.224.1 iii.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. UjvIGM54znUgTcuEJmR/e8u3jnmG1LM/+3JLZmzDdvNMVnW3n+K8qkEz ERWJwW3V+alkN2Rl+udErP8I7H5lB5YmtQDeGnZwiu4k6f/J3gdmNrkx MRpSnEtVYeNkajjPb0xX++7emchkeSydAA/Jt35cEEaMZwvWXkzaUyI2 MYM= iii.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 iii.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. LzM3IiVN+rCNYAHM0/9Hd2b8q9gO1NeTxdIp4YVnrQqJMYIR+cwmJ7ie 6s7L4tlbbPsuN/rwXTog85dPyRhr7p0p5qFiHePXuzZm9sFwBH+hCrp9 F5/Op0YfjRGDbaQ2Aa2Ujc75Xp92kWVViJWP3efH6/FyGXARXR0OVPNS DM4= ipdns.nlnetlabs.nl. 18000 IN NSEC jelte.nlnetlabs.nl. NS RRSIG NSEC ipdns.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. jFgGPCL0aBhyG+xXjKy0wKlFosRlUtnURPnzSLAgjqU328xZUZK2k4Fe mc5ZxIgUDQdqsXm8B+1zKu8X7fnjeeX/4la8VIP5vRhIETKuDURyrU2S ZO/XYgMyzgXGo91zVxsOEp5otw+w8PuVJX0ErdE60v90KsGuzuy9z1NP aQU= ipdns.nlnetlabs.nl. 3600 IN NS fable.nlnetlabs.nl. jelte.nlnetlabs.nl. 18000 IN NSEC johnny.nlnetlabs.nl. NS DS RRSIG NSEC jelte.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. kKd6XS6j7oXpvhquML+09ef+RdD26UJ/UF7byOsGUGnadu1d+22K6/9a mfvDwwDtLb+ozZb4mHkhsRWgUDkPaLUjwj4GIwUbo0fb/29XsixNt7XZ djqVS0RgoOC6v7MsOluENBN5CB1rL1DPyQYqEGg7coT9onlREL3fy6cA dA8= jelte.nlnetlabs.nl. 600 IN NS talon.fluim.net. jelte.nlnetlabs.nl. 3600 IN DS 31560 5 1 1CFED84787E6E19CCF9372C1187325972FE546CD jelte.nlnetlabs.nl. 3600 IN RRSIG DS 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. MNtlv53uN3bLOFWlpqwZb6gWMJCkrCuUs1qrHiTPpzSyG/2Yn/pvqpRN pvS0OKZgZEv+xPodqFnYbFLc90//FFaMEiiXRh5M2M1wZbxdhf4CF2pQ Ip2E3TecPAZO1OAzxGJwXvYP/INFZsGSedP81+NmGOgXkDQ73hF8Pz7j Dpo= johnny.nlnetlabs.nl. 18000 IN NSEC lappie.nlnetlabs.nl. A MX RRSIG NSEC johnny.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. j3hxzzPIGSGWaaMCmsv5rO0exCMGKG7axgFN+zQ7S72MVBRsssddDa7J 0oFUZvKX3ZxH1oaxwuaBJURo0+2Z4ip4FJaqykY2CAHq19/ki55DDxiK 4hgBUj73gbeMeTWu01grVzdp5SdDCOP87DRmY0fhZ0W82it8bWYV5Nos pFs= johnny.nlnetlabs.nl. 600 IN A 213.154.224.44 johnny.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. EJAy5kI3QxNNABLIw/asxL2LjCMshjnWMNyUeu1pRd7KM3QQUDygnw+c 50MpE1y4X8LkBXDizazoUXPsqEGhq+fzGeFEhdB0DqrxVXtyQ3ikHa+d oVp2jdGiI5zl3yWBlxr4GtLr59jIB0ZU1sL5F0voBIAGv2i6PqArRswr HBI= johnny.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. johnny.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. johnny.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. I0qgNxmzI+Y83gLAMRkbqXqaTAwXksmtS0bxyw9ZeZuP6p68ScV5siS1 MsOmqmdcoqLX9BRU0ekL2JZBIiaOCBrZg9Gt4+NMRQdaZGv3cR79X6QB W2cEdQO5dKVuzFWH/oFJEBoThetFNKaEPNH7jlZSUMqSpBEdo6uHGOPP EvQ= lappie.nlnetlabs.nl. 18000 IN NSEC localhost.nlnetlabs.nl. A MX RRSIG NSEC lappie.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. EC+9kJ73MmOyyXzmo9Gf+CoNDEItyKdQB6YderLcv7or9CcWPnZ6hsW1 aZbU4SPYjO8Qtyp5O+vcTY3gFyex0eVmCSI05dNEY9VNCACfb5rUPtGw 6Q+Fc2oll0CAJhFRaRWHHfEoDuDh5MCNjnGM6bDax9JIKzJBi3cNmS1W VEc= lappie.nlnetlabs.nl. 600 IN A 213.154.224.55 lappie.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. TXeBHEwmv5bQDnkofdL2No8B7uf2/kQlDMRZh/yeGE86vIppxXZ1I42V SBzM3qEZ+dPWxJZU2yWdFcX45+NVIxQp/ktgaTNHcgPRHalX5B7gbd3N Ga4niMxUSXKQM3aZYqXrxDLvWjYaj9qH23AO65rF/sANAkPiZp4+/GqJ zPc= lappie.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. lappie.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. lappie.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. pD5bMt84XFoNJDcCbkq/+xBLg/yb1nPmfuYOeE4YaSV6lFFmth6HrQiS p86ErhD80R9omATBTEEaHnuYw/HxHUM219NA1kKO9smocB7oNhsb/Has WrdgzlzMm1oGyIJknuVCXFQQo/Z9kUJyLMLPntaOAORsRwuRgOn60JMb szo= localhost.nlnetlabs.nl. 18000 IN NSEC loghost.nlnetlabs.nl. A RRSIG NSEC localhost.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. h7Y5+OptNNj5UMWuDnRARnMbf0IKBYkii20PAHEQ1+tBtfA5bv1aavrk n3i/amzJLk5GV1xAoc459mV0+RcTzOrlrZZ7MwsvYFmdiB+0xmplRTgn 9bF0W43LZ5mMH5pFyBnygc3myoDMxmrgcdhjiW52JRCX19Ui0Dn33lZ3 dYU= localhost.nlnetlabs.nl. 3600 IN A 127.0.0.1 localhost.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. T1giRKds7G/HjqKOgDnGXwsRDm/kt6c4cWs10Xd0vaVKmeEFyi52+YoK j6AIRlHMd3aDJO2F0yNTy2MufDZTHVJ6usyGw0+GEi6Vf0AT1lAMtg5i /C4i38KAwJXLCNWQxPTfbAubpnPOtt/078Oq2I/MLNGytcWyRXApyftW J/Q= loghost.nlnetlabs.nl. 18000 IN NSEC lustra.nlnetlabs.nl. A MX AAAA RRSIG NSEC loghost.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. VcO1o9JRiqFCkOCgizKfCWslCQObdt7QrvlSDgd7kkcT0UDuDcDMcD42 jDy3hhrJkmU+ICqx1g7CaaMIbsOPZWOsZi/qcNki6oEuLG8gRD55F3X9 TGApgPAd0feU1S2GuEBZSc/4oeizx4xuYrC+RSCQlgl5OUwJf1Iql1v0 Iwc= loghost.nlnetlabs.nl. 600 IN A 213.154.224.1 loghost.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Qa7seOsz+RF6J2NIk2Z2WQio+qoxgKHNLdYapzooJxvkghOQCqF2Ogto ykmmTvZTj7fUoZ+gyipkosNi6BIIxIUpI/BaEtEEp/sZK7vQZsGXHoqS Etoduv4dEUX1ZjVtBnuzW8BIg4NzPRXtrHTGox2SNcvEHpB2QrXD33XN BxY= loghost.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. loghost.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. loghost.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. VO0p+Ygk0L1HIwrCRsy/6GAF/HSaWZjDkM19iKhtlA1rmry1DQ4u0Zoz GV4gWLmuqxxC0ablYo3TPP1krRTuVowfEsxOPcInP1NbFXtfaJxNh73a KfyFOHCMbLboBU7pQCdnKjXZOqrOOaipEVAkPviAEhY9Rz3bHeDQKmTX R5M= loghost.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 loghost.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. G0G/zsG2irSSY/Ym5Sk7e4qyfXU17S3gueNN/3it6AvoT6twshV604GZ 6aFRvpmx5tUhaosSV6uASzeZ65aR+5/kZa+IJtmzDoVliYv3Z1T4Bu85 MFX3ep0OSjXkF8umDzopfgiv89UHU/1lM/R+8WcgIyNBxpkcr0BDk5tL CZY= lustra.nlnetlabs.nl. 18000 IN NSEC markbook.nlnetlabs.nl. A RRSIG NSEC lustra.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. eI6c1Zvg7B4W33c3Hp682BUQFLldh/cuZU9Ynk0Ymga20lyjGRS27SYA 1PNiEge9h6dg+nLPJztgz7lexDfdp2p3ZLq4guNiGkN2YaQDMxoGzeOd zG3hHEyzTYKCBbdAlFmuy+94eIp4GWptlhu2vgAuWjvCQxvqAoTKIfiU 0q4= lustra.nlnetlabs.nl. 600 IN A 213.154.224.52 lustra.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. l5CL80Ow8dk/Cv/Yq6U1Fq2RuvkdrU1zvdh8SMIEim1JljsqV1YsyWZC AwBTH6ms35sG8MbiF5X0luwAV/V30jL8CUrB4EhQCA4TDwM+xSYZrEi4 wfb2KpNsX3GNDDa1CV5YEqbJEp69EmMhX92Wg+L2cd+0xXop1Z8PmKKw W5Y= markbook.nlnetlabs.nl. 18000 IN NSEC markbook-wifi.nlnetlabs.nl. A RRSIG NSEC markbook.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. BWuNDPuQ/yQoF6cI26tayhNArrClF9stzilmBnQpewBPuthWEllswZpQ yGKQ1cuBw189DD4rDN+22152lttO7Evwgf3rQTrCCIwpZm4/xERdLVbH 0/vwHVooJHgA4hjX6JeNkT8UrMnyTHt/0j/uZi76YI4jkttGKBQTw1IH V34= markbook.nlnetlabs.nl. 600 IN A 213.154.224.15 markbook.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. HDLwWv+UtqQvGPpr1Pb3NHqwt5bUqWOdJRx3a4UN9TAdjH2p54jjd+0Q TkobfBra18VfwThK9J7PP6br0ceEKBLXfI1bpOu93PMTmJJSjReocakw YSkwbjepZH9rWAMnVsUHEenjt6BfyIB36vKe+BXN+nsTT89JVewyd/Up nEk= markbook-wifi.nlnetlabs.nl. 18000 IN NSEC mirre.nlnetlabs.nl. A RRSIG NSEC markbook-wifi.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. Z9ay1VDAu6CFmZwnTBj/zBe/orvWl/KpfqcLe3M+YW0+Xmqr0egZKGtn b6DZjDBUAe0gsu+T5pGa0KL5QxX4SBTs6eIBqNaUmvwQEDFuaxjWiCTJ CtHItcmiWtCYSHMhqXJNehMFUWmW+MCtqQnBzHP/+ETvgwS8PXPrCi2H Exc= markbook-wifi.nlnetlabs.nl. 600 IN A 213.154.224.14 markbook-wifi.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. SxAdBN/lM9g4cAVnQbY7T2RyDxtis1DUjQ26N3Vwz9DpjvO6gF1mVZBm E31BIoV0oqx/qPAUZ5acIvelMvnabqeD33eZ8PPSBjLZ1ozGli0hNzD0 2zAL+zSfV6A/Ndl1f0FXH3L8yQnCYk1xamgvrWSwOqB/ikpkK+F0fy4A 0fE= mirre.nlnetlabs.nl. 18000 IN NSEC motel.nlnetlabs.nl. A AAAA RRSIG NSEC mirre.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. DXlYJ5kmPFQavM16V9QkoHZqHhmyTdFE/iF/k/RL/1NzZ/3G8gL+sXfI r1I1Ziq1/NrrYdAGkZTQqw3TIXMkqsRUFqpGxzPu8mKB2e+IGprzhtyg HanlZQLzQAecIo5iiVpoqK3suYgE43nBDnjbILCUU/uuiKCsqnqwIac4 7Q8= mirre.nlnetlabs.nl. 600 IN A 213.154.224.9 mirre.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. IZx+IOx6mC3IZWWjdhAfgp8GGpYpEWGkx+IuIYT15ScE71xcP8Erd1Di s5e6Omtt0roZLOWMAFzC9gxd1n1E6nx9hyP8fYzSDaNsp8mfJhTPl5Of 8NEeGyZ/lBlWbxlBcaV0dSnllP44sjDbmLZqQBWhWWtG+Z5Of0Sqiahs DRU= mirre.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:219:d1ff:fe0b:89f4 mirre.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. XEgipNwqEvfrpL2EEwBdGz4gtNMwJb9NQPrro1H85li59ts2yEH7GIGz CrSkI+nwXkNKhwf1NW7EE32DsGmYyWB6Ysg0+ISoeyx2gtlYh4NGVPav MrgWXYfg6p23w94fjfLGze2ADdcDpNmPSuz0q5zdLgEh5kSq09LAn//J txM= motel.nlnetlabs.nl. 18000 IN NSEC nlnetlabs-bit-gw.nlnetlabs.nl. A AAAA RRSIG NSEC motel.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. n16G/quCXHjHTfhdMdZUf836jZSHkhDbDJZwB0L2UT7OppTMBRwWL2+E /Gfiza5HRYCdOUhx7QBKD/eqXMwbASDuD2wfxoNXHna4aYeuHn47pI+2 cijH4EFslnwzyNvcY0m3L/fws75pmE9iKw4+e92sz2h3Pp4YG7IM+wTg +2A= motel.nlnetlabs.nl. 600 IN A 213.154.224.7 motel.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. cIVhYnVXBJoUll4z4y+PisMtJi9HAKQFVLN8yYK/dqkkK0FbMptChIJj Bqnoc3EghwIuGIi1sbAbn/dFb3Bsdio3E6mKsdBJ+Cit4TgqPTcQT05M wWMRKBNVkSVFLxisyAZCl78pNAji2DmpABtDVhHjI2HuhvFEqtUOUH4s GNA= motel.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::7 motel.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Ekv3MGcrn16kes3koWHMfw6RwXIot/4kJYQOJus1dICT7Zuhrpbhps2k msSNHQ+/ziuJ0dvmkP4TBZU2rFHsYmJlzEv5qtBF6MMzQFH6M6ZgkDh1 Ovv3Xp5XBGfSm+hJMLtzoWmS8p/22RLogOsiv8RGiKCD+T3UF8TnRleU XXQ= nlnetlabs-bit-gw.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. OxxcW1xKbolFyiydndIfBIYdsb0jLL98VFEUsSaj2qstoLlRAL6YKORV wn/ssblwQsXqfdimVwyoNUvIdIO5rInbcqfBcimXDlvO8ihZENZZv4iw iHPxQ/Bc1pPTYFdHem+xfn/ih5i4oLLn6nd/v/0U1/immMWX16La86s7 Og8= nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN A 213.136.31.102 nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. aTs3q0dm27hE9RSCUXMxyqVXCH/bo18YzV1N31ywu+0uGAqEkhnwtZpm PNX1C/PJNbmeVpRlOR1oIJ6KV73Q8r9zA2/gWODlr2G7uEwed3Uife0j FRA4D1DRMIituvD3Tjb6UIyqV/qikPe2fn1s9Kcl0IpMJ8uc/HgIARnz DGE= nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN AAAA 2001:7b8:40:1::3 nlnetlabs-bit-gw.nlnetlabs.nl. 3600 IN RRSIG AAAA 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. a4kVuaQbmEs7Ju1slFsv+6aLqkVP1r330aCF1h1c/P+qayNYIpWibQHS ZojJtgVbB2eid0xaYXCFd1TK5BBTu58SSNc9G7vR8U2WTkhmk0bvBeyc bVgMSfiPJsALtj5ID3OAkxtvO1ZusiVbKPXHeSFIXKFHJcRePZ8dox/n /jQ= nlnetlabs-bit-gw.nlnetlabs.nl. 18000 IN NSEC ns-ext.nlnetlabs.nl. A AAAA RRSIG NSEC ns-ext.nlnetlabs.nl. 18000 IN NSEC ns1.nlnetlabs.nl. A AAAA RRSIG NSEC ns-ext.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. OY+bcQreb7oTtgveymg0FWRG35NcEu9iBP8SHokm7NH2WtL5jOH7FZMR Jyaaq222Iv9TMcOEn2KEYqui7VaHkoQRS8YKchPHVS85YTDsjk7uULdm bZw6BqskiNKSo90bQDPBobvER41B3DGwvVUP3RDptNrEiMxhuIidGjOl yTU= ns-ext.nlnetlabs.nl. 600 IN A 213.154.224.4 ns-ext.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. lj0ArLI85OQ59mhEj9FPnx2UYfTOehnql3nAG8uNmnGbeepyIKDi5QRf ZKp0/eyyBFiMmKHVxvvrm1z0TtOULb7nS5325w9KfS2JQR4/nHAQZrff HGDnqZ8wFWVdnebhAqKzYt8paqlRc4I7tsyYuFxmKGZt4vi+1DQfK0z6 jbw= ns-ext.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::4:53 ns-ext.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. gKo21eKXSxeR+8MpSUnGVBt46BLOm39e0Jxolz4dc880hOiWlfNRl+3y vZTILWgTn9iLJ2wz5ZPZwuk9ae/EHqlIvJUx+RLZ+i7tCsMr7Y5P2ris 27Ar0I4aipnN0DIdXio8VQF0GCvQHj+lcFlqBcV0d0saM3ZsMNoZc4jW zo0= ns1.nlnetlabs.nl. 18000 IN NSEC nsd-xfr.nlnetlabs.nl. A AAAA RRSIG NSEC ns1.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. mRQhMDYQM8/0Dkn9dplPnHqV0+d7wv/rGItfEYNOOu5HwGLmcp0D/fC5 caFMYtlfu6Py7/zNWrs7Ulwg0H0hfJhaQhHmxXRmf4ereFdrEiHEpgyN A1Uw8HsDOjOPEJTSbov2FxYvjihG+qJoiQWF+35qJC5/D0s5M6vXib0f 81A= ns1.nlnetlabs.nl. 600 IN A 213.154.224.1 ns1.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. AJpm2iiICAWSAWfcyWSZtlywNWlLgMk3qH2v0OcLawL5GPd9gCOw38iM J0fwYKu34UF08Z7f+ytNA7zPGUFGND4Xhe4lQeYworPXh2SeMfggmWtB y9tjGGsxQJe3+ldRajSIP71fSuWsvcp/YhNA4Q8/pQ51pgrxeOuJDgOj aGw= ns1.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 ns1.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::53 ns1.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. mL6AM8KRQFBtCSy8V10Rjmn0j6PfWB8j8Af79og8DirJkUuIJQq7Oiy/ EaNGHHpThAwEvS/JwCZbFOezx9gLgEW6s/So7E+U1v4iMnjm/HrEQlpk aXcLm6sI3oNP46mlBuBKpbaze6m41wJZHp80xPCqEmbiBxDEdQzjUVcf VBE= nsd-xfr.nlnetlabs.nl. 18000 IN NSEC omega.nlnetlabs.nl. A RRSIG NSEC nsd-xfr.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. p4YKePcT1qhweFhgILxcioJgEgsQprIIpYXSSb1KGcWAizPsTB4VrWAc qBrHWL7ok1XMIUBZEJ1ukwjmWKdG2bIr10PLIRKpFQl/+UtzxRXqldJh 8W9rBrxvZnaQCSFCm/fBMk+TcH82F90EvLIG08Pbr0f8R7Fad1NEwsmG eKg= nsd-xfr.nlnetlabs.nl. 600 IN A 213.154.224.49 nsd-xfr.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. HK3CIL/brGoxxuBGd7lvhUUZPt4Xjjs9bxoiiksCxkj7aGz8Kchi98tO sulv4HKGFV9CqzCtwgL09cLJOq4O9qg+WF/ZqbtJhFCLMgOq1hVE42j1 ZQQ78ueVtaBrxztyPHZWha2lgJKj0KKU8B9SJwdY+E6nXqd1lDWIEBtM 5V0= omega.nlnetlabs.nl. 18000 IN NSEC open.nlnetlabs.nl. A MX RRSIG NSEC omega.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. fcIj3rZIOYBdooN8hE/QzUMFm8J1uuwKPTqJpMU0QJWvvGNVZRI0oNVi Lc0rKg35xkW13GC51MPx7fiBOdYJHGVi0azSAtGAn358Q1BkekDXd7CG jMxlZ4z5DxMbdxcUpIIcWu1JGLI8EZ6Oog95CSA1987ya6H2c33Qn1Dr uZw= omega.nlnetlabs.nl. 600 IN A 213.154.224.54 omega.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. PPGDFlV4KMJKObKpSIj5EamMQL0xN4jJ1ilmeaZiLyrf5o51sG2YyzZc InUOznjoI74m4I53uvyUuf/DaEDivan+5xHb5ZlUkQu+/JnK2zRXF20b iARFnKdPW8kNe3aWLrolc7XSpKqOXGcsDoa2SS8zSU3oG875IkQOUzwR 76M= omega.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. omega.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. omega.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. UtSt0IyUVg+SiHBNkaz8S7otj2rpqZJQuKJSLb3bQvfXPJ9vnPvJsaCo pVB+CxXqx1GqjKj00Sfq8BZHbDS5OyO1baLRVXTNBZuXcjSDBksWEoel cdxuMG6If2R1rRfZnck3cu4DH2s2eQvk0SKUyfewOjp9QBuuGN/SEJcU X9M= open.nlnetlabs.nl. 18000 IN NSEC pan.nlnetlabs.nl. A MX AAAA RRSIG NSEC open.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. mxHCyGC0YrwXJ1EUFB4fEzxV9ZERmCJLkdiCYt3zrub0zzoUAmlRZkrq J+7/HHpozI5mI8NuSNYNHtbD1Nu7Z2a+JaHOgbmKpEXx+BiQjKmUf/fM 63mkv1gtWjluk9wLc2tk01H0JEEX7CrwHfLKX346i6/qDPh4Xa+Mf5p8 2z0= open.nlnetlabs.nl. 600 IN A 213.154.224.1 open.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ViuIpiw1c6a0roF+XCOSFMQ3BCH/qmy+lRcU0Y8jEeoN7vLu5rJlWUuF yuuU3kAx6RFB/XDPjxNzm2OER/JJSUUeagzXSqnJVL8Orj03RGpS2PAW 5p66uf5uMv34VEednxoGoigVHKIBfpIwYIbcaXAkDaRMMpw+ylRWwWee q84= open.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. open.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. open.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. bXZIS3/aa5cdXU2k2vYCbfVj/1FnU8sI/4zAP5HNNVEl5PtNj3Zc97yi 0hj0grLoBqRYpwKB1ZzIVMWbJ0F/Ly39kx7yVWfQ047t27cXUZzGRWKu 3gUITW8qsLVTSr4tj1faWofrWTUZHRjn+5eT7stFTMKFQnXNRnE9aLb8 OhU= open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 open.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::53 open.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. bcDWQYXDf6XEyNFeYeDJZTcdUCD4hbfzEIMCL1Fap4Lm6FNSvACQ8c+F F48UfJVdvSZeczDKgsHSm7nte81qYu4+lBQm5TuJcMkjgJakHumKGV0Y 17wIJAsMPiacw+NNICweKO4x4RKwNzWgcn1ymktYsiaPIJpOxQCQVJcU tlg= pan.nlnetlabs.nl. 18000 IN NSEC pontdugard.nlnetlabs.nl. A AAAA RRSIG NSEC pan.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. g126geXJj4BHuWcsmaG+gXMLh6qGya58U2gZ5KGIsLdqjyEdRUrwkwiP vOoXPFhPXYi3PnWO+qmCZF3+VZUYa4WDqGCHfkNtgV0VPmw0sTJvXN8q Y3I4ODvvYXwDSR0lzQvvZh5nXELGs6cMzEhxu9fU9ujBj0nA+3JL6V/t 23o= pan.nlnetlabs.nl. 600 IN A 213.154.224.38 pan.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. KJ+uPefKJD2HIqt8EYCsIT24kVRszJ74XwBlvkxuLZZlBu9ld4MBqfaj JJWssWPFGGHVFaK67afa/t8fn+NL7b9uF3OCo6iWSOrFlVzXcT+huQRI yokYnncKdbk4GHWJn7vjfFjfgiNZT5cbdq+e3zp/NjBuvETcyXGgQbDP 7Jw= pan.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:240:f4ff:fe37:8810 pan.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Et98q71wUk53WPF3SURj1QmAQLLVXolNVIihwSnZcosB1v4VtrwXIDGp JocHKH3gl5ixOrGFnXLSi0x5icJ/MEFRAEUd5J+CcXhAjMmcwim2mZax d9SWjl0bLjrcXrQNHKqUZJn3QouEkrAiP+FM7eeD4xJ8cWxD3OVj6Foh YYQ= pontdugard.nlnetlabs.nl. 18000 IN NSEC qubit.nlnetlabs.nl. A RRSIG NSEC pontdugard.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. H3nguVxothKIXYwrCGnsklJMK0eDOM9PLY14YZBucyT77GcXbrG8yUKy C6KztNFDWWMDWGF5yZloQVPqaBAvmTKFxPC2q5e/JrCiwmZfStcOgFhg S7IpIZOYwa9QBWmQShfsnb/2GJbE9H1XsvAtGw25BCg4j1CFeBDm+n7s mCg= pontdugard.nlnetlabs.nl. 600 IN A 213.154.224.8 pontdugard.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. WfJXmfIWFVRmJxloj73JK/FMwNyBtXiAvDI2eX2BLBu6DCc4VqdE2sjn ObSE7wOx/28Nt5TL3ZktJkW+pOvxDHO0WE9F4GtEskSZdFSV0mV11xC2 dbn3F23+S2MpgNN0ZDEvYeZIcxvpYoDAbwEbKyd22efzcIv+A9dlH11n kPU= qubit.nlnetlabs.nl. 18000 IN NSEC roto.nlnetlabs.nl. A MX AAAA RRSIG NSEC qubit.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. JhEWtMOZPbTlq3P7H0VZuGdLXVSxsTbpWe4Ers1zAUEKSZSpQ0UYKX+c IypwIOTgrRJLdPqKYeKWeU+/JVq0ZB2u0oc8fuxVnEfiR9yVILtbLwVv P4pgkzC/lUHU1GPljiqrLo2HngamQuIaznZ72FVrMIgFg3hZElHtturM /G8= qubit.nlnetlabs.nl. 600 IN A 213.154.224.46 qubit.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. frtAaueWLxb2/wzKkY4ltLS6yf7NAAMLxj4d6e/VAH7WrhFpak1sqQxn lGXOAJGTlwE36q1EtIOlbxB7ugvd9m8QkMiPkUE8OsdiafGcGR/o7UYH /fTBuqhnU6pkBztENZb1e1+elBZo9+dvkB1NeVkoildpZAUkdy1eYz0Y IaE= qubit.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. qubit.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. qubit.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. HYpo/8yh+GsNZsy2jPGzr5ya/pBYNwXbcpIOboCQt3yRwbieodwn4uDm yftGeL5DSVsaU0GalM7OR98sGG5weXV7WlCccqAZq+SGLALyqJ42hXfi tdNSiq3/snDtx5e+RPKqe97z3jcbthm26SrRLxMdLtt5v0S0ppNGfh4v nX4= qubit.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:202:8aff:fef2:f598 qubit.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Pqlh2e0tXkamkSPQuvEQNqbqVWsq0RSqdgYSB1N08M/Jbe+BiqWoml7X EO90ir4ug1gTF/Re0vtEV8cr3lRofhmpHXHMe3dcVoZ538Yq3Eu7MyGV /NsjYGgNj2ek4sZiTt75/auvU6grx04egDJn6gvvsiVt5xnEwipNnP0S WIs= roto.nlnetlabs.nl. 18000 IN NSEC sane.nlnetlabs.nl. A AAAA RRSIG NSEC roto.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. GYigpeoLV9ax25m4mmF2HKWCbDT/flBZaBo8b8GBJ6RURaBr6ShcMe3J t645fVr6VOIAcNGDddSqqFOWvCIGEZhXSR7e7sjDJBKXVa8j72ANKN5Q zvfx5JDNxclWbsqiADgn6oYC9rp7KxvpqEUL/f/Yp2j7c4OP+xerduvf LWQ= roto.nlnetlabs.nl. 3600 IN A 213.154.224.153 roto.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. kBGp41jRARMoXDaLWWUD4i/jrj8n52a75EoFJMOgsy1/8QtWl9UpzGcK P8J32u4rAj8jQTprC9eyLYTXwPp7ACfqmCCSOeec1G3RLDzxm1bs6xzp ez4sZfbcbBlqI/MQccD6O6dTxI3Szxzt9WEM067QwdgU5KcLI7+noaxk 5DY= roto.nlnetlabs.nl. 3600 IN AAAA 2001:7b8:206:1::153 roto.nlnetlabs.nl. 3600 IN RRSIG AAAA 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. psSEF/+UXwZpCYqhQbHU89q/DFkA4odxlEcLZZkZmJG1+TFnOuDDh+FV MYFhjlZfHiWoN7tIhTqGtHHh04xrlcx5NVbnphZMqlZd4PBl05iCCrZb FT9AhsHftolVgH8fq29LVO3tQso8pbYw6MpG9flGT45rZzTU/eI8F3Aw luI= sane.nlnetlabs.nl. 18000 IN NSEC sanne.nlnetlabs.nl. A RRSIG NSEC sane.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ZHA2sgpDy7DLxLZBn+4TWnfYIfFJTZbvr/qqSGKYaMswNUgsq5D0g3sg LS0721YI37qDtZNKA/6wLVO2epnKm0vzLDJSn40YUOMdTyCt/xXpV8p2 oUopbsQhflxP3AWNQ8VnsijhJQLgQhTdr7NEz8EHgHpFjgSjB1h4pDkM nV0= sane.nlnetlabs.nl. 600 IN A 213.154.224.6 sane.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. NYHvgCZCpgAVe5roAttvnxc4I3ltRa/P/VHUofQgTRRFIGJY2FzcinYH 8CHRN0BEdgoCzNUGirHvYnbHin8PIqVgfllMWJ7Dtexz+Vl0RRyGqeUo ArVZf3j7C+z/kKpL8CYMk8WvSAVlXlPFqolUiiJJwwNzlsjrKqLs7fwE BzY= sanne.nlnetlabs.nl. 18000 IN NSEC se-dns-probe.nlnetlabs.nl. A MX AAAA RRSIG NSEC sanne.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ewVO7sU70vbby8VL52SZ+M74yy7ClyIH/R9oFbLI3O4OQ2iqN8YXR0Fs uf30tSI6XKYYzIjps1MLlK0zSL23PKwcZIOkK55icSrgV7TnasWkrvFD LigM1smmErxyMeqfrrwu8yGFdhpzHDvYAjqiiVRiXJNRaoLC0GkOYEfQ eQs= sanne.nlnetlabs.nl. 600 IN A 213.154.224.39 sanne.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. J0HE1rZbC4cPBVt2gmiFBoyE2s7PyH52BkIalz5J1gBD8xTo6Kq5iPO2 zqk7aijDlbWAvgaftzyKwab5WZHdBJEfZ1wMvlMukPd2tRyiBfW/Hqbi kJf2SzAvUOipAUHHomESV2cO1U5OAbYvFMR5syu9WD/+5xjsnGabSLjK aFw= sanne.nlnetlabs.nl. 600 IN MX 50 sanne.nlnetlabs.nl. sanne.nlnetlabs.nl. 600 IN MX 75 open.nlnetlabs.nl. sanne.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. i3YmK7bxxz37q5NNfU5f0bPoO8xHVOC8xbzngXsieqfKsJEty5PPTDRZ f7opc7Xe/yMfU3IH/ZX2C0NJHxI1GwWGe0mRs5uic/gHJIFMqv/XUvjB MPZKVnIeSSa8fbfOBgHOpjXCXeEGVhHEmRjfrcePTIz5/eNUmPpaQZ15 NvU= sanne.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:200:39ff:fe59:b187 sanne.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. mHVDCixUCNsdQoWtenWumJ6jYi5KOYk4WSZBZtm2QOBBVzyY9R6nqIZM HChCivztLR5lLdc7sO4aGekLxko5MVm6nZ+AG2yz2kIRNhxqyYYbWmD2 Ta3QGXz2RKiiwgyE6d5xk55sG9lEHhngwfItBgwYLOvrLVGIdjh8UmGF PLg= se-dns-probe.nlnetlabs.nl. 18000 IN NSEC sixgate.nlnetlabs.nl. A AAAA RRSIG NSEC se-dns-probe.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. E13fsWV+gXja+Ynt5/fc3ry47LyHBlCuUC74XjWXHGSiCY4KaaWbmv1Y LpjCvVQz7SKXyhL20el1qQVQZkDqfDUvtJKThgJpVdIlPGVpfhg00BMb XaD5UNIzGvsEUPo7cNqPswRvGU/9lc9Tn7z/Fwvikmj+8bL3SbDQPQlk mS8= se-dns-probe.nlnetlabs.nl. 600 IN A 213.154.224.5 se-dns-probe.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. jKPpQ5cpUdFh8Dd/VHwN6geBBiPRi4tihr1/FMZO4enHbzmwHhtuh5ql qaZXn1hySLnNOJ70+0e4Ma4DZOsvuapGY44lpuQ49qGbu5AgpxPH2bUZ CjrsVnHfoifhR9c68GhocgjOQ9PS59/Ec2Ej/DF2rMFXFD0aF6bq555f ldE= se-dns-probe.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::5 se-dns-probe.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. nh/86UHPGKcVw6nmQT8fYUplqtl5SzzKLYxXk5SsDl1rpGg6iHMvl3nz X/UnDXn7gMa4OQPEg4oVz7ZBjmBSuVjIjM3LoBSF41zZscBfjSue8HUE YIkOhhkJYvzR/xAhjnA+aAjmldtZ7HQYo1XfgOjwx/rh6asIwDtS4TxY 7NM= sixgate.nlnetlabs.nl. 18000 IN NSEC snom0.nlnetlabs.nl. A MX AAAA RRSIG NSEC sixgate.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. p9SYrNRZKAcvnrFhk/oJVuVAJMRmlWuyijhz1ueoMrU0zslFqqKOCG1e HcuWVDLjjn8SV8nAak6uEZRWigjttjXLwl1uNenKUtt+pp5vo16a1Eff bGhoN0R4N+Q9yzoI6zfET2y7R+HrYBHOlVkrvUwGFo2Sliupi5b7kumr gdU= sixgate.nlnetlabs.nl. 600 IN A 213.154.224.41 sixgate.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. eBLYxx2wU5FyrLCIJqfWpEyUh1omWfqb6d++s3tQJWtbL8jV1E84Erde y7kphOsn8w9ar/ytcVg/k99+664FNTnMEiU8blJnLXUzBB97sy2irmS6 P/2TznKYEIce6kOyD99COJ6D2+u6SHCHEKKBv2G1RIGLyQt13aPiQkjk uXA= sixgate.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. sixgate.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. sixgate.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. KL+o5qDn8O69KadGbacCGLNYRkcVdrY1EqEGCib0AjVcemRyl382cqhP qUQI7Vzlr+dzRz5YON16OK0GOh+j9yBBUeabF2kZoZk/lzS6fojNZrFl Q3aE/sqEygYcKtuVft21Bg0W2v66x+mpYd35jbZbxpgg6K7RW/ceH0u7 rEc= sixgate.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:250:bfff:fe5e:33e0 sixgate.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. aG4F9+Vx3wX43Si/iX+J2036Tz8ja0DkJg4+/G+0suCM/OHDFZcfR1Ne zxbwgdhXY74FODdYaz7JuJDUpYoQNy8HA0eHLaXMTPEjzU/C/YuePVrD DJjHEb2TpNapjD4BKCqXDY+OaQclPLdPIoOHkAv7I4DRvn/8qwUHK/Gf 3Fo= snom0.nlnetlabs.nl. 18000 IN NSEC snom1.nlnetlabs.nl. A RRSIG NSEC snom0.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. puhC3IReZ0U31hWvtWLlSrMww4BUf9+ExNAmQY9+rAOh8N61E25qmsSl wOveKfVIW/EK3d7Ld/DDcYEVsoOKcOXrSZ53SVUPFpmdx6FNPvkWkbjT LzwUspdwB/L1Ox7T7yFMvFAaubq0TzbEcZVnZlPxPKwGqw1ABgAT/FzP oo8= snom0.nlnetlabs.nl. 3600 IN A 213.154.224.200 snom0.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. kPE4amI57Hk6j+HLuKUzwYgj665mCP7klFnt2Ty1rjbBACXJDrzbgm5k Wq9Ee8OfpTrALro6qFhry5TSFkxA/46KADTRNtYzOHZvHtXJx//ZIJZU 3oBjnMbNFEGKQ7NUa1TmTg0XtKmZkFk45hiVsXEUTkHJ1br55Sk9ZN7P R6E= snom1.nlnetlabs.nl. 18000 IN NSEC snom2.nlnetlabs.nl. A RRSIG NSEC snom1.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. lsp1olju7Z38jPpBQ+TRPttAHLE/QU6tm1iRe8F5DAZVKduUCFtz4qsN jbCD9B5iWuhEBwPZ4+LLQi2Ga27OEioe9k9kFeWuF2GBSxYjSCOeczIr s6gGi7fARK1b4x5HoI5JrbwW8zrQ+y9lu/dwrXhFyPOX5SgQSwqLNUo8 qBM= snom1.nlnetlabs.nl. 3600 IN A 213.154.224.201 snom1.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. COot+bPSyihBf9iTeChxvIfMYm9a2LH9eR/kC2bmp64DIo2OhO4W58WJ CcDh/KzW6mtQt2PMU7JW8FwWHrRfgvScWxfcQGl90nlnWrb8I0VaZuyP M65WPwxB+xqCs3tmnN87m2jHCL9eWFXg7yCPPDTRJPDr0OZWbeQZXb2e 9F0= snom2.nlnetlabs.nl. 18000 IN NSEC snom3.nlnetlabs.nl. A RRSIG NSEC snom2.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. SjUDNgnAwaETHAovXMHWVFxcNTFn5+JKqcnk0SYEzIXZiTcfbDGfFE5b hGMVEwKl08KvsHCF9v9ckb+RfL9aQOkRoUEjxnsqU9L0J6WWXYv0CWld 46GFG9Rm0IbiE80IY4KMfXW9/sAbv8anDqhWLm3yHn5Muj2Al+h0OjSB kvE= snom2.nlnetlabs.nl. 3600 IN A 213.154.224.202 snom2.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. DQ9hFcmw8bXdW+TX4sTS3y1qPMUOzfzgDRIqCDu8oIiARH102rNpuB8E +JJT2ziaGgKjyfsVxJQldiBMIIvGagLIR0ArsJXThxtlaiFDbQeqZSZL +b8xqQcTDOhaU7xAC0V5cRYfdCYbd5sMtVx7XYQggX/Mot5Zt6oEOg3i msg= snom3.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. PJyBfD+TVk4JjyzUreels+5tWLmOOZg9Of3uklVcX+GK+Q2hCtU7yyUj k2mkeMJ731V7zLQXZGz+1vC91WtIVXP6tlY3rr63nMtj3jb1R8WWqY3/ 4O2hP6d6S2OEyuESuGnIhVXyZlPunzAWgLN53Dnzb+xn8KULe+iy9Sjp uH4= snom3.nlnetlabs.nl. 18000 IN NSEC sol.nlnetlabs.nl. A RRSIG NSEC snom3.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. j/KJY9y9PZIoSnAOzRkUbfq5PoUeSPW/Dy3d7K7HfVlysfJ+I2DloTPs 8CssOp/oCdki5EUnpnn2ym1csJTKZdEl6MSfDGMT4BP1W7FK6RDpLO6z ehQj7yKs+Pbr1nBq0tZWlr/HUTmJY1VJmnj5G81dmazesufO/9wDKer+ TCo= snom3.nlnetlabs.nl. 3600 IN A 213.154.224.203 sol.nlnetlabs.nl. 18000 IN NSEC sparc5.nlnetlabs.nl. A MX AAAA RRSIG NSEC sol.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. jUXNRrMfRHbf7p4KgbdVI8WsDMC8k/1FOsO3BoIjSyX22Hr5v1RuKHG2 v8ZDlFXMbKcP92xdj3mAJbEmcM2JKvaHiY47VrweO+FbwY3JDgUkTQmH jf3SMOHXrxtKjixQOAJKOWOLDigEBBLkuUjdfG6PybDDG7sBgx8WHFIE Ulc= sol.nlnetlabs.nl. 600 IN A 213.154.224.43 sol.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. XEkjh4r+7asDkk98LEV5mlaIFD/nUvfP1eUBKVTfh4a8ba4W5sLo6HgY Y6sJcnaBuK0a4IDv2q2q/BPIokAcg72+P420oRD2vQXUhM+fgxVESJt5 AqWrqRetmctCOIhWuNhOYw1PlCT+lZ9eT5INhXAscepQyyjuAKQ+nQFK qW4= sol.nlnetlabs.nl. 600 IN MX 100 sol.nlnetlabs.nl. sol.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. gEqhZntMOkonkQ6ONN1fwqOPf/kp7XGQMsORg7MPEt8UUxfkx4FlIZSc uQU11EfLr14BE6zkPZj4i8927KmfWK6M2I5F9WWynq41xDPO5giI7nPQ xX1d2ga2Oq/kCHH5Q3DyWmXTrdc9JpbwKIQLdtPEmAN2t2VslSH77M2a IVE= sol.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:7200:ff:fe00:28e3 sol.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ExX2ABe4l4kOkFMeexofV/KE9u+XWvQKpdXtydtawymAz++crBdrYCUj 0tjDH8f9lUJEYPc/M0XUBj0FXrEK/OGrHREcj+U4dA4PfbKdCshp0+Ha jDqNigaFhwtXlRxwaaVX2F4B8y8WTOMpLeLA8GjH14gnC29TY/Fu5EAy rzM= sparc5.nlnetlabs.nl. 18000 IN NSEC stun1.nlnetlabs.nl. A MX AAAA RRSIG NSEC sparc5.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ZGKUwlLbPYCQqGZQzUwaZUU7C89Qnq+7Uyo1VaPmDNMYLLxmi8RaRJKG SzNBDmr+om2MiEV68S4zkwj5aZ+IYB8cvvjdq8ZA4walYg1O8cf0OMFS A03lAnSfWiu9Ok7SryjltHfWZbEmS1bfhJQ7QVznKuIrzUbrx0giGxUl G7A= sparc5.nlnetlabs.nl. 600 IN A 213.154.224.47 sparc5.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. PqrRrkXcrTRXWSbrT1JZ9Rvt80SplTqpVgOlmLhe8qIxz+DiYdlBdIv9 bmb6orj1cLYG62/hWuGaW5UHpmslp1rn3LgrZCVbWS7JpULLEYs1l+B7 XYnRRGR4LlQ6cE1fZLbT55k4hMCnv+jYcto+gYDcp58ssZy3MUUyno+P C50= sparc5.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. sparc5.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. sparc5.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. G8cIIEKxLSh+Ql+OxYSCDdaeJ+iLreSS6DWLcgaMSXY+O0qXiy/avUYG IunyJyp95PuIle9OS6s3CpRTH7ZKcC7v80uAeBjGkwliIMaZc3L35x/t epNGGkw2FM2G0ZZCOoH55nw8CT9RHoKtvtXsr2A7er4gj2gLsk6sNSpo jqE= sparc5.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:a00:20ff:fea7:8f78 sparc5.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. b9woyIw2bKMA3eJCTurjgBi1/3Er6Edgk6nT0iUBfzhv/qUK0K4ROor+ 9UkenclArkh2lbDHm/ziqn0z35gNn6FZUjo4L2x3jZQggxOuLz9ZhmpP es3eEArPU+c290i6NGGytrOmF5mh7S9h5nVapjDIPqgSBq7TtKBJ89wv ayc= stun1.nlnetlabs.nl. 18000 IN NSEC stun2.nlnetlabs.nl. CNAME RRSIG NSEC stun1.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. HFbzEeDw66ot0Qdm4S8z2YWJT3tD1HlRPhSwV/yN7GnJSQqmD4s6tUkz ZCyZtgcUNUwzm7ntIUMzD/njEiMCPWAR7SMoSHEnfLYlCx43GyiTDf8E J77Do1l8m116gA7sGnj6aPEsKrq/E0ml0yZn8sxRLhWEgxvCiGrQo652 e94= stun1.nlnetlabs.nl. 600 IN CNAME johnny.nlnetlabs.nl. stun1.nlnetlabs.nl. 600 IN RRSIG CNAME 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Vfy6Magu59sn5mCUs1qf/6FghANc01hJ8kpFzmt9Sxhowf+xpuJnyG9a lsYjYHhzvjpCv1ys82aDlN4s28ILOt7sbgeBTfG30VX6F3WZ3A7EtWS4 4ZTEwwDvV+c5x/mm+HAQQCnz9LGuNLF/9rQOprHmEivomWqnp4sXRAHs TyI= stun2.nlnetlabs.nl. 18000 IN NSEC tednet-gw.nlnetlabs.nl. A RRSIG NSEC stun2.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. YQJd0U7xpSZanBGsDMR5o3Sim0aU91L52cDVkdG/mgfkOjJcvXskQbyb 39LQozpAas5PeBvQ6xK07KR0nza4fmg1882Nv5TI38CktrdoBO0m1oDa Zj3rM5MwxAd5jClVIKuQ3Nw0DsTLR5Tlm7IVPZMPrWUJjO5QILfjWXMH Ny0= stun2.nlnetlabs.nl. 600 IN A 213.154.224.154 stun2.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ZxQ4qsRBDOj/BK800jqNncEQoyCWCqkZoT8VUmZOUdnUXv/pOQg3Fe51 a1/zeeUq9D7CPs5O8DV7OcYZSFpJHEA/GIBE+QGMT6wIdtlDl+lyvfOc lQnV+sf5t4jCexh/Mv/fSVgceO6aSqyiWc1jzQ/7kluQ/+Jk3RKJq7PA WUM= tednet-gw.nlnetlabs.nl. 18000 IN NSEC ds10.testlab.nlnetlabs.nl. A RRSIG NSEC tednet-gw.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. KKnPYYlzIMH7atLRWHIQMUim3GnfSQrpkRE49/2NeHcPuEgcSJebOf1l Ew/NEBiDCQtHEK0aiN+sE+nZ3tqdj951Ub9N332nKg98cNIqM5FVTcPS 8C5SrTH83O/xyhLbOYSJd+eOsuGlrmF0dnV6uFwC11DwGEp5fAtHXQ3/ SAQ= tednet-gw.nlnetlabs.nl. 3600 IN A 213.154.224.33 tednet-gw.nlnetlabs.nl. 3600 IN RRSIG A 5 3 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. jSPQxVwJ9Mks7+EAAYBrFkEmT8Pxmv1Op6AFldVRzsgNUh8AZYpsTqiO AH49+sbG8ZjHLSSKGdd54PGxPgTvF+h+B7NpSzpnachWIgczbiAejgsD X8EDS3D7JArouSl4/FPns2JKOJXyuA2vipB9Q0hota06O3s3T3VkOJLV Z+8= ds10.testlab.nlnetlabs.nl. 18000 IN NSEC listener.testlab.nlnetlabs.nl. A AAAA RRSIG NSEC ds10.testlab.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 4 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. CASiMvLsgqAkq6WIOqPIAtjAmi/fcd9mNCxJLgeOuyDrd6r/gbUTHky2 +sU2wYwpM19ThHyb+SLYTqlU/hI1dCpxMGVm5xf8PN3dINSZJFsKaaCx 01fg1j9LaZidOTLu8AtJqGH4TU+E7H7wvv4lvBYwwGejFHpM2r43CxIL DA4= ds10.testlab.nlnetlabs.nl. 3600 IN A 213.154.224.100 ds10.testlab.nlnetlabs.nl. 3600 IN RRSIG A 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. e9iqEEVgfnanV/2O/aNch3vIYbaAG4hvub+/UbbelsXDyADWfcVnunWU kF3WIsxFSqaZIQxAlHyIcK63z/jr+oDaGvPFmZcFE9cIU0rUlRC1GkVA pqNHcXRMcsPVdkX+kF82hbdy/CVqVGfEQfigcQq7E1bvLhs7ir+ckcRR 3gA= ds10.testlab.nlnetlabs.nl. 3600 IN AAAA 2001:7b8:206:1:a00:2bff:fe86:cdb3 ds10.testlab.nlnetlabs.nl. 3600 IN RRSIG AAAA 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. bWxVt+4GHXW2RIv5vxVeGRaDpI5O3wKoUoj71Nm+5Dx8ffzM/ZtcQNKs Xch2H+MowJ4EMqfct8YLufxFp7kv3aTYP7q/bhCk9PoxADSUVnZjs+Zh gSTTpX5InphKFEeT+JIg9RqAyYxMOSfjXU3KRI/xfWtzJ3VgYExVh4i5 UUw= listener.testlab.nlnetlabs.nl. 18000 IN NSEC player.testlab.nlnetlabs.nl. A AAAA RRSIG NSEC listener.testlab.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 4 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. dDJhcIcG9y/kF2WE/EbDG/5NKtY3cCv6VghKzv3gVnThDg24YwHq1x7s 3cGRzI6l1PpNAEBgim7Z90W5lIlfQfcwknDwh5fSZ7gD74KyG8/2I6SY EMTfW9P+cyM34Ujk8TwSlq0MLQYtElzfEkps0IC5nVRYvyRJYSzPOR51 y7w= listener.testlab.nlnetlabs.nl. 3600 IN A 213.154.224.98 listener.testlab.nlnetlabs.nl. 3600 IN RRSIG A 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. Sj5nJWIyGIuURQTGhIVfxNG8DqKDcTcwSRxWAihplSZ3gXdyL6M0qePn y23qlmj9H3DugndOol/vmmtDOUrAqOUTK3uKXeNuhJ8bxS5AN5f7PaJE CMGDMfvl9XTw6nlKF30ufpbXXlfZ26TFhfXjFmNz/r5H285kF/mNU8bF rX0= listener.testlab.nlnetlabs.nl. 3600 IN AAAA 2001:7b8:206:1:42e0:4cff:fe39:6302 listener.testlab.nlnetlabs.nl. 3600 IN RRSIG AAAA 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. PNZSXJS0xGP65+wQJtG4N8mBxeorUEVv8pRs4FtFqXv4wDvcnTpgCT4d 449V7gjlPk2ngQK5qpy68CvDVs47qrtfpgGQKOfNxeGpQbGsUE9I1114 B+38q4NUQldGGzzBQIxWBIlJnUVABPjAAyNVeSLVREVUp0m8wzsR1HQt syo= player.testlab.nlnetlabs.nl. 18000 IN NSEC rotten.testlab.nlnetlabs.nl. A AAAA RRSIG NSEC player.testlab.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 4 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ICq3/OV9Pb9yt+dMASSV6EGiXZulQqsCYoWpUs3a+ZKHVqS1Qepi0vK1 4s/mtv0xn3z/qLDzUjB3UDH4ezo7WZJILQR1W0nVdRj+baCqnR/QfA+4 Y4F37cs8qfrT0neIpSyCzDEdlMaLext+OhyhYP2eQ/17NM/OFJiMavjw OXg= player.testlab.nlnetlabs.nl. 3600 IN A 213.154.224.99 player.testlab.nlnetlabs.nl. 3600 IN RRSIG A 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. F7/bPM5B1Ye9q1urMwT2DVH5u9K3eyDau20o/Zx272aXLkJP3s3fbjhB cUtQz9DFs6MLVthN3s3BN/2+JS5XsxqGeY2ypjhlpWxb4j759gEe79pz 188jzliidXkoTxHotaTfE4z1SR35cS/nfBbMEBLILgkC7TmQpXdh9WdD NQU= player.testlab.nlnetlabs.nl. 3600 IN AAAA 2001:7b8:206:1:22e0:4cff:fe39:5e05 player.testlab.nlnetlabs.nl. 3600 IN RRSIG AAAA 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. DuuL+20G6fAgD5VFMvDHTAm8hKxgvksDvsQRUJ8yT7RpBh/VZQKzpPR/ 0l9FeZZ00dy1x/QSdPTo56t84SUGdvPh219zvs6ksmg4kXfyZquv6m0f 19IoGFX3myQ//aKnE6XDI0jvZekKmY01NXEdC0ujZe06VUyHxUpR3bnQ pek= rotten.testlab.nlnetlabs.nl. 18000 IN NSEC server.testlab.nlnetlabs.nl. A AAAA RRSIG NSEC rotten.testlab.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 4 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. ZQqczzsqR6ob3f2ldPcxxUFwMoJHygObZkL7XqdkpuHV4WzfA9rw9wUZ FYi5dE3D+2sFPDY8LGjPyd0DqQswDdi80eecv/ZIROiL2ka0buFsFo9L 93RoeaB/f52ilAuvTaJUie8L38p9G9w0g9HljscUEbBhGUSzvB32fAbw SE4= rotten.testlab.nlnetlabs.nl. 3600 IN A 213.154.224.101 rotten.testlab.nlnetlabs.nl. 3600 IN RRSIG A 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. bDraapmxqrCuAcoLuAKxYN646POaFATJa+YJ/ZKSgCJC7efwjVzWAqvL ga3gR+uGu9iRUzQh68OE2IYOgxYtGvG/lkMYBfTcreO6NbgOnFCQ4+J5 BpxucrvgQxz9tVqyl84kG+eZiB+ksVF0FQRYhJxxZUqWTPcMtU2p1RTU dOw= rotten.testlab.nlnetlabs.nl. 3600 IN AAAA 2001:7b8:206:1:206:5bff:fef2:ae8b rotten.testlab.nlnetlabs.nl. 3600 IN RRSIG AAAA 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. EqVqCWsRTraX6Ykw2L8WOSnV3GG2Ox8T5fh/nHfBX+Nxp8fJJg/CE9+q eVU7GUyqzmobFSDrwc5O9cgtR6hJ/ZP4g2TEWob9TMIguCXByjzq6zqr 8SPn0WXmJV/hja4GnnEM2oe4AZxu1hjWW2YVCJ/LdslPyPqLDPosFcmz 8Fk= server.testlab.nlnetlabs.nl. 18000 IN NSEC tinkerbell.nlnetlabs.nl. A AAAA RRSIG NSEC server.testlab.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 4 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. TKWHK663II7q0IcML1dy+PsMLYNnrOg9SeXCpgsP8xYsiFHWHPrYViRY NC+tJj3G4ORrhp8qgSi5Zb/loXDNahL2hHsqfs3vmWyONMu5zysBtfC7 BO41fRBkDtDzxQchfpaII0DDNdXzMN6rF0/tA10zOzbetTOrAzdgO0aM h44= server.testlab.nlnetlabs.nl. 3600 IN A 213.154.224.97 server.testlab.nlnetlabs.nl. 3600 IN RRSIG A 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. jYUS4vthWsYDgB1Ks8vOx9qI7mcvLN4YdMb1UnUUMua/jWuZ3j0flmTJ n0oTXWuje5Fnyu+ZgpNAbR2/TgrP9GGwFbnvLcye5lcz0tSK8RQpja7I nVmzs+BSN6YgAmmNpl7hA49ofDPmxb4Uo+ykfh6DR7lPkgec1KuXC47M sFw= server.testlab.nlnetlabs.nl. 3600 IN AAAA 2001:7b8:206:1:22e0:4cff:fe39:5e02 server.testlab.nlnetlabs.nl. 3600 IN RRSIG AAAA 5 4 3600 20070912141341 20070815141341 18182 nlnetlabs.nl. a7mvvRN5wAwqObak5JMtWLrMyLCwDhB9eVZCON+nIE478i2WcuPFxWSx XYiOZGiZq7OwIBU7aO7BwaBMKXqNokbJqbwE8KGvLMXgnWQgqlUCHRBy 2YKD9tsFT5xCtaDcSynBlMri/z9Wk+KXxlf58Adj5yCIqTEGueT4n1LG QhQ= tinkerbell.nlnetlabs.nl. 18000 IN NSEC ufo.nlnetlabs.nl. A RRSIG NSEC tinkerbell.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. FX1z7mozbIq/4PufluGQ6ZVirevfKu8nZUHb9Ol4DNAD1nIu0v+teldL Ahx7fHpmzcYrMTA1n9Kktsim8cTd0LizMTd/wwWb+syExqNINZ1L20p1 nvIKzl/Razv27HKsY/kpiBUK7X+TCd/xJnFIO7D2JzoGjyiYpRGiaqef XxY= tinkerbell.nlnetlabs.nl. 600 IN A 213.154.224.13 tinkerbell.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Ws7cRR7C2t+njlV/zBhVLfYPJN2l9fWOn97DjcU0sB6hT7r09cYIVV5u 8RTrH5UgwaboSqkImD+0LlbNte9nwcJS9wP3sItg/eO6eZyJ5NGKm/Nk 4KrKV6J1Vx1Ms+EtgzFhxYAiX4ThWBwZxaSNEDVh3ZCA+dAucURt315h xF0= ufo.nlnetlabs.nl. 18000 IN NSEC unbound.nlnetlabs.nl. A MX RRSIG NSEC ufo.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. IgEV6H97KEnxkNdhytWMjmtbXYerO61AqhAhDeD6J8iakPf83SqXOE9R ExwFmiSeqBRe+y/YZ+wVxLeWOU6okBrP4L6FAg57X+WVNNa123KD4r4j CMNR2hxXtFMjvvfRRPdi3i6JtTl2ygHJpvMzvbqJc2BrN7zdaGEG8bDU vQ8= ufo.nlnetlabs.nl. 600 IN A 213.154.224.56 ufo.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. mEc9varsLkWC5CCcQJqlSK1Tsk29Qfo6K2WzGQCLHaX+hhy83NbkHSss tYqXgpXNFUcxHRTmPoVofzlHFEkD+/5U8PxFEnSOI5FEfBbcYlHPSr7v l+8AJBPKXlC2ftVr7my7w+UhzvAODEbXxhveeqe/zJfeRImr+lJlANpk /pA= ufo.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. ufo.nlnetlabs.nl. 600 IN MX 100 omval.tednet.nl. ufo.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. K2RffkDkyKmII1DVIgom/MeplVYzo6HLYgm4bbwbGP9y1T41XDwvgnvE EBI7OO+Dcz4m+adtIAD6/adkKYEQnqymok/BK1N1WArMtXXPyotRFOK7 UlrbYIFiIDE7GaVJsvJH0jyCDp8/pAJt7m3WLmhc579avWNvIPNqRAB7 uM0= unbound.nlnetlabs.nl. 18000 IN NSEC viertje.nlnetlabs.nl. A MX AAAA RRSIG NSEC unbound.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. T7VzMgdNSmXjZgw5VI8khY6k71BfeOH59r6vfHQhdlalMpALaDWYN6RD Oloslx7lLucA3ZrQ4X/RPwr84ZrRc0K0sH61MyQtuzyeiIWu8ifK7KHG yuxLYlngZx0jWsf2DgJuUaPaU6tzLLccfRJ0xZbbbv6TKL3sTD+EGSdI Wkc= unbound.nlnetlabs.nl. 600 IN A 213.154.224.1 unbound.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. euqJ/pC1YAuQB04coh1qWAptIkgfJDcJcGcKHH+bCGy5NK/IhEH8SKQE D0WlSD1pD+ibmeGQAi2be8eF3v2bHLog/Gm9wPjpxRj7lLkqtVxrXmyO pO6w7S9xfncsqJLkyyDhOgdg4/5LKghb6WAzkPKcMOd9GWLmVPdYhZ7u Pa4= unbound.nlnetlabs.nl. 600 IN MX 10 open.nlnetlabs.nl. unbound.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. YxVXw9KyfAmxJqhIKh6L2X2cs6eUnQNlo3xkenBPZW1UjEne6I4H0nbB hXWc4hWFaADJjLEJlXu0NoYTIsSVafynu4knJfmNiUykmWc2nqUy96R8 1qmQ+TknQ93qW8s/2LA5Maf8UjHqFhbZbX/EpGxlVFEc5WN1nNwIiSH+ hwM= unbound.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 unbound.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. BwPZseI4zk7Kh4JFKGmeevVKIG4FtLVdajwGWluOk9vhC7Hv7jbEbO+R k/pfkJuibHy+cx0Rv72sRM6vK86G7WD9PsLseHJvCupXOcHB/gfrftfq kSRyt8bNs+XZ2oFVLLj9MkksbuJt7ZrJVhYneBUGvDyzDOitIhg6aIDt oPc= viertje.nlnetlabs.nl. 18000 IN NSEC vrij-2.nlnetlabs.nl. A AAAA RRSIG NSEC viertje.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. KDdYp63+Wl7DRcwjA90xwSOqZUGQsZnqweopqsaVhZ3eKz4seGnihRwh oXrNVJlAZpsujIrTZwfh9VbzbATtaUciVCfE4AjGdXxsLKhEQIGjExau XyFgCmaT4/kKc6d9Bdxhw2Lan2cClWQWCtlUEIDyoAybtwkmO5zU0Pil EvE= viertje.nlnetlabs.nl. 600 IN A 213.154.224.62 viertje.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. fldcX8mF5FC4YxcoPgOmLhGmW/TTw5MVLOwK35aItqemNfXwFglbuJtv KiW3Qdtcr5g5iE5xkDl9aCJRYlfAyugYgJX+AJ1WkO0nfpSUUbulOnRN MEZImO2EHsyA3JQCEHTZ+J8xfYQJ87rfAD/pRXbmh5TW+wiXckNflf4J rPM= viertje.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1:203:93ff:feea:3086 viertje.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. hFGUoyGTYcfURTEKx0qFYaJRBqzGeuctzC/rVQqLGTx0DhzVxNUIJN9V Rqj79FQXQ3S/XxOANmk14Y78HZmykUcARxCDDZGjgGrMTuuoQpYiDCdD FRhWWXr0/uS9yl0exj9Xo7fTIiGHe+d57CIuy8daJuxaBNXvc5+OIiyD U3U= vrij-2.nlnetlabs.nl. 18000 IN NSEC www.nlnetlabs.nl. A MX RRSIG NSEC vrij-2.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. avyjH0dMBtuhwewLd0ZIy/m4dFJCqdD2sWhq7X7s/wHIf4A3sSAZecFf 5Eu0gtyKkX4cIhFjrPzj6NTJPIUZmkaEAXIsmJ6sVw58+Wc6dP0E84d/ WQ8vBkpYzoAWVH5p9FDyax/3jNmn5U5KAqraOy3UaihnbafpmyR801kz 0uQ= vrij-2.nlnetlabs.nl. 600 IN A 213.154.224.53 vrij-2.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. ieo0tj2nMObHvje9Zb8KuhHzEE7hAo/d61NovqrGEe3MKFZ1Q/m15bC7 QTXZpuqundT1cIDPQmc9nA7vC7dX3JZameQ1j5QE3GSiNuU5xpFmnpvc KTBQbSDer+dncn/A3F+qY2HjylgkzMrmxRRSxOjexVIYCjFbtUvYsiAd KRk= vrij-2.nlnetlabs.nl. 600 IN MX 50 open.nlnetlabs.nl. vrij-2.nlnetlabs.nl. 600 IN MX 100 sanne.nlnetlabs.nl. vrij-2.nlnetlabs.nl. 600 IN RRSIG MX 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. hwamqP2ZCEhBO5Wn12GsZoKwxkmhn7J0NTbsuYKF2Vk23aPlV9qc7yfR SnK2G4y33dq/omt6LxN+29Sd+9lcu/Krx3rlYd5Y/dmu2ZX/SXX+XVUY Iqla+LwyYe6UWhG1zdvtD5UHuBBYocGcGud9amqFXHo8Q7YVded4AkoC 1BQ= www.nlnetlabs.nl. 18000 IN NSEC nlnetlabs.nl. A AAAA RRSIG NSEC www.nlnetlabs.nl. 18000 IN RRSIG NSEC 5 3 18000 20070912141341 20070815141341 18182 nlnetlabs.nl. L2RzZigsb3UEJTef8PTiDghDDWsRdwEFRUNZTSm79MO6poZOkq/0yzBr mfRMo3ST2wHfcyV+/Ws11imgrZ4EVXZ8bynQ7HFVnsI1xH/SrMHSUnzQ g1OPsiXJbukgfVaM0q4URq6cmBSuX6Ti/6waq39j4Cj3UJXAClG3lloB z+o= www.nlnetlabs.nl. 600 IN A 213.154.224.1 www.nlnetlabs.nl. 600 IN RRSIG A 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. Luav3fjE1VGhran3tnxR93cgoEyH3Kh//240KDCT8k0U4Tfw6xSBMVjj rf3oH13SXCZfYdJYZbZEahBvysMRm40Izl4+rpfUKzwjHXn1una1o4Gt A48v0fwffCXtUPz1TDFq9IKlVe95uLwjheMF8auDXHLwLItj2lF827Dd VI0= www.nlnetlabs.nl. 600 IN AAAA 2001:7b8:206:1::1 www.nlnetlabs.nl. 600 IN RRSIG AAAA 5 3 600 20070912141341 20070815141341 18182 nlnetlabs.nl. kNBkVXmMFOsKXv6IdhydkSbopCxiW1gHOVHv3G9co1SzRuaubyZ+Z7PL 5xVVMwx9Z7AwvwZ1t4b3IqVnXOXtdbABMSlUyLLRxMGt6pPt6jrcFery 7aNlmtIEStJ4FBLL5T8wdsNWUP4/iV9iTrppB/Emxp0dTz77MF2rpI+V DL0= nlnetlabs.nl. 86400 IN RRSIG SOA 5 2 86400 20070912141341 20070815141341 18182 nlnetlabs.nl. C54bDHKC2sRbVUrDOeM2kXCHpJIFu0LlZWAFVFLf4l1Grfj+B4WcXqel kSVhi/Gpt70VW+zDEOHrS0kcE5XaBnrQE1AUZ9QjGyfjXlRzGWYbyVLD evIFrs7FdIeGKKWWp1YDLUHHF+txDT9NFu6KyEqPbZEVgIVok3skO5Vu jpA= nlnetlabs.nl. 86400 IN SOA open.nlnetlabs.nl. hostmaster.nlnetlabs.nl. 2007081501 28800 7200 604800 18000 ;; Query time: 20 msec ;; SERVER: 2001:7b8:206:1::53#53(2001:7b8:206:1::53) ;; WHEN: Thu Aug 16 11:36:35 2007 ;; XFR size: 493 records (messages 1, bytes 50727) ENTRY_END unbound-1.13.1/testdata/ttl_max.rpl0000644000175000017500000000747014010434640016707 0ustar wouterwouter; config options server: access-control: 127.0.0.1 allow_snoop cache-max-ttl: 10 qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test TTL max option for messages in the cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION AUTHORITY . 86400 IN SOA . . 20070304 28800 7200 604800 86400 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 248 IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. 10 IN SOA . . 15 28800 7200 604800 10 ENTRY_END RANGE_END ; start by passing time ; so we are not at 0 STEP 1 TIME_PASSES ELAPSE 10 ; query for the record STEP 8 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA CD SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 10 IN A 10.20.30.40 SECTION AUTHORITY example.com. 10 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 10 IN A 1.2.3.4 ENTRY_END ; wait STEP 20 TIME_PASSES ELAPSE 17 ; do a lookup to check TTLs. STEP 25 QUERY ENTRY_BEGIN REPLY SECTION QUESTION www.example.com. IN A ENTRY_END STEP 26 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA SECTION QUESTION www.example.com. IN A SECTION ANSWER . 10 IN NS K.ROOT-SERVERS.NET. SECTION AUTHORITY SECTION ADDITIONAL K.ROOT-SERVERS.NET. 10 IN A 193.0.14.129 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_probefailsig.rpl0000644000175000017500000001123714010434640022033 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 07:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 07:46:40 2009 ;;next_probe_time: 1258967360 ;;Mon Nov 23 09:09:20 2009 ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with probe signature failure ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; revoked keys example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} example.com. 10800 IN DNSKEY 385 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16614 (ksk), size = 512b} ; signatures ; were edited from 20091124111500 20091018111500 to make them fail. example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090101011500 20090101011500 55710 example.com. zOSlB1iwtlP2lum1RK0WoDQrMVj0JKwk2E5Mu1okzV38hAx3Xm9IGMK6WrNkVVLmx4OkhYmdPVA95jVsFpwLMw== ;{id = 55710} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090101011500 20090101011500 16614 example.com. qP49cCYP3lvNnLBYty/JxAwHqBIGjpup5zQ7qpjPnaZpBb/TlpOhY17LBZrqD86VvBbEVz5tkxC9UrCy85ePDQ== ;{id = 16614} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END RANGE_END ; set date/time to Mon Nov 23 09:46:40 2009 STEP 5 TIME_PASSES EVAL ${1258962400 + 7200} STEP 6 TRAFFIC ; do the probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 3200 ${timeout} 3600} STEP 9 ASSIGN tp = ${1258962400} ; the auto probing should have been done now. STEP 11 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: 1258962400 ;;Mon Nov 23 07:46:40 2009 ;;next_probe_time: ${$t0+$probe0} ;;${ctime $t0+$probe0} ;;query_failed: 6 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 07:46:40 2009 FILE_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ta_algo_dnskey.rpl0000644000175000017500000002103014010434640021050 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b}" trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with multiple algorithm trust anchor ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJIIs70j+sDS/UT2QRp61SE7S3EEXopNXoFE73JLRmvpi/UrOO/Vz4Se6wXv/CYCKjGw06U4WRgRYXcpEhJROyNapmdIKSxhOzfLVE1gqA0PweZR8dtY3aNQSRn3sPpwJr6Mi/PqQKAMMrZ9ckJpf1+bQMOOvxgzz2U1GS18b3yZKcgTMEaJzd/GZYzi/BN2DzQ0MsrSwYXfsNLFOBbs8PJMW4LYIxeeOe6rUgkWOF7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 512b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134150 20070829134150 2854 example.com. AKIIYDOGHogglFqJK94ZtOnF7EfGikgAyloMNRSMCrQgFaFkmcOyjrc= ;{id = 2854} example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20070926134150 20070829134150 30899 example.com. J55fsz1GGMnngc4r50xvXDUdaVMlfcLKLVsfMhwNLF+ERac5XV/lLRAc/aSER+qQdsSo0CrjYjy1wat7YQpDAA== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. JNWECShNE+nCLQwOXJJ3xpUkh2G+FCh5nk8uYAHIVQRse/BIvCMSlvRrtVyw9RnXvk5RR2bEgN0pRdLWW7ug5Q== ;{id = 30899} www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} example.com. 3600 IN RRSIG NS 5 2 3600 20070926134150 20070829134150 30899 example.com. YTqtYba73HIOQuPr5oDyIX9pfmz1ybEBjwlD/jUgcPmFINUOZ9FeqG6ywgRKwn4AizkKTK00p1sxZYMKxl91wg== ;{id = 30899} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ns.example.com. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.com. Dn1ziMKrc3NdJkSv8g61Y9WNk3+BAuwCwnYzAZiHmkejkSCPViLJN7+f4Conp9l8LkTl50ZnLgoYrrUYNhMj6w== ;{id = 30899} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_dp_turnsuseless.rpl0000644000175000017500000000536714010434640021527 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test parent-child dichotomy where dp turns useless ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; data for ns-crap does not exist. ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NXDOMAIN SECTION QUESTION ns-crap. IN NS SECTION AUTHORITY ; very short TTL so it'll expire. . 2 SOA . . 1 2 3 4 5 SECTION ADDITIONAL ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY ; very short TTL so it can time out quickly. example.com. 2 IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns-crap. SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 2 IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN NS ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns-crap. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 2 IN A 10.20.30.40 ENTRY_END ; parent side stuff times out STEP 40 TIME_PASSES ELAPSE 5.0 ; actual retry logic must fire STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 2 IN A 10.20.30.40 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_axfr.tdir/0000755000175000017500000000000014010434640017432 5ustar wouterwouterunbound-1.13.1/testdata/auth_axfr.tdir/auth_axfr.test0000644000175000017500000000234614010434640022321 0ustar wouterwouter# #-- auth_axfr.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile if grep SERVFAIL outfile; then echo "> try again" dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 1 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 1 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 1 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 10 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi if grep SERVFAIL outfile; then echo "> try again" sleep 10 dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile fi echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "1.2.3.4" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/auth_axfr.tdir/auth_axfr.dsc0000644000175000017500000000045014010434640022105 0ustar wouterwouterBaseName: auth_axfr Version: 1.0 Description: Perform AXFR for authority zone CreationDate: Tue 13 Jun 09:35:40 CEST 2017 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: auth_axfr.pre Post: auth_axfr.post Test: auth_axfr.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/auth_axfr.tdir/auth_axfr.post0000644000175000017500000000045214010434640022323 0ustar wouterwouter# #-- auth_axfr.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/auth_axfr.tdir/auth_axfr.conf0000644000175000017500000000046614010434640022270 0ustar wouterwouterserver: verbosity: 7 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no use-caps-for-id: yes auth-zone: name: "example.com" for-upstream: yes for-downstream: yes master: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/auth_axfr.tdir/auth_axfr.testns0000644000175000017500000000123314010434640022654 0ustar wouterwouterENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. IN NS ns.example.net. EXTRA_PACKET REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER www.example.com. IN A 1.2.3.4 example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 ENTRY_END unbound-1.13.1/testdata/auth_axfr.tdir/auth_axfr.pre0000644000175000017500000000160214010434640022122 0ustar wouterwouter# #-- auth_axfr.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT auth_axfr.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < auth_axfr.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/iter_resolve_minimised_timeout.rpl0000644000175000017500000000522714010434640023543 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: yes minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test iterative qname minimised resolve of www.example.com. Simulate broken nameserver that drops QTYPE=A queries. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA ::123 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 20 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION com. IN A ENTRY_END STEP 30 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION example.com. IN A ENTRY_END STEP 40 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END STEP 41 TIMEOUT STEP 42 TIMEOUT STEP 43 TIMEOUT STEP 50 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN AAAA ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN AAAA SECTION ANSWER www.example.com. IN AAAA ::123 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_probefail.rpl0000644000175000017500000001177014010434640021332 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. AUTOTRUST_FILE example.com ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;next_probe_time: 1258967360 ;;Mon Nov 23 10:09:20 2009 ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with probe failure ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; revoked keys example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} example.com. 10800 IN DNSKEY 385 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16614 (ksk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55710 example.com. zOSlB1iwtlP2lum1RK0WoDQrMVj0JKwk2E5Mu1okzV38hAx3Xm9IGMK6WrNkVVLmx4OkhYmdPVA95jVsFpwLMw== ;{id = 55710} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 16614 example.com. qP49cCYP3lvNnLBYty/JxAwHqBIGjpup5zQ7qpjPnaZpBb/TlpOhY17LBZrqD86VvBbEVz5tkxC9UrCy85ePDQ== ;{id = 16614} ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END RANGE_END ; set date/time to Mon Nov 23 09:46:40 2009 STEP 5 TIME_PASSES EVAL ${1258962400 + 7200} STEP 6 TRAFFIC ; do the probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 3200 ${timeout} 3600} STEP 9 ASSIGN tp = ${1258962400} ; the auto probing should have been done now. STEP 11 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;last_success: 1258962400 ;;Mon Nov 23 08:46:40 2009 ;;next_probe_time: 1258967360 ;;Mon Nov 23 10:09:20 2009 ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAas/cAhCFXvBUgTSNZCvQp0pLx1dY+7rXR0hH4/3EUgWmsmbYUpI1qD0xhwKD/oYGEwAm291fyWJ9c0oVxXDEK8= ;{id = 16486 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=1258962400 ;;Mon Nov 23 08:46:40 2009 FILE_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+008+29332.key0000644000175000017500000000063614010434640020611 0ustar wouterwouterexample.com. IN DNSKEY 257 3 8 AwEAAb4WMOTBLTFvmBra5m6SK4VfViOzmvyUAU0qv861ZQXeEFvwlndqNU9rwRsMxrSWAYs5nHErKDn49usC/HyxxW1477iGFHhfgL4mjNreJm9zft2QFB1VLbRbEPYdDMLCn4co0qnG7/KG8W2i8Pym1L7f+aREwbLo+/716AS2PbaKMhfWLKLiq5wnBcUClQMNzCiwhqxDJp1oePqfkVdeUgXOtgi0dYRIKyQFhJ5VWJ22npoi/Gif0XLCADAlAwRLKc8o/yJkCxskzgpHpw5Cki1lclg0aq4ssOuPRQ+ne6IHYCz9D2mwzulblhLFamKdq7aHzNt4NlyxhpANVFiKLD8= ;{id = 29332 (ksk), size = 2048b} unbound-1.13.1/testdata/val_nodatawc.rpl0000644000175000017500000001144214010434640017673 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with wildcard nodata response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; SOA record is missing in reply. ; wildcard, Denies A, note this is the end of the NSEC chain. *.example.com. IN NSEC example.com. RRSIG NSEC *.example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFEwIBOyCychIo8y/JnBLLrhQdejHAhUAtKBLVPEvhF2haaX/RNUGLji1Xw0= ;{id = 2854} ; this NSEC denies original query name ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCfm3mQakqw9pd8SluduiMXYYc+/wIULqIBxw1bK8QEwCrd8E6T50P4BEw= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY *.example.com. IN NSEC example.com. RRSIG NSEC *.example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFEwIBOyCychIo8y/JnBLLrhQdejHAhUAtKBLVPEvhF2haaX/RNUGLji1Xw0= ;{id = 2854} ns.example.com. IN NSEC zork.example.com. A RRSIG NSEC ns.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCfm3mQakqw9pd8SluduiMXYYc+/wIULqIBxw1bK8QEwCrd8E6T50P4BEw= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_compress_c00c.tdir/0000755000175000017500000000000014010434640020751 5ustar wouterwouterunbound-1.13.1/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.dsc0000644000175000017500000000053714010434640024751 0ustar wouterwouterBaseName: fwd_compress_c00c Version: 1.0 Description: Forward and check compression of answer to query name. CreationDate: Mon Oct 15 15:57:03 CEST 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_compress_c00c.pre Post: fwd_compress_c00c.post Test: fwd_compress_c00c.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post0000644000175000017500000000050214010434640025155 0ustar wouterwouter# #-- fwd_compress_c00c.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.testns0000644000175000017500000000067414010434640025522 0ustar wouterwouter; nameserver test file $ORIGIN overeinder.net. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION overeinder.net. IN A SECTION ANSWER overeinder.net. 900 IN A 80.56.223.205 SECTION AUTHORITY overeinder.net. 86400 IN NS a.ns.joker.com. overeinder.net. 86400 IN NS b.ns.joker.com. overeinder.net. 86400 IN NS c.ns.joker.com. ENTRY_END unbound-1.13.1/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.good0000644000175000017500000000072314010434640025125 0ustar wouterwouter0000000: 006c eb41 8180 0001 0001 0003 0000 0a6f .l.A...........o 0000010: 7665 7265 696e 6465 7203 6e65 7400 0001 vereinder.net... 0000020: 0001 c00c 0001 0001 0000 0384 0004 5038 ..............P8 0000030: dfcd c00c 0002 0001 0001 5180 0010 0161 ..........Q....a 0000040: 026e 7305 6a6f 6b65 7203 636f 6d00 c00c .ns.joker.com... 0000050: 0002 0001 0001 5180 0004 0162 c03e c00c ......Q....b.>.. 0000060: 0002 0001 0001 5180 0004 0163 c03e ......Q....c.> unbound-1.13.1/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.pre0000644000175000017500000000163214010434640024763 0ustar wouterwouter# #-- fwd_compress_c00c.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_compress_c00c.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_compress_c00c.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf0000644000175000017500000000044314010434640025121 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no minimal-responses: no rrset-roundrobin: no forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test0000644000175000017500000000211514010434640025151 0ustar wouterwouter# #-- fwd_compress_c00c.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test # check what sort of netcat we have if nc -h 2>&1 | grep "q secs"; then ncopt="-q 3 -i 2" else ncopt="-i 2" fi PRE="../.." # do the test echo "> query overeinder.net | nc $ncopt tcp | xxd." echo "0020eb41010000010000000000000a6f76657265696e646572036e65740000010001" | xxd -r -p | nc $ncopt 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> cat outfile" cat outfile echo "> check answer" if grep "0000000: 007a" outfile; then echo "too big!" exit 1 fi if grep "0000000: 006c" outfile; then echo "OK" else echo "bad size, not OK" exit 1 fi if grep "^00000000: 006c" outfile; then echo "fixup xxd with long file positions" sed -e 's/^0//' < outfile > outfile2 mv outfile2 outfile cat outfile fi if diff fwd_compress_c00c.good outfile; then echo "Diff OK" else echo "Diff in output" exit 1 fi exit 0 unbound-1.13.1/testdata/iter_pclame.rpl0000644000175000017500000000631014010434640017513 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with recursion, parent child differ, lame domain ; make sure it stops probing once is has cached all the badness. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.net. ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END RANGE_END RANGE_BEGIN 0 200 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END ; Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 200 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ftp.example.com. IN A ENTRY_END ; recursion happens here. STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION ftp.example.com. IN A SECTION ANSWER ENTRY_END ; no more outgoing queries to .com or .net, all should be cached. STEP 101 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END ; recursion happens here. STEP 120 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION mail.example.com. IN A SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_b5_wcnodata_nonc.rpl0000644000175000017500000001100614010434640022365 0ustar wouterwouter; config options server: trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )" val-override-date: "20120420235959" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator NSEC3 B.5 wildcard nodata, without nc. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example. IN A SECTION AUTHORITY example. IN NS ns1.example. ; leave out to make unbound take ns1 ;example. IN NS ns2.example. SECTION ADDITIONAL ns1.example. IN A 192.0.2.1 ; leave out to make unbound take ns1 ;ns2.example. IN A 192.0.2.2 ENTRY_END RANGE_END ; ns1.example. RANGE_BEGIN 0 100 ADDRESS 192.0.2.1 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN A SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION ns1.example. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR REFUSED SECTION QUESTION example. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example. IN DNSKEY SECTION ANSWER example. DNSKEY 256 3 7 AwEAAaetidLzsKWUt4swWR8yu0wPHPiUi8LU ( sAD0QPWU+wzt89epO6tHzkMBVDkC7qphQO2h TY4hHn9npWFRw5BYubE= ) example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= ) example. RRSIG DNSKEY 7 1 3600 20150420235959 ( 20051021000000 12708 example. AuU4juU9RaxescSmStrQks3Gh9FblGBlVU31 uzMZ/U/FpsUb8aC6QZS+sTsJXnLnz7flGOsm MGQZf3bH+QsCtg== ) ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY example. SOA ns1.example. bugs.x.w.example. 1 3600 300 ( 3600000 3600 ) example. RRSIG SOA 7 1 3600 20150420235959 20051021000000 ( 40430 example. Hu25UIyNPmvPIVBrldN+9Mlp9Zql39qaUd8i q4ZLlYWfUUbbAS41pG+68z81q1xhkYAcEyHd VI2LmKusbZsT0Q== ) ;; NSEC3 RR that matches the closest encloser (w.example) ;; H(w.example) = k8udemvp1j2f7eg6jebps17vp3n8i58h k8udemvp1j2f7eg6jebps17vp3n8i58h.example. NSEC3 1 1 12 aabbccdd ( kohar7mbb8dc2ce8a9qvl8hon4k53uhi ) k8udemvp1j2f7eg6jebps17vp3n8i58h.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. FtXGbvF0+wf8iWkyo73enAuVx03klN+pILBK S6qCcftVtfH4yVzsEZquJ27NHR7ruxJWDNMt Otx7w9WfcIg62A== ) ;; NSEC3 RR that covers the "next closer" name (z.w.example) ;; H(z.w.example) = qlu7gtfaeh0ek0c05ksfhdpbcgglbe03 ;q04jkcevqvmu85r014c7dkba38o0ji5r.example. NSEC3 1 1 12 aabbccdd ( r53bq7cc2uvmubfu5ocmm6pers9tk9en A RRSIG ) ;q04jkcevqvmu85r014c7dkba38o0ji5r.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. hV5I89b+4FHJDATp09g4bbN0R1F845CaXpL3 ZxlMKimoPAyqletMlEWwLfFia7sdpSzn+ZlN NlkxWcLsIlMmUg== ) ;; NSEC3 RR that matches a wildcard at the closest encloser. ;; H(*.w.example) = r53bq7cc2uvmubfu5ocmm6pers9tk9en r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. NSEC3 1 1 12 aabbccdd ( t644ebqk9bibcna874givr6joj62mlhv MX RRSIG ) r53bq7cc2uvmubfu5ocmm6pers9tk9en.example. RRSIG NSEC3 7 2 3600 20150420235959 20051021000000 ( 40430 example. aupviViruXs4bDg9rCbezzBMf9h1ZlDvbW/C ZFKulIGXXLj8B/fsDJarXVDA9bnUoRhEbKp+ HF1FWKW7RIJdtQ== ) SECTION ADDITIONAL ENTRY_END ; catch glue queries ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN A SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA DO NOERROR SECTION QUESTION ns2.example. IN AAAA SECTION ANSWER ; nothing to make sure the ns1 server is used for queries. ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.z.w.example. IN AAAA ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION a.z.w.example. IN AAAA SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_ds_cname.rpl0000644000175000017500000001524314010434640017647 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with CNAME response to DS ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ; not legal NOERROR/NODATA response, but leniently accepted (not validated) SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; nothing here, not even NSECs SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ; DS query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN DS SECTION ANSWER www.example.com. IN CNAME zzz.example.com. www.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. AERsv3PiBObAEhZ/dKyamie0sjvYLn7YaEKgv9ExB14KKLgWvzCaOWo= ;{id = 2854} ;*.example.com. IN CNAME zzz.example.com. ;*.example.com. 3600 IN RRSIG CNAME 3 2 3600 20070926134150 20070829134150 2854 example.com. AERsv3PiBObAEhZ/dKyamie0sjvYLn7YaEKgv9ExB14KKLgWvzCaOWo= ;{id = 2854} SECTION AUTHORITY *.example.com. IN NSEC zzz.example.com. CNAME RRSIG NSEC *.example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. AJxl2TXciyhbKqSakVNtjlt8Bbkco02zpl5RlY88iqVmSa6ts+/guU4= ;{id = 2854} zzz.example.com. IN NSEC *.zzz.example.com. A RRSIG NSEC zzz.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ACtgx/h0YfGEK79zg4G16jB/0oRWH0nxrMzUc/4hCY3oprsP8DrdjqU= ;{id = 2854} example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION zzz.example.com. IN DS SECTION ANSWER SECTION AUTHORITY zzz.example.com. IN NSEC *.zzz.example.com. A RRSIG NSEC zzz.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. ACtgx/h0YfGEK79zg4G16jB/0oRWH0nxrMzUc/4hCY3oprsP8DrdjqU= ;{id = 2854} example.com. IN SOA alfa.ns.example.com.cz. hostmaster.example.com. 2010030800 10800 86400 604800 86400 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. ADsxLOHjxFzwFmwIiGOubqD9nKWAp4RccRIXQ0+EAUGfSDZMCB0ZiFA= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END SCENARIO_END unbound-1.13.1/testdata/nomem_cnametopos.rpl0000644000175000017500000002106114010434640020572 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" msg-cache-size: 8 rrset-cache-size: 8 target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test cname to positive without cache ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END ENTRY_BEGIN MATCH opcode qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 5 TRAFFIC ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_scrub_ns_side.rpl0000644000175000017500000000330014010434640021070 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test scrubber to scrub NS record to the side of the query ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER ; must be scrubbed www.burritolovers.com. IN A 10.20.30.40 SECTION AUTHORITY example1234.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY ; not pertinent to the query www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_stublastresort.rpl0000644000175000017500000001061514010434640021355 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. stub-zone: name: "example.com" stub-addr: 1.2.3.6 stub-prime: yes CONFIG_END SCENARIO_BEGIN Test stub with stub-prime and last resort fallback ; the last resort fallback should not activate, as the ; configured stub must be used for this data, or its primed data. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; the stub-prime server. ; local authority (that fails a lot) RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.7 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION ns.example.com. IN A SECTION ANSWER ;ns.example.com. IN A 1.2.3.7 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ;www.example.com. IN A 10.20.30.70 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; the primed server RANGE_BEGIN 0 100 ADDRESS 1.2.3.7 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.8 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ;www.example.com. IN A 10.20.30.80 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; crap server that the primed server refers to. RANGE_BEGIN 0 100 ADDRESS 1.2.3.8 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.com. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ;www.example.com. IN A 10.20.30.50 SECTION AUTHORITY ;example.com. IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/hostsfileosx.tdir/0000755000175000017500000000000014010434640020203 5ustar wouterwouterunbound-1.13.1/testdata/hostsfileosx.tdir/hostsfileosx.pre0000644000175000017500000000102214010434640023440 0ustar wouterwouter# #-- hostsfileosx.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 FWD_PORT=$(($RND_PORT + 1)) echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT hostsfileosx.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log unbound-1.13.1/testdata/hostsfileosx.tdir/hostsfileosx.hosts0000644000175000017500000000100414010434640024012 0ustar wouterwouter# Host Database # # This file should contain the addresses and aliases for local hosts that # share this file. Replace 'my.domain' below with the domainname of your # machine. # ::1 localhost localhost.my.domain 127.0.0.1 localhost localhost.my.domain # from MacOSX. fe80::1%lo0 localhost 255.255.255.255 broadcasthost # Imaginary network. 10.0.0.2 myname.my.domain myname 10.0.0.3 myfriend.my.domain myfriend 10.20.30.40 virtual.virtual.virtual.local unbound-1.13.1/testdata/hostsfileosx.tdir/hostsfileosx.post0000644000175000017500000000042714010434640023647 0ustar wouterwouter# #-- hostsfileosx.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID unbound-1.13.1/testdata/hostsfileosx.tdir/hostsfileosx.testns0000644000175000017500000000077414010434640024207 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ; for priming query ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION @ IN NS SECTION ANSWER @ IN NS 127.0.0.1 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END unbound-1.13.1/testdata/hostsfileosx.tdir/hostsfileosx.dsc0000644000175000017500000000050514010434640023430 0ustar wouterwouterBaseName: hostsfileosx Version: 1.0 Description: Test lookup using libunbound with osx hosts file CreationDate: Fri May 16 13:29:39 CEST 2008 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: hostsfileosx.pre Post: hostsfileosx.post Test: hostsfileosx.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/hostsfileosx.tdir/hostsfileosx.test0000644000175000017500000000261414010434640023641 0ustar wouterwouter# #-- hostsfileosx.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # test if fwder is up echo "> dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile" dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile if grep "10.20.30.40" outfile; then echo "fwder is up" else cat fwd.log echo "fwder not up" exit 1 fi rm outfile # create asynclook get_make echo "> (cd $PRE ; $MAKE asynclook)" (cd $PRE ; $MAKE asynclook) if test ! -x $PRE/asynclook; then echo "cannot build asynclook test program" exit 1 fi (cd $PRE ; $MAKE lock-verify) # check the locks. function locktest() { if test -x $PRE/lock-verify -a -f ublocktrace.0; then $PRE/lock-verify ublocktrace.* if test $? -ne 0; then echo "lock-verify error" exit 1 fi fi } THR="" if grep "undef HAVE_FORK" $PRE/config.h; then THR="-t" fi # test hosts reading (directed at local auth info) echo '> $PRE/asynclook $THR -H hostsfileosx.hosts virtual.virtual.virtual.local 2>&1 | tee outfile' $PRE/asynclook $THR -H hostsfileosx.hosts virtual.virtual.virtual.local 2>&1 | tee outfile if grep "virtual.virtual.virtual.local: 10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi locktest rm outfile echo "> cat logfiles" cat fwd.log exit 0 unbound-1.13.1/testdata/serve_original_ttl.rpl0000644000175000017500000000547414010434640021134 0ustar wouterwouter; config options server: access-control: 127.0.0.1 allow_snoop module-config: "validator iterator" qname-minimisation: "no" minimal-responses: no serve-original-ttl: yes cache-max-ttl: 1000 cache-min-ttl: 20 serve-expired: yes serve-expired-reply-ttl: 123 stub-zone: name: "example.com" stub-addr: 1.2.3.4 CONFIG_END SCENARIO_BEGIN Test serve-original-ttl ; Scenario overview: ; - query for example.com. IN A ; - check that we get an answer for example.com. IN A with the correct TTL ; - query again after a couple seconds and check that we get the original TTL ; (next steps are combination with serve-expired) ; - query again after the TTL expired ; - check that we get the expired cached answer with the original TTL ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; Query with RD flag STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the correct answer (should be cached) STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 IN A 5.6.7.8 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ; Wait a couple of seconds (< 10) STEP 11 TIME_PASSES ELAPSE 5 ; Query again STEP 20 QUERY ENTRY_BEGIN REPLY SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got the cached answer with the original TTL ; (Passively checks that minimum and maximum TTLs are ignored) STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 A 5.6.7.8 SECTION AUTHORITY example.com. 3600 NS ns.example.com. SECTION ADDITIONAL ns.example.com. 3600 A 1.2.3.4 ENTRY_END ; Wait for the TTL to expire STEP 31 TIME_PASSES ELAPSE 3601 ; Query again STEP 40 QUERY ENTRY_BEGIN REPLY SECTION QUESTION example.com. IN A ENTRY_END ; Check that we got a stale answer with the original TTL STEP 50 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RA NOERROR SECTION QUESTION example.com. IN A SECTION ANSWER example.com. 10 A 5.6.7.8 SECTION AUTHORITY example.com. NS ns.example.com. SECTION ADDITIONAL ns.example.com. A 1.2.3.4 ENTRY_END ; Give time for the pending query to get answered STEP 51 TRAFFIC SCENARIO_END unbound-1.13.1/testdata/02-unittest.tdir/0000755000175000017500000000000014010434640017547 5ustar wouterwouterunbound-1.13.1/testdata/02-unittest.tdir/02-unittest.test0000644000175000017500000000254214010434640022551 0ustar wouterwouter# #-- 02-unittest.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." get_make (cd $PRE ; $MAKE unittest; $MAKE lock-verify) if test -f $PRE/unbound_do_valgrind_in_test; then do_valgrind=yes else do_valgrind=no fi VALGRIND_FLAGS="--leak-check=full --show-leak-kinds=all" if test $do_valgrind = "yes"; then echo "valgrind yes" echo tmpout=/tmp/tmpout.$$ if (cd $PRE; valgrind $VALGRIND_FLAGS ./unittest >$tmpout 2>&1); then echo "unit test worked." else echo "unit test failed." exit 1 fi if grep "All heap blocks were freed -- no leaks are possible" $tmpout; then : # clean else cat $tmpout echo "Memory leaked in unittest" grep "in use at exit" $tmpout exit 1 fi if grep "ERROR SUMMARY: 0 errors from 0 contexts" $tmpout; then : # clean else cat $tmpout echo "Errors in unittest" grep "ERROR SUMMARY" $tmpout exit 1 fi rm -f $tmpout else # without valgrind if (cd $PRE; ./unittest); then echo "unit test worked." else echo "unit test failed." exit 1 fi fi if test -f $PRE/ublocktrace.0; then if (cd $PRE; ./lock-verify ublocktrace.*); then echo "lock-verify test worked." else echo "lock-verify test failed." exit 1 fi fi exit 0 unbound-1.13.1/testdata/02-unittest.tdir/02-unittest.dsc0000644000175000017500000000037214010434640022342 0ustar wouterwouterBaseName: 02-unittest Version: 1.0 Description: Unit tests. CreationDate: Thu Jan 4 16:32:42 CET 2007 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: Post: Test: 02-unittest.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/test_sigs.ecdsa_p3840000644000175000017500000000146514010434640020301 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ; Test ECDSA P384 signatures from draft-ietf-dnsext-ecdsa-04 ENTRY_BEGIN SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 257 3 14 ( xKYaNhWdGOfJ+nPrL8/arkwf2EY3MDJ+SErKivBVSum1 w/egsXvSADtNJhyem5RCOpgQ6K8X1DRSEkrbYQ+OB+v8 /uX45NBwY8rp65F6Glur8I/mlVNgF6W/qTI37m40 ) ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. 3600 IN A 192.0.2.1 www.example.net. 3600 IN RRSIG A 14 3 3600 ( 20100909102025 20100812102025 10771 example.net. /L5hDKIvGDyI1fcARX3z65qrmPsVz73QD1Mr5CEqOiLP 95hxQouuroGCeZOvzFaxsT8Glr74hbavRKayJNuydCuz WTSSPdz7wnqXL5bdcJzusdnI0RSMROxxwGipWcJm ) ENTRY_END unbound-1.13.1/testdata/subnet_val_positive_client.crpl0000644000175000017500000001456714010434640023031 0ustar wouterwouter; Test subnet option in combination with dnssec ; Client asks for subnet data server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" trust-anchor-signaling: no target-fetch-policy: "0 0 0 0 0" send-client-subnet: 1.2.3.4 max-client-subnet-ipv4: 17 module-config: "subnetcache validator iterator" verbosity: 3 fake-sha1: yes fake-dsa: yes qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with positive response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN HEX_ANSWER_BEGIN; 00 00 01 00 00 01 00 00 ;ID 0 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01 00 00 29 10 00 00 00 80 00 00 0b 00 08 00 07 ; OPC, optlen 00 01 11 00 ; ip4, scope 17, source 0 7f 00 00 ;127.0.0.0/17 HEX_ANSWER_END ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ednsdata REPLY QR RD RA AD NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC99iE9K5y2WNgI0gFvBWaTi9wm6AhUAoUqOpDtG5Zct+Qr9F3mSdnbc6V4= ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCQMyTjn7WWwpwAR1LlVeLpRgZGuQIUCcJDEkwAuzytTDRlYK7nIMwH1CM= ;{id = 2854} ENTRY_END SCENARIO_END unbound-1.13.1/testdata/test_sigs.ed4480000644000175000017500000000141614010434640017270 0ustar wouterwouter; Signature test file ; first entry is a DNSKEY answer, with the DNSKEY rrset used for verification. ; later entries are verified with it. ENTRY_BEGIN SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. IN DNSKEY 256 3 16 zqUQUbOlkWR1cEGLAr/50aOgpFIwyT3juetr4fT9TRIOdEaXK3Pzv6AvA4iNViZ6RAMD2xctd1EA ;{id = 39998 (zsk), size = 456b} ENTRY_END ; entry to test ENTRY_BEGIN SECTION QUESTION www.example.com. IN A SECTION ANSWER mail.example.com. 3600 IN A 1.2.3.5 mail.example.com. 3600 IN RRSIG A 16 3 3600 20180503143630 20180405143630 39998 example.com. 5T6sjxQ2sB9Crcx8hNKDCteUVc0vNpz8slOa58acb4yLP7dBysp/6dVZwl9/gUN+CWUl6QpkcEMAFx2AcgjPhncYzRpeKCNuJBgBBQrb4Fz2Kvqf7r7H4Day6JrWQDvWcMXf8U9r0Eq06hoJ48M52CkA ENTRY_END unbound-1.13.1/testdata/auth_zonefile.rpl0000644000175000017500000000731614010434640020072 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: no ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com $ORIGIN com. example 3600 IN SOA dns.example.de. hostmaster.dns.example.de. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.example.com. 3600 IN NS ns2.example.com. $ORIGIN example.com. www 3600 IN A 1.2.3.4 mail 3600 IN A 1.2.3.5 3600 IN AAAA ::5 ns1 3600 IN A 1.2.3.4 ns2 3600 IN AAAA ::2 $INCLUDE_TEMPFILE example.inc TEMPFILE_END TEMPFILE_CONTENTS example.inc other 7200 IN A 1.2.3.6 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with zonefile ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/autotrust_addpend_2exceed.rpl0000644000175000017500000003221014010434640022355 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with ADDPEND twice and exceeded time ; should work even though not signed with old key at latest time. ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. YHX8pWL0LsJ4HGuEgu/9cFbC+pQnN3QWA50p+Q6ukY+fTALxiBFlaLUXzNqMqxl7CoYU3Ty2LVd8acEoGLwy/g== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. CZUdTyi3yebXMoyhMsna153k+WIiOk3jDPv8ixgwnw4u+ys/EB2UeQF0Laf1nDVziPhsQgu7/DYZQwfpvvpmmQ== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582-REVOKED and 60946 RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. qLKZUJEi3ajSJ4/b7xl0BwhzW6JtjsojpZ+2nUx1PvaeQVoTmyWxjxc2tAmJGcBPqMqzeY470xvyMDvGTOiQCQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55710 example.com. EW2YB+2yNX9LTNDPVwkcGnRTTx38pOiwBaixdwxmDgqWKXLDLM6Kd2Xv9tveS39RnSZ5H1inRXE55q+rL6Re3g== ;{id = 55710} ; wrong keytag: ;example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 55582 example.com. nH/6HauVJI4GGz78UoK/38cOOrEqsYZP0jFzfCC3OyIlclVTjAFvjVPlVMGK7sA5Nw1v20YtFTQkXZgbrRuInQ== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. xKSBZr4vOsEUKlVoNb6SOV69DM7xFOJI4gPFKq5Tv4APIMJ/9G3odoDmNcLCVyYGzhoDik5hciJnZio6UHgzAA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 30899 example.com. TfFGz1kDtkn3ixbKMJvQDZ0uGw/eW+inIiPqQVPQtO2WiocKrnYnzwv/AqwnFvEar70dF15/zffNIF+ipOS5/g== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 60946 example.com. X0Ci//w0czN/J5RvypHGqp56n1tLdapi92ODAqjM7QpZXbSHaJ7wfPG1PZzvdxHUZUVyf8uy2stjg/XoLGHMWA== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; t3 is removed third poll time. ; 21 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${21*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 385 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55710 (ksk), size = 512b} ;;state=4 [ REVOKED ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, the old key is removed from storage STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} FILE_END SCENARIO_END unbound-1.13.1/testdata/pylib.tdir/0000755000175000017500000000000014010434640016570 5ustar wouterwouterunbound-1.13.1/testdata/pylib.tdir/pylib.post0000644000175000017500000000066214010434640020622 0ustar wouterwouter# #-- pylib.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh # if no python; exit if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then echo "have pyunbound" else echo "no pyunbound" exit 0 fi # kill fwder kill_pid $FWD_PID unbound-1.13.1/testdata/pylib.tdir/pylib.test0000644000175000017500000000312014010434640020604 0ustar wouterwouter# #-- pylib.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then echo "have pyunbound" else echo "no pyunbound" exit 0 fi if test "`uname 2>&1`" = "Darwin"; then echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:../../.libs" export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:../../.libs" fi #echo export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:../../.libs:." #export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:../../.libs:." if grep "PY_MAJOR_VERSION=3" $PRE/Makefile; then PYTHON="python3"; else PYTHON="python2"; fi if test ! -x `which $PYTHON` 2>&1; then PYTHON="python"; fi # do the test echo "> pylib.lookup.py www.example.com." $PYTHON pylib.lookup.py www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log echo "> check answer" if grep "Resolve: \[.\?10.20.30.40.\?\]" outfile; then : else echo "Not OK (resolve)" exit 1 fi if grep "Async resolve: \[.\?10.20.30.40.\?\]" outfile; then : else echo "Not OK (async resolve)" exit 1 fi if grep "Ratelimit-fg-on: pass" outfile; then : else echo "Not OK (ratelimit-fg-on)" exit 1 fi if grep "Ratelimit-fg-off: \[.\?10.20.30.40.\?\]" outfile; then : else echo "Not OK (ratelimit-fg-off)" exit 1 fi if grep "Ratelimit-bg-on: pass" outfile; then : else echo "Not OK (ratelimit-bg-on)" exit 1 fi if grep "Ratelimit-bg-off: \[.\?10.20.30.40.\?\]" outfile; then : else echo "Not OK (ratelimit-bg-off)" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/pylib.tdir/pylib.pre0000644000175000017500000000173414010434640020424 0ustar wouterwouter# #-- pylib.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # if no python; exit if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then echo "have pyunbound" else echo "no pyunbound" exit 0 fi # Copy the required libraries cp $PRE/libunbound/python/unbound.py . cp $PRE/.libs/_unbound* . cp $PRE/.libs/libunbound* . get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT pylib.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # modify config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < pylib.lookup.conf > ub.lookup.conf cat .tpkg.var.test wait_ldns_testns_up fwd.log unbound-1.13.1/testdata/pylib.tdir/pylib.dsc0000644000175000017500000000043314010434640020402 0ustar wouterwouterBaseName: pylib Version: 1.0 Description: Test python wrapper for libunbound CreationDate: Mon Apr 6 12:33:31 CEST 2009 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: pylib.pre Post: pylib.post Test: pylib.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/pylib.tdir/pylib.lookup.conf0000644000175000017500000000035414010434640022070 0ustar wouterwouterserver: verbosity: 2 use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no module-config: "validator iterator" stub-zone: name: "example.com." stub-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/pylib.tdir/pylib.testns0000644000175000017500000000031014010434640021143 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/pylib.tdir/pylib.lookup.py0000755000175000017500000000736414010434640021606 0ustar wouterwouter#!/usr/bin/env python # # Test for pyunbound lookup. # BSD licensed. # import sys import time import unbound qname = "www.example.com" qtype = unbound.RR_TYPE_A qclass = unbound.RR_CLASS_IN def create_context(config_file="ub.lookup.conf", asyncflag=False): """ Create an unbound context to use for testing. """ ctx = unbound.ub_ctx() status = ctx.config(config_file) if status != 0: print("read config failed with status: {}".format(status)) sys.exit(1) ctx.set_async(asyncflag) return ctx def callback(data, status, result): """ Callback for background workers. """ if status == 0: data['rcode'] = result.rcode data['secure'] = result.secure if result.havedata: data['data'] = result.data data['was_ratelimited'] = result.was_ratelimited data['done'] = True def test_resolve(ctx): """ Test resolving a domain with a foreground worker. """ status, result = ctx.resolve(qname, qtype, qclass) if status == 0 and result.havedata: print("Resolve: {}".format(result.data.address_list)) else: print("Failed resolve with: {}".format(status)) def test_async_resolve(ctx): """ Test resolving a domain with a background worker. """ cb_data = dict(done=False) retval, async_id = ctx.resolve_async(qname, cb_data, callback, qtype, qclass) while retval == 0 and not cb_data['done']: time.sleep(0.1) retval = ctx.process() if cb_data.get('data'): print("Async resolve: {}".format(cb_data['data'].address_list)) else: print("Failed async resolve with: {}".format(retval)) def test_ratelimit_fg_on(ctx): """ Test resolving a ratelimited domain with a foreground worker. """ ctx.set_option("ratelimit:", "1") ctx.set_option("ratelimit-factor:", "0") status, result = ctx.resolve(qname, qtype, qclass) if status == 0 and result.was_ratelimited: print("Ratelimit-fg-on: pass") else: print("Failed ratelimit-fg-on with: {}".format(status)) def test_ratelimit_fg_off(ctx): """ Test resolving a non-ratelimited domain with a foreground worker. """ status, result = ctx.resolve(qname, qtype, qclass) if status == 0 and result.havedata: print("Ratelimit-fg-off: {}".format(result.data.address_list)) else: print("Failed ratelimit-fg-off with: {}".format(status)) def test_ratelimit_bg_on(ctx): """ Test resolving a ratelimited domain with a background worker. """ ctx.set_option("ratelimit:", "1") ctx.set_option("ratelimit-factor:", "0") cb_data = dict(done=False) retval, async_id = ctx.resolve_async(qname, cb_data, callback, qtype, qclass) while retval == 0 and not cb_data['done']: time.sleep(0.1) retval = ctx.process() if cb_data.get('was_ratelimited'): print("Ratelimit-bg-on: pass") else: print("Failed ratelimit-bg-on with: {}".format(status)) def test_ratelimit_bg_off(ctx): """ Test resolving a non-ratelimited domain with a background worker. """ cb_data = dict(done=False) retval, async_id = ctx.resolve_async(qname, cb_data, callback, qtype, qclass) while retval == 0 and not cb_data['done']: time.sleep(0.1) retval = ctx.process() if cb_data.get('data'): print("Ratelimit-bg-off: {}".format(cb_data['data'].address_list)) else: print("Failed ratelimit-bg-off with: {}".format(status)) test_resolve(create_context()) test_async_resolve(create_context(asyncflag=True)) test_ratelimit_fg_on(create_context()) test_ratelimit_fg_off(create_context()) test_ratelimit_bg_on(create_context(asyncflag=True)) test_ratelimit_bg_off(create_context(asyncflag=True)) sys.exit(0) unbound-1.13.1/testdata/local_transparent_sametype.rpl0000644000175000017500000000263714010434640022661 0ustar wouterwouter; config options ; The island of trust is at example.com server: local-zone: "example.com." transparent local-data: "mail.example.com. IN A 10.20.30.40" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test local data with transparent zone queried for types ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION mail.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY . IN SOA invalid. invalid. 1 2 3 4 5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION mail.example.com. IN A ENTRY_END ; get straight answer from localdata STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA DO NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.40 SECTION AUTHORITY ENTRY_END STEP 20 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION mail.example.com. IN AAAA ENTRY_END ; must be NOERROR/NODATA because of A record, not NXDOMAIN from internet. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA DO NOERROR SECTION QUESTION mail.example.com. IN AAAA SECTION ANSWER SECTION AUTHORITY ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_pcnamechrec.rpl0000644000175000017500000001706314010434640020531 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no rrset-roundrobin: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with parent child differ with pc child name. ; child has extra name and it has to be used once the other one stops working. ; the extra child name has parent-child trouble and needs its parent version. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; e.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.12.94.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS e.gtld-servers.net. SECTION ADDITIONAL e.gtld-servers.net. IN A 192.12.94.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.55 ENTRY_END RANGE_END ; the working version, until time 49. RANGE_BEGIN 0 49 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.44 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; Broken. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 49 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END RANGE_BEGIN 50 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END RANGE_BEGIN 50 100 ADDRESS 1.2.3.55 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION ANSWER ns.example.com. IN A 1.2.3.44 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END ; server stops working. STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. IN NS ns.example.net. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/ssl_req_order.tdir/0000755000175000017500000000000014010434640020314 5ustar wouterwouterunbound-1.13.1/testdata/ssl_req_order.tdir/ssl_req_order.pre0000644000175000017500000000162414010434640023672 0ustar wouterwouter# #-- ssl_req_order.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT ssl_req_order.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < ssl_req_order.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/ssl_req_order.tdir/ssl_req_order.conf0000644000175000017500000000106314010434640024026 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no ssl-port: @PORT@ ssl-service-key: "unbound_server.key" ssl-service-pem: "unbound_server.pem" local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" tcp-upstream: yes local-zone: "drop.net" deny forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/ssl_req_order.tdir/ssl_req_order.testns0000644000175000017500000000233614010434640024425 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END ; lots of noerror/nodata answers for other queries (a.. queries) ENTRY_BEGIN MATCH opcode qtype subdomain REPLY QR AA NOERROR ADJUST copy_id copy_query SECTION QUESTION a.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns hostmaster 2019 28800 7200 604800 3600 ENTRY_END unbound-1.13.1/testdata/ssl_req_order.tdir/unbound_server.key0000644000175000017500000000463314010434640024074 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/ssl_req_order.tdir/ssl_req_order.post0000644000175000017500000000051214010434640024064 0ustar wouterwouter# #-- ssl_req_order.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log cat fwd.log unbound-1.13.1/testdata/ssl_req_order.tdir/unbound_server.pem0000644000175000017500000000246614010434640024067 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/ssl_req_order.tdir/ssl_req_order.dsc0000644000175000017500000000046614010434640023660 0ustar wouterwouterBaseName: ssl_req_order Version: 1.0 Description: Test ssl request order processing. CreationDate: Mon Jan 21 14:11:00 CET 2018 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: ssl_req_order.pre Post: ssl_req_order.post Test: ssl_req_order.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/ssl_req_order.tdir/ssl_req_order.test0000644000175000017500000002502714010434640024066 0ustar wouterwouter# #-- ssl_req_order.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # this test query should just work (server is up) echo "> query www1.example.net." $PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # multiple requests (from localdata) echo "> query www1.example.net. www2.example.net. www3.example.net." $PRE/streamtcp -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www2.example.net A IN www3.example.net A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www2.example.com. www3.example.net." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www2.example.com. A IN www3.example.net A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.com" outfile | grep "10.20.30.42"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www.example.com. www2.example.net. www.example.com. www3.example.net." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www.example.com. A IN www2.example.net A IN www.example.com. A IN www3.example.net A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www.example.com" outfile | grep "10.20.30.40"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi # out of order requests, the example.com elements take 2 seconds to wait. # www3.example.com present twice, answered twice. echo "" echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.com" outfile | grep "10.20.30.43"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query www4.example.com. www3.example.net." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN www3.example.net A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www4.example.com" outfile | grep "10.20.30.44"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "" echo "> query a1.example.com. - a100.example.com." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN a1.a.example.com. A IN a2.a.example.com. A IN a3.a.example.com. A IN a4.a.example.com. A IN a5.a.example.com. A IN a6.a.example.com. A IN a7.a.example.com. A IN a8.a.example.com. A IN a9.a.example.com. A IN a10.a.example.com. A IN a11.a.example.com. A IN a12.a.example.com. A IN a13.a.example.com. A IN a14.a.example.com. A IN a15.a.example.com. A IN a16.a.example.com. A IN a17.a.example.com. A IN a18.a.example.com. A IN a19.a.example.com. A IN a20.a.example.com. A IN a21.a.example.com. A IN a22.a.example.com. A IN a23.a.example.com. A IN a24.a.example.com. A IN a25.a.example.com. A IN a26.a.example.com. A IN a27.a.example.com. A IN a28.a.example.com. A IN a29.a.example.com. A IN a30.a.example.com. A IN a31.a.example.com. A IN a32.a.example.com. A IN a33.a.example.com. A IN a34.a.example.com. A IN a35.a.example.com. A IN a36.a.example.com. A IN a37.a.example.com. A IN a38.a.example.com. A IN a39.a.example.com. A IN a40.a.example.com. A IN a41.a.example.com. A IN a42.a.example.com. A IN a43.a.example.com. A IN a44.a.example.com. A IN a45.a.example.com. A IN a46.a.example.com. A IN a47.a.example.com. A IN a48.a.example.com. A IN a49.a.example.com. A IN a50.a.example.com. A IN a51.a.example.com. A IN a52.a.example.com. A IN a53.a.example.com. A IN a54.a.example.com. A IN a55.a.example.com. A IN a56.a.example.com. A IN a57.a.example.com. A IN a58.a.example.com. A IN a59.a.example.com. A IN a60.a.example.com. A IN a61.a.example.com. A IN a62.a.example.com. A IN a63.a.example.com. A IN a64.a.example.com. A IN a65.a.example.com. A IN a66.a.example.com. A IN a67.a.example.com. A IN a68.a.example.com. A IN a69.a.example.com. A IN a70.a.example.com. A IN a71.a.example.com. A IN a72.a.example.com. A IN a73.a.example.com. A IN a74.a.example.com. A IN a75.a.example.com. A IN a76.a.example.com. A IN a77.a.example.com. A IN a78.a.example.com. A IN a79.a.example.com. A IN a80.a.example.com. A IN a81.a.example.com. A IN a82.a.example.com. A IN a83.a.example.com. A IN a84.a.example.com. A IN a85.a.example.com. A IN a86.a.example.com. A IN a87.a.example.com. A IN a88.a.example.com. A IN a89.a.example.com. A IN a90.a.example.com. A IN a91.a.example.com. A IN a92.a.example.com. A IN a93.a.example.com. A IN a94.a.example.com. A IN a95.a.example.com. A IN a96.a.example.com. A IN a97.a.example.com. A IN a98.a.example.com. A IN a99.a.example.com. A IN a100.a.example.com. A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi grep "a.example.com. IN A" outfile echo "" echo "> query www5.example.net. www3.example.net. www.drop.net." $PRE/streamtcp -a -s -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN www3.example.net A IN www.drop.net A IN >outfile 2>outerr cat outfile cat outerr if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat outerr cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/test_ldnsrr.10000644000175000017500000140450114010434640017142 0ustar wouterwouter; . AXFR . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2014013100 1800 900 604800 86400 . 86400 IN RRSIG SOA 8 0 86400 20140207000000 20140130230000 33655 . R46KUKoHumqdDxS0HuplzEsqyRMb7z5FH89rZjE0187pJe7i0RKXJ+Pn ttQwz8xWI0DvNjBvqYWz3qka9qku56nZbc4zOrZH7X9sHcYbCyrK3Tq7 zZdpVTnswxY92BolUvEX/uY6kI8uq4RNR7XPyW+DgWwOqto1lwsvkaxe lVc= . 518400 IN RRSIG NS 8 0 518400 20140207000000 20140130230000 33655 . CNnn/d9jDo2o5Kyvj2JIEpF18r0Zk9bCPyZMRZR42o70RR7W8zgzrNvX eHYsfHvVGJPgMwgnvazFLXm5dJ+XZZCPUAvxHtdsupUb35ChADt/ycU6 kj2ojV8QGhVYsfIpmk1Riah1OQVpc6NP77Ufwzy+lJSH628MLeEvgCPB OjM= . 172800 IN RRSIG DNSKEY 8 0 172800 20140214235959 20140131000000 19036 . Ce153ygJ06VY8loC4NXdyBnuZeBMm5I9Ah9s5INZnjHklpvM1HHrB2wR xMt51rB+Iv+4lfEjygoSAAKbQGTA6n3mMKt6WofaPZwSeVegOAjHSJTO W2wx8W5fwA3RZCOUE5xtg1TBrmM/vXip2o5uZI7ac3MZvKCoTfY4h4Si 3aoRa5U47tpFfFR7lQtStkWS/tEeK/yAWKs1t2SV+12tpkG8IRftk8FH OerDIAenpJZ8KTEp5Zgt7DckYhi7eSXjH+Dd9S8Tc14g93I+0a1+BcpV zYNl4IKHJ5vkuUCj6WGTdFEFhqQud2HaxFcHR2nq13gG54dbZdBz5fjr R4rprQ== . 86400 IN RRSIG NSEC 8 0 86400 20140207000000 20140130230000 33655 . ktL/fHzA1B4cB3Kfa1jl24/J2o04X6hBcmk5acFuLXI87UDxu6UT9Aee 6hMkiZ1hzy8B37Vowoj/Yy9jmkkFo1NCCrmT0N5bsBCWKt5WflwMSH8/ kbcqFDutig3lTpZkkNM88IWVyxKHoYXjZgrscor2J05+6EdfpIknMsMX /nA= . 518400 IN NS a.root-servers.net. . 518400 IN NS b.root-servers.net. . 518400 IN NS c.root-servers.net. . 518400 IN NS d.root-servers.net. . 518400 IN NS e.root-servers.net. . 518400 IN NS f.root-servers.net. . 518400 IN NS g.root-servers.net. . 518400 IN NS h.root-servers.net. . 518400 IN NS i.root-servers.net. . 518400 IN NS j.root-servers.net. . 518400 IN NS k.root-servers.net. . 518400 IN NS l.root-servers.net. . 518400 IN NS m.root-servers.net. . 172800 IN DNSKEY 256 3 8 AwEAAb8sU6pbYMWRbkRnEuEZw9NSir707TkOcF+UL1XiK4NDJOvXRyX1 95Am5dQ7bRnnuySZ3daf37vvjUUhuIWUAQ4stht8nJfYxVQXDYjSpGH5 I6Hf/0CZEoNP6cNvrQ7AFmKkmv00xWExKQjbvnRPI4bqpMwtHVzn6Wyb BZ6kuqED . 172800 IN DNSKEY 257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0= . 86400 IN NSEC ac. NS SOA RRSIG NSEC DNSKEY ac. 172800 IN NS a.nic.ac. ac. 172800 IN NS a.ns13.net. ac. 172800 IN NS b.nic.ac. ac. 172800 IN NS b.nic.io. ac. 172800 IN NS b.ns13.net. ac. 172800 IN NS ns1.communitydns.net. ac. 172800 IN NS ns3.icb.co.uk. ac. 86400 IN DS 14403 7 1 3884DE2E920F38E01B659CC5F37B6749BB0DC818 ac. 86400 IN DS 14403 7 2 584BCEE9B917FC92AFBDD0FC8AF12AB31B3A7B0754894688DA3C57F5 CA7D8E56 ac. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nMH0nUZDmZfqtgnWE4r5bWNspd3+ZTXLERVTPeg+9gSAoF51XXOiOF03 90sN+JTzr5vX+RGVhVQuXgpfrE8V7X02SPRcZzcH/Q2aP4MEQidOD7cM UIn3gxfUnvf0Mi+OHKzhWBaYXUvthI30GagTTVJNCxqA1J1xTkX/EzFc 4AI= ac. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iEHeweIksxnEwhI7p7WJKYnAAoPjpkSZ0fxDTjvZIpiTH4lqrI0BrA3o LJVJRqjdtm6rJfoZiDMir9nhd8EBrLbD1M+7EGlQuou5IcdEjBSy7aXW UcxXeKjk6LOWBT1mFRlXVnlzXgQu/zYmKn8eSuJHHEohJ91JTJFQ2bQi J4U= ac. 86400 IN NSEC academy. NS DS RRSIG NSEC a.nic.ac. 172800 IN A 64.251.31.177 b.nic.ac. 172800 IN A 78.104.145.37 academy. 172800 IN NS demand.beta.aridns.net.au. academy. 172800 IN NS demand.alpha.aridns.net.au. academy. 172800 IN NS demand.delta.aridns.net.au. academy. 172800 IN NS demand.gamma.aridns.net.au. academy. 86400 IN DS 47032 8 2 E2A2DAE3CC55E8CE27E9AEA6217BDA4A835BF2270C40749AD278E9A9 B4ABA132 academy. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Q37SOwEmghU1whWY/rUH7g87gK3Di8zI2n87qMNalanPupLq3Q+bTMBF b/yFPCISK/Ti/SwkSX7pRnsj/JsJTW8PJStbAnBEWaBcHpkAwZx+z8YE YkgpjNObtHhkOBbCYF/eiENGdj6mkPBFuHVIHNjDJvdFWXTIeXvzqP4x L3s= academy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jZH8Ss+jfsn0MU9Z/LcTb2N6qD8VwtViFBL5zqrXfA7ARdR70UdcGEVv QAAivLUDLNWU1djcJrA7RHUehxd2ldYFYJzywm5wawFJDKyjejMbU2Lg uECsdXg+8hsNURlLFEUxhSkItPF6Iio0cPVKyoKZEdZ9sr+bePwfpjk2 zoY= academy. 86400 IN NSEC ad. NS DS RRSIG NSEC ad. 172800 IN NS ad.ns.nic.es. ad. 172800 IN NS ad.cctld.authdns.ripe.net. ad. 172800 IN NS ns3.nic.fr. ad. 172800 IN NS dnsc.ad. ad. 172800 IN NS dnsm.ad. ad. 172800 IN NS ns-ext.isc.org. ad. 86400 IN NSEC ae. NS RRSIG NSEC ad. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iT4UWXR9tl8m44pp4aHeSm7PO/WcagRLC8y0gxmf/QTK1LNghVHeAj0q 1XV5MQ2Kp/A13md8KQ4m4LzwnMyEta9doUAMzLjZe17Gx3dJaDVlZgz1 XhMQ5fEFkCSNJi9tZgnpYINgjDxVAPRyQeufLFvdhL6isWENURnKMTbO mPw= dnsc.ad. 172800 IN A 194.158.74.10 dnsc.ad. 172800 IN AAAA 2a02:8060:32fa::b dnsm.ad. 172800 IN A 194.158.74.9 dnsm.ad. 172800 IN AAAA 2a02:8060:32fa::a ae. 86400 IN NSEC aero. NS RRSIG NSEC ae. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ck48kHhaJnirFVz7gn9HeCayZS+bbH9cI5ewdBRnfTunsEgSoXugsEdK wQxM6zA+FdjtYB9ithdRJXQlLmekHRrPrzfkDsc7SKhtdz0lKo6pGIom d7Hsvv+ZVqih4gbYtvYe35XIjN2YevvM1KEMBNfbJx5oXqZgP9bD49T1 IkU= ae. 172800 IN NS ae.cctld.authdns.ripe.net. ae. 172800 IN NS ns1.aedns.ae. ae. 172800 IN NS ns2.aedns.ae. ae. 172800 IN NS sec3.apnic.net. ae. 172800 IN NS sns-pb.isc.org. ae. 172800 IN NS nsext-pch.aedns.ae. ns1.aedns.ae. 172800 IN A 79.98.120.73 ns2.aedns.ae. 172800 IN A 79.98.121.73 nsext-pch.aedns.ae. 172800 IN A 199.4.137.1 nsext-pch.aedns.ae. 172800 IN AAAA 2001:500:7d::1 ns1.uaenic.ae. 172800 IN A 213.42.0.226 ns2.uaenic.ae. 172800 IN A 195.229.0.186 aero. 172800 IN NS a0.aero.afilias-nst.info. aero. 172800 IN NS a2.aero.afilias-nst.info. aero. 172800 IN NS b0.aero.afilias-nst.org. aero. 172800 IN NS b2.aero.afilias-nst.org. aero. 172800 IN NS c0.aero.afilias-nst.info. aero. 172800 IN NS d0.aero.afilias-nst.org. aero. 172800 IN NS ns2.switch.ch. aero. 172800 IN NS ns5.knipp.de. aero. 172800 IN NS dns7.denic.de. aero. 86400 IN NSEC af. NS RRSIG NSEC aero. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S0/wTqAOd4pUq7wM7er2BM/ioI+K/OlKyObxspUrjQBc22s7fouDr6LR qAujeYNdrFjoQe/Yx0wBfkbEX/KmzWfSEAgNBShf7A339xCLG56AcZhH cMemo+kwd5wY0rSAOCLpRMUjH0RC7Yzw8RX5m1I2m8EwOffdtNxfdT/u 76c= af. 172800 IN NS ns.anycast.nic.af. af. 172800 IN NS af1.dyntld.net. af. 172800 IN NS af3.dyntld.net. af. 86400 IN DS 3691 8 2 56C77864A2CD726F252634C8804A2AF33EA2CE70C49091E08C223BD2 BB33CF5C af. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dnM3K8H/xeZv5QiWKMtFemz0I18HwhZfdpCr/43PSxsPDlm1haDGCzV5 Vr9zFqbW4GWSSnFWbA6SifSzsq9reXdAyJB7Yig2y8X+8T7pEnPzIIuj OjxPVgBMmORl0yXPPaaxvj9Zyig+v0X496tspOI6Qtj7oY/pSFaBM/ha tEA= af. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . gfrYJjr3qmhkgqEPSawELqwDUxE06oTeqF1ZrSUb9zP8zgo0xowHxaGJ JdIiXdLRZJo+vkwWr7/EyRauSHV1yvOke3gaogODl9T0fZyIlBqflE4w Mh875n4FyfCp3PrkZTBjjUK8Ui+u8zHf6/p7yhI5nWWwN/TjfmgLF8qa MDE= af. 86400 IN NSEC ag. NS DS RRSIG NSEC ns.anycast.nic.af. 172800 IN A 204.61.216.13 ns.anycast.nic.af. 172800 IN AAAA 2001:500:14:6013:ad::1 ag. 172800 IN NS a0.cctld.afilias-nst.info. ag. 172800 IN NS a2.cctld.afilias-nst.info. ag. 172800 IN NS b0.cctld.afilias-nst.org. ag. 172800 IN NS b2.cctld.afilias-nst.org. ag. 172800 IN NS c0.cctld.afilias-nst.info. ag. 172800 IN NS d0.cctld.afilias-nst.org. ag. 86400 IN DS 55656 7 1 57F9FF89CE3A02AE33EC017A7C83ED54D925AA13 ag. 86400 IN DS 55656 7 2 B8DC00C070D5BFC5C1C3BA08E5205A1E7F15EABFBFD6359D11E0E62D 2FFFA57F ag. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MjpsJKLV6UEmpuIMYd455caAq6y2rgq8sQgwrqoBJEqrZdwCAJtS74+l vOFesW2QhEjmez/LU+Mo0E887IFRF+QsEvwwvXb2OVyWjWZunHkxBFkv D07YvgYmTBpQQM8jRViVBRyp1K2svYjf/UDMe0y5QwAgSOk0h5zweP61 It4= ag. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rxSnp+qS9PdXHUW3rrOZNDIlvDACfYZjMVvZUYMyhnCueP7ts2X0UEjL zgzn6C8ofgtMUTaqpD1QZ1NNrO0yUQdIAVhLN+athtXnpcapCMya5zYQ qZbIZoiVhlcsvZjzasSUvKRnvqNb1UJs+u9MxiziCEs0zuo8363SeZ6l IjM= ag. 86400 IN NSEC agency. NS DS RRSIG NSEC agency. 172800 IN NS demand.beta.aridns.net.au. agency. 172800 IN NS demand.alpha.aridns.net.au. agency. 172800 IN NS demand.delta.aridns.net.au. agency. 172800 IN NS demand.gamma.aridns.net.au. agency. 86400 IN DS 43582 8 2 50CC5CB5EC1AFFF1E70ED524F6DDD4F7978D15B4041FA7C5E5F85434 3967DDCF agency. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . q9dIDW55+udO6+hcMJkLeyMjm7niUCPYbstULtHbv/acjiV5P2aXr/8g occfSUqAjPp/1H6F6rwI1O9lla9w2aGeYvLpfxK7MRCGMZz1ZSv7qizw P9OI1TE7OgUN+gzWTZoyoX2uEwBSbXLFQ8MyqlwaIMrrpezvGdJkq+1Y P2Y= agency. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sHxELSpQj6tF6tpzTGnlyx+FpWJFovpKmxQImvZWlk1r6Emn/2fd0DdL iLdtsTOIdMi7vFbH1yDjMAZ3ml7iCEMd5s8/Rz+muuc5wdlYlDn9yaEU BEURzHpdbQEFYSbBM7g+rZuZows1/fS4/gXOUmFRzZ1Szvb0t7pgBhF5 5uk= agency. 86400 IN NSEC ai. NS DS RRSIG NSEC ai. 172800 IN NS ns1.pair.com. ai. 172800 IN NS ns2.offshore.ai. ai. 172800 IN NS whois.ai. ai. 86400 IN NSEC al. NS RRSIG NSEC ai. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VOZpwj25ZbdkLYLJEcYil1zQCHBxiB56H/w0suGgqrXbXxrEQ70DdMHH zwQdXe45VStqtFI5lZLWmzS8QzvdwZj+fTXNYRuHyjRx3lXvEpPKMd1F knLq1xk/+4Rq4SSQpk6Hk1ivp8bDWyYURkcVXPWq7VoPItq0FJlW1Tbb Z+I= ns2.offshore.ai. 172800 IN A 108.166.113.245 whois.ai. 172800 IN A 209.59.119.1 al. 172800 IN NS al.cctld.authdns.ripe.net. al. 172800 IN NS ns1.nic.al. al. 172800 IN NS rip.psg.com. al. 172800 IN NS ns-al.isti.cnr.it. al. 172800 IN NS munnari.oz.au. al. 86400 IN NSEC am. NS RRSIG NSEC al. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rgSmY5UIqAwfssVkMzjT1yUJZNp61zkjNByHGZb4JVWdUK/gjKLDcYNI kw8o/tSWHhT7YXTFYPjWgdrb23QU/xAoXsHG6d0GGjO2NRRRuqGTdfYV kRdeUwhya3dl8bh5MeyiDgXviAPlel1hyW50UTFlohGtU2LpmJoKpBDt AQ4= ns1.nic.al. 172800 IN A 194.1.149.230 am. 172800 IN NS am.cctld.authdns.ripe.net. am. 172800 IN NS rip.psg.com. am. 172800 IN NS fork.sth.dnsnode.net. am. 172800 IN NS ns-cdn.amnic.net. am. 172800 IN NS ns-pri.amnic.net. am. 172800 IN NS sns-pb.isc.org. am. 86400 IN DS 51141 7 2 F14D6ACFC410DE94D18F63A7EDC2779DE70C1D5E9AF0E0EFB4687CC3 522E7F4F am. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . F8M3qcX+1wL4rsvIZ4MTOkQ+u4z1C4jn/MOscUQhGesVJZb/NK2RS8DE fLwPVLFlKX2cf8gNPcf1CnZjr0NM0eW7m45k3vGBDXroYTgevAIOYx02 UYT7IiYGts0CagC06wMfML78Sv2oMvsso9f635gqzaBm0u2uADGqUczj d44= am. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . q3mnzdE6VzkoQFs5QTk5G18P8ZD+eouZWK/oYq4sKSB1efW4FmTFhM58 ggoP8Z+CVYhaW0bQUIkbmcLFw3EnyEbyIakJRlBK8QLHIAJiSktTaWRE ZuymerHYd5ZkR0uigNmOf1nwSnabpUYDYwHyIXWq6YqctAhGUV2Xilsy 24c= am. 86400 IN NSEC an. NS DS RRSIG NSEC an. 172800 IN NS an.cctld.authdns.ripe.net. an. 172800 IN NS ns0.ja.net. an. 172800 IN NS engine0.una.an. an. 172800 IN NS engine2.una.an. an. 172800 IN NS engine3.una.an. an. 172800 IN NS kadushi.curinfo.an. an. 172800 IN NS ns01-server.curinfo.an. an. 86400 IN NSEC ao. NS RRSIG NSEC an. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FNLWwcBZNVPDsL+71vqsO9M0/VITCrDXrQXFauIgqayU+e6REVL4JrzG xBnzSgwZKOqDrKVH6c0z5OR/jDBzuF6bAevaw3V2BMAzM1MVtY9Ap6Vs YJP6vregovXeOnzEnxMCjQjG4oqhfSHXpJCeT8+dIWl15NFBRVDsBYvJ zZk= kadushi.curinfo.an. 172800 IN A 65.208.122.63 ns01-server.curinfo.an. 172800 IN A 65.208.122.36 engine0.una.an. 172800 IN A 200.26.199.99 engine2.una.an. 172800 IN A 65.174.238.100 engine3.una.an. 172800 IN A 200.26.199.102 ao. 172800 IN NS ns02.dns.ao. ao. 172800 IN NS ns02.fccn.pt. ao. 172800 IN NS ns03.fccn.pt. ao. 172800 IN NS auth02.ns.uu.net. ao. 172800 IN NS ns-ext.isc.org. ao. 172800 IN NS phobos.fccn.pt. ao. 86400 IN NSEC aq. NS RRSIG NSEC ao. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VmhWJLDqfzbteT40KG5P4nynBXPBsFEagUN+M1SUKfCA9GCrqhn1bTvy TdLgi5lOxJWQQdUyG36rQGoNJDXH3wMdQB/WNN1uXE4KCNe21w5L7Eps UkF1fQ8eK0x/dEVrQrNl9so4LFWG2HVsXdYNzh8wzdnMGJXfY+ShoocP QGM= ns02.dns.ao. 172800 IN A 197.149.149.11 ns02.dns.ao. 172800 IN AAAA 2c0f:f828:2::b aq. 172800 IN NS ns1.dns.aq. aq. 172800 IN NS fork.sth.dnsnode.net. aq. 172800 IN NS ns99.dns.net.nz. aq. 172800 IN NS sns-pb.isc.org. aq. 86400 IN NSEC ar. NS RRSIG NSEC aq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WMwSI1kNC1z1OMYb2Ou9keV5Yk/aQU0LryrenWXwkFpYVtsZbmaWsnWG 3MCiXCFEMGY+svoxku269HoFRjjuD0e0bpanV3zYHLiCRXoBK4Kp0uIm EUakvRVXr8JhvBbvhTe3B3EYGcnDXwt0oA/4Ac/xXH+No44AUhtlHcuB jiA= ns1.dns.aq. 172800 IN A 203.119.56.132 ar. 172800 IN NS a.dns.ar. ar. 172800 IN NS ar.cctld.authdns.ripe.net. ar. 172800 IN NS ns2.switch.ch. ar. 172800 IN NS athea.ar. ar. 172800 IN NS ctina.ar. ar. 172800 IN NS relay1.mecon.gov.ar. ar. 86400 IN NSEC arpa. NS RRSIG NSEC ar. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kyJWfVOj/hkW58piEAwE5RvRiROjePJ36u0eAXBFSu6fi101yJ4ErxGF WRRBQmyfku0VFPjMTRQztapSzX/o4owkmjSQJHwNCv2PGHjtuM+fB23Z 4lueJKY8YkNXiEZUQP54BrG0l0FnFGaG7yDgFKA0/8Z09gU9vDICHVTm jns= athea.ar. 172800 IN A 200.16.98.2 ctina.ar. 172800 IN A 200.16.97.17 a.dns.ar. 172800 IN A 200.108.145.50 a.dns.ar. 172800 IN AAAA 2801:140::10 relay1.mecon.gov.ar. 172800 IN A 168.101.16.10 arpa. 172800 IN NS a.root-servers.net. arpa. 172800 IN NS b.root-servers.net. arpa. 172800 IN NS c.root-servers.net. arpa. 172800 IN NS d.root-servers.net. arpa. 172800 IN NS e.root-servers.net. arpa. 172800 IN NS f.root-servers.net. arpa. 172800 IN NS g.root-servers.net. arpa. 172800 IN NS h.root-servers.net. arpa. 172800 IN NS i.root-servers.net. arpa. 172800 IN NS k.root-servers.net. arpa. 172800 IN NS l.root-servers.net. arpa. 172800 IN NS m.root-servers.net. arpa. 86400 IN DS 42581 8 1 778606D9623F843F156E7D11ACBF815EB67AB516 arpa. 86400 IN DS 42581 8 2 F28391C1ED4DC0F151EDD251A3103DCE0B9A5A251ACF6E24073771D7 1F3C40F9 arpa. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . li6CJWJOt81HwZIeV1xMGT6O9Sk50PpuYW7FVySnJFK160Idn1+eRNIw C3i+lmzjmUEL0jUJASGLeF4Gycg4yz0+0j3B9VKYS0ZVyAR+1du8zsPf j7IzkFJhVTBGlrgB2hLA4bbQDvqHrOP28rSs6P6R0gW8dibk22klhiCw wS8= arpa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . g4u1/UMwIOkj4F1/x3fvtN45bHTuz6gg/faV2iQSx3j42smzd4CwWMPx Cb8J/ozeaNswoXLCMVJiiKiJDmHvdD67H3WuYBjvUzWzwBjjUtOj3Ng5 C605EUVUqa+KoxS9JHqtJ4BgHYlOd165OkKIdIQmPCOUsPspCFSLaMem GCQ= arpa. 86400 IN NSEC as. NS DS RRSIG NSEC as. 172800 IN NS tld.gdns.net. as. 172800 IN NS tld1.ultradns.net. as. 172800 IN NS tld2.ultradns.net. as. 172800 IN NS tld3.ultradns.org. as. 172800 IN NS tld4.ultradns.org. as. 172800 IN NS tld5.ultradns.info. as. 172800 IN NS tld6.ultradns.co.uk. as. 86400 IN NSEC asia. NS RRSIG NSEC as. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fySHmUOi3lwV8jha//9TSHV9379wM4t8Brsge/XziGJPmodXGZ7l2PaV 4jEKJwBao17hEL25A1ngjeUcR5QEVR7Zud+DlZzzo1WZLSq7ntQ8qpKa XxR6663SVpy2J0Crp/xIoejPXG45VedsoOvZKQtYUgxJ3uNXR6C1HDmd McI= asia. 172800 IN NS a0.asia.afilias-nst.info. asia. 172800 IN NS a2.asia.afilias-nst.info. asia. 172800 IN NS b0.asia.afilias-nst.asia. asia. 172800 IN NS b2.asia.afilias-nst.org. asia. 172800 IN NS c0.asia.afilias-nst.info. asia. 172800 IN NS d0.asia.afilias-nst.asia. asia. 86400 IN DS 13890 7 1 A33A41F9B31E945CB3379FC36663887038927577 asia. 86400 IN DS 13890 7 2 F7F1B03479CE200A0680158258D1B7925B0A5F273E54E6BDE742D132 14DD99CB asia. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . JvwsRBimyo9fH+vBgx/99UXw/hNVpk+SNKUtoxy4YhpPLVxwjdWIAXzz WLl/6cadK1xerm6XOIDTXDzw+HLbhWFYy6ZLdS33zQavZrGGQe+NPs34 6tsFPT5Vge06LmQZ7IHG4PHexMnaCbhnnRglUJirv4sPID804VbK5aJA SzU= asia. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kYMraDYy5gdDJ35enPNgw7FTYic+eStVaNt/0l+CAHlaHFXMLMtV7QPq YrRYcifTMrDdmqtYoyZk7b3BgVpY5mtbdasKo2rLbRL+kbwzItduQ1VE 9HkqhyzCFSqRc52g6fa4z0BQjoujSJxV2LYjPL5A4pqDPcxIhBfOGca4 MCU= asia. 86400 IN NSEC at. NS DS RRSIG NSEC b0.asia.afilias-nst.asia. 172800 IN A 199.254.28.1 b0.asia.afilias-nst.asia. 172800 IN AAAA 2001:500:16::1 d0.asia.afilias-nst.asia. 172800 IN A 199.254.30.1 d0.asia.afilias-nst.asia. 172800 IN AAAA 2001:500:18::1 at. 86400 IN NSEC au. NS DS RRSIG NSEC at. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cdAqIJBcoJKX1ZpO2RubEXL9wU+qVxWMDhCJu8i+vejwspAVGI8I2ify XcFoqS+GnXWGfumxEztQrhxCaa15/g90/AVNKq611/4TbkTM8YIdw+oF pM1EdVZOLUTs9V9Nkaqa1QFDKxET0DA1xodOiJY3buNNHuHswkYa5U2n v1Y= at. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Nd7Ai0RCgNDW69Ta3uoV5hwqMt/Nx7ACIuRM/D4w3o0pTK+M1x++7HiR EntfZoKRlDi8JzsRnYbu6o9hQh/q2h80lPAe1q+AFpCxhm09xRxb54gh aOmvNl8nd3f9m7u8YPGqNfBlOPPBexYVgSQBmlGIl15ihXG1nLI09T8E NWI= at. 172800 IN NS d.ns.at. at. 172800 IN NS j.ns.at. at. 172800 IN NS n.ns.at. at. 172800 IN NS r.ns.at. at. 172800 IN NS u.ns.at. at. 172800 IN NS ns1.univie.ac.at. at. 172800 IN NS ns2.univie.ac.at. at. 172800 IN NS ns9.univie.ac.at. at. 86400 IN DS 56489 8 2 2E48D4AAE2F5D5022F156516846803A58F3B2F8A854AAD238EC766DE 6AD98AF2 at. 86400 IN DS 60836 8 2 6BB14AC9AB00B37AFE0BB5570048DFD13B16C8BF3512846C627CE560 F026CE39 ns1.univie.ac.at. 172800 IN A 78.104.144.2 ns1.univie.ac.at. 172800 IN AAAA 2001:628:2030:4301::2 ns2.univie.ac.at. 172800 IN A 192.92.125.2 ns2.univie.ac.at. 172800 IN AAAA 2001:678:1c::2 ns5.univie.ac.at. 172800 IN A 193.171.255.77 ns5.univie.ac.at. 172800 IN AAAA 2001:628:453:4305::53 ns9.univie.ac.at. 172800 IN A 194.0.10.100 ns9.univie.ac.at. 172800 IN AAAA 2001:678:d::cafe d.ns.at. 172800 IN A 81.91.161.98 d.ns.at. 172800 IN AAAA 2a02:568:20:1::d j.ns.at. 172800 IN A 194.146.106.50 j.ns.at. 172800 IN AAAA 2001:67c:1010:12::53 n.ns.at. 172800 IN A 81.91.173.130 r.ns.at. 172800 IN A 194.0.25.10 r.ns.at. 172800 IN AAAA 2001:678:20::10 u.ns.at. 172800 IN A 195.66.241.82 au. 86400 IN NSEC aw. NS RRSIG NSEC au. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bWExURHD4x+xDOy2S0d761z78EDPNDaaWyRlx6gXlB5QKkS/HIOlHOuS c8+NNbm8qbwzFwmxfFb8n8mEVlzaitRCJa/Bhx8j677Vd8sIWdlc3PEC 8yKV/4I3fss9mf8Z516OlG2+LpX26dWpwXJrnDSqIEsxOU8AcJVbhbaP O60= au. 172800 IN NS a.au. au. 172800 IN NS b.au. au. 172800 IN NS r.au. au. 172800 IN NS s.au. au. 172800 IN NS u.au. au. 172800 IN NS v.au. au. 172800 IN NS w.au. au. 172800 IN NS x.au. au. 172800 IN NS y.au. au. 172800 IN NS z.au. a.au. 172800 IN A 58.65.254.73 a.au. 172800 IN AAAA 2407:6e00:254:306::73 b.au. 172800 IN A 58.65.253.73 b.au. 172800 IN AAAA 2407:6e00:253:306::73 yarrina.connect.com.au. 172800 IN A 192.189.54.17 cctld.alpha.aridns.net.au. 172800 IN A 37.209.192.6 cctld.alpha.aridns.net.au. 172800 IN AAAA 2001:dcd:1::6 demand.alpha.aridns.net.au. 172800 IN A 37.209.192.7 demand.alpha.aridns.net.au. 172800 IN AAAA 2001:dcd:1::7 cctld.beta.aridns.net.au. 172800 IN A 37.209.194.6 cctld.beta.aridns.net.au. 172800 IN AAAA 2001:dcd:2::6 demand.beta.aridns.net.au. 172800 IN A 37.209.194.7 demand.beta.aridns.net.au. 172800 IN AAAA 2001:dcd:2::7 cctld.delta.aridns.net.au. 172800 IN A 37.209.198.6 cctld.delta.aridns.net.au. 172800 IN AAAA 2001:dcd:4::6 demand.delta.aridns.net.au. 172800 IN A 37.209.198.7 demand.delta.aridns.net.au. 172800 IN AAAA 2001:dcd:4::7 cctld.gamma.aridns.net.au. 172800 IN A 37.209.196.6 cctld.gamma.aridns.net.au. 172800 IN AAAA 2001:dcd:3::6 demand.gamma.aridns.net.au. 172800 IN A 37.209.196.7 demand.gamma.aridns.net.au. 172800 IN AAAA 2001:dcd:3::7 munnari.oz.au. 172800 IN A 202.29.151.3 munnari.oz.au. 172800 IN AAAA 2001:3c8:9007:1::21 munnari.oz.au. 172800 IN AAAA 2001:3c8:9009:181::2 r.au. 172800 IN A 128.32.136.3 r.au. 172800 IN AAAA 2607:f140:ffff:fffe::3 s.au. 172800 IN A 128.32.136.14 s.au. 172800 IN AAAA 2607:f140:ffff:fffe::e u.au. 172800 IN A 211.29.133.32 v.au. 172800 IN A 202.12.31.141 v.au. 172800 IN AAAA 2001:dc0:4001:1:0:1836:0:141 w.au. 172800 IN A 37.209.192.5 w.au. 172800 IN AAAA 2001:dcd:1::5 x.au. 172800 IN A 37.209.194.5 x.au. 172800 IN AAAA 2001:dcd:2::5 y.au. 172800 IN A 37.209.196.5 y.au. 172800 IN AAAA 2001:dcd:3::5 z.au. 172800 IN A 37.209.198.5 z.au. 172800 IN AAAA 2001:dcd:4::5 aw. 172800 IN NS ns1.setarnet.aw. aw. 172800 IN NS ns2.setarnet.aw. aw. 172800 IN NS ns-aw-ext1.sidn.nl. aw. 86400 IN NSEC ax. NS RRSIG NSEC aw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LjZrG8MY8S1y25Z+2CAseuX65N73V0Mmx1zETirT3qg5XS1D8mWYJJZI c7dmXGqHQsM7hkbfra4drwgNMh6nqrFsl1vzYqBy33YHe+Lw21l+LGWS BheDIaC+xkJfwCjbrg9iZyLGrPAR7CAMe0q9goa5W09OGbWNbnY5WCld nyo= ns1.setarnet.aw. 172800 IN A 209.88.128.25 ns2.setarnet.aw. 172800 IN A 209.88.128.26 ax. 172800 IN NS ns1.aalnet.net. ax. 172800 IN NS ns2.aalnet.net. ax. 172800 IN NS ns3.aalnet.net. ax. 86400 IN NSEC az. NS RRSIG NSEC ax. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nZTCQD+pV0cwSE6WlWXjGFDBbVMfhevweiH2+TMXURa6mJRfs8P5JhkO Dn4d4UTiEt3dBEMDNV9Cp8Kf2JikGeN4VuIT/ZQ8tEIlaOJsBBRJl3db vfJesC6Vspp1GDuAlkK8oqsnFpyKUt4tH6TYWfeZdOjuk5MUAG/p40sr ufU= az. 172800 IN NS az.hostmaster.ua. az. 172800 IN NS ns.demos.su. az. 172800 IN NS rip.psg.com. az. 86400 IN NSEC ba. NS RRSIG NSEC az. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HQoomu4z3G2iL1btsd9q4S2OlF2oazUrrn31IE47tG/435QfaVxJtHsJ La9mAoxt34977h/LRFcQ1jJV2AJ0gXvFB8G3VrAkc5AzQn4WCoBjqWyE zEdJnjRsy3fJXbL3ltznsLrQarhs2ditL0MoK9ofAwwIwivHeLyU/uNg des= ba. 172800 IN NS ba.cctld.authdns.ripe.net. ba. 172800 IN NS ns.ba. ba. 172800 IN NS sava.utic.net.ba. ba. 172800 IN NS auth03.ns.uu.net. ba. 172800 IN NS munnari.oz.au. ba. 86400 IN NSEC bargains. NS RRSIG NSEC ba. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VEtQZHLdjoFxE+WVmGjZCssPsVGDpNcZPddZFKv3cWSjDK0VQYDnHYs7 Kdix5NVHCjLfQ+vvkYhtY3Qh9vIBjmDZ0+nxJV7qwp5xTJiGAG/iq7eS g9+rwpCO7dh4CwH3PoHcr+7idyLnsohnGPK2qBz0jWjNKLy8GVat3UXi uHs= sava.utic.net.ba. 172800 IN A 195.130.35.3 ns.ba. 172800 IN A 195.130.35.5 bargains. 172800 IN NS demand.beta.aridns.net.au. bargains. 172800 IN NS demand.alpha.aridns.net.au. bargains. 172800 IN NS demand.delta.aridns.net.au. bargains. 172800 IN NS demand.gamma.aridns.net.au. bargains. 86400 IN DS 64582 8 2 B5B3BD40B9913CE466F392BE4F1E72316690BE19FD9E1E850CA3380D F1BCF7A2 bargains. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Tu/eqXqBtVZIN5X8S5PjOhcWZDF8lJ+C1uGY31VRmW+NnbJ4xi0c1PE3 C7g1F5/z4zWRepIduxO/jBQoJ8RREnJSg2icJvidkddYBkXvcu/pqPjB xz7Tmb2YcCVe6Uq94kAg5COKUG+S7U+xu246W+sFs8VDO4LI8hhG6Zr5 qJQ= bargains. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SopifeNoRdLUFdlbR6k+ZIZ6oLihH2EXnmoJMvPZ1wvt1Jtx3fYMt5lY TX7BRd6yCKpZdiL+UsgI/8MCzdXIEcfmXESE5MYSetu2zf1cwG58vnZf X0eMUs+NsGu76wY0bKvmzNQbIKj6xd5nhGP0CuwnBaHq5dG50sjXOSyr DtQ= bargains. 86400 IN NSEC bb. NS DS RRSIG NSEC bb. 172800 IN NS ns1.barbadosdomain.net. bb. 172800 IN NS ns2.barbadosdomain.net. bb. 86400 IN NSEC bd. NS RRSIG NSEC bb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . j1Pus0SgUM7DWvP2tWOfhOj9ZUX9ZqIStUg+rknTSOZ931MMQUGxflkl 3iQvo6PDQK8NZqZ5Pr7vrDNACdn6+sn/k8BV/59dtZN88icZ9NY9sMKn sOFfl3NHQ6ZIcg+Sr+U4awkvHyhWg3/P/y5RJwKtCTVP3eO+nSqyIK9K iRg= bd. 172800 IN NS dns.bd. bd. 172800 IN NS surma.btcl.net.bd. bd. 172800 IN NS jamuna.btcl.net.bd. bd. 86400 IN NSEC be. NS RRSIG NSEC bd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WcjkGTzA2cZswt8VA8THav2R6yzpO65I5d4mNSLMzn2WoxLSYpD4853c Etc+3I/aevxx9dYdvQaYC5D9fiFn9KcxsDqWdIKQwDr+gFyM4ZDt33Lw IrjZu3tlXag+XDa3PQi7PnBAMtg2vvWuYNxr9jGJa7RoO6MxrSVpf4iF GrM= dns.bd. 172800 IN A 209.58.24.3 jamuna.btcl.net.bd. 172800 IN A 203.112.194.231 surma.btcl.net.bd. 172800 IN A 203.112.194.232 be. 172800 IN NS a.ns.dns.be. be. 172800 IN NS b.ns.dns.be. be. 172800 IN NS c.ns.dns.be. be. 172800 IN NS d.ns.dns.be. be. 172800 IN NS x.ns.dns.be. be. 172800 IN NS y.ns.dns.be. be. 86400 IN DS 12664 8 1 59462E9CB5520A36DD248D9DDC4EAA44672A5ED1 be. 86400 IN DS 12664 8 2 75141E9B1188A95A7A855BF47E278A742A5E3F2DDEED8E995D749D48 F2F0E72D be. 86400 IN DS 16684 8 1 8BD0806315E077B56D3D0E235727F31D8CB9BF3C be. 86400 IN DS 16684 8 2 7EF0A483A7A96FCECF3D9067828BAF7F3DF22C3276671C2E88AA4636 FD259F34 be. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vXfpLGtbuNAO+f0kyxEaDhYpCUkntxX2+trdhAADuZ9Q3OyK5USMTmfk bIHkX8rSp+JE0jGUUpako9re4fyjLULJa5xjzroLUsyhbWxjEF4PLxYy 51Plr5M4wh6N1wH6/Q8xr7DTaHIjJxJHe4EFX/uAKZ7WhxE/ZymF766c aIo= be. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SYF3P8H+lNDhmBKgVqQQ/M9SoP51ttDePzY/bjfOE9zlwwGrKWV0HkF/ MxHm00dWy9Wvs3ARariqslLw4ln0eVDuujMn4+rOCpP7pIuo+pvBToGe 4oot1NSaN+aYXC77fdz30tzMKxvIhVkVmkAc5m0OWmVV850oPofUFrGm MMo= be. 86400 IN NSEC berlin. NS DS RRSIG NSEC a.ns.dns.be. 172800 IN A 194.0.6.1 a.ns.dns.be. 172800 IN AAAA 2001:678:9::1 b.ns.dns.be. 172800 IN A 194.0.37.1 b.ns.dns.be. 172800 IN AAAA 2001:678:64::1 c.ns.dns.be. 172800 IN A 194.0.43.1 c.ns.dns.be. 172800 IN AAAA 2001:678:68::1 d.ns.dns.be. 172800 IN A 194.0.44.1 d.ns.dns.be. 172800 IN AAAA 2001:678:6c::1 x.ns.dns.be. 172800 IN A 194.0.1.10 x.ns.dns.be. 172800 IN AAAA 2001:678:4::a y.ns.dns.be. 172800 IN A 120.29.253.8 y.ns.dns.be. 172800 IN AAAA 2001:dcd:7::8 berlin. 172800 IN NS a.dns.nic.berlin. berlin. 172800 IN NS b.dns.nic.berlin. berlin. 172800 IN NS c.dns.nic.berlin. berlin. 86400 IN DS 10394 8 1 41B409894CD48EBBD0877427D5320C92ED2879DD berlin. 86400 IN DS 10394 8 2 B0D792359CB13AB1093CFA9D3754EC6933CAE2B2335A257017BDF63B CB682564 berlin. 86400 IN DS 15259 8 1 77F489BD4EA570DF28EA5AE752798AACC900C547 berlin. 86400 IN DS 15259 8 2 D7B794C41E4F2FFB19B22E307B7D5314C8665A0C77464A471305AC32 FC0BDAF3 berlin. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . IMvUe+OyVD8chahDTfFvCsp/aXSXC+6H8VboVW/A1E27RbayPv7mq5JC rXKtlVgnaPe/eYSi/mlRQ0wu5DpCbrB3SEkgsL1+wU5zgxhIHo3BBEXw WmZJe9OWQTn+rhxd9GY5+PLo8md/ZxyY6gQM7zRw0EvAUt2WzBhg3e8P UK0= berlin. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . n7v9dBunk+B0BLM8VG8swU8Hb+e1btfBnkZKZ8eccKxXvFEHeygSq5pz wJJ2m1LVb//ny2kq3qsz0Qs1vGEYaFGcxOiERE84ikOR95OtOlFjuX6/ J472WMUuSSs9Fw4PlCGJ8TvL+OphD3Sygf6a44K+PAdyBZSa8eqj44DS rI4= berlin. 86400 IN NSEC bf. NS DS RRSIG NSEC a.dns.nic.berlin. 172800 IN A 194.0.25.16 a.dns.nic.berlin. 172800 IN AAAA 2001:678:20::16 b.dns.nic.berlin. 172800 IN A 193.170.61.5 b.dns.nic.berlin. 172800 IN AAAA 2001:62a:a:2000::5 c.dns.nic.berlin. 172800 IN A 193.170.187.5 c.dns.nic.berlin. 172800 IN AAAA 2001:62a:a:3000::5 bf. 172800 IN NS ns1.ird.fr. bf. 172800 IN NS ns1.as6453.net. bf. 172800 IN NS ns2.as6453.net. bf. 172800 IN NS nahouri.onatel.bf. bf. 86400 IN NSEC bg. NS RRSIG NSEC bf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rekpQV4VF5+gpgLycmW07ZVba/iC441ir9KFsaCzy6BtUa8N90RMCdyT cIWXa5VAfrt/9/cDYzM28AaOGqQPcM9gLHwzbMv5CVZo89BUujwP+wIf v9I2CApbWWkQdNHrpRll3EGjB87nivO69lXUQ3kqVB7/yG6kEk9Qpwu8 VDA= nahouri.onatel.bf. 172800 IN A 206.82.130.196 bg. 172800 IN NS bg.cctld.authdns.ripe.net. bg. 172800 IN NS ns.register.bg. bg. 172800 IN NS ns2.register.bg. bg. 172800 IN NS ns3.register.bg. bg. 172800 IN NS ns4.register.bg. bg. 172800 IN NS ns-ext.isc.org. bg. 172800 IN NS sns-pb.isc.org. bg. 86400 IN DS 46846 5 1 1D83F503CCED4A4B6F7F8DB1CF43D38F9133A3EA bg. 86400 IN DS 46846 5 2 26811E459C850F50A85D1EAF589E30DC14D09D1A6E6262E8D36B6BFF C605334C bg. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UETMYs2gh4a3TPyg+rGAaKUORxUcnu6CWy8nldawsOOEWJ4NSGw90+4F e9hq7c/+5Pr9KPeYsB4Mqg2roTAXJH5PuQdOjeicYAzKcrE691geAJup akMf2RQq/Tevux7H+KDZ7LgTeoPWGnxKk5focD47iNN+1IulITIk5M5l hIM= bg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XwkYsNK9n+9w39n/tRaKB5+GQ5mgl2tzgCiJKMOvHNyZTgP9Hq2DHTxS vbvASCGrWXfidA7rX0c5OC6ltfgDzplEnf6ZOiInbds6pneETw+tXhto uyPI/L/8LLQsa1XRnpEIpPPKAv6g62XOuQBY12/bJnnLEvU8TtbQqI6y 6hU= bg. 86400 IN NSEC bh. NS DS RRSIG NSEC ns.register.bg. 172800 IN A 192.92.129.99 ns.register.bg. 172800 IN AAAA 2a02:6a80::192:92:129:99 ns2.register.bg. 172800 IN A 193.68.3.232 ns2.register.bg. 172800 IN AAAA 2a02:6a80::193:68:3:232 ns3.register.bg. 172800 IN A 193.68.99.99 ns3.register.bg. 172800 IN AAAA 2a02:6a80::193:68:99:99 ns4.register.bg. 172800 IN A 194.0.32.1 ns4.register.bg. 172800 IN AAAA 2001:678:3c::1 bh. 172800 IN NS ns.batelco.com.bh. bh. 172800 IN NS ns2.batelco.com.bh. bh. 172800 IN NS ns3.batelco.com.bh. bh. 172800 IN NS ns4.batelco.com.bh. bh. 86400 IN NSEC bi. NS RRSIG NSEC bh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . KLa7ye3fIiV1PlJTPaSDOYFF6qvaYGwlNCpQ1AqylG8hIIagtQJjl2OR aY4Ofa+y1HmfeAq8Qv4QuWTxUNgn0xbCFX79+k7jzznR8oCtFrzjsVTW xnqJ1iwJOJsF+Dsr8HO0/vXpmgE6c0yg19+pexFkstKHArHBMKxffBHr kG4= ns.batelco.com.bh. 172800 IN A 193.188.97.197 ns2.batelco.com.bh. 172800 IN A 193.188.97.212 ns3.batelco.com.bh. 172800 IN A 193.188.97.193 ns4.batelco.com.bh. 172800 IN A 193.188.97.209 bi. 172800 IN NS bi.cctld.authdns.ripe.net. bi. 172800 IN NS ns.nic.bi. bi. 172800 IN NS dns.princeton.edu. bi. 172800 IN NS ns1.nic.bi. bi. 172800 IN NS anyns.nic.bi. bi. 172800 IN NS ns-bi.afrinic.net. bi. 86400 IN NSEC bike. NS RRSIG NSEC bi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . T7N7Uq3WR+PS/RXLtCGGTmo4oVOEVscBDdtTHm3mZyMRasfc9QBbwwsA Yh3gf2aaRL3GMlEs82QQ2PqTwqhOpu7IU/MfZIlblvsOdh3/aKAGOoGb ZOKSLn3n9glPb5BGn3bM9/ccaL1g5cinuzwcJAUB6QSs2Wh/bdE7tmpt Qfw= anyns.nic.bi. 172800 IN A 204.61.216.61 anyns.nic.bi. 172800 IN AAAA 2001:500:14:6061:ad::1 ns.nic.bi. 172800 IN A 196.2.8.205 ns1.nic.bi. 172800 IN A 196.2.12.205 bike. 172800 IN NS demand.beta.aridns.net.au. bike. 172800 IN NS demand.alpha.aridns.net.au. bike. 172800 IN NS demand.delta.aridns.net.au. bike. 172800 IN NS demand.gamma.aridns.net.au. bike. 86400 IN DS 54034 8 2 747E5D74063A31D2957E308218CFABAB23194B4FB6292FC5168F7B9E 5031AFAF bike. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hemOWzDQ6cAp9cX0GGVJ0CQbFQPfbe/PE6c/pN5FzJkY8a+5pSrAOKCT oD9XhY9ysK4dSNyn+RVSY0f0XpvTPDDrOaa7JGpFenHUMGmP/iq7M5lE cHQNI6T0AGh0fPmhFUNuHKS0jZevQbd9/pN9uPL7OHoZfR/dyzifQyAz 5Oc= bike. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . F2dKnYI1VNNncY/r8u/pSO5co/eLy1RTOnyJWAC0bME9BqCG4O4MOw/3 aZmz2TGYZFQIyQeSbteZN5/LvNc2bezyLR3PSlBHXUh8Z4ocgfPfAvzp h0ZvyPPZRPzOJPUVi2cXs2CMgNW4i7/m3p2E8Md4A+i9JTgZp+kHzcdy e/Y= bike. 86400 IN NSEC biz. NS DS RRSIG NSEC biz. 172800 IN NS a.gtld.biz. biz. 172800 IN NS b.gtld.biz. biz. 172800 IN NS c.gtld.biz. biz. 172800 IN NS e.gtld.biz. biz. 172800 IN NS f.gtld.biz. biz. 172800 IN NS k.gtld.biz. biz. 86400 IN DS 21910 8 1 5EAA597F7A5D92ECB6DB62B04423B5315CC807AB biz. 86400 IN DS 21910 8 2 7C3B5FF5E65827A3D7CE2394B67891477779DCF28AF01BF12422E9EA 1A455D73 biz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oBRKIKE1tg03enWmdoTP9SMaacXMnDZMAOElzK6y0W3fuanGbKpZPR9l EgnZv94VYhcgvujrRwJFDJ1J0QecW2vgH+GkfsEWhmO9ZBEuv+aDpxqz zQUSeoI/WxlBliH48ACCxudwSI22r7+3uRa7TpStJ7A3uYn4T4oIeYma 66A= biz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K6TL27N78Oct0EeTZI3AdlwI7hH+Tu2AH/uLUI+14shloBW3GMCHZnkK eYuzxTYdmtO8AGnnDFv50MuV7LYpcLdL2gyNpAG4aIVU4gfv8gwWqx/L c0TBWnoXeNpDw9b4XPytnf72030qqbT8k1HMl6z2iSLe0hDs0iaEa3k4 eyY= biz. 86400 IN NSEC bj. NS DS RRSIG NSEC a.gtld.biz. 172800 IN A 156.154.124.65 a.gtld.biz. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e b.gtld.biz. 172800 IN A 156.154.125.65 c.gtld.biz. 172800 IN A 156.154.127.65 e.gtld.biz. 172800 IN A 156.154.126.65 f.gtld.biz. 172800 IN A 209.173.58.66 f.gtld.biz. 172800 IN AAAA 2001:500:3682::12 k.gtld.biz. 172800 IN A 156.154.128.65 k.gtld.biz. 172800 IN AAAA 2001:503:e239::3:2 bj. 172800 IN NS bj.cctld.authdns.ripe.net. bj. 172800 IN NS bow.rain.fr. bj. 172800 IN NS ns1.intnet.bj. bj. 172800 IN NS ns-bj.afrinic.net. bj. 172800 IN NS nakayo.leland.bj. bj. 86400 IN NSEC bm. NS RRSIG NSEC bj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . N8bHEko2I20PSv4/r5k/FuKHYeD/oGCwjcGZMgwIvkWt5FYZZTjnA4Yg FyiKDIKy38yih/ETuoGsJvfcpQPIfcuyTHDme/ejamLdUpxP9BtO+4Oi ftiZzlfxhsJtvjrtIwrOBITExHvhwlKeIuOyIoP6N9zWhBdln/yxeS3E CKs= ns1.intnet.bj. 172800 IN A 81.91.225.18 nakayo.leland.bj. 172800 IN A 81.91.225.1 bm. 172800 IN NS ns.uu.net. bm. 172800 IN NS ns1.bm. bm. 172800 IN NS ns1.ibl.bm. bm. 172800 IN NS ns2.bm. bm. 172800 IN NS ns2.ibl.bm. bm. 172800 IN NS ns3.bm. bm. 172800 IN NS sunic.sunet.se. bm. 172800 IN NS auth02.ns.uu.net. bm. 86400 IN NSEC bn. NS RRSIG NSEC bm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mHW26xguPIb2G4A6zFwuBG2IGYxYkVxBRqxsTeIx4z8Jfi2kl8hl70fK 4qGFNj1s/FZZqjoYvWa86AeVaT8EBjnYvrPK1E64bLJN2a4YsffpMe6e GwKiBTykYtpdE0ZnHqxQT0ZbX88biG5cGn1x9xZd9obY8ge41GDXTVCj Rq4= ns1.ibl.bm. 172800 IN A 198.207.23.50 ns2.ibl.bm. 172800 IN A 199.172.192.2 ns1.bm. 172800 IN A 206.53.190.202 ns2.bm. 172800 IN A 69.17.194.1 ns3.bm. 172800 IN A 207.228.134.10 bn. 172800 IN NS jtb.brunet.bn. bn. 172800 IN NS ns2.brunet.bn. bn. 172800 IN NS ns-bn.ripe.net. bn. 172800 IN NS dns1-tl.brunet.bn. bn. 172800 IN NS dns2-tl.brunet.bn. bn. 86400 IN NSEC bo. NS RRSIG NSEC bn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . AeaYP5FWtRE84kPd6BVj7JYb6oAdV7R6ocSwhMgLY4Uqruga9V1qK5Od 00VFy+7CnD/X3k+mRBsBUleThkIwVbJ5BOK1p/c6z88gjMPABmuJoGaS iQKwpJeL7rvD0YMZ6AEXYfgigZdBJjS28c5Tx31nOT4oPYlM+XWws0/6 6pc= dns1-tl.brunet.bn. 172800 IN A 202.160.9.9 dns2-tl.brunet.bn. 172800 IN A 202.160.9.10 jtb.brunet.bn. 172800 IN A 202.160.8.2 ns2.brunet.bn. 172800 IN A 202.160.8.20 bo. 172800 IN NS ns.dns.br. bo. 172800 IN NS utama.bolnet.bo. bo. 172800 IN NS anycast.ns.nic.bo. bo. 86400 IN NSEC boutique. NS RRSIG NSEC bo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fDss0CE8D5kxMWovLDtqUJbsDru89GJK4hZXM+gR8DZf4tM0ys9wPc2F prFrMq4MDiSxKFCSsgB3Y03EY+hChPCW9PXIp39FT6cuwuzxh+pq3zMt 0S5qqwIp8lGUxNqJZMjoQpWfjOPeA24aL51cDXuEcGZG5gDVlcLFqZlQ J2s= utama.bolnet.bo. 172800 IN A 166.114.1.40 anycast.ns.nic.bo. 172800 IN A 204.61.216.48 anycast.ns.nic.bo. 172800 IN AAAA 2001:500:14:6048:ad::1 boutique. 172800 IN NS demand.beta.aridns.net.au. boutique. 172800 IN NS demand.alpha.aridns.net.au. boutique. 172800 IN NS demand.delta.aridns.net.au. boutique. 172800 IN NS demand.gamma.aridns.net.au. boutique. 86400 IN DS 48127 8 2 3400E946A0A57CB11A176DEAC77AB42934513EFE0A8B5BE0203921AB 1888EE81 boutique. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bOXMAvXICfooxAf/+qXmLYV6R91kLzBxnhMH/XsnZxe/8/W2BtpYxqOH iQtVRylntf6p28xQnNQ1KEDHcGgBbTGeyS0atLCMrgzp9oJM3hWUFlOZ XYKhsi+HqA7o3HROpJsH0YSc0vmBGXOT5TvTdu9wW0rDW/ZLSe113k7P /gk= boutique. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vQTkL3IRa9zuJDNaTgXG9jEFBTMWSzx8nRkYc6P251n2s3+i8fOV2m/6 +zXXsAIxTpx21rAHwzRKqJGTitEB/CkOFstA1r+znPpc1DOfxv3cNo5U 296WZeONhDgJaq+LVR2Pf170uQ32l6CfCQU6QIKOzN864IaSy/Op0h/O hMg= boutique. 86400 IN NSEC br. NS DS RRSIG NSEC br. 86400 IN NSEC bs. NS DS RRSIG NSEC br. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZFRgWntMCo6fZRAG6IJh/MP51T1+ZU4TeyQJ73+tvAO16K3n4FqqBVwR bghEVU5h+5Rs8TYlpwFdkh7hzq95+PS1fZlITm+C+IFVmCPqEBg8XDxX TSzvSA8CF308lW7NykFKKHzxgB7Z5++sbBQy9dApr8FpCAxI8iUPGoNx V6c= br. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aEbe50q5v9A7Hh+rO0spcy6jfp8hiPPNFmagFEjir3Pxm8Em1+bW+2v1 ZkHJCFm6j8Ohrg4H/QP+OQEh3Vr+S9dtNxytU6SfCmTnbv7BEwNUptBa IlSbSHfAe25LjtvEc4Q+UUXIU8q1GUFU7VbwYFnfcHqR5FsJXpDSbmVa z1A= br. 172800 IN NS a.dns.br. br. 172800 IN NS b.dns.br. br. 172800 IN NS c.dns.br. br. 172800 IN NS d.dns.br. br. 172800 IN NS e.dns.br. br. 172800 IN NS f.dns.br. br. 86400 IN DS 41674 5 1 EAA0978F38879DB70A53F9FF1ACF21D046A98B5C a.dns.br. 172800 IN A 200.160.0.10 a.dns.br. 172800 IN AAAA 2001:12ff::10 b.dns.br. 172800 IN A 200.189.41.10 c.dns.br. 172800 IN A 200.192.233.10 d.dns.br. 172800 IN A 200.219.154.10 d.dns.br. 172800 IN AAAA 2001:12f8:4::10 e.dns.br. 172800 IN A 200.229.248.10 e.dns.br. 172800 IN AAAA 2001:12f8:1::10 f.dns.br. 172800 IN A 200.219.159.10 ns.dns.br. 172800 IN A 200.160.0.5 ns.dns.br. 172800 IN AAAA 2001:12ff:0:a20::5 bs. 172800 IN NS dns.nic.bs. bs. 172800 IN NS upr1.upr.clu.edu. bs. 172800 IN NS anyns.pch.net. bs. 86400 IN NSEC bt. NS RRSIG NSEC bs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . u4s8F+tsSltkjBksPccpHYQzut4twVxDhbapHwIWOmgT0UKOM0Hzpgz9 FVUEzknrdBySFCa2IvjfxZaIPnfozGphoROCjM1GlsPiBACqntSdyTcK x3aW7nJNfXb3aC3PV+tr6hvSICdR/MphaaHqibpDBEzLFXevoH2aB7Qg LAk= dns.nic.bs. 172800 IN A 206.48.3.168 bt. 172800 IN NS bt.cctld.authdns.ripe.net. bt. 172800 IN NS ns.itu.ch. bt. 172800 IN NS ns1.druknet.bt. bt. 172800 IN NS ns2.druknet.bt. bt. 172800 IN NS ns3.druknet.bt. bt. 172800 IN NS auth00.ns.uu.net. bt. 172800 IN NS auth61.ns.uu.net. bt. 86400 IN NSEC build. NS RRSIG NSEC bt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZZKSenfG/wfSgj6CoKbNpQLzfphjal8s1IqOEZSLVzyepV1/paCMX342 PluEAaCW7hztjqjTxtaYW1EvnNTbzNtHdM9vYAQH9P0+GK7ouRmgmz3A 95tw6c5n1trFkHRWpPHyKt36T6hmLvAEjnho9lgNHhdFBwzQg0Odyz9s V14= ns1.druknet.bt. 172800 IN A 202.144.128.200 ns1.druknet.bt. 172800 IN AAAA 2405:d000:0:100::200 ns2.druknet.bt. 172800 IN A 202.144.128.210 ns2.druknet.bt. 172800 IN AAAA 2405:d000:0:100::210 ns3.druknet.bt. 172800 IN A 204.61.216.17 ns3.druknet.bt. 172800 IN AAAA 2001:500:14:6017:ad::1 build. 172800 IN NS a.nic.build. build. 172800 IN NS b.nic.build. build. 172800 IN NS c.nic.build. build. 172800 IN NS d.nic.build. build. 86400 IN DS 18634 8 2 97A275D8F2C987FB681D6E7C650FEFBF8EAE8ED9743822A3D9767F0D C3502938 build. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . W6AaB4DW2SsuESfOpwvqqMLH1CEO+W3fV1SRoKIKggJ1z2zsr2MIYqLP 4g+hnKFtyKIhmZW/JbAnDXhQIJUn3da87ckfmX0ipF1xubZ49Eluzr8r P0f9QSdf37nqcAxfCXUgE7FRHQ22E8UJA6zNcZ8Yk9cN+zQMi8PdDy8H uF4= build. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Q4Y+2o9aIWgVW048zcY1uvPLp9H6LZDUDVK2QQY41zY2GcsHVFxAaA3p PrJ5LnrTiKk3pz4GWtiEc5qfxT1bBwqtywm7qRewxM5+cCWwdhSoLmS7 KD5FT7Nd6FyWzp5hBBrKTjNSdvwXBS+vXy/Z+wMlZJeLal+PMguugt2V BPQ= build. 86400 IN NSEC builders. NS DS RRSIG NSEC a.nic.build. 172800 IN A 37.209.192.10 a.nic.build. 172800 IN AAAA 2001:dcd:1::10 b.nic.build. 172800 IN A 37.209.194.10 b.nic.build. 172800 IN AAAA 2001:dcd:2::10 c.nic.build. 172800 IN A 37.209.196.10 c.nic.build. 172800 IN AAAA 2001:dcd:3::10 d.nic.build. 172800 IN A 37.209.198.10 d.nic.build. 172800 IN AAAA 2001:dcd:4::10 builders. 172800 IN NS demand.beta.aridns.net.au. builders. 172800 IN NS demand.alpha.aridns.net.au. builders. 172800 IN NS demand.delta.aridns.net.au. builders. 172800 IN NS demand.gamma.aridns.net.au. builders. 86400 IN DS 58759 8 2 37BDBEAC742E662C91717356028143903ECD1DE08FA2D8CAA5367790 A94D3110 builders. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OuYq1XKCUvs5QpuFEsdGcIzltuyqHKJRSv0xsig/UhKQ2rQDm3oBkDPr 2IjNZZX2RXnaDNcqwQenK6REapwjcRLqNML6la0XaT6NLM/uvsEGpBb1 foAtlyHe8nHxhJPQ4e94/yZ1KW174xKYoVRqk65sZIx8w0AQ/k/JEutA iGc= builders. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aNv1M2jFhJzMTKJwuudR8F9A4DFCvobOw3sEKdneqh/Cgjf9Q7ffB9BA 3Xzl+eK9u5DLFFk/eK5JQGFqAYli5tfYhjIvBn5WGL10HdMAb42v7Heo LmjA+zEOTn9mKop7VORv3s33mcNpxosENSrJuVpVE2JZ4AV6AXC888ss 49I= builders. 86400 IN NSEC buzz. NS DS RRSIG NSEC buzz. 172800 IN NS ns1.dns.nic.buzz. buzz. 172800 IN NS ns2.dns.nic.buzz. buzz. 172800 IN NS ns3.dns.nic.buzz. buzz. 172800 IN NS ns4.dns.nic.buzz. buzz. 172800 IN NS ns5.dns.nic.buzz. buzz. 172800 IN NS ns6.dns.nic.buzz. buzz. 172800 IN NS ns7.dns.nic.buzz. buzz. 86400 IN DS 47864 8 1 455F2C4738D8D597E70EE16AD30C249839C13EC9 buzz. 86400 IN DS 47864 8 2 A7178B083CB8C38492BBA8B7BF71F2D86B892CD851FECB81EE2FFFB5 5097F78A buzz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . a7IKPZ6Q9OlM/pphtVRfLu8b/SK0OuVC2Pox4AEdMSIbho0ivaB4EtyN /UgBy8CVl2ACO8buH5w0zGRwwZh0phNQN/ReXNp9HqlDtcTSpJF4nI8V lIr3KtJJnYKsZeQwN0SskZBm28vBP3au/WsskrhzRG/gHWFuUZQUj08Q WsI= buzz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WHo65C/czbnVibMVWKD6kEdFOBOA8/R8K95s5gVz5+GtTZWTilvqtQVW 6RlZqc43mKrtlNR9QsCfgNIfd5cE1Bl0ZVmq/rP3WGTrPriAjZ4NimMk zwYaBzTlVhMtp7vAnZODbUwsAyf/BK88HtMUjC0mT4YGaMc2c1XVXj/A Tn0= buzz. 86400 IN NSEC bv. NS DS RRSIG NSEC ns1.dns.nic.buzz. 172800 IN A 156.154.144.29 ns1.dns.nic.buzz. 172800 IN AAAA 2610:a1:1071::1d ns2.dns.nic.buzz. 172800 IN A 156.154.145.29 ns2.dns.nic.buzz. 172800 IN AAAA 2610:a1:1072::1d ns3.dns.nic.buzz. 172800 IN A 156.154.159.29 ns3.dns.nic.buzz. 172800 IN AAAA 2610:a1:1073::1d ns4.dns.nic.buzz. 172800 IN A 156.154.156.29 ns4.dns.nic.buzz. 172800 IN AAAA 2610:a1:1074::1d ns5.dns.nic.buzz. 172800 IN A 156.154.157.29 ns5.dns.nic.buzz. 172800 IN AAAA 2610:a1:1075::1d ns6.dns.nic.buzz. 172800 IN A 156.154.158.29 ns6.dns.nic.buzz. 172800 IN AAAA 2610:a1:1076::1d ns7.dns.nic.buzz. 172800 IN A 207.34.5.10 ns7.dns.nic.buzz. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e bv. 172800 IN NS nn.uninett.no. bv. 172800 IN NS nac.no. bv. 172800 IN NS server.nordu.net. bv. 86400 IN NSEC bw. NS RRSIG NSEC bv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MIzpahoZ4l92e69tCnBM6l/LZwuhU/18JKmHy/Zvm8bo3Fkfnj7J1/ot 7AfEF/CcUngjyAB6HjeL/XfIHvyUVuC2BQffued0Qa7I1LGvyGgC/TC/ ySwGAxw35ecOwY5vp+jBxgEX0/GEMQr51iYKUsvYFf9Ual+Fs3G/hiwA WhE= bw. 172800 IN NS ns1.btc.bw. bw. 172800 IN NS pch.nic.net.bw. bw. 172800 IN NS dns1.nic.net.bw. bw. 172800 IN NS dns2.nic.net.bw. bw. 172800 IN NS ns-bw.afrinic.net. bw. 86400 IN NSEC by. NS RRSIG NSEC bw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . V8J0hQ0PEitQHkeLDrFD3aCgMJJCmTQj68Z4OeJT/GKXWvDVMZx9UarO Hyc/rOPs5dbzwzAXLM53Dodig2uqFNX7pKAMbz9vXgcBc8ccUKnFktQ/ rLNiQ8rEVpKX1FZsquOSO+CWSquf32SVwFsIajEIaqEIyTLUTtR0Skgr bAM= ns1.btc.bw. 172800 IN A 168.167.168.34 dns1.nic.net.bw. 172800 IN A 168.167.98.226 dns2.nic.net.bw. 172800 IN A 168.167.98.218 pch.nic.net.bw. 172800 IN A 204.61.216.70 by. 172800 IN NS dns1.tld.tutby.com. by. 172800 IN NS dns2.tld.tutby.com. by. 172800 IN NS dns3.tld.tutby.com. by. 172800 IN NS dns4.tld.tutby.com. by. 172800 IN NS dns5.tld.tutby.com. by. 172800 IN NS dns6.tld.tutby.com. by. 172800 IN NS dns7.tld.tutby.com. by. 86400 IN DS 43875 7 1 B5667014733F0FD07D096B2FA2AD175186ADF48C by. 86400 IN DS 43875 7 2 27A33067E54A8C4CEE091DB22156EF02A79A76CCC1E48D6D195DFEF6 D520C48E by. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Ph66Nicme3iMy6A9sD3psSLgoXJufKniGP2CjQKY5edMM0t6evwWoxfM Ub+1iCdPqlgBbBmhC8lzjPf7qvyLvM/nPcO9rf9igyl2TE2EAgy/xEAb 2kvmeyqFvvGdfRq904tdUmT9Y6/8VzyqS7cfWVdxCT0lyV5sPQzYHR++ 7jk= by. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DdUIk0vtvGZ9LeOe4mgH60oytzQ8CE+uVDU73AGUEavtShKW3v/F2ilh q90ATiC8LwbY1q4704hjSuWQuM+BwBWhWwnt94/Suc0ga66942nmKvZB WAK+3TfV3xHkvceNhyPBzWRX1yQXjRwgLst4xrbH+/kseQzJQL0d5ZZq sSs= by. 86400 IN NSEC bz. NS DS RRSIG NSEC bz. 172800 IN NS a0.cctld.afilias-nst.info. bz. 172800 IN NS a2.cctld.afilias-nst.info. bz. 172800 IN NS b0.cctld.afilias-nst.org. bz. 172800 IN NS b2.cctld.afilias-nst.org. bz. 172800 IN NS c0.cctld.afilias-nst.info. bz. 172800 IN NS d0.cctld.afilias-nst.org. bz. 86400 IN DS 16455 7 1 409AA5CD776352AEAB7A46B64EE7BA8061CB9374 bz. 86400 IN DS 16455 7 2 457C64669C357AF4AABDEB16A6A119B22D3FCB339BBF3C1701AA84CB C3E105F3 bz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qZgPi7PUvwRKgHfJt8wKM4yMXzCSRhQjPtdUzhg6z4AFCSYeQIplJDCK 37u/NmYtFMCLhHRi+iPPrmqWLd2bLsoi3y5dMM6ErCOewH7x6V8kbOrJ 4CwQvoii+uxqjMouPBqyYJMHmpALF7DRHC3u1IUdRWWMVVhAA56q75oW UY4= bz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cr6tAr4f/JIjAlZ6rhhWbqdC3knzcwERv20U9SS75VuxwCEAmxmXkX5R FzcWBc0+dYyulYFt/ow05B2B0vWrbRvsLruJ/0/1UmVdhBUvC0fKF1H+ ecXB4nESII2m9ZiIKlXZczx+up52KGpWLa8lcgD2OREJFYDPXpePBvZn 3zc= bz. 86400 IN NSEC ca. NS DS RRSIG NSEC ca. 86400 IN NSEC cab. NS DS RRSIG NSEC ca. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ELpR1OX4hZMg7F8/CRmH7I8fu0b8N26RdNHYdfObfCHKrmLIM7GY+74z Mx/RIVAi9qIKHJ3gm4B2cWlD7wfJOxeeKDGc4vk2116ntGYPO7BfoSC6 xaSrG18fE/WK+n2CjdF8mtgJVUwyha7OLVWAGMgXKcCB/dqHQr0HNZhm yFU= ca. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bNO7myxbSNp/M2rP4Sdwftylvzo91xj+gNlkkAmZ5HHvkvWH60ljj9v3 TdhobVn7z3qfoniKJ60qxP077MaXKlM3ttLtT9AbPJHqulJMAS7Kl0kl NpD0szcAYN3pFqxrc3BQUWhBeVCwtthiXesJjktewG1iD2V1WW4e3/sd s2A= ca. 172800 IN NS c.ca-servers.ca. ca. 172800 IN NS e.ca-servers.ca. ca. 172800 IN NS j.ca-servers.ca. ca. 172800 IN NS k.ca-servers.ca. ca. 172800 IN NS l.ca-servers.ca. ca. 172800 IN NS z.ca-servers.ca. ca. 172800 IN NS any.ca-servers.ca. ca. 172800 IN NS tld.isc-sns.net. ca. 172800 IN NS sns-pb.isc.org. ca. 86400 IN DS 10207 8 2 7187A87B74FFF32A8549A05BE7E12F1D8BEDD0DEA9C3D864095D83BF 7C542A8F any.ca-servers.ca. 172800 IN A 199.4.144.2 any.ca-servers.ca. 172800 IN AAAA 2001:500:a7::2 c.ca-servers.ca. 172800 IN A 192.228.28.9 e.ca-servers.ca. 172800 IN A 192.228.30.9 j.ca-servers.ca. 172800 IN A 198.182.167.1 j.ca-servers.ca. 172800 IN AAAA 2001:500:83::1 k.ca-servers.ca. 172800 IN A 156.154.100.4 l.ca-servers.ca. 172800 IN A 156.154.101.4 z.ca-servers.ca. 172800 IN A 192.228.25.66 charles.cdec.polymtl.ca. 172800 IN A 132.207.144.2 cab. 172800 IN NS demand.beta.aridns.net.au. cab. 172800 IN NS demand.alpha.aridns.net.au. cab. 172800 IN NS demand.delta.aridns.net.au. cab. 172800 IN NS demand.gamma.aridns.net.au. cab. 86400 IN DS 20239 8 2 E03C2DF189D39BD14C37695B586DA73C58C89B39050DC9E618A97886 B3A757BD cab. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eR+8iY4X6uvZI4SlSD08wqYMPM0wjYEpS6l0ki+/u8vtKwBM3JPLE0Pl XHB45Cavt1qJ2J/l+0QlrPL6nYwHZyCF/5YFKx8yGva9IeBBbLl0knk8 imJY85kblamirOXtFzRy5o4TMwTrAEy2FS/u3RM/nRHK+o5zLVs+3Yat 3/k= cab. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . B2Bvoj9brS/3/+8pzLwntGECTIYCtbEG8iBvjanW3VEAHWRbmqvHwXQv sZauRhvmLnqhX0O0CjV6Lf7kgPmh4HZtRP4/0Xevmvu0uFyajdrvaGDD jF2jfkkJItMD75nJCpLycdvEnpM57OcUtT0W7lbQewwctHqNbKTUkYQU T0k= cab. 86400 IN NSEC camera. NS DS RRSIG NSEC camera. 172800 IN NS demand.beta.aridns.net.au. camera. 172800 IN NS demand.alpha.aridns.net.au. camera. 172800 IN NS demand.delta.aridns.net.au. camera. 172800 IN NS demand.gamma.aridns.net.au. camera. 86400 IN DS 54385 8 2 DDD1231F35667A209FEAF0749906B8DBDA96CF1F9ED224C519B74FEB 22F4888F camera. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . C/qOVcY4YDYZawpRkofB/BRo/1ma1JItVlP7a2wrelNu16Zvn0isyPTB Uo6g9n32/+sff8uHobkeorrTNtaykD2etpaKWqkHiS96OpO+tf9cd8cL qGMb3GLBOt/zs3Qu0WXI3Xu168mxp/iRr7iA4Jl0GR8uX931es0lI4wN aJk= camera. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LxdJkEXjhL+ryPxFsuQYoXc+uAJ9HmTVciyNTdLxgG50ahexDRiYYegN 670msPDjpa3ELMaJlcis2KuT7GYU+9Wnnj+1wLKg5qZ71+/10iehoNog ZGfcaG7ubajF0H9XpmQQB6A90nHfuvONJ6gxUoeCufhmDJ9UD4lL0riD 2xA= camera. 86400 IN NSEC camp. NS DS RRSIG NSEC camp. 172800 IN NS demand.beta.aridns.net.au. camp. 172800 IN NS demand.alpha.aridns.net.au. camp. 172800 IN NS demand.delta.aridns.net.au. camp. 172800 IN NS demand.gamma.aridns.net.au. camp. 86400 IN DS 64396 8 2 D2EDC9BFB5D3C98A155ACE7F93957C54EA8938F4E7AEDF32444A8D9E 57AE69ED camp. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . e/o5BT+9kO9pMFJYrtCQ8S6YXUzZgoX4M5oAaR88QMor4dfN7u3BZ0zB KWVBVSSsRalgihEHPP3kYopimrrcqCF/Nive7yOykSgPSbjanlPYFjMQ 8kSDPE1AsthMmzhSt4y+KEMshXEOwzJqI0YN40vkePia6kUqXQuR6noq HPw= camp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . BiM5i/QDpMLMIsnpzm3Vec0ZnxqI1kLKm3lGH3bxTuEpWwUC2nw7mXDW KL0af3p4EBP0zK8IvlfF+DMu8vHgXSumOs8iYQkwaFaRZY5w6B6FKW1g jUDMCBCJ86C/SrPnIZfY8jQu5ey8F34XWU0XAqSpkQIo+x5TQEBqlO8p l2c= camp. 86400 IN NSEC careers. NS DS RRSIG NSEC careers. 172800 IN NS demand.beta.aridns.net.au. careers. 172800 IN NS demand.alpha.aridns.net.au. careers. 172800 IN NS demand.delta.aridns.net.au. careers. 172800 IN NS demand.gamma.aridns.net.au. careers. 86400 IN DS 23944 8 2 7EE0E65346C011F8EECC3A94C8668EA463CCA44CB8159F0E30D436FE 920F0DA7 careers. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vMp1fq6v16Vsw9YE+L9yB2UA2hQORlEC+e7Ir9dEIJFmcrmVy1EDg4ih hf8Cjcm+LBuCuWsKiH8PdRfR19KHz4FOar3tHi4SY4SNrV3BN1zuMpnu Ci5nUzbRMgigGcEEYrMIu3BvOymNJaZf13nbAvy/X54av6EiYqL5qoyR Bts= careers. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . KhIZNx+wmOwWhd94s9wFHFgCf8Lh/XKXCWyDky/NcT0bIOnfeSU5/SD/ 5EI+G32PzS1XqfoqaRB19mBVeS/PotKLdORbfAVI/VuKYiIfpgAVierD qmcIFPYDLBvpsHGB9WDA+ZmJ6CNORxiHTq/rUEnIyJZsGmGWFI0lo7Iy u/Y= careers. 86400 IN NSEC cat. NS DS RRSIG NSEC cat. 172800 IN NS ns.nic.cat. cat. 172800 IN NS cat.pch.net. cat. 172800 IN NS ns1.nic.es. cat. 172800 IN NS nsc.nic.de. cat. 172800 IN NS dnsc.ad. cat. 172800 IN NS anyc1.irondns.net. cat. 172800 IN NS sns-pb.isc.org. cat. 172800 IN NS switch.nic.cat. cat. 86400 IN DS 33436 10 2 E1A0FC89B87F5E7F6B354D364CF704855A2E9A52B7F39BBE4E2BEA44 3B81B18E cat. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . B4FbLK+Ip1aNPKkDAW27zhLDR6eI4ZY7nHhnaMu+P4t5wTXadveKdndm dGljq9eQ9Wh3hoP2svGFwj7tCKlD6pFC81p/TCIiIQxnm+9Iilqn2gYO lunKhJQ/2Tas4yBufFNWnnMSLxDEtB64z5OvZi6sAmnffgErh2+Qfz75 zCA= cat. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QuYQfK2TZABjNUfwMYGRpyGCoP7tI3+iMZSsM7jKS0YwYhxZyxphnPkO o310un1US2lVPx/ag5cXdtGbcf6OYby5D3+sFF9GQPyhUPSDfwY16//i gxMLVjjvvKClQZs3fYJ/oc51359WdsDneH4V2K9GeaTrSt9ABEkj5wkS ItQ= cat. 86400 IN NSEC cc. NS DS RRSIG NSEC ns.nic.cat. 172800 IN A 84.88.0.162 ns.nic.cat. 172800 IN AAAA 2001:40b0:1:3::2 switch.nic.cat. 172800 IN A 130.59.138.49 switch.nic.cat. 172800 IN AAAA 2001:620:0:1b:5054:ff:fe74:8780 cc. 172800 IN NS a5.nstld.com. cc. 172800 IN NS c5.nstld.com. cc. 172800 IN NS d5.nstld.com. cc. 172800 IN NS f5.nstld.com. cc. 172800 IN NS g5.nstld.com. cc. 172800 IN NS h5.nstld.com. cc. 172800 IN NS l5.nstld.com. cc. 86400 IN DS 519 8 1 7285EF05E1B4E679D4F072EEA9B00953E01F3AE2 cc. 86400 IN DS 519 8 2 E1EC6495ABD34562E6F433DEE201E6C6A52CB10AF69C04D675DA692D 2D566897 cc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . j1rRckxGRcK36/SO2e/IKvsb1WtHM/LzjwmBVVonHcXbJux6ALe+fSpA 2UIDQZXq+Bz7cj3jNM2txXqtNyd0hVaSH48Bp2wcRbvrF5g3fPns2ulK f30ipM1MGv0i47rr7SoNvVSiGqdFh94jE/6TdiuhSGTQ4hJ5QWEBsM8l W14= cc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ugq87qSDgqQOBZinCCPnegZCEr84s5D3oBKszZGyRETdJ/SbWft9t32m Nlk+0MlTqs91UbM2zMAOFsymj1G/KnP0aLRhWh+5aqcBN+p+qslHlZsP byx3LV8GMG2Yln9y066aFDZWoJqCOMm5KU/3KbCEkZ9r2Ksk8A1QsFVh vp8= cc. 86400 IN NSEC cd. NS DS RRSIG NSEC cd. 172800 IN NS dns.princeton.edu. cd. 172800 IN NS ns1.pch.nic.cd. cd. 172800 IN NS igubu.saix.net. cd. 172800 IN NS sabela.saix.net. cd. 86400 IN NSEC center. NS RRSIG NSEC cd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RHd3Zzjn11EaE7VPvXAFeACp1NvsWa+5JmdYWY1FQfM9BaeasiXR8uRi YKrquKo6lEWf8exM+rZzVmBEtxPeVCON9Oslb58RupCMZinmREjTiUF3 h+xFqzwuKTwE8GxOV/YY4McnhAQYY1A+Zl3Q15C39uwfzu7zkwGl5Yov LBE= ns1.pch.nic.cd. 172800 IN A 204.61.216.66 ns1.pch.nic.cd. 172800 IN AAAA 2001:500:14:6066:ad::1 center. 172800 IN NS demand.beta.aridns.net.au. center. 172800 IN NS demand.alpha.aridns.net.au. center. 172800 IN NS demand.delta.aridns.net.au. center. 172800 IN NS demand.gamma.aridns.net.au. center. 86400 IN DS 61060 8 2 F7B5230B71155E51F6E9EBE8467338CA2644DC34B08722E33105D498 A9226ACD center. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . mvR4v+BvHXhlcza60Q6wPx8/KDyvli1Sc5wW36sVzQ611ulWFNhNK0Xp HudarvtNZccp9eFDsy1g4kmz7/eBZ3nyFGUjsvwhPbiG9JQwvI94B98i pZeOHb92QfBQStDA17JNW5RdaeZkiuC/k6j/esog3fhcc9EE0tNbevjl Kck= center. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eYb6CAtxhtRM/HOWJGA69J9qqe8wGrFnQNBAkb1EnklYwIGLO+3TdOV3 8tTSxl1F8ROSQJDRmBpWbDW1bUgUaoOYp6i8eZWCTpnjvhPLFiApiPPs fyfhKoAVq2FT4oDt5vZhJqwzcC3G8yvGgaP+Wjx94Kf3yknxp01cO1vK BiI= center. 86400 IN NSEC ceo. NS DS RRSIG NSEC ceo. 172800 IN NS ns1.dns.nic.ceo. ceo. 172800 IN NS ns2.dns.nic.ceo. ceo. 172800 IN NS ns3.dns.nic.ceo. ceo. 172800 IN NS ns4.dns.nic.ceo. ceo. 172800 IN NS ns5.dns.nic.ceo. ceo. 172800 IN NS ns6.dns.nic.ceo. ceo. 172800 IN NS ns7.dns.nic.ceo. ceo. 86400 IN DS 63689 8 1 DB7A8F6AADCEE147D241A9778857E94707234D4E ceo. 86400 IN DS 63689 8 2 F2AB788C2802C3F219D53F37E7E1687ECF2E453E04BC5ABCC0B444FC 0E35B1EE ceo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Piiog7RJg67/k14q4a30NV20XnoJp+t42pmGbVGAdYzofrP8YeLKM69g hFeg4P6s8P0GlUXZIY9uPICjH+W69utrvmxRA/r6Lf1efedkfchn/qT7 qd4o4Ttkv4hhrtmu48WxKJMtC46G3HddHnpsNp2MiiOK+RsgLIo/4r8A bvo= ceo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LrKEJCqgOcC0Dzkx7A6eMEk3lLdTjPyvjzP0iGKeOg3pvU6Ggnia1R8k ZHkjN4HLe5cQ+UPimNjTpzE5iMvGIp5h3OYDAd35EIPXodwOCZnOBwrU mEmj2ieyolLutqYDjm9fM0nVEXdfYxJ8dSUlWUiahj7+Lq8TVqzzTODu KZQ= ceo. 86400 IN NSEC cf. NS DS RRSIG NSEC ns1.dns.nic.ceo. 172800 IN A 156.154.144.37 ns1.dns.nic.ceo. 172800 IN AAAA 2610:a1:1071::25 ns2.dns.nic.ceo. 172800 IN A 156.154.145.37 ns2.dns.nic.ceo. 172800 IN AAAA 2610:a1:1072::25 ns3.dns.nic.ceo. 172800 IN A 156.154.159.37 ns3.dns.nic.ceo. 172800 IN AAAA 2610:a1:1073::25 ns4.dns.nic.ceo. 172800 IN A 156.154.156.37 ns4.dns.nic.ceo. 172800 IN AAAA 2610:a1:1074::25 ns5.dns.nic.ceo. 172800 IN A 156.154.157.37 ns5.dns.nic.ceo. 172800 IN AAAA 2610:a1:1075::25 ns6.dns.nic.ceo. 172800 IN A 156.154.158.37 ns6.dns.nic.ceo. 172800 IN AAAA 2610:a1:1076::25 ns7.dns.nic.ceo. 172800 IN A 207.34.5.10 ns7.dns.nic.ceo. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e cf. 172800 IN NS a.ns.cf. cf. 172800 IN NS b.ns.cf. cf. 172800 IN NS c.ns.cf. cf. 172800 IN NS d.ns.cf. cf. 86400 IN NSEC cg. NS RRSIG NSEC cf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CJHwNIgcSgW7MCCERUqUdrz7nUFwzeJNWPriJ1REwIL2WefT83t5g63D aIByt56alAgwnoE/elvEKxTOEyrnVsWWhy0VBrNGnDhva5baaO04U7V6 Tu62YPRBIEWyEr5pH0XfJiXPE4DN2X/HIhy7gWiA+ChueKf+uHs1LNmP WKc= a.ns.cf. 172800 IN A 185.21.168.17 a.ns.cf. 172800 IN AAAA 2a04:1b00:4::1 b.ns.cf. 172800 IN A 185.21.169.17 b.ns.cf. 172800 IN AAAA 2a04:1b00:5::1 c.ns.cf. 172800 IN A 185.21.170.17 c.ns.cf. 172800 IN AAAA 2a04:1b00:6::1 d.ns.cf. 172800 IN A 185.21.171.17 d.ns.cf. 172800 IN AAAA 2a04:1b00:7::1 cg. 172800 IN NS dns.dnsafrica.net. cg. 172800 IN NS dns.princeton.edu. cg. 172800 IN NS sunic.sunet.se. cg. 86400 IN NSEC ch. NS RRSIG NSEC cg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ksb0dNmjMxPNmhFquT3Cpke18YGvkU0IhHB44GBQBfrs3+r+sljjvoqH WwWaBuHRxu0ETSvW5Pp2rCvP25y+q0JVYbbH+tAEdwEJFefrj3Tni/tF Jt9+b6CQLe5GHKYsVCPs3/KyBbE5UFh1Sr4NX35zdUr1htESQ4pahCfp HHg= ch. 86400 IN NSEC cheap. NS DS RRSIG NSEC ch. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Op8S+ELj3isxc8o/7EwxLTkIe3KL6FpNBzylMuUtZFcf/etYtzPp01DM bKDYYReBDhN/rVONxSb8x+aHvQJOIcpCGlZhAJFtRvtDx1DKs3TGP1yj ZoNsB37EMfDaESwTqe3RDj1CtAxwf/ukpOpVXV8cll71pbRskjbxKcxY +Jw= ch. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UmQkAs5gsaQhREHjAjy+sB0c+CpafRHbLYJdipDTuXqsoPTu8jHog9hy dFWufEwmzfidwwKpqDkmTjTci+ZjC7J/AKd25EvU2ONA4RWcCi5HhNQk leyZFTxpE/TSa4gailBkZyMt+IKr5EhNlw0+jrzBqc7iGG325MXHfcTu qRw= ch. 172800 IN NS a.nic.ch. ch. 172800 IN NS b.nic.ch. ch. 172800 IN NS c.nic.ch. ch. 172800 IN NS d.nic.ch. ch. 172800 IN NS e.nic.ch. ch. 172800 IN NS f.nic.ch. ch. 172800 IN NS h.nic.ch. ch. 86400 IN DS 24859 8 2 9AFD21261EAF98AFD7E24E89BE6B25767F93EB401C6C3DF21342F40E E82DCCF0 ns.itu.ch. 172800 IN A 156.106.192.121 a.nic.ch. 172800 IN A 130.59.1.80 a.nic.ch. 172800 IN AAAA 2001:620::4 b.nic.ch. 172800 IN A 130.59.211.10 b.nic.ch. 172800 IN AAAA 2001:620::5 c.nic.ch. 172800 IN A 147.28.0.39 c.nic.ch. 172800 IN AAAA 2001:418:1::39 d.nic.ch. 172800 IN A 200.160.0.5 d.nic.ch. 172800 IN AAAA 2001:12ff:0:a20::5 e.nic.ch. 172800 IN A 194.0.17.1 e.nic.ch. 172800 IN AAAA 2001:678:3::1 f.nic.ch. 172800 IN A 194.146.106.10 f.nic.ch. 172800 IN AAAA 2001:67c:1010:2::53 h.nic.ch. 172800 IN A 194.42.48.120 ns2.switch.ch. 172800 IN A 130.59.138.49 ns2.switch.ch. 172800 IN AAAA 2001:620:0:1b:5054:ff:fe74:8780 cheap. 172800 IN NS demand.beta.aridns.net.au. cheap. 172800 IN NS demand.alpha.aridns.net.au. cheap. 172800 IN NS demand.delta.aridns.net.au. cheap. 172800 IN NS demand.gamma.aridns.net.au. cheap. 86400 IN DS 37507 8 2 1F76AD552F924D9182B3D34973F8608A14458D8AE0C994C367FF3573 289DE494 cheap. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . AAXAeUXos2eB0H7u5tDZ6PFJW1IYVu0mxoNmUZs4O85vur39eG0ypALn NYLAXneX9woBNfU8gnwHr81E2OKSAbIzeDT4YNIUokEK25OT8QHun0rU Xkt1yd8L6lwA6cEjLhOUtp0H8hQa7jcyT+GPrnue8c3WXebXvPP/1yzJ 95w= cheap. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . n+3N6uTET1EbzVDxKYnv1Lg5e2EAL88pVANOix8XJ6J+gIbyxvkn5Aci bAEwCLKKgVOYHW3FhjBvojPvJFWvo9zcyIooQao/DfMbryhdRKdbdKu/ hvYJeJCBpA/McxOE00CIkjmaz8V0UrWwF7TxkVubSwoplbkf+975YWDS 1Yw= cheap. 86400 IN NSEC ci. NS DS RRSIG NSEC ci. 172800 IN NS ci.cctld.authdns.ripe.net. ci. 172800 IN NS ci.hosting.nic.fr. ci. 172800 IN NS ns.nic.ci. ci. 172800 IN NS ns1.ird.fr. ci. 172800 IN NS ns1.nic.ci. ci. 172800 IN NS ns-ci.afrinic.net. ci. 172800 IN NS phloem.uoregon.edu. ci. 86400 IN NSEC ck. NS RRSIG NSEC ci. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . i+Wwt3vm2JGYP8fDrOJ6r5RD/e4MNTghNqj7r/2mR0Agk00hTHOBw0J5 Sr8i1AiLoXWBfpc5C1BvF/OdTxUqumrenqFo9Q926iaAqyuprD+JWcRS tFvceoigsXXQVZWf2u5rfl6rl2/jbZv3w2hurhRoGKXvY2qAW9WJcXab QGg= ns.nic.ci. 172800 IN A 213.136.100.81 ns1.nic.ci. 172800 IN A 213.136.106.214 ck. 172800 IN NS circa.mcs.vuw.ac.nz. ck. 172800 IN NS parau.oyster.net.ck. ck. 172800 IN NS poiparau.oyster.net.ck. ck. 172800 IN NS downstage.mcs.vuw.ac.nz. ck. 86400 IN NSEC cl. NS RRSIG NSEC ck. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Exy566mOQ+PUiyQAt2/XvuFocd/Qekw+Q+f+PVz4Hrx4DKKbZypgrqGG U5mRVMgsv9yRgyZHf1o+lsbt/gUv6dxpUEOpOPYWWAbaQioLwHj3k9kI WAfJkSv5De/vVtNozu7WvAMCZ5dpQtallzCb4wWzq+I1ag4ayRxu/Iyi djk= parau.oyster.net.ck. 172800 IN A 202.65.32.128 poiparau.oyster.net.ck. 172800 IN A 202.65.32.127 cl. 86400 IN NSEC clothing. NS DS RRSIG NSEC cl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rwjADsGjlyaJgeJdNMiEwpxZ8f7H6IxjKHnmBfciTnLb4A8jqHzzc9DT GHrilnwhgAI/82TcLMGYu2c5L7U1UATPnXmHJzA51354UIO7BxQ/pPH4 9bfCnG3ZyyoevXNRp1M68ms9PNNXY/f9bTESrZwZyTRd7wI0IHQh40ms Z1o= cl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . XcVbK2nUj8PncasQVvRmuOGNT8/h87YQjIwizQ2YbGIsuHyThx0mZ6oH P1kmLMQ/XL+Y7exHjqxg3GubPQia7AkWkdwecz78sRRW8WqJrkKRpVUM J0Lx92KWFabCplUrOXMl/jPlskcUUqnVNjQeIRvQ7jBkZWR5XJH9XU+S BjM= cl. 172800 IN NS a.nic.cl. cl. 172800 IN NS b.nic.cl. cl. 172800 IN NS c.nic.cl. cl. 172800 IN NS cl1.dnsnode.net. cl. 172800 IN NS cl-ns.anycast.pch.net. cl. 172800 IN NS sns-pb.isc.org. cl. 86400 IN DS 21199 8 2 7D756DFFAB6D3CD9C786FF5C659954C22944FAEF9433EEE26F1D84EB 5370B394 a.nic.cl. 172800 IN A 200.1.121.10 b.nic.cl. 172800 IN A 200.7.4.7 b.nic.cl. 172800 IN AAAA 2001:1398:274:0:200:7:4:7 c.nic.cl. 172800 IN A 200.16.112.16 ns-ext.nic.cl. 172800 IN A 200.1.123.14 clothing. 172800 IN NS demand.beta.aridns.net.au. clothing. 172800 IN NS demand.alpha.aridns.net.au. clothing. 172800 IN NS demand.delta.aridns.net.au. clothing. 172800 IN NS demand.gamma.aridns.net.au. clothing. 86400 IN DS 28024 8 2 A7E284ED01F675CFDB1161FC8B23680B2196CC78FF1D757120E45D28 EA02606E clothing. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cRqIw6MonQpGS1TfFaYEllha14yZul2C++cL7Q85gkCKnikYCbGbl3hd QLJHIbszX7C50OTHS2ICCMXmCkhJW82uwZdixuRHOL+aF2vvkPWGuqzw bmungJmwKEIaAeFTQLAVa+gRF4ZDfOWe2i2DDomaAgtBzTC9EwB4omMy CAo= clothing. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eUp+Gv+zKjIOLIeK4ZOzEJTtMc4P/4fUa22OufvM1RwSGaOFwPJJM0QJ MztS6Lq0ImfFW1tJ+s7Zcgjsk/V1PnmwX/EzQYQizkUUNJoWt71FHtKW AZdFl9ngKNJjFHTkdZt7VdakIu37iRbK+CsWVIlkYN6ljKQrFJ7XTuvY mis= clothing. 86400 IN NSEC club. NS DS RRSIG NSEC club. 172800 IN NS ns1.dns.nic.club. club. 172800 IN NS ns2.dns.nic.club. club. 172800 IN NS ns3.dns.nic.club. club. 172800 IN NS ns4.dns.nic.club. club. 172800 IN NS ns5.dns.nic.club. club. 172800 IN NS ns6.dns.nic.club. club. 172800 IN NS ns7.dns.nic.club. club. 86400 IN DS 9346 8 1 3E247E0A6BC2660B58ABF34967A2EA60B7944568 club. 86400 IN DS 9346 8 2 3668A7F42E8BDCE70C17B8A8DE9F4505F8E10D4C1E95BBD3FB0DE6A4 88450C47 club. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iT7wP50RQ713/8A0FPGTj1RoNUY8XlAxnpayChXZAzwO7XYI4zV8ySp3 Zi129Jg5QxPwnB+J6xCr9CSDgc+wcFbE31qIvB6Fuw749+5728Ysb/48 jCZCnqirYht0+tZ2vdAlZOEoWHnAzXEXd6GfYrZm51D3naOyPPXB+gyn b0o= club. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ta/7/CPL9BAKYWTz6qDHYASrP4MBOZlYd/ZJ+YuT3XhBj65U2AG9kB1k 4o9ufYeRy3UlbmgiE0IByd/gpcZRiTlekFNfH0jJira0jGhfT+opoivT dqlpjmmMQgc8Ndh0FpCZ976o4qX0JdLjRxd6A/mbjQSpKdSbVoblQNqZ rfE= club. 86400 IN NSEC cm. NS DS RRSIG NSEC ns1.dns.nic.club. 172800 IN A 156.154.144.215 ns1.dns.nic.club. 172800 IN AAAA 2610:a1:1071::d7 ns2.dns.nic.club. 172800 IN A 156.154.145.215 ns2.dns.nic.club. 172800 IN AAAA 2610:a1:1072::d7 ns3.dns.nic.club. 172800 IN A 156.154.159.215 ns3.dns.nic.club. 172800 IN AAAA 2610:a1:1073::d7 ns4.dns.nic.club. 172800 IN A 156.154.156.215 ns4.dns.nic.club. 172800 IN AAAA 2610:a1:1074::d7 ns5.dns.nic.club. 172800 IN A 156.154.157.215 ns5.dns.nic.club. 172800 IN AAAA 2610:a1:1075::d7 ns6.dns.nic.club. 172800 IN A 156.154.158.215 ns6.dns.nic.club. 172800 IN AAAA 2610:a1:1076::d7 ns7.dns.nic.club. 172800 IN A 207.34.5.10 ns7.dns.nic.club. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e cm. 172800 IN NS cm.cctld.authdns.ripe.net. cm. 172800 IN NS ns.itu.ch. cm. 172800 IN NS kim.camnet.cm. cm. 172800 IN NS lom.camnet.cm. cm. 172800 IN NS auth02.ns.uu.net. cm. 172800 IN NS sanaga.camnet.cm. cm. 86400 IN NSEC cn. NS RRSIG NSEC cm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . lcTLjFcDFEoziDZUsTCcl0V5XJc9Tk4QxVbA9B3U4lwIuJdHfe6bpOis /9IQZ9459GXWKNE/Fb/SpZNYj3jvI1LsfPaHgKr07+e01SOXMIN8Fa+b lkVflTw1BDxR7LIKfNJG/2G5010l5fqPTg1sl0H5gcW1HozbzTRst3oJ kw4= kim.camnet.cm. 172800 IN A 195.24.192.35 lom.camnet.cm. 172800 IN A 195.24.192.34 sanaga.camnet.cm. 172800 IN A 195.24.192.17 cn. 86400 IN NSEC co. NS DS RRSIG NSEC cn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qdNp9XKqnw8tBIXGMTf0NSmZxLzxQU0qL9EFiQyjUlNh88mxht5kFQwv AujUJ0BoGr02RHP+DouC+VaCPR/klf14rl6XlZqZdQZLsn/G0QqJvBuI ZzGkJRmTBhP6nHt25SDaSTCz+ifv+9FES3zwtYS8VPdZkyUDGfb1i9R+ aaA= cn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . FBn+YlGHSuxX9SzLejfnkN6brRziCWEHvV5n39wLVOfgNVZ9jWtSFIG9 eZcBbclRv/131+O1mqOmLcqu0fBEcKBWGZOcWRXSyyCwYsJg8/krpd3O IDBEdYxry+OF7vsILMU3Eyh6PMKW9WVxp4hfdRbOCWZs3rScWLHuzBWe z/Y= cn. 172800 IN NS a.dns.cn. cn. 172800 IN NS b.dns.cn. cn. 172800 IN NS c.dns.cn. cn. 172800 IN NS d.dns.cn. cn. 172800 IN NS e.dns.cn. cn. 172800 IN NS ns.cernet.net. cn. 86400 IN DS 54694 8 2 ED958DDCD959A23D3181CCC4610AE4B2166A072A057B95DDDCCD4232 56441C1A ns1.conac.cn. 172800 IN A 111.235.161.1 ns1.conac.cn. 172800 IN AAAA 2401:b400:1::1 ns2.conac.cn. 172800 IN A 111.235.162.1 ns2.conac.cn. 172800 IN AAAA 2401:b400:8::1 ns3.conac.cn. 172800 IN A 111.235.163.1 ns3.conac.cn. 172800 IN AAAA 2401:b400:9::1 ns4.conac.cn. 172800 IN A 111.235.164.1 ns5.conac.cn. 172800 IN A 111.235.165.1 a.dns.cn. 172800 IN A 203.119.25.1 a.dns.cn. 172800 IN AAAA 2001:dc7::1 b.dns.cn. 172800 IN A 203.119.26.1 c.dns.cn. 172800 IN A 203.119.27.1 d.dns.cn. 172800 IN A 203.119.28.1 d.dns.cn. 172800 IN AAAA 2001:dc7:1000::1 e.dns.cn. 172800 IN A 203.119.29.1 h.dns.cn. 172800 IN A 125.208.32.1 h.dns.cn. 172800 IN AAAA 2001:dc7:fffe::1 i.dns.cn. 172800 IN A 125.208.33.1 i.dns.cn. 172800 IN AAAA 2001:dc7:ffff::1 j.dns.cn. 172800 IN A 125.208.34.1 k.dns.cn. 172800 IN A 125.208.35.1 l.dns.cn. 172800 IN A 125.208.36.1 a.ngtld.cn. 172800 IN A 125.208.40.1 a.ngtld.cn. 172800 IN AAAA 2001:dc7:ffc1::1 b.ngtld.cn. 172800 IN A 125.208.41.1 b.ngtld.cn. 172800 IN AAAA 2001:dc7:ffc2::1 c.ngtld.cn. 172800 IN A 125.208.42.1 c.ngtld.cn. 172800 IN AAAA 2001:dc7:ffc3::1 d.ngtld.cn. 172800 IN A 125.208.43.1 e.ngtld.cn. 172800 IN A 125.208.44.1 co. 172800 IN NS ns1.cctld.co. co. 172800 IN NS ns2.cctld.co. co. 172800 IN NS ns3.cctld.co. co. 172800 IN NS ns4.cctld.co. co. 172800 IN NS ns5.cctld.co. co. 172800 IN NS ns6.cctld.co. co. 86400 IN DS 27859 8 1 63D2DAEB4D479BD4DFF4202D9BDC82B309C2CCD5 co. 86400 IN DS 27859 8 2 EF8F5B56FA9A79EF29A82330DB625BA19CE3A5B140B24287855DDAAA 03EA369B co. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . AIBcx78R5pAUv6abTw2fYZ9Kme/TepewdJ+yKcyHiLtZzuixE4WnsqsI L/BVhtklNe8Hqyu2JGV/7DEtLiMfijPUAMQOpoC81gbobIpH8a9eq04z DzpVjVvs4ufcwFp60K0eE/vTI+1IRL2BFzc2yZkX2nk+lrYIT6tSwU3Z lW8= co. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . YIPZ4OpeHexVnJ1ld988RGp+B9KLtPcc8gADXDEOgc7P9WWgKHJBFiPq uVB2ZOO0+uicxgVP16RuzxZX80BlNZnXyUqwNfspd0RzjfyM/gpegWwF MbVVMeixzuGb2PvQECuHpMivw3fI2Je92U3nEt1xlMy6AdpO+mHTCs0x w30= co. 86400 IN NSEC codes. NS DS RRSIG NSEC ns1.cctld.co. 172800 IN A 156.154.100.25 ns1.cctld.co. 172800 IN AAAA 2001:502:2eda::21 ns2.cctld.co. 172800 IN A 156.154.101.25 ns2.cctld.co. 172800 IN AAAA 2001:502:ad09::21 ns3.cctld.co. 172800 IN A 156.154.102.25 ns3.cctld.co. 172800 IN AAAA 2610:a1:1009::21 ns4.cctld.co. 172800 IN A 156.154.103.25 ns4.cctld.co. 172800 IN AAAA 2610:a1:1010::21 ns5.cctld.co. 172800 IN A 156.154.104.25 ns5.cctld.co. 172800 IN AAAA 2610:a1:1011::21 ns6.cctld.co. 172800 IN A 156.154.105.25 ns6.cctld.co. 172800 IN AAAA 2610:a1:1012::21 codes. 172800 IN NS demand.beta.aridns.net.au. codes. 172800 IN NS demand.alpha.aridns.net.au. codes. 172800 IN NS demand.delta.aridns.net.au. codes. 172800 IN NS demand.gamma.aridns.net.au. codes. 86400 IN DS 27250 8 2 FE5F7FDA8B08DB3EF8B4B05DD3ED27C9387DAE66543F9D5870E402D1 1D7B2DDF codes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WpONRhJ0eEJRLGqmW8ly9eS+hgzPQ4cnHFafof2Z3bBW3IyBa8lmdFMv fq8XHtFN7BV3WOyiBz+ntEi6/YGkMi16uJ4mBK6CRinAgZaHjwCNcic3 QZ4+OpW0IdsT/txjUWKT3+6mMILCaoLjKu3HDdcNV18iYas7i0/Tk2Q0 9ZA= codes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jZQPL1Dhhmx4TAGm0FvJx/X8bccKxCJzlZ+3OZCIB5CrERjkNPtTx+d8 4OVlysUiNRUJ9BBtbU2ECbJC2gt5LKsGy3ZLkjFlEe9GqbTNzc6Jsap2 877JV7t5lc94h2GcpHdXm12VEa2je0i2BiwnfApRt4PzmOY8znLAejVh cKc= codes. 86400 IN NSEC coffee. NS DS RRSIG NSEC coffee. 172800 IN NS demand.beta.aridns.net.au. coffee. 172800 IN NS demand.alpha.aridns.net.au. coffee. 172800 IN NS demand.delta.aridns.net.au. coffee. 172800 IN NS demand.gamma.aridns.net.au. coffee. 86400 IN DS 41122 8 2 6CCD81F37B53B3959B28C8BE299BD41FACBE306676E636FFF9556AEA A1948F2C coffee. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . T9GPGPQ+HDahjoim90zh3wYYSuJnHTcYLpPMExnjU4uILCn4wB0pI/l5 S4hEO1Yfje/ysjNHotwjQQ1DY5QjZKec6DAEctDXD9Kum6Pz160VrS3M EK2MyOKXPTDAGygbEhg9vjzF46B97Shtnf0NPrqr9dviNMd63dzY0u8V oDs= coffee. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MBWctDjLCRqMx6Hg3tBlpokb6vctSWmHm/XqCVWGx19elrgjt5d73J4x lAcoiyLAH0Y/Ug6fE2lLJCNIP0hBuU61DbVZW+822x0Dv5Mz/auAqG2w 3o/ksGbuVeCMFkRWA8SyNjXlxphpRApmEZBlq+KtSnyUHywL091c/tNC n00= coffee. 86400 IN NSEC com. NS DS RRSIG NSEC com. 86400 IN NSEC community. NS DS RRSIG NSEC com. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Vbr/xatYqKwWnrziR5TqEG1/dcQAHADsjB3nX/qDWV+WkTnIfFKVMyEn mO+m6eAwjdAQAhc1ulXWZZUNYrJKUUazBrXIhRWMjyv6RaO9yjJBVNs0 NeleJi9UwqxrctZC0LVtmSURy1dtm8ew6/pLMS2j9flr8x/6FZ/Toen9 nRA= com. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cYMUx01ATxj7aUmi3UcANxm4y5RUS2zCWnTZ47bCziUqRMNfJeywYf7W oPDl+EtjHI18x7hE+PspjQ0sWXp+HHIF61S3geRw3DPpk7mOE252zL9+ W5F+O7w3wgcv6rnkjIHKW9BXHoW7qhghIxeZf8RdzrKTLDNqHMCIbYzJ wvs= com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 ns.amarshallinc.com. 172800 IN A 71.163.249.97 ns.blacknightsolutions.com. 172800 IN A 217.114.173.6 ns.blacknightsolutions.com. 172800 IN AAAA 2a01:a8:fe00::2 ns2.blacknightsolutions.com. 172800 IN A 82.96.97.64 ns2.blacknightsolutions.com. 172800 IN AAAA 2001:1bc0:ab:3::2 ns-tld1.charlestonroadregistry.com. 172800 IN A 216.239.32.105 ns-tld1.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:32::69 ns-tld2.charlestonroadregistry.com. 172800 IN A 216.239.34.105 ns-tld2.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:34::69 ns-tld3.charlestonroadregistry.com. 172800 IN A 216.239.36.105 ns-tld3.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:36::69 ns-tld4.charlestonroadregistry.com. 172800 IN A 216.239.38.105 ns-tld4.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4802:38::69 ns-tld5.charlestonroadregistry.com. 172800 IN A 216.239.60.105 ns-tld5.charlestonroadregistry.com. 172800 IN AAAA 2001:4860:4805::69 uucp-gw-1.pa.dec.com. 172800 IN A 204.123.2.18 uucp-gw-2.pa.dec.com. 172800 IN A 204.123.2.19 dns3.dotukr.com. 172800 IN A 37.187.75.31 dns3.dotukr.com. 172800 IN AAAA 2001:41d0:a:2b1f::1 austin.gh.com. 172800 IN A 196.3.64.1 mantse.gh.com. 172800 IN A 193.194.185.2 ns1.iafrica.com. 172800 IN A 196.7.0.139 hoppy.iom.com. 172800 IN A 217.23.163.140 pebbles.iom.com. 172800 IN A 80.168.83.242 tld.isc-sns.com. 172800 IN A 38.103.2.3 ns-mg.malagasy.com. 172800 IN A 87.98.132.231 ns1.neoip.com. 172800 IN A 62.90.247.118 ns2.neoip.com. 172800 IN A 208.109.17.150 ns5.nominum.com. 172800 IN A 74.121.127.35 a5.nstld.com. 172800 IN A 192.5.6.34 a6.nstld.com. 172800 IN A 192.5.6.35 c5.nstld.com. 172800 IN A 192.26.92.34 c6.nstld.com. 172800 IN A 192.26.92.35 d5.nstld.com. 172800 IN A 192.31.80.34 d6.nstld.com. 172800 IN A 192.31.80.35 f5.nstld.com. 172800 IN A 192.35.51.34 f5.nstld.com. 172800 IN AAAA 2001:503:d414::2:34 f6.nstld.com. 172800 IN A 192.35.51.35 f6.nstld.com. 172800 IN AAAA 2001:503:d414::2:35 g5.nstld.com. 172800 IN A 192.42.93.34 g6.nstld.com. 172800 IN A 192.42.93.35 h5.nstld.com. 172800 IN A 192.54.112.34 h5.nstld.com. 172800 IN AAAA 2001:502:8cc::2:34 h6.nstld.com. 172800 IN A 192.54.112.35 h6.nstld.com. 172800 IN AAAA 2001:502:8cc::2:35 j6.nstld.com. 172800 IN A 192.48.79.35 k6.nstld.com. 172800 IN A 192.52.178.35 l5.nstld.com. 172800 IN A 192.41.162.34 l6.nstld.com. 172800 IN A 192.41.162.35 m6.nstld.com. 172800 IN A 192.55.83.35 ns1.orangecaraibe.com. 172800 IN A 193.251.160.222 ns1.pair.com. 172800 IN A 209.68.1.11 kynse01.perimeterusa.com. 172800 IN A 216.54.168.26 kynse02.perimeterusa.com. 172800 IN A 216.54.168.27 kynse03.perimeterusa.com. 172800 IN A 216.54.168.28 kynsw01.perimeterusa.com. 172800 IN A 165.212.160.15 kynsw02.perimeterusa.com. 172800 IN A 165.212.160.16 kynsw03.perimeterusa.com. 172800 IN A 165.212.160.17 rain.psg.com. 172800 IN A 147.28.0.34 rip.psg.com. 172800 IN A 147.28.0.39 rip.psg.com. 172800 IN AAAA 2001:418:1::39 ns1.net.reach.com. 172800 IN A 134.159.2.140 ns2.tojikiston.com. 172800 IN A 193.111.11.4 dns1.tld.tutby.com. 172800 IN A 178.124.133.53 dns2.tld.tutby.com. 172800 IN A 93.125.30.44 dns3.tld.tutby.com. 172800 IN A 195.137.160.10 dns3.tld.tutby.com. 172800 IN AAAA 2a01:d8:2:1::2 dns4.tld.tutby.com. 172800 IN A 62.212.73.101 dns5.tld.tutby.com. 172800 IN A 46.165.217.94 dns6.tld.tutby.com. 172800 IN A 108.59.8.66 dns7.tld.tutby.com. 172800 IN A 103.23.93.36 dns1.u-registry.com. 172800 IN A 184.22.82.74 dns1.u-registry.com. 172800 IN AAAA 2607:f878:3:39c::2 a.zdnscloud.com. 172800 IN A 1.8.240.1 b.zdnscloud.com. 172800 IN A 1.8.241.1 c.zdnscloud.com. 172800 IN A 1.8.242.1 d.zdnscloud.com. 172800 IN A 1.8.243.1 e.zdnscloud.com. 172800 IN A 119.167.248.154 f.zdnscloud.com. 172800 IN A 182.131.23.22 g.zdnscloud.com. 172800 IN A 111.12.148.111 i.zdnscloud.com. 172800 IN AAAA 2401:8d00:1::1 j.zdnscloud.com. 172800 IN AAAA 2401:8d00:2::1 community. 172800 IN NS demand.beta.aridns.net.au. community. 172800 IN NS demand.alpha.aridns.net.au. community. 172800 IN NS demand.delta.aridns.net.au. community. 172800 IN NS demand.gamma.aridns.net.au. community. 86400 IN DS 53317 8 2 755228E2F18777FFC5DA203D2984565804E3236ABC72B3762E832171 E977C423 community. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tdETGIAoBH+3wWIJaCfNqoSD4GH/BHuS55E/xOcFBq6JnP9vW+rzSygH kXhVSG/BRNWDpPC7IOiP/+BOQB///0SMoki0Cajl2U30tZFegIsjtqiP 3u+F1ln1dDjkspdM3pz8R9iy4iZnOe4LYDRnmF9uP3M7/uuPPasx9RTj YtI= community. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hkCF4asNVJmjykCxomKXbo1zD8QpBlmeoim+vpL5d4yUdowY6B+fCSzg altlw9cZD5m8odVUqayUtG9o6M3rrTSWGVYO4YJrTigaMu5qQXPBB6a6 JTYqLiutRGo9cBTSAkashXzdKN3FExBszserN1XKXSLJVAdYBsXi/da/ VhY= community. 86400 IN NSEC company. NS DS RRSIG NSEC company. 172800 IN NS demand.beta.aridns.net.au. company. 172800 IN NS demand.alpha.aridns.net.au. company. 172800 IN NS demand.delta.aridns.net.au. company. 172800 IN NS demand.gamma.aridns.net.au. company. 86400 IN DS 1405 8 2 DD824CAD96C6CBC6A29CF7847CABAD991908ADC0F88EE9EA52763F41 C93A99CF company. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jwLP49LyRs2nprSaawjfY03AVeJgL+1Ez+33HnnbrRBKcIG9DHOVavcw aZGAmlurExR4cEU2K8hAr2s55ZqAOAy5fhcZazqmsXSQdgeS5/xH4iZD 1yHzLT0XFP6JQLIiAB345Ahbn/8OaP12PFhVoHpXTPHCZ31WmVCJoxjI CwQ= company. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bpmbivVQTpkH2yk0zF5iMpZvMdrZOfkDsEuvmb8Ko6sZ8nSIJXEYGmZA GGWsxOX2rx6LpWE4R6W7KZZKseTbQa0X83Ra2URT7Hec7m3DeHpiUTT5 ZbqdQ9T2mK9CcewF40Dl01Z/5zxC0bmEhi330FFdPva1Msv6YR3lBFTk U90= company. 86400 IN NSEC computer. NS DS RRSIG NSEC computer. 172800 IN NS demand.beta.aridns.net.au. computer. 172800 IN NS demand.alpha.aridns.net.au. computer. 172800 IN NS demand.delta.aridns.net.au. computer. 172800 IN NS demand.gamma.aridns.net.au. computer. 86400 IN DS 7609 8 2 9DE689F8D8A206CDC040867BED094D9095468046181CB2EF827964CA 4C1FBED5 computer. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PSNw30QCJ/fS60g4bP+82VAUPcoGFU8xXu2Yue74I9PXlJ9ZHRY3v6N4 YGxjxS/ZdAlBhXJVAouPhWypIE38ezySaF5ork5i5/9U08R8EZE7M4MT Q/H4Ef2czjqo4d1XIbwCcTbzsxEwsOCfj+OJQ4YI4bigJvjqub0FeRhO CMs= computer. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rwJMRwh3wOlN44ggx3lv5YvvCZp6ApTfo0hjK6LB3W9fEoF4lHGNlXhf 4icwtFO6puHL7FxY0Z4YuhI5H0h4exgiUsmlvswDRLz8mN9opqC1Dtrg k+8TiIjSo+O62J8SklBiCPdyeSzZLjFLoOZdFh33p6gYjOwtq+sJVzrT 2hM= computer. 86400 IN NSEC construction. NS DS RRSIG NSEC construction. 172800 IN NS demand.beta.aridns.net.au. construction. 172800 IN NS demand.alpha.aridns.net.au. construction. 172800 IN NS demand.delta.aridns.net.au. construction. 172800 IN NS demand.gamma.aridns.net.au. construction. 86400 IN DS 25387 8 2 0E55A903286DA4CCADC2AEDCB01AEC17D9C7DF3AA8199435C6384CD0 ACB1544C construction. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MbRX8J+gro1NQeQNjt0WW7RBMNTQVlsWoc31G3yUZaAi0WY9+MojmY79 RYp8qe8KbWbwciTh6s4sAMOFnTE/3+nSBr51phX6XCwZnHfgdOIuqQxU lVvXRPit+QVsnPcPzIuG8uVwcLxb0/w854pg6gE2Q0hcMDxp3HMyhDtf 07g= construction. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fbLRIW5Gbx3wf4r+U6Ki7NTZMbCRd2W53n4n7k5W6orex3KGXHBgy1zW G+3gyajKyGDdF+6nIjKH3Ovo7rE2YUWFTW2L3jCNTLRNrC4YY0Cvf8+R 0eAAdlxQHwHrK6ST66x34p67kI1/0ifbreaVjI2XX3NntxjRMU6xk0zK lmM= construction. 86400 IN NSEC contractors. NS DS RRSIG NSEC contractors. 172800 IN NS demand.beta.aridns.net.au. contractors. 172800 IN NS demand.alpha.aridns.net.au. contractors. 172800 IN NS demand.delta.aridns.net.au. contractors. 172800 IN NS demand.gamma.aridns.net.au. contractors. 86400 IN DS 41329 8 2 7CEAEF507AFD5AE73139D4D7E66A40C8B779B5360ABDDCFD7E420C50 3D51A34F contractors. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PMKyvskJc2k48KaJMKaHj7krfjbMB2WRtdSOmrehQv6op0S2JWhIxh/S v1vtcBvQ7fFS4OWlwSS0hiR7WhQqVdhrZ9j/S12RTyzPKaSnLplTv/nU jSs1VKckyGN3uaBf7LxVtkPQip6bqGoTM57w1AEBE5jsqBhoXERHY1Qb 4EY= contractors. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QFoIWqT7ZCZFsxBfSwGDD6USe4dQReKfuAA+6VewrmjfqSdCEkr0xwEJ xnQmWR9L1kGd7/n2+OQCNyXIe23hFK6sT7o0w3MAVPBZP2A2C+LjzLVk 9jB1a8ZXe6xwKItZko45AoX8DqP04qOTh/NHWcet2V08XMvncm5otPhl bf0= contractors. 86400 IN NSEC cool. NS DS RRSIG NSEC cool. 172800 IN NS demand.beta.aridns.net.au. cool. 172800 IN NS demand.alpha.aridns.net.au. cool. 172800 IN NS demand.delta.aridns.net.au. cool. 172800 IN NS demand.gamma.aridns.net.au. cool. 86400 IN DS 42496 8 2 A929B4028524A61985D70357680987D69D74444331A25A049A3FE950 F8F734A4 cool. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . IO7UyIUio6fQi5nDwHXcACbMcPCULQBSg4ewlCJpsCDjOB7fzmv5mrDd PISn6hnRUWSzWQXFnbZkWzHOY6JEzZ4N8M0v2wj2Lqx/JTLVghu5pi7P iI+t41z7oSraeD9wyrJEJCZHDNmyZMmekdahwybNPJgMGwX74EoPfmCN 3CY= cool. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . f1AXCI5fGJ5KdwcgvqWkVcWO2GyP9LiCf1PTh4EwwmPMg4UPNfVuIpVJ M15NAbvb/qbX4uQqIA3ktNsqJ5T4DStj01ljFCFWhT//USWNvoNqXNV5 OEfx8eFdmkoju95V3RyYFhYVDTDl5fb1+Gk28THUxmq6FMY2L3VbHZDA ir4= cool. 86400 IN NSEC coop. NS DS RRSIG NSEC coop. 172800 IN NS coop1.dyntld.net. coop. 172800 IN NS coop2.dyntld.net. coop. 172800 IN NS coop3.dyntld.net. coop. 172800 IN NS coop4.dyntld.net. coop. 86400 IN NSEC cr. NS RRSIG NSEC coop. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LnHNIFXYvxUNGsEZUaDXD1TEkPQBKWVHKlKZr6BMTv4ZIchgvdQVv64h abx7MaJDbGq73wko11c66VZDtXDE4mdwimXxFLjxKZIq07u5S+OxnSvo sM8YDYHKlrHYI/tceePSSALdMuOU0BP3Y63SI+vZcazd1eS2NJikOCbH Hr8= cr. 86400 IN NSEC cu. NS DS RRSIG NSEC cr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . X1fomCvtI8tU4pU6c3YXDiSTaJXuyBeSqDk9Bxb9RIsUzWQHkQxMo0g9 1xCL7FQDQMcap5BrDdCk9V28VwVc61n41IhRrJ2oS/93w06egzAhvyR0 fS5vM8Mr3S2icyuSM7xiHvGe9MFtomMcfZktrCMf4KgGy12FiV7dBoWn F/E= cr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VaPUEbjhdfmhF2/yGnFeRCKOrEq4HXFbNh/Ju0kLdKI9ttyLPiyFak03 ROAaKfcgL2Bfk2rEbbBqeORT6cTMkAxab552c987Hw42cPsGg2asZU5s OOw93W6ob9b0v8Ra5EZkLqHImSDYKs+m2S2e9urWsp5Bys3baFR93Fdj 84o= cr. 172800 IN NS a.ns.cr. cr. 172800 IN NS b.ns.cr. cr. 172800 IN NS c.ns.cr. cr. 172800 IN NS d.ns.cr. cr. 172800 IN NS e.ns.cr. cr. 172800 IN NS f.ns.cr. cr. 172800 IN NS ns3.nic.mx. cr. 172800 IN NS ns-ext.nic.cl. cr. 86400 IN DS 29890 8 2 0DD32D91CBBBA6890E1AF399519A7AD3646EDF238C7FBFB8C5B50016 5FBB9299 ns.cr. 172800 IN A 163.178.8.2 a.ns.cr. 172800 IN A 200.107.82.100 a.ns.cr. 172800 IN AAAA 2001:13c7:7004:1::d100 b.ns.cr. 172800 IN A 198.57.204.98 c.ns.cr. 172800 IN A 193.0.9.69 d.ns.cr. 172800 IN A 38.103.2.3 e.ns.cr. 172800 IN A 72.52.71.3 e.ns.cr. 172800 IN AAAA 2001:470:1a::3 f.ns.cr. 172800 IN A 63.243.194.3 f.ns.cr. 172800 IN AAAA 2001:5a0:10::3 cu. 172800 IN NS cu.cctld.authdns.ripe.net. cu. 172800 IN NS ns.dns.br. cu. 172800 IN NS ns.ceniai.net.cu. cu. 172800 IN NS ns2.gip.net. cu. 172800 IN NS ns2.ceniai.net.cu. cu. 172800 IN NS rip.psg.com. cu. 86400 IN NSEC cv. NS RRSIG NSEC cu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . AevGvfSG/aCEwFCrVWloyjV0Sc81GFQtXTLPkpdUIhNojVbLTmErlYUG 2Hj4x/aaCLLUfakJMPuPkRgp3gayjo/2UkzwM4o5ealOI7R+HPLcb1rU A8fZzi3w1W1/lipz2s/KgfIZBE0/vfMheTen35v1R3ZR2QROz0eNxgSF 7ug= ns.ceniai.net.cu. 172800 IN A 169.158.128.136 ns.ceniai.net.cu. 172800 IN AAAA 2001:1340:1:128::136 ns2.ceniai.net.cu. 172800 IN A 169.158.128.88 cv. 172800 IN NS ns.dns.cv. cv. 172800 IN NS ns01.fccn.pt. cv. 172800 IN NS auth02.ns.uu.net. cv. 172800 IN NS ns-ext.isc.org. cv. 172800 IN NS phobos.fccn.pt. cv. 172800 IN NS sns-pb.isc.org. cv. 86400 IN NSEC cw. NS RRSIG NSEC cv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ac6+hFWLtL5XD9rb/eoSsymcmOBAhIjErCVk4ADSpJ06T4AupsJ49yQG bQGLH4N+CFKwRa4HKzYYdQ1UmZYeFS0/cs4KZLQe+T2BjQ4lSWIWeUIG wpnIDOowl2/QrD93Wn+NBU2Bx6LrMNrhmmpaiFBIvQDmzl3Nhn2NAQvL 6OU= ns.dns.cv. 172800 IN A 41.221.192.220 cw. 172800 IN NS cw.cctld.authdns.ripe.net. cw. 172800 IN NS ns0.ja.net. cw. 172800 IN NS engine0.una.an. cw. 172800 IN NS engine2.una.an. cw. 172800 IN NS engine3.una.an. cw. 172800 IN NS kadushi.curinfo.an. cw. 172800 IN NS ns01-server.curinfo.an. cw. 86400 IN NSEC cx. NS RRSIG NSEC cw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . NaAxDfntRBcPgULhSLokGozO1kZMX5jyqcPoYK63JgySno0rZ5mNoArO msWwGBOykzQ/7TyCy9Add4X61lHV/72ua1GPNhm6Vm7ZSCJlAOJYj/8I jBeZE+XJ2XaoVzjWVLFEyKjiOlXrFmzjBwEG5DDNSV2TPuwRxAJPEq4I m9o= cx. 172800 IN NS ns.anycast.nic.cx. cx. 172800 IN NS cx1.dyntld.net. cx. 172800 IN NS cx3.dyntld.net. cx. 172800 IN NS sns-pb.isc.org. cx. 86400 IN DS 6500 8 2 4854A102492CE0C50C714F366EBBD520CBA38BBEFC91CF295EEE8E6E F7D48CA5 cx. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Sn1DKbkz+cS1RR4cXot0E3BUhODsCsETbPzoSPcYsMpK2qPX4MHTzeq5 t3RBFmrFcJqMbLjl5cYnN4txdx7EkE5KSZx9E6dkGNG5B1JcoxtNwQXf VGNnTroKbwCC7qGrc/Mze+lojMcU/Kk4OXJkB1J9vR8+LA1FAPuH2RRm TOw= cx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vpeN4M9/PCDddMPfps7atl/M1Qzvn7Q1XcpPKmb4jIi4jw5vTo4cwo0u EWzStLb1r/bgZ6U9ubQtawqQtB1WtoLRneXmpOjKNvVqvW0xneU4IUtl 9/CINw9+/IB03w4SDf5OXoDdSLLJXixDQcHHnwF+AyBmyEL4JsRds1x4 U2M= cx. 86400 IN NSEC cy. NS DS RRSIG NSEC ns.anycast.nic.cx. 172800 IN A 204.61.216.16 ns.anycast.nic.cx. 172800 IN AAAA 2001:500:14:6016:ad::1 cy. 172800 IN NS ns1.ucy.ac.cy. cy. 172800 IN NS ns2.ucy.ac.cy. cy. 172800 IN NS ns02.savvis.net. cy. 172800 IN NS sec3.apnic.net. cy. 172800 IN NS cy-ns.anycast.pch.net. cy. 172800 IN NS cynic.dns.cy. cy. 172800 IN NS estia.ics.forth.gr. cy. 86400 IN NSEC cz. NS RRSIG NSEC cy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MAb7dey241JZeCeGdjRUM9OZ0vbwF0pD/8hZX7j39q1fy1o/A/dQhcut JhI4FHkCMk6JYGe4Y6PfAh+gq2WKK4D6iHEymQnXKNerO1L4Ks05MT1g BkpZgWHeXMZkY6dMzceYTW2zklVW6FMkwSe3MGmS0bg98nKAbUGNqx9F 12k= ns1.ucy.ac.cy. 172800 IN A 194.42.1.50 ns2.ucy.ac.cy. 172800 IN A 194.42.1.55 cynic.dns.cy. 172800 IN A 194.42.29.1 cz. 86400 IN NSEC dance. NS DS RRSIG NSEC cz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . grrOMnbEKIDdrOaywcEKqEWpbOi5CfYmB6usTBdPa5DNsP7Rd+l6QAt3 5EFcw7oA772NDythSJkaFYd36K/flgl+brD8op2Z346hNWfR4BC36X1I 6ORiCV9P0/3RpaGcqQlV5HIZ8v0m/BprbSQCdI+psn89Zhuvojhthviq rCA= cz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Y58nS0pqgxAX+7HZjgt3UaD7t6riuTpb/olxmktKDJkgJl/0ziurVQqM V0BoVuAzG09Pv+1Xqilw/WMrXNsVLghAVsRUTH06oTNd33KD4DuW9Ogr NNWavd5xLHowva5oVa05PzWUK3ODxDgIei6TBuenKzb3jt9KYOrpJrBa l9M= cz. 172800 IN NS a.ns.nic.cz. cz. 172800 IN NS b.ns.nic.cz. cz. 172800 IN NS c.ns.nic.cz. cz. 172800 IN NS d.ns.nic.cz. cz. 86400 IN DS 54576 10 2 397E50C85EDE9CDE33F363A9E66FD1B216D788F8DD438A57A423A386 869C8F06 d.ext.nic.cz. 172800 IN A 193.29.206.2 d.ext.nic.cz. 172800 IN AAAA 2001:678:1::2 a.ns.nic.cz. 172800 IN A 194.0.12.1 a.ns.nic.cz. 172800 IN AAAA 2001:678:f::1 b.ns.nic.cz. 172800 IN A 194.0.13.1 b.ns.nic.cz. 172800 IN AAAA 2001:678:10::1 c.ns.nic.cz. 172800 IN A 194.0.14.1 c.ns.nic.cz. 172800 IN AAAA 2001:678:11::1 d.ns.nic.cz. 172800 IN A 193.29.206.1 d.ns.nic.cz. 172800 IN AAAA 2001:678:1::1 dance. 172800 IN NS demand.beta.aridns.net.au. dance. 172800 IN NS demand.alpha.aridns.net.au. dance. 172800 IN NS demand.delta.aridns.net.au. dance. 172800 IN NS demand.gamma.aridns.net.au. dance. 86400 IN DS 9412 8 2 46C6FA36DEC09F2C90C528D30FD86378FAC1F11A1D90AF55C42DA92C 1EB19EFF dance. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tp0IK622JLExv+1lq//1uCOL/HzJhrXrYUfkl7pnTy85uKvIFCCyoOv0 jhCKyuZndzX43JJeyZuSflkoLL365iMdRQB6BftDGVIoEfD/gNInlo4o 9SCxEd77M6ZWq2LiOPncPmcx+eRc30VHTqbezj3WCqjEF8nqADdG8QvH RIA= dance. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cOwWQjOILZDmmosOEoJ5zButUFCSdOU+6D++lkO9qv3hytHh8Xfd63wc 4LIXaQl4SY+2XYYEmXfXZijyPFxtO5LbpfavLKABZXcLF+aXJwFQw2hN /BOy22Hb4N4M1yxujblFAY0CUWC9vKRvdPDHxO9pc5cVotvOs6NANKe8 TOo= dance. 86400 IN NSEC dating. NS DS RRSIG NSEC dating. 172800 IN NS demand.beta.aridns.net.au. dating. 172800 IN NS demand.alpha.aridns.net.au. dating. 172800 IN NS demand.delta.aridns.net.au. dating. 172800 IN NS demand.gamma.aridns.net.au. dating. 86400 IN DS 55639 8 2 40AE1E3A7DAB8C5285D43ACA37EEC730D5FC604F770AE3B40C4C282A 165B3555 dating. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nagf9JZLm7swukfBBaYcO5FncbyRwd/kxvy5vbr+EnV6Rb/ZlQU5NvCB kGrscrIuL8au6T5XSXutZCAugicE03PLk8CkbGgSGNUyM38mcLyKsqnz +mhSpgEK06jOdgyDCcRpdYS6AlgFU/Wme/jlH3EdruCsN5bWJVGKLg2h FG4= dating. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TJkR8C8fK4bHFCgqPmuTJXov5i/f6RA3/eBywWFkOaq6fQTcje9rBtmg Yw0SP8OrT4pbdz4m8dqg2y0zQUtOne6OU/TfPI0ohe3dJaYaQ+KRyqGt MosCflE4MwGpW4SpkeOdlMz4jRnZbOH5T8aGfbs0CyqgL6VTXjVUtLEr 7bo= dating. 86400 IN NSEC de. NS DS RRSIG NSEC de. 86400 IN NSEC democrat. NS DS RRSIG NSEC de. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . B8vaTNWZCkHR3MlYBSq3HL8i1QGx7zTwR/+TQBrwlFaroq8qL4yPLmX8 uc25cMmpmSuDnqud56npINY032AuWgcmmuMAIrcZzu+4TpTB1MHgk//E +RI4oSvxMAD1zAwpU5YDlfEnDa8xBDVgxE3kwap9dFJospXj19m06S0C 9kk= de. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UPfjr2oDWCpJRqJT6Xor5qJOzXk0+blYqUcsDFGH6aiC0UfH7SOSHu2n JJ28j4YA64JhIro5oF+HRsUfF3kjqBEm7e2MhRZT7jwBBOqhGki7LADt MBNKyiYIu0z7ACklLJcAA8siVdI4+/3emS4Lh0pOJEiVMBjXgV55fFa7 JJQ= de. 172800 IN NS a.nic.de. de. 172800 IN NS f.nic.de. de. 172800 IN NS l.de.net. de. 172800 IN NS n.de.net. de. 172800 IN NS s.de.net. de. 172800 IN NS z.nic.de. de. 86400 IN DS 24220 8 2 FFE926ACA67ED94089390250F1F294AC84A6D84F9121DF73A79E439F 42E820C2 dns-ro.denic.de. 172800 IN A 81.91.161.99 dns7.denic.de. 172800 IN A 81.91.161.68 grdns-de.denic.de. 172800 IN A 81.91.161.80 pr-dns.denic.de. 172800 IN A 81.91.161.82 ns5.knipp.de. 172800 IN A 195.253.6.62 ns5.knipp.de. 172800 IN AAAA 2a01:5b0:0:29::3e a.nic.de. 172800 IN A 194.0.0.53 a.nic.de. 172800 IN AAAA 2001:678:2::53 f.nic.de. 172800 IN A 81.91.164.5 f.nic.de. 172800 IN AAAA 2a02:568:0:2::53 nsc.nic.de. 172800 IN A 81.91.161.84 z.nic.de. 172800 IN A 194.246.96.1 democrat. 172800 IN NS demand.beta.aridns.net.au. democrat. 172800 IN NS demand.alpha.aridns.net.au. democrat. 172800 IN NS demand.delta.aridns.net.au. democrat. 172800 IN NS demand.gamma.aridns.net.au. democrat. 86400 IN DS 31357 8 2 FFFEB75D5303AEA99EEDA8535BEDC3672FDF4C49329FF4A2FDCBFBFF A24D1A44 democrat. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . j9qVkty9eux/z3ewQeyQi/lXa9rGJnphFYzMaMpHIQ7Suimgg7ooasfW cmDnwpv5d2muk8cSVrhf1gbllij6P8KLl2ObIHUaYeYWO9REeWfPr1Cn H0q6oD3dYMlm7RsCkWSB9TjadEfMOHX7ilSO4ZcQ7iZUWJNI03nnhm4R fPg= democrat. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . M/8ogc6iwIs9O8l0nYiv5+Bdlj8OVOUeLNZ2Sp1Tc7SSeDFFZiAnIxeQ u4RJj4FjZEkaykycKJjgHsMSsdKL48AYMlbxRn3hjg0PmRmWp6ShXk+K hPZizOLu575QYVQHof9m2MhrxKeA2lok/mfc/slfVEo8IMrBMs8Uzi7z DC0= democrat. 86400 IN NSEC diamonds. NS DS RRSIG NSEC diamonds. 172800 IN NS demand.beta.aridns.net.au. diamonds. 172800 IN NS demand.alpha.aridns.net.au. diamonds. 172800 IN NS demand.delta.aridns.net.au. diamonds. 172800 IN NS demand.gamma.aridns.net.au. diamonds. 86400 IN DS 23956 8 2 A3719C79222E217C7EA8CC55EED0BD23B7769820BDFCFB4A7C6DCFC2 F2837697 diamonds. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . UvN2MkS8bGWgadGFP/S9c3/oI7xom+tbkcwckXNWgAOFP59ALcrAvvKD fm6ADK3BgMgxMWqzXoClPtxndkaJJlBeUH3yjsU9ad59eF9J6+iN9Nhb +bVUPV7atWsTn5rln7qeowPhzyZGlyeNTSMOAYUIFYKhLzDPgjbsiSIh Evc= diamonds. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . lbHLTyycb7t7ut9URZA2xr8PTOkP9aTnxov3YUQGs1CIx9E3Qpa3V38u VHq+GzdkFbMWGIStyA2+8EnqqwWFNzP9miJ28LZidbPjDBcn+mJLJonj GZh9jQkkJHxIsxssexod6o47pMrq9bfUhY47tHNgO8703dZpcIxx7EkB ppQ= diamonds. 86400 IN NSEC directory. NS DS RRSIG NSEC directory. 172800 IN NS demand.beta.aridns.net.au. directory. 172800 IN NS demand.alpha.aridns.net.au. directory. 172800 IN NS demand.delta.aridns.net.au. directory. 172800 IN NS demand.gamma.aridns.net.au. directory. 86400 IN DS 24919 8 2 9B4A3B25AE80501486985390FB3D0004E86E9F67E7DF28659AF1316C 0D281DAE directory. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . s6kspDef0lCCrJGfxE0i+kH5Fr45plUO223VbEJIdt38NADJ+uQsSi+M i3yNpwaAUKqe5KoNvLxkxjcChs964ydkFVIBpXGxkbY58upSpt/K68mJ A6OLTWbVu/pha4kTsTd+oZWQYwZHPsU3zRPCGxw/i2gy9fnto7N2FXx5 ELM= directory. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nx5ybqozkABPxxLNye2C6vItDoyIZUlHhqtTUhE4d8DNplaU4PNbX2qE L4DHHeK3Kj+vbTfQ631LiMqitrzgtQ2To4fMsgdHJBX0DWoeY97nDvYP 4tC9tIzd/+cvn7qzsd2aBmO7gA5tXeKW/Kl2t8jJzopQHQMmZx2utb8z YKE= directory. 86400 IN NSEC dj. NS DS RRSIG NSEC dj. 172800 IN NS bow.rain.fr. dj. 172800 IN NS bow.intnet.dj. dj. 86400 IN NSEC dk. NS RRSIG NSEC dj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kiHikLjPY+s8/IUzdDnDZXkQkreQruf5LREi+88LhVaMfsFbrIp0tRyz 2TqyM8C1+lH45/wclVfOq9ve0GF+qm3CKfX+caRGCUmjw/1dRwRjwD84 6SAK70yxXvxMPT/PYoNz2eZodbBdTa/3D7ULhS3/CwgY3AM8WIF2WMNy Bng= bow.intnet.dj. 172800 IN A 193.251.143.162 dk. 172800 IN NS a.nic.dk. dk. 172800 IN NS b.nic.dk. dk. 172800 IN NS c.nic.dk. dk. 172800 IN NS l.nic.dk. dk. 172800 IN NS p.nic.dk. dk. 172800 IN NS s.nic.dk. dk. 86400 IN DS 26887 8 2 A1AB8546B80E438A7DFE0EC559A7088EC5AED3C4E0D26B1B60ED3735 F853DFD7 dk. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . I8QbCG5axeW7bbIaVn+02SRpZD+Ko74zeRnHLGRn3AKSyenaLWflwR38 q44Ci6DfGO3339OGTRM3NcIvQehdjV/E2i31zttMgqTx5IDWLoY8/7dX w6SBxQ6OUqIYVL9EZVzuxM3w57vFfaJGg6CqZmuBvW3jG60KMenxuhQ9 Z9o= dk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bNquyIVG6W9TF1pJYkngsH+X2OO1BuI2xX0vmDokQyr6YwOKSsUCbF5z 3MZnJw1jVm0ZQAlHPjnILm6kSNosFG6fLAGzVhI830j5TcOxA/eFyfL9 Q3uUr9e9dSNznwdczsYPkgW2JXEfpHW8msMbLJ0wS2Ytd6JwCw9IL+qW /PQ= dk. 86400 IN NSEC dm. NS DS RRSIG NSEC a.nic.dk. 172800 IN A 212.88.78.122 b.nic.dk. 172800 IN A 193.163.102.222 b.nic.dk. 172800 IN AAAA 2a01:630:0:80::53 c.nic.dk. 172800 IN A 208.76.168.244 l.nic.dk. 172800 IN A 192.38.7.242 l.nic.dk. 172800 IN AAAA 2001:7f8:1f::1835:242:0 p.nic.dk. 172800 IN A 194.0.47.42 p.nic.dk. 172800 IN AAAA 2001:678:78:42:ad::53 s.nic.dk. 172800 IN A 77.72.229.252 s.nic.dk. 172800 IN AAAA 2a01:3f0:0:303::53 dm. 172800 IN NS ns.anycast.nic.dm. dm. 172800 IN NS ns.blacknightsolutions.com. dm. 172800 IN NS ns2.nic.dm. dm. 172800 IN NS ns2.blacknightsolutions.com. dm. 86400 IN NSEC do. NS RRSIG NSEC dm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hBKtP2o3/w/zNItxnrCt259rpE8LlG8mPGaZtHV3VQMD2LhobgRBPmkf Vf9JLWFulERLTclp91MUCs9fVGPnUS65hxAOH6w1/iIT6HaCl0tifHcm V570ZPs98eFbB+eU/zBJ6uhoBJBCPObWWXn5iD5tLb/BBMG/KQxpMZD9 dNQ= ns.anycast.nic.dm. 172800 IN A 204.61.216.18 ns2.nic.dm. 172800 IN A 199.127.197.69 do. 172800 IN NS ns.nic.do. do. 172800 IN NS ns1.nic.do. do. 172800 IN NS ns2.nic.do. do. 172800 IN NS ns3.nic.do. do. 172800 IN NS ns3.nic.mx. do. 172800 IN NS do-dns.nic.pr. do. 172800 IN NS phloem.uoregon.edu. do. 172800 IN NS sns-pb.isc.org. do. 86400 IN NSEC domains. NS RRSIG NSEC do. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UrGWAVcm4ERkUGBKWgGGwCX62N0L5AHLIr/4OyWp2Zjzs2NGFQFusECl eyvgXk5vnDdtlcspHtw9LDBeAzufHAMjIJbEjEE6aGn5cx/Ieez9caNc ldgur2YKDxXggwjNNwlCsHjygIQBQZXpDHMBkW0tR87whZ8cQdFIPru5 iDg= ns.nic.do. 172800 IN A 200.16.91.228 ns.nic.do. 172800 IN AAAA 2001:13e0:85d0:101::228 ns1.nic.do. 172800 IN A 200.16.91.226 ns1.nic.do. 172800 IN AAAA 2001:13e0:85d0:101::226 ns2.nic.do. 172800 IN A 200.16.90.162 ns2.nic.do. 172800 IN AAAA 2001:13e0:5d0:101::162 ns3.nic.do. 172800 IN A 149.20.61.87 ns3.nic.do. 172800 IN AAAA 2001:4f8:3:3d:2e0:81ff:fe46:41f2 domains. 172800 IN NS demand.beta.aridns.net.au. domains. 172800 IN NS demand.alpha.aridns.net.au. domains. 172800 IN NS demand.delta.aridns.net.au. domains. 172800 IN NS demand.gamma.aridns.net.au. domains. 86400 IN DS 28162 8 2 5712C07D52BDFB21F425E2DFCE866A42EE94B37D230876FF68A27FA6 4920C0B9 domains. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . plHAoK2r6+ESZv0zcv/u2K0fXyBIoEnerameeEqd5RWrBTTyfJU6IZqO SxTxaUHXlTay8zRZNTAIqsAPO6SQSolFd+mgQWMbW6UAJRgdqsKfIZiY oCO6KEjbZV9/zr+9bL9pM9mqiATHuVx1Sy731fPfxjwcVD6kw9EY2JRG iqc= domains. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CfLAZrUXS4YgAWGUI+Z0zR7+OTlJ09Qsgw/nggLF6W24KaJzalsgxUf7 J/e+oYsmtjGYtIOOjvbWSg3AB0SmTdLccLAfTvp7CKncwYcircMAWZgB p8GWCNkl2wCeGR/9MZdEe7cQOO3FNhH6eEQk7GH5m8yp5LbQQnCHjxu0 beQ= domains. 86400 IN NSEC dz. NS DS RRSIG NSEC dz. 86400 IN NSEC ec. NS RRSIG NSEC dz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . p7qZ/f4XjWs7XlX3VGnRBQ+EdwBPDTloj7CSeixcws5tzUI/pHvJnk+f 4DKbcvOPJlMIjrsloAVgjeoV4FJwc5Fto+YVZvYcr/VEf5EfDPL5pPef WW1CqsYzspBV2GYasdm1HQ73U60Flq2sufI0YduoHmXm/NX8jNLBOVRj b0M= dz. 172800 IN NS dz.cctld.authdns.ripe.net. dz. 172800 IN NS ns1.nic.dz. dz. 172800 IN NS ns2.nic.dz. dz. 172800 IN NS ns3.nic.fr. dz. 172800 IN NS ns-dz.afrinic.net. idn1.nic.dz. 172800 IN A 193.194.64.243 idn2.nic.dz. 172800 IN A 213.179.160.68 ns1.nic.dz. 172800 IN A 193.194.64.242 ns1.nic.dz. 172800 IN AAAA 2001:4340:1030:2::2 ns2.nic.dz. 172800 IN A 213.179.160.66 ec. 172800 IN NS n1.nic.ec. ec. 172800 IN NS n2.nic.ec. ec. 172800 IN NS n3.dns.ec. ec. 172800 IN NS sns-pb.isc.org. ec. 86400 IN NSEC edu. NS RRSIG NSEC ec. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GcAAxpklDagnw0d34ajb/hxWAqK3GbO7W2pO74pAybKWQwx8e1baeZqW dPsEXOcsUQ+tUJCz/fpAhP36pcpmujwMnpcMei04hmJ5arx3ZxCxDqgX q1xg5EHiOSPiGfgvgrBZnWIvT11Jt+TCkcjfAfYYqojyfHEuF2t/tTRf xyY= n3.dns.ec. 172800 IN A 204.61.216.39 n3.dns.ec. 172800 IN AAAA 2001:500:14:6039:ad::1 n1.nic.ec. 172800 IN A 200.12.198.1 n1.nic.ec. 172800 IN AAAA 2801:0:61::1 n2.nic.ec. 172800 IN A 200.12.199.1 n2.nic.ec. 172800 IN AAAA 2801:0:60::1 edu. 86400 IN NSEC education. NS DS RRSIG NSEC edu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OgWC/UdVY+DHAMHaUluNv8T//mkhHeRbIkbDp1JRJFx8i/NfTiSOWAbR Z0cQQrGMpyKukGits0EG08b16KfJfw0Iecz6m6fafyUZIa5cPW/S9NJ+ u6j1hrT0ocepWhCPdzfQP1L4xUNFNquKHdW6C6N7Vijp7b8mnnoliU3T qhA= edu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . NDIPra+e/cLUJjQMo3FkxcqZQJ7QZkQwIOEJkgjix9XlAIR6uY0phSNS gV8ODjo1S/vD9A9EyaO18DzdhAWcDGRy7S5/MfyWxI4hhrtDCWpS/O4V od4Wk+unn/8g3SHigXnix6rkz6McIM+bcPAXalSz3MfT8iJ0rKSW+fpH 0rU= edu. 172800 IN NS a.edu-servers.net. edu. 172800 IN NS c.edu-servers.net. edu. 172800 IN NS d.edu-servers.net. edu. 172800 IN NS f.edu-servers.net. edu. 172800 IN NS g.edu-servers.net. edu. 172800 IN NS l.edu-servers.net. edu. 86400 IN DS 28065 8 2 4172496CDE85534E51129040355BD04B1FCFEBAE996DFDDE652006F6 F8B2CE76 adns1.berkeley.edu. 172800 IN A 128.32.136.3 adns1.berkeley.edu. 172800 IN AAAA 2607:f140:ffff:fffe::3 adns2.berkeley.edu. 172800 IN A 128.32.136.14 upr1.upr.clu.edu. 172800 IN A 136.145.1.4 dns.princeton.edu. 172800 IN A 128.112.129.15 pendragon.cs.purdue.edu. 172800 IN A 128.10.2.5 phloem.uoregon.edu. 172800 IN A 128.223.32.35 phloem.uoregon.edu. 172800 IN AAAA 2001:468:d01:20::80df:2023 education. 172800 IN NS demand.beta.aridns.net.au. education. 172800 IN NS demand.alpha.aridns.net.au. education. 172800 IN NS demand.delta.aridns.net.au. education. 172800 IN NS demand.gamma.aridns.net.au. education. 86400 IN DS 10039 8 2 B3147D88A4193F29D94867E05365EE734BFAD6C1BD480DBF024B974C B03CDDCF education. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Exs6e6LRc4JanOk6w2nZ0oTU8lIcTT6NWyIV1iow+de/vqjCLoq2Sxo/ DoA+08qgIGJ3eomD2iIZE4ys5QUVvSBBRi0Ny+3Zys5HfRkgAxteUqPA Fkawe7F5JlF4fy5m3km4hKwrzfMNedfjRH3n2IhzH948ucL/ZbjwP9yj dOo= education. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . KY4NlXBG0a173x5+K7MC7S43Tuqcu97mbVZPVAgEWWs1UmmlQsraRx7L Y4K0omrlH+CI3O02lPLP80MIP6cmjodG46XlSg7NkCXyBjyphaH1eCCV fmmXp7qVBim35dO1R5eUam6xcTmor6KcoV9dpfzKl7QKw4qoKyFyJ69v V/A= education. 86400 IN NSEC ee. NS DS RRSIG NSEC ee. 172800 IN NS b.tld.ee. ee. 172800 IN NS e.tld.ee. ee. 172800 IN NS ee.aso.ee. ee. 172800 IN NS ns.ut.ee. ee. 172800 IN NS ns.tld.ee. ee. 172800 IN NS ns.eenet.ee. ee. 172800 IN NS sunic.sunet.se. ee. 86400 IN DS 34382 8 2 000A3D89DC6CD4BA00EA8AFFEE3967D3A26DE7A545FBEFE16BA07518 FC8D54F6 ee. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GpD+9Cz5eYuTaYS3J4hA49DqxrG4NtrvslZ1DJQO9HhwRcMg3jJozGYt aVTkT78YCo9EmCdLY3V514XgsuYouMiIrxQxReOgSk8NfGbrL3YN1LzI /5tqOXyHt1WKgSITS1Jkk3SDVwo08raRLk7S6Tzrw0/hinS2xhGjZ7GU Mqo= ee. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S6ntQlciItMML5g7abSheSmGluR68xXlxesPpukZ8Xc09GDBc2ARiouk KAUObDcYS/FLU3wS0xMbEz1B2EG8Dodi4xcPwA1eyK8sL3bVcCRaQauX QfGrKHJsp6Xq7sdR1kF+RlYVonR5TKMw6ySLHa4PL6y4ywkWzzDR60z4 RZk= ee. 86400 IN NSEC eg. NS DS RRSIG NSEC ee.aso.ee. 172800 IN A 213.184.51.122 ee.aso.ee. 172800 IN AAAA 2a02:88:0:21::2 ns.eenet.ee. 172800 IN A 193.40.56.245 ns.eenet.ee. 172800 IN AAAA 2001:bb8::1 b.tld.ee. 172800 IN A 194.146.106.110 b.tld.ee. 172800 IN AAAA 2001:67c:1010:28::53 e.tld.ee. 172800 IN A 204.61.216.36 e.tld.ee. 172800 IN AAAA 2001:678:94:53::53 ns.tld.ee. 172800 IN A 195.43.87.10 ns.ut.ee. 172800 IN A 193.40.5.99 eg. 86400 IN NSEC email. NS RRSIG NSEC eg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fX6N52gfx/gHBKrOKOQiYtHeIkQxEAoTU4PJpTyOjfsQ8oR8BoaEVjNw cKSW7BOcyZU4DMrv278GnY+omZLw5/Lcozx/tBjaGQKN0/a7k5gn/89Y BTXtQ7b6UImC8+LC8DYyJ/g3zFuLwK2pcP19X2salKPQiyCWR/FIRvcz L3Q= eg. 172800 IN NS ns5.univie.ac.at. eg. 172800 IN NS rip.psg.com. eg. 172800 IN NS frcu.eun.eg. ns1.dotmasr.eg. 172800 IN A 81.21.97.155 ns2.dotmasr.eg. 172800 IN A 81.21.99.11 ns3.dotmasr.eg. 172800 IN A 81.10.38.11 frcu.eun.eg. 172800 IN A 193.227.1.1 email. 172800 IN NS demand.beta.aridns.net.au. email. 172800 IN NS demand.alpha.aridns.net.au. email. 172800 IN NS demand.delta.aridns.net.au. email. 172800 IN NS demand.gamma.aridns.net.au. email. 86400 IN DS 51466 8 2 2F1D54E81A3F873361603A8985FB4F19823FA63B9399A9AA5A6A5845 6C66597F email. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . TgSdkoqIovGzmMzVYqQ6zYlTN09PSmC0gLFL15cmhF+WvhyVLDZYHuDm rG8s0WZNpLE8KeCBHHEIIDNXJc4LRpPu2BXeyH6lnxxIpcu08vy7hNvS ed/l96uvUv2PuIzF5WjpR9+epTOyNqxj+t3xVrSgz2DLSghG/QG0tUkk nh0= email. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . f1usgl1dfNJ10cm+Dlai81hFpwajM7c9bwWT7GMJ6T89r7CpwU4CGH5c ghkFqcDKJI9u7OCBKhfyQ4AxZh6nmfsKX/ETt7J7uo5iGIJz4pGDVtUL IYYjSqw+OzC4t+5UDvmLIIZXC/ft/AqQI1eVpPPPfsY2VCc0g0DtNq6B nBA= email. 86400 IN NSEC enterprises. NS DS RRSIG NSEC enterprises. 172800 IN NS demand.beta.aridns.net.au. enterprises. 172800 IN NS demand.alpha.aridns.net.au. enterprises. 172800 IN NS demand.delta.aridns.net.au. enterprises. 172800 IN NS demand.gamma.aridns.net.au. enterprises. 86400 IN DS 48424 8 2 7817DF3AD3DA83CDA3728126935F8B892EED5FF59F8809679CA7FB6A CA253137 enterprises. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . NZmFgZCbescN1HQjBPG988ikruzZp1EBjkyg1KYoVV9kJA7jT0lVkBAu diogA7kRtrMCt6b7MBT1N27GigDR7DdrG3YE2vcKwMKMlCokRtiJWaiB D0IBBxcS7JCC+pWirzKqe0hBZuTIPXdQoyzVROAQOBHXoPS9/3gDITLa WvE= enterprises. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ez0a1R1HVEjiRBFwGWVFXcG0VWRh7bI0P5TjkRbzU2cpPAofDdvGc5Ae yrePfgrE+OxTDVNXFPs6Flmp829Nzd8qwOO+UuM7IA9xcb44WZ4jKe1T GE4jTBIgC0zzmIEd/sRkIsJzOYhZQ/63aQBVGfzpFJiJurmalyHPrA5K vxE= enterprises. 86400 IN NSEC equipment. NS DS RRSIG NSEC equipment. 172800 IN NS demand.beta.aridns.net.au. equipment. 172800 IN NS demand.alpha.aridns.net.au. equipment. 172800 IN NS demand.delta.aridns.net.au. equipment. 172800 IN NS demand.gamma.aridns.net.au. equipment. 86400 IN DS 22201 8 2 A164745D7DAB36BB4F998EFA7D2C375033562D6C9D262B3091E671B6 969344EB equipment. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . K7RDoLtXD9bgyu0fv5F3cByRCio/bi4opcTaZJhv1+P6Bvwz/Bds8xvx mvdbOJAlSd/m1QUojN5k4txcGQlvivAzEVFsKRvDF4/CiJHeewchT/BC PfrSAvy3WIzAc1GukhbR3g4C5x3CaGXhK8dTXHArF8VDvdAzOXAq9pvi TUo= equipment. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bztFOrB3Y9qHxEQXWeknq4E5tUFHP15xASkpBW/MC9eSAonDMDYwQBOP itNFRj5ViFo04i/MjcYraqISLJUmmz6i87gOA2HBGPStqHOtzPgUtQQu MThc5lK9IyThrUFTxke2L6tObdu+3jL/3ZsXb2cx+OFX8L43GEjjtXEb rbg= equipment. 86400 IN NSEC er. NS DS RRSIG NSEC er. 172800 IN NS er.cctld.authdns.ripe.net. er. 172800 IN NS sawanew.noc.net.er. er. 172800 IN NS zaranew.noc.net.er. er. 86400 IN NSEC es. NS RRSIG NSEC er. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . t302Yr4/wdZTjJiNx+eB1VMAF6S3KSZWgmm1feNb/zJjkbj/84dXpPfA UfVTUUTLYcCD9tidplk/3corpRp+Tq0xqWr+4/c2Uq21rxhxrpwnPSkG XJugPvYIVidt+Revhki7PHCc0wzHEXLkt2MsrXiEnBBbdtwYvxYjwLZw c+Y= sawanew.noc.net.er. 172800 IN A 196.200.96.1 zaranew.noc.net.er. 172800 IN A 196.200.96.2 es. 86400 IN NSEC estate. NS RRSIG NSEC es. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ufgk+0/h8tHPCeDI89X79ctHQ4pwi0LlHyI4hm5UTWFT1QSbooIpnMrD hYJ0Pu1h0xUmXsPXqxSFG1CoEuOAtU3LXYomLwoTg11g4ZheJwvf+WIN MF8yt3ZxMr2nj0hd7WlK5kYA0AjZtWmxZqLu/kTg4MNq3YQIYhOupq61 orc= es. 172800 IN NS a.nic.es. es. 172800 IN NS f.nic.es. es. 172800 IN NS ns1.cesca.es. es. 172800 IN NS ns3.nic.fr. es. 172800 IN NS ns15.communitydns.net. es. 172800 IN NS ns-ext.nic.cl. es. 172800 IN NS sns-pb.isc.org. ns1.cesca.es. 172800 IN A 84.88.0.3 a.nic.es. 172800 IN A 194.69.254.1 a.nic.es. 172800 IN AAAA 2001:67c:21cc:2000::64:41 f.nic.es. 172800 IN A 130.206.1.2 f.nic.es. 172800 IN AAAA 2001:720:418:caf1::2 n3ns.nic.es. 172800 IN A 194.69.254.42 n3ns.nic.es. 172800 IN AAAA 2001:67c:21cc:2000::64:42 ad.ns.nic.es. 172800 IN A 194.69.254.15 ns1.nic.es. 172800 IN A 194.69.254.1 ns1.nic.es. 172800 IN AAAA 2001:67c:21cc:2000::64:41 estate. 172800 IN NS demand.beta.aridns.net.au. estate. 172800 IN NS demand.alpha.aridns.net.au. estate. 172800 IN NS demand.delta.aridns.net.au. estate. 172800 IN NS demand.gamma.aridns.net.au. estate. 86400 IN DS 64357 8 2 1B99951833A83F4A59D027C8117A5597FF969F7A7E2C539ACAD9AA02 5245A7ED estate. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PhtrQQL2vjIGiAk4pd6zL0A60buNakLelrS3mkvKKUXO4UEe2pCGQwzX DskJsi58q035as9z14QmREpOZ3zJIUEe7pvASEB8JnJQG9z1bUoxYI12 pjbtQJrT4hEy6k5J4ybZE2b4F8RLMSuZu5omwTMsfWW+c/cBXZbgf5IY N30= estate. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . D/0SixREcwZS2qTyD02eIlPOJJudwdtyY6pOO0DKWzEqz9hz5gsl17qH +parpbd8uXhlBzL8t8AUYjF+l/lJTxcc7SlGMCghi21HsvOYXw/XpbBp xOkVSHpol2RWTvI3o9id5whB219J7vqQw6UD7jBL3/8GmbjDeAfUMzQB 03I= estate. 86400 IN NSEC et. NS DS RRSIG NSEC et. 172800 IN NS et.cctld.authdns.ripe.net. et. 172800 IN NS ns1.telecom.net.et. et. 172800 IN NS ns2.telecom.net.et. et. 172800 IN NS phloem.uoregon.edu. et. 86400 IN NSEC eu. NS RRSIG NSEC et. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fVG6dhXgTZ0MCnmixhWXYWKzuS19RtQLMhuB1wO6hc9mPXkgoXPmM+Hm H0b7PbaxwduhEzyYUtlQZsDcRxR8IaXzfcNiV410ybEbAqId6n4xpC5P lJum5IZMrHt5jWXk9N2UojIRpGSpSPZiVe/eMVdTnlSu/P4M7n8DexC0 gkU= ns1.telecom.net.et. 172800 IN A 213.55.64.36 ns2.telecom.net.et. 172800 IN A 213.55.64.38 eu. 86400 IN NSEC expert. NS DS RRSIG NSEC eu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Dc81c/UOlyZjRLBZJk/zFJFg1ad63VeZpFgu7qauiXO1ke+elF5JsCsv YViCch+JIEwObBOaLVQVXVdBxN/Z0GcxdIV1ct379eZL9fm3BHi1faLT Cra6Ds84w3ev0zdWWLmTeFFbOUA8jYloz5bwAgP/zVTmNFpIPjr0zOQP ryg= eu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GVNpQALDHKf6GZTXDXVQVgKKzkvEtjrkT13bP6u0smMMaO+gmaYCY3+N 34qLrTDlqQCrW65hy1PX1QVipRayzJ+UYRPvqxDtOHQJr4TRRnSkBbzH qkqnjuR5EQV0NUtiTl5eGxgeWMaAliXZqT4VdpjS6sWS3uM46KmP/tT3 5GI= eu. 172800 IN NS x.dns.eu. eu. 172800 IN NS y.dns.eu. eu. 172800 IN NS cz.dns.eu. eu. 172800 IN NS nl.dns.eu. eu. 172800 IN NS si.dns.eu. eu. 172800 IN NS uk.dns.eu. eu. 86400 IN DS 61179 7 1 87E2B3544884B45F36A0DA72DADCB0239C4D73D4 eu. 86400 IN DS 61179 7 2 3B526BCC354AE085AD9984C9BE73D271411023EFF421EF184BCE41AC E3DE9F8B cz.dns.eu. 172800 IN A 93.190.128.138 nl.dns.eu. 172800 IN A 91.200.16.100 si.dns.eu. 172800 IN A 193.2.221.60 si.dns.eu. 172800 IN AAAA 2001:1470:8000:100::1 uk.dns.eu. 172800 IN A 195.66.241.178 x.dns.eu. 172800 IN A 194.0.1.19 x.dns.eu. 172800 IN AAAA 2001:678:4::13 y.dns.eu. 172800 IN A 194.146.106.90 y.dns.eu. 172800 IN AAAA 2001:67c:1010:23::53 ns6.nominum.eu. 172800 IN A 81.200.69.35 expert. 172800 IN NS demand.beta.aridns.net.au. expert. 172800 IN NS demand.alpha.aridns.net.au. expert. 172800 IN NS demand.delta.aridns.net.au. expert. 172800 IN NS demand.gamma.aridns.net.au. expert. 86400 IN DS 23641 8 2 69D4659BE016123C984DB12560A72D36F49104DC165E4CB9A76B5A32 0BA8A18F expert. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Fh4UxiqcHY+/hAwBbqaEfEv4eebDoP8VASWXqGE5+SOc0qMObzQ2ng4P Lepgoa/bxXpTt5scembSaTr00dA+kT0mqGRzG5uY3M4kLrRT2/rYyKry JeQsYkZGP3ugnqygKMaq5iguAdd4eJFxkDAolMoNrPG6A7ItLfwk7ml3 iAI= expert. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZGxs5F21AHmyR+vJ5EN1af8e58fDxM038UfhT5QQGkQtDx/MZhkiQoHV rQ9Ny78zL+I+xHyTIOmmKrgpSDW/JxUZ+ujhCHj+dxDLa6X80W2+l7t4 474mJWXlkg0qBu+U/xRju0J4iBrkV3dZ8MAJBj5AlGbHp1KWzXiq+HWF a9w= expert. 86400 IN NSEC farm. NS DS RRSIG NSEC farm. 172800 IN NS demand.beta.aridns.net.au. farm. 172800 IN NS demand.alpha.aridns.net.au. farm. 172800 IN NS demand.delta.aridns.net.au. farm. 172800 IN NS demand.gamma.aridns.net.au. farm. 86400 IN DS 50122 8 2 3782D7D15479D12AF978FD07490A34E80ED9254154FC92808ED393F0 F8A48604 farm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . IpMnYJ4zbVLPV/TaiZPCzwtzNRrxbMChvt+eNVhG9tRyBnoXtW0XwHVY xDYb/OXhO0qIjyjIm9itydKyAMdhPt/Fc7I/Uql0MALpRqGh7dBGI6wO eBMORbI1YVPE0KRNAh0C1Ro1XqL5qSwIDBkkTSPPmfvwVqjyypSvgmxz 3Eg= farm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Q1NQpH6SCczWJ6tmHY4YAr/WgVp5+BbJs7CNM8WLnmOxSF1lXL3gjnEk vSU5SpA6aNMbpoi64IxJcRFqfUlmx67IAWKja1ujXKAbZZTixiah/b8W V1wzIGQTy6KjXHwgNahlVnxSueh9Zq0IjCr3SLdzE4f+ZfcGS+8nGhLm K+A= farm. 86400 IN NSEC fi. NS DS RRSIG NSEC fi. 172800 IN NS a.fi. fi. 172800 IN NS b.fi. fi. 172800 IN NS c.fi. fi. 172800 IN NS d.fi. fi. 172800 IN NS e.fi. fi. 172800 IN NS f.fi. fi. 172800 IN NS g.fi. fi. 172800 IN NS h.fi. fi. 172800 IN NS i.fi. fi. 86400 IN DS 35422 8 2 7282CE618E87E06DF5A21956AA54D02A98B8ADA54253A592A88E6AB9 4D7C1B0C fi. 86400 IN DS 37481 8 2 348035176474A7247E7593D2CED09873F42E72FBF823B27328980A12 36E75678 fi. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . NRKadWWCav82HJ8u1jAoLLT9v+Apf11B2gszwOCHDDbA88huENxTXL32 OSYIgY4acSIrGA7/KivCm+bNZtDed5mZHoEwmjVeZTsWSrFmM4niRXDp OrSIVz2N/2agpFn7F+DxJ+jXfABlmI5QOQTqyAHEo3qpEr6ZJctwPin1 APc= fi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ts74ktP6WBkLJ1shTGbPRcGuMuCldkbJTo5pf509gKSVnq9EOOqha7Wn Yywpqe8Gc1S99EmB5ZCRHqjEdzB6XiG4o8LR18o66WqZCV7jrNSylIQ3 SDs4t4AVasoiQbY6ObjnuTWGGzEBegQSktodYoxav/a3qNoDded5QUK+ usw= fi. 86400 IN NSEC fj. NS DS RRSIG NSEC a.fi. 172800 IN A 193.166.4.1 a.fi. 172800 IN AAAA 2001:708:10:53::53 b.fi. 172800 IN A 194.146.106.26 b.fi. 172800 IN AAAA 2001:67c:1010:6::53 c.fi. 172800 IN A 156.154.100.26 c.fi. 172800 IN AAAA 2001:502:ad09::26 d.fi. 172800 IN A 77.72.229.253 d.fi. 172800 IN AAAA 2a01:3f0:0:302::53 e.fi. 172800 IN A 194.0.1.14 e.fi. 172800 IN AAAA 2001:678:4::e f.fi. 172800 IN A 87.239.127.198 f.fi. 172800 IN AAAA 2a00:13f0:0:3::aaaa g.fi. 172800 IN A 156.154.101.26 h.fi. 172800 IN A 156.154.102.26 i.fi. 172800 IN A 156.154.103.26 i.fi. 172800 IN AAAA 2001:502:2eda::26 fj. 172800 IN NS rip.psg.com. fj. 172800 IN NS manu.usp.ac.fj. fj. 172800 IN NS teri.usp.ac.fj. fj. 172800 IN NS adns1.berkeley.edu. fj. 172800 IN NS adns2.berkeley.edu. fj. 172800 IN NS auth00.ns.uu.net. fj. 86400 IN NSEC fk. NS RRSIG NSEC fj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . s7klnS1KpnWzm2pQ3kwJ4I0idRuWQmR8LAnru/aMTSM9quXU1fGm8YAv Hp9LPunmnj7QGSC+1XxLuIZShnpg4bl6KXcKvYePA6oXkciUjpEO76/X QAfg0KyLmh4hDapR1UVQWBZRjtLeliD2XM1ll/4cUT6s0uXMhibs62Hs 8G8= manu.usp.ac.fj. 172800 IN A 144.120.8.10 teri.usp.ac.fj. 172800 IN A 144.120.8.1 fk. 172800 IN NS ns.horizon.net.fk. fk. 172800 IN NS euro-ns1.cw.net. fk. 172800 IN NS euro-ns2.cw.net. fk. 172800 IN NS euro-ns3.cw.net. fk. 86400 IN NSEC florist. NS RRSIG NSEC fk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LjX+/JSCLoGrAxWe/Scxmgy0YIWWX+rI/5HDpfh8uThRwETxGGg8O85Z vCFPRrONKVk+Y1IDRg8B6JWp4lqfYdMYTEbCJh6qz4zzTv9ZRB2r1xnN ufAb5WlpeWa3gU7rtdmJvjZ1wAxaCiz5pHlfQLaAUYEYKfSMCII3w72w 1hg= ns.horizon.net.fk. 172800 IN A 195.248.193.250 florist. 172800 IN NS demand.beta.aridns.net.au. florist. 172800 IN NS demand.alpha.aridns.net.au. florist. 172800 IN NS demand.delta.aridns.net.au. florist. 172800 IN NS demand.gamma.aridns.net.au. florist. 86400 IN DS 65482 8 2 E3ABDDF92C74C5A28B71A0A51245854F5D702EBCA2B70E535F51144F 77EAB6CA florist. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bQqDmrDPkdHynfnU/Ja8K2lWkN69MaITTcMzt1EIvORgn50vF4mWOgPx zN+TNe6KvZ3G2hUEQuPfeJes4m6SJFYl1MKKycpL5/Wu9bPazgz+9Mn7 7WLL6Ai4mMab9FO1O+EXIXVYH/qOQgcu/dDjhD4rbp4/mytLHo0kG4Q2 c68= florist. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dMNOld/owuKkqDCAStTY4HulbCqtjQC8vIM1f8NI93z7q17GHzP8vjA5 sz1pv8rldx4oGf4sfk9K2siUYfcs1zUJzS4zvYHCfT2+EVWm1eV/52qu tYPcPmH+cmLxIGGzxj2uTDLR/f5uz87e6QQrZeQEkZXolc54/7MQHWya lrA= florist. 86400 IN NSEC fm. NS DS RRSIG NSEC fm. 172800 IN NS tld1.ultradns.net. fm. 172800 IN NS tld2.ultradns.net. fm. 172800 IN NS tld3.ultradns.org. fm. 172800 IN NS tld4.ultradns.org. fm. 172800 IN NS tld5.ultradns.info. fm. 172800 IN NS tld6.ultradns.co.uk. fm. 86400 IN NSEC fo. NS RRSIG NSEC fm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IxQvnKwo07PHUY/S1cxzNZm1vObffciWZUe/SA3xJFlHXWCy8XEQZ6hu k5C2TrytIURc+LFIHMz9TpERO7aLZl0UvfHVO3XhZctAPpVmxmu2b0xW MPjfh82booLIVeVdX9+L02d0ds9LceIjZJH0ZXSoEJRFqF2NydudelGU AoA= fo. 172800 IN NS pch.nic.fo. fo. 172800 IN NS arnhem.nic.fo. fo. 172800 IN NS frankfurt.nic.fo. fo. 172800 IN NS copenhagen.nic.fo. fo. 86400 IN DS 41527 8 2 6E7925D8D6F243EF35381231B955528F25087DBF3E61CC5FCBCFE729 48D0470B fo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . bJ7rk+VgLPLlFPQEkHD5+nbINgE5tl9cKdKe3fR5yq/Gs1D7mixfeU40 vNsVQdfI7oPlOPh3cjEQLaedsUIFpJRG1uLQvD8mzwaKnct+wVKsc4t7 I//TGYk9xMwj+P7eqSjqHsfOotWCoLO2saRTkLfB/Wl2C611MzdDmH2i eXc= fo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Skb/eq7J1NpNIGtKyq5HNw9JVbTBg0yYPtJ3Y7YJ4Bszhf9Sv4ur/f3B BufnPLKhkAey2hpP9Fm/AqJXLNjzwDgncxFXClCSSEpjY7t4H4k91ELJ OASbalvi13UxuPHNYKo2Ysjx9teMxnTO4ZRUvxakJrVy0P7lNhdPRsX+ Amw= fo. 86400 IN NSEC fr. NS DS RRSIG NSEC arnhem.nic.fo. 172800 IN A 193.176.144.24 arnhem.nic.fo. 172800 IN AAAA 2a00:d78:0:102:193:176:144:24 copenhagen.nic.fo. 172800 IN A 193.163.102.12 copenhagen.nic.fo. 172800 IN AAAA 2a01:630:0:40::12 frankfurt.nic.fo. 172800 IN A 81.91.161.88 pch.nic.fo. 172800 IN A 204.61.216.65 pch.nic.fo. 172800 IN AAAA 2001:500:14:6065:ad::1 fr. 86400 IN NSEC ga. NS DS RRSIG NSEC fr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ciw+OrW/XnXBfwgo+O3FPHOHWibvlMT3cz63RDbwvwZrdcpHtOm1vnce 2un5Ny8hI67GqERWI+kl5zk7oarlwQgOjxjAlbUppFv97WqB6aZO6ZIl r/CAdGU/fJdOnBQJ2i6TYegPbFoAcE9szo1nHuDLCFxsMZ13HpY+J6Lf W4I= fr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . viGAqhszJUE+IZJMpko0E/uPY9a8RFlU1mMebZuva5dRD828uRczlVkn dCXO2ccRDvV9ALRP+aKnLQ3XzcuO71A0b1BrOjKAG3tKJzjvcqEEAACV zMf24vfGVs7udrHFR63Dw7O/9KRBlaRCGzzXXtwLjqHpAJaVOtNB+mRl Gps= fr. 172800 IN NS d.ext.nic.fr. fr. 172800 IN NS d.nic.fr. fr. 172800 IN NS e.ext.nic.fr. fr. 172800 IN NS f.ext.nic.fr. fr. 172800 IN NS g.ext.nic.fr. fr. 86400 IN DS 20122 8 2 A4208B55FFB352EDC816D9329283DD8BBDDE44C585395AF9AA7275AB E3CF6795 fr. 86400 IN DS 35095 8 2 23C6CAADC9927EE98061F2B52C9B8DA6B53F3F648F814A4A86A0FAF9 843E2C4E dns.inria.fr. 172800 IN A 193.51.208.13 censvrns0001.ird.fr. 172800 IN A 91.203.32.147 ns1.ird.fr. 172800 IN A 193.50.53.3 d.nic.fr. 172800 IN A 194.0.9.1 d.nic.fr. 172800 IN AAAA 2001:678:c::1 d.ext.nic.fr. 172800 IN A 192.5.4.2 d.ext.nic.fr. 172800 IN AAAA 2001:500:2e::2 e.ext.nic.fr. 172800 IN A 193.176.144.22 e.ext.nic.fr. 172800 IN AAAA 2a00:d78:0:102:193:176:144:22 f.ext.nic.fr. 172800 IN A 194.146.106.46 f.ext.nic.fr. 172800 IN AAAA 2001:67c:1010:11::53 g.ext.nic.fr. 172800 IN A 194.0.36.1 g.ext.nic.fr. 172800 IN AAAA 2001:678:4c::1 ci.hosting.nic.fr. 172800 IN A 192.134.0.49 ci.hosting.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 ns-ie.nic.fr. 172800 IN A 192.93.0.4 ns-my.nic.fr. 172800 IN A 192.134.0.49 ns-my.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 ns-nl.nic.fr. 172800 IN A 192.93.0.4 ns-nl.nic.fr. 172800 IN AAAA 2001:660:3005:1::1:2 ns-td.nic.fr. 172800 IN A 192.134.0.49 ns-td.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 ns2.nic.fr. 172800 IN A 192.93.0.4 ns2.nic.fr. 172800 IN AAAA 2001:660:3005:1::1:2 ns3.nic.fr. 172800 IN A 192.134.0.49 ns3.nic.fr. 172800 IN AAAA 2001:660:3006:1::1:1 bow.rain.fr. 172800 IN A 194.51.3.49 ga. 172800 IN NS a.ns.ga. ga. 172800 IN NS b.ns.ga. ga. 172800 IN NS c.ns.ga. ga. 172800 IN NS d.ns.ga. ga. 86400 IN NSEC gallery. NS RRSIG NSEC ga. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . H9M2FbRpGF7XmZsyr+gx36FAwqqJyEuE4pCEKsoLuh9Yh1/FKwSm1KF+ rVc2j4lBiikgz/7R13lnjEZThIGD1/spidRPffMbYskOxqeSE257Sh+c WQt8YUhIGrZk70ER0tLmvzheeaK384u5M/Kc7Heem6ZhEfQZ1gDHEc7H To4= a.ns.ga. 172800 IN A 185.21.168.49 a.ns.ga. 172800 IN AAAA 2a04:1b00:c::1 b.ns.ga. 172800 IN A 185.21.169.49 b.ns.ga. 172800 IN AAAA 2a04:1b00:d::1 c.ns.ga. 172800 IN A 185.21.170.49 c.ns.ga. 172800 IN AAAA 2a04:1b00:e::1 d.ns.ga. 172800 IN A 185.21.171.49 d.ns.ga. 172800 IN AAAA 2a04:1b00:f::1 gallery. 172800 IN NS demand.beta.aridns.net.au. gallery. 172800 IN NS demand.alpha.aridns.net.au. gallery. 172800 IN NS demand.delta.aridns.net.au. gallery. 172800 IN NS demand.gamma.aridns.net.au. gallery. 86400 IN DS 25852 8 2 ED90BC1757207B806B4FED800EFA19404E990D59BC1758369CA93A4F F5BB6361 gallery. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZtHKbS9AzqG2WBLjfSGV9EnT1QtODPKwAvFtUN/qEFwrk53atezzVxKO vacqHu4+rgMr6zMvXuPYIJgs9fI6JtBRTM5mX6XvnEyrq5VevXIqI1dl c5r9r14kJqxxHd/qNVkk8kGlC7zju/a5VfJfp9xfWmRtgF3ut6p7end4 wEY= gallery. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oSxAI0ul1EKwdqpONKf9ZuOCaeZM580VTsfYym+b6EUEuz2MfX4gqnD6 h4Npxa5Aw6ZG1RrUxEr0i+/65pRo8OE2z8zJXk6gc7oIH9uuMWUg11sQ 0OwhmrD9n5HvMltxkNc93xGh8a7t0Yvw5JiaTM6of8sdSQ4JDot3Te+Q 1dc= gallery. 86400 IN NSEC gb. NS DS RRSIG NSEC gb. 172800 IN NS ns.uu.net. gb. 172800 IN NS ns0.ja.net. gb. 172800 IN NS ns4.ja.net. gb. 86400 IN NSEC gd. NS RRSIG NSEC gb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . A3o/MaoentdRADqmu+mSVfDQClFYCLO9YJqzgbqHfMJD8y2RQ5fdyw80 b+lOgPuGoVFtJxQBuSuvUTvJc9IWWAUEjzttxff+z2g5cF9wVX2z0cOx zfRex2/2FjRYlfH7qrM4uSDmds+UWe5/Sq/JCGTxAAeDSJteuE2qE/uA wIk= gd. 172800 IN NS gd.cctld.authdns.ripe.net. gd. 172800 IN NS gd-ns.anycast.pch.net. gd. 172800 IN NS gd-ns.ksregistry.net. gd. 86400 IN NSEC ge. NS RRSIG NSEC gd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iTsnBoihwwehDQL02V5cxcuoJJCKbAY2HTJq1VHLRvHHzlfoIe7dnPKk bfnWfrehXwHGsLS97wlezO1okyG5c+Y0jIddETTi/6YMNYk05LpW6isQ tLXo3Pz/0/4dqmRWOfW3QhBVeywLmhFhA2rrz1yg2kT8xJhrJr63XpIf i3k= ge. 172800 IN NS ge.hostmaster.ua. ge. 172800 IN NS ns.uu.net. ge. 172800 IN NS ns.nic.ge. ge. 172800 IN NS ns2.nic.fr. ge. 86400 IN NSEC gf. NS RRSIG NSEC ge. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ELVrjDheOwWuWz8F/yP+hRE+3mWH+npUQSH1ElynlKJUWnDS6yGsegyS U6fIORmL+ym4yTU0ENdz6Fi2KDAJPJv1APbdRFXfPQ/g9XtZkeV3AIMT xpA395hyxkyf6Q6tMVZnudWAXx7GT9nKi2OS0IeoClYv3S4/vIQKGfZL /oM= ns.nic.ge. 172800 IN A 212.72.130.11 gf. 172800 IN NS ns1-gp.mediaserv.net. gf. 172800 IN NS ns1-mq.mediaserv.net. gf. 86400 IN NSEC gg. NS RRSIG NSEC gf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . lOuv4oHawKQui8FyzKmcO5feQX1exp9GynKnIcF+I+Uh+9RUmZDdTM+e gDPhIB1phmPmb8zDk7k4vimjeDVSL4iTH20DQ6wCSE6CGKtxGSGDaOIO uwShqUYI6hiiPgctKzm6HtBa5StolMdko0GYnKQuhGFF+gBWlNMhGiux vNg= gg. 172800 IN NS a.ci-servers.net. gg. 172800 IN NS b.ci-servers.org. gg. 172800 IN NS c.ci-servers.org. gg. 172800 IN NS d.ci-servers.je. gg. 172800 IN NS e.ci-servers.gg. gg. 172800 IN NS ns0.ja.net. gg. 172800 IN NS ns99.dns.net.nz. gg. 86400 IN NSEC gh. NS RRSIG NSEC gg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WEX6grh7tOBuu3Di6K0fHf2iETs0bVWxralKmw5aYiPspO2PEczZhzyL bVhm4kv74JGJ3ak9qhpONfyNz5NwN+fb9geDL0TqAKRKCrjBti9FCfrC F/sHUtfLxNXDdjthRCsgcGr1U3fT75Iif/vJNsk0W3xjGhuoJm2x1qvu Q1s= e.ci-servers.gg. 172800 IN A 204.61.216.74 e.ci-servers.gg. 172800 IN AAAA 2001:500:14:6074:ad::1 gh. 172800 IN NS ns1.dns.aq. gh. 172800 IN NS rip.psg.com. gh. 172800 IN NS fork.sth.dnsnode.net. gh. 172800 IN NS hippo.ru.ac.za. gh. 172800 IN NS austin.gh.com. gh. 172800 IN NS mantse.gh.com. gh. 86400 IN NSEC gi. NS RRSIG NSEC gh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . u0LOkUM9uuLe/WQhW3YZAu0oNpSrIkCQX3NwgDcsloXCU3ychaiutSXh kNyG3RPYv7C+OlGk/c/zGMsGqwk6bUxpQJU9ceEOz21H+mVU1hhG+zZR nqWBbyFkwab42+Guf0VB3KkAJVibTcEkSilKgfYdcehL8IEgQdi5NiJ+ uX4= gi. 172800 IN NS a0.cctld.afilias-nst.info. gi. 172800 IN NS a2.cctld.afilias-nst.info. gi. 172800 IN NS b0.cctld.afilias-nst.org. gi. 172800 IN NS b2.cctld.afilias-nst.org. gi. 172800 IN NS c0.cctld.afilias-nst.info. gi. 172800 IN NS d0.cctld.afilias-nst.org. gi. 86400 IN DS 40935 7 1 A6110BBAB0C51F4712CF1DF57F960CC73C7645F6 gi. 86400 IN DS 40935 7 2 9F19CCCE0100976D6A4ED5D0AFA3D66E88C6974722D62EE6251F9D3D FA74A23F gi. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ULdoNH49B1wQZ/jFDJH03Mv1whoovKq2UzUH6GVP1e1BlmLGQAPEeqg+ rH3UWaD6O37W3Mep+SKH3K799LAdNoj7CLhicNHi0E/4ohduUyAzD/Tf njokjm22ayJA8pILH1f/pmBxNNrxzUAuulOiwMKrDFw6VADjzyOo2VOK xFg= gi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VIr7DwxnRJ4DlK8xN3vDiaZPiGLsUw/YzHmQdDBxPovu64Da0c7ZIjT0 C95ljk+ti6T7fuHMFzNsaVkwnmSIUY6PQ+t2Zbtw37UB+Pk4zxo8E/QB MgeHX3itSmEwq8QwTZFE4tmtk8pQbV4RJg5/Y4fww/j1XOK5CWiZQWFd /0k= gi. 86400 IN NSEC gift. NS DS RRSIG NSEC gift. 172800 IN NS a.ns.uniregistry.net. gift. 172800 IN NS tld.isc-sns.com. gift. 172800 IN NS tld.isc-sns.net. gift. 172800 IN NS tld.isc-sns.info. gift. 86400 IN DS 42194 5 1 61379C5FD2BA15B4401F9E74D1CCDF613FA469E4 gift. 86400 IN DS 42194 5 2 365F45C35B61F891A7111CF3BD587EF8A0088D6EB7286E791F1016B5 6EA01850 gift. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . g7a595DsxtQ26pSEexz9CSirf6w4V4YputE+xquD4KlgXg4SEnQnCEtv J3ViTdE+ZgYsSwAN/+7J02jz0Q9E06LgNyIiOJk57gSi3o+ZNhIflWHd SW7iyC+sdJpbCsEOXR4LH6qB6kEpcNdDPPZNmBPhckA4NvjTYGFB7Y1N 0fU= gift. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ceT+rNFA7i0uBLkkE90ZtAZcUpRXV95s+kY/Ivwpap2s8WV+D0cnsuaX +IMT/UTFb5cok8GP/Gynzqh6FGF4i4SBPoQwzje3b5BYyW616xSgaBgy /KyJkOUfoA2UaOXaa7FFnLjF9HLCM5p0Ffv22xgelgoa1gaUfVMBekAM KFg= gift. 86400 IN NSEC gl. NS DS RRSIG NSEC gl. 172800 IN NS a.nuuk.nic.gl. gl. 172800 IN NS b.nic.gl. gl. 172800 IN NS d.nic.gl. gl. 172800 IN NS gl1.dyntld.net. gl. 172800 IN NS gl2.dyntld.net. gl. 172800 IN NS gl3.dyntld.net. gl. 172800 IN NS gl4.dyntld.net. gl. 86400 IN DS 11560 8 2 3D44DF84C78A82E0E9824440F3E82B402551341DBFF3BCE72CD78643 5D15F1AA gl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iPEKAZHezHWt6QEUPro9YEW9WOktpFNkQE+ojCprReug4lC/EtttXas4 aZ7rcBqMhBEKIHO18uGZnF8VdlKEwnih7OobxIEzMSEVpjMeQFBnVbvO RBCG42CIdECj8OZsylLtSBuFgm3QC0SbV1wg59MIDcL75QAtonF+WxNV PrA= gl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jJR3aQqIN3wKIspRyH27ejrzjfmI4ek1f/+oLYfDpXhZ3QDp6Z5nArMz UJF+9zK99tirIErabF/JodADrAJBkoYtMxWh4AeEh58nshA/nTChCfUB UBnLXviJNeeW3YplyJ4lFTEqFMRb743BjBviulpk/l+H2pEngLM6VcPh ycw= gl. 86400 IN NSEC glass. NS DS RRSIG NSEC b.nic.gl. 172800 IN A 91.221.196.228 b.nic.gl. 172800 IN AAAA 2001:67c:3c0:112::10 d.nic.gl. 172800 IN A 204.61.216.49 d.nic.gl. 172800 IN AAAA 2001:500:14:6049:ad::1 a.nuuk.nic.gl. 172800 IN A 194.177.224.13 glass. 172800 IN NS demand.beta.aridns.net.au. glass. 172800 IN NS demand.alpha.aridns.net.au. glass. 172800 IN NS demand.delta.aridns.net.au. glass. 172800 IN NS demand.gamma.aridns.net.au. glass. 86400 IN DS 13816 8 2 B8CDEB1147512B2413992A08B6B28DDD6127E18F7E2969F7897D2F34 8A2C1AF7 glass. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Bih0RxKgY7giFHb/5HPgVXZYuyFA6WwM20qBXvvaaGjNJ2mvkSCqeyx8 CFpwjARB5nWs14mGBXbYub70l8rfpNhU66JV812HdnrTKQTiXACoV8Kn ZPeF681VEEFWrEC27ZpilQSACh2PAtsdE3nU8vLkjCoubaRZg9ayRH/5 SF8= glass. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FCsf/6CGdROB4tDwCfTTzbYUa/FcTT5M0S4pcJjFTgn5L6TUN1ds1vry +SvYyn8NEihu2GaFBLhJh39yIzmkJfvSXPsNCY0P5l4MBG9k1sofyQqp zFH8TAcQFJQqRQ3fbZ6qP+IDId+uMatSLPVIW6wGZv3nPPZBvpxPN3bg YyQ= glass. 86400 IN NSEC gm. NS DS RRSIG NSEC gm. 172800 IN NS ns1.nic.gm. gm. 172800 IN NS ns2.nic.gm. gm. 172800 IN NS ns-gm.afrinic.net. gm. 86400 IN NSEC gn. NS RRSIG NSEC gm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XkSlTnb2zhKHi4DzD1nhg6xBe0VxmF1RrrC/EfQVGOqV+UMzgH7yCFFt tuZtro2Xr7xj2grixyJ3e0RBj4BkIE4Qcnly77r2OxiimLrgbigcRV+e fnYZFVpgb/rbDIhIr2us8Wc7zzYYo/lVzWknypaHPuWu9JvuqpWZXYqz wxE= ns1.nic.gm. 172800 IN A 194.63.250.217 ns2.nic.gm. 172800 IN A 197.255.194.102 gn. 172800 IN NS ns1.dns.aq. gn. 172800 IN NS rip.psg.com. gn. 172800 IN NS fork.sth.dnsnode.net. gn. 172800 IN NS hippo.ru.ac.za. gn. 86400 IN DS 31346 8 2 65E9984147AAF1940DF87B8DBB38190736999249DE0F39B88419147F A4AFD01A gn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OhXyy2ciCu8NjyFJPBJWf8KO4/GrBS35wUr2VoQS8BuTCJMBQTyp0CJm MCTVn1H3Gge6WmCSYqmFCZkD9DV2iSMSDHHaS3l4bq4FdP03OO8FtLij 7Bxec9INe67rKC2UGh0krX+Ugsp7v2FM89ez2DUBjvhu9bF6WDotjkXY +HY= gn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WVpa6+KTUO2JugkBbOIz/1PMXpVQqXjt+SqKtBQ+0BxNFmtmveD97Jq6 1un0PCxdeGP/r0zzmuZ3K0Yket6vYlEPqQv2r13uIvvb/1fPSESzkaTD oiif7maAh6bwCvnn7X8Fqy0zCJng9B3ZI7wmgAhzUYzYAx2XY+UCAWGl pIY= gn. 86400 IN NSEC gov. NS DS RRSIG NSEC gov. 172800 IN NS a.gov-servers.net. gov. 172800 IN NS b.gov-servers.net. gov. 86400 IN DS 7698 8 1 6F109B46A80CEA9613DC86D5A3E065520505AAFE gov. 86400 IN DS 7698 8 2 6BC949E638442EAD0BDAF0935763C8D003760384FF15EBBD5CE86BB5 559561F0 gov. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . JSnEWtlHieVHXD+dGfeLHWWhf+6BVm+1xCjw7RmzWxhzfdPA5zHWMDvU U0kPRwxgQbdLthIlJ7bj7rRpqEtPuBvXRVWYOjxhPGBlvWKDlK0WzJHF BnfuVDjB8TmdZ7F2KmbTTX0ujkHdUJSw7UcKrpGRbu6TnC59mR7YxWiL 0YI= gov. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HwyphStQFZ+VlK136Q/GBosCRWSvW1JArQic1i0bsKN3yhJHO5kilmT4 IkVZgZ71ZzZ2maZHhCXeWy3rBuYRGml16CYrFbXFSXrMvxJUxtE3rC5x vw8GudaWoLcHTglzdZF6m4CneGRGyO3Pgd/F7vteE3/NqX1aXhvyWrCZ gOQ= gov. 86400 IN NSEC gp. NS DS RRSIG NSEC gp. 172800 IN NS gp.cctld.authdns.ripe.net. gp. 172800 IN NS ns1.nic.gp. gp. 172800 IN NS ns1.orangecaraibe.com. gp. 86400 IN NSEC gq. NS RRSIG NSEC gp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eVHq0upqcfAzARAQdPX1Zccns8HsOlo4NkB5yHWyh953FlKJU9YeMSKi SIHKhpFMlWRGu2wCN4vjxD/TfZOeAMkc1f68MEP5JFB7CV9K6LMRrDXe AKIVWAHD11tVBG/AmmDO0xJJPqOMQWx6gSuOnJ+elVohmpQQlY8vJqW7 l0Y= ns1.nic.gp. 172800 IN A 193.218.114.2 gq. 172800 IN NS a.gq.globalanycastcloud.freenom.net. gq. 172800 IN NS b.gq.globalanycastcloud.freenom.net. gq. 172800 IN NS c.gq.globalanycastcloud.freenom.net. gq. 172800 IN NS d.gq.globalanycastcloud.freenom.net. gq. 172800 IN NS ns.ucad.sn. gq. 172800 IN NS bow.intnet.gq. gq. 172800 IN NS dns.intnet.gq. gq. 172800 IN NS phloem.uoregon.edu. gq. 86400 IN NSEC gr. NS RRSIG NSEC gq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rnGd29GZTxEfIhoId6bhuSI2ii1hD7hmqNvmsUJDqXlBaeK+F2CcploA sRC/0Zs8HxYtpDt3W0N42IID8eqBhd/yeg0Id+qgmiHCT74ejZjvUOfi YT0bECI/g4f/e6tJllis04tm8+NiFwYyv2x4Q9hh4c6hwIuivyCk/wO3 UVo= bow.intnet.gq. 172800 IN A 193.251.153.78 dns.intnet.gq. 172800 IN A 193.251.153.67 gr. 172800 IN NS gr-m.ics.forth.gr. gr. 172800 IN NS estia.ics.forth.gr. gr. 172800 IN NS gr-at.ics.forth.gr. gr. 172800 IN NS gr-br.ics.forth.gr. gr. 172800 IN NS gr-ix.ics.forth.gr. gr. 172800 IN NS gr-us.ics.forth.gr. gr. 172800 IN NS grdns.ics.forth.gr. gr. 172800 IN NS grdns-de.denic.de. gr. 86400 IN DS 57519 7 2 89AD46EAD256DA5010F004AEAE31E41FBA15FD91F5F0F85B2FD820C2 7EEB5CF3 gr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cp0u4VlMqdEwXX3lopnsuMhEFoa+a5U27m05gQ/sZKmrICgyu4XSQenX WVqYODM4oRxo+DmHD+t4K2VgroBK4PkrCQhi+PV7vfrq8HfMMAlsOEyH 5thMpkzv2uyg4TrCoj9nxpVb80dQ/KXHrZf+UoaGjlJ1nFIcaYmBvWZ/ uHc= gr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . l43SiTvED4fXoDqm/IRanH7GnZXbmj9fRtMjW4CNM/1D7k3actjCzwF1 einfiy9sXscD1SJK4b/asDXknZVukVxvvrHGaJakZ/omjTrb/V1jAzj9 mr5hJj8f5zCs9NSia+aT41JW5JP1vy4HgxgbQFab3cb2MqZdD3UaCpFm mVg= gr. 86400 IN NSEC graphics. NS DS RRSIG NSEC estia.ics.forth.gr. 172800 IN A 139.91.191.3 estia.ics.forth.gr. 172800 IN AAAA 2001:648:2c30::191:3 gr-at.ics.forth.gr. 172800 IN A 78.104.145.227 gr-br.ics.forth.gr. 172800 IN A 200.160.7.163 gr-ix.ics.forth.gr. 172800 IN A 176.126.38.132 gr-ix.ics.forth.gr. 172800 IN AAAA 2001:7f8:6e:1::132 gr-m.ics.forth.gr. 172800 IN A 194.0.4.10 gr-m.ics.forth.gr. 172800 IN AAAA 2001:678:7::4:10 gr-us.ics.forth.gr. 172800 IN A 199.4.28.219 gr-us.ics.forth.gr. 172800 IN AAAA 2620:0:22b0:4:221:9bff:fe97:dc44 grdns.ics.forth.gr. 172800 IN A 139.91.1.1 graphics. 172800 IN NS demand.beta.aridns.net.au. graphics. 172800 IN NS demand.alpha.aridns.net.au. graphics. 172800 IN NS demand.delta.aridns.net.au. graphics. 172800 IN NS demand.gamma.aridns.net.au. graphics. 86400 IN DS 53587 8 2 DD8B16BDEDCFBAB5244EB0C0FDC415D52D039D9B225ABCAF4D35B4BA CC241033 graphics. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . sMhxG++NiwaclG0oEVNZjdVivopc/WsZlCp8eI1TljTmSypjOxsY9Lre NfrSdKS5xz5CHZVGl+pVjSAHIl6La8QamAbJzj0+WctNaBtgcZRK5wNt DlVAvswg2P/Y9o3KQzTVEB/ZcPO9Q8xFNntXiarg8c9Jo2IKMphFy7Oy M8Q= graphics. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MJvN/vvg+tSzeJ6kxdSp4HIRGUVot50gp8KmLc8zsHUCvhMcKOfbkhDE hpkLXw7GzLYUIXO85x6I2rs6OqqiOL94PsWex0wYJy1NXzjKuHAqdjNZ EQ47M2MIytoummbZYEGQKmkaF1jreyiK3WFcPcRrABLXu8ZBtHAtDWpE +/k= graphics. 86400 IN NSEC gs. NS DS RRSIG NSEC gs. 172800 IN NS gs.cctld.authdns.ripe.net. gs. 172800 IN NS ns.anycast.nic.gs. gs. 172800 IN NS gs1.dyntld.net. gs. 172800 IN NS gs3.dyntld.net. gs. 86400 IN DS 23990 8 2 2CBC82DA27FDB16662BF359F59DF1B63FA0AB720BFC2120F17BA369A 3249FC5E gs. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . mdnzGD+B9ujgPgs8vBbnZOMNTEtEcREXGqo2kcoqnfEghVpDj1U41cO4 Zs1bMl91X9VWCkkBm3wEhBns7BZHHkMTfv9ZWpAgg4zuC9I8zEyM68mk qosPEsJcl2o56I1/mk2ngb03ldFps/bVifcyLVMZv4lmJPBMf+IQr/R7 Hpw= gs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . da/INQAnm/yYvzeeZ9ZWVskGWSwve6kYykYuv3wM5sFGiDk7UxnbDhbK regg1MitdNwFS9c+jc7PLZ7eBAcKgHmLCLr9DIxiJOXEx17Gl9Bf+zNV IeweRvzViWRtignzE/pBT6ufQYTk96RGoqwwQRGIE9JGIxV6Z9FAI1pr a3k= gs. 86400 IN NSEC gt. NS DS RRSIG NSEC ns.anycast.nic.gs. 172800 IN A 204.61.216.21 ns.anycast.nic.gs. 172800 IN AAAA 2001:500:14:6021:ad::1 gt. 172800 IN NS ns.dns.br. gt. 172800 IN NS ns.uvg.edu.gt. gt. 172800 IN NS ns3.nic.mx. gt. 172800 IN NS osi2.gua.net. gt. 172800 IN NS sns-pb.isc.org. gt. 86400 IN NSEC gu. NS RRSIG NSEC gt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . q0iwozSzw8nTjbI8zu59/Qr7wBNmqyhmB3qMFgI25YJDdu1f/mYqkE0g A07w0TJmqcplHJAZ9fHk9ciC/QitkGwEhFhhRJoWV0EwUe2XrCFWrdah dPfYuIFV3KArg8MkTJ9wPVvhmCMwXszwDR4rETXcTLHuJiUOzBrzzx54 BYE= ns.uvg.edu.gt. 172800 IN A 168.234.68.2 ns.uvg.edu.gt. 172800 IN A 200.9.74.2 gu. 172800 IN NS gu.cctld.authdns.ripe.net. gu. 172800 IN NS ns.gu. gu. 172800 IN NS ns.edu.gu. gu. 172800 IN NS nsuog.edu.gu. gu. 86400 IN NSEC guitars. NS RRSIG NSEC gu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XkOeYm21v0R6GJJlLVB2NKqEODZpvr1QKXLhJGXA+xKt6ocfUXvn15T/ f4JJK690MEYzji/ZzHxbUjLvDQ2a1YMHMBT36WKwzobS+VLVnu+rM1XF O75XTvWTuPxaQDTmV8Q9V/SD5RZsXDdQj9RBjFl+6GBIhtGNZW6Vri51 +uU= ns.edu.gu. 172800 IN A 168.123.2.50 nsuog.edu.gu. 172800 IN A 67.98.164.133 ns.gu. 172800 IN A 168.123.4.10 guitars. 172800 IN NS a.ns.uniregistry.net. guitars. 172800 IN NS tld.isc-sns.com. guitars. 172800 IN NS tld.isc-sns.net. guitars. 172800 IN NS tld.isc-sns.info. guitars. 86400 IN DS 62849 5 1 7AFB61D09960E51EF0B0337834B17BA533E26D3F guitars. 86400 IN DS 62849 5 2 84B9ECF472CD56FF8EFDE4FBFEB45C2933369870062A0453E2D7F3A2 286F9A5E guitars. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Iw//Opmd6XIzOX4SqfKCqB76uXQlkn4SM/D5tnh+rs/TLZpEUzFqPY7z fvhP/m/xsNCAZUGpWZRJiiINg7Lw+kCswqJoVOlxzbDHyB9BmeIuw8s+ hw/NM4AaU56pqcndgVzb+Smu5q6GOb8KUE/peDlQgCdhmZSzYvyFeB/T Lj8= guitars. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S6CBeW+vVjg8Up95CnAvVujfXnacVyZNYnkNjYKXRMvGIhKe/QFhNTJS wKR6OCX9B2Rb4giVzlWtpvhNen/AImBr26nBcBCIRjn3JeVSkgohZ8+i okilg9a+6Skmoo+cq+n/WrL8NUtgv5Rfr0/0cD07fskHRcLcJg7WrBdI Rz0= guitars. 86400 IN NSEC guru. NS DS RRSIG NSEC guru. 172800 IN NS demand.beta.aridns.net.au. guru. 172800 IN NS demand.alpha.aridns.net.au. guru. 172800 IN NS demand.delta.aridns.net.au. guru. 172800 IN NS demand.gamma.aridns.net.au. guru. 86400 IN DS 61402 8 2 A5A658ABCC39ED42CDA94B7279375D690AFFB28B99A1F326CD20F417 B15AAE58 guru. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OOCJOYP5SWJIs6hRRgqMG0QBXyYKfjxSuFLf/J7FSWba2w3DT3iPXPLg O+OtgCkmuAvIBPdpFjzMRsp9rR1HF+WDiodcXVXjqEQQrMBwYtUvFiYO fyNaIEDlCeJ0Pc/Y161UAuasuOxtsKh0zJ2hVewuB268sp5jBFR7GYXN 76g= guru. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ikonXV/FiN7v8+IiI0xPp2MfWWtHZU3qxFP3R8xQ906bm8XthcmBYORm QOdwDxV7xQDAAdwYetuUr26uYaFwTP3w93Suxbc1MbDrU8cpMgTwBeGA zBWk22qAyasppBFgJEbu8y2wZza8qFDGeX+pg7rG49HevF4znrRQ9/Qh a2I= guru. 86400 IN NSEC gw. NS DS RRSIG NSEC gw. 172800 IN NS ns1.nic.gw. gw. 172800 IN NS ns3.nic.gw. gw. 86400 IN NSEC gy. NS RRSIG NSEC gw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dQY5wNN96U5mQsmF9B59oWi6Ev5EC065jASPlQRI0YSilnWr93t2Qeui O73K5+tH8CEzhqJAqSbT8LAXiZeInAzdE6zG/9qv4T3lWW7ToRelidrj dnZnxNwKaYUzo5J+VdnN7IUgcc3rvrN5T7s7/f8wRyB1uTxBacBT8rdt 0SE= ns1.nic.gw. 172800 IN A 81.91.170.10 ns3.nic.gw. 172800 IN A 193.171.255.35 gy. 172800 IN NS gy.cctld.authdns.ripe.net. gy. 172800 IN NS ns1.gtt.co.gy. gy. 172800 IN NS ns2.gtt.co.gy. gy. 172800 IN NS gy-ns.anycast.pch.net. gy. 172800 IN NS phloem.uoregon.edu. gy. 172800 IN NS sns-pb.isc.org. gy. 86400 IN NSEC hk. NS RRSIG NSEC gy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oetyCAVA4GzxZbJ9iFzTKv90ecPDwgxgIDSnTuW38XzsF1PbynCvWhio 3QL1D2lcGth0dcaYWcgNdmD2bwGmsrAppVimCTcp7r+GTMF/ihYt9+VW L/slS7LUGfY3ZaYL5/ICHbkEoBjugVPg+uJnUfiBCTn6ci8T2gqU1GAi JSg= ns1.gtt.co.gy. 172800 IN A 190.80.0.41 ns2.gtt.co.gy. 172800 IN A 190.80.0.42 hk. 86400 IN NSEC hm. NS RRSIG NSEC hk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LDT7w0ASelDXIQWZOB1389uqYMDQtwUstq/1JQoVu5zDlissmd39I+b0 7We41loDeixsh/vhjxgpH1g9ck7AyVZkahy0pGvIzY3F7qMztzwoe987 s5rFTbR5EevvgZCwlrQ3lxF7hxvcR9OKqJJzLHiI1HC6bHiE85+FqPgg jYc= hk. 172800 IN NS a.hkirc.net.hk. hk. 172800 IN NS b.hkirc.net.hk. hk. 172800 IN NS s.hkirc.net.hk. hk. 172800 IN NS t.hkirc.net.hk. hk. 172800 IN NS u.hkirc.net.hk. hk. 172800 IN NS v.hkirc.net.hk. hk. 172800 IN NS w.hkirc.net.hk. hk. 172800 IN NS x.hkirc.net.hk. hk. 172800 IN NS y.hkirc.net.hk. hk. 172800 IN NS z.hkirc.net.hk. ns2.cuhk.edu.hk. 172800 IN A 137.189.6.21 ns2.cuhk.edu.hk. 172800 IN AAAA 2405:3000:3:6::15 a.hkirc.net.hk. 172800 IN A 203.119.2.18 b.hkirc.net.hk. 172800 IN A 203.119.87.19 b.hkirc.net.hk. 172800 IN AAAA 2001:dca:1000::cb77:5713 s.hkirc.net.hk. 172800 IN A 128.32.136.3 s.hkirc.net.hk. 172800 IN AAAA 2607:f140:ffff:fffe::3 t.hkirc.net.hk. 172800 IN A 128.32.136.14 t.hkirc.net.hk. 172800 IN AAAA 2607:f140:ffff:fffe::e u.hkirc.net.hk. 172800 IN A 210.201.138.58 u.hkirc.net.hk. 172800 IN AAAA 2404:0:10a0::58 v.hkirc.net.hk. 172800 IN A 204.61.216.46 v.hkirc.net.hk. 172800 IN AAAA 2001:500:14:6046:ad::1 w.hkirc.net.hk. 172800 IN A 202.12.28.140 w.hkirc.net.hk. 172800 IN AAAA 2001:dc0:1:0:4777::140 x.hkirc.net.hk. 172800 IN A 202.45.188.39 x.hkirc.net.hk. 172800 IN AAAA 2405:3001:1:3a::27 y.hkirc.net.hk. 172800 IN A 137.189.6.21 y.hkirc.net.hk. 172800 IN AAAA 2405:3000:3:6::15 z.hkirc.net.hk. 172800 IN A 194.146.106.70 z.hkirc.net.hk. 172800 IN AAAA 2001:67c:1010:17::53 hm. 172800 IN NS ns1.registry.hm. hm. 172800 IN NS ns2.registry.hm. hm. 172800 IN NS ns3.registry.hm. hm. 86400 IN NSEC hn. NS RRSIG NSEC hm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tX+OAMawOTD3e2uUHckULzBa4xDdHih9yc/5Rv9WeeZ50nXn6nMw7Mq8 52MJyotFTDpT5Q8/eRvmSIpaeFax7VIJAHk8hu9zdOcdMaQZ+gPocjzS lG1JW5oQJ4lY95//EvVH6LWtYxufg0gQKiZ2Zvr6koNT/GLD9MsX3N+i pqQ= ns1.registry.hm. 172800 IN A 208.70.79.25 ns2.registry.hm. 172800 IN A 208.70.79.24 ns3.registry.hm. 172800 IN A 202.169.96.24 hn. 172800 IN NS sns-pb.isc.org. hn. 172800 IN NS pch-anycast.rds.org.hn. hn. 172800 IN NS nicmx-anycast.rds.org.hn. hn. 86400 IN DS 20599 8 2 B7CA2A70DEA7188CB7319A8049164EF9D0E3496D8FE4E3C135CBA845 2544BA72 hn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aiAGUWxFjK/B0nZMVJfxd3b+osiEadNF/a6gnBe3i9E4ViWFlSCrqVaK cOWLaKi7fB3xge1+hN8d4V+nsbPTmhjtlcjoEBskInu9bZtCAjcskEDq QqEQtLEkTSTReIF5CDLTXme207AIgjD8iBV+ZPenqY6yECR3RIH+M5xi I7w= hn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aKKvT857BTuV8ukbtReO4Xoq9Ckc8NoY86g1nkr0JEFctwUfMZzPkvKa jewc5gbBD5M9XKVIjRAcjKByT+FNll6NF0PqsbpIaEMo+kHYOPoL5GT7 wQqBC4TjfLH6xPWJ/3Qkgaa9UIYX0DXSyhl79NbOQmx+8jO7fZeJufvY SBE= hn. 86400 IN NSEC holdings. NS DS RRSIG NSEC nicmx-anycast.rds.org.hn. 172800 IN A 200.33.111.1 pch-anycast.rds.org.hn. 172800 IN A 204.61.216.64 pch-anycast.rds.org.hn. 172800 IN AAAA 2001:500:14:6064:ad::1 holdings. 172800 IN NS demand.beta.aridns.net.au. holdings. 172800 IN NS demand.alpha.aridns.net.au. holdings. 172800 IN NS demand.delta.aridns.net.au. holdings. 172800 IN NS demand.gamma.aridns.net.au. holdings. 86400 IN DS 11149 8 2 CC43CE2E88871B831D3160979357A360F32D2CEF4FC6FC2B013921AC BD6D1BE0 holdings. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . DfAuyZXrd95XdPpzSxt8Clert5aGrzsYbE2VuFmP0Q+uDBL9wwYf1Ml5 1/q4vkyvd3a+uZ/nc107o4dTlbWh9QuKvTJVhq1IyrpH24X7VCppznFF JcTIHLFFdT6t9nhtTx2yvlim1eEeV5Fu0uhM0UpqDYvApPAlamaE71Dv pH4= holdings. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . pQ73FMZUFfd2ugGa+U1Av2kOSLbT8NzBEEk0QRUIOp6VEkjDWa5xecpX un/KvLo2nfwva+aE8wxV3I6xWOIm8EFB7FyYWtqgPi6E83iD6l1biLRO FuItFLgPLDWahYxhkoFf1c6ivkQpwdWooV4g14JYgUkZnnCtz9XQ6Nwd CmA= holdings. 86400 IN NSEC holiday. NS DS RRSIG NSEC holiday. 172800 IN NS demand.beta.aridns.net.au. holiday. 172800 IN NS demand.alpha.aridns.net.au. holiday. 172800 IN NS demand.delta.aridns.net.au. holiday. 172800 IN NS demand.gamma.aridns.net.au. holiday. 86400 IN DS 35209 8 2 605926A35E2424BD2C7782F22B5E55157AFA1688AC643C0F45B3B6DE A435D47D holiday. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dNoovKZLkQK19nsFzOp8xYm6zzsonS40I+p8PCa3yO1g+BBsiwKTlhsu uEIcqPDvGAIp+0yse8z7HkFNYH1SwPj2/3aFVEED6Tun7h5ZFwpiyn+a 3Up34E++pWmD5N/okO18m/jVRm/vVtsQl3mvdHLLEprXvs9bnfttX/6R VVw= holiday. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dnJhTw3hXDlBABSdNlbFA//ikACBFpsQn+blp6n5st+SNhR5XAIk9tv5 LVUM0tJYCSFwQI9LF13EcR+6V1NNrRC4LP62XxjWp4sTqslF2XfnQYky QMtRdfNgWKN3HcjttB7u1/wnTUidfwji/3jkDx331ZEBagcXo1oWxWuY EbU= holiday. 86400 IN NSEC house. NS DS RRSIG NSEC house. 172800 IN NS demand.beta.aridns.net.au. house. 172800 IN NS demand.alpha.aridns.net.au. house. 172800 IN NS demand.delta.aridns.net.au. house. 172800 IN NS demand.gamma.aridns.net.au. house. 86400 IN DS 45637 8 2 FCE9DE111696A86214B6A3E1EA0FA42A193E1A7756C52187215099E9 9B7ACAE2 house. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . H2A5ensuuOzfBWcD6n1yjbVdPLeAVVtItVPO0BPCNgyDIkz4ojQDk+ib uNZ9GHpP9xAAq+/suUZ5pvj01jpO0aFrfYsCzrYfDqcoQP/mJoaMnrsN rVjOeue7XE990qlJMaKogRoRqrKMMjPQbhih7HKuBrArmHJzACOP82bc 2PA= house. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mqR0dWIMsjPSBzfSn3n1rhZdW2S6tEqTjt5KunQKlHKXGB4Ugi0YVc8N 3vdCT4HLDOD5j4cFur0PAr1p2RnuHCJ1N+JS7cDx9fECRftMpLiMzxvi nNMOc2q43T7xqMrJ7MQGp3sDg6awQd+uDFsPhnDGWKpdlO3gwwPQ2G/T x34= house. 86400 IN NSEC hr. NS DS RRSIG NSEC hr. 172800 IN NS ns5.univie.ac.at. hr. 172800 IN NS n3ns.nic.es. hr. 172800 IN NS sns-pb.isc.org. hr. 172800 IN NS hr-ns-1.carnet.hr. hr. 86400 IN NSEC ht. NS RRSIG NSEC hr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CZWYwQ32kT4vRLiAzJfNbhkSHbeUvOs4NiFe0sJQpow4x/RwsUpbyxNZ lHzzEjhgd2/ld/o7RUPvtUi/cuu07Wkgmhcvx2tzEWpPUV30JQ9vPmuI iMk8jKjVAYVaWOkSa3AoveA9N/Bb5a227MDdRPOZ1xRvUafliHPn0E4C XNU= hr-ns-1.carnet.hr. 172800 IN A 161.53.160.100 hr-ns-1.carnet.hr. 172800 IN AAAA 2001:b68:ff:1::100 ht. 172800 IN NS dns.princeton.edu. ht. 172800 IN NS ns3.nic.fr. ht. 172800 IN NS ht-ns.anycast.pch.net. ht. 172800 IN NS charles.cdec.polymtl.ca. ht. 86400 IN NSEC hu. NS RRSIG NSEC ht. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TpNON3MHZpgDXx3KoJ2KQgg8zOekhJzCfXMmAqISel1HgXskWM9ySp+q KymBCIUcYoqQTsBzEacj7n+XW8UNyjRKl5ENwDeHLnc/9BeU1Aow7P7g A6u1kj1oEj96fW8/XrOhuoOozalA/uJWDgS4V+p/JILVcc7A2aTvN9o6 oa0= hu. 172800 IN NS b.hu. hu. 172800 IN NS c.hu. hu. 172800 IN NS d.hu. hu. 172800 IN NS e.hu. hu. 172800 IN NS ns.nic.hu. hu. 172800 IN NS ns2.nic.fr. hu. 172800 IN NS ns-com.nic.hu. hu. 86400 IN NSEC id. NS RRSIG NSEC hu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QF0f7K8u+1Jb+remY+zu+JXKoLS0NaLQaLFPBf1USy3VczOQR38Tu/hN kAeIGyXUL+Wyh2SSOiVqGAs/qQjYpRpkusNw8VxdmNRDrmTjptkIm00G IgFkEHemb/W98MwTuMfSeK9hqP0Jgp2G+tlNq5/Q0Vku0/iJFNoJegMK a3o= b.hu. 172800 IN A 193.239.149.161 b.hu. 172800 IN AAAA 2001:738:4:4000::3 c.hu. 172800 IN A 193.6.16.1 d.hu. 172800 IN A 195.70.35.250 e.hu. 172800 IN A 194.0.25.11 e.hu. 172800 IN AAAA 2001:678:20::11 ns.nic.hu. 172800 IN A 193.239.148.48 ns.nic.hu. 172800 IN AAAA 2001:738:4:8000::48 ns-com.nic.hu. 172800 IN A 194.0.1.12 ns-com.nic.hu. 172800 IN AAAA 2001:678:4::c id. 172800 IN NS g.dns.id. id. 172800 IN NS ns1.id. id. 172800 IN NS ns1.rad.net.id. id. 172800 IN NS ns1.indo.net.id. id. 172800 IN NS ns2.cbn.net.id. id. 172800 IN NS sec3.apnic.net. id. 86400 IN NSEC ie. NS RRSIG NSEC id. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vExZg4LWa0N9xMbARv4JeuZ5Ily8x6Wj7xQLG7GyDB8pyl2on+2OVO0i NfgFTznmNdoFVVbiBwtdbsqjREjfpqZvHw20m8sUknAzArbv6MsZK9bq 8PXyUCd1FGmqPkE1wGh844Hq69+1p3qgrvaMJVQmVyR8S14BkINl7acI 1ts= g.dns.id. 172800 IN A 203.119.112.84 g.dns.id. 172800 IN AAAA 2001:dd8:1f:4::84 ns2.cbn.net.id. 172800 IN A 202.158.40.1 ns2.cbn.net.id. 172800 IN AAAA 2001:d10:a:53::53 ns1.indo.net.id. 172800 IN A 202.159.32.2 ns1.rad.net.id. 172800 IN A 202.154.1.2 ns1.id. 172800 IN A 202.155.30.227 ns1.id. 172800 IN AAAA 2001:e00:1800::2 ie. 86400 IN NSEC il. NS RRSIG NSEC ie. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QG/w1lj9aznpHMBXQbs08W9692hy2BKfDfOOtCndGL4SKUDEDJrRvfLn bsxfLC5KV3KtEJ6a9EAPBvOlHnbJYpDQCc/njrSMtzVnX0noqe+cKgUK DHn1XaAhLvrNBAUm/M/j0N4PGgshIBhHat6HU+wSweZNfCItcKPRcTwN zYM= ie. 172800 IN NS a.iedr.ie. ie. 172800 IN NS b.iedr.ie. ie. 172800 IN NS c.iedr.ie. ie. 172800 IN NS d.iedr.ie. ie. 172800 IN NS ns3.ns.esat.net. ie. 172800 IN NS gns1.domainregistry.ie. ie. 172800 IN NS gns2.domainregistry.ie. ie. 172800 IN NS ns-ie.nic.fr. auth01.connect.ie. 172800 IN A 87.198.184.50 gns1.domainregistry.ie. 172800 IN A 198.133.199.102 gns2.domainregistry.ie. 172800 IN A 198.133.199.103 a.iedr.ie. 172800 IN A 77.72.72.44 a.iedr.ie. 172800 IN AAAA 2a01:4b0::3 b.iedr.ie. 172800 IN A 77.72.72.34 b.iedr.ie. 172800 IN AAAA 2a01:4b0::2 c.iedr.ie. 172800 IN A 194.146.106.98 d.iedr.ie. 172800 IN A 77.72.229.245 il. 172800 IN NS nsa.ns.il. il. 172800 IN NS nsb.ns.il. il. 172800 IN NS nsd.ns.il. il. 172800 IN NS nse.ns.il. il. 172800 IN NS nsg.ns.il. il. 172800 IN NS ildns.huji.ac.il. il. 172800 IN NS lookup.iucc.ac.il. il. 172800 IN NS sns-pb.isc.org. il. 86400 IN NSEC im. NS RRSIG NSEC il. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tP7XBi8ZnoiX2Vz9Deda45H2w+LlwjeOjJPDrju6oz/UJ4mgMRT2IRdb JYq/FtO+zNmjp+AOdjyJUu1QSn4odn0Iqi6XkT4jQuolN8iIENcw4wh2 1mc4ofDujgMhIdW1KymSbIqdP6vdmxSTMnBelBUNWob0qDc05e0q5/va Pr8= ildns.huji.ac.il. 172800 IN A 128.139.6.66 lookup.iucc.ac.il. 172800 IN A 128.139.34.240 lookup.iucc.ac.il. 172800 IN AAAA 2001:bf8:900:6::808b:22f0 nsa.ns.il. 172800 IN A 192.115.210.58 nsb.ns.il. 172800 IN A 192.115.210.60 nsd.ns.il. 172800 IN A 149.20.56.132 nsd.ns.il. 172800 IN AAAA 2001:4f8:3:37::11 nse.ns.il. 172800 IN A 192.115.141.253 nsg.ns.il. 172800 IN A 81.91.161.212 nsg.ns.il. 172800 IN AAAA 2a02:568:ffff:8::53 im. 172800 IN NS ns4.ja.net. im. 172800 IN NS hoppy.iom.com. im. 172800 IN NS barney.advsys.co.uk. im. 172800 IN NS pebbles.iom.com. im. 86400 IN NSEC immobilien. NS RRSIG NSEC im. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . AfSUXkFdS6Z5lsy3oZNHU7ZFU7NJe2OlANnkZUdIFh5ye4JNFMOm73b+ L9u7D4F79XJPdPE1sKG/BfV9awFPVoAzrTYf6TWuu+b4Q7XGFe1Fpl7f O8Ngnp0zrql8xfIpPcAZHIJAAZUolKocERH4QujyB5LAUQJ4h/yLQrFA gLo= immobilien. 172800 IN NS demand.beta.aridns.net.au. immobilien. 172800 IN NS demand.alpha.aridns.net.au. immobilien. 172800 IN NS demand.delta.aridns.net.au. immobilien. 172800 IN NS demand.gamma.aridns.net.au. immobilien. 86400 IN DS 60322 8 2 7BB72F07C2FE7F5BB0DF667556FBC9BF5CFB31D66121D4AB5BCFDD0D 29D39FCC immobilien. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . lrbZO9bbEmqgbAsGobGfTQEyAFnNJ69yPLXHtyEVz06nCOYt0HRCWh2G tRDL23kt8zseviMajmwLsvvEf+sWWQO0vVzirsA/W4gI5rw1C9Waj26I txiJfQZR95fPjbAZM/3CWrZk/nOGACVrBX5Srq32oKepNVoun6vOV1Bn nlU= immobilien. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ql5LKqAhrTO0gAODJsmCk/odMzMubiCi+c0uU68onQx/VrTOwucVHsYz nvT5NugIYXfrC59UD3a3S3gufj2/xdj0kddmJ+DkFOPJtztypEEZflvW 8025z68+m8huHZ/X4IrufEwQQhjL/vzEhBzhxzNTw4YEr1unb4ReTVSD jx0= immobilien. 86400 IN NSEC in. NS DS RRSIG NSEC in. 172800 IN NS a0.in.afilias-nst.info. in. 172800 IN NS a1.in.afilias-nst.in. in. 172800 IN NS a2.in.afilias-nst.info. in. 172800 IN NS b0.in.afilias-nst.org. in. 172800 IN NS b1.in.afilias-nst.in. in. 172800 IN NS b2.in.afilias-nst.org. in. 172800 IN NS c0.in.afilias-nst.info. in. 172800 IN NS ns7.cdns.net. in. 86400 IN DS 64788 7 1 82E4E46622B646086C1051A6093DEB897BD1C022 in. 86400 IN DS 64788 7 2 4021B67522D8935C8D8D7CE32900ACB382F55E3D1A8DE920233CBE70 A13DA85B in. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z+tJGUt9hIPU2vqXKRcWHa8xtnuHx7XJ4g4akPC6XDxgdsE9Blby4NTQ Daq2ss+0DSLkRy+oY7r3GO9jT0OBono7hqe+dn6f17Vzi8zEzYKrTSUe DkLalNcZhtCFaUFhblJbDlkO8iwhX7hP+AakFSFiZVhZPUn68qNd4lk8 vec= in. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . JjxR4BKPUDTaOjTrS28BdFtpOI1m1Mb2wp9paW+Uzcar72WLE/aOxo7N M+cKa1xbiRji7872XYqjrkRveH5/RKtLTTzxgSgZ5/qHrA4/Dr5QjltK JGwHUJCWej9NTYlNgiE/YFCNEGmcv6W9WokW9CwwevhFPiswRe8a19zK qVo= in. 86400 IN NSEC info. NS DS RRSIG NSEC a1.in.afilias-nst.in. 172800 IN A 115.249.164.142 a1.in.afilias-nst.in. 172800 IN AAAA 2001:4528:fff:13::142 b1.in.afilias-nst.in. 172800 IN A 125.19.40.90 b1.in.afilias-nst.in. 172800 IN AAAA 2404:a800:2:1e::19:90 info. 86400 IN NSEC institute. NS DS RRSIG NSEC info. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bio9hJFP3xz6umHipL/QwssC2jUt2t9U0ppOrQ+wqLsX033IkE3mM96t xKclqHCxRGI20/85NKcNRYPCAdIp8cCFxSZjfh71iL04oB4QW22NL8X0 k+71cXcj0roHZ4/9uWygCffxTNlm+A8mT+mu1vyzeQ/1a+5WJ57h5sHP HQU= info. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . E0S9Fo8IjX1c8u9tXpLmnpSo0Kl9RIyhi+aTrAV5l7Nwck6Fr5DtWdwi cFWySPYUwsnS0yvRKfz6r8GH4xtnGdpSrGNuy8xAhuYaz6bZdcpu7jIV +Tv0lYmjIUyVfJ0KrtXnPXuPdiucGX51QcDBOhgxemKLEHvigJCD37j3 cik= info. 172800 IN NS a0.info.afilias-nst.info. info. 172800 IN NS a2.info.afilias-nst.info. info. 172800 IN NS b0.info.afilias-nst.org. info. 172800 IN NS b2.info.afilias-nst.org. info. 172800 IN NS c0.info.afilias-nst.info. info. 172800 IN NS d0.info.afilias-nst.org. info. 86400 IN DS 54531 7 1 93D30693C59CD11646CEAA77DCED10DA13BEEDE9 info. 86400 IN DS 54531 7 2 E2D262469CB998642F772610A77AAEABB84A4F71CF40B9E30C03B9C9 E1F6409C a0.aero.afilias-nst.info. 172800 IN A 199.254.51.1 a0.aero.afilias-nst.info. 172800 IN AAAA 2001:500:1d::1 a2.aero.afilias-nst.info. 172800 IN A 199.249.115.1 a2.aero.afilias-nst.info. 172800 IN AAAA 2001:500:43::1 c0.aero.afilias-nst.info. 172800 IN A 199.254.53.1 c0.aero.afilias-nst.info. 172800 IN AAAA 2001:500:1f::1 a0.asia.afilias-nst.info. 172800 IN A 199.19.55.1 a0.asia.afilias-nst.info. 172800 IN AAAA 2001:500:d::1 a2.asia.afilias-nst.info. 172800 IN A 199.249.114.1 a2.asia.afilias-nst.info. 172800 IN AAAA 2001:500:42::1 c0.asia.afilias-nst.info. 172800 IN A 199.254.29.1 c0.asia.afilias-nst.info. 172800 IN AAAA 2001:500:17::1 a0.cctld.afilias-nst.info. 172800 IN A 199.254.59.1 a0.cctld.afilias-nst.info. 172800 IN AAAA 2001:500:25::1 a2.cctld.afilias-nst.info. 172800 IN A 199.249.116.1 a2.cctld.afilias-nst.info. 172800 IN AAAA 2001:500:44::1 c0.cctld.afilias-nst.info. 172800 IN A 199.254.61.1 c0.cctld.afilias-nst.info. 172800 IN AAAA 2001:500:27::1 a0.in.afilias-nst.info. 172800 IN A 199.7.87.1 a0.in.afilias-nst.info. 172800 IN AAAA 2001:500:29::1 a2.in.afilias-nst.info. 172800 IN A 199.249.117.1 a2.in.afilias-nst.info. 172800 IN AAAA 2001:500:45::1 c0.in.afilias-nst.info. 172800 IN A 199.253.57.1 c0.in.afilias-nst.info. 172800 IN AAAA 2001:500:51::1 a0.info.afilias-nst.info. 172800 IN A 199.254.31.1 a0.info.afilias-nst.info. 172800 IN AAAA 2001:500:19::1 a2.info.afilias-nst.info. 172800 IN A 199.249.113.1 a2.info.afilias-nst.info. 172800 IN AAAA 2001:500:41::1 c0.info.afilias-nst.info. 172800 IN A 199.254.49.1 c0.info.afilias-nst.info. 172800 IN AAAA 2001:500:1b::1 a2.me.afilias-nst.info. 172800 IN A 199.249.119.1 a2.me.afilias-nst.info. 172800 IN AAAA 2001:500:47::1 a0.mobi.afilias-nst.info. 172800 IN A 199.254.55.1 a0.mobi.afilias-nst.info. 172800 IN AAAA 2001:500:21::1 a2.mobi.afilias-nst.info. 172800 IN A 199.249.118.1 a2.mobi.afilias-nst.info. 172800 IN AAAA 2001:500:46::1 c0.mobi.afilias-nst.info. 172800 IN A 199.254.57.1 c0.mobi.afilias-nst.info. 172800 IN AAAA 2001:500:23::1 a0.org.afilias-nst.info. 172800 IN A 199.19.56.1 a0.org.afilias-nst.info. 172800 IN AAAA 2001:500:e::1 a2.org.afilias-nst.info. 172800 IN A 199.249.112.1 a2.org.afilias-nst.info. 172800 IN AAAA 2001:500:40::1 c0.org.afilias-nst.info. 172800 IN A 199.19.53.1 c0.org.afilias-nst.info. 172800 IN AAAA 2001:500:b::1 a0.post.afilias-nst.info. 172800 IN A 65.22.0.1 a0.post.afilias-nst.info. 172800 IN AAAA 2a01:8840::1 a2.post.afilias-nst.info. 172800 IN A 65.22.4.1 a2.post.afilias-nst.info. 172800 IN AAAA 2a01:8840:4::1 c0.post.afilias-nst.info. 172800 IN A 65.22.2.1 c0.post.afilias-nst.info. 172800 IN AAAA 2a01:8840:2::1 a0.pro.afilias-nst.info. 172800 IN A 199.182.0.1 a0.pro.afilias-nst.info. 172800 IN AAAA 2001:500:c0::1 a2.pro.afilias-nst.info. 172800 IN A 199.182.32.1 a2.pro.afilias-nst.info. 172800 IN AAAA 2001:500:e0::1 c0.pro.afilias-nst.info. 172800 IN A 199.182.16.1 c0.pro.afilias-nst.info. 172800 IN AAAA 2001:500:d0::1 a0.xxx.afilias-nst.info. 172800 IN A 199.115.152.1 a0.xxx.afilias-nst.info. 172800 IN AAAA 2001:500:a0::1 a2.xxx.afilias-nst.info. 172800 IN A 199.115.156.1 a2.xxx.afilias-nst.info. 172800 IN AAAA 2001:500:a4::1 c0.xxx.afilias-nst.info. 172800 IN A 199.115.154.1 c0.xxx.afilias-nst.info. 172800 IN AAAA 2001:500:a2::1 tld.isc-sns.info. 172800 IN A 72.52.71.3 tld.isc-sns.info. 172800 IN AAAA 2001:470:1a::3 tld5.ultradns.info. 172800 IN A 192.100.59.11 institute. 172800 IN NS demand.beta.aridns.net.au. institute. 172800 IN NS demand.alpha.aridns.net.au. institute. 172800 IN NS demand.delta.aridns.net.au. institute. 172800 IN NS demand.gamma.aridns.net.au. institute. 86400 IN DS 33412 8 2 049FCBEE91ADA923921C8A4204D7AAA3CEABE0ABC33021385EB491D6 CB865C15 institute. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . gnyw8q+gQ+FRV0peDbuPaoA9JSIBtI6e/cd7gmTyyw5vsfqb/DmCzybR M8wg7Bzql6QSz5eHOCCRF+7D6IFdE8MRA+GtzrHI3r92lbdbT4H2ibxC WgfV7tgO5y2xAuuWyPcO+tvYukIwMkwXOHcoq7M0LJ7hEjwL9sGz8LG7 mso= institute. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rRDmLrPoRqMBVbDpFzA9DrjHxaLNrQe/M7dW/a+EkUWr3rlfWAIPz/gR 0LbU1vKrAV1KlXjoF+DO3Tu2ub4wQ8oLW2WohD7IcucNvEXeO8RuC8wZ 32QsFxskzP29Tk7nIXexS3S1b81dG38QzvRyyrPkAVXeo0YUPrg3xUgr J00= institute. 86400 IN NSEC int. NS DS RRSIG NSEC int. 172800 IN NS ns.uu.net. int. 172800 IN NS ns.icann.org. int. 172800 IN NS ns0.ja.net. int. 172800 IN NS ns1.cs.ucl.ac.uk. int. 172800 IN NS sec2.authdns.ripe.net. int. 86400 IN NSEC international. NS RRSIG NSEC int. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . W0vHInNZLUG2BhLiJOWcpKGCATt7xqsS562jrl7SC8jeG2CokJcKXNm6 FvA3af8h0wgSQoB1GzwwiT/uJElvqDHzubV6DT96nE3ArLc4SIDxcLVk 8fmmNJpdqcSYNx8K1SmSnoHKG8IR1D0bWrVX/ibErJLzXtCV6NfqpfPO T0M= international. 172800 IN NS demand.beta.aridns.net.au. international. 172800 IN NS demand.alpha.aridns.net.au. international. 172800 IN NS demand.delta.aridns.net.au. international. 172800 IN NS demand.gamma.aridns.net.au. international. 86400 IN DS 11137 8 2 F09799F34E9A973DBCF4C647D03C6A2C2E41976D04218F41B82ED6F8 CCAFB2DC international. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VhYXTlV+HhFtKmVUFBLHbdJM5fpyuHVGwofOpgneD/NnVlqL+kgFowjF HXTzNl69VDV9puv24yVQqYmjQQ/V9FDFOjknNR9B8R9dADhoh/oku3AF 3kdLC3hjE2889ID2wfYd97DglYIwkNtNEBqRNoC7n0cj3+eWANdI2Nlv fHI= international. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . E4e7WVKdCWOMV+whV7H9pTX2Xih54CW84ihEKhGLXiVI8NTXA5w7CQyq homJqc6hYc9qNCf5dDcMBfrDH6NLPrjg1qOIlwhaY5nCihS35wek7Drd +BP9ug1QWUgVDK3KRdJIW1AnwMndhJz33S7xJ9dgxSpm0hRHtGVFFDey SIU= international. 86400 IN NSEC io. NS DS RRSIG NSEC io. 172800 IN NS a.nic.io. io. 172800 IN NS a.ns13.net. io. 172800 IN NS b.nic.ac. io. 172800 IN NS b.nic.io. io. 172800 IN NS b.ns13.net. io. 172800 IN NS ns1.communitydns.net. io. 172800 IN NS ns3.icb.co.uk. io. 86400 IN DS 13395 7 1 C048489AEC2420E18F5F423192F132106C3691C1 io. 86400 IN DS 13395 7 2 070BBE5BE5A4BE6271C543BDE99E9981E5D4191740E531AF2585C5D1 619C83F0 io. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Lp2vSN1H5ymPw2rPQ93/VFkP+yiuzXvMjKK4YllX+gszW8mp4a28yWn7 YldcNY1Ax1MZ6LZ9VgpsU4Y3HEUmoxVQTj0eHM5GJr9l8bx5+Pd8d8Yd 17I9mAAY8lmt2c1Q1epAXv/i1nj3Vyy+25oM3Lm0jwU3LacJfnagFIpf qeI= io. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kswBOY3ukIMDZqLKz96D4ZLk5WFAfLZ6NPdLeNRw1a+G/0k3KGKTc3if 9mHRA7xgKKwRW+4iUoNLUr/9FWL+Hq7fZzcWvD07KGALqXKwgV74ULud yfpMw/+2LM0oLlqIk3K58HMj8BGKSViOHCvFg6LkS6DYRU/dbX7iDcTt dwE= io. 86400 IN NSEC iq. NS DS RRSIG NSEC a.nic.io. 172800 IN A 64.251.31.179 b.nic.io. 172800 IN A 194.0.2.1 b.nic.io. 172800 IN AAAA 2001:678:5::1 iq. 172800 IN NS iq.dns.cocca.org.nz. iq. 172800 IN NS ns1.cmc.iq. iq. 172800 IN NS sns-pb.isc.org. iq. 172800 IN NS nsp-anycast.cmc.iq. iq. 86400 IN NSEC ir. NS RRSIG NSEC iq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HeEc1ObC4X43Qk/YaSBOh9tuF/JZczDurQU05H098GzvXiJwG1KJR7qs INrUhxJdP3DDmwuChC27TQPhs+++7al2dg3KYc6rJx7x1pbkl40rHcou 85robZsypelORhNOG15CZkdhyNS/ywh5ylKLOvyWgQrsXcMtv/eEJITj ES8= ns1.cmc.iq. 172800 IN A 194.117.57.100 nsp-anycast.cmc.iq. 172800 IN A 194.117.58.42 nsp-anycast.cmc.iq. 172800 IN AAAA 2001:500:14:8001:ad::42 ir. 172800 IN NS a.nic.ir. ir. 172800 IN NS ns.irnic.ir. ir. 172800 IN NS ns5.univie.ac.at. ir. 86400 IN NSEC is. NS RRSIG NSEC ir. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qFg0WhBWuq5XBDkZQJwc6Ij4XLD2zhosUNaqvY7nE1QmVSg6KZrpiL6+ Wv72U/+KmLHM6loulXCpPMTZ+hCECDJ1oyB7ZiDq59QBmaXY9TDc1hiz ZnmFhsV6RkY8VCStSREa0gmeKpq+Hg69DoBm9OaXhENHlOgJbEvTTMkH KA8= ns.irnic.ir. 172800 IN A 193.189.122.83 a.nic.ir. 172800 IN A 193.189.123.2 is. 172800 IN NS is.cctld.authdns.ripe.net. is. 172800 IN NS sab.isnic.is. is. 172800 IN NS sunic.sunet.se. is. 172800 IN NS durinn.rhnet.is. is. 172800 IN NS isgate.is. is. 172800 IN NS sns-pb.isc.org. is. 86400 IN DS 26726 8 1 B2416A62E8732568826213019E7F09AF108183CE is. 86400 IN DS 26726 8 2 6984FEF569CFDB2CE00AFC62B5763AD50306EB0D4816A7C6CF921BF6 6B12245A is. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . s/F2WR1c/ZrHKr4BEBIM9JfyXDxkb+8HX56HgmjDgYVpq92lsynJn9O3 cJppsStf3dRJ4eCXgE7lCC2zALo2jLhtRReT+VDzOyUnQ5C0nJWvtXAR UEgT8PBl+mdgDhmpVaokWPZ/QV8VnhhnagvmP8cRMsK0v0wD2tJUArUC +48= is. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tjJsZbUUogDb7TfzyvgPFF8nF6tHtglb0jDk+ZXA6EZ0RO/aH0vtJ4Cz C9ygjfRR5qTFYEs5LIMxp/YLh8vZ867ox9p7kCYZr1hpV62Wdwx+VJtz 9dha2cD45nohli3Ix36+KI7MjGr9nGGqVdknb4OX4rKnZE7MO7bCdPdZ rnY= is. 86400 IN NSEC it. NS DS RRSIG NSEC isgate.is. 172800 IN A 193.4.58.51 isgate.is. 172800 IN AAAA 2001:67c:6c:58::51 sab.isnic.is. 172800 IN A 194.146.106.58 sab.isnic.is. 172800 IN AAAA 2001:67c:1010:14::53 durinn.rhnet.is. 172800 IN A 130.208.16.20 it. 86400 IN NSEC je. NS RRSIG NSEC it. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XaT1yZmmu53xa0lOf8OlAHP0WpotKT1kWTG0TkGE88iLEXUQNPHmlVz6 /QsZxlr3LRgfeNjqUhpdUYN25B+Jx2DB58NPNcrXfm5EvcETzhEEnJuz 6CudUUg0UpIL/hwp6JciuvMK8czaekpiKgZhYjgwNi0TsrPrZ8JHYnfp 1EQ= it. 172800 IN NS a.dns.it. it. 172800 IN NS c.dns.it. it. 172800 IN NS m.dns.it. it. 172800 IN NS r.dns.it. it. 172800 IN NS dns.nic.it. it. 172800 IN NS nameserver.cnr.it. ns-al.isti.cnr.it. 172800 IN A 194.119.192.8 nameserver.cnr.it. 172800 IN A 194.119.192.34 nameserver.cnr.it. 172800 IN AAAA 2a00:1620:c0:220:194:119:192:34 a.dns.it. 172800 IN A 194.0.16.215 a.dns.it. 172800 IN AAAA 2001:678:12:0:194:0:16:215 c.dns.it. 172800 IN A 194.0.1.22 c.dns.it. 172800 IN AAAA 2001:678:4::16 m.dns.it. 172800 IN A 217.29.76.4 m.dns.it. 172800 IN AAAA 2001:1ac0:0:200:0:a5d1:6004:2 r.dns.it. 172800 IN A 193.206.141.46 r.dns.it. 172800 IN AAAA 2001:760:ffff:ffff::ca osiris.namex.it. 172800 IN A 193.201.40.6 osiris.namex.it. 172800 IN AAAA 2001:7f8:10:f00a::6 seth.namex.it. 172800 IN A 193.201.40.7 seth.namex.it. 172800 IN AAAA 2001:7f8:10:f00a::7 dns.nic.it. 172800 IN A 192.12.192.5 dns.nic.it. 172800 IN AAAA 2a00:d40:1:1::5 je. 172800 IN NS a.ci-servers.net. je. 172800 IN NS b.ci-servers.org. je. 172800 IN NS c.ci-servers.org. je. 172800 IN NS d.ci-servers.je. je. 172800 IN NS e.ci-servers.gg. je. 172800 IN NS ns0.ja.net. je. 172800 IN NS ns99.dns.net.nz. je. 86400 IN NSEC jm. NS RRSIG NSEC je. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uox3mRSwz8Ev4vAascq9o/6guNDYQNULf9vCKCakXtEKYk0fHXIImtu+ Du1DnoCLKWgMTPRcABFrfaVSRW5Xz31rLlrJcuNRGBQIQkvm+6RM4yDW 0axkxtAetrA/EFJ6e/OJDqE9ppEHE2ab4VO+u6VGcazm8XM5UQIzeSpH sKk= d.ci-servers.je. 172800 IN A 193.201.42.178 jm. 172800 IN NS jm.cctld.authdns.ripe.net. jm. 172800 IN NS ns.jm. jm. 172800 IN NS ns.utechjamaica.edu.jm. jm. 172800 IN NS ns3-jm.fsl.org.jm. jm. 172800 IN NS phloem.uoregon.edu. jm. 86400 IN NSEC jo. NS RRSIG NSEC jm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . R0Kws8s96f0jN6qNjRj3G7H4yWhd3Z09fnRmW+lOq+ULaQbhPTNN+1CC CBiCmqHVmVr1zkIdYHNqyHs67R726vj/nahPZgYo7nnery7nobrEtITV G2jWVrIGB+4t/vpZzE/r1M/wHTUdM5L1p5KLJiMydKk7dt+2ZWq/18Sb cAE= ns.utechjamaica.edu.jm. 172800 IN A 200.9.115.2 ns.jm. 172800 IN A 196.2.1.6 ns3-jm.fsl.org.jm. 172800 IN A 196.3.191.66 jo. 172800 IN NS jo.cctld.authdns.ripe.net. jo. 172800 IN NS rip.psg.com. jo. 172800 IN NS amra.nic.gov.jo. jo. 172800 IN NS petra.nic.gov.jo. jo. 172800 IN NS jordan1st.nic.gov.jo. jo. 86400 IN NSEC jobs. NS RRSIG NSEC jo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kydDd6abAl2+KmZmdrXkbc73270mif67G1hWUt3xxBxByAhC4taaqiD2 7QSsdmHqh9I1ZFOqxzWo20WgiX7gX+7NAKbssdB9OHesqGJLYIadry3S UsVQleEIWRQ4nTSVaLfl4WofI+pGpRMToiJy2jOofrJ+G91tsORtT4+d LCs= amra.nic.gov.jo. 172800 IN A 193.188.66.103 jordan1st.nic.gov.jo. 172800 IN A 193.188.69.19 petra.nic.gov.jo. 172800 IN A 193.188.66.2 jobs. 172800 IN NS a5.nstld.com. jobs. 172800 IN NS c5.nstld.com. jobs. 172800 IN NS d5.nstld.com. jobs. 172800 IN NS f5.nstld.com. jobs. 172800 IN NS g5.nstld.com. jobs. 172800 IN NS h5.nstld.com. jobs. 172800 IN NS l5.nstld.com. jobs. 86400 IN NSEC jp. NS RRSIG NSEC jobs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GhLlYY5fAkdJ2+7jQdyao4bQTnF2r/52NaRCPIkFyD1JGmM5pPW+9XYW TvIEcA7EdibcKZOQRh0KgJmAOetJHGd3KKdbIPrNlOmuL7i18AfUfBK4 wzlVPw9o/WxPFHradX3StqkwT76Z6Z3pd/n/1bGdgznvwwT1Xgw0+wCQ ntc= jp. 86400 IN NSEC kaufen. NS DS RRSIG NSEC jp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iu8Zk968LAxWWnbciXbz4vvp8VRZDG1Ix+7NtLFW+3fIZrlPoHfQESeJ H3kZw8fMpCJNzxWmR99R6jrpjl3hiLXN3Nul/sKeoHQGx35veD7DOtur vRjCzX+5bv3BQjH8kvLK//sNLpT1LGrfGIZCYxhWNEQfQAA4ua6pwULY ZM0= jp. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . rh2nEGj2lsOIFDt1l//VgP95fBsPvdwP+sm14tMJgZCJuMjKLXAgDSQz MMWscfwI2bkRjNFoE1jsNjQRU29gjoSF4ztBtzyxWH8r+YZhKn02kc5Z 4LpZkUNghGXYyEQIM+RmyC6P3KCdUpimKoOIam6Mk+Y5HxBS2tqadPa3 SPg= jp. 172800 IN NS a.dns.jp. jp. 172800 IN NS b.dns.jp. jp. 172800 IN NS c.dns.jp. jp. 172800 IN NS d.dns.jp. jp. 172800 IN NS e.dns.jp. jp. 172800 IN NS f.dns.jp. jp. 172800 IN NS g.dns.jp. jp. 86400 IN DS 60700 8 1 96591579EBE5582AF021571AB2359D274A20E62F jp. 86400 IN DS 60700 8 2 FC26CDBBDB18FAB2D9D0DA6933DA77D7384BE4BBC2DAF75AF9CE3CC9 9797C086 ns20.iij.ad.jp. 172800 IN A 202.232.2.161 ns20.iij.ad.jp. 172800 IN AAAA 2001:240::161 a.dns.jp. 172800 IN A 203.119.1.1 a.dns.jp. 172800 IN AAAA 2001:dc4::1 b.dns.jp. 172800 IN A 202.12.30.131 b.dns.jp. 172800 IN AAAA 2001:dc2::1 c.dns.jp. 172800 IN A 156.154.100.5 c.dns.jp. 172800 IN AAAA 2001:502:ad09::5 d.dns.jp. 172800 IN A 210.138.175.244 d.dns.jp. 172800 IN AAAA 2001:240::53 e.dns.jp. 172800 IN A 192.50.43.53 e.dns.jp. 172800 IN AAAA 2001:200:c000::35 f.dns.jp. 172800 IN A 150.100.6.8 f.dns.jp. 172800 IN AAAA 2001:2f8:0:100::153 g.dns.jp. 172800 IN A 203.119.40.1 kaufen. 172800 IN NS demand.beta.aridns.net.au. kaufen. 172800 IN NS demand.alpha.aridns.net.au. kaufen. 172800 IN NS demand.delta.aridns.net.au. kaufen. 172800 IN NS demand.gamma.aridns.net.au. kaufen. 86400 IN DS 23962 8 2 EF294C18A9BB33EE9D090585EF1C0F1575AA3F7A59CB07DBDDDE9CEC 4D67BD93 kaufen. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . DY/s7HIO0AAoXC6gtSwFHj/jRehr7Tc69XF8XFBsj+QgC0UqinHaereA 4wcXt4gm23XQCNpV83MdCmf9hImAXFovKqK357tFWiZ7s0iA7DSlBNZN 4QiMRJBXu93RJCEL5KzNfHXKuNeJZ/wNa0X+zIhfHUMRJ5hC4FSvSMYD hZI= kaufen. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vS+xr8sRirPd/myh0bDeHy9zY5fPZhV20C7Yip4Ku3ZkquzlkDsf52u9 6UhjIOnfzUqkvZbs6rgOs+OnWh2SH7OX7HSaMq51wat/xBh+raPvjYVt duhHjWaIKI596Bqwei2YZDxJM0QEzFmcPhlhdnoEnkhUrQjp/02+OXpA mNw= kaufen. 86400 IN NSEC ke. NS DS RRSIG NSEC ke. 172800 IN NS ns.anycast.kenic.or.ke. ke. 172800 IN NS ns1.coza.net.za. ke. 172800 IN NS mzizi.kenic.or.ke. ke. 172800 IN NS ns-ke.afrinic.net. ke. 86400 IN NSEC kg. NS RRSIG NSEC ke. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FPieUzHTjqCcMecVBfc3yGfgWHop6gEjEFsvOzTpcVaNBMIxh8KphYhC is9xWvOnB9IRyBpSWIZQtUHiU6bfhDM3B/fQmmQHUJSuW+1JQjPnww/b mJoVnCJ/jehRV5aJ1dMV7aMhvCwf+uMBOARt3EprU09sX1nClERVNjap PEg= ns.anycast.kenic.or.ke. 172800 IN A 204.61.216.7 ns.anycast.kenic.or.ke. 172800 IN AAAA 2001:500:14:6007:ad::1 mzizi.kenic.or.ke. 172800 IN A 196.1.4.130 mzizi.kenic.or.ke. 172800 IN A 198.32.67.9 kg. 172800 IN NS kg.cctld.authdns.ripe.net. kg. 172800 IN NS ns.kg. kg. 86400 IN DS 49954 5 1 285C47CA00E9416E0C6BD6F7317BF57B0EE1CC7D kg. 86400 IN DS 49954 5 2 9166CA43B29F27BC7CC8B758F7027724EA2B860DBE49CF08A2763EA0 E95E8754 kg. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iTbL2jaucF2jFlH3aEXFaOCV6pRiovdj21mduFqd5lfRFM5OpRvvnD7u tdBliTd3ze6hBqXgWJ5UU0m8Eqp+QWHaBY4tCi9ALxnrK+hNdXMam0bz cylPgxum9W9ROKKmJ31/nk6dI1gVPuaOzg/lcw903OjFEmZrJdS/UNLl bgA= kg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nK5XWFArufChHD2SlzLBuEN+z1WZI3JM7Q8QDBy0d1HHVUfLqX17e9qY /+0balFf38StIoUwJhqGGM9hoM2X0ywYTOw1pBCyPxf0LBTnwk4X6KXV +gih4G7OGun+CPqbL225mgA87LeeIGWP/tmACimmAd1hk/fZIFqGOUvE NBM= kg. 86400 IN NSEC kh. NS DS RRSIG NSEC ns.kg. 172800 IN A 195.38.160.36 kh. 172800 IN NS ns.camnet.com.kh. kh. 172800 IN NS ns.telesurf.com.kh. kh. 172800 IN NS ns1.dns.net.kh. kh. 172800 IN NS dns1.online.com.kh. kh. 172800 IN NS sec3.apnic.net. kh. 172800 IN NS ns-kh.ripe.net. kh. 86400 IN NSEC ki. NS RRSIG NSEC kh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . O8v7MW248Ys9pOff6tvvknYWfVtczdXLYyQRWiWHC9QyYxPsii+tTLqH iuRVwaa7Fzpqd0Rv6EUXNl2YuOsCpCud6r28ddBQ0z+KpEUMEtSREihC 3W6M1M40eZ3hrLbDDe4BUUHpjTsuQQZ12+qHNNwOaj5TEFaY1Czldrw0 RDI= ns.camnet.com.kh. 172800 IN A 203.223.32.3 dns1.online.com.kh. 172800 IN A 203.189.128.1 ns.telesurf.com.kh. 172800 IN A 203.144.65.3 ns1.dns.net.kh. 172800 IN A 203.223.32.21 ki. 172800 IN NS ki1.dyntld.net. ki. 172800 IN NS ki3.dyntld.net. ki. 172800 IN NS pch.nic.ki. ki. 172800 IN NS sns-pb.isc.org. ki. 86400 IN DS 59540 8 2 FD3B27E5C171B883FE2815DDE7FBBE7F2E5AF826BFF47C33B5970F53 E2A855DE ki. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GHf4kKWStVjCL8URxLbrdfYSHkpIYzN/VXuvXO8oYeX8JE5LljYuR7CZ nedTM0YNeEzCodbT6CNrhNipT+h4U/bm+glhQnBsNzadF+ZesmnCuE6/ ztxU8OhzHY21BNeF3snM1Hj/4kSJXavKpBrjHoFmQBUDJ/wTeK8U9uIl kAI= ki. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K2VJGqy0vrvIxhXxh2QALtB0vjTRcmWLAB0xiZnhNp/yN7DsguPYKjjK HiDgzKLRfInFh+RWZ457RE/Xgj1+vK5B9FArwdmRs/IMdbsDl0AAqVRP 15+GHR1ApnYDPVr+D6IJwnkmbIYfmW3y/khc2SP/Egd8K9+p3OQaMnrm Yo0= ki. 86400 IN NSEC kim. NS DS RRSIG NSEC pch.nic.ki. 172800 IN A 204.61.216.26 pch.nic.ki. 172800 IN AAAA 2001:500:14:6026:ad::1 kim. 172800 IN NS a0.nic.kim. kim. 172800 IN NS a2.nic.kim. kim. 172800 IN NS b0.nic.kim. kim. 172800 IN NS c0.nic.kim. kim. 86400 IN DS 24474 7 1 2DD484EEF79401CBFCA231E6CBF4F1BB165CCE14 kim. 86400 IN DS 24474 7 2 2384A0380782DA192D1C1F6DA55A106551EF4C5233CD479536101921 D35411E5 kim. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . HI1ZbqeMP0U8rKTxutIDLLPgrPHeqwQhbc6MZgdUs49a9FmGO4lnxZg7 IsUd9XZE1fxWymWW4FSvI+d8DtwGHB7lqKXA+xiaNf+jSqhgflK4QInA qridWg9ocoUPKz4yZIejmpPEPjZbtYA+PYvoS51I+AXzNfBMTRKENgNc nfA= kim. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . l4p6wSythAx8CVuq+qsHIY+cnzxcU88hO8Idpt/E4wP4M7yIJ4ANRhF9 T9HuKn7wZDHTwT7mhsl8Buh/QVhoOvoIXsrw/9MhkkrW4Jk8Y1CVQ7d7 kEKN3j4Y+EnQawOE6efLuQ22xBYf5GJ5Ud8ER6N1ckKSKaB1zqCsCBNE FWY= kim. 86400 IN NSEC kitchen. NS DS RRSIG NSEC a0.nic.kim. 172800 IN A 65.22.28.1 a0.nic.kim. 172800 IN AAAA 2a01:8840:1e::1 a2.nic.kim. 172800 IN A 65.22.31.1 a2.nic.kim. 172800 IN AAAA 2a01:8840:21::1 b0.nic.kim. 172800 IN A 65.22.29.1 b0.nic.kim. 172800 IN AAAA 2a01:8840:1f::1 c0.nic.kim. 172800 IN A 65.22.30.1 c0.nic.kim. 172800 IN AAAA 2a01:8840:20::1 kitchen. 172800 IN NS demand.beta.aridns.net.au. kitchen. 172800 IN NS demand.alpha.aridns.net.au. kitchen. 172800 IN NS demand.delta.aridns.net.au. kitchen. 172800 IN NS demand.gamma.aridns.net.au. kitchen. 86400 IN DS 64009 8 2 4B1DD622AF68E8DC6E5CBB00AFE42399B8A15591891203D4B745EF0F A03EA2C9 kitchen. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qZyCSVTZ3XJGaYm2+la8fTo68yGXjjGEzPoZVe2GgKl1R8pW8bamUvwY cTI1RGPP1uKKqYF0wGTgi9b+OK9VzBmO/UaD4iCQ523/RTN1zet8OMW7 soF9rJzhjKy/rM16Qen5L7vYrOQl1cn+NtLyZOVBxSvSX6Zg9lJGBS6A KvM= kitchen. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . m3YFQr1JKAOi1R+K/rw7FbQlF1XUoxspssON5Z7bXrBoqAqzGpZuTcf4 HvMCTBjhR/1ymsaukQCA4dZBasaV45n0V/r9RFpEUKVSMBDB1aGSE9uA HOzAvWCdFfUpZHqfidwgTjYoq7owcFKNPtIGJWA7glPTkeajWWTCa7HM bcM= kitchen. 86400 IN NSEC kiwi. NS DS RRSIG NSEC kiwi. 172800 IN NS a.ns.nic.kiwi. kiwi. 172800 IN NS b.ns.nic.kiwi. kiwi. 86400 IN DS 5786 8 2 ADFED621AFE74743D01AF9CD0F380F4F95EF756080321CD541A1D6B3 1B3FDD30 kiwi. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . fjWjK7EXOL+p2eYLJwYtPf5iHirZyJBZcDmUMhSaz/w/2eDdtbIJyKxt pdl1Rj8vAdViPXpLITVwSGKqMOnV1uCHQO65eRMw7u/CuKpNtd/FFshC GjVQiNvlH/nlKt2OrvbbnTX4kwRsWK4t4jdlsxEkAw1MjoYJFEhD+L0b ipo= kiwi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vOmCeHh0HTPAIzNqEt4yYHqGuFqkmZI4czgcU9XvPswUG6pctF2gcI23 WU1ADW0xcAsfrJTb4wurYT3x7XbY/xyOZ9UtHI2Fm3xMabBsJ3vwC8YY d8+DmNEctLiCU0BfvOB8a5dyThMmjudOL2XgFcYuNDAblzjjgzkaDCLq KjY= kiwi. 86400 IN NSEC km. NS DS RRSIG NSEC a.ns.nic.kiwi. 172800 IN A 72.0.50.4 a.ns.nic.kiwi. 172800 IN AAAA 2620:171:a02:ad::4 b.ns.nic.kiwi. 172800 IN A 72.42.114.4 b.ns.nic.kiwi. 172800 IN AAAA 2620:171:d02:dc::4 km. 172800 IN NS dns1.nic.km. km. 172800 IN NS dns2.nic.km. km. 172800 IN NS ns-km.afrinic.net. km. 86400 IN NSEC kn. NS RRSIG NSEC km. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OE7MQYNgf030FqWDGWkKadl1Oe72OZVM76cEO23txor6eittNjHnzfZS 3FQ7Je8tVNfoZwg5LodF14D9kNq9hWOf46TTkBS7mGi/C7uujvkBMDiS YoI9D39sxtnQ5Ex514X2SIj3SHD3gWuyP1XZaiQ4NEgA0LmVSXczRHzE jYk= dns1.nic.km. 172800 IN A 197.255.224.18 dns2.nic.km. 172800 IN A 197.255.224.66 kn. 172800 IN NS a.dns.tw. kn. 172800 IN NS b.dns.tw. kn. 172800 IN NS c.dns.tw. kn. 86400 IN NSEC kp. NS RRSIG NSEC kn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OIORbHc4Ac+naUcDhWRJGw/DR2cZpsBPsdtF97SXW+OBxutmqSpnkRE5 kXlIWk7f1RM/Tju/8uTFMOh7UdEpKv8ZwVEExzyp0lMzEqjxG8saQf8e 8OrEBvZyDOIfrI1rjboQhpmJkK/otekZioWtp4vtM+vK0iAvzmoipE/J 0Ew= kp. 172800 IN NS ns1.kptc.kp. kp. 172800 IN NS ns2.kptc.kp. kp. 86400 IN NSEC kr. NS RRSIG NSEC kp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HnImiTn27+3cm4FWBMeOkyfrH0TEcWyKzhDIDXKV01ZlhVLsDZM507H0 brMg13WeNuSSA3vIvlSztwA/DWFB1K4qxK/2pUW/uqNob7tVZeTRlqYF SGfY0R+DbArbspiklYL3FlZEmJ+/F6AdkNF1zC6za2xxvVgcgQJLJVCA fUs= ns1.kptc.kp. 172800 IN A 175.45.176.15 ns2.kptc.kp. 172800 IN A 175.45.176.16 kr. 172800 IN NS b.dns.kr. kr. 172800 IN NS c.dns.kr. kr. 172800 IN NS d.dns.kr. kr. 172800 IN NS e.dns.kr. kr. 172800 IN NS f.dns.kr. kr. 172800 IN NS g.dns.kr. kr. 86400 IN DS 10746 7 2 A626C147CF76351B03CD26C03EBCC78C0DE48D87DD81F09199958243 36236F96 kr. 86400 IN DS 17625 7 2 FB939059F4B67BBA1E8AC37E35811E506488B2D8CFF807AF873B2116 B5676B5C kr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jIOPf1Xdzv84hjSzPW+B24YjHLffaOy/dA5jzVqL/pS4Qjj8tmsccdIv QFY+vrWtXhXZSGfw0LGsw1eUKoPY3VHxNDvUpYtgMsRr1Nz2JmXQa1+w 7rUweR44C49oUMNrDtzWrikqxEsKCJADNn3qn/DQEt3snPNNOBo4xlmm T2A= kr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IBq0qive0yAAsBdbb2uEOAit/QKaM1H+vWoaR9r/jZrbHa2Rp5YUuDf6 s9lcNakm0BITLtBz/kbnma0/dB0YN8ZAIcjzUNFBSqZ4rVIL2M+QXFSg WJBCzl59NqaWsRJSk6dr5kf0/Repx6AjI06D+nhTG7fa5sJCmgkKsYs4 coA= kr. 86400 IN NSEC kw. NS DS RRSIG NSEC b.dns.kr. 172800 IN A 61.74.75.1 c.dns.kr. 172800 IN A 203.248.246.220 d.dns.kr. 172800 IN A 203.83.159.1 e.dns.kr. 172800 IN A 202.30.124.100 e.dns.kr. 172800 IN AAAA 2001:dcc:5::100 f.dns.kr. 172800 IN A 218.38.181.90 g.dns.kr. 172800 IN A 202.31.190.1 g.dns.kr. 172800 IN AAAA 2001:dc5:a::1 kw. 172800 IN NS dns1.kw. kw. 172800 IN NS dns2.kw. kw. 172800 IN NS dns3.kw. kw. 172800 IN NS kwns.kems.net. kw. 172800 IN NS sec1.apnic.net. kw. 172800 IN NS sns-pb.isc.org. kw. 86400 IN NSEC ky. NS RRSIG NSEC kw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Pg6fXqqatEixNHstuAaKqFWcupWuLRCSB6P/u4dAErStgZ+qv6lqB2gM ZK4jMx9MgiYs3JIuhzMXoiqbbKSpXb1oskqmAWa//t/1jWn5ujgXw0rN JZYX30GNLYf9BOZC570vRGPo8NAR25ELukJtcGXp/dsiehuMglQHdXyr M+k= dns1.kw. 172800 IN A 161.252.48.140 dns2.kw. 172800 IN A 161.252.48.150 dns3.kw. 172800 IN A 161.252.48.145 ky. 172800 IN NS kynse01.perimeterusa.com. ky. 172800 IN NS kynse02.perimeterusa.com. ky. 172800 IN NS kynse03.perimeterusa.com. ky. 172800 IN NS kynsw01.perimeterusa.com. ky. 172800 IN NS kynsw02.perimeterusa.com. ky. 172800 IN NS kynsw03.perimeterusa.com. ky. 86400 IN NSEC kz. NS RRSIG NSEC ky. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FCaFzAeiLfLFCs1jRwIn0C7zzGGFf7YB3sSOLlPg8l2jrVX8f/ESQrx/ MaCyY1JMQ3X6RBJW8j/YHSP6isyYFl1u/8w0vhm6Is1eKpM7Gx/k8Tn2 kKjVZCzi/fmiIWOU3bkzEhkN94F+DGR18hnMoiI4QmuRj2QT2QDe5hkM stU= kz. 172800 IN NS kz.cctld.authdns.ripe.net. kz. 172800 IN NS ns.nic.kz. kz. 86400 IN NSEC la. NS RRSIG NSEC kz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P9Gy7GcXYuGoScbyUbS6aDc9akDhaU/7sWyzK4Z1bMJqYsQoTOBHco5P 1MNXFZ2mPS13e48+B/u8CHmnQI8/A/qwNMHHHIS0L9IwLumzIejP6HrK 00844O9j192M3et+mQJoue27AOxpdBuh40OtMBtiTy8H8oSE0Xe6THtC nus= ns.nic.kz. 172800 IN A 194.0.21.5 la. 172800 IN NS ns1.nic.la. la. 172800 IN NS ns2.nic.la. la. 172800 IN NS ns3.nic.la. la. 172800 IN NS ns4.nic.la. la. 172800 IN NS ns5.nic.la. la. 86400 IN DS 54086 7 1 C468E20FD427F2EB5E4658B1E1D24840768DC8E1 la. 86400 IN DS 54086 7 2 28339FCEDF2C52583595DD1460A6B07D9FA5692A5BA8E6E5F34EE306 35230541 la. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ul9nAvt6zgmFvClpE+suoTpz4Z4hZq3FQd/WRg+VfRzhpnsDxJHpQ4Sv F80bj19ZJkskpF87m0KoNTdcWnAEiyLcpfM48SA3mmNSgVEYrvJUHktL CAxSneZQrwty45R8DKkjmkQnSlQtlRMsSwKOofmsY1juedIfw02l8Hjy d/M= la. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UgsIymIjozmiPITPeGn39gmttEv5cjIU40AaUdn9r0d9+TboKCUTdrfX 1x88ZOH0ZbQPvXic8K8lqbI/WoEVQdiXrQ3nGFT6b8HgUnR3neW8WqnT +FpCeQlCBm4uSN54HL/Ucb/y6WdjPoMJfcNwXG8IyGAmG6hqBEDijkyR OgY= la. 86400 IN NSEC land. NS DS RRSIG NSEC ns1.nic.la. 172800 IN A 194.0.2.2 ns1.nic.la. 172800 IN AAAA 2001:678:5::2 ns2.nic.la. 172800 IN A 194.169.218.14 ns2.nic.la. 172800 IN AAAA 2001:67c:13cc::1:14 ns3.nic.la. 172800 IN A 185.24.64.14 ns3.nic.la. 172800 IN AAAA 2a04:2b00:13cc::1:14 ns4.nic.la. 172800 IN A 194.169.218.15 ns4.nic.la. 172800 IN AAAA 2001:67c:13cc::1:15 ns5.nic.la. 172800 IN A 185.24.64.15 ns5.nic.la. 172800 IN AAAA 2a04:2b00:13cc::1:15 land. 172800 IN NS demand.beta.aridns.net.au. land. 172800 IN NS demand.alpha.aridns.net.au. land. 172800 IN NS demand.delta.aridns.net.au. land. 172800 IN NS demand.gamma.aridns.net.au. land. 86400 IN DS 43702 8 2 DEEEE8025A8233F002FE834A728C3C218208D04BA7C5344510D6D1B5 78E0CB6B land. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vL8muoTb8UQvidAFK4gmICCQ5kTtYVzcFbJq4KQBS+i7xivqx50ryn/0 VviyKuCxSBuk97qE8e6ogSZjpUQ84MXMcqHedHTaLk5epUVMLmuJkqvY Lyi2Zoy8+umTzbbgy0CW7NYk80PA6jXNvbnlBfs44YJKyKBwe5UI2UsH 0j8= land. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . EQoIumEDGqX5/hRpyvcgPI18GsQRZrUSoQ2cAfNE8KgWcuRSFskv7osY gUiElXwvPIAdg0Jih+5LyP1oEFUnUjw1FHdYiB91kXlD4xk1uPUhbEpS 4Il9+AZ6kyEztcmpx9lWr/1ce8xNn0LRnKWhM4zI85AKOgmoPh5YLHab QcE= land. 86400 IN NSEC lb. NS DS RRSIG NSEC lb. 172800 IN NS ns1.dns.aq. lb. 172800 IN NS rip.psg.com. lb. 172800 IN NS fork.sth.dnsnode.net. lb. 172800 IN NS zeina.aub.edu.lb. lb. 86400 IN DS 16682 8 2 40DD7553579354618AAC11783D0385CD6D6B0F31C7FCF6719609B04A 08C2F11B lb. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CCKylaqYybOxJXKraz9SHoLeTCTyE5PprHQFRUaX5zm8X5q5qnSGdWUN +wiBbrq/SaBkTmfwwpOc6JaLG9/y13Z3YO23ZzO8J9Lr7jAvZkdc4JIW ii6zY0acLe7ynuFmsjmQlrmTS09LtEyM0nHgvli938/bGQ5wZZVY02BL y9o= lb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K8vnsSfvo2m4YA4isKOXj0aXanTcli8NB4OHvOTxWIXsa9SyDB0U21Vv TDAF3YuJAq9y+Fwf2QlW9ALtTbX2TJlemOtX/3KODmZ9n6pZFkPgWM28 7GlSMw844cYyPeZ42ZAfHecxq4xIW34Vd8exvVDSVnfbnyl+Jqp61um5 8o4= lb. 86400 IN NSEC lc. NS DS RRSIG NSEC zeina.aub.edu.lb. 172800 IN A 193.188.128.14 lc. 172800 IN NS a0.cctld.afilias-nst.info. lc. 172800 IN NS a2.cctld.afilias-nst.info. lc. 172800 IN NS b0.cctld.afilias-nst.org. lc. 172800 IN NS b2.cctld.afilias-nst.org. lc. 172800 IN NS c0.cctld.afilias-nst.info. lc. 172800 IN NS d0.cctld.afilias-nst.org. lc. 86400 IN DS 31275 7 1 8FFD793EA49828F8FAE71E6EAF8CD2A6A329361F lc. 86400 IN DS 31275 7 2 611D7AF20FB91770B598BFFE4DFDAAFE29F106EFCDE36387F4963700 A77622EE lc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . OYPhUhMHq3UPu1CGS+ginwPYMnBNCyAhwtI24yhkzAqULreqFzugBdvu 3IuVfQHk0qhOLXd3p/B4FyNT6e2T4Pr8lan7X9x9bj8kxIPAsPC9CNq2 F4ir+UBlIFrkgM1CRG/no6e9PwIoz827l4fSATPD+Q76/QLHcArBXa/G 5xI= lc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sUwsIWcspwfOrn14yxz/fhHve3adqm8dZNK4mpU4/aY4J0b29KPJkgGp cpy9M+X3kUFYajZk+bipUX+Z+upzhbA/Xck5v26AQ3q8ol7aluOu0om2 xAMboyQthiRBlk/iOB3PrgH4PP/OYsgJIN/W+FAfFk48SLyQBPHwC61r XZI= lc. 86400 IN NSEC li. NS DS RRSIG NSEC li. 172800 IN NS a.nic.li. li. 172800 IN NS b.nic.li. li. 172800 IN NS c.nic.li. li. 172800 IN NS d.nic.li. li. 172800 IN NS e.nic.li. li. 172800 IN NS f.nic.li. li. 172800 IN NS h.nic.li. li. 86400 IN DS 28489 8 2 C534C12DE564E79C578E6419C57D97629D8BE76C794C026C944F3FC4 42B63B78 li. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qtn7TkD0nK/FXYiatsuMpohStIIhyhmoLtVK4CnOULRokcQz6L8dVcHo l40rOqaggTGLrSFTd4a+APcg2VwvbMMCvecNQDg4IxPe0o1i1vz4uZqU 5/OHixRecB4eU5AeuAiRiI/BwYkL97Xo+NW19n/wQiyYpodrwvd10C8A fhs= li. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TK5cvwAc5WB+MdUXo+Crg4/uUt2Mz4MS5Udv0ZHvPhZ9OJEGyWrSPmKG 2whFvrSg6pOZhm7GxA/X7q2BqRIsftejW86hdVOdWQwDwY3wQUp9TOeB xWAr36npFdvgtUIBh21Atf7zPegpY4AyyHiBvLwOHP6+fqh0y2b2XMP4 G/c= li. 86400 IN NSEC lighting. NS DS RRSIG NSEC a.nic.li. 172800 IN A 130.59.1.80 a.nic.li. 172800 IN AAAA 2001:620::4 b.nic.li. 172800 IN A 130.59.211.10 b.nic.li. 172800 IN AAAA 2001:620::5 c.nic.li. 172800 IN A 147.28.0.39 c.nic.li. 172800 IN AAAA 2001:418:1::39 d.nic.li. 172800 IN A 200.160.0.5 d.nic.li. 172800 IN AAAA 2001:12ff:0:a20::5 e.nic.li. 172800 IN A 194.0.17.1 e.nic.li. 172800 IN AAAA 2001:678:3::1 f.nic.li. 172800 IN A 194.146.106.14 f.nic.li. 172800 IN AAAA 2001:67c:1010:3::53 h.nic.li. 172800 IN A 194.42.48.120 lighting. 172800 IN NS demand.beta.aridns.net.au. lighting. 172800 IN NS demand.alpha.aridns.net.au. lighting. 172800 IN NS demand.delta.aridns.net.au. lighting. 172800 IN NS demand.gamma.aridns.net.au. lighting. 86400 IN DS 1345 8 2 AFA5667D4D9B2FBDD72F0C364EE3A3AD3286BAE800DD959E3A28F2E3 EA6EFA08 lighting. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . M26kE8xnf7oo1wTwveWML1mViTfqMunWKGlSo8ntAeJnmAGv1dKMdo11 wJ4WV27bhgCpMQWmZMeggBUV/s8sMWk8g2H1bIqok3Em45k372eP5WUX 6CZfyEHgpBh+IeOqxDUsXpEx8amMo7vAa7rNKNRbZ7n6XeTblCm51kMR Hpk= lighting. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UZCanvFgdHEJZnFKIuQie2M7s4SHnGk05PnrsCGuIqSazlgZyyADWomj qVnTKKqaCFkD7b8sETlnIfngZzuzNEYG8fWQ1dF+faYm3U+sdht7O2hS Kl5CKiM2/CiaDS2YnIMbLIv/BUZgIQRGCwdI0/ZBTHttvxwLGqZDcrhq iBo= lighting. 86400 IN NSEC limo. NS DS RRSIG NSEC limo. 172800 IN NS demand.beta.aridns.net.au. limo. 172800 IN NS demand.alpha.aridns.net.au. limo. 172800 IN NS demand.delta.aridns.net.au. limo. 172800 IN NS demand.gamma.aridns.net.au. limo. 86400 IN DS 7285 8 2 5B4855A49D19A3D8A6BC6D32AAA778D5CC62A186E17303559766C664 6428BE0A limo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . peF7eXd+ZqHj10gNxoRtuHlx4BJv758claCfK1vFHCtlibSifPp/bmkA SEL0u3y6I0M8c11bLjyUlaYyarwbJHhsy9GZJPs/4giNgCQaOAXukMUq 0Flbefx23LmnonYkTpOJL9Z95HCI7NJTNcBHIPyVbbABj7PBRVNHRqyq 6n0= limo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dD1LvtLQjk2mAQmqDoQHO1gmIBIN1LXU2MVOC90evAQw+inhjrA0dmuJ na4xoSxWBxrelmv3Ou5eH5YootEJ1lYFjRr+mPYxrn3FUbEPGmtE0rNX Mta4tiaEO85TNtcxqG8pPF2LUAN0e2QYjtrKnc+M0+Cz826T1sjIVofl YMw= limo. 86400 IN NSEC link. NS DS RRSIG NSEC link. 172800 IN NS a.ns.uniregistry.net. link. 172800 IN NS tld.isc-sns.com. link. 172800 IN NS tld.isc-sns.net. link. 172800 IN NS tld.isc-sns.info. link. 86400 IN DS 16378 5 1 4BAC0A7FB788380C75B12257AF422CF2F32EE828 link. 86400 IN DS 16378 5 2 22F61A68A2F1BFE7A3B8A71DE8DB12BAC9A51D98D8D1F44C1717396E 395C180B link. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . O+Bitt9L/+DOl46v3uX694l+iFYNyWvX3ugSgMccftWa7BwUrr+o6NLX srldiac7ii67ZHoi/i4MzGwko8XFm1ZTj9fWghniQDQruhe9/K7TOzLJ F7FIhCISA9y5BvV1VRdb480JwpEMrtmGGq3+Ht2lb99dQn0ZuCo2p7Hu 6cI= link. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . pVcySIhs838h1IUrlileRubMKJoZacW0rJ5w7SwX4pZhfLuN9kTYbOV6 9mvS+Qky3jf4F/zRetR+9Fi367QqlVHBZxyRls/ga2ghBzDEJ7b2Rk+H d9obVquy3NHRUGmHytfZcQoCo6NrYPevedpw8PEtK5xFLUQM3SRA4dVS JpA= link. 86400 IN NSEC lk. NS DS RRSIG NSEC lk. 86400 IN NSEC lr. NS DS RRSIG NSEC lk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZTZ8h8rgK4VKiI4GRRiSpJ/0YckSyYrm3rUQtBua7RFeDPfmzwLWqaZI 9e5pKyX1cWo3f/fRNVUl9TwH60r/426WY1xBkYruJgaN5XkR5rizJf30 7L9t8spA7wPYRicXpJCin7D7NU+3g2Uw8sgbrEKAP3dUPzBCEwJ3uiDl b0s= lk. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CqAB6ndFniintv/mpjfRecnlnwplNAMga6VxPxXcJXyY1u5eIpemcQdQ JqPz63Nhw05ZNqcyeF784TT6YMjlRScAguSipkmnZ+NiTODj2lW7Tpy6 h+Pbiz1JBc3krGlFlrF9t21D2rSMFJzvycU+EiVIVzDJ8xuUSobUUGFf Kkk= lk. 172800 IN NS c.nic.lk. lk. 172800 IN NS d.nic.lk. lk. 172800 IN NS l.nic.lk. lk. 172800 IN NS m.nic.lk. lk. 172800 IN NS p.nic.lk. lk. 172800 IN NS t.nic.lk. lk. 172800 IN NS ns1.ac.lk. lk. 172800 IN NS ripe.nic.lk. lk. 172800 IN NS pendragon.cs.purdue.edu. lk. 86400 IN DS 181 5 1 A1907F85D49081239389C216912B8937D0ECEB3D lk. 86400 IN DS 181 5 2 87516D56B697CB3F7A7C3EB594EE0E16AE509D16A503089F4FBD4F34 7B336F93 ns1.ac.lk. 172800 IN A 192.248.1.162 ns1.ac.lk. 172800 IN AAAA 2401:dd00:1::162 ns3.ac.lk. 172800 IN A 202.124.166.178 c.nic.lk. 172800 IN A 203.143.29.3 c.nic.lk. 172800 IN AAAA 2405:5400:3:1:203:143:29:3 d.nic.lk. 172800 IN A 123.231.6.18 l.nic.lk. 172800 IN A 192.248.8.17 m.nic.lk. 172800 IN A 202.129.235.229 ns-c.nic.lk. 172800 IN A 203.143.19.3 ns-d.nic.lk. 172800 IN A 123.231.6.18 ns-l.nic.lk. 172800 IN A 192.248.8.17 ns-t.nic.lk. 172800 IN A 203.94.66.129 p.nic.lk. 172800 IN A 204.61.216.27 p.nic.lk. 172800 IN AAAA 2001:500:14:6027:ad::1 ripe.nic.lk. 172800 IN A 193.0.9.88 ripe.nic.lk. 172800 IN AAAA 2001:67c:e0::88 t.nic.lk. 172800 IN A 203.94.66.129 lr. 172800 IN NS rip.psg.com. lr. 172800 IN NS fork.sth.dnsnode.net. lr. 172800 IN NS hippo.ru.ac.za. lr. 86400 IN NSEC ls. NS RRSIG NSEC lr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tzwMV15lPdCYZlYbGLPY+YwyclrwAKlpruY0tfNhkX3FJ3DK1UXHBvGd KtlfqmkFb+yBpqnqMx2GuXJvsjB7y9NRRvZoFWy5WItNTBgH/ioZM38i EL0FNdRe5TZFxMNViFZQcB3wtDMKwnl1k87WbExNpAnbsYTuP9YURYtJ Oxk= ls. 172800 IN NS rain.psg.com. ls. 172800 IN NS hippo.ru.ac.za. ls. 172800 IN NS ls-ns.anycast.pch.net. ls. 172800 IN NS ns-ls.afrinic.net. ls. 86400 IN NSEC lt. NS RRSIG NSEC ls. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OuGGxJ42OmL9j744rkvlRLCgQqFn8NNx3GRm8StYBHbJQQK8coARIHY3 Ca297EDn3eBxs9Z+Eo4+cT0BVXN9/1ZldGf+y2gYBnqtn4YTvBzJsxwd kru8A11HykY/Ydeb/cHLf0K9r/FzWpDwk/rTNcJS7yveMIzpPjhuGYD5 /kU= lt. 172800 IN NS a.tld.lt. lt. 172800 IN NS b.tld.lt. lt. 172800 IN NS c.tld.lt. lt. 172800 IN NS d.tld.lt. lt. 172800 IN NS e.tld.lt. lt. 172800 IN NS f.tld.lt. lt. 86400 IN DS 24556 8 1 A9D06FA34F1C9D57062899824F5702041188DE97 lt. 86400 IN DS 24556 8 2 DEA1E077D98EA2DE8750281B40ACEBC14687AEB8FE49506333C903D5 01F6C620 lt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . QKuJEFXiZ9qowa/YnoYcv/bXuNXpbfTD+JkLnvI7rteCgFr6pGQs9YAM E/G+aewJ0X7O2H0BUfW1z9lKnmpHZVdULMY/E4Y8Q21hUk1JmZKakL6z n7RCuH6nXMOAZZTPb63xT3MAPRqPN648dB01UlxUF47cgc70y6Y7zRDD YlU= lt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Gi8J7X4lzEuisnsV/z1YQfBmv5c1hEffu+EXQxI+fa/SXsPcf4yS2oCk lAmFJwzaBQCP8Vqk2w4Cu1yn5ceW7yxXvh54tBmA4FK8BWIRLO1cumcQ /8CaI2o2iil7znbB/mQALP4V5GIvjc10Zuij4FDHv9lyAjhYNpWJAYn3 Sk8= lt. 86400 IN NSEC lu. NS DS RRSIG NSEC a.tld.lt. 172800 IN A 195.8.218.131 b.tld.lt. 172800 IN A 194.0.20.1 b.tld.lt. 172800 IN AAAA 2001:678:19::1 c.tld.lt. 172800 IN A 194.0.1.4 c.tld.lt. 172800 IN AAAA 2001:678:4::4 d.tld.lt. 172800 IN A 194.0.3.1 d.tld.lt. 172800 IN AAAA 2001:678:6::1 e.tld.lt. 172800 IN A 194.0.18.1 f.tld.lt. 172800 IN A 194.0.19.1 f.tld.lt. 172800 IN AAAA 2001:678:8c::1 lu. 172800 IN NS g.dns.lu. lu. 172800 IN NS i.dns.lu. lu. 172800 IN NS j.dns.lu. lu. 172800 IN NS k.dns.lu. lu. 172800 IN NS p.dns.lu. lu. 172800 IN NS ns1.dns.lu. lu. 172800 IN NS ns5.dns.lu. lu. 86400 IN DS 31 8 2 4B0AF8FA533D143C1E7AC4C8FA6DEF4509DE439C0D5403FDC1BAA786 0052882B lu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Ofdyn7Xs7DZYGyy2RK2weYnTLZSTx7JfU56Cm8Ualh99LwPqgwDi9e5s +phVuy/+6yezJtBkFycsl2iXgF6CYAFNirtnFQwyHlDvfDVdFRA9AOkX 4lYnsxJH1RPBvq+bZSTsSQIyc361M+sd8+k7lyCvVQ8HFAit7lhrQiWv uHk= lu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uEKynPdsESrlWgNEt3mi5Z/IAva4Yx001YfPfLANHBsvD3W6LST8KjvL Hx4CrA59AGxMiGU/qnpgyTfhwJjm3NswhpczA1kHqeoj+vRBJ5/LF3tP yMv0KOpaJ5RCG/xAHBlSZmKbGp21K1qkXVKZK5LAHjuC/WcXgfMgP1Yq Tc8= lu. 86400 IN NSEC luxury. NS DS RRSIG NSEC g.dns.lu. 172800 IN A 194.0.23.5 g.dns.lu. 172800 IN AAAA 2001:678:1b:5::5 i.dns.lu. 172800 IN A 194.146.106.66 i.dns.lu. 172800 IN AAAA 2001:67c:1010:16::53 j.dns.lu. 172800 IN A 77.72.229.247 j.dns.lu. 172800 IN AAAA 2a01:3f0:0:307::53 k.dns.lu. 172800 IN A 194.0.1.13 k.dns.lu. 172800 IN AAAA 2001:678:4::d ns1.dns.lu. 172800 IN A 158.64.229.18 ns1.dns.lu. 172800 IN AAAA 2001:a18:4:1::18 ns5.dns.lu. 172800 IN A 81.91.161.100 p.dns.lu. 172800 IN A 194.0.42.42 p.dns.lu. 172800 IN AAAA 2001:678:60::42:42 luxury. 172800 IN NS a.nic.luxury. luxury. 172800 IN NS b.nic.luxury. luxury. 172800 IN NS c.nic.luxury. luxury. 172800 IN NS d.nic.luxury. luxury. 86400 IN DS 3664 8 2 D602E8F4FD9729146D1FB1D249544DCEECE615E528EB2E4997FB1760 B004D67E luxury. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eLS2FxIstBH7urMMPrVtFHBXVYHpV/rkq5ZP5JlYKeP5XdOsW/Ka7/2I 4SUONXO4za50+BUQt4vvuVJaN9VevBEOklMqwhy+w9+FMJb38+LJaJ7w uFjWCuwe117Vyk/PO9eqEZsfwNYqn1eZTlstOiBTkfGfwljIAfjkC9zd vhs= luxury. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hLccAHvztAVyMAWEPkj70E9jhsZ5/UAdoSdUZn2tvUOGHu+8YBiEPplB F+onjVntjZxeYtWFRtA4zkHbC7gZHPHyZnMGd0zrwdCPEU8b1gkozhDx 1r0HkahNvXxELa+5GHZRgFKsore6lU5UTpKg+tGZd1Y6CY4QZkZh+p6Y DKo= luxury. 86400 IN NSEC lv. NS DS RRSIG NSEC a.nic.luxury. 172800 IN A 37.209.192.10 a.nic.luxury. 172800 IN AAAA 2001:dcd:1::10 b.nic.luxury. 172800 IN A 37.209.194.10 b.nic.luxury. 172800 IN AAAA 2001:dcd:2::10 c.nic.luxury. 172800 IN A 37.209.196.10 c.nic.luxury. 172800 IN AAAA 2001:dcd:3::10 d.nic.luxury. 172800 IN A 37.209.198.10 d.nic.luxury. 172800 IN AAAA 2001:dcd:4::10 lv. 172800 IN NS a.nic.lv. lv. 172800 IN NS b.nic.lv. lv. 172800 IN NS c.nic.lv. lv. 172800 IN NS d.nic.lv. lv. 172800 IN NS lv.cctld.authdns.ripe.net. lv. 172800 IN NS sunic.sunet.se. lv. 86400 IN DS 42018 8 2 7E932A4F9CF9B1CD047C277E3CD323A53D42347D47C7BF1DD6018FF4 B344FC1C lv. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Iwl5O3CAh/Q5I+f2t9zL7jUnb4rWLJm0OQp2bSzMcKraXI6fpTHWzTNL 2XfNC1CHoHx4abm57IPYOW1udDkDtHa80roB1wnt7IqtxfJwZv8zZYn/ OZWd1t/R3c0eIzzdbZfA3H0rfzB1rVLMbMY57Ao+hZKJvnpIIJMtqoOv Nhg= lv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aj89W4+daom/wcFNoannY4nJ2Z+FQx62qkXscwkw3fPClqRCS0g2KpPh waMcqpWKsnLE/teU3Occ2Jc2aAc7+xvZf4SdZZFp+gRksjrKokaqMX2p 0R7hg8kgev+3hpZm4QcLdQ6aifDX8+vbXNJDyFHMgVEF20uQr5/PdpEj TMo= lv. 86400 IN NSEC ly. NS DS RRSIG NSEC a.nic.lv. 172800 IN A 91.198.156.99 a.nic.lv. 172800 IN AAAA 2a02:500:4400:700::4 b.nic.lv. 172800 IN A 92.240.70.1 c.nic.lv. 172800 IN A 194.0.1.24 c.nic.lv. 172800 IN AAAA 2001:678:4::18 d.nic.lv. 172800 IN A 194.0.8.1 d.nic.lv. 172800 IN AAAA 2001:678:b:1::1 ly. 172800 IN NS ly.cctld.authdns.ripe.net. ly. 172800 IN NS dns.lttnet.net. ly. 172800 IN NS dns1.lttnet.net. ly. 172800 IN NS ns-ly.afrinic.net. ly. 172800 IN NS phloem.uoregon.edu. ly. 86400 IN NSEC ma. NS RRSIG NSEC ly. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LzeMxXYDAx8CI7HIKDhP7npToOpT7RTw+zHt/yYlRbKgpM55NH7Vs9bv wiHs8pN4S+Wiv9he9IlKP/J7jyn04iY9p4HA5crBX/XWzv5HHkH2iXSa SjpJwOcO+bVtGjLaEkHcGE3dy11jUSTuXneUYVmCqw4rucMYgZzwjRAp x50= ma. 86400 IN NSEC management. NS RRSIG NSEC ma. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . h+SrBRP16Lw/rScZYG2Aa49iyRL/bQs0csRiFzfWgw1cUp81FzgNZK5Q v69Hmrm//KoiHg8ks2On5D2XP+ujg5VmvqjBztin3n5adzQJ8UH0zKpL dldGuQRbd3FA5UagIKBqgJF0c6wdIp39r+RIMAmXoinscwJxVE9qFDZV 0CU= ma. 172800 IN NS ma.cctld.authdns.ripe.net. ma. 172800 IN NS dns.inria.fr. ma. 172800 IN NS ns1.iam.net.ma. ma. 172800 IN NS ns2.iam.net.ma. ma. 172800 IN NS ns2.nic.fr. ma. 172800 IN NS ns3.iam.net.ma. hariss.anrt.ma. 172800 IN A 194.204.241.140 dns2.menara.ma. 172800 IN A 81.192.108.228 dns3.menara.ma. 172800 IN A 81.192.108.164 ns1.iam.net.ma. 172800 IN A 212.217.0.10 ns2.iam.net.ma. 172800 IN A 81.192.53.23 ns3.iam.net.ma. 172800 IN A 212.217.1.13 management. 172800 IN NS demand.beta.aridns.net.au. management. 172800 IN NS demand.alpha.aridns.net.au. management. 172800 IN NS demand.delta.aridns.net.au. management. 172800 IN NS demand.gamma.aridns.net.au. management. 86400 IN DS 29419 8 2 DE87320C9CC67BFF04B718F11EF3B58F3DDE54CB615882F97D2EAB6C 295EE843 management. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WwVDAwY3NK0nukRlXPqHiHRz0yeE4mH9IQ6inHSk2lGpkENBiS+k6I8h Z6ap9Q39CbMz3+iRaupfmfI/hegnrjC+JTmj1BvXH+nqzrm0exjiidaS DdbWQTjM+ZNLNZNcv3787mxS8d9Qa5kXyiVgXC7QE5NP7hC5gNxjy6Em /aA= management. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cg+a2658W11om03ZyAxmrA+wuKPjciJy8Nn25Io9T1dK7APDkwVhpEBj 2yUvyeCwQCN0UqsgJmBc8a4VYQgufOkKVCmcp2s+uNzNPTMRHZ/uRNeU iJe6Gr8QtUnJNOB6qdfZvdgaKUbOh3W7L9m73GL76nmUh3tGkmSRKmNU 5ow= management. 86400 IN NSEC marketing. NS DS RRSIG NSEC marketing. 172800 IN NS demand.beta.aridns.net.au. marketing. 172800 IN NS demand.alpha.aridns.net.au. marketing. 172800 IN NS demand.delta.aridns.net.au. marketing. 172800 IN NS demand.gamma.aridns.net.au. marketing. 86400 IN DS 4267 8 2 64CC06CC6F4A935A5319A723AFE75D8BE89ACD73C4A766AB9BDF4E0C 02059869 marketing. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oF7+By44uzHw9r9ZZGhMkJt7TBLBHW5M3IsbFawx6f6s24rnnFy7MiKp g3gKyvPoEiuXJeRhLrxT8IcSw0OLGqcyCC9onn3gvNWFCbt216jzthtx BKFWpPoC204FDSsXR1jnoRILXeEUlvBUD3oVpE2tozmFFbnbfnTx1xl+ hmM= marketing. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oyjaC+DQwr4+eQmEMc8+Oih6kIq8+h9rHP/BBqRqPY5YXgkN9isfy9yD GsbNaJ9LtfwTBIfqE9/Iii6cnVjS/uJqhG/YyGKMgyFcdyRJP5MH0CQw UB72luPM0XUmlQ5869hcqM7iQBfqo7HilOuhCT5lJNmaml06tNMeLLLz nTU= marketing. 86400 IN NSEC mc. NS DS RRSIG NSEC mc. 172800 IN NS mc.cctld.authdns.ripe.net. mc. 172800 IN NS ns1.nic.mc. mc. 172800 IN NS ns2.nic.mc. mc. 86400 IN NSEC md. NS RRSIG NSEC mc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ucaeSGSJjITQOw486ihHPSxARf3obcOaMsYs12tfGoROxeIKhohf8Cdu 04nvaLKLDYyWSbZPP/sI/LJh2T6PH3ZVtstG+UCb6rmsW9PoLkmniTCd ryjMACZlOtv2IUdN8KBz/Uv1MpRBfI11M8ggd5jFYDf5d8fTWtwE4WRV Ryw= ns1.nic.mc. 172800 IN A 195.78.19.216 ns2.nic.mc. 172800 IN A 85.31.217.131 md. 172800 IN NS md.cctld.authdns.ripe.net. md. 172800 IN NS nsb.dns.md. md. 172800 IN NS nsc.dns.md. md. 172800 IN NS dns-md.rotld.ro. md. 172800 IN NS ns-ext.isc.org. md. 172800 IN NS ns-int.dns.md. md. 86400 IN NSEC me. NS RRSIG NSEC md. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . idTEVzbiBruZMePH2sSZwDl+FsfidJiAAczlvaNQrJwK73RI6qomsJXt hC3fiPLJBTvVl+RW/4fUY+9EnkfULGu+wRnqGsSeUQ7cDA2u+Faxz/KQ yJbHXB4W8WGyO3dRVDY/9I5skvhLy6TK+HkoSwxwYBfRqcpoVZGJv2A7 n3I= ns-int.dns.md. 172800 IN A 217.26.144.5 nsb.dns.md. 172800 IN A 217.26.144.15 nsc.dns.md. 172800 IN A 95.65.9.3 me. 172800 IN NS a0.cctld.afilias-nst.info. me. 172800 IN NS a2.me.afilias-nst.info. me. 172800 IN NS b0.cctld.afilias-nst.org. me. 172800 IN NS b2.me.afilias-nst.org. me. 172800 IN NS c0.cctld.afilias-nst.info. me. 172800 IN NS d0.cctld.afilias-nst.org. me. 172800 IN NS ns.nic.me. me. 172800 IN NS ns2.nic.me. me. 86400 IN DS 2569 7 1 09BA1EB4D20402620881FD9848994417800DB26A me. 86400 IN DS 2569 7 2 94E798106F033500E67567B197AE9132C0E916764DC743C55A9ECA3C 7BF559E2 me. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hYo5dFaEBw3JqG0HXnY8n0TmUX+4s47LT3a9IKzOvG/iNMA7UExujR7Q NdlE712sYgmQNFG+mqlgO3vv2z76vTGiIlymUVyNjateV4uaiPoRWm5H 6n4p3K/96xgFDRfg4mj99QgeydhPOKXRzMLo/M41AXBLkLe8nwMB7Ph0 5HA= me. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XCGEtXFGxqgOgdbNQGgN8cX4/82dRK6ADKF1MbiMML7F+SQBHToaxqj3 eXc45Ku3mhrweq2EuuXDEQT0fh4e1oxUX+/GDx01Kxp1ZHp6MJNLsrzr vh5kiQ8NrCXkKjIZNV2TAY4T1bRA4sUCHgHSe3fxl05uNfveOUkW5/4/ Du0= me. 86400 IN NSEC menu. NS DS RRSIG NSEC ns.nic.me. 172800 IN A 89.188.44.44 ns2.nic.me. 172800 IN A 89.188.44.88 menu. 172800 IN NS a.nic.menu. menu. 172800 IN NS b.nic.menu. menu. 172800 IN NS c.nic.menu. menu. 172800 IN NS d.nic.menu. menu. 86400 IN DS 51916 8 2 AA3C98EE447CFA3BBF57D8A2899626324DE2097353FB5DBF031519A4 FE6964E6 menu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VVeK3wuIM1zp49dhti1/okUZh+HcRbfHP69xamZ2/YxveZRwvKxvLWy3 EWGQUG0VcMaxWJ1nB9IVSyD/cNvJDgRrISq9Sdjzu7/0GclopMp7jtW3 Ke+Y+r7fTMv5O0+vaD8V/hmJC9H8jSQhFb8bKYGSxoG7E6YMpbmTrYVV 2kc= menu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Im1YHeIJdDwwcmHN1SBhLFRUKewEq6sZk6tDqyiIMm4de7osn2axCPa5 wDSzO3IvVA8soWUfuf7PhrYiOMbpn32JDOqaHMvSzRkLS6EsTY2WJaND 1whXg6BO5eoUwmySsPiNdHquydyg7HQ/OAo8huiN/RNz8h2acDGK6Ybh EW0= menu. 86400 IN NSEC mg. NS DS RRSIG NSEC a.nic.menu. 172800 IN A 37.209.192.10 a.nic.menu. 172800 IN AAAA 2001:dcd:1::10 b.nic.menu. 172800 IN A 37.209.194.10 b.nic.menu. 172800 IN AAAA 2001:dcd:2::10 c.nic.menu. 172800 IN A 37.209.196.10 c.nic.menu. 172800 IN AAAA 2001:dcd:3::10 d.nic.menu. 172800 IN A 37.209.198.10 d.nic.menu. 172800 IN AAAA 2001:dcd:4::10 mg. 172800 IN NS mg.cctld.authdns.ripe.net. mg. 172800 IN NS ns.dts.mg. mg. 172800 IN NS ns.nic.mg. mg. 172800 IN NS mg1.dyntld.net. mg. 172800 IN NS mg2.dyntld.net. mg. 172800 IN NS mg3.dyntld.net. mg. 172800 IN NS mg4.dyntld.net. mg. 172800 IN NS ns1.ird.fr. mg. 172800 IN NS ns-mg.malagasy.com. mg. 86400 IN NSEC mh. NS RRSIG NSEC mg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SRdl0uKAa8qWF9yI8q3n4ov8B3h1HKUPOp1SQ+9dsjjaNIuUYB8VbACS 4NSs+VfRBSxn5IknegYERGoDbM5yiT6IlsFczldsL9wNDZ5Jp+BsEGE/ ssFD9UKfqKeUueQWWB27/4vH0RyaBWi93NmMLtWFl3BIkANNmkpmKA6q I5U= ns.dts.mg. 172800 IN A 196.192.32.2 ns.nic.mg. 172800 IN A 196.192.42.153 mh. 172800 IN NS ns.ntamar.net. mh. 172800 IN NS ns.amarshallinc.com. mh. 86400 IN NSEC mil. NS RRSIG NSEC mh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Z1v5UcbVCsgecLw1pSfKAKvM6UyDqocMDdrA6RtNRhVrYl5zY9Nqhbj5 9ftL2MzxrSACdhh0+tdIlzwf+PiC3Y6T8IJlXC7Jk96R7plmpqg51s+0 eRr03hlMoX5SVhlfQ4/UzF40Kc8p1Ajg7XlGPxSBTWMrBwl2ivooxV3Z zyU= mil. 172800 IN NS con1.nipr.mil. mil. 172800 IN NS con2.nipr.mil. mil. 172800 IN NS eur1.nipr.mil. mil. 172800 IN NS eur2.nipr.mil. mil. 172800 IN NS pac1.nipr.mil. mil. 172800 IN NS pac2.nipr.mil. mil. 86400 IN DS 33001 8 1 02AE8EE2915FF47023EFD96A649D997069196C01 mil. 86400 IN DS 33001 8 2 7BE472D58626F033479706F80DFBABBDFA3BE748C3E94B7D97E9DD53 31A5288E mil. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZS9Uhi3X3JujJ918mqpQKRPpfiTyC/I7NDq+Cj4DLh1R6XTL1FGLbPmG kbq/YeTNNxJQnTB6oTjLUAfQRHc+ermAfHayKToDsiuCbFjNTZnD654z P1eP2a62SwLr1jlCNgd61p9jlFfmJeNfVskkPwJm7kPwL4xunJD85++I O14= mil. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WsurIXocN+xgOyI88PxrvW244QDRrVDavefOAnU/9qj+TRBC27A9jZuZ ryxrQjIG/LTkN1BHXKLpIUsrCIY5VeCrO4eWF2CwRq81LTA6mDB0tXcj PWLaj8rAC74GYYsEehsn7H1c5t/yu+EOt8i5EJcHzywhAU/QPXT/OFmM 13o= mil. 86400 IN NSEC mk. NS DS RRSIG NSEC con1.nipr.mil. 172800 IN A 199.252.157.234 con2.nipr.mil. 172800 IN A 199.252.162.234 eur1.nipr.mil. 172800 IN A 199.252.154.234 eur2.nipr.mil. 172800 IN A 199.252.143.234 pac1.nipr.mil. 172800 IN A 199.252.180.234 pac2.nipr.mil. 172800 IN A 199.252.155.234 mk. 172800 IN NS ns2.arnes.si. mk. 172800 IN NS ns5.univie.ac.at. mk. 172800 IN NS rip.psg.com. mk. 172800 IN NS kitka.marnet.net.mk. mk. 86400 IN NSEC ml. NS RRSIG NSEC mk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UlMZd3r3dOrd+VvufmF/HpWq8x3FssQmfRx+8Gzv2Mgw5/DCDMwEfM19 jjCmjxr23u3XNzO2qTSyuL0ivGMseqnTus9gYVPfiyAPnbEC+KpH5ZM9 buZfGVv2B3Ebu8Cz0bgA3l6sAqFHutuVy9x5siWsImRaATt1Q/2NQ18M UQQ= kitka.marnet.net.mk. 172800 IN A 194.149.131.2 kitka.marnet.net.mk. 172800 IN AAAA 2a02:e48:0:3::2 ml. 172800 IN NS a.ns.ml. ml. 172800 IN NS b.ns.ml. ml. 172800 IN NS c.ns.ml. ml. 172800 IN NS d.ns.ml. ml. 86400 IN NSEC mm. NS RRSIG NSEC ml. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ox7XMOA/bSXSRhjqxQDY47IsaZXSG8RcXEaGmaLK6YDvPn7BVyn1Co7V EDXdLKeiD52OgOkVi7eRh3So8Zsr4tLeXkIb0sMJTDuIo4nVn4Ch5XJc sYEEFIDQ4QZuZ58/2AP4IJFJV39N6wrdUNl8Ic5T88opUzaiqsLcGwdN MyA= a.ns.ml. 172800 IN A 185.21.168.1 a.ns.ml. 172800 IN AAAA 2a04:1b00::1 b.ns.ml. 172800 IN A 185.21.169.1 b.ns.ml. 172800 IN AAAA 2a04:1b00:1::1 c.ns.ml. 172800 IN A 185.21.170.1 c.ns.ml. 172800 IN AAAA 2a04:1b00:2::1 d.ns.ml. 172800 IN A 185.21.171.1 d.ns.ml. 172800 IN AAAA 2a04:1b00:3::1 mm. 172800 IN NS mm.cctld.authdns.ripe.net. mm. 172800 IN NS ns0.nic.net.mm. mm. 172800 IN NS ns1.nic.net.mm. mm. 172800 IN NS ns2.nic.net.mm. mm. 86400 IN DS 14581 8 1 8B0ED592A997E801DAFADA2CD4CC31999BDA8782 mm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PjRw/gKBb3i2B/1chPa53ImyG5vthnN6LbX479Jk7rfnhojSWOqvOY4F RYZiyRQMxVGbowSNPWwcy/M6Sz6563lzl8G2VoZ1TKE+OGd6LlH5/rwP Dp5+nGbqvQGWKZ9YfJ4JmqxS4o8rCVkd4q80e3O1cgQS4gP0PaI+qHDU j28= mm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Wuk/cakei84ZClVP1iZgOHMJqG5c3RW0dLhTdbn8f8zq1pbrBnWVUPXJ A3BzA1tMcPnuXJvIZ1udUqT5nA51p5SXjoAGPzXJ32o9ETKdIDV2NvMY r/XdC2OSnLOTrT+IWUASVkUoI8o5M9+MMY5rmCtt5puAZ8gsNJJdWDT+ UTY= mm. 86400 IN NSEC mn. NS DS RRSIG NSEC ns0.nic.net.mm. 172800 IN A 203.81.64.20 ns1.nic.net.mm. 172800 IN A 203.81.81.85 ns2.nic.net.mm. 172800 IN A 203.81.92.10 mn. 86400 IN NSEC mo. NS DS RRSIG NSEC mn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OZz1JUUptZHnMVT7W7EXQkOiz5b2GzTgfq3HiGT2eTad8fZkhxWczn8l P1ku1THRNun68EPRp45Csa7P9/7qr5YYogUyoB8yomjuTnpColIhzS/B 9/KrYEGQi5QQ9CfpwO5yTzQUrNqvPxOdk2GdzBpUun8b6JtfYgPzxosB upU= mn. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . QWisGBaza1lkLOJ4x5o7SnHV9+qJO779ndVJkc302p4ULS0iqQxTxUhL w9XzHhWdr5ouS57QDZVKGi8IjVWFoVIJx03Z0pUmvHbixTTMlG6ZrN07 6u/PbfdKmkIZSpof7/qAvkYeZ5lDRtTFcSc9artgsFfoXiJz05lyqnof ji0= mn. 172800 IN NS a0.cctld.afilias-nst.info. mn. 172800 IN NS a2.cctld.afilias-nst.info. mn. 172800 IN NS b0.cctld.afilias-nst.org. mn. 172800 IN NS b2.cctld.afilias-nst.org. mn. 172800 IN NS c0.cctld.afilias-nst.info. mn. 172800 IN NS d0.cctld.afilias-nst.org. mn. 172800 IN NS ns1.magic.mn. mn. 172800 IN NS ns2.magic.mn. mn. 172800 IN NS ns3.magic.mn. mn. 172800 IN NS ns4.magic.mn. mn. 86400 IN DS 61299 7 1 7AED0B5BF96D4A045071FE60B6B1BE8F41A3D8A4 mn. 86400 IN DS 61299 7 2 35AD84BA39FF62258FE6052F8E31E67C341D6CFA41D38A4698F9F35F B68E30B6 ns1.idn.mn. 172800 IN A 202.170.80.40 ns2.idn.mn. 172800 IN A 202.131.0.11 ns3.idn.mn. 172800 IN A 202.180.216.18 ns1.magic.mn. 172800 IN A 202.131.0.10 ns2.magic.mn. 172800 IN A 202.72.241.5 ns3.magic.mn. 172800 IN A 202.131.224.80 ns4.magic.mn. 172800 IN A 218.100.84.26 mo. 172800 IN NS a.monic.mo. mo. 172800 IN NS b.monic.mo. mo. 172800 IN NS c.monic.mo. mo. 172800 IN NS d.monic.mo. mo. 172800 IN NS e.monic.mo. mo. 172800 IN NS ns2.cuhk.edu.hk. mo. 172800 IN NS ns17.cdns.net. mo. 86400 IN NSEC mobi. NS RRSIG NSEC mo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . c7nYrzkHQZTzw3Eyg0Zyc1/Q2W36w2t0YUaM3Jjb795Q/hUww7Xm2vps KXSbeaJBc6fmVXPgnTa/6/XysEdOoSk+XjcSzjc3LFqjlpWh9O8flt+u +RPfj8VNYIsxOZlgJX8D30WgFkg4eTYFCgTizUJ9CwJQrTH+plAl+THK STA= a.monic.mo. 172800 IN A 202.175.87.47 b.monic.mo. 172800 IN A 202.175.87.48 c.monic.mo. 172800 IN A 202.175.87.49 d.monic.mo. 172800 IN A 202.175.51.115 e.monic.mo. 172800 IN A 202.175.51.116 mobi. 172800 IN NS a0.mobi.afilias-nst.info. mobi. 172800 IN NS a2.mobi.afilias-nst.info. mobi. 172800 IN NS b0.mobi.afilias-nst.org. mobi. 172800 IN NS b2.mobi.afilias-nst.org. mobi. 172800 IN NS c0.mobi.afilias-nst.info. mobi. 172800 IN NS d0.mobi.afilias-nst.org. mobi. 86400 IN NSEC moda. NS RRSIG NSEC mobi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cTypvSfF5bhRbjawZZzJk6joHogVP6V0ZWmcPp3ivSli+Ha3Rdwt24/X MMRYZsBs/FkUdGQL1HJ16iKCjkDMvBowiOZjHC1Wiw6lKn4BrcTfOWOa eBae6yu3qhftmCQ0mejHMtJ9o/ZTSBU2BMIEGsMVdPHOp+uYR2a8TYyf KAI= moda. 172800 IN NS demand.beta.aridns.net.au. moda. 172800 IN NS demand.alpha.aridns.net.au. moda. 172800 IN NS demand.delta.aridns.net.au. moda. 172800 IN NS demand.gamma.aridns.net.au. moda. 86400 IN DS 38596 8 2 63CCF0EB3E518D41F9E52DBE7DC0762567BB8A6CFF1162A3305A445F A42ACDFD moda. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qjrDvGerH8dG0QzphNkVVwVpjlW3HZh3jTWgKaHxS8g/ccnqfFScmkZS gvImTVKHNBDLl54idbj6kDwEPW6sXjKhvkJatzNejEba6XT2poFgJ+eb b5Ar9I4aD2EW5t7SEsHsB304sBo0G8yDToBU/RJSW1UTFSxFwMUxQ0JL wys= moda. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . T0JfSJS4aSDQE20zU9Yiz5IGAT7ScVl1LYM+QunTPS6tMoUk7RCuui7d Y+C3t9hl1OM03t/TCwONx4n0EhPGL/GIqBfMBsOU1zVWrLEovdlQDig0 BNfM5xxcMjaiMC0utpPqPTNaUS+Ep2PGkoXj7nA4k/aOPEiA5TSjjVfT Dvw= moda. 86400 IN NSEC monash. NS DS RRSIG NSEC monash. 172800 IN NS a.nic.monash. monash. 172800 IN NS b.nic.monash. monash. 172800 IN NS c.nic.monash. monash. 172800 IN NS d.nic.monash. monash. 86400 IN DS 6355 8 2 BC8C82B3E65FC95A0610ED0F56190D4D0B78033F437EB48C2DD54F0E 0AEB3BBD monash. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MNKlHDVWjyONvf3Mdt7TfruscnYLa+ZBHSi7YAKrkQY1YOcbKeiHBS9W 4HyH07v9HFsR2U7as9ZGQT8LZdptxhLdqHCglRHO9ek6P+T6DoaE0azV T/IiWb14K/xwUOxRcOmR48OzvThhtUvV4rJkP64qK4e1YjtzozTEADex Djw= monash. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . B3FsxN8H3QI7c3XnmKqfmRdFq/QjoHzkcpQ2H7541FRc8llpewKEhR01 9sY2d/P8olZy/qPMl12nTo8GdnlEmEpRHH5+2dwHBS+pUg8mcx6hlNpo cL91L+5AwCiuPShBqodHMkrvtmc+no08tDE4g+IVMReOceYdhz/vJxG7 8hg= monash. 86400 IN NSEC mp. NS DS RRSIG NSEC a.nic.monash. 172800 IN A 37.209.192.9 a.nic.monash. 172800 IN AAAA 2001:dcd:1::9 b.nic.monash. 172800 IN A 37.209.194.9 b.nic.monash. 172800 IN AAAA 2001:dcd:2::9 c.nic.monash. 172800 IN A 37.209.196.9 c.nic.monash. 172800 IN AAAA 2001:dcd:3::9 d.nic.monash. 172800 IN A 37.209.198.9 d.nic.monash. 172800 IN AAAA 2001:dcd:4::9 mp. 172800 IN NS ns1.nic.mp. mp. 172800 IN NS ns2.nic.mp. mp. 172800 IN NS ns3.nic.mp. mp. 172800 IN NS ns4.nic.mp. mp. 86400 IN NSEC mq. NS RRSIG NSEC mp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DaJ6v/beMqW7Ua6eRe/TK05RslqKQoQh2ZC3ecLlZA9swlPI/R8zbdHe B9T6qB2rcFDSg1GDx72ArzO+B+pR9BBIxRQFrqhoIY4N6ltwXs8dYM2t KfV3IVbEKXHyk1GtGE8UFKgvcvQqu4K/nAEZZP7ynpnklm15i9y//MPP Mb0= ns1.nic.mp. 172800 IN A 202.128.29.2 ns2.nic.mp. 172800 IN A 202.128.29.135 ns3.nic.mp. 172800 IN A 75.101.129.89 ns4.nic.mp. 172800 IN A 75.101.133.101 mq. 172800 IN NS ns1-fr.mediaserv.net. mq. 172800 IN NS ns1-gp.mediaserv.net. mq. 172800 IN NS ns1-mq.mediaserv.net. mq. 86400 IN NSEC mr. NS RRSIG NSEC mq. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HRyIIMF7Av5viSRKqf6CgN+jJoFt6L1MwxciRozauiJuItSvb23hmtca +NqpitNDgC3bMWa4Ako6Vb1QeJDRdkhSDrjsQhIyDnybPNEkz8xbI7YQ TIdr0JB+qFUOaIYkT/XHkTFhRFzU0YC3lNQmZMpP15Vdqm89Y93V+GtY O34= mr. 172800 IN NS ns.univ-nkc.mr. mr. 172800 IN NS ns3.nic.fr. mr. 172800 IN NS censvrns0001.ird.fr. mr. 86400 IN NSEC ms. NS RRSIG NSEC mr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P0XyahG6k/rjlDJblf3cqK8GoqIIe0ZgZrVgqeYKc0J/PsSki8hdyNtW Qa4fbdPZGZ6f95gxhO8JptqkhtWaHc+1FgaJ3ZmwBv9fhoQUH2DjMNg7 qGxQc+GwTxmuYAwC0aXofu2PUKv2dbynXU5uhwXBgspyXyjdylsm7d8O WIg= ns.univ-nkc.mr. 172800 IN A 82.151.64.1 ms. 172800 IN NS ms1.dyntld.net. ms. 172800 IN NS ms2.dyntld.net. ms. 172800 IN NS ms3.dyntld.net. ms. 172800 IN NS ms4.dyntld.net. ms. 172800 IN NS ms-ns.anycast.pch.net. ms. 172800 IN NS phloem.uoregon.edu. ms. 172800 IN NS mnidns1.mninet.ms. ms. 86400 IN NSEC mt. NS RRSIG NSEC ms. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UM+b/aNbqPhOhV7jBLDPvdfD7olfR+TUm3nag7theBGn59xzWT45xp5D 6uXyEeu82PUSSlPN0ChGkeTnXe/lnSvCr4ZD6TixPYVe3LcTfNeyUicR KRAoLGmSVxYO2t+bKwIlcyg564XHbtnGD/sgZkW1EYzc7BHB4XvvocdD IuI= mnidns1.mninet.ms. 172800 IN A 199.7.90.2 mt. 172800 IN NS f.ns.mt. mt. 172800 IN NS i.ns.mt. mt. 172800 IN NS p.ns.mt. mt. 172800 IN NS r.ns.mt. mt. 172800 IN NS ns.mt. mt. 172800 IN NS ns1.mt. mt. 86400 IN NSEC mu. NS RRSIG NSEC mt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GodU0PsQqZRbMV+EXXVuuhcbUW0dK+Eo910BFBHwsCQfZTHKCZXqjg69 wLaLXEoIx7aEHFnygPBhjpDHNC4gCh+QP9Kr5zFMAKq/7kEIS5NW+E3T Am3/n2bKRMnaZ3WcdMOPGFttvfm6PUFdRRYBEcrL33ywMaFDAV5uLqW3 cxs= ns.mt. 172800 IN A 193.188.47.252 f.ns.mt. 172800 IN A 192.93.0.4 f.ns.mt. 172800 IN AAAA 2001:660:3005:1::1:2 i.ns.mt. 172800 IN A 192.5.4.1 i.ns.mt. 172800 IN AAAA 2001:500:2e::1 p.ns.mt. 172800 IN A 204.61.216.45 r.ns.mt. 172800 IN A 193.0.9.97 r.ns.mt. 172800 IN AAAA 2001:67c:e0::97 ns1.mt. 172800 IN A 193.188.34.241 mu. 86400 IN NSEC museum. NS RRSIG NSEC mu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mEPAhRlgsgThkuVeIba/sLmGLST30PjURxoHmqk4oU7IO2F5wQEOy16H 59WG221hsO2CvKl2AkWEjCdOmJztgqzdCHvEiwPpINXP9OAZnPrRdMKv gUhgC1Bv7nZDHU5YLJd3Xl/te2OuP4wBAH6+eCpyd9am620PVXkAsgQq Xc0= mu. 172800 IN NS fork.sth.dnsnode.net. mu. 172800 IN NS udns1.tld.mu. mu. 172800 IN NS udns2.tld.mu. mu. 172800 IN NS anycast1.irondns.net. cctld-vu.orange.mu. 172800 IN A 196.192.110.15 udns1.tld.mu. 172800 IN A 204.61.216.10 udns1.tld.mu. 172800 IN AAAA 2001:500:14:6010:ad::1 udns2.tld.mu. 172800 IN A 193.0.9.98 udns2.tld.mu. 172800 IN AAAA 2001:67c:e0::98 museum. 172800 IN NS ns.icann.org. museum. 172800 IN NS nic.museum. museum. 172800 IN NS ns5.knipp.de. museum. 172800 IN NS anyc1.irondns.net. museum. 172800 IN NS sns-pb.isc.org. museum. 86400 IN DS 17341 10 2 75E82017BAF68EB9BF64C4392B47489DB07317F8D9B522AF644586C2 64C1B231 museum. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . gtV8qU3HyGL9N89u2Ph/JJ4gtno0QWpfDZ5G4tHi+Ye4C+ztFfz+iql7 rFeVjTJ60xRxmPhJ/PX60tS4KFyuP5wLMB/n44tjrh7lJSvyovFWuzq0 XAOaf4CrLCP/wpjykX9GSgoLsvWc8gGk5Z6npaGZBFokl3jTe1Kc4ovC bWs= museum. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . f6Vfm+1WMO5rXBawk8S3/DCgG8NSpxWvPs026LStN5GKZ75eT147qHIZ htlAFvKYw3wg+s4xSYCuWk3gKdVT4oHOFTyHLYy4AsqZbWwEVVSeusv/ xlfJiItnecJAhg1E+eQMpxWkrhTKttjlEzNw7++xwjxPs5OY2fjmv4WN ODI= museum. 86400 IN NSEC mv. NS DS RRSIG NSEC nic.museum. 172800 IN A 130.242.24.5 mv. 172800 IN NS ns.dhivehinet.net.mv. mv. 172800 IN NS ns2.dhivehinet.net.mv. mv. 172800 IN NS mv-ns.anycast.pch.net. mv. 86400 IN NSEC mw. NS RRSIG NSEC mv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ueIlYmWw5WtJ50MUh7VuH1qQNuSucB14FZnYVTz9fp8j+i3UFWza7/R0 cpSMx4zEgXw4WkKI8VfZtRaz5tXvGzOOrSa/qEWuQYkVzc6yjURadLs7 Ixwdol9Fq3vm86QsIYZhoSrdolQgX9vecgI42DV9+Rv+JC/iX9GOkrhW OfY= ns.dhivehinet.net.mv. 172800 IN A 202.1.192.196 ns2.dhivehinet.net.mv. 172800 IN A 202.1.201.201 mw. 172800 IN NS mw.cctld.authdns.ripe.net. mw. 172800 IN NS rip.psg.com. mw. 172800 IN NS sec3.apnic.net. mw. 172800 IN NS domwe.sdn.mw. mw. 172800 IN NS chambo.sdnp.org.mw. mw. 86400 IN NSEC mx. NS RRSIG NSEC mw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rC2/JfGQB1LOz9kKRkTfYyp/ttYvEp/w8rZFjuiKzR+jHdIY4VBX+hlu riF2GL7+xJJuDob2nQ55RDpb8OEHoVO07gSfUdutPR2w6dLWrhDOOnR3 huDA2MKi9Be9G3uubRZCFSpohyHa/4h5miVUotcehxEIqwvOEaFj44GP TOk= chambo.sdnp.org.mw. 172800 IN A 41.221.99.135 chambo.sdnp.org.mw. 172800 IN A 196.45.188.5 domwe.sdn.mw. 172800 IN A 41.221.99.149 domwe.sdn.mw. 172800 IN A 196.45.190.9 mx. 86400 IN NSEC my. NS RRSIG NSEC mx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QJQSrwJt0rGIQzmzKp5UctPL3ttcrah/p2g+JoexxycWlc8YIudHBQVb hldLGti1Y5jxzbvFHz9YVv7hC8/+bB/XgCWlahToGOpbbE5mPBjWbPvW HiynP2WGXL0Mzdgu9lIP1r+iOOuHqTH92XXseo0iZqP3mkJqqFWo2cgs i1w= mx. 172800 IN NS c.mx-ns.mx. mx. 172800 IN NS e.mx-ns.mx. mx. 172800 IN NS i.mx-ns.mx. mx. 172800 IN NS m.mx-ns.mx. mx. 172800 IN NS o.mx-ns.mx. mx. 172800 IN NS x.mx-ns.mx. c.mx-ns.mx. 172800 IN A 192.100.224.1 c.mx-ns.mx. 172800 IN AAAA 2001:1258::1 e.mx-ns.mx. 172800 IN A 189.201.244.1 i.mx-ns.mx. 172800 IN A 207.248.68.1 m.mx-ns.mx. 172800 IN A 200.94.176.1 o.mx-ns.mx. 172800 IN A 200.23.1.1 x.mx-ns.mx. 172800 IN A 201.131.252.1 ns3.nic.mx. 172800 IN A 200.33.111.1 my. 172800 IN NS dns.mynic.net.my. my. 172800 IN NS ns2.cuhk.edu.hk. my. 172800 IN NS ns5.jaring.my. my. 172800 IN NS ns6.jaring.my. my. 172800 IN NS dns2.mynic.net.my. my. 172800 IN NS ns20.iij.ad.jp. my. 172800 IN NS ns30.cdns.net. my. 172800 IN NS ns-my.nic.fr. my. 86400 IN DS 49551 8 1 486D0A0DAF13FCE34AEF9BE1B68075B016B84ECF my. 86400 IN DS 49551 8 2 906FB28961CD5A3D1D90782507C471C9F80870E727B9504076BF5288 AE3B7DC9 my. 86400 IN DS 56937 8 1 48A57004990714CA096B7D6FC9B58968C0BE37DB my. 86400 IN DS 56937 8 2 885B9FAA1749CB502589E0DCF047849013ADA126ABF557D33C704F8C E97C9058 my. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Aldjue2W8UGJqnzQwIuCs8FSG7KYlsQscER5fPa7gK05jdxnuwfRceFI Ly9q6iEB7OsaP/Nf9xiWHSNnPw1/l1pOkw/uK/3DmRnkcqlfe+VtWr1N mBPFnnp3bdx/j+SWejS3o2eEqKMpUzxeaAWymgvkvnm0pAXF9ELT6YWZ 0m4= my. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IhN9PURxGQJ5f7ce6BVOWKI+BPiZhlY5b5KTZbSrZvn3bnxrBI9EWFpp vPcSvJWGxy6+pVO1+US/D6QUr/bIuHc9tZOPpjhmPRcMw13oYMSA33HI K65GCixqxWNwQpQPsN0Dwr+8t01lWiFgiyNUwjAK3r2BXrECe7lNwd/E IVM= my. 86400 IN NSEC mz. NS DS RRSIG NSEC ns5.jaring.my. 172800 IN A 61.6.38.139 ns5.jaring.my. 172800 IN AAAA 2001:328:200:48::400 ns6.jaring.my. 172800 IN A 192.228.128.16 ns6.jaring.my. 172800 IN AAAA 2001:328:200:ab::600 dns.mynic.net.my. 172800 IN A 192.228.180.5 dns.mynic.net.my. 172800 IN AAAA 2001:328:1000:3::5 dns2.mynic.net.my. 172800 IN A 202.75.39.36 dns2.mynic.net.my. 172800 IN AAAA 2401:b000::36 mz. 172800 IN NS anyns.uem.mz. mz. 172800 IN NS dzowo.uem.mz. mz. 172800 IN NS ns-mz.afrinic.net. mz. 172800 IN NS zebra.uem.mz. mz. 172800 IN NS oceano.uem.mz. mz. 172800 IN NS phloem.uoregon.edu. mz. 86400 IN NSEC na. NS RRSIG NSEC mz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . s0uVYV2mKHpmuUbnJ1QqipayiEEt7/NJRvqlLdQRRvYyN5sVlFfaJjzs vXNWg06NH1ctxnCcUxg3y0zyuO9dJs5ykOwnR5R/wN02jr4RW1nYHSG8 LtU3lZJjlcSKa2dDNRXXZL5bw1/76mLUUXO2TMX4fjUpRCfUCzyVtGli nYs= anyns.uem.mz. 172800 IN A 204.61.216.14 dzowo.uem.mz. 172800 IN A 196.3.96.66 oceano.uem.mz. 172800 IN A 196.3.96.69 zebra.uem.mz. 172800 IN A 196.3.96.67 na. 172800 IN NS na1.dyntld.net. na. 172800 IN NS na2.dyntld.net. na. 172800 IN NS ns5.nominum.com. na. 172800 IN NS ns6.nominum.eu. na. 172800 IN NS anyc2.irondns.net. na. 172800 IN NS na-ns.anycast.pch.net. na. 172800 IN NS merlin.net.na. na. 172800 IN NS sns-pb.isc.org. na. 86400 IN DS 24484 5 1 EFC19D4685751FF8E11F96142A083DCB9C708912 na. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Ul/UWgjARe6uEWLkD7eHAVI6sLyNKogs0O139KAqtpJhLdESH19jTw4g qg0tHJLZbuFpbupUrRfpfjOa9dZPC9ItFs4aFIpbuXsQj1CRKjGrHoJH e2AGdCfWjH3cE843Y/xlDOxeF+8stg/rpNcuJjOrEhAWD/U9t+NSUraZ 5RI= na. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dPdNd7zVko50U+dqiDpkFVo4h+G/rShhF1epjwGGQCgwE3JaSJz2GNzE GAnMqWwiSDV7wGdIXG4szaEt9JIEEQ+ew5ZnTakCAGjM9iSrwwMHdi0V E6SXYpjrw1kFNxPv4CXZq4J6TLesjaWV9amkU1qe/ozxq1uC/M9kWJ4V 7J8= na. 86400 IN NSEC nagoya. NS DS RRSIG NSEC merlin.net.na. 172800 IN A 204.152.184.96 nagoya. 172800 IN NS a.gmoregistry.net. nagoya. 172800 IN NS b.gmoregistry.net. nagoya. 172800 IN NS c.gmoregistry.net. nagoya. 172800 IN NS d.gmoregistry.net. nagoya. 172800 IN NS e.gmoregistry.net. nagoya. 86400 IN DS 23834 8 2 957222A7538919C4B3CCF76010594729E1F16EF36CF266F965F86CD2 C06889B4 nagoya. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . E8smNsgPPaWMnR2ut++WSnlr9Y9sXx5hWHQb7++HV3rRr+AtA5WC+AuL xTe9Q/ztvBRMJlkS/yUBy6q9yqYavsxc+dNm3eiGmYt69FQAeHhwtDm4 gqbjUtKO6E161KAuxk5i6jasdfBiNtUQJWeyWY6E5ek9XsrNL8cdGFkH gOM= nagoya. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cckVOJ0bjEb+R4mAvOMs9gb8bSboqUR/gyiskU1MMiT703rLfSxURyAr Mp3zhuqzTpe52qQtyzHARh0CGKahL5BQlCQ6/EyCerD+2tZxAd7z9iti IrvXkDDYh3WiUX5hjDDMdGLqOr2CRJ+UCNhDnixjOcZKzoo1tvCuDser 8lY= nagoya. 86400 IN NSEC name. NS DS RRSIG NSEC name. 172800 IN NS a6.nstld.com. name. 172800 IN NS c6.nstld.com. name. 172800 IN NS d6.nstld.com. name. 172800 IN NS f6.nstld.com. name. 172800 IN NS g6.nstld.com. name. 172800 IN NS h6.nstld.com. name. 172800 IN NS j6.nstld.com. name. 172800 IN NS k6.nstld.com. name. 172800 IN NS l6.nstld.com. name. 172800 IN NS m6.nstld.com. name. 86400 IN DS 52563 8 2 4E2671F0DBC3927D842053044C6A0CBF8B21E1E657DE8BBA99A48350 31A85A41 name. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nFZmb2HQx19bPy0FjZ7DdGifTsGlZbR5NtJe1nzmj6qPeXPVXQI1vAMA UcMNDScwMhU9WCHSaMNc/gNCyiIclqpSZfsPbkSShpJifpiIDD+B/36K pDT/VNZP3THtORLar93nZiOVWDjQZP5MyxUy34KJhCxDvQJHxXMJoB5P vJE= name. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . L3DlrxuCZclMQUEQAH9fYG8Szk2sUjget6kiR99VjUqdMRJ+SMEuFXPh pC+tGHX2f5/J499sVCl24lt6guU3v+VFK6YqHOJuYgRJhAyj9txKw5hq SFy8C8Df9Y17v+sfE/qeJAUyZJe9lHO+QDDx3Ec7zZapOrtKZgo0Q0pV m0Y= name. 86400 IN NSEC nc. NS DS RRSIG NSEC nc. 172800 IN NS nc.cctld.authdns.ripe.net. nc. 172800 IN NS ns1.nc. nc. 172800 IN NS ns2.nc. nc. 172800 IN NS any-ns1.nc. nc. 172800 IN NS censvrns0001.ird.fr. nc. 86400 IN DS 49057 8 2 5957AB66CF4871C8C39EDEBC78DFAB2B6DCBB3EA5E97278EA2719053 9410B753 nc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . kTRpetsOoZTGaktTklgtE1GOUM2oEycbBdCU3XRx1ZU6dXgelTiRiSNB 9i3mXykpc1HV/7kyHOlplW/cVl41t8vCT3g9aJBWlrHqUaCWWlRcFuiL MvtQEr7WeHk+Y9OLQRcU1Vntno67FjYB+J7xWGdA81+7iZwsM8QlrkVX nIM= nc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . R1xebf1Ruhq+zZcR5A29Fsom67ClJd8qsHOJGsDlrYg5igcvy3WTQJ3n p99rmc3zV3c5i85RD9WmglJ18nI6D4ehvfeCXuhmLjPyMCr/EVg0Lv86 e0XcAXe9JGdvh/lAW81jFRqR43nRxKVXqhNdJ8Ds9ONgpXUpodHOy4Qs xsQ= nc. 86400 IN NSEC ne. NS DS RRSIG NSEC any-ns1.nc. 172800 IN A 114.69.222.1 any-ns1.nc. 172800 IN AAAA 2001:500:14:8000:7245:de00:0:1 ns1.nc. 172800 IN A 202.87.129.16 ns2.nc. 172800 IN A 202.87.129.17 ne. 172800 IN NS ne.cctld.authdns.ripe.net. ne. 172800 IN NS ns.intnet.ne. ne. 172800 IN NS bow.rain.fr. ne. 172800 IN NS ns-ne.afrinic.net. ne. 86400 IN NSEC net. NS RRSIG NSEC ne. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aWfb+vWBBTErecvemUGSQwfCz6+ZtasGw3t5lrYhJsbqBTwoSuy3MFY0 7tQADVvrxphRUjLlP0xpyEUXGVxO3+T4AKWbXQ45sGHxTYsuMpH8CXBg j0nt/Al9ri+zbvbjsfJhjjPT0vQMWpdN6VKKlS3LO2OgceZ+eVPS8+RJ A10= ns.intnet.ne. 172800 IN A 41.138.54.10 net. 86400 IN NSEC nf. NS DS RRSIG NSEC net. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . FozsT30Dx7z2AlbU+t2eJ5k8cfXHKv8ueOhQ24o87o9qDgVtpWNooezO FsbE7EFZ4ST3jyVTf8t9xR1BaxFow1amnXPCrHCstnM4xucNsiV0zXCt 8TNjrSYM7fmuBhPYxxpeqnPfmfnis8COPIymElINEUWlx0bDmLtoGP4K iPE= net. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . l6kvAPBv0sw/pihJdpJmemeRlCLpCCDDuDdyXN32l36jNouiG4LGIDaz m3eYCOuRU5s93EEWcAX7VJPVp+QFb5iTDdqkjmjD/4vmR3UfgWx/K15+ MgU0XdzsQCXs0MaoWeQz5eO4vWUfCsLQBtWziH1ETSVYb/z4/+lusaUf 0Rw= net. 172800 IN NS a.gtld-servers.net. net. 172800 IN NS b.gtld-servers.net. net. 172800 IN NS c.gtld-servers.net. net. 172800 IN NS d.gtld-servers.net. net. 172800 IN NS e.gtld-servers.net. net. 172800 IN NS f.gtld-servers.net. net. 172800 IN NS g.gtld-servers.net. net. 172800 IN NS h.gtld-servers.net. net. 172800 IN NS i.gtld-servers.net. net. 172800 IN NS j.gtld-servers.net. net. 172800 IN NS k.gtld-servers.net. net. 172800 IN NS l.gtld-servers.net. net. 172800 IN NS m.gtld-servers.net. net. 86400 IN DS 35886 8 2 7862B27F5F516EBE19680444D4CE5E762981931842C465F00236401D 8BD973EE ns1.aalnet.net. 172800 IN A 194.112.0.1 ns2.aalnet.net. 172800 IN A 194.112.0.5 ns3.aalnet.net. 172800 IN A 82.199.186.130 ns1.admin.net. 172800 IN A 198.73.186.1 ns2.admin.net. 172800 IN A 198.71.89.236 ns2.admin.net. 172800 IN AAAA 2605:f700:40:400::196b:8127 ns3.admin.net. 172800 IN A 87.98.180.44 ns3.admin.net. 172800 IN AAAA 2001:41d0:8:94e4::2 ns4.admin.net. 172800 IN A 116.251.210.160 ns4.admin.net. 172800 IN AAAA 2405:4200:202::923a:d47b ns5.admin.net. 172800 IN A 188.165.33.42 ns5.admin.net. 172800 IN AAAA 2001:41d0:8:5c79::3 ns-bi.afrinic.net. 172800 IN A 196.216.168.23 ns-bi.afrinic.net. 172800 IN AAAA 2001:43f8:120::23 ns-bj.afrinic.net. 172800 IN A 196.216.168.33 ns-bj.afrinic.net. 172800 IN AAAA 2001:43f8:120::33 ns-bw.afrinic.net. 172800 IN A 196.216.168.72 ns-bw.afrinic.net. 172800 IN AAAA 2001:43f8:120::72 ns-ci.afrinic.net. 172800 IN A 196.216.168.30 ns-ci.afrinic.net. 172800 IN AAAA 2001:43f8:120::30 ns-dz.afrinic.net. 172800 IN A 196.216.168.36 ns-dz.afrinic.net. 172800 IN AAAA 2001:43f8:120::36 ns-gm.afrinic.net. 172800 IN A 196.216.168.29 ns-gm.afrinic.net. 172800 IN AAAA 2001:43f8:120::29 ns-ke.afrinic.net. 172800 IN A 196.216.168.22 ns-km.afrinic.net. 172800 IN A 196.216.168.46 ns-km.afrinic.net. 172800 IN AAAA 2001:43f8:120::46 ns-ls.afrinic.net. 172800 IN A 196.216.168.70 ns-ls.afrinic.net. 172800 IN AAAA 2001:43f8:120::70 ns-ly.afrinic.net. 172800 IN A 196.216.168.24 ns-ly.afrinic.net. 172800 IN AAAA 2001:43f8:120::24 ns-mz.afrinic.net. 172800 IN A 196.216.168.40 ns-mz.afrinic.net. 172800 IN AAAA 2001:43f8:120::40 ns-ne.afrinic.net. 172800 IN A 196.216.168.45 ns-ne.afrinic.net. 172800 IN AAAA 2001:43f8:120::45 ns-rw.afrinic.net. 172800 IN A 196.216.168.28 ns-rw.afrinic.net. 172800 IN AAAA 2001:43f8:120::28 ns-sd.afrinic.net. 172800 IN A 196.216.168.26 ns-sd.afrinic.net. 172800 IN AAAA 2001:43f8:120::26 ns-td.afrinic.net. 172800 IN A 196.216.168.31 ns-td.afrinic.net. 172800 IN AAAA 2001:43f8:120::31 ns-tn.afrinic.net. 172800 IN A 196.216.168.25 ns-tn.afrinic.net. 172800 IN AAAA 2001:43f8:120::25 ns-tz.afrinic.net. 172800 IN A 196.216.168.20 ns-tz.afrinic.net. 172800 IN AAAA 2001:43f8:120::20 ns-ug.afrinic.net. 172800 IN A 196.216.168.42 ns-ug.afrinic.net. 172800 IN AAAA 2001:43f8:120::42 ns-zm.afrinic.net. 172800 IN A 196.216.168.44 ns-zm.afrinic.net. 172800 IN AAAA 2001:43f8:120::44 ns-cdn.amnic.net. 172800 IN A 194.0.1.26 ns-cdn.amnic.net. 172800 IN AAAA 2001:678:4::1a ns-pri.amnic.net. 172800 IN A 195.43.74.53 ns-pri.amnic.net. 172800 IN AAAA 2001:67c:21c:53::1 sec1.apnic.net. 172800 IN A 202.12.29.59 sec1.apnic.net. 172800 IN AAAA 2001:dc0:2001:a:4608::59 sec3.apnic.net. 172800 IN A 202.12.28.140 sec3.apnic.net. 172800 IN AAAA 2001:dc0:1:0:4777::140 sec4.apnic.net. 172800 IN A 202.12.31.141 sec4.apnic.net. 172800 IN AAAA 2001:dc0:4001:1:0:1836:0:141 ns1.as6453.net. 172800 IN A 66.198.145.55 ns2.as6453.net. 172800 IN A 66.198.145.99 dns-st.bahnhof.net. 172800 IN A 79.136.119.20 ns1.bahnhof.net. 172800 IN A 195.178.160.2 ns1.barbadosdomain.net. 172800 IN A 200.50.92.195 ns2.barbadosdomain.net. 172800 IN A 204.212.242.113 ns17.cdns.net. 172800 IN A 194.0.1.17 ns17.cdns.net. 172800 IN AAAA 2001:678:4::11 ns30.cdns.net. 172800 IN A 194.0.1.30 ns30.cdns.net. 172800 IN AAAA 2001:678:4::1e ns7.cdns.net. 172800 IN A 194.0.1.7 ns7.cdns.net. 172800 IN AAAA 2001:678:4::7 ns.cernet.net. 172800 IN A 202.112.0.44 a.ci-servers.net. 172800 IN A 87.117.194.160 root-b.cloud9global.net. 172800 IN A 50.22.82.251 ns1.cobex.net. 172800 IN A 216.152.192.71 ns2.cobex.net. 172800 IN A 216.152.192.72 lk.communitydns.net. 172800 IN A 194.0.1.27 ns1.communitydns.net. 172800 IN A 194.0.1.1 ns1.communitydns.net. 172800 IN AAAA 2001:678:4::1 ns15.communitydns.net. 172800 IN A 194.0.1.15 ns15.communitydns.net. 172800 IN AAAA 2001:678:4::f ph.communitydns.net. 172800 IN A 194.0.1.23 euro-ns1.cw.net. 172800 IN A 141.1.27.248 euro-ns2.cw.net. 172800 IN A 212.80.175.2 euro-ns3.cw.net. 172800 IN A 141.1.27.251 l.de.net. 172800 IN A 77.67.63.105 l.de.net. 172800 IN AAAA 2001:668:1f:11::105 n.de.net. 172800 IN A 194.146.107.6 n.de.net. 172800 IN AAAA 2001:67c:1011:1::53 s.de.net. 172800 IN A 195.243.137.26 dns.dnsafrica.net. 172800 IN A 213.193.157.30 cl1.dnsnode.net. 172800 IN A 194.146.106.34 cl1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:8::53 nl1.dnsnode.net. 172800 IN A 194.146.106.42 nl1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:10::53 pe1.dnsnode.net. 172800 IN A 194.146.106.82 pe1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:20::53 fork.sth.dnsnode.net. 172800 IN A 77.72.229.254 fork.sth.dnsnode.net. 172800 IN AAAA 2a01:3f0:0:306::53 za1.dnsnode.net. 172800 IN A 194.146.106.78 za1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:19::53 af1.dyntld.net. 172800 IN A 208.78.70.94 af1.dyntld.net. 172800 IN AAAA 2001:500:90::94 af3.dyntld.net. 172800 IN A 208.78.71.94 af3.dyntld.net. 172800 IN AAAA 2001:500:94::94 coop1.dyntld.net. 172800 IN A 208.78.70.80 coop2.dyntld.net. 172800 IN A 204.13.250.80 coop3.dyntld.net. 172800 IN A 208.78.71.80 coop4.dyntld.net. 172800 IN A 204.13.251.80 cx1.dyntld.net. 172800 IN A 208.78.70.77 cx1.dyntld.net. 172800 IN AAAA 2001:500:90::77 cx3.dyntld.net. 172800 IN A 208.78.71.77 cx3.dyntld.net. 172800 IN AAAA 2001:500:94::77 gl1.dyntld.net. 172800 IN A 208.78.70.97 gl2.dyntld.net. 172800 IN A 204.13.250.97 gl3.dyntld.net. 172800 IN A 208.78.71.97 gl4.dyntld.net. 172800 IN A 204.13.251.97 gs1.dyntld.net. 172800 IN A 208.78.70.86 gs1.dyntld.net. 172800 IN AAAA 2001:500:90::86 gs3.dyntld.net. 172800 IN A 208.78.71.86 gs3.dyntld.net. 172800 IN AAAA 2001:500:94::86 ki1.dyntld.net. 172800 IN A 208.78.70.87 ki1.dyntld.net. 172800 IN AAAA 2001:500:90::87 ki3.dyntld.net. 172800 IN A 208.78.71.87 ki3.dyntld.net. 172800 IN AAAA 2001:500:94::87 mg1.dyntld.net. 172800 IN A 208.78.70.96 mg2.dyntld.net. 172800 IN A 204.13.250.96 mg3.dyntld.net. 172800 IN A 208.78.71.96 mg4.dyntld.net. 172800 IN A 204.13.251.96 ms1.dyntld.net. 172800 IN A 208.78.70.84 ms2.dyntld.net. 172800 IN A 204.13.250.84 ms3.dyntld.net. 172800 IN A 208.78.71.84 ms4.dyntld.net. 172800 IN A 204.13.251.84 na1.dyntld.net. 172800 IN A 208.78.70.90 na2.dyntld.net. 172800 IN A 204.13.250.90 nf1.dyntld.net. 172800 IN A 208.78.70.88 nf1.dyntld.net. 172800 IN AAAA 2001:500:90::88 nf3.dyntld.net. 172800 IN A 208.78.71.88 nf3.dyntld.net. 172800 IN AAAA 2001:500:94::88 sb1.dyntld.net. 172800 IN A 208.78.70.83 sb1.dyntld.net. 172800 IN AAAA 2001:500:90::83 sb3.dyntld.net. 172800 IN A 208.78.71.83 sb3.dyntld.net. 172800 IN AAAA 2001:500:94::83 tl1.dyntld.net. 172800 IN A 208.78.70.78 tl1.dyntld.net. 172800 IN AAAA 2001:500:90::78 tl3.dyntld.net. 172800 IN A 208.78.71.78 tl3.dyntld.net. 172800 IN AAAA 2001:500:94::78 a.edu-servers.net. 172800 IN A 192.5.6.30 c.edu-servers.net. 172800 IN A 192.26.92.30 d.edu-servers.net. 172800 IN A 192.31.80.30 f.edu-servers.net. 172800 IN A 192.35.51.30 g.edu-servers.net. 172800 IN A 192.42.93.30 g.edu-servers.net. 172800 IN AAAA 2001:503:cc2c::2:36 l.edu-servers.net. 172800 IN A 192.41.162.30 ns3.ns.esat.net. 172800 IN A 192.111.39.100 ns3.ns.esat.net. 172800 IN AAAA 2001:7c8:2:a::64 a.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.168.34 a.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:8::2 b.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.169.34 b.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:9::2 c.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.170.34 c.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:a::2 d.gq.globalanycastcloud.freenom.net. 172800 IN A 185.21.171.34 d.gq.globalanycastcloud.freenom.net. 172800 IN AAAA 2a04:1b00:b::2 tld.gdns.net. 172800 IN A 68.178.129.149 news-tokyo.gip.net. 172800 IN A 204.59.64.222 ns2.gip.net. 172800 IN A 204.59.1.222 a.gmoregistry.net. 172800 IN A 72.52.71.9 a.gmoregistry.net. 172800 IN AAAA 2001:470:1a::9 b.gmoregistry.net. 172800 IN A 38.103.2.9 c.gmoregistry.net. 172800 IN A 63.243.194.9 c.gmoregistry.net. 172800 IN AAAA 2001:5a0:10::9 d.gmoregistry.net. 172800 IN A 120.29.252.11 d.gmoregistry.net. 172800 IN AAAA 2001:dcd:5::11 e.gmoregistry.net. 172800 IN A 120.29.254.11 e.gmoregistry.net. 172800 IN AAAA 2001:dcd:6::11 a.gov-servers.net. 172800 IN A 69.36.157.30 a.gov-servers.net. 172800 IN AAAA 2001:500:4431::2:30 b.gov-servers.net. 172800 IN A 209.112.123.30 a.gtld-servers.net. 172800 IN A 192.5.6.30 a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 b.gtld-servers.net. 172800 IN A 192.33.14.30 b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 c.gtld-servers.net. 172800 IN A 192.26.92.30 d.gtld-servers.net. 172800 IN A 192.31.80.30 e.gtld-servers.net. 172800 IN A 192.12.94.30 f.gtld-servers.net. 172800 IN A 192.35.51.30 g.gtld-servers.net. 172800 IN A 192.42.93.30 h.gtld-servers.net. 172800 IN A 192.54.112.30 i.gtld-servers.net. 172800 IN A 192.43.172.30 j.gtld-servers.net. 172800 IN A 192.48.79.30 k.gtld-servers.net. 172800 IN A 192.52.178.30 l.gtld-servers.net. 172800 IN A 192.41.162.30 m.gtld-servers.net. 172800 IN A 192.55.83.30 osi2.gua.net. 172800 IN A 205.161.188.3 anyc1.irondns.net. 172800 IN A 195.253.64.4 anyc1.irondns.net. 172800 IN AAAA 2a01:5b0:4::4 anyc2.irondns.net. 172800 IN A 195.253.64.7 anyc2.irondns.net. 172800 IN AAAA 2a01:5b0:4::7 anycast1.irondns.net. 172800 IN A 195.253.64.5 anycast1.irondns.net. 172800 IN AAAA 2a01:5b0:4::5 anycast10.irondns.net. 172800 IN A 195.253.64.12 anycast10.irondns.net. 172800 IN AAAA 2a01:5b0:4::c anycast23.irondns.net. 172800 IN A 195.253.65.11 anycast23.irondns.net. 172800 IN AAAA 2a01:5b0:5::b anycast24.irondns.net. 172800 IN A 195.253.65.12 anycast24.irondns.net. 172800 IN AAAA 2a01:5b0:5::c anycast9.irondns.net. 172800 IN A 195.253.64.11 anycast9.irondns.net. 172800 IN AAAA 2a01:5b0:4::b tld.isc-sns.net. 172800 IN A 63.243.194.3 tld.isc-sns.net. 172800 IN AAAA 2001:5a0:10::3 ns0.ja.net. 172800 IN A 128.86.1.20 ns0.ja.net. 172800 IN A 193.63.94.20 ns0.ja.net. 172800 IN AAAA 2001:630:0:8::14 ns0.ja.net. 172800 IN AAAA 2001:630:0:9::14 ns4.ja.net. 172800 IN A 193.62.157.66 ns4.ja.net. 172800 IN AAAA 2001:630:0:47::42 kwns.kems.net. 172800 IN A 168.187.5.12 ns1.krnic.net. 172800 IN A 202.30.50.51 gd-ns.ksregistry.net. 172800 IN A 194.0.11.103 gd-ns.ksregistry.net. 172800 IN AAAA 2001:678:e:103::53 dns.lttnet.net. 172800 IN A 62.240.36.9 dns1.lttnet.net. 172800 IN A 62.68.42.9 ns1-fr.mediaserv.net. 172800 IN A 188.165.38.14 ns1-gp.mediaserv.net. 172800 IN A 213.188.172.1 ns1-mq.mediaserv.net. 172800 IN A 213.16.20.3 server.nordu.net. 172800 IN A 193.10.252.19 a.ns13.net. 172800 IN A 49.212.31.192 b.ns13.net. 172800 IN A 49.212.51.85 ns.ntamar.net. 172800 IN A 117.103.88.33 cl-ns.anycast.pch.net. 172800 IN A 204.61.216.30 cl-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6030:ad::1 cy-ns.anycast.pch.net. 172800 IN A 204.61.216.44 cy-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6044:ad::1 gd-ns.anycast.pch.net. 172800 IN A 204.61.216.47 gd-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6047:ad::1 gy-ns.anycast.pch.net. 172800 IN A 204.61.216.34 gy-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6034:ad::1 ht-ns.anycast.pch.net. 172800 IN A 204.61.216.38 ht-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6038:ad::1 ls-ns.anycast.pch.net. 172800 IN A 204.61.216.28 ls-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6028:ad::1 ms-ns.anycast.pch.net. 172800 IN A 204.61.216.33 mv-ns.anycast.pch.net. 172800 IN A 204.61.216.24 na-ns.anycast.pch.net. 172800 IN A 204.61.216.35 na-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6035:ad::1 np-ns.anycast.pch.net. 172800 IN A 204.61.216.11 np-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6011:ad::1 pr-ns.anycast.pch.net. 172800 IN A 204.61.216.23 pr-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6023:ad::1 ps-ns.anycast.pch.net. 172800 IN A 204.61.216.29 ps-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6029:ad::1 sa-ns.anycast.pch.net. 172800 IN A 204.61.216.41 sa-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6041:ad::1 sg-ns.anycast.pch.net. 172800 IN A 204.61.216.57 sg-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6057:ad::1 za-ns.anycast.pch.net. 172800 IN A 204.61.216.55 za-ns.anycast.pch.net. 172800 IN AAAA 2001:500:14:6055:ad::1 anyns.pch.net. 172800 IN A 204.61.216.4 cat.pch.net. 172800 IN A 204.61.216.20 cat.pch.net. 172800 IN AAAA 2001:500:14:6020:ad::1 nic.lk-anycast.pch.net. 172800 IN A 204.61.216.27 ad.cctld.authdns.ripe.net. 172800 IN A 193.0.9.53 ad.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::53 ae.cctld.authdns.ripe.net. 172800 IN A 193.0.9.54 ae.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::54 al.cctld.authdns.ripe.net. 172800 IN A 193.0.9.56 al.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::56 am.cctld.authdns.ripe.net. 172800 IN A 193.0.9.57 am.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::57 an.cctld.authdns.ripe.net. 172800 IN A 193.0.9.58 an.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::58 ar.cctld.authdns.ripe.net. 172800 IN A 193.0.9.59 ar.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::59 ba.cctld.authdns.ripe.net. 172800 IN A 193.0.9.60 ba.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::60 bg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.61 bg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::61 bi.cctld.authdns.ripe.net. 172800 IN A 193.0.9.62 bi.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::62 bj.cctld.authdns.ripe.net. 172800 IN A 193.0.9.63 bj.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::63 bt.cctld.authdns.ripe.net. 172800 IN A 193.0.9.65 bt.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::65 ci.cctld.authdns.ripe.net. 172800 IN A 193.0.9.67 ci.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::67 cm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.68 cm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::68 cu.cctld.authdns.ripe.net. 172800 IN A 193.0.9.70 cu.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::70 cw.cctld.authdns.ripe.net. 172800 IN A 193.0.9.86 cw.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::86 dz.cctld.authdns.ripe.net. 172800 IN A 193.0.9.71 dz.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::71 er.cctld.authdns.ripe.net. 172800 IN A 193.0.9.72 er.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::72 et.cctld.authdns.ripe.net. 172800 IN A 193.0.9.73 et.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::73 gd.cctld.authdns.ripe.net. 172800 IN A 193.0.9.75 gd.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::75 gp.cctld.authdns.ripe.net. 172800 IN A 193.0.9.76 gp.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::76 gs.cctld.authdns.ripe.net. 172800 IN A 193.0.9.77 gs.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::77 gu.cctld.authdns.ripe.net. 172800 IN A 193.0.9.78 gu.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::78 gy.cctld.authdns.ripe.net. 172800 IN A 193.0.9.79 gy.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::79 is.cctld.authdns.ripe.net. 172800 IN A 193.0.9.81 is.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::81 jm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.82 jm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::82 jo.cctld.authdns.ripe.net. 172800 IN A 193.0.9.83 jo.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::83 kg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.84 kg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::84 kz.cctld.authdns.ripe.net. 172800 IN A 193.0.9.87 kz.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::87 lv.cctld.authdns.ripe.net. 172800 IN A 193.0.9.89 lv.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::89 ly.cctld.authdns.ripe.net. 172800 IN A 193.0.9.90 ly.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::90 ma.cctld.authdns.ripe.net. 172800 IN A 193.0.9.91 ma.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::91 mc.cctld.authdns.ripe.net. 172800 IN A 193.0.9.92 mc.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::92 md.cctld.authdns.ripe.net. 172800 IN A 193.0.9.93 md.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::93 mg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.94 mg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::94 mm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.96 mm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::96 mw.cctld.authdns.ripe.net. 172800 IN A 193.0.9.99 mw.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::99 nc.cctld.authdns.ripe.net. 172800 IN A 193.0.9.100 nc.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::100 ne.cctld.authdns.ripe.net. 172800 IN A 193.0.9.101 ne.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::101 np.cctld.authdns.ripe.net. 172800 IN A 193.0.9.102 np.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::102 ph.cctld.authdns.ripe.net. 172800 IN A 193.0.9.104 ph.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::104 ps.cctld.authdns.ripe.net. 172800 IN A 193.0.9.105 ps.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::105 py.cctld.authdns.ripe.net. 172800 IN A 193.0.9.106 py.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::106 sa.cctld.authdns.ripe.net. 172800 IN A 193.0.9.108 sa.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::108 sd.cctld.authdns.ripe.net. 172800 IN A 193.0.9.109 sd.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::109 sm.cctld.authdns.ripe.net. 172800 IN A 193.0.9.110 sm.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::110 sn.cctld.authdns.ripe.net. 172800 IN A 193.0.9.111 sn.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::111 sv.cctld.authdns.ripe.net. 172800 IN A 193.0.9.112 sv.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::112 sy.cctld.authdns.ripe.net. 172800 IN A 193.0.9.113 sy.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::113 sz.cctld.authdns.ripe.net. 172800 IN A 193.0.9.114 sz.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::114 th.cctld.authdns.ripe.net. 172800 IN A 193.0.9.116 th.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::116 tj.cctld.authdns.ripe.net. 172800 IN A 193.0.9.117 tj.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::117 to.cctld.authdns.ripe.net. 172800 IN A 193.0.9.118 to.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::118 tp.cctld.authdns.ripe.net. 172800 IN A 193.0.9.119 tp.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::119 tr.cctld.authdns.ripe.net. 172800 IN A 193.0.9.120 tr.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::120 ug.cctld.authdns.ripe.net. 172800 IN A 193.0.9.52 ug.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::52 uy.cctld.authdns.ripe.net. 172800 IN A 193.0.9.122 uy.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::122 va.cctld.authdns.ripe.net. 172800 IN A 193.0.9.123 va.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::123 vg.cctld.authdns.ripe.net. 172800 IN A 193.0.9.124 vg.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::124 vn.cctld.authdns.ripe.net. 172800 IN A 193.0.9.126 vn.cctld.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::126 sec2.authdns.ripe.net. 172800 IN A 193.0.9.4 sec2.authdns.ripe.net. 172800 IN AAAA 2001:67c:e0::4 ns-bn.ripe.net. 172800 IN A 193.0.12.33 ns-kh.ripe.net. 172800 IN A 193.0.12.37 ns-zw.ripe.net. 172800 IN A 193.0.12.249 a.dns.ripn.net. 172800 IN A 193.232.128.6 a.dns.ripn.net. 172800 IN AAAA 2001:678:17:0:193:232:128:6 b.dns.ripn.net. 172800 IN A 194.85.252.62 b.dns.ripn.net. 172800 IN AAAA 2001:678:16:0:194:85:252:62 d.dns.ripn.net. 172800 IN A 194.190.124.17 d.dns.ripn.net. 172800 IN AAAA 2001:678:18:0:194:190:124:17 e.dns.ripn.net. 172800 IN A 193.232.142.17 e.dns.ripn.net. 172800 IN AAAA 2001:678:15:0:193:232:142:17 f.dns.ripn.net. 172800 IN A 193.232.156.17 f.dns.ripn.net. 172800 IN AAAA 2001:678:14:0:193:232:156:17 a.root-servers.net. 518400 IN A 198.41.0.4 a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30 b.root-servers.net. 518400 IN A 192.228.79.201 c.root-servers.net. 518400 IN A 192.33.4.12 d.root-servers.net. 518400 IN A 199.7.91.13 d.root-servers.net. 518400 IN AAAA 2001:500:2d::d e.root-servers.net. 518400 IN A 192.203.230.10 f.root-servers.net. 518400 IN A 192.5.5.241 f.root-servers.net. 518400 IN AAAA 2001:500:2f::f g.root-servers.net. 518400 IN A 192.112.36.4 h.root-servers.net. 518400 IN A 128.63.2.53 h.root-servers.net. 518400 IN AAAA 2001:500:1::803f:235 i.root-servers.net. 518400 IN A 192.36.148.17 i.root-servers.net. 518400 IN AAAA 2001:7fe::53 j.root-servers.net. 518400 IN A 192.58.128.30 j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30 k.root-servers.net. 518400 IN A 193.0.14.129 k.root-servers.net. 518400 IN AAAA 2001:7fd::1 l.root-servers.net. 518400 IN A 199.7.83.42 l.root-servers.net. 518400 IN AAAA 2001:500:3::42 m.root-servers.net. 518400 IN A 202.12.27.33 m.root-servers.net. 518400 IN AAAA 2001:dc3::35 igubu.saix.net. 172800 IN A 196.25.1.1 sabela.saix.net. 172800 IN A 196.43.1.9 ns02.savvis.net. 172800 IN A 204.70.57.242 ns1.sr.net. 172800 IN A 200.1.159.148 ns2.sr.net. 172800 IN A 200.2.162.30 ns.thnic.net. 172800 IN A 202.28.0.1 ns.twnic.net. 172800 IN A 192.83.166.11 ns.twnic.net. 172800 IN AAAA 2001:288:1:1006::11 dns2.u-registry.net. 172800 IN A 195.123.1.7 dns2.u-registry.net. 172800 IN AAAA 2a02:128:2::5 nsi.uanic.net. 172800 IN A 212.1.66.247 tld1.ultradns.net. 172800 IN A 204.74.112.1 tld1.ultradns.net. 172800 IN AAAA 2001:502:d399::1 tld2.ultradns.net. 172800 IN A 204.74.113.1 a.ns.uniregistry.net. 172800 IN A 72.52.126.166 a.ns.uniregistry.net. 172800 IN AAAA 2001:470:a4:10::166 ns.uu.net. 172800 IN A 137.39.1.3 auth00.ns.uu.net. 172800 IN A 198.6.1.65 auth00.ns.uu.net. 172800 IN AAAA 2600:803:408:2::10 auth02.ns.uu.net. 172800 IN A 198.6.1.82 auth03.ns.uu.net. 172800 IN A 198.6.1.83 auth100.ns.uu.net. 172800 IN A 198.6.1.202 auth110.ns.uu.net. 172800 IN A 198.6.1.114 auth200.ns.uu.net. 172800 IN A 195.129.12.82 auth200.ns.uu.net. 172800 IN AAAA 2001:600:1c0:e000::35:2 auth210.ns.uu.net. 172800 IN A 195.129.12.74 auth210.ns.uu.net. 172800 IN AAAA 2001:600:1c0:e001::35:2 auth61.ns.uu.net. 172800 IN A 198.6.1.182 nf. 172800 IN NS ns.anycast.nic.nf. nf. 172800 IN NS nf1.dyntld.net. nf. 172800 IN NS nf3.dyntld.net. nf. 172800 IN NS sns-pb.isc.org. nf. 86400 IN DS 54236 8 2 DD87DD324E8360DEC8DAAF2DB771B8C52024D6CEFEB76F2B855E0FC3 B8FDB7D7 nf. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iQtkmXQ/kp3aVc1ECsWFIHRiA+TlNTVa0snRGRzH93cM1lYzshnQ1RLF e2OipuemCXAYXBprz7T3vXbk7D3XwkT4sKe50qJD3qtFl3QW7hGcauhz D9shuLtYXA9NCYDSa0nW3U2qqC3Sg8vv8tPuC03qe208aFzJvFjvD8i1 kk4= nf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RjCq7/Wz/CELFA6jz7quBDzc3ov77sXs7yFEAQmBoX6jrBUxIk9f76ri fwBQZ8rqDF00HlSWZP6g+NYLHZLMLuGi+RQukBr+XurBB/uwYJJz+Sqk UNsSfgxpjsWEmHNkXUdxOkJgUJlquTkfP5norhj4Qr/mX25OsQaMezMw Dc0= nf. 86400 IN NSEC ng. NS DS RRSIG NSEC ns.anycast.nic.nf. 172800 IN A 204.61.216.51 ns.anycast.nic.nf. 172800 IN AAAA 2001:500:14:6051:ad::1 ng. 172800 IN NS ns1.nic.net.ng. ng. 172800 IN NS ns2.nic.net.ng. ng. 172800 IN NS ns3.nic.net.ng. ng. 172800 IN NS ns4.nic.net.ng. ng. 172800 IN NS nsa.nic.net.ng. ng. 86400 IN NSEC ni. NS RRSIG NSEC ng. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HM+wdkmco5NmKllmvFjyJis96qN2UzhtEgtMoU/hVAg1EEwVSsFYe4Ha S8Rge2s35etN78Pgx13e25Cj1NDicMZIrklmbdZk51KyjizIAPmRk43s tNtqnNjqA432If96FthGqA4PH4KR0lByhYxoYmEu3S4jQ1iyJwKlpgz5 65c= ns1.nic.net.ng. 172800 IN A 194.0.1.29 ns1.nic.net.ng. 172800 IN AAAA 2001:678:4::1d ns2.nic.net.ng. 172800 IN A 204.61.216.40 ns3.nic.net.ng. 172800 IN A 208.78.70.93 ns4.nic.net.ng. 172800 IN A 204.13.250.93 nsa.nic.net.ng. 172800 IN A 41.222.79.3 ni. 172800 IN NS ns.cr. ni. 172800 IN NS ns.ni. ni. 172800 IN NS ns.uu.net. ni. 172800 IN NS ns.ibw.com.ni. ni. 172800 IN NS ns.tmx.com.ni. ni. 172800 IN NS ns.ideay.net.ni. ni. 172800 IN NS ns2.ni. ni. 86400 IN NSEC ninja. NS RRSIG NSEC ni. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jmt7MYFkNl2z8hvJJMj/UGRFhrC8WLwj8QFkFZwMPDBMEg3hJoy4jrE9 Jaf31o1OoVUJG3JH+rD/VoAkXMvsyPAn4euKfwFf3yMhn6PKBkQZZkRm gzPytgxkoAtvAYJ0jtlhhxdFzpbgSM7I7HBOQJT0oXLNDxFsQMvvQdyD 8z8= ns.ibw.com.ni. 172800 IN A 200.85.160.2 ns.tmx.com.ni. 172800 IN A 200.62.64.1 ns.ideay.net.ni. 172800 IN A 200.9.190.130 ns.ni. 172800 IN A 165.98.1.2 ns2.ni. 172800 IN A 200.9.187.2 ninja. 172800 IN NS demand.beta.aridns.net.au. ninja. 172800 IN NS demand.alpha.aridns.net.au. ninja. 172800 IN NS demand.delta.aridns.net.au. ninja. 172800 IN NS demand.gamma.aridns.net.au. ninja. 86400 IN DS 55045 8 2 5E37FAE7300F5183057D2FAAD662FCCBEC710849DFED3D31E066E362 32B1FE07 ninja. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WGLXqOuBrwhgtXSMxMOD2lPxqI7fRRitanK2/7LHtMK4flg8bMjLTVP+ MRLyScugkazQOf6FwkTA2Bq8l7fxXcxs1RF/wJAnuGUa6y7c3wGa7+Pf z7xzccxQ5bCN//tV8BMw/ATWhz63FOQeF6VtTKJiEGWpawpePIuRqB0i kOw= ninja. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GKt1PR34r/o3HsFY7eUCCbti1vlzvcMJoVMfJBrsEahcr7eOf+fP2CT5 U8memq2VxMN052ZUCqwn/hl5WgnWZK8/Iz7e7mONKIwPMz7iL5mc85CM KYe3k7GDAGw5XlA91oaLDo3hLrSlTiggrbIvZhGwdLdvWcW8RPDaHm/N IDY= ninja. 86400 IN NSEC nl. NS DS RRSIG NSEC nl. 86400 IN NSEC no. NS DS RRSIG NSEC nl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nqSMwN6naWFjFsW5ffJVyV5OP8yMSNZOqf4f664lL5OxQgVktq9GqbQK kXZdDFhX9XGOEDOOP84A9evmdRpiBYckQja8Xl0WXIETEr4Cm2yi4DKy Nk7d/kmwDSqJHOZkZPRc3yLp9tYfKjUAiM4P/azzchdov2zNOo4mho3L Khk= nl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oxwdC5y6IwurUq7mHOnIp7Re7f2zWtm8uNR1YTKwlKw0Q84Jfwi5Mao1 W5qWjeM/PFdqFmEjao3p52G9pEECqWaECGo5g6IViZUqnHjkhFyeW31A tMclRXSgFOl9GdDwrVlgDaTgvsONJzn+cFfvgY9QfKsJ/KHuKSywnluu fkA= nl. 172800 IN NS nl1.dnsnode.net. nl. 172800 IN NS ns1.dns.nl. nl. 172800 IN NS ns2.dns.nl. nl. 172800 IN NS ns3.dns.nl. nl. 172800 IN NS ns4.dns.nl. nl. 172800 IN NS ns5.dns.nl. nl. 172800 IN NS ns-nl.nic.fr. nl. 172800 IN NS sns-pb.isc.org. nl. 86400 IN DS 21362 8 2 881D17ECCD7FD67F1086247611CCB7FB8646E82D0074AA91E980B016 FD3EDE98 ns1.dns.nl. 172800 IN A 193.176.144.5 ns1.dns.nl. 172800 IN AAAA 2a00:d78:0:102:193:176:144:5 ns2.dns.nl. 172800 IN A 213.154.241.85 ns2.dns.nl. 172800 IN AAAA 2001:7b8:606::85 ns3.dns.nl. 172800 IN A 194.171.17.10 ns3.dns.nl. 172800 IN AAAA 2001:610:0:800d::10 ns4.dns.nl. 172800 IN A 95.142.99.212 ns4.dns.nl. 172800 IN AAAA 2a00:1188:5::212 ns5.dns.nl. 172800 IN A 194.0.28.53 ns5.dns.nl. 172800 IN AAAA 2001:678:2c:0:194:0:28:53 ns-pt.nlnetlabs.nl. 172800 IN A 213.154.224.141 ns-pt.nlnetlabs.nl. 172800 IN AAAA 2001:7b8:206:1::4:141 ns-aw-ext1.sidn.nl. 172800 IN A 193.176.144.23 ns-aw-ext1.sidn.nl. 172800 IN AAAA 2a00:d78:0:102:193:176:144:23 no. 86400 IN NSEC np. NS RRSIG NSEC no. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tDEVTm1CKVNGnL5hWYxRKHtFX9+Xq7b8xss8ywXGpOm/kGQqxB4QEQSl Kq3TPDOC/Ds8mg3MX1jBlnrmdOzLTcpM22AGtAazl7Grwh+r6XC3B9WE 7MH5embhufXuSNkMKBO9z0gDnGaealUtOl4o62xMawipUM5V8hxNLlNq 9as= no. 172800 IN NS i.nic.no. no. 172800 IN NS x.nic.no. no. 172800 IN NS y.nic.no. no. 172800 IN NS z.nic.no. no. 172800 IN NS not.norid.no. no. 172800 IN NS njet.norid.no. nac.no. 172800 IN A 128.39.2.22 i.nic.no. 172800 IN A 194.146.106.6 x.nic.no. 172800 IN A 128.39.8.40 y.nic.no. 172800 IN A 193.75.4.22 y.nic.no. 172800 IN AAAA 2001:8c0:8200:1::2 z.nic.no. 172800 IN A 158.38.8.133 z.nic.no. 172800 IN AAAA 2001:700:0:52d:158:38:8:133 njet.norid.no. 172800 IN A 156.154.101.12 not.norid.no. 172800 IN A 156.154.100.12 not.norid.no. 172800 IN AAAA 2001:502:ad09::12 nn.uninett.no. 172800 IN A 158.38.0.181 np. 172800 IN NS np.cctld.authdns.ripe.net. np. 172800 IN NS sec3.apnic.net. np. 172800 IN NS np-ns.npix.net.np. np. 172800 IN NS np-ns.anycast.pch.net. np. 172800 IN NS ns-ext.isc.org. np. 172800 IN NS shikhar.mos.com.np. np. 172800 IN NS yarrina.connect.com.au. np. 86400 IN NSEC nr. NS RRSIG NSEC np. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . X/su9FItzSqMWaKFAMxaH740MQyfGfGSHxvICfiiWAp1o3x9MGExf3nL 3xDiis1h+LYw2oxSX6n14FCvnrpXDCq58NIUfhddCOGo8woruvGDjB1z 2M1JvLPOSklYdvCRD3F5Ys1+vgdl7hKA014lHF+/dJ1dHxNF4dZND0l1 UXQ= shikhar.mos.com.np. 172800 IN A 202.52.255.5 np-ns.npix.net.np. 172800 IN A 198.32.126.50 nr. 172800 IN NS ns1.net.reach.com. nr. 172800 IN NS dns1.cenpac.net.nr. nr. 172800 IN NS nrweb.cenpac.net.nr. nr. 172800 IN NS sns-pb.isc.org. nr. 86400 IN NSEC nu. NS RRSIG NSEC nr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . j3fHmIF+3Xqh9oshdClAuTvB0YouImlTZfIHtk4RWez7hgqA4jLJmEkF 0txBBX5aoj8BjHqHyUI45hgtuDiSD54ZLXSJTYV6Edfp92ldhpm94mYv 4DgEA3gyPsJlrhqGPR9+jhJOOH1gDt07WbcL2tZi3lyDGpHmRf8/hJS7 pdw= dns1.cenpac.net.nr. 172800 IN A 203.98.225.9 nrweb.cenpac.net.nr. 172800 IN A 203.98.224.66 nu. 172800 IN NS a.nic.nu. nu. 172800 IN NS b.nic.nu. nu. 172800 IN NS c.nic.nu. nu. 86400 IN DS 3453 7 2 270AAD4FB6BC3AF95CB66B2F9C61F615D4510C5702B54899C26EE2E3 7DBCA6D8 nu. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . U0AVMZJXi4bHMx2bCBSyP9xCh3oiKJ5M3ncRwGmHzCsKiftYLh32y+7p +rldLzcV2dzw60InUNEDtcRSE1SD6Gmt2dmoV33+1lJYbMU8ve9IvUE+ n5F4v3OeEU708HzCUYN3OwhkQOdLE1o6zMeYcEttTXJ4bxmWirnB95AI Kmc= nu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . a51L+Mnk6cdDy2GgJbbm0WLdmP/du4PzS4P152eG5n0gmBYSjplZJfj1 tdpnK18Jp47mtmi+s3q/u7mduZSfy+o/PwSesDEKvjbiA04/I8MtSljC RDXBMq+ZoxU8ItCRbQFtYduKSQKzbLTyd1r3Mj2YkUXliAR8TwdwzK1e tm0= nu. 86400 IN NSEC nz. NS DS RRSIG NSEC a.nic.nu. 172800 IN A 194.146.106.22 a.nic.nu. 172800 IN AAAA 2001:67c:1010:5::53 b.nic.nu. 172800 IN A 65.22.164.1 b.nic.nu. 172800 IN AAAA 2a01:8840:10::1 c.nic.nu. 172800 IN A 192.36.144.107 c.nic.nu. 172800 IN AAAA 2a01:3f0:0:301::53 nz. 86400 IN NSEC om. NS DS RRSIG NSEC nz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . asyjZy1kwqlWMQG3eTfqsCZht28pd3HJ8M87mjBpzm6US/rmgMFBIitA 6MC9EQk7JqVz8fWQ/0O7gOmfHvJzFGTpxSlOHyACBbKIEKrwaD5fpIZs PUtyMYXq3SOx4J/NiXxRsjcBtUBEwtlKLRL9OWJGG3HlYbUNzBex8fJ+ GqM= nz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . gxs+qsgptY4P+sHqR4xIO453JN+vuDe8nH4KRVgAJErtFmEVf65/IPlU zbwrRrCoWfk9WDDtWZEkhQCVBWrvzxG8r9aBD1FxnZ6QUjrlTn4JhVKE R0wDp9cZp5XOHAWSm2ChsAyecio/Q1lCFysFouB4FzoaiqUqJEFh6DWe 0dE= nz. 172800 IN NS ns1.dns.net.nz. nz. 172800 IN NS ns2.dns.net.nz. nz. 172800 IN NS ns3.dns.net.nz. nz. 172800 IN NS ns4.dns.net.nz. nz. 172800 IN NS ns5.dns.net.nz. nz. 172800 IN NS ns6.dns.net.nz. nz. 172800 IN NS ns7.dns.net.nz. nz. 86400 IN DS 19889 8 1 A67187009210FC3432B2136FE22A82BE5B20CBC4 nz. 86400 IN DS 19889 8 2 6B4593378969D7077FD31443235A86F0226D3780382143919CF0FF2D 62EB47D8 circa.mcs.vuw.ac.nz. 172800 IN A 130.195.5.12 downstage.mcs.vuw.ac.nz. 172800 IN A 130.195.6.10 ns1.dns.net.nz. 172800 IN A 202.46.190.130 ns1.dns.net.nz. 172800 IN AAAA 2001:dce:2000:2::130 ns2.dns.net.nz. 172800 IN A 202.46.187.130 ns2.dns.net.nz. 172800 IN AAAA 2001:dce:7000:2::130 ns3.dns.net.nz. 172800 IN A 202.46.188.130 ns4.dns.net.nz. 172800 IN A 202.46.189.130 ns5.dns.net.nz. 172800 IN A 156.154.100.14 ns5.dns.net.nz. 172800 IN AAAA 2001:502:ad09::14 ns6.dns.net.nz. 172800 IN A 156.154.101.14 ns6.dns.net.nz. 172800 IN AAAA 2001:502:2eda::14 ns7.dns.net.nz. 172800 IN A 194.146.106.54 ns7.dns.net.nz. 172800 IN AAAA 2001:67c:1010:13::53 ns99.dns.net.nz. 172800 IN A 202.46.190.131 ns99.dns.net.nz. 172800 IN AAAA 2001:dce:2000:2::131 iq.dns.cocca.org.nz. 172800 IN A 203.119.84.235 om. 172800 IN NS ns1.registry.om. om. 172800 IN NS ns2.registry.om. om. 172800 IN NS cctld.beta.aridns.net.au. om. 172800 IN NS cctld.alpha.aridns.net.au. om. 172800 IN NS cctld.delta.aridns.net.au. om. 172800 IN NS cctld.gamma.aridns.net.au. om. 86400 IN NSEC onl. NS RRSIG NSEC om. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eV1UmMROoW9l4sF/LnXdQ3iZHU5yFOMh8BE2/uiYKdetPYgysDIPjarr /6tYSys3JEgQE8iWpmUSe760koz9GwMaqSUuXVrf0SB43/bi2NPKvGZg yIm7ZTOjCijS2XMG0uYrBfl9t52AQvcSOUhd5znIJe5aL2skto77v9F4 e/4= ns1.registry.om. 172800 IN A 185.27.90.101 ns2.registry.om. 172800 IN A 185.27.91.69 onl. 172800 IN NS a0.nic.onl. onl. 172800 IN NS a2.nic.onl. onl. 172800 IN NS b0.nic.onl. onl. 172800 IN NS c0.nic.onl. onl. 86400 IN DS 28830 7 1 43C8D1479E0457EAD6020024017FDEC8CCE2260D onl. 86400 IN DS 28830 7 2 18EB9FAA635692104783C62A7F6F51AA17365BB07689093A247183D3 9B88338D onl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qBLo4E+nL6t0Wp6SmplF55sdsuUbNnodGL4G6QRut1Bw8eJmeUVTSVq8 nBpeLzxQ5nuVUXOll1vjNENSmB979r+5nkVSPoSRvbdujIta5SVLq8fC lcYKMbPOfClaoNORRXYSsQ72ugxxpqtFpomIMduRNR72YIQYcHWl8DJs DwM= onl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VFaP3Z48obqQDIj/TFRk8gxUXyhK9RvdRDhdsW1CMHZ7y5AEghSfd2u3 KtVVgNoV4AqPM8YHzC7GEnp6AYu9dXwT60UofHhGFXdafwZ/cg0CSR9b 5CSvuj45YBCvdafvzjeJ1igvqVatCp4eUtk04UB34ogwKEAr+vr80Y/+ qww= onl. 86400 IN NSEC org. NS DS RRSIG NSEC a0.nic.onl. 172800 IN A 65.22.136.1 a0.nic.onl. 172800 IN AAAA 2a01:8840:86::1 a2.nic.onl. 172800 IN A 65.22.139.1 a2.nic.onl. 172800 IN AAAA 2a01:8840:89::1 b0.nic.onl. 172800 IN A 65.22.137.1 b0.nic.onl. 172800 IN AAAA 2a01:8840:87::1 c0.nic.onl. 172800 IN A 65.22.138.1 c0.nic.onl. 172800 IN AAAA 2a01:8840:88::1 org. 86400 IN NSEC pa. NS DS RRSIG NSEC org. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CZHMdBATY9xtJVjDSntHxMijpLP2EhWPtJAMqpkl3P4b3BfK1FkAD4mC DmONL3eHJu+2gm0fbG2DRn8EO5GnEMpVrTD6NSbpEz+LxRnAqNfXCVXE 6f589A26+tP2wl5FAo+PFlPIEFCVV1I0RWEDePGuVkuwtCKgbmfBaYtj 6ks= org. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . i7KeQgTQ6z1nJY63Du4U0O2gUYPiiTzSy74yWzP+XyJjC+FKwPI3teKP FcayvMp9G9eR0y9IfWBYTu1Iz7jSkKWULk5UTzUTGuU4NuApp8STi0FU VRVO0QH0PlSPu5boPt9Q5k+nOweB/l7TY+hkhxAzsbTrMihXfvnkztTE Z4Q= org. 172800 IN NS a0.org.afilias-nst.info. org. 172800 IN NS a2.org.afilias-nst.info. org. 172800 IN NS b0.org.afilias-nst.org. org. 172800 IN NS b2.org.afilias-nst.org. org. 172800 IN NS c0.org.afilias-nst.info. org. 172800 IN NS d0.org.afilias-nst.org. org. 86400 IN DS 21366 7 1 E6C1716CFB6BDC84E84CE1AB5510DAC69173B5B2 org. 86400 IN DS 21366 7 2 96EEB2FFD9B00CD4694E78278B5EFDAB0A80446567B69F634DA078F0 D90F01BA b0.aero.afilias-nst.org. 172800 IN A 199.254.52.1 b0.aero.afilias-nst.org. 172800 IN AAAA 2001:500:1e::1 b2.aero.afilias-nst.org. 172800 IN A 199.249.123.1 b2.aero.afilias-nst.org. 172800 IN AAAA 2001:500:4b::1 d0.aero.afilias-nst.org. 172800 IN A 199.254.54.1 d0.aero.afilias-nst.org. 172800 IN AAAA 2001:500:20::1 b2.asia.afilias-nst.org. 172800 IN A 199.249.122.1 b2.asia.afilias-nst.org. 172800 IN AAAA 2001:500:4a::1 b0.cctld.afilias-nst.org. 172800 IN A 199.254.60.1 b0.cctld.afilias-nst.org. 172800 IN AAAA 2001:500:26::1 b2.cctld.afilias-nst.org. 172800 IN A 199.249.124.1 b2.cctld.afilias-nst.org. 172800 IN AAAA 2001:500:4c::1 d0.cctld.afilias-nst.org. 172800 IN A 199.254.62.1 d0.cctld.afilias-nst.org. 172800 IN AAAA 2001:500:28::1 b0.in.afilias-nst.org. 172800 IN A 199.253.56.1 b0.in.afilias-nst.org. 172800 IN AAAA 2001:500:50::1 b2.in.afilias-nst.org. 172800 IN A 199.249.125.1 b2.in.afilias-nst.org. 172800 IN AAAA 2001:500:4d::1 b0.info.afilias-nst.org. 172800 IN A 199.254.48.1 b0.info.afilias-nst.org. 172800 IN AAAA 2001:500:1a::1 b2.info.afilias-nst.org. 172800 IN A 199.249.121.1 b2.info.afilias-nst.org. 172800 IN AAAA 2001:500:49::1 d0.info.afilias-nst.org. 172800 IN A 199.254.50.1 d0.info.afilias-nst.org. 172800 IN AAAA 2001:500:1c::1 b2.me.afilias-nst.org. 172800 IN A 199.249.127.1 b2.me.afilias-nst.org. 172800 IN AAAA 2001:500:4f::1 b0.mobi.afilias-nst.org. 172800 IN A 199.254.56.1 b0.mobi.afilias-nst.org. 172800 IN AAAA 2001:500:22::1 b2.mobi.afilias-nst.org. 172800 IN A 199.249.126.1 b2.mobi.afilias-nst.org. 172800 IN AAAA 2001:500:4e::1 d0.mobi.afilias-nst.org. 172800 IN A 199.254.58.1 d0.mobi.afilias-nst.org. 172800 IN AAAA 2001:500:24::1 b0.org.afilias-nst.org. 172800 IN A 199.19.54.1 b0.org.afilias-nst.org. 172800 IN AAAA 2001:500:c::1 b2.org.afilias-nst.org. 172800 IN A 199.249.120.1 b2.org.afilias-nst.org. 172800 IN AAAA 2001:500:48::1 d0.org.afilias-nst.org. 172800 IN A 199.19.57.1 d0.org.afilias-nst.org. 172800 IN AAAA 2001:500:f::1 b0.post.afilias-nst.org. 172800 IN A 65.22.1.1 b0.post.afilias-nst.org. 172800 IN AAAA 2a01:8840:1::1 b2.post.afilias-nst.org. 172800 IN A 65.22.5.1 b2.post.afilias-nst.org. 172800 IN AAAA 2a01:8840:5::1 d0.post.afilias-nst.org. 172800 IN A 65.22.3.1 d0.post.afilias-nst.org. 172800 IN AAAA 2a01:8840:3::1 b0.pro.afilias-nst.org. 172800 IN A 199.182.1.1 b0.pro.afilias-nst.org. 172800 IN AAAA 2001:500:c1::1 b2.pro.afilias-nst.org. 172800 IN A 199.182.40.1 b2.pro.afilias-nst.org. 172800 IN AAAA 2001:500:e1::1 d0.pro.afilias-nst.org. 172800 IN A 199.182.17.1 d0.pro.afilias-nst.org. 172800 IN AAAA 2001:500:d1::1 b0.xxx.afilias-nst.org. 172800 IN A 199.115.153.1 b0.xxx.afilias-nst.org. 172800 IN AAAA 2001:500:a1::1 b2.xxx.afilias-nst.org. 172800 IN A 199.115.157.1 b2.xxx.afilias-nst.org. 172800 IN AAAA 2001:500:a5::1 d0.xxx.afilias-nst.org. 172800 IN A 199.115.155.1 d0.xxx.afilias-nst.org. 172800 IN AAAA 2001:500:a3::1 b.ci-servers.org. 172800 IN A 82.103.139.220 c.ci-servers.org. 172800 IN A 194.146.106.86 c.ci-servers.org. 172800 IN AAAA 2001:67c:1010:22::53 ns.icann.org. 172800 IN A 199.4.138.53 ns.icann.org. 172800 IN AAAA 2001:500:89::53 ns-ext.isc.org. 172800 IN A 204.152.184.64 ns-ext.isc.org. 172800 IN AAAA 2001:4f8:0:2::13 sns-pb.isc.org. 172800 IN A 192.5.4.1 sns-pb.isc.org. 172800 IN AAAA 2001:500:2e::1 ams.sns-pb.isc.org. 172800 IN A 199.6.1.30 ams.sns-pb.isc.org. 172800 IN AAAA 2001:500:60::30 sfba.sns-pb.isc.org. 172800 IN A 149.20.64.3 sfba.sns-pb.isc.org. 172800 IN AAAA 2001:4f8:0:2::19 tld3.ultradns.org. 172800 IN A 199.7.66.1 tld4.ultradns.org. 172800 IN A 199.7.67.1 tld4.ultradns.org. 172800 IN AAAA 2001:502:100e::1 pa. 172800 IN NS ns.cr. pa. 172800 IN NS ns.pa. pa. 172800 IN NS ns.dns.br. pa. 172800 IN NS ns.nic.pa. pa. 172800 IN NS ns2.pa. pa. 172800 IN NS ns-ext.nic.cl. pa. 172800 IN NS sns-pb.isc.org. pa. 86400 IN NSEC pe. NS RRSIG NSEC pa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . X59IkUGGsZYEk7XPR9+zlOWeTgxWJ+hK9F1iGvbEd4aqFjMuBoF65HVH ojHxEeaE+x2ihS032aOa7CCNEw0/QlP8mYFW7n6hyak/TVoSNFlc5+Md nzB3nXfEurfhq0rha8JufJshaeedycGQSP8hXkDzcTcbDNvWcpB8Lc55 k60= ns.nic.pa. 172800 IN A 168.77.8.4 ns.pa. 172800 IN A 168.77.8.2 ns2.pa. 172800 IN A 168.77.8.7 pe. 172800 IN NS pch.rcp.pe. pe. 172800 IN NS pe1.dnsnode.net. pe. 172800 IN NS quipu.rcp.net.pe. pe. 172800 IN NS sns-pb.isc.org. pe. 86400 IN DS 7981 8 2 7C4B12C0D916694718131C7B7607561393FB86E2A3159CE7A74EA9E2 9AFB26F3 pe. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . s9bH5aNW4PZnhsfWjJWTZ9FVV7DlOoH8FVi+fRt31fP7WBanJDv2h/2H dwo88CY02+vqnH+VJgsSaDnykAXnN21nj2dLupOnPzngsoJxz1xtieX9 YhvxSPbX0n7eR/crM55Fq0bxbGpK7bj9CnjO6CLvO7t4mJ5O067DdKWR nVM= pe. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cMueciERAc7QoQyUDBN3A2Y8b5eleQEDTIasLmWZr0ao2Nw/sMh+QM5Q SvLOeKBeWnh7/+nuxzkttyLNNRHAy7kubqc4KxXioAm6I6NGzTl7Ensl +Ubq/4RbMbPyZApu+sr7+xlm2j9gsjpi6V0tp/z3ocwb2IFVGB2zI6Zq e9o= pe. 86400 IN NSEC pf. NS DS RRSIG NSEC quipu.rcp.net.pe. 172800 IN A 200.1.176.4 pch.rcp.pe. 172800 IN A 204.61.216.85 pch.rcp.pe. 172800 IN AAAA 2001:500:14:6085:ad::1 pf. 172800 IN NS ns1.mana.pf. pf. 172800 IN NS ns2.mana.pf. pf. 86400 IN NSEC pg. NS RRSIG NSEC pf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jutMcp+pp73Qeans2qoGOBLPLUlKns4qMfqtFGAlg7WmyhaSFWwub52E YpjunLoe9JrUqy2MYoh3oqySlFfUoMYydNLUXmnRbBX2+h8Mdq1mrZNH afxHxBZ3eLFj/o2LIDyzJ8+6KnhIjDWG77xma0C+fBI+x2cSmko4GCRK MNc= ns1.mana.pf. 172800 IN A 202.3.225.10 ns2.mana.pf. 172800 IN A 202.3.225.20 pg. 172800 IN NS ns.uu.net. pg. 172800 IN NS ns1.tiare.net.pg. pg. 172800 IN NS ns1.unitech.ac.pg. pg. 172800 IN NS ns2.tiare.net.pg. pg. 172800 IN NS munnari.oz.au. pg. 86400 IN NSEC ph. NS RRSIG NSEC pg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HnwW2HmS+zGJ7xMVZQSaAJAvqUqTQk6Iaea0F0UO/X/rsMWWQiMaCkUa LN1PZwpP/d70jKMoTzi9PQldAAxKXh1npPdXgtNZiSOM6F4XNnHUgKti uzOAvnCsBrI91RoYw6na3btUaQC8wi0J5RpB+lDuJx671n/vsAKwJaR0 Eyo= ns1.unitech.ac.pg. 172800 IN A 202.1.32.49 ns1.tiare.net.pg. 172800 IN A 202.165.192.23 ns2.tiare.net.pg. 172800 IN A 202.165.192.24 ph. 172800 IN NS ph.cctld.authdns.ripe.net. ph. 172800 IN NS ph.communitydns.net. ph. 172800 IN NS ns2.cuhk.edu.hk. ph. 172800 IN NS sec4.apnic.net. ph. 172800 IN NS sns-pb.isc.org. ph. 86400 IN NSEC photo. NS RRSIG NSEC ph. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Xr2UrlKV8hATZYI28W+A7vGCxkEvME3VeK6LWa/3bJVWIZknp4F+nopC kQsl4zYPPY/idKvVB1a5lz+qyhQ54tFRQYVwUVrBQxy9ssdJwtSoYtlW EAGw+yME7v+bgeKwGPPGXxmdrTAmvLGDitTJOEjDOgSAAmIkP+EnImml /oM= photo. 172800 IN NS a.ns.uniregistry.net. photo. 172800 IN NS tld.isc-sns.com. photo. 172800 IN NS tld.isc-sns.net. photo. 172800 IN NS tld.isc-sns.info. photo. 86400 IN DS 11884 5 1 5452469C278FB3EF65B9D47B709DBDDA025FD6DA photo. 86400 IN DS 11884 5 2 80ADEC219929825CE490E0B9CAAC5CAD806FC8AD4C4E0D48017F62F5 408D6FF5 photo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . cPznTfMON80nSvRW/EtBd9wo/zgl4iWCz1WryAplw/fIER/+jQfyojOR w5tRv+GUwuOxzRqRwbo6CFeZnif/kFr4RqUiBk2dBuNOA2WzdViVaGqS Ir/3A7PSpMrTxW2qzCP5zZCYO29KYmjnGYXRpdO0rSn0QAzIzKE+ix2P 86A= photo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . i24O/bbxfdJ+wO0oND3ySNKhllXm/m+j9/pyvUlBSaGjxvYbqKD0tJUZ XGurr38T/HM107EEYoIApxxIGjlNIhgto5VWqM9m7yUHBEqjJxI+Jd24 Xj8DFW8WduBJjpi0FND0NAgYBAqUUKBm2tpOQV1y+d4RYxOUY2+hQ9YG MjU= photo. 86400 IN NSEC photography. NS DS RRSIG NSEC photography. 172800 IN NS demand.beta.aridns.net.au. photography. 172800 IN NS demand.alpha.aridns.net.au. photography. 172800 IN NS demand.delta.aridns.net.au. photography. 172800 IN NS demand.gamma.aridns.net.au. photography. 86400 IN DS 59776 8 2 D456A9A0648D15BA511E0CEC9AE8BE1B39E7F8443FB037E58E9313CE 9275F3CC photography. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eeDIAOSM8AUeMeCB9hRUT6N5BsKFXHgXmO3q4cRvqL8u0dX0z8KjIGUX iJ664NpQ8TxhlVxHb4hv42RBCKZUPdbjT7vN6S/o0ZO8k8Ubat/Ze3Z0 9klIMbhXWSira/VAJCbeg5zs4f6sWSV/OEte7/0+mzFTq503Bzo9e+wp 0yg= photography. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hsW6xmQtM2mdUJp+DF/7esNJRO1Gsq0ObLvlU3sP6XwAYtQ62wrOVP9C Uc3ElSzCGIWxh0dJBPcbStOkid+1tjSt40h1TfgckF7Y7QZUhzp/XtS6 AnyOM5rKXKa2zKIAqRmv6TZJeZZ22WHDuUyEJqLAIjUg/VW+p/XOXoq2 ScQ= photography. 86400 IN NSEC photos. NS DS RRSIG NSEC photos. 172800 IN NS demand.beta.aridns.net.au. photos. 172800 IN NS demand.alpha.aridns.net.au. photos. 172800 IN NS demand.delta.aridns.net.au. photos. 172800 IN NS demand.gamma.aridns.net.au. photos. 86400 IN DS 45481 8 2 19BD8DD90A5EC536C0474423CDD38E482628539FD8A4B95EBCE1C0B3 676F9A68 photos. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZjmRP6ggbtDJrgwuKpo0oM6hU1Io4tap7spqdnKOcNQnUAofnhqpuCdN NPu0nIGyvND04QcBrwgRZHeKhov6QL5QivdegPSPks6pmnwte+YC1zT/ JiEUhq11Do0LT/I2eaDKPwCwy6LSv+W+mB7X2AJtdg2v4lNNZSV0DFPk hZ4= photos. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RQBDquloOqtb89rcXjWK9g2Ve9KNylXky6hiznhF2RRS7o99f2wvXwAe Uzjb0f3Nfz3LcfrPkWUPe3gbjtVnrwcEwiDxbRvVo6woctLyv5Fs6ITh xo5nfEnz65bzFFFQC+VdcCeRcmt6m3op0voWDodpWALhCuCxUgXzpwmA +98= photos. 86400 IN NSEC pics. NS DS RRSIG NSEC pics. 172800 IN NS a.ns.uniregistry.net. pics. 172800 IN NS tld.isc-sns.com. pics. 172800 IN NS tld.isc-sns.net. pics. 172800 IN NS tld.isc-sns.info. pics. 86400 IN DS 22037 5 1 128E4D7B181F80FBEF51811B5396FFE83E6517BD pics. 86400 IN DS 22037 5 2 FAA0D15E50168840E97AAA27E7D6F010ECE0C3BDCFD7F26827DA1B06 2AAD9291 pics. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . EuTBhrn36pMIl05YEjvUqH1sp1NSn8vEITbJFZmz80LA964LLhMMSuKp Erf0s3TPDpktgw7pnGGd6Y2K/fGXXRzDi2lxGZIS3I66z3h5ebsd+Efl XfoK6HhDpoVkIMCYwj4ug4xNIx4eY5SDbdF0CGwenrxj8nFHk0mFu0hf /mI= pics. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . c26+q0rGVDC3YR6oEyUwoDDYpDdNrzK5dgSDx4cMfD/doUwuCCtpRV+S o19huDLhNx1B1nXhmJnGOBtIAHBu8TJTBbkkoHcge+wa0pQyn9zqdcMD e2XPixpVDQ21jpqU5TaiRfdmTAhu4eOWnTYHppdvSVb67dZDNow2/8WV 8Ls= pics. 86400 IN NSEC pink. NS DS RRSIG NSEC pink. 172800 IN NS a0.nic.pink. pink. 172800 IN NS a2.nic.pink. pink. 172800 IN NS b0.nic.pink. pink. 172800 IN NS c0.nic.pink. pink. 86400 IN DS 45756 7 1 D4496FF46E35CC9A206DA310B24C36AF205A2BD1 pink. 86400 IN DS 45756 7 2 71CDA61FCA2B38FD3C93B8A69B2300CD7BC91FF32C306F1F3F831BBA 7686A149 pink. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . qTvAg2gKWIYMHAADz9b284lFhp+3FsL5DjmW7hSoqHpbPoQ+OUPliSsW rmALjk05+95gSjjJ918M6aWWMD5991oI2wqAOzj84ZCGvMv4flHbaVlA F9Q0bgqi31I9h7znUxYLfp4mcUon0R4iySowz8LaBCWC6Qwd38t8Dp7O Zx4= pink. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DC+p8MqeY58+bilojEPUg78MpdsVRGsF+2CA6rwQzgQNon9WjFCigG/i eUH3ibuAYCXMmO7Tt46G7OO1sTpJb+zkSrrwKJ7c5jaTHY6C3DOnZoTn SM4tUwVFjt9MbfHy84eVqsUO01erkznhyNZP745Jb6jRgmVCXq+NaXUz Ulc= pink. 86400 IN NSEC pk. NS DS RRSIG NSEC a0.nic.pink. 172800 IN A 65.22.28.17 a0.nic.pink. 172800 IN AAAA 2a01:8840:1e::17 a2.nic.pink. 172800 IN A 65.22.31.17 a2.nic.pink. 172800 IN AAAA 2a01:8840:21::17 b0.nic.pink. 172800 IN A 65.22.29.17 b0.nic.pink. 172800 IN AAAA 2a01:8840:1f::17 c0.nic.pink. 172800 IN A 65.22.30.17 c0.nic.pink. 172800 IN AAAA 2a01:8840:20::17 pk. 172800 IN NS root-b.cloud9global.net. pk. 172800 IN NS root-p.pknic.pk. pk. 172800 IN NS root-s.pknic.pk. pk. 86400 IN NSEC pl. NS RRSIG NSEC pk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . THHnMZ5hFGFV04Q1ShS6aPDNSCUn8q1MiZa8IV6/+QVB+lNVF5pi+Jt2 MBEg65O0oXb7shsSx4op3HSzRZ+ekFW74TQWwPPhARRg7qMKn1NA3igE mSUjJpcT3E4DssVOoOEYid5hjwNJ+vSaDj5SnnSLIGx2nDMWTiKoP40y 2P4= root-p.pknic.pk. 172800 IN A 203.128.7.123 root-s.pknic.pk. 172800 IN A 119.81.34.90 pl. 172800 IN NS a-dns.pl. pl. 172800 IN NS c-dns.pl. pl. 172800 IN NS d-dns.pl. pl. 172800 IN NS e-dns.pl. pl. 172800 IN NS f-dns.pl. pl. 172800 IN NS g-dns.pl. pl. 172800 IN NS h-dns.pl. pl. 172800 IN NS i-dns.pl. pl. 86400 IN DS 27236 8 1 DC037E771F7C4CEA0C6BB65C6EDA62DAE18693A0 pl. 86400 IN DS 27236 8 2 16E41465F64D6FE884E5079FD2781C3C3585E899D7EB495E47138CB1 D7DFC98C pl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . VgUtqoTAWv6OjqqAuEf+1ln8+s7574jGqDReqYyk+dD+WFlo4cpx1NO/ 9dGobBno+p0hX95uAi4/jNoALOee7ALN06Kp+3AhPNdylpFhlA9aSj1I Sgm81X6qTxoS3rYOhk/v8JtN7V/YKHufKwCbK8VUNrC8r6pxm5avg590 INY= pl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zur+VSxE2Nk+L3ORZFHso+z00Yzlj6UkN2llva2f2G7M8ky++gJnvRWG 269iqk4h/IrC+74NnQ5V+bVac/lVtW9ctjtlbFlOVtQvZfyviAJ3RoiW ZDEGfG02cT6dp2HAnerElVoBsn0M2XMfPHlMkWzmGbc3ty8YDAQELIUO KKs= pl. 86400 IN NSEC plumbing. NS DS RRSIG NSEC a-dns.pl. 172800 IN A 195.187.245.44 c-dns.pl. 172800 IN A 195.47.235.226 d-dns.pl. 172800 IN A 213.172.174.70 e-dns.pl. 172800 IN A 195.80.237.162 f-dns.pl. 172800 IN A 217.17.46.189 f-dns.pl. 172800 IN AAAA 2001:1a68:0:10::189 g-dns.pl. 172800 IN A 149.156.1.6 g-dns.pl. 172800 IN AAAA 2001:6d8:0:1::a:6 h-dns.pl. 172800 IN A 194.0.1.2 h-dns.pl. 172800 IN AAAA 2001:678:4::2 i-dns.pl. 172800 IN A 156.154.100.15 plumbing. 172800 IN NS demand.beta.aridns.net.au. plumbing. 172800 IN NS demand.alpha.aridns.net.au. plumbing. 172800 IN NS demand.delta.aridns.net.au. plumbing. 172800 IN NS demand.gamma.aridns.net.au. plumbing. 86400 IN DS 3256 8 2 BB346E545259EA75712223FFD494EABE12726A788828C02BD03B979E D7976BD7 plumbing. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . eKmjJeNGPCgYPt3w22EwCzGQeggdz3rOXyEE+t6SLkXfBFmHE7NACoZ9 NoVLVUl6DOpmX+rcjxyVb9xc4U+c3423vT7aLVaupkFO6bBm3nM/8ykw HvePbKGZRIsH2I3gB70HKbhb1pGKDQFTDdzJJ6TV3pYsCUgJ9DnoAtFK p5c= plumbing. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MOU0LHRNU3t8CNS4Niy5xj4zsmmV5MKR9xt57Jqt7PRgnpTMB9zIPa79 XRswaiww/jocKDKUYUJlY1fyykg3uivLAbgb9G1JVUnr6THa64aPOjWW xa0c8hpSYQLQZO8ysJ3Y7ftg7hZVRVX7R61mdaSeTaOg/q+Fwr10VNCj Jvk= plumbing. 86400 IN NSEC pm. NS DS RRSIG NSEC pm. 172800 IN NS d.ext.nic.fr. pm. 172800 IN NS d.nic.fr. pm. 172800 IN NS e.ext.nic.fr. pm. 172800 IN NS f.ext.nic.fr. pm. 172800 IN NS g.ext.nic.fr. pm. 86400 IN DS 35911 8 2 BCCB9BB0CAB68D8C3C64A4FF4ECF3309743D14C5366738F54D4C031E 74EA99F1 pm. 86400 IN DS 56192 8 2 B49959AB8FFF95A45BF5F7130AB1A64C7EF1CEFB6F50CA1BE0032815 03325F67 pm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z+XextKqTI8xzXcg3sy+vsJjKl0Pz4UQY3qjDREef7uoDz1DMsbYdrUN jn42NHUwqicmtqF9kECfnvQaSdIjQ+DAezTIBgxsHw223gPdLkkp6RRd /DKUmw91axZq0X0iBsWmJFe3ifEAiTtpQxtZdziq+BTB2Iao3tn1GuPW rh0= pm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RvN5euxEgHiQmanx7CBLfUjN4ySTN+bfeOC6mqN0Yo4rJHJvAuDYhR7o F0m/B6/JVslGdeLGUlauF8LijoHGKY6MOvn3XB0jQL4OTqC2XaPDMrVR gJaZhTPjJ78ak/4Wk+mMBleAZFgINUREL85aA7RjnFQWYqbBYqW1zjDz xS4= pm. 86400 IN NSEC pn. NS DS RRSIG NSEC pn. 172800 IN NS ns0.pitcairn.net.pn. pn. 172800 IN NS ns2.pitcairn.net.pn. pn. 172800 IN NS fork.sth.dnsnode.net. pn. 172800 IN NS sns-pb.isc.org. pn. 86400 IN NSEC post. NS RRSIG NSEC pn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ecz/QV3h/zMP8HEKnNxreVg3e8CJIlCH0pxHDQS5dQMiHkQe4E3imhMz Kp7OBQw6fsp5SqJrQetO84Qrwhy6dCwTfKM/KZqW19H8DhyKFoTEaSfd lPwWGaAkOzX9zMLQlp4x7vDUgMAmdcisw8Q5zT+3BC0vH/WqEw5uTcVB HzI= ns0.pitcairn.net.pn. 172800 IN A 173.230.153.180 ns2.pitcairn.net.pn. 172800 IN A 80.68.93.100 post. 172800 IN NS a0.post.afilias-nst.info. post. 172800 IN NS a2.post.afilias-nst.info. post. 172800 IN NS b0.post.afilias-nst.org. post. 172800 IN NS b2.post.afilias-nst.org. post. 172800 IN NS c0.post.afilias-nst.info. post. 172800 IN NS d0.post.afilias-nst.org. post. 86400 IN DS 32869 7 1 6BDF7F6E05265E97B88E44C56D86E686FDB75AC7 post. 86400 IN DS 32869 7 2 0333CB4618C912888F923F60E876BA9B160602CCED7B3B8BF35C5222 89C84DE7 post. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . HziTalmCgzAW6LLf0ja9tOyi//AqMWtKKGrKT/dNZIIDuxBa0Q9Slyjd 1dAnO58gKHzN2cSldjYOmebMDywSDXGgD+79eLYRsg9R+/FBnr3CuY3i cBgw31bQoBfshL2NhxIaeZwQ4bQyO7oaohvFy75ufqQAKHsGYfZFNqpI p3c= post. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dkZFfuUR0kqR3WN5Q6nPjDth2PIrLmIPXO2gBb+aWrS5HsTnapGm4nPQ sA+R219YNGvVDXt2Br5iwqAKsmTS2rz62Xds1bAXn7vycn76JDN0WPBH YhbSh+iJ+x42rcdRQTR1UxCOwI59VW29dJPz4HNdxIrVwO7ptUiNR+vm C3w= post. 86400 IN NSEC pr. NS DS RRSIG NSEC pr. 86400 IN NSEC pro. NS DS RRSIG NSEC pr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . I3Owa/VHX+K9e0ri4ukWoA5OonXCKzzPzvD0ZArV8JOX3CIXy7uB4mkx R7rmuzV3ogZ0pKgZOlsjBLYH7LHbgSsjG+YulZ4mcRnYOOl3Z17ZTcXy JgsQXnGdAxFnGMBRegGuV/dIG0uwL1Tkltbi8lfjMJfbnCDaexSNjuPj VQg= pr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . N2YYlscNZSGSUBu6jg0XcTF5vOfrVNVA0ILE4HHQaLmLJuEsQ1IpHPYK M17t81PI6QSD08942aH/MoS/7aIODxlfkawJCbOI9DDU+EO39Zqaxd2D FYUG8oPL1grhr1K+2ajjXGR32q0ewsO80m+9bW/tVkziBIU+VJUYFbKe 7ns= pr. 172800 IN NS pr-ns.anycast.pch.net. pr. 172800 IN NS golomb.nic.pr. pr. 172800 IN NS pascal.nic.pr. pr. 172800 IN NS pr-dns.denic.de. pr. 172800 IN NS descartes.nic.pr. pr. 86400 IN DS 53986 5 1 C2B7576022FE56A3340409053A7AA5D6EED8EB09 descartes.nic.pr. 172800 IN A 134.202.1.120 do-dns.nic.pr. 172800 IN A 134.202.1.121 golomb.nic.pr. 172800 IN A 134.202.6.100 golomb.nic.pr. 172800 IN AAAA 2001:500:10::6:100 pascal.nic.pr. 172800 IN A 134.202.0.120 pascal.nic.pr. 172800 IN AAAA 2001:500:10::120 pro. 172800 IN NS a0.pro.afilias-nst.info. pro. 172800 IN NS a2.pro.afilias-nst.info. pro. 172800 IN NS b0.pro.afilias-nst.org. pro. 172800 IN NS b2.pro.afilias-nst.org. pro. 172800 IN NS c0.pro.afilias-nst.info. pro. 172800 IN NS d0.pro.afilias-nst.org. pro. 86400 IN NSEC ps. NS RRSIG NSEC pro. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P+NXU4Jjo6EbjwyYeYxpN+cOZduaxQsatni5XSy1e8urZyfa3Q9qRBFp 6VqvHQTvWpe/08J42emw3G/kY+3HS9hXLgpXehIwpECjxk61m/pwx5mS CX3n82mdogKs50bxuct77RliuXVGJAcB3YOAon8tY48l+OiOTqcm32JG +jE= ps. 86400 IN NSEC pt. NS RRSIG NSEC ps. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ddd/n0H5e5A/Nft5fcTa/bzsCpC1rBwpnw6IYvmFQuzaYvwRdBAK3LSt wJl8TPRBHRwCMhak/NqVf/FZQCZIXBa8cqgIYvvk6VprZttwbkCN/z1I XnJ9AnBKi/9nTjP08GKKdsmTcFHNn5/jjqLWIN4+Wy2/hI1nqFFr9K3X SbA= ps. 172800 IN NS ps.cctld.authdns.ripe.net. ps. 172800 IN NS ns1.pnina.ps. ps. 172800 IN NS rip.psg.com. ps. 172800 IN NS dns1.gov.ps. ps. 172800 IN NS fork.sth.dnsnode.net. ps. 172800 IN NS ps-ns.anycast.pch.net. dns1.gov.ps. 172800 IN A 213.244.82.147 dns3.gov.ps. 172800 IN A 212.14.253.242 idn.pnina.ps. 172800 IN A 208.64.68.4 ns1.pnina.ps. 172800 IN A 194.6.225.20 pt. 86400 IN NSEC pw. NS DS RRSIG NSEC pt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Tc+7boShiDTagjE+9df1kf1UKBAiCBDWQ2HBmRwi8k7A4uyOadbmAa4A HqboF02VIcVFfdDk4UN9z0tVSWd/FHYuu7ca8050YGuvv/+/1ZfUTEtC n8zFEKDleyj6Be73Dj99I+ZLab/xIZwK10BcjsgR0mQ3vofr1N/zzWKE dLU= pt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZJXH8zJNe7x5tn7Pnj4d4vjn2lXZqhgh8c3zB2FXhE8hgjDviW7KydkS +nPICrJ+ELJrfTLLhGyGzT+2/MAFbqEQnHvI1GuOrSCQQpOvvVK5caBH iHME56xnJNtpIvQAUPbRxAxnhudkr1jdBEYMwnb4ViOdOIWE+NFcaov5 JsY= pt. 172800 IN NS ns.dns.br. pt. 172800 IN NS ns.dns.pt. pt. 172800 IN NS ns2.dns.pt. pt. 172800 IN NS ns2.nic.fr. pt. 172800 IN NS ns-pt.nlnetlabs.nl. pt. 172800 IN NS sns-pb.isc.org. pt. 172800 IN NS auth200.ns.uu.net. pt. 172800 IN NS auth210.ns.uu.net. pt. 86400 IN DS 18303 7 1 D071D44BF9DDF70449C5A6C37CADEB3EB3683C74 pt. 86400 IN DS 18303 7 2 B8174233B52988D1A3517C9EF970DF7DF4900B3B211BBF5A931C4FA0 6C907F6A ns.dns.pt. 172800 IN A 193.136.0.1 ns.dns.pt. 172800 IN AAAA 2001:690:a00:1016:905::1 ns2.dns.pt. 172800 IN A 193.136.2.226 ns2.dns.pt. 172800 IN AAAA 2001:690:a80:4001::100 ns01.fccn.pt. 172800 IN A 193.136.192.40 ns01.fccn.pt. 172800 IN AAAA 2001:690:a00:4001::200 ns02.fccn.pt. 172800 IN A 193.136.2.228 ns02.fccn.pt. 172800 IN AAAA 2001:690:a80:4001::200 ns03.fccn.pt. 172800 IN A 138.246.255.249 ns03.fccn.pt. 172800 IN AAAA 2001:4ca0:106:0:250:56ff:fea9:3fd phobos.fccn.pt. 172800 IN A 193.136.7.17 pw. 172800 IN NS ns1.nic.pw. pw. 172800 IN NS ns2.nic.pw. pw. 172800 IN NS ns3.nic.pw. pw. 172800 IN NS ns4.nic.pw. pw. 172800 IN NS ns5.nic.pw. pw. 86400 IN DS 26645 7 1 58EE332D303E2A64B7449C43AB770DAA1CA74C40 pw. 86400 IN DS 26645 7 2 7EF397EDF4D7CA228C0F5111F5E1696CDBF279C0B6AFA48FC7E71A12 E07E5880 pw. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z4YkvyhcALVNg/GVltQJcvRS2kt5tuk1+6SNiSEBLaCXMmy4Nwl2p3SP d/dGSBgyMlnXrpfx62LPtvKzQ7EKDacozkgAA+FsJolXcfNNbjRkTVU1 X7HGJRX7O5VeFSJCLK/4HVmOxWhbiIWcrnNJV/QBoU5TQBGznN6nKuhY iPM= pw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aphpVFVpHkAwBeAqgl6Nizyb3stxZcxzS+YFWnyVfaf5cnXzhKpYVLpp T+eKSjqCWpHgT604+M3arXWJ4Ejd8MpuWu5WOnZIj1iawWczjQMHIG2r I+2BG4HRM7MXOZ0SkNtWI5e99jni9MCvT8nFJu0FCF5Mn6CeEYmxE9bw NVk= pw. 86400 IN NSEC py. NS DS RRSIG NSEC ns1.nic.pw. 172800 IN A 194.169.218.12 ns1.nic.pw. 172800 IN AAAA 2001:67c:13cc::1:12 ns2.nic.pw. 172800 IN A 185.24.64.12 ns2.nic.pw. 172800 IN AAAA 2a04:2b00:13cc::1:12 ns3.nic.pw. 172800 IN A 194.169.218.13 ns3.nic.pw. 172800 IN AAAA 2001:67c:13cc::1:13 ns4.nic.pw. 172800 IN A 185.24.64.13 ns4.nic.pw. 172800 IN AAAA 2a04:2b00:13cc::1:13 ns5.nic.pw. 172800 IN A 194.0.2.2 ns5.nic.pw. 172800 IN AAAA 2001:678:5::2 py. 172800 IN NS ns.cnc.una.py. py. 172800 IN NS ns.dns.br. py. 172800 IN NS py.cctld.authdns.ripe.net. py. 172800 IN NS ns2.switch.ch. py. 172800 IN NS ns3.nic.mx. py. 172800 IN NS sce.cnc.una.py. py. 172800 IN NS auth00.ns.uu.net. py. 86400 IN NSEC qa. NS RRSIG NSEC py. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hn7AqgfTxgisgzQ8EP1h56FxSd0eixVq2U8ENRq2Q6qvWUKUWktWQOHS j4o1jHrpeUDFrCN29iqH4cO0PNnFyrQGpTy0qwdMLBPKGRXqKGLLyB0O DGDIFrjkn0UEKKcaCbNRQm7aaOrJBltjeXB1+itcXXMQyQKu/H7TDLt6 qRA= ns.cnc.una.py. 172800 IN A 200.10.228.132 sce.cnc.una.py. 172800 IN A 200.10.228.133 qa. 172800 IN NS a.registry.qa. qa. 172800 IN NS b.registry.qa. qa. 172800 IN NS c.registry.qa. qa. 172800 IN NS d.registry.qa. qa. 172800 IN NS e.registry.qa. qa. 172800 IN NS f.registry.qa. qa. 172800 IN NS g.registry.qa. qa. 172800 IN NS h.registry.qa. qa. 172800 IN NS i.registry.qa. qa. 172800 IN NS j.registry.qa. qa. 172800 IN NS k.registry.qa. qa. 86400 IN NSEC re. NS RRSIG NSEC qa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IrvPjCJCrpsDgs6XnBwC9HVKCmODQJR+uXaFqhEFZb+mJBPY4XOGhSLk nAUGxqZm5rrOOfc+UpP46q10v5aX1x//33UmymOJD9CwPz1x/R90OmGe MxStHoGC20vcfgj3bwtKDsZV8NGDj8AoK0Z0aa/I3rmB7rBWAdPQEajl 2JU= a.registry.qa. 172800 IN A 178.23.16.104 b.registry.qa. 172800 IN A 178.23.17.104 c.registry.qa. 172800 IN A 212.77.192.10 d.registry.qa. 172800 IN A 212.77.192.13 e.registry.qa. 172800 IN A 212.77.192.15 f.registry.qa. 172800 IN A 37.209.192.6 f.registry.qa. 172800 IN AAAA 2001:dcd:1::6 g.registry.qa. 172800 IN A 37.209.194.6 g.registry.qa. 172800 IN AAAA 2001:dcd:2::6 h.registry.qa. 172800 IN A 193.0.9.51 h.registry.qa. 172800 IN AAAA 2001:67c:e0::51 i.registry.qa. 172800 IN A 204.61.216.62 i.registry.qa. 172800 IN AAAA 2001:500:14:6062:ad::1 j.registry.qa. 172800 IN A 38.103.2.3 k.registry.qa. 172800 IN A 72.52.71.3 k.registry.qa. 172800 IN AAAA 2001:470:1a::3 re. 172800 IN NS d.ext.nic.fr. re. 172800 IN NS d.nic.fr. re. 172800 IN NS e.ext.nic.fr. re. 172800 IN NS f.ext.nic.fr. re. 172800 IN NS g.ext.nic.fr. re. 86400 IN DS 18007 8 2 91325EB53782EB94B7B6EA3B6FD5F05F86A0247858B160883AF01866 7101AA1A re. 86400 IN DS 27026 8 2 FC7F430D839FA81CE34FBBC3C687834184685E3312FA3284354B00AF F6C9F2D2 re. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . fVvLBn27fBia1aH4RB84Plqpl05ig3opakvlpFigq3CUFmhd100oQJL1 GbSgdZPqkKDjeATdxHFC3Du7e+ShIQA6bzMWQpe/nziKszwXM4aLcOas iP4+BQVdZ5D6fXZ0Roh5u+vMoc9TmN8xDfT7Ls8SJHw4OCtta3JdCvw1 c+g= re. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cMxQSeK73Wb5sR30OHpe5JjxdgFL2BbG+3VavDNKp+eLBqbpEHHwjYGe TjZPthvxohLMjDy8Y5DJM7OaEjNd2Cg+AP177gJozrnzNvItduCqDy1d 4+eQt1l2/V0B9Adc/E4fy6Mr+H2LZnK9SDP4/LIteOWfhI1IDdx/VC8m ZUw= re. 86400 IN NSEC recipes. NS DS RRSIG NSEC recipes. 172800 IN NS demand.beta.aridns.net.au. recipes. 172800 IN NS demand.alpha.aridns.net.au. recipes. 172800 IN NS demand.delta.aridns.net.au. recipes. 172800 IN NS demand.gamma.aridns.net.au. recipes. 86400 IN DS 7912 8 2 BD8F8D2BA244B97C11C8D26B8C5BCDA19294C5E2A1B21BF01D029F84 9F130D3B recipes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ZhW6TIuaSA35AEol0mPC/zHBs1HuBAv+RI6lRykzjWmSnHec+DjBNe0+ 7COlMrSRxSjPKbLEqlpRHZ03rnCmyaJ12ZA9PPTnFoi6I3/rDl5mdrk8 DvOltgRnYOqYuiN63C3HahdAsu6eUgMSqeAH9XhKP/JeFjj+Utsi7rvo bFk= recipes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ovcN8NsSi9fuaB8dlpdfyzFRnp20NEMYrQu+F6OWu4gq3VBUUKqyWSfj fqMNHeHjIx/bqqGsWCo/dxYkdObpSaozM9y9ZjftlyUxRGS+OkGwPrzk ZysCPIfIzCPNSJV3T9fPbz3eg29FhbJ4F2tBMYZQAJveftGVXKPYo7fI 9EY= recipes. 86400 IN NSEC red. NS DS RRSIG NSEC red. 172800 IN NS a0.nic.red. red. 172800 IN NS a2.nic.red. red. 172800 IN NS b0.nic.red. red. 172800 IN NS c0.nic.red. red. 86400 IN DS 20431 7 1 429A68CBBF8ACE08D911071D13FD47892B1EFEF7 red. 86400 IN DS 20431 7 2 7ED8016E603F6E4B0AEBDA756B01AAE19AE9C65D9A8DA32C1FD1CC74 BCE999F4 red. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dxgOMmfJ3E2nN6nigC297SKi2AIx9KeSC5AzOSV1e3djveHXbRswoW+D 5Q5FRsQHC2wAetqbQ60crjR++G/acO4qDr/SSAuEoFGq5dUMj02df8Sm MhlfnutqDbwMF3JXqSX3cdtwFcdyqPiAhWKlovKryeJhaImc3xbHqEzC XLY= red. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ig/J5acz+TQItg6OQNgwNue/fSOfe2QDZK3BvnTCa1vIMh5i7vbMMRBj h5HRL9Wuym5a+QQrM7j7BpsN4a4MPiIbsWH8OA7Lep6h9CXSP9w4Z4cU KlkWT27hJewdv6zVfXAIATb0M26ONmelUPFBjzJBrdl727Xpksvb6SqM a8M= red. 86400 IN NSEC repair. NS DS RRSIG NSEC a0.nic.red. 172800 IN A 65.22.36.25 a0.nic.red. 172800 IN AAAA 2a01:8840:26::25 a2.nic.red. 172800 IN A 65.22.39.25 a2.nic.red. 172800 IN AAAA 2a01:8840:29::25 b0.nic.red. 172800 IN A 65.22.37.25 b0.nic.red. 172800 IN AAAA 2a01:8840:27::25 c0.nic.red. 172800 IN A 65.22.38.25 c0.nic.red. 172800 IN AAAA 2a01:8840:28::25 repair. 172800 IN NS demand.beta.aridns.net.au. repair. 172800 IN NS demand.alpha.aridns.net.au. repair. 172800 IN NS demand.delta.aridns.net.au. repair. 172800 IN NS demand.gamma.aridns.net.au. repair. 86400 IN DS 28645 8 2 67D9F251132F0B9866A5CFDD96CB41D39C5634150852B2B20C4B876C 88726BFD repair. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vZ7xpyRxi7h91nk8W/jApIgLeDsetiChMcgiLFSSSg8Flt++wFNf4o0f HhbGsjHBXOBtJdkc1wxQvoZBdk8G5Xkjh4xzIX/xuoQst26L/QPWAf/W RWb4lWwLOG4NIsK4Sb6SXJtnSSwh7l23uMcdQWWQlUg45Tb0OxzczTBc ryM= repair. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bIEnbaTIezEnXfNDD7e2n3YCPXBqxqE+zJbR419agEvwE056MoK7HEhB G4zDkG1NmGD40niCtroeXUFx9clRloPoPvj5MzDAQdB2FLrWklJ5vKGD t4EWURYwhH49xoQsqmTD+/YlMvR7smxJNUNgHVXL1gtknUPnbiA1I3xY vmQ= repair. 86400 IN NSEC rich. NS DS RRSIG NSEC rich. 172800 IN NS a0.nic.rich. rich. 172800 IN NS a2.nic.rich. rich. 172800 IN NS b0.nic.rich. rich. 172800 IN NS c0.nic.rich. rich. 86400 IN DS 49764 7 1 75DDCB6A3233AD81CD65DF3138D299592937DA35 rich. 86400 IN DS 49764 7 2 AE19443051C6CBCBB411285F529394ECBAABCC764810B4D1117C76DB 6635F74B rich. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hpfzZJJz7mR6r98Qc0c172H+ebevdjT/ogUpWsaJfc3gYy+NE7FX+KU5 DtQw2uc8oNjrLbNGSUmCksDDsYK71LAO6LEu380Dn7MYvILlJqKZSpqW /KpncezSUuK05auO/E/B6sI35R7S/t4P32JCsP8lo0TVtv/nGiht28BA ZC4= rich. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . P9Dc8b2yvmStIoHBTltlo1sMsOh9zNHMrgzcmIdhBa7zpPxFgJyf/nxG i6rkZ1a+YodPDGAIXDJHNnWvUH3nU9zgabgm04aK+u4j+ddlwPkbFVH9 I75hKfBfmdp28IVxEFssGjY3aVJTnisl6ZyS3clUwwsc7hScLJJ35EkZ WPg= rich. 86400 IN NSEC ro. NS DS RRSIG NSEC a0.nic.rich. 172800 IN A 65.22.136.17 a0.nic.rich. 172800 IN AAAA 2a01:8840:86::17 a2.nic.rich. 172800 IN A 65.22.139.17 a2.nic.rich. 172800 IN AAAA 2a01:8840:89::17 b0.nic.rich. 172800 IN A 65.22.137.17 b0.nic.rich. 172800 IN AAAA 2a01:8840:87::17 c0.nic.rich. 172800 IN A 65.22.138.17 c0.nic.rich. 172800 IN AAAA 2a01:8840:88::17 ro. 86400 IN NSEC rs. NS RRSIG NSEC ro. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HBZzAE8DBuhPu4vpgV9xARyAcTmLnjI0G/Vx3lyvT4cvFLy3/MT9bvfw bikm9N7fXaUdWAsb7LyW3A2TLJ5KejhcGx4JhU3FBqn4ZKTLgh4IQX+3 LHBkjUhZlKq7TFgxhAjGjZp6ELTUArZBT4+38gkGPnQuGJH18Qa2wUhF v9o= ro. 172800 IN NS dns-at.rotld.ro. ro. 172800 IN NS dns-ro.denic.de. ro. 172800 IN NS ns-ext.isc.org. ro. 172800 IN NS primary.rotld.ro. ro. 172800 IN NS sec-dns-a.rotld.ro. ro. 172800 IN NS sec-dns-b.rotld.ro. dns-at.rotld.ro. 172800 IN A 78.104.145.6 dns-at.rotld.ro. 172800 IN AAAA 2001:628:453:bb::6 dns-md.rotld.ro. 172800 IN A 192.162.16.19 dns-md.rotld.ro. 172800 IN AAAA 2a03:5e80:0:4:192:162:16:19 primary.rotld.ro. 172800 IN A 192.162.16.18 primary.rotld.ro. 172800 IN AAAA 2a03:5e80:0:4:192:162:16:18 sec-dns-a.rotld.ro. 172800 IN A 192.162.16.20 sec-dns-a.rotld.ro. 172800 IN AAAA 2a03:5e80:0:4:192:162:16:20 sec-dns-b.rotld.ro. 172800 IN A 193.230.31.230 sec-dns-b.rotld.ro. 172800 IN AAAA 2a03:5e80:0:5:193:230:31:230 rs. 172800 IN NS a.nic.rs. rs. 172800 IN NS b.nic.rs. rs. 172800 IN NS d.nic.rs. rs. 172800 IN NS f.nic.rs. rs. 172800 IN NS g.nic.rs. rs. 172800 IN NS h.nic.rs. rs. 172800 IN NS k.nic.rs. rs. 172800 IN NS l.nic.rs. rs. 86400 IN NSEC ru. NS RRSIG NSEC rs. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . JJnmgEJDLsE/GLx6EK7k+qreyUb+kbgYlQOb+E0q4AVULeVndZ31eHx0 nqVrvZ7wVwZkEI8FSyE9VydncBspZzEj3jxjNGATINF6zR4FGMcDyRsH naidZXiFqzcqGttcJU8NFBm4/Myncnk8QnTMMcaaXBSHnRoRnY/3UbsC GgE= a.nic.rs. 172800 IN A 91.199.17.59 b.nic.rs. 172800 IN A 195.178.32.2 d.nic.rs. 172800 IN A 193.0.9.107 d.nic.rs. 172800 IN AAAA 2001:67c:e0::107 f.nic.rs. 172800 IN A 204.61.216.32 f.nic.rs. 172800 IN AAAA 2001:500:14:6032:ad::1 g.nic.rs. 172800 IN A 147.91.8.6 h.nic.rs. 172800 IN A 91.199.17.60 k.nic.rs. 172800 IN A 192.5.4.1 k.nic.rs. 172800 IN AAAA 2001:500:2e::1 l.nic.rs. 172800 IN A 194.146.106.114 l.nic.rs. 172800 IN AAAA 2001:67c:1010:29::53 ru. 172800 IN NS a.dns.ripn.net. ru. 172800 IN NS b.dns.ripn.net. ru. 172800 IN NS d.dns.ripn.net. ru. 172800 IN NS e.dns.ripn.net. ru. 172800 IN NS f.dns.ripn.net. ru. 86400 IN DS 51272 8 2 13ECAF18251EEC90C6BC8F16E2730F1F597F6D7E406C4A8FF1D4FD7D 760D6EEE ru. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . RzmMo5+w+hJdAkt1sUKLQlGDKSxFL1RyMsQh3t+eEBIV6ERAsT97mdGf yrdIB/j2E1I40PuEd9jTQ5lmNFZjn8W/6dGjf2JarIuFQqtarGrZZ/4i 7qv6PFDf02IpVJj8CHQXcP4+Z6iDbw4vAtIoW2/xVUd50GLCk9EQ43IX UbI= ru. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nI934VZxT7/5sMcdHHT2X4Uav7UhW1FnMU6F1BoJxLUyt1YkTADwkusR K+lWU/zlddwDst71B4bIPyi7UoGcz6L8QKkIwQDMwcnhNfnsxSbM6IDU BlStftZg7OpRE2nZARQGpibfjvHwun4hRv0VhPJFFFz4MmNc/I5m9o7W f4I= ru. 86400 IN NSEC ruhr. NS DS RRSIG NSEC ruhr. 172800 IN NS anycast9.irondns.net. ruhr. 172800 IN NS anycast10.irondns.net. ruhr. 172800 IN NS anycast23.irondns.net. ruhr. 172800 IN NS anycast24.irondns.net. ruhr. 86400 IN DS 25131 10 2 EC453960C396742EFA2EF815FA9C9DBA146E838F86F11643704C1630 424F4E78 ruhr. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . funFkYtJkRcoZNBypV35MBnf5VbqGKkNsLzPqXz303T5BSRBIw7ASbdl 0z7NjqybUnGW2W4ZiGRKHZTZBGwvY33lYwwkcOVOGsER371j3mF/ibmQ ca3qrd3WQXLw52CFKj+lF1I0ziaewVNC6gFUP6ikKJrOem7pRmUF4H88 KNw= ruhr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rTA+Nn7DTKiGNh6M27R+ldKkLb7g7ISXaqxYNfJqAAplwZ/JxTA6Wlr8 PbpD+3BvnuBtjZy0VKyeufzSmYTARb8da8GF0LNeet0mEywRQqAYqVPF kwte6FwvF5kW8vFlQ4imI+wVtiTvjxihP/UjXB+d6wfMvhpaJgtQSh8b YSM= ruhr. 86400 IN NSEC rw. NS DS RRSIG NSEC rw. 172800 IN NS ns1.ricta.org.rw. rw. 172800 IN NS fork.sth.dnsnode.net. rw. 172800 IN NS ns-rw.afrinic.net. rw. 172800 IN NS sns-pb.isc.org. rw. 86400 IN NSEC sa. NS RRSIG NSEC rw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bP/U1XBogiJKhRHNjHcTL9YuL069ZOECO9WM1vb6wi/plOpbwBQS2rT1 EcjlOThFdeOhels2vQv4hgDGPIHJeD5BenBsKGTb7FxSsOrFd8c5wOX3 BseqEfk9FUcRtTk5QeqD6kgRTkglLiFuPBTETmJjfrRsv7M1nceH8EQg 98Y= ns1.ricta.org.rw. 172800 IN A 41.74.173.250 sa. 172800 IN NS sa.cctld.authdns.ripe.net. sa. 172800 IN NS ns1.isu.net.sa. sa. 172800 IN NS ns1.nic.net.sa. sa. 172800 IN NS ns2.nic.net.sa. sa. 172800 IN NS rip.psg.com. sa. 172800 IN NS sa-ns.anycast.pch.net. sa. 86400 IN NSEC sb. NS RRSIG NSEC sa. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ts5sSPtr/Q7Iyh+T4nZA24EDij/KqAAB0b7wJVQt8LGCMKKNWJZ3eYJZ Mqc2XbvgTJ4W3YSE2J3+Wuc5kYbfUwWFoQic4ccTU33nDu2zWvlr2OFb 3KgnBee4sIkMBKKhXAIPx7wA93VftCthX28yHMAxB3ZejSkgHZS7UHGD 6gw= ns1.isu.net.sa. 172800 IN A 212.26.18.3 ns1.isu.net.sa. 172800 IN AAAA 2001:1490:0:800::3 ns1.nic.net.sa. 172800 IN A 86.111.192.9 ns1.nic.net.sa. 172800 IN AAAA 2001:67c:130:410::9 ns2.nic.net.sa. 172800 IN A 86.111.196.9 ns2.nic.net.sa. 172800 IN AAAA 2001:67c:130:10::9 sb. 172800 IN NS pch.nic.sb. sb. 172800 IN NS sb1.dyntld.net. sb. 172800 IN NS sb3.dyntld.net. sb. 172800 IN NS sns-pb.isc.org. sb. 86400 IN DS 17635 8 2 27F59686A15B09DC8293FAC9C31E5BE51ABF214E1E9CD5B21CBE50F0 F311C780 sb. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vDvgsfo67nxrLHsbC3gIzBLW+UK3Ij9I+sss8OVuF0u/Ny5MYGiRnqyj vepY18xSpOmUJCY011UKwor0y1cN6gYctVC2l8jdoHkhH6lgu+wIEXO8 1XozUhFmQs/aDeKro2ioHByd5d/4ZGToYPxUVmJhGAy6aLWyxFQm3sCg RGo= sb. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . N4lHTFzrjDx7aSpxfYgY+xIJDwauE9B6jgwSc3nV6NY4AKBGpsjG5rj1 BvxTy1QAwPwvaTmG1rTtPU+g3xCg9U1ZCv3HkYmyERM3sNmuIxwweGzc VpnHWBiWrV7eBwEQ11O9ihuYQZnFqHOKUgYOWgpr6JXeiDZGjCpJJMBC FRs= sb. 86400 IN NSEC sc. NS DS RRSIG NSEC pch.nic.sb. 172800 IN A 204.61.216.31 pch.nic.sb. 172800 IN AAAA 2001:500:14:6031:ad::1 sc. 172800 IN NS a0.cctld.afilias-nst.info. sc. 172800 IN NS a2.cctld.afilias-nst.info. sc. 172800 IN NS b0.cctld.afilias-nst.org. sc. 172800 IN NS b2.cctld.afilias-nst.org. sc. 172800 IN NS c0.cctld.afilias-nst.info. sc. 172800 IN NS d0.cctld.afilias-nst.org. sc. 172800 IN NS ns1.nic.sc. sc. 86400 IN DS 32953 7 1 2989C1B61462537A50928B77A85E2AD373C50B66 sc. 86400 IN DS 32953 7 2 E85C14114B092BF9D0B21C804CA878618BEE750ED714092180D59A20 01C3708C sc. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . laT8WpRsyBG6aKF4zBqI+EWl4wLiX0ZmcrZoFeQ94EaAWFwSqEyE3Tde 4Udo1CNRloGReZzGFAJfERYSm8/dP3nOiOIx/riKrwBpEYCk/5IRGRt6 cq9jgN6eYi2xy1GURfercK3yH2xSjsYbbZwVAeEr9SQdn7VecMdZMTbR 47U= sc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . IyMdjeqzmAasVSlhUwx5KQcuQ53SdJVqv8JW5POI9avYqwuL+s0Ecr93 4yEtU+sSll9wTG6Z4UfBOJYftvs243dani/CIX+M0VD61LVvPXoBygK8 EfTNmkiLWmxmyI57teT8L2TVov7oCCaI+9M/cpaxAKeswm5zK4KoEyhY WSw= sc. 86400 IN NSEC sd. NS DS RRSIG NSEC ns1.nic.sc. 172800 IN A 41.191.121.129 sd. 172800 IN NS sd.cctld.authdns.ripe.net. sd. 172800 IN NS ns1.coza.net.za. sd. 172800 IN NS ns1.uaenic.ae. sd. 172800 IN NS ns2.uaenic.ae. sd. 172800 IN NS ans1.sis.sd. sd. 172800 IN NS ans1.canar.sd. sd. 172800 IN NS ans2.canar.sd. sd. 172800 IN NS ns-sd.afrinic.net. sd. 86400 IN NSEC se. NS RRSIG NSEC sd. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WIYHoS2jU8WcRiNfECnnRrQKRNJFWOryV5mPH3KaTZOqprSVhkjUm6Rs GTaCtmlW9Z8nYmiMIS/z4m0ZGYTeHORYZEA8LQRPYGV2XCPsI4lP42UN ZvA8zqhJZzusC1Lq0BxAV47EWkRj6OaQUA+V/N5GL+NASPW9L3CveuxT ezk= ans1.canar.sd. 172800 IN A 196.29.180.14 ans2.canar.sd. 172800 IN A 196.29.164.14 ans1.sis.sd. 172800 IN A 196.29.166.134 se. 86400 IN NSEC sexy. NS DS RRSIG NSEC se. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SIyfdL+Qn3X0l4YyrMWTopOtyyU7CjarXRmw21zaCIvSgs2JBZM/Cp5J d4NJRgiDJlYllMZlWuqOpGWPYLTINrXWECzvztkg01c3NDEKx6QfwXLz 2P6lTeVDmrRlRForkAGFaetAF6K+GLgEg3ghnef+HplPaUdDm4ZX2S8w LMY= se. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vOxbhZ0xRPzXD87H1fp50Zq4bvDlOQhyoy4FCoYPt/1k+W2X6p4NuHWv WhdFl3yOqVWxRF6UX8oDYss3fJbUddrgh9GD05Js3NQQwmR1XLrQsoXO oovdlbRoJjWeGols3gpQHcnhbub+AZVyes5785hLvY1U7UytyUnkW54D PQs= se. 172800 IN NS a.ns.se. se. 172800 IN NS b.ns.se. se. 172800 IN NS c.ns.se. se. 172800 IN NS d.ns.se. se. 172800 IN NS e.ns.se. se. 172800 IN NS f.ns.se. se. 172800 IN NS g.ns.se. se. 172800 IN NS i.ns.se. se. 172800 IN NS j.ns.se. se. 86400 IN DS 59747 5 2 44388B3DE9A22CAFA8A12883F60A0F984472D0DFEF0F63ED59A29BE0 18658B28 a.ns.se. 172800 IN A 192.36.144.107 a.ns.se. 172800 IN AAAA 2a01:3f0:0:301::53 b.ns.se. 172800 IN A 192.36.133.107 b.ns.se. 172800 IN AAAA 2001:67c:254c:301::53 c.ns.se. 172800 IN A 192.36.135.107 c.ns.se. 172800 IN AAAA 2001:67c:2554:301::53 d.ns.se. 172800 IN A 81.228.8.16 e.ns.se. 172800 IN A 81.228.10.57 f.ns.se. 172800 IN A 192.71.53.53 f.ns.se. 172800 IN AAAA 2a01:3f0:0:305::53 g.ns.se. 172800 IN A 130.239.5.114 g.ns.se. 172800 IN AAAA 2001:6b0:e:3::1 i.ns.se. 172800 IN A 194.146.106.22 i.ns.se. 172800 IN AAAA 2001:67c:1010:5::53 j.ns.se. 172800 IN A 199.254.63.1 j.ns.se. 172800 IN AAAA 2001:500:2c::1 sunic.sunet.se. 172800 IN A 192.36.125.2 sunic.sunet.se. 172800 IN AAAA 2001:6b0:7::2 sexy. 172800 IN NS a.ns.uniregistry.net. sexy. 172800 IN NS tld.isc-sns.com. sexy. 172800 IN NS tld.isc-sns.net. sexy. 172800 IN NS tld.isc-sns.info. sexy. 86400 IN DS 60556 5 1 4FF0D3A66811E7DB90CD072F2A042EA0C5F03730 sexy. 86400 IN DS 60556 5 2 FD746B08B105315B2FE64FB8863BE05DAC75AEB0DFFA84567D1CFD2A 621657A4 sexy. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . LyCImEGi0YZek7aRqO2d7AeaLTk573SeVsSEZgYEchs1vPaZ/Et5IFZv hGBMUt1/QjrzNGXtoZb2aspjHU813EoeBuWX61WCisB7tbBTvuvKcSSa 8y8LrmNHUO5ni3krE0tcmNvZn3Rg+x3Orl9eCQPkNzOwtwhl4YVfctrs Idk= sexy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vrjDWKPVEPp/BxkxtTyDEEGKrFOf3j10rSd00GcXBS4XveCuBRKuei7u ks+nM2pyGtNSc3caRmi5ZzvXW27dUZgbNL5hf3eNMpahpIiIUjRKFXzc 5daAPyNuPwsCBYEWVToEwvqXJx8ecWBnaZ1XSDn7lh7eHD/YCbXNaSoY NnU= sexy. 86400 IN NSEC sg. NS DS RRSIG NSEC sg. 172800 IN NS ns2.cuhk.edu.hk. sg. 172800 IN NS sec3.apnic.net. sg. 172800 IN NS dsany.sgnic.sg. sg. 172800 IN NS sg-ns.anycast.pch.net. sg. 86400 IN NSEC sh. NS RRSIG NSEC sg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zpy7bFBISqK7pQu43nwD6YpJZnCnhHw4tMvZ6S9S5qsatQFaGawXQmFy uGj7CFlzLXKrVyX1J2LgswN2A65mv78RVx8KB2ucOOVem1HRrlzsyqOL Y7o/vtRuL6hmJX75BGTZukqRUHT1o8i1ICBzdz2A3R1j9p586fSqKDqZ C88= dsany.sgnic.sg. 172800 IN A 194.0.1.16 dsany.sgnic.sg. 172800 IN AAAA 2001:678:4::10 sh. 172800 IN NS a.nic.sh. sh. 172800 IN NS a.ns13.net. sh. 172800 IN NS b.nic.ac. sh. 172800 IN NS b.nic.io. sh. 172800 IN NS b.ns13.net. sh. 172800 IN NS ns1.communitydns.net. sh. 172800 IN NS ns3.icb.co.uk. sh. 86400 IN DS 3846 7 1 8E142703EAEABD49F84213E72015350CD3D28DF5 sh. 86400 IN DS 3846 7 2 493B17DB412EBBA011AF0E596F2424B25C9379A9960586FFC9A2FB77 4536DE66 sh. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . vti8aGHFVjdFH8TopQpeo8NWpGVg5nEARETmrGNMu0+VwYXiB/e6o2kQ m2MSXWF5JdXXgTXcG09YbZB0Z6C4aXkHZg7/+L3oxauTqhhJT9cpxZnr gGmViIaJeAiMQlIWf3rljvpnvxocijQ7GmiO8NedtdCvWwlpHpGZ20zC G7M= sh. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . eqK1FGF/LCLyvQUPQQZi06012lVqjPpKoSnYYKCqw5M35o9T7QlRnyEk uUPRmM11llTMZjzIqpn8DS0wBIqXy5WfXZreXA1Xi0U0itRIWD+mSz3k k2FpYKHpfpPPBr1/zoHDQIe5po4ImmoQSkfw4h0fmKS6CBxMll8Yrizl x3I= sh. 86400 IN NSEC shiksha. NS DS RRSIG NSEC a.nic.sh. 172800 IN A 64.251.31.178 shiksha. 172800 IN NS a0.nic.shiksha. shiksha. 172800 IN NS a2.nic.shiksha. shiksha. 172800 IN NS b0.nic.shiksha. shiksha. 172800 IN NS c0.nic.shiksha. shiksha. 86400 IN DS 19339 7 1 A8F93C5CA81D7F38880F12CAD5D43F8BC522747C shiksha. 86400 IN DS 19339 7 2 CCDBBE400E7FCE7C2CAF32B1315D1CDF09289E69988ABD89A9E0A428 0D0752AD shiksha. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . doIix2tTk6YCAzFFi8ixO0vYxNgKaRwvQ6f5LmczNfd2k2fDG8lm7vtU 8F7GyvpdMdJeAKtWM7XcNy7ay3S08XZ8DvTUL+GoctygR+9yGISsbOK3 q1ByoyWl5PnUh/dlVKUUK6hlhh3P83qgIDJk/9opE4g62hcQLLgH9euX Os8= shiksha. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iuNTXaoZNtZTZ0yCUQy7qxGgwsbztUu56MxfeqdFdjEdhFOMYB+Um1gu BeVL7j9jsr3oYXdb4mGzFwWWhwvji7xiqiidMZXk4uDSx2962cjkHpua 4Q/jIoH0yeWyje6P2okS5kZFq71/fV6APnNdA1/mueX+DsgN/afwChqP RMI= shiksha. 86400 IN NSEC shoes. NS DS RRSIG NSEC a0.nic.shiksha. 172800 IN A 65.22.32.33 a0.nic.shiksha. 172800 IN AAAA 2a01:8840:22::33 a2.nic.shiksha. 172800 IN A 65.22.35.33 a2.nic.shiksha. 172800 IN AAAA 2a01:8840:25::33 b0.nic.shiksha. 172800 IN A 65.22.33.33 b0.nic.shiksha. 172800 IN AAAA 2a01:8840:23::33 c0.nic.shiksha. 172800 IN A 65.22.34.33 c0.nic.shiksha. 172800 IN AAAA 2a01:8840:24::33 shoes. 172800 IN NS demand.beta.aridns.net.au. shoes. 172800 IN NS demand.alpha.aridns.net.au. shoes. 172800 IN NS demand.delta.aridns.net.au. shoes. 172800 IN NS demand.gamma.aridns.net.au. shoes. 86400 IN DS 48574 8 2 FFCCEBC433B0B008AB8D3113A3B009D9F399CA666883CCA43D43699C 60AA7E61 shoes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WyJbKGOtE7GsKybHqYPsb4OvQgFJ2743xQuMKtbWsKvyb7LY9zL1H8+L JIDSB0lnfsbcWUwFfOfggQtU9jiNWJ0NaUIMvvoLt6NPQQ/Xw5oJzIXK APwzlTYOb9lmATQKTEszGIVBEz54WjMCVrMSKEDPyiZ7EwWdBZDqrj5/ J30= shoes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . afXXRy29svIUh34pSOlU/HDEYt34zlUAzG5CJfE6tHoo57i0NqzdTS/N 5XseYIxzb6AOQ8YbBX9qOhn0IB9CYyrrZ+uxB6QIoDXAzx0MIVMUxx1Q 2aDZy8819vSRpKIFuu8tTjuS3Hah+OA3VKOp+A8pIrgqFjdCEFlzWyhs FKs= shoes. 86400 IN NSEC si. NS DS RRSIG NSEC si. 86400 IN NSEC singles. NS DS RRSIG NSEC si. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cL66vq9S2CUn9Cdztw1FoPeHEVg+tzu1bF7tK0jKSywmfNGAzadYYpjY Cqodj2qFixXyyw8zQ2gFa3So9iTh5qb1FMDGhMe/rMnhmpbItC5BaZTD fnRFjUymvFqyAk5cEqaN0WrzYkNrSIX0dw73T6P2ZdTAw9zNrRUxO9WY T+U= si. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tVU/MtvkDOmlWx0R11d8CVaZ8oX1PsU4YISF7/IR6ggGp4CjOeu0Gsxe pzdF+4QsyiJbbnYhJD7uW3YuPhFWSXTKAPLNDgrJLCNwPZnVJGJxLqxh JCPYaPhTHRCIhYsKUSljulXvnvR48JpaQG0ASNIN/Ks+K97rQ9GGdDce fUI= si. 172800 IN NS b.dns.si. si. 172800 IN NS c.dns.si. si. 172800 IN NS d.dns.si. si. 172800 IN NS e.dns.si. si. 172800 IN NS f.dns.si. si. 172800 IN NS g.dns.si. si. 172800 IN NS h.dns.si. si. 172800 IN NS sss.dns.si. si. 86400 IN DS 17770 8 1 7BF07EAD2EBA601C72225CD05C26A8F0A3B37600 si. 86400 IN DS 17770 8 2 306AEC05741E1F03BD3B8DD5B4503F338EFF7F8A5F61D9F6EC19A7FB 9DE65FB2 ns2.arnes.si. 172800 IN A 193.2.1.91 ns2.arnes.si. 172800 IN AAAA 2001:1470:8000::91 b.dns.si. 172800 IN A 193.2.1.91 b.dns.si. 172800 IN AAAA 2001:1470:8000::91 c.dns.si. 172800 IN A 192.93.0.4 c.dns.si. 172800 IN AAAA 2001:660:3005:1::1:2 d.dns.si. 172800 IN A 130.59.1.30 d.dns.si. 172800 IN A 130.59.10.30 d.dns.si. 172800 IN AAAA 2001:620::1 e.dns.si. 172800 IN A 63.243.194.3 e.dns.si. 172800 IN AAAA 2001:5a0:10::3 f.dns.si. 172800 IN A 194.146.106.62 f.dns.si. 172800 IN AAAA 2001:67c:1010:15::53 g.dns.si. 172800 IN A 194.0.1.20 g.dns.si. 172800 IN AAAA 2001:678:4::14 h.dns.si. 172800 IN A 204.61.216.54 h.dns.si. 172800 IN AAAA 2001:500:14:6054:ad::1 sss.dns.si. 172800 IN A 81.91.161.101 singles. 172800 IN NS demand.beta.aridns.net.au. singles. 172800 IN NS demand.alpha.aridns.net.au. singles. 172800 IN NS demand.delta.aridns.net.au. singles. 172800 IN NS demand.gamma.aridns.net.au. singles. 86400 IN DS 12355 8 2 639127B308DF1CA7A0F1CF1876BA0F72668A75E5816BEF29D256BF54 E47A3D8E singles. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . iU6PpNfWR8pDWNQqfFEVyDYpBzir89iUSfV8SEGukJUQTM0BpDqBUZ24 q8pEmWGjbnGYWBgMSMuuRjL5REohieERMwPSV5Xo7l1sF/tl8mACUrS8 6tivcAl9BId3N8wsjaJLLhsC9yB7D3+ZsIxmOKBToZ++SO6N9pxEVNH5 SL0= singles. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Re8zF5TDD9RadP3OgDI/fEh0xJvcE78sQDpEUgAcZnlQZDP2UhbcTEIh vUp7me8asvMSzBrwuDlJvW7/IO9n9VYg5qOVJ2lC1gLpd0fvP8OknrDj qTxTIpGNEwaJ0dU9ppcXKzQz3HOCXHRKx3sviwWgOGQ+SXugcP1Q8Mv1 1nI= singles. 86400 IN NSEC sj. NS DS RRSIG NSEC sj. 172800 IN NS nn.uninett.no. sj. 172800 IN NS nac.no. sj. 172800 IN NS server.nordu.net. sj. 86400 IN NSEC sk. NS RRSIG NSEC sj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . McE2+LKa9rlSU+r030POm0jyBq+GMNvWW40p0QSnGaX+xoSOm2p+47PX t9A/s1nG7dAAv1OYv7VVddr62hq14ofuvHhi4P9MyM7Tca0wy4aUVxu5 iHxNOvSAXkKZLkPqXmbjsP4IULmBELwOByyFUeVSRnRMmlfSmqCCGpIm pRw= sk. 172800 IN NS a.tld.sk. sk. 172800 IN NS c.tld.sk. sk. 172800 IN NS ns.eunet.sk. sk. 172800 IN NS ns.sk-nic.sk. sk. 172800 IN NS ns1.sk-nic.sk. sk. 172800 IN NS ns3.sk-nic.sk. sk. 172800 IN NS sns-pb.isc.org. sk. 86400 IN NSEC sl. NS RRSIG NSEC sk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . h2DeV4A8BZOW3IgdHPIiiqg25zxqjLw/APGU7ttU3cJm8MD0EutcafUc ACrn/YF3ZYefqiPJRa9frR/yo0u2XySJ9XsZtRYCX8U9+NQTAUl2Nwtv wiZXsvGjCUOuVD5RAOSG5G3S6n9B6lBuHi1+b9Js6/tLi4TLrBiqK2pt QLo= ns.eunet.sk. 172800 IN A 217.75.73.242 ns.sk-nic.sk. 172800 IN A 195.12.159.2 ns1.sk-nic.sk. 172800 IN A 195.12.159.3 ns3.sk-nic.sk. 172800 IN A 217.75.67.234 a.tld.sk. 172800 IN A 194.0.45.1 a.tld.sk. 172800 IN AAAA 2001:678:70::1 c.tld.sk. 172800 IN A 217.75.72.157 c.tld.sk. 172800 IN AAAA 2a02:770:100:100::101 sl. 172800 IN NS ns1.neoip.com. sl. 172800 IN NS ns2.neoip.com. sl. 86400 IN NSEC sm. NS RRSIG NSEC sl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Dtn4nx3+J72el/sBzYT/F9vCkhMe9vz9jW4tCygZxOFNM+Gm6jL/oCn8 L/qG0Nyk/DZo1WxarUtpVD4EnOs3xL1p/cPjygrv7/Ri32N/NDopg1fA A9PxYux096n/SKCeMB3AuvzDJyPfQEtShw8Sd4ft80rYo25cC8UPEd43 UDQ= sm. 172800 IN NS sm.cctld.authdns.ripe.net. sm. 172800 IN NS dns.omniway.sm. sm. 172800 IN NS dns.intelcom.sm. sm. 172800 IN NS ns3.telecomitalia.sm. sm. 86400 IN NSEC sn. NS RRSIG NSEC sm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Au9SNw0yYZ36jxc6NPeMNO78RyWISKqqEe4DwnMefuH8IEiP/7MDRGPO wWhQhRRpnNkHih2seecboTxEcM6p4/QMsSElPfTmBGaZ6VlJLeaxXeA8 cQwgsbAOf8kK05H26gkGLcz4760IHzWHF5F/rgw+SSGd1/ijn2N6M8jL GqA= dns.intelcom.sm. 172800 IN A 194.183.64.11 dns.omniway.sm. 172800 IN A 194.183.64.10 ns3.telecomitalia.sm. 172800 IN A 194.0.27.12 ns3.telecomitalia.sm. 172800 IN AAAA 2001:678:28:0:c2:b7:40:12 sn. 172800 IN NS ns.ucad.sn. sn. 172800 IN NS sn.cctld.authdns.ripe.net. sn. 172800 IN NS ns1.ird.fr. sn. 172800 IN NS ns1.sonatel.sn. sn. 172800 IN NS ns3.nic.fr. sn. 86400 IN NSEC so. NS RRSIG NSEC sn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . HQi+cs9sAPTZ3keDVDCXtyqkqH3yJxTydMLjb2TeT96JjtkYbI7gkokK n2Fo4X7vTIRKT+5exhCXjHOnDJu7f47peCDz6B/dnyGxinstZyCMm5di 11Unc7mzWoAU0+jZZjezcdwlJ8FVevFGPRJ7m94Q5GvI0H7uMXrzZkX8 BSM= ns1.sonatel.sn. 172800 IN A 213.154.64.11 ns.ucad.sn. 172800 IN A 196.1.95.1 so. 172800 IN NS a.nic.so. so. 172800 IN NS b.nic.so. so. 172800 IN NS c.nic.so. so. 86400 IN NSEC social. NS RRSIG NSEC so. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tYHbZ2zVHTmPXBWVbQSrDCQn2H8myqk2go6tKzzHBtI1OC0osWQOc/ym 46x06GiUJWSd2T1kZ2RZKhv7fWK6pJhoiGUGopLcfNxjv2uarTatGE79 tr39XUJlCZ/t/z9Srf4BUqrDFF+vvNfiBxgXtqTDIoSiSKmsH7KbRYOK lD8= a.nic.so. 172800 IN A 72.52.71.4 a.nic.so. 172800 IN AAAA 2001:470:1a::4 b.nic.so. 172800 IN A 38.103.2.4 c.nic.so. 172800 IN A 63.243.194.4 c.nic.so. 172800 IN AAAA 2001:5a0:10::4 social. 172800 IN NS demand.beta.aridns.net.au. social. 172800 IN NS demand.alpha.aridns.net.au. social. 172800 IN NS demand.delta.aridns.net.au. social. 172800 IN NS demand.gamma.aridns.net.au. social. 86400 IN DS 1300 8 2 8A42E9D39037DF3605E4DD07BEEA497B9C181FF38AA148FB712DB03C 03BEA8AE social. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . EFqZlOS9iDMkiz/mKIYtUiYY8933Z9l/NJnFjE8i0FmzzdoNfePQVR5O jz8RstVTKE1WA9lWZ1i9C2TETvBQ+Oir+ToZAfQvQpNqAkdO83u8RhI3 GR5HIeFD+qc5fl3UoP57gVgDm4CKqSCqb8B7vUmkgPI1thkvBV8mjlgu TCk= social. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sD3oP0eUG6iOwiNdSrGgOfmlngT12dFYOaIvQC+t74Mdy0aJ2j2CDgYd hzYSB1aeNb/nD7MRd8pp49wo7PoOAoxRZT6FOaQQkNECNQ0GGG+DvAMw +Bg1dyW9JOc3oEuQV9bx5eZ6Obqc0NHKdq6ic15XImYaSElWK55QqYi4 SN4= social. 86400 IN NSEC solar. NS DS RRSIG NSEC solar. 172800 IN NS demand.beta.aridns.net.au. solar. 172800 IN NS demand.alpha.aridns.net.au. solar. 172800 IN NS demand.delta.aridns.net.au. solar. 172800 IN NS demand.gamma.aridns.net.au. solar. 86400 IN DS 6739 8 2 E72104FA55B919CFAC81D28277FE041BACA75957A0E530FC83827195 C5FF89DF solar. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . C+fTvbseN7usfvIZjzshTxET9znUO7nQGODI2Se2I3kec/J2KsyQSDBo 5BQtgrHCrGqihLTB73fshNntETx8G/2RJB5ToeK3Vs0+oe/eoSKDit89 rQ24GFeK+KOW0e+nk2mqW6I5tMYldcLDWCKfRuUIF2cuagDn83kVOcco WFY= solar. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cO3ybyZIwzNf/GZ7wcf+V+CN/sDB0FzkkrHmEKtxEmlzjZBuhDtxNH3S Yjx3rsnrH5UmbTkCArrOS5D/kVWHR+2G7XF293CY8T4yORJ/puLyzmHP 1ij1ZmFKQJu+79AGTLm6NoEIbPyX7JFn8Mm0JoaIgYpF2QRVXXSnh3as 3vw= solar. 86400 IN NSEC solutions. NS DS RRSIG NSEC solutions. 172800 IN NS demand.beta.aridns.net.au. solutions. 172800 IN NS demand.alpha.aridns.net.au. solutions. 172800 IN NS demand.delta.aridns.net.au. solutions. 172800 IN NS demand.gamma.aridns.net.au. solutions. 86400 IN DS 57742 8 2 6536350D40C0AA3DBF8A29604A2291F89966BFC74C363E99D7573388 5B8AAA49 solutions. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Qyun+pVBXwPksUWo26ZON3ovDVnHr+Y/wPYSRi4gTFlgmfM9cNYd86RJ aF3O8ezpe6GIVwl+lmRE/4SlnHR3Pb00Eh3knmtKdsLCBab2u6u0Fys+ LHAbK3B8nPTPXf2XWFwpmsZ8vPfZC61g89k2Uojbi9EtJ9uyXOF2WW1L 2Po= solutions. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K6uCDbMLb4youAa7oGNtp2eAxvJCB6e1NJdlFSaqpzS1rS6gRGdZ5m6o /4s5p+uxZSYaLyAGbA2D0+YsjRWEqYnvdqINQAwYWz+pMcFJptaeHNQR eLEFHiCQWWfS7kKbEyuChvbNsW/yJd/stf2yX7d3TvwfqwMLcjHSnw+b WU0= solutions. 86400 IN NSEC sr. NS DS RRSIG NSEC sr. 172800 IN NS ns1.sr.net. sr. 172800 IN NS ns2.sr.net. sr. 86400 IN NSEC st. NS RRSIG NSEC sr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kVtF5gUudIBbAMH4dfS6zQH3GQD4wxIJKPdAnuTPQCD7Rs9uwYBasVjR rKFnmeX6YOR5zmS1Z1jbpvMcaqQOXc/pSNCFMSbCR7GoxVx95dTnxwyg 7D/nWOz64SQckq23/za7m6eiVBA4kRG8ieFCfOO1wGxfrNVsbpXQ2Nug fIA= st. 172800 IN NS ns1.bahnhof.net. st. 172800 IN NS dns-au.st. st. 172800 IN NS dns-st.bahnhof.net. st. 172800 IN NS dns-us.st. st. 86400 IN NSEC su. NS RRSIG NSEC st. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fM8kV/MCnUBM84yY1E0rRX5msf4bBwK3b4FH2MdMOIGUyc/BFriyLo7M BwwXcrTj+VzCE0feH97R9KU91rpCI69t/c/mHH0wL6RKV7za7Rs6U7f6 WQrgTlWU+6U1kIhyjHbsz1H6et+6+YEDTEtSzfgpaCna1Q3g0Z9QO2l7 IBI= dns-au.st. 172800 IN A 119.252.188.97 dns-us.st. 172800 IN A 198.105.223.67 su. 86400 IN NSEC support. NS DS RRSIG NSEC su. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Xapn3Yc93rgEbIF9n83DcIU0SvdJTMZNVnS98223UI+sKM1jO3J5pyzY mU5DdJn+KCU9vYZmLt7ou1c6X0/RoRUNR4pbDZDlHgc+68/Yy39wC6qv A6Ztst+qCeb6PszryB8QALWxpyDvsfQA0Ts3IeTXOiXbqXHcSMRcSNae oTk= su. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . oPVO6MG2MW+Mj91eDDVAy0hUwFbakOMpm/A/sBOnT2dDRqzTkVBhh9Ze /wiazem4ifQlW3X0TekNHtyVxKTFgmOik1CqxincGgDEfdVGek5HSRc1 fs22w3htpQGd87EO9+aGQFDH43VCsCAeC4mQnldVsVb4vcoojcNhsakt ugo= su. 172800 IN NS a.dns.ripn.net. su. 172800 IN NS b.dns.ripn.net. su. 172800 IN NS d.dns.ripn.net. su. 172800 IN NS e.dns.ripn.net. su. 172800 IN NS f.dns.ripn.net. su. 86400 IN DS 16101 7 2 951F84877CC34730CCF3DBDB0692BBCDE8E41529A88CD1BDBFEE41D5 E629B284 ns.demos.su. 172800 IN A 194.87.0.8 ns.demos.su. 172800 IN A 194.87.0.9 support. 172800 IN NS demand.beta.aridns.net.au. support. 172800 IN NS demand.alpha.aridns.net.au. support. 172800 IN NS demand.delta.aridns.net.au. support. 172800 IN NS demand.gamma.aridns.net.au. support. 86400 IN DS 49741 8 2 07B35DA2B3CDC8457A2532E0893F20672414C797E96731377F7BB87B 3ED70AA5 support. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . O+0oZggOWjx+UK3sDGM1DhBQ+OsFmucCwj3yeozAL7ty4wPdpchGC9Sk EXZL2n11/iWt40VU7CDm/eSRk4tjURjE5x0Q+m6j5ckXLOaLvFdDS1XP NQFsma337tRgpu+1rFtCrl6DSZEHvQP1NOLLvS53c4vmRmwkr/bCh1O5 g0E= support. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . gfISGgQch+25macLUY+SlATrGeWIl8JUmLSTBe0UWWMR13MZReBtRZKH 24bcb24ko0Ga10LDRi12MqlBcI2G15yKknPGON+Cvp4balYedd5J9s1e KYrDDntYhgn+L936w50PGHOI5GKfZVWP4qRRJT7ctjtaWZ7MWDT5dhEz lQk= support. 86400 IN NSEC sv. NS DS RRSIG NSEC sv. 172800 IN NS ns.cr. sv. 172800 IN NS ns.uu.net. sv. 172800 IN NS ns.dns.br. sv. 172800 IN NS sv.cctld.authdns.ripe.net. sv. 172800 IN NS cir.red.sv. sv. 172800 IN NS auth02.ns.uu.net. sv. 86400 IN NSEC sx. NS RRSIG NSEC sv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . vQW0by87MS9nDhkK+jpjBVKaDm6d+7K/XxQ9XQI1e5R8cb6QHf3NvS6j areBLtSOrZzkB9xIWV0ln6gSXKvAGNcCOJczyWc6NpPiAGIuhmNTrztc 7L/63RwFJ/BjH3BqS+CTCasmVBvyctG5puHQAjzbtNlr4/hc4Zp6W8gN BuU= cir.red.sv. 172800 IN A 168.243.254.1 sx. 172800 IN NS a.ns.sx. sx. 172800 IN NS b.ns.sx. sx. 172800 IN NS c.ns.sx. sx. 86400 IN DS 59259 7 1 7D8C002AC87627953A66C8145C2EBBEB13B8AE64 sx. 86400 IN DS 59259 7 2 81CE2B07704CD91951A7AD5A7E88B4426AE57952AE9511521169800F EA137869 sx. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . lav3zqUAWmBC3umWmvBnoYGOIdaasAF3+G/0G45JYWdFkhqqkJxrm/mi /3Y+k8IF+bXwxX2vU+GNRcDkMiUBB6cZ1a9BfRQ4tffwLIvgONXMO+17 G3h6aX2Fs+Uziym8IoBbniiswl9zXH4wGsoXP1Wid2J9csPZz3hs78Rj yDc= sx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . U9W/A51eveH8UwCDFJ7VqtNncw0xzyF7Jyh4ZTReKaqrkOBFsMzyhwOs YNmFM3m1gH1g9pcfDsbV7hYoZwS59ZeWqwAB6VUEGhfnabb+fJTp5YkX Av3meCa6RcOzdar38wOpSil01UQTEFeO3cS/pUJ0hiAiXTooG1snXtBr nPI= sx. 86400 IN NSEC sy. NS DS RRSIG NSEC a.ns.sx. 172800 IN A 89.207.184.65 a.ns.sx. 172800 IN AAAA 2a02:2790::600d:deed b.ns.sx. 172800 IN A 80.92.90.160 c.ns.sx. 172800 IN A 192.95.19.109 sy. 172800 IN NS sy.cctld.authdns.ripe.net. sy. 172800 IN NS ns1.tld.sy. sy. 172800 IN NS ns2.tld.sy. sy. 172800 IN NS pch.anycast.tld.sy. sy. 86400 IN NSEC systems. NS RRSIG NSEC sy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . I61mqyz7cR3CSgi8vP7P26KvbGD603F0nDFLby+pPyCwRFesmLDvWjRA 0M1fZDbLhww7Kfmkr5UgLjPvq6GfuFj4v1Vl4LRYUCyQX51eqFEGuIX8 p2mO5s1HciC/Ldn0tj/lPVysCBM3XWKKz6fLZO65CYHRePNlcecnBGV/ UZY= pch.anycast.tld.sy. 172800 IN A 204.61.216.71 pch.anycast.tld.sy. 172800 IN AAAA 2001:500:14:6071:ad::1 ns1.tld.sy. 172800 IN A 82.137.200.85 ns2.tld.sy. 172800 IN A 82.137.192.145 systems. 172800 IN NS demand.beta.aridns.net.au. systems. 172800 IN NS demand.alpha.aridns.net.au. systems. 172800 IN NS demand.delta.aridns.net.au. systems. 172800 IN NS demand.gamma.aridns.net.au. systems. 86400 IN DS 25054 8 2 687ABBCE3773EEA70CF1434E34C2EEF2748BC0DD91A0F5C2416E7743 1F1C2651 systems. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . SP8YG4M84Nggb9DD9Whv5r4mYEGRKUfzzhErOVHo7eFxTfdNRsH+O0Iy NGfQLK/rEllEIPKMTP+s9f+/5aUW2OK2NKuvYQJNss0O6UxV9upVPIlJ RLbGPpV8TUbEqQ7WYPn8MWPDMTXd+KvDA0DHotiZfvNDbv4E3XZ6eH67 Gos= systems. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . LMjZPvaHn5mG8lur4TkupObp1F6uWr6LeE+JvlKNE3CQa08xbaeyl1SY MVWdTzHDmpLdFpdWIZ1sjQMui9dIjNqkOUTNPwzNOuaFFkaWl01HmBbr NY3pnMtjpyCtJqcBqA/z/ZCRJwWXgb0nPCB7U4cG/p2Q/KKqt3WifuvK Bes= systems. 86400 IN NSEC sz. NS DS RRSIG NSEC sz. 172800 IN NS sz.cctld.authdns.ripe.net. sz. 172800 IN NS ns1.sispa.org.sz. sz. 172800 IN NS rip.psg.com. sz. 86400 IN NSEC tattoo. NS RRSIG NSEC sz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RGtYHskNhf3hGK/PCrnn736nIpQ7r2zrl+pZsjHB3/6CfHHBg7FPYjJe 7NS8BTsZqqJAeAM6JHcp7oUTmF4KIU1g4eJQZSs/+455cl/0u/qKeoz3 15YSOIsDeyCfKZWj0BH3Yuu+hH8qJDZvKAKV3mH8L6M/22oHm3Poi70N fFI= ns1.sispa.org.sz. 172800 IN A 41.77.232.4 tattoo. 172800 IN NS a.ns.uniregistry.net. tattoo. 172800 IN NS tld.isc-sns.com. tattoo. 172800 IN NS tld.isc-sns.net. tattoo. 172800 IN NS tld.isc-sns.info. tattoo. 86400 IN DS 5393 5 1 AC153D753067B73F852FD617D6D658B2C13EBBAC tattoo. 86400 IN DS 5393 5 2 73BB10F1CEAA45E7896F1A38F8AF5DD7C08C26432BF52C7F47141364 F842ACD2 tattoo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . V3u2meUZpib4HkpkJwhd6Uk3pNqt3skLRGNIk1aPt6CJdlZL+sFl9tDd niQiu80K3G39jrTMqe3KuMaQG4N3F/FeGH69mFh7tffnttRO43u4xX+w WtRnvm76wN6sAdemHNczx736JduuuZeYfgPtYH/LUcrpktBs+mGxBDqu yFk= tattoo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ilXRmE3uolg6Ih8E/dPvDH6tarqqMHsIbpMejPnmvxcqL6t8vMHO0WNL e3v1HJ1MOMZG8wp7kJUyCvEXtZagU8biGDNpMjSfAmlKhIgX8DyJeZOH aDfHtncFsziAXSPgpSrv65lJ56pJ61U4pxsN6GxUwKvk5IKSJqtiprdU QDE= tattoo. 86400 IN NSEC tc. NS DS RRSIG NSEC tc. 172800 IN NS asia.zone.tc. tc. 172800 IN NS asia.zone.vg. tc. 172800 IN NS europe.zone.tc. tc. 172800 IN NS europe.zone.vg. tc. 172800 IN NS northamerica.zone.tc. tc. 86400 IN NSEC td. NS RRSIG NSEC tc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kOJrBQG1dGrgkpJyjBRNhBlz6Qp8BMq0fiwSuswoXYa2YvbkcKAq4kbh ph6CLp78j+hC/OmngvWL+N8rno1DiJ3VjnhYviU+33O8lIZu4dnEkqLj b33u7+HXjnhfsMmwNndzFqOH/8OpMgvT+tMI0MW7yFAo6+E9TfcFybjd fzg= asia.zone.tc. 172800 IN A 31.169.81.225 europe.zone.tc. 172800 IN A 77.79.104.225 northamerica.zone.tc. 172800 IN A 166.78.254.145 td. 172800 IN NS ns1.nic.td. td. 172800 IN NS ns-td.nic.fr. td. 172800 IN NS ns-td.afrinic.net. td. 86400 IN NSEC technology. NS RRSIG NSEC td. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WN1wX86jufXdB9h8+1X2Rt5bcla6mfwSWZ1A9mVAs3/ZNu6VQ1mJuz5i Ry6uKz6X5RQXyFPatoAMMk/jJcPHNrR9tP25i0MTMp2Yg3zapy7zn4gS 12AaiugG7hKoPMHEEQQ2/+YtvWk89E2a+izAntPEsav+JuYQym9kJbw6 TRk= ns1.nic.td. 172800 IN A 41.74.44.43 technology. 172800 IN NS demand.beta.aridns.net.au. technology. 172800 IN NS demand.alpha.aridns.net.au. technology. 172800 IN NS demand.delta.aridns.net.au. technology. 172800 IN NS demand.gamma.aridns.net.au. technology. 86400 IN DS 49744 8 2 C3BEEFBB8633323215C56E2B8401CAB71D335A8E146454099D394707 34D0630D technology. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BDm8p2bCLObb+kA5VBL+fD0t1v4gooupmLRZbK4rPJzhiK5ARigQ/EmI paDdk0fAOpbGl4WO0OfJ4Efpr+QbKeA8Im6jgdipELO7KRr08K2+nh4D 5lzg0aLbA5kWFpH13j58m4wItdkzSXIRfIoyAUtCtqD8o7rh6+ZOeaks aK0= technology. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ZO2aTNGv3wYy3FoNqwelYPwNvmPq41j1cV3VrPJsIlx+1ejZ9W76M9jy dEjPyTRxP9KHwmmS9UM3QvFVpmSZJL6+Bmq/kaCS9yWQSUeqt9bJM5OX yPk364RFiguxW60lcwghyw9T402leHp5euBqhYVfyFusNPRLPDrHOWwj AT8= technology. 86400 IN NSEC tel. NS DS RRSIG NSEC tel. 172800 IN NS a.dns.nic.tel. tel. 172800 IN NS b.dns.nic.tel. tel. 172800 IN NS c.dns.nic.tel. tel. 172800 IN NS d.dns.nic.tel. tel. 172800 IN NS e.dns.nic.tel. tel. 172800 IN NS f.dns.nic.tel. tel. 172800 IN NS g.dns.nic.tel. tel. 172800 IN NS h.dns.nic.tel. tel. 86400 IN NSEC tf. NS RRSIG NSEC tel. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . GARhTZnA/3TxT4sXXQbAqwMa2qRqLitb1fKcV5hE+6zVJZV3TQSj9K6f B+5zo7zgd3EUd365RhVGq/b+bf+IA6JMYRnhGUQUi9T5PgC+GjOQHZ3q nhiZUThE0atMrfUykWI3UcJrG2JzlelcTNBAmNEjOeJ8PCaceigzsNTV VlQ= a.dns.nic.tel. 172800 IN A 194.146.106.38 b.dns.nic.tel. 172800 IN A 192.36.144.116 c.dns.nic.tel. 172800 IN A 204.74.112.1 c.dns.nic.tel. 172800 IN AAAA 2001:502:d399::1 d.dns.nic.tel. 172800 IN A 204.74.113.1 e.dns.nic.tel. 172800 IN A 199.7.66.1 f.dns.nic.tel. 172800 IN A 199.7.67.1 f.dns.nic.tel. 172800 IN AAAA 2001:502:100e::1 g.dns.nic.tel. 172800 IN A 192.100.59.11 h.dns.nic.tel. 172800 IN A 198.133.199.11 tf. 172800 IN NS d.ext.nic.fr. tf. 172800 IN NS d.nic.fr. tf. 172800 IN NS e.ext.nic.fr. tf. 172800 IN NS f.ext.nic.fr. tf. 172800 IN NS g.ext.nic.fr. tf. 86400 IN DS 13684 8 2 0D4413F0F5685FD9144C7B7D6FCF6A0CAE6A806A3380164A1EE14FC0 232652F8 tf. 86400 IN DS 63746 8 2 C80A503F9A4594065684E1B4C6CD5C9AAACF855A9F3B4D9B4546970C 6C37C0E0 tf. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . HuGh/FV+yROfKgMBRk9Ywg/aLXjp/j05d32BuJwwQVR/tj9rB8eb/tYx rr8Ry6+/4waH7T8L/xVt0B0O4UHebVbljDHIJaGwS8i9LLnji8pHGrIW ikPEfNU06HQJouOY52gyYdiIBA7D/b5QndUIz95DrIvU9IBd6UpFDagI GEQ= tf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iTps/XFVVlH25BERHlqsysuIXSvFq+cMQPfipL+V03di6wWhBuOF3b1t qx1GMzjjG/JTisg5u5mJkFfYRa75bgE3ckl2Uh3sqCNwCmbAVKlA2n1r +MP/e6EJ2C0GilWardKWzjBTGjpRU49nGjO80oFlET3QbY3ZFVMa9qmy 3Zs= tf. 86400 IN NSEC tg. NS DS RRSIG NSEC tg. 172800 IN NS ns1.admin.net. tg. 172800 IN NS ns2.admin.net. tg. 172800 IN NS ns3.admin.net. tg. 172800 IN NS ns4.admin.net. tg. 172800 IN NS ns5.admin.net. tg. 172800 IN NS tld.cafe.tg. tg. 86400 IN NSEC th. NS RRSIG NSEC tg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mA8KgvvGQnumv4YnBCO4BLypjgtfx3n+hX1urRh8M1gG7xuW47dGrUIy UjRHUIjQQw7SZsidGL5dYFGuQtBFj8S63rdqmXmyOqdo3BG7p1rvqETY Z4+WQIPAjAjSj58rPoQRX0y5U3VhFn+z+/ug0SU/ATzzuBhz064nx9oW sBU= tld.cafe.tg. 172800 IN A 80.248.64.20 th. 172800 IN NS ns.thnic.net. th. 172800 IN NS th.cctld.authdns.ripe.net. th. 172800 IN NS ams.sns-pb.isc.org. th. 172800 IN NS dns1.thnic.co.th. th. 172800 IN NS ns-a.thnic.co.th. th. 172800 IN NS ns-e.thnic.co.th. th. 172800 IN NS sfba.sns-pb.isc.org. th. 86400 IN DS 37297 8 2 890C918B568A6E30BF3A54B88C6B5C1838B9137E849EB96581FF3683 8399C276 th. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . lL41U0FkRF/66lJGJvGji0Yy+zdgzl8ohNUDOHUTmPfuC6N9G5BQyo/Q ddE4VVlJYex/rH41JWLbr8zn/b9mH6FLpqWKeKJ9zAV6fZQzJiDLqhp4 CuhdiA0/kgpjlR4PJXWxNxlDahJauL52DCTWy+mNE0JTWnW/yZ9BiCub VGo= th. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tKUPpdpPPsZ5QA0+6XkXXeg6d4p8x4yvIRjoopyhyYh0wCP+t/F05U81 35CMbQeW9ufHgq/mIR8kCDwVITRrqIimq4fUsObD8VMuSuppHVA8s1yl ved3Emll/jx6e0iQ/9H4Z7d/h+RBCBSHUBRW10vStBwlXFY9+5HPWUnx KfY= th. 86400 IN NSEC tienda. NS DS RRSIG NSEC dns1.thnic.co.th. 172800 IN A 202.28.1.22 dns1.thnic.co.th. 172800 IN AAAA 2001:3c8:1209:1::22 ns-a.thnic.co.th. 172800 IN A 61.19.242.38 ns-e.thnic.co.th. 172800 IN A 194.0.1.28 ns-e.thnic.co.th. 172800 IN AAAA 2001:678:4::1c tienda. 172800 IN NS demand.beta.aridns.net.au. tienda. 172800 IN NS demand.alpha.aridns.net.au. tienda. 172800 IN NS demand.delta.aridns.net.au. tienda. 172800 IN NS demand.gamma.aridns.net.au. tienda. 86400 IN DS 58465 8 2 3609AECF68EF07474D2D9CFC9735DDA2365FBC3C6E4EBC01957E7903 E17467A2 tienda. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . He5JEvNfzEbqbYNY7CkJwvzwf+V/tby/pKhtxuNEpBCJy8ZSNsdcYuxN NVyM966RORzL7J+t7uFd2230pEv21/E8iKq9t7vq14VzThFXxqAA85Tp pXUz71tO5sL0QU2GQMWfPvsI7huTZNVA5F29SIckykd+yXdB7bxNrqfo PQo= tienda. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . avPW36rz86wzTFdcgM+zh3XwWw3a6LemrZZBMypQEKZHGr37Fe5NiQbW gc/32sr4+2daxIMDjd1nxj7wp1obHepdF2E/fMySmlx1EVLBIlTIrwd2 QGyAkzm55Z9pYz8i32uTfAOTzGEsrQAMCiDiePrCO+NqBtD7pKAOk8r9 QHI= tienda. 86400 IN NSEC tips. NS DS RRSIG NSEC tips. 172800 IN NS demand.beta.aridns.net.au. tips. 172800 IN NS demand.alpha.aridns.net.au. tips. 172800 IN NS demand.delta.aridns.net.au. tips. 172800 IN NS demand.gamma.aridns.net.au. tips. 86400 IN DS 55054 8 2 5083EDD4FF622CA53C15F91D62C83D08706912A093F49B6DAC85A7B5 11F545B5 tips. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . n3YgLjX/Gg+6ngkXLu/+N+aI2Xfy2DJnaSmjJs/lLCcX6QTrw9r6pBND K5lTlGvO8jCxUthwtGDlNjX0EXHSSzQKrbp5XZ1sjU4qPsB5gPomeUa4 0KaKGr3p5OZuknJUPMCxx1+L4W1DEyRZd/b1hWUkX8vtY3JWfMlIGRJu fKw= tips. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . d3H45NmjzXe7NjYihvwJdmmdQa63XxxlmyJIT5KEfiQxTxX+gbO8Pcac 3ds2/t9gbpUbpJbcn3u62b5gIxQ7kyWZnNf6RId0XCoShvQon2bGFa2o FwL/VCB2IGxi/GPLEQ23MG87H47z7JDEvvF13bx56vd56tHQqcFKiZDB v6E= tips. 86400 IN NSEC tj. NS DS RRSIG NSEC tj. 172800 IN NS tj.cctld.authdns.ripe.net. tj. 172800 IN NS ns1.nic.tj. tj. 172800 IN NS ns2.tojikiston.com. tj. 172800 IN NS phloem.uoregon.edu. tj. 86400 IN NSEC tk. NS RRSIG NSEC tj. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ANgyIbrxbH+R6OtdUY75I2+gsklIKf+Xj1cUWZSwcjHu6sOUHr20UXmG ExsOn1iA876FBp2KKoUs9JgRSSlKloJ8bIxqjybW2X/xzOpRXHgbvdNB W2os7C3WDHfD+dt09ragJ4t9V4fPvX4WUMqak0Sa3c02iLsfEsnd7DaG yV4= ns1.nic.tj. 172800 IN A 91.218.160.197 tk. 172800 IN NS a.ns.tk. tk. 172800 IN NS b.ns.tk. tk. 172800 IN NS c.ns.tk. tk. 172800 IN NS d.ns.tk. tk. 86400 IN NSEC tl. NS RRSIG NSEC tk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VyVdc+VJXpA9RHD2XqFf8XVKj+/yEP6APkiP1FWWXqdo4329iM5JUT8u g9+fRupfQL/el4sia3/ePxJrLvnvIywODMV/lThf/TLthO5ikOvwvMk9 V0Yg3LgPlTv9Rk01NLyi8UYdPozn3holpcj7mQbTMDycSOsOQh2z4dta T+g= a.ns.tk. 172800 IN A 194.0.38.1 a.ns.tk. 172800 IN AAAA 2001:678:50::1 b.ns.tk. 172800 IN A 194.0.39.1 b.ns.tk. 172800 IN AAAA 2001:678:54::1 c.ns.tk. 172800 IN A 194.0.40.1 c.ns.tk. 172800 IN AAAA 2001:678:58::1 d.ns.tk. 172800 IN A 194.0.41.1 d.ns.tk. 172800 IN AAAA 2001:678:5c::1 tl. 172800 IN NS ns.anycast.nic.tl. tl. 172800 IN NS tl1.dyntld.net. tl. 172800 IN NS tl3.dyntld.net. tl. 86400 IN DS 25307 8 2 BC0412D59817424A34040676F1AE1205B1F33FC9510E7E3011471185 1FFCEDE4 tl. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GhFCKRG+aNISdSSwAxumB+do6Ims7rcCRXOPQ64fw7+Qwczu3WnrLs28 pDNT4QYj7a1IfGAf2+jGwsqJUN3IuBJ7pGOzjcTpaLmLr7V500aBMsBb /Td4FGC6E0R67yWNiP/7j0GBZaxej/R9CPXyAaa1hRKcn50c3EjluN/3 meI= tl. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WZhm/r2lPE2u0jJOh60wqBQXm08OhuR77bLQmDPeWweCWLKIbadEvpoq IcyaiVFM1cQw8aIJQ3stVAeT4LZyMbnW7P4C95mEjlZGnv6nOVA1YhEw D9Ukl3masKnbCp+W2J3VgJCl5OuflM+w4R6z1LVEsUmCFtPDVHDN83Wb DLY= tl. 86400 IN NSEC tm. NS DS RRSIG NSEC ns.anycast.nic.tl. 172800 IN A 204.61.216.19 ns.anycast.nic.tl. 172800 IN AAAA 2001:500:14:6019:ad::1 tm. 172800 IN NS a.nic.tm. tm. 172800 IN NS a.ns13.net. tm. 172800 IN NS b.nic.ac. tm. 172800 IN NS b.nic.io. tm. 172800 IN NS b.ns13.net. tm. 172800 IN NS ns1.communitydns.net. tm. 172800 IN NS ns3.icb.co.uk. tm. 86400 IN DS 28935 7 1 C9660594EFA1DCCCCA1B6B7359262F2E11052403 tm. 86400 IN DS 28935 7 2 0C30AA64DF5149B0237F0CAD8E6AB22825BDC8CADBD7CC108F6FFC74 AC428709 tm. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . WJEd1krgV/Jm52pmdZ70ZM87a8FKFhKyPi0/b1yZ3MSrahoclN+V8gOj dzquk4p9lilmrzbPTPc8jtRpWUjsf8zLpuesHWqgf55a708KsfwFz3Of s2OTFqDlzy+O/2D/vZ5b+Y3v9p+1PixecvUDtoUDcLvmtNxBBRo21+55 L/U= tm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S18v90w+RW+e2/zb+RxuSE6P4n1MdOn0M9YetgfWCaC9aHtRQiS2wmcP zAY6DzSvdganuaK/fXNvW/kSJ3eJSkDMHHwMu8LuFgSN1q05XwyrOqHC fZkSNsoUQGy3uKD6TyNviwrY4jKnBEr8cZI4W+Xj5NqvT8ii0OlNZEMZ TZs= tm. 86400 IN NSEC tn. NS DS RRSIG NSEC a.nic.tm. 172800 IN A 64.251.31.180 tn. 172800 IN NS ns1.ati.tn. tn. 172800 IN NS ns2.ati.tn. tn. 172800 IN NS ns2.nic.fr. tn. 172800 IN NS ns8.ati.tn. tn. 172800 IN NS ns9.ati.tn. tn. 172800 IN NS rip.psg.com. tn. 172800 IN NS ns-tn.afrinic.net. tn. 86400 IN NSEC to. NS RRSIG NSEC tn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . PK27IHTjpyKIyAuXrTpq3ggM1TDihgQKfMdPvDAKxoA2jzo075fX/fO0 0GgR+C5MAZ4dgLR3WEJ5udB+5yPtIo5Tn51a2aW+/bFGEh0225W81a0X Up5G/8YhnUD7lfvT0ax2iZsfO73ZI9Cbv/N9QgbxxbPGnZRK6zNLTTow BIA= ns1.ati.tn. 172800 IN A 193.95.66.10 ns1.ati.tn. 172800 IN AAAA 2001:4350:1:1::10 ns2.ati.tn. 172800 IN A 193.95.67.22 ns2.ati.tn. 172800 IN AAAA 2001:4350:2048:1::22 ns8.ati.tn. 172800 IN A 193.95.66.6 ns8.ati.tn. 172800 IN AAAA 2001:4350:1:1::6 ns9.ati.tn. 172800 IN A 193.95.67.26 ns9.ati.tn. 172800 IN AAAA 2001:4350:2048:1::26 to. 172800 IN NS to.cctld.authdns.ripe.net. to. 172800 IN NS ns1.iafrica.com. to. 172800 IN NS colo.to. to. 172800 IN NS tonic.to. to. 172800 IN NS auth02.ns.uu.net. to. 86400 IN NSEC today. NS RRSIG NSEC to. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zo293xnGDBAW6QQj+oJuP7vbn/IDFQg4r5dAax9CBzb1tnnvjbnpIJA1 ClS+idFX5+oDVtA1KEuWfYjIkYfrVKsHYdXj4Oq9teFgLa5xNL+ZKA1t vCOPAMhSiPRTb8C8CuDr+izlKm3zhgp34AII6O4FYmmS3NeAjJL/8a/2 oeA= colo.to. 172800 IN A 216.74.32.104 tonic.to. 172800 IN A 216.74.32.100 today. 172800 IN NS demand.beta.aridns.net.au. today. 172800 IN NS demand.alpha.aridns.net.au. today. 172800 IN NS demand.delta.aridns.net.au. today. 172800 IN NS demand.gamma.aridns.net.au. today. 86400 IN DS 13939 8 2 CFED9FB12BD6FF22FF6FC7A6098428062D58B41236279221011BC3FD CCB1F3FF today. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . TdOPMJseE3/tcj4sMlkItkn5v+72vXQFSzXH6LvHwHmVvDD7x/WJIT40 RteASgrU+MwQLYTTeT/+r4gjKmYlJ2w/RPSHA1PDx9pRXj5Es5szN5Xz 9XJqfWi0b8V4C3ahigUJvpslSLEDihXe0c+jmiBI9sa0dtU4alZgKUUo K+c= today. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DYWqZirZkWV+j0E424gsKxYbUyS56fGCGQ11oFyFskZN1v/C4f1Eby5s aeY9AppP1CEQZgCQ/s8NVX4bUFX6owL9Vpke1NK+ogbsZD+NTyZgHlZQ ZQqMzHt4aVHJXUDaoI6iCctj4mHViHkZBIZvINhJW7q5wEcBlPoedBhl aUI= today. 86400 IN NSEC tokyo. NS DS RRSIG NSEC tokyo. 172800 IN NS a.gmoregistry.net. tokyo. 172800 IN NS b.gmoregistry.net. tokyo. 172800 IN NS c.gmoregistry.net. tokyo. 172800 IN NS d.gmoregistry.net. tokyo. 172800 IN NS e.gmoregistry.net. tokyo. 86400 IN DS 32771 8 2 19E0438B0E13DE780175E4BCEBE46432C5287FDB9DFE2B4440FA4E3B FBB20BC6 tokyo. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . as0L8OvM+kwtYlq1PMltG9EDYJZgOsJ/g2pLgm0L9Bb5B8ipCx3ynEUi H6QIcOitCGNljJjF+VVqYKQvYwQA14qJTZbfYoF04qIErHADanEMukgn Er0uBLgg470CEfNCNNt95QSL/N3P5L/GCpx6Jv/8oSr//DMjgy3ce64R 8sA= tokyo. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dNenmwM6M4enYO/AWcsGGXY4/RIDwn1A9JU5nNxSj2vgF/jQxoWlLeJF q92BFyY+lZ3c+siikLG3fhjM+g1wbKM6tSEYXxWC+nNHvhZobwKjWaT9 XOkTza9fwwCZbBGVm0rAJswaW8Y1tJHsdTo7aXwi/RqwUHbEbuKDomjM UF4= tokyo. 86400 IN NSEC tools. NS DS RRSIG NSEC tools. 172800 IN NS demand.beta.aridns.net.au. tools. 172800 IN NS demand.alpha.aridns.net.au. tools. 172800 IN NS demand.delta.aridns.net.au. tools. 172800 IN NS demand.gamma.aridns.net.au. tools. 86400 IN DS 62176 8 2 9107EBABED1AE73F93CE28DA7931F52EE237911FB318E0F1BAE6F9AA C73631FE tools. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jtKM38aHDnvWG3tpUS0qhudivNCQcHFvt9E3bxouDZdHIaj2AFaFlaNX nga2PuxfUmuCQ4wNJYnk+xYqS+dtMI8PToOBQ8ld/EI/mPpySRr/4woz F9q1CB/wM9oHPT5b12X4AGutZNKUm8XK6JCPNtsl5tfShayAC+H3D9z+ 6gg= tools. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Sa2uc+TVyL0ZDkLSalcYk8KMMKFy9wPjtxXNN7dk6RL90LZNc3bNQRtr Be1SVIoJWYiNK8FHLP96B85/QYdf7bF2az527Ko4pMXtyigsnvxT2rIC qsXsV7z4K95F0WntS/PIWlK7c7vypLm4vIFiO+196wWQ92qUJ8Ayd4Be DVg= tools. 86400 IN NSEC tp. NS DS RRSIG NSEC tp. 172800 IN NS tp.cctld.authdns.ripe.net. tp. 172800 IN NS ns3.ns.esat.net. tp. 172800 IN NS auth01.connect.ie. tp. 172800 IN NS auth02.ns.uu.net. tp. 172800 IN NS uucp-gw-1.pa.dec.com. tp. 172800 IN NS uucp-gw-2.pa.dec.com. tp. 86400 IN NSEC tr. NS RRSIG NSEC tp. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fsfQuPHlo9h35qwoTbb0PDKVkI/MKN3ZC1DS0l+4wRl3xYeqYAOBAc6j LIUlqfsuWLAjFDLo5RoWG20yXvq1IcLwNC7Zgjide5EVvQEwr9j34bOz MUTX7X/ll4DeyOPlz0UuBcT+3g+WZq9p5GoHOfjINox7v1AyBj6DQCBz upc= tr. 172800 IN NS tr.cctld.authdns.ripe.net. tr. 172800 IN NS ns1.nic.tr. tr. 172800 IN NS ns2.nic.tr. tr. 172800 IN NS ns3.nic.tr. tr. 172800 IN NS ns4.nic.tr. tr. 172800 IN NS ns5.nic.tr. tr. 86400 IN NSEC training. NS RRSIG NSEC tr. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kb5m8h7frLpVEBy73ZrpdJIGlg225AGZWD6s4KcLFahnuMn8375u2bB3 k1ndMRkGb+eWojVA14GBdowADU4tu2e6jMpDJPILiN9vaik8Vw6StwzT JUmQ4205mX19lCjBxnzduHJHZSIRAopAw+1mi6KrQHK3lsASfeyk4THi W2M= ns1.nic.tr. 172800 IN A 144.122.95.51 ns1.nic.tr. 172800 IN AAAA 2001:a98:30:ad::11 ns2.nic.tr. 172800 IN A 144.122.95.52 ns2.nic.tr. 172800 IN AAAA 2001:a98:30:ad::12 ns3.nic.tr. 172800 IN A 213.248.162.131 ns4.nic.tr. 172800 IN A 193.140.100.200 ns5.nic.tr. 172800 IN A 178.251.42.18 training. 172800 IN NS demand.beta.aridns.net.au. training. 172800 IN NS demand.alpha.aridns.net.au. training. 172800 IN NS demand.delta.aridns.net.au. training. 172800 IN NS demand.gamma.aridns.net.au. training. 86400 IN DS 47485 8 2 C8DE27AC32C7BFBFD8502763B6A472CD4A90F15F4BD1427C712139A2 3D2C24D0 training. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . dFSAoy1vusUZwx7cbB8vUylEeEHeTCz4R5+33fzYysO3/iaYYameh+Wm OVUxMpX17R2uKOts1Uo2UYdRsZ9UU+Iclyhb5HHJp+8hRJ7BYUaapKdE nUjXOF3gXosPFPpVWJKcnyUNgdBXipVRmLJlDJgzOMa+Uo8z/TCwnCpD cvk= training. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MqogTyf9MiLCjonvTKjQC3Gs6OmwA9XB+M1OKhuYuK/yesH/KxLetaEg yeONoD8/gsf3Pnw0J3YVviVyL3x6j0qzMjr+QwIryKIsfk0c9c+NpGyB w8JeLDLf+01XOyXGqLFmlq1vRJxfBHXEtjaqvklrmiv4i6FdodilQ1hX 46U= training. 86400 IN NSEC travel. NS DS RRSIG NSEC travel. 172800 IN NS a.gtld.travel. travel. 172800 IN NS b.gtld.travel. travel. 172800 IN NS c.gtld.travel. travel. 172800 IN NS d.gtld.travel. travel. 172800 IN NS e.gtld.travel. travel. 172800 IN NS f.gtld.travel. travel. 86400 IN NSEC tt. NS RRSIG NSEC travel. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . l939NlhXP4d60XNvkelAEOYvkb3Jx9udPE74hmaJDMLg2m4gWgHeYfj3 SR5wg15ErWbLjVB26YGD6MByVfzIttDR3Dw8+VqQxp7ltStlPPZ3EnXu 3DdVuSvwkn3NCpFC25+drnH495zfrSB7oJ1wux7Np8vWn+oR9RQeHg96 LB0= a.gtld.travel. 172800 IN A 156.154.100.1 a.gtld.travel. 172800 IN AAAA 2001:502:ad09::1 b.gtld.travel. 172800 IN A 156.154.101.1 c.gtld.travel. 172800 IN A 156.154.102.1 d.gtld.travel. 172800 IN A 156.154.103.1 d.gtld.travel. 172800 IN AAAA 2001:502:2eda::1 e.gtld.travel. 172800 IN A 156.154.104.1 f.gtld.travel. 172800 IN A 156.154.105.1 tt. 172800 IN NS ns3.nic.mx. tt. 172800 IN NS pch.nic.tt. tt. 172800 IN NS ripe.nic.tt. tt. 172800 IN NS sns-pb.isc.org. tt. 86400 IN DS 2539 8 2 B06DFA79674DF3EA8190E7616164414B01E9199B7C94EC1540378A39 5DAA401F tt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . fVKjk88o1sadP5q7OsG5HWL+HMBllrjr7idoKulCpQrcX+Nd+xGwxgnY 6Q7ylfvi+jVEy0kKSzZBFK3OZdjLwPiUs25hMMywknHc1eTMbnJOSPyV qe4CVi4tsUbXiMjw7cEJny5NlMaLJFmXxtedU27s+MnV9S2o76SlgWPU h7M= tt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . TT3iqQL9kUinYlqqLBls4rAxDQG4hQIJZLuV1DxFbhig7Q4sIRUzMqIV D9wwdrhlFbDdJ6L2xymBCUFG2d5umCLDlRGUBcR2FsLw2u+hr5jmMLBk W+WD3ljB76usHS1EFBHz/bak2GBBerRHvaQZGgKVZwxsLX5bb/Di5z84 1X0= tt. 86400 IN NSEC tv. NS DS RRSIG NSEC pch.nic.tt. 172800 IN A 204.61.216.63 pch.nic.tt. 172800 IN AAAA 2001:500:14:6063:ad::1 ripe.nic.tt. 172800 IN A 193.0.9.50 ripe.nic.tt. 172800 IN AAAA 2001:67c:e0::50 tv. 172800 IN NS a5.nstld.com. tv. 172800 IN NS c5.nstld.com. tv. 172800 IN NS d5.nstld.com. tv. 172800 IN NS f5.nstld.com. tv. 172800 IN NS g5.nstld.com. tv. 172800 IN NS h5.nstld.com. tv. 172800 IN NS l5.nstld.com. tv. 86400 IN DS 44904 8 1 3E447F7145888B3137E9D83EEC9FB77671A8647D tv. 86400 IN DS 44904 8 2 1CFE1309925B78F42C8B4862A670B0BAB9FC142ED8B4D41E24C65FE6 A0D9DFB4 tv. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . JN9fK+BFJfINT+HZBPYCcw2+ivKVD7tbbOTFNe03aX18avDv2WtHep2D 8Er7ZobGgptpn7XG3/LOEDKsSyZSEVfXQD0TTa8cyYQqoXGSXVldxJmB NtR1wVvCTyGNx7e+lxNWY2xErtNcD0zhxCxLNYQqroSpcJv8dTzEvFXx DEo= tv. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Kd+4PsrEJ7AhDeJaXCUCgmwAqEqAXjmgIKNuWi0RhGDqdGSlgrfzwJ20 3Lt9r4hT8ZCeMyqNIeHOwAUPKYizBvGUCT5x7xKfS06nCidWjz2WFKaQ buyv96pifXtO487oYeUP3jVa81BkaERFrebuHQ3rKAxedOhZyDesLFoZ k2U= tv. 86400 IN NSEC tw. NS DS RRSIG NSEC tw. 172800 IN NS a.dns.tw. tw. 172800 IN NS b.dns.tw. tw. 172800 IN NS c.dns.tw. tw. 172800 IN NS d.dns.tw. tw. 172800 IN NS e.dns.tw. tw. 172800 IN NS f.dns.tw. tw. 172800 IN NS g.dns.tw. tw. 172800 IN NS h.dns.tw. tw. 172800 IN NS ns.twnic.net. tw. 172800 IN NS sec4.apnic.net. tw. 86400 IN DS 19780 8 2 FB47A76AA51546976D0DFAED95529D072B607B276CAC090DEDF42629 FD271B40 tw. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . pwPQNKoAeTUhEiw7Rc3Q1jXkh5OsijEMKGVSsU8Hiagh3rlJ0nKDx5R6 bbYg7IvF6zaY+P37IFTi6zmQIMH06xRnTrIDuZCK1SzVXPpHkZdiAp0F Tt6cL9JC2VDsxAMI07DyHWpwSJAxDh4yVUkkLDacp42mkPWMu1Dn8+Q8 B8c= tw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hhDHFXaMkB9trgX7Bs8mkMoIoDS4UgA4frAFtMQ01nUJajZZd2uI4l8O OhuzjcyEKBZMK+Z870mF+7Y4ZPtsfaxpaN2CCO8Fb4pBp2wHbC7Gv0sT 1g8VPkHVoBAPo65LlkaNJwWO7sXZxmdo3ESlur+kWMEvQI6tkvlu5g0C 4fY= tw. 86400 IN NSEC tz. NS DS RRSIG NSEC a.dns.tw. 172800 IN A 203.73.24.8 a.dns.tw. 172800 IN AAAA 2001:cd8:800::8 b.dns.tw. 172800 IN A 210.201.138.58 b.dns.tw. 172800 IN AAAA 2404:0:10a0::58 c.dns.tw. 172800 IN A 61.220.48.1 c.dns.tw. 172800 IN AAAA 2001:b020:0:77::1 d.dns.tw. 172800 IN A 210.17.9.230 d.dns.tw. 172800 IN AAAA 2001:c50:ffff:1::230 e.dns.tw. 172800 IN A 211.20.231.11 e.dns.tw. 172800 IN AAAA 2001:b000:1e0:c000::11 f.dns.tw. 172800 IN A 163.28.1.10 g.dns.tw. 172800 IN A 220.229.225.195 g.dns.tw. 172800 IN AAAA 2001:cd8:400::195 h.dns.tw. 172800 IN A 203.119.3.1 h.dns.tw. 172800 IN AAAA 2405:7e00:1001::111 tz. 172800 IN NS d.ext.nic.cz. tz. 172800 IN NS ns.anycast.co.tz. tz. 172800 IN NS ns2.tznic.or.tz. tz. 172800 IN NS rip.psg.com. tz. 172800 IN NS fork.sth.dnsnode.net. tz. 172800 IN NS ns-tz.afrinic.net. tz. 172800 IN NS sns-pb.isc.org. tz. 86400 IN DS 19948 5 1 F8EECE7181F56EA0C796DF630E648698391F1D66 tz. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . XFWRAJU9ocxm4GH9FvymO/8Ww2ng3o5sKBX0G6wv/9nWifYs3YeHanLi rFPhkM8f61oxIY0fcMgxyLqdihLLa0ka4h/n0CQsU2OfFEFwvT06SsP/ HHZCDEfLXM85I7QgdXkQoYVpiaMH9imMT2fBTy+m5vy7NQOY6gUzKRYQ IFU= tz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . T1fc/PquNl2YiIAwTdnIRzZ75G0C5fCz48R8JoD87AVhwBWA9EEfzQBo 37R4u9///lkBjy7bTLyozDLREFu6XdfKw18kYMevIYyG+0XpuSV/lfCt rKJk3QFq6m2Z9bQxm6tTClBp+NCjeip0JCNG0XIw4rLip2pMpWPJtfmz C34= tz. 86400 IN NSEC ua. NS DS RRSIG NSEC ns.anycast.co.tz. 172800 IN A 204.61.216.15 ns.anycast.co.tz. 172800 IN AAAA 2001:500:14:6015:ad::1 ns2.tznic.or.tz. 172800 IN A 196.216.162.67 ns2.tznic.or.tz. 172800 IN AAAA 2001:43f8:e0:1::67 ua. 86400 IN NSEC ug. NS DS RRSIG NSEC ua. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . mQYoXfhVT6RPsijyZtaZzb4WHLBV2IJzBXyaakX4u8lJYO1+zFkWYfuN dMR+0OZVECsNOxfNEEUIOpSFmy/qldH00ZDWKPFz1k5J8hNr/i5L7H9T YuRc/d7+ktiOiTZA4GIpnk/DmCZO0OVEsxRHKnMTioL7e2Gvs5BRl8/R tTg= ua. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . j8wVYuLs1FxBNzDHdR7WY0yMsByB73MFXW8rpl0oziPri9raaQ0IX54/ GSgFCgoGz0S39RBJNrejhJp/reA6L0+1j1a0IqS/0fn/49YbTSg/lVrZ uXiEyBiQeOaQ/zPjiSMk/4HPmk7KG+nVn42uybum6+0OQ64s8EDdB0/V xkQ= ua. 172800 IN NS cd1.ns.ua. ua. 172800 IN NS he1.ns.ua. ua. 172800 IN NS ho1.ns.ua. ua. 172800 IN NS pch.ns.ua. ua. 172800 IN NS ripe.ns.ua. ua. 172800 IN NS sns-pb.isc.org. ua. 86400 IN DS 56514 10 2 BDD7A310534F76B2B6B25C94F816F9B9F260A2E35F526A9287E3307F B2CD16D8 az.hostmaster.ua. 172800 IN A 195.47.253.13 az.hostmaster.ua. 172800 IN AAAA 2001:67c:258::13 ge.hostmaster.ua. 172800 IN A 195.47.253.18 ge.hostmaster.ua. 172800 IN AAAA 2001:67c:258::18 tier1.num.net.ua. 172800 IN A 193.110.163.134 cd1.ns.ua. 172800 IN A 194.0.1.9 cd1.ns.ua. 172800 IN AAAA 2001:678:4::9 he1.ns.ua. 172800 IN A 216.218.215.27 he1.ns.ua. 172800 IN AAAA 2001:470:2e:1::27 ho1.ns.ua. 172800 IN A 195.47.253.1 ho1.ns.ua. 172800 IN AAAA 2001:67c:258::1 pch.ns.ua. 172800 IN A 204.61.216.12 pch.ns.ua. 172800 IN AAAA 2001:500:14:6012:ad::1 ripe.ns.ua. 172800 IN A 193.0.9.121 ripe.ns.ua. 172800 IN AAAA 2001:67c:e0::121 ug. 172800 IN NS ns.icann.org. ug. 172800 IN NS ug.cctld.authdns.ripe.net. ug. 172800 IN NS root.eahd.or.ug. ug. 172800 IN NS ns-ug.afrinic.net. ug. 172800 IN NS anycast.eahd.or.ug. ug. 86400 IN DS 2767 8 2 4278D7C4B2B45738A39F310EAC36558411BD547812517BDF23F95FCB B4796B2E ug. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . MW3OzGd8NC1zGvGjS3t4s6Vd11uiOS6EB/1MNOilC8ZZ4PA3mYIn9Zhk TpS5w4KWXOmIdO4qQccqLI4vfwMgnb9MPpC9HjDV5Sq02JJzOM02EwDw 7CLYxNwGXDu7O3qSB42HFn2IyFsUfq/X6n8flqXeMgxWRvinExN2yL13 /nQ= ug. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uhLUfrTG/dK+4edCXNhBJ7ocwsa+SzUteslbMmBhGNu+yycs6cFEjNVQ ZPMKHDTcd0Qn1jmZ28YfdC/Byahh0JxLiflwLFVDbZpXm2WwB85hNwYx gvQmgTymPz+iPUcgtU+er4CdIfrUF3YYYI1IQdBY/hB8nfq6jbnyOaz9 TKI= ug. 86400 IN NSEC uk. NS DS RRSIG NSEC anycast.eahd.or.ug. 172800 IN A 204.61.216.60 anycast.eahd.or.ug. 172800 IN AAAA 2001:500:14:6060:ad::1 root.eahd.or.ug. 172800 IN A 212.88.97.132 uk. 86400 IN NSEC uno. NS DS RRSIG NSEC uk. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nbNW5v0Y01oCYDmutb56p3H3ENLKzQSs9gMp/DqL/Z4ysTXEIwGlIFTS hBMtDflkv4ptzsY2aXwubqttTFDObL3IRg7aV9cgpNeipoTeL1wj/mK+ cn5aqjkqkOSe3eDwaBT9gduTgw6NFDIujCijdVlmPiD5DXuXtd25J82D P6I= uk. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jyf5cfyHEKN07Lt8Xn0/DBd0IoAKkW5x/izVX5dgOnGk1NJ/UtoQbDSY c5diZlNlo8LLZCzmAEv4Qr8hufPjTarij7C0XJNEdfcuCcjBfU1pj46+ oHW4Summ9tmgCjmtnr5XDu+mcg1pJz5QiRrFgU8OzRrJeKTFmwcIWITb 1ic= uk. 172800 IN NS ns1.nic.uk. uk. 172800 IN NS ns2.nic.uk. uk. 172800 IN NS ns3.nic.uk. uk. 172800 IN NS ns4.nic.uk. uk. 172800 IN NS ns5.nic.uk. uk. 172800 IN NS ns6.nic.uk. uk. 172800 IN NS ns7.nic.uk. uk. 172800 IN NS nsa.nic.uk. uk. 172800 IN NS nsb.nic.uk. uk. 172800 IN NS nsc.nic.uk. uk. 172800 IN NS nsd.nic.uk. uk. 86400 IN DS 15191 8 2 A057C8553B1DC6CF158A87CD2D0BAA2CDC9C6A14FA03DE02B19AB0DA 62AF279E ns1.cs.ucl.ac.uk. 172800 IN A 128.16.5.32 barney.advsys.co.uk. 172800 IN A 217.23.160.50 ns3.icb.co.uk. 172800 IN A 91.208.95.130 tld6.ultradns.co.uk. 172800 IN A 198.133.199.11 ns1.nic.uk. 172800 IN A 195.66.240.130 ns1.nic.uk. 172800 IN AAAA 2a01:40:1001:35::2 ns2.nic.uk. 172800 IN A 217.79.164.131 ns3.nic.uk. 172800 IN A 213.219.13.131 ns4.nic.uk. 172800 IN A 194.83.244.131 ns4.nic.uk. 172800 IN AAAA 2001:630:181:35::83 ns5.nic.uk. 172800 IN A 213.246.167.131 ns6.nic.uk. 172800 IN A 213.248.254.130 ns7.nic.uk. 172800 IN A 212.121.40.130 nsa.nic.uk. 172800 IN A 156.154.100.3 nsa.nic.uk. 172800 IN AAAA 2001:502:ad09::3 nsb.nic.uk. 172800 IN A 156.154.101.3 nsc.nic.uk. 172800 IN A 156.154.102.3 nsd.nic.uk. 172800 IN A 156.154.103.3 uno. 172800 IN NS ns1.dns.nic.uno. uno. 172800 IN NS ns2.dns.nic.uno. uno. 172800 IN NS ns3.dns.nic.uno. uno. 172800 IN NS ns4.dns.nic.uno. uno. 172800 IN NS ns5.dns.nic.uno. uno. 172800 IN NS ns6.dns.nic.uno. uno. 172800 IN NS ns7.dns.nic.uno. uno. 86400 IN DS 57892 8 1 3B49FDC11DAEE5187A4170A5BADF77A917BCE481 uno. 86400 IN DS 57892 8 2 C156DD21B3B96A50FA94BE322CDF6F0144E86C9597E4AA56D53E9B49 0C94A537 uno. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hH2AHmBVG+BOWoZiN674PwZVwAANo+EZq1WIv+oqZTvZL5uKt8y2OjcM t/5dDwnv1alGxu18oVoAmfaU3Fl6Ctvmd1F7RAuoSyb+8XX0t9h/WDKO vbRIEA2RtGZwdcAIkhHwN3P5zkj0Lf8Omi7jkXsp9GWHiDCoPqPl7L0W aSA= uno. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . PrJJt8LI+vk1WM+9DhTiBLAHJyYgHicWtzTd7+PHCOlbbWjblarIGhn4 4IvBIHz8eBH1kyyjmN3q6539/sucfY7HwOUUulA/C94AF2LJiLdpOiEX bLA4hYZUMcU5NQ112ufoXXTGg0tEVGJxfWPqt4cgbN/W4LJR+0bmcSWF AZg= uno. 86400 IN NSEC us. NS DS RRSIG NSEC ns1.dns.nic.uno. 172800 IN A 156.154.144.173 ns1.dns.nic.uno. 172800 IN AAAA 2610:a1:1071::ad ns2.dns.nic.uno. 172800 IN A 156.154.145.173 ns2.dns.nic.uno. 172800 IN AAAA 2610:a1:1072::ad ns3.dns.nic.uno. 172800 IN A 156.154.159.173 ns3.dns.nic.uno. 172800 IN AAAA 2610:a1:1073::ad ns4.dns.nic.uno. 172800 IN A 156.154.156.173 ns4.dns.nic.uno. 172800 IN AAAA 2610:a1:1074::ad ns5.dns.nic.uno. 172800 IN A 156.154.157.173 ns5.dns.nic.uno. 172800 IN AAAA 2610:a1:1075::ad ns6.dns.nic.uno. 172800 IN A 156.154.158.173 ns6.dns.nic.uno. 172800 IN AAAA 2610:a1:1076::ad ns7.dns.nic.uno. 172800 IN A 207.34.5.10 ns7.dns.nic.uno. 172800 IN AAAA 2001:503:7bbb:ffff:ffff:ffff:ffff:ff7e us. 172800 IN NS a.cctld.us. us. 172800 IN NS b.cctld.us. us. 172800 IN NS c.cctld.us. us. 172800 IN NS e.cctld.us. us. 172800 IN NS f.cctld.us. us. 172800 IN NS k.cctld.us. us. 86400 IN DS 55408 5 1 A66648238215F3DD5865471DF37606675FDF85A5 us. 86400 IN DS 55408 5 2 BC044879B104ECACAE7536A070FE3E9C282314A73331095FF267DA90 1957458B us. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . b+t+rlPYP5v0A4Byby5iG860Jm3jnN6A/b4yOa7zlFbgPpVV0tUgClL7 RlKA/oGeIMkGTKRCKcxSQ/M5YCgyONARcketiKY5POh7bee0qBwBbF5P I9RY0Ot6Y4VJCmGKIJ8VRJztLHiagT03na/NRiVcd9WtO8bwMCEpinXz 0CI= us. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MtbeYNXUhSwGkKxlfkl3trNYBG4RwTxU3esFmCIWo24AU7g0g9jUcRk8 yvBOfGb76dDr1aKSNWm4orm2RFhc7uEsC86qhijizt2m5RrF0GGnhlD2 XOtNJmWzevK/l4MiQ0kWP6r3VoHCDBICm+jrirvAb2a2fKihNPntYlCz HzY= us. 86400 IN NSEC uy. NS DS RRSIG NSEC a.cctld.us. 172800 IN A 156.154.124.70 b.cctld.us. 172800 IN A 156.154.125.70 b.cctld.us. 172800 IN AAAA 2001:503:d1ae:ffff:ffff:ffff:ffff:ff7e c.cctld.us. 172800 IN A 156.154.127.70 e.cctld.us. 172800 IN A 156.154.126.70 f.cctld.us. 172800 IN A 209.173.58.70 f.cctld.us. 172800 IN AAAA 2001:500:3682::11 k.cctld.us. 172800 IN A 156.154.128.70 k.cctld.us. 172800 IN AAAA 2001:503:e239::3:1 uy. 172800 IN NS ns.dns.br. uy. 172800 IN NS uy.cctld.authdns.ripe.net. uy. 172800 IN NS ns3.nic.mx. uy. 172800 IN NS seciu.edu.uy. uy. 172800 IN NS ultra.seciu.uy. uy. 172800 IN NS sns-pb.isc.org. uy. 86400 IN NSEC uz. NS RRSIG NSEC uy. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . QO0GT48RKCL6rfCXnJAA4cQ7xmXGQ39DNZD+AFHrT0bHYI31y39KH8uz GGPxqCLwAtMVXUMNY1l4BS4gcWl2PVE6cBbqLxDE1AA2eM1FUsBDh0lN msordIkXv1DGZWagiiXyT1n0zaeLVq8Pfk4DHt1LBM1IELhoH52F5GMm K8w= seciu.edu.uy. 172800 IN A 164.73.128.5 seciu.edu.uy. 172800 IN AAAA 2001:1328:6::5 ultra.seciu.uy. 172800 IN A 164.73.128.70 uz. 172800 IN NS ns.uz. uz. 172800 IN NS ns2.uz. uz. 172800 IN NS ns3.uz. uz. 172800 IN NS ns4.uz. uz. 172800 IN NS ns5.uz. uz. 172800 IN NS ns6.uz. uz. 172800 IN NS ns7.uz. uz. 86400 IN NSEC va. NS RRSIG NSEC uz. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MI2K9E+pjtdu4lk0Mf0w8s0GKYNZ5bZFOMPctPQ/hg8ykSyi24CJ5/Zc KFPeccXbtu9BXXlFNMiQBJHPEGcjwhu3TNaOubYjRQhyrY/+Rj/gG92/ rF653dHRkVz0QjG7VT/U9Oha0WWQPsQwZT06FP4JUCHvEq26fej0uUKY axk= ns.uz. 172800 IN A 91.212.89.8 ns2.uz. 172800 IN A 81.95.224.158 ns3.uz. 172800 IN A 195.158.1.22 ns4.uz. 172800 IN A 87.139.105.60 ns5.uz. 172800 IN A 217.12.81.129 ns6.uz. 172800 IN A 83.69.129.4 ns7.uz. 172800 IN A 54.200.69.96 va. 172800 IN NS va.cctld.authdns.ripe.net. va. 172800 IN NS dns.nic.it. va. 172800 IN NS john.vatican.va. va. 172800 IN NS seth.namex.it. va. 172800 IN NS osiris.namex.it. va. 172800 IN NS michael.vatican.va. va. 86400 IN NSEC vc. NS RRSIG NSEC va. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . BrR2h3lJVDx0fznLpo6DqFM356YXbuELwEvxD3qUKmC+kcAYvZTbGnLM SsbeP0R9b8o2efIVctBx19+VkAy4T7rpUp1iU1wfa1Rde4IftTMZwIFM /2OZJqj8wribh5pPgAjfzxq96liK+h0GpEZbNam++z5c+xbavKbtjAIv XLg= john.vatican.va. 172800 IN A 212.77.0.110 john.vatican.va. 172800 IN AAAA 2a01:b8:0:1:212:77:0:110 michael.vatican.va. 172800 IN A 212.77.0.2 michael.vatican.va. 172800 IN AAAA 2a01:b8:0:1:212:77:0:2 vc. 172800 IN NS a0.cctld.afilias-nst.info. vc. 172800 IN NS a2.cctld.afilias-nst.info. vc. 172800 IN NS b0.cctld.afilias-nst.org. vc. 172800 IN NS b2.cctld.afilias-nst.org. vc. 172800 IN NS c0.cctld.afilias-nst.info. vc. 172800 IN NS d0.cctld.afilias-nst.org. vc. 86400 IN NSEC ve. NS RRSIG NSEC vc. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . YCfr8ZKH+dTUwcowmK39WvJrH6pzDlZQgyKolRfk/D+/OWAD5Se5QToE /qPZAZOUD9KoIbDsDf4WY1hhqrpQ9UmJ6q6IBUDmZy5L5kKgSFTN0jtJ pe+ENXncWA5s1i16nkNjAM3IOBpgYH+/wuAGepNu3Ny/htn3YvMEXIs4 x8I= ve. 172800 IN NS ns1.nic.ve. ve. 172800 IN NS ns2.nic.ve. ve. 172800 IN NS ns3.nic.ve. ve. 172800 IN NS ns-ext.isc.org. ve. 172800 IN NS ns-ext.nic.cl. ve. 172800 IN NS sns-pb.isc.org. ve. 172800 IN NS azmodan.ula.ve. ve. 86400 IN NSEC ventures. NS RRSIG NSEC ve. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nfH9NP+0BKRNoCZBBoi15t/Lr/jwe2m38H5p4a2KPrhb2J+mzciUkKyG S7aA2ANjBlWCTLr9A7AV0wqnSnyeHMEVjsQtIGUtGg04LtCO+qhl/9+A 8zs1p1gQBm//Sikp+f9jQfGOM8tD8url7/9OsH8Z+CGVBgZ5YvPb3XW/ 770= ns1.nic.ve. 172800 IN A 150.188.228.4 ns1.nic.ve. 172800 IN AAAA 2001:1338::2 ns2.nic.ve. 172800 IN A 150.188.228.5 ns2.nic.ve. 172800 IN AAAA 2001:1338::3 ns3.nic.ve. 172800 IN A 190.9.129.56 azmodan.ula.ve. 172800 IN A 150.185.130.16 ventures. 172800 IN NS demand.beta.aridns.net.au. ventures. 172800 IN NS demand.alpha.aridns.net.au. ventures. 172800 IN NS demand.delta.aridns.net.au. ventures. 172800 IN NS demand.gamma.aridns.net.au. ventures. 86400 IN DS 12352 8 2 91175878089CE3054D9CA53EA05D2B71D06813D35F25871FB566374C 66C213A2 ventures. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . XUxEniu9xWmfkVtgNYTTCtTY9fwtdkvysE8G60RcylAdavZtelIEuI71 +9uEsoych2NoPqtDtKJ4mh4NfZAZ6cF65QdtOrasppJOhsisjc2/0fXJ aAW6r7VzjIJuO4povPMhaso5ifHO5hvSduWAnqFfmxmhdoH0y3sXLBtd 47A= ventures. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kqRO75vLV4ywniNFQsdkJxWoLgnPXMSqpm2z7ltp8KTEYlAtTpFGguei I3uSL2w/h6mV6yrFrMvf0SWr1XjT6cZ3c4wPcQ2AdCF2t9p4OzXUXc7M 7aNJcClMzuOEVj81z3Rhjig0EmTN37zuFwuV0E52UMh7Ew2Hf5ws6d9O o3Y= ventures. 86400 IN NSEC vg. NS DS RRSIG NSEC vg. 172800 IN NS vg.cctld.authdns.ripe.net. vg. 172800 IN NS ns1.root-servers.vg. vg. 172800 IN NS asia.zone.vg. vg. 172800 IN NS europe.zone.vg. vg. 86400 IN NSEC vi. NS RRSIG NSEC vg. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hCHUHZo7i2RRo7IqfLHBuzFcMYUIirK16hkJ/jAyH7bveZfpY0xM7i2W nnxi6qsMRCAyk05/51R09EjhD8/VtkhHP2DlTHj7cGNxuPWtlyHrVGyH 6wNZo0+TFM5/NlNWKhemIYoV/4k0Uc/YRZ2tlJxzBQqscUOX2yXrwYGI vsI= ns1.root-servers.vg. 172800 IN A 194.0.11.102 ns1.root-servers.vg. 172800 IN AAAA 2001:678:e:102::53 asia.zone.vg. 172800 IN A 31.169.81.226 europe.zone.vg. 172800 IN A 77.79.104.226 vi. 172800 IN NS ns1.cobex.net. vi. 172800 IN NS ns1.krnic.net. vi. 172800 IN NS ns2.cobex.net. vi. 172800 IN NS auth100.ns.uu.net. vi. 172800 IN NS auth110.ns.uu.net. vi. 86400 IN NSEC viajes. NS RRSIG NSEC vi. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . aS1Z3DVXx/aJaFWx4ax6+CT0kMqK+ZlSuToVmBFCJffqCcPL2DLWeCoY E4AIVVuWWQqut0lp3KyH8Z6WabiXycYPtM6xEAJMC7GXpNotSc2ifGsP cE33dtMPIOiTvmWXGJVIUic/c0QIA2PivuMSs8oO1GSLXZwDkiUOryic fbE= viajes. 172800 IN NS demand.beta.aridns.net.au. viajes. 172800 IN NS demand.alpha.aridns.net.au. viajes. 172800 IN NS demand.delta.aridns.net.au. viajes. 172800 IN NS demand.gamma.aridns.net.au. viajes. 86400 IN DS 57850 8 2 EA1ECA41F59D77BF61A09E8F01297DABB2852D0A4A31D558BFCDB7FF BA8B22D6 viajes. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aCDxHYSJ0CEcOhqTXpz1TH7CLM0+ZiQ3lv9sc1PZNgPzfOWXXe6ZHGCt +xvxAfF9pF+lKf0pfsi/1iZosS0FfeVFHVXJPKhE6Q18f517u1tjUeAX WOJIkyage7w7p3DaHS6TEjLnCnQ3QpsY06C1HOwUjHJr5qn95rwQHNw8 PyE= viajes. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . K/obZOYu+NWuBx0NXCb94katyuUIeaqnSEgFU7rUk2A1K0Ng4DWmUOOC a2+2AxEJtNtCw7vOhqy4hOcQleYDZknXDQxh0W2oi8pBOAQzdPOniKrU S1cpuSaA+OkIPdtXdXr1rled2adFQzoqcUabh0W/jWGgQ6RHMhbzM/uF 9fw= viajes. 86400 IN NSEC vn. NS DS RRSIG NSEC vn. 172800 IN NS a.dns-servers.vn. vn. 172800 IN NS b.dns-servers.vn. vn. 172800 IN NS c.dns-servers.vn. vn. 172800 IN NS d.dns-servers.vn. vn. 172800 IN NS e.dns-servers.vn. vn. 172800 IN NS f.dns-servers.vn. vn. 172800 IN NS vn.cctld.authdns.ripe.net. vn. 86400 IN NSEC voting. NS RRSIG NSEC vn. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WPNleRJJIKb5OVu3hc1e2KfGG0yxDBGUa34qBev3ToTeNFiothVjF2BO 7id7tQq7rONSULP5rMMeQk4s/qtd1/RDSHVOxJbJxz8X+ZDpfe3D4dJr YmrSCeE8DFXlZphAS7FyNgcRjgZVOaKmpLVwuTys6nWH4NQXTKbj54zj LqA= a.dns-servers.vn. 172800 IN A 194.0.1.18 a.dns-servers.vn. 172800 IN AAAA 2001:678:4::12 b.dns-servers.vn. 172800 IN A 203.119.10.105 b.dns-servers.vn. 172800 IN AAAA 2001:dc8:0:7::105 c.dns-servers.vn. 172800 IN A 203.119.38.105 d.dns-servers.vn. 172800 IN A 203.119.44.105 e.dns-servers.vn. 172800 IN A 203.119.60.105 f.dns-servers.vn. 172800 IN A 203.119.68.105 voting. 172800 IN NS a.dns.nic.voting. voting. 172800 IN NS b.dns.nic.voting. voting. 172800 IN NS c.dns.nic.voting. voting. 86400 IN DS 22301 8 1 916F42C6CE97C6CFF9D0545167E2203A179667C2 voting. 86400 IN DS 22301 8 2 E505E22BD2DCA54354C9EA9B0F09D4972390C9DCC6F342D9438D47F3 47A03B7D voting. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CU8KRK0PMiLk7TjBZtJsGgbYECaaTW0853etq5qcxlszaXkFlysi7rJX a5zIFjiiHyFzQgHQca1Cw1nu1OkC/MShd5tyUMaJPSALWe1+VwP8Gyzi aM6gCV7SD72Hj3DyC8cF844Z53E/F5LlbZecUX3uylSbUwxfPhG+9rn7 uVA= voting. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . m8Q85f2dPsqs77z5yL8UAPivjF7UekxP0aKQT5n37COJGtZ2j5urY2QR pe/31swnMzAMw5vD7SS8CatWuVAGlqnKlE+zLR5TbUxxSUJsz52/w1Cq zmOiS3bhla+uhg8r9EFZ+jK76hii+//sedZX4111XPlqKTlu9odoN8Ox BMI= voting. 86400 IN NSEC voyage. NS DS RRSIG NSEC a.dns.nic.voting. 172800 IN A 194.0.25.17 a.dns.nic.voting. 172800 IN AAAA 2001:678:20::17 b.dns.nic.voting. 172800 IN A 193.170.61.6 b.dns.nic.voting. 172800 IN AAAA 2001:62a:a:2000::6 c.dns.nic.voting. 172800 IN A 193.170.187.6 c.dns.nic.voting. 172800 IN AAAA 2001:62a:a:3000::6 voyage. 172800 IN NS demand.beta.aridns.net.au. voyage. 172800 IN NS demand.alpha.aridns.net.au. voyage. 172800 IN NS demand.delta.aridns.net.au. voyage. 172800 IN NS demand.gamma.aridns.net.au. voyage. 86400 IN DS 32134 8 2 F610100634FDC228FF5E4C1846E51D99DC3B0C2B8089933FBBF6D33E D543A332 voyage. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . H2calSFhX/F5W8J94XHdA+cd0OsvXCEnC5zV8JTGsPHUinh65YUrFB19 Rscsg7wJ98cSjsjmqSlo0xcxad/jCi2s+QIMQ4ql7Fn9Bczijxs0DMgf 6yUvrTJ/gnxrqu/mvh4lhfAHRrAHTMa/wqPHv7j2H7+zzPuGXI5Wxb4L Ayo= voyage. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hY4l2N2dauD0wcAqCXrn1YZOe/VhIPCyLnIQv2pvJotfaNybcFF2XFFY 0r1hWPoK36Ojc13LeaqkmrxgYRPVc80Cb2mGSp2kj2qo5vBeAXNoJ33o zmK7CBBBm/NYYL9/F6mjsd7cGIw7csQQ68pLNiJImyKVSFpyK14N2hj+ f7g= voyage. 86400 IN NSEC vu. NS DS RRSIG NSEC vu. 172800 IN NS efate.vanuatu.com.vu. vu. 172800 IN NS santo.vanuatu.com.vu. vu. 172800 IN NS futuna.vanuatu.com.vu. vu. 172800 IN NS cctld-vu.orange.mu. vu. 86400 IN NSEC wang. NS RRSIG NSEC vu. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fEpRzeSPvDCBnWPVc/g8BITvky6IxVvJBfmY3vaAHHoIMPS7ab9ekaC0 rzI8kdR4o99Dmh1ZFkWwNB6O3K3i1iIiNnWUIeZHjdgi9rOclUqkAgW4 XYEHqOmr+iL3XvChhetJb8eLnIZzCQ5k1meqsKwJnGi2tyPH0FnEfqJG +sc= efate.vanuatu.com.vu. 172800 IN A 202.80.32.5 futuna.vanuatu.com.vu. 172800 IN A 202.80.32.3 santo.vanuatu.com.vu. 172800 IN A 202.80.32.7 wang. 172800 IN NS a.zdnscloud.com. wang. 172800 IN NS b.zdnscloud.com. wang. 172800 IN NS c.zdnscloud.com. wang. 172800 IN NS d.zdnscloud.com. wang. 172800 IN NS e.zdnscloud.com. wang. 172800 IN NS f.zdnscloud.com. wang. 172800 IN NS g.zdnscloud.com. wang. 172800 IN NS i.zdnscloud.com. wang. 172800 IN NS j.zdnscloud.com. wang. 86400 IN DS 26809 8 2 A7FDCE2D689D6C3CDC4275348667E0FE258136B879787E69C89A1C12 5CF23F67 wang. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . K1NGdK/9MX1imEbHgMnO52cvEO7U0n0Iet89eh2FrpD8G01wG8+kOT1n pK4sc5f228wbXRmg6K28XeB7dmtuM1W7cTIbrN0+HMxcwpU77JuDsFfD zoYkaywgC3DPPG0QlvakgS7k0reZ710I7F1FJhnYhNRTW1SO77rT/6tF zxk= wang. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XASuMFIx8rM52SP9bBsw3K7/Gs2LD+91ZVuT8fP101t8wTgXJMwK/7HM J7RtyNUX6gI24s4U69NWZwoYg2N1Nfu5jzu0+nmlYPHxMqUYfUUpocUB i6h4i7dCX+AnCBzPOCzbPGS4Dgdws7g7gup1V19zmgr6uiJdDz/TY6cd zIc= wang. 86400 IN NSEC watch. NS DS RRSIG NSEC watch. 172800 IN NS demand.beta.aridns.net.au. watch. 172800 IN NS demand.alpha.aridns.net.au. watch. 172800 IN NS demand.delta.aridns.net.au. watch. 172800 IN NS demand.gamma.aridns.net.au. watch. 86400 IN DS 28750 8 2 104A558919E526604A35B4C96D6832FDD499E5EF07313C628AB27F1E 715C39D9 watch. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . QezgVgFB3fTaQsHJfhCSM6XQa0fwoO9ghBL6ckWR/DO85lvP3I//jQ0l DawDzPFm8chIsQLOyW+f3sbTSJvpT92s+aDuiAJQ2FTvxOaYAKuPOo4S V+zCe8DiYF2nwk/zkoEsMON3QN/bzf77OHOn8Rc79AZWn4q3NQ8hJfou nj0= watch. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . guThbhCIjbUAptB9xDvAYhkzMgbpFH51VmC7xcwTQrIExoziag9s8D0u fyxj9ncTH0EsKu7wTvXwvDaZiEbpnGJVe2Sv55wi8ULnBc1pI01yjuDf yynPPlwZXkHVuD7W2fG4VLhDu7w7//pau/2rP1IKBJ/rcB1jRfBc7AeV c3s= watch. 86400 IN NSEC wed. NS DS RRSIG NSEC wed. 172800 IN NS a.ns.nic.wed. wed. 172800 IN NS b.ns.nic.wed. wed. 172800 IN NS tld.isc-sns.com. wed. 172800 IN NS tld.isc-sns.net. wed. 172800 IN NS tld.isc-sns.info. wed. 86400 IN DS 23807 8 2 A1453299115DB6CC44E33B102BDF276CB93A6A103F6502EA5EF1D4EC F2172640 wed. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Bw1p+4epi4tSQzRxauuHzDgFt+jCIL312X+TSFvvmpKviTucYv5+wsqi L166uyxJJ9mCjBE44qD8d8CwWuAW3IQX7Q/RHlDitgn0Eex2mtynkmsm 50DwCrvVU06RuNKu+XyB2/81e+i4/UDw81fgTGBTPHSD+OmG225ebCLU M/8= wed. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Lj/A0grV+vlJIXvApOa5MrKf1sawIezHpTgkkjaE1Ssro8il7evM/BWy EO4AxXNfCV17L2sXhTP5xYxiGnr4PYd2ArvMMX4rgqchqwlrcJIgQ3cY 5Jf9cUq9qe0XyIhd7X9RbRyl/N5sO99hXEzdhcBb9zpVfLwBMBrmJ9Zi o+Q= wed. 86400 IN NSEC wf. NS DS RRSIG NSEC a.ns.nic.wed. 172800 IN A 72.0.49.1 a.ns.nic.wed. 172800 IN AAAA 2620:171:a01:ad::1 b.ns.nic.wed. 172800 IN A 72.42.113.1 b.ns.nic.wed. 172800 IN AAAA 2620:171:d01:dc::1 wf. 172800 IN NS d.ext.nic.fr. wf. 172800 IN NS d.nic.fr. wf. 172800 IN NS e.ext.nic.fr. wf. 172800 IN NS f.ext.nic.fr. wf. 172800 IN NS g.ext.nic.fr. wf. 86400 IN DS 14407 8 2 7DA5F1EBDA6DDCA8B41F753D9C30C36B8D7D21C362819883D0F402A0 484A6036 wf. 86400 IN DS 33562 8 2 8FC2E75050231829A3468F447D14D28C3CB6A7A1DE814FDC6287180B 06D23111 wf. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . aEtImJmeY37szR8CcrZgJI2qU+IqdHdnOaLNhcN+scE0rRK1mALKP8nz 1+s5PZwQi25334m57ZJliuFgmDA2nyR1pSL3eJm5xqvRR8CjZOisiYoN C2VGf37YD3OYtrNtjorI3BkBY3Ujm4AE4SDq29JjfaN7gWgUE3CevNaE scs= wf. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . gl58UyMZMMdU4moh17qCMJZfeJvn93o9PQQbOG8vN8pBWnmNr85+O0ys HyMqB2FpPx8u3WfR7jgzzzGXR5NCco26hYqT1AEKkkxvuWKZnSAP/Egn qk9zl4hYDjVXVR9pJYXLsCIpSqStwZd+5Qh/mk9fGMiD8kX4mRkTSxTH aUE= wf. 86400 IN NSEC wien. NS DS RRSIG NSEC wien. 172800 IN NS a.dns.nic.wien. wien. 172800 IN NS b.dns.nic.wien. wien. 172800 IN NS c.dns.nic.wien. wien. 86400 IN DS 14212 8 1 C13133146394C4D51F5821A57DF7714C7758B354 wien. 86400 IN DS 14212 8 2 0C2459E744411A5077304E63B4E20E4E877B34F6E1FC3110FEA8133D D894BFBB wien. 86400 IN DS 23090 8 1 955DD806C0A98C7D91296E8C75A1EC636B1A3DD7 wien. 86400 IN DS 23090 8 2 6A4B8394B41753028F4D627E86CF80EF6DE63FD48447A92E3B46854B 9489798F wien. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BPeNakbrXYeXszaY7ZuRIhD08pn5vMIefPCgdHPQezhi8vguMph7AIwt 5YxcY4pfj4Obfsh8FtF/qFjj9MqRPAQeeMzhuQxQf2C4kQ4qhxXfJS+E SNLwI0oeeAgBKx3+2gdEYicWpDRADPrvYc9Xh8rJSJzRgEeGDUJpHFEf 7xY= wien. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . oqBrTMOH+j38e1rnMsuS+swrpAZ+uSkxls4l4nOsL0rCUK/sQLKkd2c6 MUA3gN2ZdEHOlYtDTSsrz5X+L4YEy0pUixU6b9ELxSz25dnFz3+lYbc5 9I5wOwSvocPfm4KDtg5O00rSvsFWQ75SeagcuHh1QElRCIJSgjQh5OAg mbE= wien. 86400 IN NSEC works. NS DS RRSIG NSEC a.dns.nic.wien. 172800 IN A 194.0.25.15 a.dns.nic.wien. 172800 IN AAAA 2001:678:20::15 b.dns.nic.wien. 172800 IN A 193.170.61.4 b.dns.nic.wien. 172800 IN AAAA 2001:62a:a:2000::4 c.dns.nic.wien. 172800 IN A 193.170.187.4 c.dns.nic.wien. 172800 IN AAAA 2001:62a:a:3000::4 works. 172800 IN NS demand.beta.aridns.net.au. works. 172800 IN NS demand.alpha.aridns.net.au. works. 172800 IN NS demand.delta.aridns.net.au. works. 172800 IN NS demand.gamma.aridns.net.au. works. 86400 IN DS 16954 8 2 E60E67E7D2C27A10DD15E494009CF20208178D7E686EBA5C34AA60CF 6BB4157A works. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . h+V+HqZ+YjX3GJx5eTcnCcNYNGhNbmJv37f/5LqT3X+qpI9E9/k87I0C hSMkuhZs2TaAJRLO/ISz/I3oPBZQGPq1XGMlDZJ4x1YL3Zud0Qz5nkDw 3cEV5Yzp58/58boGZVP+u80z1q6HlZPrhVSw3yV3VW/isJPo1cSYFydt 6ns= works. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Yby3sz5j4VTA5v4aKMFa1n3axW9VFJc/L7xU8SN8LvK9xeXUVdhpzWvs 0GMiF7O0TgJL7hi6Pi1gSREam7sZ0CBDc/zLb/LS+BGyHRsqEtIgXxwV AM97bu8rRuVaq55xJvfOmgbrzYP8WpGGhfmSADIngnPeNjbM1HHfbM4j ob0= works. 86400 IN NSEC ws. NS DS RRSIG NSEC ws. 172800 IN NS ns2.dns.ws. ws. 172800 IN NS ns3.dns.ws. ws. 172800 IN NS ns4.dns.ws. ws. 172800 IN NS ns5.dns.ws. ws. 172800 IN NS ns6.dns.ws. ws. 172800 IN NS ns7.dns.ws. ws. 86400 IN NSEC 集团. NS RRSIG NSEC ws. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . dscR696LRma2D6vU5AK2aDXPBw7zqiOjuJBoB2ILcadvRBIPj3pNg7XA jhzdL1xd1d9Hdbfkmz+AOdXjekli2N2vF2PaUqJd2TEPVROkmdOWNFAi asjc+wQ5EiE4tdeg9UM3xWSgk+TBHBOJLqfTK6JnU23eXZ4tPCLs/V8a QV0= ns2.dns.ws. 172800 IN A 64.70.19.80 ns3.dns.ws. 172800 IN A 67.221.178.52 ns4.dns.ws. 172800 IN A 67.221.178.53 ns5.dns.ws. 172800 IN A 64.70.19.70 ns6.dns.ws. 172800 IN A 77.92.65.172 ns7.dns.ws. 172800 IN A 77.92.65.174 集团. 172800 IN NS a.zdnscloud.com. 集团. 172800 IN NS b.zdnscloud.com. 集团. 172800 IN NS c.zdnscloud.com. 集团. 172800 IN NS d.zdnscloud.com. 集团. 172800 IN NS e.zdnscloud.com. 集团. 172800 IN NS f.zdnscloud.com. 集团. 172800 IN NS g.zdnscloud.com. 集团. 172800 IN NS i.zdnscloud.com. 集团. 172800 IN NS j.zdnscloud.com. 集团. 86400 IN DS 9059 8 2 E8079352130447DAA7F3E4809A9D5D208944FE4D99ED148D3BCC933C 05D4133E 集团. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . PnBqYi9XRru4pVvSFanRxQGlvNgy1JhXw9Alk/rBchvhLom0iGHmwEhx nvzRj9H+nN/HNb9e1wTwv31H0ojQsxXHus6480O6JZZ1nHr4dzA+hCD8 JkCIMtECjS2hmqGO8zN2JkjNiG4zqVaAaMlYg/rDu5yhlXeGbd0AKeDy uCM= 集团. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . u1d5FJHJuwrG3oeuMEqipf3guBHqCxB1SBJRI+Myko0PKW7sXgSq6ipe uJtwBw11R+CkQvchmALELBXo0EDDS7svdbYKLs4OJqqdpozv5qOuC4cw ZGJBlIiylW7fq3MYrtm9s3i+ZBTVdyl0RPSXr09ePuF4jQqvOxp4/hdu Pn4= 集团. 86400 IN NSEC 在线. NS DS RRSIG NSEC 在线. 172800 IN NS a0.nic.在线. 在线. 172800 IN NS a2.nic.在线. 在线. 172800 IN NS b0.nic.在线. 在线. 172800 IN NS c0.nic.在线. 在线. 86400 IN DS 16918 7 1 9A0C050DE2A06E4F656D4AF6E289B8AB76E524B0 在线. 86400 IN DS 16918 7 2 5770C75D8F11887B7845A83A145DE52439BF7D86D3F71F07358112C8 7EA43B8B 在线. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . KrH/tLKzv72lOSsE2oXRk+tA9GwZJGeoYxotklRRawD5sPS0XRCH0Og0 CBnzK+0hdTqvq9sd2g9wZpgT+YjfD21ZJJh4BbcgzPZMzVdPPCWRmOAm g7dItHbyFEpBhYMOjZ4rcVHVWhTbqiDIU5IptIM1ZqAe3DHDPLDUZ2b0 rpk= 在线. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CLm/5Ba1YF8h3/2ZZIxh5XoINOKQzcYFyI9zermV5gTZsXaAnqmtq2Bs az7wc0oJpA6s9P7HCN9skc7iRP7OjAWvWIHMMvX1BiTR9OxsqBrmDP3J VgLQ0Yt9TiIMPg656Fn/djx7gB93cyAUyRSt5KAuJCoTbQTYL7021EXt KYY= 在线. 86400 IN NSEC 한국. NS DS RRSIG NSEC a0.nic.在线. 172800 IN A 65.22.188.9 a0.nic.在线. 172800 IN AAAA 2a01:8840:b6::9 a2.nic.在线. 172800 IN A 65.22.191.9 a2.nic.在线. 172800 IN AAAA 2a01:8840:b9::9 b0.nic.在线. 172800 IN A 65.22.189.9 b0.nic.在线. 172800 IN AAAA 2a01:8840:b7::9 c0.nic.在线. 172800 IN A 65.22.190.9 c0.nic.在线. 172800 IN AAAA 2a01:8840:b8::9 한국. 172800 IN NS b.dns.kr. 한국. 172800 IN NS c.dns.kr. 한국. 172800 IN NS d.dns.kr. 한국. 172800 IN NS e.dns.kr. 한국. 172800 IN NS f.dns.kr. 한국. 172800 IN NS g.dns.kr. 한국. 86400 IN DS 27573 7 2 A1C0A1B101F2B31DA2DD995BD0994A6C1E9E34E325FA007E2EA8721D FC4C6CB4 한국. 86400 IN DS 56335 7 2 ED307DC0902F1130ADBCB1B6FBA7C16F76927BD3E33D80FED23DAEFE FF2604C8 한국. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Yu4hoEDcHZyoJLzOF2Uo8RJfSFEVUjP4eJtUwzspMko9vFWbiLofsMSQ r4FP1j0kJi2Wpq9ta0Kd5hm9fCamRZPsKCuhNleyYqQTMXB9dFc4+5ge i+miueof5q04MNBmGb32WvehCRi3TQcL2/TjgGpLS2hQLkOT4w6dQZIU KM0= 한국. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Mae3yC88AvKVdqABNbISNe7tlDJ7RW4FGHHVm28Ler3bz9z2hggRpBgT c5cpMx4KkAW554HV7ZJ0AQ5XdgfAtrlzk2I7rZS02t841Z6iJuWy4Sos 8JeWSiEKcPzhC+JiPwc7P42cLT+STi4uClyNZa23rq/ZOHm4YFrr0WFP wHY= 한국. 86400 IN NSEC ভারত. NS DS RRSIG NSEC ভারত. 172800 IN NS a0.cctld.afilias-nst.info. ভারত. 172800 IN NS a1.in.afilias-nst.in. ভারত. 172800 IN NS a2.in.afilias-nst.info. ভারত. 172800 IN NS b0.cctld.afilias-nst.org. ভারত. 172800 IN NS b1.in.afilias-nst.in. ভারত. 172800 IN NS b2.in.afilias-nst.org. ভারত. 172800 IN NS c0.cctld.afilias-nst.info. ভারত. 172800 IN NS d0.cctld.afilias-nst.org. ভারত. 86400 IN NSEC 公益. NS RRSIG NSEC ভারত. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . DErDSYjA3sj1+V/vKK9Ed3PWZFzG8GH4QBAdcPIUVe9lCW5Q798ZA5iJ 2zQ+kEFqeKQiCM611EJOF7zK7eYAovTGAa+zxHLX/jpuxh0GM/LIn3Cd f9QyhNf6zms2QLwGF8gKuwzjFKpTqvXX9At2sch3JEsEVm4YomS8Vcm2 s+s= 公益. 172800 IN NS ns1.conac.cn. 公益. 172800 IN NS ns2.conac.cn. 公益. 172800 IN NS ns3.conac.cn. 公益. 172800 IN NS ns4.conac.cn. 公益. 172800 IN NS ns5.conac.cn. 公益. 86400 IN DS 48226 8 2 A16754C480E58C0D17126B3BAF93F32BAC39A916CF9D1F6F3A1F5C33 687BE80F 公益. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BSieRNuE6ERvMs+Di0O54pg7FLzcPYgCHQ60x744NyzGDoWaKeKY6W2v JQbQ587dGc4EKEkVp0ORxk6wVZYeLnDP35vBKNEfNwTd2kdnPCeGqre0 uMVTfh03UQMPFp9riD2rec1c/rHHcRL90Do/QABZuMeLEPV4S+keJhPk uO4= 公益. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . PWLHn8l33mVeh81MOKdXXmurA0RWA6IvDCQTmySEk6PXbu2DK5OJxM50 W8u9wyt7i+UUN33okb7nBxKlt1xjzTfWu6XaX4icA3q2Os+vIL0gi6oh zqi6LwI6t4v9QwmwZKyFd3zgUWoEesQ5zyELaULa31DnePvfwp47c7vy tK0= 公益. 86400 IN NSEC å…¬å¸. NS DS RRSIG NSEC å…¬å¸. 172800 IN NS a.ngtld.cn. å…¬å¸. 172800 IN NS b.ngtld.cn. å…¬å¸. 172800 IN NS c.ngtld.cn. å…¬å¸. 172800 IN NS d.ngtld.cn. å…¬å¸. 172800 IN NS e.ngtld.cn. å…¬å¸. 86400 IN DS 47359 8 2 D8FE897CE8AC620CB7CB9F6F4E887FC7A14C3ED80CB973DA4E30A17C ECA1015B å…¬å¸. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . tTLEXp08ytjgLEzCBde3XOPSY80Y/sSxew1ff/qUqx+CuwIfduQje+b/ Ju0TZ5Y+M8sdLP+1+da93AYo8+8y0whLp+N8a6XylRO+/clLIisFNflb ntu88uKLpkOje47EgXyluN7Q4NTS0EKLoAzKcvqljKobgnFMoyNueW1V f6I= å…¬å¸. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . XO5g+9z0JuvN4ebZvwrTvUs+FEOfUNGZCTli95KccfNC/mR/fX6rjWLM UFph+2Gt295lvle5QcRSTUaSPaBHHORENuiFyXa/M3XU5J4s8eqJl+za pivY4VWM5seM8x3fk9BuV61xZFSbm1H9zeaI1PqPZx3rMMhHBLAWUpYh s0Y= å…¬å¸. 86400 IN NSEC 我爱你. NS DS RRSIG NSEC 我爱你. 172800 IN NS a.zdnscloud.com. 我爱你. 172800 IN NS b.zdnscloud.com. 我爱你. 172800 IN NS c.zdnscloud.com. 我爱你. 172800 IN NS d.zdnscloud.com. 我爱你. 172800 IN NS e.zdnscloud.com. 我爱你. 172800 IN NS f.zdnscloud.com. 我爱你. 172800 IN NS g.zdnscloud.com. 我爱你. 172800 IN NS i.zdnscloud.com. 我爱你. 172800 IN NS j.zdnscloud.com. 我爱你. 86400 IN DS 37400 8 2 07C6728C4F51FFD6B1E829D5AFBDEE24A30E710EBEFC50C8D6AB7785 223A0A0C 我爱你. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Lq7nW6vqxS+8pdCB+6BGqzqGcvYG2jDKeo2NJtLeMMjw/vs77YBsZYo4 pwjan3pe22XU7+zEgLjU2P+bni1ybCnc/ZkK4Qa4+hTteFcuYlShMjOA fw+724MSzyVoqYFFSBw9tJOle7hzQeiju/JLzzWfWYry18+pPABRMlw2 LtU= 我爱你. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . tstLRX83R4LsqJbAqW81sGiJaZ32hgu7/djf6Xem0CdDbLssY6mYKV8u suOficHsgZziuOUVCsSa64c7rMSd/uVtO2U9huUtcfeAVyW0yttlhF9D VhDwZ/rFvQxiKd3evOe/eR1uLPWJIMyvngzTSPLFdoWvubQUdsxe4zCr iq4= 我爱你. 86400 IN NSEC қаз. NS DS RRSIG NSEC қаз. 172800 IN NS kz.cctld.authdns.ripe.net. қаз. 172800 IN NS ns.nic.kz. қаз. 86400 IN NSEC онлайн. NS RRSIG NSEC қаз. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . EfGwV3TdT8sdblMsuxgqgOpfG4nsFYuRz5cDOrTD0vRrqXFuxOtsoS2x w/1uRRWudWGIh7KdSUU7X2WrW1rk0gJE8mEvVbZPqO7L58Qr6TxgZyf4 GTzknLV7H7GXlELV8ISP8axNetc6Fu+cnLG2XuJSY8MYmh41bImB1Gz4 hgU= онлайн. 172800 IN NS anycast9.irondns.net. онлайн. 172800 IN NS anycast10.irondns.net. онлайн. 172800 IN NS anycast23.irondns.net. онлайн. 172800 IN NS anycast24.irondns.net. онлайн. 86400 IN DS 54606 10 2 A1A13FCD0AFB413657352EBA09765C81E0BA0AF0B8452F03EB0D0E4C 9661241D онлайн. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . hpEgSy9KcTD62d/ww6+EGDiGm+eedrVv2sdvIq1iV9hXBbQWs3fwUwbu tvSF2PhrQwhPzKSpkALW7DQn+AMoEaeA6dOvHqsFeIbZIq7QsKJkw5kR e++PLJE+mBOXNPjfNk3j+b51bP+2QP1MV3VbIxb1CzcJ539HpXZIF/pQ tAw= онлайн. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . r1WGjaX2jegvx1M/VvwIrghkBQZm0omuz3q7VMBc4VFYjU157PJLyFZq qxrrn4jGzYVoHsZNEUz4x0zIibuhV29Ahgr2AeN4JBWrOVG5B6a6rnmf FhUYN3v4Lyfm2O3XxeT33zJRGGMJQot0ovFDqjedOqtPamsieNpfiDv/ OAw= онлайн. 86400 IN NSEC Ñайт. NS DS RRSIG NSEC Ñайт. 172800 IN NS anycast9.irondns.net. Ñайт. 172800 IN NS anycast10.irondns.net. Ñайт. 172800 IN NS anycast23.irondns.net. Ñайт. 172800 IN NS anycast24.irondns.net. Ñайт. 86400 IN DS 61281 10 2 FD5803E5D6CA1B8B5B3345B8E6AEA0E640988D973AE153713A7BC890 A84E3400 Ñайт. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ggh27DvmjjqH+ZLDGF1PiIZi76bYmLA23N6LJFGvESc2vD+kuQtqZTz1 byRL/iJJshM3G9hOOH3oIUli6k/8OBIna4Y0lYHXvN9on7HOZfbOu4cZ P4HAHpWlZdz4ym3M8PN67tJ6Snf3RGDrvjYW8PECpZZOrl7jepjO3mcO edY= Ñайт. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Uf7ccRl3SVIBLsY9auXgfQMoIsBXa8j5O+KZWX6P49uJ3RpHiLHHCvgE zTrj6c4QLFcNwMPSgJxdsmQgxHzDqJ5x8WTGtd/VrtW8JqDcpi3qz+Fu 3vhw/nxI6iueQx32SgFOandu+XfwYhV+fjM5UnAx+nBNJe/jXZ+XAhct MjE= Ñайт. 86400 IN NSEC Ñрб. NS DS RRSIG NSEC Ñрб. 172800 IN NS a.nic.rs. Ñрб. 172800 IN NS f.nic.rs. Ñрб. 172800 IN NS g.nic.rs. Ñрб. 172800 IN NS h.nic.rs. Ñрб. 172800 IN NS k.nic.rs. Ñрб. 172800 IN NS l.nic.rs. Ñрб. 86400 IN NSEC சிஙà¯à®•பà¯à®ªà¯‚à®°à¯. NS RRSIG NSEC Ñрб. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . i3/3MR8YnRFNg6mUozkmV/Ch6ZQgjQqYHIenqScQEuNtMFutbgucW9IN t51VQnRIcr9Y0LArLG/wUcEgQnZ5ntCVVrcuqOggWO0E/GpHpnAoInhW HIwTZv5EBXT3QDfZL5LJLbOEdXIhoTek+i6aW3m7GHwJg3+Rj42cGYxV Lc0= சிஙà¯à®•பà¯à®ªà¯‚à®°à¯. 172800 IN NS ns2.cuhk.edu.hk. சிஙà¯à®•பà¯à®ªà¯‚à®°à¯. 172800 IN NS sec3.apnic.net. சிஙà¯à®•பà¯à®ªà¯‚à®°à¯. 172800 IN NS dsany.sgnic.sg. சிஙà¯à®•பà¯à®ªà¯‚à®°à¯. 172800 IN NS sg-ns.anycast.pch.net. சிஙà¯à®•பà¯à®ªà¯‚à®°à¯. 86400 IN NSEC 中文网. NS RRSIG NSEC சிஙà¯à®•பà¯à®ªà¯‚à®°à¯. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . bvtKksdhn/JFETDialnP6zxi4s8AoOrVptrKuSM4eGtuT15B7IDiOdnv as7JzEnaV7vtq5kDKu3jacMW+btzzCHtkQJnI0AJwGDdOF5a+YFdq9xF HvdJ9LFbR41Dpg1jNDs9nCeYQObc155n6FC7Ct3X0j6edvIj58ZFgWIA Wwg= 中文网. 172800 IN NS a0.nic.中文网. 中文网. 172800 IN NS a2.nic.中文网. 中文网. 172800 IN NS b0.nic.中文网. 中文网. 172800 IN NS c0.nic.中文网. 中文网. 86400 IN DS 39459 7 1 8CBCB513FF4387B8F6A006D414A50E1A5EA178CA 中文网. 86400 IN DS 39459 7 2 0CB316717E555D102A2E96D53D32EB0AB0AC73F10D3E66E2D225398C 6A30B816 中文网. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . f3pqmbv42ZCBMrEmOv299SAdgscZdCudgf5HYmFBB70aLJnJI1XDK0bJ tBl19YElyo++Dl0ac4YiOox2XwOsIju0YfntfIatWc48gJu9GXrwpk5q M2wqgwMUEYSreSXbyu4QSmoWHU4n6a251ZqWIGxAKxd3+kBzwfjuw1Rz lfw= 中文网. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VBqkNXqXbSJGZEm3VLbA7Z3RnToxcgG99893oCYH7RUiJrVxEOdHdIUo KCWqSGMlCrHFERcUBecJHJUq0zu0gE1Sdxz71G2WTgK+Tj5kcEn2JW+O alNP+rUJaNhOsiOX2+Rn3ZhyL7paC/ldGsScGIom8iblLK15hsGCjD3k o/Q= 中文网. 86400 IN NSEC 中信. NS DS RRSIG NSEC a0.nic.中文网. 172800 IN A 65.22.188.1 a0.nic.中文网. 172800 IN AAAA 2a01:8840:b6::1 a2.nic.中文网. 172800 IN A 65.22.191.1 a2.nic.中文网. 172800 IN AAAA 2a01:8840:b9::1 b0.nic.中文网. 172800 IN A 65.22.189.1 b0.nic.中文网. 172800 IN AAAA 2a01:8840:b7::1 c0.nic.中文网. 172800 IN A 65.22.190.1 c0.nic.中文网. 172800 IN AAAA 2a01:8840:b8::1 中信. 172800 IN NS a.zdnscloud.com. 中信. 172800 IN NS b.zdnscloud.com. 中信. 172800 IN NS c.zdnscloud.com. 中信. 172800 IN NS d.zdnscloud.com. 中信. 172800 IN NS e.zdnscloud.com. 中信. 172800 IN NS f.zdnscloud.com. 中信. 172800 IN NS g.zdnscloud.com. 中信. 172800 IN NS i.zdnscloud.com. 中信. 172800 IN NS j.zdnscloud.com. 中信. 86400 IN DS 50027 8 2 BABDE7E86DF1408E3AFB68043296A68DDC12ABBA6BFA341C7D06C764 E042BEE6 中信. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . SfkPgiZNK6hH+2t2jntE0ceApfGNZJ8po7O94x8HWDPZCcS73r/13yVF Chz3xVi7vZ6pwdIlUxCvI/txI/qPu/YdphG3hk5XRjEoAco+6QzEgQU+ tYUHcVb5ovjmrF4xjzWiGNN3B0bW0m6qo5l6QMKIEcVsnEjltrE1xYtQ cEc= 中信. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . hzGSyC70x0hxml4wsbTl9QV20EFGF9lOlmhxC5Pz17kMhWjitmFXo/5F cZH+PkhmkUiUEBtMQHrz74VUsIHB0Vx9DKHAUBEAQwcDf54yy4V3P11K KLUsQTZgwRkeOWXu2TH1lycmG1lW+dqVur5yOCw7BgPYdczc3LihguQJ Wws= 中信. 86400 IN NSEC 中国. NS DS RRSIG NSEC 中国. 172800 IN NS h.dns.cn. 中国. 172800 IN NS i.dns.cn. 中国. 172800 IN NS j.dns.cn. 中国. 172800 IN NS k.dns.cn. 中国. 172800 IN NS l.dns.cn. 中国. 86400 IN DS 32812 8 2 F190213A4E48C2832B144487130AAB1B782F9B7AF978056C1BA4FB46 302A1B4A 中国. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . id/Etk3p82Kacsy+UiVjKyH6S+gn6XnY+yYl1SaP8zyMWWJmdYgQpoD6 rdcj4gfFNLxb3IMSgvbXZKf3SRcb6xgNXPm7VeoGwi4TkfBBHnI5Tg5M j1EqONjaBEfULY21HbHVj6aKh5yDf7R8tWxaOYY6y4miy7lIt5fijO1W Ytw= 中国. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . H1sroLwSJSe7g/dbnSOlC/85JCALy0xzEhxEugpcCbD/NqDL8iwpIGSF TpOqcsAiKpu3ovJJvzHJysih+tojHF38vAON/Be0cn6iTDFekS2uLca1 XcAfCs0MkB4mbDCGHDa/2daOIb8WpmucsRcwkg0bBSdZZzMGXOo3XPGc Fm8= 中国. 86400 IN NSEC 中國. NS DS RRSIG NSEC 中國. 172800 IN NS h.dns.cn. 中國. 172800 IN NS i.dns.cn. 中國. 172800 IN NS j.dns.cn. 中國. 172800 IN NS k.dns.cn. 中國. 172800 IN NS l.dns.cn. 中國. 86400 IN DS 32812 8 2 BBC7202788555EE77A96BDB7F0B1C91FCA9AFA2982B7AD150F192920 103B932E 中國. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . g7ddnjbKVvUy6ZaseIHWo7sfItop4IfCcns7U/gPXf7HFTIW+pcfXkpa 0ph73fgJaykqENEGr4Men45JzvWz0wi9RoF3L1oKW5n4ItaoI2HR+fYP rv6maTYq0Ys7h/TuOWVoX3k22CoE7PXaKjq+6NLTZ/7kwZqLmRadsUS+ GC0= 中國. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Ng4V8W7Abr4BVeRlJhihDI65RcPcPgRuAOFYB+dq3r3E6GWW2cw30sLt +w372glhf9neVH7kRq8DSw/yAh/gyoFenKBQnW8z9YWyYo/zd8JQgkeg WLToi0e8+V/Oly9vo2fLInWaNzP+v/xm644/929KojlIumYSmAcGOXDp Huc= 中國. 86400 IN NSEC భారతà±. NS DS RRSIG NSEC భారతà±. 172800 IN NS a0.cctld.afilias-nst.info. భారతà±. 172800 IN NS a1.in.afilias-nst.in. భారతà±. 172800 IN NS a2.in.afilias-nst.info. భారతà±. 172800 IN NS b0.cctld.afilias-nst.org. భారతà±. 172800 IN NS b1.in.afilias-nst.in. భారతà±. 172800 IN NS b2.in.afilias-nst.org. భారతà±. 172800 IN NS c0.cctld.afilias-nst.info. భారతà±. 172800 IN NS d0.cctld.afilias-nst.org. భారతà±. 86400 IN NSEC ලංකà·. NS RRSIG NSEC భారతà±. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qDGA366jk/ljN5AEghnbBSV5IWuwx7KqKEuLYmoIS/LZoXEbIcB6tIlR m+2vph1O6vPiGMzvFywkK7qBt1tsU82w1TymXIF3aKP4kztqX024mu90 lGWPoEc6HeubrNddpMNkuY7jje2B3HEgWj2aMPxJsT145iSTctjDoCqY 73o= ලංකà·. 172800 IN NS lk.communitydns.net. ලංකà·. 172800 IN NS nic.lk-anycast.pch.net. ලංකà·. 172800 IN NS ns1.ac.lk. ලංකà·. 172800 IN NS ns3.ac.lk. ලංකà·. 172800 IN NS ns-c.nic.lk. ලංකà·. 172800 IN NS ns-d.nic.lk. ලංකà·. 172800 IN NS ns-l.nic.lk. ලංකà·. 172800 IN NS ns-t.nic.lk. ලංකà·. 86400 IN NSEC ભારત. NS RRSIG NSEC ලංකà·. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . rslFnvqMLs39EaqoIzzZnuN+W7GrV9vgoPkDH+bw0dzkrQjEyy3GcioU 2MJk4Nj6rPd+uUbMHtMWTY/kJerP+TyXwJyiJLl/Yvy8gciezaqMvBYi BbiN/+gYoXRn03jMTuTz9rdA/dJmWAAT2HItfMbFjD/X3jEwXRYlEMIK JLE= ભારત. 172800 IN NS a0.cctld.afilias-nst.info. ભારત. 172800 IN NS a1.in.afilias-nst.in. ભારત. 172800 IN NS a2.in.afilias-nst.info. ભારત. 172800 IN NS b0.cctld.afilias-nst.org. ભારત. 172800 IN NS b1.in.afilias-nst.in. ભારત. 172800 IN NS b2.in.afilias-nst.org. ભારત. 172800 IN NS c0.cctld.afilias-nst.info. ભારત. 172800 IN NS d0.cctld.afilias-nst.org. ભારત. 86400 IN NSEC भारत. NS RRSIG NSEC ભારત. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . BmPygmWGXbtVa71yWIwCA3KUycxPhvM/OYDA+G1q0iL6hYIpIwYjOYJJ 2x/oKkBD3DRZxfHimpVDz7cm0ptht9a5W+Ehmv6I5NWKHrcLbhRJUerg F//l4+FbGQ1EEOH5SfuKr0VC6Zm9P/QHx32VJ6KQpWGH5OLUgH1cAy7j Kf0= भारत. 172800 IN NS a0.cctld.afilias-nst.info. भारत. 172800 IN NS a1.in.afilias-nst.in. भारत. 172800 IN NS a2.in.afilias-nst.info. भारत. 172800 IN NS b0.cctld.afilias-nst.org. भारत. 172800 IN NS b1.in.afilias-nst.in. भारत. 172800 IN NS b2.in.afilias-nst.org. भारत. 172800 IN NS c0.cctld.afilias-nst.info. भारत. 172800 IN NS d0.cctld.afilias-nst.org. भारत. 86400 IN DS 18018 7 1 95E310B21C23FC8C6107A186D68C5FAEECA15A9F भारत. 86400 IN DS 18018 7 2 582ACB8BCAACC3A0AF31597260B8C8650555AC94DEA17C12110AEA90 374559D4 भारत. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . TR5qql8nFvdnAcCMEp9pomW9uB2iGz77Bu+ZWkCCqcXX5LTuc1VME4k8 tdqC1je4GPqjSmI7bfePL0sOajET60A183+rG4sor9XuIcroZ1i7pdlK 8OEpd1dJefs/Cj/AkJc4FAmuiiqHEXzrbSxXWvRmsvuFAqUTbOexrbVw MMg= भारत. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Y3XbaMAF4baXtsvUd2OYih3sMvbIfNBGxSNRi7TS1ccKPl02Iw2wr4n3 MJAbHjLeoVcvKmvrPZ2OxmpmkE5gl6jr2HcDx606uSwbKkZbelgVgJjj FI42jpBsasb8uX7UHZsRvCrJ+jowl83pkBB0bv6Nfc2T365CucP/FroT ev0= भारत. 86400 IN NSEC 网络. NS DS RRSIG NSEC 网络. 172800 IN NS a.ngtld.cn. 网络. 172800 IN NS b.ngtld.cn. 网络. 172800 IN NS c.ngtld.cn. 网络. 172800 IN NS d.ngtld.cn. 网络. 172800 IN NS e.ngtld.cn. 网络. 86400 IN DS 47359 8 2 426DB7D3FB8E6058BE42D379ECD7742B2EFAB5DD0A7A95494D351860 4B715B1E 网络. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . evqLS2QsEXy3KOmSB/i/PK3R5EAHlSGuXGxYNVP0uhJG9BlKkrSOZTam 7XnI4aTPGr2NekWlFuqcUOWPbnsqoJdNu1qjFM2g/XCfzZzvwb5PmUS/ xsihwyptAamFFndiAfzRTBv2pWSTpp5f5Bx7zvASzADRT1Lwvx6STUSo 30Q= 网络. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uVxbfnx57ARwC7e8/WbJWhpxW+gkXFVuFvJ5QWo3TUvHUzlOVyEagIDk Ci0NHJLQlhjxKwz0i0OJw4jz9Cb9HYeGWwd+8cVcphrA1NU5/StS4HkP bk9Q6wGb/S1TGgtDasNfxoZTkddQtoTwIpCQbBdCoxiDo+h0k6nj4x1S mCw= 网络. 86400 IN NSEC укр. NS DS RRSIG NSEC укр. 172800 IN NS nsi.uanic.net. укр. 172800 IN NS dns1.u-registry.com. укр. 172800 IN NS dns2.u-registry.net. укр. 172800 IN NS dns3.dotukr.com. укр. 172800 IN NS tier1.num.net.ua. укр. 86400 IN NSEC 香港. NS RRSIG NSEC укр. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fiL71TokV1nKe938IsrD5hIWuWHDaMOmdsdsaMEss5s5Be4E0PhcnMR7 6AhwCRv/x8fWtwwBE/5pZ0HREP5GbP9fhdRu9RTsMhknTRTA/ZC2xvtQ AjQBwy5AshBb73k66B5R2WjfN1tyl+R76w+sLj9FylpigbssAb/fGsAf +WQ= 香港. 172800 IN NS a.hkirc.net.hk. 香港. 172800 IN NS b.hkirc.net.hk. 香港. 172800 IN NS s.hkirc.net.hk. 香港. 172800 IN NS t.hkirc.net.hk. 香港. 172800 IN NS u.hkirc.net.hk. 香港. 172800 IN NS v.hkirc.net.hk. 香港. 172800 IN NS w.hkirc.net.hk. 香港. 172800 IN NS x.hkirc.net.hk. 香港. 172800 IN NS y.hkirc.net.hk. 香港. 172800 IN NS z.hkirc.net.hk. 香港. 86400 IN NSEC å°æ¹¾. NS RRSIG NSEC 香港. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . S+FLxqJwYITfqX/W3EzLNRx4EMeVFsPghPqScxIOLiedBGDTB1WLiEg8 GZByiJ/oBrW3lZ2ovuzNOAi7RLvMPwekCslBixK86nT0fIm0mOn7msL7 MMxCnc6H/sIzxzOTdYChlSgl+FjxY5/3xGYST57Kbth7EdZzkXI9qxNS npU= å°æ¹¾. 172800 IN NS d.dns.tw. å°æ¹¾. 172800 IN NS e.dns.tw. å°æ¹¾. 172800 IN NS f.dns.tw. å°æ¹¾. 172800 IN NS g.dns.tw. å°æ¹¾. 172800 IN NS h.dns.tw. å°æ¹¾. 172800 IN NS sec4.apnic.net. å°æ¹¾. 86400 IN DS 9616 8 2 80D599F98E6304BD800DCA9EE0F73EB319414430413A2DFF5C010754 D137F1BD å°æ¹¾. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . K01GYjMBOk/ZRXp8vo87t63vDzYhOdK/bFyYzK1zcIEE1Zg9pGKaBaeM UpDGgQ1RZ8eNdfI4azEA6aQHeBnerxEA+dPNPEHaWnb9S95d8kzKvzS9 7HJSGBUC8b0YSWqD/sWp7+jqe1uRElUZEKzBt1eT0bSpsRDMvgEHre2o +MI= å°æ¹¾. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . YAh35lmGhs9k00Mz+xrsPFdUEKoQpChA8kyI4yk/Wo/R9ziLSiVjBMEA AhzKmxW2eVsNEr7wYG9ndewMCVcgrxFZLgYnL9U/fneHhkVTDt7MoH5e Z9yVBhrPH0a5lClbqGPTF0EHuNttm8yLcxF2h1xmC1nbXyxcuV9cPkdY 8VM= å°æ¹¾. 86400 IN NSEC å°ç£. NS DS RRSIG NSEC å°ç£. 172800 IN NS d.dns.tw. å°ç£. 172800 IN NS e.dns.tw. å°ç£. 172800 IN NS f.dns.tw. å°ç£. 172800 IN NS g.dns.tw. å°ç£. 172800 IN NS h.dns.tw. å°ç£. 172800 IN NS sec4.apnic.net. å°ç£. 86400 IN DS 57757 8 2 99EE3CDDCD2A85DB01D3A1E13D019821D30E3D4F6B49E4260B402FE7 D8A3E85A å°ç£. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . pXPhfVu3gzDCx4zXaBJUybpujCfK9xO29s/nf1BHMGVn2fIyFVy8ip4U b7uj92BZo5yoMq54680Qsq7Ag4/Is/UNxRA0Oz/P4Lw4wcIbVc0EcLFs ZEtAHLjTBEmn2UvA/x+n9TVE1mqbvIt1xfS/kGjnGgk+2MMmqW4Eqd2+ DTg= å°ç£. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . smMRiRcWtAaR9NTH4E7GbS25auj6z1OPTn2dpIx06ig7Dm0uUQbMz2tP g0Z6CWs5nmkCf+V968bQ3WSjarcULLZuPQ9asxVQUriYclj63vFXDyrf h9mLFzQ+8Al3sgns+P5XDxRJ3wehEOS8rL/E2W/JG8ydQR/GwNy004Y1 4/Y= å°ç£. 86400 IN NSEC мон. NS DS RRSIG NSEC мон. 172800 IN NS ns1.idn.mn. мон. 172800 IN NS ns2.idn.mn. мон. 172800 IN NS ns3.idn.mn. мон. 86400 IN DS 29566 5 1 07D52F8F36FECED48212940E021C28E40274CFC6 мон. 86400 IN DS 29566 5 2 6029C4759FF53E279A93E13C146DC52BD7017291FDFE799C220C17B5 EEE95ED6 мон. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . CjJWPQAx+ur7J6pIc+xV9h65kcEQjfV0rQ3ZUlpXvSzw07J0BPz7y9tu 3s7Z6ZPZJrjLcN6rHnZ1DyZxu+po1WHxMr1cMWAD0aosY9MNWPj9rEQY xQbE/+MTDO2SVAje6v9LdvLTUk7MMMKli70L53Xhem26UsqCuNA5pK6i REI= мон. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . RdS2eRw9Aul2TGHCC8NUPWpeRUdFvfyjAOFt3JCIbIDvrpEi/xbIHq5Z nXWPgrHIWOSmLvAXHi6gzms2+Dipd6PpeW/QnRsX1a8eas8nm6nfm99D Pok/0kUWPNlYPlMAdVsf/4yUHpQRyKgW3hMJ/a+nLDM3pjEUR3bPbYu4 noo= мон. 86400 IN NSEC الجزائر. NS DS RRSIG NSEC الجزائر. 172800 IN NS idn1.nic.dz. الجزائر. 172800 IN NS idn2.nic.dz. الجزائر. 86400 IN NSEC عمان. NS RRSIG NSEC الجزائر. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sck7ihx1tQGVWPYWSskncfyLZEdEqBdaMnaM4ENr1CW2u0ZP2F0TtAfj rc8HvwyBcb0WZ1zuys9/t+6pcGJfe+LXzdZRc5W2g6D9oK1YOGa1oaHu IY/XimuUlEsXK268j57NQ96Pg5HAn63PbMqfse+MElh8FNKORsugN+Da CuI= عمان. 172800 IN NS ns1.registry.om. عمان. 172800 IN NS ns2.registry.om. عمان. 172800 IN NS cctld.beta.aridns.net.au. عمان. 172800 IN NS cctld.alpha.aridns.net.au. عمان. 172800 IN NS cctld.delta.aridns.net.au. عمان. 172800 IN NS cctld.gamma.aridns.net.au. عمان. 86400 IN NSEC ایران. NS RRSIG NSEC عمان. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . kvjQcFgHF+cHFUTkPQZqaA6JnYSx3j9Yg/kMTl7o8cBBziUTuZWDJ8DI q51UHDjITOr/VkZ1DpHfmPzHaqratuL+/zblJEsLMMHyOAglfYYPd/9m /F5EPnoTu6MZ7X8DOJeva6N5IRR4dtQr1ICGmezge1++WKBvqLUe4fHu 1IA= ایران. 172800 IN NS a.nic.ir. ایران. 172800 IN NS ns.irnic.ir. ایران. 86400 IN NSEC امارات. NS RRSIG NSEC ایران. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . pOY8Ge0aKk96qWkN2WzqstmEbisborUChTasZUZB50ePJOILArb9Qej6 Ocnk/FAriI93t0Wo4vbs10KHhfvArHxHLsSkSzD4uuyQWv0tVK+wsrFF ZuQ+U+7ff80DjgUw5X5dyFTUcD4fozBmTKWhJv61CRPIn/VRg+9qHfOi LsY= امارات. 172800 IN NS ns1.aedns.ae. امارات. 172800 IN NS ns2.aedns.ae. امارات. 172800 IN NS sns-pb.isc.org. امارات. 172800 IN NS nsext-pch.aedns.ae. امارات. 86400 IN NSEC الاردن. NS RRSIG NSEC امارات. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . sHpT0pDcoMgyw55NEpZtfUtwacfRrM7Wxw4sz4UsynuxBniLuhJWRJxe 7IpalVh0QmrcP4v/93S8dK4o1Iz3l1EmbVSeAVJtTRp/Kp9UoGzpqEbs AIRzROwCNO6N+R1nCFgDER0PTSU9A9Upcegqyb0crAmA2AtIVOIamOwp vh0= الاردن. 172800 IN NS jo.cctld.authdns.ripe.net. الاردن. 172800 IN NS rip.psg.com. الاردن. 172800 IN NS amra.nic.gov.jo. الاردن. 172800 IN NS petra.nic.gov.jo. الاردن. 172800 IN NS jordan1st.nic.gov.jo. الاردن. 86400 IN NSEC بھارت. NS RRSIG NSEC الاردن. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . jaQYhZGd4pdjLMuhsESVkfV0D+NAz3J/SHTDrLWRCoeMMqW/X92kfFqp 5FOxp2KikZQeZfv9L2zNGexcaTe9E6OrevhIm34JIUap7liaEP6tEGkZ Yrltf3Z6QCYpRe9GJBPp22SAa8r9leibNFO/pHSv8Qtz9a7YZCXjt/HZ GEw= بھارت. 172800 IN NS a0.cctld.afilias-nst.info. بھارت. 172800 IN NS a1.in.afilias-nst.in. بھارت. 172800 IN NS a2.in.afilias-nst.info. بھارت. 172800 IN NS b0.cctld.afilias-nst.org. بھارت. 172800 IN NS b1.in.afilias-nst.in. بھارت. 172800 IN NS b2.in.afilias-nst.org. بھارت. 172800 IN NS c0.cctld.afilias-nst.info. بھارت. 172800 IN NS d0.cctld.afilias-nst.org. بھارت. 86400 IN NSEC المغرب. NS RRSIG NSEC بھارت. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . cHxg1wpHnIC8FtHot5KcGv19W/+fq9PxOA+1PYXp8yG6U0Mqe/w+FW0D bhXS0RxEELcaWr8fVo1FWeRwO0a8Zpvu0G58JKu6j5qr3wx3LGBkb1zJ NJdI/eeXqwR25hisy3i+0thfaXNID6T5j7xJcxqYymOXSKSfmnRivXT9 RmQ= المغرب. 172800 IN NS ns2.nic.fr. المغرب. 172800 IN NS dns2.menara.ma. المغرب. 172800 IN NS dns3.menara.ma. المغرب. 172800 IN NS hariss.anrt.ma. المغرب. 86400 IN NSEC السعودية. NS RRSIG NSEC المغرب. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . nwyiioNumkvNB7OtUB8PlQhM5AMtlQ7XNl6GaBskSlMyiXbyGXxNqqho ukLXv7aoC/BnqNX4pdZvuctZ+Ow1w3kR0FVI+Pxr95/JxfyE3HDfi9v+ ABGLjA3C0TzuXe0RogvCQJpOihv0oGs11B6Ojb0jm7j+UrryaEHochgF vpk= السعودية. 172800 IN NS ns1.isu.net.sa. السعودية. 172800 IN NS ns1.nic.net.sa. السعودية. 172800 IN NS ns2.nic.net.sa. السعودية. 172800 IN NS sa-ns.anycast.pch.net. السعودية. 86400 IN NSEC مليسيا. NS RRSIG NSEC السعودية. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . MZSeq6PuwmL+Aedjtal8dZ6uIUt7o+wlqf2rovs1tdM+UCYQYrQJ7NVD 4m/k2C5y869LtLheqCeQtaS0NcoPDCh7PCgOLH2a73neK71B6xyWn/wj b1Ju0IsK7uOORAevR5uPHBdQU6J/mWOE72V6Gr51ybz/JDKgsqZQ6WZR 6nw= مليسيا. 172800 IN NS dns.mynic.net.my. مليسيا. 172800 IN NS ns2.cuhk.edu.hk. مليسيا. 172800 IN NS ns5.jaring.my. مليسيا. 172800 IN NS ns6.jaring.my. مليسيا. 172800 IN NS dns2.mynic.net.my. مليسيا. 172800 IN NS ns20.iij.ad.jp. مليسيا. 172800 IN NS ns30.cdns.net. مليسيا. 172800 IN NS ns-my.nic.fr. مليسيا. 86400 IN DS 17106 8 1 95B6E1D09E818E13B8FBE777482C69109A614E4B مليسيا. 86400 IN DS 17106 8 2 BDB33EA391E14E2535C4F2E3770408D2139A892A1DC8B5CF5EB9DF42 FFB6B1B4 مليسيا. 86400 IN DS 21138 8 1 B7B8D9E0586759075371771EC5FE4547438192AA مليسيا. 86400 IN DS 21138 8 2 CD5A25C027734679E3701C7C51413C525CBA12EDECD006549F93CE9A B1AC47C5 مليسيا. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Z257EIqLpeKZwLPIRNuVG3l+kCSbn+e4EAVhadiDkKIunQZt+4XG7/F8 vutZimuz32TMrlP9d8LAtSkB4YxQtC5VylS16sgfs300Qh8teVkRw8RV uwY66NV3ISMltXm8fX9ox/p4Ow+0uR8eGETDvjDcOzv/QLPL8LxgPkhg q6I= مليسيا. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . s3F96a1t+c+f1MrtjePOHMeeAMncYM14UX8FR8yi5j3QeEnucrxZbCvd Zik2Msyhbmgu8j7zxNqzQR74JjX8Uta8rbZwD54O74xc5F9l+L+QN8T9 UVl6kE8mHMR1TpTj+5VBNbBeKKwcVYyp3kDLoMSuf59kVVD/WQCxLZYp OmU= مليسيا. 86400 IN NSEC شبكة. NS DS RRSIG NSEC شبكة. 172800 IN NS a.nic.شبكة. شبكة. 172800 IN NS b.nic.شبكة. شبكة. 172800 IN NS c.nic.شبكة. شبكة. 172800 IN NS d.nic.شبكة. شبكة. 86400 IN DS 20736 8 1 0AC95C7D70A0A3CCB3E8351F6416663B941230DD شبكة. 86400 IN DS 20736 8 2 851A2DD716C38C5325818FB56E53D8F2E340C098F8AE9DC531601F49 F4D8B943 شبكة. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . nM3g5Bdb4Eeflpf7AgcOlmFczh4nWFiV/AI+n0ABpfd2aMpSRiywr4Wr krbTWTYGInX1T5BzwT2Tg1WleoChEem6+aAlGJien3uwgNBSzbl46YHu jGChBJl2fYGXABdrIhOtJjPt/Rj2PY+5KS222HuH9X4QS3orPJxnCfS5 tkc= شبكة. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . WBVmMyKet7hlsXUTx0rgR/5Fd43BXW4ac0b6pIbQVDadzLSFqa9ag5Ma ZVsd7Y1G02GiDW9GCVaM0Zbd9Z4gj/hz7VTfk4B5yTXnVRg06SUiemVq QrULVF/tW3vIpbNFC6OSsdjstO9P42poHG+9QJQbRTwy3dCafTqa/QH5 I+k= شبكة. 86400 IN NSEC ไทย. NS DS RRSIG NSEC a.nic.شبكة. 172800 IN A 37.209.192.3 a.nic.شبكة. 172800 IN AAAA 2001:dcd:1::3 b.nic.شبكة. 172800 IN A 37.209.194.3 b.nic.شبكة. 172800 IN AAAA 2001:dcd:2::3 c.nic.شبكة. 172800 IN A 37.209.196.3 c.nic.شبكة. 172800 IN AAAA 2001:dcd:3::3 d.nic.شبكة. 172800 IN A 37.209.198.3 d.nic.شبكة. 172800 IN AAAA 2001:dcd:4::3 ไทย. 172800 IN NS ns.thnic.net. ไทย. 172800 IN NS dns1.thnic.co.th. ไทย. 172800 IN NS ns-a.thnic.co.th. ไทย. 86400 IN DS 18280 8 2 1C51573C20577DCC978567C0F4F85056A0DDEFEF2DCF4919BAE35BB0 93EABA12 ไทย. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . ixc3a2S3aYpxlE7zP21exZc84ag7WWefq1AiAHju+sE5bRb12vRQ3yhe VUNbTQBEer1re8uKYZ7MBru+ZM4PfDTEK3vQkatRwAZbCBhJyhCH0wml xatYOUt6+0lP63RcpHPBgQdTwcAFsYv3tWWUI3w8hhWUJj5xhdRnTYDs Edk= ไทย. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . W+NQGC1U9IqFAxChAt2w8Fd/uNvZ0qLtS35BIrijncizJHRepkr4MjLy is4DFEnNweKds75CMHQmBaZmnbmmSxs2rbk1Zg4WOEd5v1jDTeD8sYgt IW8DkaZykJP/hPgkE452pzgI6zSkJdsQlte4YVO9OEBpliDsJKViwPwd l5w= ไทย. 86400 IN NSEC سورية. NS DS RRSIG NSEC سورية. 172800 IN NS sy.cctld.authdns.ripe.net. سورية. 172800 IN NS ns1.tld.sy. سورية. 172800 IN NS ns2.tld.sy. سورية. 172800 IN NS pch.anycast.tld.sy. سورية. 86400 IN NSEC рф. NS RRSIG NSEC سورية. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . iCyIvVh+DM2hXhDE5M6jRDzClAP4+bzuxtkK/vcEV8Lsr61ALsgtvFZn adlO5cO00qxshVRPxMrhzE3lz27uGMB0krj3S7ve7KQoALoM0EMy772B OfY9Kie9pJlZkfA1Qyjvs8uyXSQyJOzAoKql325JUc7iSJwNAGslNeeO exY= рф. 172800 IN NS a.dns.ripn.net. рф. 172800 IN NS b.dns.ripn.net. рф. 172800 IN NS d.dns.ripn.net. рф. 172800 IN NS e.dns.ripn.net. рф. 172800 IN NS f.dns.ripn.net. рф. 86400 IN DS 60169 8 2 44F3965D9E0227ED99414740A1C7A7651A60ACBC6C80942C8AE9916F C323649F рф. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . Yr9ngyjsdX6SOrzd7BIYCByl9059/SLn3TTvL0GLOhyO48TEReeM1UUn UHqQdVpM1wrsgIe+ExuEJ8qy4SX52OR6Nrv4ZiBq5EgFpM1FTZfllSGE 8TTJT1HXc08/N6COBDbAO9lFOMEP01vAFOaN35R9cifxgvbg7vF5pqQq SIA= рф. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . UPctlLdKR4YMzt3zGOjuaIHVv/vkqTPv3/7/pb71BfTlZoCkWzTb5xZw x9OBdOAK6YVshTJSfeaNPyZVtksiwwn4i4ViGgFdVGJxO08MjwSH/7L3 KavO9Qqyx+5J/tAsGGcE9nXIVQIA5T8LPfH0VzQWsA2a9LWAp1TsFPqx 9KY= рф. 86400 IN NSEC تونس. NS DS RRSIG NSEC تونس. 172800 IN NS ns1.ati.tn. تونس. 172800 IN NS ns2.ati.tn. تونس. 172800 IN NS ns2.nic.fr. تونس. 172800 IN NS ns8.ati.tn. تونس. 172800 IN NS ns9.ati.tn. تونس. 172800 IN NS ns-tn.afrinic.net. تونس. 86400 IN NSEC ã¿ã‚“ãª. NS RRSIG NSEC تونس. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . CsQGy8PV1q6812nmBDtfVdzeC9Bh3H404uoZ5gvHjgX4TMGDcFnRGCjU wEjMKKNo3GBpAydnVvTav79KtUZX+al7zxs7JflGlJclvviqU7Y52ZdM 09Glgug9vkekdo7HtabSWedHPgiwlOkTdJMfT3n49FcNMdjEx2QoqrQf so8= ã¿ã‚“ãª. 172800 IN NS ns-tld1.charlestonroadregistry.com. ã¿ã‚“ãª. 172800 IN NS ns-tld2.charlestonroadregistry.com. ã¿ã‚“ãª. 172800 IN NS ns-tld3.charlestonroadregistry.com. ã¿ã‚“ãª. 172800 IN NS ns-tld4.charlestonroadregistry.com. ã¿ã‚“ãª. 172800 IN NS ns-tld5.charlestonroadregistry.com. ã¿ã‚“ãª. 86400 IN DS 20827 8 2 CFA6056748CB21C3CFE41EC0CDEE6D9FA1B78C0A76133B94393357BB 71BE7E02 ã¿ã‚“ãª. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . BF2L2cjQohhwsv5DBSlU3RRhawTYW0WlZ5O5vTQTR4FrvHSeBRfc9yDy Ab+0i/OymoW/wx66f/0HxbxIMMWX3XASFjcrKI85D7xhyjGILqsBRvO1 D2A+8Zbomlesydl5Y0TF/axuBoxZM1E2h/SF+kl7hDYOpk0m4W4qbtjl ytk= ã¿ã‚“ãª. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . qMLuXjCzZ0naVoX/eD8vxx8qu+jJiGm0Re9oXVC6ctiwlAPhpCgT/uqj WrpX7lSD8tuzIG0O6k5IhqcoR+F9Ud5vfK5sp+Uk6ArUhOsz/4jnc4su Hgqx233+ktdJWbTLUFtw06eEnJfS9S9q+xt4m0jrlwpmpeFwCoILBJAn g5U= ã¿ã‚“ãª. 86400 IN NSEC ਭਾਰਤ. NS DS RRSIG NSEC ਭਾਰਤ. 172800 IN NS a0.cctld.afilias-nst.info. ਭਾਰਤ. 172800 IN NS a1.in.afilias-nst.in. ਭਾਰਤ. 172800 IN NS a2.in.afilias-nst.info. ਭਾਰਤ. 172800 IN NS b0.cctld.afilias-nst.org. ਭਾਰਤ. 172800 IN NS b1.in.afilias-nst.in. ਭਾਰਤ. 172800 IN NS b2.in.afilias-nst.org. ਭਾਰਤ. 172800 IN NS c0.cctld.afilias-nst.info. ਭਾਰਤ. 172800 IN NS d0.cctld.afilias-nst.org. ਭਾਰਤ. 86400 IN NSEC 游æˆ. NS RRSIG NSEC ਭਾਰਤ. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . EflGVmrI6mHGeKjzrDh7A1rB4LznfeA6UotVclz/5EcaSsENRut6oMnk J1iYMDiHGnqU/LlINVTUqczqD+xmRjdgAdwg7hmTyKbA14hdpsAeJMRQ JK8+W5Jb6KwDhdUE8KPyCFCEHN91qXn0aS5SSmWDKVkJc4cP48abBmk+ IBM= 游æˆ. 172800 IN NS demand.beta.aridns.net.au. 游æˆ. 172800 IN NS demand.alpha.aridns.net.au. 游æˆ. 172800 IN NS demand.delta.aridns.net.au. 游æˆ. 172800 IN NS demand.gamma.aridns.net.au. 游æˆ. 86400 IN DS 27607 8 2 6C4C1CBD05BCA28A60B397ED8AC77783D7592EB50028FD3AE8A59BB5 758984D3 游æˆ. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . GaTkhnW3DS/3BU7vygwfMEgLinqlBWlGnYtqgcYWTEAOnNH1i3tV8ty3 UMsaA/X3aG0HzTbHS3Ak0FAg5Mv0Z3AJ6dphj7FLhTvitR4nLD20u+lb 7m+ZOtCoCud2bvUjfeEnRYln++R9sx1RjZnSfvB+r8HVkspb8ua6Mn1u hIE= 游æˆ. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ShDoyT5aJAO3mwnYDs4h2WNkVAMqZA1ah8xcRUGQdbvGcXMTFOvfRq3u nT/hqsSagzbxmXZm27kkM6/K4l3NuWrqkvNOoBVOEoIjdC3OAyq0TIpm wPd/w3IdTKZonjZ4AcZc0ogFi3GiBX0KQH/Wn9ZLthSIeG0iLmHdmtm6 vHU= 游æˆ. 86400 IN NSEC مصر. NS DS RRSIG NSEC مصر. 172800 IN NS ns1.dotmasr.eg. مصر. 172800 IN NS ns2.dotmasr.eg. مصر. 172800 IN NS ns3.dotmasr.eg. مصر. 86400 IN NSEC قطر. NS RRSIG NSEC مصر. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . SfFey5rW4yT3l5O5A+N46Z1XwYiAJuI+eu6uyBStkjmY8NKpuFFibOOg 7ojOBl1ukxZY3y6Fh0HYpAYhUOgoCTSc3H5BH8Cb5diOJ+SkyKU3etDQ e72krNtF8hE0WgnnUYgDfW8Wsz97QHDgvbLF9k+hnDG1PCg5ihANKKLG qYE= قطر. 172800 IN NS a.registry.qa. قطر. 172800 IN NS b.registry.qa. قطر. 172800 IN NS c.registry.qa. قطر. 172800 IN NS d.registry.qa. قطر. 172800 IN NS e.registry.qa. قطر. 172800 IN NS f.registry.qa. قطر. 172800 IN NS g.registry.qa. قطر. 172800 IN NS h.registry.qa. قطر. 172800 IN NS i.registry.qa. قطر. 172800 IN NS j.registry.qa. قطر. 172800 IN NS k.registry.qa. قطر. 86400 IN NSEC இலஙà¯à®•ை. NS RRSIG NSEC قطر. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . uQS8giAbmhd25xcXeQvEBkKVv2UTyPrByXIAoSIJ4wolN0qwa1F4tJa1 m8sMeDvzc/o3ASi9naAXh5VlqYjQ2o56GFMJUGnxXMR1FklxLiE/ox7f z/wIRpkNzJhfNsy2VHHik5V0W/+9v24uSYNBx+MB0tU0/uDX349wWZHD RSk= இலஙà¯à®•ை. 172800 IN NS lk.communitydns.net. இலஙà¯à®•ை. 172800 IN NS nic.lk-anycast.pch.net. இலஙà¯à®•ை. 172800 IN NS ns1.ac.lk. இலஙà¯à®•ை. 172800 IN NS ns3.ac.lk. இலஙà¯à®•ை. 172800 IN NS ns-c.nic.lk. இலஙà¯à®•ை. 172800 IN NS ns-d.nic.lk. இலஙà¯à®•ை. 172800 IN NS ns-l.nic.lk. இலஙà¯à®•ை. 172800 IN NS ns-t.nic.lk. இலஙà¯à®•ை. 86400 IN NSEC இநà¯à®¤à®¿à®¯à®¾. NS RRSIG NSEC இலஙà¯à®•ை. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . OArTrLjPgP029wmBrcGnKQYCWfDIRQHgZjgPVvHsCPZK2o/QdTiuCMPP hGGbqu2BESpjrcylHE6PISgFqwYQjJcmivh6AyDKQTQPjgEwdznuxYPI hb4Vu02F5XAGWkfXLKH2BrbDrXDgSAb6mqE0cuoqEvxAYJ1ngmWqUMnF cdI= இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS a0.cctld.afilias-nst.info. இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS a1.in.afilias-nst.in. இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS a2.in.afilias-nst.info. இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS b0.cctld.afilias-nst.org. இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS b1.in.afilias-nst.in. இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS b2.in.afilias-nst.org. இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS c0.cctld.afilias-nst.info. இநà¯à®¤à®¿à®¯à®¾. 172800 IN NS d0.cctld.afilias-nst.org. இநà¯à®¤à®¿à®¯à®¾. 86400 IN NSEC 新加å¡. NS RRSIG NSEC இநà¯à®¤à®¿à®¯à®¾. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Y4iHMjNBt4TnhZDrCL4qvPMLPPvZwTv59J+Er194P87qNlJsWcSFUtYV +GFFxxI3aNOfpjBTCWuEgB/7OFyyF4/sbeS6nj8RkVo1Tz/ZQ7nHm2nB QCxRAGXD0crVK526zrkSG7NXi2N/L137XcfYC45tr/EY6hp4vjR+Vhxq NHE= 新加å¡. 172800 IN NS ns2.cuhk.edu.hk. 新加å¡. 172800 IN NS sec3.apnic.net. 新加å¡. 172800 IN NS dsany.sgnic.sg. 新加å¡. 172800 IN NS sg-ns.anycast.pch.net. 新加å¡. 86400 IN NSEC Ùلسطين. NS RRSIG NSEC 新加å¡. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Kdh9+6B3HGdqE8ckleBHPV5CTtkokRaaZz/MSKwavSy3txmF+cnX+szJ xLOWg7S9Kw3CO/9pyCSqAjTR+19QcM1flX5bHQ+967TfLo/B4S3epYVg 2oKBsapyUv5Iu+MmAImr2/FtNXTKZ0oRSA6i7fZtrZWpu4hBW5KQRvEh 0sk= Ùلسطين. 172800 IN NS idn.pnina.ps. Ùلسطين. 172800 IN NS ns1.pnina.ps. Ùلسطين. 172800 IN NS dns1.gov.ps. Ùلسطين. 172800 IN NS dns3.gov.ps. Ùلسطين. 86400 IN NSEC 政务. NS RRSIG NSEC Ùلسطين. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Fsje4oJkSMf1YrQf/JvMmwGtMWJYFyg3QkJuCZkon9vRCZk6urHilnF4 jw/FB3h9KzmjrJhZYOgqwo+8hSuz8m9apxMUM9cA79xtealRmn2EMahS HNMwVWdc5hhJaSYiypunkfrQCyj+PVfBfN8jRlgy06cddL8diP8emYxZ kmE= 政务. 172800 IN NS ns1.conac.cn. 政务. 172800 IN NS ns2.conac.cn. 政务. 172800 IN NS ns3.conac.cn. 政务. 172800 IN NS ns4.conac.cn. 政务. 172800 IN NS ns5.conac.cn. 政务. 86400 IN DS 51421 8 2 9D673623E84D7E10B2AA5B376A3F617665F8B38EF442E8A7E86F0F18 161C7801 政务. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . jLCqOxR7nljCcwWimMAs/YzhzKVSBOOk3xc/UUSOfXOjJKHh5i5bgpS4 d28njoXKIgeZz4Hu/i+bGP4P7vE2z3DJizwsqNVOV2fqmYWliI93xrpL IamwlHwmG/Qbz6FaNZrdGcbTgxF7LN4bbnel380fEC33mf5oAqfrKyjv YfQ= 政务. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . ewXCISxP5H1zNNwKpJhgDjrx07VEziLwlVKLIC0daWt8cUc8zThLm/Rg bqcM9qQPFUp/nOyCjQiY31pd/fYMhvS+5VntBWeULQioHyOE3upCh1S2 sIVlvEiXV8LenFS13UPQgJ8ee+uPSVIMCBsVcHub5S4Q2batndvEDj76 9nQ= 政务. 86400 IN NSEC xxx. NS DS RRSIG NSEC xxx. 172800 IN NS a0.xxx.afilias-nst.info. xxx. 172800 IN NS a2.xxx.afilias-nst.info. xxx. 172800 IN NS b0.xxx.afilias-nst.org. xxx. 172800 IN NS b2.xxx.afilias-nst.org. xxx. 172800 IN NS c0.xxx.afilias-nst.info. xxx. 172800 IN NS d0.xxx.afilias-nst.org. xxx. 86400 IN NSEC ye. NS RRSIG NSEC xxx. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . n76kvl6WCEb2Eq15zfSjkjOUakeBAnv6fjh/sHxbKouEyTuNW/JHvAru 9coElmorxWaHVUEcmRfSAWNW9XGpWmP7NSjwM3YL7avBtF0uV9lRr99A DOGsWNrS1d6twxBsH3qgbWSAZTdWb9XTJw0y2/j/IFK3Ja4gSSXCn1Sf XSE= ye. 172800 IN NS ns1.yemen.net.ye. ye. 172800 IN NS ns2.yemen.net.ye. ye. 172800 IN NS sah1.ye. ye. 172800 IN NS sah2.ye. ye. 86400 IN NSEC yt. NS RRSIG NSEC ye. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . quaWbnEQgZKulPN0rUCnVdo+9HBSRJTVy1YkAo/E4aMIHKFDjGqF51Mw jhbuhhn3n1a+0J4slcvGXsJ2za8ZDciJx05KrFCpstLswwYARvQfhayh vEJlOqkf4CYBEdnYsFLtHHcW34wGd2EKGR9eOMKJ69uTINM7ruXm6XRL ViI= ns1.yemen.net.ye. 172800 IN A 65.162.184.33 ns2.yemen.net.ye. 172800 IN A 65.162.184.34 sah1.ye. 172800 IN A 195.94.0.34 sah2.ye. 172800 IN A 195.94.0.35 yt. 172800 IN NS d.ext.nic.fr. yt. 172800 IN NS d.nic.fr. yt. 172800 IN NS e.ext.nic.fr. yt. 172800 IN NS f.ext.nic.fr. yt. 172800 IN NS g.ext.nic.fr. yt. 86400 IN DS 18257 8 2 8109F3831FE1714980A8BD00AC12B56A8F7C2556C6F9FF6C02DAD278 5D25B23F yt. 86400 IN DS 50602 8 2 32C66E2C3E3B541B84AB453F7E6E9F12603586422ABD2FAFE3053574 A417A403 yt. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . G2JFm1s1QFnEAfR4PyCsNlnRDsRhZv0zgYiPaBEdTcleo/wWUBka86hD mJU/lG4I/rOVeAN0UoNWHDrt4XTuwBSNifYPL/GE0R1a6prKKy1ieB4K SfqRAS80n+ZT9sFFb823dcEnQU9DCVenMUSG7p34HON6WFGp16OqgvEG Hms= yt. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Zsz2E3IoXnJ/Yvh9cUpyYl8hXPDFOpeHu0njgvC6R5k2PaxpmqzxxKkh 54m5X98Nr5ykMoM2fcJAN0rZx70OiumzlPxykjA8XLSaJr2Jk7v+CjyZ ENwga0361ygHfsSFwPjMCjipb3PZO8C32NGUgWOn74xKxxUV6NH0MuzH QK8= yt. 86400 IN NSEC za. NS DS RRSIG NSEC za. 86400 IN NSEC zm. NS RRSIG NSEC za. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Y/gx+8z7554BKRrhoKaXvp7d6FNU6UaLrsL8s5/1rJx41oGLSGK2s6uE 35JThCCOaGXOeMtX5TbFZ4p1qG0ZXCy8q3lKLTJcDkU2cSs78gUpQj08 AgHIHPLGwm75Y43SP7f4GtqY2ckXLfW9dahK6RQic33+pLRgcZm+kMr1 QC0= za. 172800 IN NS za1.dnsnode.net. za. 172800 IN NS disa.tenet.ac.za. za. 172800 IN NS nsza.is.co.za. za. 172800 IN NS za-ns.anycast.pch.net. za. 172800 IN NS sns-pb.isc.org. hippo.ru.ac.za. 172800 IN A 146.231.128.1 hippo.ru.ac.za. 172800 IN AAAA 2001:4200:1010::1 disa.tenet.ac.za. 172800 IN A 196.21.79.50 disa.tenet.ac.za. 172800 IN AAAA 2001:4200:ffff:a::1 nsza.is.co.za. 172800 IN A 196.4.160.27 ns1.coza.net.za. 172800 IN A 66.135.62.20 zm. 172800 IN NS ns1.zamnet.zm. zm. 172800 IN NS ns1.coppernet.zm. zm. 172800 IN NS ns2.zamnet.zm. zm. 172800 IN NS hippo.ru.ac.za. zm. 172800 IN NS ns-zm.afrinic.net. zm. 86400 IN NSEC zone. NS RRSIG NSEC zm. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . fpY08Kn95Qm50Bfs/0pdphLAiT15niOA7m69zCORFuNEuZy6N1CCdiDj Sd+ZS37Y0XLdWmoiSroX40wfOAuiUYPlSAKdPk9tQR7MY2HMnlHIsZ4z kPMic9dN43HJtANRnLEChiWqKO4JwTuFYY5OilKqGkG9LoJCGd40QTZe tD0= ns1.coppernet.zm. 172800 IN A 41.222.240.15 ns1.zamnet.zm. 172800 IN A 196.46.192.26 ns2.zamnet.zm. 172800 IN A 196.46.192.21 zone. 172800 IN NS demand.beta.aridns.net.au. zone. 172800 IN NS demand.alpha.aridns.net.au. zone. 172800 IN NS demand.delta.aridns.net.au. zone. 172800 IN NS demand.gamma.aridns.net.au. zone. 86400 IN NSEC zw. NS DS RRSIG NSEC zone. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . VtGnvmRHXJOH1DsFpuINCk991ccpkmIzTqMltiDD5o3lPPChCH1Ohxmn WP0seBIpWUXA/BkwHu3dUQY59uHgJBzUaoWbTAyjX9BtjOeJ/Pc5Z7qw abz40Qv2+q8Le56U5C00QhgDcCegkKBmtJYI2+cgJLLlgKyMCGVB5cJN llw= zone. 86400 IN RRSIG DS 8 1 86400 20140207000000 20140130230000 33655 . LlC1DO76rh8gEgaXsh+/2+YJrkgl/qTPKP5uvQAMffZ46a8Jy20jK/xY BUHXuiYMOPWMKPP9+LrqMBPCiQtC2gPBiVjLfpyjvK1dU1jVXTNHOy+x FezusoHXUEyXWsCXtnowUStl7zpk60fMKlQBuLKql+P2WLbWOJsi/Czi fc8= zone. 86400 IN DS 48385 8 2 118C38D7EAFE8361DBA4C1BF929EAE5DFE8F3D0DEF61369478458CD9 42E14B46 zw. 172800 IN NS ns1.telone.co.zw. zw. 172800 IN NS ns2.gip.net. zw. 172800 IN NS ns2.telone.co.zw. zw. 172800 IN NS ns-zw.ripe.net. zw. 172800 IN NS news-tokyo.gip.net. zw. 86400 IN NSEC . NS RRSIG NSEC zw. 86400 IN RRSIG NSEC 8 1 86400 20140207000000 20140130230000 33655 . Vuvdl4Rygv7ZmIhhm8oPmMFJAEmIPEHCEz4lVrIBjPLbO5QlDE3K9a87 ezhj95+AwoGs+b6UcSMks8XWJv6FXUCRRzFu/VD8scr0E3JTUA3ez7pv hyf5/LaVNbF4G56f8mASo7zL8xmJ69itTtA/s0r6P0E761spU2NS40bW 4fw= ns1.telone.co.zw. 172800 IN A 194.133.122.47 ns2.telone.co.zw. 172800 IN A 194.133.122.42 . 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2014013100 1800 900 604800 86400 ;; WHEN: Fri Jan 31 09:55:37 CET 2014 ;; XFR size: 5735 records (messages 14, bytes 223995) unbound-1.13.1/testdata/auth_xfr.rpl0000644000175000017500000001110114010434640017041 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: master: 1.2.3.44 ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with AXFR ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER ; serial, refresh, retry, expire, minimum example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. IN NS ns.example.net. EXTRA_PACKET REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER www.example.com. IN A 1.2.3.4 example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END STEP 30 TIME_PASSES ELAPSE 10 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END ; the zonefile was updated with new contents STEP 70 CHECK_TEMPFILE example.com FILE_BEGIN example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.4 FILE_END SCENARIO_END unbound-1.13.1/testdata/val_nx.rpl0000644000175000017500000001246314010434640016524 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with nxdomain response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} ; wildcard denial example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} ; qname denial wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NXDOMAIN SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFCNGZ+/OfElYQMCZ77O9Lw9rhk7PAhUAmDcvTAst6Bq83qPq3r6c/Dm1nFc= ;{id = 2854} example.com. IN NSEC abc.example.com. SOA NS DNSKEY NSEC RRSIG example.com. 3600 IN RRSIG NSEC 3 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFHV2IBWyTmDJvZ+sT+WsGrJX0op/AhQkAijjnjPAtx/tNub2FAGqcexJSg== ;{id = 2854} wab.example.com. IN NSEC wzz.example.com. A NSEC RRSIG wab.example.com. 3600 IN RRSIG NSEC 3 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFG5DZSEIZC088rjcB1e6sQx8nQz4AhUAtQ09tP1YYLJkhL/Wg1KV2pW4Ivk= ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_capsid_strip.tdir/0000755000175000017500000000000014010434640020775 5ustar wouterwouterunbound-1.13.1/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns0000644000175000017500000000072014010434640025562 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION ; WEIRD CAPS! ; probably not the query! WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A SECTION ANSWER wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns1.example.com. example.com. IN NS ns2.example.com. SECTION ADDITIONAL ns1.example.com. IN A 1.2.3.4 ENTRY_END unbound-1.13.1/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.pre0000644000175000017500000000226214010434640025033 0ustar wouterwouter# #-- fwd_capsid_strip.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) FWD2_PORT=$(($FWD_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "FWD2_PORT=$FWD2_PORT" >> .tpkg.var.test # start forwarder 1 get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_capsid_strip.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start forwarder 2 $LDNS_TESTNS -p $FWD2_PORT fwd_capsid_strip.testns2 >fwd2.log 2>&1 & FWD_PID2=$! echo "FWD_PID2=$FWD_PID2" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@TOPORT2\@/'$FWD2_PORT'/' < fwd_capsid_strip.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_ldns_testns_up fwd2.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.post0000644000175000017500000000050414010434640025227 0ustar wouterwouter# #-- fwd_capsid_strip.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $FWD_PID2 kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns20000644000175000017500000000061014010434640025642 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION ; WEIRD CAPS! ; probably not the query! WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A SECTION ANSWER wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 SECTION AUTHORITY SECTION ADDITIONAL ns2.example.com. IN A 1.2.3.5 ENTRY_END unbound-1.13.1/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.dsc0000644000175000017500000000052614010434640025017 0ustar wouterwouterBaseName: fwd_capsid_strip Version: 1.0 Description: Forward and do 0x20 fallback that needs stripping. CreationDate: Fri 30 Jan 10:41:33 CET 2015 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_capsid_strip.pre Post: fwd_capsid_strip.post Test: fwd_capsid_strip.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.conf0000644000175000017500000000046214010434640025172 0ustar wouterwouterserver: verbosity: 4 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no use-caps-for-id: yes forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" forward-addr: "127.0.0.1@@TOPORT2@" unbound-1.13.1/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.test0000644000175000017500000000105014010434640025216 0ustar wouterwouter# #-- fwd_capsid_strip.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT wwwabcdefghijklmnopqrstuvwxyzwww.example.com | tee outfile echo "> cat logfiles" cat fwd.log cat fwd2.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/Kexample.com.+008+01443.private0000644000175000017500000000165314010434640021464 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 8 (RSASHA256) Modulus: t31aqPMTY/KfPbU4bl2hJ/2EXMyvl2HPPbBpne9Nr7SjmvsCNMCqYDXIf8Hf5oAyKFSbm5xlJ9Wqjv6Q5pETzIWP1qK86YDWfX4kt68mr+jK9DKPFA3ZBvz0vJo1RPmgpkiIv67LKE1bcoNHdJJtD8YHBA0MdVxmL4kNHdELSvs= PublicExponent: AQAB PrivateExponent: azCanqnpgPDCX90Wyzp9I4xxH3kfdrLXyzTcbjvWyTcggC/0WPbYUP36U8/hSZlIM9FBWgVh/oROb9x8r4S+6DT5k3tdhI303AL6bC8x1PBCzHjXBmYa9JvPKx/7a1hpSVOw9iJJh0Y4IclrfA8Ssdqxkj5QdNvR1CqDYTvIH/E= Prime1: 4yIEKoY9ew1mX7+MUA8T1sGp64VzTiFpnn/8eomwdYVEsX6Sg563qLEn6IuORxrqCz8Ae3qfgVkT0J96ArURsw== Prime2: zs9dU2j2jlToxIXtKu+YeO7QCKd1gVP6beI9IxjMYm21opsVvJ/xMlHu9aocGuCgvfmFyu/ShhsF/IPlFkvtmQ== Exponent1: EAy8TKD1wTc+L6/iY1ndZgSDVFA2yKOVygxzM9l87aEALKasBb72bWYvUsBhymZ9eVP3XcJZeRNpUgmi3oQa/w== Exponent2: nukr9wmyWo/YBBo8sT9F07b9V4kFe4jB52luPOezNPbEGNw+CaCEv3vBuDcsPWLZYOC488Tv6WgeY3gdsdJKEQ== Coefficient: Fr7ARq2yRTv8+1ZAAwv2gbDa92RZxdZzj9hpC+/64kjCxq5//2haIhU/wtgDbBlr99Uk90cXf6F8AeaqCYgjLQ== unbound-1.13.1/testdata/iter_dname_insec.rpl0000644000175000017500000005754114010434640020533 0ustar wouterwouter; config options server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test scrub of insecure DNAME in answer section ; root infrastucture RANGE_BEGIN 0 10000000 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION shortloop. IN TXT SECTION ANSWER shortloop. IN TXT "shortloop end" ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH subdomain opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH subdomain opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH subdomain opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION x. IN A SECTION AUTHORITY x. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION long. IN NS SECTION AUTHORITY long. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS SECTION AUTHORITY 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; end of root infrastucture ; a.gtld-servers.net. (com. net. x.) RANGE_BEGIN 0 10000000 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns1.example.net. SECTION ADDITIONAL ns1.example.net. IN A 168.192.3.3 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x. IN NS SECTION AUTHORITY x. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x. IN DNAME SECTION AUTHORITY x. IN DNAME . SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION shortloop.x.x. IN CNAME SECTION ANSWER x. DNAME . shortloop.x.x. IN CNAME shortloop.x. shortloop.x. IN CNAME shortloop. ENTRY_END ENTRY_BEGIN MATCH qname opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION shortloop.x. IN CNAME SECTION ANSWER x. DNAME . shortloop.x. IN CNAME shortloop. ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS SECTION AUTHORITY 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION long. IN NS SECTION AUTHORITY long. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; DNAME at zone apex, allowed by RFC 6672 section 2.3 ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION long. IN DNAME SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.long. IN A SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. x.long. 3600 IN CNAME x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. 3600 IN A 192.0.2.1 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN A SECTION ANSWER x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. 3600 IN A 192.0.2.1 ENTRY_END ENTRY_BEGIN MATCH qname opcode ADJUST copy_id copy_query REPLY QR YXDOMAIN SECTION QUESTION too.long. IN A SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ENTRY_END RANGE_END ; end of a.gtld-servers.net. ; RFC 6672 section 2.2. The DNAME Substitution table tests ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;1 com. example.com. example.net. ;2 example.com. example.com. example.net. [0] ;3 a.example.com. example.com. example.net. a.example.net. ;4 a.b.example.com. example.com. example.net. a.b.example.net. ;5 ab.example.com. b.example.com. example.net. ;6 foo.example.com. example.com. example.net. foo.example.net. ;7 a.x.example.com. x.example.com. example.net. a.example.net. ;8 a.example.com. example.com. y.example.net. a.y.example.net. ;9 cyc.example.com. example.com. example.com. cyc.example.com. ;10 cyc.example.com. example.com. c.example.com. cyc.c.example.com. ;11 shortloop.x.x. x. . shortloop.x. ;12 shortloop.x. x. . shortloop. ; ; [0] The result depends on the QTYPE. If the QTYPE = DNAME, then ; the result is "example.com.", else "". ; ; Table 1. DNAME Substitution Examples ; line no. 1 is mostly for authoritative server ; line no. 2 QTYPE != DNAME STEP 220201 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION example.com. IN NS ENTRY_END STEP 220202 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. 0 IN A 168.192.2.2 ENTRY_END ; line no. 2 QTYPE == DNAME STEP 220203 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION example.com. IN DNAME ENTRY_END STEP 220204 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION example.com. IN DNAME SECTION ANSWER example.com. IN DNAME example.net. ENTRY_END ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;3 a.example.com. example.com. example.net. a.example.net. STEP 220301 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.example.com. IN A ENTRY_END STEP 220302 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION a.example.com. IN A SECTION ANSWER example.com. IN DNAME example.net. a.example.com. IN CNAME a.example.net. a.example.net. IN A 10.0.0.97 ENTRY_END ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;4 a.b.example.com. example.com. example.net. a.b.example.net. STEP 220401 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.b.example.com. IN A ENTRY_END STEP 220402 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION a.b.example.com. IN A SECTION ANSWER example.com. IN DNAME example.net. a.b.example.com. IN CNAME a.b.example.net. a.b.example.net. IN A 10.0.97.98 ENTRY_END ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;5 ab.example.com. b.example.com. example.net. ;6 foo.example.com. example.com. example.net. foo.example.net. ; line no. 5 is mostly for authoritative server ; line no. 6 is basically the same as line no. 3 ; ns1.example.com. RANGE_BEGIN 220000 220699 ADDRESS 168.192.2.2 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN A SECTION ANSWER ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN AAAA SECTION ANSWER ENTRY_END ; line 2 DNAME ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNAME SECTION ANSWER example.com. IN DNAME example.net. ENTRY_END ; line 3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.example.com. IN A SECTION ANSWER example.com. IN DNAME example.net. a.example.com. IN CNAME a.example.net. ENTRY_END ; line 4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.b.example.com. IN A SECTION ANSWER example.com. IN DNAME example.net. a.b.example.com. IN CNAME a.b.example.net. ENTRY_END RANGE_END ; end of ns1.example.com. ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;7 a.x.example.com. x.example.com. example.net. a.example.net. STEP 220701 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a.x.example.com. IN A ENTRY_END STEP 220702 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION a.x.example.com. IN A SECTION ANSWER x.example.com. IN DNAME example.net. a.x.example.com. IN CNAME a.example.net. a.example.net. IN A 10.0.0.97 ENTRY_END ; ns1.example.com. RANGE_BEGIN 220700 220799 ADDRESS 168.192.2.2 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN A SECTION ANSWER ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN AAAA SECTION ANSWER ENTRY_END ; line 7 DNAME ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNAME SECTION ANSWER x.example.com. IN DNAME example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.x.example.com. IN A SECTION ANSWER x.example.com. IN DNAME example.net. a.x.example.com. IN CNAME a.example.net. ENTRY_END RANGE_END ; end of ns1.example.com. ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;8 a.example.com. example.com. y.example.net. a.y.example.net. ; ; a.example.com. was renamed to a2.example.com. to avoid cache clashes ; on the synthetized CNAME (caching CNAMEs is allowed by RFC 6672 section 3.4) STEP 220801 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION a2.example.com. IN A ENTRY_END STEP 220802 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION a2.example.com. IN A SECTION ANSWER example.com. IN DNAME y.example.net. a2.example.com. IN CNAME a2.y.example.net. a2.y.example.net. IN A 10.97.50.121 ENTRY_END ; ns1.example.com. RANGE_BEGIN 220800 220899 ADDRESS 168.192.2.2 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN A SECTION ANSWER ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN AAAA SECTION ANSWER ENTRY_END ; line 8 DNAME ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNAME SECTION ANSWER example.com. IN DNAME y.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a2.example.com. IN A SECTION ANSWER example.com. IN DNAME y.example.net. a2.example.com. IN CNAME a2.y.example.net. ENTRY_END RANGE_END ; end of ns1.example.com. ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;9 cyc.example.com. example.com. example.com. cyc.example.com. STEP 220901 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION cyc.example.com. IN A ENTRY_END ; Expected result is defined by RFC 1034 section 3.6.2: ; CNAME chains should be followed and CNAME loops signalled as an error STEP 220902 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO REPLY NOERROR SECTION QUESTION cyc.example.com. IN A SECTION ANSWER example.com. 0 IN DNAME example.com. cyc.example.com. 0 IN CNAME cyc.example.com. ENTRY_END ; ns1.example.com. RANGE_BEGIN 220900 220999 ADDRESS 168.192.2.2 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN A SECTION ANSWER ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN AAAA SECTION ANSWER ENTRY_END ; line 9 DNAME ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNAME SECTION ANSWER example.com. IN DNAME example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION cyc.example.com. IN A SECTION ANSWER example.com. IN DNAME example.com. cyc.example.com. IN CNAME cyc.example.com. ENTRY_END RANGE_END ; end of ns1.example.com. ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;10 cyc.example.com. example.com. c.example.com. cyc.c.example.com. ; ; cyc.example.com. was renamed to cyc2.example.com. to avoid cache clashes ; on the synthetized CNAME (caching CNAMEs is allowed by RFC 6672 section 3.4) ; ; target c.example.com. was renamed to cyc2.example.net. ; to limit number of pre-canned answers required for the test STEP 221001 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION cyc2.example.com. IN A ENTRY_END ; Expected result is defined by RFC 1034 section 3.6.2: ; CNAME chains should be followed and CNAME loops signalled as an error STEP 221002 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION cyc2.example.com. IN A ENTRY_END ; ns1.example.com. RANGE_BEGIN 221000 221099 ADDRESS 168.192.2.2 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN A SECTION ANSWER ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.com. IN AAAA SECTION ANSWER ENTRY_END ; line 10 DNAME ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN DNAME SECTION ANSWER example.com. IN DNAME cyc2.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION cyc2.example.com. IN A SECTION ANSWER example.com. IN DNAME cyc2.example.net. cyc2.example.com. IN CNAME cyc2.cyc2.example.net. ENTRY_END RANGE_END ; end of ns1.example.com. ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;11 shortloop.x.x. x. . shortloop.x. STEP 221101 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION shortloop.x.x. TXT ENTRY_END STEP 221102 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION shortloop.x.x. IN TXT SECTION ANSWER x. IN DNAME . shortloop.x.x. IN CNAME shortloop.x. ;;x. IN DNAME . shortloop.x. IN CNAME shortloop. shortloop. IN TXT "shortloop end" ENTRY_END ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;12 shortloop.x. x. . shortloop. ; expire potentically cached CNAMEs for shortloop.x. from cache STEP 221200 TIME_PASSES ELAPSE 10000 STEP 221201 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION shortloop.x. TXT ENTRY_END STEP 221202 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION shortloop.x. IN TXT SECTION ANSWER x. IN DNAME . shortloop.x. IN CNAME shortloop. shortloop. IN TXT "shortloop end" ENTRY_END ; ns1.example.net. (data shared by whole 22xxxx range) RANGE_BEGIN 220000 229999 ADDRESS 168.192.3.3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns1.example.net. SECTION ADDITIONAL example.net. IN A 168.192.3.3 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.net. IN A SECTION ANSWER ns1.example.net. IN A 168.192.3.3 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION ns1.example.net. IN AAAA SECTION ANSWER ENTRY_END ; line 3 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.example.net. IN A SECTION ANSWER a.example.net. IN A 10.0.0.97 ENTRY_END ; line 4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.b.example.net. IN A SECTION ANSWER a.b.example.net. IN A 10.0.97.98 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a2.y.example.net. IN A SECTION ANSWER a2.y.example.net. IN A 10.97.50.121 ENTRY_END ; line 10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION cyc2.example.net. IN DNAME SECTION ANSWER cyc2.example.net. IN DNAME example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION cyc2.cyc2.example.net. IN A SECTION ANSWER cyc2.example.net. IN DNAME example.com. cyc2.cyc2.example.com. IN CNAME cyc2.example.com. ENTRY_END RANGE_END ; end of ns1.example.net. ; RFC 6672 section 2.2: YXDOMAIN answers for too long results for substitution ; RFC 6672 section 2.3: DNAME can be at zone apex: zone apex = long. STEP 229001 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION x.long. IN A ENTRY_END ; query returning maximal permissible length - should work STEP 229002 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SECTION QUESTION x.long. IN A SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. x.long. 3600 IN CNAME x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. 3600 IN A 192.0.2.1 ENTRY_END ; result of substitution has too long name ; YXDOMAIN should be propagated to the client ; Unbound SEVFAILs: https://www.ietf.org/mail-archive/web/dnsext/current/msg11282.html ;TODO ; STEP 229003 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; too.long. IN A ; ENTRY_END ; ; STEP 229004 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH all ; REPLY QR YXDOMAIN ; SECTION QUESTION ; x.long. IN A ; SECTION ANSWER ; long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ; ENTRY_END ; YXDOMAIN should work even if the cache is empty STEP 229005 TIME_PASSES ELAPSE 4000 ; STEP 229006 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; too.long. IN A ; ENTRY_END ; ; STEP 229007 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH all ; REPLY QR YXDOMAIN ; SECTION QUESTION ; x.long. IN A ; SECTION ANSWER ; long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ; ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_cnametocnamewctoposwc.rpl0000644000175000017500000002617014010434640023575 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b" val-override-date: "-1" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a regular cname to wildcard cname to wildcard response ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION start.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION start.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. 120 IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk= ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 8 AwEAAdWzfjQD2bfQuoQGNYuS0ByosBxiTkoKcy9kMoWOQ/jx9rvTRhHImWxTxFtIyZOoRgn6E6mE71e5Y1q1nuyH544Em+4rNRMMW4bzecQmMmPk+B97MqW9aW6e4BwiCTt52IGfL++5GORYcaITw9UOlQLYH1oHHUNUC6ebHENofLTj ;{id = 64050 (zsk), size = 1024b} example.com. 3600 IN DNSKEY 257 3 8 AwEAAdL6YJdvoKQJEt/SgB6MrbQ2RDwnrcQQb6bDE8FpGgLen6hvF31ntVsZ3RZzhCmwL6lvumOLFIRKaP9ZBEVutT9iMoF2dNRbT0TCUrv6uQNHcuCZ0BJhuDNBU42f3yOnfFv7PKxd0NP+yFHJkvDQAVLMB5GeUQuYnvgQGeZsf/3b ;{id = 46426 (ksk), size = 1024b} example.com. 3600 IN RRSIG DNSKEY 8 2 3600 20121126123249 20121029123249 46426 example.com. pisNb/A40XDEiMpcYtxc+yO6osISyfpqz+0UZ61pd70+TLXMF197zr9SqOVJHyRI6G2lSnFggxYrZDpxLbxOW0RY/KfjD3xlI14M/2DieJ1NdlQuYFGgTwxcoINUJ/wRd4YUxkF4JS0D4NBdQ0yQYR0KqDr84oyhnULEHX6WB7s= SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION start.example.com. IN A SECTION ANSWER start.example.com. 3600 IN CNAME x.y.z.wc.example.com. start.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. LHpx5n++Z0Jgjjalac+e7wdYSbfurqSDpLRAOI1PybTJkwrMvgDKfp0ycT4HwsLVy7spumZ/Ahg/5II9pai7jCiqv1Iyh6fx19ZVeClTFMOLotCK8xMHACYJIY39BhTwD2D3r9BxbK+RopUlXypwV02yzdY2xEnPCBJVDUn5d0g= x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com. x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. BCnT6CIuqvF1U9LfiHIovgvXIVFJsCXqQWmnjHtbFvzUlTlfGj+56YBSOEpyCep4CBJ0CBgZ8gl5kWip8N+sTlveU/UWMv4FAkqLXRYjp4CZegslmJIuXU5uS+Q0GlLbWdSB9ZCZcbbO0qrOtUfrJ2ozcSTCS+D+oIZ+CkwvDlQ= x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo= SECTION AUTHORITY ; H(z.wc.example.com.) = isn85psesctb6afn2q105mv966tqqepi. isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN NSEC3 1 0 1 abcd isoaarjsq14bkqaamivn1t1milkv95lc A RRSIG isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123259 20121029123259 64050 example.com. Cxwzq1DUQvhkTVHEJHlb92c511Y+uJy/C0yL9br6W/5lB/usuSiK2DjW58ibPh2kLH1P3SpGqd1Y7LigptdXoPBDFakcNcimPWCN93R3J80+vrHHPkPyIsBaywwYI3SNGgfnHfPF+wmH+tZ1vfEHbigOxqPFK+T0ntKq7dkSndg= ; H(z.end.example.com.) = a62608t4becqb6233m87ar7a3648rj3b. a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ= example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U= SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.y.z.wc.example.com. IN A SECTION ANSWER x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com. x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. BCnT6CIuqvF1U9LfiHIovgvXIVFJsCXqQWmnjHtbFvzUlTlfGj+56YBSOEpyCep4CBJ0CBgZ8gl5kWip8N+sTlveU/UWMv4FAkqLXRYjp4CZegslmJIuXU5uS+Q0GlLbWdSB9ZCZcbbO0qrOtUfrJ2ozcSTCS+D+oIZ+CkwvDlQ= x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo= SECTION AUTHORITY isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN NSEC3 1 0 1 abcd isoaarjsq14bkqaamivn1t1milkv95lc A RRSIG isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123259 20121029123259 64050 example.com. Cxwzq1DUQvhkTVHEJHlb92c511Y+uJy/C0yL9br6W/5lB/usuSiK2DjW58ibPh2kLH1P3SpGqd1Y7LigptdXoPBDFakcNcimPWCN93R3J80+vrHHPkPyIsBaywwYI3SNGgfnHfPF+wmH+tZ1vfEHbigOxqPFK+T0ntKq7dkSndg= a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ= example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U= SECTION ADDITIONAL ENTRY_END ENTRY_BEGING MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x.y.z.end.example.com. IN A SECTION ANSWER x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo= SECTION AUTHORITY a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ= example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 8 2 3600 20121126123249 20121029123249 64050 example.com. cpLjgKPacNxVIGo59tYMZ98GVYpH28WHRWj3AeIHK0StYFcAlflGLdkae1LEgMwfUmzrayrA5GMe3AH8LyuTgA2Dn1oNFxGfuShQvK2MFQ+LxvQfiuoqlAlL5Aa94IWcSoU/wLrr66I1K8oSB2yK1Tyyv73c2N40D1mBbzIE70U= SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 8 2 3600 20121126123249 20121029123249 64050 example.com. zxGyimwFsd39j8T7jJ+tSAQPwZ7tjk6HHmzosTMCRePM4k4newbLb5HbrpucSiW/plaEZvjRTDTJ6bPkw0msPXjPCI/22Zh236XO5vhGtMOlxDgAEazuhifVF6UsM7GZwONPBCvw705HgWQyCR1YlTK2w9ffH3GopU9f4oP7Pmk= ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION start.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR TC RD RA AD DO NOERROR SECTION QUESTION start.example.com. IN A SECTION ANSWER start.example.com. 3600 IN CNAME x.y.z.wc.example.com. start.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. LHpx5n++Z0Jgjjalac+e7wdYSbfurqSDpLRAOI1PybTJkwrMvgDKfp0ycT4HwsLVy7spumZ/Ahg/5II9pai7jCiqv1Iyh6fx19ZVeClTFMOLotCK8xMHACYJIY39BhTwD2D3r9BxbK+RopUlXypwV02yzdY2xEnPCBJVDUn5d0g= x.y.z.wc.example.com. 3600 IN CNAME x.y.z.end.example.com. x.y.z.wc.example.com. 3600 IN RRSIG CNAME 8 3 3600 20121126123316 20121029123316 64050 example.com. BCnT6CIuqvF1U9LfiHIovgvXIVFJsCXqQWmnjHtbFvzUlTlfGj+56YBSOEpyCep4CBJ0CBgZ8gl5kWip8N+sTlveU/UWMv4FAkqLXRYjp4CZegslmJIuXU5uS+Q0GlLbWdSB9ZCZcbbO0qrOtUfrJ2ozcSTCS+D+oIZ+CkwvDlQ= x.y.z.end.example.com. 3600 IN A 1.2.3.5 x.y.z.end.example.com. 3600 IN RRSIG A 8 3 3600 20121126123249 20121029123249 64050 example.com. MyXXd3MvXtEYVNqWDepM3+Ra/j/b63QehzSHXZe5gL954WxW8KGHPYmeWyhDtruThpZS6s6jeARY2xt0lmEDnMgNyPJGA6UWwTIgvGD0u9Qw5kocCq3ZH4cSG4xu4rmZoi+h8OGrHxUb4jIKzipzAQDxhnAcp/wKF7e+p+OE+Fo= SECTION AUTHORITY isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN NSEC3 1 0 1 abcd isoaarjsq14bkqaamivn1t1milkv95lc A RRSIG isjq5aarcp8p5sukc56g961cccjus5u2.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123259 20121029123259 64050 example.com. Cxwzq1DUQvhkTVHEJHlb92c511Y+uJy/C0yL9br6W/5lB/usuSiK2DjW58ibPh2kLH1P3SpGqd1Y7LigptdXoPBDFakcNcimPWCN93R3J80+vrHHPkPyIsBaywwYI3SNGgfnHfPF+wmH+tZ1vfEHbigOxqPFK+T0ntKq7dkSndg= a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN NSEC3 1 0 1 abcd a64lt5ij9a1up15h5cdsn1u2071901hu A RRSIG a61sejfu6am5a36p628t4s089s309o44.example.com. 86400 IN RRSIG NSEC3 8 3 86400 20121126123315 20121029123315 64050 example.com. gfBu4oqo9cVxJbqrw2Ly7mK638kGPOF8l8eh7ovalniwkU3F+PNYJyfSE9yGX8tMGbXrkEW9mAzAh39igr2+Bbzi9WPTRp4RDVM0qw+eyMmQRPWKt7FeanDtP+OcdVp0Hf2aPzsgmgTdS6s0AboUq1rX53H2M6F8xAiwPrBJXDQ= SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_ds_locate_ns_detach.rpl0000644000175000017500000001357114010434640022226 0ustar wouterwouter; config options server: target-fetch-policy: "3 2 1 0 0" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test locate of NS records for DS and with detached queries ; the additional targets looked up cause detached queries. ; hence the target fetch policy is increased above. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 SECTION AUTHORITY root-servers.net. IN NS K.ROOT-SERVERS.NET. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION k.root-servers.net. IN AAAA SECTION ANSWER SECTION AUTHORITY root-servers.net. IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN DS SECTION ANSWER SECTION AUTHORITY . IN SOA K.ROOT-SERVERS.NET. hostmaster. 1 2 3 4 5 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.server.net. net. IN NS b.server.net. net. IN NS c.server.net. SECTION ADDITIONAL a.server.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.server.net. ; The b.server.net and c.server.net servers are here to cause ; extra lookups to be generated (to create detached queries in the ; iterator), there is no IP address that answers for them set up. ; force DSNSFind, we host a grandchild zone. ; also, this range of steps is without responses for b and c, so that ; they can be force to happen later (after the DSNS is activated). RANGE_BEGIN 0 20 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.server.net. net. IN NS b.server.net. net. IN NS c.server.net. SECTION ADDITIONAL a.server.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.server.net. IN A SECTION ANSWER a.server.net. IN A 192.5.6.30 SECTION AUTHORITY net. IN NS a.server.net. net. IN NS b.server.net. net. IN NS c.server.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.sub.example.net. IN DS SECTION AUTHORITY sub.example.net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.net. IN NS SECTION ANSWER sub.example.net. IN NS a.server.net. sub.example.net. IN NS b.server.net. sub.example.net. IN NS c.server.net. SECTION ADDITIONAL a.server.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.sub.example.net. IN A SECTION AUTHORITY sub.example.net. IN NS a.server.net. SECTION ADDITIONAL a.server.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.server.net range with all the answers (to finish the test). RANGE_BEGIN 30 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.server.net. net. IN NS b.server.net. net. IN NS c.server.net. SECTION ADDITIONAL a.server.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.server.net. IN A SECTION ANSWER a.server.net. IN A 192.5.6.30 SECTION AUTHORITY net. IN NS a.server.net. net. IN NS b.server.net. net. IN NS c.server.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.server.net. IN AAAA SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION b.server.net. IN A SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION b.server.net. IN AAAA SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.server.net. IN A SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION c.server.net. IN AAAA SECTION AUTHORITY net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION a.sub.example.net. IN DS SECTION AUTHORITY sub.example.net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.net. IN NS SECTION ANSWER sub.example.net. IN NS a.server.net. sub.example.net. IN NS b.server.net. sub.example.net. IN NS c.server.net. SECTION ADDITIONAL a.server.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION a.sub.example.net. IN A SECTION AUTHORITY sub.example.net. IN NS a.server.net. SECTION ADDITIONAL a.server.net. IN A 192.5.6.30 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION a.sub.example.net. IN DS ENTRY_END ; make traffic flow at this time STEP 15 TRAFFIC STEP 20 TRAFFIC STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION a.sub.example.net. IN DS SECTION ANSWER SECTION AUTHORITY sub.example.net. IN SOA a.gtld-servers.net. hostmaster. 2 3 4 5 6 SECTION ADDITIONAL ENTRY_END STEP 50 TRAFFIC SCENARIO_END unbound-1.13.1/testdata/iter_cname_qnamecopy.rpl0000644000175000017500000000711214010434640021412 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test cname to nodata and if qname is set to orig after prepend ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.next.com. IN A SECTION AUTHORITY next.com. IN NS ns.next.com. SECTION ADDITIONAL ns.next.com. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.next.com. SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.next.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION www.next.com. IN A SECTION ANSWER SECTION AUTHORITY next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000 SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION next.com. IN NS SECTION ANSWER next.com. IN NS ns.next.com. SECTION ADDITIONAL ns.next.com. IN A 1.2.3.5 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD CD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 3 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD CD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.next.com. SECTION AUTHORITY next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000 SECTION ADDITIONAL ENTRY_END ; query it from cache again STEP 5 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 7 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.next.com. SECTION AUTHORITY next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000 SECTION ADDITIONAL ENTRY_END ; query answer to cname from cache again, test if stored under wrong qname. STEP 9 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.next.com. IN A ENTRY_END STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.next.com. IN A SECTION ANSWER SECTION AUTHORITY next.com. IN SOA next.com. next.com. 2007090400 28800 7200 604800 18000 SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/subnet_without_validator.crpl0000644000175000017500000000577714010434640022542 0ustar wouterwouterserver: send-client-subnet: 5.0.15.10 max-client-subnet-ipv4: 21 verbosity: 3 module-config: "subnetcache iterator" qname-minimisation: "no" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Works without validator module RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION AUTHORITY SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ednsdata ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 5.0.15.10 ENTRY_END RANGE_END RANGE_BEGIN 0 100 ADDRESS 5.0.15.10 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 5.0.15.10 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ednsdata ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 15 00 ; source mask, scopemask 7f 00 00 ; address HEX_EDNSDATA_END ENTRY_END RANGE_END ;; ---------------------------------------- STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 4.3.2.1 SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_cnameqtype.rpl0000644000175000017500000001634714010434640020252 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a query for type cname ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN CNAME SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN CNAME SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN CNAME SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN CNAME SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 3 3600 20070926134150 20070829134150 30899 example.net. CPxF5hK9Kg5eT7W6LgZwr0ePYEm9HMcSY4vvqCS6gDWB4X9jvXLCfBkCLhsNybPBpGWlsLi5wM6MTdJXuPpsRA== ;{id = 30899} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN CNAME ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AD DO NOERROR SECTION QUESTION www.example.com. IN CNAME SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/val_nsec3_cname_par.rpl0000644000175000017500000002012014010434640021104 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 wildcard CNAME to parent. ; to test the zone determination routines in nsec3. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN NS SECTION ANSWER sub.example.com. IN NS ns.sub.example.com. SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER ; from *.sub.example.com. IN CNAME www.example.com. www.sub.example.com. IN CNAME www.example.com. www.sub.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFFKPEuHCx2R69zF2Nd4c7Vu/4RUxAhRB9zHHPCihRU4HT5HhpPJxJykeFg== ;{id = 2854} SECTION AUTHORITY ; cover qname next closer name, for the wildcard. ; H(www.sub.example.com.) = ecllopkacmb753v6jlld4d371l1u8gme ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd ecllopkacmb753v6jlld4d371l1u9gme A RRSIG ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFD4bIeWulXj9lhAGsqCfsKg6jQheAhQ9kkYqd9AVdomcl2YzWOupJnV5wQ== ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN CNAME www.example.com. www.sub.example.com. 3600 IN RRSIG CNAME 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFFKPEuHCx2R69zF2Nd4c7Vu/4RUxAhRB9zHHPCihRU4HT5HhpPJxJykeFg== ;{id = 2854} SECTION AUTHORITY ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd ecllopkacmb753v6jlld4d371l1u9gme A RRSIG ecllopkacmb753v6jlld4d371l1u7gme.sub.example.com. 3600 IN RRSIG NSEC3 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFD4bIeWulXj9lhAGsqCfsKg6jQheAhQ9kkYqd9AVdomcl2YzWOupJnV5wQ== ;{id = 2854} example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/dnstap_tls.tdir/0000755000175000017500000000000014010434640017624 5ustar wouterwouterunbound-1.13.1/testdata/dnstap_tls.tdir/dnstap_tls.test0000644000175000017500000000554614010434640022712 0ustar wouterwouter# #-- dnstap_tls.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "> check tap.log for dnstap info" # see if it logged the information in tap.log # wait for a moment for filesystem to catch up. if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi if grep "www.example.com" tap.log; then echo "yes it is in tap.log"; else echo "information not in tap.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi echo "" echo "> test disconnect from the upstream server" kill_pid $DNSTAP_SOCKET_PID dig @127.0.0.1 -p $UNBOUND_PORT down.example.net. # bring log socket back up $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap2.errlog >tap2.log & if test $? -ne 0; then echo "could not start (again) unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap2.errlog" "start of service" dig @127.0.0.1 -p $UNBOUND_PORT up.example.net. sleep 2 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net. for x in down up up2; do if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log"; else echo "$x.example.net. information not in tap2.log" echo "failed" echo "> cat logfiles" cat tap.log cat tap.errlog echo "> tap2 logfiles" cat tap2.log cat tap2.errlog cat fwd.log cat unbound.log echo "Not OK" exit 1 fi done echo "> OK" exit 0 unbound-1.13.1/testdata/dnstap_tls.tdir/dnstap_tls.pre0000644000175000017500000000361114010434640022510 0ustar wouterwouter# #-- dnstap_tls.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_random_port 4 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) TAP_PORT=$(($RND_PORT + 3)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT dnstap_tls.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start the dnstap log server # the -vvvv flag prints protocol and connection information from the # unbound-dnstap-socket server. # the -l flag prints the DNS info in the DNSTAP packet in multiline output. # stderr is the '-vvvv' server logs and errors. # stdout is the one-line packet logs (or with -l, multiline). $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log & if test $? -ne 0; then echo "could not start unbound-dnstap-socket server" exit 1 fi DNSTAP_SOCKET_PID=$! echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test # wait for the server to go up wait_server_up "tap.errlog" "start of service" # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls.conf > ub.conf # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/dnstap_tls.tdir/dnstap_tls.dsc0000644000175000017500000000045114010434640022472 0ustar wouterwouterBaseName: dnstap_tls Version: 1.0 Description: test dnstap tls and reconnect CreationDate: Tue Feb 14 14:00:38 CET 2020 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: dnstap_tls.pre Post: dnstap_tls.post Test: dnstap_tls.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/dnstap_tls.tdir/unbound_server.key0000644000175000017500000000463314010434640023404 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/dnstap_tls.tdir/unbound_server.pem0000644000175000017500000000246614010434640023377 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls.tdir/unbound_control.pem0000644000175000017500000000247614010434640023552 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/dnstap_tls.tdir/dnstap_tls.post0000644000175000017500000000124014010434640022703 0ustar wouterwouter# #-- dnstap_tls.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh PRE="../.." if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 cat unbound.log echo "> tap logfiles" cat tap.log cat tap.errlog echo "> tap2 logfiles" if test -f tap2.log; then cat tap2.log; fi if test -f tap2.errlog; then cat tap2.errlog; fi cat fwd.log exit 0 unbound-1.13.1/testdata/dnstap_tls.tdir/dnstap_tls.testns0000644000175000017500000000050314010434640023237 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA SERVFAIL ADJUST copy_id SECTION QUESTION www.example.net. IN A ENTRY_END unbound-1.13.1/testdata/dnstap_tls.tdir/dnstap_tls.conf0000644000175000017500000000210214010434640022641 0ustar wouterwouterserver: verbosity: 2 num-threads: 1 outgoing-range: 16 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no local-zone: "example.net." redirect local-data: "example.net. IN A 10.20.30.41" remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" dnstap: dnstap-enable: yes dnstap-socket-path: "dnstap.socket" dnstap-ip: "127.0.0.1@@TAPPORT@" dnstap-tls: yes dnstap-send-identity: yes dnstap-send-version: yes #dnstap-identity #dnstap-version dnstap-log-resolver-query-messages: yes dnstap-log-resolver-response-messages: yes dnstap-log-client-query-messages: yes dnstap-log-client-response-messages: yes dnstap-log-forwarder-query-messages: yes dnstap-log-forwarder-response-messages: yes unbound-1.13.1/testdata/dnstap_tls.tdir/unbound_control.key0000644000175000017500000000462714010434640023561 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/val_nsec3_nods_badopt.rpl0000644000175000017500000002120214010434640021455 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with NSEC3 with no DS with wrong optout bit. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN SOA ns.example.com. hostmaster.example.com. 2007090400 28800 7200 604800 18000 example.com. 3600 IN RRSIG SOA 3 2 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCM6lsu9byZIQ1yYjJmyYfFWM2RWAIUcR5t84r2La824oWCkLjmHXRQlco= ;{id = 2854} ; NODATA response. H(www.example.com.) = s1unhcti19bkdr98fegs0v46mbu3t4m3 s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. IN NSEC3 1 1 123 aabb00123456bbccdd s1unhcti19bkdr98fegs0v46mbu3t4m4 MX RRSIG s1unhcti19bkdr98fegs0v46mbu3t4m3.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MCwCFE/a24nsY2luhQmZjY/ObAIgNSMkAhQWd4MUOUVK55bD6AbMHWrDA0yvEA== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DS SECTION AUTHORITY ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEtLEiFNr2V6qJOHUxIRQ4ittparAhUAm+WN3aqAHEgiQQEeX9z4S0Ub/dM= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn1n0o9pd.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG 8r1f0ieoutlnjc03meng9e3bn1n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCategdxsiQTpOMHED1ehjPT7PO2gIUDJ9f/zGCEUHy/UVp97aOh0RRoks= ;{id = 2854} ENTRY_END ; refer to server one down ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION sub.example.com. IN A SECTION AUTHORITY sub.example.com. IN NS ns.sub.example.com. ; proof that there is no DS here. ;sub.example.com. 3600 IN DS 2854 DSA 1 be4d46cd7489cce25a31af0dff2968ce0425dd31 ;sub.example.com. 3600 IN RRSIG DS 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQC1WMTfb25sTgeUEXCFR4+YiJqecwIUc2R/jrO4amyQxovSnld2reg8eyo= ;{id = 2854} ; example.com. -> b6fuorg741ufili49mg9j4328ig53sqg. b6fuorg741ufili49mg9j4328ig53sqg.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd b6fuorg741ufili49mg9j4328ig54sqg NS SOA DNSKEY RRSIG b6fuorg741ufili49mg9j4328ig53sqg.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFEtLEiFNr2V6qJOHUxIRQ4ittparAhUAm+WN3aqAHEgiQQEeX9z4S0Ub/dM= ;{id = 2854} ; sub.example.com. -> 8r1f0ieoutlnjc03meng9e3bn2n0o9pd. 8r1f0ieoutlnjc03meng9e3bn1n0o9pd.example.com. IN NSEC3 1 0 123 aabb00123456bbccdd 8r1f0ieoutlnjc03meng9e3bn3n0o9pd NS RRSIG 8r1f0ieoutlnjc03meng9e3bn1n0o9pd.example.com. 3600 IN RRSIG NSEC3 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCategdxsiQTpOMHED1ehjPT7PO2gIUDJ9f/zGCEUHy/UVp97aOh0RRoks= ;{id = 2854} SECTION ADDITIONAL ns.sub.example.com. IN A 1.2.3.10 ENTRY_END RANGE_END ; ns.sub.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.10 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.sub.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR REFUSED SECTION QUESTION sub.example.com. IN NS SECTION ANSWER ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION sub.example.com. IN DNSKEY SECTION ANSWER sub.example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} sub.example.com. 3600 IN RRSIG DNSKEY 3 3 3600 20070926135752 20070829135752 2854 sub.example.com. MCwCFBznBTYM/SrdUnjQdBnLtRO79KAaAhQReG5nRuL7Xsdf6D0KKwPa1GpWyQ== ;{id = 2854} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER www.sub.example.com. IN A 1.2.3.123 www.sub.example.com. 3600 IN RRSIG A 3 4 3600 20070926135752 20070829135752 2854 sub.example.com. MC0CFEExteiCsLkRi/md6o5K8BhRJAKFAhUAgg2tkvwaDn8Xbm9q+5xnjvgIB8k= ;{id = 2854} ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.sub.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA SERVFAIL SECTION QUESTION www.sub.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_zonefile_down.rpl0000644000175000017500000002331314010434640021114 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" ; Options for signed zone. The zone is partially copied from val_negcache_nxdomain.rpl trust-anchor: "testzone.nlnetlabs.nl. IN DS 2926 8 2 6f8512d1e82eecbd684fc4a76f39f8c5b411af385494873bdead663ddb78a88b" val-override-date: "20180213111425" qname-minimisation: "no" trust-anchor-signaling: no aggressive-nsec: yes auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: no ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com $ORIGIN com. example 3600 IN SOA dns.example.de. hostmaster.dns.example.de. ( 1379078166 28800 7200 604800 7200 ) 3600 IN NS ns1.example.com. 3600 IN NS ns2.example.com. $ORIGIN example.com. www 3600 IN A 1.2.3.4 mail 3600 IN A 1.2.3.5 3600 IN AAAA ::5 ns1 3600 IN A 1.2.3.4 ns2 3600 IN AAAA ::2 TEMPFILE_END auth-zone: name: "soa.high.com." for-downstream: yes for-upstream: no zonefile: TEMPFILE_NAME soa.high.com TEMPFILE_CONTENTS soa.high.com $ORIGIN high.com. soa 500 IN SOA dns.example.de. hostmaster.dns.example.de. ( 1379078166 28800 7200 604800 200 ) 3600 IN NS ns1.example.com. 3600 IN NS ns2.example.com. TEMPFILE_END auth-zone: name: "soa.low.com." for-downstream: yes for-upstream: no zonefile: TEMPFILE_NAME soa.low.com TEMPFILE_CONTENTS soa.low.com $ORIGIN low.com. soa 200 IN SOA dns.example.de. hostmaster.dns.example.de. ( 1379078166 28800 7200 604800 500 ) 3600 IN NS ns1.example.com. 3600 IN NS ns2.example.com. TEMPFILE_END auth-zone: name: "testzone.nlnetlabs.nl." for-downstream: yes for-upstream: no zonefile: TEMPFILE_NAME testzone.nlnetlabs.nl TEMPFILE_CONTENTS testzone.nlnetlabs.nl $ORIGIN testzone.nlnetlabs.nl. testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 4600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 4600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with zonefile for downstream responses ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA AA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END ; check SOA TTL to be the minimum of the SOA.minimum and the SOA TTL STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nonexistent.soa.high.com. IN A ENTRY_END STEP 31 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA AA NXDOMAIN SECTION QUESTION nonexistent.soa.high.com IN A SECTION AUTHORITY soa.high.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 200 ENTRY_END ; check that the original SOA is also returned STEP 32 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION soa.high.com. IN SOA ENTRY_END STEP 33 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA AA NOERROR SECTION QUESTION soa.high.com. IN SOA SECTION ANSWER soa.high.com. 500 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 200 ENTRY_END ; check SOA TTL to be the minimum of the SOA.minimum and the SOA TTL STEP 40 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION nonexistent.soa.low.com. IN A ENTRY_END STEP 41 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA AA NXDOMAIN SECTION QUESTION nonexistent.soa.low.com. IN A SECTION AUTHORITY soa.low.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 500 ENTRY_END ; check that the original SOA is also returned STEP 42 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION soa.low.com. IN SOA ENTRY_END STEP 43 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD RA AA NOERROR SECTION QUESTION soa.low.com. IN SOA SECTION ANSWER soa.low.com. 200 IN SOA dns.example.de. hostmaster.dns.example.de. 1379078166 28800 7200 604800 500 ENTRY_END ; check SOA TTL to be minimum of the SOA.minimum and the SOA TTL for DNSSEC STEP 50 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION ant.testzone.nlnetlabs.nl. IN A ENTRY_END STEP 51 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD DO RA AA NXDOMAIN SECTION QUESTION ant.testzone.nlnetlabs.nl. IN A SECTION AUTHORITY testzone.nlnetlabs.nl. 3600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 3600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= alligator.testzone.nlnetlabs.nl. 3600 IN NSEC cheetah.testzone.nlnetlabs.nl. TXT RRSIG NSEC alligator.testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 4 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. QAgQ0AsMoYG02+VPfoOctSPlTHdQOkQt5fFkSkzIbVhUzNOqa+dB/Qkc81AwFeJosA+PvYjt6utcVkIWmK2Djy9eXC49gILtVF79vUe4G7ZrybO5NXjqNa5ANoUGM+yew4wkjeNOMVAsvs+1kvFY7S8RAa/0AIYlZHQ8vNBPNaI= testzone.nlnetlabs.nl. 3600 IN NSEC alligator.testzone.nlnetlabs.nl. NS SOA RRSIG NSEC DNSKEY testzone.nlnetlabs.nl. 3600 IN RRSIG NSEC 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. gTKn6U1nal9oA79IRxLa/7zexl6A0yJZzeEGBbZ5rh5feyAr2X4LTR9bPCgcHeMVggf4FP+kD1L/sxzj/YLwB1ZKGKlwnzsHtPFTlmvDClaqQ76DRZq5Vejr2ZfnclBUb2vtxaXywTRW8oueaaq9flcShEQ/cQ+KRU8sc344qd0= ENTRY_END ; check that the original SOA is also returned STEP 52 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION testzone.nlnetlabs.nl. IN SOA ENTRY_END STEP 53 CHECK_ANSWER ENTRY_BEGIN MATCH all ttl REPLY QR RD DO RA AA NOERROR SECTION QUESTION testzone.nlnetlabs.nl. IN SOA SECTION ANSWER testzone.nlnetlabs.nl. 4600 IN SOA ns.nlnetlabs.nl. ralph.nlnetlabs.nl. 1 14400 3600 604800 3600 testzone.nlnetlabs.nl. 4600 IN RRSIG SOA 8 3 3600 20180313102201 20180213102201 44940 testzone.nlnetlabs.nl. GhmXNFQktZIgaBpGKwj9Q2mfq5+jcbRPK+PPgtRVicUPZga/d/iGEL8PV/8DzGwkaZbM14pamSUMgdJibW4zNhLz/ukjPilbjoj6giH1jtbdZLAQ6iK9pZ/4jKUEq4txviTczZNnDeolgPEEl4xo4NclQmi7zj1XBlQRbjvG0/0= ENTRY_END SCENARIO_END unbound-1.13.1/testdata/iter_fwdfirstequal.rpl0000644000175000017500000000545614010434640021144 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. forward-zone: name: "." forward-addr: 1.2.3.6 # failing resolver forward-first: yes CONFIG_END SCENARIO_BEGIN Test forward-first directive with equal stub name configured. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; local resolver (that fails a lot) RANGE_BEGIN 0 100 ADDRESS 1.2.3.6 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA SERVFAIL SECTION QUESTION example.com. IN NS SECTION ANSWER ;example.com. IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RA SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ;www.example.com. IN A 10.20.30.50 SECTION AUTHORITY ;example.com. IN NS ns.example.com. SECTION ADDITIONAL ;ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/auth_xfr_ixfrmismatch.rpl0000644000175000017500000001341614010434640021632 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" auth-zone: name: "example.com." ## zonefile (or none). ## zonefile: "example.com.zone" ## master by IP address or hostname ## can list multiple masters, each on one line. ## master: master: 1.2.3.44 ## url for http fetch ## url: ## queries from downstream clients get authoritative answers. ## for-downstream: yes for-downstream: yes ## queries are used to fetch authoritative answers from this zone, ## instead of unbound itself sending queries there. ## for-upstream: yes for-upstream: yes ## on failures with for-upstream, fallback to sending queries to ## the authority servers ## fallback-enabled: no ## this line generates zonefile: \n"/tmp/xxx.example.com"\n zonefile: TEMPFILE_NAME example.com ## this is the inline file /tmp/xxx.example.com ## the tempfiles are deleted when the testrun is over. TEMPFILE_CONTENTS example.com example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.5 mail.example.com. 3600 IN A 1.2.3.6 mail.example.com. 3600 IN A 1.2.3.7 TEMPFILE_END stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test authority zone with IXFR that has mismatched data ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.44 ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN A SECTION ANSWER ns.example.net. IN A 1.2.3.44 SECTION AUTHORITY example.net. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION ns.example.net. IN AAAA SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL www.example.net. IN A 1.2.3.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.net. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN SOA SECTION ANSWER ; serial, refresh, retry, expire, minimum example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN IXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. IN SOA ns.example.com. hostmaster.example.com. 1 3600 900 86400 3600 www.example.com. IN A 1.2.3.4 mail.example.com. 3600 IN A 1.2.3.6 ; this is the delete of the nonexistant entry nonexist.example.com. 3600 IN A 1.2.3.4 example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 EXTRA_PACKET REPLY QR AA NOERROR SECTION QUESTION example.com. IN IXFR SECTION ANSWER www.example.com. IN A 1.2.3.5 mail.example.com. 3600 IN A 1.2.3.8 mail.example.com. IN AAAA ::5 add2.example.com. 3600 IN A 1.2.3.4 example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. IN NS ns.example.net. EXTRA_PACKET REPLY QR AA NOERROR SECTION QUESTION example.com. IN AXFR SECTION ANSWER www.example.com. IN A 1.2.3.6 example.com. IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 TIME_PASSES ELAPSE 1 ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.4 ENTRY_END STEP 30 TIME_PASSES ELAPSE 3600 STEP 40 TRAFFIC STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR AA RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 1.2.3.6 ENTRY_END ; the zonefile was updated with new contents STEP 70 CHECK_TEMPFILE example.com FILE_BEGIN example.com. 3600 IN SOA ns.example.com. hostmaster.example.com. 2 3600 900 86400 3600 example.com. 3600 IN NS ns.example.net. www.example.com. 3600 IN A 1.2.3.6 FILE_END SCENARIO_END unbound-1.13.1/testdata/autotrust_missing_all.rpl0000644000175000017500000003331414010434640021666 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with all keys missing ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. KSK 55582 RANGE_BEGIN 0 10 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090924111500 20090821111500 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 RANGE_BEGIN 11 40 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 55582 example.com. CoMon+lWPAsUvgfpCTDPx8Zn8dQpky3lu2O6T+oJ2Mat9a/u1YwGhSQHGPn7ZNG/4vKM97tx84sSlUGz3geD1w== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091024111500 20090921111500 60946 example.com. o+Cbs7DcYPYlSLd4hi3vkSVQpXGnKgKSi9MpHGfu1Uahv5190U2DUOxP1du/HOYbf+IHYL8zLbMZjVEG5wgnTg== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 55582 and 60946 (signatures updated) RANGE_BEGIN 41 50 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; KSK 2 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 30899 example.com. rkaCUpTFPWVu4Om5oMTR+39Mct6ZMs56xrE0rbxMMOokfvIQheIxsAEc5BFJeA/2y5WTewl6diCD6yQXCybrDg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 55582 example.com. v/HJbdpeVMpbhwYXrT1EDGpAFMvEgdKQII1cAbP6o8KHYNKDh8TIJ25/pXe3daEXfej6/Z5kpqJ79okPKUoi1Q== ;{id = 55582} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091124111500 20091018111500 60946 example.com. HgXol1hdvbomOM1CFRW8qsHd3D0qOnN72EeMHTcpxIBBiuNLKZn4n1M14Voxj3vo0eAMNuG/y7EjQkxKvSsaDA== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 missing , 55582 is missing RANGE_BEGIN 51 60 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 30899 example.com. wzXQvn/XBgdkUn0HFl/mzaxZ30k8R9126hCio+gH5MgaFhWIdp8ob0TWRDA5yzrQCKzkyUqqcx+6fUWVOZOtXg== ;{id = 30899} ; includes a signature from 60946. example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20091224111500 20091118111500 60946 example.com. rn/rE/xoqKRbTz1tGUjTESB5e4UrFT5liigwrUi5a6nxn9juhAa+o1VbMXi1zXCAnZwHRE+tGZc8v44zjeioIw== ;{id = 60946} ENTRY_END RANGE_END ; ns.example.com. KSK 60946 RANGE_BEGIN 61 70 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ; signatures example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 30899 example.com. ukRqyDSzKwQ6tI59ThkPDOcO+F6JFwfHMcRKq4N+ZM5pGc/aVZaFyF9M8dyF/tfwst1kVwF+r7eQuJuZuFm0Fg== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20101224111500 20101118111500 60946 example.com. G8wabxIoGwpFPycOuOfBk6+l2/E/t3DhKlzUGBZjMY7gE+tOLCZnibZrhLd+2j07hoISlJ88fosjOdpD8Sqsqw== ;{id = 60946} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 TRAFFIC ; the initial probe STEP 7 ASSIGN t0 = ${time} STEP 8 ASSIGN probe0 = ${range 4800 ${timeout} 5400} ; the auto probing should have been done now. STEP 10 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t0} ;;${ctime $t0} ;;last_success: ${$t0} ;;${ctime $t0} ;;next_probe_time: ${$t0 + $probe0} ;;${ctime $t0 + $probe0} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; key prepublished. First poll. 30 days later STEP 11 TIME_PASSES EVAL ${30*24*3600} STEP 12 TRAFFIC STEP 13 ASSIGN t1 = ${time} STEP 14 ASSIGN probe1 = ${range 4800 ${timeout} 5400} STEP 15 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t1} ;;${ctime $t1} ;;last_success: ${$t1} ;;${ctime $t1} ;;next_probe_time: ${$t1 + $probe1} ;;${ctime $t1 + $probe1} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=1 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Second poll. 10 days later STEP 21 TIME_PASSES EVAL ${10*24*3600} STEP 22 TRAFFIC STEP 23 ASSIGN t2 = ${time} STEP 24 ASSIGN probe2 = ${range 4800 ${timeout} 5400} STEP 25 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t2} ;;${ctime $t2} ;;last_success: ${$t2} ;;${ctime $t2} ;;next_probe_time: ${$t2 + $probe2} ;;${ctime $t2 + $probe2} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=2 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; Third poll. 10 days later STEP 31 TIME_PASSES EVAL ${10*24*3600} STEP 32 TRAFFIC STEP 33 ASSIGN t3 = ${time} STEP 34 ASSIGN probe3 = ${range 4800 ${timeout} 5400} STEP 35 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t3} ;;${ctime $t3} ;;last_success: ${$t3} ;;${ctime $t3} ;;next_probe_time: ${$t3 + $probe3} ;;${ctime $t3 + $probe3} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=1 [ ADDPEND ] ;;count=3 ;;lastchange=${$t1} ;;${ctime $t1} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 11 days later, hold down has lapsed. STEP 41 TIME_PASSES EVAL ${11*24*3600} STEP 42 TRAFFIC STEP 43 ASSIGN t4 = ${time} STEP 44 ASSIGN probe4 = ${range 4800 ${timeout} 5400} STEP 45 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t4} ;;${ctime $t4} ;;last_success: ${$t4} ;;${ctime $t4} ;;next_probe_time: ${$t4 + $probe4} ;;${ctime $t4 + $probe4} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t4} ;;${ctime $t4} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=2 [ VALID ] ;;count=0 ;;lastchange=${$t0} ;;${ctime $t0} FILE_END ; 30 days later, the old key is revoked STEP 51 TIME_PASSES EVAL ${30*24*3600} STEP 52 TRAFFIC STEP 53 ASSIGN t5 = ${time} STEP 54 ASSIGN probe5 = ${range 4800 ${timeout} 5400} STEP 55 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t5} ;;${ctime $t5} ;;last_success: ${$t5} ;;${ctime $t5} ;;next_probe_time: ${$t5 + $probe5} ;;${ctime $t5 + $probe5} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END ; 370 days later, no keys are removed because there are no valid keys STEP 61 TIME_PASSES EVAL ${370*24*3600} STEP 62 TRAFFIC STEP 63 ASSIGN t6 = ${time} STEP 64 ASSIGN probe6 = ${range 4800 ${timeout} 5400} STEP 65 CHECK_AUTOTRUST example.com FILE_BEGIN ; autotrust trust anchor file ;;id: example.com. 1 ;;last_queried: ${$t6} ;;${ctime $t6} ;;last_success: ${$t6} ;;${ctime $t6} ;;next_probe_time: ${$t6 + $probe6} ;;${ctime $t6 + $probe6} ;;query_failed: 0 ;;query_interval: 5400 ;;retry_time: 3600 example.com. 10800 IN DNSKEY 257 3 5 AwEAAeiaUiUIpWMfYz5L0sfJTZWnuN9IyBX4em9VjsoqQTsOD1HDQpNb4buvJo7pN2aBCxNS7e0OL8e2mVB6CLZ+8ek= ;{id = 60946 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ;;state=3 [ MISSING ] ;;count=0 ;;lastchange=${$t5} ;;${ctime $t5} FILE_END SCENARIO_END unbound-1.13.1/testdata/subnet_max_source.crpl0000644000175000017500000001517114010434640021124 0ustar wouterwouter; When the triggering query includes ECS option, source prefix-length should ; be set to the shorter of the incoming query or server maximum cacheable prefix ; length server: val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" send-client-subnet: 1.2.3.4 max-client-subnet-ipv4: 17 module-config: "subnetcache validator iterator" verbosity: 3 qname-minimisation: "no" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test shortest source prefix-length ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id copy_ednsdata_assume_clientsubnet REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ;; we expect to receive empty HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id copy_ednsdata_assume_clientsubnet REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 06 ; option length 00 01 ; Family 10 00 ; source mask, scopemask 7f 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END ; client send /18, we expect /17 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id copy_ednsdata_assume_clientsubnet REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.50 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.1.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 00 ; source mask, scopemask 7f 01 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END ; client send /17, we return /18 ENTRY_BEGIN MATCH opcode qtype qname ednsdata ADJUST copy_id copy_ednsdata_assume_clientsubnet increment_ecs_scope REPLY QR NOERROR SECTION QUESTION www.example.com. IN TXT SECTION ANSWER www.example.com. IN TXT "longer scope" SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.1.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 00 ; source mask, scopemask 7f 01 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN HEX_ANSWER_BEGIN; 00 00 01 00 00 01 00 00 ;ID 0 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01 00 00 29 10 00 00 00 80 00 00 0a 00 08 00 06 ; OPC, optlen 00 01 10 00 ; ip4, scope 16, source 0 7f 00 ;127.0.0.0/16 HEX_ANSWER_END ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all ednsdata REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.0.0.1 00 08 ; OPC 00 06 ; option length 00 01 ; Family 10 10 ; source mask, scopemask 7f 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 11 QUERY ENTRY_BEGIN HEX_ANSWER_BEGIN; 00 00 01 00 00 01 00 00 ;ID 0 00 00 00 01 03 77 77 77 ; www.example.com A? (DO) 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01 00 00 29 10 00 00 00 80 00 00 0b 00 08 00 07 ; OPC, optlen 00 01 12 00 ; ip4, scope 18, source 0 7f 01 00 ;127.1.0.0/18 HEX_ANSWER_END ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all ednsdata REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.50 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.1.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 12 11 ; source mask, scopemask 7f 01 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END STEP 21 QUERY ENTRY_BEGIN HEX_ANSWER_BEGIN; 00 00 01 00 00 01 00 00 ;ID 0 00 00 00 01 03 77 77 77 ; www.example.com TXT? (DO) 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 10 00 01 00 00 29 10 00 00 00 80 00 00 0b 00 08 00 07 ; OPC, optlen 00 01 11 00 ; ip4, scope 17, source 0 7f 01 00 ;127.1.0.0/17 HEX_ANSWER_END ENTRY_END ; server returns /18, since we cache the result to max-client-subnet-ipv4 (/17), ; the initial answer returned to the client should also be capped to /17. STEP 30 CHECK_ANSWER ENTRY_BEGIN MATCH all ednsdata REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN TXT SECTION ANSWER www.example.com. IN TXT "longer scope" SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL HEX_EDNSDATA_BEGIN ; client is 127.1.0.1 00 08 ; OPC 00 07 ; option length 00 01 ; Family 11 11 ; source mask, scopemask 7f 01 00 ; address HEX_EDNSDATA_END ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_jostle.rpl0000644000175000017500000000407414010434640017374 0ustar wouterwouter; config options go here. ; This is one forever, one jostle. server: num-queries-per-thread: 2 forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Test too many queries asked, last is too recent to be jostled ; fill the forever slot. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; NO REPLY (this step is not needed) STEP 3 NOTHING ;something enters the jostle slot. STEP 4 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.net. IN A ENTRY_END STEP 5 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.net. IN A ENTRY_END ; something else tries to replace the entry in the jostle slot. ; but the entry in the jostle slot is too recent. STEP 6 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.org. IN A ENTRY_END ; reply from latest query returns STEP 7 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.42 SECTION AUTHORITY www.example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 10.20.30.50 ENTRY_END ; answer to last query STEP 8 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.net. IN A SECTION ANSWER www.example.net. IN A 10.20.30.42 ENTRY_END ; reply from first query returns STEP 10 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END ; answer to first query STEP 11 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END ; testbound checks before exit: ; * no more pending queries outstanding. ; * and no answers that have not been checked. unbound-1.13.1/testdata/val_cnametoposnowc.rpl0000644000175000017500000001743114010434640021136 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" trust-anchor: "example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b}" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with a cname to positive wildcard without proof ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION ANSWER net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns.example.net. SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY DSA 2 3600 20070926134150 20070829134150 2854 example.com. MCwCFBQRtlR4BEv9ohi+PGFjp+AHsJuHAhRCvz0shggvnvI88DFnBDCczHUcVA== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME www.example.net. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFGcJxnNxpWCBzXejiSdl4p1BKRMnAhUApoJrugVBRwFgAoYAhhqlZFac7fE= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN AAAA ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.com. IN A ENTRY_END RANGE_END ; ns.example.net. RANGE_BEGIN 0 100 ADDRESS 1.2.3.5 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN NS SECTION ANSWER example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.net. IN DNSKEY SECTION ANSWER example.net. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} example.net. 3600 IN RRSIG DNSKEY RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. hiFzlQ8VoYgCuvIsfVuxC3mfJDqsTh0yc6abs5xMx5uEcIjb0dndFQx7INOM+imlzveEN73Hqp4OLFpFhsWLlw== ;{id = 30899} SECTION AUTHORITY example.net. IN NS ns.example.net. example.net. 3600 IN RRSIG NS RSASHA1 2 3600 20070926134150 20070829134150 30899 example.net. E8JX0l4B+cSR5bkHQwOJy1pBmlLMTYCJ8EwfNMU/eCv0YhKwo26rHhn52FGisgv+Nwp7/NbhHqQ+kJgoZC94XA== ;{id = 30899} SECTION ADDITIONAL ns.example.net. IN A 1.2.3.5 ns.example.net. 3600 IN RRSIG A RSASHA1 3 3600 20070926134150 20070829134150 30899 example.net. x+tQMC9FhzT7Fcy1pM5NrOC7E8nLd7THPI3C6ie4EwL8PrxllqlR3q/DKB0d/m0qCOPcgN6HFOYURV1s4uAcsw== ;{id = 30899} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.net. IN A SECTION ANSWER ; from *.example.net. www.example.net. IN A 11.12.13.14 www.example.net. 3600 IN RRSIG A 5 2 3600 20070926134150 20070829134150 30899 example.net. quSyDbSeHRvyMmanqq5rW+APC9MKOswbRLB5QP/G+C2iyokQFLuRTlX9Wmo/jo1Oo1MGBefJUmP9NdRd2EqABA== ;{id = 30899} SECTION AUTHORITY ; missing proof ;wab.example.net IN NSEC wzz.example.net. A NSEC RRSIG ;wab.example.net. 3600 IN RRSIG NSEC 5 3 3600 20070926134150 20070829134150 30899 example.net. gl8vkI3xfSWx4Pyv5OdOthiewE6u/13kclY7UG9ptuFBddamdJO3RQqyxM6Xcmq+ToO4kMCCyaKijp01gTDoGg== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.net. IN A ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA REFUSED SECTION QUESTION ns.example.net. IN AAAA ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/pymod.tdir/0000755000175000017500000000000014010434640016601 5ustar wouterwouterunbound-1.13.1/testdata/pymod.tdir/pymod.test0000644000175000017500000000240314010434640020631 0ustar wouterwouter# #-- pymod.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else echo "no python module" exit 0 fi if test "`uname 2>&1`" = "Darwin"; then ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" fi # see if config file verifies if $PRE/unbound-checkconf ub.conf; then echo "checkconf OK" else echo "checkconf failed" exit 1 fi # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "10.20.30.40" outfile; then echo "OK" else echo "Not OK" exit 1 fi echo "> dig www2.example.com." dig @localhost -p $UNBOUND_PORT www2.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" if grep "192.168.1.1" outfile; then echo "OK" else echo "Not OK" exit 1 fi exit 0 unbound-1.13.1/testdata/pymod.tdir/pymod.py0000644000175000017500000001512214010434640020304 0ustar wouterwouter# -*- coding: utf-8 -*- ''' ubmodule-msg.py: simple response packet logger Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. Modified for unit test by Wouter Wijngaards, NLnet Labs, 2009. ''' import os def init(id, cfg): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) return True def deinit(id): log_info("pythonmod: deinit called, module id is %d" % id) return True def inform_super(id, qstate, superqstate, qdata): return True def setTTL(qstate, ttl): """Sets return_msg TTL and all the RRs TTL""" if qstate.return_msg: qstate.return_msg.rep.ttl = ttl if (qstate.return_msg.rep): for i in range(0,qstate.return_msg.rep.rrset_count): d = qstate.return_msg.rep.rrsets[i].entry.data for j in range(0,d.count+d.rrsig_count): d.rr_ttl[j] = ttl def dataHex(data, prefix=""): res = "" for i in range(0, int((len(data)+15)/16)): res += "%s0x%02X | " % (prefix, i*16) if type(data[0]) == type(1): d = map(lambda x:int(x), data[i*16:i*16+17]) else: d = map(lambda x:ord(x), data[i*16:i*16+17]) for ch in d: res += "%02X " % ch for i in range(0,17-len(data[i*16:i*16+17])): res += " " res += "| " for ch in d: if (ch < 32) or (ch > 127): res += ". " else: res += "%c " % ch res += "\n" return res def printReturnMsg(qstate): print ("Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount, qstate.return_msg.rep.security, qstate.return_msg.rep.ttl)) print (" qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str) if (qstate.return_msg.rep): print ("RRSets:",qstate.return_msg.rep.rrset_count) prevkey = None for i in range(0,qstate.return_msg.rep.rrset_count): r = qstate.return_msg.rep.rrsets[i] rk = r.rk print (i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags) print ("type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class)) d = r.entry.data print (" RRDatas:",d.count+d.rrsig_count) for j in range(0,d.count+d.rrsig_count): print (" ",j,":","TTL=",d.rr_ttl[j],"RR data:") print (dataHex(d.rr_data[j]," ")) def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) #print ("pythonmod: per query data", qdata) print ("Query:", qstate.qinfo.qname, qstate.qinfo.qname_list, qstate.qinfo.qname_str) print ("Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype) print ("Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass) print () if (event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS) and (qstate.qinfo.qname_str.endswith("www2.example.com.")): print (qstate.qinfo.qname_str) qstate.ext_state[id] = MODULE_FINISHED msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300) #msg.authority.append("xxx.seznam.cz. 10 IN A 192.168.1.1") #msg.additional.append("yyy.seznam.cz. 10 IN A 1.1.1.2.") # answer can be returned to the client without further checking. if qstate.qinfo.qtype == RR_TYPE_A: msg.answer.append("%s 10 IN A 192.168.1.1" % qstate.qinfo.qname_str) if (qstate.qinfo.qtype == RR_TYPE_SRV) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN SRV 0 0 80 neinfo.example.com." % qstate.qinfo.qname_str) if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN TXT path=/" % qstate.qinfo.qname_str) print(msg.answer) if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True #qstate.return_msg.rep.security = 2 #pokud nebude nasledovat validator, je zapotrebi nastavit security, aby nebyl paket zahozen v mesh_send_reply printReturnMsg(qstate) #Authoritative result can't be stored in cache #if (not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0)): # print "Can't store in cache" # qstate.ext_state[id] = MODULE_ERROR # return False #print "Store OK" qstate.return_rcode = RCODE_NOERROR return True if event == MODULE_EVENT_NEW: qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: previous module done") qstate.ext_state[id] = MODULE_FINISHED return True if event == MODULE_EVENT_PASS: log_info("pythonmod: event_pass") qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") qstate.ext_state[id] = MODULE_ERROR return True log_info("pythonmod: script loaded.") unbound-1.13.1/testdata/pymod.tdir/pymod.post0000644000175000017500000000070614010434640020643 0ustar wouterwouter# #-- pymod.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here PRE="../.." . ../common.sh # if no python; exit if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else echo "no python module" exit 0 fi kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/pymod.tdir/pymod.pre0000644000175000017500000000275114010434640020446 0ustar wouterwouter# #-- pymod.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh # if no python; exit if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else echo "no python module" exit 0 fi # get module python local cp $PRE/pythonmod/unboundmodule.py . if test "`uname 2>&1`" = "Darwin"; then ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" fi get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < pymod.conf > ub.conf # see if config file verifies if $PRE/unbound-checkconf ub.conf 2>&1; then echo "checkconf OK" else echo "checkconf failed" exit 1 fi # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT pymod.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # start unbound in the background $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/pymod.tdir/pymod.dsc0000644000175000017500000000041314010434640020422 0ustar wouterwouterBaseName: pymod Version: 1.0 Description: Test python module CreationDate: Thu Apr 2 12:50:50 CEST 2009 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: pymod.pre Post: pymod.post Test: pymod.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/pymod.tdir/pymod.conf0000644000175000017500000000046214010434640020602 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no module-config: "validator python iterator" python: python-script: "pymod.py" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/pymod.tdir/pymod.testns0000644000175000017500000000053314010434640021174 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_jostle_out.rpl0000644000175000017500000000416114010434640020260 0ustar wouterwouter; config options go here. ; This is one forever, one jostle. server: num-queries-per-thread: 2 forward-zone: name: "." forward-addr: 216.0.0.1 CONFIG_END SCENARIO_BEGIN Test too many queries asked, last one jostled out to make space ; fill the forever slot. STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END STEP 2 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.com. IN A ENTRY_END ; NO REPLY (this step is not needed) STEP 3 NOTHING ;something enters the jostle slot. STEP 4 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.net. IN A ENTRY_END STEP 5 CHECK_OUT_QUERY ENTRY_BEGIN MATCH qname qtype opcode SECTION QUESTION www.example.net. IN A ENTRY_END ; 300 msec passes STEP 6 TIME_PASSES ELAPSE 0.300 ; something else tries to replace the entry in the jostle slot. ; and it works because the entry is now too old. STEP 8 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.org. IN A ENTRY_END ; reply from latest query returns STEP 9 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.org. IN A SECTION ANSWER www.example.org. IN A 10.20.30.42 SECTION AUTHORITY www.example.org. IN NS ns.example.org. SECTION ADDITIONAL ns.example.org. IN A 10.20.30.50 ENTRY_END ; answer to last query STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.org. IN A SECTION ANSWER www.example.org. IN A 10.20.30.42 ENTRY_END ; reply from first query returns STEP 11 REPLY ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY www.example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 10.20.30.50 ENTRY_END ; answer to first query STEP 12 CHECK_ANSWER ENTRY_BEGIN MATCH opcode qname qtype SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 ENTRY_END SCENARIO_END ; testbound checks before exit: ; * no more pending queries outstanding. ; * and no answers that have not been checked. unbound-1.13.1/testdata/iter_dname_yx.rpl0000644000175000017500000007277214010434640020075 0ustar wouterwouter; config options server: harden-referral-path: no target-fetch-policy: "0 0 0 0 0" stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test scrub of insecure DNAME in answer section ; root infrastucture RANGE_BEGIN 0 10000000 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION shortloop. IN TXT SECTION ANSWER shortloop. IN TXT "shortloop end" ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN A SECTION ANSWER K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION K.ROOT-SERVERS.NET. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH subdomain opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH subdomain opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION net. IN A SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH subdomain opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION x. IN A SECTION AUTHORITY x. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION long. IN NS SECTION AUTHORITY long. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS SECTION AUTHORITY 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END RANGE_END ; end of root infrastucture ; a.gtld-servers.net. (com. net. x.) RANGE_BEGIN 0 10000000 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN A SECTION ANSWER a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION a.gtld-servers.net. IN AAAA SECTION ANSWER ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION net. IN NS SECTION AUTHORITY net. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN A SECTION AUTHORITY example.com. IN NS ns1.example.com. SECTION ADDITIONAL ns1.example.com. IN A 168.192.2.2 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.net. IN A SECTION AUTHORITY example.net. IN NS ns1.example.net. SECTION ADDITIONAL ns1.example.net. IN A 168.192.3.3 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x. IN NS SECTION AUTHORITY x. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION x. IN DNAME SECTION AUTHORITY x. IN DNAME . SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION shortloop.x.x. IN CNAME SECTION ANSWER x. DNAME . shortloop.x.x. IN CNAME shortloop.x. shortloop.x. IN CNAME shortloop. ENTRY_END ENTRY_BEGIN MATCH qname opcode ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION shortloop.x. IN CNAME SECTION ANSWER x. DNAME . shortloop.x. IN CNAME shortloop. ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS SECTION AUTHORITY 60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR NOERROR SECTION QUESTION long. IN NS SECTION AUTHORITY long. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ; DNAME at zone apex, allowed by RFC 6672 section 2.3 ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION long. IN DNAME SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.long. IN A SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. x.long. 3600 IN CNAME x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. 3600 IN A 192.0.2.1 ENTRY_END ENTRY_BEGIN MATCH qname qtype opcode ADJUST copy_id REPLY QR AA NOERROR SECTION QUESTION x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. IN A SECTION ANSWER x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. 3600 IN A 192.0.2.1 ENTRY_END ENTRY_BEGIN MATCH qname opcode ADJUST copy_id copy_query REPLY QR AA YXDOMAIN SECTION QUESTION too.long. IN A SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ENTRY_END RANGE_END ; end of a.gtld-servers.net. ; RFC 6672 section 2.2. The DNAME Substitution table tests ;# QNAME owner DNAME target result ;-- ---------------- -------------- -------------- ----------------- ;1 com. example.com. example.net. ;2 example.com. example.com. example.net. [0] ;3 a.example.com. example.com. example.net. a.example.net. ;4 a.b.example.com. example.com. example.net. a.b.example.net. ;5 ab.example.com. b.example.com. example.net. ;6 foo.example.com. example.com. example.net. foo.example.net. ;7 a.x.example.com. x.example.com. example.net. a.example.net. ;8 a.example.com. example.com. y.example.net. a.y.example.net. ;9 cyc.example.com. example.com. example.com. cyc.example.com. ;10 cyc.example.com. example.com. c.example.com. cyc.c.example.com. ;11 shortloop.x.x. x. . shortloop.x. ;12 shortloop.x. x. . shortloop. ; ; [0] The result depends on the QTYPE. If the QTYPE = DNAME, then ; the result is "example.com.", else "". ; ; Table 1. DNAME Substitution Examples ; ; line no. 1 is mostly for authoritative server ; ; line no. 2 QTYPE != DNAME ; STEP 220201 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; example.com. IN NS ; ENTRY_END ; ; STEP 220202 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode answer ; REPLY QR RD RA DO ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; ENTRY_END ; ; ; line no. 2 QTYPE == DNAME ; STEP 220203 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; example.com. IN DNAME ; ENTRY_END ; ; STEP 220204 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; REPLY QR RD RA DO ; SECTION QUESTION ; example.com. IN DNAME ; SECTION ANSWER ; example.com. IN DNAME example.net. ; ENTRY_END ; ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;3 a.example.com. example.com. example.net. a.example.net. ; ; STEP 220301 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; a.example.com. IN A ; ENTRY_END ; ; STEP 220302 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; SECTION QUESTION ; a.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME example.net. ; a.example.com. IN CNAME a.example.net. ; a.example.net. IN A 10.0.0.97 ; ENTRY_END ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;4 a.b.example.com. example.com. example.net. a.b.example.net. ; ; STEP 220401 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; a.b.example.com. IN A ; ENTRY_END ; ; STEP 220402 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; SECTION QUESTION ; a.b.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME example.net. ; a.b.example.com. IN CNAME a.b.example.net. ; a.b.example.net. IN A 10.0.97.98 ; ENTRY_END ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;5 ab.example.com. b.example.com. example.net. ; ;6 foo.example.com. example.com. example.net. foo.example.net. ; ; ; line no. 5 is mostly for authoritative server ; ; line no. 6 is basically the same as line no. 3 ; ; ; ns1.example.com. ; RANGE_BEGIN 220000 220699 ; ADDRESS 168.192.2.2 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN A ; SECTION ANSWER ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN AAAA ; SECTION ANSWER ; ENTRY_END ; ; ; line 2 DNAME ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN DNAME ; SECTION ANSWER ; example.com. IN DNAME example.net. ; ENTRY_END ; ; ; line 3 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; a.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME example.net. ; a.example.com. IN CNAME a.example.net. ; ENTRY_END ; ; ; line 4 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; a.b.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME example.net. ; a.b.example.com. IN CNAME a.b.example.net. ; ENTRY_END ; RANGE_END ; ; end of ns1.example.com. ; ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;7 a.x.example.com. x.example.com. example.net. a.example.net. ; ; STEP 220701 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; a.x.example.com. IN A ; ENTRY_END ; ; STEP 220702 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; SECTION QUESTION ; a.x.example.com. IN A ; SECTION ANSWER ; x.example.com. IN DNAME example.net. ; a.x.example.com. IN CNAME a.example.net. ; a.example.net. IN A 10.0.0.97 ; ENTRY_END ; ; ; ns1.example.com. ; RANGE_BEGIN 220700 220799 ; ADDRESS 168.192.2.2 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN A ; SECTION ANSWER ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN AAAA ; SECTION ANSWER ; ENTRY_END ; ; ; line 7 DNAME ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN DNAME ; SECTION ANSWER ; x.example.com. IN DNAME example.net. ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; a.x.example.com. IN A ; SECTION ANSWER ; x.example.com. IN DNAME example.net. ; a.x.example.com. IN CNAME a.example.net. ; ENTRY_END ; RANGE_END ; ; end of ns1.example.com. ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;8 a.example.com. example.com. y.example.net. a.y.example.net. ; ; ; ; a.example.com. was renamed to a2.example.com. to avoid cache clashes ; ; on the synthetized CNAME (caching CNAMEs is allowed by RFC 6672 section 3.4) ; ; STEP 220801 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; a2.example.com. IN A ; ENTRY_END ; ; STEP 220802 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; SECTION QUESTION ; a2.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME y.example.net. ; a2.example.com. IN CNAME a2.y.example.net. ; a2.y.example.net. IN A 10.97.50.121 ; ENTRY_END ; ; ; ns1.example.com. ; RANGE_BEGIN 220800 220899 ; ADDRESS 168.192.2.2 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN A ; SECTION ANSWER ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN AAAA ; SECTION ANSWER ; ENTRY_END ; ; ; line 8 DNAME ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN DNAME ; SECTION ANSWER ; example.com. IN DNAME y.example.net. ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; a2.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME y.example.net. ; a2.example.com. IN CNAME a2.y.example.net. ; ENTRY_END ; RANGE_END ; ; end of ns1.example.com. ; ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;9 cyc.example.com. example.com. example.com. cyc.example.com. ; ; STEP 220901 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; cyc.example.com. IN A ; ENTRY_END ; ; ; Expected result is defined by RFC 1034 section 3.6.2: ; ; CNAME chains should be followed and CNAME loops signalled as an error ; STEP 220902 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; REPLY SERVFAIL ; SECTION QUESTION ; cyc.example.com. IN A ; ENTRY_END ; ; ; ns1.example.com. ; RANGE_BEGIN 220900 220999 ; ADDRESS 168.192.2.2 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN A ; SECTION ANSWER ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN AAAA ; SECTION ANSWER ; ENTRY_END ; ; ; line 9 DNAME ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN DNAME ; SECTION ANSWER ; example.com. IN DNAME example.com. ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; cyc.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME example.com. ; cyc.example.com. IN CNAME cyc.example.com. ; ENTRY_END ; RANGE_END ; ; end of ns1.example.com. ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;10 cyc.example.com. example.com. c.example.com. cyc.c.example.com. ; ; ; ; cyc.example.com. was renamed to cyc2.example.com. to avoid cache clashes ; ; on the synthetized CNAME (caching CNAMEs is allowed by RFC 6672 section 3.4) ; ; ; ; target c.example.com. was renamed to cyc2.example.net. ; ; to limit number of pre-canned answers required for the test ; ; STEP 221001 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; cyc2.example.com. IN A ; ENTRY_END ; ; ; Expected result is defined by RFC 1034 section 3.6.2: ; ; CNAME chains should be followed and CNAME loops signalled as an error ; STEP 221002 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; REPLY SERVFAIL ; SECTION QUESTION ; cyc2.example.com. IN A ; ENTRY_END ; ; ; ns1.example.com. ; RANGE_BEGIN 221000 221099 ; ADDRESS 168.192.2.2 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN NS ; SECTION ANSWER ; example.com. IN NS ns1.example.com. ; SECTION ADDITIONAL ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN A ; SECTION ANSWER ; ns1.example.com. IN A 168.192.2.2 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.com. IN AAAA ; SECTION ANSWER ; ENTRY_END ; ; ; line 10 DNAME ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.com. IN DNAME ; SECTION ANSWER ; example.com. IN DNAME cyc2.example.net. ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; cyc2.example.com. IN A ; SECTION ANSWER ; example.com. IN DNAME cyc2.example.net. ; cyc2.example.com. IN CNAME cyc2.cyc2.example.net. ; ENTRY_END ; RANGE_END ; ; end of ns1.example.com. ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;11 shortloop.x.x. x. . shortloop.x. ; ; STEP 221101 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; shortloop.x.x. TXT ; ENTRY_END ; ; STEP 221102 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; SECTION QUESTION ; shortloop.x.x. IN TXT ; SECTION ANSWER ; x. IN DNAME . ; ; unbound hack ; x. IN DNAME . ; shortloop.x.x. IN CNAME shortloop.x. ; shortloop.x. IN CNAME shortloop. ; shortloop. IN TXT "shortloop end" ; ENTRY_END ; ; ;# QNAME owner DNAME target result ; ;-- ---------------- -------------- -------------- ----------------- ; ;12 shortloop.x. x. . shortloop. ; ; ; expire potentically cached CNAMEs for shortloop.x. from cache ; STEP 221200 TIME_PASSES ELAPSE 10000 ; ; STEP 221201 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; shortloop.x. TXT ; ENTRY_END ; ; STEP 221202 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; SECTION QUESTION ; shortloop.x. IN TXT ; SECTION ANSWER ; x. IN DNAME . ; shortloop.x. IN CNAME shortloop. ; shortloop. IN TXT "shortloop end" ; ENTRY_END ; ; ; ; ns1.example.net. (data shared by whole 22xxxx range) ; RANGE_BEGIN 220000 229999 ; ADDRESS 168.192.3.3 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; example.net. IN NS ; SECTION ANSWER ; example.net. IN NS ns1.example.net. ; SECTION ADDITIONAL ; example.net. IN A 168.192.3.3 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.net. IN A ; SECTION ANSWER ; ns1.example.net. IN A 168.192.3.3 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; ns1.example.net. IN AAAA ; SECTION ANSWER ; ENTRY_END ; ; ; line 3 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; a.example.net. IN A ; SECTION ANSWER ; a.example.net. IN A 10.0.0.97 ; ENTRY_END ; ; ; line 4 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; a.b.example.net. IN A ; SECTION ANSWER ; a.b.example.net. IN A 10.0.97.98 ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; a2.y.example.net. IN A ; SECTION ANSWER ; a2.y.example.net. IN A 10.97.50.121 ; ENTRY_END ; ; ; line 10 ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; cyc2.example.net. IN DNAME ; SECTION ANSWER ; cyc2.example.net. IN DNAME example.com. ; ENTRY_END ; ; ENTRY_BEGIN ; MATCH opcode qtype qname ; ADJUST copy_id ; REPLY QR AA NOERROR ; SECTION QUESTION ; cyc2.cyc2.example.net. IN A ; SECTION ANSWER ; cyc2.example.net. IN DNAME example.com. ; cyc2.cyc2.example.com. IN CNAME cyc2.example.com. ; ENTRY_END ; RANGE_END ; ; end of ns1.example.net. ; ; ; ; RFC 6672 section 2.2: YXDOMAIN answers for too long results for substitution ; ; RFC 6672 section 2.3: DNAME can be at zone apex: zone apex = long. ; STEP 229001 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; x.long. IN A ; ENTRY_END ; ; ; query returning maximal permissible length - should work ; STEP 229002 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; SECTION QUESTION ; x.long. IN A ; SECTION ANSWER ; long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ; x.long. 3600 IN CNAME x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ; x.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. 3600 IN A 192.0.2.1 ; ENTRY_END ; result of substitution has too long name ; YXDOMAIN should be propagated to the client ; Unbound SEVFAILs: https://www.ietf.org/mail-archive/web/dnsext/current/msg11282.html STEP 229003 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION too.long. IN A ENTRY_END STEP 229004 CHECK_ANSWER ENTRY_BEGIN MATCH rcode question answer REPLY QR YXDOMAIN SECTION QUESTION too.long. IN A SECTION ANSWER long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ENTRY_END ; ; YXDOMAIN should work even if the cache is empty ; STEP 229005 TIME_PASSES ELAPSE 4000 ; ; STEP 229006 QUERY ; ENTRY_BEGIN ; REPLY RD DO ; SECTION QUESTION ; too.long. IN A ; ENTRY_END ; ; STEP 229007 CHECK_ANSWER ; ENTRY_BEGIN ; MATCH rcode question answer ; REPLY QR YXDOMAIN ; SECTION QUESTION ; x.long. IN A ; SECTION ANSWER ; long. 3600 IN DNAME 63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.63o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.60o-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ; ENTRY_END SCENARIO_END unbound-1.13.1/testdata/fwd_bogus.tdir/0000755000175000017500000000000014010434640017430 5ustar wouterwouterunbound-1.13.1/testdata/fwd_bogus.tdir/fwd_bogus.testns0000644000175000017500000000077614010434640022663 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ; give unsigned answers! ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION @ IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END unbound-1.13.1/testdata/fwd_bogus.tdir/unbound_server.key0000644000175000017500000000463314010434640023210 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/fwd_bogus.tdir/fwd_bogus.pre0000644000175000017500000000177514010434640022131 0ustar wouterwouter# #-- fwd_bogus.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 3 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) CONTROL_PORT=$(($RND_PORT + 2)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT fwd_bogus.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < fwd_bogus.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/fwd_bogus.tdir/fwd_bogus.post0000644000175000017500000000045214010434640022317 0ustar wouterwouter# #-- fwd_bogus.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID unbound-1.13.1/testdata/fwd_bogus.tdir/unbound_server.pem0000644000175000017500000000246614010434640023203 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== -----END CERTIFICATE----- unbound-1.13.1/testdata/fwd_bogus.tdir/fwd_bogus.conf0000644000175000017500000000120714010434640022256 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: "" pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" fake-sha1: yes remote-control: control-enable: yes control-interface: 127.0.0.1 # control-interface: ::1 control-port: @CONTROL_PORT@ server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/fwd_bogus.tdir/unbound_control.pem0000644000175000017500000000247614010434640023356 0ustar wouterwouter-----BEGIN CERTIFICATE----- MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/ Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/ nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte -----END CERTIFICATE----- unbound-1.13.1/testdata/fwd_bogus.tdir/fwd_bogus.dsc0000644000175000017500000000046214010434640022104 0ustar wouterwouterBaseName: fwd_bogus Version: 1.0 Description: Forward and check bogus TTL in the cache. CreationDate: Thu Sep 10 10:14:57 CEST 2009 Maintainer: dr. W.C.A. Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: fwd_bogus.pre Post: fwd_bogus.post Test: fwd_bogus.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/fwd_bogus.tdir/unbound_control.key0000644000175000017500000000462714010434640023365 0ustar wouterwouter-----BEGIN RSA PRIVATE KEY----- MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+ Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+ 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g= -----END RSA PRIVATE KEY----- unbound-1.13.1/testdata/fwd_bogus.tdir/fwd_bogus.test0000644000175000017500000000176314010434640022317 0ustar wouterwouter# #-- fwd_bogus.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." # do the test echo "> dig www.example.com." dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" # servfail. if grep "SERVFAIL" outfile; then echo "OK" else echo "Not OK" exit 1 fi # now check the cache. $PRE/unbound-control -c ub.conf dump_cache > cachedump if test $? -ne 0; then echo "unbound-control failed" cat cachedump exit 1 else echo "unbound-control ok" fi # bad cache entry looks like this # msg www.example.com. IN A 32896 1 1252576696 1 1 0 0 cat cachedump ttl=`grep "msg www.example.com" cachedump | awk '{print $7}'` echo TTL $ttl # must be smaller than bogus ttl of 60. if test $ttl -gt 61; then echo "failed: TTL too big!" exit 1 else echo "TTL OK" fi exit 0 unbound-1.13.1/testdata/autotrust_init_failsig.rpl0000644000175000017500000001334414010434640022027 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" log-time-ascii: yes fake-sha1: yes trust-anchor-signaling: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. ; initial content (say from dig example.com DNSKEY > example.com.key) AUTOTRUST_FILE example.com example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} AUTOTRUST_END CONFIG_END SCENARIO_BEGIN Test autotrust with failed signature initial trust anchor ; K-ROOT RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id copy_query REPLY QR AA SECTION QUESTION . IN NS SECTION ANSWER . IN NS k.root-servers.net. SECTION ADDITIONAL k.root-servers.net IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ns.example.com. IN NSEC nugget.example.com. A NSEC RRSIG ns.example.com. 3600 IN RRSIG NSEC 5 3 3600 20090924111500 20090821111500 30899 example.com. WRUQ5d5aBO5AXbvnfCd0AWfKGvQIuAjT2qydGkUIaLZaiP4nj+JdquEy1nGvBwYQ9gWyP7b6C6UGrUnVcNBpcw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. 3600 IN A 10.20.30.40 www.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. pYGxVLsWUvOp1wSf0iwPap+JnECfC5GAm1lRqy3YEqecNGld7U7x/5Imo3CerbdZrVptUQs2oH0lcjwYJXMnsw== ;{id = 30899} SECTION AUTHORITY example.com. 3600 IN NS ns.example.com. example.com. 3600 IN RRSIG NS 5 2 3600 20090924111500 20090821111500 30899 example.com. J5wxRq0jgwQL6yy530kvo9cHqNAUHV8IF4dvaYZL0bNraO2Oe6dVXqlJl4+cxNHI2TMsstwFPr2Zz8tv6Az2mQ== ;{id = 30899} SECTION ADDITIONAL ns.example.com. 3600 IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 5 3 3600 20090924111500 20090821111500 30899 example.com. JsXbS18oyc0zkVaOWGSFdIQuOsZKflT0GraT9afDPoWLCgH4ApF7jNgfJV7Pqy1sTBRajME5IUAhpANwGBuW4A== ;{id = 30899} ENTRY_END ENTRY_BEGIN MATCH opcode qname qtype ADJUST copy_id REPLY QR AA SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER ; KSK 1 example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} ; ZSK 1 example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (ksk), size = 512b} ; signatures ; changed the date in signatures from 20090924111500 20090821111500 ; to make them fail. example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090101010000 20090101010000 30899 example.com. b/HK231jIQLX8IhlZfup3r0yhpXaasbPE6LzxoEVVvWaTZWcLmeV8jDIcn0qO7Yvs7bIJN20lwVAV0GcHH3hWQ== ;{id = 30899} example.com. 10800 IN RRSIG DNSKEY 5 2 10800 20090101010000 20090101010000 55582 example.com. PCHme1QLoULxqjhg5tMlpR0qJlBfstEUVq18TtNoKQe9le1YhJ9caheXcTWoK+boLhXxg9u6Yyvq8FboQh0OjA== ;{id = 55582} ENTRY_END RANGE_END ; set date/time to Aug 24 07:46:40 (2009). STEP 5 TIME_PASSES ELAPSE 1251100000 STEP 6 ASSIGN t0 = ${time} STEP 7 ASSIGN probe = ${range 3200 ${timeout} 3600} ; the auto probing should have been done now. STEP 8 CHECK_AUTOTRUST example.com FILE_BEGIN example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} FILE_END STEP 10 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER ENTRY_END ; The autotrust anchor was probed due to the query. STEP 30 CHECK_AUTOTRUST example.com FILE_BEGIN example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} FILE_END ; wait and see if autotrust probes (the unchanged) domain again. STEP 40 TIME_PASSES EVAL ${$probe} STEP 50 TRAFFIC STEP 65 ASSIGN probe2 = ${range 3200 ${timeout} 3600} STEP 70 CHECK_AUTOTRUST example.com FILE_BEGIN example.com. 10800 IN DNSKEY 257 3 5 AwEAAc3Z5DQDJpH4oPdNtC4BUQHk50XMD+dHr4r8psHmivIa83hxR5CRgCtd9sENCW9Ae8OIO19xw9t/RPaEAqQa+OE= ;{id = 55582 (ksk), size = 512b} example.com. 10800 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} FILE_END SCENARIO_END unbound-1.13.1/testdata/test_ldnsrr.c40000644000175000017500000002030114010434640017277 0ustar wouterwouter000006000100000E100030036E7331000A706F73746D617374657203616C6C027272036F7267000000000100000E10000002580001518000000E10 . 3600 IN SOA ns1. postmaster.all.rr.org. 1 3600 600 86400 3600 036E733103616C6C027272036F7267000001000100000E1000040A010034 ns1.all.rr.org. 3600 IN A 10.1.0.52 03616C6C027272036F7267000002000100000E100011036E7331076578616D706C6503636F6D00 all.rr.org. 3600 IN NS ns1.example.com. 03666F6F03616C6C027272036F7267000005000100000E100010036E733103616C6C027272036F726700 foo.all.rr.org. 3600 IN CNAME ns1.all.rr.org. 03616C6C027272036F7267000007000100000E1000180A6D622D6D61646E616D65076578616D706C6503636F6D00 all.rr.org. 3600 IN MB mb-madname.example.com. 03616C6C027272036F7267000008000100000E1000180A6D672D6D676D6E616D65076578616D706C6503636F6D00 all.rr.org. 3600 IN MG mg-mgmname.example.com. 03616C6C027272036F7267000009000100000E1000180A6D722D6E65776E616D65076578616D706C6503636F6D00 all.rr.org. 3600 IN MR mr-newname.example.com. 0362617203616C6C027272036F726700000C000100000E100010036E733103616C6C027272036F726700 bar.all.rr.org. 3600 IN PTR ns1.all.rr.org. 03616C6C027272036F726700000D000100000E10000E0853554E342F31313004554E4958 all.rr.org. 3600 IN HINFO "SUN4/110" "UNIX" 0668656C69756D00000D000100000E1000301C53687574746C652D53543631473420496E74656C2050495633303030124672656542534420372E302D535441424C45 helium. 3600 IN HINFO "Shuttle-ST61G4 Intel PIV3000" "FreeBSD 7.0-STABLE" 03616C6C027272036F726700000E000100000E1000360D6D696E666F2D726D61696C6278076578616D706C6503636F6D000D6D696E666F2D656D61696C6278076578616D706C6503636F6D00 all.rr.org. 3600 IN MINFO minfo-rmailbx.example.com. minfo-emailbx.example.com. 03616C6C027272036F726700000F000100000E100015000A0656454E45524103616C6C027272036F726700 all.rr.org. 3600 IN MX 10 VENERA.all.rr.org. 0873656C6563746F720A5F646F6D61696E6B657903616C6C027272036F7267000010000100000E1000CFCE763D444B494D313B206E3D5573653D3230444B494D3B20703D41774541415A66625977385366665A77736272434C62432B4A4C45725245494636596665396171736131507A3674704757694C786D3972534C362F596F42764E50335557583931594446304A4D6F366C68753355495A6A49547649774468782B524A596B6F39764C7A61614A4B58476633796779367A2B6465576F5A4A4156316C5459304C74783967656E626F65383843534348773961534C6B68306F624E39436B3852367A414D5952313963694D2F3B20743D73 selector._domainkey.all.rr.org. 3600 IN TXT "v=DKIM1; n=Use=20DKIM; p=AwEAAZfbYw8SffZwsbrCLbC+JLErREIF6Yfe9aqsa1Pz6tpGWiLxm9rSL6/YoBvNP3UWX91YDF0JMo6lhu3UIZjITvIwDhx+RJYko9vLzaaJKXGf3ygy6z+deWoZJAV1lTY0Ltx9genboe88CSCHw9aSLkh0obN9Ck8R6zAMYR19ciM/; t=s" 03616C6C027272036F7267000011000100000E10002E0772702D6D626F78076578616D706C6503636F6D000B72702D747874646E616D65076578616D706C6503636F6D00 all.rr.org. 3600 IN RP rp-mbox.example.com. rp-txtdname.example.com. 03616C6C027272036F7267000012000100000E10001E00010E61667364622D686F73746E616D65076578616D706C6503636F6D00 all.rr.org. 3600 IN AFSDB 1 afsdb-hostname.example.com. 03616C6C027272036F7267000013000100000E10000D0C333131303631373030393536 all.rr.org. 3600 IN X25 "311061700956" 03616C6C027272036F7267000014000100000E1000140F31353038363230323830303332313703303034 all.rr.org. 3600 IN ISDN "150862028003217" "004" 03616C6C027272036F7267000015000100000E100011000A034E4554055072696D6503434F4D00 all.rr.org. 3600 IN RT 10 NET.Prime.COM. 03616C6C027272036F7267000016000100000E10001447000580005A0000000001E133FFFFFF00016100 all.rr.org. 3600 IN NSAP 0x47000580005A0000000001E133FFFFFF00016100 03616C6C027272036F726700001A000100000E100025000A046E657432026974000950524D442D6E6574320941444D442D7034303004432D697400 all.rr.org. 3600 IN PX 10 net2.it. PRMD-net2.ADMD-p400.C-it. 03616C6C027272036F726700001C000100000E10001020010DB8000000000000000000000003 all.rr.org. 3600 IN AAAA 2001:db8::3 03616C6C027272036F726700001D000100000E1000100033161389172FC470BE14C400988D20 all.rr.org. 3600 IN LOC 42 21 54.500 N 71 06 18.300 W -24m 30m 10000m 10m 03616C6C027272036F726700001D000100000E100010003316138903210070BE14C400988D20 all.rr.org. 3600 IN LOC 42 00 00.000 N 71 06 18.300 W -24m 30m 10000m 10m 055F68747470045F74637003616C6C027272036F7267000021000100000E100017000000050050036E7331076578616D706C6503636F6D00 _http._tcp.all.rr.org. 3600 IN SRV 0 5 80 ns1.example.com. 03616C6C027272036F7267000023000100000E1000290064000A000021215E75726E3A6369643A2E2B40285B5E5C2E5D2B5C2E29282E2A2924215C32216900 all.rr.org. 3600 IN NAPTR 100 10 "" "" "!^urn:cid:.+@([^\\.]+\\.)(.*)$!\\2!i" . 03616C6C027272036F7267000024000100000E100013000203727431076578616D706C6503636F6D00 all.rr.org. 3600 IN KX 2 rt1.example.com. 03616C6C027272036F7267000025000100000E10001A0006000000145B00C96D5D54AEE1206BAF84DE7AAF6E94C09C7F all.rr.org. 3600 IN CERT IPGP 0 0 FFsAyW1dVK7hIGuvhN56r26UwJx/ 0766726F626F7A7A03616C6C027272036F7267000027000100000E10001F1066726F626F7A7A2D6469766973696F6E0461636D65076578616D706C6500 frobozz.all.rr.org. 3600 IN DNAME frobozz-division.acme.example. 0373756203616C6C027272036F726700002B000100000E10001830390301123456789ABCDEF67890123456789ABCDEF67890 sub.all.rr.org. 3600 IN DS 12345 3 1 123456789ABCDEF67890123456789ABCDEF67890 03616C6C027272036F726700002C000100000E1000160201123456789ABCDEF67890123456789ABCDEF67890 all.rr.org. 3600 IN SSHFP 2 1 123456789ABCDEF67890123456789ABCDEF67890 03616C6C027272036F726700002D000100000E1000290A0102C0000226010351537986ED35533B6064478EEEB27B5BD74DAE149B6E81BA3A0521AF82AB7801 all.rr.org. 3600 IN IPSECKEY 10 1 2 192.0.2.38 AQNRU3mG7TVTO2BkR47usntb102uFJtugbo6BSGvgqt4AQ== 03616C6C027272036F726700002E000100000E10009F00010503000151803E7C9DD73E5510D70A52076578616D706C6503636F6D00A090755BA58D1AFFA576F4375831B4310920E481218D18A9F164EB3D81AFD3B875D3C75428631E0CF2A28D50875F70C329D7DBFAFEA807DC1FBA1DC34C95D401F23F334CE63BFCF3F1B5B44739E5F0EDED18D6B33F040A911376D173D757A9F0C1FA1798941BB0B36B2DF9062790FA7F0166F2737EEA907378341FB12DC0A77A all.rr.org. 3600 IN RRSIG A 5 3 86400 20030322173103 20030220173103 2642 example.com. oJB1W6WNGv+ldvQ3WDG0MQkg5IEhjRip8WTrPYGv07h108dUKGMeDPKijVCHX3DDKdfb+v6oB9wfuh3DTJXUAfI/M0zmO/zz8bW0Rznl8O3tGNazPwQKkRN20XPXV6nwwfoXmJQbsLNrLfkGJ5D6fwFm8nN+6pBzeDQfsS3Ap3o= ;{id = 2642} 03616C6C027272036F726700002F000100000E10001A04686F7374076578616D706C6503636F6D000006400100000003 all.rr.org. 3600 IN NSEC host.example.com. A MX RRSIG NSEC 03616C6C027272036F7267000030000100000E100086010003050103D22A6CA77F35B893206FD35E4C506D8378843709B97E041647E1BFF43D8D64C649AF1E371973C9E891FCE3DF519A8C840A63EE42A6D2EBDDBB97035D215AA4E417B1FA45FA11A9741EA2098C1DFA5FB5FEB332FD4BC8152089AEF36BA644CCE2413B3B72BE18CBEF8DA253F4E93D2103866D9234A2E28DF529A67D5468DBEFE3 all.rr.org. 3600 IN DNSKEY 256 3 5 AQPSKmynfzW4kyBv015MUG2DeIQ3Cbl+BBZH4b/0PY1kxkmvHjcZc8nokfzj31GajIQKY+5CptLr3buXA10hWqTkF7H6RfoRqXQeogmMHfpftf6zMv1LyBUgia7za6ZEzOJBOztyvhjL742iU/TpPSEDhm2SNKLijfUppn1UaNvv4w== ;{id = 2642 (zsk), size = 1024b} 03616C6C027272036F7267000031000100000E100023000201636FC0B8271C82825BB1AC5C41CF5351AA69B4FEBD94E8F17CDB95000DA48C40 all.rr.org. 3600 IN DHCID AAIBY2/AuCccgoJbsaxcQc9TUapptP69lOjxfNuVAA2kjEA= 20656531396B6C33363331716F6C3634366B6A6A7268366C68393670647571696903616C6C027272036F7267000032000100000E10002A01000005086467B16F6F36BA4D1408E895A1BF2A28CB891EE0DEC0574A3026E537200006400000000002 ee19kl3631qol646kjjrh6lh96pduqii.all.rr.org. 3600 IN NSEC3 1 0 5 6467B16F6F36BA4D 13k9b8dv58kcn28us3fc0lqa60jeadp0 A RRSIG 03616C6C027272036F7267000033000100000E10000D01000005086467B16F6F36BA4D all.rr.org. 3600 IN NSEC3PARAM 1 0 5 6467B16F6F36BA4D 03616C6C027272036F7267000037000100000E1000A910020084200100107B1A74DF365639CC39F1D57803010001B771CA136E4AEB5CE44333C53B3D2C13C22243851FC708BCCE29F7E2EB5787B5F56CCAD34F8223ACC10904DDB56B2EC4A6D6232F3B50EA094F0914B3B941BBE529AF582C36BBADEFDAF2ADAF9B4911906F5B2522603C615272B880EC8FB930CC6EE39C444DAA75B1678F005A4B2499D1DA5433F805C7A5AD3237ACC5DD5C5E4303727673076578616D706C6503636F6D00 all.rr.org. 3600 IN HIP 2 200100107B1A74DF365639CC39F1D578 AwEAAbdxyhNuSutc5EMzxTs9LBPCIkOFH8cIvM4p9+LrV4e19WzK00+CI6zBCQTdtWsuxKbWIy87UOoJTwkUs7lBu+Upr1gsNrut79ryra+bSRGQb1slImA8YVJyuIDsj7kwzG7jnERNqnWxZ48AWkskmdHaVDP4BcelrTI3rMXdXF5D rvs.example.com. 03616C6C027272036F7267000063000100000E10002625763D73706631202B6D7820613A636F6C6F2E6578616D706C652E636F6D2F3238202D616C6C all.rr.org. 3600 IN SPF "v=spf1 +mx a:colo.example.com/28 -all" 03616C6C027272036F7267008001000100000E10001830390301123456789ABCDEF67890123456789ABCDEF67890 all.rr.org. 3600 IN DLV 12345 3 1 123456789ABCDEF67890123456789ABCDEF67890 unbound-1.13.1/testdata/tcp_req_size.tdir/0000755000175000017500000000000014010434640020140 5ustar wouterwouterunbound-1.13.1/testdata/tcp_req_size.tdir/tcp_req_size.pre0000644000175000017500000000162114010434640023337 0ustar wouterwouter# #-- tcp_req_size.pre--# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test . ../common.sh get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test # start forwarder get_ldns_testns $LDNS_TESTNS -p $FWD_PORT tcp_req_size.testns >fwd.log 2>&1 & FWD_PID=$! echo "FWD_PID=$FWD_PID" >> .tpkg.var.test # make config file sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_req_size.conf > ub.conf # start unbound in the background PRE="../.." $PRE/unbound -vvvv -d -c ub.conf >unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log wait_unbound_up unbound.log unbound-1.13.1/testdata/tcp_req_size.tdir/tcp_req_size.conf0000644000175000017500000000103314010434640023473 0ustar wouterwouterserver: verbosity: 2 # num-threads: 1 interface: 127.0.0.1 port: @PORT@ use-syslog: no directory: . pidfile: "unbound.pid" chroot: "" username: "" do-not-query-localhost: no # extremely low number to make connections fail stream-wait-size: 10 local-zone: "example.net" static local-data: "www1.example.net. IN A 1.2.3.1" local-data: "www2.example.net. IN A 1.2.3.2" local-data: "www3.example.net. IN A 1.2.3.3" tcp-upstream: yes local-zone: "drop.net" deny forward-zone: name: "." forward-addr: "127.0.0.1@@TOPORT@" unbound-1.13.1/testdata/tcp_req_size.tdir/tcp_req_size.post0000644000175000017500000000047514010434640023544 0ustar wouterwouter# #-- tcp_req_size.post --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # source the test var file when it's there [ -f .tpkg.var.test ] && source .tpkg.var.test # # do your teardown here . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log unbound-1.13.1/testdata/tcp_req_size.tdir/tcp_req_size.test0000644000175000017500000000557614010434640023545 0ustar wouterwouter# #-- tcp_req_size.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." . ../common.sh get_make (cd $PRE; $MAKE streamtcp) # this test query should just work (server is up) echo "> query www1.example.net." $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # out of order requests, the example.com elements take 2 seconds to wait. # www3.example.com present twice, answered twice. # this queues one answer in the wait buffers, and that exceeds the buffer. echo "" echo "> query www1.example.net. www3.example.com. www2.example.net. www3.example.com. www3.example.net." $PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN www3.example.com. A IN www2.example.net A IN www3.example.com. A IN www3.example.net A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www2.example.net" outfile | grep "1.2.3.2"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "www3.example.net" outfile | grep "1.2.3.3"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi if grep "stream closed" outfile; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" # check that the server is still up echo "" echo "> query www1.example.net. (again check if server up)" $PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.net. A IN >outfile 2>&1 cat outfile if test "$?" -ne 0; then echo "exit status not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "Not OK" exit 1 fi if grep "www1.example.net" outfile | grep "1.2.3.1"; then echo "content OK" else echo "result contents not OK" echo "> cat logfiles" cat outfile cat fwd.log cat unbound.log echo "result contents not OK" exit 1 fi echo "OK" exit 0 unbound-1.13.1/testdata/tcp_req_size.tdir/tcp_req_size.dsc0000644000175000017500000000045314010434640023324 0ustar wouterwouterBaseName: tcp_req_size Version: 1.0 Description: Test tcp request wait size. CreationDate: Tue Jan 22 09:37:00 CET 2018 Maintainer: Wouter Wijngaards Category: Component: CmdDepends: Depends: Help: Pre: tcp_req_size.pre Post: tcp_req_size.post Test: tcp_req_size.test AuxFiles: Passed: Failure: unbound-1.13.1/testdata/tcp_req_size.tdir/tcp_req_size.testns0000644000175000017500000000171614010434640024076 0ustar wouterwouter; nameserver test file $ORIGIN example.com. $TTL 3600 ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www IN A SECTION ANSWER www IN A 10.20.30.40 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id SECTION QUESTION www2 IN A SECTION ANSWER www2 IN A 10.20.30.42 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=1 SECTION QUESTION www3 IN A SECTION ANSWER www3 IN A 10.20.30.43 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www4 IN A SECTION ANSWER www4 IN A 10.20.30.44 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www5 IN A SECTION ANSWER www5 IN A 10.20.30.45 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname REPLY QR AA NOERROR ADJUST copy_id sleep=2 SECTION QUESTION www6 IN A SECTION ANSWER www6 IN A 10.20.30.46 ENTRY_END unbound-1.13.1/testdata/val_cname_loop2.rpl0000644000175000017500000001051514010434640020271 0ustar wouterwouter; config options ; The island of trust is at example.com server: trust-anchor: "example.com. 3600 IN DS 2854 3 1 46e4ffc6e9a4793b488954bd3f0cc6af0dfb201b" val-override-date: "20070916134226" target-fetch-policy: "0 0 0 0 0" qname-minimisation: "no" fake-sha1: yes stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test validator with cname 2 step loop ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END RANGE_END ; ns.example.com. RANGE_BEGIN 0 100 ADDRESS 1.2.3.4 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to DNSKEY priming query ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION example.com. IN DNSKEY SECTION ANSWER example.com. 3600 IN DNSKEY 256 3 3 ALXLUsWqUrY3JYER3T4TBJII s70j+sDS/UT2QRp61SE7S3E EXopNXoFE73JLRmvpi/UrOO/Vz4Se 6wXv/CYCKjGw06U4WRgR YXcpEhJROyNapmdIKSx hOzfLVE1gqA0PweZR8d tY3aNQSRn3sPpwJr6Mi /PqQKAMMrZ9ckJpf1+b QMOOvxgzz2U1GS18b3y ZKcgTMEaJzd/GZYzi/B N2DzQ0MsrSwYXfsNLFO Bbs8PJMW4LYIxeeOe6rUgkWOF 7CC9Dh/dduQ1QrsJhmZAEFfd6ByYV+ ;{id = 2854 (zsk), size = 1688b} example.com. 3600 IN RRSIG DNSKEY 3 2 3600 20070926134802 20070829134802 2854 example.com. MCwCFG1yhRNtTEa3Eno2zhVVuy2EJX3wAhQeLyUp6+UXcpC5qGNu9tkrTEgPUg== ;{id = 2854} SECTION AUTHORITY example.com. IN NS ns.example.com. example.com. 3600 IN RRSIG NS 3 2 3600 20070926134150 20070829134150 2854 example.com. MC0CFQCN+qHdJxoI/2tNKwsb08pra/G7aAIUAWA5sDdJTbrXA1/3OaesGBAO3sI= ;{id = 2854} SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ns.example.com. 3600 IN RRSIG A 3 3 3600 20070926135752 20070829135752 2854 example.com. MC0CFQCMSWxVehgOQLoYclB9PIAbNP229AIUeH0vNNGJhjnZiqgIOKvs1EhzqAo= ;{id = 2854} ENTRY_END ; response to query of interest ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN CNAME foo.example.com. www.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MCwCFH0SwLHe7u56TshoVciFRHEl1KqbAhQ3zBOZMlL8bt1DqoDoM5ni8U/1UA== ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION foo.example.com. IN A SECTION ANSWER foo.example.com. IN CNAME www.example.com. foo.example.com. 3600 IN RRSIG CNAME DSA 3 3600 20070926134150 20070829134150 2854 example.com. MC0CFC7kcWPsMnGbjvzj5UNnxQzM0YvnAhUAgxIKgs1huJHvcAP2Xt3p8Adpy/c= ;{id = 2854} SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA DO SERVFAIL SECTION QUESTION www.example.com. IN A SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL ENTRY_END SCENARIO_END unbound-1.13.1/testdata/Kexample.com.+007+57024.private0000644000175000017500000000165714010434640021475 0ustar wouterwouterPrivate-key-format: v1.2 Algorithm: 7 (RSASHA1_NSEC3) Modulus: u+t7/Ar9ZV6iPRKLBWRMP415+8c+u71giotZjSb7QTk1g6kll1z48ZBBhHMU06W6BVm0WKua/kubPsY2IBJe0b8gWL/9KUTfQPEQpA6O3YXqpJlNnWdnlc4gwZPBbKng6gjR6CTklq8LmZBvJepyPzbLC3oXlncKadOFWXoy068= PublicExponent: AQAB PrivateExponent: WsmD1trAXS8BFpxUycARDksdecRizHTLpWN5WjZRAMvQzND1NlFWe+4DmSe4EiBo5JjYBlaxxNVmJUfBcnEtmTfED52KiOfvMQFS8ii+14UqZqLj6iyqh9MeWsxAzC3J0A+nBu7lAgqvwCCqrqSOmF/8EJSZWEGla8qWylKMgyE= Prime1: 4hE5iju9vDvbPCmy4+K6nwELakuyrcaxdvPxEUicSkbTpBRnIDuerGJySnuNbiLScq7WUyJsjLsq0wOFNCtlVw== Prime2: 1M0299YZUU0NxAGMFeKEQAvuO0r3zXbgURwLyXLoerhs1K6S1szT+/vgbPLwL55IR7A/LDa6u6SqMrqdGqb1aQ== Exponent1: csYd+YGVNdEJ4ISnLy24Y+vK2N+vyqxbAzKcjJLZzpgg8WfuZ539VDXzIr+RsX36bIE5jSGoDNclydY6tZ7mpw== Exponent2: yF2NMyAA6J8fpf069GQ6178kCeoVlv0mStiYdI5gPSSnPD4/fkaQFsPbVVoNMxjav71AThYeDo4Fvwwc3rpzeQ== Coefficient: gIrzPgL4XhCn/yP0qRCqBTmnqRLeEvRsYNz2T8gsyVGc9gyt/9ouhKOGGHmD2DJf7yWfJiQEEuhw+lBBTNNKtQ== unbound-1.13.1/testdata/iter_pc_aaaa.rpl0000644000175000017500000001051614010434640017622 0ustar wouterwouter; config options server: target-fetch-policy: "0 0 0 0 0" minimal-responses: no stub-zone: name: "." stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. CONFIG_END SCENARIO_BEGIN Test resolution with parent child differ for type AAAA. ; the parent has the correct A record. ; K.ROOT-SERVERS.NET. RANGE_BEGIN 0 100 ADDRESS 193.0.14.129 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION . IN NS SECTION ANSWER . IN NS K.ROOT-SERVERS.NET. SECTION ADDITIONAL K.ROOT-SERVERS.NET. IN A 193.0.14.129 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION AUTHORITY com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END RANGE_END ; a.gtld-servers.net. RANGE_BEGIN 0 100 ADDRESS 192.5.6.30 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY QR NOERROR SECTION QUESTION com. IN NS SECTION ANSWER com. IN NS a.gtld-servers.net. SECTION ADDITIONAL a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::44 ENTRY_END RANGE_END ; the working version. RANGE_BEGIN 0 100 ADDRESS 2002:b44d::44 ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION ANSWER ns.example.com. IN AAAA 2002:b44d::55 SECTION AUTHORITY example.com. IN NS ns.example.com. ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ns.example.com. IN A SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION example.com. IN NS SECTION ANSWER example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id REPLY AA QR NOERROR SECTION QUESTION ftp.example.com. IN A SECTION ANSWER ftp.example.com. IN A 10.20.30.10 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END RANGE_END ; Broken. Does not respond to anything (servfail instead ; of timeouts since this is easier to encode in .rpl file format). RANGE_BEGIN 0 100 ADDRESS 2002:b44d::55 ENTRY_BEGIN MATCH opcode ADJUST copy_id copy_query REPLY QR SERVFAIL SECTION QUESTION example.net. IN NS SECTION ANSWER ENTRY_END RANGE_END STEP 1 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION www.example.com. IN A ENTRY_END ; recursion happens here. STEP 20 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION www.example.com. IN A SECTION ANSWER www.example.com. IN A 10.20.30.40 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END ; now that the bad child NS record is in cache, ask something else. STEP 30 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION mail.example.com. IN A ENTRY_END STEP 40 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION mail.example.com. IN A SECTION ANSWER mail.example.com. IN A 10.20.30.20 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END ; test cache of parent data STEP 50 QUERY ENTRY_BEGIN REPLY RD SECTION QUESTION ftp.example.com. IN A ENTRY_END STEP 60 CHECK_ANSWER ENTRY_BEGIN MATCH all REPLY QR RD RA NOERROR SECTION QUESTION ftp.example.com. IN A SECTION ANSWER ftp.example.com. IN A 10.20.30.10 SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL ns.example.com. IN AAAA 2002:b44d::55 ENTRY_END SCENARIO_END unbound-1.13.1/.gitignore0000644000175000017500000000172214010434640014671 0ustar wouterwouter*.lo *.o /.libs/ /.source /Makefile /autom4te.cache/ /config.h /config.h.in~ /config.log /config.status /dnstap/dnstap_config.h /dnscrypt/dnscrypt_config.h /doc/example.conf /doc/libunbound.3 /doc/unbound-anchor.8 /doc/unbound-checkconf.8 /doc/unbound-control.8 /doc/unbound-host.1 /doc/unbound.8 /doc/unbound.conf.5 /libtool /libunbound.la /_unbound.la /smallapp/unbound-control-setup.sh /unbound /unbound-anchor /unbound-checkconf /unbound-control /unbound-control-setup /unbound-host /unbound.h /asynclook /delayer /dohclient /lock-verify /memstats /perf /petal /pktview /streamtcp /unbound-dnstap-socket /testbound /unittest /contrib/libunbound.pc /contrib/unbound.service /contrib/unbound.socket /contrib/unbound_portable.service /dnstap/dnstap.pb-c.c /dnstap/dnstap.pb-c.h /libunbound/python/libunbound_wrap.c /libunbound/python/unbound.py /pythonmod/interface.h /pythonmod/unboundmodule.py /testdata/result.* /testdata/.done-* /testdata/.perfstats.txt /doc/html /doc/xml unbound-1.13.1/libunbound/0000755000175000017500000000000014010434640015040 5ustar wouterwouterunbound-1.13.1/libunbound/libunbound.c0000644000175000017500000010220314010434640017343 0ustar wouterwouter/* * unbound.c - unbound validating resolver public API implementation * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to resolve DNS queries and * validate the answers. Synchronously and asynchronously. * */ /* include the public api first, it should be able to stand alone */ #include "libunbound/unbound.h" #include "libunbound/unbound-event.h" #include "config.h" #include #include "libunbound/context.h" #include "libunbound/libworker.h" #include "util/locks.h" #include "util/config_file.h" #include "util/alloc.h" #include "util/module.h" #include "util/regional.h" #include "util/log.h" #include "util/random.h" #include "util/net_help.h" #include "util/tube.h" #include "util/ub_event.h" #include "util/edns.h" #include "services/modstack.h" #include "services/localzone.h" #include "services/cache/infra.h" #include "services/cache/rrset.h" #include "services/authzone.h" #include "sldns/sbuffer.h" #ifdef HAVE_PTHREAD #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #ifdef HAVE_TIME_H #include #endif #if defined(UB_ON_WINDOWS) && defined (HAVE_WINDOWS_H) #include #include #endif /* UB_ON_WINDOWS */ /** store that the logfile has a debug override */ int ctx_logfile_overridden = 0; /** create context functionality, but no pipes */ static struct ub_ctx* ub_ctx_create_nopipe(void) { struct ub_ctx* ctx; #ifdef USE_WINSOCK int r; WSADATA wsa_data; #endif checklock_start(); if(!ctx_logfile_overridden) log_init(NULL, 0, NULL); /* logs to stderr */ log_ident_set("libunbound"); #ifdef USE_WINSOCK if((r = WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0) { log_err("could not init winsock. WSAStartup: %s", wsa_strerror(r)); return NULL; } #endif verbosity = NO_VERBOSE; /* errors only */ checklock_start(); ctx = (struct ub_ctx*)calloc(1, sizeof(*ctx)); if(!ctx) { errno = ENOMEM; return NULL; } alloc_init(&ctx->superalloc, NULL, 0); if(!(ctx->seed_rnd = ub_initstate(NULL))) { ub_randfree(ctx->seed_rnd); free(ctx); errno = ENOMEM; return NULL; } lock_basic_init(&ctx->qqpipe_lock); lock_basic_init(&ctx->rrpipe_lock); lock_basic_init(&ctx->cfglock); ctx->env = (struct module_env*)calloc(1, sizeof(*ctx->env)); if(!ctx->env) { ub_randfree(ctx->seed_rnd); free(ctx); errno = ENOMEM; return NULL; } ctx->env->cfg = config_create_forlib(); if(!ctx->env->cfg) { free(ctx->env); ub_randfree(ctx->seed_rnd); free(ctx); errno = ENOMEM; return NULL; } /* init edns_known_options */ if(!edns_known_options_init(ctx->env)) { config_delete(ctx->env->cfg); free(ctx->env); ub_randfree(ctx->seed_rnd); free(ctx); errno = ENOMEM; return NULL; } ctx->env->auth_zones = auth_zones_create(); if(!ctx->env->auth_zones) { edns_known_options_delete(ctx->env); config_delete(ctx->env->cfg); free(ctx->env); ub_randfree(ctx->seed_rnd); free(ctx); errno = ENOMEM; return NULL; } ctx->env->edns_strings = edns_strings_create(); if(!ctx->env->edns_strings) { auth_zones_delete(ctx->env->auth_zones); edns_known_options_delete(ctx->env); config_delete(ctx->env->cfg); free(ctx->env); ub_randfree(ctx->seed_rnd); free(ctx); errno = ENOMEM; return NULL; } ctx->env->alloc = &ctx->superalloc; ctx->env->worker = NULL; ctx->env->need_to_validate = 0; modstack_init(&ctx->mods); rbtree_init(&ctx->queries, &context_query_cmp); return ctx; } struct ub_ctx* ub_ctx_create(void) { struct ub_ctx* ctx = ub_ctx_create_nopipe(); if(!ctx) return NULL; if((ctx->qq_pipe = tube_create()) == NULL) { int e = errno; ub_randfree(ctx->seed_rnd); config_delete(ctx->env->cfg); modstack_desetup(&ctx->mods, ctx->env); edns_known_options_delete(ctx->env); edns_strings_delete(ctx->env->edns_strings); free(ctx->env); free(ctx); errno = e; return NULL; } if((ctx->rr_pipe = tube_create()) == NULL) { int e = errno; tube_delete(ctx->qq_pipe); ub_randfree(ctx->seed_rnd); config_delete(ctx->env->cfg); modstack_desetup(&ctx->mods, ctx->env); edns_known_options_delete(ctx->env); edns_strings_delete(ctx->env->edns_strings); free(ctx->env); free(ctx); errno = e; return NULL; } return ctx; } struct ub_ctx* ub_ctx_create_ub_event(struct ub_event_base* ueb) { struct ub_ctx* ctx = ub_ctx_create_nopipe(); if(!ctx) return NULL; /* no pipes, but we have the locks to make sure everything works */ ctx->created_bg = 0; ctx->dothread = 1; /* the processing is in the same process, makes ub_cancel and ub_ctx_delete do the right thing */ ctx->event_base = ueb; return ctx; } struct ub_ctx* ub_ctx_create_event(struct event_base* eb) { struct ub_ctx* ctx = ub_ctx_create_nopipe(); if(!ctx) return NULL; /* no pipes, but we have the locks to make sure everything works */ ctx->created_bg = 0; ctx->dothread = 1; /* the processing is in the same process, makes ub_cancel and ub_ctx_delete do the right thing */ ctx->event_base = ub_libevent_event_base(eb); if (!ctx->event_base) { ub_ctx_delete(ctx); return NULL; } ctx->event_base_malloced = 1; return ctx; } /** delete q */ static void delq(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct ctx_query* q = (struct ctx_query*)n; context_query_delete(q); } /** stop the bg thread */ static void ub_stop_bg(struct ub_ctx* ctx) { /* stop the bg thread */ lock_basic_lock(&ctx->cfglock); if(ctx->created_bg) { uint8_t* msg; uint32_t len; uint32_t cmd = UB_LIBCMD_QUIT; lock_basic_unlock(&ctx->cfglock); lock_basic_lock(&ctx->qqpipe_lock); (void)tube_write_msg(ctx->qq_pipe, (uint8_t*)&cmd, (uint32_t)sizeof(cmd), 0); lock_basic_unlock(&ctx->qqpipe_lock); lock_basic_lock(&ctx->rrpipe_lock); while(tube_read_msg(ctx->rr_pipe, &msg, &len, 0)) { /* discard all results except a quit confirm */ if(context_serial_getcmd(msg, len) == UB_LIBCMD_QUIT) { free(msg); break; } free(msg); } lock_basic_unlock(&ctx->rrpipe_lock); /* if bg worker is a thread, wait for it to exit, so that all * resources are really gone. */ lock_basic_lock(&ctx->cfglock); if(ctx->dothread) { lock_basic_unlock(&ctx->cfglock); ub_thread_join(ctx->bg_tid); } else { lock_basic_unlock(&ctx->cfglock); #ifndef UB_ON_WINDOWS if(waitpid(ctx->bg_pid, NULL, 0) == -1) { if(verbosity > 2) log_err("waitpid: %s", strerror(errno)); } #endif } } else { lock_basic_unlock(&ctx->cfglock); } } void ub_ctx_delete(struct ub_ctx* ctx) { struct alloc_cache* a, *na; int do_stop = 1; if(!ctx) return; /* see if bg thread is created and if threads have been killed */ /* no locks, because those may be held by terminated threads */ /* for processes the read pipe is closed and we see that on read */ #ifdef HAVE_PTHREAD if(ctx->created_bg && ctx->dothread) { if(pthread_kill(ctx->bg_tid, 0) == ESRCH) { /* thread has been killed */ do_stop = 0; } } #endif /* HAVE_PTHREAD */ if(do_stop) ub_stop_bg(ctx); libworker_delete_event(ctx->event_worker); modstack_desetup(&ctx->mods, ctx->env); a = ctx->alloc_list; while(a) { na = a->super; a->super = &ctx->superalloc; alloc_clear(a); free(a); a = na; } local_zones_delete(ctx->local_zones); lock_basic_destroy(&ctx->qqpipe_lock); lock_basic_destroy(&ctx->rrpipe_lock); lock_basic_destroy(&ctx->cfglock); tube_delete(ctx->qq_pipe); tube_delete(ctx->rr_pipe); if(ctx->env) { slabhash_delete(ctx->env->msg_cache); rrset_cache_delete(ctx->env->rrset_cache); infra_delete(ctx->env->infra_cache); config_delete(ctx->env->cfg); edns_known_options_delete(ctx->env); edns_strings_delete(ctx->env->edns_strings); auth_zones_delete(ctx->env->auth_zones); free(ctx->env); } ub_randfree(ctx->seed_rnd); alloc_clear(&ctx->superalloc); traverse_postorder(&ctx->queries, delq, NULL); if(ctx_logfile_overridden) { log_file(NULL); ctx_logfile_overridden = 0; } if(ctx->event_base_malloced) free(ctx->event_base); free(ctx); #ifdef USE_WINSOCK WSACleanup(); #endif } int ub_ctx_set_option(struct ub_ctx* ctx, const char* opt, const char* val) { lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); return UB_AFTERFINAL; } if(!config_set_option(ctx->env->cfg, opt, val)) { lock_basic_unlock(&ctx->cfglock); return UB_SYNTAX; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_get_option(struct ub_ctx* ctx, const char* opt, char** str) { int r; lock_basic_lock(&ctx->cfglock); r = config_get_option_collate(ctx->env->cfg, opt, str); lock_basic_unlock(&ctx->cfglock); if(r == 0) r = UB_NOERROR; else if(r == 1) r = UB_SYNTAX; else if(r == 2) r = UB_NOMEM; return r; } int ub_ctx_config(struct ub_ctx* ctx, const char* fname) { lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); return UB_AFTERFINAL; } if(!config_read(ctx->env->cfg, fname, NULL)) { lock_basic_unlock(&ctx->cfglock); return UB_SYNTAX; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_add_ta(struct ub_ctx* ctx, const char* ta) { char* dup = strdup(ta); if(!dup) return UB_NOMEM; lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); free(dup); return UB_AFTERFINAL; } if(!cfg_strlist_insert(&ctx->env->cfg->trust_anchor_list, dup)) { lock_basic_unlock(&ctx->cfglock); return UB_NOMEM; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_add_ta_file(struct ub_ctx* ctx, const char* fname) { char* dup = strdup(fname); if(!dup) return UB_NOMEM; lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); free(dup); return UB_AFTERFINAL; } if(!cfg_strlist_insert(&ctx->env->cfg->trust_anchor_file_list, dup)) { lock_basic_unlock(&ctx->cfglock); return UB_NOMEM; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_add_ta_autr(struct ub_ctx* ctx, const char* fname) { char* dup = strdup(fname); if(!dup) return UB_NOMEM; lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); free(dup); return UB_AFTERFINAL; } if(!cfg_strlist_insert(&ctx->env->cfg->auto_trust_anchor_file_list, dup)) { lock_basic_unlock(&ctx->cfglock); return UB_NOMEM; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_trustedkeys(struct ub_ctx* ctx, const char* fname) { char* dup = strdup(fname); if(!dup) return UB_NOMEM; lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); free(dup); return UB_AFTERFINAL; } if(!cfg_strlist_insert(&ctx->env->cfg->trusted_keys_file_list, dup)) { lock_basic_unlock(&ctx->cfglock); return UB_NOMEM; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_debuglevel(struct ub_ctx* ctx, int d) { lock_basic_lock(&ctx->cfglock); verbosity = d; ctx->env->cfg->verbosity = d; lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_debugout(struct ub_ctx* ctx, void* out) { lock_basic_lock(&ctx->cfglock); log_file((FILE*)out); ctx_logfile_overridden = 1; ctx->logfile_override = 1; ctx->log_out = out; lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_async(struct ub_ctx* ctx, int dothread) { #ifdef THREADS_DISABLED if(dothread) /* cannot do threading */ return UB_NOERROR; #endif lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); return UB_AFTERFINAL; } ctx->dothread = dothread; lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_poll(struct ub_ctx* ctx) { /* no need to hold lock while testing for readability. */ return tube_poll(ctx->rr_pipe); } int ub_fd(struct ub_ctx* ctx) { return tube_read_fd(ctx->rr_pipe); } /** process answer from bg worker */ static int process_answer_detail(struct ub_ctx* ctx, uint8_t* msg, uint32_t len, ub_callback_type* cb, void** cbarg, int* err, struct ub_result** res) { struct ctx_query* q; if(context_serial_getcmd(msg, len) != UB_LIBCMD_ANSWER) { log_err("error: bad data from bg worker %d", (int)context_serial_getcmd(msg, len)); return 0; } lock_basic_lock(&ctx->cfglock); q = context_deserialize_answer(ctx, msg, len, err); if(!q) { lock_basic_unlock(&ctx->cfglock); /* probably simply the lookup that failed, i.e. * response returned before cancel was sent out, so noerror */ return 1; } log_assert(q->async); /* grab cb while locked */ if(q->cancelled) { *cb = NULL; *cbarg = NULL; } else { *cb = q->cb; *cbarg = q->cb_arg; } if(*err) { *res = NULL; ub_resolve_free(q->res); } else { /* parse the message, extract rcode, fill result */ sldns_buffer* buf = sldns_buffer_new(q->msg_len); struct regional* region = regional_create(); *res = q->res; (*res)->rcode = LDNS_RCODE_SERVFAIL; if(region && buf) { sldns_buffer_clear(buf); sldns_buffer_write(buf, q->msg, q->msg_len); sldns_buffer_flip(buf); libworker_enter_result(*res, buf, region, q->msg_security); } (*res)->answer_packet = q->msg; (*res)->answer_len = (int)q->msg_len; q->msg = NULL; sldns_buffer_free(buf); regional_destroy(region); } q->res = NULL; /* delete the q from list */ (void)rbtree_delete(&ctx->queries, q->node.key); ctx->num_async--; context_query_delete(q); lock_basic_unlock(&ctx->cfglock); if(*cb) return 2; ub_resolve_free(*res); return 1; } /** process answer from bg worker */ static int process_answer(struct ub_ctx* ctx, uint8_t* msg, uint32_t len) { int err; ub_callback_type cb; void* cbarg; struct ub_result* res; int r; r = process_answer_detail(ctx, msg, len, &cb, &cbarg, &err, &res); /* no locks held while calling callback, so that library is * re-entrant. */ if(r == 2) (*cb)(cbarg, err, res); return r; } int ub_process(struct ub_ctx* ctx) { int r; uint8_t* msg; uint32_t len; while(1) { msg = NULL; lock_basic_lock(&ctx->rrpipe_lock); r = tube_read_msg(ctx->rr_pipe, &msg, &len, 1); lock_basic_unlock(&ctx->rrpipe_lock); if(r == 0) return UB_PIPE; else if(r == -1) break; if(!process_answer(ctx, msg, len)) { free(msg); return UB_PIPE; } free(msg); } return UB_NOERROR; } int ub_wait(struct ub_ctx* ctx) { int err; ub_callback_type cb; void* cbarg; struct ub_result* res; int r; uint8_t* msg; uint32_t len; /* this is basically the same loop as _process(), but with changes. * holds the rrpipe lock and waits with tube_wait */ while(1) { lock_basic_lock(&ctx->rrpipe_lock); lock_basic_lock(&ctx->cfglock); if(ctx->num_async == 0) { lock_basic_unlock(&ctx->cfglock); lock_basic_unlock(&ctx->rrpipe_lock); break; } lock_basic_unlock(&ctx->cfglock); /* keep rrpipe locked, while * o waiting for pipe readable * o parsing message * o possibly decrementing num_async * do callback without lock */ r = tube_wait(ctx->rr_pipe); if(r) { r = tube_read_msg(ctx->rr_pipe, &msg, &len, 1); if(r == 0) { lock_basic_unlock(&ctx->rrpipe_lock); return UB_PIPE; } if(r == -1) { lock_basic_unlock(&ctx->rrpipe_lock); continue; } r = process_answer_detail(ctx, msg, len, &cb, &cbarg, &err, &res); lock_basic_unlock(&ctx->rrpipe_lock); free(msg); if(r == 0) return UB_PIPE; if(r == 2) (*cb)(cbarg, err, res); } else { lock_basic_unlock(&ctx->rrpipe_lock); } } return UB_NOERROR; } int ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, struct ub_result** result) { struct ctx_query* q; int r; *result = NULL; lock_basic_lock(&ctx->cfglock); if(!ctx->finalized) { r = context_finalize(ctx); if(r) { lock_basic_unlock(&ctx->cfglock); return r; } } /* create new ctx_query and attempt to add to the list */ lock_basic_unlock(&ctx->cfglock); q = context_new(ctx, name, rrtype, rrclass, NULL, NULL, NULL); if(!q) return UB_NOMEM; /* become a resolver thread for a bit */ r = libworker_fg(ctx, q); if(r) { lock_basic_lock(&ctx->cfglock); (void)rbtree_delete(&ctx->queries, q->node.key); context_query_delete(q); lock_basic_unlock(&ctx->cfglock); return r; } q->res->answer_packet = q->msg; q->res->answer_len = (int)q->msg_len; q->msg = NULL; *result = q->res; q->res = NULL; lock_basic_lock(&ctx->cfglock); (void)rbtree_delete(&ctx->queries, q->node.key); context_query_delete(q); lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, void* mydata, ub_event_callback_type callback, int* async_id) { struct ctx_query* q; int r; if(async_id) *async_id = 0; lock_basic_lock(&ctx->cfglock); if(!ctx->finalized) { r = context_finalize(ctx); if(r) { lock_basic_unlock(&ctx->cfglock); return r; } } lock_basic_unlock(&ctx->cfglock); if(!ctx->event_worker) { ctx->event_worker = libworker_create_event(ctx, ctx->event_base); if(!ctx->event_worker) { return UB_INITFAIL; } } /* set time in case answer comes from cache */ ub_comm_base_now(ctx->event_worker->base); /* create new ctx_query and attempt to add to the list */ q = context_new(ctx, name, rrtype, rrclass, NULL, callback, mydata); if(!q) return UB_NOMEM; /* attach to mesh */ if((r=libworker_attach_mesh(ctx, q, async_id)) != 0) return r; return UB_NOERROR; } int ub_resolve_async(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, void* mydata, ub_callback_type callback, int* async_id) { struct ctx_query* q; uint8_t* msg = NULL; uint32_t len = 0; if(async_id) *async_id = 0; lock_basic_lock(&ctx->cfglock); if(!ctx->finalized) { int r = context_finalize(ctx); if(r) { lock_basic_unlock(&ctx->cfglock); return r; } } if(!ctx->created_bg) { int r; ctx->created_bg = 1; lock_basic_unlock(&ctx->cfglock); r = libworker_bg(ctx); if(r) { lock_basic_lock(&ctx->cfglock); ctx->created_bg = 0; lock_basic_unlock(&ctx->cfglock); return r; } } else { lock_basic_unlock(&ctx->cfglock); } /* create new ctx_query and attempt to add to the list */ q = context_new(ctx, name, rrtype, rrclass, callback, NULL, mydata); if(!q) return UB_NOMEM; /* write over pipe to background worker */ lock_basic_lock(&ctx->cfglock); msg = context_serialize_new_query(q, &len); if(!msg) { (void)rbtree_delete(&ctx->queries, q->node.key); ctx->num_async--; context_query_delete(q); lock_basic_unlock(&ctx->cfglock); return UB_NOMEM; } if(async_id) *async_id = q->querynum; lock_basic_unlock(&ctx->cfglock); lock_basic_lock(&ctx->qqpipe_lock); if(!tube_write_msg(ctx->qq_pipe, msg, len, 0)) { lock_basic_unlock(&ctx->qqpipe_lock); free(msg); return UB_PIPE; } lock_basic_unlock(&ctx->qqpipe_lock); free(msg); return UB_NOERROR; } int ub_cancel(struct ub_ctx* ctx, int async_id) { struct ctx_query* q; uint8_t* msg = NULL; uint32_t len = 0; lock_basic_lock(&ctx->cfglock); q = (struct ctx_query*)rbtree_search(&ctx->queries, &async_id); if(!q || !q->async) { /* it is not there, so nothing to do */ lock_basic_unlock(&ctx->cfglock); return UB_NOID; } log_assert(q->async); q->cancelled = 1; /* delete it */ if(!ctx->dothread) { /* if forked */ (void)rbtree_delete(&ctx->queries, q->node.key); ctx->num_async--; msg = context_serialize_cancel(q, &len); context_query_delete(q); lock_basic_unlock(&ctx->cfglock); if(!msg) { return UB_NOMEM; } /* send cancel to background worker */ lock_basic_lock(&ctx->qqpipe_lock); if(!tube_write_msg(ctx->qq_pipe, msg, len, 0)) { lock_basic_unlock(&ctx->qqpipe_lock); free(msg); return UB_PIPE; } lock_basic_unlock(&ctx->qqpipe_lock); free(msg); } else { lock_basic_unlock(&ctx->cfglock); } return UB_NOERROR; } void ub_resolve_free(struct ub_result* result) { char** p; if(!result) return; free(result->qname); if(result->canonname != result->qname) free(result->canonname); if(result->data) for(p = result->data; *p; p++) free(*p); free(result->data); free(result->len); free(result->answer_packet); free(result->why_bogus); free(result); } const char* ub_strerror(int err) { switch(err) { case UB_NOERROR: return "no error"; case UB_SOCKET: return "socket io error"; case UB_NOMEM: return "out of memory"; case UB_SYNTAX: return "syntax error"; case UB_SERVFAIL: return "server failure"; case UB_FORKFAIL: return "could not fork"; case UB_INITFAIL: return "initialization failure"; case UB_AFTERFINAL: return "setting change after finalize"; case UB_PIPE: return "error in pipe communication with async"; case UB_READFILE: return "error reading file"; case UB_NOID: return "error async_id does not exist"; default: return "unknown error"; } } int ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr) { struct sockaddr_storage storage; socklen_t stlen; struct config_stub* s; char* dupl; lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); errno=EINVAL; return UB_AFTERFINAL; } if(!addr) { /* disable fwd mode - the root stub should be first. */ if(ctx->env->cfg->forwards && strcmp(ctx->env->cfg->forwards->name, ".") == 0) { s = ctx->env->cfg->forwards; ctx->env->cfg->forwards = s->next; s->next = NULL; config_delstubs(s); } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } lock_basic_unlock(&ctx->cfglock); /* check syntax for addr */ if(!extstrtoaddr(addr, &storage, &stlen)) { errno=EINVAL; return UB_SYNTAX; } /* it parses, add root stub in front of list */ lock_basic_lock(&ctx->cfglock); if(!ctx->env->cfg->forwards || strcmp(ctx->env->cfg->forwards->name, ".") != 0) { s = calloc(1, sizeof(*s)); if(!s) { lock_basic_unlock(&ctx->cfglock); errno=ENOMEM; return UB_NOMEM; } s->name = strdup("."); if(!s->name) { free(s); lock_basic_unlock(&ctx->cfglock); errno=ENOMEM; return UB_NOMEM; } s->next = ctx->env->cfg->forwards; ctx->env->cfg->forwards = s; } else { log_assert(ctx->env->cfg->forwards); s = ctx->env->cfg->forwards; } dupl = strdup(addr); if(!dupl) { lock_basic_unlock(&ctx->cfglock); errno=ENOMEM; return UB_NOMEM; } if(!cfg_strlist_insert(&s->addrs, dupl)) { lock_basic_unlock(&ctx->cfglock); errno=ENOMEM; return UB_NOMEM; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_set_tls(struct ub_ctx* ctx, int tls) { lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); errno=EINVAL; return UB_AFTERFINAL; } ctx->env->cfg->ssl_upstream = tls; lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_set_stub(struct ub_ctx* ctx, const char* zone, const char* addr, int isprime) { char* a; struct config_stub **prev, *elem; /* check syntax for zone name */ if(zone) { uint8_t* nm; int nmlabs; size_t nmlen; if(!parse_dname(zone, &nm, &nmlen, &nmlabs)) { errno=EINVAL; return UB_SYNTAX; } free(nm); } else { zone = "."; } /* check syntax for addr (if not NULL) */ if(addr) { struct sockaddr_storage storage; socklen_t stlen; if(!extstrtoaddr(addr, &storage, &stlen)) { errno=EINVAL; return UB_SYNTAX; } } lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); errno=EINVAL; return UB_AFTERFINAL; } /* arguments all right, now find or add the stub */ prev = &ctx->env->cfg->stubs; elem = cfg_stub_find(&prev, zone); if(!elem && !addr) { /* not found and we want to delete, nothing to do */ lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } else if(elem && !addr) { /* found, and we want to delete */ *prev = elem->next; config_delstub(elem); lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } else if(!elem) { /* not found, create the stub entry */ elem=(struct config_stub*)calloc(1, sizeof(struct config_stub)); if(elem) elem->name = strdup(zone); if(!elem || !elem->name) { free(elem); lock_basic_unlock(&ctx->cfglock); errno = ENOMEM; return UB_NOMEM; } elem->next = ctx->env->cfg->stubs; ctx->env->cfg->stubs = elem; } /* add the address to the list and set settings */ elem->isprime = isprime; a = strdup(addr); if(!a) { lock_basic_unlock(&ctx->cfglock); errno = ENOMEM; return UB_NOMEM; } if(!cfg_strlist_insert(&elem->addrs, a)) { lock_basic_unlock(&ctx->cfglock); errno = ENOMEM; return UB_NOMEM; } lock_basic_unlock(&ctx->cfglock); return UB_NOERROR; } int ub_ctx_resolvconf(struct ub_ctx* ctx, const char* fname) { FILE* in; int numserv = 0; char buf[1024]; char* parse, *addr; int r; if(fname == NULL) { #if !defined(UB_ON_WINDOWS) || !defined(HAVE_WINDOWS_H) fname = "/etc/resolv.conf"; #else FIXED_INFO *info; ULONG buflen = sizeof(*info); IP_ADDR_STRING *ptr; info = (FIXED_INFO *) malloc(sizeof (FIXED_INFO)); if (info == NULL) return UB_READFILE; if (GetNetworkParams(info, &buflen) == ERROR_BUFFER_OVERFLOW) { free(info); info = (FIXED_INFO *) malloc(buflen); if (info == NULL) return UB_READFILE; } if (GetNetworkParams(info, &buflen) == NO_ERROR) { int retval=0; ptr = &(info->DnsServerList); while (ptr) { numserv++; if((retval=ub_ctx_set_fwd(ctx, ptr->IpAddress.String))!=0) { free(info); return retval; } ptr = ptr->Next; } free(info); if (numserv==0) return UB_READFILE; return UB_NOERROR; } free(info); return UB_READFILE; #endif /* WINDOWS */ } in = fopen(fname, "r"); if(!in) { /* error in errno! perror(fname) */ return UB_READFILE; } while(fgets(buf, (int)sizeof(buf), in)) { buf[sizeof(buf)-1] = 0; parse=buf; while(*parse == ' ' || *parse == '\t') parse++; if(strncmp(parse, "nameserver", 10) == 0) { numserv++; parse += 10; /* skip 'nameserver' */ /* skip whitespace */ while(*parse == ' ' || *parse == '\t') parse++; addr = parse; /* skip [0-9a-fA-F.:]*, i.e. IP4 and IP6 address */ while(isxdigit((unsigned char)*parse) || *parse=='.' || *parse==':') parse++; /* terminate after the address, remove newline */ *parse = 0; if((r = ub_ctx_set_fwd(ctx, addr)) != UB_NOERROR) { fclose(in); return r; } } } fclose(in); if(numserv == 0) { /* from resolv.conf(5) if none given, use localhost */ return ub_ctx_set_fwd(ctx, "127.0.0.1"); } return UB_NOERROR; } int ub_ctx_hosts(struct ub_ctx* ctx, const char* fname) { FILE* in; char buf[1024], ldata[2048]; char* parse, *addr, *name, *ins; lock_basic_lock(&ctx->cfglock); if(ctx->finalized) { lock_basic_unlock(&ctx->cfglock); errno=EINVAL; return UB_AFTERFINAL; } lock_basic_unlock(&ctx->cfglock); if(fname == NULL) { #if defined(UB_ON_WINDOWS) && defined(HAVE_WINDOWS_H) /* * If this is Windows NT/XP/2K it's in * %WINDIR%\system32\drivers\etc\hosts. * If this is Windows 95/98/Me it's in %WINDIR%\hosts. */ name = getenv("WINDIR"); if (name != NULL) { int retval=0; snprintf(buf, sizeof(buf), "%s%s", name, "\\system32\\drivers\\etc\\hosts"); if((retval=ub_ctx_hosts(ctx, buf)) !=0 ) { snprintf(buf, sizeof(buf), "%s%s", name, "\\hosts"); retval=ub_ctx_hosts(ctx, buf); } return retval; } return UB_READFILE; #else fname = "/etc/hosts"; #endif /* WIN32 */ } in = fopen(fname, "r"); if(!in) { /* error in errno! perror(fname) */ return UB_READFILE; } while(fgets(buf, (int)sizeof(buf), in)) { buf[sizeof(buf)-1] = 0; parse=buf; while(*parse == ' ' || *parse == '\t') parse++; if(*parse == '#') continue; /* skip comment */ /* format: spaces spaces ... */ addr = parse; /* skip addr */ while(isxdigit((unsigned char)*parse) || *parse == '.' || *parse == ':') parse++; if(*parse == '\r') parse++; if(*parse == '\n' || *parse == 0) continue; if(*parse == '%') continue; /* ignore macOSX fe80::1%lo0 localhost */ if(*parse != ' ' && *parse != '\t') { /* must have whitespace after address */ fclose(in); errno=EINVAL; return UB_SYNTAX; } *parse++ = 0; /* end delimiter for addr ... */ /* go to names and add them */ while(*parse) { while(*parse == ' ' || *parse == '\t' || *parse=='\n' || *parse=='\r') parse++; if(*parse == 0 || *parse == '#') break; /* skip name, allows (too) many printable characters */ name = parse; while('!' <= *parse && *parse <= '~') parse++; if(*parse) *parse++ = 0; /* end delimiter for name */ snprintf(ldata, sizeof(ldata), "%s %s %s", name, str_is_ip6(addr)?"AAAA":"A", addr); ins = strdup(ldata); if(!ins) { /* out of memory */ fclose(in); errno=ENOMEM; return UB_NOMEM; } lock_basic_lock(&ctx->cfglock); if(!cfg_strlist_insert(&ctx->env->cfg->local_data, ins)) { lock_basic_unlock(&ctx->cfglock); fclose(in); errno=ENOMEM; return UB_NOMEM; } lock_basic_unlock(&ctx->cfglock); } } fclose(in); return UB_NOERROR; } /** finalize the context, if not already finalized */ static int ub_ctx_finalize(struct ub_ctx* ctx) { int res = 0; lock_basic_lock(&ctx->cfglock); if (!ctx->finalized) { res = context_finalize(ctx); } lock_basic_unlock(&ctx->cfglock); return res; } /* Print local zones and RR data */ int ub_ctx_print_local_zones(struct ub_ctx* ctx) { int res = ub_ctx_finalize(ctx); if (res) return res; local_zones_print(ctx->local_zones); return UB_NOERROR; } /* Add a new zone */ int ub_ctx_zone_add(struct ub_ctx* ctx, const char *zone_name, const char *zone_type) { enum localzone_type t; struct local_zone* z; uint8_t* nm; int nmlabs; size_t nmlen; int res = ub_ctx_finalize(ctx); if (res) return res; if(!local_zone_str2type(zone_type, &t)) { return UB_SYNTAX; } if(!parse_dname(zone_name, &nm, &nmlen, &nmlabs)) { return UB_SYNTAX; } lock_rw_wrlock(&ctx->local_zones->lock); if((z=local_zones_find(ctx->local_zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN))) { /* already present in tree */ lock_rw_wrlock(&z->lock); z->type = t; /* update type anyway */ lock_rw_unlock(&z->lock); lock_rw_unlock(&ctx->local_zones->lock); free(nm); return UB_NOERROR; } if(!local_zones_add_zone(ctx->local_zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN, t)) { lock_rw_unlock(&ctx->local_zones->lock); return UB_NOMEM; } lock_rw_unlock(&ctx->local_zones->lock); return UB_NOERROR; } /* Remove zone */ int ub_ctx_zone_remove(struct ub_ctx* ctx, const char *zone_name) { struct local_zone* z; uint8_t* nm; int nmlabs; size_t nmlen; int res = ub_ctx_finalize(ctx); if (res) return res; if(!parse_dname(zone_name, &nm, &nmlen, &nmlabs)) { return UB_SYNTAX; } lock_rw_wrlock(&ctx->local_zones->lock); if((z=local_zones_find(ctx->local_zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN))) { /* present in tree */ local_zones_del_zone(ctx->local_zones, z); } lock_rw_unlock(&ctx->local_zones->lock); free(nm); return UB_NOERROR; } /* Add new RR data */ int ub_ctx_data_add(struct ub_ctx* ctx, const char *data) { int res = ub_ctx_finalize(ctx); if (res) return res; res = local_zones_add_RR(ctx->local_zones, data); return (!res) ? UB_NOMEM : UB_NOERROR; } /* Remove RR data */ int ub_ctx_data_remove(struct ub_ctx* ctx, const char *data) { uint8_t* nm; int nmlabs; size_t nmlen; int res = ub_ctx_finalize(ctx); if (res) return res; if(!parse_dname(data, &nm, &nmlen, &nmlabs)) return UB_SYNTAX; local_zones_del_data(ctx->local_zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN); free(nm); return UB_NOERROR; } const char* ub_version(void) { return PACKAGE_VERSION; } int ub_ctx_set_event(struct ub_ctx* ctx, struct event_base* base) { struct ub_event_base* new_base; if (!ctx || !ctx->event_base || !base) { return UB_INITFAIL; } if (ub_libevent_get_event_base(ctx->event_base) == base) { /* already set */ return UB_NOERROR; } lock_basic_lock(&ctx->cfglock); /* destroy the current worker - safe to pass in NULL */ libworker_delete_event(ctx->event_worker); ctx->event_worker = NULL; new_base = ub_libevent_event_base(base); if (new_base) ctx->event_base = new_base; ctx->created_bg = 0; ctx->dothread = 1; lock_basic_unlock(&ctx->cfglock); return new_base ? UB_NOERROR : UB_INITFAIL; } unbound-1.13.1/libunbound/ubsyms.def0000644000175000017500000000105314010434640017041 0ustar wouterwouterub_cancel ub_ctx_add_ta ub_ctx_add_ta_autr ub_ctx_add_ta_file ub_ctx_async ub_ctx_config ub_ctx_create ub_ctx_create_event ub_ctx_create_ub_event ub_ctx_data_add ub_ctx_data_remove ub_ctx_debuglevel ub_ctx_debugout ub_ctx_delete ub_ctx_get_option ub_ctx_hosts ub_ctx_print_local_zones ub_ctx_resolvconf ub_ctx_set_event ub_ctx_set_fwd ub_ctx_set_option ub_ctx_set_stub ub_ctx_set_tls ub_ctx_trustedkeys ub_ctx_zone_add ub_ctx_zone_remove ub_fd ub_poll ub_process ub_resolve ub_resolve_async ub_resolve_event ub_resolve_free ub_strerror ub_version ub_wait unbound-1.13.1/libunbound/unbound.h0000644000175000017500000007171114010434640016672 0ustar wouterwouter/* * unbound.h - unbound validating resolver public API * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to resolve DNS queries and * validate the answers. Synchronously and asynchronously. * * Several ways to use this interface from an application wishing * to perform (validated) DNS lookups. * * All start with * ctx = ub_ctx_create(); * err = ub_ctx_add_ta(ctx, "..."); * err = ub_ctx_add_ta(ctx, "..."); * ... some lookups * ... call ub_ctx_delete(ctx); when you want to stop. * * Application not threaded. Blocking. * int err = ub_resolve(ctx, "www.example.com", ... * if(err) fprintf(stderr, "lookup error: %s\n", ub_strerror(err)); * ... use the answer * * Application not threaded. Non-blocking ('asynchronous'). * err = ub_resolve_async(ctx, "www.example.com", ... my_callback); * ... application resumes processing ... * ... and when either ub_poll(ctx) is true * ... or when the file descriptor ub_fd(ctx) is readable, * ... or whenever, the app calls ... * ub_process(ctx); * ... if no result is ready, the app resumes processing above, * ... or process() calls my_callback() with results. * * ... if the application has nothing more to do, wait for answer * ub_wait(ctx); * * Application threaded. Blocking. * Blocking, same as above. The current thread does the work. * Multiple threads can use the *same context*, each does work and uses * shared cache data from the context. * * Application threaded. Non-blocking ('asynchronous'). * ... setup threaded-asynchronous config option * err = ub_ctx_async(ctx, 1); * ... same as async for non-threaded * ... the callbacks are called in the thread that calls process(ctx) * * Openssl needs to have locking in place, and the application must set * it up, because a mere library cannot do this, use the calls * CRYPTO_set_id_callback and CRYPTO_set_locking_callback. * * If no threading is compiled in, the above async example uses fork(2) to * create a process to perform the work. The forked process exits when the * calling process exits, or ctx_delete() is called. * Otherwise, for asynchronous with threading, a worker thread is created. * * The blocking calls use shared ctx-cache when threaded. Thus * ub_resolve() and ub_resolve_async() && ub_wait() are * not the same. The first makes the current thread do the work, setting * up buffers, etc, to perform the work (but using shared cache data). * The second calls another worker thread (or process) to perform the work. * And no buffers need to be set up, but a context-switch happens. */ #ifndef _UB_UNBOUND_H #define _UB_UNBOUND_H #ifdef __cplusplus extern "C" { #endif /** the version of this header file */ #define UNBOUND_VERSION_MAJOR @UNBOUND_VERSION_MAJOR@ #define UNBOUND_VERSION_MINOR @UNBOUND_VERSION_MINOR@ #define UNBOUND_VERSION_MICRO @UNBOUND_VERSION_MICRO@ /** * The validation context is created to hold the resolver status, * validation keys and a small cache (containing messages, rrsets, * roundtrip times, trusted keys, lameness information). * * Its contents are internally defined. */ struct ub_ctx; /** * The validation and resolution results. * Allocated by the resolver, and need to be freed by the application * with ub_resolve_free(). */ struct ub_result { /** The original question, name text string. */ char* qname; /** the type asked for */ int qtype; /** the class asked for */ int qclass; /** * a list of network order DNS rdata items, terminated with a * NULL pointer, so that data[0] is the first result entry, * data[1] the second, and the last entry is NULL. * If there was no data, data[0] is NULL. */ char** data; /** the length in bytes of the data items, len[i] for data[i] */ int* len; /** * canonical name for the result (the final cname). * zero terminated string. * May be NULL if no canonical name exists. */ char* canonname; /** * DNS RCODE for the result. May contain additional error code if * there was no data due to an error. 0 (NOERROR) if okay. */ int rcode; /** * The DNS answer packet. Network formatted. Can contain DNSSEC types. */ void* answer_packet; /** length of the answer packet in octets. */ int answer_len; /** * If there is any data, this is true. * If false, there was no data (nxdomain may be true, rcode can be set). */ int havedata; /** * If there was no data, and the domain did not exist, this is true. * If it is false, and there was no data, then the domain name * is purported to exist, but the requested data type is not available. */ int nxdomain; /** * True, if the result is validated securely. * False, if validation failed or domain queried has no security info. * * It is possible to get a result with no data (havedata is false), * and secure is true. This means that the non-existence of the data * was cryptographically proven (with signatures). */ int secure; /** * If the result was not secure (secure==0), and this result is due * to a security failure, bogus is true. * This means the data has been actively tampered with, signatures * failed, expected signatures were not present, timestamps on * signatures were out of date and so on. * * If !secure and !bogus, this can happen if the data is not secure * because security is disabled for that domain name. * This means the data is from a domain where data is not signed. */ int bogus; /** * If the result is bogus this contains a string (zero terminated) * that describes the failure. There may be other errors as well * as the one described, the description may not be perfectly accurate. * Is NULL if the result is not bogus. */ char* why_bogus; /** * If the query or one of its subqueries was ratelimited. Useful if * ratelimiting is enabled and answer to the client is SERVFAIL as a * result. */ int was_ratelimited; /** * TTL for the result, in seconds. If the security is bogus, then * you also cannot trust this value. */ int ttl; }; /** * Callback for results of async queries. * The readable function definition looks like: * void my_callback(void* my_arg, int err, struct ub_result* result); * It is called with * void* my_arg: your pointer to a (struct of) data of your choice, * or NULL. * int err: if 0 all is OK, otherwise an error occured and no results * are forthcoming. * struct result: pointer to more detailed result structure. * This structure is allocated on the heap and needs to be * freed with ub_resolve_free(result); */ typedef void (*ub_callback_type)(void*, int, struct ub_result*); /** * Create a resolving and validation context. * The information from /etc/resolv.conf and /etc/hosts is not utilised by * default. Use ub_ctx_resolvconf and ub_ctx_hosts to read them. * @return a new context. default initialisation. * returns NULL on error. */ struct ub_ctx* ub_ctx_create(void); /** * Destroy a validation context and free all its resources. * Outstanding async queries are killed and callbacks are not called for them. * @param ctx: context to delete. */ void ub_ctx_delete(struct ub_ctx* ctx); /** * Set an option for the context. * @param ctx: context. * @param opt: option name from the unbound.conf config file format. * (not all settings applicable). The name includes the trailing ':' * for example ub_ctx_set_option(ctx, "logfile:", "mylog.txt"); * This is a power-users interface that lets you specify all sorts * of options. * For some specific options, such as adding trust anchors, special * routines exist. * @param val: value of the option. * @return: 0 if OK, else error. */ int ub_ctx_set_option(struct ub_ctx* ctx, const char* opt, const char* val); /** * Get an option from the context. * @param ctx: context. * @param opt: option name from the unbound.conf config file format. * (not all settings applicable). The name excludes the trailing ':' * for example ub_ctx_get_option(ctx, "logfile", &result); * This is a power-users interface that lets you specify all sorts * of options. * @param str: the string is malloced and returned here. NULL on error. * The caller must free() the string. In cases with multiple * entries (auto-trust-anchor-file), a newline delimited list is * returned in the string. * @return 0 if OK else an error code (malloc failure, syntax error). */ int ub_ctx_get_option(struct ub_ctx* ctx, const char* opt, char** str); /** * setup configuration for the given context. * @param ctx: context. * @param fname: unbound config file (not all settings applicable). * This is a power-users interface that lets you specify all sorts * of options. * For some specific options, such as adding trust anchors, special * routines exist. * @return: 0 if OK, else error. */ int ub_ctx_config(struct ub_ctx* ctx, const char* fname); /** * Set machine to forward DNS queries to, the caching resolver to use. * IP4 or IP6 address. Forwards all DNS requests to that machine, which * is expected to run a recursive resolver. If the proxy is not * DNSSEC-capable, validation may fail. Can be called several times, in * that case the addresses are used as backup servers. * * To read the list of nameservers from /etc/resolv.conf (from DHCP or so), * use the call ub_ctx_resolvconf. * * @param ctx: context. * At this time it is only possible to set configuration before the * first resolve is done. * @param addr: address, IP4 or IP6 in string format. * If the addr is NULL, forwarding is disabled. * @return 0 if OK, else error. */ int ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr); /** * Use DNS over TLS to send queries to machines set with ub_ctx_set_fwd(). * * @param ctx: context. * At this time it is only possible to set configuration before the * first resolve is done. * @param tls: enable or disable DNS over TLS * @return 0 if OK, else error. */ int ub_ctx_set_tls(struct ub_ctx* ctx, int tls); /** * Add a stub zone, with given address to send to. This is for custom * root hints or pointing to a local authoritative dns server. * For dns resolvers and the 'DHCP DNS' ip address, use ub_ctx_set_fwd. * This is similar to a stub-zone entry in unbound.conf. * * @param ctx: context. * It is only possible to set configuration before the * first resolve is done. * @param zone: name of the zone, string. * @param addr: address, IP4 or IP6 in string format. * The addr is added to the list of stub-addresses if the entry exists. * If the addr is NULL the stub entry is removed. * @param isprime: set to true to set stub-prime to yes for the stub. * For local authoritative servers, people usually set it to false, * For root hints it should be set to true. * @return 0 if OK, else error. */ int ub_ctx_set_stub(struct ub_ctx* ctx, const char* zone, const char* addr, int isprime); /** * Read list of nameservers to use from the filename given. * Usually "/etc/resolv.conf". Uses those nameservers as caching proxies. * If they do not support DNSSEC, validation may fail. * * Only nameservers are picked up, the searchdomain, ndots and other * settings from resolv.conf(5) are ignored. * * @param ctx: context. * At this time it is only possible to set configuration before the * first resolve is done. * @param fname: file name string. If NULL "/etc/resolv.conf" is used. * @return 0 if OK, else error. */ int ub_ctx_resolvconf(struct ub_ctx* ctx, const char* fname); /** * Read list of hosts from the filename given. * Usually "/etc/hosts". * These addresses are not flagged as DNSSEC secure when queried for. * * @param ctx: context. * At this time it is only possible to set configuration before the * first resolve is done. * @param fname: file name string. If NULL "/etc/hosts" is used. * @return 0 if OK, else error. */ int ub_ctx_hosts(struct ub_ctx* ctx, const char* fname); /** * Add a trust anchor to the given context. * The trust anchor is a string, on one line, that holds a valid DNSKEY or * DS RR. * @param ctx: context. * At this time it is only possible to add trusted keys before the * first resolve is done. * @param ta: string, with zone-format RR on one line. * [domainname] [TTL optional] [type] [class optional] [rdata contents] * @return 0 if OK, else error. */ int ub_ctx_add_ta(struct ub_ctx* ctx, const char* ta); /** * Add trust anchors to the given context. * Pass name of a file with DS and DNSKEY records (like from dig or drill). * @param ctx: context. * At this time it is only possible to add trusted keys before the * first resolve is done. * @param fname: filename of file with keyfile with trust anchors. * @return 0 if OK, else error. */ int ub_ctx_add_ta_file(struct ub_ctx* ctx, const char* fname); /** * Add trust anchor to the given context that is tracked with RFC5011 * automated trust anchor maintenance. The file is written to when the * trust anchor is changed. * Pass the name of a file that was output from eg. unbound-anchor, * or you can start it by providing a trusted DNSKEY or DS record on one * line in the file. * @param ctx: context. * At this time it is only possible to add trusted keys before the * first resolve is done. * @param fname: filename of file with trust anchor. * @return 0 if OK, else error. */ int ub_ctx_add_ta_autr(struct ub_ctx* ctx, const char* fname); /** * Add trust anchors to the given context. * Pass the name of a bind-style config file with trusted-keys{}. * @param ctx: context. * At this time it is only possible to add trusted keys before the * first resolve is done. * @param fname: filename of file with bind-style config entries with trust * anchors. * @return 0 if OK, else error. */ int ub_ctx_trustedkeys(struct ub_ctx* ctx, const char* fname); /** * Set debug output (and error output) to the specified stream. * Pass NULL to disable. Default is stderr. * @param ctx: context. * @param out: FILE* out file stream to log to. * Type void* to avoid stdio dependency of this header file. * @return 0 if OK, else error. */ int ub_ctx_debugout(struct ub_ctx* ctx, void* out); /** * Set debug verbosity for the context * Output is directed to stderr. * @param ctx: context. * @param d: debug level, 0 is off, 1 is very minimal, 2 is detailed, * and 3 is lots. * @return 0 if OK, else error. */ int ub_ctx_debuglevel(struct ub_ctx* ctx, int d); /** * Set a context behaviour for asynchronous action. * @param ctx: context. * @param dothread: if true, enables threading and a call to resolve_async() * creates a thread to handle work in the background. * If false, a process is forked to handle work in the background. * Changes to this setting after async() calls have been made have * no effect (delete and re-create the context to change). * @return 0 if OK, else error. */ int ub_ctx_async(struct ub_ctx* ctx, int dothread); /** * Poll a context to see if it has any new results * Do not poll in a loop, instead extract the fd below to poll for readiness, * and then check, or wait using the wait routine. * @param ctx: context. * @return: 0 if nothing to read, or nonzero if a result is available. * If nonzero, call ctx_process() to do callbacks. */ int ub_poll(struct ub_ctx* ctx); /** * Wait for a context to finish with results. Calls ub_process() after * the wait for you. After the wait, there are no more outstanding * asynchronous queries. * @param ctx: context. * @return: 0 if OK, else error. */ int ub_wait(struct ub_ctx* ctx); /** * Get file descriptor. Wait for it to become readable, at this point * answers are returned from the asynchronous validating resolver. * Then call the ub_process to continue processing. * This routine works immediately after context creation, the fd * does not change. * @param ctx: context. * @return: -1 on error, or file descriptor to use select(2) with. */ int ub_fd(struct ub_ctx* ctx); /** * Call this routine to continue processing results from the validating * resolver (when the fd becomes readable). * Will perform necessary callbacks. * @param ctx: context * @return: 0 if OK, else error. */ int ub_process(struct ub_ctx* ctx); /** * Perform resolution and validation of the target name. * @param ctx: context. * The context is finalized, and can no longer accept config changes. * @param name: domain name in text format (a zero terminated text string). * @param rrtype: type of RR in host order, 1 is A (address). * @param rrclass: class of RR in host order, 1 is IN (for internet). * @param result: the result data is returned in a newly allocated result * structure. May be NULL on return, return value is set to an error * in that case (out of memory). * @return 0 if OK, else error. */ int ub_resolve(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, struct ub_result** result); /** * Perform resolution and validation of the target name. * Asynchronous, after a while, the callback will be called with your * data and the result. * @param ctx: context. * If no thread or process has been created yet to perform the * work in the background, it is created now. * The context is finalized, and can no longer accept config changes. * @param name: domain name in text format (a string). * @param rrtype: type of RR in host order, 1 is A. * @param rrclass: class of RR in host order, 1 is IN (for internet). * @param mydata: this data is your own data (you can pass NULL), * and is passed on to the callback function. * @param callback: this is called on completion of the resolution. * It is called as: * void callback(void* mydata, int err, struct ub_result* result) * with mydata: the same as passed here, you may pass NULL, * with err: is 0 when a result has been found. * with result: a newly allocated result structure. * The result may be NULL, in that case err is set. * * If an error happens during processing, your callback will be called * with error set to a nonzero value (and result==NULL). * @param async_id: if you pass a non-NULL value, an identifier number is * returned for the query as it is in progress. It can be used to * cancel the query. * @return 0 if OK, else error. */ int ub_resolve_async(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, void* mydata, ub_callback_type callback, int* async_id); /** * Cancel an async query in progress. * Its callback will not be called. * * @param ctx: context. * @param async_id: which query to cancel. * @return 0 if OK, else error. * This routine can return an error if the async_id passed does not exist * or has already been delivered. If another thread is processing results * at the same time, the result may be delivered at the same time and the * cancel fails with an error. Also the cancel can fail due to a system * error, no memory or socket failures. */ int ub_cancel(struct ub_ctx* ctx, int async_id); /** * Free storage associated with a result structure. * @param result: to free */ void ub_resolve_free(struct ub_result* result); /** * Convert error value to a human readable string. * @param err: error code from one of the libunbound functions. * @return pointer to constant text string, zero terminated. */ const char* ub_strerror(int err); /** * Debug routine. Print the local zone information to debug output. * @param ctx: context. Is finalized by the routine. * @return 0 if OK, else error. */ int ub_ctx_print_local_zones(struct ub_ctx* ctx); /** * Add a new zone with the zonetype to the local authority info of the * library. * @param ctx: context. Is finalized by the routine. * @param zone_name: name of the zone in text, "example.com" * If it already exists, the type is updated. * @param zone_type: type of the zone (like for unbound.conf) in text. * @return 0 if OK, else error. */ int ub_ctx_zone_add(struct ub_ctx* ctx, const char *zone_name, const char *zone_type); /** * Remove zone from local authority info of the library. * @param ctx: context. Is finalized by the routine. * @param zone_name: name of the zone in text, "example.com" * If it does not exist, nothing happens. * @return 0 if OK, else error. */ int ub_ctx_zone_remove(struct ub_ctx* ctx, const char *zone_name); /** * Add localdata to the library local authority info. * Similar to local-data config statement. * @param ctx: context. Is finalized by the routine. * @param data: the resource record in text format, for example * "www.example.com IN A 127.0.0.1" * @return 0 if OK, else error. */ int ub_ctx_data_add(struct ub_ctx* ctx, const char *data); /** * Remove localdata from the library local authority info. * @param ctx: context. Is finalized by the routine. * @param data: the name to delete all data from, like "www.example.com". * @return 0 if OK, else error. */ int ub_ctx_data_remove(struct ub_ctx* ctx, const char *data); /** * Get a version string from the libunbound implementation. * @return a static constant string with the version number. */ const char* ub_version(void); /** * Some global statistics that are not in struct stats_info, * this struct is shared on a shm segment (shm-key in unbound.conf) */ struct ub_shm_stat_info { int num_threads; struct { long long now_sec, now_usec; long long up_sec, up_usec; long long elapsed_sec, elapsed_usec; } time; struct { long long msg; long long rrset; long long val; long long iter; long long subnet; long long ipsecmod; long long respip; long long dnscrypt_shared_secret; long long dnscrypt_nonce; long long dynlib; } mem; }; /** number of qtype that is stored for in array */ #define UB_STATS_QTYPE_NUM 256 /** number of qclass that is stored for in array */ #define UB_STATS_QCLASS_NUM 256 /** number of rcodes in stats */ #define UB_STATS_RCODE_NUM 16 /** number of opcodes in stats */ #define UB_STATS_OPCODE_NUM 16 /** number of histogram buckets */ #define UB_STATS_BUCKET_NUM 40 /** number of RPZ actions */ #define UB_STATS_RPZ_ACTION_NUM 10 /** per worker statistics. */ struct ub_server_stats { /** number of queries from clients received. */ long long num_queries; /** number of queries that have been dropped/ratelimited by ip. */ long long num_queries_ip_ratelimited; /** number of queries that had a cache-miss. */ long long num_queries_missed_cache; /** number of prefetch queries - cachehits with prefetch */ long long num_queries_prefetch; /** * Sum of the querylistsize of the worker for * every query that missed cache. To calculate average. */ long long sum_query_list_size; /** max value of query list size reached. */ long long max_query_list_size; /** Extended stats below (bool) */ int extended; /** qtype stats */ long long qtype[UB_STATS_QTYPE_NUM]; /** bigger qtype values not in array */ long long qtype_big; /** qclass stats */ long long qclass[UB_STATS_QCLASS_NUM]; /** bigger qclass values not in array */ long long qclass_big; /** query opcodes */ long long qopcode[UB_STATS_OPCODE_NUM]; /** number of queries over TCP */ long long qtcp; /** number of outgoing queries over TCP */ long long qtcp_outgoing; /** number of queries over (DNS over) TLS */ long long qtls; /** number of queries over (DNS over) HTTPS */ long long qhttps; /** number of queries over IPv6 */ long long qipv6; /** number of queries with QR bit */ long long qbit_QR; /** number of queries with AA bit */ long long qbit_AA; /** number of queries with TC bit */ long long qbit_TC; /** number of queries with RD bit */ long long qbit_RD; /** number of queries with RA bit */ long long qbit_RA; /** number of queries with Z bit */ long long qbit_Z; /** number of queries with AD bit */ long long qbit_AD; /** number of queries with CD bit */ long long qbit_CD; /** number of queries with EDNS OPT record */ long long qEDNS; /** number of queries with EDNS with DO flag */ long long qEDNS_DO; /** answer rcodes */ long long ans_rcode[UB_STATS_RCODE_NUM]; /** answers with pseudo rcode 'nodata' */ long long ans_rcode_nodata; /** answers that were secure (AD) */ long long ans_secure; /** answers that were bogus (withheld as SERVFAIL) */ long long ans_bogus; /** rrsets marked bogus by validator */ long long rrset_bogus; /** number of queries that have been ratelimited by domain recursion. */ long long queries_ratelimited; /** unwanted traffic received on server-facing ports */ long long unwanted_replies; /** unwanted traffic received on client-facing ports */ long long unwanted_queries; /** usage of tcp accept list */ long long tcp_accept_usage; /** expired answers served from cache */ long long ans_expired; /** histogram data exported to array * if the array is the same size, no data is lost, and * if all histograms are same size (is so by default) then * adding up works well. */ long long hist[UB_STATS_BUCKET_NUM]; /** number of message cache entries */ long long msg_cache_count; /** number of rrset cache entries */ long long rrset_cache_count; /** number of infra cache entries */ long long infra_cache_count; /** number of key cache entries */ long long key_cache_count; /** number of queries that used dnscrypt */ long long num_query_dnscrypt_crypted; /** number of queries that queried dnscrypt certificates */ long long num_query_dnscrypt_cert; /** number of queries in clear text and not asking for the certificates */ long long num_query_dnscrypt_cleartext; /** number of malformed encrypted queries */ long long num_query_dnscrypt_crypted_malformed; /** number of queries which did not have a shared secret in cache */ long long num_query_dnscrypt_secret_missed_cache; /** number of dnscrypt shared secret cache entries */ long long shared_secret_cache_count; /** number of queries which are replays */ long long num_query_dnscrypt_replay; /** number of dnscrypt nonces cache entries */ long long nonce_cache_count; /** number of queries for unbound's auth_zones, upstream query */ long long num_query_authzone_up; /** number of queries for unbound's auth_zones, downstream answers */ long long num_query_authzone_down; /** number of times neg cache records were used to generate NOERROR * responses. */ long long num_neg_cache_noerror; /** number of times neg cache records were used to generate NXDOMAIN * responses. */ long long num_neg_cache_nxdomain; /** number of queries answered from edns-subnet specific data */ long long num_query_subnet; /** number of queries answered from edns-subnet specific data, and * the answer was from the edns-subnet cache. */ long long num_query_subnet_cache; /** number of bytes in the stream wait buffers */ long long mem_stream_wait; /** number of bytes in the HTTP2 query buffers */ long long mem_http2_query_buffer; /** number of bytes in the HTTP2 response buffers */ long long mem_http2_response_buffer; /** number of TLS connection resume */ long long qtls_resume; /** RPZ action stats */ long long rpz_action[UB_STATS_RPZ_ACTION_NUM]; }; /** * Statistics to send over the control pipe when asked * This struct is made to be memcopied, sent in binary. * shm mapped with (number+1) at num_threads+1, with first as total */ struct ub_stats_info { /** the thread stats */ struct ub_server_stats svr; /** mesh stats: current number of states */ long long mesh_num_states; /** mesh stats: current number of reply (user) states */ long long mesh_num_reply_states; /** mesh stats: number of reply states overwritten with a new one */ long long mesh_jostled; /** mesh stats: number of incoming queries dropped */ long long mesh_dropped; /** mesh stats: replies sent */ long long mesh_replies_sent; /** mesh stats: sum of waiting times for the replies */ long long mesh_replies_sum_wait_sec, mesh_replies_sum_wait_usec; /** mesh stats: median of waiting times for replies (in sec) */ double mesh_time_median; }; #ifdef __cplusplus } #endif #endif /* _UB_UNBOUND_H */ unbound-1.13.1/libunbound/worker.h0000644000175000017500000001554714010434640016536 0ustar wouterwouter/* * libunbound/worker.h - prototypes for worker methods. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ /** * \file * * This file declares the methods any worker has to implement. */ #ifndef LIBUNBOUND_WORKER_H #define LIBUNBOUND_WORKER_H #include "sldns/sbuffer.h" #include "util/data/packed_rrset.h" /* for enum sec_status */ struct comm_reply; struct comm_point; struct module_qstate; struct tube; struct edns_option; struct query_info; /** * Worker service routine to send serviced queries to authoritative servers. * @param qinfo: query info. * @param flags: host order flags word, with opcode and CD bit. * @param dnssec: if set, EDNS record will have DO bit set. * @param want_dnssec: signatures needed. * @param nocaps: ignore capsforid(if in config), do not perturb qname. * @param addr: where to. * @param addrlen: length of addr. * @param zone: delegation point name. * @param zonelen: length of zone name wireformat dname. * @param ssl_upstream: use SSL for upstream queries. * @param tls_auth_name: if ssl_upstream, use this name with TLS * authentication. * @param q: wich query state to reactivate upon return. * @return: false on failure (memory or socket related). no query was * sent. */ struct outbound_entry* libworker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q); /** process incoming replies from the network */ int libworker_handle_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info); /** process incoming serviced query replies from the network */ int libworker_handle_service_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info); /** handle control command coming into server */ void libworker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len, int err, void* arg); /** mesh callback with fg results */ void libworker_fg_done_cb(void* arg, int rcode, sldns_buffer* buf, enum sec_status s, char* why_bogus, int was_ratelimited); /** mesh callback with bg results */ void libworker_bg_done_cb(void* arg, int rcode, sldns_buffer* buf, enum sec_status s, char* why_bogus, int was_ratelimited); /** mesh callback with event results */ void libworker_event_done_cb(void* arg, int rcode, struct sldns_buffer* buf, enum sec_status s, char* why_bogus, int was_ratelimited); /** * Worker signal handler function. User argument is the worker itself. * @param sig: signal number. * @param arg: the worker (main worker) that handles signals. */ void worker_sighandler(int sig, void* arg); /** * Worker service routine to send serviced queries to authoritative servers. * @param qinfo: query info. * @param flags: host order flags word, with opcode and CD bit. * @param dnssec: if set, EDNS record will have DO bit set. * @param want_dnssec: signatures needed. * @param nocaps: ignore capsforid(if in config), do not perturb qname. * @param addr: where to. * @param addrlen: length of addr. * @param zone: wireformat dname of the zone. * @param zonelen: length of zone name. * @param ssl_upstream: use SSL for upstream queries. * @param tls_auth_name: if ssl_upstream, use this name with TLS * authentication. * @param q: wich query state to reactivate upon return. * @return: false on failure (memory or socket related). no query was * sent. */ struct outbound_entry* worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q); /** * process control messages from the main thread. Frees the control * command message. * @param tube: tube control message came on. * @param msg: message contents. Is freed. * @param len: length of message. * @param error: if error (NETEVENT_*) happened. * @param arg: user argument */ void worker_handle_control_cmd(struct tube* tube, uint8_t* msg, size_t len, int error, void* arg); /** handles callbacks from listening event interface */ int worker_handle_request(struct comm_point* c, void* arg, int error, struct comm_reply* repinfo); /** process incoming replies from the network */ int worker_handle_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info); /** process incoming serviced query replies from the network */ int worker_handle_service_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info); /** cleanup the cache to remove all rrset IDs from it, arg is worker */ void worker_alloc_cleanup(void* arg); /** statistics timer callback handler */ void worker_stat_timer_cb(void* arg); /** probe timer callback handler */ void worker_probe_timer_cb(void* arg); /** start accept callback handler */ void worker_start_accept(void* arg); /** stop accept callback handler */ void worker_stop_accept(void* arg); /** handle remote control accept callbacks */ int remote_accept_callback(struct comm_point*, void*, int, struct comm_reply*); /** handle remote control data callbacks */ int remote_control_callback(struct comm_point*, void*, int, struct comm_reply*); /** routine to printout option values over SSL */ void remote_get_opt_ssl(char* line, void* arg); #endif /* LIBUNBOUND_WORKER_H */ unbound-1.13.1/libunbound/libworker.c0000644000175000017500000007210314010434640017207 0ustar wouterwouter/* * libunbound/worker.c - worker thread or process that resolves * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the worker process or thread that performs * the DNS resolving and validation. The worker is called by a procedure * and if in the background continues until exit, if in the foreground * returns from the procedure when done. */ #include "config.h" #ifdef HAVE_SSL #include #endif #include "libunbound/libworker.h" #include "libunbound/context.h" #include "libunbound/unbound.h" #include "libunbound/worker.h" #include "libunbound/unbound-event.h" #include "services/outside_network.h" #include "services/mesh.h" #include "services/localzone.h" #include "services/cache/rrset.h" #include "services/outbound_list.h" #include "services/authzone.h" #include "util/fptr_wlist.h" #include "util/module.h" #include "util/regional.h" #include "util/random.h" #include "util/config_file.h" #include "util/netevent.h" #include "util/storage/lookup3.h" #include "util/storage/slabhash.h" #include "util/net_help.h" #include "util/data/dname.h" #include "util/data/msgreply.h" #include "util/data/msgencode.h" #include "util/tube.h" #include "iterator/iter_fwd.h" #include "iterator/iter_hints.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #ifdef USE_DNSTAP #include "dnstap/dtstream.h" #endif #ifdef HAVE_TARGETCONDITIONALS_H #include #endif #if (defined(TARGET_OS_TV) && TARGET_OS_TV) || (defined(TARGET_OS_WATCH) && TARGET_OS_WATCH) #undef HAVE_FORK #endif /** handle new query command for bg worker */ static void handle_newq(struct libworker* w, uint8_t* buf, uint32_t len); /** delete libworker env */ static void libworker_delete_env(struct libworker* w) { if(w->env) { outside_network_quit_prepare(w->back); mesh_delete(w->env->mesh); context_release_alloc(w->ctx, w->env->alloc, !w->is_bg || w->is_bg_thread); sldns_buffer_free(w->env->scratch_buffer); regional_destroy(w->env->scratch); forwards_delete(w->env->fwds); hints_delete(w->env->hints); ub_randfree(w->env->rnd); free(w->env); } #ifdef HAVE_SSL SSL_CTX_free(w->sslctx); #endif outside_network_delete(w->back); } /** delete libworker struct */ static void libworker_delete(struct libworker* w) { if(!w) return; libworker_delete_env(w); comm_base_delete(w->base); free(w); } void libworker_delete_event(struct libworker* w) { if(!w) return; libworker_delete_env(w); comm_base_delete_no_base(w->base); free(w); } /** setup fresh libworker struct */ static struct libworker* libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) { struct libworker* w = (struct libworker*)calloc(1, sizeof(*w)); struct config_file* cfg = ctx->env->cfg; int* ports; int numports; if(!w) return NULL; w->is_bg = is_bg; w->ctx = ctx; w->env = (struct module_env*)malloc(sizeof(*w->env)); if(!w->env) { free(w); return NULL; } *w->env = *ctx->env; w->env->alloc = context_obtain_alloc(ctx, !w->is_bg || w->is_bg_thread); if(!w->env->alloc) { libworker_delete(w); return NULL; } w->thread_num = w->env->alloc->thread_num; alloc_set_id_cleanup(w->env->alloc, &libworker_alloc_cleanup, w); if(!w->is_bg || w->is_bg_thread) { lock_basic_lock(&ctx->cfglock); } w->env->scratch = regional_create_custom(cfg->msg_buffer_size); w->env->scratch_buffer = sldns_buffer_new(cfg->msg_buffer_size); w->env->fwds = forwards_create(); if(w->env->fwds && !forwards_apply_cfg(w->env->fwds, cfg)) { forwards_delete(w->env->fwds); w->env->fwds = NULL; } w->env->hints = hints_create(); if(w->env->hints && !hints_apply_cfg(w->env->hints, cfg)) { hints_delete(w->env->hints); w->env->hints = NULL; } if(cfg->ssl_upstream || (cfg->tls_cert_bundle && cfg->tls_cert_bundle[0]) || cfg->tls_win_cert) { w->sslctx = connect_sslctx_create(NULL, NULL, cfg->tls_cert_bundle, cfg->tls_win_cert); if(!w->sslctx) { /* to make the setup fail after unlock */ hints_delete(w->env->hints); w->env->hints = NULL; } } if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } if(!w->env->scratch || !w->env->scratch_buffer || !w->env->fwds || !w->env->hints) { libworker_delete(w); return NULL; } w->env->worker = (struct worker*)w; w->env->probe_timer = NULL; if(!w->is_bg || w->is_bg_thread) { lock_basic_lock(&ctx->cfglock); } if(!(w->env->rnd = ub_initstate(ctx->seed_rnd))) { if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } libworker_delete(w); return NULL; } if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } if(1) { /* primitive lockout for threading: if it overwrites another * thread it is like wiping the cache (which is likely empty * at the start) */ /* note we are holding the ctx lock in normal threaded * cases so that is solved properly, it is only for many ctx * in different threads that this may clash */ static int done_raninit = 0; if(!done_raninit) { done_raninit = 1; hash_set_raninit((uint32_t)ub_random(w->env->rnd)); } } if(eb) w->base = comm_base_create_event(eb); else w->base = comm_base_create(0); if(!w->base) { libworker_delete(w); return NULL; } w->env->worker_base = w->base; if(!w->is_bg || w->is_bg_thread) { lock_basic_lock(&ctx->cfglock); } numports = cfg_condense_ports(cfg, &ports); if(numports == 0) { if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } libworker_delete(w); return NULL; } w->back = outside_network_create(w->base, cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports, cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6, cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp, w->env->infra_cache, w->env->rnd, cfg->use_caps_bits_for_id, ports, numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w, cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx, cfg->delay_close, cfg->tls_use_sni, NULL, cfg->udp_connect); w->env->outnet = w->back; if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } free(ports); if(!w->back) { libworker_delete(w); return NULL; } w->env->mesh = mesh_create(&ctx->mods, w->env); if(!w->env->mesh) { libworker_delete(w); return NULL; } w->env->send_query = &libworker_send_query; w->env->detach_subs = &mesh_detach_subs; w->env->attach_sub = &mesh_attach_sub; w->env->add_sub = &mesh_add_sub; w->env->kill_sub = &mesh_state_delete; w->env->detect_cycle = &mesh_detect_cycle; comm_base_timept(w->base, &w->env->now, &w->env->now_tv); return w; } struct libworker* libworker_create_event(struct ub_ctx* ctx, struct ub_event_base* eb) { return libworker_setup(ctx, 0, eb); } /** handle cancel command for bg worker */ static void handle_cancel(struct libworker* w, uint8_t* buf, uint32_t len) { struct ctx_query* q; if(w->is_bg_thread) { lock_basic_lock(&w->ctx->cfglock); q = context_deserialize_cancel(w->ctx, buf, len); lock_basic_unlock(&w->ctx->cfglock); } else { q = context_deserialize_cancel(w->ctx, buf, len); } if(!q) { /* probably simply lookup failed, i.e. the message had been * processed and answered before the cancel arrived */ return; } q->cancelled = 1; free(buf); } /** do control command coming into bg server */ static void libworker_do_cmd(struct libworker* w, uint8_t* msg, uint32_t len) { switch(context_serial_getcmd(msg, len)) { default: case UB_LIBCMD_ANSWER: log_err("unknown command for bg worker %d", (int)context_serial_getcmd(msg, len)); /* and fall through to quit */ /* fallthrough */ case UB_LIBCMD_QUIT: free(msg); comm_base_exit(w->base); break; case UB_LIBCMD_NEWQUERY: handle_newq(w, msg, len); break; case UB_LIBCMD_CANCEL: handle_cancel(w, msg, len); break; } } /** handle control command coming into server */ void libworker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg, size_t len, int err, void* arg) { struct libworker* w = (struct libworker*)arg; if(err != 0) { free(msg); /* it is of no use to go on, exit */ comm_base_exit(w->base); return; } libworker_do_cmd(w, msg, len); /* also frees the buf */ } /** the background thread func */ static void* libworker_dobg(void* arg) { /* setup */ uint32_t m; struct libworker* w = (struct libworker*)arg; struct ub_ctx* ctx; if(!w) { log_err("libunbound bg worker init failed, nomem"); return NULL; } ctx = w->ctx; log_thread_set(&w->thread_num); #ifdef THREADS_DISABLED /* we are forked */ w->is_bg_thread = 0; /* close non-used parts of the pipes */ tube_close_write(ctx->qq_pipe); tube_close_read(ctx->rr_pipe); #endif if(!tube_setup_bg_listen(ctx->qq_pipe, w->base, libworker_handle_control_cmd, w)) { log_err("libunbound bg worker init failed, no bglisten"); return NULL; } if(!tube_setup_bg_write(ctx->rr_pipe, w->base)) { log_err("libunbound bg worker init failed, no bgwrite"); return NULL; } /* do the work */ comm_base_dispatch(w->base); /* cleanup */ m = UB_LIBCMD_QUIT; w->want_quit = 1; tube_remove_bg_listen(w->ctx->qq_pipe); tube_remove_bg_write(w->ctx->rr_pipe); libworker_delete(w); (void)tube_write_msg(ctx->rr_pipe, (uint8_t*)&m, (uint32_t)sizeof(m), 0); #ifdef THREADS_DISABLED /* close pipes from forked process before exit */ tube_close_read(ctx->qq_pipe); tube_close_write(ctx->rr_pipe); #endif return NULL; } int libworker_bg(struct ub_ctx* ctx) { struct libworker* w; /* fork or threadcreate */ lock_basic_lock(&ctx->cfglock); if(ctx->dothread) { lock_basic_unlock(&ctx->cfglock); w = libworker_setup(ctx, 1, NULL); if(!w) return UB_NOMEM; w->is_bg_thread = 1; #ifdef ENABLE_LOCK_CHECKS w->thread_num = 1; /* for nicer DEBUG checklocks */ #endif ub_thread_create(&ctx->bg_tid, libworker_dobg, w); } else { lock_basic_unlock(&ctx->cfglock); #ifndef HAVE_FORK /* no fork on windows */ return UB_FORKFAIL; #else /* HAVE_FORK */ switch((ctx->bg_pid=fork())) { case 0: w = libworker_setup(ctx, 1, NULL); if(!w) fatal_exit("out of memory"); /* close non-used parts of the pipes */ tube_close_write(ctx->qq_pipe); tube_close_read(ctx->rr_pipe); (void)libworker_dobg(w); exit(0); break; case -1: return UB_FORKFAIL; default: /* close non-used parts, so that the worker * bgprocess gets 'pipe closed' when the * main process exits */ tube_close_read(ctx->qq_pipe); tube_close_write(ctx->rr_pipe); break; } #endif /* HAVE_FORK */ } return UB_NOERROR; } /** insert canonname */ static int fill_canon(struct ub_result* res, uint8_t* s) { char buf[255+2]; dname_str(s, buf); res->canonname = strdup(buf); return res->canonname != 0; } /** fill data into result */ static int fill_res(struct ub_result* res, struct ub_packed_rrset_key* answer, uint8_t* finalcname, struct query_info* rq, struct reply_info* rep) { size_t i; struct packed_rrset_data* data; res->ttl = 0; if(!answer) { if(finalcname) { if(!fill_canon(res, finalcname)) return 0; /* out of memory */ } if(rep->rrset_count != 0) res->ttl = (int)rep->ttl; res->data = (char**)calloc(1, sizeof(char*)); res->len = (int*)calloc(1, sizeof(int)); return (res->data && res->len); } data = (struct packed_rrset_data*)answer->entry.data; if(query_dname_compare(rq->qname, answer->rk.dname) != 0) { if(!fill_canon(res, answer->rk.dname)) return 0; /* out of memory */ } else res->canonname = NULL; res->data = (char**)calloc(data->count+1, sizeof(char*)); res->len = (int*)calloc(data->count+1, sizeof(int)); if(!res->data || !res->len) return 0; /* out of memory */ for(i=0; icount; i++) { /* remove rdlength from rdata */ res->len[i] = (int)(data->rr_len[i] - 2); res->data[i] = memdup(data->rr_data[i]+2, (size_t)res->len[i]); if(!res->data[i]) return 0; /* out of memory */ } /* ttl for positive answers, from CNAME and answer RRs */ if(data->count != 0) { size_t j; res->ttl = (int)data->ttl; for(j=0; jan_numrrsets; j++) { struct packed_rrset_data* d = (struct packed_rrset_data*)rep->rrsets[j]-> entry.data; if((int)d->ttl < res->ttl) res->ttl = (int)d->ttl; } } /* ttl for negative answers */ if(data->count == 0 && rep->rrset_count != 0) res->ttl = (int)rep->ttl; res->data[data->count] = NULL; res->len[data->count] = 0; return 1; } /** fill result from parsed message, on error fills servfail */ void libworker_enter_result(struct ub_result* res, sldns_buffer* buf, struct regional* temp, enum sec_status msg_security) { struct query_info rq; struct reply_info* rep; res->rcode = LDNS_RCODE_SERVFAIL; rep = parse_reply_in_temp_region(buf, temp, &rq); if(!rep) { log_err("cannot parse buf"); return; /* error parsing buf, or out of memory */ } if(!fill_res(res, reply_find_answer_rrset(&rq, rep), reply_find_final_cname_target(&rq, rep), &rq, rep)) return; /* out of memory */ /* rcode, havedata, nxdomain, secure, bogus */ res->rcode = (int)FLAGS_GET_RCODE(rep->flags); if(res->data && res->data[0]) res->havedata = 1; if(res->rcode == LDNS_RCODE_NXDOMAIN) res->nxdomain = 1; if(msg_security == sec_status_secure) res->secure = 1; if(msg_security == sec_status_bogus || msg_security == sec_status_secure_sentinel_fail) res->bogus = 1; } /** fillup fg results */ static void libworker_fillup_fg(struct ctx_query* q, int rcode, sldns_buffer* buf, enum sec_status s, char* why_bogus, int was_ratelimited) { q->res->was_ratelimited = was_ratelimited; if(why_bogus) q->res->why_bogus = strdup(why_bogus); if(rcode != 0) { q->res->rcode = rcode; q->msg_security = s; return; } q->res->rcode = LDNS_RCODE_SERVFAIL; q->msg_security = sec_status_unchecked; q->msg = memdup(sldns_buffer_begin(buf), sldns_buffer_limit(buf)); q->msg_len = sldns_buffer_limit(buf); if(!q->msg) { return; /* the error is in the rcode */ } /* canonname and results */ q->msg_security = s; libworker_enter_result(q->res, buf, q->w->env->scratch, s); } void libworker_fg_done_cb(void* arg, int rcode, sldns_buffer* buf, enum sec_status s, char* why_bogus, int was_ratelimited) { struct ctx_query* q = (struct ctx_query*)arg; /* fg query is done; exit comm base */ comm_base_exit(q->w->base); libworker_fillup_fg(q, rcode, buf, s, why_bogus, was_ratelimited); } /** setup qinfo and edns */ static int setup_qinfo_edns(struct libworker* w, struct ctx_query* q, struct query_info* qinfo, struct edns_data* edns) { qinfo->qtype = (uint16_t)q->res->qtype; qinfo->qclass = (uint16_t)q->res->qclass; qinfo->local_alias = NULL; qinfo->qname = sldns_str2wire_dname(q->res->qname, &qinfo->qname_len); if(!qinfo->qname) { return 0; } edns->edns_present = 1; edns->ext_rcode = 0; edns->edns_version = 0; edns->bits = EDNS_DO; edns->opt_list = NULL; edns->padding_block_size = 0; if(sldns_buffer_capacity(w->back->udp_buff) < 65535) edns->udp_size = (uint16_t)sldns_buffer_capacity( w->back->udp_buff); else edns->udp_size = 65535; return 1; } int libworker_fg(struct ub_ctx* ctx, struct ctx_query* q) { struct libworker* w = libworker_setup(ctx, 0, NULL); uint16_t qflags, qid; struct query_info qinfo; struct edns_data edns; if(!w) return UB_INITFAIL; if(!setup_qinfo_edns(w, q, &qinfo, &edns)) { libworker_delete(w); return UB_SYNTAX; } qid = 0; qflags = BIT_RD; q->w = w; /* see if there is a fixed answer */ sldns_buffer_write_u16_at(w->back->udp_buff, 0, qid); sldns_buffer_write_u16_at(w->back->udp_buff, 2, qflags); if(local_zones_answer(ctx->local_zones, w->env, &qinfo, &edns, w->back->udp_buff, w->env->scratch, NULL, NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL)) { regional_free_all(w->env->scratch); libworker_fillup_fg(q, LDNS_RCODE_NOERROR, w->back->udp_buff, sec_status_insecure, NULL, 0); libworker_delete(w); free(qinfo.qname); return UB_NOERROR; } if(ctx->env->auth_zones && auth_zones_answer(ctx->env->auth_zones, w->env, &qinfo, &edns, NULL, w->back->udp_buff, w->env->scratch)) { regional_free_all(w->env->scratch); libworker_fillup_fg(q, LDNS_RCODE_NOERROR, w->back->udp_buff, sec_status_insecure, NULL, 0); libworker_delete(w); free(qinfo.qname); return UB_NOERROR; } /* process new query */ if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns, w->back->udp_buff, qid, libworker_fg_done_cb, q)) { free(qinfo.qname); return UB_NOMEM; } free(qinfo.qname); /* wait for reply */ comm_base_dispatch(w->base); libworker_delete(w); return UB_NOERROR; } void libworker_event_done_cb(void* arg, int rcode, sldns_buffer* buf, enum sec_status s, char* why_bogus, int was_ratelimited) { struct ctx_query* q = (struct ctx_query*)arg; ub_event_callback_type cb = q->cb_event; void* cb_arg = q->cb_arg; int cancelled = q->cancelled; /* delete it now */ struct ub_ctx* ctx = q->w->ctx; lock_basic_lock(&ctx->cfglock); (void)rbtree_delete(&ctx->queries, q->node.key); ctx->num_async--; context_query_delete(q); lock_basic_unlock(&ctx->cfglock); if(!cancelled) { /* call callback */ int sec = 0; if(s == sec_status_bogus) sec = 1; else if(s == sec_status_secure) sec = 2; (*cb)(cb_arg, rcode, (buf?(void*)sldns_buffer_begin(buf):NULL), (buf?(int)sldns_buffer_limit(buf):0), sec, why_bogus, was_ratelimited); } } int libworker_attach_mesh(struct ub_ctx* ctx, struct ctx_query* q, int* async_id) { struct libworker* w = ctx->event_worker; uint16_t qflags, qid; struct query_info qinfo; struct edns_data edns; if(!w) return UB_INITFAIL; if(!setup_qinfo_edns(w, q, &qinfo, &edns)) return UB_SYNTAX; qid = 0; qflags = BIT_RD; q->w = w; /* see if there is a fixed answer */ sldns_buffer_write_u16_at(w->back->udp_buff, 0, qid); sldns_buffer_write_u16_at(w->back->udp_buff, 2, qflags); if(local_zones_answer(ctx->local_zones, w->env, &qinfo, &edns, w->back->udp_buff, w->env->scratch, NULL, NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL)) { regional_free_all(w->env->scratch); free(qinfo.qname); libworker_event_done_cb(q, LDNS_RCODE_NOERROR, w->back->udp_buff, sec_status_insecure, NULL, 0); return UB_NOERROR; } if(ctx->env->auth_zones && auth_zones_answer(ctx->env->auth_zones, w->env, &qinfo, &edns, NULL, w->back->udp_buff, w->env->scratch)) { regional_free_all(w->env->scratch); free(qinfo.qname); libworker_event_done_cb(q, LDNS_RCODE_NOERROR, w->back->udp_buff, sec_status_insecure, NULL, 0); return UB_NOERROR; } /* process new query */ if(async_id) *async_id = q->querynum; if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns, w->back->udp_buff, qid, libworker_event_done_cb, q)) { free(qinfo.qname); return UB_NOMEM; } free(qinfo.qname); return UB_NOERROR; } /** add result to the bg worker result queue */ static void add_bg_result(struct libworker* w, struct ctx_query* q, sldns_buffer* pkt, int err, char* reason, int was_ratelimited) { uint8_t* msg = NULL; uint32_t len = 0; if(w->want_quit) { context_query_delete(q); return; } /* serialize and delete unneeded q */ if(w->is_bg_thread) { lock_basic_lock(&w->ctx->cfglock); if(reason) q->res->why_bogus = strdup(reason); q->res->was_ratelimited = was_ratelimited; if(pkt) { q->msg_len = sldns_buffer_remaining(pkt); q->msg = memdup(sldns_buffer_begin(pkt), q->msg_len); if(!q->msg) { msg = context_serialize_answer(q, UB_NOMEM, NULL, &len); } else { msg = context_serialize_answer(q, err, NULL, &len); } } else { msg = context_serialize_answer(q, err, NULL, &len); } lock_basic_unlock(&w->ctx->cfglock); } else { if(reason) q->res->why_bogus = strdup(reason); q->res->was_ratelimited = was_ratelimited; msg = context_serialize_answer(q, err, pkt, &len); (void)rbtree_delete(&w->ctx->queries, q->node.key); w->ctx->num_async--; context_query_delete(q); } if(!msg) { log_err("out of memory for async answer"); return; } if(!tube_queue_item(w->ctx->rr_pipe, msg, len)) { log_err("out of memory for async answer"); return; } } void libworker_bg_done_cb(void* arg, int rcode, sldns_buffer* buf, enum sec_status s, char* why_bogus, int was_ratelimited) { struct ctx_query* q = (struct ctx_query*)arg; if(q->cancelled || q->w->back->want_to_quit) { if(q->w->is_bg_thread) { /* delete it now */ struct ub_ctx* ctx = q->w->ctx; lock_basic_lock(&ctx->cfglock); (void)rbtree_delete(&ctx->queries, q->node.key); ctx->num_async--; context_query_delete(q); lock_basic_unlock(&ctx->cfglock); } /* cancelled, do not give answer */ return; } q->msg_security = s; if(!buf) { buf = q->w->env->scratch_buffer; } if(rcode != 0) { error_encode(buf, rcode, NULL, 0, BIT_RD, NULL); } add_bg_result(q->w, q, buf, UB_NOERROR, why_bogus, was_ratelimited); } /** handle new query command for bg worker */ static void handle_newq(struct libworker* w, uint8_t* buf, uint32_t len) { uint16_t qflags, qid; struct query_info qinfo; struct edns_data edns; struct ctx_query* q; if(w->is_bg_thread) { lock_basic_lock(&w->ctx->cfglock); q = context_lookup_new_query(w->ctx, buf, len); lock_basic_unlock(&w->ctx->cfglock); } else { q = context_deserialize_new_query(w->ctx, buf, len); } free(buf); if(!q) { log_err("failed to deserialize newq"); return; } if(!setup_qinfo_edns(w, q, &qinfo, &edns)) { add_bg_result(w, q, NULL, UB_SYNTAX, NULL, 0); return; } qid = 0; qflags = BIT_RD; /* see if there is a fixed answer */ sldns_buffer_write_u16_at(w->back->udp_buff, 0, qid); sldns_buffer_write_u16_at(w->back->udp_buff, 2, qflags); if(local_zones_answer(w->ctx->local_zones, w->env, &qinfo, &edns, w->back->udp_buff, w->env->scratch, NULL, NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL)) { regional_free_all(w->env->scratch); q->msg_security = sec_status_insecure; add_bg_result(w, q, w->back->udp_buff, UB_NOERROR, NULL, 0); free(qinfo.qname); return; } if(w->ctx->env->auth_zones && auth_zones_answer(w->ctx->env->auth_zones, w->env, &qinfo, &edns, NULL, w->back->udp_buff, w->env->scratch)) { regional_free_all(w->env->scratch); q->msg_security = sec_status_insecure; add_bg_result(w, q, w->back->udp_buff, UB_NOERROR, NULL, 0); free(qinfo.qname); return; } q->w = w; /* process new query */ if(!mesh_new_callback(w->env->mesh, &qinfo, qflags, &edns, w->back->udp_buff, qid, libworker_bg_done_cb, q)) { add_bg_result(w, q, NULL, UB_NOMEM, NULL, 0); } free(qinfo.qname); } void libworker_alloc_cleanup(void* arg) { struct libworker* w = (struct libworker*)arg; slabhash_clear(&w->env->rrset_cache->table); slabhash_clear(w->env->msg_cache); } struct outbound_entry* libworker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q) { struct libworker* w = (struct libworker*)q->env->worker; struct outbound_entry* e = (struct outbound_entry*)regional_alloc( q->region, sizeof(*e)); if(!e) return NULL; e->qstate = q; e->qsent = outnet_serviced_query(w->back, qinfo, flags, dnssec, want_dnssec, nocaps, q->env->cfg->tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, q, libworker_handle_service_reply, e, w->back->udp_buff, q->env); if(!e->qsent) { return NULL; } return e; } int libworker_handle_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info) { struct module_qstate* q = (struct module_qstate*)arg; struct libworker* lw = (struct libworker*)q->env->worker; struct outbound_entry e; e.qstate = q; e.qsent = NULL; if(error != 0) { mesh_report_reply(lw->env->mesh, &e, reply_info, error); return 0; } /* sanity check. */ if(!LDNS_QR_WIRE(sldns_buffer_begin(c->buffer)) || LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) != LDNS_PACKET_QUERY || LDNS_QDCOUNT(sldns_buffer_begin(c->buffer)) > 1) { /* error becomes timeout for the module as if this reply * never arrived. */ mesh_report_reply(lw->env->mesh, &e, reply_info, NETEVENT_TIMEOUT); return 0; } mesh_report_reply(lw->env->mesh, &e, reply_info, NETEVENT_NOERROR); return 0; } int libworker_handle_service_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info) { struct outbound_entry* e = (struct outbound_entry*)arg; struct libworker* lw = (struct libworker*)e->qstate->env->worker; if(error != 0) { mesh_report_reply(lw->env->mesh, e, reply_info, error); return 0; } /* sanity check. */ if(!LDNS_QR_WIRE(sldns_buffer_begin(c->buffer)) || LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) != LDNS_PACKET_QUERY || LDNS_QDCOUNT(sldns_buffer_begin(c->buffer)) > 1) { /* error becomes timeout for the module as if this reply * never arrived. */ mesh_report_reply(lw->env->mesh, e, reply_info, NETEVENT_TIMEOUT); return 0; } mesh_report_reply(lw->env->mesh, e, reply_info, NETEVENT_NOERROR); return 0; } /* --- fake callbacks for fptr_wlist to work --- */ void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) { log_assert(0); } int worker_handle_request(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } int worker_handle_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int worker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int remote_accept_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } int remote_control_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg)) { log_assert(0); } struct outbound_entry* worker_send_query(struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) { log_assert(0); return 0; } void worker_alloc_cleanup(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_stat_timer_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_probe_timer_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_start_accept(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_stop_accept(void* ATTR_UNUSED(arg)) { log_assert(0); } int order_lock_cmp(const void* ATTR_UNUSED(e1), const void* ATTR_UNUSED(e2)) { log_assert(0); return 0; } int codeline_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } int replay_var_compare(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } void remote_get_opt_ssl(char* ATTR_UNUSED(str), void* ATTR_UNUSED(arg)) { log_assert(0); } #ifdef UB_ON_WINDOWS void worker_win_stop_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } void wsvc_cron_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } #endif /* UB_ON_WINDOWS */ #ifdef USE_DNSTAP void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } #endif #ifdef USE_DNSTAP void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } #endif unbound-1.13.1/libunbound/unbound-event.h0000644000175000017500000002536314010434640020013 0ustar wouterwouter/* * unbound-event.h - unbound validating resolver public API with events * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the unbound interface for use with user defined * pluggable event bases. * * Use ub_ctx_create_event_ub_base() to create an unbound context that uses * the user provided event base API. Then, use the ub_resolve_event call * to add DNS resolve queries to the context. Those then run whith the * provided event_base, and when they are done you get a function callback. * * This method does not fork another process or create a thread, the effort * is done by the unbound state machines that are connected to the event base. * * It is also possible to provide a libevent based event base by using * ub_ctx_create_event_base(). But you have to use the same libevent that * unbound was compiled with, otherwise it wouldn't work, the event and * event_base structures would be different. */ #ifndef _UB_UNBOUND_EVENT_H #define _UB_UNBOUND_EVENT_H #ifdef __cplusplus extern "C" { #endif struct ub_ctx; struct ub_result; struct event_base; /** event timeout */ #define UB_EV_TIMEOUT 0x01 /** event fd readable */ #define UB_EV_READ 0x02 /** event fd writable */ #define UB_EV_WRITE 0x04 /** event signal */ #define UB_EV_SIGNAL 0x08 /** event must persist */ #define UB_EV_PERSIST 0x10 /** magic number to identify this version of the pluggable event api */ #define UB_EVENT_MAGIC 0x44d74d78 struct ub_event; struct ub_event_base; struct timeval; /** * The Virtual Method Table for and ub_event_base "object" */ struct ub_event_base_vmt { /** Destructor for the ub_event_base object, * (not called by libunbound) */ void (*free)(struct ub_event_base*); /** Run the event loop * (not called by libunbound when using ub_resolve_event) */ int (*dispatch)(struct ub_event_base*); /** Exit the given event loop */ int (*loopexit)(struct ub_event_base*, struct timeval*); /** Instantiate a new ub_event associated with this event base */ struct ub_event* (*new_event)(struct ub_event_base*, int fd, short bits, void (*cb)(int, short, void*), void* arg); /** Instantiate a new signal associated with this event base, * (not called by libunbound) */ struct ub_event* (*new_signal)(struct ub_event_base*, int fd, void (*cb)(int, short, void*), void* arg); /** Create a new ub_event associated with the given wsaevent, * (not called by libunbound) */ struct ub_event* (*winsock_register_wsaevent)(struct ub_event_base*, void* wsaevent, void (*cb)(int, short, void*), void* arg); }; /** * A user defined pluggable event base is registered by providing a * ub_event_base "object" with the ub_ctx_create_ub_event() function. * The magic number must be correct and the Virtual Method Table must be * fully equipped providing the event base API to be used by libunbound. */ struct ub_event_base { /** magic must be UB_EVENT_MAGIC (0x44d74d78) */ unsigned long magic; /** Virtual Method Table for ub_event_base */ struct ub_event_base_vmt* vmt; }; /** * The Virtual Method Table for and ub_event "object" */ struct ub_event_vmt { /** Add event bits for this event to fire on. * The event will be deactivated before this function is called. */ void (*add_bits)(struct ub_event*, short); /** Configure the event so it will not longer fire on given bits * The event will be deactivated before this function is called. */ void (*del_bits)(struct ub_event*, short); /** Change or set the file descriptor on the event * The event will be deactivated before this function is called. */ void (*set_fd)(struct ub_event*, int); /** Destructor for the ub_event object */ void (*free)(struct ub_event*); /** Activate the event. The given timeval is an timeout value. */ int (*add)(struct ub_event*, struct timeval*); /** Deactivate the event */ int (*del)(struct ub_event*); /** Reconfigure and activate a timeout event */ int (*add_timer)(struct ub_event*, struct ub_event_base*, void (*cb)(int, short, void*), void* arg, struct timeval*); /** Deactivate the timeout event */ int (*del_timer)(struct ub_event*); /** Activate a signal event (not called by libunbound). */ int (*add_signal)(struct ub_event*, struct timeval*); /** Deactivate a signal event (not called by libunbound). */ int (*del_signal)(struct ub_event*); /** Destructor for a ub_event associated with a wsaevent, * (not called by libunbound) */ void (*winsock_unregister_wsaevent)(struct ub_event* ev); /** Libunbound will signal the eventloop when a TCP windows socket * will block on next read or write (given by the eventbits), to work * around edge trigger event behaviour of select on windows with TCP. */ void (*winsock_tcp_wouldblock)(struct ub_event*, int eventbit); }; /** * An "object" comprising a user defined pluggable event. * The magic number must be correct and the Virtual Method Table must be * fully equipped providing the ub_event API to be used by libunbound. */ struct ub_event { /** magic must be UB_EVENT_MAGIC (0x44d74d78) */ unsigned long magic; /** Virtual Method Table for ub_event */ struct ub_event_vmt* vmt; }; typedef void (*ub_event_callback_type)(void*, int, void*, int, int, char*, int); /** * Create a resolving and validation context. * The information from /etc/resolv.conf and /etc/hosts is not utilised by * default. Use ub_ctx_resolvconf and ub_ctx_hosts to read them. * @param base: the pluggable event base that the caller has created. * The unbound context uses this event base. * @return a new context. default initialisation. * returns NULL on error. * You must use ub_resolve_event with this context. * Do not call ub_ctx_async, ub_poll, ub_wait, ub_process, this is all done * with the event_base. Setup the options you like with the other functions. */ struct ub_ctx* ub_ctx_create_ub_event(struct ub_event_base* base); /** * Create a resolving and validation context. * The information from /etc/resolv.conf and /etc/hosts is not utilised by * default. Use ub_ctx_resolvconf and ub_ctx_hosts to read them. * You have to use the same libevent that unbound was compiled with, * otherwise it wouldn't work, the event and event_base structures would * be different. * @param base: the event base that the caller has created. The unbound * context uses this event base. * @return a new context. default initialisation. * returns NULL on error. * You must use ub_resolve_event with this context. * Do not call ub_ctx_async, ub_poll, ub_wait, ub_process, this is all done * with the event_base. Setup the options you like with the other functions. */ struct ub_ctx* ub_ctx_create_event(struct event_base* base); /** * Set a new libevent event_base on a context created with ub_ctx_create_event. * You have to use the same libevent that unbound was compiled with, * otherwise it wouldn't work, the event and event_base structures would * be different. * Any outbound queries will be canceled. * @param ctx the ub_ctx to update. Must have been created with ub_ctx_create_event * @param base the new event_base to attach to the ctx * @return 0 if OK, else error */ int ub_ctx_set_event(struct ub_ctx* ctx, struct event_base* base); /** * Perform resolution and validation of the target name. * Asynchronous, after a while, the callback will be called with your * data and the result. Uses the event_base user installed by creating the * context with ub_ctx_create_event(). * @param ctx: context with event_base in it. * The context is finalized, and can no longer accept all config changes. * @param name: domain name in text format (a string). * @param rrtype: type of RR in host order, 1 is A. * @param rrclass: class of RR in host order, 1 is IN (for internet). * @param mydata: this data is your own data (you can pass NULL), * and is passed on to the callback function. * @param callback: this is called on completion of the resolution. * It is called as: * void callback(void* mydata, int rcode, void* packet, int packet_len, * int sec, char* why_bogus) * with mydata: the same as passed here, you may pass NULL, * with rcode: 0 on no error, nonzero for mostly SERVFAIL situations, * this is a DNS rcode. * with packet: a buffer with DNS wireformat packet with the answer. * do not inspect if rcode != 0. * do not write or free the packet buffer, it is used internally * in unbound (for other callbacks that want the same data). * with packet_len: length in bytes of the packet buffer. * with sec: 0 if insecure, 1 if bogus, 2 if DNSSEC secure. * with why_bogus: text string explaining why it is bogus (or NULL). * These point to buffers inside unbound; do not deallocate the packet or * error string. * * If an error happens during processing, your callback will be called * with error set to a nonzero value (and result==NULL). * For localdata (etc/hosts) the callback is called immediately, before * resolve_event returns, async_id=0 is returned. * @param async_id: if you pass a non-NULL value, an identifier number is * returned for the query as it is in progress. It can be used to * cancel the query. * @return 0 if OK, else error. */ int ub_resolve_event(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, void* mydata, ub_event_callback_type callback, int* async_id); #ifdef __cplusplus } #endif #endif /* _UB_UNBOUND_H */ unbound-1.13.1/libunbound/context.c0000644000175000017500000002716514010434640016703 0ustar wouterwouter/* * libunbound/context.c - validating context for unbound internal use * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the validator context structure. */ #include "config.h" #include "libunbound/context.h" #include "util/module.h" #include "util/config_file.h" #include "util/net_help.h" #include "services/modstack.h" #include "services/localzone.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" #include "services/authzone.h" #include "util/data/msgreply.h" #include "util/storage/slabhash.h" #include "util/edns.h" #include "sldns/sbuffer.h" int context_finalize(struct ub_ctx* ctx) { int is_rpz = 0; struct config_file* cfg = ctx->env->cfg; verbosity = cfg->verbosity; if(ctx_logfile_overridden && !ctx->logfile_override) { log_file(NULL); /* clear that override */ ctx_logfile_overridden = 0; } if(ctx->logfile_override) { ctx_logfile_overridden = 1; log_file(ctx->log_out); } else { log_init(cfg->logfile, cfg->use_syslog, NULL); } config_apply(cfg); if(!modstack_setup(&ctx->mods, cfg->module_conf, ctx->env)) return UB_INITFAIL; log_edns_known_options(VERB_ALGO, ctx->env); ctx->local_zones = local_zones_create(); if(!ctx->local_zones) return UB_NOMEM; if(!local_zones_apply_cfg(ctx->local_zones, cfg)) return UB_INITFAIL; if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz)) return UB_INITFAIL; if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg)) return UB_INITFAIL; if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { slabhash_delete(ctx->env->msg_cache); ctx->env->msg_cache = slabhash_create(cfg->msg_cache_slabs, HASH_DEFAULT_STARTARRAY, cfg->msg_cache_size, msgreply_sizefunc, query_info_compare, query_entry_delete, reply_info_delete, NULL); if(!ctx->env->msg_cache) return UB_NOMEM; } ctx->env->rrset_cache = rrset_cache_adjust(ctx->env->rrset_cache, ctx->env->cfg, ctx->env->alloc); if(!ctx->env->rrset_cache) return UB_NOMEM; ctx->env->infra_cache = infra_adjust(ctx->env->infra_cache, cfg); if(!ctx->env->infra_cache) return UB_NOMEM; ctx->finalized = 1; return UB_NOERROR; } int context_query_cmp(const void* a, const void* b) { if( *(int*)a < *(int*)b ) return -1; if( *(int*)a > *(int*)b ) return 1; return 0; } void context_query_delete(struct ctx_query* q) { if(!q) return; ub_resolve_free(q->res); free(q->msg); free(q); } /** How many times to try to find an unused query-id-number for async */ #define NUM_ID_TRIES 100000 /** find next useful id number of 0 on error */ static int find_id(struct ub_ctx* ctx, int* id) { size_t tries = 0; ctx->next_querynum++; while(rbtree_search(&ctx->queries, &ctx->next_querynum)) { ctx->next_querynum++; /* numerical wraparound is fine */ if(tries++ > NUM_ID_TRIES) return 0; } *id = ctx->next_querynum; return 1; } struct ctx_query* context_new(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, ub_callback_type cb, ub_event_callback_type cb_event, void* cbarg) { struct ctx_query* q = (struct ctx_query*)calloc(1, sizeof(*q)); if(!q) return NULL; lock_basic_lock(&ctx->cfglock); if(!find_id(ctx, &q->querynum)) { lock_basic_unlock(&ctx->cfglock); free(q); return NULL; } lock_basic_unlock(&ctx->cfglock); q->node.key = &q->querynum; q->async = (cb != NULL || cb_event != NULL); q->cb = cb; q->cb_event = cb_event; q->cb_arg = cbarg; q->res = (struct ub_result*)calloc(1, sizeof(*q->res)); if(!q->res) { free(q); return NULL; } q->res->qname = strdup(name); if(!q->res->qname) { free(q->res); free(q); return NULL; } q->res->qtype = rrtype; q->res->qclass = rrclass; /* add to query list */ lock_basic_lock(&ctx->cfglock); if(q->async) ctx->num_async ++; (void)rbtree_insert(&ctx->queries, &q->node); lock_basic_unlock(&ctx->cfglock); return q; } struct alloc_cache* context_obtain_alloc(struct ub_ctx* ctx, int locking) { struct alloc_cache* a; int tnum = 0; if(locking) { lock_basic_lock(&ctx->cfglock); } a = ctx->alloc_list; if(a) ctx->alloc_list = a->super; /* snip off list */ else tnum = ctx->thr_next_num++; if(locking) { lock_basic_unlock(&ctx->cfglock); } if(a) { a->super = &ctx->superalloc; return a; } a = (struct alloc_cache*)calloc(1, sizeof(*a)); if(!a) return NULL; alloc_init(a, &ctx->superalloc, tnum); return a; } void context_release_alloc(struct ub_ctx* ctx, struct alloc_cache* alloc, int locking) { if(!ctx || !alloc) return; if(locking) { lock_basic_lock(&ctx->cfglock); } alloc->super = ctx->alloc_list; ctx->alloc_list = alloc; if(locking) { lock_basic_unlock(&ctx->cfglock); } } uint8_t* context_serialize_new_query(struct ctx_query* q, uint32_t* len) { /* format for new query is * o uint32 cmd * o uint32 id * o uint32 type * o uint32 class * o rest queryname (string) */ uint8_t* p; size_t slen = strlen(q->res->qname) + 1/*end of string*/; *len = sizeof(uint32_t)*4 + slen; p = (uint8_t*)malloc(*len); if(!p) return NULL; sldns_write_uint32(p, UB_LIBCMD_NEWQUERY); sldns_write_uint32(p+sizeof(uint32_t), (uint32_t)q->querynum); sldns_write_uint32(p+2*sizeof(uint32_t), (uint32_t)q->res->qtype); sldns_write_uint32(p+3*sizeof(uint32_t), (uint32_t)q->res->qclass); memmove(p+4*sizeof(uint32_t), q->res->qname, slen); return p; } struct ctx_query* context_deserialize_new_query(struct ub_ctx* ctx, uint8_t* p, uint32_t len) { struct ctx_query* q = (struct ctx_query*)calloc(1, sizeof(*q)); if(!q) return NULL; if(len < 4*sizeof(uint32_t)+1) { free(q); return NULL; } log_assert( sldns_read_uint32(p) == UB_LIBCMD_NEWQUERY); q->querynum = (int)sldns_read_uint32(p+sizeof(uint32_t)); q->node.key = &q->querynum; q->async = 1; q->res = (struct ub_result*)calloc(1, sizeof(*q->res)); if(!q->res) { free(q); return NULL; } q->res->qtype = (int)sldns_read_uint32(p+2*sizeof(uint32_t)); q->res->qclass = (int)sldns_read_uint32(p+3*sizeof(uint32_t)); q->res->qname = strdup((char*)(p+4*sizeof(uint32_t))); if(!q->res->qname) { free(q->res); free(q); return NULL; } /** add to query list */ ctx->num_async++; (void)rbtree_insert(&ctx->queries, &q->node); return q; } struct ctx_query* context_lookup_new_query(struct ub_ctx* ctx, uint8_t* p, uint32_t len) { struct ctx_query* q; int querynum; if(len < 4*sizeof(uint32_t)+1) { return NULL; } log_assert( sldns_read_uint32(p) == UB_LIBCMD_NEWQUERY); querynum = (int)sldns_read_uint32(p+sizeof(uint32_t)); q = (struct ctx_query*)rbtree_search(&ctx->queries, &querynum); if(!q) { return NULL; } log_assert(q->async); return q; } uint8_t* context_serialize_answer(struct ctx_query* q, int err, sldns_buffer* pkt, uint32_t* len) { /* answer format * o uint32 cmd * o uint32 id * o uint32 error_code * o uint32 msg_security * o uint32 was_ratelimited * o uint32 length of why_bogus string (+1 for eos); 0 absent. * o why_bogus_string * o the remainder is the answer msg from resolver lookup. * remainder can be length 0. */ size_t size_of_uint32s = 6 * sizeof(uint32_t); size_t pkt_len = pkt?sldns_buffer_remaining(pkt):0; size_t wlen = (pkt&&q->res->why_bogus)?strlen(q->res->why_bogus)+1:0; uint8_t* p; *len = size_of_uint32s + pkt_len + wlen; p = (uint8_t*)malloc(*len); if(!p) return NULL; sldns_write_uint32(p, UB_LIBCMD_ANSWER); sldns_write_uint32(p+sizeof(uint32_t), (uint32_t)q->querynum); sldns_write_uint32(p+2*sizeof(uint32_t), (uint32_t)err); sldns_write_uint32(p+3*sizeof(uint32_t), (uint32_t)q->msg_security); sldns_write_uint32(p+4*sizeof(uint32_t), (uint32_t)q->res->was_ratelimited); sldns_write_uint32(p+5*sizeof(uint32_t), (uint32_t)wlen); if(wlen > 0) memmove(p+size_of_uint32s, q->res->why_bogus, wlen); if(pkt_len > 0) memmove(p+size_of_uint32s+wlen, sldns_buffer_begin(pkt), pkt_len); return p; } struct ctx_query* context_deserialize_answer(struct ub_ctx* ctx, uint8_t* p, uint32_t len, int* err) { size_t size_of_uint32s = 6 * sizeof(uint32_t); struct ctx_query* q = NULL ; int id; size_t wlen; if(len < size_of_uint32s) return NULL; log_assert( sldns_read_uint32(p) == UB_LIBCMD_ANSWER); id = (int)sldns_read_uint32(p+sizeof(uint32_t)); q = (struct ctx_query*)rbtree_search(&ctx->queries, &id); if(!q) return NULL; *err = (int)sldns_read_uint32(p+2*sizeof(uint32_t)); q->msg_security = sldns_read_uint32(p+3*sizeof(uint32_t)); q->res->was_ratelimited = (int)sldns_read_uint32(p+4*sizeof(uint32_t)); wlen = (size_t)sldns_read_uint32(p+5*sizeof(uint32_t)); if(len > size_of_uint32s && wlen > 0) { if(len >= size_of_uint32s+wlen) q->res->why_bogus = (char*)memdup( p+size_of_uint32s, wlen); if(!q->res->why_bogus) { /* pass malloc failure to the user callback */ q->msg_len = 0; *err = UB_NOMEM; return q; } q->res->why_bogus[wlen-1] = 0; /* zero terminated for sure */ } if(len > size_of_uint32s+wlen) { q->msg_len = len - size_of_uint32s - wlen; q->msg = (uint8_t*)memdup(p+size_of_uint32s+wlen, q->msg_len); if(!q->msg) { /* pass malloc failure to the user callback */ q->msg_len = 0; *err = UB_NOMEM; return q; } } return q; } uint8_t* context_serialize_cancel(struct ctx_query* q, uint32_t* len) { /* format of cancel: * o uint32 cmd * o uint32 async-id */ uint8_t* p = (uint8_t*)reallocarray(NULL, sizeof(uint32_t), 2); if(!p) return NULL; *len = 2*sizeof(uint32_t); sldns_write_uint32(p, UB_LIBCMD_CANCEL); sldns_write_uint32(p+sizeof(uint32_t), (uint32_t)q->querynum); return p; } struct ctx_query* context_deserialize_cancel(struct ub_ctx* ctx, uint8_t* p, uint32_t len) { struct ctx_query* q; int id; if(len != 2*sizeof(uint32_t)) return NULL; log_assert( sldns_read_uint32(p) == UB_LIBCMD_CANCEL); id = (int)sldns_read_uint32(p+sizeof(uint32_t)); q = (struct ctx_query*)rbtree_search(&ctx->queries, &id); return q; } uint8_t* context_serialize_quit(uint32_t* len) { uint32_t* p = (uint32_t*)malloc(sizeof(uint32_t)); if(!p) return NULL; *len = sizeof(uint32_t); sldns_write_uint32(p, UB_LIBCMD_QUIT); return (uint8_t*)p; } enum ub_ctx_cmd context_serial_getcmd(uint8_t* p, uint32_t len) { uint32_t v; if((size_t)len < sizeof(v)) return UB_LIBCMD_QUIT; v = sldns_read_uint32(p); return v; } unbound-1.13.1/libunbound/python/0000755000175000017500000000000014010434640016361 5ustar wouterwouterunbound-1.13.1/libunbound/python/examples/0000755000175000017500000000000014010434640020177 5ustar wouterwouterunbound-1.13.1/libunbound/python/examples/dnssec-valid.py0000644000175000017500000000412114010434640023123 0ustar wouterwouter#!/usr/bin/python ''' dnssec-valid.py: DNSSEC validation Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import os from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN ctx = ub_ctx() ctx.resolvconf("/etc/resolv.conf") fw = open("dnssec-valid.txt","wb") ctx.debugout(fw) ctx.debuglevel(2) if os.path.isfile("keys"): ctx.add_ta_file("keys") #read public keys for DNSSEC verification status, result = ctx.resolve("www.nic.cz", RR_TYPE_A, RR_CLASS_IN) if status == 0 and result.havedata: print("Result:", sorted(result.data.address_list)) if result.secure: print("Result is secure") elif result.bogus: print("Result is bogus") else: print("Result is insecure") unbound-1.13.1/libunbound/python/examples/dns-lookup.py0000644000175000017500000000351714010434640022652 0ustar wouterwouter#!/usr/bin/python ''' dns-lookup.py : This example shows how to resolve IP address Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("www.nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:", sorted(result.data.address_list)) elif status != 0: print("Error:", unbound.ub_strerror(status)) unbound-1.13.1/libunbound/python/examples/reverse-lookup.py0000644000175000017500000000351214010434640023534 0ustar wouterwouter#!/usr/bin/python ''' reverse-lookup.py: Example shows how to resolve reverse record Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve(unbound.reverse("74.125.43.147") + ".in-addr.arpa.", unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result.data:", result.data, sorted(result.data.domain_list)) unbound-1.13.1/libunbound/python/examples/idn-lookup.py0000644000175000017500000000514514010434640022637 0ustar wouterwouter#!/usr/bin/python # vim:fileencoding=utf-8 ''' idn-lookup.py: IDN (Internationalized Domain Name) lookup support Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import unbound import locale ctx = unbound.ub_ctx() ctx.set_option("module-config:","iterator") #We don't need validation ctx.resolvconf("/etc/resolv.conf") #The unicode IDN string is automatically converted (if necessary) status, result = ctx.resolve(u"www.háÄkyÄárky.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.address_list): print(" address:%s" % k) status, result = ctx.resolve(u"háÄkyÄárky.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.mx_list_idn): print(" priority:%d address:%s" % k) status, result = ctx.resolve(unbound.reverse('217.31.204.66')+'.in-addr.arpa', unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result.data:", result.data) for k in sorted(result.data.domain_list_idn): print(" dname:%s" % k) unbound-1.13.1/libunbound/python/examples/dnssec_test.py0000644000175000017500000000256014010434640023072 0ustar wouterwouter#!/usr/bin/env python from __future__ import print_function from unbound import ub_ctx, RR_TYPE_A, RR_TYPE_RRSIG, RR_TYPE_NSEC, RR_TYPE_NSEC3 import ldns def dnssecParse(domain, rrType=RR_TYPE_A): print("Resolving domain", domain) s, r = resolver.resolve(domain) print("status: %s, secure: %s, rcode: %s, havedata: %s, answer_len; %s" % (s, r.secure, r.rcode_str, r.havedata, r.answer_len)) s, pkt = ldns.ldns_wire2pkt(r.packet) if s != 0: raise RuntimeError("Error parsing DNS packet") rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_ANSWER) print("RRSIGs from answer:", sorted(rrsigs)) rrsigs = pkt.rr_list_by_type(RR_TYPE_RRSIG, ldns.LDNS_SECTION_AUTHORITY) print("RRSIGs from authority:", sorted(rrsigs)) nsecs = pkt.rr_list_by_type(RR_TYPE_NSEC, ldns.LDNS_SECTION_AUTHORITY) print("NSECs:", sorted(nsecs)) nsec3s = pkt.rr_list_by_type(RR_TYPE_NSEC3, ldns.LDNS_SECTION_AUTHORITY) print("NSEC3s:", sorted(nsec3s)) print("---") resolver = ub_ctx() resolver.add_ta(". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5") resolver.add_ta(". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D") dnssecParse("nic.cz") dnssecParse("nonexistent-domain-blablabla.cz") dnssecParse("nonexistent-domain-blablabla.root.cz") unbound-1.13.1/libunbound/python/examples/example8-1.py0000644000175000017500000000463114010434640022436 0ustar wouterwouter#!/usr/bin/python # vim:fileencoding=utf-8 ''' example8-1.py: Example shows how to lookup for MX and NS records Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.mx_list): print(" priority:%d address:%s" % k) status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.address_list): print(" address:%s" % k) status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.domain_list): print(" host: %s" % k) unbound-1.13.1/libunbound/python/examples/async-lookup.py0000644000175000017500000000424414010434640023201 0ustar wouterwouter#!/usr/bin/python ''' async-lookup.py : This example shows how to use asynchronous lookups Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import unbound import time ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") def call_back(my_data,status,result): print("Call_back:", sorted(my_data)) if status == 0 and result.havedata: print("Result:", sorted(result.data.address_list)) my_data['done_flag'] = True my_data = {'done_flag':False,'arbitrary':"object"} status, async_id = ctx.resolve_async("www.nic.cz", my_data, call_back, unbound.RR_TYPE_A, unbound.RR_CLASS_IN) while (status == 0) and (not my_data['done_flag']): status = ctx.process() time.sleep(0.1) if (status != 0): print("Resolve error:", unbound.ub_strerror(status)) unbound-1.13.1/libunbound/python/examples/ns-lookup.py0000644000175000017500000000357414010434640022511 0ustar wouterwouter#!/usr/bin/python # vim:fileencoding=utf-8 ''' ns-lookup.py: Example shows how to lookup for NS records Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("vutbr.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.domain_list): print(" host: %s" % k) unbound-1.13.1/libunbound/python/examples/mx-lookup.py0000644000175000017500000000416514010434640022512 0ustar wouterwouter#!/usr/bin/python # vim:fileencoding=utf-8 ''' mx-lookup.py: Lookup for MX records Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' from __future__ import print_function import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.mx_list): print(" priority:%d address:%s" % k) status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print("Result:") print(" raw data:", result.data) for k in sorted(result.data.address_list): print(" address:%s" % k) unbound-1.13.1/libunbound/python/doc/0000755000175000017500000000000014010434640017126 5ustar wouterwouterunbound-1.13.1/libunbound/python/doc/examples/0000755000175000017500000000000014010434640020744 5ustar wouterwouterunbound-1.13.1/libunbound/python/doc/examples/example3.rst0000644000175000017500000000175214010434640023221 0ustar wouterwouter.. _example_asynch: Asynchronous lookup =================== This example performs the name lookup in the background. The main program keeps running while the name is resolved. Source code ----------- :: #!/usr/bin/python import time import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") def call_back(my_data,status,result): print "Call_back:", my_data if status == 0 and result.havedata: print "Result:", result.data.address_list my_data['done_flag'] = True my_data = {'done_flag':False,'arbitrary':"object"} status, async_id = ctx.resolve_async("www.seznam.cz", my_data, call_back, unbound.RR_TYPE_A, unbound.RR_CLASS_IN) while (status == 0) and (not my_data['done_flag']): status = ctx.process() time.sleep(0.1) if (status != 0): print "Resolve error:", unbound.ub_strerror(status) The :meth:`unbound.ub_ctx.resolve_async` method is able to pass on any Python object. In this example, we used a dictionary object ``my_data``. unbound-1.13.1/libunbound/python/doc/examples/example4.rst0000644000175000017500000000161014010434640023213 0ustar wouterwouter.. _example_examine: DNSSEC validator ================ This example program performs DNSSEC validation of a DNS lookup. Source code ----------- :: #!/usr/bin/python import os from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN ctx = ub_ctx() ctx.resolvconf("/etc/resolv.conf") if (os.path.isfile("keys")): ctx.add_ta_file("keys") #read public keys for DNSSEC verification status, result = ctx.resolve("www.nic.cz", RR_TYPE_A, RR_CLASS_IN) if status == 0 and result.havedata: print "Result:", result.data.address_list if result.secure: print "Result is secure" elif result.bogus: print "Result is bogus" else: print "Result is insecure" More detailed informations can be seen in libUnbound DNSSEC tutorial `here`_. .. _here: http://www.unbound.net/documentation/libunbound-tutorial-6.html unbound-1.13.1/libunbound/python/doc/examples/example5.rst0000644000175000017500000000175214010434640023223 0ustar wouterwouter.. _example_resolver_only: Resolver only ============= This example program shows how to perform DNS resolution only. Unbound contains two basic modules: resolver and validator. In case, the validator is not necessary, the validator module can be turned off using "module-config" option. This option contains a list of module names separated by the space char. This list determined which modules should be employed and in what order. Source code ----------- :: #!/usr/bin/python import os from unbound import ub_ctx,RR_TYPE_A,RR_CLASS_IN ctx = ub_ctx() ctx.set_option("module-config:","iterator") ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("www.google.com", RR_TYPE_A, RR_CLASS_IN) if status == 0 and result.havedata: print "Result:", result.data.address_list .. note:: The :meth:`unbound.ub_ctx.set_option` method must be used before the first resolution (i.e. before :meth:`unbound.ub_ctx.resolve` or :meth:`unbound.ub_ctx.resolve_async` call). unbound-1.13.1/libunbound/python/doc/examples/example7-2.py0000644000175000017500000000072314010434640023201 0ustar wouterwouter#!/usr/bin/python # vim:fileencoding=utf-8 # # IDN (Internationalized Domain Name) lookup support (lookup for MX) # import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve(u"háÄkyÄárky.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print "Result:" print " raw data:", result.data for k in result.data.mx_list_idn: print " priority:%d address:%s" % k unbound-1.13.1/libunbound/python/doc/examples/example7-1.py0000644000175000017500000000067414010434640023205 0ustar wouterwouter#!/usr/bin/python # vim:fileencoding=utf-8 # # IDN (Internationalized Domain Name) lookup support # import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve(u"www.háÄkyÄárky.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print "Result:" print " raw data:", result.data for k in result.data.address_list: print " address:%s" % k unbound-1.13.1/libunbound/python/doc/examples/example7.rst0000644000175000017500000000151414010434640023221 0ustar wouterwouter.. _example_idna: Internationalized domain name support ===================================== Unlike the libUnbound, pyUnbound is able to handle IDN queries. Automatic IDN DNAME conversion ------------------------------- If we use unicode string in :meth:`unbound.ub_ctx.resolve` method, the IDN DNAME conversion (if it is necessary) is performed on background. Source code ........... .. literalinclude:: example7-1.py :language: python IDN converted attributes ------------------------ The :class:`unbound.ub_data` class contains attributes suffix which converts the dname to UTF string. These attributes have the ``_idn`` suffix. Apart from this approach, two conversion functions exist (:func:`unbound.idn2dname` and :func:`unbound.dname2idn`). Source code ........... .. literalinclude:: example7-2.py :language: python unbound-1.13.1/libunbound/python/doc/examples/example6.rst0000644000175000017500000000035614010434640023223 0ustar wouterwouter.. _example_localzone: Local zone manipulation ======================= This example program shows how to define local zone containing custom DNS records. Source code ----------- .. literalinclude:: example6-1.py :language: python unbound-1.13.1/libunbound/python/doc/examples/example8-1.py0000644000175000017500000000162614010434640023204 0ustar wouterwouter#!/usr/bin/python # vim:fileencoding=utf-8 # # Lookup for MX and NS records # import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_MX, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print "Result:" print " raw data:", result.data for k in result.data.mx_list: print " priority:%d address:%s" % k status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print "Result:" print " raw data:", result.data for k in result.data.address_list: print " address:%s" % k status, result = ctx.resolve("nic.cz", unbound.RR_TYPE_NS, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print "Result:" print " raw data:", result.data for k in result.data.domain_list: print " host: %s" % k unbound-1.13.1/libunbound/python/doc/examples/example8.rst0000644000175000017500000000171714010434640023227 0ustar wouterwouter.. _example_mxlookup: Lookup for MX and NS records ============================ The pyUnbound extension provides functions which are able to encode RAW RDATA produces by unbound resolver (see :class:`unbound.ub_data`). Source code ----------- .. literalinclude:: example8-1.py :language: python Output ------ The previous example produces the following output:: Result: raw data: 00 0F 05 6D 61 69 6C 34 03 6E 69 63 02 63 7A 00;00 14 02 6D 78 05 63 7A 6E 69 63 03 6F 72 67 00;00 0A 04 6D 61 69 6C 03 6E 69 63 02 63 7A 00 priority:15 address: mail4.nic.cz. priority:20 address: mx.cznic.org. priority:10 address: mail.nic.cz. Result: raw data: D9 1F CD 32 address: 217.31.205.50 Result: raw data: 01 61 02 6E 73 03 6E 69 63 02 63 7A 00;01 65 02 6E 73 03 6E 69 63 02 63 7A 00;01 63 02 6E 73 03 6E 69 63 02 63 7A 00 host: a.ns.nic.cz. host: e.ns.nic.cz. host: c.ns.nic.cz. unbound-1.13.1/libunbound/python/doc/examples/index.rst0000644000175000017500000000063414010434640022610 0ustar wouterwouterExamples ======== Here you can find several examples which utilizes the unbound library in Python environment. Unbound is a caching validator and resolver and can be linked into an application, as a library where can answer DNS queries for the application. This set of examples shows how to use the functions from Python environment. Tutorials --------- .. toctree:: :maxdepth: 1 :glob: example* unbound-1.13.1/libunbound/python/doc/examples/example1b.rst0000644000175000017500000000223214010434640023353 0ustar wouterwouter.. _example_reverse_lookup: Reverse DNS lookup ================== Reverse DNS lookup involves determining the hostname associated with a given IP address. This example shows how reverse lookup can be done using unbound module. For the reverse DNS records, the special domain in-addr.arpa is reserved. For example, a host name for the IP address ``74.125.43.147`` can be obtained by issuing a DNS query for the PTR record for address ``147.43.125.74.in-addr.arpa.`` Source code ----------- :: #!/usr/bin/python import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve(unbound.reverse("74.125.43.147") + ".in-addr.arpa.", unbound.RR_TYPE_PTR, unbound.RR_CLASS_IN) if status == 0 and result.havedata: print "Result.data:", result.data.domain_list elif status != 0: print "Resolve error:", unbound.ub_strerror(status) In order to simplify the python code, unbound module contains the :meth:`unbound.reverse` function which reverses the hostname components. This function is defined as follows:: def reverse(domain): return '.'.join([a for a in domain.split(".")][::-1]) unbound-1.13.1/libunbound/python/doc/examples/example6-1.py0000644000175000017500000000146214010434640023200 0ustar wouterwouter#!/usr/bin/python from unbound import ub_ctx,ub_strerror,RR_TYPE_A,RR_CLASS_IN ctx = ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("test.record.xxx", RR_TYPE_A, RR_CLASS_IN) if status == 0 and result.havedata: print "Result:", result.data.address_list else: print "No record found" #define new local zone status = ctx.zone_add("xxx.","static") if (status != 0): print "Error zone_add:",status, ub_strerror(status) #add RR to the zone status = ctx.data_add("test.record.xxx. IN A 1.2.3.4") if (status != 0): print "Error data_add:",status, ub_strerror(status) #lookup for an A record status, result = ctx.resolve("test.record.xxx", RR_TYPE_A, RR_CLASS_IN) if status == 0 and result.havedata: print "Result:", result.data.as_address_list() else: print "No record found" unbound-1.13.1/libunbound/python/doc/examples/example2.rst0000644000175000017500000000214714010434640023217 0ustar wouterwouter.. _example_setup_ctx: Lookup from threads =================== This example shows how to use unbound module from a threaded program. In this example, three lookup threads are created which work in background. Each thread resolves different DNS record. Source code ----------- :: #!/usr/bin/python from unbound import ub_ctx, RR_TYPE_A, RR_CLASS_IN from threading import Thread ctx = ub_ctx() ctx.resolvconf("/etc/resolv.conf") class LookupThread(Thread): def __init__(self,ctx, name): Thread.__init__(self) self.ctx = ctx self.name = name def run(self): print "Thread lookup started:",self.name status, result = self.ctx.resolve(self.name, RR_TYPE_A, RR_CLASS_IN) if status == 0 and result.havedata: print " Result:",self.name,":", result.data.address_list threads = [] for name in ["www.fit.vutbr.cz","www.vutbr.cz","www.google.com"]: thread = LookupThread(ctx, name) thread.start() threads.append(thread) for thread in threads: thread.join() unbound-1.13.1/libunbound/python/doc/examples/example1a.rst0000644000175000017500000000162114010434640023353 0ustar wouterwouter.. _example_resolve_name: Resolve a name ============== This basic example shows how to create a context and resolve a host address (DNS record of A type). Source code ----------- :: #!/usr/bin/python import unbound ctx = unbound.ub_ctx() ctx.resolvconf("/etc/resolv.conf") status, result = ctx.resolve("www.google.com") if status == 0 and result.havedata: print "Result.data:", result.data.address_list elif status != 0: print "Resolve error:", unbound.ub_strerror(status) In contrast with the C API, the source code is more compact while the performance of C implementation is preserved. The main advantage is that you need not take care about the deallocation and allocation of context and result structures; pyUnbound module does it automatically for you. If only domain name is given, the :meth:`unbound.ub_ctx.resolve` looks for A records in IN class. unbound-1.13.1/libunbound/python/doc/install.rst0000644000175000017500000000160214010434640021325 0ustar wouterwouterInstallation ============ Prerequisites ------------- Python 2.4 or higher, SWIG 1.3 or higher, GNU make Compiling --------- After downloading, you can compile the pyUnbound library by doing:: > tar -xzf unbound-x.x.x-py.tar.gz > cd unbound-x.x.x > ./configure --with-pyunbound > make You may want to enable ``--with-pythonmodule`` as well if you want to use python as a module in the resolver. You need ``GNU make`` to compile sources; ``SWIG`` and ``Python devel`` libraries to compile extension module. Testing ------- If the compilation is successful, you can test the python LDNS extension module by:: > cd contrib/python > make testenv > ./dns-lookup.py You may want to ``make install`` in the main directory since ``make testenv`` is for debugging. In contrib/examples you can find simple applications written in Python using the Unbound extension. unbound-1.13.1/libunbound/python/doc/_static/0000755000175000017500000000000014010434640020554 5ustar wouterwouterunbound-1.13.1/libunbound/python/doc/_static/readme0000644000175000017500000000005614010434640021735 0ustar wouterwouterthis directory exists to pacify sphinx-build. unbound-1.13.1/libunbound/python/doc/index.rst0000644000175000017500000000077114010434640020774 0ustar wouterwouterPyUnbound documentation ======================================= This project contains an Unbound wrapper providing the thinnest layer over the library possible. Everything you can do from the libUnbound C API, you can do from Python, even more. Contents ---------- .. toctree:: :maxdepth: 2 intro.rst install.rst examples/index.rst modules/unbound Module Documentation ----------------------- * Module :mod:`unbound` Indices and tables ------------------- * :ref:`genindex` * :ref:`search` unbound-1.13.1/libunbound/python/doc/intro.rst0000644000175000017500000000422414010434640021015 0ustar wouterwouterIntroduction ============ Unbound ------- `Unbound`_ is an implementation of a DNS resolver, that performs caching and DNSSEC validation. Together with unbound, the libunbound library is provided. This library can be used to convert hostnames to ip addresses, and back, as well as obtain other information. Since the resolver allows to specify the class and type of a query (A record, NS, MX, ...), this library offers powerful resolving tool. The library also performs public-key validation of results with DNSSEC. .. _Unbound: http://www.unbound.net/documentation pyUnbound --------- The pyUnbound is an extension module for Python which provides an object-oriented interface to libunbound. It is the first Python module which offers thread-safe caching resolver. The interface was designed with the emphasis on the simplicity of use. There are two main classes :class:`unbound.ub_ctx` (a validation and resolution context) and :class:`unbound.ub_result` which contains the validation and resolution results. The objects are thread-safe, and a context can be used in non-threaded as well as threaded environment. Resolution can be performed blocking and non-blocking (i.e. asynchronous). The asynchronous method returns from the call immediately, so that processing can go on, while the results become available later. Features -------- * Customizable caching validation resolver for synchronous and asynchronous lookups * Easy to use object interface * Easy to integrate extension module * Designed for thread environment (i.e. thread-safe) * Allows define and customize of local zone and its RR's during the operation (i.e. without restart) * Includes encoding functions to simplify the results retrieval * Internationalized domain name (`IDN`_) support .. _IDN: http://en.wikipedia.org/wiki/Internationalized_domain_name Application area ---------------- * DNS-based applications performing DNS lookups; the caching resolver can reduce overhead * Applications where the validation of DNS records is required * Great solution for customizable and dynamic DNS-based white/blacklists (spam rejection, connection rejection, ...) using the dynamic local zone manipulation unbound-1.13.1/libunbound/python/doc/modules/0000755000175000017500000000000014010434640020576 5ustar wouterwouterunbound-1.13.1/libunbound/python/doc/modules/unbound.rst0000644000175000017500000000766414010434640023017 0ustar wouterwouterUnbound module documentation ================================ .. automodule:: unbound Class ub_ctx -------------- .. autoclass:: ub_ctx :members: :undoc-members: .. automethod:: __init__ Class ub_result ---------------------- .. autoclass:: ub_result :members: .. attribute:: qname The original question, name text string. .. attribute:: qtype The class asked for. .. attribute:: canonname Canonical name for the result (the final cname). May be empty if no canonical name exists. .. attribute:: answer_packet The DNS answer packet. Network formatted. Can contain DNSSEC types. .. attribute:: havedata If there is any data, this property is true. If false, there was no data (nxdomain may be true, rcode can be set). .. attribute:: secure True, if the result is validated securely. False, if validation failed or domain queried has no security info. It is possible to get a result with no data (havedata is false), and secure is true. This means that the non-existence of the data was cryptographically proven (with signatures). .. attribute:: bogus If the result was not secure (secure==0), and this result is due to a security failure, bogus is true. This means the data has been actively tampered with, signatures failed, expected signatures were not present, timestamps on signatures were out of date and so on. If secure==0 and bogus==0, this can happen if the data is not secure because security is disabled for that domain name. This means the data is from a domain where data is not signed. .. attribute:: nxdomain If there was no data, and the domain did not exist, this is true. If it is false, and there was no data, then the domain name is purported to exist, but the requested data type is not available. .. attribute:: rcode DNS RCODE for the result. May contain additional error code if there was no data due to an error. 0 (RCODE_NOERROR) if okay. See predefined `RCODE_` constants. RCODE can be represented in display representation form (string) using :attr:`rcode_str` attribute. Class ub_data ---------------------- .. autoclass:: ub_data :members: Functions ---------------------- .. autofunction:: reverse .. autofunction:: idn2dname .. autofunction:: dname2idn Predefined constants ----------------------- **RCODE** * RCODE_FORMERR = 1 * RCODE_NOERROR = 0 * RCODE_NOTAUTH = 9 * RCODE_NOTIMPL = 4 * RCODE_NOTZONE = 10 * RCODE_NXDOMAIN = 3 * RCODE_NXRRSET = 8 * RCODE_REFUSED = 5 * RCODE_SERVFAIL = 2 * RCODE_YXDOMAIN = 6 * RCODE_YXRRSET = 7 **RR_CLASS** * RR_CLASS_ANY = 255 * RR_CLASS_CH = 3 * RR_CLASS_HS = 4 * RR_CLASS_IN = 1 * RR_CLASS_NONE = 254 **RR_TYPE** * RR_TYPE_A = 1 * RR_TYPE_A6 = 38 * RR_TYPE_AAAA = 28 * RR_TYPE_AFSDB = 18 * RR_TYPE_ANY = 255 * RR_TYPE_APL = 42 * RR_TYPE_ATMA = 34 * RR_TYPE_AXFR = 252 * RR_TYPE_CERT = 37 * RR_TYPE_CNAME = 5 * RR_TYPE_DHCID = 49 * RR_TYPE_DLV = 32769 * RR_TYPE_DNAME = 39 * RR_TYPE_DNSKEY = 48 * RR_TYPE_DS = 43 * RR_TYPE_EID = 31 * RR_TYPE_GID = 102 * RR_TYPE_GPOS = 27 * RR_TYPE_HINFO = 13 * RR_TYPE_IPSECKEY = 45 * RR_TYPE_ISDN = 20 * RR_TYPE_IXFR = 251 * RR_TYPE_KEY = 25 * RR_TYPE_KX = 36 * RR_TYPE_LOC = 29 * RR_TYPE_MAILA = 254 * RR_TYPE_MAILB = 253 * RR_TYPE_MB = 7 * RR_TYPE_MD = 3 * RR_TYPE_MF = 4 * RR_TYPE_MG = 8 * RR_TYPE_MINFO = 14 * RR_TYPE_MR = 9 * RR_TYPE_MX = 15 * RR_TYPE_NAPTR = 35 * RR_TYPE_NIMLOC = 32 * RR_TYPE_NS = 2 * RR_TYPE_NSAP = 22 * RR_TYPE_NSAP_PTR = 23 * RR_TYPE_NSEC = 47 * RR_TYPE_NSEC3 = 50 * RR_TYPE_NSEC3PARAMS = 51 * RR_TYPE_NULL = 10 * RR_TYPE_NXT = 30 * RR_TYPE_OPT = 41 * RR_TYPE_PTR = 12 * RR_TYPE_PX = 26 * RR_TYPE_RP = 17 * RR_TYPE_RRSIG = 46 * RR_TYPE_RT = 21 * RR_TYPE_SIG = 24 * RR_TYPE_SINK = 40 * RR_TYPE_SOA = 6 * RR_TYPE_SRV = 33 * RR_TYPE_SSHFP = 44 * RR_TYPE_TSIG = 250 * RR_TYPE_TXT = 16 * RR_TYPE_UID = 101 * RR_TYPE_UINFO = 100 * RR_TYPE_UNSPEC = 103 * RR_TYPE_WKS = 11 * RR_TYPE_X25 = 19 unbound-1.13.1/libunbound/python/doc/conf.py0000644000175000017500000001352314010434640020431 0ustar wouterwouter# -*- coding: utf-8 -*- # # Unbound documentation build configuration file # # This file is execfile()d with the current directory set to its containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. import sys, os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'../'))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'../../../'))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'../../../.libs/'))) #print sys.path # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General substitutions. project = 'pyUnbound' copyright = '2009, Zdenek Vasicek, Marek Vavrusa' # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. # # The short X.Y version. version = '1.0' # The full version, including alpha/beta/rc tags. release = '1.0.0' # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # List of directories, relative to source directories, that shouldn't be searched # for source files. #exclude_dirs = [] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # Options for HTML output # ----------------------- # The theme that the html output should use. html_theme = "classic" # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. #html_style = 'default.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (within the static path) to place at the top of # the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. html_use_modindex = False # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. html_copy_source = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Unbounddoc' # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class [howto/manual]). latex_documents = [ ('index', 'Unbound.tex', 'Unbound Documentation', 'Zdenek Vasicek, Marek Vavrusa', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True unbound-1.13.1/libunbound/python/Makefile0000644000175000017500000000607514010434640020031 0ustar wouterwouter# # Makefile: compilation of pyUnbound and documentation, testing # # Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) # Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) # # This software is open source. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # * Neither the name of the organization nor the names of its # contributors may be used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. help: @echo "Please use \`make ' where is one of" @echo " testenv to make test environment and run bash " @echo " useful in case you don't want to install unbound but want to test examples" @echo " doc to make documentation" @echo " clean clean all" .PHONY: testenv clean doc swig #_unbound.so: ../../Makefile #$(MAKE) -C ../.. #../../.libs/libunbound.so.0: ../../Makefile #$(MAKE) -C ../.. clean: rm -rdf examples/unbound rm -f _unbound.so libunbound_wrap.o $(MAKE) -C ../.. clean testenv: ../../.libs/libunbound.so.2 ../../.libs/_unbound.so rm -rdf examples/unbound cd examples && mkdir unbound && ln -s ../../unbound.py unbound/__init__.py && ln -s ../../_unbound.so unbound/_unbound.so && ln -s ../../../../.libs/libunbound.so.2 unbound/libunbound.so.2 && ls -la cd examples && if test -f ../../../.libs/_unbound.so; then cp ../../../.libs/_unbound.so . ; fi @echo "Run a script by typing ./script_name.py" cd examples && LD_LIBRARY_PATH=unbound bash rm -rdf examples/unbound examples/_unbound.so doc: ../../.libs/libunbound.so.0 _unbound.so $(MAKE) -C docs html #for development only swig: libunbound.i swig -python -o libunbound_wrap.c -I../.. libunbound.i gcc -c libunbound_wrap.c -O9 -fPIC -I../.. -I/usr/include/python2.5 -I. -o libunbound_wrap.o gcc -shared libunbound_wrap.o -L../../.libs -lunbound -o _unbound.so unbound-1.13.1/libunbound/python/libunbound.i0000644000175000017500000010476314010434640020707 0ustar wouterwouter/* * libunbound.i: pyUnbound module (libunbound wrapper for Python) * * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ %begin %{ /* store state of warning output, restored at later pop */ #pragma GCC diagnostic push /* ignore gcc8 METH_NOARGS function cast warnings for swig function pointers */ #pragma GCC diagnostic ignored "-Wcast-function-type" %} %module unbound %{ /* restore state of warning output, remove the functioncast ignore */ #pragma GCC diagnostic pop #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #include "libunbound/unbound.h" %} %pythoncode %{ import encodings.idna try: import builtins except ImportError: import __builtin__ as builtins # Ensure compatibility with older python versions if 'bytes' not in vars(): bytes = str def ord(s): if isinstance(s, int): return s return builtins.ord(s) %} //%include "doc.i" #if PY_MAJOR_VERSION >= 3 %include "file_py3.i" // python 3 FILE * #else %include "file.i" #endif %feature("docstring") strerror "Convert error value to a human readable string." // ================================================================================ // ub_resolve - perform resolution and validation // ================================================================================ %typemap(in,numinputs=0,noblock=1) (struct ub_result** result) { struct ub_result* newubr; $1 = &newubr; } /* result generation */ %typemap(argout,noblock=1) (struct ub_result** result) { if(1) { /* new code block for variable on stack */ PyObject* tuple; tuple = PyTuple_New(2); PyTuple_SetItem(tuple, 0, $result); if (result == 0) { PyTuple_SetItem(tuple, 1, SWIG_NewPointerObj(SWIG_as_voidptr(newubr), SWIGTYPE_p_ub_result, SWIG_POINTER_OWN | 0 )); } else { PyTuple_SetItem(tuple, 1, Py_None); } $result = tuple; } } // ================================================================================ // ub_ctx - validation context // ================================================================================ %nodefaultctor ub_ctx; //no default constructor & destructor %nodefaultdtor ub_ctx; %newobject ub_ctx_create; %delobject ub_ctx_delete; %rename(_ub_ctx_delete) ub_ctx_delete; %newobject ub_resolve; %inline %{ void ub_ctx_free_dbg (struct ub_ctx* c) { printf("******** UB_CTX free 0x%p ************\n", c); ub_ctx_delete(c); } //RR types enum enum_rr_type { /** a host address */ RR_TYPE_A = 1, /** an authoritative name server */ RR_TYPE_NS = 2, /** a mail destination (Obsolete - use MX) */ RR_TYPE_MD = 3, /** a mail forwarder (Obsolete - use MX) */ RR_TYPE_MF = 4, /** the canonical name for an alias */ RR_TYPE_CNAME = 5, /** marks the start of a zone of authority */ RR_TYPE_SOA = 6, /** a mailbox domain name (EXPERIMENTAL) */ RR_TYPE_MB = 7, /** a mail group member (EXPERIMENTAL) */ RR_TYPE_MG = 8, /** a mail rename domain name (EXPERIMENTAL) */ RR_TYPE_MR = 9, /** a null RR (EXPERIMENTAL) */ RR_TYPE_NULL = 10, /** a well known service description */ RR_TYPE_WKS = 11, /** a domain name pointer */ RR_TYPE_PTR = 12, /** host information */ RR_TYPE_HINFO = 13, /** mailbox or mail list information */ RR_TYPE_MINFO = 14, /** mail exchange */ RR_TYPE_MX = 15, /** text strings */ RR_TYPE_TXT = 16, /** RFC1183 */ RR_TYPE_RP = 17, /** RFC1183 */ RR_TYPE_AFSDB = 18, /** RFC1183 */ RR_TYPE_X25 = 19, /** RFC1183 */ RR_TYPE_ISDN = 20, /** RFC1183 */ RR_TYPE_RT = 21, /** RFC1706 */ RR_TYPE_NSAP = 22, /** RFC1348 */ RR_TYPE_NSAP_PTR = 23, /** 2535typecode */ RR_TYPE_SIG = 24, /** 2535typecode */ RR_TYPE_KEY = 25, /** RFC2163 */ RR_TYPE_PX = 26, /** RFC1712 */ RR_TYPE_GPOS = 27, /** ipv6 address */ RR_TYPE_AAAA = 28, /** LOC record RFC1876 */ RR_TYPE_LOC = 29, /** 2535typecode */ RR_TYPE_NXT = 30, /** draft-ietf-nimrod-dns-01.txt */ RR_TYPE_EID = 31, /** draft-ietf-nimrod-dns-01.txt */ RR_TYPE_NIMLOC = 32, /** SRV record RFC2782 */ RR_TYPE_SRV = 33, /** http://www.jhsoft.com/rfc/af-saa-0069.000.rtf */ RR_TYPE_ATMA = 34, /** RFC2915 */ RR_TYPE_NAPTR = 35, /** RFC2230 */ RR_TYPE_KX = 36, /** RFC2538 */ RR_TYPE_CERT = 37, /** RFC2874 */ RR_TYPE_A6 = 38, /** RFC2672 */ RR_TYPE_DNAME = 39, /** dnsind-kitchen-sink-02.txt */ RR_TYPE_SINK = 40, /** Pseudo OPT record... */ RR_TYPE_OPT = 41, /** RFC3123 */ RR_TYPE_APL = 42, /** draft-ietf-dnsext-delegation */ RR_TYPE_DS = 43, /** SSH Key Fingerprint */ RR_TYPE_SSHFP = 44, /** draft-richardson-ipseckey-rr-11.txt */ RR_TYPE_IPSECKEY = 45, /** draft-ietf-dnsext-dnssec-25 */ RR_TYPE_RRSIG = 46, RR_TYPE_NSEC = 47, RR_TYPE_DNSKEY = 48, RR_TYPE_DHCID = 49, RR_TYPE_NSEC3 = 50, RR_TYPE_NSEC3PARAMS = 51, RR_TYPE_UINFO = 100, RR_TYPE_UID = 101, RR_TYPE_GID = 102, RR_TYPE_UNSPEC = 103, RR_TYPE_TSIG = 250, RR_TYPE_IXFR = 251, RR_TYPE_AXFR = 252, /** A request for mailbox-related records (MB, MG or MR) */ RR_TYPE_MAILB = 253, /** A request for mail agent RRs (Obsolete - see MX) */ RR_TYPE_MAILA = 254, /** any type (wildcard) */ RR_TYPE_ANY = 255, RR_TYPE_CAA = 257, /* RFC 4431, 5074, DNSSEC Lookaside Validation */ RR_TYPE_DLV = 32769, }; // RR classes enum enum_rr_class { /** the Internet */ RR_CLASS_IN = 1, /** Chaos class */ RR_CLASS_CH = 3, /** Hesiod (Dyer 87) */ RR_CLASS_HS = 4, /** None class, dynamic update */ RR_CLASS_NONE = 254, /** Any class */ RR_CLASS_ANY = 255, }; %} %feature("docstring") ub_ctx "Unbound resolving and validation context. The validation context is created to hold the resolver status, validation keys and a small cache (containing messages, rrsets, roundtrip times, trusted keys, lameness information). **Usage** >>> import unbound >>> ctx = unbound.ub_ctx() >>> ctx.resolvconf(\"/etc/resolv.conf\") >>> status, result = ctx.resolve(\"www.google.com\", unbound.RR_TYPE_A, unbound.RR_CLASS_IN) >>> if status==0 and result.havedata: >>> print \"Result:\",result.data.address_list Result: ['74.125.43.147', '74.125.43.99', '74.125.43.103', '74.125.43.104'] " %extend ub_ctx { %pythoncode %{ def __init__(self): """Creates a resolving and validation context. An exception is invoked if the process of creation an ub_ctx instance fails. """ self.this = _unbound.ub_ctx_create() if not self.this: raise Exception("Fatal error: unbound context initialization failed") #__swig_destroy__ = _unbound.ub_ctx_free_dbg __swig_destroy__ = _unbound._ub_ctx_delete #UB_CTX_METHODS_# def add_ta(self,ta): """Add a trust anchor to the given context. The trust anchor is a string, on one line, that holds a valid DNSKEY or DS RR. :param ta: string, with zone-format RR on one line. [domainname] [TTL optional] [type] [class optional] [rdata contents] :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_add_ta(self,ta) #parameters: struct ub_ctx *,char *, #retvals: int def add_ta_file(self,fname): """Add trust anchors to the given context. Pass name of a file with DS and DNSKEY records (like from dig or drill). :param fname: filename of file with keyfile with trust anchors. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_add_ta_file(self,fname) #parameters: struct ub_ctx *,char *, #retvals: int def config(self,fname): """setup configuration for the given context. :param fname: unbound config file (not all settings applicable). This is a power-users interface that lets you specify all sorts of options. For some specific options, such as adding trust anchors, special routines exist. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_config(self,fname) #parameters: struct ub_ctx *,char *, #retvals: int def debuglevel(self,d): """Set debug verbosity for the context Output is directed to stderr. :param d: debug level, 0 is off, 1 is very minimal, 2 is detailed, and 3 is lots. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_debuglevel(self,d) #parameters: struct ub_ctx *,int, #retvals: int def debugout(self,out): """Set debug output (and error output) to the specified stream. Pass None to disable. Default is stderr. :param out: File stream to log to. :returns: (int) 0 if OK, else error. **Usage:** In order to log into file, use :: ctx = unbound.ub_ctx() fw = fopen("debug.log") ctx.debuglevel(3) ctx.debugout(fw) Another option is to print the debug informations to stderr output :: ctx = unbound.ub_ctx() ctx.debuglevel(10) ctx.debugout(sys.stderr) """ return _unbound.ub_ctx_debugout(self,out) #parameters: struct ub_ctx *,void *, #retvals: int def hosts(self,fname="/etc/hosts"): """Read list of hosts from the filename given. Usually "/etc/hosts". These addresses are not flagged as DNSSEC secure when queried for. :param fname: file name string. If None "/etc/hosts" is used. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_hosts(self,fname) #parameters: struct ub_ctx *,char *, #retvals: int def print_local_zones(self): """Print the local zones and their content (RR data) to the debug output. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_print_local_zones(self) #parameters: struct ub_ctx *, #retvals: int def resolvconf(self,fname="/etc/resolv.conf"): """Read list of nameservers to use from the filename given. Usually "/etc/resolv.conf". Uses those nameservers as caching proxies. If they do not support DNSSEC, validation may fail. Only nameservers are picked up, the searchdomain, ndots and other settings from resolv.conf(5) are ignored. :param fname: file name string. If None "/etc/resolv.conf" is used. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_resolvconf(self,fname) #parameters: struct ub_ctx *,char *, #retvals: int def set_async(self,dothread): """Set a context behaviour for asynchronous action. :param dothread: if True, enables threading and a call to :meth:`resolve_async` creates a thread to handle work in the background. If False, a process is forked to handle work in the background. Changes to this setting after :meth:`async` calls have been made have no effect (delete and re-create the context to change). :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_async(self,dothread) #parameters: struct ub_ctx *,int, #retvals: int def set_fwd(self,addr): """Set machine to forward DNS queries to, the caching resolver to use. IP4 or IP6 address. Forwards all DNS requests to that machine, which is expected to run a recursive resolver. If the is not DNSSEC-capable, validation may fail. Can be called several times, in that case the addresses are used as backup servers. To read the list of nameservers from /etc/resolv.conf (from DHCP or so), use the call :meth:`resolvconf`. :param addr: address, IP4 or IP6 in string format. If the addr is None, forwarding is disabled. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_set_fwd(self,addr) #parameters: struct ub_ctx *,char *, #retvals: int def set_option(self,opt,val): """Set an option for the context. Changes to the options after :meth:`resolve`, :meth:`resolve_async`, :meth:`zone_add`, :meth:`zone_remove`, :meth:`data_add` or :meth:`data_remove` have no effect (you have to delete and re-create the context). :param opt: option name from the unbound.conf config file format. (not all settings applicable). The name includes the trailing ':' for example set_option("logfile:", "mylog.txt"); This is a power-users interface that lets you specify all sorts of options. For some specific options, such as adding trust anchors, special routines exist. :param val: value of the option. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_set_option(self,opt,val) #parameters: struct ub_ctx *,char *,char *, #retvals: int def trustedkeys(self,fname): """Add trust anchors to the given context. Pass the name of a bind-style config file with trusted-keys{}. :param fname: filename of file with bind-style config entries with trust anchors. :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_trustedkeys(self,fname) #parameters: struct ub_ctx *,char *, #retvals: int #_UB_CTX_METHODS# def zone_print(self): """Print local zones using debugout""" _unbound.ub_ctx_print_local_zones(self) def zone_add(self,zonename,zonetype): """Add new local zone :param zonename: zone domain name (e.g. myzone.) :param zonetype: type of the zone ("static",...) :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_zone_add(self,zonename, zonetype) #parameters: struct ub_ctx *,char*, char* #retvals: int def zone_remove(self,zonename): """Remove local zone If exists, removes local zone with all the RRs. :param zonename: zone domain name :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_zone_remove(self,zonename) #parameters: struct ub_ctx *,char* #retvals: int def data_add(self,rrdata): """Add new local RR data :param rrdata: string, in zone-format on one line. [domainname] [TTL optional] [type] [class optional] [rdata contents] :returns: (int) 0 if OK, else error. **Usage** The local data ... :: >>> ctx = unbound.ub_ctx() >>> ctx.zone_add("mydomain.net.","static") 0 >>> status = ctx.data_add("test.mydomain.net. IN A 192.168.1.1") 0 >>> status, result = ctx.resolve("test.mydomain.net") >>> if status==0 and result.havedata: >>> print \"Result:\",result.data.address_list Result: ['192.168.1.1'] """ return _unbound.ub_ctx_data_add(self,rrdata) #parameters: struct ub_ctx *,char* #retvals: int def data_remove(self,rrdata): """Remove local RR data If exists, remove resource record from local zone :param rrdata: string, in zone-format on one line. [domainname] [TTL optional] [type] [class optional] [rdata contents] :returns: (int) 0 if OK, else error. """ return _unbound.ub_ctx_data_remove(self,rrdata) #parameters: struct ub_ctx *,char* #retvals: int #UB_METHODS_# def cancel(self,async_id): """Cancel an async query in progress. Its callback will not be called. :param async_id: which query to cancel. :returns: (int) 0 if OK, else error. """ return _unbound.ub_cancel(self,async_id) #parameters: struct ub_ctx *,int, #retvals: int def get_fd(self): """Get file descriptor. Wait for it to become readable, at this point answers are returned from the asynchronous validating resolver. Then call the ub_process to continue processing. This routine works immediately after context creation, the fd does not change. :returns: (int) -1 on error, or file descriptor to use select(2) with. """ return _unbound.ub_fd(self) #parameters: struct ub_ctx *, #retvals: int def poll(self): """Poll a context to see if it has any new results Do not poll in a loop, instead extract the fd below to poll for readiness, and then check, or wait using the wait routine. :returns: (int) 0 if nothing to read, or nonzero if a result is available. If nonzero, call ctx_process() to do callbacks. """ return _unbound.ub_poll(self) #parameters: struct ub_ctx *, #retvals: int def process(self): """Call this routine to continue processing results from the validating resolver (when the fd becomes readable). Will perform necessary callbacks. :returns: (int) 0 if OK, else error. """ return _unbound.ub_process(self) #parameters: struct ub_ctx *, #retvals: int def resolve(self,name,rrtype=RR_TYPE_A,rrclass=RR_CLASS_IN): """Perform resolution and validation of the target name. :param name: domain name in text format (a string or unicode string). IDN domain name have to be passed as a unicode string. :param rrtype: type of RR in host order (optional argument). Default value is RR_TYPE_A (A class). :param rrclass: class of RR in host order (optional argument). Default value is RR_CLASS_IN (for internet). :returns: * (int) 0 if OK, else error. * (:class:`ub_result`) the result data is returned in a newly allocated result structure. May be None on return, return value is set to an error in that case (out of memory). """ if isinstance(name, bytes): #probably IDN return _unbound.ub_resolve(self,name,rrtype,rrclass) else: return _unbound.ub_resolve(self,idn2dname(name),rrtype,rrclass) #parameters: struct ub_ctx *,char *,int,int, #retvals: int,struct ub_result ** def resolve_async(self,name,mydata,callback,rrtype=RR_TYPE_A,rrclass=RR_CLASS_IN): """Perform resolution and validation of the target name. Asynchronous, after a while, the callback will be called with your data and the result. If an error happens during processing, your callback will be called with error set to a nonzero value (and result==None). :param name: domain name in text format (a string or unicode string). IDN domain name have to be passed as a unicode string. :param mydata: this data is your own data (you can pass arbitrary python object or None) which are passed on to the callback function. :param callback: call-back function which is called on completion of the resolution. :param rrtype: type of RR in host order (optional argument). Default value is RR_TYPE_A (A class). :param rrclass: class of RR in host order (optional argument). Default value is RR_CLASS_IN (for internet). :returns: * (int) 0 if OK, else error. * (int) async_id, an identifier number is returned for the query as it is in progress. It can be used to cancel the query. **Call-back function:** The call-back function looks as the follows:: def call_back(mydata, status, result): pass **Parameters:** * `mydata` - mydata object * `status` - 0 when a result has been found * `result` - the result structure. The result may be None, in that case err is set. """ if isinstance(name, bytes): #probably IDN return _unbound._ub_resolve_async(self,name,rrtype,rrclass,mydata,callback) else: return _unbound._ub_resolve_async(self,idn2dname(name),rrtype,rrclass,mydata,callback) #parameters: struct ub_ctx *,char *,int,int,void *,ub_callback_t, #retvals: int, int def wait(self): """Wait for a context to finish with results. Calls after the wait for you. After the wait, there are no more outstanding asynchronous queries. :returns: (int) 0 if OK, else error. """ return _unbound.ub_wait(self) #parameters: struct ub_ctx *, #retvals: int #_UB_METHODS# %} } // ================================================================================ // ub_result - validation and resolution results // ================================================================================ %nodefaultctor ub_result; //no default constructor & destructor %nodefaultdtor ub_result; %delobject ub_resolve_free; %rename(_ub_resolve_free) ub_resolve_free; %inline %{ void ub_resolve_free_dbg (struct ub_result* r) { printf("******** UB_RESOLVE free 0x%p ************\n", r); ub_resolve_free(r); } %} %feature("docstring") ub_result "The validation and resolution results." //ub_result.rcode %inline %{ enum result_enum_rcode { RCODE_NOERROR = 0, RCODE_FORMERR = 1, RCODE_SERVFAIL = 2, RCODE_NXDOMAIN = 3, RCODE_NOTIMPL = 4, RCODE_REFUSED = 5, RCODE_YXDOMAIN = 6, RCODE_YXRRSET = 7, RCODE_NXRRSET = 8, RCODE_NOTAUTH = 9, RCODE_NOTZONE = 10 }; %} %pythoncode %{ class ub_data: """Class which makes the resolution results accessible""" def __init__(self, data): """Creates ub_data class :param data: a list of the result data in RAW format """ if data == None: raise Exception("ub_data init: No data") self.data = data def __str__(self): """Represents data as string""" return ';'.join([' '.join(map(lambda x:"%02X" % ord(x),a)) for a in self.data]) @staticmethod def dname2str(s, ofs=0, maxlen=0): """Parses DNAME and produces a list of labels :param ofs: where the conversion should start to parse data :param maxlen: maximum length (0 means parse to the end) :returns: list of labels (string) """ if not s: return [] res = [] slen = len(s) if maxlen > 0: slen = min(slen, maxlen) idx = ofs while (idx < slen): complen = ord(s[idx]) # In python 3.x `str()` converts the string to unicode which is the expected text string type res.append(str(s[idx+1:idx+1+complen].decode())) idx += complen + 1 return res def as_raw_data(self): """Returns a list of RAW strings""" return self.data raw = property(as_raw_data, doc="Returns RAW data (a list of binary encoded strings). See :meth:`as_raw_data`") def as_mx_list(self): """Represents data as a list of MX records (query for RR_TYPE_MX) :returns: list of tuples (priority, dname) """ return [(256*ord(rdf[0])+ord(rdf[1]),'.'.join([a for a in self.dname2str(rdf,2)])) for rdf in self.data] mx_list = property(as_mx_list, doc="Returns a list of tuples containing priority and domain names. See :meth:`as_mx_list`") def as_idn_mx_list(self): """Represents data as a list of MX records (query for RR_TYPE_MX) :returns: list of tuples (priority, unicode dname) """ return [(256*ord(rdf[0])+ord(rdf[1]),'.'.join([encodings.idna.ToUnicode(a) for a in self.dname2str(rdf,2)])) for rdf in self.data] mx_list_idn = property(as_idn_mx_list, doc="Returns a list of tuples containing priority and IDN domain names. See :meth:`as_idn_mx_list`") def as_address_list(self): """Represents data as a list of IP addresses (query for RR_TYPE_PTR) :returns: list of strings """ return ['.'.join(map(lambda x:str(ord(x)),a)) for a in self.data] address_list = property(as_address_list, doc="Returns a list of IP addresses. See :meth:`as_address_list`") def as_domain_list(self): """Represents data as a list of domain names (query for RR_TYPE_A) :returns: list of strings """ return map(lambda x:'.'.join(self.dname2str(x)), self.data) domain_list = property(as_domain_list, doc="Returns a list of domain names. See :meth:`as_domain_list`") def as_idn_domain_list(self): """Represents data as a list of unicode domain names (query for RR_TYPE_A) :returns: list of strings """ return map(lambda x: '.'.join([encodings.idna.ToUnicode(a) for a in self.dname2str(x)]), self.data) domain_list_idn = property(as_idn_domain_list, doc="Returns a list of IDN domain names. See :meth:`as_idn_domain_list`") %} %extend ub_result { %rename(_data) data; PyObject* _ub_result_data(struct ub_result* result) { PyObject *list; int i,cnt; (void)self; if ((result == 0) || (!result->havedata) || (result->data == 0)) return Py_None; for (cnt=0,i=0;;i++,cnt++) if (result->data[i] == 0) break; list = PyList_New(cnt); for (i=0;idata[i],result->len[i])); return list; } PyObject* _packet() { return PyBytes_FromStringAndSize($self->answer_packet, $self->answer_len); } %pythoncode %{ def __init__(self): raise Exception("This class can't be created directly.") #__swig_destroy__ = _unbound.ub_resolve_free_dbg __swig_destroy__ = _unbound._ub_resolve_free #havedata = property(_unbound.ub_result_havedata_get, _unbound.ub_result_havedata_set, "Havedata property") rcode2str = {RCODE_NOERROR:'no error', RCODE_FORMERR:'form error', RCODE_SERVFAIL:'serv fail', RCODE_NXDOMAIN:'nx domain', RCODE_NOTIMPL:'not implemented', RCODE_REFUSED:'refused', RCODE_YXDOMAIN:'yxdomain', RCODE_YXRRSET:'yxrrset', RCODE_NXRRSET:'nxrrset', RCODE_NOTAUTH:'not auth', RCODE_NOTZONE:'not zone'} def _get_rcode_str(self): """Returns rcode in display representation form :returns: string """ return self.rcode2str[self.rcode] rcode_str = property(_get_rcode_str) def _get_raw_data(self): """Result data, a list of network order DNS rdata items. Data are represented as a list of strings. To decode RAW data to the list of IP addresses use :attr:`data` attribute which returns an :class:`ub_data` instance containing conversion function. """ return self._ub_result_data(self) rawdata = property(_get_raw_data, doc="Returns raw data, a list of rdata items. To decode RAW data use the :attr:`data` attribute which returns an instance of :class:`ub_data` containing the conversion functions.") def _get_data(self): if not self.havedata: return None return ub_data(self._ub_result_data(self)) packet = property(_packet) data = property(_get_data, doc="Returns :class:`ub_data` instance containing various decoding functions or None") %} } %exception ub_resolve %{ //printf("resolve_start(%lX)\n",(long unsigned int)arg1); Py_BEGIN_ALLOW_THREADS $function Py_END_ALLOW_THREADS //printf("resolve_stop()\n"); %} %include "libunbound/unbound.h" %inline %{ //SWIG will see the ub_ctx as a class struct ub_ctx { }; %} //ub_ctx_debugout void* parameter correction int ub_ctx_debugout(struct ub_ctx* ctx, FILE* out); // ================================================================================ // ub_resolve_async - perform asynchronous resolution and validation // ================================================================================ %typemap(in,numinputs=0,noblock=1) (int* async_id) { int asyncid = -1; $1 = &asyncid; } %apply PyObject* {void* mydata} /* result generation */ %typemap(argout,noblock=1) (int* async_id) { if(1) { /* new code block for variable on stack */ PyObject* tuple; tuple = PyTuple_New(2); PyTuple_SetItem(tuple, 0, $result); PyTuple_SetItem(tuple, 1, SWIG_From_int(asyncid)); $result = tuple; } } // Grab a Python function object as a Python object. %typemap(in) (PyObject *pyfunc) { if (!PyCallable_Check($input)) { PyErr_SetString(PyExc_TypeError, "Need a callable object!"); return NULL; } $1 = $input; } // Python callback workaround int _ub_resolve_async(struct ub_ctx* ctx, char* name, int rrtype, int rrclass, void* mydata, PyObject *pyfunc, int* async_id); %{ struct cb_data { PyObject* data; PyObject* func; }; static void PythonCallBack(void* iddata, int status, struct ub_result* result) { PyObject *arglist; PyObject *fresult; struct cb_data* id; id = (struct cb_data*) iddata; arglist = Py_BuildValue("(OiO)",id->data,status, SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ub_result, 0 | 0 )); // Build argument list fresult = PyEval_CallObject(id->func,arglist); // Call Python Py_DECREF(id->func); Py_DECREF(id->data); free(id); ub_resolve_free(result); //free ub_result //ub_resolve_free_dbg(result); //free ub_result Py_DECREF(arglist); // Trash arglist Py_XDECREF(fresult); } int _ub_resolve_async(struct ub_ctx* ctx, char* name, int rrtype, int rrclass, PyObject* mydata, PyObject *pyfunc, int* async_id) { int r; struct cb_data* id; id = (struct cb_data*) malloc(sizeof(struct cb_data)); id->data = mydata; id->func = pyfunc; r = ub_resolve_async(ctx,name,rrtype,rrclass, (void *) id, PythonCallBack, async_id); Py_INCREF(mydata); Py_INCREF(pyfunc); return r; } %} %pythoncode %{ ub_resolve_async = _unbound._ub_resolve_async def reverse(domain): """Reverse domain name Usable for reverse lookups when the IP address should be reversed """ return '.'.join([a for a in domain.split(".")][::-1]) def idn2dname(idnname): """Converts domain name in IDN format to canonic domain name :param idnname: (unicode string) IDN name :returns: (string) domain name """ return '.'.join([encodings.idna.ToASCII(a) if a else '' for a in idnname.split('.')]) def dname2idn(name): """Converts canonic domain name in IDN format to unicode string :param name: (string) domain name :returns: (unicode string) domain name """ return '.'.join([encodings.idna.ToUnicode(a) for a in name.split('.')]) %} unbound-1.13.1/libunbound/python/file_py3.i0000644000175000017500000001165514010434640020255 0ustar wouterwouter/* * file_py3.i: Typemaps for FILE* for Python 3 * * Copyright (c) 2011, Karel Slany (karel.slany AT nic.cz) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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 #include %} %types(FILE *); //#define SWIG_FILE3_DEBUG /* converts basic file descriptor flags onto a string */ %fragment("fdfl_to_str", "header") { const char * fdfl_to_str(int fdfl) { static const char * const file_mode[] = {"w+", "w", "r"}; if (fdfl & O_RDWR) { return file_mode[0]; } else if (fdfl & O_WRONLY) { return file_mode[1]; } else { return file_mode[2]; } } } %fragment("is_obj_file", "header") { int is_obj_file(PyObject *obj) { int fd, fdfl; if (!PyLong_Check(obj) && /* is not an integer */ PyObject_HasAttrString(obj, "fileno") && /* has fileno method */ (PyObject_CallMethod(obj, "flush", NULL) != NULL) && /* flush() succeeded */ ((fd = PyObject_AsFileDescriptor(obj)) != -1) && /* got file descriptor */ ((fdfl = fcntl(fd, F_GETFL)) != -1) /* got descriptor flags */ ) { return 1; } else { return 0; } } } %fragment("obj_to_file","header", fragment="fdfl_to_str,is_obj_file") { FILE * obj_to_file(PyObject *obj) { int fd, fdfl; FILE *fp; if (is_obj_file(obj)) { fd = PyObject_AsFileDescriptor(obj); fdfl = fcntl(fd, F_GETFL); fp = fdopen(dup(fd), fdfl_to_str(fdfl)); /* the FILE* must be flushed and closed after being used */ #ifdef SWIG_FILE3_DEBUG fprintf(stderr, "opening fd %d (fl %d \"%s\") as FILE %p\n", fd, fdfl, fdfl_to_str(fdfl), (void *)fp); #endif return fp; } return NULL; } } /* returns -1 if error occurred */ /* caused magic SWIG Syntax errors when was commented out */ #if 0 %fragment("dispose_file", "header") { int dispose_file(FILE **fp) { #ifdef SWIG_FILE3_DEBUG fprintf(stderr, "flushing FILE %p\n", (void *)fp); #endif if (*fp == NULL) { return 0; } if ((fflush(*fp) == 0) && /* flush file */ (fclose(*fp) == 0)) { /* close file */ *fp = NULL; return 0; } return -1; } } #endif %typemap(arginit, noblock = 1) FILE* { $1 = NULL; } /* * added due to ub_ctx_debugout since since it is overloaded: * takes void* and FILE*. In reality only FILE* but the wrapper * and the function is declared in such way. */ %typemap(typecheck, noblock = 1, fragment = "is_obj_file", precedence = SWIG_TYPECHECK_POINTER) FILE* { $1 = is_obj_file($input); } %typemap(check, noblock = 1) FILE* { if ($1 == NULL) { /* The generated wrapper function raises TypeError on mismatching types. */ SWIG_exception_fail(SWIG_TypeError, "in method '" "$symname" "', argument " "$argnum"" of type '" "$type""'"); } } %typemap(in, noblock = 1, fragment = "obj_to_file") FILE* { $1 = obj_to_file($input); } /* * Commented out due the way how ub_ctx_debugout() uses the parameter. * This typemap would cause the FILE* to be closed after return from * the function. This caused Python interpreter to crash, since the * function just stores the FILE* internally in ctx and use it for * logging. So we'll leave the closing of the file on the OS. */ /*%typemap(freearg, noblock = 1, fragment = "dispose_file") FILE* { if (dispose_file(&$1) == -1) { SWIG_exception_fail(SWIG_IOError, "closing file in method '" "$symname" "', argument " "$argnum"" of type '" "$type""'"); } }*/ unbound-1.13.1/libunbound/python/LICENSE0000644000175000017500000000311314010434640017364 0ustar wouterwouterCopyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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. unbound-1.13.1/libunbound/context.h0000644000175000017500000002577314010434640016713 0ustar wouterwouter/* * libunbound/context.h - validating context for unbound internal use * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the validator context structure. */ #ifndef LIBUNBOUND_CONTEXT_H #define LIBUNBOUND_CONTEXT_H #include "util/locks.h" #include "util/alloc.h" #include "util/rbtree.h" #include "services/modstack.h" #include "libunbound/unbound.h" #include "libunbound/unbound-event.h" #include "util/data/packed_rrset.h" struct libworker; struct tube; struct sldns_buffer; struct ub_event_base; /** store that the logfile has a debug override */ extern int ctx_logfile_overridden; /** * The context structure * * Contains two pipes for async service * qq : write queries to the async service pid/tid. * rr : read results from the async service pid/tid. */ struct ub_ctx { /* --- pipes --- */ /** mutex on query write pipe */ lock_basic_type qqpipe_lock; /** the query write pipe */ struct tube* qq_pipe; /** mutex on result read pipe */ lock_basic_type rrpipe_lock; /** the result read pipe */ struct tube* rr_pipe; /* --- shared data --- */ /** mutex for access to env.cfg, finalized and dothread */ lock_basic_type cfglock; /** * The context has been finalized * This is after config when the first resolve is done. * The modules are inited (module-init()) and shared caches created. */ int finalized; /** is bg worker created yet ? */ int created_bg; /** pid of bg worker process */ pid_t bg_pid; /** tid of bg worker thread */ ub_thread_type bg_tid; /** do threading (instead of forking) for async resolution */ int dothread; /** next thread number for new threads */ int thr_next_num; /** if logfile is overridden */ int logfile_override; /** what logfile to use instead */ FILE* log_out; /** * List of alloc-cache-id points per threadnum for notinuse threads. * Simply the entire struct alloc_cache with the 'super' member used * to link a simply linked list. Reset super member to the superalloc * before use. */ struct alloc_cache* alloc_list; /** shared caches, and so on */ struct alloc_cache superalloc; /** module env master value */ struct module_env* env; /** module stack */ struct module_stack mods; /** local authority zones */ struct local_zones* local_zones; /** random state used to seed new random state structures */ struct ub_randstate* seed_rnd; /** event base for event oriented interface */ struct ub_event_base* event_base; /** true if the event_base is a pluggable base that is malloced * with a user event base inside, if so, clean up the pluggable alloc*/ int event_base_malloced; /** libworker for event based interface */ struct libworker* event_worker; /** next query number (to try) to use */ int next_querynum; /** number of async queries outstanding */ size_t num_async; /** * Tree of outstanding queries. Indexed by querynum * Used when results come in for async to lookup. * Used when cancel is done for lookup (and delete). * Used to see if querynum is free for use. * Content of type ctx_query. */ rbtree_type queries; }; /** * The queries outstanding for the libunbound resolver. * These are outstanding for async resolution. * But also, outstanding for sync resolution by one of the threads that * has joined the threadpool. */ struct ctx_query { /** node in rbtree, must be first entry, key is ptr to the querynum */ struct rbnode_type node; /** query id number, key for node */ int querynum; /** was this an async query? */ int async; /** was this query cancelled (for bg worker) */ int cancelled; /** for async query, the callback function of type ub_callback_type */ ub_callback_type cb; /** for event callbacks the type is ub_event_callback_type */ ub_event_callback_type cb_event; /** for async query, the callback user arg */ void* cb_arg; /** answer message, result from resolver lookup. */ uint8_t* msg; /** resulting message length. */ size_t msg_len; /** validation status on security */ enum sec_status msg_security; /** store libworker that is handling this query */ struct libworker* w; /** result structure, also contains original query, type, class. * malloced ptr ready to hand to the client. */ struct ub_result* res; }; /** * The error constants */ enum ub_ctx_err { /** no error */ UB_NOERROR = 0, /** socket operation. Set to -1, so that if an error from _fd() is * passed (-1) it gives a socket error. */ UB_SOCKET = -1, /** alloc failure */ UB_NOMEM = -2, /** syntax error */ UB_SYNTAX = -3, /** DNS service failed */ UB_SERVFAIL = -4, /** fork() failed */ UB_FORKFAIL = -5, /** cfg change after finalize() */ UB_AFTERFINAL = -6, /** initialization failed (bad settings) */ UB_INITFAIL = -7, /** error in pipe communication with async bg worker */ UB_PIPE = -8, /** error reading from file (resolv.conf) */ UB_READFILE = -9, /** error async_id does not exist or result already been delivered */ UB_NOID = -10 }; /** * Command codes for libunbound pipe. * * Serialization looks like this: * o length (of remainder) uint32. * o uint32 command code. * o per command format. */ enum ub_ctx_cmd { /** QUIT */ UB_LIBCMD_QUIT = 0, /** New query, sent to bg worker */ UB_LIBCMD_NEWQUERY, /** Cancel query, sent to bg worker */ UB_LIBCMD_CANCEL, /** Query result, originates from bg worker */ UB_LIBCMD_ANSWER }; /** * finalize a context. * @param ctx: context to finalize. creates shared data. * @return 0 if OK, or errcode. */ int context_finalize(struct ub_ctx* ctx); /** compare two ctx_query elements */ int context_query_cmp(const void* a, const void* b); /** * delete context query * @param q: query to delete, including message packet and prealloc result */ void context_query_delete(struct ctx_query* q); /** * Create new query in context, add to querynum list. * @param ctx: context * @param name: query name * @param rrtype: type * @param rrclass: class * @param cb: callback for async, or NULL for sync. * @param cb_event: event callback for async, or NULL for sync. * @param cbarg: user arg for async queries. * @return new ctx_query or NULL for malloc failure. */ struct ctx_query* context_new(struct ub_ctx* ctx, const char* name, int rrtype, int rrclass, ub_callback_type cb, ub_event_callback_type cb_event, void* cbarg); /** * Get a new alloc. Creates a new one or uses a cached one. * @param ctx: context * @param locking: if true, cfglock is locked while getting alloc. * @return an alloc, or NULL on mem error. */ struct alloc_cache* context_obtain_alloc(struct ub_ctx* ctx, int locking); /** * Release an alloc. Puts it into the cache. * @param ctx: context * @param locking: if true, cfglock is locked while releasing alloc. * @param alloc: alloc to relinquish. */ void context_release_alloc(struct ub_ctx* ctx, struct alloc_cache* alloc, int locking); /** * Serialize a context query that questions data. * This serializes the query name, type, ... * As well as command code 'new_query'. * @param q: context query * @param len: the length of the allocation is returned. * @return: an alloc, or NULL on mem error. */ uint8_t* context_serialize_new_query(struct ctx_query* q, uint32_t* len); /** * Serialize a context_query result to hand back to user. * This serializes the query name, type, ..., and result. * As well as command code 'answer'. * @param q: context query * @param err: error code to pass to client. * @param pkt: the packet to add, can be NULL. * @param len: the length of the allocation is returned. * @return: an alloc, or NULL on mem error. */ uint8_t* context_serialize_answer(struct ctx_query* q, int err, struct sldns_buffer* pkt, uint32_t* len); /** * Serialize a query cancellation. Serializes query async id * as well as command code 'cancel' * @param q: context query * @param len: the length of the allocation is returned. * @return: an alloc, or NULL on mem error. */ uint8_t* context_serialize_cancel(struct ctx_query* q, uint32_t* len); /** * Serialize a 'quit' command. * @param len: the length of the allocation is returned. * @return: an alloc, or NULL on mem error. */ uint8_t* context_serialize_quit(uint32_t* len); /** * Obtain command code from serialized buffer * @param p: buffer serialized. * @param len: length of buffer. * @return command code or QUIT on error. */ enum ub_ctx_cmd context_serial_getcmd(uint8_t* p, uint32_t len); /** * Lookup query from new_query buffer. * @param ctx: context * @param p: buffer serialized. * @param len: length of buffer. * @return looked up ctx_query or NULL for malloc failure. */ struct ctx_query* context_lookup_new_query(struct ub_ctx* ctx, uint8_t* p, uint32_t len); /** * Deserialize a new_query buffer. * @param ctx: context * @param p: buffer serialized. * @param len: length of buffer. * @return new ctx_query or NULL for malloc failure. */ struct ctx_query* context_deserialize_new_query(struct ub_ctx* ctx, uint8_t* p, uint32_t len); /** * Deserialize an answer buffer. * @param ctx: context * @param p: buffer serialized. * @param len: length of buffer. * @param err: error code to be returned to client is passed. * @return ctx_query with answer added or NULL for malloc failure. */ struct ctx_query* context_deserialize_answer(struct ub_ctx* ctx, uint8_t* p, uint32_t len, int* err); /** * Deserialize a cancel buffer. * @param ctx: context * @param p: buffer serialized. * @param len: length of buffer. * @return ctx_query to cancel or NULL for failure. */ struct ctx_query* context_deserialize_cancel(struct ub_ctx* ctx, uint8_t* p, uint32_t len); #endif /* LIBUNBOUND_CONTEXT_H */ unbound-1.13.1/libunbound/libworker.h0000644000175000017500000001233714010434640017217 0ustar wouterwouter/* * libunbound/libworker.h - worker thread or process that resolves * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the worker process or thread that performs * the DNS resolving and validation. The worker is called by a procedure * and if in the background continues until exit, if in the foreground * returns from the procedure when done. */ #ifndef LIBUNBOUND_LIBWORKER_H #define LIBUNBOUND_LIBWORKER_H #include "util/data/packed_rrset.h" struct ub_ctx; struct ub_result; struct module_env; struct comm_base; struct outside_network; struct ub_randstate; struct ctx_query; struct outbound_entry; struct module_qstate; struct comm_point; struct comm_reply; struct regional; struct tube; struct sldns_buffer; struct ub_event_base; struct query_info; /** * The library-worker status structure * Internal to the worker. */ struct libworker { /** every worker has a unique thread_num. (first in struct) */ int thread_num; /** context we are operating under */ struct ub_ctx* ctx; /** is this the bg worker? */ int is_bg; /** is this a bg worker that is threaded (not forked)? */ int is_bg_thread; /** want to quit, stop handling new content */ int want_quit; /** copy of the module environment with worker local entries. */ struct module_env* env; /** the event base this worker works with */ struct comm_base* base; /** the backside outside network interface to the auth servers */ struct outside_network* back; /** random() table for this worker. */ struct ub_randstate* rndstate; /** sslcontext for SSL wrapped DNS over TCP queries */ void* sslctx; }; /** * Create a background worker * @param ctx: is updated with pid/tid of the background worker. * a new allocation cache is obtained from ctx. It contains the * threadnumber and unique id for further (shared) cache insertions. * @return 0 if OK, else error. * Further communication is done via the pipes in ctx. */ int libworker_bg(struct ub_ctx* ctx); /** * Create a foreground worker. * This worker will join the threadpool of resolver threads. * It exits when the query answer has been obtained (or error). * This routine blocks until the worker is finished. * @param ctx: new allocation cache obtained and returned to it. * @param q: query (result is stored in here). * @return 0 if finished OK, else error. */ int libworker_fg(struct ub_ctx* ctx, struct ctx_query* q); /** * create worker for event-based interface. * @param ctx: context with config. * @param eb: event base. * @return new worker or NULL. */ struct libworker* libworker_create_event(struct ub_ctx* ctx, struct ub_event_base* eb); /** * Attach context_query to mesh for callback in event-driven setup. * @param ctx: context * @param q: context query entry * @param async_id: store query num if query takes long. * @return 0 if finished OK, else error. */ int libworker_attach_mesh(struct ub_ctx* ctx, struct ctx_query* q, int* async_id); /** * delete worker for event-based interface. does not free the event_base. * @param w: event-based worker to delete. */ void libworker_delete_event(struct libworker* w); /** cleanup the cache to remove all rrset IDs from it, arg is libworker */ void libworker_alloc_cleanup(void* arg); /** * fill result from parsed message, on error fills servfail * @param res: is clear at start, filled in at end. * @param buf: contains DNS message. * @param temp: temporary buffer for parse. * @param msg_security: security status of the DNS message. * On error, the res may contain a different status * (out of memory is not secure, not bogus). */ void libworker_enter_result(struct ub_result* res, struct sldns_buffer* buf, struct regional* temp, enum sec_status msg_security); #endif /* LIBUNBOUND_LIBWORKER_H */ unbound-1.13.1/ax_pthread.m40000644000175000017500000003270714010434640015271 0ustar wouterwouter# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 21 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], [AC_MSG_RESULT([yes])], [ax_pthread_extra_flags= AC_MSG_RESULT([no])]) CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include static void routine(void *a) { *((int*)a) = 0; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $attr; return attr /* ; */])], [attr_name=$attr; break], []) done AC_MSG_RESULT([$attr_name]) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac AC_MSG_RESULT([$flag]) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD unbound-1.13.1/acx_python.m40000644000175000017500000001020514010434640015313 0ustar wouterwouterAC_DEFUN([AC_PYTHON_DEVEL],[ # # Allow the use of a (user set) custom python version # AC_ARG_VAR([PYTHON_VERSION],[The installed Python version to use, for example '2.3'. This string will be appended to the Python interpreter canonical name.]) AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) if test -z "$PYTHON"; then AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) PYTHON_VERSION="" fi if test -z "$PYTHON_VERSION"; then PYTHON_VERSION=`$PYTHON -c "import sys; \ print(sys.version.split()[[0]])"` fi # # Check if you have distutils, else fail # AC_MSG_CHECKING([for the distutils Python package]) if ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([cannot import Python module "distutils". Please check your Python installation. The error was: $ac_distutils_result]) PYTHON_VERSION="" fi # # Check for Python include path # AC_MSG_CHECKING([for Python include path]) if test -z "$PYTHON_CPPFLAGS"; then python_path=`$PYTHON -c "import distutils.sysconfig; \ print(distutils.sysconfig.get_python_inc());"` if test -n "${python_path}"; then python_path="-I$python_path" fi PYTHON_CPPFLAGS=$python_path fi AC_MSG_RESULT([$PYTHON_CPPFLAGS]) AC_SUBST([PYTHON_CPPFLAGS]) # # Check for Python library path # AC_MSG_CHECKING([for Python library path]) if test -z "$PYTHON_LDFLAGS"; then PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \ print('-L'+get_config_var('LIBDIR')+' -L'+get_config_var('LIBDEST')+' '+get_config_var('BLDLIBRARY'));"` fi AC_MSG_RESULT([$PYTHON_LDFLAGS]) AC_SUBST([PYTHON_LDFLAGS]) if test -z "$PYTHON_LIBDIR"; then PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \ print(get_config_var('LIBDIR'));"` fi # # Check for site packages # AC_MSG_CHECKING([for Python site-packages path]) if test -z "$PYTHON_SITE_PKG"; then PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ print(distutils.sysconfig.get_python_lib(1,0));"` fi AC_MSG_RESULT([$PYTHON_SITE_PKG]) AC_SUBST([PYTHON_SITE_PKG]) # # final check to see if everything compiles alright # AC_MSG_CHECKING([consistency of all components of python development environment]) AC_LANG_PUSH([C]) # save current global flags ac_save_LIBS="$LIBS" ac_save_CPPFLAGS="$CPPFLAGS" LIBS="$LIBS $PYTHON_LDFLAGS" CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include ]],[[ Py_Initialize(); ]])],[pythonexists=yes],[pythonexists=no]) AC_MSG_RESULT([$pythonexists]) if test ! "$pythonexists" = "yes"; then AC_MSG_ERROR([ Could not link test program to Python. Maybe the main Python library has been installed in some non-standard library path. If so, pass it to configure, via the LDFLAGS environment variable. Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" ============================================================================ ERROR! You probably have to install the development version of the Python package for your distribution. The exact name of this package varies among them. ============================================================================ ]) PYTHON_VERSION="" fi AC_LANG_POP # turn back to default flags CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" # # all done! # ]) unbound-1.13.1/configure.ac0000644000175000017500000020636614010434640015202 0ustar wouterwouter# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.56]) sinclude(acx_nlnetlabs.m4) sinclude(ax_pthread.m4) sinclude(acx_python.m4) sinclude(ac_pkg_swig.m4) sinclude(dnstap/dnstap.m4) sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[13]) m4_define([VERSION_MICRO],[1]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 LIBUNBOUND_REVISION=12 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 # 1.0.2 had 0:14:0 # 1.1.0 had 0:15:0 # 1.1.1 had 0:16:0 # 1.2.0 had 0:17:0 # 1.2.1 had 0:18:0 # 1.3.0 had 1:0:0 # ub_cancel and -export-symbols. # 1.3.1 had 1:1:0 # 1.3.2 had 1:2:0 # 1.3.3 had 1:3:0 # 1.3.4 had 1:4:0 # 1.4.0-snapshots had 1:5:0 # 1.4.0 had 1:5:0 (not 2:0:0) # ub_result.why_bogus # 1.4.1 had 2:1:0 # 1.4.2 had 2:2:0 # 1.4.3 had 2:3:0 # 1.4.4 had 2:4:0 # 1.4.5 had 2:5:0 # 1.4.6 had 2:6:0 # 1.4.7 had 2:7:0 # 1.4.8 had 2:8:0 # 1.4.9 had 2:9:0 # 1.4.10 had 2:10:0 # 1.4.11 had 2:11:0 # 1.4.12 had 2:12:0 # 1.4.13 had 2:13:0 # and 1.4.13p1 and 1.4.13.p2 # 1.4.14 had 2:14:0 # 1.4.15 had 3:0:1 # adds ub_version() # 1.4.16 had 3:1:1 # 1.4.17 had 3:2:1 # 1.4.18 had 3:3:1 # 1.4.19 had 3:4:1 # 1.4.20 had 4:0:2 # adds libunbound.ttl # but shipped 3:5:1 # 1.4.21 had 4:1:2 # 1.4.22 had 4:1:2 # 1.5.0 had 5:3:3 # adds ub_ctx_add_ta_autr # 1.5.1 had 5:3:3 # 1.5.2 had 5:5:3 # 1.5.3 had 5:6:3 # 1.5.4 had 5:7:3 # 1.5.5 had 5:8:3 # 1.5.6 had 5:9:3 # 1.5.7 had 5:10:3 # 1.5.8 had 6:0:4 # adds ub_ctx_set_stub # 1.5.9 had 6:1:4 # 1.5.10 had 6:2:4 # 1.6.0 had 6:3:4 # 1.6.1 had 7:0:5 # ub_callback_t typedef renamed to ub_callback_type # 1.6.2 had 7:1:5 # 1.6.3 had 7:2:5 # 1.6.4 had 7:3:5 # 1.6.5 had 7:4:5 # 1.6.6 had 7:5:5 # 1.6.7 had 7:6:5 # 1.6.8 had 7:7:5 # 1.7.0 had 7:8:5 # 1.7.1 had 7:9:5 # 1.7.2 had 7:10:5 # 1.7.3 had 7:11:5 # 1.8.0 had 8:0:0 # changes the event callback function signature # 1.8.1 had 8:1:0 # 1.8.2 had 8:2:0 # 1.8.3 had 8:3:0 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls # 1.9.1 had 9:1:1 # 1.9.2 had 9:2:1 # 1.9.3 had 9:3:1 # 1.9.4 had 9:4:1 # 1.9.5 had 9:5:1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 # 1.11.0 had 9:9:1 # 1.12.0 had 9:10:1 # 1.13.0 had 9:11:1 # 1.13.1 had 9:12:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary # API are we supplying? # Age -- How many previous binary API versions do we also # support? # # If we release a new version that does not change the binary API, # increment Revision. # # If we release a new version that changes the binary API, but does # not break programs compiled against the old binary API, increment # Current and Age. Set Revision to 0, since this is the first # implementation of the new API. # # Otherwise, we're changing the binary API and breaking backward # compatibility with old binaries. Increment Current. Set Age to 0, # since we're backward compatible with no previous APIs. Set Revision # to 0 too. AC_SUBST(LIBUNBOUND_CURRENT) AC_SUBST(LIBUNBOUND_REVISION) AC_SUBST(LIBUNBOUND_AGE) cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`" AC_DEFINE_UNQUOTED(CONFCMDLINE, ["$cmdln"], [Command line arguments used with configure]) CFLAGS="$CFLAGS" AC_USE_SYSTEM_EXTENSIONS if test "$ac_cv_header_minix_config_h" = "yes"; then AC_DEFINE(_NETBSD_SOURCE,1, [Enable for compile on Minix]) fi dnl dnl By default set prefix to /usr/local dnl case "$prefix" in NONE) prefix="/usr/local" ;; esac case "$exec_prefix" in NONE) exec_prefix="$prefix" ;; esac # are we on MinGW? if uname -s 2>&1 | grep MINGW32 >/dev/null; then on_mingw="yes" else if echo $host $target | grep mingw32 >/dev/null; then on_mingw="yes" else on_mingw="no"; fi fi # # Determine configuration file # the eval is to evaluate shell expansion twice UNBOUND_SBIN_DIR=`eval echo "${sbindir}"` AC_SUBST(UNBOUND_SBIN_DIR) UNBOUND_SYSCONF_DIR=`eval echo "${sysconfdir}"` AC_SUBST(UNBOUND_SYSCONF_DIR) UNBOUND_LOCALSTATE_DIR=`eval echo "${localstatedir}"` AC_SUBST(UNBOUND_LOCALSTATE_DIR) if test $on_mingw = "no"; then ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"` else ub_conf_file="C:\\Program Files\\Unbound\\service.conf" fi AC_ARG_WITH([conf_file], AS_HELP_STRING([--with-conf-file=path],[Pathname to the Unbound configuration file]), [ub_conf_file="$withval"]) AC_SUBST(ub_conf_file) ACX_ESCAPE_BACKSLASH($ub_conf_file, hdr_config) AC_DEFINE_UNQUOTED(CONFIGFILE, ["$hdr_config"], [Pathname to the Unbound configuration file]) ub_conf_dir=`AS_DIRNAME(["$ub_conf_file"])` AC_SUBST(ub_conf_dir) # Determine run, chroot directory and pidfile locations AC_ARG_WITH(run-dir, AS_HELP_STRING([--with-run-dir=path],[set default directory to chdir to (by default dir part of cfg file)]), UNBOUND_RUN_DIR="$withval", if test $on_mingw = no; then UNBOUND_RUN_DIR=`dirname "$ub_conf_file"` else UNBOUND_RUN_DIR="" fi ) AC_SUBST(UNBOUND_RUN_DIR) ACX_ESCAPE_BACKSLASH($UNBOUND_RUN_DIR, hdr_run) AC_DEFINE_UNQUOTED(RUN_DIR, ["$hdr_run"], [Directory to chdir to]) AC_ARG_WITH(chroot-dir, AS_HELP_STRING([--with-chroot-dir=path],[set default directory to chroot to (by default same as run-dir)]), UNBOUND_CHROOT_DIR="$withval", if test $on_mingw = no; then UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR" else UNBOUND_CHROOT_DIR="" fi ) AC_SUBST(UNBOUND_CHROOT_DIR) ACX_ESCAPE_BACKSLASH($UNBOUND_CHROOT_DIR, hdr_chroot) AC_DEFINE_UNQUOTED(CHROOT_DIR, ["$hdr_chroot"], [Directory to chroot to]) AC_ARG_WITH(share-dir, AS_HELP_STRING([--with-share-dir=path],[set default directory with shared data (by default same as share/unbound)]), UNBOUND_SHARE_DIR="$withval", UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR") AC_SUBST(UNBOUND_SHARE_DIR) AC_DEFINE_UNQUOTED(SHARE_DIR, ["$UNBOUND_SHARE_DIR"], [Shared data]) AC_ARG_WITH(pidfile, AS_HELP_STRING([--with-pidfile=filename],[set default pathname to unbound pidfile (default run-dir/unbound.pid)]), UNBOUND_PIDFILE="$withval", if test $on_mingw = no; then UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid" else UNBOUND_PIDFILE="" fi ) AC_SUBST(UNBOUND_PIDFILE) ACX_ESCAPE_BACKSLASH($UNBOUND_PIDFILE, hdr_pid) AC_DEFINE_UNQUOTED(PIDFILE, ["$hdr_pid"], [default pidfile location]) AC_ARG_WITH(rootkey-file, AS_HELP_STRING([--with-rootkey-file=filename],[set default pathname to root key file (default run-dir/root.key). This file is read and written.]), UNBOUND_ROOTKEY_FILE="$withval", if test $on_mingw = no; then UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key" else UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key" fi ) AC_SUBST(UNBOUND_ROOTKEY_FILE) ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTKEY_FILE, hdr_rkey) AC_DEFINE_UNQUOTED(ROOT_ANCHOR_FILE, ["$hdr_rkey"], [default rootkey location]) AC_ARG_WITH(rootcert-file, AS_HELP_STRING([--with-rootcert-file=filename],[set default pathname to root update certificate file (default run-dir/icannbundle.pem). This file need not exist if you are content with the builtin.]), UNBOUND_ROOTCERT_FILE="$withval", if test $on_mingw = no; then UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem" else UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem" fi ) AC_SUBST(UNBOUND_ROOTCERT_FILE) ACX_ESCAPE_BACKSLASH($UNBOUND_ROOTCERT_FILE, hdr_rpem) AC_DEFINE_UNQUOTED(ROOT_CERT_FILE, ["$hdr_rpem"], [default rootcert location]) AC_ARG_WITH(username, AS_HELP_STRING([--with-username=user],[set default user that unbound changes to (default user is unbound)]), UNBOUND_USERNAME="$withval", UNBOUND_USERNAME="unbound") AC_SUBST(UNBOUND_USERNAME) AC_DEFINE_UNQUOTED(UB_USERNAME, ["$UNBOUND_USERNAME"], [default username]) AC_DEFINE(WINVER, 0x0502, [the version of the windows API enabled]) ACX_RSRC_VERSION(wnvs) AC_DEFINE_UNQUOTED(RSRC_PACKAGE_VERSION, [$wnvs], [version number for resource files]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_LANG([C]) # allow user to override the -g -O2 flags. default_cflags=no if test "x$CFLAGS" = "x" ; then ACX_CHECK_COMPILER_FLAG(g, [CFLAGS="$CFLAGS -g"]) ACX_CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"]) default_cflags=yes fi AC_PROG_CC ACX_DEPFLAG ACX_DETERMINE_EXT_FLAGS_UNBOUND # debug mode flags warnings AC_ARG_ENABLE(checking, AS_HELP_STRING([--enable-checking],[Enable warnings, asserts, makefile-dependencies])) AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[same as enable-checking])) if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug"; else debug_enabled="$enable_checking"; fi AC_SUBST(debug_enabled) case "$debug_enabled" in yes) ACX_CHECK_COMPILER_FLAG(W, [CFLAGS="$CFLAGS -W"]) ACX_CHECK_COMPILER_FLAG(Wall, [CFLAGS="$CFLAGS -Wall"]) ACX_CHECK_COMPILER_FLAG(Wextra, [CFLAGS="$CFLAGS -Wextra"]) ACX_CHECK_COMPILER_FLAG(Wdeclaration-after-statement, [CFLAGS="$CFLAGS -Wdeclaration-after-statement"]) AC_DEFINE([UNBOUND_DEBUG], [], [define this to enable debug checks.]) ;; no|*) # nothing to do. ;; esac if test "$default_cflags" = "yes"; then # only when CFLAGS was "" at the start, if the users wants to # override we shouldn't add default cflags, because they wouldn't # be able to turn off these options and set the CFLAGS wanted. ACX_CHECK_FLTO ACX_CHECK_PIE ACX_CHECK_RELRO_NOW fi AC_C_INLINE ACX_CHECK_FORMAT_ATTRIBUTE ACX_CHECK_UNUSED_ATTRIBUTE AC_DEFUN([CHECK_WEAK_ATTRIBUTE], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "weak" attribute) AC_CACHE_VAL(ac_cv_c_weak_attribute, [ac_cv_c_weak_attribute=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include __attribute__((weak)) void f(int x) { printf("%d", x); } ]], [[ f(1); ]])],[ac_cv_c_weak_attribute="yes"],[ac_cv_c_weak_attribute="no"]) ]) AC_MSG_RESULT($ac_cv_c_weak_attribute) if test $ac_cv_c_weak_attribute = yes; then AC_DEFINE(HAVE_ATTR_WEAK, 1, [Whether the C compiler accepts the "weak" attribute]) AC_DEFINE(ATTR_WEAK, [__attribute__((weak))], [apply the weak attribute to a symbol]) fi ])dnl End of CHECK_WEAK_ATTRIBUTE CHECK_WEAK_ATTRIBUTE AC_DEFUN([CHECK_NORETURN_ATTRIBUTE], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "noreturn" attribute) AC_CACHE_VAL(ac_cv_c_noreturn_attribute, [ac_cv_c_noreturn_attribute=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include __attribute__((noreturn)) void f(int x) { printf("%d", x); } ]], [[ f(1); ]])],[ac_cv_c_noreturn_attribute="yes"],[ac_cv_c_noreturn_attribute="no"]) ]) AC_MSG_RESULT($ac_cv_c_noreturn_attribute) if test $ac_cv_c_noreturn_attribute = yes; then AC_DEFINE(HAVE_ATTR_NORETURN, 1, [Whether the C compiler accepts the "noreturn" attribute]) AC_DEFINE(ATTR_NORETURN, [__attribute__((__noreturn__))], [apply the noreturn attribute to a function that exits the program]) fi ])dnl End of CHECK_NORETURN_ATTRIBUTE CHECK_NORETURN_ATTRIBUTE if test "$srcdir" != "."; then CPPFLAGS="$CPPFLAGS -I$srcdir" fi AC_DEFUN([ACX_YYLEX_DESTROY], [ AC_MSG_CHECKING([for yylex_destroy]) if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then AC_DEFINE(LEX_HAS_YYLEX_DESTROY, 1, [if lex has yylex_destroy]) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no); LEX=":" fi ]) AC_DEFUN([ACX_YYLEX_OPTION], [ AC_MSG_CHECKING([for lex %option]) if cat <&1 | grep yy_delete_buffer >/dev/null 2>&1; then %option nounput %% EOF AC_MSG_RESULT(yes) else AC_MSG_RESULT(no); LEX=":" fi ]) AC_PROG_LEX([noyywrap]) if test "$LEX" != "" -a "$LEX" != ":"; then ACX_YYLEX_DESTROY fi if test "$LEX" != "" -a "$LEX" != ":"; then ACX_YYLEX_OPTION fi AC_PROG_YACC AC_CHECK_PROG(doxygen, doxygen, doxygen) AC_CHECK_TOOL(STRIP, strip) ACX_LIBTOOL_C_ONLY PKG_PROG_PKG_CONFIG # Checks for header files. AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h],,, [AC_INCLUDES_DEFAULT]) # net/if.h portability for Darwin see: # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html AC_CHECK_HEADERS([net/if.h],,, [ #include #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_SYS_SOCKET_H # include #endif ]) # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH AC_CHECK_HEADERS([TargetConditionals.h]) # check for types. # Using own tests for int64* because autoconf builtin only give 32bit. AC_CHECK_TYPE(int8_t, signed char) AC_CHECK_TYPE(int16_t, short) AC_CHECK_TYPE(int32_t, int) AC_CHECK_TYPE(int64_t, long long) AC_CHECK_TYPE(uint8_t, unsigned char) AC_CHECK_TYPE(uint16_t, unsigned short) AC_CHECK_TYPE(uint32_t, unsigned int) AC_CHECK_TYPE(uint64_t, unsigned long long) AC_TYPE_SIZE_T AC_CHECK_TYPE(ssize_t, int) AC_TYPE_UID_T AC_TYPE_PID_T AC_TYPE_OFF_T ACX_TYPE_U_CHAR ACX_TYPE_RLIM_T ACX_TYPE_SOCKLEN_T ACX_TYPE_IN_ADDR_T ACX_TYPE_IN_PORT_T ACX_CHECK_MEMCMP_SIGNED AC_CHECK_SIZEOF(time_t,,[ AC_INCLUDES_DEFAULT #ifdef TIME_WITH_SYS_TIME # include # include #else # ifdef HAVE_SYS_TIME_H # include # else # include # endif #endif ]) AC_CHECK_SIZEOF(size_t) # add option to disable the evil rpath ACX_ARG_RPATH AC_SUBST(RUNTIME_PATH) # check to see if libraries are needed for these functions. AC_SEARCH_LIBS([inet_pton], [nsl]) AC_SEARCH_LIBS([socket], [socket]) # check wether strptime also works AC_DEFUN([AC_CHECK_STRPTIME_WORKS], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(whether strptime works) if test c${cross_compiling} = cno; then AC_RUN_IFELSE([AC_LANG_SOURCE([[ #define _XOPEN_SOURCE 600 #include int main(void) { struct tm tm; char *res; res = strptime("2010-07-15T00:00:00+00:00", "%t%Y%t-%t%m%t-%t%d%tT%t%H%t:%t%M%t:%t%S%t", &tm); if (!res) return 2; res = strptime("20070207111842", "%Y%m%d%H%M%S", &tm); if (!res) return 1; return 0; } ]])] , [eval "ac_cv_c_strptime_works=yes"], [eval "ac_cv_c_strptime_works=no"]) else eval "ac_cv_c_strptime_works=maybe" fi AC_MSG_RESULT($ac_cv_c_strptime_works) if test $ac_cv_c_strptime_works = no; then AC_LIBOBJ(strptime) else AC_DEFINE_UNQUOTED([STRPTIME_WORKS], 1, [use default strptime.]) fi ])dnl # check some functions of the OS before linking libs (while still runnable). AC_FUNC_CHOWN AC_FUNC_FORK AC_DEFINE(RETSIGTYPE,void,[Return type of signal handlers, but autoconf 2.70 says 'your code may safely assume C89 semantics that RETSIGTYPE is void.']) AC_FUNC_FSEEKO ACX_SYS_LARGEFILE ACX_CHECK_NONBLOCKING_BROKEN ACX_MKDIR_ONE_ARG AC_CHECK_FUNCS([strptime],[AC_CHECK_STRPTIME_WORKS],[AC_LIBOBJ([strptime])]) # check if we can use SO_REUSEPORT if echo "$host" | $GREP -i -e linux -e dragonfly >/dev/null; then AC_DEFINE(REUSEPORT_DEFAULT, 1, [if REUSEPORT is enabled by default]) else AC_DEFINE(REUSEPORT_DEFAULT, 0, [if REUSEPORT is enabled by default]) fi # Include systemd.m4 - begin sinclude(systemd.m4) # Include systemd.m4 - end # set memory allocation checking if requested AC_ARG_ENABLE(alloc-checks, AS_HELP_STRING([--enable-alloc-checks],[ enable to memory allocation statistics, for debug purposes ]), , ) AC_ARG_ENABLE(alloc-lite, AS_HELP_STRING([--enable-alloc-lite],[ enable for lightweight alloc assertions, for debug purposes ]), , ) AC_ARG_ENABLE(alloc-nonregional, AS_HELP_STRING([--enable-alloc-nonregional],[ enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes ]), , ) if test x_$enable_alloc_nonregional = x_yes; then AC_DEFINE(UNBOUND_ALLOC_NONREGIONAL, 1, [use malloc not regions, for debug use]) fi if test x_$enable_alloc_checks = x_yes; then AC_DEFINE(UNBOUND_ALLOC_STATS, 1, [use statistics for allocs and frees, for debug use]) SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo" AC_SUBST(SLDNS_ALLOCCHECK_EXTRA_OBJ) ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo" AC_SUBST(ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ) else if test x_$enable_alloc_lite = x_yes; then AC_DEFINE(UNBOUND_ALLOC_LITE, 1, [use to enable lightweight alloc assertions, for debug use]) else ACX_FUNC_MALLOC([unbound]) fi fi # check windows threads (we use them, not pthreads, on windows). if test "$on_mingw" = "yes"; then # check windows threads AC_CHECK_HEADERS([windows.h],,, [AC_INCLUDES_DEFAULT]) AC_MSG_CHECKING([for CreateThread]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #ifdef HAVE_WINDOWS_H #include #endif ], [ HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL); ])], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_WINDOWS_THREADS, 1, [Using Windows threads]) , AC_MSG_RESULT(no) ) else # not on mingw, check thread libraries. # check for thread library. # check this first, so that the pthread lib does not get linked in via # libssl or libpython, and thus distorts the tests, and we end up using # the non-threadsafe C libraries. AC_ARG_WITH(pthreads, AS_HELP_STRING([--with-pthreads],[use pthreads library, or --without-pthreads to disable threading support.]), [ ],[ withval="yes" ]) ub_have_pthreads=no if test x_$withval != x_no; then AX_PTHREAD([ AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]) if test -n "$PTHREAD_LIBS"; then LIBS="$PTHREAD_LIBS $LIBS" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" ub_have_pthreads=yes AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include ]) if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then AC_MSG_CHECKING([if -pthread unused during linking]) # catch clang warning 'argument unused during compilation' AC_LANG_CONFTEST([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT [[ int main(void) {return 0;} ]])]) pthread_unused="yes" # first compile echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&AS_MESSAGE_LOG_FD $CC $CFLAGS -c conftest.c -o conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD if test $? = 0; then # then link echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&AS_MESSAGE_LOG_FD $CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD if test $? -ne 0; then AC_MSG_RESULT(yes) CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'` PTHREAD_CFLAGS_ONLY="-pthread" AC_SUBST(PTHREAD_CFLAGS_ONLY) else AC_MSG_RESULT(no) fi else AC_MSG_RESULT(no) fi # endif cc successful rm -f conftest conftest.c conftest.o fi # endif -pthread in CFLAGS ]) fi # check solaris thread library AC_ARG_WITH(solaris-threads, AS_HELP_STRING([--with-solaris-threads],[use solaris native thread library.]), [ ],[ withval="no" ]) ub_have_sol_threads=no if test x_$withval != x_no; then if test x_$ub_have_pthreads != x_no; then AC_MSG_WARN([Have pthreads already, ignoring --with-solaris-threads]) else AC_SEARCH_LIBS(thr_create, [thread], [ AC_DEFINE(HAVE_SOLARIS_THREADS, 1, [Using Solaris threads]) ACX_CHECK_COMPILER_FLAG(mt, [CFLAGS="$CFLAGS -mt"], [CFLAGS="$CFLAGS -D_REENTRANT"]) ub_have_sol_threads=yes ] , [ AC_MSG_ERROR([no solaris threads found.]) ]) fi fi fi # end of non-mingw check of thread libraries # Check for SYSLOG_FACILITY AC_ARG_WITH(syslog-facility, AS_HELP_STRING([--with-syslog-facility=LOCAL0 - LOCAL7],[ set SYSLOG_FACILITY, default DAEMON ]), [ UNBOUND_SYSLOG_FACILITY="$withval" ], []) case "${UNBOUND_SYSLOG_FACILITY}" in LOCAL[[0-7]]) UNBOUND_SYSLOG_FACILITY="LOG_${UNBOUND_SYSLOG_FACILITY}" ;; *) UNBOUND_SYSLOG_FACILITY="LOG_DAEMON" ;; esac AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON]) # Check for dynamic library module AC_ARG_WITH(dynlibmodule, AS_HELP_STRING([--with-dynlibmodule],[build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]), [], [ withval="no" ]) if test x_$withval != x_no; then AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.]) WITH_DYNLIBMODULE=yes AC_SUBST(WITH_DYNLIBMODULE) DYNLIBMOD_OBJ="dynlibmod.lo" AC_SUBST(DYNLIBMOD_OBJ) DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' AC_SUBST(DYNLIBMOD_HEADER) if test $on_mingw = "no"; then # link with -ldl if not already there, for all executables because # dlopen call is in the dynlib module. For unbound executable, also # export symbols. AC_SEARCH_LIBS([dlopen], [dl]) DYNLIBMOD_EXTRALIBS="-export-dynamic" else DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi AC_SUBST(DYNLIBMOD_EXTRALIBS) fi # Check for PyUnbound AC_ARG_WITH(pyunbound, AS_HELP_STRING([--with-pyunbound],[build PyUnbound, or --without-pyunbound to skip it. (default=no)]), [], [ withval="no" ]) ub_test_python=no ub_with_pyunbound=no if test x_$withval != x_no; then ub_with_pyunbound=yes ub_test_python=yes fi # Check for Python module AC_ARG_WITH(pythonmodule, AS_HELP_STRING([--with-pythonmodule],[build Python module, or --without-pythonmodule to disable script engine. (default=no)]), [], [ withval="no" ]) ub_with_pythonmod=no if test x_$withval != x_no; then ub_with_pythonmod=yes ub_test_python=yes fi # Check for Python & SWIG only on PyUnbound or PyModule if test x_$ub_test_python != x_no; then # Check for Python ub_have_python=no ac_save_LIBS="$LIBS" dnl otherwise AC_PYTHON_DEVEL thrashes $LIBS AC_PYTHON_DEVEL if test ! -z "$PYTHON_VERSION"; then if test `$PYTHON -c "print('$PYTHON_VERSION' >= '2.4.0')"` = "False"; then AC_MSG_ERROR([Python version >= 2.4.0 is required]) fi [PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`"] AC_SUBST(PY_MAJOR_VERSION) # Have Python AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.]) if test -n "$LIBS"; then LIBS="$PYTHON_LDFLAGS $LIBS" else LIBS="$PYTHON_LDFLAGS" fi if test -n "$CPPFLAGS"; then CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" else CPPFLAGS="$PYTHON_CPPFLAGS" fi if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR]) fi ub_have_python=yes PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"], [PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}"], [PC_PY_DEPENDENCY="python"]) AC_SUBST(PC_PY_DEPENDENCY) # Check for SWIG ub_have_swig=no AC_ARG_ENABLE(swig-version-check, AS_HELP_STRING([--disable-swig-version-check],[Disable swig version check to build python modules with older swig even though that is unreliable])) if test "$enable_swig_version_check" = "yes"; then AC_PROG_SWIG(2.0.1) else AC_PROG_SWIG fi AC_MSG_CHECKING(SWIG) if test ! -x "$SWIG"; then AC_MSG_ERROR([failed to find swig tool, install it, or do not build Python module and PyUnbound]) else AC_DEFINE(HAVE_SWIG, 1, [Define if you have Swig libraries and header files.]) AC_SUBST(swig, "$SWIG") AC_MSG_RESULT(present) # If have Python & SWIG # Declare PythonMod if test x_$ub_with_pythonmod != x_no; then AC_DEFINE(WITH_PYTHONMODULE, 1, [Define if you want Python module.]) WITH_PYTHONMODULE=yes AC_SUBST(WITH_PYTHONMODULE) PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo" AC_SUBST(PYTHONMOD_OBJ) PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h' AC_SUBST(PYTHONMOD_HEADER) PYTHONMOD_INSTALL=pythonmod-install AC_SUBST(PYTHONMOD_INSTALL) PYTHONMOD_UNINSTALL=pythonmod-uninstall AC_SUBST(PYTHONMOD_UNINSTALL) fi # Declare PyUnbound if test x_$ub_with_pyunbound != x_no; then AC_DEFINE(WITH_PYUNBOUND, 1, [Define if you want PyUnbound.]) WITH_PYUNBOUND=yes AC_SUBST(WITH_PYUNBOUND) PYUNBOUND_OBJ="libunbound_wrap.lo" AC_SUBST(PYUNBOUND_OBJ) PYUNBOUND_TARGET="_unbound.la" AC_SUBST(PYUNBOUND_TARGET) PYUNBOUND_INSTALL=pyunbound-install AC_SUBST(PYUNBOUND_INSTALL) PYUNBOUND_UNINSTALL=pyunbound-uninstall AC_SUBST(PYUNBOUND_UNINSTALL) fi fi else AC_MSG_RESULT([*** Python libraries not found, won't build PythonMod or PyUnbound ***]) ub_with_pyunbound=no ub_with_pythonmod=no fi fi if test "`uname`" = "NetBSD"; then NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_' AC_SUBST(NETBSD_LINTFLAGS) fi CONFIG_DATE=`date +%Y%m%d` AC_SUBST(CONFIG_DATE) # Checks for libraries. # libnss USE_NSS="no" AC_ARG_WITH([nss], AS_HELP_STRING([--with-nss=path],[use libnss instead of openssl, installed at path.]), [ USE_NSS="yes" AC_DEFINE(HAVE_NSS, 1, [Use libnss for crypto]) if test "$withval" != "" -a "$withval" != "yes"; then CPPFLAGS="$CPPFLAGS -I$withval/include/nss3" LDFLAGS="$LDFLAGS -L$withval/lib" ACX_RUNTIME_PATH_ADD([$withval/lib]) CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS" else CPPFLAGS="$CPPFLAGS -I/usr/include/nss3" CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS" fi LIBS="$LIBS -lnss3 -lnspr4" SSLLIB="" PC_CRYPTO_DEPENDENCY="nss nspr" AC_SUBST(PC_CRYPTO_DEPENDENCY) ] ) # libnettle USE_NETTLE="no" AC_ARG_WITH([nettle], AS_HELP_STRING([--with-nettle=path],[use libnettle as crypto library, installed at path.]), [ USE_NETTLE="yes" AC_DEFINE(HAVE_NETTLE, 1, [Use libnettle for crypto]) AC_CHECK_HEADERS([nettle/dsa-compat.h],,, [AC_INCLUDES_DEFAULT]) if test "$withval" != "" -a "$withval" != "yes"; then CPPFLAGS="$CPPFLAGS -I$withval/include/nettle" LDFLAGS="$LDFLAGS -L$withval/lib" ACX_RUNTIME_PATH_ADD([$withval/lib]) else CPPFLAGS="$CPPFLAGS -I/usr/include/nettle" fi LIBS="$LIBS -lhogweed -lnettle -lgmp" SSLLIB="" PC_CRYPTO_DEPENDENCY="hogweed nettle" AC_SUBST(PC_CRYPTO_DEPENDENCY) ] ) # openssl if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then ACX_WITH_SSL ACX_LIB_SSL SSLLIB="-lssl" PC_CRYPTO_DEPENDENCY="libcrypto libssl" AC_SUBST(PC_CRYPTO_DEPENDENCY) # check if -lcrypt32 is needed because CAPIENG needs that. (on windows) BAKLIBS="$LIBS" LIBS="-lssl $LIBS" AC_MSG_CHECKING([if libssl needs -lcrypt32]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); ]])], [ AC_MSG_RESULT([no]) LIBS="$BAKLIBS" ], [ AC_MSG_RESULT([yes]) LIBS="$BAKLIBS" LIBS="$LIBS -lcrypt32" ]) AC_MSG_CHECKING([for LibreSSL]) if grep VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_LIBRESSL], [1], [Define if we have LibreSSL]) # libressl provides these compat functions, but they may also be # declared by the OS in libc. See if they have been declared. AC_CHECK_DECLS([strlcpy,strlcat,arc4random,arc4random_uniform]) else AC_MSG_RESULT([no]) fi AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params]) # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb SSL_CTX_set_alpn_select_cb]) LIBS="$BAKLIBS" AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [ AC_INCLUDES_DEFAULT #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #include #include ]) if test "$ac_cv_func_HMAC_Init_ex" = "yes"; then # check function return type. AC_MSG_CHECKING(the return type of HMAC_Init_ex) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #include #include ], [ HMAC_CTX* hmac_ctx = NULL; void* hmac_key = NULL; const EVP_MD* digest = NULL; int x = HMAC_Init_ex(hmac_ctx, hmac_key, 32, digest, NULL); (void)x; ])], [ AC_MSG_RESULT(int) ], [ AC_MSG_RESULT(void) AC_DEFINE([HMAC_INIT_EX_RETURNS_VOID], 1, [If HMAC_Init_ex() returns void]) ]) fi fi AC_SUBST(SSLLIB) # libbsd AC_ARG_WITH([libbsd], AS_HELP_STRING([--with-libbsd],[Use portable libbsd functions]), [ AC_CHECK_HEADERS([bsd/string.h bsd/stdlib.h],,, [AC_INCLUDES_DEFAULT]) if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do AC_SEARCH_LIBS([$func], [bsd], [ AC_DEFINE(HAVE_LIBBSD, 1, [Use portable libbsd functions]) PC_LIBBSD_DEPENDENCY=libbsd AC_SUBST(PC_LIBBSD_DEPENDENCY) ]) done fi ]) AC_ARG_ENABLE(sha1, AS_HELP_STRING([--disable-sha1],[Disable SHA1 RRSIG support, does not disable nsec3 support])) case "$enable_sha1" in no) ;; yes|*) AC_DEFINE([USE_SHA1], [1], [Define this to enable SHA1 support.]) ;; esac AC_ARG_ENABLE(sha2, AS_HELP_STRING([--disable-sha2],[Disable SHA256 and SHA512 RRSIG support])) case "$enable_sha2" in no) ;; yes|*) AC_DEFINE([USE_SHA2], [1], [Define this to enable SHA256 and SHA512 support.]) ;; esac AC_ARG_ENABLE(subnet, AS_HELP_STRING([--enable-subnet],[Enable client subnet])) case "$enable_subnet" in yes) AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.]) SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo" AC_SUBST(SUBNET_OBJ) SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h' AC_SUBST(SUBNET_HEADER) ;; no|*) ;; esac # check wether gost also works AC_DEFUN([AC_CHECK_GOST_WORKS], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING([if GOST works]) if test c${cross_compiling} = cno; then BAKCFLAGS="$CFLAGS" if test -n "$ssldir"; then CFLAGS="$CFLAGS -Wl,-rpath,$ssldir/lib" fi AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include #include #include /* routine to load gost (from sldns) */ int load_gost_id(void) { static int gost_id = 0; const EVP_PKEY_ASN1_METHOD* meth; ENGINE* e; if(gost_id) return gost_id; /* see if configuration loaded gost implementation from other engine*/ meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1); if(meth) { EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); return gost_id; } /* see if engine can be loaded already */ e = ENGINE_by_id("gost"); if(!e) { /* load it ourself, in case statically linked */ ENGINE_load_builtin_engines(); ENGINE_load_dynamic(); e = ENGINE_by_id("gost"); } if(!e) { /* no gost engine in openssl */ return 0; } if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) { ENGINE_finish(e); ENGINE_free(e); return 0; } meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1); if(!meth) { /* algo not found */ ENGINE_finish(e); ENGINE_free(e); return 0; } EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); return gost_id; } int main(void) { EVP_MD_CTX* ctx; const EVP_MD* md; unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */ const char* str = "Hello world"; const unsigned char check[] = { 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 , 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 , 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d , 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d }; OPENSSL_config(NULL); (void)load_gost_id(); md = EVP_get_digestbyname("md_gost94"); if(!md) return 1; memset(digest, 0, sizeof(digest)); ctx = EVP_MD_CTX_create(); if(!ctx) return 2; if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3; if(!EVP_DigestUpdate(ctx, str, 10)) return 4; if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5; /* uncomment to see the hash calculated. {int i; for(i=0; i<32; i++) printf(" %2.2x", (int)digest[i]); printf("\n");} */ if(memcmp(digest, check, sizeof(check)) != 0) return 6; return 0; } ]])] , [eval "ac_cv_c_gost_works=yes"], [eval "ac_cv_c_gost_works=no"]) CFLAGS="$BAKCFLAGS" else eval "ac_cv_c_gost_works=maybe" fi AC_MSG_RESULT($ac_cv_c_gost_works) ])dnl AC_ARG_ENABLE(gost, AS_HELP_STRING([--disable-gost],[Disable GOST support])) use_gost="no" if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then case "$enable_gost" in no) ;; *) AC_CHECK_FUNC(EVP_PKEY_set_type_str, [:],[AC_MSG_ERROR([OpenSSL 1.0.0 is needed for GOST support])]) AC_CHECK_FUNC(EC_KEY_new, [], [AC_MSG_ERROR([OpenSSL does not support ECC, needed for GOST support])]) AC_CHECK_GOST_WORKS if test "$ac_cv_c_gost_works" != no; then use_gost="yes" AC_DEFINE([USE_GOST], [1], [Define this to enable GOST support.]) fi ;; esac fi dnl !USE_NSS && !USE_NETTLE AC_ARG_ENABLE(ecdsa, AS_HELP_STRING([--disable-ecdsa],[Disable ECDSA support])) use_ecdsa="no" case "$enable_ecdsa" in no) ;; *) if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then AC_CHECK_FUNC(ECDSA_sign, [], [AC_MSG_ERROR([OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa])]) AC_CHECK_FUNC(SHA384_Init, [], [AC_MSG_ERROR([OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa])]) AC_CHECK_DECLS([NID_X9_62_prime256v1, NID_secp384r1], [], [AC_MSG_ERROR([OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa])], [AC_INCLUDES_DEFAULT #include ]) # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency) AC_MSG_CHECKING([if openssl supports SHA2 and ECDSA with EVP]) if grep OPENSSL_VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then if grep OPENSSL_VERSION_NUMBER $ssldir/include/openssl/opensslv.h | grep 0x0 >/dev/null; then AC_MSG_RESULT([no]) AC_DEFINE_UNQUOTED([USE_ECDSA_EVP_WORKAROUND], [1], [Define this to enable an EVP workaround for older openssl]) else AC_MSG_RESULT([yes]) fi else # not OpenSSL, thus likely LibreSSL, which supports it AC_MSG_RESULT([yes]) fi fi # we now know we have ECDSA and the required curves. AC_DEFINE_UNQUOTED([USE_ECDSA], [1], [Define this to enable ECDSA support.]) use_ecdsa="yes" ;; esac AC_ARG_ENABLE(dsa, AS_HELP_STRING([--disable-dsa],[Disable DSA support])) use_dsa="no" case "$enable_dsa" in yes) # detect if DSA is supported, and turn it off if not. if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then AC_CHECK_FUNC(DSA_SIG_new, [ AC_CHECK_TYPE(DSA_SIG*, [ AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.]) ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.]) fi ], [ AC_INCLUDES_DEFAULT #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif ]) ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.]) fi ]) else AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.]) fi ;; *) # disable dsa by default, RFC 8624 section 3.1, validators MUST NOT # support DSA for DNSSEC Validation. ;; esac AC_ARG_ENABLE(ed25519, AS_HELP_STRING([--disable-ed25519],[Disable ED25519 support])) use_ed25519="no" case "$enable_ed25519" in no) ;; *) if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then AC_CHECK_DECLS([NID_ED25519], [ use_ed25519="yes" ], [ if test "x$enable_ed25519" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED25519 and you used --enable-ed25519.]) fi ], [AC_INCLUDES_DEFAULT #include ]) fi if test $USE_NETTLE = "yes"; then AC_CHECK_HEADERS([nettle/eddsa.h], use_ed25519="yes",, [AC_INCLUDES_DEFAULT]) fi if test $use_ed25519 = "yes"; then AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.]) fi ;; esac AC_ARG_ENABLE(ed448, AS_HELP_STRING([--disable-ed448],[Disable ED448 support])) use_ed448="no" case "$enable_ed448" in no) ;; *) if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then AC_CHECK_DECLS([NID_ED448], [ use_ed448="yes" ], [ if test "x$enable_ed448" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED448 and you used --enable-ed448.]) fi ], [AC_INCLUDES_DEFAULT #include ]) fi if test $use_ed448 = "yes"; then AC_DEFINE_UNQUOTED([USE_ED448], [1], [Define this to enable ED448 support.]) fi ;; esac AC_ARG_ENABLE(event-api, AS_HELP_STRING([--enable-event-api],[Enable (experimental) pluggable event base libunbound API installed to unbound-event.h])) case "$enable_event_api" in yes) AC_SUBST(UNBOUND_EVENT_INSTALL, [unbound-event-install]) AC_SUBST(UNBOUND_EVENT_UNINSTALL, [unbound-event-uninstall]) ;; *) ;; esac AC_ARG_ENABLE(tfo-client, AS_HELP_STRING([--enable-tfo-client],[Enable TCP Fast Open for client mode])) case "$enable_tfo_client" in yes) case `uname` in Linux) AC_CHECK_DECL([MSG_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])], [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])], [AC_INCLUDES_DEFAULT #include ]) AC_DEFINE_UNQUOTED([USE_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.]) ;; Darwin) AC_CHECK_DECL([CONNECT_RESUME_ON_READ_WRITE], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO])], [AC_MSG_ERROR([TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client])], [AC_INCLUDES_DEFAULT #include ]) AC_DEFINE_UNQUOTED([USE_OSX_MSG_FASTOPEN], [1], [Define this to enable client TCP Fast Open.]) ;; esac ;; no|*) ;; esac AC_ARG_ENABLE(tfo-server, AS_HELP_STRING([--enable-tfo-server],[Enable TCP Fast Open for server mode])) case "$enable_tfo_server" in yes) AC_CHECK_DECL([TCP_FASTOPEN], [AC_MSG_WARN([Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO])], [AC_MSG_ERROR([TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server])], [AC_INCLUDES_DEFAULT #include ]) AC_DEFINE_UNQUOTED([USE_TCP_FASTOPEN], [1], [Define this to enable server TCP Fast Open.]) ;; no|*) ;; esac # check for libevent AC_ARG_WITH(libevent, AS_HELP_STRING([--with-libevent=pathname],[use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path). Slower, but allows use of large outgoing port ranges.]), [ ],[ with_libevent="no" ]) if test "x_$with_libevent" != x_no; then AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent]) AC_MSG_CHECKING(for libevent) if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $with_libevent; do thedir="$dir" if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then found_libevent="yes" dnl assume /usr is in default path. if test "$thedir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$thedir/include" fi break; fi done if test x_$found_libevent != x_yes; then if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then # libevent source directory AC_MSG_RESULT(found in $thedir) CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" BAK_LDFLAGS_SET="1" BAK_LDFLAGS="$LDFLAGS" # remove evdns from linking mkdir build >/dev/null 2>&1 mkdir build/libevent >/dev/null 2>&1 mkdir build/libevent/.libs >/dev/null 2>&1 ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo` ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` cp $ev_files_o build/libevent cp $ev_files_lo build/libevent cp $ev_files_libso build/libevent/.libs LATE_LDFLAGS="build/libevent/*.lo -lm" LDFLAGS="build/libevent/*.o $LDFLAGS -lm" else AC_MSG_ERROR([Cannot find the libevent library in $with_libevent You can restart ./configure --with-libevent=no to use a builtin alternative. Please note that this alternative is not as capable as libevent when using large outgoing port ranges. ]) fi else AC_MSG_RESULT(found in $thedir) dnl if event2 exists and no event lib in dir itself, use subdir if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then LDFLAGS="$LDFLAGS -L$thedir/lib/event2" ACX_RUNTIME_PATH_ADD([$thedir/lib/event2]) else dnl assume /usr is in default path, do not add "". if test "$thedir" != "/usr" -a "$thedir" != ""; then LDFLAGS="$LDFLAGS -L$thedir/lib" ACX_RUNTIME_PATH_ADD([$thedir/lib]) fi fi fi # check for library used by libevent after 1.3c AC_SEARCH_LIBS([clock_gettime], [rt]) # is the event.h header libev or libevent? AC_CHECK_HEADERS([event.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_DECL(EV_VERSION_MAJOR, [ AC_SEARCH_LIBS(event_set, [ev]) ],[ AC_SEARCH_LIBS(event_set, [event]) ],[AC_INCLUDES_DEFAULT #include ]) AC_CHECK_FUNCS([event_base_free]) # only in libevent 1.2 and later AC_CHECK_FUNCS([event_base_once]) # only in libevent 1.4.1 and later AC_CHECK_FUNCS([event_base_new]) # only in libevent 1.4.1 and later AC_CHECK_FUNCS([event_base_get_method]) # only in libevent 1.4.3 and later AC_CHECK_FUNCS([ev_loop]) # only in libev. (tested on 3.51) AC_CHECK_FUNCS([ev_default_loop]) # only in libev. (tested on 4.00) AC_CHECK_FUNCS([event_assign]) # in libevent, for thread-safety AC_CHECK_DECLS([evsignal_assign], [], [], [AC_INCLUDES_DEFAULT #ifdef HAVE_EVENT_H # include #else # include "event2/event.h" #endif ]) PC_LIBEVENT_DEPENDENCY="libevent" AC_SUBST(PC_LIBEVENT_DEPENDENCY) if test -n "$BAK_LDFLAGS_SET"; then LDFLAGS="$BAK_LDFLAGS" fi else AC_DEFINE(USE_MINI_EVENT, 1, [Define if you want to use internal select based events]) fi # check for libexpat AC_ARG_WITH(libexpat, AS_HELP_STRING([--with-libexpat=path],[specify explicit path for libexpat.]), [ ],[ withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" ]) AC_MSG_CHECKING(for libexpat) found_libexpat="no" for dir in $withval ; do if test -f "$dir/include/expat.h"; then found_libexpat="yes" dnl assume /usr is in default path. if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi AC_MSG_RESULT(found in $dir) break; fi done if test x_$found_libexpat != x_yes; then AC_MSG_ERROR([Could not find libexpat, expat.h]) fi AC_CHECK_HEADERS([expat.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_DECLS([XML_StopParser], [], [], [AC_INCLUDES_DEFAULT #include ]) # hiredis (redis C client for cachedb) AC_ARG_WITH(libhiredis, AS_HELP_STRING([--with-libhiredis=path],[specify explicit path for libhiredis.]), [ ],[ withval="no" ]) found_libhiredis="no" if test x_$withval = x_yes -o x_$withval != x_no; then AC_MSG_CHECKING(for libhiredis) if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $withval ; do if test -f "$dir/include/hiredis/hiredis.h"; then found_libhiredis="yes" dnl assume /usr is in default path. if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi AC_MSG_RESULT(found in $dir) AC_DEFINE([USE_REDIS], [1], [Define this to use hiredis client.]) LIBS="$LIBS -lhiredis" break; fi done if test x_$found_libhiredis != x_yes; then AC_MSG_ERROR([Could not find libhiredis, hiredis.h]) fi AC_CHECK_HEADERS([hiredis/hiredis.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_DECLS([redisConnect], [], [], [AC_INCLUDES_DEFAULT #include ]) fi # nghttp2 AC_ARG_WITH(libnghttp2, AS_HELP_STRING([--with-libnghttp2=path],[specify explicit path for libnghttp2.]), [ ],[ withval="no" ]) found_libnghttp2="no" if test x_$withval = x_yes -o x_$withval != x_no; then AC_MSG_CHECKING(for libnghttp2) if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $withval ; do if test -f "$dir/include/nghttp2/nghttp2.h"; then found_libnghttp2="yes" dnl assume /usr is in default path. if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi AC_MSG_RESULT(found in $dir) AC_DEFINE([HAVE_NGHTTP2], [1], [Define this to use nghttp2 client.]) LIBS="$LIBS -lnghttp2" break; fi done if test x_$found_libnghttp2 != x_yes; then AC_MSG_ERROR([Could not find libnghttp2, nghttp2.h]) fi AC_CHECK_HEADERS([nghttp2/nghttp2.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_DECLS([nghttp2_session_server_new], [], [], [AC_INCLUDES_DEFAULT #include ]) fi # set static linking for uninstalled libraries if requested AC_SUBST(staticexe) staticexe="" AC_ARG_ENABLE(static-exe, AS_HELP_STRING([--enable-static-exe],[ enable to compile executables statically against (event) uninstalled libs, for debug purposes ]), , ) if test x_$enable_static_exe = x_yes; then staticexe="-static" if test "$on_mingw" = yes; then staticexe="-all-static" # for static compile, include gdi32 and zlib here. if echo $LIBS | grep 'lgdi32' >/dev/null; then : else LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" LIBS="$LIBS -l:libssp.a" fi fi # set full static linking if requested AC_ARG_ENABLE(fully-static, AS_HELP_STRING([--enable-fully-static],[ enable to compile fully static ]), , ) if test x_$enable_fully_static = x_yes; then staticexe="-all-static" if test "$on_mingw" = yes; then # for static compile, include gdi32 and zlib here. if echo $LIBS | grep 'lgdi32' >/dev/null; then : else LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" LIBS="$LIBS -l:libssp.a" fi fi # set lock checking if requested AC_ARG_ENABLE(lock_checks, AS_HELP_STRING([--enable-lock-checks],[ enable to check lock and unlock calls, for debug purposes ]), , ) if test x_$enable_lock_checks = x_yes; then AC_DEFINE(ENABLE_LOCK_CHECKS, 1, [Define if you want to use debug lock checking (slow).]) CHECKLOCK_OBJ="checklocks.lo" AC_SUBST(CHECKLOCK_OBJ) fi ACX_CHECK_GETADDRINFO_WITH_INCLUDES if test "$USE_WINSOCK" = 1; then AC_DEFINE(UB_ON_WINDOWS, 1, [Use win32 resources and API]) AC_CHECK_HEADERS([iphlpapi.h],,, [AC_INCLUDES_DEFAULT #include ]) AC_CHECK_TOOL(WINDRES, windres) LIBS="$LIBS -liphlpapi -lcrypt32" WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe" AC_SUBST(WINAPPS) WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c" AC_SUBST(WIN_DAEMON_SRC) WIN_DAEMON_OBJ="win_svc.lo w_inst.lo" AC_SUBST(WIN_DAEMON_OBJ) WIN_DAEMON_OBJ_LINK="rsrc_unbound.o" AC_SUBST(WIN_DAEMON_OBJ_LINK) WIN_HOST_OBJ_LINK="rsrc_unbound_host.o" AC_SUBST(WIN_HOST_OBJ_LINK) WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo" AC_SUBST(WIN_UBANCHOR_OBJ_LINK) WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o" AC_SUBST(WIN_CONTROL_OBJ_LINK) WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o" AC_SUBST(WIN_CHECKCONF_OBJ_LINK) fi if test $ac_cv_func_getaddrinfo = no; then AC_LIBOBJ([fake-rfc2553]) fi # check after getaddrinfo for its libraries ACX_FUNC_IOCTLSOCKET # see if daemon(3) exists, and if it is deprecated. AC_CHECK_FUNCS([daemon]) if test $ac_cv_func_daemon = yes; then ACX_FUNC_DEPRECATED([daemon], [(void)daemon(0, 0);], [ #include ]) fi AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_UN_H #include #endif ]) AC_CHECK_MEMBERS([struct in_pktinfo.ipi_spec_dst],,,[ AC_INCLUDES_DEFAULT #if HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_UIO_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) AC_MSG_CHECKING([for htobe64]) AC_LINK_IFELSE([AC_LANG_PROGRAM([ #include #ifdef HAVE_ENDIAN_H # include #endif #ifdef HAVE_SYS_ENDIAN_H # include #endif ], [unsigned long long x = htobe64(0); printf("%u", (unsigned)x);])], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_HTOBE64, 1, [If we have htobe64]), AC_MSG_RESULT(no)) AC_MSG_CHECKING([for be64toh]) AC_LINK_IFELSE([AC_LANG_PROGRAM([ #include #ifdef HAVE_ENDIAN_H # include #endif #ifdef HAVE_SYS_ENDIAN_H # include #endif ], [unsigned long long x = be64toh(0); printf("%u", (unsigned)x);])], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_BE64TOH, 1, [If we have be64toh]), AC_MSG_RESULT(no)) AC_SEARCH_LIBS([setusercontext], [util]) AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs]) AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])]) AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])]) # check if setreuid en setregid fail, on MacOSX10.4(darwin8). if echo $target_os | grep darwin8 > /dev/null; then AC_DEFINE(DARWIN_BROKEN_SETREUID, 1, [Define this if on macOSX10.4-darwin8 and setreuid and setregid do not work]) fi AC_CHECK_DECLS([inet_pton,inet_ntop], [], [], [ AC_INCLUDES_DEFAULT #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) AC_REPLACE_FUNCS(inet_aton) AC_REPLACE_FUNCS(inet_pton) AC_REPLACE_FUNCS(inet_ntop) AC_REPLACE_FUNCS(snprintf) # test if snprintf return the proper length if test "x$ac_cv_func_snprintf" = xyes; then if test c${cross_compiling} = cno; then AC_MSG_CHECKING([for correct snprintf return value]) AC_RUN_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT [[ int main(void) { return !(snprintf(NULL, 0, "test") == 4); } ]])], [AC_MSG_RESULT(yes)], [ AC_MSG_RESULT(no) AC_DEFINE([SNPRINTF_RET_BROKEN], [], [define if (v)snprintf does not return length needed, (but length used)]) AC_LIBOBJ(snprintf) ]) fi fi AC_REPLACE_FUNCS(strlcat) AC_REPLACE_FUNCS(strlcpy) AC_REPLACE_FUNCS(memmove) AC_REPLACE_FUNCS(gmtime_r) AC_REPLACE_FUNCS(isblank) AC_REPLACE_FUNCS(explicit_bzero) dnl without CTIME, ARC4-functions and without reallocarray. LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS" AC_SUBST(LIBOBJ_WITHOUT_CTIMEARC4) AC_MSG_CHECKING([for reallocarray]) AC_LINK_IFELSE([AC_LANG_SOURCE(AC_INCLUDES_DEFAULT [[ #ifndef _OPENBSD_SOURCE #define _OPENBSD_SOURCE 1 #endif #include int main(void) { void* p = reallocarray(NULL, 10, 100); free(p); return 0; } ]])], [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_REALLOCARRAY, 1, [If we have reallocarray(3)]) ], [ AC_MSG_RESULT(no) AC_LIBOBJ(reallocarray) ]) AC_CHECK_DECLS([reallocarray]) if test "$USE_NSS" = "no"; then AC_REPLACE_FUNCS(arc4random) AC_REPLACE_FUNCS(arc4random_uniform) if test "$ac_cv_func_arc4random" = "no"; then AC_LIBOBJ(arc4_lock) AC_CHECK_FUNCS([getentropy],,[ if test "$USE_WINSOCK" = 1; then AC_LIBOBJ(getentropy_win) else case "$host" in Darwin|*darwin*) AC_LIBOBJ(getentropy_osx) ;; *solaris*|*sunos*|SunOS) AC_LIBOBJ(getentropy_solaris) AC_CHECK_HEADERS([sys/sha2.h],, [ AC_CHECK_FUNCS([SHA512_Update],,[ AC_LIBOBJ(sha512) ]) ], [AC_INCLUDES_DEFAULT]) if test "$ac_cv_header_sys_sha2_h" = "yes"; then # this lib needed for sha2 on solaris LIBS="$LIBS -lmd" fi AC_SEARCH_LIBS([clock_gettime], [rt]) ;; *freebsd*|*FreeBSD) AC_LIBOBJ(getentropy_freebsd) ;; *linux*|Linux|*) AC_LIBOBJ(getentropy_linux) AC_CHECK_FUNCS([SHA512_Update],,[ AC_DEFINE([COMPAT_SHA512], [1], [Do sha512 definitions in config.h]) AC_LIBOBJ(sha512) ]) AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_FUNCS([getauxval]) AC_SEARCH_LIBS([clock_gettime], [rt]) ;; esac fi ]) fi fi LIBOBJ_WITHOUT_CTIME="$LIBOBJS" AC_SUBST(LIBOBJ_WITHOUT_CTIME) AC_REPLACE_FUNCS(ctime_r) AC_REPLACE_FUNCS(strsep) AC_ARG_ENABLE(allsymbols, AS_HELP_STRING([--enable-allsymbols],[export all symbols from libunbound and link binaries to it, smaller install size but libunbound export table is polluted by internal symbols])) case "$enable_allsymbols" in yes) COMMON_OBJ_ALL_SYMBOLS="" UBSYMS="" EXTRALINK="-L. -L.libs -lunbound" AC_DEFINE(EXPORT_ALL_SYMBOLS, 1, [Define this if you enabled-allsymbols from libunbound to link binaries to it for smaller install size, but the libunbound export table is polluted by internal symbols]) ;; no|*) COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)' UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def' EXTRALINK="" ;; esac AC_SUBST(COMMON_OBJ_ALL_SYMBOLS) AC_SUBST(EXTRALINK) AC_SUBST(UBSYMS) if test x_$enable_lock_checks = x_yes; then UBSYMS="-export-symbols clubsyms.def" cp ${srcdir}/libunbound/ubsyms.def clubsyms.def echo lock_protect >> clubsyms.def echo lock_unprotect >> clubsyms.def echo lock_get_mem >> clubsyms.def echo checklock_start >> clubsyms.def echo checklock_stop >> clubsyms.def echo checklock_lock >> clubsyms.def echo checklock_unlock >> clubsyms.def echo checklock_init >> clubsyms.def echo checklock_thrcreate >> clubsyms.def echo checklock_thrjoin >> clubsyms.def fi # check for dnstap if requested dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock], [ AC_DEFINE([USE_DNSTAP], [1], [Define to 1 to enable dnstap support]) AC_SUBST([ENABLE_DNSTAP], [1]) AC_SUBST([opt_dnstap_socket_path]) ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path) AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH, ["$hdr_dnstap_socket_path"], [default dnstap socket path]) AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"]) AC_SUBST(DNSTAP_SOCKET_TESTBIN,['unbound-dnstap-socket$(EXEEXT)']) AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"]) AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"]) ], [ AC_SUBST([ENABLE_DNSTAP], [0]) ] ) # check for dnscrypt if requested dnsc_DNSCRYPT([ AC_DEFINE([USE_DNSCRYPT], [1], [Define to 1 to enable dnscrypt support]) AC_SUBST([ENABLE_DNSCRYPT], [1]) AC_SUBST([DNSCRYPT_SRC], ["dnscrypt/dnscrypt.c"]) AC_SUBST([DNSCRYPT_OBJ], ["dnscrypt.lo"]) ], [ AC_SUBST([ENABLE_DNSCRYPT], [0]) ] ) # check for cachedb if requested AC_ARG_ENABLE(cachedb, AS_HELP_STRING([--enable-cachedb],[enable cachedb module that can use external cache storage])) # turn on cachedb when hiredis support is enabled. if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi case "$enable_cachedb" in yes) AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support]) ;; no|*) # nothing ;; esac # check for ipsecmod if requested AC_ARG_ENABLE(ipsecmod, AS_HELP_STRING([--enable-ipsecmod],[Enable ipsecmod module that facilitates opportunistic IPsec])) case "$enable_ipsecmod" in yes) AC_DEFINE([USE_IPSECMOD], [1], [Define to 1 to use ipsecmod support.]) IPSECMOD_OBJ="ipsecmod.lo ipsecmod-whitelist.lo" AC_SUBST(IPSECMOD_OBJ) IPSECMOD_HEADER='$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h' AC_SUBST(IPSECMOD_HEADER) ;; no|*) # nothing ;; esac # check for ipset if requested AC_ARG_ENABLE(ipset, AS_HELP_STRING([--enable-ipset],[enable ipset module])) case "$enable_ipset" in yes) AC_DEFINE([USE_IPSET], [1], [Define to 1 to use ipset support]) IPSET_SRC="ipset/ipset.c" AC_SUBST(IPSET_SRC) IPSET_OBJ="ipset.lo" AC_SUBST(IPSET_OBJ) # mnl AC_ARG_WITH(libmnl, AS_HELP_STRING([--with-libmnl=path],[specify explicit path for libmnl.]), [ ],[ withval="yes" ]) found_libmnl="no" AC_MSG_CHECKING(for libmnl) if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $withval ; do if test -f "$dir/include/libmnl/libmnl.h"; then found_libmnl="yes" dnl assume /usr is in default path. if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi AC_MSG_RESULT(found in $dir) LIBS="$LIBS -lmnl" break; fi done if test x_$found_libmnl != x_yes; then AC_MSG_ERROR([Could not find libmnl, libmnl.h]) fi ;; no|*) # nothing ;; esac AC_ARG_ENABLE(explicit-port-randomisation, AS_HELP_STRING([--disable-explicit-port-randomisation],[disable explicit source port randomisation and rely on the kernel to provide random source ports])) case "$enable_explicit_port_randomisation" in no) AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.]) ;; yes|*) ;; esac AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope]) # on openBSD, the implicit rule make $< work. # on Solaris, it does not work ($? is changed sources, $^ lists dependencies). # gmake works. cat >conftest.make </dev/null rm -f conftest.make conftest.c conftest.dir/conftest.c rm -rf conftest.dir if test ! -f conftest.lo; then AC_MSG_RESULT(no) SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source' SOURCEFILE='`cat .source`' else AC_MSG_RESULT(yes) SOURCEDETERMINE=':' SOURCEFILE='$<' fi rm -f conftest.lo AC_SUBST(SOURCEDETERMINE) AC_SUBST(SOURCEFILE) # see if we want to build the library or everything ALLTARGET="alltargets" INSTALLTARGET="install-all" AC_ARG_WITH(libunbound-only, AS_HELP_STRING([--with-libunbound-only],[do not build daemon and tool programs]), [ if test "$withval" = "yes"; then ALLTARGET="lib" INSTALLTARGET="install-lib" fi ]) if test $ALLTARGET = "alltargets"; then if test $USE_NSS = "yes"; then AC_MSG_ERROR([--with-nss can only be used in combination with --with-libunbound-only.]) fi if test $USE_NETTLE = "yes"; then AC_MSG_ERROR([--with-nettle can only be used in combination with --with-libunbound-only.]) fi fi AC_SUBST(ALLTARGET) AC_SUBST(INSTALLTARGET) ACX_STRIP_EXT_FLAGS if test -n "$LATE_LDFLAGS"; then LDFLAGS="$LATE_LDFLAGS $LDFLAGS" fi # remove start spaces LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'` LIBS=`echo "$LIBS"|sed -e 's/^ *//'` AC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.]) AH_BOTTOM( dnl this must be first AH_CONFIG, to define the flags before any includes. AHX_CONFIG_EXT_FLAGS dnl includes [ #ifndef _OPENBSD_SOURCE #define _OPENBSD_SOURCE 1 #endif #ifndef UNBOUND_DEBUG # ifndef NDEBUG # define NDEBUG # endif #endif /** Use small-ldns codebase */ #define USE_SLDNS 1 #ifdef HAVE_SSL # define LDNS_BUILD_CONFIG_HAVE_SSL 1 #endif #include #include #include #include #if STDC_HEADERS #include #include #endif #ifdef HAVE_STDARG_H #include #endif #ifdef HAVE_STDINT_H #include #endif #include #if HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_UIO_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif #ifndef USE_WINSOCK #define ARG_LL "%ll" #else #define ARG_LL "%I64" #endif #ifndef AF_LOCAL #define AF_LOCAL AF_UNIX #endif ] AHX_CONFIG_FORMAT_ATTRIBUTE AHX_CONFIG_UNUSED_ATTRIBUTE AHX_CONFIG_FSEEKO AHX_CONFIG_MAXHOSTNAMELEN #if !defined(HAVE_SNPRINTF) || defined(SNPRINTF_RET_BROKEN) #define snprintf snprintf_unbound #define vsnprintf vsnprintf_unbound #include int snprintf (char *str, size_t count, const char *fmt, ...); int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); #endif /* HAVE_SNPRINTF or SNPRINTF_RET_BROKEN */ AHX_CONFIG_INET_PTON(unbound) AHX_CONFIG_INET_NTOP(unbound) AHX_CONFIG_INET_ATON(unbound) AHX_CONFIG_MEMMOVE(unbound) AHX_CONFIG_STRLCAT(unbound) AHX_CONFIG_STRLCPY(unbound) AHX_CONFIG_GMTIME_R(unbound) AHX_CONFIG_REALLOCARRAY(unbound) AHX_CONFIG_W32_SLEEP AHX_CONFIG_W32_USLEEP AHX_CONFIG_W32_RANDOM AHX_CONFIG_W32_SRANDOM AHX_CONFIG_W32_FD_SET_T AHX_CONFIG_IPV6_MIN_MTU AHX_MEMCMP_BROKEN(unbound) [ #ifndef HAVE_CTIME_R #define ctime_r unbound_ctime_r char *ctime_r(const time_t *timep, char *buf); #endif #ifndef HAVE_STRSEP #define strsep unbound_strsep char *strsep(char **stringp, const char *delim); #endif #ifndef HAVE_ISBLANK #define isblank unbound_isblank int isblank(int c); #endif #ifndef HAVE_EXPLICIT_BZERO #define explicit_bzero unbound_explicit_bzero void explicit_bzero(void* buf, size_t len); #endif #if defined(HAVE_INET_NTOP) && !HAVE_DECL_INET_NTOP const char *inet_ntop(int af, const void *src, char *dst, size_t size); #endif #if defined(HAVE_INET_PTON) && !HAVE_DECL_INET_PTON int inet_pton(int af, const char* src, void* dst); #endif #if !defined(HAVE_STRPTIME) || !defined(STRPTIME_WORKS) #define strptime unbound_strptime struct tm; char *strptime(const char *s, const char *format, struct tm *tm); #endif #if !HAVE_DECL_REALLOCARRAY void *reallocarray(void *ptr, size_t nmemb, size_t size); #endif #ifdef HAVE_LIBBSD #include #include #endif #ifdef HAVE_LIBRESSL # if !HAVE_DECL_STRLCPY size_t strlcpy(char *dst, const char *src, size_t siz); # endif # if !HAVE_DECL_STRLCAT size_t strlcat(char *dst, const char *src, size_t siz); # endif # if !HAVE_DECL_ARC4RANDOM && defined(HAVE_ARC4RANDOM) uint32_t arc4random(void); # endif # if !HAVE_DECL_ARC4RANDOM_UNIFORM && defined(HAVE_ARC4RANDOM_UNIFORM) uint32_t arc4random_uniform(uint32_t upper_bound); # endif #endif /* HAVE_LIBRESSL */ #ifndef HAVE_ARC4RANDOM int getentropy(void* buf, size_t len); uint32_t arc4random(void); void arc4random_buf(void* buf, size_t n); void _ARC4_LOCK(void); void _ARC4_UNLOCK(void); void _ARC4_LOCK_DESTROY(void); #endif #ifndef HAVE_ARC4RANDOM_UNIFORM uint32_t arc4random_uniform(uint32_t upper_bound); #endif #ifdef COMPAT_SHA512 #ifndef SHA512_DIGEST_LENGTH #define SHA512_BLOCK_LENGTH 128 #define SHA512_DIGEST_LENGTH 64 #define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) typedef struct _SHA512_CTX { uint64_t state[8]; uint64_t bitcount[2]; uint8_t buffer[SHA512_BLOCK_LENGTH]; } SHA512_CTX; #endif /* SHA512_DIGEST_LENGTH */ void SHA512_Init(SHA512_CTX*); void SHA512_Update(SHA512_CTX*, void*, size_t); void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); unsigned char *SHA512(void* data, unsigned int data_len, unsigned char *digest); #endif /* COMPAT_SHA512 */ #if defined(HAVE_EVENT_H) && !defined(HAVE_EVENT_BASE_ONCE) && !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && (defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS)) /* using version of libevent that is not threadsafe. */ # define LIBEVENT_SIGNAL_PROBLEM 1 #endif #ifndef CHECKED_INET6 # define CHECKED_INET6 # ifdef AF_INET6 # define INET6 # else # define AF_INET6 28 # endif #endif /* CHECKED_INET6 */ #ifndef HAVE_GETADDRINFO struct sockaddr_storage; #include "compat/fake-rfc2553.h" #endif #ifdef UNBOUND_ALLOC_STATS # define malloc(s) unbound_stat_malloc_log(s, __FILE__, __LINE__, __func__) # define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__) # define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__) # define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__) void *unbound_stat_malloc(size_t size); void *unbound_stat_calloc(size_t nmemb, size_t size); void unbound_stat_free(void *ptr); void *unbound_stat_realloc(void *ptr, size_t size); void *unbound_stat_malloc_log(size_t size, const char* file, int line, const char* func); void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, int line, const char* func); void unbound_stat_free_log(void *ptr, const char* file, int line, const char* func); void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, int line, const char* func); #elif defined(UNBOUND_ALLOC_LITE) # include "util/alloc.h" #endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */ /** default port for DNS traffic. */ #define UNBOUND_DNS_PORT 53 /** default port for DNS over TLS traffic. */ #define UNBOUND_DNS_OVER_TLS_PORT 853 /** default port for DNS over HTTPS traffic. */ #define UNBOUND_DNS_OVER_HTTPS_PORT 443 /** default port for unbound control traffic, registered port with IANA, ub-dns-control 8953/tcp unbound dns nameserver control */ #define UNBOUND_CONTROL_PORT 8953 /** the version of unbound-control that this software implements */ #define UNBOUND_CONTROL_VERSION 1 ]) dnl if we build from source tree, the man pages need @date@ and @version@ dnl if this is a distro tarball, that was already done by makedist.sh AC_SUBST(version, [VERSION_MAJOR.VERSION_MINOR.VERSION_MICRO]) AC_SUBST(date, [`date +'%b %e, %Y'`]) AC_CONFIG_FILES([Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service contrib/unbound_portable.service]) AC_CONFIG_HEADERS([config.h]) AC_OUTPUT unbound-1.13.1/acx_nlnetlabs.m40000644000175000017500000012506414010434640015766 0ustar wouterwouter# acx_nlnetlabs.m4 - common macros for configure checks # Copyright 2009, Wouter Wijngaards, NLnet Labs. # BSD licensed. # # Version 37 # 2021-01-05 fix defun for aclocal # 2021-01-05 autoconf 2.70 autoupdate and fixes, no AC_TRY_COMPILE # 2020-08-24 Use EVP_sha256 instead of HMAC_Update (for openssl-3.0.0). # 2016-03-21 Check -ldl -pthread for libcrypto for ldns and openssl 1.1.0. # 2016-03-21 Use HMAC_Update instead of HMAC_CTX_Init (for openssl-1.1.0). # 2016-01-04 -D_DEFAULT_SOURCE defined with -D_BSD_SOURCE for Linux glibc 2.20 # 2015-12-11 FLTO check for new OSX, clang. # 2015-11-18 spelling check fix. # 2015-11-05 ACX_SSL_CHECKS no longer adds -ldl needlessly. # 2015-08-28 ACX_CHECK_PIE and ACX_CHECK_RELRO_NOW added. # 2015-03-17 AHX_CONFIG_REALLOCARRAY added # 2013-09-19 FLTO help text improved. # 2013-07-18 Enable ACX_CHECK_COMPILER_FLAG to test for -Wstrict-prototypes # 2013-06-25 FLTO has --disable-flto option. # 2013-05-03 Update W32_SLEEP for newer mingw that links but not defines it. # 2013-03-22 Fix ACX_RSRC_VERSION for long version numbers. # 2012-02-09 Fix AHX_MEMCMP_BROKEN with undef in compat/memcmp.h. # 2012-01-20 Fix COMPILER_FLAGS_UNBOUND for gcc 4.6.2 assigned-not-used-warns. # 2011-12-05 Fix getaddrinfowithincludes on windows with fedora16 mingw32-gcc. # Fix ACX_MALLOC for redefined malloc error. # Fix GETADDRINFO_WITH_INCLUDES to add -lws2_32 # 2011-11-10 Fix FLTO test to not drop a.out in current directory. # 2011-11-01 Fix FLTO test for llvm on Lion. # 2011-08-01 Fix nonblock test (broken at v13). # 2011-08-01 Fix autoconf 2.68 warnings # 2011-06-23 Add ACX_CHECK_FLTO to check -flto. # 2010-08-16 Fix FLAG_OMITTED for AS_TR_CPP changes in autoconf-2.66. # 2010-07-02 Add check for ss_family (for minix). # 2010-04-26 Fix to use CPPFLAGS for CHECK_COMPILER_FLAGS. # 2010-03-01 Fix RPATH using CONFIG_COMMANDS to run at the very end. # 2010-02-18 WITH_SSL outputs the LIBSSL_LDFLAGS, LIBS, CPPFLAGS separate, -ldl # 2010-02-01 added ACX_CHECK_MEMCMP_SIGNED, AHX_MEMCMP_BROKEN # 2010-01-20 added AHX_COONFIG_STRLCAT # 2009-07-14 U_CHAR detection improved for windows crosscompile. # added ACX_FUNC_MALLOC # fixup some #if to #ifdef # NONBLOCKING test for mingw crosscompile. # 2009-07-13 added ACX_WITH_SSL_OPTIONAL # 2009-07-03 fixup LDFLAGS for empty ssl dir. # # Automates some of the checking constructs. Aims at portability for POSIX. # Documentation for functions is below. # # the following macro's are provided in this file: # (see below for details on each macro). # # ACX_ESCAPE_BACKSLASH - escape backslashes in var for C-preproc. # ACX_RSRC_VERSION - create windows resource version number. # ACX_CHECK_COMPILER_FLAG - see if cc supports a flag. # ACX_CHECK_ERROR_FLAGS - see which flag is -werror (used below). # ACX_CHECK_COMPILER_FLAG_NEEDED - see if flags make the code compile cleanly. # ACX_DEPFLAG - find cc dependency flags. # ACX_DETERMINE_EXT_FLAGS_UNBOUND - find out which flags enable BSD and POSIX. # ACX_CHECK_FORMAT_ATTRIBUTE - find cc printf format syntax. # ACX_CHECK_UNUSED_ATTRIBUTE - find cc variable unused syntax. # ACX_CHECK_FLTO - see if cc supports -flto and use it if so. # ACX_LIBTOOL_C_ONLY - create libtool for C only, improved. # ACX_TYPE_U_CHAR - u_char type. # ACX_TYPE_RLIM_T - rlim_t type. # ACX_TYPE_SOCKLEN_T - socklen_t type. # ACX_TYPE_IN_ADDR_T - in_addr_t type. # ACX_TYPE_IN_PORT_T - in_port_t type. # ACX_ARG_RPATH - add --disable-rpath option. # ACX_WITH_SSL - add --with-ssl option, link -lcrypto. # ACX_WITH_SSL_OPTIONAL - add --with-ssl option, link -lcrypto, # where --without-ssl is also accepted # ACX_LIB_SSL - setup to link -lssl. # ACX_SYS_LARGEFILE - improved sys_largefile, fseeko, >2G files. # ACX_CHECK_GETADDRINFO_WITH_INCLUDES - find getaddrinfo, portably. # ACX_FUNC_DEPRECATED - see if func is deprecated. # ACX_CHECK_NONBLOCKING_BROKEN - see if nonblocking sockets really work. # ACX_MKDIR_ONE_ARG - determine mkdir(2) number of arguments. # ACX_FUNC_IOCTLSOCKET - find ioctlsocket, portably. # ACX_FUNC_MALLOC - check malloc, define replacement . # AHX_CONFIG_FORMAT_ATTRIBUTE - config.h text for format. # AHX_CONFIG_UNUSED_ATTRIBUTE - config.h text for unused. # AHX_CONFIG_FSEEKO - define fseeko, ftello fallback. # AHX_CONFIG_RAND_MAX - define RAND_MAX if needed. # AHX_CONFIG_MAXHOSTNAMELEN - define MAXHOSTNAMELEN if needed. # AHX_CONFIG_IPV6_MIN_MTU - define IPV6_MIN_MTU if needed. # AHX_CONFIG_SNPRINTF - snprintf compat prototype # AHX_CONFIG_INET_PTON - inet_pton compat prototype # AHX_CONFIG_INET_NTOP - inet_ntop compat prototype # AHX_CONFIG_INET_ATON - inet_aton compat prototype # AHX_CONFIG_MEMMOVE - memmove compat prototype # AHX_CONFIG_STRLCAT - strlcat compat prototype # AHX_CONFIG_STRLCPY - strlcpy compat prototype # AHX_CONFIG_GMTIME_R - gmtime_r compat prototype # AHX_CONFIG_W32_SLEEP - w32 compat for sleep # AHX_CONFIG_W32_USLEEP - w32 compat for usleep # AHX_CONFIG_W32_RANDOM - w32 compat for random # AHX_CONFIG_W32_SRANDOM - w32 compat for srandom # AHX_CONFIG_W32_FD_SET_T - w32 detection of FD_SET_T. # ACX_CFLAGS_STRIP - strip one flag from CFLAGS # ACX_STRIP_EXT_FLAGS - strip extension flags from CFLAGS # AHX_CONFIG_FLAG_OMITTED - define omitted flag # AHX_CONFIG_FLAG_EXT - define omitted extension flag # AHX_CONFIG_EXT_FLAGS - define the stripped extension flags # ACX_CHECK_MEMCMP_SIGNED - check if memcmp uses signed characters. # AHX_MEMCMP_BROKEN - replace memcmp func for CHECK_MEMCMP_SIGNED. # ACX_CHECK_SS_FAMILY - check for sockaddr_storage.ss_family # ACX_CHECK_PIE - add --enable-pie option and check if works # ACX_CHECK_RELRO_NOW - add --enable-relro-now option and check it # dnl Escape backslashes as \\, for C:\ paths, for the C preprocessor defines. dnl for example, ACX_ESCAPE_BACKSLASH($from_var, to_var) dnl $1: the text to change. dnl $2: the result. AC_DEFUN([ACX_ESCAPE_BACKSLASH], [$2="`echo $1 | sed -e 's/\\\\/\\\\\\\\/g'`" ]) dnl Calculate comma separated windows-resource numbers from package version. dnl Picks the first three(,0) or four numbers out of the name. dnl $1: variable for the result AC_DEFUN([ACX_RSRC_VERSION], [$1=[`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\).*$/\1,\2,\3,\4/' -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9]*$/\1,\2,\3,0/' `] ]) dnl Routine to help check for compiler flags. dnl Checks if the compiler will accept the flag. dnl $1: the flag without a - in front, so g to check -g. dnl $2: executed if yes dnl $3: executed if no AC_DEFUN([ACX_CHECK_COMPILER_FLAG], [ AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(whether $CC supports -$1) cache=`echo $1 | sed 'y%.=/+-%___p_%'` AC_CACHE_VAL(cv_prog_cc_flag_$cache, [ echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -$1 -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c ]) if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then AC_MSG_RESULT(yes) : $2 else AC_MSG_RESULT(no) : $3 fi ]) dnl setup flags for ACX_CHECK_COMPILER_FLAG_NEEDED dnl ERRFLAG: result, compiler flag to turn warnings into errors AC_DEFUN([ACX_CHECK_ERROR_FLAGS], [ ACX_CHECK_COMPILER_FLAG(Werror, [ERRFLAG="-Werror"], [ERRFLAG="-errwarn"]) ACX_CHECK_COMPILER_FLAG(Wall, [ERRFLAG="$ERRFLAG -Wall"], [ERRFLAG="$ERRFLAG -errfmt"]) ]) dnl Routine to help check for needed compiler flags. dnl $1: flags for CC dnl $2: the includes and code dnl $3: if the given code only compiles with the flag, execute argument 3 dnl $4: if the given code compiles without the flag, execute argument 4 dnl $5: with and without flag the compile fails, execute argument 5. AC_DEFUN([ACX_CHECK_COMPILER_FLAG_NEEDED], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([ACX_CHECK_ERROR_FLAGS]) AC_MSG_CHECKING(whether we need $1 as a flag for $CC) cache=AS_TR_SH($1) dnl cache=`echo $1 | sed 'y%.=/+- %___p__%'` AC_CACHE_VAL(cv_prog_cc_flag_needed_$cache, [ echo '$2' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else [ if test -z "`$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1` #exit 1 fi ] fi rm -f conftest conftest.c conftest.o ]) if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then AC_MSG_RESULT(yes) : $3 else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then AC_MSG_RESULT(no) #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $1 $ERRFLAG -c conftest.c 2>&1` #exit 1 : $4 else AC_MSG_RESULT(failed) : $5 fi fi ]) dnl Check for CC dependency flag dnl DEPFLAG: set to flag that generates dependencies. AC_DEFUN([ACX_DEPFLAG], [ AC_MSG_CHECKING([$CC dependency flag]) echo 'void f(){}' >conftest.c if test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then DEPFLAG="-MM" else if test "`$CC -xM1 conftest.c 2>&1`" = "conftest.o: conftest.c"; then DEPFLAG="-xM1" else DEPFLAG="-MM" # dunno do something fi fi AC_MSG_RESULT($DEPFLAG) rm -f conftest.c AC_SUBST(DEPFLAG) ]) dnl Determine flags that gives POSIX and BSD functionality. dnl CFLAGS is modified for the result. AC_DEFUN([ACX_DETERMINE_EXT_FLAGS_UNBOUND], [ ACX_CHECK_COMPILER_FLAG(std=c99, [C99FLAG="-std=c99"]) ACX_CHECK_COMPILER_FLAG(xc99, [C99FLAG="-xc99"]) AC_CHECK_HEADERS([getopt.h time.h],,, [AC_INCLUDES_DEFAULT]) ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE, [ #include "confdefs.h" #include #include #include #ifdef HAVE_TIME_H #include #endif #include #include #ifdef HAVE_GETOPT_H #include #endif int test() { int a; char **opts = NULL; struct timeval tv; char *t; time_t time = 0; char *buf = NULL; const char* str = NULL; struct msghdr msg; msg.msg_control = 0; t = ctime_r(&time, buf); tv.tv_usec = 10; srandom(32); a = getopt(2, opts, "a"); a = isascii(32); str = gai_strerror(0); if(str && t && tv.tv_usec && msg.msg_control) a = 0; return a; } ], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE"]) ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE, [ #include "confdefs.h" #include #include #include #ifdef HAVE_TIME_H #include #endif #include #include #ifdef HAVE_GETOPT_H #include #endif int test() { int a; char **opts = NULL; struct timeval tv; char *t; time_t time = 0; char *buf = NULL; const char* str = NULL; struct msghdr msg; msg.msg_control = 0; t = ctime_r(&time, buf); tv.tv_usec = 10; srandom(32); a = getopt(2, opts, "a"); a = isascii(32); str = gai_strerror(0); if(str && t && tv.tv_usec && msg.msg_control) a = 0; return a; } ], [CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE"]) ACX_CHECK_COMPILER_FLAG_NEEDED($C99FLAG, [ #include #include int test() { int a = 0; return a; } ], [CFLAGS="$CFLAGS $C99FLAG"]) ACX_CHECK_COMPILER_FLAG_NEEDED(-D_BSD_SOURCE -D_DEFAULT_SOURCE, [ #include int test() { int a; a = isascii(32); return a; } ], [CFLAGS="$CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE"]) ACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE, [ #include int test() { struct in6_pktinfo inf; int a = (int)sizeof(inf); return a; } ], [CFLAGS="$CFLAGS -D_GNU_SOURCE"]) # check again for GNU_SOURCE for setresgid. May fail if setresgid # is not available at all. -D_FRSRESGID is to make this check unique. # otherwise we would get the previous cached result. ACX_CHECK_COMPILER_FLAG_NEEDED(-D_GNU_SOURCE -D_FRSRESGID, [ #include int test() { int a = setresgid(0,0,0); a = setresuid(0,0,0); return a; } ], [CFLAGS="$CFLAGS -D_GNU_SOURCE"]) ACX_CHECK_COMPILER_FLAG_NEEDED(-D_POSIX_C_SOURCE=200112, [ #include "confdefs.h" #ifdef HAVE_TIME_H #include #endif #include int test() { int a = 0; char *t; time_t time = 0; char *buf = NULL; const char* str = NULL; t = ctime_r(&time, buf); str = gai_strerror(0); if(t && str) a = 0; return a; } ], [CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112"]) ACX_CHECK_COMPILER_FLAG_NEEDED(-D__EXTENSIONS__, [ #include "confdefs.h" #include #include #include #ifdef HAVE_TIME_H #include #endif #include #ifdef HAVE_GETOPT_H #include #endif int test() { int a; char **opts = NULL; struct timeval tv; tv.tv_usec = 10; srandom(32); a = getopt(2, opts, "a"); a = isascii(32); if(tv.tv_usec) a = 0; return a; } ], [CFLAGS="$CFLAGS -D__EXTENSIONS__"]) ])dnl End of ACX_DETERMINE_EXT_FLAGS_UNBOUND dnl Check if CC supports -flto. dnl in a way that supports clang and suncc (that flag does something else, dnl but fails to link). It sets it in CFLAGS if it works. AC_DEFUN([ACX_CHECK_FLTO], [ AC_ARG_ENABLE([flto], AS_HELP_STRING([--disable-flto], [Disable link-time optimization (gcc specific option)])) AS_IF([test "x$enable_flto" != "xno"], [ AC_MSG_CHECKING([if $CC supports -flto]) BAKCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -flto" AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ if $CC $CFLAGS -o conftest conftest.c 2>&1 | $GREP -e "warning: no debug symbols in executable" -e "warning: object" >/dev/null; then CFLAGS="$BAKCFLAGS" AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) fi rm -f conftest conftest.c conftest.o ], [CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)]) ]) ]) dnl Check the printf-format attribute (if any) dnl result in HAVE_ATTR_FORMAT. dnl Make sure you also include the AHX_CONFIG_FORMAT_ATTRIBUTE. AC_DEFUN([ACX_CHECK_FORMAT_ATTRIBUTE], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "format" attribute) AC_CACHE_VAL(ac_cv_c_format_attribute, [ac_cv_c_format_attribute=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include void f (char *format, ...) __attribute__ ((format (printf, 1, 2))); void (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2))); ]], [[ f ("%s", "str"); ]])],[ac_cv_c_format_attribute="yes"],[ac_cv_c_format_attribute="no"]) ]) AC_MSG_RESULT($ac_cv_c_format_attribute) if test $ac_cv_c_format_attribute = yes; then AC_DEFINE(HAVE_ATTR_FORMAT, 1, [Whether the C compiler accepts the "format" attribute]) fi ])dnl End of ACX_CHECK_FORMAT_ATTRIBUTE dnl Setup ATTR_FORMAT config.h parts. dnl make sure you call ACX_CHECK_FORMAT_ATTRIBUTE also. AC_DEFUN([AHX_CONFIG_FORMAT_ATTRIBUTE], [ #ifdef HAVE_ATTR_FORMAT # define ATTR_FORMAT(archetype, string_index, first_to_check) \ __attribute__ ((format (archetype, string_index, first_to_check))) #else /* !HAVE_ATTR_FORMAT */ # define ATTR_FORMAT(archetype, string_index, first_to_check) /* empty */ #endif /* !HAVE_ATTR_FORMAT */ ]) dnl Check how to mark function arguments as unused. dnl result in HAVE_ATTR_UNUSED. dnl Make sure you include AHX_CONFIG_UNUSED_ATTRIBUTE also. AC_DEFUN([ACX_CHECK_UNUSED_ATTRIBUTE], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(whether the C compiler (${CC-cc}) accepts the "unused" attribute) AC_CACHE_VAL(ac_cv_c_unused_attribute, [ac_cv_c_unused_attribute=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include void f (char *u __attribute__((unused))); ]], [[ f ("x"); ]])],[ac_cv_c_unused_attribute="yes"],[ac_cv_c_unused_attribute="no"]) ]) dnl Setup ATTR_UNUSED config.h parts. dnl make sure you call ACX_CHECK_UNUSED_ATTRIBUTE also. AC_DEFUN([AHX_CONFIG_UNUSED_ATTRIBUTE], [ #if defined(DOXYGEN) # define ATTR_UNUSED(x) x #elif defined(__cplusplus) # define ATTR_UNUSED(x) #elif defined(HAVE_ATTR_UNUSED) # define ATTR_UNUSED(x) x __attribute__((unused)) #else /* !HAVE_ATTR_UNUSED */ # define ATTR_UNUSED(x) x #endif /* !HAVE_ATTR_UNUSED */ ]) AC_MSG_RESULT($ac_cv_c_unused_attribute) if test $ac_cv_c_unused_attribute = yes; then AC_DEFINE(HAVE_ATTR_UNUSED, 1, [Whether the C compiler accepts the "unused" attribute]) fi ])dnl dnl Pre-fun for ACX_LIBTOOL_C_ONLY AC_DEFUN([ACX_LIBTOOL_C_PRE], [ # skip these tests, we do not need them. AC_DEFUN([AC_PROG_F77], [:]) AC_DEFUN([AC_PROG_FC], [:]) AC_DEFUN([AC_PROG_CXX], [:]) AC_DEFUN([AC_PROG_CXXCPP], [:]) AC_DEFUN([AC_PROG_OBJC], [:]) AC_DEFUN([AC_PROG_OBJCCPP], [:]) AC_DEFUN([AC_LIBTOOL_CXX], [:]) AC_DEFUN([AC_LIBTOOL_F77], [:]) # always use ./libtool unless override from commandline (libtool=mylibtool) if test -z "$libtool"; then libtool="./libtool" fi AC_SUBST(libtool) # avoid libtool max commandline length test on systems that fork slowly. AC_CANONICAL_HOST if echo "$host_os" | grep "sunos4" >/dev/null; then lt_cv_sys_max_cmd_len=32750; fi AC_PATH_TOOL(AR, ar, [false]) if test $AR = false; then AC_MSG_ERROR([Cannot find 'ar', please extend PATH to include it]) fi ]) dnl Perform libtool check, portably, only for C AC_DEFUN([ACX_LIBTOOL_C_ONLY], [ dnl as a requirement so that is gets called before LIBTOOL dnl because libtools 'AC_REQUIRE' names are right after this one, before dnl this function contents. AC_REQUIRE([ACX_LIBTOOL_C_PRE]) LT_INIT ]) dnl Detect if u_char type is defined, otherwise define it. AC_DEFUN([ACX_TYPE_U_CHAR], [AC_CHECK_TYPE([u_char], , [AC_DEFINE([u_char], [unsigned char], [Define to 'unsigned char if not defined])], [ AC_INCLUDES_DEFAULT #ifdef HAVE_WINSOCK2_H # include #endif ]) ]) dnl Detect if rlim_t type is defined, otherwise define it. AC_DEFUN([ACX_TYPE_RLIM_T], [AC_CHECK_TYPE(rlim_t, , [AC_DEFINE([rlim_t], [unsigned long], [Define to 'int' if not defined])], [ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_RESOURCE_H # include #endif ]) ]) dnl Detect if socklen_t type is defined, otherwise define it. AC_DEFUN([ACX_TYPE_SOCKLEN_T], [ AC_CHECK_TYPE(socklen_t, , [AC_DEFINE([socklen_t], [int], [Define to 'int' if not defined])], [ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_SOCKET_H # include #endif #ifdef HAVE_WS2TCPIP_H # include #endif ]) ]) dnl Detect if in_addr_t type is defined, otherwise define it. AC_DEFUN([ACX_TYPE_IN_ADDR_T], [ AC_CHECK_TYPE(in_addr_t, [], [AC_DEFINE([in_addr_t], [uint32_t], [in_addr_t])], [ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_NETINET_IN_H # include #endif ]) ]) dnl Detect if in_port_t type is defined, otherwise define it. AC_DEFUN([ACX_TYPE_IN_PORT_T], [ AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_NETINET_IN_H # include #endif ]) ]) dnl Add option to disable the evil rpath. Check whether to use rpath or not. dnl Adds the --disable-rpath option. Uses trick to edit the ./libtool. AC_DEFUN([ACX_ARG_RPATH], [ AC_ARG_ENABLE(rpath, [ --disable-rpath disable hardcoded rpath (default=enabled)], enable_rpath=$enableval, enable_rpath=yes) if test "x$enable_rpath" = xno; then dnl AC_MSG_RESULT([Fixing libtool for -rpath problems.]) AC_CONFIG_COMMANDS([disable-rpath], [ sed < libtool > libtool-2 \ 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_RPATH_SED__ "/' mv libtool-2 libtool chmod 755 libtool libtool="./libtool" ]) fi ]) dnl Add a -R to the RUNTIME_PATH. Only if rpath is enabled and it is dnl an absolute path. dnl $1: the pathname to add. AC_DEFUN([ACX_RUNTIME_PATH_ADD], [ if test "x$enable_rpath" = xyes; then if echo "$1" | grep "^/" >/dev/null; then RUNTIME_PATH="$RUNTIME_PATH -R$1" fi fi ]) dnl Common code for both ACX_WITH_SSL and ACX_WITH_SSL_OPTIONAL dnl Takes one argument; the withval checked in those 2 functions dnl sets up the environment for the given openssl path AC_DEFUN([ACX_SSL_CHECKS], [ withval=$1 if test x_$withval != x_no; then AC_MSG_CHECKING(for SSL) if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr" fi for dir in $withval; do ssldir="$dir" if test -f "$dir/include/openssl/ssl.h"; then found_ssl="yes" AC_DEFINE_UNQUOTED([HAVE_SSL], [], [Define if you have the SSL libraries installed.]) dnl assume /usr/include is already in the include-path. if test "$ssldir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$ssldir/include" LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include" fi break; fi done if test x_$found_ssl != x_yes; then AC_MSG_ERROR(Cannot find the SSL libraries in $withval) else AC_MSG_RESULT(found in $ssldir) HAVE_SSL=yes dnl assume /usr is already in the lib and dynlib paths. if test "$ssldir" != "/usr" -a "$ssldir" != ""; then LDFLAGS="$LDFLAGS -L$ssldir/lib" LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib" ACX_RUNTIME_PATH_ADD([$ssldir/lib]) fi AC_MSG_CHECKING([for EVP_sha256 in -lcrypto]) LIBS="$LIBS -lcrypto" LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto" AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); ]])],[ AC_MSG_RESULT(yes) AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) ],[ AC_MSG_RESULT(no) # check if -lwsock32 or -lgdi32 are needed. BAKLIBS="$LIBS" BAKSSLLIBS="$LIBSSL_LIBS" LIBS="$LIBS -lgdi32 -lws2_32" LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32" AC_MSG_CHECKING([if -lcrypto needs -lgdi32]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); ]])],[ AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) AC_MSG_RESULT(yes) ],[ AC_MSG_RESULT(no) LIBS="$BAKLIBS" LIBSSL_LIBS="$BAKSSLLIBS" LIBS="$LIBS -ldl" LIBSSL_LIBS="$LIBSSL_LIBS -ldl" AC_MSG_CHECKING([if -lcrypto needs -ldl]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); ]])],[ AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) AC_MSG_RESULT(yes) ],[ AC_MSG_RESULT(no) LIBS="$BAKLIBS" LIBSSL_LIBS="$BAKSSLLIBS" LIBS="$LIBS -ldl -pthread" LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread" AC_MSG_CHECKING([if -lcrypto needs -ldl -pthread]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ int EVP_sha256(void); (void)EVP_sha256(); ]])],[ AC_DEFINE([HAVE_EVP_SHA256], 1, [If you have EVP_sha256]) AC_MSG_RESULT(yes) ],[ AC_MSG_RESULT(no) AC_MSG_ERROR([OpenSSL found in $ssldir, but version 0.9.7 or higher is required]) ]) ]) ]) ]) fi AC_SUBST(HAVE_SSL) AC_SUBST(RUNTIME_PATH) fi AC_CHECK_HEADERS([openssl/ssl.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_HEADERS([openssl/err.h],,, [AC_INCLUDES_DEFAULT]) AC_CHECK_HEADERS([openssl/rand.h],,, [AC_INCLUDES_DEFAULT]) ])dnl End of ACX_SSL_CHECKS dnl Check for SSL, where SSL is mandatory dnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found dnl Setup of CPPFLAGS, CFLAGS. Adds -lcrypto to LIBS. dnl Checks main header files of SSL. dnl AC_DEFUN([ACX_WITH_SSL], [ AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[ ],[ withval="yes" ]) if test x_$withval = x_no; then AC_MSG_ERROR([Need SSL library to do digital signature cryptography]) fi ACX_SSL_CHECKS($withval) ])dnl End of ACX_WITH_SSL dnl Check for SSL, where ssl is optional (--without-ssl is allowed) dnl Adds --with-ssl option, searches for openssl and defines HAVE_SSL if found dnl Setup of CPPFLAGS, CFLAGS. Adds -lcrypto to LIBS. dnl Checks main header files of SSL. dnl AC_DEFUN([ACX_WITH_SSL_OPTIONAL], [ AC_ARG_WITH(ssl, AS_HELP_STRING([--with-ssl=pathname],[enable SSL (will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr)]),[ ],[ withval="yes" ]) ACX_SSL_CHECKS($withval) ])dnl End of ACX_WITH_SSL_OPTIONAL dnl Setup to use -lssl dnl To use -lcrypto, use the ACX_WITH_SSL setup (before this one). AC_DEFUN([ACX_LIB_SSL], [ # check if libssl needs libdl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" AC_MSG_CHECKING([if libssl needs libdl]) AC_TRY_LINK_FUNC([SSL_CTX_new], [ AC_MSG_RESULT([no]) LIBS="$BAKLIBS" ] , [ AC_MSG_RESULT([yes]) LIBS="$BAKLIBS" AC_SEARCH_LIBS([dlopen], [dl]) ]) ])dnl End of ACX_LIB_SSL dnl Setup to use very large files (>2Gb). dnl setups fseeko and its own AC_DEFUN([ACX_SYS_LARGEFILE], [ AC_SYS_LARGEFILE dnl try to see if an additional _LARGEFILE_SOURCE 1 is needed to get fseeko ACX_CHECK_COMPILER_FLAG_NEEDED(-D_LARGEFILE_SOURCE=1, [ #include int test() { int a = fseeko(stdin, 0, 0); return a; } ], [CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE=1"]) ]) dnl Check getaddrinfo. dnl Works on linux, solaris, bsd and windows(links winsock). dnl defines HAVE_GETADDRINFO, USE_WINSOCK. AC_DEFUN([ACX_CHECK_GETADDRINFO_WITH_INCLUDES], [AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(for getaddrinfo) ac_cv_func_getaddrinfo=no AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #ifdef __cplusplus extern "C" { #endif char* getaddrinfo(); char* (*f) () = getaddrinfo; #ifdef __cplusplus } #endif int main() { ; return 0; } ]])], dnl this case on linux, solaris, bsd [ac_cv_func_getaddrinfo="yes" dnl see if on windows if test "$ac_cv_header_windows_h" = "yes"; then AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used]) USE_WINSOCK="1" if echo $LIBS | grep 'lws2_32' >/dev/null; then : else LIBS="$LIBS -lws2_32" fi fi ], dnl no quick getaddrinfo, try mingw32 and winsock2 library. ORIGLIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [ #ifdef HAVE_WS2TCPIP_H #include #endif ], [ (void)getaddrinfo(NULL, NULL, NULL, NULL); ] )], [ ac_cv_func_getaddrinfo="yes" dnl already: LIBS="$LIBS -lws2_32" AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used]) USE_WINSOCK="1" ], [ ac_cv_func_getaddrinfo="no" LIBS="$ORIGLIBS" ]) ) AC_MSG_RESULT($ac_cv_func_getaddrinfo) if test $ac_cv_func_getaddrinfo = yes; then AC_DEFINE(HAVE_GETADDRINFO, 1, [Whether getaddrinfo is available]) fi ])dnl Endof AC_CHECK_GETADDRINFO_WITH_INCLUDES dnl check if a function is deprecated. defines DEPRECATED_func in config.h. dnl $1: function name dnl $2: C-statement that calls the function. dnl $3: includes for the program. dnl $4: executes if yes dnl $5: executes if no AC_DEFUN([ACX_FUNC_DEPRECATED], [ AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(if $1 is deprecated) cache=`echo $1 | sed 'y%.=/+-%___p_%'` AC_CACHE_VAL(cv_cc_deprecated_$cache, [ echo '$3' >conftest.c echo 'void f(){ $2 }' >>conftest.c if test -z "`$CC -c conftest.c 2>&1 | grep deprecated`"; then eval "cv_cc_deprecated_$cache=no" else eval "cv_cc_deprecated_$cache=yes" fi rm -f conftest conftest.o conftest.c ]) if eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then AC_MSG_RESULT(yes) AC_DEFINE_UNQUOTED(AS_TR_CPP([DEPRECATED_$1]), 1, [Whether $1 is deprecated]) : $4 else AC_MSG_RESULT(no) : $5 fi ])dnl end of ACX_FUNC_DEPRECATED dnl check if select and nonblocking sockets actually work. dnl Needs fork(2) and select(2). dnl defines NONBLOCKING_IS_BROKEN, and if that is true multiple reads from dnl a nonblocking socket do not work, a new call to select is necessary. AC_DEFUN([ACX_CHECK_NONBLOCKING_BROKEN], [ AC_MSG_CHECKING([if nonblocking sockets work]) if echo $target | grep mingw32 >/dev/null; then AC_MSG_RESULT([no (windows)]) AC_DEFINE([NONBLOCKING_IS_BROKEN], 1, [Define if the network stack does not fully support nonblocking io (causes lower performance).]) else AC_RUN_IFELSE([ AC_LANG_SOURCE([[ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_TIME_H #include #endif int main(void) { int port; int sfd, cfd; int num = 10; int i, p; struct sockaddr_in a; /* test if select and nonblocking reads work well together */ /* open port. fork child to send 10 messages. select to read. then try to nonblocking read the 10 messages then, nonblocking read must give EAGAIN */ port = 12345 + (time(0)%32); sfd = socket(PF_INET, SOCK_DGRAM, 0); if(sfd == -1) { perror("socket"); return 1; } memset(&a, 0, sizeof(a)); a.sin_family = AF_INET; a.sin_port = htons(port); a.sin_addr.s_addr = inet_addr("127.0.0.1"); if(bind(sfd, (struct sockaddr*)&a, sizeof(a)) < 0) { perror("bind"); return 1; } if(fcntl(sfd, F_SETFL, O_NONBLOCK) == -1) { perror("fcntl"); return 1; } cfd = socket(PF_INET, SOCK_DGRAM, 0); if(cfd == -1) { perror("client socket"); return 1; } a.sin_port = 0; if(bind(cfd, (struct sockaddr*)&a, sizeof(a)) < 0) { perror("client bind"); return 1; } a.sin_port = htons(port); /* no handler, causes exit in 10 seconds */ alarm(10); /* send and receive on the socket */ if((p=fork()) == 0) { for(i=0; i #include #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif ]], [[ (void)mkdir("directory"); ]])],[AC_MSG_RESULT(yes) AC_DEFINE(MKDIR_HAS_ONE_ARG, 1, [Define if mkdir has one argument.]) ],[AC_MSG_RESULT(no) ]) ])dnl end of ACX_MKDIR_ONE_ARG dnl Check for ioctlsocket function. works on mingw32 too. AC_DEFUN([ACX_FUNC_IOCTLSOCKET], [ # check ioctlsocket AC_MSG_CHECKING(for ioctlsocket) AC_LINK_IFELSE([AC_LANG_PROGRAM([ #ifdef HAVE_WINSOCK2_H #include #endif ], [ (void)ioctlsocket(0, 0, NULL); ])], [ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_IOCTLSOCKET, 1, [if the function 'ioctlsocket' is available]) ],[AC_MSG_RESULT(no)]) ])dnl end of ACX_FUNC_IOCTLSOCKET dnl detect malloc and provide malloc compat prototype. dnl $1: unique name for compat code AC_DEFUN([ACX_FUNC_MALLOC], [ AC_MSG_CHECKING([for GNU libc compatible malloc]) AC_RUN_IFELSE([AC_LANG_PROGRAM( [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H #include #else char *malloc (); #endif ]], [ if(malloc(0) != 0) return 1;]) ], [AC_MSG_RESULT([no]) AC_LIBOBJ(malloc) AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if replacement function should be used.])] , [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_MALLOC], 1, [If have GNU libc compatible malloc])], [AC_MSG_RESULT([no (crosscompile)]) AC_LIBOBJ(malloc) AC_DEFINE_UNQUOTED([malloc], [rpl_malloc_$1], [Define if replacement function should be used.])] ) ]) dnl Define fallback for fseeko and ftello if needed. AC_DEFUN([AHX_CONFIG_FSEEKO], [ #ifndef HAVE_FSEEKO #define fseeko fseek #define ftello ftell #endif /* HAVE_FSEEKO */ ]) dnl Define RAND_MAX if not defined AC_DEFUN([AHX_CONFIG_RAND_MAX], [ #ifndef RAND_MAX #define RAND_MAX 2147483647 #endif ]) dnl Define MAXHOSTNAMELEN if not defined AC_DEFUN([AHX_CONFIG_MAXHOSTNAMELEN], [ #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 256 #endif ]) dnl Define IPV6_MIN_MTU if not defined AC_DEFUN([AHX_CONFIG_IPV6_MIN_MTU], [ #ifndef IPV6_MIN_MTU #define IPV6_MIN_MTU 1280 #endif /* IPV6_MIN_MTU */ ]) dnl provide snprintf, vsnprintf compat prototype dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_SNPRINTF], [ #ifndef HAVE_SNPRINTF #define snprintf snprintf_$1 #define vsnprintf vsnprintf_$1 #include int snprintf (char *str, size_t count, const char *fmt, ...); int vsnprintf (char *str, size_t count, const char *fmt, va_list arg); #endif /* HAVE_SNPRINTF */ ]) dnl provide inet_pton compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_INET_PTON], [ #ifndef HAVE_INET_PTON #define inet_pton inet_pton_$1 int inet_pton(int af, const char* src, void* dst); #endif /* HAVE_INET_PTON */ ]) dnl provide inet_ntop compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_INET_NTOP], [ #ifndef HAVE_INET_NTOP #define inet_ntop inet_ntop_$1 const char *inet_ntop(int af, const void *src, char *dst, size_t size); #endif ]) dnl provide inet_aton compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_INET_ATON], [ #ifndef HAVE_INET_ATON #define inet_aton inet_aton_$1 int inet_aton(const char *cp, struct in_addr *addr); #endif ]) dnl provide memmove compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_MEMMOVE], [ #ifndef HAVE_MEMMOVE #define memmove memmove_$1 void *memmove(void *dest, const void *src, size_t n); #endif ]) dnl provide strlcat compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_STRLCAT], [ #ifndef HAVE_STRLCAT #define strlcat strlcat_$1 size_t strlcat(char *dst, const char *src, size_t siz); #endif ]) dnl provide strlcpy compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_STRLCPY], [ #ifndef HAVE_STRLCPY #define strlcpy strlcpy_$1 size_t strlcpy(char *dst, const char *src, size_t siz); #endif ]) dnl provide gmtime_r compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_GMTIME_R], [ #ifndef HAVE_GMTIME_R #define gmtime_r gmtime_r_$1 struct tm *gmtime_r(const time_t *timep, struct tm *result); #endif ]) dnl provide reallocarray compat prototype. dnl $1: unique name for compat code AC_DEFUN([AHX_CONFIG_REALLOCARRAY], [ #ifndef HAVE_REALLOCARRAY #define reallocarray reallocarray$1 void* reallocarray(void *ptr, size_t nmemb, size_t size); #endif ]) dnl provide w32 compat definition for sleep AC_DEFUN([AHX_CONFIG_W32_SLEEP], [ #if !defined(HAVE_SLEEP) || defined(HAVE_WINDOWS_H) #define sleep(x) Sleep((x)*1000) /* on win32 */ #endif /* HAVE_SLEEP */ ]) dnl provide w32 compat definition for usleep AC_DEFUN([AHX_CONFIG_W32_USLEEP], [ #ifndef HAVE_USLEEP #define usleep(x) Sleep((x)/1000 + 1) /* on win32 */ #endif /* HAVE_USLEEP */ ]) dnl provide w32 compat definition for random AC_DEFUN([AHX_CONFIG_W32_RANDOM], [ #ifndef HAVE_RANDOM #define random rand /* on win32, for tests only (bad random) */ #endif /* HAVE_RANDOM */ ]) dnl provide w32 compat definition for srandom AC_DEFUN([AHX_CONFIG_W32_SRANDOM], [ #ifndef HAVE_SRANDOM #define srandom(x) srand(x) /* on win32, for tests only (bad random) */ #endif /* HAVE_SRANDOM */ ]) dnl provide w32 compat definition for FD_SET_T AC_DEFUN([AHX_CONFIG_W32_FD_SET_T], [ /* detect if we need to cast to unsigned int for FD_SET to avoid warnings */ #ifdef HAVE_WINSOCK2_H #define FD_SET_T (u_int) #else #define FD_SET_T #endif ]) dnl Remove an extension flag from CFLAGS, define replacement to be made. dnl Used by ACX_STRIP_EXT_FLAGS. dnl $1: the name of the flag, for example -D_GNU_SOURCE. AC_DEFUN([ACX_CFLAGS_STRIP], [ if echo $CFLAGS | grep " $1" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ $1//g'`" AC_DEFINE(m4_bpatsubst(OMITTED_$1,[[-=]],_), 1, Put $1 define in config.h) fi ]) dnl Remove EXT flags from the CFLAGS and set them to be defined in config.h dnl use with ACX_DETERMINE_EXT_FLAGS. AC_DEFUN([ACX_STRIP_EXT_FLAGS], [ AC_MSG_NOTICE([Stripping extension flags...]) ACX_CFLAGS_STRIP(-D_GNU_SOURCE) ACX_CFLAGS_STRIP(-D_BSD_SOURCE) ACX_CFLAGS_STRIP(-D_DEFAULT_SOURCE) ACX_CFLAGS_STRIP(-D__EXTENSIONS__) ACX_CFLAGS_STRIP(-D_POSIX_C_SOURCE=200112) ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE=600) ACX_CFLAGS_STRIP(-D_XOPEN_SOURCE_EXTENDED=1) ACX_CFLAGS_STRIP(-D_ALL_SOURCE) ACX_CFLAGS_STRIP(-D_LARGEFILE_SOURCE=1) ]) dnl End of ACX_STRIP_EXT_FLAGS dnl define one omitted flag for config.h dnl $1: flag name. -D_GNU_SOURCE dnl $2: replacement define. _GNU_SOURCE dnl $3: define value, 1 AC_DEFUN([AHX_CONFIG_FLAG_OMITTED], [#if defined($1) && !defined($2) #define $2 $3 [#]endif ]) dnl Wrapper for AHX_CONFIG_FLAG_OMITTED for -D style flags dnl $1: the -DNAME or -DNAME=value string. AC_DEFUN([AHX_CONFIG_FLAG_EXT], [AHX_CONFIG_FLAG_OMITTED(m4_bpatsubst(OMITTED_$1,[[-=]],_),m4_bpatsubst(m4_bpatsubst($1,-D,),=.*$,),m4_if(m4_bregexp($1,=),-1,1,m4_bpatsubst($1,^.*=,))) ]) dnl config.h part to define omitted cflags, use with ACX_STRIP_EXT_FLAGS. AC_DEFUN([AHX_CONFIG_EXT_FLAGS], [AHX_CONFIG_FLAG_EXT(-D_GNU_SOURCE) AHX_CONFIG_FLAG_EXT(-D_BSD_SOURCE) AHX_CONFIG_FLAG_EXT(-D_DEFAULT_SOURCE) AHX_CONFIG_FLAG_EXT(-D__EXTENSIONS__) AHX_CONFIG_FLAG_EXT(-D_POSIX_C_SOURCE=200112) AHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE=600) AHX_CONFIG_FLAG_EXT(-D_XOPEN_SOURCE_EXTENDED=1) AHX_CONFIG_FLAG_EXT(-D_ALL_SOURCE) AHX_CONFIG_FLAG_EXT(-D_LARGEFILE_SOURCE=1) ]) dnl check if memcmp is using signed characters and replace if so. AC_DEFUN([ACX_CHECK_MEMCMP_SIGNED], [AC_MSG_CHECKING([if memcmp compares unsigned]) AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include int main(void) { char a = 255, b = 0; if(memcmp(&a, &b, 1) < 0) return 1; return 0; } ]])], [AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes]) AC_LIBOBJ([memcmp]) ], [ AC_MSG_RESULT([cross-compile no]) AC_DEFINE([MEMCMP_IS_BROKEN], [1], [Define if memcmp() does not compare unsigned bytes]) AC_LIBOBJ([memcmp]) ]) ]) dnl define memcmp to its replacement, pass unique id for program as arg AC_DEFUN([AHX_MEMCMP_BROKEN], [ #ifdef MEMCMP_IS_BROKEN #include "compat/memcmp.h" #define memcmp memcmp_$1 int memcmp(const void *x, const void *y, size_t n); #endif ]) dnl ACX_CHECK_SS_FAMILY - check for sockaddr_storage.ss_family AC_DEFUN([ACX_CHECK_SS_FAMILY], [AC_CHECK_MEMBER([struct sockaddr_storage.ss_family], [], [ AC_CHECK_MEMBER([struct sockaddr_storage.__ss_family], [ AC_DEFINE([ss_family], [__ss_family], [Fallback member name for socket family in struct sockaddr_storage]) ],, [AC_INCLUDES_DEFAULT #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif ]) ], [AC_INCLUDES_DEFAULT #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif ]) ]) dnl Check if CC and linker support -fPIE and -pie. dnl If so, sets them in CFLAGS / LDFLAGS. AC_DEFUN([ACX_CHECK_PIE], [ AC_ARG_ENABLE([pie], AS_HELP_STRING([--enable-pie], [Enable Position-Independent Executable (eg. to fully benefit from ASLR, small performance penalty)])) AS_IF([test "x$enable_pie" = "xyes"], [ AC_MSG_CHECKING([if $CC supports PIE]) BAKLDFLAGS="$LDFLAGS" BAKCFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS -pie" CFLAGS="$CFLAGS -fPIE" AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then LDFLAGS="$BAKLDFLAGS" AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) fi rm -f conftest conftest.c conftest.o ], [LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; AC_MSG_RESULT(no)]) ]) ]) dnl Check if linker supports -Wl,-z,relro,-z,now. dnl If so, adds it to LDFLAGS. AC_DEFUN([ACX_CHECK_RELRO_NOW], [ AC_ARG_ENABLE([relro_now], AS_HELP_STRING([--enable-relro-now], [Enable full relocation binding at load-time (RELRO NOW, to protect GOT and .dtor areas)])) AS_IF([test "x$enable_relro_now" = "xyes"], [ AC_MSG_CHECKING([if $CC supports -Wl,-z,relro,-z,now]) BAKLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,-z,relro,-z,now" AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then LDFLAGS="$BAKLDFLAGS" AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) fi rm -f conftest conftest.c conftest.o ], [LDFLAGS="$BAKLDFLAGS" ; AC_MSG_RESULT(no)]) ]) ]) dnl End of file unbound-1.13.1/pythonmod/0000755000175000017500000000000014010434640014720 5ustar wouterwouterunbound-1.13.1/pythonmod/interface.i0000644000175000017500000015230714010434640017042 0ustar wouterwouter/* * interface.i: unbound python module */ %begin %{ /* store state of warning output, restored at later pop */ #pragma GCC diagnostic push /* ignore warnings for pragma below, where for older GCC it can produce a warning if the cast-function-type warning is absent. */ #pragma GCC diagnostic ignored "-Wpragmas" /* ignore gcc8 METH_NOARGS function cast warnings for swig function pointers */ #pragma GCC diagnostic ignored "-Wcast-function-type" %} %module unboundmodule %{ /* restore state of warning output, remove the functioncast ignore */ #pragma GCC diagnostic pop /** * \file * This is the interface between the unbound server and a python module * called to perform operations on queries. */ #include #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_SYS_UN_H #include #endif #include #include "config.h" #include "util/log.h" #include "util/module.h" #include "util/netevent.h" #include "util/regional.h" #include "util/config_file.h" #include "util/data/msgreply.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "util/storage/lruhash.h" #include "services/cache/dns.h" #include "services/mesh.h" #include "iterator/iter_delegpt.h" #include "iterator/iter_hints.h" #include "iterator/iter_utils.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" #include "sldns/pkthdr.h" %} %include "stdint.i" /* uint_16_t can be known type now */ %inline %{ /* converts [len][data][len][data][0] string to a List of labels (PyBytes) */ PyObject* GetNameAsLabelList(const char* name, int len) { PyObject* list; int cnt=0, i; i = 0; while (i < len) { i += ((unsigned int)name[i]) + 1; cnt++; } list = PyList_New(cnt); i = 0; cnt = 0; while (i < len) { char buf[LDNS_MAX_LABELLEN+1]; if(((unsigned int)name[i])+1 <= (unsigned int)sizeof(buf) && i+(int)((unsigned int)name[i]) < len) { memmove(buf, name + i + 1, (unsigned int)name[i]); buf[(unsigned int)name[i]] = 0; PyList_SetItem(list, cnt, PyString_FromString(buf)); } i += ((unsigned int)name[i]) + 1; cnt++; } return list; } %} /* ************************************************************************************ * Structure query_info * ************************************************************************************ */ /* Query info */ %ignore query_info::qname; %ignore query_info::qname_len; struct query_info { %immutable; char* qname; size_t qname_len; uint16_t qtype; uint16_t qclass; %mutable; }; %inline %{ enum enum_rr_class { RR_CLASS_IN = 1, RR_CLASS_CH = 3, RR_CLASS_HS = 4, RR_CLASS_NONE = 254, RR_CLASS_ANY = 255, }; enum enum_rr_type { RR_TYPE_A = 1, RR_TYPE_NS = 2, RR_TYPE_MD = 3, RR_TYPE_MF = 4, RR_TYPE_CNAME = 5, RR_TYPE_SOA = 6, RR_TYPE_MB = 7, RR_TYPE_MG = 8, RR_TYPE_MR = 9, RR_TYPE_NULL = 10, RR_TYPE_WKS = 11, RR_TYPE_PTR = 12, RR_TYPE_HINFO = 13, RR_TYPE_MINFO = 14, RR_TYPE_MX = 15, RR_TYPE_TXT = 16, RR_TYPE_RP = 17, RR_TYPE_AFSDB = 18, RR_TYPE_X25 = 19, RR_TYPE_ISDN = 20, RR_TYPE_RT = 21, RR_TYPE_NSAP = 22, RR_TYPE_NSAP_PTR = 23, RR_TYPE_SIG = 24, RR_TYPE_KEY = 25, RR_TYPE_PX = 26, RR_TYPE_GPOS = 27, RR_TYPE_AAAA = 28, RR_TYPE_LOC = 29, RR_TYPE_NXT = 30, RR_TYPE_EID = 31, RR_TYPE_NIMLOC = 32, RR_TYPE_SRV = 33, RR_TYPE_ATMA = 34, RR_TYPE_NAPTR = 35, RR_TYPE_KX = 36, RR_TYPE_CERT = 37, RR_TYPE_A6 = 38, RR_TYPE_DNAME = 39, RR_TYPE_SINK = 40, RR_TYPE_OPT = 41, RR_TYPE_APL = 42, RR_TYPE_DS = 43, RR_TYPE_SSHFP = 44, RR_TYPE_IPSECKEY = 45, RR_TYPE_RRSIG = 46, RR_TYPE_NSEC = 47, RR_TYPE_DNSKEY = 48, RR_TYPE_DHCID = 49, RR_TYPE_NSEC3 = 50, RR_TYPE_NSEC3PARAMS = 51, RR_TYPE_UINFO = 100, RR_TYPE_UID = 101, RR_TYPE_GID = 102, RR_TYPE_UNSPEC = 103, RR_TYPE_TSIG = 250, RR_TYPE_IXFR = 251, RR_TYPE_AXFR = 252, RR_TYPE_MAILB = 253, RR_TYPE_MAILA = 254, RR_TYPE_ANY = 255, RR_TYPE_DLV = 32769, }; PyObject* _get_qname(struct query_info* q) { return PyBytes_FromStringAndSize((char*)q->qname, q->qname_len); } PyObject* _get_qname_components(struct query_info* q) { return GetNameAsLabelList((const char*)q->qname, q->qname_len); } %} %inline %{ PyObject* dnameAsStr(PyObject* dname) { char buf[LDNS_MAX_DOMAINLEN+1]; buf[0] = '\0'; dname_str((uint8_t*)PyBytes_AsString(dname), buf); return PyString_FromString(buf); } %} %extend query_info { %pythoncode %{ def _get_qtype_str(self): return sldns_wire2str_type(self.qtype) qtype_str = property(_get_qtype_str) def _get_qclass_str(self): return sldns_wire2str_class(self.qclass) qclass_str = property(_get_qclass_str) qname = property(_unboundmodule._get_qname) qname_list = property(_unboundmodule._get_qname_components) def _get_qname_str(self): return dnameAsStr(self.qname) qname_str = property(_get_qname_str) %} } /* ************************************************************************************ * Structure packed_rrset_key * ************************************************************************************ */ %ignore packed_rrset_key::dname; %ignore packed_rrset_key::dname_len; /* RRsets */ struct packed_rrset_key { %immutable; char* dname; size_t dname_len; uint32_t flags; uint16_t type; /* rrset type in network format */ uint16_t rrset_class; /* rrset class in network format */ %mutable; }; /** * This subroutine converts values between the host and network byte order. * Specifically, ntohs() converts 16-bit quantities from network byte order to * host byte order. */ uint16_t ntohs(uint16_t netshort); %inline %{ PyObject* _get_dname(struct packed_rrset_key* k) { return PyBytes_FromStringAndSize((char*)k->dname, k->dname_len); } PyObject* _get_dname_components(struct packed_rrset_key* k) { return GetNameAsLabelList((char*)k->dname, k->dname_len); } %} %extend packed_rrset_key { %pythoncode %{ def _get_type_str(self): return sldns_wire2str_type(_unboundmodule.ntohs(self.type)) type_str = property(_get_type_str) def _get_class_str(self): return sldns_wire2str_class(_unboundmodule.ntohs(self.rrset_class)) rrset_class_str = property(_get_class_str) dname = property(_unboundmodule._get_dname) dname_list = property(_unboundmodule._get_dname_components) def _get_dname_str(self): return dnameAsStr(self.dname) dname_str = property(_get_dname_str) %} } #if defined(SWIGWORDSIZE64) typedef long int rrset_id_type; #else typedef long long int rrset_id_type; #endif struct ub_packed_rrset_key { struct lruhash_entry entry; rrset_id_type id; struct packed_rrset_key rk; }; struct lruhash_entry { lock_rw_type lock; struct lruhash_entry* overflow_next; struct lruhash_entry* lru_next; struct lruhash_entry* lru_prev; hashvalue_type hash; void* key; struct packed_rrset_data* data; }; %ignore packed_rrset_data::rr_len; %ignore packed_rrset_data::rr_ttl; %ignore packed_rrset_data::rr_data; struct packed_rrset_data { /* TTL (in seconds like time()) */ uint32_t ttl; /* number of rrs */ size_t count; /* number of rrsigs */ size_t rrsig_count; enum rrset_trust trust; enum sec_status security; /* length of every rr's rdata */ size_t* rr_len; /* ttl of every rr */ uint32_t *rr_ttl; /* array of pointers to every rr's rdata. The rr_data[i] rdata is stored in * uncompressed wireformat. */ uint8_t** rr_data; }; %pythoncode %{ class RRSetData_RRLen: def __init__(self, obj): self.obj = obj def __getitem__(self, index): return _unboundmodule._get_data_rr_len(self.obj, index) def __len__(self): return self.obj.count + self.obj.rrsig_count class RRSetData_RRTTL: def __init__(self, obj): self.obj = obj def __getitem__(self, index): return _unboundmodule._get_data_rr_ttl(self.obj, index) def __setitem__(self, index, value): _unboundmodule._set_data_rr_ttl(self.obj, index, value) def __len__(self): return self.obj.count + self.obj.rrsig_count class RRSetData_RRData: def __init__(self, obj): self.obj = obj def __getitem__(self, index): return _unboundmodule._get_data_rr_data(self.obj, index) def __len__(self): return self.obj.count + self.obj.rrsig_count %} %inline %{ PyObject* _get_data_rr_len(struct packed_rrset_data* d, int idx) { if ((d != NULL) && (idx >= 0) && ((size_t)idx < (d->count+d->rrsig_count))) return PyInt_FromLong(d->rr_len[idx]); return Py_None; } void _set_data_rr_ttl(struct packed_rrset_data* d, int idx, uint32_t ttl) { if ((d != NULL) && (idx >= 0) && ((size_t)idx < (d->count+d->rrsig_count))) d->rr_ttl[idx] = ttl; } PyObject* _get_data_rr_ttl(struct packed_rrset_data* d, int idx) { if ((d != NULL) && (idx >= 0) && ((size_t)idx < (d->count+d->rrsig_count))) return PyInt_FromLong(d->rr_ttl[idx]); return Py_None; } PyObject* _get_data_rr_data(struct packed_rrset_data* d, int idx) { if ((d != NULL) && (idx >= 0) && ((size_t)idx < (d->count+d->rrsig_count))) return PyBytes_FromStringAndSize((char*)d->rr_data[idx], d->rr_len[idx]); return Py_None; } %} %extend packed_rrset_data { %pythoncode %{ def _get_data_rr_len(self): return RRSetData_RRLen(self) rr_len = property(_get_data_rr_len) def _get_data_rr_ttl(self): return RRSetData_RRTTL(self) rr_ttl = property(_get_data_rr_ttl) def _get_data_rr_data(self): return RRSetData_RRData(self) rr_data = property(_get_data_rr_data) %} } /* ************************************************************************************ * Structure reply_info * ************************************************************************************ */ /* Messages */ %ignore reply_info::rrsets; %ignore reply_info::ref; struct reply_info { uint16_t flags; uint16_t qdcount; uint32_t ttl; uint32_t prefetch_ttl; uint16_t authoritative; enum sec_status security; size_t an_numrrsets; size_t ns_numrrsets; size_t ar_numrrsets; size_t rrset_count; /* an_numrrsets + ns_numrrsets + ar_numrrsets */ struct ub_packed_rrset_key** rrsets; struct rrset_ref ref[1]; /* ? */ }; struct rrset_ref { struct ub_packed_rrset_key* key; rrset_id_type id; }; struct dns_msg { struct query_info qinfo; struct reply_info *rep; }; %pythoncode %{ class ReplyInfo_RRSet: def __init__(self, obj): self.obj = obj def __getitem__(self, index): return _unboundmodule._rrset_rrsets_get(self.obj, index) def __len__(self): return self.obj.rrset_count class ReplyInfo_Ref: def __init__(self, obj): self.obj = obj def __getitem__(self, index): return _unboundmodule._rrset_ref_get(self.obj, index) def __len__(self): return self.obj.rrset_count %} %inline %{ struct ub_packed_rrset_key* _rrset_rrsets_get(struct reply_info* r, int idx) { if ((r != NULL) && (idx >= 0) && ((size_t)idx < r->rrset_count)) return r->rrsets[idx]; return NULL; } struct rrset_ref* _rrset_ref_get(struct reply_info* r, int idx) { if ((r != NULL) && (idx >= 0) && ((size_t)idx < r->rrset_count)) { /* printf("_rrset_ref_get: %lX key:%lX\n", r->ref + idx, r->ref[idx].key); */ return &(r->ref[idx]); /* return &(r->ref[idx]); */ } /* printf("_rrset_ref_get: NULL\n"); */ return NULL; } %} %extend reply_info { %pythoncode %{ def _rrset_ref_get(self): return ReplyInfo_Ref(self) ref = property(_rrset_ref_get) def _rrset_rrsets_get(self): return ReplyInfo_RRSet(self) rrsets = property(_rrset_rrsets_get) %} } /* ************************************************************************************ * Structure sockaddr_storage * ************************************************************************************ */ struct sockaddr_storage {}; %inline %{ static size_t _sockaddr_storage_len(const struct sockaddr_storage *ss) { if (ss == NULL) { return 0; } switch (ss->ss_family) { case AF_INET: return sizeof(struct sockaddr_in); case AF_INET6: return sizeof(struct sockaddr_in6); #ifdef HAVE_SYS_UN_H case AF_UNIX: return sizeof(struct sockaddr_un); #endif default: return 0; } } PyObject *_sockaddr_storage_family(const struct sockaddr_storage *ss) { if (ss == NULL) { return Py_None; } switch (ss->ss_family) { case AF_INET: return PyUnicode_FromString("ip4"); case AF_INET6: return PyUnicode_FromString("ip6"); case AF_UNIX: return PyUnicode_FromString("unix"); default: return Py_None; } } PyObject *_sockaddr_storage_addr(const struct sockaddr_storage *ss) { const struct sockaddr *sa; size_t sa_len; char name[NI_MAXHOST] = {0}; if (ss == NULL) { return Py_None; } sa = (struct sockaddr *)ss; sa_len = _sockaddr_storage_len(ss); if (sa_len == 0) { return Py_None; } if (getnameinfo(sa, sa_len, name, sizeof(name), NULL, 0, NI_NUMERICHOST) != 0) { return Py_None; } return PyUnicode_FromString(name); } PyObject *_sockaddr_storage_raw_addr(const struct sockaddr_storage *ss) { size_t sa_len; if (ss == NULL) { return Py_None; } sa_len = _sockaddr_storage_len(ss); if (sa_len == 0) { return Py_None; } if (ss->ss_family == AF_INET) { const struct sockaddr_in *sa = (struct sockaddr_in *)ss; const struct in_addr *raw = (struct in_addr *)&sa->sin_addr; return PyBytes_FromStringAndSize((const char *)raw, sizeof(*raw)); } if (ss->ss_family == AF_INET6) { const struct sockaddr_in6 *sa = (struct sockaddr_in6 *)ss; const struct in6_addr *raw = (struct in6_addr *)&sa->sin6_addr; return PyBytes_FromStringAndSize((const char *)raw, sizeof(*raw)); } #ifdef HAVE_SYS_UN_H if (ss->ss_family == AF_UNIX) { const struct sockaddr_un *sa = (struct sockaddr_un *)ss; return PyBytes_FromString(sa->sun_path); } #endif return Py_None; } PyObject *_sockaddr_storage_port(const struct sockaddr_storage *ss) { if (ss == NULL) { return Py_None; } if (ss->ss_family == AF_INET) { const struct sockaddr_in *sa4 = (struct sockaddr_in *)ss; return PyInt_FromLong(ntohs(sa4->sin_port)); } if (ss->ss_family == AF_INET6) { const struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)ss; return PyInt_FromLong(ntohs(sa6->sin6_port)); } return Py_None; } PyObject *_sockaddr_storage_flowinfo(const struct sockaddr_storage *ss) { const struct sockaddr_in6 *sa6; if (ss == NULL || ss->ss_family != AF_INET6) { return Py_None; } sa6 = (struct sockaddr_in6 *)ss; return PyInt_FromLong(ntohl(sa6->sin6_flowinfo)); } PyObject *_sockaddr_storage_scope_id(const struct sockaddr_storage *ss) { const struct sockaddr_in6 *sa6; if (ss == NULL || ss->ss_family != AF_INET6) { return Py_None; } sa6 = (struct sockaddr_in6 *)ss; return PyInt_FromLong(ntohl(sa6->sin6_scope_id)); } %} %extend sockaddr_storage { %pythoncode %{ def _family_get(self): return _sockaddr_storage_family(self) family = property(_family_get) def _addr_get(self): return _sockaddr_storage_addr(self) addr = property(_addr_get) def _raw_addr_get(self): return _sockaddr_storage_raw_addr(self) raw_addr = property(_raw_addr_get) def _port_get(self): return _sockaddr_storage_port(self) port = property(_port_get) def _flowinfo_get(self): return _sockaddr_storage_flowinfo(self) flowinfo = property(_flowinfo_get) def _scope_id_get(self): return _sockaddr_storage_scope_id(self) scope_id = property(_scope_id_get) %} } /* ************************************************************************************ * Structure mesh_state * ************************************************************************************ */ struct mesh_state { struct mesh_reply* reply_list; }; struct mesh_reply { struct mesh_reply* next; struct comm_reply query_reply; }; %rename(_addr) comm_reply::addr; struct comm_reply { struct sockaddr_storage addr; }; %extend comm_reply { %pythoncode %{ def _addr_get(self): return _sockaddr_storage_addr(self._addr) addr = property(_addr_get) def _port_get(self): return _sockaddr_storage_port(self._addr) port = property(_port_get) def _family_get(self): return _sockaddr_storage_family(self._addr) family = property(_family_get) %} } /* ************************************************************************************ * Structure edns_option * ************************************************************************************ */ /* Rename the members to follow the python convention of marking them as * private. Access to the opt_code and opt_data members is given by the later * python defined code and data members respectively. */ %rename(_next) edns_option::next; %rename(_opt_code) edns_option::opt_code; %rename(_opt_len) edns_option::opt_len; %rename(_opt_data) edns_option::opt_data; struct edns_option { struct edns_option* next; uint16_t opt_code; size_t opt_len; uint8_t* opt_data; }; %inline %{ PyObject* _edns_option_opt_code_get(struct edns_option* option) { uint16_t opt_code = option->opt_code; return PyInt_FromLong(opt_code); } PyObject* _edns_option_opt_data_get(struct edns_option* option) { return PyByteArray_FromStringAndSize((void*)option->opt_data, option->opt_len); } %} %extend edns_option { %pythoncode %{ def _opt_code_get(self): return _edns_option_opt_code_get(self) code = property(_opt_code_get) def _opt_data_get(self): return _edns_option_opt_data_get(self) data = property(_opt_data_get) %} } /* ************************************************************************************ * Structure edns_data * ************************************************************************************ */ /* This is ignored because we will pass a double pointer of this to Python * with custom getmethods. This is done to bypass Swig's behavior to pass NULL * pointers as None. */ %ignore edns_data::opt_list; struct edns_data { int edns_present; uint8_t ext_rcode; uint8_t edns_version; uint16_t bits; uint16_t udp_size; struct edns_option* opt_list; }; %inline %{ struct edns_option** _edns_data_opt_list_get(struct edns_data* edns) { return &edns->opt_list; } %} %extend edns_data { %pythoncode %{ def _opt_list_iter(self): return EdnsOptsListIter(self.opt_list) opt_list_iter = property(_opt_list_iter) def _opt_list(self): return _edns_data_opt_list_get(self) opt_list = property(_opt_list) %} } /* ************************************************************************************ * Structure module_env * ************************************************************************************ */ %rename(_now) module_env::now; %rename(_now_tv) module_env::now_tv; struct module_env { struct config_file* cfg; struct slabhash* msg_cache; struct rrset_cache* rrset_cache; struct infra_cache* infra_cache; struct key_cache* key_cache; /* --- services --- */ struct outbound_entry* (*send_query)(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q); void (*detach_subs)(struct module_qstate* qstate); int (*attach_sub)(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq); void (*kill_sub)(struct module_qstate* newq); int (*detect_cycle)(struct module_qstate* qstate, struct query_info* qinfo, uint16_t flags, int prime, int valrec); struct regional* scratch; struct sldns_buffer* scratch_buffer; struct worker* worker; struct mesh_area* mesh; struct alloc_cache* alloc; struct ub_randstate* rnd; time_t* now; struct timeval* now_tv; int need_to_validate; struct val_anchors* anchors; struct val_neg_cache* neg_cache; struct comm_timer* probe_timer; struct iter_forwards* fwds; struct iter_hints* hints; void* modinfo[MAX_MODULE]; void* inplace_cb_lists[inplace_cb_types_total]; struct edns_known_option* edns_known_options; size_t edns_known_options_num; }; %inline %{ PyObject* _module_env_now_get(struct module_env* env) { double ts = env->now_tv->tv_sec + env->now_tv->tv_usec / 1e6; return PyFloat_FromDouble(ts); } %} %extend module_env { %pythoncode %{ def _now_get(self): return _module_env_now_get(self) now = property(_now_get) %} } /* ************************************************************************************ * Structure module_qstate * ************************************************************************************ */ %ignore module_qstate::ext_state; %ignore module_qstate::minfo; /* These are ignored because we will pass a double pointer of them to Python * with custom getmethods. This is done to bypass Swig's behavior to pass NULL * pointers as None. */ %ignore module_qstate::edns_opts_front_in; %ignore module_qstate::edns_opts_back_out; %ignore module_qstate::edns_opts_back_in; %ignore module_qstate::edns_opts_front_out; /* Query state */ struct module_qstate { struct query_info qinfo; uint16_t query_flags; /* See QF_BIT_xx constants */ int is_priming; int is_valrec; struct comm_reply* reply; struct dns_msg* return_msg; int return_rcode; struct regional* region; /* unwrapped */ int curmod; enum module_ext_state ext_state[MAX_MODULE]; void* minfo[MAX_MODULE]; time_t prefetch_leeway; struct module_env* env; /* unwrapped */ struct mesh_state* mesh_info; struct edns_option* edns_opts_front_in; struct edns_option* edns_opts_back_out; struct edns_option* edns_opts_back_in; struct edns_option* edns_opts_front_out; int no_cache_lookup; int no_cache_store; }; %constant int MODULE_COUNT = MAX_MODULE; %constant int QF_BIT_CD = 0x0010; %constant int QF_BIT_AD = 0x0020; %constant int QF_BIT_Z = 0x0040; %constant int QF_BIT_RA = 0x0080; %constant int QF_BIT_RD = 0x0100; %constant int QF_BIT_TC = 0x0200; %constant int QF_BIT_AA = 0x0400; %constant int QF_BIT_QR = 0x8000; %inline %{ enum enum_return_rcode { RCODE_NOERROR = 0, RCODE_FORMERR = 1, RCODE_SERVFAIL = 2, RCODE_NXDOMAIN = 3, RCODE_NOTIMPL = 4, RCODE_REFUSED = 5, RCODE_YXDOMAIN = 6, RCODE_YXRRSET = 7, RCODE_NXRRSET = 8, RCODE_NOTAUTH = 9, RCODE_NOTZONE = 10 }; %} %pythoncode %{ class ExtState: def __init__(self, obj): self.obj = obj def __str__(self): return ", ".join([_unboundmodule.strextstate(_unboundmodule._ext_state_get(self.obj,a)) for a in range(0, _unboundmodule.MODULE_COUNT)]) def __getitem__(self, index): return _unboundmodule._ext_state_get(self.obj, index) def __setitem__(self, index, value): _unboundmodule._ext_state_set(self.obj, index, value) def __len__(self): return _unboundmodule.MODULE_COUNT class EdnsOptsListIter: def __init__(self, obj): self._current = obj self._temp = None def __iter__(self): return self def __next__(self): """Python 3 compatibility""" return self._get_next() def next(self): """Python 2 compatibility""" return self._get_next() def _get_next(self): if not edns_opt_list_is_empty(self._current): self._temp = self._current self._current = _p_p_edns_option_get_next(self._current) return _dereference_edns_option(self._temp) else: raise StopIteration %} %inline %{ enum module_ext_state _ext_state_get(struct module_qstate* q, int idx) { if ((q != NULL) && (idx >= 0) && (idx < MAX_MODULE)) { return q->ext_state[idx]; } return 0; } void _ext_state_set(struct module_qstate* q, int idx, enum module_ext_state state) { if ((q != NULL) && (idx >= 0) && (idx < MAX_MODULE)) { q->ext_state[idx] = state; } } int edns_opt_list_is_empty(struct edns_option** opt) { if (!opt || !(*opt)) return 1; return 0; } struct edns_option* _dereference_edns_option(struct edns_option** opt) { if (!opt) return NULL; return *opt; } struct edns_option** _p_p_edns_option_get_next(struct edns_option** opt) { return &(*opt)->next; } struct edns_option** _edns_opts_front_in_get(struct module_qstate* q) { return &q->edns_opts_front_in; } struct edns_option** _edns_opts_back_out_get(struct module_qstate* q) { return &q->edns_opts_back_out; } struct edns_option** _edns_opts_back_in_get(struct module_qstate* q) { return &q->edns_opts_back_in; } struct edns_option** _edns_opts_front_out_get(struct module_qstate* q) { return &q->edns_opts_front_out; } %} %extend module_qstate { %pythoncode %{ def set_ext_state(self, id, state): """Sets the ext state""" _unboundmodule._ext_state_set(self, id, state) def __ext_state_get(self): return ExtState(self) ext_state = property(__ext_state_get) #, __ext_state_set def _edns_opts_front_in_iter(self): return EdnsOptsListIter(self.edns_opts_front_in) edns_opts_front_in_iter = property(_edns_opts_front_in_iter) def _edns_opts_back_out_iter(self): return EdnsOptsListIter(self.edns_opts_back_out) edns_opts_back_out_iter = property(_edns_opts_back_out_iter) def _edns_opts_back_in_iter(self): return EdnsOptsListIter(self.edns_opts_back_in) edns_opts_back_in_iter = property(_edns_opts_back_in_iter) def _edns_opts_front_out_iter(self): return EdnsOptsListIter(self.edns_opts_front_out) edns_opts_front_out_iter = property(_edns_opts_front_out_iter) def _edns_opts_front_in(self): return _edns_opts_front_in_get(self) edns_opts_front_in = property(_edns_opts_front_in) def _edns_opts_back_out(self): return _edns_opts_back_out_get(self) edns_opts_back_out = property(_edns_opts_back_out) def _edns_opts_back_in(self): return _edns_opts_back_in_get(self) edns_opts_back_in = property(_edns_opts_back_in) def _edns_opts_front_out(self): return _edns_opts_front_out_get(self) edns_opts_front_out = property(_edns_opts_front_out) %} } /* ************************************************************************************ * Structure config_strlist * ************************************************************************************ */ struct config_strlist { struct config_strlist* next; char* str; }; /* ************************************************************************************ * Structure config_str2list * ************************************************************************************ */ struct config_str2list { struct config_str2list* next; char* str; char* str2; }; /* ************************************************************************************ * Structure config_file * ************************************************************************************ */ struct config_file { int verbosity; int stat_interval; int stat_cumulative; int stat_extended; int num_threads; int port; int do_ip4; int do_ip6; int do_udp; int do_tcp; int outgoing_num_ports; size_t outgoing_num_tcp; size_t incoming_num_tcp; int* outgoing_avail_ports; size_t msg_buffer_size; size_t msg_cache_size; size_t msg_cache_slabs; size_t num_queries_per_thread; size_t jostle_time; size_t rrset_cache_size; size_t rrset_cache_slabs; int host_ttl; size_t infra_cache_slabs; size_t infra_cache_numhosts; char* target_fetch_policy; int if_automatic; int num_ifs; char **ifs; int num_out_ifs; char **out_ifs; struct config_strlist* root_hints; struct config_stub* stubs; struct config_stub* forwards; struct config_strlist* donotqueryaddrs; struct config_str2list* acls; int donotquery_localhost; int harden_short_bufsize; int harden_large_queries; int harden_glue; int harden_dnssec_stripped; int harden_referral_path; int use_caps_bits_for_id; struct config_strlist* private_address; struct config_strlist* private_domain; size_t unwanted_threshold; char* chrootdir; char* username; char* directory; char* logfile; char* pidfile; int use_syslog; int hide_identity; int hide_version; char* identity; char* version; char* module_conf; struct config_strlist* trust_anchor_file_list; struct config_strlist* trust_anchor_list; struct config_strlist* trusted_keys_file_list; int max_ttl; int32_t val_date_override; int bogus_ttl; int val_clean_additional; int val_permissive_mode; char* val_nsec3_key_iterations; size_t key_cache_size; size_t key_cache_slabs; size_t neg_cache_size; struct config_str2list* local_zones; struct config_strlist* local_zones_nodefault; struct config_strlist* local_data; int remote_control_enable; struct config_strlist_head control_ifs; int control_port; char* server_key_file; char* server_cert_file; char* control_key_file; char* control_cert_file; int do_daemonize; struct config_strlist* python_script; }; /* ************************************************************************************ * ASN: Adding structures related to forwards_lookup and dns_cache_find_delegation * ************************************************************************************ */ struct delegpt_ns { struct delegpt_ns* next; int resolved; uint8_t got4; uint8_t got6; uint8_t lame; uint8_t done_pside4; uint8_t done_pside6; }; struct delegpt_addr { struct delegpt_addr* next_result; struct delegpt_addr* next_usable; struct delegpt_addr* next_target; int attempts; int sel_rtt; int bogus; int lame; }; struct delegpt { int namelabs; struct delegpt_ns* nslist; struct delegpt_addr* target_list; struct delegpt_addr* usable_list; struct delegpt_addr* result_list; int bogus; uint8_t has_parent_side_NS; uint8_t dp_type_mlc; }; %inline %{ PyObject* _get_dp_dname(struct delegpt* dp) { return PyBytes_FromStringAndSize((char*)dp->name, dp->namelen); } PyObject* _get_dp_dname_components(struct delegpt* dp) { return GetNameAsLabelList((char*)dp->name, dp->namelen); } PyObject* _get_dpns_dname(struct delegpt_ns* dpns) { return PyBytes_FromStringAndSize((char*)dpns->name, dpns->namelen); } PyObject* _get_dpns_dname_components(struct delegpt_ns* dpns) { return GetNameAsLabelList((char*)dpns->name, dpns->namelen); } PyObject* _delegpt_addr_addr_get(struct delegpt_addr* target) { char dest[64]; delegpt_addr_addr2str(target, dest, 64); if (dest[0] == 0) return Py_None; return PyBytes_FromString(dest); } %} %extend delegpt { %pythoncode %{ dname = property(_unboundmodule._get_dp_dname) dname_list = property(_unboundmodule._get_dp_dname_components) def _get_dname_str(self): return dnameAsStr(self.dname) dname_str = property(_get_dname_str) %} } %extend delegpt_ns { %pythoncode %{ dname = property(_unboundmodule._get_dpns_dname) dname_list = property(_unboundmodule._get_dpns_dname_components) def _get_dname_str(self): return dnameAsStr(self.dname) dname_str = property(_get_dname_str) %} } %extend delegpt_addr { %pythoncode %{ def _addr_get(self): return _delegpt_addr_addr_get(self) addr = property(_addr_get) %} } /* ************************************************************************************ * Enums * ************************************************************************************ */ %rename ("MODULE_STATE_INITIAL") "module_state_initial"; %rename ("MODULE_WAIT_REPLY") "module_wait_reply"; %rename ("MODULE_WAIT_MODULE") "module_wait_module"; %rename ("MODULE_RESTART_NEXT") "module_restart_next"; %rename ("MODULE_WAIT_SUBQUERY") "module_wait_subquery"; %rename ("MODULE_ERROR") "module_error"; %rename ("MODULE_FINISHED") "module_finished"; enum module_ext_state { module_state_initial = 0, module_wait_reply, module_wait_module, module_restart_next, module_wait_subquery, module_error, module_finished }; %rename ("MODULE_EVENT_NEW") "module_event_new"; %rename ("MODULE_EVENT_PASS") "module_event_pass"; %rename ("MODULE_EVENT_REPLY") "module_event_reply"; %rename ("MODULE_EVENT_NOREPLY") "module_event_noreply"; %rename ("MODULE_EVENT_CAPSFAIL") "module_event_capsfail"; %rename ("MODULE_EVENT_MODDONE") "module_event_moddone"; %rename ("MODULE_EVENT_ERROR") "module_event_error"; enum module_ev { module_event_new = 0, module_event_pass, module_event_reply, module_event_noreply, module_event_capsfail, module_event_moddone, module_event_error }; enum sec_status { sec_status_unchecked = 0, sec_status_bogus, sec_status_indeterminate, sec_status_insecure, sec_status_secure }; enum verbosity_value { NO_VERBOSE = 0, VERB_OPS, VERB_DETAIL, VERB_QUERY, VERB_ALGO }; enum inplace_cb_list_type { /* Inplace callbacks for when a resolved reply is ready to be sent to the * front.*/ inplace_cb_reply = 0, /* Inplace callbacks for when a reply is given from the cache. */ inplace_cb_reply_cache, /* Inplace callbacks for when a reply is given with local data * (or Chaos reply). */ inplace_cb_reply_local, /* Inplace callbacks for when the reply is servfail. */ inplace_cb_reply_servfail, /* Inplace callbacks for when a query is ready to be sent to the back.*/ inplace_cb_query, /* Inplace callback for when a reply is received from the back. */ inplace_cb_edns_back_parsed, /* Total number of types. Used for array initialization. * Should always be last. */ inplace_cb_types_total }; %constant uint16_t PKT_QR = 1; /* QueRy - query flag */ %constant uint16_t PKT_AA = 2; /* Authoritative Answer - server flag */ %constant uint16_t PKT_TC = 4; /* TrunCated - server flag */ %constant uint16_t PKT_RD = 8; /* Recursion Desired - query flag */ %constant uint16_t PKT_CD = 16; /* Checking Disabled - query flag */ %constant uint16_t PKT_RA = 32; /* Recursion Available - server flag */ %constant uint16_t PKT_AD = 64; /* Authenticated Data - server flag */ %{ int checkList(PyObject *l) { PyObject* item; int i; if (l == Py_None) return 1; if (PyList_Check(l)) { for (i=0; i < PyList_Size(l); i++) { item = PyList_GetItem(l, i); if (!PyBytes_Check(item) && !PyUnicode_Check(item)) return 0; } return 1; } return 0; } int pushRRList(sldns_buffer* qb, PyObject *l, uint32_t default_ttl, int qsec, size_t count_offset) { PyObject* item; int i; size_t len; char* s; PyObject* ascstr; for (i=0; i < PyList_Size(l); i++) { ascstr = NULL; item = PyList_GetItem(l, i); if(PyObject_TypeCheck(item, &PyBytes_Type)) { s = PyBytes_AsString(item); } else { ascstr = PyUnicode_AsASCIIString(item); s = PyBytes_AsString(ascstr); } len = sldns_buffer_remaining(qb); if(qsec) { if(sldns_str2wire_rr_question_buf(s, sldns_buffer_current(qb), &len, NULL, NULL, 0, NULL, 0) != 0) { if(ascstr) Py_DECREF(ascstr); return 0; } } else { if(sldns_str2wire_rr_buf(s, sldns_buffer_current(qb), &len, NULL, default_ttl, NULL, 0, NULL, 0) != 0) { if(ascstr) Py_DECREF(ascstr); return 0; } } if(ascstr) Py_DECREF(ascstr); sldns_buffer_skip(qb, len); sldns_buffer_write_u16_at(qb, count_offset, sldns_buffer_read_u16_at(qb, count_offset)+1); } return 1; } int set_return_msg(struct module_qstate* qstate, const char* rr_name, sldns_rr_type rr_type, sldns_rr_class rr_class , uint16_t flags, uint32_t default_ttl, PyObject* question, PyObject* answer, PyObject* authority, PyObject* additional) { sldns_buffer *qb = 0; int res = 1; size_t l; uint16_t PKT_QR = 1; uint16_t PKT_AA = 2; uint16_t PKT_TC = 4; uint16_t PKT_RD = 8; uint16_t PKT_CD = 16; uint16_t PKT_RA = 32; uint16_t PKT_AD = 64; if ((!checkList(question)) || (!checkList(answer)) || (!checkList(authority)) || (!checkList(additional))) return 0; if ((qb = sldns_buffer_new(LDNS_RR_BUF_SIZE)) == 0) return 0; /* write header */ sldns_buffer_write_u16(qb, 0); /* ID */ sldns_buffer_write_u16(qb, 0); /* flags */ sldns_buffer_write_u16(qb, 1); /* qdcount */ sldns_buffer_write_u16(qb, 0); /* ancount */ sldns_buffer_write_u16(qb, 0); /* nscount */ sldns_buffer_write_u16(qb, 0); /* arcount */ if ((flags&PKT_QR)) LDNS_QR_SET(sldns_buffer_begin(qb)); if ((flags&PKT_AA)) LDNS_AA_SET(sldns_buffer_begin(qb)); if ((flags&PKT_TC)) LDNS_TC_SET(sldns_buffer_begin(qb)); if ((flags&PKT_RD)) LDNS_RD_SET(sldns_buffer_begin(qb)); if ((flags&PKT_CD)) LDNS_CD_SET(sldns_buffer_begin(qb)); if ((flags&PKT_RA)) LDNS_RA_SET(sldns_buffer_begin(qb)); if ((flags&PKT_AD)) LDNS_AD_SET(sldns_buffer_begin(qb)); /* write the query */ l = sldns_buffer_remaining(qb); if(sldns_str2wire_dname_buf(rr_name, sldns_buffer_current(qb), &l) != 0) { sldns_buffer_free(qb); return 0; } sldns_buffer_skip(qb, l); if (rr_type == 0) { rr_type = LDNS_RR_TYPE_A; } if (rr_class == 0) { rr_class = LDNS_RR_CLASS_IN; } sldns_buffer_write_u16(qb, rr_type); sldns_buffer_write_u16(qb, rr_class); /* write RR sections */ if(res && !pushRRList(qb, question, default_ttl, 1, LDNS_QDCOUNT_OFF)) res = 0; if(res && !pushRRList(qb, answer, default_ttl, 0, LDNS_ANCOUNT_OFF)) res = 0; if(res && !pushRRList(qb, authority, default_ttl, 0, LDNS_NSCOUNT_OFF)) res = 0; if(res && !pushRRList(qb, additional, default_ttl, 0, LDNS_ARCOUNT_OFF)) res = 0; if (res) res = createResponse(qstate, qb); if (qb) sldns_buffer_free(qb); return res; } %} int set_return_msg(struct module_qstate* qstate, const char* rr_name, int rr_type, int rr_class , uint16_t flags, uint32_t default_ttl, PyObject* question, PyObject* answer, PyObject* authority, PyObject* additional); %pythoncode %{ class DNSMessage: def __init__(self, rr_name, rr_type, rr_class = RR_CLASS_IN, query_flags = 0, default_ttl = 0): """Query flags is a combination of PKT_xx contants""" self.rr_name = rr_name self.rr_type = rr_type self.rr_class = rr_class self.default_ttl = default_ttl self.query_flags = query_flags self.question = [] self.answer = [] self.authority = [] self.additional = [] def set_return_msg(self, qstate): """Returns 1 if OK""" status = _unboundmodule.set_return_msg(qstate, self.rr_name, self.rr_type, self.rr_class, self.query_flags, self.default_ttl, self.question, self.answer, self.authority, self.additional) if (status) and (PKT_AA & self.query_flags): qstate.return_msg.rep.authoritative = 1 return status %} /* ************************************************************************************ * ASN: Delegation pointer related functions * ************************************************************************************ */ /* Functions which we will need to lookup delegations */ struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct regional* region, struct dns_msg** msg, uint32_t timenow); int iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags, struct delegpt* dp); struct iter_hints_stub* hints_lookup_stub(struct iter_hints* hints, uint8_t* qname, uint16_t qclass, struct delegpt* dp); /* Custom function to perform logic similar to the one in daemon/cachedump.c */ struct delegpt* find_delegation(struct module_qstate* qstate, char *nm, size_t nmlen); %{ #define BIT_RD 0x100 struct delegpt* find_delegation(struct module_qstate* qstate, char *nm, size_t nmlen) { struct delegpt *dp; struct dns_msg *msg = NULL; struct regional* region = qstate->env->scratch; char b[260]; struct query_info qinfo; struct iter_hints_stub* stub; uint32_t timenow = *qstate->env->now; regional_free_all(region); qinfo.qname = (uint8_t*)nm; qinfo.qname_len = nmlen; qinfo.qtype = LDNS_RR_TYPE_A; qinfo.qclass = LDNS_RR_CLASS_IN; while(1) { dp = dns_cache_find_delegation(qstate->env, (uint8_t*)nm, nmlen, qinfo.qtype, qinfo.qclass, region, &msg, timenow); if(!dp) return NULL; if(iter_dp_is_useless(&qinfo, BIT_RD, dp)) { if (dname_is_root((uint8_t*)nm)) return NULL; nm = (char*)dp->name; nmlen = dp->namelen; dname_remove_label((uint8_t**)&nm, &nmlen); dname_str((uint8_t*)nm, b); continue; } stub = hints_lookup_stub(qstate->env->hints, qinfo.qname, qinfo.qclass, dp); if (stub) { return stub->dp; } else { return dp; } } return NULL; } %} /* ************************************************************************************ * Functions * ************************************************************************************ */ /****************************** * Various debugging functions * ******************************/ /* rename the variadic functions because python does the formatting already*/ %rename (unbound_log_info) log_info; %rename (unbound_log_err) log_err; %rename (unbound_log_warn) log_warn; %rename (unbound_verbose) verbose; /* provide functions that take one string as argument, so python can cook the string */ %rename (log_info) pymod_log_info; %rename (log_warn) pymod_log_warn; %rename (log_err) pymod_log_err; %rename (verbose) pymod_verbose; void verbose(enum verbosity_value level, const char* format, ...); void log_info(const char* format, ...); void log_err(const char* format, ...); void log_warn(const char* format, ...); void log_hex(const char* msg, void* data, size_t length); void log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep); void log_query_info(enum verbosity_value v, const char* str, struct query_info* qinf); void regional_log_stats(struct regional *r); /* the one argument string log functions */ void pymod_log_info(const char* str); void pymod_log_err(const char* str); void pymod_log_warn(const char* str); void pymod_verbose(enum verbosity_value level, const char* str); %{ void pymod_log_info(const char* str) { log_info("%s", str); } void pymod_log_err(const char* str) { log_err("%s", str); } void pymod_log_warn(const char* str) { log_warn("%s", str); } void pymod_verbose(enum verbosity_value level, const char* str) { verbose(level, "%s", str); } %} /*************************************************************************** * Free allocated memory from marked sources returning corresponding types * ***************************************************************************/ %typemap(newfree, noblock = 1) char * { free($1); } /*************************************************** * Mark as source returning newly allocated memory * ***************************************************/ %newobject sldns_wire2str_type; %newobject sldns_wire2str_class; /****************** * LDNS functions * ******************/ char *sldns_wire2str_type(const uint16_t atype); char *sldns_wire2str_class(const uint16_t aclass); /********************************** * Functions from pythonmod_utils * **********************************/ int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, struct reply_info* msgrep, int is_referral); void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qinfo); /******************************* * Module conversion functions * *******************************/ const char* strextstate(enum module_ext_state s); const char* strmodulevent(enum module_ev e); /************************** * Edns related functions * **************************/ struct edns_option* edns_opt_list_find(struct edns_option* list, uint16_t code); int edns_register_option(uint16_t opt_code, int bypass_cache_stage, int no_aggregation, struct module_env* env); %pythoncode %{ def register_edns_option(env, code, bypass_cache_stage=False, no_aggregation=False): """Wrapper function to provide keyword attributes.""" return edns_register_option(code, bypass_cache_stage, no_aggregation, env) %} /****************************** * Callback related functions * ******************************/ /* typemap to check if argument is callable */ %typemap(in) PyObject *py_cb { if (!PyCallable_Check($input)) { SWIG_exception_fail(SWIG_TypeError, "Need a callable object!"); return NULL; } $1 = $input; } /* typemap to get content/size from a bytearray */ %typemap(in) (size_t len, uint8_t* py_bytearray_data) { if (!PyByteArray_CheckExact($input)) { SWIG_exception_fail(SWIG_TypeError, "Expected bytearray!"); return NULL; } $2 = (void*)PyByteArray_AsString($input); $1 = PyByteArray_Size($input); } int edns_opt_list_remove(struct edns_option** list, uint16_t code); int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len, uint8_t* py_bytearray_data, struct regional* region); %{ /* This function is called by unbound in order to call the python * callback function. */ int python_inplace_cb_reply_generic(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time, int id, void* python_callback) { PyObject *func, *py_edns, *py_qstate, *py_opt_list_out, *py_qinfo; PyObject *py_rep, *py_repinfo, *py_region; PyObject *py_args, *py_kwargs, *result; int res = 0; double py_start_time = ((double)start_time->tv_sec) + ((double)start_time->tv_usec) / 1.0e6; PyGILState_STATE gstate = PyGILState_Ensure(); func = (PyObject *) python_callback; py_edns = SWIG_NewPointerObj((void*) edns, SWIGTYPE_p_edns_data, 0); py_qstate = SWIG_NewPointerObj((void*) qstate, SWIGTYPE_p_module_qstate, 0); py_opt_list_out = SWIG_NewPointerObj((void*) opt_list_out, SWIGTYPE_p_p_edns_option, 0); py_qinfo = SWIG_NewPointerObj((void*) qinfo, SWIGTYPE_p_query_info, 0); py_rep = SWIG_NewPointerObj((void*) rep, SWIGTYPE_p_reply_info, 0); py_repinfo = SWIG_NewPointerObj((void*) repinfo, SWIGTYPE_p_comm_reply, 0); py_region = SWIG_NewPointerObj((void*) region, SWIGTYPE_p_regional, 0); py_args = Py_BuildValue("(OOOiOOO)", py_qinfo, py_qstate, py_rep, rcode, py_edns, py_opt_list_out, py_region); py_kwargs = Py_BuildValue("{s:O,s:d}", "repinfo", py_repinfo, "start_time", py_start_time); result = PyObject_Call(func, py_args, py_kwargs); Py_XDECREF(py_edns); Py_XDECREF(py_qstate); Py_XDECREF(py_opt_list_out); Py_XDECREF(py_qinfo); Py_XDECREF(py_rep); Py_XDECREF(py_repinfo); Py_XDECREF(py_region); Py_XDECREF(py_args); Py_XDECREF(py_kwargs); if (result) { res = PyInt_AsLong(result); } Py_XDECREF(result); PyGILState_Release(gstate); return res; } /* register a callback */ static int python_inplace_cb_register(enum inplace_cb_list_type type, PyObject* py_cb, struct module_env* env, int id) { int ret = inplace_cb_register(python_inplace_cb_reply_generic, type, (void*) py_cb, env, id); if (ret) Py_INCREF(py_cb); return ret; } /* Swig implementations for Python */ static int register_inplace_cb_reply(PyObject* py_cb, struct module_env* env, int id) { return python_inplace_cb_register(inplace_cb_reply, py_cb, env, id); } static int register_inplace_cb_reply_cache(PyObject* py_cb, struct module_env* env, int id) { return python_inplace_cb_register(inplace_cb_reply_cache, py_cb, env, id); } static int register_inplace_cb_reply_local(PyObject* py_cb, struct module_env* env, int id) { return python_inplace_cb_register(inplace_cb_reply_local, py_cb, env, id); } static int register_inplace_cb_reply_servfail(PyObject* py_cb, struct module_env* env, int id) { return python_inplace_cb_register(inplace_cb_reply_servfail, py_cb, env, id); } int python_inplace_cb_query_generic( struct query_info* qinfo, uint16_t flags, struct module_qstate* qstate, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, int id, void* python_callback) { int res = 0; PyObject *func = python_callback; PyGILState_STATE gstate = PyGILState_Ensure(); PyObject *py_qinfo = SWIG_NewPointerObj((void*) qinfo, SWIGTYPE_p_query_info, 0); PyObject *py_qstate = SWIG_NewPointerObj((void*) qstate, SWIGTYPE_p_module_qstate, 0); PyObject *py_addr = SWIG_NewPointerObj((void *) addr, SWIGTYPE_p_sockaddr_storage, 0); PyObject *py_zone = PyBytes_FromStringAndSize((const char *)zone, zonelen); PyObject *py_region = SWIG_NewPointerObj((void*) region, SWIGTYPE_p_regional, 0); PyObject *py_args = Py_BuildValue("(OiOOOO)", py_qinfo, flags, py_qstate, py_addr, py_zone, py_region); PyObject *py_kwargs = Py_BuildValue("{}"); PyObject *result = PyObject_Call(func, py_args, py_kwargs); if (result) { res = PyInt_AsLong(result); } Py_XDECREF(py_qinfo); Py_XDECREF(py_qstate); Py_XDECREF(py_addr); Py_XDECREF(py_zone); Py_XDECREF(py_region); Py_XDECREF(py_args); Py_XDECREF(py_kwargs); Py_XDECREF(result); PyGILState_Release(gstate); return res; } static int register_inplace_cb_query(PyObject* py_cb, struct module_env* env, int id) { int ret = inplace_cb_register(python_inplace_cb_query_generic, inplace_cb_query, (void*) py_cb, env, id); if (ret) Py_INCREF(py_cb); return ret; } %} /* C declarations */ int inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg, struct module_env* env, int id); /* Swig declarations */ static int register_inplace_cb_reply(PyObject* py_cb, struct module_env* env, int id); static int register_inplace_cb_reply_cache(PyObject* py_cb, struct module_env* env, int id); static int register_inplace_cb_reply_local(PyObject* py_cb, struct module_env* env, int id); static int register_inplace_cb_reply_servfail(PyObject* py_cb, struct module_env* env, int id); static int register_inplace_cb_query(PyObject *py_cb, struct module_env* env, int id); unbound-1.13.1/pythonmod/test-calc.conf0000644000175000017500000000053614010434640017452 0ustar wouterwouter# Example configuration file for calc.py server: verbosity: 1 interface: 0.0.0.0 do-daemonize: no access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/calc.py" unbound-1.13.1/pythonmod/examples/0000755000175000017500000000000014010434640016536 5ustar wouterwouterunbound-1.13.1/pythonmod/examples/inplace_callbacks.py0000644000175000017500000003156714010434640022536 0ustar wouterwouter# -*- coding: utf-8 -*- ''' inplace_callbacks.py: python module showcasing inplace callback function registration and functionality. Copyright (c) 2016, NLnet Labs. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. ''' #Try: # - dig @localhost nlnetlabs.nl +ednsopt=65002: # This query *could* be answered from cache. If so, unbound will reply # with the same EDNS option 65002, but with hexdata 'deadbeef' as data. # # - dig @localhost bogus.nlnetlabs.nl txt: # This query returns SERVFAIL as the txt record of bogus.nlnetlabs.nl is # intentionally bogus. The reply will contain an empty EDNS option # with option code 65003. # Unbound will also log the source address of the client that made # the request. # (unbound needs to be validating for this example to work) # Useful functions: # register_inplace_cb_reply(inplace_reply_callback, env, id): # Register the reply_callback function as an inplace callback function # when answering with a resolved query. # Return True on success, False on failure. # # register_inplace_cb_reply_cache(inplace_reply_cache_callback, env, id): # Register the reply_cache_callback function as an inplace callback # function when answering from cache. # Return True on success, False on failure. # # register_inplace_cb_reply_local(inplace_reply_local_callback, env, id): # Register the reply_local_callback function as an inplace callback # function when answering from local data or chaos reply. # Return True on success, False on failure. # # register_inplace_cb_reply_servfail(inplace_reply_servfail_callback, env, id): # Register the reply_servfail_callback function as an inplace callback # function when answering with servfail. # Return True on success, False on failure. # # Examples on how to use the functions are given in this file. def inplace_reply_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering with a resolved query. :param qinfo: query_info struct; :param qstate: module qstate. It contains the available opt_lists; It SHOULD NOT be altered; :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data to be sent to the client side. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. """ log_info("python: called back while replying.") return True def inplace_cache_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering from the cache. :param qinfo: query_info struct; :param qstate: module qstate. None; :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the EDNS options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. For demonstration purposes we want to see if EDNS option 65002 is present and reply with a new value. """ log_info("python: called back while answering from cache.") # Inspect the incoming EDNS options. if not edns_opt_list_is_empty(edns.opt_list): log_info("python: available EDNS options:") for o in edns.opt_list_iter: log_info("python: Code: {}, Data: '{}'".format(o.code, "".join('{:02x}'.format(x) for x in o.data))) if o.code == 65002: log_info("python: *found option code 65002*") # add to opt_list # Data MUST be represented in a bytearray. b = bytearray.fromhex("deadbeef") if edns_opt_list_append(opt_list_out, o.code, b, region): log_info("python: *added new option code 65002*") else: log_info("python: *failed to add new option code 65002*") return False break return True def inplace_local_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering from local data. :param qinfo: query_info struct; :param qstate: module qstate. None; :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the EDNS options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. """ log_info("python: called back while replying with local data or chaos" " reply.") return True def inplace_servfail_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering with SERVFAIL. :param qinfo: query_info struct; :param qstate: module qstate. If not None the relevant opt_lists are available here; :param rep: reply_info struct. None; :param rcode: return code for the query. LDNS_RCODE_SERVFAIL; :param edns: edns_data to be sent to the client side. If qstate is None edns.opt_list contains the EDNS options sent from the client side. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. For demonstration purposes we want to reply with an empty EDNS code '65003' and log the IP address of the client. """ log_info("python: called back while servfail.") # Append the example ENDS option b = bytearray.fromhex("") edns_opt_list_append(opt_list_out, 65003, b, region) # Log the client's IP address comm_reply = kwargs['repinfo'] if comm_reply: addr = comm_reply.addr port = comm_reply.port addr_family = comm_reply.family log_info("python: Client IP: {}({}), port: {}" "".format(addr, addr_family, port)) return True def inplace_query_callback(qinfo, flags, qstate, addr, zone, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called before sending a query to a backend server. :param qinfo: query_info struct; :param flags: flags of the query; :param qstate: module qstate. opt_lists are available here; :param addr: struct sockaddr_storage. Address of the backend server; :param zone: zone name in binary; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_lists. :param **kwargs: Dictionary that may contain parameters added in a future release. """ log_info("python: outgoing query to {}@{}".format(addr.addr, addr.port)) return True def init_standard(id, env): """ New version of the init function. The function's signature is the same as the C counterpart and allows for extra functionality during init. ..note:: This function is preferred by unbound over the old init function. ..note:: The previously accessible configuration options can now be found in env.cfg. """ log_info("python: inited script {}".format(env.cfg.python_script)) # Register the inplace_reply_callback function as an inplace callback # function when answering a resolved query. if not register_inplace_cb_reply(inplace_reply_callback, env, id): return False # Register the inplace_cache_callback function as an inplace callback # function when answering from cache. if not register_inplace_cb_reply_cache(inplace_cache_callback, env, id): return False # Register the inplace_local_callback function as an inplace callback # function when answering from local data. if not register_inplace_cb_reply_local(inplace_local_callback, env, id): return False # Register the inplace_servfail_callback function as an inplace callback # function when answering with SERVFAIL. if not register_inplace_cb_reply_servfail(inplace_servfail_callback, env, id): return False # Register the inplace_query_callback function as an inplace callback # before sending a query to a backend server. if not register_inplace_cb_query(inplace_query_callback, env, id): return False return True def init(id, cfg): """ Previous version of the init function. ..note:: This function is still supported for backwards compatibility when the init_standard function is missing. When init_standard is present this function SHOULD be omitted to avoid confusion to the reader. """ return True def deinit(id): return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): qstate.ext_state[id] = MODULE_WAIT_MODULE return True elif event == MODULE_EVENT_MODDONE: qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: Unknown event") qstate.ext_state[id] = MODULE_ERROR return True unbound-1.13.1/pythonmod/examples/calc.py0000644000175000017500000000642614010434640020022 0ustar wouterwouter# -*- coding: utf-8 -*- ''' calc.py: DNS-based calculator Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. ''' #Try: dig @localhost 1*25._calc_.cz. def init(id, cfg): return True def deinit(id): return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): if qstate.qinfo.qname_str.endswith("._calc_.cz.") and not ("__" in qstate.qinfo.qname_str): try: # the second and third argument to eval attempt to restrict # functions and variables available to stop code execution # but it may not be safe either. This is why __ substrings # are excluded from evaluation. res = eval(''.join(qstate.qinfo.qname_list[0:-3]),{"__builtins__":None},{}) except: res = "exception" msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_TXT, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300) msg.answer.append("%s 300 IN TXT \"%s\"" % (qstate.qinfo.qname_str,res)) if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True qstate.return_rcode = RCODE_NOERROR qstate.ext_state[id] = MODULE_FINISHED return True else: #Pass on the unknown query to the iterator qstate.ext_state[id] = MODULE_WAIT_MODULE return True elif event == MODULE_EVENT_MODDONE: #the iterator has finished qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: Unknown event") qstate.ext_state[id] = MODULE_ERROR return True unbound-1.13.1/pythonmod/examples/edns.py0000644000175000017500000002121714010434640020044 0ustar wouterwouter# -*- coding: utf-8 -*- ''' edns.py: python module showcasing EDNS option functionality. Copyright (c) 2016, NLnet Labs. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. ''' #Try: # - dig @localhost nlnetlabs.nl +ednsopt=65001:c001 # This query will always reach the modules stage as EDNS option 65001 is # registered to bypass the cache response stage. It will also be handled # as a unique query because of the no_aggregation flag. This means that # it will not be aggregated with other queries for the same qinfo. # For demonstration purposes when option 65001 with hexdata 'c001' is # sent from the client side this module will reply with the same code and # data 'deadbeef'. # Useful functions: # edns_opt_list_is_empty(edns_opt_list): # Check if the option list is empty. # Return True if empty, False otherwise. # # edns_opt_list_append(edns_opt_list, code, data_bytearray, region): # Append the EDNS option with code and data_bytearray to the given # edns_opt_list. # NOTE: data_bytearray MUST be a Python bytearray. # Return True on success, False on failure. # # edns_opt_list_remove(edns_opt_list, code): # Remove all occurences of the given EDNS option code from the # edns_opt_list. # Return True when at least one EDNS option was removed, False otherwise. # # register_edns_option(env, code, bypass_cache_stage=True, # no_aggregation=True): # Register EDNS option code as a known EDNS option. # bypass_cache_stage: # bypasses answering from cache and allows the query to reach the # modules for further EDNS handling. # no_aggregation: # makes every query with the said EDNS option code unique. # Return True on success, False on failure. # # Examples on how to use the functions are given in this file. def init_standard(id, env): """New version of the init function. The function's signature is the same as the C counterpart and allows for extra functionality during init. ..note:: This function is preferred by unbound over the old init function. ..note:: The previously accessible configuration options can now be found in env.cfg. """ log_info("python: inited script {}".format(env.cfg.python_script)) # Register EDNS option 65001 as a known EDNS option. if not register_edns_option(env, 65001, bypass_cache_stage=True, no_aggregation=True): return False return True def init(id, cfg): """Previous version init function. ..note:: This function is still supported for backwards compatibility when the init_standard function is missing. When init_standard is present this function SHOULD be omitted to avoid confusion to the reader. """ return True def deinit(id): return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): # Detect if EDNS option code 56001 is present from the client side. If # so turn on the flags for cache management. if not edns_opt_list_is_empty(qstate.edns_opts_front_in): log_info("python: searching for EDNS option code 65001 during NEW " "or PASS event ") for o in qstate.edns_opts_front_in_iter: if o.code == 65001: log_info("python: found EDNS option code 65001") # Instruct other modules to not lookup for an # answer in the cache. qstate.no_cache_lookup = 1 log_info("python: enabled no_cache_lookup") # Instruct other modules to not store the answer in # the cache. qstate.no_cache_store = 1 log_info("python: enabled no_cache_store") #Pass on the query qstate.ext_state[id] = MODULE_WAIT_MODULE return True elif event == MODULE_EVENT_MODDONE: # If the client sent EDNS option code 65001 and data 'c001' reply # with the same code and data 'deadbeef'. if not edns_opt_list_is_empty(qstate.edns_opts_front_in): log_info("python: searching for EDNS option code 65001 during " "MODDONE") for o in qstate.edns_opts_front_in_iter: if o.code == 65001 and o.data == bytearray.fromhex("c001"): b = bytearray.fromhex("deadbeef") if not edns_opt_list_append(qstate.edns_opts_front_out, o.code, b, qstate.region): qstate.ext_state[id] = MODULE_ERROR return False # List every EDNS option in all lists. # The available lists are: # - qstate.edns_opts_front_in: EDNS options that came from the # client side. SHOULD NOT be changed; # # - qstate.edns_opts_back_out: EDNS options that will be sent to the # server side. Can be populated by # EDNS literate modules; # # - qstate.edns_opts_back_in: EDNS options that came from the # server side. SHOULD NOT be changed; # # - qstate.edns_opts_front_out: EDNS options that will be sent to the # client side. Can be populated by # EDNS literate modules; # # The lists' contents can be accessed in python by their _iter # counterpart as an iterator. if not edns_opt_list_is_empty(qstate.edns_opts_front_in): log_info("python: EDNS options in edns_opts_front_in:") for o in qstate.edns_opts_front_in_iter: log_info("python: Code: {}, Data: '{}'".format(o.code, "".join('{:02x}'.format(x) for x in o.data))) if not edns_opt_list_is_empty(qstate.edns_opts_back_out): log_info("python: EDNS options in edns_opts_back_out:") for o in qstate.edns_opts_back_out_iter: log_info("python: Code: {}, Data: '{}'".format(o.code, "".join('{:02x}'.format(x) for x in o.data))) if not edns_opt_list_is_empty(qstate.edns_opts_back_in): log_info("python: EDNS options in edns_opts_back_in:") for o in qstate.edns_opts_back_in_iter: log_info("python: Code: {}, Data: '{}'".format(o.code, "".join('{:02x}'.format(x) for x in o.data))) if not edns_opt_list_is_empty(qstate.edns_opts_front_out): log_info("python: EDNS options in edns_opts_front_out:") for o in qstate.edns_opts_front_out_iter: log_info("python: Code: {}, Data: '{}'".format(o.code, "".join('{:02x}'.format(x) for x in o.data))) qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: Unknown event") qstate.ext_state[id] = MODULE_ERROR return True unbound-1.13.1/pythonmod/examples/dict.py0000644000175000017500000001020714010434640020033 0ustar wouterwouter# -*- coding: utf-8 -*- ''' calc.py: DNS-based czech-english dictionary Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. ''' import os cz_dict = {} en_dict = {} def init(id, cfg): log_info("pythonmod: dict init") f = open("examples/dict_data.txt", "r") try: for line in f: if line.startswith('#'): continue itm = line.split("\t", 3) if len(itm) < 2: continue en,cs = itm[0:2] if not (cs in cz_dict): cz_dict[cs] = [en] # [cs] = en else: cz_dict[cs].append(en) # [cs] = en if not (en in en_dict): en_dict[en] = [cs] # [en] = cs else: en_dict[en].append(cs) # [en] = cs finally: f.close() return True def deinit(id): log_info("pythonmod: dict deinit") return True def operate(id, event, qstate, qdata): if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): if qstate.qinfo.qname_str.endswith("._dict_.cz."): aword = ' '.join(qstate.qinfo.qname_list[0:-4]) adict = qstate.qinfo.qname_list[-4] log_info("pythonmod: dictionary look up; word:%s dict:%s" % (aword,adict)) words = [] if (adict == "en") and (aword in en_dict): words = en_dict[aword] # EN -> CS if (adict == "cs") and (aword in cz_dict): words = cz_dict[aword] # CS -> EN if len(words) and ((qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY)): msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_TXT, RR_CLASS_IN, PKT_RD | PKT_RA | PKT_AA) for w in words: msg.answer.append("%s 300 IN TXT \"%s\"" % (qstate.qinfo.qname_str,w.replace("\"","\\\""))) if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True qstate.return_rcode = RCODE_NOERROR qstate.ext_state[id] = MODULE_FINISHED return True else: qstate.return_rcode = RCODE_SERVFAIL qstate.ext_state[id] = MODULE_FINISHED return True else: #Pass on the unknown query to the iterator qstate.ext_state[id] = MODULE_WAIT_MODULE return True elif event == MODULE_EVENT_MODDONE: #the iterator has finished #we don't need modify result qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: Unknown event") qstate.ext_state[id] = MODULE_ERROR return True def inform_super(id, qstate, superqstate, qdata): return True unbound-1.13.1/pythonmod/examples/resmod.py0000644000175000017500000000667714010434640020421 0ustar wouterwouter''' resmod.py: This example shows how to modify the response from iterator Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. ''' def init(id, cfg): return True def deinit(id): return True def inform_super(id, qstate, superqstate, qdata): return True def setTTL(qstate, ttl): """Updates return_msg TTL and the TTL of all the RRs""" if qstate.return_msg: qstate.return_msg.rep.ttl = ttl if (qstate.return_msg.rep): for i in range(0,qstate.return_msg.rep.rrset_count): d = qstate.return_msg.rep.rrsets[i].entry.data for j in range(0,d.count+d.rrsig_count): d.rr_ttl[j] = ttl def operate(id, event, qstate, qdata): if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): #pass the query to validator qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: iterator module done") if not qstate.return_msg: qstate.ext_state[id] = MODULE_FINISHED return True #modify the response qdn = qstate.qinfo.qname_str if qdn.endswith(".nic.cz."): #invalidate response in cache added by iterator #invalidateQueryInCache(qstate, qstate.return_msg.qinfo) #modify TTL to 10 secs and store response in cache #setTTL(qstate, 5) #if not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0): # qstate.ext_state[id] = MODULE_ERROR # return False #modify TTL of response, which will be send to a) validator and then b) client setTTL(qstate, 10) qstate.return_rcode = RCODE_NOERROR qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: bad event") qstate.ext_state[id] = MODULE_ERROR return True unbound-1.13.1/pythonmod/examples/resgen.py0000644000175000017500000000617714010434640020406 0ustar wouterwouter''' resgen.py: This example shows how to generate authoritative response Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. ''' def init(id, cfg): return True def deinit(id): return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): if (qstate.qinfo.qname_str.endswith(".localdomain.")): #query name ends with localdomain #create instance of DNS message (packet) with given parameters msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #append RR if (qstate.qinfo.qtype == RR_TYPE_A) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN A 127.0.0.1" % qstate.qinfo.qname_str) #set qstate.return_msg if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True #we don't need validation, result is valid qstate.return_msg.rep.security = 2 qstate.return_rcode = RCODE_NOERROR qstate.ext_state[id] = MODULE_FINISHED return True else: #pass the query to validator qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: iterator module done") qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: bad event") qstate.ext_state[id] = MODULE_ERROR return True unbound-1.13.1/pythonmod/examples/resip.py0000644000175000017500000000771114010434640020240 0ustar wouterwouter''' resip.py: This example shows how to generate authoritative response and how to find out the IP address of a client Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. Usage: dig @127.0.0.1 -t TXT what.is.my.ip. ''' def init(id, cfg): return True def deinit(id): return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): print("Operate {} state: {}".format(event, qstate)) # Please note that if this module blocks, by moving to the validator # to validate or iterator to lookup or spawn a subquery to look up, # then, other incoming queries are queued up onto this module and # all of them receive the same reply. # You can inspect the cache. if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): if (qstate.qinfo.qname_str.endswith("what.is.my.ip.")): #query name ends with localdomain #create instance of DNS message (packet) with given parameters msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_TXT, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #append RR if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY): rl = qstate.mesh_info.reply_list while (rl): if rl.query_reply: q = rl.query_reply # The TTL of 0 is mandatory, otherwise it ends up in # the cache, and is returned to other IP addresses. msg.answer.append("%s 0 IN TXT \"%s %d (%s)\"" % (qstate.qinfo.qname_str, q.addr,q.port,q.family)) rl = rl.next #set qstate.return_msg if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True #we don't need validation, result is valid qstate.return_msg.rep.security = 2 qstate.return_rcode = RCODE_NOERROR qstate.ext_state[id] = MODULE_FINISHED return True else: #pass the query to validator qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: iterator module done") qstate.ext_state[id] = MODULE_FINISHED return True log_err("pythonmod: bad event") qstate.ext_state[id] = MODULE_ERROR return True unbound-1.13.1/pythonmod/examples/dict_data.txt0000644000175000017500000000024314010434640021212 0ustar wouterwouter* * web computer poèítaèový adj: Zdenìk Bro¾ computer poèítaè n: domain doména n: Zdenìk Bro¾ query otazník n: Zdenìk Bro¾ network sí» n: [it.] poèítaèová unbound-1.13.1/pythonmod/examples/log.py0000644000175000017500000001037114010434640017673 0ustar wouterwouterimport os ''' calc.py: Response packet logger Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. ''' def dataHex(data, prefix=""): """Converts binary string data to display representation form""" res = "" for i in range(0, (len(data)+15)/16): res += "%s0x%02X | " % (prefix, i*16) d = map(lambda x:ord(x), data[i*16:i*16+17]) for ch in d: res += "%02X " % ch for i in range(0,17-len(d)): res += " " res += "| " for ch in d: if (ch < 32) or (ch > 127): res += ". " else: res += "%c " % ch res += "\n" return res def logDnsMsg(qstate): """Logs response""" r = qstate.return_msg.rep q = qstate.return_msg.qinfo print "-"*100 print("Query: %s, type: %s (%d), class: %s (%d) " % ( qstate.qinfo.qname_str, qstate.qinfo.qtype_str, qstate.qinfo.qtype, qstate.qinfo.qclass_str, qstate.qinfo.qclass)) print "-"*100 print "Return reply :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (r.flags, r.qdcount, r.security, r.ttl) print " qinfo :: qname: %s %s, qtype: %s, qclass: %s" % (str(q.qname_list), q.qname_str, q.qtype_str, q.qclass_str) if (r): print "Reply:" for i in range(0, r.rrset_count): rr = r.rrsets[i] rk = rr.rk print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags, print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class) d = rr.entry.data for j in range(0,d.count+d.rrsig_count): print " ",j,":","TTL=",d.rr_ttl[j], if (j >= d.count): print "rrsig", print print dataHex(d.rr_data[j]," ") print "-"*100 def init(id, cfg): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) return True def deinit(id): log_info("pythonmod: deinit called, module id is %d" % id) return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): #Pass on the new event to the iterator qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: #Iterator finished, show response (if any) if (qstate.return_msg): logDnsMsg(qstate) qstate.ext_state[id] = MODULE_FINISHED return True qstate.ext_state[id] = MODULE_ERROR return True unbound-1.13.1/pythonmod/examples/avahi-resolver.py0000644000175000017500000004320714010434640022045 0ustar wouterwouter#!/usr/bin/env python3 # # A plugin for the Unbound DNS resolver to resolve DNS records in # multicast DNS [RFC 6762] via Avahi. # # Copyright (C) 2018-2019 Internet Real-Time Lab, Columbia University # http://www.cs.columbia.edu/irt/ # # Written by Jan Janak # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation files # (the "Software"), to deal in the Software without restriction, # including without limitation the rights to use, copy, modify, merge, # publish, distribute, sublicense, and/or sell copies of the Software, # and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # # Dependendies: # Unbound with pythonmodule configured for Python 3 # dnspython [http://www.dnspython.org] # pydbus [https://github.com/LEW21/pydbus] # # To enable Python 3 support, configure Unbound as follows: # PYTHON_VERSION=3 ./configure --with-pythonmodule # # The plugin in meant to be used as a fallback resolver that resolves # records in multicast DNS if the upstream server cannot be reached or # provides no answer (NXDOMAIN). # # mDNS requests for negative records, i.e., records for which Avahi # returns no answer (NXDOMAIN), are expensive. Since there is no # single authoritative server in mDNS, such requests terminate only # via a timeout. The timeout is about a second (if MDNS_TIMEOUT is not # configured), or the value configured via MDNS_TIMEOUT. The # corresponding Unbound thread will be blocked for this amount of # time. For this reason, it is important to configure an appropriate # number of threads in unbound.conf and limit the RR types and names # that will be resolved via Avahi via the environment variables # described later. # # An example unbound.conf with the plugin enabled: # # | server: # | module-config: "validator python iterator" # | num-threads: 32 # | cache-max-negative-ttl: 60 # | cache-max-ttl: 60 # | python: # | python-script: path/to/this/file # # # The plugin can also be run interactively. Provide the name and # record type to be resolved as command line arguments and the # resolved record will be printed to standard output: # # $ ./avahi-resolver.py voip-phx4.phxnet.org A # voip-phx4.phxnet.org. 120 IN A 10.4.3.2 # # # The behavior of the plugin can be controlled via the following # environment variables: # # DBUS_SYSTEM_BUS_ADDRESS # # The address of the system DBus bus, in the format expected by DBus, # e.g., unix:path=/run/avahi/system-bus.sock # # # DEBUG # # Set this environment variable to "yes", "true", "on", or "1" to # enable debugging. In debugging mode, the plugin will output a lot # more information about what it is doing either to the standard # output (when run interactively) or to Unbound via log_info and # log_error. # # By default debugging is disabled. # # # MDNS_TTL # # Avahi does not provide the TTL value for the records it returns. # This environment variable can be used to configure the TTL value for # such records. # # The default value is 120 seconds. # # # MDNS_TIMEOUT # # The maximum amount of time (in milliseconds) an Avahi request is # allowed to run. This value sets the time it takes to resolve # negative (non-existent) records in Avahi. If unset, the request # terminates when Avahi sends the "AllForNow" signal, telling the # client that more records are unlikely to arrive. This takes roughly # about one second. You may need to configure a longer value here on # slower networks, e.g., networks that relay mDNS packets such as # MANETs. # # # MDNS_GETONE # # If set to "true", "1", or "on", an Avahi request will terminate as # soon as at least one record has been found. If there are multiple # nodes in the mDNS network publishing the same record, only one (or # subset) will be returned. # # If set to "false", "0", or "off", the plugin will gather records for # MDNS_TIMEOUT and return all records found. This is only useful in # networks where multiple nodes are known to publish different records # under the same name and the client needs to be able to obtain them # all. When configured this way, all Avahi requests will always take # MDNS_TIMEOUT to complete! # # This option is set to true by default. # # # MDNS_REJECT_TYPES # # A comma-separated list of record types that will NOT be resolved in # mDNS via Avahi. Use this environment variable to prevent specific # record types from being resolved via Avahi. For example, if your # network does not support IPv6, you can put AAAA on this list. # # The default value is an empty list. # # Example: MDNS_REJECT_TYPES=aaaa,mx,soa # # # MDNS_ACCEPT_TYPES # # If set, a record type will be resolved via Avahi if and only if it # is present on this comma-separated list. In other words, this is a # whitelist. # # The default value is an empty list which means all record types will # be resolved via Avahi. # # Example: MDNS_ACCEPT_TYPES=a,ptr,txt,srv,aaaa,cname # # # MDNS_REJECT_NAMES # # If the name being resolved matches the regular expression in this # environment variable, the name will NOT be resolved via Avahi. In # other words, this environment variable provides a blacklist. # # The default value is empty--no names will be reject. # # Example: MDNS_REJECT_NAMES=(^|\.)example\.com\.$ # # # MDNS_ACCEPT_NAMES # # If set to a regular expression, a name will be resolved via Avahi if # and only if it matches the regular expression. In other words, this # variable provides a whitelist. # # The default value is empty--all names will be resolved via Avahi. # # Example: MDNS_ACCEPT_NAMES=^.*\.example\.com\.$ # import os import re import array import threading import traceback import dns.rdata import dns.rdatatype import dns.rdataclass from queue import Queue from gi.repository import GLib from pydbus import SystemBus IF_UNSPEC = -1 PROTO_UNSPEC = -1 sysbus = None avahi = None trampoline = dict() thread_local = threading.local() dbus_thread = None dbus_loop = None def str2bool(v): if v.lower() in ['false', 'no', '0', 'off', '']: return False return True def dbg(msg): if DEBUG != False: log_info('avahi-resolver: %s' % msg) # # Although pydbus has an internal facility for handling signals, we # cannot use that with Avahi. When responding from an internal cache, # Avahi sends the first signal very quickly, before pydbus has had a # chance to subscribe for the signal. This will result in lost signal # and missed data: # # https://github.com/LEW21/pydbus/issues/87 # # As a workaround, we subscribe to all signals before creating a # record browser and do our own signal matching and dispatching via # the following function. # def signal_dispatcher(connection, sender, path, interface, name, args): o = trampoline.get(path, None) if o is None: return if name == 'ItemNew': o.itemNew(*args) elif name == 'ItemRemove': o.itemRemove(*args) elif name == 'AllForNow': o.allForNow(*args) elif name == 'Failure': o.failure(*args) class RecordBrowser: def __init__(self, callback, name, type_, timeout=None, getone=True): self.callback = callback self.records = [] self.error = None self.getone = getone self.timer = None if timeout is None else GLib.timeout_add(timeout, self.timedOut) self.browser_path = avahi.RecordBrowserNew(IF_UNSPEC, PROTO_UNSPEC, name, dns.rdataclass.IN, type_, 0) trampoline[self.browser_path] = self self.browser = sysbus.get('.Avahi', self.browser_path) self.dbg('Created RecordBrowser(name=%s, type=%s, getone=%s, timeout=%s)' % (name, dns.rdatatype.to_text(type_), getone, timeout)) def dbg(self, msg): dbg('[%s] %s' % (self.browser_path, msg)) def _done(self): del trampoline[self.browser_path] self.dbg('Freeing') self.browser.Free() if self.timer is not None: self.dbg('Removing timer') GLib.source_remove(self.timer) self.callback(self.records, self.error) def itemNew(self, interface, protocol, name, class_, type_, rdata, flags): self.dbg('Got signal ItemNew') self.records.append((name, class_, type_, rdata)) if self.getone: self._done() def itemRemove(self, interface, protocol, name, class_, type_, rdata, flags): self.dbg('Got signal ItemRemove') self.records.remove((name, class_, type_, rdata)) def failure(self, error): self.dbg('Got signal Failure') self.error = Exception(error) self._done() def allForNow(self): self.dbg('Got signal AllForNow') if self.timer is None: self._done() def timedOut(self): self.dbg('Timed out') self._done() return False # # This function runs the main event loop for DBus (GLib). This # function must be run in a dedicated worker thread. # def dbus_main(): global sysbus, avahi, dbus_loop dbg('Connecting to system DBus') sysbus = SystemBus() dbg('Subscribing to .Avahi.RecordBrowser signals') sysbus.con.signal_subscribe('org.freedesktop.Avahi', 'org.freedesktop.Avahi.RecordBrowser', None, None, None, 0, signal_dispatcher) avahi = sysbus.get('.Avahi', '/') dbg("Connected to Avahi Daemon: %s (API %s) [%s]" % (avahi.GetVersionString(), avahi.GetAPIVersion(), avahi.GetHostNameFqdn())) dbg('Starting DBus main loop') dbus_loop = GLib.MainLoop() dbus_loop.run() # # This function must be run in the DBus worker thread. It creates a # new RecordBrowser instance and once it has finished doing it thing, # it will send the result back to the original thread via the queue. # def start_resolver(queue, *args, **kwargs): try: RecordBrowser(lambda *v: queue.put_nowait(v), *args, **kwargs) except Exception as e: queue.put_nowait((None, e)) return False # # To resolve a request, we setup a queue, post a task to the DBus # worker thread, and wait for the result (or error) to arrive over the # queue. If the worker thread reports an error, raise the error as an # exception. # def resolve(*args, **kwargs): try: queue = thread_local.queue except AttributeError: dbg('Creating new per-thread queue') queue = Queue() thread_local.queue = queue GLib.idle_add(lambda: start_resolver(queue, *args, **kwargs)) records, error = queue.get() queue.task_done() if error is not None: raise error return records def parse_type_list(lst): return list(map(dns.rdatatype.from_text, [v.strip() for v in lst.split(',') if len(v)])) def init(*args, **kwargs): global dbus_thread, DEBUG global MDNS_TTL, MDNS_GETONE, MDNS_TIMEOUT global MDNS_REJECT_TYPES, MDNS_ACCEPT_TYPES global MDNS_REJECT_NAMES, MDNS_ACCEPT_NAMES DEBUG = str2bool(os.environ.get('DEBUG', str(False))) MDNS_TTL = int(os.environ.get('MDNS_TTL', 120)) dbg("TTL for records from Avahi: %d" % MDNS_TTL) MDNS_REJECT_TYPES = parse_type_list(os.environ.get('MDNS_REJECT_TYPES', '')) if MDNS_REJECT_TYPES: dbg('Types NOT resolved via Avahi: %s' % MDNS_REJECT_TYPES) MDNS_ACCEPT_TYPES = parse_type_list(os.environ.get('MDNS_ACCEPT_TYPES', '')) if MDNS_ACCEPT_TYPES: dbg('ONLY resolving the following types via Avahi: %s' % MDNS_ACCEPT_TYPES) v = os.environ.get('MDNS_REJECT_NAMES', None) MDNS_REJECT_NAMES = re.compile(v, flags=re.I | re.S) if v is not None else None if MDNS_REJECT_NAMES is not None: dbg('Names NOT resolved via Avahi: %s' % MDNS_REJECT_NAMES.pattern) v = os.environ.get('MDNS_ACCEPT_NAMES', None) MDNS_ACCEPT_NAMES = re.compile(v, flags=re.I | re.S) if v is not None else None if MDNS_ACCEPT_NAMES is not None: dbg('ONLY resolving the following names via Avahi: %s' % MDNS_ACCEPT_NAMES.pattern) v = os.environ.get('MDNS_TIMEOUT', None) MDNS_TIMEOUT = int(v) if v is not None else None if MDNS_TIMEOUT is not None: dbg('Avahi request timeout: %s' % MDNS_TIMEOUT) MDNS_GETONE = str2bool(os.environ.get('MDNS_GETONE', str(True))) dbg('Terminate Avahi requests on first record: %s' % MDNS_GETONE) dbus_thread = threading.Thread(target=dbus_main) dbus_thread.daemon = True dbus_thread.start() def deinit(*args, **kwargs): dbus_loop.quit() dbus_thread.join() return True def inform_super(id, qstate, superqstate, qdata): return True def get_rcode(msg): if not msg: return RCODE_SERVFAIL return msg.rep.flags & 0xf def rr2text(rec, ttl): name, class_, type_, rdata = rec wire = array.array('B', rdata).tostring() return '%s. %d %s %s %s' % ( name, ttl, dns.rdataclass.to_text(class_), dns.rdatatype.to_text(type_), dns.rdata.from_wire(class_, type_, wire, 0, len(wire), None)) def operate(id, event, qstate, qdata): qi = qstate.qinfo name = qi.qname_str type_ = qi.qtype type_str = dns.rdatatype.to_text(type_) class_ = qi.qclass class_str = dns.rdataclass.to_text(class_) rc = get_rcode(qstate.return_msg) if event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS: qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event != MODULE_EVENT_MODDONE: log_err("avahi-resolver: Unexpected event %d" % event) qstate.ext_state[id] = MODULE_ERROR return True qstate.ext_state[id] = MODULE_FINISHED # Only resolve via Avahi if we got NXDOMAIn from the upstream DNS # server, or if we could not reach the upstream DNS server. If we # got some records for the name from the upstream DNS server # already, do not resolve the record in Avahi. if rc != RCODE_NXDOMAIN and rc != RCODE_SERVFAIL: return True dbg("Got request for '%s %s %s'" % (name, class_str, type_str)) # Avahi only supports the IN class if class_ != RR_CLASS_IN: dbg('Rejected, Avahi only supports the IN class') return True # Avahi does not support meta queries (e.g., ANY) if dns.rdatatype.is_metatype(type_): dbg('Rejected, Avahi does not support the type %s' % type_str) return True # If we have a type blacklist and the requested type is on the # list, reject it. if MDNS_REJECT_TYPES and type_ in MDNS_REJECT_TYPES: dbg('Rejected, type %s is on the blacklist' % type_str) return True # If we have a type whitelist and if the requested type is not on # the list, reject it. if MDNS_ACCEPT_TYPES and type_ not in MDNS_ACCEPT_TYPES: dbg('Rejected, type %s is not on the whitelist' % type_str) return True # If we have a name blacklist and if the requested name matches # the blacklist, reject it. if MDNS_REJECT_NAMES is not None: if MDNS_REJECT_NAMES.search(name): dbg('Rejected, name %s is on the blacklist' % name) return True # If we have a name whitelist and if the requested name does not # match the whitelist, reject it. if MDNS_ACCEPT_NAMES is not None: if not MDNS_ACCEPT_NAMES.search(name): dbg('Rejected, name %s is not on the whitelist' % name) return True dbg("Resolving '%s %s %s' via Avahi" % (name, class_str, type_str)) recs = resolve(name, type_, getone=MDNS_GETONE, timeout=MDNS_TIMEOUT) if not recs: dbg('Result: Not found (NXDOMAIN)') qstate.return_rcode = RCODE_NXDOMAIN return True m = DNSMessage(name, type_, class_, PKT_QR | PKT_RD | PKT_RA) for r in recs: s = rr2text(r, MDNS_TTL) dbg('Result: %s' % s) m.answer.append(s) if not m.set_return_msg(qstate): raise Exception("Error in set_return_msg") if not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0): raise Exception("Error in storeQueryInCache") qstate.return_msg.rep.security = 2 qstate.return_rcode = RCODE_NOERROR return True # # It does not appear to be sufficient to check __name__ to determine # whether we are being run in interactive mode. As a workaround, try # to import module unboundmodule and if that fails, assume we're being # run in interactive mode. # try: import unboundmodule embedded = True except ImportError: embedded = False if __name__ == '__main__' and not embedded: import sys def log_info(msg): print(msg) def log_err(msg): print('ERROR: %s' % msg, file=sys.stderr) if len(sys.argv) != 3: print('Usage: %s ' % sys.argv[0]) sys.exit(2) name = sys.argv[1] type_str = sys.argv[2] try: type_ = dns.rdatatype.from_text(type_str) except dns.rdatatype.UnknownRdatatype: log_err('Unsupported DNS record type "%s"' % type_str) sys.exit(2) if dns.rdatatype.is_metatype(type_): log_err('Meta record type "%s" cannot be resolved via Avahi' % type_str) sys.exit(2) init() try: recs = resolve(name, type_, getone=MDNS_GETONE, timeout=MDNS_TIMEOUT) if not len(recs): print('%s not found (NXDOMAIN)' % name) sys.exit(1) for r in recs: print(rr2text(r, MDNS_TTL)) finally: deinit() unbound-1.13.1/pythonmod/doc/0000755000175000017500000000000014010434640015465 5ustar wouterwouterunbound-1.13.1/pythonmod/doc/examples/0000755000175000017500000000000014010434640017303 5ustar wouterwouterunbound-1.13.1/pythonmod/doc/examples/example3.rst0000644000175000017500000000313014010434640021550 0ustar wouterwouterResponse modification ===================== This example shows how to modify the response produced by the ``iterator`` module. As soon as the iterator module returns the response, we : 1. invalidate the data in cache 2. modify the response *TTL* 3. rewrite the data in cache 4. return modified packet Note that the steps 1 and 3 are necessary only in case, the python module is the first module in the processing chain. In other cases, the validator module guarantees updating data which are produced by iterator module. Complete source code -------------------- .. literalinclude:: ../../examples/resmod.py :language: python Testing ------- Run Unbound server: ``root@localhost>unbound -dv -c ./test-resmod.conf`` Issue a query for name ending with "nic.cz." ``>>>dig A @127.0.0.1 www.nic.cz`` :: ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48831 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5 ;; QUESTION SECTION: ;www.nic.cz. IN A ;; ANSWER SECTION: www.nic.cz. 10 IN A 217.31.205.50 ;; AUTHORITY SECTION: nic.cz. 10 IN NS e.ns.nic.cz. nic.cz. 10 IN NS a.ns.nic.cz. nic.cz. 10 IN NS c.ns.nic.cz. ;; ADDITIONAL SECTION: a.ns.nic.cz. 10 IN A 217.31.205.180 a.ns.nic.cz. 10 IN AAAA 2001:1488:dada:176::180 c.ns.nic.cz. 10 IN A 195.66.241.202 c.ns.nic.cz. 10 IN AAAA 2a01:40:1000::2 e.ns.nic.cz. 10 IN A 194.146.105.38 ;; Query time: 166 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jan 02 13:39:43 2009 ;; MSG SIZE rcvd: 199 As you can see, TTL of all the records is set to 10. unbound-1.13.1/pythonmod/doc/examples/example4.rst0000644000175000017500000001145214010434640021557 0ustar wouterwouterDNS-based language dictionary ============================= This example shows how to create a simple language dictionary based on **DNS** service within 15 minutes. The translation will be performed using TXT resource records. Key parts --------- Initialization ~~~~~~~~~~~~~~ On **init()** module loads dictionary from a text file containing records in ``word [tab] translation`` format. :: def init(id, cfg): log_info("pythonmod: dict init") f = open("examples/dict_data.txt", "r") ... The suitable file can be found at http://slovnik.zcu.cz DNS query and word lookup ~~~~~~~~~~~~~~~~~~~~~~~~~ Let's define the following format od DNS queries: ``word1[.]word2[.] ... wordN[.]{en,cs}[._dict_.cz.]``. Word lookup is done by simple ``dict`` lookup from broken DNS request. Query name is divided into a list of labels. This list is accessible as ``qname_list`` attribute. :: aword = ' '.join(qstate.qinfo.qname_list[0:-4]) #skip last four labels adict = qstate.qinfo.qname_list[-4] #get 4th label from the end words = [] #list of words if (adict == "en") and (aword in en_dict): words = en_dict[aword] if (adict == "cs") and (aword in cz_dict): words = cz_dict[aword] # CS -> EN In the first step, we get a string in the form: ``word1[space]word2[space]...word[space]``. In the second assignment, fourth label from the end is obtained. This label should contains *"cs"* or *"en"*. This label determines the direction of translation. Forming of a DNS reply ~~~~~~~~~~~~~~~~~~~~~~ DNS reply is formed only on valid match and added as TXT answer. :: msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_TXT, RR_CLASS_IN, PKT_AA) for w in words: msg.answer.append("%s 300 IN TXT \"%s\"" % (qstate.qinfo.qname_str, w.replace("\"", "\\\""))) if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True qstate.return_rcode = RCODE_NOERROR qstate.ext_state[id] = MODULE_FINISHED return True In the first step, a :class:`DNSMessage` instance is created for a given query *(type TXT)*. The fourth argument specifies the flags *(authoritative answer)*. In the second step, we append TXT records containing the translation *(on the right side of RR)*. Then, the response is finished and ``qstate.return_msg`` contains new response. If no error, the module sets :attr:`module_qstate.return_rcode` and :attr:`module_qstate.ext_state`. **Steps:** 1. create :class:`DNSMessage` instance 2. append TXT records containing the translation 3. set response to ``qstate.return_msg`` Testing ------- Run the Unbound server: ``root@localhost>unbound -dv -c ./test-dict.conf`` In case you use own configuration file, don't forget to enable Python module:: module-config: "validator python iterator" and use valid script path:: python-script: "./examples/dict.py" The translation from english word *"a bar fly"* to Czech can be done by doing: ``>>>dig TXT @127.0.0.1 a.bar.fly.en._dict_.cz`` :: ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48691 ;; flags: aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;a.bar.fly.en._dict_.cz. IN TXT ;; ANSWER SECTION: a.bar.fly.en._dict_.cz. 300 IN TXT "barov\253 povale\232" ;; Query time: 5 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jan 01 17:44:18 2009 ;; MSG SIZE rcvd: 67 ``>>>dig TXT @127.0.0.1 nic.cs._dict_.cz`` :: ; <<>> DiG 9.5.0-P2 <<>> TXT @127.0.0.1 nic.cs._dict_.cz ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58710 ;; flags: aa rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;nic.cs._dict_.cz. IN TXT ;; ANSWER SECTION: nic.cs._dict_.cz. 300 IN TXT "aught" nic.cs._dict_.cz. 300 IN TXT "naught" nic.cs._dict_.cz. 300 IN TXT "nihil" nic.cs._dict_.cz. 300 IN TXT "nix" nic.cs._dict_.cz. 300 IN TXT "nothing" nic.cs._dict_.cz. 300 IN TXT "zilch" ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jan 01 17:45:39 2009 ;; MSG SIZE rcvd: 143 Proof that the unbound still works as resolver. ``>>>dig A @127.0.0.1 www.nic.cz`` :: ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19996 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5 ;; QUESTION SECTION: ;www.nic.cz. IN A ;; ANSWER SECTION: www.nic.cz. 1662 IN A 217.31.205.50 ;; AUTHORITY SECTION: ... Complete source code -------------------- .. literalinclude:: ../../examples/dict.py :language: python unbound-1.13.1/pythonmod/doc/examples/example5.rst0000644000175000017500000001442414010434640021562 0ustar wouterwouterEDNS options ============ This example shows how to interact with EDNS options. When querying unbound with the EDNS option ``65001`` and data ``0xc001`` we expect an answer with the same EDNS option code and data ``0xdeadbeef``. Key parts ~~~~~~~~~ This example relies on the following functionalities: Registering EDNS options ------------------------ By registering EDNS options we can tune unbound's behavior when encountering a query with a known EDNS option. The two available options are: - ``bypass_cache_stage``: If set to ``True`` unbound will not try to answer from cache. Instead execution is passed to the modules - ``no_aggregation``: If set to ``True`` unbound will consider this query unique and will not aggregate it with similar queries Both values default to ``False``. .. code-block:: python if not register_edns_option(env, 65001, bypass_cache_stage=True, no_aggregation=True): log_info("python: Could not register EDNS option {}".format(65001)) EDNS option lists ----------------- EDNS option lists can be found in the :class:`module_qstate` class. There are four available lists in total: - :class:`module_qstate.edns_opts_front_in`: options that came from the client side. **Should not** be changed - :class:`module_qstate.edns_opts_back_out`: options that will be sent to the server side. Can be populated by edns literate modules - :class:`module_qstate.edns_opts_back_in`: options that came from the server side. **Should not** be changed - :class:`module_qstate.edns_opts_front_out`: options that will be sent to the client side. Can be populated by edns literate modules Each list element has the following members: - ``code``: the EDNS option code; - ``data``: the EDNS option data. Reading an EDNS option list ........................... The lists' contents can be accessed in python by their ``_iter`` counterpart as an iterator: .. code-block:: python if not edns_opt_list_is_empty(qstate.edns_opts_front_in): for o in qstate.edns_opts_front_in_iter: log_info("python: Code: {}, Data: '{}'".format(o.code, "".join('{:02x}'.format(x) for x in o.data))) Writing to an EDNS option list .............................. By appending to an EDNS option list we can add new EDNS options. The new element is going to be allocated in :class:`module_qstate.region`. The data **must** be represented with a python ``bytearray``: .. code-block:: python b = bytearray.fromhex("deadbeef") if not edns_opt_list_append(qstate.edns_opts_front_out, o.code, b, qstate.region): log_info("python: Could not append EDNS option {}".format(o.code)) We can also remove an EDNS option code from an EDNS option list. .. code-block:: python if not edns_opt_list_remove(edns_opt_list, code): log_info("python: Option code {} was not found in the " "list.".format(code)) .. note:: All occurences of the EDNS option code will be removed from the list: Controlling other modules' cache behavior ----------------------------------------- During the modules' operation, some modules may interact with the cache (e.g., iterator). This behavior can be controlled by using the following :class:`module_qstate` flags: - :class:`module_qstate.no_cache_lookup`: Modules *operating after* this module will not lookup the cache for an answer - :class:`module_qstate.no_cache_store`: Modules *operating after* this module will not store the response in the cache Both values default to ``0``. .. code-block:: python def operate(id, event, qstate, qdata): if (event == MODULE_EVENT_NEW) or (event == MODULE_EVENT_PASS): # Detect if edns option code 56001 is present from the client side. If # so turn on the flags for cache management. if not edns_opt_list_is_empty(qstate.edns_opts_front_in): log_info("python: searching for edns option code 65001 during NEW " "or PASS event ") for o in qstate.edns_opts_front_in_iter: if o.code == 65001: log_info("python: found edns option code 65001") # Instruct other modules to not lookup for an # answer in the cache. qstate.no_cache_lookup = 1 log_info("python: enabled no_cache_lookup") # Instruct other modules to not store the answer in # the cache. qstate.no_cache_store = 1 log_info("python: enabled no_cache_store") Testing ~~~~~~~ Run the Unbound server: :: root@localhost$ unbound -dv -c ./test-edns.conf In case you use your own configuration file, don't forget to enable the Python module:: module-config: "validator python iterator" and use a valid script path:: python-script: "./examples/edns.py" Querying with EDNS option ``65001:0xc001``: :: root@localhost$ dig @localhost nlnetlabs.nl +ednsopt=65001:c001 ; <<>> DiG 9.10.3-P4-Ubuntu <<>> @localhost nlnetlabs.nl +ednsopt=65001:c001 ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33450 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; OPT=65001: de ad be ef ("....") ;; QUESTION SECTION: ;nlnetlabs.nl. IN A ;; ANSWER SECTION: nlnetlabs.nl. 10200 IN A 185.49.140.10 ;; AUTHORITY SECTION: nlnetlabs.nl. 10200 IN NS anyns.pch.net. nlnetlabs.nl. 10200 IN NS ns.nlnetlabs.nl. nlnetlabs.nl. 10200 IN NS ns-ext1.sidn.nl. nlnetlabs.nl. 10200 IN NS sec2.authdns.ripe.net. ;; ADDITIONAL SECTION: ns.nlnetlabs.nl. 10200 IN AAAA 2a04:b900::8:0:0:60 ns.nlnetlabs.nl. 10200 IN A 185.49.140.60 ;; Query time: 10 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Dec 05 14:50:56 CET 2016 ;; MSG SIZE rcvd: 212 Complete source code ~~~~~~~~~~~~~~~~~~~~ .. literalinclude:: ../../examples/edns.py :language: python unbound-1.13.1/pythonmod/doc/examples/example1.rst0000644000175000017500000000377214010434640021562 0ustar wouterwouter.. _log_handler: Packet logger ============= This example shows how to log and print details about query and response. As soon as the ``iterator`` has finished (event is :data:`module_event_moddone`), ``qstate.return_msg`` contains response packet or ``None``. This packet will be send to a client that asked for it. Complete source code -------------------- .. literalinclude:: ../../examples/log.py :language: python Testing ------- Run the unbound server: ``root@localhost>unbound -dv -c ./test-log.conf`` In case you use own configuration file, don't forget to enable python module: ``module-config: "validator python iterator"`` and use valid script path: ``python-script: "./examples/log.py"``. Example of output:: [1231790168] unbound[7941:0] info: response for [1231790168] unbound[7941:0] info: reply from 192.5.6.31#53 [1231790168] unbound[7941:0] info: query response was ANSWER [1231790168] unbound[7941:0] info: pythonmod: operate called, id: 1, event:module_event_moddone ---------------------------------------------------------------------------------------------------- Query: f.gtld-servers.NET., type: AAAA (28), class: IN (1) ---------------------------------------------------------------------------------------------------- Return reply :: flags: 8080, QDcount: 1, Security:0, TTL=86400 qinfo :: qname: ['f', 'gtld-servers', 'NET', ''] f.gtld-servers.NET., qtype: AAAA, qclass: IN Reply: 0 : ['gtld-servers', 'NET', ''] gtld-servers.NET. flags: 0000 type: SOA (6) class: IN (1) 0 : TTL= 86400 0x00 | 00 3A 02 41 32 05 4E 53 54 4C 44 03 43 4F 4D 00 05 | . : . A 2 . N S T L D . C O M . . 0x10 | 05 6E 73 74 6C 64 0C 76 65 72 69 73 69 67 6E 2D 67 | . n s t l d . v e r i s i g n - g 0x20 | 67 72 73 03 43 4F 4D 00 77 74 2D 64 00 00 0E 10 00 | g r s . C O M . w t - d . . . . . 0x30 | 00 00 03 84 00 12 75 00 00 01 51 80 | . . . . . . u . . . Q . unbound-1.13.1/pythonmod/doc/examples/example0.rst0000644000175000017500000001123414010434640021551 0ustar wouterwouter.. _example_handler: Fundamentals ================ This basic example shows how to create simple python module which will pass on the requests to the iterator. How to enable python module ---------------------------- If you look into unbound configuration file, you can find the option `module-config` which specifies the names and the order of modules to be used. Example configuration:: module-config: "validator python iterator" As soon as the DNS query arrives, Unbound calls modules starting from leftmost - the validator *(it is the first module on the list)*. The validator does not know the answer *(it can only validate)*, thus it will pass on the event to the next module. Next module is python which can a) generate answer *(response)* When python module generates the response unbound calls validator. Validator grabs the answer and determines the security flag. b) pass on the event to the iterator. When iterator resolves the query, Unbound informs python module (event :data:`module_event_moddone`). In the end, when the python module is done, validator is called. Note that the python module is called with :data:`module_event_pass` event, because new DNS event was already handled by validator. Another situation occurs when we use the following configuration:: module-config: "python validator iterator" Python module is the first module here, so it's invoked with :data:`module_event_new` event *(new query)*. On Python module initialization, module loads script from `python-script` option:: python-script: "/unbound/test/ubmodule.py" Simple python module step by step --------------------------------- Script file must contain four compulsory functions: .. function:: init(id, cfg) Initialize module internals, like database etc. Called just once on module load. :param id: module identifier (integer) :param cfg: :class:`config_file` configuration structure :: def init(id, cfg): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) return True .. function:: init_standard(id, env) Initialize module internals, like database etc. Called just once on module load. *Preferred* over the init() function above as this function's signature is the same as the C counterpart and allows for extra functionality during init. The previously accessible configuration options can now be found in env.cfg. :param id: module identifier (integer) :param env: :class:`module_env` module environment :: def init_standard(id, env): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, env.cfg.python_script)) return True .. function:: deinit(id) Deinitialize module internals. Called just once on module unload. :param id: module identifier (integer) :: def deinit(id): log_info("pythonmod: deinit called, module id is %d" % id) return True .. function:: inform_super(id, qstate, superqstate, qdata) Inform super querystate about the results from this subquerystate. Is called when the querystate is finished. :param id: module identifier (integer) :param qstate: :class:`module_qstate` Query state :param superqstate: :class:`pythonmod_qstate` Mesh state :param qdata: :class:`query_info` Query data :: def inform_super(id, qstate, superqstate, qdata): return True .. function:: operate(id, event, qstate, qdata) Perform action on pending query. Accepts a new query, or work on pending query. You have to set qstate.ext_state on exit. The state informs unbound about result and controls the following states. :param id: module identifier (integer) :param qstate: :class:`module_qstate` query state structure :param qdata: :class:`query_info` per query data, here you can store your own data :: def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) if event == MODULE_EVENT_NEW: qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: qstate.ext_state[id] = MODULE_FINISHED return True if event == MODULE_EVENT_PASS: qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") qstate.ext_state[id] = MODULE_ERROR return True Complete source code -------------------- .. literalinclude:: example0-1.py :language: python As you can see, the source code is much more flexible in contrast to C modules. Moreover, compulsory functions called on appropriate module events allows to handle almost anything from web control to query analysis. unbound-1.13.1/pythonmod/doc/examples/example0-1.py0000644000175000017500000000215514010434640021531 0ustar wouterwouterdef init(id, cfg): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) return True def init_standard(id, env): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, env.cfg.port, env.cfg.python_script)) return True def deinit(id): log_info("pythonmod: deinit called, module id is %d" % id) return True def inform_super(id, qstate, superqstate, qdata): return True def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) if event == MODULE_EVENT_NEW: qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: module we are waiting for is done") qstate.ext_state[id] = MODULE_FINISHED return True if event == MODULE_EVENT_PASS: log_info("pythonmod: event_pass") qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") qstate.ext_state[id] = MODULE_ERROR return True log_info("pythonmod: script loaded.") unbound-1.13.1/pythonmod/doc/examples/example6.rst0000644000175000017500000002735014010434640021565 0ustar wouterwouterInplace callbacks ================= This example shows how to register and use inplace callback functions. These functions are going to be called just before unbound replies back to a client. They can perform certain actions without interrupting unbound's execution flow (e.g. add/remove EDNS options, manipulate the reply). Two different scenarios will be shown: - If answering from cache and the client used EDNS option code ``65002`` we will answer with the same code but with data ``0xdeadbeef``; - When answering with a SERVFAIL we also add an empty EDNS option code ``65003``. Key parts ~~~~~~~~~ This example relies on the following functionalities: Registering inplace callback functions -------------------------------------- There are four types of inplace callback functions: - `inplace callback reply functions`_ - `inplace callback reply_cache functions`_ - `inplace callback reply_local functions`_ - `inplace callback reply_servfail functions`_ Inplace callback reply functions ................................ Called when answering with a *resolved* query. The callback function's prototype is the following: .. code-block:: python def inplace_reply_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering with a resolved query. :param qinfo: query_info struct; :param qstate: module qstate. It contains the available opt_lists; It SHOULD NOT be altered; :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data to be sent to the client side. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. """ .. note:: The function's name is irrelevant. We can register such function as: .. code-block:: python if not register_inplace_cb_reply(inplace_reply_callback, env, id): log_info("python: Could not register inplace callback function.") Inplace callback reply_cache functions ...................................... Called when answering *from cache*. The callback function's prototype is the following: .. code-block:: python def inplace_cache_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering from the cache. :param qinfo: query_info struct; :param qstate: module qstate. None; :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the EDNS options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. For demonstration purposes we want to see if EDNS option 65002 is present and reply with a new value. """ .. note:: The function's name is irrelevant. We can register such function as: .. code-block:: python if not register_inplace_cb_reply_cache(inplace_cache_callback, env, id): log_info("python: Could not register inplace callback function.") Inplace callback reply_local functions ...................................... Called when answering with *local data* or a *Chaos(CH) reply*. The callback function's prototype is the following: .. code-block:: python def inplace_local_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering from local data. :param qinfo: query_info struct; :param qstate: module qstate. None; :param rep: reply_info struct; :param rcode: return code for the query; :param edns: edns_data sent from the client side. The list with the EDNS options is accessible through edns.opt_list. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. """ .. note:: The function's name is irrelevant. We can register such function as: .. code-block:: python if not register_inplace_cb_reply_local(inplace_local_callback, env, id): log_info("python: Could not register inplace callback function.") Inplace callback reply_servfail functions ......................................... Called when answering with *SERVFAIL*. The callback function's prototype is the following: .. code-block:: python def inplace_servfail_callback(qinfo, qstate, rep, rcode, edns, opt_list_out, region, **kwargs): """ Function that will be registered as an inplace callback function. It will be called when answering with SERVFAIL. :param qinfo: query_info struct; :param qstate: module qstate. If not None the relevant opt_lists are available here; :param rep: reply_info struct. None; :param rcode: return code for the query. LDNS_RCODE_SERVFAIL; :param edns: edns_data to be sent to the client side. If qstate is None edns.opt_list contains the EDNS options sent from the client side. It SHOULD NOT be altered; :param opt_list_out: the list with the EDNS options that will be sent as a reply. It can be populated with EDNS options; :param region: region to allocate temporary data. Needs to be used when we want to append a new option to opt_list_out. :param **kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: Reply information for a communication point (comm_reply). :return: True on success, False on failure. For demonstration purposes we want to reply with an empty EDNS code '65003' and log the IP address(es) of the client(s). """ .. note:: The function's name is irrelevant. We can register such function as: .. code-block:: python if not register_inplace_cb_reply_servfail(inplace_servfail_callback, env, id): log_info("python: Could not register inplace callback function.") Testing ~~~~~~~ Run the Unbound server: :: root@localhost$ unbound -dv -c ./test-inplace_callbacks.conf In case you use your own configuration file, don't forget to enable the Python module:: module-config: "validator python iterator" and use a valid script path :: python-script: "./examples/inplace_callbacks.py" On the first query for the nlnetlabs.nl A record we get no EDNS option back: :: root@localhost$ dig @localhost nlnetlabs.nl +ednsopt=65002 ; <<>> DiG 9.10.3-P4-Ubuntu <<>> @localhost nlnetlabs.nl +ednsopt=65002 ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48057 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;nlnetlabs.nl. IN A ;; ANSWER SECTION: nlnetlabs.nl. 10200 IN A 185.49.140.10 ;; AUTHORITY SECTION: nlnetlabs.nl. 10200 IN NS ns.nlnetlabs.nl. nlnetlabs.nl. 10200 IN NS sec2.authdns.ripe.net. nlnetlabs.nl. 10200 IN NS anyns.pch.net. nlnetlabs.nl. 10200 IN NS ns-ext1.sidn.nl. ;; ADDITIONAL SECTION: ns.nlnetlabs.nl. 10200 IN A 185.49.140.60 ns.nlnetlabs.nl. 10200 IN AAAA 2a04:b900::8:0:0:60 ;; Query time: 813 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Dec 05 16:15:32 CET 2016 ;; MSG SIZE rcvd: 204 When we issue the same query again we get a cached response and the expected ``65002: 0xdeadbeef`` EDNS option: :: root@localhost$ dig @localhost nlnetlabs.nl +ednsopt=65002 ; <<>> DiG 9.10.3-P4-Ubuntu <<>> @localhost nlnetlabs.nl +ednsopt=65002 ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26489 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; OPT=65002: de ad be ef ("....") ;; QUESTION SECTION: ;nlnetlabs.nl. IN A ;; ANSWER SECTION: nlnetlabs.nl. 10197 IN A 185.49.140.10 ;; AUTHORITY SECTION: nlnetlabs.nl. 10197 IN NS ns.nlnetlabs.nl. nlnetlabs.nl. 10197 IN NS sec2.authdns.ripe.net. nlnetlabs.nl. 10197 IN NS anyns.pch.net. nlnetlabs.nl. 10197 IN NS ns-ext1.sidn.nl. ;; ADDITIONAL SECTION: ns.nlnetlabs.nl. 10197 IN AAAA 2a04:b900::8:0:0:60 ns.nlnetlabs.nl. 10197 IN A 185.49.140.60 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Dec 05 16:50:04 CET 2016 ;; MSG SIZE rcvd: 212 By issuing a query for a bogus domain unbound replies with SERVFAIL and an empty EDNS option code ``65003``. *For this example to work unbound needs to be validating*: :: root@localhost$ dig @localhost bogus.nlnetlabs.nl txt ; <<>> DiG 9.10.3-P4-Ubuntu <<>> @localhost bogus.nlnetlabs.nl txt ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 19865 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; OPT=65003 ;; QUESTION SECTION: ;bogus.nlnetlabs.nl. IN TXT ;; Query time: 11 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Dec 05 17:06:01 CET 2016 ;; MSG SIZE rcvd: 51 Complete source code ~~~~~~~~~~~~~~~~~~~~ .. literalinclude:: ../../examples/inplace_callbacks.py :language: python unbound-1.13.1/pythonmod/doc/examples/index.rst0000644000175000017500000000034314010434640021144 0ustar wouterwouter.. _Tutorials: Examples ======== Here you can find several tutorials which clarify the usage and capabilities of the Unbound scriptable interface. Tutorials --------- .. toctree:: :maxdepth: 2 :glob: example* unbound-1.13.1/pythonmod/doc/examples/example2.rst0000644000175000017500000000254214010434640021555 0ustar wouterwouterResponse generation =================== This example shows how to handle queries and generate response packet. .. note:: If the python module is the first module and validator module is enabled (``module-config: "python validator iterator"``), a return_msg security flag has to be set at least to 2. Leaving security flag untouched causes that the response will be refused by unbound worker as unbound will consider it as non-valid response. Complete source code -------------------- .. literalinclude:: ../../examples/resgen.py :language: python Testing ------- Run the unbound server: ``root@localhost>unbound -dv -c ./test-resgen.conf`` Query for a A record ending with .localdomain ``dig A test.xxx.localdomain @127.0.0.1`` Dig produces the following output:: ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48426 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;test.xxx.localdomain. IN A ;; ANSWER SECTION: test.xxx.localdomain. 10 IN A 127.0.0.1 ;; Query time: 2 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jan 01 12:46:02 2009 ;; MSG SIZE rcvd: 54 As we handle (override) in the python module only queries ending with ``localdomain.``, unbound can still resolve host names. unbound-1.13.1/pythonmod/doc/usecase.rst0000644000175000017500000000262614010434640017655 0ustar wouterwouterUse cases (examples) ==================== Dynamic DNS Service discovery (DNS-SD_) ------------------------------------------- Synchronized with database engine, for example *MySQL*. .. _DNS-SD: http://www.dns-sd.org/ Firewall control ---------------- Control firewall (e.g. enable incoming SSH connection) with DNS query signed with private key. So firewall can blocks every service during normal operation. Scriptable DNS-based blacklist (DNS-BL_) ------------------------------------------- Scripted in Python with already provided features, takes advantage of DNS reply, because almost every mail server supports DNS based blacklisting. .. _DNS-BL: http://www.dnsbl.org DNS based Wake-On-Lan --------------------- Controled by secured queries secured with private key. Dynamic translation service --------------------------- DNS request can be translated to virtually any answer, that's easy to implement in client side because of many DNS libraries available. Examples : * **Dictionary** - using *IDN* for non-ascii strings transfer, ``dig TXT slovo.en._dict_.nic.cz`` returns translation of "slovo" to EN. * **Translation** - Extends *DNS-SD*, for example DNS to Jabber to find out people logged in. * **Exchange rate calculator** - ``dig TXT 1000.99.czk.eur._rates_.nic.cz`` returns the given sum (1000.99 CZK) in EURs. Dynamic ENUM service -------------------- Support for redirection, synchronization, etc. unbound-1.13.1/pythonmod/doc/install.rst0000644000175000017500000000301514010434640017664 0ustar wouterwouterInstallation ============ Prerequisites ------------- Python 2.4 or higher, SWIG 1.3 or higher, GNU make Download -------- You can download the source codes `here`_. The latest release is 1.1.1, Jan 15, 2009. .. _here: unbound-1.1.1-py.tar.gz Compiling --------- After downloading, you can compile the Unbound library by doing:: > tar -xzf unbound-1.1.1-py.tar.gz > cd unbound-1.1.1 > ./configure --with-pythonmodule > make You need GNU make to compile sources. SWIG and Python devel libraries to compile extension module. Testing ------- If the compilation is successful, you can test the extension module by:: > cd pythonmod > make sudo # or "make test" or "make suexec" This will start unbound server with language dictionary service (see :ref:`Tutorials`). In order to test this service, type:: > dig TXT @127.0.0.1 aught.en._dict_.cz Dig should print this message (czech equivalent of aught):: ; <<>> DiG 9.5.0-P2 <<>> TXT @127.0.0.1 aught.en._dict_.cz ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30085 ;; flags: aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aught.en._dict_.cz. IN TXT ;; ANSWER SECTION: aught.en._dict_.cz. 300 IN TXT "nic" ;; Query time: 11 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Jan 10 16:45:58 2009 ;; MSG SIZE rcvd: 52 The ``pythonmod/examples`` directory contains simple applications written in Python. unbound-1.13.1/pythonmod/doc/_static/0000755000175000017500000000000014010434640017113 5ustar wouterwouterunbound-1.13.1/pythonmod/doc/_static/readme0000644000175000017500000000005614010434640020274 0ustar wouterwouterthis directory exists to pacify sphinx-build. unbound-1.13.1/pythonmod/doc/index.rst0000644000175000017500000000170414010434640017330 0ustar wouterwouterUnbound scriptable interface ======================================= Python module for **Unbound** provides easy-to-use flexible solution, for scripting query events and much more! Along with extensible **SWIG** interface, it turns **Unbound** into dynamic *DNS* service designed for rapid development of *DNS* based applications, like detailed *(per query/domain)* statistics, monitoring with anything Python can offer *(database backend, http server)*. **Key features** * Rapid dynamic DNS-based application development in **Python** * Extensible interface with **SWIG** * Easy to use debugging and analysis tool * Capable to produce authoritative answers * Support for logging or doing detailed statistics * Allows to manipulate with content of cache memory Contents -------- .. toctree:: :maxdepth: 2 install examples/index usecase modules/index Indices and tables ------------------- * :ref:`genindex` * :ref:`search` unbound-1.13.1/pythonmod/doc/modules/0000755000175000017500000000000014010434640017135 5ustar wouterwouterunbound-1.13.1/pythonmod/doc/modules/functions.rst0000644000175000017500000001627014010434640021705 0ustar wouterwouterScriptable functions ==================== Network ------- .. function:: ntohs(netshort) This subroutine converts values between the host and network byte order. Specifically, **ntohs()** converts 16-bit quantities from network byte order to host byte order. :param netshort: 16-bit short addr :rtype: converted addr Cache ----- .. function:: storeQueryInCache(qstate, qinfo, msgrep, is_referral) Store pending query in local cache. :param qstate: :class:`module_qstate` :param qinfo: :class:`query_info` :param msgrep: :class:`reply_info` :param is_referral: integer :rtype: boolean .. function:: invalidateQueryInCache(qstate, qinfo) Invalidate record in local cache. :param qstate: :class:`module_qstate` :param qinfo: :class:`query_info` EDNS options ------------ .. function:: register_edns_option(env, code, bypass_cache_stage=False, no_aggregation=False) Register EDNS option code. :param env: :class:`module_env` :param code: option code(integer) :param bypass_cache_stage: whether to bypass the cache response stage :param no_aggregation: whether this query should be unique :return: ``1`` if successful, ``0`` otherwise :rtype: integer .. function:: edns_opt_list_find(list, code) Find the EDNS option code in the EDNS option list. :param list: linked list of :class:`edns_option` :param code: option code (integer) :return: the edns option if found or None :rtype: :class:`edns_option` or None .. function:: edns_opt_list_remove(list, code); Remove an ENDS option code from the list. .. note:: All :class:`edns_option` with the code will be removed :param list: linked list of :class:`edns_option` :param code: option code (integer) :return: ``1`` if at least one :class:`edns_option` was removed, ``0`` otherwise :rtype: integer .. function:: edns_opt_list_append(list, code, data, region) Append given EDNS option code with data to the list. :param list: linked list of :class:`edns_option` :param code: option code (integer) :param data: EDNS data. **Must** be a :class:`bytearray` :param region: :class:`regional` .. function:: edns_opt_list_is_empty(list) Check if an EDNS option list is empty. :param list: linked list of :class:`edns_option` :return: ``1`` if list is empty, ``0`` otherwise :rtype: integer Inplace callbacks ----------------- .. function:: inplace_cb_reply(qinfo, qstate, rep, rcode, edns, opt_list_out, region, \*\*kwargs) Function prototype for callback functions used in `register_inplace_cb_reply`_, `register_inplace_cb_reply_cache`_, `register_inplace_cb_reply_local` and `register_inplace_cb_reply_servfail`. :param qinfo: :class:`query_info` :param qstate: :class:`module_qstate` :param rep: :class:`reply_info` :param rcode: return code (integer), check ``RCODE_`` constants. :param edns: :class:`edns_data` :param opt_list_out: :class:`edns_option`. EDNS option list to append options to. :param region: :class:`regional` :param \*\*kwargs: Dictionary that may contain parameters added in a future release. Current parameters: ``repinfo``: :class:`comm_reply`. Reply information for a communication point. .. function:: inplace_cb_query(qinfo, flags, qstate, addr, zone, region) Function prototype for callback functions used in `register_inplace_cb_query`_. :param qinfo: :class:`query_info` :param flags: query flags (integer) :param qstate: :class:`module_qstate` :param addr: :class:`sockaddr_storage` :param zone: zone name in wire format (bytes) :param region: :class:`regional` .. function:: register_inplace_cb_reply(py_cb, env, id) Register py_cb as an inplace reply callback function. :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise :rtype: boolean .. function:: register_inplace_cb_reply_cache(py_cb, env, id) Register py_cb as an inplace reply_cache callback function. :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise :rtype: boolean .. function:: register_inplace_cb_reply_local(py_cb, env, id) Register py_cb as an inplace reply_local callback function. :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise :rtype: boolean .. function:: register_inplace_cb_reply_servfail(py_cb, env, id) Register py_cb as an inplace reply_servfail callback function. :param py_cb: Python function that follows `inplace_cb_reply`_'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise :rtype: boolean .. function:: register_inplace_cb_query(py_cb, env, id) Register py_cb as an inplace query callback function. :param py_cb: Python function that follows `inplace_cb_query`_'s prototype. **Must** be callable. :param env: :class:`module_env` :param id: Module ID. :return: True on success, False otherwise :rtype: boolean Logging ------- .. function:: verbose(level, msg) Log a verbose message, pass the level for this message. No trailing newline is needed. :param level: verbosity level for this message, compared to global verbosity setting. :param msg: string message .. function:: log_info(msg) Log informational message. No trailing newline is needed. :param msg: string message .. function:: log_err(msg) Log error message. No trailing newline is needed. :param msg: string message .. function:: log_warn(msg) Log warning message. No trailing newline is needed. :param msg: string message .. function:: log_hex(msg, data, length) Log a hex-string to the log. Can be any length. performs mallocs to do so, slow. But debug useful. :param msg: string desc to accompany the hexdump. :param data: data to dump in hex format. :param length: length of data. .. function:: log_dns_msg(str, qinfo, reply) Log DNS message. :param str: string message :param qinfo: :class:`query_info` :param reply: :class:`reply_info` .. function:: log_query_info(verbosity_value, str, qinf) Log query information. :param verbosity_value: see constants :param str: string message :param qinf: :class:`query_info` .. function:: regional_log_stats(r) Log regional statistics. :param r: :class:`regional` Debugging --------- .. function:: strextstate(module_ext_state) Debug utility, module external qstate to string. :param module_ext_state: the state value. :rtype: descriptive string. .. function:: strmodulevent(module_event) Debug utility, module event to string. :param module_event: the module event value. :rtype: descriptive string. .. function:: ldns_rr_type2str(atype) Convert RR type to string. .. function:: ldns_rr_class2str(aclass) Convert RR class to string. unbound-1.13.1/pythonmod/doc/modules/config.rst0000644000175000017500000001635214010434640021143 0ustar wouterwouterConfiguration interface ======================= Currently passed to Python module in init(module_id, cfg). config_file -------------------- .. class:: config_file This class provides these data attributes: .. attribute:: verbosity Verbosity level as specified in the config file. .. attribute:: stat_interval Statistics interval (in seconds). .. attribute:: stat_cumulative If false, statistics values are reset after printing them. .. attribute:: stat_extended If true, the statistics are kept in greater detail. .. attribute:: num_threads Number of threads to create. .. attribute:: port Port on which queries are answered. .. attribute:: do_ip4 Do ip4 query support. .. attribute:: do_ip6 Do ip6 query support. .. attribute:: do_udp Do udp query support. .. attribute:: do_tcp Do tcp query support. .. attribute:: outgoing_num_ports Outgoing port range number of ports (per thread). .. attribute:: outgoing_num_tcp Number of outgoing tcp buffers per (per thread). .. attribute:: incoming_num_tcp Number of incoming tcp buffers per (per thread). .. attribute:: outgoing_avail_ports Allowed udp port numbers, array with 0 if not allowed. .. attribute:: msg_buffer_size Number of bytes buffer size for DNS messages. .. attribute:: msg_cache_size Size of the message cache. .. attribute:: msg_cache_slabs Slabs in the message cache. .. attribute:: num_queries_per_thread Number of queries every thread can service. .. attribute:: jostle_time Number of msec to wait before items can be jostled out. .. attribute:: rrset_cache_size Size of the rrset cache. .. attribute:: rrset_cache_slabs Slabs in the rrset cache. .. attribute:: host_ttl Host cache ttl in seconds. .. attribute:: lame_ttl Host is lame for a zone ttl, in seconds. .. attribute:: infra_cache_slabs Number of slabs in the infra host cache. .. attribute:: infra_cache_numhosts Max number of hosts in the infra cache. .. attribute:: infra_cache_lame_size Max size of lame zones per host in the infra cache. .. attribute:: target_fetch_policy The target fetch policy for the iterator. .. attribute:: if_automatic Automatic interface for incoming messages. Uses ipv6 remapping, and recvmsg/sendmsg ancillary data to detect interfaces, boolean. .. attribute:: num_ifs Number of interfaces to open. If 0 default all interfaces. .. attribute:: ifs Interface description strings (IP addresses). .. attribute:: num_out_ifs Number of outgoing interfaces to open. If 0 default all interfaces. .. attribute:: out_ifs Outgoing interface description strings (IP addresses). .. attribute:: root_hints The root hints. .. attribute:: stubs The stub definitions, linked list. .. attribute:: forwards The forward zone definitions, linked list. .. attribute:: donotqueryaddrs List of donotquery addresses, linked list. .. attribute:: acls List of access control entries, linked list. .. attribute:: donotquery_localhost Use default localhost donotqueryaddr entries. .. attribute:: harden_short_bufsize Harden against very small edns buffer sizes. .. attribute:: harden_large_queries Harden against very large query sizes. .. attribute:: harden_glue Harden against spoofed glue (out of zone data). .. attribute:: harden_dnssec_stripped Harden against receiving no DNSSEC data for trust anchor. .. attribute:: harden_referral_path Harden the referral path, query for NS,A,AAAA and validate. .. attribute:: use_caps_bits_for_id Use 0x20 bits in query as random ID bits. .. attribute:: private_address Strip away these private addrs from answers, no DNS Rebinding. .. attribute:: private_domain Allow domain (and subdomains) to use private address space. .. attribute:: unwanted_threshold What threshold for unwanted action. .. attribute:: chrootdir Chrootdir, if not "" or chroot will be done. .. attribute:: username Username to change to, if not "". .. attribute:: directory Working directory. .. attribute:: logfile Filename to log to. .. attribute:: pidfile Pidfile to write pid to. .. attribute:: use_syslog Should log messages be sent to syslogd. .. attribute:: hide_identity Do not report identity (id.server, hostname.bind). .. attribute:: hide_version Do not report version (version.server, version.bind). .. attribute:: identity Identity, hostname is returned if "". .. attribute:: version Version, package version returned if "". .. attribute:: module_conf The module configuration string. .. attribute:: trust_anchor_file_list Files with trusted DS and DNSKEYs in zonefile format, list. .. attribute:: trust_anchor_list List of trustanchor keys, linked list. .. attribute:: trusted_keys_file_list Files with trusted DNSKEYs in named.conf format, list. .. attribute:: max_ttl The number of seconds maximal TTL used for RRsets and messages. .. attribute:: val_date_override If not 0, this value is the validation date for RRSIGs. .. attribute:: bogus_ttl This value sets the number of seconds before revalidating bogus. .. attribute:: val_clean_additional Should validator clean additional section for secure msgs. .. attribute:: val_permissive_mode Should validator allow bogus messages to go through. .. attribute:: val_nsec3_key_iterations Nsec3 maximum iterations per key size, string. .. attribute:: key_cache_size Size of the key cache. .. attribute:: key_cache_slabs Slabs in the key cache. .. attribute:: neg_cache_size Size of the neg cache. .. attribute:: local_zones Local zones config. .. attribute:: local_zones_nodefault Local zones nodefault list. .. attribute:: local_data Local data RRs configured. .. attribute:: remote_control_enable Remote control section. enable toggle. .. attribute:: control_ifs The interfaces the remote control should listen on. .. attribute:: control_port Port number for the control port. .. attribute:: server_key_file Private key file for server. .. attribute:: server_cert_file Certificate file for server. .. attribute:: control_key_file Private key file for unbound-control. .. attribute:: control_cert_file Certificate file for unbound-control. .. attribute:: do_daemonize Daemonize, i.e. fork into the background. .. attribute:: python_script Python script file. unbound-1.13.1/pythonmod/doc/modules/struct.rst0000644000175000017500000003272314010434640021222 0ustar wouterwouterScriptable structures ===================== module_qstate ----------------------- .. class:: module_qstate Module state, per query. This class provides these data attributes: .. attribute:: qinfo (:class:`query_info`) Informations about query being answered. Name, RR type, RR class. .. attribute:: query_flags (uint16) Flags for query. See QF_BIT\_ predefined constants. .. attribute:: is_priming If this is a (stub or root) priming query (with hints). .. attribute:: reply comm_reply contains server replies. .. attribute:: return_msg (:class:`dns_msg`) The reply message, with message for client and calling module (read-only attribute). Note that if you want to create of modify return_msg you should use :class:`DNSMessage`. .. attribute:: return_rcode The rcode, in case of error, instead of a reply message. Determines whether the return_msg contains reply. .. attribute:: region Region for this query. Cleared when query process finishes. .. attribute:: curmod Which module is executing. .. attribute:: ext_state[] Module states. .. attribute:: env Environment for this query. .. attribute:: mesh_info Mesh related information for this query. .. attribute:: edns_opts_front_in Incoming EDNS options from the front end. .. attribute:: edns_opts_front_in_iter Iterator for `edns_opts_front_in`. .. attribute:: edns_opts_back_out Outgoing EDNS options to the back end. .. attribute:: edns_opts_back_out_iter Iterator for `edns_opts_back_out`. .. attribute:: edns_opts_back_in Incoming EDNS options from the back end. .. attribute:: edns_opts_back_in_iter Iterator for `ends_opts_back_in`. .. attribute:: edns_opts_front_out Outgoing EDNS options to the front end. .. attribute:: edns_opts_front_out_iter Iterator for `edns_opts_front_out`. .. attribute:: no_cache_lookup Flag to indicate whether modules should answer from the cache. .. attribute:: no_cache_store Flag to indicate whether modules should store answer in the cache. query_info ---------------- .. class:: query_info This class provides these data attributes: .. attribute:: qname The original question in the wireformat format (e.g. \\x03www\\x03nic\\x02cz\\x00 for www.nic.cz) .. attribute:: qname_len Length of question name (number of bytes). .. attribute:: qname_list[] The question ``qname`` converted into list of labels (e.g. ['www','nic','cz',''] for www.nic.cz) .. attribute:: qname_str The question ``qname`` converted into string (e.g. www.nic.cz. for www.nic.cz) .. attribute:: qtype The class type asked for. See RR_TYPE\_ predefined constants. .. attribute:: qtype_str The ``qtype`` in display presentation format (string) (e.g 'A' for RR_TYPE_A) .. attribute:: qclass The question class. See RR_CLASS\_ predefined constants. .. attribute:: qclass_str The ``qclass`` in display presentation format (string). edns_data --------- .. class:: edns_data This class represents the EDNS information parsed/encoded from/to a packet. It provides these data attributes: .. attribute:: edns_present If EDNS OPT record is present. .. attribute:: ext_rcode Extended RCODE. .. attribute:: edns_version The EDNS version number. .. attribute:: bits The EDNS bits field from ttl (host order): Z. .. attribute:: udp_size UDP reassembly size. .. attribute:: opt_list The EDNS option list. .. attribute:: opt_list_iter Iterator for `opt_list`. edns_option ----------- .. class:: edns_option This class represents an EDNS option (code, data) found in EDNS option lists. It provides these data attributes: .. attribute:: code The EDNS option code. .. attribute:: data The EDNS option data. reply_info -------------------- .. class:: reply_info This class provides these data attributes: .. attribute:: flags The flags for the answer, host byte order. .. attribute:: qdcount Number of RRs in the query section. If qdcount is not 0, then it is 1, and the data that appears in the reply is the same as the query_info. Host byte order. .. attribute:: ttl TTL of the entire reply (for negative caching). only for use when there are 0 RRsets in this message. if there are RRsets, check those instead. .. attribute:: security The security status from DNSSEC validation of this message. See sec_status\_ predefined constants. .. attribute:: an_numrrsets Number of RRsets in each section. The answer section. Add up the RRs in every RRset to calculate the number of RRs, and the count for the dns packet. The number of RRs in RRsets can change due to RRset updates. .. attribute:: ns_numrrsets Count of authority section RRsets .. attribute:: ar_numrrsets Count of additional section RRsets .. attribute:: rrset_count Number of RRsets: an_numrrsets + ns_numrrsets + ar_numrrsets .. attribute:: rrsets[] (:class:`ub_packed_rrset_key`) List of RR sets in the order in which they appear in the reply message. Number of elements is ancount + nscount + arcount RRsets. .. attribute:: ref[] (:class:`rrset_ref`) Packed array of ids (see counts) and pointers to packed_rrset_key. The number equals ancount + nscount + arcount RRsets. These are sorted in ascending pointer, the locking order. So this list can be locked (and id, ttl checked), to see if all the data is available and recent enough. dns_msg -------------- .. class:: dns_msg Region allocated message reply This class provides these data attributes: .. attribute:: qinfo (:class:`query_info`) Informations about query. .. attribute:: rep (:class:`reply_info`) This attribute points to the packed reply structure. packed_rrset_key ---------------------- .. class:: packed_rrset_key The identifying information for an RRset. This class provides these data attributes: .. attribute:: dname The domain name. If not empty (for ``id = None``) it is allocated, and contains the wireformat domain name. This dname is not canonicalized. E.g., the dname contains \\x03www\\x03nic\\x02cz\\x00 for www.nic.cz. .. attribute:: dname_len Length of the domain name, including last 0 root octet. .. attribute:: dname_list[] The domain name ``dname`` converted into list of labels (see :attr:`query_info.qname_list`). .. attribute:: dname_str The domain name ``dname`` converted into string (see :attr:`query_info.qname_str`). .. attribute:: flags Flags. .. attribute:: type The rrset type in network format. .. attribute:: type_str The rrset type in display presentation format. .. attribute:: rrset_class The rrset class in network format. .. attribute:: rrset_class_str The rrset class in display presentation format. ub_packed_rrset_key ------------------------- .. class:: ub_packed_rrset_key This structure contains an RRset. A set of resource records that share the same domain name, type and class. Due to memory management and threading, the key structure cannot be deleted, although the data can be. The id can be set to 0 to store and the structure can be recycled with a new id. The :class:`ub_packed_rrset_key` provides these data attributes: .. attribute:: entry (:class:`lruhash_entry`) Entry into hashtable. Note the lock is never destroyed, even when this key is retired to the cache. the data pointer (if not None) points to a :class:`packed_rrset`. .. attribute:: id The ID of this rrset. unique, based on threadid + sequenceno. ids are not reused, except after flushing the cache. zero is an unused entry, and never a valid id. Check this value after getting entry.lock. The other values in this struct may only be altered after changing the id (which needs a writelock on entry.lock). .. attribute:: rk (:class:`packed_rrset_key`) RR set data. lruhash_entry ------------------------- .. class:: lruhash_entry The :class:`ub_packed_rrset_key` provides these data attributes: .. attribute:: lock rwlock for access to the contents of the entry. Note that you cannot change hash and key, if so, you have to delete it to change hash or key. .. attribute:: data (:class:`packed_rrset_data`) entry data stored in wireformat (RRs and RRsigs). packed_rrset_data ----------------------- .. class:: packed_rrset_data Rdata is stored in wireformat. The dname is stored in wireformat. TTLs are stored as absolute values (and could be expired). RRSIGs are stored in the arrays after the regular rrs. You need the packed_rrset_key to know dname, type, class of the resource records in this RRset. (if signed the rrsig gives the type too). The :class:`packed_rrset_data` provides these data attributes: .. attribute:: ttl TTL (in seconds like time()) of the RRset. Same for all RRs see rfc2181(5.2). .. attribute:: count Number of RRs. .. attribute:: rrsig_count Number of rrsigs, if 0 no rrsigs. .. attribute:: trust The trustworthiness of the RRset data. .. attribute:: security Security status of the RRset data. See sec_status\_ predefined constants. .. attribute:: rr_len[] Length of every RR's rdata, rr_len[i] is size of rr_data[i]. .. attribute:: rr_ttl[] TTL of every rr. rr_ttl[i] ttl of rr i. .. attribute:: rr_data[] Array of RR's rdata (list of strings). The rdata is stored in uncompressed wireformat. The first 16B of rr_data[i] is rdlength in network format. DNSMessage ---------------- .. class:: DNSMessage Abstract representation of DNS message. **Usage** This example shows how to create an authoritative answer response :: msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_AA) #append RR if (qstate.qinfo.qtype == RR_TYPE_A) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN A 127.0.0.1" % qstate.qinfo.qname_str) #set qstate.return_msg if not msg.set_return_msg(qstate): raise Exception("Can't create response") The :class:`DNSMessage` provides these methods and data attributes: .. method:: __init__(self, rr_name, rr_type, rr_class = RR_CLASS_IN, query_flags = 0, default_ttl = 0) Prepares an answer (DNS packet) from given information. Query flags are combination of PKT_xx constants. .. method:: set_return_msg(self, qstate) This method fills qstate return message according to the given informations. It takes lists of RRs in each section of answer, created necessary RRsets in wire format and store the result in :attr:`qstate.return_msg`. Returns 1 if OK. .. attribute:: rr_name RR name of question. .. attribute:: rr_type RR type of question. .. attribute:: rr_class RR class of question. .. attribute:: default_ttl Default time-to-live. .. attribute:: query_flags Query flags. See PKT\_ predefined constants. .. attribute:: question[] List of resource records that should appear (in the same order) in question section of answer. .. attribute:: answer[] List of resource records that should appear (in the same order) in answer section of answer. .. attribute:: authority[] List of resource records that should appear (in the same order) in authority section of answer. .. attribute:: additional[] List of resource records that should appear (in the same order) in additional section of answer. pythonmod_env ----------------------- .. class:: pythonmod_env Global state for the module. This class provides these data attributes: .. attribute:: data Here you can keep your own data shared across each thread. .. attribute:: fname Python script filename. .. attribute:: qstate Module query state. pythonmod_qstate ----------------------- .. class:: pythonmod_qstate Per query state for the iterator module. This class provides these data attributes: .. attribute:: data Here you can keep your own private data (each thread has own data object). sockaddr_storage ------------------------- .. class:: sockaddr_storage The :class:`sockaddr_storage` provides these data attributes: .. attribute:: family Address family name as a string. Possible values are `ip4`, `ip6`, and `unix`. .. attribute:: addr Address in presentation format. .. attribute:: raw_addr Address in network wire format. .. attribute:: port Port number. Invalid for Unix address. .. attribute:: flowinfo Flow info value. Valid only for IPv6 address. .. attribute:: scope_id Scope ID value. Valid only for IPv6 address. unbound-1.13.1/pythonmod/doc/modules/index.rst0000644000175000017500000000021514010434640020774 0ustar wouterwouterUnbound module documentation ======================================= .. toctree:: :maxdepth: 2 env struct functions config unbound-1.13.1/pythonmod/doc/modules/env.rst0000644000175000017500000001600614010434640020462 0ustar wouterwouterGlobal environment ================== Global variables ---------------- .. envvar:: mod_env Module environment, contains data pointer for module-specific data. See :class:`pythonmod_env`. Predefined constants ----------------------- Module extended state ~~~~~~~~~~~~~~~~~~~~~~~ .. data:: module_state_initial Initial state - new DNS query. .. data:: module_wait_reply Waiting for reply to outgoing network query. .. data:: module_wait_module Module is waiting for another module. .. data:: module_wait_subquery Module is waiting for sub-query. .. data:: module_error Module could not finish the query. .. data:: module_finished Module is finished with query. Module event ~~~~~~~~~~~~~ .. data:: module_event_new New DNS query. .. data:: module_event_pass Query passed by other module. .. data:: module_event_reply Reply inbound from server. .. data:: module_event_noreply No reply, timeout or other error. .. data:: module_event_capsfail Reply is there, but capitalisation check failed. .. data:: module_event_moddone Next module is done, and its reply is awaiting you. .. data:: module_event_error Error occurred. Security status ~~~~~~~~~~~~~~~~ .. data:: sec_status_unchecked Means that object has yet to be validated. .. data:: sec_status_bogus Means that the object *(RRset or message)* failed to validate *(according to local policy)*, but should have validated. .. data:: sec_status_indeterminate Means that the object is insecure, but not authoritatively so. Generally this means that the RRset is not below a configured trust anchor. .. data:: sec_status_insecure Means that the object is authoritatively known to be insecure. Generally this means that this RRset is below a trust anchor, but also below a verified, insecure delegation. .. data:: sec_status_secure Means that the object (RRset or message) validated according to local policy. Resource records (RR sets) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The different RR classes. .. data:: RR_CLASS_IN Internet. .. data:: RR_CLASS_CH Chaos. .. data:: RR_CLASS_HS Hesiod (Dyer 87) .. data:: RR_CLASS_NONE None class, dynamic update. .. data:: RR_CLASS_ANY Any class. The different RR types. .. data:: RR_TYPE_A A host address. .. data:: RR_TYPE_NS An authoritative name server. .. data:: RR_TYPE_MD A mail destination (Obsolete - use MX). .. data:: RR_TYPE_MF A mail forwarder (Obsolete - use MX). .. data:: RR_TYPE_CNAME The canonical name for an alias. .. data:: RR_TYPE_SOA Marks the start of a zone of authority. .. data:: RR_TYPE_MB A mailbox domain name (EXPERIMENTAL). .. data:: RR_TYPE_MG A mail group member (EXPERIMENTAL). .. data:: RR_TYPE_MR A mail rename domain name (EXPERIMENTAL). .. data:: RR_TYPE_NULL A null RR (EXPERIMENTAL). .. data:: RR_TYPE_WKS A well known service description. .. data:: RR_TYPE_PTR A domain name pointer. .. data:: RR_TYPE_HINFO Host information. .. data:: RR_TYPE_MINFO Mailbox or mail list information. .. data:: RR_TYPE_MX Mail exchange. .. data:: RR_TYPE_TXT Text strings. .. data:: RR_TYPE_RP RFC1183. .. data:: RR_TYPE_AFSDB RFC1183. .. data:: RR_TYPE_X25 RFC1183. .. data:: RR_TYPE_ISDN RFC1183. .. data:: RR_TYPE_RT RFC1183. .. data:: RR_TYPE_NSAP RFC1706. .. data:: RR_TYPE_NSAP_PTR RFC1348. .. data:: RR_TYPE_SIG 2535typecode. .. data:: RR_TYPE_KEY 2535typecode. .. data:: RR_TYPE_PX RFC2163. .. data:: RR_TYPE_GPOS RFC1712. .. data:: RR_TYPE_AAAA IPv6 address. .. data:: RR_TYPE_LOC LOC record RFC1876. .. data:: RR_TYPE_NXT 2535typecode. .. data:: RR_TYPE_EID draft-ietf-nimrod-dns-01.txt. .. data:: RR_TYPE_NIMLOC draft-ietf-nimrod-dns-01.txt. .. data:: RR_TYPE_SRV SRV record RFC2782. .. data:: RR_TYPE_ATMA http://www.jhsoft.com/rfc/af-saa-0069.000.rtf. .. data:: RR_TYPE_NAPTR RFC2915. .. data:: RR_TYPE_KX RFC2230. .. data:: RR_TYPE_CERT RFC2538. .. data:: RR_TYPE_A6 RFC2874. .. data:: RR_TYPE_DNAME RFC2672. .. data:: RR_TYPE_SINK dnsind-kitchen-sink-02.txt. .. data:: RR_TYPE_OPT Pseudo OPT record. .. data:: RR_TYPE_APL RFC3123. .. data:: RR_TYPE_DS draft-ietf-dnsext-delegation. .. data:: RR_TYPE_SSHFP SSH Key Fingerprint. .. data:: RR_TYPE_IPSECKEY draft-richardson-ipseckey-rr-11.txt. .. data:: RR_TYPE_RRSIG draft-ietf-dnsext-dnssec-25. .. data:: RR_TYPE_NSEC .. data:: RR_TYPE_DNSKEY .. data:: RR_TYPE_DHCID .. data:: RR_TYPE_NSEC3 .. data:: RR_TYPE_NSEC3PARAMS .. data:: RR_TYPE_UINFO .. data:: RR_TYPE_UID .. data:: RR_TYPE_GID .. data:: RR_TYPE_UNSPEC .. data:: RR_TYPE_TSIG .. data:: RR_TYPE_IXFR .. data:: RR_TYPE_AXFR .. data:: RR_TYPE_MAILB A request for mailbox-related records (MB, MG or MR). .. data:: RR_TYPE_MAILA A request for mail agent RRs (Obsolete - see MX). .. data:: RR_TYPE_ANY Any type *(wildcard)*. .. data:: RR_TYPE_DLV RFC 4431, 5074, DNSSEC Lookaside Validation. Return codes ~~~~~~~~~~~~ Return codes for packets. .. data:: RCODE_NOERROR .. data:: RCODE_FORMERR .. data:: RCODE_SERVFAIL .. data:: RCODE_NXDOMAIN .. data:: RCODE_NOTIMPL .. data:: RCODE_REFUSED .. data:: RCODE_YXDOMAIN .. data:: RCODE_YXRRSET .. data:: RCODE_NXRRSET .. data:: RCODE_NOTAUTH .. data:: RCODE_NOTZONE Packet data ~~~~~~~~~~~~ .. data:: PKT_QR Query - query flag. .. data:: PKT_AA Authoritative Answer - server flag. .. data:: PKT_TC Truncated - server flag. .. data:: PKT_RD Recursion desired - query flag. .. data:: PKT_CD Checking disabled - query flag. .. data:: PKT_RA Recursion available - server flag. .. data:: PKT_AD Authenticated data - server flag. Verbosity value ~~~~~~~~~~~~~~~~ .. data:: NO_VERBOSE No verbose messages. .. data:: VERB_OPS Operational information. .. data:: VERB_DETAIL Detailed information. .. data:: VERB_QUERY Query level information. .. data:: VERB_ALGO Algorithm level information. unbound-1.13.1/pythonmod/doc/conf.py0000644000175000017500000001334114010434640016766 0ustar wouterwouter# -*- coding: utf-8 -*- # # Unbound scripting interface documentation build configuration file # # This file is execfile()d with the current directory set to its containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed automatically). # # All configuration values have a default value; values that are commented out # serve to show the default value. import sys, os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'../..'))) #print sys.path # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The master toctree document. master_doc = 'index' # General substitutions. project = 'Unbound scriptable interface' copyright = '2009, Zdenek Vasicek, Marek Vavrusa' # The default replacements for |version| and |release|, also used in various # other places throughout the built documents. # # The short X.Y version. version = '1.0' # The full version, including alpha/beta/rc tags. release = '1.0.0' # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # List of directories, relative to source directories, that shouldn't be searched # for source files. #exclude_dirs = [] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # Options for HTML output # ----------------------- # The theme that the html output should use. html_theme = "classic" # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. #html_style = 'default.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (within the static path) to place at the top of # the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. html_use_modindex = False # If false, no index is generated. html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. html_copy_source = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'unbound_interface' # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class [howto/manual]). latex_documents = [ ('index', 'Unbound_interface.tex', 'Unbound scriptable interface', 'Zdenek Vasicek, Marek Vavrusa', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True unbound-1.13.1/pythonmod/test-dict.conf0000644000175000017500000000053614010434640017473 0ustar wouterwouter# Example configuration file for dict.py server: verbosity: 1 interface: 0.0.0.0 do-daemonize: no access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/dict.py" unbound-1.13.1/pythonmod/ubmodule-msg.py0000644000175000017500000001461614010434640017702 0ustar wouterwouter# -*- coding: utf-8 -*- ''' ubmodule-msg.py: simple response packet logger Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' import os def init(id, cfg): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) return True def deinit(id): log_info("pythonmod: deinit called, module id is %d" % id) return True def inform_super(id, qstate, superqstate, qdata): return True def setTTL(qstate, ttl): """Sets return_msg TTL and all the RRs TTL""" if qstate.return_msg: qstate.return_msg.rep.ttl = ttl if (qstate.return_msg.rep): for i in range(0,qstate.return_msg.rep.rrset_count): d = qstate.return_msg.rep.rrsets[i].entry.data for j in range(0,d.count+d.rrsig_count): d.rr_ttl[j] = ttl def dataHex(data, prefix=""): res = "" for i in range(0, (len(data)+15)/16): res += "%s0x%02X | " % (prefix, i*16) d = map(lambda x:ord(x), data[i*16:i*16+17]) for ch in d: res += "%02X " % ch for i in range(0,17-len(d)): res += " " res += "| " for ch in d: if (ch < 32) or (ch > 127): res += ". " else: res += "%c " % ch res += "\n" return res def printReturnMsg(qstate): print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl) print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str if (qstate.return_msg.rep): print "RRSets:",qstate.return_msg.rep.rrset_count prevkey = None for i in range(0,qstate.return_msg.rep.rrset_count): r = qstate.return_msg.rep.rrsets[i] rk = r.rk print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags, print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class) d = r.entry.data print " RRDatas:",d.count+d.rrsig_count for j in range(0,d.count+d.rrsig_count): print " ",j,":","TTL=",d.rr_ttl[j],"RR data:" print dataHex(d.rr_data[j]," ") def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) #print "pythonmod: per query data", qdata print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, qstate.qinfo.qname_str, print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype, print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass print #if event == MODULE_EVENT_PASS: #pokud mame "validator python iterator" if (event == MODULE_EVENT_NEW) and (qstate.qinfo.qname_str.endswith(".seznam.cz.")): #pokud mame "python validator iterator" print qstate.qinfo.qname_str qstate.ext_state[id] = MODULE_FINISHED msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300) #msg.authority.append("xxx.seznam.cz. 10 IN A 192.168.1.1") #msg.additional.append("yyy.seznam.cz. 10 IN A 1.1.1.2.") if qstate.qinfo.qtype == RR_TYPE_A: msg.answer.append("%s 10 IN A 192.168.1.1" % qstate.qinfo.qname_str) if (qstate.qinfo.qtype == RR_TYPE_SRV) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN SRV 0 0 80 neinfo.example.com." % qstate.qinfo.qname_str) if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY): msg.answer.append("%s 10 IN TXT path=/" % qstate.qinfo.qname_str) if not msg.set_return_msg(qstate): qstate.ext_state[id] = MODULE_ERROR return True #qstate.return_msg.rep.security = 2 #pokud nebude nasledovat validator, je zapotrebi nastavit security, aby nebyl paket zahozen v mesh_send_reply printReturnMsg(qstate) #Authoritative result can't be stored in cache #if (not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0)): # print "Can't store in cache" # qstate.ext_state[id] = MODULE_ERROR # return False #print "Store OK" qstate.return_rcode = RCODE_NOERROR return True if event == MODULE_EVENT_NEW: qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: previous module done") qstate.ext_state[id] = MODULE_FINISHED return True if event == MODULE_EVENT_PASS: log_info("pythonmod: event_pass") qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") qstate.ext_state[id] = MODULE_ERROR return True log_info("pythonmod: script loaded.") unbound-1.13.1/pythonmod/pythonmod_utils.c0000644000175000017500000001520614010434640020331 0ustar wouterwouter/* * pythonmod_utils.c: utilities used by wrapper * * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ /** * \file * Utility functions for the python module that perform stores and loads and * conversions. */ #include "config.h" #include "pythonmod/pythonmod_utils.h" #include "util/module.h" #include "util/netevent.h" #include "util/net_help.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/storage/slabhash.h" #include "util/regional.h" #include "iterator/iter_delegpt.h" #include "sldns/sbuffer.h" #undef _POSIX_C_SOURCE #undef _XOPEN_SOURCE #include /* Store the reply_info and query_info pair in message cache (qstate->msg_cache) */ int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, struct reply_info* msgrep, int is_referral) { if (!msgrep) return 0; if (msgrep->authoritative) /*authoritative answer can't be stored in cache*/ { PyErr_SetString(PyExc_ValueError, "Authoritative answer can't be stored"); return 0; } return dns_cache_store(qstate->env, qinfo, msgrep, is_referral, qstate->prefetch_leeway, 0, NULL, qstate->query_flags); } /* Invalidate the message associated with query_info stored in message cache */ void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qinfo) { hashvalue_type h; struct lruhash_entry* e; struct reply_info *r; size_t i, j; h = query_info_hash(qinfo, qstate->query_flags); if ((e=slabhash_lookup(qstate->env->msg_cache, h, qinfo, 0))) { r = (struct reply_info*)(e->data); if (r) { r->ttl = 0; if(rrset_array_lock(r->ref, r->rrset_count, *qstate->env->now)) { for(i=0; i< r->rrset_count; i++) { struct packed_rrset_data* data = (struct packed_rrset_data*) r->ref[i].key->entry.data; if(i>0 && r->ref[i].key == r->ref[i-1].key) continue; data->ttl = r->ttl; for(j=0; jcount + data->rrsig_count; j++) data->rr_ttl[j] = r->ttl; } rrset_array_unlock(r->ref, r->rrset_count); } } lock_rw_unlock(&e->lock); } else { log_info("invalidateQueryInCache: qinfo is not in cache"); } } /* Create response according to the ldns packet content */ int createResponse(struct module_qstate* qstate, sldns_buffer* pkt) { struct msg_parse* prs; struct edns_data edns; /* parse message */ prs = (struct msg_parse*) regional_alloc(qstate->env->scratch, sizeof(struct msg_parse)); if (!prs) { log_err("storeResponse: out of memory on incoming message"); return 0; } memset(prs, 0, sizeof(*prs)); memset(&edns, 0, sizeof(edns)); sldns_buffer_set_position(pkt, 0); if (parse_packet(pkt, prs, qstate->env->scratch) != LDNS_RCODE_NOERROR) { verbose(VERB_ALGO, "storeResponse: parse error on reply packet"); return 0; } /* edns is not examined, but removed from message to help cache */ if(parse_extract_edns(prs, &edns, qstate->env->scratch) != LDNS_RCODE_NOERROR) return 0; /* remove CD-bit, we asked for in case we handle validation ourself */ prs->flags &= ~BIT_CD; /* allocate response dns_msg in region */ qstate->return_msg = (struct dns_msg*)regional_alloc(qstate->region, sizeof(struct dns_msg)); if (!qstate->return_msg) return 0; memset(qstate->return_msg, 0, sizeof(*qstate->return_msg)); if(!parse_create_msg(pkt, prs, NULL, &(qstate->return_msg)->qinfo, &(qstate->return_msg)->rep, qstate->region)) { log_err("storeResponse: malloc failure: allocating incoming dns_msg"); return 0; } /* Make sure that the RA flag is set (since the presence of * this module means that recursion is available) */ /* qstate->return_msg->rep->flags |= BIT_RA; */ /* Clear the AA flag */ /* FIXME: does this action go here or in some other module? */ /*qstate->return_msg->rep->flags &= ~BIT_AA; */ /* make sure QR flag is on */ /*qstate->return_msg->rep->flags |= BIT_QR; */ if(verbosity >= VERB_ALGO) log_dns_msg("storeResponse: packet:", &qstate->return_msg->qinfo, qstate->return_msg->rep); return 1; } /* Convert reply->addr to string */ void reply_addr2str(struct comm_reply* reply, char* dest, int maxlen) { int af = (int)((struct sockaddr_in*) &(reply->addr))->sin_family; void* sinaddr = &((struct sockaddr_in*) &(reply->addr))->sin_addr; if(af == AF_INET6) sinaddr = &((struct sockaddr_in6*)&(reply->addr))->sin6_addr; dest[0] = 0; if (inet_ntop(af, sinaddr, dest, (socklen_t)maxlen) == 0) return; dest[maxlen-1] = 0; } /* Convert target->addr to string */ void delegpt_addr_addr2str(struct delegpt_addr* target, char *dest, int maxlen) { int af = (int)((struct sockaddr_in*) &(target->addr))->sin_family; void* sinaddr = &((struct sockaddr_in*) &(target->addr))->sin_addr; if(af == AF_INET6) sinaddr = &((struct sockaddr_in6*)&(target->addr))->sin6_addr; dest[0] = 0; if (inet_ntop(af, sinaddr, dest, (socklen_t)maxlen) == 0) return; dest[maxlen-1] = 0; } unbound-1.13.1/pythonmod/pythonmod.h0000644000175000017500000000664314010434640017123 0ustar wouterwouter/* * pythonmod.h: module header file * * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ /** * \file * Python module for unbound. Calls python script. */ #ifndef PYTHONMOD_H #define PYTHONMOD_H #include "util/module.h" #include "services/outbound_list.h" /** * Get the module function block. * @return: function block with function pointers to module methods. */ struct module_func_block* pythonmod_get_funcblock(void); /** python module init */ int pythonmod_init(struct module_env* env, int id); /** python module deinit */ void pythonmod_deinit(struct module_env* env, int id); /** python module operate on a query */ void pythonmod_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** python module */ void pythonmod_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** python module cleanup query state */ void pythonmod_clear(struct module_qstate* qstate, int id); /** python module alloc size routine */ size_t pythonmod_get_mem(struct module_env* env, int id); /** Declared here for fptr_wlist access. The definition is in interface.i. */ int python_inplace_cb_reply_generic(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time, int id, void* python_callback); /** Declared here for fptr_wlist access. The definition is in interface.i. */ int python_inplace_cb_query_generic( struct query_info* qinfo, uint16_t flags, struct module_qstate* qstate, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, int id, void* python_callback); #endif /* PYTHONMOD_H */ unbound-1.13.1/pythonmod/test-resip.conf0000644000175000017500000000054214010434640017667 0ustar wouterwouter# Example configuration file for resip.py server: verbosity: 1 #interface: 0.0.0.0 do-daemonize: no #access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/resip.py" unbound-1.13.1/pythonmod/test-edns.conf0000644000175000017500000000053514010434640017500 0ustar wouterwouter# Example configuration file for edns.py server: verbosity: 1 interface: 0.0.0.0 do-daemonize: no access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/edns.py" unbound-1.13.1/pythonmod/Makefile0000644000175000017500000000404214010434640016360 0ustar wouterwouter# Makefile: tests unbound python module (please edit SCRIPT variable) # # Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) # Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) # # This software is open source. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # * Neither the name of the organization nor the names of its # contributors may be used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. SUEXEC = sudo UNBOUND = ../unbound SCRIPT = ./test-resip.conf UNBOUND_OPTS = -dv -c $(SCRIPT) .PHONY: test sudo suexec doc all: test $(UNBOUND): make -C .. test: $(UNBOUND) $(UNBOUND) $(UNBOUND_OPTS) sudo: $(UNBOUND) sudo $(UNBOUND) $(UNBOUND_OPTS) suexec: $(UNBOUND) su -c "$(UNBOUND) $(UNBOUND_OPTS)" doc: $(MAKE) -C doc html unbound-1.13.1/pythonmod/test-resmod.conf0000644000175000017500000000060514010434640020036 0ustar wouterwouter# Example configuration file for resmod.py server: verbosity: 1 interface: 0.0.0.0 do-daemonize: no access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" #module-config: "python iterator" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/resmod.py" unbound-1.13.1/pythonmod/test-resgen.conf0000644000175000017500000000054214010434640020030 0ustar wouterwouter# Example configuration file for resgen.py server: verbosity: 1 interface: 0.0.0.0 do-daemonize: no access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/resgen.py" unbound-1.13.1/pythonmod/pythonmod.c0000644000175000017500000004157514010434640017121 0ustar wouterwouter/* * pythonmod.c: unbound module C wrapper * * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ /** * \file * Python module for unbound. Calls python script. */ /* ignore the varargs unused warning from SWIGs internal vararg support */ #ifdef __GNUC__ #pragma GCC diagnostic ignored "-Wunused-parameter" #ifndef __clang__ #pragma GCC diagnostic ignored "-Wunused-but-set-variable" #endif #endif #include "config.h" #include "sldns/sbuffer.h" #undef _POSIX_C_SOURCE #undef _XOPEN_SOURCE #include #include "pythonmod/pythonmod.h" #include "util/module.h" #include "util/config_file.h" #include "pythonmod_utils.h" #ifdef S_SPLINT_S typedef struct PyObject PyObject; typedef struct PyThreadState PyThreadState; typedef void* PyGILState_STATE; #endif /** * counter for python module instances * incremented by pythonmod_init(...) */ int py_mod_count = 0; /** Python main thread */ PyThreadState* mainthr; /** * Global state for the module. */ struct pythonmod_env { /** Python script filename. */ const char* fname; /** Python module. */ PyObject* module; /** Module init function */ PyObject* func_init; /** Module deinit function */ PyObject* func_deinit; /** Module operate function */ PyObject* func_operate; /** Module super_inform function */ PyObject* func_inform; /** Python dictionary. */ PyObject* dict; /** Module data. */ PyObject* data; /** Module qstate. */ struct module_qstate* qstate; }; /** * Per query state for the iterator module. */ struct pythonmod_qstate { /** Module per query data. */ PyObject* data; }; /* Generated */ #ifndef S_SPLINT_S #include "pythonmod/interface.h" #endif /** log python error */ static void log_py_err(void) { char *result = NULL; const char* iomod = "cStringIO"; PyObject *modStringIO = NULL; PyObject *modTB = NULL; PyObject *obFuncStringIO = NULL; PyObject *obStringIO = NULL; PyObject *obFuncTB = NULL; PyObject *argsTB = NULL; PyObject *obResult = NULL; PyObject *ascstr = NULL; PyObject *exc_typ, *exc_val, *exc_tb; /* Fetch the error state now before we cruch it */ /* exc val contains the error message * exc tb contains stack traceback and other info. */ PyErr_Fetch(&exc_typ, &exc_val, &exc_tb); PyErr_NormalizeException(&exc_typ, &exc_val, &exc_tb); /* Import the modules we need - cStringIO and traceback */ modStringIO = PyImport_ImportModule("cStringIO"); if (modStringIO==NULL) { /* python 1.4 and before */ modStringIO = PyImport_ImportModule("StringIO"); iomod = "StringIO"; } if (modStringIO==NULL) { /* python 3 */ modStringIO = PyImport_ImportModule("io"); iomod = "io"; } if (modStringIO==NULL) { log_err("pythonmod: cannot print exception, " "cannot ImportModule cStringIO or StringIO or io"); goto cleanup; } modTB = PyImport_ImportModule("traceback"); if (modTB==NULL) { log_err("pythonmod: cannot print exception, " "cannot ImportModule traceback"); goto cleanup; } /* Construct a cStringIO object */ obFuncStringIO = PyObject_GetAttrString(modStringIO, "StringIO"); if (obFuncStringIO==NULL) { log_err("pythonmod: cannot print exception, " "cannot GetAttrString %s.StringIO", iomod); goto cleanup; } obStringIO = PyObject_CallObject(obFuncStringIO, NULL); if (obStringIO==NULL) { log_err("pythonmod: cannot print exception, " "cannot call %s.StringIO()", iomod); goto cleanup; } /* Get the traceback.print_exception function, and call it. */ obFuncTB = PyObject_GetAttrString(modTB, "print_exception"); if (obFuncTB==NULL) { log_err("pythonmod: cannot print exception, " "cannot GetAttrString traceback.print_exception"); goto cleanup; } argsTB = Py_BuildValue("OOOOO", (exc_typ ? exc_typ : Py_None), (exc_val ? exc_val : Py_None), (exc_tb ? exc_tb : Py_None), Py_None, obStringIO); if (argsTB==NULL) { log_err("pythonmod: cannot print exception, " "cannot BuildValue for print_exception"); goto cleanup; } obResult = PyObject_CallObject(obFuncTB, argsTB); if (obResult==NULL) { PyErr_Print(); log_err("pythonmod: cannot print exception, " "call traceback.print_exception() failed"); goto cleanup; } /* Now call the getvalue() method in the StringIO instance */ Py_DECREF(obFuncStringIO); obFuncStringIO = PyObject_GetAttrString(obStringIO, "getvalue"); if (obFuncStringIO==NULL) { log_err("pythonmod: cannot print exception, " "cannot GetAttrString StringIO.getvalue"); goto cleanup; } Py_DECREF(obResult); obResult = PyObject_CallObject(obFuncStringIO, NULL); if (obResult==NULL) { log_err("pythonmod: cannot print exception, " "call StringIO.getvalue() failed"); goto cleanup; } /* And it should be a string all ready to go - duplicate it. */ if (!PyString_Check(obResult) && !PyUnicode_Check(obResult)) { log_err("pythonmod: cannot print exception, " "StringIO.getvalue() result did not String_Check" " or Unicode_Check"); goto cleanup; } if(PyString_Check(obResult)) { result = PyString_AsString(obResult); } else { ascstr = PyUnicode_AsASCIIString(obResult); result = PyBytes_AsString(ascstr); } log_err("pythonmod: python error: %s", result); cleanup: Py_XDECREF(modStringIO); Py_XDECREF(modTB); Py_XDECREF(obFuncStringIO); Py_XDECREF(obStringIO); Py_XDECREF(obFuncTB); Py_XDECREF(argsTB); Py_XDECREF(obResult); Py_XDECREF(ascstr); /* clear the exception, by not restoring it */ /* Restore the exception state */ /* PyErr_Restore(exc_typ, exc_val, exc_tb); */ } int pythonmod_init(struct module_env* env, int id) { int py_mod_idx = py_mod_count++; /* Initialize module */ FILE* script_py = NULL; PyObject* py_init_arg, *res; PyGILState_STATE gil; int init_standard = 1, i = 0; #if PY_MAJOR_VERSION < 3 PyObject* PyFileObject = NULL; #endif struct config_strlist* cfg_item = env->cfg->python_script; struct pythonmod_env* pe = (struct pythonmod_env*)calloc(1, sizeof(struct pythonmod_env)); if (!pe) { log_err("pythonmod: malloc failure"); return 0; } env->modinfo[id] = (void*) pe; /* Initialize module */ pe->fname=NULL; i = 0; while (cfg_item!=NULL) { if (py_mod_idx==i++) { pe->fname=cfg_item->str; break; } cfg_item = cfg_item->next; } if(pe->fname==NULL || pe->fname[0]==0) { log_err("pythonmod[%d]: no script given.", py_mod_idx); return 0; } /* Initialize Python libraries */ if (py_mod_count==1 && !Py_IsInitialized()) { #if PY_MAJOR_VERSION >= 3 wchar_t progname[8]; mbstowcs(progname, "unbound", 8); #else char *progname = "unbound"; #endif Py_SetProgramName(progname); Py_NoSiteFlag = 1; #if PY_MAJOR_VERSION >= 3 PyImport_AppendInittab(SWIG_name, (void*)SWIG_init); #endif Py_Initialize(); PyEval_InitThreads(); SWIG_init(); mainthr = PyEval_SaveThread(); } gil = PyGILState_Ensure(); if (py_mod_count==1) { /* Initialize Python */ PyRun_SimpleString("import sys \n"); PyRun_SimpleString("sys.path.append('.') \n"); if(env->cfg->directory && env->cfg->directory[0]) { char wdir[1524]; snprintf(wdir, sizeof(wdir), "sys.path.append('%s') \n", env->cfg->directory); PyRun_SimpleString(wdir); } PyRun_SimpleString("sys.path.append('"RUN_DIR"') \n"); PyRun_SimpleString("sys.path.append('"SHARE_DIR"') \n"); PyRun_SimpleString("import distutils.sysconfig \n"); PyRun_SimpleString("sys.path.append(distutils.sysconfig.get_python_lib(1,0)) \n"); if (PyRun_SimpleString("from unboundmodule import *\n") < 0) { log_err("pythonmod: cannot initialize core module: unboundmodule.py"); PyGILState_Release(gil); return 0; } } /* Check Python file load */ /* uses python to open the file, this works on other platforms, * eg. Windows, to open the file in the correct mode for python */ #if PY_MAJOR_VERSION < 3 PyFileObject = PyFile_FromString((char*)pe->fname, "r"); script_py = PyFile_AsFile(PyFileObject); #else script_py = _Py_fopen(pe->fname, "r"); #endif if (script_py == NULL) { log_err("pythonmod: can't open file %s for reading", pe->fname); PyGILState_Release(gil); return 0; } /* Load file */ pe->module = PyImport_AddModule("__main__"); pe->dict = PyModule_GetDict(pe->module); pe->data = PyDict_New(); Py_XINCREF(pe->data); PyModule_AddObject(pe->module, "mod_env", pe->data); /* TODO: deallocation of pe->... if an error occurs */ if (PyRun_SimpleFile(script_py, pe->fname) < 0) { log_err("pythonmod: can't parse Python script %s", pe->fname); /* print the error to logs too, run it again */ fseek(script_py, 0, SEEK_SET); /* we don't run the file, like this, because then side-effects * s = PyRun_File(script_py, pe->fname, Py_file_input, * PyModule_GetDict(PyImport_AddModule("__main__")), pe->dict); * could happen (again). Instead we parse the file again to get * the error string in the logs, for when the daemon has stderr * removed. SimpleFile run already printed to stderr, for then * this is called from unbound-checkconf or unbound -dd the user * has a nice formatted error. */ /* ignore the NULL return of _node, it is NULL due to the parse failure * that we are expecting */ (void)PyParser_SimpleParseFile(script_py, pe->fname, Py_file_input); log_py_err(); PyGILState_Release(gil); fclose(script_py); return 0; } #if PY_MAJOR_VERSION < 3 Py_XDECREF(PyFileObject); #else fclose(script_py); #endif if ((pe->func_init = PyDict_GetItemString(pe->dict, "init_standard")) == NULL) { init_standard = 0; if ((pe->func_init = PyDict_GetItemString(pe->dict, "init")) == NULL) { log_err("pythonmod: function init is missing in %s", pe->fname); PyGILState_Release(gil); return 0; } } if ((pe->func_deinit = PyDict_GetItemString(pe->dict, "deinit")) == NULL) { log_err("pythonmod: function deinit is missing in %s", pe->fname); PyGILState_Release(gil); return 0; } if ((pe->func_operate = PyDict_GetItemString(pe->dict, "operate")) == NULL) { log_err("pythonmod: function operate is missing in %s", pe->fname); PyGILState_Release(gil); return 0; } if ((pe->func_inform = PyDict_GetItemString(pe->dict, "inform_super")) == NULL) { log_err("pythonmod: function inform_super is missing in %s", pe->fname); PyGILState_Release(gil); return 0; } if (init_standard) { py_init_arg = SWIG_NewPointerObj((void*) env, SWIGTYPE_p_module_env, 0); } else { py_init_arg = SWIG_NewPointerObj((void*) env->cfg, SWIGTYPE_p_config_file, 0); } res = PyObject_CallFunction(pe->func_init, "iO", id, py_init_arg); if (PyErr_Occurred()) { log_err("pythonmod: Exception occurred in function init"); log_py_err(); Py_XDECREF(res); Py_XDECREF(py_init_arg); PyGILState_Release(gil); return 0; } Py_XDECREF(res); Py_XDECREF(py_init_arg); PyGILState_Release(gil); return 1; } void pythonmod_deinit(struct module_env* env, int id) { struct pythonmod_env* pe = env->modinfo[id]; if(pe == NULL) return; /* Free Python resources */ if(pe->module != NULL) { PyObject* res; PyGILState_STATE gil = PyGILState_Ensure(); /* Deinit module */ res = PyObject_CallFunction(pe->func_deinit, "i", id); if (PyErr_Occurred()) { log_err("pythonmod: Exception occurred in function deinit"); log_py_err(); } /* Free result if any */ Py_XDECREF(res); /* Free shared data if any */ Py_XDECREF(pe->data); PyGILState_Release(gil); if(--py_mod_count==0) { PyEval_RestoreThread(mainthr); Py_Finalize(); mainthr = NULL; } } pe->fname = NULL; free(pe); /* Module is deallocated in Python */ env->modinfo[id] = NULL; } void pythonmod_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { struct pythonmod_env* pe = (struct pythonmod_env*)qstate->env->modinfo[id]; struct pythonmod_qstate* pq = (struct pythonmod_qstate*)qstate->minfo[id]; PyObject* py_qstate, *py_sqstate, *res; PyGILState_STATE gil = PyGILState_Ensure(); log_query_info(VERB_ALGO, "pythonmod: inform_super, sub is", &qstate->qinfo); log_query_info(VERB_ALGO, "super is", &super->qinfo); py_qstate = SWIG_NewPointerObj((void*) qstate, SWIGTYPE_p_module_qstate, 0); py_sqstate = SWIG_NewPointerObj((void*) super, SWIGTYPE_p_module_qstate, 0); res = PyObject_CallFunction(pe->func_inform, "iOOO", id, py_qstate, py_sqstate, pq->data); if (PyErr_Occurred()) { log_err("pythonmod: Exception occurred in function inform_super"); log_py_err(); qstate->ext_state[id] = module_error; } else if ((res == NULL) || (!PyObject_IsTrue(res))) { log_err("pythonmod: python returned bad code in inform_super"); qstate->ext_state[id] = module_error; } Py_XDECREF(res); Py_XDECREF(py_sqstate); Py_XDECREF(py_qstate); PyGILState_Release(gil); } void pythonmod_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* ATTR_UNUSED(outbound)) { struct pythonmod_env* pe = (struct pythonmod_env*)qstate->env->modinfo[id]; struct pythonmod_qstate* pq = (struct pythonmod_qstate*)qstate->minfo[id]; PyObject* py_qstate, *res; PyGILState_STATE gil = PyGILState_Ensure(); if ( pq == NULL) { /* create qstate */ pq = qstate->minfo[id] = malloc(sizeof(struct pythonmod_qstate)); /* Initialize per query data */ pq->data = PyDict_New(); } /* Call operate */ py_qstate = SWIG_NewPointerObj((void*) qstate, SWIGTYPE_p_module_qstate, 0); res = PyObject_CallFunction(pe->func_operate, "iiOO", id, (int) event, py_qstate, pq->data); if (PyErr_Occurred()) { log_err("pythonmod: Exception occurred in function operate, event: %s", strmodulevent(event)); log_py_err(); qstate->ext_state[id] = module_error; } else if ((res == NULL) || (!PyObject_IsTrue(res))) { log_err("pythonmod: python returned bad code, event: %s", strmodulevent(event)); qstate->ext_state[id] = module_error; } Py_XDECREF(res); Py_XDECREF(py_qstate); PyGILState_Release(gil); } void pythonmod_clear(struct module_qstate* qstate, int id) { struct pythonmod_qstate* pq; if (qstate == NULL) return; pq = (struct pythonmod_qstate*)qstate->minfo[id]; verbose(VERB_ALGO, "pythonmod: clear, id: %d, pq:%p", id, pq); if(pq != NULL) { PyGILState_STATE gil = PyGILState_Ensure(); Py_DECREF(pq->data); PyGILState_Release(gil); /* Free qstate */ free(pq); } qstate->minfo[id] = NULL; } size_t pythonmod_get_mem(struct module_env* env, int id) { struct pythonmod_env* pe = (struct pythonmod_env*)env->modinfo[id]; verbose(VERB_ALGO, "pythonmod: get_mem, id: %d, pe:%p", id, pe); if(!pe) return 0; return sizeof(*pe); } /** * The module function block */ static struct module_func_block pythonmod_block = { "python", &pythonmod_init, &pythonmod_deinit, &pythonmod_operate, &pythonmod_inform_super, &pythonmod_clear, &pythonmod_get_mem }; struct module_func_block* pythonmod_get_funcblock(void) { return &pythonmod_block; } unbound-1.13.1/pythonmod/test-inplace_callbacks.conf0000644000175000017500000000055214010434640022160 0ustar wouterwouter# Example configuration file for edns.py server: verbosity: 1 interface: 0.0.0.0 do-daemonize: no access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/inplace_callbacks.py" unbound-1.13.1/pythonmod/LICENSE0000644000175000017500000000311314010434640015723 0ustar wouterwouterCopyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the organization nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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. unbound-1.13.1/pythonmod/test-log.conf0000644000175000017500000000053314010434640017326 0ustar wouterwouter# Example configuration file for log.py server: verbosity: 1 interface: 0.0.0.0 do-daemonize: no access-control: 0.0.0.0/0 allow chroot: "" username: "" directory: "" logfile: "" pidfile: "unbound.pid" module-config: "validator python iterator" # Python config section python: # Script file to load python-script: "./examples/log.py" unbound-1.13.1/pythonmod/ubmodule-tst.py0000644000175000017500000001377614010434640017734 0ustar wouterwouter# -*- coding: utf-8 -*- ''' ubmodule-tst.py: Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) Copyright (c) 2008. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 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 REGENTS 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. ''' def init(id, cfg): log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) return True def deinit(id): log_info("pythonmod: deinit called, module id is %d" % id) return True def inform_super(id, qstate, superqstate, qdata): return True def setTTL(qstate, ttl): """Sets return_msg TTL and all the RRs TTL""" if qstate.return_msg: qstate.return_msg.rep.ttl = ttl if (qstate.return_msg.rep): for i in range(0,qstate.return_msg.rep.rrset_count): d = qstate.return_msg.rep.rrsets[i].entry.data for j in range(0,d.count+d.rrsig_count): d.rr_ttl[j] = ttl def dataHex(data, prefix=""): res = "" for i in range(0, (len(data)+15)/16): res += "%s0x%02X | " % (prefix, i*16) d = map(lambda x:ord(x), data[i*16:i*16+17]) for ch in d: res += "%02X " % ch for i in range(0,17-len(d)): res += " " res += "| " for ch in d: if (ch < 32) or (ch > 127): res += ". " else: res += "%c " % ch res += "\n" return res def printReturnMsg(qstate): print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl) print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str if (qstate.return_msg.rep): print "RRSets:",qstate.return_msg.rep.rrset_count prevkey = None for i in range(0,qstate.return_msg.rep.rrset_count): r = qstate.return_msg.rep.rrsets[i] rk = r.rk print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags, print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class) d = r.entry.data print " RRDatas:",d.count+d.rrsig_count for j in range(0,d.count+d.rrsig_count): print " ",j,":","TTL=",d.rr_ttl[j],"RR data:" print dataHex(d.rr_data[j]," ") def operate(id, event, qstate, qdata): log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) #print "pythonmod: per query data", qdata print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype, print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass print # TEST: # > dig @127.0.0.1 www.seznam.cz A # > dig @127.0.0.1 3.76.75.77.in-addr.arpa. PTR # prvni dva dotazy vrati TTL 100 # > dig @127.0.0.1 www.seznam.cz A # > dig @127.0.0.1 3.76.75.77.in-addr.arpa. PTR # dalsi dva dotazy vrati TTL 10, ktere se bude s dalsimi dotazy snizovat, nez vyprsi a znovu se zaktivuje mesh if qstate.return_msg: printReturnMsg(qstate) #qdn = '.'.join(qstate.qinfo.qname_list) qdn = qstate.qinfo.qname_str #Pokud dotaz konci na nasledujici, pozmenime TTL zpravy, ktera se posle klientovi (return_msg) i zpravy v CACHE if qdn.endswith(".seznam.cz.") or qdn.endswith('.in-addr.arpa.'): #pokud je v cache odpoved z iteratoru, pak ji zneplatnime, jinak se moduly nazavolaji do te doby, nez vyprsi TTL invalidateQueryInCache(qstate, qstate.return_msg.qinfo) if (qstate.return_msg.rep.authoritative): print "X"*300 setTTL(qstate, 10) #do cache nastavime TTL na 10 if not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0): qstate.ext_state[id] = MODULE_ERROR return False setTTL(qstate, 100) #odpoved klientovi prijde s TTL 100 qstate.return_rcode = RCODE_NOERROR if event == MODULE_EVENT_NEW: qstate.ext_state[id] = MODULE_WAIT_MODULE return True if event == MODULE_EVENT_MODDONE: log_info("pythonmod: previous module done") qstate.ext_state[id] = MODULE_FINISHED return True if event == MODULE_EVENT_PASS: log_info("pythonmod: event_pass") qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") qstate.ext_state[id] = MODULE_ERROR return True log_info("pythonmod: script loaded.") unbound-1.13.1/pythonmod/pythonmod_utils.h0000644000175000017500000000724714010434640020344 0ustar wouterwouter/* * pythonmod_utils.h: utils header file * * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz) * Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * * Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ /** * \file * Utility functions for the python module that perform stores and loads and * conversions. */ #ifndef PYTHONMOD_UTILS_H #define PYTHONMOD_UTILS_H #include "util/module.h" struct delegpt_addr; struct sldns_buffer; /** * Store the reply_info and query_info pair in message cache (qstate->msg_cache) * * @param qstate: module environment * @param qinfo: query info, the query for which answer is stored. * @param msgrep: reply in dns_msg * @param is_referral: If true, then the given message to be stored is a * referral. The cache implementation may use this as a hint. * It will store only the RRsets, not the message. * @return 0 on alloc error (out of memory). */ int storeQueryInCache(struct module_qstate* qstate, struct query_info* qinfo, struct reply_info* msgrep, int is_referral); /** * Invalidate the message associated with query_info stored in message cache. * * This function invalidates the record in message cache associated with the given query only if such a record exists. * * @param qstate: module environment * @param qinfo: query info, the query for which answer is stored. */ void invalidateQueryInCache(struct module_qstate* qstate, struct query_info* qinfo); /** * Create response according to the ldns packet content * * This function fills qstate.return_msg up with data of a given packet * * @param qstate: module environment * @param pkt: a sldns_buffer which contains sldns_packet data * @return 0 on failure, out of memory or parse error. */ int createResponse(struct module_qstate* qstate, struct sldns_buffer* pkt); /** * Convert reply->addr to string * @param reply: comm reply with address in it. * @param dest: destination string. * @param maxlen: length of string buffer. */ void reply_addr2str(struct comm_reply* reply, char* dest, int maxlen); /* Convert target->addr to string */ void delegpt_addr_addr2str(struct delegpt_addr* target, char *dest, int maxlen); #endif /* PYTHONMOD_UTILS_H */ unbound-1.13.1/Makefile.in0000644000175000017500000035757014010434640014765 0ustar wouterwouter# Copyright 2007 NLnet Labs # See the file LICENSE for the license SHELL=@SHELL@ VERSION=@PACKAGE_VERSION@ srcdir=@srcdir@ prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ sbindir=@sbindir@ mandir=@mandir@ libdir=@libdir@ # datarootdir is here to please some checkers, use datadir. datarootdir=@datarootdir@ datadir=@datadir@ includedir=@includedir@ doxygen=@doxygen@ libtool=@libtool@ staticexe=@staticexe@ EXEEXT=@EXEEXT@ configfile=@ub_conf_file@ CHECKLOCK_SRC=testcode/checklocks.c CHECKLOCK_OBJ=@CHECKLOCK_OBJ@ DNSTAP_SRC=@DNSTAP_SRC@ DNSTAP_OBJ=@DNSTAP_OBJ@ DNSCRYPT_SRC=@DNSCRYPT_SRC@ DNSCRYPT_OBJ=@DNSCRYPT_OBJ@ WITH_DYNLIBMODULE=@WITH_DYNLIBMODULE@ WITH_PYTHONMODULE=@WITH_PYTHONMODULE@ WITH_PYUNBOUND=@WITH_PYUNBOUND@ PY_MAJOR_VERSION=@PY_MAJOR_VERSION@ PYTHON_SITE_PKG=@PYTHON_SITE_PKG@ PYTHONMOD_INSTALL=@PYTHONMOD_INSTALL@ PYTHONMOD_UNINSTALL=@PYTHONMOD_UNINSTALL@ PYUNBOUND_INSTALL=@PYUNBOUND_INSTALL@ PYUNBOUND_UNINSTALL=@PYUNBOUND_UNINSTALL@ UNBOUND_EVENT_INSTALL=@UNBOUND_EVENT_INSTALL@ UNBOUND_EVENT_UNINSTALL=@UNBOUND_EVENT_UNINSTALL@ UNBOUND_VERSION_MAJOR=@UNBOUND_VERSION_MAJOR@ UNBOUND_VERSION_MINOR=@UNBOUND_VERSION_MINOR@ UNBOUND_VERSION_MICRO=@UNBOUND_VERSION_MICRO@ ALLTARGET=@ALLTARGET@ INSTALLTARGET=@INSTALLTARGET@ SSLLIB=@SSLLIB@ # _unbound.la if pyunbound enabled. PYUNBOUND_TARGET=@PYUNBOUND_TARGET@ # override $U variable which is used by autotools for deansification (for # K&R C compilers), but causes problems if $U is defined in the env). U= PROTOC_C=@PROTOC_C@ SWIG=@SWIG@ YACC=@YACC@ LEX=@LEX@ STRIP=@STRIP@ CC=@CC@ CPPFLAGS=-I. @CPPFLAGS@ PYTHON_CPPFLAGS=-I. @PYTHON_CPPFLAGS@ CFLAGS=-DSRCDIR=$(srcdir) @CFLAGS@ LDFLAGS=@LDFLAGS@ LIBS=@LIBS@ LIBOBJS=@LIBOBJS@ # filter out ctime_r from compat obj. LIBOBJ_WITHOUT_CTIME=@LIBOBJ_WITHOUT_CTIME@ LIBOBJ_WITHOUT_CTIMEARC4=@LIBOBJ_WITHOUT_CTIMEARC4@ RUNTIME_PATH=@RUNTIME_PATH@ DEPFLAG=@DEPFLAG@ DATE=@CONFIG_DATE@ LIBTOOL=$(libtool) BUILD=build/ UBSYMS=@UBSYMS@ EXTRALINK=@EXTRALINK@ WINDRES=@WINDRES@ LINT=splint LINTFLAGS=+quiet -weak -warnposix -unrecog -Din_addr_t=uint32_t -Du_int=unsigned -Du_char=uint8_t -preproc -Drlimit=rlimit64 -D__gnuc_va_list=va_list -formatcode #-Dglob64=glob -Dglobfree64=globfree # compat with openssl linux edition. LINTFLAGS+="-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"ECDSA_SIG=DSA_SIG" # compat with NetBSD LINTFLAGS+=@NETBSD_LINTFLAGS@ # compat with OpenBSD LINTFLAGS+="-Dsigset_t=long" # FreeBSD LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=int" "-D__va_list=va_list" "-D__uint32_t=uint32_t" "-D_Alignof(x)=x" "-D__aligned(x)=" "-D__requires_exclusive(x)=" "-D__requires_unlocked(x)=" "-D__locks_exclusive(x)=" "-D__trylocks_exclusive(x)=" "-D__unlocks(x)=" "-D__locks_shared(x)=" "-D__trylocks_shared(x)=" INSTALL=$(SHELL) $(srcdir)/install-sh DYNLIBMOD_SRC=dynlibmod/dynlibmod.c DYNLIBMOD_OBJ=@DYNLIBMOD_OBJ@ DYNLIBMOD_HEADER=@DYNLIBMOD_HEADER@ DYNLIBMOD_EXTRALIBS=@DYNLIBMOD_EXTRALIBS@ #pythonmod.c is not here, it is mentioned by itself in its own rules, #makedepend fails on missing interface.h otherwise. PYTHONMOD_SRC=pythonmod/pythonmod_utils.c # pythonmod.lo pythonmod_utils.lo if python mod enabled. PYTHONMOD_OBJ=@PYTHONMOD_OBJ@ PYTHONMOD_HEADER=@PYTHONMOD_HEADER@ # libunbound/python/libunbound_wrap.c is dealt with by its own rules. PYUNBOUND_SRC= # libunbound_wrap.lo if python libunbound wrapper enabled. PYUNBOUND_OBJ=@PYUNBOUND_OBJ@ SUBNET_SRC=edns-subnet/edns-subnet.c edns-subnet/subnetmod.c edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c SUBNET_OBJ=@SUBNET_OBJ@ SUBNET_HEADER=@SUBNET_HEADER@ IPSECMOD_SRC=ipsecmod/ipsecmod.c ipsecmod/ipsecmod-whitelist.c IPSECMOD_OBJ=@IPSECMOD_OBJ@ IPSECMOD_HEADER=@IPSECMOD_HEADER@ COMMON_SRC=services/cache/dns.c services/cache/infra.c services/cache/rrset.c \ util/as112.c util/data/dname.c util/data/msgencode.c util/data/msgparse.c \ util/data/msgreply.c util/data/packed_rrset.c iterator/iterator.c \ iterator/iter_delegpt.c iterator/iter_donotq.c iterator/iter_fwd.c \ iterator/iter_hints.c iterator/iter_priv.c iterator/iter_resptype.c \ iterator/iter_scrub.c iterator/iter_utils.c services/listen_dnsport.c \ services/localzone.c services/mesh.c services/modstack.c services/view.c \ services/rpz.c \ services/outbound_list.c services/outside_network.c util/alloc.c \ util/config_file.c util/configlexer.c util/configparser.c \ util/shm_side/shm_main.c services/authzone.c \ util/fptr_wlist.c util/locks.c util/log.c util/mini_event.c util/module.c \ util/netevent.c util/net_help.c util/random.c util/rbtree.c util/regional.c \ util/rtt.c util/edns.c util/storage/dnstree.c util/storage/lookup3.c \ util/storage/lruhash.c util/storage/slabhash.c util/tcp_conn_limit.c \ util/timehist.c util/tube.c \ util/ub_event.c util/ub_event_pluggable.c util/winsock_event.c \ validator/autotrust.c validator/val_anchor.c validator/validator.c \ validator/val_kcache.c validator/val_kentry.c validator/val_neg.c \ validator/val_nsec3.c validator/val_nsec.c validator/val_secalgo.c \ validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \ edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \ edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \ cachedb/cachedb.c cachedb/redis.c respip/respip.c $(CHECKLOCK_SRC) \ $(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC) COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \ as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \ iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \ iter_scrub.lo iter_utils.lo localzone.lo mesh.lo modstack.lo view.lo \ outbound_list.lo alloc.lo config_file.lo configlexer.lo configparser.lo \ fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ autotrust.lo val_anchor.lo rpz.lo \ validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ $(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo # set to $COMMON_OBJ or to "" if --enableallsymbols COMMON_OBJ_ALL_SYMBOLS=@COMMON_OBJ_ALL_SYMBOLS@ COMPAT_SRC=compat/ctime_r.c compat/fake-rfc2553.c compat/gmtime_r.c \ compat/inet_aton.c compat/inet_ntop.c compat/inet_pton.c compat/malloc.c \ compat/memcmp.c compat/memmove.c compat/snprintf.c compat/strlcat.c \ compat/strlcpy.c compat/strptime.c compat/getentropy_freebsd.c compat/getentropy_linux.c \ compat/getentropy_osx.c compat/getentropy_solaris.c compat/getentropy_win.c \ compat/explicit_bzero.c compat/arc4random.c compat/arc4random_uniform.c \ compat/arc4_lock.c compat/sha512.c compat/reallocarray.c compat/isblank.c \ compat/strsep.c COMPAT_OBJ=$(LIBOBJS:.o=.lo) COMPAT_OBJ_WITHOUT_CTIME=$(LIBOBJ_WITHOUT_CTIME:.o=.lo) COMPAT_OBJ_WITHOUT_CTIMEARC4=$(LIBOBJ_WITHOUT_CTIMEARC4:.o=.lo) SLDNS_SRC=sldns/keyraw.c sldns/sbuffer.c sldns/wire2str.c sldns/parse.c \ sldns/parseutil.c sldns/rrdef.c sldns/str2wire.c SLDNS_OBJ=keyraw.lo sbuffer.lo wire2str.lo parse.lo parseutil.lo rrdef.lo \ str2wire.lo SLDNS_ALLOCCHECK_EXTRA_OBJ=@SLDNS_ALLOCCHECK_EXTRA_OBJ@ UNITTEST_SRC=testcode/unitanchor.c testcode/unitdname.c \ testcode/unitlruhash.c testcode/unitmain.c testcode/unitmsgparse.c \ testcode/unitneg.c testcode/unitregional.c testcode/unitslabhash.c \ testcode/unitverify.c testcode/readhex.c testcode/testpkts.c testcode/unitldns.c \ testcode/unitecs.c testcode/unitauth.c UNITTEST_OBJ=unitanchor.lo unitdname.lo unitlruhash.lo unitmain.lo \ unitmsgparse.lo unitneg.lo unitregional.lo unitslabhash.lo unitverify.lo \ readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo UNITTEST_OBJ_LINK=$(UNITTEST_OBJ) worker_cb.lo $(COMMON_OBJ) $(SLDNS_OBJ) \ $(COMPAT_OBJ) DAEMON_SRC=daemon/acl_list.c daemon/cachedump.c daemon/daemon.c \ daemon/remote.c daemon/stats.c daemon/unbound.c daemon/worker.c @WIN_DAEMON_SRC@ DAEMON_OBJ=acl_list.lo cachedump.lo daemon.lo \ shm_main.lo remote.lo stats.lo unbound.lo \ worker.lo @WIN_DAEMON_OBJ@ DAEMON_OBJ_LINK=$(DAEMON_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ $(COMPAT_OBJ) @WIN_DAEMON_OBJ_LINK@ CHECKCONF_SRC=smallapp/unbound-checkconf.c smallapp/worker_cb.c CHECKCONF_OBJ=unbound-checkconf.lo worker_cb.lo CHECKCONF_OBJ_LINK=$(CHECKCONF_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ $(COMPAT_OBJ) @WIN_CHECKCONF_OBJ_LINK@ CONTROL_SRC=smallapp/unbound-control.c CONTROL_OBJ=unbound-control.lo CONTROL_OBJ_LINK=$(CONTROL_OBJ) worker_cb.lo $(COMMON_OBJ_ALL_SYMBOLS) \ $(SLDNS_OBJ) $(COMPAT_OBJ) @WIN_CONTROL_OBJ_LINK@ HOST_SRC=smallapp/unbound-host.c HOST_OBJ=unbound-host.lo HOST_OBJ_LINK=$(HOST_OBJ) $(SLDNS_OBJ) $(COMPAT_OBJ_WITHOUT_CTIMEARC4) $(SLDNS_ALLOCCHECK_EXTRA_OBJ) @WIN_HOST_OBJ_LINK@ UBANCHOR_SRC=smallapp/unbound-anchor.c UBANCHOR_OBJ=unbound-anchor.lo UBANCHOR_OBJ_LINK=$(UBANCHOR_OBJ) parseutil.lo \ $(COMPAT_OBJ_WITHOUT_CTIME) $(SLDNS_ALLOCCHECK_EXTRA_OBJ) @WIN_UBANCHOR_OBJ_LINK@ TESTBOUND_SRC=testcode/testbound.c testcode/testpkts.c \ daemon/worker.c daemon/acl_list.c \ daemon/daemon.c daemon/stats.c \ testcode/replay.c testcode/fake_event.c TESTBOUND_OBJ=testbound.lo replay.lo fake_event.lo TESTBOUND_OBJ_LINK=$(TESTBOUND_OBJ) testpkts.lo worker.lo acl_list.lo \ daemon.lo stats.lo shm_main.lo $(COMMON_OBJ_WITHOUT_NETCALL) ub_event.lo $(SLDNS_OBJ) \ $(COMPAT_OBJ) LOCKVERIFY_SRC=testcode/lock_verify.c LOCKVERIFY_OBJ=lock_verify.lo LOCKVERIFY_OBJ_LINK=$(LOCKVERIFY_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) PETAL_SRC=testcode/petal.c PETAL_OBJ=petal.lo PETAL_OBJ_LINK=$(PETAL_OBJ) $(COMPAT_OBJ_WITHOUT_CTIMEARC4) PKTVIEW_SRC=testcode/pktview.c testcode/readhex.c PKTVIEW_OBJ=pktview.lo PKTVIEW_OBJ_LINK=$(PKTVIEW_OBJ) worker_cb.lo readhex.lo $(COMMON_OBJ) \ $(COMPAT_OBJ) $(SLDNS_OBJ) MEMSTATS_SRC=testcode/memstats.c MEMSTATS_OBJ=memstats.lo MEMSTATS_OBJ_LINK=$(MEMSTATS_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) ASYNCLOOK_SRC=testcode/asynclook.c ASYNCLOOK_OBJ=asynclook.lo ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(CHECKLOCK_OBJ) $(COMPAT_OBJ) @ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ@ STREAMTCP_SRC=testcode/streamtcp.c STREAMTCP_OBJ=streamtcp.lo STREAMTCP_OBJ_LINK=$(STREAMTCP_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) DOHCLIENT_SRC=testcode/dohclient.c DOHCLIENT_OBJ=dohclient.lo DOHCLIENT_OBJ_LINK=$(DOHCLIENT_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) PERF_SRC=testcode/perf.c PERF_OBJ=perf.lo PERF_OBJ_LINK=$(PERF_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) $(SLDNS_OBJ) DELAYER_SRC=testcode/delayer.c DELAYER_OBJ=delayer.lo DELAYER_OBJ_LINK=$(DELAYER_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \ $(SLDNS_OBJ) IPSET_SRC=@IPSET_SRC@ IPSET_OBJ=@IPSET_OBJ@ DNSTAP_SOCKET_SRC=dnstap/unbound-dnstap-socket.c DNSTAP_SOCKET_OBJ=unbound-dnstap-socket.lo DNSTAP_SOCKET_OBJ_LINK=$(DNSTAP_SOCKET_OBJ) $(COMMON_OBJ) \ $(COMPAT_OBJ) $(SLDNS_OBJ) DNSTAP_SOCKET_TESTBIN=@DNSTAP_SOCKET_TESTBIN@ LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \ libunbound/libworker.c LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo LIBUNBOUND_OBJ_LINK=$(LIBUNBOUND_OBJ) $(COMMON_OBJ_WITHOUT_UB_EVENT) $(SLDNS_OBJ) $(COMPAT_OBJ) # win apps or "" if not on windows WINAPPS=@WINAPPS@ WIN_DAEMON_THE_SRC=winrc/win_svc.c winrc/w_inst.c SVCINST_SRC=winrc/unbound-service-install.c SVCINST_OBJ=unbound-service-install.lo SVCINST_OBJ_LINK=$(SVCINST_OBJ) w_inst.lo rsrc_svcinst.o $(COMPAT_OBJ_WITHOUT_CTIMEARC4) SVCUNINST_SRC=winrc/unbound-service-remove.c SVCUNINST_OBJ=unbound-service-remove.lo SVCUNINST_OBJ_LINK=$(SVCUNINST_OBJ) w_inst.lo rsrc_svcuninst.o \ $(COMPAT_OBJ_WITHOUT_CTIMEARC4) ANCHORUPD_SRC=winrc/anchor-update.c ANCHORUPD_OBJ=anchor-update.lo ANCHORUPD_OBJ_LINK=$(ANCHORUPD_OBJ) rsrc_anchorupd.o $(COMPAT_OBJ_WITHOUT_CTIMEARC4) wire2str.lo str2wire.lo parseutil.lo sbuffer.lo rrdef.lo keyraw.lo parse.lo RSRC_OBJ=rsrc_svcinst.o rsrc_svcuninst.o rsrc_anchorupd.o rsrc_unbound.o \ rsrc_unbound_host.o rsrc_unbound_anchor.o rsrc_unbound_control.o \ rsrc_unbound_checkconf.o ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ $(TESTBOUND_SRC) $(LOCKVERIFY_SRC) $(PKTVIEW_SRC) \ $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \ $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \ $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) $(DNSTAP_SOCKET_SRC)\ $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC) \ $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC) \ $(DOHCLIENT_SRC) ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \ $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \ $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \ $(ASYNCLOOK_OBJ) $(STREAMTCP_OBJ) $(PERF_OBJ) $(DELAYER_OBJ) \ $(CONTROL_OBJ) $(UBANCHOR_OBJ) $(PETAL_OBJ) $(DNSTAP_SOCKET_OBJ)\ $(COMPAT_OBJ) $(PYUNBOUND_OBJ) \ $(SVCINST_OBJ) $(SVCUNINST_OBJ) $(ANCHORUPD_OBJ) $(SLDNS_OBJ) \ $(DOHCLIENT_OBJ) COMPILE=$(LIBTOOL) --tag=CC --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ LINK=$(LIBTOOL) --tag=CC --mode=link $(CC) $(staticexe) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) LINK_LIB=$(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -version-info @LIBUNBOUND_CURRENT@:@LIBUNBOUND_REVISION@:@LIBUNBOUND_AGE@ -no-undefined .PHONY: clean realclean doc lint all install uninstall tests test strip lib longtest longcheck check alltargets all: $(COMMON_OBJ) $(ALLTARGET) alltargets: unbound$(EXEEXT) unbound-checkconf$(EXEEXT) lib unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup $(WINAPPS) $(PYUNBOUND_TARGET) # compat with BSD make, register suffix, and an implicit rule to actualise it. .SUFFIXES: .lo .c.lo: $(COMPILE) -o $@ -c $< $(ALL_OBJ): @@SOURCEDETERMINE@ $(COMPILE) -o $@ -c @SOURCEFILE@ $(RSRC_OBJ): @@SOURCEDETERMINE@ $(WINDRES) $(CPPFLAGS) @SOURCEFILE@ $@ rsrc_svcinst.o: $(srcdir)/winrc/rsrc_svcinst.rc config.h rsrc_svcuninst.o: $(srcdir)/winrc/rsrc_svcuninst.rc config.h rsrc_anchorupd.o: $(srcdir)/winrc/rsrc_anchorupd.rc config.h rsrc_unbound.o: $(srcdir)/winrc/rsrc_unbound.rc config.h rsrc_unbound_host.o: $(srcdir)/winrc/rsrc_unbound_host.rc config.h rsrc_unbound_anchor.o: $(srcdir)/winrc/rsrc_unbound_anchor.rc config.h rsrc_unbound_control.o: $(srcdir)/winrc/rsrc_unbound_control.rc config.h rsrc_unbound_checkconf.o: $(srcdir)/winrc/rsrc_unbound_checkconf.rc config.h TEST_BIN=asynclook$(EXEEXT) delayer$(EXEEXT) \ lock-verify$(EXEEXT) memstats$(EXEEXT) perf$(EXEEXT) \ petal$(EXEEXT) pktview$(EXEEXT) streamtcp$(EXEEXT) \ $(DNSTAP_SOCKET_TESTBIN) dohclient$(EXEEXT) \ testbound$(EXEEXT) unittest$(EXEEXT) tests: all $(TEST_BIN) check: test longcheck: longtest test: unittest$(EXEEXT) testbound$(EXEEXT) ./unittest$(EXEEXT) ./testbound$(EXEEXT) -s for x in $(srcdir)/testdata/*.rpl; do printf "%s" "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done @echo test OK longtest: tests if test ! $(srcdir)/testdata -ef ./testdata; then rm -rf testcode testdata; mkdir testcode testdata; cp -R $(srcdir)/testdata/*.sh $(srcdir)/testdata/*.tdir $(srcdir)/testdata/*.rpl $(srcdir)/testdata/*.crpl testdata; cp $(srcdir)/testcode/*.sh testcode; if test ! -d util; then mkdir util; fi; cp $(srcdir)/util/iana_ports.inc util; fi if test -x "`which bash`"; then bash testcode/do-tests.sh; else sh testcode/do-tests.sh; fi lib: libunbound.la unbound.h libunbound.la: $(LIBUNBOUND_OBJ_LINK) $(LINK_LIB) $(UBSYMS) -o $@ $(LIBUNBOUND_OBJ_LINK) -rpath $(libdir) $(SSLLIB) $(LIBS) unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS) unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) unbound-control$(EXEEXT): $(CONTROL_OBJ_LINK) libunbound.la $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) unbound-anchor$(EXEEXT): $(UBANCHOR_OBJ_LINK) libunbound.la $(LINK) -o $@ $(UBANCHOR_OBJ_LINK) -L. -L.libs -lunbound -lexpat $(SSLLIB) $(LIBS) unbound-service-install$(EXEEXT): $(SVCINST_OBJ_LINK) $(LINK) -o $@ $(SVCINST_OBJ_LINK) $(LIBS) unbound-service-remove$(EXEEXT): $(SVCUNINST_OBJ_LINK) $(LINK) -o $@ $(SVCUNINST_OBJ_LINK) $(LIBS) anchor-update$(EXEEXT): $(ANCHORUPD_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ANCHORUPD_OBJ_LINK) -L. -L.libs -lunbound $(LIBS) unittest$(EXEEXT): $(UNITTEST_OBJ_LINK) $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) testbound$(EXEEXT): $(TESTBOUND_OBJ_LINK) $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) lock-verify$(EXEEXT): $(LOCKVERIFY_OBJ_LINK) $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) petal$(EXEEXT): $(PETAL_OBJ_LINK) $(LINK) -o $@ $(PETAL_OBJ_LINK) $(SSLLIB) $(LIBS) pktview$(EXEEXT): $(PKTVIEW_OBJ_LINK) $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) memstats$(EXEEXT): $(MEMSTATS_OBJ_LINK) $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS) streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK) $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) dohclient$(EXEEXT): $(DOHCLIENT_OBJ_LINK) $(LINK) -o $@ $(DOHCLIENT_OBJ_LINK) $(SSLLIB) $(LIBS) perf$(EXEEXT): $(PERF_OBJ_LINK) $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) delayer$(EXEEXT): $(DELAYER_OBJ_LINK) $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) signit$(EXEEXT): testcode/signit.c $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ -o $@ testcode/signit.c $(LDFLAGS) -lldns $(SSLLIB) $(LIBS) unbound.h: $(srcdir)/libunbound/unbound.h sed -e 's/@''UNBOUND_VERSION_MAJOR@/$(UNBOUND_VERSION_MAJOR)/' -e 's/@''UNBOUND_VERSION_MINOR@/$(UNBOUND_VERSION_MINOR)/' -e 's/@''UNBOUND_VERSION_MICRO@/$(UNBOUND_VERSION_MICRO)/' < $(srcdir)/libunbound/unbound.h > $@ unbound-control-setup: smallapp/unbound-control-setup.sh cp smallapp/unbound-control-setup.sh $@ -chmod +x $@ # dnstap dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h dnstap/dnstap_config.h \ dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h $(srcdir)/dnstap/dnstap.h \ $(srcdir)/util/config_file.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/util/net_help.h dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h: $(srcdir)/dnstap/dnstap.proto @-if test ! -d dnstap; then $(INSTALL) -d dnstap; fi $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK) $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h dnstap_fstrm.lo dnstap_fstrm.o: $(srcdir)/dnstap/dnstap_fstrm.c config.h $(srcdir)/dnstap/dnstap_fstrm.h unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h $(srcdir)/dnstap/dtstream.h dynlibmod.lo dynlibdmod.o: $(srcdir)/dynlibmod/dynlibmod.c config.h $(srcdir)/dynlibmod/dynlibmod.h # dnscrypt dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \ dnscrypt/dnscrypt_config.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ $(srcdir)/util/config_file.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h # Python Module pythonmod.lo pythonmod.o: $(srcdir)/pythonmod/pythonmod.c config.h \ pythonmod/interface.h \ $(srcdir)/pythonmod/pythonmod.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/config_file.h \ $(srcdir)/pythonmod/pythonmod_utils.h $(srcdir)/util/netevent.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h \ $(srcdir)/services/cache/dns.h $(srcdir)/services/mesh.h \ $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h pythonmod/interface.h: $(srcdir)/pythonmod/interface.i config.h @-if test ! -d pythonmod; then $(INSTALL) -d pythonmod; fi $(SWIG) $(PYTHON_CPPFLAGS) -o $@ -python $(srcdir)/pythonmod/interface.i libunbound_wrap.lo libunbound_wrap.o: libunbound/python/libunbound_wrap.c \ unbound.h libunbound/python/libunbound_wrap.c: $(srcdir)/libunbound/python/libunbound.i unbound.h @-if test ! -d libunbound/python; then $(INSTALL) -d libunbound/python; fi $(SWIG) -python -o $@ $(PYTHON_CPPFLAGS) -DPY_MAJOR_VERSION=$(PY_MAJOR_VERSION) $(srcdir)/libunbound/python/libunbound.i # Pyunbound python unbound wrapper _unbound.la: libunbound_wrap.lo libunbound.la $(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -module -avoid-version -no-undefined -shared -o $@ libunbound_wrap.lo -rpath $(PYTHON_SITE_PKG) -L. -L.libs -lunbound util/config_file.c: util/configparser.h util/configlexer.c: $(srcdir)/util/configlexer.lex util/configparser.h @-if test ! -d util; then $(INSTALL) -d util; fi if test "$(LEX)" != ":"; then \ echo "#include \"config.h\"" > $@ ;\ echo "#include \"util/configyyrename.h\"" >> $@ ;\ $(LEX) -t $(srcdir)/util/configlexer.lex >> $@ ;\ fi util/configparser.c util/configparser.h: $(srcdir)/util/configparser.y @-if test ! -d util; then $(INSTALL) -d util; fi $(YACC) -d -o util/configparser.c $(srcdir)/util/configparser.y clean: rm -f *.o *.d *.lo *~ tags rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h rm -f $(ALL_SRC:.c=.lint) rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py rm -f libunbound.a rm -rf autom4te.cache .libs build doc/html doc/xml distclean: clean rm -f config.status config.log config.h rm -f doc/example.conf doc/libunbound.3 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound-control.8 doc/unbound.8 doc/unbound.conf.5 doc/unbound-host.1 rm -f smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service rm -f $(TEST_BIN) rm -f Makefile maintainer-clean: distclean rm -f util/configlexer.c util/configparser.c util/configparser.h realclean: maintainer-clean rm -f configure config.h.in config.sub config.guess ltmain.sh aclocal.m4 libtool .SUFFIXES: .lint .c.lint: $(LINT) $(LINTFLAGS) -I. -I$(srcdir) $< touch $@ util/configparser.lint util/configlexer.lint pythonmod/pythonmod.lint libunbound/python/libunbound_wrap.lint dnstap/dnstap.pb-c.lint: # skip lint for generated code touch $@ winrc/win_svc.lint winrc/w_inst.lint winrc/unbound-service-install.lint winrc/unbound-service-remove.lint: # skip lint for windows types touch $@ lint: $(ALL_SRC:.c=.lint) tags: $(srcdir)/*.[ch] $(srcdir)/*/*.[ch] ctags -f $(srcdir)/tags $(srcdir)/*.[ch] $(srcdir)/*/*.[ch] doc: if test -n "$(doxygen)"; then \ $(doxygen) $(srcdir)/doc/unbound.doxygen; fi if test "$(WITH_PYUNBOUND)" = "yes" -o "$(WITH_PYTHONMODULE)" = "yes"; \ then if test -x "`which sphinx-build-$(PY_MAJOR_VERSION) 2>&1`"; then \ sphinx-build-$(PY_MAJOR_VERSION) -b html pythonmod/doc doc/html/pythonmod; \ sphinx-build-$(PY_MAJOR_VERSION) -b html libunbound/python/doc doc/html/pyunbound;\ fi ;\ fi strip: $(STRIP) unbound$(EXEEXT) $(STRIP) unbound-checkconf$(EXEEXT) $(STRIP) unbound-control$(EXEEXT) $(STRIP) unbound-host$(EXEEXT) || $(STRIP) .libs/unbound-host$(EXEEXT) $(STRIP) unbound-anchor$(EXEEXT) || $(STRIP) .libs/unbound-anchor$(EXEEXT) pythonmod-install: $(INSTALL) -m 755 -d $(DESTDIR)$(PYTHON_SITE_PKG) $(INSTALL) -c -m 644 pythonmod/unboundmodule.py $(DESTDIR)$(PYTHON_SITE_PKG)/unboundmodule.py pyunbound-install: $(INSTALL) -m 755 -d $(DESTDIR)$(PYTHON_SITE_PKG) $(INSTALL) -c -m 644 $(srcdir)/libunbound/python/unbound.py $(DESTDIR)$(PYTHON_SITE_PKG)/unbound.py $(LIBTOOL) --mode=install cp _unbound.la $(DESTDIR)$(PYTHON_SITE_PKG) $(LIBTOOL) --mode=finish $(DESTDIR)$(PYTHON_SITE_PKG) unbound-event-install: $(INSTALL) -m 755 -d $(DESTDIR)$(includedir) $(LIBTOOL) --mode=install cp $(srcdir)/libunbound/unbound-event.h $(DESTDIR)$(includedir)/unbound-event.h install: $(INSTALLTARGET) install-lib: lib $(UNBOUND_EVENT_INSTALL) $(INSTALL) -m 755 -d $(DESTDIR)$(libdir) $(INSTALL) -m 755 -d $(DESTDIR)$(includedir) $(INSTALL) -m 755 -d $(DESTDIR)$(mandir) $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man3 $(INSTALL) -c -m 644 doc/libunbound.3 $(DESTDIR)$(mandir)/man3 for mpage in ub_ctx ub_result ub_ctx_create ub_ctx_delete \ ub_ctx_set_option ub_ctx_get_option ub_ctx_config ub_ctx_set_fwd \ ub_ctx_resolvconf ub_ctx_hosts ub_ctx_add_ta ub_ctx_add_ta_file \ ub_ctx_trustedkeys ub_ctx_debugout ub_ctx_debuglevel ub_ctx_async \ ub_poll ub_wait ub_fd ub_process ub_resolve ub_resolve_async ub_cancel \ ub_resolve_free ub_strerror ub_ctx_print_local_zones ub_ctx_zone_add \ ub_ctx_zone_remove ub_ctx_data_add ub_ctx_data_remove; \ do \ echo ".so man3/libunbound.3" > $(DESTDIR)$(mandir)/man3/$$mpage.3 ; \ done $(LIBTOOL) --mode=install cp unbound.h $(DESTDIR)$(includedir)/unbound.h $(LIBTOOL) --mode=install cp libunbound.la $(DESTDIR)$(libdir) $(LIBTOOL) --mode=finish $(DESTDIR)$(libdir) install-all: all $(PYTHONMOD_INSTALL) $(PYUNBOUND_INSTALL) $(UNBOUND_EVENT_INSTALL) install-lib $(INSTALL) -m 755 -d $(DESTDIR)$(sbindir) $(INSTALL) -m 755 -d $(DESTDIR)$(mandir) $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man8 $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man5 $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1 $(INSTALL) -m 755 -d $(DESTDIR)$(libdir)/pkgconfig $(INSTALL) -m 644 contrib/libunbound.pc $(DESTDIR)$(libdir)/pkgconfig $(LIBTOOL) --mode=install cp -f unbound$(EXEEXT) $(DESTDIR)$(sbindir)/unbound$(EXEEXT) $(LIBTOOL) --mode=install cp -f unbound-checkconf$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-checkconf$(EXEEXT) $(LIBTOOL) --mode=install cp -f unbound-control$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-control$(EXEEXT) $(LIBTOOL) --mode=install cp -f unbound-host$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-host$(EXEEXT) $(LIBTOOL) --mode=install cp -f unbound-anchor$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-anchor$(EXEEXT) $(INSTALL) -c -m 644 doc/unbound.8 $(DESTDIR)$(mandir)/man8 $(INSTALL) -c -m 644 doc/unbound-checkconf.8 $(DESTDIR)$(mandir)/man8 $(INSTALL) -c -m 644 doc/unbound-control.8 $(DESTDIR)$(mandir)/man8 $(INSTALL) -c -m 644 doc/unbound-control.8 $(DESTDIR)$(mandir)/man8/unbound-control-setup.8 $(INSTALL) -c -m 644 doc/unbound-anchor.8 $(DESTDIR)$(mandir)/man8 $(INSTALL) -c -m 644 doc/unbound.conf.5 $(DESTDIR)$(mandir)/man5 $(INSTALL) -c -m 644 doc/unbound-host.1 $(DESTDIR)$(mandir)/man1 $(INSTALL) -c -m 755 unbound-control-setup $(DESTDIR)$(sbindir)/unbound-control-setup if test ! -e $(DESTDIR)$(configfile); then $(INSTALL) -d `dirname $(DESTDIR)$(configfile)`; $(INSTALL) -c -m 644 doc/example.conf $(DESTDIR)$(configfile); fi pythonmod-uninstall: rm -f -- $(DESTDIR)$(PYTHON_SITE_PKG)/unboundmodule.py pyunbound-uninstall: rm -f -- $(DESTDIR)$(PYTHON_SITE_PKG)/unbound.py $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(PYTHON_SITE_PKG)/_unbound.la unbound-event-uninstall: rm -f -- $(DESTDIR)$(includedir)/unbound-event.h uninstall: $(PYTHONMOD_UNINSTALL) $(PYUNBOUND_UNINSTALL) $(UNBOUND_EVENT_UNINSTALL) rm -f -- $(DESTDIR)$(sbindir)/unbound$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-checkconf$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-host$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-control$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-anchor$(EXEEXT) $(DESTDIR)$(sbindir)/unbound-control-setup rm -f -- $(DESTDIR)$(mandir)/man8/unbound.8 $(DESTDIR)$(mandir)/man8/unbound-checkconf.8 $(DESTDIR)$(mandir)/man5/unbound.conf.5 $(DESTDIR)$(mandir)/man8/unbound-control.8 $(DESTDIR)$(mandir)/man8/unbound-anchor.8 $(DESTDIR)$(mandir)/man8/unbound-control-setup.8 rm -f -- $(DESTDIR)$(mandir)/man1/unbound-host.1 $(DESTDIR)$(mandir)/man3/libunbound.3 for mpage in ub_ctx ub_result ub_ctx_create ub_ctx_delete \ ub_ctx_set_option ub_ctx_get_option ub_ctx_config ub_ctx_set_fwd \ ub_ctx_resolvconf ub_ctx_hosts ub_ctx_add_ta ub_ctx_add_ta_file \ ub_ctx_trustedkeys ub_ctx_debugout ub_ctx_debuglevel ub_ctx_async \ ub_poll ub_wait ub_fd ub_process ub_resolve ub_resolve_async ub_cancel \ ub_resolve_free ub_strerror ub_ctx_print_local_zones ub_ctx_zone_add \ ub_ctx_zone_remove ub_ctx_data_add ub_ctx_data_remove; \ do \ rm -f -- $(DESTDIR)$(mandir)/man3/$$mpage.3 ; \ done rm -f -- $(DESTDIR)$(includedir)/unbound.h $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/libunbound.la @echo @echo "You still need to remove "`dirname $(DESTDIR)$(configfile)`" , $(DESTDIR)$(configfile) by hand" iana_update: curl -o port-numbers.tmp https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml --compressed if file port-numbers.tmp | grep 'gzip' >/dev/null; then zcat port-numbers.tmp; else cat port-numbers.tmp; fi | awk '// {p=0;} /udp/ {p=1;} /[^u]/ {p=0;} /Decomissioned|Decommissioned|Removed|De-registered|unassigned|Unassigned|Reserved/ {u=1;} // { if(u==1) {u=0;} else { if(p==1) { match($$0,/[0-9]+/); print substr($$0, RSTART, RLENGTH) ","}}}' | sort -nu > util/iana_ports.inc rm -f port-numbers.tmp # dependency generation DEPEND_TMP=depend1073.tmp DEPEND_TMP2=depend1074.tmp DEPEND_TARGET=Makefile DEPEND_TARGET2=$(srcdir)/Makefile.in # actions: generate deplines from gcc, # then, filter out home/xx, /usr/xx and /opt/xx lines (some cc already do this) # then, remove empty " \" lines # then, add srcdir before .c and .h in deps. # then, remove srcdir from the (generated) parser and lexer. # and mention the .lo depend: (BUILDDIR=$$PWD; cd $(srcdir) ; $(CC) $(DEPFLAG) $(CPPFLAGS) $(CFLAGS) -I$$BUILDDIR @PTHREAD_CFLAGS_ONLY@ $(ALL_SRC) $(COMPAT_SRC)) | \ sed -e 's?'$$PWD'/config.h?config.h?g' | \ sed -e 's!'$$HOME'[^ ]* !!g' -e 's!'$$HOME'[^ ]*$$!!g' \ -e 's!/usr[^ ]* !!g' -e 's!/usr[^ ]*$$!!g' \ -e 's!/opt[^ ]* !!g' -e 's!/opt[^ ]*$$!!g' | \ sed -e '/^ \\$$/d' | \ sed -e 's? *\([^ ]*\.[ch]\)? $$(srcdir)/\1?g' | \ sed -e 's? *\([^ ]*\.inc\)? $$(srcdir)/\1?g' | \ sed -e 's?$$(srcdir)/config.h?config.h?g' \ -e 's?$$(srcdir)/util/configlexer.c?util/configlexer.c?g' \ -e 's?$$(srcdir)/util/configparser.c?util/configparser.c?g' \ -e 's?$$(srcdir)/util/configparser.h?util/configparser.h?g' \ -e 's?$$(srcdir)/dnstap/dnstap_config.h??g' \ -e 's?$$(srcdir)/dnstap/dnstap.pb-c.c?dnstap/dnstap.pb-c.c?g' \ -e 's?$$(srcdir)/dnstap/dnstap.pb-c.h?dnstap/dnstap.pb-c.h?g' \ -e 's?$$(srcdir)/dnscrypt/dnscrypt_config.h??g' \ -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \ -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \ -e 's?$$(srcdir)/ipsecmod/ipsecmod.h $$(srcdir)/ipsecmod/ipsecmod-whitelist.h?$$(IPSECMOD_HEADER)?g' \ -e 's?$$(srcdir)/dynlibmod/dynlibmod.h?$$(DYNLIBMOD_HEADER)?g' \ -e 's!\(.*\)\.o[ :]*!\1.lo \1.o: !g' \ > $(DEPEND_TMP) cp $(DEPEND_TARGET) $(DEPEND_TMP2) head -`egrep -n "# Dependencies" $(DEPEND_TARGET) | tail -1 | sed -e 's/:.*$$//'` $(DEPEND_TMP2) > $(DEPEND_TARGET) cat $(DEPEND_TMP) >> $(DEPEND_TARGET) @if diff $(DEPEND_TARGET) $(DEPEND_TMP2); then echo " $(DEPEND_TARGET) unchanged"; else echo " Updated $(DEPEND_TARGET))"; fi @if test -f $(DEPEND_TARGET2); then \ cp $(DEPEND_TARGET2) $(DEPEND_TMP2); \ head -`egrep -n "# Dependencies" $(DEPEND_TARGET2) | tail -1 | sed -e 's/:.*$$//'` $(DEPEND_TMP2) > $(DEPEND_TARGET2); \ cat $(DEPEND_TMP) >> $(DEPEND_TARGET2); \ if diff $(DEPEND_TARGET2) $(DEPEND_TMP2); then echo " $(DEPEND_TARGET2) unchanged"; else echo " Updated $(DEPEND_TARGET2))"; fi; \ fi rm -f $(DEPEND_TMP) $(DEPEND_TMP2) # build rules ipset.lo ipset.o: $(srcdir)/ipset/ipset.c # Dependencies dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/validator/val_nsec.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/cache/dns.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h infra.lo infra.o: $(srcdir)/services/cache/infra.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h rrset.lo rrset.o: $(srcdir)/services/cache/rrset.c config.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h as112.lo as112.o: $(srcdir)/util/as112.c $(srcdir)/util/as112.h dname.lo dname.o: $(srcdir)/util/data/dname.c config.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/storage/lookup3.h $(srcdir)/sldns/sbuffer.h msgencode.lo msgencode.o: $(srcdir)/util/data/msgencode.c config.h $(srcdir)/util/data/msgencode.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h $(srcdir)/services/view.h msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/respip/respip.h packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_utils.h \ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_donotq.h \ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ $(srcdir)/util/random.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h iter_delegpt.lo iter_delegpt.o: $(srcdir)/iterator/iter_delegpt.c config.h $(srcdir)/iterator/iter_delegpt.h \ $(srcdir)/util/log.h $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h iter_donotq.lo iter_donotq.o: $(srcdir)/iterator/iter_donotq.c config.h $(srcdir)/iterator/iter_donotq.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h iter_fwd.lo iter_fwd.o: $(srcdir)/iterator/iter_fwd.c config.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h iter_hints.lo iter_hints.o: $(srcdir)/iterator/iter_hints.c config.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/wire2str.h iter_priv.lo iter_priv.o: $(srcdir)/iterator/iter_priv.c config.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/regional.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.h iter_resptype.lo iter_resptype.o: $(srcdir)/iterator/iter_resptype.c config.h \ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/util/log.h \ $(srcdir)/services/cache/dns.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/dname.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h iter_scrub.lo iter_scrub.o: $(srcdir)/iterator/iter_scrub.c config.h $(srcdir)/iterator/iter_scrub.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/iterator/iter_priv.h $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/util/alloc.h $(srcdir)/sldns/sbuffer.h iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/iterator/iter_utils.h \ $(srcdir)/iterator/iter_resptype.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/str2wire.h listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/net_help.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/alloc.h \ $(srcdir)/util/edns.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/data/dname.h $(srcdir)/services/listen_dnsport.h modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/services/modstack.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(PYTHONMOD_HEADER) $(DYNLIBMOD_HEADER) $(srcdir)/cachedb/cachedb.h \ $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h \ $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h rpz.lo rpz.o: $(srcdir)/services/rpz.c config.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/util/edns.h $(srcdir)/dnstap/dnstap.h \ alloc.lo alloc.o: $(srcdir)/util/alloc.c config.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/configyyrename.h $(srcdir)/util/config_file.h util/configparser.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/edns-subnet/edns-subnet.h \ $(srcdir)/util/iana_ports.inc configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h util/configparser.h configparser.lo configparser.o: util/configparser.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_main.c config.h $(srcdir)/util/shm_side/shm_main.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h \ $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/tube.h authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h \ $(srcdir)/services/cache/dns.h $(srcdir)/services/outside_network.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h \ $(srcdir)/services/outside_network.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \ $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \ $(srcdir)/libunbound/worker.h $(PYTHONMOD_HEADER) $(DYNLIBMOD_HEADER) \ $(srcdir)/cachedb/cachedb.h $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h \ $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h $(srcdir)/dnstap/dtstream.h locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/dnstap/dnstap.h $(srcdir)/services/listen_dnsport.h \ net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h regional.lo regional.o: $(srcdir)/util/regional.c config.h $(srcdir)/util/log.h $(srcdir)/util/regional.h rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/config_file.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/net_help.h lookup3.lo lookup3.o: $(srcdir)/util/storage/lookup3.c config.h $(srcdir)/util/storage/lookup3.h lruhash.lo lruhash.o: $(srcdir)/util/storage/lruhash.c config.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h tcp_conn_limit.lo tcp_conn_limit.o: $(srcdir)/util/tcp_conn_limit.c config.h $(srcdir)/util/regional.h \ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/tcp_conn_limit.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/services/localzone.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/tube.h \ ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_utils.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/dname.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/services/mesh.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/validator/val_kcache.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/keyraw.h \ val_anchor.lo val_anchor.o: $(srcdir)/validator/val_anchor.c config.h $(srcdir)/validator/val_anchor.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/validator/autotrust.h $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/as112.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/sldns/str2wire.h validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/validator/validator.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_nsec.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_neg.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/respip/respip.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h val_kentry.lo val_kentry.o: $(srcdir)/validator/val_kentry.c config.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ val_neg.lo val_neg.o: $(srcdir)/validator/val_neg.c config.h \ $(srcdir)/validator/val_neg.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/validator/val_nsec.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h val_nsec3.lo val_nsec3.o: $(srcdir)/validator/val_nsec3.c config.h $(srcdir)/validator/val_nsec3.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/validator.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/validator/val_nsec.h $(srcdir)/sldns/sbuffer.h val_nsec.lo val_nsec.o: $(srcdir)/validator/val_nsec.c config.h $(srcdir)/validator/val_nsec.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/validator/val_utils.h $(srcdir)/sldns/pkthdr.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h val_secalgo.lo val_secalgo.o: $(srcdir)/validator/val_secalgo.c config.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/val_nsec3.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/sldns/sbuffer.h \ val_sigcrypt.lo val_sigcrypt.o: $(srcdir)/validator/val_sigcrypt.c config.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/rbtree.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ val_utils.lo val_utils.o: $(srcdir)/validator/val_utils.c config.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h \ $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_neg.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/parseutil.h dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h \ $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h $(srcdir)/edns-subnet/subnetmod.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \ $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h \ $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h \ $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/respip/respip.h $(srcdir)/services/cache/dns.h $(srcdir)/util/regional.h \ $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h \ $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/cachedb/redis.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/data/msgencode.h $(srcdir)/services/cache/dns.h \ $(srcdir)/validator/val_neg.h $(srcdir)/util/rbtree.h $(srcdir)/validator/val_secalgo.h \ $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h redis.lo redis.o: $(srcdir)/cachedb/redis.c config.h $(srcdir)/cachedb/redis.h $(srcdir)/cachedb/cachedb.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/alloc.h $(srcdir)/util/config_file.h \ $(srcdir)/sldns/sbuffer.h respip.lo respip.o: $(srcdir)/respip/respip.c config.h $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \ $(srcdir)/services/rpz.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/services/cache/dns.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ $(srcdir)/util/regional.h checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/testcode/checklocks.h dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/dnstap/dnstap.h \ $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h dnstap/dnstap.pb-c.h dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \ dnstap_fstrm.lo dnstap_fstrm.o: $(srcdir)/dnstap/dnstap_fstrm.c config.h $(srcdir)/dnstap/dnstap_fstrm.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/dnstap/dnstap_fstrm.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h \ $(srcdir)/util/net_help.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/sldns/sbuffer.h \ ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h \ $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h \ $(srcdir)/ipsecmod/ipsecmod-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/regional.h \ $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/str2wire.h ipset.lo ipset.o: $(srcdir)/ipset/ipset.c config.h $(srcdir)/ipset/ipset.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ $(srcdir)/services/cache/dns.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/util/rbtree.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h unitdname.lo unitdname.o: $(srcdir)/testcode/unitdname.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h unitlruhash.lo unitlruhash.o: $(srcdir)/testcode/unitlruhash.c config.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h unitmain.lo unitmain.o: $(srcdir)/testcode/unitmain.c config.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/util/rtt.h $(srcdir)/util/timehist.h $(srcdir)/iterator/iterator.h \ $(srcdir)/services/outbound_list.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/libunbound/unbound.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/random.h $(srcdir)/respip/respip.h \ $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/services/outside_network.h unitmsgparse.lo unitmsgparse.o: $(srcdir)/testcode/unitmsgparse.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/alloc.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/testcode/readhex.h \ $(srcdir)/testcode/testpkts.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h unitneg.lo unitneg.o: $(srcdir)/testcode/unitneg.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/dname.h $(srcdir)/testcode/unitmain.h $(srcdir)/validator/val_neg.h $(srcdir)/util/rbtree.h \ $(srcdir)/sldns/rrdef.h unitregional.lo unitregional.o: $(srcdir)/testcode/unitregional.c config.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h unitslabhash.lo unitslabhash.o: $(srcdir)/testcode/unitslabhash.c config.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/log.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h unitverify.lo unitverify.o: $(srcdir)/testcode/unitverify.c config.h $(srcdir)/util/log.h \ $(srcdir)/testcode/unitmain.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/validator/val_secalgo.h $(srcdir)/validator/val_nsec.h $(srcdir)/validator/val_nsec3.h \ $(srcdir)/util/rbtree.h $(srcdir)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/validator/val_utils.h \ $(srcdir)/testcode/testpkts.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h $(srcdir)/util/alloc.h \ $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h readhex.lo readhex.o: $(srcdir)/testcode/readhex.c config.h $(srcdir)/testcode/readhex.h $(srcdir)/util/log.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/parseutil.h unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h $(srcdir)/edns-subnet/addrtree.h \ $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \ $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/data/dname.h \ $(srcdir)/edns-subnet/edns-subnet.h unitauth.lo unitauth.o: $(srcdir)/testcode/unitauth.c config.h $(srcdir)/services/authzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/util/regional.h $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/wire2str.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h cachedump.lo cachedump.o: $(srcdir)/daemon/cachedump.c config.h \ $(srcdir)/daemon/cachedump.h $(srcdir)/daemon/remote.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/dname.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_utils.h $(srcdir)/iterator/iter_resptype.h \ $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/str2wire.h daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/edns.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/keyraw.h remote.lo remote.o: $(srcdir)/daemon/remote.c config.h \ $(srcdir)/daemon/remote.h \ $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ $(srcdir)/services/modstack.h $(srcdir)/daemon/cachedump.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/util/data/dname.h $(srcdir)/validator/validator.h \ $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_kentry.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h \ $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/iterator/iter_delegpt.h \ $(srcdir)/services/outside_network.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/sldns/wire2str.h stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/tube.h \ $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h $(srcdir)/edns-subnet/subnetmod.h \ $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/remote.h \ $(srcdir)/util/config_file.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \ $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/util/shm_side/shm_main.h $(srcdir)/dnstap/dtstream.h testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \ $(srcdir)/daemon/remote.h \ $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/util/log.h \ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/random.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ $(srcdir)/services/modstack.h $(srcdir)/daemon/remote.h \ $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/cache/dns.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/respip/respip.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ $(srcdir)/util/edns.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h \ $(srcdir)/validator/autotrust.h $(srcdir)/validator/val_anchor.h $(srcdir)/libunbound/context.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/util/shm_side/shm_main.h $(srcdir)/dnstap/dtstream.h acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/acl_list.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/services/localzone.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ $(srcdir)/daemon/acl_list.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/view.h \ $(srcdir)/util/config_file.h $(srcdir)/util/shm_side/shm_main.h $(srcdir)/util/storage/lookup3.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/tcp_conn_limit.h $(srcdir)/util/edns.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h $(srcdir)/services/cache/infra.h \ $(srcdir)/util/rtt.h $(srcdir)/services/localzone.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/respip/respip.h $(srcdir)/util/random.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/keyraw.h stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/worker.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/alloc.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h \ $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/respip/respip.h \ $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/tube.h \ $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ $(srcdir)/validator/val_kcache.h $(srcdir)/validator/val_neg.h $(srcdir)/edns-subnet/subnetmod.h \ $(srcdir)/util/data/dname.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \ replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \ $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/testcode/fake_event.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/edns.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/util/config_file.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ $(srcdir)/testcode/replay.h $(srcdir)/testcode/testpkts.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h \ $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h lock_verify.lo lock_verify.o: $(srcdir)/testcode/lock_verify.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h pktview.lo pktview.o: $(srcdir)/testcode/pktview.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/testcode/unitmain.h $(srcdir)/testcode/readhex.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/sldns/parseutil.h readhex.lo readhex.o: $(srcdir)/testcode/readhex.c config.h $(srcdir)/testcode/readhex.h $(srcdir)/util/log.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h memstats.lo memstats.o: $(srcdir)/testcode/memstats.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ $(PYTHONMOD_HEADER) $(srcdir)/edns-subnet/subnet-whitelist.h worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/util/config_file.h \ $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.h \ $(srcdir)/util/net_help.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/util/edns.h libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/unbound-event.h config.h $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h \ $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/libunbound/libworker.h \ $(srcdir)/util/config_file.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h \ $(srcdir)/util/random.h $(srcdir)/util/net_help.h $(srcdir)/util/tube.h $(srcdir)/util/ub_event.h $(srcdir)/util/edns.h \ $(srcdir)/util/storage/dnstree.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h \ $(srcdir)/services/rpz.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h libworker.lo libworker.o: $(srcdir)/libunbound/libworker.c config.h \ $(srcdir)/libunbound/libworker.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/services/outside_network.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/mesh.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/services/view.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/respip/respip.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/services/outbound_list.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/tube.h $(srcdir)/util/regional.h $(srcdir)/util/random.h $(srcdir)/util/storage/lookup3.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/data/msgencode.h \ $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/str2wire.h unbound-host.lo unbound-host.o: $(srcdir)/smallapp/unbound-host.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h \ asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/libunbound/context.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h \ streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/dname.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h \ perf.lo perf.o: $(srcdir)/testcode/perf.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h delayer.lo delayer.o: $(srcdir)/testcode/delayer.c config.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h unbound-control.lo unbound-control.o: $(srcdir)/smallapp/unbound-control.c config.h \ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.h \ $(srcdir)/util/shm_side/shm_main.h $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/rpz.h \ $(srcdir)/services/localzone.h $(srcdir)/util/rbtree.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/services/authzone.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/modstack.h $(srcdir)/respip/respip.h unbound-anchor.lo unbound-anchor.o: $(srcdir)/smallapp/unbound-anchor.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h \ petal.lo petal.o: $(srcdir)/testcode/petal.c config.h \ unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h \ $(srcdir)/dnstap/dtstream.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/dnstap/dnstap_fstrm.h \ $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h $(srcdir)/services/listen_dnsport.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h \ dnstap/dnstap.pb-c.h \ $(srcdir)/util/config_file.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h pythonmod_utils.lo pythonmod_utils.o: $(srcdir)/pythonmod/pythonmod_utils.c config.h $(srcdir)/util/module.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/net_help.h $(srcdir)/services/cache/dns.h \ $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/regional.h \ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/sldns/sbuffer.h \ win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc.h $(srcdir)/winrc/w_inst.h \ $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/worker.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/util/module.h \ $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \ $(srcdir)/winrc/w_inst.h unbound-service-remove.lo unbound-service-remove.o: $(srcdir)/winrc/unbound-service-remove.c config.h \ $(srcdir)/winrc/w_inst.h anchor-update.lo anchor-update.o: $(srcdir)/winrc/anchor-update.c config.h $(srcdir)/libunbound/unbound.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/wire2str.h keyraw.lo keyraw.o: $(srcdir)/sldns/keyraw.c config.h $(srcdir)/sldns/keyraw.h \ $(srcdir)/sldns/rrdef.h \ sbuffer.lo sbuffer.o: $(srcdir)/sldns/sbuffer.c config.h $(srcdir)/sldns/sbuffer.h wire2str.lo wire2str.o: $(srcdir)/sldns/wire2str.c config.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/sldns/keyraw.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h parse.lo parse.o: $(srcdir)/sldns/parse.c config.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/sldns/sbuffer.h parseutil.lo parseutil.o: $(srcdir)/sldns/parseutil.c config.h $(srcdir)/sldns/parseutil.h rrdef.lo rrdef.o: $(srcdir)/sldns/rrdef.c config.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h str2wire.lo str2wire.o: $(srcdir)/sldns/str2wire.c config.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parse.h $(srcdir)/sldns/parseutil.h dohclient.lo dohclient.o: $(srcdir)/testcode/dohclient.c config.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/parseutil.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ $(srcdir)/sldns/pkthdr.h $(srcdir)/util/net_help.h \ ctime_r.lo ctime_r.o: $(srcdir)/compat/ctime_r.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h fake-rfc2553.lo fake-rfc2553.o: $(srcdir)/compat/fake-rfc2553.c $(srcdir)/compat/fake-rfc2553.h config.h gmtime_r.lo gmtime_r.o: $(srcdir)/compat/gmtime_r.c config.h inet_aton.lo inet_aton.o: $(srcdir)/compat/inet_aton.c config.h inet_ntop.lo inet_ntop.o: $(srcdir)/compat/inet_ntop.c config.h inet_pton.lo inet_pton.o: $(srcdir)/compat/inet_pton.c config.h malloc.lo malloc.o: $(srcdir)/compat/malloc.c config.h memcmp.lo memcmp.o: $(srcdir)/compat/memcmp.c config.h memmove.lo memmove.o: $(srcdir)/compat/memmove.c config.h snprintf.lo snprintf.o: $(srcdir)/compat/snprintf.c config.h strlcat.lo strlcat.o: $(srcdir)/compat/strlcat.c config.h strlcpy.lo strlcpy.o: $(srcdir)/compat/strlcpy.c config.h strptime.lo strptime.o: $(srcdir)/compat/strptime.c config.h getentropy_freebsd.lo getentropy_freebsd.o: $(srcdir)/compat/getentropy_freebsd.c getentropy_linux.lo getentropy_linux.o: $(srcdir)/compat/getentropy_linux.c config.h \ getentropy_osx.lo getentropy_osx.o: $(srcdir)/compat/getentropy_osx.c getentropy_solaris.lo getentropy_solaris.o: $(srcdir)/compat/getentropy_solaris.c config.h \ getentropy_win.lo getentropy_win.o: $(srcdir)/compat/getentropy_win.c explicit_bzero.lo explicit_bzero.o: $(srcdir)/compat/explicit_bzero.c config.h arc4random.lo arc4random.o: $(srcdir)/compat/arc4random.c config.h $(srcdir)/compat/chacha_private.h arc4random_uniform.lo arc4random_uniform.o: $(srcdir)/compat/arc4random_uniform.c config.h arc4_lock.lo arc4_lock.o: $(srcdir)/compat/arc4_lock.c config.h $(srcdir)/util/locks.h sha512.lo sha512.o: $(srcdir)/compat/sha512.c config.h reallocarray.lo reallocarray.o: $(srcdir)/compat/reallocarray.c config.h isblank.lo isblank.o: $(srcdir)/compat/isblank.c config.h strsep.lo strsep.o: $(srcdir)/compat/strsep.c config.h unbound-1.13.1/respip/0000755000175000017500000000000014010434640014201 5ustar wouterwouterunbound-1.13.1/respip/respip.c0000644000175000017500000012060714010434640015655 0ustar wouterwouter/* * respip/respip.c - filtering response IP module */ /** * \file * * This file contains a module that inspects a result of recursive resolution * to see if any IP address record should trigger a special action. * If applicable these actions can modify the original response. */ #include "config.h" #include "services/localzone.h" #include "services/authzone.h" #include "services/cache/dns.h" #include "sldns/str2wire.h" #include "util/config_file.h" #include "util/fptr_wlist.h" #include "util/module.h" #include "util/net_help.h" #include "util/regional.h" #include "util/data/msgreply.h" #include "util/storage/dnstree.h" #include "respip/respip.h" #include "services/view.h" #include "sldns/rrdef.h" /** Subset of resp_addr.node, used for inform-variant logging */ struct respip_addr_info { struct sockaddr_storage addr; socklen_t addrlen; int net; }; /** Query state regarding the response-ip module. */ enum respip_state { /** * The general state. Unless CNAME chasing takes place, all processing * is completed in this state without any other asynchronous event. */ RESPIP_INIT = 0, /** * A subquery for CNAME chasing is completed. */ RESPIP_SUBQUERY_FINISHED }; /** Per query state for the response-ip module. */ struct respip_qstate { enum respip_state state; }; struct respip_set* respip_set_create(void) { struct respip_set* set = calloc(1, sizeof(*set)); if(!set) return NULL; set->region = regional_create(); if(!set->region) { free(set); return NULL; } addr_tree_init(&set->ip_tree); lock_rw_init(&set->lock); return set; } /** helper traverse to delete resp_addr nodes */ static void resp_addr_del(rbnode_type* n, void* ATTR_UNUSED(arg)) { struct resp_addr* r = (struct resp_addr*)n->key; lock_rw_destroy(&r->lock); #ifdef THREADS_DISABLED (void)r; #endif } void respip_set_delete(struct respip_set* set) { if(!set) return; lock_rw_destroy(&set->lock); traverse_postorder(&set->ip_tree, resp_addr_del, NULL); regional_destroy(set->region); free(set); } struct rbtree_type* respip_set_get_tree(struct respip_set* set) { if(!set) return NULL; return &set->ip_tree; } struct resp_addr* respip_sockaddr_find_or_create(struct respip_set* set, struct sockaddr_storage* addr, socklen_t addrlen, int net, int create, const char* ipstr) { struct resp_addr* node; node = (struct resp_addr*)addr_tree_find(&set->ip_tree, addr, addrlen, net); if(!node && create) { node = regional_alloc_zero(set->region, sizeof(*node)); if(!node) { log_err("out of memory"); return NULL; } lock_rw_init(&node->lock); node->action = respip_none; if(!addr_tree_insert(&set->ip_tree, &node->node, addr, addrlen, net)) { /* We know we didn't find it, so this should be * impossible. */ log_warn("unexpected: duplicate address: %s", ipstr); } } return node; } void respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node) { struct resp_addr* prev; prev = (struct resp_addr*)rbtree_previous((struct rbnode_type*)node); lock_rw_destroy(&node->lock); rbtree_delete(&set->ip_tree, node); /* no free'ing, all allocated in region */ if(!prev) addr_tree_init_parents((rbtree_type*)set); else addr_tree_init_parents_node(&prev->node); } /** returns the node in the address tree for the specified netblock string; * non-existent node will be created if 'create' is true */ static struct resp_addr* respip_find_or_create(struct respip_set* set, const char* ipstr, int create) { struct sockaddr_storage addr; int net; socklen_t addrlen; if(!netblockstrtoaddr(ipstr, 0, &addr, &addrlen, &net)) { log_err("cannot parse netblock: '%s'", ipstr); return NULL; } return respip_sockaddr_find_or_create(set, &addr, addrlen, net, create, ipstr); } static int respip_tag_cfg(struct respip_set* set, const char* ipstr, const uint8_t* taglist, size_t taglen) { struct resp_addr* node; if(!(node=respip_find_or_create(set, ipstr, 1))) return 0; if(node->taglist) { log_warn("duplicate response-address-tag for '%s', overridden.", ipstr); } node->taglist = regional_alloc_init(set->region, taglist, taglen); if(!node->taglist) { log_err("out of memory"); return 0; } node->taglen = taglen; return 1; } /** set action for the node specified by the netblock string */ static int respip_action_cfg(struct respip_set* set, const char* ipstr, const char* actnstr) { struct resp_addr* node; enum respip_action action; if(!(node=respip_find_or_create(set, ipstr, 1))) return 0; if(node->action != respip_none) { verbose(VERB_QUERY, "duplicate response-ip action for '%s', overridden.", ipstr); } if(strcmp(actnstr, "deny") == 0) action = respip_deny; else if(strcmp(actnstr, "redirect") == 0) action = respip_redirect; else if(strcmp(actnstr, "inform") == 0) action = respip_inform; else if(strcmp(actnstr, "inform_deny") == 0) action = respip_inform_deny; else if(strcmp(actnstr, "inform_redirect") == 0) action = respip_inform_redirect; else if(strcmp(actnstr, "always_transparent") == 0) action = respip_always_transparent; else if(strcmp(actnstr, "always_refuse") == 0) action = respip_always_refuse; else if(strcmp(actnstr, "always_nxdomain") == 0) action = respip_always_nxdomain; else if(strcmp(actnstr, "always_nodata") == 0) action = respip_always_nodata; else if(strcmp(actnstr, "always_deny") == 0) action = respip_always_deny; else { log_err("unknown response-ip action %s", actnstr); return 0; } node->action = action; return 1; } /** allocate and initialize an rrset structure; this function is based * on new_local_rrset() from the localzone.c module */ static struct ub_packed_rrset_key* new_rrset(struct regional* region, uint16_t rrtype, uint16_t rrclass) { struct packed_rrset_data* pd; struct ub_packed_rrset_key* rrset = regional_alloc_zero( region, sizeof(*rrset)); if(!rrset) { log_err("out of memory"); return NULL; } rrset->entry.key = rrset; pd = regional_alloc_zero(region, sizeof(*pd)); if(!pd) { log_err("out of memory"); return NULL; } pd->trust = rrset_trust_prim_noglue; pd->security = sec_status_insecure; rrset->entry.data = pd; rrset->rk.dname = regional_alloc_zero(region, 1); if(!rrset->rk.dname) { log_err("out of memory"); return NULL; } rrset->rk.dname_len = 1; rrset->rk.type = htons(rrtype); rrset->rk.rrset_class = htons(rrclass); return rrset; } /** enter local data as resource records into a response-ip node */ int respip_enter_rr(struct regional* region, struct resp_addr* raddr, uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, size_t rdata_len, const char* rrstr, const char* netblockstr) { struct packed_rrset_data* pd; struct sockaddr* sa; sa = (struct sockaddr*)&raddr->node.addr; if (rrtype == LDNS_RR_TYPE_CNAME && raddr->data) { log_err("CNAME response-ip data (%s) can not co-exist with other " "response-ip data for netblock %s", rrstr, netblockstr); return 0; } else if (raddr->data && raddr->data->rk.type == htons(LDNS_RR_TYPE_CNAME)) { log_err("response-ip data (%s) can not be added; CNAME response-ip " "data already in place for netblock %s", rrstr, netblockstr); return 0; } else if((rrtype != LDNS_RR_TYPE_CNAME) && ((sa->sa_family == AF_INET && rrtype != LDNS_RR_TYPE_A) || (sa->sa_family == AF_INET6 && rrtype != LDNS_RR_TYPE_AAAA))) { log_err("response-ip data %s record type does not correspond " "to netblock %s address family", rrstr, netblockstr); return 0; } if(!raddr->data) { raddr->data = new_rrset(region, rrtype, rrclass); if(!raddr->data) return 0; } pd = raddr->data->entry.data; return rrset_insert_rr(region, pd, rdata, rdata_len, ttl, rrstr); } static int respip_enter_rrstr(struct regional* region, struct resp_addr* raddr, const char* rrstr, const char* netblock) { uint8_t* nm; uint16_t rrtype = 0, rrclass = 0; time_t ttl = 0; uint8_t rr[LDNS_RR_BUF_SIZE]; uint8_t* rdata = NULL; size_t rdata_len = 0; char buf[65536]; char bufshort[64]; int ret; if(raddr->action != respip_redirect && raddr->action != respip_inform_redirect) { log_err("cannot parse response-ip-data %s: response-ip " "action for %s is not redirect", rrstr, netblock); return 0; } ret = snprintf(buf, sizeof(buf), ". %s", rrstr); if(ret < 0 || ret >= (int)sizeof(buf)) { strlcpy(bufshort, rrstr, sizeof(bufshort)); log_err("bad response-ip-data: %s...", bufshort); return 0; } if(!rrstr_get_rr_content(buf, &nm, &rrtype, &rrclass, &ttl, rr, sizeof(rr), &rdata, &rdata_len)) { log_err("bad response-ip-data: %s", rrstr); return 0; } free(nm); return respip_enter_rr(region, raddr, rrtype, rrclass, ttl, rdata, rdata_len, rrstr, netblock); } static int respip_data_cfg(struct respip_set* set, const char* ipstr, const char* rrstr) { struct resp_addr* node; node=respip_find_or_create(set, ipstr, 0); if(!node || node->action == respip_none) { log_err("cannot parse response-ip-data %s: " "response-ip node for %s not found", rrstr, ipstr); return 0; } return respip_enter_rrstr(set->region, node, rrstr, ipstr); } static int respip_set_apply_cfg(struct respip_set* set, char* const* tagname, int num_tags, struct config_strbytelist* respip_tags, struct config_str2list* respip_actions, struct config_str2list* respip_data) { struct config_strbytelist* p; struct config_str2list* pa; struct config_str2list* pd; set->tagname = tagname; set->num_tags = num_tags; p = respip_tags; while(p) { struct config_strbytelist* np = p->next; log_assert(p->str && p->str2); if(!respip_tag_cfg(set, p->str, p->str2, p->str2len)) { config_del_strbytelist(p); return 0; } free(p->str); free(p->str2); free(p); p = np; } pa = respip_actions; while(pa) { struct config_str2list* np = pa->next; log_assert(pa->str && pa->str2); if(!respip_action_cfg(set, pa->str, pa->str2)) { config_deldblstrlist(pa); return 0; } free(pa->str); free(pa->str2); free(pa); pa = np; } pd = respip_data; while(pd) { struct config_str2list* np = pd->next; log_assert(pd->str && pd->str2); if(!respip_data_cfg(set, pd->str, pd->str2)) { config_deldblstrlist(pd); return 0; } free(pd->str); free(pd->str2); free(pd); pd = np; } addr_tree_init_parents(&set->ip_tree); return 1; } int respip_global_apply_cfg(struct respip_set* set, struct config_file* cfg) { int ret = respip_set_apply_cfg(set, cfg->tagname, cfg->num_tags, cfg->respip_tags, cfg->respip_actions, cfg->respip_data); cfg->respip_data = NULL; cfg->respip_actions = NULL; cfg->respip_tags = NULL; return ret; } /** Iterate through raw view data and apply the view-specific respip * configuration; at this point we should have already seen all the views, * so if any of the views that respip data refer to does not exist, that's * an error. This additional iteration through view configuration data * is expected to not have significant performance impact (or rather, its * performance impact is not expected to be prohibitive in the configuration * processing phase). */ int respip_views_apply_cfg(struct views* vs, struct config_file* cfg, int* have_view_respip_cfg) { struct config_view* cv; struct view* v; int ret; for(cv = cfg->views; cv; cv = cv->next) { /** if no respip config for this view then there's * nothing to do; note that even though respip data must go * with respip action, we're checking for both here because * we want to catch the case where the respip action is missing * while the data is present */ if(!cv->respip_actions && !cv->respip_data) continue; if(!(v = views_find_view(vs, cv->name, 1))) { log_err("view '%s' unexpectedly missing", cv->name); return 0; } if(!v->respip_set) { v->respip_set = respip_set_create(); if(!v->respip_set) { log_err("out of memory"); lock_rw_unlock(&v->lock); return 0; } } ret = respip_set_apply_cfg(v->respip_set, NULL, 0, NULL, cv->respip_actions, cv->respip_data); lock_rw_unlock(&v->lock); if(!ret) { log_err("Error while applying respip configuration " "for view '%s'", cv->name); return 0; } *have_view_respip_cfg = (*have_view_respip_cfg || v->respip_set->ip_tree.count); cv->respip_actions = NULL; cv->respip_data = NULL; } return 1; } /** * make a deep copy of 'key' in 'region'. * This is largely derived from packed_rrset_copy_region() and * packed_rrset_ptr_fixup(), but differs in the following points: * * - It doesn't assume all data in 'key' are in a contiguous memory region. * Although that would be the case in most cases, 'key' can be passed from * a lower-level module and it might not build the rrset to meet the * assumption. In fact, an rrset specified as response-ip-data or generated * in local_data_find_tag_datas() breaks the assumption. So it would be * safer not to naively rely on the assumption. On the other hand, this * function ensures the copied rrset data are in a contiguous region so * that it won't cause a disruption even if an upper layer module naively * assumes the memory layout. * - It doesn't copy RRSIGs (if any) in 'key'. The rrset will be used in * a reply that was already faked, so it doesn't make much sense to provide * partial sigs even if they are valid themselves. * - It doesn't adjust TTLs as it basically has to be a verbatim copy of 'key' * just allocated in 'region' (the assumption is necessary TTL adjustment * has been already done in 'key'). * * This function returns the copied rrset key on success, and NULL on memory * allocation failure. */ static struct ub_packed_rrset_key* copy_rrset(const struct ub_packed_rrset_key* key, struct regional* region) { struct ub_packed_rrset_key* ck = regional_alloc(region, sizeof(struct ub_packed_rrset_key)); struct packed_rrset_data* d; struct packed_rrset_data* data = key->entry.data; size_t dsize, i; uint8_t* nextrdata; /* derived from packed_rrset_copy_region(), but don't use * packed_rrset_sizeof() and do exclude RRSIGs */ if(!ck) return NULL; ck->id = key->id; memset(&ck->entry, 0, sizeof(ck->entry)); ck->entry.hash = key->entry.hash; ck->entry.key = ck; ck->rk = key->rk; if(key->rk.dname) { ck->rk.dname = regional_alloc_init(region, key->rk.dname, key->rk.dname_len); if(!ck->rk.dname) return NULL; ck->rk.dname_len = key->rk.dname_len; } else { ck->rk.dname = NULL; ck->rk.dname_len = 0; } if((unsigned)data->count >= 0xffff00U) return NULL; /* guard against integer overflow in dsize */ dsize = sizeof(struct packed_rrset_data) + data->count * (sizeof(size_t)+sizeof(uint8_t*)+sizeof(time_t)); for(i=0; icount; i++) { if((unsigned)dsize >= 0x0fffffffU || (unsigned)data->rr_len[i] >= 0x0fffffffU) return NULL; /* guard against integer overflow */ dsize += data->rr_len[i]; } d = regional_alloc_zero(region, dsize); if(!d) return NULL; *d = *data; d->rrsig_count = 0; ck->entry.data = d; /* derived from packed_rrset_ptr_fixup() with copying the data */ d->rr_len = (size_t*)((uint8_t*)d + sizeof(struct packed_rrset_data)); d->rr_data = (uint8_t**)&(d->rr_len[d->count]); d->rr_ttl = (time_t*)&(d->rr_data[d->count]); nextrdata = (uint8_t*)&(d->rr_ttl[d->count]); for(i=0; icount; i++) { d->rr_len[i] = data->rr_len[i]; d->rr_ttl[i] = data->rr_ttl[i]; d->rr_data[i] = nextrdata; memcpy(d->rr_data[i], data->rr_data[i], data->rr_len[i]); nextrdata += d->rr_len[i]; } return ck; } int respip_init(struct module_env* env, int id) { (void)env; (void)id; return 1; } void respip_deinit(struct module_env* env, int id) { (void)env; (void)id; } /** Convert a packed AAAA or A RRset to sockaddr. */ static int rdata2sockaddr(const struct packed_rrset_data* rd, uint16_t rtype, size_t i, struct sockaddr_storage* ss, socklen_t* addrlenp) { /* unbound can accept and cache odd-length AAAA/A records, so we have * to validate the length. */ if(rtype == LDNS_RR_TYPE_A && rd->rr_len[i] == 6) { struct sockaddr_in* sa4 = (struct sockaddr_in*)ss; memset(sa4, 0, sizeof(*sa4)); sa4->sin_family = AF_INET; memcpy(&sa4->sin_addr, rd->rr_data[i] + 2, sizeof(sa4->sin_addr)); *addrlenp = sizeof(*sa4); return 1; } else if(rtype == LDNS_RR_TYPE_AAAA && rd->rr_len[i] == 18) { struct sockaddr_in6* sa6 = (struct sockaddr_in6*)ss; memset(sa6, 0, sizeof(*sa6)); sa6->sin6_family = AF_INET6; memcpy(&sa6->sin6_addr, rd->rr_data[i] + 2, sizeof(sa6->sin6_addr)); *addrlenp = sizeof(*sa6); return 1; } return 0; } /** * Search the given 'iptree' for response address information that matches * any of the IP addresses in an AAAA or A in the answer section of the * response (stored in 'rep'). If found, a pointer to the matched resp_addr * structure will be returned, and '*rrset_id' is set to the index in * rep->rrsets for the RRset that contains the matching IP address record * (the index is normally 0, but can be larger than that if this is a CNAME * chain or type-ANY response). * Returns resp_addr holding read lock. */ static struct resp_addr* respip_addr_lookup(const struct reply_info *rep, struct respip_set* rs, size_t* rrset_id) { size_t i; struct resp_addr* ra; struct sockaddr_storage ss; socklen_t addrlen; lock_rw_rdlock(&rs->lock); for(i=0; ian_numrrsets; i++) { size_t j; const struct packed_rrset_data* rd; uint16_t rtype = ntohs(rep->rrsets[i]->rk.type); if(rtype != LDNS_RR_TYPE_A && rtype != LDNS_RR_TYPE_AAAA) continue; rd = rep->rrsets[i]->entry.data; for(j = 0; j < rd->count; j++) { if(!rdata2sockaddr(rd, rtype, j, &ss, &addrlen)) continue; ra = (struct resp_addr*)addr_tree_lookup(&rs->ip_tree, &ss, addrlen); if(ra) { *rrset_id = i; lock_rw_rdlock(&ra->lock); lock_rw_unlock(&rs->lock); return ra; } } } lock_rw_unlock(&rs->lock); return NULL; } /* * Create a new reply_info based on 'rep'. The new info is based on * the passed 'rep', but ignores any rrsets except for the first 'an_numrrsets' * RRsets in the answer section. These answer rrsets are copied to the * new info, up to 'copy_rrsets' rrsets (which must not be larger than * 'an_numrrsets'). If an_numrrsets > copy_rrsets, the remaining rrsets array * entries will be kept empty so the caller can fill them later. When rrsets * are copied, they are shallow copied. The caller must ensure that the * copied rrsets are valid throughout its lifetime and must provide appropriate * mutex if it can be shared by multiple threads. */ static struct reply_info * make_new_reply_info(const struct reply_info* rep, struct regional* region, size_t an_numrrsets, size_t copy_rrsets) { struct reply_info* new_rep; size_t i; /* create a base struct. we specify 'insecure' security status as * the modified response won't be DNSSEC-valid. In our faked response * the authority and additional sections will be empty (except possible * EDNS0 OPT RR in the additional section appended on sending it out), * so the total number of RRsets is an_numrrsets. */ new_rep = construct_reply_info_base(region, rep->flags, rep->qdcount, rep->ttl, rep->prefetch_ttl, rep->serve_expired_ttl, an_numrrsets, 0, 0, an_numrrsets, sec_status_insecure); if(!new_rep) return NULL; if(!reply_info_alloc_rrset_keys(new_rep, NULL, region)) return NULL; for(i=0; irrsets[i] = rep->rrsets[i]; return new_rep; } /** * See if response-ip or tag data should override the original answer rrset * (which is rep->rrsets[rrset_id]) and if so override it. * This is (mostly) equivalent to localzone.c:local_data_answer() but for * response-ip actions. * Note that this function distinguishes error conditions from "success but * not overridden". This is because we want to avoid accidentally applying * the "no data" action in case of error. * @param action: action to apply * @param data: RRset to use for override * @param qtype: original query type * @param rep: original reply message * @param rrset_id: the rrset ID in 'rep' to which the action should apply * @param new_repp: see respip_rewrite_reply * @param tag: if >= 0 the tag ID used to determine the action and data * @param tag_datas: data corresponding to 'tag'. * @param tag_datas_size: size of 'tag_datas' * @param tagname: array of tag names, used for logging * @param num_tags: size of 'tagname', used for logging * @param redirect_rrsetp: ptr to redirect record * @param region: region for building new reply * @return 1 if overridden, 0 if not overridden, -1 on error. */ static int respip_data_answer(enum respip_action action, struct ub_packed_rrset_key* data, uint16_t qtype, const struct reply_info* rep, size_t rrset_id, struct reply_info** new_repp, int tag, struct config_strlist** tag_datas, size_t tag_datas_size, char* const* tagname, int num_tags, struct ub_packed_rrset_key** redirect_rrsetp, struct regional* region) { struct ub_packed_rrset_key* rp = data; struct reply_info* new_rep; *redirect_rrsetp = NULL; if(action == respip_redirect && tag != -1 && (size_t)tagrrsets[rrset_id]->rk.dname; dataqinfo.qname_len = rep->rrsets[rrset_id]->rk.dname_len; dataqinfo.qtype = ntohs(rep->rrsets[rrset_id]->rk.type); dataqinfo.qclass = ntohs(rep->rrsets[rrset_id]->rk.rrset_class); memset(&r, 0, sizeof(r)); if(local_data_find_tag_datas(&dataqinfo, tag_datas[tag], &r, region)) { verbose(VERB_ALGO, "response-ip redirect with tag data [%d] %s", tag, (tagrk.dname = rep->rrsets[rrset_id]->rk.dname; rp->rk.dname_len = rep->rrsets[rrset_id]->rk.dname_len; } /* Build a new reply with redirect rrset. We keep any preceding CNAMEs * and replace the address rrset that triggers the action. If it's * type ANY query, however, no other answer records should be kept * (note that it can't be a CNAME chain in this case due to * sanitizing). */ if(qtype == LDNS_RR_TYPE_ANY) rrset_id = 0; new_rep = make_new_reply_info(rep, region, rrset_id + 1, rrset_id); if(!new_rep) return -1; rp->rk.flags |= PACKED_RRSET_FIXEDTTL; /* avoid adjusting TTL */ new_rep->rrsets[rrset_id] = rp; *redirect_rrsetp = rp; *new_repp = new_rep; return 1; } /** * apply response ip action in case where no action data is provided. * this is similar to localzone.c:lz_zone_answer() but simplified due to * the characteristics of response ip: * - 'deny' variants will be handled at the caller side * - no specific processing for 'transparent' variants: unlike local zones, * there is no such a case of 'no data but name existing'. so all variants * just mean 'transparent if no data'. * @param qtype: query type * @param action: found action * @param rep: * @param new_repp * @param rrset_id * @param region: region for building new reply * @return 1 on success, 0 on error. */ static int respip_nodata_answer(uint16_t qtype, enum respip_action action, const struct reply_info *rep, size_t rrset_id, struct reply_info** new_repp, struct regional* region) { struct reply_info* new_rep; if(action == respip_refuse || action == respip_always_refuse) { new_rep = make_new_reply_info(rep, region, 0, 0); if(!new_rep) return 0; FLAGS_SET_RCODE(new_rep->flags, LDNS_RCODE_REFUSED); *new_repp = new_rep; return 1; } else if(action == respip_static || action == respip_redirect || action == respip_always_nxdomain || action == respip_always_nodata || action == respip_inform_redirect) { /* Since we don't know about other types of the owner name, * we generally return NOERROR/NODATA unless an NXDOMAIN action * is explicitly specified. */ int rcode = (action == respip_always_nxdomain)? LDNS_RCODE_NXDOMAIN:LDNS_RCODE_NOERROR; /* We should empty the answer section except for any preceding * CNAMEs (in that case rrset_id > 0). Type-ANY case is * special as noted in respip_data_answer(). */ if(qtype == LDNS_RR_TYPE_ANY) rrset_id = 0; new_rep = make_new_reply_info(rep, region, rrset_id, rrset_id); if(!new_rep) return 0; FLAGS_SET_RCODE(new_rep->flags, rcode); *new_repp = new_rep; return 1; } return 1; } /** Populate action info structure with the results of response-ip action * processing, iff as the result of response-ip processing we are actually * taking some action. Only action is set if action_only is true. * Returns true on success, false on failure. */ static int populate_action_info(struct respip_action_info* actinfo, enum respip_action action, const struct resp_addr* raddr, const struct ub_packed_rrset_key* ATTR_UNUSED(rrset), int ATTR_UNUSED(tag), const struct respip_set* ATTR_UNUSED(ipset), int ATTR_UNUSED(action_only), struct regional* region, int rpz_used, int rpz_log, char* log_name, int rpz_cname_override) { if(action == respip_none || !raddr) return 1; actinfo->action = action; actinfo->rpz_used = rpz_used; actinfo->rpz_log = rpz_log; actinfo->log_name = log_name; actinfo->rpz_cname_override = rpz_cname_override; /* for inform variants, make a copy of the matched address block for * later logging. We make a copy to proactively avoid disruption if * and when we allow a dynamic update to the respip tree. */ if(action == respip_inform || action == respip_inform_deny || rpz_used) { struct respip_addr_info* a = regional_alloc_zero(region, sizeof(*a)); if(!a) { log_err("out of memory"); return 0; } a->addr = raddr->node.addr; a->addrlen = raddr->node.addrlen; a->net = raddr->node.net; actinfo->addrinfo = a; } return 1; } static int respip_use_rpz(struct resp_addr* raddr, struct rpz* r, enum respip_action* action, struct ub_packed_rrset_key** data, int* rpz_log, char** log_name, int* rpz_cname_override, struct regional* region, int* is_rpz) { if(r->action_override == RPZ_DISABLED_ACTION) { *is_rpz = 0; return 1; } else if(r->action_override == RPZ_NO_OVERRIDE_ACTION) *action = raddr->action; else *action = rpz_action_to_respip_action(r->action_override); if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION && r->cname_override) { *data = r->cname_override; *rpz_cname_override = 1; } *rpz_log = r->log; if(r->log_name) if(!(*log_name = regional_strdup(region, r->log_name))) return 0; *is_rpz = 1; return 1; } int respip_rewrite_reply(const struct query_info* qinfo, const struct respip_client_info* cinfo, const struct reply_info* rep, struct reply_info** new_repp, struct respip_action_info* actinfo, struct ub_packed_rrset_key** alias_rrset, int search_only, struct regional* region, struct auth_zones* az) { const uint8_t* ctaglist; size_t ctaglen; const uint8_t* tag_actions; size_t tag_actions_size; struct config_strlist** tag_datas; size_t tag_datas_size; struct view* view = NULL; struct respip_set* ipset = NULL; size_t rrset_id = 0; enum respip_action action = respip_none; int tag = -1; struct resp_addr* raddr = NULL; int ret = 1; struct ub_packed_rrset_key* redirect_rrset = NULL; struct rpz* r; struct auth_zone* a = NULL; struct ub_packed_rrset_key* data = NULL; int rpz_used = 0; int rpz_log = 0; int rpz_cname_override = 0; char* log_name = NULL; if(!cinfo) goto done; ctaglist = cinfo->taglist; ctaglen = cinfo->taglen; tag_actions = cinfo->tag_actions; tag_actions_size = cinfo->tag_actions_size; tag_datas = cinfo->tag_datas; tag_datas_size = cinfo->tag_datas_size; view = cinfo->view; ipset = cinfo->respip_set; log_assert(ipset); /** Try to use response-ip config from the view first; use * global response-ip config if we don't have the view or we don't * have the matching per-view config (and the view allows the use * of global data in this case). * Note that we lock the view even if we only use view members that * currently don't change after creation. This is for safety for * future possible changes as the view documentation seems to expect * any of its member can change in the view's lifetime. * Note also that we assume 'view' is valid in this function, which * should be safe (see unbound bug #1191) */ if(view) { lock_rw_rdlock(&view->lock); if(view->respip_set) { if((raddr = respip_addr_lookup(rep, view->respip_set, &rrset_id))) { /** for per-view respip directives the action * can only be direct (i.e. not tag-based) */ action = raddr->action; } } if(!raddr && !view->isfirst) goto done; if(!raddr && view->isfirst) { lock_rw_unlock(&view->lock); view = NULL; } } if(!raddr && (raddr = respip_addr_lookup(rep, ipset, &rrset_id))) { action = (enum respip_action)local_data_find_tag_action( raddr->taglist, raddr->taglen, ctaglist, ctaglen, tag_actions, tag_actions_size, (enum localzone_type)raddr->action, &tag, ipset->tagname, ipset->num_tags); } lock_rw_rdlock(&az->rpz_lock); for(a = az->rpz_first; a && !raddr; a = a->rpz_az_next) { lock_rw_rdlock(&a->lock); r = a->rpz; if(!r->taglist || taglist_intersect(r->taglist, r->taglistlen, ctaglist, ctaglen)) { if((raddr = respip_addr_lookup(rep, r->respip_set, &rrset_id))) { if(!respip_use_rpz(raddr, r, &action, &data, &rpz_log, &log_name, &rpz_cname_override, region, &rpz_used)) { log_err("out of memory"); lock_rw_unlock(&raddr->lock); lock_rw_unlock(&a->lock); lock_rw_unlock(&az->rpz_lock); return 0; } if(rpz_used) { /* break to make sure 'a' stays pointed * to used auth_zone, and keeps lock */ break; } lock_rw_unlock(&raddr->lock); raddr = NULL; actinfo->rpz_disabled++; } } lock_rw_unlock(&a->lock); } lock_rw_unlock(&az->rpz_lock); if(raddr && !search_only) { int result = 0; /* first, see if we have response-ip or tag action for the * action except for 'always' variants. */ if(action != respip_always_refuse && action != respip_always_transparent && action != respip_always_nxdomain && action != respip_always_nodata && action != respip_always_deny && (result = respip_data_answer(action, (data) ? data : raddr->data, qinfo->qtype, rep, rrset_id, new_repp, tag, tag_datas, tag_datas_size, ipset->tagname, ipset->num_tags, &redirect_rrset, region)) < 0) { ret = 0; goto done; } /* if no action data applied, take action specific to the * action without data. */ if(!result && !respip_nodata_answer(qinfo->qtype, action, rep, rrset_id, new_repp, region)) { ret = 0; goto done; } } done: if(view) { lock_rw_unlock(&view->lock); } if(ret) { /* If we're redirecting the original answer to a * CNAME, record the CNAME rrset so the caller can take * the appropriate action. Note that we don't check the * action type; it should normally be 'redirect', but it * can be of other type when a data-dependent tag action * uses redirect response-ip data. */ if(redirect_rrset && redirect_rrset->rk.type == ntohs(LDNS_RR_TYPE_CNAME) && qinfo->qtype != LDNS_RR_TYPE_ANY) *alias_rrset = redirect_rrset; /* on success, populate respip result structure */ ret = populate_action_info(actinfo, action, raddr, redirect_rrset, tag, ipset, search_only, region, rpz_used, rpz_log, log_name, rpz_cname_override); } if(raddr) { lock_rw_unlock(&raddr->lock); } if(rpz_used) { lock_rw_unlock(&a->lock); } return ret; } static int generate_cname_request(struct module_qstate* qstate, struct ub_packed_rrset_key* alias_rrset) { struct module_qstate* subq = NULL; struct query_info subqi; memset(&subqi, 0, sizeof(subqi)); get_cname_target(alias_rrset, &subqi.qname, &subqi.qname_len); if(!subqi.qname) return 0; /* unexpected: not a valid CNAME RDATA */ subqi.qtype = qstate->qinfo.qtype; subqi.qclass = qstate->qinfo.qclass; fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); return (*qstate->env->attach_sub)(qstate, &subqi, BIT_RD, 0, 0, &subq); } void respip_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct respip_qstate* rq = (struct respip_qstate*)qstate->minfo[id]; log_query_info(VERB_QUERY, "respip operate: query", &qstate->qinfo); (void)outbound; if(event == module_event_new || event == module_event_pass) { if(!rq) { rq = regional_alloc_zero(qstate->region, sizeof(*rq)); if(!rq) goto servfail; rq->state = RESPIP_INIT; qstate->minfo[id] = rq; } if(rq->state == RESPIP_SUBQUERY_FINISHED) { qstate->ext_state[id] = module_finished; return; } verbose(VERB_ALGO, "respip: pass to next module"); qstate->ext_state[id] = module_wait_module; } else if(event == module_event_moddone) { /* If the reply may be subject to response-ip rewriting * according to the query type, check the actions. If a * rewrite is necessary, we'll replace the reply in qstate * with the new one. */ enum module_ext_state next_state = module_finished; if((qstate->qinfo.qtype == LDNS_RR_TYPE_A || qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA || qstate->qinfo.qtype == LDNS_RR_TYPE_ANY) && qstate->return_msg && qstate->return_msg->rep) { struct reply_info* new_rep = qstate->return_msg->rep; struct ub_packed_rrset_key* alias_rrset = NULL; struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; if(!respip_rewrite_reply(&qstate->qinfo, qstate->client_info, qstate->return_msg->rep, &new_rep, &actinfo, &alias_rrset, 0, qstate->region, qstate->env->auth_zones)) { goto servfail; } if(actinfo.action != respip_none) { /* save action info for logging on a * per-front-end-query basis */ if(!(qstate->respip_action_info = regional_alloc_init(qstate->region, &actinfo, sizeof(actinfo)))) { log_err("out of memory"); goto servfail; } } else { qstate->respip_action_info = NULL; } if (actinfo.action == respip_always_deny || (new_rep == qstate->return_msg->rep && (actinfo.action == respip_deny || actinfo.action == respip_inform_deny))) { /* for deny-variant actions (unless response-ip * data is applied), mark the query state so * the response will be dropped for all * clients. */ qstate->is_drop = 1; } else if(alias_rrset) { if(!generate_cname_request(qstate, alias_rrset)) goto servfail; next_state = module_wait_subquery; } qstate->return_msg->rep = new_rep; } qstate->ext_state[id] = next_state; } else qstate->ext_state[id] = module_finished; return; servfail: qstate->return_rcode = LDNS_RCODE_SERVFAIL; qstate->return_msg = NULL; } int respip_merge_cname(struct reply_info* base_rep, const struct query_info* qinfo, const struct reply_info* tgt_rep, const struct respip_client_info* cinfo, int must_validate, struct reply_info** new_repp, struct regional* region, struct auth_zones* az) { struct reply_info* new_rep; struct reply_info* tmp_rep = NULL; /* just a placeholder */ struct ub_packed_rrset_key* alias_rrset = NULL; /* ditto */ uint16_t tgt_rcode; size_t i, j; struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; /* If the query for the CNAME target would result in an unusual rcode, * we generally translate it as a failure for the base query * (which would then be translated into SERVFAIL). The only exception * is NXDOMAIN and YXDOMAIN, which are passed to the end client(s). * The YXDOMAIN case would be rare but still possible (when * DNSSEC-validated DNAME has been cached but synthesizing CNAME * can't be generated due to length limitation) */ tgt_rcode = FLAGS_GET_RCODE(tgt_rep->flags); if((tgt_rcode != LDNS_RCODE_NOERROR && tgt_rcode != LDNS_RCODE_NXDOMAIN && tgt_rcode != LDNS_RCODE_YXDOMAIN) || (must_validate && tgt_rep->security <= sec_status_bogus)) { return 0; } /* see if the target reply would be subject to a response-ip action. */ if(!respip_rewrite_reply(qinfo, cinfo, tgt_rep, &tmp_rep, &actinfo, &alias_rrset, 1, region, az)) return 0; if(actinfo.action != respip_none) { log_info("CNAME target of redirect response-ip action would " "be subject to response-ip action, too; stripped"); *new_repp = base_rep; return 1; } /* Append target reply to the base. Since we cannot assume * tgt_rep->rrsets is valid throughout the lifetime of new_rep * or it can be safely shared by multiple threads, we need to make a * deep copy. */ new_rep = make_new_reply_info(base_rep, region, base_rep->an_numrrsets + tgt_rep->an_numrrsets, base_rep->an_numrrsets); if(!new_rep) return 0; for(i=0,j=base_rep->an_numrrsets; ian_numrrsets; i++,j++) { new_rep->rrsets[j] = copy_rrset(tgt_rep->rrsets[i], region); if(!new_rep->rrsets[j]) return 0; } FLAGS_SET_RCODE(new_rep->flags, tgt_rcode); *new_repp = new_rep; return 1; } void respip_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { struct respip_qstate* rq = (struct respip_qstate*)super->minfo[id]; struct reply_info* new_rep = NULL; rq->state = RESPIP_SUBQUERY_FINISHED; /* respip subquery should have always been created with a valid reply * in super. */ log_assert(super->return_msg && super->return_msg->rep); /* return_msg can be NULL when, e.g., the sub query resulted in * SERVFAIL, in which case we regard it as a failure of the original * query. Other checks are probably redundant, but we check them * for safety. */ if(!qstate->return_msg || !qstate->return_msg->rep || qstate->return_rcode != LDNS_RCODE_NOERROR) goto fail; if(!respip_merge_cname(super->return_msg->rep, &qstate->qinfo, qstate->return_msg->rep, super->client_info, super->env->need_to_validate, &new_rep, super->region, qstate->env->auth_zones)) goto fail; super->return_msg->rep = new_rep; return; fail: super->return_rcode = LDNS_RCODE_SERVFAIL; super->return_msg = NULL; return; } void respip_clear(struct module_qstate* qstate, int id) { qstate->minfo[id] = NULL; } size_t respip_get_mem(struct module_env* env, int id) { (void)env; (void)id; return 0; } /** * The response-ip function block */ static struct module_func_block respip_block = { "respip", &respip_init, &respip_deinit, &respip_operate, &respip_inform_super, &respip_clear, &respip_get_mem }; struct module_func_block* respip_get_funcblock(void) { return &respip_block; } enum respip_action resp_addr_get_action(const struct resp_addr* addr) { return addr ? addr->action : respip_none; } struct ub_packed_rrset_key* resp_addr_get_rrset(struct resp_addr* addr) { return addr ? addr->data : NULL; } int respip_set_is_empty(const struct respip_set* set) { return set ? set->ip_tree.count == 0 : 1; } void respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, struct comm_reply* repinfo) { char srcip[128], respip[128], txt[512]; unsigned port; struct respip_addr_info* respip_addr = respip_actinfo->addrinfo; size_t txtlen = 0; const char* actionstr = NULL; if(local_alias) qname = local_alias->rrset->rk.dname; port = (unsigned)((repinfo->addr.ss_family == AF_INET) ? ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port) : ntohs(((struct sockaddr_in6*)&repinfo->addr)->sin6_port)); addr_to_str(&repinfo->addr, repinfo->addrlen, srcip, sizeof(srcip)); addr_to_str(&respip_addr->addr, respip_addr->addrlen, respip, sizeof(respip)); if(respip_actinfo->rpz_log) { txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s", "RPZ applied "); if(respip_actinfo->rpz_cname_override) actionstr = rpz_action_to_string( RPZ_CNAME_OVERRIDE_ACTION); else actionstr = rpz_action_to_string( respip_action_to_rpz_action( respip_actinfo->action)); } if(respip_actinfo->log_name) { txtlen += snprintf(txt+txtlen, sizeof(txt)-txtlen, "[%s] ", respip_actinfo->log_name); } snprintf(txt+txtlen, sizeof(txt)-txtlen, "%s/%d %s %s@%u", respip, respip_addr->net, (actionstr) ? actionstr : "inform", srcip, port); log_nametypeclass(NO_VERBOSE, txt, qname, qtype, qclass); } unbound-1.13.1/respip/respip.h0000644000175000017500000002440714010434640015663 0ustar wouterwouter/* * respip/respip.h - IP-based response modification module */ /** * \file * * This file contains a module that selectively modifies query responses * based on their AAAA/A IP addresses. */ #ifndef RESPIP_RESPIP_H #define RESPIP_RESPIP_H #include "util/module.h" #include "services/localzone.h" #include "util/locks.h" /** * Conceptual set of IP addresses for response AAAA or A records that should * trigger special actions. */ struct respip_set { struct regional* region; struct rbtree_type ip_tree; lock_rw_type lock; /* lock on the respip tree */ char* const* tagname; /* shallow copy of tag names, for logging */ int num_tags; /* number of tagname entries */ }; /** An address span with response control information */ struct resp_addr { /** node in address tree */ struct addr_tree_node node; /** lock on the node item */ lock_rw_type lock; /** tag bitlist */ uint8_t* taglist; /** length of the taglist (in bytes) */ size_t taglen; /** action for this address span */ enum respip_action action; /** "local data" for this node */ struct ub_packed_rrset_key* data; }; /** * Forward declaration for the structure that represents a tree of view data. */ struct views; struct respip_addr_info; /** * Client-specific attributes that can affect IP-based actions. * This is essentially a subset of acl_addr (except for respip_set) but * defined as a separate structure to avoid dependency on the daemon-specific * structure. * respip_set is supposed to refer to the response-ip set for the global view. */ struct respip_client_info { uint8_t* taglist; size_t taglen; uint8_t* tag_actions; size_t tag_actions_size; struct config_strlist** tag_datas; size_t tag_datas_size; struct view* view; struct respip_set* respip_set; }; /** * Data items representing the result of response-ip processing. * Note: this structure currently only define a few members, but exists * as a separate struct mainly for the convenience of custom extensions. */ struct respip_action_info { enum respip_action action; int rpz_used; int rpz_log; int rpz_disabled; char* log_name; int rpz_cname_override; struct respip_addr_info* addrinfo; /* set only for inform variants */ }; /** * Forward declaration for the structure that represents a node in the * respip_set address tree */ struct resp_addr; /** * Create response IP set. * @return new struct or NULL on error. */ struct respip_set* respip_set_create(void); /** * Delete response IP set. * @param set: to delete. */ void respip_set_delete(struct respip_set* set); /** * Apply response-ip config settings to the global (default) view. * It assumes exclusive access to set (no internal locks). * @param set: processed global respip config data * @param cfg: config data. * @return 1 on success, 0 on error. */ int respip_global_apply_cfg(struct respip_set* set, struct config_file* cfg); /** * Apply response-ip config settings in named views. * @param vs: view structures with processed config data * @param cfg: config data. * @param have_view_respip_cfg: set to true if any named view has respip * configuration; otherwise set to false * @return 1 on success, 0 on error. */ int respip_views_apply_cfg(struct views* vs, struct config_file* cfg, int* have_view_respip_cfg); /** * Merge two replies to build a complete CNAME chain. * It appends the content of 'tgt_rep' to 'base_rep', assuming (but not * checking) the former ends with a CNAME and the latter resolves its target. * A merged new reply will be built using 'region' and *new_repp will point * to the new one on success. * If the target reply would also be subject to a response-ip action for * 'cinfo', this function uses 'base_rep' as the merged reply, ignoring * 'tgt_rep'. This is for avoiding cases like a CNAME loop or failure of * applying an action to an address. * RRSIGs in 'tgt_rep' will be excluded in the merged reply, as the resulting * reply is assumed to be faked due to a response-ip action and can't be * considered secure in terms of DNSSEC. * The caller must ensure that neither 'base_rep' nor 'tgt_rep' can be modified * until this function returns. * @param base_rep: the reply info containing an incomplete CNAME. * @param qinfo: query info corresponding to 'base_rep'. * @param tgt_rep: the reply info that completes the CNAME chain. * @param cinfo: client info corresponding to 'base_rep'. * @param must_validate: whether 'tgt_rep' must be DNSSEC-validated. * @param new_repp: pointer placeholder for the merged reply. will be intact * on error. * @param region: allocator to build *new_repp. * @param az: auth zones containing RPZ information. * @return 1 on success, 0 on error. */ int respip_merge_cname(struct reply_info* base_rep, const struct query_info* qinfo, const struct reply_info* tgt_rep, const struct respip_client_info* cinfo, int must_validate, struct reply_info** new_repp, struct regional* region, struct auth_zones* az); /** * See if any IP-based action should apply to any IP address of AAAA/A answer * record in the reply. If so, apply the action. In some cases it rewrites * the reply rrsets, in which case *new_repp will point to the updated reply * info. Depending on the action, some of the rrsets in 'rep' will be * shallow-copied into '*new_repp'; the caller must ensure that the rrsets * in 'rep' are valid throughout the lifetime of *new_repp, and it must * provide appropriate mutex if the rrsets can be shared by multiple threads. * @param qinfo: query info corresponding to the reply. * @param cinfo: client-specific info to identify the best matching action. * can be NULL. * @param rep: original reply info. must not be NULL. * @param new_repp: can be set to the rewritten reply info (intact on failure). * @param actinfo: result of response-ip processing * @param alias_rrset: must not be NULL. * @param search_only: if true, only check if an action would apply. actionp * will be set (or intact) accordingly but the modified reply won't be built. * @param az: auth zones containing RPZ information. * @param region: allocator to build *new_repp. * @return 1 on success, 0 on error. */ int respip_rewrite_reply(const struct query_info* qinfo, const struct respip_client_info* cinfo, const struct reply_info *rep, struct reply_info** new_repp, struct respip_action_info* actinfo, struct ub_packed_rrset_key** alias_rrset, int search_only, struct regional* region, struct auth_zones* az); /** * Get the response-ip function block. * @return: function block with function pointers to response-ip methods. */ struct module_func_block* respip_get_funcblock(void); /** response-ip init */ int respip_init(struct module_env* env, int id); /** response-ip deinit */ void respip_deinit(struct module_env* env, int id); /** response-ip operate on a query */ void respip_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** inform response-ip super */ void respip_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** response-ip cleanup query state */ void respip_clear(struct module_qstate* qstate, int id); /** * returns address of the IP address tree of the specified respip set; * returns NULL for NULL input; exists for test purposes only */ struct rbtree_type* respip_set_get_tree(struct respip_set* set); /** * returns respip action for the specified node in the respip address * returns respip_none for NULL input; exists for test purposes only */ enum respip_action resp_addr_get_action(const struct resp_addr* addr); /** * returns rrset portion of the specified node in the respip address * tree; returns NULL for NULL input; exists for test purposes only */ struct ub_packed_rrset_key* resp_addr_get_rrset(struct resp_addr* addr); /** response-ip alloc size routine */ size_t respip_get_mem(struct module_env* env, int id); /** * respip set emptiness test * @param set respip set to test * @return 0 if the specified set exists (non-NULL) and is non-empty; * otherwise returns 1 */ int respip_set_is_empty(const struct respip_set* set); /** * print log information for a query subject to an inform or inform-deny * response-ip action. * @param respip_actinfo: response-ip information that causes the action * @param qname: query name in the context, will be ignored if local_alias is * non-NULL. * @param qtype: query type, in host byte order. * @param qclass: query class, in host byte order. * @param local_alias: set to a local alias if the query matches an alias in * a local zone. In this case its owner name will be considered the actual * query name. * @param repinfo: reply info containing the client's source address and port. */ void respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, struct comm_reply* repinfo); /** * Find resp_addr in tree, create and add to tree if it does not exist. * @param set: struct containing the tree and region to alloc new node on. * should hold write lock. * @param addr: address to look up. * @param addrlen: length of addr. * @param net: netblock to lookup. * @param create: create node if it does not exist when 1. * @param ipstr: human redable ip string, for logging. * @return newly created of found node, not holding lock. */ struct resp_addr* respip_sockaddr_find_or_create(struct respip_set* set, struct sockaddr_storage* addr, socklen_t addrlen, int net, int create, const char* ipstr); /** * Add RR to resp_addr's RRset. Create RRset if not existing. * @param region: region to alloc RR(set). * @param raddr: resp_addr containing RRset. Must hold write lock. * @param rrtype: RR type. * @param rrclass: RR class. * @param ttl: TTL. * @param rdata: RDATA. * @param rdata_len: length of rdata. * @param rrstr: RR as string, for logging * @param netblockstr: netblock as string, for logging * @return 0 on error */ int respip_enter_rr(struct regional* region, struct resp_addr* raddr, uint16_t rrtype, uint16_t rrclass, time_t ttl, uint8_t* rdata, size_t rdata_len, const char* rrstr, const char* netblockstr); /** * Delete resp_addr node from tree. * @param set: struct containing tree. Must hold write lock. * @param node: node to delete. Not locked. */ void respip_sockaddr_delete(struct respip_set* set, struct resp_addr* node); #endif /* RESPIP_RESPIP_H */ unbound-1.13.1/configure0000755000175000017500000245063514010434645014632 0ustar wouterwouter#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for unbound 1.13.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: unbound-bugs@nlnetlabs.nl or $0: https://github.com/NLnetLabs/unbound/issues about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' PACKAGE_VERSION='1.13.1' PACKAGE_STRING='unbound 1.13.1' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS date version INSTALLTARGET ALLTARGET SOURCEFILE SOURCEDETERMINE IPSET_OBJ IPSET_SRC IPSECMOD_HEADER IPSECMOD_OBJ DNSCRYPT_OBJ DNSCRYPT_SRC ENABLE_DNSCRYPT ENABLE_DNSCRYPT_XCHACHA20 DNSTAP_OBJ DNSTAP_SRC DNSTAP_SOCKET_TESTBIN DNSTAP_SOCKET_PATH opt_dnstap_socket_path ENABLE_DNSTAP PROTOC_C UBSYMS EXTRALINK COMMON_OBJ_ALL_SYMBOLS LIBOBJ_WITHOUT_CTIME LIBOBJ_WITHOUT_CTIMEARC4 WIN_CHECKCONF_OBJ_LINK WIN_CONTROL_OBJ_LINK WIN_UBANCHOR_OBJ_LINK WIN_HOST_OBJ_LINK WIN_DAEMON_OBJ_LINK WIN_DAEMON_OBJ WIN_DAEMON_SRC WINAPPS WINDRES CHECKLOCK_OBJ staticexe PC_LIBEVENT_DEPENDENCY UNBOUND_EVENT_UNINSTALL UNBOUND_EVENT_INSTALL SUBNET_HEADER SUBNET_OBJ PC_LIBBSD_DEPENDENCY SSLLIB HAVE_SSL PC_CRYPTO_DEPENDENCY CONFIG_DATE NETBSD_LINTFLAGS PYUNBOUND_UNINSTALL PYUNBOUND_INSTALL PYUNBOUND_TARGET PYUNBOUND_OBJ WITH_PYUNBOUND PYTHONMOD_UNINSTALL PYTHONMOD_INSTALL PYTHONMOD_HEADER PYTHONMOD_OBJ WITH_PYTHONMODULE swig SWIG_LIB SWIG PC_PY_DEPENDENCY PY_MAJOR_VERSION PYTHON_SITE_PKG PYTHON_LDFLAGS PYTHON_CPPFLAGS PYTHON PYTHON_VERSION DYNLIBMOD_EXTRALIBS DYNLIBMOD_HEADER DYNLIBMOD_OBJ WITH_DYNLIBMODULE PTHREAD_CFLAGS_ONLY PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ SLDNS_ALLOCCHECK_EXTRA_OBJ USE_SYSTEMD_FALSE USE_SYSTEMD_TRUE SYSTEMD_DAEMON_LIBS SYSTEMD_DAEMON_CFLAGS SYSTEMD_LIBS SYSTEMD_CFLAGS RUNTIME_PATH LIBOBJS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL AWK RANLIB ac_ct_AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL AR host_os host_vendor host_cpu host build_os build_vendor build_cpu build libtool STRIP doxygen YFLAGS YACC LEXLIB LEX_OUTPUT_ROOT LEX debug_enabled DEPFLAG UNBOUND_USERNAME UNBOUND_ROOTCERT_FILE UNBOUND_ROOTKEY_FILE UNBOUND_PIDFILE UNBOUND_SHARE_DIR UNBOUND_CHROOT_DIR UNBOUND_RUN_DIR ub_conf_dir ub_conf_file UNBOUND_LOCALSTATE_DIR UNBOUND_SYSCONF_DIR UNBOUND_SBIN_DIR EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC LIBUNBOUND_AGE LIBUNBOUND_REVISION LIBUNBOUND_CURRENT UNBOUND_VERSION_MICRO UNBOUND_VERSION_MINOR UNBOUND_VERSION_MAJOR target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_conf_file with_run_dir with_chroot_dir with_share_dir with_pidfile with_rootkey_file with_rootcert_file with_username enable_checking enable_debug enable_flto enable_pie enable_relro_now enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_rpath enable_largefile enable_systemd enable_alloc_checks enable_alloc_lite enable_alloc_nonregional with_pthreads with_solaris_threads with_syslog_facility with_dynlibmodule with_pyunbound with_pythonmodule enable_swig_version_check with_nss with_nettle with_ssl with_libbsd enable_sha1 enable_sha2 enable_subnet enable_gost enable_ecdsa enable_dsa enable_ed25519 enable_ed448 enable_event_api enable_tfo_client enable_tfo_server with_libevent with_libexpat with_libhiredis with_libnghttp2 enable_static_exe enable_fully_static enable_lock_checks enable_allsymbols enable_dnstap with_dnstap_socket_path with_protobuf_c enable_dnscrypt with_libsodium enable_cachedb enable_ipsecmod enable_ipset with_libmnl enable_explicit_port_randomisation with_libunbound_only ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP YACC YFLAGS LT_SYS_LIBRARY_PATH PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR SYSTEMD_CFLAGS SYSTEMD_LIBS SYSTEMD_DAEMON_CFLAGS SYSTEMD_DAEMON_LIBS PYTHON_VERSION' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures unbound 1.13.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/unbound] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of unbound 1.13.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-checking Enable warnings, asserts, makefile-dependencies --enable-debug same as enable-checking --disable-flto Disable link-time optimization (gcc specific option) --enable-pie Enable Position-Independent Executable (eg. to fully benefit from ASLR, small performance penalty) --enable-relro-now Enable full relocation binding at load-time (RELRO NOW, to protect GOT and .dtor areas) --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-rpath disable hardcoded rpath (default=enabled) --disable-largefile omit support for large files --enable-systemd compile with systemd support --enable-alloc-checks enable to memory allocation statistics, for debug purposes --enable-alloc-lite enable for lightweight alloc assertions, for debug purposes --enable-alloc-nonregional enable nonregional allocs, slow but exposes regional allocations to other memory purifiers, for debug purposes --disable-swig-version-check Disable swig version check to build python modules with older swig even though that is unreliable --disable-sha1 Disable SHA1 RRSIG support, does not disable nsec3 support --disable-sha2 Disable SHA256 and SHA512 RRSIG support --enable-subnet Enable client subnet --disable-gost Disable GOST support --disable-ecdsa Disable ECDSA support --disable-dsa Disable DSA support --disable-ed25519 Disable ED25519 support --disable-ed448 Disable ED448 support --enable-event-api Enable (experimental) pluggable event base libunbound API installed to unbound-event.h --enable-tfo-client Enable TCP Fast Open for client mode --enable-tfo-server Enable TCP Fast Open for server mode --enable-static-exe enable to compile executables statically against (event) uninstalled libs, for debug purposes --enable-fully-static enable to compile fully static --enable-lock-checks enable to check lock and unlock calls, for debug purposes --enable-allsymbols export all symbols from libunbound and link binaries to it, smaller install size but libunbound export table is polluted by internal symbols --enable-dnstap Enable dnstap support (requires protobuf-c) --enable-dnscrypt Enable dnscrypt support (requires libsodium) --enable-cachedb enable cachedb module that can use external cache storage --enable-ipsecmod Enable ipsecmod module that facilitates opportunistic IPsec --enable-ipset enable ipset module --disable-explicit-port-randomisation disable explicit source port randomisation and rely on the kernel to provide random source ports Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-conf-file=path Pathname to the Unbound configuration file --with-run-dir=path set default directory to chdir to (by default dir part of cfg file) --with-chroot-dir=path set default directory to chroot to (by default same as run-dir) --with-share-dir=path set default directory with shared data (by default same as share/unbound) --with-pidfile=filename set default pathname to unbound pidfile (default run-dir/unbound.pid) --with-rootkey-file=filename set default pathname to root key file (default run-dir/root.key). This file is read and written. --with-rootcert-file=filename set default pathname to root update certificate file (default run-dir/icannbundle.pem). This file need not exist if you are content with the builtin. --with-username=user set default user that unbound changes to (default user is unbound) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-pthreads use pthreads library, or --without-pthreads to disable threading support. --with-solaris-threads use solaris native thread library. --with-syslog-facility=LOCAL0 - LOCAL7 set SYSLOG_FACILITY, default DAEMON --with-dynlibmodule build dynamic library module, or --without-dynlibmodule to disable it. (default=no) --with-pyunbound build PyUnbound, or --without-pyunbound to skip it. (default=no) --with-pythonmodule build Python module, or --without-pythonmodule to disable script engine. (default=no) --with-nss=path use libnss instead of openssl, installed at path. --with-nettle=path use libnettle as crypto library, installed at path. --with-ssl=pathname enable SSL (will check /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr) --with-libbsd Use portable libbsd functions --with-libevent=pathname use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path). Slower, but allows use of large outgoing port ranges. --with-libexpat=path specify explicit path for libexpat. --with-libhiredis=path specify explicit path for libhiredis. --with-libnghttp2=path specify explicit path for libnghttp2. --with-dnstap-socket-path=pathname set default dnstap socket path --with-protobuf-c=path Path where protobuf-c is installed, for dnstap --with-libsodium=path Path where libsodium is installed, for dnscrypt --with-libmnl=path specify explicit path for libmnl. --with-libunbound-only do not build daemon and tool programs Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. LT_SYS_LIBRARY_PATH User-defined run-time library search path. PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path SYSTEMD_CFLAGS C compiler flags for SYSTEMD, overriding pkg-config SYSTEMD_LIBS linker flags for SYSTEMD, overriding pkg-config SYSTEMD_DAEMON_CFLAGS C compiler flags for SYSTEMD_DAEMON, overriding pkg-config SYSTEMD_DAEMON_LIBS linker flags for SYSTEMD_DAEMON, overriding pkg-config PYTHON_VERSION The installed Python version to use, for example '2.3'. This string will be appended to the Python interpreter canonical name. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF unbound configure 1.13.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------------------------------------------------------------- ## ## Report this to unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues ## ## --------------------------------------------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by unbound $as_me 1.13.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=13 UNBOUND_VERSION_MICRO=1 LIBUNBOUND_CURRENT=9 LIBUNBOUND_REVISION=12 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 # 1.0.2 had 0:14:0 # 1.1.0 had 0:15:0 # 1.1.1 had 0:16:0 # 1.2.0 had 0:17:0 # 1.2.1 had 0:18:0 # 1.3.0 had 1:0:0 # ub_cancel and -export-symbols. # 1.3.1 had 1:1:0 # 1.3.2 had 1:2:0 # 1.3.3 had 1:3:0 # 1.3.4 had 1:4:0 # 1.4.0-snapshots had 1:5:0 # 1.4.0 had 1:5:0 (not 2:0:0) # ub_result.why_bogus # 1.4.1 had 2:1:0 # 1.4.2 had 2:2:0 # 1.4.3 had 2:3:0 # 1.4.4 had 2:4:0 # 1.4.5 had 2:5:0 # 1.4.6 had 2:6:0 # 1.4.7 had 2:7:0 # 1.4.8 had 2:8:0 # 1.4.9 had 2:9:0 # 1.4.10 had 2:10:0 # 1.4.11 had 2:11:0 # 1.4.12 had 2:12:0 # 1.4.13 had 2:13:0 # and 1.4.13p1 and 1.4.13.p2 # 1.4.14 had 2:14:0 # 1.4.15 had 3:0:1 # adds ub_version() # 1.4.16 had 3:1:1 # 1.4.17 had 3:2:1 # 1.4.18 had 3:3:1 # 1.4.19 had 3:4:1 # 1.4.20 had 4:0:2 # adds libunbound.ttl # but shipped 3:5:1 # 1.4.21 had 4:1:2 # 1.4.22 had 4:1:2 # 1.5.0 had 5:3:3 # adds ub_ctx_add_ta_autr # 1.5.1 had 5:3:3 # 1.5.2 had 5:5:3 # 1.5.3 had 5:6:3 # 1.5.4 had 5:7:3 # 1.5.5 had 5:8:3 # 1.5.6 had 5:9:3 # 1.5.7 had 5:10:3 # 1.5.8 had 6:0:4 # adds ub_ctx_set_stub # 1.5.9 had 6:1:4 # 1.5.10 had 6:2:4 # 1.6.0 had 6:3:4 # 1.6.1 had 7:0:5 # ub_callback_t typedef renamed to ub_callback_type # 1.6.2 had 7:1:5 # 1.6.3 had 7:2:5 # 1.6.4 had 7:3:5 # 1.6.5 had 7:4:5 # 1.6.6 had 7:5:5 # 1.6.7 had 7:6:5 # 1.6.8 had 7:7:5 # 1.7.0 had 7:8:5 # 1.7.1 had 7:9:5 # 1.7.2 had 7:10:5 # 1.7.3 had 7:11:5 # 1.8.0 had 8:0:0 # changes the event callback function signature # 1.8.1 had 8:1:0 # 1.8.2 had 8:2:0 # 1.8.3 had 8:3:0 # 1.9.0 had 9:0:1 # add ub_ctx_set_tls # 1.9.1 had 9:1:1 # 1.9.2 had 9:2:1 # 1.9.3 had 9:3:1 # 1.9.4 had 9:4:1 # 1.9.5 had 9:5:1 # 1.9.6 had 9:6:1 # 1.10.0 had 9:7:1 # 1.10.1 had 9:8:1 # 1.11.0 had 9:9:1 # 1.12.0 had 9:10:1 # 1.13.0 had 9:11:1 # 1.13.1 had 9:12:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary # API are we supplying? # Age -- How many previous binary API versions do we also # support? # # If we release a new version that does not change the binary API, # increment Revision. # # If we release a new version that changes the binary API, but does # not break programs compiled against the old binary API, increment # Current and Age. Set Revision to 0, since this is the first # implementation of the new API. # # Otherwise, we're changing the binary API and breaking backward # compatibility with old binaries. Increment Current. Set Age to 0, # since we're backward compatible with no previous APIs. Set Revision # to 0 too. cmdln="`echo $@ | sed -e 's/\\\\/\\\\\\\\/g' | sed -e 's/"/\\\\"/'g`" cat >>confdefs.h <<_ACEOF #define CONFCMDLINE "$cmdln" _ACEOF CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h if test "$ac_cv_header_minix_config_h" = "yes"; then $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h fi case "$prefix" in NONE) prefix="/usr/local" ;; esac case "$exec_prefix" in NONE) exec_prefix="$prefix" ;; esac # are we on MinGW? if uname -s 2>&1 | grep MINGW32 >/dev/null; then on_mingw="yes" else if echo $host $target | grep mingw32 >/dev/null; then on_mingw="yes" else on_mingw="no"; fi fi # # Determine configuration file # the eval is to evaluate shell expansion twice UNBOUND_SBIN_DIR=`eval echo "${sbindir}"` UNBOUND_SYSCONF_DIR=`eval echo "${sysconfdir}"` UNBOUND_LOCALSTATE_DIR=`eval echo "${localstatedir}"` if test $on_mingw = "no"; then ub_conf_file=`eval echo "${sysconfdir}/unbound/unbound.conf"` else ub_conf_file="C:\\Program Files\\Unbound\\service.conf" fi # Check whether --with-conf_file was given. if test "${with_conf_file+set}" = set; then : withval=$with_conf_file; ub_conf_file="$withval" fi hdr_config="`echo $ub_conf_file | sed -e 's/\\\\/\\\\\\\\/g'`" cat >>confdefs.h <<_ACEOF #define CONFIGFILE "$hdr_config" _ACEOF ub_conf_dir=`$as_dirname -- "$ub_conf_file" || $as_expr X"$ub_conf_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ub_conf_file" : 'X\(//\)[^/]' \| \ X"$ub_conf_file" : 'X\(//\)$' \| \ X"$ub_conf_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ub_conf_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Determine run, chroot directory and pidfile locations # Check whether --with-run-dir was given. if test "${with_run_dir+set}" = set; then : withval=$with_run_dir; UNBOUND_RUN_DIR="$withval" else if test $on_mingw = no; then UNBOUND_RUN_DIR=`dirname "$ub_conf_file"` else UNBOUND_RUN_DIR="" fi fi hdr_run="`echo $UNBOUND_RUN_DIR | sed -e 's/\\\\/\\\\\\\\/g'`" cat >>confdefs.h <<_ACEOF #define RUN_DIR "$hdr_run" _ACEOF # Check whether --with-chroot-dir was given. if test "${with_chroot_dir+set}" = set; then : withval=$with_chroot_dir; UNBOUND_CHROOT_DIR="$withval" else if test $on_mingw = no; then UNBOUND_CHROOT_DIR="$UNBOUND_RUN_DIR" else UNBOUND_CHROOT_DIR="" fi fi hdr_chroot="`echo $UNBOUND_CHROOT_DIR | sed -e 's/\\\\/\\\\\\\\/g'`" cat >>confdefs.h <<_ACEOF #define CHROOT_DIR "$hdr_chroot" _ACEOF # Check whether --with-share-dir was given. if test "${with_share_dir+set}" = set; then : withval=$with_share_dir; UNBOUND_SHARE_DIR="$withval" else UNBOUND_SHARE_DIR="$UNBOUND_RUN_DIR" fi cat >>confdefs.h <<_ACEOF #define SHARE_DIR "$UNBOUND_SHARE_DIR" _ACEOF # Check whether --with-pidfile was given. if test "${with_pidfile+set}" = set; then : withval=$with_pidfile; UNBOUND_PIDFILE="$withval" else if test $on_mingw = no; then UNBOUND_PIDFILE="$UNBOUND_RUN_DIR/unbound.pid" else UNBOUND_PIDFILE="" fi fi hdr_pid="`echo $UNBOUND_PIDFILE | sed -e 's/\\\\/\\\\\\\\/g'`" cat >>confdefs.h <<_ACEOF #define PIDFILE "$hdr_pid" _ACEOF # Check whether --with-rootkey-file was given. if test "${with_rootkey_file+set}" = set; then : withval=$with_rootkey_file; UNBOUND_ROOTKEY_FILE="$withval" else if test $on_mingw = no; then UNBOUND_ROOTKEY_FILE="$UNBOUND_RUN_DIR/root.key" else UNBOUND_ROOTKEY_FILE="C:\\Program Files\\Unbound\\root.key" fi fi hdr_rkey="`echo $UNBOUND_ROOTKEY_FILE | sed -e 's/\\\\/\\\\\\\\/g'`" cat >>confdefs.h <<_ACEOF #define ROOT_ANCHOR_FILE "$hdr_rkey" _ACEOF # Check whether --with-rootcert-file was given. if test "${with_rootcert_file+set}" = set; then : withval=$with_rootcert_file; UNBOUND_ROOTCERT_FILE="$withval" else if test $on_mingw = no; then UNBOUND_ROOTCERT_FILE="$UNBOUND_RUN_DIR/icannbundle.pem" else UNBOUND_ROOTCERT_FILE="C:\\Program Files\\Unbound\\icannbundle.pem" fi fi hdr_rpem="`echo $UNBOUND_ROOTCERT_FILE | sed -e 's/\\\\/\\\\\\\\/g'`" cat >>confdefs.h <<_ACEOF #define ROOT_CERT_FILE "$hdr_rpem" _ACEOF # Check whether --with-username was given. if test "${with_username+set}" = set; then : withval=$with_username; UNBOUND_USERNAME="$withval" else UNBOUND_USERNAME="unbound" fi cat >>confdefs.h <<_ACEOF #define UB_USERNAME "$UNBOUND_USERNAME" _ACEOF $as_echo "#define WINVER 0x0502" >>confdefs.h wnvs=`echo $PACKAGE_VERSION | sed -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\).*$/\1,\2,\3,\4/' -e 's/^[^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9][^0-9]*\([0-9][0-9]*\)[^0-9]*$/\1,\2,\3,0/' ` cat >>confdefs.h <<_ACEOF #define RSRC_PACKAGE_VERSION $wnvs _ACEOF # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # allow user to override the -g -O2 flags. default_cflags=no if test "x$CFLAGS" = "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -g" >&5 $as_echo_n "checking whether $CC supports -g... " >&6; } cache=`echo g | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -g -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -g" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -O2" >&5 $as_echo_n "checking whether $CC supports -O2... " >&6; } cache=`echo O2 | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -O2 -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -O2" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi default_cflags=yes fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking $CC dependency flag" >&5 $as_echo_n "checking $CC dependency flag... " >&6; } echo 'void f(){}' >conftest.c if test "`$CC -MM conftest.c 2>&1`" = "conftest.o: conftest.c"; then DEPFLAG="-MM" else if test "`$CC -xM1 conftest.c 2>&1`" = "conftest.o: conftest.c"; then DEPFLAG="-xM1" else DEPFLAG="-MM" # dunno do something fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEPFLAG" >&5 $as_echo "$DEPFLAG" >&6; } rm -f conftest.c { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Werror" >&5 $as_echo_n "checking whether $CC supports -Werror... " >&6; } cache=`echo Werror | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Werror -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : ERRFLAG="-Werror" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : ERRFLAG="-errwarn" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wall" >&5 $as_echo_n "checking whether $CC supports -Wall... " >&6; } cache=`echo Wall | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : ERRFLAG="$ERRFLAG -Wall" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : ERRFLAG="$ERRFLAG -errfmt" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -std=c99" >&5 $as_echo_n "checking whether $CC supports -std=c99... " >&6; } cache=`echo std=c99 | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -std=c99 -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : C99FLAG="-std=c99" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -xc99" >&5 $as_echo_n "checking whether $CC supports -xc99... " >&6; } cache=`echo xc99 | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -xc99 -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : C99FLAG="-xc99" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi for ac_header in getopt.h time.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC" >&5 $as_echo_n "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE as a flag for $CC... " >&6; } cache=`$as_echo "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" | $as_tr_sh` if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include "confdefs.h" #include #include #include #ifdef HAVE_TIME_H #include #endif #include #include #ifdef HAVE_GETOPT_H #include #endif int test() { int a; char **opts = NULL; struct timeval tv; char *t; time_t time = 0; char *buf = NULL; const char* str = NULL; struct msghdr msg; msg.msg_control = 0; t = ctime_r(&time, buf); tv.tv_usec = 10; srandom(32); a = getopt(2, opts, "a"); a = isascii(32); str = gai_strerror(0); if(str && t && tv.tv_usec && msg.msg_control) a = 0; return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC" >&5 $as_echo_n "checking whether we need $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE as a flag for $CC... " >&6; } cache=`$as_echo "$C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE" | $as_tr_sh` if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include "confdefs.h" #include #include #include #ifdef HAVE_TIME_H #include #endif #include #include #ifdef HAVE_GETOPT_H #include #endif int test() { int a; char **opts = NULL; struct timeval tv; char *t; time_t time = 0; char *buf = NULL; const char* str = NULL; struct msghdr msg; msg.msg_control = 0; t = ctime_r(&time, buf); tv.tv_usec = 10; srandom(32); a = getopt(2, opts, "a"); a = isascii(32); str = gai_strerror(0); if(str && t && tv.tv_usec && msg.msg_control) a = 0; return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $C99FLAG -D__EXTENSIONS__ -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_ALL_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need $C99FLAG as a flag for $CC" >&5 $as_echo_n "checking whether we need $C99FLAG as a flag for $CC... " >&6; } cache=`$as_echo "$C99FLAG" | $as_tr_sh` if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include #include int test() { int a = 0; return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS $C99FLAG" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS $C99FLAG $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_BSD_SOURCE -D_DEFAULT_SOURCE as a flag for $CC" >&5 $as_echo_n "checking whether we need -D_BSD_SOURCE -D_DEFAULT_SOURCE as a flag for $CC... " >&6; } cache=_D_BSD_SOURCE__D_DEFAULT_SOURCE if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include int test() { int a; a = isascii(32); return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_BSD_SOURCE -D_DEFAULT_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_GNU_SOURCE as a flag for $CC" >&5 $as_echo_n "checking whether we need -D_GNU_SOURCE as a flag for $CC... " >&6; } cache=_D_GNU_SOURCE if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include int test() { struct in6_pktinfo inf; int a = (int)sizeof(inf); return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -D_GNU_SOURCE" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi # check again for GNU_SOURCE for setresgid. May fail if setresgid # is not available at all. -D_FRSRESGID is to make this check unique. # otherwise we would get the previous cached result. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_GNU_SOURCE -D_FRSRESGID as a flag for $CC" >&5 $as_echo_n "checking whether we need -D_GNU_SOURCE -D_FRSRESGID as a flag for $CC... " >&6; } cache=_D_GNU_SOURCE__D_FRSRESGID if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include int test() { int a = setresgid(0,0,0); a = setresuid(0,0,0); return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -D_GNU_SOURCE" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_GNU_SOURCE -D_FRSRESGID $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_POSIX_C_SOURCE=200112 as a flag for $CC" >&5 $as_echo_n "checking whether we need -D_POSIX_C_SOURCE=200112 as a flag for $CC... " >&6; } cache=_D_POSIX_C_SOURCE_200112 if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include "confdefs.h" #ifdef HAVE_TIME_H #include #endif #include int test() { int a = 0; char *t; time_t time = 0; char *buf = NULL; const char* str = NULL; t = ctime_r(&time, buf); str = gai_strerror(0); if(t && str) a = 0; return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_POSIX_C_SOURCE=200112 $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D__EXTENSIONS__ as a flag for $CC" >&5 $as_echo_n "checking whether we need -D__EXTENSIONS__ as a flag for $CC... " >&6; } cache=_D__EXTENSIONS__ if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include "confdefs.h" #include #include #include #ifdef HAVE_TIME_H #include #endif #include #ifdef HAVE_GETOPT_H #include #endif int test() { int a; char **opts = NULL; struct timeval tv; tv.tv_usec = 10; srandom(32); a = getopt(2, opts, "a"); a = isascii(32); if(tv.tv_usec) a = 0; return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -D__EXTENSIONS__" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D__EXTENSIONS__ $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi # debug mode flags warnings # Check whether --enable-checking was given. if test "${enable_checking+set}" = set; then : enableval=$enable_checking; fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; fi if test "$enable_debug" = "yes"; then debug_enabled="$enable_debug"; else debug_enabled="$enable_checking"; fi case "$debug_enabled" in yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -W" >&5 $as_echo_n "checking whether $CC supports -W... " >&6; } cache=`echo W | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -W -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -W" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wall" >&5 $as_echo_n "checking whether $CC supports -Wall... " >&6; } cache=`echo Wall | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wall -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -Wall" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wextra" >&5 $as_echo_n "checking whether $CC supports -Wextra... " >&6; } cache=`echo Wextra | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wextra -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -Wextra" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wdeclaration-after-statement" >&5 $as_echo_n "checking whether $CC supports -Wdeclaration-after-statement... " >&6; } cache=`echo Wdeclaration-after-statement | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -Wdeclaration-after-statement -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -Wdeclaration-after-statement" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi $as_echo "#define UNBOUND_DEBUG /**/" >>confdefs.h ;; no|*) # nothing to do. ;; esac if test "$default_cflags" = "yes"; then # only when CFLAGS was "" at the start, if the users wants to # override we shouldn't add default cflags, because they wouldn't # be able to turn off these options and set the CFLAGS wanted. # Check whether --enable-flto was given. if test "${enable_flto+set}" = set; then : enableval=$enable_flto; fi if test "x$enable_flto" != "xno"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -flto" >&5 $as_echo_n "checking if $CC supports -flto... " >&6; } BAKCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -flto" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if $CC $CFLAGS -o conftest conftest.c 2>&1 | $GREP -e "warning: no debug symbols in executable" -e "warning: object" >/dev/null; then CFLAGS="$BAKCFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi rm -f conftest conftest.c conftest.o else CFLAGS="$BAKCFLAGS" ; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Check whether --enable-pie was given. if test "${enable_pie+set}" = set; then : enableval=$enable_pie; fi if test "x$enable_pie" = "xyes"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports PIE" >&5 $as_echo_n "checking if $CC supports PIE... " >&6; } BAKLDFLAGS="$LDFLAGS" BAKCFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS -pie" CFLAGS="$CFLAGS -fPIE" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then LDFLAGS="$BAKLDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi rm -f conftest conftest.c conftest.o else LDFLAGS="$BAKLDFLAGS" ; CFLAGS="$BAKCFLAGS" ; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # Check whether --enable-relro_now was given. if test "${enable_relro_now+set}" = set; then : enableval=$enable_relro_now; fi if test "x$enable_relro_now" = "xyes"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wl,-z,relro,-z,now" >&5 $as_echo_n "checking if $CC supports -Wl,-z,relro,-z,now... " >&6; } BAKLDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,-z,relro,-z,now" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if $CC $CFLAGS $LDFLAGS -o conftest conftest.c 2>&1 | grep "warning: no debug symbols in executable" >/dev/null; then LDFLAGS="$BAKLDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi rm -f conftest conftest.c conftest.o else LDFLAGS="$BAKLDFLAGS" ; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"format\" attribute" >&5 $as_echo_n "checking whether the C compiler (${CC-cc}) accepts the \"format\" attribute... " >&6; } if ${ac_cv_c_format_attribute+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_format_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include void f (char *format, ...) __attribute__ ((format (printf, 1, 2))); void (*pf) (char *format, ...) __attribute__ ((format (printf, 1, 2))); int main () { f ("%s", "str"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_format_attribute="yes" else ac_cv_c_format_attribute="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_format_attribute" >&5 $as_echo "$ac_cv_c_format_attribute" >&6; } if test $ac_cv_c_format_attribute = yes; then $as_echo "#define HAVE_ATTR_FORMAT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"unused\" attribute" >&5 $as_echo_n "checking whether the C compiler (${CC-cc}) accepts the \"unused\" attribute... " >&6; } if ${ac_cv_c_unused_attribute+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_unused_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include void f (char *u __attribute__((unused))); int main () { f ("x"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_unused_attribute="yes" else ac_cv_c_unused_attribute="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_unused_attribute" >&5 $as_echo "$ac_cv_c_unused_attribute" >&6; } if test $ac_cv_c_unused_attribute = yes; then $as_echo "#define HAVE_ATTR_UNUSED 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"weak\" attribute" >&5 $as_echo_n "checking whether the C compiler (${CC-cc}) accepts the \"weak\" attribute... " >&6; } if ${ac_cv_c_weak_attribute+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_weak_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include __attribute__((weak)) void f(int x) { printf("%d", x); } int main () { f(1); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_weak_attribute="yes" else ac_cv_c_weak_attribute="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_weak_attribute" >&5 $as_echo "$ac_cv_c_weak_attribute" >&6; } if test $ac_cv_c_weak_attribute = yes; then $as_echo "#define HAVE_ATTR_WEAK 1" >>confdefs.h $as_echo "#define ATTR_WEAK __attribute__((weak))" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler (${CC-cc}) accepts the \"noreturn\" attribute" >&5 $as_echo_n "checking whether the C compiler (${CC-cc}) accepts the \"noreturn\" attribute... " >&6; } if ${ac_cv_c_noreturn_attribute+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_noreturn_attribute=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include __attribute__((noreturn)) void f(int x) { printf("%d", x); } int main () { f(1); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_noreturn_attribute="yes" else ac_cv_c_noreturn_attribute="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_noreturn_attribute" >&5 $as_echo "$ac_cv_c_noreturn_attribute" >&6; } if test $ac_cv_c_noreturn_attribute = yes; then $as_echo "#define HAVE_ATTR_NORETURN 1" >>confdefs.h $as_echo "#define ATTR_NORETURN __attribute__((__noreturn__))" >>confdefs.h fi if test "$srcdir" != "."; then CPPFLAGS="$CPPFLAGS -I$srcdir" fi for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" != "" -a "$LEX" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yylex_destroy" >&5 $as_echo_n "checking for yylex_destroy... " >&6; } if echo %% | $LEX -t 2>&1 | grep yylex_destroy >/dev/null 2>&1; then $as_echo "#define LEX_HAS_YYLEX_DESTROY 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; }; LEX=":" fi fi if test "$LEX" != "" -a "$LEX" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lex %option" >&5 $as_echo_n "checking for lex %option... " >&6; } if cat <&1 | grep yy_delete_buffer >/dev/null 2>&1; then %option nounput %% EOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; }; LEX=":" fi fi for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_doxygen+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$doxygen"; then ac_cv_prog_doxygen="$doxygen" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_doxygen="doxygen" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi doxygen=$ac_cv_prog_doxygen if test -n "$doxygen"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $doxygen" >&5 $as_echo "$doxygen" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # skip these tests, we do not need them. # always use ./libtool unless override from commandline (libtool=mylibtool) if test -z "$libtool"; then libtool="./libtool" fi # avoid libtool max commandline length test on systems that fork slowly. if echo "$host_os" | grep "sunos4" >/dev/null; then lt_cv_sys_max_cmd_len=32750; fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AR+:} false; then : $as_echo_n "(cached) " >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_AR"; then ac_pt_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_AR+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_AR in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_AR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_AR=$ac_cv_path_ac_pt_AR if test -n "$ac_pt_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_AR" >&5 $as_echo "$ac_pt_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_pt_AR fi else AR="$ac_cv_path_AR" fi if test $AR = false; then as_fn_error $? "Cannot find 'ar', please extend PATH to include it" "$LINENO" 5 fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Checks for header files. for ac_header in stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # net/if.h portability for Darwin see: # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html for ac_header in net/if.h do : ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" " #include #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_SYS_SOCKET_H # include #endif " if test "x$ac_cv_header_net_if_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NET_IF_H 1 _ACEOF fi done # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH for ac_header in TargetConditionals.h do : ac_fn_c_check_header_mongrel "$LINENO" "TargetConditionals.h" "ac_cv_header_TargetConditionals_h" "$ac_includes_default" if test "x$ac_cv_header_TargetConditionals_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TARGETCONDITIONALS_H 1 _ACEOF fi done # check for types. # Using own tests for int64* because autoconf builtin only give 32bit. ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" if test "x$ac_cv_type_int8_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define int8_t signed char _ACEOF fi ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" if test "x$ac_cv_type_int16_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define int16_t short _ACEOF fi ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" if test "x$ac_cv_type_int32_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define int32_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default" if test "x$ac_cv_type_int64_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define int64_t long long _ACEOF fi ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" if test "x$ac_cv_type_uint8_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define uint8_t unsigned char _ACEOF fi ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" if test "x$ac_cv_type_uint16_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define uint16_t unsigned short _ACEOF fi ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" if test "x$ac_cv_type_uint32_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define uint32_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default" if test "x$ac_cv_type_uint64_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define uint64_t unsigned long long _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 $as_echo_n "checking for uid_t in sys/types.h... " >&6; } if ${ac_cv_type_uid_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 $as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then $as_echo "#define uid_t int" >>confdefs.h $as_echo "#define gid_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "u_char" "ac_cv_type_u_char" " $ac_includes_default #ifdef HAVE_WINSOCK2_H # include #endif " if test "x$ac_cv_type_u_char" = xyes; then : else $as_echo "#define u_char unsigned char" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "rlim_t" "ac_cv_type_rlim_t" " $ac_includes_default #ifdef HAVE_SYS_RESOURCE_H # include #endif " if test "x$ac_cv_type_rlim_t" = xyes; then : else $as_echo "#define rlim_t unsigned long" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " $ac_includes_default #ifdef HAVE_SYS_SOCKET_H # include #endif #ifdef HAVE_WS2TCPIP_H # include #endif " if test "x$ac_cv_type_socklen_t" = xyes; then : else $as_echo "#define socklen_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" " $ac_includes_default #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_NETINET_IN_H # include #endif " if test "x$ac_cv_type_in_addr_t" = xyes; then : else $as_echo "#define in_addr_t uint32_t" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "in_port_t" "ac_cv_type_in_port_t" " $ac_includes_default #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_NETINET_IN_H # include #endif " if test "x$ac_cv_type_in_port_t" = xyes; then : else $as_echo "#define in_port_t uint16_t" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memcmp compares unsigned" >&5 $as_echo_n "checking if memcmp compares unsigned... " >&6; } if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compile no" >&5 $as_echo "cross-compile no" >&6; } $as_echo "#define MEMCMP_IS_BROKEN 1" >>confdefs.h case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main(void) { char a = 255, b = 0; if(memcmp(&a, &b, 1) < 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define MEMCMP_IS_BROKEN 1" >>confdefs.h case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 $as_echo_n "checking size of time_t... " >&6; } if ${ac_cv_sizeof_time_t+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" " $ac_includes_default #ifdef TIME_WITH_SYS_TIME # include # include #else # ifdef HAVE_SYS_TIME_H # include # else # include # endif #endif "; then : else if test "$ac_cv_type_time_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_time_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 $as_echo "$ac_cv_sizeof_time_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_TIME_T $ac_cv_sizeof_time_t _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 $as_echo_n "checking size of size_t... " >&6; } if ${ac_cv_sizeof_size_t+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : else if test "$ac_cv_type_size_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_size_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 $as_echo "$ac_cv_sizeof_size_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SIZE_T $ac_cv_sizeof_size_t _ACEOF # add option to disable the evil rpath # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; enable_rpath=$enableval else enable_rpath=yes fi if test "x$enable_rpath" = xno; then ac_config_commands="$ac_config_commands disable-rpath" fi # check to see if libraries are needed for these functions. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_pton" >&5 $as_echo_n "checking for library containing inet_pton... " >&6; } if ${ac_cv_search_inet_pton+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inet_pton (); int main () { return inet_pton (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_inet_pton=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_inet_pton+:} false; then : break fi done if ${ac_cv_search_inet_pton+:} false; then : else ac_cv_search_inet_pton=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_pton" >&5 $as_echo "$ac_cv_search_inet_pton" >&6; } ac_res=$ac_cv_search_inet_pton if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 $as_echo_n "checking for library containing socket... " >&6; } if ${ac_cv_search_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char socket (); int main () { return socket (); ; return 0; } _ACEOF for ac_lib in '' socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_socket=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_socket+:} false; then : break fi done if ${ac_cv_search_socket+:} false; then : else ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 $as_echo "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # check wether strptime also works # check some functions of the OS before linking libs (while still runnable). for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5 $as_echo_n "checking for working chown... " >&6; } if ${ac_cv_func_chown_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_chown_works=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include int main () { char *f = "conftest.chown"; struct stat before, after; if (creat (f, 0600) < 0) return 1; if (stat (f, &before) < 0) return 1; if (chown (f, (uid_t) -1, (gid_t) -1) == -1) return 1; if (stat (f, &after) < 0) return 1; return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_chown_works=yes else ac_cv_func_chown_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.chown fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 $as_echo "$ac_cv_func_chown_works" >&6; } if test $ac_cv_func_chown_works = yes; then $as_echo "#define HAVE_CHOWN 1" >>confdefs.h fi for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi $as_echo "#define RETSIGTYPE void" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_LARGEFILE_SOURCE=1 as a flag for $CC" >&5 $as_echo_n "checking whether we need -D_LARGEFILE_SOURCE=1 as a flag for $CC... " >&6; } cache=_D_LARGEFILE_SOURCE_1 if eval \${cv_prog_cc_flag_needed_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include int test() { int a = fseeko(stdin, 0, 0); return a; } ' > conftest.c echo 'void f(){}' >>conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=no" else if test -z "`$CC $CPPFLAGS $CFLAGS -D_LARGEFILE_SOURCE=1 $ERRFLAG -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_needed_$cache=yes" else eval "cv_prog_cc_flag_needed_$cache=fail" #echo 'Test with flag fails too!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_LARGEFILE_SOURCE=1 $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_LARGEFILE_SOURCE=1 $ERRFLAG -c conftest.c 2>&1` #exit 1 fi fi rm -f conftest conftest.c conftest.o fi if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE=1" else if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #echo 'Test with flag is no!' #cat conftest.c #echo "$CC $CPPFLAGS $CFLAGS -D_LARGEFILE_SOURCE=1 $ERRFLAG -c conftest.c 2>&1" #echo `$CC $CPPFLAGS $CFLAGS -D_LARGEFILE_SOURCE=1 $ERRFLAG -c conftest.c 2>&1` #exit 1 : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } : fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if nonblocking sockets work" >&5 $as_echo_n "checking if nonblocking sockets work... " >&6; } if echo $target | grep mingw32 >/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (windows)" >&5 $as_echo "no (windows)" >&6; } $as_echo "#define NONBLOCKING_IS_BROKEN 1" >>confdefs.h else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: crosscompile(yes)" >&5 $as_echo "crosscompile(yes)" >&6; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_TIME_H #include #endif int main(void) { int port; int sfd, cfd; int num = 10; int i, p; struct sockaddr_in a; /* test if select and nonblocking reads work well together */ /* open port. fork child to send 10 messages. select to read. then try to nonblocking read the 10 messages then, nonblocking read must give EAGAIN */ port = 12345 + (time(0)%32); sfd = socket(PF_INET, SOCK_DGRAM, 0); if(sfd == -1) { perror("socket"); return 1; } memset(&a, 0, sizeof(a)); a.sin_family = AF_INET; a.sin_port = htons(port); a.sin_addr.s_addr = inet_addr("127.0.0.1"); if(bind(sfd, (struct sockaddr*)&a, sizeof(a)) < 0) { perror("bind"); return 1; } if(fcntl(sfd, F_SETFL, O_NONBLOCK) == -1) { perror("fcntl"); return 1; } cfd = socket(PF_INET, SOCK_DGRAM, 0); if(cfd == -1) { perror("client socket"); return 1; } a.sin_port = 0; if(bind(cfd, (struct sockaddr*)&a, sizeof(a)) < 0) { perror("client bind"); return 1; } a.sin_port = htons(port); /* no handler, causes exit in 10 seconds */ alarm(10); /* send and receive on the socket */ if((p=fork()) == 0) { for(i=0; i&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NONBLOCKING_IS_BROKEN 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkdir has one arg" >&5 $as_echo_n "checking whether mkdir has one arg... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif int main () { (void)mkdir("directory"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define MKDIR_HAS_ONE_ARG 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext for ac_func in strptime do : ac_fn_c_check_func "$LINENO" "strptime" "ac_cv_func_strptime" if test "x$ac_cv_func_strptime" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRPTIME 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strptime works" >&5 $as_echo_n "checking whether strptime works... " >&6; } if test c${cross_compiling} = cno; then if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 600 #include int main(void) { struct tm tm; char *res; res = strptime("2010-07-15T00:00:00+00:00", "%t%Y%t-%t%m%t-%t%d%tT%t%H%t:%t%M%t:%t%S%t", &tm); if (!res) return 2; res = strptime("20070207111842", "%Y%m%d%H%M%S", &tm); if (!res) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : eval "ac_cv_c_strptime_works=yes" else eval "ac_cv_c_strptime_works=no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else eval "ac_cv_c_strptime_works=maybe" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_strptime_works" >&5 $as_echo "$ac_cv_c_strptime_works" >&6; } if test $ac_cv_c_strptime_works = no; then case " $LIBOBJS " in *" strptime.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strptime.$ac_objext" ;; esac else cat >>confdefs.h <<_ACEOF #define STRPTIME_WORKS 1 _ACEOF fi else case " $LIBOBJS " in *" strptime.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strptime.$ac_objext" ;; esac fi done # check if we can use SO_REUSEPORT if echo "$host" | $GREP -i -e linux -e dragonfly >/dev/null; then $as_echo "#define REUSEPORT_DEFAULT 1" >>confdefs.h else $as_echo "#define REUSEPORT_DEFAULT 0" >>confdefs.h fi # Include systemd.m4 - begin # macros for configuring systemd # Copyright 2015, Sami Kerola, CloudFlare. # BSD licensed. # Check whether --enable-systemd was given. if test "${enable_systemd+set}" = set; then : enableval=$enable_systemd; else enable_systemd=no fi have_systemd=no if test "x$enable_systemd" != xno; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD" >&5 $as_echo_n "checking for SYSTEMD... " >&6; } if test -n "$SYSTEMD_CFLAGS"; then pkg_cv_SYSTEMD_CFLAGS="$SYSTEMD_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5 ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SYSTEMD_CFLAGS=`$PKG_CONFIG --cflags "libsystemd" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SYSTEMD_LIBS"; then pkg_cv_SYSTEMD_LIBS="$SYSTEMD_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5 ($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SYSTEMD_LIBS=`$PKG_CONFIG --libs "libsystemd" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd" 2>&1` else SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SYSTEMD_PKG_ERRORS" >&5 have_systemd=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_systemd=no else SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_systemd=yes fi if test "x$have_systemd" != "xyes"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD_DAEMON" >&5 $as_echo_n "checking for SYSTEMD_DAEMON... " >&6; } if test -n "$SYSTEMD_DAEMON_CFLAGS"; then pkg_cv_SYSTEMD_DAEMON_CFLAGS="$SYSTEMD_DAEMON_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-daemon\""; } >&5 ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SYSTEMD_DAEMON_CFLAGS=`$PKG_CONFIG --cflags "libsystemd-daemon" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SYSTEMD_DAEMON_LIBS"; then pkg_cv_SYSTEMD_DAEMON_LIBS="$SYSTEMD_DAEMON_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd-daemon\""; } >&5 ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SYSTEMD_DAEMON_LIBS=`$PKG_CONFIG --libs "libsystemd-daemon" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SYSTEMD_DAEMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd-daemon" 2>&1` else SYSTEMD_DAEMON_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd-daemon" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SYSTEMD_DAEMON_PKG_ERRORS" >&5 have_systemd_daemon=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_systemd_daemon=no else SYSTEMD_DAEMON_CFLAGS=$pkg_cv_SYSTEMD_DAEMON_CFLAGS SYSTEMD_DAEMON_LIBS=$pkg_cv_SYSTEMD_DAEMON_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_systemd_daemon=yes fi if test "x$have_systemd_daemon" = "xyes"; then : have_systemd=yes fi fi case $enable_systemd:$have_systemd in #( yes:no) : as_fn_error $? "systemd enabled but libsystemd not found" "$LINENO" 5 ;; #( *:yes) : $as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h LIBS="$LIBS $SYSTEMD_LIBS" ;; #( *) : ;; esac fi if test "x$have_systemd" = xyes; then USE_SYSTEMD_TRUE= USE_SYSTEMD_FALSE='#' else USE_SYSTEMD_TRUE='#' USE_SYSTEMD_FALSE= fi # Include systemd.m4 - end # set memory allocation checking if requested # Check whether --enable-alloc-checks was given. if test "${enable_alloc_checks+set}" = set; then : enableval=$enable_alloc_checks; fi # Check whether --enable-alloc-lite was given. if test "${enable_alloc_lite+set}" = set; then : enableval=$enable_alloc_lite; fi # Check whether --enable-alloc-nonregional was given. if test "${enable_alloc_nonregional+set}" = set; then : enableval=$enable_alloc_nonregional; fi if test x_$enable_alloc_nonregional = x_yes; then $as_echo "#define UNBOUND_ALLOC_NONREGIONAL 1" >>confdefs.h fi if test x_$enable_alloc_checks = x_yes; then $as_echo "#define UNBOUND_ALLOC_STATS 1" >>confdefs.h SLDNS_ALLOCCHECK_EXTRA_OBJ="alloc.lo log.lo" ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ="alloc.lo" else if test x_$enable_alloc_lite = x_yes; then $as_echo "#define UNBOUND_ALLOC_LITE 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (crosscompile)" >&5 $as_echo "no (crosscompile)" >&6; } case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define malloc rpl_malloc_unbound _ACEOF else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H #include #else char *malloc (); #endif int main () { if(malloc(0) != 0) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define malloc rpl_malloc_unbound _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_MALLOC 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi # check windows threads (we use them, not pthreads, on windows). if test "$on_mingw" = "yes"; then # check windows threads for ac_header in windows.h do : ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default " if test "x$ac_cv_header_windows_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINDOWS_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CreateThread" >&5 $as_echo_n "checking for CreateThread... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_WINDOWS_H #include #endif int main () { HANDLE t = CreateThread(NULL, 0, NULL, NULL, 0, NULL); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_WINDOWS_THREADS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # not on mingw, check thread libraries. # check for thread library. # check this first, so that the pthread lib does not get linked in via # libssl or libpython, and thus distorts the tests, and we end up using # the non-threadsafe C libraries. # Check whether --with-pthreads was given. if test "${with_pthreads+set}" = set; then : withval=$with_pthreads; else withval="yes" fi ub_have_pthreads=no if test x_$withval != x_no; then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case ${host_os} in solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac # Clang doesn't consider unrecognized options an error unless we specify # -Werror. We throw in some extra Clang-specific options to ensure that # this doesn't happen for GCC, which also accepts -Werror. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5 $as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; } save_CFLAGS="$CFLAGS" ax_pthread_extra_flags="-Werror" CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void); int main () { foo() ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else ax_pthread_extra_flags= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ax_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 $as_echo "$ax_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void routine(void *a) { *((int*)a) = 0; } static void *start_routine(void *a) { return a; } int main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr = $attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case ${host_os} in aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; osf* | hpux*) flag="-D_REENTRANT";; solaris*) if test "$GCC" = "yes"; then flag="-D_REENTRANT" else # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5 $as_echo "$flag" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 $as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int i = PTHREAD_PRIO_INHERIT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes else ax_cv_PTHREAD_PRIO_INHERIT=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 $as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then : $as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: compile with *_r variant if test "x$GCC" != xyes; then case $host_os in aix*) case "x/$CC" in #( x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : if as_fn_executable_p ${CC}_r; then : PTHREAD_CC="${CC}_r" fi ;; #( *) : for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" ;; esac ;; #( *) : ;; esac ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h if test -n "$PTHREAD_LIBS"; then LIBS="$PTHREAD_LIBS $LIBS" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" ub_have_pthreads=yes ac_fn_c_check_type "$LINENO" "pthread_spinlock_t" "ac_cv_type_pthread_spinlock_t" "#include " if test "x$ac_cv_type_pthread_spinlock_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_SPINLOCK_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include " if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_RWLOCK_T 1 _ACEOF fi if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread unused during linking" >&5 $as_echo_n "checking if -pthread unused during linking... " >&6; } # catch clang warning 'argument unused during compilation' cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main(void) {return 0;} _ACEOF pthread_unused="yes" # first compile echo "$CC $CFLAGS -c conftest.c -o conftest.o" >&5 $CC $CFLAGS -c conftest.c -o conftest.o 2>&5 >&5 if test $? = 0; then # then link echo "$CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest contest.o" >&5 $CC $CFLAGS -Werror $LDFLAGS $LIBS -o conftest conftest.o 2>&5 >&5 if test $? -ne 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } CFLAGS=`echo "$CFLAGS" | sed -e 's/-pthread//'` PTHREAD_CFLAGS_ONLY="-pthread" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # endif cc successful rm -f conftest conftest.c conftest.o fi # endif -pthread in CFLAGS : else ax_pthread_ok=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi # check solaris thread library # Check whether --with-solaris-threads was given. if test "${with_solaris_threads+set}" = set; then : withval=$with_solaris_threads; else withval="no" fi ub_have_sol_threads=no if test x_$withval != x_no; then if test x_$ub_have_pthreads != x_no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Have pthreads already, ignoring --with-solaris-threads" >&5 $as_echo "$as_me: WARNING: Have pthreads already, ignoring --with-solaris-threads" >&2;} else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing thr_create" >&5 $as_echo_n "checking for library containing thr_create... " >&6; } if ${ac_cv_search_thr_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char thr_create (); int main () { return thr_create (); ; return 0; } _ACEOF for ac_lib in '' thread; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_thr_create=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_thr_create+:} false; then : break fi done if ${ac_cv_search_thr_create+:} false; then : else ac_cv_search_thr_create=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_thr_create" >&5 $as_echo "$ac_cv_search_thr_create" >&6; } ac_res=$ac_cv_search_thr_create if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_SOLARIS_THREADS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -mt" >&5 $as_echo_n "checking whether $CC supports -mt... " >&6; } cache=`echo mt | sed 'y%.=/+-%___p_%'` if eval \${cv_prog_cc_flag_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo 'void f(void){}' >conftest.c if test -z "`$CC $CPPFLAGS $CFLAGS -mt -c conftest.c 2>&1`"; then eval "cv_prog_cc_flag_$cache=yes" else eval "cv_prog_cc_flag_$cache=no" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : CFLAGS="$CFLAGS -mt" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : CFLAGS="$CFLAGS -D_REENTRANT" fi ub_have_sol_threads=yes else as_fn_error $? "no solaris threads found." "$LINENO" 5 fi fi fi fi # end of non-mingw check of thread libraries # Check for SYSLOG_FACILITY # Check whether --with-syslog-facility was given. if test "${with_syslog_facility+set}" = set; then : withval=$with_syslog_facility; UNBOUND_SYSLOG_FACILITY="$withval" fi case "${UNBOUND_SYSLOG_FACILITY}" in LOCAL[0-7]) UNBOUND_SYSLOG_FACILITY="LOG_${UNBOUND_SYSLOG_FACILITY}" ;; *) UNBOUND_SYSLOG_FACILITY="LOG_DAEMON" ;; esac cat >>confdefs.h <<_ACEOF #define UB_SYSLOG_FACILITY ${UNBOUND_SYSLOG_FACILITY} _ACEOF # Check for dynamic library module # Check whether --with-dynlibmodule was given. if test "${with_dynlibmodule+set}" = set; then : withval=$with_dynlibmodule; else withval="no" fi if test x_$withval != x_no; then $as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h WITH_DYNLIBMODULE=yes DYNLIBMOD_OBJ="dynlibmod.lo" DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h' if test $on_mingw = "no"; then # link with -ldl if not already there, for all executables because # dlopen call is in the dynlib module. For unbound executable, also # export symbols. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } if ${ac_cv_search_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' dl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dlopen+:} false; then : break fi done if ${ac_cv_search_dlopen+:} false; then : else ac_cv_search_dlopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 $as_echo "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi DYNLIBMOD_EXTRALIBS="-export-dynamic" else DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.dll.a" fi fi # Check for PyUnbound # Check whether --with-pyunbound was given. if test "${with_pyunbound+set}" = set; then : withval=$with_pyunbound; else withval="no" fi ub_test_python=no ub_with_pyunbound=no if test x_$withval != x_no; then ub_with_pyunbound=yes ub_test_python=yes fi # Check for Python module # Check whether --with-pythonmodule was given. if test "${with_pythonmodule+set}" = set; then : withval=$with_pythonmodule; else withval="no" fi ub_with_pythonmod=no if test x_$withval != x_no; then ub_with_pythonmod=yes ub_test_python=yes fi # Check for Python & SWIG only on PyUnbound or PyModule if test x_$ub_test_python != x_no; then # Check for Python ub_have_python=no ac_save_LIBS="$LIBS" # # Allow the use of a (user set) custom python version # # Extract the first word of "python[$PYTHON_VERSION]", so it can be a program name with args. set dummy python$PYTHON_VERSION; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$PYTHON"; then as_fn_error $? "Cannot find python$PYTHON_VERSION in your system path" "$LINENO" 5 PYTHON_VERSION="" fi if test -z "$PYTHON_VERSION"; then PYTHON_VERSION=`$PYTHON -c "import sys; \ print(sys.version.split()[0])"` fi # # Check if you have distutils, else fail # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 $as_echo_n "checking for the distutils Python package... " >&6; } if ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "cannot import Python module \"distutils\". Please check your Python installation. The error was: $ac_distutils_result" "$LINENO" 5 PYTHON_VERSION="" fi # # Check for Python include path # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 $as_echo_n "checking for Python include path... " >&6; } if test -z "$PYTHON_CPPFLAGS"; then python_path=`$PYTHON -c "import distutils.sysconfig; \ print(distutils.sysconfig.get_python_inc());"` if test -n "${python_path}"; then python_path="-I$python_path" fi PYTHON_CPPFLAGS=$python_path fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CPPFLAGS" >&5 $as_echo "$PYTHON_CPPFLAGS" >&6; } # # Check for Python library path # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python library path" >&5 $as_echo_n "checking for Python library path... " >&6; } if test -z "$PYTHON_LDFLAGS"; then PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \ print('-L'+get_config_var('LIBDIR')+' -L'+get_config_var('LIBDEST')+' '+get_config_var('BLDLIBRARY'));"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_LDFLAGS" >&5 $as_echo "$PYTHON_LDFLAGS" >&6; } if test -z "$PYTHON_LIBDIR"; then PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \ print(get_config_var('LIBDIR'));"` fi # # Check for site packages # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python site-packages path" >&5 $as_echo_n "checking for Python site-packages path... " >&6; } if test -z "$PYTHON_SITE_PKG"; then PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ print(distutils.sysconfig.get_python_lib(1,0));"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SITE_PKG" >&5 $as_echo "$PYTHON_SITE_PKG" >&6; } # # final check to see if everything compiles alright # { $as_echo "$as_me:${as_lineno-$LINENO}: checking consistency of all components of python development environment" >&5 $as_echo_n "checking consistency of all components of python development environment... " >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # save current global flags ac_save_LIBS="$LIBS" ac_save_CPPFLAGS="$CPPFLAGS" LIBS="$LIBS $PYTHON_LDFLAGS" CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { Py_Initialize(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : pythonexists=yes else pythonexists=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pythonexists" >&5 $as_echo "$pythonexists" >&6; } if test ! "$pythonexists" = "yes"; then as_fn_error $? " Could not link test program to Python. Maybe the main Python library has been installed in some non-standard library path. If so, pass it to configure, via the LDFLAGS environment variable. Example: ./configure LDFLAGS=\"-L/usr/non-standard-path/python/lib\" ============================================================================ ERROR! You probably have to install the development version of the Python package for your distribution. The exact name of this package varies among them. ============================================================================ " "$LINENO" 5 PYTHON_VERSION="" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # turn back to default flags CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" # # all done! # if test ! -z "$PYTHON_VERSION"; then if test `$PYTHON -c "print('$PYTHON_VERSION' >= '2.4.0')"` = "False"; then as_fn_error $? "Python version >= 2.4.0 is required" "$LINENO" 5 fi PY_MAJOR_VERSION="`$PYTHON -c \"import sys; print(sys.version_info[0])\"`" # Have Python $as_echo "#define HAVE_PYTHON 1" >>confdefs.h if test -n "$LIBS"; then LIBS="$PYTHON_LDFLAGS $LIBS" else LIBS="$PYTHON_LDFLAGS" fi if test -n "$CPPFLAGS"; then CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" else CPPFLAGS="$PYTHON_CPPFLAGS" fi if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then if test "x$enable_rpath" = xyes; then if echo "$PYTHON_LIBDIR" | grep "^/" >/dev/null; then RUNTIME_PATH="$RUNTIME_PATH -R$PYTHON_LIBDIR" fi fi fi ub_have_python=yes if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\"python\${PY_MAJOR_VERSION}\"\""; } >&5 ($PKG_CONFIG --exists --print-errors ""python${PY_MAJOR_VERSION}"") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then PC_PY_DEPENDENCY="python${PY_MAJOR_VERSION}" else PC_PY_DEPENDENCY="python" fi # Check for SWIG ub_have_swig=no # Check whether --enable-swig-version-check was given. if test "${enable_swig_version_check+set}" = set; then : enableval=$enable_swig_version_check; fi if test "$enable_swig_version_check" = "yes"; then # Extract the first word of "swig", so it can be a program name with args. set dummy swig; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SWIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SWIG in [\\/]* | ?:[\\/]*) ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SWIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SWIG=$ac_cv_path_SWIG if test -n "$SWIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5 $as_echo "$SWIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$SWIG" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&2;} SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false' elif test -n "2.0.1" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWIG version" >&5 $as_echo_n "checking for SWIG version... " >&6; } swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_version" >&5 $as_echo "$swig_version" >&6; } if test -n "$swig_version" ; then # Calculate the required version number components required=2.0.1 required_major=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_major" ; then required_major=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_minor=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_minor" ; then required_minor=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_patch=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_patch" ; then required_patch=0 fi # Calculate the available version number components available=$swig_version available_major=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_major" ; then available_major=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_minor=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_minor" ; then available_minor=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_patch=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_patch" ; then available_patch=0 fi badversion=0 if test $available_major -lt $required_major ; then badversion=1 fi if test $available_major -eq $required_major \ -a $available_minor -lt $required_minor ; then badversion=1 fi if test $available_major -eq $required_major \ -a $available_minor -eq $required_minor \ -a $available_patch -lt $required_patch ; then badversion=1 fi if test $badversion -eq 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= 2.0.1 is required. You have $swig_version. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: SWIG version >= 2.0.1 is required. You have $swig_version. You should look at http://www.swig.org" >&2;} SWIG='echo "Error: SWIG version >= 2.0.1 is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false' else { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG executable is '$SWIG'" >&5 $as_echo "$as_me: SWIG executable is '$SWIG'" >&6;} SWIG_LIB=`$SWIG -swiglib` { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG library directory is '$SWIG_LIB'" >&5 $as_echo "$as_me: SWIG library directory is '$SWIG_LIB'" >&6;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine SWIG version" >&5 $as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;} SWIG='echo "Error: Cannot determine SWIG version. You should look at http://www.swig.org" ; false' fi fi else # Extract the first word of "swig", so it can be a program name with args. set dummy swig; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SWIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SWIG in [\\/]* | ?:[\\/]*) ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SWIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SWIG=$ac_cv_path_SWIG if test -n "$SWIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5 $as_echo "$SWIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$SWIG" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&2;} SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false' elif test -n "" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWIG version" >&5 $as_echo_n "checking for SWIG version... " >&6; } swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_version" >&5 $as_echo "$swig_version" >&6; } if test -n "$swig_version" ; then # Calculate the required version number components required= required_major=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_major" ; then required_major=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_minor=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_minor" ; then required_minor=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_patch=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_patch" ; then required_patch=0 fi # Calculate the available version number components available=$swig_version available_major=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_major" ; then available_major=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_minor=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_minor" ; then available_minor=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_patch=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_patch" ; then available_patch=0 fi badversion=0 if test $available_major -lt $required_major ; then badversion=1 fi if test $available_major -eq $required_major \ -a $available_minor -lt $required_minor ; then badversion=1 fi if test $available_major -eq $required_major \ -a $available_minor -eq $required_minor \ -a $available_patch -lt $required_patch ; then badversion=1 fi if test $badversion -eq 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= is required. You have $swig_version. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: SWIG version >= is required. You have $swig_version. You should look at http://www.swig.org" >&2;} SWIG='echo "Error: SWIG version >= is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false' else { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG executable is '$SWIG'" >&5 $as_echo "$as_me: SWIG executable is '$SWIG'" >&6;} SWIG_LIB=`$SWIG -swiglib` { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG library directory is '$SWIG_LIB'" >&5 $as_echo "$as_me: SWIG library directory is '$SWIG_LIB'" >&6;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine SWIG version" >&5 $as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;} SWIG='echo "Error: Cannot determine SWIG version. You should look at http://www.swig.org" ; false' fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking SWIG" >&5 $as_echo_n "checking SWIG... " >&6; } if test ! -x "$SWIG"; then as_fn_error $? "failed to find swig tool, install it, or do not build Python module and PyUnbound" "$LINENO" 5 else $as_echo "#define HAVE_SWIG 1" >>confdefs.h swig="$SWIG" { $as_echo "$as_me:${as_lineno-$LINENO}: result: present" >&5 $as_echo "present" >&6; } # If have Python & SWIG # Declare PythonMod if test x_$ub_with_pythonmod != x_no; then $as_echo "#define WITH_PYTHONMODULE 1" >>confdefs.h WITH_PYTHONMODULE=yes PYTHONMOD_OBJ="pythonmod.lo pythonmod_utils.lo" PYTHONMOD_HEADER='$(srcdir)/pythonmod/pythonmod.h' PYTHONMOD_INSTALL=pythonmod-install PYTHONMOD_UNINSTALL=pythonmod-uninstall fi # Declare PyUnbound if test x_$ub_with_pyunbound != x_no; then $as_echo "#define WITH_PYUNBOUND 1" >>confdefs.h WITH_PYUNBOUND=yes PYUNBOUND_OBJ="libunbound_wrap.lo" PYUNBOUND_TARGET="_unbound.la" PYUNBOUND_INSTALL=pyunbound-install PYUNBOUND_UNINSTALL=pyunbound-uninstall fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: *** Python libraries not found, won't build PythonMod or PyUnbound ***" >&5 $as_echo "*** Python libraries not found, won't build PythonMod or PyUnbound ***" >&6; } ub_with_pyunbound=no ub_with_pythonmod=no fi fi if test "`uname`" = "NetBSD"; then NETBSD_LINTFLAGS='"-D__RENAME(x)=" -D_NETINET_IN_H_' fi CONFIG_DATE=`date +%Y%m%d` # Checks for libraries. # libnss USE_NSS="no" # Check whether --with-nss was given. if test "${with_nss+set}" = set; then : withval=$with_nss; USE_NSS="yes" $as_echo "#define HAVE_NSS 1" >>confdefs.h if test "$withval" != "" -a "$withval" != "yes"; then CPPFLAGS="$CPPFLAGS -I$withval/include/nss3" LDFLAGS="$LDFLAGS -L$withval/lib" if test "x$enable_rpath" = xyes; then if echo "$withval/lib" | grep "^/" >/dev/null; then RUNTIME_PATH="$RUNTIME_PATH -R$withval/lib" fi fi CPPFLAGS="-I$withval/include/nspr4 $CPPFLAGS" else CPPFLAGS="$CPPFLAGS -I/usr/include/nss3" CPPFLAGS="-I/usr/include/nspr4 $CPPFLAGS" fi LIBS="$LIBS -lnss3 -lnspr4" SSLLIB="" PC_CRYPTO_DEPENDENCY="nss nspr" fi # libnettle USE_NETTLE="no" # Check whether --with-nettle was given. if test "${with_nettle+set}" = set; then : withval=$with_nettle; USE_NETTLE="yes" $as_echo "#define HAVE_NETTLE 1" >>confdefs.h for ac_header in nettle/dsa-compat.h do : ac_fn_c_check_header_compile "$LINENO" "nettle/dsa-compat.h" "ac_cv_header_nettle_dsa_compat_h" "$ac_includes_default " if test "x$ac_cv_header_nettle_dsa_compat_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NETTLE_DSA_COMPAT_H 1 _ACEOF fi done if test "$withval" != "" -a "$withval" != "yes"; then CPPFLAGS="$CPPFLAGS -I$withval/include/nettle" LDFLAGS="$LDFLAGS -L$withval/lib" if test "x$enable_rpath" = xyes; then if echo "$withval/lib" | grep "^/" >/dev/null; then RUNTIME_PATH="$RUNTIME_PATH -R$withval/lib" fi fi else CPPFLAGS="$CPPFLAGS -I/usr/include/nettle" fi LIBS="$LIBS -lhogweed -lnettle -lgmp" SSLLIB="" PC_CRYPTO_DEPENDENCY="hogweed nettle" fi # openssl if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then # Check whether --with-ssl was given. if test "${with_ssl+set}" = set; then : withval=$with_ssl; else withval="yes" fi if test x_$withval = x_no; then as_fn_error $? "Need SSL library to do digital signature cryptography" "$LINENO" 5 fi withval=$withval if test x_$withval != x_no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL" >&5 $as_echo_n "checking for SSL... " >&6; } if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /opt/local /usr/sfw /usr" fi for dir in $withval; do ssldir="$dir" if test -f "$dir/include/openssl/ssl.h"; then found_ssl="yes" cat >>confdefs.h <<_ACEOF #define HAVE_SSL /**/ _ACEOF if test "$ssldir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$ssldir/include" LIBSSL_CPPFLAGS="$LIBSSL_CPPFLAGS -I$ssldir/include" fi break; fi done if test x_$found_ssl != x_yes; then as_fn_error $? "Cannot find the SSL libraries in $withval" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $ssldir" >&5 $as_echo "found in $ssldir" >&6; } HAVE_SSL=yes if test "$ssldir" != "/usr" -a "$ssldir" != ""; then LDFLAGS="$LDFLAGS -L$ssldir/lib" LIBSSL_LDFLAGS="$LIBSSL_LDFLAGS -L$ssldir/lib" if test "x$enable_rpath" = xyes; then if echo "$ssldir/lib" | grep "^/" >/dev/null; then RUNTIME_PATH="$RUNTIME_PATH -R$ssldir/lib" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_sha256 in -lcrypto" >&5 $as_echo_n "checking for EVP_sha256 in -lcrypto... " >&6; } LIBS="$LIBS -lcrypto" LIBSSL_LIBS="$LIBSSL_LIBS -lcrypto" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int EVP_sha256(void); (void)EVP_sha256(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } # check if -lwsock32 or -lgdi32 are needed. BAKLIBS="$LIBS" BAKSSLLIBS="$LIBSSL_LIBS" LIBS="$LIBS -lgdi32 -lws2_32" LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -lgdi32" >&5 $as_echo_n "checking if -lcrypto needs -lgdi32... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int EVP_sha256(void); (void)EVP_sha256(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } LIBS="$BAKLIBS" LIBSSL_LIBS="$BAKSSLLIBS" LIBS="$LIBS -ldl" LIBSSL_LIBS="$LIBSSL_LIBS -ldl" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl" >&5 $as_echo_n "checking if -lcrypto needs -ldl... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int EVP_sha256(void); (void)EVP_sha256(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } LIBS="$BAKLIBS" LIBSSL_LIBS="$BAKSSLLIBS" LIBS="$LIBS -ldl -pthread" LIBSSL_LIBS="$LIBSSL_LIBS -ldl -pthread" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -ldl -pthread" >&5 $as_echo_n "checking if -lcrypto needs -ldl -pthread... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int EVP_sha256(void); (void)EVP_sha256(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_EVP_SHA256 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "OpenSSL found in $ssldir, but version 0.9.7 or higher is required" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi fi for ac_header in openssl/ssl.h do : ac_fn_c_check_header_compile "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default " if test "x$ac_cv_header_openssl_ssl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENSSL_SSL_H 1 _ACEOF fi done for ac_header in openssl/err.h do : ac_fn_c_check_header_compile "$LINENO" "openssl/err.h" "ac_cv_header_openssl_err_h" "$ac_includes_default " if test "x$ac_cv_header_openssl_err_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENSSL_ERR_H 1 _ACEOF fi done for ac_header in openssl/rand.h do : ac_fn_c_check_header_compile "$LINENO" "openssl/rand.h" "ac_cv_header_openssl_rand_h" "$ac_includes_default " if test "x$ac_cv_header_openssl_rand_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENSSL_RAND_H 1 _ACEOF fi done # check if libssl needs libdl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libssl needs libdl" >&5 $as_echo_n "checking if libssl needs libdl... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char SSL_CTX_new (); int main () { return SSL_CTX_new (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } LIBS="$BAKLIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } LIBS="$BAKLIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } if ${ac_cv_search_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' dl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dlopen+:} false; then : break fi done if ${ac_cv_search_dlopen+:} false; then : else ac_cv_search_dlopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 $as_echo "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext SSLLIB="-lssl" PC_CRYPTO_DEPENDENCY="libcrypto libssl" # check if -lcrypt32 is needed because CAPIENG needs that. (on windows) BAKLIBS="$LIBS" LIBS="-lssl $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libssl needs -lcrypt32" >&5 $as_echo_n "checking if libssl needs -lcrypt32... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int EVP_sha256(void); (void)EVP_sha256(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } LIBS="$BAKLIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } LIBS="$BAKLIBS" LIBS="$LIBS -lcrypt32" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LibreSSL" >&5 $as_echo_n "checking for LibreSSL... " >&6; } if grep VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "LibreSSL" >/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBRESSL 1" >>confdefs.h # libressl provides these compat functions, but they may also be # declared by the OS in libc. See if they have been declared. ac_fn_c_check_decl "$LINENO" "strlcpy" "ac_cv_have_decl_strlcpy" "$ac_includes_default" if test "x$ac_cv_have_decl_strlcpy" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRLCPY $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "strlcat" "ac_cv_have_decl_strlcat" "$ac_includes_default" if test "x$ac_cv_have_decl_strlcat" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRLCAT $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "arc4random" "ac_cv_have_decl_arc4random" "$ac_includes_default" if test "x$ac_cv_have_decl_arc4random" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ARC4RANDOM $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "arc4random_uniform" "ac_cv_have_decl_arc4random_uniform" "$ac_includes_default" if test "x$ac_cv_have_decl_arc4random_uniform" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ARC4RANDOM_UNIFORM $ac_have_decl _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_header in openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # these check_funcs need -lssl BAKLIBS="$LIBS" LIBS="-lssl $LIBS" for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb SSL_CTX_set_alpn_select_cb do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done LIBS="$BAKLIBS" ac_fn_c_check_decl "$LINENO" "SSL_COMP_get_compression_methods" "ac_cv_have_decl_SSL_COMP_get_compression_methods" " $ac_includes_default #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #include #include " if test "x$ac_cv_have_decl_SSL_COMP_get_compression_methods" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "sk_SSL_COMP_pop_free" "ac_cv_have_decl_sk_SSL_COMP_pop_free" " $ac_includes_default #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #include #include " if test "x$ac_cv_have_decl_sk_SSL_COMP_pop_free" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SK_SSL_COMP_POP_FREE $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "SSL_CTX_set_ecdh_auto" "ac_cv_have_decl_SSL_CTX_set_ecdh_auto" " $ac_includes_default #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #include #include " if test "x$ac_cv_have_decl_SSL_CTX_set_ecdh_auto" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SSL_CTX_SET_ECDH_AUTO $ac_have_decl _ACEOF if test "$ac_cv_func_HMAC_Init_ex" = "yes"; then # check function return type. { $as_echo "$as_me:${as_lineno-$LINENO}: checking the return type of HMAC_Init_ex" >&5 $as_echo_n "checking the return type of HMAC_Init_ex... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #include #include int main () { HMAC_CTX* hmac_ctx = NULL; void* hmac_key = NULL; const EVP_MD* digest = NULL; int x = HMAC_Init_ex(hmac_ctx, hmac_key, 32, digest, NULL); (void)x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: int" >&5 $as_echo "int" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: void" >&5 $as_echo "void" >&6; } $as_echo "#define HMAC_INIT_EX_RETURNS_VOID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi # libbsd # Check whether --with-libbsd was given. if test "${with_libbsd+set}" = set; then : withval=$with_libbsd; for ac_header in bsd/string.h bsd/stdlib.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_header_bsd_string_h" = xyes -a "x$ac_cv_header_bsd_stdlib_h" = xyes; then for func in strlcpy strlcat arc4random arc4random_uniform reallocarray; do as_ac_Search=`$as_echo "ac_cv_search_$func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing $func" >&5 $as_echo_n "checking for library containing $func... " >&6; } if eval \${$as_ac_Search+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $func (); int main () { return $func (); ; return 0; } _ACEOF for ac_lib in '' bsd; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Search=\$ac_res" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if eval \${$as_ac_Search+:} false; then : break fi done if eval \${$as_ac_Search+:} false; then : else eval "$as_ac_Search=no" fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi eval ac_res=\$$as_ac_Search { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval ac_res=\$$as_ac_Search if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_LIBBSD 1" >>confdefs.h PC_LIBBSD_DEPENDENCY=libbsd fi done fi fi # Check whether --enable-sha1 was given. if test "${enable_sha1+set}" = set; then : enableval=$enable_sha1; fi case "$enable_sha1" in no) ;; yes|*) $as_echo "#define USE_SHA1 1" >>confdefs.h ;; esac # Check whether --enable-sha2 was given. if test "${enable_sha2+set}" = set; then : enableval=$enable_sha2; fi case "$enable_sha2" in no) ;; yes|*) $as_echo "#define USE_SHA2 1" >>confdefs.h ;; esac # Check whether --enable-subnet was given. if test "${enable_subnet+set}" = set; then : enableval=$enable_subnet; fi case "$enable_subnet" in yes) $as_echo "#define CLIENT_SUBNET 1" >>confdefs.h SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo" SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h' ;; no|*) ;; esac # check wether gost also works # Check whether --enable-gost was given. if test "${enable_gost+set}" = set; then : enableval=$enable_gost; fi use_gost="no" if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then case "$enable_gost" in no) ;; *) ac_fn_c_check_func "$LINENO" "EVP_PKEY_set_type_str" "ac_cv_func_EVP_PKEY_set_type_str" if test "x$ac_cv_func_EVP_PKEY_set_type_str" = xyes; then : : else as_fn_error $? "OpenSSL 1.0.0 is needed for GOST support" "$LINENO" 5 fi ac_fn_c_check_func "$LINENO" "EC_KEY_new" "ac_cv_func_EC_KEY_new" if test "x$ac_cv_func_EC_KEY_new" = xyes; then : else as_fn_error $? "OpenSSL does not support ECC, needed for GOST support" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GOST works" >&5 $as_echo_n "checking if GOST works... " >&6; } if test c${cross_compiling} = cno; then BAKCFLAGS="$CFLAGS" if test -n "$ssldir"; then CFLAGS="$CFLAGS -Wl,-rpath,$ssldir/lib" fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include /* routine to load gost (from sldns) */ int load_gost_id(void) { static int gost_id = 0; const EVP_PKEY_ASN1_METHOD* meth; ENGINE* e; if(gost_id) return gost_id; /* see if configuration loaded gost implementation from other engine*/ meth = EVP_PKEY_asn1_find_str(NULL, "gost2001", -1); if(meth) { EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); return gost_id; } /* see if engine can be loaded already */ e = ENGINE_by_id("gost"); if(!e) { /* load it ourself, in case statically linked */ ENGINE_load_builtin_engines(); ENGINE_load_dynamic(); e = ENGINE_by_id("gost"); } if(!e) { /* no gost engine in openssl */ return 0; } if(!ENGINE_set_default(e, ENGINE_METHOD_ALL)) { ENGINE_finish(e); ENGINE_free(e); return 0; } meth = EVP_PKEY_asn1_find_str(&e, "gost2001", -1); if(!meth) { /* algo not found */ ENGINE_finish(e); ENGINE_free(e); return 0; } EVP_PKEY_asn1_get0_info(&gost_id, NULL, NULL, NULL, NULL, meth); return gost_id; } int main(void) { EVP_MD_CTX* ctx; const EVP_MD* md; unsigned char digest[64]; /* its a 256-bit digest, so uses 32 bytes */ const char* str = "Hello world"; const unsigned char check[] = { 0x40 , 0xed , 0xf8 , 0x56 , 0x5a , 0xc5 , 0x36 , 0xe1 , 0x33 , 0x7c , 0x7e , 0x87 , 0x62 , 0x1c , 0x42 , 0xe0 , 0x17 , 0x1b , 0x5e , 0xce , 0xa8 , 0x46 , 0x65 , 0x4d , 0x8d , 0x3e , 0x22 , 0x9b , 0xe1 , 0x30 , 0x19 , 0x9d }; OPENSSL_config(NULL); (void)load_gost_id(); md = EVP_get_digestbyname("md_gost94"); if(!md) return 1; memset(digest, 0, sizeof(digest)); ctx = EVP_MD_CTX_create(); if(!ctx) return 2; if(!EVP_DigestInit_ex(ctx, md, NULL)) return 3; if(!EVP_DigestUpdate(ctx, str, 10)) return 4; if(!EVP_DigestFinal_ex(ctx, digest, NULL)) return 5; /* uncomment to see the hash calculated. {int i; for(i=0; i<32; i++) printf(" %2.2x", (int)digest[i]); printf("\n");} */ if(memcmp(digest, check, sizeof(check)) != 0) return 6; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : eval "ac_cv_c_gost_works=yes" else eval "ac_cv_c_gost_works=no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$BAKCFLAGS" else eval "ac_cv_c_gost_works=maybe" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_gost_works" >&5 $as_echo "$ac_cv_c_gost_works" >&6; } if test "$ac_cv_c_gost_works" != no; then use_gost="yes" $as_echo "#define USE_GOST 1" >>confdefs.h fi ;; esac fi # Check whether --enable-ecdsa was given. if test "${enable_ecdsa+set}" = set; then : enableval=$enable_ecdsa; fi use_ecdsa="no" case "$enable_ecdsa" in no) ;; *) if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then ac_fn_c_check_func "$LINENO" "ECDSA_sign" "ac_cv_func_ECDSA_sign" if test "x$ac_cv_func_ECDSA_sign" = xyes; then : else as_fn_error $? "OpenSSL does not support ECDSA: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 fi ac_fn_c_check_func "$LINENO" "SHA384_Init" "ac_cv_func_SHA384_Init" if test "x$ac_cv_func_SHA384_Init" = xyes; then : else as_fn_error $? "OpenSSL does not support SHA384: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 fi ac_fn_c_check_decl "$LINENO" "NID_X9_62_prime256v1" "ac_cv_have_decl_NID_X9_62_prime256v1" "$ac_includes_default #include " if test "x$ac_cv_have_decl_NID_X9_62_prime256v1" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_NID_X9_62_PRIME256V1 $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : else as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 fi ac_fn_c_check_decl "$LINENO" "NID_secp384r1" "ac_cv_have_decl_NID_secp384r1" "$ac_includes_default #include " if test "x$ac_cv_have_decl_NID_secp384r1" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_NID_SECP384R1 $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : else as_fn_error $? "OpenSSL does not support the ECDSA curves: please upgrade or rerun with --disable-ecdsa" "$LINENO" 5 fi # see if OPENSSL 1.0.0 or later (has EVP MD and Verify independency) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if openssl supports SHA2 and ECDSA with EVP" >&5 $as_echo_n "checking if openssl supports SHA2 and ECDSA with EVP... " >&6; } if grep OPENSSL_VERSION_TEXT $ssldir/include/openssl/opensslv.h | grep "OpenSSL" >/dev/null; then if grep OPENSSL_VERSION_NUMBER $ssldir/include/openssl/opensslv.h | grep 0x0 >/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } cat >>confdefs.h <<_ACEOF #define USE_ECDSA_EVP_WORKAROUND 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi else # not OpenSSL, thus likely LibreSSL, which supports it { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # we now know we have ECDSA and the required curves. cat >>confdefs.h <<_ACEOF #define USE_ECDSA 1 _ACEOF use_ecdsa="yes" ;; esac # Check whether --enable-dsa was given. if test "${enable_dsa+set}" = set; then : enableval=$enable_dsa; fi use_dsa="no" case "$enable_dsa" in yes) # detect if DSA is supported, and turn it off if not. if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then ac_fn_c_check_func "$LINENO" "DSA_SIG_new" "ac_cv_func_DSA_SIG_new" if test "x$ac_cv_func_DSA_SIG_new" = xyes; then : as_ac_Type=`$as_echo "ac_cv_type_DSA_SIG*" | $as_tr_sh` ac_fn_c_check_type "$LINENO" "DSA_SIG*" "$as_ac_Type" " $ac_includes_default #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif " if eval test \"x\$"$as_ac_Type"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define USE_DSA 1 _ACEOF else if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5 fi fi else if test "x$enable_dsa" = "xyes"; then as_fn_error $? "OpenSSL does not support DSA and you used --enable-dsa." "$LINENO" 5 fi fi else cat >>confdefs.h <<_ACEOF #define USE_DSA 1 _ACEOF fi ;; *) # disable dsa by default, RFC 8624 section 3.1, validators MUST NOT # support DSA for DNSSEC Validation. ;; esac # Check whether --enable-ed25519 was given. if test "${enable_ed25519+set}" = set; then : enableval=$enable_ed25519; fi use_ed25519="no" case "$enable_ed25519" in no) ;; *) if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then ac_fn_c_check_decl "$LINENO" "NID_ED25519" "ac_cv_have_decl_NID_ED25519" "$ac_includes_default #include " if test "x$ac_cv_have_decl_NID_ED25519" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_NID_ED25519 $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : use_ed25519="yes" else if test "x$enable_ed25519" = "xyes"; then as_fn_error $? "OpenSSL does not support ED25519 and you used --enable-ed25519." "$LINENO" 5 fi fi fi if test $USE_NETTLE = "yes"; then for ac_header in nettle/eddsa.h do : ac_fn_c_check_header_compile "$LINENO" "nettle/eddsa.h" "ac_cv_header_nettle_eddsa_h" "$ac_includes_default " if test "x$ac_cv_header_nettle_eddsa_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NETTLE_EDDSA_H 1 _ACEOF use_ed25519="yes" fi done fi if test $use_ed25519 = "yes"; then cat >>confdefs.h <<_ACEOF #define USE_ED25519 1 _ACEOF fi ;; esac # Check whether --enable-ed448 was given. if test "${enable_ed448+set}" = set; then : enableval=$enable_ed448; fi use_ed448="no" case "$enable_ed448" in no) ;; *) if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then ac_fn_c_check_decl "$LINENO" "NID_ED448" "ac_cv_have_decl_NID_ED448" "$ac_includes_default #include " if test "x$ac_cv_have_decl_NID_ED448" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_NID_ED448 $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : use_ed448="yes" else if test "x$enable_ed448" = "xyes"; then as_fn_error $? "OpenSSL does not support ED448 and you used --enable-ed448." "$LINENO" 5 fi fi fi if test $use_ed448 = "yes"; then cat >>confdefs.h <<_ACEOF #define USE_ED448 1 _ACEOF fi ;; esac # Check whether --enable-event-api was given. if test "${enable_event_api+set}" = set; then : enableval=$enable_event_api; fi case "$enable_event_api" in yes) UNBOUND_EVENT_INSTALL=unbound-event-install UNBOUND_EVENT_UNINSTALL=unbound-event-uninstall ;; *) ;; esac # Check whether --enable-tfo-client was given. if test "${enable_tfo_client+set}" = set; then : enableval=$enable_tfo_client; fi case "$enable_tfo_client" in yes) case `uname` in Linux) ac_fn_c_check_decl "$LINENO" "MSG_FASTOPEN" "ac_cv_have_decl_MSG_FASTOPEN" "$ac_includes_default #include " if test "x$ac_cv_have_decl_MSG_FASTOPEN" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&5 $as_echo "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&2;} else as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 fi cat >>confdefs.h <<_ACEOF #define USE_MSG_FASTOPEN 1 _ACEOF ;; Darwin) ac_fn_c_check_decl "$LINENO" "CONNECT_RESUME_ON_READ_WRITE" "ac_cv_have_decl_CONNECT_RESUME_ON_READ_WRITE" "$ac_includes_default #include " if test "x$ac_cv_have_decl_CONNECT_RESUME_ON_READ_WRITE" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&5 $as_echo "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support client mode TFO" >&2;} else as_fn_error $? "TCP Fast Open is not available for client mode: please rerun without --enable-tfo-client" "$LINENO" 5 fi cat >>confdefs.h <<_ACEOF #define USE_OSX_MSG_FASTOPEN 1 _ACEOF ;; esac ;; no|*) ;; esac # Check whether --enable-tfo-server was given. if test "${enable_tfo_server+set}" = set; then : enableval=$enable_tfo_server; fi case "$enable_tfo_server" in yes) ac_fn_c_check_decl "$LINENO" "TCP_FASTOPEN" "ac_cv_have_decl_TCP_FASTOPEN" "$ac_includes_default #include " if test "x$ac_cv_have_decl_TCP_FASTOPEN" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO" >&5 $as_echo "$as_me: WARNING: Check the platform specific TFO kernel parameters are correctly configured to support server mode TFO" >&2;} else as_fn_error $? "TCP Fast Open is not available for server mode: please rerun without --enable-tfo-server" "$LINENO" 5 fi cat >>confdefs.h <<_ACEOF #define USE_TCP_FASTOPEN 1 _ACEOF ;; no|*) ;; esac # check for libevent # Check whether --with-libevent was given. if test "${with_libevent+set}" = set; then : withval=$with_libevent; else with_libevent="no" fi if test "x_$with_libevent" != x_no; then $as_echo "#define USE_LIBEVENT 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libevent" >&5 $as_echo_n "checking for libevent... " >&6; } if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $with_libevent; do thedir="$dir" if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then found_libevent="yes" if test "$thedir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$thedir/include" fi break; fi done if test x_$found_libevent != x_yes; then if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then # libevent source directory { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5 $as_echo "found in $thedir" >&6; } CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include" BAK_LDFLAGS_SET="1" BAK_LDFLAGS="$LDFLAGS" # remove evdns from linking mkdir build >/dev/null 2>&1 mkdir build/libevent >/dev/null 2>&1 mkdir build/libevent/.libs >/dev/null 2>&1 ev_files_o=`ls $thedir/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` ev_files_lo=`ls $thedir/*.lo | grep -v evdns\.lo | grep -v bufferevent_openssl\.lo` ev_files_libso=`ls $thedir/.libs/*.o | grep -v evdns\.o | grep -v bufferevent_openssl\.o` cp $ev_files_o build/libevent cp $ev_files_lo build/libevent cp $ev_files_libso build/libevent/.libs LATE_LDFLAGS="build/libevent/*.lo -lm" LDFLAGS="build/libevent/*.o $LDFLAGS -lm" else as_fn_error $? "Cannot find the libevent library in $with_libevent You can restart ./configure --with-libevent=no to use a builtin alternative. Please note that this alternative is not as capable as libevent when using large outgoing port ranges. " "$LINENO" 5 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5 $as_echo "found in $thedir" >&6; } if test ! -f $thedir/lib/libevent.a -a ! -f $thedir/lib/libevent.so -a -d "$thedir/lib/event2"; then LDFLAGS="$LDFLAGS -L$thedir/lib/event2" if test "x$enable_rpath" = xyes; then if echo "$thedir/lib/event2" | grep "^/" >/dev/null; then RUNTIME_PATH="$RUNTIME_PATH -R$thedir/lib/event2" fi fi else if test "$thedir" != "/usr" -a "$thedir" != ""; then LDFLAGS="$LDFLAGS -L$thedir/lib" if test "x$enable_rpath" = xyes; then if echo "$thedir/lib" | grep "^/" >/dev/null; then RUNTIME_PATH="$RUNTIME_PATH -R$thedir/lib" fi fi fi fi fi # check for library used by libevent after 1.3c { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if ${ac_cv_search_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_clock_gettime+:} false; then : break fi done if ${ac_cv_search_clock_gettime+:} false; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # is the event.h header libev or libevent? for ac_header in event.h do : ac_fn_c_check_header_compile "$LINENO" "event.h" "ac_cv_header_event_h" "$ac_includes_default " if test "x$ac_cv_header_event_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EVENT_H 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "EV_VERSION_MAJOR" "ac_cv_have_decl_EV_VERSION_MAJOR" "$ac_includes_default #include " if test "x$ac_cv_have_decl_EV_VERSION_MAJOR" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing event_set" >&5 $as_echo_n "checking for library containing event_set... " >&6; } if ${ac_cv_search_event_set+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char event_set (); int main () { return event_set (); ; return 0; } _ACEOF for ac_lib in '' ev; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_event_set=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_event_set+:} false; then : break fi done if ${ac_cv_search_event_set+:} false; then : else ac_cv_search_event_set=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_set" >&5 $as_echo "$ac_cv_search_event_set" >&6; } ac_res=$ac_cv_search_event_set if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing event_set" >&5 $as_echo_n "checking for library containing event_set... " >&6; } if ${ac_cv_search_event_set+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char event_set (); int main () { return event_set (); ; return 0; } _ACEOF for ac_lib in '' event; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_event_set=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_event_set+:} false; then : break fi done if ${ac_cv_search_event_set+:} false; then : else ac_cv_search_event_set=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_event_set" >&5 $as_echo "$ac_cv_search_event_set" >&6; } ac_res=$ac_cv_search_event_set if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi for ac_func in event_base_free do : ac_fn_c_check_func "$LINENO" "event_base_free" "ac_cv_func_event_base_free" if test "x$ac_cv_func_event_base_free" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EVENT_BASE_FREE 1 _ACEOF fi done # only in libevent 1.2 and later for ac_func in event_base_once do : ac_fn_c_check_func "$LINENO" "event_base_once" "ac_cv_func_event_base_once" if test "x$ac_cv_func_event_base_once" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EVENT_BASE_ONCE 1 _ACEOF fi done # only in libevent 1.4.1 and later for ac_func in event_base_new do : ac_fn_c_check_func "$LINENO" "event_base_new" "ac_cv_func_event_base_new" if test "x$ac_cv_func_event_base_new" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EVENT_BASE_NEW 1 _ACEOF fi done # only in libevent 1.4.1 and later for ac_func in event_base_get_method do : ac_fn_c_check_func "$LINENO" "event_base_get_method" "ac_cv_func_event_base_get_method" if test "x$ac_cv_func_event_base_get_method" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EVENT_BASE_GET_METHOD 1 _ACEOF fi done # only in libevent 1.4.3 and later for ac_func in ev_loop do : ac_fn_c_check_func "$LINENO" "ev_loop" "ac_cv_func_ev_loop" if test "x$ac_cv_func_ev_loop" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EV_LOOP 1 _ACEOF fi done # only in libev. (tested on 3.51) for ac_func in ev_default_loop do : ac_fn_c_check_func "$LINENO" "ev_default_loop" "ac_cv_func_ev_default_loop" if test "x$ac_cv_func_ev_default_loop" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EV_DEFAULT_LOOP 1 _ACEOF fi done # only in libev. (tested on 4.00) for ac_func in event_assign do : ac_fn_c_check_func "$LINENO" "event_assign" "ac_cv_func_event_assign" if test "x$ac_cv_func_event_assign" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EVENT_ASSIGN 1 _ACEOF fi done # in libevent, for thread-safety ac_fn_c_check_decl "$LINENO" "evsignal_assign" "ac_cv_have_decl_evsignal_assign" "$ac_includes_default #ifdef HAVE_EVENT_H # include #else # include \"event2/event.h\" #endif " if test "x$ac_cv_have_decl_evsignal_assign" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_EVSIGNAL_ASSIGN $ac_have_decl _ACEOF PC_LIBEVENT_DEPENDENCY="libevent" if test -n "$BAK_LDFLAGS_SET"; then LDFLAGS="$BAK_LDFLAGS" fi else $as_echo "#define USE_MINI_EVENT 1" >>confdefs.h fi # check for libexpat # Check whether --with-libexpat was given. if test "${with_libexpat+set}" = set; then : withval=$with_libexpat; else withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5 $as_echo_n "checking for libexpat... " >&6; } found_libexpat="no" for dir in $withval ; do if test -f "$dir/include/expat.h"; then found_libexpat="yes" if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5 $as_echo "found in $dir" >&6; } break; fi done if test x_$found_libexpat != x_yes; then as_fn_error $? "Could not find libexpat, expat.h" "$LINENO" 5 fi for ac_header in expat.h do : ac_fn_c_check_header_compile "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default " if test "x$ac_cv_header_expat_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_EXPAT_H 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "XML_StopParser" "ac_cv_have_decl_XML_StopParser" "$ac_includes_default #include " if test "x$ac_cv_have_decl_XML_StopParser" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_XML_STOPPARSER $ac_have_decl _ACEOF # hiredis (redis C client for cachedb) # Check whether --with-libhiredis was given. if test "${with_libhiredis+set}" = set; then : withval=$with_libhiredis; else withval="no" fi found_libhiredis="no" if test x_$withval = x_yes -o x_$withval != x_no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libhiredis" >&5 $as_echo_n "checking for libhiredis... " >&6; } if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $withval ; do if test -f "$dir/include/hiredis/hiredis.h"; then found_libhiredis="yes" if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5 $as_echo "found in $dir" >&6; } $as_echo "#define USE_REDIS 1" >>confdefs.h LIBS="$LIBS -lhiredis" break; fi done if test x_$found_libhiredis != x_yes; then as_fn_error $? "Could not find libhiredis, hiredis.h" "$LINENO" 5 fi for ac_header in hiredis/hiredis.h do : ac_fn_c_check_header_compile "$LINENO" "hiredis/hiredis.h" "ac_cv_header_hiredis_hiredis_h" "$ac_includes_default " if test "x$ac_cv_header_hiredis_hiredis_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HIREDIS_HIREDIS_H 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "redisConnect" "ac_cv_have_decl_redisConnect" "$ac_includes_default #include " if test "x$ac_cv_have_decl_redisConnect" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_REDISCONNECT $ac_have_decl _ACEOF fi # nghttp2 # Check whether --with-libnghttp2 was given. if test "${with_libnghttp2+set}" = set; then : withval=$with_libnghttp2; else withval="no" fi found_libnghttp2="no" if test x_$withval = x_yes -o x_$withval != x_no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnghttp2" >&5 $as_echo_n "checking for libnghttp2... " >&6; } if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $withval ; do if test -f "$dir/include/nghttp2/nghttp2.h"; then found_libnghttp2="yes" if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5 $as_echo "found in $dir" >&6; } $as_echo "#define HAVE_NGHTTP2 1" >>confdefs.h LIBS="$LIBS -lnghttp2" break; fi done if test x_$found_libnghttp2 != x_yes; then as_fn_error $? "Could not find libnghttp2, nghttp2.h" "$LINENO" 5 fi for ac_header in nghttp2/nghttp2.h do : ac_fn_c_check_header_compile "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default " if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NGHTTP2_NGHTTP2_H 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "nghttp2_session_server_new" "ac_cv_have_decl_nghttp2_session_server_new" "$ac_includes_default #include " if test "x$ac_cv_have_decl_nghttp2_session_server_new" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_NGHTTP2_SESSION_SERVER_NEW $ac_have_decl _ACEOF fi # set static linking for uninstalled libraries if requested staticexe="" # Check whether --enable-static-exe was given. if test "${enable_static_exe+set}" = set; then : enableval=$enable_static_exe; fi if test x_$enable_static_exe = x_yes; then staticexe="-static" if test "$on_mingw" = yes; then staticexe="-all-static" # for static compile, include gdi32 and zlib here. if echo $LIBS | grep 'lgdi32' >/dev/null; then : else LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" LIBS="$LIBS -l:libssp.a" fi fi # set full static linking if requested # Check whether --enable-fully-static was given. if test "${enable_fully_static+set}" = set; then : enableval=$enable_fully_static; fi if test x_$enable_fully_static = x_yes; then staticexe="-all-static" if test "$on_mingw" = yes; then # for static compile, include gdi32 and zlib here. if echo $LIBS | grep 'lgdi32' >/dev/null; then : else LIBS="$LIBS -lgdi32" fi LIBS="$LIBS -lz" LIBS="$LIBS -l:libssp.a" fi fi # set lock checking if requested # Check whether --enable-lock_checks was given. if test "${enable_lock_checks+set}" = set; then : enableval=$enable_lock_checks; fi if test x_$enable_lock_checks = x_yes; then $as_echo "#define ENABLE_LOCK_CHECKS 1" >>confdefs.h CHECKLOCK_OBJ="checklocks.lo" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo" >&5 $as_echo_n "checking for getaddrinfo... " >&6; } ac_cv_func_getaddrinfo=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __cplusplus extern "C" { #endif char* getaddrinfo(); char* (*f) () = getaddrinfo; #ifdef __cplusplus } #endif int main() { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_getaddrinfo="yes" if test "$ac_cv_header_windows_h" = "yes"; then $as_echo "#define USE_WINSOCK 1" >>confdefs.h USE_WINSOCK="1" if echo $LIBS | grep 'lws2_32' >/dev/null; then : else LIBS="$LIBS -lws2_32" fi fi else ORIGLIBS="$LIBS" LIBS="$LIBS -lws2_32" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_WS2TCPIP_H #include #endif int main () { (void)getaddrinfo(NULL, NULL, NULL, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_getaddrinfo="yes" $as_echo "#define USE_WINSOCK 1" >>confdefs.h USE_WINSOCK="1" else ac_cv_func_getaddrinfo="no" LIBS="$ORIGLIBS" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getaddrinfo" >&5 $as_echo "$ac_cv_func_getaddrinfo" >&6; } if test $ac_cv_func_getaddrinfo = yes; then $as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h fi if test "$USE_WINSOCK" = 1; then $as_echo "#define UB_ON_WINDOWS 1" >>confdefs.h for ac_header in iphlpapi.h do : ac_fn_c_check_header_compile "$LINENO" "iphlpapi.h" "ac_cv_header_iphlpapi_h" "$ac_includes_default #include " if test "x$ac_cv_header_iphlpapi_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IPHLPAPI_H 1 _ACEOF fi done if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi LIBS="$LIBS -liphlpapi -lcrypt32" WINAPPS="unbound-service-install.exe unbound-service-remove.exe anchor-update.exe" WIN_DAEMON_SRC="winrc/win_svc.c winrc/w_inst.c" WIN_DAEMON_OBJ="win_svc.lo w_inst.lo" WIN_DAEMON_OBJ_LINK="rsrc_unbound.o" WIN_HOST_OBJ_LINK="rsrc_unbound_host.o" WIN_UBANCHOR_OBJ_LINK="rsrc_unbound_anchor.o log.lo locks.lo" WIN_CONTROL_OBJ_LINK="rsrc_unbound_control.o" WIN_CHECKCONF_OBJ_LINK="rsrc_unbound_checkconf.o" fi if test $ac_cv_func_getaddrinfo = no; then case " $LIBOBJS " in *" fake-rfc2553.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS fake-rfc2553.$ac_objext" ;; esac fi # check after getaddrinfo for its libraries # check ioctlsocket { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ioctlsocket" >&5 $as_echo_n "checking for ioctlsocket... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_WINSOCK2_H #include #endif int main () { (void)ioctlsocket(0, 0, NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_IOCTLSOCKET 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # see if daemon(3) exists, and if it is deprecated. for ac_func in daemon do : ac_fn_c_check_func "$LINENO" "daemon" "ac_cv_func_daemon" if test "x$ac_cv_func_daemon" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DAEMON 1 _ACEOF fi done if test $ac_cv_func_daemon = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if daemon is deprecated" >&5 $as_echo_n "checking if daemon is deprecated... " >&6; } cache=`echo daemon | sed 'y%.=/+-%___p_%'` if eval \${cv_cc_deprecated_$cache+:} false; then : $as_echo_n "(cached) " >&6 else echo ' #include ' >conftest.c echo 'void f(){ (void)daemon(0, 0); }' >>conftest.c if test -z "`$CC -c conftest.c 2>&1 | grep deprecated`"; then eval "cv_cc_deprecated_$cache=no" else eval "cv_cc_deprecated_$cache=yes" fi rm -f conftest conftest.o conftest.c fi if eval "test \"`echo '$cv_cc_deprecated_'$cache`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } cat >>confdefs.h <<_ACEOF #define DEPRECATED_DAEMON 1 _ACEOF : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } : fi fi ac_fn_c_check_member "$LINENO" "struct sockaddr_un" "sun_len" "ac_cv_member_struct_sockaddr_un_sun_len" " $ac_includes_default #ifdef HAVE_SYS_UN_H #include #endif " if test "x$ac_cv_member_struct_sockaddr_un_sun_len" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SOCKADDR_UN_SUN_LEN 1 _ACEOF fi ac_fn_c_check_member "$LINENO" "struct in_pktinfo" "ipi_spec_dst" "ac_cv_member_struct_in_pktinfo_ipi_spec_dst" " $ac_includes_default #if HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_UIO_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif " if test "x$ac_cv_member_struct_in_pktinfo_ipi_spec_dst" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for htobe64" >&5 $as_echo_n "checking for htobe64... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_ENDIAN_H # include #endif #ifdef HAVE_SYS_ENDIAN_H # include #endif int main () { unsigned long long x = htobe64(0); printf("%u", (unsigned)x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_HTOBE64 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for be64toh" >&5 $as_echo_n "checking for be64toh... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_ENDIAN_H # include #endif #ifdef HAVE_SYS_ENDIAN_H # include #endif int main () { unsigned long long x = be64toh(0); printf("%u", (unsigned)x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_BE64TOH 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setusercontext" >&5 $as_echo_n "checking for library containing setusercontext... " >&6; } if ${ac_cv_search_setusercontext+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setusercontext (); int main () { return setusercontext (); ; return 0; } _ACEOF for ac_lib in '' util; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_setusercontext=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_setusercontext+:} false; then : break fi done if ${ac_cv_search_setusercontext+:} false; then : else ac_cv_search_setusercontext=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setusercontext" >&5 $as_echo "$ac_cv_search_setusercontext" >&6; } ac_res=$ac_cv_search_setusercontext if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in setresuid do : ac_fn_c_check_func "$LINENO" "setresuid" "ac_cv_func_setresuid" if test "x$ac_cv_func_setresuid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETRESUID 1 _ACEOF else for ac_func in setreuid do : ac_fn_c_check_func "$LINENO" "setreuid" "ac_cv_func_setreuid" if test "x$ac_cv_func_setreuid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETREUID 1 _ACEOF fi done fi done for ac_func in setresgid do : ac_fn_c_check_func "$LINENO" "setresgid" "ac_cv_func_setresgid" if test "x$ac_cv_func_setresgid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETRESGID 1 _ACEOF else for ac_func in setregid do : ac_fn_c_check_func "$LINENO" "setregid" "ac_cv_func_setregid" if test "x$ac_cv_func_setregid" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETREGID 1 _ACEOF fi done fi done # check if setreuid en setregid fail, on MacOSX10.4(darwin8). if echo $target_os | grep darwin8 > /dev/null; then $as_echo "#define DARWIN_BROKEN_SETREUID 1" >>confdefs.h fi ac_fn_c_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" " $ac_includes_default #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif " if test "x$ac_cv_have_decl_inet_pton" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_INET_PTON $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "inet_ntop" "ac_cv_have_decl_inet_ntop" " $ac_includes_default #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif " if test "x$ac_cv_have_decl_inet_ntop" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_INET_NTOP $ac_have_decl _ACEOF ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton" if test "x$ac_cv_func_inet_aton" = xyes; then : $as_echo "#define HAVE_INET_ATON 1" >>confdefs.h else case " $LIBOBJS " in *" inet_aton.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS inet_aton.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" if test "x$ac_cv_func_inet_pton" = xyes; then : $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h else case " $LIBOBJS " in *" inet_pton.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS inet_pton.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" if test "x$ac_cv_func_inet_ntop" = xyes; then : $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h else case " $LIBOBJS " in *" inet_ntop.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS inet_ntop.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes; then : $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h else case " $LIBOBJS " in *" snprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS snprintf.$ac_objext" ;; esac fi # test if snprintf return the proper length if test "x$ac_cv_func_snprintf" = xyes; then if test c${cross_compiling} = cno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct snprintf return value" >&5 $as_echo_n "checking for correct snprintf return value... " >&6; } if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main(void) { return !(snprintf(NULL, 0, "test") == 4); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define SNPRINTF_RET_BROKEN /**/" >>confdefs.h case " $LIBOBJS " in *" snprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS snprintf.$ac_objext" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" if test "x$ac_cv_func_strlcat" = xyes; then : $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h else case " $LIBOBJS " in *" strlcat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcat.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" if test "x$ac_cv_func_strlcpy" = xyes; then : $as_echo "#define HAVE_STRLCPY 1" >>confdefs.h else case " $LIBOBJS " in *" strlcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" if test "x$ac_cv_func_memmove" = xyes; then : $as_echo "#define HAVE_MEMMOVE 1" >>confdefs.h else case " $LIBOBJS " in *" memmove.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memmove.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" if test "x$ac_cv_func_gmtime_r" = xyes; then : $as_echo "#define HAVE_GMTIME_R 1" >>confdefs.h else case " $LIBOBJS " in *" gmtime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "isblank" "ac_cv_func_isblank" if test "x$ac_cv_func_isblank" = xyes; then : $as_echo "#define HAVE_ISBLANK 1" >>confdefs.h else case " $LIBOBJS " in *" isblank.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS isblank.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero" if test "x$ac_cv_func_explicit_bzero" = xyes; then : $as_echo "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h else case " $LIBOBJS " in *" explicit_bzero.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS explicit_bzero.$ac_objext" ;; esac fi LIBOBJ_WITHOUT_CTIMEARC4="$LIBOBJS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for reallocarray" >&5 $as_echo_n "checking for reallocarray... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifndef _OPENBSD_SOURCE #define _OPENBSD_SOURCE 1 #endif #include int main(void) { void* p = reallocarray(NULL, 10, 100); free(p); return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_REALLOCARRAY 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } case " $LIBOBJS " in *" reallocarray.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS reallocarray.$ac_objext" ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_fn_c_check_decl "$LINENO" "reallocarray" "ac_cv_have_decl_reallocarray" "$ac_includes_default" if test "x$ac_cv_have_decl_reallocarray" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_REALLOCARRAY $ac_have_decl _ACEOF if test "$USE_NSS" = "no"; then ac_fn_c_check_func "$LINENO" "arc4random" "ac_cv_func_arc4random" if test "x$ac_cv_func_arc4random" = xyes; then : $as_echo "#define HAVE_ARC4RANDOM 1" >>confdefs.h else case " $LIBOBJS " in *" arc4random.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS arc4random.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "arc4random_uniform" "ac_cv_func_arc4random_uniform" if test "x$ac_cv_func_arc4random_uniform" = xyes; then : $as_echo "#define HAVE_ARC4RANDOM_UNIFORM 1" >>confdefs.h else case " $LIBOBJS " in *" arc4random_uniform.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS arc4random_uniform.$ac_objext" ;; esac fi if test "$ac_cv_func_arc4random" = "no"; then case " $LIBOBJS " in *" arc4_lock.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS arc4_lock.$ac_objext" ;; esac for ac_func in getentropy do : ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" if test "x$ac_cv_func_getentropy" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETENTROPY 1 _ACEOF else if test "$USE_WINSOCK" = 1; then case " $LIBOBJS " in *" getentropy_win.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getentropy_win.$ac_objext" ;; esac else case "$host" in Darwin|*darwin*) case " $LIBOBJS " in *" getentropy_osx.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getentropy_osx.$ac_objext" ;; esac ;; *solaris*|*sunos*|SunOS) case " $LIBOBJS " in *" getentropy_solaris.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getentropy_solaris.$ac_objext" ;; esac for ac_header in sys/sha2.h do : ac_fn_c_check_header_compile "$LINENO" "sys/sha2.h" "ac_cv_header_sys_sha2_h" "$ac_includes_default " if test "x$ac_cv_header_sys_sha2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SHA2_H 1 _ACEOF else for ac_func in SHA512_Update do : ac_fn_c_check_func "$LINENO" "SHA512_Update" "ac_cv_func_SHA512_Update" if test "x$ac_cv_func_SHA512_Update" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SHA512_UPDATE 1 _ACEOF else case " $LIBOBJS " in *" sha512.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS sha512.$ac_objext" ;; esac fi done fi done if test "$ac_cv_header_sys_sha2_h" = "yes"; then # this lib needed for sha2 on solaris LIBS="$LIBS -lmd" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if ${ac_cv_search_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_clock_gettime+:} false; then : break fi done if ${ac_cv_search_clock_gettime+:} false; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ;; *freebsd*|*FreeBSD) case " $LIBOBJS " in *" getentropy_freebsd.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getentropy_freebsd.$ac_objext" ;; esac ;; *linux*|Linux|*) case " $LIBOBJS " in *" getentropy_linux.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getentropy_linux.$ac_objext" ;; esac for ac_func in SHA512_Update do : ac_fn_c_check_func "$LINENO" "SHA512_Update" "ac_cv_func_SHA512_Update" if test "x$ac_cv_func_SHA512_Update" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SHA512_UPDATE 1 _ACEOF else $as_echo "#define COMPAT_SHA512 1" >>confdefs.h case " $LIBOBJS " in *" sha512.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS sha512.$ac_objext" ;; esac fi done for ac_header in sys/sysctl.h do : ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "$ac_includes_default " if test "x$ac_cv_header_sys_sysctl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SYSCTL_H 1 _ACEOF fi done for ac_func in getauxval do : ac_fn_c_check_func "$LINENO" "getauxval" "ac_cv_func_getauxval" if test "x$ac_cv_func_getauxval" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETAUXVAL 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if ${ac_cv_search_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_clock_gettime+:} false; then : break fi done if ${ac_cv_search_clock_gettime+:} false; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ;; esac fi fi done fi fi LIBOBJ_WITHOUT_CTIME="$LIBOBJS" ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r" if test "x$ac_cv_func_ctime_r" = xyes; then : $as_echo "#define HAVE_CTIME_R 1" >>confdefs.h else case " $LIBOBJS " in *" ctime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS ctime_r.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep" if test "x$ac_cv_func_strsep" = xyes; then : $as_echo "#define HAVE_STRSEP 1" >>confdefs.h else case " $LIBOBJS " in *" strsep.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strsep.$ac_objext" ;; esac fi # Check whether --enable-allsymbols was given. if test "${enable_allsymbols+set}" = set; then : enableval=$enable_allsymbols; fi case "$enable_allsymbols" in yes) COMMON_OBJ_ALL_SYMBOLS="" UBSYMS="" EXTRALINK="-L. -L.libs -lunbound" $as_echo "#define EXPORT_ALL_SYMBOLS 1" >>confdefs.h ;; no|*) COMMON_OBJ_ALL_SYMBOLS='$(COMMON_OBJ)' UBSYMS='-export-symbols $(srcdir)/libunbound/ubsyms.def' EXTRALINK="" ;; esac if test x_$enable_lock_checks = x_yes; then UBSYMS="-export-symbols clubsyms.def" cp ${srcdir}/libunbound/ubsyms.def clubsyms.def echo lock_protect >> clubsyms.def echo lock_unprotect >> clubsyms.def echo lock_get_mem >> clubsyms.def echo checklock_start >> clubsyms.def echo checklock_stop >> clubsyms.def echo checklock_lock >> clubsyms.def echo checklock_unlock >> clubsyms.def echo checklock_init >> clubsyms.def echo checklock_thrcreate >> clubsyms.def echo checklock_thrjoin >> clubsyms.def fi # check for dnstap if requested # Check whether --enable-dnstap was given. if test "${enable_dnstap+set}" = set; then : enableval=$enable_dnstap; opt_dnstap=$enableval else opt_dnstap=no fi # Check whether --with-dnstap-socket-path was given. if test "${with_dnstap_socket_path+set}" = set; then : withval=$with_dnstap_socket_path; opt_dnstap_socket_path=$withval else opt_dnstap_socket_path="$UNBOUND_RUN_DIR/dnstap.sock" fi if test "x$opt_dnstap" != "xno"; then # Extract the first word of "protoc-c", so it can be a program name with args. set dummy protoc-c; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PROTOC_C+:} false; then : $as_echo_n "(cached) " >&6 else case $PROTOC_C in [\\/]* | ?:[\\/]*) ac_cv_path_PROTOC_C="$PROTOC_C" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PROTOC_C="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PROTOC_C=$ac_cv_path_PROTOC_C if test -n "$PROTOC_C"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROTOC_C" >&5 $as_echo "$PROTOC_C" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$PROTOC_C"; then as_fn_error $? "The protoc-c program was not found. Please install protobuf-c!" "$LINENO" 5 fi # Check whether --with-protobuf-c was given. if test "${with_protobuf_c+set}" = set; then : withval=$with_protobuf_c; # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0 if test -f $withval/include/google/protobuf-c/protobuf-c.h; then CFLAGS="$CFLAGS -I$withval/include/google" else CFLAGS="$CFLAGS -I$withval/include" fi LDFLAGS="$LDFLAGS -L$withval/lib" else # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0 if test -f /usr/include/google/protobuf-c/protobuf-c.h; then CFLAGS="$CFLAGS -I/usr/include/google" else if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then CFLAGS="$CFLAGS -I/usr/local/include/google" LDFLAGS="$LDFLAGS -L/usr/local/lib" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing protobuf_c_message_pack" >&5 $as_echo_n "checking for library containing protobuf_c_message_pack... " >&6; } if ${ac_cv_search_protobuf_c_message_pack+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char protobuf_c_message_pack (); int main () { return protobuf_c_message_pack (); ; return 0; } _ACEOF for ac_lib in '' protobuf-c; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_protobuf_c_message_pack=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_protobuf_c_message_pack+:} false; then : break fi done if ${ac_cv_search_protobuf_c_message_pack+:} false; then : else ac_cv_search_protobuf_c_message_pack=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_protobuf_c_message_pack" >&5 $as_echo "$ac_cv_search_protobuf_c_message_pack" >&6; } ac_res=$ac_cv_search_protobuf_c_message_pack if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "The protobuf-c library was not found. Please install protobuf-c!" "$LINENO" 5 fi $as_echo "#define USE_DNSTAP 1" >>confdefs.h ENABLE_DNSTAP=1 hdr_dnstap_socket_path="`echo $opt_dnstap_socket_path | sed -e 's/\\\\/\\\\\\\\/g'`" cat >>confdefs.h <<_ACEOF #define DNSTAP_SOCKET_PATH "$hdr_dnstap_socket_path" _ACEOF DNSTAP_SOCKET_PATH="$hdr_dnstap_socket_path" DNSTAP_SOCKET_TESTBIN='unbound-dnstap-socket$(EXEEXT)' DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c" DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo" else ENABLE_DNSTAP=0 fi # check for dnscrypt if requested # Check whether --enable-dnscrypt was given. if test "${enable_dnscrypt+set}" = set; then : enableval=$enable_dnscrypt; opt_dnscrypt=$enableval else opt_dnscrypt=no fi if test "x$opt_dnscrypt" != "xno"; then # Check whether --with-libsodium was given. if test "${with_libsodium+set}" = set; then : withval=$with_libsodium; CFLAGS="$CFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sodium_init" >&5 $as_echo_n "checking for library containing sodium_init... " >&6; } if ${ac_cv_search_sodium_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sodium_init (); int main () { return sodium_init (); ; return 0; } _ACEOF for ac_lib in '' sodium; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sodium_init=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_sodium_init+:} false; then : break fi done if ${ac_cv_search_sodium_init+:} false; then : else ac_cv_search_sodium_init=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sodium_init" >&5 $as_echo "$ac_cv_search_sodium_init" >&6; } ac_res=$ac_cv_search_sodium_init if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "The sodium library was not found. Please install sodium!" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypto_box_curve25519xchacha20poly1305_beforenm" >&5 $as_echo_n "checking for library containing crypto_box_curve25519xchacha20poly1305_beforenm... " >&6; } if ${ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crypto_box_curve25519xchacha20poly1305_beforenm (); int main () { return crypto_box_curve25519xchacha20poly1305_beforenm (); ; return 0; } _ACEOF for ac_lib in '' sodium; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm+:} false; then : break fi done if ${ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm+:} false; then : else ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm" >&5 $as_echo "$ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm" >&6; } ac_res=$ac_cv_search_crypto_box_curve25519xchacha20poly1305_beforenm if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ENABLE_DNSCRYPT_XCHACHA20=1 $as_echo "#define USE_DNSCRYPT_XCHACHA20 1" >>confdefs.h else ENABLE_DNSCRYPT_XCHACHA20=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sodium_set_misuse_handler" >&5 $as_echo_n "checking for library containing sodium_set_misuse_handler... " >&6; } if ${ac_cv_search_sodium_set_misuse_handler+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sodium_set_misuse_handler (); int main () { return sodium_set_misuse_handler (); ; return 0; } _ACEOF for ac_lib in '' sodium; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sodium_set_misuse_handler=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_sodium_set_misuse_handler+:} false; then : break fi done if ${ac_cv_search_sodium_set_misuse_handler+:} false; then : else ac_cv_search_sodium_set_misuse_handler=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sodium_set_misuse_handler" >&5 $as_echo "$ac_cv_search_sodium_set_misuse_handler" >&6; } ac_res=$ac_cv_search_sodium_set_misuse_handler if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define SODIUM_MISUSE_HANDLER 1" >>confdefs.h fi $as_echo "#define USE_DNSCRYPT 1" >>confdefs.h ENABLE_DNSCRYPT=1 DNSCRYPT_SRC="dnscrypt/dnscrypt.c" DNSCRYPT_OBJ="dnscrypt.lo" else ENABLE_DNSCRYPT_XCHACHA20=0 ENABLE_DNSCRYPT=0 fi # check for cachedb if requested # Check whether --enable-cachedb was given. if test "${enable_cachedb+set}" = set; then : enableval=$enable_cachedb; fi # turn on cachedb when hiredis support is enabled. if test "$found_libhiredis" = "yes"; then enable_cachedb="yes"; fi case "$enable_cachedb" in yes) $as_echo "#define USE_CACHEDB 1" >>confdefs.h ;; no|*) # nothing ;; esac # check for ipsecmod if requested # Check whether --enable-ipsecmod was given. if test "${enable_ipsecmod+set}" = set; then : enableval=$enable_ipsecmod; fi case "$enable_ipsecmod" in yes) $as_echo "#define USE_IPSECMOD 1" >>confdefs.h IPSECMOD_OBJ="ipsecmod.lo ipsecmod-whitelist.lo" IPSECMOD_HEADER='$(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/ipsecmod/ipsecmod-whitelist.h' ;; no|*) # nothing ;; esac # check for ipset if requested # Check whether --enable-ipset was given. if test "${enable_ipset+set}" = set; then : enableval=$enable_ipset; fi case "$enable_ipset" in yes) $as_echo "#define USE_IPSET 1" >>confdefs.h IPSET_SRC="ipset/ipset.c" IPSET_OBJ="ipset.lo" # mnl # Check whether --with-libmnl was given. if test "${with_libmnl+set}" = set; then : withval=$with_libmnl; else withval="yes" fi found_libmnl="no" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmnl" >&5 $as_echo_n "checking for libmnl... " >&6; } if test x_$withval = x_ -o x_$withval = x_yes; then withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr" fi for dir in $withval ; do if test -f "$dir/include/libmnl/libmnl.h"; then found_libmnl="yes" if test "$dir" != "/usr"; then CPPFLAGS="$CPPFLAGS -I$dir/include" LDFLAGS="$LDFLAGS -L$dir/lib" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $dir" >&5 $as_echo "found in $dir" >&6; } LIBS="$LIBS -lmnl" break; fi done if test x_$found_libmnl != x_yes; then as_fn_error $? "Could not find libmnl, libmnl.h" "$LINENO" 5 fi ;; no|*) # nothing ;; esac # Check whether --enable-explicit-port-randomisation was given. if test "${enable_explicit_port_randomisation+set}" = set; then : enableval=$enable_explicit_port_randomisation; fi case "$enable_explicit_port_randomisation" in no) $as_echo "#define DISABLE_EXPLICIT_PORT_RANDOMISATION 1" >>confdefs.h ;; yes|*) ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${MAKE:-make} supports $< with implicit rule in scope" >&5 $as_echo_n "checking if ${MAKE:-make} supports $< with implicit rule in scope... " >&6; } # on openBSD, the implicit rule make $< work. # on Solaris, it does not work ($? is changed sources, $^ lists dependencies). # gmake works. cat >conftest.make </dev/null rm -f conftest.make conftest.c conftest.dir/conftest.c rm -rf conftest.dir if test ! -f conftest.lo; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SOURCEDETERMINE='echo "$^" | awk "-F " "{print \$$1;}" > .source' SOURCEFILE='`cat .source`' else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SOURCEDETERMINE=':' SOURCEFILE='$<' fi rm -f conftest.lo # see if we want to build the library or everything ALLTARGET="alltargets" INSTALLTARGET="install-all" # Check whether --with-libunbound-only was given. if test "${with_libunbound_only+set}" = set; then : withval=$with_libunbound_only; if test "$withval" = "yes"; then ALLTARGET="lib" INSTALLTARGET="install-lib" fi fi if test $ALLTARGET = "alltargets"; then if test $USE_NSS = "yes"; then as_fn_error $? "--with-nss can only be used in combination with --with-libunbound-only." "$LINENO" 5 fi if test $USE_NETTLE = "yes"; then as_fn_error $? "--with-nettle can only be used in combination with --with-libunbound-only." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: Stripping extension flags..." >&5 $as_echo "$as_me: Stripping extension flags..." >&6;} if echo $CFLAGS | grep " -D_GNU_SOURCE" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_GNU_SOURCE//g'`" $as_echo "#define OMITTED__D_GNU_SOURCE 1" >>confdefs.h fi if echo $CFLAGS | grep " -D_BSD_SOURCE" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_BSD_SOURCE//g'`" $as_echo "#define OMITTED__D_BSD_SOURCE 1" >>confdefs.h fi if echo $CFLAGS | grep " -D_DEFAULT_SOURCE" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_DEFAULT_SOURCE//g'`" $as_echo "#define OMITTED__D_DEFAULT_SOURCE 1" >>confdefs.h fi if echo $CFLAGS | grep " -D__EXTENSIONS__" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D__EXTENSIONS__//g'`" $as_echo "#define OMITTED__D__EXTENSIONS__ 1" >>confdefs.h fi if echo $CFLAGS | grep " -D_POSIX_C_SOURCE=200112" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_POSIX_C_SOURCE=200112//g'`" $as_echo "#define OMITTED__D_POSIX_C_SOURCE_200112 1" >>confdefs.h fi if echo $CFLAGS | grep " -D_XOPEN_SOURCE=600" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_XOPEN_SOURCE=600//g'`" $as_echo "#define OMITTED__D_XOPEN_SOURCE_600 1" >>confdefs.h fi if echo $CFLAGS | grep " -D_XOPEN_SOURCE_EXTENDED=1" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_XOPEN_SOURCE_EXTENDED=1//g'`" $as_echo "#define OMITTED__D_XOPEN_SOURCE_EXTENDED_1 1" >>confdefs.h fi if echo $CFLAGS | grep " -D_ALL_SOURCE" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_ALL_SOURCE//g'`" $as_echo "#define OMITTED__D_ALL_SOURCE 1" >>confdefs.h fi if echo $CFLAGS | grep " -D_LARGEFILE_SOURCE=1" >/dev/null 2>&1; then CFLAGS="`echo $CFLAGS | sed -e 's/ -D_LARGEFILE_SOURCE=1//g'`" $as_echo "#define OMITTED__D_LARGEFILE_SOURCE_1 1" >>confdefs.h fi if test -n "$LATE_LDFLAGS"; then LDFLAGS="$LATE_LDFLAGS $LDFLAGS" fi # remove start spaces LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'` LIBS=`echo "$LIBS"|sed -e 's/^ *//'` cat >>confdefs.h <<_ACEOF #define MAXSYSLOGMSGLEN 10240 _ACEOF version=1.13.1 date=`date +'%b %e, %Y'` ac_config_files="$ac_config_files Makefile doc/example.conf doc/libunbound.3 doc/unbound.8 doc/unbound-anchor.8 doc/unbound-checkconf.8 doc/unbound.conf.5 doc/unbound-control.8 doc/unbound-host.1 smallapp/unbound-control-setup.sh dnstap/dnstap_config.h dnscrypt/dnscrypt_config.h contrib/libunbound.pc contrib/unbound.socket contrib/unbound.service contrib/unbound_portable.service" ac_config_headers="$ac_config_headers config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${USE_SYSTEMD_TRUE}" && test -z "${USE_SYSTEMD_FALSE}"; then as_fn_error $? "conditional \"USE_SYSTEMD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by unbound $as_me 1.13.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ unbound config.status 1.13.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "disable-rpath") CONFIG_COMMANDS="$CONFIG_COMMANDS disable-rpath" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/example.conf") CONFIG_FILES="$CONFIG_FILES doc/example.conf" ;; "doc/libunbound.3") CONFIG_FILES="$CONFIG_FILES doc/libunbound.3" ;; "doc/unbound.8") CONFIG_FILES="$CONFIG_FILES doc/unbound.8" ;; "doc/unbound-anchor.8") CONFIG_FILES="$CONFIG_FILES doc/unbound-anchor.8" ;; "doc/unbound-checkconf.8") CONFIG_FILES="$CONFIG_FILES doc/unbound-checkconf.8" ;; "doc/unbound.conf.5") CONFIG_FILES="$CONFIG_FILES doc/unbound.conf.5" ;; "doc/unbound-control.8") CONFIG_FILES="$CONFIG_FILES doc/unbound-control.8" ;; "doc/unbound-host.1") CONFIG_FILES="$CONFIG_FILES doc/unbound-host.1" ;; "smallapp/unbound-control-setup.sh") CONFIG_FILES="$CONFIG_FILES smallapp/unbound-control-setup.sh" ;; "dnstap/dnstap_config.h") CONFIG_FILES="$CONFIG_FILES dnstap/dnstap_config.h" ;; "dnscrypt/dnscrypt_config.h") CONFIG_FILES="$CONFIG_FILES dnscrypt/dnscrypt_config.h" ;; "contrib/libunbound.pc") CONFIG_FILES="$CONFIG_FILES contrib/libunbound.pc" ;; "contrib/unbound.socket") CONFIG_FILES="$CONFIG_FILES contrib/unbound.socket" ;; "contrib/unbound.service") CONFIG_FILES="$CONFIG_FILES contrib/unbound.service" ;; "contrib/unbound_portable.service") CONFIG_FILES="$CONFIG_FILES contrib/unbound_portable.service" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "disable-rpath":C) sed < libtool > libtool-2 \ 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_RPATH_SED__ "/' mv libtool-2 libtool chmod 755 libtool libtool="./libtool" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi unbound-1.13.1/install-sh0000755000175000017500000003452714010434640014716 0ustar wouterwouter#!/usr/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: unbound-1.13.1/README.md0000644000175000017500000000342614010434640014163 0ustar wouterwouter# Unbound [![Travis Build Status](https://travis-ci.org/NLnetLabs/unbound.svg?branch=master)](https://travis-ci.org/NLnetLabs/unbound) [![Packaging status](https://repology.org/badge/tiny-repos/unbound.svg)](https://repology.org/project/unbound/versions) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/unbound.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:unbound) Unbound is a validating, recursive, caching DNS resolver. It is designed to be fast and lean and incorporates modern features based on open standards. If you have any feedback, we would love to hear from you. Don’t hesitate to [create an issue on Github](https://github.com/NLnetLabs/unbound/issues/new) or post a message on the [Unbound mailing list](https://lists.nlnetlabs.nl/mailman/listinfo/unbound-users). You can learn more about Unbound by reading our [documentation](https://nlnetlabs.nl/documentation/unbound/). ## Compiling Make sure you have the C toolchain, OpenSSL and its include files, and libexpat installed. Unbound can be compiled and installed using: ``` ./configure && make && make install ``` You can use libevent if you want. libevent is useful when using many (10000) outgoing ports. By default max 256 ports are opened at the same time and the builtin alternative is equally capable and a little faster. Use the `--with-libevent=dir` configure option to compile Unbound with libevent support. ## Unbound configuration All of Unbound's configuration options are described in the man pages, which will be installed and are available on the Unbound [documentation page](https://nlnetlabs.nl/documentation/unbound/). An example configuration file is located in [doc/example.conf](https://github.com/NLnetLabs/unbound/blob/master/doc/example.conf.in). unbound-1.13.1/testcode/0000755000175000017500000000000014010434640014511 5ustar wouterwouterunbound-1.13.1/testcode/checklocks.c0000644000175000017500000006366414010434640017005 0ustar wouterwouter/** * testcode/checklocks.c - wrapper on locks that checks access. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" #include #include "util/locks.h" /* include before checklocks.h */ #include "testcode/checklocks.h" /** * \file * Locks that are checked. * * Ugly hack: uses the fact that workers start with an int thread_num, and * are passed to thread_create to make the thread numbers here the same as * those used for logging which is nice. * * Todo: * - debug status print, of thread lock stacks, and current waiting. */ #ifdef USE_THREAD_DEBUG /** How long to wait before lock attempt is a failure. */ #define CHECK_LOCK_TIMEOUT 120 /* seconds */ /** How long to wait before join attempt is a failure. */ #define CHECK_JOIN_TIMEOUT 120 /* seconds */ /** if key has been created */ static int key_created = 0; /** if the key was deleted, i.e. we have quit */ static int key_deleted = 0; /** we hide the thread debug info with this key. */ static ub_thread_key_type thr_debug_key; /** the list of threads, so all threads can be examined. NULL if unused. */ static struct thr_check* thread_infos[THRDEBUG_MAX_THREADS]; /** do we check locking order */ int check_locking_order = 1; /** the pid of this runset, reasonably unique. */ static pid_t check_lock_pid; /** print all possible debug info on the state of the system */ static void total_debug_info(void); /** print pretty lock error and exit (decl for NORETURN attribute) */ static void lock_error(struct checked_lock* lock, const char* func, const char* file, int line, const char* err) ATTR_NORETURN; /** print pretty lock error and exit */ static void lock_error(struct checked_lock* lock, const char* func, const char* file, int line, const char* err) { log_err("lock error (description follows)"); log_err("Created at %s %s:%d", lock->create_func, lock->create_file, lock->create_line); if(lock->holder_func && lock->holder_file) log_err("Previously %s %s:%d", lock->holder_func, lock->holder_file, lock->holder_line); log_err("At %s %s:%d", func, file, line); log_err("Error for %s lock: %s", (lock->type==check_lock_mutex)?"mutex": ( (lock->type==check_lock_spinlock)?"spinlock": ( (lock->type==check_lock_rwlock)?"rwlock": "badtype")), err); log_err("complete status display:"); total_debug_info(); fatal_exit("bailing out"); } /** * Obtain lock on debug lock structure. This could be a deadlock by the caller. * The debug code itself does not deadlock. Anyway, check with timeouts. * @param lock: on what to acquire lock. * @param func: user level caller identification. * @param file: user level caller identification. * @param line: user level caller identification. */ static void acquire_locklock(struct checked_lock* lock, const char* func, const char* file, int line) { struct timespec to; int err; int contend = 0; /* first try; inc contention counter if not immediately */ if((err = pthread_mutex_trylock(&lock->lock))) { if(err==EBUSY) contend++; else fatal_exit("error in mutex_trylock: %s", strerror(err)); } if(!err) return; /* immediate success */ to.tv_sec = time(NULL) + CHECK_LOCK_TIMEOUT; to.tv_nsec = 0; err = pthread_mutex_timedlock(&lock->lock, &to); if(err) { log_err("in acquiring locklock: %s", strerror(err)); lock_error(lock, func, file, line, "acquire locklock"); } /* since we hold the lock, we can edit the contention_count */ lock->contention_count += contend; } /** add protected region */ void lock_protect(void *p, void* area, size_t size) { struct checked_lock* lock = *(struct checked_lock**)p; struct protected_area* e = (struct protected_area*)malloc( sizeof(struct protected_area)); if(!e) fatal_exit("lock_protect: out of memory"); e->region = area; e->size = size; e->hold = malloc(size); if(!e->hold) fatal_exit("lock_protect: out of memory"); memcpy(e->hold, e->region, e->size); acquire_locklock(lock, __func__, __FILE__, __LINE__); e->next = lock->prot; lock->prot = e; LOCKRET(pthread_mutex_unlock(&lock->lock)); } /** remove protected region */ void lock_unprotect(void* mangled, void* area) { struct checked_lock* lock = *(struct checked_lock**)mangled; struct protected_area* p, **prevp; if(!lock) return; acquire_locklock(lock, __func__, __FILE__, __LINE__); p = lock->prot; prevp = &lock->prot; while(p) { if(p->region == area) { *prevp = p->next; free(p->hold); free(p); LOCKRET(pthread_mutex_unlock(&lock->lock)); return; } prevp = &p->next; p = p->next; } LOCKRET(pthread_mutex_unlock(&lock->lock)); } /** * Check protected memory region. Memory compare. Exit on error. * @param lock: which lock to check. * @param func: location we are now (when failure is detected). * @param file: location we are now (when failure is detected). * @param line: location we are now (when failure is detected). */ static void prot_check(struct checked_lock* lock, const char* func, const char* file, int line) { struct protected_area* p = lock->prot; while(p) { if(memcmp(p->hold, p->region, p->size) != 0) { log_hex("memory prev", p->hold, p->size); log_hex("memory here", p->region, p->size); lock_error(lock, func, file, line, "protected area modified"); } p = p->next; } } /** Copy protected memory region */ static void prot_store(struct checked_lock* lock) { struct protected_area* p = lock->prot; while(p) { memcpy(p->hold, p->region, p->size); p = p->next; } } /** get memory held by lock */ size_t lock_get_mem(void* pp) { size_t s; struct checked_lock* lock = *(struct checked_lock**)pp; struct protected_area* p; s = sizeof(struct checked_lock); acquire_locklock(lock, __func__, __FILE__, __LINE__); for(p = lock->prot; p; p = p->next) { s += sizeof(struct protected_area); s += p->size; } LOCKRET(pthread_mutex_unlock(&lock->lock)); return s; } /** write lock trace info to file, while you hold those locks */ static void ordercheck_locklock(struct thr_check* thr, struct checked_lock* lock) { int info[4]; if(!check_locking_order) return; if(!thr->holding_first) return; /* no older lock, no info */ /* write: */ info[0] = thr->holding_first->create_thread; info[1] = thr->holding_first->create_instance; info[2] = lock->create_thread; info[3] = lock->create_instance; if(fwrite(info, 4*sizeof(int), 1, thr->order_info) != 1 || fwrite(lock->holder_file, strlen(lock->holder_file)+1, 1, thr->order_info) != 1 || fwrite(&lock->holder_line, sizeof(int), 1, thr->order_info) != 1) log_err("fwrite: %s", strerror(errno)); } /** write ordercheck lock creation details to file */ static void ordercheck_lockcreate(struct thr_check* thr, struct checked_lock* lock) { /* write: */ int cmd = -1; if(!check_locking_order) return; if( fwrite(&cmd, sizeof(int), 1, thr->order_info) != 1 || fwrite(&lock->create_thread, sizeof(int), 1, thr->order_info) != 1 || fwrite(&lock->create_instance, sizeof(int), 1, thr->order_info) != 1 || fwrite(lock->create_file, strlen(lock->create_file)+1, 1, thr->order_info) != 1 || fwrite(&lock->create_line, sizeof(int), 1, thr->order_info) != 1) log_err("fwrite: %s", strerror(errno)); } /** alloc struct, init lock empty */ void checklock_init(enum check_lock_type type, struct checked_lock** lock, const char* func, const char* file, int line) { struct checked_lock* e = (struct checked_lock*)calloc(1, sizeof(struct checked_lock)); struct thr_check *thr = (struct thr_check*)pthread_getspecific( thr_debug_key); if(!e) fatal_exit("%s %s %d: out of memory", func, file, line); if(!thr) { /* this is called when log_init() calls lock_init() * functions, and the test check code has not yet * been initialised. But luckily, the checklock_start() * routine can be called multiple times without ill effect. */ checklock_start(); thr = (struct thr_check*)pthread_getspecific(thr_debug_key); } if(!thr) fatal_exit("%s %s %d: lock_init no thread info", func, file, line); *lock = e; e->type = type; e->create_func = func; e->create_file = file; e->create_line = line; e->create_thread = thr->num; e->create_instance = thr->locks_created++; ordercheck_lockcreate(thr, e); LOCKRET(pthread_mutex_init(&e->lock, NULL)); switch(e->type) { case check_lock_mutex: LOCKRET(pthread_mutex_init(&e->u.mutex, NULL)); break; case check_lock_spinlock: LOCKRET(pthread_spin_init(&e->u.spinlock, PTHREAD_PROCESS_PRIVATE)); break; case check_lock_rwlock: LOCKRET(pthread_rwlock_init(&e->u.rwlock, NULL)); break; default: log_assert(0); } } /** delete prot items */ static void prot_clear(struct checked_lock* lock) { struct protected_area* p=lock->prot, *np; while(p) { np = p->next; free(p->hold); free(p); p = np; } } /** check if type is OK for the lock given */ static void checktype(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line) { if(!lock) fatal_exit("use of null/deleted lock at %s %s:%d", func, file, line); if(type != lock->type) { lock_error(lock, func, file, line, "wrong lock type"); } } /** check if OK, free struct */ void checklock_destroy(enum check_lock_type type, struct checked_lock** lock, const char* func, const char* file, int line) { const size_t contention_interest = 1; /* promille contented locks */ struct checked_lock* e; if(!lock) return; e = *lock; if(!e) return; checktype(type, e, func, file, line); /* check if delete is OK */ acquire_locklock(e, func, file, line); if(e->hold_count != 0) lock_error(e, func, file, line, "delete while locked."); if(e->wait_count != 0) lock_error(e, func, file, line, "delete while waited on."); prot_check(e, func, file, line); *lock = NULL; /* use after free will fail */ LOCKRET(pthread_mutex_unlock(&e->lock)); /* contention, look at fraction in trouble. */ if(e->history_count > 1 && 1000*e->contention_count/e->history_count > contention_interest) { log_info("lock created %s %s %d has contention %u of %u (%d%%)", e->create_func, e->create_file, e->create_line, (unsigned int)e->contention_count, (unsigned int)e->history_count, (int)(100*e->contention_count/e->history_count)); } /* delete it */ LOCKRET(pthread_mutex_destroy(&e->lock)); prot_clear(e); /* since nobody holds the lock - see check above, no need to unlink * from the thread-held locks list. */ switch(e->type) { case check_lock_mutex: LOCKRET(pthread_mutex_destroy(&e->u.mutex)); break; case check_lock_spinlock: LOCKRET(pthread_spin_destroy(&e->u.spinlock)); break; case check_lock_rwlock: LOCKRET(pthread_rwlock_destroy(&e->u.rwlock)); break; default: log_assert(0); } memset(e, 0, sizeof(struct checked_lock)); free(e); } /** finish acquiring lock, shared between _(rd|wr||)lock() routines */ static void finish_acquire_lock(struct thr_check* thr, struct checked_lock* lock, const char* func, const char* file, int line) { thr->waiting = NULL; lock->wait_count --; lock->holder = thr; lock->hold_count ++; lock->holder_func = func; lock->holder_file = file; lock->holder_line = line; ordercheck_locklock(thr, lock); /* insert in thread lock list, as first */ lock->prev_held_lock[thr->num] = NULL; lock->next_held_lock[thr->num] = thr->holding_first; if(thr->holding_first) /* no need to lock it, since this thread already holds the * lock (since it is on this list) and we only edit thr->num * member in array. So it is safe. */ thr->holding_first->prev_held_lock[thr->num] = lock; else thr->holding_last = lock; thr->holding_first = lock; } /** * Locking routine. * @param type: as passed by user. * @param lock: as passed by user. * @param func: caller location. * @param file: caller location. * @param line: caller location. * @param tryfunc: the pthread_mutex_trylock or similar function. * @param timedfunc: the pthread_mutex_timedlock or similar function. * Uses absolute timeout value. * @param arg: what to pass to tryfunc and timedlock. * @param exclusive: if lock must be exclusive (only one allowed). * @param getwr: if attempts to get writelock (or readlock) for rwlocks. */ static void checklock_lockit(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line, int (*tryfunc)(void*), int (*timedfunc)(void*, struct timespec*), void* arg, int exclusive, int getwr) { int err; int contend = 0; struct thr_check *thr = (struct thr_check*)pthread_getspecific( thr_debug_key); checktype(type, lock, func, file, line); if(!thr) lock_error(lock, func, file, line, "no thread info"); acquire_locklock(lock, func, file, line); lock->wait_count ++; thr->waiting = lock; if(exclusive && lock->hold_count > 0 && lock->holder == thr) lock_error(lock, func, file, line, "thread already owns lock"); if(type==check_lock_rwlock && getwr && lock->writeholder == thr) lock_error(lock, func, file, line, "thread already has wrlock"); LOCKRET(pthread_mutex_unlock(&lock->lock)); /* first try; if busy increase contention counter */ if((err=tryfunc(arg))) { struct timespec to; if(err != EBUSY) log_err("trylock: %s", strerror(err)); to.tv_sec = time(NULL) + CHECK_LOCK_TIMEOUT; to.tv_nsec = 0; if((err=timedfunc(arg, &to))) { if(err == ETIMEDOUT) lock_error(lock, func, file, line, "timeout possible deadlock"); log_err("timedlock: %s", strerror(err)); } contend ++; } /* got the lock */ acquire_locklock(lock, func, file, line); lock->contention_count += contend; lock->history_count++; if(exclusive && lock->hold_count > 0) lock_error(lock, func, file, line, "got nonexclusive lock"); if(type==check_lock_rwlock && getwr && lock->writeholder) lock_error(lock, func, file, line, "got nonexclusive wrlock"); if(type==check_lock_rwlock && getwr) lock->writeholder = thr; /* check the memory areas for unauthorized changes, * between last unlock time and current lock time. * we check while holding the lock (threadsafe). */ if(getwr || exclusive) prot_check(lock, func, file, line); finish_acquire_lock(thr, lock, func, file, line); LOCKRET(pthread_mutex_unlock(&lock->lock)); } /** helper for rdlock: try */ static int try_rd(void* arg) { return pthread_rwlock_tryrdlock((pthread_rwlock_t*)arg); } /** helper for rdlock: timed */ static int timed_rd(void* arg, struct timespec* to) { return pthread_rwlock_timedrdlock((pthread_rwlock_t*)arg, to); } /** check if OK, lock */ void checklock_rdlock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line) { if(key_deleted) return; log_assert(type == check_lock_rwlock); checklock_lockit(type, lock, func, file, line, try_rd, timed_rd, &lock->u.rwlock, 0, 0); } /** helper for wrlock: try */ static int try_wr(void* arg) { return pthread_rwlock_trywrlock((pthread_rwlock_t*)arg); } /** helper for wrlock: timed */ static int timed_wr(void* arg, struct timespec* to) { return pthread_rwlock_timedwrlock((pthread_rwlock_t*)arg, to); } /** check if OK, lock */ void checklock_wrlock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line) { if(key_deleted) return; log_assert(type == check_lock_rwlock); checklock_lockit(type, lock, func, file, line, try_wr, timed_wr, &lock->u.rwlock, 0, 1); } /** helper for lock mutex: try */ static int try_mutex(void* arg) { return pthread_mutex_trylock((pthread_mutex_t*)arg); } /** helper for lock mutex: timed */ static int timed_mutex(void* arg, struct timespec* to) { return pthread_mutex_timedlock((pthread_mutex_t*)arg, to); } /** helper for lock spinlock: try */ static int try_spinlock(void* arg) { return pthread_spin_trylock((pthread_spinlock_t*)arg); } /** helper for lock spinlock: timed */ static int timed_spinlock(void* arg, struct timespec* to) { int err; /* spin for 5 seconds. (ouch for the CPU, but it beats forever) */ while( (err=try_spinlock(arg)) == EBUSY) { #ifndef S_SPLINT_S if(time(NULL) >= to->tv_sec) return ETIMEDOUT; usleep(1000); /* in 1/1000000s of a second */ #endif } return err; } /** check if OK, lock */ void checklock_lock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line) { if(key_deleted) return; log_assert(type != check_lock_rwlock); switch(type) { case check_lock_mutex: checklock_lockit(type, lock, func, file, line, try_mutex, timed_mutex, &lock->u.mutex, 1, 0); break; case check_lock_spinlock: /* void* cast needed because 'volatile' on some OS */ checklock_lockit(type, lock, func, file, line, try_spinlock, timed_spinlock, (void*)&lock->u.spinlock, 1, 0); break; default: log_assert(0); } } /** check if OK, unlock */ void checklock_unlock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line) { struct thr_check *thr; if(key_deleted) return; thr = (struct thr_check*)pthread_getspecific(thr_debug_key); checktype(type, lock, func, file, line); if(!thr) lock_error(lock, func, file, line, "no thread info"); acquire_locklock(lock, func, file, line); /* was this thread even holding this lock? */ if(thr->holding_first != lock && lock->prev_held_lock[thr->num] == NULL) { lock_error(lock, func, file, line, "unlock nonlocked lock"); } if(lock->hold_count <= 0) lock_error(lock, func, file, line, "too many unlocks"); /* store this point as last touched by */ lock->holder = thr; lock->hold_count --; lock->holder_func = func; lock->holder_file = file; lock->holder_line = line; /* delete from thread holder list */ /* no need to lock other lockstructs, because they are all on the * held-locks list, and this thread holds their locks. * we only touch the thr->num members, so it is safe. */ if(thr->holding_first == lock) thr->holding_first = lock->next_held_lock[thr->num]; if(thr->holding_last == lock) thr->holding_last = lock->prev_held_lock[thr->num]; if(lock->next_held_lock[thr->num]) lock->next_held_lock[thr->num]->prev_held_lock[thr->num] = lock->prev_held_lock[thr->num]; if(lock->prev_held_lock[thr->num]) lock->prev_held_lock[thr->num]->next_held_lock[thr->num] = lock->next_held_lock[thr->num]; lock->next_held_lock[thr->num] = NULL; lock->prev_held_lock[thr->num] = NULL; if(type==check_lock_rwlock && lock->writeholder == thr) { lock->writeholder = NULL; prot_store(lock); } else if(type != check_lock_rwlock) { /* store memory areas that are protected, for later checks */ prot_store(lock); } LOCKRET(pthread_mutex_unlock(&lock->lock)); /* unlock it */ switch(type) { case check_lock_mutex: LOCKRET(pthread_mutex_unlock(&lock->u.mutex)); break; case check_lock_spinlock: LOCKRET(pthread_spin_unlock(&lock->u.spinlock)); break; case check_lock_rwlock: LOCKRET(pthread_rwlock_unlock(&lock->u.rwlock)); break; default: log_assert(0); } } /** open order info debug file, thr->num must be valid */ static void open_lockorder(struct thr_check* thr) { char buf[24]; time_t t; snprintf(buf, sizeof(buf), "ublocktrace.%d", thr->num); thr->order_info = fopen(buf, "w"); if(!thr->order_info) fatal_exit("could not open %s: %s", buf, strerror(errno)); thr->locks_created = 0; t = time(NULL); /* write: */ if(fwrite(&t, sizeof(t), 1, thr->order_info) != 1 || fwrite(&thr->num, sizeof(thr->num), 1, thr->order_info) != 1 || fwrite(&check_lock_pid, sizeof(check_lock_pid), 1, thr->order_info) != 1) log_err("fwrite: %s", strerror(errno)); } /** checklock thread main, Inits thread structure */ static void* checklock_main(void* arg) { struct thr_check* thr = (struct thr_check*)arg; void* ret; thr->id = pthread_self(); /* Hack to get same numbers as in log file */ thr->num = *(int*)(thr->arg); log_assert(thr->num < THRDEBUG_MAX_THREADS); /* as an aside, due to this, won't work for libunbound bg thread */ if(thread_infos[thr->num] != NULL) log_warn("thread warning, thr->num %d not NULL", thr->num); thread_infos[thr->num] = thr; LOCKRET(pthread_setspecific(thr_debug_key, thr)); if(check_locking_order) open_lockorder(thr); ret = thr->func(thr->arg); thread_infos[thr->num] = NULL; if(check_locking_order) fclose(thr->order_info); free(thr); return ret; } /** init the main thread */ void checklock_start(void) { if(key_deleted) return; if(!key_created) { struct thr_check* thisthr = (struct thr_check*)calloc(1, sizeof(struct thr_check)); if(!thisthr) fatal_exit("thrcreate: out of memory"); key_created = 1; check_lock_pid = getpid(); LOCKRET(pthread_key_create(&thr_debug_key, NULL)); LOCKRET(pthread_setspecific(thr_debug_key, thisthr)); thread_infos[0] = thisthr; if(check_locking_order) open_lockorder(thisthr); } } /** stop checklocks */ void checklock_stop(void) { if(key_created) { int i; key_deleted = 1; if(check_locking_order) fclose(thread_infos[0]->order_info); free(thread_infos[0]); thread_infos[0] = NULL; for(i = 0; i < THRDEBUG_MAX_THREADS; i++) log_assert(thread_infos[i] == NULL); /* should have been cleaned up. */ LOCKRET(pthread_key_delete(thr_debug_key)); key_created = 0; } } /** allocate debug info and create thread */ void checklock_thrcreate(pthread_t* id, void* (*func)(void*), void* arg) { struct thr_check* thr = (struct thr_check*)calloc(1, sizeof(struct thr_check)); if(!thr) fatal_exit("thrcreate: out of memory"); if(!key_created) { checklock_start(); } thr->func = func; thr->arg = arg; LOCKRET(pthread_create(id, NULL, checklock_main, thr)); } /** count number of thread infos */ static int count_thread_infos(void) { int cnt = 0; int i; for(i=0; icreate_thread, lock->create_instance, lock->create_func, lock->create_file, lock->create_line); log_info("lock type: %s", (lock->type==check_lock_mutex)?"mutex": ( (lock->type==check_lock_spinlock)?"spinlock": ( (lock->type==check_lock_rwlock)?"rwlock": "badtype"))); log_info("lock contention %u, history:%u, hold:%d, wait:%d", (unsigned)lock->contention_count, (unsigned)lock->history_count, lock->hold_count, lock->wait_count); log_info("last touch %s %s %d", lock->holder_func, lock->holder_file, lock->holder_line); log_info("holder thread %d, writeholder thread %d", lock->holder?lock->holder->num:-1, lock->writeholder?lock->writeholder->num:-1); } /** print debug locks held by a thread */ static void held_debug_info(struct thr_check* thr, struct checked_lock* lock) { if(!lock) return; lock_debug_info(lock); held_debug_info(thr, lock->next_held_lock[thr->num]); } /** print debug info for a thread */ static void thread_debug_info(struct thr_check* thr) { struct checked_lock* w = NULL; struct checked_lock* f = NULL; struct checked_lock* l = NULL; if(!thr) return; log_info("pthread id is %x", (int)thr->id); log_info("thread func is %llx", (unsigned long long)(size_t)thr->func); log_info("thread arg is %llx (%d)", (unsigned long long)(size_t)thr->arg, (thr->arg?*(int*)thr->arg:0)); log_info("thread num is %d", thr->num); log_info("locks created %d", thr->locks_created); log_info("open file for lockinfo: %s", thr->order_info?"yes, flushing":"no"); fflush(thr->order_info); w = thr->waiting; f = thr->holding_first; l = thr->holding_last; log_info("thread waiting for a lock: %s %llx", w?"yes":"no", (unsigned long long)(size_t)w); lock_debug_info(w); log_info("thread holding first: %s, last: %s", f?"yes":"no", l?"yes":"no"); held_debug_info(thr, f); } static void total_debug_info(void) { int i; log_info("checklocks: supervising %d threads.", count_thread_infos()); if(!key_created) { log_info("No thread debug key created yet"); } for(i=0; i. unbound-1.13.1/testcode/unitregional.c0000644000175000017500000001532614010434640017364 0ustar wouterwouter/* * testcode/unitregional.c - unit test for regional allocator. * * Copyright (c) 2010, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Tests the regional special purpose allocator. */ #include "config.h" #include "testcode/unitmain.h" #include "util/log.h" #include "util/regional.h" /** test regional corner cases, zero, one, end of structure */ static void corner_cases(struct regional* r) { size_t s; /* shadow count of allocated memory */ void* a; size_t minsize = sizeof(uint64_t); #ifndef UNBOUND_ALLOC_NONREGIONAL size_t mysize; #endif char* str; unit_assert(r); /* alloc cases: * 0, 1, 2. * smaller than LARGE_OBJECT_SIZE. * smaller but does not fit in remainder in regional. * smaller but exactly fits in remainder of regional. * size is remainder of regional - 8. * size is remainder of regional + 8. * larger than LARGE_OBJECT_SIZE. */ s = sizeof(struct regional); unit_assert((s % minsize) == 0); unit_assert(r->available == r->first_size - s); unit_assert(r->large_list == NULL); unit_assert(r->next == NULL); /* Note an alloc of 0 gets a pointer to current last * position (where you should then use 0 bytes) */ a = regional_alloc(r, 0); unit_assert(a); s+=0; unit_assert(r->available == r->first_size - s); #ifndef UNBOUND_ALLOC_NONREGIONAL a = regional_alloc(r, 1); unit_assert(a); memset(a, 0x42, 1); s+=minsize; unit_assert(r->available == r->first_size - s); a = regional_alloc(r, 2); unit_assert(a); memset(a, 0x42, 2); s+=minsize; unit_assert(r->available == r->first_size - s); a = regional_alloc(r, 128); unit_assert(a); memset(a, 0x42, 128); s+=128; unit_assert(r->available == r->first_size - s); unit_assert(r->large_list == NULL); a = regional_alloc(r, 10240); unit_assert(a); unit_assert(r->large_list != NULL); memset(a, 0x42, 10240); /* s does not change */ unit_assert(r->available == r->first_size - s); unit_assert(r->total_large == 10240+minsize); /* go towards the end of the current chunk */ while(r->available > 1024) { a = regional_alloc(r, 1024); unit_assert(a); memset(a, 0x42, 1024); s += 1024; unit_assert(r->available == r->first_size - s); } unit_assert(r->next == NULL); mysize = 1280; /* does not fit in current chunk */ a = regional_alloc(r, mysize); memset(a, 0x42, mysize); unit_assert(r->next != NULL); unit_assert(a); /* go towards the end of the current chunk */ while(r->available > 864) { a = regional_alloc(r, 864); unit_assert(a); memset(a, 0x42, 864); s += 864; } mysize = r->available; /* exactly fits */ a = regional_alloc(r, mysize); memset(a, 0x42, mysize); unit_assert(a); unit_assert(r->available == 0); /* implementation does not go ahead*/ a = regional_alloc(r, 8192); /* another large allocation */ unit_assert(a); memset(a, 0x42, 8192); unit_assert(r->available == 0); unit_assert(r->total_large == 10240 + 8192 + 2*minsize); a = regional_alloc(r, 32); /* make new chunk */ unit_assert(a); memset(a, 0x42, 32); unit_assert(r->available > 0); unit_assert(r->total_large == 10240 + 8192 + 2*minsize); /* go towards the end of the current chunk */ while(r->available > 1320) { a = regional_alloc(r, 1320); unit_assert(a); memset(a, 0x42, 1320); s += 1320; } mysize = r->available + 8; /* exact + 8 ; does not fit */ a = regional_alloc(r, mysize); memset(a, 0x42, mysize); unit_assert(a); unit_assert(r->available > 0); /* new chunk */ /* go towards the end of the current chunk */ while(r->available > 1480) { a = regional_alloc(r, 1480); unit_assert(a); memset(a, 0x42, 1480); s += 1480; } mysize = r->available - 8; /* exact - 8 ; fits. */ a = regional_alloc(r, mysize); memset(a, 0x42, mysize); unit_assert(a); unit_assert(r->available == 8); #endif /* UNBOUND_ALLOC_NONREGIONAL */ /* test if really copied over */ str = "test12345"; a = regional_alloc_init(r, str, 8); unit_assert(a); unit_assert(memcmp(a, str, 8) == 0); /* test if really zeroed */ a = regional_alloc_zero(r, 32); str="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; unit_assert(a); unit_assert(memcmp(a, str, 32) == 0); /* test if copied over (and null byte) */ str = "an interesting string"; a = regional_strdup(r, str); unit_assert(a); unit_assert(memcmp(a, str, strlen(str)+1) == 0); regional_free_all(r); } /** test specific cases */ static void specific_cases(void) { struct regional* r = regional_create(); corner_cases(r); regional_destroy(r); r = regional_create_custom(2048); /* a small regional */ unit_assert(r->first_size == 2048); unit_assert(regional_get_mem(r) == 2048); corner_cases(r); unit_assert(regional_get_mem(r) == 2048); regional_destroy(r); } /** put random stuff in a region and free it */ static void burden_test(size_t max) { size_t get; void* a; int i; struct regional* r = regional_create_custom(2048); for(i=0; i<1000; i++) { get = random() % max; a = regional_alloc(r, get); unit_assert(a); memset(a, 0x54, get); } regional_free_all(r); regional_destroy(r); } /** randomly allocate stuff */ static void random_burden(void) { size_t max_alloc = 2048 + 128; /* small chance of LARGE */ int i; for(i=0; i<100; i++) burden_test(max_alloc); } void regional_test(void) { unit_show_feature("regional"); specific_cases(); random_burden(); } unbound-1.13.1/testcode/memstats.c0000644000175000017500000001476414010434640016526 0ustar wouterwouter/* * testcode/memstats.c - debug tool to show memory allocation statistics. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program reads a log file and prints the memory allocation summed * up. */ #include "config.h" #include "util/log.h" #include "util/rbtree.h" #include "util/locks.h" #include "util/fptr_wlist.h" #include /** * The allocation statistics block */ struct codeline { /** rbtree node */ rbnode_type node; /** the name of the file:linenumber */ char* codeline; /** the name of the function */ char* func; /** number of bytes allocated */ uint64_t alloc; /** number of bytes freed */ uint64_t free; /** number allocations and frees */ uint64_t calls; }; /** print usage and exit */ static void usage(void) { printf("usage: memstats \n"); printf("statistics are printed on stdout.\n"); exit(1); } /** match logfile line to see if it needs accounting processing */ static int match(char* line) { /* f.e.: * [1187340064] unbound[24604:0] info: ul/rb.c:81 r_create malloc(12) * 0123456789 123456789 123456789 123456789 * But now also: * Sep 16 15:18:20 unbound[1:0] info: ul/nh.c:143 memdup malloc(11) */ if(strlen(line) < 32) /* up to 'info: ' */ return 0; if(!strstr(line, " info: ")) return 0; if(strstr(line, "info: stat ")) return 0; /* skip the hex dumps */ if(strstr(line+30, "malloc(")) return 1; else if(strstr(line+30, "calloc(")) return 1; /* skip reallocs */ return 0; } /** find or alloc codeline in tree */ static struct codeline* get_codeline(rbtree_type* tree, char* key, char* func) { struct codeline* cl = (struct codeline*)rbtree_search(tree, key); if(!cl) { cl = calloc(1, sizeof(*cl)); if(!cl) return 0; cl->codeline = strdup(key); if(!cl->codeline) { free(cl); return 0; } cl->func = strdup(func); if(!cl->func) { free(cl->codeline); free(cl); return 0; } cl->alloc = 0; cl->node.key = cl->codeline; (void)rbtree_insert(tree, &cl->node); } return cl; } /** read up the malloc stats */ static void read_malloc_stat(char* line, rbtree_type* tree) { char codeline[10240]; char name[10240]; int skip = 0; long num = 0; struct codeline* cl = 0; line = strstr(line, "info: ")+6; if(sscanf(line, "%s %s %n", codeline, name, &skip) != 2) { printf("%s\n", line); fatal_exit("unhandled malloc"); } if(sscanf(line+skip+7, "%ld", &num) != 1) { printf("%s\n%s\n", line, line+skip+7); fatal_exit("unhandled malloc"); } cl = get_codeline(tree, codeline, name); if(!cl) fatal_exit("alloc failure"); cl->alloc += num; cl->calls ++; } /** read up the calloc stats */ static void read_calloc_stat(char* line, rbtree_type* tree) { char codeline[10240]; char name[10240]; int skip = 0; long num = 0, sz = 0; struct codeline* cl = 0; line = strstr(line, "info: ")+6; if(sscanf(line, "%s %s %n", codeline, name, &skip) != 2) { printf("%s\n", line); fatal_exit("unhandled calloc"); } if(sscanf(line+skip+7, "%ld, %ld", &num, &sz) != 2) { printf("%s\n%s\n", line, line+skip+7); fatal_exit("unhandled calloc"); } cl = get_codeline(tree, codeline, name); if(!cl) fatal_exit("alloc failure"); cl->alloc += num*sz; cl->calls ++; } /** get size of file */ static off_t get_file_size(const char* fname) { struct stat s; if(stat(fname, &s) < 0) { fatal_exit("could not stat %s: %s", fname, strerror(errno)); } return s.st_size; } /** read the logfile */ static void readfile(rbtree_type* tree, const char* fname) { off_t total = get_file_size(fname); off_t done = (off_t)0; int report = 0; FILE* in = fopen(fname, "r"); char buf[102400]; if(!in) fatal_exit("could not open %s: %s", fname, strerror(errno)); printf("Reading %s of size " ARG_LL "d\n", fname, (long long)total); while(fgets(buf, 102400, in)) { buf[102400-1] = 0; done += (off_t)strlen(buf); /* progress count */ if((int)(((double)done / (double)total)*100.) > report) { report = (int)(((double)done / (double)total)*100.); fprintf(stderr, " %d%%", report); } if(!match(buf)) continue; else if(strstr(buf+30, "malloc(")) read_malloc_stat(buf, tree); else if(strstr(buf+30, "calloc(")) read_calloc_stat(buf, tree); else { printf("%s\n", buf); fatal_exit("unhandled input"); } } fprintf(stderr, " done\n"); fclose(in); } /** print memory stats */ static void printstats(rbtree_type* tree) { struct codeline* cl; uint64_t total = 0, tcalls = 0; RBTREE_FOR(cl, struct codeline*, tree) { printf("%12lld / %8lld in %s %s\n", (long long)cl->alloc, (long long)cl->calls, cl->codeline, cl->func); total += cl->alloc; tcalls += cl->calls; } printf("------------\n"); printf("%12lld / %8lld total in %ld code lines\n", (long long)total, (long long)tcalls, (long)tree->count); printf("\n"); } /** main program */ int main(int argc, const char* argv[]) { rbtree_type* tree = 0; log_init(NULL, 0, 0); if(argc != 2) { usage(); } tree = rbtree_create(codeline_cmp); if(!tree) fatal_exit("alloc failure"); readfile(tree, argv[1]); printstats(tree); return 0; } unbound-1.13.1/testcode/perf.c0000644000175000017500000004014014010434640015610 0ustar wouterwouter/* * testcode/perf.c - debug program to estimate name server performance. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program estimates DNS name server performance. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #include #include "util/log.h" #include "util/locks.h" #include "util/net_help.h" #include "util/data/msgencode.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" #include /** usage information for perf */ static void usage(char* nm) { printf("usage: %s [options] server\n", nm); printf("server: ip address of server, IP4 or IP6.\n"); printf(" If not on port %d add @port.\n", UNBOUND_DNS_PORT); printf("-d sec duration of test in whole seconds (0: wait for ^C)\n"); printf("-a str query to ask, interpreted as a line from qfile\n"); printf("-f fnm query list to read from file\n"); printf(" every line has format: qname qclass qtype [+-]{E}\n"); printf(" where + means RD set, E means EDNS enabled\n"); printf("-q quiet mode, print only final qps\n"); exit(1); } struct perfinfo; struct perfio; /** Global info for perf */ struct perfinfo { /** need to exit */ volatile int exit; /** all purpose buffer (for UDP send and receive) */ sldns_buffer* buf; /** destination */ struct sockaddr_storage dest; /** length of dest socket addr */ socklen_t destlen; /** when did this time slice start */ struct timeval since; /** number of queries received in that time */ size_t numrecv; /** number of queries sent out in that time */ size_t numsent; /** duration of test in seconds */ int duration; /** quiet mode? */ int quiet; /** when did the total test start */ struct timeval start; /** total number recvd */ size_t total_recv; /** total number sent */ size_t total_sent; /** numbers by rcode */ size_t by_rcode[32]; /** number of I/O ports */ size_t io_num; /** I/O ports array */ struct perfio* io; /** max fd value in io ports */ int maxfd; /** readset */ fd_set rset; /** size of querylist */ size_t qlist_size; /** allocated size of qlist array */ size_t qlist_capacity; /** list of query packets (data) */ uint8_t** qlist_data; /** list of query packets (length of a packet) */ size_t* qlist_len; /** index into querylist, for walking the list */ size_t qlist_idx; }; /** I/O port for perf */ struct perfio { /** id number */ size_t id; /** file descriptor of socket */ int fd; /** timeout value */ struct timeval timeout; /** ptr back to perfinfo */ struct perfinfo* info; }; /** number of msec between starting io ports */ #define START_IO_INTERVAL 10 /** number of msec timeout on io ports */ #define IO_TIMEOUT 10 /** signal handler global info */ static struct perfinfo* sig_info; /** signal handler for user quit */ static RETSIGTYPE perf_sigh(int sig) { log_assert(sig_info); if(!sig_info->quiet) printf("exit on signal %d\n", sig); sig_info->exit = 1; } /** timeval compare, t1 < t2 */ static int perf_tv_smaller(struct timeval* t1, struct timeval* t2) { #ifndef S_SPLINT_S if(t1->tv_sec < t2->tv_sec) return 1; if(t1->tv_sec == t2->tv_sec && t1->tv_usec < t2->tv_usec) return 1; #endif return 0; } /** timeval add, t1 += t2 */ static void perf_tv_add(struct timeval* t1, struct timeval* t2) { #ifndef S_SPLINT_S t1->tv_sec += t2->tv_sec; t1->tv_usec += t2->tv_usec; while(t1->tv_usec >= 1000000) { t1->tv_usec -= 1000000; t1->tv_sec++; } #endif } /** timeval subtract, t1 -= t2 */ static void perf_tv_subtract(struct timeval* t1, struct timeval* t2) { #ifndef S_SPLINT_S t1->tv_sec -= t2->tv_sec; if(t1->tv_usec >= t2->tv_usec) { t1->tv_usec -= t2->tv_usec; } else { t1->tv_sec--; t1->tv_usec = 1000000-(t2->tv_usec-t1->tv_usec); } #endif } /** setup perf test environment */ static void perfsetup(struct perfinfo* info) { size_t i; if(gettimeofday(&info->start, NULL) < 0) fatal_exit("gettimeofday: %s", strerror(errno)); sig_info = info; if( signal(SIGINT, perf_sigh) == SIG_ERR || #ifdef SIGQUIT signal(SIGQUIT, perf_sigh) == SIG_ERR || #endif #ifdef SIGHUP signal(SIGHUP, perf_sigh) == SIG_ERR || #endif #ifdef SIGBREAK signal(SIGBREAK, perf_sigh) == SIG_ERR || #endif signal(SIGTERM, perf_sigh) == SIG_ERR) fatal_exit("could not bind to signal"); info->io = (struct perfio*)calloc(sizeof(struct perfio), info->io_num); if(!info->io) fatal_exit("out of memory"); #ifndef S_SPLINT_S FD_ZERO(&info->rset); #endif info->since = info->start; for(i=0; iio_num; i++) { info->io[i].id = i; info->io[i].info = info; info->io[i].fd = socket( addr_is_ip6(&info->dest, info->destlen)? AF_INET6:AF_INET, SOCK_DGRAM, 0); if(info->io[i].fd == -1) { fatal_exit("socket: %s", sock_strerror(errno)); } if(info->io[i].fd > info->maxfd) info->maxfd = info->io[i].fd; #ifndef S_SPLINT_S FD_SET(FD_SET_T info->io[i].fd, &info->rset); info->io[i].timeout.tv_usec = ((START_IO_INTERVAL*i)%1000) *1000; info->io[i].timeout.tv_sec = (START_IO_INTERVAL*i)/1000; perf_tv_add(&info->io[i].timeout, &info->since); #endif } } /** cleanup perf test environment */ static void perffree(struct perfinfo* info) { size_t i; if(!info) return; if(info->io) { for(i=0; iio_num; i++) { sock_close(info->io[i].fd); } free(info->io); } for(i=0; iqlist_size; i++) free(info->qlist_data[i]); free(info->qlist_data); free(info->qlist_len); } /** send new query for io */ static void perfsend(struct perfinfo* info, size_t n, struct timeval* now) { ssize_t r; r = sendto(info->io[n].fd, (void*)info->qlist_data[info->qlist_idx], info->qlist_len[info->qlist_idx], 0, (struct sockaddr*)&info->dest, info->destlen); /*log_hex("send", info->qlist_data[info->qlist_idx], info->qlist_len[info->qlist_idx]);*/ if(r == -1) { log_err("sendto: %s", sock_strerror(errno)); } else if(r != (ssize_t)info->qlist_len[info->qlist_idx]) { log_err("partial sendto"); } info->qlist_idx = (info->qlist_idx+1) % info->qlist_size; info->numsent++; info->io[n].timeout.tv_sec = IO_TIMEOUT/1000; info->io[n].timeout.tv_usec = (IO_TIMEOUT%1000)*1000; perf_tv_add(&info->io[n].timeout, now); } /** got reply for io */ static void perfreply(struct perfinfo* info, size_t n, struct timeval* now) { ssize_t r; r = recv(info->io[n].fd, (void*)sldns_buffer_begin(info->buf), sldns_buffer_capacity(info->buf), 0); if(r == -1) { log_err("recv: %s", sock_strerror(errno)); } else { info->by_rcode[LDNS_RCODE_WIRE(sldns_buffer_begin( info->buf))]++; info->numrecv++; } /*sldns_buffer_set_limit(info->buf, r); log_buf(0, "reply", info->buf);*/ perfsend(info, n, now); } /** got timeout for io */ static void perftimeout(struct perfinfo* info, size_t n, struct timeval* now) { /* may not be a dropped packet, this is also used to start * up the sending IOs */ perfsend(info, n, now); } /** print nice stats about qps */ static void stat_printout(struct perfinfo* info, struct timeval* now, struct timeval* elapsed) { /* calculate qps */ double dt, qps = 0; #ifndef S_SPLINT_S dt = (double)(elapsed->tv_sec*1000000 + elapsed->tv_usec) / 1000000; #endif if(dt > 0.001) qps = (double)(info->numrecv) / dt; if(!info->quiet) printf("qps: %g\n", qps); /* setup next slice */ info->since = *now; info->total_sent += info->numsent; info->total_recv += info->numrecv; info->numrecv = 0; info->numsent = 0; } /** wait for new events for performance test */ static void perfselect(struct perfinfo* info) { fd_set rset = info->rset; struct timeval timeout, now; int num; size_t i; if(gettimeofday(&now, NULL) < 0) fatal_exit("gettimeofday: %s", strerror(errno)); /* time to exit? */ if(info->duration > 0) { timeout = now; perf_tv_subtract(&timeout, &info->start); if((int)timeout.tv_sec >= info->duration) { info->exit = 1; return; } } /* time for stats printout? */ timeout = now; perf_tv_subtract(&timeout, &info->since); if(timeout.tv_sec > 0) { stat_printout(info, &now, &timeout); } /* see what is closest port to timeout; or if there is a timeout */ timeout = info->io[0].timeout; for(i=0; iio_num; i++) { if(perf_tv_smaller(&info->io[i].timeout, &now)) { perftimeout(info, i, &now); return; } if(perf_tv_smaller(&info->io[i].timeout, &timeout)) { timeout = info->io[i].timeout; } } perf_tv_subtract(&timeout, &now); num = select(info->maxfd+1, &rset, NULL, NULL, &timeout); if(num == -1) { if(errno == EAGAIN || errno == EINTR) return; log_err("select: %s", strerror(errno)); } /* handle new events */ for(i=0; num && iio_num; i++) { if(FD_ISSET(info->io[i].fd, &rset)) { perfreply(info, i, &now); num--; } } } /** show end stats */ static void perfendstats(struct perfinfo* info) { double dt, qps; struct timeval timeout, now; int i, lost; if(gettimeofday(&now, NULL) < 0) fatal_exit("gettimeofday: %s", strerror(errno)); timeout = now; perf_tv_subtract(&timeout, &info->since); stat_printout(info, &now, &timeout); timeout = now; perf_tv_subtract(&timeout, &info->start); dt = (double)(timeout.tv_sec*1000000 + timeout.tv_usec) / 1000000.0; qps = (double)(info->total_recv) / dt; lost = (int)(info->total_sent - info->total_recv) - (int)info->io_num; if(!info->quiet) { printf("overall time: %g sec\n", (double)timeout.tv_sec + (double)timeout.tv_usec/1000000.); if(lost > 0) printf("Packets lost: %d\n", (int)lost); for(i=0; i<(int)(sizeof(info->by_rcode)/sizeof(size_t)); i++) { if(info->by_rcode[i] > 0) { char rc[16]; sldns_wire2str_rcode_buf(i, rc, sizeof(rc)); printf("%d(%5s): %u replies\n", i, rc, (unsigned)info->by_rcode[i]); } } } printf("average qps: %g\n", qps); } /** perform the performance test */ static void perfmain(struct perfinfo* info) { perfsetup(info); while(!info->exit) { perfselect(info); } perfendstats(info); perffree(info); } /** parse a query line to a packet into buffer */ static int qlist_parse_line(sldns_buffer* buf, char* p) { char nm[1024], cl[1024], tp[1024], fl[1024]; int r; int rec = 1, edns = 0; struct query_info qinfo; nm[0] = 0; cl[0] = 0; tp[0] = 0; fl[0] = 0; r = sscanf(p, " %1023s %1023s %1023s %1023s", nm, cl, tp, fl); if(r != 3 && r != 4) return 0; /*printf("nm='%s', cl='%s', tp='%s', fl='%s'\n", nm, cl, tp, fl);*/ if(strcmp(tp, "IN") == 0 || strcmp(tp, "CH") == 0) { qinfo.qtype = sldns_get_rr_type_by_name(cl); qinfo.qclass = sldns_get_rr_class_by_name(tp); } else { qinfo.qtype = sldns_get_rr_type_by_name(tp); qinfo.qclass = sldns_get_rr_class_by_name(cl); } if(fl[0] == '+') rec = 1; else if(fl[0] == '-') rec = 0; else if(fl[0] == 'E') edns = 1; if((fl[0] == '+' || fl[0] == '-') && fl[1] == 'E') edns = 1; qinfo.qname = sldns_str2wire_dname(nm, &qinfo.qname_len); if(!qinfo.qname) return 0; qinfo.local_alias = NULL; qinfo_query_encode(buf, &qinfo); sldns_buffer_write_u16_at(buf, 0, 0); /* zero ID */ if(rec) LDNS_RD_SET(sldns_buffer_begin(buf)); if(edns) { struct edns_data ed; memset(&ed, 0, sizeof(ed)); ed.edns_present = 1; ed.udp_size = EDNS_ADVERTISED_SIZE; /* Set DO bit in all EDNS datagrams ... */ ed.bits = EDNS_DO; attach_edns_record(buf, &ed); } free(qinfo.qname); return 1; } /** grow query list capacity */ static void qlist_grow_capacity(struct perfinfo* info) { size_t newcap = (size_t)((info->qlist_capacity==0)?16: info->qlist_capacity*2); uint8_t** d = (uint8_t**)calloc(sizeof(uint8_t*), newcap); size_t* l = (size_t*)calloc(sizeof(size_t), newcap); if(!d || !l) fatal_exit("out of memory"); if(info->qlist_data && info->qlist_capacity) memcpy(d, info->qlist_data, sizeof(uint8_t*)* info->qlist_capacity); if(info->qlist_len && info->qlist_capacity) memcpy(l, info->qlist_len, sizeof(size_t)* info->qlist_capacity); free(info->qlist_data); free(info->qlist_len); info->qlist_data = d; info->qlist_len = l; info->qlist_capacity = newcap; } /** setup query list in info */ static void qlist_add_line(struct perfinfo* info, char* line, int no) { if(!qlist_parse_line(info->buf, line)) { printf("error parsing query %d: %s\n", no, line); exit(1); } sldns_buffer_write_u16_at(info->buf, 0, (uint16_t)info->qlist_size); if(info->qlist_size + 1 > info->qlist_capacity) { qlist_grow_capacity(info); } info->qlist_len[info->qlist_size] = sldns_buffer_limit(info->buf); info->qlist_data[info->qlist_size] = memdup( sldns_buffer_begin(info->buf), sldns_buffer_limit(info->buf)); if(!info->qlist_data[info->qlist_size]) fatal_exit("out of memory"); info->qlist_size ++; } /** setup query list in info */ static void qlist_read_file(struct perfinfo* info, char* fname) { char buf[1024]; char *p; FILE* in = fopen(fname, "r"); int lineno = 0; if(!in) { perror(fname); exit(1); } while(fgets(buf, (int)sizeof(buf), in)) { lineno++; buf[sizeof(buf)-1] = 0; p = buf; while(*p == ' ' || *p == '\t') p++; if(p[0] == 0 || p[0] == '\n' || p[0] == ';' || p[0] == '#') continue; qlist_add_line(info, p, lineno); } printf("Read %s, got %u queries\n", fname, (unsigned)info->qlist_size); fclose(in); } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** main program for perf */ int main(int argc, char* argv[]) { char* nm = argv[0]; int c; struct perfinfo info; #ifdef USE_WINSOCK int r; WSADATA wsa_data; #endif /* defaults */ memset(&info, 0, sizeof(info)); info.io_num = 16; log_init(NULL, 0, NULL); log_ident_set("perf"); checklock_start(); #ifdef USE_WINSOCK if((r = WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0) fatal_exit("WSAStartup failed: %s", wsa_strerror(r)); #endif info.buf = sldns_buffer_new(65553); if(!info.buf) fatal_exit("out of memory"); /* parse the options */ while( (c=getopt(argc, argv, "d:ha:f:q")) != -1) { switch(c) { case 'q': info.quiet = 1; break; case 'd': if(atoi(optarg)==0 && strcmp(optarg, "0")!=0) { printf("-d not a number %s", optarg); exit(1); } info.duration = atoi(optarg); break; case 'a': qlist_add_line(&info, optarg, 0); break; case 'f': qlist_read_file(&info, optarg); break; case '?': case 'h': default: usage(nm); } } argc -= optind; argv += optind; if(argc != 1) { printf("error: pass server IP address on commandline.\n"); usage(nm); } if(!extstrtoaddr(argv[0], &info.dest, &info.destlen)) { printf("Could not parse ip: %s\n", argv[0]); exit(1); } if(info.qlist_size == 0) { printf("No queries to make, use -f or -a.\n"); exit(1); } /* do the performance test */ perfmain(&info); sldns_buffer_free(info.buf); #ifdef USE_WINSOCK WSACleanup(); #endif checklock_stop(); return 0; } unbound-1.13.1/testcode/testpkts.c0000644000175000017500000013320514010434640016542 0ustar wouterwouter/* * testpkts. Data file parse for test packets, and query matching. * * Data storage for specially crafted replies for testing purposes. * * (c) NLnet Labs, 2005, 2006, 2007, 2008 * See the file LICENSE for the license */ /** * \file * This is a debugging aid. It is not efficient, especially * with a long config file, but it can give any reply to any query. * This can help the developer pre-script replies for queries. * * You can specify a packet RR by RR with header flags to return. * * Missing features: * - matching content different from reply content. * - find way to adjust mangled packets? */ #include "config.h" struct sockaddr_storage; #include #include #include #include "testcode/testpkts.h" #include "util/net_help.h" #include "sldns/sbuffer.h" #include "sldns/rrdef.h" #include "sldns/pkthdr.h" #include "sldns/str2wire.h" #include "sldns/wire2str.h" /** max size of a packet */ #define MAX_PACKETLEN 65536 /** max line length */ #define MAX_LINE 10240 /** string to show in warnings and errors */ static const char* prog_name = "testpkts"; #ifndef UTIL_LOG_H /** verbosity definition for compat */ enum verbosity_value { NO_VERBOSE=0 }; #endif /** logging routine, provided by caller */ void verbose(enum verbosity_value lvl, const char* msg, ...) ATTR_FORMAT(printf, 2, 3); static void error(const char* msg, ...) ATTR_NORETURN; /** print error and exit */ static void error(const char* msg, ...) { va_list args; va_start(args, msg); fprintf(stderr, "%s error: ", prog_name); vfprintf(stderr, msg, args); fprintf(stderr, "\n"); fflush(stderr); va_end(args); exit(EXIT_FAILURE); } /** return if string is empty or comment */ static int isendline(char c) { if(c == ';' || c == '#' || c == '\n' || c == 0) return 1; return 0; } /** true if the string starts with the keyword given. Moves the str ahead. * @param str: before keyword, afterwards after keyword and spaces. * @param keyword: the keyword to match * @return: true if keyword present. False otherwise, and str unchanged. */ static int str_keyword(char** str, const char* keyword) { size_t len = strlen(keyword); assert(str && keyword); if(strncmp(*str, keyword, len) != 0) return 0; *str += len; while(isspace((unsigned char)**str)) (*str)++; return 1; } /** Add reply packet to entry */ static struct reply_packet* entry_add_reply(struct entry* entry) { struct reply_packet* pkt = (struct reply_packet*)malloc( sizeof(struct reply_packet)); struct reply_packet ** p = &entry->reply_list; if(!pkt) error("out of memory"); pkt->next = NULL; pkt->packet_sleep = 0; pkt->reply_pkt = NULL; pkt->reply_from_hex = NULL; pkt->raw_ednsdata = NULL; /* link at end */ while(*p) p = &((*p)->next); *p = pkt; return pkt; } /** parse MATCH line */ static void matchline(char* line, struct entry* e) { char* parse = line; while(*parse) { if(isendline(*parse)) return; if(str_keyword(&parse, "opcode")) { e->match_opcode = 1; } else if(str_keyword(&parse, "qtype")) { e->match_qtype = 1; } else if(str_keyword(&parse, "qname")) { e->match_qname = 1; } else if(str_keyword(&parse, "rcode")) { e->match_rcode = 1; } else if(str_keyword(&parse, "question")) { e->match_question = 1; } else if(str_keyword(&parse, "answer")) { e->match_answer = 1; } else if(str_keyword(&parse, "subdomain")) { e->match_subdomain = 1; } else if(str_keyword(&parse, "all")) { e->match_all = 1; } else if(str_keyword(&parse, "ttl")) { e->match_ttl = 1; } else if(str_keyword(&parse, "DO")) { e->match_do = 1; } else if(str_keyword(&parse, "noedns")) { e->match_noedns = 1; } else if(str_keyword(&parse, "ednsdata")) { e->match_ednsdata_raw = 1; } else if(str_keyword(&parse, "UDP")) { e->match_transport = transport_udp; } else if(str_keyword(&parse, "TCP")) { e->match_transport = transport_tcp; } else if(str_keyword(&parse, "serial")) { e->match_serial = 1; if(*parse != '=' && *parse != ':') error("expected = or : in MATCH: %s", line); parse++; e->ixfr_soa_serial = (uint32_t)strtol(parse, (char**)&parse, 10); while(isspace((unsigned char)*parse)) parse++; } else { error("could not parse MATCH: '%s'", parse); } } } /** parse REPLY line */ static void replyline(char* line, uint8_t* reply, size_t reply_len, int* do_flag) { char* parse = line; if(reply_len < LDNS_HEADER_SIZE) error("packet too short for header"); while(*parse) { if(isendline(*parse)) return; /* opcodes */ if(str_keyword(&parse, "QUERY")) { LDNS_OPCODE_SET(reply, LDNS_PACKET_QUERY); } else if(str_keyword(&parse, "IQUERY")) { LDNS_OPCODE_SET(reply, LDNS_PACKET_IQUERY); } else if(str_keyword(&parse, "STATUS")) { LDNS_OPCODE_SET(reply, LDNS_PACKET_STATUS); } else if(str_keyword(&parse, "NOTIFY")) { LDNS_OPCODE_SET(reply, LDNS_PACKET_NOTIFY); } else if(str_keyword(&parse, "UPDATE")) { LDNS_OPCODE_SET(reply, LDNS_PACKET_UPDATE); /* rcodes */ } else if(str_keyword(&parse, "NOERROR")) { LDNS_RCODE_SET(reply, LDNS_RCODE_NOERROR); } else if(str_keyword(&parse, "FORMERR")) { LDNS_RCODE_SET(reply, LDNS_RCODE_FORMERR); } else if(str_keyword(&parse, "SERVFAIL")) { LDNS_RCODE_SET(reply, LDNS_RCODE_SERVFAIL); } else if(str_keyword(&parse, "NXDOMAIN")) { LDNS_RCODE_SET(reply, LDNS_RCODE_NXDOMAIN); } else if(str_keyword(&parse, "NOTIMPL")) { LDNS_RCODE_SET(reply, LDNS_RCODE_NOTIMPL); } else if(str_keyword(&parse, "REFUSED")) { LDNS_RCODE_SET(reply, LDNS_RCODE_REFUSED); } else if(str_keyword(&parse, "YXDOMAIN")) { LDNS_RCODE_SET(reply, LDNS_RCODE_YXDOMAIN); } else if(str_keyword(&parse, "YXRRSET")) { LDNS_RCODE_SET(reply, LDNS_RCODE_YXRRSET); } else if(str_keyword(&parse, "NXRRSET")) { LDNS_RCODE_SET(reply, LDNS_RCODE_NXRRSET); } else if(str_keyword(&parse, "NOTAUTH")) { LDNS_RCODE_SET(reply, LDNS_RCODE_NOTAUTH); } else if(str_keyword(&parse, "NOTZONE")) { LDNS_RCODE_SET(reply, LDNS_RCODE_NOTZONE); /* flags */ } else if(str_keyword(&parse, "QR")) { LDNS_QR_SET(reply); } else if(str_keyword(&parse, "AA")) { LDNS_AA_SET(reply); } else if(str_keyword(&parse, "TC")) { LDNS_TC_SET(reply); } else if(str_keyword(&parse, "RD")) { LDNS_RD_SET(reply); } else if(str_keyword(&parse, "CD")) { LDNS_CD_SET(reply); } else if(str_keyword(&parse, "RA")) { LDNS_RA_SET(reply); } else if(str_keyword(&parse, "AD")) { LDNS_AD_SET(reply); } else if(str_keyword(&parse, "DO")) { *do_flag = 1; } else { error("could not parse REPLY: '%s'", parse); } } } /** parse ADJUST line */ static void adjustline(char* line, struct entry* e, struct reply_packet* pkt) { char* parse = line; while(*parse) { if(isendline(*parse)) return; if(str_keyword(&parse, "copy_id")) { e->copy_id = 1; } else if(str_keyword(&parse, "copy_query")) { e->copy_query = 1; } else if(str_keyword(&parse, "copy_ednsdata_assume_clientsubnet")) { e->copy_ednsdata_assume_clientsubnet = 1; } else if(str_keyword(&parse, "increment_ecs_scope")) { e->increment_ecs_scope = 1; } else if(str_keyword(&parse, "sleep=")) { e->sleeptime = (unsigned int) strtol(parse, (char**)&parse, 10); while(isspace((unsigned char)*parse)) parse++; } else if(str_keyword(&parse, "packet_sleep=")) { pkt->packet_sleep = (unsigned int) strtol(parse, (char**)&parse, 10); while(isspace((unsigned char)*parse)) parse++; } else { error("could not parse ADJUST: '%s'", parse); } } } /** create new entry */ static struct entry* new_entry(void) { struct entry* e = (struct entry*)malloc(sizeof(struct entry)); if(!e) error("out of memory"); memset(e, 0, sizeof(*e)); e->match_opcode = 0; e->match_qtype = 0; e->match_qname = 0; e->match_rcode = 0; e->match_question = 0; e->match_answer = 0; e->match_subdomain = 0; e->match_all = 0; e->match_ttl = 0; e->match_do = 0; e->match_noedns = 0; e->match_serial = 0; e->ixfr_soa_serial = 0; e->match_transport = transport_any; e->reply_list = NULL; e->copy_id = 0; e->copy_query = 0; e->copy_ednsdata_assume_clientsubnet = 0; e->increment_ecs_scope = 0; e->sleeptime = 0; e->next = NULL; return e; } /** * Converts a hex string to binary data * @param hexstr: string of hex. * @param len: is the length of the string * @param buf: is the buffer to store the result in * @param offset: is the starting position in the result buffer * @param buf_len: is the length of buf. * @return This function returns the length of the result */ static size_t hexstr2bin(char *hexstr, int len, uint8_t *buf, size_t offset, size_t buf_len) { char c; int i; uint8_t int8 = 0; int sec = 0; size_t bufpos = 0; if (len % 2 != 0) { return 0; } for (i=0; i= '0' && c <= '9') { int8 += c & 0x0f; } else if (c >= 'a' && c <= 'z') { int8 += (c & 0x0f) + 9; } else if (c >= 'A' && c <= 'Z') { int8 += (c & 0x0f) + 9; } else { return 0; } if (sec == 0) { int8 = int8 << 4; sec = 1; } else { if (bufpos + offset + 1 <= buf_len) { buf[bufpos+offset] = int8; int8 = 0; sec = 0; bufpos++; } else { fprintf(stderr, "Buffer too small in hexstr2bin"); } } } } return bufpos; } /** convert hex buffer to binary buffer */ static sldns_buffer * hex_buffer2wire(sldns_buffer *data_buffer) { sldns_buffer *wire_buffer = NULL; int c; /* stat hack * 0 = normal * 1 = comment (skip to end of line) * 2 = unprintable character found, read binary data directly */ size_t data_buf_pos = 0; int state = 0; uint8_t *hexbuf; int hexbufpos = 0; size_t wirelen; uint8_t *data_wire = (uint8_t *) sldns_buffer_begin(data_buffer); uint8_t *wire = (uint8_t*)malloc(MAX_PACKETLEN); if(!wire) error("out of memory"); hexbuf = (uint8_t*)malloc(MAX_PACKETLEN); if(!hexbuf) error("out of memory"); for (data_buf_pos = 0; data_buf_pos < sldns_buffer_position(data_buffer); data_buf_pos++) { c = (int) data_wire[data_buf_pos]; if (state < 2 && !isascii((unsigned char)c)) { /*verbose("non ascii character found in file: (%d) switching to raw mode\n", c);*/ state = 2; } switch (state) { case 0: if ( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ) { if (hexbufpos >= MAX_PACKETLEN) { error("buffer overflow"); free(hexbuf); return 0; } hexbuf[hexbufpos] = (uint8_t) c; hexbufpos++; } else if (c == ';') { state = 1; } else if (c == ' ' || c == '\t' || c == '\n') { /* skip whitespace */ } break; case 1: if (c == '\n' || c == EOF) { state = 0; } break; case 2: if (hexbufpos >= MAX_PACKETLEN) { error("buffer overflow"); free(hexbuf); return 0; } hexbuf[hexbufpos] = (uint8_t) c; hexbufpos++; break; } } if (hexbufpos >= MAX_PACKETLEN) { /*verbose("packet size reached\n");*/ } /* lenient mode: length must be multiple of 2 */ if (hexbufpos % 2 != 0) { if (hexbufpos >= MAX_PACKETLEN) { error("buffer overflow"); free(hexbuf); return 0; } hexbuf[hexbufpos] = (uint8_t) '0'; hexbufpos++; } if (state < 2) { wirelen = hexstr2bin((char *) hexbuf, hexbufpos, wire, 0, MAX_PACKETLEN); wire_buffer = sldns_buffer_new(wirelen); sldns_buffer_new_frm_data(wire_buffer, wire, wirelen); } else { error("Incomplete hex data, not at byte boundary\n"); } free(wire); free(hexbuf); return wire_buffer; } /** parse ORIGIN */ static void get_origin(const char* name, struct sldns_file_parse_state* pstate, char* parse) { /* snip off rest of the text so as to make the parse work in ldns */ char* end; char store; int status; end=parse; while(!isspace((unsigned char)*end) && !isendline(*end)) end++; store = *end; *end = 0; verbose(3, "parsing '%s'\n", parse); status = sldns_str2wire_dname_buf(parse, pstate->origin, &pstate->origin_len); *end = store; if(status != 0) error("%s line %d:\n\t%s: %s", name, pstate->lineno, sldns_get_errorstr_parse(status), parse); } /** add RR to packet */ static void add_rr(char* rrstr, uint8_t* pktbuf, size_t pktsize, size_t* pktlen, struct sldns_file_parse_state* pstate, sldns_pkt_section add_section, const char* fname) { /* it must be a RR, parse and add to packet. */ size_t rr_len = pktsize - *pktlen; size_t dname_len = 0; int status; uint8_t* origin = pstate->origin_len?pstate->origin:0; uint8_t* prev = pstate->prev_rr_len?pstate->prev_rr:0; if(*pktlen > pktsize || *pktlen < LDNS_HEADER_SIZE) error("packet overflow"); /* parse RR */ if(add_section == LDNS_SECTION_QUESTION) status = sldns_str2wire_rr_question_buf(rrstr, pktbuf+*pktlen, &rr_len, &dname_len, origin, pstate->origin_len, prev, pstate->prev_rr_len); else status = sldns_str2wire_rr_buf(rrstr, pktbuf+*pktlen, &rr_len, &dname_len, pstate->default_ttl, origin, pstate->origin_len, prev, pstate->prev_rr_len); if(status != 0) error("%s line %d:%d %s\n\t%s", fname, pstate->lineno, LDNS_WIREPARSE_OFFSET(status), sldns_get_errorstr_parse(status), rrstr); *pktlen += rr_len; /* increase RR count */ if(add_section == LDNS_SECTION_QUESTION) sldns_write_uint16(pktbuf+4, LDNS_QDCOUNT(pktbuf)+1); else if(add_section == LDNS_SECTION_ANSWER) sldns_write_uint16(pktbuf+6, LDNS_ANCOUNT(pktbuf)+1); else if(add_section == LDNS_SECTION_AUTHORITY) sldns_write_uint16(pktbuf+8, LDNS_NSCOUNT(pktbuf)+1); else if(add_section == LDNS_SECTION_ADDITIONAL) sldns_write_uint16(pktbuf+10, LDNS_ARCOUNT(pktbuf)+1); else error("internal error bad section %d", (int)add_section); } /* add EDNS 4096 opt record */ static void add_edns(uint8_t* pktbuf, size_t pktsize, int do_flag, uint8_t *ednsdata, uint16_t ednslen, size_t* pktlen) { uint8_t edns[] = {0x00, /* root label */ 0x00, LDNS_RR_TYPE_OPT, /* type */ 0x04, 0xD0, /* class is UDPSIZE 1232 */ 0x00, /* TTL[0] is ext rcode */ 0x00, /* TTL[1] is edns version */ (uint8_t)(do_flag?0x80:0x00), 0x00, /* TTL[2-3] is edns flags, DO */ (uint8_t)((ednslen >> 8) & 0xff), (uint8_t)(ednslen & 0xff), /* rdatalength */ }; if(*pktlen < LDNS_HEADER_SIZE) return; if(*pktlen + sizeof(edns) + ednslen > pktsize) error("not enough space for EDNS OPT record"); memmove(pktbuf+*pktlen, edns, sizeof(edns)); if(ednsdata && ednslen) memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen); sldns_write_uint16(pktbuf+10, LDNS_ARCOUNT(pktbuf)+1); *pktlen += (sizeof(edns) + ednslen); } /* Reads one entry from file. Returns entry or NULL on error. */ struct entry* read_entry(FILE* in, const char* name, struct sldns_file_parse_state* pstate, int skip_whitespace) { struct entry* current = NULL; char line[MAX_LINE]; char* parse; sldns_pkt_section add_section = LDNS_SECTION_QUESTION; struct reply_packet *cur_reply = NULL; int reading_hex = 0; int reading_hex_ednsdata = 0; sldns_buffer* hex_data_buffer = NULL; sldns_buffer* hex_ednsdata_buffer = NULL; uint8_t pktbuf[MAX_PACKETLEN]; size_t pktlen = LDNS_HEADER_SIZE; int do_flag = 0; /* DO flag in EDNS */ memset(pktbuf, 0, pktlen); /* ID = 0, FLAGS="", and rr counts 0 */ while(fgets(line, (int)sizeof(line), in) != NULL) { line[MAX_LINE-1] = 0; parse = line; pstate->lineno++; while(isspace((unsigned char)*parse)) parse++; /* test for keywords */ if(isendline(*parse)) continue; /* skip comment and empty lines */ if(str_keyword(&parse, "ENTRY_BEGIN")) { if(current) { error("%s line %d: previous entry does not ENTRY_END", name, pstate->lineno); } current = new_entry(); current->lineno = pstate->lineno; cur_reply = entry_add_reply(current); continue; } else if(str_keyword(&parse, "$ORIGIN")) { get_origin(name, pstate, parse); continue; } else if(str_keyword(&parse, "$TTL")) { pstate->default_ttl = (uint32_t)atoi(parse); continue; } /* working inside an entry */ if(!current) { error("%s line %d: expected ENTRY_BEGIN but got %s", name, pstate->lineno, line); } if(str_keyword(&parse, "MATCH")) { matchline(parse, current); } else if(str_keyword(&parse, "REPLY")) { replyline(parse, pktbuf, pktlen, &do_flag); } else if(str_keyword(&parse, "ADJUST")) { adjustline(parse, current, cur_reply); } else if(str_keyword(&parse, "EXTRA_PACKET")) { /* copy current packet into buffer */ cur_reply->reply_pkt = memdup(pktbuf, pktlen); cur_reply->reply_len = pktlen; if(!cur_reply->reply_pkt) error("out of memory"); cur_reply = entry_add_reply(current); /* clear for next packet */ pktlen = LDNS_HEADER_SIZE; memset(pktbuf, 0, pktlen); /* ID = 0, FLAGS="", and rr counts 0 */ } else if(str_keyword(&parse, "SECTION")) { if(str_keyword(&parse, "QUESTION")) add_section = LDNS_SECTION_QUESTION; else if(str_keyword(&parse, "ANSWER")) add_section = LDNS_SECTION_ANSWER; else if(str_keyword(&parse, "AUTHORITY")) add_section = LDNS_SECTION_AUTHORITY; else if(str_keyword(&parse, "ADDITIONAL")) add_section = LDNS_SECTION_ADDITIONAL; else error("%s line %d: bad section %s", name, pstate->lineno, parse); } else if(str_keyword(&parse, "HEX_ANSWER_BEGIN")) { hex_data_buffer = sldns_buffer_new(MAX_PACKETLEN); reading_hex = 1; } else if(str_keyword(&parse, "HEX_ANSWER_END")) { if(!reading_hex) { error("%s line %d: HEX_ANSWER_END read but no HEX_ANSWER_BEGIN keyword seen", name, pstate->lineno); } reading_hex = 0; cur_reply->reply_from_hex = hex_buffer2wire(hex_data_buffer); sldns_buffer_free(hex_data_buffer); hex_data_buffer = NULL; } else if(reading_hex) { sldns_buffer_printf(hex_data_buffer, "%s", line); } else if(str_keyword(&parse, "HEX_EDNSDATA_BEGIN")) { hex_ednsdata_buffer = sldns_buffer_new(MAX_PACKETLEN); reading_hex_ednsdata = 1; } else if(str_keyword(&parse, "HEX_EDNSDATA_END")) { if (!reading_hex_ednsdata) { error("%s line %d: HEX_EDNSDATA_END read but no" "HEX_EDNSDATA_BEGIN keyword seen", name, pstate->lineno); } reading_hex_ednsdata = 0; cur_reply->raw_ednsdata = hex_buffer2wire(hex_ednsdata_buffer); sldns_buffer_free(hex_ednsdata_buffer); hex_ednsdata_buffer = NULL; } else if(reading_hex_ednsdata) { sldns_buffer_printf(hex_ednsdata_buffer, "%s", line); } else if(str_keyword(&parse, "ENTRY_END")) { if(hex_data_buffer) sldns_buffer_free(hex_data_buffer); if(hex_ednsdata_buffer) sldns_buffer_free(hex_ednsdata_buffer); if(pktlen != 0) { if(do_flag || cur_reply->raw_ednsdata) { if(cur_reply->raw_ednsdata && sldns_buffer_limit(cur_reply->raw_ednsdata)) add_edns(pktbuf, sizeof(pktbuf), do_flag, sldns_buffer_begin(cur_reply->raw_ednsdata), (uint16_t)sldns_buffer_limit(cur_reply->raw_ednsdata), &pktlen); else add_edns(pktbuf, sizeof(pktbuf), do_flag, NULL, 0, &pktlen); } cur_reply->reply_pkt = memdup(pktbuf, pktlen); cur_reply->reply_len = pktlen; if(!cur_reply->reply_pkt) error("out of memory"); } return current; } else { add_rr(skip_whitespace?parse:line, pktbuf, sizeof(pktbuf), &pktlen, pstate, add_section, name); } } if(reading_hex) { error("%s: End of file reached while still reading hex, " "missing HEX_ANSWER_END\n", name); } if(reading_hex_ednsdata) { error("%s: End of file reached while still reading edns data, " "missing HEX_EDNSDATA_END\n", name); } if(current) { error("%s: End of file reached while reading entry. " "missing ENTRY_END\n", name); } return 0; } /* reads the canned reply file and returns a list of structs */ struct entry* read_datafile(const char* name, int skip_whitespace) { struct entry* list = NULL; struct entry* last = NULL; struct entry* current = NULL; FILE *in; struct sldns_file_parse_state pstate; int entry_num = 0; memset(&pstate, 0, sizeof(pstate)); if((in=fopen(name, "r")) == NULL) { error("could not open file %s: %s", name, strerror(errno)); } while((current = read_entry(in, name, &pstate, skip_whitespace))) { if(last) last->next = current; else list = current; last = current; entry_num ++; } verbose(1, "%s: Read %d entries\n", prog_name, entry_num); fclose(in); return list; } /** get qtype from packet */ static sldns_rr_type get_qtype(uint8_t* pkt, size_t pktlen) { uint8_t* d; size_t dl, sl=0; char* snull = NULL; int comprloop = 0; if(pktlen < LDNS_HEADER_SIZE) return 0; if(LDNS_QDCOUNT(pkt) == 0) return 0; /* skip over dname with dname-scan routine */ d = pkt+LDNS_HEADER_SIZE; dl = pktlen-LDNS_HEADER_SIZE; (void)sldns_wire2str_dname_scan(&d, &dl, &snull, &sl, pkt, pktlen, &comprloop); if(dl < 2) return 0; return sldns_read_uint16(d); } /** get qtype from packet */ static size_t get_qname_len(uint8_t* pkt, size_t pktlen) { uint8_t* d; size_t dl, sl=0; char* snull = NULL; int comprloop = 0; if(pktlen < LDNS_HEADER_SIZE) return 0; if(LDNS_QDCOUNT(pkt) == 0) return 0; /* skip over dname with dname-scan routine */ d = pkt+LDNS_HEADER_SIZE; dl = pktlen-LDNS_HEADER_SIZE; (void)sldns_wire2str_dname_scan(&d, &dl, &snull, &sl, pkt, pktlen, &comprloop); return pktlen-dl-LDNS_HEADER_SIZE; } /** returns owner from packet */ static uint8_t* get_qname(uint8_t* pkt, size_t pktlen) { if(pktlen < LDNS_HEADER_SIZE) return NULL; if(LDNS_QDCOUNT(pkt) == 0) return NULL; return pkt+LDNS_HEADER_SIZE; } /** returns opcode from packet */ static int get_opcode(uint8_t* pkt, size_t pktlen) { if(pktlen < LDNS_HEADER_SIZE) return 0; return (int)LDNS_OPCODE_WIRE(pkt); } /** returns rcode from packet */ static int get_rcode(uint8_t* pkt, size_t pktlen) { if(pktlen < LDNS_HEADER_SIZE) return 0; return (int)LDNS_RCODE_WIRE(pkt); } /** get authority section SOA serial value */ static uint32_t get_serial(uint8_t* p, size_t plen) { uint8_t* walk = p; size_t walk_len = plen, sl=0; char* snull = NULL; uint16_t i; int comprloop = 0; if(walk_len < LDNS_HEADER_SIZE) return 0; walk += LDNS_HEADER_SIZE; walk_len -= LDNS_HEADER_SIZE; /* skip other records with wire2str_scan */ for(i=0; i < LDNS_QDCOUNT(p); i++) (void)sldns_wire2str_rrquestion_scan(&walk, &walk_len, &snull, &sl, p, plen, &comprloop); for(i=0; i < LDNS_ANCOUNT(p); i++) (void)sldns_wire2str_rr_scan(&walk, &walk_len, &snull, &sl, p, plen, &comprloop); /* walk through authority section */ for(i=0; i < LDNS_NSCOUNT(p); i++) { /* if this is SOA then get serial, skip compressed dname */ uint8_t* dstart = walk; size_t dlen = walk_len; (void)sldns_wire2str_dname_scan(&dstart, &dlen, &snull, &sl, p, plen, &comprloop); if(dlen >= 2 && sldns_read_uint16(dstart) == LDNS_RR_TYPE_SOA) { /* skip type, class, TTL, rdatalen */ if(dlen < 10) return 0; if(dlen < 10 + (size_t)sldns_read_uint16(dstart+8)) return 0; dstart += 10; dlen -= 10; /* check third rdf */ (void)sldns_wire2str_dname_scan(&dstart, &dlen, &snull, &sl, p, plen, &comprloop); (void)sldns_wire2str_dname_scan(&dstart, &dlen, &snull, &sl, p, plen, &comprloop); if(dlen < 4) return 0; verbose(3, "found serial %u in msg. ", (int)sldns_read_uint32(dstart)); return sldns_read_uint32(dstart); } /* move to next RR */ (void)sldns_wire2str_rr_scan(&walk, &walk_len, &snull, &sl, p, plen, &comprloop); } return 0; } /** get ptr to EDNS OPT record (and remaining length); behind the type u16 */ static int pkt_find_edns_opt(uint8_t** p, size_t* plen) { /* walk over the packet with scan routines */ uint8_t* w = *p; size_t wlen = *plen, sl=0; char* snull = NULL; uint16_t i; int comprloop = 0; if(wlen < LDNS_HEADER_SIZE) return 0; w += LDNS_HEADER_SIZE; wlen -= LDNS_HEADER_SIZE; /* skip other records with wire2str_scan */ for(i=0; i < LDNS_QDCOUNT(*p); i++) (void)sldns_wire2str_rrquestion_scan(&w, &wlen, &snull, &sl, *p, *plen, &comprloop); for(i=0; i < LDNS_ANCOUNT(*p); i++) (void)sldns_wire2str_rr_scan(&w, &wlen, &snull, &sl, *p, *plen, &comprloop); for(i=0; i < LDNS_NSCOUNT(*p); i++) (void)sldns_wire2str_rr_scan(&w, &wlen, &snull, &sl, *p, *plen, &comprloop); /* walk through additional section */ for(i=0; i < LDNS_ARCOUNT(*p); i++) { /* if this is OPT then done */ uint8_t* dstart = w; size_t dlen = wlen; (void)sldns_wire2str_dname_scan(&dstart, &dlen, &snull, &sl, *p, *plen, &comprloop); if(dlen >= 2 && sldns_read_uint16(dstart) == LDNS_RR_TYPE_OPT) { *p = dstart+2; *plen = dlen-2; return 1; } /* move to next RR */ (void)sldns_wire2str_rr_scan(&w, &wlen, &snull, &sl, *p, *plen, &comprloop); } return 0; } /** return true if the packet has EDNS OPT record */ static int get_has_edns(uint8_t* pkt, size_t len) { /* use arguments as temporary variables */ return pkt_find_edns_opt(&pkt, &len); } /** return true if the DO flag is set */ static int get_do_flag(uint8_t* pkt, size_t len) { uint16_t edns_bits; uint8_t* walk = pkt; size_t walk_len = len; if(!pkt_find_edns_opt(&walk, &walk_len)) { return 0; } if(walk_len < 6) return 0; /* malformed */ edns_bits = sldns_read_uint16(walk+4); return (int)(edns_bits&LDNS_EDNS_MASK_DO_BIT); } /** zero TTLs in packet */ static void zerottls(uint8_t* pkt, size_t pktlen) { uint8_t* walk = pkt; size_t walk_len = pktlen, sl=0; char* snull = NULL; uint16_t i; uint16_t num = LDNS_ANCOUNT(pkt)+LDNS_NSCOUNT(pkt)+LDNS_ARCOUNT(pkt); int comprloop = 0; if(walk_len < LDNS_HEADER_SIZE) return; walk += LDNS_HEADER_SIZE; walk_len -= LDNS_HEADER_SIZE; for(i=0; i < LDNS_QDCOUNT(pkt); i++) (void)sldns_wire2str_rrquestion_scan(&walk, &walk_len, &snull, &sl, pkt, pktlen, &comprloop); for(i=0; i < num; i++) { /* wipe TTL */ uint8_t* dstart = walk; size_t dlen = walk_len; (void)sldns_wire2str_dname_scan(&dstart, &dlen, &snull, &sl, pkt, pktlen, &comprloop); if(dlen < 8) return; sldns_write_uint32(dstart+4, 0); /* go to next RR */ (void)sldns_wire2str_rr_scan(&walk, &walk_len, &snull, &sl, pkt, pktlen, &comprloop); } } /** get one line (\n) from a string, move next to after the \n, zero \n */ static int get_line(char** s, char** n) { /* at end of string? end */ if(*n == NULL || **n == 0) return 0; /* result starts at next string */ *s = *n; /* find \n after that */ *n = strchr(*s, '\n'); if(*n && **n != 0) { /* terminate line */ (*n)[0] = 0; (*n)++; } return 1; } /** match two RR sections without ordering */ static int match_noloc_section(char** q, char** nq, char** p, char** np, uint16_t num) { /* for max number of RRs in packet */ const uint16_t numarray = 3000; char* qlines[numarray], *plines[numarray]; uint16_t i, j, numq=0, nump=0; if(num > numarray) fatal_exit("too many RRs"); /* gather lines */ for(i=0; i_dname_count) { sldns_rdf_type f = sldns_rr_descriptor_field_type(desc, i++); if(f == LDNS_RDF_TYPE_DNAME) { lowercase_dname(p, &rdataremain); dname_count++; } else if(f == LDNS_RDF_TYPE_STR) { uint8_t len; if(rdataremain == 0) return; len = **p; *p += len+1; rdataremain -= len+1; } else { int len = 0; switch(f) { case LDNS_RDF_TYPE_CLASS: case LDNS_RDF_TYPE_ALG: case LDNS_RDF_TYPE_INT8: len = 1; break; case LDNS_RDF_TYPE_INT16: case LDNS_RDF_TYPE_TYPE: case LDNS_RDF_TYPE_CERT_ALG: len = 2; break; case LDNS_RDF_TYPE_INT32: case LDNS_RDF_TYPE_TIME: case LDNS_RDF_TYPE_A: case LDNS_RDF_TYPE_PERIOD: len = 4; break; case LDNS_RDF_TYPE_TSIGTIME: len = 6; break; case LDNS_RDF_TYPE_AAAA: len = 16; break; default: error("bad rdf type in lowercase %d", (int)f); } *p += len; rdataremain -= len; } } /* skip remainder of rdata */ *p += rdataremain; *remain -= rdatalen; } /** lowercase all names in the message */ static void lowercase_pkt(uint8_t* pkt, size_t pktlen) { uint16_t i; uint8_t* p = pkt; size_t remain = pktlen; uint16_t t, rdatalen; if(pktlen < LDNS_HEADER_SIZE) return; p += LDNS_HEADER_SIZE; remain -= LDNS_HEADER_SIZE; for(i=0; i pslen && strcmp(qs + (qslen-pslen), ps) == 0 && qslen + 2 >= pslen && /* space for label and dot */ qs[qslen-pslen-1] == '.') { unsigned int slashcount = 0; size_t i = qslen-pslen-2; while(i>0 && qs[i]=='\\') { i++; slashcount++; } if(slashcount%1 == 1) return 0; /* . preceded by \ */ return 1; } return 0; } /** Match OPT RDATA (not the EDNS payload size or flags) */ static int match_ednsdata(uint8_t* q, size_t qlen, uint8_t* p, size_t plen) { uint8_t* walk_q = q; size_t walk_qlen = qlen; uint8_t* walk_p = p; size_t walk_plen = plen; if(!pkt_find_edns_opt(&walk_q, &walk_qlen)) walk_qlen = 0; if(!pkt_find_edns_opt(&walk_p, &walk_plen)) walk_plen = 0; /* class + ttl + rdlen = 8 */ if(walk_qlen <= 8 && walk_plen <= 8) { verbose(3, "NO edns opt, move on"); return 1; } if(walk_qlen != walk_plen) return 0; return (memcmp(walk_p+8, walk_q+8, walk_qlen-8) == 0); } /* finds entry in list, or returns NULL */ struct entry* find_match(struct entry* entries, uint8_t* query_pkt, size_t len, enum transport_type transport) { struct entry* p = entries; uint8_t* reply; size_t rlen; for(p=entries; p; p=p->next) { verbose(3, "comparepkt: "); reply = p->reply_list->reply_pkt; rlen = p->reply_list->reply_len; if(p->match_opcode && get_opcode(query_pkt, len) != get_opcode(reply, rlen)) { verbose(3, "bad opcode\n"); continue; } if(p->match_qtype && get_qtype(query_pkt, len) != get_qtype(reply, rlen)) { verbose(3, "bad qtype %d %d\n", get_qtype(query_pkt, len), get_qtype(reply, rlen)); continue; } if(p->match_qname) { if(!equal_dname(query_pkt, len, reply, rlen)) { verbose(3, "bad qname\n"); continue; } } if(p->match_rcode) { if(get_rcode(query_pkt, len) != get_rcode(reply, rlen)) { char *r1 = sldns_wire2str_rcode(get_rcode(query_pkt, len)); char *r2 = sldns_wire2str_rcode(get_rcode(reply, rlen)); verbose(3, "bad rcode %s instead of %s\n", r1, r2); free(r1); free(r2); continue; } } if(p->match_question) { if(!match_question(query_pkt, len, reply, rlen, (int)p->match_ttl)) { verbose(3, "bad question section\n"); continue; } } if(p->match_answer) { if(!match_answer(query_pkt, len, reply, rlen, (int)p->match_ttl)) { verbose(3, "bad answer section\n"); continue; } } if(p->match_subdomain) { if(!subdomain_dname(query_pkt, len, reply, rlen)) { verbose(3, "bad subdomain\n"); continue; } } if(p->match_serial && get_serial(query_pkt, len) != p->ixfr_soa_serial) { verbose(3, "bad serial\n"); continue; } if(p->match_do && !get_do_flag(query_pkt, len)) { verbose(3, "no DO bit set\n"); continue; } if(p->match_noedns && get_has_edns(query_pkt, len)) { verbose(3, "bad; EDNS OPT present\n"); continue; } if(p->match_ednsdata_raw && !match_ednsdata(query_pkt, len, reply, rlen)) { verbose(3, "bad EDNS data match.\n"); continue; } if(p->match_transport != transport_any && p->match_transport != transport) { verbose(3, "bad transport\n"); continue; } if(p->match_all && !match_all(query_pkt, len, reply, rlen, (int)p->match_ttl, 0)) { verbose(3, "bad allmatch\n"); continue; } verbose(3, "match!\n"); return p; } return NULL; } void adjust_packet(struct entry* match, uint8_t** answer_pkt, size_t *answer_len, uint8_t* query_pkt, size_t query_len) { uint8_t* orig = *answer_pkt; size_t origlen = *answer_len; uint8_t* res; size_t reslen; /* perform the copy; if possible; must be uncompressed */ if(match->copy_query && origlen >= LDNS_HEADER_SIZE && query_len >= LDNS_HEADER_SIZE && LDNS_QDCOUNT(query_pkt)!=0 && LDNS_QDCOUNT(orig)==0) { /* no qname in output packet, insert it */ size_t dlen = get_qname_len(query_pkt, query_len); reslen = origlen + dlen + 4; res = (uint8_t*)malloc(reslen); if(!res) { verbose(1, "out of memory; send without adjust\n"); return; } /* copy the header, query, remainder */ memcpy(res, orig, LDNS_HEADER_SIZE); memmove(res+LDNS_HEADER_SIZE, query_pkt+LDNS_HEADER_SIZE, dlen+4); memmove(res+LDNS_HEADER_SIZE+dlen+4, orig+LDNS_HEADER_SIZE, reslen-(LDNS_HEADER_SIZE+dlen+4)); /* set QDCOUNT */ sldns_write_uint16(res+4, 1); } else if(match->copy_query && origlen >= LDNS_HEADER_SIZE && query_len >= LDNS_HEADER_SIZE && LDNS_QDCOUNT(query_pkt)!=0 && get_qname_len(orig, origlen) == 0) { /* QDCOUNT(orig)!=0 but qlen == 0, therefore, an error */ verbose(1, "error: malformed qname; send without adjust\n"); res = memdup(orig, origlen); reslen = origlen; } else if(match->copy_query && origlen >= LDNS_HEADER_SIZE && query_len >= LDNS_HEADER_SIZE && LDNS_QDCOUNT(query_pkt)!=0 && LDNS_QDCOUNT(orig)!=0) { /* in this case olen != 0 and QDCOUNT(orig)!=0 */ /* copy query section */ size_t dlen = get_qname_len(query_pkt, query_len); size_t olen = get_qname_len(orig, origlen); reslen = origlen + dlen - olen; res = (uint8_t*)malloc(reslen); if(!res) { verbose(1, "out of memory; send without adjust\n"); return; } /* copy the header, query, remainder */ memcpy(res, orig, LDNS_HEADER_SIZE); memmove(res+LDNS_HEADER_SIZE, query_pkt+LDNS_HEADER_SIZE, dlen+4); memmove(res+LDNS_HEADER_SIZE+dlen+4, orig+LDNS_HEADER_SIZE+olen+4, reslen-(LDNS_HEADER_SIZE+dlen+4)); } else { res = memdup(orig, origlen); reslen = origlen; } if(!res) { verbose(1, "out of memory; send without adjust\n"); return; } /* copy the ID */ if(match->copy_id && reslen >= 2 && query_len >= 2) res[1] = query_pkt[1]; if(match->copy_id && reslen >= 1 && query_len >= 1) res[0] = query_pkt[0]; if(match->copy_ednsdata_assume_clientsubnet) { /** Assume there is only one EDNS option, which is ECS. * Copy source mask from query to scope mask in reply. Assume * rest of ECS data in response (eg address) matches the query. */ uint8_t* walk_q = orig; size_t walk_qlen = origlen; uint8_t* walk_p = res; size_t walk_plen = reslen; if(!pkt_find_edns_opt(&walk_q, &walk_qlen)) { walk_qlen = 0; } if(!pkt_find_edns_opt(&walk_p, &walk_plen)) { walk_plen = 0; } /* class + ttl + rdlen + optcode + optlen + ecs fam + ecs source * + ecs scope = index 15 */ if(walk_qlen >= 15 && walk_plen >= 15) { walk_p[15] = walk_q[14]; } if(match->increment_ecs_scope) { walk_p[15]++; } } if(match->sleeptime > 0) { verbose(3, "sleeping for %d seconds\n", match->sleeptime); #ifdef HAVE_SLEEP sleep(match->sleeptime); #else Sleep(match->sleeptime * 1000); #endif } *answer_pkt = res; *answer_len = reslen; } /* * Parses data buffer to a query, finds the correct answer * and calls the given function for every packet to send. */ void handle_query(uint8_t* inbuf, ssize_t inlen, struct entry* entries, int* count, enum transport_type transport, void (*sendfunc)(uint8_t*, size_t, void*), void* userdata, FILE* verbose_out) { struct reply_packet *p; uint8_t *outbuf = NULL; size_t outlen = 0; struct entry* entry = NULL; verbose(1, "query %d: id %d: %s %d bytes: ", ++(*count), (int)(inlen>=2?LDNS_ID_WIRE(inbuf):0), (transport==transport_tcp)?"TCP":"UDP", (int)inlen); if(verbose_out) { char* out = sldns_wire2str_pkt(inbuf, (size_t)inlen); printf("%s\n", out); free(out); } /* fill up answer packet */ entry = find_match(entries, inbuf, (size_t)inlen, transport); if(!entry || !entry->reply_list) { verbose(1, "no answer packet for this query, no reply.\n"); return; } for(p = entry->reply_list; p; p = p->next) { verbose(3, "Answer pkt:\n"); if (p->reply_from_hex) { /* try to adjust the hex packet, if it can be * parsed, we can use adjust rules. if not, * send packet literally */ /* still try to adjust ID if others fail */ outlen = sldns_buffer_limit(p->reply_from_hex); outbuf = sldns_buffer_begin(p->reply_from_hex); } else { outbuf = p->reply_pkt; outlen = p->reply_len; } if(!outbuf) { verbose(1, "out of memory\n"); return; } /* copies outbuf in memory allocation */ adjust_packet(entry, &outbuf, &outlen, inbuf, (size_t)inlen); verbose(1, "Answer packet size: %u bytes.\n", (unsigned int)outlen); if(verbose_out) { char* out = sldns_wire2str_pkt(outbuf, outlen); printf("%s\n", out); free(out); } if(p->packet_sleep) { verbose(3, "sleeping for next packet %d secs\n", p->packet_sleep); #ifdef HAVE_SLEEP sleep(p->packet_sleep); #else Sleep(p->packet_sleep * 1000); #endif verbose(3, "wakeup for next packet " "(slept %d secs)\n", p->packet_sleep); } sendfunc(outbuf, outlen, userdata); free(outbuf); outbuf = NULL; outlen = 0; } } /** delete the list of reply packets */ void delete_replylist(struct reply_packet* replist) { struct reply_packet *p=replist, *np; while(p) { np = p->next; free(p->reply_pkt); sldns_buffer_free(p->reply_from_hex); sldns_buffer_free(p->raw_ednsdata); free(p); p=np; } } void delete_entry(struct entry* list) { struct entry *p=list, *np; while(p) { np = p->next; delete_replylist(p->reply_list); free(p); p = np; } } unbound-1.13.1/testcode/replay.h0000644000175000017500000003311614010434640016162 0ustar wouterwouter/* * testcode/replay.h - store and use a replay of events for the DNS resolver. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Store and use a replay of events for the DNS resolver. * Used to test known scenarios to get known outcomes. * *

 * File format for replay files.
 *
 * ; unbound.conf options.
 * ; ...
 * ; additional commandline options to pass to unbound
 * COMMANDLINE cmdline_option
 * ; autotrust key file contents, also adds auto-trust-anchor-file: "x" to cfg
 * AUTOTRUST_FILE id
 * ; contents of that file
 * AUTOTRUST_END
 * ; temp file names are echoed as "tmp/xxx.fname"
 * TEMPFILE_NAME fname
 * ; temp file contents, inline, deleted at end of run
 * TEMPFILE_CONTENTS fname
 * ; contents of that file
 * ; this creates $INCLUDE /tmp/xxx.fname
 * $INCLUDE_TEMPFILE fname
 * TEMPFILE_END
 * CONFIG_END
 * ; comment line.
 * SCENARIO_BEGIN name_of_scenario
 * RANGE_BEGIN start_time end_time
 *    ; give ip of the virtual server, it matches any ip if not present.
 *    ADDRESS ip_address 
 *    match_entries
 * RANGE_END
 * ; more RANGE items.
 * ; go to the next moment
 * STEP time_step event_type [ADDRESS ip_address]
 * ; event_type can be:
 *	o NOTHING - nothing
 *	o QUERY - followed by entry
 *	o CHECK_ANSWER - followed by entry
 *	o CHECK_OUT_QUERY - followed by entry (if copy-id it is also reply).
 *	o REPLY - followed by entry
 *	o TIMEOUT
 *	o TIME_PASSES ELAPSE [seconds] - increase 'now' time counter, can be
 *		a floating point number.
 *	  TIME_PASSES EVAL [macro] - expanded for seconds to move time.
 *	o TRAFFIC - like CHECK_ANSWER, causes traffic to flow.
 *		actually the traffic flows before this step is taken.
 *		the step waits for traffic to stop.
 *	o CHECK_AUTOTRUST [id] - followed by FILE_BEGIN [to match] FILE_END.
 *		The file contents is macro expanded before match.
 *	o CHECK_TEMPFILE [fname] - followed by FILE_BEGIN [to match] FILE_END
 *	o INFRA_RTT [ip] [dp] [rtt] - update infra cache entry with rtt.
 *	o ERROR
 * ; following entry starts on the next line, ENTRY_BEGIN.
 * ; more STEP items
 * SCENARIO_END
 *
 * Calculations, a macro-like system: ${$myvar + 3600}
 * STEP 10 ASSIGN myvar = 3600
 * 	; ASSIGN event. '=' is syntactic sugar here. 3600 is some expression.
 * ${..} is macro expanded from its expression.  Text substitution.
 * 	o $var replaced with its value.  var is identifier [azAZ09_]*
 * 	o number is that number.
 * 	o ${variables and arithmetic }
 * 	o +, -, / and *.  Note, evaluated left-to-right. Use ${} for brackets.
 * 	  So again, no precedence rules, so 2+3*4 == ${2+3}*4 = 20.
 * 	  Do 2+${3*4} to get 24.
 * 	o ${function params}
 *		o ${time} is the current time for the simulated unbound.
 *		o ${ctime value} is the text ctime(value), Fri 3 Aug 2009, ...
 *		o ${timeout} is the time until next timeout in comm_timer list.
 *		o ${range lower value upper} checks if lower<=value<=upper
 *			returns value if check succeeds.
 *
 * ; Example file
 * SCENARIO_BEGIN Example scenario
 * RANGE_BEGIN 0 100
 *   ENTRY_BEGIN
 *   ; precoded answers to queries.
 *   ENTRY_END
 * END_RANGE
 * STEP 0 QUERY
 *   ENTRY_BEGIN
 *   ; query
 *   ENTRY_END
 * ; a query is sent out to the network by resolver.
 * ; precoded answer from range is returned.
 * ; algorithm will do precoded answers from RANGE immediately, except if
 * ; the next step specifically checks for that OUT_QUERY.
 * ; or if none of the precoded answers match.
 * STEP 1 CHECK_ANSWER
 *   ENTRY_BEGIN
 *   ; what the reply should look like
 *   ENTRY_END
 * ; successful termination. (if the answer was OK).
 * ; also, all answers must have been checked with CHECK_ANSWER.
 * ; and, no more pending out_queries (that have not been checked).
 * SCENARIO_END
 * 
 * 
*/ #ifndef TESTCODE_REPLAY_H #define TESTCODE_REPLAY_H #include "util/netevent.h" #include "testcode/testpkts.h" #include "util/rbtree.h" struct replay_answer; struct replay_moment; struct replay_range; struct fake_pending; struct fake_timer; struct replay_var; struct infra_cache; struct sldns_buffer; /** * A replay scenario. */ struct replay_scenario { /** name of replay scenario. malloced string. */ char* title; /** The list of replay moments. Linked list. Time increases in list. */ struct replay_moment* mom_first; /** The last element in list of replay moments. */ struct replay_moment* mom_last; /** * List of matching answers. This is to ease replay scenario * creation. It lists queries (to the network) and what answer * should be returned. The matching answers are valid for a range * of time steps. * So: timestep, parts of query, destination --> answer. */ struct replay_range* range_list; }; /** * A replay moment. * Basically, it consists of events to a fake select() call. * This is a recording of an event that happens. * And if output is presented, what is done with that. */ struct replay_moment { /** * The replay time step number. Starts at 0, time is incremented * every time the fake select() is run. */ int time_step; /** Next replay moment in list of replay moments. */ struct replay_moment* mom_next; /** what happens this moment? */ enum replay_event_type { /** nothing happens, as if this event is not there. */ repevt_nothing, /** incoming query */ repevt_front_query, /** test fails if reply to query does not match */ repevt_front_reply, /** timeout */ repevt_timeout, /** time passes */ repevt_time_passes, /** reply arrives from the network */ repevt_back_reply, /** test fails if query to the network does not match */ repevt_back_query, /** check autotrust key file */ repevt_autotrust_check, /** check a temp file */ repevt_tempfile_check, /** an error happens to outbound query */ repevt_error, /** assignment to a variable */ repevt_assign, /** store infra rtt cache entry: addr and string (int) */ repevt_infra_rtt, /** cause traffic to flow */ repevt_traffic } /** variable with what is to happen this moment */ evt_type; /** The sent packet must match this. Incoming events, the data. */ struct entry* match; /** the amount of time that passes */ struct timeval elapse; /** address that must be matched, or packet remote host address. */ struct sockaddr_storage addr; /** length of addr, if 0, then any address will do */ socklen_t addrlen; /** macro name, for assign. */ char* variable; /** string argument, for assign. */ char* string; /** the autotrust file id to check */ char* autotrust_id; /** file contents to match, one string per line */ struct config_strlist* file_content; }; /** * Range of timesteps, and canned replies to matching queries. */ struct replay_range { /** time range when this is valid. Including start and end step. */ int start_step; /** end step of time range. */ int end_step; /** address of where this range is served. */ struct sockaddr_storage addr; /** length of addr, if 0, then any address will do */ socklen_t addrlen; /** Matching list */ struct entry* match; /** next in list of time ranges. */ struct replay_range* next_range; }; /** * Replay storage of runtime information. */ struct replay_runtime { /** * The scenario */ struct replay_scenario* scenario; /** * Current moment. */ struct replay_moment* now; /** * List of pending queries in order they were sent out. First * one has been sent out most recently. Last one in list is oldest. */ struct fake_pending* pending_list; /** * List of answers to queries from clients. These need to be checked. */ struct replay_answer* answer_list; /** last element in answer list. */ struct replay_answer* answer_last; /** list of fake timer callbacks that are pending */ struct fake_timer* timer_list; /** callback to call for incoming queries */ comm_point_callback_type* callback_query; /** user argument for incoming query callback */ void *cb_arg; /** ref the infra cache (was passed to outside_network_create) */ struct infra_cache* infra; /** the current time in seconds */ time_t now_secs; /** the current time in microseconds */ struct timeval now_tv; /** has TCP connection seen a keepalive? */ int tcp_seen_keepalive; /** signal handler callback */ void (*sig_cb)(int, void*); /** signal handler user arg */ void *sig_cb_arg; /** time to exit cleanly */ int exit_cleanly; /** size of buffers */ size_t bufsize; /** * Tree of macro values. Of type replay_var */ rbtree_type* vars; }; /** * Pending queries to network, fake replay version. */ struct fake_pending { /** what is important only that we remember the query, copied here. */ struct sldns_buffer* buffer; /** and to what address this is sent to. */ struct sockaddr_storage addr; /** len of addr */ socklen_t addrlen; /** zone name, uncompressed wire format (as used when sent) */ uint8_t* zone; /** length of zone name */ size_t zonelen; /** qtype */ int qtype; /** The callback function to call when answer arrives (or timeout) */ comm_point_callback_type* callback; /** callback user argument */ void* cb_arg; /** original timeout in seconds from 'then' */ int timeout; /** next in pending list */ struct fake_pending* next; /** the buffer parsed into a sldns_pkt */ uint8_t* pkt; size_t pkt_len; /** by what transport was the query sent out */ enum transport_type transport; /** if this is a serviced query */ int serviced; /** if we are handling a multi pkt tcp stream, non 0 and the pkt nr*/ int tcp_pkt_counter; /** the runtime structure this is part of */ struct replay_runtime* runtime; }; /** * An answer that is pending to happen. */ struct replay_answer { /** Next in list */ struct replay_answer* next; /** reply information */ struct comm_reply repinfo; /** the answer preparsed as ldns pkt */ uint8_t* pkt; size_t pkt_len; }; /** * Timers with callbacks, fake replay version. */ struct fake_timer { /** next in list */ struct fake_timer* next; /** the runtime structure this is part of */ struct replay_runtime* runtime; /** the callback to call */ void (*cb)(void*); /** the callback user argument */ void* cb_arg; /** if timer is enabled */ int enabled; /** when the timer expires */ struct timeval tv; }; /** * Replay macro variable. And its value. */ struct replay_var { /** rbtree node. Key is this structure. Sorted by name. */ rbnode_type node; /** the variable name */ char* name; /** the variable value */ char* value; }; /** * Read a replay scenario from the file. * @param in: file to read from. * @param name: name to print in errors. * @param lineno: incremented for every line read. * @return: Scenario. NULL if no scenario read. */ struct replay_scenario* replay_scenario_read(FILE* in, const char* name, int* lineno); /** * Delete scenario. * @param scen: to delete. */ void replay_scenario_delete(struct replay_scenario* scen); /** compare two replay_vars */ int replay_var_compare(const void* a, const void* b); /** get oldest enabled fake timer */ struct fake_timer* replay_get_oldest_timer(struct replay_runtime* runtime); /** * Create variable storage * @return new or NULL on failure. */ rbtree_type* macro_store_create(void); /** * Delete variable storage * @param store: the macro storage to free up. */ void macro_store_delete(rbtree_type* store); /** * Apply macro substitution to string. * @param store: variable store. * @param runtime: the runtime to look up values as needed. * @param text: string to work on. * @return newly malloced string with result. */ char* macro_process(rbtree_type* store, struct replay_runtime* runtime, char* text); /** * Look up a macro value. Like calling ${$name}. * @param store: variable store * @param name: macro name * @return newly malloced string with result or strdup("") if not found. * or NULL on malloc failure. */ char* macro_lookup(rbtree_type* store, char* name); /** * Set macro value. * @param store: variable store * @param name: macro name * @param value: text to set it to. Not expanded. * @return false on failure. */ int macro_assign(rbtree_type* store, char* name, char* value); /** Print macro variables stored as debug info */ void macro_print_debug(rbtree_type* store); /** testbounds self test */ void testbound_selftest(void); #endif /* TESTCODE_REPLAY_H */ unbound-1.13.1/testcode/unitldns.c0000644000175000017500000002146614010434640016526 0ustar wouterwouter/* * testcode/unitldns.c - unit test for ldns routines. * * Copyright (c) 2014, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Calls ldns unit tests. Exits with code 1 on a failure. */ #include "config.h" #include "util/log.h" #include "testcode/unitmain.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #include "sldns/wire2str.h" #include "sldns/parseutil.h" /** verbose this unit test */ static int vbmp = 0; /** print buffer to hex into string */ static void buf_to_hex(uint8_t* b, size_t blen, char* s, size_t slen) { const char* h = "0123456789ABCDEF"; size_t i; if(slen < blen*2+2 && vbmp) printf("hexstring buffer too small\n"); unit_assert(slen >= blen*2+2); for(i=0; i>4]; s[i*2+1] = h[b[i]&0x0f]; } s[blen*2] = '\n'; s[blen*2+1] = 0; } /** Transform input. * @param txt_in: input text format. * @param wire1: output wireformat in hex (txt_in converted to wire). * @param txt_out: output text format (converted from wire_out). * @param wire2: output wireformat in hex, txt_out converted back to wireformat. * @param bufs: size of the text buffers. */ static void rr_transform(char* txt_in, char* wire1, char* txt_out, char* wire2, size_t bufs) { uint8_t b[65536]; size_t len; int err; len = sizeof(b); err = sldns_str2wire_rr_buf(txt_in, b, &len, NULL, 3600, NULL, 0, NULL, 0); if(err != 0) { if(vbmp) printf("sldns_str2wire_rr_buf, pos %d: %s\n", LDNS_WIREPARSE_OFFSET(err), sldns_get_errorstr_parse(err)); } unit_assert(err == 0); buf_to_hex(b, len, wire1, bufs); if(vbmp) printf("wire1: %s", wire1); err = sldns_wire2str_rr_buf(b, len, txt_out, bufs); unit_assert(err < (int)bufs && err > 0); if(vbmp) printf("txt: %s", txt_out); len = sizeof(b); err = sldns_str2wire_rr_buf(txt_out, b, &len, NULL, 3600, NULL, 0, NULL, 0); if(err != 0) { if(vbmp) printf("sldns_str2wire_rr_buf-2, pos %d: %s\n", LDNS_WIREPARSE_OFFSET(err), sldns_get_errorstr_parse(err)); } unit_assert(err == 0); buf_to_hex(b, len, wire2, bufs); if(vbmp) printf("wire2: %s", wire2); } /** Check if results are correct */ static void rr_checks(char* wire_chk, char* txt_chk, char* txt_out, char* wire_out, char* back) { #ifdef __APPLE__ /* the wiretostr on ipv6 is weird on apple, we cannot check it. * skip AAAA on OSX */ if(strstr(txt_out, "IN AAAA")) txt_out = txt_chk; /* skip this test, but test wirefmt */ /* so we know that txt_out back to wire is the same */ #endif if(strcmp(txt_chk, txt_out) != 0 && vbmp) printf("txt different\n"); if(strcmp(wire_chk, wire_out) != 0 && vbmp) printf("wire1 different\n"); if(strcmp(wire_chk, back) != 0 && vbmp) printf("wire2 different\n"); unit_assert(strcmp(txt_chk, txt_out) == 0); unit_assert(strcmp(wire_chk, wire_out) == 0); unit_assert(strcmp(wire_chk, back) == 0); } /** read rrs to and from string, and wireformat * Skips empty lines and comments. * @param input: input file with text format. * @param check: check file with hex and then textformat */ static void rr_test_file(const char* input, const char* check) { size_t bufs = 131072; FILE* inf, *chf, *of; int lineno = 0, chlineno = 0; char* txt_in = (char*)malloc(bufs); char* txt_out = (char*)malloc(bufs); char* txt_chk = (char*)malloc(bufs); char* wire_out = (char*)malloc(bufs); char* wire_chk = (char*)malloc(bufs); char* back = (char*)malloc(bufs); if(!txt_in || !txt_out || !txt_chk || !wire_out || !wire_chk || !back) fatal_exit("malloc failure"); inf = fopen(input, "r"); if(!inf) fatal_exit("cannot open %s: %s", input, strerror(errno)); chf = fopen(check, "r"); if(!chf) fatal_exit("cannot open %s: %s", check, strerror(errno)); of = NULL; if(0) { /* debug: create check file */ of = fopen("outputfile", "w"); if(!of) fatal_exit("cannot write output: %s", strerror(errno)); } while(fgets(txt_in, (int)bufs, inf)) { lineno++; if(vbmp) printf("\n%s:%d %s", input, lineno, txt_in); /* skip empty lines and comments */ if(txt_in[0] == 0 || txt_in[0] == '\n' || txt_in[0] == ';') continue; /* read check lines */ if(!fgets(wire_chk, (int)bufs, chf)) printf("%s too short\n", check); if(!fgets(txt_chk, (int)bufs, chf)) printf("%s too short\n", check); chlineno += 2; if(vbmp) printf("%s:%d %s", check, chlineno-1, wire_chk); if(vbmp) printf("%s:%d %s", check, chlineno, txt_chk); /* generate results */ rr_transform(txt_in, wire_out, txt_out, back, bufs); /* checks */ if(of) { fprintf(of, "%s%s", wire_out, txt_out); } else { rr_checks(wire_chk, txt_chk, txt_out, wire_out, back); } } if(of) fclose(of); fclose(inf); fclose(chf); free(txt_in); free(txt_out); free(txt_chk); free(wire_out); free(wire_chk); free(back); } #define xstr(s) str(s) #define str(s) #s #define SRCDIRSTR xstr(SRCDIR) /** read rrs to and from string, to and from wireformat */ static void rr_tests(void) { rr_test_file(SRCDIRSTR "/testdata/test_ldnsrr.1", SRCDIRSTR "/testdata/test_ldnsrr.c1"); rr_test_file(SRCDIRSTR "/testdata/test_ldnsrr.2", SRCDIRSTR "/testdata/test_ldnsrr.c2"); rr_test_file(SRCDIRSTR "/testdata/test_ldnsrr.3", SRCDIRSTR "/testdata/test_ldnsrr.c3"); rr_test_file(SRCDIRSTR "/testdata/test_ldnsrr.4", SRCDIRSTR "/testdata/test_ldnsrr.c4"); rr_test_file(SRCDIRSTR "/testdata/test_ldnsrr.5", SRCDIRSTR "/testdata/test_ldnsrr.c5"); } /** test various base64 decoding options */ static void b64_test(void) { /* "normal" b64 alphabet, with padding */ char* p1 = "aGVsbG8="; /* "hello" */ char* p2 = "aGVsbG8+"; /* "hello>" */ char* p3 = "aGVsbG8/IQ=="; /* "hello?!" */ char* p4 = "aGVsbG8"; /* "hel" + extra garbage */ /* base64 url, without padding */ char* u1 = "aGVsbG8"; /* "hello" */ char* u2 = "aGVsbG8-"; /* "hello>" */ char* u3 = "aGVsbG8_IQ"; /* "hello?!" */ char* u4 = "aaaaa"; /* garbage */ char target[128]; size_t tarsize = 128; int result; memset(target, 0, sizeof(target)); result = sldns_b64_pton(p1, (uint8_t*)target, tarsize); unit_assert(result == strlen("hello") && strcmp(target, "hello") == 0); memset(target, 0, sizeof(target)); result = sldns_b64_pton(p2, (uint8_t*)target, tarsize); unit_assert(result == strlen("hello>") && strcmp(target, "hello>") == 0); memset(target, 0, sizeof(target)); result = sldns_b64_pton(p3, (uint8_t*)target, tarsize); unit_assert(result == strlen("hello?!") && strcmp(target, "hello?!") == 0); memset(target, 0, sizeof(target)); result = sldns_b64_pton(p4, (uint8_t*)target, tarsize); /* when padding is used everything that is not a block of 4 will be * ignored */ unit_assert(result == strlen("hel") && strcmp(target, "hel") == 0); memset(target, 0, sizeof(target)); result = sldns_b64url_pton(u1, strlen(u1), (uint8_t*)target, tarsize); unit_assert(result == strlen("hello") && strcmp(target, "hello") == 0); memset(target, 0, sizeof(target)); result = sldns_b64url_pton(u2, strlen(u2), (uint8_t*)target, tarsize); unit_assert(result == strlen("hello>") && strcmp(target, "hello>") == 0); memset(target, 0, sizeof(target)); result = sldns_b64url_pton(u3, strlen(u3), (uint8_t*)target, tarsize); unit_assert(result == strlen("hello+/") && strcmp(target, "hello?!") == 0); /* one item in block of four is not allowed */ memset(target, 0, sizeof(target)); result = sldns_b64url_pton(u4, strlen(u4), (uint8_t*)target, tarsize); unit_assert(result == -1); } void ldns_test(void) { unit_show_feature("sldns"); rr_tests(); b64_test(); } unbound-1.13.1/testcode/petal.c0000644000175000017500000003775014010434640015776 0ustar wouterwouter/* * petal.c - https daemon that is small and beautiful. * * Copyright (c) 2010, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * HTTP1.1/SSL server. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #include #include #include #include #if defined(UNBOUND_ALLOC_LITE) || defined(UNBOUND_ALLOC_STATS) #ifdef malloc #undef malloc #endif #ifdef free #undef free #endif #endif /* alloc lite or alloc stats */ /** verbosity for this application */ static int verb = 0; /** Give petal usage, and exit (1). */ static void usage(void) { printf("Usage: petal [opts]\n"); printf(" https daemon serves files from ./'host'/filename\n"); printf(" (no hostname: from the 'default' directory)\n"); printf("-a addr bind to this address, 127.0.0.1\n"); printf("-p port port number, default 443\n"); printf("-k keyfile SSL private key file (PEM), petal.key\n"); printf("-c certfile SSL certificate file (PEM), petal.pem\n"); printf("-v more verbose\n"); printf("-h show this usage help\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); exit(1); } /** fatal exit */ static void print_exit(const char* str) {printf("error %s\n", str); exit(1);} /** print errno */ static void log_errno(const char* str) {printf("error %s: %s\n", str, strerror(errno));} /** parse a text IP address into a sockaddr */ static int parse_ip_addr(char* str, int port, struct sockaddr_storage* ret, socklen_t* l) { socklen_t len = 0; struct sockaddr_storage* addr = NULL; struct sockaddr_in6 a6; struct sockaddr_in a; uint16_t p = (uint16_t)port; int fam = 0; memset(&a6, 0, sizeof(a6)); memset(&a, 0, sizeof(a)); if(inet_pton(AF_INET6, str, &a6.sin6_addr) > 0) { /* it is an IPv6 */ fam = AF_INET6; a6.sin6_family = AF_INET6; a6.sin6_port = (in_port_t)htons(p); addr = (struct sockaddr_storage*)&a6; len = (socklen_t)sizeof(struct sockaddr_in6); } if(inet_pton(AF_INET, str, &a.sin_addr) > 0) { /* it is an IPv4 */ fam = AF_INET; a.sin_family = AF_INET; a.sin_port = (in_port_t)htons(p); addr = (struct sockaddr_storage*)&a; len = (socklen_t)sizeof(struct sockaddr_in); } if(!len) print_exit("cannot parse addr"); *l = len; memmove(ret, addr, len); return fam; } /** close the fd */ static void fd_close(int fd) { #ifndef USE_WINSOCK close(fd); #else closesocket(fd); #endif } /** * Read one line from SSL * zero terminates. * skips "\r\n" (but not copied to buf). * @param ssl: the SSL connection to read from (blocking). * @param buf: buffer to return line in. * @param len: size of the buffer. * @return 0 on error, 1 on success. */ static int read_ssl_line(SSL* ssl, char* buf, size_t len) { size_t n = 0; int r; int endnl = 0; while(1) { if(n >= len) { if(verb) printf("line too long\n"); return 0; } if((r = SSL_read(ssl, buf+n, 1)) <= 0) { if(SSL_get_error(ssl, r) == SSL_ERROR_ZERO_RETURN) { /* EOF */ break; } if(verb) printf("could not SSL_read\n"); return 0; } if(endnl && buf[n] == '\n') { break; } else if(endnl) { /* bad data */ if(verb) printf("error: stray linefeeds\n"); return 0; } else if(buf[n] == '\r') { /* skip \r, and also \n on the wire */ endnl = 1; continue; } else if(buf[n] == '\n') { /* skip the \n, we are done */ break; } else n++; } buf[n] = 0; return 1; } /** process one http header */ static int process_one_header(char* buf, char* file, size_t flen, char* host, size_t hlen, int* vs) { if(strncasecmp(buf, "GET ", 4) == 0) { char* e = strstr(buf, " HTTP/1.1"); if(!e) e = strstr(buf, " http/1.1"); if(!e) { e = strstr(buf, " HTTP/1.0"); if(!e) e = strstr(buf, " http/1.0"); if(!e) e = strrchr(buf, ' '); if(!e) e = strrchr(buf, '\t'); if(e) *vs = 10; } if(e) *e = 0; if(strlen(buf) < 4) return 0; (void)strlcpy(file, buf+4, flen); } else if(strncasecmp(buf, "Host: ", 6) == 0) { (void)strlcpy(host, buf+6, hlen); } return 1; } /** read http headers and process them */ static int read_http_headers(SSL* ssl, char* file, size_t flen, char* host, size_t hlen, int* vs) { char buf[1024]; file[0] = 0; host[0] = 0; while(read_ssl_line(ssl, buf, sizeof(buf))) { if(verb>=2) printf("read: %s\n", buf); if(buf[0] == 0) return 1; if(!process_one_header(buf, file, flen, host, hlen, vs)) return 0; } return 0; } /** setup SSL context */ static SSL_CTX* setup_ctx(char* key, char* cert) { SSL_CTX* ctx = SSL_CTX_new(SSLv23_server_method()); if(!ctx) print_exit("out of memory"); #if SSL_OP_NO_SSLv2 != 0 (void)SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2); #endif (void)SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3); if(!SSL_CTX_use_certificate_chain_file(ctx, cert)) print_exit("cannot read cert"); if(!SSL_CTX_use_PrivateKey_file(ctx, key, SSL_FILETYPE_PEM)) print_exit("cannot read key"); if(!SSL_CTX_check_private_key(ctx)) print_exit("private key is not correct"); #if HAVE_DECL_SSL_CTX_SET_ECDH_AUTO if (!SSL_CTX_set_ecdh_auto(ctx,1)) if(verb>=1) printf("failed to set_ecdh_auto, not enabling ECDHE\n"); #elif defined(USE_ECDSA) if(1) { EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1); if (!ecdh) { if(verb>=1) printf("could not find p256, not enabling ECDHE\n"); } else { if (1 != SSL_CTX_set_tmp_ecdh (ctx, ecdh)) { if(verb>=1) printf("Error in SSL_CTX_set_tmp_ecdh, not enabling ECDHE\n"); } EC_KEY_free(ecdh); } } #endif if(!SSL_CTX_load_verify_locations(ctx, cert, NULL)) print_exit("cannot load cert verify locations"); return ctx; } /** setup listening TCP */ static int setup_fd(char* addr, int port) { struct sockaddr_storage ad; socklen_t len; int fd; int c = 1; int fam = parse_ip_addr(addr, port, &ad, &len); fd = socket(fam, SOCK_STREAM, 0); if(fd == -1) { log_errno("socket"); return -1; } if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void*)&c, (socklen_t) sizeof(int)) < 0) { log_errno("setsockopt(SOL_SOCKET, SO_REUSEADDR)"); } if(bind(fd, (struct sockaddr*)&ad, len) == -1) { log_errno("bind"); fd_close(fd); return -1; } if(listen(fd, 5) == -1) { log_errno("listen"); fd_close(fd); return -1; } return fd; } /** setup SSL connection to the client */ static SSL* setup_ssl(int s, SSL_CTX* ctx) { SSL* ssl = SSL_new(ctx); if(!ssl) return NULL; SSL_set_accept_state(ssl); (void)SSL_set_mode(ssl, (long)SSL_MODE_AUTO_RETRY); if(!SSL_set_fd(ssl, s)) { SSL_free(ssl); return NULL; } return ssl; } /** check a file name for safety */ static int file_name_is_safe(char* s) { size_t l = strlen(s); if(s[0] != '/') return 0; /* must start with / */ if(strstr(s, "/../")) return 0; /* no updirs in URL */ if(l>=3 && s[l-1]=='.' && s[l-2]=='.' && s[l-3]=='/') return 0; /* ends with /.. */ return 1; } /** adjust host */ static void adjust_host(char* host) { size_t i, len; /* remove a port number if present */ if(strrchr(host, ':')) *strrchr(host, ':') = 0; /* lowercase */ len = strlen(host); for(i=0; i= 3) {printf("chunk len %x\n", (unsigned)red); fflush(stdout);} at += r; avail -= r; if(red != 0) { if(red > avail) break; /* robust */ memmove(at, tmpbuf, red); at += red; avail -= red; snprintf(at, avail, "\r\n"); r = strlen(at); at += r; avail -= r; } if(in && feof(in) && red != 0) { snprintf(at, avail, "0\r\n"); r = strlen(at); at += r; avail -= r; } if(!in || feof(in)) { snprintf(at, avail, "\r\n"); r = strlen(at); at += r; /* avail -= r; unused */ } /* send chunk */ if(SSL_write(ssl, buf, at-buf) <= 0) { /* SSL error */ break; } /* setup for next chunk */ at = buf; avail = sizeof(buf); } while(in && !feof(in) && !ferror(in)); free(tmpbuf); if(in) fclose(in); } /** provide service to the ssl descriptor */ static void service_ssl(SSL* ssl, struct sockaddr_storage* from, socklen_t falen) { char file[1024]; char host[1024]; char combined[2048]; int vs = 11; if(!read_http_headers(ssl, file, sizeof(file), host, sizeof(host), &vs)) return; if(host[0] != 0) adjust_host(host); if(file[0] != 0) adjust_file(file); if(host[0] == 0 || !host_name_is_safe(host)) (void)strlcpy(host, "default", sizeof(host)); if(!file_name_is_safe(file)) { return; } snprintf(combined, sizeof(combined), "%s%s", host, file); if(verb) { char out[100]; void* a = &((struct sockaddr_in*)from)->sin_addr; if(falen != (socklen_t)sizeof(struct sockaddr_in)) a = &((struct sockaddr_in6*)from)->sin6_addr; out[0]=0; (void)inet_ntop((int)((struct sockaddr_in*)from)->sin_family, a, out, (socklen_t)sizeof(out)); printf("%s requests %s\n", out, combined); fflush(stdout); } if(vs == 10) provide_file_10(ssl, combined); else provide_file_chunked(ssl, combined); } /** provide ssl service */ static void do_service(char* addr, int port, char* key, char* cert) { SSL_CTX* sslctx = setup_ctx(key, cert); int fd = setup_fd(addr, port); int go = 1; if(fd == -1) print_exit("could not setup sockets"); if(verb) {printf("petal start\n"); fflush(stdout);} while(go) { struct sockaddr_storage from; socklen_t flen = (socklen_t)sizeof(from); int s; memset(&from, 0, sizeof(from)); s = accept(fd, (struct sockaddr*)&from, &flen); if(verb) fflush(stdout); if(s != -1) { SSL* ssl = setup_ssl(s, sslctx); if(verb) fflush(stdout); if(ssl) { service_ssl(ssl, &from, flen); if(verb) fflush(stdout); SSL_shutdown(ssl); SSL_free(ssl); } fd_close(s); } else if (verb >=2) log_errno("accept"); if(verb) fflush(stdout); } /* if we get a kill signal, the process dies and the OS reaps us */ if(verb) printf("petal end\n"); fd_close(fd); SSL_CTX_free(sslctx); } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** Main routine for petal */ int main(int argc, char* argv[]) { int c; int port = 443; char* addr = "127.0.0.1", *key = "petal.key", *cert = "petal.pem"; #ifdef USE_WINSOCK WSADATA wsa_data; if((c=WSAStartup(MAKEWORD(2,2), &wsa_data)) != 0) { printf("WSAStartup failed\n"); exit(1); } atexit((void (*)(void))WSACleanup); #endif /* parse the options */ while( (c=getopt(argc, argv, "a:c:k:hp:v")) != -1) { switch(c) { case 'a': addr = optarg; break; case 'c': cert = optarg; break; case 'k': key = optarg; break; case 'p': port = atoi(optarg); break; case 'v': verb++; break; case '?': case 'h': default: usage(); } } argc -= optind; /* argv += optind; not using further arguments */ if(argc != 0) usage(); #ifdef SIGPIPE (void)signal(SIGPIPE, SIG_IGN); #endif #ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) # ifndef S_SPLINT_S OpenSSL_add_all_algorithms(); # endif #else OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif do_service(addr, port, key, cert); #ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA CRYPTO_cleanup_all_ex_data(); #endif #ifdef HAVE_ERR_FREE_STRINGS ERR_free_strings(); #endif return 0; } unbound-1.13.1/testcode/do-tests.sh0000755000175000017500000000336514010434640016621 0ustar wouterwouter#!/usr/bin/env bash . testdata/common.sh NEED_SPLINT='00-lint.tdir' NEED_DOXYGEN='01-doc.tdir' NEED_XXD='fwd_compress_c00c.tdir fwd_zero.tdir' NEED_NC='fwd_compress_c00c.tdir fwd_zero.tdir' NEED_CURL='06-ianaports.tdir root_anchor.tdir' NEED_WHOAMI='07-confroot.tdir' NEED_IPV6='fwd_ancil.tdir fwd_tcp_tc6.tdir stub_udp6.tdir edns_cache.tdir' NEED_NOMINGW='tcp_sigpipe.tdir 07-confroot.tdir 08-host-lib.tdir fwd_ancil.tdir' NEED_DNSCRYPT_PROXY='dnscrypt_queries.tdir dnscrypt_queries_chacha.tdir' # test if dig and ldns-testns are available. test_tool_avail "dig" test_tool_avail "ldns-testns" # test for ipv6, uses streamtcp peculiarity. if ./streamtcp -f ::1 2>&1 | grep "not supported" >/dev/null 2>&1; then HAVE_IPV6=no else HAVE_IPV6=yes fi # test mingw. no signals and so on. if uname | grep MINGW >/dev/null; then HAVE_MINGW=yes else HAVE_MINGW=no fi # stop tests from notifying systemd, if that is compiled in. export -n NOTIFY_SOCKET cd testdata; sh ../testcode/mini_tdir.sh clean rm -f .perfstats.txt for test in `ls -d *.tdir`; do SKIP=0 skip_if_in_list $test "$NEED_SPLINT" "splint" skip_if_in_list $test "$NEED_DOXYGEN" "doxygen" skip_if_in_list $test "$NEED_CURL" "curl" skip_if_in_list $test "$NEED_XXD" "xxd" skip_if_in_list $test "$NEED_NC" "nc" skip_if_in_list $test "$NEED_WHOAMI" "whoami" skip_if_in_list $test "$NEED_DNSCRYPT_PROXY" "dnscrypt-proxy" if echo $NEED_IPV6 | grep $test >/dev/null; then if test "$HAVE_IPV6" = no; then SKIP=1; fi fi if echo $NEED_NOMINGW | grep $test >/dev/null; then if test "$HAVE_MINGW" = yes; then SKIP=1; fi fi if test $SKIP -eq 0; then echo $test sh ../testcode/mini_tdir.sh -a ../.. exe $test else echo "skip $test" fi done sh ../testcode/mini_tdir.sh report cat .perfstats.txt unbound-1.13.1/testcode/lock_verify.c0000644000175000017500000002743114010434640017200 0ustar wouterwouter/* * testcode/lock_verify.c - verifier program for lock traces, checks order. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file checks the lock traces generated by checklock.c. * Checks if locks are consistently locked in the same order. * If not, this can lead to deadlock if threads execute the different * ordering at the same time. * */ #include "config.h" #ifdef HAVE_TIME_H #include #endif #include "util/log.h" #include "util/rbtree.h" #include "util/locks.h" #include "util/fptr_wlist.h" /* --- data structures --- */ struct lock_ref; /** keep track of lock id in lock-verify application * Also defined in smallapp/worker_cb.c for fptr_wlist encapsulation * breakage (the security tests break encapsulation for this test app) */ struct order_id { /** the thread id that created it */ int thr; /** the instance number of creation */ int instance; }; /** a lock */ struct order_lock { /** rbnode in all tree */ rbnode_type node; /** lock id */ struct order_id id; /** the creation file */ char* create_file; /** creation line */ int create_line; /** set of all locks that are smaller than this one (locked earlier) */ rbtree_type* smaller; /** during depthfirstsearch, this is a linked list of the stack * of locks. points to the next lock bigger than this one. */ struct lock_ref* dfs_next; /** if lock has been visited (all smaller locks have been compared to * this lock), only need to compare this with all unvisited(bigger) * locks */ int visited; }; /** reference to a lock in a rbtree set */ struct lock_ref { /** rbnode, key is an order_id ptr */ rbnode_type node; /** the lock referenced */ struct order_lock* lock; /** why is this ref */ char* file; /** line number */ int line; }; /** count of errors detected */ static int errors_detected = 0; /** verbose? */ static int verb = 0; /** print program usage help */ static void usage(void) { printf("lock_verify \n"); } /** read header entry. * @param in: file to read header of. * @return: False if it does not belong to the rest. */ static int read_header(FILE* in) { time_t t; pid_t p; int thrno; static int have_values = 0; static time_t the_time; static pid_t the_pid; static int threads[256]; if(fread(&t, sizeof(t), 1, in) != 1 || fread(&thrno, sizeof(thrno), 1, in) != 1 || fread(&p, sizeof(p), 1, in) != 1) { fatal_exit("fread failed"); } /* check these values are sorta OK */ if(!have_values) { the_time = t; the_pid = p; memset(threads, 0, 256*sizeof(int)); if(thrno >= 256) { fatal_exit("Thread number too big. %d", thrno); } threads[thrno] = 1; have_values = 1; printf(" trace %d from pid %u on %s", thrno, (unsigned)p, ctime(&t)); } else { if(the_pid != p) { printf(" has pid %u, not %u. Skipped.\n", (unsigned)p, (unsigned)the_pid); return 0; } if(threads[thrno]) fatal_exit("same threadno in two files"); threads[thrno] = 1; if( abs((int)(the_time - t)) > 3600) fatal_exit("input files from different times: %u %u", (unsigned)the_time, (unsigned)t); printf(" trace of thread %u:%d\n", (unsigned)p, thrno); } return 1; } /** max length of strings: filenames and function names. */ #define STRMAX 1024 /** read a string from file, false on error */ static int readup_str(char** str, FILE* in) { char buf[STRMAX]; int len = 0; int c; /* ends in zero */ while( (c = fgetc(in)) != 0) { if(c == EOF) fatal_exit("eof in readstr, file too short"); buf[len++] = c; if(len == STRMAX) { fatal_exit("string too long, bad file format"); } } buf[len] = 0; *str = strdup(buf); return 1; } /** read creation entry */ static void read_create(rbtree_type* all, FILE* in) { struct order_lock* o = calloc(1, sizeof(struct order_lock)); if(!o) fatal_exit("malloc failure"); if(fread(&o->id.thr, sizeof(int), 1, in) != 1 || fread(&o->id.instance, sizeof(int), 1, in) != 1 || !readup_str(&o->create_file, in) || fread(&o->create_line, sizeof(int), 1, in) != 1) fatal_exit("fread failed"); o->smaller = rbtree_create(order_lock_cmp); o->node.key = &o->id; if(!rbtree_insert(all, &o->node)) { /* already inserted */ struct order_lock* a = (struct order_lock*)rbtree_search(all, &o->id); log_assert(a); a->create_file = o->create_file; a->create_line = o->create_line; free(o->smaller); free(o); o = a; } if(verb) printf("read create %u %u %s %d\n", (unsigned)o->id.thr, (unsigned)o->id.instance, o->create_file, o->create_line); } /** insert lock entry (empty) into list */ static struct order_lock* insert_lock(rbtree_type* all, struct order_id* id) { struct order_lock* o = calloc(1, sizeof(struct order_lock)); if(!o) fatal_exit("malloc failure"); o->smaller = rbtree_create(order_lock_cmp); o->id = *id; o->node.key = &o->id; if(!rbtree_insert(all, &o->node)) fatal_exit("insert fail should not happen"); return o; } /** read lock entry */ static void read_lock(rbtree_type* all, FILE* in, int val) { struct order_id prev_id, now_id; struct lock_ref* ref; struct order_lock* prev, *now; ref = (struct lock_ref*)calloc(1, sizeof(struct lock_ref)); if(!ref) fatal_exit("malloc failure"); prev_id.thr = val; if(fread(&prev_id.instance, sizeof(int), 1, in) != 1 || fread(&now_id.thr, sizeof(int), 1, in) != 1 || fread(&now_id.instance, sizeof(int), 1, in) != 1 || !readup_str(&ref->file, in) || fread(&ref->line, sizeof(int), 1, in) != 1) fatal_exit("fread failed"); if(verb) printf("read lock %u %u %u %u %s %d\n", (unsigned)prev_id.thr, (unsigned)prev_id.instance, (unsigned)now_id.thr, (unsigned)now_id.instance, ref->file, ref->line); /* find the two locks involved */ prev = (struct order_lock*)rbtree_search(all, &prev_id); now = (struct order_lock*)rbtree_search(all, &now_id); /* if not there - insert 'em */ if(!prev) prev = insert_lock(all, &prev_id); if(!now) now = insert_lock(all, &now_id); ref->lock = prev; ref->node.key = &prev->id; if(!rbtree_insert(now->smaller, &ref->node)) { free(ref->file); free(ref); } } /** read input file */ static void readinput(rbtree_type* all, char* file) { FILE *in = fopen(file, "r"); int fst; if(!in) { perror(file); exit(1); } printf("file %s", file); if(!read_header(in)) { fclose(in); return; } while(fread(&fst, sizeof(fst), 1, in) == 1) { if(fst == -1) read_create(all, in); else read_lock(all, in, fst); } fclose(in); } /** print cycle message */ static void found_cycle(struct lock_ref* visit, int level) { struct lock_ref* p; int i = 0; errors_detected++; printf("Found inconsistent locking order of length %d\n", level); printf("for lock %d %d created %s %d\n", visit->lock->id.thr, visit->lock->id.instance, visit->lock->create_file, visit->lock->create_line); printf("sequence is:\n"); p = visit; while(p) { struct order_lock* next = p->lock->dfs_next?p->lock->dfs_next->lock:visit->lock; printf("[%d] is locked at line %s %d before lock %d %d\n", i, p->file, p->line, next->id.thr, next->id.instance); printf("[%d] lock %d %d is created at %s %d\n", i, next->id.thr, next->id.instance, next->create_file, next->create_line); i++; p = p->lock->dfs_next; if(p && p->lock == visit->lock) break; } } /** Detect cycle by comparing visited now with all (unvisited) bigger nodes */ static int detect_cycle(struct lock_ref* visit, struct lock_ref* from) { struct lock_ref* p = from; while(p) { if(p->lock == visit->lock) return 1; p = p->lock->dfs_next; } return 0; } /** recursive function to depth first search for cycles. * @param visit: the lock visited at this step. * its dfs_next pointer gives the visited lock up in recursion. * same as lookfor at level 0. * @param level: depth of recursion. 0 is start. * @param from: search for matches from unvisited node upwards. */ static void search_cycle(struct lock_ref* visit, int level, struct lock_ref* from) { struct lock_ref* ref; /* check for cycle */ if(detect_cycle(visit, from) && level != 0) { found_cycle(visit, level); fatal_exit("found lock order cycle"); } /* recurse */ if(!visit->lock->visited) from = visit; if(verb > 1) fprintf(stderr, "[%d] visit lock %u %u %s %d\n", level, (unsigned)visit->lock->id.thr, (unsigned)visit->lock->id.instance, visit->lock->create_file, visit->lock->create_line); RBTREE_FOR(ref, struct lock_ref*, visit->lock->smaller) { ref->lock->dfs_next = visit; search_cycle(ref, level+1, from); } visit->lock->visited = 1; } /** Check ordering of one lock */ static void check_order_lock(struct order_lock* lock) { struct lock_ref start; if(lock->visited) return; start.node.key = &lock->id; start.lock = lock; start.file = lock->create_file; start.line = lock->create_line; if(!lock->create_file) log_err("lock %u %u does not have create info", (unsigned)lock->id.thr, (unsigned)lock->id.instance); /* depth first search to find cycle with this lock at head */ lock->dfs_next = NULL; search_cycle(&start, 0, &start); } /** Check ordering of locks */ static void check_order(rbtree_type* all_locks) { /* check each lock */ struct order_lock* lock; int i=0; RBTREE_FOR(lock, struct order_lock*, all_locks) { if(verb) printf("[%d/%d] Checking lock %d %d %s %d\n", i, (int)all_locks->count, lock->id.thr, lock->id.instance, lock->create_file, lock->create_line); else if (i % ((all_locks->count/75)<1?1:all_locks->count/75) == 0) fprintf(stderr, "."); i++; check_order_lock(lock); } fprintf(stderr, "\n"); } /** main program to verify all traces passed */ int main(int argc, char* argv[]) { rbtree_type* all_locks; int i; time_t starttime = time(NULL); #ifdef USE_THREAD_DEBUG /* do not overwrite the ublocktrace files with the ones generated * by this program (i.e. when the log code creates a lock) */ check_locking_order = 0; #endif if(argc <= 1) { usage(); return 1; } log_init(NULL, 0, NULL); log_ident_set("lock-verify"); /* init */ all_locks = rbtree_create(order_lock_cmp); errors_detected = 0; /* read the input files */ for(i=1; icount, (int)(time(NULL)-starttime), errors_detected); if(errors_detected) return 1; return 0; } unbound-1.13.1/testcode/readhex.h0000644000175000017500000000376614010434640016316 0ustar wouterwouter/* * testcode/readhex.h - read hex data. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Declarations useful for the unit tests. */ #ifndef TESTCODE_READHEX_H #define TESTCODE_READHEX_H struct sldns_buffer; /** * Helper to convert hex string to packet buffer. * @param pkt: buffer to put result in. * @param hex: string of hex data. Spaces and ';...' comments are skipped. */ void hex_to_buf(struct sldns_buffer* pkt, const char* hex); #endif /* TESTCODE_READHEX_H */ unbound-1.13.1/testcode/unitneg.c0000644000175000017500000003334214010434640016333 0ustar wouterwouter/* * testcode/unitneg.c - unit test for negative cache routines. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Calls negative cache unit tests. Exits with code 1 on a failure. */ #include "config.h" #include "util/log.h" #include "util/net_help.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "testcode/unitmain.h" #include "validator/val_neg.h" #include "sldns/rrdef.h" /** verbose unit test for negative cache */ static int negverbose = 0; /** debug printout of neg cache */ static void print_neg_cache(struct val_neg_cache* neg) { char buf[1024]; struct val_neg_zone* z; struct val_neg_data* d; printf("neg_cache print\n"); printf("memuse %d of %d\n", (int)neg->use, (int)neg->max); printf("maxiter %d\n", (int)neg->nsec3_max_iter); printf("%d zones\n", (int)neg->tree.count); RBTREE_FOR(z, struct val_neg_zone*, &neg->tree) { dname_str(z->name, buf); printf("%24s", buf); printf(" len=%2.2d labs=%d inuse=%d count=%d tree.count=%d\n", (int)z->len, z->labs, (int)z->in_use, z->count, (int)z->tree.count); } RBTREE_FOR(z, struct val_neg_zone*, &neg->tree) { printf("\n"); dname_print(stdout, NULL, z->name); printf(" zone details\n"); printf("len=%2.2d labs=%d inuse=%d count=%d tree.count=%d\n", (int)z->len, z->labs, (int)z->in_use, z->count, (int)z->tree.count); if(z->parent) { printf("parent="); dname_print(stdout, NULL, z->parent->name); printf("\n"); } else { printf("parent=NULL\n"); } RBTREE_FOR(d, struct val_neg_data*, &z->tree) { dname_str(d->name, buf); printf("%24s", buf); printf(" len=%2.2d labs=%d inuse=%d count=%d\n", (int)d->len, d->labs, (int)d->in_use, d->count); } } } /** get static pointer to random zone name */ static char* get_random_zone(void) { static char zname[36]; int labels = random() % 3; int i; char* p = zname; int labnum; for(i=0; ilock); if(negverbose) log_nametypeclass(0, "add to zone", (uint8_t*)zname, 0, 0); z = neg_find_zone(neg, (uint8_t*)zname, strlen(zname)+1, LDNS_RR_CLASS_IN); if(!z) { z = neg_create_zone(neg, (uint8_t*)zname, strlen(zname)+1, LDNS_RR_CLASS_IN); } unit_assert(z); val_neg_zone_take_inuse(z); /* construct random NSEC item */ get_random_data(&from, &to, zname); /* create nsec and insert it */ memset(&rd, 0, sizeof(rd)); memset(&nsec, 0, sizeof(nsec)); nsec.rk.dname = (uint8_t*)from; nsec.rk.dname_len = strlen(from)+1; nsec.rk.type = htons(LDNS_RR_TYPE_NSEC); nsec.rk.rrset_class = htons(LDNS_RR_CLASS_IN); nsec.entry.data = &rd; rd.security = sec_status_secure; rd.count = 1; rd.rr_len = &rr_len; rr_len = 19; rd.rr_ttl = &rr_ttl; rr_ttl = 0; rd.rr_data = &rr_data; rr_data = (uint8_t*)to; neg_insert_data(neg, z, &nsec); lock_basic_unlock(&neg->lock); } /** remove a random item */ static void remove_item(struct val_neg_cache* neg) { int n, i; struct val_neg_data* d; rbnode_type* walk; struct val_neg_zone* z; lock_basic_lock(&neg->lock); if(neg->tree.count == 0) { lock_basic_unlock(&neg->lock); return; /* nothing to delete */ } /* pick a random zone */ walk = rbtree_first(&neg->tree); /* first highest parent, big count */ z = (struct val_neg_zone*)walk; n = random() % (int)(z->count); if(negverbose) printf("neg stress delete zone %d\n", n); i=0; walk = rbtree_first(&neg->tree); z = (struct val_neg_zone*)walk; while(i!=n+1 && walk && walk != RBTREE_NULL && !z->in_use) { walk = rbtree_next(walk); z = (struct val_neg_zone*)walk; if(z->in_use) i++; } if(!walk || walk == RBTREE_NULL) { lock_basic_unlock(&neg->lock); return; } if(!z->in_use) { lock_basic_unlock(&neg->lock); return; } if(negverbose) log_nametypeclass(0, "delete zone", z->name, 0, 0); /* pick a random nsec item. - that is in use */ walk = rbtree_first(&z->tree); /* first is highest parent */ d = (struct val_neg_data*)walk; n = random() % (int)(d->count); if(negverbose) printf("neg stress delete item %d\n", n); i=0; walk = rbtree_first(&z->tree); d = (struct val_neg_data*)walk; while(i!=n+1 && walk && walk != RBTREE_NULL && !d->in_use) { walk = rbtree_next(walk); d = (struct val_neg_data*)walk; if(d->in_use) i++; } if(!walk || walk == RBTREE_NULL) { lock_basic_unlock(&neg->lock); return; } if(d->in_use) { if(negverbose) log_nametypeclass(0, "neg delete item:", d->name, 0, 0); neg_delete_data(neg, d); } lock_basic_unlock(&neg->lock); } /** sum up the zone trees */ static size_t sumtrees_all(struct val_neg_cache* neg) { size_t res = 0; struct val_neg_zone* z; RBTREE_FOR(z, struct val_neg_zone*, &neg->tree) { res += z->tree.count; } return res; } /** sum up the zone trees, in_use only */ static size_t sumtrees_inuse(struct val_neg_cache* neg) { size_t res = 0; struct val_neg_zone* z; struct val_neg_data* d; RBTREE_FOR(z, struct val_neg_zone*, &neg->tree) { /* get count of highest parent for num in use */ d = (struct val_neg_data*)rbtree_first(&z->tree); if(d && (rbnode_type*)d!=RBTREE_NULL) res += d->count; } return res; } /** check if lru is still valid */ static void check_lru(struct val_neg_cache* neg) { struct val_neg_data* p, *np; size_t num = 0; size_t inuse; p = neg->first; while(p) { if(!p->prev) { unit_assert(neg->first == p); } np = p->next; if(np) { unit_assert(np->prev == p); } else { unit_assert(neg->last == p); } num++; p = np; } inuse = sumtrees_inuse(neg); if(negverbose) printf("num lru %d, inuse %d, all %d\n", (int)num, (int)sumtrees_inuse(neg), (int)sumtrees_all(neg)); unit_assert( num == inuse); unit_assert( inuse <= sumtrees_all(neg)); } /** sum up number of items inuse in subtree */ static int sum_subtree_inuse(struct val_neg_zone* zone, struct val_neg_data* data) { struct val_neg_data* d; int num = 0; RBTREE_FOR(d, struct val_neg_data*, &zone->tree) { if(dname_subdomain_c(d->name, data->name)) { if(d->in_use) num++; } } return num; } /** sum up number of items inuse in subtree */ static int sum_zone_subtree_inuse(struct val_neg_cache* neg, struct val_neg_zone* zone) { struct val_neg_zone* z; int num = 0; RBTREE_FOR(z, struct val_neg_zone*, &neg->tree) { if(dname_subdomain_c(z->name, zone->name)) { if(z->in_use) num++; } } return num; } /** check point in data tree */ static void check_data(struct val_neg_zone* zone, struct val_neg_data* data) { unit_assert(data->count > 0); if(data->parent) { unit_assert(data->parent->count >= data->count); if(data->parent->in_use) { unit_assert(data->parent->count > data->count); } unit_assert(data->parent->labs == data->labs-1); /* and parent must be one label shorter */ unit_assert(data->name[0] == (data->len-data->parent->len-1)); unit_assert(query_dname_compare(data->name + data->name[0]+1, data->parent->name) == 0); } else { /* must be apex */ unit_assert(dname_is_root(data->name)); } /* tree property: */ unit_assert(data->count == sum_subtree_inuse(zone, data)); } /** check if tree of data in zone is valid */ static void checkzonetree(struct val_neg_zone* zone) { struct val_neg_data* d; /* check all data in tree */ RBTREE_FOR(d, struct val_neg_data*, &zone->tree) { check_data(zone, d); } } /** check if negative cache is still valid */ static void check_zone_invariants(struct val_neg_cache* neg, struct val_neg_zone* zone) { unit_assert(zone->nsec3_hash == 0); unit_assert(zone->tree.cmp == &val_neg_data_compare); unit_assert(zone->count != 0); if(zone->tree.count == 0) unit_assert(!zone->in_use); else { if(!zone->in_use) { /* details on error */ log_nametypeclass(0, "zone", zone->name, 0, 0); log_err("inuse %d count=%d tree.count=%d", zone->in_use, zone->count, (int)zone->tree.count); if(negverbose) print_neg_cache(neg); } unit_assert(zone->in_use); } if(zone->parent) { unit_assert(zone->parent->count >= zone->count); if(zone->parent->in_use) { unit_assert(zone->parent->count > zone->count); } unit_assert(zone->parent->labs == zone->labs-1); /* and parent must be one label shorter */ unit_assert(zone->name[0] == (zone->len-zone->parent->len-1)); unit_assert(query_dname_compare(zone->name + zone->name[0]+1, zone->parent->name) == 0); } else { /* must be apex */ unit_assert(dname_is_root(zone->name)); } /* tree property: */ unit_assert(zone->count == sum_zone_subtree_inuse(neg, zone)); /* check structure of zone data tree */ checkzonetree(zone); } /** check if negative cache is still valid */ static void check_neg_invariants(struct val_neg_cache* neg) { struct val_neg_zone* z; /* check structure of LRU list */ lock_basic_lock(&neg->lock); check_lru(neg); unit_assert(neg->max == 1024*1024); unit_assert(neg->nsec3_max_iter == 1500); unit_assert(neg->tree.cmp == &val_neg_zone_compare); if(neg->tree.count == 0) { /* empty */ unit_assert(neg->tree.count == 0); unit_assert(neg->first == NULL); unit_assert(neg->last == NULL); unit_assert(neg->use == 0); lock_basic_unlock(&neg->lock); return; } unit_assert(neg->first != NULL); unit_assert(neg->last != NULL); RBTREE_FOR(z, struct val_neg_zone*, &neg->tree) { check_zone_invariants(neg, z); } lock_basic_unlock(&neg->lock); } /** perform stress test on insert and delete in neg cache */ static void stress_test(struct val_neg_cache* neg) { int i; if(negverbose) printf("negcache test\n"); for(i=0; i<100; i++) { if(random() % 10 < 8) add_item(neg); else remove_item(neg); check_neg_invariants(neg); } /* empty it */ if(negverbose) printf("neg stress empty\n"); while(neg->first) { remove_item(neg); check_neg_invariants(neg); } if(negverbose) printf("neg stress emptied\n"); unit_assert(neg->first == NULL); /* insert again */ for(i=0; i<100; i++) { if(random() % 10 < 8) add_item(neg); else remove_item(neg); check_neg_invariants(neg); } } void neg_test(void) { struct val_neg_cache* neg; srandom(48); unit_show_feature("negative cache"); /* create with defaults */ neg = val_neg_create(NULL, 1500); unit_assert(neg); stress_test(neg); neg_cache_delete(neg); } unbound-1.13.1/testcode/unitauth.c0000644000175000017500000007543214010434640016531 0ustar wouterwouter/* * testcode/unitauth.c - unit test for authzone authoritative zone code. * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Unit test for auth zone code. */ #include "config.h" #include "services/authzone.h" #include "testcode/unitmain.h" #include "util/regional.h" #include "util/net_help.h" #include "util/config_file.h" #include "util/data/msgreply.h" #include "services/cache/dns.h" #include "sldns/str2wire.h" #include "sldns/wire2str.h" #include "sldns/sbuffer.h" /** verbosity for this test */ static int vbmp = 0; /** struct for query and answer checks */ struct q_ans { /** zone to query (delegpt) */ const char* zone; /** query name, class, type */ const char* query; /** additional flags or "" */ const char* flags; /** expected answer to check against, multi-line string */ const char* answer; }; /** auth zone for test */ static const char* zone_example_com = "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" "example.com. 3600 IN A 10.0.0.1\n" "example.com. 3600 IN NS ns.example.com.\n" "example.com. 3600 IN MX 50 mail.example.com.\n" "deep.ent.example.com. 3600 IN A 10.0.0.9\n" "mail.example.com. 3600 IN A 10.0.0.4\n" "ns.example.com. 3600 IN A 10.0.0.5\n" "out.example.com. 3600 IN CNAME www.example.com.\n" "plan.example.com. 3600 IN CNAME nonexist.example.com.\n" "redir.example.com. 3600 IN DNAME redir.example.org.\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" "*.wild.example.com. 3600 IN A 10.0.0.8\n" "*.wild2.example.com. 3600 IN CNAME www.example.com.\n" "*.wild3.example.com. 3600 IN A 10.0.0.8\n" "*.wild3.example.com. 3600 IN MX 50 mail.example.com.\n" "www.example.com. 3600 IN A 10.0.0.2\n" "www.example.com. 3600 IN A 10.0.0.3\n" "yy.example.com. 3600 IN TXT \"a\"\n" "yy.example.com. 3600 IN TXT \"b\"\n" "yy.example.com. 3600 IN TXT \"c\"\n" "yy.example.com. 3600 IN TXT \"d\"\n" "yy.example.com. 3600 IN TXT \"e\"\n" "yy.example.com. 3600 IN TXT \"f\"\n" /* and some tests for RRSIGs (rrsig is www.nlnetlabs.nl copy) */ /* normal: domain and 1 rrsig */ "z1.example.com. 3600 IN A 10.0.0.10\n" "z1.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" /* normal: domain and 2 rrsigs */ "z2.example.com. 3600 IN A 10.0.0.10\n" "z2.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z2.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12345 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" /* normal: domain and 3 rrsigs */ "z3.example.com. 3600 IN A 10.0.0.10\n" "z3.example.com. 3600 IN A 10.0.0.11\n" "z3.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z3.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12345 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z3.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12356 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" /* just an RRSIG rrset with nothing else */ "z4.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" /* just an RRSIG rrset with nothing else, 2 rrsigs */ "z5.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z5.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12345 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" #if 1 /* comparison of file does not work on this part because duplicates */ /* are removed and the rrsets are reordered */ "end_of_check.z6.example.com. 3600 IN A 10.0.0.10\n" /* first rrsig, then A record */ "z6.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z6.example.com. 3600 IN A 10.0.0.10\n" /* first two rrsigs, then A record */ "z7.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z7.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12345 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z7.example.com. 3600 IN A 10.0.0.10\n" /* first two rrsigs, then two A records */ "z8.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z8.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 12345 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z8.example.com. 3600 IN A 10.0.0.10\n" "z8.example.com. 3600 IN A 10.0.0.11\n" /* duplicate RR, duplicate RRsig */ "z9.example.com. 3600 IN A 10.0.0.10\n" "z9.example.com. 3600 IN A 10.0.0.11\n" "z9.example.com. 3600 IN A 10.0.0.10\n" "z9.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "z9.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" /* different covered types, first RRSIGs then, RRs, then another RRSIG */ "zz10.example.com. 3600 IN RRSIG AAAA 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "zz10.example.com. 3600 IN RRSIG A 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "zz10.example.com. 3600 IN A 10.0.0.10\n" "zz10.example.com. 3600 IN RRSIG CNAME 8 3 10200 20170612005010 20170515005010 42393 nlnetlabs.nl. NhEDrHkuIgHkjWhDRVsGOIJWZpSs+QdduilWFe5d+/ZhOheLJbaTYD5w6+ZZ3yPh1tNud+jlg+GyiOSVapLEO31swDCIarL1UfRjRSpxxDCHGag5Zu+S4hF+KURxO3cJk8jLBELMQyRuMRHoKrw/wsiLGVu1YpAyAPPMcjFBNbk=\n" "zz10.example.com. 3600 IN AAAA ::11\n" #endif /* if0 for duplicates and reordering */ ; /** queries for example.com: zone, query, flags, answer. end with NULL */ static struct q_ans example_com_queries[] = { { "example.com", "www.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "www.example.com. 3600 IN A 10.0.0.2\n" "www.example.com. 3600 IN A 10.0.0.3\n" }, { "example.com", "example.com. SOA", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "example.com. 3600 IN A 10.0.0.1\n" }, { "example.com", "example.com. AAAA", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "example.com. NS", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "example.com. 3600 IN NS ns.example.com.\n" ";additional section\n" "ns.example.com. 3600 IN A 10.0.0.5\n" }, { "example.com", "example.com. MX", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "example.com. 3600 IN MX 50 mail.example.com.\n" ";additional section\n" "mail.example.com. 3600 IN A 10.0.0.4\n" }, { "example.com", "example.com. IN ANY", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" "example.com. 3600 IN MX 50 mail.example.com.\n" "example.com. 3600 IN A 10.0.0.1\n" }, { "example.com", "nonexist.example.com. A", "", ";flags QR AA rcode NXDOMAIN\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "deep.ent.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "deep.ent.example.com. 3600 IN A 10.0.0.9\n" }, { "example.com", "ent.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "below.deep.ent.example.com. A", "", ";flags QR AA rcode NXDOMAIN\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "mail.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "mail.example.com. 3600 IN A 10.0.0.4\n" }, { "example.com", "ns.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "ns.example.com. 3600 IN A 10.0.0.5\n" }, { "example.com", "out.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "out.example.com. 3600 IN CNAME www.example.com.\n" "www.example.com. 3600 IN A 10.0.0.2\n" "www.example.com. 3600 IN A 10.0.0.3\n" }, { "example.com", "out.example.com. CNAME", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "out.example.com. 3600 IN CNAME www.example.com.\n" }, { "example.com", "plan.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "plan.example.com. 3600 IN CNAME nonexist.example.com.\n" }, { "example.com", "plan.example.com. CNAME", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "plan.example.com. 3600 IN CNAME nonexist.example.com.\n" }, { "example.com", "redir.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "redir.example.com. DNAME", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "redir.example.com. 3600 IN DNAME redir.example.org.\n" }, { "example.com", "abc.redir.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "redir.example.com. 3600 IN DNAME redir.example.org.\n" "abc.redir.example.com. 0 IN CNAME abc.redir.example.org.\n" }, { "example.com", "foo.abc.redir.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "redir.example.com. 3600 IN DNAME redir.example.org.\n" "foo.abc.redir.example.com. 0 IN CNAME foo.abc.redir.example.org.\n" }, { "example.com", "sub.example.com. NS", "", ";flags QR rcode NOERROR\n" ";authority section\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" ";additional section\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, { "example.com", "sub.example.com. DS", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "www.sub.example.com. NS", "", ";flags QR rcode NOERROR\n" ";authority section\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" ";additional section\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, { "example.com", "foo.abc.sub.example.com. NS", "", ";flags QR rcode NOERROR\n" ";authority section\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" ";additional section\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, { "example.com", "ns1.sub.example.com. A", "", ";flags QR rcode NOERROR\n" ";authority section\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" ";additional section\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, { "example.com", "ns1.sub.example.com. AAAA", "", ";flags QR rcode NOERROR\n" ";authority section\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" ";additional section\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, { "example.com", "ns2.sub.example.com. A", "", ";flags QR rcode NOERROR\n" ";authority section\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" ";additional section\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, { "example.com", "ns2.sub.example.com. AAAA", "", ";flags QR rcode NOERROR\n" ";authority section\n" "sub.example.com. 3600 IN NS ns1.sub.example.com.\n" "sub.example.com. 3600 IN NS ns2.sub.example.com.\n" ";additional section\n" "ns1.sub.example.com. 3600 IN A 10.0.0.6\n" "ns2.sub.example.com. 3600 IN AAAA 2001::7\n" }, { "example.com", "wild.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "*.wild.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "*.wild.example.com. 3600 IN A 10.0.0.8\n" }, { "example.com", "*.wild.example.com. AAAA", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "abc.wild.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "abc.wild.example.com. 3600 IN A 10.0.0.8\n" }, { "example.com", "abc.wild.example.com. AAAA", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "foo.abc.wild.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "foo.abc.wild.example.com. 3600 IN A 10.0.0.8\n" }, { "example.com", "foo.abc.wild.example.com. AAAA", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "wild2.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";authority section\n" "example.com. 3600 IN SOA ns.example.org. noc.example.org. 2017042710 7200 3600 1209600 3600\n" }, { "example.com", "*.wild2.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "*.wild2.example.com. 3600 IN CNAME www.example.com.\n" "www.example.com. 3600 IN A 10.0.0.2\n" "www.example.com. 3600 IN A 10.0.0.3\n" }, { "example.com", "abc.wild2.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "abc.wild2.example.com. 3600 IN CNAME www.example.com.\n" "www.example.com. 3600 IN A 10.0.0.2\n" "www.example.com. 3600 IN A 10.0.0.3\n" }, { "example.com", "foo.abc.wild2.example.com. A", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "foo.abc.wild2.example.com. 3600 IN CNAME www.example.com.\n" "www.example.com. 3600 IN A 10.0.0.2\n" "www.example.com. 3600 IN A 10.0.0.3\n" }, { "example.com", "abc.wild2.example.com. CNAME", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "abc.wild2.example.com. 3600 IN CNAME www.example.com.\n" }, { "example.com", "abc.wild3.example.com. IN ANY", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "abc.wild3.example.com. 3600 IN MX 50 mail.example.com.\n" "abc.wild3.example.com. 3600 IN A 10.0.0.8\n" }, { "example.com", "yy.example.com. TXT", "", ";flags QR AA rcode NOERROR\n" ";answer section\n" "yy.example.com. 3600 IN TXT \"a\"\n" "yy.example.com. 3600 IN TXT \"b\"\n" "yy.example.com. 3600 IN TXT \"c\"\n" "yy.example.com. 3600 IN TXT \"d\"\n" "yy.example.com. 3600 IN TXT \"e\"\n" "yy.example.com. 3600 IN TXT \"f\"\n" }, {NULL, NULL, NULL, NULL} }; /** number of tmpfiles */ static int tempno = 0; /** number of deleted files */ static int delno = 0; /** cleanup tmp files at exit */ static void tmpfilecleanup(void) { int i; char buf[256]; for(i=0; ilock); z = auth_zone_create(az, nm, nmlen, LDNS_RR_CLASS_IN); lock_rw_unlock(&az->lock); if(!z) fatal_exit("cannot find zone"); auth_zone_set_zonefile(z, fname); z->for_upstream = 1; cfg = config_create(); free(cfg->chrootdir); cfg->chrootdir = NULL; if(!auth_zone_read_zonefile(z, cfg)) { fatal_exit("parse failure for auth zone %s", name); } lock_rw_unlock(&z->lock); free(nm); config_delete(cfg); return z; } /** check that file is the same as other file */ static void checkfile(char* f1, char *f2) { char buf1[10240], buf2[10240]; int line = 0; FILE* i1, *i2; i1 = fopen(f1, "r"); if(!i1) fatal_exit("cannot open %s: %s", f1, strerror(errno)); i2 = fopen(f2, "r"); if(!i2) fatal_exit("cannot open %s: %s", f2, strerror(errno)); while(!feof(i1) && !feof(i2)) { char* cp1, *cp2; line++; cp1 = fgets(buf1, (int)sizeof(buf1), i1); cp2 = fgets(buf2, (int)sizeof(buf2), i2); if((!cp1 && !feof(i1)) || (!cp2 && !feof(i2))) fatal_exit("fgets failed: %s", strerror(errno)); if(strncmp(buf1, "end_of_check", 12) == 0) { fclose(i1); fclose(i2); return; } if(strcmp(buf1, buf2) != 0) { log_info("in files %s and %s:%d", f1, f2, line); log_info("'%s'", buf1); log_info("'%s'", buf2); fatal_exit("files are not equal"); } } unit_assert(feof(i1) && feof(i2)); fclose(i1); fclose(i2); } /** check that a zone (in string) can be read and reproduced */ static void check_read_exact(const char* name, const char* zone) { struct auth_zones* az; struct auth_zone* z; char* fname, *outf; if(vbmp) printf("check read zone %s\n", name); fname = create_tmp_file(zone); az = auth_zones_create(); unit_assert(az); z = addzone(az, name, fname); unit_assert(z); outf = create_tmp_file(NULL); if(!auth_zone_write_file(z, outf)) { fatal_exit("write file failed for %s", fname); } checkfile(fname, outf); del_tmp_file(fname); del_tmp_file(outf); auth_zones_delete(az); } /** parse q_ans structure for making query */ static void q_ans_parse(struct q_ans* q, struct regional* region, struct query_info** qinfo, int* fallback, uint8_t** dp_nm, size_t* dp_nmlen) { int ret; uint8_t buf[65535]; size_t len, dname_len; /* parse flags */ *fallback = 0; /* default fallback value */ if(strstr(q->flags, "fallback")) *fallback = 1; /* parse zone */ *dp_nmlen = sizeof(buf); if((ret=sldns_str2wire_dname_buf(q->zone, buf, dp_nmlen))!=0) fatal_exit("cannot parse query dp zone %s : %s", q->zone, sldns_get_errorstr_parse(ret)); *dp_nm = regional_alloc_init(region, buf, *dp_nmlen); if(!dp_nm) fatal_exit("out of memory"); /* parse query */ len = sizeof(buf); dname_len = 0; if((ret=sldns_str2wire_rr_question_buf(q->query, buf, &len, &dname_len, *dp_nm, *dp_nmlen, NULL, 0))!=0) fatal_exit("cannot parse query %s : %s", q->query, sldns_get_errorstr_parse(ret)); *qinfo = (struct query_info*)regional_alloc_zero(region, sizeof(**qinfo)); if(!*qinfo) fatal_exit("out of memory"); (*qinfo)->qname = regional_alloc_init(region, buf, dname_len); if(!(*qinfo)->qname) fatal_exit("out of memory"); (*qinfo)->qname_len = dname_len; (*qinfo)->qtype = sldns_wirerr_get_type(buf, len, dname_len); (*qinfo)->qclass = sldns_wirerr_get_class(buf, len, dname_len); } /** print flags to string */ static void pr_flags(sldns_buffer* buf, uint16_t flags) { char rcode[32]; sldns_buffer_printf(buf, ";flags"); if((flags&BIT_QR)!=0) sldns_buffer_printf(buf, " QR"); if((flags&BIT_AA)!=0) sldns_buffer_printf(buf, " AA"); if((flags&BIT_TC)!=0) sldns_buffer_printf(buf, " TC"); if((flags&BIT_RD)!=0) sldns_buffer_printf(buf, " RD"); if((flags&BIT_CD)!=0) sldns_buffer_printf(buf, " CD"); if((flags&BIT_RA)!=0) sldns_buffer_printf(buf, " RA"); if((flags&BIT_AD)!=0) sldns_buffer_printf(buf, " AD"); if((flags&BIT_Z)!=0) sldns_buffer_printf(buf, " Z"); sldns_wire2str_rcode_buf((int)(FLAGS_GET_RCODE(flags)), rcode, sizeof(rcode)); sldns_buffer_printf(buf, " rcode %s", rcode); sldns_buffer_printf(buf, "\n"); } /** print RRs to string */ static void pr_rrs(sldns_buffer* buf, struct reply_info* rep) { char s[65536]; size_t i, j; struct packed_rrset_data* d; log_assert(rep->rrset_count == rep->an_numrrsets + rep->ns_numrrsets + rep->ar_numrrsets); for(i=0; irrset_count; i++) { /* section heading */ if(i == 0 && rep->an_numrrsets != 0) sldns_buffer_printf(buf, ";answer section\n"); else if(i == rep->an_numrrsets && rep->ns_numrrsets != 0) sldns_buffer_printf(buf, ";authority section\n"); else if(i == rep->an_numrrsets+rep->ns_numrrsets && rep->ar_numrrsets != 0) sldns_buffer_printf(buf, ";additional section\n"); /* spool RRset */ d = (struct packed_rrset_data*)rep->rrsets[i]->entry.data; for(j=0; jcount+d->rrsig_count; j++) { if(!packed_rr_to_string(rep->rrsets[i], j, 0, s, sizeof(s))) { fatal_exit("could not rr_to_string %d", (int)i); } sldns_buffer_printf(buf, "%s", s); } } } /** create string for message */ static char* msgtostr(struct dns_msg* msg) { char* str; sldns_buffer* buf = sldns_buffer_new(65535); if(!buf) fatal_exit("out of memory"); if(!msg) { sldns_buffer_printf(buf, "null packet\n"); } else { pr_flags(buf, msg->rep->flags); pr_rrs(buf, msg->rep); } str = strdup((char*)sldns_buffer_begin(buf)); if(!str) fatal_exit("out of memory"); sldns_buffer_free(buf); return str; } /** find line diff between strings */ static void line_diff(const char* p, const char* q, const char* pdesc, const char* qdesc) { char* pdup, *qdup, *pl, *ql; int line = 1; pdup = strdup(p); qdup = strdup(q); if(!pdup || !qdup) fatal_exit("out of memory"); pl=pdup; ql=qdup; printf("linediff (<%s, >%s)\n", pdesc, qdesc); while(pl && ql && *pl && *ql) { char* ep = strchr(pl, '\n'); char* eq = strchr(ql, '\n'); /* terminate lines */ if(ep) *ep = 0; if(eq) *eq = 0; /* printout */ if(strcmp(pl, ql) == 0) { printf("%3d %s\n", line, pl); } else { printf("%3d < %s\n", line, pl); printf("%3d > %s\n", line, ql); } if(ep) *ep = '\n'; if(eq) *eq = '\n'; if(ep) pl = ep+1; else pl = NULL; if(eq) ql = eq+1; else ql = NULL; line++; } if(pl && *pl) { printf("%3d < %s\n", line, pl); } if(ql && *ql) { printf("%3d > %s\n", line, ql); } free(pdup); free(qdup); } /** make q_ans query */ static void q_ans_query(struct q_ans* q, struct auth_zones* az, struct query_info* qinfo, struct regional* region, int expected_fallback, uint8_t* dp_nm, size_t dp_nmlen) { int ret, fallback = 0; struct dns_msg* msg = NULL; char* ans_str; int oldv = verbosity; /* increase verbosity to printout logic in authzone */ if(vbmp) verbosity = 4; ret = auth_zones_lookup(az, qinfo, region, &msg, &fallback, dp_nm, dp_nmlen); if(vbmp) verbosity = oldv; /* check the answer */ ans_str = msgtostr(msg); /* printout if vbmp */ if(vbmp) printf("got (ret=%s%s):\n%s", (ret?"ok":"fail"), (fallback?" fallback":""), ans_str); /* check expected value for ret */ if(expected_fallback && ret != 0) { /* ret is zero on fallback */ if(vbmp) printf("fallback expected, but " "return value is not false\n"); unit_assert(expected_fallback && ret == 0); } if(ret == 0) { if(!expected_fallback) { if(vbmp) printf("return value is false, " "(unexpected)\n"); } unit_assert(expected_fallback); } /* check expected value for fallback */ if(expected_fallback && !fallback) { if(vbmp) printf("expected fallback, but fallback is no\n"); } else if(!expected_fallback && fallback) { if(vbmp) printf("expected no fallback, but fallback is yes\n"); } unit_assert( (expected_fallback&&fallback) || (!expected_fallback&&!fallback)); /* check answer string */ if(strcmp(q->answer, ans_str) != 0) { if(vbmp) printf("wanted:\n%s", q->answer); line_diff(q->answer, ans_str, "wanted", "got"); } unit_assert(strcmp(q->answer, ans_str) == 0); if(vbmp) printf("query ok\n\n"); free(ans_str); } /** check queries on a loaded zone */ static void check_az_q_ans(struct auth_zones* az, struct q_ans* queries) { struct q_ans* q; struct regional* region = regional_create(); struct query_info* qinfo; int fallback; uint8_t* dp_nm; size_t dp_nmlen; for(q=queries; q->zone; q++) { if(vbmp) printf("query %s: %s %s\n", q->zone, q->query, q->flags); q_ans_parse(q, region, &qinfo, &fallback, &dp_nm, &dp_nmlen); q_ans_query(q, az, qinfo, region, fallback, dp_nm, dp_nmlen); regional_free_all(region); } regional_destroy(region); } /** check queries for a zone are returned as specified */ static void check_queries(const char* name, const char* zone, struct q_ans* queries) { struct auth_zones* az; struct auth_zone* z; char* fname; if(vbmp) printf("check queries %s\n", name); fname = create_tmp_file(zone); az = auth_zones_create(); if(!az) fatal_exit("out of memory"); z = addzone(az, name, fname); if(!z) fatal_exit("could not read zone for queries test"); del_tmp_file(fname); /* run queries and test them */ check_az_q_ans(az, queries); auth_zones_delete(az); } /** Test authzone compare_serial */ static void authzone_compare_serial(void) { if(vbmp) printf("Testing compare_serial\n"); unit_assert(compare_serial(0, 1) < 0); unit_assert(compare_serial(1, 0) > 0); unit_assert(compare_serial(0, 0) == 0); unit_assert(compare_serial(1, 1) == 0); unit_assert(compare_serial(0xf0000000, 0xf0000000) == 0); unit_assert(compare_serial(0, 0xf0000000) > 0); unit_assert(compare_serial(0xf0000000, 0) < 0); unit_assert(compare_serial(0xf0000000, 0xf0000001) < 0); unit_assert(compare_serial(0xf0000002, 0xf0000001) > 0); unit_assert(compare_serial(0x70000000, 0x80000000) < 0); unit_assert(compare_serial(0x90000000, 0x70000000) > 0); } /** Test authzone read from file */ static void authzone_read_test(void) { if(vbmp) printf("Testing read auth zone\n"); check_read_exact("example.com", zone_example_com); } /** Test authzone query from zone */ static void authzone_query_test(void) { if(vbmp) printf("Testing query auth zone\n"); check_queries("example.com", zone_example_com, example_com_queries); } /** test authzone code */ void authzone_test(void) { unit_show_feature("authzone"); atexit(tmpfilecleanup); authzone_compare_serial(); authzone_read_test(); authzone_query_test(); } unbound-1.13.1/testcode/streamtcp.c0000644000175000017500000003047614010434640016671 0ustar wouterwouter/* * testcode/streamtcp.c - debug program perform multiple DNS queries on tcp. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program performs multiple DNS queries on a TCP stream. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #include #include #include #include "util/locks.h" #include "util/log.h" #include "util/net_help.h" #include "util/data/msgencode.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/dname.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #include "sldns/wire2str.h" #include #include #include #ifndef PF_INET6 /** define in case streamtcp is compiled on legacy systems */ #define PF_INET6 10 #endif /** usage information for streamtcp */ static void usage(char* argv[]) { printf("usage: %s [options] name type class ...\n", argv[0]); printf(" sends the name-type-class queries over TCP.\n"); printf("-f server what ipaddr@portnr to send the queries to\n"); printf("-u use UDP. No retries are attempted.\n"); printf("-n do not wait for an answer.\n"); printf("-a print answers as they arrive.\n"); printf("-d secs delay after connection before sending query\n"); printf("-s use ssl\n"); printf("-h this help text\n"); exit(1); } /** open TCP socket to svr */ static int open_svr(const char* svr, int udp) { struct sockaddr_storage addr; socklen_t addrlen; int fd = -1; /* svr can be ip@port */ memset(&addr, 0, sizeof(addr)); if(!extstrtoaddr(svr, &addr, &addrlen)) { printf("fatal: bad server specs '%s'\n", svr); exit(1); } fd = socket(addr_is_ip6(&addr, addrlen)?PF_INET6:PF_INET, udp?SOCK_DGRAM:SOCK_STREAM, 0); if(fd == -1) { #ifndef USE_WINSOCK perror("socket() error"); #else printf("socket: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); } if(connect(fd, (struct sockaddr*)&addr, addrlen) < 0) { #ifndef USE_WINSOCK perror("connect() error"); #else printf("connect: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); } return fd; } /** write a query over the TCP fd */ static void write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, const char* strname, const char* strtype, const char* strclass) { struct query_info qinfo; uint16_t len; /* qname */ qinfo.qname = sldns_str2wire_dname(strname, &qinfo.qname_len); if(!qinfo.qname) { printf("cannot parse query name: '%s'\n", strname); exit(1); } /* qtype and qclass */ qinfo.qtype = sldns_get_rr_type_by_name(strtype); qinfo.qclass = sldns_get_rr_class_by_name(strclass); /* clear local alias */ qinfo.local_alias = NULL; /* make query */ qinfo_query_encode(buf, &qinfo); sldns_buffer_write_u16_at(buf, 0, id); sldns_buffer_write_u16_at(buf, 2, BIT_RD); if(1) { /* add EDNS DO */ struct edns_data edns; memset(&edns, 0, sizeof(edns)); edns.edns_present = 1; edns.bits = EDNS_DO; edns.udp_size = 4096; if(sldns_buffer_capacity(buf) >= sldns_buffer_limit(buf)+calc_edns_field_size(&edns)) attach_edns_record(buf, &edns); } /* send it */ if(!udp) { len = (uint16_t)sldns_buffer_limit(buf); len = htons(len); if(ssl) { if(SSL_write(ssl, (void*)&len, (int)sizeof(len)) <= 0) { log_crypto_err("cannot SSL_write"); exit(1); } } else { if(send(fd, (void*)&len, sizeof(len), 0) < (ssize_t)sizeof(len)){ #ifndef USE_WINSOCK perror("send() len failed"); #else printf("send len: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); } } } if(ssl) { if(SSL_write(ssl, (void*)sldns_buffer_begin(buf), (int)sldns_buffer_limit(buf)) <= 0) { log_crypto_err("cannot SSL_write"); exit(1); } } else { if(send(fd, (void*)sldns_buffer_begin(buf), sldns_buffer_limit(buf), 0) < (ssize_t)sldns_buffer_limit(buf)) { #ifndef USE_WINSOCK perror("send() data failed"); #else printf("send data: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); } } free(qinfo.qname); } /** receive DNS datagram over TCP and print it */ static void recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf) { size_t i; char* pktstr; uint16_t len; if(!udp) { if(ssl) { int sr = SSL_read(ssl, (void*)&len, (int)sizeof(len)); if(sr == 0) { printf("ssl: stream closed\n"); exit(1); } if(sr < 0) { log_crypto_err("could not SSL_read"); exit(1); } } else { ssize_t r = recv(fd, (void*)&len, sizeof(len), 0); if(r == 0) { printf("recv: stream closed\n"); exit(1); } if(r < (ssize_t)sizeof(len)) { #ifndef USE_WINSOCK perror("read() len failed"); #else printf("read len: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); } } len = ntohs(len); sldns_buffer_clear(buf); sldns_buffer_set_limit(buf, len); if(ssl) { int r = SSL_read(ssl, (void*)sldns_buffer_begin(buf), (int)len); if(r <= 0) { log_crypto_err("could not SSL_read"); exit(1); } if(r != (int)len) fatal_exit("ssl_read %d of %d", r, len); } else { if(recv(fd, (void*)sldns_buffer_begin(buf), len, 0) < (ssize_t)len) { #ifndef USE_WINSOCK perror("read() data failed"); #else printf("read data: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); } } } else { ssize_t l; sldns_buffer_clear(buf); if((l=recv(fd, (void*)sldns_buffer_begin(buf), sldns_buffer_capacity(buf), 0)) < 0) { #ifndef USE_WINSOCK perror("read() data failed"); #else printf("read data: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); } sldns_buffer_set_limit(buf, (size_t)l); len = (size_t)l; } printf("\nnext received packet\n"); printf("data[%d] ", (int)sldns_buffer_limit(buf)); for(i=0; i>4], hex[sldns_buffer_read_u8_at(buf, i)&0x0f]); } printf("\n"); pktstr = sldns_wire2str_pkt(sldns_buffer_begin(buf), len); printf("%s", pktstr); free(pktstr); } /** see if we can receive any results */ static void print_any_answers(int fd, int udp, SSL* ssl, sldns_buffer* buf, int* num_answers, int wait_all) { /* see if the fd can read, if so, print one answer, repeat */ int ret; struct timeval tv, *waittv; fd_set rfd; while(*num_answers > 0) { memset(&rfd, 0, sizeof(rfd)); memset(&tv, 0, sizeof(tv)); FD_ZERO(&rfd); FD_SET(fd, &rfd); if(wait_all) waittv = NULL; else waittv = &tv; ret = select(fd+1, &rfd, NULL, NULL, waittv); if(ret < 0) { if(errno == EINTR || errno == EAGAIN) continue; perror("select() failed"); exit(1); } if(ret == 0) { if(wait_all) continue; return; } (*num_answers) -= 1; recv_one(fd, udp, ssl, buf); } } static int get_random(void) { int r; if (RAND_bytes((unsigned char*)&r, (int)sizeof(r)) == 1) { return r; } return (int)arc4random(); } /** send the TCP queries and print answers */ static void send_em(const char* svr, int udp, int usessl, int noanswer, int onarrival, int delay, int num, char** qs) { sldns_buffer* buf = sldns_buffer_new(65553); int fd = open_svr(svr, udp); int i, wait_results = 0; SSL_CTX* ctx = NULL; SSL* ssl = NULL; if(!buf) fatal_exit("out of memory"); if(usessl) { ctx = connect_sslctx_create(NULL, NULL, NULL, 0); if(!ctx) fatal_exit("cannot create ssl ctx"); ssl = outgoing_ssl_fd(ctx, fd); if(!ssl) fatal_exit("cannot create ssl"); while(1) { int r; ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) break; r = SSL_get_error(ssl, r); if(r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) { log_crypto_err("could not ssl_handshake"); exit(1); } } if(1) { X509* x = SSL_get_peer_certificate(ssl); if(!x) printf("SSL: no peer certificate\n"); else { X509_print_fp(stdout, x); X509_free(x); } } } for(i=0; i /dev/null ) then return fi fi LO0_IP4=127.0.0.1 } get_lo0_ip4 export LO0_IP4 if test "x$LO0_IP4" = "x127.0.0.1" then ALT_LOOPBACK=false else ALT_LOOPBACK=true fi cd testdata TPKG=../testcode/mini_tdir.sh #RUNLIST=`(ls -1d *.tdir|grep -v '^0[016]')` RUNLIST=`(ls -1d *.tdir)` if test "$#" = "1"; then RUNLIST="$1"; if echo "$RUNLIST" | grep '/$' >/dev/null; then RUNLIST=`echo "$RUNLIST" | sed -e 's?/$??'` fi fi # fix up tdir that was edited on keyboard interrupt. cleanup() { echo cleanup if test -f "$t.bak"; then rm -fr "${t}"; mv "$t.bak" "$t"; fi exit 0 } trap cleanup INT # stop tests from notifying systemd, if that is compiled in. export -n NOTIFY_SOCKET for t in $RUNLIST do if ! $ALT_LOOPBACK then $TPKG exe $t continue fi # We have alternative 127.0.0.1 number if ( echo $t | grep '6\.tdir$' ) # skip IPv6 tests then continue elif test "$t" = "edns_cache.tdir" # This one is IPv6 too! then continue fi cp -ap "$t" "$t.bak" find "${t}" -type f \ -exec grep -q -e '127\.0\.0\.1' -e '@localhost' {} \; -print | { while read f do sed "s/127\.0\.0\.1/${LO0_IP4}/g" "$f" > "$f._" mv "$f._" "$f" sed "s/@localhost/@${LO0_IP4}/g" "$f" > "$f._" mv "$f._" "$f" done } find "${t}" -type d -name "127.0.0.1" -print | { while read d do mv -v "$d" "${d%127.0.0.1}${LO0_IP4}" done } $TPKG exe $t rm -fr "${t}" mv "$t.bak" "$t" done # get out of testdata/ cd .. unbound-1.13.1/testcode/unitecs.c0000644000175000017500000002156514010434640016340 0ustar wouterwouter/* * testcode/unitecs.c - unit test for ecs routines. * * Copyright (c) 2013, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. * */ /** * \file * Calls ecs related unit tests. Exits with code 1 on a failure. */ #include "config.h" #ifdef CLIENT_SUBNET #include "util/log.h" #include "util/module.h" #include "testcode/unitmain.h" #include "edns-subnet/addrtree.h" #include "edns-subnet/subnetmod.h" /* void printkey(addrkey_t *k, addrlen_t bits) { int byte; int bytes = bits/8 + ((bits%8)>0); char msk = 0xFF; for (byte = 0; byte < bytes; byte++) { //~ if (byte+1 == bytes) //~ msk = 0xFF<<(8-bits%8); printf("%02x ", k[byte]&msk); } } void print_tree(struct addrnode* node, int indent, int maxdepth) { struct addredge* edge; int i, s, byte; if (indent == 0) printf("-----Tree-----\n"); if (indent > maxdepth) { printf("\n"); return; } printf("[node elem:%d] (%d)\n", node->elem != NULL, node); for (i = 0; i<2; i++) { if (node->edge[i]) { for (s = 0; s < indent; s++) printf(" "); printkey(node->edge[i]->str, node->edge[i]->len); printf("(len %d bits, %d bytes) ", node->edge[i]->len, node->edge[i]->len/8 + ((node->edge[i]->len%8)>0)); print_tree(node->edge[i]->node, indent+1, maxdepth); } } if (indent == 0) printf("-----Tree-----"); } */ /* what should we check? * X - is it balanced? (a node with 1 child should not have * a node with 1 child MUST have elem * child must be sub of parent * edge must be longer than parent edge * */ static int addrtree_inconsistent_subtree(struct addrtree* tree, struct addredge* parent_edge, addrlen_t depth) { struct addredge* edge; struct addrnode* node = parent_edge->node; int childcount, i, r; if (depth > tree->max_depth) return 15; childcount = (node->edge[0] != NULL) + (node->edge[1] != NULL); /* Only nodes with 2 children should possibly have no element. */ if (childcount < 2 && !node->elem) return 10; for (i = 0; i<2; i++) { edge = node->edge[i]; if (!edge) continue; if (!edge->node) return 11; if (!edge->str) return 12; if (edge->len <= parent_edge->len) return 13; if (!unittest_wrapper_addrtree_issub(parent_edge->str, parent_edge->len, edge->str, edge->len, 0)) return 14; if ((r = addrtree_inconsistent_subtree(tree, edge, depth+1)) != 0) return 100+r; } return 0; } static int addrtree_inconsistent(struct addrtree* tree) { struct addredge* edge; int i, r; if (!tree) return 0; if (!tree->root) return 1; for (i = 0; i<2; i++) { edge = tree->root->edge[i]; if (!edge) continue; if (!edge->node) return 3; if (!edge->str) return 4; if ((r = addrtree_inconsistent_subtree(tree, edge, 1)) != 0) return r; } return 0; } static addrlen_t randomkey(addrkey_t **k, int maxlen) { int byte; int bits = rand() % maxlen; int bytes = bits/8 + (bits%8>0); /*ceil*/ *k = (addrkey_t *) malloc(bytes * sizeof(addrkey_t)); for (byte = 0; byte < bytes; byte++) { (*k)[byte] = (addrkey_t)(rand() & 0xFF); } return (addrlen_t)bits; } static void elemfree(void *envptr, void *elemptr) { struct reply_info *elem = (struct reply_info *)elemptr; (void)envptr; free(elem); } static void consistency_test(void) { addrlen_t l; time_t i; uint32_t count; addrkey_t *k; struct addrtree* t; struct module_env env; struct reply_info *elem; time_t timenow = 0; unit_show_func("edns-subnet/addrtree.h", "Tree consistency check"); srand(9195); /* just some value for reproducibility */ t = addrtree_create(100, &elemfree, &unittest_wrapper_subnetmod_sizefunc, &env, 0); count = t->node_count; unit_assert(count == 0); for (i = 0; i < 1000; i++) { l = randomkey(&k, 128); elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); addrtree_insert(t, k, l, 64, elem, timenow + 10, timenow); /* This should always hold because no items ever expire. They * could be overwritten, though. */ unit_assert( count <= t->node_count ); count = t->node_count; free(k); unit_assert( !addrtree_inconsistent(t) ); } addrtree_delete(t); unit_show_func("edns-subnet/addrtree.h", "Tree consistency with purge"); t = addrtree_create(8, &elemfree, &unittest_wrapper_subnetmod_sizefunc, &env, 0); unit_assert(t->node_count == 0); for (i = 0; i < 1000; i++) { l = randomkey(&k, 128); elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); addrtree_insert(t, k, l, 64, elem, i + 10, i); free(k); unit_assert( !addrtree_inconsistent(t) ); } addrtree_delete(t); unit_show_func("edns-subnet/addrtree.h", "Tree consistency with limit"); t = addrtree_create(8, &elemfree, &unittest_wrapper_subnetmod_sizefunc, &env, 27); unit_assert(t->node_count == 0); for (i = 0; i < 1000; i++) { l = randomkey(&k, 128); elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); addrtree_insert(t, k, l, 64, elem, i + 10, i); unit_assert( t->node_count <= 27); free(k); unit_assert( !addrtree_inconsistent(t) ); } addrtree_delete(t); } static void issub_test(void) { addrkey_t k1[] = {0x55, 0x55, 0x5A}; addrkey_t k2[] = {0x55, 0x5D, 0x5A}; unit_show_func("edns-subnet/addrtree.h", "issub"); unit_assert( !unittest_wrapper_addrtree_issub(k1, 24, k2, 24, 0) ); unit_assert( unittest_wrapper_addrtree_issub(k1, 8, k2, 16, 0) ); unit_assert( unittest_wrapper_addrtree_issub(k2, 12, k1, 13, 0) ); unit_assert( !unittest_wrapper_addrtree_issub(k1, 16, k2, 12, 0) ); unit_assert( unittest_wrapper_addrtree_issub(k1, 12, k2, 12, 0) ); unit_assert( !unittest_wrapper_addrtree_issub(k1, 13, k2, 13, 0) ); unit_assert( unittest_wrapper_addrtree_issub(k1, 24, k2, 24, 13) ); unit_assert( !unittest_wrapper_addrtree_issub(k1, 24, k2, 20, 13) ); unit_assert( unittest_wrapper_addrtree_issub(k1, 20, k2, 24, 13) ); } static void getbit_test(void) { addrkey_t k1[] = {0x55, 0x55, 0x5A}; int i; unit_show_func("edns-subnet/addrtree.h", "getbit"); for(i = 0; i<20; i++) { unit_assert( unittest_wrapper_addrtree_getbit(k1, 20, (addrlen_t)i) == (i&1) ); } } static void bits_common_test(void) { addrkey_t k1[] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0}; addrkey_t k2[] = {0,0,0,0,0,0,0,0}; addrlen_t i; unit_show_func("edns-subnet/addrtree.h", "bits_common"); for(i = 0; i<64; i++) { unit_assert( unittest_wrapper_addrtree_bits_common(k1, 64, k1, 64, i) == 64 ); } for(i = 0; i<8; i++) { k2[i] = k1[i]^(1< #endif #include "sldns/wire2str.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #include "sldns/parseutil.h" #include "util/data/msgencode.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" #include "util/net_help.h" #include #include #ifdef HAVE_NGHTTP2 #include struct http2_session { nghttp2_session* session; SSL* ssl; int fd; int query_count; /* Use POST :method if 1 */ int post; int block_select; const char* authority; const char* endpoint; const char* content_type; }; struct http2_stream { int32_t stream_id; int res_status; struct sldns_buffer* buf; char* path; }; static void usage(char* argv[]) { printf("usage: %s [options] name type class ...\n", argv[0]); printf(" sends the name-type-class queries over " "DNS-over-HTTPS.\n"); printf("-s server IP address to send the queries to, " "default: 127.0.0.1\n"); printf("-p Port to connect to, default: %d\n", UNBOUND_DNS_OVER_HTTPS_PORT); printf("-P Use POST method instead of default GET\n"); printf("-e HTTP endpoint, default: /dns-query\n"); printf("-c Content-type in request, default: " "application/dns-message\n"); printf("-n no-tls, TLS is disabled\n"); printf("-h This help text\n"); exit(1); } /** open TCP socket to svr */ static int open_svr(const char* svr, int port) { struct sockaddr_storage addr; socklen_t addrlen; int fd = -1; int r; if(!ipstrtoaddr(svr, port, &addr, &addrlen)) { printf("fatal: bad server specs '%s'\n", svr); exit(1); } fd = socket(addr_is_ip6(&addr, addrlen)?PF_INET6:PF_INET, SOCK_STREAM, 0); if(fd == -1) { perror("socket() error"); exit(1); } r = connect(fd, (struct sockaddr*)&addr, addrlen); if(r < 0 && r != EINPROGRESS) { perror("connect() error"); exit(1); } return fd; } static ssize_t http2_submit_request_read_cb( nghttp2_session* ATTR_UNUSED(session), int32_t ATTR_UNUSED(stream_id), uint8_t* buf, size_t length, uint32_t* data_flags, nghttp2_data_source* source, void* ATTR_UNUSED(cb_arg)) { if(length > sldns_buffer_remaining(source->ptr)) length = sldns_buffer_remaining(source->ptr); memcpy(buf, sldns_buffer_current(source->ptr), length); sldns_buffer_skip(source->ptr, length); if(sldns_buffer_remaining(source->ptr) == 0) { *data_flags |= NGHTTP2_DATA_FLAG_EOF; } return length; } static void submit_query(struct http2_session* h2_session, struct sldns_buffer* buf) { int32_t stream_id; struct http2_stream* h2_stream; nghttp2_nv headers[5]; char* qb64; size_t qb64_size; size_t qb64_expected_size; size_t i; nghttp2_data_provider data_prd; h2_stream = calloc(1, sizeof(*h2_stream)); if(!h2_stream) fatal_exit("could not malloc http2 stream"); h2_stream->buf = buf; if(h2_session->post) { data_prd.source.ptr = buf; data_prd.read_callback = http2_submit_request_read_cb; h2_stream->path = (char*)h2_session->endpoint; } else { qb64_expected_size = sldns_b64_ntop_calculate_size( sldns_buffer_remaining(buf)); qb64 = malloc(qb64_expected_size); if(!qb64) fatal_exit("out of memory"); qb64_size = sldns_b64url_ntop(sldns_buffer_begin(buf), sldns_buffer_remaining(buf), qb64, qb64_expected_size); h2_stream->path = malloc(strlen( h2_session->endpoint)+strlen("?dns=")+qb64_size+1); if(!h2_stream->path) fatal_exit("out of memory"); snprintf(h2_stream->path, strlen(h2_session->endpoint)+ strlen("?dns=")+qb64_size+1, "%s?dns=%s", h2_session->endpoint, qb64); free(qb64); } headers[0].name = (uint8_t*)":method"; if(h2_session->post) headers[0].value = (uint8_t*)"POST"; else headers[0].value = (uint8_t*)"GET"; headers[1].name = (uint8_t*)":path"; headers[1].value = (uint8_t*)h2_stream->path; headers[2].name = (uint8_t*)":scheme"; if(h2_session->ssl) headers[2].value = (uint8_t*)"https"; else headers[2].value = (uint8_t*)"http"; headers[3].name = (uint8_t*)":authority"; headers[3].value = (uint8_t*)h2_session->authority; headers[4].name = (uint8_t*)"content-type"; headers[4].value = (uint8_t*)h2_session->content_type; printf("Request headers\n"); for(i=0; isession, NULL, headers, sizeof(headers)/sizeof(headers[0]), (h2_session->post) ? &data_prd : NULL, h2_stream); if(stream_id < 0) { printf("Failed to submit nghttp2 request"); exit(1); } h2_session->query_count++; h2_stream->stream_id = stream_id; } static sldns_buffer* make_query(char* qname, char* qtype, char* qclass) { struct query_info qinfo; struct edns_data edns; sldns_buffer* buf = sldns_buffer_new(65553); if(!buf) fatal_exit("out of memory"); qinfo.qname = sldns_str2wire_dname(qname, &qinfo.qname_len); if(!qinfo.qname) { printf("cannot parse query name: '%s'\n", qname); exit(1); } qinfo.qtype = sldns_get_rr_type_by_name(qtype); qinfo.qclass = sldns_get_rr_class_by_name(qclass); qinfo.local_alias = NULL; qinfo_query_encode(buf, &qinfo); /* flips buffer */ free(qinfo.qname); sldns_buffer_write_u16_at(buf, 0, 0x0000); sldns_buffer_write_u16_at(buf, 2, BIT_RD); memset(&edns, 0, sizeof(edns)); edns.edns_present = 1; edns.bits = EDNS_DO; edns.udp_size = 4096; if(sldns_buffer_capacity(buf) >= sldns_buffer_limit(buf)+calc_edns_field_size(&edns)) attach_edns_record(buf, &edns); return buf; } static ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, size_t len, int ATTR_UNUSED(flags), void* cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; int r; ssize_t ret; struct timeval tv, *waittv; fd_set rfd; ERR_clear_error(); memset(&tv, 0, sizeof(tv)); if(h2_session->block_select && h2_session->query_count <= 0) { return NGHTTP2_ERR_WOULDBLOCK; } if(h2_session->block_select) waittv = NULL; else waittv = &tv; memset(&rfd, 0, sizeof(rfd)); FD_ZERO(&rfd); FD_SET(h2_session->fd, &rfd); r = select(h2_session->fd+1, &rfd, NULL, NULL, waittv); if(r <= 0) { return NGHTTP2_ERR_WOULDBLOCK; } if(h2_session->ssl) { r = SSL_read(h2_session->ssl, buf, len); if(r <= 0) { int want = SSL_get_error(h2_session->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return NGHTTP2_ERR_EOF; } log_crypto_err("could not SSL_read"); return NGHTTP2_ERR_EOF; } return r; } ret = read(h2_session->fd, buf, len); if(ret == 0) { return NGHTTP2_ERR_EOF; } else if(ret < 0) { log_err("could not http2 read: %s", strerror(errno)); return NGHTTP2_ERR_EOF; } return ret; } static ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf, size_t len, int ATTR_UNUSED(flags), void* cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; ssize_t ret; if(h2_session->ssl) { int r; ERR_clear_error(); r = SSL_write(h2_session->ssl, buf, len); if(r <= 0) { int want = SSL_get_error(h2_session->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return NGHTTP2_ERR_CALLBACK_FAILURE; } log_crypto_err("could not SSL_write"); return NGHTTP2_ERR_CALLBACK_FAILURE; } return r; } ret = write(h2_session->fd, buf, len); if(ret == 0) { return NGHTTP2_ERR_CALLBACK_FAILURE; } else if(ret < 0) { log_err("could not http2 write: %s", strerror(errno)); return NGHTTP2_ERR_CALLBACK_FAILURE; } return ret; } static int http2_stream_close_cb(nghttp2_session* ATTR_UNUSED(session), int32_t ATTR_UNUSED(stream_id), nghttp2_error_code ATTR_UNUSED(error_code), void *cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; struct http2_stream* h2_stream; if(!(h2_stream = nghttp2_session_get_stream_user_data( h2_session->session, stream_id))) { return 0; } h2_session->query_count--; sldns_buffer_free(h2_stream->buf); if(!h2_session->post) free(h2_stream->path); free(h2_stream); h2_stream = NULL; return 0; } static int http2_data_chunk_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t ATTR_UNUSED(flags), int32_t stream_id, const uint8_t* data, size_t len, void* cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; struct http2_stream* h2_stream; if(!(h2_stream = nghttp2_session_get_stream_user_data( h2_session->session, stream_id))) { return 0; } if(sldns_buffer_remaining(h2_stream->buf) < len) { log_err("received data chunck does not fit into buffer"); return NGHTTP2_ERR_CALLBACK_FAILURE; } sldns_buffer_write(h2_stream->buf, data, len); return 0; } static int http2_frame_recv_cb(nghttp2_session *session, const nghttp2_frame *frame, void* ATTR_UNUSED(cb_arg)) { struct http2_stream* h2_stream; if(!(h2_stream = nghttp2_session_get_stream_user_data( session, frame->hd.stream_id))) return 0; if(frame->hd.type == NGHTTP2_HEADERS && frame->headers.cat == NGHTTP2_HCAT_RESPONSE) { sldns_buffer_clear(h2_stream->buf); } if(((frame->hd.type != NGHTTP2_DATA && frame->hd.type != NGHTTP2_HEADERS) || frame->hd.flags & NGHTTP2_FLAG_END_STREAM) && h2_stream->res_status == 200) { char* pktstr; sldns_buffer_flip(h2_stream->buf); pktstr = sldns_wire2str_pkt( sldns_buffer_begin(h2_stream->buf), sldns_buffer_limit(h2_stream->buf)); printf("%s\n", pktstr); free(pktstr); return 0; } return 0; } static int http2_header_cb(nghttp2_session* ATTR_UNUSED(session), const nghttp2_frame* frame, const uint8_t* name, size_t namelen, const uint8_t* value, size_t ATTR_UNUSED(valuelen), uint8_t ATTR_UNUSED(flags), void* cb_arg) { struct http2_stream* h2_stream; struct http2_session* h2_session = (struct http2_session*)cb_arg; printf("%s %s\n", name, value); if(namelen == 7 && memcmp(":status", name, namelen) == 0) { if(!(h2_stream = nghttp2_session_get_stream_user_data( h2_session->session, frame->hd.stream_id))) { return 0; } h2_stream->res_status = atoi((char*)value); } return 0; } static struct http2_session* http2_session_create() { struct http2_session* h2_session = calloc(1, sizeof(struct http2_session)); nghttp2_session_callbacks* callbacks; if(!h2_session) fatal_exit("out of memory"); if(nghttp2_session_callbacks_new(&callbacks) == NGHTTP2_ERR_NOMEM) { log_err("failed to initialize nghttp2 callback"); return NULL; } nghttp2_session_callbacks_set_recv_callback(callbacks, http2_recv_cb); nghttp2_session_callbacks_set_send_callback(callbacks, http2_send_cb); nghttp2_session_callbacks_set_on_stream_close_callback(callbacks, http2_stream_close_cb); nghttp2_session_callbacks_set_on_data_chunk_recv_callback(callbacks, http2_data_chunk_recv_cb); nghttp2_session_callbacks_set_on_frame_recv_callback(callbacks, http2_frame_recv_cb); nghttp2_session_callbacks_set_on_header_callback(callbacks, http2_header_cb); nghttp2_session_client_new(&h2_session->session, callbacks, h2_session); nghttp2_session_callbacks_del(callbacks); return h2_session; } static void http2_session_delete(struct http2_session* h2_session) { nghttp2_session_del(h2_session->session); free(h2_session); } static void http2_submit_setting(struct http2_session* h2_session) { int ret; nghttp2_settings_entry settings[1] = { {NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100}}; ret = nghttp2_submit_settings(h2_session->session, NGHTTP2_FLAG_NONE, settings, 1); if(ret) { printf("http2: submit_settings failed, " "error: %s\n", nghttp2_strerror(ret)); exit(1); } } static void http2_write(struct http2_session* h2_session) { if(nghttp2_session_want_write(h2_session->session)) { if(nghttp2_session_send(h2_session->session)) { printf("nghttp2 session send failed\n"); exit(1); } } } static void http2_read(struct http2_session* h2_session) { if(nghttp2_session_want_read(h2_session->session)) { if(nghttp2_session_recv(h2_session->session)) { printf("nghttp2 session mem_recv failed\n"); exit(1); } } } static void run(struct http2_session* h2_session, int port, int no_tls, int count, char** q) { int i; SSL_CTX* ctx = NULL; SSL* ssl = NULL; int fd; struct sldns_buffer* buf = NULL; fd = open_svr(h2_session->authority, port); h2_session->fd = fd; if(!no_tls) { ctx = connect_sslctx_create(NULL, NULL, NULL, 0); if(!ctx) fatal_exit("cannot create ssl ctx"); SSL_CTX_set_alpn_protos(ctx, (const unsigned char *)"\x02h2", 3); ssl = outgoing_ssl_fd(ctx, fd); if(!ssl) { printf("cannot create ssl\n"); exit(1); } h2_session->ssl = ssl; while(1) { int r; ERR_clear_error(); if( (r=SSL_do_handshake(ssl)) == 1) break; r = SSL_get_error(ssl, r); if(r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE) { log_crypto_err("could not ssl_handshake"); exit(1); } } } http2_submit_setting(h2_session); http2_write(h2_session); http2_read(h2_session); /* Read setting from remote peer */ h2_session->block_select = 1; /* hande query */ for(i=0; iquery_count) { http2_read(h2_session); http2_write(h2_session); } /* shutdown */ http2_session_delete(h2_session); if(ssl) { SSL_shutdown(ssl); SSL_free(ssl); } if(ctx) { SSL_CTX_free(ctx); } close(fd); } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; int main(int argc, char** argv) { int c; int port = UNBOUND_DNS_OVER_HTTPS_PORT, no_tls = 0; struct http2_session* h2_session; #ifdef USE_WINSOCK WSADATA wsa_data; if(WSAStartup(MAKEWORD(2,2), &wsa_data) != 0) { printf("WSAStartup failed\n"); return 1; } #endif log_init(0, 0, 0); checklock_start(); h2_session = http2_session_create(); if(!h2_session) fatal_exit("out of memory"); if(argc == 1) { usage(argv); } h2_session->authority = "127.0.0.1"; h2_session->post = 0; h2_session->endpoint = "/dns-query"; h2_session->content_type = "application/dns-message"; while((c=getopt(argc, argv, "c:e:hns:p:P")) != -1) { switch(c) { case 'c': h2_session->content_type = optarg; break; case 'e': h2_session->endpoint = optarg; break; case 'n': no_tls = 1; break; case 'p': if(atoi(optarg)==0 && strcmp(optarg,"0")!=0) { printf("error parsing port, " "number expected: %s\n", optarg); return 1; } port = atoi(optarg); break; case 'P': h2_session->post = 1; break; case 's': h2_session->authority = optarg; break; case 'h': case '?': default: usage(argv); } } argc -= optind; argv += optind; if(argc%3!=0) { printf("Invalid input. Specify qname, qtype, and qclass.\n"); return 1; } run(h2_session, port, no_tls, argc, argv); checklock_stop(); #ifdef USE_WINSOCK WSACleanup(); #endif return 0; } #else int main(int ATTR_UNUSED(argc), char** ATTR_UNUSED(argv)) { printf("Compiled without nghttp2, cannot run test.\n"); return 1; } #endif /* HAVE_NGHTTP2 */ unbound-1.13.1/testcode/unitanchor.c0000644000175000017500000001140014010434640017023 0ustar wouterwouter/* * testcode/unitanchor.c - unit test for trust anchor storage. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Calls trust anchor unit tests. Exits with code 1 on a failure. */ #include "config.h" #include "util/log.h" #include "util/data/dname.h" #include "testcode/unitmain.h" #include "validator/val_anchor.h" #include "sldns/sbuffer.h" #include "sldns/rrdef.h" /** test empty set */ static void test_anchor_empty(struct val_anchors* a) { uint16_t c = LDNS_RR_CLASS_IN; unit_assert(anchors_lookup(a, (uint8_t*)"\000", 1, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\003com\000", 5, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\007example\003com\000", 11, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\002nl\000", 4, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\004labs\002nl\000", 9, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\004fabs\002nl\000", 9, c) == NULL); } /** test set of one anchor */ static void test_anchor_one(sldns_buffer* buff, struct val_anchors* a) { struct trust_anchor* ta; uint16_t c = LDNS_RR_CLASS_IN; unit_assert(anchor_store_str(a, buff, "nl. DS 42860 5 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A")); unit_assert(anchors_lookup(a, (uint8_t*)"\000", 1, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\003com\000", 5, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\007example\003com\000", 11, c) == NULL); unit_assert((ta=anchors_lookup(a, (uint8_t*)"\002nl\000", 4, c)) != NULL); lock_basic_unlock(&ta->lock); unit_assert((ta=anchors_lookup(a, (uint8_t*)"\004labs\002nl\000", 9, c)) != NULL); lock_basic_unlock(&ta->lock); unit_assert((ta=anchors_lookup(a, (uint8_t*)"\004fabs\002nl\000", 9, c)) != NULL); lock_basic_unlock(&ta->lock); unit_assert(anchors_lookup(a, (uint8_t*)"\002oo\000", 4, c) == NULL); } /** test with several anchors */ static void test_anchors(sldns_buffer* buff, struct val_anchors* a) { struct trust_anchor* ta; uint16_t c = LDNS_RR_CLASS_IN; unit_assert(anchor_store_str(a, buff, "labs.nl. DS 42860 5 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A")); unit_assert(anchors_lookup(a, (uint8_t*)"\000", 1, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\003com\000", 5, c) == NULL); unit_assert(anchors_lookup(a, (uint8_t*)"\007example\003com\000", 11, c) == NULL); unit_assert(ta = anchors_lookup(a, (uint8_t*)"\002nl\000", 4, c)); unit_assert(query_dname_compare(ta->name, (uint8_t*)"\002nl\000")==0); lock_basic_unlock(&ta->lock); unit_assert(ta = anchors_lookup(a, (uint8_t*)"\004labs\002nl\000", 9, c)); unit_assert(query_dname_compare(ta->name, (uint8_t*)"\004labs\002nl\000") == 0); lock_basic_unlock(&ta->lock); unit_assert(ta = anchors_lookup(a, (uint8_t*)"\004fabs\002nl\000", 9, c)); unit_assert(query_dname_compare(ta->name, (uint8_t*)"\002nl\000") == 0); lock_basic_unlock(&ta->lock); unit_assert(anchors_lookup(a, (uint8_t*)"\002oo\000", 4, c) == NULL); } void anchors_test(void) { sldns_buffer* buff = sldns_buffer_new(65800); struct val_anchors* a; unit_show_feature("trust anchor store"); unit_assert(a = anchors_create()); sldns_buffer_flip(buff); test_anchor_empty(a); test_anchor_one(buff, a); test_anchors(buff, a); anchors_delete(a); sldns_buffer_free(buff); } unbound-1.13.1/testcode/unitmsgparse.c0000644000175000017500000004501414010434640017402 0ustar wouterwouter/* * testcode/unitmsgparse.c - unit test for msg parse routines. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Calls msg parse unit tests. Exits with code 1 on a failure. */ #include "config.h" #include #include "util/log.h" #include "testcode/unitmain.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/msgencode.h" #include "util/data/dname.h" #include "util/alloc.h" #include "util/regional.h" #include "util/net_help.h" #include "testcode/readhex.h" #include "testcode/testpkts.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #include "sldns/wire2str.h" /** verbose message parse unit test */ static int vbmp = 0; /** do not accept formerr */ static int check_formerr_gone = 0; /** if matching within a section should disregard the order of RRs. */ static int matches_nolocation = 0; /** see if RRSIGs are properly matched to RRsets. */ static int check_rrsigs = 0; /** do not check buffer sameness */ static int check_nosameness = 0; /** see if buffers contain the same packet */ static int test_buffers(sldns_buffer* pkt, sldns_buffer* out) { /* check binary same */ if(sldns_buffer_limit(pkt) == sldns_buffer_limit(out) && memcmp(sldns_buffer_begin(pkt), sldns_buffer_begin(out), sldns_buffer_limit(pkt)) == 0) { if(vbmp) printf("binary the same (length=%u)\n", (unsigned)sldns_buffer_limit(pkt)); return 1; } if(vbmp) { size_t sz = 16; size_t count; size_t lim = sldns_buffer_limit(out); if(sldns_buffer_limit(pkt) < lim) lim = sldns_buffer_limit(pkt); for(count=0; countbits & EDNS_DO), 0); unit_assert(ret != 0); /* udp packets should fit */ attach_edns_record(out, edns); regional_free_all(r2); } if(gettimeofday(&end, NULL) < 0) fatal_exit("gettimeofday: %s", strerror(errno)); /* time in millisec */ dt = (double)(end.tv_sec - start.tv_sec)*1000. + ((double)end.tv_usec - (double)start.tv_usec)/1000.; printf("[%d] did %u in %g msec for %f encode/sec size %d\n", num++, (unsigned)max, dt, (double)max / (dt/1000.), (int)sldns_buffer_limit(out)); regional_destroy(r2); } /** perf test a packet */ static void perftestpkt(sldns_buffer* pkt, struct alloc_cache* alloc, sldns_buffer* out, const char* hex) { struct query_info qi; struct reply_info* rep = 0; int ret; uint16_t id; uint16_t flags; time_t timenow = 0; struct regional* region = regional_create(); struct edns_data edns; hex_to_buf(pkt, hex); memmove(&id, sldns_buffer_begin(pkt), sizeof(id)); if(sldns_buffer_limit(pkt) < 2) flags = 0; else memmove(&flags, sldns_buffer_at(pkt, 2), sizeof(flags)); flags = ntohs(flags); ret = reply_info_parse(pkt, alloc, &qi, &rep, region, &edns); if(ret != 0) { char rbuf[16]; sldns_wire2str_rcode_buf(ret, rbuf, sizeof(rbuf)); if(vbmp) printf("parse code %d: %s\n", ret, rbuf); if(ret == LDNS_RCODE_FORMERR) checkformerr(pkt); unit_assert(ret != LDNS_RCODE_SERVFAIL); } else { perf_encode(&qi, rep, id, flags, out, timenow, &edns); } query_info_clear(&qi); reply_info_parsedelete(rep, alloc); regional_destroy(region); } /** print packed rrset */ static void print_rrset(struct ub_packed_rrset_key* rrset) { struct packed_rrset_data* d = (struct packed_rrset_data*)rrset-> entry.data; char buf[65535]; size_t i; for(i=0; icount+d->rrsig_count; i++) { if(!packed_rr_to_string(rrset, i, 0, buf, sizeof(buf))) printf("failedtoconvert %d\n", (int)i); else printf("%s\n", buf); } } /** debug print a packet that failed */ static void print_packet_rrsets(struct query_info* qinfo, struct reply_info* rep) { size_t i; log_query_info(0, "failed query", qinfo); printf(";; ANSWER SECTION (%d rrsets)\n", (int)rep->an_numrrsets); for(i=0; ian_numrrsets; i++) { printf("; rrset %d\n", (int)i); print_rrset(rep->rrsets[i]); } printf(";; AUTHORITY SECTION (%d rrsets)\n", (int)rep->ns_numrrsets); for(i=rep->an_numrrsets; ian_numrrsets+rep->ns_numrrsets; i++) { printf("; rrset %d\n", (int)i); print_rrset(rep->rrsets[i]); } printf(";; ADDITIONAL SECTION (%d rrsets)\n", (int)rep->ar_numrrsets); for(i=rep->an_numrrsets+rep->ns_numrrsets; irrset_count; i++) { printf("; rrset %d\n", (int)i); print_rrset(rep->rrsets[i]); } printf(";; packet end\n"); } /** check that there is no data element that matches the RRSIG */ static int no_data_for_rrsig(struct reply_info* rep, struct ub_packed_rrset_key* rrsig) { size_t i; for(i=0; irrset_count; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_RRSIG) continue; if(query_dname_compare(rep->rrsets[i]->rk.dname, rrsig->rk.dname) == 0) /* only name is compared right now */ return 0; } return 1; } /** check RRSIGs in packet */ static void check_the_rrsigs(struct query_info* qinfo, struct reply_info* rep) { /* every RRSIG must be matched to an RRset */ size_t i; for(i=0; irrset_count; i++) { struct ub_packed_rrset_key* s = rep->rrsets[i]; if(ntohs(s->rk.type) == LDNS_RR_TYPE_RRSIG) { /* see if really a problem, i.e. is there a data * element. */ if(no_data_for_rrsig(rep, rep->rrsets[i])) continue; log_dns_msg("rrsig failed for packet", qinfo, rep); print_packet_rrsets(qinfo, rep); printf("failed rrset is nr %d\n", (int)i); unit_assert(0); } } } /** test a packet */ static void testpkt(sldns_buffer* pkt, struct alloc_cache* alloc, sldns_buffer* out, const char* hex) { struct query_info qi; struct reply_info* rep = 0; int ret; uint16_t id; uint16_t flags; uint32_t timenow = 0; struct regional* region = regional_create(); struct edns_data edns; hex_to_buf(pkt, hex); memmove(&id, sldns_buffer_begin(pkt), sizeof(id)); if(sldns_buffer_limit(pkt) < 2) flags = 0; else memmove(&flags, sldns_buffer_at(pkt, 2), sizeof(flags)); flags = ntohs(flags); ret = reply_info_parse(pkt, alloc, &qi, &rep, region, &edns); if(ret != 0) { char rbuf[16]; sldns_wire2str_rcode_buf(ret, rbuf, sizeof(rbuf)); if(vbmp) printf("parse code %d: %s\n", ret, rbuf); if(ret == LDNS_RCODE_FORMERR) { unit_assert(!check_formerr_gone); checkformerr(pkt); } unit_assert(ret != LDNS_RCODE_SERVFAIL); } else if(!check_formerr_gone) { const size_t lim = 512; ret = reply_info_encode(&qi, rep, id, flags, out, timenow, region, 65535, (int)(edns.bits & EDNS_DO), 0); unit_assert(ret != 0); /* udp packets should fit */ attach_edns_record(out, &edns); if(vbmp) printf("inlen %u outlen %u\n", (unsigned)sldns_buffer_limit(pkt), (unsigned)sldns_buffer_limit(out)); if(!check_nosameness) test_buffers(pkt, out); if(check_rrsigs) check_the_rrsigs(&qi, rep); if(sldns_buffer_limit(out) > lim) { ret = reply_info_encode(&qi, rep, id, flags, out, timenow, region, lim - calc_edns_field_size(&edns), (int)(edns.bits & EDNS_DO), 0); unit_assert(ret != 0); /* should fit, but with TC */ attach_edns_record(out, &edns); if( LDNS_QDCOUNT(sldns_buffer_begin(out)) != LDNS_QDCOUNT(sldns_buffer_begin(pkt)) || LDNS_ANCOUNT(sldns_buffer_begin(out)) != LDNS_ANCOUNT(sldns_buffer_begin(pkt)) || LDNS_NSCOUNT(sldns_buffer_begin(out)) != LDNS_NSCOUNT(sldns_buffer_begin(pkt))) unit_assert( LDNS_TC_WIRE(sldns_buffer_begin(out))); /* must set TC bit if shortened */ unit_assert(sldns_buffer_limit(out) <= lim); } } query_info_clear(&qi); reply_info_parsedelete(rep, alloc); regional_destroy(region); } /** simple test of parsing */ static void simpletest(sldns_buffer* pkt, struct alloc_cache* alloc, sldns_buffer* out) { /* a root query drill -q - */ testpkt(pkt, alloc, out, " c5 40 01 00 00 01 00 00 00 00 00 00 00 00 02 00 01 "); /* very small packet */ testpkt(pkt, alloc, out, "; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19\n" ";-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n" "74 0c 85 83 00 01 00 00 00 01 00 00 03 62 6c 61 09 6e 6c 6e ; 1- 20\n" "65 74 6c 61 62 73 02 6e 6c 00 00 0f 00 01 09 6e 6c 6e 65 74 ; 21- 40\n" "6c 61 62 73 02 6e 6c 00 00 06 00 01 00 00 46 50 00 40 04 6f ; 41- 60\n" "70 65 6e 09 6e 6c 6e 65 74 6c 61 62 73 02 6e 6c 00 0a 68 6f ; 61- 80\n" "73 74 6d 61 73 74 65 72 09 6e 6c 6e 65 74 6c 61 62 73 02 6e ; 81- 100\n" "6c 00 77 a1 02 58 00 00 70 80 00 00 1c 20 00 09 3a 80 00 00 ; 101- 120\n" "46 50\n"); /* a root reply drill -w - */ testpkt(pkt, alloc, out, " ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19\n" " ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n" " 97 3f 81 80 00 01 00 0d 00 00 00 02 00 00 02 00 01 00 00 02 ; 1- 20\n" " 00 01 00 06 6d 38 00 14 01 49 0c 52 4f 4f 54 2d 53 45 52 56 ; 21- 40\n" " 45 52 53 03 4e 45 54 00 00 00 02 00 01 00 06 6d 38 00 14 01 ; 41- 60\n" " 4a 0c 52 4f 4f 54 2d 53 45 52 56 45 52 53 03 4e 45 54 00 00 ; 61- 80\n" " 00 02 00 01 00 06 6d 38 00 14 01 4b 0c 52 4f 4f 54 2d 53 45 ; 81- 100\n" " 52 56 45 52 53 03 4e 45 54 00 00 00 02 00 01 00 06 6d 38 00 ; 101- 120\n" " 14 01 4c 0c 52 4f 4f 54 2d 53 45 52 56 45 52 53 03 4e 45 54 ; 121- 140\n" " 00 00 00 02 00 01 00 06 6d 38 00 14 01 4d 0c 52 4f 4f 54 2d ; 141- 160\n" " 53 45 52 56 45 52 53 03 4e 45 54 00 00 00 02 00 01 00 06 6d ; 161- 180\n" " 38 00 14 01 41 0c 52 4f 4f 54 2d 53 45 52 56 45 52 53 03 4e ; 181- 200\n" " 45 54 00 00 00 02 00 01 00 06 6d 38 00 14 01 42 0c 52 4f 4f ; 201- 220\n" " 54 2d 53 45 52 56 45 52 53 03 4e 45 54 00 00 00 02 00 01 00 ; 221- 240\n" " 06 6d 38 00 14 01 43 0c 52 4f 4f 54 2d 53 45 52 56 45 52 53 ; 241- 260\n" " 03 4e 45 54 00 00 00 02 00 01 00 06 6d 38 00 14 01 44 0c 52 ; 261- 280\n" " 4f 4f 54 2d 53 45 52 56 45 52 53 03 4e 45 54 00 00 00 02 00 ; 281- 300\n" " 01 00 06 6d 38 00 14 01 45 0c 52 4f 4f 54 2d 53 45 52 56 45 ; 301- 320\n" " 52 53 03 4e 45 54 00 00 00 02 00 01 00 06 6d 38 00 14 01 46 ; 321- 340\n" " 0c 52 4f 4f 54 2d 53 45 52 56 45 52 53 03 4e 45 54 00 00 00 ; 341- 360\n" " 02 00 01 00 06 6d 38 00 14 01 47 0c 52 4f 4f 54 2d 53 45 52 ; 361- 380\n" " 56 45 52 53 03 4e 45 54 00 00 00 02 00 01 00 06 6d 38 00 14 ; 381- 400\n" " 01 48 0c 52 4f 4f 54 2d 53 45 52 56 45 52 53 03 4e 45 54 00 ; 401- 420\n" " 01 41 0c 52 4f 4f 54 2d 53 45 52 56 45 52 53 03 4e 45 54 00 ; 421- 440\n" " 00 01 00 01 00 02 64 b9 00 04 c6 29 00 04 01 4a 0c 52 4f 4f ; 441- 460\n" " 54 2d 53 45 52 56 45 52 53 03 4e 45 54 00 00 01 00 01 00 02 ; 461- 480\n" " 64 b9 00 04 c0 3a 80 1e "); /* root delegation from unbound trace with new AAAA glue */ perftestpkt(pkt, alloc, out, "55BC84000001000D00000014000002000100000200010007E900001401610C726F6F742D73657276657273036E65740000000200010007E90000040162C01E00000200010007E90000040163C01E00000200010007E90000040164C01E00000200010007E90000040165C01E00000200010007E90000040166C01E00000200010007E90000040167C01E00000200010007E90000040168C01E00000200010007E90000040169C01E00000200010007E9000004016AC01E00000200010007E9000004016BC01E00000200010007E9000004016CC01E00000200010007E9000004016DC01EC01C000100010007E9000004C6290004C03B000100010007E9000004C0E44FC9C04A000100010007E9000004C021040CC059000100010007E900000480080A5AC068000100010007E9000004C0CBE60AC077000100010007E9000004C00505F1C086000100010007E9000004C0702404C095000100010007E9000004803F0235C0A4000100010007E9000004C0249411C0B3000100010007E9000004C03A801EC0C2000100010007E9000004C1000E81C0D1000100010007E9000004C707532AC0E0000100010007E9000004CA0C1B21C01C001C00010007E900001020010503BA3E00000000000000020030C077001C00010007E900001020010500002F0000000000000000000FC095001C00010007E90000102001050000010000" "00000000803F0235C0B3001C00010007E9000010200105030C2700000000000000020030C0C2001C00010007E9000010200107FD000000000000000000000001C0E0001C00010007E900001020010DC30000000000000000000000350000291000000000000000" ); } /** simple test of parsing, pcat file */ static void testfromfile(sldns_buffer* pkt, struct alloc_cache* alloc, sldns_buffer* out, const char* fname) { FILE* in = fopen(fname, "r"); char buf[102400]; int no=0; if(!in) { perror("fname"); return; } while(fgets(buf, (int)sizeof(buf), in)) { if(buf[0] == ';') /* comment */ continue; if(strlen(buf) < 10) /* skip pcat line numbers. */ continue; if(vbmp) { printf("test no %d: %s", no, buf); fflush(stdout); } testpkt(pkt, alloc, out, buf); no++; } fclose(in); } /** simple test of parsing, drill file */ static void testfromdrillfile(sldns_buffer* pkt, struct alloc_cache* alloc, sldns_buffer* out, const char* fname) { /* ;-- is used to indicate a new message */ FILE* in = fopen(fname, "r"); char buf[102400]; char* np = buf; buf[0]=0; if(!in) { perror("fname"); return; } while(fgets(np, (int)sizeof(buf) - (np-buf), in)) { if(strncmp(np, ";--", 3) == 0) { /* new entry */ /* test previous */ if(np != buf) testpkt(pkt, alloc, out, buf); /* set for new entry */ np = buf; buf[0]=0; continue; } if(np[0] == ';') /* comment */ continue; np = &np[strlen(np)]; } testpkt(pkt, alloc, out, buf); fclose(in); } #define xstr(s) str(s) #define str(s) #s #define SRCDIRSTR xstr(SRCDIR) void msgparse_test(void) { time_t origttl = MAX_NEG_TTL; sldns_buffer* pkt = sldns_buffer_new(65553); sldns_buffer* out = sldns_buffer_new(65553); struct alloc_cache super_a, alloc; MAX_NEG_TTL = 86400; /* init */ alloc_init(&super_a, NULL, 0); alloc_init(&alloc, &super_a, 2); unit_show_feature("message parse"); simpletest(pkt, &alloc, out); /* plain hex dumps, like pcat */ testfromfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.1"); testfromfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.2"); testfromfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.3"); /* like from drill -w - */ testfromdrillfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.4"); testfromdrillfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.5"); matches_nolocation = 1; /* RR order not important for the next test */ testfromdrillfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.6"); check_rrsigs = 1; testfromdrillfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.7"); check_rrsigs = 0; matches_nolocation = 0; check_formerr_gone = 1; testfromdrillfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.8"); check_formerr_gone = 0; check_rrsigs = 1; check_nosameness = 1; testfromdrillfile(pkt, &alloc, out, SRCDIRSTR "/testdata/test_packets.9"); check_nosameness = 0; check_rrsigs = 0; /* cleanup */ alloc_clear(&alloc); alloc_clear(&super_a); sldns_buffer_free(pkt); sldns_buffer_free(out); MAX_NEG_TTL = origttl; } unbound-1.13.1/testcode/delayer.c0000644000175000017500000007102314010434640016305 0ustar wouterwouter/* * testcode/delayer.c - debug program that delays queries to a server. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program delays queries made. It performs as a proxy to another * server and delays queries to it. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #ifdef HAVE_TIME_H #include #endif #include #include "util/net_help.h" #include "util/config_file.h" #include "sldns/sbuffer.h" #include /** number of reads per select for delayer */ #define TRIES_PER_SELECT 100 /** * The ring buffer */ struct ringbuf { /** base of buffer */ uint8_t* buf; /** size of buffer */ size_t size; /** low mark, items start here */ size_t low; /** high mark, items end here */ size_t high; }; /** * List of proxy fds that return replies from the server to our clients. */ struct proxy { /** the fd to listen for replies from server */ int s; /** last time this was used */ struct timeval lastuse; /** remote address */ struct sockaddr_storage addr; /** length of addr */ socklen_t addr_len; /** number of queries waiting (in total) */ size_t numwait; /** number of queries sent to server (in total) */ size_t numsent; /** numberof answers returned to client (in total) */ size_t numreturn; /** how many times repurposed */ size_t numreuse; /** next in proxylist */ struct proxy* next; }; /** * An item that has to be TCP relayed */ struct tcp_send_list { /** the data item */ uint8_t* item; /** size of item */ size_t len; /** time when the item can be transmitted on */ struct timeval wait; /** how much of the item has already been transmitted */ size_t done; /** next in list */ struct tcp_send_list* next; }; /** * List of TCP proxy fd pairs to TCP connect client to server */ struct tcp_proxy { /** the fd to listen for client query */ int client_s; /** the fd to listen for server answer */ int server_s; /** remote client address */ struct sockaddr_storage addr; /** length of address */ socklen_t addr_len; /** timeout on this entry */ struct timeval timeout; /** list of query items to send to server */ struct tcp_send_list* querylist; /** last in query list */ struct tcp_send_list* querylast; /** list of answer items to send to client */ struct tcp_send_list* answerlist; /** last in answerlist */ struct tcp_send_list* answerlast; /** next in list */ struct tcp_proxy* next; }; /** usage information for delayer */ static void usage(char* argv[]) { printf("usage: %s [options]\n", argv[0]); printf(" -f addr : use addr, forward to that server, @port.\n"); printf(" -b addr : bind to this address to listen.\n"); printf(" -p port : bind to this port (use 0 for random).\n"); printf(" -m mem : use this much memory for waiting queries.\n"); printf(" -d delay: UDP queries are delayed n milliseconds.\n"); printf(" TCP is delayed twice (on send, on recv).\n"); printf(" -h : this help message\n"); exit(1); } /** timeval compare, t1 < t2 */ static int dl_tv_smaller(struct timeval* t1, const struct timeval* t2) { #ifndef S_SPLINT_S if(t1->tv_sec < t2->tv_sec) return 1; if(t1->tv_sec == t2->tv_sec && t1->tv_usec < t2->tv_usec) return 1; #endif return 0; } /** timeval add, t1 += t2 */ static void dl_tv_add(struct timeval* t1, const struct timeval* t2) { #ifndef S_SPLINT_S t1->tv_sec += t2->tv_sec; t1->tv_usec += t2->tv_usec; while(t1->tv_usec >= 1000000) { t1->tv_usec -= 1000000; t1->tv_sec++; } #endif } /** timeval subtract, t1 -= t2 */ static void dl_tv_subtract(struct timeval* t1, const struct timeval* t2) { #ifndef S_SPLINT_S t1->tv_sec -= t2->tv_sec; if(t1->tv_usec >= t2->tv_usec) { t1->tv_usec -= t2->tv_usec; } else { t1->tv_sec--; t1->tv_usec = 1000000-(t2->tv_usec-t1->tv_usec); } #endif } /** create new ring buffer */ static struct ringbuf* ring_create(size_t sz) { struct ringbuf* r = (struct ringbuf*)calloc(1, sizeof(*r)); if(!r) fatal_exit("out of memory"); r->buf = (uint8_t*)malloc(sz); if(!r->buf) fatal_exit("out of memory"); r->size = sz; r->low = 0; r->high = 0; return r; } /** delete ring buffer */ static void ring_delete(struct ringbuf* r) { if(!r) return; free(r->buf); free(r); } /** add entry to ringbuffer */ static void ring_add(struct ringbuf* r, sldns_buffer* pkt, struct timeval* now, struct timeval* delay, struct proxy* p) { /* time -- proxy* -- 16bitlen -- message */ uint16_t len = (uint16_t)sldns_buffer_limit(pkt); struct timeval when; size_t needed; uint8_t* where = NULL; log_assert(sldns_buffer_limit(pkt) <= 65535); needed = sizeof(when) + sizeof(p) + sizeof(len) + len; /* put item into ringbuffer */ if(r->low < r->high) { /* used part is in the middle */ if(r->size - r->high >= needed) { where = r->buf + r->high; r->high += needed; } else if(r->low > needed) { /* wrap around ringbuffer */ /* make sure r->low == r->high means empty */ /* so r->low == r->high cannot be used to signify * a completely full ringbuf */ if(r->size - r->high > sizeof(when)+sizeof(p)) { /* zero entry at end of buffer */ memset(r->buf+r->high, 0, sizeof(when)+sizeof(p)); } where = r->buf; r->high = needed; } else { /* drop message */ log_warn("warning: mem full, dropped message"); return; } } else { /* empty */ if(r->high == r->low) { where = r->buf; r->low = 0; r->high = needed; /* unused part is in the middle */ /* so ringbuffer has wrapped around */ } else if(r->low - r->high > needed) { where = r->buf + r->high; r->high += needed; } else { log_warn("warning: mem full, dropped message"); return; } } when = *now; dl_tv_add(&when, delay); /* copy it at where part */ log_assert(where != NULL); memmove(where, &when, sizeof(when)); memmove(where+sizeof(when), &p, sizeof(p)); memmove(where+sizeof(when)+sizeof(p), &len, sizeof(len)); memmove(where+sizeof(when)+sizeof(p)+sizeof(len), sldns_buffer_begin(pkt), len); } /** see if the ringbuffer is empty */ static int ring_empty(struct ringbuf* r) { return (r->low == r->high); } /** peek at timevalue for next item in ring */ static struct timeval* ring_peek_time(struct ringbuf* r) { if(ring_empty(r)) return NULL; return (struct timeval*)&r->buf[r->low]; } /** get entry from ringbuffer */ static int ring_pop(struct ringbuf* r, sldns_buffer* pkt, struct timeval* tv, struct proxy** p) { /* time -- proxy* -- 16bitlen -- message */ uint16_t len; uint8_t* where = NULL; size_t done; if(r->low == r->high) return 0; where = r->buf + r->low; memmove(tv, where, sizeof(*tv)); memmove(p, where+sizeof(*tv), sizeof(*p)); memmove(&len, where+sizeof(*tv)+sizeof(*p), sizeof(len)); memmove(sldns_buffer_begin(pkt), where+sizeof(*tv)+sizeof(*p)+sizeof(len), len); sldns_buffer_set_limit(pkt, (size_t)len); done = sizeof(*tv)+sizeof(*p)+sizeof(len)+len; /* move lowmark */ if(r->low < r->high) { /* used part in middle */ log_assert(r->high - r->low >= done); r->low += done; } else { /* unused part in middle */ log_assert(r->size - r->low >= done); r->low += done; if(r->size - r->low > sizeof(*tv)+sizeof(*p)) { /* see if it is zeroed; means end of buffer */ struct proxy* pz; memmove(&pz, r->buf+r->low+sizeof(*tv), sizeof(pz)); if(pz == NULL) r->low = 0; } else r->low = 0; } if(r->low == r->high) { r->low = 0; /* reset if empty */ r->high = 0; } return 1; } /** signal handler global info */ static volatile int do_quit = 0; /** signal handler for user quit */ static RETSIGTYPE delayer_sigh(int sig) { printf("exit on signal %d\n", sig); do_quit = 1; } /** send out waiting packets */ static void service_send(struct ringbuf* ring, struct timeval* now, sldns_buffer* pkt, struct sockaddr_storage* srv_addr, socklen_t srv_len) { struct proxy* p; struct timeval tv; ssize_t sent; while(!ring_empty(ring) && dl_tv_smaller(ring_peek_time(ring), now)) { /* this items needs to be sent out */ if(!ring_pop(ring, pkt, &tv, &p)) fatal_exit("ringbuf error: pop failed"); verbose(1, "send out query %d.%6.6d", (unsigned)tv.tv_sec, (unsigned)tv.tv_usec); log_addr(1, "from client", &p->addr, p->addr_len); /* send it */ sent = sendto(p->s, (void*)sldns_buffer_begin(pkt), sldns_buffer_limit(pkt), 0, (struct sockaddr*)srv_addr, srv_len); if(sent == -1) { log_err("sendto: %s", sock_strerror(errno)); } else if(sent != (ssize_t)sldns_buffer_limit(pkt)) { log_err("sendto: partial send"); } p->lastuse = *now; p->numsent++; } } /** do proxy for one readable client */ static void do_proxy(struct proxy* p, int retsock, sldns_buffer* pkt) { int i; ssize_t r; for(i=0; is, (void*)sldns_buffer_begin(pkt), sldns_buffer_capacity(pkt), 0); if(r == -1) { #ifndef USE_WINSOCK if(errno == EAGAIN || errno == EINTR) return; #else if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK) return; #endif log_err("recv: %s", sock_strerror(errno)); return; } sldns_buffer_set_limit(pkt, (size_t)r); log_addr(1, "return reply to client", &p->addr, p->addr_len); /* send reply back to the real client */ p->numreturn++; r = sendto(retsock, (void*)sldns_buffer_begin(pkt), (size_t)r, 0, (struct sockaddr*)&p->addr, p->addr_len); if(r == -1) { log_err("sendto: %s", sock_strerror(errno)); } } } /** proxy return replies to clients */ static void service_proxy(fd_set* rset, int retsock, struct proxy* proxies, sldns_buffer* pkt, struct timeval* now) { struct proxy* p; for(p = proxies; p; p = p->next) { if(FD_ISSET(p->s, rset)) { p->lastuse = *now; do_proxy(p, retsock, pkt); } } } /** find or else create proxy for this remote client */ static struct proxy* find_create_proxy(struct sockaddr_storage* from, socklen_t from_len, fd_set* rorig, int* max, struct proxy** proxies, int serv_ip6, struct timeval* now, struct timeval* reuse_timeout) { struct proxy* p; struct timeval t; for(p = *proxies; p; p = p->next) { if(sockaddr_cmp(from, from_len, &p->addr, p->addr_len)==0) return p; } /* possibly: reuse lapsed entries */ for(p = *proxies; p; p = p->next) { if(p->numwait > p->numsent || p->numsent > p->numreturn) continue; t = *now; dl_tv_subtract(&t, &p->lastuse); if(dl_tv_smaller(&t, reuse_timeout)) continue; /* yes! */ verbose(1, "reuse existing entry"); memmove(&p->addr, from, from_len); p->addr_len = from_len; p->numreuse++; return p; } /* create new */ p = (struct proxy*)calloc(1, sizeof(*p)); if(!p) fatal_exit("out of memory"); p->s = socket(serv_ip6?AF_INET6:AF_INET, SOCK_DGRAM, 0); if(p->s == -1) { fatal_exit("socket: %s", sock_strerror(errno)); } fd_set_nonblock(p->s); memmove(&p->addr, from, from_len); p->addr_len = from_len; p->next = *proxies; *proxies = p; FD_SET(FD_SET_T p->s, rorig); if(p->s+1 > *max) *max = p->s+1; return p; } /** recv new waiting packets */ static void service_recv(int s, struct ringbuf* ring, sldns_buffer* pkt, fd_set* rorig, int* max, struct proxy** proxies, struct sockaddr_storage* srv_addr, socklen_t srv_len, struct timeval* now, struct timeval* delay, struct timeval* reuse) { int i; struct sockaddr_storage from; socklen_t from_len; ssize_t len; struct proxy* p; for(i=0; ilastuse = *now; ring_add(ring, pkt, now, delay, p); p->numwait++; log_addr(1, "recv from client", &p->addr, p->addr_len); } } /** delete tcp proxy */ static void tcp_proxy_delete(struct tcp_proxy* p) { struct tcp_send_list* s, *sn; if(!p) return; log_addr(1, "delete tcp proxy", &p->addr, p->addr_len); s = p->querylist; while(s) { sn = s->next; free(s->item); free(s); s = sn; } s = p->answerlist; while(s) { sn = s->next; free(s->item); free(s); s = sn; } sock_close(p->client_s); if(p->server_s != -1) sock_close(p->server_s); free(p); } /** accept new TCP connections, and set them up */ static void service_tcp_listen(int s, fd_set* rorig, int* max, struct tcp_proxy** proxies, struct sockaddr_storage* srv_addr, socklen_t srv_len, struct timeval* now, struct timeval* tcp_timeout) { int newfd; struct sockaddr_storage addr; struct tcp_proxy* p; socklen_t addr_len; newfd = accept(s, (struct sockaddr*)&addr, &addr_len); if(newfd == -1) { #ifndef USE_WINSOCK if(errno == EAGAIN || errno == EINTR) return; #else if(WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAECONNRESET) return; #endif fatal_exit("accept: %s", sock_strerror(errno)); } p = (struct tcp_proxy*)calloc(1, sizeof(*p)); if(!p) fatal_exit("out of memory"); memmove(&p->addr, &addr, addr_len); p->addr_len = addr_len; log_addr(1, "new tcp proxy", &p->addr, p->addr_len); p->client_s = newfd; p->server_s = socket(addr_is_ip6(srv_addr, srv_len)?AF_INET6:AF_INET, SOCK_STREAM, 0); if(p->server_s == -1) { fatal_exit("tcp socket: %s", sock_strerror(errno)); } fd_set_nonblock(p->client_s); fd_set_nonblock(p->server_s); if(connect(p->server_s, (struct sockaddr*)srv_addr, srv_len) == -1) { #ifndef USE_WINSOCK if(errno != EINPROGRESS) { log_err("tcp connect: %s", strerror(errno)); #else if(WSAGetLastError() != WSAEWOULDBLOCK && WSAGetLastError() != WSAEINPROGRESS) { log_err("tcp connect: %s", wsa_strerror(WSAGetLastError())); #endif sock_close(p->server_s); sock_close(p->client_s); free(p); return; } } p->timeout = *now; dl_tv_add(&p->timeout, tcp_timeout); /* listen to client and server */ FD_SET(FD_SET_T p->client_s, rorig); FD_SET(FD_SET_T p->server_s, rorig); if(p->client_s+1 > *max) *max = p->client_s+1; if(p->server_s+1 > *max) *max = p->server_s+1; /* add into proxy list */ p->next = *proxies; *proxies = p; } /** relay TCP, read a part */ static int tcp_relay_read(int s, struct tcp_send_list** first, struct tcp_send_list** last, struct timeval* now, struct timeval* delay, sldns_buffer* pkt) { struct tcp_send_list* item; ssize_t r = recv(s, (void*)sldns_buffer_begin(pkt), sldns_buffer_capacity(pkt), 0); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; #else if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK) return 1; #endif log_err("tcp read: %s", sock_strerror(errno)); return 0; } else if(r == 0) { /* connection closed */ return 0; } item = (struct tcp_send_list*)malloc(sizeof(*item)); if(!item) { log_err("out of memory"); return 0; } verbose(1, "read item len %d", (int)r); item->len = (size_t)r; item->item = memdup(sldns_buffer_begin(pkt), item->len); if(!item->item) { free(item); log_err("out of memory"); return 0; } item->done = 0; item->wait = *now; dl_tv_add(&item->wait, delay); item->next = NULL; /* link in */ if(*first) { (*last)->next = item; } else { *first = item; } *last = item; return 1; } /** relay TCP, write a part */ static int tcp_relay_write(int s, struct tcp_send_list** first, struct tcp_send_list** last, struct timeval* now) { ssize_t r; struct tcp_send_list* p; while(*first) { p = *first; /* is the item ready? */ if(!dl_tv_smaller(&p->wait, now)) return 1; /* write it */ r = send(s, (void*)(p->item + p->done), p->len - p->done, 0); if(r == -1) { #ifndef USE_WINSOCK if(errno == EAGAIN || errno == EINTR) return 1; #else if(WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAEINPROGRESS) return 1; #endif log_err("tcp write: %s", sock_strerror(errno)); return 0; } else if(r == 0) { /* closed */ return 0; } /* account it */ p->done += (size_t)r; verbose(1, "write item %d of %d", (int)p->done, (int)p->len); if(p->done >= p->len) { free(p->item); *first = p->next; if(!*first) *last = NULL; free(p); } else { /* partial write */ return 1; } } return 1; } /** perform TCP relaying */ static void service_tcp_relay(struct tcp_proxy** tcp_proxies, struct timeval* now, struct timeval* delay, struct timeval* tcp_timeout, sldns_buffer* pkt, fd_set* rset, fd_set* rorig, fd_set* worig) { struct tcp_proxy* p, **prev; struct timeval tout; int delete_it; p = *tcp_proxies; prev = tcp_proxies; tout = *now; dl_tv_add(&tout, tcp_timeout); while(p) { delete_it = 0; /* can we receive further queries? */ if(!delete_it && FD_ISSET(p->client_s, rset)) { p->timeout = tout; log_addr(1, "read tcp query", &p->addr, p->addr_len); if(!tcp_relay_read(p->client_s, &p->querylist, &p->querylast, now, delay, pkt)) delete_it = 1; } /* can we receive further answers? */ if(!delete_it && p->server_s != -1 && FD_ISSET(p->server_s, rset)) { p->timeout = tout; log_addr(1, "read tcp answer", &p->addr, p->addr_len); if(!tcp_relay_read(p->server_s, &p->answerlist, &p->answerlast, now, delay, pkt)) { sock_close(p->server_s); FD_CLR(FD_SET_T p->server_s, worig); FD_CLR(FD_SET_T p->server_s, rorig); p->server_s = -1; } } /* can we send on further queries */ if(!delete_it && p->querylist && p->server_s != -1) { p->timeout = tout; if(dl_tv_smaller(&p->querylist->wait, now)) log_addr(1, "write tcp query", &p->addr, p->addr_len); if(!tcp_relay_write(p->server_s, &p->querylist, &p->querylast, now)) delete_it = 1; if(p->querylist && dl_tv_smaller(&p->querylist->wait, now)) FD_SET(FD_SET_T p->server_s, worig); else FD_CLR(FD_SET_T p->server_s, worig); } /* can we send on further answers */ if(!delete_it && p->answerlist) { p->timeout = tout; if(dl_tv_smaller(&p->answerlist->wait, now)) log_addr(1, "write tcp answer", &p->addr, p->addr_len); if(!tcp_relay_write(p->client_s, &p->answerlist, &p->answerlast, now)) delete_it = 1; if(p->answerlist && dl_tv_smaller(&p->answerlist->wait, now)) FD_SET(FD_SET_T p->client_s, worig); else FD_CLR(FD_SET_T p->client_s, worig); if(!p->answerlist && p->server_s == -1) delete_it = 1; } /* does this entry timeout? (unused too long) */ if(dl_tv_smaller(&p->timeout, now)) { delete_it = 1; } if(delete_it) { struct tcp_proxy* np = p->next; *prev = np; FD_CLR(FD_SET_T p->client_s, rorig); FD_CLR(FD_SET_T p->client_s, worig); if(p->server_s != -1) { FD_CLR(FD_SET_T p->server_s, rorig); FD_CLR(FD_SET_T p->server_s, worig); } tcp_proxy_delete(p); p = np; continue; } prev = &p->next; p = p->next; } } /** find waiting time */ static int service_findwait(struct timeval* now, struct timeval* wait, struct ringbuf* ring, struct tcp_proxy* tcplist) { /* first item is the time to wait */ struct timeval* peek = ring_peek_time(ring); struct timeval tcv; int have_tcpval = 0; struct tcp_proxy* p; /* also for TCP list the first in sendlists is the time to wait */ for(p=tcplist; p; p=p->next) { if(!have_tcpval) tcv = p->timeout; have_tcpval = 1; if(dl_tv_smaller(&p->timeout, &tcv)) tcv = p->timeout; if(p->querylist && dl_tv_smaller(&p->querylist->wait, &tcv)) tcv = p->querylist->wait; if(p->answerlist && dl_tv_smaller(&p->answerlist->wait, &tcv)) tcv = p->answerlist->wait; } if(peek) { /* peek can be unaligned */ /* use wait as a temp variable */ memmove(wait, peek, sizeof(*wait)); if(!have_tcpval) tcv = *wait; else if(dl_tv_smaller(wait, &tcv)) tcv = *wait; have_tcpval = 1; } if(have_tcpval) { *wait = tcv; dl_tv_subtract(wait, now); return 1; } /* nothing, block */ return 0; } /** clear proxy list */ static void proxy_list_clear(struct proxy* p) { char from[109]; struct proxy* np; int i=0, port; while(p) { np = p->next; port = (int)ntohs(((struct sockaddr_in*)&p->addr)->sin_port); if(addr_is_ip6(&p->addr, p->addr_len)) { if(inet_ntop(AF_INET6, &((struct sockaddr_in6*)&p->addr)->sin6_addr, from, (socklen_t)sizeof(from)) == 0) (void)strlcpy(from, "err", sizeof(from)); } else { if(inet_ntop(AF_INET, &((struct sockaddr_in*)&p->addr)->sin_addr, from, (socklen_t)sizeof(from)) == 0) (void)strlcpy(from, "err", sizeof(from)); } printf("client[%d]: last %s@%d of %d : %u in, %u out, " "%u returned\n", i++, from, port, (int)p->numreuse+1, (unsigned)p->numwait, (unsigned)p->numsent, (unsigned)p->numreturn); sock_close(p->s); free(p); p = np; } } /** clear TCP proxy list */ static void tcp_proxy_list_clear(struct tcp_proxy* p) { struct tcp_proxy* np; while(p) { np = p->next; tcp_proxy_delete(p); p = np; } } /** delayer service loop */ static void service_loop(int udp_s, int listen_s, struct ringbuf* ring, struct timeval* delay, struct timeval* reuse, struct sockaddr_storage* srv_addr, socklen_t srv_len, sldns_buffer* pkt) { fd_set rset, rorig; fd_set wset, worig; struct timeval now, wait; int max, have_wait = 0; struct proxy* proxies = NULL; struct tcp_proxy* tcp_proxies = NULL; struct timeval tcp_timeout; tcp_timeout.tv_sec = 120; tcp_timeout.tv_usec = 0; #ifndef S_SPLINT_S FD_ZERO(&rorig); FD_ZERO(&worig); FD_SET(FD_SET_T udp_s, &rorig); FD_SET(FD_SET_T listen_s, &rorig); #endif max = udp_s + 1; if(listen_s + 1 > max) max = listen_s + 1; while(!do_quit) { /* wait for events */ rset = rorig; wset = worig; if(have_wait) verbose(1, "wait for %d.%6.6d", (unsigned)wait.tv_sec, (unsigned)wait.tv_usec); else verbose(1, "wait"); if(select(max, &rset, &wset, NULL, have_wait?&wait:NULL) < 0) { if(errno == EAGAIN || errno == EINTR) continue; fatal_exit("select: %s", strerror(errno)); } /* get current time */ if(gettimeofday(&now, NULL) < 0) { if(errno == EAGAIN || errno == EINTR) continue; fatal_exit("gettimeofday: %s", strerror(errno)); } verbose(1, "process at %u.%6.6u\n", (unsigned)now.tv_sec, (unsigned)now.tv_usec); /* sendout delayed queries to master server (frees up buffer)*/ service_send(ring, &now, pkt, srv_addr, srv_len); /* proxy return replies */ service_proxy(&rset, udp_s, proxies, pkt, &now); /* see what can be received to start waiting */ service_recv(udp_s, ring, pkt, &rorig, &max, &proxies, srv_addr, srv_len, &now, delay, reuse); /* see if there are new tcp connections */ service_tcp_listen(listen_s, &rorig, &max, &tcp_proxies, srv_addr, srv_len, &now, &tcp_timeout); /* service tcp connections */ service_tcp_relay(&tcp_proxies, &now, delay, &tcp_timeout, pkt, &rset, &rorig, &worig); /* see what next timeout is (if any) */ have_wait = service_findwait(&now, &wait, ring, tcp_proxies); } proxy_list_clear(proxies); tcp_proxy_list_clear(tcp_proxies); } /** delayer main service routine */ static void service(const char* bind_str, int bindport, const char* serv_str, size_t memsize, int delay_msec) { struct sockaddr_storage bind_addr, srv_addr; socklen_t bind_len, srv_len; struct ringbuf* ring = ring_create(memsize); struct timeval delay, reuse; sldns_buffer* pkt; int i, s, listen_s; #ifndef S_SPLINT_S delay.tv_sec = delay_msec / 1000; delay.tv_usec = (delay_msec % 1000)*1000; #endif reuse = delay; /* reuse is max(4*delay, 1 second) */ dl_tv_add(&reuse, &delay); dl_tv_add(&reuse, &delay); dl_tv_add(&reuse, &delay); if(reuse.tv_sec == 0) reuse.tv_sec = 1; if(!extstrtoaddr(serv_str, &srv_addr, &srv_len)) { printf("cannot parse forward address: %s\n", serv_str); exit(1); } pkt = sldns_buffer_new(65535); if(!pkt) fatal_exit("out of memory"); if( signal(SIGINT, delayer_sigh) == SIG_ERR || #ifdef SIGHUP signal(SIGHUP, delayer_sigh) == SIG_ERR || #endif #ifdef SIGQUIT signal(SIGQUIT, delayer_sigh) == SIG_ERR || #endif #ifdef SIGBREAK signal(SIGBREAK, delayer_sigh) == SIG_ERR || #endif #ifdef SIGALRM signal(SIGALRM, delayer_sigh) == SIG_ERR || #endif signal(SIGTERM, delayer_sigh) == SIG_ERR) fatal_exit("could not bind to signal"); /* bind UDP port */ if((s = socket(str_is_ip6(bind_str)?AF_INET6:AF_INET, SOCK_DGRAM, 0)) == -1) { fatal_exit("socket: %s", sock_strerror(errno)); } i=0; if(bindport == 0) { bindport = 1024 + ((int)arc4random())%64000; i = 100; } while(1) { if(!ipstrtoaddr(bind_str, bindport, &bind_addr, &bind_len)) { printf("cannot parse listen address: %s\n", bind_str); exit(1); } if(bind(s, (struct sockaddr*)&bind_addr, bind_len) == -1) { log_err("bind: %s", sock_strerror(errno)); if(i--==0) fatal_exit("cannot bind any port"); bindport = 1024 + ((int)arc4random())%64000; } else break; } fd_set_nonblock(s); /* and TCP port */ if((listen_s = socket(str_is_ip6(bind_str)?AF_INET6:AF_INET, SOCK_STREAM, 0)) == -1) { fatal_exit("tcp socket: %s", sock_strerror(errno)); } #ifdef SO_REUSEADDR if(1) { int on = 1; if(setsockopt(listen_s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, (socklen_t)sizeof(on)) < 0) fatal_exit("setsockopt(.. SO_REUSEADDR ..) failed: %s", sock_strerror(errno)); } #endif if(bind(listen_s, (struct sockaddr*)&bind_addr, bind_len) == -1) { fatal_exit("tcp bind: %s", sock_strerror(errno)); } if(listen(listen_s, 5) == -1) { fatal_exit("tcp listen: %s", sock_strerror(errno)); } fd_set_nonblock(listen_s); printf("listening on port: %d\n", bindport); /* process loop */ do_quit = 0; service_loop(s, listen_s, ring, &delay, &reuse, &srv_addr, srv_len, pkt); /* cleanup */ verbose(1, "cleanup"); sock_close(s); sock_close(listen_s); sldns_buffer_free(pkt); ring_delete(ring); } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** main program for delayer */ int main(int argc, char** argv) { int c; /* defaults */ const char* server = "127.0.0.1@53"; const char* bindto = "0.0.0.0"; int bindport = 0; size_t memsize = 10*1024*1024; int delay = 100; verbosity = 0; log_init(0, 0, 0); log_ident_set("delayer"); if(argc == 1) usage(argv); while( (c=getopt(argc, argv, "b:d:f:hm:p:")) != -1) { switch(c) { case 'b': bindto = optarg; break; case 'd': if(atoi(optarg)==0 && strcmp(optarg,"0")!=0) { printf("bad delay: %s\n", optarg); return 1; } delay = atoi(optarg); break; case 'f': server = optarg; break; case 'm': if(!cfg_parse_memsize(optarg, &memsize)) { printf("bad memsize: %s\n", optarg); return 1; } break; case 'p': if(atoi(optarg)==0 && strcmp(optarg,"0")!=0) { printf("bad port nr: %s\n", optarg); return 1; } bindport = atoi(optarg); break; case 'h': case '?': default: usage(argv); } } argc -= optind; argv += optind; if(argc != 0) usage(argv); printf("bind to %s @ %d and forward to %s after %d msec\n", bindto, bindport, server, delay); service(bindto, bindport, server, memsize, delay); return 0; } unbound-1.13.1/testcode/mini_tpkg.sh0000755000175000017500000000551414010434640017036 0ustar wouterwouter# tpkg that only exes the files. args="../.." if test "$1" = "-a"; then args=$2 shift shift fi if test "$1" = "clean"; then echo "rm -f result.* .done* .tpkg.var.master .tpkg.var.test" rm -f result.* .done* .tpkg.var.master .tpkg.var.test exit 0 fi if test "$1" = "fake"; then echo "minitpkg fake $2" echo "fake" > .done-`basename $2 .tpkg` exit 0 fi if test "$1" = "report" || test "$2" = "report"; then echo "Minitpkg Report" for result in *.tpkg; do name=`basename $result .tpkg` if test -f ".done-$name"; then if test "$1" != "-q"; then echo "** PASSED ** : $name" fi else if test -f "result.$name"; then echo "!! FAILED !! : $name" else echo ">> SKIPPED<< : $name" fi fi done exit 0 fi if test "$1" != 'exe'; then # usage echo "mini tpkg. Reduced functionality for old shells." echo " tpkg exe " echo " tpkg fake " echo " tpkg clean" echo " tpkg [-q] report" exit 1 fi shift # do not execute if the disk is too full #DISKLIMIT=100000 # This check is not portable (to Solaris 10). #avail=`df . | tail -1 | awk '{print $4}'` #if test "$avail" -lt "$DISKLIMIT"; then #echo "minitpkg: The disk is too full! Only $avail." #exit 1 #fi name=`basename $1 .tpkg` dir=$name.$$ result=result.$name done=.done-$name success="no" if test -x "`which bash`"; then shell="bash" else shell="sh" fi # check already done if test -f .done-$name; then echo "minitpkg .done-$name exists. skip test." exit 0 fi # Extract echo "minitpkg extract $1 to $dir" mkdir $dir gzip -cd $name.tpkg | (cd $dir; tar xf -) cd $dir mv $name.dir/* . # EXE echo "minitpkg exe $name" > $result grep "Description:" $name.dsc >> $result 2>&1 echo "DateRunStart: "`date "+%s" 2>/dev/null` >> $result if test -f $name.pre; then echo "minitpkg exe $name.pre" echo "minitpkg exe $name.pre" >> $result $shell $name.pre $args >> $result if test $? -ne 0; then echo "Warning: $name.pre did not exit successfully" fi fi if test -f $name.test; then echo "minitpkg exe $name.test" echo "minitpkg exe $name.test" >> $result $shell $name.test $args >>$result 2>&1 if test $? -ne 0; then echo "$name: FAILED" >> $result echo "$name: FAILED" success="no" else echo "$name: PASSED" >> $result echo "$name: PASSED" > ../.done-$name echo "$name: PASSED" success="yes" fi fi if test -f $name.post; then echo "minitpkg exe $name.post" echo "minitpkg exe $name.post" >> $result $shell $name.post $args >> $result if test $? -ne 0; then echo "Warning: $name.post did not exit successfully" fi fi echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result mv $result .. cd .. rm -rf $dir # compat for windows where deletion may not succeed initially (files locked # by processes that still have to exit). if test $? -eq 1; then echo "minitpkg waiting for processes to terminate" sleep 2 # some time to exit, and try again rm -rf $dir fi unbound-1.13.1/testcode/unitmain.h0000644000175000017500000000611514010434640016511 0ustar wouterwouter/* * testcode/unitmain.h - unit test main program for unbound. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Declarations useful for the unit tests. */ #ifndef TESTCODE_UNITMAIN_H #define TESTCODE_UNITMAIN_H #include "util/log.h" /** number of tests done */ extern int testcount; /** test bool x, exits on failure, increases testcount. */ #ifdef DEBUG_UNBOUND #define unit_assert(x) do {testcount++; log_assert(x);} while(0) #else #define unit_assert(x) do {testcount++; if(!(x)) { fprintf(stderr, "assertion failure %s:%d\n", __FILE__, __LINE__); exit(1);}} while(0) #endif /** we are now testing this function */ void unit_show_func(const char* file, const char* func); /** we are testing this functionality */ void unit_show_feature(const char* feature); /** unit test lruhashtable implementation */ void lruhash_test(void); /** unit test slabhashtable implementation */ void slabhash_test(void); /** unit test for msgreply and msgparse */ void msgparse_test(void); /** unit test dname handling functions */ void dname_test(void); /** unit test trust anchor storage functions */ void anchors_test(void); /** unit test for verification functions */ void verify_test(void); /** unit test for negative cache functions */ void neg_test(void); /** unit test for regional allocator functions */ void regional_test(void); #ifdef CLIENT_SUBNET /** Unit test for ECS functions */ void ecs_test(void); #endif /* CLIENT_SUBNET */ /** unit test for ldns functions */ void ldns_test(void); /** unit test for auth zone functions */ void authzone_test(void); #endif /* TESTCODE_UNITMAIN_H */ unbound-1.13.1/testcode/readhex.c0000644000175000017500000000521414010434640016277 0ustar wouterwouter/* * testcode/readhex.c - read hex data. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Declarations useful for the unit tests. */ #include "config.h" #include #include "testcode/readhex.h" #include "util/log.h" #include "sldns/sbuffer.h" #include "sldns/parseutil.h" /** skip whitespace */ static void skip_whites(const char** p) { while(1) { while(isspace((unsigned char)**p)) (*p)++; if(**p == ';') { /* comment, skip until newline */ while(**p && **p != '\n') (*p)++; if(**p == '\n') (*p)++; } else return; } } /* takes a hex string and puts into buffer */ void hex_to_buf(sldns_buffer* pkt, const char* hex) { const char* p = hex; int val; sldns_buffer_clear(pkt); while(*p) { skip_whites(&p); if(sldns_buffer_position(pkt) == sldns_buffer_limit(pkt)) fatal_exit("hex_to_buf: buffer too small"); if(!isalnum((unsigned char)*p)) break; val = sldns_hexdigit_to_int(*p++) << 4; skip_whites(&p); log_assert(*p && isalnum((unsigned char)*p)); val |= sldns_hexdigit_to_int(*p++); sldns_buffer_write_u8(pkt, (uint8_t)val); skip_whites(&p); } sldns_buffer_flip(pkt); } unbound-1.13.1/testcode/fake_event.h0000644000175000017500000000534014010434640016773 0ustar wouterwouter/* * testcode/fake_event.h - fake event handling that replays existing scenario. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Event service that replays a scenario. * This implements the same exported symbols as the files: * util/netevent.c * services/listen_dnsport.c * services/outside_network.c * But these do not actually access the network or events, instead * the scenario is played. */ #ifndef TESTCODE_FAKE_EVENT_H #define TESTCODE_FAKE_EVENT_H struct replay_scenario; /** * Initialise fake event services. * * The fake event services will automatically start when the main program * calls netevent.h functions, such as comm_base_dispatch(). * * @param scen: Set the scenario to use for upcoming event handling. */ void fake_event_init(struct replay_scenario* scen); /** * Deinit fake event services. */ void fake_event_cleanup(void); /** * Get filename to store temporary config stuff. The pid is added. in /tmp. * @param adj: adjective, like "_cfg_", "_auto_" * @param id: identifier, like "example.com". * @param buf: where to store. * @param len: length of buf. */ void fake_temp_file(const char* adj, const char* id, char* buf, size_t len); #endif /* TESTCODE_FAKE_EVENT_H */ unbound-1.13.1/testcode/checklocks.h0000644000175000017500000003050314010434640016774 0ustar wouterwouter/** * testcode/checklocks.h - wrapper on locks that checks access. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef TESTCODE_CHECK_LOCKS_H #define TESTCODE_CHECK_LOCKS_H /** * \file * Locks that are checked. * * Holds information per lock and per thread. * That information is protected by a mutex (unchecked). * * Checks: * o which func, file, line created the lock. * o contention count, measures amount of contention on the lock. * o the memory region(s) that the lock protects are * memcmp'ed to ascertain no race conditions. * o checks that locks are unlocked properly (before deletion). * keeps which func, file, line that locked it. * o checks deadlocks with timeout so it can print errors for them. * * Limitations: * o Detects unprotected memory access when the lock is locked or freed, * which detects races only if they happen, and only if in protected * memory areas. * o Detects deadlocks by timeout, so approximately, as they happen. * o Does not check order of locking. * o Uses a lot of memory. * o The checks use locks themselves, changing scheduling, * thus changing what races you see. */ #ifdef USE_THREAD_DEBUG #ifndef HAVE_PTHREAD /* we need the *timed*lock() routines to use for deadlock detection. */ #error "Need pthreads for checked locks" #endif /******************* THREAD DEBUG ************************/ #include /** How many threads to allocate for */ #define THRDEBUG_MAX_THREADS 32 /* threads */ /** do we check locking order */ extern int check_locking_order; /** * Protection memory area. * It is copied to a holding buffer to compare against later. * Note that it may encompass the lock structure. */ struct protected_area { /** where the memory region starts */ void* region; /** size of the region */ size_t size; /** backbuffer that holds a copy, of same size. */ void* hold; /** next protected area in list */ struct protected_area* next; }; /** * Per thread information for locking debug wrappers. */ struct thr_check { /** thread id */ pthread_t id; /** real thread func */ void* (*func)(void*); /** func user arg */ void* arg; /** number of thread in list structure */ int num; /** instance number - how many locks have been created by thread */ int locks_created; /** file to write locking order information to */ FILE* order_info; /** * List of locks that this thread is holding, double * linked list. The first element is the most recent lock acquired. * So it represents the stack of locks acquired. (of all types). */ struct checked_lock *holding_first, *holding_last; /** if the thread is currently waiting for a lock, which one */ struct checked_lock* waiting; }; /** * One structure for all types of locks. */ struct checked_lock { /** mutex for exclusive access to this structure */ pthread_mutex_t lock; /** list of memory regions protected by this checked lock */ struct protected_area* prot; /** where was this lock created */ const char* create_func, *create_file; /** where was this lock created */ int create_line; /** unique instance identifier */ int create_thread, create_instance; /** contention count */ size_t contention_count; /** number of times locked, ever */ size_t history_count; /** hold count (how many threads are holding this lock) */ int hold_count; /** how many threads are waiting for this lock */ int wait_count; /** who touched it last */ const char* holder_func, *holder_file; /** who touched it last */ int holder_line; /** who owns the lock now */ struct thr_check* holder; /** for rwlocks, the writelock holder */ struct thr_check* writeholder; /** next lock a thread is holding (less recent) */ struct checked_lock* next_held_lock[THRDEBUG_MAX_THREADS]; /** prev lock a thread is holding (more recent) */ struct checked_lock* prev_held_lock[THRDEBUG_MAX_THREADS]; /** type of lock */ enum check_lock_type { /** basic mutex */ check_lock_mutex, /** fast spinlock */ check_lock_spinlock, /** rwlock */ check_lock_rwlock } type; /** the lock itself, see type to disambiguate the union */ union { /** mutex */ pthread_mutex_t mutex; /** spinlock */ pthread_spinlock_t spinlock; /** rwlock */ pthread_rwlock_t rwlock; } u; }; /** * Additional call for the user to specify what areas are protected * @param lock: the lock that protects the area. It can be inside the area. * The lock must be inited. Call with user lock. (any type). * It demangles the lock itself (struct checked_lock**). * @param area: ptr to mem. * @param size: length of area. * You can call it multiple times with the same lock to give several areas. * Call it when you are done initializing the area, since it will be copied * at this time and protected right away against unauthorised changes until * the next lock() call is done. */ void lock_protect(void* lock, void* area, size_t size); /** * Remove protected area from lock. * No need to call this when deleting the lock. * @param lock: the lock, any type, (struct checked_lock**). * @param area: pointer to memory. */ void lock_unprotect(void* lock, void* area); /** * Get memory associated with a checked lock * @param lock: the checked lock, any type. (struct checked_lock**). * @return: in bytes, including protected areas. */ size_t lock_get_mem(void* lock); /** * Initialise checklock. Sets up internal debug structures. */ void checklock_start(void); /** * Cleanup internal debug state. */ void checklock_stop(void); /** * Init locks. * @param type: what type of lock this is. * @param lock: ptr to user alloced ptr structure. This is inited. * So an alloc is done and the ptr is stored as result. * @param func: caller function name. * @param file: caller file name. * @param line: caller line number. */ void checklock_init(enum check_lock_type type, struct checked_lock** lock, const char* func, const char* file, int line); /** * Destroy locks. Free the structure. * @param type: what type of lock this is. * @param lock: ptr to user alloced structure. This is destroyed. * @param func: caller function name. * @param file: caller file name. * @param line: caller line number. */ void checklock_destroy(enum check_lock_type type, struct checked_lock** lock, const char* func, const char* file, int line); /** * Acquire readlock. * @param type: what type of lock this is. Had better be a rwlock. * @param lock: ptr to lock. * @param func: caller function name. * @param file: caller file name. * @param line: caller line number. */ void checklock_rdlock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line); /** * Acquire writelock. * @param type: what type of lock this is. Had better be a rwlock. * @param lock: ptr to lock. * @param func: caller function name. * @param file: caller file name. * @param line: caller line number. */ void checklock_wrlock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line); /** * Locks. * @param type: what type of lock this is. Had better be mutex or spinlock. * @param lock: the lock. * @param func: caller function name. * @param file: caller file name. * @param line: caller line number. */ void checklock_lock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line); /** * Unlocks. * @param type: what type of lock this is. * @param lock: the lock. * @param func: caller function name. * @param file: caller file name. * @param line: caller line number. */ void checklock_unlock(enum check_lock_type type, struct checked_lock* lock, const char* func, const char* file, int line); /** * Create thread. * @param thr: Thread id, where to store result. * @param func: thread start function. * @param arg: user argument. */ void checklock_thrcreate(pthread_t* thr, void* (*func)(void*), void* arg); /** * Wait for thread to exit. Returns thread return value. * @param thread: thread to wait for. */ void checklock_thrjoin(pthread_t thread); /** structures to enable compiler type checking on the locks. * Also the pointer makes it so that the lock can be part of the protected * region without any possible problem (since the ptr will stay the same.) * i.e. there can be contention and readlocks stored in checked_lock, while * the protected area stays the same, even though it contains (ptr to) lock. */ struct checked_lock_rw { struct checked_lock* c_rw; }; /** structures to enable compiler type checking on the locks. */ struct checked_lock_mutex { struct checked_lock* c_m; }; /** structures to enable compiler type checking on the locks. */ struct checked_lock_spl { struct checked_lock* c_spl; }; /** debugging rwlock */ typedef struct checked_lock_rw lock_rw_type; #define lock_rw_init(lock) checklock_init(check_lock_rwlock, &((lock)->c_rw), __func__, __FILE__, __LINE__) #define lock_rw_destroy(lock) checklock_destroy(check_lock_rwlock, &((lock)->c_rw), __func__, __FILE__, __LINE__) #define lock_rw_rdlock(lock) checklock_rdlock(check_lock_rwlock, (lock)->c_rw, __func__, __FILE__, __LINE__) #define lock_rw_wrlock(lock) checklock_wrlock(check_lock_rwlock, (lock)->c_rw, __func__, __FILE__, __LINE__) #define lock_rw_unlock(lock) checklock_unlock(check_lock_rwlock, (lock)->c_rw, __func__, __FILE__, __LINE__) /** debugging mutex */ typedef struct checked_lock_mutex lock_basic_type; #define lock_basic_init(lock) checklock_init(check_lock_mutex, &((lock)->c_m), __func__, __FILE__, __LINE__) #define lock_basic_destroy(lock) checklock_destroy(check_lock_mutex, &((lock)->c_m), __func__, __FILE__, __LINE__) #define lock_basic_lock(lock) checklock_lock(check_lock_mutex, (lock)->c_m, __func__, __FILE__, __LINE__) #define lock_basic_unlock(lock) checklock_unlock(check_lock_mutex, (lock)->c_m, __func__, __FILE__, __LINE__) /** debugging spinlock */ typedef struct checked_lock_spl lock_quick_type; #define lock_quick_init(lock) checklock_init(check_lock_spinlock, &((lock)->c_spl), __func__, __FILE__, __LINE__) #define lock_quick_destroy(lock) checklock_destroy(check_lock_spinlock, &((lock)->c_spl), __func__, __FILE__, __LINE__) #define lock_quick_lock(lock) checklock_lock(check_lock_spinlock, (lock)->c_spl, __func__, __FILE__, __LINE__) #define lock_quick_unlock(lock) checklock_unlock(check_lock_spinlock, (lock)->c_spl, __func__, __FILE__, __LINE__) /** we use the pthread id, our thr_check structure is kept behind the scenes */ typedef pthread_t ub_thread_type; #define ub_thread_create(thr, func, arg) checklock_thrcreate(thr, func, arg) #define ub_thread_self() pthread_self() #define ub_thread_join(thread) checklock_thrjoin(thread) typedef pthread_key_t ub_thread_key_type; #define ub_thread_key_create(key, f) LOCKRET(pthread_key_create(key, f)) #define ub_thread_key_set(key, v) LOCKRET(pthread_setspecific(key, v)) #define ub_thread_key_get(key) pthread_getspecific(key) #endif /* USE_THREAD_DEBUG */ #endif /* TESTCODE_CHECK_LOCKS_H */ unbound-1.13.1/testcode/unitmain.c0000644000175000017500000007656214010434640016521 0ustar wouterwouter/* * testcode/unitmain.c - unit test main program for unbound. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Unit test main program. Calls all the other unit tests. * Exits with code 1 on a failure. 0 if all unit tests are successful. */ #include "config.h" #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #ifdef HAVE_NSS /* nss3 */ #include "nss.h" #endif #include "sldns/rrdef.h" #include "sldns/keyraw.h" #include "util/log.h" #include "testcode/unitmain.h" /** number of tests done */ int testcount = 0; #include "util/alloc.h" /** test alloc code */ static void alloc_test(void) { alloc_special_type *t1, *t2; struct alloc_cache major, minor1, minor2; int i; unit_show_feature("alloc_special_obtain"); alloc_init(&major, NULL, 0); alloc_init(&minor1, &major, 0); alloc_init(&minor2, &major, 1); t1 = alloc_special_obtain(&minor1); alloc_clear(&minor1); alloc_special_release(&minor2, t1); t2 = alloc_special_obtain(&minor2); unit_assert( t1 == t2 ); /* reused */ alloc_special_release(&minor2, t1); for(i=0; i<100; i++) { t1 = alloc_special_obtain(&minor1); alloc_special_release(&minor2, t1); } if(0) { alloc_stats(&minor1); alloc_stats(&minor2); alloc_stats(&major); } /* reuse happened */ unit_assert(minor1.num_quar + minor2.num_quar + major.num_quar == 11); alloc_clear(&minor1); alloc_clear(&minor2); unit_assert(major.num_quar == 11); alloc_clear(&major); } #include "util/net_help.h" /** test net code */ static void net_test(void) { const char* t4[] = {"\000\000\000\000", "\200\000\000\000", "\300\000\000\000", "\340\000\000\000", "\360\000\000\000", "\370\000\000\000", "\374\000\000\000", "\376\000\000\000", "\377\000\000\000", "\377\200\000\000", "\377\300\000\000", "\377\340\000\000", "\377\360\000\000", "\377\370\000\000", "\377\374\000\000", "\377\376\000\000", "\377\377\000\000", "\377\377\200\000", "\377\377\300\000", "\377\377\340\000", "\377\377\360\000", "\377\377\370\000", "\377\377\374\000", "\377\377\376\000", "\377\377\377\000", "\377\377\377\200", "\377\377\377\300", "\377\377\377\340", "\377\377\377\360", "\377\377\377\370", "\377\377\377\374", "\377\377\377\376", "\377\377\377\377", "\377\377\377\377", "\377\377\377\377", }; unit_show_func("util/net_help.c", "str_is_ip6"); unit_assert( str_is_ip6("::") ); unit_assert( str_is_ip6("::1") ); unit_assert( str_is_ip6("2001:7b8:206:1:240:f4ff:fe37:8810") ); unit_assert( str_is_ip6("fe80::240:f4ff:fe37:8810") ); unit_assert( !str_is_ip6("0.0.0.0") ); unit_assert( !str_is_ip6("213.154.224.12") ); unit_assert( !str_is_ip6("213.154.224.255") ); unit_assert( !str_is_ip6("255.255.255.0") ); unit_show_func("util/net_help.c", "is_pow2"); unit_assert( is_pow2(0) ); unit_assert( is_pow2(1) ); unit_assert( is_pow2(2) ); unit_assert( is_pow2(4) ); unit_assert( is_pow2(8) ); unit_assert( is_pow2(16) ); unit_assert( is_pow2(1024) ); unit_assert( is_pow2(1024*1024) ); unit_assert( is_pow2(1024*1024*1024) ); unit_assert( !is_pow2(3) ); unit_assert( !is_pow2(5) ); unit_assert( !is_pow2(6) ); unit_assert( !is_pow2(7) ); unit_assert( !is_pow2(9) ); unit_assert( !is_pow2(10) ); unit_assert( !is_pow2(11) ); unit_assert( !is_pow2(17) ); unit_assert( !is_pow2(23) ); unit_assert( !is_pow2(257) ); unit_assert( !is_pow2(259) ); /* test addr_mask */ unit_show_func("util/net_help.c", "addr_mask"); if(1) { struct sockaddr_in a4; struct sockaddr_in6 a6; socklen_t l4 = (socklen_t)sizeof(a4); socklen_t l6 = (socklen_t)sizeof(a6); int i; a4.sin_family = AF_INET; a6.sin6_family = AF_INET6; for(i=0; i<35; i++) { /* address 255.255.255.255 */ memcpy(&a4.sin_addr, "\377\377\377\377", 4); addr_mask((struct sockaddr_storage*)&a4, l4, i); unit_assert(memcmp(&a4.sin_addr, t4[i], 4) == 0); } memcpy(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", 16); addr_mask((struct sockaddr_storage*)&a6, l6, 128); unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", 16) == 0); addr_mask((struct sockaddr_storage*)&a6, l6, 122); unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\300", 16) == 0); addr_mask((struct sockaddr_storage*)&a6, l6, 120); unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000", 16) == 0); addr_mask((struct sockaddr_storage*)&a6, l6, 64); unit_assert(memcmp(&a6.sin6_addr, "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000", 16) == 0); addr_mask((struct sockaddr_storage*)&a6, l6, 0); unit_assert(memcmp(&a6.sin6_addr, "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", 16) == 0); } /* test addr_in_common */ unit_show_func("util/net_help.c", "addr_in_common"); if(1) { struct sockaddr_in a4, b4; struct sockaddr_in6 a6, b6; socklen_t l4 = (socklen_t)sizeof(a4); socklen_t l6 = (socklen_t)sizeof(a6); int i; a4.sin_family = AF_INET; b4.sin_family = AF_INET; a6.sin6_family = AF_INET6; b6.sin6_family = AF_INET6; memcpy(&a4.sin_addr, "abcd", 4); memcpy(&b4.sin_addr, "abcd", 4); unit_assert(addr_in_common((struct sockaddr_storage*)&a4, 32, (struct sockaddr_storage*)&b4, 32, l4) == 32); unit_assert(addr_in_common((struct sockaddr_storage*)&a4, 34, (struct sockaddr_storage*)&b4, 32, l4) == 32); for(i=0; i<=32; i++) { unit_assert(addr_in_common( (struct sockaddr_storage*)&a4, 32, (struct sockaddr_storage*)&b4, i, l4) == i); unit_assert(addr_in_common( (struct sockaddr_storage*)&a4, i, (struct sockaddr_storage*)&b4, 32, l4) == i); unit_assert(addr_in_common( (struct sockaddr_storage*)&a4, i, (struct sockaddr_storage*)&b4, i, l4) == i); } for(i=0; i<=32; i++) { memcpy(&a4.sin_addr, "\377\377\377\377", 4); memcpy(&b4.sin_addr, t4[i], 4); unit_assert(addr_in_common( (struct sockaddr_storage*)&a4, 32, (struct sockaddr_storage*)&b4, 32, l4) == i); unit_assert(addr_in_common( (struct sockaddr_storage*)&b4, 32, (struct sockaddr_storage*)&a4, 32, l4) == i); } memcpy(&a6.sin6_addr, "abcdefghabcdefgh", 16); memcpy(&b6.sin6_addr, "abcdefghabcdefgh", 16); unit_assert(addr_in_common((struct sockaddr_storage*)&a6, 128, (struct sockaddr_storage*)&b6, 128, l6) == 128); unit_assert(addr_in_common((struct sockaddr_storage*)&a6, 129, (struct sockaddr_storage*)&b6, 128, l6) == 128); for(i=0; i<=128; i++) { unit_assert(addr_in_common( (struct sockaddr_storage*)&a6, 128, (struct sockaddr_storage*)&b6, i, l6) == i); unit_assert(addr_in_common( (struct sockaddr_storage*)&a6, i, (struct sockaddr_storage*)&b6, 128, l6) == i); unit_assert(addr_in_common( (struct sockaddr_storage*)&a6, i, (struct sockaddr_storage*)&b6, i, l6) == i); } } /* test sockaddr_cmp_addr */ unit_show_func("util/net_help.c", "sockaddr_cmp_addr"); if(1) { struct sockaddr_storage a, b; socklen_t alen = (socklen_t)sizeof(a); socklen_t blen = (socklen_t)sizeof(b); unit_assert(ipstrtoaddr("127.0.0.0", 53, &a, &alen)); unit_assert(ipstrtoaddr("127.255.255.255", 53, &b, &blen)); unit_assert(sockaddr_cmp_addr(&a, alen, &b, blen) < 0); unit_assert(sockaddr_cmp_addr(&b, blen, &a, alen) > 0); unit_assert(sockaddr_cmp_addr(&a, alen, &a, alen) == 0); unit_assert(sockaddr_cmp_addr(&b, blen, &b, blen) == 0); unit_assert(ipstrtoaddr("192.168.121.5", 53, &a, &alen)); unit_assert(sockaddr_cmp_addr(&a, alen, &b, blen) > 0); unit_assert(sockaddr_cmp_addr(&b, blen, &a, alen) < 0); unit_assert(sockaddr_cmp_addr(&a, alen, &a, alen) == 0); unit_assert(ipstrtoaddr("2001:3578:ffeb::99", 53, &b, &blen)); unit_assert(sockaddr_cmp_addr(&b, blen, &b, blen) == 0); unit_assert(sockaddr_cmp_addr(&a, alen, &b, blen) < 0); unit_assert(sockaddr_cmp_addr(&b, blen, &a, alen) > 0); } /* test addr_is_ip4mapped */ unit_show_func("util/net_help.c", "addr_is_ip4mapped"); if(1) { struct sockaddr_storage a; socklen_t l = (socklen_t)sizeof(a); unit_assert(ipstrtoaddr("12.13.14.15", 53, &a, &l)); unit_assert(!addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("fe80::217:31ff:fe91:df", 53, &a, &l)); unit_assert(!addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("ffff::217:31ff:fe91:df", 53, &a, &l)); unit_assert(!addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("::ffff:31ff:fe91:df", 53, &a, &l)); unit_assert(!addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("::fffe:fe91:df", 53, &a, &l)); unit_assert(!addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("::ffff:127.0.0.1", 53, &a, &l)); unit_assert(addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("::ffff:127.0.0.2", 53, &a, &l)); unit_assert(addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("::ffff:192.168.0.2", 53, &a, &l)); unit_assert(addr_is_ip4mapped(&a, l)); unit_assert(ipstrtoaddr("2::ffff:192.168.0.2", 53, &a, &l)); unit_assert(!addr_is_ip4mapped(&a, l)); } /* test addr_is_any */ unit_show_func("util/net_help.c", "addr_is_any"); if(1) { struct sockaddr_storage a; socklen_t l = (socklen_t)sizeof(a); unit_assert(ipstrtoaddr("0.0.0.0", 53, &a, &l)); unit_assert(addr_is_any(&a, l)); unit_assert(ipstrtoaddr("0.0.0.0", 10053, &a, &l)); unit_assert(addr_is_any(&a, l)); unit_assert(ipstrtoaddr("0.0.0.0", 0, &a, &l)); unit_assert(addr_is_any(&a, l)); unit_assert(ipstrtoaddr("::0", 0, &a, &l)); unit_assert(addr_is_any(&a, l)); unit_assert(ipstrtoaddr("::0", 53, &a, &l)); unit_assert(addr_is_any(&a, l)); unit_assert(ipstrtoaddr("::1", 53, &a, &l)); unit_assert(!addr_is_any(&a, l)); unit_assert(ipstrtoaddr("2001:1667::1", 0, &a, &l)); unit_assert(!addr_is_any(&a, l)); unit_assert(ipstrtoaddr("2001::0", 0, &a, &l)); unit_assert(!addr_is_any(&a, l)); unit_assert(ipstrtoaddr("10.0.0.0", 0, &a, &l)); unit_assert(!addr_is_any(&a, l)); unit_assert(ipstrtoaddr("0.0.0.10", 0, &a, &l)); unit_assert(!addr_is_any(&a, l)); unit_assert(ipstrtoaddr("192.0.2.1", 0, &a, &l)); unit_assert(!addr_is_any(&a, l)); } } #include "util/config_file.h" /** test config_file: cfg_parse_memsize */ static void config_memsize_test(void) { size_t v = 0; unit_show_func("util/config_file.c", "cfg_parse_memsize"); if(0) { /* these emit errors */ unit_assert( cfg_parse_memsize("", &v) == 0); unit_assert( cfg_parse_memsize("bla", &v) == 0); unit_assert( cfg_parse_memsize("nop", &v) == 0); unit_assert( cfg_parse_memsize("n0b", &v) == 0); unit_assert( cfg_parse_memsize("gb", &v) == 0); unit_assert( cfg_parse_memsize("b", &v) == 0); unit_assert( cfg_parse_memsize("kb", &v) == 0); unit_assert( cfg_parse_memsize("kk kb", &v) == 0); } unit_assert( cfg_parse_memsize("0", &v) && v==0); unit_assert( cfg_parse_memsize("1", &v) && v==1); unit_assert( cfg_parse_memsize("10", &v) && v==10); unit_assert( cfg_parse_memsize("10b", &v) && v==10); unit_assert( cfg_parse_memsize("5b", &v) && v==5); unit_assert( cfg_parse_memsize("1024", &v) && v==1024); unit_assert( cfg_parse_memsize("1k", &v) && v==1024); unit_assert( cfg_parse_memsize("1K", &v) && v==1024); unit_assert( cfg_parse_memsize("1Kb", &v) && v==1024); unit_assert( cfg_parse_memsize("1kb", &v) && v==1024); unit_assert( cfg_parse_memsize("1 kb", &v) && v==1024); unit_assert( cfg_parse_memsize("10 kb", &v) && v==10240); unit_assert( cfg_parse_memsize("2k", &v) && v==2048); unit_assert( cfg_parse_memsize("2m", &v) && v==2048*1024); unit_assert( cfg_parse_memsize("3M", &v) && v==3072*1024); unit_assert( cfg_parse_memsize("40m", &v) && v==40960*1024); unit_assert( cfg_parse_memsize("1G", &v) && v==1024*1024*1024); unit_assert( cfg_parse_memsize("1 Gb", &v) && v==1024*1024*1024); unit_assert( cfg_parse_memsize("0 Gb", &v) && v==0*1024*1024); } /** test config_file: test tag code */ static void config_tag_test(void) { unit_show_func("util/config_file.c", "taglist_intersect"); unit_assert( taglist_intersect( (uint8_t*)"\000\000\000", 3, (uint8_t*)"\001\000\001", 3 ) == 0); unit_assert( taglist_intersect( (uint8_t*)"\000\000\001", 3, (uint8_t*)"\001\000\001", 3 ) == 1); unit_assert( taglist_intersect( (uint8_t*)"\001\000\000", 3, (uint8_t*)"\001\000\001", 3 ) == 1); unit_assert( taglist_intersect( (uint8_t*)"\001", 1, (uint8_t*)"\001\000\001", 3 ) == 1); unit_assert( taglist_intersect( (uint8_t*)"\001\000\001", 3, (uint8_t*)"\001", 1 ) == 1); } #include "util/rtt.h" #include "util/timehist.h" #include "iterator/iterator.h" #include "libunbound/unbound.h" /** test RTT code */ static void rtt_test(void) { int init = UNKNOWN_SERVER_NICENESS; int i; struct rtt_info r; unit_show_func("util/rtt.c", "rtt_timeout"); rtt_init(&r); /* initial value sensible */ unit_assert( rtt_timeout(&r) == init ); rtt_lost(&r, init); unit_assert( rtt_timeout(&r) == init*2 ); rtt_lost(&r, init*2); unit_assert( rtt_timeout(&r) == init*4 ); rtt_update(&r, 4000); unit_assert( rtt_timeout(&r) >= 2000 ); rtt_lost(&r, rtt_timeout(&r) ); for(i=0; i<100; i++) { rtt_lost(&r, rtt_timeout(&r) ); unit_assert( rtt_timeout(&r) > RTT_MIN_TIMEOUT-1); unit_assert( rtt_timeout(&r) < RTT_MAX_TIMEOUT+1); } /* must be the same, timehist bucket is used in stats */ unit_assert(UB_STATS_BUCKET_NUM == NUM_BUCKETS_HIST); } #include "services/cache/infra.h" /* lookup and get key and data structs easily */ static struct infra_data* infra_lookup_host(struct infra_cache* infra, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int wr, time_t now, struct infra_key** k) { struct infra_data* d; struct lruhash_entry* e = infra_lookup_nottl(infra, addr, addrlen, zone, zonelen, wr); if(!e) return NULL; d = (struct infra_data*)e->data; if(d->ttl < now) { lock_rw_unlock(&e->lock); return NULL; } *k = (struct infra_key*)e->key; return d; } /** test host cache */ static void infra_test(void) { struct sockaddr_storage one; socklen_t onelen; uint8_t* zone = (uint8_t*)"\007example\003com\000"; size_t zonelen = 13; struct infra_cache* slab; struct config_file* cfg = config_create(); time_t now = 0; uint8_t edns_lame; int vs, to; struct infra_key* k; struct infra_data* d; int init = 376; unit_show_feature("infra cache"); unit_assert(ipstrtoaddr("127.0.0.1", 53, &one, &onelen)); slab = infra_create(cfg); unit_assert( infra_host(slab, &one, onelen, zone, zonelen, now, &vs, &edns_lame, &to) ); unit_assert( vs == 0 && to == init && edns_lame == 0 ); unit_assert( infra_rtt_update(slab, &one, onelen, zone, zonelen, LDNS_RR_TYPE_A, -1, init, now) ); unit_assert( infra_host(slab, &one, onelen, zone, zonelen, now, &vs, &edns_lame, &to) ); unit_assert( vs == 0 && to == init*2 && edns_lame == 0 ); unit_assert( infra_edns_update(slab, &one, onelen, zone, zonelen, -1, now) ); unit_assert( infra_host(slab, &one, onelen, zone, zonelen, now, &vs, &edns_lame, &to) ); unit_assert( vs == -1 && to == init*2 && edns_lame == 1); now += cfg->host_ttl + 10; unit_assert( infra_host(slab, &one, onelen, zone, zonelen, now, &vs, &edns_lame, &to) ); unit_assert( vs == 0 && to == init && edns_lame == 0 ); unit_assert( infra_set_lame(slab, &one, onelen, zone, zonelen, now, 0, 0, LDNS_RR_TYPE_A) ); unit_assert( (d=infra_lookup_host(slab, &one, onelen, zone, zonelen, 0, now, &k)) ); unit_assert( d->ttl == now+cfg->host_ttl ); unit_assert( d->edns_version == 0 ); unit_assert(!d->isdnsseclame && !d->rec_lame && d->lame_type_A && !d->lame_other); lock_rw_unlock(&k->entry.lock); /* test merge of data */ unit_assert( infra_set_lame(slab, &one, onelen, zone, zonelen, now, 0, 0, LDNS_RR_TYPE_AAAA) ); unit_assert( (d=infra_lookup_host(slab, &one, onelen, zone, zonelen, 0, now, &k)) ); unit_assert(!d->isdnsseclame && !d->rec_lame && d->lame_type_A && d->lame_other); lock_rw_unlock(&k->entry.lock); /* test that noEDNS cannot overwrite known-yesEDNS */ now += cfg->host_ttl + 10; unit_assert( infra_host(slab, &one, onelen, zone, zonelen, now, &vs, &edns_lame, &to) ); unit_assert( vs == 0 && to == init && edns_lame == 0 ); unit_assert( infra_edns_update(slab, &one, onelen, zone, zonelen, 0, now) ); unit_assert( infra_host(slab, &one, onelen, zone, zonelen, now, &vs, &edns_lame, &to) ); unit_assert( vs == 0 && to == init && edns_lame == 1 ); unit_assert( infra_edns_update(slab, &one, onelen, zone, zonelen, -1, now) ); unit_assert( infra_host(slab, &one, onelen, zone, zonelen, now, &vs, &edns_lame, &to) ); unit_assert( vs == 0 && to == init && edns_lame == 1 ); infra_delete(slab); config_delete(cfg); } #include "util/random.h" /** test randomness */ static void rnd_test(void) { struct ub_randstate* r; int num = 1000, i; long int a[1000]; unit_show_feature("ub_random"); unit_assert( (r = ub_initstate(NULL)) ); for(i=0; i= 0); unit_assert((size_t)a[i] <= (size_t)0x7fffffff); if(i > 5) unit_assert(a[i] != a[i-1] || a[i] != a[i-2] || a[i] != a[i-3] || a[i] != a[i-4] || a[i] != a[i-5] || a[i] != a[i-6]); } a[0] = ub_random_max(r, 1); unit_assert(a[0] >= 0 && a[0] < 1); a[0] = ub_random_max(r, 10000); unit_assert(a[0] >= 0 && a[0] < 10000); for(i=0; i= 0 && a[i] < 10); } ub_randfree(r); } #include "respip/respip.h" #include "services/localzone.h" #include "util/data/packed_rrset.h" typedef struct addr_action {char* ip; char* sact; enum respip_action act;} addr_action_t; /** Utility function that verifies that the respip set has actions as expected */ static void verify_respip_set_actions(struct respip_set* set, addr_action_t actions[], int actions_len) { int i = 0; struct rbtree_type* tree = respip_set_get_tree(set); for (i=0; icount); } /** Global respip actions test; apply raw config data and verify that * all the nodes in the respip set, looked up by address, have expected * actions */ static void respip_conf_actions_test(void) { addr_action_t config_response_ip[] = { {"192.0.1.0/24", "deny", respip_deny}, {"192.0.2.0/24", "redirect", respip_redirect}, {"192.0.3.0/26", "inform", respip_inform}, {"192.0.4.0/27", "inform_deny", respip_inform_deny}, {"2001:db8:1::/48", "always_transparent", respip_always_transparent}, {"2001:db8:2::/49", "always_refuse", respip_always_refuse}, {"2001:db8:3::/50", "always_nxdomain", respip_always_nxdomain}, }; int i; struct respip_set* set = respip_set_create(); struct config_file cfg; int clen = (int)(sizeof(config_response_ip) / sizeof(addr_action_t)); unit_assert(set); unit_show_feature("global respip config actions apply"); memset(&cfg, 0, sizeof(cfg)); for(i=0; iname = strdup("view1"); cv2->name = strdup("view2"); unit_assert(cv1->name && cv2->name); cv1->next = cv2; cfg.views = cv1; for(i=0; irespip_actions, ip, sact)) unit_assert(0); } for(i=0; irespip_actions, ip, sact)) unit_assert(0); } views = views_create(); unit_assert(views); unit_assert(views_apply_cfg(views, &cfg)); unit_assert(respip_views_apply_cfg(views, &cfg, &have_respip_cfg)); /* now verify the respip sets in each view */ v = views_find_view(views, "view1", 0); unit_assert(v); verify_respip_set_actions(v->respip_set, config_response_ip_view1, clen1); lock_rw_unlock(&v->lock); v = views_find_view(views, "view2", 0); unit_assert(v); verify_respip_set_actions(v->respip_set, config_response_ip_view2, clen2); lock_rw_unlock(&v->lock); views_delete(views); free(cv1->name); free(cv1); free(cv2->name); free(cv2); } typedef struct addr_data {char* ip; char* data;} addr_data_t; /** find the respip address node in the specified tree (by address lookup) * and verify type and address of the specified rdata (by index) in this * node's rrset */ static void verify_rrset(struct respip_set* set, const char* ipstr, const char* rdatastr, size_t rdi, uint16_t type) { struct sockaddr_storage addr; int net; char buf[65536]; socklen_t addrlen; struct rbtree_type* tree; struct resp_addr* node; const struct ub_packed_rrset_key* rrs; netblockstrtoaddr(ipstr, UNBOUND_DNS_PORT, &addr, &addrlen, &net); tree = respip_set_get_tree(set); node = (struct resp_addr*)addr_tree_find(tree, &addr, addrlen, net); unit_assert(node); unit_assert((rrs = resp_addr_get_rrset(node))); unit_assert(ntohs(rrs->rk.type) == type); packed_rr_to_string((struct ub_packed_rrset_key*)rrs, rdi, 0, buf, sizeof(buf)); unit_assert(strstr(buf, rdatastr)); } /** Dataset used to test redirect rrset initialization for both * global and per-view respip redirect configuration */ static addr_data_t config_response_ip_data[] = { {"192.0.1.0/24", "A 1.2.3.4"}, {"192.0.1.0/24", "A 11.12.13.14"}, {"192.0.2.0/24", "CNAME www.example.com."}, {"2001:db8:1::/48", "AAAA 2001:db8:1::2:1"}, }; /** Populate raw respip redirect config data, used for both global and * view-based respip redirect test case */ static void cfg_insert_respip_data(struct config_str2list** respip_actions, struct config_str2list** respip_data) { int clen = (int)(sizeof(config_response_ip_data) / sizeof(addr_data_t)); int i = 0; /* insert actions (duplicate netblocks don't matter) */ for(i=0; iname = strdup("view1"); unit_assert(cv->name); cfg.views = cv; cfg_insert_respip_data(&cv->respip_actions, &cv->respip_data); views = views_create(); unit_assert(views); unit_assert(views_apply_cfg(views, &cfg)); /* apply configuration and verify rrsets */ unit_assert(respip_views_apply_cfg(views, &cfg, &have_respip_cfg)); v = views_find_view(views, "view1", 0); unit_assert(v); verify_rrset(v->respip_set, "192.0.1.0/24", "1.2.3.4", 0, LDNS_RR_TYPE_A); verify_rrset(v->respip_set, "192.0.1.0/24", "11.12.13.14", 1, LDNS_RR_TYPE_A); verify_rrset(v->respip_set, "192.0.2.0/24", "www.example.com", 0, LDNS_RR_TYPE_CNAME); verify_rrset(v->respip_set, "2001:db8:1::/48", "2001:db8:1::2:1", 0, LDNS_RR_TYPE_AAAA); lock_rw_unlock(&v->lock); views_delete(views); free(cv->name); free(cv); } /** respip unit tests */ static void respip_test(void) { respip_view_conf_data_test(); respip_conf_data_test(); respip_view_conf_actions_test(); respip_conf_actions_test(); } #include "services/outside_network.h" /** add number of new IDs to the reuse tree, randomly chosen */ static void tcpid_addmore(struct reuse_tcp* reuse, struct outside_network* outnet, unsigned int addnum) { unsigned int i; struct waiting_tcp* w; for(i=0; iid = id; w->outnet = outnet; w->next_waiting = (void*)reuse->pending; reuse_tree_by_id_insert(reuse, w); } } /** fill up the reuse ID tree and test assertions */ static void tcpid_fillup(struct reuse_tcp* reuse, struct outside_network* outnet) { int t, numtest=3; for(t=0; ttree_by_id, reuse_id_cmp); tcpid_addmore(reuse, outnet, 65535); reuse_del_readwait(&reuse->tree_by_id); } } /** test TCP ID selection */ static void tcpid_test(void) { struct pending_tcp pend; struct outside_network outnet; unit_show_func("services/outside_network.c", "reuse_tcp_select_id"); memset(&pend, 0, sizeof(pend)); pend.reuse.pending = &pend; memset(&outnet, 0, sizeof(outnet)); outnet.rnd = ub_initstate(NULL); rbtree_init(&pend.reuse.tree_by_id, reuse_id_cmp); tcpid_fillup(&pend.reuse, &outnet); ub_randfree(outnet.rnd); } void unit_show_func(const char* file, const char* func) { printf("test %s:%s\n", file, func); } void unit_show_feature(const char* feature) { printf("test %s functions\n", feature); } #ifdef USE_ECDSA_EVP_WORKAROUND void ecdsa_evp_workaround_init(void); #endif /** * Main unit test program. Setup, teardown and report errors. * @param argc: arg count. * @param argv: array of commandline arguments. * @return program failure if test fails. */ int main(int argc, char* argv[]) { log_init(NULL, 0, NULL); if(argc != 1) { printf("usage: %s\n", argv[0]); printf("\tperforms unit tests.\n"); return 1; } /* Disable roundrobin for the unit tests */ RRSET_ROUNDROBIN = 0; #ifdef USE_LIBEVENT printf("Start of %s+libevent unit test.\n", PACKAGE_STRING); #else printf("Start of %s unit test.\n", PACKAGE_STRING); #endif #ifdef HAVE_SSL # ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); # endif # ifdef USE_GOST (void)sldns_key_EVP_load_gost_id(); # endif # ifdef USE_ECDSA_EVP_WORKAROUND ecdsa_evp_workaround_init(); # endif #elif defined(HAVE_NSS) if(NSS_NoDB_Init(".") != SECSuccess) fatal_exit("could not init NSS"); #endif /* HAVE_SSL or HAVE_NSS*/ checklock_start(); authzone_test(); neg_test(); rnd_test(); respip_test(); verify_test(); net_test(); config_memsize_test(); config_tag_test(); dname_test(); rtt_test(); anchors_test(); alloc_test(); regional_test(); lruhash_test(); slabhash_test(); infra_test(); ldns_test(); msgparse_test(); tcpid_test(); #ifdef CLIENT_SUBNET ecs_test(); #endif /* CLIENT_SUBNET */ if(log_get_lock()) { lock_basic_destroy((lock_basic_type*)log_get_lock()); } checklock_stop(); printf("%d checks ok.\n", testcount); #ifdef HAVE_SSL # if defined(USE_GOST) && defined(HAVE_LDNS_KEY_EVP_UNLOAD_GOST) sldns_key_EVP_unload_gost(); # endif # ifdef HAVE_OPENSSL_CONFIG # ifdef HAVE_EVP_CLEANUP EVP_cleanup(); # endif # if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) && defined(HAVE_ENGINE_CLEANUP) ENGINE_cleanup(); # endif CONF_modules_free(); # endif # ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA CRYPTO_cleanup_all_ex_data(); # endif # ifdef HAVE_ERR_FREE_STRINGS ERR_free_strings(); # endif # ifdef HAVE_RAND_CLEANUP RAND_cleanup(); # endif #elif defined(HAVE_NSS) if(NSS_Shutdown() != SECSuccess) fatal_exit("could not shutdown NSS"); #endif /* HAVE_SSL or HAVE_NSS */ #ifdef HAVE_PTHREAD /* dlopen frees its thread specific state */ pthread_exit(NULL); #endif return 0; } unbound-1.13.1/testcode/pktview.c0000644000175000017500000001335414010434640016354 0ustar wouterwouter/* * testcode/pktview.c - debug program to disassemble a DNS packet. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program shows a dns packet wire format. */ #include "config.h" #include "util/log.h" #include "util/data/dname.h" #include "util/data/msgparse.h" #include "testcode/unitmain.h" #include "testcode/readhex.h" #include "sldns/sbuffer.h" #include "sldns/parseutil.h" /** usage information for pktview */ static void usage(char* argv[]) { printf("usage: %s\n", argv[0]); printf("present hex packet on stdin.\n"); exit(1); } /** read hex input */ static void read_input(sldns_buffer* pkt, FILE* in) { char buf[102400]; char* np = buf; while(fgets(np, (int)sizeof(buf) - (np-buf), in)) { if(buf[0] == ';') /* comment */ continue; np = &np[strlen(np)]; } hex_to_buf(pkt, buf); } /** analyze domain name in packet, possibly compressed */ static void analyze_dname(sldns_buffer* pkt) { size_t oldpos = sldns_buffer_position(pkt); size_t len; printf("[pos %d] dname: ", (int)oldpos); dname_print(stdout, pkt, sldns_buffer_current(pkt)); len = pkt_dname_len(pkt); printf(" len=%d", (int)len); if(sldns_buffer_position(pkt)-oldpos != len) printf(" comprlen=%d\n", (int)(sldns_buffer_position(pkt)-oldpos)); else printf("\n"); } /** analyze rdata in packet */ static void analyze_rdata(sldns_buffer*pkt, const sldns_rr_descriptor* desc, uint16_t rdlen) { int rdf = 0; int count = (int)desc->_dname_count; size_t len, oldpos; while(rdlen > 0 && count) { switch(desc->_wireformat[rdf]) { case LDNS_RDF_TYPE_DNAME: oldpos = sldns_buffer_position(pkt); analyze_dname(pkt); rdlen -= sldns_buffer_position(pkt)-oldpos; count --; len = 0; break; case LDNS_RDF_TYPE_STR: len = sldns_buffer_current(pkt)[0] + 1; break; default: len = get_rdf_size(desc->_wireformat[rdf]); } if(len) { printf(" wf[%d]", (int)len); sldns_buffer_skip(pkt, (ssize_t)len); rdlen -= len; } rdf++; } if(rdlen) { size_t i; printf(" remain[%d]\n", (int)rdlen); for(i=0; i_name: "??" , (int)type); printf(" class %s(%d) ", sldns_lookup_by_id(sldns_rr_classes, (int)dclass)?sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name:"??", (int)dclass); if(q) { printf("\n"); } else { ttl = sldns_buffer_read_u32(pkt); printf(" ttl %d (0x%x)", (int)ttl, (unsigned)ttl); len = sldns_buffer_read_u16(pkt); printf(" rdata len %d:\n", (int)len); if(sldns_rr_descript(type)) analyze_rdata(pkt, sldns_rr_descript(type), len); else sldns_buffer_skip(pkt, (ssize_t)len); } } /** analyse pkt */ static void analyze(sldns_buffer* pkt) { uint16_t i, f, qd, an, ns, ar; int rrnum = 0; printf("packet length %d\n", (int)sldns_buffer_limit(pkt)); if(sldns_buffer_limit(pkt) < 12) return; i = sldns_buffer_read_u16(pkt); printf("id (hostorder): %d (0x%x)\n", (int)i, (unsigned)i); f = sldns_buffer_read_u16(pkt); printf("flags: 0x%x\n", (unsigned)f); qd = sldns_buffer_read_u16(pkt); printf("qdcount: %d\n", (int)qd); an = sldns_buffer_read_u16(pkt); printf("ancount: %d\n", (int)an); ns = sldns_buffer_read_u16(pkt); printf("nscount: %d\n", (int)ns); ar = sldns_buffer_read_u16(pkt); printf("arcount: %d\n", (int)ar); printf(";-- query section\n"); while(sldns_buffer_remaining(pkt) > 0) { if(rrnum == (int)qd) printf(";-- answer section\n"); if(rrnum == (int)qd+(int)an) printf(";-- authority section\n"); if(rrnum == (int)qd+(int)an+(int)ns) printf(";-- additional section\n"); printf("rr %d ", rrnum); analyze_rr(pkt, rrnum < (int)qd); rrnum++; } } /** main program for pktview */ int main(int argc, char* argv[]) { sldns_buffer* pkt = sldns_buffer_new(65553); if(argc != 1) { usage(argv); } if(!pkt) fatal_exit("out of memory"); read_input(pkt, stdin); analyze(pkt); sldns_buffer_free(pkt); return 0; } unbound-1.13.1/testcode/testpkts.h0000644000175000017500000002317314010434640016551 0ustar wouterwouter/* * testpkts. Data file parse for test packets, and query matching. * * Data storage for specially crafted replies for testing purposes. * * (c) NLnet Labs, 2005, 2006, 2007 * See the file LICENSE for the license */ #ifndef TESTPKTS_H #define TESTPKTS_H struct sldns_buffer; struct sldns_file_parse_state; /** * \file * * This is a debugging aid. It is not efficient, especially * with a long config file, but it can give any reply to any query. * This can help the developer pre-script replies for queries. * * You can specify a packet RR by RR with header flags to return. * * Missing features: * - matching content different from reply content. * - find way to adjust mangled packets? * */ /* The data file format is as follows: ; comment. ; a number of entries, these are processed first to last. ; a line based format. $ORIGIN origin $TTL default_ttl ENTRY_BEGIN ; first give MATCH lines, that say what queries are matched ; by this entry. ; 'opcode' makes the query match the opcode from the reply ; if you leave it out, any opcode matches this entry. ; 'qtype' makes the query match the qtype from the reply ; 'qname' makes the query match the qname from the reply ; 'subdomain' makes the query match subdomains of qname from the reply ; 'serial=1023' makes the query match if ixfr serial is 1023. ; 'all' has to match header byte for byte and all rrs in packet. ; 'ttl' used with all, rrs in packet must also have matching TTLs. ; 'DO' will match only queries with DO bit set. ; 'noedns' matches queries without EDNS OPT records. ; 'rcode' makes the query match the rcode from the reply ; 'question' makes the query match the question section ; 'answer' makes the query match the answer section ; 'ednsdata' matches queries to HEX_EDNS section. MATCH [opcode] [qtype] [qname] [serial=] [all] [ttl] MATCH [UDP|TCP] DO MATCH ... ; Then the REPLY header is specified. REPLY opcode, rcode or flags. (opcode) QUERY IQUERY STATUS NOTIFY UPDATE (rcode) NOERROR FORMERR SERVFAIL NXDOMAIN NOTIMPL YXDOMAIN YXRRSET NXRRSET NOTAUTH NOTZONE (flags) QR AA TC RD CD RA AD DO REPLY ... ; any additional actions to do. ; 'copy_id' copies the ID from the query to the answer. ADJUST copy_id ; 'copy_query' copies the query name, type and class to the answer. ADJUST copy_query ; 'sleep=10' sleeps for 10 seconds before giving the answer (TCP is open) ADJUST [sleep=] ; sleep before giving any reply ADJUST [packet_sleep=] ; sleep before this packet in sequence SECTION QUESTION ; the RRcount is determined automatically. SECTION ANSWER SECTION AUTHORITY SECTION ADDITIONAL EXTRA_PACKET ; follow with SECTION, REPLY for more packets. HEX_ANSWER_BEGIN ; follow with hex data ; this replaces any answer packet constructed ; with the SECTION keywords (only SECTION QUERY ; is used to match queries). If the data cannot ; be parsed, ADJUST rules for the answer packet ; are ignored. Only copy_id is done. HEX_ANSWER_END HEX_EDNS_BEGIN ; follow with hex data. ; Raw EDNS data to match against. It must be an ; exact match (all options are matched) and will be ; evaluated only when 'MATCH ednsdata' given. HEX_EDNS_END ENTRY_END Example data file: $ORIGIN nlnetlabs.nl $TTL 3600 ENTRY_BEGIN MATCH qname REPLY NOERROR ADJUST copy_id SECTION QUESTION www.nlnetlabs.nl. IN A SECTION ANSWER www.nlnetlabs.nl. IN A 195.169.215.155 SECTION AUTHORITY nlnetlabs.nl. IN NS www.nlnetlabs.nl. ENTRY_END ENTRY_BEGIN MATCH qname REPLY NOERROR ADJUST copy_id SECTION QUESTION www2.nlnetlabs.nl. IN A HEX_ANSWER_BEGIN ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 00 bf 81 80 00 01 00 01 00 02 00 02 03 77 77 77 0b 6b 61 6e ; 1- 20 61 72 69 65 70 69 65 74 03 63 6f 6d 00 00 01 00 01 03 77 77 ; 21- 40 77 0b 6b 61 6e 61 72 69 65 70 69 65 74 03 63 6f 6d 00 00 01 ; 41- 60 00 01 00 01 50 8b 00 04 52 5e ed 32 0b 6b 61 6e 61 72 69 65 ; 61- 80 70 69 65 74 03 63 6f 6d 00 00 02 00 01 00 01 50 8b 00 11 03 ; 81- 100 6e 73 31 08 68 65 78 6f 6e 2d 69 73 02 6e 6c 00 0b 6b 61 6e ; 101- 120 61 72 69 65 70 69 65 74 03 63 6f 6d 00 00 02 00 01 00 01 50 ; 121- 140 8b 00 11 03 6e 73 32 08 68 65 78 6f 6e 2d 69 73 02 6e 6c 00 ; 141- 160 03 6e 73 31 08 68 65 78 6f 6e 2d 69 73 02 6e 6c 00 00 01 00 ; 161- 180 01 00 00 46 53 00 04 52 5e ed 02 03 6e 73 32 08 68 65 78 6f ; 181- 200 6e 2d 69 73 02 6e 6c 00 00 01 00 01 00 00 46 53 00 04 d4 cc ; 201- 220 db 5b HEX_ANSWER_END ENTRY_END note that this file will link with your void verbose(int level, char* format, ...); output function. */ /** Type of transport, since some entries match based on UDP or TCP of query */ enum transport_type {transport_any = 0, transport_udp, transport_tcp }; /** struct to keep a linked list of reply packets for a query */ struct reply_packet { /** next in list of reply packets, for TCP multiple pkts on wire */ struct reply_packet* next; /** the reply pkt */ uint8_t* reply_pkt; /** length of reply pkt */ size_t reply_len; /** Additional EDNS data for matching queries. */ struct sldns_buffer* raw_ednsdata; /** or reply pkt in hex if not parsable */ struct sldns_buffer* reply_from_hex; /** seconds to sleep before giving packet */ unsigned int packet_sleep; }; /** data structure to keep the canned queries in. format is the 'matching query' and the 'canned answer' */ struct entry { /* match */ /* How to match an incoming query with this canned reply */ /** match query opcode with answer opcode */ uint8_t match_opcode; /** match qtype with answer qtype */ uint8_t match_qtype; /** match qname with answer qname */ uint8_t match_qname; /** match rcode with answer rcode */ uint8_t match_rcode; /** match question section */ uint8_t match_question; /** match answer section */ uint8_t match_answer; /** match qname as subdomain of answer qname */ uint8_t match_subdomain; /** match SOA serial number, from auth section */ uint8_t match_serial; /** match all of the packet */ uint8_t match_all; /** match ttls in the packet */ uint8_t match_ttl; /** match DO bit */ uint8_t match_do; /** match absence of EDNS OPT record in query */ uint8_t match_noedns; /** match edns data field given in hex */ uint8_t match_ednsdata_raw; /** match query serial with this value. */ uint32_t ixfr_soa_serial; /** match on UDP/TCP */ enum transport_type match_transport; /** pre canned reply */ struct reply_packet *reply_list; /** how to adjust the reply packet */ /** copy over the ID from the query into the answer */ uint8_t copy_id; /** copy the query nametypeclass from query into the answer */ uint8_t copy_query; /** copy ednsdata to reply, assume it is clientsubnet and * adjust scopemask to match sourcemask */ uint8_t copy_ednsdata_assume_clientsubnet; /** increment the ECS scope copied from the sourcemask by one */ uint8_t increment_ecs_scope; /** in seconds */ unsigned int sleeptime; /** some number that names this entry, line number in file or so */ int lineno; /** next in list */ struct entry* next; }; /** * reads the canned reply file and returns a list of structs * does an exit on error. * @param name: name of the file to read. * @param skip_whitespace: skip leftside whitespace. */ struct entry* read_datafile(const char* name, int skip_whitespace); /** * Delete linked list of entries. */ void delete_entry(struct entry* list); /** * Read one entry from the data file. * @param in: file to read from. Filepos must be at the start of a new line. * @param name: name of the file for prettier errors. * @param pstate: file parse state with lineno, default_ttl, * origin and prev_rr name. * @param skip_whitespace: skip leftside whitespace. * @return: The entry read (malloced) or NULL if no entry could be read. */ struct entry* read_entry(FILE* in, const char* name, struct sldns_file_parse_state* pstate, int skip_whitespace); /** * finds entry in list, or returns NULL. */ struct entry* find_match(struct entry* entries, uint8_t* query_pkt, size_t query_pkt_len, enum transport_type transport); /** * match two packets, all must match * @param q: packet 1 * @param qlen: length of q. * @param p: packet 2 * @param plen: length of p. * @param mttl: if true, ttls must match, if false, ttls do not need to match * @param noloc: if true, rrs may be reordered in their packet-section. * rrs are then matches without location of the rr being important. * @return true if matched. */ int match_all(uint8_t* q, size_t qlen, uint8_t* p, size_t plen, int mttl, int noloc); /** * copy & adjust packet, mallocs a copy. */ void adjust_packet(struct entry* match, uint8_t** answer_pkt, size_t* answer_pkt_len, uint8_t* query_pkt, size_t query_pkt_len); /** * Parses data buffer to a query, finds the correct answer * and calls the given function for every packet to send. * if verbose_out filename is given, packets are dumped there. * @param inbuf: the packet that came in * @param inlen: length of packet. * @param entries: entries read in from datafile. * @param count: is increased to count number of queries answered. * @param transport: set to UDP or TCP to match some types of entries. * @param sendfunc: called to send answer (buffer, size, userarg). * @param userdata: userarg to give to sendfunc. * @param verbose_out: if not NULL, verbose messages are printed there. */ void handle_query(uint8_t* inbuf, ssize_t inlen, struct entry* entries, int* count, enum transport_type transport, void (*sendfunc)(uint8_t*, size_t, void*), void* userdata, FILE* verbose_out); #endif /* TESTPKTS_H */ unbound-1.13.1/testcode/asynclook.c0000644000175000017500000003450014010434640016661 0ustar wouterwouter/* * testcode/asynclook.c - debug program perform async libunbound queries. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program shows the results from several background lookups, * while printing time in the foreground. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #include "libunbound/unbound.h" #include "libunbound/context.h" #include "util/locks.h" #include "util/log.h" #include "sldns/rrdef.h" #ifdef UNBOUND_ALLOC_LITE #undef malloc #undef calloc #undef realloc #undef free #undef strdup #endif #ifdef HAVE_SSL #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif #endif /* HAVE_SSL */ /** keeping track of the async ids */ struct track_id { /** the id to pass to libunbound to cancel */ int id; /** true if cancelled */ int cancel; /** a lock on this structure for thread safety */ lock_basic_type lock; }; /** * result list for the lookups */ struct lookinfo { /** name to look up */ char* name; /** tracking number that can be used to cancel the query */ int async_id; /** error code from libunbound */ int err; /** result from lookup */ struct ub_result* result; }; /** global variable to see how many queries we have left */ static int num_wait = 0; /** usage information for asynclook */ static void usage(char* argv[]) { printf("usage: %s [options] name ...\n", argv[0]); printf("names are looked up at the same time, asynchronously.\n"); printf(" -b : use blocking requests\n"); printf(" -c : cancel the requests\n"); printf(" -d : enable debug output\n"); printf(" -f addr : use addr, forward to that server\n"); printf(" -h : this help message\n"); printf(" -H fname : read hosts from fname\n"); printf(" -r fname : read resolv.conf from fname\n"); printf(" -t : use a resolver thread instead of forking a process\n"); printf(" -x : perform extended threaded test\n"); exit(1); } /** print result from lookup nicely */ static void print_result(struct lookinfo* info) { char buf[100]; if(info->err) /* error (from libunbound) */ printf("%s: error %s\n", info->name, ub_strerror(info->err)); else if(!info->result) printf("%s: cancelled\n", info->name); else if(info->result->havedata) printf("%s: %s\n", info->name, inet_ntop(AF_INET, info->result->data[0], buf, (socklen_t)sizeof(buf))); else { /* there is no data, why that? */ if(info->result->rcode == 0 /*noerror*/ || info->result->nxdomain) printf("%s: no data %s\n", info->name, info->result->nxdomain?"(no such host)": "(no IP4 address)"); else /* some error (from the server) */ printf("%s: DNS error %d\n", info->name, info->result->rcode); } } /** this is a function of type ub_callback_t */ static void lookup_is_done(void* mydata, int err, struct ub_result* result) { /* cast mydata back to the correct type */ struct lookinfo* info = (struct lookinfo*)mydata; fprintf(stderr, "name %s resolved\n", info->name); info->err = err; info->result = result; /* one less to wait for */ num_wait--; } /** check error, if bad, exit with error message */ static void checkerr(const char* desc, int err) { if(err != 0) { printf("%s error: %s\n", desc, ub_strerror(err)); exit(1); } } #ifdef THREADS_DISABLED /** only one process can communicate with async worker */ #define NUMTHR 1 #else /* have threads */ /** number of threads to make in extended test */ #define NUMTHR 10 #endif /** struct for extended thread info */ struct ext_thr_info { /** thread num for debug */ int thread_num; /** thread id */ ub_thread_type tid; /** context */ struct ub_ctx* ctx; /** size of array to query */ int argc; /** array of names to query */ char** argv; /** number of queries to do */ int numq; /** list of ids to free once threads are done */ struct track_id* id_list; }; /** if true, we are testing against 'localhost' and extra checking is done */ static int q_is_localhost = 0; /** check result structure for the 'correct' answer */ static void ext_check_result(const char* desc, int err, struct ub_result* result) { checkerr(desc, err); if(result == NULL) { printf("%s: error result is NULL.\n", desc); exit(1); } if(q_is_localhost) { if(strcmp(result->qname, "localhost") != 0) { printf("%s: error result has wrong qname.\n", desc); exit(1); } if(result->qtype != LDNS_RR_TYPE_A) { printf("%s: error result has wrong qtype.\n", desc); exit(1); } if(result->qclass != LDNS_RR_CLASS_IN) { printf("%s: error result has wrong qclass.\n", desc); exit(1); } if(result->data == NULL) { printf("%s: error result->data is NULL.\n", desc); exit(1); } if(result->len == NULL) { printf("%s: error result->len is NULL.\n", desc); exit(1); } if(result->rcode != 0) { printf("%s: error result->rcode is set.\n", desc); exit(1); } if(result->havedata == 0) { printf("%s: error result->havedata is unset.\n", desc); exit(1); } if(result->nxdomain != 0) { printf("%s: error result->nxdomain is set.\n", desc); exit(1); } if(result->secure || result->bogus) { printf("%s: error result->secure or bogus is set.\n", desc); exit(1); } if(result->data[0] == NULL) { printf("%s: error result->data[0] is NULL.\n", desc); exit(1); } if(result->len[0] != 4) { printf("%s: error result->len[0] is wrong.\n", desc); exit(1); } if(result->len[1] != 0 || result->data[1] != NULL) { printf("%s: error result->data[1] or len[1] is " "wrong.\n", desc); exit(1); } if(result->answer_packet == NULL) { printf("%s: error result->answer_packet is NULL.\n", desc); exit(1); } if(result->answer_len != 54) { printf("%s: error result->answer_len is wrong.\n", desc); exit(1); } } } /** extended bg result callback, this function is ub_callback_t */ static void ext_callback(void* mydata, int err, struct ub_result* result) { struct track_id* my_id = (struct track_id*)mydata; int doprint = 0; if(my_id) { /* I have an id, make sure we are not cancelled */ lock_basic_lock(&my_id->lock); if(doprint) printf("cb %d: ", my_id->id); if(my_id->cancel) { printf("error: query id=%d returned, but was cancelled\n", my_id->id); abort(); exit(1); } lock_basic_unlock(&my_id->lock); } ext_check_result("ext_callback", err, result); log_assert(result); if(doprint) { struct lookinfo pi; pi.name = result?result->qname:"noname"; pi.result = result; pi.err = 0; print_result(&pi); } ub_resolve_free(result); } /** extended thread worker */ static void* ext_thread(void* arg) { struct ext_thr_info* inf = (struct ext_thr_info*)arg; int i, r; struct ub_result* result; struct track_id* async_ids = NULL; log_thread_set(&inf->thread_num); if(inf->thread_num > NUMTHR*2/3) { async_ids = (struct track_id*)calloc((size_t)inf->numq, sizeof(struct track_id)); if(!async_ids) { printf("out of memory\n"); exit(1); } for(i=0; inumq; i++) { lock_basic_init(&async_ids[i].lock); } inf->id_list = async_ids; } for(i=0; inumq; i++) { if(async_ids) { r = ub_resolve_async(inf->ctx, inf->argv[i%inf->argc], LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN, &async_ids[i], ext_callback, &async_ids[i].id); checkerr("ub_resolve_async", r); if(i > 100) { lock_basic_lock(&async_ids[i-100].lock); r = ub_cancel(inf->ctx, async_ids[i-100].id); if(r != UB_NOID) async_ids[i-100].cancel=1; lock_basic_unlock(&async_ids[i-100].lock); if(r != UB_NOID) checkerr("ub_cancel", r); } } else if(inf->thread_num > NUMTHR/2) { /* async */ r = ub_resolve_async(inf->ctx, inf->argv[i%inf->argc], LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN, NULL, ext_callback, NULL); checkerr("ub_resolve_async", r); } else { /* blocking */ r = ub_resolve(inf->ctx, inf->argv[i%inf->argc], LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN, &result); ext_check_result("ub_resolve", r, result); ub_resolve_free(result); } } if(inf->thread_num > NUMTHR/2) { r = ub_wait(inf->ctx); checkerr("ub_ctx_wait", r); } /* if these locks are destroyed, or if the async_ids is freed, then a use-after-free happens in another thread. The allocation is only part of this test, though. */ return NULL; } /** perform extended threaded test */ static int ext_test(struct ub_ctx* ctx, int argc, char** argv) { struct ext_thr_info inf[NUMTHR]; int i; if(argc == 1 && strcmp(argv[0], "localhost") == 0) q_is_localhost = 1; printf("extended test start (%d threads)\n", NUMTHR); for(i=0; i 0) for(i=0; i<1000; i++) { usleep(100000); fprintf(stderr, "%g seconds passed\n", 0.1*(double)i); r = ub_process(ctx); checkerr("ub_process", r); if(num_wait == 0) break; } if(i>=999) { printf("timed out\n"); return 0; } printf("lookup complete\n"); /* print lookup results */ for(i=0; ireply_list); if(e->reply_list->reply_from_hex) { sldns_buffer_copy(pkt, e->reply_list->reply_from_hex); } else { sldns_buffer_clear(pkt); sldns_buffer_write(pkt, e->reply_list->reply_pkt, e->reply_list->reply_len); sldns_buffer_flip(pkt); } } /** entry to reply info conversion */ static void entry_to_repinfo(struct entry* e, struct alloc_cache* alloc, struct regional* region, sldns_buffer* pkt, struct query_info* qi, struct reply_info** rep) { int ret; struct edns_data edns; entry_to_buf(e, pkt); /* lock alloc lock to please lock checking software. * alloc_special_obtain assumes it is talking to a ub-alloc, * and does not need to perform locking. Here the alloc is * the only one, so we lock it here */ lock_quick_lock(&alloc->lock); ret = reply_info_parse(pkt, alloc, qi, rep, region, &edns); lock_quick_unlock(&alloc->lock); if(ret != 0) { char rcode[16]; sldns_wire2str_rcode_buf(ret, rcode, sizeof(rcode)); printf("parse code %d: %s\n", ret, rcode); unit_assert(ret != 0); } } /** extract DNSKEY rrset from answer and convert it */ static struct ub_packed_rrset_key* extract_keys(struct entry* e, struct alloc_cache* alloc, struct regional* region, sldns_buffer* pkt) { struct ub_packed_rrset_key* dnskey = NULL; struct query_info qinfo; struct reply_info* rep = NULL; size_t i; entry_to_repinfo(e, alloc, region, pkt, &qinfo, &rep); for(i=0; ian_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_DNSKEY) { dnskey = rep->rrsets[i]; rep->rrsets[i] = NULL; break; } } unit_assert(dnskey); reply_info_parsedelete(rep, alloc); query_info_clear(&qinfo); return dnskey; } /** return true if answer should be bogus */ static int should_be_bogus(struct ub_packed_rrset_key* rrset, struct query_info* qinfo) { struct packed_rrset_data* d = (struct packed_rrset_data*)rrset-> entry.data; if(d->rrsig_count == 0) return 1; /* name 'bogus' as first label signals bogus */ if(rrset->rk.dname_len > 6 && memcmp(rrset->rk.dname+1, "bogus", 5)==0) return 1; if(qinfo->qname_len > 6 && memcmp(qinfo->qname+1, "bogus", 5)==0) return 1; return 0; } /** return number of rrs in an rrset */ static size_t rrset_get_count(struct ub_packed_rrset_key* rrset) { struct packed_rrset_data* d = (struct packed_rrset_data*) rrset->entry.data; if(!d) return 0; return d->count; } /** setup sig alg list from dnskey */ static void setup_sigalg(struct ub_packed_rrset_key* dnskey, uint8_t* sigalg) { uint8_t a[ALGO_NEEDS_MAX]; size_t i, n = 0; memset(a, 0, sizeof(a)); for(i=0; irk.dname, ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class)); } setup_sigalg(dnskey, sigalg); /* check all algorithms in the dnskey */ /* ok to give null as qstate here, won't be used for answer section. */ sec = dnskeyset_verify_rrset(env, ve, rrset, dnskey, sigalg, &reason, LDNS_SECTION_ANSWER, NULL); if(vsig) { printf("verify outcome is: %s %s\n", sec_status_to_string(sec), reason?reason:""); } if(should_be_bogus(rrset, qinfo)) { unit_assert(sec == sec_status_bogus); } else { unit_assert(sec == sec_status_secure); } } /** verify and test an entry - every rr in the message */ static void verifytest_entry(struct entry* e, struct alloc_cache* alloc, struct regional* region, sldns_buffer* pkt, struct ub_packed_rrset_key* dnskey, struct module_env* env, struct val_env* ve) { struct query_info qinfo; struct reply_info* rep = NULL; size_t i; regional_free_all(region); if(vsig) { char* s = sldns_wire2str_pkt(e->reply_list->reply_pkt, e->reply_list->reply_len); printf("verifying pkt:\n%s\n", s?s:"outofmemory"); free(s); } entry_to_repinfo(e, alloc, region, pkt, &qinfo, &rep); for(i=0; irrset_count; i++) { verifytest_rrset(env, ve, rep->rrsets[i], dnskey, &qinfo); } reply_info_parsedelete(rep, alloc); query_info_clear(&qinfo); } /** find RRset in reply by type */ static struct ub_packed_rrset_key* find_rrset_type(struct reply_info* rep, uint16_t type) { size_t i; for(i=0; irrset_count; i++) { if(ntohs(rep->rrsets[i]->rk.type) == type) return rep->rrsets[i]; } return NULL; } /** DS sig test an entry - get DNSKEY and DS in entry and verify */ static void dstest_entry(struct entry* e, struct alloc_cache* alloc, struct regional* region, sldns_buffer* pkt, struct module_env* env) { struct query_info qinfo; struct reply_info* rep = NULL; struct ub_packed_rrset_key* ds, *dnskey; int ret; regional_free_all(region); if(vsig) { char* s = sldns_wire2str_pkt(e->reply_list->reply_pkt, e->reply_list->reply_len); printf("verifying DS-DNSKEY match:\n%s\n", s?s:"outofmemory"); free(s); } entry_to_repinfo(e, alloc, region, pkt, &qinfo, &rep); ds = find_rrset_type(rep, LDNS_RR_TYPE_DS); dnskey = find_rrset_type(rep, LDNS_RR_TYPE_DNSKEY); /* check test is OK */ unit_assert(ds && dnskey); ret = ds_digest_match_dnskey(env, dnskey, 0, ds, 0); if(strncmp((char*)qinfo.qname, "\003yes", 4) == 0) { if(vsig) { printf("result(yes)= %s\n", ret?"yes":"no"); } unit_assert(ret); } else if (strncmp((char*)qinfo.qname, "\002no", 3) == 0) { if(vsig) { printf("result(no)= %s\n", ret?"yes":"no"); } unit_assert(!ret); verbose(VERB_QUERY, "DS fail: OK; matched unit test"); } else { fatal_exit("Bad qname in DS unit test, yes or no"); } reply_info_parsedelete(rep, alloc); query_info_clear(&qinfo); } /** verify from a file */ static void verifytest_file(const char* fname, const char* at_date) { /* * The file contains a list of ldns-testpkts entries. * The first entry must be a query for DNSKEY. * The answer rrset is the keyset that will be used for verification */ struct ub_packed_rrset_key* dnskey; struct regional* region = regional_create(); struct alloc_cache alloc; sldns_buffer* buf = sldns_buffer_new(65535); struct entry* e; struct entry* list = read_datafile(fname, 1); struct module_env env; struct val_env ve; time_t now = time(NULL); unit_show_func("signature verify", fname); if(!list) fatal_exit("could not read %s: %s", fname, strerror(errno)); alloc_init(&alloc, NULL, 1); memset(&env, 0, sizeof(env)); memset(&ve, 0, sizeof(ve)); env.scratch = region; env.scratch_buffer = buf; env.now = &now; ve.date_override = cfg_convert_timeval(at_date); unit_assert(region && buf); dnskey = extract_keys(list, &alloc, region, buf); if(vsig) log_nametypeclass(VERB_QUERY, "test dnskey", dnskey->rk.dname, ntohs(dnskey->rk.type), ntohs(dnskey->rk.rrset_class)); /* ready to go! */ for(e = list->next; e; e = e->next) { verifytest_entry(e, &alloc, region, buf, dnskey, &env, &ve); } ub_packed_rrset_parsedelete(dnskey, &alloc); delete_entry(list); regional_destroy(region); alloc_clear(&alloc); sldns_buffer_free(buf); } /** verify DS matches DNSKEY from a file */ static void dstest_file(const char* fname) { /* * The file contains a list of ldns-testpkts entries. * The first entry must be a query for DNSKEY. * The answer rrset is the keyset that will be used for verification */ struct regional* region = regional_create(); struct alloc_cache alloc; sldns_buffer* buf = sldns_buffer_new(65535); struct entry* e; struct entry* list = read_datafile(fname, 1); struct module_env env; unit_show_func("DS verify", fname); if(!list) fatal_exit("could not read %s: %s", fname, strerror(errno)); alloc_init(&alloc, NULL, 1); memset(&env, 0, sizeof(env)); env.scratch = region; env.scratch_buffer = buf; unit_assert(region && buf); /* ready to go! */ for(e = list; e; e = e->next) { dstest_entry(e, &alloc, region, buf, &env); } delete_entry(list); regional_destroy(region); alloc_clear(&alloc); sldns_buffer_free(buf); } /** helper for unittest of NSEC routines */ static int unitest_nsec_has_type_rdata(char* bitmap, size_t len, uint16_t type) { return nsecbitmap_has_type_rdata((uint8_t*)bitmap, len, type); } /** Test NSEC type bitmap routine */ static void nsectest(void) { /* bitmap starts at type bitmap rdata field */ /* from rfc 4034 example */ char* bitmap = "\000\006\100\001\000\000\000\003" "\004\033\000\000\000\000\000\000" "\000\000\000\000\000\000\000\000" "\000\000\000\000\000\000\000\000" "\000\000\000\000\040"; size_t len = 37; unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 0)); unit_assert(unitest_nsec_has_type_rdata(bitmap, len, LDNS_RR_TYPE_A)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 2)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 3)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 4)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 5)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 6)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 7)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 8)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 9)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 10)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 11)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 12)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 13)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 14)); unit_assert(unitest_nsec_has_type_rdata(bitmap, len, LDNS_RR_TYPE_MX)); unit_assert(unitest_nsec_has_type_rdata(bitmap, len, LDNS_RR_TYPE_RRSIG)); unit_assert(unitest_nsec_has_type_rdata(bitmap, len, LDNS_RR_TYPE_NSEC)); unit_assert(unitest_nsec_has_type_rdata(bitmap, len, 1234)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 1233)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 1235)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 1236)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 1237)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 1238)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 1239)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 1240)); unit_assert(!unitest_nsec_has_type_rdata(bitmap, len, 2230)); } /** Test hash algo - NSEC3 hash it and compare result */ static void nsec3_hash_test_entry(struct entry* e, rbtree_type* ct, struct alloc_cache* alloc, struct regional* region, sldns_buffer* buf) { struct query_info qinfo; struct reply_info* rep = NULL; struct ub_packed_rrset_key* answer, *nsec3; struct nsec3_cached_hash* hash = NULL; int ret; uint8_t* qname; if(vsig) { char* s = sldns_wire2str_pkt(e->reply_list->reply_pkt, e->reply_list->reply_len); printf("verifying NSEC3 hash:\n%s\n", s?s:"outofmemory"); free(s); } entry_to_repinfo(e, alloc, region, buf, &qinfo, &rep); nsec3 = find_rrset_type(rep, LDNS_RR_TYPE_NSEC3); answer = find_rrset_type(rep, LDNS_RR_TYPE_AAAA); qname = regional_alloc_init(region, qinfo.qname, qinfo.qname_len); /* check test is OK */ unit_assert(nsec3 && answer && qname); ret = nsec3_hash_name(ct, region, buf, nsec3, 0, qname, qinfo.qname_len, &hash); if(ret != 1) { printf("Bad nsec3_hash_name retcode %d\n", ret); unit_assert(ret == 1); } unit_assert(hash->dname && hash->hash && hash->hash_len && hash->b32 && hash->b32_len); unit_assert(hash->b32_len == (size_t)answer->rk.dname[0]); /* does not do lowercasing. */ unit_assert(memcmp(hash->b32, answer->rk.dname+1, hash->b32_len) == 0); reply_info_parsedelete(rep, alloc); query_info_clear(&qinfo); } /** Read file to test NSEC3 hash algo */ static void nsec3_hash_test(const char* fname) { /* * The list contains a list of ldns-testpkts entries. * Every entry is a test. * The qname is hashed. * The answer section AAAA RR name is the required result. * The auth section NSEC3 is used to get hash parameters. * The hash cache is maintained per file. * * The test does not perform canonicalization during the compare. */ rbtree_type ct; struct regional* region = regional_create(); struct alloc_cache alloc; sldns_buffer* buf = sldns_buffer_new(65535); struct entry* e; struct entry* list = read_datafile(fname, 1); unit_show_func("NSEC3 hash", fname); if(!list) fatal_exit("could not read %s: %s", fname, strerror(errno)); rbtree_init(&ct, &nsec3_hash_cmp); alloc_init(&alloc, NULL, 1); unit_assert(region && buf); /* ready to go! */ for(e = list; e; e = e->next) { nsec3_hash_test_entry(e, &ct, &alloc, region, buf); } delete_entry(list); regional_destroy(region); alloc_clear(&alloc); sldns_buffer_free(buf); } #define xstr(s) str(s) #define str(s) #s #define SRCDIRSTR xstr(SRCDIR) void verify_test(void) { unit_show_feature("signature verify"); #ifdef USE_SHA1 verifytest_file(SRCDIRSTR "/testdata/test_signatures.1", "20070818005004"); #endif #if defined(USE_DSA) && defined(USE_SHA1) verifytest_file(SRCDIRSTR "/testdata/test_signatures.2", "20080414005004"); verifytest_file(SRCDIRSTR "/testdata/test_signatures.3", "20080416005004"); verifytest_file(SRCDIRSTR "/testdata/test_signatures.4", "20080416005004"); verifytest_file(SRCDIRSTR "/testdata/test_signatures.5", "20080416005004"); verifytest_file(SRCDIRSTR "/testdata/test_signatures.6", "20080416005004"); verifytest_file(SRCDIRSTR "/testdata/test_signatures.7", "20070829144150"); #endif /* USE_DSA */ #ifdef USE_SHA1 verifytest_file(SRCDIRSTR "/testdata/test_signatures.8", "20070829144150"); #endif #if (defined(HAVE_EVP_SHA256) || defined(HAVE_NSS) || defined(HAVE_NETTLE)) && defined(USE_SHA2) verifytest_file(SRCDIRSTR "/testdata/test_sigs.rsasha256", "20070829144150"); # ifdef USE_SHA1 verifytest_file(SRCDIRSTR "/testdata/test_sigs.sha1_and_256", "20070829144150"); # endif verifytest_file(SRCDIRSTR "/testdata/test_sigs.rsasha256_draft", "20090101000000"); #endif #if (defined(HAVE_EVP_SHA512) || defined(HAVE_NSS) || defined(HAVE_NETTLE)) && defined(USE_SHA2) verifytest_file(SRCDIRSTR "/testdata/test_sigs.rsasha512_draft", "20070829144150"); verifytest_file(SRCDIRSTR "/testdata/test_signatures.9", "20171215000000"); #endif #ifdef USE_SHA1 verifytest_file(SRCDIRSTR "/testdata/test_sigs.hinfo", "20090107100022"); verifytest_file(SRCDIRSTR "/testdata/test_sigs.revoked", "20080414005004"); #endif #ifdef USE_GOST if(sldns_key_EVP_load_gost_id()) verifytest_file(SRCDIRSTR "/testdata/test_sigs.gost", "20090807060504"); else printf("Warning: skipped GOST, openssl does not provide gost.\n"); #endif #ifdef USE_ECDSA /* test for support in case we use libNSS and ECC is removed */ if(dnskey_algo_id_is_supported(LDNS_ECDSAP256SHA256)) { verifytest_file(SRCDIRSTR "/testdata/test_sigs.ecdsa_p256", "20100908100439"); verifytest_file(SRCDIRSTR "/testdata/test_sigs.ecdsa_p384", "20100908100439"); } dstest_file(SRCDIRSTR "/testdata/test_ds.sha384"); #endif #ifdef USE_ED25519 if(dnskey_algo_id_is_supported(LDNS_ED25519)) { verifytest_file(SRCDIRSTR "/testdata/test_sigs.ed25519", "20170530140439"); } #endif #ifdef USE_ED448 if(dnskey_algo_id_is_supported(LDNS_ED448)) { verifytest_file(SRCDIRSTR "/testdata/test_sigs.ed448", "20180408143630"); } #endif #ifdef USE_SHA1 dstest_file(SRCDIRSTR "/testdata/test_ds.sha1"); #endif nsectest(); nsec3_hash_test(SRCDIRSTR "/testdata/test_nsec3_hash.1"); } unbound-1.13.1/testcode/unitlruhash.c0000644000175000017500000003367714010434640017243 0ustar wouterwouter/* * testcode/unitlruhash.c - unit test for lruhash table. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Tests the locking LRU keeping hash table implementation. */ #include "config.h" #include "testcode/unitmain.h" #include "util/log.h" #include "util/storage/lruhash.h" #include "util/storage/slabhash.h" /* for the test structures */ /** use this type for the lruhash test key */ typedef struct slabhash_testkey testkey_type; /** use this type for the lruhash test data */ typedef struct slabhash_testdata testdata_type; /** delete key */ static void delkey(struct slabhash_testkey* k) { lock_rw_destroy(&k->entry.lock); free(k);} /** delete data */ static void deldata(struct slabhash_testdata* d) {free(d);} /** hash func, very bad to improve collisions */ static hashvalue_type myhash(int id) {return (hashvalue_type)id & 0x0f;} /** allocate new key, fill in hash */ static testkey_type* newkey(int id) { testkey_type* k = (testkey_type*)calloc(1, sizeof(testkey_type)); if(!k) fatal_exit("out of memory"); k->id = id; k->entry.hash = myhash(id); k->entry.key = k; lock_rw_init(&k->entry.lock); return k; } /** new data el */ static testdata_type* newdata(int val) { testdata_type* d = (testdata_type*)calloc(1, sizeof(testdata_type)); if(!d) fatal_exit("out of memory"); d->data = val; return d; } /** test bin_find_entry function and bin_overflow_remove */ static void test_bin_find_entry(struct lruhash* table) { testkey_type* k = newkey(12); testdata_type* d = newdata(128); testkey_type* k2 = newkey(12 + 1024); testkey_type* k3 = newkey(14); testkey_type* k4 = newkey(12 + 1024*2); hashvalue_type h = myhash(12); struct lruhash_bin bin; memset(&bin, 0, sizeof(bin)); bin_init(&bin, 1); /* remove from empty list */ bin_overflow_remove(&bin, &k->entry); /* find in empty list */ unit_assert( bin_find_entry(table, &bin, h, k) == NULL ); /* insert */ lock_quick_lock(&bin.lock); bin.overflow_list = &k->entry; lock_quick_unlock(&bin.lock); /* find, hash not OK. */ unit_assert( bin_find_entry(table, &bin, myhash(13), k) == NULL ); /* find, hash OK, but cmp not */ unit_assert( k->entry.hash == k2->entry.hash ); unit_assert( bin_find_entry(table, &bin, h, k2) == NULL ); /* find, hash OK, and cmp too */ unit_assert( bin_find_entry(table, &bin, h, k) == &k->entry ); /* remove the element */ lock_quick_lock(&bin.lock); bin_overflow_remove(&bin, &k->entry); lock_quick_unlock(&bin.lock); unit_assert( bin_find_entry(table, &bin, h, k) == NULL ); /* prepend two different elements; so the list is long */ /* one has the same hash, but different cmp */ lock_quick_lock(&bin.lock); unit_assert( k->entry.hash == k4->entry.hash ); k4->entry.overflow_next = &k->entry; k3->entry.overflow_next = &k4->entry; bin.overflow_list = &k3->entry; lock_quick_unlock(&bin.lock); /* find, hash not OK. */ unit_assert( bin_find_entry(table, &bin, myhash(13), k) == NULL ); /* find, hash OK, but cmp not */ unit_assert( k->entry.hash == k2->entry.hash ); unit_assert( bin_find_entry(table, &bin, h, k2) == NULL ); /* find, hash OK, and cmp too */ unit_assert( bin_find_entry(table, &bin, h, k) == &k->entry ); /* remove middle element */ unit_assert( bin_find_entry(table, &bin, k4->entry.hash, k4) == &k4->entry ); lock_quick_lock(&bin.lock); bin_overflow_remove(&bin, &k4->entry); lock_quick_unlock(&bin.lock); unit_assert( bin_find_entry(table, &bin, k4->entry.hash, k4) == NULL); /* remove last element */ lock_quick_lock(&bin.lock); bin_overflow_remove(&bin, &k->entry); lock_quick_unlock(&bin.lock); unit_assert( bin_find_entry(table, &bin, h, k) == NULL ); lock_quick_destroy(&bin.lock); delkey(k); delkey(k2); delkey(k3); delkey(k4); deldata(d); } /** test lru_front lru_remove */ static void test_lru(struct lruhash* table) { testkey_type* k = newkey(12); testkey_type* k2 = newkey(14); lock_quick_lock(&table->lock); unit_assert( table->lru_start == NULL && table->lru_end == NULL); lru_remove(table, &k->entry); unit_assert( table->lru_start == NULL && table->lru_end == NULL); /* add one */ lru_front(table, &k->entry); unit_assert( table->lru_start == &k->entry && table->lru_end == &k->entry); /* remove it */ lru_remove(table, &k->entry); unit_assert( table->lru_start == NULL && table->lru_end == NULL); /* add two */ lru_front(table, &k->entry); unit_assert( table->lru_start == &k->entry && table->lru_end == &k->entry); lru_front(table, &k2->entry); unit_assert( table->lru_start == &k2->entry && table->lru_end == &k->entry); /* remove first in list */ lru_remove(table, &k2->entry); unit_assert( table->lru_start == &k->entry && table->lru_end == &k->entry); lru_front(table, &k2->entry); unit_assert( table->lru_start == &k2->entry && table->lru_end == &k->entry); /* remove last in list */ lru_remove(table, &k->entry); unit_assert( table->lru_start == &k2->entry && table->lru_end == &k2->entry); /* empty the list */ lru_remove(table, &k2->entry); unit_assert( table->lru_start == NULL && table->lru_end == NULL); lock_quick_unlock(&table->lock); delkey(k); delkey(k2); } /** test hashtable using short sequence */ static void test_short_table(struct lruhash* table) { testkey_type* k = newkey(12); testkey_type* k2 = newkey(14); testdata_type* d = newdata(128); testdata_type* d2 = newdata(129); k->entry.data = d; k2->entry.data = d2; lruhash_insert(table, myhash(12), &k->entry, d, NULL); lruhash_insert(table, myhash(14), &k2->entry, d2, NULL); unit_assert( lruhash_lookup(table, myhash(12), k, 0) == &k->entry); lock_rw_unlock( &k->entry.lock ); unit_assert( lruhash_lookup(table, myhash(14), k2, 0) == &k2->entry); lock_rw_unlock( &k2->entry.lock ); lruhash_remove(table, myhash(12), k); lruhash_remove(table, myhash(14), k2); } /** number of hash test max */ #define HASHTESTMAX 25 /** test adding a random element */ static void testadd(struct lruhash* table, testdata_type* ref[]) { int numtoadd = random() % HASHTESTMAX; testdata_type* data = newdata(numtoadd); testkey_type* key = newkey(numtoadd); key->entry.data = data; lruhash_insert(table, myhash(numtoadd), &key->entry, data, NULL); ref[numtoadd] = data; } /** test adding a random element */ static void testremove(struct lruhash* table, testdata_type* ref[]) { int num = random() % HASHTESTMAX; testkey_type* key = newkey(num); lruhash_remove(table, myhash(num), key); ref[num] = NULL; delkey(key); } /** test adding a random element */ static void testlookup(struct lruhash* table, testdata_type* ref[]) { int num = random() % HASHTESTMAX; testkey_type* key = newkey(num); struct lruhash_entry* en = lruhash_lookup(table, myhash(num), key, 0); testdata_type* data = en? (testdata_type*)en->data : NULL; if(en) { unit_assert(en->key); unit_assert(en->data); } if(0) log_info("lookup %d got %d, expect %d", num, en? data->data :-1, ref[num]? ref[num]->data : -1); unit_assert( data == ref[num] ); if(en) { lock_rw_unlock(&en->lock); } delkey(key); } /** check integrity of hash table */ static void check_table(struct lruhash* table) { struct lruhash_entry* p; size_t c = 0; lock_quick_lock(&table->lock); unit_assert( table->num <= table->size); unit_assert( table->size_mask == (int)table->size-1 ); unit_assert( (table->lru_start && table->lru_end) || (!table->lru_start && !table->lru_end) ); unit_assert( table->space_used <= table->space_max ); /* check lru list integrity */ if(table->lru_start) unit_assert(table->lru_start->lru_prev == NULL); if(table->lru_end) unit_assert(table->lru_end->lru_next == NULL); p = table->lru_start; while(p) { if(p->lru_prev) { unit_assert(p->lru_prev->lru_next == p); } if(p->lru_next) { unit_assert(p->lru_next->lru_prev == p); } c++; p = p->lru_next; } unit_assert(c == table->num); /* this assertion is specific to the unit test */ unit_assert( table->space_used == table->num * test_slabhash_sizefunc(NULL, NULL) ); lock_quick_unlock(&table->lock); } /** test adding a random element (unlimited range) */ static void testadd_unlim(struct lruhash* table, testdata_type** ref) { int numtoadd = random() % (HASHTESTMAX * 10); testdata_type* data = newdata(numtoadd); testkey_type* key = newkey(numtoadd); key->entry.data = data; lruhash_insert(table, myhash(numtoadd), &key->entry, data, NULL); if(ref) ref[numtoadd] = data; } /** test adding a random element (unlimited range) */ static void testremove_unlim(struct lruhash* table, testdata_type** ref) { int num = random() % (HASHTESTMAX*10); testkey_type* key = newkey(num); lruhash_remove(table, myhash(num), key); if(ref) ref[num] = NULL; delkey(key); } /** test adding a random element (unlimited range) */ static void testlookup_unlim(struct lruhash* table, testdata_type** ref) { int num = random() % (HASHTESTMAX*10); testkey_type* key = newkey(num); struct lruhash_entry* en = lruhash_lookup(table, myhash(num), key, 0); testdata_type* data = en? (testdata_type*)en->data : NULL; if(en) { unit_assert(en->key); unit_assert(en->data); } if(0 && ref) log_info("lookup unlim %d got %d, expect %d", num, en ? data->data :-1, ref[num] ? ref[num]->data : -1); if(data && ref) { /* its okay for !data, it fell off the lru */ unit_assert( data == ref[num] ); } if(en) { lock_rw_unlock(&en->lock); } delkey(key); } /** test with long sequence of adds, removes and updates, and lookups */ static void test_long_table(struct lruhash* table) { /* assuming it all fits in the hashtable, this check will work */ testdata_type* ref[HASHTESTMAX * 100]; size_t i; memset(ref, 0, sizeof(ref)); /* test assumption */ if(0) log_info(" size %d x %d < %d", (int)test_slabhash_sizefunc(NULL, NULL), (int)HASHTESTMAX, (int)table->space_max); unit_assert( test_slabhash_sizefunc(NULL, NULL)*HASHTESTMAX < table->space_max); if(0) lruhash_status(table, "unit test", 1); srandom(48); for(i=0; i<1000; i++) { /* what to do? */ if(i == 500) { lruhash_clear(table); memset(ref, 0, sizeof(ref)); continue; } switch(random() % 4) { case 0: case 3: testadd(table, ref); break; case 1: testremove(table, ref); break; case 2: testlookup(table, ref); break; default: unit_assert(0); } if(0) lruhash_status(table, "unit test", 1); check_table(table); unit_assert( table->num <= HASHTESTMAX ); } /* test more, but 'ref' assumption does not hold anymore */ for(i=0; i<1000; i++) { /* what to do? */ switch(random() % 4) { case 0: case 3: testadd_unlim(table, ref); break; case 1: testremove_unlim(table, ref); break; case 2: testlookup_unlim(table, ref); break; default: unit_assert(0); } if(0) lruhash_status(table, "unlim", 1); check_table(table); } } /** structure to threaded test the lru hash table */ struct test_thr { /** thread num, first entry. */ int num; /** id */ ub_thread_type id; /** hash table */ struct lruhash* table; }; /** main routine for threaded hash table test */ static void* test_thr_main(void* arg) { struct test_thr* t = (struct test_thr*)arg; int i; log_thread_set(&t->num); for(i=0; i<1000; i++) { switch(random() % 4) { case 0: case 3: testadd_unlim(t->table, NULL); break; case 1: testremove_unlim(t->table, NULL); break; case 2: testlookup_unlim(t->table, NULL); break; default: unit_assert(0); } if(0) lruhash_status(t->table, "hashtest", 1); if(i % 100 == 0) /* because of locking, not all the time */ check_table(t->table); } check_table(t->table); return NULL; } /** test hash table access by multiple threads */ static void test_threaded_table(struct lruhash* table) { int numth = 10; struct test_thr t[100]; int i; for(i=1; i #include #include #include "util/log.h" #include "util/net_help.h" #include "util/config_file.h" #include "testcode/replay.h" #include "testcode/testpkts.h" #include "testcode/fake_event.h" #include "sldns/str2wire.h" /** max length of lines in file */ #define MAX_LINE_LEN 10240 /** * Expand a macro * @param store: value storage * @param runtime: replay runtime for other stuff. * @param text: the macro text, after the ${, Updated to after the } when * done (successfully). * @return expanded text, malloced. NULL on failure. */ static char* macro_expand(rbtree_type* store, struct replay_runtime* runtime, char** text); /** compare of time values */ static int timeval_smaller(const struct timeval* x, const struct timeval* y) { #ifndef S_SPLINT_S if(x->tv_sec < y->tv_sec) return 1; else if(x->tv_sec == y->tv_sec) { if(x->tv_usec <= y->tv_usec) return 1; else return 0; } else return 0; #endif } /** parse keyword in string. * @param line: if found, the line is advanced to after the keyword. * @param keyword: string. * @return: true if found, false if not. */ static int parse_keyword(char** line, const char* keyword) { size_t len = (size_t)strlen(keyword); if(strncmp(*line, keyword, len) == 0) { *line += len; return 1; } return 0; } /** delete moment */ static void replay_moment_delete(struct replay_moment* mom) { if(!mom) return; if(mom->match) { delete_entry(mom->match); } free(mom->autotrust_id); free(mom->string); free(mom->variable); config_delstrlist(mom->file_content); free(mom); } /** delete range */ static void replay_range_delete(struct replay_range* rng) { if(!rng) return; delete_entry(rng->match); free(rng); } /** strip whitespace from end of string */ static void strip_end_white(char* p) { size_t i; for(i = strlen(p); i > 0; i--) { if(isspace((unsigned char)p[i-1])) p[i-1] = 0; else return; } } /** * Read a range from file. * @param remain: Rest of line (after RANGE keyword). * @param in: file to read from. * @param name: name to print in errors. * @param pstate: read state structure with * with lineno : incremented as lines are read. * ttl, origin, prev for readentry. * @param line: line buffer. * @return: range object to add to list, or NULL on error. */ static struct replay_range* replay_range_read(char* remain, FILE* in, const char* name, struct sldns_file_parse_state* pstate, char* line) { struct replay_range* rng = (struct replay_range*)malloc( sizeof(struct replay_range)); off_t pos; char *parse; struct entry* entry, *last = NULL; if(!rng) return NULL; memset(rng, 0, sizeof(*rng)); /* read time range */ if(sscanf(remain, " %d %d", &rng->start_step, &rng->end_step)!=2) { log_err("Could not read time range: %s", line); free(rng); return NULL; } /* read entries */ pos = ftello(in); while(fgets(line, MAX_LINE_LEN-1, in)) { pstate->lineno++; parse = line; while(isspace((unsigned char)*parse)) parse++; if(!*parse || *parse == ';') { pos = ftello(in); continue; } if(parse_keyword(&parse, "ADDRESS")) { while(isspace((unsigned char)*parse)) parse++; strip_end_white(parse); if(!extstrtoaddr(parse, &rng->addr, &rng->addrlen)) { log_err("Line %d: could not read ADDRESS: %s", pstate->lineno, parse); free(rng); return NULL; } pos = ftello(in); continue; } if(parse_keyword(&parse, "RANGE_END")) { return rng; } /* set position before line; read entry */ pstate->lineno--; fseeko(in, pos, SEEK_SET); entry = read_entry(in, name, pstate, 1); if(!entry) fatal_exit("%d: bad entry", pstate->lineno); entry->next = NULL; if(last) last->next = entry; else rng->match = entry; last = entry; pos = ftello(in); } replay_range_delete(rng); return NULL; } /** Read FILE match content */ static void read_file_content(FILE* in, int* lineno, struct replay_moment* mom) { char line[MAX_LINE_LEN]; char* remain = line; struct config_strlist** last = &mom->file_content; line[MAX_LINE_LEN-1]=0; if(!fgets(line, MAX_LINE_LEN-1, in)) fatal_exit("FILE_BEGIN expected at line %d", *lineno); if(!parse_keyword(&remain, "FILE_BEGIN")) fatal_exit("FILE_BEGIN expected at line %d", *lineno); while(fgets(line, MAX_LINE_LEN-1, in)) { (*lineno)++; if(strncmp(line, "FILE_END", 8) == 0) { return; } if(line[0]) line[strlen(line)-1] = 0; /* remove newline */ if(!cfg_strlist_insert(last, strdup(line))) fatal_exit("malloc failure"); last = &( (*last)->next ); } fatal_exit("no FILE_END in input file"); } /** read assign step info */ static void read_assign_step(char* remain, struct replay_moment* mom) { char buf[1024]; char eq; int skip; buf[sizeof(buf)-1]=0; if(sscanf(remain, " %1023s %c %n", buf, &eq, &skip) != 2) fatal_exit("cannot parse assign: %s", remain); mom->variable = strdup(buf); if(eq != '=') fatal_exit("no '=' in assign: %s", remain); remain += skip; if(remain[0]) remain[strlen(remain)-1]=0; /* remove newline */ mom->string = strdup(remain); if(!mom->variable || !mom->string) fatal_exit("out of memory"); } /** * Read a replay moment 'STEP' from file. * @param remain: Rest of line (after STEP keyword). * @param in: file to read from. * @param name: name to print in errors. * @param pstate: with lineno, ttl, origin, prev for parse state. * lineno is incremented. * @return: range object to add to list, or NULL on error. */ static struct replay_moment* replay_moment_read(char* remain, FILE* in, const char* name, struct sldns_file_parse_state* pstate) { struct replay_moment* mom = (struct replay_moment*)malloc( sizeof(struct replay_moment)); int skip = 0; int readentry = 0; if(!mom) return NULL; memset(mom, 0, sizeof(*mom)); if(sscanf(remain, " %d%n", &mom->time_step, &skip) != 1) { log_err("%d: cannot read number: %s", pstate->lineno, remain); free(mom); return NULL; } remain += skip; while(isspace((unsigned char)*remain)) remain++; if(parse_keyword(&remain, "NOTHING")) { mom->evt_type = repevt_nothing; } else if(parse_keyword(&remain, "QUERY")) { mom->evt_type = repevt_front_query; readentry = 1; if(!extstrtoaddr("127.0.0.1", &mom->addr, &mom->addrlen)) fatal_exit("internal error"); } else if(parse_keyword(&remain, "CHECK_ANSWER")) { mom->evt_type = repevt_front_reply; readentry = 1; } else if(parse_keyword(&remain, "CHECK_OUT_QUERY")) { mom->evt_type = repevt_back_query; readentry = 1; } else if(parse_keyword(&remain, "REPLY")) { mom->evt_type = repevt_back_reply; readentry = 1; } else if(parse_keyword(&remain, "TIMEOUT")) { mom->evt_type = repevt_timeout; } else if(parse_keyword(&remain, "TIME_PASSES")) { mom->evt_type = repevt_time_passes; while(isspace((unsigned char)*remain)) remain++; if(parse_keyword(&remain, "EVAL")) { while(isspace((unsigned char)*remain)) remain++; mom->string = strdup(remain); if(!mom->string) fatal_exit("out of memory"); if(strlen(mom->string)>0) mom->string[strlen(mom->string)-1]=0; remain += strlen(mom->string); } } else if(parse_keyword(&remain, "CHECK_AUTOTRUST")) { mom->evt_type = repevt_autotrust_check; while(isspace((unsigned char)*remain)) remain++; if(strlen(remain)>0 && remain[strlen(remain)-1]=='\n') remain[strlen(remain)-1] = 0; mom->autotrust_id = strdup(remain); if(!mom->autotrust_id) fatal_exit("out of memory"); read_file_content(in, &pstate->lineno, mom); } else if(parse_keyword(&remain, "CHECK_TEMPFILE")) { mom->evt_type = repevt_tempfile_check; while(isspace((unsigned char)*remain)) remain++; if(strlen(remain)>0 && remain[strlen(remain)-1]=='\n') remain[strlen(remain)-1] = 0; mom->autotrust_id = strdup(remain); if(!mom->autotrust_id) fatal_exit("out of memory"); read_file_content(in, &pstate->lineno, mom); } else if(parse_keyword(&remain, "ERROR")) { mom->evt_type = repevt_error; } else if(parse_keyword(&remain, "TRAFFIC")) { mom->evt_type = repevt_traffic; } else if(parse_keyword(&remain, "ASSIGN")) { mom->evt_type = repevt_assign; read_assign_step(remain, mom); } else if(parse_keyword(&remain, "INFRA_RTT")) { char *s, *m; mom->evt_type = repevt_infra_rtt; while(isspace((unsigned char)*remain)) remain++; s = remain; remain = strchr(s, ' '); if(!remain) fatal_exit("expected three args for INFRA_RTT"); remain[0] = 0; remain++; while(isspace((unsigned char)*remain)) remain++; m = strchr(remain, ' '); if(!m) fatal_exit("expected three args for INFRA_RTT"); m[0] = 0; m++; while(isspace((unsigned char)*m)) m++; if(!extstrtoaddr(s, &mom->addr, &mom->addrlen)) fatal_exit("bad infra_rtt address %s", s); if(strlen(m)>0 && m[strlen(m)-1]=='\n') m[strlen(m)-1] = 0; mom->variable = strdup(remain); mom->string = strdup(m); if(!mom->string) fatal_exit("out of memory"); if(!mom->variable) fatal_exit("out of memory"); } else { log_err("%d: unknown event type %s", pstate->lineno, remain); free(mom); return NULL; } while(isspace((unsigned char)*remain)) remain++; if(parse_keyword(&remain, "ADDRESS")) { while(isspace((unsigned char)*remain)) remain++; if(strlen(remain) > 0) /* remove \n */ remain[strlen(remain)-1] = 0; if(!extstrtoaddr(remain, &mom->addr, &mom->addrlen)) { log_err("line %d: could not parse ADDRESS: %s", pstate->lineno, remain); free(mom); return NULL; } } if(parse_keyword(&remain, "ELAPSE")) { double sec; errno = 0; sec = strtod(remain, &remain); if(sec == 0. && errno != 0) { log_err("line %d: could not parse ELAPSE: %s (%s)", pstate->lineno, remain, strerror(errno)); free(mom); return NULL; } #ifndef S_SPLINT_S mom->elapse.tv_sec = (int)sec; mom->elapse.tv_usec = (int)((sec - (double)mom->elapse.tv_sec) *1000000. + 0.5); #endif } if(readentry) { mom->match = read_entry(in, name, pstate, 1); if(!mom->match) { free(mom); return NULL; } } return mom; } /** makes scenario with title on rest of line */ static struct replay_scenario* make_scenario(char* line) { struct replay_scenario* scen; while(isspace((unsigned char)*line)) line++; if(!*line) { log_err("scenario: no title given"); return NULL; } scen = (struct replay_scenario*)malloc(sizeof(struct replay_scenario)); if(!scen) return NULL; memset(scen, 0, sizeof(*scen)); scen->title = strdup(line); if(!scen->title) { free(scen); return NULL; } return scen; } struct replay_scenario* replay_scenario_read(FILE* in, const char* name, int* lineno) { char line[MAX_LINE_LEN]; char *parse; struct replay_scenario* scen = NULL; struct sldns_file_parse_state pstate; line[MAX_LINE_LEN-1]=0; memset(&pstate, 0, sizeof(pstate)); pstate.default_ttl = 3600; pstate.lineno = *lineno; while(fgets(line, MAX_LINE_LEN-1, in)) { parse=line; pstate.lineno++; (*lineno)++; while(isspace((unsigned char)*parse)) parse++; if(!*parse) continue; /* empty line */ if(parse_keyword(&parse, ";")) continue; /* comment */ if(parse_keyword(&parse, "SCENARIO_BEGIN")) { if(scen) fatal_exit("%d: double SCENARIO_BEGIN", *lineno); scen = make_scenario(parse); if(!scen) fatal_exit("%d: could not make scen", *lineno); continue; } if(!scen) fatal_exit("%d: expected SCENARIO", *lineno); if(parse_keyword(&parse, "RANGE_BEGIN")) { struct replay_range* newr = replay_range_read(parse, in, name, &pstate, line); if(!newr) fatal_exit("%d: bad range", pstate.lineno); *lineno = pstate.lineno; newr->next_range = scen->range_list; scen->range_list = newr; } else if(parse_keyword(&parse, "STEP")) { struct replay_moment* mom = replay_moment_read(parse, in, name, &pstate); if(!mom) fatal_exit("%d: bad moment", pstate.lineno); *lineno = pstate.lineno; if(scen->mom_last && scen->mom_last->time_step >= mom->time_step) fatal_exit("%d: time goes backwards", *lineno); if(scen->mom_last) scen->mom_last->mom_next = mom; else scen->mom_first = mom; scen->mom_last = mom; } else if(parse_keyword(&parse, "SCENARIO_END")) { struct replay_moment *p = scen->mom_first; int num = 0; while(p) { num++; p = p->mom_next; } log_info("Scenario has %d steps", num); return scen; } } log_err("scenario read failed at line %d (no SCENARIO_END?)", *lineno); replay_scenario_delete(scen); return NULL; } void replay_scenario_delete(struct replay_scenario* scen) { struct replay_moment* mom, *momn; struct replay_range* rng, *rngn; if(!scen) return; free(scen->title); mom = scen->mom_first; while(mom) { momn = mom->mom_next; replay_moment_delete(mom); mom = momn; } rng = scen->range_list; while(rng) { rngn = rng->next_range; replay_range_delete(rng); rng = rngn; } free(scen); } /** fetch oldest timer in list that is enabled */ static struct fake_timer* first_timer(struct replay_runtime* runtime) { struct fake_timer* p, *res = NULL; for(p=runtime->timer_list; p; p=p->next) { if(!p->enabled) continue; if(!res) res = p; else if(timeval_smaller(&p->tv, &res->tv)) res = p; } return res; } struct fake_timer* replay_get_oldest_timer(struct replay_runtime* runtime) { struct fake_timer* t = first_timer(runtime); if(t && timeval_smaller(&t->tv, &runtime->now_tv)) return t; return NULL; } int replay_var_compare(const void* a, const void* b) { struct replay_var* x = (struct replay_var*)a; struct replay_var* y = (struct replay_var*)b; return strcmp(x->name, y->name); } rbtree_type* macro_store_create(void) { return rbtree_create(&replay_var_compare); } /** helper function to delete macro values */ static void del_macro(rbnode_type* x, void* ATTR_UNUSED(arg)) { struct replay_var* v = (struct replay_var*)x; free(v->name); free(v->value); free(v); } void macro_store_delete(rbtree_type* store) { if(!store) return; traverse_postorder(store, del_macro, NULL); free(store); } /** return length of macro */ static size_t macro_length(char* text) { /* we are after ${, looking for } */ int depth = 0; size_t len = 0; while(*text) { len++; if(*text == '}') { if(depth == 0) break; depth--; } else if(text[0] == '$' && text[1] == '{') { depth++; } text++; } return len; } /** insert new stuff at start of buffer */ static int do_buf_insert(char* buf, size_t remain, char* after, char* inserted) { char* save = strdup(after); size_t len; if(!save) return 0; if(strlen(inserted) > remain) { free(save); return 0; } len = strlcpy(buf, inserted, remain); buf += len; remain -= len; (void)strlcpy(buf, save, remain); free(save); return 1; } /** do macro recursion */ static char* do_macro_recursion(rbtree_type* store, struct replay_runtime* runtime, char* at, size_t remain) { char* after = at+2; char* expand = macro_expand(store, runtime, &after); if(!expand) return NULL; /* expansion failed */ if(!do_buf_insert(at, remain, after, expand)) { free(expand); return NULL; } free(expand); return at; /* and parse over the expanded text to see if again */ } /** get var from store */ static struct replay_var* macro_getvar(rbtree_type* store, char* name) { struct replay_var k; k.node.key = &k; k.name = name; return (struct replay_var*)rbtree_search(store, &k); } /** do macro variable */ static char* do_macro_variable(rbtree_type* store, char* buf, size_t remain) { struct replay_var* v; char* at = buf+1; char* name = at; char sv; if(at[0]==0) return NULL; /* no variable name after $ */ while(*at && (isalnum((unsigned char)*at) || *at=='_')) { at++; } /* terminator, we are working in macro_expand() buffer */ sv = *at; *at = 0; v = macro_getvar(store, name); *at = sv; if(!v) { log_err("variable is not defined: $%s", name); return NULL; /* variable undefined is error for now */ } /* insert the variable contents */ if(!do_buf_insert(buf, remain, at, v->value)) return NULL; return buf; /* and expand the variable contents */ } /** do ctime macro on argument */ static char* do_macro_ctime(char* arg) { char buf[32]; time_t tt = (time_t)atoi(arg); if(tt == 0 && strcmp(arg, "0") != 0) { log_err("macro ctime: expected number, not: %s", arg); return NULL; } ctime_r(&tt, buf); if(buf[0]) buf[strlen(buf)-1]=0; /* remove trailing newline */ return strdup(buf); } /** perform arithmetic operator */ static double perform_arith(double x, char op, double y, double* res) { switch(op) { case '+': *res = x+y; break; case '-': *res = x-y; break; case '/': *res = x/y; break; case '*': *res = x*y; break; default: *res = 0; return 0; } return 1; } /** do macro arithmetic on two numbers and operand */ static char* do_macro_arith(char* orig, size_t remain, char** arithstart) { double x, y, result; char operator; int skip; char buf[32]; char* at; /* not yet done? we want number operand number expanded first. */ if(!*arithstart) { /* remember start pos of expr, skip the first number */ at = orig; *arithstart = at; while(*at && (isdigit((unsigned char)*at) || *at == '.')) at++; return at; } /* move back to start */ remain += (size_t)(orig - *arithstart); at = *arithstart; /* parse operands */ if(sscanf(at, " %lf %c %lf%n", &x, &operator, &y, &skip) != 3) { *arithstart = NULL; return do_macro_arith(orig, remain, arithstart); } if(isdigit((unsigned char)operator)) { *arithstart = orig; return at+skip; /* do nothing, but setup for later number */ } /* calculate result */ if(!perform_arith(x, operator, y, &result)) { log_err("unknown operator: %s", at); return NULL; } /* put result back in buffer */ snprintf(buf, sizeof(buf), "%.12g", result); if(!do_buf_insert(at, remain, at+skip, buf)) return NULL; /* the result can be part of another expression, restart that */ *arithstart = NULL; return at; } /** Do range macro on expanded buffer */ static char* do_macro_range(char* buf) { double x, y, z; if(sscanf(buf, " %lf %lf %lf", &x, &y, &z) != 3) { log_err("range func requires 3 args: %s", buf); return NULL; } if(x <= y && y <= z) { char res[1024]; snprintf(res, sizeof(res), "%.24g", y); return strdup(res); } fatal_exit("value %.24g not in range [%.24g, %.24g]", y, x, z); return NULL; } static char* macro_expand(rbtree_type* store, struct replay_runtime* runtime, char** text) { char buf[10240]; char* at = *text; size_t len = macro_length(at); int dofunc = 0; char* arithstart = NULL; if(len >= sizeof(buf)) return NULL; /* too long */ buf[0] = 0; (void)strlcpy(buf, at, len+1-1); /* do not copy last '}' character */ at = buf; /* check for functions */ if(strcmp(buf, "time") == 0) { if(runtime) snprintf(buf, sizeof(buf), ARG_LL "d", (long long)runtime->now_secs); else snprintf(buf, sizeof(buf), ARG_LL "d", (long long)0); *text += len; return strdup(buf); } else if(strcmp(buf, "timeout") == 0) { time_t res = 0; if(runtime) { struct fake_timer* t = first_timer(runtime); if(t && (time_t)t->tv.tv_sec >= runtime->now_secs) res = (time_t)t->tv.tv_sec - runtime->now_secs; } snprintf(buf, sizeof(buf), ARG_LL "d", (long long)res); *text += len; return strdup(buf); } else if(strncmp(buf, "ctime ", 6) == 0 || strncmp(buf, "ctime\t", 6) == 0) { at += 6; dofunc = 1; } else if(strncmp(buf, "range ", 6) == 0 || strncmp(buf, "range\t", 6) == 0) { at += 6; dofunc = 1; } /* actual macro text expansion */ while(*at) { size_t remain = sizeof(buf)-strlen(buf); if(strncmp(at, "${", 2) == 0) { at = do_macro_recursion(store, runtime, at, remain); } else if(*at == '$') { at = do_macro_variable(store, at, remain); } else if(isdigit((unsigned char)*at)) { at = do_macro_arith(at, remain, &arithstart); } else { /* copy until whitespace or operator */ if(*at && (isalnum((unsigned char)*at) || *at=='_')) { at++; while(*at && (isalnum((unsigned char)*at) || *at=='_')) at++; } else at++; } if(!at) return NULL; /* failure */ } *text += len; if(dofunc) { /* post process functions, buf has the argument(s) */ if(strncmp(buf, "ctime", 5) == 0) { return do_macro_ctime(buf+6); } else if(strncmp(buf, "range", 5) == 0) { return do_macro_range(buf+6); } } return strdup(buf); } char* macro_process(rbtree_type* store, struct replay_runtime* runtime, char* text) { char buf[10240]; char* next, *expand; char* at = text; if(!strstr(text, "${")) return strdup(text); /* no macros */ buf[0] = 0; buf[sizeof(buf)-1]=0; while( (next=strstr(at, "${")) ) { /* copy text before next macro */ if((size_t)(next-at) >= sizeof(buf)-strlen(buf)) return NULL; /* string too long */ (void)strlcpy(buf+strlen(buf), at, (size_t)(next-at+1)); /* process the macro itself */ next += 2; expand = macro_expand(store, runtime, &next); if(!expand) return NULL; /* expansion failed */ (void)strlcpy(buf+strlen(buf), expand, sizeof(buf)-strlen(buf)); free(expand); at = next; } /* copy remainder fixed text */ (void)strlcpy(buf+strlen(buf), at, sizeof(buf)-strlen(buf)); return strdup(buf); } char* macro_lookup(rbtree_type* store, char* name) { struct replay_var* x = macro_getvar(store, name); if(!x) return strdup(""); return strdup(x->value); } void macro_print_debug(rbtree_type* store) { struct replay_var* x; RBTREE_FOR(x, struct replay_var*, store) { log_info("%s = %s", x->name, x->value); } } int macro_assign(rbtree_type* store, char* name, char* value) { struct replay_var* x = macro_getvar(store, name); if(x) { free(x->value); } else { x = (struct replay_var*)malloc(sizeof(*x)); if(!x) return 0; x->node.key = x; x->name = strdup(name); if(!x->name) { free(x); return 0; } (void)rbtree_insert(store, &x->node); } x->value = strdup(value); return x->value != NULL; } /* testbound assert function for selftest. counts the number of tests */ #define tb_assert(x) \ do { if(!(x)) fatal_exit("%s:%d: %s: assertion %s failed", \ __FILE__, __LINE__, __func__, #x); \ num_asserts++; \ } while(0); void testbound_selftest(void) { /* test the macro store */ rbtree_type* store = macro_store_create(); char* v; int r; int num_asserts = 0; tb_assert(store); v = macro_lookup(store, "bla"); tb_assert(strcmp(v, "") == 0); free(v); v = macro_lookup(store, "vlerk"); tb_assert(strcmp(v, "") == 0); free(v); r = macro_assign(store, "bla", "waarde1"); tb_assert(r); v = macro_lookup(store, "vlerk"); tb_assert(strcmp(v, "") == 0); free(v); v = macro_lookup(store, "bla"); tb_assert(strcmp(v, "waarde1") == 0); free(v); r = macro_assign(store, "vlerk", "kanteel"); tb_assert(r); v = macro_lookup(store, "bla"); tb_assert(strcmp(v, "waarde1") == 0); free(v); v = macro_lookup(store, "vlerk"); tb_assert(strcmp(v, "kanteel") == 0); free(v); r = macro_assign(store, "bla", "ww"); tb_assert(r); v = macro_lookup(store, "bla"); tb_assert(strcmp(v, "ww") == 0); free(v); tb_assert( macro_length("}") == 1); tb_assert( macro_length("blabla}") == 7); tb_assert( macro_length("bla${zoink}bla}") == 7+8); tb_assert( macro_length("bla${zoink}${bla}bla}") == 7+8+6); v = macro_process(store, NULL, ""); tb_assert( v && strcmp(v, "") == 0); free(v); v = macro_process(store, NULL, "${}"); tb_assert( v && strcmp(v, "") == 0); free(v); v = macro_process(store, NULL, "blabla ${} dinges"); tb_assert( v && strcmp(v, "blabla dinges") == 0); free(v); v = macro_process(store, NULL, "1${$bla}2${$bla}3"); tb_assert( v && strcmp(v, "1ww2ww3") == 0); free(v); v = macro_process(store, NULL, "it is ${ctime 123456}"); tb_assert( v && strcmp(v, "it is Fri Jan 2 10:17:36 1970") == 0); free(v); r = macro_assign(store, "t1", "123456"); tb_assert(r); v = macro_process(store, NULL, "it is ${ctime ${$t1}}"); tb_assert( v && strcmp(v, "it is Fri Jan 2 10:17:36 1970") == 0); free(v); v = macro_process(store, NULL, "it is ${ctime $t1}"); tb_assert( v && strcmp(v, "it is Fri Jan 2 10:17:36 1970") == 0); free(v); r = macro_assign(store, "x", "1"); tb_assert(r); r = macro_assign(store, "y", "2"); tb_assert(r); v = macro_process(store, NULL, "${$x + $x}"); tb_assert( v && strcmp(v, "2") == 0); free(v); v = macro_process(store, NULL, "${$x - $x}"); tb_assert( v && strcmp(v, "0") == 0); free(v); v = macro_process(store, NULL, "${$y * $y}"); tb_assert( v && strcmp(v, "4") == 0); free(v); v = macro_process(store, NULL, "${32 / $y + $x + $y}"); tb_assert( v && strcmp(v, "19") == 0); free(v); v = macro_process(store, NULL, "${32 / ${$y+$y} + ${${100*3}/3}}"); tb_assert( v && strcmp(v, "108") == 0); free(v); v = macro_process(store, NULL, "${1 2 33 2 1}"); tb_assert( v && strcmp(v, "1 2 33 2 1") == 0); free(v); v = macro_process(store, NULL, "${123 3 + 5}"); tb_assert( v && strcmp(v, "123 8") == 0); free(v); v = macro_process(store, NULL, "${123 glug 3 + 5}"); tb_assert( v && strcmp(v, "123 glug 8") == 0); free(v); macro_store_delete(store); printf("selftest successful (%d checks).\n", num_asserts); } unbound-1.13.1/testcode/unitslabhash.c0000644000175000017500000002411614010434640017346 0ustar wouterwouter/* * testcode/unitslabhash.c - unit test for slabhash table. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Tests the locking LRU keeping hash table implementation. */ #include "config.h" #include "testcode/unitmain.h" #include "util/log.h" #include "util/storage/slabhash.h" /** use this type for the slabhash test key */ typedef struct slabhash_testkey testkey_type; /** use this type for the slabhash test data */ typedef struct slabhash_testdata testdata_type; /** delete key */ static void delkey(struct slabhash_testkey* k) { lock_rw_destroy(&k->entry.lock); free(k);} /** hash func, very bad to improve collisions, both high and low bits */ static hashvalue_type myhash(int id) { hashvalue_type h = (hashvalue_type)id & 0x0f; h |= (h << 28); return h; } /** allocate new key, fill in hash */ static testkey_type* newkey(int id) { testkey_type* k = (testkey_type*)calloc(1, sizeof(testkey_type)); if(!k) fatal_exit("out of memory"); k->id = id; k->entry.hash = myhash(id); k->entry.key = k; lock_rw_init(&k->entry.lock); return k; } /** new data el */ static testdata_type* newdata(int val) { testdata_type* d = (testdata_type*)calloc(1, sizeof(testdata_type)); if(!d) fatal_exit("out of memory"); d->data = val; return d; } /** test hashtable using short sequence */ static void test_short_table(struct slabhash* table) { testkey_type* k = newkey(12); testkey_type* k2 = newkey(14); testdata_type* d = newdata(128); testdata_type* d2 = newdata(129); k->entry.data = d; k2->entry.data = d2; slabhash_insert(table, myhash(12), &k->entry, d, NULL); slabhash_insert(table, myhash(14), &k2->entry, d2, NULL); unit_assert( slabhash_lookup(table, myhash(12), k, 0) == &k->entry); lock_rw_unlock( &k->entry.lock ); unit_assert( slabhash_lookup(table, myhash(14), k2, 0) == &k2->entry); lock_rw_unlock( &k2->entry.lock ); slabhash_remove(table, myhash(12), k); slabhash_remove(table, myhash(14), k2); } /** number of hash test max */ #define HASHTESTMAX 32 /** test adding a random element */ static void testadd(struct slabhash* table, testdata_type* ref[]) { int numtoadd = random() % HASHTESTMAX; testdata_type* data = newdata(numtoadd); testkey_type* key = newkey(numtoadd); key->entry.data = data; slabhash_insert(table, myhash(numtoadd), &key->entry, data, NULL); ref[numtoadd] = data; } /** test adding a random element */ static void testremove(struct slabhash* table, testdata_type* ref[]) { int num = random() % HASHTESTMAX; testkey_type* key = newkey(num); slabhash_remove(table, myhash(num), key); ref[num] = NULL; delkey(key); } /** test adding a random element */ static void testlookup(struct slabhash* table, testdata_type* ref[]) { int num = random() % HASHTESTMAX; testkey_type* key = newkey(num); struct lruhash_entry* en = slabhash_lookup(table, myhash(num), key, 0); testdata_type* data = en? (testdata_type*)en->data : NULL; if(en) { unit_assert(en->key); unit_assert(en->data); } if(0) log_info("lookup %d got %d, expect %d", num, en? data->data :-1, ref[num]? ref[num]->data : -1); unit_assert( data == ref[num] ); if(en) { lock_rw_unlock(&en->lock); } delkey(key); } /** check integrity of hash table */ static void check_lru_table(struct lruhash* table) { struct lruhash_entry* p; size_t c = 0; lock_quick_lock(&table->lock); unit_assert( table->num <= table->size); unit_assert( table->size_mask == (int)table->size-1 ); unit_assert( (table->lru_start && table->lru_end) || (!table->lru_start && !table->lru_end) ); unit_assert( table->space_used <= table->space_max ); /* check lru list integrity */ if(table->lru_start) unit_assert(table->lru_start->lru_prev == NULL); if(table->lru_end) unit_assert(table->lru_end->lru_next == NULL); p = table->lru_start; while(p) { if(p->lru_prev) { unit_assert(p->lru_prev->lru_next == p); } if(p->lru_next) { unit_assert(p->lru_next->lru_prev == p); } c++; p = p->lru_next; } unit_assert(c == table->num); /* this assertion is specific to the unit test */ unit_assert( table->space_used == table->num * test_slabhash_sizefunc(NULL, NULL) ); lock_quick_unlock(&table->lock); } /** check integrity of hash table */ static void check_table(struct slabhash* table) { size_t i; for(i=0; isize; i++) check_lru_table(table->array[i]); } /** test adding a random element (unlimited range) */ static void testadd_unlim(struct slabhash* table, testdata_type** ref) { int numtoadd = random() % (HASHTESTMAX * 10); testdata_type* data = newdata(numtoadd); testkey_type* key = newkey(numtoadd); key->entry.data = data; slabhash_insert(table, myhash(numtoadd), &key->entry, data, NULL); if(ref) ref[numtoadd] = data; } /** test adding a random element (unlimited range) */ static void testremove_unlim(struct slabhash* table, testdata_type** ref) { int num = random() % (HASHTESTMAX*10); testkey_type* key = newkey(num); slabhash_remove(table, myhash(num), key); if(ref) ref[num] = NULL; delkey(key); } /** test adding a random element (unlimited range) */ static void testlookup_unlim(struct slabhash* table, testdata_type** ref) { int num = random() % (HASHTESTMAX*10); testkey_type* key = newkey(num); struct lruhash_entry* en = slabhash_lookup(table, myhash(num), key, 0); testdata_type* data = en? (testdata_type*)en->data : NULL; if(en) { unit_assert(en->key); unit_assert(en->data); } if(0 && ref) log_info("lookup unlim %d got %d, expect %d", num, en ? data->data :-1, ref[num] ? ref[num]->data : -1); if(data && ref) { /* its okay for !data, it fell off the lru */ unit_assert( data == ref[num] ); } if(en) { lock_rw_unlock(&en->lock); } delkey(key); } /** test with long sequence of adds, removes and updates, and lookups */ static void test_long_table(struct slabhash* table) { /* assuming it all fits in the hashtable, this check will work */ testdata_type* ref[HASHTESTMAX * 100]; size_t i; memset(ref, 0, sizeof(ref)); /* test assumption */ if(0) slabhash_status(table, "unit test", 1); srandom(48); for(i=0; i<1000; i++) { /* what to do? */ if(i == 500) { slabhash_clear(table); memset(ref, 0, sizeof(ref)); continue; } switch(random() % 4) { case 0: case 3: testadd(table, ref); break; case 1: testremove(table, ref); break; case 2: testlookup(table, ref); break; default: unit_assert(0); } if(0) slabhash_status(table, "unit test", 1); check_table(table); } /* test more, but 'ref' assumption does not hold anymore */ for(i=0; i<1000; i++) { /* what to do? */ switch(random() % 4) { case 0: case 3: testadd_unlim(table, ref); break; case 1: testremove_unlim(table, ref); break; case 2: testlookup_unlim(table, ref); break; default: unit_assert(0); } if(0) slabhash_status(table, "unlim", 1); check_table(table); } } /** structure to threaded test the lru hash table */ struct slab_test_thr { /** thread num, first entry. */ int num; /** id */ ub_thread_type id; /** hash table */ struct slabhash* table; }; /** main routine for threaded hash table test */ static void* test_thr_main(void* arg) { struct slab_test_thr* t = (struct slab_test_thr*)arg; int i; log_thread_set(&t->num); for(i=0; i<1000; i++) { switch(random() % 4) { case 0: case 3: testadd_unlim(t->table, NULL); break; case 1: testremove_unlim(t->table, NULL); break; case 2: testlookup_unlim(t->table, NULL); break; default: unit_assert(0); } if(0) slabhash_status(t->table, "hashtest", 1); if(i % 100 == 0) /* because of locking, not all the time */ check_table(t->table); } check_table(t->table); return NULL; } /** test hash table access by multiple threads */ static void test_threaded_table(struct slabhash* table) { int numth = 10; struct slab_test_thr t[100]; int i; for(i=1; i .done-`basename $2 .tdir` exit 0 fi if test "$1" = "-f" && test "$2" = "report"; then echo "Minitdir Long Report" pass=0 fail=0 skip=0 echo " STATUS ELAPSED TESTNAME TESTDESCRIPTION" for result in *.tdir; do name=`basename $result .tdir` timelen=" " desc="" if test -f "result.$name"; then timestart=`grep ^DateRunStart: "result.$name" | sed -e 's/DateRunStart: //'` timeend=`grep ^DateRunEnd: "result.$name" | sed -e 's/DateRunEnd: //'` timesec=`expr $timeend - $timestart` timelen=`printf %4ds $timesec` if test $? -ne 0; then timelen="$timesec""s" fi desc=`grep ^Description: "result.$name" | sed -e 's/Description: //'` fi if test -f ".done-$name"; then if test "$1" != "-q"; then echo "** PASSED ** $timelen $name: $desc" pass=`expr $pass + 1` fi else if test -f "result.$name"; then echo "!! FAILED !! $timelen $name: $desc" fail=`expr $fail + 1` else echo ".> SKIPPED<< $timelen $name: $desc" skip=`expr $skip + 1` fi fi done echo "" if test "$skip" = "0"; then echo "$pass pass, $fail fail" else echo "$pass pass, $fail fail, $skip skip" fi echo "" exit 0 fi if test "$1" = "report" || test "$2" = "report"; then echo "Minitdir Report" for result in *.tdir; do name=`basename $result .tdir` if test -f ".done-$name"; then if test "$1" != "-q"; then echo "** PASSED ** : $name" fi else if test -f "result.$name"; then echo "!! FAILED !! : $name" else echo ">> SKIPPED<< : $name" fi fi done exit 0 fi if test "$1" != 'exe'; then # usage echo "mini tdir. Reduced functionality for old shells." echo " tdir exe " echo " tdir fake " echo " tdir clean" echo " tdir [-q|-f] report" exit 1 fi shift # do not execute if the disk is too full #DISKLIMIT=100000 # This check is not portable (to Solaris 10). #avail=`df . | tail -1 | awk '{print $4}'` #if test "$avail" -lt "$DISKLIMIT"; then #echo "minitdir: The disk is too full! Only $avail." #exit 1 #fi name=`basename $1 .tdir` dir=$name.$$ result=result.$name done=.done-$name success="no" if test -x "`which bash`"; then shell="bash" else shell="sh" fi # check already done if test -f .done-$name; then echo "minitdir .done-$name exists. skip test." exit 0 fi # Copy echo "minitdir copy $1 to $dir" mkdir $dir if cp --help 2>&1 | grep -- "-a" >/dev/null; then cp -a $name.tdir/* $dir/ else cp -R $name.tdir/* $dir/ fi cd $dir # EXE echo "minitdir exe $name" > $result grep "Description:" $name.dsc >> $result 2>&1 echo "DateRunStart: "`date "+%s" 2>/dev/null` >> $result if test -f $name.pre; then echo "minitdir exe $name.pre" echo "minitdir exe $name.pre" >> $result $shell $name.pre $args >> $result if test $? -ne 0; then echo "Warning: $name.pre did not exit successfully" fi fi if test -f $name.test; then echo "minitdir exe $name.test" echo "minitdir exe $name.test" >> $result $shell $name.test $args >>$result 2>&1 if test $? -ne 0; then echo "$name: FAILED" >> $result echo "$name: FAILED" success="no" else echo "$name: PASSED" >> $result echo "$name: PASSED" > ../.done-$name echo "$name: PASSED" success="yes" fi fi if test -f $name.post; then echo "minitdir exe $name.post" echo "minitdir exe $name.post" >> $result $shell $name.post $args >> $result if test $? -ne 0; then echo "Warning: $name.post did not exit successfully" fi fi echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result mv $result .. cd .. rm -rf $dir # compat for windows where deletion may not succeed initially (files locked # by processes that still have to exit). if test $? -eq 1; then echo "minitdir waiting for processes to terminate" sleep 2 # some time to exit, and try again rm -rf $dir fi unbound-1.13.1/testcode/fake_event.c0000644000175000017500000015102314010434640016766 0ustar wouterwouter/* * testcode/fake_event.c - fake event handling that replays existing scenario. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Event service that replays a scenario. * This implements the same exported symbols as the files: * util/netevent.c * services/listen_dnsport.c * services/outside_network.c * But these do not actually access the network or events, instead * the scenario is played. */ #include "config.h" #include "testcode/fake_event.h" #include "util/netevent.h" #include "util/net_help.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/msgencode.h" #include "util/data/dname.h" #include "util/edns.h" #include "util/config_file.h" #include "services/listen_dnsport.h" #include "services/outside_network.h" #include "services/cache/infra.h" #include "testcode/replay.h" #include "testcode/testpkts.h" #include "util/log.h" #include "util/fptr_wlist.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" #include "daemon/remote.h" #include struct worker; struct daemon_remote; /** unique code to check that fake_commpoint is that structure */ #define FAKE_COMMPOINT_TYPECODE 97347923 /** fake commpoint, stores information */ struct fake_commpoint { /** typecode */ int typecode; /** if this is a udp outgoing type of commpoint */ int type_udp_out; /** if this is a tcp outgoing type of commpoint */ int type_tcp_out; /** if this is a http outgoing type of commpoint. */ int type_http_out; /** the callback, stored for usage */ comm_point_callback_type* cb; /** the callback userarg, stored for usage */ void* cb_arg; /** runtime ptr */ struct replay_runtime* runtime; /** the pending entry for this commpoint (if any) */ struct fake_pending* pending; }; /** Global variable: the scenario. Saved here for when event_init is done. */ static struct replay_scenario* saved_scenario = NULL; /** add timers and the values do not overflow or become negative */ static void timeval_add(struct timeval* d, const struct timeval* add) { #ifndef S_SPLINT_S d->tv_sec += add->tv_sec; d->tv_usec += add->tv_usec; if(d->tv_usec >= 1000000) { d->tv_usec -= 1000000; d->tv_sec++; } #endif } void fake_temp_file(const char* adj, const char* id, char* buf, size_t len) { #ifdef USE_WINSOCK snprintf(buf, len, "testbound_%u%s%s.tmp", (unsigned)getpid(), adj, id); #else snprintf(buf, len, "/tmp/testbound_%u%s%s.tmp", (unsigned)getpid(), adj, id); #endif } void fake_event_init(struct replay_scenario* scen) { saved_scenario = scen; } void fake_event_cleanup(void) { replay_scenario_delete(saved_scenario); saved_scenario = NULL; } /** helper function that logs a sldns_pkt packet to logfile */ static void log_pkt(const char* desc, uint8_t* pkt, size_t len) { char* str = sldns_wire2str_pkt(pkt, len); if(!str) fatal_exit("%s: (failed out of memory wire2str_pkt)", desc); else { log_info("%s%s", desc, str); free(str); } } /** * Returns a string describing the event type. */ static const char* repevt_string(enum replay_event_type t) { switch(t) { case repevt_nothing: return "NOTHING"; case repevt_front_query: return "QUERY"; case repevt_front_reply: return "CHECK_ANSWER"; case repevt_timeout: return "TIMEOUT"; case repevt_time_passes: return "TIME_PASSES"; case repevt_back_reply: return "REPLY"; case repevt_back_query: return "CHECK_OUT_QUERY"; case repevt_autotrust_check: return "CHECK_AUTOTRUST"; case repevt_tempfile_check: return "CHECK_TEMPFILE"; case repevt_error: return "ERROR"; case repevt_assign: return "ASSIGN"; case repevt_traffic: return "TRAFFIC"; case repevt_infra_rtt: return "INFRA_RTT"; default: return "UNKNOWN"; } } /** delete a fake pending */ static void delete_fake_pending(struct fake_pending* pend) { if(!pend) return; free(pend->zone); sldns_buffer_free(pend->buffer); free(pend->pkt); free(pend); } /** delete a replay answer */ static void delete_replay_answer(struct replay_answer* a) { if(!a) return; if(a->repinfo.c) { sldns_buffer_free(a->repinfo.c->buffer); free(a->repinfo.c); } free(a->pkt); free(a); } /** * return: true if pending query matches the now event. */ static int pending_matches_current(struct replay_runtime* runtime, struct entry** entry, struct fake_pending **pend) { struct fake_pending* p; struct entry* e; if(!runtime->now || runtime->now->evt_type != repevt_back_query || !runtime->pending_list) return 0; /* see if any of the pending queries matches */ for(p = runtime->pending_list; p; p = p->next) { if(runtime->now->addrlen != 0 && sockaddr_cmp(&p->addr, p->addrlen, &runtime->now->addr, runtime->now->addrlen) != 0) continue; if((e=find_match(runtime->now->match, p->pkt, p->pkt_len, p->transport))) { *entry = e; *pend = p; return 1; } } return 0; } /** * Find the range that matches this pending message. * @param runtime: runtime with current moment, and range list. * @param entry: returns the pointer to entry that matches. * @param pend: the pending that the entry must match. * @return: true if a match is found. */ static int pending_find_match(struct replay_runtime* runtime, struct entry** entry, struct fake_pending* pend) { int timenow = runtime->now->time_step; struct replay_range* p = runtime->scenario->range_list; while(p) { if(p->start_step <= timenow && timenow <= p->end_step && (p->addrlen == 0 || sockaddr_cmp(&p->addr, p->addrlen, &pend->addr, pend->addrlen) == 0) && (*entry = find_match(p->match, pend->pkt, pend->pkt_len, pend->transport))) { log_info("matched query time %d in range [%d, %d] " "with entry line %d", timenow, p->start_step, p->end_step, (*entry)->lineno); if(p->addrlen != 0) log_addr(0, "matched ip", &p->addr, p->addrlen); log_pkt("matched pkt: ", (*entry)->reply_list->reply_pkt, (*entry)->reply_list->reply_len); return 1; } p = p->next_range; } return 0; } /** * See if outgoing pending query matches an entry. * @param runtime: runtime. * @param entry: if true, the entry that matches is returned. * @param pend: if true, the outgoing message that matches is returned. * @return: true if pending query matches the now event. */ static int pending_matches_range(struct replay_runtime* runtime, struct entry** entry, struct fake_pending** pend) { struct fake_pending* p = runtime->pending_list; /* slow, O(N*N), but it works as advertised with weird matching */ while(p) { if(p->tcp_pkt_counter != 0) { /* continue tcp transfer */ *pend = p; return 1; } if(pending_find_match(runtime, entry, p)) { *pend = p; return 1; } p = p->next; } return 0; } /** * Remove the item from the pending list. */ static void pending_list_delete(struct replay_runtime* runtime, struct fake_pending* pend) { struct fake_pending** prev = &runtime->pending_list; struct fake_pending* p = runtime->pending_list; while(p) { if(p == pend) { *prev = p->next; delete_fake_pending(pend); return; } prev = &p->next; p = p->next; } } /** number of replies in entry */ static int count_reply_packets(struct entry* entry) { int count = 0; struct reply_packet* reppkt = entry->reply_list; while(reppkt) { count++; reppkt = reppkt->next; } return count; } /** * Fill buffer with reply from the entry. */ static void fill_buffer_with_reply(sldns_buffer* buffer, struct entry* entry, uint8_t* q, size_t qlen, int tcp_pkt_counter) { struct reply_packet* reppkt; uint8_t* c; size_t clen; log_assert(entry && entry->reply_list); sldns_buffer_clear(buffer); reppkt = entry->reply_list; if(tcp_pkt_counter > 0) { int i = tcp_pkt_counter; while(reppkt && i--) reppkt = reppkt->next; if(!reppkt) fatal_exit("extra packet read from TCP stream but none is available"); log_pkt("extra_packet ", reppkt->reply_pkt, reppkt->reply_len); } if(reppkt->reply_from_hex) { c = sldns_buffer_begin(reppkt->reply_from_hex); clen = sldns_buffer_limit(reppkt->reply_from_hex); if(!c) fatal_exit("out of memory"); } else { c = reppkt->reply_pkt; clen = reppkt->reply_len; } if(c) { if(q) adjust_packet(entry, &c, &clen, q, qlen); sldns_buffer_write(buffer, c, clen); if(q) free(c); } sldns_buffer_flip(buffer); } /** * Perform range entry on pending message. * @param runtime: runtime buffer size preference. * @param entry: entry that codes for the reply to do. * @param pend: pending query that is answered, callback called. */ static void answer_callback_from_entry(struct replay_runtime* runtime, struct entry* entry, struct fake_pending* pend) { struct comm_point c; struct comm_reply repinfo; void* cb_arg = pend->cb_arg; comm_point_callback_type* cb = pend->callback; memset(&c, 0, sizeof(c)); c.fd = -1; c.buffer = sldns_buffer_new(runtime->bufsize); c.type = comm_udp; if(pend->transport == transport_tcp) { c.type = comm_tcp; c.tcp_timeout_msec = 30000; c.tcp_keepalive = runtime->tcp_seen_keepalive; } fill_buffer_with_reply(c.buffer, entry, pend->pkt, pend->pkt_len, pend->tcp_pkt_counter); repinfo.c = &c; repinfo.addrlen = pend->addrlen; memcpy(&repinfo.addr, &pend->addr, pend->addrlen); if(!pend->serviced) { if(entry && entry->reply_list->next && pend->tcp_pkt_counter < count_reply_packets(entry)) { /* go to next packet next time */ pend->tcp_pkt_counter++; } else { pending_list_delete(runtime, pend); } } if((*cb)(&c, cb_arg, NETEVENT_NOERROR, &repinfo)) { fatal_exit("testbound: unexpected: callback returned 1"); } sldns_buffer_free(c.buffer); } /** Check the now moment answer check event */ static void answer_check_it(struct replay_runtime* runtime) { struct replay_answer* ans = runtime->answer_list, *prev = NULL; log_assert(runtime && runtime->now && runtime->now->evt_type == repevt_front_reply); while(ans) { enum transport_type tr = transport_tcp; if(ans->repinfo.c->type == comm_udp) tr = transport_udp; if((runtime->now->addrlen == 0 || sockaddr_cmp( &runtime->now->addr, runtime->now->addrlen, &ans->repinfo.addr, ans->repinfo.addrlen) == 0) && find_match(runtime->now->match, ans->pkt, ans->pkt_len, tr)) { log_info("testbound matched event entry from line %d", runtime->now->match->lineno); log_info("testbound: do STEP %d %s", runtime->now->time_step, repevt_string(runtime->now->evt_type)); if(prev) prev->next = ans->next; else runtime->answer_list = ans->next; if(!ans->next) runtime->answer_last = prev; if(ans->repinfo.c->tcp_keepalive) runtime->tcp_seen_keepalive = 1; delete_replay_answer(ans); return; } else { prev = ans; ans = ans->next; } } log_info("testbound: do STEP %d %s", runtime->now->time_step, repevt_string(runtime->now->evt_type)); fatal_exit("testbound: not matched"); } /** * Create commpoint (as return address) for a fake incoming query. */ static void fake_front_query(struct replay_runtime* runtime, struct replay_moment *todo) { struct comm_reply repinfo; memset(&repinfo, 0, sizeof(repinfo)); repinfo.c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); repinfo.addrlen = (socklen_t)sizeof(struct sockaddr_in); if(todo->addrlen != 0) { repinfo.addrlen = todo->addrlen; memcpy(&repinfo.addr, &todo->addr, todo->addrlen); } repinfo.c->fd = -1; repinfo.c->ev = (struct internal_event*)runtime; repinfo.c->buffer = sldns_buffer_new(runtime->bufsize); if(todo->match->match_transport == transport_tcp) { repinfo.c->type = comm_tcp; repinfo.c->tcp_timeout_msec = 30000; repinfo.c->tcp_keepalive = runtime->tcp_seen_keepalive; } else repinfo.c->type = comm_udp; fill_buffer_with_reply(repinfo.c->buffer, todo->match, NULL, 0, 0); log_info("testbound: incoming QUERY"); log_pkt("query pkt", todo->match->reply_list->reply_pkt, todo->match->reply_list->reply_len); /* call the callback for incoming queries */ if((*runtime->callback_query)(repinfo.c, runtime->cb_arg, NETEVENT_NOERROR, &repinfo)) { /* send immediate reply */ comm_point_send_reply(&repinfo); } /* clear it again, in case copy not done properly */ memset(&repinfo, 0, sizeof(repinfo)); } /** * Perform callback for fake pending message. */ static void fake_pending_callback(struct replay_runtime* runtime, struct replay_moment* todo, int error) { struct fake_pending* p = runtime->pending_list; struct comm_reply repinfo; struct comm_point c; void* cb_arg; comm_point_callback_type* cb; memset(&c, 0, sizeof(c)); if(!p) fatal_exit("No pending queries."); cb_arg = p->cb_arg; cb = p->callback; c.buffer = sldns_buffer_new(runtime->bufsize); c.type = comm_udp; if(p->transport == transport_tcp) { c.type = comm_tcp; c.tcp_timeout_msec = 30000; c.tcp_keepalive = runtime->tcp_seen_keepalive; } if(todo->evt_type == repevt_back_reply && todo->match) { fill_buffer_with_reply(c.buffer, todo->match, p->pkt, p->pkt_len, p->tcp_pkt_counter); } repinfo.c = &c; repinfo.addrlen = p->addrlen; memcpy(&repinfo.addr, &p->addr, p->addrlen); if(!p->serviced) { if(todo->match && todo->match->reply_list->next && !error && p->tcp_pkt_counter < count_reply_packets(todo->match)) { /* go to next packet next time */ p->tcp_pkt_counter++; } else { pending_list_delete(runtime, p); } } if((*cb)(&c, cb_arg, error, &repinfo)) { fatal_exit("unexpected: pending callback returned 1"); } /* delete the pending item. */ sldns_buffer_free(c.buffer); } /** pass time */ static void moment_assign(struct replay_runtime* runtime, struct replay_moment* mom) { char* value = macro_process(runtime->vars, runtime, mom->string); if(!value) fatal_exit("could not process macro step %d", mom->time_step); log_info("assign %s = %s", mom->variable, value); if(!macro_assign(runtime->vars, mom->variable, value)) fatal_exit("out of memory storing macro"); free(value); if(verbosity >= VERB_ALGO) macro_print_debug(runtime->vars); } /** pass time */ static void time_passes(struct replay_runtime* runtime, struct replay_moment* mom) { struct fake_timer *t; struct timeval tv = mom->elapse; if(mom->string) { char* xp = macro_process(runtime->vars, runtime, mom->string); double sec; if(!xp) fatal_exit("could not macro expand %s", mom->string); verbose(VERB_ALGO, "EVAL %s", mom->string); sec = atof(xp); free(xp); #ifndef S_SPLINT_S tv.tv_sec = sec; tv.tv_usec = (int)((sec - (double)tv.tv_sec) *1000000. + 0.5); #endif } timeval_add(&runtime->now_tv, &tv); runtime->now_secs = (time_t)runtime->now_tv.tv_sec; #ifndef S_SPLINT_S log_info("elapsed %d.%6.6d now %d.%6.6d", (int)tv.tv_sec, (int)tv.tv_usec, (int)runtime->now_tv.tv_sec, (int)runtime->now_tv.tv_usec); #endif /* see if any timers have fired; and run them */ while( (t=replay_get_oldest_timer(runtime)) ) { t->enabled = 0; log_info("fake_timer callback"); fptr_ok(fptr_whitelist_comm_timer(t->cb)); (*t->cb)(t->cb_arg); } } /** check autotrust file contents */ static void autotrust_check(struct replay_runtime* runtime, struct replay_moment* mom) { char name[1024], line[1024]; FILE *in; int lineno = 0, oke=1; char* expanded; struct config_strlist* p; line[sizeof(line)-1] = 0; log_assert(mom->autotrust_id); fake_temp_file("_auto_", mom->autotrust_id, name, sizeof(name)); in = fopen(name, "r"); if(!in) fatal_exit("could not open %s: %s", name, strerror(errno)); for(p=mom->file_content; p; p=p->next) { lineno++; if(!fgets(line, (int)sizeof(line)-1, in)) { log_err("autotrust check failed, could not read line"); log_err("file %s, line %d", name, lineno); log_err("should be: %s", p->str); fatal_exit("autotrust_check failed"); } if(line[0]) line[strlen(line)-1] = 0; /* remove newline */ expanded = macro_process(runtime->vars, runtime, p->str); if(!expanded) fatal_exit("could not expand macro line %d", lineno); if(verbosity >= 7 && strcmp(p->str, expanded) != 0) log_info("expanded '%s' to '%s'", p->str, expanded); if(strcmp(expanded, line) != 0) { log_err("mismatch in file %s, line %d", name, lineno); log_err("file has : %s", line); log_err("should be: %s", expanded); free(expanded); oke = 0; continue; } free(expanded); fprintf(stderr, "%s:%2d ok : %s\n", name, lineno, line); } if(fgets(line, (int)sizeof(line)-1, in)) { log_err("autotrust check failed, extra lines in %s after %d", name, lineno); do { fprintf(stderr, "file has: %s", line); } while(fgets(line, (int)sizeof(line)-1, in)); oke = 0; } fclose(in); if(!oke) fatal_exit("autotrust_check STEP %d failed", mom->time_step); log_info("autotrust %s is OK", mom->autotrust_id); } /** check tempfile file contents */ static void tempfile_check(struct replay_runtime* runtime, struct replay_moment* mom) { char name[1024], line[1024]; FILE *in; int lineno = 0, oke=1; char* expanded; struct config_strlist* p; line[sizeof(line)-1] = 0; log_assert(mom->autotrust_id); fake_temp_file("_temp_", mom->autotrust_id, name, sizeof(name)); in = fopen(name, "r"); if(!in) fatal_exit("could not open %s: %s", name, strerror(errno)); for(p=mom->file_content; p; p=p->next) { lineno++; if(!fgets(line, (int)sizeof(line)-1, in)) { log_err("tempfile check failed, could not read line"); log_err("file %s, line %d", name, lineno); log_err("should be: %s", p->str); fatal_exit("tempfile_check failed"); } if(line[0]) line[strlen(line)-1] = 0; /* remove newline */ expanded = macro_process(runtime->vars, runtime, p->str); if(!expanded) fatal_exit("could not expand macro line %d", lineno); if(verbosity >= 7 && strcmp(p->str, expanded) != 0) log_info("expanded '%s' to '%s'", p->str, expanded); if(strcmp(expanded, line) != 0) { log_err("mismatch in file %s, line %d", name, lineno); log_err("file has : %s", line); log_err("should be: %s", expanded); free(expanded); oke = 0; continue; } free(expanded); fprintf(stderr, "%s:%2d ok : %s\n", name, lineno, line); } if(fgets(line, (int)sizeof(line)-1, in)) { log_err("tempfile check failed, extra lines in %s after %d", name, lineno); do { fprintf(stderr, "file has: %s", line); } while(fgets(line, (int)sizeof(line)-1, in)); oke = 0; } fclose(in); if(!oke) fatal_exit("tempfile_check STEP %d failed", mom->time_step); log_info("tempfile %s is OK", mom->autotrust_id); } /** Store RTT in infra cache */ static void do_infra_rtt(struct replay_runtime* runtime) { struct replay_moment* now = runtime->now; int rto; size_t dplen = 0; uint8_t* dp = sldns_str2wire_dname(now->variable, &dplen); if(!dp) fatal_exit("cannot parse %s", now->variable); rto = infra_rtt_update(runtime->infra, &now->addr, now->addrlen, dp, dplen, LDNS_RR_TYPE_A, atoi(now->string), -1, runtime->now_secs); log_addr(0, "INFRA_RTT for", &now->addr, now->addrlen); log_info("INFRA_RTT(%s roundtrip %d): rto of %d", now->variable, atoi(now->string), rto); if(rto == 0) fatal_exit("infra_rtt_update failed"); free(dp); } /** perform exponential backoff on the timeout */ static void expon_timeout_backoff(struct replay_runtime* runtime) { struct fake_pending* p = runtime->pending_list; int rtt, vs; uint8_t edns_lame_known; int last_rtt, rto; if(!p) return; /* no pending packet to backoff */ if(!infra_host(runtime->infra, &p->addr, p->addrlen, p->zone, p->zonelen, runtime->now_secs, &vs, &edns_lame_known, &rtt)) return; last_rtt = rtt; rto = infra_rtt_update(runtime->infra, &p->addr, p->addrlen, p->zone, p->zonelen, p->qtype, -1, last_rtt, runtime->now_secs); log_info("infra_rtt_update returned rto %d", rto); } /** * Advance to the next moment. */ static void advance_moment(struct replay_runtime* runtime) { if(!runtime->now) runtime->now = runtime->scenario->mom_first; else runtime->now = runtime->now->mom_next; } /** * Perform actions or checks determined by the moment. * Also advances the time by one step. * @param runtime: scenario runtime information. */ static void do_moment_and_advance(struct replay_runtime* runtime) { struct replay_moment* mom; if(!runtime->now) { advance_moment(runtime); return; } log_info("testbound: do STEP %d %s", runtime->now->time_step, repevt_string(runtime->now->evt_type)); switch(runtime->now->evt_type) { case repevt_nothing: advance_moment(runtime); break; case repevt_front_query: /* advance moment before doing the step, so that the next moment which may check some result of the mom step can catch those results. */ mom = runtime->now; advance_moment(runtime); fake_front_query(runtime, mom); break; case repevt_front_reply: if(runtime->answer_list) log_err("testbound: There are unmatched answers."); fatal_exit("testbound: query answer not matched"); break; case repevt_timeout: mom = runtime->now; advance_moment(runtime); expon_timeout_backoff(runtime); fake_pending_callback(runtime, mom, NETEVENT_TIMEOUT); break; case repevt_back_reply: mom = runtime->now; advance_moment(runtime); fake_pending_callback(runtime, mom, NETEVENT_NOERROR); break; case repevt_back_query: /* Back queries are matched when they are sent out. */ log_err("No query matching the current moment was sent."); fatal_exit("testbound: back query not matched"); break; case repevt_error: mom = runtime->now; advance_moment(runtime); fake_pending_callback(runtime, mom, NETEVENT_CLOSED); break; case repevt_time_passes: time_passes(runtime, runtime->now); advance_moment(runtime); break; case repevt_autotrust_check: autotrust_check(runtime, runtime->now); advance_moment(runtime); break; case repevt_tempfile_check: tempfile_check(runtime, runtime->now); advance_moment(runtime); break; case repevt_assign: moment_assign(runtime, runtime->now); advance_moment(runtime); break; case repevt_traffic: advance_moment(runtime); break; case repevt_infra_rtt: do_infra_rtt(runtime); advance_moment(runtime); break; default: fatal_exit("testbound: unknown event type %d", runtime->now->evt_type); } } /** run the scenario in event callbacks */ static void run_scenario(struct replay_runtime* runtime) { struct entry* entry = NULL; struct fake_pending* pending = NULL; int max_rounds = 5000; int rounds = 0; runtime->now = runtime->scenario->mom_first; log_info("testbound: entering fake runloop"); do { /* if moment matches pending query do it. */ /* else if moment matches given answer, do it */ /* else if precoded_range matches pending, do it */ /* else do the current moment */ if(pending_matches_current(runtime, &entry, &pending)) { log_info("testbound: do STEP %d CHECK_OUT_QUERY", runtime->now->time_step); advance_moment(runtime); if(entry->copy_id) answer_callback_from_entry(runtime, entry, pending); } else if(runtime->answer_list && runtime->now && runtime->now->evt_type == repevt_front_reply) { answer_check_it(runtime); advance_moment(runtime); } else if(pending_matches_range(runtime, &entry, &pending)) { answer_callback_from_entry(runtime, entry, pending); } else { do_moment_and_advance(runtime); } log_info("testbound: end of event stage"); rounds++; if(rounds > max_rounds) fatal_exit("testbound: too many rounds, it loops."); } while(runtime->now); if(runtime->pending_list) { struct fake_pending* p; log_err("testbound: there are still messages pending."); for(p = runtime->pending_list; p; p=p->next) { log_pkt("pending msg", p->pkt, p->pkt_len); log_addr(0, "pending to", &p->addr, p->addrlen); } fatal_exit("testbound: there are still messages pending."); } if(runtime->answer_list) { fatal_exit("testbound: there are unmatched answers."); } log_info("testbound: exiting fake runloop."); runtime->exit_cleanly = 1; } /*********** Dummy routines ***********/ struct listen_dnsport* listen_create(struct comm_base* base, struct listen_port* ATTR_UNUSED(ports), size_t bufsize, int ATTR_UNUSED(tcp_accept_count), int ATTR_UNUSED(tcp_idle_timeout), int ATTR_UNUSED(harden_large_queries), uint32_t ATTR_UNUSED(http_max_streams), char* ATTR_UNUSED(http_endpoint), int ATTR_UNUSED(http_notls), struct tcl_list* ATTR_UNUSED(tcp_conn_limit), void* ATTR_UNUSED(sslctx), struct dt_env* ATTR_UNUSED(dtenv), comm_point_callback_type* cb, void *cb_arg) { struct replay_runtime* runtime = (struct replay_runtime*)base; struct listen_dnsport* l= calloc(1, sizeof(struct listen_dnsport)); if(!l) return NULL; l->base = base; l->udp_buff = sldns_buffer_new(bufsize); if(!l->udp_buff) { free(l); return NULL; } runtime->callback_query = cb; runtime->cb_arg = cb_arg; runtime->bufsize = bufsize; return l; } void listen_delete(struct listen_dnsport* listen) { if(!listen) return; sldns_buffer_free(listen->udp_buff); free(listen); } struct comm_base* comm_base_create(int ATTR_UNUSED(sigs)) { /* we return the runtime structure instead. */ struct replay_runtime* runtime = (struct replay_runtime*) calloc(1, sizeof(struct replay_runtime)); runtime->scenario = saved_scenario; runtime->vars = macro_store_create(); if(!runtime->vars) fatal_exit("out of memory"); return (struct comm_base*)runtime; } void comm_base_delete(struct comm_base* b) { struct replay_runtime* runtime = (struct replay_runtime*)b; struct fake_pending* p, *np; struct replay_answer* a, *na; struct fake_timer* t, *nt; if(!runtime) return; runtime->scenario= NULL; p = runtime->pending_list; while(p) { np = p->next; delete_fake_pending(p); p = np; } a = runtime->answer_list; while(a) { na = a->next; delete_replay_answer(a); a = na; } t = runtime->timer_list; while(t) { nt = t->next; free(t); t = nt; } macro_store_delete(runtime->vars); free(runtime); } void comm_base_timept(struct comm_base* b, time_t** tt, struct timeval** tv) { struct replay_runtime* runtime = (struct replay_runtime*)b; *tt = &runtime->now_secs; *tv = &runtime->now_tv; } void comm_base_dispatch(struct comm_base* b) { struct replay_runtime* runtime = (struct replay_runtime*)b; run_scenario(runtime); if(runtime->sig_cb) (*runtime->sig_cb)(SIGTERM, runtime->sig_cb_arg); else exit(0); /* OK exit when LIBEVENT_SIGNAL_PROBLEM exists */ } void comm_base_exit(struct comm_base* b) { struct replay_runtime* runtime = (struct replay_runtime*)b; if(!runtime->exit_cleanly) { /* some sort of failure */ fatal_exit("testbound: comm_base_exit was called."); } } struct comm_signal* comm_signal_create(struct comm_base* base, void (*callback)(int, void*), void* cb_arg) { struct replay_runtime* runtime = (struct replay_runtime*)base; runtime->sig_cb = callback; runtime->sig_cb_arg = cb_arg; return calloc(1, sizeof(struct comm_signal)); } int comm_signal_bind(struct comm_signal* ATTR_UNUSED(comsig), int ATTR_UNUSED(sig)) { return 1; } void comm_signal_delete(struct comm_signal* comsig) { free(comsig); } void comm_point_send_reply(struct comm_reply* repinfo) { struct replay_answer* ans = (struct replay_answer*)calloc(1, sizeof(struct replay_answer)); struct replay_runtime* runtime = (struct replay_runtime*)repinfo->c->ev; log_info("testbound: comm_point_send_reply fake"); /* dump it into the todo list */ log_assert(ans); memcpy(&ans->repinfo, repinfo, sizeof(struct comm_reply)); ans->next = NULL; if(runtime->answer_last) runtime->answer_last->next = ans; else runtime->answer_list = ans; runtime->answer_last = ans; /* try to parse packet */ ans->pkt = memdup(sldns_buffer_begin(ans->repinfo.c->buffer), sldns_buffer_limit(ans->repinfo.c->buffer)); ans->pkt_len = sldns_buffer_limit(ans->repinfo.c->buffer); if(!ans->pkt) fatal_exit("out of memory"); log_pkt("reply pkt: ", ans->pkt, ans->pkt_len); } void comm_point_drop_reply(struct comm_reply* repinfo) { log_info("comm_point_drop_reply fake"); if(repinfo->c) { sldns_buffer_free(repinfo->c->buffer); free(repinfo->c); } } struct outside_network* outside_network_create(struct comm_base* base, size_t bufsize, size_t ATTR_UNUSED(num_ports), char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), int ATTR_UNUSED(do_ip4), int ATTR_UNUSED(do_ip6), size_t ATTR_UNUSED(num_tcp), int ATTR_UNUSED(dscp), struct infra_cache* infra, struct ub_randstate* ATTR_UNUSED(rnd), int ATTR_UNUSED(use_caps_for_id), int* ATTR_UNUSED(availports), int ATTR_UNUSED(numavailports), size_t ATTR_UNUSED(unwanted_threshold), int ATTR_UNUSED(outgoing_tcp_mss), void (*unwanted_action)(void*), void* ATTR_UNUSED(unwanted_param), int ATTR_UNUSED(do_udp), void* ATTR_UNUSED(sslctx), int ATTR_UNUSED(delayclose), int ATTR_UNUSED(tls_use_sni), struct dt_env* ATTR_UNUSED(dtenv), int ATTR_UNUSED(udp_connect)) { struct replay_runtime* runtime = (struct replay_runtime*)base; struct outside_network* outnet = calloc(1, sizeof(struct outside_network)); (void)unwanted_action; if(!outnet) return NULL; runtime->infra = infra; outnet->base = base; outnet->udp_buff = sldns_buffer_new(bufsize); if(!outnet->udp_buff) { free(outnet); return NULL; } return outnet; } void outside_network_delete(struct outside_network* outnet) { if(!outnet) return; sldns_buffer_free(outnet->udp_buff); free(outnet); } void outside_network_quit_prepare(struct outside_network* ATTR_UNUSED(outnet)) { } struct pending* pending_udp_query(struct serviced_query* sq, sldns_buffer* packet, int timeout, comm_point_callback_type* callback, void* callback_arg) { struct replay_runtime* runtime = (struct replay_runtime*) sq->outnet->base; struct fake_pending* pend = (struct fake_pending*)calloc(1, sizeof(struct fake_pending)); log_assert(pend); pend->buffer = sldns_buffer_new(sldns_buffer_capacity(packet)); log_assert(pend->buffer); sldns_buffer_write(pend->buffer, sldns_buffer_begin(packet), sldns_buffer_limit(packet)); sldns_buffer_flip(pend->buffer); memcpy(&pend->addr, &sq->addr, sq->addrlen); pend->addrlen = sq->addrlen; pend->callback = callback; pend->cb_arg = callback_arg; pend->timeout = timeout/1000; pend->transport = transport_udp; pend->pkt = NULL; pend->zone = NULL; pend->serviced = 0; pend->runtime = runtime; pend->pkt_len = sldns_buffer_limit(packet); pend->pkt = memdup(sldns_buffer_begin(packet), pend->pkt_len); if(!pend->pkt) fatal_exit("out of memory"); log_pkt("pending udp pkt: ", pend->pkt, pend->pkt_len); /* see if it matches the current moment */ if(runtime->now && runtime->now->evt_type == repevt_back_query && (runtime->now->addrlen == 0 || sockaddr_cmp( &runtime->now->addr, runtime->now->addrlen, &pend->addr, pend->addrlen) == 0) && find_match(runtime->now->match, pend->pkt, pend->pkt_len, pend->transport)) { log_info("testbound: matched pending to event. " "advance time between events."); log_info("testbound: do STEP %d %s", runtime->now->time_step, repevt_string(runtime->now->evt_type)); advance_moment(runtime); /* still create the pending, because we need it to callback */ } log_info("testbound: created fake pending"); /* add to list */ pend->next = runtime->pending_list; runtime->pending_list = pend; return (struct pending*)pend; } struct waiting_tcp* pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, int timeout, comm_point_callback_type* callback, void* callback_arg) { struct replay_runtime* runtime = (struct replay_runtime*) sq->outnet->base; struct fake_pending* pend = (struct fake_pending*)calloc(1, sizeof(struct fake_pending)); log_assert(pend); pend->buffer = sldns_buffer_new(sldns_buffer_capacity(packet)); log_assert(pend->buffer); sldns_buffer_write(pend->buffer, sldns_buffer_begin(packet), sldns_buffer_limit(packet)); sldns_buffer_flip(pend->buffer); memcpy(&pend->addr, &sq->addr, sq->addrlen); pend->addrlen = sq->addrlen; pend->callback = callback; pend->cb_arg = callback_arg; pend->timeout = timeout/1000; pend->transport = transport_tcp; pend->pkt = NULL; pend->zone = NULL; pend->runtime = runtime; pend->serviced = 0; pend->pkt_len = sldns_buffer_limit(packet); pend->pkt = memdup(sldns_buffer_begin(packet), pend->pkt_len); if(!pend->pkt) fatal_exit("out of memory"); log_pkt("pending tcp pkt: ", pend->pkt, pend->pkt_len); /* see if it matches the current moment */ if(runtime->now && runtime->now->evt_type == repevt_back_query && (runtime->now->addrlen == 0 || sockaddr_cmp( &runtime->now->addr, runtime->now->addrlen, &pend->addr, pend->addrlen) == 0) && find_match(runtime->now->match, pend->pkt, pend->pkt_len, pend->transport)) { log_info("testbound: matched pending to event. " "advance time between events."); log_info("testbound: do STEP %d %s", runtime->now->time_step, repevt_string(runtime->now->evt_type)); advance_moment(runtime); /* still create the pending, because we need it to callback */ } log_info("testbound: created fake pending"); /* add to list */ pend->next = runtime->pending_list; runtime->pending_list = pend; return (struct waiting_tcp*)pend; } struct serviced_query* outnet_serviced_query(struct outside_network* outnet, struct query_info* qinfo, uint16_t flags, int dnssec, int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct module_qstate* qstate, comm_point_callback_type* callback, void* callback_arg, sldns_buffer* ATTR_UNUSED(buff), struct module_env* env) { struct replay_runtime* runtime = (struct replay_runtime*)outnet->base; struct fake_pending* pend = (struct fake_pending*)calloc(1, sizeof(struct fake_pending)); char z[256]; log_assert(pend); log_nametypeclass(VERB_OPS, "pending serviced query", qinfo->qname, qinfo->qtype, qinfo->qclass); dname_str(zone, z); verbose(VERB_OPS, "pending serviced query zone %s flags%s%s%s%s", z, (flags&BIT_RD)?" RD":"", (flags&BIT_CD)?" CD":"", (flags&~(BIT_RD|BIT_CD))?" MORE":"", (dnssec)?" DO":""); /* create packet with EDNS */ pend->buffer = sldns_buffer_new(512); log_assert(pend->buffer); sldns_buffer_write_u16(pend->buffer, 0); /* id */ sldns_buffer_write_u16(pend->buffer, flags); sldns_buffer_write_u16(pend->buffer, 1); /* qdcount */ sldns_buffer_write_u16(pend->buffer, 0); /* ancount */ sldns_buffer_write_u16(pend->buffer, 0); /* nscount */ sldns_buffer_write_u16(pend->buffer, 0); /* arcount */ sldns_buffer_write(pend->buffer, qinfo->qname, qinfo->qname_len); sldns_buffer_write_u16(pend->buffer, qinfo->qtype); sldns_buffer_write_u16(pend->buffer, qinfo->qclass); sldns_buffer_flip(pend->buffer); if(1) { struct edns_data edns; struct edns_string_addr* client_string_addr; if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, zone, zonelen, qstate, qstate->region)) { free(pend); return NULL; } /* add edns */ edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = EDNS_ADVERTISED_VERSION; edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits = 0; if(dnssec) edns.bits = EDNS_DO; edns.padding_block_size = 0; if((client_string_addr = edns_string_addr_lookup( &env->edns_strings->client_strings, addr, addrlen))) { edns_opt_list_append(&qstate->edns_opts_back_out, env->edns_strings->client_string_opcode, client_string_addr->string_len, client_string_addr->string, qstate->region); } edns.opt_list = qstate->edns_opts_back_out; attach_edns_record(pend->buffer, &edns); } memcpy(&pend->addr, addr, addrlen); pend->addrlen = addrlen; pend->zone = memdup(zone, zonelen); pend->zonelen = zonelen; pend->qtype = (int)qinfo->qtype; log_assert(pend->zone); pend->callback = callback; pend->cb_arg = callback_arg; pend->timeout = UDP_AUTH_QUERY_TIMEOUT/1000; pend->transport = transport_udp; /* pretend UDP */ pend->pkt = NULL; pend->runtime = runtime; pend->serviced = 1; pend->pkt_len = sldns_buffer_limit(pend->buffer); pend->pkt = memdup(sldns_buffer_begin(pend->buffer), pend->pkt_len); if(!pend->pkt) fatal_exit("out of memory"); /*log_pkt("pending serviced query: ", pend->pkt, pend->pkt_len);*/ /* see if it matches the current moment */ if(runtime->now && runtime->now->evt_type == repevt_back_query && (runtime->now->addrlen == 0 || sockaddr_cmp( &runtime->now->addr, runtime->now->addrlen, &pend->addr, pend->addrlen) == 0) && find_match(runtime->now->match, pend->pkt, pend->pkt_len, pend->transport)) { log_info("testbound: matched pending to event. " "advance time between events."); log_info("testbound: do STEP %d %s", runtime->now->time_step, repevt_string(runtime->now->evt_type)); advance_moment(runtime); /* still create the pending, because we need it to callback */ } log_info("testbound: created fake pending"); /* add to list */ pend->next = runtime->pending_list; runtime->pending_list = pend; return (struct serviced_query*)pend; } void outnet_serviced_query_stop(struct serviced_query* sq, void* cb_arg) { struct fake_pending* pend = (struct fake_pending*)sq; struct replay_runtime* runtime = pend->runtime; /* delete from the list */ struct fake_pending* p = runtime->pending_list, *prev=NULL; while(p) { if(p == pend) { log_assert(p->cb_arg == cb_arg); (void)cb_arg; log_info("serviced pending delete"); if(prev) prev->next = p->next; else runtime->pending_list = p->next; sldns_buffer_free(p->buffer); free(p->pkt); free(p->zone); free(p); return; } prev = p; p = p->next; } log_info("double delete of pending serviced query"); } int resolve_interface_names(struct config_file* ATTR_UNUSED(cfg), char*** ATTR_UNUSED(resif), int* ATTR_UNUSED(num_resif)) { return 1; } struct listen_port* listening_ports_open(struct config_file* ATTR_UNUSED(cfg), char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), int* ATTR_UNUSED(reuseport)) { return calloc(1, 1); } void listening_ports_free(struct listen_port* list) { free(list); } struct comm_point* comm_point_create_local(struct comm_base* ATTR_UNUSED(base), int ATTR_UNUSED(fd), size_t ATTR_UNUSED(bufsize), comm_point_callback_type* ATTR_UNUSED(callback), void* ATTR_UNUSED(callback_arg)) { struct fake_commpoint* fc = (struct fake_commpoint*)calloc(1, sizeof(*fc)); if(!fc) return NULL; fc->typecode = FAKE_COMMPOINT_TYPECODE; return (struct comm_point*)fc; } struct comm_point* comm_point_create_raw(struct comm_base* ATTR_UNUSED(base), int ATTR_UNUSED(fd), int ATTR_UNUSED(writing), comm_point_callback_type* ATTR_UNUSED(callback), void* ATTR_UNUSED(callback_arg)) { /* no pipe comm possible */ struct fake_commpoint* fc = (struct fake_commpoint*)calloc(1, sizeof(*fc)); if(!fc) return NULL; fc->typecode = FAKE_COMMPOINT_TYPECODE; return (struct comm_point*)fc; } void comm_point_start_listening(struct comm_point* ATTR_UNUSED(c), int ATTR_UNUSED(newfd), int ATTR_UNUSED(sec)) { /* no bg write pipe comm possible */ } void comm_point_stop_listening(struct comm_point* ATTR_UNUSED(c)) { /* no bg write pipe comm possible */ } /* only cmd com _local gets deleted */ void comm_point_delete(struct comm_point* c) { struct fake_commpoint* fc = (struct fake_commpoint*)c; if(c == NULL) return; log_assert(fc->typecode == FAKE_COMMPOINT_TYPECODE); if(fc->type_tcp_out) { /* remove tcp pending, so no more callbacks to it */ pending_list_delete(fc->runtime, fc->pending); } free(c); } size_t listen_get_mem(struct listen_dnsport* ATTR_UNUSED(listen)) { return 0; } size_t outnet_get_mem(struct outside_network* ATTR_UNUSED(outnet)) { return 0; } size_t comm_point_get_mem(struct comm_point* ATTR_UNUSED(c)) { return 0; } size_t serviced_get_mem(struct serviced_query* ATTR_UNUSED(c)) { return 0; } /* fake for fptr wlist */ int outnet_udp_cb(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply *ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int outnet_tcp_cb(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply *ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } void pending_udp_timer_cb(void *ATTR_UNUSED(arg)) { log_assert(0); } void pending_udp_timer_delay_cb(void *ATTR_UNUSED(arg)) { log_assert(0); } void outnet_tcptimer(void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_point_udp_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_point_udp_ancil_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_point_tcp_accept_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_point_tcp_handle_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_timer_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_signal_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_point_http_handle_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_point_local_handle_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_point_raw_handle_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } void comm_base_handle_slow_accept(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* ATTR_UNUSED(arg)) { log_assert(0); } int serviced_udp_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int serviced_tcp_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int pending_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } int serviced_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } int reuse_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } int reuse_id_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } /* timers in testbound for autotrust. statistics tested in tdir. */ struct comm_timer* comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg) { struct replay_runtime* runtime = (struct replay_runtime*)base; struct fake_timer* t = (struct fake_timer*)calloc(1, sizeof(*t)); t->cb = cb; t->cb_arg = cb_arg; fptr_ok(fptr_whitelist_comm_timer(t->cb)); /* check in advance */ t->runtime = runtime; t->next = runtime->timer_list; runtime->timer_list = t; return (struct comm_timer*)t; } void comm_timer_disable(struct comm_timer* timer) { struct fake_timer* t = (struct fake_timer*)timer; log_info("fake timer disabled"); t->enabled = 0; } void comm_timer_set(struct comm_timer* timer, struct timeval* tv) { struct fake_timer* t = (struct fake_timer*)timer; t->enabled = 1; t->tv = *tv; log_info("fake timer set %d.%6.6d", (int)t->tv.tv_sec, (int)t->tv.tv_usec); timeval_add(&t->tv, &t->runtime->now_tv); } void comm_timer_delete(struct comm_timer* timer) { struct fake_timer* t = (struct fake_timer*)timer; struct fake_timer** pp, *p; if(!t) return; /* remove from linked list */ pp = &t->runtime->timer_list; p = t->runtime->timer_list; while(p) { if(p == t) { /* snip from list */ *pp = p->next; break; } pp = &p->next; p = p->next; } free(timer); } void comm_base_set_slow_accept_handlers(struct comm_base* ATTR_UNUSED(b), void (*stop_acc)(void*), void (*start_acc)(void*), void* ATTR_UNUSED(arg)) { /* ignore this */ (void)stop_acc; (void)start_acc; } struct ub_event_base* comm_base_internal(struct comm_base* ATTR_UNUSED(b)) { /* no pipe comm possible in testbound */ return NULL; } void daemon_remote_exec(struct worker* ATTR_UNUSED(worker)) { } void listen_start_accept(struct listen_dnsport* ATTR_UNUSED(listen)) { } void listen_stop_accept(struct listen_dnsport* ATTR_UNUSED(listen)) { } void daemon_remote_start_accept(struct daemon_remote* ATTR_UNUSED(rc)) { } void daemon_remote_stop_accept(struct daemon_remote* ATTR_UNUSED(rc)) { } int create_udp_sock(int ATTR_UNUSED(family), int ATTR_UNUSED(socktype), struct sockaddr* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(v6only), int* ATTR_UNUSED(inuse), int* ATTR_UNUSED(noproto), int ATTR_UNUSED(rcv), int ATTR_UNUSED(snd), int ATTR_UNUSED(listen), int* ATTR_UNUSED(reuseport), int ATTR_UNUSED(transparent), int ATTR_UNUSED(freebind), int ATTR_UNUSED(use_systemd), int ATTR_UNUSED(dscp)) { /* if you actually print to this, it'll be stdout during test */ return 1; } struct comm_point* comm_point_create_udp(struct comm_base *ATTR_UNUSED(base), int ATTR_UNUSED(fd), sldns_buffer* ATTR_UNUSED(buffer), comm_point_callback_type* ATTR_UNUSED(callback), void* ATTR_UNUSED(callback_arg)) { log_assert(0); return NULL; } struct comm_point* comm_point_create_tcp_out(struct comm_base* ATTR_UNUSED(base), size_t ATTR_UNUSED(bufsize), comm_point_callback_type* ATTR_UNUSED(callback), void* ATTR_UNUSED(callback_arg)) { log_assert(0); return NULL; } struct comm_point* outnet_comm_point_for_udp(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* ATTR_UNUSED(to_addr), socklen_t ATTR_UNUSED(to_addrlen)) { struct replay_runtime* runtime = (struct replay_runtime*) outnet->base; struct fake_commpoint* fc = (struct fake_commpoint*)calloc(1, sizeof(*fc)); if(!fc) return NULL; fc->typecode = FAKE_COMMPOINT_TYPECODE; fc->type_udp_out = 1; fc->cb = cb; fc->cb_arg = cb_arg; fc->runtime = runtime; /* used by authzone transfers */ return (struct comm_point*)fc; } struct comm_point* outnet_comm_point_for_tcp(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen, struct sldns_buffer* query, int timeout, int ATTR_UNUSED(ssl), char* ATTR_UNUSED(host)) { struct replay_runtime* runtime = (struct replay_runtime*) outnet->base; struct fake_commpoint* fc = (struct fake_commpoint*)calloc(1, sizeof(*fc)); struct fake_pending* pend = (struct fake_pending*)calloc(1, sizeof(struct fake_pending)); if(!fc || !pend) { free(fc); free(pend); return NULL; } fc->typecode = FAKE_COMMPOINT_TYPECODE; fc->type_tcp_out = 1; fc->cb = cb; fc->cb_arg = cb_arg; fc->runtime = runtime; fc->pending = pend; /* used by authzone transfers */ /* create pending item */ pend->buffer = sldns_buffer_new(sldns_buffer_limit(query)+10); if(!pend->buffer) { free(fc); free(pend); return NULL; } sldns_buffer_copy(pend->buffer, query); memcpy(&pend->addr, to_addr, to_addrlen); pend->addrlen = to_addrlen; pend->zone = NULL; pend->zonelen = 0; if(LDNS_QDCOUNT(sldns_buffer_begin(query)) > 0) { char buf[512]; char addrbuf[128]; (void)sldns_wire2str_rrquestion_buf(sldns_buffer_at(query, LDNS_HEADER_SIZE), sldns_buffer_limit(query)-LDNS_HEADER_SIZE, buf, sizeof(buf)); addr_to_str((struct sockaddr_storage*)to_addr, to_addrlen, addrbuf, sizeof(addrbuf)); if(verbosity >= VERB_ALGO) { if(buf[0] != 0) buf[strlen(buf)-1] = 0; /* del newline*/ log_info("tcp to %s: %s", addrbuf, buf); } log_assert(sldns_buffer_limit(query)-LDNS_HEADER_SIZE >= 2); pend->qtype = (int)sldns_buffer_read_u16_at(query, LDNS_HEADER_SIZE+ dname_valid(sldns_buffer_at(query, LDNS_HEADER_SIZE), sldns_buffer_limit(query)-LDNS_HEADER_SIZE)); } pend->callback = cb; pend->cb_arg = cb_arg; pend->timeout = timeout; pend->transport = transport_tcp; pend->pkt = NULL; pend->runtime = runtime; pend->serviced = 0; pend->pkt_len = sldns_buffer_limit(pend->buffer); pend->pkt = memdup(sldns_buffer_begin(pend->buffer), pend->pkt_len); if(!pend->pkt) fatal_exit("out of memory"); log_info("testbound: created fake pending for tcp_out"); /* add to list */ pend->next = runtime->pending_list; runtime->pending_list = pend; return (struct comm_point*)fc; } struct comm_point* outnet_comm_point_for_http(struct outside_network* outnet, comm_point_callback_type* cb, void* cb_arg, struct sockaddr_storage* to_addr, socklen_t to_addrlen, int timeout, int ssl, char* host, char* path) { struct replay_runtime* runtime = (struct replay_runtime*) outnet->base; struct fake_commpoint* fc = (struct fake_commpoint*)calloc(1, sizeof(*fc)); if(!fc) { return NULL; } fc->typecode = FAKE_COMMPOINT_TYPECODE; fc->type_http_out = 1; fc->cb = cb; fc->cb_arg = cb_arg; fc->runtime = runtime; (void)to_addr; (void)to_addrlen; (void)timeout; (void)ssl; (void)host; (void)path; /* handle http comm point and return contents from test script */ return (struct comm_point*)fc; } int comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, struct sockaddr* addr, socklen_t addrlen, int ATTR_UNUSED(is_connected)) { struct fake_commpoint* fc = (struct fake_commpoint*)c; struct replay_runtime* runtime = fc->runtime; struct fake_pending* pend = (struct fake_pending*)calloc(1, sizeof(struct fake_pending)); if(!pend) { log_err("malloc failure"); return 0; } fc->pending = pend; /* used by authzone transfers */ /* create pending item */ pend->buffer = sldns_buffer_new(sldns_buffer_limit(packet) + 10); if(!pend->buffer) { free(pend); return 0; } sldns_buffer_copy(pend->buffer, packet); memcpy(&pend->addr, addr, addrlen); pend->addrlen = addrlen; pend->zone = NULL; pend->zonelen = 0; if(LDNS_QDCOUNT(sldns_buffer_begin(packet)) > 0) { char buf[512]; char addrbuf[128]; (void)sldns_wire2str_rrquestion_buf(sldns_buffer_at(packet, LDNS_HEADER_SIZE), sldns_buffer_limit(packet)-LDNS_HEADER_SIZE, buf, sizeof(buf)); addr_to_str((struct sockaddr_storage*)addr, addrlen, addrbuf, sizeof(addrbuf)); if(verbosity >= VERB_ALGO) { if(buf[0] != 0) buf[strlen(buf)-1] = 0; /* del newline*/ log_info("udp to %s: %s", addrbuf, buf); } log_assert(sldns_buffer_limit(packet)-LDNS_HEADER_SIZE >= 2); pend->qtype = (int)sldns_buffer_read_u16_at(packet, LDNS_HEADER_SIZE+ dname_valid(sldns_buffer_at(packet, LDNS_HEADER_SIZE), sldns_buffer_limit(packet)-LDNS_HEADER_SIZE)); } pend->callback = fc->cb; pend->cb_arg = fc->cb_arg; pend->timeout = UDP_AUTH_QUERY_TIMEOUT/1000; pend->transport = transport_udp; pend->pkt = NULL; pend->runtime = runtime; pend->serviced = 0; pend->pkt_len = sldns_buffer_limit(pend->buffer); pend->pkt = memdup(sldns_buffer_begin(pend->buffer), pend->pkt_len); if(!pend->pkt) fatal_exit("out of memory"); log_info("testbound: created fake pending for send_udp_msg"); /* add to list */ pend->next = runtime->pending_list; runtime->pending_list = pend; return 1; } int outnet_get_tcp_fd(struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(tcp_mss), int ATTR_UNUSED(dscp)) { log_assert(0); return -1; } int outnet_tcp_connect(int ATTR_UNUSED(s), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen)) { log_assert(0); return 0; } int tcp_req_info_add_meshstate(struct tcp_req_info* ATTR_UNUSED(req), struct mesh_area* ATTR_UNUSED(mesh), struct mesh_state* ATTR_UNUSED(m)) { log_assert(0); return 0; } void tcp_req_info_remove_mesh_state(struct tcp_req_info* ATTR_UNUSED(req), struct mesh_state* ATTR_UNUSED(m)) { log_assert(0); } size_t tcp_req_info_get_stream_buffer_size(void) { return 0; } size_t http2_get_query_buffer_size(void) { return 0; } size_t http2_get_response_buffer_size(void) { return 0; } void http2_stream_add_meshstate(struct http2_stream* ATTR_UNUSED(h2_stream), struct mesh_area* ATTR_UNUSED(mesh), struct mesh_state* ATTR_UNUSED(m)) { } /*********** End of Dummy routines ***********/ unbound-1.13.1/testcode/signit.c0000644000175000017500000001664514010434640016166 0ustar wouterwouter/* * testcode/signit.c - debug tool to sign rrsets with given keys. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program signs rrsets with the given keys. It can be used to * construct input to test the validator with. */ #include "config.h" #include #include #define DNSKEY_BIT_ZSK 0x0100 /** * Key settings */ struct keysets { /** signature inception */ uint32_t incep; /** signature expiration */ uint32_t expi; /** owner name */ char* owner; /** keytag */ uint16_t keytag; /** DNSKEY flags */ uint16_t flags; }; /** print usage and exit */ static void usage(void) { printf("usage: signit expi ince keytag owner keyfile\n"); printf("present rrset data on stdin.\n"); printf("signed data is printed to stdout.\n"); printf("\n"); printf("Or use: signit NSEC3PARAM hash flags iter salt\n"); printf("present names on stdin, hashed names are printed to stdout.\n"); exit(1); } static time_t convert_timeval(const char* str) { time_t t; struct tm tm; memset(&tm, 0, sizeof(tm)); if(strlen(str) < 14) return 0; if(sscanf(str, "%4d%2d%2d%2d%2d%2d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) return 0; tm.tm_year -= 1900; tm.tm_mon--; /* Check values */ if (tm.tm_year < 70) return 0; if (tm.tm_mon < 0 || tm.tm_mon > 11) return 0; if (tm.tm_mday < 1 || tm.tm_mday > 31) return 0; if (tm.tm_hour < 0 || tm.tm_hour > 23) return 0; if (tm.tm_min < 0 || tm.tm_min > 59) return 0; if (tm.tm_sec < 0 || tm.tm_sec > 59) return 0; /* call ldns conversion function */ t = ldns_mktime_from_utc(&tm); return t; } static void fatal_exit(const char* format, ...) { va_list args; va_start(args, format); printf("fatal exit: "); vprintf(format, args); va_end(args); exit(1); } /** read expi ince keytag owner from cmdline */ static void parse_cmdline(char *argv[], struct keysets* s) { s->expi = convert_timeval(argv[1]); s->incep = convert_timeval(argv[2]); s->keytag = (uint16_t)atoi(argv[3]); s->owner = argv[4]; s->flags = DNSKEY_BIT_ZSK; /* to enforce signing */ } /** read all key files, exit on error */ static ldns_key_list* read_keys(int num, char* names[], struct keysets* set) { int i; ldns_key_list* keys = ldns_key_list_new(); ldns_key* k; ldns_rdf* rdf; ldns_status s; int b; FILE* in; if(!keys) fatal_exit("alloc failure"); for(i=0; iexpi); ldns_key_set_inception(k, set->incep); s = ldns_str2rdf_dname(&rdf, set->owner); if(s != LDNS_STATUS_OK) fatal_exit("bad owner name %s: %s", set->owner, ldns_get_errorstr_by_id(s)); ldns_key_set_pubkey_owner(k, rdf); ldns_key_set_flags(k, set->flags); ldns_key_set_keytag(k, set->keytag); b = ldns_key_list_push_key(keys, k); assert(b); } return keys; } /** read list of rrs from the file */ static ldns_rr_list* read_rrs(FILE* in) { uint32_t my_ttl = 3600; ldns_rdf *my_origin = NULL; ldns_rdf *my_prev = NULL; ldns_status s; int line_nr = 1; int b; ldns_rr_list* list; ldns_rr *rr; list = ldns_rr_list_new(); if(!list) fatal_exit("alloc error"); while(!feof(in)) { s = ldns_rr_new_frm_fp_l(&rr, in, &my_ttl, &my_origin, &my_prev, &line_nr); if(s == LDNS_STATUS_SYNTAX_TTL || s == LDNS_STATUS_SYNTAX_ORIGIN || s == LDNS_STATUS_SYNTAX_EMPTY) continue; else if(s != LDNS_STATUS_OK) fatal_exit("parse error in line %d: %s", line_nr, ldns_get_errorstr_by_id(s)); b = ldns_rr_list_push_rr(list, rr); assert(b); } printf("read %d lines\n", line_nr); return list; } /** sign the rrs with the keys */ static void signit(ldns_rr_list* rrs, ldns_key_list* keys) { ldns_rr_list* rrset; ldns_rr_list* sigs; while(ldns_rr_list_rr_count(rrs) > 0) { rrset = ldns_rr_list_pop_rrset(rrs); if(!rrset) fatal_exit("copy alloc failure"); sigs = ldns_sign_public(rrset, keys); if(!sigs) fatal_exit("failed to sign"); ldns_rr_list_print(stdout, rrset); ldns_rr_list_print(stdout, sigs); printf("\n"); ldns_rr_list_free(rrset); ldns_rr_list_free(sigs); } } /** process keys and signit */ static void process_keys(int argc, char* argv[]) { ldns_rr_list* rrs; ldns_key_list* keys; struct keysets settings; assert(argc == 6); parse_cmdline(argv, &settings); keys = read_keys(1, argv+5, &settings); rrs = read_rrs(stdin); signit(rrs, keys); ldns_rr_list_deep_free(rrs); ldns_key_list_free(keys); } /** process nsec3 params and perform hashing */ static void process_nsec3(int argc, char* argv[]) { char line[10240]; ldns_rdf* salt; ldns_rdf* in, *out; ldns_status status; status = ldns_str2rdf_nsec3_salt(&salt, argv[5]); if(status != LDNS_STATUS_OK) fatal_exit("Could not parse salt %s: %s", argv[5], ldns_get_errorstr_by_id(status)); assert(argc == 6); while(fgets(line, (int)sizeof(line), stdin)) { if(strlen(line) > 0) line[strlen(line)-1] = 0; /* remove trailing newline */ if(line[0]==0) continue; status = ldns_str2rdf_dname(&in, line); if(status != LDNS_STATUS_OK) fatal_exit("Could not parse name %s: %s", line, ldns_get_errorstr_by_id(status)); ldns_rdf_print(stdout, in); printf(" -> "); /* arg 3 is flags, unused */ out = ldns_nsec3_hash_name(in, (uint8_t)atoi(argv[2]), (uint16_t)atoi(argv[4]), ldns_rdf_data(salt)[0], ldns_rdf_data(salt)+1); if(!out) fatal_exit("Could not hash %s", line); ldns_rdf_print(stdout, out); printf("\n"); ldns_rdf_deep_free(in); ldns_rdf_deep_free(out); } ldns_rdf_deep_free(salt); } /** main program */ int main(int argc, char* argv[]) { if(argc != 6) { usage(); } if(strcmp(argv[1], "NSEC3PARAM") == 0) { process_nsec3(argc, argv); return 0; } process_keys(argc, argv); return 0; } unbound-1.13.1/testcode/testbound.c0000644000175000017500000003756614010434640016705 0ustar wouterwouter/* * testcode/testbound.c - test program for unbound. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Exits with code 1 on a failure. 0 if all unit tests are successful. */ #include "config.h" #ifdef HAVE_TIME_H # include #endif #include #include "testcode/testpkts.h" #include "testcode/replay.h" #include "testcode/fake_event.h" #include "daemon/remote.h" #include "libunbound/worker.h" #include "util/config_file.h" #include "sldns/keyraw.h" #ifdef UB_ON_WINDOWS #include "winrc/win_svc.h" #endif /** signal that this is a testbound compile */ #define unbound_testbound 1 /** renamed main routine */ int daemon_main(int argc, char* argv[]); /** * include the main program from the unbound daemon. * rename main to daemon_main to call it */ #define main daemon_main #include "daemon/unbound.c" #undef main /** maximum line length for lines in the replay file. */ #define MAX_LINE_LEN 1024 /** config files (removed at exit) */ static struct config_strlist* cfgfiles = NULL; #ifdef UNBOUND_ALLOC_STATS # define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__) char* unbound_stat_strdup_log(char* s, const char* file, int line, const char* func); char* unbound_stat_strdup_log(char* s, const char* file, int line, const char* func) { char* result; size_t len; if(!s) return NULL; len = strlen(s); log_info("%s:%d %s strdup(%u)", file, line, func, (unsigned)len+1); result = unbound_stat_malloc(len+1); memmove(result, s, len+1); return result; } #endif /* UNBOUND_ALLOC_STATS */ /** give commandline usage for testbound. */ static void testbound_usage(void) { printf("usage: testbound [options]\n"); printf("\ttest the unbound daemon.\n"); printf("-h this help\n"); printf("-p file playback text file\n"); printf("-1 detect SHA1 support (exit code 0 or 1)\n"); printf("-2 detect SHA256 support (exit code 0 or 1)\n"); printf("-g detect GOST support (exit code 0 or 1)\n"); printf("-e detect ECDSA support (exit code 0 or 1)\n"); printf("-c detect CLIENT_SUBNET support (exit code 0 or 1)\n"); printf("-i detect IPSECMOD support (exit code 0 or 1)\n"); printf("-s testbound self-test - unit test of testbound parts.\n"); printf("-o str unbound commandline options separated by spaces.\n"); printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE file in source package.\n"); printf("Report bugs to %s.\n", PACKAGE_BUGREPORT); } /** Max number of arguments to pass to unbound. */ #define MAXARG 100 /** * Add options from string to passed argc. splits on whitespace. * @param args: the option argument, "-v -p 12345" or so. * @param pass_argc: ptr to the argc for unbound. Modified. * @param pass_argv: the argv to pass to unbound. Modified. */ static void add_opts(const char* args, int* pass_argc, char* pass_argv[]) { const char *p = args, *np; size_t len; while(p && isspace((unsigned char)*p)) p++; while(p && *p) { /* find location of next string and length of this one */ if((np = strchr(p, ' '))) len = (size_t)(np-p); else len = strlen(p); /* allocate and copy option */ if(*pass_argc >= MAXARG-1) fatal_exit("too many arguments: '%s'", p); pass_argv[*pass_argc] = (char*)malloc(len+1); if(!pass_argv[*pass_argc]) fatal_exit("add_opts: out of memory"); memcpy(pass_argv[*pass_argc], p, len); pass_argv[*pass_argc][len] = 0; (*pass_argc)++; /* go to next option */ p = np; while(p && isspace((unsigned char)*p)) p++; } } /** pretty print commandline for unbound in this test */ static void echo_cmdline(int argc, char* argv[]) { int i; fprintf(stderr, "testbound is starting:"); for(i=0; ititle); return scen; } /** remove config file at exit */ static void remove_configfile(void) { struct config_strlist* p; for(p=cfgfiles; p; p=p->next) unlink(p->str); config_delstrlist(cfgfiles); cfgfiles = NULL; } /** * Main fake event test program. Setup, teardown and report errors. * @param argc: arg count. * @param argv: array of commandline arguments. * @return program failure if test fails. */ int main(int argc, char* argv[]) { int c, res; int pass_argc = 0; char* pass_argv[MAXARG]; char* playback_file = NULL; int init_optind = optind; char* init_optarg = optarg; struct replay_scenario* scen = NULL; /* we do not want the test to depend on the timezone */ (void)putenv("TZ=UTC"); memset(pass_argv, 0, sizeof(pass_argv)); #ifdef HAVE_SYSTEMD /* we do not want the test to use systemd daemon startup notification*/ (void)unsetenv("NOTIFY_SOCKET"); #endif /* HAVE_SYSTEMD */ log_init(NULL, 0, NULL); /* determine commandline options for the daemon */ pass_argc = 1; pass_argv[0] = "unbound"; add_opts("-d", &pass_argc, pass_argv); while( (c=getopt(argc, argv, "12egciho:p:s")) != -1) { switch(c) { case 's': free(pass_argv[1]); testbound_selftest(); checklock_stop(); if(log_get_lock()) { lock_basic_destroy((lock_basic_type*)log_get_lock()); } exit(0); case '1': #ifdef USE_SHA1 printf("SHA1 supported\n"); exit(0); #else printf("SHA1 not supported\n"); exit(1); #endif break; case '2': #if (defined(HAVE_EVP_SHA256) || defined(HAVE_NSS) || defined(HAVE_NETTLE)) && defined(USE_SHA2) printf("SHA256 supported\n"); exit(0); #else printf("SHA256 not supported\n"); exit(1); #endif break; case 'e': #if defined(USE_ECDSA) printf("ECDSA supported\n"); exit(0); #else printf("ECDSA not supported\n"); exit(1); #endif break; case 'g': #ifdef USE_GOST if(sldns_key_EVP_load_gost_id()) { printf("GOST supported\n"); exit(0); } else { printf("GOST not supported\n"); exit(1); } #else printf("GOST not supported\n"); exit(1); #endif break; case 'c': #ifdef CLIENT_SUBNET printf("CLIENT_SUBNET supported\n"); exit(0); #else printf("CLIENT_SUBNET not supported\n"); exit(1); #endif break; case 'i': #ifdef USE_IPSECMOD printf("IPSECMOD supported\n"); exit(0); #else printf("IPSECMOD not supported\n"); exit(1); #endif break; case 'p': playback_file = optarg; break; case 'o': add_opts(optarg, &pass_argc, pass_argv); break; case '?': case 'h': default: testbound_usage(); exit(1); } } argc -= optind; /* argv += optind; not using further arguments */ if(argc != 0) { testbound_usage(); exit(1); } log_info("Start of %s testbound program.", PACKAGE_STRING); if(atexit(&remove_configfile) != 0) fatal_exit("atexit() failed: %s", strerror(errno)); /* setup test environment */ scen = setup_playback(playback_file, &pass_argc, pass_argv); /* init fake event backend */ fake_event_init(scen); pass_argv[pass_argc] = NULL; echo_cmdline(pass_argc, pass_argv); /* reset getopt processing */ optind = init_optind; optarg = init_optarg; /* run the normal daemon */ res = daemon_main(pass_argc, pass_argv); fake_event_cleanup(); for(c=1; c #include #ifdef HAVE_TIME_H #include #endif #include #include #include #include "sldns/sbuffer.h" #include "util/config_file.h" #include "util/net_help.h" #include "util/netevent.h" #include "util/log.h" #include "util/storage/slabhash.h" #include "util/storage/lookup3.h" #include "dnscrypt/cert.h" #include "dnscrypt/dnscrypt.h" #include "dnscrypt/dnscrypt_config.h" #include /** * \file * dnscrypt functions for encrypting DNS packets. */ #define DNSCRYPT_QUERY_BOX_OFFSET \ (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_PUBLICKEYBYTES + \ crypto_box_HALF_NONCEBYTES) // 8 bytes: magic header (CERT_MAGIC_HEADER) // 12 bytes: the client's nonce // 12 bytes: server nonce extension // 16 bytes: Poly1305 MAC (crypto_box_ZEROBYTES - crypto_box_BOXZEROBYTES) #define DNSCRYPT_REPLY_BOX_OFFSET \ (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_HALF_NONCEBYTES + \ crypto_box_HALF_NONCEBYTES) /** * Shared secret cache key length. * secret key. * 1 byte: ES_VERSION[1] * 32 bytes: client crypto_box_PUBLICKEYBYTES * 32 bytes: server crypto_box_SECRETKEYBYTES */ #define DNSCRYPT_SHARED_SECRET_KEY_LENGTH \ (1 + crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES) struct shared_secret_cache_key { /** the hash table key */ uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH]; /** the hash table entry, data is uint8_t pointer of size crypto_box_BEFORENMBYTES which contains the shared secret. */ struct lruhash_entry entry; }; struct nonce_cache_key { /** the nonce used by the client */ uint8_t nonce[crypto_box_HALF_NONCEBYTES]; /** the client_magic used by the client, this is associated to 1 cert only */ uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN]; /** the client public key */ uint8_t client_publickey[crypto_box_PUBLICKEYBYTES]; /** the hash table entry, data is uint8_t */ struct lruhash_entry entry; }; /** * Generate a key suitable to find shared secret in slabhash. * \param[in] key: a uint8_t pointer of size DNSCRYPT_SHARED_SECRET_KEY_LENGTH * \param[in] esversion: The es version least significant byte. * \param[in] pk: The public key of the client. uint8_t pointer of size * crypto_box_PUBLICKEYBYTES. * \param[in] sk: The secret key of the server matching the magic query number. * uint8_t pointer of size crypto_box_SECRETKEYBYTES. * \return the hash of the key. */ static uint32_t dnsc_shared_secrets_cache_key(uint8_t* key, uint8_t esversion, uint8_t* pk, uint8_t* sk) { key[0] = esversion; memcpy(key + 1, pk, crypto_box_PUBLICKEYBYTES); memcpy(key + 1 + crypto_box_PUBLICKEYBYTES, sk, crypto_box_SECRETKEYBYTES); return hashlittle(key, DNSCRYPT_SHARED_SECRET_KEY_LENGTH, 0); } /** * Inserts a shared secret into the shared_secrets_cache slabhash. * The shared secret is copied so the caller can use it freely without caring * about the cache entry being evicted or not. * \param[in] cache: the slabhash in which to look for the key. * \param[in] key: a uint8_t pointer of size DNSCRYPT_SHARED_SECRET_KEY_LENGTH * which contains the key of the shared secret. * \param[in] hash: the hash of the key. * \param[in] nmkey: a uint8_t pointer of size crypto_box_BEFORENMBYTES which * contains the shared secret. */ static void dnsc_shared_secret_cache_insert(struct slabhash *cache, uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH], uint32_t hash, uint8_t nmkey[crypto_box_BEFORENMBYTES]) { struct shared_secret_cache_key* k = (struct shared_secret_cache_key*)calloc(1, sizeof(*k)); uint8_t* d = malloc(crypto_box_BEFORENMBYTES); if(!k || !d) { free(k); free(d); return; } memcpy(d, nmkey, crypto_box_BEFORENMBYTES); lock_rw_init(&k->entry.lock); memcpy(k->key, key, DNSCRYPT_SHARED_SECRET_KEY_LENGTH); k->entry.hash = hash; k->entry.key = k; k->entry.data = d; slabhash_insert(cache, hash, &k->entry, d, NULL); } /** * Lookup a record in shared_secrets_cache. * \param[in] cache: a pointer to shared_secrets_cache slabhash. * \param[in] key: a uint8_t pointer of size DNSCRYPT_SHARED_SECRET_KEY_LENGTH * containing the key to look for. * \param[in] hash: a hash of the key. * \return a pointer to the locked cache entry or NULL on failure. */ static struct lruhash_entry* dnsc_shared_secrets_lookup(struct slabhash* cache, uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH], uint32_t hash) { return slabhash_lookup(cache, hash, key, 0); } /** * Generate a key hash suitable to find a nonce in slabhash. * \param[in] nonce: a uint8_t pointer of size crypto_box_HALF_NONCEBYTES * \param[in] magic_query: a uint8_t pointer of size DNSCRYPT_MAGIC_HEADER_LEN * \param[in] pk: The public key of the client. uint8_t pointer of size * crypto_box_PUBLICKEYBYTES. * \return the hash of the key. */ static uint32_t dnsc_nonce_cache_key_hash(const uint8_t nonce[crypto_box_HALF_NONCEBYTES], const uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN], const uint8_t pk[crypto_box_PUBLICKEYBYTES]) { uint32_t h = 0; h = hashlittle(nonce, crypto_box_HALF_NONCEBYTES, h); h = hashlittle(magic_query, DNSCRYPT_MAGIC_HEADER_LEN, h); return hashlittle(pk, crypto_box_PUBLICKEYBYTES, h); } /** * Inserts a nonce, magic_query, pk tuple into the nonces_cache slabhash. * \param[in] cache: the slabhash in which to look for the key. * \param[in] nonce: a uint8_t pointer of size crypto_box_HALF_NONCEBYTES * \param[in] magic_query: a uint8_t pointer of size DNSCRYPT_MAGIC_HEADER_LEN * \param[in] pk: The public key of the client. uint8_t pointer of size * crypto_box_PUBLICKEYBYTES. * \param[in] hash: the hash of the key. */ static void dnsc_nonce_cache_insert(struct slabhash *cache, const uint8_t nonce[crypto_box_HALF_NONCEBYTES], const uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN], const uint8_t pk[crypto_box_PUBLICKEYBYTES], uint32_t hash) { struct nonce_cache_key* k = (struct nonce_cache_key*)calloc(1, sizeof(*k)); if(!k) { free(k); return; } lock_rw_init(&k->entry.lock); memcpy(k->nonce, nonce, crypto_box_HALF_NONCEBYTES); memcpy(k->magic_query, magic_query, DNSCRYPT_MAGIC_HEADER_LEN); memcpy(k->client_publickey, pk, crypto_box_PUBLICKEYBYTES); k->entry.hash = hash; k->entry.key = k; k->entry.data = NULL; slabhash_insert(cache, hash, &k->entry, NULL, NULL); } /** * Lookup a record in nonces_cache. * \param[in] cache: the slabhash in which to look for the key. * \param[in] nonce: a uint8_t pointer of size crypto_box_HALF_NONCEBYTES * \param[in] magic_query: a uint8_t pointer of size DNSCRYPT_MAGIC_HEADER_LEN * \param[in] pk: The public key of the client. uint8_t pointer of size * crypto_box_PUBLICKEYBYTES. * \param[in] hash: the hash of the key. * \return a pointer to the locked cache entry or NULL on failure. */ static struct lruhash_entry* dnsc_nonces_lookup(struct slabhash* cache, const uint8_t nonce[crypto_box_HALF_NONCEBYTES], const uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN], const uint8_t pk[crypto_box_PUBLICKEYBYTES], uint32_t hash) { struct nonce_cache_key k; memset(&k, 0, sizeof(k)); k.entry.hash = hash; memcpy(k.nonce, nonce, crypto_box_HALF_NONCEBYTES); memcpy(k.magic_query, magic_query, DNSCRYPT_MAGIC_HEADER_LEN); memcpy(k.client_publickey, pk, crypto_box_PUBLICKEYBYTES); return slabhash_lookup(cache, hash, &k, 0); } /** * Decrypt a query using the dnsccert that was found using dnsc_find_cert. * The client nonce will be extracted from the encrypted query and stored in * client_nonce, a shared secret will be computed and stored in nmkey and the * buffer will be decrypted inplace. * \param[in] env the dnscrypt environment. * \param[in] cert the cert that matches this encrypted query. * \param[in] client_nonce where the client nonce will be stored. * \param[in] nmkey where the shared secret key will be written. * \param[in] buffer the encrypted buffer. * \return 0 on success. */ static int dnscrypt_server_uncurve(struct dnsc_env* env, const dnsccert *cert, uint8_t client_nonce[crypto_box_HALF_NONCEBYTES], uint8_t nmkey[crypto_box_BEFORENMBYTES], struct sldns_buffer* buffer) { size_t len = sldns_buffer_limit(buffer); uint8_t *const buf = sldns_buffer_begin(buffer); uint8_t nonce[crypto_box_NONCEBYTES]; struct dnscrypt_query_header *query_header; // shared secret cache uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH]; struct lruhash_entry* entry; uint32_t hash; uint32_t nonce_hash; if (len <= DNSCRYPT_QUERY_HEADER_SIZE) { return -1; } query_header = (struct dnscrypt_query_header *)buf; /* Detect replay attacks */ nonce_hash = dnsc_nonce_cache_key_hash( query_header->nonce, cert->magic_query, query_header->publickey); lock_basic_lock(&env->nonces_cache_lock); entry = dnsc_nonces_lookup( env->nonces_cache, query_header->nonce, cert->magic_query, query_header->publickey, nonce_hash); if(entry) { lock_rw_unlock(&entry->lock); env->num_query_dnscrypt_replay++; lock_basic_unlock(&env->nonces_cache_lock); return -1; } dnsc_nonce_cache_insert( env->nonces_cache, query_header->nonce, cert->magic_query, query_header->publickey, nonce_hash); lock_basic_unlock(&env->nonces_cache_lock); /* Find existing shared secret */ hash = dnsc_shared_secrets_cache_key(key, cert->es_version[1], query_header->publickey, cert->keypair->crypt_secretkey); entry = dnsc_shared_secrets_lookup(env->shared_secrets_cache, key, hash); if(!entry) { lock_basic_lock(&env->shared_secrets_cache_lock); env->num_query_dnscrypt_secret_missed_cache++; lock_basic_unlock(&env->shared_secrets_cache_lock); if(cert->es_version[1] == 2) { #ifdef USE_DNSCRYPT_XCHACHA20 if (crypto_box_curve25519xchacha20poly1305_beforenm( nmkey, query_header->publickey, cert->keypair->crypt_secretkey) != 0) { return -1; } #else return -1; #endif } else { if (crypto_box_beforenm(nmkey, query_header->publickey, cert->keypair->crypt_secretkey) != 0) { return -1; } } // Cache the shared secret we just computed. dnsc_shared_secret_cache_insert(env->shared_secrets_cache, key, hash, nmkey); } else { /* copy shared secret and unlock entry */ memcpy(nmkey, entry->data, crypto_box_BEFORENMBYTES); lock_rw_unlock(&entry->lock); } memcpy(nonce, query_header->nonce, crypto_box_HALF_NONCEBYTES); memset(nonce + crypto_box_HALF_NONCEBYTES, 0, crypto_box_HALF_NONCEBYTES); if(cert->es_version[1] == 2) { #ifdef USE_DNSCRYPT_XCHACHA20 if (crypto_box_curve25519xchacha20poly1305_open_easy_afternm (buf, buf + DNSCRYPT_QUERY_BOX_OFFSET, len - DNSCRYPT_QUERY_BOX_OFFSET, nonce, nmkey) != 0) { return -1; } #else return -1; #endif } else { if (crypto_box_open_easy_afternm (buf, buf + DNSCRYPT_QUERY_BOX_OFFSET, len - DNSCRYPT_QUERY_BOX_OFFSET, nonce, nmkey) != 0) { return -1; } } len -= DNSCRYPT_QUERY_HEADER_SIZE; while (*sldns_buffer_at(buffer, --len) == 0) ; if (*sldns_buffer_at(buffer, len) != 0x80) { return -1; } memcpy(client_nonce, nonce, crypto_box_HALF_NONCEBYTES); sldns_buffer_set_position(buffer, 0); sldns_buffer_set_limit(buffer, len); return 0; } /** * Add random padding to a buffer, according to a client nonce. * The length has to depend on the query in order to avoid reply attacks. * * @param buf a buffer * @param len the initial size of the buffer * @param max_len the maximum size * @param nonce a nonce, made of the client nonce repeated twice * @param secretkey * @return the new size, after padding */ size_t dnscrypt_pad(uint8_t *buf, const size_t len, const size_t max_len, const uint8_t *nonce, const uint8_t *secretkey) { uint8_t *buf_padding_area = buf + len; size_t padded_len; uint32_t rnd; // no padding if (max_len < len + DNSCRYPT_MIN_PAD_LEN) return len; assert(nonce[crypto_box_HALF_NONCEBYTES] == nonce[0]); crypto_stream((unsigned char *)&rnd, (unsigned long long)sizeof(rnd), nonce, secretkey); padded_len = len + DNSCRYPT_MIN_PAD_LEN + rnd % (max_len - len - DNSCRYPT_MIN_PAD_LEN + 1); padded_len += DNSCRYPT_BLOCK_SIZE - padded_len % DNSCRYPT_BLOCK_SIZE; if (padded_len > max_len) padded_len = max_len; memset(buf_padding_area, 0, padded_len - len); *buf_padding_area = 0x80; return padded_len; } uint64_t dnscrypt_hrtime(void) { struct timeval tv; uint64_t ts = (uint64_t)0U; int ret; ret = gettimeofday(&tv, NULL); if (ret == 0) { ts = (uint64_t)tv.tv_sec * 1000000U + (uint64_t)tv.tv_usec; } else { log_err("gettimeofday: %s", strerror(errno)); } return ts; } /** * Add the server nonce part to once. * The nonce is made half of client nonce and the seconf half of the server * nonce, both of them of size crypto_box_HALF_NONCEBYTES. * \param[in] nonce: a uint8_t* of size crypto_box_NONCEBYTES */ static void add_server_nonce(uint8_t *nonce) { randombytes_buf(nonce + crypto_box_HALF_NONCEBYTES, 8/*tsn*/+4/*suffix*/); } /** * Encrypt a reply using the dnsccert that was used with the query. * The client nonce will be extracted from the encrypted query and stored in * The buffer will be encrypted inplace. * \param[in] cert the dnsccert that matches this encrypted query. * \param[in] client_nonce client nonce used during the query * \param[in] nmkey shared secret key used during the query. * \param[in] buffer the buffer where to encrypt the reply. * \param[in] udp if whether or not it is a UDP query. * \param[in] max_udp_size configured max udp size. * \return 0 on success. */ static int dnscrypt_server_curve(const dnsccert *cert, uint8_t client_nonce[crypto_box_HALF_NONCEBYTES], uint8_t nmkey[crypto_box_BEFORENMBYTES], struct sldns_buffer* buffer, uint8_t udp, size_t max_udp_size) { size_t dns_reply_len = sldns_buffer_limit(buffer); size_t max_len = dns_reply_len + DNSCRYPT_MAX_PADDING \ + DNSCRYPT_REPLY_HEADER_SIZE; size_t max_reply_size = max_udp_size - 20U - 8U; uint8_t nonce[crypto_box_NONCEBYTES]; uint8_t *boxed; uint8_t *const buf = sldns_buffer_begin(buffer); size_t len = sldns_buffer_limit(buffer); if(udp){ if (max_len > max_reply_size) max_len = max_reply_size; } memcpy(nonce, client_nonce, crypto_box_HALF_NONCEBYTES); memcpy(nonce + crypto_box_HALF_NONCEBYTES, client_nonce, crypto_box_HALF_NONCEBYTES); boxed = buf + DNSCRYPT_REPLY_BOX_OFFSET; memmove(boxed + crypto_box_MACBYTES, buf, len); len = dnscrypt_pad(boxed + crypto_box_MACBYTES, len, max_len - DNSCRYPT_REPLY_HEADER_SIZE, nonce, cert->keypair->crypt_secretkey); sldns_buffer_set_at(buffer, DNSCRYPT_REPLY_BOX_OFFSET - crypto_box_BOXZEROBYTES, 0, crypto_box_ZEROBYTES); // add server nonce extension add_server_nonce(nonce); if(cert->es_version[1] == 2) { #ifdef USE_DNSCRYPT_XCHACHA20 if (crypto_box_curve25519xchacha20poly1305_easy_afternm (boxed, boxed + crypto_box_MACBYTES, len, nonce, nmkey) != 0) { return -1; } #else return -1; #endif } else { if (crypto_box_easy_afternm (boxed, boxed + crypto_box_MACBYTES, len, nonce, nmkey) != 0) { return -1; } } sldns_buffer_write_at(buffer, 0, DNSCRYPT_MAGIC_RESPONSE, DNSCRYPT_MAGIC_HEADER_LEN); sldns_buffer_write_at(buffer, DNSCRYPT_MAGIC_HEADER_LEN, nonce, crypto_box_NONCEBYTES); sldns_buffer_set_limit(buffer, len + DNSCRYPT_REPLY_HEADER_SIZE); return 0; } /** * Read the content of fname into buf. * \param[in] fname name of the file to read. * \param[in] buf the buffer in which to read the content of the file. * \param[in] count number of bytes to read. * \return 0 on success. */ static int dnsc_read_from_file(char *fname, char *buf, size_t count) { int fd; fd = open(fname, O_RDONLY); if (fd == -1) { return -1; } if (read(fd, buf, count) != (ssize_t)count) { close(fd); return -2; } close(fd); return 0; } /** * Given an absolute path on the original root, returns the absolute path * within the chroot. If chroot is disabled, the path is not modified. * No char * is malloced so there is no need to free this. * \param[in] cfg the configuration. * \param[in] path the path from the original root. * \return the path from inside the chroot. */ static char * dnsc_chroot_path(struct config_file *cfg, char *path) { char *nm; nm = path; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) nm += strlen(cfg->chrootdir); return nm; } /** * Parse certificates files provided by the configuration and load them into * dnsc_env. * \param[in] env the dnsc_env structure to load the certs into. * \param[in] cfg the configuration. * \return the number of certificates loaded. */ static int dnsc_parse_certs(struct dnsc_env *env, struct config_file *cfg) { struct config_strlist *head, *head2; size_t signed_cert_id; size_t rotated_cert_id; char *nm; env->signed_certs_count = 0U; env->rotated_certs_count = 0U; for (head = cfg->dnscrypt_provider_cert; head; head = head->next) { env->signed_certs_count++; } for (head = cfg->dnscrypt_provider_cert_rotated; head; head = head->next) { env->rotated_certs_count++; } env->signed_certs = sodium_allocarray(env->signed_certs_count, sizeof *env->signed_certs); env->rotated_certs = sodium_allocarray(env->rotated_certs_count, sizeof env->signed_certs); signed_cert_id = 0U; rotated_cert_id = 0U; for(head = cfg->dnscrypt_provider_cert; head; head = head->next, signed_cert_id++) { nm = dnsc_chroot_path(cfg, head->str); if(dnsc_read_from_file( nm, (char *)(env->signed_certs + signed_cert_id), sizeof(struct SignedCert)) != 0) { fatal_exit("dnsc_parse_certs: failed to load %s: %s", head->str, strerror(errno)); } for(head2 = cfg->dnscrypt_provider_cert_rotated; head2; head2 = head2->next) { if(strcmp(head->str, head2->str) == 0) { *(env->rotated_certs + rotated_cert_id) = env->signed_certs + signed_cert_id; rotated_cert_id++; verbose(VERB_OPS, "Cert %s is rotated and will not be distributed via DNS", head->str); break; } } verbose(VERB_OPS, "Loaded cert %s", head->str); } return signed_cert_id; } /** * Helper function to convert a binary key into a printable fingerprint. * \param[in] fingerprint the buffer in which to write the printable key. * \param[in] key the key to convert. */ void dnsc_key_to_fingerprint(char fingerprint[80U], const uint8_t * const key) { const size_t fingerprint_size = 80U; size_t fingerprint_pos = (size_t) 0U; size_t key_pos = (size_t) 0U; for (;;) { assert(fingerprint_size > fingerprint_pos); snprintf(&fingerprint[fingerprint_pos], fingerprint_size - fingerprint_pos, "%02X%02X", key[key_pos], key[key_pos + 1U]); key_pos += 2U; if (key_pos >= crypto_box_PUBLICKEYBYTES) { break; } fingerprint[fingerprint_pos + 4U] = ':'; fingerprint_pos += 5U; } } /** * Find the cert matching a DNSCrypt query. * \param[in] dnscenv The DNSCrypt environment, which contains the list of certs * supported by the server. * \param[in] buffer The encrypted DNS query. * \return a dnsccert * if we found a cert matching the magic_number of the * query, NULL otherwise. */ static const dnsccert * dnsc_find_cert(struct dnsc_env* dnscenv, struct sldns_buffer* buffer) { const dnsccert *certs = dnscenv->certs; struct dnscrypt_query_header *dnscrypt_header; size_t i; if (sldns_buffer_limit(buffer) < DNSCRYPT_QUERY_HEADER_SIZE) { return NULL; } dnscrypt_header = (struct dnscrypt_query_header *)sldns_buffer_begin(buffer); for (i = 0U; i < dnscenv->signed_certs_count; i++) { if (memcmp(certs[i].magic_query, dnscrypt_header->magic_query, DNSCRYPT_MAGIC_HEADER_LEN) == 0) { return &certs[i]; } } return NULL; } /** * Insert local-zone and local-data into configuration. * In order to be able to serve certs over TXT, we can reuse the local-zone and * local-data config option. The zone and qname are infered from the * provider_name and the content of the TXT record from the certificate content. * returns the number of certificate TXT record that were loaded. * < 0 in case of error. */ static int dnsc_load_local_data(struct dnsc_env* dnscenv, struct config_file *cfg) { size_t i, j; // Insert 'local-zone: "2.dnscrypt-cert.example.com" deny' if(!cfg_str2list_insert(&cfg->local_zones, strdup(dnscenv->provider_name), strdup("deny"))) { log_err("Could not load dnscrypt local-zone: %s deny", dnscenv->provider_name); return -1; } // Add local data entry of type: // 2.dnscrypt-cert.example.com 86400 IN TXT "DNSC......" for(i=0; isigned_certs_count; i++) { const char *ttl_class_type = " 86400 IN TXT \""; int rotated_cert = 0; uint32_t serial; uint16_t rrlen; char* rr; struct SignedCert *cert = dnscenv->signed_certs + i; // Check if the certificate is being rotated and should not be published for(j=0; jrotated_certs_count; j++){ if(cert == dnscenv->rotated_certs[j]) { rotated_cert = 1; break; } } memcpy(&serial, cert->serial, sizeof serial); serial = htonl(serial); if(rotated_cert) { verbose(VERB_OPS, "DNSCrypt: not adding cert with serial #%" PRIu32 " to local-data as it is rotated", serial ); continue; } if((unsigned)strlen(dnscenv->provider_name) >= (unsigned)0xffff0000) { /* guard against integer overflow in rrlen calculation */ verbose(VERB_OPS, "cert #%" PRIu32 " is too long", serial); continue; } rrlen = strlen(dnscenv->provider_name) + strlen(ttl_class_type) + 4 * sizeof(struct SignedCert) + // worst case scenario 1 + // trailing double quote 1; rr = malloc(rrlen); if(!rr) { log_err("Could not allocate memory"); return -2; } snprintf(rr, rrlen - 1, "%s 86400 IN TXT \"", dnscenv->provider_name); for(j=0; jlocal_data, strdup(rr)); free(rr); } return dnscenv->signed_certs_count; } static const char * key_get_es_version(uint8_t version[2]) { struct es_version { uint8_t es_version[2]; const char *name; }; const int num_versions = 2; struct es_version es_versions[] = { {{0x00, 0x01}, "X25519-XSalsa20Poly1305"}, {{0x00, 0x02}, "X25519-XChacha20Poly1305"}, }; int i; for(i=0; i < num_versions; i++){ if(es_versions[i].es_version[0] == version[0] && es_versions[i].es_version[1] == version[1]){ return es_versions[i].name; } } return NULL; } /** * Parse the secret key files from `dnscrypt-secret-key` config and populates * a list of dnsccert with es_version, magic number and secret/public keys * supported by dnscrypt listener. * \param[in] env The dnsc_env structure which will hold the keypairs. * \param[in] cfg The config with the secret key file paths. */ static int dnsc_parse_keys(struct dnsc_env *env, struct config_file *cfg) { struct config_strlist *head; size_t cert_id, keypair_id; size_t c; char *nm; env->keypairs_count = 0U; for (head = cfg->dnscrypt_secret_key; head; head = head->next) { env->keypairs_count++; } env->keypairs = sodium_allocarray(env->keypairs_count, sizeof *env->keypairs); env->certs = sodium_allocarray(env->signed_certs_count, sizeof *env->certs); cert_id = 0U; keypair_id = 0U; for(head = cfg->dnscrypt_secret_key; head; head = head->next, keypair_id++) { char fingerprint[80]; int found_cert = 0; KeyPair *current_keypair = &env->keypairs[keypair_id]; nm = dnsc_chroot_path(cfg, head->str); if(dnsc_read_from_file( nm, (char *)(current_keypair->crypt_secretkey), crypto_box_SECRETKEYBYTES) != 0) { fatal_exit("dnsc_parse_keys: failed to load %s: %s", head->str, strerror(errno)); } verbose(VERB_OPS, "Loaded key %s", head->str); if (crypto_scalarmult_base(current_keypair->crypt_publickey, current_keypair->crypt_secretkey) != 0) { fatal_exit("dnsc_parse_keys: could not generate public key from %s", head->str); } dnsc_key_to_fingerprint(fingerprint, current_keypair->crypt_publickey); verbose(VERB_OPS, "Crypt public key fingerprint for %s: %s", head->str, fingerprint); // find the cert matching this key for(c = 0; c < env->signed_certs_count; c++) { if(memcmp(current_keypair->crypt_publickey, env->signed_certs[c].server_publickey, crypto_box_PUBLICKEYBYTES) == 0) { dnsccert *current_cert = &env->certs[cert_id++]; found_cert = 1; current_cert->keypair = current_keypair; memcpy(current_cert->magic_query, env->signed_certs[c].magic_query, sizeof env->signed_certs[c].magic_query); memcpy(current_cert->es_version, env->signed_certs[c].version_major, sizeof env->signed_certs[c].version_major ); dnsc_key_to_fingerprint(fingerprint, current_cert->keypair->crypt_publickey); verbose(VERB_OPS, "Crypt public key fingerprint for %s: %s", head->str, fingerprint); verbose(VERB_OPS, "Using %s", key_get_es_version(current_cert->es_version)); #ifndef USE_DNSCRYPT_XCHACHA20 if (current_cert->es_version[1] == 0x02) { fatal_exit("Certificate for XChacha20 but libsodium does not support it."); } #endif } } if (!found_cert) { fatal_exit("dnsc_parse_keys: could not match certificate for key " "%s. Unable to determine ES version.", head->str); } } return cert_id; } static void sodium_misuse_handler(void) { fatal_exit( "dnscrypt: libsodium could not be initialized, this typically" " happens when no good source of entropy is found. If you run" " unbound in a chroot, make sure /dev/urandom is available. See" " https://www.unbound.net/documentation/unbound.conf.html"); } /** * ######################################################### * ############# Publicly accessible functions ############# * ######################################################### */ int dnsc_handle_curved_request(struct dnsc_env* dnscenv, struct comm_reply* repinfo) { struct comm_point* c = repinfo->c; repinfo->is_dnscrypted = 0; if( !c->dnscrypt ) { return 1; } // Attempt to decrypt the query. If it is not crypted, we may still need // to serve the certificate. verbose(VERB_ALGO, "handle request called on DNSCrypt socket"); if ((repinfo->dnsc_cert = dnsc_find_cert(dnscenv, c->buffer)) != NULL) { if(dnscrypt_server_uncurve(dnscenv, repinfo->dnsc_cert, repinfo->client_nonce, repinfo->nmkey, c->buffer) != 0){ verbose(VERB_ALGO, "dnscrypt: Failed to uncurve"); comm_point_drop_reply(repinfo); return 0; } repinfo->is_dnscrypted = 1; sldns_buffer_rewind(c->buffer); } return 1; } int dnsc_handle_uncurved_request(struct comm_reply *repinfo) { if(!repinfo->c->dnscrypt) { return 1; } sldns_buffer_copy(repinfo->c->dnscrypt_buffer, repinfo->c->buffer); if(!repinfo->is_dnscrypted) { return 1; } if(dnscrypt_server_curve(repinfo->dnsc_cert, repinfo->client_nonce, repinfo->nmkey, repinfo->c->dnscrypt_buffer, repinfo->c->type == comm_udp, repinfo->max_udp_size) != 0){ verbose(VERB_ALGO, "dnscrypt: Failed to curve cached missed answer"); comm_point_drop_reply(repinfo); return 0; } return 1; } struct dnsc_env * dnsc_create(void) { struct dnsc_env *env; #ifdef SODIUM_MISUSE_HANDLER sodium_set_misuse_handler(sodium_misuse_handler); #endif if (sodium_init() == -1) { fatal_exit("dnsc_create: could not initialize libsodium."); } env = (struct dnsc_env *) calloc(1, sizeof(struct dnsc_env)); lock_basic_init(&env->shared_secrets_cache_lock); lock_protect(&env->shared_secrets_cache_lock, &env->num_query_dnscrypt_secret_missed_cache, sizeof(env->num_query_dnscrypt_secret_missed_cache)); lock_basic_init(&env->nonces_cache_lock); lock_protect(&env->nonces_cache_lock, &env->nonces_cache, sizeof(env->nonces_cache)); lock_protect(&env->nonces_cache_lock, &env->num_query_dnscrypt_replay, sizeof(env->num_query_dnscrypt_replay)); return env; } int dnsc_apply_cfg(struct dnsc_env *env, struct config_file *cfg) { if(dnsc_parse_certs(env, cfg) <= 0) { fatal_exit("dnsc_apply_cfg: no cert file loaded"); } if(dnsc_parse_keys(env, cfg) <= 0) { fatal_exit("dnsc_apply_cfg: no key file loaded"); } randombytes_buf(env->hash_key, sizeof env->hash_key); env->provider_name = cfg->dnscrypt_provider; if(dnsc_load_local_data(env, cfg) <= 0) { fatal_exit("dnsc_apply_cfg: could not load local data"); } lock_basic_lock(&env->shared_secrets_cache_lock); env->shared_secrets_cache = slabhash_create( cfg->dnscrypt_shared_secret_cache_slabs, HASH_DEFAULT_STARTARRAY, cfg->dnscrypt_shared_secret_cache_size, dnsc_shared_secrets_sizefunc, dnsc_shared_secrets_compfunc, dnsc_shared_secrets_delkeyfunc, dnsc_shared_secrets_deldatafunc, NULL ); lock_basic_unlock(&env->shared_secrets_cache_lock); if(!env->shared_secrets_cache){ fatal_exit("dnsc_apply_cfg: could not create shared secrets cache."); } lock_basic_lock(&env->nonces_cache_lock); env->nonces_cache = slabhash_create( cfg->dnscrypt_nonce_cache_slabs, HASH_DEFAULT_STARTARRAY, cfg->dnscrypt_nonce_cache_size, dnsc_nonces_sizefunc, dnsc_nonces_compfunc, dnsc_nonces_delkeyfunc, dnsc_nonces_deldatafunc, NULL ); lock_basic_unlock(&env->nonces_cache_lock); return 0; } void dnsc_delete(struct dnsc_env *env) { if(!env) { return; } verbose(VERB_OPS, "DNSCrypt: Freeing environment."); sodium_free(env->signed_certs); sodium_free(env->rotated_certs); sodium_free(env->certs); sodium_free(env->keypairs); lock_basic_destroy(&env->shared_secrets_cache_lock); lock_basic_destroy(&env->nonces_cache_lock); slabhash_delete(env->shared_secrets_cache); slabhash_delete(env->nonces_cache); free(env); } /** * ######################################################### * ############# Shared secrets cache functions ############ * ######################################################### */ size_t dnsc_shared_secrets_sizefunc(void *k, void* ATTR_UNUSED(d)) { struct shared_secret_cache_key* ssk = (struct shared_secret_cache_key*)k; size_t key_size = sizeof(struct shared_secret_cache_key) + lock_get_mem(&ssk->entry.lock); size_t data_size = crypto_box_BEFORENMBYTES; (void)ssk; /* otherwise ssk is unused if no threading, or fixed locksize */ return key_size + data_size; } int dnsc_shared_secrets_compfunc(void *m1, void *m2) { return sodium_memcmp(m1, m2, DNSCRYPT_SHARED_SECRET_KEY_LENGTH); } void dnsc_shared_secrets_delkeyfunc(void *k, void* ATTR_UNUSED(arg)) { struct shared_secret_cache_key* ssk = (struct shared_secret_cache_key*)k; lock_rw_destroy(&ssk->entry.lock); free(ssk); } void dnsc_shared_secrets_deldatafunc(void* d, void* ATTR_UNUSED(arg)) { uint8_t* data = (uint8_t*)d; free(data); } /** * ######################################################### * ############### Nonces cache functions ################## * ######################################################### */ size_t dnsc_nonces_sizefunc(void *k, void* ATTR_UNUSED(d)) { struct nonce_cache_key* nk = (struct nonce_cache_key*)k; size_t key_size = sizeof(struct nonce_cache_key) + lock_get_mem(&nk->entry.lock); (void)nk; /* otherwise ssk is unused if no threading, or fixed locksize */ return key_size; } int dnsc_nonces_compfunc(void *m1, void *m2) { struct nonce_cache_key *k1 = m1, *k2 = m2; return sodium_memcmp( k1->nonce, k2->nonce, crypto_box_HALF_NONCEBYTES) != 0 || sodium_memcmp( k1->magic_query, k2->magic_query, DNSCRYPT_MAGIC_HEADER_LEN) != 0 || sodium_memcmp( k1->client_publickey, k2->client_publickey, crypto_box_PUBLICKEYBYTES) != 0; } void dnsc_nonces_delkeyfunc(void *k, void* ATTR_UNUSED(arg)) { struct nonce_cache_key* nk = (struct nonce_cache_key*)k; lock_rw_destroy(&nk->entry.lock); free(nk); } void dnsc_nonces_deldatafunc(void* ATTR_UNUSED(d), void* ATTR_UNUSED(arg)) { return; } unbound-1.13.1/dnscrypt/testdata/0000755000175000017500000000000014010434640016356 5ustar wouterwouterunbound-1.13.1/dnscrypt/testdata/keys1/0000755000175000017500000000000014010434640017412 5ustar wouterwouterunbound-1.13.1/dnscrypt/testdata/keys1/public.key0000644000175000017500000000004014010434640021374 0ustar wouterwouter¸_A¡O#÷ÛÈfó—ÌoD¶_eŶ)|'T¦éÜòOunbound-1.13.1/dnscrypt/testdata/keys1/secret.key0000644000175000017500000000010014010434640021400 0ustar wouterwouter-&ç6\Uùõñh`^"…ºz/C9‚ óˆ¸_A¡O#÷ÛÈfó—ÌoD¶_eŶ)|'T¦éÜòOunbound-1.13.1/dnscrypt/testdata/keys2/0000755000175000017500000000000014010434640017413 5ustar wouterwouterunbound-1.13.1/dnscrypt/testdata/keys2/public.key0000644000175000017500000000004014010434640021375 0ustar wouterwouterÃR òÒýeµô{ölˆÁKË€Î:5r\±}KÓçƒunbound-1.13.1/dnscrypt/testdata/keys2/secret.key0000644000175000017500000000010014010434640021401 0ustar wouterwouterçi%‚ 5 fÍ™–í ÉûŒí Bnêͯ.º“ÃR òÒýeµô{ölˆÁKË€Î:5r\±}KÓçƒunbound-1.13.1/dnscrypt/testdata/gencert.sh0000755000175000017500000000177614010434640020357 0ustar wouterwouter#!/bin/bash CERT_EXPIRE_DAYS="$(( 365 * 15 ))" DIR="$(dirname "$0")" if [[ "$PWD" != *tdir ]] then echo "You should run this script with a .tdir directory" exit 1 fi for i in 1 2 do # Ephemeral key rm -f "${i}.key" dnscrypt-wrapper --gen-crypt-keypair \ --crypt-secretkey-file="${i}.key" \ --provider-publickey-file="${DIR}/keys${i}/public.key" \ --provider-secretkey-file="${DIR}/keys${i}/secret.key" # Cert file for cipher in salsa chacha do rm -f "${i}_${cipher}.cert" extraarg="" if [ "${cipher}" == "chacha" ] then extraarg="-x" fi dnscrypt-wrapper ${extraarg} --gen-cert-file \ --provider-cert-file="${i}_${cipher}.cert" \ --crypt-secretkey-file="${i}.key" \ --provider-publickey-file="${DIR}/keys${i}/public.key" \ --provider-secretkey-file="${DIR}/keys${i}/secret.key" \ --cert-file-expire-days="${CERT_EXPIRE_DAYS}" done done unbound-1.13.1/dnscrypt/dnscrypt_config.h.in0000644000175000017500000000062614010434640020522 0ustar wouterwouter#ifndef UNBOUND_DNSCRYPT_CONFIG_H #define UNBOUND_DNSCRYPT_CONFIG_H /* * Process this file (dnscrypt_config.h.in) with AC_CONFIG_FILES to generate * dnscrypt_config.h. * * This file exists so that USE_DNSCRYPT can be used without including config.h. */ #if @ENABLE_DNSCRYPT@ /* ENABLE_DNSCRYPT */ # ifndef USE_DNSCRYPT # define USE_DNSCRYPT 1 # endif #endif #endif /* UNBOUND_DNSCRYPT_CONFIG_H */ unbound-1.13.1/dnscrypt/cert.h0000644000175000017500000000122614010434640015654 0ustar wouterwouter#ifndef UNBOUND_DNSCRYPT_CERT_H #define UNBOUND_DNSCRYPT_CERT_H /** * \file * certificate type for dnscrypt for use in other header files */ #include #define CERT_MAGIC_CERT "DNSC" #define CERT_MAJOR_VERSION 1 #define CERT_MINOR_VERSION 0 #define CERT_OLD_MAGIC_HEADER "7PYqwfzt" #define CERT_FILE_EXPIRE_DAYS 365 struct SignedCert { uint8_t magic_cert[4]; uint8_t version_major[2]; uint8_t version_minor[2]; // Signed Content uint8_t signed_content[64]; uint8_t server_publickey[crypto_box_PUBLICKEYBYTES]; uint8_t magic_query[8]; uint8_t serial[4]; uint8_t ts_begin[4]; uint8_t ts_end[4]; }; #endif unbound-1.13.1/dnscrypt/dnscrypt.h0000644000175000017500000001131114010434640016561 0ustar wouterwouter#ifndef UNBOUND_DNSCRYPT_H #define UNBOUND_DNSCRYPT_H /** * \file * dnscrypt functions for encrypting DNS packets. */ #include "dnscrypt/dnscrypt_config.h" #ifdef USE_DNSCRYPT #define DNSCRYPT_MAGIC_HEADER_LEN 8U #define DNSCRYPT_MAGIC_RESPONSE "r6fnvWj8" #ifndef DNSCRYPT_MAX_PADDING # define DNSCRYPT_MAX_PADDING 256U #endif #ifndef DNSCRYPT_BLOCK_SIZE # define DNSCRYPT_BLOCK_SIZE 64U #endif #ifndef DNSCRYPT_MIN_PAD_LEN # define DNSCRYPT_MIN_PAD_LEN 8U #endif #define crypto_box_HALF_NONCEBYTES (crypto_box_NONCEBYTES / 2U) #include "config.h" #include "dnscrypt/cert.h" #include "util/locks.h" #define DNSCRYPT_QUERY_HEADER_SIZE \ (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_PUBLICKEYBYTES + crypto_box_HALF_NONCEBYTES + crypto_box_MACBYTES) #define DNSCRYPT_RESPONSE_HEADER_SIZE \ (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_NONCEBYTES + crypto_box_MACBYTES) #define DNSCRYPT_REPLY_HEADER_SIZE \ (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_HALF_NONCEBYTES * 2 + crypto_box_MACBYTES) struct sldns_buffer; struct config_file; struct comm_reply; struct slabhash; typedef struct KeyPair_ { uint8_t crypt_publickey[crypto_box_PUBLICKEYBYTES]; uint8_t crypt_secretkey[crypto_box_SECRETKEYBYTES]; } KeyPair; typedef struct cert_ { uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN]; uint8_t es_version[2]; KeyPair *keypair; } dnsccert; struct dnsc_env { struct SignedCert *signed_certs; struct SignedCert **rotated_certs; dnsccert *certs; size_t signed_certs_count; size_t rotated_certs_count; uint8_t provider_publickey[crypto_sign_ed25519_PUBLICKEYBYTES]; uint8_t provider_secretkey[crypto_sign_ed25519_SECRETKEYBYTES]; KeyPair *keypairs; size_t keypairs_count; uint64_t nonce_ts_last; unsigned char hash_key[crypto_shorthash_KEYBYTES]; char * provider_name; /** Caches */ struct slabhash *shared_secrets_cache; /** lock on shared secret cache counters */ lock_basic_type shared_secrets_cache_lock; /** number of misses from shared_secrets_cache */ size_t num_query_dnscrypt_secret_missed_cache; /** slabhash keeping track of nonce/cient pk/server sk pairs. */ struct slabhash *nonces_cache; /** lock on nonces_cache, used to avoid race condition in updating the hash */ lock_basic_type nonces_cache_lock; /** number of replayed queries */ size_t num_query_dnscrypt_replay; }; struct dnscrypt_query_header { uint8_t magic_query[DNSCRYPT_MAGIC_HEADER_LEN]; uint8_t publickey[crypto_box_PUBLICKEYBYTES]; uint8_t nonce[crypto_box_HALF_NONCEBYTES]; uint8_t mac[crypto_box_MACBYTES]; }; /** * Initialize DNSCrypt environment. * Initialize sodium library and allocate the dnsc_env structure. * \return an uninitialized struct dnsc_env. */ struct dnsc_env * dnsc_create(void); /** * Apply configuration. * Read certificates and secret keys from configuration. Initialize hashkey and * provider name as well as loading cert TXT records. * In case of issue applying configuration, this function fatals. * \param[in] env the struct dnsc_env to populate. * \param[in] cfg the config_file struct with dnscrypt options. * \return 0 on success. */ int dnsc_apply_cfg(struct dnsc_env *env, struct config_file *cfg); /** * Delete DNSCrypt environment * */ void dnsc_delete(struct dnsc_env *env); /** * handle a crypted dnscrypt request. * Determine wether or not a query is coming over the dnscrypt listener and * attempt to uncurve it or detect if it is a certificate query. * return 0 in case of failure. */ int dnsc_handle_curved_request(struct dnsc_env* dnscenv, struct comm_reply* repinfo); /** * handle an unencrypted dnscrypt request. * Determine wether or not a query is going over the dnscrypt channel and * attempt to curve it unless it was not crypted like when it is a * certificate query. * \return 0 in case of failure. */ int dnsc_handle_uncurved_request(struct comm_reply *repinfo); /** * Computes the size of the shared secret cache entry. */ size_t dnsc_shared_secrets_sizefunc(void *k, void *d); /** * Compares two shared secret cache keys. */ int dnsc_shared_secrets_compfunc(void *m1, void *m2); /** * Function to delete a shared secret cache key. */ void dnsc_shared_secrets_delkeyfunc(void *k, void* arg); /** * Function to delete a share secret cache value. */ void dnsc_shared_secrets_deldatafunc(void* d, void* arg); /** * Computes the size of the nonce cache entry. */ size_t dnsc_nonces_sizefunc(void *k, void *d); /** * Compares two nonce cache keys. */ int dnsc_nonces_compfunc(void *m1, void *m2); /** * Function to delete a nonce cache key. */ void dnsc_nonces_delkeyfunc(void *k, void* arg); /** * Function to delete a nonce cache value. */ void dnsc_nonces_deldatafunc(void* d, void* arg); #endif /* USE_DNSCRYPT */ #endif unbound-1.13.1/LICENSE0000644000175000017500000000273214010434640013710 0ustar wouterwouterCopyright (c) 2007, NLnet Labs. All rights reserved. This software is open source. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the NLNET LABS nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. unbound-1.13.1/README0000644000175000017500000000072314010434640013561 0ustar wouterwouterUnbound README * ./configure && make && make install * You can use libevent if you want. libevent is useful when using many (10000) outgoing ports. By default max 256 ports are opened at the same time and the builtin alternative is equally capable and a little faster. * More detailed README, README.svn, README.tests in doc directory * manual pages can be found in doc directory, and are installed, unbound(8). * example configuration file doc/example.conf unbound-1.13.1/daemon/0000755000175000017500000000000014010434640014142 5ustar wouterwouterunbound-1.13.1/daemon/worker.h0000644000175000017500000001275614010434640015637 0ustar wouterwouter/* * daemon/worker.h - worker that handles a pending list of requests. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file describes the worker structure that holds a list of * pending requests and handles them. */ #ifndef DAEMON_WORKER_H #define DAEMON_WORKER_H #include "libunbound/worker.h" #include "util/netevent.h" #include "util/locks.h" #include "util/alloc.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" #include "daemon/stats.h" #include "util/module.h" #include "dnstap/dnstap.h" struct listen_dnsport; struct outside_network; struct config_file; struct daemon; struct listen_port; struct ub_randstate; struct regional; struct tube; struct daemon_remote; struct query_info; /** worker commands */ enum worker_commands { /** make the worker quit */ worker_cmd_quit, /** obtain statistics */ worker_cmd_stats, /** obtain statistics without statsclear */ worker_cmd_stats_noreset, /** execute remote control command */ worker_cmd_remote }; /** * Structure holding working information for unbound. * Holds globally visible information. */ struct worker { /** the thread number (in daemon array). First in struct for debug. */ int thread_num; /** global shared daemon structure */ struct daemon* daemon; /** thread id */ ub_thread_type thr_id; /** pipe, for commands for this worker */ struct tube* cmd; /** the event base this worker works with */ struct comm_base* base; /** the frontside listening interface where request events come in */ struct listen_dnsport* front; /** the backside outside network interface to the auth servers */ struct outside_network* back; /** ports to be used by this worker. */ int* ports; /** number of ports for this worker */ int numports; /** the signal handler */ struct comm_signal* comsig; /** commpoint to listen to commands. */ struct comm_point* cmd_com; /** timer for statistics */ struct comm_timer* stat_timer; /** ratelimit for errors, time value */ time_t err_limit_time; /** ratelimit for errors, packet count */ unsigned int err_limit_count; /** random() table for this worker. */ struct ub_randstate* rndstate; /** do we need to restart or quit (on signal) */ int need_to_exit; /** allocation cache for this thread */ struct alloc_cache alloc; /** per thread statistics */ struct ub_server_stats stats; /** thread scratch regional */ struct regional* scratchpad; /** module environment passed to modules, changed for this thread */ struct module_env env; #ifdef USE_DNSTAP /** dnstap environment, changed for this thread */ struct dt_env dtenv; #endif }; /** * Create the worker structure. Bare bones version, zeroed struct, * with backpointers only. Use worker_init on it later. * @param daemon: the daemon that this worker thread is part of. * @param id: the thread number from 0.. numthreads-1. * @param ports: the ports it is allowed to use, array. * @param n: the number of ports. * @return: the new worker or NULL on alloc failure. */ struct worker* worker_create(struct daemon* daemon, int id, int* ports, int n); /** * Initialize worker. * Allocates event base, listens to ports * @param worker: worker to initialize, created with worker_create. * @param cfg: configuration settings. * @param ports: list of shared query ports. * @param do_sigs: if true, worker installs signal handlers. * @return: false on error. */ int worker_init(struct worker* worker, struct config_file *cfg, struct listen_port* ports, int do_sigs); /** * Make worker work. */ void worker_work(struct worker* worker); /** * Delete worker. */ void worker_delete(struct worker* worker); /** * Send a command to a worker. Uses blocking writes. * @param worker: worker to send command to. * @param cmd: command to send. */ void worker_send_cmd(struct worker* worker, enum worker_commands cmd); /** * Init worker stats - includes server_stats_init, outside network and mesh. * @param worker: the worker to init */ void worker_stats_clear(struct worker* worker); #endif /* DAEMON_WORKER_H */ unbound-1.13.1/daemon/cachedump.c0000644000175000017500000005752714010434640016257 0ustar wouterwouter/* * daemon/cachedump.c - dump the cache to text format. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to read and write the cache(s) * to text format. */ #include "config.h" #include #include "daemon/cachedump.h" #include "daemon/remote.h" #include "daemon/worker.h" #include "services/cache/rrset.h" #include "services/cache/dns.h" #include "services/cache/infra.h" #include "util/data/msgreply.h" #include "util/regional.h" #include "util/net_help.h" #include "util/data/dname.h" #include "iterator/iterator.h" #include "iterator/iter_delegpt.h" #include "iterator/iter_utils.h" #include "iterator/iter_fwd.h" #include "iterator/iter_hints.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "sldns/str2wire.h" /** dump one rrset zonefile line */ static int dump_rrset_line(RES* ssl, struct ub_packed_rrset_key* k, time_t now, size_t i) { char s[65535]; if(!packed_rr_to_string(k, i, now, s, sizeof(s))) { return ssl_printf(ssl, "BADRR\n"); } return ssl_printf(ssl, "%s", s); } /** dump rrset key and data info */ static int dump_rrset(RES* ssl, struct ub_packed_rrset_key* k, struct packed_rrset_data* d, time_t now) { size_t i; /* rd lock held by caller */ if(!k || !d) return 1; if(k->id == 0) return 1; /* deleted */ if(d->ttl < now) return 1; /* expired */ /* meta line */ if(!ssl_printf(ssl, ";rrset%s " ARG_LL "d %u %u %d %d\n", (k->rk.flags & PACKED_RRSET_NSEC_AT_APEX)?" nsec_apex":"", (long long)(d->ttl - now), (unsigned)d->count, (unsigned)d->rrsig_count, (int)d->trust, (int)d->security )) return 0; for(i=0; icount + d->rrsig_count; i++) { if(!dump_rrset_line(ssl, k, now, i)) return 0; } return 1; } /** dump lruhash rrset cache */ static int dump_rrset_lruhash(RES* ssl, struct lruhash* h, time_t now) { struct lruhash_entry* e; /* lruhash already locked by caller */ /* walk in order of lru; best first */ for(e=h->lru_start; e; e = e->lru_next) { lock_rw_rdlock(&e->lock); if(!dump_rrset(ssl, (struct ub_packed_rrset_key*)e->key, (struct packed_rrset_data*)e->data, now)) { lock_rw_unlock(&e->lock); return 0; } lock_rw_unlock(&e->lock); } return 1; } /** dump rrset cache */ static int dump_rrset_cache(RES* ssl, struct worker* worker) { struct rrset_cache* r = worker->env.rrset_cache; size_t slab; if(!ssl_printf(ssl, "START_RRSET_CACHE\n")) return 0; for(slab=0; slabtable.size; slab++) { lock_quick_lock(&r->table.array[slab]->lock); if(!dump_rrset_lruhash(ssl, r->table.array[slab], *worker->env.now)) { lock_quick_unlock(&r->table.array[slab]->lock); return 0; } lock_quick_unlock(&r->table.array[slab]->lock); } return ssl_printf(ssl, "END_RRSET_CACHE\n"); } /** dump message to rrset reference */ static int dump_msg_ref(RES* ssl, struct ub_packed_rrset_key* k) { char* nm, *tp, *cl; nm = sldns_wire2str_dname(k->rk.dname, k->rk.dname_len); tp = sldns_wire2str_type(ntohs(k->rk.type)); cl = sldns_wire2str_class(ntohs(k->rk.rrset_class)); if(!nm || !cl || !tp) { free(nm); free(tp); free(cl); return ssl_printf(ssl, "BADREF\n"); } if(!ssl_printf(ssl, "%s %s %s %d\n", nm, cl, tp, (int)k->rk.flags)) { free(nm); free(tp); free(cl); return 0; } free(nm); free(tp); free(cl); return 1; } /** dump message entry */ static int dump_msg(RES* ssl, struct query_info* k, struct reply_info* d, time_t now) { size_t i; char* nm, *tp, *cl; if(!k || !d) return 1; if(d->ttl < now) return 1; /* expired */ nm = sldns_wire2str_dname(k->qname, k->qname_len); tp = sldns_wire2str_type(k->qtype); cl = sldns_wire2str_class(k->qclass); if(!nm || !tp || !cl) { free(nm); free(tp); free(cl); return 1; /* skip this entry */ } if(!rrset_array_lock(d->ref, d->rrset_count, now)) { /* rrsets have timed out or do not exist */ free(nm); free(tp); free(cl); return 1; /* skip this entry */ } /* meta line */ if(!ssl_printf(ssl, "msg %s %s %s %d %d " ARG_LL "d %d %u %u %u\n", nm, cl, tp, (int)d->flags, (int)d->qdcount, (long long)(d->ttl-now), (int)d->security, (unsigned)d->an_numrrsets, (unsigned)d->ns_numrrsets, (unsigned)d->ar_numrrsets)) { free(nm); free(tp); free(cl); rrset_array_unlock(d->ref, d->rrset_count); return 0; } free(nm); free(tp); free(cl); for(i=0; irrset_count; i++) { if(!dump_msg_ref(ssl, d->rrsets[i])) { rrset_array_unlock(d->ref, d->rrset_count); return 0; } } rrset_array_unlock(d->ref, d->rrset_count); return 1; } /** copy msg to worker pad */ static int copy_msg(struct regional* region, struct lruhash_entry* e, struct query_info** k, struct reply_info** d) { struct reply_info* rep = (struct reply_info*)e->data; if(rep->rrset_count > RR_COUNT_MAX) return 0; /* to protect against integer overflow */ *d = (struct reply_info*)regional_alloc_init(region, e->data, sizeof(struct reply_info) + sizeof(struct rrset_ref) * (rep->rrset_count-1) + sizeof(struct ub_packed_rrset_key*) * rep->rrset_count); if(!*d) return 0; (*d)->rrsets = (struct ub_packed_rrset_key**)(void *)( (uint8_t*)(&((*d)->ref[0])) + sizeof(struct rrset_ref) * rep->rrset_count); *k = (struct query_info*)regional_alloc_init(region, e->key, sizeof(struct query_info)); if(!*k) return 0; (*k)->qname = regional_alloc_init(region, (*k)->qname, (*k)->qname_len); return (*k)->qname != NULL; } /** dump lruhash msg cache */ static int dump_msg_lruhash(RES* ssl, struct worker* worker, struct lruhash* h) { struct lruhash_entry* e; struct query_info* k; struct reply_info* d; /* lruhash already locked by caller */ /* walk in order of lru; best first */ for(e=h->lru_start; e; e = e->lru_next) { regional_free_all(worker->scratchpad); lock_rw_rdlock(&e->lock); /* make copy of rrset in worker buffer */ if(!copy_msg(worker->scratchpad, e, &k, &d)) { lock_rw_unlock(&e->lock); return 0; } lock_rw_unlock(&e->lock); /* release lock so we can lookup the rrset references * in the rrset cache */ if(!dump_msg(ssl, k, d, *worker->env.now)) { return 0; } } return 1; } /** dump msg cache */ static int dump_msg_cache(RES* ssl, struct worker* worker) { struct slabhash* sh = worker->env.msg_cache; size_t slab; if(!ssl_printf(ssl, "START_MSG_CACHE\n")) return 0; for(slab=0; slabsize; slab++) { lock_quick_lock(&sh->array[slab]->lock); if(!dump_msg_lruhash(ssl, worker, sh->array[slab])) { lock_quick_unlock(&sh->array[slab]->lock); return 0; } lock_quick_unlock(&sh->array[slab]->lock); } return ssl_printf(ssl, "END_MSG_CACHE\n"); } int dump_cache(RES* ssl, struct worker* worker) { if(!dump_rrset_cache(ssl, worker)) return 0; if(!dump_msg_cache(ssl, worker)) return 0; return ssl_printf(ssl, "EOF\n"); } /** read a line from ssl into buffer */ static int ssl_read_buf(RES* ssl, sldns_buffer* buf) { return ssl_read_line(ssl, (char*)sldns_buffer_begin(buf), sldns_buffer_capacity(buf)); } /** check fixed text on line */ static int read_fixed(RES* ssl, sldns_buffer* buf, const char* str) { if(!ssl_read_buf(ssl, buf)) return 0; return (strcmp((char*)sldns_buffer_begin(buf), str) == 0); } /** load an RR into rrset */ static int load_rr(RES* ssl, sldns_buffer* buf, struct regional* region, struct ub_packed_rrset_key* rk, struct packed_rrset_data* d, unsigned int i, int is_rrsig, int* go_on, time_t now) { uint8_t rr[LDNS_RR_BUF_SIZE]; size_t rr_len = sizeof(rr), dname_len = 0; int status; /* read the line */ if(!ssl_read_buf(ssl, buf)) return 0; if(strncmp((char*)sldns_buffer_begin(buf), "BADRR\n", 6) == 0) { *go_on = 0; return 1; } status = sldns_str2wire_rr_buf((char*)sldns_buffer_begin(buf), rr, &rr_len, &dname_len, 3600, NULL, 0, NULL, 0); if(status != 0) { log_warn("error cannot parse rr: %s: %s", sldns_get_errorstr_parse(status), (char*)sldns_buffer_begin(buf)); return 0; } if(is_rrsig && sldns_wirerr_get_type(rr, rr_len, dname_len) != LDNS_RR_TYPE_RRSIG) { log_warn("error expected rrsig but got %s", (char*)sldns_buffer_begin(buf)); return 0; } /* convert ldns rr into packed_rr */ d->rr_ttl[i] = (time_t)sldns_wirerr_get_ttl(rr, rr_len, dname_len) + now; sldns_buffer_clear(buf); d->rr_len[i] = sldns_wirerr_get_rdatalen(rr, rr_len, dname_len)+2; d->rr_data[i] = (uint8_t*)regional_alloc_init(region, sldns_wirerr_get_rdatawl(rr, rr_len, dname_len), d->rr_len[i]); if(!d->rr_data[i]) { log_warn("error out of memory"); return 0; } /* if first entry, fill the key structure */ if(i==0) { rk->rk.type = htons(sldns_wirerr_get_type(rr, rr_len, dname_len)); rk->rk.rrset_class = htons(sldns_wirerr_get_class(rr, rr_len, dname_len)); rk->rk.dname_len = dname_len; rk->rk.dname = regional_alloc_init(region, rr, dname_len); if(!rk->rk.dname) { log_warn("error out of memory"); return 0; } } return 1; } /** move entry into cache */ static int move_into_cache(struct ub_packed_rrset_key* k, struct packed_rrset_data* d, struct worker* worker) { struct ub_packed_rrset_key* ak; struct packed_rrset_data* ad; size_t s, i, num = d->count + d->rrsig_count; struct rrset_ref ref; uint8_t* p; ak = alloc_special_obtain(&worker->alloc); if(!ak) { log_warn("error out of memory"); return 0; } ak->entry.data = NULL; ak->rk = k->rk; ak->entry.hash = rrset_key_hash(&k->rk); ak->rk.dname = (uint8_t*)memdup(k->rk.dname, k->rk.dname_len); if(!ak->rk.dname) { log_warn("error out of memory"); ub_packed_rrset_parsedelete(ak, &worker->alloc); return 0; } s = sizeof(*ad) + (sizeof(size_t) + sizeof(uint8_t*) + sizeof(time_t))* num; for(i=0; irr_len[i]; ad = (struct packed_rrset_data*)malloc(s); if(!ad) { log_warn("error out of memory"); ub_packed_rrset_parsedelete(ak, &worker->alloc); return 0; } p = (uint8_t*)ad; memmove(p, d, sizeof(*ad)); p += sizeof(*ad); memmove(p, &d->rr_len[0], sizeof(size_t)*num); p += sizeof(size_t)*num; memmove(p, &d->rr_data[0], sizeof(uint8_t*)*num); p += sizeof(uint8_t*)*num; memmove(p, &d->rr_ttl[0], sizeof(time_t)*num); p += sizeof(time_t)*num; for(i=0; irr_data[i], d->rr_len[i]); p += d->rr_len[i]; } packed_rrset_ptr_fixup(ad); ak->entry.data = ad; ref.key = ak; ref.id = ak->id; (void)rrset_cache_update(worker->env.rrset_cache, &ref, &worker->alloc, *worker->env.now); return 1; } /** load an rrset entry */ static int load_rrset(RES* ssl, sldns_buffer* buf, struct worker* worker) { char* s = (char*)sldns_buffer_begin(buf); struct regional* region = worker->scratchpad; struct ub_packed_rrset_key* rk; struct packed_rrset_data* d; unsigned int rr_count, rrsig_count, trust, security; long long ttl; unsigned int i; int go_on = 1; regional_free_all(region); rk = (struct ub_packed_rrset_key*)regional_alloc_zero(region, sizeof(*rk)); d = (struct packed_rrset_data*)regional_alloc_zero(region, sizeof(*d)); if(!rk || !d) { log_warn("error out of memory"); return 0; } if(strncmp(s, ";rrset", 6) != 0) { log_warn("error expected ';rrset' but got %s", s); return 0; } s += 6; if(strncmp(s, " nsec_apex", 10) == 0) { s += 10; rk->rk.flags |= PACKED_RRSET_NSEC_AT_APEX; } if(sscanf(s, " " ARG_LL "d %u %u %u %u", &ttl, &rr_count, &rrsig_count, &trust, &security) != 5) { log_warn("error bad rrset spec %s", s); return 0; } if(rr_count == 0 && rrsig_count == 0) { log_warn("bad rrset without contents"); return 0; } if(rr_count > RR_COUNT_MAX || rrsig_count > RR_COUNT_MAX) { log_warn("bad rrset with too many rrs"); return 0; } d->count = (size_t)rr_count; d->rrsig_count = (size_t)rrsig_count; d->security = (enum sec_status)security; d->trust = (enum rrset_trust)trust; d->ttl = (time_t)ttl + *worker->env.now; d->rr_len = regional_alloc_zero(region, sizeof(size_t)*(d->count+d->rrsig_count)); d->rr_ttl = regional_alloc_zero(region, sizeof(time_t)*(d->count+d->rrsig_count)); d->rr_data = regional_alloc_zero(region, sizeof(uint8_t*)*(d->count+d->rrsig_count)); if(!d->rr_len || !d->rr_ttl || !d->rr_data) { log_warn("error out of memory"); return 0; } /* read the rr's themselves */ for(i=0; ienv.now)) { log_warn("could not read rr %u", i); return 0; } } for(i=0; ienv.now)) { log_warn("could not read rrsig %u", i); return 0; } } if(!go_on) { /* skip this entry */ return 1; } return move_into_cache(rk, d, worker); } /** load rrset cache */ static int load_rrset_cache(RES* ssl, struct worker* worker) { sldns_buffer* buf = worker->env.scratch_buffer; if(!read_fixed(ssl, buf, "START_RRSET_CACHE")) return 0; while(ssl_read_buf(ssl, buf) && strcmp((char*)sldns_buffer_begin(buf), "END_RRSET_CACHE")!=0) { if(!load_rrset(ssl, buf, worker)) return 0; } return 1; } /** read qinfo from next three words */ static char* load_qinfo(char* str, struct query_info* qinfo, struct regional* region) { /* s is part of the buf */ char* s = str; uint8_t rr[LDNS_RR_BUF_SIZE]; size_t rr_len = sizeof(rr), dname_len = 0; int status; /* skip three words */ s = strchr(str, ' '); if(s) s = strchr(s+1, ' '); if(s) s = strchr(s+1, ' '); if(!s) { log_warn("error line too short, %s", str); return NULL; } s[0] = 0; s++; /* parse them */ status = sldns_str2wire_rr_question_buf(str, rr, &rr_len, &dname_len, NULL, 0, NULL, 0); if(status != 0) { log_warn("error cannot parse: %s %s", sldns_get_errorstr_parse(status), str); return NULL; } qinfo->qtype = sldns_wirerr_get_type(rr, rr_len, dname_len); qinfo->qclass = sldns_wirerr_get_class(rr, rr_len, dname_len); qinfo->qname_len = dname_len; qinfo->qname = (uint8_t*)regional_alloc_init(region, rr, dname_len); qinfo->local_alias = NULL; if(!qinfo->qname) { log_warn("error out of memory"); return NULL; } return s; } /** load a msg rrset reference */ static int load_ref(RES* ssl, sldns_buffer* buf, struct worker* worker, struct regional *region, struct ub_packed_rrset_key** rrset, int* go_on) { char* s = (char*)sldns_buffer_begin(buf); struct query_info qinfo; unsigned int flags; struct ub_packed_rrset_key* k; /* read line */ if(!ssl_read_buf(ssl, buf)) return 0; if(strncmp(s, "BADREF", 6) == 0) { *go_on = 0; /* its bad, skip it and skip message */ return 1; } s = load_qinfo(s, &qinfo, region); if(!s) { return 0; } if(sscanf(s, " %u", &flags) != 1) { log_warn("error cannot parse flags: %s", s); return 0; } /* lookup in cache */ k = rrset_cache_lookup(worker->env.rrset_cache, qinfo.qname, qinfo.qname_len, qinfo.qtype, qinfo.qclass, (uint32_t)flags, *worker->env.now, 0); if(!k) { /* not found or expired */ *go_on = 0; return 1; } /* store in result */ *rrset = packed_rrset_copy_region(k, region, *worker->env.now); lock_rw_unlock(&k->entry.lock); return (*rrset != NULL); } /** load a msg entry */ static int load_msg(RES* ssl, sldns_buffer* buf, struct worker* worker) { struct regional* region = worker->scratchpad; struct query_info qinf; struct reply_info rep; char* s = (char*)sldns_buffer_begin(buf); unsigned int flags, qdcount, security, an, ns, ar; long long ttl; size_t i; int go_on = 1; regional_free_all(region); if(strncmp(s, "msg ", 4) != 0) { log_warn("error expected msg but got %s", s); return 0; } s += 4; s = load_qinfo(s, &qinf, region); if(!s) { return 0; } /* read remainder of line */ if(sscanf(s, " %u %u " ARG_LL "d %u %u %u %u", &flags, &qdcount, &ttl, &security, &an, &ns, &ar) != 7) { log_warn("error cannot parse numbers: %s", s); return 0; } rep.flags = (uint16_t)flags; rep.qdcount = (uint16_t)qdcount; rep.ttl = (time_t)ttl; rep.prefetch_ttl = PREFETCH_TTL_CALC(rep.ttl); rep.serve_expired_ttl = rep.ttl + SERVE_EXPIRED_TTL; rep.security = (enum sec_status)security; if(an > RR_COUNT_MAX || ns > RR_COUNT_MAX || ar > RR_COUNT_MAX) { log_warn("error too many rrsets"); return 0; /* protect against integer overflow in alloc */ } rep.an_numrrsets = (size_t)an; rep.ns_numrrsets = (size_t)ns; rep.ar_numrrsets = (size_t)ar; rep.rrset_count = (size_t)an+(size_t)ns+(size_t)ar; rep.rrsets = (struct ub_packed_rrset_key**)regional_alloc_zero( region, sizeof(struct ub_packed_rrset_key*)*rep.rrset_count); /* fill repinfo with references */ for(i=0; ienv, &qinf, &rep, 0, 0, 0, NULL, flags)) { log_warn("error out of memory"); return 0; } return 1; } /** load msg cache */ static int load_msg_cache(RES* ssl, struct worker* worker) { sldns_buffer* buf = worker->env.scratch_buffer; if(!read_fixed(ssl, buf, "START_MSG_CACHE")) return 0; while(ssl_read_buf(ssl, buf) && strcmp((char*)sldns_buffer_begin(buf), "END_MSG_CACHE")!=0) { if(!load_msg(ssl, buf, worker)) return 0; } return 1; } int load_cache(RES* ssl, struct worker* worker) { if(!load_rrset_cache(ssl, worker)) return 0; if(!load_msg_cache(ssl, worker)) return 0; return read_fixed(ssl, worker->env.scratch_buffer, "EOF"); } /** print details on a delegation point */ static void print_dp_details(RES* ssl, struct worker* worker, struct delegpt* dp) { char buf[257]; struct delegpt_addr* a; int lame, dlame, rlame, rto, edns_vs, to, delay, tA = 0, tAAAA = 0, tother = 0; long long entry_ttl; struct rtt_info ri; uint8_t edns_lame_known; for(a = dp->target_list; a; a = a->next_target) { addr_to_str(&a->addr, a->addrlen, buf, sizeof(buf)); if(!ssl_printf(ssl, "%-16s\t", buf)) return; if(a->bogus) { if(!ssl_printf(ssl, "Address is BOGUS. ")) return; } /* lookup in infra cache */ delay=0; entry_ttl = infra_get_host_rto(worker->env.infra_cache, &a->addr, a->addrlen, dp->name, dp->namelen, &ri, &delay, *worker->env.now, &tA, &tAAAA, &tother); if(entry_ttl == -2 && ri.rto >= USEFUL_SERVER_TOP_TIMEOUT) { if(!ssl_printf(ssl, "expired, rto %d msec, tA %d " "tAAAA %d tother %d.\n", ri.rto, tA, tAAAA, tother)) return; continue; } if(entry_ttl == -1 || entry_ttl == -2) { if(!ssl_printf(ssl, "not in infra cache.\n")) return; continue; /* skip stuff not in infra cache */ } /* uses type_A because most often looked up, but other * lameness won't be reported then */ if(!infra_get_lame_rtt(worker->env.infra_cache, &a->addr, a->addrlen, dp->name, dp->namelen, LDNS_RR_TYPE_A, &lame, &dlame, &rlame, &rto, *worker->env.now)) { if(!ssl_printf(ssl, "not in infra cache.\n")) return; continue; /* skip stuff not in infra cache */ } if(!ssl_printf(ssl, "%s%s%s%srto %d msec, ttl " ARG_LL "d, " "ping %d var %d rtt %d, tA %d, tAAAA %d, tother %d", lame?"LAME ":"", dlame?"NoDNSSEC ":"", a->lame?"AddrWasParentSide ":"", rlame?"NoAuthButRecursive ":"", rto, entry_ttl, ri.srtt, ri.rttvar, rtt_notimeout(&ri), tA, tAAAA, tother)) return; if(delay) if(!ssl_printf(ssl, ", probedelay %d", delay)) return; if(infra_host(worker->env.infra_cache, &a->addr, a->addrlen, dp->name, dp->namelen, *worker->env.now, &edns_vs, &edns_lame_known, &to)) { if(edns_vs == -1) { if(!ssl_printf(ssl, ", noEDNS%s.", edns_lame_known?" probed":" assumed")) return; } else { if(!ssl_printf(ssl, ", EDNS %d%s.", edns_vs, edns_lame_known?" probed":" assumed")) return; } } if(!ssl_printf(ssl, "\n")) return; } } /** print main dp info */ static void print_dp_main(RES* ssl, struct delegpt* dp, struct dns_msg* msg) { size_t i, n_ns, n_miss, n_addr, n_res, n_avail; /* print the dp */ if(msg) for(i=0; irep->rrset_count; i++) { struct ub_packed_rrset_key* k = msg->rep->rrsets[i]; struct packed_rrset_data* d = (struct packed_rrset_data*)k->entry.data; if(d->security == sec_status_bogus) { if(!ssl_printf(ssl, "Address is BOGUS:\n")) return; } if(!dump_rrset(ssl, k, d, 0)) return; } delegpt_count_ns(dp, &n_ns, &n_miss); delegpt_count_addr(dp, &n_addr, &n_res, &n_avail); /* since dp has not been used by iterator, all are available*/ if(!ssl_printf(ssl, "Delegation with %d names, of which %d " "can be examined to query further addresses.\n" "%sIt provides %d IP addresses.\n", (int)n_ns, (int)n_miss, (dp->bogus?"It is BOGUS. ":""), (int)n_addr)) return; } int print_deleg_lookup(RES* ssl, struct worker* worker, uint8_t* nm, size_t nmlen, int ATTR_UNUSED(nmlabs)) { /* deep links into the iterator module */ struct delegpt* dp; struct dns_msg* msg; struct regional* region = worker->scratchpad; char b[260]; struct query_info qinfo; struct iter_hints_stub* stub; regional_free_all(region); qinfo.qname = nm; qinfo.qname_len = nmlen; qinfo.qtype = LDNS_RR_TYPE_A; qinfo.qclass = LDNS_RR_CLASS_IN; qinfo.local_alias = NULL; dname_str(nm, b); if(!ssl_printf(ssl, "The following name servers are used for lookup " "of %s\n", b)) return 0; dp = forwards_lookup(worker->env.fwds, nm, qinfo.qclass); if(dp) { if(!ssl_printf(ssl, "forwarding request:\n")) return 0; print_dp_main(ssl, dp, NULL); print_dp_details(ssl, worker, dp); return 1; } while(1) { dp = dns_cache_find_delegation(&worker->env, nm, nmlen, qinfo.qtype, qinfo.qclass, region, &msg, *worker->env.now); if(!dp) { return ssl_printf(ssl, "no delegation from " "cache; goes to configured roots\n"); } /* go up? */ if(iter_dp_is_useless(&qinfo, BIT_RD, dp)) { print_dp_main(ssl, dp, msg); print_dp_details(ssl, worker, dp); if(!ssl_printf(ssl, "cache delegation was " "useless (no IP addresses)\n")) return 0; if(dname_is_root(nm)) { /* goes to root config */ return ssl_printf(ssl, "no delegation from " "cache; goes to configured roots\n"); } else { /* useless, goes up */ nm = dp->name; nmlen = dp->namelen; dname_remove_label(&nm, &nmlen); dname_str(nm, b); if(!ssl_printf(ssl, "going up, lookup %s\n", b)) return 0; continue; } } stub = hints_lookup_stub(worker->env.hints, nm, qinfo.qclass, dp); if(stub) { if(stub->noprime) { if(!ssl_printf(ssl, "The noprime stub servers " "are used:\n")) return 0; } else { if(!ssl_printf(ssl, "The stub is primed " "with servers:\n")) return 0; } print_dp_main(ssl, stub->dp, NULL); print_dp_details(ssl, worker, stub->dp); } else { print_dp_main(ssl, dp, msg); print_dp_details(ssl, worker, dp); } break; } return 1; } unbound-1.13.1/daemon/daemon.c0000644000175000017500000006050014010434640015552 0ustar wouterwouter/* * daemon/daemon.c - collection of workers that handles requests. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * The daemon consists of global settings and a number of workers. */ #include "config.h" #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_RAND_H #include #endif #ifdef HAVE_OPENSSL_CONF_H #include #endif #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #ifdef HAVE_TIME_H #include #endif #include #ifdef HAVE_NSS /* nss3 */ #include "nss.h" #endif #include "daemon/daemon.h" #include "daemon/worker.h" #include "daemon/remote.h" #include "daemon/acl_list.h" #include "util/log.h" #include "util/config_file.h" #include "util/data/msgreply.h" #include "util/shm_side/shm_main.h" #include "util/storage/lookup3.h" #include "util/storage/slabhash.h" #include "util/tcp_conn_limit.h" #include "util/edns.h" #include "services/listen_dnsport.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" #include "services/localzone.h" #include "services/view.h" #include "services/modstack.h" #include "services/authzone.h" #include "util/module.h" #include "util/random.h" #include "util/tube.h" #include "util/net_help.h" #include "sldns/keyraw.h" #include "respip/respip.h" #include #ifdef HAVE_SYSTEMD #include #endif /** How many quit requests happened. */ static int sig_record_quit = 0; /** How many reload requests happened. */ static int sig_record_reload = 0; #if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS /** cleaner ssl memory freeup */ static void* comp_meth = NULL; #endif /** remove buffers for parsing and init */ int ub_c_lex_destroy(void); /** used when no other sighandling happens, so we don't die * when multiple signals in quick succession are sent to us. * @param sig: signal number. * @return signal handler return type (void or int). */ static RETSIGTYPE record_sigh(int sig) { #ifdef LIBEVENT_SIGNAL_PROBLEM /* cannot log, verbose here because locks may be held */ /* quit on signal, no cleanup and statistics, because installed libevent version is not threadsafe */ exit(0); #endif switch(sig) { case SIGTERM: #ifdef SIGQUIT case SIGQUIT: #endif #ifdef SIGBREAK case SIGBREAK: #endif case SIGINT: sig_record_quit++; break; #ifdef SIGHUP case SIGHUP: sig_record_reload++; break; #endif #ifdef SIGPIPE case SIGPIPE: break; #endif default: /* ignoring signal */ break; } } /** * Signal handling during the time when netevent is disabled. * Stores signals to replay later. */ static void signal_handling_record(void) { if( signal(SIGTERM, record_sigh) == SIG_ERR || #ifdef SIGQUIT signal(SIGQUIT, record_sigh) == SIG_ERR || #endif #ifdef SIGBREAK signal(SIGBREAK, record_sigh) == SIG_ERR || #endif #ifdef SIGHUP signal(SIGHUP, record_sigh) == SIG_ERR || #endif #ifdef SIGPIPE signal(SIGPIPE, SIG_IGN) == SIG_ERR || #endif signal(SIGINT, record_sigh) == SIG_ERR ) log_err("install sighandler: %s", strerror(errno)); } /** * Replay old signals. * @param wrk: worker that handles signals. */ static void signal_handling_playback(struct worker* wrk) { #ifdef SIGHUP if(sig_record_reload) worker_sighandler(SIGHUP, wrk); #endif if(sig_record_quit) worker_sighandler(SIGTERM, wrk); sig_record_quit = 0; sig_record_reload = 0; } struct daemon* daemon_init(void) { struct daemon* daemon = (struct daemon*)calloc(1, sizeof(struct daemon)); #ifdef USE_WINSOCK int r; WSADATA wsa_data; #endif if(!daemon) return NULL; #ifdef USE_WINSOCK r = WSAStartup(MAKEWORD(2,2), &wsa_data); if(r != 0) { fatal_exit("could not init winsock. WSAStartup: %s", wsa_strerror(r)); } #endif /* USE_WINSOCK */ signal_handling_record(); checklock_start(); #ifdef HAVE_SSL # ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); # endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); #endif # ifdef USE_GOST (void)sldns_key_EVP_load_gost_id(); # endif # if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) # ifndef S_SPLINT_S OpenSSL_add_all_algorithms(); # endif # else OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); # endif # if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS /* grab the COMP method ptr because openssl leaks it */ comp_meth = (void*)SSL_COMP_get_compression_methods(); # endif # if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); # else (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); # endif # if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) if(!ub_openssl_lock_init()) fatal_exit("could not init openssl locks"); # endif #elif defined(HAVE_NSS) if(NSS_NoDB_Init(NULL) != SECSuccess) fatal_exit("could not init NSS"); #endif /* HAVE_SSL or HAVE_NSS */ #ifdef HAVE_TZSET /* init timezone info while we are not chrooted yet */ tzset(); #endif daemon->need_to_exit = 0; modstack_init(&daemon->mods); if(!(daemon->env = (struct module_env*)calloc(1, sizeof(*daemon->env)))) { free(daemon); return NULL; } /* init edns_known_options */ if(!edns_known_options_init(daemon->env)) { free(daemon->env); free(daemon); return NULL; } alloc_init(&daemon->superalloc, NULL, 0); daemon->acl = acl_list_create(); if(!daemon->acl) { edns_known_options_delete(daemon->env); free(daemon->env); free(daemon); return NULL; } daemon->tcl = tcl_list_create(); if(!daemon->tcl) { acl_list_delete(daemon->acl); edns_known_options_delete(daemon->env); free(daemon->env); free(daemon); return NULL; } if(gettimeofday(&daemon->time_boot, NULL) < 0) log_err("gettimeofday: %s", strerror(errno)); daemon->time_last_stat = daemon->time_boot; if((daemon->env->auth_zones = auth_zones_create()) == 0) { acl_list_delete(daemon->acl); tcl_list_delete(daemon->tcl); edns_known_options_delete(daemon->env); free(daemon->env); free(daemon); return NULL; } if(!(daemon->env->edns_strings = edns_strings_create())) { auth_zones_delete(daemon->env->auth_zones); acl_list_delete(daemon->acl); tcl_list_delete(daemon->tcl); edns_known_options_delete(daemon->env); free(daemon->env); free(daemon); return NULL; } return daemon; } int daemon_open_shared_ports(struct daemon* daemon) { log_assert(daemon); if(daemon->cfg->port != daemon->listening_port) { char** resif = NULL; int num_resif = 0; size_t i; struct listen_port* p0; daemon->reuseport = 0; /* free and close old ports */ if(daemon->ports != NULL) { for(i=0; inum_ports; i++) listening_ports_free(daemon->ports[i]); free(daemon->ports); daemon->ports = NULL; } if(!resolve_interface_names(daemon->cfg, &resif, &num_resif)) return 0; /* see if we want to reuseport */ #ifdef SO_REUSEPORT if(daemon->cfg->so_reuseport && daemon->cfg->num_threads > 0) daemon->reuseport = 1; #endif /* try to use reuseport */ p0 = listening_ports_open(daemon->cfg, resif, num_resif, &daemon->reuseport); if(!p0) { listening_ports_free(p0); config_del_strarray(resif, num_resif); return 0; } if(daemon->reuseport) { /* reuseport was successful, allocate for it */ daemon->num_ports = (size_t)daemon->cfg->num_threads; } else { /* do the normal, singleportslist thing, * reuseport not enabled or did not work */ daemon->num_ports = 1; } if(!(daemon->ports = (struct listen_port**)calloc( daemon->num_ports, sizeof(*daemon->ports)))) { listening_ports_free(p0); config_del_strarray(resif, num_resif); return 0; } daemon->ports[0] = p0; if(daemon->reuseport) { /* continue to use reuseport */ for(i=1; inum_ports; i++) { if(!(daemon->ports[i]= listening_ports_open(daemon->cfg, resif, num_resif, &daemon->reuseport)) || !daemon->reuseport ) { for(i=0; inum_ports; i++) listening_ports_free(daemon->ports[i]); free(daemon->ports); daemon->ports = NULL; config_del_strarray(resif, num_resif); return 0; } } } config_del_strarray(resif, num_resif); daemon->listening_port = daemon->cfg->port; } if(!daemon->cfg->remote_control_enable && daemon->rc_port) { listening_ports_free(daemon->rc_ports); daemon->rc_ports = NULL; daemon->rc_port = 0; } if(daemon->cfg->remote_control_enable && daemon->cfg->control_port != daemon->rc_port) { listening_ports_free(daemon->rc_ports); if(!(daemon->rc_ports=daemon_remote_open_ports(daemon->cfg))) return 0; daemon->rc_port = daemon->cfg->control_port; } return 1; } /** * Setup modules. setup module stack. * @param daemon: the daemon */ static void daemon_setup_modules(struct daemon* daemon) { daemon->env->cfg = daemon->cfg; daemon->env->alloc = &daemon->superalloc; daemon->env->worker = NULL; daemon->env->need_to_validate = 0; /* set by module init below */ if(!modstack_setup(&daemon->mods, daemon->cfg->module_conf, daemon->env)) { fatal_exit("failed to setup modules"); } log_edns_known_options(VERB_ALGO, daemon->env); } /** * Obtain allowed port numbers, concatenate the list, and shuffle them * (ready to be handed out to threads). * @param daemon: the daemon. Uses rand and cfg. * @param shufport: the portlist output. * @return number of ports available. */ static int daemon_get_shufport(struct daemon* daemon, int* shufport) { int i, n, k, temp; int avail = 0; for(i=0; i<65536; i++) { if(daemon->cfg->outgoing_avail_ports[i]) { shufport[avail++] = daemon->cfg-> outgoing_avail_ports[i]; } } if(avail == 0) fatal_exit("no ports are permitted for UDP, add " "with outgoing-port-permit"); /* Knuth shuffle */ n = avail; while(--n > 0) { k = ub_random_max(daemon->rand, n+1); /* 0<= k<= n */ temp = shufport[k]; shufport[k] = shufport[n]; shufport[n] = temp; } return avail; } /** * Allocate empty worker structures. With backptr and thread-number, * from 0..numthread initialised. Used as user arguments to new threads. * Creates the daemon random generator if it does not exist yet. * The random generator stays existing between reloads with a unique state. * @param daemon: the daemon with (new) config settings. */ static void daemon_create_workers(struct daemon* daemon) { int i, numport; int* shufport; log_assert(daemon && daemon->cfg); if(!daemon->rand) { daemon->rand = ub_initstate(NULL); if(!daemon->rand) fatal_exit("could not init random generator"); hash_set_raninit((uint32_t)ub_random(daemon->rand)); } shufport = (int*)calloc(65536, sizeof(int)); if(!shufport) fatal_exit("out of memory during daemon init"); numport = daemon_get_shufport(daemon, shufport); verbose(VERB_ALGO, "total of %d outgoing ports available", numport); daemon->num = (daemon->cfg->num_threads?daemon->cfg->num_threads:1); if(daemon->reuseport && (int)daemon->num < (int)daemon->num_ports) { log_warn("cannot reduce num-threads to %d because so-reuseport " "so continuing with %d threads.", (int)daemon->num, (int)daemon->num_ports); daemon->num = (int)daemon->num_ports; } daemon->workers = (struct worker**)calloc((size_t)daemon->num, sizeof(struct worker*)); if(!daemon->workers) fatal_exit("out of memory during daemon init"); if(daemon->cfg->dnstap) { #ifdef USE_DNSTAP daemon->dtenv = dt_create(daemon->cfg); if (!daemon->dtenv) fatal_exit("dt_create failed"); #else fatal_exit("dnstap enabled in config but not built with dnstap support"); #endif } for(i=0; inum; i++) { if(!(daemon->workers[i] = worker_create(daemon, i, shufport+numport*i/daemon->num, numport*(i+1)/daemon->num - numport*i/daemon->num))) /* the above is not ports/numthr, due to rounding */ fatal_exit("could not create worker"); } free(shufport); } #ifdef THREADS_DISABLED /** * Close all pipes except for the numbered thread. * @param daemon: daemon to close pipes in. * @param thr: thread number 0..num-1 of thread to skip. */ static void close_other_pipes(struct daemon* daemon, int thr) { int i; for(i=0; inum; i++) if(i!=thr) { if(i==0) { /* only close read part, need to write stats */ tube_close_read(daemon->workers[i]->cmd); } else { /* complete close channel to others */ tube_delete(daemon->workers[i]->cmd); daemon->workers[i]->cmd = NULL; } } } #endif /* THREADS_DISABLED */ /** * Function to start one thread. * @param arg: user argument. * @return: void* user return value could be used for thread_join results. */ static void* thread_start(void* arg) { struct worker* worker = (struct worker*)arg; int port_num = 0; log_thread_set(&worker->thread_num); ub_thread_blocksigs(); #ifdef THREADS_DISABLED /* close pipe ends used by main */ tube_close_write(worker->cmd); close_other_pipes(worker->daemon, worker->thread_num); #endif #ifdef SO_REUSEPORT if(worker->daemon->cfg->so_reuseport) port_num = worker->thread_num % worker->daemon->num_ports; else port_num = 0; #endif if(!worker_init(worker, worker->daemon->cfg, worker->daemon->ports[port_num], 0)) fatal_exit("Could not initialize thread"); worker_work(worker); return NULL; } /** * Fork and init the other threads. Main thread returns for special handling. * @param daemon: the daemon with other threads to fork. */ static void daemon_start_others(struct daemon* daemon) { int i; log_assert(daemon); verbose(VERB_ALGO, "start threads"); /* skip i=0, is this thread */ for(i=1; inum; i++) { ub_thread_create(&daemon->workers[i]->thr_id, thread_start, daemon->workers[i]); #ifdef THREADS_DISABLED /* close pipe end of child */ tube_close_read(daemon->workers[i]->cmd); #endif /* no threads */ } } /** * Stop the other threads. * @param daemon: the daemon with other threads. */ static void daemon_stop_others(struct daemon* daemon) { int i; log_assert(daemon); verbose(VERB_ALGO, "stop threads"); /* skip i=0, is this thread */ /* use i=0 buffer for sending cmds; because we are #0 */ for(i=1; inum; i++) { worker_send_cmd(daemon->workers[i], worker_cmd_quit); } /* wait for them to quit */ for(i=1; inum; i++) { /* join it to make sure its dead */ verbose(VERB_ALGO, "join %d", i); ub_thread_join(daemon->workers[i]->thr_id); verbose(VERB_ALGO, "join success %d", i); } } void daemon_fork(struct daemon* daemon) { int have_view_respip_cfg = 0; #ifdef HAVE_SYSTEMD int ret; #endif log_assert(daemon); if(!(daemon->views = views_create())) fatal_exit("Could not create views: out of memory"); /* create individual views and their localzone/data trees */ if(!views_apply_cfg(daemon->views, daemon->cfg)) fatal_exit("Could not set up views"); if(!acl_list_apply_cfg(daemon->acl, daemon->cfg, daemon->views)) fatal_exit("Could not setup access control list"); if(!tcl_list_apply_cfg(daemon->tcl, daemon->cfg)) fatal_exit("Could not setup TCP connection limits"); if(daemon->cfg->dnscrypt) { #ifdef USE_DNSCRYPT daemon->dnscenv = dnsc_create(); if (!daemon->dnscenv) fatal_exit("dnsc_create failed"); dnsc_apply_cfg(daemon->dnscenv, daemon->cfg); #else fatal_exit("dnscrypt enabled in config but unbound was not built with " "dnscrypt support"); #endif } /* create global local_zones */ if(!(daemon->local_zones = local_zones_create())) fatal_exit("Could not create local zones: out of memory"); if(!local_zones_apply_cfg(daemon->local_zones, daemon->cfg)) fatal_exit("Could not set up local zones"); /* process raw response-ip configuration data */ if(!(daemon->respip_set = respip_set_create())) fatal_exit("Could not create response IP set"); if(!respip_global_apply_cfg(daemon->respip_set, daemon->cfg)) fatal_exit("Could not set up response IP set"); if(!respip_views_apply_cfg(daemon->views, daemon->cfg, &have_view_respip_cfg)) fatal_exit("Could not set up per-view response IP sets"); daemon->use_response_ip = !respip_set_is_empty(daemon->respip_set) || have_view_respip_cfg; /* read auth zonefiles */ if(!auth_zones_apply_cfg(daemon->env->auth_zones, daemon->cfg, 1, &daemon->use_rpz)) fatal_exit("auth_zones could not be setup"); /* Set-up EDNS strings */ if(!edns_strings_apply_cfg(daemon->env->edns_strings, daemon->cfg)) fatal_exit("Could not set up EDNS strings"); /* setup modules */ daemon_setup_modules(daemon); /* response-ip-xxx options don't work as expected without the respip * module. To avoid run-time operational surprise we reject such * configuration. */ if(daemon->use_response_ip && modstack_find(&daemon->mods, "respip") < 0) fatal_exit("response-ip options require respip module"); /* RPZ response ip triggers don't work as expected without the respip * module. To avoid run-time operational surprise we reject such * configuration. */ if(daemon->use_rpz && modstack_find(&daemon->mods, "respip") < 0) fatal_exit("RPZ requires the respip module"); /* first create all the worker structures, so we can pass * them to the newly created threads. */ daemon_create_workers(daemon); #if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP) /* in libev the first inited base gets signals */ if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1)) fatal_exit("Could not initialize main thread"); #endif /* Now create the threads and init the workers. * By the way, this is thread #0 (the main thread). */ daemon_start_others(daemon); /* Special handling for the main thread. This is the thread * that handles signals and remote control. */ #if !(defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) /* libevent has the last inited base get signals (or any base) */ if(!worker_init(daemon->workers[0], daemon->cfg, daemon->ports[0], 1)) fatal_exit("Could not initialize main thread"); #endif signal_handling_playback(daemon->workers[0]); if (!shm_main_init(daemon)) log_warn("SHM has failed"); /* Start resolver service on main thread. */ #ifdef HAVE_SYSTEMD ret = sd_notify(0, "READY=1"); if(ret <= 0 && getenv("NOTIFY_SOCKET")) fatal_exit("sd_notify failed %s: %s. Make sure that unbound has " "access/permission to use the socket presented by systemd.", getenv("NOTIFY_SOCKET"), (ret==0?"no $NOTIFY_SOCKET": strerror(-ret))); #endif log_info("start of service (%s).", PACKAGE_STRING); worker_work(daemon->workers[0]); #ifdef HAVE_SYSTEMD if (daemon->workers[0]->need_to_exit) sd_notify(0, "STOPPING=1"); else sd_notify(0, "RELOADING=1"); #endif log_info("service stopped (%s).", PACKAGE_STRING); /* we exited! a signal happened! Stop other threads */ daemon_stop_others(daemon); /* Shutdown SHM */ shm_main_shutdown(daemon); daemon->need_to_exit = daemon->workers[0]->need_to_exit; } void daemon_cleanup(struct daemon* daemon) { int i; log_assert(daemon); /* before stopping main worker, handle signals ourselves, so we don't die on multiple reload signals for example. */ signal_handling_record(); log_thread_set(NULL); /* clean up caches because * a) RRset IDs will be recycled after a reload, causing collisions * b) validation config can change, thus rrset, msg, keycache clear */ slabhash_clear(&daemon->env->rrset_cache->table); slabhash_clear(daemon->env->msg_cache); local_zones_delete(daemon->local_zones); daemon->local_zones = NULL; respip_set_delete(daemon->respip_set); daemon->respip_set = NULL; views_delete(daemon->views); daemon->views = NULL; if(daemon->env->auth_zones) auth_zones_cleanup(daemon->env->auth_zones); /* key cache is cleared by module desetup during next daemon_fork() */ daemon_remote_clear(daemon->rc); for(i=0; inum; i++) worker_delete(daemon->workers[i]); free(daemon->workers); daemon->workers = NULL; daemon->num = 0; alloc_clear_special(&daemon->superalloc); #ifdef USE_DNSTAP dt_delete(daemon->dtenv); daemon->dtenv = NULL; #endif #ifdef USE_DNSCRYPT dnsc_delete(daemon->dnscenv); daemon->dnscenv = NULL; #endif daemon->cfg = NULL; } void daemon_delete(struct daemon* daemon) { size_t i; if(!daemon) return; modstack_desetup(&daemon->mods, daemon->env); daemon_remote_delete(daemon->rc); for(i = 0; i < daemon->num_ports; i++) listening_ports_free(daemon->ports[i]); free(daemon->ports); listening_ports_free(daemon->rc_ports); if(daemon->env) { slabhash_delete(daemon->env->msg_cache); rrset_cache_delete(daemon->env->rrset_cache); infra_delete(daemon->env->infra_cache); edns_known_options_delete(daemon->env); edns_strings_delete(daemon->env->edns_strings); auth_zones_delete(daemon->env->auth_zones); } ub_randfree(daemon->rand); alloc_clear(&daemon->superalloc); acl_list_delete(daemon->acl); tcl_list_delete(daemon->tcl); free(daemon->chroot); free(daemon->pidfile); free(daemon->env); #ifdef HAVE_SSL listen_sslctx_delete_ticket_keys(); SSL_CTX_free((SSL_CTX*)daemon->listen_sslctx); SSL_CTX_free((SSL_CTX*)daemon->connect_sslctx); #endif free(daemon); /* lex cleanup */ ub_c_lex_destroy(); /* libcrypto cleanup */ #ifdef HAVE_SSL # if defined(USE_GOST) && defined(HAVE_LDNS_KEY_EVP_UNLOAD_GOST) sldns_key_EVP_unload_gost(); # endif # if HAVE_DECL_SSL_COMP_GET_COMPRESSION_METHODS && HAVE_DECL_SK_SSL_COMP_POP_FREE # ifndef S_SPLINT_S # if OPENSSL_VERSION_NUMBER < 0x10100000 sk_SSL_COMP_pop_free(comp_meth, (void(*)())CRYPTO_free); # endif # endif # endif # ifdef HAVE_OPENSSL_CONFIG EVP_cleanup(); # if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) && defined(HAVE_ENGINE_CLEANUP) ENGINE_cleanup(); # endif CONF_modules_free(); # endif # ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA CRYPTO_cleanup_all_ex_data(); /* safe, no more threads right now */ # endif # ifdef HAVE_ERR_FREE_STRINGS ERR_free_strings(); # endif # if OPENSSL_VERSION_NUMBER < 0x10100000 RAND_cleanup(); # endif # if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) ub_openssl_lock_delete(); # endif #ifndef HAVE_ARC4RANDOM _ARC4_LOCK_DESTROY(); #endif #elif defined(HAVE_NSS) NSS_Shutdown(); #endif /* HAVE_SSL or HAVE_NSS */ checklock_stop(); #ifdef USE_WINSOCK if(WSACleanup() != 0) { log_err("Could not WSACleanup: %s", wsa_strerror(WSAGetLastError())); } #endif } void daemon_apply_cfg(struct daemon* daemon, struct config_file* cfg) { daemon->cfg = cfg; config_apply(cfg); if(!slabhash_is_size(daemon->env->msg_cache, cfg->msg_cache_size, cfg->msg_cache_slabs)) { slabhash_delete(daemon->env->msg_cache); daemon->env->msg_cache = slabhash_create(cfg->msg_cache_slabs, HASH_DEFAULT_STARTARRAY, cfg->msg_cache_size, msgreply_sizefunc, query_info_compare, query_entry_delete, reply_info_delete, NULL); if(!daemon->env->msg_cache) { fatal_exit("malloc failure updating config settings"); } } if((daemon->env->rrset_cache = rrset_cache_adjust( daemon->env->rrset_cache, cfg, &daemon->superalloc)) == 0) fatal_exit("malloc failure updating config settings"); if((daemon->env->infra_cache = infra_adjust(daemon->env->infra_cache, cfg))==0) fatal_exit("malloc failure updating config settings"); } unbound-1.13.1/daemon/remote.c0000644000175000017500000025717314010434640015620 0ustar wouterwouter/* * daemon/remote.c - remote control for the unbound daemon. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the remote control functionality for the daemon. * The remote control can be performed using either the commandline * unbound-control tool, or a TLS capable web browser. * The channel is secured using TLSv1, and certificates. * Both the server and the client(control tool) have their own keys. */ #include "config.h" #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_DH_H #include #endif #ifdef HAVE_OPENSSL_BN_H #include #endif #include #include "daemon/remote.h" #include "daemon/worker.h" #include "daemon/daemon.h" #include "daemon/stats.h" #include "daemon/cachedump.h" #include "util/log.h" #include "util/config_file.h" #include "util/net_help.h" #include "util/module.h" #include "services/listen_dnsport.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" #include "services/mesh.h" #include "services/localzone.h" #include "services/authzone.h" #include "services/rpz.h" #include "util/storage/slabhash.h" #include "util/fptr_wlist.h" #include "util/data/dname.h" #include "validator/validator.h" #include "validator/val_kcache.h" #include "validator/val_kentry.h" #include "validator/val_anchor.h" #include "iterator/iterator.h" #include "iterator/iter_fwd.h" #include "iterator/iter_hints.h" #include "iterator/iter_delegpt.h" #include "services/outbound_list.h" #include "services/outside_network.h" #include "sldns/str2wire.h" #include "sldns/parseutil.h" #include "sldns/wire2str.h" #include "sldns/sbuffer.h" #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_NETDB_H #include #endif /* just for portability */ #ifdef SQ #undef SQ #endif /** what to put on statistics lines between var and value, ": " or "=" */ #define SQ "=" /** if true, inhibits a lot of =0 lines from the stats output */ static const int inhibit_zero = 1; /** subtract timers and the values do not overflow or become negative */ static void timeval_subtract(struct timeval* d, const struct timeval* end, const struct timeval* start) { #ifndef S_SPLINT_S time_t end_usec = end->tv_usec; d->tv_sec = end->tv_sec - start->tv_sec; if(end_usec < start->tv_usec) { end_usec += 1000000; d->tv_sec--; } d->tv_usec = end_usec - start->tv_usec; #endif } /** divide sum of timers to get average */ static void timeval_divide(struct timeval* avg, const struct timeval* sum, long long d) { #ifndef S_SPLINT_S size_t leftover; if(d == 0) { avg->tv_sec = 0; avg->tv_usec = 0; return; } avg->tv_sec = sum->tv_sec / d; avg->tv_usec = sum->tv_usec / d; /* handle fraction from seconds divide */ leftover = sum->tv_sec - avg->tv_sec*d; avg->tv_usec += (leftover*1000000)/d; #endif } static int remote_setup_ctx(struct daemon_remote* rc, struct config_file* cfg) { char* s_cert; char* s_key; rc->ctx = SSL_CTX_new(SSLv23_server_method()); if(!rc->ctx) { log_crypto_err("could not SSL_CTX_new"); return 0; } if(!listen_sslctx_setup(rc->ctx)) { return 0; } s_cert = fname_after_chroot(cfg->server_cert_file, cfg, 1); s_key = fname_after_chroot(cfg->server_key_file, cfg, 1); if(!s_cert || !s_key) { log_err("out of memory in remote control fname"); goto setup_error; } verbose(VERB_ALGO, "setup SSL certificates"); if (!SSL_CTX_use_certificate_chain_file(rc->ctx,s_cert)) { log_err("Error for server-cert-file: %s", s_cert); log_crypto_err("Error in SSL_CTX use_certificate_chain_file"); goto setup_error; } if(!SSL_CTX_use_PrivateKey_file(rc->ctx,s_key,SSL_FILETYPE_PEM)) { log_err("Error for server-key-file: %s", s_key); log_crypto_err("Error in SSL_CTX use_PrivateKey_file"); goto setup_error; } if(!SSL_CTX_check_private_key(rc->ctx)) { log_err("Error for server-key-file: %s", s_key); log_crypto_err("Error in SSL_CTX check_private_key"); goto setup_error; } listen_sslctx_setup_2(rc->ctx); if(!SSL_CTX_load_verify_locations(rc->ctx, s_cert, NULL)) { log_crypto_err("Error setting up SSL_CTX verify locations"); setup_error: free(s_cert); free(s_key); return 0; } SSL_CTX_set_client_CA_list(rc->ctx, SSL_load_client_CA_file(s_cert)); SSL_CTX_set_verify(rc->ctx, SSL_VERIFY_PEER, NULL); free(s_cert); free(s_key); return 1; } struct daemon_remote* daemon_remote_create(struct config_file* cfg) { struct daemon_remote* rc = (struct daemon_remote*)calloc(1, sizeof(*rc)); if(!rc) { log_err("out of memory in daemon_remote_create"); return NULL; } rc->max_active = 10; if(!cfg->remote_control_enable) { rc->ctx = NULL; return rc; } if(options_remote_is_address(cfg) && cfg->control_use_cert) { if(!remote_setup_ctx(rc, cfg)) { daemon_remote_delete(rc); return NULL; } rc->use_cert = 1; } else { struct config_strlist* p; rc->ctx = NULL; rc->use_cert = 0; if(!options_remote_is_address(cfg)) for(p = cfg->control_ifs.first; p; p = p->next) { if(p->str && p->str[0] != '/') log_warn("control-interface %s is not using TLS, but plain transfer, because first control-interface in config file is a local socket (starts with a /).", p->str); } } return rc; } void daemon_remote_clear(struct daemon_remote* rc) { struct rc_state* p, *np; if(!rc) return; /* but do not close the ports */ listen_list_delete(rc->accept_list); rc->accept_list = NULL; /* do close these sockets */ p = rc->busy_list; while(p) { np = p->next; if(p->ssl) SSL_free(p->ssl); comm_point_delete(p->c); free(p); p = np; } rc->busy_list = NULL; rc->active = 0; rc->worker = NULL; } void daemon_remote_delete(struct daemon_remote* rc) { if(!rc) return; daemon_remote_clear(rc); if(rc->ctx) { SSL_CTX_free(rc->ctx); } free(rc); } /** * Add and open a new control port * @param ip: ip str * @param nr: port nr * @param list: list head * @param noproto_is_err: if lack of protocol support is an error. * @param cfg: config with username for chown of unix-sockets. * @return false on failure. */ static int add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, struct config_file* cfg) { struct addrinfo hints; struct addrinfo* res; struct listen_port* n; int noproto = 0; int fd, r; char port[15]; snprintf(port, sizeof(port), "%d", nr); port[sizeof(port)-1]=0; memset(&hints, 0, sizeof(hints)); log_assert(ip); if(ip[0] == '/') { /* This looks like a local socket */ fd = create_local_accept_sock(ip, &noproto, cfg->use_systemd); /* * Change socket ownership and permissions so users other * than root can access it provided they are in the same * group as the user we run as. */ if(fd != -1) { #ifdef HAVE_CHOWN if (cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1) { if(chown(ip, cfg_uid, cfg_gid) == -1) verbose(VERB_QUERY, "cannot chown %u.%u %s: %s", (unsigned)cfg_uid, (unsigned)cfg_gid, ip, strerror(errno)); } chmod(ip, (mode_t)(S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)); #else (void)cfg; #endif } } else { hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; if((r = getaddrinfo(ip, port, &hints, &res)) != 0 || !res) { #ifdef USE_WINSOCK if(!noproto_is_err && r == EAI_NONAME) { /* tried to lookup the address as name */ return 1; /* return success, but do nothing */ } #endif /* USE_WINSOCK */ log_err("control interface %s:%s getaddrinfo: %s %s", ip?ip:"default", port, gai_strerror(r), #ifdef EAI_SYSTEM r==EAI_SYSTEM?(char*)strerror(errno):"" #else "" #endif ); return 0; } /* open fd */ fd = create_tcp_accept_sock(res, 1, &noproto, 0, cfg->ip_transparent, 0, 0, cfg->ip_freebind, cfg->use_systemd, cfg->ip_dscp); freeaddrinfo(res); } if(fd == -1 && noproto) { if(!noproto_is_err) return 1; /* return success, but do nothing */ log_err("cannot open control interface %s %d : " "protocol not supported", ip, nr); return 0; } if(fd == -1) { log_err("cannot open control interface %s %d", ip, nr); return 0; } /* alloc */ n = (struct listen_port*)calloc(1, sizeof(*n)); if(!n) { sock_close(fd); log_err("out of memory"); return 0; } n->next = *list; *list = n; n->fd = fd; return 1; } struct listen_port* daemon_remote_open_ports(struct config_file* cfg) { struct listen_port* l = NULL; log_assert(cfg->remote_control_enable && cfg->control_port); if(cfg->control_ifs.first) { struct config_strlist* p; for(p = cfg->control_ifs.first; p; p = p->next) { if(!add_open(p->str, cfg->control_port, &l, 1, cfg)) { listening_ports_free(l); return NULL; } } } else { /* defaults */ if(cfg->do_ip6 && !add_open("::1", cfg->control_port, &l, 0, cfg)) { listening_ports_free(l); return NULL; } if(cfg->do_ip4 && !add_open("127.0.0.1", cfg->control_port, &l, 1, cfg)) { listening_ports_free(l); return NULL; } } return l; } /** open accept commpoint */ static int accept_open(struct daemon_remote* rc, int fd) { struct listen_list* n = (struct listen_list*)malloc(sizeof(*n)); if(!n) { log_err("out of memory"); return 0; } n->next = rc->accept_list; rc->accept_list = n; /* open commpt */ n->com = comm_point_create_raw(rc->worker->base, fd, 0, &remote_accept_callback, rc); if(!n->com) return 0; /* keep this port open, its fd is kept in the rc portlist */ n->com->do_not_close = 1; return 1; } int daemon_remote_open_accept(struct daemon_remote* rc, struct listen_port* ports, struct worker* worker) { struct listen_port* p; rc->worker = worker; for(p = ports; p; p = p->next) { if(!accept_open(rc, p->fd)) { log_err("could not create accept comm point"); return 0; } } return 1; } void daemon_remote_stop_accept(struct daemon_remote* rc) { struct listen_list* p; for(p=rc->accept_list; p; p=p->next) { comm_point_stop_listening(p->com); } } void daemon_remote_start_accept(struct daemon_remote* rc) { struct listen_list* p; for(p=rc->accept_list; p; p=p->next) { comm_point_start_listening(p->com, -1, -1); } } int remote_accept_callback(struct comm_point* c, void* arg, int err, struct comm_reply* ATTR_UNUSED(rep)) { struct daemon_remote* rc = (struct daemon_remote*)arg; struct sockaddr_storage addr; socklen_t addrlen; int newfd; struct rc_state* n; if(err != NETEVENT_NOERROR) { log_err("error %d on remote_accept_callback", err); return 0; } /* perform the accept */ newfd = comm_point_perform_accept(c, &addr, &addrlen); if(newfd == -1) return 0; /* create new commpoint unless we are servicing already */ if(rc->active >= rc->max_active) { log_warn("drop incoming remote control: too many connections"); close_exit: sock_close(newfd); return 0; } /* setup commpoint to service the remote control command */ n = (struct rc_state*)calloc(1, sizeof(*n)); if(!n) { log_err("out of memory"); goto close_exit; } n->fd = newfd; /* start in reading state */ n->c = comm_point_create_raw(rc->worker->base, newfd, 0, &remote_control_callback, n); if(!n->c) { log_err("out of memory"); free(n); goto close_exit; } log_addr(VERB_QUERY, "new control connection from", &addr, addrlen); n->c->do_not_close = 0; comm_point_stop_listening(n->c); comm_point_start_listening(n->c, -1, REMOTE_CONTROL_TCP_TIMEOUT); memcpy(&n->c->repinfo.addr, &addr, addrlen); n->c->repinfo.addrlen = addrlen; if(rc->use_cert) { n->shake_state = rc_hs_read; n->ssl = SSL_new(rc->ctx); if(!n->ssl) { log_crypto_err("could not SSL_new"); comm_point_delete(n->c); free(n); goto close_exit; } SSL_set_accept_state(n->ssl); (void)SSL_set_mode(n->ssl, (long)SSL_MODE_AUTO_RETRY); if(!SSL_set_fd(n->ssl, newfd)) { log_crypto_err("could not SSL_set_fd"); SSL_free(n->ssl); comm_point_delete(n->c); free(n); goto close_exit; } } else { n->ssl = NULL; } n->rc = rc; n->next = rc->busy_list; rc->busy_list = n; rc->active ++; /* perform the first nonblocking read already, for windows, * so it can return wouldblock. could be faster too. */ (void)remote_control_callback(n->c, n, NETEVENT_NOERROR, NULL); return 0; } /** delete from list */ static void state_list_remove_elem(struct rc_state** list, struct comm_point* c) { while(*list) { if( (*list)->c == c) { *list = (*list)->next; return; } list = &(*list)->next; } } /** decrease active count and remove commpoint from busy list */ static void clean_point(struct daemon_remote* rc, struct rc_state* s) { state_list_remove_elem(&rc->busy_list, s->c); rc->active --; if(s->ssl) { SSL_shutdown(s->ssl); SSL_free(s->ssl); } comm_point_delete(s->c); free(s); } int ssl_print_text(RES* res, const char* text) { int r; if(!res) return 0; if(res->ssl) { ERR_clear_error(); if((r=SSL_write(res->ssl, text, (int)strlen(text))) <= 0) { if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) { verbose(VERB_QUERY, "warning, in SSL_write, peer " "closed connection"); return 0; } log_crypto_err("could not SSL_write"); return 0; } } else { size_t at = 0; while(at < strlen(text)) { ssize_t r = send(res->fd, text+at, strlen(text)-at, 0); if(r == -1) { if(errno == EAGAIN || errno == EINTR) continue; log_err("could not send: %s", sock_strerror(errno)); return 0; } at += r; } } return 1; } /** print text over the ssl connection */ static int ssl_print_vmsg(RES* ssl, const char* format, va_list args) { char msg[1024]; vsnprintf(msg, sizeof(msg), format, args); return ssl_print_text(ssl, msg); } /** printf style printing to the ssl connection */ int ssl_printf(RES* ssl, const char* format, ...) { va_list args; int ret; va_start(args, format); ret = ssl_print_vmsg(ssl, format, args); va_end(args); return ret; } int ssl_read_line(RES* res, char* buf, size_t max) { int r; size_t len = 0; if(!res) return 0; while(len < max) { if(res->ssl) { ERR_clear_error(); if((r=SSL_read(res->ssl, buf+len, 1)) <= 0) { if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) { buf[len] = 0; return 1; } log_crypto_err("could not SSL_read"); return 0; } } else { while(1) { ssize_t rr = recv(res->fd, buf+len, 1, 0); if(rr <= 0) { if(rr == 0) { buf[len] = 0; return 1; } if(errno == EINTR || errno == EAGAIN) continue; log_err("could not recv: %s", sock_strerror(errno)); return 0; } break; } } if(buf[len] == '\n') { /* return string without \n */ buf[len] = 0; return 1; } len++; } buf[max-1] = 0; log_err("control line too long (%d): %s", (int)max, buf); return 0; } /** skip whitespace, return new pointer into string */ static char* skipwhite(char* str) { /* EOS \0 is not a space */ while( isspace((unsigned char)*str) ) str++; return str; } /** send the OK to the control client */ static void send_ok(RES* ssl) { (void)ssl_printf(ssl, "ok\n"); } /** do the stop command */ static void do_stop(RES* ssl, struct worker* worker) { worker->need_to_exit = 1; comm_base_exit(worker->base); send_ok(ssl); } /** do the reload command */ static void do_reload(RES* ssl, struct worker* worker) { worker->need_to_exit = 0; comm_base_exit(worker->base); send_ok(ssl); } /** do the verbosity command */ static void do_verbosity(RES* ssl, char* str) { int val = atoi(str); if(val == 0 && strcmp(str, "0") != 0) { ssl_printf(ssl, "error in verbosity number syntax: %s\n", str); return; } verbosity = val; send_ok(ssl); } /** print stats from statinfo */ static int print_stats(RES* ssl, const char* nm, struct ub_stats_info* s) { struct timeval sumwait, avg; if(!ssl_printf(ssl, "%s.num.queries"SQ"%lu\n", nm, (unsigned long)s->svr.num_queries)) return 0; if(!ssl_printf(ssl, "%s.num.queries_ip_ratelimited"SQ"%lu\n", nm, (unsigned long)s->svr.num_queries_ip_ratelimited)) return 0; if(!ssl_printf(ssl, "%s.num.cachehits"SQ"%lu\n", nm, (unsigned long)(s->svr.num_queries - s->svr.num_queries_missed_cache))) return 0; if(!ssl_printf(ssl, "%s.num.cachemiss"SQ"%lu\n", nm, (unsigned long)s->svr.num_queries_missed_cache)) return 0; if(!ssl_printf(ssl, "%s.num.prefetch"SQ"%lu\n", nm, (unsigned long)s->svr.num_queries_prefetch)) return 0; if(!ssl_printf(ssl, "%s.num.expired"SQ"%lu\n", nm, (unsigned long)s->svr.ans_expired)) return 0; if(!ssl_printf(ssl, "%s.num.recursivereplies"SQ"%lu\n", nm, (unsigned long)s->mesh_replies_sent)) return 0; #ifdef USE_DNSCRYPT if(!ssl_printf(ssl, "%s.num.dnscrypt.crypted"SQ"%lu\n", nm, (unsigned long)s->svr.num_query_dnscrypt_crypted)) return 0; if(!ssl_printf(ssl, "%s.num.dnscrypt.cert"SQ"%lu\n", nm, (unsigned long)s->svr.num_query_dnscrypt_cert)) return 0; if(!ssl_printf(ssl, "%s.num.dnscrypt.cleartext"SQ"%lu\n", nm, (unsigned long)s->svr.num_query_dnscrypt_cleartext)) return 0; if(!ssl_printf(ssl, "%s.num.dnscrypt.malformed"SQ"%lu\n", nm, (unsigned long)s->svr.num_query_dnscrypt_crypted_malformed)) return 0; #endif if(!ssl_printf(ssl, "%s.requestlist.avg"SQ"%g\n", nm, (s->svr.num_queries_missed_cache+s->svr.num_queries_prefetch)? (double)s->svr.sum_query_list_size/ (double)(s->svr.num_queries_missed_cache+ s->svr.num_queries_prefetch) : 0.0)) return 0; if(!ssl_printf(ssl, "%s.requestlist.max"SQ"%lu\n", nm, (unsigned long)s->svr.max_query_list_size)) return 0; if(!ssl_printf(ssl, "%s.requestlist.overwritten"SQ"%lu\n", nm, (unsigned long)s->mesh_jostled)) return 0; if(!ssl_printf(ssl, "%s.requestlist.exceeded"SQ"%lu\n", nm, (unsigned long)s->mesh_dropped)) return 0; if(!ssl_printf(ssl, "%s.requestlist.current.all"SQ"%lu\n", nm, (unsigned long)s->mesh_num_states)) return 0; if(!ssl_printf(ssl, "%s.requestlist.current.user"SQ"%lu\n", nm, (unsigned long)s->mesh_num_reply_states)) return 0; #ifndef S_SPLINT_S sumwait.tv_sec = s->mesh_replies_sum_wait_sec; sumwait.tv_usec = s->mesh_replies_sum_wait_usec; #endif timeval_divide(&avg, &sumwait, s->mesh_replies_sent); if(!ssl_printf(ssl, "%s.recursion.time.avg"SQ ARG_LL "d.%6.6d\n", nm, (long long)avg.tv_sec, (int)avg.tv_usec)) return 0; if(!ssl_printf(ssl, "%s.recursion.time.median"SQ"%g\n", nm, s->mesh_time_median)) return 0; if(!ssl_printf(ssl, "%s.tcpusage"SQ"%lu\n", nm, (unsigned long)s->svr.tcp_accept_usage)) return 0; return 1; } /** print stats for one thread */ static int print_thread_stats(RES* ssl, int i, struct ub_stats_info* s) { char nm[32]; snprintf(nm, sizeof(nm), "thread%d", i); nm[sizeof(nm)-1]=0; return print_stats(ssl, nm, s); } /** print long number */ static int print_longnum(RES* ssl, const char* desc, size_t x) { if(x > 1024*1024*1024) { /* more than a Gb */ size_t front = x / (size_t)1000000; size_t back = x % (size_t)1000000; return ssl_printf(ssl, "%s%u%6.6u\n", desc, (unsigned)front, (unsigned)back); } else { return ssl_printf(ssl, "%s%lu\n", desc, (unsigned long)x); } } /** print mem stats */ static int print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, struct ub_stats_info* s) { size_t msg, rrset, val, iter, respip; #ifdef CLIENT_SUBNET size_t subnet = 0; #endif /* CLIENT_SUBNET */ #ifdef USE_IPSECMOD size_t ipsecmod = 0; #endif /* USE_IPSECMOD */ #ifdef USE_DNSCRYPT size_t dnscrypt_shared_secret = 0; size_t dnscrypt_nonce = 0; #endif /* USE_DNSCRYPT */ #ifdef WITH_DYNLIBMODULE size_t dynlib = 0; #endif /* WITH_DYNLIBMODULE */ msg = slabhash_get_mem(daemon->env->msg_cache); rrset = slabhash_get_mem(&daemon->env->rrset_cache->table); val = mod_get_mem(&worker->env, "validator"); iter = mod_get_mem(&worker->env, "iterator"); respip = mod_get_mem(&worker->env, "respip"); #ifdef CLIENT_SUBNET subnet = mod_get_mem(&worker->env, "subnet"); #endif /* CLIENT_SUBNET */ #ifdef USE_IPSECMOD ipsecmod = mod_get_mem(&worker->env, "ipsecmod"); #endif /* USE_IPSECMOD */ #ifdef USE_DNSCRYPT if(daemon->dnscenv) { dnscrypt_shared_secret = slabhash_get_mem( daemon->dnscenv->shared_secrets_cache); dnscrypt_nonce = slabhash_get_mem(daemon->dnscenv->nonces_cache); } #endif /* USE_DNSCRYPT */ #ifdef WITH_DYNLIBMODULE dynlib = mod_get_mem(&worker->env, "dynlib"); #endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset)) return 0; if(!print_longnum(ssl, "mem.cache.message"SQ, msg)) return 0; if(!print_longnum(ssl, "mem.mod.iterator"SQ, iter)) return 0; if(!print_longnum(ssl, "mem.mod.validator"SQ, val)) return 0; if(!print_longnum(ssl, "mem.mod.respip"SQ, respip)) return 0; #ifdef CLIENT_SUBNET if(!print_longnum(ssl, "mem.mod.subnet"SQ, subnet)) return 0; #endif /* CLIENT_SUBNET */ #ifdef USE_IPSECMOD if(!print_longnum(ssl, "mem.mod.ipsecmod"SQ, ipsecmod)) return 0; #endif /* USE_IPSECMOD */ #ifdef USE_DNSCRYPT if(!print_longnum(ssl, "mem.cache.dnscrypt_shared_secret"SQ, dnscrypt_shared_secret)) return 0; if(!print_longnum(ssl, "mem.cache.dnscrypt_nonce"SQ, dnscrypt_nonce)) return 0; #endif /* USE_DNSCRYPT */ #ifdef WITH_DYNLIBMODULE if(!print_longnum(ssl, "mem.mod.dynlibmod"SQ, dynlib)) return 0; #endif /* WITH_DYNLIBMODULE */ if(!print_longnum(ssl, "mem.streamwait"SQ, (size_t)s->svr.mem_stream_wait)) return 0; if(!print_longnum(ssl, "mem.http.query_buffer"SQ, (size_t)s->svr.mem_http2_query_buffer)) return 0; if(!print_longnum(ssl, "mem.http.response_buffer"SQ, (size_t)s->svr.mem_http2_response_buffer)) return 0; return 1; } /** print uptime stats */ static int print_uptime(RES* ssl, struct worker* worker, int reset) { struct timeval now = *worker->env.now_tv; struct timeval up, dt; timeval_subtract(&up, &now, &worker->daemon->time_boot); timeval_subtract(&dt, &now, &worker->daemon->time_last_stat); if(reset) worker->daemon->time_last_stat = now; if(!ssl_printf(ssl, "time.now"SQ ARG_LL "d.%6.6d\n", (long long)now.tv_sec, (unsigned)now.tv_usec)) return 0; if(!ssl_printf(ssl, "time.up"SQ ARG_LL "d.%6.6d\n", (long long)up.tv_sec, (unsigned)up.tv_usec)) return 0; if(!ssl_printf(ssl, "time.elapsed"SQ ARG_LL "d.%6.6d\n", (long long)dt.tv_sec, (unsigned)dt.tv_usec)) return 0; return 1; } /** print extended histogram */ static int print_hist(RES* ssl, struct ub_stats_info* s) { struct timehist* hist; size_t i; hist = timehist_setup(); if(!hist) { log_err("out of memory"); return 0; } timehist_import(hist, s->svr.hist, NUM_BUCKETS_HIST); for(i=0; inum; i++) { if(!ssl_printf(ssl, "histogram.%6.6d.%6.6d.to.%6.6d.%6.6d=%lu\n", (int)hist->buckets[i].lower.tv_sec, (int)hist->buckets[i].lower.tv_usec, (int)hist->buckets[i].upper.tv_sec, (int)hist->buckets[i].upper.tv_usec, (unsigned long)hist->buckets[i].count)) { timehist_delete(hist); return 0; } } timehist_delete(hist); return 1; } /** print extended stats */ static int print_ext(RES* ssl, struct ub_stats_info* s) { int i; char nm[32]; const sldns_rr_descriptor* desc; const sldns_lookup_table* lt; /* TYPE */ for(i=0; isvr.qtype[i] == 0) continue; desc = sldns_rr_descript((uint16_t)i); if(desc && desc->_name) { snprintf(nm, sizeof(nm), "%s", desc->_name); } else if (i == LDNS_RR_TYPE_IXFR) { snprintf(nm, sizeof(nm), "IXFR"); } else if (i == LDNS_RR_TYPE_AXFR) { snprintf(nm, sizeof(nm), "AXFR"); } else if (i == LDNS_RR_TYPE_MAILA) { snprintf(nm, sizeof(nm), "MAILA"); } else if (i == LDNS_RR_TYPE_MAILB) { snprintf(nm, sizeof(nm), "MAILB"); } else if (i == LDNS_RR_TYPE_ANY) { snprintf(nm, sizeof(nm), "ANY"); } else { snprintf(nm, sizeof(nm), "TYPE%d", i); } if(!ssl_printf(ssl, "num.query.type.%s"SQ"%lu\n", nm, (unsigned long)s->svr.qtype[i])) return 0; } if(!inhibit_zero || s->svr.qtype_big) { if(!ssl_printf(ssl, "num.query.type.other"SQ"%lu\n", (unsigned long)s->svr.qtype_big)) return 0; } /* CLASS */ for(i=0; isvr.qclass[i] == 0) continue; lt = sldns_lookup_by_id(sldns_rr_classes, i); if(lt && lt->name) { snprintf(nm, sizeof(nm), "%s", lt->name); } else { snprintf(nm, sizeof(nm), "CLASS%d", i); } if(!ssl_printf(ssl, "num.query.class.%s"SQ"%lu\n", nm, (unsigned long)s->svr.qclass[i])) return 0; } if(!inhibit_zero || s->svr.qclass_big) { if(!ssl_printf(ssl, "num.query.class.other"SQ"%lu\n", (unsigned long)s->svr.qclass_big)) return 0; } /* OPCODE */ for(i=0; isvr.qopcode[i] == 0) continue; lt = sldns_lookup_by_id(sldns_opcodes, i); if(lt && lt->name) { snprintf(nm, sizeof(nm), "%s", lt->name); } else { snprintf(nm, sizeof(nm), "OPCODE%d", i); } if(!ssl_printf(ssl, "num.query.opcode.%s"SQ"%lu\n", nm, (unsigned long)s->svr.qopcode[i])) return 0; } /* transport */ if(!ssl_printf(ssl, "num.query.tcp"SQ"%lu\n", (unsigned long)s->svr.qtcp)) return 0; if(!ssl_printf(ssl, "num.query.tcpout"SQ"%lu\n", (unsigned long)s->svr.qtcp_outgoing)) return 0; if(!ssl_printf(ssl, "num.query.tls"SQ"%lu\n", (unsigned long)s->svr.qtls)) return 0; if(!ssl_printf(ssl, "num.query.tls.resume"SQ"%lu\n", (unsigned long)s->svr.qtls_resume)) return 0; if(!ssl_printf(ssl, "num.query.ipv6"SQ"%lu\n", (unsigned long)s->svr.qipv6)) return 0; if(!ssl_printf(ssl, "num.query.https"SQ"%lu\n", (unsigned long)s->svr.qhttps)) return 0; /* flags */ if(!ssl_printf(ssl, "num.query.flags.QR"SQ"%lu\n", (unsigned long)s->svr.qbit_QR)) return 0; if(!ssl_printf(ssl, "num.query.flags.AA"SQ"%lu\n", (unsigned long)s->svr.qbit_AA)) return 0; if(!ssl_printf(ssl, "num.query.flags.TC"SQ"%lu\n", (unsigned long)s->svr.qbit_TC)) return 0; if(!ssl_printf(ssl, "num.query.flags.RD"SQ"%lu\n", (unsigned long)s->svr.qbit_RD)) return 0; if(!ssl_printf(ssl, "num.query.flags.RA"SQ"%lu\n", (unsigned long)s->svr.qbit_RA)) return 0; if(!ssl_printf(ssl, "num.query.flags.Z"SQ"%lu\n", (unsigned long)s->svr.qbit_Z)) return 0; if(!ssl_printf(ssl, "num.query.flags.AD"SQ"%lu\n", (unsigned long)s->svr.qbit_AD)) return 0; if(!ssl_printf(ssl, "num.query.flags.CD"SQ"%lu\n", (unsigned long)s->svr.qbit_CD)) return 0; if(!ssl_printf(ssl, "num.query.edns.present"SQ"%lu\n", (unsigned long)s->svr.qEDNS)) return 0; if(!ssl_printf(ssl, "num.query.edns.DO"SQ"%lu\n", (unsigned long)s->svr.qEDNS_DO)) return 0; /* RCODE */ for(i=0; i LDNS_RCODE_REFUSED && s->svr.ans_rcode[i] == 0) continue; lt = sldns_lookup_by_id(sldns_rcodes, i); if(lt && lt->name) { snprintf(nm, sizeof(nm), "%s", lt->name); } else { snprintf(nm, sizeof(nm), "RCODE%d", i); } if(!ssl_printf(ssl, "num.answer.rcode.%s"SQ"%lu\n", nm, (unsigned long)s->svr.ans_rcode[i])) return 0; } if(!inhibit_zero || s->svr.ans_rcode_nodata) { if(!ssl_printf(ssl, "num.answer.rcode.nodata"SQ"%lu\n", (unsigned long)s->svr.ans_rcode_nodata)) return 0; } /* iteration */ if(!ssl_printf(ssl, "num.query.ratelimited"SQ"%lu\n", (unsigned long)s->svr.queries_ratelimited)) return 0; /* validation */ if(!ssl_printf(ssl, "num.answer.secure"SQ"%lu\n", (unsigned long)s->svr.ans_secure)) return 0; if(!ssl_printf(ssl, "num.answer.bogus"SQ"%lu\n", (unsigned long)s->svr.ans_bogus)) return 0; if(!ssl_printf(ssl, "num.rrset.bogus"SQ"%lu\n", (unsigned long)s->svr.rrset_bogus)) return 0; if(!ssl_printf(ssl, "num.query.aggressive.NOERROR"SQ"%lu\n", (unsigned long)s->svr.num_neg_cache_noerror)) return 0; if(!ssl_printf(ssl, "num.query.aggressive.NXDOMAIN"SQ"%lu\n", (unsigned long)s->svr.num_neg_cache_nxdomain)) return 0; /* threat detection */ if(!ssl_printf(ssl, "unwanted.queries"SQ"%lu\n", (unsigned long)s->svr.unwanted_queries)) return 0; if(!ssl_printf(ssl, "unwanted.replies"SQ"%lu\n", (unsigned long)s->svr.unwanted_replies)) return 0; /* cache counts */ if(!ssl_printf(ssl, "msg.cache.count"SQ"%u\n", (unsigned)s->svr.msg_cache_count)) return 0; if(!ssl_printf(ssl, "rrset.cache.count"SQ"%u\n", (unsigned)s->svr.rrset_cache_count)) return 0; if(!ssl_printf(ssl, "infra.cache.count"SQ"%u\n", (unsigned)s->svr.infra_cache_count)) return 0; if(!ssl_printf(ssl, "key.cache.count"SQ"%u\n", (unsigned)s->svr.key_cache_count)) return 0; /* applied RPZ actions */ for(i=0; isvr.rpz_action[i] == 0) continue; if(!ssl_printf(ssl, "num.rpz.action.%s"SQ"%lu\n", rpz_action_to_string(i), (unsigned long)s->svr.rpz_action[i])) return 0; } #ifdef USE_DNSCRYPT if(!ssl_printf(ssl, "dnscrypt_shared_secret.cache.count"SQ"%u\n", (unsigned)s->svr.shared_secret_cache_count)) return 0; if(!ssl_printf(ssl, "dnscrypt_nonce.cache.count"SQ"%u\n", (unsigned)s->svr.nonce_cache_count)) return 0; if(!ssl_printf(ssl, "num.query.dnscrypt.shared_secret.cachemiss"SQ"%lu\n", (unsigned long)s->svr.num_query_dnscrypt_secret_missed_cache)) return 0; if(!ssl_printf(ssl, "num.query.dnscrypt.replay"SQ"%lu\n", (unsigned long)s->svr.num_query_dnscrypt_replay)) return 0; #endif /* USE_DNSCRYPT */ if(!ssl_printf(ssl, "num.query.authzone.up"SQ"%lu\n", (unsigned long)s->svr.num_query_authzone_up)) return 0; if(!ssl_printf(ssl, "num.query.authzone.down"SQ"%lu\n", (unsigned long)s->svr.num_query_authzone_down)) return 0; #ifdef CLIENT_SUBNET if(!ssl_printf(ssl, "num.query.subnet"SQ"%lu\n", (unsigned long)s->svr.num_query_subnet)) return 0; if(!ssl_printf(ssl, "num.query.subnet_cache"SQ"%lu\n", (unsigned long)s->svr.num_query_subnet_cache)) return 0; #endif /* CLIENT_SUBNET */ return 1; } /** do the stats command */ static void do_stats(RES* ssl, struct worker* worker, int reset) { struct daemon* daemon = worker->daemon; struct ub_stats_info total; struct ub_stats_info s; int i; memset(&total, 0, sizeof(total)); log_assert(daemon->num > 0); /* gather all thread statistics in one place */ for(i=0; inum; i++) { server_stats_obtain(worker, daemon->workers[i], &s, reset); if(!print_thread_stats(ssl, i, &s)) return; if(i == 0) total = s; else server_stats_add(&total, &s); } /* print the thread statistics */ total.mesh_time_median /= (double)daemon->num; if(!print_stats(ssl, "total", &total)) return; if(!print_uptime(ssl, worker, reset)) return; if(daemon->cfg->stat_extended) { if(!print_mem(ssl, worker, daemon, &total)) return; if(!print_hist(ssl, &total)) return; if(!print_ext(ssl, &total)) return; } } /** parse commandline argument domain name */ static int parse_arg_name(RES* ssl, char* str, uint8_t** res, size_t* len, int* labs) { uint8_t nm[LDNS_MAX_DOMAINLEN+1]; size_t nmlen = sizeof(nm); int status; *res = NULL; *len = 0; *labs = 0; if(str[0] == '\0') { ssl_printf(ssl, "error: this option requires a domain name\n"); return 0; } status = sldns_str2wire_dname_buf(str, nm, &nmlen); if(status != 0) { ssl_printf(ssl, "error cannot parse name %s at %d: %s\n", str, LDNS_WIREPARSE_OFFSET(status), sldns_get_errorstr_parse(status)); return 0; } *res = memdup(nm, nmlen); if(!*res) { ssl_printf(ssl, "error out of memory\n"); return 0; } *labs = dname_count_size_labels(*res, len); return 1; } /** find second argument, modifies string */ static int find_arg2(RES* ssl, char* arg, char** arg2) { char* as = strchr(arg, ' '); char* at = strchr(arg, '\t'); if(as && at) { if(at < as) as = at; as[0]=0; *arg2 = skipwhite(as+1); } else if(as) { as[0]=0; *arg2 = skipwhite(as+1); } else if(at) { at[0]=0; *arg2 = skipwhite(at+1); } else { ssl_printf(ssl, "error could not find next argument " "after %s\n", arg); return 0; } return 1; } /** Add a new zone */ static int perform_zone_add(RES* ssl, struct local_zones* zones, char* arg) { uint8_t* nm; int nmlabs; size_t nmlen; char* arg2; enum localzone_type t; struct local_zone* z; if(!find_arg2(ssl, arg, &arg2)) return 0; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return 0; if(!local_zone_str2type(arg2, &t)) { ssl_printf(ssl, "error not a zone type. %s\n", arg2); free(nm); return 0; } lock_rw_wrlock(&zones->lock); if((z=local_zones_find(zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN))) { /* already present in tree */ lock_rw_wrlock(&z->lock); z->type = t; /* update type anyway */ lock_rw_unlock(&z->lock); free(nm); lock_rw_unlock(&zones->lock); return 1; } if(!local_zones_add_zone(zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN, t)) { lock_rw_unlock(&zones->lock); ssl_printf(ssl, "error out of memory\n"); return 0; } lock_rw_unlock(&zones->lock); return 1; } /** Do the local_zone command */ static void do_zone_add(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_zone_add(ssl, zones, arg)) return; send_ok(ssl); } /** Do the local_zones command */ static void do_zones_add(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { if(buf[0] == 0x04 && buf[1] == 0) break; /* end of transmission */ if(!perform_zone_add(ssl, zones, buf)) { if(!ssl_printf(ssl, "error for input line: %s\n", buf)) return; } else num++; } (void)ssl_printf(ssl, "added %d zones\n", num); } /** Remove a zone */ static int perform_zone_remove(RES* ssl, struct local_zones* zones, char* arg) { uint8_t* nm; int nmlabs; size_t nmlen; struct local_zone* z; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return 0; lock_rw_wrlock(&zones->lock); if((z=local_zones_find(zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN))) { /* present in tree */ local_zones_del_zone(zones, z); } lock_rw_unlock(&zones->lock); free(nm); return 1; } /** Do the local_zone_remove command */ static void do_zone_remove(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_zone_remove(ssl, zones, arg)) return; send_ok(ssl); } /** Do the local_zones_remove command */ static void do_zones_remove(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { if(buf[0] == 0x04 && buf[1] == 0) break; /* end of transmission */ if(!perform_zone_remove(ssl, zones, buf)) { if(!ssl_printf(ssl, "error for input line: %s\n", buf)) return; } else num++; } (void)ssl_printf(ssl, "removed %d zones\n", num); } /** Add new RR data */ static int perform_data_add(RES* ssl, struct local_zones* zones, char* arg) { if(!local_zones_add_RR(zones, arg)) { ssl_printf(ssl,"error in syntax or out of memory, %s\n", arg); return 0; } return 1; } /** Do the local_data command */ static void do_data_add(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_data_add(ssl, zones, arg)) return; send_ok(ssl); } /** Do the local_datas command */ static void do_datas_add(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { if(buf[0] == 0x04 && buf[1] == 0) break; /* end of transmission */ if(!perform_data_add(ssl, zones, buf)) { if(!ssl_printf(ssl, "error for input line: %s\n", buf)) return; } else num++; } (void)ssl_printf(ssl, "added %d datas\n", num); } /** Remove RR data */ static int perform_data_remove(RES* ssl, struct local_zones* zones, char* arg) { uint8_t* nm; int nmlabs; size_t nmlen; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return 0; local_zones_del_data(zones, nm, nmlen, nmlabs, LDNS_RR_CLASS_IN); free(nm); return 1; } /** Do the local_data_remove command */ static void do_data_remove(RES* ssl, struct local_zones* zones, char* arg) { if(!perform_data_remove(ssl, zones, arg)) return; send_ok(ssl); } /** Do the local_datas_remove command */ static void do_datas_remove(RES* ssl, struct local_zones* zones) { char buf[2048]; int num = 0; while(ssl_read_line(ssl, buf, sizeof(buf))) { if(buf[0] == 0x04 && buf[1] == 0) break; /* end of transmission */ if(!perform_data_remove(ssl, zones, buf)) { if(!ssl_printf(ssl, "error for input line: %s\n", buf)) return; } else num++; } (void)ssl_printf(ssl, "removed %d datas\n", num); } /** Add a new zone to view */ static void do_view_zone_add(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; if(!find_arg2(ssl, arg, &arg2)) return; v = views_find_view(worker->daemon->views, arg, 1 /* get write lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(!v->local_zones) { if(!(v->local_zones = local_zones_create())){ lock_rw_unlock(&v->lock); ssl_printf(ssl,"error out of memory\n"); return; } if(!v->isfirst) { /* Global local-zone is not used for this view, * therefore add defaults to this view-specic * local-zone. */ struct config_file lz_cfg; memset(&lz_cfg, 0, sizeof(lz_cfg)); local_zone_enter_defaults(v->local_zones, &lz_cfg); } } do_zone_add(ssl, v->local_zones, arg2); lock_rw_unlock(&v->lock); } /** Remove a zone from view */ static void do_view_zone_remove(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; if(!find_arg2(ssl, arg, &arg2)) return; v = views_find_view(worker->daemon->views, arg, 1 /* get write lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(!v->local_zones) { lock_rw_unlock(&v->lock); send_ok(ssl); return; } do_zone_remove(ssl, v->local_zones, arg2); lock_rw_unlock(&v->lock); } /** Add new RR data to view */ static void do_view_data_add(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; if(!find_arg2(ssl, arg, &arg2)) return; v = views_find_view(worker->daemon->views, arg, 1 /* get write lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(!v->local_zones) { if(!(v->local_zones = local_zones_create())){ lock_rw_unlock(&v->lock); ssl_printf(ssl,"error out of memory\n"); return; } } do_data_add(ssl, v->local_zones, arg2); lock_rw_unlock(&v->lock); } /** Add new RR data from stdin to view */ static void do_view_datas_add(RES* ssl, struct worker* worker, char* arg) { struct view* v; v = views_find_view(worker->daemon->views, arg, 1 /* get write lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(!v->local_zones) { if(!(v->local_zones = local_zones_create())){ lock_rw_unlock(&v->lock); ssl_printf(ssl,"error out of memory\n"); return; } } do_datas_add(ssl, v->local_zones); lock_rw_unlock(&v->lock); } /** Remove RR data from view */ static void do_view_data_remove(RES* ssl, struct worker* worker, char* arg) { char* arg2; struct view* v; if(!find_arg2(ssl, arg, &arg2)) return; v = views_find_view(worker->daemon->views, arg, 1 /* get write lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(!v->local_zones) { lock_rw_unlock(&v->lock); send_ok(ssl); return; } do_data_remove(ssl, v->local_zones, arg2); lock_rw_unlock(&v->lock); } /** Remove RR data from stdin from view */ static void do_view_datas_remove(RES* ssl, struct worker* worker, char* arg) { struct view* v; v = views_find_view(worker->daemon->views, arg, 1 /* get write lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(!v->local_zones){ lock_rw_unlock(&v->lock); ssl_printf(ssl, "removed 0 datas\n"); return; } do_datas_remove(ssl, v->local_zones); lock_rw_unlock(&v->lock); } /** cache lookup of nameservers */ static void do_lookup(RES* ssl, struct worker* worker, char* arg) { uint8_t* nm; int nmlabs; size_t nmlen; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; (void)print_deleg_lookup(ssl, worker, nm, nmlen, nmlabs); free(nm); } /** flush something from rrset and msg caches */ static void do_cache_remove(struct worker* worker, uint8_t* nm, size_t nmlen, uint16_t t, uint16_t c) { hashvalue_type h; struct query_info k; rrset_cache_remove(worker->env.rrset_cache, nm, nmlen, t, c, 0); if(t == LDNS_RR_TYPE_SOA) rrset_cache_remove(worker->env.rrset_cache, nm, nmlen, t, c, PACKED_RRSET_SOA_NEG); k.qname = nm; k.qname_len = nmlen; k.qtype = t; k.qclass = c; k.local_alias = NULL; h = query_info_hash(&k, 0); slabhash_remove(worker->env.msg_cache, h, &k); if(t == LDNS_RR_TYPE_AAAA) { /* for AAAA also flush dns64 bit_cd packet */ h = query_info_hash(&k, BIT_CD); slabhash_remove(worker->env.msg_cache, h, &k); } } /** flush a type */ static void do_flush_type(RES* ssl, struct worker* worker, char* arg) { uint8_t* nm; int nmlabs; size_t nmlen; char* arg2; uint16_t t; if(!find_arg2(ssl, arg, &arg2)) return; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; t = sldns_get_rr_type_by_name(arg2); do_cache_remove(worker, nm, nmlen, t, LDNS_RR_CLASS_IN); free(nm); send_ok(ssl); } /** flush statistics */ static void do_flush_stats(RES* ssl, struct worker* worker) { worker_stats_clear(worker); send_ok(ssl); } /** * Local info for deletion functions */ struct del_info { /** worker */ struct worker* worker; /** name to delete */ uint8_t* name; /** length */ size_t len; /** labels */ int labs; /** time to invalidate to */ time_t expired; /** number of rrsets removed */ size_t num_rrsets; /** number of msgs removed */ size_t num_msgs; /** number of key entries removed */ size_t num_keys; /** length of addr */ socklen_t addrlen; /** socket address for host deletion */ struct sockaddr_storage addr; }; /** callback to delete hosts in infra cache */ static void infra_del_host(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct infra_key* k = (struct infra_key*)e->key; if(sockaddr_cmp(&inf->addr, inf->addrlen, &k->addr, k->addrlen) == 0) { struct infra_data* d = (struct infra_data*)e->data; d->probedelay = 0; d->timeout_A = 0; d->timeout_AAAA = 0; d->timeout_other = 0; rtt_init(&d->rtt); if(d->ttl > inf->expired) { d->ttl = inf->expired; inf->num_keys++; } } } /** flush infra cache */ static void do_flush_infra(RES* ssl, struct worker* worker, char* arg) { struct sockaddr_storage addr; socklen_t len; struct del_info inf; if(strcmp(arg, "all") == 0) { slabhash_clear(worker->env.infra_cache->hosts); send_ok(ssl); return; } if(!ipstrtoaddr(arg, UNBOUND_DNS_PORT, &addr, &len)) { (void)ssl_printf(ssl, "error parsing ip addr: '%s'\n", arg); return; } /* delete all entries from cache */ /* what we do is to set them all expired */ inf.worker = worker; inf.name = 0; inf.len = 0; inf.labs = 0; inf.expired = *worker->env.now; inf.expired -= 3; /* handle 3 seconds skew between threads */ inf.num_rrsets = 0; inf.num_msgs = 0; inf.num_keys = 0; inf.addrlen = len; memmove(&inf.addr, &addr, len); slabhash_traverse(worker->env.infra_cache->hosts, 1, &infra_del_host, &inf); send_ok(ssl); } /** flush requestlist */ static void do_flush_requestlist(RES* ssl, struct worker* worker) { mesh_delete_all(worker->env.mesh); send_ok(ssl); } /** callback to delete rrsets in a zone */ static void zone_del_rrset(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct ub_packed_rrset_key* k = (struct ub_packed_rrset_key*)e->key; if(dname_subdomain_c(k->rk.dname, inf->name)) { struct packed_rrset_data* d = (struct packed_rrset_data*)e->data; if(d->ttl > inf->expired) { d->ttl = inf->expired; inf->num_rrsets++; } } } /** callback to delete messages in a zone */ static void zone_del_msg(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct msgreply_entry* k = (struct msgreply_entry*)e->key; if(dname_subdomain_c(k->key.qname, inf->name)) { struct reply_info* d = (struct reply_info*)e->data; if(d->ttl > inf->expired) { d->ttl = inf->expired; d->prefetch_ttl = inf->expired; d->serve_expired_ttl = inf->expired; inf->num_msgs++; } } } /** callback to delete keys in zone */ static void zone_del_kcache(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct key_entry_key* k = (struct key_entry_key*)e->key; if(dname_subdomain_c(k->name, inf->name)) { struct key_entry_data* d = (struct key_entry_data*)e->data; if(d->ttl > inf->expired) { d->ttl = inf->expired; inf->num_keys++; } } } /** remove all rrsets and keys from zone from cache */ static void do_flush_zone(RES* ssl, struct worker* worker, char* arg) { uint8_t* nm; int nmlabs; size_t nmlen; struct del_info inf; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; /* delete all RRs and key entries from zone */ /* what we do is to set them all expired */ inf.worker = worker; inf.name = nm; inf.len = nmlen; inf.labs = nmlabs; inf.expired = *worker->env.now; inf.expired -= 3; /* handle 3 seconds skew between threads */ inf.num_rrsets = 0; inf.num_msgs = 0; inf.num_keys = 0; slabhash_traverse(&worker->env.rrset_cache->table, 1, &zone_del_rrset, &inf); slabhash_traverse(worker->env.msg_cache, 1, &zone_del_msg, &inf); /* and validator cache */ if(worker->env.key_cache) { slabhash_traverse(worker->env.key_cache->slab, 1, &zone_del_kcache, &inf); } free(nm); (void)ssl_printf(ssl, "ok removed %lu rrsets, %lu messages " "and %lu key entries\n", (unsigned long)inf.num_rrsets, (unsigned long)inf.num_msgs, (unsigned long)inf.num_keys); } /** callback to delete bogus rrsets */ static void bogus_del_rrset(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct packed_rrset_data* d = (struct packed_rrset_data*)e->data; if(d->security == sec_status_bogus) { d->ttl = inf->expired; inf->num_rrsets++; } } /** callback to delete bogus messages */ static void bogus_del_msg(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct reply_info* d = (struct reply_info*)e->data; if(d->security == sec_status_bogus) { d->ttl = inf->expired; inf->num_msgs++; } } /** callback to delete bogus keys */ static void bogus_del_kcache(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct key_entry_data* d = (struct key_entry_data*)e->data; if(d->isbad) { d->ttl = inf->expired; inf->num_keys++; } } /** remove all bogus rrsets, msgs and keys from cache */ static void do_flush_bogus(RES* ssl, struct worker* worker) { struct del_info inf; /* what we do is to set them all expired */ inf.worker = worker; inf.expired = *worker->env.now; inf.expired -= 3; /* handle 3 seconds skew between threads */ inf.num_rrsets = 0; inf.num_msgs = 0; inf.num_keys = 0; slabhash_traverse(&worker->env.rrset_cache->table, 1, &bogus_del_rrset, &inf); slabhash_traverse(worker->env.msg_cache, 1, &bogus_del_msg, &inf); /* and validator cache */ if(worker->env.key_cache) { slabhash_traverse(worker->env.key_cache->slab, 1, &bogus_del_kcache, &inf); } (void)ssl_printf(ssl, "ok removed %lu rrsets, %lu messages " "and %lu key entries\n", (unsigned long)inf.num_rrsets, (unsigned long)inf.num_msgs, (unsigned long)inf.num_keys); } /** callback to delete negative and servfail rrsets */ static void negative_del_rrset(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct ub_packed_rrset_key* k = (struct ub_packed_rrset_key*)e->key; struct packed_rrset_data* d = (struct packed_rrset_data*)e->data; /* delete the parentside negative cache rrsets, * these are nameserver rrsets that failed lookup, rdata empty */ if((k->rk.flags & PACKED_RRSET_PARENT_SIDE) && d->count == 1 && d->rrsig_count == 0 && d->rr_len[0] == 0) { d->ttl = inf->expired; inf->num_rrsets++; } } /** callback to delete negative and servfail messages */ static void negative_del_msg(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct reply_info* d = (struct reply_info*)e->data; /* rcode not NOERROR: NXDOMAIN, SERVFAIL, ..: an nxdomain or error * or NOERROR rcode with ANCOUNT==0: a NODATA answer */ if(FLAGS_GET_RCODE(d->flags) != 0 || d->an_numrrsets == 0) { d->ttl = inf->expired; inf->num_msgs++; } } /** callback to delete negative key entries */ static void negative_del_kcache(struct lruhash_entry* e, void* arg) { /* entry is locked */ struct del_info* inf = (struct del_info*)arg; struct key_entry_data* d = (struct key_entry_data*)e->data; /* could be bad because of lookup failure on the DS, DNSKEY, which * was nxdomain or servfail, and thus a result of negative lookups */ if(d->isbad) { d->ttl = inf->expired; inf->num_keys++; } } /** remove all negative(NODATA,NXDOMAIN), and servfail messages from cache */ static void do_flush_negative(RES* ssl, struct worker* worker) { struct del_info inf; /* what we do is to set them all expired */ inf.worker = worker; inf.expired = *worker->env.now; inf.expired -= 3; /* handle 3 seconds skew between threads */ inf.num_rrsets = 0; inf.num_msgs = 0; inf.num_keys = 0; slabhash_traverse(&worker->env.rrset_cache->table, 1, &negative_del_rrset, &inf); slabhash_traverse(worker->env.msg_cache, 1, &negative_del_msg, &inf); /* and validator cache */ if(worker->env.key_cache) { slabhash_traverse(worker->env.key_cache->slab, 1, &negative_del_kcache, &inf); } (void)ssl_printf(ssl, "ok removed %lu rrsets, %lu messages " "and %lu key entries\n", (unsigned long)inf.num_rrsets, (unsigned long)inf.num_msgs, (unsigned long)inf.num_keys); } /** remove name rrset from cache */ static void do_flush_name(RES* ssl, struct worker* w, char* arg) { uint8_t* nm; int nmlabs; size_t nmlen; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_AAAA, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SOA, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_CNAME, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_DNAME, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_MX, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_PTR, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_SRV, LDNS_RR_CLASS_IN); do_cache_remove(w, nm, nmlen, LDNS_RR_TYPE_NAPTR, LDNS_RR_CLASS_IN); free(nm); send_ok(ssl); } /** printout a delegation point info */ static int ssl_print_name_dp(RES* ssl, const char* str, uint8_t* nm, uint16_t dclass, struct delegpt* dp) { char buf[257]; struct delegpt_ns* ns; struct delegpt_addr* a; int f = 0; if(str) { /* print header for forward, stub */ char* c = sldns_wire2str_class(dclass); dname_str(nm, buf); if(!ssl_printf(ssl, "%s %s %s ", buf, (c?c:"CLASS??"), str)) { free(c); return 0; } free(c); } for(ns = dp->nslist; ns; ns = ns->next) { dname_str(ns->name, buf); if(!ssl_printf(ssl, "%s%s", (f?" ":""), buf)) return 0; f = 1; } for(a = dp->target_list; a; a = a->next_target) { addr_to_str(&a->addr, a->addrlen, buf, sizeof(buf)); if(!ssl_printf(ssl, "%s%s", (f?" ":""), buf)) return 0; f = 1; } return ssl_printf(ssl, "\n"); } /** print root forwards */ static int print_root_fwds(RES* ssl, struct iter_forwards* fwds, uint8_t* root) { struct delegpt* dp; dp = forwards_lookup(fwds, root, LDNS_RR_CLASS_IN); if(!dp) return ssl_printf(ssl, "off (using root hints)\n"); /* if dp is returned it must be the root */ log_assert(query_dname_compare(dp->name, root)==0); return ssl_print_name_dp(ssl, NULL, root, LDNS_RR_CLASS_IN, dp); } /** parse args into delegpt */ static struct delegpt* parse_delegpt(RES* ssl, char* args, uint8_t* nm, int allow_names) { /* parse args and add in */ char* p = args; char* todo; struct delegpt* dp = delegpt_create_mlc(nm); struct sockaddr_storage addr; socklen_t addrlen; char* auth_name; if(!dp) { (void)ssl_printf(ssl, "error out of memory\n"); return NULL; } while(p) { todo = p; p = strchr(p, ' '); /* find next spot, if any */ if(p) { *p++ = 0; /* end this spot */ p = skipwhite(p); /* position at next spot */ } /* parse address */ if(!authextstrtoaddr(todo, &addr, &addrlen, &auth_name)) { if(allow_names) { uint8_t* n = NULL; size_t ln; int lb; if(!parse_arg_name(ssl, todo, &n, &ln, &lb)) { (void)ssl_printf(ssl, "error cannot " "parse IP address or name " "'%s'\n", todo); delegpt_free_mlc(dp); return NULL; } if(!delegpt_add_ns_mlc(dp, n, 0)) { (void)ssl_printf(ssl, "error out of memory\n"); free(n); delegpt_free_mlc(dp); return NULL; } free(n); } else { (void)ssl_printf(ssl, "error cannot parse" " IP address '%s'\n", todo); delegpt_free_mlc(dp); return NULL; } } else { #if ! defined(HAVE_SSL_SET1_HOST) && ! defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) if(auth_name) log_err("no name verification functionality in " "ssl library, ignored name for %s", todo); #endif /* add address */ if(!delegpt_add_addr_mlc(dp, &addr, addrlen, 0, 0, auth_name)) { (void)ssl_printf(ssl, "error out of memory\n"); delegpt_free_mlc(dp); return NULL; } } } dp->has_parent_side_NS = 1; return dp; } /** do the status command */ static void do_forward(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; uint8_t* root = (uint8_t*)"\000"; if(!fwd) { (void)ssl_printf(ssl, "error: structure not allocated\n"); return; } if(args == NULL || args[0] == 0) { (void)print_root_fwds(ssl, fwd, root); return; } /* set root forwards for this thread. since we are in remote control * the actual mesh is not running, so we can freely edit it. */ /* delete all the existing queries first */ mesh_delete_all(worker->env.mesh); if(strcmp(args, "off") == 0) { forwards_delete_zone(fwd, LDNS_RR_CLASS_IN, root); } else { struct delegpt* dp; if(!(dp = parse_delegpt(ssl, args, root, 0))) return; if(!forwards_add_zone(fwd, LDNS_RR_CLASS_IN, dp)) { (void)ssl_printf(ssl, "error out of memory\n"); return; } } send_ok(ssl); } static int parse_fs_args(RES* ssl, char* args, uint8_t** nm, struct delegpt** dp, int* insecure, int* prime) { char* zonename; char* rest; size_t nmlen; int nmlabs; /* parse all -x args */ while(args[0] == '+') { if(!find_arg2(ssl, args, &rest)) return 0; while(*(++args) != 0) { if(*args == 'i' && insecure) *insecure = 1; else if(*args == 'p' && prime) *prime = 1; else { (void)ssl_printf(ssl, "error: unknown option %s\n", args); return 0; } } args = rest; } /* parse name */ if(dp) { if(!find_arg2(ssl, args, &rest)) return 0; zonename = args; args = rest; } else zonename = args; if(!parse_arg_name(ssl, zonename, nm, &nmlen, &nmlabs)) return 0; /* parse dp */ if(dp) { if(!(*dp = parse_delegpt(ssl, args, *nm, 1))) { free(*nm); return 0; } } return 1; } /** do the forward_add command */ static void do_forward_add(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0; uint8_t* nm = NULL; struct delegpt* dp = NULL; if(!parse_fs_args(ssl, args, &nm, &dp, &insecure, NULL)) return; if(insecure && worker->env.anchors) { if(!anchors_add_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm)) { (void)ssl_printf(ssl, "error out of memory\n"); delegpt_free_mlc(dp); free(nm); return; } } if(!forwards_add_zone(fwd, LDNS_RR_CLASS_IN, dp)) { (void)ssl_printf(ssl, "error out of memory\n"); free(nm); return; } free(nm); send_ok(ssl); } /** do the forward_remove command */ static void do_forward_remove(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0; uint8_t* nm = NULL; if(!parse_fs_args(ssl, args, &nm, NULL, &insecure, NULL)) return; if(insecure && worker->env.anchors) anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm); forwards_delete_zone(fwd, LDNS_RR_CLASS_IN, nm); free(nm); send_ok(ssl); } /** do the stub_add command */ static void do_stub_add(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0, prime = 0; uint8_t* nm = NULL; struct delegpt* dp = NULL; if(!parse_fs_args(ssl, args, &nm, &dp, &insecure, &prime)) return; if(insecure && worker->env.anchors) { if(!anchors_add_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm)) { (void)ssl_printf(ssl, "error out of memory\n"); delegpt_free_mlc(dp); free(nm); return; } } if(!forwards_add_stub_hole(fwd, LDNS_RR_CLASS_IN, nm)) { if(insecure && worker->env.anchors) anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm); (void)ssl_printf(ssl, "error out of memory\n"); delegpt_free_mlc(dp); free(nm); return; } if(!hints_add_stub(worker->env.hints, LDNS_RR_CLASS_IN, dp, !prime)) { (void)ssl_printf(ssl, "error out of memory\n"); forwards_delete_stub_hole(fwd, LDNS_RR_CLASS_IN, nm); if(insecure && worker->env.anchors) anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm); free(nm); return; } free(nm); send_ok(ssl); } /** do the stub_remove command */ static void do_stub_remove(RES* ssl, struct worker* worker, char* args) { struct iter_forwards* fwd = worker->env.fwds; int insecure = 0; uint8_t* nm = NULL; if(!parse_fs_args(ssl, args, &nm, NULL, &insecure, NULL)) return; if(insecure && worker->env.anchors) anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm); forwards_delete_stub_hole(fwd, LDNS_RR_CLASS_IN, nm); hints_delete_stub(worker->env.hints, LDNS_RR_CLASS_IN, nm); free(nm); send_ok(ssl); } /** do the insecure_add command */ static void do_insecure_add(RES* ssl, struct worker* worker, char* arg) { size_t nmlen; int nmlabs; uint8_t* nm = NULL; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if(worker->env.anchors) { if(!anchors_add_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm)) { (void)ssl_printf(ssl, "error out of memory\n"); free(nm); return; } } free(nm); send_ok(ssl); } /** do the insecure_remove command */ static void do_insecure_remove(RES* ssl, struct worker* worker, char* arg) { size_t nmlen; int nmlabs; uint8_t* nm = NULL; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if(worker->env.anchors) anchors_delete_insecure(worker->env.anchors, LDNS_RR_CLASS_IN, nm); free(nm); send_ok(ssl); } static void do_insecure_list(RES* ssl, struct worker* worker) { char buf[257]; struct trust_anchor* a; if(worker->env.anchors) { RBTREE_FOR(a, struct trust_anchor*, worker->env.anchors->tree) { if(a->numDS == 0 && a->numDNSKEY == 0) { dname_str(a->name, buf); ssl_printf(ssl, "%s\n", buf); } } } } /** do the status command */ static void do_status(RES* ssl, struct worker* worker) { int i; time_t uptime; if(!ssl_printf(ssl, "version: %s\n", PACKAGE_VERSION)) return; if(!ssl_printf(ssl, "verbosity: %d\n", verbosity)) return; if(!ssl_printf(ssl, "threads: %d\n", worker->daemon->num)) return; if(!ssl_printf(ssl, "modules: %d [", worker->daemon->mods.num)) return; for(i=0; idaemon->mods.num; i++) { if(!ssl_printf(ssl, " %s", worker->daemon->mods.mod[i]->name)) return; } if(!ssl_printf(ssl, " ]\n")) return; uptime = (time_t)time(NULL) - (time_t)worker->daemon->time_boot.tv_sec; if(!ssl_printf(ssl, "uptime: " ARG_LL "d seconds\n", (long long)uptime)) return; if(!ssl_printf(ssl, "options:%s%s%s%s\n" , (worker->daemon->reuseport?" reuseport":""), (worker->daemon->rc->accept_list?" control":""), (worker->daemon->rc->accept_list && worker->daemon->rc->use_cert?"(ssl)":""), (worker->daemon->rc->accept_list && worker->daemon->cfg->control_ifs.first && worker->daemon->cfg->control_ifs.first->str && worker->daemon->cfg->control_ifs.first->str[0] == '/'?"(namedpipe)":"") )) return; if(!ssl_printf(ssl, "unbound (pid %d) is running...\n", (int)getpid())) return; } /** get age for the mesh state */ static void get_mesh_age(struct mesh_state* m, char* buf, size_t len, struct module_env* env) { if(m->reply_list) { struct timeval d; struct mesh_reply* r = m->reply_list; /* last reply is the oldest */ while(r && r->next) r = r->next; timeval_subtract(&d, env->now_tv, &r->start_time); snprintf(buf, len, ARG_LL "d.%6.6d", (long long)d.tv_sec, (int)d.tv_usec); } else { snprintf(buf, len, "-"); } } /** get status of a mesh state */ static void get_mesh_status(struct mesh_area* mesh, struct mesh_state* m, char* buf, size_t len) { enum module_ext_state s = m->s.ext_state[m->s.curmod]; const char *modname = mesh->mods.mod[m->s.curmod]->name; size_t l; if(strcmp(modname, "iterator") == 0 && s == module_wait_reply && m->s.minfo[m->s.curmod]) { /* break into iterator to find out who its waiting for */ struct iter_qstate* qstate = (struct iter_qstate*) m->s.minfo[m->s.curmod]; struct outbound_list* ol = &qstate->outlist; struct outbound_entry* e; snprintf(buf, len, "%s wait for", modname); l = strlen(buf); buf += l; len -= l; if(ol->first == NULL) snprintf(buf, len, " (empty_list)"); for(e = ol->first; e; e = e->next) { snprintf(buf, len, " "); l = strlen(buf); buf += l; len -= l; addr_to_str(&e->qsent->addr, e->qsent->addrlen, buf, len); l = strlen(buf); buf += l; len -= l; } } else if(s == module_wait_subquery) { /* look in subs from mesh state to see what */ char nm[257]; struct mesh_state_ref* sub; snprintf(buf, len, "%s wants", modname); l = strlen(buf); buf += l; len -= l; if(m->sub_set.count == 0) snprintf(buf, len, " (empty_list)"); RBTREE_FOR(sub, struct mesh_state_ref*, &m->sub_set) { char* t = sldns_wire2str_type(sub->s->s.qinfo.qtype); char* c = sldns_wire2str_class(sub->s->s.qinfo.qclass); dname_str(sub->s->s.qinfo.qname, nm); snprintf(buf, len, " %s %s %s", (t?t:"TYPE??"), (c?c:"CLASS??"), nm); l = strlen(buf); buf += l; len -= l; free(t); free(c); } } else { snprintf(buf, len, "%s is %s", modname, strextstate(s)); } } /** do the dump_requestlist command */ static void do_dump_requestlist(RES* ssl, struct worker* worker) { struct mesh_area* mesh; struct mesh_state* m; int num = 0; char buf[257]; char timebuf[32]; char statbuf[10240]; if(!ssl_printf(ssl, "thread #%d\n", worker->thread_num)) return; if(!ssl_printf(ssl, "# type cl name seconds module status\n")) return; /* show worker mesh contents */ mesh = worker->env.mesh; if(!mesh) return; RBTREE_FOR(m, struct mesh_state*, &mesh->all) { char* t = sldns_wire2str_type(m->s.qinfo.qtype); char* c = sldns_wire2str_class(m->s.qinfo.qclass); dname_str(m->s.qinfo.qname, buf); get_mesh_age(m, timebuf, sizeof(timebuf), &worker->env); get_mesh_status(mesh, m, statbuf, sizeof(statbuf)); if(!ssl_printf(ssl, "%3d %4s %2s %s %s %s\n", num, (t?t:"TYPE??"), (c?c:"CLASS??"), buf, timebuf, statbuf)) { free(t); free(c); return; } num++; free(t); free(c); } } /** structure for argument data for dump infra host */ struct infra_arg { /** the infra cache */ struct infra_cache* infra; /** the SSL connection */ RES* ssl; /** the time now */ time_t now; /** ssl failure? stop writing and skip the rest. If the tcp * connection is broken, and writes fail, we then stop writing. */ int ssl_failed; }; /** callback for every host element in the infra cache */ static void dump_infra_host(struct lruhash_entry* e, void* arg) { struct infra_arg* a = (struct infra_arg*)arg; struct infra_key* k = (struct infra_key*)e->key; struct infra_data* d = (struct infra_data*)e->data; char ip_str[1024]; char name[257]; int port; if(a->ssl_failed) return; addr_to_str(&k->addr, k->addrlen, ip_str, sizeof(ip_str)); dname_str(k->zonename, name); port = (int)ntohs(((struct sockaddr_in*)&k->addr)->sin_port); if(port != UNBOUND_DNS_PORT) { snprintf(ip_str+strlen(ip_str), sizeof(ip_str)-strlen(ip_str), "@%d", port); } /* skip expired stuff (only backed off) */ if(d->ttl < a->now) { if(d->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT) { if(!ssl_printf(a->ssl, "%s %s expired rto %d\n", ip_str, name, d->rtt.rto)) { a->ssl_failed = 1; return; } } return; } if(!ssl_printf(a->ssl, "%s %s ttl %lu ping %d var %d rtt %d rto %d " "tA %d tAAAA %d tother %d " "ednsknown %d edns %d delay %d lame dnssec %d rec %d A %d " "other %d\n", ip_str, name, (unsigned long)(d->ttl - a->now), d->rtt.srtt, d->rtt.rttvar, rtt_notimeout(&d->rtt), d->rtt.rto, d->timeout_A, d->timeout_AAAA, d->timeout_other, (int)d->edns_lame_known, (int)d->edns_version, (int)(a->nowprobedelay?(d->probedelay - a->now):0), (int)d->isdnsseclame, (int)d->rec_lame, (int)d->lame_type_A, (int)d->lame_other)) { a->ssl_failed = 1; return; } } /** do the dump_infra command */ static void do_dump_infra(RES* ssl, struct worker* worker) { struct infra_arg arg; arg.infra = worker->env.infra_cache; arg.ssl = ssl; arg.now = *worker->env.now; arg.ssl_failed = 0; slabhash_traverse(arg.infra->hosts, 0, &dump_infra_host, (void*)&arg); } /** do the log_reopen command */ static void do_log_reopen(RES* ssl, struct worker* worker) { struct config_file* cfg = worker->env.cfg; send_ok(ssl); log_init(cfg->logfile, cfg->use_syslog, cfg->chrootdir); } /** do the auth_zone_reload command */ static void do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) { size_t nmlen; int nmlabs; uint8_t* nm = NULL; struct auth_zones* az = worker->env.auth_zones; struct auth_zone* z = NULL; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if(az) { lock_rw_rdlock(&az->lock); z = auth_zone_find(az, nm, nmlen, LDNS_RR_CLASS_IN); if(z) { lock_rw_wrlock(&z->lock); } lock_rw_unlock(&az->lock); } free(nm); if(!z) { (void)ssl_printf(ssl, "error no auth-zone %s\n", arg); return; } if(!auth_zone_read_zonefile(z, worker->env.cfg)) { lock_rw_unlock(&z->lock); (void)ssl_printf(ssl, "error failed to read %s\n", arg); return; } lock_rw_unlock(&z->lock); send_ok(ssl); } /** do the auth_zone_transfer command */ static void do_auth_zone_transfer(RES* ssl, struct worker* worker, char* arg) { size_t nmlen; int nmlabs; uint8_t* nm = NULL; struct auth_zones* az = worker->env.auth_zones; if(!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if(!az || !auth_zones_startprobesequence(az, &worker->env, nm, nmlen, LDNS_RR_CLASS_IN)) { (void)ssl_printf(ssl, "error zone xfr task not found %s\n", arg); free(nm); return; } free(nm); send_ok(ssl); } /** do the set_option command */ static void do_set_option(RES* ssl, struct worker* worker, char* arg) { char* arg2; if(!find_arg2(ssl, arg, &arg2)) return; if(!config_set_option(worker->env.cfg, arg, arg2)) { (void)ssl_printf(ssl, "error setting option\n"); return; } /* effectuate some arguments */ if(strcmp(arg, "val-override-date:") == 0) { int m = modstack_find(&worker->env.mesh->mods, "validator"); struct val_env* val_env = NULL; if(m != -1) val_env = (struct val_env*)worker->env.modinfo[m]; if(val_env) val_env->date_override = worker->env.cfg->val_date_override; } send_ok(ssl); } /* routine to printout option values over SSL */ void remote_get_opt_ssl(char* line, void* arg) { RES* ssl = (RES*)arg; (void)ssl_printf(ssl, "%s\n", line); } /** do the get_option command */ static void do_get_option(RES* ssl, struct worker* worker, char* arg) { int r; r = config_get_option(worker->env.cfg, arg, remote_get_opt_ssl, ssl); if(!r) { (void)ssl_printf(ssl, "error unknown option\n"); return; } } /** do the list_forwards command */ static void do_list_forwards(RES* ssl, struct worker* worker) { /* since its a per-worker structure no locks needed */ struct iter_forwards* fwds = worker->env.fwds; struct iter_forward_zone* z; struct trust_anchor* a; int insecure; RBTREE_FOR(z, struct iter_forward_zone*, fwds->tree) { if(!z->dp) continue; /* skip empty marker for stub */ /* see if it is insecure */ insecure = 0; if(worker->env.anchors && (a=anchor_find(worker->env.anchors, z->name, z->namelabs, z->namelen, z->dclass))) { if(!a->keylist && !a->numDS && !a->numDNSKEY) insecure = 1; lock_basic_unlock(&a->lock); } if(!ssl_print_name_dp(ssl, (insecure?"forward +i":"forward"), z->name, z->dclass, z->dp)) return; } } /** do the list_stubs command */ static void do_list_stubs(RES* ssl, struct worker* worker) { struct iter_hints_stub* z; struct trust_anchor* a; int insecure; char str[32]; RBTREE_FOR(z, struct iter_hints_stub*, &worker->env.hints->tree) { /* see if it is insecure */ insecure = 0; if(worker->env.anchors && (a=anchor_find(worker->env.anchors, z->node.name, z->node.labs, z->node.len, z->node.dclass))) { if(!a->keylist && !a->numDS && !a->numDNSKEY) insecure = 1; lock_basic_unlock(&a->lock); } snprintf(str, sizeof(str), "stub %sprime%s", (z->noprime?"no":""), (insecure?" +i":"")); if(!ssl_print_name_dp(ssl, str, z->node.name, z->node.dclass, z->dp)) return; } } /** do the list_auth_zones command */ static void do_list_auth_zones(RES* ssl, struct auth_zones* az) { struct auth_zone* z; char buf[257], buf2[256]; lock_rw_rdlock(&az->lock); RBTREE_FOR(z, struct auth_zone*, &az->ztree) { lock_rw_rdlock(&z->lock); dname_str(z->name, buf); if(z->zone_expired) snprintf(buf2, sizeof(buf2), "expired"); else { uint32_t serial = 0; if(auth_zone_get_serial(z, &serial)) snprintf(buf2, sizeof(buf2), "serial %u", (unsigned)serial); else snprintf(buf2, sizeof(buf2), "no serial"); } if(!ssl_printf(ssl, "%s\t%s\n", buf, buf2)) { /* failure to print */ lock_rw_unlock(&z->lock); lock_rw_unlock(&az->lock); return; } lock_rw_unlock(&z->lock); } lock_rw_unlock(&az->lock); } /** do the list_local_zones command */ static void do_list_local_zones(RES* ssl, struct local_zones* zones) { struct local_zone* z; char buf[257]; lock_rw_rdlock(&zones->lock); RBTREE_FOR(z, struct local_zone*, &zones->ztree) { lock_rw_rdlock(&z->lock); dname_str(z->name, buf); if(!ssl_printf(ssl, "%s %s\n", buf, local_zone_type2str(z->type))) { /* failure to print */ lock_rw_unlock(&z->lock); lock_rw_unlock(&zones->lock); return; } lock_rw_unlock(&z->lock); } lock_rw_unlock(&zones->lock); } /** do the list_local_data command */ static void do_list_local_data(RES* ssl, struct worker* worker, struct local_zones* zones) { struct local_zone* z; struct local_data* d; struct local_rrset* p; char* s = (char*)sldns_buffer_begin(worker->env.scratch_buffer); size_t slen = sldns_buffer_capacity(worker->env.scratch_buffer); lock_rw_rdlock(&zones->lock); RBTREE_FOR(z, struct local_zone*, &zones->ztree) { lock_rw_rdlock(&z->lock); RBTREE_FOR(d, struct local_data*, &z->data) { for(p = d->rrsets; p; p = p->next) { struct packed_rrset_data* d = (struct packed_rrset_data*)p->rrset->entry.data; size_t i; for(i=0; icount + d->rrsig_count; i++) { if(!packed_rr_to_string(p->rrset, i, 0, s, slen)) { if(!ssl_printf(ssl, "BADRR\n")) { lock_rw_unlock(&z->lock); lock_rw_unlock(&zones->lock); return; } } if(!ssl_printf(ssl, "%s\n", s)) { lock_rw_unlock(&z->lock); lock_rw_unlock(&zones->lock); return; } } } } lock_rw_unlock(&z->lock); } lock_rw_unlock(&zones->lock); } /** do the view_list_local_zones command */ static void do_view_list_local_zones(RES* ssl, struct worker* worker, char* arg) { struct view* v = views_find_view(worker->daemon->views, arg, 0 /* get read lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(v->local_zones) { do_list_local_zones(ssl, v->local_zones); } lock_rw_unlock(&v->lock); } /** do the view_list_local_data command */ static void do_view_list_local_data(RES* ssl, struct worker* worker, char* arg) { struct view* v = views_find_view(worker->daemon->views, arg, 0 /* get read lock*/); if(!v) { ssl_printf(ssl,"no view with name: %s\n", arg); return; } if(v->local_zones) { do_list_local_data(ssl, worker, v->local_zones); } lock_rw_unlock(&v->lock); } /** struct for user arg ratelimit list */ struct ratelimit_list_arg { /** the infra cache */ struct infra_cache* infra; /** the SSL to print to */ RES* ssl; /** all or only ratelimited */ int all; /** current time */ time_t now; }; #define ip_ratelimit_list_arg ratelimit_list_arg /** list items in the ratelimit table */ static void rate_list(struct lruhash_entry* e, void* arg) { struct ratelimit_list_arg* a = (struct ratelimit_list_arg*)arg; struct rate_key* k = (struct rate_key*)e->key; struct rate_data* d = (struct rate_data*)e->data; char buf[257]; int lim = infra_find_ratelimit(a->infra, k->name, k->namelen); int max = infra_rate_max(d, a->now); if(a->all == 0) { if(max < lim) return; } dname_str(k->name, buf); ssl_printf(a->ssl, "%s %d limit %d\n", buf, max, lim); } /** list items in the ip_ratelimit table */ static void ip_rate_list(struct lruhash_entry* e, void* arg) { char ip[128]; struct ip_ratelimit_list_arg* a = (struct ip_ratelimit_list_arg*)arg; struct ip_rate_key* k = (struct ip_rate_key*)e->key; struct ip_rate_data* d = (struct ip_rate_data*)e->data; int lim = infra_ip_ratelimit; int max = infra_rate_max(d, a->now); if(a->all == 0) { if(max < lim) return; } addr_to_str(&k->addr, k->addrlen, ip, sizeof(ip)); ssl_printf(a->ssl, "%s %d limit %d\n", ip, max, lim); } /** do the ratelimit_list command */ static void do_ratelimit_list(RES* ssl, struct worker* worker, char* arg) { struct ratelimit_list_arg a; a.all = 0; a.infra = worker->env.infra_cache; a.now = *worker->env.now; a.ssl = ssl; arg = skipwhite(arg); if(strcmp(arg, "+a") == 0) a.all = 1; if(a.infra->domain_rates==NULL || (a.all == 0 && infra_dp_ratelimit == 0)) return; slabhash_traverse(a.infra->domain_rates, 0, rate_list, &a); } /** do the ip_ratelimit_list command */ static void do_ip_ratelimit_list(RES* ssl, struct worker* worker, char* arg) { struct ip_ratelimit_list_arg a; a.all = 0; a.infra = worker->env.infra_cache; a.now = *worker->env.now; a.ssl = ssl; arg = skipwhite(arg); if(strcmp(arg, "+a") == 0) a.all = 1; if(a.infra->client_ip_rates==NULL || (a.all == 0 && infra_ip_ratelimit == 0)) return; slabhash_traverse(a.infra->client_ip_rates, 0, ip_rate_list, &a); } /** do the rpz_enable/disable command */ static void do_rpz_enable_disable(RES* ssl, struct worker* worker, char* arg, int enable) { size_t nmlen; int nmlabs; uint8_t *nm = NULL; struct auth_zones *az = worker->env.auth_zones; struct auth_zone *z = NULL; if (!parse_arg_name(ssl, arg, &nm, &nmlen, &nmlabs)) return; if (az) { lock_rw_rdlock(&az->lock); z = auth_zone_find(az, nm, nmlen, LDNS_RR_CLASS_IN); if (z) { lock_rw_wrlock(&z->lock); } lock_rw_unlock(&az->lock); } free(nm); if (!z) { (void) ssl_printf(ssl, "error no auth-zone %s\n", arg); return; } if (!z->rpz) { (void) ssl_printf(ssl, "error auth-zone %s not RPZ\n", arg); lock_rw_unlock(&z->lock); return; } if (enable) { rpz_enable(z->rpz); } else { rpz_disable(z->rpz); } lock_rw_unlock(&z->lock); send_ok(ssl); } /** do the rpz_enable command */ static void do_rpz_enable(RES* ssl, struct worker* worker, char* arg) { do_rpz_enable_disable(ssl, worker, arg, 1); } /** do the rpz_disable command */ static void do_rpz_disable(RES* ssl, struct worker* worker, char* arg) { do_rpz_enable_disable(ssl, worker, arg, 0); } /** tell other processes to execute the command */ static void distribute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd) { int i; if(!cmd || !ssl) return; /* skip i=0 which is me */ for(i=1; iworker->daemon->num; i++) { worker_send_cmd(rc->worker->daemon->workers[i], worker_cmd_remote); if(!tube_write_msg(rc->worker->daemon->workers[i]->cmd, (uint8_t*)cmd, strlen(cmd)+1, 0)) { ssl_printf(ssl, "error could not distribute cmd\n"); return; } } } /** check for name with end-of-string, space or tab after it */ static int cmdcmp(char* p, const char* cmd, size_t len) { return strncmp(p,cmd,len)==0 && (p[len]==0||p[len]==' '||p[len]=='\t'); } /** execute a remote control command */ static void execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd, struct worker* worker) { char* p = skipwhite(cmd); /* compare command */ if(cmdcmp(p, "stop", 4)) { do_stop(ssl, worker); return; } else if(cmdcmp(p, "reload", 6)) { do_reload(ssl, worker); return; } else if(cmdcmp(p, "stats_noreset", 13)) { do_stats(ssl, worker, 0); return; } else if(cmdcmp(p, "stats", 5)) { do_stats(ssl, worker, 1); return; } else if(cmdcmp(p, "status", 6)) { do_status(ssl, worker); return; } else if(cmdcmp(p, "dump_cache", 10)) { (void)dump_cache(ssl, worker); return; } else if(cmdcmp(p, "load_cache", 10)) { if(load_cache(ssl, worker)) send_ok(ssl); return; } else if(cmdcmp(p, "list_forwards", 13)) { do_list_forwards(ssl, worker); return; } else if(cmdcmp(p, "list_stubs", 10)) { do_list_stubs(ssl, worker); return; } else if(cmdcmp(p, "list_insecure", 13)) { do_insecure_list(ssl, worker); return; } else if(cmdcmp(p, "list_local_zones", 16)) { do_list_local_zones(ssl, worker->daemon->local_zones); return; } else if(cmdcmp(p, "list_local_data", 15)) { do_list_local_data(ssl, worker, worker->daemon->local_zones); return; } else if(cmdcmp(p, "view_list_local_zones", 21)) { do_view_list_local_zones(ssl, worker, skipwhite(p+21)); return; } else if(cmdcmp(p, "view_list_local_data", 20)) { do_view_list_local_data(ssl, worker, skipwhite(p+20)); return; } else if(cmdcmp(p, "ratelimit_list", 14)) { do_ratelimit_list(ssl, worker, p+14); return; } else if(cmdcmp(p, "ip_ratelimit_list", 17)) { do_ip_ratelimit_list(ssl, worker, p+17); return; } else if(cmdcmp(p, "list_auth_zones", 15)) { do_list_auth_zones(ssl, worker->env.auth_zones); return; } else if(cmdcmp(p, "auth_zone_reload", 16)) { do_auth_zone_reload(ssl, worker, skipwhite(p+16)); return; } else if(cmdcmp(p, "auth_zone_transfer", 18)) { do_auth_zone_transfer(ssl, worker, skipwhite(p+18)); return; } else if(cmdcmp(p, "stub_add", 8)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_stub_add(ssl, worker, skipwhite(p+8)); return; } else if(cmdcmp(p, "stub_remove", 11)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_stub_remove(ssl, worker, skipwhite(p+11)); return; } else if(cmdcmp(p, "forward_add", 11)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_forward_add(ssl, worker, skipwhite(p+11)); return; } else if(cmdcmp(p, "forward_remove", 14)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_forward_remove(ssl, worker, skipwhite(p+14)); return; } else if(cmdcmp(p, "insecure_add", 12)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_insecure_add(ssl, worker, skipwhite(p+12)); return; } else if(cmdcmp(p, "insecure_remove", 15)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_insecure_remove(ssl, worker, skipwhite(p+15)); return; } else if(cmdcmp(p, "forward", 7)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_forward(ssl, worker, skipwhite(p+7)); return; } else if(cmdcmp(p, "flush_stats", 11)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_flush_stats(ssl, worker); return; } else if(cmdcmp(p, "flush_requestlist", 17)) { /* must always distribute this cmd */ if(rc) distribute_cmd(rc, ssl, cmd); do_flush_requestlist(ssl, worker); return; } else if(cmdcmp(p, "lookup", 6)) { do_lookup(ssl, worker, skipwhite(p+6)); return; } #ifdef THREADS_DISABLED /* other processes must execute the command as well */ /* commands that should not be distributed, returned above. */ if(rc) { /* only if this thread is the master (rc) thread */ /* done before the code below, which may split the string */ distribute_cmd(rc, ssl, cmd); } #endif if(cmdcmp(p, "verbosity", 9)) { do_verbosity(ssl, skipwhite(p+9)); } else if(cmdcmp(p, "local_zone_remove", 17)) { do_zone_remove(ssl, worker->daemon->local_zones, skipwhite(p+17)); } else if(cmdcmp(p, "local_zones_remove", 18)) { do_zones_remove(ssl, worker->daemon->local_zones); } else if(cmdcmp(p, "local_zone", 10)) { do_zone_add(ssl, worker->daemon->local_zones, skipwhite(p+10)); } else if(cmdcmp(p, "local_zones", 11)) { do_zones_add(ssl, worker->daemon->local_zones); } else if(cmdcmp(p, "local_data_remove", 17)) { do_data_remove(ssl, worker->daemon->local_zones, skipwhite(p+17)); } else if(cmdcmp(p, "local_datas_remove", 18)) { do_datas_remove(ssl, worker->daemon->local_zones); } else if(cmdcmp(p, "local_data", 10)) { do_data_add(ssl, worker->daemon->local_zones, skipwhite(p+10)); } else if(cmdcmp(p, "local_datas", 11)) { do_datas_add(ssl, worker->daemon->local_zones); } else if(cmdcmp(p, "view_local_zone_remove", 22)) { do_view_zone_remove(ssl, worker, skipwhite(p+22)); } else if(cmdcmp(p, "view_local_zone", 15)) { do_view_zone_add(ssl, worker, skipwhite(p+15)); } else if(cmdcmp(p, "view_local_data_remove", 22)) { do_view_data_remove(ssl, worker, skipwhite(p+22)); } else if(cmdcmp(p, "view_local_datas_remove", 23)){ do_view_datas_remove(ssl, worker, skipwhite(p+23)); } else if(cmdcmp(p, "view_local_data", 15)) { do_view_data_add(ssl, worker, skipwhite(p+15)); } else if(cmdcmp(p, "view_local_datas", 16)) { do_view_datas_add(ssl, worker, skipwhite(p+16)); } else if(cmdcmp(p, "flush_zone", 10)) { do_flush_zone(ssl, worker, skipwhite(p+10)); } else if(cmdcmp(p, "flush_type", 10)) { do_flush_type(ssl, worker, skipwhite(p+10)); } else if(cmdcmp(p, "flush_infra", 11)) { do_flush_infra(ssl, worker, skipwhite(p+11)); } else if(cmdcmp(p, "flush", 5)) { do_flush_name(ssl, worker, skipwhite(p+5)); } else if(cmdcmp(p, "dump_requestlist", 16)) { do_dump_requestlist(ssl, worker); } else if(cmdcmp(p, "dump_infra", 10)) { do_dump_infra(ssl, worker); } else if(cmdcmp(p, "log_reopen", 10)) { do_log_reopen(ssl, worker); } else if(cmdcmp(p, "set_option", 10)) { do_set_option(ssl, worker, skipwhite(p+10)); } else if(cmdcmp(p, "get_option", 10)) { do_get_option(ssl, worker, skipwhite(p+10)); } else if(cmdcmp(p, "flush_bogus", 11)) { do_flush_bogus(ssl, worker); } else if(cmdcmp(p, "flush_negative", 14)) { do_flush_negative(ssl, worker); } else if(cmdcmp(p, "rpz_enable", 10)) { do_rpz_enable(ssl, worker, skipwhite(p+10)); } else if(cmdcmp(p, "rpz_disable", 11)) { do_rpz_disable(ssl, worker, skipwhite(p+11)); } else { (void)ssl_printf(ssl, "error unknown command '%s'\n", p); } } void daemon_remote_exec(struct worker* worker) { /* read the cmd string */ uint8_t* msg = NULL; uint32_t len = 0; if(!tube_read_msg(worker->cmd, &msg, &len, 0)) { log_err("daemon_remote_exec: tube_read_msg failed"); return; } verbose(VERB_ALGO, "remote exec distributed: %s", (char*)msg); execute_cmd(NULL, NULL, (char*)msg, worker); free(msg); } /** handle remote control request */ static void handle_req(struct daemon_remote* rc, struct rc_state* s, RES* res) { int r; char pre[10]; char magic[7]; char buf[1024]; #ifdef USE_WINSOCK /* makes it possible to set the socket blocking again. */ /* basically removes it from winsock_event ... */ WSAEventSelect(s->c->fd, NULL, 0); #endif fd_set_block(s->c->fd); /* try to read magic UBCT[version]_space_ string */ if(res->ssl) { ERR_clear_error(); if((r=SSL_read(res->ssl, magic, (int)sizeof(magic)-1)) <= 0) { if(SSL_get_error(res->ssl, r) == SSL_ERROR_ZERO_RETURN) return; log_crypto_err("could not SSL_read"); return; } } else { while(1) { ssize_t rr = recv(res->fd, magic, sizeof(magic)-1, 0); if(rr <= 0) { if(rr == 0) return; if(errno == EINTR || errno == EAGAIN) continue; log_err("could not recv: %s", sock_strerror(errno)); return; } r = (int)rr; break; } } magic[6] = 0; if( r != 6 || strncmp(magic, "UBCT", 4) != 0) { verbose(VERB_QUERY, "control connection has bad magic string"); /* probably wrong tool connected, ignore it completely */ return; } /* read the command line */ if(!ssl_read_line(res, buf, sizeof(buf))) { return; } snprintf(pre, sizeof(pre), "UBCT%d ", UNBOUND_CONTROL_VERSION); if(strcmp(magic, pre) != 0) { verbose(VERB_QUERY, "control connection had bad " "version %s, cmd: %s", magic, buf); ssl_printf(res, "error version mismatch\n"); return; } verbose(VERB_DETAIL, "control cmd: %s", buf); /* figure out what to do */ execute_cmd(rc, res, buf, rc->worker); } /** handle SSL_do_handshake changes to the file descriptor to wait for later */ static int remote_handshake_later(struct daemon_remote* rc, struct rc_state* s, struct comm_point* c, int r, int r2) { if(r2 == SSL_ERROR_WANT_READ) { if(s->shake_state == rc_hs_read) { /* try again later */ return 0; } s->shake_state = rc_hs_read; comm_point_listen_for_rw(c, 1, 0); return 0; } else if(r2 == SSL_ERROR_WANT_WRITE) { if(s->shake_state == rc_hs_write) { /* try again later */ return 0; } s->shake_state = rc_hs_write; comm_point_listen_for_rw(c, 0, 1); return 0; } else { if(r == 0) log_err("remote control connection closed prematurely"); log_addr(VERB_OPS, "failed connection from", &s->c->repinfo.addr, s->c->repinfo.addrlen); log_crypto_err("remote control failed ssl"); clean_point(rc, s); } return 0; } int remote_control_callback(struct comm_point* c, void* arg, int err, struct comm_reply* ATTR_UNUSED(rep)) { RES res; struct rc_state* s = (struct rc_state*)arg; struct daemon_remote* rc = s->rc; int r; if(err != NETEVENT_NOERROR) { if(err==NETEVENT_TIMEOUT) log_err("remote control timed out"); clean_point(rc, s); return 0; } if(s->ssl) { /* (continue to) setup the SSL connection */ ERR_clear_error(); r = SSL_do_handshake(s->ssl); if(r != 1) { int r2 = SSL_get_error(s->ssl, r); return remote_handshake_later(rc, s, c, r, r2); } s->shake_state = rc_none; } /* once handshake has completed, check authentication */ if (!rc->use_cert) { verbose(VERB_ALGO, "unauthenticated remote control connection"); } else if(SSL_get_verify_result(s->ssl) == X509_V_OK) { X509* x = SSL_get_peer_certificate(s->ssl); if(!x) { verbose(VERB_DETAIL, "remote control connection " "provided no client certificate"); clean_point(rc, s); return 0; } verbose(VERB_ALGO, "remote control connection authenticated"); X509_free(x); } else { verbose(VERB_DETAIL, "remote control connection failed to " "authenticate with client certificate"); clean_point(rc, s); return 0; } /* if OK start to actually handle the request */ res.ssl = s->ssl; res.fd = c->fd; handle_req(rc, s, &res); verbose(VERB_ALGO, "remote control operation completed"); clean_point(rc, s); return 0; } unbound-1.13.1/daemon/stats.c0000644000175000017500000004352514010434640015455 0ustar wouterwouter/* * daemon/stats.c - collect runtime performance indicators. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file describes the data structure used to collect runtime performance * numbers. These 'statistics' may be of interest to the operator. */ #include "config.h" #ifdef HAVE_TIME_H #include #endif #include #include #include "daemon/stats.h" #include "daemon/worker.h" #include "daemon/daemon.h" #include "services/mesh.h" #include "services/outside_network.h" #include "services/listen_dnsport.h" #include "util/config_file.h" #include "util/tube.h" #include "util/timehist.h" #include "util/net_help.h" #include "validator/validator.h" #include "iterator/iterator.h" #include "sldns/sbuffer.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" #include "services/authzone.h" #include "validator/val_kcache.h" #include "validator/val_neg.h" #ifdef CLIENT_SUBNET #include "edns-subnet/subnetmod.h" #endif #ifdef HAVE_SSL #include #endif /** add timers and the values do not overflow or become negative */ static void stats_timeval_add(long long* d_sec, long long* d_usec, long long add_sec, long long add_usec) { #ifndef S_SPLINT_S (*d_sec) += add_sec; (*d_usec) += add_usec; if((*d_usec) >= 1000000) { (*d_usec) -= 1000000; (*d_sec)++; } #endif } void server_stats_init(struct ub_server_stats* stats, struct config_file* cfg) { memset(stats, 0, sizeof(*stats)); stats->extended = cfg->stat_extended; } void server_stats_querymiss(struct ub_server_stats* stats, struct worker* worker) { stats->num_queries_missed_cache++; stats->sum_query_list_size += worker->env.mesh->all.count; if((long long)worker->env.mesh->all.count > stats->max_query_list_size) stats->max_query_list_size = (long long)worker->env.mesh->all.count; } void server_stats_prefetch(struct ub_server_stats* stats, struct worker* worker) { stats->num_queries_prefetch++; /* changes the query list size so account that, like a querymiss */ stats->sum_query_list_size += worker->env.mesh->all.count; if((long long)worker->env.mesh->all.count > stats->max_query_list_size) stats->max_query_list_size = (long long)worker->env.mesh->all.count; } void server_stats_log(struct ub_server_stats* stats, struct worker* worker, int threadnum) { log_info("server stats for thread %d: %u queries, " "%u answers from cache, %u recursions, %u prefetch, %u rejected by " "ip ratelimiting", threadnum, (unsigned)stats->num_queries, (unsigned)(stats->num_queries - stats->num_queries_missed_cache), (unsigned)stats->num_queries_missed_cache, (unsigned)stats->num_queries_prefetch, (unsigned)stats->num_queries_ip_ratelimited); log_info("server stats for thread %d: requestlist max %u avg %g " "exceeded %u jostled %u", threadnum, (unsigned)stats->max_query_list_size, (stats->num_queries_missed_cache+stats->num_queries_prefetch)? (double)stats->sum_query_list_size/ (double)(stats->num_queries_missed_cache+ stats->num_queries_prefetch) : 0.0, (unsigned)worker->env.mesh->stats_dropped, (unsigned)worker->env.mesh->stats_jostled); } #ifdef CLIENT_SUBNET /** Set the EDNS Subnet stats. */ static void set_subnet_stats(struct worker* worker, struct ub_server_stats* svr, int reset) { int m = modstack_find(&worker->env.mesh->mods, "subnet"); struct subnet_env* sne; if(m == -1) return; sne = (struct subnet_env*)worker->env.modinfo[m]; if(reset && !worker->env.cfg->stat_cumulative) { lock_rw_wrlock(&sne->biglock); } else { lock_rw_rdlock(&sne->biglock); } svr->num_query_subnet = (long long)(sne->num_msg_nocache + sne->num_msg_cache); svr->num_query_subnet_cache = (long long)sne->num_msg_cache; if(reset && !worker->env.cfg->stat_cumulative) { sne->num_msg_cache = 0; sne->num_msg_nocache = 0; } lock_rw_unlock(&sne->biglock); } #endif /* CLIENT_SUBNET */ /** Set the neg cache stats. */ static void set_neg_cache_stats(struct worker* worker, struct ub_server_stats* svr, int reset) { int m = modstack_find(&worker->env.mesh->mods, "validator"); struct val_env* ve; struct val_neg_cache* neg; if(m == -1) return; ve = (struct val_env*)worker->env.modinfo[m]; if(!ve->neg_cache) return; neg = ve->neg_cache; lock_basic_lock(&neg->lock); svr->num_neg_cache_noerror = (long long)neg->num_neg_cache_noerror; svr->num_neg_cache_nxdomain = (long long)neg->num_neg_cache_nxdomain; if(reset && !worker->env.cfg->stat_cumulative) { neg->num_neg_cache_noerror = 0; neg->num_neg_cache_nxdomain = 0; } lock_basic_unlock(&neg->lock); } /** get rrsets bogus number from validator */ static size_t get_rrset_bogus(struct worker* worker, int reset) { int m = modstack_find(&worker->env.mesh->mods, "validator"); struct val_env* ve; size_t r; if(m == -1) return 0; ve = (struct val_env*)worker->env.modinfo[m]; lock_basic_lock(&ve->bogus_lock); r = ve->num_rrset_bogus; if(reset && !worker->env.cfg->stat_cumulative) ve->num_rrset_bogus = 0; lock_basic_unlock(&ve->bogus_lock); return r; } /** get number of ratelimited queries from iterator */ static size_t get_queries_ratelimit(struct worker* worker, int reset) { int m = modstack_find(&worker->env.mesh->mods, "iterator"); struct iter_env* ie; size_t r; if(m == -1) return 0; ie = (struct iter_env*)worker->env.modinfo[m]; lock_basic_lock(&ie->queries_ratelimit_lock); r = ie->num_queries_ratelimited; if(reset && !worker->env.cfg->stat_cumulative) ie->num_queries_ratelimited = 0; lock_basic_unlock(&ie->queries_ratelimit_lock); return r; } #ifdef USE_DNSCRYPT /** get the number of shared secret cache miss */ static size_t get_dnscrypt_cache_miss(struct worker* worker, int reset) { size_t r; struct dnsc_env* de = worker->daemon->dnscenv; if(!de) return 0; lock_basic_lock(&de->shared_secrets_cache_lock); r = de->num_query_dnscrypt_secret_missed_cache; if(reset && !worker->env.cfg->stat_cumulative) de->num_query_dnscrypt_secret_missed_cache = 0; lock_basic_unlock(&de->shared_secrets_cache_lock); return r; } /** get the number of replayed queries */ static size_t get_dnscrypt_replay(struct worker* worker, int reset) { size_t r; struct dnsc_env* de = worker->daemon->dnscenv; lock_basic_lock(&de->nonces_cache_lock); r = de->num_query_dnscrypt_replay; if(reset && !worker->env.cfg->stat_cumulative) de->num_query_dnscrypt_replay = 0; lock_basic_unlock(&de->nonces_cache_lock); return r; } #endif /* USE_DNSCRYPT */ void server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) { int i; struct listen_list* lp; s->svr = worker->stats; s->mesh_num_states = (long long)worker->env.mesh->all.count; s->mesh_num_reply_states = (long long)worker->env.mesh->num_reply_states; s->mesh_jostled = (long long)worker->env.mesh->stats_jostled; s->mesh_dropped = (long long)worker->env.mesh->stats_dropped; s->mesh_replies_sent = (long long)worker->env.mesh->replies_sent; s->mesh_replies_sum_wait_sec = (long long)worker->env.mesh->replies_sum_wait.tv_sec; s->mesh_replies_sum_wait_usec = (long long)worker->env.mesh->replies_sum_wait.tv_usec; s->mesh_time_median = timehist_quartile(worker->env.mesh->histogram, 0.50); /* add in the values from the mesh */ s->svr.ans_secure += (long long)worker->env.mesh->ans_secure; s->svr.ans_bogus += (long long)worker->env.mesh->ans_bogus; s->svr.ans_rcode_nodata += (long long)worker->env.mesh->ans_nodata; s->svr.ans_expired += (long long)worker->env.mesh->ans_expired; for(i=0; isvr.ans_rcode[i] += (long long)worker->env.mesh->ans_rcode[i]; for(i=0; isvr.rpz_action[i] += (long long)worker->env.mesh->rpz_action[i]; timehist_export(worker->env.mesh->histogram, s->svr.hist, NUM_BUCKETS_HIST); /* values from outside network */ s->svr.unwanted_replies = (long long)worker->back->unwanted_replies; s->svr.qtcp_outgoing = (long long)worker->back->num_tcp_outgoing; /* get and reset validator rrset bogus number */ s->svr.rrset_bogus = (long long)get_rrset_bogus(worker, reset); /* get and reset iterator query ratelimit number */ s->svr.queries_ratelimited = (long long)get_queries_ratelimit(worker, reset); /* get cache sizes */ s->svr.msg_cache_count = (long long)count_slabhash_entries(worker->env.msg_cache); s->svr.rrset_cache_count = (long long)count_slabhash_entries(&worker->env.rrset_cache->table); s->svr.infra_cache_count = (long long)count_slabhash_entries(worker->env.infra_cache->hosts); if(worker->env.key_cache) s->svr.key_cache_count = (long long)count_slabhash_entries(worker->env.key_cache->slab); else s->svr.key_cache_count = 0; #ifdef USE_DNSCRYPT if(worker->daemon->dnscenv) { s->svr.num_query_dnscrypt_secret_missed_cache = (long long)get_dnscrypt_cache_miss(worker, reset); s->svr.shared_secret_cache_count = (long long)count_slabhash_entries( worker->daemon->dnscenv->shared_secrets_cache); s->svr.nonce_cache_count = (long long)count_slabhash_entries( worker->daemon->dnscenv->nonces_cache); s->svr.num_query_dnscrypt_replay = (long long)get_dnscrypt_replay(worker, reset); } else { s->svr.num_query_dnscrypt_secret_missed_cache = 0; s->svr.shared_secret_cache_count = 0; s->svr.nonce_cache_count = 0; s->svr.num_query_dnscrypt_replay = 0; } #else s->svr.num_query_dnscrypt_secret_missed_cache = 0; s->svr.shared_secret_cache_count = 0; s->svr.nonce_cache_count = 0; s->svr.num_query_dnscrypt_replay = 0; #endif /* USE_DNSCRYPT */ if(worker->env.auth_zones) { if(reset && !worker->env.cfg->stat_cumulative) { lock_rw_wrlock(&worker->env.auth_zones->lock); } else { lock_rw_rdlock(&worker->env.auth_zones->lock); } s->svr.num_query_authzone_up = (long long)worker->env. auth_zones->num_query_up; s->svr.num_query_authzone_down = (long long)worker->env. auth_zones->num_query_down; if(reset && !worker->env.cfg->stat_cumulative) { worker->env.auth_zones->num_query_up = 0; worker->env.auth_zones->num_query_down = 0; } lock_rw_unlock(&worker->env.auth_zones->lock); } s->svr.mem_stream_wait = (long long)tcp_req_info_get_stream_buffer_size(); s->svr.mem_http2_query_buffer = (long long)http2_get_query_buffer_size(); s->svr.mem_http2_response_buffer = (long long)http2_get_response_buffer_size(); /* Set neg cache usage numbers */ set_neg_cache_stats(worker, &s->svr, reset); #ifdef CLIENT_SUBNET /* EDNS Subnet usage numbers */ set_subnet_stats(worker, &s->svr, reset); #else s->svr.num_query_subnet = 0; s->svr.num_query_subnet_cache = 0; #endif /* get tcp accept usage */ s->svr.tcp_accept_usage = 0; for(lp = worker->front->cps; lp; lp = lp->next) { if(lp->com->type == comm_tcp_accept) s->svr.tcp_accept_usage += (long long)lp->com->cur_tcp_count; } if(reset && !worker->env.cfg->stat_cumulative) { worker_stats_clear(worker); } } void server_stats_obtain(struct worker* worker, struct worker* who, struct ub_stats_info* s, int reset) { uint8_t *reply = NULL; uint32_t len = 0; if(worker == who) { /* just fill it in */ server_stats_compile(worker, s, reset); return; } /* communicate over tube */ verbose(VERB_ALGO, "write stats cmd"); if(reset) worker_send_cmd(who, worker_cmd_stats); else worker_send_cmd(who, worker_cmd_stats_noreset); verbose(VERB_ALGO, "wait for stats reply"); if(!tube_read_msg(worker->cmd, &reply, &len, 0)) fatal_exit("failed to read stats over cmd channel"); if(len != (uint32_t)sizeof(*s)) fatal_exit("stats on cmd channel wrong length %d %d", (int)len, (int)sizeof(*s)); memcpy(s, reply, (size_t)len); free(reply); } void server_stats_reply(struct worker* worker, int reset) { struct ub_stats_info s; server_stats_compile(worker, &s, reset); verbose(VERB_ALGO, "write stats replymsg"); if(!tube_write_msg(worker->daemon->workers[0]->cmd, (uint8_t*)&s, sizeof(s), 0)) fatal_exit("could not write stat values over cmd channel"); } void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) { total->svr.num_queries += a->svr.num_queries; total->svr.num_queries_ip_ratelimited += a->svr.num_queries_ip_ratelimited; total->svr.num_queries_missed_cache += a->svr.num_queries_missed_cache; total->svr.num_queries_prefetch += a->svr.num_queries_prefetch; total->svr.sum_query_list_size += a->svr.sum_query_list_size; total->svr.ans_expired += a->svr.ans_expired; #ifdef USE_DNSCRYPT total->svr.num_query_dnscrypt_crypted += a->svr.num_query_dnscrypt_crypted; total->svr.num_query_dnscrypt_cert += a->svr.num_query_dnscrypt_cert; total->svr.num_query_dnscrypt_cleartext += \ a->svr.num_query_dnscrypt_cleartext; total->svr.num_query_dnscrypt_crypted_malformed += \ a->svr.num_query_dnscrypt_crypted_malformed; #endif /* USE_DNSCRYPT */ /* the max size reached is upped to higher of both */ if(a->svr.max_query_list_size > total->svr.max_query_list_size) total->svr.max_query_list_size = a->svr.max_query_list_size; if(a->svr.extended) { int i; total->svr.qtype_big += a->svr.qtype_big; total->svr.qclass_big += a->svr.qclass_big; total->svr.qtcp += a->svr.qtcp; total->svr.qtcp_outgoing += a->svr.qtcp_outgoing; total->svr.qtls += a->svr.qtls; total->svr.qtls_resume += a->svr.qtls_resume; total->svr.qhttps += a->svr.qhttps; total->svr.qipv6 += a->svr.qipv6; total->svr.qbit_QR += a->svr.qbit_QR; total->svr.qbit_AA += a->svr.qbit_AA; total->svr.qbit_TC += a->svr.qbit_TC; total->svr.qbit_RD += a->svr.qbit_RD; total->svr.qbit_RA += a->svr.qbit_RA; total->svr.qbit_Z += a->svr.qbit_Z; total->svr.qbit_AD += a->svr.qbit_AD; total->svr.qbit_CD += a->svr.qbit_CD; total->svr.qEDNS += a->svr.qEDNS; total->svr.qEDNS_DO += a->svr.qEDNS_DO; total->svr.ans_rcode_nodata += a->svr.ans_rcode_nodata; total->svr.ans_secure += a->svr.ans_secure; total->svr.ans_bogus += a->svr.ans_bogus; total->svr.unwanted_replies += a->svr.unwanted_replies; total->svr.unwanted_queries += a->svr.unwanted_queries; total->svr.tcp_accept_usage += a->svr.tcp_accept_usage; for(i=0; isvr.qtype[i] += a->svr.qtype[i]; for(i=0; isvr.qclass[i] += a->svr.qclass[i]; for(i=0; isvr.qopcode[i] += a->svr.qopcode[i]; for(i=0; isvr.ans_rcode[i] += a->svr.ans_rcode[i]; for(i=0; isvr.hist[i] += a->svr.hist[i]; for(i=0; isvr.rpz_action[i] += a->svr.rpz_action[i]; } total->mesh_num_states += a->mesh_num_states; total->mesh_num_reply_states += a->mesh_num_reply_states; total->mesh_jostled += a->mesh_jostled; total->mesh_dropped += a->mesh_dropped; total->mesh_replies_sent += a->mesh_replies_sent; stats_timeval_add(&total->mesh_replies_sum_wait_sec, &total->mesh_replies_sum_wait_usec, a->mesh_replies_sum_wait_sec, a->mesh_replies_sum_wait_usec); /* the medians are averaged together, this is not as accurate as * taking the median over all of the data, but is good and fast * added up here, division later*/ total->mesh_time_median += a->mesh_time_median; } void server_stats_insquery(struct ub_server_stats* stats, struct comm_point* c, uint16_t qtype, uint16_t qclass, struct edns_data* edns, struct comm_reply* repinfo) { uint16_t flags = sldns_buffer_read_u16_at(c->buffer, 2); if(qtype < UB_STATS_QTYPE_NUM) stats->qtype[qtype]++; else stats->qtype_big++; if(qclass < UB_STATS_QCLASS_NUM) stats->qclass[qclass]++; else stats->qclass_big++; stats->qopcode[ LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) ]++; if(c->type != comm_udp) { stats->qtcp++; if(c->ssl != NULL) { stats->qtls++; #ifdef HAVE_SSL if(SSL_session_reused(c->ssl)) stats->qtls_resume++; #endif if(c->type == comm_http) stats->qhttps++; } } if(repinfo && addr_is_ip6(&repinfo->addr, repinfo->addrlen)) stats->qipv6++; if( (flags&BIT_QR) ) stats->qbit_QR++; if( (flags&BIT_AA) ) stats->qbit_AA++; if( (flags&BIT_TC) ) stats->qbit_TC++; if( (flags&BIT_RD) ) stats->qbit_RD++; if( (flags&BIT_RA) ) stats->qbit_RA++; if( (flags&BIT_Z) ) stats->qbit_Z++; if( (flags&BIT_AD) ) stats->qbit_AD++; if( (flags&BIT_CD) ) stats->qbit_CD++; if(edns->edns_present) { stats->qEDNS++; if( (edns->bits & EDNS_DO) ) stats->qEDNS_DO++; } } void server_stats_insrcode(struct ub_server_stats* stats, sldns_buffer* buf) { if(stats->extended && sldns_buffer_limit(buf) != 0) { int r = (int)LDNS_RCODE_WIRE( sldns_buffer_begin(buf) ); stats->ans_rcode[r] ++; if(r == 0 && LDNS_ANCOUNT( sldns_buffer_begin(buf) ) == 0) stats->ans_rcode_nodata ++; } } unbound-1.13.1/daemon/worker.c0000644000175000017500000021127214010434640015624 0ustar wouterwouter/* * daemon/worker.c - worker that handles a pending list of requests. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file implements the worker that handles callbacks on events, for * pending requests. */ #include "config.h" #include "util/log.h" #include "util/net_help.h" #include "util/random.h" #include "daemon/worker.h" #include "daemon/daemon.h" #include "daemon/remote.h" #include "daemon/acl_list.h" #include "util/netevent.h" #include "util/config_file.h" #include "util/module.h" #include "util/regional.h" #include "util/storage/slabhash.h" #include "services/listen_dnsport.h" #include "services/outside_network.h" #include "services/outbound_list.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" #include "services/cache/dns.h" #include "services/authzone.h" #include "services/mesh.h" #include "services/localzone.h" #include "services/rpz.h" #include "util/data/msgparse.h" #include "util/data/msgencode.h" #include "util/data/dname.h" #include "util/fptr_wlist.h" #include "util/tube.h" #include "util/edns.h" #include "iterator/iter_fwd.h" #include "iterator/iter_hints.h" #include "validator/autotrust.h" #include "validator/val_anchor.h" #include "respip/respip.h" #include "libunbound/context.h" #include "libunbound/libworker.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "util/shm_side/shm_main.h" #include "dnscrypt/dnscrypt.h" #include "dnstap/dtstream.h" #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_NETDB_H #include #endif #include #ifdef UB_ON_WINDOWS #include "winrc/win_svc.h" #endif /** Size of an UDP datagram */ #define NORMAL_UDP_SIZE 512 /* bytes */ /** ratelimit for error responses */ #define ERROR_RATELIMIT 100 /* qps */ /** * seconds to add to prefetch leeway. This is a TTL that expires old rrsets * earlier than they should in order to put the new update into the cache. * This additional value is to make sure that if not all TTLs are equal in * the message to be updated(and replaced), that rrsets with up to this much * extra TTL are also replaced. This means that the resulting new message * will have (most likely) this TTL at least, avoiding very small 'split * second' TTLs due to operators choosing relative primes for TTLs (or so). * Also has to be at least one to break ties (and overwrite cached entry). */ #define PREFETCH_EXPIRY_ADD 60 /** Report on memory usage by this thread and global */ static void worker_mem_report(struct worker* ATTR_UNUSED(worker), struct serviced_query* ATTR_UNUSED(cur_serv)) { #ifdef UNBOUND_ALLOC_STATS /* measure memory leakage */ extern size_t unbound_mem_alloc, unbound_mem_freed; /* debug func in validator module */ size_t total, front, back, mesh, msg, rrset, infra, ac, superac; size_t me, iter, val, anch; int i; #ifdef CLIENT_SUBNET size_t subnet = 0; #endif /* CLIENT_SUBNET */ if(verbosity < VERB_ALGO) return; front = listen_get_mem(worker->front); back = outnet_get_mem(worker->back); msg = slabhash_get_mem(worker->env.msg_cache); rrset = slabhash_get_mem(&worker->env.rrset_cache->table); infra = infra_get_mem(worker->env.infra_cache); mesh = mesh_get_mem(worker->env.mesh); ac = alloc_get_mem(&worker->alloc); superac = alloc_get_mem(&worker->daemon->superalloc); anch = anchors_get_mem(worker->env.anchors); iter = 0; val = 0; for(i=0; ienv.mesh->mods.num; i++) { fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh-> mods.mod[i]->get_mem)); if(strcmp(worker->env.mesh->mods.mod[i]->name, "validator")==0) val += (*worker->env.mesh->mods.mod[i]->get_mem) (&worker->env, i); #ifdef CLIENT_SUBNET else if(strcmp(worker->env.mesh->mods.mod[i]->name, "subnet")==0) subnet += (*worker->env.mesh->mods.mod[i]->get_mem) (&worker->env, i); #endif /* CLIENT_SUBNET */ else iter += (*worker->env.mesh->mods.mod[i]->get_mem) (&worker->env, i); } me = sizeof(*worker) + sizeof(*worker->base) + sizeof(*worker->comsig) + comm_point_get_mem(worker->cmd_com) + sizeof(worker->rndstate) + regional_get_mem(worker->scratchpad) + sizeof(*worker->env.scratch_buffer) + sldns_buffer_capacity(worker->env.scratch_buffer) + forwards_get_mem(worker->env.fwds) + hints_get_mem(worker->env.hints); if(worker->thread_num == 0) me += acl_list_get_mem(worker->daemon->acl); if(cur_serv) { me += serviced_get_mem(cur_serv); } total = front+back+mesh+msg+rrset+infra+iter+val+ac+superac+me; #ifdef CLIENT_SUBNET total += subnet; log_info("Memory conditions: %u front=%u back=%u mesh=%u msg=%u " "rrset=%u infra=%u iter=%u val=%u subnet=%u anchors=%u " "alloccache=%u globalalloccache=%u me=%u", (unsigned)total, (unsigned)front, (unsigned)back, (unsigned)mesh, (unsigned)msg, (unsigned)rrset, (unsigned)infra, (unsigned)iter, (unsigned)val, (unsigned)subnet, (unsigned)anch, (unsigned)ac, (unsigned)superac, (unsigned)me); #else /* no CLIENT_SUBNET */ log_info("Memory conditions: %u front=%u back=%u mesh=%u msg=%u " "rrset=%u infra=%u iter=%u val=%u anchors=%u " "alloccache=%u globalalloccache=%u me=%u", (unsigned)total, (unsigned)front, (unsigned)back, (unsigned)mesh, (unsigned)msg, (unsigned)rrset, (unsigned)infra, (unsigned)iter, (unsigned)val, (unsigned)anch, (unsigned)ac, (unsigned)superac, (unsigned)me); #endif /* CLIENT_SUBNET */ log_info("Total heap memory estimate: %u total-alloc: %u " "total-free: %u", (unsigned)total, (unsigned)unbound_mem_alloc, (unsigned)unbound_mem_freed); #else /* no UNBOUND_ALLOC_STATS */ size_t val = 0; #ifdef CLIENT_SUBNET size_t subnet = 0; #endif /* CLIENT_SUBNET */ int i; if(verbosity < VERB_QUERY) return; for(i=0; ienv.mesh->mods.num; i++) { fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh-> mods.mod[i]->get_mem)); if(strcmp(worker->env.mesh->mods.mod[i]->name, "validator")==0) val += (*worker->env.mesh->mods.mod[i]->get_mem) (&worker->env, i); #ifdef CLIENT_SUBNET else if(strcmp(worker->env.mesh->mods.mod[i]->name, "subnet")==0) subnet += (*worker->env.mesh->mods.mod[i]->get_mem) (&worker->env, i); #endif /* CLIENT_SUBNET */ } #ifdef CLIENT_SUBNET verbose(VERB_QUERY, "cache memory msg=%u rrset=%u infra=%u val=%u " "subnet=%u", (unsigned)slabhash_get_mem(worker->env.msg_cache), (unsigned)slabhash_get_mem(&worker->env.rrset_cache->table), (unsigned)infra_get_mem(worker->env.infra_cache), (unsigned)val, (unsigned)subnet); #else /* no CLIENT_SUBNET */ verbose(VERB_QUERY, "cache memory msg=%u rrset=%u infra=%u val=%u", (unsigned)slabhash_get_mem(worker->env.msg_cache), (unsigned)slabhash_get_mem(&worker->env.rrset_cache->table), (unsigned)infra_get_mem(worker->env.infra_cache), (unsigned)val); #endif /* CLIENT_SUBNET */ #endif /* UNBOUND_ALLOC_STATS */ } void worker_send_cmd(struct worker* worker, enum worker_commands cmd) { uint32_t c = (uint32_t)htonl(cmd); if(!tube_write_msg(worker->cmd, (uint8_t*)&c, sizeof(c), 0)) { log_err("worker send cmd %d failed", (int)cmd); } } int worker_handle_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info) { struct module_qstate* q = (struct module_qstate*)arg; struct worker* worker = q->env->worker; struct outbound_entry e; e.qstate = q; e.qsent = NULL; if(error != 0) { mesh_report_reply(worker->env.mesh, &e, reply_info, error); worker_mem_report(worker, NULL); return 0; } /* sanity check. */ if(!LDNS_QR_WIRE(sldns_buffer_begin(c->buffer)) || LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) != LDNS_PACKET_QUERY || LDNS_QDCOUNT(sldns_buffer_begin(c->buffer)) > 1) { /* error becomes timeout for the module as if this reply * never arrived. */ mesh_report_reply(worker->env.mesh, &e, reply_info, NETEVENT_TIMEOUT); worker_mem_report(worker, NULL); return 0; } mesh_report_reply(worker->env.mesh, &e, reply_info, NETEVENT_NOERROR); worker_mem_report(worker, NULL); return 0; } int worker_handle_service_reply(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info) { struct outbound_entry* e = (struct outbound_entry*)arg; struct worker* worker = e->qstate->env->worker; struct serviced_query *sq = e->qsent; verbose(VERB_ALGO, "worker svcd callback for qstate %p", e->qstate); if(error != 0) { mesh_report_reply(worker->env.mesh, e, reply_info, error); worker_mem_report(worker, sq); return 0; } /* sanity check. */ if(!LDNS_QR_WIRE(sldns_buffer_begin(c->buffer)) || LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) != LDNS_PACKET_QUERY || LDNS_QDCOUNT(sldns_buffer_begin(c->buffer)) > 1) { /* error becomes timeout for the module as if this reply * never arrived. */ verbose(VERB_ALGO, "worker: bad reply handled as timeout"); mesh_report_reply(worker->env.mesh, e, reply_info, NETEVENT_TIMEOUT); worker_mem_report(worker, sq); return 0; } mesh_report_reply(worker->env.mesh, e, reply_info, NETEVENT_NOERROR); worker_mem_report(worker, sq); return 0; } /** ratelimit error replies * @param worker: the worker struct with ratelimit counter * @param err: error code that would be wanted. * @return value of err if okay, or -1 if it should be discarded instead. */ static int worker_err_ratelimit(struct worker* worker, int err) { if(worker->err_limit_time == *worker->env.now) { /* see if limit is exceeded for this second */ if(worker->err_limit_count++ > ERROR_RATELIMIT) return -1; } else { /* new second, new limits */ worker->err_limit_time = *worker->env.now; worker->err_limit_count = 1; } return err; } /** check request sanity. * @param pkt: the wire packet to examine for sanity. * @param worker: parameters for checking. * @return error code, 0 OK, or -1 discard. */ static int worker_check_request(sldns_buffer* pkt, struct worker* worker) { if(sldns_buffer_limit(pkt) < LDNS_HEADER_SIZE) { verbose(VERB_QUERY, "request too short, discarded"); return -1; } if(sldns_buffer_limit(pkt) > NORMAL_UDP_SIZE && worker->daemon->cfg->harden_large_queries) { verbose(VERB_QUERY, "request too large, discarded"); return -1; } if(LDNS_QR_WIRE(sldns_buffer_begin(pkt))) { verbose(VERB_QUERY, "request has QR bit on, discarded"); return -1; } if(LDNS_TC_WIRE(sldns_buffer_begin(pkt))) { LDNS_TC_CLR(sldns_buffer_begin(pkt)); verbose(VERB_QUERY, "request bad, has TC bit on"); return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_QUERY && LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_NOTIFY) { verbose(VERB_QUERY, "request unknown opcode %d", LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt))); return worker_err_ratelimit(worker, LDNS_RCODE_NOTIMPL); } if(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) != 1) { verbose(VERB_QUERY, "request wrong nr qd=%d", LDNS_QDCOUNT(sldns_buffer_begin(pkt))); return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0 && (LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 1 || LDNS_OPCODE_WIRE(sldns_buffer_begin(pkt)) != LDNS_PACKET_NOTIFY)) { verbose(VERB_QUERY, "request wrong nr an=%d", LDNS_ANCOUNT(sldns_buffer_begin(pkt))); return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_NSCOUNT(sldns_buffer_begin(pkt)) != 0) { verbose(VERB_QUERY, "request wrong nr ns=%d", LDNS_NSCOUNT(sldns_buffer_begin(pkt))); return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) > 1) { verbose(VERB_QUERY, "request wrong nr ar=%d", LDNS_ARCOUNT(sldns_buffer_begin(pkt))); return worker_err_ratelimit(worker, LDNS_RCODE_FORMERR); } return 0; } void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg, size_t len, int error, void* arg) { struct worker* worker = (struct worker*)arg; enum worker_commands cmd; if(error != NETEVENT_NOERROR) { free(msg); if(error == NETEVENT_CLOSED) comm_base_exit(worker->base); else log_info("control event: %d", error); return; } if(len != sizeof(uint32_t)) { fatal_exit("bad control msg length %d", (int)len); } cmd = sldns_read_uint32(msg); free(msg); switch(cmd) { case worker_cmd_quit: verbose(VERB_ALGO, "got control cmd quit"); comm_base_exit(worker->base); break; case worker_cmd_stats: verbose(VERB_ALGO, "got control cmd stats"); server_stats_reply(worker, 1); break; case worker_cmd_stats_noreset: verbose(VERB_ALGO, "got control cmd stats_noreset"); server_stats_reply(worker, 0); break; case worker_cmd_remote: verbose(VERB_ALGO, "got control cmd remote"); daemon_remote_exec(worker); break; default: log_err("bad command %d", (int)cmd); break; } } /** check if a delegation is secure */ static enum sec_status check_delegation_secure(struct reply_info *rep) { /* return smallest security status */ size_t i; enum sec_status sec = sec_status_secure; enum sec_status s; size_t num = rep->an_numrrsets + rep->ns_numrrsets; /* check if answer and authority are OK */ for(i=0; irrsets[i]->entry.data) ->security; if(s < sec) sec = s; } /* in additional, only unchecked triggers revalidation */ for(i=num; irrset_count; i++) { s = ((struct packed_rrset_data*)rep->rrsets[i]->entry.data) ->security; if(s == sec_status_unchecked) return s; } return sec; } /** remove nonsecure from a delegation referral additional section */ static void deleg_remove_nonsecure_additional(struct reply_info* rep) { /* we can simply edit it, since we are working in the scratch region */ size_t i; enum sec_status s; for(i = rep->an_numrrsets+rep->ns_numrrsets; irrset_count; i++) { s = ((struct packed_rrset_data*)rep->rrsets[i]->entry.data) ->security; if(s != sec_status_secure) { memmove(rep->rrsets+i, rep->rrsets+i+1, sizeof(struct ub_packed_rrset_key*)* (rep->rrset_count - i - 1)); rep->ar_numrrsets--; rep->rrset_count--; i--; } } } /** answer nonrecursive query from the cache */ static int answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, uint16_t id, uint16_t flags, struct comm_reply* repinfo, struct edns_data* edns) { /* for a nonrecursive query return either: * o an error (servfail; we try to avoid this) * o a delegation (closest we have; this routine tries that) * o the answer (checked by answer_from_cache) * * So, grab a delegation from the rrset cache. * Then check if it needs validation, if so, this routine fails, * so that iterator can prime and validator can verify rrsets. */ struct edns_data edns_bak; uint16_t udpsize = edns->udp_size; int secure = 0; time_t timenow = *worker->env.now; int must_validate = (!(flags&BIT_CD) || worker->env.cfg->ignore_cd) && worker->env.need_to_validate; struct dns_msg *msg = NULL; struct delegpt *dp; dp = dns_cache_find_delegation(&worker->env, qinfo->qname, qinfo->qname_len, qinfo->qtype, qinfo->qclass, worker->scratchpad, &msg, timenow); if(!dp) { /* no delegation, need to reprime */ return 0; } /* In case we have a local alias, copy it into the delegation message. * Shallow copy should be fine, as we'll be done with msg in this * function. */ msg->qinfo.local_alias = qinfo->local_alias; if(must_validate) { switch(check_delegation_secure(msg->rep)) { case sec_status_unchecked: /* some rrsets have not been verified yet, go and * let validator do that */ return 0; case sec_status_bogus: case sec_status_secure_sentinel_fail: /* some rrsets are bogus, reply servfail */ edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, msg->rep, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, worker->env.now_tv)) return 0; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, &msg->qinfo, id, flags, edns); if(worker->stats.extended) { worker->stats.ans_bogus++; worker->stats.ans_rcode[LDNS_RCODE_SERVFAIL]++; } return 1; case sec_status_secure: /* all rrsets are secure */ /* remove non-secure rrsets from the add. section*/ if(worker->env.cfg->val_clean_additional) deleg_remove_nonsecure_additional(msg->rep); secure = 1; break; case sec_status_indeterminate: case sec_status_insecure: default: /* not secure */ secure = 0; break; } } /* return this delegation from the cache */ edns_bak = *edns; edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_cache_call(&worker->env, qinfo, NULL, msg->rep, (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad, worker->env.now_tv)) return 0; msg->rep->flags |= BIT_QR|BIT_RA; if(!apply_edns_options(edns, &edns_bak, worker->env.cfg, repinfo->c, worker->scratchpad) || !reply_info_answer_encode(&msg->qinfo, msg->rep, id, flags, repinfo->c->buffer, 0, 1, worker->scratchpad, udpsize, edns, (int)(edns->bits & EDNS_DO), secure)) { if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, worker->env.now_tv)) edns->opt_list = NULL; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, &msg->qinfo, id, flags, edns); } if(worker->stats.extended) { if(secure) worker->stats.ans_secure++; server_stats_insrcode(&worker->stats, repinfo->c->buffer); } return 1; } /** Apply, if applicable, a response IP action to a cached answer. * If the answer is rewritten as a result of an action, '*encode_repp' will * point to the reply info containing the modified answer. '*encode_repp' will * be intact otherwise. * It returns 1 on success, 0 otherwise. */ static int apply_respip_action(struct worker* worker, const struct query_info* qinfo, struct respip_client_info* cinfo, struct reply_info* rep, struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset, struct reply_info** encode_repp, struct auth_zones* az) { struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; actinfo.action = respip_none; if(qinfo->qtype != LDNS_RR_TYPE_A && qinfo->qtype != LDNS_RR_TYPE_AAAA && qinfo->qtype != LDNS_RR_TYPE_ANY) return 1; if(!respip_rewrite_reply(qinfo, cinfo, rep, encode_repp, &actinfo, alias_rrset, 0, worker->scratchpad, az)) return 0; /* xxx_deny actions mean dropping the reply, unless the original reply * was redirected to response-ip data. */ if((actinfo.action == respip_deny || actinfo.action == respip_inform_deny) && *encode_repp == rep) *encode_repp = NULL; /* If address info is returned, it means the action should be an * 'inform' variant and the information should be logged. */ if(actinfo.addrinfo) { respip_inform_print(&actinfo, qinfo->qname, qinfo->qtype, qinfo->qclass, qinfo->local_alias, repinfo); if(worker->stats.extended && actinfo.rpz_used) { if(actinfo.rpz_disabled) worker->stats.rpz_action[RPZ_DISABLED_ACTION]++; if(actinfo.rpz_cname_override) worker->stats.rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++; else worker->stats.rpz_action[ respip_action_to_rpz_action(actinfo.action)]++; } } return 1; } /** answer query from the cache. * Normally, the answer message will be built in repinfo->c->buffer; if the * answer is supposed to be suppressed or the answer is supposed to be an * incomplete CNAME chain, the buffer is explicitly cleared to signal the * caller as such. In the latter case *partial_rep will point to the incomplete * reply, and this function is (possibly) supposed to be called again with that * *partial_rep value to complete the chain. In addition, if the query should * be completely dropped, '*need_drop' will be set to 1. */ static int answer_from_cache(struct worker* worker, struct query_info* qinfo, struct respip_client_info* cinfo, int* need_drop, int* is_expired_answer, int* is_secure_answer, struct ub_packed_rrset_key** alias_rrset, struct reply_info** partial_repp, struct reply_info* rep, uint16_t id, uint16_t flags, struct comm_reply* repinfo, struct edns_data* edns) { struct edns_data edns_bak; time_t timenow = *worker->env.now; uint16_t udpsize = edns->udp_size; struct reply_info* encode_rep = rep; struct reply_info* partial_rep = *partial_repp; int must_validate = (!(flags&BIT_CD) || worker->env.cfg->ignore_cd) && worker->env.need_to_validate; *partial_repp = NULL; /* avoid accidental further pass */ /* Check TTL */ if(rep->ttl < timenow) { /* Check if we need to serve expired now */ if(worker->env.cfg->serve_expired && !worker->env.cfg->serve_expired_client_timeout) { if(worker->env.cfg->serve_expired_ttl && rep->serve_expired_ttl < timenow) return 0; if(!rrset_array_lock(rep->ref, rep->rrset_count, 0)) return 0; *is_expired_answer = 1; } else { /* the rrsets may have been updated in the meantime. * we will refetch the message format from the * authoritative server */ return 0; } } else { if(!rrset_array_lock(rep->ref, rep->rrset_count, timenow)) return 0; } /* locked and ids and ttls are OK. */ /* check CNAME chain (if any) */ if(rep->an_numrrsets > 0 && (rep->rrsets[0]->rk.type == htons(LDNS_RR_TYPE_CNAME) || rep->rrsets[0]->rk.type == htons(LDNS_RR_TYPE_DNAME))) { if(!reply_check_cname_chain(qinfo, rep)) { /* cname chain invalid, redo iterator steps */ verbose(VERB_ALGO, "Cache reply: cname chain broken"); goto bail_out; } } /* check security status of the cached answer */ if(must_validate && (rep->security == sec_status_bogus || rep->security == sec_status_secure_sentinel_fail)) { /* BAD cached */ edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, rep, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, worker->env.now_tv)) goto bail_out; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, qinfo, id, flags, edns); rrset_array_unlock_touch(worker->env.rrset_cache, worker->scratchpad, rep->ref, rep->rrset_count); if(worker->stats.extended) { worker->stats.ans_bogus ++; worker->stats.ans_rcode[LDNS_RCODE_SERVFAIL] ++; } return 1; } else if(rep->security == sec_status_unchecked && must_validate) { verbose(VERB_ALGO, "Cache reply: unchecked entry needs " "validation"); goto bail_out; /* need to validate cache entry first */ } else if(rep->security == sec_status_secure) { if(reply_all_rrsets_secure(rep)) { *is_secure_answer = 1; } else { if(must_validate) { verbose(VERB_ALGO, "Cache reply: secure entry" " changed status"); goto bail_out; /* rrset changed, re-verify */ } *is_secure_answer = 0; } } else *is_secure_answer = 0; edns_bak = *edns; edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; if(!inplace_cb_reply_cache_call(&worker->env, qinfo, NULL, rep, (int)(flags&LDNS_RCODE_MASK), edns, repinfo, worker->scratchpad, worker->env.now_tv)) goto bail_out; *alias_rrset = NULL; /* avoid confusion if caller set it to non-NULL */ if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && !partial_rep && !apply_respip_action(worker, qinfo, cinfo, rep, repinfo, alias_rrset, &encode_rep, worker->env.auth_zones)) { goto bail_out; } else if(partial_rep && !respip_merge_cname(partial_rep, qinfo, rep, cinfo, must_validate, &encode_rep, worker->scratchpad, worker->env.auth_zones)) { goto bail_out; } if(encode_rep != rep) { /* if rewritten, it can't be considered "secure" */ *is_secure_answer = 0; } if(!encode_rep || *alias_rrset) { if(!encode_rep) *need_drop = 1; else { /* If a partial CNAME chain is found, we first need to * make a copy of the reply in the scratchpad so we * can release the locks and lookup the cache again. */ *partial_repp = reply_info_copy(encode_rep, NULL, worker->scratchpad); if(!*partial_repp) goto bail_out; } } else if(!apply_edns_options(edns, &edns_bak, worker->env.cfg, repinfo->c, worker->scratchpad) || !reply_info_answer_encode(qinfo, encode_rep, id, flags, repinfo->c->buffer, timenow, 1, worker->scratchpad, udpsize, edns, (int)(edns->bits & EDNS_DO), *is_secure_answer)) { if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, NULL, LDNS_RCODE_SERVFAIL, edns, repinfo, worker->scratchpad, worker->env.now_tv)) edns->opt_list = NULL; error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, qinfo, id, flags, edns); } /* cannot send the reply right now, because blocking network syscall * is bad while holding locks. */ rrset_array_unlock_touch(worker->env.rrset_cache, worker->scratchpad, rep->ref, rep->rrset_count); /* go and return this buffer to the client */ return 1; bail_out: rrset_array_unlock_touch(worker->env.rrset_cache, worker->scratchpad, rep->ref, rep->rrset_count); return 0; } /** Reply to client and perform prefetch to keep cache up to date. */ static void reply_and_prefetch(struct worker* worker, struct query_info* qinfo, uint16_t flags, struct comm_reply* repinfo, time_t leeway, int noreply) { /* first send answer to client to keep its latency * as small as a cachereply */ if(!noreply) { if(repinfo->c->tcp_req_info) { sldns_buffer_copy( repinfo->c->tcp_req_info->spool_buffer, repinfo->c->buffer); } comm_point_send_reply(repinfo); } server_stats_prefetch(&worker->stats, worker); /* create the prefetch in the mesh as a normal lookup without * client addrs waiting, which has the cache blacklisted (to bypass * the cache and go to the network for the data). */ /* this (potentially) runs the mesh for the new query */ mesh_new_prefetch(worker->env.mesh, qinfo, flags, leeway + PREFETCH_EXPIRY_ADD); } /** * Fill CH class answer into buffer. Keeps query. * @param pkt: buffer * @param str: string to put into text record (<255). * array of strings, every string becomes a text record. * @param num: number of strings in array. * @param edns: edns reply information. * @param worker: worker with scratch region. * @param repinfo: reply information for a communication point. */ static void chaos_replystr(sldns_buffer* pkt, char** str, int num, struct edns_data* edns, struct worker* worker, struct comm_reply* repinfo) { int i; unsigned int rd = LDNS_RD_WIRE(sldns_buffer_begin(pkt)); unsigned int cd = LDNS_CD_WIRE(sldns_buffer_begin(pkt)); sldns_buffer_clear(pkt); sldns_buffer_skip(pkt, (ssize_t)sizeof(uint16_t)); /* skip id */ sldns_buffer_write_u16(pkt, (uint16_t)(BIT_QR|BIT_RA)); if(rd) LDNS_RD_SET(sldns_buffer_begin(pkt)); if(cd) LDNS_CD_SET(sldns_buffer_begin(pkt)); sldns_buffer_write_u16(pkt, 1); /* qdcount */ sldns_buffer_write_u16(pkt, (uint16_t)num); /* ancount */ sldns_buffer_write_u16(pkt, 0); /* nscount */ sldns_buffer_write_u16(pkt, 0); /* arcount */ (void)query_dname_len(pkt); /* skip qname */ sldns_buffer_skip(pkt, (ssize_t)sizeof(uint16_t)); /* skip qtype */ sldns_buffer_skip(pkt, (ssize_t)sizeof(uint16_t)); /* skip qclass */ for(i=0; i255) len=255; /* cap size of TXT record */ sldns_buffer_write_u16(pkt, 0xc00c); /* compr ptr to query */ sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_TXT); sldns_buffer_write_u16(pkt, LDNS_RR_CLASS_CH); sldns_buffer_write_u32(pkt, 0); /* TTL */ sldns_buffer_write_u16(pkt, sizeof(uint8_t) + len); sldns_buffer_write_u8(pkt, len); sldns_buffer_write(pkt, str[i], len); } sldns_buffer_flip(pkt); edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->bits &= EDNS_DO; if(!inplace_cb_reply_local_call(&worker->env, NULL, NULL, NULL, LDNS_RCODE_NOERROR, edns, repinfo, worker->scratchpad, worker->env.now_tv)) edns->opt_list = NULL; if(sldns_buffer_capacity(pkt) >= sldns_buffer_limit(pkt)+calc_edns_field_size(edns)) attach_edns_record(pkt, edns); } /** Reply with one string */ static void chaos_replyonestr(sldns_buffer* pkt, const char* str, struct edns_data* edns, struct worker* worker, struct comm_reply* repinfo) { chaos_replystr(pkt, (char**)&str, 1, edns, worker, repinfo); } /** * Create CH class trustanchor answer. * @param pkt: buffer * @param edns: edns reply information. * @param w: worker with scratch region. * @param repinfo: reply information for a communication point. */ static void chaos_trustanchor(sldns_buffer* pkt, struct edns_data* edns, struct worker* w, struct comm_reply* repinfo) { #define TA_RESPONSE_MAX_TXT 16 /* max number of TXT records */ #define TA_RESPONSE_MAX_TAGS 32 /* max number of tags printed per zone */ char* str_array[TA_RESPONSE_MAX_TXT]; uint16_t tags[TA_RESPONSE_MAX_TAGS]; int num = 0; struct trust_anchor* ta; if(!w->env.need_to_validate) { /* no validator module, reply no trustanchors */ chaos_replystr(pkt, NULL, 0, edns, w, repinfo); return; } /* fill the string with contents */ lock_basic_lock(&w->env.anchors->lock); RBTREE_FOR(ta, struct trust_anchor*, w->env.anchors->tree) { char* str; size_t i, numtag, str_len = 255; if(num == TA_RESPONSE_MAX_TXT) continue; str = (char*)regional_alloc(w->scratchpad, str_len); if(!str) continue; lock_basic_lock(&ta->lock); numtag = anchor_list_keytags(ta, tags, TA_RESPONSE_MAX_TAGS); if(numtag == 0) { /* empty, insecure point */ lock_basic_unlock(&ta->lock); continue; } str_array[num] = str; num++; /* spool name of anchor */ (void)sldns_wire2str_dname_buf(ta->name, ta->namelen, str, str_len); str_len -= strlen(str); str += strlen(str); /* spool tags */ for(i=0; ilock); } lock_basic_unlock(&w->env.anchors->lock); chaos_replystr(pkt, str_array, num, edns, w, repinfo); regional_free_all(w->scratchpad); } /** * Answer CH class queries. * @param w: worker * @param qinfo: query info. Pointer into packet buffer. * @param edns: edns info from query. * @param repinfo: reply information for a communication point. * @param pkt: packet buffer. * @return: true if a reply is to be sent. */ static int answer_chaos(struct worker* w, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* repinfo, sldns_buffer* pkt) { struct config_file* cfg = w->env.cfg; if(qinfo->qtype != LDNS_RR_TYPE_ANY && qinfo->qtype != LDNS_RR_TYPE_TXT) return 0; if(query_dname_compare(qinfo->qname, (uint8_t*)"\002id\006server") == 0 || query_dname_compare(qinfo->qname, (uint8_t*)"\010hostname\004bind") == 0) { if(cfg->hide_identity) return 0; if(cfg->identity==NULL || cfg->identity[0]==0) { char buf[MAXHOSTNAMELEN+1]; if (gethostname(buf, MAXHOSTNAMELEN) == 0) { buf[MAXHOSTNAMELEN] = 0; chaos_replyonestr(pkt, buf, edns, w, repinfo); } else { log_err("gethostname: %s", strerror(errno)); chaos_replyonestr(pkt, "no hostname", edns, w, repinfo); } } else chaos_replyonestr(pkt, cfg->identity, edns, w, repinfo); return 1; } if(query_dname_compare(qinfo->qname, (uint8_t*)"\007version\006server") == 0 || query_dname_compare(qinfo->qname, (uint8_t*)"\007version\004bind") == 0) { if(cfg->hide_version) return 0; if(cfg->version==NULL || cfg->version[0]==0) chaos_replyonestr(pkt, PACKAGE_STRING, edns, w, repinfo); else chaos_replyonestr(pkt, cfg->version, edns, w, repinfo); return 1; } if(query_dname_compare(qinfo->qname, (uint8_t*)"\013trustanchor\007unbound") == 0) { if(cfg->hide_trustanchor) return 0; chaos_trustanchor(pkt, edns, w, repinfo); return 1; } return 0; } /** * Answer notify queries. These are notifies for authoritative zones, * the reply is an ack that the notify has been received. We need to check * access permission here. * @param w: worker * @param qinfo: query info. Pointer into packet buffer. * @param edns: edns info from query. * @param repinfo: reply info with source address. * @param pkt: packet buffer. */ static void answer_notify(struct worker* w, struct query_info* qinfo, struct edns_data* edns, sldns_buffer* pkt, struct comm_reply* repinfo) { int refused = 0; int rcode = LDNS_RCODE_NOERROR; uint32_t serial = 0; int has_serial; if(!w->env.auth_zones) return; has_serial = auth_zone_parse_notify_serial(pkt, &serial); if(auth_zones_notify(w->env.auth_zones, &w->env, qinfo->qname, qinfo->qname_len, qinfo->qclass, &repinfo->addr, repinfo->addrlen, has_serial, serial, &refused)) { rcode = LDNS_RCODE_NOERROR; } else { if(refused) rcode = LDNS_RCODE_REFUSED; else rcode = LDNS_RCODE_SERVFAIL; } if(verbosity >= VERB_DETAIL) { char buf[380]; char zname[255+1]; char sr[25]; dname_str(qinfo->qname, zname); sr[0]=0; if(has_serial) snprintf(sr, sizeof(sr), "serial %u ", (unsigned)serial); if(rcode == LDNS_RCODE_REFUSED) snprintf(buf, sizeof(buf), "refused NOTIFY %sfor %s from", sr, zname); else if(rcode == LDNS_RCODE_SERVFAIL) snprintf(buf, sizeof(buf), "servfail for NOTIFY %sfor %s from", sr, zname); else snprintf(buf, sizeof(buf), "received NOTIFY %sfor %s from", sr, zname); log_addr(VERB_DETAIL, buf, &repinfo->addr, repinfo->addrlen); } edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; edns->ext_rcode = 0; edns->bits &= EDNS_DO; edns->opt_list = NULL; error_encode(pkt, rcode, qinfo, *(uint16_t*)(void *)sldns_buffer_begin(pkt), sldns_buffer_read_u16_at(pkt, 2), edns); LDNS_OPCODE_SET(sldns_buffer_begin(pkt), LDNS_PACKET_NOTIFY); } static int deny_refuse(struct comm_point* c, enum acl_access acl, enum acl_access deny, enum acl_access refuse, struct worker* worker, struct comm_reply* repinfo) { if(acl == deny) { comm_point_drop_reply(repinfo); if(worker->stats.extended) worker->stats.unwanted_queries++; return 0; } else if(acl == refuse) { log_addr(VERB_ALGO, "refused query from", &repinfo->addr, repinfo->addrlen); log_buf(VERB_ALGO, "refuse", c->buffer); if(worker->stats.extended) worker->stats.unwanted_queries++; if(worker_check_request(c->buffer, worker) == -1) { comm_point_drop_reply(repinfo); return 0; /* discard this */ } sldns_buffer_set_limit(c->buffer, LDNS_HEADER_SIZE); sldns_buffer_write_at(c->buffer, 4, (uint8_t*)"\0\0\0\0\0\0\0\0", 8); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), LDNS_RCODE_REFUSED); sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE); sldns_buffer_flip(c->buffer); return 1; } return -1; } static int deny_refuse_all(struct comm_point* c, enum acl_access acl, struct worker* worker, struct comm_reply* repinfo) { return deny_refuse(c, acl, acl_deny, acl_refuse, worker, repinfo); } static int deny_refuse_non_local(struct comm_point* c, enum acl_access acl, struct worker* worker, struct comm_reply* repinfo) { return deny_refuse(c, acl, acl_deny_non_local, acl_refuse_non_local, worker, repinfo); } int worker_handle_request(struct comm_point* c, void* arg, int error, struct comm_reply* repinfo) { struct worker* worker = (struct worker*)arg; int ret; hashvalue_type h; struct lruhash_entry* e; struct query_info qinfo; struct edns_data edns; enum acl_access acl; struct acl_addr* acladdr; int rc = 0; int need_drop = 0; int is_expired_answer = 0; int is_secure_answer = 0; /* We might have to chase a CNAME chain internally, in which case * we'll have up to two replies and combine them to build a complete * answer. These variables control this case. */ struct ub_packed_rrset_key* alias_rrset = NULL; struct reply_info* partial_rep = NULL; struct query_info* lookup_qinfo = &qinfo; struct query_info qinfo_tmp; /* placeholder for lookup_qinfo */ struct respip_client_info* cinfo = NULL, cinfo_tmp; memset(&qinfo, 0, sizeof(qinfo)); if((error != NETEVENT_NOERROR && error != NETEVENT_DONE)|| !repinfo) { /* some bad tcp query DNS formats give these error calls */ verbose(VERB_ALGO, "handle request called with err=%d", error); return 0; } #ifdef USE_DNSCRYPT repinfo->max_udp_size = worker->daemon->cfg->max_udp_size; if(!dnsc_handle_curved_request(worker->daemon->dnscenv, repinfo)) { worker->stats.num_query_dnscrypt_crypted_malformed++; return 0; } if(c->dnscrypt && !repinfo->is_dnscrypted) { char buf[LDNS_MAX_DOMAINLEN+1]; /* Check if this is unencrypted and asking for certs */ if(worker_check_request(c->buffer, worker) != 0) { verbose(VERB_ALGO, "dnscrypt: worker check request: bad query."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); comm_point_drop_reply(repinfo); return 0; } if(!query_info_parse(&qinfo, c->buffer)) { verbose(VERB_ALGO, "dnscrypt: worker parse request: formerror."); log_addr(VERB_CLIENT, "from", &repinfo->addr, repinfo->addrlen); comm_point_drop_reply(repinfo); return 0; } dname_str(qinfo.qname, buf); if(!(qinfo.qtype == LDNS_RR_TYPE_TXT && strcasecmp(buf, worker->daemon->dnscenv->provider_name) == 0)) { verbose(VERB_ALGO, "dnscrypt: not TXT \"%s\". Received: %s \"%s\"", worker->daemon->dnscenv->provider_name, sldns_rr_descript(qinfo.qtype)->_name, buf); comm_point_drop_reply(repinfo); worker->stats.num_query_dnscrypt_cleartext++; return 0; } worker->stats.num_query_dnscrypt_cert++; sldns_buffer_rewind(c->buffer); } else if(c->dnscrypt && repinfo->is_dnscrypted) { worker->stats.num_query_dnscrypt_crypted++; } #endif #ifdef USE_DNSTAP if(worker->dtenv.log_client_query_messages) dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, c->type, c->buffer); #endif acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr, repinfo->addrlen); acl = acl_get_control(acladdr); if((ret=deny_refuse_all(c, acl, worker, repinfo)) != -1) { if(ret == 1) goto send_reply; return ret; } if((ret=worker_check_request(c->buffer, worker)) != 0) { verbose(VERB_ALGO, "worker check request: bad query."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); if(ret != -1) { LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), ret); return 1; } comm_point_drop_reply(repinfo); return 0; } worker->stats.num_queries++; /* check if this query should be dropped based on source ip rate limiting */ if(!infra_ip_ratelimit_inc(worker->env.infra_cache, repinfo, *worker->env.now, c->buffer)) { /* See if we are passed through with slip factor */ if(worker->env.cfg->ip_ratelimit_factor != 0 && ub_random_max(worker->env.rnd, worker->env.cfg->ip_ratelimit_factor) == 0) { char addrbuf[128]; addr_to_str(&repinfo->addr, repinfo->addrlen, addrbuf, sizeof(addrbuf)); verbose(VERB_QUERY, "ip_ratelimit allowed through for ip address %s because of slip in ip_ratelimit_factor", addrbuf); } else { worker->stats.num_queries_ip_ratelimited++; comm_point_drop_reply(repinfo); return 0; } } /* see if query is in the cache */ if(!query_info_parse(&qinfo, c->buffer)) { verbose(VERB_ALGO, "worker parse request: formerror."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); memset(&qinfo, 0, sizeof(qinfo)); /* zero qinfo.qname */ if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) { comm_point_drop_reply(repinfo); return 0; } sldns_buffer_rewind(c->buffer); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), LDNS_RCODE_FORMERR); goto send_reply; } if(worker->env.cfg->log_queries) { char ip[128]; addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); log_query_in(ip, qinfo.qname, qinfo.qtype, qinfo.qclass); } if(qinfo.qtype == LDNS_RR_TYPE_AXFR || qinfo.qtype == LDNS_RR_TYPE_IXFR) { verbose(VERB_ALGO, "worker request: refused zone transfer."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); sldns_buffer_rewind(c->buffer); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), LDNS_RCODE_REFUSED); if(worker->stats.extended) { worker->stats.qtype[qinfo.qtype]++; } goto send_reply; } if(qinfo.qtype == LDNS_RR_TYPE_OPT || qinfo.qtype == LDNS_RR_TYPE_TSIG || qinfo.qtype == LDNS_RR_TYPE_TKEY || qinfo.qtype == LDNS_RR_TYPE_MAILA || qinfo.qtype == LDNS_RR_TYPE_MAILB || (qinfo.qtype >= 128 && qinfo.qtype <= 248)) { verbose(VERB_ALGO, "worker request: formerror for meta-type."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) { comm_point_drop_reply(repinfo); return 0; } sldns_buffer_rewind(c->buffer); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), LDNS_RCODE_FORMERR); if(worker->stats.extended) { worker->stats.qtype[qinfo.qtype]++; } goto send_reply; } if((ret=parse_edns_from_pkt(c->buffer, &edns, worker->scratchpad)) != 0) { struct edns_data reply_edns; verbose(VERB_ALGO, "worker parse edns: formerror."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); memset(&reply_edns, 0, sizeof(reply_edns)); reply_edns.edns_present = 1; reply_edns.udp_size = EDNS_ADVERTISED_SIZE; LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), ret); error_encode(c->buffer, ret, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), &reply_edns); regional_free_all(worker->scratchpad); goto send_reply; } if(edns.edns_present) { struct edns_option* edns_opt; if(edns.edns_version != 0) { edns.ext_rcode = (uint8_t)(EDNS_RCODE_BADVERS>>4); edns.edns_version = EDNS_ADVERTISED_VERSION; edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits &= EDNS_DO; edns.opt_list = NULL; edns.padding_block_size = 0; verbose(VERB_ALGO, "query with bad edns version."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); error_encode(c->buffer, EDNS_RCODE_BADVERS&0xf, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), NULL); if(sldns_buffer_capacity(c->buffer) >= sldns_buffer_limit(c->buffer)+calc_edns_field_size(&edns)) attach_edns_record(c->buffer, &edns); regional_free_all(worker->scratchpad); goto send_reply; } if(edns.udp_size < NORMAL_UDP_SIZE && worker->daemon->cfg->harden_short_bufsize) { verbose(VERB_QUERY, "worker request: EDNS bufsize %d ignored", (int)edns.udp_size); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); edns.udp_size = NORMAL_UDP_SIZE; } if(c->type != comm_udp) { edns_opt = edns_opt_list_find(edns.opt_list, LDNS_EDNS_KEEPALIVE); if(edns_opt && edns_opt->opt_len > 0) { edns.ext_rcode = 0; edns.edns_version = EDNS_ADVERTISED_VERSION; edns.udp_size = EDNS_ADVERTISED_SIZE; edns.bits &= EDNS_DO; edns.opt_list = NULL; verbose(VERB_ALGO, "query with bad edns keepalive."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); error_encode(c->buffer, LDNS_RCODE_FORMERR, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), NULL); if(sldns_buffer_capacity(c->buffer) >= sldns_buffer_limit(c->buffer)+calc_edns_field_size(&edns)) attach_edns_record(c->buffer, &edns); regional_free_all(worker->scratchpad); goto send_reply; } } } if(edns.udp_size > worker->daemon->cfg->max_udp_size && c->type == comm_udp) { verbose(VERB_QUERY, "worker request: max UDP reply size modified" " (%d to max-udp-size)", (int)edns.udp_size); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); edns.udp_size = worker->daemon->cfg->max_udp_size; } if(edns.udp_size < LDNS_HEADER_SIZE) { verbose(VERB_ALGO, "worker request: edns is too small."); log_addr(VERB_CLIENT, "from", &repinfo->addr, repinfo->addrlen); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_TC_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), LDNS_RCODE_SERVFAIL); sldns_buffer_set_position(c->buffer, LDNS_HEADER_SIZE); sldns_buffer_write_at(c->buffer, 4, (uint8_t*)"\0\0\0\0\0\0\0\0", 8); sldns_buffer_flip(c->buffer); regional_free_all(worker->scratchpad); goto send_reply; } if(worker->stats.extended) server_stats_insquery(&worker->stats, c, qinfo.qtype, qinfo.qclass, &edns, repinfo); if(c->type != comm_udp) edns.udp_size = 65535; /* max size for TCP replies */ if(qinfo.qclass == LDNS_RR_CLASS_CH && answer_chaos(worker, &qinfo, &edns, repinfo, c->buffer)) { regional_free_all(worker->scratchpad); goto send_reply; } if(LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_PACKET_NOTIFY) { answer_notify(worker, &qinfo, &edns, c->buffer, repinfo); regional_free_all(worker->scratchpad); goto send_reply; } if(local_zones_answer(worker->daemon->local_zones, &worker->env, &qinfo, &edns, c->buffer, worker->scratchpad, repinfo, acladdr->taglist, acladdr->taglen, acladdr->tag_actions, acladdr->tag_actions_size, acladdr->tag_datas, acladdr->tag_datas_size, worker->daemon->cfg->tagname, worker->daemon->cfg->num_tags, acladdr->view)) { regional_free_all(worker->scratchpad); if(sldns_buffer_limit(c->buffer) == 0) { comm_point_drop_reply(repinfo); return 0; } goto send_reply; } if(worker->env.auth_zones && rpz_apply_qname_trigger(worker->env.auth_zones, &worker->env, &qinfo, &edns, c->buffer, worker->scratchpad, repinfo, acladdr->taglist, acladdr->taglen, &worker->stats)) { regional_free_all(worker->scratchpad); if(sldns_buffer_limit(c->buffer) == 0) { comm_point_drop_reply(repinfo); return 0; } goto send_reply; } if(worker->env.auth_zones && auth_zones_answer(worker->env.auth_zones, &worker->env, &qinfo, &edns, repinfo, c->buffer, worker->scratchpad)) { regional_free_all(worker->scratchpad); if(sldns_buffer_limit(c->buffer) == 0) { comm_point_drop_reply(repinfo); return 0; } /* set RA for everyone that can have recursion (based on * access control list) */ if(LDNS_RD_WIRE(sldns_buffer_begin(c->buffer)) && acl != acl_deny_non_local && acl != acl_refuse_non_local) LDNS_RA_SET(sldns_buffer_begin(c->buffer)); goto send_reply; } /* We've looked in our local zones. If the answer isn't there, we * might need to bail out based on ACLs now. */ if((ret=deny_refuse_non_local(c, acl, worker, repinfo)) != -1) { regional_free_all(worker->scratchpad); if(ret == 1) goto send_reply; return ret; } /* If this request does not have the recursion bit set, verify * ACLs allow the recursion bit to be treated as set. */ if(!(LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) && acl == acl_allow_setrd ) { LDNS_RD_SET(sldns_buffer_begin(c->buffer)); } /* If this request does not have the recursion bit set, verify * ACLs allow the snooping. */ if(!(LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) && acl != acl_allow_snoop ) { error_encode(c->buffer, LDNS_RCODE_REFUSED, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), NULL); regional_free_all(worker->scratchpad); log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from", &repinfo->addr, repinfo->addrlen); goto send_reply; } /* If we've found a local alias, replace the qname with the alias * target before resolving it. */ if(qinfo.local_alias) { struct ub_packed_rrset_key* rrset = qinfo.local_alias->rrset; struct packed_rrset_data* d = rrset->entry.data; /* Sanity check: our current implementation only supports * a single CNAME RRset as a local alias. */ if(qinfo.local_alias->next || rrset->rk.type != htons(LDNS_RR_TYPE_CNAME) || d->count != 1) { log_err("assumption failure: unexpected local alias"); regional_free_all(worker->scratchpad); return 0; /* drop it */ } qinfo.qname = d->rr_data[0] + 2; qinfo.qname_len = d->rr_len[0] - 2; } /* If we may apply IP-based actions to the answer, build the client * information. As this can be expensive, skip it if there is * absolutely no possibility of it. */ if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && (qinfo.qtype == LDNS_RR_TYPE_A || qinfo.qtype == LDNS_RR_TYPE_AAAA || qinfo.qtype == LDNS_RR_TYPE_ANY)) { cinfo_tmp.taglist = acladdr->taglist; cinfo_tmp.taglen = acladdr->taglen; cinfo_tmp.tag_actions = acladdr->tag_actions; cinfo_tmp.tag_actions_size = acladdr->tag_actions_size; cinfo_tmp.tag_datas = acladdr->tag_datas; cinfo_tmp.tag_datas_size = acladdr->tag_datas_size; cinfo_tmp.view = acladdr->view; cinfo_tmp.respip_set = worker->daemon->respip_set; cinfo = &cinfo_tmp; } lookup_cache: /* Lookup the cache. In case we chase an intermediate CNAME chain * this is a two-pass operation, and lookup_qinfo is different for * each pass. We should still pass the original qinfo to * answer_from_cache(), however, since it's used to build the reply. */ if(!edns_bypass_cache_stage(edns.opt_list, &worker->env)) { is_expired_answer = 0; is_secure_answer = 0; h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2)); if((e=slabhash_lookup(worker->env.msg_cache, h, lookup_qinfo, 0))) { /* answer from cache - we have acquired a readlock on it */ if(answer_from_cache(worker, &qinfo, cinfo, &need_drop, &is_expired_answer, &is_secure_answer, &alias_rrset, &partial_rep, (struct reply_info*)e->data, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), repinfo, &edns)) { /* prefetch it if the prefetch TTL expired. * Note that if there is more than one pass * its qname must be that used for cache * lookup. */ if((worker->env.cfg->prefetch && *worker->env.now >= ((struct reply_info*)e->data)->prefetch_ttl) || (worker->env.cfg->serve_expired && *worker->env.now >= ((struct reply_info*)e->data)->ttl)) { time_t leeway = ((struct reply_info*)e-> data)->ttl - *worker->env.now; if(((struct reply_info*)e->data)->ttl < *worker->env.now) leeway = 0; lock_rw_unlock(&e->lock); reply_and_prefetch(worker, lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2), repinfo, leeway, (partial_rep || need_drop)); if(!partial_rep) { rc = 0; regional_free_all(worker->scratchpad); goto send_reply_rc; } } else if(!partial_rep) { lock_rw_unlock(&e->lock); regional_free_all(worker->scratchpad); goto send_reply; } else { /* Note that we've already released the * lock if we're here after prefetch. */ lock_rw_unlock(&e->lock); } /* We've found a partial reply ending with an * alias. Replace the lookup qinfo for the * alias target and lookup the cache again to * (possibly) complete the reply. As we're * passing the "base" reply, there will be no * more alias chasing. */ memset(&qinfo_tmp, 0, sizeof(qinfo_tmp)); get_cname_target(alias_rrset, &qinfo_tmp.qname, &qinfo_tmp.qname_len); if(!qinfo_tmp.qname) { log_err("unexpected: invalid answer alias"); regional_free_all(worker->scratchpad); return 0; /* drop query */ } qinfo_tmp.qtype = qinfo.qtype; qinfo_tmp.qclass = qinfo.qclass; lookup_qinfo = &qinfo_tmp; goto lookup_cache; } verbose(VERB_ALGO, "answer from the cache failed"); lock_rw_unlock(&e->lock); } if(!LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) { if(answer_norec_from_cache(worker, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), repinfo, &edns)) { regional_free_all(worker->scratchpad); goto send_reply; } verbose(VERB_ALGO, "answer norec from cache -- " "need to validate or not primed"); } } sldns_buffer_rewind(c->buffer); server_stats_querymiss(&worker->stats, worker); if(verbosity >= VERB_CLIENT) { if(c->type == comm_udp) log_addr(VERB_CLIENT, "udp request from", &repinfo->addr, repinfo->addrlen); else log_addr(VERB_CLIENT, "tcp request from", &repinfo->addr, repinfo->addrlen); } /* grab a work request structure for this new request */ mesh_new_client(worker->env.mesh, &qinfo, cinfo, sldns_buffer_read_u16_at(c->buffer, 2), &edns, repinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer)); regional_free_all(worker->scratchpad); worker_mem_report(worker, NULL); return 0; send_reply: rc = 1; send_reply_rc: if(need_drop) { comm_point_drop_reply(repinfo); return 0; } if(is_expired_answer) { worker->stats.ans_expired++; } server_stats_insrcode(&worker->stats, c->buffer); if(worker->stats.extended) { if(is_secure_answer) worker->stats.ans_secure++; } #ifdef USE_DNSTAP if(worker->dtenv.log_client_response_messages) dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, c->type, c->buffer); #endif if(worker->env.cfg->log_replies) { struct timeval tv; memset(&tv, 0, sizeof(tv)); if(qinfo.local_alias && qinfo.local_alias->rrset && qinfo.local_alias->rrset->rk.dname) { /* log original qname, before the local alias was * used to resolve that CNAME to something else */ qinfo.qname = qinfo.local_alias->rrset->rk.dname; log_reply_info(NO_VERBOSE, &qinfo, &repinfo->addr, repinfo->addrlen, tv, 1, c->buffer); } else { log_reply_info(NO_VERBOSE, &qinfo, &repinfo->addr, repinfo->addrlen, tv, 1, c->buffer); } } #ifdef USE_DNSCRYPT if(!dnsc_handle_uncurved_request(repinfo)) { return 0; } #endif return rc; } void worker_sighandler(int sig, void* arg) { /* note that log, print, syscalls here give race conditions. * And cause hangups if the log-lock is held by the application. */ struct worker* worker = (struct worker*)arg; switch(sig) { #ifdef SIGHUP case SIGHUP: comm_base_exit(worker->base); break; #endif case SIGINT: worker->need_to_exit = 1; comm_base_exit(worker->base); break; #ifdef SIGQUIT case SIGQUIT: worker->need_to_exit = 1; comm_base_exit(worker->base); break; #endif case SIGTERM: worker->need_to_exit = 1; comm_base_exit(worker->base); break; default: /* unknown signal, ignored */ break; } } /** restart statistics timer for worker, if enabled */ static void worker_restart_timer(struct worker* worker) { if(worker->env.cfg->stat_interval > 0) { struct timeval tv; #ifndef S_SPLINT_S tv.tv_sec = worker->env.cfg->stat_interval; tv.tv_usec = 0; #endif comm_timer_set(worker->stat_timer, &tv); } } void worker_stat_timer_cb(void* arg) { struct worker* worker = (struct worker*)arg; server_stats_log(&worker->stats, worker, worker->thread_num); mesh_stats(worker->env.mesh, "mesh has"); worker_mem_report(worker, NULL); /* SHM is enabled, process data to SHM */ if (worker->daemon->cfg->shm_enable) { shm_main_run(worker); } if(!worker->daemon->cfg->stat_cumulative) { worker_stats_clear(worker); } /* start next timer */ worker_restart_timer(worker); } void worker_probe_timer_cb(void* arg) { struct worker* worker = (struct worker*)arg; struct timeval tv; #ifndef S_SPLINT_S tv.tv_sec = (time_t)autr_probe_timer(&worker->env); tv.tv_usec = 0; #endif if(tv.tv_sec != 0) comm_timer_set(worker->env.probe_timer, &tv); } struct worker* worker_create(struct daemon* daemon, int id, int* ports, int n) { unsigned int seed; struct worker* worker = (struct worker*)calloc(1, sizeof(struct worker)); if(!worker) return NULL; worker->numports = n; worker->ports = (int*)memdup(ports, sizeof(int)*n); if(!worker->ports) { free(worker); return NULL; } worker->daemon = daemon; worker->thread_num = id; if(!(worker->cmd = tube_create())) { free(worker->ports); free(worker); return NULL; } /* create random state here to avoid locking trouble in RAND_bytes */ if(!(worker->rndstate = ub_initstate(daemon->rand))) { log_err("could not init random numbers."); tube_delete(worker->cmd); free(worker->ports); free(worker); return NULL; } explicit_bzero(&seed, sizeof(seed)); return worker; } int worker_init(struct worker* worker, struct config_file *cfg, struct listen_port* ports, int do_sigs) { #ifdef USE_DNSTAP struct dt_env* dtenv = &worker->dtenv; #else void* dtenv = NULL; #endif worker->need_to_exit = 0; worker->base = comm_base_create(do_sigs); if(!worker->base) { log_err("could not create event handling base"); worker_delete(worker); return 0; } comm_base_set_slow_accept_handlers(worker->base, &worker_stop_accept, &worker_start_accept, worker); if(do_sigs) { #ifdef SIGHUP ub_thread_sig_unblock(SIGHUP); #endif ub_thread_sig_unblock(SIGINT); #ifdef SIGQUIT ub_thread_sig_unblock(SIGQUIT); #endif ub_thread_sig_unblock(SIGTERM); #ifndef LIBEVENT_SIGNAL_PROBLEM worker->comsig = comm_signal_create(worker->base, worker_sighandler, worker); if(!worker->comsig #ifdef SIGHUP || !comm_signal_bind(worker->comsig, SIGHUP) #endif #ifdef SIGQUIT || !comm_signal_bind(worker->comsig, SIGQUIT) #endif || !comm_signal_bind(worker->comsig, SIGTERM) || !comm_signal_bind(worker->comsig, SIGINT)) { log_err("could not create signal handlers"); worker_delete(worker); return 0; } #endif /* LIBEVENT_SIGNAL_PROBLEM */ if(!daemon_remote_open_accept(worker->daemon->rc, worker->daemon->rc_ports, worker)) { worker_delete(worker); return 0; } #ifdef UB_ON_WINDOWS wsvc_setup_worker(worker); #endif /* UB_ON_WINDOWS */ } else { /* !do_sigs */ worker->comsig = NULL; } #ifdef USE_DNSTAP if(cfg->dnstap) { log_assert(worker->daemon->dtenv != NULL); memcpy(&worker->dtenv, worker->daemon->dtenv, sizeof(struct dt_env)); if(!dt_init(&worker->dtenv, worker->base)) fatal_exit("dt_init failed"); } #endif worker->front = listen_create(worker->base, ports, cfg->msg_buffer_size, (int)cfg->incoming_num_tcp, cfg->do_tcp_keepalive ? cfg->tcp_keepalive_timeout : cfg->tcp_idle_timeout, cfg->harden_large_queries, cfg->http_max_streams, cfg->http_endpoint, cfg->http_notls_downstream, worker->daemon->tcl, worker->daemon->listen_sslctx, dtenv, worker_handle_request, worker); if(!worker->front) { log_err("could not create listening sockets"); worker_delete(worker); return 0; } worker->back = outside_network_create(worker->base, cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports, cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6, cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp, worker->daemon->env->infra_cache, worker->rndstate, cfg->use_caps_bits_for_id, worker->ports, worker->numports, cfg->unwanted_threshold, cfg->outgoing_tcp_mss, &worker_alloc_cleanup, worker, cfg->do_udp || cfg->udp_upstream_without_downstream, worker->daemon->connect_sslctx, cfg->delay_close, cfg->tls_use_sni, dtenv, cfg->udp_connect); if(!worker->back) { log_err("could not create outgoing sockets"); worker_delete(worker); return 0; } /* start listening to commands */ if(!tube_setup_bg_listen(worker->cmd, worker->base, &worker_handle_control_cmd, worker)) { log_err("could not create control compt."); worker_delete(worker); return 0; } worker->stat_timer = comm_timer_create(worker->base, worker_stat_timer_cb, worker); if(!worker->stat_timer) { log_err("could not create statistics timer"); } /* we use the msg_buffer_size as a good estimate for what the * user wants for memory usage sizes */ worker->scratchpad = regional_create_custom(cfg->msg_buffer_size); if(!worker->scratchpad) { log_err("malloc failure"); worker_delete(worker); return 0; } server_stats_init(&worker->stats, cfg); alloc_init(&worker->alloc, &worker->daemon->superalloc, worker->thread_num); alloc_set_id_cleanup(&worker->alloc, &worker_alloc_cleanup, worker); worker->env = *worker->daemon->env; comm_base_timept(worker->base, &worker->env.now, &worker->env.now_tv); worker->env.worker = worker; worker->env.worker_base = worker->base; worker->env.send_query = &worker_send_query; worker->env.alloc = &worker->alloc; worker->env.outnet = worker->back; worker->env.rnd = worker->rndstate; /* If case prefetch is triggered, the corresponding mesh will clear * the scratchpad for the module env in the middle of request handling. * It would be prone to a use-after-free kind of bug, so we avoid * sharing it with worker's own scratchpad at the cost of having * one more pad per worker. */ worker->env.scratch = regional_create_custom(cfg->msg_buffer_size); if(!worker->env.scratch) { log_err("malloc failure"); worker_delete(worker); return 0; } worker->env.mesh = mesh_create(&worker->daemon->mods, &worker->env); /* Pass on daemon variables that we would need in the mesh area */ worker->env.mesh->use_response_ip = worker->daemon->use_response_ip; worker->env.mesh->use_rpz = worker->daemon->use_rpz; worker->env.detach_subs = &mesh_detach_subs; worker->env.attach_sub = &mesh_attach_sub; worker->env.add_sub = &mesh_add_sub; worker->env.kill_sub = &mesh_state_delete; worker->env.detect_cycle = &mesh_detect_cycle; worker->env.scratch_buffer = sldns_buffer_new(cfg->msg_buffer_size); if(!(worker->env.fwds = forwards_create()) || !forwards_apply_cfg(worker->env.fwds, cfg)) { log_err("Could not set forward zones"); worker_delete(worker); return 0; } if(!(worker->env.hints = hints_create()) || !hints_apply_cfg(worker->env.hints, cfg)) { log_err("Could not set root or stub hints"); worker_delete(worker); return 0; } /* one probe timer per process -- if we have 5011 anchors */ if(autr_get_num_anchors(worker->env.anchors) > 0 #ifndef THREADS_DISABLED && worker->thread_num == 0 #endif ) { struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; worker->env.probe_timer = comm_timer_create(worker->base, worker_probe_timer_cb, worker); if(!worker->env.probe_timer) { log_err("could not create 5011-probe timer"); } else { /* let timer fire, then it can reset itself */ comm_timer_set(worker->env.probe_timer, &tv); } } /* zone transfer tasks, setup once per process, if any */ if(worker->env.auth_zones #ifndef THREADS_DISABLED && worker->thread_num == 0 #endif ) { auth_xfer_pickup_initial(worker->env.auth_zones, &worker->env); } #ifdef USE_DNSTAP if(worker->daemon->cfg->dnstap #ifndef THREADS_DISABLED && worker->thread_num == 0 #endif ) { if(!dt_io_thread_start(dtenv->dtio, comm_base_internal( worker->base), worker->daemon->num)) { log_err("could not start dnstap io thread"); worker_delete(worker); return 0; } } #endif /* USE_DNSTAP */ if(!worker->env.mesh || !worker->env.scratch_buffer) { worker_delete(worker); return 0; } worker_mem_report(worker, NULL); /* if statistics enabled start timer */ if(worker->env.cfg->stat_interval > 0) { verbose(VERB_ALGO, "set statistics interval %d secs", worker->env.cfg->stat_interval); worker_restart_timer(worker); } return 1; } void worker_work(struct worker* worker) { comm_base_dispatch(worker->base); } void worker_delete(struct worker* worker) { if(!worker) return; if(worker->env.mesh && verbosity >= VERB_OPS) { server_stats_log(&worker->stats, worker, worker->thread_num); mesh_stats(worker->env.mesh, "mesh has"); worker_mem_report(worker, NULL); } outside_network_quit_prepare(worker->back); mesh_delete(worker->env.mesh); sldns_buffer_free(worker->env.scratch_buffer); forwards_delete(worker->env.fwds); hints_delete(worker->env.hints); listen_delete(worker->front); outside_network_delete(worker->back); comm_signal_delete(worker->comsig); tube_delete(worker->cmd); comm_timer_delete(worker->stat_timer); comm_timer_delete(worker->env.probe_timer); free(worker->ports); if(worker->thread_num == 0) { #ifdef UB_ON_WINDOWS wsvc_desetup_worker(worker); #endif /* UB_ON_WINDOWS */ } #ifdef USE_DNSTAP if(worker->daemon->cfg->dnstap #ifndef THREADS_DISABLED && worker->thread_num == 0 #endif ) { dt_io_thread_stop(worker->dtenv.dtio); } dt_deinit(&worker->dtenv); #endif /* USE_DNSTAP */ comm_base_delete(worker->base); ub_randfree(worker->rndstate); alloc_clear(&worker->alloc); regional_destroy(worker->env.scratch); regional_destroy(worker->scratchpad); free(worker); } struct outbound_entry* worker_send_query(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q) { struct worker* worker = q->env->worker; struct outbound_entry* e = (struct outbound_entry*)regional_alloc( q->region, sizeof(*e)); if(!e) return NULL; e->qstate = q; e->qsent = outnet_serviced_query(worker->back, qinfo, flags, dnssec, want_dnssec, nocaps, q->env->cfg->tcp_upstream, ssl_upstream, tls_auth_name, addr, addrlen, zone, zonelen, q, worker_handle_service_reply, e, worker->back->udp_buff, q->env); if(!e->qsent) { return NULL; } return e; } void worker_alloc_cleanup(void* arg) { struct worker* worker = (struct worker*)arg; slabhash_clear(&worker->env.rrset_cache->table); slabhash_clear(worker->env.msg_cache); } void worker_stats_clear(struct worker* worker) { server_stats_init(&worker->stats, worker->env.cfg); mesh_stats_clear(worker->env.mesh); worker->back->unwanted_replies = 0; worker->back->num_tcp_outgoing = 0; } void worker_start_accept(void* arg) { struct worker* worker = (struct worker*)arg; listen_start_accept(worker->front); if(worker->thread_num == 0) daemon_remote_start_accept(worker->daemon->rc); } void worker_stop_accept(void* arg) { struct worker* worker = (struct worker*)arg; listen_stop_accept(worker->front); if(worker->thread_num == 0) daemon_remote_stop_accept(worker->daemon->rc); } /* --- fake callbacks for fptr_wlist to work --- */ struct outbound_entry* libworker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) { log_assert(0); return 0; } int libworker_handle_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int libworker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } void libworker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) { log_assert(0); } void libworker_fg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } void libworker_bg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } void libworker_event_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } int context_query_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } int order_lock_cmp(const void* ATTR_UNUSED(e1), const void* ATTR_UNUSED(e2)) { log_assert(0); return 0; } int codeline_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } #ifdef USE_DNSTAP void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } #endif #ifdef USE_DNSTAP void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } #endif unbound-1.13.1/daemon/daemon.h0000644000175000017500000001300214010434640015552 0ustar wouterwouter/* * daemon/daemon.h - collection of workers that handles requests. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * The daemon consists of global settings and a number of workers. */ #ifndef DAEMON_H #define DAEMON_H #include "util/locks.h" #include "util/alloc.h" #include "services/modstack.h" struct config_file; struct worker; struct listen_port; struct slabhash; struct module_env; struct rrset_cache; struct acl_list; struct local_zones; struct views; struct ub_randstate; struct daemon_remote; struct respip_set; struct shm_main_info; #include "dnstap/dnstap_config.h" #ifdef USE_DNSTAP struct dt_env; #endif #include "dnscrypt/dnscrypt_config.h" #ifdef USE_DNSCRYPT struct dnsc_env; #endif /** * Structure holding worker list. * Holds globally visible information. */ struct daemon { /** The config settings */ struct config_file* cfg; /** the chroot dir in use, NULL if none */ char* chroot; /** pidfile that is used */ char* pidfile; /** port number that has ports opened. */ int listening_port; /** array of listening ports, opened. Listening ports per worker, * or just one element[0] shared by the worker threads. */ struct listen_port** ports; /** size of ports array */ size_t num_ports; /** reuseport is enabled if true */ int reuseport; /** port number for remote that has ports opened. */ int rc_port; /** listening ports for remote control */ struct listen_port* rc_ports; /** remote control connections management (for first worker) */ struct daemon_remote* rc; /** ssl context for listening to dnstcp over ssl, and connecting ssl */ void* listen_sslctx, *connect_sslctx; /** num threads allocated */ int num; /** the worker entries */ struct worker** workers; /** do we need to exit unbound (or is it only a reload?) */ int need_to_exit; /** master random table ; used for port div between threads on reload*/ struct ub_randstate* rand; /** master allocation cache */ struct alloc_cache superalloc; /** the module environment master value, copied and changed by threads*/ struct module_env* env; /** stack of module callbacks */ struct module_stack mods; /** access control, which client IPs are allowed to connect */ struct acl_list* acl; /** TCP connection limit, limit connections from client IPs */ struct tcl_list* tcl; /** local authority zones */ struct local_zones* local_zones; /** last time of statistics printout */ struct timeval time_last_stat; /** time when daemon started */ struct timeval time_boot; /** views structure containing view tree */ struct views* views; #ifdef USE_DNSTAP /** the dnstap environment master value, copied and changed by threads*/ struct dt_env* dtenv; #endif struct shm_main_info* shm_info; /** response-ip set with associated actions and tags. */ struct respip_set* respip_set; /** some response-ip tags or actions are configured if true */ int use_response_ip; /** some RPZ policies are configured */ int use_rpz; #ifdef USE_DNSCRYPT /** the dnscrypt environment */ struct dnsc_env* dnscenv; #endif }; /** * Initialize daemon structure. * @return: The daemon structure, or NULL on error. */ struct daemon* daemon_init(void); /** * Open shared listening ports (if needed). * The cfg member pointer must have been set for the daemon. * @param daemon: the daemon. * @return: false on error. */ int daemon_open_shared_ports(struct daemon* daemon); /** * Fork workers and start service. * When the routine exits, it is no longer forked. * @param daemon: the daemon. */ void daemon_fork(struct daemon* daemon); /** * Close off the worker thread information. * Bring the daemon back into state ready for daemon_fork again. * @param daemon: the daemon. */ void daemon_cleanup(struct daemon* daemon); /** * Delete workers, close listening ports. * @param daemon: the daemon. */ void daemon_delete(struct daemon* daemon); /** * Apply config settings. * @param daemon: the daemon. * @param cfg: new config settings. */ void daemon_apply_cfg(struct daemon* daemon, struct config_file* cfg); #endif /* DAEMON_H */ unbound-1.13.1/daemon/remote.h0000644000175000017500000001441714010434640015615 0ustar wouterwouter/* * daemon/remote.h - remote control for the unbound daemon. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the remote control functionality for the daemon. * The remote control can be performed using either the commandline * unbound-control tool, or a SSLv3/TLS capable web browser. * The channel is secured using SSLv3 or TLSv1, and certificates. * Both the server and the client(control tool) have their own keys. */ #ifndef DAEMON_REMOTE_H #define DAEMON_REMOTE_H #ifdef HAVE_OPENSSL_SSL_H #include "openssl/ssl.h" #endif struct config_file; struct listen_list; struct listen_port; struct worker; struct comm_reply; struct comm_point; struct daemon_remote; /** number of milliseconds timeout on incoming remote control handshake */ #define REMOTE_CONTROL_TCP_TIMEOUT 120000 /** * a busy control command connection, SSL state */ struct rc_state { /** the next item in list */ struct rc_state* next; /** the commpoint */ struct comm_point* c; /** in the handshake part */ enum { rc_none, rc_hs_read, rc_hs_write } shake_state; #ifdef HAVE_SSL /** the ssl state */ SSL* ssl; #endif /** file descriptor */ int fd; /** the rc this is part of */ struct daemon_remote* rc; }; /** * The remote control tool state. * The state is only created for the first thread, other threads * are called from this thread. Only the first threads listens to * the control port. The other threads do not, but are called on the * command channel(pipe) from the first thread. */ struct daemon_remote { /** the worker for this remote control */ struct worker* worker; /** commpoints for accepting remote control connections */ struct listen_list* accept_list; /* if certificates are used */ int use_cert; /** number of active commpoints that are handling remote control */ int active; /** max active commpoints */ int max_active; /** current commpoints busy; should be a short list, malloced */ struct rc_state* busy_list; #ifdef HAVE_SSL /** the SSL context for creating new SSL streams */ SSL_CTX* ctx; #endif }; /** * Connection to print to, either SSL or plain over fd */ struct remote_stream { #ifdef HAVE_SSL /** SSL structure, nonNULL if using SSL */ SSL* ssl; #endif /** file descriptor for plain transfer */ int fd; }; typedef struct remote_stream RES; /** * Create new remote control state for the daemon. * @param cfg: config file with key file settings. * @return new state, or NULL on failure. */ struct daemon_remote* daemon_remote_create(struct config_file* cfg); /** * remote control state to delete. * @param rc: state to delete. */ void daemon_remote_delete(struct daemon_remote* rc); /** * remote control state to clear up. Busy and accept points are closed. * Does not delete the rc itself, or the ssl context (with its keys). * @param rc: state to clear. */ void daemon_remote_clear(struct daemon_remote* rc); /** * Open and create listening ports for remote control. * @param cfg: config options. * @return list of ports or NULL on failure. * can be freed with listening_ports_free(). */ struct listen_port* daemon_remote_open_ports(struct config_file* cfg); /** * Setup comm points for accepting remote control connections. * @param rc: state * @param ports: already opened ports. * @param worker: worker with communication base. and links to command channels. * @return false on error. */ int daemon_remote_open_accept(struct daemon_remote* rc, struct listen_port* ports, struct worker* worker); /** * Stop accept handlers for TCP (until enabled again) * @param rc: state */ void daemon_remote_stop_accept(struct daemon_remote* rc); /** * Stop accept handlers for TCP (until enabled again) * @param rc: state */ void daemon_remote_start_accept(struct daemon_remote* rc); /** * Handle nonthreaded remote cmd execution. * @param worker: this worker (the remote worker). */ void daemon_remote_exec(struct worker* worker); #ifdef HAVE_SSL /** * Print fixed line of text over ssl connection in blocking mode * @param ssl: print to * @param text: the text. * @return false on connection failure. */ int ssl_print_text(RES* ssl, const char* text); /** * printf style printing to the ssl connection * @param ssl: the RES connection to print to. Blocking. * @param format: printf style format string. * @return success or false on a network failure. */ int ssl_printf(RES* ssl, const char* format, ...) ATTR_FORMAT(printf, 2, 3); /** * Read until \n is encountered * If stream signals EOF, the string up to then is returned (without \n). * @param ssl: the RES connection to read from. blocking. * @param buf: buffer to read to. * @param max: size of buffer. * @return false on connection failure. */ int ssl_read_line(RES* ssl, char* buf, size_t max); #endif /* HAVE_SSL */ #endif /* DAEMON_REMOTE_H */ unbound-1.13.1/daemon/unbound.c0000644000175000017500000005533214010434640015770 0ustar wouterwouter/* * daemon/unbound.c - main program for unbound DNS resolver daemon. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * * Main program to start the DNS resolver daemon. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #include #include "util/log.h" #include "daemon/daemon.h" #include "daemon/remote.h" #include "util/config_file.h" #include "util/storage/slabhash.h" #include "services/listen_dnsport.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" #include "util/fptr_wlist.h" #include "util/data/msgreply.h" #include "util/module.h" #include "util/net_help.h" #include "util/ub_event.h" #include #include #include #ifdef HAVE_PWD_H #include #endif #ifdef HAVE_GRP_H #include #endif #include #ifndef S_SPLINT_S /* splint chokes on this system header file */ #ifdef HAVE_SYS_RESOURCE_H #include #endif #endif /* S_SPLINT_S */ #ifdef HAVE_LOGIN_CAP_H #include #endif #ifdef UB_ON_WINDOWS # include "winrc/win_svc.h" #endif #ifdef HAVE_NSS /* nss3 */ # include "nss.h" #endif #ifdef HAVE_TARGETCONDITIONALS_H #include #endif #if (defined(TARGET_OS_TV) && TARGET_OS_TV) || (defined(TARGET_OS_WATCH) && TARGET_OS_WATCH) #undef HAVE_FORK #endif /** print build options. */ static void print_build_options(void) { const char** m; const char *evnm="event", *evsys="", *evmethod=""; time_t t; struct timeval now; struct ub_event_base* base; printf("Version %s\n\n", PACKAGE_VERSION); printf("Configure line: %s\n", CONFCMDLINE); base = ub_default_event_base(0,&t,&now); ub_get_event_sys(base, &evnm, &evsys, &evmethod); printf("Linked libs: %s %s (it uses %s), %s\n", evnm, evsys, evmethod, #ifdef HAVE_SSL # ifdef SSLEAY_VERSION SSLeay_version(SSLEAY_VERSION) # else OpenSSL_version(OPENSSL_VERSION) # endif #elif defined(HAVE_NSS) NSS_GetVersion() #elif defined(HAVE_NETTLE) "nettle" #endif ); printf("Linked modules:"); for(m = module_list_avail(); *m; m++) printf(" %s", *m); printf("\n"); #ifdef USE_DNSCRYPT printf("DNSCrypt feature available\n"); #endif #ifdef USE_TCP_FASTOPEN printf("TCP Fastopen feature available\n"); #endif ub_event_base_free(base); printf("\nBSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); } /** print usage. */ static void usage(void) { printf("usage: unbound [options]\n"); printf(" start unbound daemon DNS resolver.\n"); printf("-h this help.\n"); printf("-c file config file to read instead of %s\n", CONFIGFILE); printf(" file format is described in unbound.conf(5).\n"); printf("-d do not fork into the background.\n"); printf("-p do not create a pidfile.\n"); printf("-v verbose (more times to increase verbosity).\n"); printf("-V show version number and build options.\n"); #ifdef UB_ON_WINDOWS printf("-w opt windows option: \n"); printf(" install, remove - manage the services entry\n"); printf(" service - used to start from services control panel\n"); #endif printf("\nVersion %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); } #ifndef unbound_testbound int replay_var_compare(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } #endif /** check file descriptor count */ static void checkrlimits(struct config_file* cfg) { #ifndef S_SPLINT_S #ifdef HAVE_GETRLIMIT /* list has number of ports to listen to, ifs number addresses */ int list = ((cfg->do_udp?1:0) + (cfg->do_tcp?1 + (int)cfg->incoming_num_tcp:0)); size_t listen_ifs = (size_t)(cfg->num_ifs==0? ((cfg->do_ip4 && !cfg->if_automatic?1:0) + (cfg->do_ip6?1:0)):cfg->num_ifs); size_t listen_num = list*listen_ifs; size_t outudpnum = (size_t)cfg->outgoing_num_ports; size_t outtcpnum = cfg->outgoing_num_tcp; size_t misc = 4; /* logfile, pidfile, stdout... */ size_t perthread_noudp = listen_num + outtcpnum + 2/*cmdpipe*/ + 2/*libevent*/ + misc; size_t perthread = perthread_noudp + outudpnum; #if !defined(HAVE_PTHREAD) && !defined(HAVE_SOLARIS_THREADS) int numthread = 1; /* it forks */ #else int numthread = (cfg->num_threads?cfg->num_threads:1); #endif size_t total = numthread * perthread + misc; size_t avail; struct rlimit rlim; if(total > 1024 && strncmp(ub_event_get_version(), "mini-event", 10) == 0) { log_warn("too many file descriptors requested. The builtin" "mini-event cannot handle more than 1024. Config " "for less fds or compile with libevent"); if(numthread*perthread_noudp+15 > 1024) fatal_exit("too much tcp. not enough fds."); cfg->outgoing_num_ports = (int)((1024 - numthread*perthread_noudp - 10 /* safety margin */) /numthread); log_warn("continuing with less udp ports: %u", cfg->outgoing_num_ports); total = 1024; } if(perthread > 64 && strncmp(ub_event_get_version(), "winsock-event", 13) == 0) { log_err("too many file descriptors requested. The winsock" " event handler cannot handle more than 64 per " " thread. Config for less fds"); if(perthread_noudp+2 > 64) fatal_exit("too much tcp. not enough fds."); cfg->outgoing_num_ports = (int)((64 - perthread_noudp - 2/* safety margin */)); log_warn("continuing with less udp ports: %u", cfg->outgoing_num_ports); total = numthread*(perthread_noudp+ (size_t)cfg->outgoing_num_ports)+misc; } if(getrlimit(RLIMIT_NOFILE, &rlim) < 0) { log_warn("getrlimit: %s", strerror(errno)); return; } if(rlim.rlim_cur == (rlim_t)RLIM_INFINITY) return; if((size_t)rlim.rlim_cur < total) { avail = (size_t)rlim.rlim_cur; rlim.rlim_cur = (rlim_t)(total + 10); rlim.rlim_max = (rlim_t)(total + 10); #ifdef HAVE_SETRLIMIT if(setrlimit(RLIMIT_NOFILE, &rlim) < 0) { log_warn("setrlimit: %s", strerror(errno)); #endif log_warn("cannot increase max open fds from %u to %u", (unsigned)avail, (unsigned)total+10); /* check that calculation below does not underflow, * with 15 as margin */ if(numthread*perthread_noudp+15 > avail) fatal_exit("too much tcp. not enough fds."); cfg->outgoing_num_ports = (int)((avail - numthread*perthread_noudp - 10 /* safety margin */) /numthread); log_warn("continuing with less udp ports: %u", cfg->outgoing_num_ports); log_warn("increase ulimit or decrease threads, " "ports in config to remove this warning"); return; #ifdef HAVE_SETRLIMIT } #endif verbose(VERB_ALGO, "increased limit(open files) from %u to %u", (unsigned)avail, (unsigned)total+10); } #else (void)cfg; #endif /* HAVE_GETRLIMIT */ #endif /* S_SPLINT_S */ } /** set verbosity, check rlimits, cache settings */ static void apply_settings(struct daemon* daemon, struct config_file* cfg, int cmdline_verbose, int debug_mode) { /* apply if they have changed */ verbosity = cmdline_verbose + cfg->verbosity; if (debug_mode > 1) { cfg->use_syslog = 0; free(cfg->logfile); cfg->logfile = NULL; } daemon_apply_cfg(daemon, cfg); checkrlimits(cfg); if (cfg->use_systemd && cfg->do_daemonize) { log_warn("use-systemd and do-daemonize should not be enabled at the same time"); } log_ident_set_or_default(cfg->log_identity); } #ifdef HAVE_KILL /** Read existing pid from pidfile. * @param file: file name of pid file. * @return: the pid from the file or -1 if none. */ static pid_t readpid (const char* file) { int fd; pid_t pid; char pidbuf[32]; char* t; ssize_t l; if ((fd = open(file, O_RDONLY)) == -1) { if(errno != ENOENT) log_err("Could not read pidfile %s: %s", file, strerror(errno)); return -1; } if (((l = read(fd, pidbuf, sizeof(pidbuf)))) == -1) { if(errno != ENOENT) log_err("Could not read pidfile %s: %s", file, strerror(errno)); close(fd); return -1; } close(fd); /* Empty pidfile means no pidfile... */ if (l == 0) { return -1; } pidbuf[sizeof(pidbuf)-1] = 0; pid = (pid_t)strtol(pidbuf, &t, 10); if (*t && *t != '\n') { return -1; } return pid; } /** write pid to file. * @param pidfile: file name of pid file. * @param pid: pid to write to file. * @return false on failure */ static int writepid (const char* pidfile, pid_t pid) { int fd; char pidbuf[32]; size_t count = 0; snprintf(pidbuf, sizeof(pidbuf), "%lu\n", (unsigned long)pid); if((fd = open(pidfile, O_WRONLY | O_CREAT | O_TRUNC #ifdef O_NOFOLLOW | O_NOFOLLOW #endif , 0644)) == -1) { log_err("cannot open pidfile %s: %s", pidfile, strerror(errno)); return 0; } while(count < strlen(pidbuf)) { ssize_t r = write(fd, pidbuf+count, strlen(pidbuf)-count); if(r == -1) { if(errno == EAGAIN || errno == EINTR) continue; log_err("cannot write to pidfile %s: %s", pidfile, strerror(errno)); close(fd); return 0; } else if(r == 0) { log_err("cannot write any bytes to pidfile %s: " "write returns 0 bytes written", pidfile); close(fd); return 0; } count += r; } close(fd); return 1; } /** * check old pid file. * @param pidfile: the file name of the pid file. * @param inchroot: if pidfile is inchroot and we can thus expect to * be able to delete it. */ static void checkoldpid(char* pidfile, int inchroot) { pid_t old; if((old = readpid(pidfile)) != -1) { /* see if it is still alive */ if(kill(old, 0) == 0 || errno == EPERM) log_warn("unbound is already running as pid %u.", (unsigned)old); else if(inchroot) log_warn("did not exit gracefully last time (%u)", (unsigned)old); } } #endif /* HAVE_KILL */ /** detach from command line */ static void detach(void) { #if defined(HAVE_DAEMON) && !defined(DEPRECATED_DAEMON) /* use POSIX daemon(3) function */ if(daemon(1, 0) != 0) fatal_exit("daemon failed: %s", strerror(errno)); #else /* no HAVE_DAEMON */ #ifdef HAVE_FORK int fd; /* Take off... */ switch (fork()) { case 0: break; case -1: fatal_exit("fork failed: %s", strerror(errno)); default: /* exit interactive session */ exit(0); } /* detach */ #ifdef HAVE_SETSID if(setsid() == -1) fatal_exit("setsid() failed: %s", strerror(errno)); #endif if ((fd = open("/dev/null", O_RDWR, 0)) != -1) { (void)dup2(fd, STDIN_FILENO); (void)dup2(fd, STDOUT_FILENO); (void)dup2(fd, STDERR_FILENO); if (fd > 2) (void)close(fd); } #endif /* HAVE_FORK */ #endif /* HAVE_DAEMON */ } /** daemonize, drop user privileges and chroot if needed */ static void perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, const char** cfgfile, int need_pidfile) { #ifdef HAVE_KILL int pidinchroot; #endif #ifdef HAVE_GETPWNAM struct passwd *pwd = NULL; if(cfg->username && cfg->username[0]) { if((pwd = getpwnam(cfg->username)) == NULL) fatal_exit("user '%s' does not exist.", cfg->username); /* endpwent below, in case we need pwd for setusercontext */ } #endif #ifdef UB_ON_WINDOWS w_config_adjust_directory(cfg); #endif /* read ssl keys while superuser and outside chroot */ #ifdef HAVE_SSL if(!(daemon->rc = daemon_remote_create(cfg))) fatal_exit("could not set up remote-control"); if(cfg->ssl_service_key && cfg->ssl_service_key[0]) { if(!(daemon->listen_sslctx = listen_sslctx_create( cfg->ssl_service_key, cfg->ssl_service_pem, NULL))) fatal_exit("could not set up listen SSL_CTX"); if(cfg->tls_ciphers && cfg->tls_ciphers[0]) { if (!SSL_CTX_set_cipher_list(daemon->listen_sslctx, cfg->tls_ciphers)) { fatal_exit("failed to set tls-cipher %s", cfg->tls_ciphers); } } #ifdef HAVE_SSL_CTX_SET_CIPHERSUITES if(cfg->tls_ciphersuites && cfg->tls_ciphersuites[0]) { if (!SSL_CTX_set_ciphersuites(daemon->listen_sslctx, cfg->tls_ciphersuites)) { fatal_exit("failed to set tls-ciphersuites %s", cfg->tls_ciphersuites); } } #endif if(cfg->tls_session_ticket_keys.first && cfg->tls_session_ticket_keys.first->str[0] != 0) { if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys.first)) { fatal_exit("could not set session ticket SSL_CTX"); } } } if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL, cfg->tls_cert_bundle, cfg->tls_win_cert))) fatal_exit("could not set up connect SSL_CTX"); #endif /* init syslog (as root) if needed, before daemonize, otherwise * a fork error could not be printed since daemonize closed stderr.*/ if(cfg->use_syslog) { log_init(cfg->logfile, cfg->use_syslog, cfg->chrootdir); } /* if using a logfile, we cannot open it because the logfile would * be created with the wrong permissions, we cannot chown it because * we cannot chown system logfiles, so we do not open at all. * So, using a logfile, the user does not see errors unless -d is * given to unbound on the commandline. */ #ifdef HAVE_KILL /* true if pidfile is inside chrootdir, or nochroot */ pidinchroot = need_pidfile && (!(cfg->chrootdir && cfg->chrootdir[0]) || (cfg->chrootdir && cfg->chrootdir[0] && strncmp(cfg->pidfile, cfg->chrootdir, strlen(cfg->chrootdir))==0)); /* check old pid file before forking */ if(cfg->pidfile && cfg->pidfile[0] && need_pidfile) { /* calculate position of pidfile */ if(cfg->pidfile[0] == '/') daemon->pidfile = strdup(cfg->pidfile); else daemon->pidfile = fname_after_chroot(cfg->pidfile, cfg, 1); if(!daemon->pidfile) fatal_exit("pidfile alloc: out of memory"); checkoldpid(daemon->pidfile, pidinchroot); } #endif /* daemonize because pid is needed by the writepid func */ if(!debug_mode && cfg->do_daemonize) { detach(); } /* write new pidfile (while still root, so can be outside chroot) */ #ifdef HAVE_KILL if(cfg->pidfile && cfg->pidfile[0] && need_pidfile) { if(writepid(daemon->pidfile, getpid())) { if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1 && pidinchroot) { # ifdef HAVE_CHOWN if(chown(daemon->pidfile, cfg_uid, cfg_gid) == -1) { verbose(VERB_QUERY, "cannot chown %u.%u %s: %s", (unsigned)cfg_uid, (unsigned)cfg_gid, daemon->pidfile, strerror(errno)); } # endif /* HAVE_CHOWN */ } } } #else (void)daemon; (void)need_pidfile; #endif /* HAVE_KILL */ /* Set user context */ #ifdef HAVE_GETPWNAM if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1) { #ifdef HAVE_SETUSERCONTEXT /* setusercontext does initgroups, setuid, setgid, and * also resource limits from login config, but we * still call setresuid, setresgid to be sure to set all uid*/ if(setusercontext(NULL, pwd, cfg_uid, (unsigned) LOGIN_SETALL & ~LOGIN_SETUSER & ~LOGIN_SETGROUP) != 0) log_warn("unable to setusercontext %s: %s", cfg->username, strerror(errno)); #else (void)pwd; #endif /* HAVE_SETUSERCONTEXT */ } #endif /* HAVE_GETPWNAM */ /* box into the chroot */ #ifdef HAVE_CHROOT if(cfg->chrootdir && cfg->chrootdir[0]) { if(chdir(cfg->chrootdir)) { fatal_exit("unable to chdir to chroot %s: %s", cfg->chrootdir, strerror(errno)); } verbose(VERB_QUERY, "chdir to %s", cfg->chrootdir); if(chroot(cfg->chrootdir)) fatal_exit("unable to chroot to %s: %s", cfg->chrootdir, strerror(errno)); if(chdir("/")) fatal_exit("unable to chdir to / in chroot %s: %s", cfg->chrootdir, strerror(errno)); verbose(VERB_QUERY, "chroot to %s", cfg->chrootdir); if(strncmp(*cfgfile, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) (*cfgfile) += strlen(cfg->chrootdir); /* adjust stored pidfile for chroot */ if(daemon->pidfile && daemon->pidfile[0] && strncmp(daemon->pidfile, cfg->chrootdir, strlen(cfg->chrootdir))==0) { char* old = daemon->pidfile; daemon->pidfile = strdup(old+strlen(cfg->chrootdir)); free(old); if(!daemon->pidfile) log_err("out of memory in pidfile adjust"); } daemon->chroot = strdup(cfg->chrootdir); if(!daemon->chroot) log_err("out of memory in daemon chroot dir storage"); } #else (void)cfgfile; #endif /* change to working directory inside chroot */ if(cfg->directory && cfg->directory[0]) { char* dir = cfg->directory; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(dir, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) dir += strlen(cfg->chrootdir); if(dir[0]) { if(chdir(dir)) { fatal_exit("Could not chdir to %s: %s", dir, strerror(errno)); } verbose(VERB_QUERY, "chdir to %s", dir); } } /* drop permissions after chroot, getpwnam, pidfile, syslog done*/ #ifdef HAVE_GETPWNAM if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1) { # ifdef HAVE_INITGROUPS if(initgroups(cfg->username, cfg_gid) != 0) log_warn("unable to initgroups %s: %s", cfg->username, strerror(errno)); # endif /* HAVE_INITGROUPS */ # ifdef HAVE_ENDPWENT endpwent(); # endif #ifdef HAVE_SETRESGID if(setresgid(cfg_gid,cfg_gid,cfg_gid) != 0) #elif defined(HAVE_SETREGID) && !defined(DARWIN_BROKEN_SETREUID) if(setregid(cfg_gid,cfg_gid) != 0) #else /* use setgid */ if(setgid(cfg_gid) != 0) #endif /* HAVE_SETRESGID */ fatal_exit("unable to set group id of %s: %s", cfg->username, strerror(errno)); #ifdef HAVE_SETRESUID if(setresuid(cfg_uid,cfg_uid,cfg_uid) != 0) #elif defined(HAVE_SETREUID) && !defined(DARWIN_BROKEN_SETREUID) if(setreuid(cfg_uid,cfg_uid) != 0) #else /* use setuid */ if(setuid(cfg_uid) != 0) #endif /* HAVE_SETRESUID */ fatal_exit("unable to set user id of %s: %s", cfg->username, strerror(errno)); verbose(VERB_QUERY, "drop user privileges, run as %s", cfg->username); } #endif /* HAVE_GETPWNAM */ /* file logging inited after chroot,chdir,setuid is done so that * it would succeed on SIGHUP as well */ if(!cfg->use_syslog) log_init(cfg->logfile, cfg->use_syslog, cfg->chrootdir); } /** * Run the daemon. * @param cfgfile: the config file name. * @param cmdline_verbose: verbosity resulting from commandline -v. * These increase verbosity as specified in the config file. * @param debug_mode: if set, do not daemonize. * @param need_pidfile: if false, no pidfile is checked or created. */ static void run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode, int need_pidfile) { struct config_file* cfg = NULL; struct daemon* daemon = NULL; int done_setup = 0; if(!(daemon = daemon_init())) fatal_exit("alloc failure"); while(!daemon->need_to_exit) { if(done_setup) verbose(VERB_OPS, "Restart of %s.", PACKAGE_STRING); else verbose(VERB_OPS, "Start of %s.", PACKAGE_STRING); /* config stuff */ if(!(cfg = config_create())) fatal_exit("Could not alloc config defaults"); if(!config_read(cfg, cfgfile, daemon->chroot)) { if(errno != ENOENT) fatal_exit("Could not read config file: %s." " Maybe try unbound -dd, it stays on " "the commandline to see more errors, " "or unbound-checkconf", cfgfile); log_warn("Continuing with default config settings"); } apply_settings(daemon, cfg, cmdline_verbose, debug_mode); if(!done_setup) config_lookup_uid(cfg); /* prepare */ if(!daemon_open_shared_ports(daemon)) fatal_exit("could not open ports"); if(!done_setup) { perform_setup(daemon, cfg, debug_mode, &cfgfile, need_pidfile); done_setup = 1; } else { /* reopen log after HUP to facilitate log rotation */ if(!cfg->use_syslog) log_init(cfg->logfile, 0, cfg->chrootdir); } /* work */ daemon_fork(daemon); /* clean up for restart */ verbose(VERB_ALGO, "cleanup."); daemon_cleanup(daemon); config_delete(cfg); } verbose(VERB_ALGO, "Exit cleanup."); /* this unlink may not work if the pidfile is located outside * of the chroot/workdir or we no longer have permissions */ if(daemon->pidfile) { int fd; /* truncate pidfile */ fd = open(daemon->pidfile, O_WRONLY | O_TRUNC, 0644); if(fd != -1) close(fd); /* delete pidfile */ unlink(daemon->pidfile); } daemon_delete(daemon); } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** * main program. Set options given commandline arguments. * @param argc: number of commandline arguments. * @param argv: array of commandline arguments. * @return: exit status of the program. */ int main(int argc, char* argv[]) { int c; const char* cfgfile = CONFIGFILE; const char* winopt = NULL; const char* log_ident_default; int cmdline_verbose = 0; int debug_mode = 0; int need_pidfile = 1; #ifdef UB_ON_WINDOWS int cmdline_cfg = 0; #endif log_init(NULL, 0, NULL); log_ident_default = strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0]; log_ident_set_default(log_ident_default); log_ident_set(log_ident_default); /* parse the options */ while( (c=getopt(argc, argv, "c:dhpvw:V")) != -1) { switch(c) { case 'c': cfgfile = optarg; #ifdef UB_ON_WINDOWS cmdline_cfg = 1; #endif break; case 'v': cmdline_verbose++; verbosity++; break; case 'p': need_pidfile = 0; break; case 'd': debug_mode++; break; case 'w': winopt = optarg; break; case 'V': print_build_options(); return 0; case '?': case 'h': default: usage(); return 1; } } argc -= optind; /* argv += optind; not using further arguments */ if(winopt) { #ifdef UB_ON_WINDOWS wsvc_command_option(winopt, cfgfile, cmdline_verbose, cmdline_cfg); #else fatal_exit("option not supported"); #endif } if(argc != 0) { usage(); return 1; } run_daemon(cfgfile, cmdline_verbose, debug_mode, need_pidfile); log_init(NULL, 0, NULL); /* close logfile */ #ifndef unbound_testbound if(log_get_lock()) { lock_basic_destroy((lock_basic_type*)log_get_lock()); } #endif return 0; } unbound-1.13.1/daemon/acl_list.h0000644000175000017500000001127014010434640016106 0ustar wouterwouter/* * daemon/acl_list.h - client access control storage for the server. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file keeps track of the list of clients that are allowed to * access the server. */ #ifndef DAEMON_ACL_LIST_H #define DAEMON_ACL_LIST_H #include "util/storage/dnstree.h" #include "services/view.h" struct config_file; struct regional; /** * Enumeration of access control options for an address range. * Allow or deny access. */ enum acl_access { /** disallow any access whatsoever, drop it */ acl_deny = 0, /** disallow access, send a polite 'REFUSED' reply */ acl_refuse, /** disallow any access to zones that aren't local, drop it */ acl_deny_non_local, /** disallow access to zones that aren't local, 'REFUSED' reply */ acl_refuse_non_local, /** allow full access for recursion (+RD) queries */ acl_allow, /** allow full access for all queries, recursion and cache snooping */ acl_allow_snoop, /** allow full access for recursion queries and set RD flag regardless of request */ acl_allow_setrd }; /** * Access control storage structure */ struct acl_list { /** regional for allocation */ struct regional* region; /** * Tree of the addresses that are allowed/blocked. * contents of type acl_addr. */ rbtree_type tree; }; /** * * An address span with access control information */ struct acl_addr { /** node in address tree */ struct addr_tree_node node; /** access control on this netblock */ enum acl_access control; /** tag bitlist */ uint8_t* taglist; /** length of the taglist (in bytes) */ size_t taglen; /** array per tagnumber of localzonetype(in one byte). NULL if none. */ uint8_t* tag_actions; /** size of the tag_actions_array */ size_t tag_actions_size; /** array per tagnumber, with per tag a list of rdata strings. * NULL if none. strings are like 'A 127.0.0.1' 'AAAA ::1' */ struct config_strlist** tag_datas; /** size of the tag_datas array */ size_t tag_datas_size; /* view element, NULL if none */ struct view* view; }; /** * Create acl structure * @return new structure or NULL on error. */ struct acl_list* acl_list_create(void); /** * Delete acl structure. * @param acl: to delete. */ void acl_list_delete(struct acl_list* acl); /** * Process access control config. * @param acl: where to store. * @param cfg: config options. * @param v: views structure * @return 0 on error. */ int acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg, struct views* v); /** * Lookup access control status for acl structure. * @param acl: structure for acl storage. * @return: what to do with message from this address. */ enum acl_access acl_get_control(struct acl_addr* acl); /** * Lookup address to see its acl structure * @param acl: structure for address storage. * @param addr: address to check * @param addrlen: length of addr. * @return: acl structure from this address. */ struct acl_addr* acl_addr_lookup(struct acl_list* acl, struct sockaddr_storage* addr, socklen_t addrlen); /** * Get memory used by acl structure. * @param acl: structure for address storage. * @return bytes in use. */ size_t acl_list_get_mem(struct acl_list* acl); #endif /* DAEMON_ACL_LIST_H */ unbound-1.13.1/daemon/cachedump.h0000644000175000017500000000671214010434640016252 0ustar wouterwouter/* * daemon/cachedump.h - dump the cache to text format. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to read and write the cache(s) * to text format. * * The format of the file is as follows: * [RRset cache] * [Message cache] * EOF -- fixed string "EOF" before end of the file. * * The RRset cache is: * START_RRSET_CACHE * [rrset]* * END_RRSET_CACHE * * rrset is: * ;rrset [nsec_apex] TTL rr_count rrsig_count trust security * resource records, one per line, in zonefile format * rrsig records, one per line, in zonefile format * If the text conversion fails, BADRR is printed on the line. * * The Message cache is: * START_MSG_CACHE * [msg]* * END_MSG_CACHE * * msg is: * msg name class type flags qdcount ttl security an ns ar * list of rrset references, one per line. If conversion fails, BADREF * reference is: * name class type flags * * Expired cache entries are not printed. */ #ifndef DAEMON_DUMPCACHE_H #define DAEMON_DUMPCACHE_H struct worker; #include "daemon/remote.h" /** * Dump cache(s) to text * @param ssl: to print to * @param worker: worker that is available (buffers, etc) and has * ptrs to the caches. * @return false on ssl print error. */ int dump_cache(RES* ssl, struct worker* worker); /** * Load cache(s) from text * @param ssl: to read from * @param worker: worker that is available (buffers, etc) and has * ptrs to the caches. * @return false on ssl error. */ int load_cache(RES* ssl, struct worker* worker); /** * Print the delegation used to lookup for this name. * @param ssl: to read from * @param worker: worker that is available (buffers, etc) and has * ptrs to the caches. * @param nm: name to lookup * @param nmlen: length of name. * @param nmlabs: labels in name. * @return false on ssl error. */ int print_deleg_lookup(RES* ssl, struct worker* worker, uint8_t* nm, size_t nmlen, int nmlabs); #endif /* DAEMON_DUMPCACHE_H */ unbound-1.13.1/daemon/stats.h0000644000175000017500000001077214010434640015460 0ustar wouterwouter/* * daemon/stats.h - collect runtime performance indicators. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file describes the data structure used to collect runtime performance * numbers. These 'statistics' may be of interest to the operator. */ #ifndef DAEMON_STATS_H #define DAEMON_STATS_H #include "util/timehist.h" struct worker; struct config_file; struct comm_point; struct comm_reply; struct edns_data; struct sldns_buffer; /* stats struct */ #include "libunbound/unbound.h" /** * Initialize server stats to 0. * @param stats: what to init (this is alloced by the caller). * @param cfg: with extended statistics option. */ void server_stats_init(struct ub_server_stats* stats, struct config_file* cfg); /** add query if it missed the cache */ void server_stats_querymiss(struct ub_server_stats* stats, struct worker* worker); /** add query if was cached and also resulted in a prefetch */ void server_stats_prefetch(struct ub_server_stats* stats, struct worker* worker); /** display the stats to the log */ void server_stats_log(struct ub_server_stats* stats, struct worker* worker, int threadnum); /** * Obtain the stats info for a given thread. Uses pipe to communicate. * @param worker: the worker that is executing (the first worker). * @param who: on who to get the statistics info. * @param s: the stats block to fill in. * @param reset: if stats can be reset. */ void server_stats_obtain(struct worker* worker, struct worker* who, struct ub_stats_info* s, int reset); /** * Compile stats into structure for this thread worker. * Also clears the statistics counters (if that is set by config file). * @param worker: the worker to compile stats for, also the executing worker. * @param s: stats block. * @param reset: if true, depending on config stats are reset. * if false, statistics are not reset. */ void server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset); /** * Send stats over comm tube in reply to query cmd * @param worker: this worker. * @param reset: if true, depending on config stats are reset. * if false, statistics are not reset. */ void server_stats_reply(struct worker* worker, int reset); /** * Addup stat blocks. * @param total: sum of the two entries. * @param a: to add to it. */ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a); /** * Add stats for this query * @param stats: the stats * @param c: commpoint with type and buffer. * @param qtype: query type * @param qclass: query class * @param edns: edns record * @param repinfo: reply info with remote address */ void server_stats_insquery(struct ub_server_stats* stats, struct comm_point* c, uint16_t qtype, uint16_t qclass, struct edns_data* edns, struct comm_reply* repinfo); /** * Add rcode for this query. * @param stats: the stats * @param buf: buffer with rcode. If buffer is length0: not counted. */ void server_stats_insrcode(struct ub_server_stats* stats, struct sldns_buffer* buf); #endif /* DAEMON_STATS_H */ unbound-1.13.1/daemon/acl_list.c0000644000175000017500000003075114010434640016106 0ustar wouterwouter/* * daemon/acl_list.h - client access control storage for the server. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file helps the server keep out queries from outside sources, that * should not be answered. */ #include "config.h" #include "daemon/acl_list.h" #include "util/regional.h" #include "util/log.h" #include "util/config_file.h" #include "util/net_help.h" #include "services/localzone.h" #include "sldns/str2wire.h" struct acl_list* acl_list_create(void) { struct acl_list* acl = (struct acl_list*)calloc(1, sizeof(struct acl_list)); if(!acl) return NULL; acl->region = regional_create(); if(!acl->region) { acl_list_delete(acl); return NULL; } return acl; } void acl_list_delete(struct acl_list* acl) { if(!acl) return; regional_destroy(acl->region); free(acl); } /** insert new address into acl_list structure */ static struct acl_addr* acl_list_insert(struct acl_list* acl, struct sockaddr_storage* addr, socklen_t addrlen, int net, enum acl_access control, int complain_duplicates) { struct acl_addr* node = regional_alloc_zero(acl->region, sizeof(struct acl_addr)); if(!node) return NULL; node->control = control; if(!addr_tree_insert(&acl->tree, &node->node, addr, addrlen, net)) { if(complain_duplicates) verbose(VERB_QUERY, "duplicate acl address ignored."); } return node; } /** apply acl_list string */ static int acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2, int complain_duplicates) { struct sockaddr_storage addr; int net; socklen_t addrlen; enum acl_access control; if(strcmp(s2, "allow") == 0) control = acl_allow; else if(strcmp(s2, "deny") == 0) control = acl_deny; else if(strcmp(s2, "refuse") == 0) control = acl_refuse; else if(strcmp(s2, "deny_non_local") == 0) control = acl_deny_non_local; else if(strcmp(s2, "refuse_non_local") == 0) control = acl_refuse_non_local; else if(strcmp(s2, "allow_snoop") == 0) control = acl_allow_snoop; else if(strcmp(s2, "allow_setrd") == 0) control = acl_allow_setrd; else { log_err("access control type %s unknown", str); return 0; } if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse access control: %s %s", str, s2); return 0; } if(!acl_list_insert(acl, &addr, addrlen, net, control, complain_duplicates)) { log_err("out of memory"); return 0; } return 1; } /** find or create node (NULL on parse or error) */ static struct acl_addr* acl_find_or_create(struct acl_list* acl, const char* str) { struct acl_addr* node; struct sockaddr_storage addr; int net; socklen_t addrlen; if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse netblock: %s", str); return NULL; } /* find or create node */ if(!(node=(struct acl_addr*)addr_tree_find(&acl->tree, &addr, addrlen, net))) { /* create node, type 'allow' since otherwise tags are * pointless, can override with specific access-control: cfg */ if(!(node=(struct acl_addr*)acl_list_insert(acl, &addr, addrlen, net, acl_allow, 1))) { log_err("out of memory"); return NULL; } } return node; } /** apply acl_tag string */ static int acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap, size_t bitmaplen) { struct acl_addr* node; if(!(node=acl_find_or_create(acl, str))) return 0; node->taglen = bitmaplen; node->taglist = regional_alloc_init(acl->region, bitmap, bitmaplen); if(!node->taglist) { log_err("out of memory"); return 0; } return 1; } /** apply acl_view string */ static int acl_list_view_cfg(struct acl_list* acl, const char* str, const char* str2, struct views* vs) { struct acl_addr* node; if(!(node=acl_find_or_create(acl, str))) return 0; node->view = views_find_view(vs, str2, 0 /* get read lock*/); if(!node->view) { log_err("no view with name: %s", str2); return 0; } lock_rw_unlock(&node->view->lock); return 1; } /** apply acl_tag_action string */ static int acl_list_tag_action_cfg(struct acl_list* acl, struct config_file* cfg, const char* str, const char* tag, const char* action) { struct acl_addr* node; int tagid; enum localzone_type t; if(!(node=acl_find_or_create(acl, str))) return 0; /* allocate array if not yet */ if(!node->tag_actions) { node->tag_actions = (uint8_t*)regional_alloc_zero(acl->region, sizeof(*node->tag_actions)*cfg->num_tags); if(!node->tag_actions) { log_err("out of memory"); return 0; } node->tag_actions_size = (size_t)cfg->num_tags; } /* parse tag */ if((tagid=find_tag_id(cfg, tag)) == -1) { log_err("cannot parse tag (define-tag it): %s %s", str, tag); return 0; } if((size_t)tagid >= node->tag_actions_size) { log_err("tagid too large for array %s %s", str, tag); return 0; } if(!local_zone_str2type(action, &t)) { log_err("cannot parse access control action type: %s %s %s", str, tag, action); return 0; } node->tag_actions[tagid] = (uint8_t)t; return 1; } /** check wire data parse */ static int check_data(const char* data, const struct config_strlist* head) { char buf[65536]; uint8_t rr[LDNS_RR_BUF_SIZE]; size_t len = sizeof(rr); int res; /* '.' is sufficient for validation, and it makes the call to * sldns_wirerr_get_type() simpler below. */ snprintf(buf, sizeof(buf), "%s %s", ".", data); res = sldns_str2wire_rr_buf(buf, rr, &len, NULL, 3600, NULL, 0, NULL, 0); /* Reject it if we would end up having CNAME and other data (including * another CNAME) for the same tag. */ if(res == 0 && head) { const char* err_data = NULL; if(sldns_wirerr_get_type(rr, len, 1) == LDNS_RR_TYPE_CNAME) { /* adding CNAME while other data already exists. */ err_data = data; } else { snprintf(buf, sizeof(buf), "%s %s", ".", head->str); len = sizeof(rr); res = sldns_str2wire_rr_buf(buf, rr, &len, NULL, 3600, NULL, 0, NULL, 0); if(res != 0) { /* This should be impossible here as head->str * has been validated, but we check it just in * case. */ return 0; } if(sldns_wirerr_get_type(rr, len, 1) == LDNS_RR_TYPE_CNAME) /* already have CNAME */ err_data = head->str; } if(err_data) { log_err("redirect tag data '%s' must not coexist with " "other data.", err_data); return 0; } } if(res == 0) return 1; log_err("rr data [char %d] parse error %s", (int)LDNS_WIREPARSE_OFFSET(res)-2, sldns_get_errorstr_parse(res)); return 0; } /** apply acl_tag_data string */ static int acl_list_tag_data_cfg(struct acl_list* acl, struct config_file* cfg, const char* str, const char* tag, const char* data) { struct acl_addr* node; int tagid; char* dupdata; if(!(node=acl_find_or_create(acl, str))) return 0; /* allocate array if not yet */ if(!node->tag_datas) { node->tag_datas = (struct config_strlist**)regional_alloc_zero( acl->region, sizeof(*node->tag_datas)*cfg->num_tags); if(!node->tag_datas) { log_err("out of memory"); return 0; } node->tag_datas_size = (size_t)cfg->num_tags; } /* parse tag */ if((tagid=find_tag_id(cfg, tag)) == -1) { log_err("cannot parse tag (define-tag it): %s %s", str, tag); return 0; } if((size_t)tagid >= node->tag_datas_size) { log_err("tagid too large for array %s %s", str, tag); return 0; } /* check data? */ if(!check_data(data, node->tag_datas[tagid])) { log_err("cannot parse access-control-tag data: %s %s '%s'", str, tag, data); return 0; } dupdata = regional_strdup(acl->region, data); if(!dupdata) { log_err("out of memory"); return 0; } if(!cfg_region_strlist_insert(acl->region, &(node->tag_datas[tagid]), dupdata)) { log_err("out of memory"); return 0; } return 1; } /** read acl_list config */ static int read_acl_list(struct acl_list* acl, struct config_file* cfg) { struct config_str2list* p; for(p = cfg->acls; p; p = p->next) { log_assert(p->str && p->str2); if(!acl_list_str_cfg(acl, p->str, p->str2, 1)) return 0; } return 1; } /** read acl tags config */ static int read_acl_tags(struct acl_list* acl, struct config_file* cfg) { struct config_strbytelist* np, *p = cfg->acl_tags; cfg->acl_tags = NULL; while(p) { log_assert(p->str && p->str2); if(!acl_list_tags_cfg(acl, p->str, p->str2, p->str2len)) { config_del_strbytelist(p); return 0; } /* free the items as we go to free up memory */ np = p->next; free(p->str); free(p->str2); free(p); p = np; } return 1; } /** read acl view config */ static int read_acl_view(struct acl_list* acl, struct config_file* cfg, struct views* v) { struct config_str2list* np, *p = cfg->acl_view; cfg->acl_view = NULL; while(p) { log_assert(p->str && p->str2); if(!acl_list_view_cfg(acl, p->str, p->str2, v)) { return 0; } /* free the items as we go to free up memory */ np = p->next; free(p->str); free(p->str2); free(p); p = np; } return 1; } /** read acl tag actions config */ static int read_acl_tag_actions(struct acl_list* acl, struct config_file* cfg) { struct config_str3list* p, *np; p = cfg->acl_tag_actions; cfg->acl_tag_actions = NULL; while(p) { log_assert(p->str && p->str2 && p->str3); if(!acl_list_tag_action_cfg(acl, cfg, p->str, p->str2, p->str3)) { config_deltrplstrlist(p); return 0; } /* free the items as we go to free up memory */ np = p->next; free(p->str); free(p->str2); free(p->str3); free(p); p = np; } return 1; } /** read acl tag datas config */ static int read_acl_tag_datas(struct acl_list* acl, struct config_file* cfg) { struct config_str3list* p, *np; p = cfg->acl_tag_datas; cfg->acl_tag_datas = NULL; while(p) { log_assert(p->str && p->str2 && p->str3); if(!acl_list_tag_data_cfg(acl, cfg, p->str, p->str2, p->str3)) { config_deltrplstrlist(p); return 0; } /* free the items as we go to free up memory */ np = p->next; free(p->str); free(p->str2); free(p->str3); free(p); p = np; } return 1; } int acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg, struct views* v) { regional_free_all(acl->region); addr_tree_init(&acl->tree); if(!read_acl_list(acl, cfg)) return 0; if(!read_acl_view(acl, cfg, v)) return 0; if(!read_acl_tags(acl, cfg)) return 0; if(!read_acl_tag_actions(acl, cfg)) return 0; if(!read_acl_tag_datas(acl, cfg)) return 0; /* insert defaults, with '0' to ignore them if they are duplicates */ if(!acl_list_str_cfg(acl, "0.0.0.0/0", "refuse", 0)) return 0; if(!acl_list_str_cfg(acl, "127.0.0.0/8", "allow", 0)) return 0; if(cfg->do_ip6) { if(!acl_list_str_cfg(acl, "::0/0", "refuse", 0)) return 0; if(!acl_list_str_cfg(acl, "::1", "allow", 0)) return 0; if(!acl_list_str_cfg(acl, "::ffff:127.0.0.1", "allow", 0)) return 0; } addr_tree_init_parents(&acl->tree); return 1; } enum acl_access acl_get_control(struct acl_addr* acl) { if(acl) return acl->control; return acl_deny; } struct acl_addr* acl_addr_lookup(struct acl_list* acl, struct sockaddr_storage* addr, socklen_t addrlen) { return (struct acl_addr*)addr_tree_lookup(&acl->tree, addr, addrlen); } size_t acl_list_get_mem(struct acl_list* acl) { if(!acl) return 0; return sizeof(*acl) + regional_get_mem(acl->region); } unbound-1.13.1/systemd.m40000644000175000017500000000206314010434640014632 0ustar wouterwouter# macros for configuring systemd # Copyright 2015, Sami Kerola, CloudFlare. # BSD licensed. AC_ARG_ENABLE([systemd], [AS_HELP_STRING([--enable-systemd], [compile with systemd support])], [], [enable_systemd=no]) have_systemd=no AS_IF([test "x$enable_systemd" != xno], [ ifdef([PKG_CHECK_MODULES], [ dnl systemd v209 or newer PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [have_systemd=yes], [have_systemd=no]) dnl old systemd library AS_IF([test "x$have_systemd" != "xyes"], [ PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon], [have_systemd_daemon=yes], [have_systemd_daemon=no]) AS_IF([test "x$have_systemd_daemon" = "xyes"], [have_systemd=yes]) ]) AS_CASE([$enable_systemd:$have_systemd], [yes:no], [AC_MSG_ERROR([systemd enabled but libsystemd not found])], [*:yes], [AC_DEFINE([HAVE_SYSTEMD], [1], [Define to 1 if systemd should be used]) LIBS="$LIBS $SYSTEMD_LIBS" ] ) ], [ AC_MSG_ERROR([systemd enabled but need pkg-config to configure for it]) ]) ]) AM_CONDITIONAL([USE_SYSTEMD], [test "x$have_systemd" = xyes]) unbound-1.13.1/README-Travis.md0000644000175000017500000003504514010434640015433 0ustar wouterwouter# Travis Testing Unbound 1.10 and above leverage Travis CI to increase coverage of compilers and platforms. Compilers include Clang and GCC; while platforms include Android, iOS, Linux, and OS X on AMD64, Aarch64, PowerPC and s390x hardware. Android is tested on armv7a, aarch64, x86 and x86_64. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. Mips and Mips64 are not tested because they are no longer supported under current NDKs. iOS is tested for iPhoneOS, WatchOS, AppleTVOS, iPhoneSimulator, AppleTVSimulator and WatchSimulator. The testing uses Xcode 10 on OS X 10.13. The Unbound Travis configuration file `.travis.yml` does not use top-level keys like `os:` and `compiler:` so there is no matrix expansion. Instead Unbound specifies the exact job to run under the `jobs:` and `include:` keys. ## Typical recipe A typical recipe tests Clang and GCC on various hardware. The hardware includes AMD64, Aarch64, PowerPC and s390x. PowerPC is a little-endian platform, and s390x is a big-endian platform. There are pairs of recipes that are similar to the following. ``` - os: linux name: GCC on Linux, Aarch64 compiler: gcc arch: arm64 dist: bionic - os: linux name: Clang on Linux, Aarch64 compiler: clang arch: arm64 dist: bionic ``` OS X provides a single recipe to test Clang. GCC is not tested because GCC is an alias for Clang. ## Sanitizer builds Two sanitizer builds are tested using Clang and GCC, for a total of four builds. The first sanitizer is Undefined Behavior sanitizer (UBsan), and the second is Address sanitizer (Asan). The sanitizers are only run on AMD64 hardware. Note the environment includes `TEST_UBSAN=yes` or `TEST_ASAN=yes` for the sanitizer builds. The recipes are similar to the following. ``` - os: linux name: UBsan, GCC on Linux, Amd64 compiler: gcc arch: amd64 dist: bionic env: TEST_UBSAN=yes - os: linux name: UBsan, Clang on Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: TEST_UBSAN=yes ``` When the Travis script encounters a sanitizer it uses different `CFLAGS` and configuration string. ``` if [ "$TEST_UBSAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover" ./configure make -j 2 make test elif [ "$TEST_ASAN" = "yes" ]; then export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address" ./configure make -j 2 make test ... ``` ## Android builds Travis tests Android builds for the armv7a, aarch64, x86 and x86_64 architectures. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the Android recipes. ### Android job The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below. ``` - os: linux name: Android armv7a, Linux, Amd64 compiler: clang arch: amd64 dist: bionic env: - TEST_ANDROID=yes - AUTOTOOLS_HOST=armv7a-linux-androideabi - OPENSSL_HOST=android-arm - ANDROID_CPU=armv7a - ANDROID_API=23 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU" - ANDROID_SDK_ROOT="$HOME/android-sdk" - ANDROID_NDK_ROOT="$HOME/android-ndk" ``` ### ANDROID_NDK_ROOT The second step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks miss this step, or use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`). If you are working from a developer machine you probably already have the necessary tools installed. You should ensure `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` are set properly. ### Tool installation The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/android/install_tools.sh`. The tools include curl, tar, zip, unzip and java. ``` before_script: - | if [ "$TEST_ANDROID" = "yes" ]; then ./contrib/android/install_tools.sh elif [ "$TEST_IOS" = "yes" ]; then ./contrib/ios/install_tools.sh fi ``` ### NDK installation The third step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory. If you are working from a developer machine you probably already have a NDK and SDK installed. ### Android environment The fourth step sets the Android cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`. `contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` which tools and libraries to select. The `contrib/android/setenv_android.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64. ``` armv8a|aarch64|arm64|arm64-v8a) CC="aarch64-linux-android$ANDROID_API-clang" CXX="aarch64-linux-android$ANDROID_API-clang++" LD="aarch64-linux-android-ld" AS="aarch64-linux-android-as" AR="aarch64-linux-android-ar" RANLIB="aarch64-linux-android-ranlib" STRIP="aarch64-linux-android-strip" CFLAGS="-funwind-tables -fexceptions" CXXFLAGS="-funwind-tables -fexceptions -frtti" ``` ### OpenSSL and Expat The fifth step builds OpenSSL and Expat. OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_PREFIX"` so the headers are placed in `$ANDROID_PREFIX/include` directory, and the libraries are placed in the `$ANDROID_PREFIX/lib` directory. `ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/android23-armv7a/lib/pkgconfig` and `$HOME/android23-aarch64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound, with NDK-r19 and above, and a properly set environment. OpenSSL is configured with `no-engine`. If you want to include OpenSSL engines then edit `contrib/android/install_openssl.sh` and remove the config option. ### Android build Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows. ``` elif [ "$TEST_ANDROID" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig" ./contrib/android/install_ndk.sh source ./contrib/android/setenv_android.sh ./contrib/android/install_openssl.sh ./contrib/android/install_expat.sh ./configure \ --build="$AUTOTOOLS_BUILD" \ --host="$AUTOTOOLS_HOST" \ --prefix="$ANDROID_PREFIX" \ --with-ssl="$ANDROID_PREFIX" \ --with-libexpat="$ANDROID_PREFIX" \ --disable-gost; make -j 2 make install ``` Travis only smoke tests an Android build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them. ### Android flags `contrib/android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. They are taken from `ndk-build`, so we consider them the official flag set. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. `CXXFLAGS` includes `-fexceptions` and `-frtti` because exceptions and runtime type info are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS-SUPPORT.html` in the NDK docs. To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-samples](https://github.com/android/ndk-samples/tree/master/hello-jni) and build the `hello-jni` project. Use the `V=1` flag to see the full compiler output from `ndk-build`. ## iOS builds Travis tests iOS builds for the armv7a, armv7s and aarch64 architectures for iPhoneOS, AppleTVOS and WatchOS. iPhoneOS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). Travis also tests compiles against the simulators. The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes. ### iOS job The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below. ``` - os: osx osx_image: xcode10 name: Apple iPhone on iOS, armv7 compiler: clang env: - TEST_IOS=yes - AUTOTOOLS_HOST=armv7-apple-ios - OPENSSL_HOST=ios-cross - IOS_SDK=iPhoneOS - IOS_CPU=armv7s - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU" ``` ### Tool installation The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/ios/install_tools.sh`. The tools include autotools, curl and perl. The installation happens at the `before_script:` stage of Travis. ``` before_script: - | if [ "$TEST_ANDROID" = "yes" ]; then ./contrib/android/install_tools.sh elif [ "$TEST_IOS" = "yes" ]; then ./contrib/ios/install_tools.sh fi ``` ### iOS environment The third step sets the iOS cross-compile environment using the script `contrib/ios/setenv_ios.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so iOS headers and libraries are found; and adds the path to the toolchain to `PATH`. `contrib/ios/setenv_ios.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `IOS_SDK` and `IOS_CPU` tell `contrib/ios/setenv_ios.sh` which tools and libraries to select. The `contrib/ios/setenv_ios.sh` script specifies the tools to use during the cross-compile. For Apple SDKs, the tool names are the same as a desktop. There are no special prefixes for the mobile tools. ``` CPP=cpp CC=clang CXX=clang++ LD=ld AS=as AR=ar RANLIB=ranlib STRIP=strip ``` If you are working from a developer machine you probably already have the necessary tools installed. ### OpenSSL and Expat The fourth step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory. `IOS_PREFIX` is the value `$HOME/$IOS_SDK-$IOS_CPU`. The scheme handles both iOS SDKs and cpu architectures so the pair recieves a unique installation directory. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, `$HOME/iPhoneSimulator-i386`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is an important variable. It is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`. OpenSSL also uses a custom configuration file called `15-ios.conf`. It is a copy of the OpenSSL's project file and located at `contrib/ios/15-ios.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The changes mean Unbound's `15-ios.conf` will only work with Unbound and a properly set environment. OpenSSL is configured with `no-engine`. Engines require dynamic loading so engines are disabled permanently in `15-ios.conf`. ### iOS build Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The full recipe looks as follows. ``` elif [ "$TEST_IOS" = "yes" ]; then export AUTOTOOLS_BUILD="$(./config.guess)" export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" source ./contrib/ios/setenv_ios.sh ./contrib/ios/install_openssl.sh ./contrib/ios/install_expat.sh ./configure \ --build="$AUTOTOOLS_BUILD" \ --host="$AUTOTOOLS_HOST" \ --prefix="$IOS_PREFIX" \ --with-ssl="$IOS_PREFIX" \ --with-libexpat="$IOS_PREFIX" \ --disable-gost; make -j 2 make install ``` Travis only smoke tests an iOS build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an simulator, push the tests to the device and run them. ### iOS flags `contrib/ios/setenv_ios.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. They are taken from Xcode, so we consider them the official flag set. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags. unbound-1.13.1/contrib/0000755000175000017500000000000014010434640014337 5ustar wouterwouterunbound-1.13.1/contrib/unbound.plist0000644000175000017500000000163614010434640017074 0ustar wouterwouter Label unbound ProgramArguments unbound UserName unbound RootDirectory /usr/local/etc/unbound WorkingDirectory /usr/local/etc/unbound KeepAlive RunAtLoad unbound-1.13.1/contrib/android/0000755000175000017500000000000014010434640015757 5ustar wouterwouterunbound-1.13.1/contrib/android/setenv_android.sh0000755000175000017500000001476614010434640021340 0ustar wouterwouter#!/usr/bin/env bash # ==================================================================== # Sets the cross compile environment for Android # # Based upon OpenSSL's setenv-android.sh by TH, JW, and SM. # Heavily modified by JWW for Crypto++. # Updated by Skycoder42 for current recommendations for Android. # Modified by JWW for Unbound. # ==================================================================== ######################################### ##### Some validation ##### ######################################### if [ -z "$ANDROID_API" ]; then echo "ANDROID_API is not set. Please set it" [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi if [ -z "$ANDROID_CPU" ]; then echo "ANDROID_CPU is not set. Please set it" [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi if [ ! -d "$ANDROID_NDK_ROOT" ]; then echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it." echo "NDK root is $ANDROID_NDK_ROOT" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # cryptest-android.sh may run this script without sourcing. if [ "$0" = "${BASH_SOURCE[0]}" ]; then echo "setenv-android.sh is usually sourced, but not this time." fi ##################################################################### # Need to set THIS_HOST to darwin-x86_64, linux-x86_64, # windows, or windows-x86_64 if [[ "$(uname -s | grep -i -c darwin)" -ne 0 ]]; then THIS_HOST=darwin-x86_64 elif [[ "$(uname -s | grep -i -c linux)" -ne 0 ]]; then THIS_HOST=linux-x86_64 else echo "ERROR: Unknown host" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ANDROID_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/bin" ANDROID_SYSROOT="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/sysroot" # Error checking if [ ! -d "$ANDROID_TOOLCHAIN" ]; then echo "ERROR: ANDROID_TOOLCHAIN is not a valid path. Please set it." echo "Path is $ANDROID_TOOLCHAIN" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -d "$ANDROID_SYSROOT" ]; then echo "ERROR: ANDROID_SYSROOT is not a valid path. Please set it." echo "Path is $ANDROID_SYSROOT" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### THE_ARCH=$(tr '[:upper:]' '[:lower:]' <<< "$ANDROID_CPU") # https://developer.android.com/ndk/guides/abis.html case "$THE_ARCH" in armv7*|armeabi*) CC="armv7a-linux-androideabi$ANDROID_API-clang" CXX="armv7a-linux-androideabi$ANDROID_API-clang++" LD="arm-linux-androideabi-ld" AS="arm-linux-androideabi-as" AR="arm-linux-androideabi-ar" RANLIB="arm-linux-androideabi-ranlib" STRIP="arm-linux-androideabi-strip" CFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions" CXXFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions -frtti" ;; armv8*|aarch64|arm64*) CC="aarch64-linux-android$ANDROID_API-clang" CXX="aarch64-linux-android$ANDROID_API-clang++" LD="aarch64-linux-android-ld" AS="aarch64-linux-android-as" AR="aarch64-linux-android-ar" RANLIB="aarch64-linux-android-ranlib" STRIP="aarch64-linux-android-strip" CFLAGS="-funwind-tables -fexceptions" CXXFLAGS="-funwind-tables -fexceptions -frtti" ;; x86) CC="i686-linux-android$ANDROID_API-clang" CXX="i686-linux-android$ANDROID_API-clang++" LD="i686-linux-android-ld" AS="i686-linux-android-as" AR="i686-linux-android-ar" RANLIB="i686-linux-android-ranlib" STRIP="i686-linux-android-strip" CFLAGS="-mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions" CXXFLAGS="-mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions -frtti" ;; x86_64|x64) CC="x86_64-linux-android$ANDROID_API-clang" CXX="x86_64-linux-android$ANDROID_API-clang++" LD="x86_64-linux-android-ld" AS="x86_64-linux-android-as" AR="x86_64-linux-android-ar" RANLIB="x86_64-linux-android-ranlib" STRIP="x86_64-linux-android-strip" CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions" CXXFLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions -frtti" ;; *) echo "ERROR: Unknown architecture $ANDROID_CPU" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 ;; esac ##################################################################### # Error checking if [ ! -e "$ANDROID_TOOLCHAIN/$CC" ]; then echo "ERROR: Failed to find Android clang. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$ANDROID_TOOLCHAIN/$CXX" ]; then echo "ERROR: Failed to find Android clang++. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$ANDROID_TOOLCHAIN/$RANLIB" ]; then echo "ERROR: Failed to find Android ranlib. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$ANDROID_TOOLCHAIN/$AR" ]; then echo "ERROR: Failed to find Android ar. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$ANDROID_TOOLCHAIN/$AS" ]; then echo "ERROR: Failed to find Android as. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$ANDROID_TOOLCHAIN/$LD" ]; then echo "ERROR: Failed to find Android ld. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### LENGTH=${#ANDROID_TOOLCHAIN} SUBSTR=${PATH:0:$LENGTH} if [ "$SUBSTR" != "$ANDROID_TOOLCHAIN" ]; then export PATH="$ANDROID_TOOLCHAIN:$PATH" fi ##################################################################### export CPP CC CXX LD AS AR RANLIB STRIP export ANDROID_SYSROOT="$AOSP_SYSROOT" export CPPFLAGS="-D__ANDROID_API__=$ANDROID_API" export CFLAGS="$CFLAGS --sysroot=$AOSP_SYSROOT" export CXXFLAGS="$CXXFLAGS -stdlib=libc++ --sysroot=$AOSP_SYSROOT" ##################################################################### echo "ANDROID_TOOLCHAIN: $ANDROID_TOOLCHAIN" echo "CPP: $(command -v "$CPP")" echo "CC: $(command -v "$CC")" echo "CXX: $(command -v "$CXX")" echo "LD: $(command -v "$LD")" echo "AS: $(command -v "$AS")" echo "AR: $(command -v "$AR")" echo "ANDROID_SYSROOT: $ANDROID_SYSROOT" echo "CPPFLAGS: $CPPFLAGS" echo "CFLAGS: $CFLAGS" echo "CXXFLAGS: $CXXFLAGS" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 0 || return 0 unbound-1.13.1/contrib/android/install_tools.sh0000755000175000017500000000042514010434640021205 0ustar wouterwouter#!/usr/bin/env bash # This step should install tools needed for all packages - OpenSSL, Expat and Unbound echo "Updating tools" sudo apt-get -qq update sudo apt-get -qq install --no-install-recommends curl tar zip unzip perl openjdk-8-jdk autoconf automake libtool pkg-config unbound-1.13.1/contrib/android/15-android.conf0000644000175000017500000000242014010434640020467 0ustar wouterwouter#### Android... # # Heavily hacked 15-android.conf based on OpenSSL's config file of the same name. # This 15-android.conf avoids compiler errors using NDK-r20. This 15-android.conf # requires an environment set (sourced) using setenv-android.sh. my %targets = ( "android" => { inherit_from => [ "linux-generic32" ], template => 1, bin_cflags => add("-fPIE"), bin_lflags => add("-pie"), enable => [ ], }, "android-arm" => { inherit_from => [ "android", asm("armv4_asm") ], bn_ops => [ "BN_LLONG", "RC4_CHAR" ], }, "android-arm64" => { inherit_from => [ "android", asm("aarch64_asm") ], bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_CHAR" ], perlasm_scheme => "linux64", }, "android-x86" => { inherit_from => [ "android", asm("x86_asm") ], cflags => add(picker(release => "-fomit-frame-pointer")), bn_ops => [ "BN_LLONG", "RC4_INT" ], perlasm_scheme => "android", }, "android-x86_64" => { inherit_from => [ "android", asm("x86_64_asm") ], bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_INT" ], perlasm_scheme => "elf", }, ); unbound-1.13.1/contrib/android/install_ndk.sh0000755000175000017500000000273014010434640020622 0ustar wouterwouter#!/usr/bin/env bash if [ -z "$ANDROID_SDK_ROOT" ]; then echo "ERROR: ANDROID_SDK_ROOT is not a valid path. Please set it." echo "SDK root is $ANDROID_SDK_ROOT" exit 1 fi if [ -z "$ANDROID_NDK_ROOT" ]; then echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it." echo "NDK root is $ANDROID_NDK_ROOT" exit 1 fi echo "Using ANDROID_SDK_ROOT: $ANDROID_SDK_ROOT" echo "Using ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT" echo "Downloading SDK" if ! curl -L -k -s -o "$HOME/android-sdk.zip" https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip; then echo "Failed to download SDK" exit 1 fi echo "Downloading NDK" if ! curl -L -k -s -o "$HOME/android-ndk.zip" https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip; then echo "Failed to download NDK" exit 1 fi echo "Unpacking SDK to $ANDROID_SDK_ROOT" if ! unzip -qq "$HOME/android-sdk.zip" -d "$ANDROID_SDK_ROOT"; then echo "Failed to unpack SDK" exit 1 fi echo "Unpacking NDK to $ANDROID_NDK_ROOT" if ! unzip -qq "$HOME/android-ndk.zip" -d "$HOME"; then echo "Failed to unpack NDK" exit 1 fi if ! mv "$HOME/android-ndk-r20b" "$ANDROID_NDK_ROOT"; then echo "Failed to move $HOME/android-ndk-r20b to $ANDROID_NDK_ROOT" exit 1 fi rm -f "$HOME/android-sdk.zip" rm -f "$HOME/android-ndk.zip" # https://stackoverflow.com/a/47028911/608639 touch "$ANDROID_SDK_ROOT/repositories.cfg" echo "Finished installing SDK and NDK" exit 0 unbound-1.13.1/contrib/android/install_expat.sh0000755000175000017500000000236214010434640021170 0ustar wouterwouter#!/usr/bin/env bash echo "Downloading Expat" if ! curl -L -k -s -o expat-2.2.9.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz; then echo "Failed to download Expat" exit 1 fi echo "Unpacking Expat" rm -rf ./expat-2.2.9 if ! tar -xf expat-2.2.9.tar.gz; then echo "Failed to unpack Expat" exit 1 fi cd expat-2.2.9 || exit 1 echo "Configuring Expat" if ! ./configure --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" --prefix="$ANDROID_PREFIX"; then echo "Error: Failed to configure Expat" exit 1 fi # Cleanup warnings, https://github.com/libexpat/libexpat/issues/383 echo "Fixing Makefiles" (IFS="" find "$PWD" -name 'Makefile' -print | while read -r file do cp -p "$file" "$file.fixed" sed 's|-Wduplicated-cond ||g; s|-Wduplicated-branches ||g; s|-Wlogical-op ||g' "$file" > "$file.fixed" mv "$file.fixed" "$file" cp -p "$file" "$file.fixed" sed 's|-Wrestrict ||g; s|-Wjump-misses-init ||g; s|-Wmisleading-indentation ||g' "$file" > "$file.fixed" mv "$file.fixed" "$file" done) echo "Building Expat" if ! make; then echo "Failed to build Expat" exit 1 fi echo "Installing Expat" if ! make install; then echo "Failed to install Expat" exit 1 fi exit 0 unbound-1.13.1/contrib/android/install_openssl.sh0000755000175000017500000000164214010434640021532 0ustar wouterwouter#!/usr/bin/env bash echo "Downloading OpenSSL" if ! curl -L -k -s -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz; then echo "Failed to download OpenSSL" exit 1 fi echo "Unpacking OpenSSL" rm -rf ./openssl-1.1.1d if ! tar -xf openssl-1.1.1d.tar.gz; then echo "Failed to unpack OpenSSL" exit 1 fi cd openssl-1.1.1d || exit 1 if ! cp ../contrib/android/15-android.conf Configurations/; then echo "Failed to copy OpenSSL Android config" exit 1 fi echo "Configuring OpenSSL" if ! ./Configure "$OPENSSL_HOST" no-comp no-asm no-hw no-engine shared \ --prefix="$ANDROID_PREFIX" --openssldir="$ANDROID_PREFIX"; then echo "Failed to configure OpenSSL" exit 1 fi echo "Building OpenSSL" if ! make; then echo "Failed to build OpenSSL" exit 1 fi echo "Installing OpenSSL" if ! make install_sw; then echo "Failed to install OpenSSL" exit 1 fi exit 0 unbound-1.13.1/contrib/unbound.init_fedora0000644000175000017500000000542714010434640020226 0ustar wouterwouter#!/bin/sh # # unbound This shell script takes care of starting and stopping # unbound (DNS server). # # chkconfig: - 14 86 # description: unbound is a Domain Name Server (DNS) \ # that is used to resolve host names to IP addresses. ### BEGIN INIT INFO # Provides: unbound # Required-Start: $network $local_fs # Required-Stop: $network $local_fs # Should-Start: $syslog # Should-Stop: $syslog # Short-Description: unbound recursive Domain Name Server. # Description: unbound is a Domain Name Server (DNS) # that is used to resolve host names to IP addresses. ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions exec="/usr/sbin/unbound" config="/var/lib/unbound/unbound.conf" rootdir="/var/lib/unbound" pidfile="/var/run/unbound/unbound.pid" [ -e /etc/sysconfig/unbound ] && . /etc/sysconfig/unbound lockfile=/var/lock/subsys/unbound start() { [ -x $exec ] || exit 5 [ -f $config ] || exit 6 echo -n $"Starting unbound: " if [ ! -e ${rootdir}/etc/resolv.conf ] || /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then cp -fp /etc/resolv.conf ${rootdir}/etc/resolv.conf fi; if [ ! -e ${rootdir}/etc/localtime ] || /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then cp -fp /etc/localtime ${rootdir}/etc/localtime fi; mount --bind -n /dev/log ${rootdir}/dev/log >/dev/null 2>&1; mount --bind -n /dev/urandom ${rootdir}/dev/urandom >/dev/null 2>&1; mount --bind -n /var/run/unbound ${rootdir}/var/run/unbound >/dev/null 2>&1; # if not running, start it up here daemon $exec retval=$? [ $retval -eq 0 ] && touch $lockfile echo } stop() { echo -n $"Stopping unbound: " # stop it here, often "killproc unbound" killproc -p $pidfile unbound retval=$? [ $retval -eq 0 ] && rm -f $lockfile for mountfile in /dev/log /dev/urandom /etc/localtime /etc/resolv.conf /var/run/unbound do if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}''${mountfile}'' /proc/mounts; then umount ${rootdir}$mountfile >/dev/null 2>&1 fi; done echo } restart() { stop start } reload() { kill -HUP `cat $pidfile` } force_reload() { restart } rh_status() { # run checks to determine if the service is running or use generic status status -p $pidfile unbound } rh_status_q() { rh_status -p $pidfile >/dev/null 2>&1 } case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 restart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 esac exit $? unbound-1.13.1/contrib/parseunbound.pl0000644000175000017500000001312514010434640017403 0ustar wouterwouter#!/usr/local/bin/perl -w # # Script to parse the output from the unbound namedaemon. # Unbound supports a threading model, and outputs a multiline log-blob for # every thread. # # This script should parse all threads of the once, and store it # in a local cached file for speedy results when queried lots. # use strict; use POSIX qw(SEEK_END); use Storable; use FileHandle; use Carp qw(croak carp); use constant UNBOUND_CACHE => "/var/tmp/unbound-cache.stor"; my $run_from_cron = @ARGV && $ARGV[0] eq "--cron" && shift; my $DEBUG = -t STDERR; # NB. VERY IMPORTANTES: set this when running this script. my $numthreads = 4; ### if cache exists, read it in. and is newer than 3 minutes if ( -r UNBOUND_CACHE ) { my $result = retrieve(UNBOUND_CACHE); if (-M _ < 3/24/60 && !$run_from_cron ) { print STDERR "Cached results:\n" if $DEBUG; print join("\n", @$result), "\n"; exit; } } my $logfile = shift or die "Usage: parseunbound.pl --cron unboundlogfile"; my $in = new FileHandle $logfile or die "Cannot open $logfile: $!\n"; # there is a special key 'thread' that indicates the thread. its not used, but returned anyway. my @records = ('thread', 'queries', 'cachehits', 'recursions', 'recursionavg', 'outstandingmax', 'outstandingavg', 'outstandingexc', 'median25', 'median50', 'median75', 'us_0', 'us_1', 'us_2', 'us_4', 'us_8', 'us_16', 'us_32', 'us_64', 'us_128', 'us_256', 'us_512', 'us_1024', 'us_2048', 'us_4096', 'us_8192', 'us_16384', 'us_32768', 'us_65536', 'us_131072', 'us_262144', 'us_524288', 's_1', 's_2', 's_4', 's_8', 's_16', 's_32', 's_64', 's_128', 's_256', 's_512'); # Stats hash containing one or more keys. for every thread, 1 key. my %allstats = (); # key="$threadid", stats={key => value} my %startstats = (); # when we got a queries entry for this thread my %donestats = (); # same, but only when we got a histogram entry for it # stats hash contains name/value pairs of the actual numbers for that thread. my $offset = 0; my $inthread=0; my $inpid; # We should continue looping untill we meet these conditions: # a) more total queries than the previous run (which defaults to 0) AND # b) parsed all $numthreads threads in the log. my $numqueries = $previousresult ? $previousresult->[1] : 0; # Main loop while ( scalar keys %startstats < $numthreads || scalar keys %donestats < $numthreads) { $offset += 10000; if ( $offset > -s $logfile or $offset > 10_000_000 ) { die "Cannot find stats in $logfile\n"; } $in->seek(-$offset, SEEK_END) or croak "cannot seek $logfile: $!\n"; for my $line ( <$in> ) { chomp($line); #[1208777234] unbound[6705:0] if ($line =~ m/^\[\d+\] unbound\[\d+:(\d+)\]/) { $inthread = $1; if ($inthread + 1 > $numthreads) { die "Hey. lazy. change \$numthreads in this script to ($inthread)\n"; } } # this line doesn't contain a pid:thread. skip. else { next; } if ( $line =~ m/info: server stats for thread \d+: (\d+) queries, (\d+) answers from cache, (\d+) recursions/ ) { $startstats{$inthread} = 1; $allstats{$inthread}->{thread} = $inthread; $allstats{$inthread}->{queries} = $1; $allstats{$inthread}->{cachehits} = $2; $allstats{$inthread}->{recursions} = $3; } elsif ( $line =~ m/info: server stats for thread (\d+): requestlist max (\d+) avg ([0-9\.]+) exceeded (\d+)/ ) { $allstats{$inthread}->{outstandingmax} = $2; $allstats{$inthread}->{outstandingavg} = int($3); # This is a float; rrdtool only handles ints. $allstats{$inthread}->{outstandingexc} = $4; } elsif ( $line =~ m/info: average recursion processing time ([0-9\.]+) sec/ ) { $allstats{$inthread}->{recursionavg} = int($1 * 1000); # change sec to millisec. } elsif ( $line =~ m/info: histogram of recursion processing times/ ) { next; } elsif ( $line =~ m/info: \[25%\]=([0-9\.]+) median\[50%\]=([0-9\.]+) \[75%\]=([0-9\.]+)/ ) { $allstats{$inthread}->{median25} = int($1 * 1000000); # change seconds to usec $allstats{$inthread}->{median50} = int($2 * 1000000); $allstats{$inthread}->{median75} = int($3 * 1000000); } elsif ( $line =~ m/info: lower\(secs\) upper\(secs\) recursions/ ) { # since after this line we're unsure if we get these numbers # at all, we should consider this marker as the end of the # block. Chances that we're parsing a file halfway written # at this stage are small. Bold statement. $donestats{$inthread} = 1; next; } elsif ( $line =~ m/info:\s+(\d+)\.(\d+)\s+(\d+)\.(\d+)\s+(\d+)/ ) { my ($froms, $fromus, $toms, $tous, $counter) = ($1, $2, $3, $4, $5); my $prefix = ''; if ($froms > 0) { $allstats{$inthread}->{'s_' . int($froms)} = $counter; } else { $allstats{$inthread}->{'us_' . int($fromus)} = $counter; } } } } my @result; # loop on the records we want to store for my $key ( @records ) { my $sum = 0; # these are the different threads parsed foreach my $thread ( 0 .. $numthreads - 1 ) { $sum += ($allstats{$thread}->{$key} || 0); } print STDERR "$key = " . $sum . "\n" if $DEBUG; push @result, $sum; } print join("\n", @result), "\n"; store \@result, UNBOUND_CACHE; if ($DEBUG) { print STDERR "Threads: " . (scalar keys %allstats) . "\n"; } unbound-1.13.1/contrib/libunbound.so.conf0000644000175000017500000000404214010434640017767 0ustar wouterwouter# See ltrace.conf(5) for description of syntax of this file. typedef ub_type = enum(TYPE_A=1,TYPE_NS=2,TYPE_SOA=6,TYPE_MX=15,TYPE_TXT=16,TYPE_AAAA=28,TYPE_DS=43,TYPE_DNSKEY=48,TYPE_TLSA=52,TYPE_ANY=255); typedef ub_class = enum(CLASS_IN=1,CLASS_CH=3,CLASS_NONE=254,CLASS_ANY=255); typedef ub_rcode = enum(RCODE_NOERROR,RCODE_FORMERR,RCODE_SERVFAIL,RCODE_NXDOMAIN,RCODE_NOTIMPL,RCODE_REFUSED,RCODE_YXDOMAIN,RCODE_YXRRSET,RCODE_NXRRSET,RCODE_NOTAUTH,RCODE_NOTZONE); typedef ub_havedata = enum(no_data, have_data); typedef ub_nxdomain = enum(name_exists, nxdomain); typedef ub_secure = enum(not_secure, secure); typedef ub_bogus = enum(not_bogus, bogus); typedef ub_result = struct(string, ub_type, ub_class, array(void*,zero)*, array(int,zero)*, string, ub_rcode, void*, int, ub_havedata, ub_nxdomain, ub_secure, ub_bogus, string, int); typedef ub_ctx = void; ub_ctx* ub_ctx_create(void); void ub_ctx_delete(ub_ctx*); int ub_ctx_set_option(ub_ctx*, string, string); int ub_ctx_get_option(ub_ctx*, string, +string*); int ub_ctx_config(ub_ctx*, string); int ub_ctx_set_fwd(ub_ctx*, string); int ub_ctx_set_tls(ub_ctx*, bool(int)); int ub_ctx_set_stub(ub_ctx*, string, string, bool(int)); int ub_ctx_resolvconf(ub_ctx*, string); int ub_ctx_hosts(ub_ctx*, string); int ub_ctx_add_ta(ub_ctx*, string); int ub_ctx_add_ta_file(ub_ctx*, string); int ub_ctx_add_ta_autr(ub_ctx*, string); int ub_ctx_trustedkeys(ub_ctx*, string); int ub_ctx_debugout(ub_ctx*, void*); int ub_ctx_debuglevel(ub_ctx*, int); int ub_ctx_async(ub_ctx*, bool(int)); int ub_poll(ub_ctx*); int ub_wait(ub_ctx*); int ub_fd(ub_ctx*); int ub_process(ub_ctx*); int ub_resolve(ub_ctx*, string, ub_type, ub_class, +ub_result**); int ub_resolve_async(ub_ctx*, string, ub_type, ub_class, void*, void*, +int*); int ub_cancel(ub_ctx*, int); void ub_resolve_free(ub_result*); string ub_strerror(int); int ub_ctx_print_local_zones(ub_ctx*); int ub_ctx_zone_add(ub_ctx*, string, string); int ub_ctx_zone_remove(ub_ctx*, string); int ub_ctx_data_add(ub_ctx*, string); int ub_ctx_data_remove(ub_ctx*, string); string ub_version(void); unbound-1.13.1/contrib/unbound.init0000644000175000017500000000671414010434640016706 0ustar wouterwouter#!/bin/sh # # unbound This shell script takes care of starting and stopping # unbound (DNS server). # # chkconfig: - 14 86 # description: unbound is a Domain Name Server (DNS) \ # that is used to resolve host names to IP addresses. ### BEGIN INIT INFO # Provides: $named unbound # Required-Start: $network $local_fs # Required-Stop: $network $local_fs # Should-Start: $syslog # Should-Stop: $syslog # Short-Description: unbound recursive Domain Name Server. # Description: unbound is a Domain Name Server (DNS) # that is used to resolve host names to IP addresses. ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions exec="/usr/sbin/unbound" prog="unbound" config="/var/unbound/unbound.conf" pidfile="/var/unbound/unbound.pid" rootdir="/var/unbound" [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog lockfile=/var/lock/subsys/$prog start() { [ -x $exec ] || exit 5 [ -f $config ] || exit 6 echo -n $"Starting $prog: " # setup root jail if [ -s /etc/localtime ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; if [ ! -e ${rootdir}/etc/localtime ] || ! /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then cp -fp /etc/localtime ${rootdir}/etc/localtime fi; fi; if [ -s /etc/resolv.conf ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; if [ ! -e ${rootdir}/etc/resolv.conf ] || ! /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then cp -fp /etc/resolv.conf ${rootdir}/etc/resolv.conf fi; fi; if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/log' /proc/mounts; then [ -d ${rootdir}/dev ] || mkdir -p ${rootdir}/dev ; [ -e ${rootdir}/dev/log ] || touch ${rootdir}/dev/log mount --bind -n /dev/log ${rootdir}/dev/log >/dev/null 2>&1; fi; if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/urandom' /proc/mounts; then [ -d ${rootdir}/dev ] || mkdir -p ${rootdir}/dev ; [ -e ${rootdir}/dev/urandom ] || touch ${rootdir}/dev/urandom mount --bind -n /dev/urandom ${rootdir}/dev/urandom >/dev/null 2>&1; fi; # if not running, start it up here daemon $exec retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " # stop it here, often "killproc $prog" killproc -p $pidfile $prog retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/log' /proc/mounts; then umount ${rootdir}/dev/log >/dev/null 2>&1 fi; if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/urandom' /proc/mounts; then umount ${rootdir}/dev/urandom >/dev/null 2>&1 fi; return $retval } restart() { stop start } reload() { kill -HUP `cat $pidfile` } force_reload() { restart } rh_status() { # run checks to determine if the service is running or use generic status status -p $pidfile $prog } rh_status_q() { rh_status -p $pidfile >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 restart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 esac exit $? unbound-1.13.1/contrib/create_unbound_ad_servers.sh0000644000175000017500000000202014010434640022077 0ustar wouterwouter#!/bin/sh # # Convert the Yoyo.org anti-ad server listing # into an unbound dns spoof redirection list. # Modified by Y.Voinov (c) 2014 # Note: Wget required! # Variables dst_dir="/etc/opt/csw/unbound" work_dir="/tmp" list_addr="https://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml&showintro=1&startdate%5Bday%5D=&startdate%5Bmonth%5D=&startdate%5Byear%5D=" # OS commands CAT=`which cat` ECHO=`which echo` WGET=`which wget` TR=`which tr` # Check Wget installed if [ ! -f $WGET ]; then echo "Wget not found. Exiting..." exit 1 fi # remove special characters with tr to protect unbound.conf $WGET -O $work_dir/yoyo_ad_servers "$list_addr" && \ $CAT $work_dir/yoyo_ad_servers | \ $TR -d '";$\\' | \ while read line ; \ do \ $ECHO "local-zone: \"$line\" redirect" ;\ $ECHO "local-data: \"$line A 127.0.0.1\"" ;\ done > \ $dst_dir/unbound_ad_servers echo "Done." # then add an include line to your unbound.conf pointing to the full path of # the unbound_ad_servers file: # # include: $dst_dir/unbound_ad_servers # unbound-1.13.1/contrib/unbound_munin_0000755000175000017500000004310614010434640017310 0ustar wouterwouter#!/bin/sh # # plugin for munin to monitor usage of unbound servers. # To install copy this to /usr/local/share/munin/plugins/unbound_munin_ # and use munin-node-configure (--suggest, --shell). # # (C) 2008 W.C.A. Wijngaards. BSD Licensed. # # To install; enable statistics and unbound-control in unbound.conf # server: extended-statistics: yes # statistics-cumulative: no # statistics-interval: 0 # remote-control: control-enable: yes # Run the command unbound-control-setup to generate the key files. # # Environment variables for this script # statefile - where to put temporary statefile. # unbound_conf - where the unbound.conf file is located. # unbound_control - where to find unbound-control executable. # spoof_warn - what level to warn about spoofing # spoof_crit - what level to crit about spoofing # # You can set them in your munin/plugin-conf.d/plugins.conf file # with: # [unbound*] # user root # env.statefile /usr/local/var/munin/plugin-state/unbound-state # env.unbound_conf /usr/local/etc/unbound/unbound.conf # env.unbound_control /usr/local/sbin/unbound-control # env.spoof_warn 1000 # env.spoof_crit 100000 # # This plugin can create different graphs depending on what name # you link it as (with ln -s) into the plugins directory # You can link it multiple times. # If you are only a casual user, the _hits and _by_type are most interesting, # possibly followed by _by_rcode. # # unbound_munin_hits - base volume, cache hits, unwanted traffic # unbound_munin_queue - to monitor the internal requestlist # unbound_munin_memory - memory usage # unbound_munin_by_type - incoming queries by type # unbound_munin_by_class - incoming queries by class # unbound_munin_by_opcode - incoming queries by opcode # unbound_munin_by_rcode - answers by rcode, validation status # unbound_munin_by_flags - incoming queries by flags # unbound_munin_histogram - histogram of query resolving times # # Magic markers - optional - used by installation scripts and # munin-config: (originally contrib family but munin-node-configure ignores it) # #%# family=auto #%# capabilities=autoconf suggest # POD documentation : <<=cut =head1 NAME unbound_munin_ - Munin plugin to monitor the Unbound DNS resolver. =head1 APPLICABLE SYSTEMS System with unbound daemon. =head1 CONFIGURATION [unbound*] user root env.statefile /usr/local/var/munin/plugin-state/unbound-state env.unbound_conf /usr/local/etc/unbound/unbound.conf env.unbound_control /usr/local/sbin/unbound-control env.spoof_warn 1000 env.spoof_crit 100000 Use the .env settings to override the defaults. =head1 USAGE Can be used to present different graphs. Use ln -s for that name in the plugins directory to enable the graph. unbound_munin_hits - base volume, cache hits, unwanted traffic unbound_munin_queue - to monitor the internal requestlist unbound_munin_memory - memory usage unbound_munin_by_type - incoming queries by type unbound_munin_by_class - incoming queries by class unbound_munin_by_opcode - incoming queries by opcode unbound_munin_by_rcode - answers by rcode, validation status unbound_munin_by_flags - incoming queries by flags unbound_munin_histogram - histogram of query resolving times =head1 AUTHOR Copyright 2008 W.C.A. Wijngaards =head1 LICENSE BSD =cut state=${statefile:-/usr/local/var/munin/plugin-state/unbound-state} conf=${unbound_conf:-/usr/local/etc/unbound/unbound.conf} ctrl=${unbound_control:-/usr/local/sbin/unbound-control} warn=${spoof_warn:-1000} crit=${spoof_crit:-100000} lock=$state.lock # number of seconds between polling attempts. # makes the statefile hang around for at least this many seconds, # so that multiple links of this script can share the results. lee=55 # to keep things within 19 characters ABBREV="-e s/total/t/ -e s/thread/t/ -e s/num/n/ -e s/query/q/ -e s/answer/a/ -e s/unwanted/u/ -e s/requestlist/ql/ -e s/type/t/ -e s/class/c/ -e s/opcode/o/ -e s/rcode/r/ -e s/edns/e/ -e s/mem/m/ -e s/cache/c/ -e s/mod/m/" # get value from $1 into return variable $value get_value ( ) { value="`grep '^'$1'=' $state | sed -e 's/^.*=//'`" if test "$value"x = ""x; then value="0" fi } # download the state from the unbound server. get_state ( ) { # obtain lock for fetching the state # because there is a race condition in fetching and writing to file # see if the lock is stale, if so, take it if test -f $lock ; then pid="`cat $lock 2>&1`" kill -0 "$pid" >/dev/null 2>&1 if test $? -ne 0 -a "$pid" != $$ ; then echo $$ >$lock fi fi i=0 while test ! -f $lock || test "`cat $lock 2>&1`" != $$; do while test -f $lock; do # wait i=`expr $i + 1` if test $i -gt 1000; then sleep 1; fi if test $i -gt 1500; then echo "error locking $lock" "=" `cat $lock` rm -f $lock exit 1 fi done # try to get it if echo $$ >$lock ; then : ; else break; fi done # do not refetch if the file exists and only LEE seconds old if test -f $state; then now=`date +%s` get_value "time.now" value="`echo $value | sed -e 's/\..*$//'`" if test $now -lt `expr $value + $lee`; then rm -f $lock return fi fi $ctrl -c $conf stats > $state if test $? -ne 0; then echo "error retrieving data from unbound server" rm -f $lock exit 1 fi rm -f $lock } if test "$1" = "autoconf" ; then if test ! -f $conf; then echo no "($conf does not exist)" exit 0 fi if test ! -d `dirname $state`; then echo no "(`dirname $state` directory does not exist)" exit 0 fi echo yes exit 0 fi if test "$1" = "suggest" ; then echo "hits" echo "queue" echo "memory" echo "by_type" echo "by_class" echo "by_opcode" echo "by_rcode" echo "by_flags" echo "histogram" exit 0 fi # determine my type, by name id=`echo $0 | sed -e 's/^.*unbound_munin_//'` if test "$id"x = ""x; then # some default to keep people sane. id="hits" fi # if $1 exists in statefile, config is echoed with label $2 exist_config ( ) { mn=`echo $1 | sed $ABBREV | tr . _` if grep '^'$1'=' $state >/dev/null 2>&1; then echo "$mn.label $2" echo "$mn.min 0" echo "$mn.type ABSOLUTE" fi } # print label and min 0 for a name $1 in unbound format p_config ( ) { mn=`echo $1 | sed $ABBREV | tr . _` echo $mn.label "$2" echo $mn.min 0 echo $mn.type $3 } if test "$1" = "config" ; then if test ! -f $state; then get_state fi case $id in hits) echo "graph_title Unbound DNS traffic and cache hits" echo "graph_args --base 1000 -l 0" echo "graph_vlabel queries / \${graph_period}" echo "graph_scale no" echo "graph_category DNS" for x in `grep "^thread[0-9][0-9]*\.num\.queries=" $state | sed -e 's/=.*//'`; do exist_config $x "queries handled by `basename $x .num.queries`" done p_config "total.num.queries" "total queries from clients" "ABSOLUTE" p_config "total.num.cachehits" "cache hits" "ABSOLUTE" p_config "total.num.prefetch" "cache prefetch" "ABSOLUTE" p_config "num.query.tcp" "TCP queries" "ABSOLUTE" p_config "num.query.tcpout" "TCP out queries" "ABSOLUTE" p_config "num.query.tls" "TLS queries" "ABSOLUTE" p_config "num.query.tls.resume" "TLS resumes" "ABSOLUTE" p_config "num.query.ipv6" "IPv6 queries" "ABSOLUTE" p_config "unwanted.queries" "queries that failed acl" "ABSOLUTE" p_config "unwanted.replies" "unwanted or unsolicited replies" "ABSOLUTE" echo "u_replies.warning $warn" echo "u_replies.critical $crit" echo "graph_info DNS queries to the recursive resolver. The unwanted replies could be innocent duplicate packets, late replies, or spoof threats." ;; queue) echo "graph_title Unbound requestlist size" echo "graph_args --base 1000 -l 0" echo "graph_vlabel number of queries" echo "graph_scale no" echo "graph_category DNS" p_config "total.requestlist.avg" "Average size of queue on insert" "GAUGE" p_config "total.requestlist.max" "Max size of queue (in 5 min)" "GAUGE" p_config "total.requestlist.overwritten" "Number of queries replaced by new ones" "GAUGE" p_config "total.requestlist.exceeded" "Number of queries dropped due to lack of space" "GAUGE" echo "graph_info The queries that did not hit the cache and need recursion service take up space in the requestlist. If there are too many queries, first queries get overwritten, and at last resort dropped." ;; memory) echo "graph_title Unbound memory usage" echo "graph_args --base 1024 -l 0" echo "graph_vlabel memory used in bytes" echo "graph_category DNS" p_config "mem.cache.rrset" "RRset cache memory" "GAUGE" p_config "mem.cache.message" "Message cache memory" "GAUGE" p_config "mem.mod.iterator" "Iterator module memory" "GAUGE" p_config "mem.mod.validator" "Validator module and key cache memory" "GAUGE" p_config "msg.cache.count" "msg cache count" "GAUGE" p_config "rrset.cache.count" "rrset cache count" "GAUGE" p_config "infra.cache.count" "infra cache count" "GAUGE" p_config "key.cache.count" "key cache count" "GAUGE" echo "graph_info The memory used by unbound." ;; by_type) echo "graph_title Unbound DNS queries by type" echo "graph_args --base 1000 -l 0" echo "graph_vlabel queries / \${graph_period}" echo "graph_scale no" echo "graph_category DNS" for x in `grep "^num.query.type" $state`; do nm=`echo $x | sed -e 's/=.*$//'` tp=`echo $nm | sed -e s/num.query.type.//` p_config "$nm" "$tp" "ABSOLUTE" done echo "graph_info queries by DNS RR type queried for" ;; by_class) echo "graph_title Unbound DNS queries by class" echo "graph_args --base 1000 -l 0" echo "graph_vlabel queries / \${graph_period}" echo "graph_scale no" echo "graph_category DNS" for x in `grep "^num.query.class" $state`; do nm=`echo $x | sed -e 's/=.*$//'` tp=`echo $nm | sed -e s/num.query.class.//` p_config "$nm" "$tp" "ABSOLUTE" done echo "graph_info queries by DNS RR class queried for." ;; by_opcode) echo "graph_title Unbound DNS queries by opcode" echo "graph_args --base 1000 -l 0" echo "graph_vlabel queries / \${graph_period}" echo "graph_scale no" echo "graph_category DNS" for x in `grep "^num.query.opcode" $state`; do nm=`echo $x | sed -e 's/=.*$//'` tp=`echo $nm | sed -e s/num.query.opcode.//` p_config "$nm" "$tp" "ABSOLUTE" done echo "graph_info queries by opcode in the query packet." ;; by_rcode) echo "graph_title Unbound DNS answers by return code" echo "graph_args --base 1000 -l 0" echo "graph_vlabel answer packets / \${graph_period}" echo "graph_scale no" echo "graph_category DNS" for x in `grep "^num.answer.rcode" $state`; do nm=`echo $x | sed -e 's/=.*$//'` tp=`echo $nm | sed -e s/num.answer.rcode.//` p_config "$nm" "$tp" "ABSOLUTE" done p_config "num.answer.secure" "answer secure" "ABSOLUTE" p_config "num.answer.bogus" "answer bogus" "ABSOLUTE" p_config "num.rrset.bogus" "num rrsets marked bogus" "ABSOLUTE" echo "graph_info answers sorted by return value. rrsets bogus is the number of rrsets marked bogus per \${graph_period} by the validator" ;; by_flags) echo "graph_title Unbound DNS incoming queries by flags" echo "graph_args --base 1000 -l 0" echo "graph_vlabel queries / \${graph_period}" echo "graph_scale no" echo "graph_category DNS" p_config "num.query.flags.QR" "QR (query reply) flag" "ABSOLUTE" p_config "num.query.flags.AA" "AA (auth answer) flag" "ABSOLUTE" p_config "num.query.flags.TC" "TC (truncated) flag" "ABSOLUTE" p_config "num.query.flags.RD" "RD (recursion desired) flag" "ABSOLUTE" p_config "num.query.flags.RA" "RA (rec avail) flag" "ABSOLUTE" p_config "num.query.flags.Z" "Z (zero) flag" "ABSOLUTE" p_config "num.query.flags.AD" "AD (auth data) flag" "ABSOLUTE" p_config "num.query.flags.CD" "CD (check disabled) flag" "ABSOLUTE" p_config "num.query.edns.present" "EDNS OPT present" "ABSOLUTE" p_config "num.query.edns.DO" "DO (DNSSEC OK) flag" "ABSOLUTE" echo "graph_info This graphs plots the flags inside incoming queries. For example, if QR, AA, TC, RA, Z flags are set, the query can be rejected. RD, AD, CD and DO are legitimately set by some software." ;; histogram) echo "graph_title Unbound DNS histogram of reply time" echo "graph_args --base 1000 -l 0" echo "graph_vlabel queries / \${graph_period}" echo "graph_scale no" echo "graph_category DNS" echo hcache.label "cache hits" echo hcache.min 0 echo hcache.type ABSOLUTE echo hcache.draw AREA echo hcache.colour 999999 echo h64ms.label "0 msec - 66 msec" echo h64ms.min 0 echo h64ms.type ABSOLUTE echo h64ms.draw STACK echo h64ms.colour 0000FF echo h128ms.label "66 msec - 131 msec" echo h128ms.min 0 echo h128ms.type ABSOLUTE echo h128ms.colour 1F00DF echo h128ms.draw STACK echo h256ms.label "131 msec - 262 msec" echo h256ms.min 0 echo h256ms.type ABSOLUTE echo h256ms.draw STACK echo h256ms.colour 3F00BF echo h512ms.label "262 msec - 524 msec" echo h512ms.min 0 echo h512ms.type ABSOLUTE echo h512ms.draw STACK echo h512ms.colour 5F009F echo h1s.label "524 msec - 1 sec" echo h1s.min 0 echo h1s.type ABSOLUTE echo h1s.draw STACK echo h1s.colour 7F007F echo h2s.label "1 sec - 2 sec" echo h2s.min 0 echo h2s.type ABSOLUTE echo h2s.draw STACK echo h2s.colour 9F005F echo h4s.label "2 sec - 4 sec" echo h4s.min 0 echo h4s.type ABSOLUTE echo h4s.draw STACK echo h4s.colour BF003F echo h8s.label "4 sec - 8 sec" echo h8s.min 0 echo h8s.type ABSOLUTE echo h8s.draw STACK echo h8s.colour DF001F echo h16s.label "8 sec - ..." echo h16s.min 0 echo h16s.type ABSOLUTE echo h16s.draw STACK echo h16s.colour FF0000 echo "graph_info Histogram of the reply times for queries." ;; esac exit 0 fi # do the stats itself get_state # get the time elapsed get_value "time.elapsed" if test $value = 0 || test $value = "0.000000"; then echo "error: time elapsed 0 or could not retrieve data" exit 1 fi elapsed="$value" # print value for $1 print_value ( ) { mn=`echo $1 | sed $ABBREV | tr . _` get_value $1 echo "$mn.value" $value } # print value if line already found in $2 print_value_line ( ) { mn=`echo $1 | sed $ABBREV | tr . _` value="`echo $2 | sed -e 's/^.*=//'`" echo "$mn.value" $value } case $id in hits) for x in `grep "^thread[0-9][0-9]*\.num\.queries=" $state | sed -e 's/=.*//'` total.num.queries \ total.num.cachehits total.num.prefetch num.query.tcp \ num.query.tcpout num.query.tls num.query.tls.resume \ num.query.ipv6 unwanted.queries \ unwanted.replies; do if grep "^"$x"=" $state >/dev/null 2>&1; then print_value $x fi done ;; queue) for x in total.requestlist.avg total.requestlist.max \ total.requestlist.overwritten total.requestlist.exceeded; do print_value $x done ;; memory) for x in mem.cache.rrset mem.cache.message mem.mod.iterator \ mem.mod.validator msg.cache.count rrset.cache.count \ infra.cache.count key.cache.count; do print_value $x done ;; by_type) for x in `grep "^num.query.type" $state`; do nm=`echo $x | sed -e 's/=.*$//'` print_value_line $nm $x done ;; by_class) for x in `grep "^num.query.class" $state`; do nm=`echo $x | sed -e 's/=.*$//'` print_value_line $nm $x done ;; by_opcode) for x in `grep "^num.query.opcode" $state`; do nm=`echo $x | sed -e 's/=.*$//'` print_value_line $nm $x done ;; by_rcode) for x in `grep "^num.answer.rcode" $state`; do nm=`echo $x | sed -e 's/=.*$//'` print_value_line $nm $x done print_value "num.answer.secure" print_value "num.answer.bogus" print_value "num.rrset.bogus" ;; by_flags) for x in num.query.flags.QR num.query.flags.AA num.query.flags.TC num.query.flags.RD num.query.flags.RA num.query.flags.Z num.query.flags.AD num.query.flags.CD num.query.edns.present num.query.edns.DO; do print_value $x done ;; histogram) get_value total.num.cachehits echo hcache.value $value r=0 for x in histogram.000000.000000.to.000000.000001 \ histogram.000000.000001.to.000000.000002 \ histogram.000000.000002.to.000000.000004 \ histogram.000000.000004.to.000000.000008 \ histogram.000000.000008.to.000000.000016 \ histogram.000000.000016.to.000000.000032 \ histogram.000000.000032.to.000000.000064 \ histogram.000000.000064.to.000000.000128 \ histogram.000000.000128.to.000000.000256 \ histogram.000000.000256.to.000000.000512 \ histogram.000000.000512.to.000000.001024 \ histogram.000000.001024.to.000000.002048 \ histogram.000000.002048.to.000000.004096 \ histogram.000000.004096.to.000000.008192 \ histogram.000000.008192.to.000000.016384 \ histogram.000000.016384.to.000000.032768 \ histogram.000000.032768.to.000000.065536; do get_value $x r=`expr $r + $value` done echo h64ms.value $r get_value histogram.000000.065536.to.000000.131072 echo h128ms.value $value get_value histogram.000000.131072.to.000000.262144 echo h256ms.value $value get_value histogram.000000.262144.to.000000.524288 echo h512ms.value $value get_value histogram.000000.524288.to.000001.000000 echo h1s.value $value get_value histogram.000001.000000.to.000002.000000 echo h2s.value $value get_value histogram.000002.000000.to.000004.000000 echo h4s.value $value get_value histogram.000004.000000.to.000008.000000 echo h8s.value $value r=0 for x in histogram.000008.000000.to.000016.000000 \ histogram.000016.000000.to.000032.000000 \ histogram.000032.000000.to.000064.000000 \ histogram.000064.000000.to.000128.000000 \ histogram.000128.000000.to.000256.000000 \ histogram.000256.000000.to.000512.000000 \ histogram.000512.000000.to.001024.000000 \ histogram.001024.000000.to.002048.000000 \ histogram.002048.000000.to.004096.000000 \ histogram.004096.000000.to.008192.000000 \ histogram.008192.000000.to.016384.000000 \ histogram.016384.000000.to.032768.000000 \ histogram.032768.000000.to.065536.000000 \ histogram.065536.000000.to.131072.000000 \ histogram.131072.000000.to.262144.000000 \ histogram.262144.000000.to.524288.000000; do get_value $x r=`expr $r + $value` done echo h16s.value $r ;; esac unbound-1.13.1/contrib/aaaa-filter-iterator.patch0000644000175000017500000003574714010434640021375 0ustar wouterwouterdiff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index f426ac5f..147fbfa9 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -872,6 +872,13 @@ potentially broken nameservers. A lot of domains will not be resolvable when this option in enabled. Only use if you know what you are doing. This option only has effect when qname-minimisation is enabled. Default is no. .TP +.B aaaa\-filter: \fI +Activate behavior similar to BIND's AAAA-filter. +This forces the dropping of all AAAA records, unless in the case of +explicit AAAA queries, when no A records have been confirmed. +This also causes an additional A query to be sent for each AAAA query. +This breaks DNSSEC! +.TP .B aggressive\-nsec: \fI Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN and other denials, using information from previous NXDOMAINs answers. diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c index aae934dd..55c55de0 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c @@ -667,6 +667,32 @@ static int sanitize_nsec_is_overreach(struct rrset_parse* rrset, return 0; } +/** + * ASN: Lookup A records from rrset cache. + * @param qinfo: the question originally asked. + * @param env: module environment with config and cache. + * @param ie: iterator environment with private address data. + * @return 0 if no A record found, 1 if A record found. + */ +static int +asn_lookup_a_record_from_cache(struct query_info* qinfo, + struct module_env* env, struct iter_env* ATTR_UNUSED(ie)) +{ + struct ub_packed_rrset_key* akey; + + /* get cached A records for queried name */ + akey = rrset_cache_lookup(env->rrset_cache, qinfo->qname, + qinfo->qname_len, LDNS_RR_TYPE_A, qinfo->qclass, + 0, *env->now, 0); + if(akey) { /* we had some. */ + log_rrset_key(VERB_ALGO, "ASN-AAAA-filter: found A record", + akey); + lock_rw_unlock(&akey->entry.lock); + return 1; + } + return 0; +} + /** * Given a response event, remove suspect RRsets from the response. * "Suspect" rrsets are potentially poison. Note that this routine expects @@ -686,6 +712,7 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, struct query_info* qinfo, uint8_t* zonename, struct module_env* env, struct iter_env* ie) { + int found_a_record = 0; /* ASN: do we have a A record? */ int del_addi = 0; /* if additional-holding rrsets are deleted, we do not trust the normalized additional-A-AAAA any more */ struct rrset_parse* rrset, *prev; @@ -721,6 +748,13 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, rrset = rrset->rrset_all_next; } + /* ASN: Locate any A record we can find */ + if((ie->aaaa_filter) && (qinfo->qtype == LDNS_RR_TYPE_AAAA)) { + found_a_record = asn_lookup_a_record_from_cache(qinfo, + env, ie); + } + /* ASN: End of added code */ + /* At this point, we brutally remove ALL rrsets that aren't * children of the originating zone. The idea here is that, * as far as we know, the server that we contacted is ONLY @@ -732,6 +766,24 @@ scrub_sanitize(sldns_buffer* pkt, struct msg_parse* msg, rrset = msg->rrset_first; while(rrset) { + /* ASN: For AAAA records only... */ + if((ie->aaaa_filter) && (rrset->type == LDNS_RR_TYPE_AAAA)) { + /* ASN: If this is not a AAAA query, then remove AAAA + * records, no questions asked. If this IS a AAAA query + * then remove AAAA records if we have an A record. + * Otherwise, leave things be. */ + if((qinfo->qtype != LDNS_RR_TYPE_AAAA) || + (found_a_record)) { + remove_rrset("ASN-AAAA-filter: removing AAAA " + "for record", pkt, msg, prev, &rrset); + continue; + } + log_nametypeclass(VERB_ALGO, "ASN-AAAA-filter: " + "keep AAAA for", zonename, + LDNS_RR_TYPE_AAAA, qinfo->qclass); + } + /* ASN: End of added code */ + /* remove private addresses */ if( (rrset->type == LDNS_RR_TYPE_A || rrset->type == LDNS_RR_TYPE_AAAA)) { diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 7bc67da6..e10f547a 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -175,6 +175,7 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg) } iter_env->supports_ipv6 = cfg->do_ip6; iter_env->supports_ipv4 = cfg->do_ip4; + iter_env->aaaa_filter = cfg->aaaa_filter; return 1; } diff --git a/iterator/iterator.c b/iterator/iterator.c index 23b07ea9..ca29b48c 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -2127,6 +2127,53 @@ processDSNSFind(struct module_qstate* qstate, struct iter_qstate* iq, int id) return 0; } + +/** + * ASN: This event state was added as an intermediary step between + * QUERYTARGETS_STATE and the next step, in order to cast a subquery for the + * purpose of caching A records for the queried name. + * + * @param qstate: query state. + * @param iq: iterator query state. + * @param ie: iterator shared global environment. + * @param id: module id. + * @return true if the event requires more request processing immediately, + * false if not. This state only returns true when it is generating + * a SERVFAIL response because the query has hit a dead end. + */ +static int +asn_processQueryAAAA(struct module_qstate* qstate, struct iter_qstate* iq, + struct iter_env* ATTR_UNUSED(ie), int id) +{ + struct module_qstate* subq = NULL; + + log_assert(iq->fetch_a_for_aaaa == 0); + + /* flag the query properly in order to not loop */ + iq->fetch_a_for_aaaa = 1; + + /* re-throw same query, but with a different type */ + if(!generate_sub_request(iq->qchase.qname, + iq->qchase.qname_len, LDNS_RR_TYPE_A, + iq->qchase.qclass, qstate, id, iq, + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) { + log_nametypeclass(VERB_ALGO, "ASN-AAAA-filter: failed " + "preloading of A record for", + iq->qchase.qname, LDNS_RR_TYPE_A, + iq->qchase.qclass); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + log_nametypeclass(VERB_ALGO, "ASN-AAAA-filter: " + "preloading records in cache for", + iq->qchase.qname, LDNS_RR_TYPE_A, + iq->qchase.qclass); + + /* set this query as waiting */ + qstate->ext_state[id] = module_wait_subquery; + /* at this point break loop */ + return 0; +} +/* ASN: End of added code */ /** * This is the request event state where the request will be sent to one of @@ -2186,6 +2233,13 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } + /* ASN: If we have a AAAA query, then also query for A records */ + if((ie->aaaa_filter) && (iq->qchase.qtype == LDNS_RR_TYPE_AAAA) && + (iq->fetch_a_for_aaaa == 0)) { + return next_state(iq, ASN_FETCH_A_FOR_AAAA_STATE); + } + /* ASN: End of added code */ + /* Make sure we have a delegation point, otherwise priming failed * or another failure occurred */ if(!iq->dp) { @@ -3574,6 +3628,61 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, return 0; } +/** + * ASN: Do final processing on responses to A queries originated from AAAA + * queries. Events reach this state after the iterative resolution algorithm + * terminates. + * This is required down the road to decide whether to scrub AAAA records + * from the results or not. + * + * @param qstate: query state. + * @param id: module id. + * @param forq: super query state. + */ +static void +asn_processAAAAResponse(struct module_qstate* qstate, int id, + struct module_qstate* super) +{ + /*struct iter_qstate* iq = (struct iter_qstate*)qstate->minfo[id];*/ + struct iter_qstate* super_iq = (struct iter_qstate*)super->minfo[id]; + struct delegpt_ns* dpns = NULL; + int error = (qstate->return_rcode != LDNS_RCODE_NOERROR); + + log_assert(super_iq->fetch_a_for_aaaa > 0); + + /* let super go to evaluation of targets after this */ + super_iq->state = QUERYTARGETS_STATE; + + log_query_info(VERB_ALGO, "ASN-AAAA-filter: processAAAAResponse", + &qstate->qinfo); + log_query_info(VERB_ALGO, "ASN-AAAA-filter: processAAAAResponse super", + &super->qinfo); + + if(super_iq->dp) + dpns = delegpt_find_ns(super_iq->dp, + qstate->qinfo.qname, qstate->qinfo.qname_len); + if (!dpns) { + /* not interested */ + verbose(VERB_ALGO, "ASN-AAAA-filter: subq: %s, but parent not " + "interested%s", (error ? "error, but" : "success"), + (super_iq->dp ? "anymore" : " (was reset)")); + log_query_info(VERB_ALGO, "ASN-AAAA-filter: superq", &super->qinfo); + if(super_iq->dp && error) + delegpt_log(VERB_ALGO, super_iq->dp); + return; + } else if (error) { + verbose(VERB_ALGO, "ASN-AAAA-filter: mark as failed, " + "and go to target query."); + /* see if the failure did get (parent-lame) info */ + if(!cache_fill_missing(super->env, + super_iq->qchase.qclass, super->region, + super_iq->dp)) + log_err("ASN-AAAA-filter: out of memory adding missing"); + dpns->resolved = 1; /* mark as failed */ + } +} +/* ASN: End of added code */ + /* * Return priming query results to interested super querystates. * @@ -3593,6 +3702,9 @@ iter_inform_super(struct module_qstate* qstate, int id, else if(super->qinfo.qtype == LDNS_RR_TYPE_DS && ((struct iter_qstate*) super->minfo[id])->state == DSNS_FIND_STATE) processDSNSResponse(qstate, id, super); + else if (super->qinfo.qtype == LDNS_RR_TYPE_AAAA && ((struct iter_qstate*) + super->minfo[id])->state == ASN_FETCH_A_FOR_AAAA_STATE) + asn_processAAAAResponse(qstate, id, super); else if(qstate->return_rcode != LDNS_RCODE_NOERROR) error_supers(qstate, id, super); else if(qstate->is_priming) @@ -3630,6 +3742,9 @@ iter_handle(struct module_qstate* qstate, struct iter_qstate* iq, case INIT_REQUEST_3_STATE: cont = processInitRequest3(qstate, iq, id); break; + case ASN_FETCH_A_FOR_AAAA_STATE: + cont = asn_processQueryAAAA(qstate, iq, ie, id); + break; case QUERYTARGETS_STATE: cont = processQueryTargets(qstate, iq, ie, id); break; @@ -3961,6 +4076,8 @@ iter_state_to_string(enum iter_state state) return "INIT REQUEST STATE (stage 2)"; case INIT_REQUEST_3_STATE: return "INIT REQUEST STATE (stage 3)"; + case ASN_FETCH_A_FOR_AAAA_STATE: + return "ASN_FETCH_A_FOR_AAAA_STATE"; case QUERYTARGETS_STATE : return "QUERY TARGETS STATE"; case PRIME_RESP_STATE : @@ -3985,6 +4102,7 @@ iter_state_is_responsestate(enum iter_state s) case INIT_REQUEST_STATE : case INIT_REQUEST_2_STATE : case INIT_REQUEST_3_STATE : + case ASN_FETCH_A_FOR_AAAA_STATE : case QUERYTARGETS_STATE : case COLLECT_CLASS_STATE : return 0; diff --git a/iterator/iterator.h b/iterator/iterator.h index 342ac207..731948d1 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -135,6 +135,9 @@ struct iter_env { */ int* target_fetch_policy; + /** ASN: AAAA-filter flag */ + int aaaa_filter; + /** lock on ratelimit counter */ lock_basic_type queries_ratelimit_lock; /** number of queries that have been ratelimited */ @@ -186,6 +189,14 @@ enum iter_state { */ INIT_REQUEST_3_STATE, + /** + * This state is responsible for intercepting AAAA queries, + * and launch a A subquery on the same target, to populate the + * cache with A records, so the AAAA filter scrubbing logic can + * work. + */ + ASN_FETCH_A_FOR_AAAA_STATE, + /** * Each time a delegation point changes for a given query or a * query times out and/or wakes up, this state is (re)visited. @@ -375,6 +386,13 @@ struct iter_qstate { */ int refetch_glue; + /** + * ASN: This is a flag that, if true, means that this query is + * for fetching A records to populate cache and determine if we must + * return AAAA records or not. + */ + int fetch_a_for_aaaa; + /** list of pending queries to authoritative servers. */ struct outbound_list outlist; diff --git a/pythonmod/interface.i b/pythonmod/interface.i index f08b575d..47f1bb2e 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -975,6 +975,7 @@ struct config_file { int harden_dnssec_stripped; int harden_referral_path; int use_caps_bits_for_id; + int aaaa_filter; /* ASN */ struct config_strlist* private_address; struct config_strlist* private_domain; size_t unwanted_threshold; diff --git a/util/config_file.c b/util/config_file.c index 0ab8614a..729fb147 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -218,6 +218,7 @@ config_create(void) cfg->harden_referral_path = 0; cfg->harden_algo_downgrade = 0; cfg->use_caps_bits_for_id = 0; + cfg->aaaa_filter = 0; /* ASN: default is disabled */ cfg->caps_whitelist = NULL; cfg->private_address = NULL; cfg->private_domain = NULL; diff --git a/util/config_file.h b/util/config_file.h index e61257a3..dabaa7bb 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -260,6 +260,8 @@ struct config_file { int harden_algo_downgrade; /** use 0x20 bits in query as random ID bits */ int use_caps_bits_for_id; + /** ASN: enable AAAA filter? */ + int aaaa_filter; /** 0x20 whitelist, domains that do not use capsforid */ struct config_strlist* caps_whitelist; /** strip away these private addrs from answers, no DNS Rebinding */ diff --git a/util/configlexer.lex b/util/configlexer.lex index 79a0edca..4eaec678 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -304,6 +304,7 @@ harden-algo-downgrade{COLON} { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } use-caps-for-id{COLON} { YDVAR(1, VAR_USE_CAPS_FOR_ID) } caps-whitelist{COLON} { YDVAR(1, VAR_CAPS_WHITELIST) } unwanted-reply-threshold{COLON} { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +aaaa-filter{COLON} { YDVAR(1, VAR_AAAA_FILTER) } private-address{COLON} { YDVAR(1, VAR_PRIVATE_ADDRESS) } private-domain{COLON} { YDVAR(1, VAR_PRIVATE_DOMAIN) } prefetch-key{COLON} { YDVAR(1, VAR_PREFETCH_KEY) } diff --git a/util/configparser.y b/util/configparser.y index 1d0e8658..f284dd43 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -97,6 +97,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT %token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR %token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS +%token VAR_AAAA_FILTER %token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE %token VAR_CONTROL_INTERFACE VAR_CONTROL_PORT VAR_SERVER_KEY_FILE %token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE @@ -233,6 +234,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size | server_harden_referral_path | server_private_address | server_private_domain | server_extended_statistics | + server_aaaa_filter | server_local_data_ptr | server_jostle_timeout | server_unwanted_reply_threshold | server_log_time_ascii | server_domain_insecure | server_val_sig_skew_min | @@ -1563,6 +1565,15 @@ server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG yyerror("out of memory"); } ; +server_aaaa_filter: VAR_AAAA_FILTER STRING_ARG + { + OUTYY(("P(server_aaaa_filter:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->aaaa_filter = (strcmp($2, "yes")==0); + free($2); + } + ; server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG { OUTYY(("P(server_private_address:%s)\n", $2)); unbound-1.13.1/contrib/drop2rpz0000644000175000017500000000176114010434640016051 0ustar wouterwouter#!/usr/bin/perl # usage: curl --silent https://www.spamhaus.org/drop/drop.txt | $0 > /path/to/spamhaus-drop.rpz.local # # unbound.conf: # rpz: # name: "spamhaus-drop.rpz.local." # zonefile: "/path/tp/spamhaus-drop.rpz.local" # rpz-log: yes # rpz-log-name: "spamhaus-drop" # use strict; use vars qw{$o1 $o2 $o3 $o4 $m}; # trailing dots required my $origin = 'drop.spamhaus.org.rpz.local.'; my $mname = 'localhost.'; my $rname = 'root.localhost.'; my $ns = $mname; my $rpz_action = '.'; # return NXDOMAIN #my $rpz_action = '*.'; # return NODATA #my $rpz_action = 'rpz-drop.'; # drop the query print "$origin SOA $mname $rname 1 43200 7200 2419200 3600\n"; print "$origin NS $ns\n"; while(<>) { if(($o1, $o2, $o3, $o4, $m) = m{(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)}) { print "$m.$o4.$o3.$o2.$o1.rpz-ip.$origin CNAME $rpz_action\n"; } else { print "$_"; } } # add a testpoint: ask for "dns.google" # print "32.8.8.8.8.rpz-ip.$origin CNAME $rpz_action\n"; exit; unbound-1.13.1/contrib/warmup.sh0000644000175000017500000000421114010434640016204 0ustar wouterwouter#!/bin/sh # -------------------------------------------------------------- # -- Warm up DNS cache script by your own MRU domains or from # -- file when it specified as script argument. # -- # -- Version 1.1 # -- By Yuri Voinov (c) 2014 # -------------------------------------------------------------- # Default DNS host address address="127.0.0.1" cat=`which cat` dig=`which dig` if [ -z "$1" ]; then echo "Warming up cache by MRU domains..." $dig -f - @$address >/dev/null 2>&1 </dev/null 2>&1 fi echo "Done." echo "Saving cache..." script=`which unbound_cache.sh` [ -f "$script" ] && $script -s echo "Done." exit 0 unbound-1.13.1/contrib/patch_rsamd5_enable.diff0000644000175000017500000000103614010434640021051 0ustar wouterwouterIndex: validator/val_secalgo.c =================================================================== --- validator/val_secalgo.c (revision 2759) +++ validator/val_secalgo.c (working copy) @@ -153,7 +153,7 @@ switch(id) { case LDNS_RSAMD5: /* RFC 6725 deprecates RSAMD5 */ - return 0; + return 1; case LDNS_DSA: case LDNS_DSA_NSEC3: case LDNS_RSASHA1: @@ -617,7 +617,7 @@ switch(id) { case LDNS_RSAMD5: /* RFC 6725 deprecates RSAMD5 */ - return 0; + return 1; case LDNS_DSA: case LDNS_DSA_NSEC3: case LDNS_RSASHA1: unbound-1.13.1/contrib/unbound.service.in0000644000175000017500000000667014010434640020011 0ustar wouterwouter; For further details about the directives used in this unit file, including ; the below, please refer to systemd's official documentation, available at ; https://www.freedesktop.org/software/systemd/man/systemd.exec.html. ; ; ; - `ProtectSystem=strict` implies we mount the entire file system hierarchy ; read-only for the processes invoked by the unit except for the API file ; system subtrees /dev, /proc and /sys (which are protected by ; PrivateDevices=, ProtectKernelTunables=, ProtectControlGroups=). ; ; - `PrivateTmp=yes` secures access to temporary files of the process, and ; makes sharing between processes via /tmp or /var/tmp impossible. ; ; - `ProtectHome=yes` makes the directories /home, /root, and /run/user ; inaccessible and empty for processes invoked by the unit. ; ; - `ProtectControlGroups=yes` makes the Linux Control Groups hierarchies ; (accessible through /sys/fs/cgroup) read-only to all processes invoked by ; the unit. It also implies `MountAPIVFS=yes`. ; ; - `RuntimeDirectory=unbound` creates a /run/unbound directory, owned by the ; unit User and Group with read-write permissions (0755) as soon as the ; unit starts. This allows unbound to store its pidfile. The directory and ; its content are automatically removed by systemd when the unit stops. ; ; - `NoNewPrivileges=yes` ensures that the service process and all its ; children can never gain new privileges through execve(). ; ; - `RestrictSUIDSGID=yes` ensures that any attempts to set the set-user-ID ; (SUID) or set-group-ID (SGID) bits on files or directories will be denied. ; ; - `RestrictRealTime=yes` ensures that any attempts to enable realtime ; scheduling in a process invoked by the unit will be denied. ; ; - `RestrictNamespaces=yes` ensures that access to any kind of namespacing ; is prohibited. ; ; - `LockPersonality=yes` locks down the personality system call so that the ; kernel execution domain may not be changed from the default. ; ; [Unit] Description=Validating, recursive, and caching DNS resolver Documentation=man:unbound(8) After=network-online.target Before=nss-lookup.target Wants=network-online.target nss-lookup.target [Install] WantedBy=multi-user.target [Service] ExecReload=+/bin/kill -HUP $MAINPID ExecStart=@UNBOUND_SBIN_DIR@/unbound -d -p NotifyAccess=main Type=notify CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_SYS_RESOURCE CAP_NET_RAW MemoryDenyWriteExecute=true NoNewPrivileges=true PrivateDevices=true PrivateTmp=true ProtectHome=true ProtectControlGroups=true ProtectKernelModules=true ProtectSystem=strict RuntimeDirectory=unbound ConfigurationDirectory=unbound StateDirectory=unbound RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX RestrictRealtime=true SystemCallArchitectures=native SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module mount @obsolete @resources RestrictNamespaces=yes LockPersonality=yes RestrictSUIDSGID=yes ReadWritePaths=@UNBOUND_RUN_DIR@ @UNBOUND_CHROOT_DIR@ # Below rules are needed when chroot is enabled (usually it's enabled by default). # If chroot is disabled like chroot: "" then they may be safely removed. TemporaryFileSystem=@UNBOUND_CHROOT_DIR@/dev:ro TemporaryFileSystem=@UNBOUND_CHROOT_DIR@/run:ro BindReadOnlyPaths=-/run/systemd/notify:@UNBOUND_CHROOT_DIR@/run/systemd/notify BindReadOnlyPaths=-/dev/urandom:@UNBOUND_CHROOT_DIR@/dev/urandom BindPaths=-/dev/log:@UNBOUND_CHROOT_DIR@/dev/log unbound-1.13.1/contrib/unbound_cache.sh0000644000175000017500000000660414010434640017476 0ustar wouterwouter#!/sbin/sh # -------------------------------------------------------------- # -- DNS cache save/load script # -- # -- Version 1.2 # -- By Yuri Voinov (c) 2006, 2014 # -------------------------------------------------------------- # # ident "@(#)unbound_cache.sh 1.2 14/10/30 YV" # ############# # Variables # ############# # Installation base dir CONF="/etc/opt/csw/unbound" BASE="/opt/csw" # Unbound binaries UC="$BASE/sbin/unbound-control" FNAME="unbound_cache.dmp" # OS utilities BASENAME=`which basename` CAT=`which cat` CUT=`which cut` ECHO=`which echo` EXPR=`which expr` GETOPT=`which getopt` ID=`which id` LS=`which ls` ############### # Subroutines # ############### usage_note () { # Script usage note $ECHO "Usage: `$BASENAME $0` [-s] or [-l] or [-r] or [-h] [filename]" $ECHO . $ECHO "l - Load - default mode. Warming up Unbound DNS cache from saved file. cache-ttl must be high value." $ECHO "s - Save - save Unbound DNS cache contents to plain file with domain names." $ECHO "r - Reload - reloadind new cache entries and refresh existing cache" $ECHO "h - this screen." $ECHO "filename - file to save/load dumped cache. If not specified, $CONF/$FNAME will be used instead." $ECHO "Note: Run without any arguments will be in default mode." $ECHO " Also, unbound-control must be configured." exit 0 } root_check () { if [ ! `$ID | $CUT -f1 -d" "` = "uid=0(root)" ]; then $ECHO "ERROR: You must be super-user to run this script." exit 1 fi } check_uc () { if [ ! -f "$UC" ]; then $ECHO . $ECHO "ERROR: $UC not found. Exiting..." exit 1 fi } check_saved_file () { filename=$1 if [ ! -z "$filename" -a ! -f "$filename" ]; then $ECHO . $ECHO "ERROR: File $filename does not exists. Save it first." exit 1 elif [ ! -f "$CONF/$FNAME" ]; then $ECHO . $ECHO "ERROR: File $CONF/$FNAME does not exists. Save it first." exit 1 fi } save_cache () { # Save unbound cache filename=$1 if [ -z "$filename" ]; then $ECHO "Saving cache in $CONF/$FNAME..." $UC dump_cache>$CONF/$FNAME $LS -lh $CONF/$FNAME else $ECHO "Saving cache in $filename..." $UC dump_cache>$filename $LS -lh $filename fi $ECHO "ok" } load_cache () { # Load saved cache contents and warmup cache filename=$1 if [ -z "$filename" ]; then $ECHO "Loading cache from saved $CONF/$FNAME..." $LS -lh $CONF/$FNAME check_saved_file $filename $CAT $CONF/$FNAME|$UC load_cache else $ECHO "Loading cache from saved $filename..." $LS -lh $filename check_saved_file $filename $CAT $filename|$UC load_cache fi } reload_cache () { # Reloading and refresh existing cache and saved dump filename=$1 save_cache $filename load_cache $filename } ############## # Main block # ############## # Root check root_check # Check unbound-control check_uc # Check command-line arguments if [ "x$*" = "x" ]; then # If arguments list empty,load cache by default load_cache else arg_list=$* # Parse command line set -- `$GETOPT sSlLrRhH: $arg_list` || { usage_note 1>&2 } # Read arguments for i in $arg_list do case $i in -s | -S) save="1";; -l | -L) save="0";; -r | -R) save="2";; -h | -H | \?) usage_note;; *) shift file=$1 break;; esac shift done # Remove trailing -- shift `$EXPR $OPTIND - 1` fi if [ "$save" = "1" ]; then save_cache $file elif [ "$save" = "0" ]; then load_cache $file elif [ "$save" = "2" ]; then reload_cache $file fi exit 0unbound-1.13.1/contrib/redirect-bogus.patch0000644000175000017500000003111114010434640020273 0ustar wouterwouterIndex: daemon/worker.c =================================================================== --- daemon/worker.c (revision 4191) +++ daemon/worker.c (working copy) @@ -663,8 +663,21 @@ if(!inplace_cb_reply_servfail_call(&worker->env, qinfo, NULL, rep, LDNS_RCODE_SERVFAIL, edns, worker->scratchpad)) goto bail_out; - error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, - qinfo, id, flags, edns); + if (qinfo->qtype == LDNS_RR_TYPE_A && + worker->env.cfg->redirect_bogus_ipv4) { + /* BAD cached */ + fixed_address_encode(repinfo->c->buffer, + LDNS_RCODE_NOERROR, qinfo, id, flags, edns, + worker->env.cfg->redirect_bogus_ipv4); + } else if (qinfo->qtype == LDNS_RR_TYPE_AAAA && + worker->env.cfg->redirect_bogus_ipv6) { + fixed_address_encode(repinfo->c->buffer, + LDNS_RCODE_NOERROR, qinfo, id, flags, edns, + worker->env.cfg->redirect_bogus_ipv6); + } else { + error_encode(repinfo->c->buffer, LDNS_RCODE_SERVFAIL, + qinfo, id, flags, edns); + } rrset_array_unlock_touch(worker->env.rrset_cache, worker->scratchpad, rep->ref, rep->rrset_count); if(worker->stats.extended) { Index: doc/unbound.conf.5.in =================================================================== --- doc/unbound.conf.5.in (revision 4191) +++ doc/unbound.conf.5.in (working copy) @@ -1244,6 +1244,18 @@ This can make ordinary queries complete (if repeatedly queried for), and enter the cache, whilst also mitigating the traffic flow by the factor given. +.TP 5 +.B redirect-bogus-ipv4: \fI +Set a fixed address for DNSSEC failures that are cached +Instead of responding to A queries with SERVFAIL, respond +with NOERROR and the address specified here +The TTL of the response will be 5 seconds +.TP 5 +.B redirect-bogus-ipv6: \fI +Set a fixed address for DNSSEC failures that are cached +Instead of responding to AAAA queries with SERVFAIL, respond +with NOERROR and the address specified here +The TTL of the response will be 5 seconds .SS "Remote Control Options" In the .B remote\-control: Index: services/mesh.c =================================================================== --- services/mesh.c (revision 4191) +++ services/mesh.c (working copy) @@ -1006,6 +1006,7 @@ struct timeval end_time; struct timeval duration; int secure; + int bogus_override = 0; /* Copy the client's EDNS for later restore, to make sure the edns * compare is with the correct edns options. */ struct edns_data edns_bak = r->edns; @@ -1016,6 +1017,7 @@ rcode = LDNS_RCODE_SERVFAIL; if(m->s.env->cfg->stat_extended) m->s.env->mesh->ans_bogus++; + bogus_override = 1; } if(rep && rep->security == sec_status_secure) secure = 1; @@ -1047,17 +1049,34 @@ } else if(rcode) { m->s.qinfo.qname = r->qname; m->s.qinfo.local_alias = r->local_alias; - if(rcode == LDNS_RCODE_SERVFAIL) { - if(!inplace_cb_reply_servfail_call(m->s.env, &m->s.qinfo, &m->s, - rep, rcode, &r->edns, m->s.region)) - r->edns.opt_list = NULL; - } else { - if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, &m->s, rep, rcode, - &r->edns, m->s.region)) - r->edns.opt_list = NULL; + if(bogus_override && m->s.qinfo.qtype == LDNS_RR_TYPE_A && + m->s.env->cfg->redirect_bogus_ipv4) { + fixed_address_encode(r->query_reply.c->buffer, + LDNS_RCODE_NOERROR, &m->s.qinfo, r->qid, + r->qflags, &r->edns, + m->s.env->cfg->redirect_bogus_ipv4); + } else if(bogus_override && + m->s.qinfo.qtype == LDNS_RR_TYPE_AAAA && + m->s.env->cfg->redirect_bogus_ipv6) { + fixed_address_encode(r->query_reply.c->buffer, + LDNS_RCODE_NOERROR, &m->s.qinfo, r->qid, + r->qflags, &r->edns, + m->s.env->cfg->redirect_bogus_ipv6); + } else { + if(rcode == LDNS_RCODE_SERVFAIL) { + if(!inplace_cb_reply_servfail_call(m->s.env, + &m->s.qinfo, &m->s, + rep, rcode, &r->edns, m->s.region)) + r->edns.opt_list = NULL; + } else { + if(!inplace_cb_reply_call(m->s.env, &m->s.qinfo, + &m->s, rep, rcode, &r->edns, + m->s.region)) + r->edns.opt_list = NULL; + } + error_encode(r->query_reply.c->buffer, rcode, + &m->s.qinfo, r->qid, r->qflags, &r->edns); } - error_encode(r->query_reply.c->buffer, rcode, &m->s.qinfo, - r->qid, r->qflags, &r->edns); comm_point_send_reply(&r->query_reply); } else { size_t udp_size = r->edns.udp_size; Index: util/config_file.c =================================================================== --- util/config_file.c (revision 4191) +++ util/config_file.c (working copy) @@ -273,6 +273,8 @@ cfg->ratelimit_factor = 10; cfg->qname_minimisation = 0; cfg->qname_minimisation_strict = 0; + cfg->redirect_bogus_ipv4 = NULL; + cfg->redirect_bogus_ipv6 = NULL; cfg->shm_enable = 0; cfg->shm_key = 11777; cfg->dnscrypt = 0; @@ -602,6 +604,10 @@ } oi[cfg->num_out_ifs++] = d; cfg->out_ifs = oi; + } else if (strcmp(opt, "redirect-bogus-ipv4:") == 0) { + cfg->redirect_bogus_ipv4 = strdup(val); + } else if (strcmp(opt, "redirect-bogus-ipv6:") == 0) { + cfg->redirect_bogus_ipv6 = strdup(val); } else { /* unknown or unsupported (from the set_option interface): * interface, outgoing-interface, access-control, @@ -1250,6 +1256,12 @@ free(cfg->dnstap_version); config_deldblstrlist(cfg->ratelimit_for_domain); config_deldblstrlist(cfg->ratelimit_below_domain); + if (cfg->redirect_bogus_ipv4) { + free(cfg->redirect_bogus_ipv4); + } + if (cfg->redirect_bogus_ipv6) { + free(cfg->redirect_bogus_ipv6); + } #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); Index: util/config_file.h =================================================================== --- util/config_file.h (revision 4191) +++ util/config_file.h (working copy) @@ -444,6 +444,9 @@ /** minimise QNAME in strict mode, minimise according to RFC. * Do not apply fallback */ int qname_minimisation_strict; + /** construct fake responses for DNSSEC failures */ + char *redirect_bogus_ipv4; + char *redirect_bogus_ipv6; /** SHM data - true if shm is enabled */ int shm_enable; /** SHM data - key for the shm */ Index: util/configlexer.lex =================================================================== --- util/configlexer.lex (revision 4191) +++ util/configlexer.lex (working copy) @@ -410,6 +410,8 @@ response-ip-tag{COLON} { YDVAR(2, VAR_RESPONSE_IP_TAG) } response-ip{COLON} { YDVAR(2, VAR_RESPONSE_IP) } response-ip-data{COLON} { YDVAR(2, VAR_RESPONSE_IP_DATA) } +redirect-bogus-ipv4{COLON} { YDVAR(1, VAR_REDIRECT_BOGUS_IPV4) } +redirect-bogus-ipv6{COLON} { YDVAR(1, VAR_REDIRECT_BOGUS_IPV6) } dnscrypt{COLON} { YDVAR(0, VAR_DNSCRYPT) } dnscrypt-enable{COLON} { YDVAR(1, VAR_DNSCRYPT_ENABLE) } dnscrypt-port{COLON} { YDVAR(1, VAR_DNSCRYPT_PORT) } Index: util/configparser.y =================================================================== --- util/configparser.y (revision 4191) +++ util/configparser.y (working copy) @@ -44,6 +44,7 @@ #include #include +#include "sldns/str2wire.h" #include "util/configyyrename.h" #include "util/config_file.h" #include "util/net_help.h" @@ -141,6 +142,7 @@ %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_FAKE_DSA VAR_FAKE_SHA1 %token VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR VAR_TRUST_ANCHOR_SIGNALING +%token VAR_REDIRECT_BOGUS_IPV4 VAR_REDIRECT_BOGUS_IPV6 %token VAR_USE_SYSTEMD VAR_SHM_ENABLE VAR_SHM_KEY %token VAR_DNSCRYPT VAR_DNSCRYPT_ENABLE VAR_DNSCRYPT_PORT VAR_DNSCRYPT_PROVIDER %token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT @@ -228,6 +230,7 @@ server_access_control_tag_data | server_access_control_view | server_qname_minimisation_strict | server_serve_expired | server_fake_dsa | server_log_identity | server_use_systemd | + server_redirect_bogus_ipv4 | server_redirect_bogus_ipv6 | server_response_ip_tag | server_response_ip | server_response_ip_data | server_shm_enable | server_shm_key | server_fake_sha1 | server_hide_trustanchor | server_trust_anchor_signaling | @@ -1873,6 +1876,34 @@ #endif } ; +server_redirect_bogus_ipv4: VAR_REDIRECT_BOGUS_IPV4 STRING_ARG + { + uint8_t data[4]; + size_t data_len = 4; + OUTYY(("P(name:%s)\n", $2)); + if(cfg_parser->cfg->redirect_bogus_ipv4) { + yyerror("redirect-bogus-ipv4, can only use one address"); + } + if(sldns_str2wire_a_buf($2, data, &data_len) != LDNS_WIREPARSE_ERR_OK) { + yyerror("redirect-bogus-ipv4, not a valid IPv4 address"); + } + free(cfg_parser->cfg->redirect_bogus_ipv4); + cfg_parser->cfg->redirect_bogus_ipv4 = $2; + } +server_redirect_bogus_ipv6: VAR_REDIRECT_BOGUS_IPV6 STRING_ARG + { + uint8_t data[16]; + size_t data_len = 16; + OUTYY(("P(name:%s)\n", $2)); + if(cfg_parser->cfg->redirect_bogus_ipv6) { + yyerror("redirect-bogus-ipv6, can only use one address"); + } + if(sldns_str2wire_aaaa_buf($2, data, &data_len) != LDNS_WIREPARSE_ERR_OK) { + yyerror("redirect-bogus-ipv6, not a valid IPv6 address"); + } + free(cfg_parser->cfg->redirect_bogus_ipv6); + cfg_parser->cfg->redirect_bogus_ipv6 = $2; + } stub_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); Index: util/data/msgencode.c =================================================================== --- util/data/msgencode.c (revision 4191) +++ util/data/msgencode.c (working copy) @@ -48,6 +48,7 @@ #include "util/regional.h" #include "util/net_help.h" #include "sldns/sbuffer.h" +#include "sldns/str2wire.h" #include "services/localzone.h" /** return code that means the function ran out of memory. negative so it does @@ -914,3 +915,63 @@ attach_edns_record(buf, &es); } } + +void +fixed_address_encode(sldns_buffer* buf, int r, struct query_info* qinfo, + uint16_t qid, uint16_t qflags, struct edns_data* edns, char* data) +{ + uint16_t flags; + uint8_t addr_data[16]; + size_t addr_len = 16; + if (qinfo->qtype == LDNS_RR_TYPE_A) { + sldns_str2wire_a_buf(data, addr_data, &addr_len); + } else if (qinfo->qtype == LDNS_RR_TYPE_AAAA) { + sldns_str2wire_aaaa_buf(data, addr_data, &addr_len); + } else { + return error_encode(buf, LDNS_RCODE_NOERROR, qinfo, qid, qflags, edns); + } + sldns_buffer_clear(buf); + sldns_buffer_write(buf, &qid, sizeof(uint16_t)); + flags = (uint16_t)(BIT_QR | BIT_RA | r); /* QR and retcode*/ + flags |= (qflags & (BIT_RD|BIT_CD)); /* copy RD and CD bit */ + sldns_buffer_write_u16(buf, flags); + if(qinfo) flags = 1; + else flags = 0; + sldns_buffer_write_u16(buf, flags); + sldns_buffer_write_u16(buf, 1); + flags = 0; + sldns_buffer_write(buf, &flags, sizeof(uint16_t)); + sldns_buffer_write(buf, &flags, sizeof(uint16_t)); + if(qinfo) { + // query + if(sldns_buffer_current(buf) == qinfo->qname) + sldns_buffer_skip(buf, (ssize_t)qinfo->qname_len); + else sldns_buffer_write(buf, qinfo->qname, qinfo->qname_len); + sldns_buffer_write_u16(buf, qinfo->qtype); + sldns_buffer_write_u16(buf, qinfo->qclass); + // faked answer + if(sldns_buffer_current(buf) == qinfo->qname) + sldns_buffer_skip(buf, (ssize_t)qinfo->qname_len); + else sldns_buffer_write(buf, qinfo->qname, qinfo->qname_len); + sldns_buffer_write_u16(buf, qinfo->qtype); + sldns_buffer_write_u16(buf, qinfo->qclass); + sldns_buffer_write_u16(buf, 0); + // TTL. Should we make this configurable too? + sldns_buffer_write_u16(buf, 5); + sldns_buffer_write_u16(buf, addr_len); + sldns_buffer_write(buf, addr_data, addr_len); + fflush(stderr); + } + sldns_buffer_flip(buf); + if(edns) { + struct edns_data es = *edns; + es.edns_version = EDNS_ADVERTISED_VERSION; + es.udp_size = EDNS_ADVERTISED_SIZE; + es.ext_rcode = 0; + es.bits &= EDNS_DO; + if(sldns_buffer_limit(buf) + calc_edns_field_size(&es) > + edns->udp_size) + return; + attach_edns_record(buf, &es); + } +} Index: util/data/msgencode.h =================================================================== --- util/data/msgencode.h (revision 4191) +++ util/data/msgencode.h (working copy) @@ -128,4 +128,20 @@ void error_encode(struct sldns_buffer* pkt, int r, struct query_info* qinfo, uint16_t qid, uint16_t qflags, struct edns_data* edns); +/** + * Encode a fixed address response. + * This is a fake answer to either an A or AAA query + * + * It will answer with that address + * + * @param pkt: where to store the packet. + * @param r: RCODE value to encode. + * @param qinfo: if not NULL, the query is included. + * @param qid: query ID to set in packet. network order. + * @param qflags: original query flags (to copy RD and CD bits). host order. + * @param edns: if not NULL, this is the query edns info, + * and an edns reply is attached. Only attached if EDNS record fits reply. + */ +void fixed_address_encode(struct sldns_buffer* pkt, int r, struct query_info* qinfo, + uint16_t qid, uint16_t qflags, struct edns_data* edns, char* address); #endif /* UTIL_DATA_MSGENCODE_H */ unbound-1.13.1/contrib/drop-tld.diff0000644000175000017500000000621114010434640016716 0ustar wouterwouterdiff --git a/daemon/worker.c b/daemon/worker.c index 263fcdd..f787b70 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1213,6 +1213,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error, addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); log_query_in(ip, qinfo.qname, qinfo.qtype, qinfo.qclass); } + + if(worker->env.cfg->drop_tld) { + int lab = dname_count_labels(qinfo.qname); + if (lab == 2) { + comm_point_drop_reply(repinfo); + verbose(VERB_ALGO, "Dropping one label query."); + return 0; + } + } if(qinfo.qtype == LDNS_RR_TYPE_AXFR || qinfo.qtype == LDNS_RR_TYPE_IXFR) { verbose(VERB_ALGO, "worker request: refused zone transfer."); diff --git a/util/config_file.h b/util/config_file.h index b3ef930..2791541 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -274,6 +274,8 @@ struct config_file { int prefetch_key; /** deny queries of type ANY with an empty answer */ int deny_any; + /** Drop TLD queries from clients **/ + int drop_tld; /** chrootdir, if not "" or chroot will be done */ char* chrootdir; diff --git a/util/configlexer.lex b/util/configlexer.lex index a86ddf5..9bbedbb 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -299,6 +299,7 @@ private-domain{COLON} { YDVAR(1, VAR_PRIVATE_DOMAIN) } prefetch-key{COLON} { YDVAR(1, VAR_PREFETCH_KEY) } prefetch{COLON} { YDVAR(1, VAR_PREFETCH) } deny-any{COLON} { YDVAR(1, VAR_DENY_ANY) } +drop-tld{COLON} { YDVAR(1, VAR_DROP_TLD) } stub-zone{COLON} { YDVAR(0, VAR_STUB_ZONE) } name{COLON} { YDVAR(1, VAR_NAME) } stub-addr{COLON} { YDVAR(1, VAR_STUB_ADDR) } diff --git a/util/configparser.y b/util/configparser.y index 10227a2..567d68e 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -164,6 +164,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_FAST_SERVER_PERMIL VAR_FAST_SERVER_NUM %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY +%token VAR_DROP_TLD %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES %token VAR_TLS_SESSION_TICKET_KEYS @@ -266,6 +267,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_tls_cert_bundle | server_tls_additional_port | server_low_rtt | server_fast_server_permil | server_fast_server_num | server_tls_win_cert | server_tcp_connection_limit | server_log_servfail | server_deny_any | + server_drop_tld | server_unknown_server_time_limit | server_log_tag_queryreply | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys @@ -1466,6 +1468,16 @@ server_deny_any: VAR_DENY_ANY STRING_ARG free($2); } ; + +server_drop_tld: VAR_DROP_TLD STRING_ARG + { + OUTYY(("P(server_drop_tld:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->drop_tld = (strcmp($2, "yes")==0); + free($2); + } + ; server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", $2)); unbound-1.13.1/contrib/unbound-fuzzme.patch0000644000175000017500000001466714010434640020366 0ustar wouterwouter>From cc9b927f8f29d989ddb8415fe6508a538546abca Mon Sep 17 00:00:00 2001 From: Jacob Hoffman-Andrews Date: Wed, 2 Jan 2019 22:52:51 -0800 Subject: [PATCH] Add unbound-fuzzme. This is a small program that simply parses a packet provided on stdout, for the purposes of fuzzing. --- .gitignore | 1 + Makefile.in | 22 ++++++++++++++++++++-- smallapp/unbound-fuzzme.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 smallapp/unbound-fuzzme.c diff --git a/.gitignore b/.gitignore index f4527fd8..6163f905 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ /unbound-checkconf /unbound-control /unbound-control-setup +/unbound-fuzzme /unbound-host /unbound.h /asynclook diff --git a/Makefile.in b/Makefile.in index af5b10f6..dacf1ab5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -177,6 +177,10 @@ shm_main.lo remote.lo stats.lo unbound.lo \ worker.lo @WIN_DAEMON_OBJ@ DAEMON_OBJ_LINK=$(DAEMON_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ $(COMPAT_OBJ) @WIN_DAEMON_OBJ_LINK@ +FUZZME_SRC=smallapp/unbound-fuzzme.c +FUZZME_OBJ=unbound-fuzzme.lo +FUZZME_OBJ_LINK=$(FUZZME_OBJ) worker_cb.lo $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ +$(COMPAT_OBJ) CHECKCONF_SRC=smallapp/unbound-checkconf.c smallapp/worker_cb.c CHECKCONF_OBJ=unbound-checkconf.lo worker_cb.lo CHECKCONF_OBJ_LINK=$(CHECKCONF_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ @@ -252,6 +256,7 @@ RSRC_OBJ=rsrc_svcinst.o rsrc_svcuninst.o rsrc_anchorupd.o rsrc_unbound.o \ rsrc_unbound_checkconf.o ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ + $(FUZZME_SRC) \ $(TESTBOUND_SRC) $(LOCKVERIFY_SRC) $(PKTVIEW_SRC) \ $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \ $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \ @@ -259,6 +264,7 @@ ALL_SRC=$(COMMON_SRC) $(UNITTEST_SRC) $(DAEMON_SRC) \ $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC)\ $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC) ALL_OBJ=$(COMMON_OBJ) $(UNITTEST_OBJ) $(DAEMON_OBJ) \ + $(FUZZME_OBJ) \ $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \ $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \ $(ASYNCLOOK_OBJ) $(STREAMTCP_OBJ) $(PERF_OBJ) $(DELAYER_OBJ) \ @@ -274,7 +280,7 @@ LINK_LIB=$(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFL all: $(COMMON_OBJ) $(ALLTARGET) -alltargets: unbound$(EXEEXT) unbound-checkconf$(EXEEXT) lib unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup $(WINAPPS) $(PYUNBOUND_TARGET) +alltargets: unbound$(EXEEXT) unbound-checkconf$(EXEEXT) lib unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup unbound-fuzzme$(EXEEXT) $(WINAPPS) $(PYUNBOUND_TARGET) # compat with BSD make, register suffix, and an implicit rule to actualise it. .SUFFIXES: .lo @@ -325,6 +331,9 @@ libunbound.la: $(LIBUNBOUND_OBJ_LINK) unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) +unbound-fuzzme$(EXEEXT): $(FUZZME_OBJ_LINK) libunbound.la + $(LINK) -o $@ $(FUZZME_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) + unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) @@ -447,7 +456,7 @@ util/configparser.c util/configparser.h: $(srcdir)/util/configparser.y clean: rm -f *.o *.d *.lo *~ tags - rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h + rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-fuzzme$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h rm -f $(ALL_SRC:.c=.lint) rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py rm -rf autom4te.cache .libs build doc/html doc/xml @@ -1183,6 +1192,15 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rtt.h $(srcdir)/services/authzone.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/validator/val_neg.h +unbound-fuzzme.lo unbound-fuzzme.o: $(srcdir)/smallapp/unbound-fuzzme.c \ + $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/rbtree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/remote.h \ diff --git a/smallapp/unbound-fuzzme.c b/smallapp/unbound-fuzzme.c new file mode 100644 index 00000000..74ae5204 --- /dev/null +++ b/smallapp/unbound-fuzzme.c @@ -0,0 +1,38 @@ +/* + * unbound-fuzzme.c - parse a packet provided on stdin (for fuzzing). + * + */ +#include "config.h" +#include "util/regional.h" +#include "util/fptr_wlist.h" +#include "sldns/sbuffer.h" + +#define SZ 10000 + +int main() { + char buffer[SZ]; + size_t n_read = fread(buffer, 1, SZ, stdin); + if (n_read == SZ) { + printf("input too big\n"); + return 1; + } + sldns_buffer *pkt = sldns_buffer_new(n_read); + sldns_buffer_init_frm_data(pkt, buffer, n_read); + + struct regional *region = regional_create(); + + struct msg_parse* prs; + struct edns_data edns; + prs = (struct msg_parse*)malloc(sizeof(struct msg_parse)); + if(!prs) { + printf("out of memory on incoming message\n"); + return 1; + } + memset(prs, 0, sizeof(*prs)); + memset(&edns, 0, sizeof(edns)); + sldns_buffer_set_position(pkt, 0); + if(parse_packet(pkt, prs, region) != LDNS_RCODE_NOERROR) { + printf("parse error\n"); + return 1; + } +} -- 2.17.1 unbound-1.13.1/contrib/libunbound.pc.in0000644000175000017500000000064014010434640017431 0ustar wouterwouterprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: unbound Description: Library with validating, recursive, and caching DNS resolver URL: http://www.unbound.net Version: @PACKAGE_VERSION@ Requires.private: @PC_PY_DEPENDENCY@ @PC_LIBBSD_DEPENDENCY@ @PC_CRYPTO_DEPENDENCY@ @PC_LIBEVENT_DEPENDENCY@ Libs: -L${libdir} -lunbound Libs.private: @SSLLIB@ @LIBS@ Cflags: -I${includedir} unbound-1.13.1/contrib/unbound_portable.service.in0000644000175000017500000000260714010434640021675 0ustar wouterwouter; This unit file is provided to run unbound as portable service. ; https://systemd.io/PORTABLE_SERVICES/ ; ; To use this unit file, please make sure you either compile unbound with the ; following options: ; ; - --with-chroot-dir="" ; ; Or put the following options in your unbound configuration file: ; ; - chroot: "" ; ; [Unit] Description=Validating, recursive, and caching DNS resolver Documentation=man:unbound(8) After=network.target Before=network-online.target nss-lookup.target Wants=nss-lookup.target [Install] WantedBy=multi-user.target [Service] ExecReload=+/bin/kill -HUP $MAINPID ExecStart=@UNBOUND_SBIN_DIR@/unbound -d -p NotifyAccess=main Type=notify CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_SYS_RESOURCE CAP_NET_RAW MemoryDenyWriteExecute=true NoNewPrivileges=true PrivateDevices=true PrivateTmp=true ProtectHome=true ProtectControlGroups=true ProtectKernelModules=true ProtectSystem=strict RuntimeDirectory=unbound ConfigurationDirectory=unbound StateDirectory=unbound RestrictAddressFamilies=AF_INET AF_INET6 AF_NETLINK AF_UNIX RestrictRealtime=true SystemCallArchitectures=native SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module mount @obsolete @resources RestrictNamespaces=yes LockPersonality=yes RestrictSUIDSGID=yes BindPaths=/run/systemd/notify BindReadOnlyPaths=/dev/log /run/systemd/journal/socket /run/systemd/journal/stdout unbound-1.13.1/contrib/metrics.awk0000644000175000017500000002420214010434640016511 0ustar wouterwouter# read output of unbound-control stats # and output prometheus metrics style output. # use these options: # server: extended-statistics: yes # statistics-cumulative: no # statistics-interval: 0 # remote-control: control-enable: yes # Can use it like unbound-control stats | awk -f "metrics.awk" BEGIN { FS="="; } # everything like total.num.queries=value is put in val["total.num.queries"] /^.*\..*=/ { val[$1]=$2; } # print the output metrics END { print "# HELP unbound_hits_queries Unbound DNS traffic and cache hits" print "# TYPE unbound_hits_queries gauge" print "unbound_hits_queries{type=\"total.num.queries\"} " val["total.num.queries"]; for (x=0; x<99; x++) { if(val["thread" $x ".num.queries"] != "") { print "unbound_hits_queries{type=\"thread" $x ".num.queries\"} " val["thread" $x ".num.queries"]; } } print "unbound_hits_queries{type=\"total.num.cachehits\"} " val["total.num.cachehits"]; print "unbound_hits_queries{type=\"total.num.prefetch\"} " val["total.num.prefetch"]; print "unbound_hits_queries{type=\"num.query.tcp\"} " val["num.query.tcp"]; print "unbound_hits_queries{type=\"num.query.tcpout\"} " val["num.query.tcpout"]; print "unbound_hits_queries{type=\"num.query.tls\"} " val["num.query.tls"]; print "unbound_hits_queries{type=\"num.query.tls.resume\"} " val["num.query.tls.resume"]; print "unbound_hits_queries{type=\"num.query.ipv6\"} " val["num.query.ipv6"]; print "unbound_hits_queries{type=\"unwanted.queries\"} " val["unwanted.queries"]; print "" print "# HELP unbound_queue_queries Unbound requestlist size" print "# TYPE unbound_queue_queries gauge" print "unbound_queue_queries{type=\"total.requestlist.avg\"} " val["total.requestlist.avg"]; print "unbound_queue_queries{type=\"total.requestlist.max\"} " val["total.requestlist.max"]; print "unbound_queue_queries{type=\"total.requestlist.overwritten\"} " val["total.requestlist.overwritten"]; print "unbound_queue_queries{type=\"total.requestlist.exceeded\"} " val["total.requestlist.exceeded"]; print "" print "# HELP unbound_memory_bytes Unbound memory usage" print "# TYPE unbound_memory_bytes gauge" print "unbound_memory_bytes{type=\"mem.cache.rrset\"} " val["mem.cache.rrset"]; print "unbound_memory_bytes{type=\"mem.cache.message\"} " val["mem.cache.message"]; print "unbound_memory_bytes{type=\"mem.mod.iterator\"} " val["mem.mod.iterator"]; if(val["mem.mod.validator"] != "") { print "unbound_memory_bytes{type=\"mem.mod.validator\"} " val["mem.mod.validator"]; } if(val["mem.mod.respip"] != "") { print "unbound_memory_bytes{type=\"mem.mod.respip\"} " val["mem.mod.respip"]; } if(val["mem.mod.subnet"] != "") { print "unbound_memory_bytes{type=\"mem.mod.subnet\"} " val["mem.mod.subnet"]; } if(val["mem.mod.ipsecmod"] != "") { print "unbound_memory_bytes{type=\"mem.mod.ipsecmod\"} " val["mem.mod.ipsecmod"]; } if(val["mem.mod.dynlibmod"] != "") { print "unbound_memory_bytes{type=\"mem.mod.dynlibmod\"} " val["mem.mod.dynlibmod"]; } print "unbound_memory_bytes{type=\"msg.cache.count\"} " val["msg.cache.count"]; print "unbound_memory_bytes{type=\"rrset.cache.count\"} " val["rrset.cache.count"]; print "unbound_memory_bytes{type=\"infra.cache.count\"} " val["infra.cache.count"]; print "unbound_memory_bytes{type=\"key.cache.count\"} " val["key.cache.count"]; print "" print "# HELP unbound_by_type_queries Unbound DNS queries by type" print "# TYPE unbound_by_type_queries gauge" for(x in val) { if(x ~ /^num.query.type./) { if(val[x] != "") { split(x, a, "."); print "unbound_by_type_queries{type=\"" a[4] "\"} " val[x]; } } } print "" print "# HELP unbound_by_class_queries Unbound DNS queries by class" print "# TYPE unbound_by_class_queries gauge" for(x in val) { if(x ~ /^num.query.class./) { if(val[x] != "") { split(x, a, "."); print "unbound_by_class_queries{class=\"" a[4] "\"} " val[x]; } } } print "" print "# HELP unbound_by_opcode_queries Unbound DNS queries by opcode" print "# TYPE unbound_by_opcode_queries gauge" for(x in val) { if(x ~ /^num.query.opcode./) { if(val[x] != "") { split(x, a, "."); print "unbound_by_opcode_queries{opcode=\"" a[4] "\"} " val[x]; } } } print "" print "# HELP unbound_by_rcode_queries Unbound DNS answers by rcode" print "# TYPE unbound_by_rcode_queries gauge" for(x in val) { if(x ~ /^num.answer.rcode./) { if(val[x] != "") { split(x, a, "."); print "unbound_by_rcode_queries{rcode=\"" a[4] "\"} " val[x]; } } } print "" print "# HELP unbound_by_flags_queries Unbound DNS queries by flags" print "# TYPE unbound_by_flags_queries gauge" for(x in val) { if(x ~ /^num.query.flags./) { if(val[x] != "") { split(x, a, "."); print "unbound_by_flags_queries{flag=\"" a[4] "\"} " val[x]; } } } if(val["num.query.edns.present"] != "") { print "unbound_by_flags_queries{flag=\"num.query.edns.present\"} " val["num.query.edns.present"]; } if(val["num.query.edns.DO"] != "") { print "unbound_by_flags_queries{flag=\"num.query.edns.DO\"} " val["num.query.edns.DO"]; } print "" print "# HELP unbound_histogram_seconds Unbound DNS histogram of reply time" print "# TYPE unbound_histogram_seconds gauge" print "unbound_histogram_seconds{bucket=\"000000.000000.to.000000.000001\"} " val["histogram.000000.000000.to.000000.000001"]; print "unbound_histogram_seconds{bucket=\"000000.000001.to.000000.000002\"} " val["histogram.000000.000001.to.000000.000002"]; print "unbound_histogram_seconds{bucket=\"000000.000002.to.000000.000004\"} " val["histogram.000000.000002.to.000000.000004"]; print "unbound_histogram_seconds{bucket=\"000000.000004.to.000000.000008\"} " val["histogram.000000.000004.to.000000.000008"]; print "unbound_histogram_seconds{bucket=\"000000.000008.to.000000.000016\"} " val["histogram.000000.000008.to.000000.000016"]; print "unbound_histogram_seconds{bucket=\"000000.000016.to.000000.000032\"} " val["histogram.000000.000016.to.000000.000032"]; print "unbound_histogram_seconds{bucket=\"000000.000032.to.000000.000064\"} " val["histogram.000000.000032.to.000000.000064"]; print "unbound_histogram_seconds{bucket=\"000000.000064.to.000000.000128\"} " val["histogram.000000.000064.to.000000.000128"]; print "unbound_histogram_seconds{bucket=\"000000.000128.to.000000.000256\"} " val["histogram.000000.000128.to.000000.000256"]; print "unbound_histogram_seconds{bucket=\"000000.000256.to.000000.000512\"} " val["histogram.000000.000256.to.000000.000512"]; print "unbound_histogram_seconds{bucket=\"000000.000512.to.000000.001024\"} " val["histogram.000000.000512.to.000000.001024"]; print "unbound_histogram_seconds{bucket=\"000000.001024.to.000000.002048\"} " val["histogram.000000.001024.to.000000.002048"]; print "unbound_histogram_seconds{bucket=\"000000.002048.to.000000.004096\"} " val["histogram.000000.002048.to.000000.004096"]; print "unbound_histogram_seconds{bucket=\"000000.004096.to.000000.008192\"} " val["histogram.000000.004096.to.000000.008192"]; print "unbound_histogram_seconds{bucket=\"000000.008192.to.000000.016384\"} " val["histogram.000000.008192.to.000000.016384"]; print "unbound_histogram_seconds{bucket=\"000000.016384.to.000000.032768\"} " val["histogram.000000.016384.to.000000.032768"]; print "unbound_histogram_seconds{bucket=\"000000.032768.to.000000.065536\"} " val["histogram.000000.032768.to.000000.065536"]; print "unbound_histogram_seconds{bucket=\"000000.065536.to.000000.131072\"} " val["histogram.000000.065536.to.000000.131072"]; print "unbound_histogram_seconds{bucket=\"000000.131072.to.000000.262144\"} " val["histogram.000000.131072.to.000000.262144"]; print "unbound_histogram_seconds{bucket=\"000000.262144.to.000000.524288\"} " val["histogram.000000.262144.to.000000.524288"]; print "unbound_histogram_seconds{bucket=\"000000.524288.to.000001.000000\"} " val["histogram.000000.524288.to.000001.000000"]; print "unbound_histogram_seconds{bucket=\"000001.000000.to.000002.000000\"} " val["histogram.000001.000000.to.000002.000000"]; print "unbound_histogram_seconds{bucket=\"000002.000000.to.000004.000000\"} " val["histogram.000002.000000.to.000004.000000"]; print "unbound_histogram_seconds{bucket=\"000004.000000.to.000008.000000\"} " val["histogram.000004.000000.to.000008.000000"]; print "unbound_histogram_seconds{bucket=\"000008.000000.to.000016.000000\"} " val["histogram.000008.000000.to.000016.000000"]; print "unbound_histogram_seconds{bucket=\"000016.000000.to.000032.000000\"} " val["histogram.000016.000000.to.000032.000000"]; print "unbound_histogram_seconds{bucket=\"000032.000000.to.000064.000000\"} " val["histogram.000032.000000.to.000064.000000"]; print "unbound_histogram_seconds{bucket=\"000064.000000.to.000128.000000\"} " val["histogram.000064.000000.to.000128.000000"]; print "unbound_histogram_seconds{bucket=\"000128.000000.to.000256.000000\"} " val["histogram.000128.000000.to.000256.000000"]; print "unbound_histogram_seconds{bucket=\"000256.000000.to.000512.000000\"} " val["histogram.000256.000000.to.000512.000000"]; print "unbound_histogram_seconds{bucket=\"000512.000000.to.001024.000000\"} " val["histogram.000512.000000.to.001024.000000"]; print "unbound_histogram_seconds{bucket=\"001024.000000.to.002048.000000\"} " val["histogram.001024.000000.to.002048.000000"]; print "unbound_histogram_seconds{bucket=\"002048.000000.to.004096.000000\"} " val["histogram.002048.000000.to.004096.000000"]; print "unbound_histogram_seconds{bucket=\"004096.000000.to.008192.000000\"} " val["histogram.004096.000000.to.008192.000000"]; print "unbound_histogram_seconds{bucket=\"008192.000000.to.016384.000000\"} " val["histogram.008192.000000.to.016384.000000"]; print "unbound_histogram_seconds{bucket=\"016384.000000.to.032768.000000\"} " val["histogram.016384.000000.to.032768.000000"]; print "unbound_histogram_seconds{bucket=\"032768.000000.to.065536.000000\"} " val["histogram.032768.000000.to.065536.000000"]; print "unbound_histogram_seconds{bucket=\"065536.000000.to.131072.000000\"} " val["histogram.065536.000000.to.131072.000000"]; print "unbound_histogram_seconds{bucket=\"131072.000000.to.262144.000000\"} " val["histogram.131072.000000.to.262144.000000"]; print "unbound_histogram_seconds{bucket=\"262144.000000.to.524288.000000\"} " val["histogram.262144.000000.to.524288.000000"]; print "" } unbound-1.13.1/contrib/build-unbound-localzone-from-hosts.pl0000644000175000017500000000226714010434640023535 0ustar wouterwouter#!/usr/bin/perl -WT use strict; use warnings; my $hostsfile = '/etc/hosts'; my $localzonefile = '/etc/unbound/localzone.conf.new'; my $localzone = 'example.com'; open( HOSTS,"<${hostsfile}" ) or die( "Could not open ${hostsfile}: $!" ); open( ZONE,">${localzonefile}" ) or die( "Could not open ${localzonefile}: $!" ); print ZONE "server:\n\n"; print ZONE "local-zone: \"${localzone}\" transparent\n\n"; my %ptrhash; while ( my $hostline = ) { # Skip comments if ( $hostline !~ "^#" and $hostline !~ '^\s+$' ) { my @entries = split( /\s+/, $hostline ); my $ip; my $count = 0; foreach my $entry ( @entries ) { if ( $count == 0 ) { $ip = $entry; } else { if ( $count == 1) { # Only return localhost for 127.0.0.1 and ::1 if ( ($ip ne '127.0.0.1' and $ip ne '::1') or $entry =~ 'localhost' ) { if ( ! defined $ptrhash{$ip} ) { $ptrhash{$ip} = $entry; print ZONE "local-data-ptr: \"$ip $entry\"\n"; } } } # Use AAAA for IPv6 addresses my $a = 'A'; if ( $ip =~ ':' ) { $a = 'AAAA'; } print ZONE "local-data: \"$entry ${a} $ip\"\n"; } $count++; } print ZONE "\n"; } } __END__ unbound-1.13.1/contrib/create_unbound_ad_servers.cmd0000644000175000017500000000214514010434640022240 0ustar wouterwouter@Echo off rem Convert the Yoyo.org anti-ad server listing rem into an unbound dns spoof redirection list. rem Written by Y.Voinov (c) 2014 rem Note: Wget required! rem Variables set prefix="C:\Program Files (x86)" set dst_dir=%prefix%\Unbound set work_dir=%TEMP% set list_addr="http://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml&showintro=1&startdate%5Bday%5D=&startdate%5Bmonth%5D=&startdate%5Byear%5D=" rem Check Wget installed for /f "delims=" %%a in ('where wget') do @set wget=%%a if /I "%wget%"=="" echo Wget not found. If installed, add path to PATH environment variable. & exit 1 echo Wget found: %wget% "%wget%" -O %work_dir%\yoyo_ad_servers %list_addr% del /Q /F /S %dst_dir%\unbound_ad_servers for /F "eol=; tokens=*" %%a in (%work_dir%\yoyo_ad_servers) do ( echo local-zone: %%a redirect>>%dst_dir%\unbound_ad_servers echo local-data: "%%a A 127.0.0.1">>%dst_dir%\unbound_ad_servers ) echo Done. rem then add an include line to your unbound.conf pointing to the full path of rem the unbound_ad_servers file: rem rem include: $dst_dir/unbound_ad_servers rem unbound-1.13.1/contrib/unbound.socket.in0000644000175000017500000000021614010434640017627 0ustar wouterwouter[Socket] ListenDatagram=127.0.0.1:1153 ListenStream=127.0.0.1:1153 # ListenStream=@UNBOUND_RUN_DIR@/control [Install] WantedBy=sockets.target unbound-1.13.1/contrib/selinux/0000755000175000017500000000000014010434640016026 5ustar wouterwouterunbound-1.13.1/contrib/selinux/unbound.te0000644000175000017500000000243114010434640020032 0ustar wouterwouterpolicy_module(unbound, 0.1.0) type unbound_t; type unbound_conf_t; type unbound_exec_t; type unbound_initrc_exec_t; type unbound_var_run_t; init_daemon_domain(unbound_t, unbound_exec_t) init_script_file(unbound_initrc_exec_t) role system_r types unbound_t; # XXX # unbound-{checkconf,control} are not protected. Do we need protect them? # Unbound daemon auth_use_nsswitch(unbound_t) dev_read_urand(unbound_t) corenet_all_recvfrom_unlabeled(unbound_t) corenet_tcp_bind_all_nodes(unbound_t) corenet_tcp_bind_dns_port(unbound_t) corenet_tcp_bind_rndc_port(unbound_t) corenet_udp_bind_all_nodes(unbound_t) corenet_udp_bind_all_unreserved_ports(unbound_t) corenet_udp_bind_dns_port(unbound_t) files_read_etc_files(unbound_t) files_pid_file(unbound_var_run_t) files_type(unbound_conf_t) libs_use_ld_so(unbound_t) libs_use_shared_libs(unbound_t) logging_send_syslog_msg(unbound_t) manage_files_pattern(unbound_t, unbound_var_run_t, unbound_var_run_t) miscfiles_read_localization(unbound_t) read_files_pattern(unbound_t, unbound_conf_t, unbound_conf_t) allow unbound_t self:capability { setuid chown net_bind_service setgid dac_override }; allow unbound_t self:tcp_socket create_stream_socket_perms; allow unbound_t self:udp_socket create_socket_perms; ################################################### unbound-1.13.1/contrib/selinux/unbound.fc0000644000175000017500000000037414010434640020016 0ustar wouterwouter/etc/unbound(/.*)? system_u:object_r:unbound_conf_t:s0 /etc/rc\.d/init\.d/unbound -- system_u:object_r:unbound_initrc_exec_t:s0 /usr/sbin/unbound -- system_u:object_r:unbound_exec_t:s0 /var/run/unbound(/.*)? system_u:object_r:unbound_var_run_t:s0 unbound-1.13.1/contrib/README0000644000175000017500000000676614010434640015236 0ustar wouterwouterThese files are contributed to unbound, and are not part of the official distribution but may be helpful. * rc_d_unbound: FreeBSD compatible /etc/rc.d script. * parseunbound.pl: perl script to run from cron that parses statistics from the log file and stores them. * unbound.spec and unbound.init: RPM specfile and Linux rc.d initfile. * update-anchor.sh: shell script that uses unbound-host to update a set of trust anchor files. Run from cron twice a month. * unbound_munin_ : plugin for munin statistics report * unbound_cacti.tar.gz : setup files for cacti statistics report * selinux: the .fc and .te files for SElinux protection of the unbound daemon * unbound.plist: launchd configuration file for MacOSX. * build-unbound-localzone-from-hosts.pl: perl script to turn /etc/hosts into a local-zone and local-data include file for unbound.conf. * unbound-host.nagios.patch: makes unbound-host return status that fits right in with the nagios monitoring framework. Contributed by Migiel de Vos. * patch_rsamd5_enable.diff: this patch enables RSAMD5 validation (otherwise it is treated as insecure). The RSAMD5 algorithm is deprecated (RFC6725). * create_unbound_ad_servers.sh: shell script to enter anti-ad server lists. * create_unbound_ad_servers.cmd: windows script to enter anti-ad server lists. * unbound_cache.sh: shell script to save and load the cache. * unbound_cache.cmd: windows script to save and load the cache. * warmup.sh: shell script to warm up DNS cache by your own MRU domains. * warmup.cmd: windows script to warm up DNS cache by your own MRU domains. * aaaa-filter-iterator.patch: adds config option aaaa-filter: yes that works like the BIND feature (removes AAAA records unless AAAA-only domain). Useful for certain 'broken IPv6 default route' scenarios. Patch from Stephane Lapie for ASAHI Net. * unbound_smf23.tar.gz: Solaris SMF installation/removal scripts. Contributed by Yuri Voinov. * unbound.socket and unbound.service: systemd files for unbound, install them in /usr/lib/systemd/system. Contributed by Sami Kerola and Pavel Odintsov. * unbound_portable.service.in: systemd file for use unbound as portable service, see comments in the file. Contributed by Frzk. * redirect-bogus.patch: Return configured address for bogus A and AAAA answers, instead of SERVFAIL. Contributed by SIDN. * fastrpz.patch: fastrpz support from Farsight Security. * libunbound.so.conf: ltrace.conf file, see ltrace.conf(5), for libunbound. * unbound-querycachedb.py: utility to show data stored in cachedb backend for a particular query name and type. It requires dnspython and (for redis backend) redis Python modules. * unbound-fuzzme.patch: adds unbound-fuzzme program that parses a packet from stdin. Used with fuzzers, patch from Jacob Hoffman-Andrews. * unbound-fuzzers.tar.bz2: three programs for fuzzing, that are 1:1 replacements for unbound-fuzzme.c that gets created after applying the contrib/unbound-fuzzme.patch. They are contributed by Eric Sesterhenn from X41 D-Sec. * drop-tld.diff: adds option drop-tld: yesno that drops 2 label queries, to stop random floods. Apply with patch -p1 < contrib/drop-tld.diff and compile. From Saksham Manchanda (Secure64). Please note that we think this will drop DNSKEY and DS lookups for tlds and hence break DNSSEC lookups for downstream clients. * drop2rpz: perl script that converts the Spamhaus DROP-List in RPZ-Format, contributed by Andreas Schulze. * metrics.awk: awk script that can convert unbound-control stats to Prometheus metrics format output. unbound-1.13.1/contrib/update-anchor.sh0000755000175000017500000001037414010434640017435 0ustar wouterwouter#!/bin/sh # update-anchor.sh, update a trust anchor. # Copyright 2008, W.C.A. Wijngaards # This file is BSD licensed, see doc/LICENSE. # which validating lookup to use. ubhost=unbound-host usage ( ) { echo "usage: update-anchor [-r hs] [-b] " echo " performs an update of trust anchor file" echo " the trust anchor file is overwritten with the latest keys" echo " the trust anchor file should contain only keys for one zone" echo " -b causes keyfile to be made in bind format." echo " without -b the file is made in unbound format." echo " " echo "alternate:" echo " update-anchor [-r hints] [-b] -d directory" echo " update all .anchor files in the directory." echo " " echo " name the files br.anchor se.anchor ..., and include them in" echo " the validating resolver config file." echo " put keys for the root in a file with the name root.anchor." echo "" echo "-r root.hints use different root hints. Strict option order." echo "" echo "Exit code 0 means anchors updated, 1 no changes, others are errors." exit 2 } if test $# -eq 0; then usage fi bindformat="no" filearg='-f' roothints="" if test X"$1" = "X-r"; then shift roothints="$1" shift fi if test X"$1" = "X-b"; then shift bindformat="yes" filearg='-F' fi if test $# -ne 2; then echo "arguments wrong." usage fi do_update ( ) { # arguments: zonename="$1" keyfile="$2" tmpfile="/tmp/update-anchor.$$" tmp2=$tmpfile.2 tmp3=$tmpfile.3 rh="" if test -n "$roothints"; then echo "server: root-hints: '$roothints'" > $tmp3 rh="-C $tmp3" fi $ubhost -v $rh $filearg "$keyfile" -t DNSKEY "$zonename" >$tmpfile if test $? -ne 0; then rm -f $tmpfile echo "Error: Could not update zone $zonename anchor file $keyfile" echo "Cause: $ubhost lookup failed" echo " (Is the domain decommissioned? Is connectivity lost?)" return 2 fi # has the lookup been DNSSEC validated? if grep '(secure)$' $tmpfile >/dev/null 2>&1; then : else rm -f $tmpfile echo "Error: Could not update zone $zonename anchor file $keyfile" echo "Cause: result of lookup was not secure" echo " (keys too far out of date? domain changed ownership? need root hints?)" return 3 fi if test $bindformat = "yes"; then # are there any KSK keys on board? echo 'trusted-keys {' > "$tmp2" if grep ' has DNSKEY record 257' $tmpfile >/dev/null 2>&1; then # store KSK keys in anchor file grep '(secure)$' $tmpfile | \ grep ' has DNSKEY record 257' | \ sed -e 's/ (secure)$/";/' | \ sed -e 's/ has DNSKEY record \([0-9]*\) \([0-9]*\) \([0-9]*\) /. \1 \2 \3 "/' | \ sed -e 's/^\.\././' | sort >> "$tmp2" else # store all keys in the anchor file grep '(secure)$' $tmpfile | \ sed -e 's/ (secure)$/";/' | \ sed -e 's/ has DNSKEY record \([0-9]*\) \([0-9]*\) \([0-9]*\) /. \1 \2 \3 "/' | \ sed -e 's/^\.\././' | sort >> "$tmp2" fi echo '};' >> "$tmp2" else #not bindformat # are there any KSK keys on board? if grep ' has DNSKEY record 257' $tmpfile >/dev/null 2>&1; then # store KSK keys in anchor file grep '(secure)$' $tmpfile | \ grep ' has DNSKEY record 257' | \ sed -e 's/ (secure)$//' | \ sed -e 's/ has DNSKEY record /. IN DNSKEY /' | \ sed -e 's/^\.\././' | sort > "$tmp2" else # store all keys in the anchor file grep '(secure)$' $tmpfile | \ sed -e 's/ (secure)$//' | \ sed -e 's/ has DNSKEY record /. IN DNSKEY /' | \ sed -e 's/^\.\././' | sort > "$tmp2" fi fi # endif-bindformat # copy over if changed diff $tmp2 $keyfile >/dev/null 2>&1 if test $? -eq 1; then # 0 means no change, 2 means trouble. cat $tmp2 > $keyfile no_updated=0 echo "$zonename key file $keyfile updated." else echo "$zonename key file $keyfile unchanged." fi rm -f $tmpfile $tmp2 $tmp3 } no_updated=1 if test X"$1" = "X-d"; then tdir="$2" echo "start updating in $2" for x in $tdir/*.anchor; do if test `basename "$x"` = "root.anchor"; then zname="." else zname=`basename "$x" .anchor` fi do_update "$zname" "$x" done echo "done updating in $2" else # regular invocation if test X"$1" = "X."; then zname="$1" else # strip trailing dot from zone name zname="`echo $1 | sed -e 's/\.$//'`" fi kfile="$2" do_update $zname $kfile fi exit $no_updated unbound-1.13.1/contrib/rc_d_unbound0000755000175000017500000000111214010434640016721 0ustar wouterwouter#!/bin/sh # # unbound freebsd startup rc.d script, modified from the named script. # uses the default unbound installation path and pidfile location. # copy this to /etc/rc.d/unbound # and put unbound_enable="YES" into rc.conf # # PROVIDE: unbound # REQUIRE: SERVERS cleanvar # KEYWORD: shutdown . /etc/rc.subr name="unbound" rcvar=`set_rcvar` load_rc_config $name command="/usr/local/sbin/unbound" pidfile=${unbound_pidfile:-"/usr/local/etc/unbound/unbound.pid"} command_args=${unbound_flags:-"-c /usr/local/etc/unbound/unbound.conf"} extra_commands="reload" run_rc_command "$1" unbound-1.13.1/contrib/unbound.spec_fedora0000644000175000017500000003551514010434640020216 0ustar wouterwouter# not ready yet %{?!with_python: %global with_python 1} %if %{with_python} %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} %endif Summary: Validating, recursive, and caching DNS(SEC) resolver Name: unbound Version: 1.4.13 Release: 1%{?dist} License: BSD Url: http://www.nlnetlabs.nl/unbound/ Source: http://www.unbound.net/downloads/%{name}-%{version}.tar.gz Source1: unbound.init Source2: unbound.conf Source3: unbound.munin Source4: unbound_munin_ Source5: root.key Patch1: unbound-1.2-glob.patch Group: System Environment/Daemons BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: flex, openssl-devel , ldns-devel >= 1.5.0, BuildRequires: libevent-devel expat-devel %if %{with_python} BuildRequires: python-devel swig %endif # Required for SVN versions # BuildRequires: bison Requires(post): chkconfig Requires(preun): chkconfig Requires(preun): initscripts Requires(postun): initscripts Requires: ldns >= 1.5.0 Requires(pre): shadow-utils Obsoletes: dnssec-conf < 1.27-2 Provides: dnssec-conf = 1.27-1 %description Unbound is a validating, recursive, and caching DNS(SEC) resolver. The C implementation of Unbound is developed and maintained by NLnet Labs. It is based on ideas and algorithms taken from a java prototype developed by Verisign labs, Nominet, Kirei and ep.net. Unbound is designed as a set of modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but are linked into an application) are easily possible. %package munin Summary: Plugin for the munin / munin-node monitoring package Group: System Environment/Daemons Requires: munin-node Requires: %{name} = %{version}-%{release}, bc %description munin Plugin for the munin / munin-node monitoring package %package devel Summary: Development package that includes the unbound header files Group: Development/Libraries Requires: %{name}-libs = %{version}-%{release}, openssl-devel, ldns-devel %description devel The devel package contains the unbound library and the include files %package libs Summary: Libraries used by the unbound server and client applications Group: Applications/System Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Requires: openssl %description libs Contains libraries used by the unbound server and client applications %if %{with_python} %package python Summary: Python modules and extensions for unbound Group: Applications/System Requires: %{name}-libs = %{version}-%{release} %description python Python modules and extensions for unbound %endif %prep %setup -q %patch1 -p1 %build %configure --with-ldns= --with-libevent --with-pthreads --with-ssl \ --disable-rpath --disable-static \ --with-conf-file=%{_sysconfdir}/%{name}/unbound.conf \ --with-pidfile=%{_localstatedir}/run/%{name}/%{name}.pid \ %if %{with_python} --with-pythonmodule --with-pyunbound \ %endif --enable-sha2 --disable-gost %{__make} %{?_smp_mflags} %install rm -rf %{buildroot} %{__make} DESTDIR=%{buildroot} install install -d 0755 %{buildroot}%{_initrddir} install -m 0755 %{SOURCE1} %{buildroot}%{_initrddir}/unbound install -m 0755 %{SOURCE2} %{buildroot}%{_sysconfdir}/unbound # Install munin plugin and its softlinks install -d 0755 %{buildroot}%{_sysconfdir}/munin/plugin-conf.d install -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/munin/plugin-conf.d/unbound install -d 0755 %{buildroot}%{_datadir}/munin/plugins/ install -m 0755 %{SOURCE4} %{buildroot}%{_datadir}/munin/plugins/unbound for plugin in unbound_munin_hits unbound_munin_queue unbound_munin_memory unbound_munin_by_type unbound_munin_by_class unbound_munin_by_opcode unbound_munin_by_rcode unbound_munin_by_flags unbound_munin_histogram; do ln -s unbound %{buildroot}%{_datadir}/munin/plugins/$plugin done # install root and DLV key install -m 0644 %{SOURCE5} %{SOURCE6} %{buildroot}%{_sysconfdir}/unbound/ # remove static library from install (fedora packaging guidelines) rm %{buildroot}%{_libdir}/*.la %if %{with_python} rm %{buildroot}%{python_sitearch}/*.la %endif mkdir -p %{buildroot}%{_localstatedir}/run/unbound %clean rm -rf ${RPM_BUILD_ROOT} %files %defattr(-,root,root,-) %doc doc/README doc/CREDITS doc/LICENSE doc/FEATURES %attr(0755,root,root) %{_initrddir}/%{name} %attr(0755,root,root) %dir %{_sysconfdir}/%{name} %ghost %attr(0755,unbound,unbound) %dir %{_localstatedir}/run/%{name} %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/%{name}/unbound.conf %attr(0644,root,root) %config(noreplace) %{_sysconfdir}/%{name}/root.key %{_sbindir}/* %{_mandir}/*/* %if %{with_python} %files python %defattr(-,root,root,-) %{python_sitearch}/* %doc libunbound/python/examples/* %doc pythonmod/examples/* %endif %files munin %defattr(-,root,root,-) %config(noreplace) %{_sysconfdir}/munin/plugin-conf.d/unbound %{_datadir}/munin/plugins/unbound* %files devel %defattr(-,root,root,-) %{_libdir}/libunbound.so %{_includedir}/unbound.h %doc README %files libs %defattr(-,root,root,-) %{_libdir}/libunbound.so.* %doc doc/README doc/LICENSE %pre getent group unbound >/dev/null || groupadd -r unbound getent passwd unbound >/dev/null || \ useradd -r -g unbound -d %{_sysconfdir}/unbound -s /sbin/nologin \ -c "Unbound DNS resolver" unbound exit 0 %post /sbin/chkconfig --add %{name} %post libs -p /sbin/ldconfig %preun if [ "$1" -eq 0 ]; then /sbin/service %{name} stop >/dev/null 2>&1 /sbin/chkconfig --del %{name} fi %postun if [ "$1" -ge "1" ]; then /sbin/service %{name} condrestart >/dev/null 2>&1 || : fi %postun libs -p /sbin/ldconfig %changelog * Tue Sep 06 2011 Paul Wouters - 1.4.13-1 - Updated to 1.4.13 - Fix install location of pythonmod from sitelib to sitearch - Removed patches merged in by upstream - Removed versioned openssl dep, it differs per branch * Mon Aug 08 2011 Paul Wouters - 1.4.12-3 - Added pythonmod docs and examples - Fix for python module load in the server (Tom Hendrikx) - No longer enable --enable-debug as it causes degraded performance under load. * Mon Jul 18 2011 Paul Wouters - 1.4.12-1 - Updated to 1.4.12 * Sun Jul 03 2011 Paul Wouters - 1.4.11-1 - Updated to 1.4.11 - removed integrated CVE patch - updated stock unbound.conf for new options introduced * Mon Jun 06 2011 Paul Wouters - 1.4.10-1 - Added ghost for /var/run/unbound (bz#656710) * Mon Jun 06 2011 Paul Wouters - 1.4.9-3 - rebuilt * Wed May 25 2011 Paul Wouters - 1.4.9-2 - Applied patch for CVE-2011-1922 DoS vulnerability * Sun Mar 27 2011 Paul Wouters - 1.4.9-1 - Updated to 1.4.9 * Sat Feb 12 2011 Paul Wouters - 1.4.8-2 - rebuilt * Tue Jan 25 2011 Paul Wouters - 1.4.8-1 - Updated to 1.4.8 - Enable root key for DNSSEC - Fix unbound-munin to use proper file (could cause excessive logging) - Build unbound-python per default - Disable gost as Fedora/EPEL does not allow ECC and has mangled openssl * Tue Oct 26 2010 Paul Wouters - 1.4.5-4 - Revert last build - it was on the wrong branch * Tue Oct 26 2010 Paul Wouters - 1.4.5-3 - Disable do-ipv6 per default - causes severe degradation on non-ipv6 machines (see comments in inbound.conf) * Tue Jun 15 2010 Paul Wouters - 1.4.5-2 - Bump release - forgot to upload the new tar ball. * Tue Jun 15 2010 Paul Wouters - 1.4.5-1 - Upgraded to 1.4.5 * Mon May 31 2010 Paul Wouters - 1.4.4-2 - Added accidentally omitted svn patches to cvs * Mon May 31 2010 Paul Wouters - 1.4.4-1 - Upgraded to 1.4.4 with svn patches - Obsolete dnssec-conf to ensure it is de-installed * Thu Mar 11 2010 Paul Wouters - 1.4.3-1 - Update to 1.4.3 that fixes 64bit crasher * Tue Mar 09 2010 Paul Wouters - 1.4.2-1 - Updated to 1.4.2 - Updated unbound.conf with new options - Enabled pre-fetching DNSKEY records (DNSSEC speedup) - Enabled re-fetching popular records before they expire - Enabled logging of DNSSEC validation errors * Mon Mar 01 2010 Paul Wouters - 1.4.1-5 - Overriding -D_GNU_SOURCE is no longer needed. This fixes DSO issues with pthreads * Wed Feb 24 2010 Paul Wouters - 1.4.1-3 - Change make/configure lines to attempt to fix -lphtread linking issue * Thu Feb 18 2010 Paul Wouters - 1.4.1-2 - Removed dependency for dnssec-conf - Added ISC DLV key (formerly in dnssec-conf) - Fixup old DLV locations in unbound.conf file via %%post - Fix parent child disagreement handling and no-ipv6 present [svn r1953] * Tue Jan 05 2010 Paul Wouters - 1.4.1-1 - Updated to 1.4.1 - Changed %%define to %%global * Thu Oct 08 2009 Paul Wouters - 1.3.4-2 - Bump version * Thu Oct 08 2009 Paul Wouters - 1.3.4-1 - Upgraded to 1.3.4. Security fix with validating NSEC3 records * Fri Aug 21 2009 Tomas Mraz - 1.3.3-2 - rebuilt with new openssl * Mon Aug 17 2009 Paul Wouters - 1.3.3-1 - Updated to 1.3.3 * Sun Jul 26 2009 Fedora Release Engineering - 1.3.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild * Sat Jun 20 2009 Paul Wouters - 1.3.0-2 - Added missing glob patch to cvs - Place python macros within the %%with_python check * Sat Jun 20 2009 Paul Wouters - 1.3.0-1 - Updated to 1.3.0 - Added unbound-python sub package. disabled for now - Patch from svn to fix DLV lookups - Patches from svn to detect wrong truncated response from BIND 9.6.1 with minimal-responses) - Added Default-Start and Default-Stop to unbound.init - Re-enabled --enable-sha2 - Re-enabled glob.patch * Wed May 20 2009 Paul Wouters - 1.2.1-7 - unbound-iterator.patch was not committed * Wed May 20 2009 Paul Wouters - 1.2.1-6 - Fix for https://bugzilla.redhat.com/show_bug.cgi?id=499793 * Tue Mar 17 2009 Paul Wouters - 1.2.1-5 - Use --nocheck to avoid giving an error on missing unbound-remote certs/keys * Tue Mar 10 2009 Adam Tkac - 1.2.1-4 - enable DNSSEC only if it is enabled in sysconfig/dnssec * Mon Mar 09 2009 Adam Tkac - 1.2.1-3 - add DNSSEC support to initscript and enabled it per default - add requires dnssec-conf * Wed Feb 25 2009 Fedora Release Engineering - 1.2.1-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild * Tue Feb 10 2009 Paul Wouters - 1.2.0-2 - rebuild with new openssl * Wed Jan 14 2009 Paul Wouters - 1.1.1-7 - Modified scandir patch to silently fail when wildcard matches nothing - Patch to allow unbound-checkconf to find empty wildcard matches * Mon Jan 5 2009 Paul Wouters - 1.1.1-6 - Added scandir patch for trusted-keys-file: option, which is used to load multiple dnssec keys in bind file format * Mon Dec 8 2008 Paul Wouters - 1.1.1-4 - Added Requires: for selinux-policy >= 3.5.13-33 for proper SElinux rules. * Mon Dec 1 2008 Paul Wouters - 1.1.1-3 - We did not own the /etc/unbound directory (#474020) - Fixed cvs anomalies * Fri Nov 28 2008 Adam Tkac - 1.1.1-2 - removed all obsolete chroot related stuff - label control certs after generation correctly * Thu Nov 20 2008 Paul Wouters - 1.1.1-1 - Updated to unbound 1.1.1 which fixes a crasher and addresses nlnetlabs bug #219 * Wed Nov 19 2008 Paul Wouters - 1.1.0-3 - Remove the chroot, obsoleted by SElinux - Add additional munin plugin links supported by unbound plugin - Move configuration directory from /var/lib/unbound to /etc/unbound - Modified unbound.init and unbound.conf to account for chroot changes - Updated unbound.conf with new available options - Enabled dns-0x20 protection per default * Wed Nov 19 2008 Adam Tkac - 1.1.0-2 - unbound-1.1.0-log_open.patch - make sure log is opened before chroot call - tracked as http://www.nlnetlabs.nl/bugs/show_bug.cgi?id=219 - removed /dev/log and /var/run/unbound and /etc/resolv.conf from chroot, not needed - don't mount files in chroot, it causes problems during updates - fixed typo in default config file * Fri Nov 14 2008 Paul Wouters - 1.1.0-1 - Updated to version 1.1.0 - Updated unbound.conf's statistics options and remote-control to work properly for munin - Added unbound-munin package - Generate unbound remote-control key/certs on first startup - Required ldns is now 1.4.0 * Wed Oct 22 2008 Paul Wouters - 1.0.2-5 - Only call ldconfig in -libs package - Move configure into build section - devel subpackage should only depend on libs subpackage * Tue Oct 21 2008 Paul Wouters - 1.0.2-4 - Fix CFLAGS getting lost in build - Don't enable interface-automatic:yes because that causes unbound to listen on 0.0.0.0 instead of 127.0.0.1 * Sun Oct 19 2008 Paul Wouters - 1.0.2-3 - Split off unbound-libs, make build verbose * Thu Oct 9 2008 Paul Wouters - 1.0.2-2 - FSB compliance, chroot fixes, initscript fixes * Thu Sep 11 2008 Paul Wouters - 1.0.2-1 - Upgraded to 1.0.2 * Wed Jul 16 2008 Paul Wouters - 1.0.1-1 - upgraded to new release * Wed May 21 2008 Paul Wouters - 1.0.0-2 - Build against ldns-1.3.0 * Wed May 21 2008 Paul Wouters - 1.0.0-1 - Split of -devel package, fixed dependencies, make rpmlint happy * Thu Apr 25 2008 Wouter Wijngaards - 0.12 - Using parts from ports collection entry by Jaap Akkerhuis. - Using Fedoraproject wiki guidelines. * Wed Apr 23 2008 Wouter Wijngaards - 0.11 - Initial version. unbound-1.13.1/contrib/validation-reporter.sh0000755000175000017500000000443014010434640020671 0ustar wouterwouter#!/bin/sh # validation reporter - reports validation failures to a collection server. # Copyright NLnet Labs, 2010 # BSD license. ### # Here is the configuration for the validation reporter # it greps the failure lines out of the log and sends them to a server. # The pidfile for the reporter daemon. pidfile="/var/run/validation-reporter.pid" # The logfile to watch for logged validation failures. logfile="/var/log/unbound.log" # how to notify the upstream # nc is netcat, it sends tcp to given host port. It makes a tcp connection # and writes one log-line to it (grepped from the logfile). # the notify command can be: "nc the.server.name.org 1234" # the listening daemon could be: nc -lk 127.0.0.1 1234 >> outputfile & notify_cmd="nc localhost 1234" ### # Below this line is the code for the validation reporter, # first the daemon itself, then the controller for the daemon. reporter_daemon() { trap "rm -f \"$pidfile\"" EXIT tail -F $logfile | grep --line-buffered "unbound.*info: validation failure" | \ while read x; do echo "$x" | $notify_cmd done } ### # controller for daemon. start_daemon() { echo "starting reporter" nohup $0 rundaemon /dev/null 2>&1 & echo $! > "$pidfile" } kill_daemon() { echo "stopping reporter" if test -s "$pidfile"; then kill `cat "$pidfile"` # check it is really dead if kill -0 `cat "$pidfile"` >/dev/null 2>&1; then sleep 1 while kill -0 `cat "$pidfile"` >/dev/null 2>&1; do kill `cat "$pidfile"` >/dev/null 2>&1 echo "waiting for reporter to stop" sleep 1 done fi fi } get_status_daemon() { if test -s "$pidfile"; then if kill -0 `cat "$pidfile"`; then return 0; fi fi return 1; } restart_daemon() { kill_daemon start_daemon } condrestart_daemon() { if get_status_daemon; then echo "reporter ("`cat "$pidfile"`") is running" exit 0 fi start_daemon exit 0 } status_daemon() { if get_status_daemon; then echo "reporter ("`cat "$pidfile"`") is running" exit 0 fi echo "reporter is not running" exit 1 } case "$1" in rundaemon) reporter_daemon ;; start) start_daemon ;; stop) kill_daemon ;; restart) restart_daemon ;; condrestart) condrestart_daemon ;; status) status_daemon ;; *) echo "Usage: $0 {start|stop|restart|condrestart|status}" exit 2 ;; esac exit $? unbound-1.13.1/contrib/unbound_cache.cmd0000644000175000017500000000507714010434640017632 0ustar wouterwouter@echo off rem -------------------------------------------------------------- rem -- DNS cache save/load script rem -- rem -- Version 1.2 rem -- By Yuri Voinov (c) 2014 rem -------------------------------------------------------------- rem Variables set prefix="C:\Program Files (x86)" set program_path=%prefix%\Unbound set uc=%program_path%\unbound-control.exe set fname="unbound_cache.dmp" rem Check Unbound installed if exist %uc% goto start echo Unbound control not found. Exiting... exit 1 :start rem arg1 - command (optional) rem arg2 - file name (optional) set arg1=%1 set arg2=%2 if /I "%arg1%" == "-h" goto help if "%arg1%" == "" ( echo Loading cache from %program_path%\%fname% dir /a %program_path%\%fname% type %program_path%\%fname%|%uc% load_cache goto end ) if defined %arg2% (goto Not_Defined) else (goto Defined) rem If file not specified; use default dump file :Not_defined if /I "%arg1%" == "-s" ( echo Saving cache to %program_path%\%fname% %uc% dump_cache>%program_path%\%fname% dir /a %program_path%\%fname% echo ok goto end ) if /I "%arg1%" == "-l" ( echo Loading cache from %program_path%\%fname% dir /a %program_path%\%fname% type %program_path%\%fname%|%uc% load_cache goto end ) if /I "%arg1%" == "-r" ( echo Saving cache to %program_path%\%fname% dir /a %program_path%\%fname% %uc% dump_cache>%program_path%\%fname% echo ok echo Loading cache from %program_path%\%fname% type %program_path%\%fname%|%uc% load_cache goto end ) rem If file name specified; use this filename :Defined if /I "%arg1%" == "-s" ( echo Saving cache to %arg2% %uc% dump_cache>%arg2% dir /a %arg2% echo ok goto end ) if /I "%arg1%" == "-l" ( echo Loading cache from %arg2% dir /a %arg2% type %arg2%|%uc% load_cache goto end ) if /I "%arg1%" == "-r" ( echo Saving cache to %arg2% dir /a %arg2% %uc% dump_cache>%arg2% echo ok echo Loading cache from %arg2% type %arg2%|%uc% load_cache goto end ) :help echo Usage: unbound_cache.cmd [-s] or [-l] or [-r] or [-h] [filename] echo. echo l - Load - default mode. Warming up Unbound DNS cache from saved file. cache-ttl must be high value. echo s - Save - save Unbound DNS cache contents to plain file with domain names. echo r - Reload - reloadind new cache entries and refresh existing cache echo h - this screen. echo filename - file to save/load dumped cache. If not specified, %program_path%\%fname% will be used instead. echo Note: Run without any arguments will be in default mode. echo Also, unbound-control must be configured. exit 1 :end exit 0 unbound-1.13.1/contrib/unbound_smf23.tar.gz0000644000175000017500000001105014010434640020147 0ustar wouterwouter‹ñžM^unbound_smf23.taríûø<;ýå’ê`…M{M{07?«zJ†ÉÖ´¯ææçUÏSÃ4×´Ü‚zvÊkڣũ…Å·ô2â m’/>‰Ë¹vôþңřüòÔê—“‰¤p"Á-3ÑŽÀߟ[ÌsÂÒˆˆâÞa&C%jK+ùdz¹Éµ$'ÒηIdÒ¥aH™ÄA:ˆ«@†kmÆÃÍgÅ_wlß3¬N"*l²ÂÓ¼í­~í7 OQ¶Å—4F þú ‘”$`+¾µ´’€´®Fx|4ÑS†ðoŸƒ·É’¤ HÌærK¹ ŽëW*¶ã¡‘âjJP3DžHôF&“¡N†O0¤¡PµßjEA¯âØN4òHÏà‹:+ݰáèåÉä&™H¬%IŒj1›l×QTò)H­q†G†ÓhëQÎø”ég \ }„=ÀRdEš#ãÚ™¡0ø¦QFÒ RÏ<®Ÿ›_ššÉ£Ûôž…`Ù3ZûQŠ>Hƒšà>¥’p°37•{ÂÙ¥µÔD²s(¾Vç .ÌDsíXÄi«b@P«Žž²*¤U9«mŠ“&aWbaWN3HRL€µ$†HbP &ËTŒâ|ö$s #´T‡‹-èî#½žvx9y‡G)Ÿ …a×”pK(ÜÓUú ÚáÙ~ÚRÈɲ= ëø«/¡uuC酤Л—nshÓJ$‡Ȱ–pwçD?*Zi:ˆçƒÒ뻎~þ¹–ˆNt6¬]9{M„¼Ý¥G®¾Á& 9¿KÀ·ÿH6à·‘pÅ\½ iüaP»qݮڦË,ϬŒ÷Ìû€ùÿøèhïüh¼#ÿ£Tú:ÿÿàmò*MS¥Áʘ‘V¤›ŸAÃïÃ](–þG íjkk·oßøz*·8·ø°`uW+²’îcÆ„©eá)ŒE Ÿ<Àñ-PµÌ€&ö¸Ñd3ü?Oæû4muÓp9¢]·àÏV‚E̯1B!“ºÉùw™³e˜-™ä&D]˜ÝÁŠmbîbºÂ±õu”PFÓ¦Lh°X¹®îì sØ¿û†kx˜fZŒaþB|«–Sè…‚íqgü>’W°­’±á;‚ð[ì•F¨ñEõ‚G@mPÄ»ªí Â䡌Q¸"j1i¸¢ iQ‚Q]\B¼™A$M‰•ä gwQ{Û0\9ž’$ÁѶ€âZµ‰dcK÷g2j„%Û4ímêÆý'ª¸Zú MÓ†2+h ~%¶×ê-Ô&šj—¹”Çáþd¸mÿºI1v ÎPyÍe§œyF ž3¤‰Ì‡4ðÑ ä”qE(¼¼(­]ëæ×½P;Ä.é½§‘r¡@Åv=® ÛzÃ{¶±H.(ÆŠÉ"ui°‹¶‡é\NúD¢ôAѦ˜†Î!u '¸¢k—¼m݉êqÊ)lˆžáai€ZÑ¢oŸ@¶4–¾A"諸«+ÛË<+›b¬HšÐäŒfœ1™9>¥G¤ÿn5ZðcõÕÜÊù®kèV¿K¥"°|7¡WpkÖÚ0 w³_ëân’šöTØ„Öi2"(iKXíW»©_çã¿Pþ/ üÊÿÇî uäÿãC×ùÿuþvþÿÝŸþøŸ¿ûÓÿó#øsu¿Ö¿G €“׃Ÿ«‡õ·‡ÕãV³Q;¤_/«G'ÇûaÚ|rܪ6vj‡‡o^Á.„oõ1Oú}•÷"âóFŽ÷›õ£VcŽšµ½ÃêËÃêÏ8ëÞÁ;5É~êp²WÅÉêï´ãZs·~\åÂ! ¶¢‰i« ê°ûæ¯5Üí¾;®ášµÆó¿4öê¯ßà®Ø¬íïÖ_Ö[opçòÙ%cÕ`YÙÂú€ÚqãÅAõø°Áš'ûÝÆÞqk÷„?5´ýÆáõ'Íz³±+¤·êÇûo®âÐ6\ã3>Ç Pz -(9j¾{Û:&´]b ñSí˜ø‚ˆ´]P; I±Õ‚.™©Pÿ;Rë.! ¼AÄz°H­¥5«/›µuÔsõ'$ZÍ $^‡Ú‹4ä²'(áߣĪû­:J1ê±$EL[oÕàø ¶wòöoHÔ_«/ê—ÎyøƒX¦ É"ž¢ª|^~Po´jûõÚñAþ·ÕÐj#8ޫࢌø>TÄɫȌh—Ä•ÔÎë®Ňõ¬,°ýPZÄ+(…¦¯1ȨZ&ÎTה䅭î ki7vˆ{ƒ4óºv„ú­"mï~ª78½W{…öY'LæDi!’RSž',FV"ؾ l€øºz¸G>" P%IdôA-jQuÀ¥š­j»1JãÛ«q` ªbFÌb`W¨D´3L™L4¦´PkÐ#õä‚úžCiܵª»ÈP­¤¾1Ô`mUùúªÉˆð&0¬fµùR81Z5Ÿ†)‡²ÒƒC\éï•dXÐÂ@“’¡ÑÚ¯¶ÞZG5 õ)Ç7Œfõ°VÓŽšõXWžò‡êëyDmçü¡#>E ˆ<gÃhZoiûJŸo£¾ÒÀôçÿŠ˜Áïš©ïbüÜ«5ÿ§ÞêYÑüpÔDɾCÙ½‚×µVcï5Í÷œDrO´ÜúµãÖ/[ÕÈà×ø™H’–Õ…‹ÎêFØWWÿ /\p]ê\5ý í热qFþ?vg¤3ÿ¼>ÿó1ÚÝ/(rÈϨ“‰¡Ì`â‹{Úݾ™¥éÕ'˳êM~}}åÉÊê숳/â° }`Ç9²E¯˜Cg°+3” éÒiô¤ù†%ÍÃFä=ùT|zA¦"ŠÁ¿wSËnéŽ8r$qél϶í<ÍFŸ‚æo÷0§¾‰…Òeþü\“¨9Îuˆ)F¦ÚDãíTØdJ-‘:ó2™’+¤îi‚ZIB´Ñ’ †Å„)ìVºJ Ѥª÷nµÇòòý0¿ºU`2S)N¦Jºé²d£H®¡›…À±Á"«Ð© «°#)-¹ižæ…´¨¶áØ~çšLñ×ÁËc$í“tóD½e[¬"Îó½Žñ@襲ctŒ"ÒMŸ¦Ù*LdÝ×cå,?:$~ ˆ×`ÖlÈë©@]¡ì ½2ýT¤ãVS@ä¥Ù¬lî¸Æ'¤ì®lD^šMÏïFÙ'Ä¢U,¦ñ7§óR\ú^¹òIr(Ý‘ÓwÎØ3VÈ‹×ú=¨ƒ4 ApN:iÚÉÔig[áÊ]ø6ÊÌö½¼Ë°¸.º“©ñÁTöý’kWzQ;AG.ÏG¼W¢¤=|P)Æ)®8ôQÊÛÉs‹ª²ØËK‘ót3GJE\=-?¤AÁvýrÅwÓöÍ¢•ò‚“G.BP9@û}ÇLD}u$ΔgŽc;©®;“ Nw=ú‚žR®@븈ÝÅ✟)“ f1‡&9§<[ž·â§­\ Åóð)¾ìæuìßðr)ÕÆÛ™³xç™Ár/S¦vìܬ#Éë†ix;j®G”»`†Óf6Y*X˱.üÐçe䀨¹×“Ò»˜%x +^L 'Låtª7¸²ñ™Å"Ì(êžbè½HV®Ò…ÊlW2ïfCÆ´»*ߎþ–é轋ÕÑ’ýcßÿ»3t§½þ¾s]ÿ}œûÑëÑ"Ñó=»èŽö×@]/wÐ;œ‹ÜÏXÎ-=ÌM-ˆcûáÁÿ•ÙÜã¹éÙŽîéÜÜòªìå›Q"‘ŒÂ"ȃü?/ÌO¶õ'¨&£â²G¯aOçVg&¾û©ë¾GËà‡/´é/—¾^ n[lÚÛÖö-,Í„}e»ˆ}KËO‚®ÊyîhÌSˆ¿ð‘-;ÊO‹†³F„N?x¨:EÌ{W"}n÷»ÿ²´8íþ“Ay«ã½\³@èJIâˆE±G­}™Ë¶›çgÃåe qg!¼vÑÞ»¸àýŠ t¿NÁÌp‹_ànoÈ*_Ýâ赚¸¼A±©“Í>XKÎÍÀ·Ð&kºz›ýäà-ÂëïMØÛ‡2ÆGXg˜2ᆜöq“ !Ò!I~⤠I7aѶÒ¦½Ž™ ?ïc” yi ‹‰¼Í‹QN¸)\èF€t³¿Ò«×Éð,>‹ÿ-.-ÂÃù¥ûSóœXà$d`ÕuŠ*~ø³Âoá`e'œLßJF¢N‚Q[R†ŠŰbËŠóšæÜŸ}°”› fR§Öw(4g Äq«eæ” žªº@F¡ Ô ó¸êPçXzE渢,¥Â/x…cÙai)p»uE¨TVÏûßÕ¸›£ýqó]¡ÉkšdãŸÃ$£;Jì?·¸(íw›¾IDpÏÛ¢8È7Vwg-9÷H!t¤Í°|6ÐSɻӞcþã´À wuæéë\Dô‰*üê Ú³8GËoÚÉɨ—Œ°STŒ‡$qs‹îÖĬ?­ËN±ËF™v¸¸¥*÷ AÚall,èÌFAµ_L,~à–G#bŸSy8 Ʋ ú^¶È¶²–J¾÷Æ,‡y»Èp¯á'¿XÓ@^©‘C ñRz°_9 }!¤…ƒ#L¸?êJ.ÌOïùª2K¾™øüsÄ¿}AüMÝ^RºŸß~ ”¯·3‹/¹Þ¥x’¸Ýø—ßâ[Oo¯7Gƒ{Umcä:•œð1sŒÒN— cé-!Sâi°íÈ_U¿‘Àqç&ˆáE3úŽaµïuñ³ñбÝäÍ•ÚH“kº2 ¶ã°‚gî ¨sâ4<ïÈ.Æ¥„ºuÙï‘/¯7>~ý7ÖQÿŽ_׿lý'ÎfŸRù žVù…ßñ»ßêÿÿTõM}ý•*œôí§ç©ææf—UφÃ*íõÝrô~EÜÀ_긊Û~ÉšYˆÔyz±|]^W„ŸnE˜w.V^µ(ŒÖ…* }«[i(¢gdÆnÕa8Zrìrg}Ø»@œz°:› —¦ô\÷=›'™Ä{•ɯ¯¾»Py'¯ ]ºº‹¢ˆjüB(9yÅ«kÉoÔ³bßU ‹'ôíµ’$vÔòÿ<åp×êUVÅei$¢åzbG*Ü"ã!cGb|MÈAµ!ÿÇ8ÚIøPÅØ©ÅR<€vÙÎ.æâS¨rN¬Ù6}—b®C÷]êæneó`äß± Ú·· Ú÷ùñ9RGöKªŒo_vê°:§7“8Õõ¿˜qÝ®ÛuëÞþgoÖRunbound-1.13.1/contrib/ios/0000755000175000017500000000000014010434640015131 5ustar wouterwouterunbound-1.13.1/contrib/ios/15-ios.conf0000644000175000017500000000245314010434640017021 0ustar wouterwouter#### iPhoneOS/iOS # # It takes recent enough Xcode to use following two targets. It shouldn't # be a problem by now, but if they don't work, original targets below # that depend on manual definition of environment variables should still # work... # my %targets = ( "ios-common" => { template => 1, inherit_from => [ "darwin-common" ], sys_id => "iOS", disable => [ "engine", "async" ], }, "ios-xcrun" => { inherit_from => [ "ios-common", asm("armv4_asm") ], bn_ops => [ "BN_LLONG", "RC4_CHAR" ], perlasm_scheme => "ios32", }, "ios64-xcrun" => { inherit_from => [ "ios-common", asm("aarch64_asm") ], bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_CHAR" ], perlasm_scheme => "ios64", }, "iossimulator-xcrun" => { inherit_from => [ "ios-common" ], }, "iphoneos-cross" => { inherit_from => [ "ios-common" ], cflags => add("-Wall -fno-common"), }, "ios-cross" => { inherit_from => [ "ios-xcrun" ], cflags => add("-Wall -fno-common"), }, "ios64-cross" => { inherit_from => [ "ios64-xcrun" ], cflags => add("-Wall -fno-common"), }, ); unbound-1.13.1/contrib/ios/setenv_ios.sh0000755000175000017500000002251714010434640017655 0ustar wouterwouter#!/usr/bin/env bash # ==================================================================== # Sets the cross compile environment for Xcode/iOS # # Based upon OpenSSL's setenv-ios.sh by TH, JW, and SM. # Heavily modified by JWW for Crypto++. # Modified by JWW for Unbound. # ==================================================================== ######################################### ##### Some validation ##### ######################################### # In the past we could mostly infer arch or cpu from the SDK (and # mostly vice-versa). Nowadays we need it set for us because Apple # platforms can be either 32-bit or 64-bit. if [ -z "$IOS_SDK" ]; then echo "IOS_SDK is not set. Please set it" [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi if [ -z "$IOS_CPU" ]; then echo "IOS_CPU is not set. Please set it" [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi # cryptest-ios.sh may run this script without sourcing. if [ "$0" = "${BASH_SOURCE[0]}" ]; then echo "setenv-ios.sh is usually sourced, but not this time." fi ######################################### ##### Small Fixups, if needed ##### ######################################### if [[ "$IOS_SDK" == "iPhone" ]]; then IOS_SDK=iPhoneOS fi if [[ "$IOS_SDK" == "iPhoneOSSimulator" ]]; then IOS_SDK=iPhoneSimulator fi if [[ "$IOS_SDK" == "TV" || "$IOS_SDK" == "AppleTV" ]]; then IOS_SDK=AppleTVOS fi if [[ "$IOS_SDK" == "Watch" || "$IOS_SDK" == "AppleWatch" ]]; then IOS_SDK=WatchOS fi if [[ "$IOS_CPU" == "aarch64" || "$IOS_CPU" == "armv8"* ]] ; then IOS_CPU=arm64 fi ######################################## ##### Environment ##### ######################################## # The flags below were tested with Xcode 8 on Travis. If # you use downlevel versions of Xcode, then you can push # xxx-version-min=n lower. For example, Xcode 6 can use # -miphoneos-version-min=5. # iPhones can be either 32-bit or 64-bit if [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "armv7"* ]]; then MIN_VER=-miphoneos-version-min=6 elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "arm64" ]]; then MIN_VER=-miphoneos-version-min=6 # Fixups for convenience elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "i386" ]]; then IOS_SDK=iPhoneSimulator # MIN_VER=-miphoneos-version-min=6 MIN_VER=-miphonesimulator-version-min=6 elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "x86_64" ]]; then IOS_SDK=iPhoneSimulator # MIN_VER=-miphoneos-version-min=6 MIN_VER=-miphonesimulator-version-min=6 # Simulator builds elif [[ "$IOS_SDK" == "iPhoneSimulator" && "$IOS_CPU" == "i386" ]]; then MIN_VER=-miphonesimulator-version-min=6 elif [[ "$IOS_SDK" == "iPhoneSimulator" && "$IOS_CPU" == "x86_64" ]]; then MIN_VER=-miphonesimulator-version-min=6 # Apple TV can be 32-bit Intel (1st gen), 32-bit ARM (2nd, 3rd gen) or 64-bit ARM (4th gen) elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "i386" ]]; then MIN_VER=-mappletvos-version-min=6 elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "armv7"* ]]; then MIN_VER=-mappletvos-version-min=6 elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "arm64" ]]; then MIN_VER=-mappletvos-version-min=6 # Simulator builds elif [[ "$IOS_SDK" == "AppleTVSimulator" && "$IOS_CPU" == "i386" ]]; then MIN_VER=-mappletvsimulator-version-min=6 elif [[ "$IOS_SDK" == "AppleTVSimulator" && "$IOS_CPU" == "x86_64" ]]; then MIN_VER=-mappletvsimulator-version-min=6 # Watch can be either 32-bit or 64-bit ARM. TODO: figure out which # -mwatchos-version-min=n is needed for arm64. 9 is not enough. elif [[ "$IOS_SDK" == "WatchOS" && "$IOS_CPU" == "armv7"* ]]; then MIN_VER=-mwatchos-version-min=6 elif [[ "$IOS_SDK" == "WatchOS" && "$IOS_CPU" == "arm64" ]]; then MIN_VER=-mwatchos-version-min=10 # Simulator builds. TODO: figure out which -watchos-version-min=n # is needed for arm64. 6 compiles and links, but is it correct? elif [[ "$IOS_SDK" == "WatchSimulator" && "$IOS_CPU" == "i386" ]]; then MIN_VER=-mwatchsimulator-version-min=6 elif [[ "$IOS_SDK" == "WatchSimulator" && "$IOS_CPU" == "x86_64" ]]; then MIN_VER=-mwatchsimulator-version-min=6 # And the final catch-all else echo "IOS_SDK and IOS_CPU are not valid. Please fix them" [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1 fi ##################################################################### # Xcode 6 and below cannot handle -miphonesimulator-version-min # Fix it so the simulator will compile as expected. This trick # may work on other SDKs, but it was not tested. if [ -n "$(command -v xcodebuild 2>/dev/null)" ]; then # Output of xcodebuild is similar to "Xcode 6.2". The first cut gets # the dotted decimal value. The second cut gets the major version. XCODE_VERSION=$(xcodebuild -version 2>/dev/null | head -n 1 | cut -f2 -d" " | cut -f1 -d".") if [ -z "$XCODE_VERSION" ]; then XCODE_VERSION=100; fi if [ "$XCODE_VERSION" -le 6 ]; then MIN_VER="${MIN_VER//iphonesimulator/iphoneos}" fi fi ##################################################################### # Allow a user override? I think we should be doing this. The use case is, # move /Applications/Xcode somewhere else for a side-by-side installation. if [ -z "${XCODE_DEVELOPER-}" ]; then XCODE_DEVELOPER=$(xcode-select -print-path 2>/dev/null) fi if [ ! -d "$XCODE_DEVELOPER" ]; then echo "ERROR: unable to find XCODE_DEVELOPER directory." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # XCODE_DEVELOPER_SDK is the SDK location. XCODE_DEVELOPER_SDK="$XCODE_DEVELOPER/Platforms/$IOS_SDK.platform" if [ ! -d "$XCODE_DEVELOPER_SDK" ]; then echo "ERROR: unable to find XCODE_DEVELOPER_SDK directory." echo " Is the SDK supported by Xcode and installed?" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # XCODE_TOOLCHAIN is the location of the actual compiler tools. if [ -d "$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" ]; then XCODE_TOOLCHAIN="$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" elif [ -d "$XCODE_DEVELOPER_SDK/Developer/usr/bin/" ]; then XCODE_TOOLCHAIN="$XCODE_DEVELOPER_SDK/Developer/usr/bin/" fi if [ -z "$XCODE_TOOLCHAIN" ] || [ ! -d "$XCODE_TOOLCHAIN" ]; then echo "ERROR: unable to find Xcode cross-compiler tools." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # XCODE_SDK is the SDK name/version being used - adjust the list as appropriate. # For example, remove 4.3, 6.2, and 6.1 if they are not installed. We go back to # the 1.0 SDKs because Apple WatchOS uses low numbers, like 2.0 and 2.1. XCODE_SDK= for i in $(seq -f "%.1f" 30.0 -0.1 1.0) do if [ -d "$XCODE_DEVELOPER_SDK/Developer/SDKs/$IOS_SDK$i.sdk" ]; then XCODE_SDK="$IOS_SDK$i.sdk" break fi done # Error checking if [ -z "$XCODE_SDK" ]; then echo "ERROR: unable to find a SDK." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi IOS_SYSROOT="$XCODE_DEVELOPER_SDK/Developer/SDKs/$XCODE_SDK" if [ -z "$IOS_SYSROOT" ] || [ ! -d "$IOS_SYSROOT" ]; then echo "ERROR: unable to find IOS_SYSROOT directory." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### # We want to set AR=libtool and ARFLAGS="-static -o", # but I am not sure Autotools can handle it. CPP=cpp; CC=clang; CXX=clang++; LD=ld AS=as; AR=ar; RANLIB=ranlib; STRIP=strip # Error checking if [ ! -e "$XCODE_TOOLCHAIN/$CC" ]; then echo "ERROR: Failed to find iOS clang. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$XCODE_TOOLCHAIN/$CXX" ]; then echo "ERROR: Failed to find iOS clang++. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$XCODE_TOOLCHAIN/$RANLIB" ]; then echo "ERROR: Failed to find iOS ranlib. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$XCODE_TOOLCHAIN/$AR" ]; then echo "ERROR: Failed to find iOS ar. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$XCODE_TOOLCHAIN/$AS" ]; then echo "ERROR: Failed to find iOS as. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi # Error checking if [ ! -e "$XCODE_TOOLCHAIN/$LD" ]; then echo "ERROR: Failed to find iOS ld. Please edit this script." [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1 fi ##################################################################### LENGTH=${#XCODE_TOOLCHAIN} SUBSTR=${PATH:0:$LENGTH} if [ "$SUBSTR" != "$XCODE_TOOLCHAIN" ]; then export PATH="$XCODE_TOOLCHAIN":"$PATH" fi ##################################################################### export CPP CC CXX LD AS AR RANLIB STRIP export IOS_SYSROOT export CFLAGS="-arch $IOS_CPU $MIN_VER --sysroot=$IOS_SYSROOT" export CXXFLAGS="-arch $IOS_CPU $MIN_VER -stdlib-libc++ --sysroot=$IOS_SYSROOT" ##################################################################### echo "XCODE_TOOLCHAIN: $XCODE_TOOLCHAIN" echo "CPP: $(command -v "$CPP")" echo "CC: $(command -v "$CC")" echo "CXX: $(command -v "$CXX")" echo "LD: $(command -v "$LD")" echo "AS: $(command -v "$AS")" echo "AR: $(command -v "$AR")" echo "IOS_SYSROOT: $IOS_SYSROOT" echo "CPPFLAGS: $CPPFLAGS" echo "CFLAGS: $CFLAGS" echo "CXXFLAGS: $CXXFLAGS" [ "$0" = "${BASH_SOURCE[0]}" ] && exit 0 || return 0 unbound-1.13.1/contrib/ios/install_tools.sh0000755000175000017500000000042214010434640020354 0ustar wouterwouter#!/usr/bin/env bash # This step should install tools needed for all packages - OpenSSL, Expat and Unbound echo "Updating tools" brew update 1>/dev/null echo "Installing tools" # already installed are: autoconf automake libtool pkg-config brew install curl perl 1>/dev/null unbound-1.13.1/contrib/ios/openssl.patch0000644000175000017500000000202014010434640017627 0ustar wouterwouter--- apps/speed.c +++ apps/speed.c @@ -99,6 +99,13 @@ #endif #include +/* fork() breaks AppleTVOS, WatchOS, AppleTVSimulator and WatchSimulator */ +/* Users should configure with -DNO_FORK */ +#if defined(NO_FORK) +# undef HAVE_FORK +# define HAVE_FORK 0 +#endif + #ifndef HAVE_FORK # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_VXWORKS) # define HAVE_FORK 0 @@ -110,6 +117,7 @@ #if HAVE_FORK # undef NO_FORK #else +# undef NO_FORK # define NO_FORK #endif --- apps/ocsp.c +++ apps/ocsp.c @@ -36,6 +36,13 @@ # include # include +/* fork() breaks AppleTVOS, WatchOS, AppleTVSimulator and WatchSimulator */ +/* Users should configure with -DNO_FORK */ +#if defined(NO_FORK) +# undef HAVE_FORK +# define HAVE_FORK 0 +#endif + #ifndef HAVE_FORK # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) # define HAVE_FORK 0 @@ -47,6 +54,7 @@ #if HAVE_FORK # undef NO_FORK #else +# undef NO_FORK # define NO_FORK #endif unbound-1.13.1/contrib/ios/install_expat.sh0000755000175000017500000000251014010434640020335 0ustar wouterwouter#!/usr/bin/env bash echo "Downloading Expat" if ! curl -L -k -s -o expat-2.2.9.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz; then echo "Failed to download Expat" exit 1 fi echo "Unpacking Expat" rm -rf ./expat-2.2.9 if ! tar -xf expat-2.2.9.tar.gz; then echo "Failed to unpack Expat" exit 1 fi cd expat-2.2.9 || exit 1 export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig" echo "Configuring Expat" if ! ./configure \ --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \ --prefix="$IOS_PREFIX" ; then echo "Error: Failed to configure Expat" cat config.log exit 1 fi # Cleanup warnings, https://github.com/libexpat/libexpat/issues/383 echo "Fixing Makefiles" (IFS="" find "$PWD" -name 'Makefile' -print | while read -r file do cp -p "$file" "$file.fixed" sed 's|-Wduplicated-cond ||g; s|-Wduplicated-branches ||g; s|-Wlogical-op ||g' "$file" > "$file.fixed" mv "$file.fixed" "$file" cp -p "$file" "$file.fixed" sed 's|-Wrestrict ||g; s|-Wjump-misses-init ||g; s|-Wmisleading-indentation ||g' "$file" > "$file.fixed" mv "$file.fixed" "$file" done) echo "Building Expat" if ! make; then echo "Failed to build Expat" exit 1 fi echo "Installing Expat" if ! make install; then echo "Failed to install Expat" exit 1 fi exit 0 unbound-1.13.1/contrib/ios/install_openssl.sh0000755000175000017500000000234214010434640020702 0ustar wouterwouter#!/usr/bin/env bash echo "Downloading OpenSSL" if ! curl -L -k -s -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz; then echo "Failed to download OpenSSL" exit 1 fi echo "Unpacking OpenSSL" rm -rf ./openssl-1.1.1d if ! tar -xf openssl-1.1.1d.tar.gz; then echo "Failed to unpack OpenSSL" exit 1 fi cd openssl-1.1.1d || exit 1 if ! cp ../contrib/ios/15-ios.conf Configurations/; then echo "Failed to copy OpenSSL ios config" exit 1 fi # OpenSSL 1.1.1d patch. OK to remove once OpenSSL version is bumped. # ocsp.c:947:23: error: 'fork' is unavailable: not available on tvOS and watchOS. # Also see https://github.com/openssl/openssl/issues/7607. if ! patch -u -p0 < ../contrib/ios/openssl.patch; then echo "Failed to patch OpenSSL" exit 1 fi echo "Configuring OpenSSL" if ! ./Configure "$OPENSSL_HOST" -DNO_FORK no-comp no-asm no-hw no-engine no-tests no-unit-test \ --prefix="$IOS_PREFIX" --openssldir="$IOS_PREFIX"; then echo "Failed to configure OpenSSL" exit 1 fi echo "Building OpenSSL" if ! make; then echo "Failed to build OpenSSL" exit 1 fi echo "Installing OpenSSL" if ! make install_sw; then echo "Failed to install OpenSSL" exit 1 fi exit 0 unbound-1.13.1/contrib/unbound-fuzzers.tar.bz20000644000175000017500000000316114010434640020724 0ustar wouterwouterBZh91AY&SY!˜^¼ÄÈPyÿûš^ÿïÿú€€`žûéAC»yÛÚ0êözyÙ¢ðȉ©§¥¡êfh£Ôõ6£ÔhhhI ä#Ôdi i4Ó#!“4a0Fš4b™20Jz‰òBj=LÊ2€@Œƒ@Ú“D(òF‡¨¾YÿfWŒØïµøSeZ‹¦U¤$½¥‹BÍ)ë¼Ä^c~JmýyíÙ¦v4—Æxá†Ô>L†7ƺa'C§Š«+šô´¯ 0O¹Ù«ï©'¶~J’è !EXUUË< ‘Î¥›9ÏÃÉv/8Sfx¬`Ç»ñÍ1w»·§¾­löÛ…ºï§vžoíÕˆ]1&T¥qúôýXc‹&ÎŽþ[©9PÉñsƒ=ÂoqÝ ·Ñ±Ù~Œ–Ëß’‹i%à_×ha³.¹Éìáƒb—\ôdªiFe,*«Cf¢ìâ¤fÐ,0 ÖSîEÖ‰DÂ0A’€CÌÆtQøœpö2k¦½c×»ý]œÊSI—Õ;gÕ’V~Kîùý b¨EŠu…|@>žºµIÖBYëPÍj”ÇËñŠÉbи­Ua˜‚ñe,Õ •º‡2Æì9™m±"R¶%=N]ÝkUõD6ðÄû]ð9—*„®ªœ°»è5ƒ1- ;äûUú_{é'!69»¥Šü¦䜥áÄ‹|pÇ4sJqj½œè‹âÁB"A&*Ó]»÷YllÌûÈ·¥súägC¡›6Õ·Œl诞bi¶íñŒ:IÆ+dØ]ÒS2½ê’…gÜpÛœË)èóÜ’ã cŸ{V|.Ú“'}º3ßMk dR±@‰­ø³cÚ~ðS믟Ùfkô4ÔÅ·9¬6ÁV¦“«&x4wL2i>Øimý³Ž\äÜéÃ\ŒuRRNz²›­Sçd¦JBÊ¥ •ŽÜ°’‘3{KtÊŸò•+ØvðaW¦{ÐLlÈ/’‘E!ÞÑÊX’„ÊÐóE8ÖÄ<˜ÿÙŽ™;v-´æ•E%@¥ AB¸`¼ j¤U½¯ò¼„ÈÏ{‹"a ™-Ô¦Ra ËdJ¦q^UI_³9f§ 0À©†ÔôÄÍ›AÃáJ”©S:ŽùøNqx¹¹pÓÿuºµiËŒÁ¥¦Z» Ú*u*¤ú N‘ÁŒÀ¨5S@œ8lg‹¶Y ‰:#iê5k²±™`à Üï’Û ÷t«D9 ïe¶§³œÍ7cåääœSÕ-5³_|ê”!âôC9›Þ{­ßòR^8–ô=~rIÙÈóžsdwL³|ÉÖ'dÙh,…I]ékaNÙѬœÆx91´d H“IŠ£«=ÅYY|[Påâãß²Lžª›W†¹6Ý㲡¼¼Ï,šé¥ÕªEHU ¨IEuâ[»Âbê¤+bÓ¥Ÿ=VL$§ÂÙô~n»NjßÝb7„mM òƒÖö×M£¡2ò™ ¶¶bv÷&-OS±Øá +#ifdef ENABLE_FASTRPZ +#include "fastrpz/rpz.h" +#endif #ifdef HAVE_SYSTEMD #include @@ -456,6 +459,14 @@ daemon_create_workers(struct daemon* daemon) fatal_exit("dt_create failed"); #else fatal_exit("dnstap enabled in config but not built with dnstap support"); +#endif + } + if(daemon->cfg->rpz_enable) { +#ifdef ENABLE_FASTRPZ + rpz_init(&daemon->rpz_clist, &daemon->rpz_client, daemon->cfg); +#else + fatal_exit("fastrpz enabled in config" + " but not built with fastrpz"); #endif } for(i=0; inum; i++) { @@ -729,6 +740,9 @@ daemon_cleanup(struct daemon* daemon) #ifdef USE_DNSCRYPT dnsc_delete(daemon->dnscenv); daemon->dnscenv = NULL; +#endif +#ifdef ENABLE_FASTRPZ + rpz_delete(&daemon->rpz_clist, &daemon->rpz_client); #endif daemon->cfg = NULL; } diff --git a/daemon/daemon.h b/daemon/daemon.h index 3effbafb..4d4c34da 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -138,6 +138,11 @@ struct daemon { /** the dnscrypt environment */ struct dnsc_env* dnscenv; #endif +#ifdef ENABLE_FASTRPZ + /** global opaque rpz handles */ + struct librpz_clist *rpz_clist; + struct librpz_client *rpz_client; +#endif }; /** diff --git a/daemon/worker.c b/daemon/worker.c index 23e3244c..b63d49b7 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -76,6 +76,9 @@ #include "libunbound/context.h" #include "libunbound/libworker.h" #include "sldns/sbuffer.h" +#ifdef ENABLE_FASTRPZ +#include "fastrpz/rpz.h" +#endif #include "sldns/wire2str.h" #include "util/shm_side/shm_main.h" #include "dnscrypt/dnscrypt.h" @@ -535,8 +538,27 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, /* not secure */ secure = 0; break; +#ifdef ENABLE_FASTRPZ + case sec_status_rpz_rewritten: + case sec_status_rpz_drop: + fatal_exit("impossible cached RPZ sec_status"); + break; +#endif } } +#ifdef ENABLE_FASTRPZ + if(repinfo->rpz) { + /* Scan the cached answer for RPZ hits. + * ret=1 use cache entry + * ret=-1 rewritten response already sent or dropped + * ret=0 deny a cached entry exists + */ + int ret = rpz_worker_cache(worker, msg->rep, qinfo, + id, flags, edns, repinfo); + if(ret != 1) + return ret; + } +#endif /* return this delegation from the cache */ edns_bak = *edns; edns->edns_version = EDNS_ADVERTISED_VERSION; @@ -711,6 +733,23 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, *is_secure_answer = 0; } } else *is_secure_answer = 0; +#ifdef ENABLE_FASTRPZ + if(repinfo->rpz) { + /* Scan the cached answer for RPZ hits. + * ret=1 use cache entry + * ret=-1 rewritten response already sent or dropped + * ret=0 deny a cached entry exists + */ + int ret = rpz_worker_cache(worker, rep, qinfo, id, flags, edns, + repinfo); + if(ret != 1) { + rrset_array_unlock_touch(worker->env.rrset_cache, + worker->scratchpad, rep->ref, + rep->rrset_count); + return ret; + } + } +#endif edns_bak = *edns; edns->edns_version = EDNS_ADVERTISED_VERSION; @@ -1436,6 +1475,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error, log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from", &repinfo->addr, repinfo->addrlen); goto send_reply; +#ifdef ENABLE_FASTRPZ + } else { + /* Start to rewrite for response policy zones. + * This can hit a qname trigger and be done. */ + if(rpz_start(worker, &qinfo, repinfo, &edns)) { + regional_free_all(worker->scratchpad); + return 0; + } +#endif } /* If we've found a local alias, replace the qname with the alias @@ -1486,12 +1534,21 @@ lookup_cache: h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2)); if((e=slabhash_lookup(worker->env.msg_cache, h, lookup_qinfo, 0))) { /* answer from cache - we have acquired a readlock on it */ - if(answer_from_cache(worker, &qinfo, + ret = answer_from_cache(worker, &qinfo, cinfo, &need_drop, &is_expired_answer, &is_secure_answer, &alias_rrset, &partial_rep, (struct reply_info*)e->data, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), repinfo, - &edns)) { + &edns); +#ifdef ENABLE_FASTRPZ + if(ret < 0) { + /* RPZ already dropped or sent a response. */ + lock_rw_unlock(&e->lock); + regional_free_all(worker->scratchpad); + return 0; + } +#endif + if(ret) { /* prefetch it if the prefetch TTL expired. * Note that if there is more than one pass * its qname must be that used for cache @@ -1548,11 +1605,19 @@ lookup_cache: lock_rw_unlock(&e->lock); } if(!LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) { - if(answer_norec_from_cache(worker, &qinfo, + ret = answer_norec_from_cache(worker, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), repinfo, - &edns)) { + &edns); + if(ret) { regional_free_all(worker->scratchpad); +#ifdef ENABLE_FASTRPZ + if(ret < 0) { + /* RPZ already dropped + * or sent a response. */ + return 0; + } +#endif goto send_reply; } verbose(VERB_ALGO, "answer norec from cache -- " diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index cd43f04e..b92a1af8 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1878,6 +1878,81 @@ List domain for which the AAAA records are ignored and the A record is used by dns64 processing instead. Can be entered multiple times, list a new domain for which it applies, one per line. Applies also to names underneath the name given. +.SS "Response Policy Zone Rewriting" +.LP +Response policy zone rewriting is controlled with the +.B rpz +clause. +It must contain a +.B rpz\-enable: +option, and one or more +.B rpz\-zone: +options. +It will usually also contain +.B rpz\-option: +clauses with general rewriting options or specifying dnsrpzd parameters. +Beneath the surface, the text in +.B rpz\-zone: \fI<"domain">\fR +is converted to \fI"zone domain\\n"\fR and added to the configuration string +given to +\fIlibrpz\fR(3). +The text in +.B rpz-option \fI<"text">\fR +is also added to that configuration string. +.LP +If using chroot, then the chroot directory must contain the \fIdnsrpzd\fR(3) +command and the shared libraries that it uses. +Those can be found with the \fIldd\fR(1) command. +.LP +Resolver zone and rewriting options and response policy zone triggers and +actions are described in \fIlibrpz\fR(3). +The separate control file that specifies the policy zones maintained by +the dnsrpzd daemon is described in \fIdnsrpzd\fR(8). +.LP +Many installations need a local whitelist that exempts local +domains from rewriting. +Whitelist records can be in zones transferred by dnsrpzd from +authorities or in a local zone file. +.TP +.B rpz-enable: \fI +enables Fastrpz. +If not enabled, the other options in the +.B rpz: +clause are ignored. +.TP +.B rpz-zone: \fI<"zone and options"> +specifies a policy zone and optional per-zone rewriting parameters. +.TP +.B rpz-option: \fI<"option"> +specifies general Fastrpz options. +.LP +Fastrpz is available only on POSIX compliant UNIX-like systems with the +\fImmap\fR(2) system call. +.LP +Fastrpz in Unbound differs from rpz and fastrpz in BIND by +.RS 3 +.HP 4 +RPZ-CLIENT-IP triggers can only be used in the first policy zone +specified with +.B rpz-zone: +.HP +Policy zone rewriting is disabled by the DO bit in DNS requests +even when no DNSSEC signatures are supplied by authorities. +.HP +Unbound local zones are not subject to rpz rewriting. +.HP +Like Fastrpz with BIND but unlike classic BIND rpz, +the ADDITIONAL sections of rewritten responses contain the SOA record from +the policy zone used to rewrite the response. +.RE +.P +.nf +# example Fastrpz settings for use with chroot on Freebsd +rpz: + rpz-zone: "rpz.example.org" + rpz-zone: "other.rpz.example.org ip-as-ns yes" + rpz-option: "dnsrpzd ./dnsrpzd" +.fi .SS "DNSCrypt Options" .LP The diff --git a/fastrpz/librpz.h b/fastrpz/librpz.h new file mode 100644 index 00000000..645279d1 --- /dev/null +++ b/fastrpz/librpz.h @@ -0,0 +1,957 @@ +/* + * Define the interface from a DNS resolver to the Response Policy Zone + * library, librpz. + * + * This file should be included only the interface functions between the + * resolver and librpz to avoid name space pollution. + * + * Copyright (c) 2016-2017 Farsight Security, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Fastrpz version 1.2.10 + */ + +#ifndef LIBRPZ_H +#define LIBRPZ_H + +#include +#include +#include +#include +#include +#include + + +/* + * Allow either ordinary or dlopen() linking. + */ +#ifdef LIBRPZ_INTERNAL +#define LIBDEF(t,s) extern t s; +#define LIBDEF_F(f) LIBDEF(librpz_##f##_t, librpz_##f) +#else +#define LIBDEF(t,s) +#define LIBDEF_F(f) +#endif + +/* + * Response Policy Zone triggers. + * Comparisons of trigger precedences require + * LIBRPZ_TRIG_CLIENT_IP < LIBRPZ_TRIG_QNAME < LIBRPZ_TRIG_IP + * < LIBRPZ_TRIG_NSDNAME < LIBRPZ_TRIG_NSIP} + */ +typedef enum { + LIBRPZ_TRIG_BAD =0, + LIBRPZ_TRIG_CLIENT_IP =1, + LIBRPZ_TRIG_QNAME =2, + LIBRPZ_TRIG_IP =3, + LIBRPZ_TRIG_NSDNAME =4, + LIBRPZ_TRIG_NSIP =5 +} librpz_trig_t; +#define LIBRPZ_TRIG_SIZE 3 /* sizeof librpz_trig_t in bits */ +typedef uint8_t librpz_tbit_t; /* one bit for each of the TRIGS_NUM + * trigger types */ + + +/* + * Response Policy Zone Actions or policies + */ +typedef enum { + LIBRPZ_POLICY_UNDEFINED =0, /* an empty entry or no decision yet */ + LIBRPZ_POLICY_DELETED =1, /* placeholder for a deleted policy */ + + LIBRPZ_POLICY_PASSTHRU =2, /* 'passthru': do not rewrite */ + LIBRPZ_POLICY_DROP =3, /* 'drop': do not respond */ + LIBRPZ_POLICY_TCP_ONLY =4, /* 'tcp-only': answer UDP with TC=1 */ + LIBRPZ_POLICY_NXDOMAIN =5, /* 'nxdomain': answer with NXDOMAIN */ + LIBRPZ_POLICY_NODATA =6, /* 'nodata': answer with ANCOUNT=0 */ + LIBRPZ_POLICY_RECORD =7, /* rewrite with the policy's RR */ + + /* only in client configurations to override the zone */ + LIBRPZ_POLICY_GIVEN, /* 'given': what policy record says */ + LIBRPZ_POLICY_DISABLED, /* at most log */ + LIBRPZ_POLICY_CNAME, /* answer with 'cname x' */ +} librpz_policy_t; +#define LIBRPZ_POLICY_BITS 4 + +/* + * Special policies that appear as targets of CNAMEs + * NXDOMAIN is signaled by a CNAME with a "." target. + * NODATA is signaled by a CNAME with a "*." target. + */ +#define LIBRPZ_RPZ_PREFIX "rpz-" +#define LIBRPZ_RPZ_PASSTHRU LIBRPZ_RPZ_PREFIX"passthru" +#define LIBRPZ_RPZ_DROP LIBRPZ_RPZ_PREFIX"drop" +#define LIBRPZ_RPZ_TCP_ONLY LIBRPZ_RPZ_PREFIX"tcp-only" + + +typedef uint16_t librpz_dznum_t; /* dnsrpzd zone # in [0,DZNUM_MAX] */ +typedef uint8_t librpz_cznum_t; /* client zone # in [0,CZNUM_MAX] */ + + +/* + * CIDR block + */ +typedef struct librpz_prefix { + union { + struct in_addr in; + struct in6_addr in6; + } addr; + uint8_t family; + uint8_t len; +} librpz_prefix_t; + +/* + * A domain + */ +typedef uint8_t librpz_dsize_t; +typedef struct librpz_domain { + librpz_dsize_t size; /* of only .d */ + uint8_t d[0]; /* variable length wire format */ +} librpz_domain_t; + +/* + * A maximal domain buffer + */ +typedef struct librpz_domain_buf { + librpz_dsize_t size; + uint8_t d[NS_MAXCDNAME]; +} librpz_domain_buf_t; + +/* + * A resource record without the owner name. + * C compilers say that sizeof(librpz_rr_t)=12 instead of 10. + */ +typedef struct { + uint16_t type; /* network byte order */ + uint16_t class; /* network byte order */ + uint32_t ttl; /* network byte order */ + uint16_t rdlength; /* network byte order */ + uint8_t rdata[0]; /* variable length */ +} librpz_rr_t; + +/* + * The database file might be mapped with different starting addresses + * by concurrent clients (resolvers), and so all pointers are offsets. + */ +typedef uint32_t librpz_idx_t; +#define LIBRPZ_IDX_NULL 0 +#define LIBRPZ_IDX_MIN 1 +#define LIBRPZ_IDX_BAD ((librpz_idx_t)-1) +/** + * Partial decoded results of a set of RPZ queries for a single DNS response + * or interation through the mapped file. + */ +typedef int16_t librpz_result_id_t; +typedef struct librpz_result { + librpz_idx_t next_rr; + librpz_result_id_t hit_id; /* trigger ID from resolver */ + librpz_policy_t zpolicy; /* policy from zone */ + librpz_policy_t policy; /* adjusted by client configuration */ + librpz_dznum_t dznum; /* dnsrpzd zone number */ + librpz_cznum_t cznum; /* librpz client zone number */ + librpz_trig_t trig:LIBRPZ_TRIG_SIZE; + bool log:1; /* log rewrite given librpz_log_level */ +} librpz_result_t; + + +/** + * librpz trace or log levels. + */ +typedef enum { + LIBRPZ_LOG_FATAL =0, /* always print fatal errors */ + LIBRPZ_LOG_ERROR =1, /* errors have this level */ + LIBRPZ_LOG_TRACE1 =2, /* big events such as dnsrpzd starts */ + LIBRPZ_LOG_TRACE2 =3, /* smaller dnsrpzd zone transfers */ + LIBRPZ_LOG_TRACE3 =4, /* librpz hits */ + LIBRPZ_LOG_TRACE4 =5, /* librpz lookups */ + LIBRPZ_LOG_INVALID =999, +} librpz_log_level_t; +typedef librpz_log_level_t (librpz_log_level_val_t)(librpz_log_level_t level); +LIBDEF_F(log_level_val) + +/** + * Logging function that can be supplied by the resolver. + * @param level is one of librpz_log_level_t + * @param ctx is for use by the resolver's logging system. + * NULL mean a context-free message. + */ +typedef void(librpz_log_fnc_t)(librpz_log_level_t level, void *ctx, + const char *buf); + +/** + * Point librpz logging functions to the resolver's choice. + */ +typedef void (librpz_set_log_t)(librpz_log_fnc_t *new_log, const char *prog_nm); +LIBDEF_F(set_log) + + +/** + * librpz error messages are put in these buffers. + * Use a structure intead of naked char* to let the compiler check the length. + * A function defined with "foo(char buf[120])" can be called with + * "char sbuf[2]; foo(sbuf)" and suffer a buffer overrun. + */ +typedef struct { + char c[120]; +} librpz_emsg_t; + + +#ifdef LIBRPZ_HAVE_ATTR +#define LIBRPZ_UNUSED __attribute__((unused)) +#define LIBRPZ_PF(f,l) __attribute__((format(printf,f,l))) +#define LIBRPZ_NORET __attribute__((__noreturn__)) +#else +#define LIBRPZ_UNUSED +#define LIBRPZ_PF(f,l) +#define LIBRPZ_NORET +#endif + +#ifdef HAVE_BUILTIN_EXPECT +#define LIBRPZ_LIKELY(c) __builtin_expect(!!(c), 1) +#define LIBRPZ_UNLIKELY(c) __builtin_expect(!!(c), 0) +#else +#define LIBRPZ_LIKELY(c) (c) +#define LIBRPZ_UNLIKELY(c) (c) +#endif + +typedef bool (librpz_parse_log_opt_t)(librpz_emsg_t *emsg, const char *arg); +LIBDEF_F(parse_log_opt) + +typedef void (librpz_vpemsg_t)(librpz_emsg_t *emsg, + const char *p, va_list args); +LIBDEF_F(vpemsg) +typedef void (librpz_pemsg_t)(librpz_emsg_t *emsg, + const char *p, ...) LIBRPZ_PF(2,3); +LIBDEF_F(pemsg) + +typedef void (librpz_vlog_t)(librpz_log_level_t level, void *ctx, + const char *p, va_list args); +LIBDEF_F(vlog) +typedef void (librpz_log_t)(librpz_log_level_t level, void *ctx, + const char *p, ...) LIBRPZ_PF(3,4); +LIBDEF_F(log) + +typedef void (librpz_fatal_t)(int ex_code, + const char *p, ...) LIBRPZ_PF(2,3); +extern void librpz_fatal(int ex_code, + const char *p, ...) LIBRPZ_PF(2,3) LIBRPZ_NORET; + +typedef void (librpz_rpz_assert_t)(const char *file, unsigned line, + const char *p, ...) LIBRPZ_PF(3,4); +extern void librpz_rpz_assert(const char *file, unsigned line, + const char *p, ...) LIBRPZ_PF(3,4) LIBRPZ_NORET; + +typedef void (librpz_rpz_vassert_t)(const char *file, uint line, + const char *p, va_list args); +extern void librpz_rpz_vassert(const char *file, uint line, + const char *p, va_list args) LIBRPZ_NORET; + + +/* + * As far as clients are concerned, all relative pointers or indexes in a + * version of the mapped file except trie node parent pointers remain valid + * forever. A client must release a version so that it can be garbage + * collected by the file system. When dnsrpzd needs to expand the file, + * it copies the old file to a new, larger file. Clients can continue + * using the old file. + * + * Versions can also appear in a single file. Old nodes and trie values + * within the file are not destroyed until all clients using the version + * that contained the old values release the version. + * + * A client is marked as using version by connecting to the deamon. It is + * marked as using all subsequent versions. A client releases all versions + * by closing the connection or a range of versions by updating is slot + * in the shared memory version table. + * + * As far as clients are concerned, there are the following possible librpz + * failures: + * - malloc() or other fatal internal librpz problems indicated by + * a failing return from a librpz function + * All operations will fail until client handle is destroyed and + * recreated with librpz_client_detach() and librpz_client_create(). + * - corrupt database detected by librpz code, corrupt database detected + * by dnsrpzd, or disconnection from the daemon. + * Current operations will fail. + * + * Clients assume that the file has already been unlinked before + * the corrupt flag is set so that they do not race with the server + * over the corruption of a single file. A client that finds the + * corrupt set knows that dnsrpzd has already crashed with + * abort() and is restarting. The client can re-connect to dnsrpzd + * and retransmit its configuration, backing off as usual if anything + * goes wrong. + * + * Searchs of the database by a client do not need locks against dnsrpzd or + * other clients, but a lock is used to protect changes to the connection + * by competing threads in the client. The client provides fuctions + * to serialize the conncurrent use of any single client handle. + * Functions that do nothing are appropriate for applications that are + * not "threaded" or that do not share client handles among threads. + * Otherwise, functions must be provided to librpz_clientcreate(). + * Something like the following works with pthreads: + * + * static void + * lock(void *mutex) { assert(pthread_mutex_lock(mutex) == 0); } + * + * static void + * unlock(void *mutex) { assert(pthread_mutex_unlock(mutex) == 0); } + * + * static void + * mutex_destroy(void *mutex) { assert(pthread_mutex_destroy(mutex) == 0); } + * + * + * + * At every instant, all of the data and pointers in the mapped file are valid. + * Changes to trie node or other data are always made so that it and + * all pointers in and to it remain valid for a time. Old versions are + * eventually discarded. + * + * Dnsrpzd periodically defines a new version by setting asside all changes + * made since the previous version was defined. Subsequent changes + * made (only!) by dnsrpzd will be part of the next version. + * + * To discard an old version, dnsrpzd must know that all clients have stopped + * using that version. Clients do that by using part of the mapped file + * to tell dnsrpzd the oldest version that each client is using. + * Dnsrpzd assigns each connecting client an entry in the cversions array + * in the mapped file. The client puts version numbers into that entry + * to signal to dnsrpzd which versions that can be discarded. + * Dnsrpzd is free, as far as that client is concerned, to discard all + * numerically smaller versions. A client can disclaim all versions with + * the version number VERSIONS_ALL or 0. + * + * The race between a client changing its entry and dnsrpzd discarding a + * version is resolved by allowing dnsrpzd to discard all versions + * smaller or equal to the client's version number. If dnsrpzd is in + * the midst of discarding or about to discard version N when the + * client asserts N, no harm is done. The client depends only on + * the consistency of version N+1. + * + * This version mechanism depends in part on not being exercised too frequently + * Version numbers are 32 bits long and dnsrpzd creates new versions + * at most once every 30 seconds. + */ + + +/* + * Lock functions for concurrent use of a single librpz_client_t client handle. + */ +typedef void(librpz_mutex_t)(void *mutex); + +/* + * List of connections to dnsrpzd daemons. + */ +typedef struct librpz_clist librpz_clist_t; + +/* + * Client's handle on dnsrpzd. + */ +typedef struct librpz_client librpz_client_t; + +/** + * Create the list of connections to the dnsrpzd daemon. + * @param[out] emsg: error message + * @param lock: start exclusive access to the client handle + * @param unlock: end exclusive access to the client handle + * @param mutex_destroy: release the lock + * @param mutex: pointer to the lock for the client handle + * @param log_ctx: NULL or resolver's context log messages + */ +typedef librpz_clist_t *(librpz_clist_create_t)(librpz_emsg_t *emsg, + librpz_mutex_t *lock, + librpz_mutex_t *unlock, + librpz_mutex_t *mutex_destroy, + void *mutex, void *log_ctx); +LIBDEF_F(clist_create) + + +/** + * Release the list of dnsrpzd connections. + */ +typedef void (librpz_clist_detach_t)(librpz_clist_t **clistp); +LIBDEF_F(clist_detach) + +/** + * Create a librpz client handle. + * @param[out] emsg: error message + * @param: list of dnsrpzd connections + * @param cstr: string of configuration settings separated by ';' or '\n' + * @param use_expired: true to not ignore expired zones + * @return client handle or NULL if the handle could not be created + */ +typedef librpz_client_t *(librpz_client_create_t)(librpz_emsg_t *emsg, + librpz_clist_t *clist, + const char *cstr, + bool use_expired); +LIBDEF_F(client_create) + +/** + * Start (if necessary) dnsrpzd and connect to it. + * @param[out] emsg: error message + * @param client handle + * @param optional: true if it is ok if starting the daemon is not allowed + */ +typedef bool (librpz_connect_t)(librpz_emsg_t *emsg, librpz_client_t *client, + bool optional); +LIBDEF_F(connect) + +/** + * Start to destroy a librpz client handle. + * It will not be destroyed until the last set of RPZ queries represented + * by a librpz_rsp_t ends. + * @param client handle to be released + * @return false on error + */ +typedef void (librpz_client_detach_t)(librpz_client_t **clientp); +LIBDEF_F(client_detach) + +/** + * State for a set of RPZ queries for a single DNS response + * or for listing the database. + */ +typedef struct librpz_rsp librpz_rsp_t; + +/** + * Start a set of RPZ queries for a single DNS response. + * @param[out] emsg: error message for false return or *rspp=NULL + * @param[out] rspp created context or NULL + * @param[out] min_ns_dotsp: NULL or pointer to configured MIN-NS-DOTS value + * @param client state + * @param have_rd: RD=1 in the DNS request + * @param have_do: DO=1 in the DNS request + * @return false on error + */ +typedef bool (librpz_rsp_create_t)(librpz_emsg_t *emsg, librpz_rsp_t **rspp, + int *min_ns_dotsp, librpz_client_t *client, + bool have_rd, bool have_do); +LIBDEF_F(rsp_create) + +/** + * Finish RPZ work for a DNS response. + */ +typedef void (librpz_rsp_detach_t)(librpz_rsp_t **rspp); +LIBDEF_F(rsp_detach) + +/** + * Get the final, accumulated result of a set of RPZ queries. + * Yield LIBRPZ_POLICY_UNDEFINED if + * - there were no hits, + * - there was a dispositive hit, be we have not recursed and are required + * to recurse so that evil DNS authories will not know we are using RPZ + * - we have a hit and have recursed, but later data such as NSIP could + * override + * @param[out] emsg + * @param[out] result describes the hit + * or result->policy=LIBRPZ_POLICY_UNDEFINED without a hit + * @param[out] result: current policy rewrite values + * @param recursed: recursion has now been done even if it was not done + * when the hit was found + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_result_t)(librpz_emsg_t *emsg, librpz_result_t *result, + bool recursed, const librpz_rsp_t *rsp); +LIBDEF_F(rsp_result) + +/** + * Might looking for a trigger be worthwhile? + * @param trig: look for this type of trigger + * @param ipv6: true if trig is LIBRPZ_TRIG_CLIENT_IP, LIBRPZ_TRIG_IP, + * or LIBRPZ_TRIG_NSIP and the IP address is IPv6 + * @return: true if looking could be worthwhile + */ +typedef bool (librpz_have_trig_t)(librpz_trig_t trig, bool ipv6, + const librpz_rsp_t *rsp); +LIBDEF_F(have_trig) + +/** + * Might looking for NSDNAME and NSIP triggers be worthwhile? + * @return: true if looking could be worthwhile + */ +typedef bool (librpz_have_ns_trig_t)(const librpz_rsp_t *rsp); +LIBDEF_F(have_ns_trig) + +/** + * Convert the found client IP trie key to a CIDR block + * @param[out] emsg + * @param[out] prefix trigger + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_clientip_prefix_t)(librpz_emsg_t *emsg, + librpz_prefix_t *prefix, + librpz_rsp_t *rsp); +LIBDEF_F(rsp_clientip_prefix) + +/** + * Compute the owner name of the found or result trie key, usually to log it. + * An IP address key might be returned as 8.0.0.0.127.rpz-client-ip. + * example.com. might be a qname trigger. example.com.rpz-nsdname. could + * be an NSDNAME trigger. + * @param[out] emsg + * @param[out] owner domain + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_domain_t)(librpz_emsg_t *emsg, + librpz_domain_buf_t *owner, + librpz_rsp_t *rsp); +LIBDEF_F(rsp_domain) + +/** + * Get the next RR of the LIBRPZ_POLICY_RECORD result after an initial use of + * librpz_rsp_result() or librpz_itr_node() or after a previous use of + * librpz_rsp_rr(). The RR is in uncompressed wire format including type, + * class, ttl and length in network byte order. + * @param[out] emsg + * @param[out] typep: optional host byte order record type or ns_t_invalid (0) + * @param[out] classp: class such as ns_c_in + * @param[out] ttlp: TTL + * @param[out] rrp: optionall malloc() buffer containting the next RR or + * NULL after the last RR + * @param[out] result: current policy rewrite values + * @param qname: used construct a wildcard CNAME + * @param qname_size + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_rr_t)(librpz_emsg_t *emsg, uint16_t *typep, + uint16_t *classp, uint32_t *ttlp, + librpz_rr_t **rrp, librpz_result_t *result, + const uint8_t *qname, size_t qname_size, + librpz_rsp_t *rsp); +LIBDEF_F(rsp_rr) + +/** + * Get the next RR of the LIBRPZ_POLICY_RECORD result. + * @param[out] emsg + * @param[out] ttlp: TTL + * @param[out] rrp: malloc() buffer with SOA RR without owner name + * @param[out] result: current policy rewrite values + * @param[out] origin: SOA owner name + * @param[out] origin_size + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_soa_t)(librpz_emsg_t *emsg, uint32_t *ttlp, + librpz_rr_t **rrp, librpz_domain_buf_t *origin, + librpz_result_t *result, librpz_rsp_t *rsp); +LIBDEF_F(rsp_soa) + +/** + * Get the SOA serial number for a policy zone to compare with a known value + * to check whether a zone tranfer is complete. + */ +typedef bool (librpz_soa_serial_t)(librpz_emsg_t *emsg, uint32_t *serialp, + const char *domain_nm, librpz_rsp_t *rsp); +LIBDEF_F(soa_serial) + +/** + * Save the current policy checking state. + * @param[out] emsg + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_push_t)(librpz_emsg_t *emsg, librpz_rsp_t *rsp); +LIBDEF_F(rsp_push) +#define LIBRPZ_RSP_STACK_DEPTH 3 + +/** + * Restore the previous policy checking state. + * @param[out] emsg + * @param[out] result: NULL or restored policy rewrite values + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_pop_t)(librpz_emsg_t *emsg, librpz_result_t *result, + librpz_rsp_t *rsp); +LIBDEF_F(rsp_pop) + +/** + * Discard the most recently save policy checking state. + * @param[out] emsg + * @param[out] result: NULL or restored policy rewrite values + * @return false on error + */ +typedef bool (librpz_rsp_pop_discard_t)(librpz_emsg_t *emsg, librpz_rsp_t *rsp); +LIBDEF_F(rsp_pop_discard) + +/** + * Disable a zone. + * @param[out] emsg + * @param znum + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_rsp_forget_zone_t)(librpz_emsg_t *emsg, + librpz_cznum_t znum, librpz_rsp_t *rsp); +LIBDEF_F(rsp_forget_zone) + +/** + * Apply RPZ to an IP address. + * @param[out] emsg + * @param addr: address to check + * @param ipv6: true for 16 byte IPv6 instead of 4 byte IPv4 + * @param trig LIBRPZ_TRIG_CLIENT_IP, LIBRPZ_TRIG_IP, or LIBRPZ_TRIG_NSIP + * @param hit_id: caller chosen + * @param recursed: recursion has been done + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_ck_ip_t)(librpz_emsg_t *emsg, + const void *addr, uint family, + librpz_trig_t trig, librpz_result_id_t hit_id, + bool recursed, librpz_rsp_t *rsp); +LIBDEF_F(ck_ip) + +/** + * Apply RPZ to a wire-format domain. + * @param[out] emsg + * @param domain in wire format + * @param domain_size + * @param trig LIBRPZ_TRIG_QNAME or LIBRPZ_TRIG_NSDNAME + * @param hit_id: caller chosen + * @param recursed: recursion has been done + * @param[in,out] rsp state from librpz_itr_start() + * @return false on error + */ +typedef bool (librpz_ck_domain_t)(librpz_emsg_t *emsg, + const uint8_t *domain, size_t domain_size, + librpz_trig_t trig, librpz_result_id_t hit_id, + bool recursed, librpz_rsp_t *rsp); +LIBDEF_F(ck_domain) + +/** + * Ask dnsrpzd to refresh a zone. + * @param[out] emsg error message + * @param librpz_domain_t domain to refresh + * @param client context + * @return false after error + */ +typedef bool (librpz_zone_refresh_t)(librpz_emsg_t *emsg, const char *domain, + librpz_rsp_t *rsp); +LIBDEF_F(zone_refresh) + +/** + * Get a string describing the the databasse + * @param license: include the license + * @param cfiles: include the configuration file names + * @param listens: include the local notify IP addresses + * @param[out] emsg error message if the result is null + * @param client context + * @return malloc'ed string or NULL after error + */ +typedef char *(librpz_db_info_t)(librpz_emsg_t *emsg, + bool license, bool cfiles, bool listens, + librpz_rsp_t *rsp); +LIBDEF_F(db_info) + +/** + * Start a context for listing the nodes and/or zones in the mapped file + * @param[out] emsg: error message for false return or *rspp=NULL + * @param[out[ rspp created context or NULL + * @param client context + * @return false after error + */ +typedef bool (librpz_itr_start_t)(librpz_emsg_t *emsg, librpz_rsp_t **rspp, + librpz_client_t *client); +LIBDEF_F(itr_start) + +/** + * Get mapped file memory allocation statistics. + * @param[out] emsg: error message + * @param rsp state from librpz_itr_start() + * @return malloc'ed string or NULL after error + */ +typedef char *(librpz_mf_stats_t)(librpz_emsg_t *emsg, librpz_rsp_t *rsp); +LIBDEF_F(mf_stats) + +/** + * Get versions currently used by clients. + * @param[out] emsg: error message + * @param[in,out] rsp: state from librpz_itr_start() + * @return malloc'ed string or NULL after error + */ +typedef char *(librpz_vers_stats_t)(librpz_emsg_t *emsg, librpz_rsp_t *rsp); +LIBDEF_F(vers_stats) + +/** + * Allocate a string describing the next zone or "" after the last zone. + * @param[out] emsg + * @param all_zones to list all instead of only requested zones + * @param[in,out] rsp state from librpz_rsp_start() + * @return malloc'ed string or NULL after error + */ +typedef char *(librpz_itr_zone_t)(librpz_emsg_t *emsg, bool all_zones, + librpz_rsp_t *rsp); +LIBDEF_F(itr_zone) + +/** + * Describe the next trie node while dumping the database. + * @param[out] emsg + * @param[out] result describes node + * or result->policy=LIBRPZ_POLICY_UNDEFINED after the last node. + * @param all_zones to list all instead of only requested zones + * @param[in,out] rsp state from librpz_itr_start() + * @return: false on error + */ +typedef bool (librpz_itr_node_t)(librpz_emsg_t *emsg, librpz_result_t *result, + bool all_zones, librpz_rsp_t *rsp); +LIBDEF_F(itr_node) + +/** + * RPZ policy to string with a backup buffer of POLICY2STR_SIZE size + */ +typedef const char *(librpz_policy2str_t)(librpz_policy_t policy, + char *buf, size_t buf_size); +#define POLICY2STR_SIZE sizeof("policy xxxxxx") +LIBDEF_F(policy2str) + +/** + * Trigger type to string. + */ +typedef const char *(librpz_trig2str_t)(librpz_trig_t trig); +LIBDEF_F(trig2str) + +/** + * Convert a number of seconds to a zone file duration string + */ +typedef const char *(librpz_secs2str_t)(time_t secs, + char *buf, size_t buf_size); +#define SECS2STR_SIZE sizeof("1234567w7d24h59m59s") +LIBDEF_F(secs2str) + +/** + * Parse a duration with 's', 'm', 'h', 'd', and 'w' units. + */ +typedef bool (librpz_str2secs_t)(librpz_emsg_t *emsg, time_t *val, + const char *str0); +LIBDEF_F(str2secs) + +/** + * Translate selected rtypes to strings + */ +typedef const char *(librpz_rtype2str_t)(uint type, char *buf, size_t buf_size); +#define RTYPE2STR_SIZE sizeof("type xxxxx") +LIBDEF_F(rtype2str) + +/** + * Local version of ns_name_ntop() for portability. + */ +typedef int (librpz_domain_ntop_t)(const u_char *src, char *dst, size_t dstsiz); +LIBDEF_F(domain_ntop) + +/** + * Local version of ns_name_pton(). + */ +typedef int (librpz_domain_pton2_t)(const char *src, u_char *dst, size_t dstsiz, + size_t *dstlen, bool lower); +LIBDEF_F(domain_pton2) + +typedef union socku socku_t; +typedef socku_t *(librpz_mk_inet_su_t)(socku_t *su, const struct in_addr *addrp, + in_port_t port); +LIBDEF_F(mk_inet_su) + +typedef socku_t *(librpz_mk_inet6_su_t)(socku_t *su, const + struct in6_addr *addrp, + uint32_t scope_id, in_port_t port); +LIBDEF_F(mk_inet6_su) + +typedef bool (librpz_str2su_t)(socku_t *sup, const char *str); +LIBDEF_F(str2su) + +typedef char *(librpz_su2str_t)(char *str, size_t str_len, const socku_t *su); +LIBDEF_F(su2str) +#define SU2STR_SIZE (INET6_ADDRSTRLEN+1+6+1) + + +/** + * default path to dnsrpzd + */ +const char *librpz_dnsrpzd_path; + + +#undef LIBDEF + +/* + * This is the dlopen() interface to librpz. + */ +typedef const struct { + const char *dnsrpzd_path; + const char *version; + librpz_parse_log_opt_t *parse_log_opt; + librpz_log_level_val_t *log_level_val; + librpz_set_log_t *set_log; + librpz_vpemsg_t *vpemsg; + librpz_pemsg_t *pemsg; + librpz_vlog_t *vlog; + librpz_log_t *log; + librpz_fatal_t *fatal LIBRPZ_NORET; + librpz_rpz_assert_t *rpz_assert LIBRPZ_NORET; + librpz_rpz_vassert_t *rpz_vassert LIBRPZ_NORET; + librpz_clist_create_t *clist_create; + librpz_clist_detach_t *clist_detach; + librpz_client_create_t *client_create; + librpz_connect_t *connect; + librpz_client_detach_t *client_detach; + librpz_rsp_create_t *rsp_create; + librpz_rsp_detach_t *rsp_detach; + librpz_rsp_result_t *rsp_result; + librpz_have_trig_t *have_trig; + librpz_have_ns_trig_t *have_ns_trig; + librpz_rsp_clientip_prefix_t *rsp_clientip_prefix; + librpz_rsp_domain_t *rsp_domain; + librpz_rsp_rr_t *rsp_rr; + librpz_rsp_soa_t *rsp_soa; + librpz_soa_serial_t *soa_serial; + librpz_rsp_push_t *rsp_push; + librpz_rsp_pop_t *rsp_pop; + librpz_rsp_pop_discard_t *rsp_pop_discard; + librpz_rsp_forget_zone_t *rsp_forget_zone; + librpz_ck_ip_t *ck_ip; + librpz_ck_domain_t *ck_domain; + librpz_zone_refresh_t *zone_refresh; + librpz_db_info_t *db_info; + librpz_itr_start_t *itr_start; + librpz_mf_stats_t *mf_stats; + librpz_vers_stats_t *vers_stats; + librpz_itr_zone_t *itr_zone; + librpz_itr_node_t *itr_node; + librpz_policy2str_t *policy2str; + librpz_trig2str_t *trig2str; + librpz_secs2str_t *secs2str; + librpz_str2secs_t *str2secs; + librpz_rtype2str_t *rtype2str; + librpz_domain_ntop_t *domain_ntop; + librpz_domain_pton2_t *domain_pton2; + librpz_mk_inet_su_t *mk_inet_su; + librpz_mk_inet6_su_t *mk_inet6_su; + librpz_str2su_t *str2su; + librpz_su2str_t *su2str; +} librpz_0_t; +extern librpz_0_t librpz_def_0; + +/* + * Future versions can be upward compatible by defining LIBRPZ_DEF as + * librpz_X_t. + */ +#define LIBRPZ_DEF librpz_def_0 +#define LIBRPZ_DEF_STR "librpz_def_0" + +typedef librpz_0_t librpz_t; +extern librpz_t *librpz; + + +#if LIBRPZ_LIB_OPEN == 2 +#include + +/** + * link-load librpz + * @param[out] emsg: error message + * @param[in,out] dl_handle: NULL or pointer to new dlopen handle + * @param[in] path: librpz.so path + * @return address of interface structure or NULL on failure + */ +static inline librpz_t * +librpz_lib_open(librpz_emsg_t *emsg, void **dl_handle, const char *path) +{ + void *handle; + librpz_t *new_librpz; + + emsg->c[0] = '\0'; + + /* + * Close a previously opened handle on librpz.so. + */ + if (dl_handle != NULL && *dl_handle != NULL) { + if (dlclose(*dl_handle) != 0) { + snprintf(emsg->c, sizeof(librpz_emsg_t), + "dlopen(NULL): %s", dlerror()); + return (NULL); + } + *dl_handle = NULL; + } + + /* + * First try the main executable of the process in case it was + * linked to librpz. + * Do not worry if we cannot search the main executable of the process. + */ + handle = dlopen(NULL, RTLD_NOW | RTLD_LOCAL); + if (handle != NULL) { + new_librpz = dlsym(handle, LIBRPZ_DEF_STR); + if (new_librpz != NULL) { + if (dl_handle != NULL) + *dl_handle = handle; + return (new_librpz); + } + if (dlclose(handle) != 0) { + snprintf(emsg->c, sizeof(librpz_emsg_t), + "dlsym(NULL, "LIBRPZ_DEF_STR"): %s", + dlerror()); + return (NULL); + } + } + + if (path == NULL || path[0] == '\0') { + snprintf(emsg->c, sizeof(librpz_emsg_t), + "librpz not linked and no dlopen() path provided"); + return (NULL); + } + + handle = dlopen(path, RTLD_NOW | RTLD_LOCAL); + if (handle == NULL) { + snprintf(emsg->c, sizeof(librpz_emsg_t), "dlopen(%s): %s", + path, dlerror()); + return (NULL); + } + new_librpz = dlsym(handle, LIBRPZ_DEF_STR); + if (new_librpz != NULL) { + if (dl_handle != NULL) + *dl_handle = handle; + return (new_librpz); + } + snprintf(emsg->c, sizeof(librpz_emsg_t), + "dlsym(%s, "LIBRPZ_DEF_STR"): %s", + path, dlerror()); + dlclose(handle); + return (NULL); +} + +#elif defined(LIBRPZ_LIB_OPEN) + +/* + * Statically link to the librpz.so DSO on systems without dlopen() + */ +static inline librpz_t * +librpz_lib_open(librpz_emsg_t *emsg, void **dl_handle, const char *path) +{ + (void)(path); + + if (dl_handle != NULL) + *dl_handle = NULL; + +#if LIBRPZ_LIB_OPEN == 1 + emsg->c[0] = '\0'; + return (&LIBRPZ_DEF); +#else + snprintf(emsg->c, sizeof(librpz_emsg_t), + "librpz not available via ./configure"); + return (NULL); +#endif /* LIBRPZ_LIB_OPEN */ +} +#endif /* LIBRPZ_LIB_OPEN */ + +#endif /* LIBRPZ_H */ diff --git a/fastrpz/rpz.c b/fastrpz/rpz.c new file mode 100644 index 00000000..c5ab7801 --- /dev/null +++ b/fastrpz/rpz.c @@ -0,0 +1,1352 @@ +/* + * fastrpz/rpz.c - interface to the fastrpz response policy zone library + * + * Optimize no-rewrite cases for speed but optimize rewriting for + * simplicity and size. + */ + +#include "config.h" + +#ifdef ENABLE_FASTRPZ +#include "daemon/daemon.h" +#define LIBRPZ_LIB_OPEN FASTRPZ_LIB_OPEN +#include "fastrpz/rpz.h" +#include "daemon/worker.h" +#include "iterator/iter_delegpt.h" +#include "iterator/iter_utils.h" +#include "iterator/iterator.h" +#include "util/data/dname.h" +#include "util/data/msgencode.h" +#include "util/data/msgparse.h" +#include "util/data/msgreply.h" +#include "util/log.h" +#include "util/netevent.h" +#include "util/net_help.h" +#include "util/regional.h" +#include "util/storage/slabhash.h" +#include "services/cache/dns.h" +#include "services/cache/rrset.h" +#include "services/mesh.h" +#include "sldns/sbuffer.h" +#include "sldns/rrdef.h" + + +typedef enum state { + /* No more rewriting */ + st_off = 1, + /* Send SERVFAIL */ + st_servfail, + /* No dispositive hit yet */ + st_unknown, + /* Let the iterator resolve a CNAME or get a delegation point. */ + st_iterate, + /* Let the iterator resolve NS to check NSIP or NSDNAME triggers. */ + st_ck_ns, + /* We have an answer */ + st_rewritten, +} st_t; + + +/* RPZ state pointed to by struct comm_reply */ +typedef struct commreply_rpz { + /* librpz state */ + librpz_rsp_t* rsp; + /* ID for log messages */ + int log_id; + + /* from configuration */ + int min_ns_dots; + + /* Running in the iterator */ + bool iterating; + + /* current and previous state and librpz result */ + st_t st; + st_t saved_st[LIBRPZ_RSP_STACK_DEPTH-1]; + librpz_result_t result; + + /* Stop adding CNAMEs to the prepend list before this owner name. */ + librpz_domain_buf_t cname_hit; + /* It is not the first CNAME */ + bool cname_hit_2nd; + librpz_result_id_t hit_id; +} commreply_rpz_t; + + +/* Generate an ID for log messages. */ +static int log_id; + +librpz_t *librpz; + + +static void LIBRPZ_NORET +rpz_assert(const char *s) +{ + fatal_exit("%s", s); + exit(1); +} +#define RPZ_ASSERT(c) ((c) ? (void)0 : rpz_assert(#c), (void)0) + +/* + * librpz client handle locking + */ +static void +lock_destroy(void* mutex) +{ + lock_basic_destroy(mutex); + free(mutex); +} + +static void +lock(void* mutex) +{ + lock_basic_lock(mutex); +} + +static void +unlock(void* mutex) +{ + lock_basic_unlock(mutex); +} + + +static void +log_fnc(librpz_log_level_t level, void* ATTR_UNUSED(ctx), const char* buf) +{ + /* Setting librpz_log_level overrides the unbound "verbose" level. */ + if(level > LIBRPZ_LOG_TRACE1 && + level <= librpz->log_level_val(LIBRPZ_LOG_INVALID)) + level = LIBRPZ_LOG_TRACE1; + + switch(level) { + case LIBRPZ_LOG_FATAL: + case LIBRPZ_LOG_ERROR: /* errors */ + default: + log_err("rpz: %s", buf); + break; + + case LIBRPZ_LOG_TRACE1: /* big events such as dnsrpzd starts */ + verbose(VERB_OPS, "rpz: %s", buf); + break; + + case LIBRPZ_LOG_TRACE2: /* smaller dnsrpzd zone transfers */ + verbose(VERB_DETAIL, "rpz: %s", buf); + break; + + case LIBRPZ_LOG_TRACE3: /* librpz hits */ + verbose(VERB_QUERY, "rpz: %s", buf); + break; + + case LIBRPZ_LOG_TRACE4: /* librpz lookups */ + verbose(VERB_CLIENT, "rpz: %s", buf); + break; + } +} + + +/* Release the librpz version. */ +static void +rpz_off(commreply_rpz_t* rpz, st_t st) +{ + if(!rpz) + return; + rpz->st = st; + librpz->rsp_detach(&rpz->rsp); +} + + +static void LIBRPZ_PF(2,3) +log_fail(commreply_rpz_t* rpz, const char* p, ...) +{ + va_list args; + + if(rpz->st == st_servfail) + return; + + va_start(args, p); + librpz->vlog(LIBRPZ_LOG_ERROR, rpz, p, args); + va_end(args); + if(!rpz) + return; + rpz_off(rpz, st_servfail); +} + + +/* Announce a rewrite. */ +static void +log_rewrite(uint8_t* qname, librpz_policy_t policy, const char* msg, + commreply_rpz_t* rpz) +{ + char policy_buf[POLICY2STR_SIZE]; + char qname_nm[LDNS_MAX_DOMAINLEN+1]; + librpz_domain_buf_t tdomain; + char tdomain_nm[LDNS_MAX_DOMAINLEN+1]; + librpz_emsg_t emsg; + + if(rpz->st == st_servfail || !rpz->result.log) + return; + if(librpz->log_level_val(LIBRPZ_LOG_INVALID) < LIBRPZ_LOG_TRACE1) + return; + + dname_str(qname, qname_nm); + + if(!librpz->rsp_domain(&emsg, &tdomain, rpz->rsp)) { + librpz->log(LIBRPZ_LOG_ERROR, rpz, "%s", emsg.c); + return; + } + dname_str(tdomain.d, tdomain_nm); + + librpz->log(LIBRPZ_LOG_TRACE3, rpz, "%srewriting %s via %s %s to %s", + msg, qname_nm, tdomain_nm, + librpz->trig2str(rpz->result.trig), + librpz->policy2str(policy, policy_buf, + sizeof(policy_buf))); +} + + +/* Connect to and start dnsrpzd if necessary for the unbound daemon. + * Require "rpz-conf: path" to specify the rpz configuration file. + * The unbound server directory name is the default rpz working + * directory. If unbound uses chroot, then the dnsrpzd working + * directory must be in the chroot tree. + * The database and socket are closed and re-opened. + */ +void +rpz_init(librpz_clist_t** pclist, librpz_client_t** pclient, + const struct config_file* cfg) +{ + lock_basic_type* mutex; + librpz_emsg_t emsg; + + if(!librpz) { + librpz = librpz_lib_open(&emsg, NULL, FASTRPZ_LIBRPZ_PATH); + if(!librpz) + fatal_exit("rpz: %s", emsg.c); + } + + librpz->set_log(&log_fnc, NULL); + + if(!cfg->rpz_cstr) + fatal_exit("rpz: rpz-zone: not set"); + + librpz->client_detach(pclient); + librpz->clist_detach(pclist); + + mutex = malloc(sizeof(*mutex)); + if(!mutex) + fatal_exit("rpz: no memory for lock"); + lock_basic_init(mutex); + + *pclist = librpz->clist_create(&emsg, &lock, &unlock, &lock_destroy, + mutex, NULL); + if(!pclist) + fatal_exit("rpz: %s", emsg.c); + + *pclient = librpz->client_create(&emsg, *pclist, cfg->rpz_cstr, false); + if(!*pclient) + fatal_exit("rpz: %s", emsg.c); + + if(!librpz->connect(&emsg, *pclient, true)) + fatal_exit("rpz: %s", emsg.c); + + verbose(VERB_OPS, "rpz: librpz version %s", librpz->version); +} + + +/* Stop using librpz on behalf of a worker thread. */ +void +rpz_delete(librpz_clist_t** pclist, librpz_client_t** pclient) +{ + if(librpz) { + librpz->client_detach(pclient); + librpz->clist_detach(pclist); + } +} + + +/* Release the librpz resources held for a DNS client request. */ +void +rpz_end(struct comm_reply* commreply) +{ + if(!commreply->rpz) + return; + rpz_off(commreply->rpz, commreply->rpz->st); + free(commreply->rpz); + commreply->rpz = NULL; +} + + +static bool +push_st(commreply_rpz_t* rpz) +{ + librpz_emsg_t emsg; + + if(rpz->st == st_off || rpz->st == st_servfail) { + librpz->log(LIBRPZ_LOG_ERROR, rpz, + "state %d in push_st()", rpz->st); + return false; + } + if(!librpz->rsp_push(&emsg, rpz->rsp)) + log_fail(rpz, "%s", emsg.c); + memmove(&rpz->saved_st[1], &rpz->saved_st[0], + sizeof(rpz->saved_st) - sizeof(rpz->saved_st[0])); + rpz->saved_st[0] = rpz->st; + return rpz->st != st_servfail; +} + + +static bool +pop_st(commreply_rpz_t* rpz) +{ + librpz_emsg_t emsg; + + if(rpz->rsp && !librpz->rsp_pop(&emsg, &rpz->result, rpz->rsp)) + log_fail(rpz, "%s", emsg.c); + if(rpz->st != st_servfail) + rpz->st = rpz->saved_st[0]; + memmove(&rpz->saved_st[0], &rpz->saved_st[1], + sizeof(rpz->saved_st) - sizeof(rpz->saved_st[0])); + return rpz->st != st_servfail; +} + +static bool +pop_discard_st(commreply_rpz_t* rpz) +{ + librpz_emsg_t emsg; + + if(rpz->rsp && !librpz->rsp_pop_discard(&emsg, rpz->rsp)) + log_fail(rpz, "%s", emsg.c); + memmove(&rpz->saved_st[0], &rpz->saved_st[1], + sizeof(rpz->saved_st) - sizeof(rpz->saved_st[0])); + return rpz->st != st_servfail; +} + +/* Check a rewrite attempt for errors and a disabled zone. */ +static bool /* true=repeat the check */ +ck_after(uint8_t* qname, bool recursed, librpz_trig_t trig, + commreply_rpz_t* rpz) +{ + librpz_emsg_t emsg; + + if(rpz->st == st_servfail) + return false; + + if(!librpz->rsp_result(&emsg, &rpz->result, recursed, rpz->rsp)) { + log_fail(rpz, "%s", emsg.c); + return false; + } + + if(rpz->result.policy == LIBRPZ_POLICY_DISABLED) { + /* Log the hit on the disabled zone, do not try the zone again, + * and restore the state from before the check to forget the hit + * before trying again. */ + log_rewrite(qname, rpz->result.zpolicy, "disabled ", rpz); + if(!librpz->rsp_forget_zone(&emsg, rpz->result.cznum, rpz->rsp)) + log_fail(rpz, "%s", emsg.c); + return pop_st(rpz); + } + + /* Complain about and forget client-IP address hit that is not + * dispositive. Client-IP triggers have the highest priority + * within a policy zone, but can be overridden by any hit in a policy + * earlier in the client's (resolver's) list of zones, including + * policies that cannot be hit until after recursion. If we allowed + * client-IP triggers in secondary zones, then than two DNS requests + * that differ only in DNS client-IP addresses could properly + * have differing results. The Unbound iterator treats identical + * DNS requests the same regardless of DNS client-IP address. + * struct query_info would need to be modified to have an optional + * librpz_prefix_t containing the prefix of the client-IP address hit + * from librpz->rsp_clientip_prefix(). Adding to struct query_info + * would require finding and changing the many and obscure places + * including the Unbound tests to memset(0) the struct query_info + * that they create. */ + if(trig == LIBRPZ_TRIG_CLIENT_IP) { + if(rpz->result.cznum != 0) { + log_rewrite(qname, rpz->result.policy, + "ignore secondary ", rpz); + if(!pop_st(rpz)) + log_fail(rpz, "%s", emsg.c); + return (false); + } + } + + /* Forget the state from before the check and keep the new state + * if we do not have a hit on a disabled policy zone. */ + pop_discard_st(rpz); + return false; +} + + +/* Get the next RR from the policy record. */ +static bool +next_rr(librpz_rr_t** rrp, const uint8_t* qname, size_t qname_len, + commreply_rpz_t* rpz) +{ + librpz_emsg_t emsg; + + if(!librpz->rsp_rr(&emsg, NULL, NULL, NULL, rrp, &rpz->result, + qname, qname_len, rpz->rsp)) { + log_fail(rpz, "%s", emsg.c); + *rrp = NULL; + return false; + } + return true; +} + + +static bool /* false=fatal error to be logged */ +add_rr(struct sldns_buffer* pkt, const uint8_t* owner, size_t owner_len, + librpz_rr_t* rr, commreply_rpz_t* rpz) +{ + size_t rdlength; + + rdlength = ntohs(rr->rdlength); + + if(!sldns_buffer_available(pkt, owner_len + 10 + rdlength)) { + log_fail(rpz, "comm_reply buffer exhausted"); + free(rr); + return false; + } + sldns_buffer_write(pkt, owner, owner_len); + /* sizeof(librpz_rr_t)=12 instead of 10 */ + sldns_buffer_write(pkt, rr, 10 + rdlength); + return true; +} + + +/* Convert a fake incoming DNS message to an Unbound struct dns_msg */ +static void +pkt2dns_msg(struct dns_msg** dnsmsg, struct sldns_buffer* pkt, + commreply_rpz_t* rpz, struct regional* region) +{ + struct msg_parse* msgparse; + + msgparse = regional_alloc(region, sizeof(*msgparse)); + if(!msgparse) { + log_fail(rpz, "out of memory for msgparse"); + *dnsmsg = NULL; + return; + } + memset(msgparse, 0, sizeof(*msgparse)); + if(parse_packet(pkt, msgparse, region) != LDNS_RCODE_NOERROR) { + log_fail(rpz, "packet parse error"); + *dnsmsg = NULL; + return; + } + *dnsmsg = dns_alloc_msg(pkt, msgparse, region); + if(!*dnsmsg) { + log_fail(rpz, "dns_alloc_msg() failed"); + *dnsmsg = NULL; + return; + } + (*dnsmsg)->rep->security = sec_status_rpz_rewritten; +} + + +static bool /* false=SERVFAIL */ +ck_ip_rrset(const void* vdata, int family, librpz_trig_t trig, + uint8_t* qname, commreply_rpz_t* rpz) +{ + const struct packed_rrset_data* data; + uint rr_n; + size_t len; + librpz_emsg_t emsg; + + data = vdata; + + /* Loop to ignore disabled zones. */ + do { + if(!push_st(rpz)) + return false; + for(rr_n = 0; rr_n < data->count; ++rr_n) { + len = data->rr_len[rr_n]; + /* Skip bogus including negative placeholding rdata. */ + if((family == AF_INET && + len != sizeof(struct in_addr)+2) || + (family == AF_INET6 && + len != sizeof(struct in6_addr)+2)) + continue; + if(!librpz->ck_ip(&emsg, data->rr_data[rr_n]+2, + family, trig, rpz->hit_id, true, + rpz->rsp)) { + log_fail(rpz, "%s", emsg.c); + return false; + } + } + } while(ck_after(qname, true, trig, rpz)); + return rpz->st != st_servfail; +} + + +static bool /* false=SERVFAIL */ +ck_dname(uint8_t* dname, size_t dname_size, librpz_trig_t trig, + uint8_t* qname, bool recursed, commreply_rpz_t* rpz) +{ + librpz_emsg_t emsg; + + /* Refuse to check the root. */ + if(dname_is_root(dname)) + return rpz->st != st_servfail; + + /* Loop to ignore disabled zones. */ + do { + if(!push_st(rpz)) + return false; + if(!librpz->ck_domain(&emsg, dname, dname_size, trig, + rpz->hit_id, recursed, rpz->rsp)) { + log_fail(rpz, "%s", emsg.c); + return false; + } + } while(ck_after(qname, recursed, trig, rpz)); + + return rpz->st != st_servfail; +} + + +/* Check the IPv4 or IPv6 addresses for one NS name. */ +static bool /* false=st_servfail */ +ck_1nsip(uint8_t* nsname, size_t nsname_size, int family, int qtype, + bool* have_ns, commreply_rpz_t* rpz, struct module_env* env) +{ + struct ub_packed_rrset_key* akey; + + akey = rrset_cache_lookup(env->rrset_cache, nsname, nsname_size, + qtype, LDNS_RR_CLASS_IN, 0, 0, 0); + if(akey) { + *have_ns = true; + + if(!ck_ip_rrset(akey->entry.data, family, LIBRPZ_TRIG_NSIP, + nsname, rpz)) { + lock_rw_unlock(&akey->entry.lock); + return false; + } + lock_rw_unlock(&akey->entry.lock); + } + return true; +} + + +static bool /* false=st_servfail */ +ck_qname(uint8_t* qname, size_t qname_len, + bool recursed, /* recursion done */ + bool wait_ns, /* willing to iterate for NS data */ + commreply_rpz_t* rpz, struct module_env* env) +{ + uint8_t* dname; + size_t dname_size; + int cur_lab; + struct ub_packed_rrset_key* nskey; + const struct packed_rrset_data* nsdata; + uint8_t* nsname; + size_t nsname_size; + uint rr_n; + bool have_ns, tried_ns; + + if(!ck_dname(qname, qname_len, LIBRPZ_TRIG_QNAME, qname, false, rpz)) + return false; + + /* Do not waste time looking for NSDNAME and NSIP hits when there + * are no currently relevant triggers. */ + if(!librpz->have_ns_trig(rpz->rsp)) + return true; + + have_ns = false; + tried_ns = false; + dname = qname; + dname_size = qname_len; + for(cur_lab = dname_count_labels(dname) - 2; + cur_lab > rpz->min_ns_dots; + --cur_lab) { + tried_ns = true; + dname_remove_label(&dname, &dname_size); + nskey = rrset_cache_lookup(env->rrset_cache, dname, dname_size, + LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN, + 0, 0, 0); + if(!nskey) + continue; + + nsdata = (const struct packed_rrset_data*)nskey->entry.data; + for(rr_n = 0; + rr_n < nsdata->count && rpz->st == st_unknown; + ++rr_n) { + nsname = nsdata->rr_data[rr_n]+2; + nsname_size = nsdata->rr_len[rr_n]; + if(nsname_size <= 2) + continue; + nsname_size -= 2; + if(!ck_dname(nsname, nsname_size, LIBRPZ_TRIG_NSDNAME, + qname, recursed, rpz)) + return false; + if(!ck_1nsip(nsname, nsname_size, AF_INET, + LDNS_RR_TYPE_A, &have_ns, rpz, env)) + return false; + if(!ck_1nsip(nsname, nsname_size, AF_INET6, + LDNS_RR_TYPE_AAAA, &have_ns, rpz, env)) + return false; + } + lock_rw_unlock(&nskey->entry.lock); + } + + /* If we failed to find NS records, then stop building the response + * before a CNAME with this owner name. */ + if(!have_ns && tried_ns && (!recursed || wait_ns)) { + rpz->cname_hit.size = qname_len; + RPZ_ASSERT(rpz->cname_hit.size <= sizeof(rpz->cname_hit.d)); + memcpy(rpz->cname_hit.d, qname, qname_len); + rpz->result.hit_id = rpz->hit_id; + rpz->st = st_ck_ns; + } + return true; +} + + +/* + * Are we ready to rewrite the response? + */ +static bool /* true=send rewritten response */ +ck_result(uint8_t* qname, bool recursed, + commreply_rpz_t* rpz, const struct comm_point* commpoint) +{ + librpz_emsg_t emsg; + + switch(rpz->st) { + case st_off: + case st_servfail: + case st_rewritten: + return false; + case st_unknown: + break; + case st_iterate: + return false; + case st_ck_ns: + /* An NSDNAME or NSIP check failed for lack of cached data. */ + return false; + default: + fatal_exit("impossible RPZ state %d in rpz_worker_cache()", + rpz->st); + } + + /* Wait for a trigger. */ + if(rpz->result.policy == LIBRPZ_POLICY_UNDEFINED) { + if(recursed && + rpz->result.zpolicy != LIBRPZ_POLICY_UNDEFINED && + !librpz->rsp_result(&emsg, &rpz->result, true, rpz->rsp)) { + log_fail(rpz, "%s", emsg.c); + return false; + } + if(rpz->result.policy == LIBRPZ_POLICY_UNDEFINED) + return false; + } + + if(rpz->result.policy == LIBRPZ_POLICY_PASSTHRU) { + log_rewrite(qname, rpz->result.policy, "", rpz); + rpz_off(rpz, st_off); + return false; + } + + /* The TCP-only policy answers UDP requests with truncated responses. */ + if(rpz->result.policy == LIBRPZ_POLICY_TCP_ONLY && + commpoint->type == comm_tcp) { + rpz_off(rpz, st_off); + return false; + } + + return true; +} + + +/* + * Convert an RPZ hit to a struct dns_msg + */ +static void +get_result_msg(struct dns_msg** dnsmsg, struct query_info* qinfo, + uint16_t id, uint16_t flags, bool recursed, commreply_rpz_t* rpz, + struct comm_point* commpoint, struct regional* region) +{ + librpz_rr_t* rr; + librpz_domain_buf_t origin; + struct sldns_buffer* pkt; + uint16_t num_rrs; + librpz_emsg_t emsg; + + *dnsmsg = NULL; + if(!ck_result(qinfo->qname, recursed, rpz, commpoint)) + return; + + rpz->st = st_rewritten; + + if(rpz->result.policy == LIBRPZ_POLICY_DROP) { + log_rewrite(qinfo->qname, rpz->result.policy, "", rpz); + /* Make a fake cached message to carry + * sec_status_rpz_drop and be dropped. */ + error_encode(commpoint->buffer, LDNS_RCODE_NOERROR, + qinfo, id, flags, NULL); + pkt2dns_msg(dnsmsg, commpoint->buffer, rpz, region); + (*dnsmsg)->rep->security = sec_status_rpz_drop; + return; + } + + /* Create a DNS message of the RPZ data. + * In many cases that message could be sent directly to the DNS client, + * but sometimes iteration must be used to resolve a CNAME. + * This need not be fast, because rewriting responses should be rare. + * Therefore, use the simpler but slower tactic of generating a + * parsed version of the message. */ + + flags &= ~BIT_AA; + flags |= BIT_QR | BIT_RA; + rr = NULL; + + /* The TCP-only policy answers UDP requests with truncated responses. */ + if(rpz->result.policy == LIBRPZ_POLICY_TCP_ONLY) { + flags |= BIT_TC; + + } else if(rpz->result.policy == LIBRPZ_POLICY_NXDOMAIN) { + flags |= LDNS_RCODE_NXDOMAIN; + + } else if(rpz->result.policy == LIBRPZ_POLICY_CNAME) { + if(!rpz->iterating && + qinfo->qtype != LDNS_RR_TYPE_CNAME) { + /* The new DNS message would be a CNAME and + * the external request was not for a CNAME. + * The worker must punt to the iterator so that + * the iterator can resolve the CNAME. */ + rpz->st = st_iterate; + return; + } + next_rr(&rr, qinfo->qname, qinfo->qname_len, rpz); + + } else if(rpz->result.policy == LIBRPZ_POLICY_RECORD || + rpz->result.policy == LIBRPZ_POLICY_NODATA) { + next_rr(&rr, qinfo->qname, qinfo->qname_len, rpz); + /* Punt to the iterator if the new DNS message would + * be a CNAME that must be resolved. */ + if(!rpz->iterating && + qinfo->qtype != LDNS_RR_TYPE_CNAME && + rr && rr->type == ntohs(LDNS_RR_TYPE_CNAME)) { + free(rr); + rpz->st = st_iterate; + return; + } + } + log_rewrite(qinfo->qname, rpz->result.policy, "", rpz); + + /* Make a buffer containing a DNS message with the RPZ data. */ + pkt = commpoint->buffer; + sldns_buffer_clear(pkt); + if(sldns_buffer_remaining(pkt) < LDNS_HEADER_SIZE) { + log_fail(rpz, "comm_reply buffer too small for header"); + if(rr) + free(rr); + return; + } + + /* Install ID, flags, QDCOUNT=1, ANCOUNT=# of RPZ RRs, NSCOUNT=0, + * and ARCOUNT=1 for the RPZ SOA. */ + sldns_buffer_write_u16(pkt, id); + sldns_buffer_write_u16(pkt, flags); + sldns_buffer_write_u16(pkt, 1); /* QDCOUNT */ + sldns_buffer_write_u16(pkt, 0); /* ANCOUNT will be set later */ + sldns_buffer_write_u16(pkt, 0); /* NSCOUNT */ + sldns_buffer_write_u16(pkt, 1); /* ARCOUNT */ + + /* Install the question with the LDNS_RR_CLASS_RPZ bit to + * to distinguish this supposed cache entry from the real deal. */ + sldns_buffer_write(pkt, qinfo->qname, qinfo->qname_len); + sldns_buffer_write_u16(pkt, qinfo->qtype); + sldns_buffer_write_u16(pkt, LDNS_RR_CLASS_IN); + + /* Install the RPZ RRs in the answer section */ + num_rrs = 0; + while(rr) { + /* Include only the requested RRs. */ + if(qinfo->qtype == LDNS_RR_TYPE_ANY || + rr->type == htons(qinfo->qtype) || + rr->type == htons(LDNS_RR_TYPE_CNAME)) { + if(!add_rr(pkt, qinfo->qname, qinfo->qname_len, + rr, rpz)) + return; + + ++num_rrs; + } + free(rr); + + next_rr(&rr, qinfo->qname, qinfo->qname_len, rpz); + } + /* Finish ANCOUNT. */ + if(num_rrs != 0) + sldns_buffer_write_u16_at(pkt, 6, num_rrs); + + /* All rewritten responses have an identifying SOA record in the + * additional section. */ + if(!librpz->rsp_soa(&emsg, NULL, &rr, &origin, + &rpz->result, rpz->rsp)) { + log_fail(rpz, "no soa"); + return; + } + if(!add_rr(pkt, origin.d, origin.size, rr, rpz)) + return; + free(rr); + + /* Create a dns_msg representation of the fake incoming message. */ + sldns_buffer_flip(pkt); + pkt2dns_msg(dnsmsg, pkt, rpz, region); +} + + +/* Check the RRs in the ANSWER section of a reply_info. */ +static void +ck_reply(struct reply_info* reply, uint8_t* qname, bool wait_ns, + commreply_rpz_t* rpz, struct module_env* env) +{ + struct ub_packed_rrset_key* rrset; + enum sldns_enum_rr_type type; + uint rrset_n; + + /* Check the RRs in the ANSWER section. */ + rpz->cname_hit.size = 0; + rpz->cname_hit_2nd = false; + for(rrset_n = 0; rrset_n < reply->an_numrrsets; ++rrset_n) { + /* Check all of the RRs before deciding. */ + if(rpz->st != st_unknown) + return; + + rrset = reply->rrsets[rrset_n]; + if(ntohs(rrset->rk.rrset_class) != LDNS_RR_CLASS_IN) + continue; + type = ntohs(rrset->rk.type); + + if(type == LDNS_RR_TYPE_A) { + if(!ck_ip_rrset(rrset->entry.data, AF_INET, + LIBRPZ_TRIG_IP, qname, rpz)) + break; + + } else if(type == LDNS_RR_TYPE_AAAA) { + if(!ck_ip_rrset(rrset->entry.data, AF_INET6, + LIBRPZ_TRIG_IP, qname, rpz)) + break; + + } else if(type == LDNS_RR_TYPE_CNAME) { + /* Check CNAME owners unless we already have a hit. */ + ++rpz->hit_id; + if(!ck_qname(rrset->rk.dname, rrset->rk.dname_len, + true, wait_ns, rpz, env)) + break; + + /* Do not worry about the CNAME if it did not hit, + * but note the miss so that it can be prepended + * if we do hit. */ + if(rpz->result.hit_id != rpz->hit_id) { + rpz->cname_hit_2nd = true; + continue; + } + + /* Stop after hitting a CNAME. + * The iterator must be used to include CNAMEs before + * the CNAME that hit in the rewritten response. */ + rpz->cname_hit.size = rrset->rk.dname_len; + RPZ_ASSERT(rpz->cname_hit.size <= sizeof(rpz->cname_hit.d)); + memcpy(rpz->cname_hit.d, rrset->rk.dname, + rpz->cname_hit.size); + break; + } + } +} + + +static void +worker_servfail(struct worker* worker, struct query_info* qinfo, + uint16_t id, uint16_t flags, struct comm_reply* commreply) +{ + error_encode(commreply->c->buffer, LDNS_RCODE_SERVFAIL, + qinfo, id, flags, NULL); + regional_free_all(worker->scratchpad); + comm_point_send_reply(commreply); +} + + +/* Send an RPZ answer before the iterator has started. + * @return: 1=continue normal unbound processing + * 0=punt to the iterator + * -1=rewritten response already sent or dropped. */ +static int +worker_send(struct dns_msg* dnsmsg, struct worker* worker, + struct query_info* qinfo, uint16_t id, uint16_t flags, + struct edns_data* edns, struct comm_reply* commreply) +{ + switch (commreply->rpz->st) { + case st_off: + return 1; + case st_servfail: + worker_servfail(worker, qinfo, id, flags, commreply); + return -1; + case st_unknown: + return 1; + case st_iterate: + case st_ck_ns: + return 0; /* punt to the iterator */ + case st_rewritten: + break; + default: + fatal_exit("impossible RPZ state %d in worker_send()", + commreply->rpz->st); + } + + if(dnsmsg->rep->security == sec_status_rpz_drop) { + regional_free_all(worker->scratchpad); + comm_point_drop_reply(commreply); + return -1; + } + + edns->edns_version = EDNS_ADVERTISED_VERSION; + edns->udp_size = EDNS_ADVERTISED_SIZE; + edns->ext_rcode = 0; + edns->bits = 0; /* rewritten response cannot verify. */ + if(!reply_info_answer_encode(qinfo, dnsmsg->rep, + id, flags | BIT_QR, + commreply->c->buffer, 0, 1, + worker->scratchpad, + edns->udp_size, edns, 0, 0)) { + worker_servfail(worker, qinfo, id, flags, commreply); + } else { + regional_free_all(worker->scratchpad); + comm_point_send_reply(commreply); + } + return -1; +} + + +/* Set commreply to an RPZ context if the response might be rewritten. + * Try to answer now with a hit allowed before recursion (iteration). */ +bool /* true=response sent or dropped */ +rpz_start(struct worker* worker, struct query_info* qinfo, + struct comm_reply* commreply, struct edns_data* edns) +{ + commreply_rpz_t* rpz; + uint16_t id, flags; + struct dns_msg* dnsmsg; + int family; + const void* addr; + librpz_emsg_t emsg; + + /* Quit if rpz not configured. */ + if(!worker->daemon->rpz_client) + return false; + + /* Rewrite only the Internet class */ + if(qinfo->qclass != LDNS_RR_CLASS_IN) + return false; + + rpz = commreply->rpz; + RPZ_ASSERT(!rpz); + + dnsmsg = NULL; + id = htons(sldns_buffer_read_u16_at(commreply->c->buffer, 0)); + flags = sldns_buffer_read_u16_at(commreply->c->buffer, 2); + + rpz = malloc(sizeof(*rpz)); + if(!rpz) { + librpz->log(LIBRPZ_LOG_ERROR, NULL, "no memory for rpz"); + return 0 > worker_send(dnsmsg, worker, qinfo, + id, flags, edns, commreply); + } + memset(rpz, 0, sizeof(*rpz)); + rpz->st = st_unknown; + commreply->rpz = rpz; + + /* Make a new ID for log messages */ + rpz->log_id = __sync_add_and_fetch(&log_id, 1); + + /* Get access to the librpz data. */ + if(!librpz->rsp_create(&emsg, &rpz->rsp, &rpz->min_ns_dots, + worker->daemon->rpz_client, + (flags & BIT_RD) != 0, + (edns->bits & EDNS_DO) != 0)) { + log_fail(rpz, "%s", emsg.c); + return false; + } + /* Quit if benign reasons prevent rewriting. */ + if(!rpz->rsp) { + rpz->st = st_off; + librpz->log(LIBRPZ_LOG_TRACE1, rpz, "%s", emsg.c); + return false; + } + + /* Check the client IP address. + * Do not use commreply->srctype because it is often 0. */ + family = ((struct sockaddr*)&commreply->addr)->sa_family; + switch(family) { + case AF_INET: + addr = &((struct sockaddr_in*)&commreply->addr)->sin_addr; + break; + case AF_INET6: + addr = &((struct sockaddr_in6*)&commreply->addr)->sin6_addr; + break; + default: + /* Maybe the client is on a UNIX domain socket. */ + librpz->log(LIBRPZ_LOG_TRACE2, rpz, + "unknown client address family %d", family); + addr = NULL; + break; + } + /* Loop to ignore disabled zones. */ + while(addr) { + if(!push_st(rpz)) + break; + if(!librpz->ck_ip(&emsg, addr, family, LIBRPZ_TRIG_CLIENT_IP, + rpz->hit_id, true, rpz->rsp)) { + log_fail(rpz, "%s", emsg.c); + break; + } + if(!ck_after(qinfo->qname, false, LIBRPZ_TRIG_CLIENT_IP, rpz)) + break; + } + if(rpz->st == st_servfail) + return 0 > worker_send(dnsmsg, worker, qinfo, + id, flags, edns, commreply); + + /* Check the QNAME and possibly replace a client-IP hit. */ + ck_qname(qinfo->qname, qinfo->qname_len, false, true, + rpz, &worker->env); + + get_result_msg(&dnsmsg, qinfo, id, flags, false, + rpz, commreply->c, worker->scratchpad); + return 0 > worker_send(dnsmsg, worker, qinfo, + id, flags, edns, commreply); +} + + +/* Check a cached reply before iteration. + * @return: 1=use cache entry + * 0=deny a cached entry exists in order to punt to the iterator + * -1=rewritten response already sent or dropped */ +int +rpz_worker_cache(struct worker* worker, struct reply_info* reply, + struct query_info* qinfo, uint16_t id, uint16_t flags, + struct edns_data* edns, struct comm_reply* commreply) +{ + commreply_rpz_t* rpz; + struct dns_msg* dnsmsg; + st_t new_st; + librpz_rr_t* rr; + + dnsmsg = NULL; + + rpz = commreply->rpz; + switch(rpz->st) { + case st_off: + return 1; /* Send the cache entry. */ + case st_servfail: + return worker_send(dnsmsg, worker, qinfo, id, flags, + edns, commreply); + case st_unknown: + break; + case st_iterate: + case st_ck_ns: + return 0; /* Punt to the iterator. */ + case st_rewritten: + default: + fatal_exit("impossible RPZ state %d in rpz_worker_cache()", + rpz->st); + } + + /* Check the RRs in the ANSWER section. */ + if(!push_st(rpz)) + return worker_send(dnsmsg, worker, qinfo, id, flags, edns, + commreply); + + ck_reply(reply, qinfo->qname, true, rpz, &worker->env); + if(!ck_result(qinfo->qname, true, rpz, commreply->c)) + return worker_send(dnsmsg, worker, qinfo, id, flags, edns, + commreply); + + if(rpz->cname_hit.size != 0) { + /* Punt to the iterator if leading CNAMEs must be + * included in the rewritten response. */ + rpz->cname_hit.size = 0; + new_st = st_iterate; + + } else if(rpz->result.policy == LIBRPZ_POLICY_CNAME) { + /* Punt if the rewritten response is to a CNAME. */ + new_st = st_iterate; + + } else { + if(rpz->result.policy == LIBRPZ_POLICY_RECORD) { + next_rr(&rr, qinfo->qname, qinfo->qname_len, rpz); + if(rr) { + /* Punt we are rewriting to a CNAME. */ + if(rr->type == ntohs(LDNS_RR_TYPE_CNAME)) { + free(rr); + rpz->st = st_iterate; + } else { + free(rr); + } + } + } + get_result_msg(&dnsmsg, qinfo, id, flags, true, + rpz, commreply->c, worker->scratchpad); + new_st = rpz->st; + } + + switch(new_st) { + case st_off: + case st_servfail: + break; + case st_unknown: + pop_discard_st(rpz); + break; + case st_iterate: + case st_ck_ns: + if(pop_st(rpz)) + rpz->st = new_st; + break; + case st_rewritten: + pop_discard_st(rpz); + break; + default: + fatal_exit("impossible RPZ state %d in rpz_worker_cache()", + rpz->st); + } + + return worker_send(dnsmsg, worker, qinfo, id, flags, edns, commreply); +} + + +/* Check a cache hit or miss for the iterator. + * A cache miss can already have a QNAME hit that was ignored before checking + * the iterator because of "QNAME-WAIT-RECURSE yes". + * Cache hits are treated like responses from authorities. */ +bool /* false=SERVFAIL */ +rpz_iter_cache(struct dns_msg** msg, enum response_type* type, + struct module_qstate* qstate, struct iter_qstate* iq) +{ + struct comm_reply* commreply; + commreply_rpz_t* rpz; + struct dns_msg* dnsmsg; + + commreply = &qstate->mesh_info->reply_list->query_reply; + rpz = commreply->rpz; + + rpz->iterating = true; + + switch(rpz->st) { + case st_off: + iq->rpz_rewritten = 1; /* RPZ has nothing to say. */ + return true; + case st_servfail: + return false; + case st_unknown: + break; + case st_iterate: + case st_ck_ns: + rpz->st = st_unknown; + if(!ck_qname(iq->qchase.qname, iq->qchase.qname_len, + *msg != NULL, true, rpz, qstate->env)) + return false; + /* If we must recurse regardless and if NSIP/NSDNAME + * checking failed, then delay in the hope that + * recursion will also get NS data. */ + if(rpz->st == st_ck_ns) + return true; + break; + case st_rewritten: + default: + fatal_exit("impossible RPZ state %d in rpz_iter_cache()", + rpz->st); + } + + push_st(rpz); + + /* Check the cache hit. */ + if(*msg) + ck_reply((*msg)->rep, iq->qchase.qname, true, rpz, qstate->env); + + /* The DNS ID does not matter, because the generated dns_msg + * is nominally from an authority and not to the DNS client. */ + get_result_msg(&dnsmsg, &iq->qchase, 1, qstate->query_flags, true, + rpz, commreply->c, qstate->region); + + switch(rpz->st) { + case st_off: + iq->rpz_rewritten = 1; /* RPZ has nothing to say. */ + return true; + case st_servfail: + return false; + case st_unknown: + /* RPZ has nothing to say yet. Maybe there will be a hit + * later in the CNAME chain. */ + return pop_discard_st(rpz); + case st_ck_ns: + /* Try to get NS data for a CNAME found by ck_reply() */ + *type = RESPONSE_TYPE_CNAME; + return pop_discard_st(rpz); + case st_iterate: + default: + fatal_exit("impossible RPZ state %d in rpz_iter_cache()", + rpz->st); + case st_rewritten: + break; + } + + if(*msg && rpz->cname_hit.size != 0 && rpz->cname_hit_2nd) { + /* We hit a CNAME owner in the cached msg after not hitting one + * or more CNAME owners. We need to add those leading CNAMEs + * to the prepend list. Tell the iterator to treat the cached + * message as a RESPONSE_TYPE_CNAME even if it contains answers. + * handle_cname_response() will stop prepending CNAMEs before + * the triggering CNAME. handle_cname_response() will cause + * a restart to resolve the target of the preceding CNAME, + * which is the same as the hit CNAME owner. */ + rpz->st = st_unknown; + *type = RESPONSE_TYPE_CNAME; + return pop_discard_st(rpz); + } + + *msg = dnsmsg; + iq->rpz_security = dnsmsg->rep->security; + + if(dnsmsg && dnsmsg->rep->an_numrrsets != 0 && + dnsmsg->rep->rrsets[0]->rk.type == htons(LDNS_RR_TYPE_CNAME)) { + /* The cached msg triggered a rule that rewrites to a + * CNAME that must be resolved. + * We have a replacement dns_msg with that CNAME and also + * an SOA RR in the ADDITIONAL section that the iterator + * will lose as it adds the CNAME to the prepend list. + * Save the SOA RR in iq->rpz_soa. */ + iq->rpz_soa = dnsmsg->rep->rrsets[1]; + iq->rpz_rewritten = 1; + *type = RESPONSE_TYPE_CNAME; + return true; + } + + /* Otherwise we have rewritten to zero or more non-CNAME RRs. + * (DNAMEs are not supported.) + * Tell the iterator to send the rewritten message. */ + *type = RESPONSE_TYPE_ANSWER; + iq->rpz_rewritten = 1; + return true; +} + + +/* Check a RESPONSE_TYPE_ANSWER response from an authority in the iterator. */ +rpz_iter_resp_t +rpz_iter_resp(struct module_qstate* qstate, struct iter_qstate* iq, + struct dns_msg** resp, bool* is_cname) +{ + struct comm_reply* commreply; + commreply_rpz_t* rpz; + struct reply_info* rep; + + *is_cname = false; + + commreply = &qstate->mesh_info->reply_list->query_reply; + rpz = commreply->rpz; + switch(rpz->st) { + case st_off: + case st_servfail: + case st_iterate: + case st_rewritten: + default: + fatal_exit("impossible RPZ state %d in rpz_iter_resp()", + rpz->st); + case st_ck_ns: + case st_unknown: + break; + } + + /* We know !iq->rpz_rewritten and so the response was after a simple + * cache miss when the original QNAME did not trigger a response + * or after a CNAME whose owner name did hit but was then forgotten + * with pop_st(). + * In either case, it is necessary to check the QNAME here. + * Checking the QNAME will not lose a better hit. */ + rpz->st = st_unknown; + ck_qname(iq->qchase.qname, iq->qchase.qname_len, true, false, + rpz, qstate->env); + + /* Check the RRs in the ANSWER section. */ + if(!push_st(rpz)) + return rpz_iter_resp_fail; + ck_reply(iq->response->rep, iq->qchase.qname, false, rpz, qstate->env); + get_result_msg(resp, &qstate->qinfo, 1, qstate->query_flags, true, + rpz, commreply->c, qstate->region); + switch(rpz->st) { + case st_off: + iq->rpz_rewritten = 1; /* Do not come back. */ + return rpz_iter_resp_done; + case st_servfail: /* Send SERVFAIL */ + return rpz_iter_resp_fail; + case st_unknown: + case st_ck_ns: + return rpz_iter_resp_done; /* continue without change */ + case st_iterate: + default: + fatal_exit("impossible RPZ state %d in rpz_iter_resp()", + rpz->st); + case st_rewritten: + /* Tell the iterator to use handle_cname_response() to + * prepend any preceding CNAMEs. + * We have a replacement dns_msg that also has an SOA RR in the + * ADDITIONAL section that the iterator will lose if it is a + * CNAME. Save that SOA in that case. */ + rep = (*resp)->rep; + if(rep->an_numrrsets != 0 && + rep->rrsets[0]->rk.type == ntohs(LDNS_RR_TYPE_CNAME)) { + *is_cname = true; + iq->rpz_soa = rep->rrsets[1]; + } + return rpz_iter_resp_rewrite; + } +} + + +/* Tell handle_cname_response() to stop adding to the answer prepend list + * after adding CNAME with a target that hits a QNAME trigger. + * Do not change any RPZ state, but expect the call of handle_cname_response() + * to try to resolve the CNAME and hit the same QNAME trigger and rewrite + * the response. */ +rpz_cname_t +rpz_cname(struct module_qstate* qstate, + uint8_t* oname, size_t oname_size) +{ + struct mesh_reply* reply_list; + struct comm_reply* commreply; + commreply_rpz_t* rpz; + rpz_cname_t ret; + + /* Quit if RPZ is off */ + reply_list = qstate->mesh_info->reply_list; + if(!reply_list) + return rpz_cname_prepend; + commreply = &reply_list->query_reply; + rpz = commreply->rpz; + + if(!rpz || rpz->st == st_off) + return rpz_cname_prepend; + + /* Stop on a 2nd or later CNAME for rpz_iter_resp(). */ + if(rpz->cname_hit.size != 0) { + if(!query_dname_compare(rpz->cname_hit.d, oname)) + return rpz_cname_stop; + return rpz_cname_prepend; + } + + if(rpz->st != st_unknown) + fatal_exit("impossible RPZ state %d in rpz_cname()", rpz->st); + + ret = rpz_cname_prepend; + if(!push_st(rpz)) + return rpz_cname_fail; + /* Stop before prepending a CNAME that would preempt a + * rewritten response or before a possible NSDNAME or NSIP trigger. */ + ++rpz->hit_id; + ck_qname(oname, oname_size, true, true, rpz, qstate->env); + if(rpz->st != st_unknown) + ret = rpz_cname_stop; + if(!pop_st(rpz)) + return rpz_cname_fail; + return ret; +} + +#endif /* ENABLE_FASTRPZ */ diff --git a/fastrpz/rpz.h b/fastrpz/rpz.h new file mode 100644 index 00000000..5d7e31c5 --- /dev/null +++ b/fastrpz/rpz.h @@ -0,0 +1,138 @@ +/* + * fastrpz/rpz.h - interface to the fastrpz response policy zone library + * + * Copyright (c) 2016 Farsight Security, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UNBOUND_FASTRPZ_RPZ_H +#define UNBOUND_FASTRPZ_RPZ_H + +#ifndef PACKAGE_VERSION +/* Ensure that config.h has been included to correctly set ENABLE_FASTRPZ */ +#include "config.h" +#endif + +#ifdef ENABLE_FASTRPZ + +#include "librpz.h" + +#include "daemon/daemon.h" +#include "util/config_file.h" + +struct comm_point; /* forward references */ +struct comm_reply; +struct dns_msg; +struct edns_data; +struct iter_qstate; +struct query_info; +struct reply_info; +enum response_type; /* iterator/iter_utils.h */ + + +struct commreply_rpz; + +/** + * Connect to the librpz database. + * @param pclist: future pointer to opaque librpz client data + * @param pclient: future pointer to opaque librpz client data + * @param cfg: parsed unbound configuration + */ +void rpz_init(librpz_clist_t** pclist, librpz_client_t** pclient, + const struct config_file* cfg); + +/** + * Disconnect from the librpz database + * @param client: opaque librpz client data + */ +void rpz_delete(librpz_clist_t** pclist, librpz_client_t** pclient); + +/** + * Start working on a DNS request and check for client IP address triggers. + * @param worker: the DNS request context + * @param qinfo: the DNS question + * @param[in,out] commreply: the answer + * @param c: where to send the response + * @param[in,out] edns for the DO flag + * @return true if response already sent or dropped + */ +bool rpz_start(struct worker* worker, struct query_info* qinfo, + struct comm_reply* commreply, struct edns_data* edns); + +/** + * Release resources held for a DNS request + * @param rspp: pointer to pointer to rpz client context. + */ +void rpz_end(struct comm_reply* comm_rep); + +/** + * Check a cached reply for RPZ hits before iteration + * @param worker: the DNS request context + * @param casheresp: cache reply + * @param qinfo: the DNS question + * @param id from the DNS request + * @param flags from the DNS request + * @param[in,out] edns for the DO flag + * @param[in,out] commreply: RPZ state + * @return 1=use cache entry, -1=rewritten response already sent or dropped, + * 0=deny a cached entry exists + */ +int rpz_worker_cache(struct worker* worker, struct reply_info* cacheresp, + struct query_info* qinfo, uint16_t id, uint16_t flags, + struct edns_data* edns, struct comm_reply* commreply); + +/** + * Check for an existing RPZ CNAME rewrite with "QNAME-WAIT-RECURSE no" + * that needs to be resolved before resolving the external request. + * @param[out] msg: rewritten CNAME response. + * @param qstate: query state. + * @param iq: iterator query state. + * @return false=send SERVFAIL + */ +bool rpz_iter_cache(struct dns_msg** msg, enum response_type* type, + struct module_qstate* qstate, struct iter_qstate* iq); + +/** + * Check a response from an authority in the iterator. + * @param[out] type: of the final response + * @param qstate: query state. + * @param iq: iterator query state. + * @param is_cname: true if the rewritten response is a CNAME + * @return one of rpz_resp_t + */ +typedef enum { + rpz_iter_resp_fail, /* Send SERVFAIL. */ + rpz_iter_resp_rewrite, /* We rewrote the response. */ + rpz_iter_resp_done, /* Restart to refetch glue. */ +} rpz_iter_resp_t; +rpz_iter_resp_t rpz_iter_resp(struct module_qstate* qstate, + struct iter_qstate* iq, struct dns_msg** resp, + bool* is_cname); + +/** + * Check a CNAME RR + * @param qstate: query state. + * @param oname: cname owner name + * @param oname_size: length of oname + * @return: one of rpz_cname_t + */ +typedef enum { + rpz_cname_fail, /* send SERVFAIL */ + rpz_cname_prepend, /* prepend CNAME as usual */ + rpz_cname_stop, /* stop before prepending this CNAME */ +} rpz_cname_t; +rpz_cname_t rpz_cname(struct module_qstate* qstate, + uint8_t* oname, size_t oname_size); + +#endif /* ENABLE_FASTRPZ */ +#endif /* UNBOUND_FASTRPZ_RPZ_H */ diff --git a/fastrpz/rpz.m4 b/fastrpz/rpz.m4 new file mode 100644 index 00000000..21235355 --- /dev/null +++ b/fastrpz/rpz.m4 @@ -0,0 +1,64 @@ +# fastrpz/rpz.m4 + +# ck_FASTRPZ +# -------------------------------------------------------------------------- +# check for Fastrpz +# --enable-fastrpz enable Fastrpz response policy zones +# --enable-fastrpz-dl Fastrpz delayed link [default=have dlopen] +# --with-fastrpz-dir directory containing librpz.so +# +# Fastrpz can be compiled into Unbound everywhere with a reasonably +# modern C compiler. It is enabled on systems with dlopen() and librpz.so. + +AC_DEFUN([ck_FASTRPZ], +[ + fastrpz_avail=yes + AC_MSG_CHECKING([for librpz __attribute__s]) + AC_TRY_COMPILE(,[ + extern void f(char *p __attribute__((unused)), ...) + __attribute__((format(printf,1,2))) __attribute__((__noreturn__));], + librpz_have_attr=yes + AC_DEFINE([LIBRPZ_HAVE_ATTR], 1, [have __attribute__s used in librpz.h]) + AC_MSG_RESULT([yes]), + librpz_have_attr=no + AC_MSG_RESULT([no])) + + AC_SEARCH_LIBS(dlopen, dl) + librpz_dl=yes + AC_CHECK_FUNCS(dlopen dlclose dlsym,,librpz_dl=no) + AC_ARG_ENABLE([fastrpz-dl], + [ --enable-fastrpz-dl Fastrpz delayed link [[default=$librpz_dl]]], + [enable_librpz_dl="$enableval"], + [enable_librpz_dl="$librpz_dl"]) + AC_ARG_WITH([fastrpz-dir], + [ --with-fastrpz-dir directory containing librpz.so], + [librpz_path="$withval/librpz.so"], [librpz_path="librpz.so"]) + AC_DEFINE_UNQUOTED([FASTRPZ_LIBRPZ_PATH], ["$librpz_path"], + [fastrpz librpz.so]) + if test "x$enable_librpz_dl" = "xyes"; then + fastrpz_lib_open=2 + else + fastrpz_lib_open=1 + # Add librpz.so to linked libraries if we are not using dlopen() + AC_SEARCH_LIBS([librpz_client_create], [rpz], [], + [fastrpz_lib_open=0 + fastrpz_avail=no]) + fi + AC_DEFINE_UNQUOTED([FASTRPZ_LIB_OPEN], [$fastrpz_lib_open], + [0=no fastrpz 1=static link 2=dlopen()]) + + AC_ARG_ENABLE([fastrpz], + AS_HELP_STRING([--enable-fastrpz],[enable Fastrpz response policy zones]), + [enable_fastrpz=$enableval],[enable_fastrpz=$fastrpz_avail]) + if test "x$enable_fastrpz" = xyes; then + AC_DEFINE([ENABLE_FASTRPZ], [1], [Enable fastrpz]) + if test "x$fastrpz_lib_open" = "x0"; then + AC_MSG_ERROR([[dlopen and librpz.so needed for fastrpz]]) + fi + # used in Makefile.in + AC_SUBST([FASTRPZ_SRC], [fastrpz/rpz.c]) + AC_SUBST([FASTRPZ_OBJ], [rpz.lo]) + elif test "x$fastrpz_avail" = "x0"; then + AC_MSG_WARN([[dlopen and librpz.so needed for fastrpz]]) + fi +]) diff --git a/iterator/iterator.c b/iterator/iterator.c index 23b07ea9..c3d31a33 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -68,6 +68,9 @@ #include "sldns/str2wire.h" #include "sldns/parseutil.h" #include "sldns/sbuffer.h" +#ifdef ENABLE_FASTRPZ +#include "fastrpz/rpz.h" +#endif /* in msec */ int UNKNOWN_SERVER_NICENESS = 376; @@ -563,6 +566,23 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq, if(ntohs(r->rk.type) == LDNS_RR_TYPE_CNAME && query_dname_compare(*mname, r->rk.dname) == 0 && !iter_find_rrset_in_prepend_answer(iq, r)) { +#ifdef ENABLE_FASTRPZ + /* Stop adding CNAME rrsets to the prepend list + * before defining an RPZ hit. */ + if(!iq->rpz_rewritten) { + switch (rpz_cname(qstate, *mname, *mname_len)) { + case rpz_cname_fail: + /* send SERVFAIL */ + return 0; + case rpz_cname_prepend: + /* save the CNAME. */ + break; + case rpz_cname_stop: + /* Pause before adding the CNAME. */ + goto stop_short; + } + } +#endif /* Add this relevant CNAME rrset to the prepend list.*/ if(!iter_add_prepend_answer(qstate, iq, r)) return 0; @@ -571,6 +591,9 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq, /* Other rrsets in the section are ignored. */ } +#ifdef ENABLE_FASTRPZ +stop_short: ; +#endif /* add authority rrsets to authority prepend, for wildcarded CNAMEs */ for(i=msg->rep->an_numrrsets; irep->an_numrrsets + msg->rep->ns_numrrsets; i++) { @@ -1231,6 +1254,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, uint8_t* delname; size_t delnamelen; struct dns_msg* msg = NULL; + enum response_type type; log_query_info(VERB_DETAIL, "resolving", &qstate->qinfo); /* check effort */ @@ -1317,8 +1341,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, } if(msg) { /* handle positive cache response */ - enum response_type type = response_type_from_cache(msg, - &iq->qchase); + type = response_type_from_cache(msg, &iq->qchase); if(verbosity >= VERB_ALGO) { log_dns_msg("msg from cache lookup", &msg->qinfo, msg->rep); @@ -1326,7 +1349,22 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, (int)msg->rep->ttl, (int)msg->rep->prefetch_ttl); } +#ifdef ENABLE_FASTRPZ + } + /* Check for an RPZ hit in the cached DNS message or an existing + * RPZ CNAME rewrite that can be resolved now after a hit on the QNAME + * or client IP address. This can involve a creating a fake cache + * hit. It can also involve overriding an RESPONSE_TYPE_ANSWER + * result from response_type_from_cache(). Or it can ignore + * the cached result to refetch glue. */ + if(!iq->rpz_rewritten && + qstate->mesh_info->reply_list && + qstate->mesh_info->reply_list->query_reply.rpz && + !rpz_iter_cache(&msg, &type, qstate, iq)) + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + if(msg) { +#endif if(type == RESPONSE_TYPE_CNAME) { uint8_t* sname = 0; size_t slen = 0; @@ -2801,6 +2839,62 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, sock_list_insert(&qstate->reply_origin, &qstate->reply->addr, qstate->reply->addrlen, qstate->region); +#ifdef ENABLE_FASTRPZ + /* Check the response for an RPZ hit. The response has already + * been saved in the cache. This should have the same effect + * as finding that response in the cache. + * We have already used rpz_iter_cache() at least once. */ + if(!iq->rpz_rewritten && + qstate->mesh_info->reply_list && + qstate->mesh_info->reply_list->query_reply.rpz) { + struct dns_msg* resp; + bool is_cname; + uint8_t* sname; + size_t slen; + + switch (rpz_iter_resp(qstate, iq, &resp, &is_cname)) { + case rpz_iter_resp_fail: + return error_response(qstate, id, + LDNS_RCODE_SERVFAIL); + case rpz_iter_resp_rewrite: + /* Prepend any initial CNAMEs from the original + * response up to a hit. */ + if(!handle_cname_response(qstate, iq, + iq->response, + &sname, &slen)) + return error_response(qstate, id, + LDNS_RCODE_SERVFAIL); + if (resp) { + iq->response = resp; + iq->rpz_security = resp->rep->security; + iq->rpz_rewritten = 1; + + /* Send the rewritten record if it + * is not a CNAME. */ + if(!is_cname) + break; + + /* Prepend the new CNAME + * and restart to resolve it. */ + if(!handle_cname_response(qstate, iq, + resp, &sname, &slen)) + return error_response(qstate, id, + LDNS_RCODE_SERVFAIL); + } + iq->qchase.qname = sname; + iq->qchase.qname_len = slen; + iq->dp = NULL; + iq->refetch_glue = 0; + iq->query_restart_count++; + iq->sent_count = 0; + iq->state = INIT_REQUEST_STATE; + return 1; + + case rpz_iter_resp_done: + break; + } + } +#endif if(iq->minimisation_state != DONOT_MINIMISE_STATE && !(iq->chase_flags & BIT_RD)) { if(FLAGS_GET_RCODE(iq->response->rep->flags) != @@ -3563,12 +3657,44 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, * but only if we did recursion. The nonrecursion referral * from cache does not need to be stored in the msg cache. */ if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) { +#ifdef ENABLE_FASTRPZ + /* Do not save RPZ rewritten messages. */ + if(!iq->rpz_rewritten) +#endif iter_dns_store(qstate->env, &qstate->qinfo, iq->response->rep, 0, qstate->prefetch_leeway, iq->dp&&iq->dp->has_parent_side_NS, qstate->region, qstate->query_flags); } } +#ifdef ENABLE_FASTRPZ + if(iq->rpz_rewritten) { + /* Restore RPZ marks on a rewritten response. The marks + * are lost if the rewrite is to a CNAME. */ + iq->response->rep->security = iq->rpz_security; + + /* Append the RPZ SOA to rewritten CNAME chains. */ + if(iq->rpz_soa) { + struct ub_packed_rrset_key** sets; + uint n; + + n = iq->response->rep->rrset_count; + sets = regional_alloc(qstate->region, + (1+n) * sizeof(*sets)); + if(!sets) { + log_err("append RPZ SOA: out of memory"); + return error_response(qstate, id, + LDNS_RCODE_SERVFAIL); + } + memcpy(sets, iq->response->rep->rrsets, + n * sizeof(struct ub_packed_rrset_key*)); + sets[n] = iq->rpz_soa; + iq->response->rep->rrsets = sets; + ++iq->response->rep->rrset_count; + ++iq->response->rep->ar_numrrsets; + } + } +#endif qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = iq->response; return 0; diff --git a/iterator/iterator.h b/iterator/iterator.h index 342ac207..49b0ecdd 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -396,6 +396,16 @@ struct iter_qstate { */ int minimise_count; + +#ifdef ENABLE_FASTRPZ + /** The response has been rewritten by RPZ. */ + int rpz_rewritten; + /** RPZ SOA RR for the ADDITIONAL section */ + struct ub_packed_rrset_key* rpz_soa; + /** sec_status_rpz_rewritten or sec_status_rpz_drop if rewritten. */ + enum sec_status rpz_security; +#endif + /** * Count number of time-outs. Used to prevent resolving failures when * the QNAME minimisation QTYPE is blocked. Used to determine if diff --git a/services/cache/dns.c b/services/cache/dns.c index 7b6e142c..6d7449f5 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -969,6 +969,14 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf, struct regional* region, uint32_t flags) { struct reply_info* rep = NULL; + +#ifdef ENABLE_FASTRPZ + /* Never save RPZ rewritten data. */ + if (msgrep->security == sec_status_rpz_drop || + msgrep->security == sec_status_rpz_rewritten) + return 1; +#endif + /* alloc, malloc properly (not in region, like msg is) */ rep = reply_info_copy(msgrep, env->alloc, NULL); if(!rep) diff --git a/services/mesh.c b/services/mesh.c index 4b0c5db4..eb9cfa5b 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -61,6 +61,9 @@ #include "sldns/wire2str.h" #include "services/localzone.h" #include "util/data/dname.h" +#ifdef ENABLE_FASTRPZ +#include "fastrpz/rpz.h" +#endif #include "respip/respip.h" #include "services/listen_dnsport.h" @@ -1207,6 +1210,13 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, else secure = 0; if(!rep && rcode == LDNS_RCODE_NOERROR) rcode = LDNS_RCODE_SERVFAIL; +#ifdef ENABLE_FASTRPZ + /* Drop the response here for LIBRPZ_POLICY_DROP after iteration. */ + if(rep && rep->security == sec_status_rpz_drop) { + log_query_info(VERB_QUERY, "rpz drop", &m->s.qinfo); + secure = 0; + } else +#endif /* send the reply */ /* We don't reuse the encoded answer if either the previous or current * response has a local alias. We could compare the alias records @@ -1434,6 +1444,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh, key.s.is_valrec = valrec; key.s.qinfo = *qinfo; key.s.query_flags = qflags; + key.reply_list = NULL; /* We are searching for a similar mesh state when we DO want to * aggregate the state. Thus unique is set to NULL. (default when we * desire aggregation).*/ @@ -1480,6 +1491,10 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns, if(!r) return 0; r->query_reply = *rep; +#ifdef ENABLE_FASTRPZ + /* The new reply structure owns the RPZ state. */ + rep->rpz = NULL; +#endif r->edns = *edns; if(edns->opt_list) { r->edns.opt_list = edns_opt_copy_region(edns->opt_list, diff --git a/util/config_file.c b/util/config_file.c index 0e9ee471..a5fd72e0 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -1495,6 +1495,8 @@ config_delete(struct config_file* cfg) free(cfg->dnstap_tls_client_cert_file); free(cfg->dnstap_identity); free(cfg->dnstap_version); + if (cfg->rpz_cstr) + free(cfg->rpz_cstr); config_deldblstrlist(cfg->ratelimit_for_domain); config_deldblstrlist(cfg->ratelimit_below_domain); config_delstrlist(cfg->python_script); diff --git a/util/config_file.h b/util/config_file.h index 66e5025d..504f4f92 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -522,6 +522,11 @@ struct config_file { /** true to disable DNSSEC lameness check in iterator */ int disable_dnssec_lame_check; + /** true to enable RPZ */ + int rpz_enable; + /** RPZ configuration */ + char* rpz_cstr; + /** ratelimit for ip addresses. 0 is off, otherwise qps (unless overridden) */ int ip_ratelimit; /** number of slabs for ip_ratelimit cache */ diff --git a/util/configlexer.lex b/util/configlexer.lex index 83cea4b9..9a7feea4 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -467,6 +467,10 @@ dnstap-log-forwarder-query-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } dnstap-log-forwarder-response-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } +rpz{COLON} { YDVAR(0, VAR_RPZ) } +rpz-enable{COLON} { YDVAR(1, VAR_RPZ_ENABLE) } +rpz-zone{COLON} { YDVAR(1, VAR_RPZ_ZONE) } +rpz-option{COLON} { YDVAR(1, VAR_RPZ_OPTION) } disable-dnssec-lame-check{COLON} { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } ip-ratelimit{COLON} { YDVAR(1, VAR_IP_RATELIMIT) } ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) } diff --git a/util/configparser.y b/util/configparser.y index fe600a99..ce43390f 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -128,6 +128,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES +%token VAR_RPZ VAR_RPZ_ENABLE VAR_RPZ_ZONE VAR_RPZ_OPTION %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT %token VAR_IP_DSCP @@ -179,7 +180,7 @@ extern struct config_parser_state* cfg_parser; %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; -toplevelvar: serverstart contents_server | stubstart contents_stub | +toplevelvar: serverstart contents_server | stubstart contents_stub | rpzstart contents_rpz | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | @@ -2939,6 +2940,50 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES free($2); } ; +rpzstart: VAR_RPZ + { + OUTYY(("\nP(rpz:)\n")); + } + ; +contents_rpz: contents_rpz content_rpz + | ; +content_rpz: rpz_enable | rpz_zone | rpz_option + ; +rpz_enable: VAR_RPZ_ENABLE STRING_ARG + { + OUTYY(("P(rpz_enable:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->rpz_enable = (strcmp($2, "yes")==0); + free($2); + } + ; +rpz_zone: VAR_RPZ_ZONE STRING_ARG + { + char *new_cstr, *old_cstr; + + OUTYY(("P(rpz_zone:%s)\n", $2)); + old_cstr = cfg_parser->cfg->rpz_cstr; + if(asprintf(&new_cstr, "%s\nzone %s", old_cstr?old_cstr:"", $2) == -1) {new_cstr = NULL; yyerror("out of memory");} + else if(!new_cstr) + yyerror("out of memory"); + free(old_cstr); + cfg_parser->cfg->rpz_cstr = new_cstr; + } + ; +rpz_option: VAR_RPZ_OPTION STRING_ARG + { + char *new_cstr, *old_cstr; + + OUTYY(("P(rpz_option:%s)\n", $2)); + old_cstr = cfg_parser->cfg->rpz_cstr; + if(asprintf(&new_cstr, "%s\n%s", old_cstr ? old_cstr : "", $2) == -1) {new_cstr = NULL; yyerror("out of memory");} + else if(!new_cstr) + yyerror("out of memory"); + free(old_cstr); + cfg_parser->cfg->rpz_cstr = new_cstr; + } + ; pythonstart: VAR_PYTHON { OUTYY(("\nP(python:)\n")); diff --git a/util/data/msgencode.c b/util/data/msgencode.c index be69f628..f10773aa 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -592,6 +592,35 @@ insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs, return RETVAL_OK; } +#ifdef ENABLE_FASTRPZ +/* Insert the RPZ SOA even with MINIMAL_RESPONSES */ +static int +insert_rpz_soa(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs, + sldns_buffer* pkt, size_t rrsets_before, time_t timenow, + struct regional* region, struct compress_tree_node** tree, + size_t rr_offset) +{ + int r; + size_t i, setstart; + + *num_rrs = 0; + for(i=0; irrsets[rrsets_before+i]->rk.type != LDNS_RR_TYPE_SOA) + continue; + setstart = sldns_buffer_position(pkt); + if((r=packed_rrset_encode(rep->rrsets[rrsets_before+i], + pkt, num_rrs, timenow, region, + 1, 0, tree, LDNS_SECTION_ADDITIONAL, + LDNS_RR_TYPE_ANY, 0, rr_offset)) + != RETVAL_OK) { + sldns_buffer_set_position(pkt, setstart); + return r; + } + } + return RETVAL_OK; +} + +#endif /** store query section in wireformat buffer, return RETVAL */ static int insert_query(struct query_info* qinfo, struct compress_tree_node** tree, @@ -779,6 +808,19 @@ reply_info_encode(struct query_info* qinfo, struct reply_info* rep, } sldns_buffer_write_u16_at(buffer, 10, arcount); } +#ifdef ENABLE_FASTRPZ + } else if(rep->security == sec_status_rpz_rewritten) { + /* Insert the RPZ SOA for rpz even with MINIMAL_RESPONSES */ + r = insert_rpz_soa(rep, rep->ar_numrrsets, &arcount, buffer, + rep->an_numrrsets + rep->ns_numrrsets, + timenow, region, &tree, rr_offset); + if(r!= RETVAL_OK) { + if(r != RETVAL_TRUNC) + return 0; + /* no need to set TC bit, this is the additional */ + sldns_buffer_write_u16_at(buffer, 10, arcount); + } +#endif } sldns_buffer_flip(buffer); return 1; diff --git a/util/data/packed_rrset.c b/util/data/packed_rrset.c index 4b0294f9..3b3838f6 100644 --- a/util/data/packed_rrset.c +++ b/util/data/packed_rrset.c @@ -256,6 +256,10 @@ sec_status_to_string(enum sec_status s) case sec_status_insecure: return "sec_status_insecure"; case sec_status_secure_sentinel_fail: return "sec_status_secure_sentinel_fail"; case sec_status_secure: return "sec_status_secure"; +#ifdef ENABLE_FASTRPZ + case sec_status_rpz_rewritten: return "sec_status_rpz_rewritten"; + case sec_status_rpz_drop: return "sec_status_rpz_drop"; +#endif } return "unknown_sec_status_value"; } diff --git a/util/data/packed_rrset.h b/util/data/packed_rrset.h index 729877ba..ccd1a0c2 100644 --- a/util/data/packed_rrset.h +++ b/util/data/packed_rrset.h @@ -193,7 +193,15 @@ enum sec_status { sec_status_secure_sentinel_fail, /** SECURE means that the object (RRset or message) validated * according to local policy. */ - sec_status_secure + sec_status_secure, +#ifdef ENABLE_FASTRPZ + /** RPZ_REWRITTEN means that the response has been rewritten by + * rpz and so cannot be verified. */ + sec_status_rpz_rewritten, + /** RPZ_DROP means that the response has been rewritten by rpz + * as silence. */ + sec_status_rpz_drop +#endif }; /** diff --git a/util/netevent.c b/util/netevent.c index 3e7a433e..f20d806f 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -57,6 +57,9 @@ #ifdef HAVE_OPENSSL_ERR_H #include #endif +#ifdef ENABLE_FASTRPZ +#include "fastrpz/rpz.h" +#endif /* -------- Start of local definitions -------- */ /** if CMSG_ALIGN is not defined on this platform, a workaround */ @@ -596,6 +599,9 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) struct cmsghdr* cmsg; #endif /* S_SPLINT_S */ +#ifdef ENABLE_FASTRPZ + rep.rpz = NULL; +#endif rep.c = (struct comm_point*)arg; log_assert(rep.c->type == comm_udp); @@ -685,6 +691,9 @@ comm_point_udp_callback(int fd, short event, void* arg) int i; struct sldns_buffer *buffer; +#ifdef ENABLE_FASTRPZ + rep.rpz = NULL; +#endif rep.c = (struct comm_point*)arg; log_assert(rep.c->type == comm_udp); @@ -728,6 +737,9 @@ comm_point_udp_callback(int fd, short event, void* arg) (void)comm_point_send_udp_msg(rep.c, buffer, (struct sockaddr*)&rep.addr, rep.addrlen); } +#ifdef ENABLE_FASTRPZ + rpz_end(&rep); +#endif if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for another UDP port. Note rep.c cannot be reused with TCP fd. */ break; @@ -3175,6 +3187,9 @@ comm_point_send_reply(struct comm_reply *repinfo) repinfo->c->tcp_timeout_msec); } } +#ifdef ENABLE_FASTRPZ + rpz_end(repinfo); +#endif } void @@ -3184,6 +3199,9 @@ comm_point_drop_reply(struct comm_reply* repinfo) return; log_assert(repinfo->c); log_assert(repinfo->c->type != comm_tcp_accept); +#ifdef ENABLE_FASTRPZ + rpz_end(repinfo); +#endif if(repinfo->c->type == comm_udp) return; if(repinfo->c->tcp_req_info) @@ -3205,6 +3223,9 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec) { verbose(VERB_ALGO, "comm point start listening %d (%d msec)", c->fd==-1?newfd:c->fd, msec); +#ifdef ENABLE_FASTRPZ + rpz_end(&c->repinfo); +#endif if(c->type == comm_tcp_accept && !c->tcp_free) { /* no use to start listening no free slots. */ return; diff --git a/util/netevent.h b/util/netevent.h index bb2cd1e5..666067e8 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -120,6 +120,10 @@ struct comm_reply { /** return type 0 (none), 4(IP4), 6(IP6) */ int srctype; /* DnsCrypt context */ +#ifdef ENABLE_FASTRPZ + /** per-request RPZ state */ + struct commreply_rpz* rpz; +#endif #ifdef USE_DNSCRYPT uint8_t client_nonce[crypto_box_HALF_NONCEBYTES]; uint8_t nmkey[crypto_box_BEFORENMBYTES]; diff --git a/validator/validator.c b/validator/validator.c index c3ca0a27..15251988 100644 --- a/validator/validator.c +++ b/validator/validator.c @@ -2761,6 +2761,12 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq, default: /* NSEC proof did not work, try next */ break; +#ifdef ENABLE_FASTRPZ + case sec_status_rpz_rewritten: + case sec_status_rpz_drop: + fatal_exit("impossible RPZ sec_status"); + break; +#endif } sec = nsec3_prove_nods(qstate->env, ve, @@ -2794,6 +2800,12 @@ ds_response_to_ke(struct module_qstate* qstate, struct val_qstate* vq, default: /* NSEC3 proof did not work */ break; +#ifdef ENABLE_FASTRPZ + case sec_status_rpz_rewritten: + case sec_status_rpz_drop: + fatal_exit("impossible RPZ sec_status"); + break; +#endif } /* Apparently, no available NSEC/NSEC3 proved NODATA, so unbound-1.13.1/contrib/unbound-querycachedb.py0000644000175000017500000000532614010434640021026 0ustar wouterwouter#!/usr/bin/env python import hashlib import sys import struct import socket import time from optparse import OptionParser import dns.message import dns.name import dns.rdataclass import dns.rdatatype def _calc_hashkey(qname, secret, qtype): qclass = 'IN' # CLASS is fixed for simplicity hobj = hashlib.sha256() hobj.update(dns.name.from_text(qname).to_wire()) hobj.update(struct.pack('HH', socket.htons(dns.rdatatype.from_text(qtype)), socket.htons(dns.rdataclass.from_text(qclass)))) hobj.update(secret) return hobj.hexdigest().upper() def _redis_get(options, key): import redis return redis.Redis(options.address, int(options.port)).get(key) def _dump_value(options, qname, key, value): print(';; query=%s/IN/%s' % (qname, options.qtype)) print(';; key=%s' % key) if value is None: print(';; no value') return if len(value) < 16: print(';; broken value, short length: %d' % len(value)) return now = int(time.time()) timestamp = struct.unpack('!Q', value[-16:-8])[0] expire = struct.unpack('!Q', value[-8:])[0] print(';; Now=%d, TimeStamp=%d, Expire=%d, TTL=%d' % (now, timestamp, expire, max(expire - now, 0))) print(dns.message.from_wire(value[:-16])) def main(): parser = OptionParser(usage='usage: %prog [options] query_name') parser.add_option("-a", "--address", dest="address", action="store", default='127.0.0.1', help="backend-server address", metavar='ADDRESS') parser.add_option("-b", "--backend", dest="backend", action="store", default='redis', help="backend name", metavar='BACKEND') parser.add_option("-p", "--port", dest="port", action="store", default='6379', help="backend-server port", metavar='PORT') parser.add_option("-s", "--secret", dest="secret", action="store", default='default', help="secret seed", metavar='SECRET') parser.add_option("-t", "--qtype", dest="qtype", action="store", default='A', help="query RR type", metavar='QTYPE') (options, args) = parser.parse_args() if len(args) < 1: parser.error('qname is missing') if options.backend == 'redis': get_func = _redis_get else: raise Exception('unknown backend name: %s\n' % options.backend) key = _calc_hashkey(args[0], options.secret, options.qtype) value = get_func(options, key) _dump_value(options, args[0], key, value) if __name__ == '__main__': try: main() except Exception as e: sys.stderr.write('%s\n' % e) exit(1) unbound-1.13.1/contrib/unbound-host.nagios.patch0000644000175000017500000000625414010434640021273 0ustar wouterwouterIndex: smallapp/unbound-host.c =================================================================== --- smallapp/unbound-host.c (revision 2115) +++ smallapp/unbound-host.c (working copy) @@ -62,9 +62,18 @@ #include "libunbound/unbound.h" #include +/** status variable ala nagios */ +#define FINAL_STATUS_OK 0 +#define FINAL_STATUS_WARNING 1 +#define FINAL_STATUS_CRITICAL 2 +#define FINAL_STATUS_UNKNOWN 3 + /** verbosity for unbound-host app */ static int verb = 0; +/** variable to determine final output */ +static int final_status = FINAL_STATUS_UNKNOWN; + /** Give unbound-host usage, and exit (1). */ static void usage() @@ -93,7 +102,7 @@ printf("Version %s\n", PACKAGE_VERSION); printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } /** determine if str is ip4 and put into reverse lookup format */ @@ -138,7 +147,7 @@ *res = strdup(buf); if(!*res) { fprintf(stderr, "error: out of memory\n"); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } return 1; } @@ -158,7 +167,7 @@ } if(!res) { fprintf(stderr, "error: out of memory\n"); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } return res; } @@ -172,7 +181,7 @@ if(r == 0 && strcasecmp(t, "TYPE0") != 0 && strcmp(t, "") != 0) { fprintf(stderr, "error unknown type %s\n", t); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } return r; } @@ -191,7 +200,7 @@ if(r == 0 && strcasecmp(c, "CLASS0") != 0 && strcmp(c, "") != 0) { fprintf(stderr, "error unknown class %s\n", c); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } return r; } @@ -207,6 +216,19 @@ return "(insecure)"; } +/** update the final status for the exit code */ +void +update_final_status(struct ub_result* result) +{ + if (final_status == FINAL_STATUS_UNKNOWN || final_status == FINAL_STATUS_OK) { + if (result->secure) final_status = FINAL_STATUS_OK; + else if (result->bogus) final_status = FINAL_STATUS_CRITICAL; + else final_status = FINAL_STATUS_WARNING; + } + else if (final_status == FINAL_STATUS_WARNING && result->bogus) + final_status = FINAL_STATUS_CRITICAL; +} + /** nice string for type */ static void pretty_type(char* s, size_t len, int t) @@ -353,7 +375,7 @@ } else { fprintf(stderr, "could not parse " "reply packet to ANY query\n"); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } ldns_pkt_free(p); @@ -388,9 +410,10 @@ ret = ub_resolve(ctx, q, t, c, &result); if(ret != 0) { fprintf(stderr, "resolve error: %s\n", ub_strerror(ret)); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } pretty_output(q, t, c, result, docname); + update_final_status(result); ret = result->nxdomain; ub_resolve_free(result); return ret; @@ -427,7 +450,7 @@ { if(r != 0) { fprintf(stderr, "error: %s\n", ub_strerror(r)); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } } @@ -448,7 +471,7 @@ ctx = ub_ctx_create(); if(!ctx) { fprintf(stderr, "error: out of memory\n"); - exit(1); + exit(FINAL_STATUS_UNKNOWN); } /* parse the options */ @@ -509,5 +532,5 @@ usage(); lookup(ctx, argv[0], qtype, qclass); - return 0; + return final_status; } unbound-1.13.1/contrib/warmup.cmd0000644000175000017500000000473614010434640016351 0ustar wouterwouter@echo off rem -------------------------------------------------------------- rem -- Warm up DNS cache script by your own MRU domains or from rem -- file when it specified as script argument. rem -- rem -- Version 1.1 rem -- By Yuri Voinov (c) 2014 rem -------------------------------------------------------------- rem DNS host address set address="127.0.0.1" rem Check dig installed for /f "delims=" %%a in ('where dig') do @set dig=%%a if /I "%dig%"=="" echo Dig not found. If installed, add path to PATH environment variable. & exit 1 echo Dig found: %dig% set arg=%1% if defined %arg% (goto builtin) else (goto from_file) :builtin echo Warming up cache by MRU domains... for %%a in ( 2gis.ru admir.kz adobe.com agent.mail.ru aimp.ru akamai.com akamai.net almaty.tele2.kz aol.com apple.com arin.com artlebedev.ru auto.mail.ru beeline.kz bing.com blogspot.com comodo.com dnscrypt.org drive.google.com drive.mail.ru facebook.com farmanager.com fb.com firefox.com forum.farmanager.com gazeta.ru getsharex.com gismeteo.ru google.com google.kz google.ru googlevideo.com goto.kz iana.org icq.com imap.mail.ru instagram.com intel.com irr.kz java.com kaspersky.com kaspersky.ru kcell.kz krisha.kz lady.mail.ru lenta.ru libreoffice.org linkedin.com livejournal.com mail.google.com mail.ru microsoft.com mozilla.org mra.mail.ru munin-monitoring.org my.mail.ru news.bbcimg.co.uk news.mail.ru newsimg.bbc.net.uk nvidia.com odnoklassniki.ru ok.ru opencsw.org opendns.com opendns.org opennet.ru opera.com oracle.com peerbet.ru piriform.com plugring.farmanager.com privoxy.org qip.ru raidcall.com rambler.ru reddit.com ru.wikipedia.org shallalist.de skype.com snob.ru squid-cache.org squidclamav.darold.net squidguard.org ssl.comodo.com ssl.verisign.com symantec.com symantecliveupdate.com tele2.kz tengrinews.kz thunderbird.com torproject.org torstatus.blutmagie.de translate.google.com unbound.net verisign.com vk.com vk.me vk.ru vkontakte.com vkontakte.ru vlc.org watsapp.net weather.mail.ru windowsupdate.com www.baidu.com www.bbc.co.uk www.internic.net www.opennet.ru www.topgear.com ya.ru yahoo.com yandex.com yandex.ru youtube.com ytimg.com ) do "%dig%" %%a @%address% 1>nul 2>nul goto end :from_file echo Warming up cache from %1% file... %dig% -f %arg% @%address% 1>nul 2>nul :end echo Saving cache... if exist unbound_cache.cmd unbound_cache.cmd -s echo Done. exit 0unbound-1.13.1/contrib/unbound.spec0000644000175000017500000000744414010434640016676 0ustar wouterwouterSummary: Validating, recursive, and caching DNS resolver Name: unbound Version: 1.4.18 Release: 1%{?dist} License: BSD Url: http://www.nlnetlabs.nl/unbound/ Source: http://www.unbound.net/downloads/%{name}-%{version}.tar.gz #Source1: unbound.init Group: System Environment/Daemons Requires: ldns BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: flex, openssl-devel, expat-devel, ldns-devel %description Unbound is a validating, recursive, and caching DNS resolver. The C implementation of Unbound is developed and maintained by NLnet Labs. It is based on ideas and algorithms taken from a java prototype developed by Verisign labs, Nominet, Kirei and ep.net. Unbound is designed as a set of modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but are linked into an application) are easily possible. The source code is under a BSD License. %prep %setup -q # configure with /var/unbound/unbound.conf so that all default chroot, # pidfile and config file are in /var/unbound, ready for chroot jail set up. %configure --with-conf-file=%{_localstatedir}/%{name}/unbound.conf --disable-rpath %build #%{__make} %{?_smp_mflags} make %install rm -rf %{buildroot} %{__make} DESTDIR=%{buildroot} install install -d 0700 %{buildroot}%{_localstatedir}/%{name} install -d 0755 %{buildroot}%{_initrddir} install -m 0755 contrib/unbound.init %{buildroot}%{_initrddir}/unbound # add symbolic link from /etc/unbound.conf -> /var/unbound/unbound.conf ln -s %{_localstatedir}/unbound/unbound.conf %{buildroot}%{_sysconfdir}/unbound.conf # remove static library from install (fedora packaging guidelines) rm -f %{buildroot}%{_libdir}/libunbound.a %{buildroot}%{_libdir}/libunbound.la %clean rm -rf ${RPM_BUILD_ROOT} %files %defattr(-,root,root,-) %doc doc/README doc/CREDITS doc/LICENSE doc/FEATURES %attr(0755,root,root) %{_initrddir}/%{name} %attr(0700,%{name},%{name}) %dir %{_localstatedir}/%{name} %attr(0644,%{name},%{name}) %config(noreplace) %{_localstatedir}/%{name}/unbound.conf %attr(0644,%{name},%{name}) %config(noreplace) %{_sysconfdir}/unbound.conf %{_sbindir}/* %{_mandir}/*/* %{_includedir}/* %{_libdir}/libunbound* %pre getent group unbound >/dev/null || groupadd -r unbound getent passwd unbound >/dev/null || \ useradd -r -g unbound -d /var/unbound -s /sbin/nologin \ -c "unbound name daemon" unbound exit 0 %post # This adds the proper /etc/rc*.d links for the script /sbin/chkconfig --add %{name} %preun if [ $1 -eq 0 ]; then /sbin/service %{name} stop >/dev/null 2>&1 /sbin/chkconfig --del %{name} # remove root jail rm -f /var/unbound/dev/log /var/unbound/dev/random /var/unbound/etc/localtime /var/unbound/etc/resolv.conf >/dev/null 2>&1 rmdir /var/unbound/dev >/dev/null 2>&1 || : rmdir /var/unbound/etc >/dev/null 2>&1 || : rmdir /var/unbound >/dev/null 2>&1 || : fi %postun if [ "$1" -ge "1" ]; then /sbin/service %{name} condrestart >/dev/null 2>&1 || : fi %changelog * Thu Jul 13 2011 Wouter Wijngaards - 1.4.8 - ldns required and ldns-devel required for build, no more ldns-builtin. * Thu Mar 17 2011 Wouter Wijngaards - 1.4.8 - removed --disable-gost, assume recent openssl on the destination platform. * Wed Mar 16 2011 Harold Jones - 1.4.8 - Bump version number to latest - Add expat-devel to BuildRequires - Added --disable-gost for building on CentOS 5.x - Added --with-ldns-builtin for CentOS 5.x * Thu May 22 2008 Wouter Wijngaards - 1.0.0 - contrib changes from Patrick Vande Walle. * Thu Apr 25 2008 Wouter Wijngaards - 0.12 - Using parts from ports collection entry by Jaap Akkerhuis. - Using Fedoraproject wiki guidelines. * Wed Apr 23 2008 Wouter Wijngaards - 0.11 - Initial version. unbound-1.13.1/contrib/unbound_cacti.tar.gz0000644000175000017500000021700314010434640020306 0ustar wouterwouter‹”–Sì][7–ökò+ô4Ø}°›÷ˌЀǘ}p2;ÉîÎb±xu Ó-u¤’cùñ{XU’XjuÛj;[Š„F‹ Tf)6Pk±ÆHPH)ua,¥5 “@œ°ZA€ÃR‰}@ðÛŠqûÌ | Ÿ &GƒI#H@GÍe@Ô D-@T"Å™²¦Ô T±éÕ~m'Ú”’d3„PYuá–áÌUEÀ€)Ò†jÐV¨.ü{¼ºI{Ìí¦ujä[é^ÖÔtW«mqY™òp‡#Ïb€‘à Å’t£¥ ’g®#îÔ‘Î!ˆ$L[K,"H`‘AÂÀàÈó^öÌ!öuL‹”Çjù ¿¢¯DýkEëƒÿä†/ ,_a„³oþJßz… N!ŒEĘ4Ž6œ4 j¡´…cé’õô «ÂõYá~|{Û @ͳaÚès]­æ‹÷×W›õêêvéÌí•/®Ö‹»û÷¡š¼ü@Üäå~1“—nò§Ûê/)eæ–ww›Å¼úô§÷Õ_jqZ!ßE–sŸÂ œü'ÒoÖÖ묟1¤Ö¤pÖ™oî}Ú²Z™ Y´íÕÂûðñúÝÊÝv;Ñ&‡¹½]þ:[lno×!µPKºsK_ß»p“Ö4t¹©àë¾¶Mo%ÙmpœÅïw \=U-Ó' êÇôØò¶±«2§ŸÇµY¤œé†£cÚlÇØ•™Ñ¦GtY¢š\—C áGuyŠìÕb‘R¦OðmÓbò]];ÿÛq=©eú¯å1=Öné±+rï[?®É"ÅtFîU²cš¬—AÇ®ÉýZî#cw‰b¦O`Á¹&ü·7ið÷Õß|1 > †ý,ÑÂô “°\m’š¿“înv?šS9½J,ÒÉô ³Ä\‰?ýðîo“ï¶€ßI•ÝYÈ© =,­GµEšêŸÍVÇ:Èv?ÝØ»È|[à#¨D9¹6‡ö Óf½lìºÜïf;®É"ÅäšÚKptàþñ (ù~ÇËqM–(fzµsdl¯-õÝLŸ°i~ïêycæ·Ÿ&ÿÂ'ïæ‹M&¯?„•yþ5óò|œÅùmXÏ¢qÕru^ñéÕ,eKûþ×ÉÔ’hµüuÝúyS¨vÍïÂúÞ,®•`)aO‰.¶ãñotzµ‹ítQܸ\C‡öºø¯þ™”AÑsiC<І<®  ³ú šö#(F!~ad\x泌 ýþÌ çðJT‚ò–0EˆLÍ©³FLÌ‹{8wžIzý™EîìÏ$Œ"i FÜ–eH+™BȘA?Å 1‚¡ã4HôoÐ,±pÇueƒƒ<Ž ðQ–#n½"Ns¥'gÑKüxfÿÍw棄èA‚¢L…”0©éÁK@W±\ x¥ÈÐMùæâÏÜa¡~nà)ýE¯C³ÈÒc@‚KJ¢óœ¥¸*bƒ‡ÛÝ+ q_¢ùîQ@âì‰f¯C³ÈÂV‘<ß,"GÊ%PQL)²€¥s€ÄÆŽÓ ö:4‹,œC"P0_zH0Qp17.0kI{/Mtè, qþD“ö:4‹lÜqhBí±çDÒt¶Œ |´ÎÅ4ú 憎½N±‚s`š¢Ùb¡~:ã)ýE¿G³ÄÒ]h0g<4IqäX‰Ræ¤öUœ Ñ|ž!¤×£YdáÎŽn¤EQ'Šê°ƒ)lÔ`NŒµâÌ|8w¢I{=šEî<É$£¨ñ3˜Ãjá9ã@A„æ-ÈŸ$F0vœ‰^f‘…;Î+.¤÷yÕ&@…„Á7AéIç‰?Ñìß¡YbãÎú(Ž˜I¢¤Q†ò£”¦ÀPÑГ)†^%ß Î߈7ôB4·D3½¿ã”þ¢×£Yd鮯ÂRá çÄZ˜¤8 W†è d$~ˆhž Ñ|ž!¤×£YdáÎÜ{ CS‚Z¤%C&+ Ф©\y4G‰³'š½Í" wXEz® ¢©òF#°)\ì bÌŹÚ`3 HŒ`ì8íaWý[4K,|°‘[pŒ4HcF†ˆSXÃÒ«s€ÄùMÖê¼ÄÆ77F)Œf.,ÆŒ¶‚£€¢@A< KN3—ŽEP€q&šˆ‘§ˆy燖Îß’ËÒù õ›{Né/z=šE–î0^FëI‹«@L…u ­•vÞ´„‰«´”ÂHƒ¼4Ì2äæŽA$8oaÎk‘×Ê@Æë,ŽißùÐY  ÑÜaáÇæu›§ô½>Í"[wf!Ú{δáV(Å‚°Þ` ÷¿Ö”Q?øŒ¼Áq¡šÏ2ˆôú4‹,ÜY)M»plÄAs†eúȉÖÄX†VJG‰³§š½>Í" wÅL0‘:m¹Åœ•žIƒ|d )‡)> HŒ`ô8íqí½>Í" w á0æÈ*… œzE9#Ñh(ŠÜ ù(F‰ó§š¼×§YbãéÕîSÍÛžó—O!]¯ªí"ãÎr쀹z-0UCó½…JûåÊL~ZnV.Lþgû:è×ÿÛy¥uö~?hÛÁds·h^£¨Í.¥ÉÛT¾©lÑën~Ëò½%Ï;ôŠŒ<ïÐËò¼CÕÏì³{v¹Ur3"˜ Ë= ØKg¼"‚*@½öâ‡ÍŸ¯hÉ¡gÊçZzÚxžwè9ÔyÞ¡çy‡ž[û¨%‹ “[RYpuäÿØ»²7’#­×Ý_Á»Rç}Ø ò‚ xŽõŒw½X,ˆ<%bÙÍv7[šæÇodU‘Ìd“•©!Õr({¤ª¬¬dUÄW‘_D1<4æIÀ­c 3&ƒ^gõÚ¯Én—ÖgTem×Ö\Œµí< UVöyÌëÖ6ÌëÖö…Û«Ê&Íäª Ô"Àg\š!+ 8ÍŠôQ&«ªüúϨÇÚ®h…+ÛeŸNe¥B7• v ³PÙwe¯›Ô’ë:¨?à¶Ð2(é%¥ð£ÊFSÿ$¿ùþõXÛudK£ÛQäukûde{ÑIVÖ5ïÕc“Zr=‡àÓ•ÆÁ×î1dÚ”ˆÈ:æ9\ÄU=~÷ÃßžQ‘µU½Û©,÷,êVÖÊ©,ËëÖÖ íUd“^rEÒ­zp}"xÊÞs`)ŸzèR­*òûoŸ“ìÔVÍ=Ye9E^·6Ï>¯[›€]XáʼܽŠlÒK®HˆrHDðe5IO-”Š „öЫ×ù·ÿ|FEÖf¥–_ÎøtÅBé•yl…r*œ¶ºÞÑy/{Ù¤—´¤¤.xð]€•Š%÷+¥-‘±îüðžQ‘µY­L(êVƉK®3>€Xš÷ñq¥ý¦µE/¹"µ`Ì)ˆ0 .‚›àÒ„ ØàH.Ò(Ês×ʨJÑCUÂí…Á¬Äa U Ðu+q›½ªlÑ Ü¼ ó¬î°fÀŒ  ž Ì€ë{L¼r B·AÈÜQ=É"2¨YàÄÈ£DðâÐË«nö}¿ßÚÅã­Ÿ¼ýæûÉËÉä?†„èö§IŠãmPpí‡7ZöÊL Ö×Zí›úùÃâa9ÍÐñ3´X¶¿·yh°8í^~£Î%Àd±gB5)À¨¨§)ožòþÞ¤³ôœÃáú‚Ÿ>,ÃÝpi8é.®ÏhU-¯-§Æ-gû7» ÃqŠæÅÝn°I <‰c©zÌ·Ã'À¡‰ð‚?gut)Pª¬2à´J4™gŸA*¬â_}]²¡¢eD§f•EèpvpÔV–¾n `¶À‡Ó@MˆñÑs¦0!¸wÈëEƒ!ðàɰ¹À^ ¸ Þƒ&!­^³C¯b•›/ K×Òˆ®"°ÓN¡]Ú íIá`›¶‹×±OoéÕ~3»Ý<Þ¬a°:ïëä%Ê ÃMæÇ²‘áñ¢é•‘lÇWÈÚ8Éq¹è§'\@y" hD¦ ïÖàYåÀ€¿‚ÃÐ “”Ϥ ”MËAY›'v\Pv“³/< H8âë::€€)  ÐJƒ )!Ù„°’µ52Ç…d·0õÉÓ€¤(ð“•2B"áÀ©ilXn Î6B² a9$kû’ß^ØäÉ@’º(ò>:ƒgàkgDà9&¡n„dÂrHÖöF;.$» I/< H†ˆ™ Q"ŒÈÀœ{‡1`UnÅ0öC² a9$kûB’)ѧHD( °ãÒ€ŸãQ¢(¢ELpèyQ«Ëݰ‘•Œ8ÇEdÊBwAäi ÒIâ T¼¨µXc$(\i 5a,e»"8aµ‚GK%öÁo+Æí‘A™æŽ^0y2˜4‚„qÔ\D BÔD%Rœ)kZ£@-Ë矧FûVºÑ]„PÛãÂ'ÙªŠ€S¤ Õ ­ð¸ð[lÿã&é­fú¯Žúò§óÿû']?ÕêqÛ32åá G>ÍÍf-#HJv–‚HŽüŒ¸xFÒöŒH´µÄ"‚f¥Y=Ð9òÀ¼—#>ÄæÓ å®§|…_ÑW¢ûkE»“WþÁP€å+Œpö/¥áÿê&8a,ºCŒI_aç‹“T”Vpl²¾þŒQáî‡vŒpïà^™´µäÆ"ôË.¦ËûÙíû×W÷Wó…3ó+;»½z¸½¹{–“—‰›¼üöã?Í䥛ü~¾ücº2u‹››ÇÛÙò§ß¿_þ±+N#äë“Å̧ãaÈõé7;íã§M iPéœóÇ;}H#â²ÓÁª…÷áÇ;°»K÷°[œö5Ì|¾ø4½}œÏ^§õ@›³jIvná»b}Ü_ë_tñ¸„^Ã?«WJ²Ï`7‹ß̸ú\±\F§¾KŽo;uQæôs·4›„sýÝÑ.iö„ãÔ…™Ñ¦=²lM.ËÚ@øNYž G¥Ø$”ëψmì’bŠ]º×ñ·ÝrlËõgD-wɱ KŸº 7±õÝ’lLÑsWFÉvI²=uInÆr÷ôÝ-‚¹þ œKòÛ¿¼Ý'Á_W~³ÛŠøiîì[¤pýNX.¶?IM¿’ì>¬þ0¦vF…Ø$“ëÏðs!~ÿÍ×ßM¾Z9¿’(K/äPn·6"Ú&Iħ2Ùj—æÓº‰Ì§î!@-ÂÉ¥Y›'´KšÝD°S—åf6ÛnI6 &—dm.ÁÎŽûÛ3 ä›/»%Ù"˜ë«u cuokìæú3&ÍoB=oÍlþÓäßøäëÙíã2LÞ| ÷æ}ø÷,Êóã4Îæáa[.î_£Wüúj«,UKóþR(¨?HE÷‹OCœ7u!£ÙMx¸3·¯•`éÂú<]tq˜N[Äõ4ùÕ. ­/—Ë¢¶(`#‹ÿ áÿ’0(:–4ÄiÈÝÒŒÕ/GÃûå⨭{؈ãëÅíòC’™üyñx°0º”ð[Ò|—4ˆê—¢£áýrqÔ–vlÄñßÁÜ'iàÉ[óÓáÂPê©4´Ü% J§X±_$ކ÷ËÅQ[½²G‚D/Ž/f9øîo³_І·z²¦6Âø&mw4ÏÞ|Ø")í…ôúwê™ÇÉïÖ;'uÅ ßøcð^iµÔë—?ûþ<ö/;A]}e܇0ù0[>\ñ7ÒêBÉù‹~'Q”þÅ’£ÕyWÝ’Ñ”/f‚~ÄgØûçñaiî'“÷‹År¬Þ'à2áþ9žèYÿìÕW0v[ 7wóÄ'‡ÚSû0}9u©ö4Õ~õãÍ|ÿo$ ÆvëS&™xD0€ yˆà˜½˜ gÀo[ÿ×½…ü—µ–*;‚¨`!,ÑÆ̈h)¢i+§/>7øÉ-{ÂPOîÁÏ–ó~»?ꋻÆ¥½yûùýÓÙ t¤Ãz«¹Ûe]ÕíBèCwÖ[N?„ÙûýÔŒá°÷ÛúcðŠ¡3ÊÊ—ÓO3¿üÐÕïºâþ°ë—³Òåôa¾êfp§òÓ®BvžÜ¹íËË©y\.¦Î ÂÌN» Ùy·fxër~Ãtq·|Øj¤/Ûj©/$ykY½âöùâýv‹©h»Á¾Ú®JËMÁ4E‚úÜ.ëEõ¤âÎjÅÃÜÏÞ yR¸ýŒ«ª»+ ÜïÓ¸úºÅUÁ¦µUÉZE•åÜñÅ}·á°»0§»òâåôñî.ÜOç³›YS~þ¯}D`S€þžÔX‚Œ>äç]•¼šxr}9µæ!d“S²Ó®Bvžv¤¼¾Ú®°ì””µöï‘_Þ¾8TO¢¹ ·OšÙ*ß´÷䆽Õá$Ü/g øéÜØ0ï§à”E]Å­²s@®&Á-nýõÕÓ›†ÝL»ÃíÕìÃVñN—ö/´É0{G”ã!ne$†¯G"ŠVÑ—ØyŸáf¼“¦?_=Þÿau ŽÛúøÍÇ÷›róãÜÇu4ÿP Šd3šÛ´…×ÁAß-àP1,A$šÈj$§’‡{½rVR“v?Œ˜Z®‰©g Hhºd èSS-–f>YÙƒx¿¸™˜ù|²üpŒ8hGèñ E-(²£Êˆ¬Ži§°`^h¡ŒÁžò`=©eG=4—LGÙ6~49j‹‚‹îÇa¥ ’8§5æTÅh½ÔÃÿ”ùÂfä’Hà(»Æv,- .a2 Þ!wœ{,‰Ð&xnµ²žj@‘? Dœ@Ÿr"F“5)8Gà‡Y›¶9‚@¿1‹VD*• QÓZf‰“@Äù§ÍIÔ¤âÂJ8'^§­>-Fð>idyÚ©;Û8a_j E‘„XK°ðŽJ¤ˆÑ¹€#\cB½Uü½ÐÏýìxæd2Fó5i;‡&”#x€Ó¯(1ÆIË<áÁcñEáq!šGéDFÓ5)¸0iŠ¡Ð, ’Úëב„´ã¦—›MÒNçN4ñhz¢& ¼sà">2+ TüX0+q =áç‰è>ƒÄhr¢& —ÉQ8=t 3ÃàáèÁÐ(¤$©QÍ“€ÄùSM<êlÑq‘í¥Ay†ñÞÇ„U€C‰±´ ɽ•$”-J3 §²£ ˆG/* x÷N¾½$GÝæšø0£1ÕlRwa4”ÅÔDŠÅ\pƒAÃ2rŒ5ZõEÃÇ…l§ k6i¸t³@"·B 9ÀH€¦BuêˆUÐ$ΞmŽÆ5›4\ ˜x^ʼGÊH£’++¨ÒpGJŒãõ9@â:à 1ØlÒpá“JâLpÂzo½r†¦<’Ô bI@G$Øœs€Äo€mŽÆ6›t\¸ F:åºÍŸ¢²Ü{ ´C0¥hZ3Àk3n@±ˆ}pQ"fƒwœ™À 6DDÁj‹†Þ½»Œ¤¯±P¬t>ÀlŒF7›^„²à'QÀCiK&Š¡óÁÂcL£¨MÀ9!¾y”žd4ºÙ¤áÂEÅ’bêƒÄŽŠÁÂ8ˆÃX9eç‰sç›t4ºÙ¤á‚\80î´Qš1Oõˆ2f]0±:–~8.ä0HŒF7›4\P x žŒáÑu)õÜH0 FÕøæI@âüù&n¶è¸K7ˆ0Î¥Œ*mðHlDÁF‚fšÚê 1w†'ÛPŒ&,×ÜGøq—¦ñ™›—EêV)K>}0ËI4³yð“7_ýõ°µÈãCë-Ú/g 0<ð´`€a¢=Ñ^]˜”EUÔFHƒË…|gyú(ùlÒpÁ4À¹….ÀHc¢5ËFÑ1pr¥ˆµqÔ“€Ä¹“O>J>›4\0 9KÛÛ 1ç’+0Ikk O'П‰QòÙ¤ábH$¸€•Ôžƒg«ÒÖÑ1 '\Fx'V vž$Ο|òQòÙ¤ãbèl‰ð”`žlˆI ’Dà€­Âµ5VÆ`¸°{GA0†D#"g4H+‘õuòy v®±ð÷ÛOæv Œó>ÜÍ…f>*Ï1µ¥C'‰sgšb4¾Ù¤áÂù@Œ2*Aµ)«dðˆb"0¤$г€Ä t‡Ab4¾Ù¤ápMyÀŽ&àÊJicF•î'ªˆjþèI@âü™¦o6鸣6%¶ÄJ*-pé¹3Q Ô˜¦Fœ;e½4"ˆ£ÅÑZ£C’*Û²¾yóæOoð…i®–}õÝaöb4¤Ù¤ébÞEÊ8BXÊ䆨±2¥GÑ á5|û_¢yœ.d4¤Ù¤áb4þˉ"@E QjR†tdÓµô“€ÄÙÍÑf“† +¡=áž™Á7FpAœ³ØúˆŒ—ç‰è;ƒÄhH³IÃEôJäM°À©‹ÉiÅXab¦˜ÒX iž$~Dsõwž¸ é®™ 9%ƒÿtT¨ÔLKpoÀçjȨ½4“ï÷.Lþ§Ë þîš.ÝÝÿ9γԀ ƒül •Ç›Û>—xޤ8ë+}ÝþúnbQ?gukÝk^·fw‹v+d^·¦§LGë´¹íšÉU¨Š„(¯|t!RbáDYÄJ1¯„Ý«ÊÇaX: ë?£6kÃü¹$kã¿yÝÚÀ`¡¡ÊˆQ^·6°W›MÊɵé9I‰ ŒS*ÂcqI"6Þk%¤’a=ézìÜÝ}ϨËZ =—c-ÂZÔ­„Þ ½Wb2yÝš«¾W—MªÉuI‚ñÊ"¸cÈ …!Þ;Ïh@#ºW—Ë”’lš4ÚåðMË ŸQ¡µe‡¹0këÑŠ®²P)¯[[ÁRˆÊ†½ mÒO®ÐÈT”ñÿÙ»ÖÞ¶q¥Ý¯'¿B8À9ØÚ„Q”vƒnâ´rék;Ûí'ƒ×ÆXÇα•^€ýñïP’mɱ%¥q/öÊ‹m(Š¢Èg gF$Å¥°æVð@nÃH„} ¹Õª6ûÌÜw”fÕ<þ<’U¼ ª˜ù[PÅ”Ð|Ùª™‚¥YK8yi€*й‘š! tKW‚ v¯^¬ƒ[óx&[ÍÁ\å~gVìy˜³j3¼Â£\±KZ¾lÕöYáW쪴Q µä“(09e!}¤žÐR8 Ñ"Êo~<—úöû‹³ê3y(«>Xx–+>W}ÅGÅ ÏgÅǦ6г–tòâ”TjŒ–ˆ‚† ”f˜[B­Ò’ƒR¨x>éhÕ.Qï£bû ðûÊ”sņ#…²ûPlh-ù<ŒæPÀ A)0@[Ð øµ®CÀª â%ЊOžºŠ½î OsÅ&è¤bwìÂÓ\±iòfg¥Ž| ö 80f¸Œ…¡FzðRYàc ª¾B è ´êƒh…'´âSYà+¾¡Txš+>®S4ËÊ¿¹²Ù$ª!¸x"š_›y0ă¹· Þ¨o0Á¤‘ˆ2*àä!˜ƒ7j@G,¼x0ÞÁS N©Ä–N‰p=–“û±öN/{Þ /¿‘Ê\fÇ:ëKœŠÑ}Ò}!Ï´’¿o&³xãÅßPWuÍP5Ðpôxó£ Èp$|n‚€ @]hk§!€\¼4kàt*Ü‘kb–\œÐƒYlî²SÙArrqDÝt¿â¹x T<ü˜v:K&'²´ 泓›. ŽYâ:ƒnA‡DÀ€,ÔßĈÀyš‡AÒ²HG rCP9J+ðÊyäS0%yåËV0ÅPI䪅!BjÀâwcÊ—5†?£˜¦Š‚iÅÕDðϸɗ%`BÂC`q*Op°‹Ý 8†~PÒ¼› euÜ\ÒþSsç!ÛA"ÐY¢’–D{™)¤ÕìÕèYƇW¦Ò¿އ·÷· 6ÌÓ2ùœŒÅÙEâs±’ì8WI–3¯¤P Ø¹yÄ}µÓÅHüº3~±¯Å Ò–Ý1¥I£á+9ËÖ.ó‚ù“°Z,k[úØÙ¡éB›Wòsm^9“òƒ'l"Ô  ¢Æî=‡ïsJ,_P³…'½Põ\AÖ§Yž—U»dl‡—kbG 5w…šF[d¡Ò½X00ŽJŸ9}³ÁókR³ÓòÔ¬úÊó¶©™Ù| 1w…˜ÊXƵòQH©PL‡`S‰À\ЉºÄ¬Å³<1«v²Ü1 jî 5 ×Q* x,|3ðËYD" )„¦&5k1-Oͪ-ý·IMÒPs©‰À 3EàÜ#®w/ ‹€a \)JkR³ÓŠÃyù·Í¶IMÜPs©I´ÀL`ƒJHJÉ¥´Œ0 ºTÕu‚j1-Oͪàݧz–Ï~ºšc0‹§Ãñ‡—G÷³éÑh¢ÄèHÇG³ñíÝ{/>彸úø?á½PÞGñïîÌ@MnoïÇÃøË?Ä¿'Ùîúâ`2Ô.͘ßÂÝ3Á¸ð–µÖÀ“A¿Î¶Èiîû;@Þ¸WçÉ”;ÌT˜ù`>ß’Õ °p˜–£Ñä8z£Ñì¥[i´<Ê8áàS°b‘NÏ¥}ÜÇðç%ü™÷>ËÉñu£‰´œYpôXpŽ¡0×£™Š»gnp_g-xŽÞÈã¹6޵« nÊ­G¶PÇðÎ"‹ö Ùu1¥õÈÖêøþeÙ‡Q„]…uC±uÝ{£õÈÖª a+^»=D–î²ë^oаu€:~„7’Göªsº É‹ãp\ãd¨Ka«…Âñ#œ› ão2Mþö·=´C%\Ï=w—;צÜïn:ù8ÔˆoD ÿ¨Ä–ÃñOMÆzè.š¸‹nMüÛj{ µvÞgmz·À è], ®6!'Ý©9VãIõ^½÷úoÚÞÉÕÛ÷ÝÎë7}ïÍÕùi»ÛóZ—§{Ùïv^]÷¯º½ƒ·zpå¿“­Ë÷^ûÏ·Ýv¯ç]u½ÎÅÛóTµw[—ýN»÷Üë\žœ_Ÿv._?÷ ïòªïw.:ýöéAÿêyrÓ‡—yWgÞE»{ò[¯:çþûä~gþ¥»×ܬå½muû“ëóV÷àíu÷íU¯í¹nvz'ç­ÎEûôîwôÚ´/û^ïMëü<¹a·ý2’&ç»æ½jœwZ¯ÎÛé  s§nû¤ïz±L`Ьóç^ïmû¤ãí?ÛЇV÷ýs¨óêìµÿï ÁIï´uÑz ]úe3žCDqrÝm_¸¦^ô®_õúþu¿í½¾º:MÛkwÿ€«÷»w~ÕK@ºîµA}µú-wcW §!ýêº×qXt.ûín÷úm¿suù+ˆõ ýnÁ¥§ ¨W—IW˜«î{W©Ã Áü¹÷îMòA²— R-A;éç‹ÁýÀ~®Þeûõy`>i»³W®–w^û׃V·Ós:émßµàž×®Ë‰h Ui2GÔ牽Ι×:ý£ãš>‘÷:= «w}ò&ƒûð`“þ/Žÿ­ñì“GQ~ñœë}´1Æ òœ±Mã’"âð8`ügƒñŸmçöå¿øø_.ÿtSqw³i‘^2_’ymë¶)µÿ0›/'ÿ?C”7öß÷ø=Øÿ#ý(½I„!¢ð8ú¾¢î3ï!³Ü}eát†ÆºÙO+üÉïnã8”ÆÜâA<ŒGé¼®4•f'É[<¸I¾’ÁðœÜ³£D<Ÿù¸š—]Íÿvm¹xpcœÍ•Ô”%ÓøjšÆœÝ|~<ø4ÔñMR>M%Ùi2ñ™s¹ñ`6Syp›<ó‡Iܱ ¸®žŽ¬§ÁL‰ ÑÜaR wœì6²r:Á`rÏV*IóVjJ3I¾¶\¹Âå£É‡Õ]Öj…i±u…âeÆÀ½ÇI¸š—Bõ àÚb…Æ€9‘äAæjçE×Ì*¸Z»¹v‹çËÚæ9 qŠÄóùn2Mé–%“YÚ]•ÏŽ÷w`ÔFC0¸“‹òÇiÌ~™ÿ”ˆ£O…JòÇI‘|Tñà|Me”Æ5k »À"°ÄE@&I°#¯8Š0¶ºÊA};[s;£Hi`³–„ ¡nÜ&a¤œøÆqŵ1!–Uópv‚{ok–F6kI8O Kģ®Ýœ2eŒÅKƒSÜDU‹ Ä O›xUÙ¬%á<%|`åfâHͤo‘›¦¢ïKŽ¡¢½Ðûok’ÒÈf-ô„ÖVqÅ|†‚A ásÉùZøU¶&2®t_AR!üÏXȘ Lûƺƒ”F6‰ß: [3ãBºøÄ›™éýÔ­©š^±”ØQäi”( oÖ’pAK¸¯/¨‚Âõ¥Ï5ÕÐA©Rí%þ&gix³–Œ ÑŠ@Qk ­ÛCXb« CÈ$dåËÒ(’QÄ( qh5—! ±¥0T)ßÀË ?äì¬õªy™¾jrÊɇûÙÓGi³–È ŠÃ×2Ð+©"è BÙhÆ9x¸ß”#ʱ¤4ÈYKÂyJàPƒ+q¤¡û¤3\i‰Cª\eû@‰½·8Kƒœµ$\˜«'¨"Jò@à@(Z`”38ÒÖ‡žì%v`yÚZÂÒ g- –ŽD’r#Ð%¸.ô.p®­2"Ü -±ÿ'- rÖ’qaâ„¥‘E:BJ3A…>§ÄjË#ƒªV˜J½µ!s­ cÌm¼ù”º^¨rR°€¼rz¯±8Óé›÷·Þt:3±Û”oú—Ñ[0>ii¸³–ô /Jœ¥*à8š!LŒ¥ÄBëW.6|]ãs;ÃJi¸³–„ þþö®îÇqÜÈÏëå¯ðK‚»‡éá÷GÒ ÙÙ`óìáòp8?§鯸ݻ³ÀþñW”d›rÛ"ÝötZy·ÇEÑTÕOdU±Šü/¸I4õAYÃL9…¢:Hœ»ðI‡Í5î9øzÉǘ(Ê‘‰T š6ÚæˆE-L,ÆŽ#˜OŽƒÄ ¹³ŠÃ=}DSPX¨åVʰÖª¤2žY‰piQdø„Ïá0õ 癆›$"½¤¨ºÑu…]—Gžr)jehÊ)d8Z·bV—§cifo·þß”qÄÌÓn?ÿ×Kž’mkÈÏÖ8yº½ër—d0jP³¾ÒÖm{ßö¶j—Ÿ_óº…ý_òº¥Aòº¥=#zíöȴεRÏ–œÎæ-ôÌI£˜%œ!d¨ @'-1ól/¦}<]Åп"_KAõ9MKáÖyÝR n^·¡Ùãk!po/_ËlÚâ+TWÐuË5ÓD0’Zàœ(xó1PI–ÞÏ.HíyY ZëѼÍ”×-…¹äuKñyÝ’[ü^^V±¦÷Žº€ b‚©´8eL´,ÒæYQJ­TàåcpO‹ðŠœ,ùçäT,9näuK+úyÝÒRo¯Ý àþ·²†19'%ÒèªÐ†ñ(½I‰1›ea̸*p²uæEN–œûs*–¼¾{cqÁ¸ÇÉ‚Ÿh^·ä>¸—“UŒÉ9 *7ÀhˆÓ0ÛJÎ"öì`øN66£Wddi³÷:V¶òº¥%ÞäW°…÷„¥‚‰t/#«øÒc$1Êc¥a :ÃøcTzî A‚ 2rñêŒ,{oCÁJÔczÁ|ЛQ zeéuc?#+øÒ¥8Ì3¶¨,oÑÞA7Ϥ‘NÁMN²t Ä*O`ô‡Æ·?uÐŽî~½vS”6CÞäUlŽ^²—û¦‰&Sc›Þq­x¶¹µ“ŠÃôé â jL ŽÀó€K—äq}k×ËŤ³ÔÏîp}ÁÏSf³îRwÒ\\ŸÑ&ÕYïÚržvÎÿ©Ûu½=l.tÇÍöÞYqó£¨×åJü5«[J$˜×-eÙËë–RÐåuKÚ‘VÙ€×wöÖžÖuÆ”•Ý`Þ0´MдAÛ³ÂnhÚ.αÏoj{}w}ût»Âê¼­“—thèWèn2_útçY#]ɪ‘^…þs­,>ÛÏÛ·íºÂúÏÚ¿¡íÙU0‹%hòËu_7%›ÞnÊÄê%Ø®Öõ­}ãš©½>o•g}ÞºÒB£MÆ Ã– tD…"®1dŽ`’ „Ö{É{M¯FÉz„å,EkŸ’tBåXP)"f"¤´kŠ-!Qa™b0$šP‰Ê*å¨,ízRTþøýMˆ "]pÔSD=GKÏ@¾å`Ä@´€¨JDV¬7uöP;‘Ï,°{йÙÄtBè8ÊA½åWYuSª4˜yä’u ö´3`ÝL^¸¡¥À„SŽ™­ùqÂäX0‰`ö¦0c ”–: º>Oêq´ÄÌJLVA,Çd)>û”˜\íŠ2ar$˜4ZY‡m4ŒJa4·”²À@"ŒŸZÙ² b9&Kî´§Ä䤄 ’1F”´m¬4õV¯aÄ´ 19 LVB²a¹;Fj´m¥±£µóo¡»Xr¯­Õï ÈR%­5BP…„ÝßÝ&¹Û:a\îúòܦíéºW«>âº>*™çÎDÅŒØë»w·ŸÃröþ'âfïüéŸföÞÍ~w³üCº2w÷··)á/¿û¼üCSœLñë“ûkŸŽ»¥…ÕO¤ßl¸Ù3ÔVÉðû‡/0./]J¥Ú;mk˜”Ú~~÷ts“R}æg-]—Wu}Ü^küþi _ákEŠ®d:º_Ý,[|8ˆl[t.Ù—ºÞï´!ކ¶›!h¿-t7=«Èsy€ud=ë×Èi¹±àí¦cY.MŸÓq¥}Œ›’=j7-«Hsy€îùœ–+ë¸iÙ³‘ì¡e i.PŸÓ²Ó@ÆMÊ\ÚMÉ*ÂôFÊÂzÛ6%ç@ÉE%«sy€’SòÊÒÁ>2~e"^­~˜×wZ¦v‰XE“ËÔ¤œˆÿÛ_ÿsöÝJâý‘²/vKÐíÖH[E©Ë´»œ´?þåÓ¿ˆžÇRðþÚO5T¸ü°V‡V÷Öj€—øølÆOæúæ—Ù¿ó”]üifü),Ìçð™®øî›ð8Æ-ïÑhã[e©ZrSzl2‰7©hqÿócg=JGây}ÌÝG%Xº°>O]ìüxð¯)ž(®½zV¡6µ—Ó¢äô¡Å‡ðD ŠNE ñŒr75bê…ä¨x¾œ%7­ 9þz·¼Jô ³îŸG£ÙWn‹’ï¢R½Ï—“£ä‰¶!Çÿ³HÔÀ³Oæ—㉡Ôsjh¹‹”"xó{9*ž/'GÉÙnCމ–_mäà»ßÌ^ŠŠ§»< ÜpCŒ¿¥˜Â›ìÉ»8Äpøñ·ê‚ÜÄÙo×á‰Mñf„¯ü1x®äÜùñÝÈ?O­ò}ó4¶l”í3¶ëÀ‡›4ßwwÌýÝãüýÜ´wÌí/ÍêÆÅ—Û›g¿‘–cÍ7|Ò7„¨;'œòæ $i Aï`–e¿›¡W!ÀãÒ,f³w‹ûûåP½ŸAЋ×èÑ«~.[ÿÛä->y‹OÞâ“·ø8ª'oñ •o•“·ø„È·…ÈÉ[|BèÛFèä->aò­aròŸ0ùæ09y‹O|[œ¼Å'oñÉ[üãä->y‹o;ìMÞâ“·ø›¥åä->y‹¿9ZNÞâ“·ø£ää->y‹OÞâ“·øä->y‹OÞâ“·øä-þ¦¼ÅÏÅ#ûu?}ÿï®—÷Ÿævvg‹ð(I¼úpÜo$/oÉùÿï¶låÿ Ü;¸J{7ã§yÄáÏ7îÿ]ÇÿrÀÕêÎù}œ7wÎÓM<À°ÿ?%ãw@“\ÿ)åMþÿ¯ñÙíÿ¯-²JEe@- D*Ï—œ$QÇ#ÂÜf.é¯ZìÁÏ©ãŠ?3Uð’FÐÆ#6’ M¸ÃP ©UAÅþrÕð†ãtL+Í©ãZà`Y8Dà.tÀ!¹Nîxœ+“B¯§oÙA AX—ƒ‘ÊbÃÄ„¬³0ˆÕTA«çªEÁ:a,b\{ëMÊÊ!š4vÇèü AWB± Yýxf ?ÉQJÔë¶A!p PÑÁNEŽÉí„ÆÑ QÅÀÂP&œFY%J'aÂVÕqÌàÊÑ(u ºw) ?z—²cTÁ€y)ã©Ð(ØÆñ€Ñ!^1dlôÁyb(-^À„ ’^%«°Õ³6¢y£Ù0% Ž§)Ùl²k§¥å'#ábBãˆÐH`J1J̱aQ“îT…Z4V+G# ƒªƒ¶Ë ‚F–GµÇFÚ“ÉŒDMh%¨+iåœ$ic8(i¦…²Õ*×€ëxžp*9æ9P´È:ƒ2ðÂê[ˆÀCQ¹Ô}À+Ì:ž€ðL%ѧ*J°>ºwÑm)š­‹SÛP6Œh¿–ßÞºö¢¾¨*GLÉù{åjqy€È”SîÛŽ9ª¢ÔåzANÚo%&®Š&—(.9Ï8p«† —˜{bk9혾÷E³V£ˆYX)èQ¯[-ùòU¬=Ñ–5ä¸<ÀœØWLZSñhé—›º÷ெ—ÀúâLkÜ-ýrãì>A»LŽ}a«–•)lu [ÂV§°Õ)lu¼a«‡ÄÿÁ…‡«ÆÿaÊHÿ'›ø¿tyŠÿ{…ϳø?ÔXC•‘GÅ='ÐݵAy"l@GÄÿ5j%•%dyÓ.µGmqsxL`ÞØüú†ˆyL9Á–«Öí²¦êv!Œ;ë-çWáúóU»þÛ¶rh{Œ yùrþóµ_^5õÛ£¦¸=lFœ¬t9¼¹¹ð¶“óÓ¦BvždÔíË˹yZÞÏé(›6²ó&Æpër~Ãüþaù¸ÕH[¶ÕR[HòÖ²z½Ûoî?o·˜Š¶l«íª´ÜÌ“í©íàvYKªgwVëufqý¹ɳÂí>®ªî®Ø5ð`¼OëxëW›ÖV%kvôª,ç cÜ/Z¸u‡Í…î8Ý•/çOa1¿¹¾½noÊÏÓª9›œð÷¬Æhôs¯‘ü¼©’@Ï®/çÖ<†lm8;m*dçÐ hb»Â²aRÖBvÚ>G~yûbW=‘æ.Ü=kf«|ÓÞ³öV‡“°X^ãç7Ɔ›v¼_ÔTÜ*ûçSX\‡ÇÙ‡Ùcp÷wþòÃó›.?¬Êgѯ¸¢½ZZõ)ÄA2Ò–Dް¡+…Ó<þ£MÒø•d˜ü¼­âîoîÝåõñJ}¸2ÿüç¤Ê¦£¶´“6 äý‚U«w÷7× Âà=Ow®9hoر»Ù‡¸êQwØ^xîT°Nï¸öh¨Êà¸Nÿ¸ñc_–ÝXÿq{C×]Ÿïž¿_ƒ@º>þãOŸ7åæËïæYËío]™…!iù´¸k^àü¼­ñ&w.4Bêê8SðAŽ$T»¼º=³Aq˜ÎmÐ+!¬—fj>Æh߉ï_2y† û.-éÍÒšÞsp•@32™*äq «à ØR'A¡³Úà M0Q *ôW…̈$}(ZØÛGËQˆ Cˆ¨bpŽ#æB9‡9õRËÈx䜴ў"È™#‚ !¢ŠÁ9"&¤¨V°ˆ$¨Žx6iøÊÓÊ+!b3ÊQˆàCˆ¨bpŽ«µ˜l$ÁS)'Š2…lÑs@?" §ÂD‹{*‹ 6íä‹´Ñ2ì1<Œˆ4(@ˆ¶€‰RÈNðIü0Ôhv ÚçìýLˆæè¨¡Cê(5\Ïa5AdS-=ណ:”Ò`M„Fœ}]˜Lç)&5„ˆ*÷´Ö@œUf 5¶8íXOœV‘Éây âÜN=¨”Ö08G÷ž" %9ÏCPŠYB@H5‘rrˆÁ,r"R2×ý¨âp Iò(½ÅjÈáií]G!$%t8‰Ú;«xÜ›9’«¬ðžH¥‘‚PìitR[Ï 7¥q¢ 9 ú õ§Iäì°ÐIš sbŠ:ñ°™³†ñ=©“ $h/œ"x¸Q:=¢Þ8Ð=ùWEÊ$užfF´sVq¸ i˜eGOLDAØ ¢ÊIœ\!Šúê( qîb'4tVq8‡ƒgpHi¥4H¬Vx+¢ É›a%P<HŒ`*9ƒ–Î*÷F ¸À2åÓ„I%½ÓöZXøäÎASg{ "A2á‘¥VÑ´††jm¬5,ø’4QÚfœ#¤?Mrg‡…•´ ‚'ä‚ç ¹³Šó9T(Oû¦áÍçêPA-á$ƒ )ÇAeõÓÃÃNò“AeÚ¨^â”ÍUZ¡J"ç( 1‚Yä8H :«8ÜÛú㬊äžöØjP‰ÅŲ’í{øDÎACgû.àžC9¥Tí¼àšƒÁ‘š—@l’r•æ (b¹ˆb%Lã‰áûö®­Ç;û5ùzÙÅ.»y¿ì fÖÌ>Ìl‚IA ðj énõJjÛÌÏaUIb©¥"eÉ=[=fÜ,«ŠuÎW<ò ƒâ;ŽßÑ/CÆKT9I§r²óUÎA/gÏ÷V,k`ˆQ Å´FͯF$² 4*Í­Ÿ’«Êya2èå¬âpoÖŒ ¡±1Vèà5CÊ"‰4ö9 šjin}xñ*ç —³ŠÃ½93¢9ƒ…—‘Âv$‹ZYSr|#"çm¤5èå¬âpO»c…™”]ÀLä ¦´1Ã¥ÐïQ@â嫜lÐËYÅã U¼4!¼MS­6¤°>¸PV^ˆj’…02P#ÑÚ e@©1Š *çw¨Ùž÷ªr6X`Ê©ÎV9Ù —³Šç½%gThMÚV‡ëÁØÕ*8™áŒ¸ðUArU9/#L½œUî)ý†µø "¤Š¥íú¼ñ̹R0ø( ñÒUN6èå¬âp‰ '”®¸7,°”Â)‚kYÉ0$F E΃Ġ—³ŠÃ9$¤rÔY©ÁX!ï1\Ÿ|L)Äm|‚ã7 rz9«xÜ'Œ¡[àªÒç@mM[b9†ƒ¨dš¦Ì¹Ìê¸8X$1xéwHƲÊyÝ«s‹…FÕü—ó†ŒA÷f³ûèà1mèé"öE¸£„’&->–æÊÎCÇU×¼ŒtoVq¸·á3 LÅ8tÞ¡´¨ÔQã‘rœ¦„»¥ ‹Q@âÅ뚃îÍ*÷F é\ L ¬‚Ñ8ï¢1•ÒêÝ‹€ÄÄÇy»Âº7«8Ü›QOÙi,Q!ðÄÑȵ þCÈBÅ}qƉ—¯kòA÷f §7Û¬VmÞã<ÁÒÍlŠ ‡4ïªuLó¬Ì²ÆAµ[¦ëT—Sxm&?-—.Lþû«ÿéåuÎÒ«çG[„<ÞÝ·I”s5xÙžiÛ¶ýnûY¥<ýÒk;,Uó¶¥á¶wßÂw˜·-±'cÍ6#t=CrŠhd„îsi"cð¾.m<Äcì¨:ÎAõœ ,yZsâ•\pyÛ’o¦ÇÀ‚Ñž·-ÙrGXÅœ˜8ƒP0ˆSl€KhŒVzè'4ߦu9ô >'KkÐrâ•'åmK«Vò¶¥å ½¶…(÷£ ¬âGÎ@%§Vak tC…”>ÅX@­ŠÓ8ð’çd`)¢;'^)Ô7o[ŠíÝ·ØB 1cGXÅœT{ø££†kOŠŽÎyxév;— dÏÉÀR|TN¼RàLÞ¶Q‘·-Mµ÷F ìQVñ#g ‹ Æqea(çÞ.D‚8ÑLn%—ÇÈ1¹{N–öé},…Ezm ;Nô°QØŠ ‡Â õ£<¬bIOÑ  âÞ(!aÐ'brD ƒ0@<+K›Oö¾—®„=IXØ®®ÿ}ïcÖëCa{«ãªL Krz1dT†Î8ŒÂìà|³$é?ˆ ¨2D=ïwXع¾Ç—–潶…½®{ãcaä>6†÷Æ=ÊÃ*–ä<Ô4ÿ2saÈ) Ú(Q ºÝ|û{V–R^õÈWH†´':ÓäämKùSz i!­ÆQVq¤§Ï†)¢8Í2§“ ú²ÔLæ¹;ÊÂõbmng÷w3—Òæ¦¬¹Ï*‡“æö”ÃB:Õžl,$Ú왞…Œ=ßA!5ßqý¦‚?pñÆc³¹¶E‚Ï™C¯àƒ)†@x§±…) J×vPÀ v@ˆ(ß?» ;ñì+ú•G  7j˜ò÷vñxï'ï~üiòzòý|µ^¼_š»É"N–ááöçÉz~v`˜úîÅÖ-OSZö-sÛ;þòa±ZÏ2ü7>ñ1ð謡ÅÎ9G»!€ÁÎŒ ö¤áË3&JËAEøì]Úõv¹4é(õ·+nOøÙjºSÝAsr{DSŒ^ÿÜzfÜzþ±¥@WlNtåäåË«›‡î ygæOF|âœ# Z.èÍ:Xd¢ßx&Ú¶Èk@dÕ*¹/¤BR3ª©´” 0ºtÞVDG@P©hÁO·ÝÞÀFbiøÉÛ†4xÚ(æ$yU8¨Ý™%Ló·˜C,˜W”y^ì¹*ªcxšˆ´yÍ̾óBî>ˆÎßê¬a説v¨{RÙ UûÕÉcÙaâië–ãwóûùÝãÝ›ã¶M^ÓÁ ß »È|îߤ;ÎnÒÕlnÒkС;|ÿEûnòCgXÿ]û´=ûÌrmCëªÞ«ÙõvW'6èßoÖõ­ýÔâ<Üú^Ÿ÷ê³>ïi1!ÿ›„%|9©®ˆ#G*<ö^XÐ++¡X…¬Š¥ÈØ AQ]¡8(:/­0r8µ`¶(˜5`á¨hÒÊþ*(V!+‡bi÷³KÙ1W(ŽŠ<Ée¥Ä´õmš,vÇØü`AWB± Y9KÛ?_ŠÍôÙcA£Š1MsC™pBe}D”˜&¨W•h¬WŽÆRÚï ¡1M@\Á80:ä}š}V }pžØF‹ °››ªÀX…­ž·±’éR¶K𕾢q4h$ ’EŒslXT”Çd{D#•F¡UàÊÑXÊL{)1ͯ_Ñ84J0W4ÒÊ9IÒÆp0<(ÒL e%â•h¬W$žnÚÞ¥™·EÕu×N%ÇÜ!†@ÁcPþeõxwõ6áø›R[ÿ4H¿íé¶W›>âº>¢¨\ê=Hà“¤N ñ6T"P}4ñ]Ó\Þ¡^¾ÁoèÑü›¦¡Àß0ø—¼Ño0‚âo0NÿC#ŒáÚ`öFK(B“ƒo‰{oIêÞ2*O‘ q'AÏÓ`þZ.t (·‘†i“/âiÔáfƒ½Ú™çé ³¹Íƒ¾h¢zóí§ wÃ@» b¶Z/ç÷ïßÞ<®–7· gnoìüþfu÷ð>¬'¯?7yý·7“×nòûÛõŸÓ™™[ÜÝ=ÞÏ×?ÿþýúÏMušéÞ,æ>•»üÍ#Ò3‚÷æ?«¼¸vîùlè~|â‡4•Ý 3;ìÆ°ð>|~€Qví>{‡m s{»ø4»¼½]½MKtvG,ÑÜÂ7ÀØ–Ûsí.×ðç-üÙ¼sW“Avona7¿s*!¦'8{”#c¦¦\!¦'øÈz”Sc¦œ*`®†Óžlž™îQ®‰9-év‡iWEŠÞ÷Z˜:ÍiwpŽ|¬¤<>áä{®!ÔôGc•#¦äÎý}„r5„˜ž 2å”ûéÇþuò—ø?FįL¾R èü¾@Ïý» ¶ŠRÓ삜´ßƒ • ¿Q?l9Ó}‰XE“é †KNÄ¿ýõݯD¿s鶘ûA²UQaz‚{±7 ¶žãщ™ãûˆ’SCŒœz¥™‚õºY Ñ’/ŸÅ:L¿*rLOp'ö “ÖU1”zJ -QƒRÄ)NÑò_@ŽŠ÷ËÉQZ²#G‚DKޝ6rðÃß f_ŠŠ·ëäWÕÎA;bü˜¶ºÍÞ¼ÛR(íôöwê ¹“ß­¶; 5Õ»¾òað^i ÒÛW×߯ñ{l§,^7L¸ù·Çðn.ýŒ´Š–ÏÑ£gýâSngˆa¼y¸M j×næïW³×³¿§vo>ßÝV=#1X0v„ÿ0bcò ˆ`R$þƤ|5A_ùÝ›ßoœÿÓvôý§þÚ\Ð0ÁJƒšG&‰õGœöj@¤ÝöДgƒŸK¯ÄÝ»éÀº[MÆ^O¨ÂJ„è#Õi{+†¬Ò1^×ÝŽeÝ­Tp•3ðTù$ãŽ0É¥08¼Mö}‰µŽËð÷™{\ÎÀ’¾†!å=ýGC2¾éÀ­÷ZKÊM[À¤Ðç¬6z½ g½ 8¤ƒBÞ©èX0ØÛ(çNF¡”DòBAq;`.Àþøt…åX`)´…qša@'^p˜ò’`h¤h ܬWƒ²–Wä9uFÀ¥ž§(–!Æ%Šú²kÃ,Ãg篨 *9„áÁÄ2 ÌnhÔ܃š ‚]yS‰Ê*å¨T,×L`£¨SFY"ÂÆ{„…¥Ú=c‡J`þ”ceÚVЂšŽc "Àˆ©aŒŒØÝ„CíªÜ*ŒõYxGeB‚à™6 ÏÁPQ3ÏÈ…ö*ØÒ||åX@©©2Ô0¶( ËH­bÒQ/¨#.Ö‚² cý½]q”Xy`9!“öû¶ )çøÅÕÊdï<®–W`Ž˜®Ù‹/Å1J r8 bdPÉ”GLêd^W³g—XvÕŽXÛìX)°•Hsи`&mØ9ÐÝç[v‘6SÄŒ#˜H:øf¹6ަ`‘Њ¾dÙ…ì–]¤58­»HÓZ Ù•»5Hõ×d\nFZŒ,0;n(fx/”40@9ŽR†¨‹òd`F…{qz‚[¯Ö9‚åuTÿME%VÑdzÂwñåF%VQaz‚ë"'ÛÿÔXœ;ÚS´Š@Ó„`NÑßvøv¥¦'x4ƒµõZ«™÷íÈJƒòLOp§¦çvÖdü$íO¦j‘¦'(íÇ©ÚØf/ƒª;3óˆ|¯!Òôý0U7Ìø)ºó&¦fq¦'¸áS³ñ´ŽŸš;‡ñ‘eEÄ9Ü\aµ\ƒ›¯ÁÍ×àækpó5¸ùŒàækñ9¿ãñŸ]ÒÛ €ÇJÆDÿ)QŠÿR\ã?Ÿã÷$þ³Í5ãJÂÙú„°:¤}ÒšÂà$·úè–7û×C­Zµž­çëÛփܖÚê¦Xš_:›ßÁèÕe1Þ̰ì×µŽò½Ê”¡ñP»õìC˜¿ÿÐNuÅVanËM.¤¼~=û4÷ëMû¶ÔT·Åf0Ìj׳Õí4×»N‹Í›ÙqÒ¢÷O¯gæq½˜­œéè˜6 ²ã&Ætït~Álñ°^íݤ­Û»S[Iò»eíz—ß.Þïß1Uíß°mv¨ÑzW1KN£¶ƒûu-©ž4<جיåü}’'•û}Ü4=ܰ»Áƒñ>9ô·wÜTìî¶©Ù²£×d=+h±láÖ›]9]•W¯ga9»ßÍÛ‹òãn ±]Nø{Òb 4úÔ»I~Ü4É+àOίgÖ¬B6%”6 ²ã”|z³ß`Ý0)»CvؾG~zÿd×<‘æ>Ü?¹Í^ýî~O.8ÚÂr=ÆÏn ·íÄW¿ªi¸Wrq9«ÉÍdÜâÞOož^Ôå“oŠûÑÏmuÁÕK¢ÁZŒ¡ ™ò¡ I £º—ë>©WùqÛd›ï5yÎÚòÆàNï¿û.Û©ÔÖöSÝ㮯{ÓåÇÓÛãô˜c'»‹»„÷©G]±=ñt.q»âl;‘Yµ¨l»"m7}™e»ŸTþþò¸üÓ¦ úò¶üÍÇ÷ÛòäóùO@øìöí?˜¥Ÿ-Ãúqyß|ÅùqÛb+÷.4Jô¦œ9 N@BÏ”óÊYK%µQ¦SÚUë%W*Õ‚Î +¡ï¾C_†4ö‘Ö™W“ÕüÿBÚ°Qš'‹ûÉü~£B 7ƒ¨!C¨©A5R;áHLÙG5Õ‹èA3+E0èë¢æ‹£O ûÇÌYˆ ƒˆ¨apŽb´GV**ˆ'™à¢4Šp,fÀÛ—€òÂÁ†QÅà4pcU ž¤ ŒSŠb¸ Y„¹£Š¿DŒ@¨œ…>„ˆ*çˆH`I9(%B2Í…Aª”×+"ÐvsØQ#‚ŽýS a¢ŠÅ=L¤]¨g–+-MäBR£T@Î….ÉR4IÿLèUÿì ÆÉžîù‡ùý„Oîæ÷ î½V2H""÷Îg9Aœ+"© â “tlxùÚ'tVñ¸ç9±# 5ŽHÃAW{b½§Ø`BU¥u÷àHÎÏ«ûs‹…ïlXvÊg3+’’ —–öž3Œ º>«Ðsk¨šæu)«9h®Rƒ8â‚YpI²œ‡˜«öyÉ2èû¬âpÏ Œk쳆 ä°BÄ™ £·LIJ’exéê't~Vq8‡b¸ç}ôN[MI!¼ÌxP@ƒPâ%@b"åpemJ4QÇÜÓZ³ùùXæçdô³ ã*rá˜ÒÈæÐÖH$X†f‡‘4Dà:Ê–›Ú'm;«ùëÙü¬ÌOµXÄóÕpµŒ‹ÝºÉ°gð%S¬ <GðaÇ»4Þ „[²6RAh«ûØ)³Ýù8#Êdس áÊÈ¿&Ô_á4'Ñš+Ç÷‚owN†=».)A£—È MDb<:.‚°\+èF|k6m/(±CÉnÛ'Þ]×KÃMAò u²„—ƒ–èÈá|HA%ßîä“aÏŒK‘úQì¯Ó¶#Ö„TÁ1nqÊ o ZŽ;˜Ü(M½ ¿Œ©†¿Wú€ÿ¨t ‰lƒòÓ5U®ÎÎ72ƒ“Fâ\³.[¤ü#];gþ·(ÛÚSQ–m­¶/˶–a—e[«s Œ®¥û‘)¡tÜr–„ Zé‘ãÍ– º%@´ÊQßùÁl-D-²µB±¾±t­,ÛZÓT–m-uyÌ.lJ0±³.â œäÈ`ØP¿ÒF耷ßf@~F,[«:*|ÓýeÙÖ½Mh™+ì°€Rñ¦ÞѤ‘¤ʈösÂÙ˜ð*›²5R=ÅyÕs6b§¥!µáìB§„›F Ü8^(¤Ih]ÂNBõ³Qï~F8[q¤²)[† ¢†çY–m¹$µe5m©>g:ëRXzs3MqÆ9—÷œË{Îå=ç¶»¹ÒO9·ÝœË{¦å'HË9—÷ÌÊO•s.ï™”Ÿ)ç\Þ3)?9Rι¼gb~’ÄœsyϹ¼ç\Þs.ï±Õç\Þs.ï9—÷œËû±›sÎå½\syϹ¼÷¦Uç\ÞÙ¢s.ïÇlÍ9—÷œË{Îå=çòžsyïo.ïíhÖµCå¦1~ÌÛP Óu»ã%ïQùËÍ;M××;ZÆÃ7=|çÉ3ÏxÿÛ¿‡ówqy´úu2öï|åe‹çÿ&Tr²Éÿ; ö ×Ý'‹‹Óa‰cñ¶ò³xv4šãGK·øç’>Æáã rh|êr9B‰u]ea¬“$¹Hù‡™%ÙOÈ” ƒûm{¢í¯/mDl¬dóõ¿-‡Ë“0¤ÅÅÙ½m°¹£{ˆ±.µÅnùõðW$ÖrálKÆó/ï‡õµ]-s"× ^zDØž/‡ïÏOV'xG‹xa‡ªÿïçº÷U÷ÿ- =ü Ém…üüóW;œ#wòZʇúÿñvÿDsŠÿÃrT Âÿ0ÈG»Ë‰×gÞÿwã?8Wøo o¹Ü‡üzvúÐ9¦ÆJX^yƒ¿Âñ !çñÿ9^߬Ú/®Mo6Zê”(E †JeÞƒ¤©BEsÿ,mi¯÷»o{×r‹u”icGçSÏÞȤCÐy©—«÷GzF¸1Fa£s)¡Oͬ֊p ¶*«©rÊIÚà• ­9$K|’.ÇÍ|UV§“LFÉ4…‰ N„q!_mÖKÒZbÑ>e,‰`5A‚b†€5Te“¦%^¤7*HE…â,PŒOQêzëPkϵhÀu#¾Ø¾6ræÙ„»¶o<š^ ¿ù¸Ü ùðëóåG´Pò˜Cy·I°ŽÃaŸq²:]/9X¿[ßvlºs’²’ã“3œ7ZÛÅ9·EoÌ»'ï+·:~OÞ½_¯Ú¼]ÇZ×ïiÖò-¯Ž?ž„Õû±üúÝxxývô£‹£«ãåéÅe<>Û@ËcâsÀÞþzu W«‹ã¥‡M‹ÇÅçq{Ò­¯Ë_\®–·*Y»UÓú +k+ÊU??½xw»Æ|èv…ëb÷ZÝ8Îóë ¼}lÝTw Þ[¬º˜ÅÉ» Iî¼}Û¢÷ÜTp‰.H^ r]ãöÀMmÛ#×pTEVÇñ×ˋŚn›·ã›÷ùWåáÕñÕåe\Ÿžœ¬T~~±Žáß ™wJ¬°>V•”ŸÇ"å¬âÎ÷«c‡ön±š¨ø8(>geo¾º]`5‚TÔP|\ßGùõí/7ÅsÓœÇó;ÕÜ:~Sß7Tøå»ŸÿööÕ÷ÿµS—1©üÝ…v•o;[¤:áà O‚r@ï† b%õ1Ð'¦Çlh>Æ 2)üÝpÉ y•‡@UëB¡_ËСe„ºC Ä¡›t2¬Ù…p°àh…pÅ#KZxaœM*)®,ƒhEj±ö‚{0€ìF‰É¸fÂUvÃÈõœ*̓Æ7•ˆf"LH¦ã!Pâ3°6§³ö`\å¬K8¸€2‚幼ȔU(‹ÌH¤HNãÉ›, yU ð˜Ay𔽿¯ålmn¸p~‘—>îÖeLÆ5»À®ØÁ€fñ‹ä‘ŽƒÃáu^;Ú‘˜j'v̶æãŒ"Ó {®BÝ8šœ±ÐLD,Ò^‡˜/5Ó¡î%ÞÖœŒlv!\R"1¯¥<_·æÒǘ•Ò\$Dzm+b±”؃ác·…W“‘Í.„댆Šú¼ÇéD"y>šŠB8M±¢ƒè%ßÖdŒ†WýDÉk/…¤¹ƒ!í¬3R-[“€³ñ—YäÄü+¥‘˜ "&o‘M&^}kf[sÃ…õæ“aW‹¸[Ï1Þì¼$ ö2ÎË`E ÉxBÎð8%Ò:Ç{R’Ì&çã &“áÍ.„«—lPQ¶ÆÍœrŽ 6iž¸ß˜MÎÇ¡Ädx³ áj(!!1(ê°1Ð(ÁÁ(¦HöickyÅ^PbF‘Ý(1ÞìB¸ê%€DÁQ…NèÀÞ óŒ#©ŸÉ9Þ츊V(ÏS’Ü`ÿ‚à MžÉ1Ç(’ \s²ÔZg­äÌP“‚v†š8U^@^6ü·o_½ž'Óo›œîâÝÕr·Žc2ÈÙyÕqˆàTÈiG½Å›â& ƒe RkôpŸ”#³Åù8cÉd³ á’Ôte­&ÞS0ïCF탣†û\Ù!Pâà-ÎÉ gÂÕZ=Èú´N+  ¼4 •ÍMBÎuþ´#Élq>Î^ÂÉ gÂÕÖ±è²ä¾”`_bÑuQxw*»¶>‚9ˆ^âð-N>äì¸Zøo©‹Ž,ñA‡Bs–BÒ6’ÖS‡Ø§dd^˜€Y™³jrcç)'™&…Tìuî÷f‹s½|óêlX,–qµÎ`ñÏ,·³ñÉ'Ã]èW%ÙRüMCÐD¡Ô9`B™$š› w£Ël|>ΰ2îìB¸òGh$øŸŠØˆ&³r£ á4¡­I‘½ Äg`|NoSïÀ¸L†9&©’öÙÑ×U}]™¤Ly3ð¤Œ7!ê¤hr¾ÊEõV0ü2¦ þ~~uv ÇYíçU2•BÖ0ë5Ÿ®yruv¾ÉeRÐhdÍõ7ë²ë«__m—ÊO¥¥ÙЩ´4Ê eÙ–fDUoCK èZ˲–Çœ×<8¼2¯ÁǤ ¸âØNVS©þòâŽÓC˜n÷Ð?#®­Mõ•>ic»uY¶µ·Ò'mìЬpmlÜ{×6L·pÅâ/ÝI+,S‚å¤d9í-ÅVÒ­çs³Ií±lmZ«Ú¼±›©,ÛÚæR–mí(˶–Å?ˆe4Õ3ê#"”0yr <´"ññ^ñ(± ,—Ñ_-â3"ÙZŸS) 7n”e[3ú•Âpcª·ª·1øðSÙL‰¤Ø4 /UY‚ÝxÒ¨2qœ¦Bš’ëÅüψdkqÙŠ­UßU_ÜX\!ÙX'Z–m-|É.`J$ÑåΙ‘´Íimµ‰M€zì¾TÉ1fôŒ@¶&0«Ç¡1³U–mMyTƒ_#^Kéƒ@váRÉÀxNƒ@×O øWpdF›rñì@¶‚ÕÓЈU 7ÂÕˆÚð++ÐîÆÃ@và²IyX*º¯YÙ–h/Ý[êùã©îQt¿I™ó4bîeý³Žû¬ã>6Õ¬ã>븪Ž;ú€Ñ£K¤\GŸHâ` N äý»Ég÷}ÔqŸœðì¢A%_c¥Cû¤Çn…o Ú‘e5ø$ZóãZr´ |2 š¨,3!Q´[Э™•4Íþ;'¶¶ýÁ˜p.gÇZ½_D;N“O Üôp Ú¤qÙÁEÛ/R%ÂèÙ \FXk;Ꭴ™gÉŸ\¶» àjøAÿÐi5C—ÖÒì-§^âÿxândž$rÙî.€KF0¡Ñ;”^Ê@5Sb@GÖ¸À-²(#ö`LÙ‰“³¡]Wë3ÎYMRR Ç•DEr*qmLL–‡C`ÄáO‘Onö肸ê%¼×àR° 8Jð~$±ÄImuž–jp"NŒb̹<é¹&†¥ÄGê“fšæ‘oùl~nÍÏÑÎÈÓÉvw¡]mü`\2PyY ‰x‹:2¯LÆ@›R&;Ñc64Ÿ^¶» àªÃ Øû+ëHžï¶À\ Ò&¹Èó¿¬)µŒ8tCsZ¶» áÊ® m‘„Ó€ÅU@?»K¤ÃZ÷‚{0|ìF‰é]=Wî¨"Rшæ¡T€À„¦€!F³–©¹”8|SsZ©» ãjot^°U,„"¬ ŠÄÀµ–èjœÎ‹7„‡<•Ž#• -šHd ªAŠ·oõ›yóùm[“>¡lwÜU§aå8!ŽJ%"Â:IkT¼é‹ìÆÙØ|Ùî.„kõ«È’tJ«@9h‘ ™ŠÅ¹gÎàPt”8xks2®Ù…p5ax½\„@ h0Ù•UÜXü…fÌ{”؃d7JL6»®|R͇pwÂÕ8¢¸;"`¼!™¬WÚÒHò†¶¦°æ>PâЭÍiáî.„«$1y}µ\Iƒ–Þ)c¬#,/^²¥i³”؃d7JLÆ6».)áhžO1Ž™VY Ääœ?ž1ôkbà8|ksZ¦» ã*¶™—jOHR‰+‡<ïñÂZJ}Ë+…œHÊ´oÑë&k®¢;E$‚ÞÒ¾2oyýj¶6kk“?¡fwÜÕDºõ\S©9³hž2£óúÐ áÁYÚZ±¹?fkó4»»®¦M9~CeÂN†`Ú›˜P$/ê3ž%ÞÚœŒmv!\épHÎÙ¤”–ÈÄ¢²Þk&hrÐJI¸”؃d7JLÆ6»®(¡…÷*“”5^H¬@z‰LÊ2Øç%>ks2¶Ù…qå‚€öÆåŒOÆý{WÛGn¤ÿŠþ@p,¾3Èïn‚;àöË!÷U(²X»BlËÆÙ,Å™‘Ý”­&‘‘´×ãñc¦‡Óšîçiò)²ø”#‘ÞÆhÚž7ʸ‘;àUÛZ^ es¥â,V§µgoG›†ZUô‹Úƒ~Ÿýí¥pÕµ t"‚\ºGùDîÁ‹Òå">Ÿg{úªøœB¸SÜÊ€‘3 y²õ ¸X rƒçÑ:ê&(qîâÓ­ŠÏ)„;¥Aà¬K å›VÙR¬òÁÖf²S0£½…› ÄÆ“Ó(±*>§î+• 1$rÙÆbCUÊŠ' b䯠fô쬩!•i,>/“Ÿ¸ð×÷¿àû(λúá­¨ÐÓ:Õ%ö)Ø»ñćœåsíRÀ˜@Um\3yÝï)xQž\TçóŒ'«KìSwEA¤­‰Ö*Ú%é¢A#ÅA± ç@‰³W«KìSw³à:"«Vz äâ¸#˜%¾õ.(£F› 7A‰ $§Qbu‰} ánGÛæy2æ„*1CPIS0­/j”ˆ³ J|ªsu‰} 㮟ȶ$‚¤ª)× .›&`¦‘êtd¬'U{6Í&D‰L,µ ÑèFªóOú¢:?qá?þüwZ‡±:¿9uW‘0“µÛ7CT˜ZÝMóy­™y4†œÆ‹Ò|ž1du~s áŽècú„@äd´AdúGrJãhëÐ&(qîJÓ¯ÎoN!ÜÊk‚@‹ÔÌ•¯X‰QÂþ,(±Áã4J¬ÎoN!¼¤„|I¸“´„²!d,£ô22üpd5ŠG7A‰óWš~u~s ãniÌäŠÀ²ÎÁ„,$+È¡f9ÉHi&å\‰™úê+sÎS­!èêêÀ–õÍ›7ß½‹Ò|Ø:ôýŸOë/V§4§îò.ªX´–K‰ZÌ gŨ<%yö_”¡ù¶oúø È]ûZ»ÝõÏõæ§Ÿ÷s€/Íá54£ÚåñÝõ/7´ûyßþðjøðÒµlÀÅÑÝõýÛÛõúÝ-nÇâí¾Áâ}›d|üñî?în¯ï oçâí¾Áâ}ûþã—_¸¾ý œéOr8öèL‡ƒzy¶E»îëooz|Ævèñ ;Öh÷ùÀõÇ÷7ÇøøØáV}Ñð«ÍºswóÓ‘$_|üš~½áñèæýâš|>ÛÑOptMv×õnït;¾Üp|ݾµ<¼»þøáC½»~{óîæð¥åû}“åhüû¢ÅNîÑ/ÝI–ï÷M–ä_|¾»Îx_¯æã»·û‹÷ šãã»=H‹3,Þ®cùñãÍÛ­y_ßqšGÇ?Ÿï‹/<Ù\ÞÔ»Ýýs}»?ù£Cû†Žå_wmÕ—-ë$‡9ýϽý2Ù²mõ,|Ó¢M$PÒ¢Þ[”.JÞó×VÔK¬éÀ.ó]ÍüûþãÝï^ÿxóþÓë7ÿéóqüÇïO-™±šò>ÂÞú%ªd’+ä);ôh¢„!YÄ«"Ñ£D¤*ñœ÷U— JÖ"0«²^gô–S¹Êµ—D¤‡D¤6qõn/XN3[7‚™@¼K` Æc–0/TbP%A±…ŸleŸœH‘KBÒ³F­f/μd„³,‡%œ0 }L©ÆšH-±‰³£]·›`Ĺç#­f¨Mü¨ŠJ–8Ñ“R¾P»„„mò¤Veô(ï}ŒØÀrÚî˜A•1À­Gë³"•SbéJ*X³Ÿ•BPêÈjŒø²‘V]=f ^r°Î2ØðX½f ÖØ\‹ËVÂÚ@£ÔæÈSÈÚƒsÚ*)´”« ¾ÖWŽùË}Ý]í žCr®nĽËnuª¨S“¤¯Q$,KÅ´•y@íÀ޼®O#ÊEr>Ëp²n/8pg/¨Šü—¼'°`ÚØB †™E¤„‘‘ñ&qî’sÝ]pàn •H'¨)V­EŠxã„9Ñ[pKúê„×Ö±qä´ZŽëî‚3w»o#©Ö‹ Æv)b’ Æ .m‚ç¯9a}ÿí Æ½¿`LZ®&hÍÊ‹1ru%邪·d‹XÑÌÁg*ÕÜ2…|5È+k-¶E\êf,¹ðc½oë°÷ϧ;aà;8}·Ó·˜ÀÔäd<ÂÄ$­ML%[Πë(B9‘,áù,ƒÊºÅà ÂòŒX3;‘ ¥¨Ô(ÃP¥°Oƒ@_F› Ä¹+OXíœB¸›ÇpÉe`sj ª”š8'oD¥Dò#± Jl`49«ÓSwËïÖ9…¾%Ï"„ÒfF#Y¨€5…³ Ä7 =Wç;§0 —–Dé[>¦Ò\rrPÀJ0Á†ýDhÛmŸ‘AöÉZàmÛf‘±¦A<"¿U¥.ÒóÁOnWïpw{wõî–>¾}í¹:é9~·ª¬hv¤(çÜvW8[”±1É…ŽæNcËE{>Ϩ²:ë9…p·¬šRÛncA‚ØÄjΞ§Ú:¬yão‚g¯=×+úÍ Üõ‹k9„Gm Äs1rG¹› Ä†“Óò³V§=§î|( ‰t6h1¸œªÖ2Ì+j²íUåðm‚ç¯=õê´çƽ ¾D1¾dÃy_Eú[• XM{§ êdeF´lä-+«b¨¡d7‘Øy)ßö‰ ÿ‹û÷Y|^ý­þz˜=­Yüœb@G™Tm°.µÔj[äëc“U=‘2ú,CËêäçÂÝ"k6ÆŒl—ˆ«gvm×*ŒY7A‰s zuòs áž1º„&UÍÑCúÑ,@¥ØÊ!œ%60¦œF‰ÕÉÏ)„»%V/ é SŒZ°pŽ5'¥E¬œ%¾ºžì9ñŒóœ—0Æ43 ÂÊÑÅf?ἄ9¸Ï³8þ¨/÷Œ¿ðF÷ùîo¯é‡4Ø/Ó™K vRôûÿ×s왳¬f_w[ËY¹O[ÏÍ@Ó:Äf) ‚ÕEe.ÂZù¤côZ^ÅR”pÛ1yÐůçHw¾b¹Ôùh ÆÑ¾ízÛÁ9xîž¶s˜A§·s`£kÌ”fbBí›AAÂiÒ«p뻻ûº{E0G‰Å}ã å´³\$#v`²Ô:B ’—V¬&°Y‚)cj-r:{K|ÔNã!]ÌøÙ¼9®—¼¦µÕ`Ť÷BZŸJïzÏÁkwÞÁä[gQ8˜“yÍ)p–hzlö0:I¿R“üøâ¥_ŽÂdíK(éi+ÁÏæ»CêÕ+Â9J¾ê|VY9½ÉÎzºFç€6XÇïLvË»OÂ9ƒÎS>+Æ)KŸ§r`'ƒ39éÚQFÿÔÜ–äwÆLõ°\ð5Ÿ•¿¹ßÝŠà}wuËû:®¿^ínÞ½åÊ“ìâ¾rq_Ùߪ‹ûÊVÜWÚ¯øVÜWŽVdWÿvu_%Ö§͈…¢OAb‹h2 ð¬uZ¨beŠ*~µÞÓňåXþ?ø°L‘ K HÜ”Oh!Lt2œç*’8zŸÇùƒ\UV5YIÀJ'8k÷®ÌìÃ:¿B ßû?þK$ gH²ï÷›šíö—äz9_–)tËþb%Q´M H¢kQÂPQ¯¼ñ£Y×Ó(sY®{y_–)€—ŒÀàÁù(¡¥3fÛ"$ {Bæá<ü&qî«u«‹uSwi醑Q‚Q²·¬‚„ŽE¡\›—hû…‡•ËbÝËû²LܾiÓLŠKͬ+™”ÓÑØ¨2{­FyA›`Äù¯Õ­.ÕMAÜ…,ÞälbP©Õd©@ ãÙÔ( ò[ ë‹åŠÅ3ì*ÔÕ;‰>¯~wåýþÕ˹²L¡Þ&­ŠhÓH»¶œdŠRÝÔ¤}Rn˜z|M.‚óÅ]Y¦î¢ÖªKŽ #r‚ r Ö¥ÕËÒÁòy0âÜçêö„)€»í ­Z—h4«B®Öm«±¤äÆé³`ÄF‘te™B¸Û@ºÚš%nɉ„9®¯{ŒÖ Gè7A‰óWœë®,Sw#G²ˆžH‡£^ Ã%¤LN»á6&ë- üš²Âêk+àÁB Ù®“Âü>~w‘œG.•¦hN0pºè\·d™¾SZ×$zqFÉÅÈCñ@ʉ=G^€§1å¢:_Á’e áÞ‘m¶˜4²ª>ר¢‰%@K…Æ«› Ä¹ËÎuK–)„—”°r EÅcÅš=eÏÞ„Vª ¢W£*› Ä†’´d™B¸ë%bu¤/Ù'2‡¨$˜Ù%Ÿé(ñ èÎÕ©Î)Œ»‘¬'•MŽ­X)«¨=š”0g´•FjBi\ÖªeøR ƒØrɃI%…ì^Ì’åuçƒÚ᩽~á¹:Ý9…|ïò%ЖV³¶&¤m•4k§«F…zÔœF•‹ð|?–)„û!¥SÂ(ád•9™L%F0dF{7A‰³ž«žS÷Sà¡æ –­%–ÎÄâPM1Y#ŽÌ76A‰ Œ%/èÇ2…p7pd‘"à½Í*¹5;”+)• "ŒÂÓMPâü…çºËÆ}‚§#e”'«Iod´É‰[a]Ìvh®a¬ `œÒQâ¶&¡÷ ÙVí; fÁƒS áùÀ…µ)ÂÓi{ºð\÷a™B¾KãK¹Xv2âDMUÆ,ágFtõ«äÏF•‹ð|–)„;JhPYiÀ $ˆa"v,ël"¡×9PâÜ…çºË½¹,74±m>VÜv'’`&’‹dRÙ…n‚K^Їe áÎ.´-¤€ó¹p.ŠZ¬†¨Ø¶gF±È&(ñ ÏÕÏ)Œ»h„2¨Uå±Öjp-*`h=Há\ª8ï¢7I×dšÆ !*“¹Lƒ—”rö"<\xP›m©ýêdÕ¹^soönb©Ú9®Þjé{„_¤B¬Iz¶f”‘qO.ªóyÆ“ÕéÎ)„»éÎŒ)Úæ ”·èƒÓì1 ±r2£Ý#› ÄÙ«Îõé΄ûj8¬B°Š*R[pS¦‘Á—a~ç&(±ä´M‡«ÓSw”0Ñf•ÁGåÐTë|K×Ôä[†—I£šY› Äù«N³žß9ƒq7tÔæƒTµ/Ö­ˆ´…zÞ›èAm3ƒDZnFõ¨DÉ-÷džĶÞ<Éø£¨NQëìWÇEö“%§YèœÂ¼›Õ²ÑgUÑE°ÒÄj²1Í“-Ðh…ý4’\$çó &ë3wV²-Õý®Åह ±j[JÑ/Ûo\$çóPbu¢s á®—ˆ)‰"i;ðì]Ys$7rþ+|´Ã±!܇b^F3Ò‹c-k—}éÀ9ì0‡¤È¦‡~¼ÕMh²‘°º‡UÓã]oVÕ—…ü2‘ÈŒÙg£˜Ššrã’öÊ`”s"1-rœHtC7©O(Íɛ̀‡Hï\ê-0TÁpñó}ÏB$¾ÊÙuta܆€G‘—Œ ¨6D%­3¢du´Šä Ë5Vx#^z0€85ÊM‘Ñ…¾Pü éGþç$c‰”“í(§8žrv½œC˜ïíX¶:ÁcJ–fE¬wÑJXIY‚­­'$gÊyeÒõr!ܬš ¥,uÎ+›¢Äx¢‰¥‘àKNî%ˆÄâ)g¿ÈÞÂÍš™JÙ€ž¡ÎÃÃh„Ä–°-²5ÞaŽïYˆÄ ´Èq‰´º^Î!„vÆŠp–2î™N.KN•06‚š%ÑóDbù”St½œC×BZ%j—’s)ú²ÔêS ëƒ UøFTW,œD¼îJkƒ2H3¤¡œ?)=ï™rN² v”ÓM9E×Ë9„y³å,ÉÞ•´:Òæ Æ®5)ˆ,œ,¤/*$gÊyeÒõr!ÜÌ.fç½\Aå€29‰’®/º(BÀ‚Ág!K§œ¢ëåB¸)«g‰dHˆ42:‘„+ejŒ‚kf˜ÎB$f Eމ~Y½„›z¬&ðàµ1ŒRCb¤p}ñmcˆôyŠã+ œ]/çÆÍ<á\©¨Ú¤ƒ+e„DI‰M1Ì4%: fÒ*š¼Hš¦œ¢ŽA¢3N9Ϲ:Ÿda¢šÿqÜ”ÑuoÝJ‡Ì%¡gÈ4z’I’3Î2˜´LÅŒ­•'g®y-Òuo!Ü$|fIØd„„›¤l* ÜEbB)+4d1 ‘X<×ìº7‡nf BâB+j’³49Ïb)×ÚÛ”Ã"Dbê㸬ð]÷æÂÍŠz©Nã™IID³h ü‡ï@ ¡yqæ Ëçš²ëÞÁx „3S¼”R-ë®Öæ²Î*¼˜¤ÙZ°ev7õ²å%U÷oX#OMWD«Ö}±é¶ù›r¢<ëOÒ”ÍNg¸}©]ž7$e]”™EJ?\„ûÒ¼%€˜§µ)Þ‰¸àšb£ˆo¦1ÚÛê¾}[îpÑÅyZ“å¹ó²·‹è®_ê[÷Åb@›q‘àÀf EbÆ8„G ·&þ¸†éÚâ…è8U*‹ÀŸÒ¹¼ xK±ø¨úåa3u_,¢¢©ÁŒ,µ7³²{À!ú}³úu7—SÿíÑÔ¼=”%b¯jݬî¯nnÓêóMܾ’êtêPçßþÏ›•{ØÜ¬îƒÛ½ÒêtêP—ë÷®/XÝÜ‚ð´ƒlÛöFÚ6²z´ª_sùÕͧýKÓþ€Ûn¯uÚ<7¬®×»ÜoÛ¾ª_íÖÜÌÝúÓNH^4îßãc××;î¸u1®¯«g~lxí±å ަËf•~»½¹ÛŠÛîpúaw\®ª›7«‡ÛÛt·ºZ^o/ªÏ§.u-ò÷¢ÇÞÑ¯Í õùÔ¥n€!^ü¾YywŸV~òætêPÓ)nu¿Ãf©¡:Ý>Gýóþ»îåÕ\§ëÃìµ?÷₃Ýá$ÝmÖüê LÙ«i𽦩ã^ÛÏ» ë›-ps ŠíåE»¥Œ­ÛýYTÎ{§¹Z &”® Š ZG" ×̦^?'_bÙ….p%îû÷ááîÛÇã¿®¯ŸŽßÿòé¹Ýýöí±Å.úÅ¿$ ÙKO¸ÎJD0 ‰³,y0`À¾;Ø„ðXba²•Hg)¢¤/ !1p)׌R¬Ô3)ÁBJÂÄ%ìßÊ,ðûÅ]º½r¿ÿûÄ\ŽKëÔÝb?|›­Å˜h9t~b@ƒs"2’š­åHI9‡ d \?5ËÀíÜA‚¤D«G`½”†@„µŠc™YÈŸO_$çt›Ë w}¦ú (g7R}÷&,YglJÒ &Šj¨, îš[´nÒ‘‚r¦œ§P'Ý@õ!€#DEGJÖù,UÈJ ÁJ)” ^%lgË,$b锳Ÿlxà&N=k‘¬Ö:P.@x’¥Ü §ƒvD s`ÌB"f GŽ+·×SAx/Y,¶« ÚrRCu$IªJP_„H,ŸsÒ®£sãfó‚uÔjîÁªõ„¥—:€HùBa¶wZ+ò@±Ì °HÏó6²]·‘X:é¤ýL#7ùzB \Ë2S‰çJ´£BFÊ¢ z "1ErœHt=C7¬Sƒ¹"d}C…JjY•ÆÂÿ…\‚H|¬³_Xmã&•,Ï:BdË„*<˜¶,«r±\  ›H¶ìPQ0A "©¡ÆñèR÷„²ïøwòÌ:Yç] wîé"¦ûõÝiØg×ã9#/ÀP)£%”’j˜+û£½ð»>Ï!„›YBqÉ‚¤dt°<{ËËöaf ó[fŸ…HÌ@¡œÕõy!Ü$ŠiÊI’ H#ƒÙÄÏ çAG›šzx"±|öɺ>Ï!Œ›-…á*.ˆ('N;2£ñJÁ³¡¾¬Läy!XÙڲȒ´ŒDF¥êËå[*û¼p¿¸õÕ)";û¡#°7r"á¿*)øÖ=|x™ èK¢5Ø¿_TNάó4ú¤ëóB¸©n@=‹ÞiŸác\(›¿4;¡j"±tÖɺ>Ï!„›hni‘"iMÙú—˜RVDUBM  ÷…HÌ@‘']ŸçÂM¼¯‘ÖÙĤÁgθ´ƒ&žº”— _ëìú<‡0n¬SÊTÙ  ˆÜ ⼦ðl`Ür!£å,-+ú¢8à­ÈTz•r4KB6cï¿;¯´?³ÎÿMw7§ œ}7çâmЖWÄ8Ï¥„+³¶b˜m|`œ‹E…'"gÂyUÒOA<‚pC8 )DÒ`RæÔ)C"/O¨ÆUÉ,Dbñ„³ëæB¸!œ$ªTŽ‚:&Jæ¾âSGÈ e\‚HÌ@‡·ã°ëæB¸Yd§ÎIf-qŒ•Í%AH3ŠrŒ³(Э#³‰åNÞíÁ¸ñ}GÁµ÷$sÇ0Ð9Þã£L"SÌ8$ZÂ+ñFjë-—”EEJRA׊ï,#æL8›ýDp{wÝœC°7q|ð<š¹ -/‘~ÂEg„ÍÉq­9s˜ã899³ÎÓè“®›sáZ$"¨ƒ˜Lò‰55*•Ô”‘BR¤ÉcI f!Kg¼ëæB¸Ù(A`”d¦DwªÐU§ 31–Ä °­YˆÄ Éq"Ñus!ܰN›D46‘¤½öGû ^ ®8o1 ‘ø Xg?´sã&³A’ÎÓ’¼Sº,2Øœ‚ôf°N±X *Ü–¼Û¥Z€vÞ+™¼L1™"ðO|<³ÎGÖ.SøŸ‹¸¾wþê$q¼ëð¾]a·ÖØbÀHϨ$0'€&Š‘2m¢ÖX™Æ#…åL=O¢TºÏ!„k$:æ2õ’G•DJEOˆgÄgl¿À,DbñÔ³ëðB¸±FHâ,scCŒZYMT‚Z¢QP¡° ‹YˆÄ ´Éq µºÏ!„k‘ÚK D1Y¯‰ÈÚÉRê Ô¾ÐºìK_‚H,ŸzŠ®Ãsã½-FK ,eí©{Vù¤9‡ÉMp¤J³Ru'DFˆb>‰\—Š H‚«¾×æý™zîdáû’qüÇÿþÇÅí]ºO×›ã&®Ãsö&#¸ṘyÉ’â!+ϹN¹šó–¦/+'gÖy}Òux!ÜP j|,褳<–ZL6•:(çìDbé¬Sôž#·qD[¥ÁG"hpJ8£-+UEmÓ9ˆÄ Éq"Äu Üø¶`B‰šù´., SB¦@TU&’ >ðYˆÄWÀ:ûi;G0nØDÎ$r&dDòh‚c”—‚pIù,qÕA¤&p…7"f“šEËY ŒÆ¡0üŸYç£ÃXçß¿ÿpñãžÀ×)úÁ#°7¾ÎÄ,Ñ~-•Ì€±Uõ:Se"{Åè''gÖy}Ò÷uŽ \‹„d1(cmâ)xR*EñÄD™jÁÇ"tf!‹g]_çÂHˆ´L¥L·Ï*i2—@[}) ì¶K`"1Er\ªø®¯sá&<iR&¦äÃP!h ZKm.%_)¶]y"±|Ö)»¾ÎŒ«‡ïžª>ŠÊ®Ô¡óŠ9é³4ç RÝã <­ô´Òî¦^–¢,E(^åÕÇß²%B¡êê˜nmÊ„"“nÓù›Ê¾H‡+PŽÀR㘽äÖFÍ5sY$鈅¹$Á ‰à˜âõ[VŰM¹WÄ3W÷Å\6MuPÄ–oJÃ"&ÞA‡`©q$Þ:Y*ÉzO¹†gÙ7dˉWšÁkC¿ÇßG,|£ù‘uýº/¶àÛ`ެÖ}±¢ƒ8ÁRãÈXâ>¥@‡*å0LHðN²ŠGì{Ì«÷o‰#Þ`ƒ„7Ø 1£MÅ`$˜°î‹Å˜Äq–G˜uH2:HPùÑÖœsEi.OÅ(Šã¿ÞR="ÛGëWˆí+lԲᬙV‘H ŒÈ•ƒ0¡Ò¨GóA2™*©Œf cxa³Š”O9Y†Âø·÷oˆ#–w¦Vû I‘L­zì§0¨ûb;Û«ÇXjƒ…9›:¸_a` )”[Bµ(™Pÿñá qÄr¦7ß#’L»™‚‘,Ëu_,ýnó="YYâ8K£Uf_Þ`S‚ù¢€´ JE[…o©±ì£ ]EÒRÖ}±|…͸H"»s$¿ÙA‡`©q„ÿ#…;À£j!@L‰eÌ„–šÃ#ÇŸþö–ó*Rªµ~‡XÏfFÊ;6s%Rø¯1;‚pq‚¥Æ”@™s"‡Ù¤0 _JeøtÜ`ÆiÎû·ÔXý³F!•±Ì‘šI-êÓiæU¤ÆÊAG`‹];×n•}ƒ æÊËÀ–5űÁ@/Çl¦d¨ïêg“ø#@Ó#˜æ@‡YQðZ(­)Æv‹ÿ?¯ýÍÃu¼(ñZ¹øiWpÝÿ~Q\wÏBðî©Èz©æ¾Yo®¶â·GÛæéðË›ûͪ‘?`XäÔƒ¬ÖŸÝ§´s³O\ù+ûmS×ýÆò½Öo³ºLëO—“ïñpûÅliÉ9Z·oV¿®ãærê¿=šš·‡²¤Ñ©Z7«û«›Û´ú|·o¤::TçÅE¸ÿófå67«ûàvo´::TçåúýŸë V7· 9í Û¶½‘¶¬­ê×\~uóiÄÒ´?à¶Ûk6Ï «‡ëõî÷Û¶¯êEÇW»57s·þ´’û÷øØõõŽ»n]ŒëëꙞG{ly‚£é²Y¥ßnoî¶â¶;œ~Ø—«êæÍêáö6Ý­®ÖŸ×Û‹êó©KÝ@‹ü½è±wôk3H}>u©`ˆ¿oVÞݧգ7½9:TçÅiýî›ý› ¤j„êtûõÏû?Ws®_ ³×þ<Þ‹ v‡“t·Yð«+çÓÕ4ø^ÓÔq¯íçÝ|õÍÅ} 7× Õ^^´[ðØ:矧ÿ:°Ä1#…Š8¹ •î¢b’R òÕ-äK,ÎЮ×] ýûðp÷íãñ_××OÇïùôÜî~ûöØbÝø¢1h¢ÚiR4G«¤Œ}0¬‰"Í\“#ÕSç‚Ñz@ÔÀ€w`-†Å¤'3çX£Ól¢ëÎ"#·Û*#×,æQeT0ë(k9aÑ̳ˆÅ‡õwUÜ„•X™|RJ Sˆ œqŸœ“Þç¨-ÃÂJf!3P)ÇEucJFnbÏ´ã!± ¿/ƒÖÔIJºÆ¸äLlŸí,$bùFÝèö!ˆ›´?)¥âsú?ö®¦ÉÉþ•>Î6߾Ȗç&{ÆÒLøÆ@"©#úËl¶­Ý˜¿ ’Ý] DÕ¨ƒ‚…BU³ø^!_& ë&%7N:&@+–»{ê@p\$ x§lrIK3‰˜Ñ Ï{eü'ê“þÍ.š íCH× ˜I:Tf©ƒ§7œ ÎÀxŸ„Q¦W7n5Î"óE H{O¶€«Š“Y%¸á 3É'Ûƒ™‡Œî­Ê_#N]d6ÓÙ‡®ÌG01@cæ‰!µmSйéUsY#`9æíÒ×LgB¸ª^ ÌFx‚CO` ÍH-‰F'1Hœ¾ÊäíZÅ#W;¦xpY†ì™U6xR©^&#I‡¶[ƒÖHÆÁAL*#W"k_’2ÇŒ ¬îâÍß~üáÇsÕ¸G.üðÓ›w?Î1šÑÌ!¬«•øÊ§#Ë ‰œJÊG„ÞÊÉyä8 Í—1"Ípæ•ҌQeë­ŠQ"rºuÖN(je"õtÅ"(qêJ“7ã™CW%Á\:Á!¥I(UrÎ’Å’•×›óX%`=æQ¢ÐBxJ ’JR£%çÝð$1/roQó®Ô\%¾©ÙŒha\E¹Îç­©¬Š `¢PAH•ç½Ö(,'¤á p Bj¦LY>»)X‰iž¥æž ï~7\4šC@W:SG£4‹ÖHï´·Ô µÓYºÄU/Ö=“gù"¤ÑB¸ V„Vìà":k‚N$I8#3 ]Ï/]%N^g6CšCW¢¢$ûˆ’# ^—Õq¶lše¹Ú¦ôŸ%`:æe[5CšCW3az»¶Ö ]Ä,bñQ¼ÉHÿs+XÏõX%N_gŠfHsãÊE–¥$Éá03‡6Û²ZI( ¢Ü£W,£wädƒÆÛ²ÆZçB21°Ùl„qž9âÂOïç ÍxæÐ:³”.Ò(£BÀÄ$£÷<#9KùOfÆYg¾ˆiÇ3G®ê;KTIA(ÃK‚ºÔ¡ &qz!îEPâÔu¦h×A¸ÊÏJ2g:—ŒTÌ;[BJ,„nœb ”X€é˜G‰v‚æÂUè R¤>Q[4ƒfЉè5ËÅIŒ߀ÎlghŽ`\ù£BA’“ʈ˜µäÔf•·r•ÇîT@©á1{iK‚LÖ‹¨é½ MûöÏ|âÂß?ü2o¼h4‡®–m¥ÈµÎé@RÒë¬ñO¥ÆYh¾Œ i4‡®KØ3•·:1c )¬ã£‚œQæ^Œ{”8y¡Ù h!\©Šù6\p“5³¬T5RD*É¥d@\:J,ÀvÌ[,Ø.9<‚ð”I|¨4 G듈¡ä^†ÙIPâô…¦l4‡0®šôí9jaeY[¦ŒN˜!Æ\¬S±·„ÔÃJ­Ý ¼’˜U”F¥\ä …ïÂhMJó,4÷\xÿó¼•@²ÑAº¦†Š鑜fÈdæ¤J0['T,U¶zãÅðÞžï‹ Äé MÕ^u>‚qææ,3ǹ’™‘ç¢rÎ)x0š%^Õ!…@2KÑ«X–eúB 9dÎP2…{Sçç©ó'.|øõüñ¢ÑBºZ`œÐfˆJ”ÉU¦¢.«‘}–t}wê|5ÎBóeLH3¢9„pE £-aj3&Á¬ã­@®‚Ô:øzBs”8u¡©ÚkÎG®×™,-VgeÙKRš”¸KÊF0½ÚÌ‹ ÄlÇ%’žÜ9Ò‰<ÛDì¿Í¾ßQàŸ7pûpƒozñßÿxHéúïžv>/[¬o.7W»mÛwŸvÍÛÿþt{¿YMˆñoºÙWo=½tuy>¦}x­DàʽÛ¶]9ýN_ë·Y}J—?m#ww/Èî3/åA§í›Õ—¸ù´í¿û´mÞ}ÔenuÒºYÝ_ÝÞ¥Õõ-î~‡Éá¶Ã丄OoVáas»ºaÿ;N·&ÇåúÃÓÓ V·wÄ’ú&»¶ƒ;íÅôn“~ÕåW·ïXšo¸ëöµN›ç†ÕÃÍåþ ¶í~ª/:~µ[õeÖ—÷$ù¢ñð;>výzÇý îâåÍ䙞ïöØòGÕe³JŸïn×;ºí?nOì?—«¦Í›ÕÃÝ]Z¯®.¯/wM·]¦ ¼ðï‹úþ¨n2=Þv™6Ð-¾8¿YA¸O«Ç(zu¸í09æÛ ƒÃ›-H“;LwÏ1=}xrß½ü47éæ‹Û´?ßï‹ Žv§ƒ´Þ\ð«+r¤®¶7?hÚv}¾x>ÿuî&­Iž!&TåB•#?0H+!1Y&)é«+m_£ÎdæD…LR‘d4 I(9Ò³´Ù+T¢·šá¼‡Eµ+/½û$2.î/ÿ/]Üæ‹ßŠ„¹¸½¹¸¼¹§Qa^¥§fEÑT¬±¤‚£ÈeºÂKï¹É!¹ $©»›ìÍdÍ9ÑèEVÊ51pµ**xd`4äkJRÌ68¡ ®ÛS`ÄÉç5—D\UN:€#/X ñšsƒ(è*Œë(]oíý"±£2/ͨYtxà*‘n¥&Qb¬òÚ@NÖq]™ãfÈO§ŸeÔÌg‚¸â„2dh´í¼ e"Aç‹@ß³N1Ê+ÓÑÂÆÉifÜ€Ìç½-þ“=ÔÂçíù—Ë› }q}yó_³†‘f–û¦”‰Ä,S6QäšÔ¹¡Gõ,%¢w½=rfRæ,>_°4“܇®ÅG7l“Ib*ÏÆgNfÉqèîιFœºøl×í¸ªh$X0J;O¬+«ß²$×ÖðhzFÁˆX”y»í5s܇®bÑ;›¬0YcA ¦µVÆdzŸA‰ÓWŸ¼þÂ¸Šœ“Y¡E†(lÉŽq&r€(yàBöй(æ“#¿Äå¨RàÙ:­£ÍÆ9ËlgáC ~žÃŸÏ[«=\CZïÅçvVdî®BL8oi†>‡P…5Ç\Ò³£d¼&åj=™#mÆ{–ecÎêóe,K3ö9„på$¥=JA(™’Ü1CòA9ëSϲ,‚§.?y3ø9„ð”LYB1côà…à|VI*‚p½­}A‰˜”y”hF?‡®Šþøì• $Z½ Óâ$É™J n:ÉÞËEPâПÍðçÆ)¸™!y9BdÞÈLRµ¬ŽÒ†¡ín¹C-#9A¬°þbñR˜Ò–Ñß´mRpñ½ü^ŸõçQý‰ëÛ»»¹ò³ü¿ÒÑÚÈ“¤Wž|Ð$SY0hPˆÈPôfÕææ,?_ư´£Ÿ#ÔsÈQfeuY¤ã¢÷!–À„õà¬H=v”8yùÙ !\ͪFÎKP6Æ`¥ À<@H´4ÝX×"(±‹2/c«þB¸ªwŒ#&x+m01fP\§×eÍîIŽÓ—Ÿ¢þÂ¸Š‰“+ëe¦ç²,N  'B '=Óa]Y…Ê šR§Â*…ÈÁZb‹ˆÅ̵HáÞ2öý›³ü|,[|» W÷×× /n'%ºù´Nïç"íÄÏü«x¹•ÂeçQjˆeýaШ¤Z“°[~paÎòóe K3ú9„på‘ð¬“vRB„RÓ>‘ b±Ô°qCw+ùEPâÔå§hG?G®¢!ñ²„YÛRoL¤…°dÒ[ ^õ’ºA‰X”y”hF?‡®”†óBðÄc’Fæ ¥f‹ñ>ç²ô_ÀŸ«4Îòó¥äg3ú9„q¹€RÃ…3¤52C/Hv8Í1i“ÔWD)‚ÈÆs‹ùC.J`ôkD²]½Ù÷¬üþ,?+ùÖët³¹x¸ŸYÙX´wk¾®…Ž23`ô²— ZÑ+‚[‹|âŠu7ݙǔ³î|‹Ò {!\‰ ttšñXJZ(ÈûU`%KÞ•ò=‘±Jœ¼îl†=‡žR‚§¨‰A–©,d©PyiM$tÇØ¯¾J,À”Ì[–Ø {!\§†»¤PK´6{ÆJÐ’§ bÆÞÆ\‹ ÄéëNÙ {Ž`S{aDÑ|ܺ¤£×šqI²Ž1ˆ9{m¶ëK/B¤V$ƉŽY’jDJ‚¹ô¸•É®¯ÉQ “ކ{áËm%âÊF ›eìúÒ D"ÁgÄ:É>_@Ê\Ò 7íKŠô@ñ3èðä'2z!¢Žé9dù‘sK^Ü;gîv~8¨`rv:q¦3É ]Rߥ£Ç’¤ˆž“çW[@ï·CÓ3Û¾hÜM‡Í¥$íz·î÷Ôøò¢ð×—7—××ODx<Þõ™¶ìÙPwØ_>×7ÙOn²oy¼IÕ¡~®Ç`ÁáóÖA„¯Qõ³Öì¾Ù§ÖH;Gþ åùÛ>·™ÿgïl{äºm=þUü J¢D饑äâh’›Á}cP"ãÔ^·7ßþR³ÞÍœÔÞ*ÛÓ =H¼O³3svæ'‘’"ïÁ¯íýµÝ®8{©?Èæšõó«kþÕ-·hÐeaø¶Eêr·€û¬¾¹§ž­dFE]‰àf‘oún—\'ìÉ Æ„\%ç–MS'Ã8†”>=þ¸’üü‹ï>ýòógøâ¤ò(T .|'µRBr_Í%n˜£‰¬ÎЋ.R¹Ù5•gtÀ½xI®ò{›®?]Çán`k°+•_~öõIäQˆ:’$p÷b Á ÝÿÄéYÎyÐKD.¶1Ý­¸„êrY"ÖD‘çX¤œ~+‘¿î»ú1:¿ùìë?ý׳?üñ$ô(„f—bX»»ºîN‡}¶Y³ä+À] Ü». èZg¸ƒç•ZvÂhÉ®3ùóAoå5†û¬Ã?¸Ü@YZï@Á×M‰ÐS¥Þ¹”9ã³ür/£îÇG\WMü}%Åí•Þ_ÕÝ5†µk¬h(y°ÕÌdYi>Ôb î"Åñ@\ãQ×6×w"$©¿EBÚ ±Híæh£•kœÑÏ]åÓð4=-—þbø‡§èÿ…§ñi¨O= ü_öíi€àŸñò}›?òû…pû¥ß3Ð/¿ùý×þùƒ/D|޼EëÏÕÐøu$üÀÂVÄ…¼Îɯ16C­¤c\º~(’þ úäÅË›·{Ñ?ôÈÅÏ ´K5gÔWçâ’ÍÙcUÎøùaâçdêo]oA†ÿÍ£q±<'4v‚þËšü§L÷»ÿÆ?Þè¬âú釗zÚïÃØïA|##,Ž¢¸¶ †Hc¹›síÛªô^ÁìšËŒ:‡ò™õnŠÕ²ºVçX¬à>\Þ¦¨§c9æx»ÿhMRu—‡cê%Ž¡nG;&‡ÝÅh’Vó;K¤]£I9QŠÃݯ8 D†«%žcß-¤ž[ä½Ñ|ßtèó(`µL2jJ<²TwŒæÈLÈ}s­‚¹ÄÙ5˜<óA½ê(î|b%ò…¾]§½dømót¢yD4# AJ];c—IÏi@Ì0B©«¢%Ò6‘tµhf1_)èȾPÀeÒNe·hÆÍ#¢ .ÃT InÀ\æØä¡¹9a£ÌB‹Õ€ú i[s.¢ÆŠƒÕÈ]¤MJÝÍp¢yD4£ v2u$ºÔÞ©wË1Ë,ì]AK¤mr=5A-1öCqáDà2¿3ªó®h‰æÑ”S‘gŠF ,‰+"ßüfìŠÝi\Mù¬¶ñ5-äÁ9…$¥WkA±¸Wšý髌XöAó>ntry0.™,¦˜Ë(Âg gÉr#nÔª£¹‚Ù& 9Ú…¸hQ›ñªÞ¹ùÚð7ëNâün«üùùÍøé„ò(P:hN`Ê J‰XZVuŽd¸&2]­ÙXblÌ”„Åé×XJ@ìérü…A‘óÞP¾üé¯å¤ò(TŽÚ6*ó0ueŒÝIj)¸!ÏÀ䜷qÌÈöH‘›ŽæIî,Íâ¼~Ð-ˆ†ÜËÇ/÷1©Ýp—Ú…§­Íìn›I]¼¤jgÞgn/‰Ýen•fw'½æ’rFMÃ|¡%ÁQR(](‹ýýÒì!t5»×F)¨ÛHî-ŒÄ‘,g€„É£®ñ øBJû:NM£¹“é;qÀ™û̱@¸¤0E.¥˜Ê€®¯^¿ùùÉ»·üýîÉ>üØeÁ #NmÖNW,Vˆ€K®Æþ‡‹Yð£dÁÉ|AgŠó$~ièo«VÄ ²±¶"ç¯|½z-óªÞðÍë7ÿA&:ÛD'ìnäzDÌaô EÑê–¶ôBu5´‚Ù5—BèbžJMÅ—¢à:”ü+D7ìûqyÉ?¥oow¿Ìc€éʺ§RšË Î³¢"N·}clú°s‰³k0«YmÔc 9_ŸÆ@µº°ã†y æ›7oõæÄò(Xd†2ºBTYSòmrÌŠÕê›Þ"–K”]c©Øg& 5ŒÝ;VÀ;´¶Ó‰åmyÆÛþæÏ'•G¡2; ЊôÐó(¥r…„Á·¹¬ JäE*— »¦ÒXWå ³tcFKþ­Âìx6zÞ‘Êé]ºn›íþN÷ò8`všÉ@·tT]Cå‘› p)j¤V“8+œíj¾õêp%Ç\÷ͼvoµÿ”ÊÔÿ~‡$‚„¤Ò’¸µáÑÆÌ$‹ËÑk}¨ë÷‹Þ¤Æ—ÖM. P]N¸žFWÆòªxL$-ÞEÒf0íýɈù9¼?ÿß‹ ÛÃódDºý­ß Zî\Ç‚Z‡^«Uvg3Eª’k¦y¬ÇÇbAÿýòíÍëïßð«9™q–ÿüäæå«ÝÃBÿðiˆYU¡ä/F¶ÀÁýõü”zÕjùŒ%B4°Õ–“oÎ%¨/XòÍÕß]¿€tßTüŸ³á/B9s܇1Û4sˆ“¯á;•ÄÈCè£Ï€ðjÅÚ Z›² Ýêú˜½;17éÂÑM‚eæßÜ8ãÃ,žg#Œf–Ù¤µ&Dßr£ãáæÕo 1 öÕ¸ÐiÞ[KÕa®èûxîF µðAx§:ßx¢x­%2²Ë÷úÀ0û€û–‡²Z ´DÖ5Š¡I˜´0¸ ÷'iöõ+¨½ì¢|Oƒbvï1c4ûYÔØ“dªYÅEIéîW.¢¸DÖ¦X2UV ³¢ qO!¶6Š‹PW¤5'N;¡XOƒâ¸t±È˜AsêÉ]¾ØŠËW8Õ8­¶´Z"kSŠ–‰`ä’kI-jKÃñ'Wh©Û Þé\í‹p¢xó´ËÙˆBŠ2›XkšŠ}öëÑôjýÙ YÛ>©ÉŸ2C¬#‰†9-¤”0_5enºŠ9ÄW'‡¡±šÙp,8Í!6…kƒ4»’rƒ½š:\‚kSÔf3ßyÚVM\¿c E«¹c€³)û^4¸žÎïÂíêÅ/-ò.Ù߀·‰àö‘$ð£ÒÞV%AW…9G!ssùÛs™Gû´[zh.ÃÞ‡2Ï׉ê\¨s¡šC&¤F3Õ‹lpÁòC‰ê'_Ýž^í??±øûÝ›÷½ø'ÿø^@êœì1TQì¾HTºtë:SÓGIMÈ1¤^§O0§,R”–¢ŽËÑð»ïþå¹=ÿôËÓDÅDc‰óø¾“ÁsHq¥Ù, ]ÕˆY^u—ÛÙS«¥&_3Äj!î½díYe6ÏØ—ÈO>=‰< ‘¤‚æXÃãˆQ¢„4{æ×ˆË“–Û–à)†Â”—¶BAükÊ’Æ®{¤Ê§Œ9 ‘YÜ¥ 2sËÒ Ž^ª«™Šó÷ÈÃéJD­R#Jp,,²ë%qÛ%®Zí%À6ažj-'ÃùíQ9lÿ“5BµP)´šÝÚ¤™C6çR>á}Ô5>*Ýz%„þöpI•’AŸgLfþÝ–°¯çÙËÝÁë_£ûsÍÿ¯÷G°ažÐ®÷G°3n!U}ÙÊ=3pE{B‚žzžmMS½íù@f{¦žçÚÿf¶·ÿ@b[çkC÷WŠ;ã ªh ÇœÉgbû0‰mÀ>Jè¾L‡o©˜ÉPY ÄÖsÞ©$÷Ölß2†5ÿÓËÕ4V.¶)·(lPæè^±ŽTSv˜]Ž:<ß#ùåéMÉ4Ì)±!a–§iveýHn‡Wë-V»F²t÷9•›˜«4ñ hÌØEÉ…S.ug$ÿçÛ³àâ0Hªd%H±TpFHqˆïw!8«Ä«ÉÄ%Â6ýÆG«r)RÁpÁ³–ÁóücÛ5P~óü‹oN"B$Ä”4÷ygȬX,Ù-/¬Jî%À6DFwúHnèë¬?ê1eR_!]\gí9:ɉüü»“È£9¨…QsÖ†â¾d¦êL•YBj¶Jä `³ t¿‡¢IÀh¹Y(ÙÂL«;Ú;ùÉÏ>ÿì„ò(Pf÷›VpÒ]AW)]Sï¡(ÉoY -1v eç¢Æ1;0Ï^TšQð箘÷jp*vÖJˆI.Q!k™¤îˆÔŒµójh±=’ܾd2²»ªàp‚Æ©5Pw[ýrý¹þ-’ÜXÅW8šºåR1‘¿6ód’¿$ÿIn±õ;ÄÙ†Û€¡°Ǭ(BhˆÇ$¹Ó]’“Üó˜yœ7ÄÇ5_HYoÎnƒ?[dIêžg6¤èæ=X à²=~üìöWïôÝ¿"­ýnqÄ\âüÍ’˜j¨EM,ùåGÁYHe爹Ã$³©ú½û_ª¨æ£±;¬ì›jØk–û¥ióýËóñîÍsþá‡ÓLÅLsô5=%¶´F cÂ6lö¨ ÙMßj¹î g›c_0VÕ*éF®ªY©•€vJjÿæë¿ê›¿XËÒºïÓœÎdR\o»óCÈî vK°:›f‰²ÌfÉipñ»š?_MP:fkû6¹ŸXêÿ 9©< •Ù‰¥Hâj®ˆ5¹¼‘ˆ³ú¶Êj8r ²ÍÜCœ·7¼L£•k%B`¥§NÛüB¥¿ù'”GrÓîî¦3-ê;¦k°^ÐÅI©tµ½øc›:IIr ئN—ìB¬¡àÿ³wn=nYöëì¯ÐË v×ý2Ó0`8$À8Þõ³³ó"ÔåT·n©#±}òã÷)©YºPe»“ Õ-$n²X¢X_Ö¹°X‡=Ðt‹{¡tï.Ÿ„r,Bi¹qÜ3t¶8J–Ó6y#tàQñÀBªÊ*+çJ8s,©¼ö±N˜À=AG*ùàfeöwîVOó%G#˜AiÎXΚ¤=êᤘÓ`²+O„¶´öî9{ˆ°$!Þæ½dÒáÐì5±-©„s›ò{K¢ƒç©`Î)‚îÑïYi]àVhFü€Uô9!?½ ù­¶a>^„üÚ(1åâ’âÌ«*ƒÇÎ'§Bbß+£PA¢ýv+IV„/úa½ü™ä”DF¤0mVï”dÚéQF¾œ¯ÞÃòÐë6›»éö‚‹®é«f9›_¾xŽããóëEp×Ïýlþ|5¿¹½„fòÕ;&_½y÷³›|&ºnþ’LÃâææn>k>þé²ùK[œ›ÛÅ,æm„Óÿ‰ü›-è"¶6Ù}ŒI 5C±Õh\;*" Æ“ÜjŠ?Ùù\l:¹éßÿúöß¾üþo½¨é.în±/rrp׊mow=¸Á%|¸Åá· WØ¥ÅnWÃ]_/ÞOçw××+¬Ðß[KIf±•“ívw¬køâ®Á?/ðÏźd¿9­0lÓý‘þøV‰m‡³JT¨MJQN=cÉм¶lB#ÚõÕ÷®ã‡~óæõËïÛûÑá`;xVáéóD5ÂÑÏäQFu9çñ BïÃv~}ÿ:ÞüõíèY¶màX…¥Ï‘8k| ù%P®•CíɹáÑñJ’r9_äß;ÉM+XV¡)Xª¼êKŒCŸ0x"©ÔÁä…“’û,W€2Œå¦C,kÐôY¦”0 ÔX½†hñ»Þ“Tn»ìYï*üâòn5v”ëF ¬SŒ”h iP6)ÂZå–{‰Ä‰ñ*ŸGì’\žÉeÉ*0}’TËh½·šÁa@¡ñÎÑMBQqC”ï“ü­²¼q 㯠ñjûóƒ0gó,óy!V1éC4"‰(ƒKF:$hWT‚æ …8þý‡×ÿ=yµ±xÿM(K³ûKîžmm©Bÿä©»‘¢»Cƒˆl"ZTzZèŸ7ßóoâù¥ÑÅV5.žoÝ¡Íwk=ÀÂaŒBë™2 »ÇÅTÔÅ”‚æ&s_åÔÍ“.wóˆ|EP ’´šKNr’mô©L 1Tî°gßü|ËÓ&ÜŽ[—ôš1 vUp ½l,V+â(Qœ`´¶œ:–$qþ0ÍÙí;u8»v iç<}ž,Ñ6 dŠ>/8Žz(I&#ç>Ø>Ïæj .Òéæzf0b{ç`cÈVê“¶Í(àXLš$vBby‚˜‹&ì“%çD–T“­Õ'‹zq&UPÑi&‡@£¤Çgõöý×ö×îæïݼ8~¬û-`Z…¨°‚(ÒGùŽ=x§¬ö.€lW~W)p¾/­ìœ¤•UKk¨b„ÕQ£2ó€“sA)-„I¨2°O–ŸY^?ÂÖ€*¢u)qt¦R"k?”XVõ8,÷* }l9Á¶¤œƒ“xHRÒ<Š 8U>AàÇâW1)¢Ô“`¤÷Ls <*ç- Ü1ô9%!…Ýô¸ò*RÅ€ÉH4‘i¡<ã‘&O“:üªu ´[¥¸„ÛëQ–û-*kõ™j hVå”Y!€€àǯôîmäEü¨›‡’Gí=îÒáÖƒ [ª|¤–¤ŽAù 2ê¢Dã•HÒ&UüÙñ+÷ý¦ >`; éhtét¸¨ˆ.)Añ”ÜæÇyF¨¤´&NI“œ5)¦cÑ¥×p³X~œÜ­Ü叿"ؘçåÆ;F¸åÙ©õÖ¨äò˼´Ü‹:¯bRè)U.<Ú¢ž ! ñž2¥Y£UJ›]ª7‹˜ßA[ºf±7Ô²%L«õ™zvš6=ü Ñè'8ºEH¨‡˜¾s׳xP{M Z©TëxJÞêäDü‰A CP±”Ôóu%«(^P¤¢å1ç6X—htQ¥S´º§Ç’ŸFª°+]Î<h4ç8„üXÓàIk¤år͸ïò¢!C6e  bÒfNqxrX>T1ß…I®%•9E£²hš[ Jfwÿ·¼L<–8d“bFÊY»ŒGÝÄ´±Àˆó‘4­5šÖ¦¸³Ï7QE¡œ­cò>‘—ÞÍ û2hDF…*Þ«Ò¨VâfÌCbwùCFN ŒbryJ)P¼É¹Pèù9ãc"\£G4—E¨áJR6j|ëëàW…£>†úF¥¤©¤N$ÃмT„ˆät;£tL¤5¿õõÉ_ ŽÒȶÉkBÐ,ëœTq+,Žš3¤¯(3£æ·¾þACû4Žc˜ŠÈJñ°Th£-Pô&©‰‚‹Z›(@[¯ Äôr¦kw9® ù§2f>[E¡xDÂ4$£m\‹H¹0y €è˜”‘£Ü6ÅúQz¿ÿ;µß†¡g&5XŠg&!j !¯ÏÎóÑ[E8ÕT 9úzˆãÿŒüìM†Ô`)\9pˆ šhžSÊ%Ω²Ú¡S¨Ñò!üǼÔ÷Ø9n—+?â·Õ`)\OÐd\ö££²í…ヌÄiØf&-®áÇWãç˜Û0äƒÔ`)Ì —¤æ!ûzŽóÈ8Ñî¼Î}ŠüðøxòøvX«°”aC¢%‰Æà¶U"xeÐ 2"Ï9ávŸ#Äùˆ-Â~ƒ„X 3G1CÃÏåŤ '5 ôcJò <~ófì»6 Ù=5XÊ©³Qb –±ÀXd‘R¢ó † Jq|uvÏ«a»§ K±–²ö&{×ÖH)‚ RÄÈ? Fâøò 8¾æX…¥xû-ØÑù¥k%L$< š·tˆâñ1Mÿ5~Œÿ~ß­J³±1‰M­‘¨Žx^Â_ˆòÒ5Å]ýX¢ÕUL QDiUR$Ny´„h­¸²(¼ÿ´*ŧ‘::¹æt¦ÓÿI‚F¡ÐxÅ^D_ ÜÕÄtF·ß©üiûcb—o܃b/Çß‘ºKù`y8å×!Žë¬ncGÙONwìasœ‚æ‰dU‡hvéÈÆ³—TíË4ÅÓeá1 î U–)§9syÉ•;Èò @?^®RÄzNd>=D1g¶;ÆmvÞ#±ž,Åš>'râØ&­;ÈûÌÛ‡IV)4·ähQ *(MTÉâ?$'×ö×óÉéßþcü$ÛF éî0…LžÈ‘×'y¾µª(á)£#XŤˆ5žÈ!ùä~©ÂðQ½9C,±É(o‚dù”‘ÀèA“|Ñ\ÁˆßõÛiÆT§ˆX0Q‚´Ö©œ‡‘© )+¬±ŒC4üçãgÙ6b(@Q¦˜€ %9¦iƒ$Ü0Ü!ý¤xXq¿9“¼mÄЄ€ 0ÇB=±›búΉŒª¡ž»‘xNdÇxŒZºŠIi!§Ty,b…âÁÕ‰¬‘}l{©AÇ:ÚÎqzäV  rÉåáüCOæâ'‘*3Ó '“<,¬]ÂÐñËj/ñ鑸c žÒ`Îd|˜ç6aõø‘–¹· u~"_ÚqªmZ¼ó zŸáïˆ~¯T¬u"=âaªmÌñ½Oäy˜fœb~é‰ ¨‡i¶InÇOó>Wïaš5pŽ>Ï>íµtý@e÷: 9艎T°Ršç$0nÁ碅ºwr¾q³ë“ÿ”“׳ù]“—h¹¸Kø¯ž§óašf×°š&šÅòùZ^<ß)ËÕV Ü®²;Ômä¢åâýjS2oµnÓìV·nþÂ(‘l÷óÁ¦]¢Fú ¿x¾ÝÛ²¨n\Ÿ‰6àã 1äW]­à–kÏ1Àì=‹ÿø)Ãàä¡h¨=ú0 E„ùLíëãP)†Ü$/XN[ÈMN†ÆÁ-BPäÇëż¹Ê<Øä»ÅÝò‹a0±OCËC4˜jç]ŽŠöõqW‰»è-Ú2ÌÅäò³,’"óŒs®{3?þÜ2Ó “oÜÇ/‡aÌ> «Ñ@‡KrjÄgá¨h_3z Tq- @ …`˜Ã}¼çø=Ž,Ž_mä‡ï*>W6*Z·Öfªegƒà†S‚3DÙür~Í…v0½‡ñÃbyãz¦ëÅåír6o¦ |h^üÑ|Í®Óä«‹çýâû¾òǰ]ÈlöâÙÓgôŸ».¶øUÛ£Ïûë¨>°ß øAo­ý‹Ÿü—jI6ûmͯpʨÔÏŽL<›È»‚ÏݪqËÉäÙr±h†ê½G³ –¿Åý¦Ÿþo‹¦—Kw{…ÅÍíu6~×õ§q¾š~5½iëOÛú_¸¹>ü¹ƒ•GúPþŒ¢0%´âüa8ÌÐgò›xÜýÑ åØ*Ò>CÎë—æul´Q¨ðµæ.Y’ôÙõêæ/|Â:Ì­ u~êœYsÝe»î¶ºâvó—6ŸFX…åì¶™-æ¿à9‡~¡†éì˦)kÀf“~·¬­º[ˆ ÿ`½fz³Ë«.gýz³s4»mÊPû÷Ë›éûYl®ÚúÝV[Üm¶FD¯´™®®èñݬ½¿þn[¡·Ÿ½ÏÝÃÍÔÝ5‹é*¸5ÎÞn[¡·Ÿ¿¿{¸ÿ…éâ¶Y휤+Û9SWÈúgëÕ+¾~½¸Ü=c.Ú=aWíP¥æ¾`šƒ­Ýî–u¨ö*¬V\Ìrv¹’½ÂÝkÜT=\q}‚[c~¶=ã¦àþl›’mwUš)|¸],;q[o¶ÖÛù[ýâfzw{ ËéõìfÖ}©¿ÿ]ã¾€fùÛ«Ñ £÷ÅIúûm•~žbïx3õn½,ö½Ý¶BoŸ’ì|íVhÚNê¡·Ûµ£x÷àºzF3‡ùÞivÊïÏ·÷…£Õq–Í ;~zí<\·'ß)j+î”ùM^[¿&à›!ñbã lX´ E·X^öÜ+#™—’E.M¢yIµ™߸ÕO­‹‘­ì‹ô÷»*aq½X®o·7Ñ©Û+÷âÛosd*ou¥kÿX¹,Øœu¾Z´«9ã0=MwóÐnt_8~pýåisEëÍîÀ¦'îÙo=¬ó NÊÖÃÙž:»:ëþŤæóênùçÍ6z–Ûí—ï.ïË݇?#ôÞ©»»rËœ ¤¹[ÎÛÛ¶¿ßÕXÁÏw0Ðz››í^¤î¤ /6Þb¹•!ªè¥SŽ£—JæÅ",;$6VÓb^(Ú †ÏH0@„bÞ)‘¬=!`í糤Lœ¡”ý˜²“ÎD>%$ƒ"†D¤ªÇû"’4WÎGO4ÄDI°4ˆu ”*+¶«”ýJ"òYÒa?U:Äï_:¾H"øDTup_"¤HX¬¹Gÿ[kÁ€èŽ9¡¤ ÛY´£–væ!†$¢ªƒûÁ÷‚Šèž‡˜›â¨Åÿ œñsˆh/’9$UÜ—•ŒPžDâ­Í+ìÍiI•Ž9€œƒDðñKÄ cS ÉDU÷e"/õ„Ê&På@±µàÂC^ [«·KO“ “’±Ú3EeN †L"q‚j"Á¸èè°L|û퓱Ù…·oWÐLÚ%«ÂäÔC‚RÕï}A!ÒP@ë”Ûœ>¢”ÙÀC9³¹¤Bþª‚òdr>ˆ:1CQÕÁ}‰°$à?V©Håù IмŠaJh¤lßwµDœ»Éi‡$¢ªƒû(@ÌR°CSDq‰’c” Ò™`¼Æ&#Ð#_$” ‰DU÷EB›˜'1„æ’2i}`ÖщÁ¡åDâümN:á¬êãÂc¶F3–ˆB „õy Ž€:嚢±ÂRÒÊ3 ö/«ˆh¤ä~•y5¯çKâ_øQü“×òñ¯Šÿ+ü§Ê¿*þª¸¥©ùJ_Ëø¯˜¯à¢ËRKG¬ùiµÄP€ÃU'wn^`å‚sA?ýצéO|ô}y-àJ<¹yÌ'ÎÄ% îe}ÙÍY¹úr®®Ä¤›˜èXäjr:ë23uÉÄÜoJ]…E7/àÝ—ñ4Ä]v¦.ƣ˹º“n^Àyƹúî¾t%.ܼ@\gÛûýË•8uó“Ë=’?³u™µüôݯ\…A7/°/r4>)s™zjréŒ×‚®Àž3_g—tg¯³Ë^g—½Î.{]ö:»ìuvïÞ'õý_Âñ¾Öë¿RÞÿ¥©¥½ÿKSèý_zöþ¯·ó9õþ¯l_Z¶/-Û—–-^¦…Ãl_ZÌŸ$0³}i,‚°Ìö¥e¨üé¡2Û—–ó' Ìl_Z¶/-Û—–íKËö¥eûÒ²}i¦fûÒ~$¦fûÒ²}iÙ¾´l_Z¶/-Û—–íKËö¥eûÒ²}iïϾ´÷zï}’û¿¾øôã[Ÿšï>>w+ÔE?çïÿR‹ª¢Òþ/MQK傪ÿLQ z±œíÿzŸ»[µ“»®¾Õš]Þ´¹Íº-Vål§ƒ¯µ&³ZÍßùçã²Gµîkòî:ëÌlÚL`'Ÿ»»ÅíôjÛÖrXk›ÒuTÙ:0;:,DÜM»UgN«Í:(×é֬Πf:`3ën™ §ËæÞam.Á¥î©ávm³Ö4ë ¢óë1Ó²Zm»ÖÜ$ÊA Ñ´;ìÚC³]3«u¾!fI×n’툌ÕÇ i“c«m¶w™]ks²V»ìÑoóh´–ÙdN õkÝ<ûMëÛmíø½uxQ”hóF«Ëa,·[õ:âaÍd”­åsŸˆ²ÁvJPw ñ#'kðîVËfsÇD `’SÛÜiC Ä'‘ò=Ô¬<û-·º w»7ÚwÃ쉑Yƒõ9L®A”hb®ÑÀ»ÔG»ÕˆŒu^kvj›[]âþ-þ°fqAŽ€±`³Õlš‚ómŽq1qsžÝ Z¢ÂqUŽ)?ò`­ÖNÝ&*¶Û­‡5[#cdð©Cјl¸Á®á›-ÆÉ›]!9¹S5&uVkFˆ1q¹Ëlî˜;õ®èyÛDûµ|îó]ÖÙ…jÏÕæü—wn±r^eë¬æˆ‘™ì3¸»Ç¤ m¶]çf‡C¾H¨¬¢#½MwÐ"?˜ªQWO‰öj$x‰B³ÞËÎjkQQÐf°ýÖ‡œÐª|.w·EPnwA¥ÐÒéeEň$Ã7r9u´ãëp ë@›oC[;;€PEäT!Î}™ k²•T‰çÙ¿4ÚVÓoCQ‘„-ÛV£öïñzŒfÚ¿Ãð ‰Ò¸MR¯#ÍkÚùܯ[àÅ»÷‰8­›ÅÖÁîÀ’¿¾¬u ,òûg¢û5uM}%G·e67¹l[`\ÕˆÃx§-çBÊ*NL‰i ¦¾Æ¾X@b¨$K¹o ¤¾–™š„‹¸Üd?§åX`ÉÐw! Újá¨ÐÞY@ רí&Ù%س|î_gúF÷¨²·B2MþHܰóâ–¯ v«ùa—m™9 9ÏB@=hØÒ>ñv‡ôŽVkÄ[@ô7D+­GÍ3•g‹†è2ë¤è§l`_ÂÐ„Ñ Õ?2õ°!)í«´L^»1=Ÿû7Òñ6Þ¥I#Wk›ìª$|ÙlEÊ+(¶ÙUiuÄÆåeûãiCüU2$±^')€V4}j¿¶'Ê·u(Ô6y঵ÛñË3  ×òìŸIGüQ 'õwýÁH²‰YMþ˜t“CÔáP…ÕIŒ·Ã¡¨Ô 6$ÿ©27-¢ÝíÈ çœü® S€ Êy“ñǾ÷mÅè>œ¦ÐEHg#Qva‰ üKžµÝÚ#x%‹]_xáºàF`?c±BPÜ ÀBy‚L^%}·‰¤N­»#\DLJl¤ã›îÛÂt.½rÌvËqòv»Õγß&]‚`Y¼b ‰‘…¿*KÜK‘WeäÄ›((XxÊx)QøW‘ ¶ÒJéÍä´ê/ØM‚þ´hñ5W^cŸH·MJï»wéIîÉ_¾ýض¿‰A,qªÓ…{BÕîúDÊz±uá¯Â‚²ƒÀf|éÛ MÈU`N„V‹V"¢SȹÐù\ùµ¸ oËøAÂiy!Z„¥ñø*ŠMÈ ¶Ð=£ho³%m³ „ï‰Ù]„ Ä b–ô…tEúÓ¶±t…ݦ8ãZôU0rÃÖr¹Ü°T*mc—}Úܬ×:[dwÍæn>Ÿgÿˆ2ÿô>¹Ü_§Þ”MãþÑ”zÞÞSo¿?ôXrä¾8ñæîô›³ÉüÙÉ Ç&ìÈô¦Þ0 ‚ûAˆðý¸?úcÿˆÝ=ozì7鲩;ð6˜7b'îÑØ}ÙŸ»½)›Šg&SwÚŸLûƒÙ v4!c÷d†’½ºÿÚÝ)xSo||À¼çý}j$Î^õA TØkG½qoØÜg'#÷UoÔï­ÀÉàÐÝ?¦ sæM÷{‡/FÇ=öµ{pxŒ+³{âŽFÞÛï{ôÐïCàÊt¶ïRÿGÞþ^LõCWɾ÷&‡=öíÔûÆ‹‘ΆÞó‘ÇPïdàΨ?$‚oÞÐ{ùâIÀ¬ÿv'Ó±w0è³—îÞ¡7òæòÎ ô ÷FÚcSï{5õØóÞd:ðÀï¨?qÑî|Iª°FtÓ†½¹ûd“ Ø ±<ï'œH~˜ô:q%3F!=Kó†>{вëýá36éÑŒÈoíÍögSæÎ °áUo‚FúÃ#o<í©ócÖ?~¼ƒÉ”y{ÿ»¾Yɳˆ dÉ<{ò]_0œ ÜAØuÐÅ÷‘»OÀŽF<ß?|Æ„ú‡èyDß¾»_÷®¬ Gû¸õ|Ÿáj°pÁˆ¼“}ðèYP+ÏþâÀsôáõ§Äu ˜j¾ó>øå1t$‡ @¨ÏAÑä;šAfóˆä§€Qo‚²Gã~Èá^¤:óch`ŸÒý“¹ …ç`ňÄ&ÐïaoŒvÞe§î¸ÿìéBHyMB·áâ)äÇâµ5°‡:fûÞásDÒ>ñžŽÑ#‘žÏý9ÀËìI<õ.zùJ)F‚‚r½iÏφpœyß‚ƒ0ï‘úÚóû àKJ'Q-É‹n0a5HhïÚ[´sߺôN¹ÿy€«î+ÂH†É7$dºó?À$ˆ'´%ùéG¤ƒ±7„¾ì“™:Nº#êy볡wø ¬|Bˆâ ì*îMÑ?Z ³—ãþ×S¨úÈe/§îð¨µOæŠM{( ¾ŽÈVöNˆò ý<ƒ­fPX" mþYк¯K ‹à3…LÄù™ÐŸ|´£ÄL2 fí8ä}’¢ù6ŠÄ’Ìèò“’ðfS(EÅ#Wš7iôbº+4DøÆ Mõ“(!šK¼á.œ_QXþyÒ`Äð5=Ý—Ráõù§”Y…†æÂWKY]¨•'•¨Ë™^ d‚2ç!HÓHÓ}wB™­ (Í–ƒ4ÊÙcÑÙM%àš²›Â2ÂꆩÝ:ä$üÚÐû>i¶ï푳". J"²}µïÁ¦ö¾ƒBô¦yöç˜b&Ç›tfÒß< ç©ìPÖ…ƒ: °Ì½žÈN×ÔwÙ‚ã!'ðít4"ù{IN0R•Ëð¿|¯3£Æ(ÿ“¥ÈÅ\üBHLoÿÐýFj×~L*o0¦<û_ÙÌj©ÞlÔ'Ê…=€ìfƒÃ'¯d 2éíÁë«fsX ,òPõŽÉΕº˜SL I¦/xòTºµC`²?{ò]o8CÓߘ|ØÎC¨°9J?›Æ¢¡€r¦o4÷¦£ã§¾}¢Áÿu0¡î‰â˜œ÷Ž¥ƒ„èæ4H »†„‹þSØ®y‚x¶á Ïþ“°tâ>õ¦} ,až&®ö÷È*‰ª>mÐÐ)R¤5nÈ!âÓÙ ˆéH¿< RgÏ{KrÀ ûûzß;ò`¨GÇCÒçW°ÂCA î“èñ&³ï CóÃgœì<<]šN˜÷²¿‡ñP˜øÜ=œ!ôqý8‚¼$ qËœâ×Þ©ôïO@’Ép ##V/tïe~?$Lžàu ÙŠŽe¤¢æÀçh‚˜x¤XÑ ƒõù±´¬ˆt<8B© èÀàvb)% sÊïÉ¿ì %&|ÇhfsJ€ RDÌÇ{€?J§g›aÑ%Áq”t"Ì EÿîËÞ‚]‚ˆ‡þ2v„eôæ1uñc„УÌ{Î/ÉÔ)©îPõꇬK9“÷RäsÙH˜”ÓŽŽ¾qó¹¿ôЖHÖˆ·ý´ŒTøÉõßDtöÆú UÞh½wqýW/¨eýgª¦+eÿÒuµXЕlý÷m|>øé>¶rä>OÜmÄ—G£e?Y¢ÒýTòå¼"®\ûdiŠRAÕn Sì䣼ò3Xüf‡Û¢ÞòùњŨî¶ÄúF7¶T[¼’+:‹ +Íþñ&­Öˆ€pqFÄØ`»"Wc7®\‘ù;·×#~o°]ÞÉ}påÊ•èÚºµÓØ›«=ä¬ÙZ¼K+÷í‡f}ƒ)Ôº\ƒÈÙ¸âY—4ùí£àm‡-éŸV,š­®?;š-¥C³àõZ£FSÿ n6ÌH\Üñ—»h¡Í¿SkÓ¤y»F«\GÌ¢Ò4üâB;XE è\¢vüΈaáZS,òá]+°YEÔ‡óÄh®J[¸X‹ÉOÒù[ŒÂ—'Qã“Д+rYøZÔ+ÒâÍf«E) _“ }‘l].:QþØ5«DúõŠìºÿ?j&j,iq%ÚhêºE{Xifv“«>û‘àÓö ð¾ºï|MXf7KÉ}Á[µ.€HÅ•ûÍÆýßïðvw6 ÿªš¸ªøWµ¥WõÄUQÓb»lü²ªÄ. 2ˆŠ²•0Ã;Ý:è¼ß‚ŽtQô¶/Â[œ¿Ê’›ÖN»Í›Ýûf½Žû»÷»Ö¶l/ºTÛ~Xµæ#ºddž^jóíº¸âxˆ¥ü#Èr«×øXw8íjèÒ× O'1ùwìôÀ*‹„ÃNþ‘žÝ¼Æâ'w]¤ƒx½s»ÐØ)ܯîŠç}/ÒI²æ¹Ý`h;à‡îw[À.ÒÕéÚçvWdh·…ü²q‘^ÂJç6^Š±Ì©››ÈBÕs;*³˜†\¤“X5¡·ÄvXr ·-7À<2ëüDÔ"×ÍðNPú¾¼XiX Ï߯ì‰AÞó!æ—»áV“˜ï{±bn m‹a¨*vHÉü˜%P¦+W–h[ðè­’¯TèÑÚ =[O×Ò3·â+={[ÏÞª~« ZÖîßþH¯ß -ëCúÀU—Q áß"õQ1¢ÞJâ«*ˆŠºZ¢FKz+½‚\0L0Dõ'ˆ(†Ý¨~q²|Vú¤½ ioš+ËÆXô{ýö®½7nÉ߿ӟ¢a‹Éâˆñ±ãðØ3¸.ɤcär¹=t(’Šulo»=Éòá¤^¤D=üÈf»Ç –Š¿bQÅY,’"÷ª¢á”fòuúãݹ"–/©ž¦]È>Ý%Vg¬®)ïü*&ŠV¢*€–ÈòyLîÁóþT±ÒÇgêev-ŽÞ<z&׫³§^SsåyA•»:+üOG›¤Ùå©êCUÌf+ñÉr]=}¿kKà«÷³Yøœ³¦¥xº³3›E¼¢§É,âÕT¥¢(G©i”J¢TÚ¦¶]­€V{Z†xBÁ½uƒ ¡íù¤Ò 2¤V冷ÞKQhsÈ»«Ksí¢‰žk7˜n—nFâ÷QúGñyìÑü¶ß=[¸/̰·vÞ”roxIó·6{¤zcîXYÂ^•ƫ]»Ýí ¬pG2¿.õðÅÁóŸ»äço»´¯»´ßŽ]âë—A¯oºÄã·Ç]¢[ä<¦‚nïU«¡HZ®ì–¿å‹—?//«B†Io^>?øõE,íõÏ‹7¿üúŸ±´ó ÛX…)WÚØžiÙŇëêÅsQSŸ¬vÝÕwË"vVý3Ï]Hš"ûþv¡.Ń cÐ"ŃBÆ1h‘âASˆ!c1h‘RCAI–µTP8mÊŠÇ MYÙÔ•µ,u ø*:§£õ.:ÚrqyA|µˆ[ohA<>Œ1ä»X–1á‡1âÑË€¨íŸËE£]-ÌÜ&ŽõÊ-W®ºÚ™º˜•îQk\¼còÝsùîÙw|ïà)Ú™ÒMˆ©Ø™ÛàÌìÓ‰}×Þkyr1ßµò¾Ì¥„?Îç`þXÍwžî¼¿µHTÊ8¹øôñZžD¥ÀFŠq®ô|וÈ<¶y7x4û®Mü®¶¬½Â‚ªë‹€ŒŒ8´¡° ÛPl =XÜÆ²ÞlY HÔx¬!õµ Kp”´Ê `_YMJ…i_YMJMA_YMJ5Àž²Ú” ÜSV›@qÂ{ÊjS(¼§¬6Ň‚X¼¬.Ň"HI¼¬.ŇºŽä‘gÛc½Ñî÷ßïNÿûnù>2~ü1ú 9 W¢¢¿Š–¨§Ó«„ô‰(`žˆ¢Ÿ‹‰èë,ÇD0ODÑÓÄDôu²c" X-”ô˜ˆ¾ÎyLD™q%ˆ(3îtê“D4uÇDDœI"šº`c""NÄ7QåX‰0qAè¼ÔuJE°Z§TP‚û uJ µqÚ¤”PÛÇ¡MJ µqÚ¤P×G¡^Juqê¥P×G¡^Juqê¥8hÑÇ ~Šƒq ê§8hÑJÆ ~Š…–­]¤XhÙjE AŠ…–­OAèµóˆ“Ýß]tÁÝîâ‡ââ;}%älfI£ž™gï¹ûž±?rßzÛ,ÜÞ÷Üè­Äû#ü^†r¸°T!€“üïUñ€’'ô°Ôñ§‰!´˜ºJšGµÔv›9R\håÝf1¿—? 3º`D—³ˆQ ³>Ûå{þv„éÅë.Ó‹×#L¿/º\62ÌöúeD'6R2¶xa[¼a;~{Üe³Ñ–a6zé2™kéØsq‘½2ÔR²G£0£Y”!™hU¸&Ìdn~|ªðÍ£*¹'º3Vž"Ô+MêÏ ˆ…¬e”¨ŸÉˆBž"faqMPÀá™úëY^†,/ûÁ62 ]¨¸îâ{‹£€¥ŽŒ°½ZDØ^ ¼V[«©©ã(#lLJ¶ãÃÑg‹I[ŒJ{áz7úd1=Œêñ0Æv8Àf={G/.ü9z9ÂTF‡ºœUØh¼ZGû rf¯’wª­Çæf ÞDÎns½[æ²³¡îÌwÊb–³=Qéà6ÒAT:’£Òám¤Ã¨t8$E¥£ÛHGQéhH:ŽJÇ·‘Ž£Òñô4*=½ô4*=’N¢ÒÉm¤“¨t2$F¥ÓÛH§Qé´GºóÊ[²;3›­Ö¤aª§9¶fò3ÊèÍÿíy³’u}³–£™US˜ÑœêùÍÑlÊÉÌ=qvÍÉŸ œ™ÌÍMŽf'~ÿÍÅίŽ2Ÿ£Ìvv¼Ã¸ŽvÕDµg?éìVÞ5K9·í³TÓÝãÅ1$ó¿ Ììj‚h6‹¿›ít—Gš×£M3¸è’IZS-8pé ,¸nÝ£° 鬄ÜÙm“Xµ:Òƒ•¤Ù¬˜Lñb=«·qú«kuùkj%bñòÕÏÝóZ6ê²,æ-SQŽêõ áÆøÝrч÷šu™®¯VƒLöm ¹Ìå0ôhÞ†(ÐÐ+ÝúK<åúköjížæóÿ™ï†ùcýy2ÿß™ýËìú<³KkÞÛ…»æê}{…ÃûË«ùãËùnœ?¾˜¯®®žÎ᳿€ÖtZÂþöÃ܆á=šå§³p9…yòlž<$XÝ´¢/%Æ£„ 2ÞÀJZôƒ,%Î'ù°:®âájZU!Áú@¯F‚5´u•ü#\Åa¤¹r¹^„¯¯‹žÔo°M7¿Äü|” ›taŽì㞿킞¿õ/^w/^ûˆßŽ]ˆ!ú˜×/#…6ijxÁ,Þø˜ã·Ç]Œ!ú±è¢¹ª­Pÿ~}…)ME”µ&\ˆ£ }T…u# .Ótªˆ¡«´]D%bØ"¥A¡ˆYÐŒ‹$„Gª«áE* G–˜zZެĮ5Ý,‚1ÂNþh¥LP´å;õ0Å'LIœ©gÊÏ1¥Æ™z&ñŠâE9zæäвõ« ;Åæ8p?GwÆÌq°~ŽîìTñ¤Ÿ¥»¿‘SSYQ³ß3žf}¤=-–âÔ j¾\mA’jZŒ|ùj¼ZøV£[…š|Èñar|èC±\A.ï"ˆwAIbÏs<Ïa r@Ž^2æÓ ,¡‹(c;ÝV´ØÁmF‹ ;‡ÿ~áþßWe»œý1w•ôä^dØw¦iÏþß‚D`ЉýþsJÍ¿yz/ÒG~òý¿#õ_|ø$üè†÷á“å㪳®^kû)”¶ [ÁýßÿF(IÒ¦þSðo‰ýþÃþïÊo¿øþýwõ™îˆÀ”ÐLÊRÉdiÎsšÉLA¢æ‰è;óoþª²†Â~¼³ªƒöÖÍѩͱ)îê‹û¾ŽÒÅ>ÖÓ‹ó/&Ç0ÿ¶}zçÈø§9Öç8g©`šñ$×g0¥s)¥LaMyFsœãXÜiÏ ÕÉ¡åe –ö“ªõI¥îÆ%Öw¨:ž´I3£zi7o;¶òÒ%”×öìŸì„ºS npÊ—òå§h|¹Á_npƒU’X6gž>)Ìd¿¦„'õ&)M @Ã9ƒ\À”BÅÔ"á=kÞ8D¢#zñfÑ‹ÍàJbh,Cp{þW¢)ÊĉR*7†6õˆÞ)Xd†8# ™w† ™0BE–‘Tg©VŠeÙýZäáуEnŠER­0K˜€’C(!TPPgŠA ’©9ÅÀÂÓ̉–€€Tˆ$œÀLe®iª¼×6ÒŽ,rS,2UZÛï0)ÆÌ5'Xf„q!¶gÏ">ùó æ[$×y’O k #„Ñ `)Aðý¶‘‹‡6rc,AªsF¹”ˆbŒYäPdZ+Óñ¦ Níµ'˜o‘FOQŽ£kÒÓÌ kr%QšŠŒæ÷k‘¯¹)iš4ª$@(‡™ä*4QÒžä9Ñ"'˜o‘F’âLg4Ë• )Ì9A÷<²98x°ÈM±ÈœÊŒæ’&%Bé!@8¦;wgf¢‰9ÉÀ|‹¤,À ‡›9Éi–Ø3mÍëï¹<>|°ÈM±È$K 9iN©"œ³LÓæ¥*T§z¢EN2°À"ó$u-ªBD¦ÕP§&ÆQÀüžýȇ6rc,2Ã"O)2™ä!e¿%›)e;]œ+4µ×žd`A¯Í„éßÍÈ<•e,¥<ã(P™Q‘é÷ÅýZäÁÃÈfc,’0–dŒ³<çŒéžM:­ã/gëÃ;þòaý£#Û©ñúæâTÙk£_„•éj0˜7deµº'zùë‘7«þÝþõ¥²‹>V+aÌÒ»)4ýA¾4MîZž˜ôà¶@û%ëåùõÙÙ•øw¥•Y•ÙE©ÏJõ¹ë"­x¾âƒ×ÏNÏ«. Þ àÊkÔRšs³(àÉMµ°ƒð¤¯6?üמ}¾¥þÌ¿vBèq=NRËþ ‚j1=Ú é¦ë±üÆõ8I-û7ÅôhC}›®Ç:\×ã$µìß €Ó£ Pmºë [\“Ô²ƒaw´}Ü{\ Ûã$µøz›˜í걘xßl=z‹âzœ¤–ÀÍY³G»Èk³õè-Tëñ{¦¨Å×ãØÒ•˜·Àï9ö{&©eÿA h½z<Öã$µìß vÓã»ÍWã»A-NRÊþ ¾íÙ~öâOjñwÚ|•8I'û7ˆKùJtç6VCùo¤Ê0žpW…¶s²Ï šÚR,*Þ©Ašý,Šob:Gâôìù÷éüùéùõZÏ~×+ûe>/šóyéŽÿZæÂLö,ÙK÷Ÿ´hf×õ_ÙOqaI«‹OWeL×^¹ÐÐéG}u)Ο™WÔ&Ô÷6QæåÂwðí?©ïj]L~8_c‹þ]ü—Ö·Ê@É}iƒt´AãÚ ‰éHo§Ž Ïç«cl_C£Žççë«8ÿ‹ëÕ•qW4i7N½•:&<Ÿ¯Ž±­:þ[‹•Õ˜‰?î® ÆºÚà4¦ d7†o¥Ž Ïç«clwJ£k…:¾ZË‘ÆßÓÝÒ6ÆŸn¿Øß÷ì[oB{ø}³ß¤ýŸ­óÔ£@—ý;@÷„q Ãý¿îó û?ÿ¿ÎþÏÄ…øó”ó„›J07>›õÂRA éµUÎRÙ4ŒñýŸ±i2gD…Ÿ¸^®O×gÅìgqUÝå­¶ú¹,O?š–y™_¬ŒË\Mœ·iÚ&šF9Š[/Oô釓b^¿¼,FÅ5€¦…öéëå§Sµ>qøâÊ‘‹K×Ð{ÔõòêìÂxåËÑ£ëÞ½½¶“×Kq½¾X^IQªÔ»uïÞm2m%û Ë‹ËõU+“‚ÖÊ© B?7°Ÿ]|hçhIí X ´nK;ð( ئªê£° 0«Ó¥‘tˆí2VÐ8°ÌàR(e'dë+B“[E©«#€Ø“]^¬ s+/]Bym¹|òzy}y©WKw³còïgÅ€³!kÄÚèèS‰ï >ÁdÑI_/3q¥½• Þ­x÷¦&‹6`í*ÉËÁ»-žÃOn'–p«šsû½µV6-z“_‡¡nnôj}j*~y&2}V¬ßIØ¢Uß;z2¿Òòâ\í?é2í?©[ÈÎögàZeAQ&kK€$!sMU’2D!×RÊjð/®þîº6d“*8„%iž§DæÊx(JÚYoLR™-¶Á"¶Ýå䃃)ì[„Î)ÖœR*ÂÆx4H`A%¹1¥±ÆFXÄô#w²û±³~“˜TþI˜v$µcW&©Ý‹˜ðœæ2Ñ) Æ}eh+Lbû}N0èœTǾQH.· H9É QJ¥1©Ìº°‚ŒÅØÇ(†Â†9Ó¹^™2‰µV÷àr‚Á0ç¤jú“T Í`Fp(%3­aPA V<ãéWµ“Ÿó~ú“Á8ç¤Æ«¹6žÊ5H̃H¢3™fPÀŒ+ÈÍfLbÛN0èœTþIØÏ Ì8Ì!Ñ(‚3fZœ*n>¸É&±ÉÝLb0Ò9©†¯“šá Nµéo&:7ªM7ÿŒ ¹ &ñ'ð:C“êØ7ŠåT'™1"ŽažÂef†¶0'öVá£ûpé°Qøú)}ð:+¯se,“¦Ls¥¯NW÷ã}F<'U`/ÆCØ¥”€fŠ\+šá I$ Æc®ÆÝìåÁû¼Ÿ~e0ä9©†}“ œs@¨ÊrÄ3ÓÜH™pæ$£œ¤*Ý “Øzïs0æ9©†ƒV‚ J1ÓšQÉQžq”¤Yƒ›fߓ؀ån‹³cž“j8HJtªÓMk’± 2„$U\c²­Äö{Ÿp0æ9©ŽƒZ@a†ˆJN°íqW™ÔŠe„˜ge|ît<æù0ÑxŸsñ»8=»•ÃK;§T{`'©ù#š˜w=3¯;µK¼Xnj?M(5ã߯j'^çýô'ƒ1ÏI5ì›T™ YnX˜ÝK+… Áx'€l‡Il»× cž“j8Xƒ8°V”rf·þiHÇŠØ¡LK4¶Üw#Lb:’»™Ä`ÌsR ë}YÊ×0åJBSòAÄLmKšd@è|LâOàuÆ<'Õq0:¤2ÅÊV"Êp"2 ̳™Á-­Ñû‚ô˜×yðÓÃL{ãuþŸ^]܇Ã9æœRã᢭Œ$Ld(M gN¹­bÓÚd¢Dò±Uáw3‘‡ó~º’Á0ç¤N–Ø…I $Ó9‚°D!û„”Ññ®d#LbëÎÁ0ç¤ÎD©I®0 ¦2mÌÇ>N%MÕ6˜Äô!wÛq8æœTÃÁ$;"…œ'B»¹D┘…ˆ Â£[G6Â$¶ßáDÃK;§ÔqûVÑ,Kr$þ¿½kýmã8âýSø%AûÁÒ¾a@•R¤('NŠ¢. aŸ6‰rEʉÿñ=É]‰º]YŒ‚SÈò=–ÇÝ™ßÎëfg©‹t޵4•²* YSµ=t†AñWÀ‰9œÅz¢TöqV' s6±½ÈãƒñHbשޙeÆÅt †JI‰©0‡“ƒÕ¹}2ælâp êÀlÀ`š*€ÍÄ#‡Pð8ØZQƒQ@â¹[t0ÌÙÄáb¡@ÀNTÊî®BSœŒHiä«¥l#P$ƒÄ`˜³‰Ã…Õ©óJ¤•Öp¤õŽg£‚Öò-F‰?€Õ9œÚÙÂ㢲AàÆbFÀU1‘Eð(ô ¢nðNÁbÑ`¨P ¸0)!µ‚˃÷ÊÖ\ø°³ƒÕ¹¶:Ý»à~žøÙÂØ‹½äuÒÁ€gïË7ìZ+n ædh"ï1‘ÊK~[°LϽ(•Á€g‡ oÄbÒ†„lTîg ˆ·Y‚l¬­$ž½é9ðlâpá @I¤J;ï¥Ð+Þí|¢°g˜‰ZÒÅ( 1mò¸‚ZƒÏ&ç`Òr †bÐV"¥áp‰`B­”i]ús€Äó7=Ù`À³‰Ç·–(ÉÁÔ !J‹ø³ÂI) $ÆjÇEp”`L±óœA¬ûÅS0]¨«8Ðâk©N¦g…¯SÅñWßÿ4ya¾|œð x6±½ÈÄpÆypt-'AP…M{\DU°‡ß'«s?úd0àÙÄáÂÄÀÊï¬äFSïrÚ9íæÒ côs€Äs·:ÙpÀ³…Ãe^'’š{Μ³1ìŒ`FIM u”áªo:HŒ@‘<•¼Î±-(^ëÁ,…/¦‚).b0TEDUcࣀÄÀê.ÛÙÂ㚈yJ÷ qê•3Sy ÂF^WˆKß°ŠEE´!\¯) ŽPEHêLñ¿ÑƒÕ¹x‚Õùã×§“WÿØC¬“ 'w¶°½ˆu¢‘´p—zãÀbSÕJ–*aÑÊZŽÎãpr°:÷£O†c-Î!Á‰wBihp¥¢h ̳ˆ%£ÆÖ2tF‰gouÆ:›8\@‚E'y "0EÌEÊÁlµÞslIm•À( 1Eò¸Rñƒ±Î&)à^q"R©†pNR`ªÖXG‡”µåÊ£€Äó·:ù`¬³…ÇÓãÍöV«í§ó®îc¬ †[e4ŽÑ‰A÷X£å–ƒVê;Õïé¼4“¯n®]˜üg½wúÙ«ÿngÛ ò³ Nn.ç«­¬su¨ÙÜYµ]õ~ÕÛ&êSÖ¶¦[ó¶5¡[´­ÌƼmIƒ6ûr·³%çc´œjí%•ÄD¸A>1÷Î2^ácðóÅò±€ÍiX‹Ìåmk!›¼mÍ—ÏÛÖ\¼{ùØÄ–œÈjÃ)sÜZL%Œ¤¯‹š"+$²UçãéÙò±–¾QÌÇÊ{ý¼mí…oÁóÊ›À¼míѽ|lbKÎGBµ!x:T#À €&Ñ0A}m>Æó“§äc-¼àM%5¸àM%g4o[K&ÌÛÖrÌîåc[r>‚ÔAAahÀAå{ ¼¦” ŒcÁU>¾yJõXY>š“°¶®°Pc•g…X­¬D*ØXY r/›¸R¨Gò ¨ˆJÐ14Y³¥©4©²ñõÉò±Vw¦«ÃI >V*U”êq¸„AÞ¶¶²ý~õØÂ–œNƒÌÆúËH \ê*t^²Tù ÊÇŸNŸµšéÅ|¬Ó.Dp¥ÊrÞ¶V~·˜•ª¬÷ò±‰-9µ }¼N!"±I%€Ñ†$(©E}>>¥z¬U-ÌÕJYʼm­^añÜJ!»‚ç•úf÷ò±‰-9á?”lªd `Š,(cÂ$—†€ª|üáõSÊÕÊV­9 k›x2¸²½c!++ÿnGeC¸{ùØÄ–œ ’Ìñ¤5 0¾„ˆ0ut0ÖÍœ“§ÔµýÏ =VÙ«àyeϤÒ~ÞL§«•=Vîåc [àËëÐÎú»+eÁáy‚ !¬e‚U lÐË>ª®jÜ…5ÒB*Ž­KžXã ¾¬' Ó¥û©Ž)ÿœÛ«›¹Ÿ¤|­“É«×íÇîýÙb‹‚©ïG´\13íà¾áêêQŸÞ]-–ç:>ÁËç÷ŸÜ}>ü ñ¼ý6nG»‰Žž†iŠ™MÃâp1ÁË 2""‹¯öݼ¾6é,u´?ÜÜðç‹exßßêOº››3šªå”÷–çÆ-gVCï»ýq 旻݂œä¤[ÁˆƒÕŦ\ƒÇªƒE¬ìÞˆXµE^;¸ªl²íÀPCR3ªÁµ£©@tÞ„¸bTE˜:=VËhÐJ2çÊÛ*À5ô ô0H+ ÷Ž£è‰%4Ecò¶ h˜"`Ó%ÿ€øSÉ‘$Îa4i=̾¾Pn§ÀbÑë°ëyÇÐE'•¶p»s±N·/oƒ™=2î~gÅ÷ËÙ|vys¹ÁÁú|Õ&¿Òƒ¡lÐÉüZ>¤?ÏÒ_Y?¤hPk/¿=Ü2޾ë+ÇZ~aÕ³wÁ\/mXŲo]Ùöv{M¬çÀíf}ßV.ÎÂ…/ú|ëzÖç[wVÈlË1B»)A”2h†¼÷1¦àù}^‹Év€ˆ¬d‚ï‘§gDŽ‘2€ÛŽ”!NâxoƒUˆ£íËÒÞ|mˆlXÈJ–Ø>™^9Dr’ypr8س ÌXðþûÈÄ´èª ‘-ËY«‚¾_ùú #GƒHJdˆ*©d\'‰IyP¼Ü“V­Ý°‘ð;šÓØIWÛ‚[½£œ+Ør¿ˆüáõ‘cA$ˆ4°S‰'G ”å„wÂÛVD6,GdmwÜý"òää€È± 2JgetIŠŒ‘R,´4 Î¥bÑFD6,Gdmç¼ý"ò§Ó"Ç‚Hd 8*ã”^h­¬ ó¸GFÙ°‘•ºæ{¶#2r4ˆ´ÌD.)3§ ¥žP$­÷Ié²èi«ÖnX¡µ+%¨ö¬µžÍh)”BVi£V*ÄèC—†æIJpJ´jí€åˆ¬•âÝ/"ß9@§½w|m©Ñ”¯MΣà[ƒ?-øÊÍÓCWOé^é"„» 3Fp)¦^#$¥ B§<Î`H°ŽÝßÝD½uJÿúhuýn¢ÿª§›^­ûˆÛúC©ˆ•ÄZqÐ64½cÌE ˆð~VqÑGÒÖGf£UyÊ€=FP%iDë`•{kÀ{Øö1½˜ÜÕË#|DD÷Æà„Á_r„ùÆpË#Œpö/?Òð¿:§#Œ -RG:ݧÝ}¼sìd…«MkD¶¾ªž>àep÷C;Þlßÿæyºi)ÌV*¬ÖXœ/–׳ùÛ—Ç7‹ëã‹+g.Žíl~¼˜_¾–“ˆ›¼xõáfòÂM¾¼X~•«ËË›ùlùñ˷˯ºËéÕøæäjæÓqÿ®ýé7;ïM›PгµÑ«¿Ÿ¹7ïê!½Xf'½@ oïïAä.Ý;¸_œ®Z˜‹‹«_Îç7‹—iÍÏö¬GY"™»òÝ\Ø¯î­Æwu³„^Îæë÷² Ðõ÷*%ŒlOsÙÕN…é“9Ùòðónê¥iô{Òþ©ðN}7›È2}@PmSÐtìtÜ~wÓ±‰,Ó„‚vÑ1…úÆNÇM¸r7›È2}@cS€jìtÜÙvÓ±‰,Ó¸Ý;åã3Àãëa<6‘%§cíÅì]:®^¼›ŽYòÀn:6‘¥0s*I@»ð˜’¼ÆMÇ,Qí»§…,9k©+»èxú ìžÓa»§‰,Óvêëg@Ç“a:6‘eú€ØÅ.:¾?ß R±‰(Ó„+r*~îf:ø<Áw›ŸœG˜ž3HÄ&šL—ʉøãwß~?9]»ò¿)ËxÂc zûiCøl Ôôx°X·5H3}@Rü6¦sff'æ“ogó›e˜œ|׿møKÍùõ<Î.Ââ<·¼º~‰ŽøôøÖµÔ,åõ/RÈgu.]_ý²ècºé¨ Í.Ãâ½™¿„)šnlÎÓMûÄwü)Õ/‰›4øuiÖÁå´¨%ýoiñ¯~NÄ h_Ôw¨!wSC P¤ŸGކñå䨭kØ’ãÛ«ùò]¢™|susýhbtÛÄߢ†ä»¨ADç§~9Æ—“£¶tcKŽs¨'gæã㉡Ô]jh¹‹”"N±bŸEކñå䨭NÙ’#AbEŽßLrðÝs”Ñgb£at½jk*o´%Æw©†ÑE6ò¾îQ*pôò uD.âä‹Å¦Rwy+á Æ•VC½üÓásø>‡Ï³úüN˜x unbound-1.13.1/dnstap/0000755000175000017500000000000014010434640014170 5ustar wouterwouterunbound-1.13.1/dnstap/dnstap_fstrm.h0000644000175000017500000002177114010434640017055 0ustar wouterwouter/* * dnstap/dnstap_fstrm.h - Frame Streams protocol for dnstap * * Copyright (c) 2020, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * * Definitions for the Frame Streams data transport protocol for * dnstap message logs. */ #ifndef DNSTAP_FSTRM_H #define DNSTAP_FSTRM_H /* Frame Streams data transfer protocol encode for DNSTAP messages. * The protocol looks to be specified in the libfstrm library. * * Quick writeup for DNSTAP usage, from reading fstrm/control.h eloquent * comments and fstrm/control.c for some bytesize details (the content type * length). * * The Frame Streams can be unidirectional or bi-directional. * bi-directional streams use control frame types READY, ACCEPT and FINISH. * uni-directional streams use control frame types START and STOP. * unknown control frame types should be ignored by the receiver, they * do not change the data frame encoding. * * bi-directional control frames implement a simple handshake protocol * between sender and receiver. * * The uni-directional control frames have one start and one stop frame, * before and after the data. The start frame can have a content type. * The start and stop frames are not optional. * * data frames are preceded by 4byte length, bigendian. * zero length data frames are not possible, they are an escape that * signals the presence of a control frame. * * a control frame consists of 0 value in 4byte bigendian, this is really * the data frame length, with 0 the escape sequence that indicates one * control frame follows. * Then, 4byte bigendian, length of the control frame message. * Then, the control frame payload (of that length). with in it: * 4byte bigendian, control type (eg. START, STOP, READY, ACCEPT, FINISH). * perhaps nothing more (STOP, FINISH), but for other types maybe * control fields * 4byte bigendian, the control-field-type, currently only content-type. * 4byte bigendian, length of the string for this option. * .. bytes of that string. * * The START type can have only one field. Field max len 256. * control frame max frame length 512 (excludes the 0-escape and control * frame length bytes). * * the bidirectional type of transmission is like this: * client sends READY (with content type included), * client waits for ACCEPT (with content type included), * client sends START (with matched content type from ACCEPT) * .. data frames * client sends STOP. * client waits for FINISH frame. * */ /** max length of Frame Streams content type field string */ #define FSTRM_CONTENT_TYPE_LENGTH_MAX 256 /** control frame value to denote the control frame ACCEPT */ #define FSTRM_CONTROL_FRAME_ACCEPT 0x01 /** control frame value to denote the control frame START */ #define FSTRM_CONTROL_FRAME_START 0x02 /** control frame value to denote the control frame STOP */ #define FSTRM_CONTROL_FRAME_STOP 0x03 /** control frame value to denote the control frame READY */ #define FSTRM_CONTROL_FRAME_READY 0x04 /** control frame value to denote the control frame FINISH */ #define FSTRM_CONTROL_FRAME_FINISH 0x05 /** the constant that denotes the control field type that is the * string for the content type of the stream. */ #define FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE 0x01 /** the content type for DNSTAP frame streams */ #define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap" /** * This creates an FSTRM control frame of type START. * @param contenttype: a zero delimited string with the content type. * eg. use the constant DNSTAP_CONTENT_TYPE, which is defined as * "protobuf:dnstap.Dnstap", for a dnstap frame stream. * @param len: if a buffer is returned this is the length of that buffer. * @return NULL on malloc failure. Returns a malloced buffer with the * protocol message. The buffer starts with the 4 bytes of 0 that indicate * a control frame. The buffer should be sent without preceding it with * the 'len' variable (like data frames are), but straight the content of the * buffer, because the lengths are included in the buffer. This is so that * the zero control indicator can be included before the control frame length. */ void* fstrm_create_control_frame_start(char* contenttype, size_t* len); /** * This creates an FSTRM control frame of type READY. * @param contenttype: a zero delimited string with the content type. * eg. use the constant DNSTAP_CONTENT_TYPE, which is defined as * "protobuf:dnstap.Dnstap", for a dnstap frame stream. * @param len: if a buffer is returned this is the length of that buffer. * @return NULL on malloc failure. Returns a malloced buffer with the * protocol message. The buffer starts with the 4 bytes of 0 that indicate * a control frame. The buffer should be sent without preceding it with * the 'len' variable (like data frames are), but straight the content of the * buffer, because the lengths are included in the buffer. This is so that * the zero control indicator can be included before the control frame length. */ void* fstrm_create_control_frame_ready(char* contenttype, size_t* len); /** * This creates an FSTRM control frame of type STOP. * @param len: if a buffer is returned this is the length of that buffer. * @return NULL on malloc failure. Returns a malloced buffer with the * protocol message. The buffer starts with the 4 bytes of 0 that indicate * a control frame. The buffer should be sent without preceding it with * the 'len' variable (like data frames are), but straight the content of the * buffer, because the lengths are included in the buffer. This is so that * the zero control indicator can be included before the control frame length. */ void* fstrm_create_control_frame_stop(size_t* len); /** * This creates an FSTRM control frame of type ACCEPT. * @param contenttype: a zero delimited string with the content type. * for dnstap streams use DNSTAP_CONTENT_TYPE. * @param len: if a buffer is returned this is the length of that buffer. * @return NULL on malloc failure. Returns a malloced buffer with the * protocol message. The buffer starts with the 4 bytes of 0 that indicate * a control frame. The buffer should be sent without preceding it with * the 'len' variable (like data frames are), but straight the content of the * buffer, because the lengths are included in the buffer. This is so that * the zero control indicator can be included before the control frame length. */ void* fstrm_create_control_frame_accept(char* contenttype, size_t* len); /** * This creates an FSTRM control frame of type FINISH. * @param len: if a buffer is returned this is the length of that buffer. * @return NULL on malloc failure. Returns a malloced buffer with the * protocol message. The buffer starts with the 4 bytes of 0 that indicate * a control frame. The buffer should be sent without preceding it with * the 'len' variable (like data frames are), but straight the content of the * buffer, because the lengths are included in the buffer. This is so that * the zero control indicator can be included before the control frame length. */ void* fstrm_create_control_frame_finish(size_t* len); /** * Return string that describes a control packet. For debug, logs. * Like 'start content-type(protobuf:dnstap.Dnstap)' or 'stop'. * @param pkt: the packet data, that is the data after the 4 zero start * bytes and 4 length bytes. * @param len: the length of the control packet data, in pkt. This is the * ntohl of the 4 bytes length preceding the data. * @return zero delimited string, malloced. Or NULL on malloc failure. */ char* fstrm_describe_control(void* pkt, size_t len); #endif /* DNSTAP_FSTRM_H */ unbound-1.13.1/dnstap/dnstap.h0000644000175000017500000001457214010434640015643 0ustar wouterwouter/* dnstap support for Unbound */ /* * Copyright (c) 2013-2014, Farsight Security, Inc. * 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. * * 3. Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UNBOUND_DNSTAP_H #define UNBOUND_DNSTAP_H #include "dnstap/dnstap_config.h" #ifdef USE_DNSTAP struct config_file; struct sldns_buffer; struct dt_msg_queue; struct dt_env { /** the io thread (made by the struct daemon) */ struct dt_io_thread* dtio; /** valid in worker struct, not in daemon struct, the per-worker * message list */ struct dt_msg_queue* msgqueue; /** dnstap "identity" field, NULL if disabled */ char *identity; /** dnstap "version" field, NULL if disabled */ char *version; /** length of "identity" field */ unsigned len_identity; /** length of "version" field */ unsigned len_version; /** whether to log Message/RESOLVER_QUERY */ unsigned log_resolver_query_messages : 1; /** whether to log Message/RESOLVER_RESPONSE */ unsigned log_resolver_response_messages : 1; /** whether to log Message/CLIENT_QUERY */ unsigned log_client_query_messages : 1; /** whether to log Message/CLIENT_RESPONSE */ unsigned log_client_response_messages : 1; /** whether to log Message/FORWARDER_QUERY */ unsigned log_forwarder_query_messages : 1; /** whether to log Message/FORWARDER_RESPONSE */ unsigned log_forwarder_response_messages : 1; }; /** * Create dnstap environment object. Afterwards, call dt_apply_cfg() to fill in * the config variables and dt_init() to fill in the per-worker state. Each * worker needs a copy of this object but with its own I/O queue (the fq field * of the structure) to ensure lock-free access to its own per-worker circular * queue. Duplicate the environment object if more than one worker needs to * share access to the dnstap I/O socket. * @param cfg: with config settings. * @return dt_env object, NULL on failure. */ struct dt_env * dt_create(struct config_file* cfg); /** * Apply config settings. * @param env: dnstap environment object. * @param cfg: new config settings. */ void dt_apply_cfg(struct dt_env *env, struct config_file *cfg); /** * Initialize per-worker state in dnstap environment object. * @param env: dnstap environment object to initialize, created with dt_create(). * @param base: event base for wakeup timer. * @return: true on success, false on failure. */ int dt_init(struct dt_env *env, struct comm_base* base); /** * Deletes the per-worker state created by dt_init */ void dt_deinit(struct dt_env *env); /** * Delete dnstap environment object. Closes dnstap I/O socket and deletes all * per-worker I/O queues. */ void dt_delete(struct dt_env *env); /** * Create and send a new dnstap "Message" event of type CLIENT_QUERY. * @param env: dnstap environment object. * @param qsock: address/port of client. * @param cptype: comm_udp or comm_tcp. * @param qmsg: query message. */ void dt_msg_send_client_query(struct dt_env *env, struct sockaddr_storage *qsock, enum comm_point_type cptype, struct sldns_buffer *qmsg); /** * Create and send a new dnstap "Message" event of type CLIENT_RESPONSE. * @param env: dnstap environment object. * @param qsock: address/port of client. * @param cptype: comm_udp or comm_tcp. * @param rmsg: response message. */ void dt_msg_send_client_response(struct dt_env *env, struct sockaddr_storage *qsock, enum comm_point_type cptype, struct sldns_buffer *rmsg); /** * Create and send a new dnstap "Message" event of type RESOLVER_QUERY or * FORWARDER_QUERY. The type used is dependent on the value of the RD bit * in the query header. * @param env: dnstap environment object. * @param rsock: address/port of server the query is being sent to. * @param cptype: comm_udp or comm_tcp. * @param zone: query zone. * @param zone_len: length of zone. * @param qmsg: query message. */ void dt_msg_send_outside_query(struct dt_env *env, struct sockaddr_storage *rsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, struct sldns_buffer *qmsg); /** * Create and send a new dnstap "Message" event of type RESOLVER_RESPONSE or * FORWARDER_RESPONSE. The type used is dependent on the value of the RD bit * in the query header. * @param env: dnstap environment object. * @param rsock: address/port of server the response was received from. * @param cptype: comm_udp or comm_tcp. * @param zone: query zone. * @param zone_len: length of zone. * @param qbuf: outside_network's qbuf key. * @param qbuf_len: length of outside_network's qbuf key. * @param qtime: time query message was sent. * @param rtime: time response message was sent. * @param rmsg: response message. */ void dt_msg_send_outside_response(struct dt_env *env, struct sockaddr_storage *rsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, uint8_t *qbuf, size_t qbuf_len, const struct timeval *qtime, const struct timeval *rtime, struct sldns_buffer *rmsg); #endif /* USE_DNSTAP */ #endif /* UNBOUND_DNSTAP_H */ unbound-1.13.1/dnstap/dtstream.h0000644000175000017500000002740414010434640016173 0ustar wouterwouter/* * dnstap/dtstream.h - Frame Streams thread for unbound DNSTAP * * Copyright (c) 2020, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * * An implementation of the Frame Streams data transport protocol for * the Unbound DNSTAP message logging facility. */ #ifndef DTSTREAM_H #define DTSTREAM_H #include "util/locks.h" struct dt_msg_entry; struct dt_io_list_item; struct dt_io_thread; struct config_file; struct comm_base; /** * A message buffer with dnstap messages queued up. It is per-worker. * It has locks to synchronize. If the buffer is full, a new message * cannot be added and is discarded. A thread reads the messages and sends * them. */ struct dt_msg_queue { /** lock of the buffer structure. Hold this lock to add or remove * entries to the buffer. Release it so that other threads can also * put messages to log, or a message can be taken out to send away * by the writer thread. */ lock_basic_type lock; /** the maximum size of the buffer, in bytes */ size_t maxsize; /** current size of the buffer, in bytes. data bytes of messages. * If a new message make it more than maxsize, the buffer is full */ size_t cursize; /** number of messages in the queue */ int msgcount; /** list of messages. The messages are added to the back and taken * out from the front. */ struct dt_msg_entry* first, *last; /** reference to the io thread to wakeup */ struct dt_io_thread* dtio; /** the wakeup timer for dtio, on worker event base */ struct comm_timer* wakeup_timer; }; /** * An entry in the dt_msg_queue. contains one DNSTAP message. * It is malloced. */ struct dt_msg_entry { /** next in the list. */ struct dt_msg_entry* next; /** the buffer with the data to send, an encoded DNSTAP message */ void* buf; /** the length to send. */ size_t len; }; /** * Containing buffer and counter for reading DNSTAP frames. */ struct dt_frame_read_buf { /** Buffer containing frame, except length counter(s). */ void* buf; /** Number of bytes written to buffer. */ size_t buf_count; /** Capacity of the buffer. */ size_t buf_cap; /** Frame length field. Will contain the 2nd length field for control * frames. */ uint32_t frame_len; /** Number of bytes that have been written to the frame_length field. */ size_t frame_len_done; /** Set to 1 if this is a control frame, 0 otherwise (ie data frame). */ int control_frame; }; /** * IO thread that reads from the queues and writes them. */ struct dt_io_thread { /** the thread number for the dtio thread, * must be first to cast thread arg to int* in checklock code. */ int threadnum; /** event base, for event handling */ void* event_base; /** list of queues that is registered to get written */ struct dt_io_list_item* io_list; /** iterator point in the io_list, to pick from them in a * round-robin fashion, instead of only from the first when busy. * if NULL it means start at the start of the list. */ struct dt_io_list_item* io_list_iter; /** thread id, of the io thread */ ub_thread_type tid; /** if the io processing has started */ int started; /** ssl context for the io thread, for tls connections. type SSL_CTX* */ void* ssl_ctx; /** if SNI will be used for TLS connections. */ int tls_use_sni; /** file descriptor that the thread writes to */ int fd; /** event structure that the thread uses */ void* event; /** the event is added */ int event_added; /** event added is a write event */ int event_added_is_write; /** check for nonblocking connect errors on fd */ int check_nb_connect; /** ssl for current connection, type SSL* */ void* ssl; /** true if the handshake for SSL is done, 0 if not */ int ssl_handshake_done; /** true if briefly the SSL wants a read event, 0 if not. * This happens during negotiation, we then do not want to write, * but wait for a read event. */ int ssl_brief_read; /** true if SSL_read is waiting for a write event. Set back to 0 after * single write event is handled. */ int ssl_brief_write; /** the buffer that currently getting written, or NULL if no * (partial) message written now */ void* cur_msg; /** length of the current message */ size_t cur_msg_len; /** number of bytes written for the current message */ size_t cur_msg_done; /** number of bytes of the length that have been written, * for the current message length that precedes the frame */ size_t cur_msg_len_done; /** lock on wakeup_timer_enabled */ lock_basic_type wakeup_timer_lock; /** if wakeup timer is enabled in some thread */ int wakeup_timer_enabled; /** command pipe that stops the pipe if closed. Used to quit * the program. [0] is read, [1] is written to. */ int commandpipe[2]; /** the event to listen to the commandpipe */ void* command_event; /** the io thread wants to exit */ int want_to_exit; /** in stop flush, this is nonNULL and references the stop_ev */ void* stop_flush_event; /** the timer event for connection retries */ void* reconnect_timer; /** if the reconnect timer is added to the event base */ int reconnect_is_added; /** the current reconnection timeout, it is increased with * exponential backoff, in msec */ int reconnect_timeout; /** If the log server is connected to over unix domain sockets, * eg. a file is named that is created to log onto. */ int upstream_is_unix; /** if the log server is connected to over TCP. The ip address and * port are used */ int upstream_is_tcp; /** if the log server is connected to over TLS. ip address, port, * and client certificates can be used for authentication. */ int upstream_is_tls; /** Perform bidirectional Frame Streams handshake before sending * messages. */ int is_bidirectional; /** Set if the READY control frame has been sent. */ int ready_frame_sent; /** Set if valid ACCEPT frame is received. */ int accept_frame_received; /** (partially) read frame */ struct dt_frame_read_buf read_frame; /** the file path for unix socket (or NULL) */ char* socket_path; /** the ip address and port number (or NULL) */ char* ip_str; /** is the TLS upstream authenticated by name, if nonNULL, * we use the same cert bundle as used by other TLS streams. */ char* tls_server_name; /** are client certificates in use */ int use_client_certs; /** client cert files: the .key file */ char* client_key_file; /** client cert files: the .pem file */ char* client_cert_file; }; /** * IO thread list of queues list item * lists a worker queue that should be looked at and sent to the log server. */ struct dt_io_list_item { /** next in the list of buffers to inspect */ struct dt_io_list_item* next; /** buffer of this worker */ struct dt_msg_queue* queue; }; /** * Create new (empty) worker message queue. Limit set to default on max. * @param base: event base for wakeup timer. * @return NULL on malloc failure or a new queue (not locked). */ struct dt_msg_queue* dt_msg_queue_create(struct comm_base* base); /** * Delete a worker message queue. It has to be unlinked from access, * so it can be deleted without lock worries. The queue is emptied (deleted). * @param mq: message queue. */ void dt_msg_queue_delete(struct dt_msg_queue* mq); /** * Submit a message to the queue. The queue is locked by the routine, * the message is inserted, and then the queue is unlocked so the * message can be picked up by the writer thread. * @param mq: message queue. * @param buf: buffer with message (dnstap contents). * The buffer must have been malloced by caller. It is linked in * the queue, and is free()d after use. If the routine fails * the buffer is freed as well (and nothing happens, the item * could not be logged). * @param len: length of buffer. */ void dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len); /** timer callback to wakeup dtio thread to process messages */ void mq_wakeup_cb(void* arg); /** * Create IO thread. * @return new io thread object. not yet started. or NULL malloc failure. */ struct dt_io_thread* dt_io_thread_create(void); /** * Delete the IO thread structure. * @param dtio: the io thread that is deleted. It must not be running. */ void dt_io_thread_delete(struct dt_io_thread* dtio); /** * Apply config to the dtio thread * @param dtio: io thread, not yet started. * @param cfg: config file struct. * @return false on malloc failure. */ int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg); /** * Register a msg queue to the io thread. It will be polled to see if * there are messages and those then get removed and sent, when the thread * is running. * @param dtio: the io thread. * @param mq: message queue to register. * @return false on failure (malloc failure). */ int dt_io_thread_register_queue(struct dt_io_thread* dtio, struct dt_msg_queue* mq); /** * Unregister queue from io thread. * @param dtio: the io thread. * @param mq: message queue. */ void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, struct dt_msg_queue* mq); /** * Start the io thread * @param dtio: the io thread. * @param event_base_nothr: the event base to attach the events to, in case * we are running without threads. With threads, this is ignored * and a thread is started to process the dnstap log messages. * @param numworkers: number of worker threads. The dnstap io thread is * that number +1 as the threadnumber (in logs). * @return false on failure. */ int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr, int numworkers); /** * Stop the io thread * @param dtio: the io thread. */ void dt_io_thread_stop(struct dt_io_thread* dtio); /** callback for the dnstap reconnect, to start reconnecting to output */ void dtio_reconnect_timeout_cb(int fd, short bits, void* arg); /** callback for the dnstap events, to write to the output */ void dtio_output_cb(int fd, short bits, void* arg); /** callback for the dnstap commandpipe, to stop the dnstap IO */ void dtio_cmd_cb(int fd, short bits, void* arg); /** callback for the timer when the thread stops and wants to finish up */ void dtio_stop_timer_cb(int fd, short bits, void* arg); /** callback for the output when the thread stops and wants to finish up */ void dtio_stop_ev_cb(int fd, short bits, void* arg); /** callback for unbound-dnstap-socket */ void dtio_tap_callback(int fd, short bits, void* arg); /** callback for unbound-dnstap-socket */ void dtio_mainfdcallback(int fd, short bits, void* arg); #endif /* DTSTREAM_H */ unbound-1.13.1/dnstap/dnstap_config.h.in0000644000175000017500000000060214010434640017562 0ustar wouterwouter#ifndef UNBOUND_DNSTAP_CONFIG_H #define UNBOUND_DNSTAP_CONFIG_H /* * Process this file (dnstap_config.h.in) with AC_CONFIG_FILES to generate * dnstap_config.h. * * This file exists so that USE_DNSTAP can be used without including config.h. */ #if @ENABLE_DNSTAP@ /* ENABLE_DNSTAP */ # ifndef USE_DNSTAP # define USE_DNSTAP 1 # endif #endif #endif /* UNBOUND_DNSTAP_CONFIG_H */ unbound-1.13.1/dnstap/dnstap_fstrm.c0000644000175000017500000001557714010434640017057 0ustar wouterwouter/* * dnstap/dnstap_fstrm.c - Frame Streams protocol for dnstap * * Copyright (c) 2020, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * * Definitions for the Frame Streams data transport protocol for * dnstap message logs. */ #include "config.h" #include "dnstap/dnstap_fstrm.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" void* fstrm_create_control_frame_start(char* contenttype, size_t* len) { uint32_t* control; size_t n; /* start framestream message: * 4byte 0: control indicator. * 4byte bigendian: length of control frame * 4byte bigendian: type START * 4byte bigendian: option: content-type * 4byte bigendian: length of string * string of content type (dnstap) */ n = 4+4+4+4+4+strlen(contenttype); control = malloc(n); if(!control) return NULL; control[0] = 0; control[1] = htonl(4+4+4+strlen(contenttype)); control[2] = htonl(FSTRM_CONTROL_FRAME_START); control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); control[4] = htonl(strlen(contenttype)); memmove(&control[5], contenttype, strlen(contenttype)); *len = n; return control; } void* fstrm_create_control_frame_stop(size_t* len) { uint32_t* control; size_t n; /* stop framestream message: * 4byte 0: control indicator. * 4byte bigendian: length of control frame * 4byte bigendian: type STOP */ n = 4+4+4; control = malloc(n); if(!control) return NULL; control[0] = 0; control[1] = htonl(4); control[2] = htonl(FSTRM_CONTROL_FRAME_STOP); *len = n; return control; } void* fstrm_create_control_frame_ready(char* contenttype, size_t* len) { uint32_t* control; size_t n; /* start bidirectional stream: * 4 bytes 0 escape * 4 bytes bigendian length of frame * 4 bytes bigendian type READY * 4 bytes bigendian frame option content type * 4 bytes bigendian length of string * string of content type. */ /* len includes the escape and framelength */ n = 4+4+4+4+4+strlen(contenttype); control = malloc(n); if(!control) { return NULL; } control[0] = 0; control[1] = htonl(4+4+4+strlen(contenttype)); control[2] = htonl(FSTRM_CONTROL_FRAME_READY); control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); control[4] = htonl(strlen(contenttype)); memmove(&control[5], contenttype, strlen(contenttype)); *len = n; return control; } void* fstrm_create_control_frame_accept(char* contenttype, size_t* len) { uint32_t* control; size_t n; /* control frame on reply: * 4 bytes 0 escape * 4 bytes bigendian length of frame * 4 bytes bigendian type ACCEPT * 4 bytes bigendian frame option content type * 4 bytes bigendian length of string * string of content type. */ /* len includes the escape and framelength */ n = 4+4+4+4+4+strlen(contenttype); control = malloc(n); if(!control) { return NULL; } control[0] = 0; control[1] = htonl(4+4+4+strlen(contenttype)); control[2] = htonl(FSTRM_CONTROL_FRAME_ACCEPT); control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE); control[4] = htonl(strlen(contenttype)); memmove(&control[5], contenttype, strlen(contenttype)); *len = n; return control; } void* fstrm_create_control_frame_finish(size_t* len) { uint32_t* control; size_t n; /* control frame on reply: * 4 bytes 0 escape * 4 bytes bigendian length of frame * 4 bytes bigendian type FINISH */ /* len includes the escape and framelength */ n = 4+4+4; control = malloc(n); if(!control) { return NULL; } control[0] = 0; control[1] = htonl(4); control[2] = htonl(FSTRM_CONTROL_FRAME_FINISH); *len = n; return control; } char* fstrm_describe_control(void* pkt, size_t len) { uint32_t frametype = 0; char buf[512]; char* str = buf; size_t remain, slen = sizeof(buf); uint8_t* pos; buf[0]=0; if(len < 4) { snprintf(buf, sizeof(buf), "malformed control frame, " "too short, len=%u", (unsigned int)len); return strdup(buf); } frametype = sldns_read_uint32(pkt); if(frametype == FSTRM_CONTROL_FRAME_ACCEPT) { (void)sldns_str_print(&str, &slen, "accept"); } else if(frametype == FSTRM_CONTROL_FRAME_START) { (void)sldns_str_print(&str, &slen, "start"); } else if(frametype == FSTRM_CONTROL_FRAME_STOP) { (void)sldns_str_print(&str, &slen, "stop"); } else if(frametype == FSTRM_CONTROL_FRAME_READY) { (void)sldns_str_print(&str, &slen, "ready"); } else if(frametype == FSTRM_CONTROL_FRAME_FINISH) { (void)sldns_str_print(&str, &slen, "finish"); } else { (void)sldns_str_print(&str, &slen, "type%d", (int)frametype); } /* show the content type options */ pos = pkt + 4; remain = len - 4; while(remain >= 8) { uint32_t field_type = sldns_read_uint32(pos); uint32_t field_len = sldns_read_uint32(pos+4); if(remain < field_len) { (void)sldns_str_print(&str, &slen, "malformed_field"); break; } if(field_type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) { char tempf[512]; (void)sldns_str_print(&str, &slen, " content-type("); if(field_len < sizeof(tempf)-1) { memmove(tempf, pos+8, field_len); tempf[field_len] = 0; (void)sldns_str_print(&str, &slen, "%s", tempf); } else { (void)sldns_str_print(&str, &slen, ""); } (void)sldns_str_print(&str, &slen, ")"); } else { (void)sldns_str_print(&str, &slen, " field(type %u, length %u)", (unsigned int)field_type, (unsigned int)field_len); } pos += 8 + field_len; remain -= (8 + field_len); } if(remain > 0) (void)sldns_str_print(&str, &slen, " trailing-bytes" "(length %u)", (unsigned int)remain); return strdup(buf); } unbound-1.13.1/dnstap/unbound-dnstap-socket.c0000644000175000017500000011766414010434640020602 0ustar wouterwouter/* * dnstap/unbound-dnstap-socket.c - debug program that listens for DNSTAP logs. * * Copyright (c) 2020, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This program listens on a DNSTAP socket for logged messages. */ #include "config.h" #ifdef HAVE_GETOPT_H #include #endif #include #include #include #include #include #ifdef HAVE_SYS_UN_H #include #endif #include #include #include #include "dnstap/dtstream.h" #include "dnstap/dnstap_fstrm.h" #include "util/log.h" #include "util/ub_event.h" #include "util/net_help.h" #include "services/listen_dnsport.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #ifdef USE_DNSTAP #include #include "dnstap/dnstap.pb-c.h" #endif /* USE_DNSTAP */ #include "util/config_file.h" /** listen backlog on TCP connections for dnstap logs */ #define LISTEN_BACKLOG 16 /** usage information for streamtcp */ static void usage(char* argv[]) { printf("usage: %s [options]\n", argv[0]); printf(" Listen to dnstap messages\n"); printf("stdout has dnstap log, stderr has verbose server log\n"); printf("-u listen to unix socket with this file name\n"); printf("-s listen for TCP on the IP and port\n"); printf("-t listen for TLS on IP and port\n"); printf("-x server key file for TLS service\n"); printf("-y server cert file for TLS service\n"); printf("-z cert file to verify client connections\n"); printf("-l long format for DNS printout\n"); printf("-v more verbose log output\n"); printf("-h this help text\n"); exit(1); } /** long format option, for multiline printout per message */ static int longformat = 0; struct tap_socket_list; struct tap_socket; /** main tap callback data */ struct main_tap_data { /** the event base (to loopexit) */ struct ub_event_base* base; /** the list of accept sockets */ struct tap_socket_list* acceptlist; }; /** tap callback variables */ struct tap_data { /** the fd */ int fd; /** the ub event */ struct ub_event* ev; /** the SSL for TLS streams */ SSL* ssl; /** is the ssl handshake done */ int ssl_handshake_done; /** we are briefly waiting to write (in the struct event) */ int ssl_brief_write; /** string that identifies the socket (or NULL), like IP address */ char* id; /** have we read the length, and how many bytes of it */ int len_done; /** have we read the data, and how many bytes of it */ size_t data_done; /** are we reading a control frame */ int control_frame; /** are we bi-directional (if false, uni-directional) */ int is_bidirectional; /** data of the frame */ uint8_t* frame; /** length of this frame */ size_t len; }; /** list of sockets */ struct tap_socket_list { /** next in list */ struct tap_socket_list* next; /** the socket */ struct tap_socket* s; }; /** tap socket */ struct tap_socket { /** fd of socket */ int fd; /** the event for it */ struct ub_event *ev; /** has the event been added */ int ev_added; /** the callback, for the event, ev_cb(fd, bits, arg) */ void (*ev_cb)(int, short, void*); /** data element, (arg for the tap_socket struct) */ void* data; /** socketpath, if this is an AF_LOCAL socket */ char* socketpath; /** IP, if this is a TCP socket */ char* ip; /** for a TLS socket, the tls context */ SSL_CTX* sslctx; }; /** del the tap event */ static void tap_socket_delev(struct tap_socket* s) { if(!s) return; if(!s->ev) return; if(!s->ev_added) return; ub_event_del(s->ev); s->ev_added = 0; } /** close the tap socket */ static void tap_socket_close(struct tap_socket* s) { if(!s) return; if(s->fd == -1) return; close(s->fd); s->fd = -1; } /** delete tap socket */ static void tap_socket_delete(struct tap_socket* s) { if(!s) return; #ifdef HAVE_SSL SSL_CTX_free(s->sslctx); #endif ub_event_free(s->ev); free(s->socketpath); free(s->ip); free(s); } /** create new socket (unconnected, not base-added), or NULL malloc fail */ static struct tap_socket* tap_socket_new_local(char* socketpath, void (*ev_cb)(int, short, void*), void* data) { struct tap_socket* s = calloc(1, sizeof(*s)); if(!s) { log_err("malloc failure"); return NULL; } s->socketpath = strdup(socketpath); if(!s->socketpath) { free(s); log_err("malloc failure"); return NULL; } s->fd = -1; s->ev_cb = ev_cb; s->data = data; return s; } /** create new socket (unconnected, not base-added), or NULL malloc fail */ static struct tap_socket* tap_socket_new_tcpaccept(char* ip, void (*ev_cb)(int, short, void*), void* data) { struct tap_socket* s = calloc(1, sizeof(*s)); if(!s) { log_err("malloc failure"); return NULL; } s->ip = strdup(ip); if(!s->ip) { free(s); log_err("malloc failure"); return NULL; } s->fd = -1; s->ev_cb = ev_cb; s->data = data; return s; } /** create new socket (unconnected, not base-added), or NULL malloc fail */ static struct tap_socket* tap_socket_new_tlsaccept(char* ip, void (*ev_cb)(int, short, void*), void* data, char* server_key, char* server_cert, char* verifypem) { struct tap_socket* s = calloc(1, sizeof(*s)); if(!s) { log_err("malloc failure"); return NULL; } s->ip = strdup(ip); if(!s->ip) { free(s); log_err("malloc failure"); return NULL; } s->fd = -1; s->ev_cb = ev_cb; s->data = data; s->sslctx = listen_sslctx_create(server_key, server_cert, verifypem); if(!s->sslctx) { log_err("could not create ssl context"); free(s->ip); free(s); return NULL; } return s; } /** setup tcp accept socket on IP string */ static int make_tcp_accept(char* ip) { #ifdef SO_REUSEADDR int on = 1; #endif struct sockaddr_storage addr; socklen_t len; int s; memset(&addr, 0, sizeof(addr)); len = (socklen_t)sizeof(addr); if(!extstrtoaddr(ip, &addr, &len)) { log_err("could not parse IP '%s'", ip); return -1; } if((s = socket(addr.ss_family, SOCK_STREAM, 0)) == -1) { log_err("can't create socket: %s", sock_strerror(errno)); return -1; } #ifdef SO_REUSEADDR if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s", sock_strerror(errno)); sock_close(s); return -1; } #endif /* SO_REUSEADDR */ if(bind(s, (struct sockaddr*)&addr, len) != 0) { log_err_addr("can't bind socket", sock_strerror(errno), &addr, len); sock_close(s); return -1; } if(!fd_set_nonblock(s)) { sock_close(s); return -1; } if(listen(s, LISTEN_BACKLOG) == -1) { log_err("can't listen: %s", sock_strerror(errno)); sock_close(s); return -1; } return s; } /** setup socket on event base */ static int tap_socket_setup(struct tap_socket* s, struct ub_event_base* base) { if(s->socketpath) { /* AF_LOCAL accept socket */ s->fd = create_local_accept_sock(s->socketpath, NULL, 0); if(s->fd == -1) { log_err("could not create local socket"); return 0; } } else if(s->ip || s->sslctx) { /* TCP accept socket */ s->fd = make_tcp_accept(s->ip); if(s->fd == -1) { log_err("could not create tcp socket"); return 0; } } s->ev = ub_event_new(base, s->fd, UB_EV_READ | UB_EV_PERSIST, s->ev_cb, s); if(!s->ev) { log_err("could not ub_event_new"); return 0; } if(ub_event_add(s->ev, NULL) != 0) { log_err("could not ub_event_add"); return 0; } s->ev_added = 1; return 1; } /** add tap socket to list */ static int tap_socket_list_insert(struct tap_socket_list** liststart, struct tap_socket* s) { struct tap_socket_list* entry = (struct tap_socket_list*) malloc(sizeof(*entry)); if(!entry) return 0; entry->next = *liststart; entry->s = s; *liststart = entry; return 1; } /** delete the list */ static void tap_socket_list_delete(struct tap_socket_list* list) { struct tap_socket_list* e = list, *next; while(e) { next = e->next; tap_socket_delev(e->s); tap_socket_close(e->s); tap_socket_delete(e->s); free(e); e = next; } } /** setup accept events */ static int tap_socket_list_addevs(struct tap_socket_list* list, struct ub_event_base* base) { struct tap_socket_list* entry; for(entry = list; entry; entry = entry->next) { if(!tap_socket_setup(entry->s, base)) { log_err("could not setup socket"); return 0; } } return 1; } #ifdef USE_DNSTAP /** log control frame contents */ static void log_control_frame(uint8_t* pkt, size_t len) { char* desc; if(verbosity == 0) return; desc = fstrm_describe_control(pkt, len); if(!desc) { log_err("out of memory"); return; } log_info("control frame %s", desc); free(desc); } /** convert mtype to string */ static const char* mtype_to_str(enum _Dnstap__Message__Type mtype) { switch(mtype) { case DNSTAP__MESSAGE__TYPE__AUTH_QUERY: return "AUTH_QUERY"; case DNSTAP__MESSAGE__TYPE__AUTH_RESPONSE: return "AUTH_RESPONSE"; case DNSTAP__MESSAGE__TYPE__RESOLVER_QUERY: return "RESOLVER_QUERY"; case DNSTAP__MESSAGE__TYPE__RESOLVER_RESPONSE: return "RESOLVER_RESPONSE"; case DNSTAP__MESSAGE__TYPE__CLIENT_QUERY: return "CLIENT_QUERY"; case DNSTAP__MESSAGE__TYPE__CLIENT_RESPONSE: return "CLIENT_RESPONSE"; case DNSTAP__MESSAGE__TYPE__FORWARDER_QUERY: return "FORWARDER_QUERY"; case DNSTAP__MESSAGE__TYPE__FORWARDER_RESPONSE: return "FORWARDER_RESPONSE"; case DNSTAP__MESSAGE__TYPE__STUB_QUERY: return "STUB_QUERY"; case DNSTAP__MESSAGE__TYPE__STUB_RESPONSE: return "STUB_RESPONSE"; default: break; } return "unknown_message_type"; } /** convert type address to a string ip4 or ip6, malloced or NULL on fail */ static char* str_of_addr(ProtobufCBinaryData address) { char buf[64]; socklen_t len = sizeof(buf); if(address.len == 4) { if(inet_ntop(AF_INET, address.data, buf, len)!=0) return strdup(buf); } else if(address.len == 16) { if(inet_ntop(AF_INET6, address.data, buf, len)!=0) return strdup(buf); } return NULL; } /** convert message buffer (of dns bytes) to the first qname, type, class, * malloced or NULL on fail */ static char* q_of_msg(ProtobufCBinaryData message) { char buf[300]; /* header, name, type, class minimum to get the query tuple */ if(message.len < 12 + 1 + 4 + 4) return NULL; if(sldns_wire2str_rrquestion_buf(message.data+12, message.len-12, buf, sizeof(buf)) != 0) { /* remove trailing newline, tabs to spaces */ /* remove the newline: */ if(buf[0] != 0) buf[strlen(buf)-1]=0; /* remove first tab (before type) */ if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' '; /* remove second tab (before class) */ if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' '; return strdup(buf); } return NULL; } /** convert possible string or hex data to string. malloced or NULL */ static char* possible_str(ProtobufCBinaryData str) { int is_str = 1; size_t i; for(i=0; i>4]; res[i*2+1] = hex[str.data[i]&0x0f]; } res[str.len*2] = 0; return res; } } return NULL; } /** convert timeval to string, malloced or NULL */ static char* tv_to_str(protobuf_c_boolean has_time_sec, uint64_t time_sec, protobuf_c_boolean has_time_nsec, uint32_t time_nsec) { char buf[64], buf2[256]; struct timeval tv; time_t time_t_sec; memset(&tv, 0, sizeof(tv)); if(has_time_sec) tv.tv_sec = time_sec; if(has_time_nsec) tv.tv_usec = time_nsec; buf[0]=0; time_t_sec = tv.tv_sec; (void)ctime_r(&time_t_sec, buf); snprintf(buf2, sizeof(buf2), "%u.%9.9u %s", (unsigned)time_sec, (unsigned)time_nsec, buf); return strdup(buf2); } /** log data frame contents */ static void log_data_frame(uint8_t* pkt, size_t len) { Dnstap__Dnstap* d = dnstap__dnstap__unpack(NULL, len, pkt); const char* mtype = NULL; char* maddr=NULL, *qinf=NULL; if(!d) { log_err("could not unpack"); return; } if(d->base.descriptor != &dnstap__dnstap__descriptor) { log_err("wrong base descriptor"); dnstap__dnstap__free_unpacked(d, NULL); return; } if(d->type != DNSTAP__DNSTAP__TYPE__MESSAGE) { log_err("dnstap type not type_message"); dnstap__dnstap__free_unpacked(d, NULL); return; } if(d->message) { mtype = mtype_to_str(d->message->type); if(d->message->has_query_address) maddr = str_of_addr(d->message->query_address); else if(d->message->has_response_address) maddr = str_of_addr(d->message->response_address); if(d->message->has_query_message) qinf = q_of_msg(d->message->query_message); else if(d->message->has_response_message) qinf = q_of_msg(d->message->response_message); } else { mtype = "nomessage"; } printf("%s%s%s%s%s\n", mtype, (maddr?" ":""), (maddr?maddr:""), (qinf?" ":""), (qinf?qinf:"")); free(maddr); free(qinf); if(longformat) { char* id=NULL, *vs=NULL; if(d->has_identity) { id=possible_str(d->identity); } if(d->has_version) { vs=possible_str(d->version); } if(id || vs) printf("identity: %s%s%s\n", (id?id:""), (id&&vs?" ":""), (vs?vs:"")); free(id); free(vs); if(d->message && d->message->has_query_message && d->message->query_message.data) { char* qmsg = sldns_wire2str_pkt( d->message->query_message.data, d->message->query_message.len); if(qmsg) { printf("query_message:\n%s", qmsg); free(qmsg); } } if(d->message && d->message->has_query_time_sec) { char* qtv = tv_to_str(d->message->has_query_time_sec, d->message->query_time_sec, d->message->has_query_time_nsec, d->message->query_time_nsec); if(qtv) { printf("query_time: %s\n", qtv); free(qtv); } } if(d->message && d->message->has_response_message && d->message->response_message.data) { char* rmsg = sldns_wire2str_pkt( d->message->response_message.data, d->message->response_message.len); if(rmsg) { printf("response_message:\n%s", rmsg); free(rmsg); } } if(d->message && d->message->has_response_time_sec) { char* rtv = tv_to_str(d->message->has_response_time_sec, d->message->response_time_sec, d->message->has_response_time_nsec, d->message->response_time_nsec); if(rtv) { printf("response_time: %s\n", rtv); free(rtv); } } } fflush(stdout); dnstap__dnstap__free_unpacked(d, NULL); } #endif /* USE_DNSTAP */ /** receive bytes from fd, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, size_t len) { ssize_t ret = recv(fd, buf, len, 0); if(ret == 0) { /* closed */ if(verbosity) log_info("dnstap client stream closed from %s", (data->id?data->id:"")); return 0; } else if(ret == -1) { /* error */ #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return -1; #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAEINPROGRESS) return -1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(data->ev, UB_EV_READ); return -1; } #endif log_err("could not recv: %s", sock_strerror(errno)); if(verbosity) log_info("dnstap client stream closed from %s", (data->id?data->id:"")); return 0; } return ret; } /* define routine for have_ssl only to avoid unused function warning */ #ifdef HAVE_SSL /** set to wait briefly for a write event, for one event call */ static void tap_enable_brief_write(struct tap_data* data) { ub_event_del(data->ev); ub_event_del_bits(data->ev, UB_EV_READ); ub_event_add_bits(data->ev, UB_EV_WRITE); if(ub_event_add(data->ev, NULL) != 0) log_err("could not ub_event_add in tap_enable_brief_write"); data->ssl_brief_write = 1; } #endif /* HAVE_SSL */ /* define routine for have_ssl only to avoid unused function warning */ #ifdef HAVE_SSL /** stop the brief wait for a write event. back to reading. */ static void tap_disable_brief_write(struct tap_data* data) { ub_event_del(data->ev); ub_event_del_bits(data->ev, UB_EV_WRITE); ub_event_add_bits(data->ev, UB_EV_READ); if(ub_event_add(data->ev, NULL) != 0) log_err("could not ub_event_add in tap_disable_brief_write"); data->ssl_brief_write = 0; } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /** receive bytes over ssl stream, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ static ssize_t ssl_read_bytes(struct tap_data* data, void* buf, size_t len) { int r; ERR_clear_error(); r = SSL_read(data->ssl, buf, len); if(r <= 0) { int want = SSL_get_error(data->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { /* closed */ if(verbosity) log_info("dnstap client stream closed from %s", (data->id?data->id:"")); return 0; } else if(want == SSL_ERROR_WANT_READ) { /* continue later */ return -1; } else if(want == SSL_ERROR_WANT_WRITE) { /* set to briefly write */ tap_enable_brief_write(data); return -1; } else if(want == SSL_ERROR_SYSCALL) { #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif if(errno != 0) log_err("SSL_read syscall: %s", strerror(errno)); if(verbosity) log_info("dnstap client stream closed from %s", (data->id?data->id:"")); return 0; } log_crypto_err("could not SSL_read"); if(verbosity) log_info("dnstap client stream closed from %s", (data->id?data->id:"")); return 0; } return r; } #endif /* HAVE_SSL */ /** receive bytes on the tap connection, prints errors if bad, * returns 0: closed/error, -1: continue, >0 number of bytes */ static ssize_t tap_receive(struct tap_data* data, void* buf, size_t len) { #ifdef HAVE_SSL if(data->ssl) return ssl_read_bytes(data, buf, len); #endif return receive_bytes(data, data->fd, buf, len); } /** delete the tap structure */ static void tap_data_free(struct tap_data* data) { ub_event_del(data->ev); ub_event_free(data->ev); #ifdef HAVE_SSL SSL_free(data->ssl); #endif close(data->fd); free(data->id); free(data->frame); free(data); } /** reply with ACCEPT control frame to bidirectional client, * returns 0 on error */ static int reply_with_accept(struct tap_data* data) { #ifdef USE_DNSTAP /* len includes the escape and framelength */ int r; size_t len = 0; void* acceptframe = fstrm_create_control_frame_accept( DNSTAP_CONTENT_TYPE, &len); if(!acceptframe) { log_err("out of memory"); return 0; } fd_set_block(data->fd); if(data->ssl) { if((r=SSL_write(data->ssl, acceptframe, len)) <= 0) { if(SSL_get_error(data->ssl, r) == SSL_ERROR_ZERO_RETURN) log_err("SSL_write, peer closed connection"); else log_err("could not SSL_write"); fd_set_nonblock(data->fd); free(acceptframe); return 0; } } else { if(send(data->fd, acceptframe, len, 0) == -1) { log_err("send failed: %s", sock_strerror(errno)); fd_set_nonblock(data->fd); free(acceptframe); return 0; } } if(verbosity) log_info("sent control frame(accept) content-type:(%s)", DNSTAP_CONTENT_TYPE); fd_set_nonblock(data->fd); free(acceptframe); return 1; #else log_err("no dnstap compiled, no reply"); (void)data; return 0; #endif } /** reply with FINISH control frame to bidirectional client, * returns 0 on error */ static int reply_with_finish(int fd) { #ifdef USE_DNSTAP size_t len = 0; void* finishframe = fstrm_create_control_frame_finish(&len); if(!finishframe) { log_err("out of memory"); return 0; } fd_set_block(fd); if(send(fd, finishframe, len, 0) == -1) { log_err("send failed: %s", sock_strerror(errno)); fd_set_nonblock(fd); free(finishframe); return 0; } if(verbosity) log_info("sent control frame(finish)"); fd_set_nonblock(fd); free(finishframe); return 1; #else log_err("no dnstap compiled, no reply"); (void)fd; return 0; #endif } #ifdef HAVE_SSL /** check SSL peer certificate, return 0 on fail */ static int tap_check_peer(struct tap_data* data) { if((SSL_get_verify_mode(data->ssl)&SSL_VERIFY_PEER)) { /* verification */ if(SSL_get_verify_result(data->ssl) == X509_V_OK) { X509* x = SSL_get_peer_certificate(data->ssl); if(!x) { if(verbosity) log_info("SSL connection %s" " failed no certificate", data->id); return 0; } if(verbosity) log_cert(VERB_ALGO, "peer certificate", x); #ifdef HAVE_SSL_GET0_PEERNAME if(SSL_get0_peername(data->ssl)) { if(verbosity) log_info("SSL connection %s " "to %s authenticated", data->id, SSL_get0_peername(data->ssl)); } else { #endif if(verbosity) log_info("SSL connection %s " "authenticated", data->id); #ifdef HAVE_SSL_GET0_PEERNAME } #endif X509_free(x); } else { X509* x = SSL_get_peer_certificate(data->ssl); if(x) { if(verbosity) log_cert(VERB_ALGO, "peer certificate", x); X509_free(x); } if(verbosity) log_info("SSL connection %s failed: " "failed to authenticate", data->id); return 0; } } else { /* unauthenticated, the verify peer flag was not set * in ssl when the ssl object was created from ssl_ctx */ if(verbosity) log_info("SSL connection %s", data->id); } return 1; } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /** perform SSL handshake, return 0 to wait for events, 1 if done */ static int tap_handshake(struct tap_data* data) { int r; if(data->ssl_brief_write) { /* write condition has been satisfied, back to reading */ tap_disable_brief_write(data); } if(data->ssl_handshake_done) return 1; ERR_clear_error(); r = SSL_do_handshake(data->ssl); if(r != 1) { int want = SSL_get_error(data->ssl, r); if(want == SSL_ERROR_WANT_READ) { return 0; } else if(want == SSL_ERROR_WANT_WRITE) { tap_enable_brief_write(data); return 0; } else if(r == 0) { /* closed */ tap_data_free(data); return 0; } else if(want == SSL_ERROR_SYSCALL) { /* SYSCALL and errno==0 means closed uncleanly */ int silent = 0; #ifdef EPIPE if(errno == EPIPE && verbosity < 2) silent = 1; /* silence 'broken pipe' */ #endif #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) silent = 1; /* silence reset by peer */ #endif if(errno == 0) silent = 1; if(!silent) log_err("SSL_handshake syscall: %s", strerror(errno)); tap_data_free(data); return 0; } else { unsigned long err = ERR_get_error(); if(!squelch_err_ssl_handshake(err)) { log_crypto_err_code("ssl handshake failed", err); verbose(VERB_OPS, "ssl handshake failed " "from %s", data->id); } tap_data_free(data); return 0; } } /* check peer verification */ data->ssl_handshake_done = 1; if(!tap_check_peer(data)) { /* closed */ tap_data_free(data); return 0; } return 1; } #endif /* HAVE_SSL */ /** callback for dnstap listener */ void dtio_tap_callback(int fd, short ATTR_UNUSED(bits), void* arg) { struct tap_data* data = (struct tap_data*)arg; if(verbosity>=3) log_info("tap callback"); #ifdef HAVE_SSL if(data->ssl && (!data->ssl_handshake_done || data->ssl_brief_write)) { if(!tap_handshake(data)) return; } #endif while(data->len_done < 4) { uint32_t l = (uint32_t)data->len; ssize_t ret = tap_receive(data, ((uint8_t*)&l)+data->len_done, 4-data->len_done); if(verbosity>=4) log_info("s recv %d", (int)ret); if(ret == 0) { /* closed or error */ tap_data_free(data); return; } else if(ret == -1) { /* continue later */ return; } data->len_done += ret; data->len = (size_t)l; if(data->len_done < 4) return; /* continue later */ data->len = (size_t)(ntohl(l)); if(verbosity>=3) log_info("length is %d", (int)data->len); if(data->len == 0) { /* it is a control frame */ data->control_frame = 1; /* read controlframelen */ data->len_done = 0; } else { /* allocate frame size */ data->frame = calloc(1, data->len); if(!data->frame) { log_err("out of memory"); tap_data_free(data); return; } } } /* we want to read the full length now */ if(data->data_done < data->len) { ssize_t r = tap_receive(data, data->frame + data->data_done, data->len - data->data_done); if(verbosity>=4) log_info("f recv %d", (int)r); if(r == 0) { /* closed or error */ tap_data_free(data); return; } else if(r == -1) { /* continue later */ return; } data->data_done += r; if(data->data_done < data->len) return; /* continue later */ } /* we are done with a frame */ if(verbosity>=3) log_info("received %sframe len %d", (data->control_frame?"control ":""), (int)data->len); #ifdef USE_DNSTAP if(data->control_frame) log_control_frame(data->frame, data->len); else log_data_frame(data->frame, data->len); #endif if(data->len >= 4 && sldns_read_uint32(data->frame) == FSTRM_CONTROL_FRAME_READY) { data->is_bidirectional = 1; if(verbosity) log_info("bidirectional stream"); if(!reply_with_accept(data)) { tap_data_free(data); } } else if(data->len >= 4 && sldns_read_uint32(data->frame) == FSTRM_CONTROL_FRAME_STOP && data->is_bidirectional) { if(!reply_with_finish(fd)) { tap_data_free(data); return; } } /* prepare for next frame */ free(data->frame); data->frame = NULL; data->control_frame = 0; data->len = 0; data->len_done = 0; data->data_done = 0; } /** callback for main listening file descriptor */ void dtio_mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg) { struct tap_socket* tap_sock = (struct tap_socket*)arg; struct main_tap_data* maindata = (struct main_tap_data*) tap_sock->data; struct tap_data* data; char* id = NULL; struct sockaddr_storage addr; socklen_t addrlen = (socklen_t)sizeof(addr); int s = accept(fd, (struct sockaddr*)&addr, &addrlen); if(s == -1) { #ifndef USE_WINSOCK /* EINTR is signal interrupt. others are closed connection. */ if( errno == EINTR || errno == EAGAIN #ifdef EWOULDBLOCK || errno == EWOULDBLOCK #endif #ifdef ECONNABORTED || errno == ECONNABORTED #endif #ifdef EPROTO || errno == EPROTO #endif /* EPROTO */ ) return; #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAECONNRESET) return; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(maindata->ev, UB_EV_READ); return; } #endif log_err_addr("accept failed", sock_strerror(errno), &addr, addrlen); return; } fd_set_nonblock(s); if(verbosity) { if(addr.ss_family == AF_LOCAL) { #ifdef HAVE_SYS_UN_H struct sockaddr_un* usock = calloc(1, sizeof(struct sockaddr_un) + 1); if(usock) { socklen_t ulen = sizeof(struct sockaddr_un); if(getsockname(fd, (struct sockaddr*)usock, &ulen) != -1) { log_info("accepted new dnstap client from %s", usock->sun_path); id = strdup(usock->sun_path); } else { log_info("accepted new dnstap client"); } free(usock); } else { log_info("accepted new dnstap client"); } #endif /* HAVE_SYS_UN_H */ } else if(addr.ss_family == AF_INET || addr.ss_family == AF_INET6) { char ip[256]; addr_to_str(&addr, addrlen, ip, sizeof(ip)); log_info("accepted new dnstap client from %s", ip); id = strdup(ip); } else { log_info("accepted new dnstap client"); } } data = calloc(1, sizeof(*data)); if(!data) fatal_exit("out of memory"); data->fd = s; data->id = id; if(tap_sock->sslctx) { data->ssl = incoming_ssl_fd(tap_sock->sslctx, data->fd); if(!data->ssl) fatal_exit("could not SSL_new"); } data->ev = ub_event_new(maindata->base, s, UB_EV_READ | UB_EV_PERSIST, &dtio_tap_callback, data); if(!data->ev) fatal_exit("could not ub_event_new"); if(ub_event_add(data->ev, NULL) != 0) fatal_exit("could not ub_event_add"); } /** setup local accept sockets */ static void setup_local_list(struct main_tap_data* maindata, struct config_strlist_head* local_list) { struct config_strlist* item; for(item = local_list->first; item; item = item->next) { struct tap_socket* s; s = tap_socket_new_local(item->str, &dtio_mainfdcallback, maindata); if(!s) fatal_exit("out of memory"); if(!tap_socket_list_insert(&maindata->acceptlist, s)) fatal_exit("out of memory"); } } /** setup tcp accept sockets */ static void setup_tcp_list(struct main_tap_data* maindata, struct config_strlist_head* tcp_list) { struct config_strlist* item; for(item = tcp_list->first; item; item = item->next) { struct tap_socket* s; s = tap_socket_new_tcpaccept(item->str, &dtio_mainfdcallback, maindata); if(!s) fatal_exit("out of memory"); if(!tap_socket_list_insert(&maindata->acceptlist, s)) fatal_exit("out of memory"); } } /** setup tls accept sockets */ static void setup_tls_list(struct main_tap_data* maindata, struct config_strlist_head* tls_list, char* server_key, char* server_cert, char* verifypem) { struct config_strlist* item; for(item = tls_list->first; item; item = item->next) { struct tap_socket* s; s = tap_socket_new_tlsaccept(item->str, &dtio_mainfdcallback, maindata, server_key, server_cert, verifypem); if(!s) fatal_exit("out of memory"); if(!tap_socket_list_insert(&maindata->acceptlist, s)) fatal_exit("out of memory"); } } /** signal variable */ static struct ub_event_base* sig_base = NULL; /** do we have to quit */ int sig_quit = 0; /** signal handler for user quit */ static RETSIGTYPE main_sigh(int sig) { if(!sig_quit) fprintf(stderr, "exit on signal %d\n", sig); if(sig_base) { ub_event_base_loopexit(sig_base); sig_base = NULL; } sig_quit = 1; } /** setup and run the server to listen to DNSTAP messages */ static void setup_and_run(struct config_strlist_head* local_list, struct config_strlist_head* tcp_list, struct config_strlist_head* tls_list, char* server_key, char* server_cert, char* verifypem) { time_t secs = 0; struct timeval now; struct main_tap_data* maindata; struct ub_event_base* base; const char *evnm="event", *evsys="", *evmethod=""; maindata = calloc(1, sizeof(*maindata)); if(!maindata) fatal_exit("out of memory"); memset(&now, 0, sizeof(now)); base = ub_default_event_base(1, &secs, &now); if(!base) fatal_exit("could not create ub_event base"); maindata->base = base; sig_base = base; if(sig_quit) { ub_event_base_free(base); free(maindata); return; } ub_get_event_sys(base, &evnm, &evsys, &evmethod); if(verbosity) log_info("%s %s uses %s method", evnm, evsys, evmethod); setup_local_list(maindata, local_list); setup_tcp_list(maindata, tcp_list); setup_tls_list(maindata, tls_list, server_key, server_cert, verifypem); if(!tap_socket_list_addevs(maindata->acceptlist, base)) fatal_exit("could not setup accept events"); if(verbosity) log_info("start of service"); ub_event_base_dispatch(base); sig_base = NULL; if(verbosity) log_info("end of service"); tap_socket_list_delete(maindata->acceptlist); ub_event_base_free(base); free(maindata); } /** getopt global, in case header files fail to declare it. */ extern int optind; /** getopt global, in case header files fail to declare it. */ extern char* optarg; /** main program for streamtcp */ int main(int argc, char** argv) { int c; int usessl = 0; struct config_strlist_head local_list; struct config_strlist_head tcp_list; struct config_strlist_head tls_list; char* server_key = NULL, *server_cert = NULL, *verifypem = NULL; #ifdef USE_WINSOCK WSADATA wsa_data; if(WSAStartup(MAKEWORD(2,2), &wsa_data) != 0) { printf("WSAStartup failed\n"); return 1; } #endif if(signal(SIGINT, main_sigh) == SIG_ERR || #ifdef SIGQUIT signal(SIGQUIT, main_sigh) == SIG_ERR || #endif #ifdef SIGHUP signal(SIGHUP, main_sigh) == SIG_ERR || #endif #ifdef SIGBREAK signal(SIGBREAK, main_sigh) == SIG_ERR || #endif signal(SIGTERM, main_sigh) == SIG_ERR) fatal_exit("could not bind to signal"); memset(&local_list, 0, sizeof(local_list)); memset(&tcp_list, 0, sizeof(tcp_list)); memset(&tls_list, 0, sizeof(tls_list)); /* lock debug start (if any) */ log_ident_set("unbound-dnstap-socket"); log_init(0, 0, 0); checklock_start(); #ifdef SIGPIPE if(signal(SIGPIPE, SIG_IGN) == SIG_ERR) { perror("could not install signal handler for SIGPIPE"); return 1; } #endif /* command line options */ while( (c=getopt(argc, argv, "hls:t:u:vx:y:z:")) != -1) { switch(c) { case 'u': if(!cfg_strlist_append(&local_list, strdup(optarg))) fatal_exit("out of memory"); break; case 's': if(!cfg_strlist_append(&tcp_list, strdup(optarg))) fatal_exit("out of memory"); break; case 't': if(!cfg_strlist_append(&tls_list, strdup(optarg))) fatal_exit("out of memory"); usessl = 1; break; case 'x': server_key = optarg; usessl = 1; break; case 'y': server_cert = optarg; usessl = 1; break; case 'z': verifypem = optarg; usessl = 1; break; case 'l': longformat = 1; break; case 'v': verbosity++; break; case 'h': case '?': default: usage(argv); } } argc -= optind; argv += optind; if(usessl) { #ifdef HAVE_SSL #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) # ifndef S_SPLINT_S OpenSSL_add_all_algorithms(); # endif #else OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); #endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif #endif /* HAVE_SSL */ } setup_and_run(&local_list, &tcp_list, &tls_list, server_key, server_cert, verifypem); config_delstrlist(local_list.first); config_delstrlist(tcp_list.first); config_delstrlist(tls_list.first); checklock_stop(); #ifdef USE_WINSOCK WSACleanup(); #endif return 0; } /***--- definitions to make fptr_wlist work. ---***/ /* These are callbacks, similar to smallapp callbacks, except the debug * tool callbacks are not in it */ struct tube; struct query_info; #include "util/data/packed_rrset.h" #include "daemon/worker.h" #include "daemon/remote.h" #include "util/fptr_wlist.h" #include "libunbound/context.h" void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) { log_assert(0); } int worker_handle_request(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } int worker_handle_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int worker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int remote_accept_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } int remote_control_callback(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(repinfo)) { log_assert(0); return 0; } void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg)) { log_assert(0); } struct outbound_entry* worker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) { log_assert(0); return 0; } #ifdef UB_ON_WINDOWS void worker_win_stop_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void* ATTR_UNUSED(arg)) { log_assert(0); } void wsvc_cron_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } #endif /* UB_ON_WINDOWS */ void worker_alloc_cleanup(void* ATTR_UNUSED(arg)) { log_assert(0); } struct outbound_entry* libworker_send_query( struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags), int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream), char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q)) { log_assert(0); return 0; } int libworker_handle_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int libworker_handle_service_reply(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } void libworker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len), int ATTR_UNUSED(error), void* ATTR_UNUSED(arg)) { log_assert(0); } void libworker_fg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } void libworker_bg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } void libworker_event_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode), struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s), char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited)) { log_assert(0); } int context_query_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } void worker_stat_timer_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_probe_timer_cb(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_start_accept(void* ATTR_UNUSED(arg)) { log_assert(0); } void worker_stop_accept(void* ATTR_UNUSED(arg)) { log_assert(0); } /** keep track of lock id in lock-verify application */ struct order_id { /** the thread id that created it */ int thr; /** the instance number of creation */ int instance; }; int order_lock_cmp(const void* e1, const void* e2) { const struct order_id* o1 = e1; const struct order_id* o2 = e2; if(o1->thr < o2->thr) return -1; if(o1->thr > o2->thr) return 1; if(o1->instance < o2->instance) return -1; if(o1->instance > o2->instance) return 1; return 0; } int codeline_cmp(const void* a, const void* b) { return strcmp(a, b); } int replay_var_compare(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { log_assert(0); return 0; } void remote_get_opt_ssl(char* ATTR_UNUSED(str), void* ATTR_UNUSED(arg)) { log_assert(0); } unbound-1.13.1/dnstap/dnstap.c0000644000175000017500000003416414010434640015635 0ustar wouterwouter/* dnstap support for Unbound */ /* * Copyright (c) 2013-2014, Farsight Security, Inc. * 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. * * 3. Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "dnstap/dnstap_config.h" #ifdef USE_DNSTAP #include "config.h" #include #include #ifdef HAVE_SYS_STAT_H #include #endif #include #include "sldns/sbuffer.h" #include "util/config_file.h" #include "util/net_help.h" #include "util/netevent.h" #include "util/log.h" #include #include "dnstap/dnstap.h" #include "dnstap/dtstream.h" #include "dnstap/dnstap.pb-c.h" #define DNSTAP_INITIAL_BUF_SIZE 256 struct dt_msg { void *buf; size_t len_buf; Dnstap__Dnstap d; Dnstap__Message m; }; static int dt_pack(const Dnstap__Dnstap *d, void **buf, size_t *sz) { ProtobufCBufferSimple sbuf; memset(&sbuf, 0, sizeof(sbuf)); sbuf.base.append = protobuf_c_buffer_simple_append; sbuf.len = 0; sbuf.alloced = DNSTAP_INITIAL_BUF_SIZE; sbuf.data = malloc(sbuf.alloced); if (sbuf.data == NULL) return 0; sbuf.must_free_data = 1; *sz = dnstap__dnstap__pack_to_buffer(d, (ProtobufCBuffer *) &sbuf); if (sbuf.data == NULL) return 0; *buf = sbuf.data; return 1; } static void dt_send(const struct dt_env *env, void *buf, size_t len_buf) { dt_msg_queue_submit(env->msgqueue, buf, len_buf); } static void dt_msg_init(const struct dt_env *env, struct dt_msg *dm, Dnstap__Message__Type mtype) { memset(dm, 0, sizeof(*dm)); dm->d.base.descriptor = &dnstap__dnstap__descriptor; dm->m.base.descriptor = &dnstap__message__descriptor; dm->d.type = DNSTAP__DNSTAP__TYPE__MESSAGE; dm->d.message = &dm->m; dm->m.type = mtype; if (env->identity != NULL) { dm->d.identity.data = (uint8_t *) env->identity; dm->d.identity.len = (size_t) env->len_identity; dm->d.has_identity = 1; } if (env->version != NULL) { dm->d.version.data = (uint8_t *) env->version; dm->d.version.len = (size_t) env->len_version; dm->d.has_version = 1; } } /* check that the socket file can be opened and exists, print error if not */ static void check_socket_file(const char* socket_path) { struct stat statbuf; memset(&statbuf, 0, sizeof(statbuf)); if(stat(socket_path, &statbuf) < 0) { log_warn("could not open dnstap-socket-path: %s, %s", socket_path, strerror(errno)); } } struct dt_env * dt_create(struct config_file* cfg) { struct dt_env *env; if(cfg->dnstap && cfg->dnstap_socket_path && cfg->dnstap_socket_path[0] && (cfg->dnstap_ip==NULL || cfg->dnstap_ip[0]==0)) { char* p = cfg->dnstap_socket_path; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(p, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) p += strlen(cfg->chrootdir); verbose(VERB_OPS, "attempting to connect to dnstap socket %s", p); check_socket_file(p); } env = (struct dt_env *) calloc(1, sizeof(struct dt_env)); if (!env) return NULL; env->dtio = dt_io_thread_create(); if(!env->dtio) { log_err("malloc failure"); free(env); return NULL; } if(!dt_io_thread_apply_cfg(env->dtio, cfg)) { dt_io_thread_delete(env->dtio); free(env); return NULL; } dt_apply_cfg(env, cfg); return env; } static void dt_apply_identity(struct dt_env *env, struct config_file *cfg) { char buf[MAXHOSTNAMELEN+1]; if (!cfg->dnstap_send_identity) return; free(env->identity); if (cfg->dnstap_identity == NULL || cfg->dnstap_identity[0] == 0) { if (gethostname(buf, MAXHOSTNAMELEN) == 0) { buf[MAXHOSTNAMELEN] = 0; env->identity = strdup(buf); } else { fatal_exit("dt_apply_identity: gethostname() failed"); } } else { env->identity = strdup(cfg->dnstap_identity); } if (env->identity == NULL) fatal_exit("dt_apply_identity: strdup() failed"); env->len_identity = (unsigned int)strlen(env->identity); verbose(VERB_OPS, "dnstap identity field set to \"%s\"", env->identity); } static void dt_apply_version(struct dt_env *env, struct config_file *cfg) { if (!cfg->dnstap_send_version) return; free(env->version); if (cfg->dnstap_version == NULL || cfg->dnstap_version[0] == 0) env->version = strdup(PACKAGE_STRING); else env->version = strdup(cfg->dnstap_version); if (env->version == NULL) fatal_exit("dt_apply_version: strdup() failed"); env->len_version = (unsigned int)strlen(env->version); verbose(VERB_OPS, "dnstap version field set to \"%s\"", env->version); } void dt_apply_cfg(struct dt_env *env, struct config_file *cfg) { if (!cfg->dnstap) return; dt_apply_identity(env, cfg); dt_apply_version(env, cfg); if ((env->log_resolver_query_messages = (unsigned int) cfg->dnstap_log_resolver_query_messages)) { verbose(VERB_OPS, "dnstap Message/RESOLVER_QUERY enabled"); } if ((env->log_resolver_response_messages = (unsigned int) cfg->dnstap_log_resolver_response_messages)) { verbose(VERB_OPS, "dnstap Message/RESOLVER_RESPONSE enabled"); } if ((env->log_client_query_messages = (unsigned int) cfg->dnstap_log_client_query_messages)) { verbose(VERB_OPS, "dnstap Message/CLIENT_QUERY enabled"); } if ((env->log_client_response_messages = (unsigned int) cfg->dnstap_log_client_response_messages)) { verbose(VERB_OPS, "dnstap Message/CLIENT_RESPONSE enabled"); } if ((env->log_forwarder_query_messages = (unsigned int) cfg->dnstap_log_forwarder_query_messages)) { verbose(VERB_OPS, "dnstap Message/FORWARDER_QUERY enabled"); } if ((env->log_forwarder_response_messages = (unsigned int) cfg->dnstap_log_forwarder_response_messages)) { verbose(VERB_OPS, "dnstap Message/FORWARDER_RESPONSE enabled"); } } int dt_init(struct dt_env *env, struct comm_base* base) { env->msgqueue = dt_msg_queue_create(base); if(!env->msgqueue) { log_err("malloc failure"); return 0; } if(!dt_io_thread_register_queue(env->dtio, env->msgqueue)) { log_err("malloc failure"); dt_msg_queue_delete(env->msgqueue); env->msgqueue = NULL; return 0; } return 1; } void dt_deinit(struct dt_env* env) { dt_io_thread_unregister_queue(env->dtio, env->msgqueue); dt_msg_queue_delete(env->msgqueue); } void dt_delete(struct dt_env *env) { if (!env) return; dt_io_thread_delete(env->dtio); free(env->identity); free(env->version); free(env); } static void dt_fill_timeval(const struct timeval *tv, uint64_t *time_sec, protobuf_c_boolean *has_time_sec, uint32_t *time_nsec, protobuf_c_boolean *has_time_nsec) { #ifndef S_SPLINT_S *time_sec = tv->tv_sec; *time_nsec = tv->tv_usec * 1000; #endif *has_time_sec = 1; *has_time_nsec = 1; } static void dt_fill_buffer(sldns_buffer *b, ProtobufCBinaryData *p, protobuf_c_boolean *has) { log_assert(b != NULL); p->len = sldns_buffer_limit(b); p->data = sldns_buffer_begin(b); *has = 1; } static void dt_msg_fill_net(struct dt_msg *dm, struct sockaddr_storage *ss, enum comm_point_type cptype, ProtobufCBinaryData *addr, protobuf_c_boolean *has_addr, uint32_t *port, protobuf_c_boolean *has_port) { log_assert(ss->ss_family == AF_INET6 || ss->ss_family == AF_INET); if (ss->ss_family == AF_INET6) { struct sockaddr_in6 *s = (struct sockaddr_in6 *) ss; /* socket_family */ dm->m.socket_family = DNSTAP__SOCKET_FAMILY__INET6; dm->m.has_socket_family = 1; /* addr: query_address or response_address */ addr->data = s->sin6_addr.s6_addr; addr->len = 16; /* IPv6 */ *has_addr = 1; /* port: query_port or response_port */ *port = ntohs(s->sin6_port); *has_port = 1; } else if (ss->ss_family == AF_INET) { struct sockaddr_in *s = (struct sockaddr_in *) ss; /* socket_family */ dm->m.socket_family = DNSTAP__SOCKET_FAMILY__INET; dm->m.has_socket_family = 1; /* addr: query_address or response_address */ addr->data = (uint8_t *) &s->sin_addr.s_addr; addr->len = 4; /* IPv4 */ *has_addr = 1; /* port: query_port or response_port */ *port = ntohs(s->sin_port); *has_port = 1; } log_assert(cptype == comm_udp || cptype == comm_tcp); if (cptype == comm_udp) { /* socket_protocol */ dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__UDP; dm->m.has_socket_protocol = 1; } else if (cptype == comm_tcp) { /* socket_protocol */ dm->m.socket_protocol = DNSTAP__SOCKET_PROTOCOL__TCP; dm->m.has_socket_protocol = 1; } } void dt_msg_send_client_query(struct dt_env *env, struct sockaddr_storage *qsock, enum comm_point_type cptype, sldns_buffer *qmsg) { struct dt_msg dm; struct timeval qtime; gettimeofday(&qtime, NULL); /* type */ dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__CLIENT_QUERY); /* query_time */ dt_fill_timeval(&qtime, &dm.m.query_time_sec, &dm.m.has_query_time_sec, &dm.m.query_time_nsec, &dm.m.has_query_time_nsec); /* query_message */ dt_fill_buffer(qmsg, &dm.m.query_message, &dm.m.has_query_message); /* socket_family, socket_protocol, query_address, query_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); dt_msg_fill_net(&dm, qsock, cptype, &dm.m.query_address, &dm.m.has_query_address, &dm.m.query_port, &dm.m.has_query_port); if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); } void dt_msg_send_client_response(struct dt_env *env, struct sockaddr_storage *qsock, enum comm_point_type cptype, sldns_buffer *rmsg) { struct dt_msg dm; struct timeval rtime; gettimeofday(&rtime, NULL); /* type */ dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__CLIENT_RESPONSE); /* response_time */ dt_fill_timeval(&rtime, &dm.m.response_time_sec, &dm.m.has_response_time_sec, &dm.m.response_time_nsec, &dm.m.has_response_time_nsec); /* response_message */ dt_fill_buffer(rmsg, &dm.m.response_message, &dm.m.has_response_message); /* socket_family, socket_protocol, query_address, query_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); dt_msg_fill_net(&dm, qsock, cptype, &dm.m.query_address, &dm.m.has_query_address, &dm.m.query_port, &dm.m.has_query_port); if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); } void dt_msg_send_outside_query(struct dt_env *env, struct sockaddr_storage *rsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, sldns_buffer *qmsg) { struct dt_msg dm; struct timeval qtime; uint16_t qflags; gettimeofday(&qtime, NULL); qflags = sldns_buffer_read_u16_at(qmsg, 2); /* type */ if (qflags & BIT_RD) { if (!env->log_forwarder_query_messages) return; dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__FORWARDER_QUERY); } else { if (!env->log_resolver_query_messages) return; dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__RESOLVER_QUERY); } /* query_zone */ dm.m.query_zone.data = zone; dm.m.query_zone.len = zone_len; dm.m.has_query_zone = 1; /* query_time_sec, query_time_nsec */ dt_fill_timeval(&qtime, &dm.m.query_time_sec, &dm.m.has_query_time_sec, &dm.m.query_time_nsec, &dm.m.has_query_time_nsec); /* query_message */ dt_fill_buffer(qmsg, &dm.m.query_message, &dm.m.has_query_message); /* socket_family, socket_protocol, response_address, response_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); dt_msg_fill_net(&dm, rsock, cptype, &dm.m.response_address, &dm.m.has_response_address, &dm.m.response_port, &dm.m.has_response_port); if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); } void dt_msg_send_outside_response(struct dt_env *env, struct sockaddr_storage *rsock, enum comm_point_type cptype, uint8_t *zone, size_t zone_len, uint8_t *qbuf, size_t qbuf_len, const struct timeval *qtime, const struct timeval *rtime, sldns_buffer *rmsg) { struct dt_msg dm; uint16_t qflags; log_assert(qbuf_len >= sizeof(qflags)); memcpy(&qflags, qbuf, sizeof(qflags)); qflags = ntohs(qflags); /* type */ if (qflags & BIT_RD) { if (!env->log_forwarder_response_messages) return; dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__FORWARDER_RESPONSE); } else { if (!env->log_resolver_response_messages) return; dt_msg_init(env, &dm, DNSTAP__MESSAGE__TYPE__RESOLVER_RESPONSE); } /* query_zone */ dm.m.query_zone.data = zone; dm.m.query_zone.len = zone_len; dm.m.has_query_zone = 1; /* query_time_sec, query_time_nsec */ dt_fill_timeval(qtime, &dm.m.query_time_sec, &dm.m.has_query_time_sec, &dm.m.query_time_nsec, &dm.m.has_query_time_nsec); /* response_time_sec, response_time_nsec */ dt_fill_timeval(rtime, &dm.m.response_time_sec, &dm.m.has_response_time_sec, &dm.m.response_time_nsec, &dm.m.has_response_time_nsec); /* response_message */ dt_fill_buffer(rmsg, &dm.m.response_message, &dm.m.has_response_message); /* socket_family, socket_protocol, response_address, response_port */ log_assert(cptype == comm_udp || cptype == comm_tcp); dt_msg_fill_net(&dm, rsock, cptype, &dm.m.response_address, &dm.m.has_response_address, &dm.m.response_port, &dm.m.has_response_port); if (dt_pack(&dm.d, &dm.buf, &dm.len_buf)) dt_send(env, dm.buf, dm.len_buf); } #endif /* USE_DNSTAP */ unbound-1.13.1/dnstap/dnstap.proto0000644000175000017500000002455614010434640016562 0ustar wouterwouter// dnstap: flexible, structured event replication format for DNS software // // This file contains the protobuf schemas for the "dnstap" structured event // replication format for DNS software. // Written in 2013-2014 by Farsight Security, Inc. // // To the extent possible under law, the author(s) have dedicated all // copyright and related and neighboring rights to this file to the public // domain worldwide. This file is distributed without any warranty. // // You should have received a copy of the CC0 Public Domain Dedication along // with this file. If not, see: // // . syntax = "proto2"; package dnstap; // "Dnstap": this is the top-level dnstap type, which is a "union" type that // contains other kinds of dnstap payloads, although currently only one type // of dnstap payload is defined. // See: https://developers.google.com/protocol-buffers/docs/techniques#union message Dnstap { // DNS server identity. // If enabled, this is the identity string of the DNS server which generated // this message. Typically this would be the same string as returned by an // "NSID" (RFC 5001) query. optional bytes identity = 1; // DNS server version. // If enabled, this is the version string of the DNS server which generated // this message. Typically this would be the same string as returned by a // "version.bind" query. optional bytes version = 2; // Extra data for this payload. // This field can be used for adding an arbitrary byte-string annotation to // the payload. No encoding or interpretation is applied or enforced. optional bytes extra = 3; // Identifies which field below is filled in. enum Type { MESSAGE = 1; } required Type type = 15; // One of the following will be filled in. optional Message message = 14; } // SocketFamily: the network protocol family of a socket. This specifies how // to interpret "network address" fields. enum SocketFamily { INET = 1; // IPv4 (RFC 791) INET6 = 2; // IPv6 (RFC 2460) } // SocketProtocol: the transport protocol of a socket. This specifies how to // interpret "transport port" fields. enum SocketProtocol { UDP = 1; // User Datagram Protocol (RFC 768) TCP = 2; // Transmission Control Protocol (RFC 793) } // Message: a wire-format (RFC 1035 section 4) DNS message and associated // metadata. Applications generating "Message" payloads should follow // certain requirements based on the MessageType, see below. message Message { // There are eight types of "Message" defined that correspond to the // four arrows in the following diagram, slightly modified from RFC 1035 // section 2: // +---------+ +----------+ +--------+ // | | query | | query | | // | Stub |-SQ--------CQ->| Recursive|-RQ----AQ->| Auth. | // | Resolver| | Server | | Name | // | |<-SR--------CR-| |<-RR----AR-| Server | // +---------+ response | | response | | // +----------+ +--------+ // Each arrow has two Type values each, one for each "end" of each arrow, // because these are considered to be distinct events. Each end of each // arrow on the diagram above has been marked with a two-letter Type // mnemonic. Clockwise from upper left, these mnemonic values are: // // SQ: STUB_QUERY // CQ: CLIENT_QUERY // RQ: RESOLVER_QUERY // AQ: AUTH_QUERY // AR: AUTH_RESPONSE // RR: RESOLVER_RESPONSE // CR: CLIENT_RESPONSE // SR: STUB_RESPONSE // Two additional types of "Message" have been defined for the // "forwarding" case where an upstream DNS server is responsible for // further recursion. These are not shown on the diagram above, but have // the following mnemonic values: // FQ: FORWARDER_QUERY // FR: FORWARDER_RESPONSE // The "Message" Type values are defined below. enum Type { // AUTH_QUERY is a DNS query message received from a resolver by an // authoritative name server, from the perspective of the authoritative // name server. AUTH_QUERY = 1; // AUTH_RESPONSE is a DNS response message sent from an authoritative // name server to a resolver, from the perspective of the authoritative // name server. AUTH_RESPONSE = 2; // RESOLVER_QUERY is a DNS query message sent from a resolver to an // authoritative name server, from the perspective of the resolver. // Resolvers typically clear the RD (recursion desired) bit when // sending queries. RESOLVER_QUERY = 3; // RESOLVER_RESPONSE is a DNS response message received from an // authoritative name server by a resolver, from the perspective of // the resolver. RESOLVER_RESPONSE = 4; // CLIENT_QUERY is a DNS query message sent from a client to a DNS // server which is expected to perform further recursion, from the // perspective of the DNS server. The client may be a stub resolver or // forwarder or some other type of software which typically sets the RD // (recursion desired) bit when querying the DNS server. The DNS server // may be a simple forwarding proxy or it may be a full recursive // resolver. CLIENT_QUERY = 5; // CLIENT_RESPONSE is a DNS response message sent from a DNS server to // a client, from the perspective of the DNS server. The DNS server // typically sets the RA (recursion available) bit when responding. CLIENT_RESPONSE = 6; // FORWARDER_QUERY is a DNS query message sent from a downstream DNS // server to an upstream DNS server which is expected to perform // further recursion, from the perspective of the downstream DNS // server. FORWARDER_QUERY = 7; // FORWARDER_RESPONSE is a DNS response message sent from an upstream // DNS server performing recursion to a downstream DNS server, from the // perspective of the downstream DNS server. FORWARDER_RESPONSE = 8; // STUB_QUERY is a DNS query message sent from a stub resolver to a DNS // server, from the perspective of the stub resolver. STUB_QUERY = 9; // STUB_RESPONSE is a DNS response message sent from a DNS server to a // stub resolver, from the perspective of the stub resolver. STUB_RESPONSE = 10; } // One of the Type values described above. required Type type = 1; // One of the SocketFamily values described above. optional SocketFamily socket_family = 2; // One of the SocketProtocol values described above. optional SocketProtocol socket_protocol = 3; // The network address of the message initiator. // For SocketFamily INET, this field is 4 octets (IPv4 address). // For SocketFamily INET6, this field is 16 octets (IPv6 address). optional bytes query_address = 4; // The network address of the message responder. // For SocketFamily INET, this field is 4 octets (IPv4 address). // For SocketFamily INET6, this field is 16 octets (IPv6 address). optional bytes response_address = 5; // The transport port of the message initiator. // This is a 16-bit UDP or TCP port number, depending on SocketProtocol. optional uint32 query_port = 6; // The transport port of the message responder. // This is a 16-bit UDP or TCP port number, depending on SocketProtocol. optional uint32 response_port = 7; // The time at which the DNS query message was sent or received, depending // on whether this is an AUTH_QUERY, RESOLVER_QUERY, or CLIENT_QUERY. // This is the number of seconds since the UNIX epoch. optional uint64 query_time_sec = 8; // The time at which the DNS query message was sent or received. // This is the seconds fraction, expressed as a count of nanoseconds. optional fixed32 query_time_nsec = 9; // The initiator's original wire-format DNS query message, verbatim. optional bytes query_message = 10; // The "zone" or "bailiwick" pertaining to the DNS query message. // This is a wire-format DNS domain name. optional bytes query_zone = 11; // The time at which the DNS response message was sent or received, // depending on whether this is an AUTH_RESPONSE, RESOLVER_RESPONSE, or // CLIENT_RESPONSE. // This is the number of seconds since the UNIX epoch. optional uint64 response_time_sec = 12; // The time at which the DNS response message was sent or received. // This is the seconds fraction, expressed as a count of nanoseconds. optional fixed32 response_time_nsec = 13; // The responder's original wire-format DNS response message, verbatim. optional bytes response_message = 14; } // All fields except for 'type' in the Message schema are optional. // It is recommended that at least the following fields be filled in for // particular types of Messages. // AUTH_QUERY: // socket_family, socket_protocol // query_address, query_port // query_message // query_time_sec, query_time_nsec // AUTH_RESPONSE: // socket_family, socket_protocol // query_address, query_port // query_time_sec, query_time_nsec // response_message // response_time_sec, response_time_nsec // RESOLVER_QUERY: // socket_family, socket_protocol // query_name, query_type, query_class // query_message // query_time_sec, query_time_nsec // query_zone // response_address, response_port // RESOLVER_RESPONSE: // socket_family, socket_protocol // query_name, query_type, query_class // query_time_sec, query_time_nsec // query_zone // response_address, response_port // response_message // response_time_sec, response_time_nsec // CLIENT_QUERY: // socket_family, socket_protocol // query_message // query_time_sec, query_time_nsec // CLIENT_RESPONSE: // socket_family, socket_protocol // query_time_sec, query_time_nsec // response_message // response_time_sec, response_time_nsec unbound-1.13.1/dnstap/dnstap.m40000644000175000017500000000346014010434640015726 0ustar wouterwouter# dnstap.m4 # dt_DNSTAP(default_dnstap_socket_path, [action-if-true], [action-if-false]) # -------------------------------------------------------------------------- # Check for required dnstap libraries and add dnstap configure args. AC_DEFUN([dt_DNSTAP], [ AC_ARG_ENABLE([dnstap], AS_HELP_STRING([--enable-dnstap], [Enable dnstap support (requires protobuf-c)]), [opt_dnstap=$enableval], [opt_dnstap=no]) AC_ARG_WITH([dnstap-socket-path], AS_HELP_STRING([--with-dnstap-socket-path=pathname], [set default dnstap socket path]), [opt_dnstap_socket_path=$withval], [opt_dnstap_socket_path="$1"]) if test "x$opt_dnstap" != "xno"; then AC_PATH_PROG([PROTOC_C], [protoc-c]) if test -z "$PROTOC_C"; then AC_MSG_ERROR([The protoc-c program was not found. Please install protobuf-c!]) fi AC_ARG_WITH([protobuf-c], AS_HELP_STRING([--with-protobuf-c=path], [Path where protobuf-c is installed, for dnstap]), [ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0 if test -f $withval/include/google/protobuf-c/protobuf-c.h; then CFLAGS="$CFLAGS -I$withval/include/google" else CFLAGS="$CFLAGS -I$withval/include" fi LDFLAGS="$LDFLAGS -L$withval/lib" ], [ # workaround for protobuf-c includes at old dir before protobuf-c-1.0.0 if test -f /usr/include/google/protobuf-c/protobuf-c.h; then CFLAGS="$CFLAGS -I/usr/include/google" else if test -f /usr/local/include/google/protobuf-c/protobuf-c.h; then CFLAGS="$CFLAGS -I/usr/local/include/google" LDFLAGS="$LDFLAGS -L/usr/local/lib" fi fi ]) AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [], AC_MSG_ERROR([The protobuf-c library was not found. Please install protobuf-c!])) $2 else $3 fi ]) unbound-1.13.1/dnstap/dtstream.c0000644000175000017500000016407214010434640016171 0ustar wouterwouter/* * dnstap/dtstream.c - Frame Streams thread for unbound DNSTAP * * Copyright (c) 2020, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * * An implementation of the Frame Streams data transport protocol for * the Unbound DNSTAP message logging facility. */ #include "config.h" #include "dnstap/dtstream.h" #include "dnstap/dnstap_fstrm.h" #include "util/config_file.h" #include "util/ub_event.h" #include "util/net_help.h" #include "services/outside_network.h" #include "sldns/sbuffer.h" #ifdef HAVE_SYS_UN_H #include #endif #include #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif /** number of messages to process in one output callback */ #define DTIO_MESSAGES_PER_CALLBACK 100 /** the msec to wait for reconnect (if not immediate, the first attempt) */ #define DTIO_RECONNECT_TIMEOUT_MIN 10 /** the msec to wait for reconnect max after backoff */ #define DTIO_RECONNECT_TIMEOUT_MAX 1000 /** the msec to wait for reconnect slow, to stop busy spinning on reconnect */ #define DTIO_RECONNECT_TIMEOUT_SLOW 1000 /** number of messages before wakeup of thread */ #define DTIO_MSG_FOR_WAKEUP 32 /** maximum length of received frame */ #define DTIO_RECV_FRAME_MAX_LEN 1000 struct stop_flush_info; /** DTIO command channel commands */ enum { /** DTIO command channel stop */ DTIO_COMMAND_STOP = 0, /** DTIO command channel wakeup */ DTIO_COMMAND_WAKEUP = 1 } dtio_channel_command; /** open the output channel */ static void dtio_open_output(struct dt_io_thread* dtio); /** add output event for read and write */ static int dtio_add_output_event_write(struct dt_io_thread* dtio); /** start reconnection attempts */ static void dtio_reconnect_enable(struct dt_io_thread* dtio); /** stop from stop_flush event loop */ static void dtio_stop_flush_exit(struct stop_flush_info* info); /** setup a start control message */ static int dtio_control_start_send(struct dt_io_thread* dtio); #ifdef HAVE_SSL /** enable briefly waiting for a read event, for SSL negotiation */ static int dtio_enable_brief_read(struct dt_io_thread* dtio); /** enable briefly waiting for a write event, for SSL negotiation */ static int dtio_enable_brief_write(struct dt_io_thread* dtio); #endif struct dt_msg_queue* dt_msg_queue_create(struct comm_base* base) { struct dt_msg_queue* mq = calloc(1, sizeof(*mq)); if(!mq) return NULL; mq->maxsize = 1*1024*1024; /* set max size of buffer, per worker, about 1 M should contain 64K messages with some overhead, or a whole bunch smaller ones */ mq->wakeup_timer = comm_timer_create(base, mq_wakeup_cb, mq); if(!mq->wakeup_timer) { free(mq); return NULL; } lock_basic_init(&mq->lock); lock_protect(&mq->lock, mq, sizeof(*mq)); return mq; } /** clear the message list, caller must hold the lock */ static void dt_msg_queue_clear(struct dt_msg_queue* mq) { struct dt_msg_entry* e = mq->first, *next=NULL; while(e) { next = e->next; free(e->buf); free(e); e = next; } mq->first = NULL; mq->last = NULL; mq->cursize = 0; mq->msgcount = 0; } void dt_msg_queue_delete(struct dt_msg_queue* mq) { if(!mq) return; lock_basic_destroy(&mq->lock); dt_msg_queue_clear(mq); comm_timer_delete(mq->wakeup_timer); free(mq); } /** make the dtio wake up by sending a wakeup command */ static void dtio_wakeup(struct dt_io_thread* dtio) { uint8_t cmd = DTIO_COMMAND_WAKEUP; if(!dtio) return; if(!dtio->started) return; while(1) { ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) continue; #else if(WSAGetLastError() == WSAEINPROGRESS) continue; if(WSAGetLastError() == WSAEWOULDBLOCK) continue; #endif log_err("dnstap io wakeup: write: %s", sock_strerror(errno)); break; } break; } } void mq_wakeup_cb(void* arg) { struct dt_msg_queue* mq = (struct dt_msg_queue*)arg; /* even if the dtio is already active, because perhaps much * traffic suddenly, we leave the timer running to save on * managing it, the once a second timer is less work then * starting and stopping the timer frequently */ lock_basic_lock(&mq->dtio->wakeup_timer_lock); mq->dtio->wakeup_timer_enabled = 0; lock_basic_unlock(&mq->dtio->wakeup_timer_lock); dtio_wakeup(mq->dtio); } /** start timer to wakeup dtio because there is content in the queue */ static void dt_msg_queue_start_timer(struct dt_msg_queue* mq) { struct timeval tv; /* Start a timer to process messages to be logged. * If we woke up the dtio thread for every message, the wakeup * messages take up too much processing power. If the queue * fills up the wakeup happens immediately. The timer wakes it up * if there are infrequent messages to log. */ /* we cannot start a timer in dtio thread, because it is a different * thread and its event base is in use by the other thread, it would * give race conditions if we tried to modify its event base, * and locks would wait until it woke up, and this is what we do. */ /* do not start the timer if a timer already exists, perhaps * in another worker. So this variable is protected by a lock in * dtio */ lock_basic_lock(&mq->dtio->wakeup_timer_lock); if(mq->dtio->wakeup_timer_enabled) { lock_basic_unlock(&mq->dtio->wakeup_timer_lock); return; } mq->dtio->wakeup_timer_enabled = 1; /* we are going to start one */ lock_basic_unlock(&mq->dtio->wakeup_timer_lock); /* start the timer, in mq, in the event base of our worker */ tv.tv_sec = 1; tv.tv_usec = 0; comm_timer_set(mq->wakeup_timer, &tv); } void dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len) { int wakeupnow = 0, wakeupstarttimer = 0; struct dt_msg_entry* entry; /* check conditions */ if(!buf) return; if(len == 0) { /* it is not possible to log entries with zero length, * because the framestream protocol does not carry it. * However the protobuf serialization does not create zero * length datagrams for dnstap, so this should not happen. */ free(buf); return; } if(!mq) { free(buf); return; } /* allocate memory for queue entry */ entry = malloc(sizeof(*entry)); if(!entry) { log_err("out of memory logging dnstap"); free(buf); return; } entry->next = NULL; entry->buf = buf; entry->len = len; /* aqcuire lock */ lock_basic_lock(&mq->lock); /* if list was empty, start timer for (eventual) wakeup */ if(mq->first == NULL) wakeupstarttimer = 1; /* if list contains more than wakeupnum elements, wakeup now, * or if list is (going to be) almost full */ if(mq->msgcount == DTIO_MSG_FOR_WAKEUP || (mq->cursize < mq->maxsize * 9 / 10 && mq->cursize+len >= mq->maxsize * 9 / 10)) wakeupnow = 1; /* see if it is going to fit */ if(mq->cursize + len > mq->maxsize) { /* buffer full, or congested. */ /* drop */ lock_basic_unlock(&mq->lock); free(buf); free(entry); return; } mq->cursize += len; mq->msgcount ++; /* append to list */ if(mq->last) { mq->last->next = entry; } else { mq->first = entry; } mq->last = entry; /* release lock */ lock_basic_unlock(&mq->lock); if(wakeupnow) { dtio_wakeup(mq->dtio); } else if(wakeupstarttimer) { dt_msg_queue_start_timer(mq); } } struct dt_io_thread* dt_io_thread_create(void) { struct dt_io_thread* dtio = calloc(1, sizeof(*dtio)); lock_basic_init(&dtio->wakeup_timer_lock); lock_protect(&dtio->wakeup_timer_lock, &dtio->wakeup_timer_enabled, sizeof(dtio->wakeup_timer_enabled)); return dtio; } void dt_io_thread_delete(struct dt_io_thread* dtio) { struct dt_io_list_item* item, *nextitem; if(!dtio) return; lock_basic_destroy(&dtio->wakeup_timer_lock); item=dtio->io_list; while(item) { nextitem = item->next; free(item); item = nextitem; } free(dtio->socket_path); free(dtio->ip_str); free(dtio->tls_server_name); free(dtio->client_key_file); free(dtio->client_cert_file); if(dtio->ssl_ctx) { #ifdef HAVE_SSL SSL_CTX_free(dtio->ssl_ctx); #endif } free(dtio); } int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg) { if(!cfg->dnstap) { log_warn("cannot setup dnstap because dnstap-enable is no"); return 0; } /* what type of connectivity do we have */ if(cfg->dnstap_ip && cfg->dnstap_ip[0]) { if(cfg->dnstap_tls) dtio->upstream_is_tls = 1; else dtio->upstream_is_tcp = 1; } else { dtio->upstream_is_unix = 1; } dtio->is_bidirectional = cfg->dnstap_bidirectional; if(dtio->upstream_is_unix) { char* nm; if(!cfg->dnstap_socket_path || cfg->dnstap_socket_path[0]==0) { log_err("dnstap setup: no dnstap-socket-path for " "socket connect"); return 0; } nm = cfg->dnstap_socket_path; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm, cfg->chrootdir, strlen(cfg->chrootdir)) == 0) nm += strlen(cfg->chrootdir); free(dtio->socket_path); dtio->socket_path = strdup(nm); if(!dtio->socket_path) { log_err("dnstap setup: malloc failure"); return 0; } } if(dtio->upstream_is_tcp || dtio->upstream_is_tls) { if(!cfg->dnstap_ip || cfg->dnstap_ip[0] == 0) { log_err("dnstap setup: no dnstap-ip for TCP connect"); return 0; } free(dtio->ip_str); dtio->ip_str = strdup(cfg->dnstap_ip); if(!dtio->ip_str) { log_err("dnstap setup: malloc failure"); return 0; } } if(dtio->upstream_is_tls) { #ifdef HAVE_SSL if(cfg->dnstap_tls_server_name && cfg->dnstap_tls_server_name[0]) { free(dtio->tls_server_name); dtio->tls_server_name = strdup( cfg->dnstap_tls_server_name); if(!dtio->tls_server_name) { log_err("dnstap setup: malloc failure"); return 0; } if(!check_auth_name_for_ssl(dtio->tls_server_name)) return 0; } if(cfg->dnstap_tls_client_key_file && cfg->dnstap_tls_client_key_file[0]) { dtio->use_client_certs = 1; free(dtio->client_key_file); dtio->client_key_file = strdup( cfg->dnstap_tls_client_key_file); if(!dtio->client_key_file) { log_err("dnstap setup: malloc failure"); return 0; } if(!cfg->dnstap_tls_client_cert_file || cfg->dnstap_tls_client_cert_file[0]==0) { log_err("dnstap setup: client key " "authentication enabled with " "dnstap-tls-client-key-file, but " "no dnstap-tls-client-cert-file " "is given"); return 0; } free(dtio->client_cert_file); dtio->client_cert_file = strdup( cfg->dnstap_tls_client_cert_file); if(!dtio->client_cert_file) { log_err("dnstap setup: malloc failure"); return 0; } } else { dtio->use_client_certs = 0; dtio->client_key_file = NULL; dtio->client_cert_file = NULL; } if(cfg->dnstap_tls_cert_bundle) { dtio->ssl_ctx = connect_sslctx_create( dtio->client_key_file, dtio->client_cert_file, cfg->dnstap_tls_cert_bundle, 0); } else { dtio->ssl_ctx = connect_sslctx_create( dtio->client_key_file, dtio->client_cert_file, cfg->tls_cert_bundle, cfg->tls_win_cert); } if(!dtio->ssl_ctx) { log_err("could not setup SSL CTX"); return 0; } dtio->tls_use_sni = cfg->tls_use_sni; #endif /* HAVE_SSL */ } return 1; } int dt_io_thread_register_queue(struct dt_io_thread* dtio, struct dt_msg_queue* mq) { struct dt_io_list_item* item = malloc(sizeof(*item)); if(!item) return 0; lock_basic_lock(&mq->lock); mq->dtio = dtio; lock_basic_unlock(&mq->lock); item->queue = mq; item->next = dtio->io_list; dtio->io_list = item; dtio->io_list_iter = NULL; return 1; } void dt_io_thread_unregister_queue(struct dt_io_thread* dtio, struct dt_msg_queue* mq) { struct dt_io_list_item* item, *prev=NULL; if(!dtio) return; item = dtio->io_list; while(item) { if(item->queue == mq) { /* found it */ if(prev) prev->next = item->next; else dtio->io_list = item->next; /* the queue itself only registered, not deleted */ lock_basic_lock(&item->queue->lock); item->queue->dtio = NULL; lock_basic_unlock(&item->queue->lock); free(item); dtio->io_list_iter = NULL; return; } prev = item; item = item->next; } } /** pick a message from the queue, the routine locks and unlocks, * returns true if there is a message */ static int dt_msg_queue_pop(struct dt_msg_queue* mq, void** buf, size_t* len) { lock_basic_lock(&mq->lock); if(mq->first) { struct dt_msg_entry* entry = mq->first; mq->first = entry->next; if(!entry->next) mq->last = NULL; mq->cursize -= entry->len; mq->msgcount --; lock_basic_unlock(&mq->lock); *buf = entry->buf; *len = entry->len; free(entry); return 1; } lock_basic_unlock(&mq->lock); return 0; } /** find message in queue, false if no message, true if message to send */ static int dtio_find_in_queue(struct dt_io_thread* dtio, struct dt_msg_queue* mq) { void* buf=NULL; size_t len=0; if(dt_msg_queue_pop(mq, &buf, &len)) { dtio->cur_msg = buf; dtio->cur_msg_len = len; dtio->cur_msg_done = 0; dtio->cur_msg_len_done = 0; return 1; } return 0; } /** find a new message to write, search message queues, false if none */ static int dtio_find_msg(struct dt_io_thread* dtio) { struct dt_io_list_item *spot, *item; spot = dtio->io_list_iter; /* use the next queue for the next message lookup, * if we hit the end(NULL) the NULL restarts the iter at start. */ if(spot) dtio->io_list_iter = spot->next; else if(dtio->io_list) dtio->io_list_iter = dtio->io_list->next; /* scan from spot to end-of-io_list */ item = spot; while(item) { if(dtio_find_in_queue(dtio, item->queue)) return 1; item = item->next; } /* scan starting at the start-of-list (to wrap around the end) */ item = dtio->io_list; while(item) { if(dtio_find_in_queue(dtio, item->queue)) return 1; item = item->next; } return 0; } /** callback for the dnstap reconnect, to start reconnecting to output */ void dtio_reconnect_timeout_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; dtio->reconnect_is_added = 0; verbose(VERB_ALGO, "dnstap io: reconnect timer"); dtio_open_output(dtio); if(dtio->event) { if(!dtio_add_output_event_write(dtio)) return; /* nothing wrong so far, wait on the output event */ return; } /* exponential backoff and retry on timer */ dtio_reconnect_enable(dtio); } /** attempt to reconnect to the output, after a timeout */ static void dtio_reconnect_enable(struct dt_io_thread* dtio) { struct timeval tv; int msec; if(dtio->want_to_exit) return; if(dtio->reconnect_is_added) return; /* already done */ /* exponential backoff, store the value for next timeout */ msec = dtio->reconnect_timeout; if(msec == 0) { dtio->reconnect_timeout = DTIO_RECONNECT_TIMEOUT_MIN; } else { dtio->reconnect_timeout = msec*2; if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MAX) dtio->reconnect_timeout = DTIO_RECONNECT_TIMEOUT_MAX; } verbose(VERB_ALGO, "dnstap io: set reconnect attempt after %d msec", msec); /* setup wait timer */ memset(&tv, 0, sizeof(tv)); tv.tv_sec = msec/1000; tv.tv_usec = (msec%1000)*1000; if(ub_timer_add(dtio->reconnect_timer, dtio->event_base, &dtio_reconnect_timeout_cb, dtio, &tv) != 0) { log_err("dnstap io: could not reconnect ev timer add"); return; } dtio->reconnect_is_added = 1; } /** remove dtio reconnect timer */ static void dtio_reconnect_del(struct dt_io_thread* dtio) { if(!dtio->reconnect_is_added) return; ub_timer_del(dtio->reconnect_timer); dtio->reconnect_is_added = 0; } /** clear the reconnect exponential backoff timer. * We have successfully connected so we can try again with short timeouts. */ static void dtio_reconnect_clear(struct dt_io_thread* dtio) { dtio->reconnect_timeout = 0; dtio_reconnect_del(dtio); } /** reconnect slowly, because we already know we have to wait for a bit */ static void dtio_reconnect_slow(struct dt_io_thread* dtio, int msec) { dtio_reconnect_del(dtio); dtio->reconnect_timeout = msec; dtio_reconnect_enable(dtio); } /** delete the current message in the dtio, and reset counters */ static void dtio_cur_msg_free(struct dt_io_thread* dtio) { free(dtio->cur_msg); dtio->cur_msg = NULL; dtio->cur_msg_len = 0; dtio->cur_msg_done = 0; dtio->cur_msg_len_done = 0; } /** delete the buffer and counters used to read frame */ static void dtio_read_frame_free(struct dt_frame_read_buf* rb) { if(rb->buf) { free(rb->buf); rb->buf = NULL; } rb->buf_count = 0; rb->buf_cap = 0; rb->frame_len = 0; rb->frame_len_done = 0; rb->control_frame = 0; } /** del the output file descriptor event for listening */ static void dtio_del_output_event(struct dt_io_thread* dtio) { if(!dtio->event_added) return; ub_event_del(dtio->event); dtio->event_added = 0; dtio->event_added_is_write = 0; } /** close dtio socket and set it to -1 */ static void dtio_close_fd(struct dt_io_thread* dtio) { sock_close(dtio->fd); dtio->fd = -1; } /** close and stop the output file descriptor event */ static void dtio_close_output(struct dt_io_thread* dtio) { if(!dtio->event) return; ub_event_free(dtio->event); dtio->event = NULL; if(dtio->ssl) { #ifdef HAVE_SSL SSL_shutdown(dtio->ssl); SSL_free(dtio->ssl); dtio->ssl = NULL; #endif } dtio_close_fd(dtio); /* if there is a (partial) message, discard it * we cannot send (the remainder of) it, and a new * connection needs to start with a control frame. */ if(dtio->cur_msg) { dtio_cur_msg_free(dtio); } dtio->ready_frame_sent = 0; dtio->accept_frame_received = 0; dtio_read_frame_free(&dtio->read_frame); dtio_reconnect_enable(dtio); } /** check for pending nonblocking connect errors, * returns 1 if it is okay. -1 on error (close it), 0 to try later */ static int dtio_check_nb_connect(struct dt_io_thread* dtio) { int error = 0; socklen_t len = (socklen_t)sizeof(error); if(!dtio->check_nb_connect) return 1; /* everything okay */ if(getsockopt(dtio->fd, SOL_SOCKET, SO_ERROR, (void*)&error, &len) < 0) { #ifndef USE_WINSOCK error = errno; /* on solaris errno is error */ #else error = WSAGetLastError(); #endif } #ifndef USE_WINSOCK #if defined(EINPROGRESS) && defined(EWOULDBLOCK) if(error == EINPROGRESS || error == EWOULDBLOCK) return 0; /* try again later */ #endif #else if(error == WSAEINPROGRESS) { return 0; /* try again later */ } else if(error == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock((dtio->stop_flush_event? dtio->stop_flush_event:dtio->event), UB_EV_WRITE); return 0; /* try again later */ } #endif if(error != 0) { char* to = dtio->socket_path; if(!to) to = dtio->ip_str; if(!to) to = ""; log_err("dnstap io: failed to connect to \"%s\": %s", to, sock_strerror(error)); return -1; /* error, close it */ } if(dtio->ip_str) verbose(VERB_DETAIL, "dnstap io: connected to %s", dtio->ip_str); else if(dtio->socket_path) verbose(VERB_DETAIL, "dnstap io: connected to \"%s\"", dtio->socket_path); dtio_reconnect_clear(dtio); dtio->check_nb_connect = 0; return 1; /* everything okay */ } #ifdef HAVE_SSL /** write to ssl output * returns number of bytes written, 0 if nothing happened, * try again later, or -1 if the channel is to be closed. */ static int dtio_write_ssl(struct dt_io_thread* dtio, uint8_t* buf, size_t len) { int r; ERR_clear_error(); r = SSL_write(dtio->ssl, buf, len); if(r <= 0) { int want = SSL_get_error(dtio->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { /* closed */ return -1; } else if(want == SSL_ERROR_WANT_READ) { /* we want a brief read event */ dtio_enable_brief_read(dtio); return 0; } else if(want == SSL_ERROR_WANT_WRITE) { /* write again later */ return 0; } else if(want == SSL_ERROR_SYSCALL) { #ifdef EPIPE if(errno == EPIPE && verbosity < 2) return -1; /* silence 'broken pipe' */ #endif #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return -1; /* silence reset by peer */ #endif if(errno != 0) { log_err("dnstap io, SSL_write syscall: %s", strerror(errno)); } return -1; } log_crypto_err("dnstap io, could not SSL_write"); return -1; } return r; } #endif /* HAVE_SSL */ /** write buffer to output. * returns number of bytes written, 0 if nothing happened, * try again later, or -1 if the channel is to be closed. */ static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf, size_t len) { ssize_t ret; if(dtio->fd == -1) return -1; #ifdef HAVE_SSL if(dtio->ssl) return dtio_write_ssl(dtio, buf, len); #endif ret = send(dtio->fd, (void*)buf, len, 0); if(ret == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 0; #else if(WSAGetLastError() == WSAEINPROGRESS) return 0; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock((dtio->stop_flush_event? dtio->stop_flush_event:dtio->event), UB_EV_WRITE); return 0; } #endif log_err("dnstap io: failed send: %s", sock_strerror(errno)); return -1; } return ret; } #ifdef HAVE_WRITEV /** write with writev, len and message, in one write, if possible. * return true if message is done, false if incomplete */ static int dtio_write_with_writev(struct dt_io_thread* dtio) { uint32_t sendlen = htonl(dtio->cur_msg_len); struct iovec iov[2]; ssize_t r; iov[0].iov_base = ((uint8_t*)&sendlen)+dtio->cur_msg_len_done; iov[0].iov_len = sizeof(sendlen)-dtio->cur_msg_len_done; iov[1].iov_base = dtio->cur_msg; iov[1].iov_len = dtio->cur_msg_len; log_assert(iov[0].iov_len > 0); r = writev(dtio->fd, iov, 2); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 0; #else if(WSAGetLastError() == WSAEINPROGRESS) return 0; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock((dtio->stop_flush_event? dtio->stop_flush_event:dtio->event), UB_EV_WRITE); return 0; } #endif log_err("dnstap io: failed writev: %s", sock_strerror(errno)); /* close the channel */ dtio_del_output_event(dtio); dtio_close_output(dtio); return 0; } /* written r bytes */ dtio->cur_msg_len_done += r; if(dtio->cur_msg_len_done < 4) return 0; if(dtio->cur_msg_len_done > 4) { dtio->cur_msg_done = dtio->cur_msg_len_done-4; dtio->cur_msg_len_done = 4; } if(dtio->cur_msg_done < dtio->cur_msg_len) return 0; return 1; } #endif /* HAVE_WRITEV */ /** write more of the length, preceding the data frame. * return true if message is done, false if incomplete. */ static int dtio_write_more_of_len(struct dt_io_thread* dtio) { uint32_t sendlen; int r; if(dtio->cur_msg_len_done >= 4) return 1; #ifdef HAVE_WRITEV if(!dtio->ssl) { /* we try writev for everything.*/ return dtio_write_with_writev(dtio); } #endif /* HAVE_WRITEV */ sendlen = htonl(dtio->cur_msg_len); r = dtio_write_buf(dtio, ((uint8_t*)&sendlen)+dtio->cur_msg_len_done, sizeof(sendlen)-dtio->cur_msg_len_done); if(r == -1) { /* close the channel */ dtio_del_output_event(dtio); dtio_close_output(dtio); return 0; } else if(r == 0) { /* try again later */ return 0; } dtio->cur_msg_len_done += r; if(dtio->cur_msg_len_done < 4) return 0; return 1; } /** write more of the data frame. * return true if message is done, false if incomplete. */ static int dtio_write_more_of_data(struct dt_io_thread* dtio) { int r; if(dtio->cur_msg_done >= dtio->cur_msg_len) return 1; r = dtio_write_buf(dtio, ((uint8_t*)dtio->cur_msg)+dtio->cur_msg_done, dtio->cur_msg_len - dtio->cur_msg_done); if(r == -1) { /* close the channel */ dtio_del_output_event(dtio); dtio_close_output(dtio); return 0; } else if(r == 0) { /* try again later */ return 0; } dtio->cur_msg_done += r; if(dtio->cur_msg_done < dtio->cur_msg_len) return 0; return 1; } /** write more of the current messsage. false if incomplete, true if * the message is done */ static int dtio_write_more(struct dt_io_thread* dtio) { if(dtio->cur_msg_len_done < 4) { if(!dtio_write_more_of_len(dtio)) return 0; } if(dtio->cur_msg_done < dtio->cur_msg_len) { if(!dtio_write_more_of_data(dtio)) return 0; } return 1; } /** Receive bytes from dtio->fd, store in buffer. Returns 0: closed, * -1: continue, >0: number of bytes read into buffer */ static ssize_t receive_bytes(struct dt_io_thread* dtio, void* buf, size_t len) { ssize_t r; r = recv(dtio->fd, (void*)buf, len, 0); if(r == -1) { char* to = dtio->socket_path; if(!to) to = dtio->ip_str; if(!to) to = ""; #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return -1; /* try later */ #else if(WSAGetLastError() == WSAEINPROGRESS) { return -1; /* try later */ } else if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock( (dtio->stop_flush_event? dtio->stop_flush_event:dtio->event), UB_EV_READ); return -1; /* try later */ } #endif if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && verbosity < 4) return 0; /* no log retries on low verbosity */ log_err("dnstap io: output closed, recv %s: %s", to, strerror(errno)); /* and close below */ return 0; } if(r == 0) { if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && verbosity < 4) return 0; /* no log retries on low verbosity */ verbose(VERB_DETAIL, "dnstap io: output closed by the other side"); /* and close below */ return 0; } /* something was received */ return r; } #ifdef HAVE_SSL /** Receive bytes over TLS from dtio->fd, store in buffer. Returns 0: closed, * -1: continue, >0: number of bytes read into buffer */ static int ssl_read_bytes(struct dt_io_thread* dtio, void* buf, size_t len) { int r; ERR_clear_error(); r = SSL_read(dtio->ssl, buf, len); if(r <= 0) { int want = SSL_get_error(dtio->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && verbosity < 4) return 0; /* no log retries on low verbosity */ verbose(VERB_DETAIL, "dnstap io: output closed by the " "other side"); return 0; } else if(want == SSL_ERROR_WANT_READ) { /* continue later */ return -1; } else if(want == SSL_ERROR_WANT_WRITE) { (void)dtio_enable_brief_write(dtio); return -1; } else if(want == SSL_ERROR_SYSCALL) { #ifdef ECONNRESET if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && errno == ECONNRESET && verbosity < 4) return 0; /* silence reset by peer */ #endif if(errno != 0) log_err("SSL_read syscall: %s", strerror(errno)); verbose(VERB_DETAIL, "dnstap io: output closed by the " "other side"); return 0; } log_crypto_err("could not SSL_read"); verbose(VERB_DETAIL, "dnstap io: output closed by the " "other side"); return 0; } return r; } #endif /* HAVE_SSL */ /** check if the output fd has been closed, * it returns false if the stream is closed. */ static int dtio_check_close(struct dt_io_thread* dtio) { /* we don't want to read any packets, but if there are we can * discard the input (ignore it). Ignore of unknown (control) * packets is okay for the framestream protocol. And also, the * read call can return that the stream has been closed by the * other side. */ uint8_t buf[1024]; int r = -1; if(dtio->fd == -1) return 0; while(r != 0) { /* not interested in buffer content, overwrite */ r = receive_bytes(dtio, (void*)buf, sizeof(buf)); if(r == -1) return 1; } /* the other end has been closed */ /* close the channel */ dtio_del_output_event(dtio); dtio_close_output(dtio); return 0; } /** Read accept frame. Returns -1: continue reading, 0: closed, * 1: valid accept received. */ static int dtio_read_accept_frame(struct dt_io_thread* dtio) { int r; size_t read_frame_done; while(dtio->read_frame.frame_len_done < 4) { #ifdef HAVE_SSL if(dtio->ssl) { r = ssl_read_bytes(dtio, (uint8_t*)&dtio->read_frame.frame_len+ dtio->read_frame.frame_len_done, 4-dtio->read_frame.frame_len_done); } else { #endif r = receive_bytes(dtio, (uint8_t*)&dtio->read_frame.frame_len+ dtio->read_frame.frame_len_done, 4-dtio->read_frame.frame_len_done); #ifdef HAVE_SSL } #endif if(r == -1) return -1; /* continue reading */ if(r == 0) { /* connection closed */ goto close_connection; } dtio->read_frame.frame_len_done += r; if(dtio->read_frame.frame_len_done < 4) return -1; /* continue reading */ if(dtio->read_frame.frame_len == 0) { dtio->read_frame.frame_len_done = 0; dtio->read_frame.control_frame = 1; continue; } dtio->read_frame.frame_len = ntohl(dtio->read_frame.frame_len); if(dtio->read_frame.frame_len > DTIO_RECV_FRAME_MAX_LEN) { verbose(VERB_OPS, "dnstap: received frame exceeds max " "length of %d bytes, closing connection", DTIO_RECV_FRAME_MAX_LEN); goto close_connection; } dtio->read_frame.buf = calloc(1, dtio->read_frame.frame_len); dtio->read_frame.buf_cap = dtio->read_frame.frame_len; if(!dtio->read_frame.buf) { log_err("dnstap io: out of memory (creating read " "buffer)"); goto close_connection; } } if(dtio->read_frame.buf_count < dtio->read_frame.frame_len) { #ifdef HAVE_SSL if(dtio->ssl) { r = ssl_read_bytes(dtio, dtio->read_frame.buf+ dtio->read_frame.buf_count, dtio->read_frame.buf_cap- dtio->read_frame.buf_count); } else { #endif r = receive_bytes(dtio, dtio->read_frame.buf+ dtio->read_frame.buf_count, dtio->read_frame.buf_cap- dtio->read_frame.buf_count); #ifdef HAVE_SSL } #endif if(r == -1) return -1; /* continue reading */ if(r == 0) { /* connection closed */ goto close_connection; } dtio->read_frame.buf_count += r; if(dtio->read_frame.buf_count < dtio->read_frame.frame_len) return -1; /* continue reading */ } /* Complete frame received, check if this is a valid ACCEPT control * frame. */ if(dtio->read_frame.frame_len < 4) { verbose(VERB_OPS, "dnstap: invalid data received"); goto close_connection; } if(sldns_read_uint32(dtio->read_frame.buf) != FSTRM_CONTROL_FRAME_ACCEPT) { verbose(VERB_ALGO, "dnstap: invalid control type received, " "ignored"); dtio->ready_frame_sent = 0; dtio->accept_frame_received = 0; dtio_read_frame_free(&dtio->read_frame); return -1; } read_frame_done = 4; /* control frame type */ /* Iterate over control fields, ignore unknown types. * Need to be able to read at least 8 bytes (control field type + * length). */ while(read_frame_done+8 < dtio->read_frame.frame_len) { uint32_t type = sldns_read_uint32(dtio->read_frame.buf + read_frame_done); uint32_t len = sldns_read_uint32(dtio->read_frame.buf + read_frame_done + 4); if(type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) { if(len == strlen(DNSTAP_CONTENT_TYPE) && read_frame_done+8+len <= dtio->read_frame.frame_len && memcmp(dtio->read_frame.buf + read_frame_done + + 8, DNSTAP_CONTENT_TYPE, len) == 0) { if(!dtio_control_start_send(dtio)) { verbose(VERB_OPS, "dnstap io: out of " "memory while sending START frame"); goto close_connection; } dtio->accept_frame_received = 1; if(!dtio_add_output_event_write(dtio)) goto close_connection; return 1; } else { /* unknow content type */ verbose(VERB_ALGO, "dnstap: ACCEPT frame " "contains unknown content type, " "closing connection"); goto close_connection; } } /* unknown option, try next */ read_frame_done += 8+len; } close_connection: dtio_del_output_event(dtio); dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } /** add the output file descriptor event for listening, read only */ static int dtio_add_output_event_read(struct dt_io_thread* dtio) { if(!dtio->event) return 0; if(dtio->event_added && !dtio->event_added_is_write) return 1; /* we have to (re-)register the event */ if(dtio->event_added) ub_event_del(dtio->event); ub_event_del_bits(dtio->event, UB_EV_WRITE); if(ub_event_add(dtio->event, NULL) != 0) { log_err("dnstap io: out of memory (adding event)"); dtio->event_added = 0; dtio->event_added_is_write = 0; /* close output and start reattempts to open it */ dtio_close_output(dtio); return 0; } dtio->event_added = 1; dtio->event_added_is_write = 0; return 1; } /** add the output file descriptor event for listening, read and write */ static int dtio_add_output_event_write(struct dt_io_thread* dtio) { if(!dtio->event) return 0; if(dtio->event_added && dtio->event_added_is_write) return 1; /* we have to (re-)register the event */ if(dtio->event_added) ub_event_del(dtio->event); ub_event_add_bits(dtio->event, UB_EV_WRITE); if(ub_event_add(dtio->event, NULL) != 0) { log_err("dnstap io: out of memory (adding event)"); dtio->event_added = 0; dtio->event_added_is_write = 0; /* close output and start reattempts to open it */ dtio_close_output(dtio); return 0; } dtio->event_added = 1; dtio->event_added_is_write = 1; return 1; } /** put the dtio thread to sleep */ static void dtio_sleep(struct dt_io_thread* dtio) { /* unregister the event polling for write, because there is * nothing to be written */ (void)dtio_add_output_event_read(dtio); } #ifdef HAVE_SSL /** enable the brief read condition */ static int dtio_enable_brief_read(struct dt_io_thread* dtio) { dtio->ssl_brief_read = 1; if(dtio->stop_flush_event) { ub_event_del(dtio->stop_flush_event); ub_event_del_bits(dtio->stop_flush_event, UB_EV_WRITE); if(ub_event_add(dtio->stop_flush_event, NULL) != 0) { log_err("dnstap io, stop flush, could not ub_event_add"); return 0; } return 1; } return dtio_add_output_event_read(dtio); } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /** disable the brief read condition */ static int dtio_disable_brief_read(struct dt_io_thread* dtio) { dtio->ssl_brief_read = 0; if(dtio->stop_flush_event) { ub_event_del(dtio->stop_flush_event); ub_event_add_bits(dtio->stop_flush_event, UB_EV_WRITE); if(ub_event_add(dtio->stop_flush_event, NULL) != 0) { log_err("dnstap io, stop flush, could not ub_event_add"); return 0; } return 1; } return dtio_add_output_event_write(dtio); } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /** enable the brief write condition */ static int dtio_enable_brief_write(struct dt_io_thread* dtio) { dtio->ssl_brief_write = 1; return dtio_add_output_event_write(dtio); } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /** disable the brief write condition */ static int dtio_disable_brief_write(struct dt_io_thread* dtio) { dtio->ssl_brief_write = 0; return dtio_add_output_event_read(dtio); } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /** check peer verification after ssl handshake connection, false if closed*/ static int dtio_ssl_check_peer(struct dt_io_thread* dtio) { if((SSL_get_verify_mode(dtio->ssl)&SSL_VERIFY_PEER)) { /* verification */ if(SSL_get_verify_result(dtio->ssl) == X509_V_OK) { X509* x = SSL_get_peer_certificate(dtio->ssl); if(!x) { verbose(VERB_ALGO, "dnstap io, %s, SSL " "connection failed no certificate", dtio->ip_str); return 0; } log_cert(VERB_ALGO, "dnstap io, peer certificate", x); #ifdef HAVE_SSL_GET0_PEERNAME if(SSL_get0_peername(dtio->ssl)) { verbose(VERB_ALGO, "dnstap io, %s, SSL " "connection to %s authenticated", dtio->ip_str, SSL_get0_peername(dtio->ssl)); } else { #endif verbose(VERB_ALGO, "dnstap io, %s, SSL " "connection authenticated", dtio->ip_str); #ifdef HAVE_SSL_GET0_PEERNAME } #endif X509_free(x); } else { X509* x = SSL_get_peer_certificate(dtio->ssl); if(x) { log_cert(VERB_ALGO, "dnstap io, peer " "certificate", x); X509_free(x); } verbose(VERB_ALGO, "dnstap io, %s, SSL connection " "failed: failed to authenticate", dtio->ip_str); return 0; } } else { /* unauthenticated, the verify peer flag was not set * in ssl when the ssl object was created from ssl_ctx */ verbose(VERB_ALGO, "dnstap io, %s, SSL connection", dtio->ip_str); } return 1; } #endif /* HAVE_SSL */ #ifdef HAVE_SSL /** perform ssl handshake, returns 1 if okay, 0 to stop */ static int dtio_ssl_handshake(struct dt_io_thread* dtio, struct stop_flush_info* info) { int r; if(dtio->ssl_brief_read) { /* assume the brief read condition is satisfied, * if we need more or again, we can set it again */ if(!dtio_disable_brief_read(dtio)) { if(info) dtio_stop_flush_exit(info); return 0; } } if(dtio->ssl_handshake_done) return 1; ERR_clear_error(); r = SSL_do_handshake(dtio->ssl); if(r != 1) { int want = SSL_get_error(dtio->ssl, r); if(want == SSL_ERROR_WANT_READ) { /* we want to read on the connection */ if(!dtio_enable_brief_read(dtio)) { if(info) dtio_stop_flush_exit(info); return 0; } return 0; } else if(want == SSL_ERROR_WANT_WRITE) { /* we want to write on the connection */ return 0; } else if(r == 0) { /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } else if(want == SSL_ERROR_SYSCALL) { /* SYSCALL and errno==0 means closed uncleanly */ int silent = 0; #ifdef EPIPE if(errno == EPIPE && verbosity < 2) silent = 1; /* silence 'broken pipe' */ #endif #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) silent = 1; /* silence reset by peer */ #endif if(errno == 0) silent = 1; if(!silent) log_err("dnstap io, SSL_handshake syscall: %s", strerror(errno)); /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } else { unsigned long err = ERR_get_error(); if(!squelch_err_ssl_handshake(err)) { log_crypto_err_code("dnstap io, ssl handshake failed", err); verbose(VERB_OPS, "dnstap io, ssl handshake failed " "from %s", dtio->ip_str); } /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } } /* check peer verification */ dtio->ssl_handshake_done = 1; if(!dtio_ssl_check_peer(dtio)) { /* closed */ if(info) dtio_stop_flush_exit(info); dtio_del_output_event(dtio); dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW); dtio_close_output(dtio); return 0; } return 1; } #endif /* HAVE_SSL */ /** callback for the dnstap events, to write to the output */ void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; int i; if(dtio->check_nb_connect) { int connect_err = dtio_check_nb_connect(dtio); if(connect_err == -1) { /* close the channel */ dtio_del_output_event(dtio); dtio_close_output(dtio); return; } else if(connect_err == 0) { /* try again later */ return; } /* nonblocking connect check passed, continue */ } #ifdef HAVE_SSL if(dtio->ssl && (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) { if(!dtio_ssl_handshake(dtio, NULL)) return; } #endif if((bits&UB_EV_READ || dtio->ssl_brief_write)) { if(dtio->ssl_brief_write) (void)dtio_disable_brief_write(dtio); if(dtio->ready_frame_sent && !dtio->accept_frame_received) { if(dtio_read_accept_frame(dtio) <= 0) return; } else if(!dtio_check_close(dtio)) return; } /* loop to process a number of messages. This improves throughput, * because selecting on write-event if not needed for busy messages * (dnstap log) generation and if they need to all be written back. * The write event is usually not blocked up. But not forever, * because the event loop needs to stay responsive for other events. * If there are no (more) messages, or if the output buffers get * full, it returns out of the loop. */ for(i=0; icur_msg) { if(!dtio_find_msg(dtio)) { if(i == 0) { /* no messages on the first iteration, * the queues are all empty */ dtio_sleep(dtio); } return; /* nothing to do */ } } /* write it */ if(dtio->cur_msg_done < dtio->cur_msg_len) { if(!dtio_write_more(dtio)) return; } /* done with the current message */ dtio_cur_msg_free(dtio); /* If this is a bidirectional stream the first message will be * the READY control frame. We can only continue writing after * receiving an ACCEPT control frame. */ if(dtio->is_bidirectional && !dtio->ready_frame_sent) { dtio->ready_frame_sent = 1; (void)dtio_add_output_event_read(dtio); break; } } } /** callback for the dnstap commandpipe, to stop the dnstap IO */ void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; uint8_t cmd; ssize_t r; if(dtio->want_to_exit) return; r = read(fd, &cmd, sizeof(cmd)); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return; /* ignore this */ #else if(WSAGetLastError() == WSAEINPROGRESS) return; if(WSAGetLastError() == WSAEWOULDBLOCK) return; #endif log_err("dnstap io: failed to read: %s", sock_strerror(errno)); /* and then fall through to quit the thread */ } else if(r == 0) { verbose(VERB_ALGO, "dnstap io: cmd channel closed"); } else if(r == 1 && cmd == DTIO_COMMAND_STOP) { verbose(VERB_ALGO, "dnstap io: cmd channel cmd quit"); } else if(r == 1 && cmd == DTIO_COMMAND_WAKEUP) { verbose(VERB_ALGO, "dnstap io: cmd channel cmd wakeup"); if(dtio->is_bidirectional && !dtio->accept_frame_received) { verbose(VERB_ALGO, "dnstap io: cmd wakeup ignored, " "waiting for ACCEPT control frame"); return; } /* reregister event */ if(!dtio_add_output_event_write(dtio)) return; return; } else if(r == 1) { verbose(VERB_ALGO, "dnstap io: cmd channel unknown command"); } dtio->want_to_exit = 1; if(ub_event_base_loopexit((struct ub_event_base*)dtio->event_base) != 0) { log_err("dnstap io: could not loopexit"); } } #ifndef THREADS_DISABLED /** setup the event base for the dnstap io thread */ static void dtio_setup_base(struct dt_io_thread* dtio, time_t* secs, struct timeval* now) { memset(now, 0, sizeof(*now)); dtio->event_base = ub_default_event_base(0, secs, now); if(!dtio->event_base) { fatal_exit("dnstap io: could not create event_base"); } } #endif /* THREADS_DISABLED */ /** setup the cmd event for dnstap io */ static void dtio_setup_cmd(struct dt_io_thread* dtio) { struct ub_event* cmdev; fd_set_nonblock(dtio->commandpipe[0]); cmdev = ub_event_new(dtio->event_base, dtio->commandpipe[0], UB_EV_READ | UB_EV_PERSIST, &dtio_cmd_cb, dtio); if(!cmdev) { fatal_exit("dnstap io: out of memory"); } dtio->command_event = cmdev; if(ub_event_add(cmdev, NULL) != 0) { fatal_exit("dnstap io: out of memory (adding event)"); } } /** setup the reconnect event for dnstap io */ static void dtio_setup_reconnect(struct dt_io_thread* dtio) { dtio_reconnect_clear(dtio); dtio->reconnect_timer = ub_event_new(dtio->event_base, -1, UB_EV_TIMEOUT, &dtio_reconnect_timeout_cb, dtio); if(!dtio->reconnect_timer) { fatal_exit("dnstap io: out of memory"); } } /** * structure to keep track of information during stop flush */ struct stop_flush_info { /** the event base during stop flush */ struct ub_event_base* base; /** did we already want to exit this stop-flush event base */ int want_to_exit_flush; /** has the timer fired */ int timer_done; /** the dtio */ struct dt_io_thread* dtio; /** the stop control frame */ void* stop_frame; /** length of the stop frame */ size_t stop_frame_len; /** how much we have done of the stop frame */ size_t stop_frame_done; }; /** exit the stop flush base */ static void dtio_stop_flush_exit(struct stop_flush_info* info) { if(info->want_to_exit_flush) return; info->want_to_exit_flush = 1; if(ub_event_base_loopexit(info->base) != 0) { log_err("dnstap io: could not loopexit"); } } /** send the stop control, * return true if completed the frame. */ static int dtio_control_stop_send(struct stop_flush_info* info) { struct dt_io_thread* dtio = info->dtio; int r; if(info->stop_frame_done >= info->stop_frame_len) return 1; r = dtio_write_buf(dtio, ((uint8_t*)info->stop_frame) + info->stop_frame_done, info->stop_frame_len - info->stop_frame_done); if(r == -1) { verbose(VERB_ALGO, "dnstap io: stop flush: output closed"); dtio_stop_flush_exit(info); return 0; } if(r == 0) { /* try again later, or timeout */ return 0; } info->stop_frame_done += r; if(info->stop_frame_done < info->stop_frame_len) return 0; /* not done yet */ return 1; } void dtio_stop_timer_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits), void* arg) { struct stop_flush_info* info = (struct stop_flush_info*)arg; if(info->want_to_exit_flush) return; verbose(VERB_ALGO, "dnstap io: stop flush timer expired, stop flush"); info->timer_done = 1; dtio_stop_flush_exit(info); } void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg) { struct stop_flush_info* info = (struct stop_flush_info*)arg; struct dt_io_thread* dtio = info->dtio; if(info->want_to_exit_flush) return; if(dtio->check_nb_connect) { /* we don't start the stop_flush if connect still * in progress, but the check code is here, just in case */ int connect_err = dtio_check_nb_connect(dtio); if(connect_err == -1) { /* close the channel, exit the stop flush */ dtio_stop_flush_exit(info); dtio_del_output_event(dtio); dtio_close_output(dtio); return; } else if(connect_err == 0) { /* try again later */ return; } /* nonblocking connect check passed, continue */ } #ifdef HAVE_SSL if(dtio->ssl && (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) { if(!dtio_ssl_handshake(dtio, info)) return; } #endif if((bits&UB_EV_READ)) { if(!dtio_check_close(dtio)) { if(dtio->fd == -1) { verbose(VERB_ALGO, "dnstap io: " "stop flush: output closed"); dtio_stop_flush_exit(info); } return; } } /* write remainder of last frame */ if(dtio->cur_msg) { if(dtio->cur_msg_done < dtio->cur_msg_len) { if(!dtio_write_more(dtio)) { if(dtio->fd == -1) { verbose(VERB_ALGO, "dnstap io: " "stop flush: output closed"); dtio_stop_flush_exit(info); } return; } } verbose(VERB_ALGO, "dnstap io: stop flush completed " "last frame"); dtio_cur_msg_free(dtio); } /* write stop frame */ if(info->stop_frame_done < info->stop_frame_len) { if(!dtio_control_stop_send(info)) return; verbose(VERB_ALGO, "dnstap io: stop flush completed " "stop control frame"); } /* when last frame and stop frame are sent, exit */ dtio_stop_flush_exit(info); } /** flush at end, last packet and stop control */ static void dtio_control_stop_flush(struct dt_io_thread* dtio) { /* briefly attempt to flush the previous packet to the output, * this could be a partial packet, or even the start control frame */ time_t secs = 0; struct timeval now; struct stop_flush_info info; struct timeval tv; struct ub_event* timer, *stopev; if(dtio->fd == -1 || dtio->check_nb_connect) { /* no connection or we have just connected, so nothing is * sent yet, so nothing to stop or flush */ return; } if(dtio->ssl && !dtio->ssl_handshake_done) { /* no SSL connection has been established yet */ return; } memset(&info, 0, sizeof(info)); memset(&now, 0, sizeof(now)); info.dtio = dtio; info.base = ub_default_event_base(0, &secs, &now); if(!info.base) { log_err("dnstap io: malloc failure"); return; } timer = ub_event_new(info.base, -1, UB_EV_TIMEOUT, &dtio_stop_timer_cb, &info); if(!timer) { log_err("dnstap io: malloc failure"); ub_event_base_free(info.base); return; } memset(&tv, 0, sizeof(tv)); tv.tv_sec = 2; if(ub_timer_add(timer, info.base, &dtio_stop_timer_cb, &info, &tv) != 0) { log_err("dnstap io: cannot event_timer_add"); ub_event_free(timer); ub_event_base_free(info.base); return; } stopev = ub_event_new(info.base, dtio->fd, UB_EV_READ | UB_EV_WRITE | UB_EV_PERSIST, &dtio_stop_ev_cb, &info); if(!stopev) { log_err("dnstap io: malloc failure"); ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); return; } if(ub_event_add(stopev, NULL) != 0) { log_err("dnstap io: cannot event_add"); ub_event_free(stopev); ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); return; } info.stop_frame = fstrm_create_control_frame_stop( &info.stop_frame_len); if(!info.stop_frame) { log_err("dnstap io: malloc failure"); ub_event_del(stopev); ub_event_free(stopev); ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); return; } dtio->stop_flush_event = stopev; /* wait briefly, or until finished */ verbose(VERB_ALGO, "dnstap io: stop flush started"); if(ub_event_base_dispatch(info.base) < 0) { log_err("dnstap io: dispatch flush failed, errno is %s", strerror(errno)); } verbose(VERB_ALGO, "dnstap io: stop flush ended"); free(info.stop_frame); dtio->stop_flush_event = NULL; ub_event_del(stopev); ub_event_free(stopev); ub_timer_del(timer); ub_event_free(timer); ub_event_base_free(info.base); } /** perform desetup and free stuff when the dnstap io thread exits */ static void dtio_desetup(struct dt_io_thread* dtio) { dtio_control_stop_flush(dtio); dtio_del_output_event(dtio); dtio_close_output(dtio); ub_event_del(dtio->command_event); ub_event_free(dtio->command_event); #ifndef USE_WINSOCK close(dtio->commandpipe[0]); #else _close(dtio->commandpipe[0]); #endif dtio->commandpipe[0] = -1; dtio_reconnect_del(dtio); ub_event_free(dtio->reconnect_timer); dtio_cur_msg_free(dtio); #ifndef THREADS_DISABLED ub_event_base_free(dtio->event_base); #endif } /** setup a start control message */ static int dtio_control_start_send(struct dt_io_thread* dtio) { log_assert(dtio->cur_msg == NULL && dtio->cur_msg_len == 0); dtio->cur_msg = fstrm_create_control_frame_start(DNSTAP_CONTENT_TYPE, &dtio->cur_msg_len); if(!dtio->cur_msg) { return 0; } /* setup to send the control message */ /* set that the buffer needs to be sent, but the length * of that buffer is already written, that way the buffer can * start with 0 length and then the length of the control frame * in it */ dtio->cur_msg_done = 0; dtio->cur_msg_len_done = 4; return 1; } /** setup a ready control message */ static int dtio_control_ready_send(struct dt_io_thread* dtio) { log_assert(dtio->cur_msg == NULL && dtio->cur_msg_len == 0); dtio->cur_msg = fstrm_create_control_frame_ready(DNSTAP_CONTENT_TYPE, &dtio->cur_msg_len); if(!dtio->cur_msg) { return 0; } /* setup to send the control message */ /* set that the buffer needs to be sent, but the length * of that buffer is already written, that way the buffer can * start with 0 length and then the length of the control frame * in it */ dtio->cur_msg_done = 0; dtio->cur_msg_len_done = 4; return 1; } /** open the output file descriptor for af_local */ static int dtio_open_output_local(struct dt_io_thread* dtio) { #ifdef HAVE_SYS_UN_H struct sockaddr_un s; dtio->fd = socket(AF_LOCAL, SOCK_STREAM, 0); if(dtio->fd == -1) { log_err("dnstap io: failed to create socket: %s", sock_strerror(errno)); return 0; } memset(&s, 0, sizeof(s)); #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN /* this member exists on BSDs, not Linux */ s.sun_len = (unsigned)sizeof(s); #endif s.sun_family = AF_LOCAL; /* length is 92-108, 104 on FreeBSD */ (void)strlcpy(s.sun_path, dtio->socket_path, sizeof(s.sun_path)); fd_set_nonblock(dtio->fd); if(connect(dtio->fd, (struct sockaddr*)&s, (socklen_t)sizeof(s)) == -1) { char* to = dtio->socket_path; if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && verbosity < 4) { dtio_close_fd(dtio); return 0; /* no log retries on low verbosity */ } log_err("dnstap io: failed to connect to \"%s\": %s", to, sock_strerror(errno)); dtio_close_fd(dtio); return 0; } return 1; #else log_err("cannot create af_local socket"); return 0; #endif /* HAVE_SYS_UN_H */ } /** open the output file descriptor for af_inet and af_inet6 */ static int dtio_open_output_tcp(struct dt_io_thread* dtio) { struct sockaddr_storage addr; socklen_t addrlen; memset(&addr, 0, sizeof(addr)); addrlen = (socklen_t)sizeof(addr); if(!extstrtoaddr(dtio->ip_str, &addr, &addrlen)) { log_err("could not parse IP '%s'", dtio->ip_str); return 0; } dtio->fd = socket(addr.ss_family, SOCK_STREAM, 0); if(dtio->fd == -1) { log_err("can't create socket: %s", sock_strerror(errno)); return 0; } fd_set_nonblock(dtio->fd); if(connect(dtio->fd, (struct sockaddr*)&addr, addrlen) == -1) { if(errno == EINPROGRESS) return 1; /* wait until connect done*/ if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN && verbosity < 4) { dtio_close_fd(dtio); return 0; /* no log retries on low verbosity */ } #ifndef USE_WINSOCK if(tcp_connect_errno_needs_log( (struct sockaddr *)&addr, addrlen)) { log_err("dnstap io: failed to connect to %s: %s", dtio->ip_str, strerror(errno)); } #else if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK) return 1; /* wait until connect done*/ if(tcp_connect_errno_needs_log( (struct sockaddr *)&addr, addrlen)) { log_err("dnstap io: failed to connect to %s: %s", dtio->ip_str, wsa_strerror(WSAGetLastError())); } #endif dtio_close_fd(dtio); return 0; } return 1; } /** setup the SSL structure for new connection */ static int dtio_setup_ssl(struct dt_io_thread* dtio) { dtio->ssl = outgoing_ssl_fd(dtio->ssl_ctx, dtio->fd); if(!dtio->ssl) return 0; dtio->ssl_handshake_done = 0; dtio->ssl_brief_read = 0; if(!set_auth_name_on_ssl(dtio->ssl, dtio->tls_server_name, dtio->tls_use_sni)) { return 0; } return 1; } /** open the output file descriptor */ static void dtio_open_output(struct dt_io_thread* dtio) { struct ub_event* ev; if(dtio->upstream_is_unix) { if(!dtio_open_output_local(dtio)) { dtio_reconnect_enable(dtio); return; } } else if(dtio->upstream_is_tcp || dtio->upstream_is_tls) { if(!dtio_open_output_tcp(dtio)) { dtio_reconnect_enable(dtio); return; } if(dtio->upstream_is_tls) { if(!dtio_setup_ssl(dtio)) { dtio_close_fd(dtio); dtio_reconnect_enable(dtio); return; } } } dtio->check_nb_connect = 1; /* the EV_READ is to read ACCEPT control messages, and catch channel * close. EV_WRITE is to write packets */ ev = ub_event_new(dtio->event_base, dtio->fd, UB_EV_READ | UB_EV_WRITE | UB_EV_PERSIST, &dtio_output_cb, dtio); if(!ev) { log_err("dnstap io: out of memory"); if(dtio->ssl) { #ifdef HAVE_SSL SSL_free(dtio->ssl); dtio->ssl = NULL; #endif } dtio_close_fd(dtio); dtio_reconnect_enable(dtio); return; } dtio->event = ev; /* setup protocol control message to start */ if((!dtio->is_bidirectional && !dtio_control_start_send(dtio)) || (dtio->is_bidirectional && !dtio_control_ready_send(dtio)) ) { log_err("dnstap io: out of memory"); ub_event_free(dtio->event); dtio->event = NULL; if(dtio->ssl) { #ifdef HAVE_SSL SSL_free(dtio->ssl); dtio->ssl = NULL; #endif } dtio_close_fd(dtio); dtio_reconnect_enable(dtio); return; } } /** perform the setup of the writer thread on the established event_base */ static void dtio_setup_on_base(struct dt_io_thread* dtio) { dtio_setup_cmd(dtio); dtio_setup_reconnect(dtio); dtio_open_output(dtio); if(!dtio_add_output_event_write(dtio)) return; } #ifndef THREADS_DISABLED /** the IO thread function for the DNSTAP IO */ static void* dnstap_io(void* arg) { struct dt_io_thread* dtio = (struct dt_io_thread*)arg; time_t secs = 0; struct timeval now; log_thread_set(&dtio->threadnum); /* setup */ verbose(VERB_ALGO, "start dnstap io thread"); dtio_setup_base(dtio, &secs, &now); dtio_setup_on_base(dtio); /* run */ if(ub_event_base_dispatch(dtio->event_base) < 0) { log_err("dnstap io: dispatch failed, errno is %s", strerror(errno)); } /* cleanup */ verbose(VERB_ALGO, "stop dnstap io thread"); dtio_desetup(dtio); return NULL; } #endif /* THREADS_DISABLED */ int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr, int numworkers) { /* set up the thread, can fail */ #ifndef USE_WINSOCK if(pipe(dtio->commandpipe) == -1) { log_err("failed to create pipe: %s", strerror(errno)); return 0; } #else if(_pipe(dtio->commandpipe, 4096, _O_BINARY) == -1) { log_err("failed to create _pipe: %s", wsa_strerror(WSAGetLastError())); return 0; } #endif /* start the thread */ dtio->threadnum = numworkers+1; dtio->started = 1; #ifndef THREADS_DISABLED ub_thread_create(&dtio->tid, dnstap_io, dtio); (void)event_base_nothr; #else dtio->event_base = event_base_nothr; dtio_setup_on_base(dtio); #endif return 1; } void dt_io_thread_stop(struct dt_io_thread* dtio) { #ifndef THREADS_DISABLED uint8_t cmd = DTIO_COMMAND_STOP; #endif if(!dtio) return; if(!dtio->started) return; verbose(VERB_ALGO, "dnstap io: send stop cmd"); #ifndef THREADS_DISABLED while(1) { ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd)); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) continue; #else if(WSAGetLastError() == WSAEINPROGRESS) continue; if(WSAGetLastError() == WSAEWOULDBLOCK) continue; #endif log_err("dnstap io stop: write: %s", sock_strerror(errno)); break; } break; } dtio->started = 0; #endif /* THREADS_DISABLED */ #ifndef USE_WINSOCK close(dtio->commandpipe[1]); #else _close(dtio->commandpipe[1]); #endif dtio->commandpipe[1] = -1; #ifndef THREADS_DISABLED ub_thread_join(dtio->tid); #else dtio->want_to_exit = 1; dtio_desetup(dtio); #endif } unbound-1.13.1/dns64/0000755000175000017500000000000014010434640013635 5ustar wouterwouterunbound-1.13.1/dns64/dns64.h0000644000175000017500000000474314010434640014754 0ustar wouterwouter/* * dns64/dns64.h - DNS64 module * * Copyright (c) 2009, Viagénie. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ /** * \file * * This file contains a module that performs DNS64 query processing. */ #ifndef DNS64_DNS64_H #define DNS64_DNS64_H #include "util/module.h" /** * Get the dns64 function block. * @return: function block with function pointers to dns64 methods. */ struct module_func_block *dns64_get_funcblock(void); /** dns64 init */ int dns64_init(struct module_env* env, int id); /** dns64 deinit */ void dns64_deinit(struct module_env* env, int id); /** dns64 operate on a query */ void dns64_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); void dns64_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** dns64 cleanup query state */ void dns64_clear(struct module_qstate* qstate, int id); /** dns64 alloc size routine */ size_t dns64_get_mem(struct module_env* env, int id); #endif /* DNS64_DNS64_H */ unbound-1.13.1/dns64/dns64.c0000644000175000017500000010044414010434640014742 0ustar wouterwouter/* * dns64/dns64.c - DNS64 module * * Copyright (c) 2009, Viagénie. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Viagénie nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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. */ /** * \file * * This file contains a module that performs DNS64 query processing. */ #include "config.h" #include "dns64/dns64.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" #include "util/config_file.h" #include "util/data/msgreply.h" #include "util/fptr_wlist.h" #include "util/net_help.h" #include "util/regional.h" #include "util/storage/dnstree.h" #include "util/data/dname.h" #include "sldns/str2wire.h" /****************************************************************************** * * * STATIC CONSTANTS * * * ******************************************************************************/ /** * This is the default DNS64 prefix that is used whent he dns64 module is listed * in module-config but when the dns64-prefix variable is not present. */ static const char DEFAULT_DNS64_PREFIX[] = "64:ff9b::/96"; /** * Maximum length of a domain name in a PTR query in the .in-addr.arpa tree. */ #define MAX_PTR_QNAME_IPV4 30 /** * State of DNS64 processing for a query. */ enum dns64_state { DNS64_INTERNAL_QUERY, /**< Internally-generated query, no DNS64 processing. */ DNS64_NEW_QUERY, /**< Query for which we're the first module in line. */ DNS64_SUBQUERY_FINISHED /**< Query for which we generated a sub-query, and for which this sub-query is finished. */ }; /** * Per-query module-specific state. For the DNS64 module. */ struct dns64_qstate { /** State of the DNS64 module. */ enum dns64_state state; /** If the dns64 module started with no_cache bool set in the qstate, * a message to tell it to not modify the cache contents, then this * is true. The dns64 module is then free to modify that flag for * its own purposes. * Otherwise, it is false, the dns64 module was not told to no_cache */ int started_no_cache_store; }; /****************************************************************************** * * * STRUCTURES * * * ******************************************************************************/ /** * This structure contains module configuration information. One instance of * this structure exists per instance of the module. Normally there is only one * instance of the module. */ struct dns64_env { /** * DNS64 prefix address. We're using a full sockaddr instead of just an * in6_addr because we can reuse Unbound's generic string parsing functions. * It will always contain a sockaddr_in6, and only the sin6_addr member will * ever be used. */ struct sockaddr_storage prefix_addr; /** * This is always sizeof(sockaddr_in6). */ socklen_t prefix_addrlen; /** * This is the CIDR length of the prefix. It needs to be between 0 and 96. */ int prefix_net; /** * Tree of names for which AAAA is ignored. always synthesize from A. */ rbtree_type ignore_aaaa; }; /****************************************************************************** * * * UTILITY FUNCTIONS * * * ******************************************************************************/ /** * Generic macro for swapping two variables. * * \param t Type of the variables. (e.g. int) * \param a First variable. * \param b Second variable. * * \warning Do not attempt something foolish such as swap(int,a++,b++)! */ #define swap(t,a,b) do {t x = a; a = b; b = x;} while(0) /** * Reverses a string. * * \param begin Points to the first character of the string. * \param end Points one past the last character of the string. */ static void reverse(char* begin, char* end) { while ( begin < --end ) { swap(char, *begin, *end); ++begin; } } /** * Convert an unsigned integer to a string. The point of this function is that * of being faster than sprintf(). * * \param n The number to be converted. * \param s The result will be written here. Must be large enough, be careful! * * \return The number of characters written. */ static int uitoa(unsigned n, char* s) { char* ss = s; do { *ss++ = '0' + n % 10; } while (n /= 10); reverse(s, ss); return ss - s; } /** * Extract an IPv4 address embedded in the IPv6 address \a ipv6 at offset \a * offset (in bits). Note that bits are not necessarily aligned on bytes so we * need to be careful. * * \param ipv6 IPv6 address represented as a 128-bit array in big-endian * order. * \param ipv6_len length of the ipv6 byte array. * \param offset Index of the MSB of the IPv4 address embedded in the IPv6 * address. */ static uint32_t extract_ipv4(const uint8_t ipv6[], size_t ipv6_len, const int offset) { uint32_t ipv4 = 0; int i, pos; log_assert(ipv6_len == 16); (void)ipv6_len; log_assert(offset == 32 || offset == 40 || offset == 48 || offset == 56 || offset == 64 || offset == 96); for(i = 0, pos = offset / 8; i < 4; i++, pos++) { if (pos == 8) pos++; ipv4 = ipv4 << 8; ipv4 |= ipv6[pos]; } return ipv4; } /** * Builds the PTR query name corresponding to an IPv4 address. For example, * given the number 3,464,175,361, this will build the string * "\03206\03123\0231\011\07in-addr\04arpa". * * \param ipv4 IPv4 address represented as an unsigned 32-bit number. * \param ptr The result will be written here. Must be large enough, be * careful! * \param nm_len length of the ptr buffer. * * \return The number of characters written. */ static size_t ipv4_to_ptr(uint32_t ipv4, char ptr[], size_t nm_len) { static const char IPV4_PTR_SUFFIX[] = "\07in-addr\04arpa"; int i; char* c = ptr; log_assert(nm_len == MAX_PTR_QNAME_IPV4); (void)nm_len; for (i = 0; i < 4; ++i) { *c = uitoa((unsigned int)(ipv4 % 256), c + 1); c += *c + 1; log_assert(c < ptr+nm_len); ipv4 /= 256; } log_assert(c + sizeof(IPV4_PTR_SUFFIX) <= ptr+nm_len); memmove(c, IPV4_PTR_SUFFIX, sizeof(IPV4_PTR_SUFFIX)); return c + sizeof(IPV4_PTR_SUFFIX) - ptr; } /** * Converts an IPv6-related domain name string from a PTR query into an IPv6 * address represented as a 128-bit array. * * \param ptr The domain name. (e.g. "\011[...]\010\012\016\012\03ip6\04arpa") * \param ipv6 The result will be written here, in network byte order. * \param ipv6_len length of the ipv6 byte array. * * \return 1 on success, 0 on failure. */ static int ptr_to_ipv6(const char* ptr, uint8_t ipv6[], size_t ipv6_len) { int i; log_assert(ipv6_len == 16); (void)ipv6_len; for (i = 0; i < 64; i++) { int x; if (ptr[i++] != 1) return 0; if (ptr[i] >= '0' && ptr[i] <= '9') { x = ptr[i] - '0'; } else if (ptr[i] >= 'a' && ptr[i] <= 'f') { x = ptr[i] - 'a' + 10; } else if (ptr[i] >= 'A' && ptr[i] <= 'F') { x = ptr[i] - 'A' + 10; } else { return 0; } ipv6[15-i/4] |= x << (2 * ((i-1) % 4)); } return 1; } /** * Synthesize an IPv6 address based on an IPv4 address and the DNS64 prefix. * * \param prefix_addr DNS64 prefix address. * \param prefix_addr_len length of the prefix_addr buffer. * \param prefix_net CIDR length of the DNS64 prefix. Must be between 0 and 96. * \param a IPv4 address. * \param a_len length of the a buffer. * \param aaaa IPv6 address. The result will be written here. * \param aaaa_len length of the aaaa buffer. */ static void synthesize_aaaa(const uint8_t prefix_addr[], size_t prefix_addr_len, int prefix_net, const uint8_t a[], size_t a_len, uint8_t aaaa[], size_t aaaa_len) { size_t i; int pos; log_assert(prefix_addr_len == 16 && a_len == 4 && aaaa_len == 16); log_assert(prefix_net == 32 || prefix_net == 40 || prefix_net == 48 || prefix_net == 56 || prefix_net == 64 || prefix_net == 96); (void)prefix_addr_len; (void)a_len; (void)aaaa_len; memcpy(aaaa, prefix_addr, 16); for(i = 0, pos = prefix_net / 8; i < a_len; i++, pos++) { if(pos == 8) aaaa[pos++] = 0; aaaa[pos] = a[i]; } } /****************************************************************************** * * * DNS64 MODULE FUNCTIONS * * * ******************************************************************************/ /** * insert ignore_aaaa element into the tree * @param dns64_env: module env. * @param str: string with domain name. * @return false on failure. */ static int dns64_insert_ignore_aaaa(struct dns64_env* dns64_env, char* str) { /* parse and insert element */ struct name_tree_node* node; node = (struct name_tree_node*)calloc(1, sizeof(*node)); if(!node) { log_err("out of memory"); return 0; } node->name = sldns_str2wire_dname(str, &node->len); if(!node->name) { free(node); log_err("cannot parse dns64-ignore-aaaa: %s", str); return 0; } node->labs = dname_count_labels(node->name); node->dclass = LDNS_RR_CLASS_IN; if(!name_tree_insert(&dns64_env->ignore_aaaa, node, node->name, node->len, node->labs, node->dclass)) { /* ignore duplicate element */ free(node->name); free(node); return 1; } return 1; } /** * This function applies the configuration found in the parsed configuration * file \a cfg to this instance of the dns64 module. Currently only the DNS64 * prefix (a.k.a. Pref64) is configurable. * * \param dns64_env Module-specific global parameters. * \param cfg Parsed configuration file. */ static int dns64_apply_cfg(struct dns64_env* dns64_env, struct config_file* cfg) { struct config_strlist* s; verbose(VERB_ALGO, "dns64-prefix: %s", cfg->dns64_prefix); if (!netblockstrtoaddr(cfg->dns64_prefix ? cfg->dns64_prefix : DEFAULT_DNS64_PREFIX, 0, &dns64_env->prefix_addr, &dns64_env->prefix_addrlen, &dns64_env->prefix_net)) { log_err("cannot parse dns64-prefix netblock: %s", cfg->dns64_prefix); return 0; } if (!addr_is_ip6(&dns64_env->prefix_addr, dns64_env->prefix_addrlen)) { log_err("dns64_prefix is not IPv6: %s", cfg->dns64_prefix); return 0; } if (dns64_env->prefix_net != 32 && dns64_env->prefix_net != 40 && dns64_env->prefix_net != 48 && dns64_env->prefix_net != 56 && dns64_env->prefix_net != 64 && dns64_env->prefix_net != 96 ) { log_err("dns64-prefix length it not 32, 40, 48, 56, 64 or 96: %s", cfg->dns64_prefix); return 0; } for(s = cfg->dns64_ignore_aaaa; s; s = s->next) { if(!dns64_insert_ignore_aaaa(dns64_env, s->str)) return 0; } name_tree_init_parents(&dns64_env->ignore_aaaa); return 1; } /** * Initializes this instance of the dns64 module. * * \param env Global state of all module instances. * \param id This instance's ID number. */ int dns64_init(struct module_env* env, int id) { struct dns64_env* dns64_env = (struct dns64_env*)calloc(1, sizeof(struct dns64_env)); if (!dns64_env) { log_err("malloc failure"); return 0; } env->modinfo[id] = (void*)dns64_env; name_tree_init(&dns64_env->ignore_aaaa); if (!dns64_apply_cfg(dns64_env, env->cfg)) { log_err("dns64: could not apply configuration settings."); return 0; } return 1; } /** free ignore AAAA elements */ static void free_ignore_aaaa_node(rbnode_type* node, void* ATTR_UNUSED(arg)) { struct name_tree_node* n = (struct name_tree_node*)node; if(!n) return; free(n->name); free(n); } /** * Deinitializes this instance of the dns64 module. * * \param env Global state of all module instances. * \param id This instance's ID number. */ void dns64_deinit(struct module_env* env, int id) { struct dns64_env* dns64_env; if (!env) return; dns64_env = (struct dns64_env*)env->modinfo[id]; if(dns64_env) { traverse_postorder(&dns64_env->ignore_aaaa, free_ignore_aaaa_node, NULL); } free(env->modinfo[id]); env->modinfo[id] = NULL; } /** * Handle PTR queries for IPv6 addresses. If the address belongs to the DNS64 * prefix, we must do a PTR query for the corresponding IPv4 address instead. * * \param qstate Query state structure. * \param id This module instance's ID number. * * \return The new state of the query. */ static enum module_ext_state handle_ipv6_ptr(struct module_qstate* qstate, int id) { struct dns64_env* dns64_env = (struct dns64_env*)qstate->env->modinfo[id]; struct module_qstate* subq = NULL; struct query_info qinfo; struct sockaddr_in6 sin6; /* Convert the PTR query string to an IPv6 address. */ memset(&sin6, 0, sizeof(sin6)); sin6.sin6_family = AF_INET6; if (!ptr_to_ipv6((char*)qstate->qinfo.qname, sin6.sin6_addr.s6_addr, sizeof(sin6.sin6_addr.s6_addr))) return module_wait_module; /* Let other module handle this. */ /* * If this IPv6 address is not part of our DNS64 prefix, then we don't need * to do anything. Let another module handle the query. */ if (addr_in_common((struct sockaddr_storage*)&sin6, 128, &dns64_env->prefix_addr, dns64_env->prefix_net, (socklen_t)sizeof(sin6)) != dns64_env->prefix_net) return module_wait_module; verbose(VERB_ALGO, "dns64: rewrite PTR record"); /* * Create a new PTR query info for the domain name corresponding to the IPv4 * address corresponding to the IPv6 address corresponding to the original * PTR query domain name. */ qinfo = qstate->qinfo; if (!(qinfo.qname = regional_alloc(qstate->region, MAX_PTR_QNAME_IPV4))) return module_error; qinfo.qname_len = ipv4_to_ptr(extract_ipv4(sin6.sin6_addr.s6_addr, sizeof(sin6.sin6_addr.s6_addr), dns64_env->prefix_net), (char*)qinfo.qname, MAX_PTR_QNAME_IPV4); /* Create the new sub-query. */ fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); if(!(*qstate->env->attach_sub)(qstate, &qinfo, qstate->query_flags, 0, 0, &subq)) return module_error; if (subq) { subq->curmod = id; subq->ext_state[id] = module_state_initial; subq->minfo[id] = NULL; } return module_wait_subquery; } static enum module_ext_state generate_type_A_query(struct module_qstate* qstate, int id) { struct module_qstate* subq = NULL; struct query_info qinfo; verbose(VERB_ALGO, "dns64: query A record"); /* Create a new query info. */ qinfo = qstate->qinfo; qinfo.qtype = LDNS_RR_TYPE_A; /* Start the sub-query. */ fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); if(!(*qstate->env->attach_sub)(qstate, &qinfo, qstate->query_flags, 0, 0, &subq)) { verbose(VERB_ALGO, "dns64: sub-query creation failed"); return module_error; } if (subq) { subq->curmod = id; subq->ext_state[id] = module_state_initial; subq->minfo[id] = NULL; } return module_wait_subquery; } /** * See if query name is in the always synth config. * The ignore-aaaa list has names for which the AAAA for the domain is * ignored and the A is always used to create the answer. * @param qstate: query state. * @param id: module id. * @return true if the name is covered by ignore-aaaa. */ static int dns64_always_synth_for_qname(struct module_qstate* qstate, int id) { struct dns64_env* dns64_env = (struct dns64_env*)qstate->env->modinfo[id]; int labs = dname_count_labels(qstate->qinfo.qname); struct name_tree_node* node = name_tree_lookup(&dns64_env->ignore_aaaa, qstate->qinfo.qname, qstate->qinfo.qname_len, labs, qstate->qinfo.qclass); return (node != NULL); } /** * Handles the "pass" event for a query. This event is received when a new query * is received by this module. The query may have been generated internally by * another module, in which case we don't want to do any special processing * (this is an interesting discussion topic), or it may be brand new, e.g. * received over a socket, in which case we do want to apply DNS64 processing. * * \param qstate A structure representing the state of the query that has just * received the "pass" event. * \param id This module's instance ID. * * \return The new state of the query. */ static enum module_ext_state handle_event_pass(struct module_qstate* qstate, int id) { struct dns64_qstate* iq = (struct dns64_qstate*)qstate->minfo[id]; if (iq && iq->state == DNS64_NEW_QUERY && qstate->qinfo.qtype == LDNS_RR_TYPE_PTR && qstate->qinfo.qname_len == 74 && !strcmp((char*)&qstate->qinfo.qname[64], "\03ip6\04arpa")) /* Handle PTR queries for IPv6 addresses. */ return handle_ipv6_ptr(qstate, id); if (qstate->env->cfg->dns64_synthall && iq && iq->state == DNS64_NEW_QUERY && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) return generate_type_A_query(qstate, id); if(dns64_always_synth_for_qname(qstate, id) && iq && iq->state == DNS64_NEW_QUERY && !(qstate->query_flags & BIT_CD) && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) { verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); return generate_type_A_query(qstate, id); } /* We are finished when our sub-query is finished. */ if (iq && iq->state == DNS64_SUBQUERY_FINISHED) return module_finished; /* Otherwise, pass request to next module. */ verbose(VERB_ALGO, "dns64: pass to next module"); return module_wait_module; } /** * Handles the "done" event for a query. We need to analyze the response and * maybe issue a new sub-query for the A record. * * \param qstate A structure representing the state of the query that has just * received the "pass" event. * \param id This module's instance ID. * * \return The new state of the query. */ static enum module_ext_state handle_event_moddone(struct module_qstate* qstate, int id) { struct dns64_qstate* iq = (struct dns64_qstate*)qstate->minfo[id]; /* * In many cases we have nothing special to do. From most to least common: * * - An internal query. * - A query for a record type other than AAAA. * - CD FLAG was set on querier * - An AAAA query for which an error was returned.(qstate.return_rcode) * -> treated as servfail thus synthesize (sec 5.1.3 6147), thus * synthesize in (sec 5.1.2 of RFC6147). * - A successful AAAA query with an answer. */ if((!iq || iq->state != DNS64_INTERNAL_QUERY) && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA && !(qstate->query_flags & BIT_CD) && !(qstate->return_msg && qstate->return_msg->rep && reply_find_answer_rrset(&qstate->qinfo, qstate->return_msg->rep))) /* not internal, type AAAA, not CD, and no answer RRset, * So, this is a AAAA noerror/nodata answer */ return generate_type_A_query(qstate, id); if((!iq || iq->state != DNS64_INTERNAL_QUERY) && qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA && !(qstate->query_flags & BIT_CD) && dns64_always_synth_for_qname(qstate, id)) { /* if it is not internal, AAAA, not CD and listed domain, * generate from A record and ignore AAAA */ verbose(VERB_ALGO, "dns64: ignore-aaaa and synthesize anyway"); return generate_type_A_query(qstate, id); } /* Store the response in cache. */ if ( (!iq || !iq->started_no_cache_store) && qstate->return_msg && qstate->return_msg->rep && !dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, 0, 0, 0, NULL, qstate->query_flags)) log_err("out of memory"); /* do nothing */ return module_finished; } /** * This is the module's main() function. It gets called each time a query * receives an event which we may need to handle. We respond by updating the * state of the query. * * \param qstate Structure containing the state of the query. * \param event Event that has just been received. * \param id This module's instance ID. * \param outbound State of a DNS query on an authoritative server. We never do * our own queries ourselves (other modules do it for us), so * this is unused. */ void dns64_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct dns64_qstate* iq; (void)outbound; verbose(VERB_QUERY, "dns64[module %d] operate: extstate:%s event:%s", id, strextstate(qstate->ext_state[id]), strmodulevent(event)); log_query_info(VERB_QUERY, "dns64 operate: query", &qstate->qinfo); switch(event) { case module_event_new: /* Tag this query as being new and fall through. */ iq = (struct dns64_qstate*)regional_alloc( qstate->region, sizeof(*iq)); qstate->minfo[id] = iq; iq->state = DNS64_NEW_QUERY; iq->started_no_cache_store = qstate->no_cache_store; qstate->no_cache_store = 1; /* fallthrough */ case module_event_pass: qstate->ext_state[id] = handle_event_pass(qstate, id); break; case module_event_moddone: qstate->ext_state[id] = handle_event_moddone(qstate, id); break; default: qstate->ext_state[id] = module_finished; break; } if(qstate->ext_state[id] == module_finished) { iq = (struct dns64_qstate*)qstate->minfo[id]; if(iq && iq->state != DNS64_INTERNAL_QUERY) qstate->no_cache_store = iq->started_no_cache_store; } } static void dns64_synth_aaaa_data(const struct ub_packed_rrset_key* fk, const struct packed_rrset_data* fd, struct ub_packed_rrset_key *dk, struct packed_rrset_data **dd_out, struct regional *region, struct dns64_env* dns64_env ) { struct packed_rrset_data *dd; size_t i; /* * Create synthesized AAAA RR set data. We need to allocated extra memory * for the RRs themselves. Each RR has a length, TTL, pointer to wireformat * data, 2 bytes of data length, and 16 bytes of IPv6 address. */ if(fd->count > RR_COUNT_MAX) { *dd_out = NULL; return; /* integer overflow protection in alloc */ } if (!(dd = *dd_out = regional_alloc_zero(region, sizeof(struct packed_rrset_data) + fd->count * (sizeof(size_t) + sizeof(time_t) + sizeof(uint8_t*) + 2 + 16)))) { log_err("out of memory"); return; } /* Copy attributes from A RR set. */ dd->ttl = fd->ttl; dd->count = fd->count; dd->rrsig_count = 0; dd->trust = fd->trust; dd->security = fd->security; /* * Synthesize AAAA records. Adjust pointers in structure. */ dd->rr_len = (size_t*)((uint8_t*)dd + sizeof(struct packed_rrset_data)); dd->rr_data = (uint8_t**)&dd->rr_len[dd->count]; dd->rr_ttl = (time_t*)&dd->rr_data[dd->count]; for(i = 0; i < fd->count; ++i) { if (fd->rr_len[i] != 6 || fd->rr_data[i][0] != 0 || fd->rr_data[i][1] != 4) { *dd_out = NULL; return; } dd->rr_len[i] = 18; dd->rr_data[i] = (uint8_t*)&dd->rr_ttl[dd->count] + 18*i; dd->rr_data[i][0] = 0; dd->rr_data[i][1] = 16; synthesize_aaaa( ((struct sockaddr_in6*)&dns64_env->prefix_addr)->sin6_addr.s6_addr, sizeof(((struct sockaddr_in6*)&dns64_env->prefix_addr)->sin6_addr.s6_addr), dns64_env->prefix_net, &fd->rr_data[i][2], fd->rr_len[i]-2, &dd->rr_data[i][2], dd->rr_len[i]-2); dd->rr_ttl[i] = fd->rr_ttl[i]; } /* * Create synthesized AAAA RR set key. This is mostly just bookkeeping, * nothing interesting here. */ if(!dk) { log_err("no key"); *dd_out = NULL; return; } dk->rk.dname = (uint8_t*)regional_alloc_init(region, fk->rk.dname, fk->rk.dname_len); if(!dk->rk.dname) { log_err("out of memory"); *dd_out = NULL; return; } dk->rk.type = htons(LDNS_RR_TYPE_AAAA); memset(&dk->entry, 0, sizeof(dk->entry)); dk->entry.key = dk; dk->entry.hash = rrset_key_hash(&dk->rk); dk->entry.data = dd; } /** * Synthesize an AAAA RR set from an A sub-query's answer and add it to the * original empty response. * * \param id This module's instance ID. * \param super Original AAAA query. * \param qstate A query. */ static void dns64_adjust_a(int id, struct module_qstate* super, struct module_qstate* qstate) { struct dns64_env* dns64_env = (struct dns64_env*)super->env->modinfo[id]; struct reply_info *rep, *cp; size_t i, s; struct packed_rrset_data* fd, *dd; struct ub_packed_rrset_key* fk, *dk; verbose(VERB_ALGO, "converting A answers to AAAA answers"); log_assert(super->region); log_assert(qstate->return_msg); log_assert(qstate->return_msg->rep); /* If dns64-synthall is enabled, return_msg is not initialized */ if(!super->return_msg) { super->return_msg = (struct dns_msg*)regional_alloc( super->region, sizeof(struct dns_msg)); if(!super->return_msg) return; memset(super->return_msg, 0, sizeof(*super->return_msg)); super->return_msg->qinfo = super->qinfo; } rep = qstate->return_msg->rep; /* * Build the actual reply. */ cp = construct_reply_info_base(super->region, rep->flags, rep->qdcount, rep->ttl, rep->prefetch_ttl, rep->serve_expired_ttl, rep->an_numrrsets, rep->ns_numrrsets, rep->ar_numrrsets, rep->rrset_count, rep->security); if(!cp) return; /* allocate ub_key structures special or not */ if(!reply_info_alloc_rrset_keys(cp, NULL, super->region)) { return; } /* copy everything and replace A by AAAA */ for(i=0; irrset_count; i++) { fk = rep->rrsets[i]; dk = cp->rrsets[i]; fd = (struct packed_rrset_data*)fk->entry.data; dk->rk = fk->rk; dk->id = fk->id; if(ian_numrrsets && fk->rk.type == htons(LDNS_RR_TYPE_A)) { /* also sets dk->entry.hash */ dns64_synth_aaaa_data(fk, fd, dk, &dd, super->region, dns64_env); if(!dd) return; /* Delete negative AAAA record from cache stored by * the iterator module */ rrset_cache_remove(super->env->rrset_cache, dk->rk.dname, dk->rk.dname_len, LDNS_RR_TYPE_AAAA, LDNS_RR_CLASS_IN, 0); /* Delete negative AAAA in msg cache for CNAMEs, * stored by the iterator module */ if(i != 0) /* if not the first RR */ msg_cache_remove(super->env, dk->rk.dname, dk->rk.dname_len, LDNS_RR_TYPE_AAAA, LDNS_RR_CLASS_IN, 0); } else { dk->entry.hash = fk->entry.hash; dk->rk.dname = (uint8_t*)regional_alloc_init(super->region, fk->rk.dname, fk->rk.dname_len); if(!dk->rk.dname) return; s = packed_rrset_sizeof(fd); dd = (struct packed_rrset_data*)regional_alloc_init( super->region, fd, s); if(!dd) return; } packed_rrset_ptr_fixup(dd); dk->entry.data = (void*)dd; } /* Commit changes. */ super->return_msg->rep = cp; } /** * Generate a response for the original IPv6 PTR query based on an IPv4 PTR * sub-query's response. * * \param qstate IPv4 PTR sub-query. * \param super Original IPv6 PTR query. */ static void dns64_adjust_ptr(struct module_qstate* qstate, struct module_qstate* super) { struct ub_packed_rrset_key* answer; verbose(VERB_ALGO, "adjusting PTR reply"); /* Copy the sub-query's reply to the parent. */ if (!(super->return_msg = (struct dns_msg*)regional_alloc(super->region, sizeof(struct dns_msg)))) return; super->return_msg->qinfo = super->qinfo; super->return_msg->rep = reply_info_copy(qstate->return_msg->rep, NULL, super->region); /* * Adjust the domain name of the answer RR set so that it matches the * initial query's domain name. */ answer = reply_find_answer_rrset(&qstate->qinfo, super->return_msg->rep); if(answer) { answer->rk.dname = super->qinfo.qname; answer->rk.dname_len = super->qinfo.qname_len; } } /** * This function is called when a sub-query finishes to inform the parent query. * * We issue two kinds of sub-queries: PTR and A. * * \param qstate State of the sub-query. * \param id This module's instance ID. * \param super State of the super-query. */ void dns64_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { struct dns64_qstate* super_dq = (struct dns64_qstate*)super->minfo[id]; log_query_info(VERB_ALGO, "dns64: inform_super, sub is", &qstate->qinfo); log_query_info(VERB_ALGO, "super is", &super->qinfo); /* * Signal that the sub-query is finished, no matter whether we are * successful or not. This lets the state machine terminate. */ if(!super_dq) { super_dq = (struct dns64_qstate*)regional_alloc(super->region, sizeof(*super_dq)); if(!super_dq) { log_err("out of memory"); super->return_rcode = LDNS_RCODE_SERVFAIL; super->return_msg = NULL; return; } super->minfo[id] = super_dq; memset(super_dq, 0, sizeof(*super_dq)); super_dq->started_no_cache_store = super->no_cache_store; } super_dq->state = DNS64_SUBQUERY_FINISHED; /* If there is no successful answer, we're done. */ if (qstate->return_rcode != LDNS_RCODE_NOERROR || !qstate->return_msg || !qstate->return_msg->rep) { return; } /* Use return code from A query in response to client. */ if (super->return_rcode != LDNS_RCODE_NOERROR) super->return_rcode = qstate->return_rcode; /* Generate a response suitable for the original query. */ if (qstate->qinfo.qtype == LDNS_RR_TYPE_A) { dns64_adjust_a(id, super, qstate); } else { log_assert(qstate->qinfo.qtype == LDNS_RR_TYPE_PTR); dns64_adjust_ptr(qstate, super); } /* Store the generated response in cache. */ if ( (!super_dq || !super_dq->started_no_cache_store) && !dns_cache_store(super->env, &super->qinfo, super->return_msg->rep, 0, 0, 0, NULL, super->query_flags)) log_err("out of memory"); } /** * Clear module-specific data from query state. Since we do not allocate memory, * it's just a matter of setting a pointer to NULL. * * \param qstate Query state. * \param id This module's instance ID. */ void dns64_clear(struct module_qstate* qstate, int id) { qstate->minfo[id] = NULL; } /** * Returns the amount of global memory that this module uses, not including * per-query data. * * \param env Module environment. * \param id This module's instance ID. */ size_t dns64_get_mem(struct module_env* env, int id) { struct dns64_env* dns64_env = (struct dns64_env*)env->modinfo[id]; if (!dns64_env) return 0; return sizeof(*dns64_env); } /** * The dns64 function block. */ static struct module_func_block dns64_block = { "dns64", &dns64_init, &dns64_deinit, &dns64_operate, &dns64_inform_super, &dns64_clear, &dns64_get_mem }; /** * Function for returning the above function block. */ struct module_func_block * dns64_get_funcblock(void) { return &dns64_block; } unbound-1.13.1/config.sub0000755000175000017500000010315414010434643014671 0ustar wouterwouter#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2021 Free Software Foundation, Inc. timestamp='2021-01-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=sysv4 ;; i*86v) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=sysv ;; i*86sol2) cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=$(echo "$basic_machine" | sed 's/-.*//') ;; *-*) # shellcheck disable=SC2162 IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|') ;; os2-emx) kernel=os2 os=$(echo $basic_os | sed -e 's|os2-emx|emx|') ;; nto-qnx*) kernel=nto os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|') ;; *-*) # shellcheck disable=SC2162 IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: unbound-1.13.1/ipsecmod/0000755000175000017500000000000014010434640014502 5ustar wouterwouterunbound-1.13.1/ipsecmod/ipsecmod.h0000644000175000017500000000734114010434640016463 0ustar wouterwouter/* * ipsecmod/ipsecmod.h - facilitate opportunistic IPsec module * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that facilitates opportunistic IPsec. It does so * by also quering for the IPSECKEY for A/AAAA queries and calling a * configurable hook (eg. signaling an IKE daemon) before replying. */ #ifndef IPSECMOD_H #define IPSECMOD_H #include "util/module.h" #include "util/rbtree.h" /** * The global variable environment contents for the ipsecmod * Shared between threads, this represents long term information. */ struct ipsecmod_env { /** White listed domains for ipsecmod. */ rbtree_type* whitelist; }; /** * Per query state for the ipsecmod module. */ struct ipsecmod_qstate { /** State of the IPsec module. */ /** NOTE: This value is copied here from the configuration so that a change * with unbound-control would not complicate an already running mesh. */ int enabled; /** If the qname is whitelisted or not. */ /** NOTE: No whitelist means all qnames are whitelisted. */ int is_whitelisted; /** Pointer to IPSECKEY rrset allocated in the qstate region. NULL if there * was no IPSECKEY reply from the subquery. */ struct ub_packed_rrset_key* ipseckey_rrset; /** If the IPSECKEY subquery has finished. */ int ipseckey_done; }; /** Init the ipsecmod module */ int ipsecmod_init(struct module_env* env, int id); /** Deinit the ipsecmod module */ void ipsecmod_deinit(struct module_env* env, int id); /** Operate on an event on a query (in qstate). */ void ipsecmod_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** Subordinate query done, inform this super request of its conclusion */ void ipsecmod_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** clear the ipsecmod query-specific contents out of qstate */ void ipsecmod_clear(struct module_qstate* qstate, int id); /** return memory estimate for the ipsecmod module */ size_t ipsecmod_get_mem(struct module_env* env, int id); /** * Get the function block with pointers to the ipsecmod functions * @return the function block for "ipsecmod". */ struct module_func_block* ipsecmod_get_funcblock(void); #endif /* IPSECMOD_H */ unbound-1.13.1/ipsecmod/ipsecmod.c0000644000175000017500000004545514010434640016466 0ustar wouterwouter/* * ipsecmod/ipsecmod.c - facilitate opportunistic IPsec module * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that facilitates opportunistic IPsec. It does so * by also quering for the IPSECKEY for A/AAAA queries and calling a * configurable hook (eg. signaling an IKE daemon) before replying. */ #include "config.h" #ifdef USE_IPSECMOD #include "ipsecmod/ipsecmod.h" #include "ipsecmod/ipsecmod-whitelist.h" #include "util/fptr_wlist.h" #include "util/regional.h" #include "util/net_help.h" #include "util/config_file.h" #include "services/cache/dns.h" #include "sldns/wire2str.h" /** Apply configuration to ipsecmod module 'global' state. */ static int ipsecmod_apply_cfg(struct ipsecmod_env* ipsecmod_env, struct config_file* cfg) { if(!cfg->ipsecmod_hook || (cfg->ipsecmod_hook && !cfg->ipsecmod_hook[0])) { log_err("ipsecmod: missing ipsecmod-hook."); return 0; } if(cfg->ipsecmod_whitelist && !ipsecmod_whitelist_apply_cfg(ipsecmod_env, cfg)) return 0; return 1; } int ipsecmod_init(struct module_env* env, int id) { struct ipsecmod_env* ipsecmod_env = (struct ipsecmod_env*)calloc(1, sizeof(struct ipsecmod_env)); if(!ipsecmod_env) { log_err("malloc failure"); return 0; } env->modinfo[id] = (void*)ipsecmod_env; ipsecmod_env->whitelist = NULL; if(!ipsecmod_apply_cfg(ipsecmod_env, env->cfg)) { log_err("ipsecmod: could not apply configuration settings."); return 0; } return 1; } void ipsecmod_deinit(struct module_env* env, int id) { struct ipsecmod_env* ipsecmod_env; if(!env || !env->modinfo[id]) return; ipsecmod_env = (struct ipsecmod_env*)env->modinfo[id]; /* Free contents. */ ipsecmod_whitelist_delete(ipsecmod_env->whitelist); free(ipsecmod_env); env->modinfo[id] = NULL; } /** New query for ipsecmod. */ static int ipsecmod_new(struct module_qstate* qstate, int id) { struct ipsecmod_qstate* iq = (struct ipsecmod_qstate*)regional_alloc( qstate->region, sizeof(struct ipsecmod_qstate)); qstate->minfo[id] = iq; if(!iq) return 0; /* Initialise it. */ memset(iq, 0, sizeof(*iq)); iq->enabled = qstate->env->cfg->ipsecmod_enabled; iq->is_whitelisted = ipsecmod_domain_is_whitelisted( (struct ipsecmod_env*)qstate->env->modinfo[id], qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qclass); return 1; } /** * Exit module with an error status. * @param qstate: query state * @param id: module id. */ static void ipsecmod_error(struct module_qstate* qstate, int id) { qstate->ext_state[id] = module_error; qstate->return_rcode = LDNS_RCODE_SERVFAIL; } /** * Generate a request for the IPSECKEY. * * @param qstate: query state that is the parent. * @param id: module id. * @param name: what name to query for. * @param namelen: length of name. * @param qtype: query type. * @param qclass: query class. * @param flags: additional flags, such as the CD bit (BIT_CD), or 0. * @return false on alloc failure. */ static int generate_request(struct module_qstate* qstate, int id, uint8_t* name, size_t namelen, uint16_t qtype, uint16_t qclass, uint16_t flags) { struct module_qstate* newq; struct query_info ask; ask.qname = name; ask.qname_len = namelen; ask.qtype = qtype; ask.qclass = qclass; ask.local_alias = NULL; log_query_info(VERB_ALGO, "ipsecmod: generate request", &ask); fptr_ok(fptr_whitelist_modenv_attach_sub(qstate->env->attach_sub)); if(!(*qstate->env->attach_sub)(qstate, &ask, (uint16_t)(BIT_RD|flags), 0, 0, &newq)){ log_err("Could not generate request: out of memory"); return 0; } qstate->ext_state[id] = module_wait_subquery; return 1; } /** * Check if the string passed is a valid domain name with safe characters to * pass to a shell. * This will only allow: * - digits * - alphas * - hyphen (not at the start) * - dot (not at the start, or the only character) * - underscore * @param s: pointer to the string. * @param slen: string's length. * @return true if s only contains safe characters; false otherwise. */ static int domainname_has_safe_characters(char* s, size_t slen) { size_t i; for(i = 0; i < slen; i++) { if(s[i] == '\0') return 1; if((s[i] == '-' && i != 0) || (s[i] == '.' && (i != 0 || s[1] == '\0')) || (s[i] == '_') || (s[i] >= '0' && s[i] <= '9') || (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z')) { continue; } return 0; } return 1; } /** * Check if the stringified IPSECKEY RDATA contains safe characters to pass to * a shell. * This is only relevant for checking the gateway when the gateway type is 3 * (domainname). * @param s: pointer to the string. * @param slen: string's length. * @return true if s contains only safe characters; false otherwise. */ static int ipseckey_has_safe_characters(char* s, size_t slen) { int precedence, gateway_type, algorithm; char* gateway; gateway = (char*)calloc(slen, sizeof(char)); if(!gateway) { log_err("ipsecmod: out of memory when calling the hook"); return 0; } if(sscanf(s, "%d %d %d %s ", &precedence, &gateway_type, &algorithm, gateway) != 4) { free(gateway); return 0; } if(gateway_type != 3) { free(gateway); return 1; } if(domainname_has_safe_characters(gateway, slen)) { free(gateway); return 1; } free(gateway); return 0; } /** * Prepare the data and call the hook. * * @param qstate: query state. * @param iq: ipsecmod qstate. * @param ie: ipsecmod environment. * @return true on success, false otherwise. */ static int call_hook(struct module_qstate* qstate, struct ipsecmod_qstate* iq, struct ipsecmod_env* ATTR_UNUSED(ie)) { size_t slen, tempdata_len, tempstring_len, i; char str[65535], *s, *tempstring; int w = 0, w_temp, qtype; struct ub_packed_rrset_key* rrset_key; struct packed_rrset_data* rrset_data; uint8_t *tempdata; /* Check if a shell is available */ if(system(NULL) == 0) { log_err("ipsecmod: no shell available for ipsecmod-hook"); return 0; } /* Zero the buffer. */ s = str; slen = sizeof(str); memset(s, 0, slen); /* Copy the hook into the buffer. */ w += sldns_str_print(&s, &slen, "%s", qstate->env->cfg->ipsecmod_hook); /* Put space into the buffer. */ w += sldns_str_print(&s, &slen, " "); /* Copy the qname into the buffer. */ tempstring = sldns_wire2str_dname(qstate->qinfo.qname, qstate->qinfo.qname_len); if(!tempstring) { log_err("ipsecmod: out of memory when calling the hook"); return 0; } if(!domainname_has_safe_characters(tempstring, strlen(tempstring))) { log_err("ipsecmod: qname has unsafe characters"); free(tempstring); return 0; } w += sldns_str_print(&s, &slen, "\"%s\"", tempstring); free(tempstring); /* Put space into the buffer. */ w += sldns_str_print(&s, &slen, " "); /* Copy the IPSECKEY TTL into the buffer. */ rrset_data = (struct packed_rrset_data*)iq->ipseckey_rrset->entry.data; w += sldns_str_print(&s, &slen, "\"%ld\"", (long)rrset_data->ttl); /* Put space into the buffer. */ w += sldns_str_print(&s, &slen, " "); rrset_key = reply_find_answer_rrset(&qstate->return_msg->qinfo, qstate->return_msg->rep); /* Double check that the records are indeed A/AAAA. * This should never happen as this function is only executed for A/AAAA * queries but make sure we don't pass anything other than A/AAAA to the * shell. */ qtype = ntohs(rrset_key->rk.type); if(qtype != LDNS_RR_TYPE_AAAA && qtype != LDNS_RR_TYPE_A) { log_err("ipsecmod: Answer is not of A or AAAA type"); return 0; } rrset_data = (struct packed_rrset_data*)rrset_key->entry.data; /* Copy the A/AAAA record(s) into the buffer. Start and end this section * with a double quote. */ w += sldns_str_print(&s, &slen, "\""); for(i=0; icount; i++) { if(i > 0) { /* Put space into the buffer. */ w += sldns_str_print(&s, &slen, " "); } /* Ignore the first two bytes, they are the rr_data len. */ w_temp = sldns_wire2str_rdata_buf(rrset_data->rr_data[i] + 2, rrset_data->rr_len[i] - 2, s, slen, qstate->qinfo.qtype); if(w_temp < 0) { /* Error in printout. */ log_err("ipsecmod: Error in printing IP address"); return 0; } else if((size_t)w_temp >= slen) { s = NULL; /* We do not want str to point outside of buffer. */ slen = 0; log_err("ipsecmod: shell command too long"); return 0; } else { s += w_temp; slen -= w_temp; w += w_temp; } } w += sldns_str_print(&s, &slen, "\""); /* Put space into the buffer. */ w += sldns_str_print(&s, &slen, " "); /* Copy the IPSECKEY record(s) into the buffer. Start and end this section * with a double quote. */ w += sldns_str_print(&s, &slen, "\""); rrset_data = (struct packed_rrset_data*)iq->ipseckey_rrset->entry.data; for(i=0; icount; i++) { if(i > 0) { /* Put space into the buffer. */ w += sldns_str_print(&s, &slen, " "); } /* Ignore the first two bytes, they are the rr_data len. */ tempdata = rrset_data->rr_data[i] + 2; tempdata_len = rrset_data->rr_len[i] - 2; /* Save the buffer pointers. */ tempstring = s; tempstring_len = slen; w_temp = sldns_wire2str_ipseckey_scan(&tempdata, &tempdata_len, &s, &slen, NULL, 0, NULL); /* There was an error when parsing the IPSECKEY; reset the buffer * pointers to their previous values. */ if(w_temp == -1) { s = tempstring; slen = tempstring_len; } else if(w_temp > 0) { if(!ipseckey_has_safe_characters( tempstring, tempstring_len - slen)) { log_err("ipsecmod: ipseckey has unsafe characters"); return 0; } w += w_temp; } } w += sldns_str_print(&s, &slen, "\""); if(w >= (int)sizeof(str)) { log_err("ipsecmod: shell command too long"); return 0; } verbose(VERB_ALGO, "ipsecmod: shell command: '%s'", str); /* ipsecmod-hook should return 0 on success. */ if(system(str) != 0) return 0; return 1; } /** * Handle an ipsecmod module event with a query * @param qstate: query state (from the mesh), passed between modules. * contains qstate->env module environment with global caches and so on. * @param iq: query state specific for this module. per-query. * @param ie: environment specific for this module. global. * @param id: module id. */ static void ipsecmod_handle_query(struct module_qstate* qstate, struct ipsecmod_qstate* iq, struct ipsecmod_env* ie, int id) { struct ub_packed_rrset_key* rrset_key; struct packed_rrset_data* rrset_data; size_t i; /* Pass to next module if we are not enabled and whitelisted. */ if(!(iq->enabled && iq->is_whitelisted)) { qstate->ext_state[id] = module_wait_module; return; } /* New query, check if the query is for an A/AAAA record and disable * caching for other modules. */ if(!iq->ipseckey_done) { if(qstate->qinfo.qtype == LDNS_RR_TYPE_A || qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) { char type[16]; sldns_wire2str_type_buf(qstate->qinfo.qtype, type, sizeof(type)); verbose(VERB_ALGO, "ipsecmod: query for %s; engaging", type); qstate->no_cache_store = 1; } /* Pass request to next module. */ qstate->ext_state[id] = module_wait_module; return; } /* IPSECKEY subquery is finished. */ /* We have an IPSECKEY answer. */ if(iq->ipseckey_rrset) { rrset_data = (struct packed_rrset_data*)iq->ipseckey_rrset->entry.data; if(rrset_data) { /* If bogus return SERVFAIL. */ if(!qstate->env->cfg->ipsecmod_ignore_bogus && rrset_data->security == sec_status_bogus) { log_err("ipsecmod: bogus IPSECKEY"); ipsecmod_error(qstate, id); return; } /* We have a valid IPSECKEY reply, call hook. */ if(!call_hook(qstate, iq, ie) && qstate->env->cfg->ipsecmod_strict) { log_err("ipsecmod: ipsecmod-hook failed"); ipsecmod_error(qstate, id); return; } /* Make sure the A/AAAA's TTL is equal/less than the * ipsecmod_max_ttl. */ rrset_key = reply_find_answer_rrset(&qstate->return_msg->qinfo, qstate->return_msg->rep); rrset_data = (struct packed_rrset_data*)rrset_key->entry.data; if(rrset_data->ttl > (time_t)qstate->env->cfg->ipsecmod_max_ttl) { /* Update TTL for rrset to fixed value. */ rrset_data->ttl = qstate->env->cfg->ipsecmod_max_ttl; for(i=0; icount+rrset_data->rrsig_count; i++) rrset_data->rr_ttl[i] = qstate->env->cfg->ipsecmod_max_ttl; /* Also update reply_info's TTL */ if(qstate->return_msg->rep->ttl > (time_t)qstate->env->cfg->ipsecmod_max_ttl) { qstate->return_msg->rep->ttl = qstate->env->cfg->ipsecmod_max_ttl; qstate->return_msg->rep->prefetch_ttl = PREFETCH_TTL_CALC( qstate->return_msg->rep->ttl); qstate->return_msg->rep->serve_expired_ttl = qstate->return_msg->rep->ttl + qstate->env->cfg->serve_expired_ttl; } } } } /* Store A/AAAA in cache. */ if(!dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, 0, qstate->prefetch_leeway, 0, qstate->region, qstate->query_flags)) { log_err("ipsecmod: out of memory caching record"); } qstate->ext_state[id] = module_finished; } /** * Handle an ipsecmod module event with a response from the iterator. * @param qstate: query state (from the mesh), passed between modules. * contains qstate->env module environment with global caches and so on. * @param iq: query state specific for this module. per-query. * @param ie: environment specific for this module. global. * @param id: module id. */ static void ipsecmod_handle_response(struct module_qstate* qstate, struct ipsecmod_qstate* ATTR_UNUSED(iq), struct ipsecmod_env* ATTR_UNUSED(ie), int id) { /* Pass to previous module if we are not enabled and whitelisted. */ if(!(iq->enabled && iq->is_whitelisted)) { qstate->ext_state[id] = module_finished; return; } /* check if the response is for an A/AAAA query. */ if((qstate->qinfo.qtype == LDNS_RR_TYPE_A || qstate->qinfo.qtype == LDNS_RR_TYPE_AAAA) && /* check that we had an answer for the A/AAAA query. */ qstate->return_msg && reply_find_answer_rrset(&qstate->return_msg->qinfo, qstate->return_msg->rep) && /* check that another module didn't SERVFAIL. */ qstate->return_rcode == LDNS_RCODE_NOERROR) { char type[16]; sldns_wire2str_type_buf(qstate->qinfo.qtype, type, sizeof(type)); verbose(VERB_ALGO, "ipsecmod: response for %s; generating IPSECKEY " "subquery", type); /* generate an IPSECKEY query. */ if(!generate_request(qstate, id, qstate->qinfo.qname, qstate->qinfo.qname_len, LDNS_RR_TYPE_IPSECKEY, qstate->qinfo.qclass, 0)) { log_err("ipsecmod: could not generate subquery."); ipsecmod_error(qstate, id); } return; } /* we are done with the query. */ qstate->ext_state[id] = module_finished; } void ipsecmod_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct ipsecmod_env* ie = (struct ipsecmod_env*)qstate->env->modinfo[id]; struct ipsecmod_qstate* iq = (struct ipsecmod_qstate*)qstate->minfo[id]; verbose(VERB_QUERY, "ipsecmod[module %d] operate: extstate:%s event:%s", id, strextstate(qstate->ext_state[id]), strmodulevent(event)); if(iq) log_query_info(VERB_QUERY, "ipsecmod operate: query", &qstate->qinfo); /* create ipsecmod_qstate. */ if((event == module_event_new || event == module_event_pass) && iq == NULL) { if(!ipsecmod_new(qstate, id)) { ipsecmod_error(qstate, id); return; } iq = (struct ipsecmod_qstate*)qstate->minfo[id]; } if(iq && (event == module_event_pass || event == module_event_new)) { ipsecmod_handle_query(qstate, iq, ie, id); return; } if(iq && (event == module_event_moddone)) { ipsecmod_handle_response(qstate, iq, ie, id); return; } if(iq && outbound) { /* cachedb does not need to process responses at this time * ignore it. cachedb_process_response(qstate, iq, ie, id, outbound, event); */ return; } if(event == module_event_error) { verbose(VERB_ALGO, "got called with event error, giving up"); ipsecmod_error(qstate, id); return; } if(!iq && (event == module_event_moddone)) { /* during priming, module done but we never started. */ qstate->ext_state[id] = module_finished; return; } log_err("ipsecmod: bad event %s", strmodulevent(event)); ipsecmod_error(qstate, id); return; } void ipsecmod_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) { struct ipsecmod_qstate* siq; log_query_info(VERB_ALGO, "ipsecmod: inform_super, sub is", &qstate->qinfo); log_query_info(VERB_ALGO, "super is", &super->qinfo); siq = (struct ipsecmod_qstate*)super->minfo[id]; if(!siq) { verbose(VERB_ALGO, "super has no ipsecmod state"); return; } if(qstate->return_msg) { struct ub_packed_rrset_key* rrset_key = reply_find_answer_rrset( &qstate->return_msg->qinfo, qstate->return_msg->rep); if(rrset_key) { /* We have an answer. */ /* Copy to super's region. */ rrset_key = packed_rrset_copy_region(rrset_key, super->region, 0); siq->ipseckey_rrset = rrset_key; if(!rrset_key) { log_err("ipsecmod: out of memory."); } } } /* Notify super to proceed. */ siq->ipseckey_done = 1; } void ipsecmod_clear(struct module_qstate* qstate, int id) { if(!qstate) return; qstate->minfo[id] = NULL; } size_t ipsecmod_get_mem(struct module_env* env, int id) { struct ipsecmod_env* ie = (struct ipsecmod_env*)env->modinfo[id]; if(!ie) return 0; return sizeof(*ie) + ipsecmod_whitelist_get_mem(ie->whitelist); } /** * The ipsecmod function block */ static struct module_func_block ipsecmod_block = { "ipsecmod", &ipsecmod_init, &ipsecmod_deinit, &ipsecmod_operate, &ipsecmod_inform_super, &ipsecmod_clear, &ipsecmod_get_mem }; struct module_func_block* ipsecmod_get_funcblock(void) { return &ipsecmod_block; } #endif /* USE_IPSECMOD */ unbound-1.13.1/ipsecmod/ipsecmod-whitelist.h0000644000175000017500000000543414010434640020476 0ustar wouterwouter/* * ipsecmod/ipsecmod-whitelist.h - White listed domains for the ipsecmod to * operate on. * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * Keep track of the white listed domains for ipsecmod. */ #ifndef IPSECMOD_WHITELIST_H #define IPSECMOD_WHITELIST_H #include "util/storage/dnstree.h" struct config_file; struct regional; /** * Process ipsecmod_whitelist config. * @param ie: ipsecmod environment. * @param cfg: config options. * @return 0 on error. */ int ipsecmod_whitelist_apply_cfg(struct ipsecmod_env* ie, struct config_file* cfg); /** * Delete the ipsecmod whitelist. * @param whitelist: ipsecmod whitelist. */ void ipsecmod_whitelist_delete(rbtree_type* whitelist); /** * See if a domain is whitelisted. * @param ie: ipsecmod environment. * @param dname: domain name to check. * @param dname_len: length of domain name. * @param qclass: query CLASS. * @return: true if the domain is whitelisted for the ipsecmod. */ int ipsecmod_domain_is_whitelisted(struct ipsecmod_env* ie, uint8_t* dname, size_t dname_len, uint16_t qclass); /** * Get memory used by ipsecmod whitelist. * @param whitelist: structure for domain storage. * @return bytes in use. */ size_t ipsecmod_whitelist_get_mem(rbtree_type* whitelist); #endif /* IPSECMOD_WHITELIST_H */ unbound-1.13.1/ipsecmod/ipsecmod-whitelist.c0000644000175000017500000001065514010434640020472 0ustar wouterwouter/* * ipsecmod/ipsecmod-whitelist.h - White listed domains for the ipsecmod to * operate on. * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * Keep track of the white listed domains for ipsecmod. */ #include "config.h" #ifdef USE_IPSECMOD #include "ipsecmod/ipsecmod.h" #include "ipsecmod/ipsecmod-whitelist.h" #include "util/regional.h" #include "util/log.h" #include "util/config_file.h" #include "util/rbtree.h" #include "util/data/dname.h" #include "util/storage/dnstree.h" #include "sldns/str2wire.h" /** Apply ipsecmod-whitelist string. */ static int whitelist_str_cfg(rbtree_type* whitelist, const char* name) { struct name_tree_node* n; size_t len; uint8_t* nm = sldns_str2wire_dname(name, &len); if(!nm) { log_err("ipsecmod: could not parse %s for whitelist.", name); return 0; } n = (struct name_tree_node*)calloc(1, sizeof(*n)); if(!n) { log_err("ipsecmod: out of memory while creating whitelist."); free(nm); return 0; } n->node.key = n; n->name = nm; n->len = len; n->labs = dname_count_labels(nm); n->dclass = LDNS_RR_CLASS_IN; if(!name_tree_insert(whitelist, n, nm, len, n->labs, n->dclass)) { /* duplicate element ignored, idempotent */ free(n->name); free(n); } return 1; } /** Read ipsecmod-whitelist config. */ static int read_whitelist(rbtree_type* whitelist, struct config_file* cfg) { struct config_strlist* p; for(p = cfg->ipsecmod_whitelist; p; p = p->next) { log_assert(p->str); if(!whitelist_str_cfg(whitelist, p->str)) return 0; } return 1; } int ipsecmod_whitelist_apply_cfg(struct ipsecmod_env* ie, struct config_file* cfg) { ie->whitelist = rbtree_create(name_tree_compare); if(!read_whitelist(ie->whitelist, cfg)) return 0; name_tree_init_parents(ie->whitelist); return 1; } /** Delete ipsecmod_env->whitelist element. */ static void whitelist_free(struct rbnode_type* n, void* ATTR_UNUSED(d)) { if(n) { free(((struct name_tree_node*)n)->name); free(n); } } /** Get memory usage of ipsecmod_env->whitelist element. */ static void whitelist_get_mem(struct rbnode_type* n, void* arg) { struct name_tree_node* node = (struct name_tree_node*)n; size_t* size = (size_t*) arg; if(node) { *size += sizeof(node) + node->len; } } void ipsecmod_whitelist_delete(rbtree_type* whitelist) { if(whitelist) { traverse_postorder(whitelist, whitelist_free, NULL); free(whitelist); } } int ipsecmod_domain_is_whitelisted(struct ipsecmod_env* ie, uint8_t* dname, size_t dname_len, uint16_t qclass) { if(!ie->whitelist) return 1; /* No whitelist, treat as whitelisted. */ return name_tree_lookup(ie->whitelist, dname, dname_len, dname_count_labels(dname), qclass) != NULL; } size_t ipsecmod_whitelist_get_mem(rbtree_type* whitelist) { size_t size = 0; if(whitelist) { traverse_postorder(whitelist, whitelist_get_mem, &size); } return size; } #endif /* USE_IPSECMOD */ unbound-1.13.1/util/0000755000175000017500000000000014010434640013654 5ustar wouterwouterunbound-1.13.1/util/ub_event.c0000644000175000017500000002725314010434640015640 0ustar wouterwouter/* * util/ub_event.c - directly call libevent (compatability) functions * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains and implementation for the indirection layer for pluggable * events that transparently passes it either directly to libevent, or calls * the libevent compatibility layer functions. */ #include "config.h" #include #include "util/ub_event.h" #include "util/log.h" #include "util/netevent.h" #include "util/tube.h" /* We define libevent structures here to hide the libevent stuff. */ #ifdef USE_MINI_EVENT # ifdef USE_WINSOCK # include "util/winsock_event.h" # else # include "util/mini_event.h" # endif /* USE_WINSOCK */ #else /* USE_MINI_EVENT */ /* we use libevent */ # ifdef HAVE_EVENT_H # include # else # include "event2/event.h" # include "event2/event_struct.h" # include "event2/event_compat.h" # endif #endif /* USE_MINI_EVENT */ #if UB_EV_TIMEOUT != EV_TIMEOUT || UB_EV_READ != EV_READ || \ UB_EV_WRITE != EV_WRITE || UB_EV_SIGNAL != EV_SIGNAL || \ UB_EV_PERSIST != EV_PERSIST /* Only necessary for libev */ # define NATIVE_BITS(b) ( \ (((b) & UB_EV_TIMEOUT) ? EV_TIMEOUT : 0) \ | (((b) & UB_EV_READ ) ? EV_READ : 0) \ | (((b) & UB_EV_WRITE ) ? EV_WRITE : 0) \ | (((b) & UB_EV_SIGNAL ) ? EV_SIGNAL : 0) \ | (((b) & UB_EV_PERSIST) ? EV_PERSIST : 0)) # define UB_EV_BITS(b) ( \ (((b) & EV_TIMEOUT) ? UB_EV_TIMEOUT : 0) \ | (((b) & EV_READ ) ? UB_EV_READ : 0) \ | (((b) & EV_WRITE ) ? UB_EV_WRITE : 0) \ | (((b) & EV_SIGNAL ) ? UB_EV_SIGNAL : 0) \ | (((b) & EV_PERSIST) ? UB_EV_PERSIST : 0)) # define UB_EV_BITS_CB(C) void my_ ## C (int fd, short bits, void *arg) \ { (C)(fd, UB_EV_BITS(bits), arg); } UB_EV_BITS_CB(comm_point_udp_callback); UB_EV_BITS_CB(comm_point_udp_ancil_callback) UB_EV_BITS_CB(comm_point_tcp_accept_callback) UB_EV_BITS_CB(comm_point_tcp_handle_callback) UB_EV_BITS_CB(comm_timer_callback) UB_EV_BITS_CB(comm_signal_callback) UB_EV_BITS_CB(comm_point_local_handle_callback) UB_EV_BITS_CB(comm_point_raw_handle_callback) UB_EV_BITS_CB(comm_point_http_handle_callback) UB_EV_BITS_CB(tube_handle_signal) UB_EV_BITS_CB(comm_base_handle_slow_accept) static void (*NATIVE_BITS_CB(void (*cb)(int, short, void*)))(int, short, void*) { if(cb == comm_point_udp_callback) return my_comm_point_udp_callback; else if(cb == comm_point_udp_ancil_callback) return my_comm_point_udp_ancil_callback; else if(cb == comm_point_tcp_accept_callback) return my_comm_point_tcp_accept_callback; else if(cb == comm_point_tcp_handle_callback) return my_comm_point_tcp_handle_callback; else if(cb == comm_timer_callback) return my_comm_timer_callback; else if(cb == comm_signal_callback) return my_comm_signal_callback; else if(cb == comm_point_local_handle_callback) return my_comm_point_local_handle_callback; else if(cb == comm_point_raw_handle_callback) return my_comm_point_raw_handle_callback; else if(cb == comm_point_http_handle_callback) return my_comm_point_http_handle_callback; else if(cb == tube_handle_signal) return my_tube_handle_signal; else if(cb == comm_base_handle_slow_accept) return my_comm_base_handle_slow_accept; else { log_assert(0); /* this NULL callback pointer should not happen, we should have the necessary routine listed above */ return NULL; } } #else # define NATIVE_BITS(b) (b) # define NATIVE_BITS_CB(c) (c) #endif #ifndef EVFLAG_AUTO #define EVFLAG_AUTO 0 #endif #define AS_EVENT_BASE(x) ((struct event_base*)x) #define AS_UB_EVENT_BASE(x) ((struct ub_event_base*)x) #define AS_EVENT(x) ((struct event*)x) #define AS_UB_EVENT(x) ((struct ub_event*)x) const char* ub_event_get_version(void) { return event_get_version(); } #if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EV_FEATURE_BACKENDS) static const char* ub_ev_backend2str(int b) { switch(b) { case EVBACKEND_SELECT: return "select"; case EVBACKEND_POLL: return "poll"; case EVBACKEND_EPOLL: return "epoll"; case EVBACKEND_KQUEUE: return "kqueue"; case EVBACKEND_DEVPOLL: return "devpoll"; case EVBACKEND_PORT: return "evport"; } return "unknown"; } #endif void ub_get_event_sys(struct ub_event_base* base, const char** n, const char** s, const char** m) { #ifdef USE_WINSOCK (void)base; *n = "event"; *s = "winsock"; *m = "WSAWaitForMultipleEvents"; #elif defined(USE_MINI_EVENT) (void)base; *n = "mini-event"; *s = "internal"; *m = "select"; #else struct event_base* b = AS_EVENT_BASE(base); *s = event_get_version(); # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP) *n = "libev"; if (!b) b = (struct event_base*)ev_default_loop(EVFLAG_AUTO); # ifdef EV_FEATURE_BACKENDS *m = ub_ev_backend2str(ev_backend((struct ev_loop*)b)); # else *m = "not obtainable"; # endif # elif defined(HAVE_EVENT_BASE_GET_METHOD) *n = "libevent"; if (!b) b = event_base_new(); *m = event_base_get_method(b); # else *n = "unknown"; *m = "not obtainable"; (void)b; # endif # ifdef HAVE_EVENT_BASE_FREE if (b && b != AS_EVENT_BASE(base)) event_base_free(b); # endif #endif } struct ub_event_base* ub_default_event_base(int sigs, time_t* time_secs, struct timeval* time_tv) { void* base; (void)base; #ifdef USE_MINI_EVENT (void)sigs; /* use mini event time-sharing feature */ base = event_init(time_secs, time_tv); #else (void)time_secs; (void)time_tv; # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP) /* libev */ if(sigs) base = ev_default_loop(EVFLAG_AUTO); else base = ev_loop_new(EVFLAG_AUTO); # else (void)sigs; # ifdef HAVE_EVENT_BASE_NEW base = event_base_new(); # else base = event_init(); # endif # endif #endif return (struct ub_event_base*)base; } struct ub_event_base * ub_libevent_event_base(struct event_base* libevent_base) { #ifdef USE_MINI_EVENT (void)libevent_base; return NULL; #else return AS_UB_EVENT_BASE(libevent_base); #endif } struct event_base * ub_libevent_get_event_base(struct ub_event_base* base) { #ifdef USE_MINI_EVENT (void)base; return NULL; #else return AS_EVENT_BASE(base); #endif } void ub_event_base_free(struct ub_event_base* base) { #ifdef USE_MINI_EVENT event_base_free(AS_EVENT_BASE(base)); #elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE) /* only libevent 1.2+ has it, but in 1.2 it is broken - assertion fails on signal handling ev that is not deleted in libevent 1.3c (event_base_once appears) this is fixed. */ event_base_free(AS_EVENT_BASE(base)); #else (void)base; #endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */ } int ub_event_base_dispatch(struct ub_event_base* base) { return event_base_dispatch(AS_EVENT_BASE(base)); } int ub_event_base_loopexit(struct ub_event_base* base) { return event_base_loopexit(AS_EVENT_BASE(base), NULL); } struct ub_event* ub_event_new(struct ub_event_base* base, int fd, short bits, void (*cb)(int, short, void*), void* arg) { struct event *ev = (struct event*)calloc(1, sizeof(struct event)); if (!ev) return NULL; #ifndef HAVE_EVENT_ASSIGN event_set(ev, fd, NATIVE_BITS(bits), NATIVE_BITS_CB(cb), arg); if (event_base_set(AS_EVENT_BASE(base), ev) != 0) { free(ev); return NULL; } #else if (event_assign(ev, AS_EVENT_BASE(base), fd, bits, cb, arg) != 0) { free(ev); return NULL; } #endif return AS_UB_EVENT(ev); } struct ub_event* ub_signal_new(struct ub_event_base* base, int fd, void (*cb)(int, short, void*), void* arg) { struct event *ev = (struct event*)calloc(1, sizeof(struct event)); if (!ev) return NULL; #if !HAVE_DECL_EVSIGNAL_ASSIGN signal_set(ev, fd, NATIVE_BITS_CB(cb), arg); if (event_base_set(AS_EVENT_BASE(base), ev) != 0) { free(ev); return NULL; } #else if (evsignal_assign(ev, AS_EVENT_BASE(base), fd, cb, arg) != 0) { free(ev); return NULL; } #endif return AS_UB_EVENT(ev); } struct ub_event* ub_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent, void (*cb)(int, short, void*), void* arg) { #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK) struct event *ev = (struct event*)calloc(1, sizeof(struct event)); if (!ev) return NULL; if (winsock_register_wsaevent(AS_EVENT_BASE(base), ev, wsaevent, cb, arg)) return AS_UB_EVENT(ev); free(ev); return NULL; #else (void)base; (void)wsaevent; (void)cb; (void)arg; return NULL; #endif } void ub_event_add_bits(struct ub_event* ev, short bits) { AS_EVENT(ev)->ev_events |= NATIVE_BITS(bits); } void ub_event_del_bits(struct ub_event* ev, short bits) { AS_EVENT(ev)->ev_events &= ~NATIVE_BITS(bits); } void ub_event_set_fd(struct ub_event* ev, int fd) { AS_EVENT(ev)->ev_fd = fd; } void ub_event_free(struct ub_event* ev) { if (ev) free(AS_EVENT(ev)); } int ub_event_add(struct ub_event* ev, struct timeval* tv) { return event_add(AS_EVENT(ev), tv); } int ub_event_del(struct ub_event* ev) { return event_del(AS_EVENT(ev)); } int ub_timer_add(struct ub_event* ev, struct ub_event_base* base, void (*cb)(int, short, void*), void* arg, struct timeval* tv) { event_set(AS_EVENT(ev), -1, EV_TIMEOUT, NATIVE_BITS_CB(cb), arg); if (event_base_set(AS_EVENT_BASE(base), AS_EVENT(ev)) != 0) return -1; return evtimer_add(AS_EVENT(ev), tv); } int ub_timer_del(struct ub_event* ev) { return evtimer_del(AS_EVENT(ev)); } int ub_signal_add(struct ub_event* ev, struct timeval* tv) { return signal_add(AS_EVENT(ev), tv); } int ub_signal_del(struct ub_event* ev) { return signal_del(AS_EVENT(ev)); } void ub_winsock_unregister_wsaevent(struct ub_event* ev) { #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK) winsock_unregister_wsaevent(AS_EVENT(ev)); free(AS_EVENT(ev)); #else (void)ev; #endif } void ub_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits) { #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK) winsock_tcp_wouldblock(AS_EVENT(ev), NATIVE_BITS(eventbits)); #else (void)ev; (void)eventbits; #endif } void ub_comm_base_now(struct comm_base* cb) { #ifdef USE_MINI_EVENT /** minievent updates the time when it blocks. */ (void)cb; /* nothing to do */ #else /* !USE_MINI_EVENT */ /** fillup the time values in the event base */ time_t *tt; struct timeval *tv; comm_base_timept(cb, &tt, &tv); if(gettimeofday(tv, NULL) < 0) { log_err("gettimeofday: %s", strerror(errno)); } #ifndef S_SPLINT_S *tt = tv->tv_sec; #endif #endif /* USE_MINI_EVENT */ } unbound-1.13.1/util/ub_event_pluggable.c0000644000175000017500000004316414010434640017661 0ustar wouterwouter/* * util/ub_event_pluggable.c - call registered pluggable event functions * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains an implementation for the indirection layer for pluggable * events that calls the registered pluggable event loop. It also defines a * default pluggable event loop based on the default libevent (compatibility) * functions. */ #include "config.h" #include #include "util/ub_event.h" #include "libunbound/unbound-event.h" #include "util/netevent.h" #include "util/log.h" #include "util/fptr_wlist.h" /* We define libevent structures here to hide the libevent stuff. */ #ifdef USE_MINI_EVENT # ifdef USE_WINSOCK # include "util/winsock_event.h" # else # include "util/mini_event.h" # endif /* USE_WINSOCK */ #else /* USE_MINI_EVENT */ /* we use libevent */ # ifdef HAVE_EVENT_H # include # else # include "event2/event.h" # include "event2/event_struct.h" # include "event2/event_compat.h" # endif #endif /* USE_MINI_EVENT */ #if UB_EV_TIMEOUT != EV_TIMEOUT || UB_EV_READ != EV_READ || \ UB_EV_WRITE != EV_WRITE || UB_EV_SIGNAL != EV_SIGNAL || \ UB_EV_PERSIST != EV_PERSIST /* Only necessary for libev */ # define NATIVE_BITS(b) ( \ (((b) & UB_EV_TIMEOUT) ? EV_TIMEOUT : 0) \ | (((b) & UB_EV_READ ) ? EV_READ : 0) \ | (((b) & UB_EV_WRITE ) ? EV_WRITE : 0) \ | (((b) & UB_EV_SIGNAL ) ? EV_SIGNAL : 0) \ | (((b) & UB_EV_PERSIST) ? EV_PERSIST : 0)) # define UB_EV_BITS(b) ( \ (((b) & EV_TIMEOUT) ? UB_EV_TIMEOUT : 0) \ | (((b) & EV_READ ) ? UB_EV_READ : 0) \ | (((b) & EV_WRITE ) ? UB_EV_WRITE : 0) \ | (((b) & EV_SIGNAL ) ? UB_EV_SIGNAL : 0) \ | (((b) & EV_PERSIST) ? UB_EV_PERSIST : 0)) # define UB_EV_BITS_CB(C) void my_ ## C (int fd, short bits, void *arg) \ { (C)(fd, UB_EV_BITS(bits), arg); } UB_EV_BITS_CB(comm_point_udp_callback); UB_EV_BITS_CB(comm_point_udp_ancil_callback) UB_EV_BITS_CB(comm_point_tcp_accept_callback) UB_EV_BITS_CB(comm_point_tcp_handle_callback) UB_EV_BITS_CB(comm_timer_callback) UB_EV_BITS_CB(comm_signal_callback) UB_EV_BITS_CB(comm_point_local_handle_callback) UB_EV_BITS_CB(comm_point_raw_handle_callback) UB_EV_BITS_CB(tube_handle_signal) UB_EV_BITS_CB(comm_base_handle_slow_accept) static void (*NATIVE_BITS_CB(void (*cb)(int, short, void*)))(int, short, void*) { if(cb == comm_point_udp_callback) return my_comm_point_udp_callback; else if(cb == comm_point_udp_ancil_callback) return my_comm_point_udp_ancil_callback; else if(cb == comm_point_tcp_accept_callback) return my_comm_point_tcp_accept_callback; else if(cb == comm_point_tcp_handle_callback) return my_comm_point_tcp_handle_callback; else if(cb == comm_timer_callback) return my_comm_timer_callback; else if(cb == comm_signal_callback) return my_comm_signal_callback; else if(cb == comm_point_local_handle_callback) return my_comm_point_local_handle_callback; else if(cb == comm_point_raw_handle_callback) return my_comm_point_raw_handle_callback; else if(cb == tube_handle_signal) return my_tube_handle_signal; else if(cb == comm_base_handle_slow_accept) return my_comm_base_handle_slow_accept; else return NULL; } #else # define NATIVE_BITS(b) (b) # define NATIVE_BITS_CB(c) (c) #endif #ifndef EVFLAG_AUTO #define EVFLAG_AUTO 0 #endif struct my_event_base { struct ub_event_base super; struct event_base* base; }; struct my_event { struct ub_event super; struct event ev; }; #define AS_MY_EVENT_BASE(x) ((struct my_event_base*)x) #define AS_MY_EVENT(x) ((struct my_event*)x) const char* ub_event_get_version(void) { return "pluggable-event"PACKAGE_VERSION; } static void my_event_add_bits(struct ub_event* ev, short bits) { AS_MY_EVENT(ev)->ev.ev_events |= NATIVE_BITS(bits); } static void my_event_del_bits(struct ub_event* ev, short bits) { AS_MY_EVENT(ev)->ev.ev_events &= ~NATIVE_BITS(bits); } static void my_event_set_fd(struct ub_event* ev, int fd) { AS_MY_EVENT(ev)->ev.ev_fd = fd; } static void my_event_free(struct ub_event* ev) { free(AS_MY_EVENT(ev)); } static int my_event_add(struct ub_event* ev, struct timeval* tv) { return event_add(&AS_MY_EVENT(ev)->ev, tv); } static int my_event_del(struct ub_event* ev) { return event_del(&AS_MY_EVENT(ev)->ev); } static int my_timer_add(struct ub_event* ev, struct ub_event_base* base, void (*cb)(int, short, void*), void* arg, struct timeval* tv) { event_set(&AS_MY_EVENT(ev)->ev, -1, EV_TIMEOUT,NATIVE_BITS_CB(cb),arg); if (event_base_set(AS_MY_EVENT_BASE(base)->base, &AS_MY_EVENT(ev)->ev) != 0) return -1; return evtimer_add(&AS_MY_EVENT(ev)->ev, tv); } static int my_timer_del(struct ub_event* ev) { return evtimer_del(&AS_MY_EVENT(ev)->ev); } static int my_signal_add(struct ub_event* ev, struct timeval* tv) { return signal_add(&AS_MY_EVENT(ev)->ev, tv); } static int my_signal_del(struct ub_event* ev) { return signal_del(&AS_MY_EVENT(ev)->ev); } static void my_winsock_unregister_wsaevent(struct ub_event* ev) { #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK) winsock_unregister_wsaevent(&AS_MY_EVENT(ev)->ev); free(AS_MY_EVENT(ev)); #else (void)ev; #endif } static void my_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits) { #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK) winsock_tcp_wouldblock(&AS_MY_EVENT(ev)->ev, NATIVE_BITS(eventbits)); #else (void)ev; (void)eventbits; #endif } static struct ub_event_vmt default_event_vmt = { my_event_add_bits, my_event_del_bits, my_event_set_fd, my_event_free, my_event_add, my_event_del, my_timer_add, my_timer_del, my_signal_add, my_signal_del, my_winsock_unregister_wsaevent, my_winsock_tcp_wouldblock }; static void my_event_base_free(struct ub_event_base* base) { #ifdef USE_MINI_EVENT event_base_free(AS_MY_EVENT_BASE(base)->base); #elif defined(HAVE_EVENT_BASE_FREE) && defined(HAVE_EVENT_BASE_ONCE) /* only libevent 1.2+ has it, but in 1.2 it is broken - assertion fails on signal handling ev that is not deleted in libevent 1.3c (event_base_once appears) this is fixed. */ event_base_free(AS_MY_EVENT_BASE(base)->base); #endif /* HAVE_EVENT_BASE_FREE and HAVE_EVENT_BASE_ONCE */ free(AS_MY_EVENT_BASE(base)); } static int my_event_base_dispatch(struct ub_event_base* base) { return event_base_dispatch(AS_MY_EVENT_BASE(base)->base); } static int my_event_base_loopexit(struct ub_event_base* base, struct timeval* tv) { return event_base_loopexit(AS_MY_EVENT_BASE(base)->base, tv); } static struct ub_event* my_event_new(struct ub_event_base* base, int fd, short bits, void (*cb)(int, short, void*), void* arg) { struct my_event *my_ev = (struct my_event*)calloc(1, sizeof(struct my_event)); if (!my_ev) return NULL; event_set(&my_ev->ev, fd, NATIVE_BITS(bits), NATIVE_BITS_CB(cb), arg); if (event_base_set(AS_MY_EVENT_BASE(base)->base, &my_ev->ev) != 0) { free(my_ev); return NULL; } my_ev->super.magic = UB_EVENT_MAGIC; my_ev->super.vmt = &default_event_vmt; return &my_ev->super; } static struct ub_event* my_signal_new(struct ub_event_base* base, int fd, void (*cb)(int, short, void*), void* arg) { struct my_event *my_ev = (struct my_event*)calloc(1, sizeof(struct my_event)); if (!my_ev) return NULL; signal_set(&my_ev->ev, fd, NATIVE_BITS_CB(cb), arg); if (event_base_set(AS_MY_EVENT_BASE(base)->base, &my_ev->ev) != 0) { free(my_ev); return NULL; } my_ev->super.magic = UB_EVENT_MAGIC; my_ev->super.vmt = &default_event_vmt; return &my_ev->super; } static struct ub_event* my_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent, void (*cb)(int, short, void*), void* arg) { #if defined(USE_MINI_EVENT) && defined(USE_WINSOCK) struct my_event *my_ev = (struct my_event*)calloc(1, sizeof(struct my_event)); if (!my_ev) return NULL; if (!winsock_register_wsaevent(AS_MY_EVENT_BASE(base)->base, &my_ev->ev, wsaevent, cb, arg)) { free(my_ev); return NULL; } my_ev->super.magic = UB_EVENT_MAGIC; my_ev->super.vmt = &default_event_vmt; return &my_ev->super; #else (void)base; (void)wsaevent; (void)cb; (void)arg; return NULL; #endif } static struct ub_event_base_vmt default_event_base_vmt = { my_event_base_free, my_event_base_dispatch, my_event_base_loopexit, my_event_new, my_signal_new, my_winsock_register_wsaevent }; struct ub_event_base* ub_default_event_base(int sigs, time_t* time_secs, struct timeval* time_tv) { struct my_event_base* my_base = (struct my_event_base*)calloc(1, sizeof(struct my_event_base)); if (!my_base) return NULL; #ifdef USE_MINI_EVENT (void)sigs; /* use mini event time-sharing feature */ my_base->base = event_init(time_secs, time_tv); #else (void)time_secs; (void)time_tv; # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP) /* libev */ if(sigs) my_base->base = (struct event_base*)ev_default_loop(EVFLAG_AUTO); else my_base->base = (struct event_base*)ev_loop_new(EVFLAG_AUTO); # else (void)sigs; # ifdef HAVE_EVENT_BASE_NEW my_base->base = event_base_new(); # else my_base->base = event_init(); # endif # endif #endif if (!my_base->base) { free(my_base); return NULL; } my_base->super.magic = UB_EVENT_MAGIC; my_base->super.vmt = &default_event_base_vmt; return &my_base->super; } struct ub_event_base* ub_libevent_event_base(struct event_base* base) { #ifdef USE_MINI_EVENT (void)base; return NULL; #else struct my_event_base* my_base = (struct my_event_base*)calloc(1, sizeof(struct my_event_base)); if (!my_base) return NULL; my_base->super.magic = UB_EVENT_MAGIC; my_base->super.vmt = &default_event_base_vmt; my_base->base = base; return &my_base->super; #endif } struct event_base* ub_libevent_get_event_base(struct ub_event_base* base) { #ifndef USE_MINI_EVENT if (base->vmt == &default_event_base_vmt) return AS_MY_EVENT_BASE(base)->base; #else (void)base; #endif return NULL; } #if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT) static const char* ub_ev_backend2str_pluggable(int b) { switch(b) { case EVBACKEND_SELECT: return "select"; case EVBACKEND_POLL: return "poll"; case EVBACKEND_EPOLL: return "epoll"; case EVBACKEND_KQUEUE: return "kqueue"; case EVBACKEND_DEVPOLL: return "devpoll"; case EVBACKEND_PORT: return "evport"; } return "unknown"; } #endif void ub_get_event_sys(struct ub_event_base* ub_base, const char** n, const char** s, const char** m) { #ifdef USE_WINSOCK (void)ub_base; *n = "pluggable-event"; *s = "winsock"; *m = "WSAWaitForMultipleEvents"; #elif defined(USE_MINI_EVENT) (void)ub_base; *n = "pluggable-event"; *s = "internal"; *m = "select"; #else struct event_base* b = ub_libevent_get_event_base(ub_base); /* This function is only called from comm_base_create, so * ub_base is guaranteed to exist and to be the default * event base. */ assert(b != NULL); *n = "pluggable-event"; *s = event_get_version(); # if defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP) *n = "pluggable-libev"; # ifdef EVBACKEND_SELECT *m = ub_ev_backend2str_pluggable(ev_backend((struct ev_loop*)b)); # else *m = "not obtainable"; # endif # elif defined(HAVE_EVENT_BASE_GET_METHOD) *n = "pluggable-libevent"; *m = event_base_get_method(b); # else *m = "not obtainable"; # endif #endif } void ub_event_base_free(struct ub_event_base* base) { if (base && base->magic == UB_EVENT_MAGIC) { fptr_ok(base->vmt != &default_event_base_vmt || base->vmt->free == my_event_base_free); (*base->vmt->free)(base); } } int ub_event_base_dispatch(struct ub_event_base* base) { if (base->magic == UB_EVENT_MAGIC) { fptr_ok(base->vmt != &default_event_base_vmt || base->vmt->dispatch == my_event_base_dispatch); return (*base->vmt->dispatch)(base); } return -1; } int ub_event_base_loopexit(struct ub_event_base* base) { if (base->magic == UB_EVENT_MAGIC) { fptr_ok(base->vmt != &default_event_base_vmt || base->vmt->loopexit == my_event_base_loopexit); return (*base->vmt->loopexit)(base, NULL); } return -1; } struct ub_event* ub_event_new(struct ub_event_base* base, int fd, short bits, void (*cb)(int, short, void*), void* arg) { if (base->magic == UB_EVENT_MAGIC) { fptr_ok(base->vmt != &default_event_base_vmt || base->vmt->new_event == my_event_new); return (*base->vmt->new_event)(base, fd, bits, cb, arg); } return NULL; } struct ub_event* ub_signal_new(struct ub_event_base* base, int fd, void (*cb)(int, short, void*), void* arg) { if (base->magic == UB_EVENT_MAGIC) { fptr_ok(base->vmt != &default_event_base_vmt || base->vmt->new_signal == my_signal_new); return (*base->vmt->new_signal)(base, fd, cb, arg); } return NULL; } struct ub_event* ub_winsock_register_wsaevent(struct ub_event_base* base, void* wsaevent, void (*cb)(int, short, void*), void* arg) { if (base->magic == UB_EVENT_MAGIC) { fptr_ok(base->vmt != &default_event_base_vmt || base->vmt->winsock_register_wsaevent == my_winsock_register_wsaevent); return (*base->vmt->winsock_register_wsaevent)(base, wsaevent, cb, arg); } return NULL; } void ub_event_add_bits(struct ub_event* ev, short bits) { if (ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->add_bits == my_event_add_bits); (*ev->vmt->add_bits)(ev, bits); } } void ub_event_del_bits(struct ub_event* ev, short bits) { if (ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->del_bits == my_event_del_bits); (*ev->vmt->del_bits)(ev, bits); } } void ub_event_set_fd(struct ub_event* ev, int fd) { if (ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->set_fd == my_event_set_fd); (*ev->vmt->set_fd)(ev, fd); } } void ub_event_free(struct ub_event* ev) { if (ev && ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->free == my_event_free); (*ev->vmt->free)(ev); } } int ub_event_add(struct ub_event* ev, struct timeval* tv) { if (ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->add == my_event_add); return (*ev->vmt->add)(ev, tv); } return -1; } int ub_event_del(struct ub_event* ev) { if (ev && ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->del == my_event_del); return (*ev->vmt->del)(ev); } return -1; } int ub_timer_add(struct ub_event* ev, struct ub_event_base* base, void (*cb)(int, short, void*), void* arg, struct timeval* tv) { if (ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->add_timer == my_timer_add); return (*ev->vmt->add_timer)(ev, base, cb, arg, tv); } return -1; } int ub_timer_del(struct ub_event* ev) { if (ev && ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->del_timer == my_timer_del); return (*ev->vmt->del_timer)(ev); } return -1; } int ub_signal_add(struct ub_event* ev, struct timeval* tv) { if (ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->add_signal == my_signal_add); return (*ev->vmt->add_signal)(ev, tv); } return -1; } int ub_signal_del(struct ub_event* ev) { if (ev && ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->del_signal == my_signal_del); return (*ev->vmt->del_signal)(ev); } return -1; } void ub_winsock_unregister_wsaevent(struct ub_event* ev) { if (ev && ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->winsock_unregister_wsaevent == my_winsock_unregister_wsaevent); (*ev->vmt->winsock_unregister_wsaevent)(ev); } } void ub_winsock_tcp_wouldblock(struct ub_event* ev, int eventbits) { if (ev->magic == UB_EVENT_MAGIC) { fptr_ok(ev->vmt != &default_event_vmt || ev->vmt->winsock_tcp_wouldblock == my_winsock_tcp_wouldblock); (*ev->vmt->winsock_tcp_wouldblock)(ev, eventbits); } } void ub_comm_base_now(struct comm_base* cb) { time_t *tt; struct timeval *tv; #ifdef USE_MINI_EVENT /** minievent updates the time when it blocks. */ if (comm_base_internal(cb)->magic == UB_EVENT_MAGIC && comm_base_internal(cb)->vmt == &default_event_base_vmt) return; /* Actually using mini event, so do not set time */ #endif /* USE_MINI_EVENT */ /** fillup the time values in the event base */ comm_base_timept(cb, &tt, &tv); if(gettimeofday(tv, NULL) < 0) { log_err("gettimeofday: %s", strerror(errno)); } #ifndef S_SPLINT_S *tt = tv->tv_sec; #endif } unbound-1.13.1/util/winsock_event.c0000644000175000017500000005224614010434640016707 0ustar wouterwouter/* * util/winsock_event.c - implementation of the unbound winsock event handler. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Implementation of the unbound WinSock2 API event notification handler * for the Windows port. */ #include "config.h" #ifdef USE_WINSOCK #include #ifdef HAVE_TIME_H #include #endif #include #include "util/winsock_event.h" #include "util/fptr_wlist.h" int mini_ev_cmp(const void* a, const void* b) { const struct event *e = (const struct event*)a; const struct event *f = (const struct event*)b; if(e->ev_timeout.tv_sec < f->ev_timeout.tv_sec) return -1; if(e->ev_timeout.tv_sec > f->ev_timeout.tv_sec) return 1; if(e->ev_timeout.tv_usec < f->ev_timeout.tv_usec) return -1; if(e->ev_timeout.tv_usec > f->ev_timeout.tv_usec) return 1; if(e < f) return -1; if(e > f) return 1; return 0; } /** set time */ static int settime(struct event_base* base) { if(gettimeofday(base->time_tv, NULL) < 0) { return -1; } #ifndef S_SPLINT_S *base->time_secs = (time_t)base->time_tv->tv_sec; #endif return 0; } #ifdef UNBOUND_DEBUG /** * Find a fd in the list of items. * Note that not all items have a fd associated (those are -1). * Signals are stored separately, and not searched. * @param base: event base to look in. * @param fd: what socket to look for. * @return the index in the array, or -1 on failure. */ static int find_fd(struct event_base* base, int fd) { int i; for(i=0; imax; i++) { if(base->items[i]->ev_fd == fd) return i; } return -1; } #endif /** Find ptr in base array */ static void zero_waitfor(WSAEVENT waitfor[], WSAEVENT x) { int i; for(i=0; itime_secs = time_secs; base->time_tv = time_tv; if(settime(base) < 0) { event_base_free(base); return NULL; } base->items = (struct event**)calloc(WSK_MAX_ITEMS, sizeof(struct event*)); if(!base->items) { event_base_free(base); return NULL; } base->cap = WSK_MAX_ITEMS; base->max = 0; base->times = rbtree_create(mini_ev_cmp); if(!base->times) { event_base_free(base); return NULL; } base->signals = (struct event**)calloc(MAX_SIG, sizeof(struct event*)); if(!base->signals) { event_base_free(base); return NULL; } base->tcp_stickies = 0; base->tcp_reinvigorated = 0; verbose(VERB_CLIENT, "winsock_event inited"); return base; } const char *event_get_version(void) { return "winsock-event-"PACKAGE_VERSION; } const char *event_get_method(void) { return "WSAWaitForMultipleEvents"; } /** call timeouts handlers, and return how long to wait for next one or -1 */ static void handle_timeouts(struct event_base* base, struct timeval* now, struct timeval* wait) { struct event* p; #ifndef S_SPLINT_S wait->tv_sec = (time_t)-1; #endif verbose(VERB_CLIENT, "winsock_event handle_timeouts"); while((rbnode_type*)(p = (struct event*)rbtree_first(base->times)) !=RBTREE_NULL) { #ifndef S_SPLINT_S if(p->ev_timeout.tv_sec > now->tv_sec || (p->ev_timeout.tv_sec==now->tv_sec && p->ev_timeout.tv_usec > now->tv_usec)) { /* there is a next larger timeout. wait for it */ wait->tv_sec = p->ev_timeout.tv_sec - now->tv_sec; if(now->tv_usec > p->ev_timeout.tv_usec) { wait->tv_sec--; wait->tv_usec = 1000000 - (now->tv_usec - p->ev_timeout.tv_usec); } else { wait->tv_usec = p->ev_timeout.tv_usec - now->tv_usec; } verbose(VERB_CLIENT, "winsock_event wait=" ARG_LL "d.%6.6d", (long long)wait->tv_sec, (int)wait->tv_usec); return; } #endif /* event times out, remove it */ (void)rbtree_delete(base->times, p); p->ev_events &= ~EV_TIMEOUT; fptr_ok(fptr_whitelist_event(p->ev_callback)); (*p->ev_callback)(p->ev_fd, EV_TIMEOUT, p->ev_arg); } verbose(VERB_CLIENT, "winsock_event wait=(-1)"); } /** handle is_signal events and see if signalled */ static void handle_signal(struct event* ev) { DWORD ret; log_assert(ev->is_signal && ev->hEvent); /* see if the event is signalled */ ret = WSAWaitForMultipleEvents(1, &ev->hEvent, 0 /* any object */, 0 /* return immediately */, 0 /* not alertable for IOcomple*/); if(ret == WSA_WAIT_IO_COMPLETION || ret == WSA_WAIT_FAILED) { log_err("WSAWaitForMultipleEvents(signal) failed: %s", wsa_strerror(WSAGetLastError())); return; } if(ret == WSA_WAIT_TIMEOUT) { /* not signalled */ return; } /* reset the signal */ if(!WSAResetEvent(ev->hEvent)) log_err("WSAResetEvent failed: %s", wsa_strerror(WSAGetLastError())); /* do the callback (which may set the signal again) */ fptr_ok(fptr_whitelist_event(ev->ev_callback)); (*ev->ev_callback)(ev->ev_fd, ev->ev_events, ev->ev_arg); } /** call select and callbacks for that */ static int handle_select(struct event_base* base, struct timeval* wait) { DWORD timeout = 0; /* in milliseconds */ DWORD ret; struct event* eventlist[WSK_MAX_ITEMS]; WSANETWORKEVENTS netev; int i, numwait = 0, startidx = 0, was_timeout = 0; int newstickies = 0; struct timeval nultm; verbose(VERB_CLIENT, "winsock_event handle_select"); #ifndef S_SPLINT_S if(wait->tv_sec==(time_t)-1) wait = NULL; if(wait) timeout = wait->tv_sec*1000 + wait->tv_usec/1000; if(base->tcp_stickies) { wait = &nultm; nultm.tv_sec = 0; nultm.tv_usec = 0; timeout = 0; /* no waiting, we have sticky events */ } #endif /* prepare event array */ for(i=0; imax; i++) { if(base->items[i]->ev_fd == -1 && !base->items[i]->is_signal) continue; /* skip timer only events */ eventlist[numwait] = base->items[i]; base->waitfor[numwait++] = base->items[i]->hEvent; if(numwait == WSK_MAX_ITEMS) break; /* sanity check */ } log_assert(numwait <= WSA_MAXIMUM_WAIT_EVENTS); verbose(VERB_CLIENT, "winsock_event bmax=%d numwait=%d wait=%s " "timeout=%d", base->max, numwait, (wait?"":""), (int)timeout); /* do the wait */ if(numwait == 0) { /* WSAWaitFor.. doesn't like 0 event objects */ if(wait) { Sleep(timeout); } was_timeout = 1; } else { ret = WSAWaitForMultipleEvents(numwait, base->waitfor, 0 /* do not wait for all, just one will do */, wait?timeout:WSA_INFINITE, 0); /* we are not alertable (IO completion events) */ if(ret == WSA_WAIT_IO_COMPLETION) { log_err("WSAWaitForMultipleEvents failed: WSA_WAIT_IO_COMPLETION"); return -1; } else if(ret == WSA_WAIT_FAILED) { log_err("WSAWaitForMultipleEvents failed: %s", wsa_strerror(WSAGetLastError())); return -1; } else if(ret == WSA_WAIT_TIMEOUT) { was_timeout = 1; } else startidx = ret - WSA_WAIT_EVENT_0; } verbose(VERB_CLIENT, "winsock_event wake was_timeout=%d startidx=%d", was_timeout, startidx); /* get new time after wait */ if(settime(base) < 0) return -1; /* callbacks */ if(base->tcp_stickies) startidx = 0; /* process all events, some are sticky */ for(i=startidx; ijust_checked = 1; verbose(VERB_CLIENT, "winsock_event signals"); for(i=startidx; iwaitfor[i]) continue; /* was deleted */ if(eventlist[i]->is_signal) { eventlist[i]->just_checked = 0; handle_signal(eventlist[i]); } } /* early exit - do not process network, exit quickly */ if(base->need_to_exit) return 0; verbose(VERB_CLIENT, "winsock_event net"); for(i=startidx; iwaitfor[i]) continue; /* was deleted */ if(!eventlist[i]->just_checked) continue; /* added by other callback */ if(eventlist[i]->is_signal) continue; /* not a network event at all */ eventlist[i]->just_checked = 0; if(WSAEnumNetworkEvents(eventlist[i]->ev_fd, base->waitfor[i], /* reset the event handle */ /*NULL,*/ /* do not reset the event handle */ &netev) != 0) { log_err("WSAEnumNetworkEvents failed: %s", wsa_strerror(WSAGetLastError())); return -1; } if((netev.lNetworkEvents & FD_READ)) { if(netev.iErrorCode[FD_READ_BIT] != 0) verbose(VERB_ALGO, "FD_READ_BIT error: %s", wsa_strerror(netev.iErrorCode[FD_READ_BIT])); bits |= EV_READ; } if((netev.lNetworkEvents & FD_WRITE)) { if(netev.iErrorCode[FD_WRITE_BIT] != 0) verbose(VERB_ALGO, "FD_WRITE_BIT error: %s", wsa_strerror(netev.iErrorCode[FD_WRITE_BIT])); bits |= EV_WRITE; } if((netev.lNetworkEvents & FD_CONNECT)) { if(netev.iErrorCode[FD_CONNECT_BIT] != 0) verbose(VERB_ALGO, "FD_CONNECT_BIT error: %s", wsa_strerror(netev.iErrorCode[FD_CONNECT_BIT])); bits |= EV_READ; bits |= EV_WRITE; } if((netev.lNetworkEvents & FD_ACCEPT)) { if(netev.iErrorCode[FD_ACCEPT_BIT] != 0) verbose(VERB_ALGO, "FD_ACCEPT_BIT error: %s", wsa_strerror(netev.iErrorCode[FD_ACCEPT_BIT])); bits |= EV_READ; } if((netev.lNetworkEvents & FD_CLOSE)) { if(netev.iErrorCode[FD_CLOSE_BIT] != 0) verbose(VERB_ALGO, "FD_CLOSE_BIT error: %s", wsa_strerror(netev.iErrorCode[FD_CLOSE_BIT])); bits |= EV_READ; bits |= EV_WRITE; } if(eventlist[i]->is_tcp && eventlist[i]->stick_events) { verbose(VERB_ALGO, "winsock %d pass sticky %s%s", eventlist[i]->ev_fd, (eventlist[i]->old_events&EV_READ)?"EV_READ":"", (eventlist[i]->old_events&EV_WRITE)?"EV_WRITE":""); bits |= eventlist[i]->old_events; } if(eventlist[i]->is_tcp && bits) { eventlist[i]->old_events = bits; eventlist[i]->stick_events = 1; if((eventlist[i]->ev_events & bits)) { newstickies = 1; } verbose(VERB_ALGO, "winsock %d store sticky %s%s", eventlist[i]->ev_fd, (eventlist[i]->old_events&EV_READ)?"EV_READ":"", (eventlist[i]->old_events&EV_WRITE)?"EV_WRITE":""); } if((bits & eventlist[i]->ev_events)) { verbose(VERB_ALGO, "winsock event callback %p fd=%d " "%s%s%s%s%s ; %s%s%s", eventlist[i], eventlist[i]->ev_fd, (netev.lNetworkEvents&FD_READ)?" FD_READ":"", (netev.lNetworkEvents&FD_WRITE)?" FD_WRITE":"", (netev.lNetworkEvents&FD_CONNECT)? " FD_CONNECT":"", (netev.lNetworkEvents&FD_ACCEPT)? " FD_ACCEPT":"", (netev.lNetworkEvents&FD_CLOSE)?" FD_CLOSE":"", (bits&EV_READ)?" EV_READ":"", (bits&EV_WRITE)?" EV_WRITE":"", (bits&EV_TIMEOUT)?" EV_TIMEOUT":""); fptr_ok(fptr_whitelist_event( eventlist[i]->ev_callback)); (*eventlist[i]->ev_callback)(eventlist[i]->ev_fd, bits & eventlist[i]->ev_events, eventlist[i]->ev_arg); } if(eventlist[i]->is_tcp && bits) verbose(VERB_ALGO, "winsock %d got sticky %s%s", eventlist[i]->ev_fd, (eventlist[i]->old_events&EV_READ)?"EV_READ":"", (eventlist[i]->old_events&EV_WRITE)?"EV_WRITE":""); } verbose(VERB_CLIENT, "winsock_event net"); if(base->tcp_reinvigorated) { verbose(VERB_CLIENT, "winsock_event reinvigorated"); base->tcp_reinvigorated = 0; newstickies = 1; } base->tcp_stickies = newstickies; verbose(VERB_CLIENT, "winsock_event handle_select end"); return 0; } int event_base_dispatch(struct event_base *base) { struct timeval wait; if(settime(base) < 0) return -1; while(!base->need_to_exit) { /* see if timeouts need handling */ handle_timeouts(base, base->time_tv, &wait); if(base->need_to_exit) return 0; /* do select */ if(handle_select(base, &wait) < 0) { if(base->need_to_exit) return 0; return -1; } } return 0; } int event_base_loopexit(struct event_base *base, struct timeval * ATTR_UNUSED(tv)) { verbose(VERB_CLIENT, "winsock_event loopexit"); base->need_to_exit = 1; return 0; } void event_base_free(struct event_base *base) { verbose(VERB_CLIENT, "winsock_event event_base_free"); if(!base) return; free(base->items); free(base->times); free(base->signals); free(base); } void event_set(struct event *ev, int fd, short bits, void (*cb)(int, short, void *), void *arg) { ev->node.key = ev; ev->ev_fd = fd; ev->ev_events = bits; ev->ev_callback = cb; fptr_ok(fptr_whitelist_event(ev->ev_callback)); ev->ev_arg = arg; ev->just_checked = 0; ev->added = 0; } int event_base_set(struct event_base *base, struct event *ev) { ev->ev_base = base; ev->old_events = 0; ev->stick_events = 0; ev->added = 0; return 0; } int event_add(struct event *ev, struct timeval *tv) { verbose(VERB_ALGO, "event_add %p added=%d fd=%d tv=" ARG_LL "d %s%s%s", ev, ev->added, ev->ev_fd, (tv?(long long)tv->tv_sec*1000+(long long)tv->tv_usec/1000:-1), (ev->ev_events&EV_READ)?" EV_READ":"", (ev->ev_events&EV_WRITE)?" EV_WRITE":"", (ev->ev_events&EV_TIMEOUT)?" EV_TIMEOUT":""); if(ev->added) event_del(ev); log_assert(ev->ev_fd==-1 || find_fd(ev->ev_base, ev->ev_fd) == -1); ev->is_tcp = 0; ev->is_signal = 0; ev->just_checked = 0; if((ev->ev_events&(EV_READ|EV_WRITE)) && ev->ev_fd != -1) { BOOL b=0; int t, l; long events = 0; if(ev->ev_base->max == ev->ev_base->cap) return -1; ev->idx = ev->ev_base->max++; ev->ev_base->items[ev->idx] = ev; if( (ev->ev_events&EV_READ) ) events |= FD_READ; if( (ev->ev_events&EV_WRITE) ) events |= FD_WRITE; l = sizeof(t); if(getsockopt(ev->ev_fd, SOL_SOCKET, SO_TYPE, (void*)&t, &l) != 0) log_err("getsockopt(SO_TYPE) failed: %s", wsa_strerror(WSAGetLastError())); if(t == SOCK_STREAM) { /* TCP socket */ ev->is_tcp = 1; events |= FD_CLOSE; if( (ev->ev_events&EV_WRITE) ) events |= FD_CONNECT; l = sizeof(b); if(getsockopt(ev->ev_fd, SOL_SOCKET, SO_ACCEPTCONN, (void*)&b, &l) != 0) log_err("getsockopt(SO_ACCEPTCONN) failed: %s", wsa_strerror(WSAGetLastError())); if(b) /* TCP accept socket */ events |= FD_ACCEPT; } ev->hEvent = WSACreateEvent(); if(ev->hEvent == WSA_INVALID_EVENT) log_err("WSACreateEvent failed: %s", wsa_strerror(WSAGetLastError())); /* automatically sets fd to nonblocking mode. * nonblocking cannot be disabled, until wsaES(fd, NULL, 0) */ if(WSAEventSelect(ev->ev_fd, ev->hEvent, events) != 0) { log_err("WSAEventSelect failed: %s", wsa_strerror(WSAGetLastError())); } if(ev->is_tcp && ev->stick_events && (ev->ev_events & ev->old_events)) { /* go to processing the sticky event right away */ ev->ev_base->tcp_reinvigorated = 1; } } if(tv && (ev->ev_events&EV_TIMEOUT)) { #ifndef S_SPLINT_S struct timeval *now = ev->ev_base->time_tv; ev->ev_timeout.tv_sec = tv->tv_sec + now->tv_sec; ev->ev_timeout.tv_usec = tv->tv_usec + now->tv_usec; while(ev->ev_timeout.tv_usec >= 1000000) { ev->ev_timeout.tv_usec -= 1000000; ev->ev_timeout.tv_sec++; } #endif (void)rbtree_insert(ev->ev_base->times, &ev->node); } ev->added = 1; return 0; } int event_del(struct event *ev) { verbose(VERB_ALGO, "event_del %p added=%d fd=%d tv=" ARG_LL "d %s%s%s", ev, ev->added, ev->ev_fd, (ev->ev_events&EV_TIMEOUT)?(long long)ev->ev_timeout.tv_sec*1000+ (long long)ev->ev_timeout.tv_usec/1000:-1, (ev->ev_events&EV_READ)?" EV_READ":"", (ev->ev_events&EV_WRITE)?" EV_WRITE":"", (ev->ev_events&EV_TIMEOUT)?" EV_TIMEOUT":""); if(!ev->added) return 0; log_assert(ev->added); if((ev->ev_events&EV_TIMEOUT)) (void)rbtree_delete(ev->ev_base->times, &ev->node); if((ev->ev_events&(EV_READ|EV_WRITE)) && ev->ev_fd != -1) { log_assert(ev->ev_base->max > 0); /* remove item and compact the list */ ev->ev_base->items[ev->idx] = ev->ev_base->items[ev->ev_base->max-1]; ev->ev_base->items[ev->ev_base->max-1] = NULL; ev->ev_base->max--; if(ev->idx < ev->ev_base->max) ev->ev_base->items[ev->idx]->idx = ev->idx; zero_waitfor(ev->ev_base->waitfor, ev->hEvent); if(WSAEventSelect(ev->ev_fd, ev->hEvent, 0) != 0) log_err("WSAEventSelect(disable) failed: %s", wsa_strerror(WSAGetLastError())); if(!WSACloseEvent(ev->hEvent)) log_err("WSACloseEvent failed: %s", wsa_strerror(WSAGetLastError())); } ev->just_checked = 0; ev->added = 0; return 0; } /** which base gets to handle signals */ static struct event_base* signal_base = NULL; /** signal handler */ static RETSIGTYPE sigh(int sig) { struct event* ev; if(!signal_base || sig < 0 || sig >= MAX_SIG) return; ev = signal_base->signals[sig]; if(!ev) return; fptr_ok(fptr_whitelist_event(ev->ev_callback)); (*ev->ev_callback)(sig, EV_SIGNAL, ev->ev_arg); } int signal_add(struct event *ev, struct timeval * ATTR_UNUSED(tv)) { if(ev->ev_fd == -1 || ev->ev_fd >= MAX_SIG) return -1; signal_base = ev->ev_base; ev->ev_base->signals[ev->ev_fd] = ev; ev->added = 1; if(signal(ev->ev_fd, sigh) == SIG_ERR) { return -1; } return 0; } int signal_del(struct event *ev) { if(ev->ev_fd == -1 || ev->ev_fd >= MAX_SIG) return -1; ev->ev_base->signals[ev->ev_fd] = NULL; ev->added = 0; return 0; } void winsock_tcp_wouldblock(struct event* ev, int eventbits) { verbose(VERB_ALGO, "winsock: tcp wouldblock %s", eventbits==EV_READ?"EV_READ":"EV_WRITE"); ev->old_events &= (~eventbits); if(ev->old_events == 0) ev->stick_events = 0; /* in case this is the last sticky event, we could * possibly run an empty handler loop to reset the base * tcp_stickies variable */ } int winsock_register_wsaevent(struct event_base* base, struct event* ev, WSAEVENT wsaevent, void (*cb)(int, short, void*), void* arg) { if(base->max == base->cap) return 0; memset(ev, 0, sizeof(*ev)); ev->ev_fd = -1; ev->ev_events = EV_READ; ev->ev_callback = cb; ev->ev_arg = arg; ev->is_signal = 1; ev->hEvent = wsaevent; ev->added = 1; ev->ev_base = base; ev->idx = ev->ev_base->max++; ev->ev_base->items[ev->idx] = ev; return 1; } void winsock_unregister_wsaevent(struct event* ev) { if(!ev || !ev->added) return; log_assert(ev->added && ev->ev_base->max > 0) /* remove item and compact the list */ ev->ev_base->items[ev->idx] = ev->ev_base->items[ev->ev_base->max-1]; ev->ev_base->items[ev->ev_base->max-1] = NULL; ev->ev_base->max--; if(ev->idx < ev->ev_base->max) ev->ev_base->items[ev->idx]->idx = ev->idx; ev->added = 0; } #else /* USE_WINSOCK */ /** symbol so this codefile defines symbols. pleasing ranlib on OSX 10.5 */ int winsock_unused_symbol = 1; #endif /* USE_WINSOCK */ unbound-1.13.1/util/rbtree.h0000644000175000017500000001436014010434640015314 0ustar wouterwouter/* * rbtree.h -- generic red-black tree * * Copyright (c) 2001-2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Red black tree. Implementation taken from NSD 3.0.5, adjusted for use * in unbound (memory allocation, logging and so on). */ #ifndef UTIL_RBTREE_H_ #define UTIL_RBTREE_H_ /** * This structure must be the first member of the data structure in * the rbtree. This allows easy casting between an rbnode_type and the * user data (poor man's inheritance). */ typedef struct rbnode_type rbnode_type; /** * The rbnode_type struct definition. */ struct rbnode_type { /** parent in rbtree, RBTREE_NULL for root */ rbnode_type *parent; /** left node (smaller items) */ rbnode_type *left; /** right node (larger items) */ rbnode_type *right; /** pointer to sorting key */ const void *key; /** colour of this node */ uint8_t color; }; /** The nullpointer, points to empty node */ #define RBTREE_NULL &rbtree_null_node /** the global empty node */ extern rbnode_type rbtree_null_node; /** An entire red black tree */ typedef struct rbtree_type rbtree_type; /** definition for tree struct */ struct rbtree_type { /** The root of the red-black tree */ rbnode_type *root; /** The number of the nodes in the tree */ size_t count; /** * Key compare function. <0,0,>0 like strcmp. * Return 0 on two NULL ptrs. */ int (*cmp) (const void *, const void *); }; /** * Create new tree (malloced) with given key compare function. * @param cmpf: compare function (like strcmp) takes pointers to two keys. * @return: new tree, empty. */ rbtree_type *rbtree_create(int (*cmpf)(const void *, const void *)); /** * Init a new tree (malloced by caller) with given key compare function. * @param rbtree: uninitialised memory for new tree, returned empty. * @param cmpf: compare function (like strcmp) takes pointers to two keys. */ void rbtree_init(rbtree_type *rbtree, int (*cmpf)(const void *, const void *)); /** * Insert data into the tree. * @param rbtree: tree to insert to. * @param data: element to insert. * @return: data ptr or NULL if key already present. */ rbnode_type *rbtree_insert(rbtree_type *rbtree, rbnode_type *data); /** * Delete element from tree. * @param rbtree: tree to delete from. * @param key: key of item to delete. * @return: node that is now unlinked from the tree. User to delete it. * returns 0 if node not present */ rbnode_type *rbtree_delete(rbtree_type *rbtree, const void *key); /** * Find key in tree. Returns NULL if not found. * @param rbtree: tree to find in. * @param key: key that must match. * @return: node that fits or NULL. */ rbnode_type *rbtree_search(rbtree_type *rbtree, const void *key); /** * Find, but match does not have to be exact. * @param rbtree: tree to find in. * @param key: key to find position of. * @param result: set to the exact node if present, otherwise to element that * precedes the position of key in the tree. NULL if no smaller element. * @return: true if exact match in result. Else result points to <= element, * or NULL if key is smaller than the smallest key. */ int rbtree_find_less_equal(rbtree_type *rbtree, const void *key, rbnode_type **result); /** * Returns first (smallest) node in the tree * @param rbtree: tree * @return: smallest element or NULL if tree empty. */ rbnode_type *rbtree_first(rbtree_type *rbtree); /** * Returns last (largest) node in the tree * @param rbtree: tree * @return: largest element or NULL if tree empty. */ rbnode_type *rbtree_last(rbtree_type *rbtree); /** * Returns next larger node in the tree * @param rbtree: tree * @return: next larger element or NULL if no larger in tree. */ rbnode_type *rbtree_next(rbnode_type *rbtree); /** * Returns previous smaller node in the tree * @param rbtree: tree * @return: previous smaller element or NULL if no previous in tree. */ rbnode_type *rbtree_previous(rbnode_type *rbtree); /** * Call with node=variable of struct* with rbnode_type as first element. * with type is the type of a pointer to that struct. */ #define RBTREE_FOR(node, type, rbtree) \ for(node=(type)rbtree_first(rbtree); \ (rbnode_type*)node != RBTREE_NULL; \ node = (type)rbtree_next((rbnode_type*)node)) /** * Call function for all elements in the redblack tree, such that * leaf elements are called before parent elements. So that all * elements can be safely free()d. * Note that your function must not remove the nodes from the tree. * Since that may trigger rebalances of the rbtree. * @param tree: the tree * @param func: function called with element and user arg. * The function must not alter the rbtree. * @param arg: user argument. */ void traverse_postorder(rbtree_type* tree, void (*func)(rbnode_type*, void*), void* arg); #endif /* UTIL_RBTREE_H_ */ unbound-1.13.1/util/module.h0000644000175000017500000007660714010434640015332 0ustar wouterwouter/* * util/module.h - DNS handling module interface * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the interface for DNS handling modules. * * The module interface uses the DNS modules as state machines. The * state machines are activated in sequence to operate on queries. Once * they are done, the reply is passed back. In the usual setup the mesh * is the caller of the state machines and once things are done sends replies * and invokes result callbacks. * * The module provides a number of functions, listed in the module_func_block. * The module is inited and destroyed and memory usage queries, for the * module as a whole, for entire-module state (such as a cache). And per-query * functions are called, operate to move the state machine and cleanup of * the per-query state. * * Most per-query state should simply be allocated in the query region. * This is destroyed at the end of the query. * * The module environment contains services and information and caches * shared by the modules and the rest of the system. It also contains * function pointers for module-specific tasks (like sending queries). * * *** Example module calls for a normal query * * In this example, the query does not need recursion, all the other data * can be found in the cache. This makes the example shorter. * * At the start of the program the iterator module is initialised. * The iterator module sets up its global state, such as donotquery lists * and private address trees. * * A query comes in, and a mesh entry is created for it. The mesh * starts the resolution process. The validator module is the first * in the list of modules, and it is started on this new query. The * operate() function is called. The validator decides it needs not do * anything yet until there is a result and returns wait_module, that * causes the next module in the list to be started. * * The next module is the iterator. It is started on the passed query and * decides to perform a lookup. For this simple example, the delegation * point information is available, and all the iterator wants to do is * send a UDP query. The iterator uses env.send_query() to send the * query. Then the iterator suspends (returns from the operate call). * * When the UDP reply comes back (and on errors and timeouts), the * operate function is called for the query, on the iterator module, * with the event that there is a reply. The iterator decides that this * is enough, the work is done. It returns the value finished from the * operate call, which causes the previous module to be started. * * The previous module, the validator module, is started with the event * that the iterator module is done. The validator decides to validate * the query. Once it is done (which could take recursive lookups, but * in this example no recursive lookups are needed), it returns from the * operate function with finished. * * There is no previous module from the validator module, and the mesh * takes this to mean that the query is finally done. The mesh invokes * callbacks and sends packets to queriers. * * If other modules had been waiting (recursively) on the answer to this * query, then the mesh will tell them about it. It calls the inform_super * routine on all the waiting modules, and once that is done it calls all of * them with the operate() call. During inform_super the query that is done * still exists and information can be copied from it (but the module should * not really re-entry codepoints and services). During the operate call * the modules can use stored state to continue operation with the results. * (network buffers are used to contain the answer packet during the * inform_super phase, but after that the network buffers will be cleared * of their contents so that other tasks can be performed). * * *** Example module calls for recursion * * A module is called in operate, and it decides that it wants to perform * recursion. That is, it wants the full state-machine-list to operate on * a different query. It calls env.attach_sub() to create a new query state. * The routine returns the newly created state, and potentially the module * can edit the module-states for the newly created query (i.e. pass along * some information, like delegation points). The module then suspends, * returns from the operate routine. * * The mesh meanwhile will have the newly created query (or queries) on * a waiting list, and will call operate() on this query (or queries). * It starts again at the start of the module list for them. The query * (or queries) continue to operate their state machines, until they are * done. When they are done the mesh calls inform_super on the module that * wanted the recursion. After that the mesh calls operate() on the module * that wanted to do the recursion, and during this phase the module could, * for example, decide to create more recursions. * * If the module decides it no longer wants the recursive information * it can call detach_subs. Those queries will still run to completion, * potentially filling the cache with information. Inform_super is not * called any more. * * The iterator module will fetch items from the cache, so a recursion * attempt may complete very quickly if the item is in cache. The calling * module has to wait for completion or eventual timeout. A recursive query * that times out returns a servfail rcode (servfail is also returned for * other errors during the lookup). * * Results are passed in the qstate, the rcode member is used to pass * errors without requiring memory allocation, so that the code can continue * in out-of-memory conditions. If the rcode member is 0 (NOERROR) then * the dns_msg entry contains a filled out message. This message may * also contain an rcode that is nonzero, but in this case additional * information (query, additional) can be passed along. * * The rcode and dns_msg are used to pass the result from the the rightmost * module towards the leftmost modules and then towards the user. * * If you want to avoid recursion-cycles where queries need other queries * that need the first one, use detect_cycle() to see if that will happen. * */ #ifndef UTIL_MODULE_H #define UTIL_MODULE_H #include "util/storage/lruhash.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" struct sldns_buffer; struct alloc_cache; struct rrset_cache; struct key_cache; struct config_file; struct slabhash; struct query_info; struct edns_data; struct regional; struct worker; struct comm_base; struct auth_zones; struct outside_network; struct module_qstate; struct ub_randstate; struct mesh_area; struct mesh_state; struct val_anchors; struct val_neg_cache; struct iter_forwards; struct iter_hints; struct respip_set; struct respip_client_info; struct respip_addr_info; /** Maximum number of modules in operation */ #define MAX_MODULE 16 /** Maximum number of known edns options */ #define MAX_KNOWN_EDNS_OPTS 256 enum inplace_cb_list_type { /* Inplace callbacks for when a resolved reply is ready to be sent to the * front.*/ inplace_cb_reply = 0, /* Inplace callbacks for when a reply is given from the cache. */ inplace_cb_reply_cache, /* Inplace callbacks for when a reply is given with local data * (or Chaos reply). */ inplace_cb_reply_local, /* Inplace callbacks for when the reply is servfail. */ inplace_cb_reply_servfail, /* Inplace callbacks for when a query is ready to be sent to the back.*/ inplace_cb_query, /* Inplace callback for when a reply is received from the back. */ inplace_cb_query_response, /* Inplace callback for when EDNS is parsed on a reply received from the * back. */ inplace_cb_edns_back_parsed, /* Total number of types. Used for array initialization. * Should always be last. */ inplace_cb_types_total }; /** Known edns option. Can be populated during modules' init. */ struct edns_known_option { /** type of this edns option */ uint16_t opt_code; /** whether the option needs to bypass the cache stage */ int bypass_cache_stage; /** whether the option needs mesh aggregation */ int no_aggregation; }; /** * Inplace callback list of registered routines to be called. */ struct inplace_cb { /** next in list */ struct inplace_cb* next; /** Inplace callback routine */ void* cb; void* cb_arg; /** module id */ int id; }; /** * Inplace callback function called before replying. * Called as func(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, * region, id, python_callback) * Where: * qinfo: the query info. * qstate: the module state. NULL when calling before the query reaches the * mesh states. * rep: reply_info. Could be NULL. * rcode: the return code. * edns: the edns_data of the reply. When qstate is NULL, it is also used as * the edns input. * opt_list_out: the edns options list for the reply. * repinfo: reply information for a communication point. NULL when calling * during the mesh states; the same could be found from * qstate->mesh_info->reply_list. * region: region to store data. * id: module id. * python_callback: only used for registering a python callback function. */ typedef int inplace_cb_reply_func_type(struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct edns_option** opt_list_out, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time, int id, void* callback); /** * Inplace callback function called before sending the query to a nameserver. * Called as func(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, * id, python_callback) * Where: * qinfo: query info. * flags: flags of the query. * qstate: query state. * addr: to which server to send the query. * addrlen: length of addr. * zone: name of the zone of the delegation point. wireformat dname. * This is the delegation point name for which the server is deemed * authoritative. * zonelen: length of zone. * region: region to store data. * id: module id. * python_callback: only used for registering a python callback function. */ typedef int inplace_cb_query_func_type(struct query_info* qinfo, uint16_t flags, struct module_qstate* qstate, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region, int id, void* callback); /** * Inplace callback function called after parsing edns on query reply. * Called as func(qstate, id, cb_args) * Where: * qstate: the query state. * id: module id. * cb_args: argument passed when registering callback. */ typedef int inplace_cb_edns_back_parsed_func_type(struct module_qstate* qstate, int id, void* cb_args); /** * Inplace callback function called after parsing query response. * Called as func(qstate, response, id, cb_args) * Where: * qstate: the query state. * response: query response. * id: module id. * cb_args: argument passed when registering callback. */ typedef int inplace_cb_query_response_func_type(struct module_qstate* qstate, struct dns_msg* response, int id, void* cb_args); /** * Function called when looking for (expired) cached answers during the serve * expired logic. * Called as func(qstate, lookup_qinfo) * Where: * qstate: the query state. * lookup_qinfo: the qinfo to lookup for. */ typedef struct dns_msg* serve_expired_lookup_func_type( struct module_qstate* qstate, struct query_info* lookup_qinfo); /** * Module environment. * Services and data provided to the module. */ struct module_env { /* --- data --- */ /** config file with config options */ struct config_file* cfg; /** shared message cache */ struct slabhash* msg_cache; /** shared rrset cache */ struct rrset_cache* rrset_cache; /** shared infrastructure cache (edns, lameness) */ struct infra_cache* infra_cache; /** shared key cache */ struct key_cache* key_cache; /* --- services --- */ /** * Send serviced DNS query to server. UDP/TCP and EDNS is handled. * operate() should return with wait_reply. Later on a callback * will cause operate() to be called with event timeout or reply. * The time until a timeout is calculated from roundtrip timing, * several UDP retries are attempted. * @param qinfo: query info. * @param flags: host order flags word, with opcode and CD bit. * @param dnssec: if set, EDNS record will have bits set. * If EDNS_DO bit is set, DO bit is set in EDNS records. * If BIT_CD is set, CD bit is set in queries with EDNS records. * @param want_dnssec: if set, the validator wants DNSSEC. Without * EDNS, the answer is likely to be useless for this domain. * @param nocaps: do not use caps_for_id, use the qname as given. * (ignored if caps_for_id is disabled). * @param addr: where to. * @param addrlen: length of addr. * @param zone: delegation point name. * @param zonelen: length of zone name. * @param ssl_upstream: use SSL for upstream queries. * @param tls_auth_name: if ssl_upstream, use this name with TLS * authentication. * @param q: wich query state to reactivate upon return. * @return: false on failure (memory or socket related). no query was * sent. Or returns an outbound entry with qsent and qstate set. * This outbound_entry will be used on later module invocations * that involve this query (timeout, error or reply). */ struct outbound_entry* (*send_query)(struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q); /** * Detach-subqueries. * Remove all sub-query references from this query state. * Keeps super-references of those sub-queries correct. * Updates stat items in mesh_area structure. * @param qstate: used to find mesh state. */ void (*detach_subs)(struct module_qstate* qstate); /** * Attach subquery. * Creates it if it does not exist already. * Keeps sub and super references correct. * Updates stat items in mesh_area structure. * Pass if it is priming query or not. * return: * o if error (malloc) happened. * o need to initialise the new state (module init; it is a new state). * so that the next run of the query with this module is successful. * o no init needed, attachment successful. * * @param qstate: the state to find mesh state, and that wants to * receive the results from the new subquery. * @param qinfo: what to query for (copied). * @param qflags: what flags to use (RD, CD flag or not). * @param prime: if it is a (stub) priming query. * @param valrec: validation lookup recursion, does not need validation * @param newq: If the new subquery needs initialisation, it is * returned, otherwise NULL is returned. * @return: false on error, true if success (and init may be needed). */ int (*attach_sub)(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq); /** * Add detached query. * Creates it if it does not exist already. * Does not make super/sub references. * Performs a cycle detection - for double check - and fails if there is * one. * Updates stat items in mesh_area structure. * Pass if it is priming query or not. * return: * o if error (malloc) happened. * o need to initialise the new state (module init; it is a new state). * so that the next run of the query with this module is successful. * o no init needed, attachment successful. * o added subquery, created if it did not exist already. * * @param qstate: the state to find mesh state, and that wants to receive * the results from the new subquery. * @param qinfo: what to query for (copied). * @param qflags: what flags to use (RD / CD flag or not). * @param prime: if it is a (stub) priming query. * @param valrec: if it is a validation recursion query (lookup of key, DS). * @param newq: If the new subquery needs initialisation, it is returned, * otherwise NULL is returned. * @param sub: The added mesh state, created if it did not exist already. * @return: false on error, true if success (and init may be needed). */ int (*add_sub)(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq, struct mesh_state** sub); /** * Kill newly attached sub. If attach_sub returns newq for * initialisation, but that fails, then this routine will cleanup and * delete the freshly created sub. * @param newq: the new subquery that is no longer needed. * It is removed. */ void (*kill_sub)(struct module_qstate* newq); /** * Detect if adding a dependency for qstate on name,type,class will * create a dependency cycle. * @param qstate: given mesh querystate. * @param qinfo: query info for dependency. * @param flags: query flags of dependency, RD/CD flags. * @param prime: if dependency is a priming query or not. * @param valrec: validation lookup recursion, does not need validation * @return true if the name,type,class exists and the given * qstate mesh exists as a dependency of that name. Thus * if qstate becomes dependent on name,type,class then a * cycle is created. */ int (*detect_cycle)(struct module_qstate* qstate, struct query_info* qinfo, uint16_t flags, int prime, int valrec); /** region for temporary usage. May be cleared after operate() call. */ struct regional* scratch; /** buffer for temporary usage. May be cleared after operate() call. */ struct sldns_buffer* scratch_buffer; /** internal data for daemon - worker thread. */ struct worker* worker; /** the worker event base */ struct comm_base* worker_base; /** the outside network */ struct outside_network* outnet; /** mesh area with query state dependencies */ struct mesh_area* mesh; /** allocation service */ struct alloc_cache* alloc; /** random table to generate random numbers */ struct ub_randstate* rnd; /** time in seconds, converted to integer */ time_t* now; /** time in microseconds. Relatively recent. */ struct timeval* now_tv; /** is validation required for messages, controls client-facing * validation status (AD bits) and servfails */ int need_to_validate; /** trusted key storage; these are the configured keys, if not NULL, * otherwise configured by validator. These are the trust anchors, * and are not primed and ready for validation, but on the bright * side, they are read only memory, thus no locks and fast. */ struct val_anchors* anchors; /** negative cache, configured by the validator. if not NULL, * contains NSEC record lookup trees. */ struct val_neg_cache* neg_cache; /** the 5011-probe timer (if any) */ struct comm_timer* probe_timer; /** auth zones */ struct auth_zones* auth_zones; /** Mapping of forwarding zones to targets. * iterator forwarder information. per-thread, created by worker */ struct iter_forwards* fwds; /** * iterator forwarder information. per-thread, created by worker. * The hints -- these aren't stored in the cache because they don't * expire. The hints are always used to "prime" the cache. Note * that both root hints and stub zone "hints" are stored in this * data structure. */ struct iter_hints* hints; /** module specific data. indexed by module id. */ void* modinfo[MAX_MODULE]; /* Shared linked list of inplace callback functions */ struct inplace_cb* inplace_cb_lists[inplace_cb_types_total]; /** * Shared array of known edns options (size MAX_KNOWN_EDNS_OPTS). * Filled by edns literate modules during init. */ struct edns_known_option* edns_known_options; /* Number of known edns options */ size_t edns_known_options_num; /** EDNS client string information */ struct edns_strings* edns_strings; /* Make every mesh state unique, do not aggregate mesh states. */ int unique_mesh; }; /** * External visible states of the module state machine * Modules may also have an internal state. * Modules are supposed to run to completion or until blocked. */ enum module_ext_state { /** initial state - new query */ module_state_initial = 0, /** waiting for reply to outgoing network query */ module_wait_reply, /** module is waiting for another module */ module_wait_module, /** module is waiting for another module; that other is restarted */ module_restart_next, /** module is waiting for sub-query */ module_wait_subquery, /** module could not finish the query */ module_error, /** module is finished with query */ module_finished }; /** * Events that happen to modules, that start or wakeup modules. */ enum module_ev { /** new query */ module_event_new = 0, /** query passed by other module */ module_event_pass, /** reply inbound from server */ module_event_reply, /** no reply, timeout or other error */ module_event_noreply, /** reply is there, but capitalisation check failed */ module_event_capsfail, /** next module is done, and its reply is awaiting you */ module_event_moddone, /** error */ module_event_error }; /** * Linked list of sockaddrs * May be allocated such that only 'len' bytes of addr exist for the structure. */ struct sock_list { /** next in list */ struct sock_list* next; /** length of addr */ socklen_t len; /** sockaddr */ struct sockaddr_storage addr; }; struct respip_action_info; /** * Struct to hold relevant data for serve expired */ struct serve_expired_data { struct comm_timer* timer; serve_expired_lookup_func_type* get_cached_answer; }; /** * Module state, per query. */ struct module_qstate { /** which query is being answered: name, type, class */ struct query_info qinfo; /** flags uint16 from query */ uint16_t query_flags; /** if this is a (stub or root) priming query (with hints) */ int is_priming; /** if this is a validation recursion query that does not get * validation itself */ int is_valrec; /** comm_reply contains server replies */ struct comm_reply* reply; /** the reply message, with message for client and calling module */ struct dns_msg* return_msg; /** the rcode, in case of error, instead of a reply message */ int return_rcode; /** origin of the reply (can be NULL from cache, list for cnames) */ struct sock_list* reply_origin; /** IP blacklist for queries */ struct sock_list* blacklist; /** region for this query. Cleared when query process finishes. */ struct regional* region; /** failure reason information if val-log-level is high */ struct config_strlist* errinf; /** which module is executing */ int curmod; /** module states */ enum module_ext_state ext_state[MAX_MODULE]; /** module specific data for query. indexed by module id. */ void* minfo[MAX_MODULE]; /** environment for this query */ struct module_env* env; /** mesh related information for this query */ struct mesh_state* mesh_info; /** how many seconds before expiry is this prefetched (0 if not) */ time_t prefetch_leeway; /** serve expired data */ struct serve_expired_data* serve_expired_data; /** incoming edns options from the front end */ struct edns_option* edns_opts_front_in; /** outgoing edns options to the back end */ struct edns_option* edns_opts_back_out; /** incoming edns options from the back end */ struct edns_option* edns_opts_back_in; /** outgoing edns options to the front end */ struct edns_option* edns_opts_front_out; /** whether modules should answer from the cache */ int no_cache_lookup; /** whether modules should store answer in the cache */ int no_cache_store; /** whether to refetch a fresh answer on finishing this state*/ int need_refetch; /** whether the query (or a subquery) was ratelimited */ int was_ratelimited; /** * Attributes of clients that share the qstate that may affect IP-based * actions. */ struct respip_client_info* client_info; /** Extended result of response-ip action processing, mainly * for logging purposes. */ struct respip_action_info* respip_action_info; /** whether the reply should be dropped */ int is_drop; }; /** * Module functionality block */ struct module_func_block { /** text string name of module */ const char* name; /** * init the module. Called once for the global state. * This is the place to apply settings from the config file. * @param env: module environment. * @param id: module id number. * return: 0 on error */ int (*init)(struct module_env* env, int id); /** * de-init, delete, the module. Called once for the global state. * @param env: module environment. * @param id: module id number. */ void (*deinit)(struct module_env* env, int id); /** * accept a new query, or work further on existing query. * Changes the qstate->ext_state to be correct on exit. * @param ev: event that causes the module state machine to * (re-)activate. * @param qstate: the query state. * Note that this method is not allowed to change the * query state 'identity', that is query info, qflags, * and priming status. * Attach a subquery to get results to a different query. * @param id: module id number that operate() is called on. * @param outbound: if not NULL this event is due to the reply/timeout * or error on this outbound query. * @return: if at exit the ext_state is: * o wait_module: next module is started. (with pass event). * o error or finished: previous module is resumed. * o otherwise it waits until that event happens (assumes * the service routine to make subrequest or send message * have been called. */ void (*operate)(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** * inform super querystate about the results from this subquerystate. * Is called when the querystate is finished. The method invoked is * the one from the current module active in the super querystate. * @param qstate: the query state that is finished. * Examine return_rcode and return_reply in the qstate. * @param id: module id for this module. * This coincides with the current module for the super qstate. * @param super: the super querystate that needs to be informed. */ void (*inform_super)(struct module_qstate* qstate, int id, struct module_qstate* super); /** * clear module specific data */ void (*clear)(struct module_qstate* qstate, int id); /** * How much memory is the module specific data using. * @param env: module environment. * @param id: the module id. * @return the number of bytes that are alloced. */ size_t (*get_mem)(struct module_env* env, int id); }; /** * Debug utility: module external qstate to string * @param s: the state value. * @return descriptive string. */ const char* strextstate(enum module_ext_state s); /** * Debug utility: module event to string * @param e: the module event value. * @return descriptive string. */ const char* strmodulevent(enum module_ev e); /** * Initialize the edns known options by allocating the required space. * @param env: the module environment. * @return false on failure (no memory). */ int edns_known_options_init(struct module_env* env); /** * Free the allocated space for the known edns options. * @param env: the module environment. */ void edns_known_options_delete(struct module_env* env); /** * Register a known edns option. Overwrite the flags if it is already * registered. Used before creating workers to register known edns options. * @param opt_code: the edns option code. * @param bypass_cache_stage: whether the option interacts with the cache. * @param no_aggregation: whether the option implies more specific * aggregation. * @param env: the module environment. * @return true on success, false on failure (registering more options than * allowed or trying to register after the environment is copied to the * threads.) */ int edns_register_option(uint16_t opt_code, int bypass_cache_stage, int no_aggregation, struct module_env* env); /** * Register an inplace callback function. * @param cb: pointer to the callback function. * @param type: inplace callback type. * @param cbarg: argument for the callback function, or NULL. * @param env: the module environment. * @param id: module id. * @return true on success, false on failure (out of memory or trying to * register after the environment is copied to the threads.) */ int inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg, struct module_env* env, int id); /** * Delete callback for specified type and module id. * @param env: the module environment. * @param type: inplace callback type. * @param id: module id. */ void inplace_cb_delete(struct module_env* env, enum inplace_cb_list_type type, int id); /** * Delete all the inplace callback linked lists. * @param env: the module environment. */ void inplace_cb_lists_delete(struct module_env* env); /** * Check if an edns option is known. * @param opt_code: the edns option code. * @param env: the module environment. * @return pointer to registered option if the edns option is known, * NULL otherwise. */ struct edns_known_option* edns_option_is_known(uint16_t opt_code, struct module_env* env); /** * Check if an edns option needs to bypass the reply from cache stage. * @param list: the edns options. * @param env: the module environment. * @return true if an edns option needs to bypass the cache stage, * false otherwise. */ int edns_bypass_cache_stage(struct edns_option* list, struct module_env* env); /** * Check if an unique mesh state is required. Might be triggered by EDNS option * or set for the complete env. * @param list: the edns options. * @param env: the module environment. * @return true if an edns option needs a unique mesh state, * false otherwise. */ int unique_mesh_state(struct edns_option* list, struct module_env* env); /** * Log the known edns options. * @param level: the desired verbosity level. * @param env: the module environment. */ void log_edns_known_options(enum verbosity_value level, struct module_env* env); /** * Copy state that may have happened in the subquery and is always relevant to * the super. * @param qstate: query state that finished. * @param id: module id. * @param super: the qstate to inform. */ void copy_state_to_super(struct module_qstate* qstate, int id, struct module_qstate* super); #endif /* UTIL_MODULE_H */ unbound-1.13.1/util/configyyrename.h0000644000175000017500000000530214010434640017044 0ustar wouterwouter/* * configyyrename.h -- renames for config file yy values to avoid conflicts. * * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. * * See LICENSE for the license. * */ #ifndef UTIL_CONFIGYYRENAME_H #define UTIL_CONFIGYYRENAME_H /* defines to change symbols so that no yacc/lex symbols clash */ #define yymaxdepth ub_c_maxdepth #define yyparse ub_c_parse #define yylex ub_c_lex #define yyerror ub_c_error #define yylval ub_c_lval #define yychar ub_c_char #define yydebug ub_c_debug #define yypact ub_c_pact #define yyr1 ub_c_r1 #define yyr2 ub_c_r2 #define yydef ub_c_def #define yychk ub_c_chk #define yypgo ub_c_pgo #define yyact ub_c_act #define yyexca ub_c_exca #define yyerrflag ub_c_errflag #define yynerrs ub_c_nerrs #define yyps ub_c_ps #define yypv ub_c_pv #define yys ub_c_s #define yy_yys ub_c_yys #define yystate ub_c_state #define yytmp ub_c_tmp #define yyv ub_c_v #define yy_yyv ub_c_yyv #define yyval ub_c_val #define yylloc ub_c_lloc #define yyreds ub_c_reds #define yytoks ub_c_toks #define yylhs ub_c_yylhs #define yylen ub_c_yylen #define yydefred ub_c_yydefred #define yydgoto ub_c_yydgoto #define yysindex ub_c_yysindex #define yyrindex ub_c_yyrindex #define yygindex ub_c_yygindex #define yytable ub_c_yytable #define yycheck ub_c_yycheck #define yyname ub_c_yyname #define yyrule ub_c_yyrule #define yyin ub_c_in #define yyout ub_c_out #define yywrap ub_c_wrap #define yy_load_buffer_state ub_c_load_buffer_state #define yy_switch_to_buffer ub_c_switch_to_buffer #define yy_flush_buffer ub_c_flush_buffer #define yy_init_buffer ub_c_init_buffer #define yy_scan_buffer ub_c_scan_buffer #define yy_scan_bytes ub_c_scan_bytes #define yy_scan_string ub_c_scan_string #define yy_create_buffer ub_c_create_buffer #define yyrestart ub_c_restart #define yy_delete_buffer ub_c_delete_buffer #define yypop_buffer_state ub_c_pop_buffer_state #define yypush_buffer_state ub_c_push_buffer_state #define yyunput ub_c_unput #define yyset_in ub_c_set_in #define yyget_in ub_c_get_in #define yyset_out ub_c_set_out #define yyget_out ub_c_get_out #define yyget_lineno ub_c_get_lineno #define yyset_lineno ub_c_set_lineno #define yyset_debug ub_c_set_debug #define yyget_debug ub_c_get_debug #define yy_flex_debug ub_c_flex_debug #define yylex_destroy ub_c_lex_destroy #define yyfree ub_c_free #define yyrealloc ub_c_realloc #define yyalloc ub_c_alloc #define yymalloc ub_c_malloc #define yyget_leng ub_c_get_leng #define yylineno ub_c_lineno #define yyget_text ub_c_get_text #define yyss ub_c_ss #define yysslim ub_c_sslim #define yyssp ub_c_ssp #define yystacksize ub_c_stacksize #define yyvs ub_c_vs #define yyvsp ub_c_vsp #endif /* UTIL_CONFIGYYRENAME_H */ unbound-1.13.1/util/configparser.h0000644000175000017500000007631214010434646016526 0ustar wouterwouter/* A Bison parser, made by GNU Bison 3.6.4. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ SPACE = 258, /* SPACE */ LETTER = 259, /* LETTER */ NEWLINE = 260, /* NEWLINE */ COMMENT = 261, /* COMMENT */ COLON = 262, /* COLON */ ANY = 263, /* ANY */ ZONESTR = 264, /* ZONESTR */ STRING_ARG = 265, /* STRING_ARG */ VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */ VAR_SERVER = 267, /* VAR_SERVER */ VAR_VERBOSITY = 268, /* VAR_VERBOSITY */ VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */ VAR_PORT = 270, /* VAR_PORT */ VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */ VAR_INTERFACE = 272, /* VAR_INTERFACE */ VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */ VAR_DO_IP4 = 274, /* VAR_DO_IP4 */ VAR_DO_IP6 = 275, /* VAR_DO_IP6 */ VAR_PREFER_IP6 = 276, /* VAR_PREFER_IP6 */ VAR_DO_UDP = 277, /* VAR_DO_UDP */ VAR_DO_TCP = 278, /* VAR_DO_TCP */ VAR_TCP_MSS = 279, /* VAR_TCP_MSS */ VAR_OUTGOING_TCP_MSS = 280, /* VAR_OUTGOING_TCP_MSS */ VAR_TCP_IDLE_TIMEOUT = 281, /* VAR_TCP_IDLE_TIMEOUT */ VAR_EDNS_TCP_KEEPALIVE = 282, /* VAR_EDNS_TCP_KEEPALIVE */ VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ VAR_CHROOT = 284, /* VAR_CHROOT */ VAR_USERNAME = 285, /* VAR_USERNAME */ VAR_DIRECTORY = 286, /* VAR_DIRECTORY */ VAR_LOGFILE = 287, /* VAR_LOGFILE */ VAR_PIDFILE = 288, /* VAR_PIDFILE */ VAR_MSG_CACHE_SIZE = 289, /* VAR_MSG_CACHE_SIZE */ VAR_MSG_CACHE_SLABS = 290, /* VAR_MSG_CACHE_SLABS */ VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD */ VAR_RRSET_CACHE_SIZE = 292, /* VAR_RRSET_CACHE_SIZE */ VAR_RRSET_CACHE_SLABS = 293, /* VAR_RRSET_CACHE_SLABS */ VAR_OUTGOING_NUM_TCP = 294, /* VAR_OUTGOING_NUM_TCP */ VAR_INFRA_HOST_TTL = 295, /* VAR_INFRA_HOST_TTL */ VAR_INFRA_LAME_TTL = 296, /* VAR_INFRA_LAME_TTL */ VAR_INFRA_CACHE_SLABS = 297, /* VAR_INFRA_CACHE_SLABS */ VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS */ VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE */ VAR_NAME = 300, /* VAR_NAME */ VAR_STUB_ZONE = 301, /* VAR_STUB_ZONE */ VAR_STUB_HOST = 302, /* VAR_STUB_HOST */ VAR_STUB_ADDR = 303, /* VAR_STUB_ADDR */ VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY */ VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE */ VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES */ VAR_FORWARD_ZONE = 307, /* VAR_FORWARD_ZONE */ VAR_FORWARD_HOST = 308, /* VAR_FORWARD_HOST */ VAR_FORWARD_ADDR = 309, /* VAR_FORWARD_ADDR */ VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS */ VAR_HIDE_IDENTITY = 311, /* VAR_HIDE_IDENTITY */ VAR_HIDE_VERSION = 312, /* VAR_HIDE_VERSION */ VAR_IDENTITY = 313, /* VAR_IDENTITY */ VAR_VERSION = 314, /* VAR_VERSION */ VAR_HARDEN_GLUE = 315, /* VAR_HARDEN_GLUE */ VAR_MODULE_CONF = 316, /* VAR_MODULE_CONF */ VAR_TRUST_ANCHOR_FILE = 317, /* VAR_TRUST_ANCHOR_FILE */ VAR_TRUST_ANCHOR = 318, /* VAR_TRUST_ANCHOR */ VAR_VAL_OVERRIDE_DATE = 319, /* VAR_VAL_OVERRIDE_DATE */ VAR_BOGUS_TTL = 320, /* VAR_BOGUS_TTL */ VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL */ VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE */ VAR_INCOMING_NUM_TCP = 323, /* VAR_INCOMING_NUM_TCP */ VAR_MSG_BUFFER_SIZE = 324, /* VAR_MSG_BUFFER_SIZE */ VAR_KEY_CACHE_SIZE = 325, /* VAR_KEY_CACHE_SIZE */ VAR_KEY_CACHE_SLABS = 326, /* VAR_KEY_CACHE_SLABS */ VAR_TRUSTED_KEYS_FILE = 327, /* VAR_TRUSTED_KEYS_FILE */ VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ VAR_USE_SYSLOG = 329, /* VAR_USE_SYSLOG */ VAR_OUTGOING_INTERFACE = 330, /* VAR_OUTGOING_INTERFACE */ VAR_ROOT_HINTS = 331, /* VAR_ROOT_HINTS */ VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST */ VAR_CACHE_MAX_TTL = 333, /* VAR_CACHE_MAX_TTL */ VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED */ VAR_ACCESS_CONTROL = 335, /* VAR_ACCESS_CONTROL */ VAR_LOCAL_ZONE = 336, /* VAR_LOCAL_ZONE */ VAR_LOCAL_DATA = 337, /* VAR_LOCAL_DATA */ VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC */ VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL */ VAR_DO_DAEMONIZE = 340, /* VAR_DO_DAEMONIZE */ VAR_USE_CAPS_FOR_ID = 341, /* VAR_USE_CAPS_FOR_ID */ VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE */ VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT */ VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID */ VAR_DLV_ANCHOR_FILE = 345, /* VAR_DLV_ANCHOR_FILE */ VAR_DLV_ANCHOR = 346, /* VAR_DLV_ANCHOR */ VAR_NEG_CACHE_SIZE = 347, /* VAR_NEG_CACHE_SIZE */ VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH */ VAR_PRIVATE_ADDRESS = 349, /* VAR_PRIVATE_ADDRESS */ VAR_PRIVATE_DOMAIN = 350, /* VAR_PRIVATE_DOMAIN */ VAR_REMOTE_CONTROL = 351, /* VAR_REMOTE_CONTROL */ VAR_CONTROL_ENABLE = 352, /* VAR_CONTROL_ENABLE */ VAR_CONTROL_INTERFACE = 353, /* VAR_CONTROL_INTERFACE */ VAR_CONTROL_PORT = 354, /* VAR_CONTROL_PORT */ VAR_SERVER_KEY_FILE = 355, /* VAR_SERVER_KEY_FILE */ VAR_SERVER_CERT_FILE = 356, /* VAR_SERVER_CERT_FILE */ VAR_CONTROL_KEY_FILE = 357, /* VAR_CONTROL_KEY_FILE */ VAR_CONTROL_CERT_FILE = 358, /* VAR_CONTROL_CERT_FILE */ VAR_CONTROL_USE_CERT = 359, /* VAR_CONTROL_USE_CERT */ VAR_EXTENDED_STATISTICS = 360, /* VAR_EXTENDED_STATISTICS */ VAR_LOCAL_DATA_PTR = 361, /* VAR_LOCAL_DATA_PTR */ VAR_JOSTLE_TIMEOUT = 362, /* VAR_JOSTLE_TIMEOUT */ VAR_STUB_PRIME = 363, /* VAR_STUB_PRIME */ VAR_UNWANTED_REPLY_THRESHOLD = 364, /* VAR_UNWANTED_REPLY_THRESHOLD */ VAR_LOG_TIME_ASCII = 365, /* VAR_LOG_TIME_ASCII */ VAR_DOMAIN_INSECURE = 366, /* VAR_DOMAIN_INSECURE */ VAR_PYTHON = 367, /* VAR_PYTHON */ VAR_PYTHON_SCRIPT = 368, /* VAR_PYTHON_SCRIPT */ VAR_VAL_SIG_SKEW_MIN = 369, /* VAR_VAL_SIG_SKEW_MIN */ VAR_VAL_SIG_SKEW_MAX = 370, /* VAR_VAL_SIG_SKEW_MAX */ VAR_CACHE_MIN_TTL = 371, /* VAR_CACHE_MIN_TTL */ VAR_VAL_LOG_LEVEL = 372, /* VAR_VAL_LOG_LEVEL */ VAR_AUTO_TRUST_ANCHOR_FILE = 373, /* VAR_AUTO_TRUST_ANCHOR_FILE */ VAR_KEEP_MISSING = 374, /* VAR_KEEP_MISSING */ VAR_ADD_HOLDDOWN = 375, /* VAR_ADD_HOLDDOWN */ VAR_DEL_HOLDDOWN = 376, /* VAR_DEL_HOLDDOWN */ VAR_SO_RCVBUF = 377, /* VAR_SO_RCVBUF */ VAR_EDNS_BUFFER_SIZE = 378, /* VAR_EDNS_BUFFER_SIZE */ VAR_PREFETCH = 379, /* VAR_PREFETCH */ VAR_PREFETCH_KEY = 380, /* VAR_PREFETCH_KEY */ VAR_SO_SNDBUF = 381, /* VAR_SO_SNDBUF */ VAR_SO_REUSEPORT = 382, /* VAR_SO_REUSEPORT */ VAR_HARDEN_BELOW_NXDOMAIN = 383, /* VAR_HARDEN_BELOW_NXDOMAIN */ VAR_IGNORE_CD_FLAG = 384, /* VAR_IGNORE_CD_FLAG */ VAR_LOG_QUERIES = 385, /* VAR_LOG_QUERIES */ VAR_LOG_REPLIES = 386, /* VAR_LOG_REPLIES */ VAR_LOG_LOCAL_ACTIONS = 387, /* VAR_LOG_LOCAL_ACTIONS */ VAR_TCP_UPSTREAM = 388, /* VAR_TCP_UPSTREAM */ VAR_SSL_UPSTREAM = 389, /* VAR_SSL_UPSTREAM */ VAR_SSL_SERVICE_KEY = 390, /* VAR_SSL_SERVICE_KEY */ VAR_SSL_SERVICE_PEM = 391, /* VAR_SSL_SERVICE_PEM */ VAR_SSL_PORT = 392, /* VAR_SSL_PORT */ VAR_FORWARD_FIRST = 393, /* VAR_FORWARD_FIRST */ VAR_STUB_SSL_UPSTREAM = 394, /* VAR_STUB_SSL_UPSTREAM */ VAR_FORWARD_SSL_UPSTREAM = 395, /* VAR_FORWARD_SSL_UPSTREAM */ VAR_TLS_CERT_BUNDLE = 396, /* VAR_TLS_CERT_BUNDLE */ VAR_HTTPS_PORT = 397, /* VAR_HTTPS_PORT */ VAR_HTTP_ENDPOINT = 398, /* VAR_HTTP_ENDPOINT */ VAR_HTTP_MAX_STREAMS = 399, /* VAR_HTTP_MAX_STREAMS */ VAR_HTTP_QUERY_BUFFER_SIZE = 400, /* VAR_HTTP_QUERY_BUFFER_SIZE */ VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ VAR_HTTP_NODELAY = 402, /* VAR_HTTP_NODELAY */ VAR_HTTP_NOTLS_DOWNSTREAM = 403, /* VAR_HTTP_NOTLS_DOWNSTREAM */ VAR_STUB_FIRST = 404, /* VAR_STUB_FIRST */ VAR_MINIMAL_RESPONSES = 405, /* VAR_MINIMAL_RESPONSES */ VAR_RRSET_ROUNDROBIN = 406, /* VAR_RRSET_ROUNDROBIN */ VAR_MAX_UDP_SIZE = 407, /* VAR_MAX_UDP_SIZE */ VAR_DELAY_CLOSE = 408, /* VAR_DELAY_CLOSE */ VAR_UDP_CONNECT = 409, /* VAR_UDP_CONNECT */ VAR_UNBLOCK_LAN_ZONES = 410, /* VAR_UNBLOCK_LAN_ZONES */ VAR_INSECURE_LAN_ZONES = 411, /* VAR_INSECURE_LAN_ZONES */ VAR_INFRA_CACHE_MIN_RTT = 412, /* VAR_INFRA_CACHE_MIN_RTT */ VAR_INFRA_KEEP_PROBING = 413, /* VAR_INFRA_KEEP_PROBING */ VAR_DNS64_PREFIX = 414, /* VAR_DNS64_PREFIX */ VAR_DNS64_SYNTHALL = 415, /* VAR_DNS64_SYNTHALL */ VAR_DNS64_IGNORE_AAAA = 416, /* VAR_DNS64_IGNORE_AAAA */ VAR_DNSTAP = 417, /* VAR_DNSTAP */ VAR_DNSTAP_ENABLE = 418, /* VAR_DNSTAP_ENABLE */ VAR_DNSTAP_SOCKET_PATH = 419, /* VAR_DNSTAP_SOCKET_PATH */ VAR_DNSTAP_IP = 420, /* VAR_DNSTAP_IP */ VAR_DNSTAP_TLS = 421, /* VAR_DNSTAP_TLS */ VAR_DNSTAP_TLS_SERVER_NAME = 422, /* VAR_DNSTAP_TLS_SERVER_NAME */ VAR_DNSTAP_TLS_CERT_BUNDLE = 423, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ VAR_DNSTAP_SEND_IDENTITY = 426, /* VAR_DNSTAP_SEND_IDENTITY */ VAR_DNSTAP_SEND_VERSION = 427, /* VAR_DNSTAP_SEND_VERSION */ VAR_DNSTAP_BIDIRECTIONAL = 428, /* VAR_DNSTAP_BIDIRECTIONAL */ VAR_DNSTAP_IDENTITY = 429, /* VAR_DNSTAP_IDENTITY */ VAR_DNSTAP_VERSION = 430, /* VAR_DNSTAP_VERSION */ VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ VAR_RESPONSE_IP_TAG = 437, /* VAR_RESPONSE_IP_TAG */ VAR_RESPONSE_IP = 438, /* VAR_RESPONSE_IP */ VAR_RESPONSE_IP_DATA = 439, /* VAR_RESPONSE_IP_DATA */ VAR_HARDEN_ALGO_DOWNGRADE = 440, /* VAR_HARDEN_ALGO_DOWNGRADE */ VAR_IP_TRANSPARENT = 441, /* VAR_IP_TRANSPARENT */ VAR_IP_DSCP = 442, /* VAR_IP_DSCP */ VAR_DISABLE_DNSSEC_LAME_CHECK = 443, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ VAR_IP_RATELIMIT = 444, /* VAR_IP_RATELIMIT */ VAR_IP_RATELIMIT_SLABS = 445, /* VAR_IP_RATELIMIT_SLABS */ VAR_IP_RATELIMIT_SIZE = 446, /* VAR_IP_RATELIMIT_SIZE */ VAR_RATELIMIT = 447, /* VAR_RATELIMIT */ VAR_RATELIMIT_SLABS = 448, /* VAR_RATELIMIT_SLABS */ VAR_RATELIMIT_SIZE = 449, /* VAR_RATELIMIT_SIZE */ VAR_RATELIMIT_FOR_DOMAIN = 450, /* VAR_RATELIMIT_FOR_DOMAIN */ VAR_RATELIMIT_BELOW_DOMAIN = 451, /* VAR_RATELIMIT_BELOW_DOMAIN */ VAR_IP_RATELIMIT_FACTOR = 452, /* VAR_IP_RATELIMIT_FACTOR */ VAR_RATELIMIT_FACTOR = 453, /* VAR_RATELIMIT_FACTOR */ VAR_SEND_CLIENT_SUBNET = 454, /* VAR_SEND_CLIENT_SUBNET */ VAR_CLIENT_SUBNET_ZONE = 455, /* VAR_CLIENT_SUBNET_ZONE */ VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ VAR_CLIENT_SUBNET_OPCODE = 457, /* VAR_CLIENT_SUBNET_OPCODE */ VAR_MAX_CLIENT_SUBNET_IPV4 = 458, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ VAR_MAX_CLIENT_SUBNET_IPV6 = 459, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ VAR_MIN_CLIENT_SUBNET_IPV4 = 460, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ VAR_MIN_CLIENT_SUBNET_IPV6 = 461, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ VAR_MAX_ECS_TREE_SIZE_IPV4 = 462, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ VAR_MAX_ECS_TREE_SIZE_IPV6 = 463, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ VAR_CAPS_WHITELIST = 464, /* VAR_CAPS_WHITELIST */ VAR_CACHE_MAX_NEGATIVE_TTL = 465, /* VAR_CACHE_MAX_NEGATIVE_TTL */ VAR_PERMIT_SMALL_HOLDDOWN = 466, /* VAR_PERMIT_SMALL_HOLDDOWN */ VAR_QNAME_MINIMISATION = 467, /* VAR_QNAME_MINIMISATION */ VAR_QNAME_MINIMISATION_STRICT = 468, /* VAR_QNAME_MINIMISATION_STRICT */ VAR_IP_FREEBIND = 469, /* VAR_IP_FREEBIND */ VAR_DEFINE_TAG = 470, /* VAR_DEFINE_TAG */ VAR_LOCAL_ZONE_TAG = 471, /* VAR_LOCAL_ZONE_TAG */ VAR_ACCESS_CONTROL_TAG = 472, /* VAR_ACCESS_CONTROL_TAG */ VAR_LOCAL_ZONE_OVERRIDE = 473, /* VAR_LOCAL_ZONE_OVERRIDE */ VAR_ACCESS_CONTROL_TAG_ACTION = 474, /* VAR_ACCESS_CONTROL_TAG_ACTION */ VAR_ACCESS_CONTROL_TAG_DATA = 475, /* VAR_ACCESS_CONTROL_TAG_DATA */ VAR_VIEW = 476, /* VAR_VIEW */ VAR_ACCESS_CONTROL_VIEW = 477, /* VAR_ACCESS_CONTROL_VIEW */ VAR_VIEW_FIRST = 478, /* VAR_VIEW_FIRST */ VAR_SERVE_EXPIRED = 479, /* VAR_SERVE_EXPIRED */ VAR_SERVE_EXPIRED_TTL = 480, /* VAR_SERVE_EXPIRED_TTL */ VAR_SERVE_EXPIRED_TTL_RESET = 481, /* VAR_SERVE_EXPIRED_TTL_RESET */ VAR_SERVE_EXPIRED_REPLY_TTL = 482, /* VAR_SERVE_EXPIRED_REPLY_TTL */ VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ VAR_SERVE_ORIGINAL_TTL = 484, /* VAR_SERVE_ORIGINAL_TTL */ VAR_FAKE_DSA = 485, /* VAR_FAKE_DSA */ VAR_FAKE_SHA1 = 486, /* VAR_FAKE_SHA1 */ VAR_LOG_IDENTITY = 487, /* VAR_LOG_IDENTITY */ VAR_HIDE_TRUSTANCHOR = 488, /* VAR_HIDE_TRUSTANCHOR */ VAR_TRUST_ANCHOR_SIGNALING = 489, /* VAR_TRUST_ANCHOR_SIGNALING */ VAR_AGGRESSIVE_NSEC = 490, /* VAR_AGGRESSIVE_NSEC */ VAR_USE_SYSTEMD = 491, /* VAR_USE_SYSTEMD */ VAR_SHM_ENABLE = 492, /* VAR_SHM_ENABLE */ VAR_SHM_KEY = 493, /* VAR_SHM_KEY */ VAR_ROOT_KEY_SENTINEL = 494, /* VAR_ROOT_KEY_SENTINEL */ VAR_DNSCRYPT = 495, /* VAR_DNSCRYPT */ VAR_DNSCRYPT_ENABLE = 496, /* VAR_DNSCRYPT_ENABLE */ VAR_DNSCRYPT_PORT = 497, /* VAR_DNSCRYPT_PORT */ VAR_DNSCRYPT_PROVIDER = 498, /* VAR_DNSCRYPT_PROVIDER */ VAR_DNSCRYPT_SECRET_KEY = 499, /* VAR_DNSCRYPT_SECRET_KEY */ VAR_DNSCRYPT_PROVIDER_CERT = 500, /* VAR_DNSCRYPT_PROVIDER_CERT */ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 501, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 502, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 503, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 504, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 505, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ VAR_PAD_RESPONSES = 506, /* VAR_PAD_RESPONSES */ VAR_PAD_RESPONSES_BLOCK_SIZE = 507, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ VAR_PAD_QUERIES = 508, /* VAR_PAD_QUERIES */ VAR_PAD_QUERIES_BLOCK_SIZE = 509, /* VAR_PAD_QUERIES_BLOCK_SIZE */ VAR_IPSECMOD_ENABLED = 510, /* VAR_IPSECMOD_ENABLED */ VAR_IPSECMOD_HOOK = 511, /* VAR_IPSECMOD_HOOK */ VAR_IPSECMOD_IGNORE_BOGUS = 512, /* VAR_IPSECMOD_IGNORE_BOGUS */ VAR_IPSECMOD_MAX_TTL = 513, /* VAR_IPSECMOD_MAX_TTL */ VAR_IPSECMOD_WHITELIST = 514, /* VAR_IPSECMOD_WHITELIST */ VAR_IPSECMOD_STRICT = 515, /* VAR_IPSECMOD_STRICT */ VAR_CACHEDB = 516, /* VAR_CACHEDB */ VAR_CACHEDB_BACKEND = 517, /* VAR_CACHEDB_BACKEND */ VAR_CACHEDB_SECRETSEED = 518, /* VAR_CACHEDB_SECRETSEED */ VAR_CACHEDB_REDISHOST = 519, /* VAR_CACHEDB_REDISHOST */ VAR_CACHEDB_REDISPORT = 520, /* VAR_CACHEDB_REDISPORT */ VAR_CACHEDB_REDISTIMEOUT = 521, /* VAR_CACHEDB_REDISTIMEOUT */ VAR_CACHEDB_REDISEXPIRERECORDS = 522, /* VAR_CACHEDB_REDISEXPIRERECORDS */ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 523, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ VAR_FOR_UPSTREAM = 524, /* VAR_FOR_UPSTREAM */ VAR_AUTH_ZONE = 525, /* VAR_AUTH_ZONE */ VAR_ZONEFILE = 526, /* VAR_ZONEFILE */ VAR_MASTER = 527, /* VAR_MASTER */ VAR_URL = 528, /* VAR_URL */ VAR_FOR_DOWNSTREAM = 529, /* VAR_FOR_DOWNSTREAM */ VAR_FALLBACK_ENABLED = 530, /* VAR_FALLBACK_ENABLED */ VAR_TLS_ADDITIONAL_PORT = 531, /* VAR_TLS_ADDITIONAL_PORT */ VAR_LOW_RTT = 532, /* VAR_LOW_RTT */ VAR_LOW_RTT_PERMIL = 533, /* VAR_LOW_RTT_PERMIL */ VAR_FAST_SERVER_PERMIL = 534, /* VAR_FAST_SERVER_PERMIL */ VAR_FAST_SERVER_NUM = 535, /* VAR_FAST_SERVER_NUM */ VAR_ALLOW_NOTIFY = 536, /* VAR_ALLOW_NOTIFY */ VAR_TLS_WIN_CERT = 537, /* VAR_TLS_WIN_CERT */ VAR_TCP_CONNECTION_LIMIT = 538, /* VAR_TCP_CONNECTION_LIMIT */ VAR_FORWARD_NO_CACHE = 539, /* VAR_FORWARD_NO_CACHE */ VAR_STUB_NO_CACHE = 540, /* VAR_STUB_NO_CACHE */ VAR_LOG_SERVFAIL = 541, /* VAR_LOG_SERVFAIL */ VAR_DENY_ANY = 542, /* VAR_DENY_ANY */ VAR_UNKNOWN_SERVER_TIME_LIMIT = 543, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ VAR_LOG_TAG_QUERYREPLY = 544, /* VAR_LOG_TAG_QUERYREPLY */ VAR_STREAM_WAIT_SIZE = 545, /* VAR_STREAM_WAIT_SIZE */ VAR_TLS_CIPHERS = 546, /* VAR_TLS_CIPHERS */ VAR_TLS_CIPHERSUITES = 547, /* VAR_TLS_CIPHERSUITES */ VAR_TLS_USE_SNI = 548, /* VAR_TLS_USE_SNI */ VAR_IPSET = 549, /* VAR_IPSET */ VAR_IPSET_NAME_V4 = 550, /* VAR_IPSET_NAME_V4 */ VAR_IPSET_NAME_V6 = 551, /* VAR_IPSET_NAME_V6 */ VAR_TLS_SESSION_TICKET_KEYS = 552, /* VAR_TLS_SESSION_TICKET_KEYS */ VAR_RPZ = 553, /* VAR_RPZ */ VAR_TAGS = 554, /* VAR_TAGS */ VAR_RPZ_ACTION_OVERRIDE = 555, /* VAR_RPZ_ACTION_OVERRIDE */ VAR_RPZ_CNAME_OVERRIDE = 556, /* VAR_RPZ_CNAME_OVERRIDE */ VAR_RPZ_LOG = 557, /* VAR_RPZ_LOG */ VAR_RPZ_LOG_NAME = 558, /* VAR_RPZ_LOG_NAME */ VAR_DYNLIB = 559, /* VAR_DYNLIB */ VAR_DYNLIB_FILE = 560, /* VAR_DYNLIB_FILE */ VAR_EDNS_CLIENT_STRING = 561, /* VAR_EDNS_CLIENT_STRING */ VAR_EDNS_CLIENT_STRING_OPCODE = 562, /* VAR_EDNS_CLIENT_STRING_OPCODE */ VAR_NSID = 563 /* VAR_NSID */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Token kinds. */ #define YYEOF 0 #define YYerror 256 #define YYUNDEF 257 #define SPACE 258 #define LETTER 259 #define NEWLINE 260 #define COMMENT 261 #define COLON 262 #define ANY 263 #define ZONESTR 264 #define STRING_ARG 265 #define VAR_FORCE_TOPLEVEL 266 #define VAR_SERVER 267 #define VAR_VERBOSITY 268 #define VAR_NUM_THREADS 269 #define VAR_PORT 270 #define VAR_OUTGOING_RANGE 271 #define VAR_INTERFACE 272 #define VAR_PREFER_IP4 273 #define VAR_DO_IP4 274 #define VAR_DO_IP6 275 #define VAR_PREFER_IP6 276 #define VAR_DO_UDP 277 #define VAR_DO_TCP 278 #define VAR_TCP_MSS 279 #define VAR_OUTGOING_TCP_MSS 280 #define VAR_TCP_IDLE_TIMEOUT 281 #define VAR_EDNS_TCP_KEEPALIVE 282 #define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283 #define VAR_CHROOT 284 #define VAR_USERNAME 285 #define VAR_DIRECTORY 286 #define VAR_LOGFILE 287 #define VAR_PIDFILE 288 #define VAR_MSG_CACHE_SIZE 289 #define VAR_MSG_CACHE_SLABS 290 #define VAR_NUM_QUERIES_PER_THREAD 291 #define VAR_RRSET_CACHE_SIZE 292 #define VAR_RRSET_CACHE_SLABS 293 #define VAR_OUTGOING_NUM_TCP 294 #define VAR_INFRA_HOST_TTL 295 #define VAR_INFRA_LAME_TTL 296 #define VAR_INFRA_CACHE_SLABS 297 #define VAR_INFRA_CACHE_NUMHOSTS 298 #define VAR_INFRA_CACHE_LAME_SIZE 299 #define VAR_NAME 300 #define VAR_STUB_ZONE 301 #define VAR_STUB_HOST 302 #define VAR_STUB_ADDR 303 #define VAR_TARGET_FETCH_POLICY 304 #define VAR_HARDEN_SHORT_BUFSIZE 305 #define VAR_HARDEN_LARGE_QUERIES 306 #define VAR_FORWARD_ZONE 307 #define VAR_FORWARD_HOST 308 #define VAR_FORWARD_ADDR 309 #define VAR_DO_NOT_QUERY_ADDRESS 310 #define VAR_HIDE_IDENTITY 311 #define VAR_HIDE_VERSION 312 #define VAR_IDENTITY 313 #define VAR_VERSION 314 #define VAR_HARDEN_GLUE 315 #define VAR_MODULE_CONF 316 #define VAR_TRUST_ANCHOR_FILE 317 #define VAR_TRUST_ANCHOR 318 #define VAR_VAL_OVERRIDE_DATE 319 #define VAR_BOGUS_TTL 320 #define VAR_VAL_CLEAN_ADDITIONAL 321 #define VAR_VAL_PERMISSIVE_MODE 322 #define VAR_INCOMING_NUM_TCP 323 #define VAR_MSG_BUFFER_SIZE 324 #define VAR_KEY_CACHE_SIZE 325 #define VAR_KEY_CACHE_SLABS 326 #define VAR_TRUSTED_KEYS_FILE 327 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328 #define VAR_USE_SYSLOG 329 #define VAR_OUTGOING_INTERFACE 330 #define VAR_ROOT_HINTS 331 #define VAR_DO_NOT_QUERY_LOCALHOST 332 #define VAR_CACHE_MAX_TTL 333 #define VAR_HARDEN_DNSSEC_STRIPPED 334 #define VAR_ACCESS_CONTROL 335 #define VAR_LOCAL_ZONE 336 #define VAR_LOCAL_DATA 337 #define VAR_INTERFACE_AUTOMATIC 338 #define VAR_STATISTICS_INTERVAL 339 #define VAR_DO_DAEMONIZE 340 #define VAR_USE_CAPS_FOR_ID 341 #define VAR_STATISTICS_CUMULATIVE 342 #define VAR_OUTGOING_PORT_PERMIT 343 #define VAR_OUTGOING_PORT_AVOID 344 #define VAR_DLV_ANCHOR_FILE 345 #define VAR_DLV_ANCHOR 346 #define VAR_NEG_CACHE_SIZE 347 #define VAR_HARDEN_REFERRAL_PATH 348 #define VAR_PRIVATE_ADDRESS 349 #define VAR_PRIVATE_DOMAIN 350 #define VAR_REMOTE_CONTROL 351 #define VAR_CONTROL_ENABLE 352 #define VAR_CONTROL_INTERFACE 353 #define VAR_CONTROL_PORT 354 #define VAR_SERVER_KEY_FILE 355 #define VAR_SERVER_CERT_FILE 356 #define VAR_CONTROL_KEY_FILE 357 #define VAR_CONTROL_CERT_FILE 358 #define VAR_CONTROL_USE_CERT 359 #define VAR_EXTENDED_STATISTICS 360 #define VAR_LOCAL_DATA_PTR 361 #define VAR_JOSTLE_TIMEOUT 362 #define VAR_STUB_PRIME 363 #define VAR_UNWANTED_REPLY_THRESHOLD 364 #define VAR_LOG_TIME_ASCII 365 #define VAR_DOMAIN_INSECURE 366 #define VAR_PYTHON 367 #define VAR_PYTHON_SCRIPT 368 #define VAR_VAL_SIG_SKEW_MIN 369 #define VAR_VAL_SIG_SKEW_MAX 370 #define VAR_CACHE_MIN_TTL 371 #define VAR_VAL_LOG_LEVEL 372 #define VAR_AUTO_TRUST_ANCHOR_FILE 373 #define VAR_KEEP_MISSING 374 #define VAR_ADD_HOLDDOWN 375 #define VAR_DEL_HOLDDOWN 376 #define VAR_SO_RCVBUF 377 #define VAR_EDNS_BUFFER_SIZE 378 #define VAR_PREFETCH 379 #define VAR_PREFETCH_KEY 380 #define VAR_SO_SNDBUF 381 #define VAR_SO_REUSEPORT 382 #define VAR_HARDEN_BELOW_NXDOMAIN 383 #define VAR_IGNORE_CD_FLAG 384 #define VAR_LOG_QUERIES 385 #define VAR_LOG_REPLIES 386 #define VAR_LOG_LOCAL_ACTIONS 387 #define VAR_TCP_UPSTREAM 388 #define VAR_SSL_UPSTREAM 389 #define VAR_SSL_SERVICE_KEY 390 #define VAR_SSL_SERVICE_PEM 391 #define VAR_SSL_PORT 392 #define VAR_FORWARD_FIRST 393 #define VAR_STUB_SSL_UPSTREAM 394 #define VAR_FORWARD_SSL_UPSTREAM 395 #define VAR_TLS_CERT_BUNDLE 396 #define VAR_HTTPS_PORT 397 #define VAR_HTTP_ENDPOINT 398 #define VAR_HTTP_MAX_STREAMS 399 #define VAR_HTTP_QUERY_BUFFER_SIZE 400 #define VAR_HTTP_RESPONSE_BUFFER_SIZE 401 #define VAR_HTTP_NODELAY 402 #define VAR_HTTP_NOTLS_DOWNSTREAM 403 #define VAR_STUB_FIRST 404 #define VAR_MINIMAL_RESPONSES 405 #define VAR_RRSET_ROUNDROBIN 406 #define VAR_MAX_UDP_SIZE 407 #define VAR_DELAY_CLOSE 408 #define VAR_UDP_CONNECT 409 #define VAR_UNBLOCK_LAN_ZONES 410 #define VAR_INSECURE_LAN_ZONES 411 #define VAR_INFRA_CACHE_MIN_RTT 412 #define VAR_INFRA_KEEP_PROBING 413 #define VAR_DNS64_PREFIX 414 #define VAR_DNS64_SYNTHALL 415 #define VAR_DNS64_IGNORE_AAAA 416 #define VAR_DNSTAP 417 #define VAR_DNSTAP_ENABLE 418 #define VAR_DNSTAP_SOCKET_PATH 419 #define VAR_DNSTAP_IP 420 #define VAR_DNSTAP_TLS 421 #define VAR_DNSTAP_TLS_SERVER_NAME 422 #define VAR_DNSTAP_TLS_CERT_BUNDLE 423 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425 #define VAR_DNSTAP_SEND_IDENTITY 426 #define VAR_DNSTAP_SEND_VERSION 427 #define VAR_DNSTAP_BIDIRECTIONAL 428 #define VAR_DNSTAP_IDENTITY 429 #define VAR_DNSTAP_VERSION 430 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436 #define VAR_RESPONSE_IP_TAG 437 #define VAR_RESPONSE_IP 438 #define VAR_RESPONSE_IP_DATA 439 #define VAR_HARDEN_ALGO_DOWNGRADE 440 #define VAR_IP_TRANSPARENT 441 #define VAR_IP_DSCP 442 #define VAR_DISABLE_DNSSEC_LAME_CHECK 443 #define VAR_IP_RATELIMIT 444 #define VAR_IP_RATELIMIT_SLABS 445 #define VAR_IP_RATELIMIT_SIZE 446 #define VAR_RATELIMIT 447 #define VAR_RATELIMIT_SLABS 448 #define VAR_RATELIMIT_SIZE 449 #define VAR_RATELIMIT_FOR_DOMAIN 450 #define VAR_RATELIMIT_BELOW_DOMAIN 451 #define VAR_IP_RATELIMIT_FACTOR 452 #define VAR_RATELIMIT_FACTOR 453 #define VAR_SEND_CLIENT_SUBNET 454 #define VAR_CLIENT_SUBNET_ZONE 455 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456 #define VAR_CLIENT_SUBNET_OPCODE 457 #define VAR_MAX_CLIENT_SUBNET_IPV4 458 #define VAR_MAX_CLIENT_SUBNET_IPV6 459 #define VAR_MIN_CLIENT_SUBNET_IPV4 460 #define VAR_MIN_CLIENT_SUBNET_IPV6 461 #define VAR_MAX_ECS_TREE_SIZE_IPV4 462 #define VAR_MAX_ECS_TREE_SIZE_IPV6 463 #define VAR_CAPS_WHITELIST 464 #define VAR_CACHE_MAX_NEGATIVE_TTL 465 #define VAR_PERMIT_SMALL_HOLDDOWN 466 #define VAR_QNAME_MINIMISATION 467 #define VAR_QNAME_MINIMISATION_STRICT 468 #define VAR_IP_FREEBIND 469 #define VAR_DEFINE_TAG 470 #define VAR_LOCAL_ZONE_TAG 471 #define VAR_ACCESS_CONTROL_TAG 472 #define VAR_LOCAL_ZONE_OVERRIDE 473 #define VAR_ACCESS_CONTROL_TAG_ACTION 474 #define VAR_ACCESS_CONTROL_TAG_DATA 475 #define VAR_VIEW 476 #define VAR_ACCESS_CONTROL_VIEW 477 #define VAR_VIEW_FIRST 478 #define VAR_SERVE_EXPIRED 479 #define VAR_SERVE_EXPIRED_TTL 480 #define VAR_SERVE_EXPIRED_TTL_RESET 481 #define VAR_SERVE_EXPIRED_REPLY_TTL 482 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483 #define VAR_SERVE_ORIGINAL_TTL 484 #define VAR_FAKE_DSA 485 #define VAR_FAKE_SHA1 486 #define VAR_LOG_IDENTITY 487 #define VAR_HIDE_TRUSTANCHOR 488 #define VAR_TRUST_ANCHOR_SIGNALING 489 #define VAR_AGGRESSIVE_NSEC 490 #define VAR_USE_SYSTEMD 491 #define VAR_SHM_ENABLE 492 #define VAR_SHM_KEY 493 #define VAR_ROOT_KEY_SENTINEL 494 #define VAR_DNSCRYPT 495 #define VAR_DNSCRYPT_ENABLE 496 #define VAR_DNSCRYPT_PORT 497 #define VAR_DNSCRYPT_PROVIDER 498 #define VAR_DNSCRYPT_SECRET_KEY 499 #define VAR_DNSCRYPT_PROVIDER_CERT 500 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 501 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 502 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 503 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 504 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 505 #define VAR_PAD_RESPONSES 506 #define VAR_PAD_RESPONSES_BLOCK_SIZE 507 #define VAR_PAD_QUERIES 508 #define VAR_PAD_QUERIES_BLOCK_SIZE 509 #define VAR_IPSECMOD_ENABLED 510 #define VAR_IPSECMOD_HOOK 511 #define VAR_IPSECMOD_IGNORE_BOGUS 512 #define VAR_IPSECMOD_MAX_TTL 513 #define VAR_IPSECMOD_WHITELIST 514 #define VAR_IPSECMOD_STRICT 515 #define VAR_CACHEDB 516 #define VAR_CACHEDB_BACKEND 517 #define VAR_CACHEDB_SECRETSEED 518 #define VAR_CACHEDB_REDISHOST 519 #define VAR_CACHEDB_REDISPORT 520 #define VAR_CACHEDB_REDISTIMEOUT 521 #define VAR_CACHEDB_REDISEXPIRERECORDS 522 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 523 #define VAR_FOR_UPSTREAM 524 #define VAR_AUTH_ZONE 525 #define VAR_ZONEFILE 526 #define VAR_MASTER 527 #define VAR_URL 528 #define VAR_FOR_DOWNSTREAM 529 #define VAR_FALLBACK_ENABLED 530 #define VAR_TLS_ADDITIONAL_PORT 531 #define VAR_LOW_RTT 532 #define VAR_LOW_RTT_PERMIL 533 #define VAR_FAST_SERVER_PERMIL 534 #define VAR_FAST_SERVER_NUM 535 #define VAR_ALLOW_NOTIFY 536 #define VAR_TLS_WIN_CERT 537 #define VAR_TCP_CONNECTION_LIMIT 538 #define VAR_FORWARD_NO_CACHE 539 #define VAR_STUB_NO_CACHE 540 #define VAR_LOG_SERVFAIL 541 #define VAR_DENY_ANY 542 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 543 #define VAR_LOG_TAG_QUERYREPLY 544 #define VAR_STREAM_WAIT_SIZE 545 #define VAR_TLS_CIPHERS 546 #define VAR_TLS_CIPHERSUITES 547 #define VAR_TLS_USE_SNI 548 #define VAR_IPSET 549 #define VAR_IPSET_NAME_V4 550 #define VAR_IPSET_NAME_V6 551 #define VAR_TLS_SESSION_TICKET_KEYS 552 #define VAR_RPZ 553 #define VAR_TAGS 554 #define VAR_RPZ_ACTION_OVERRIDE 555 #define VAR_RPZ_CNAME_OVERRIDE 556 #define VAR_RPZ_LOG 557 #define VAR_RPZ_LOG_NAME 558 #define VAR_DYNLIB 559 #define VAR_DYNLIB_FILE 560 #define VAR_EDNS_CLIENT_STRING 561 #define VAR_EDNS_CLIENT_STRING_OPCODE 562 #define VAR_NSID 563 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 66 "util/configparser.y" char* str; #line 686 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ unbound-1.13.1/util/edns.h0000644000175000017500000000755514010434640014772 0ustar wouterwouter/* * util/edns.h - handle base EDNS options. * * Copyright (c) 2018, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for base EDNS options. */ #ifndef UTIL_EDNS_H #define UTIL_EDNS_H #include "util/storage/dnstree.h" struct edns_data; struct config_file; struct comm_point; struct regional; /** * Structure containing all EDNS strings. */ struct edns_strings { /** Tree of EDNS client strings to use in upstream queries, per address * prefix. Contains nodes of type edns_string_addr. */ rbtree_type client_strings; /** EDNS opcode to use for client strings */ uint16_t client_string_opcode; /** region to allocate tree nodes in */ struct regional* region; }; /** * EDNS string. Node of rbtree, containing string and prefix. */ struct edns_string_addr { /** node in address tree, used for tree lookups. Need to be the first * member of this struct. */ struct addr_tree_node node; /** string, ascii format */ uint8_t* string; /** length of string */ size_t string_len; }; /** * Create structure to hold EDNS strings * @return: newly created edns_strings, NULL on alloc failure. */ struct edns_strings* edns_strings_create(void); /** Delete EDNS strings structure * @param edns_strings: struct to delete */ void edns_strings_delete(struct edns_strings* edns_strings); /** * Add configured EDNS strings * @param edns_strings: edns strings to apply config to * @param config: struct containing EDNS strings configuration * @return 0 on error */ int edns_strings_apply_cfg(struct edns_strings* edns_strings, struct config_file* config); /** * Find string for address. * @param tree: tree containing EDNS strings per address prefix. * @param addr: address to use for tree lookup * @param addrlen: length of address * @return: matching tree node, NULL otherwise */ struct edns_string_addr* edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen); /** * Apply common EDNS options. * * @param edns_out: initialised edns information with outbound edns. * @param edns_in: initialised edns information with received edns. * @param cfg: configuration. * @param c: comm channel. * @param region: the region to allocate the edns options in. */ int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in, struct config_file* cfg, struct comm_point* c, struct regional* region); #endif unbound-1.13.1/util/storage/0000755000175000017500000000000014010434640015320 5ustar wouterwouterunbound-1.13.1/util/storage/lookup3.h0000644000175000017500000000517714010434640017077 0ustar wouterwouter/* * util/storage/lookup3.h - header file for hashing functions. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains header definitions for the hash functions we use. * The hash functions are public domain (see lookup3.c). */ #ifndef UTIL_STORAGE_LOOKUP3_H #define UTIL_STORAGE_LOOKUP3_H /** * Hash key made of 4byte chunks. * @param k: the key, an array of uint32_t values * @param length: the length of the key, in uint32_ts * @param initval: the previous hash, or an arbitrary value * @return: hash value. */ uint32_t hashword(const uint32_t *k, size_t length, uint32_t initval); /** * Hash key data. * @param k: the key, array of uint8_t * @param length: the length of the key, in uint8_ts * @param initval: the previous hash, or an arbitrary value * @return: hash value. */ uint32_t hashlittle(const void *k, size_t length, uint32_t initval); /** * Set the randomisation initial value, set this before threads start, * and before hashing stuff (because it changes subsequent results). * @param v: value */ void hash_set_raninit(uint32_t v); #endif /* UTIL_STORAGE_LOOKUP3_H */ unbound-1.13.1/util/storage/dnstree.c0000644000175000017500000002375514010434640017144 0ustar wouterwouter/* * util/storage/dnstree.c - support for rbtree types suitable for DNS code. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains structures combining types and functions to * manipulate those structures that help building DNS lookup trees. */ #include "config.h" #include "util/storage/dnstree.h" #include "util/data/dname.h" #include "util/net_help.h" int name_tree_compare(const void* k1, const void* k2) { struct name_tree_node* x = (struct name_tree_node*)k1; struct name_tree_node* y = (struct name_tree_node*)k2; int m; if(x->dclass != y->dclass) { if(x->dclass < y->dclass) return -1; return 1; } return dname_lab_cmp(x->name, x->labs, y->name, y->labs, &m); } int addr_tree_compare(const void* k1, const void* k2) { struct addr_tree_node* n1 = (struct addr_tree_node*)k1; struct addr_tree_node* n2 = (struct addr_tree_node*)k2; int r = sockaddr_cmp_addr(&n1->addr, n1->addrlen, &n2->addr, n2->addrlen); if(r != 0) return r; if(n1->net < n2->net) return -1; if(n1->net > n2->net) return 1; return 0; } void name_tree_init(rbtree_type* tree) { rbtree_init(tree, &name_tree_compare); } void addr_tree_init(rbtree_type* tree) { rbtree_init(tree, &addr_tree_compare); } int name_tree_insert(rbtree_type* tree, struct name_tree_node* node, uint8_t* name, size_t len, int labs, uint16_t dclass) { node->node.key = node; node->name = name; node->len = len; node->labs = labs; node->dclass = dclass; node->parent = NULL; return rbtree_insert(tree, &node->node) != NULL; } int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node, struct sockaddr_storage* addr, socklen_t addrlen, int net) { node->node.key = node; memcpy(&node->addr, addr, addrlen); node->addrlen = addrlen; node->net = net; node->parent = NULL; return rbtree_insert(tree, &node->node) != NULL; } void addr_tree_init_parents_node(struct addr_tree_node* node) { struct addr_tree_node* prev = NULL, *p; int m; for(; (rbnode_type*)node != RBTREE_NULL; node = (struct addr_tree_node*)rbtree_next((rbnode_type*)node)) { node->parent = NULL; if(!prev || prev->addrlen != node->addrlen) { prev = node; continue; } m = addr_in_common(&prev->addr, prev->net, &node->addr, node->net, node->addrlen); /* sort order like: ::/0, 1::/2, 1::/4, ... 2::/2 */ /* find the previous, or parent-parent-parent */ for(p = prev; p; p = p->parent) if(p->net <= m) { /* ==: since prev matched m, this is closest*/ /* <: prev matches more, but is not a parent, * this one is a (grand)parent */ node->parent = p; break; } prev = node; } } void addr_tree_init_parents(rbtree_type* tree) { addr_tree_init_parents_node( (struct addr_tree_node*)rbtree_first(tree)); } void name_tree_init_parents(rbtree_type* tree) { struct name_tree_node* node, *prev = NULL, *p; int m; RBTREE_FOR(node, struct name_tree_node*, tree) { node->parent = NULL; if(!prev || prev->dclass != node->dclass) { prev = node; continue; } (void)dname_lab_cmp(prev->name, prev->labs, node->name, node->labs, &m); /* we know prev is smaller */ /* sort order like: . com. bla.com. zwb.com. net. */ /* find the previous, or parent-parent-parent */ for(p = prev; p; p = p->parent) if(p->labs <= m) { /* ==: since prev matched m, this is closest*/ /* <: prev matches more, but is not a parent, * this one is a (grand)parent */ node->parent = p; break; } prev = node; } } struct name_tree_node* name_tree_find(rbtree_type* tree, uint8_t* name, size_t len, int labs, uint16_t dclass) { struct name_tree_node key; key.node.key = &key; key.name = name; key.len = len; key.labs = labs; key.dclass = dclass; return (struct name_tree_node*)rbtree_search(tree, &key); } struct name_tree_node* name_tree_lookup(rbtree_type* tree, uint8_t* name, size_t len, int labs, uint16_t dclass) { rbnode_type* res = NULL; struct name_tree_node *result; struct name_tree_node key; key.node.key = &key; key.name = name; key.len = len; key.labs = labs; key.dclass = dclass; if(rbtree_find_less_equal(tree, &key, &res)) { /* exact */ result = (struct name_tree_node*)res; } else { /* smaller element (or no element) */ int m; result = (struct name_tree_node*)res; if(!result || result->dclass != dclass) return NULL; /* count number of labels matched */ (void)dname_lab_cmp(result->name, result->labs, key.name, key.labs, &m); while(result) { /* go up until qname is subdomain of stub */ if(result->labs <= m) break; result = result->parent; } } return result; } struct addr_tree_node* addr_tree_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen) { rbnode_type* res = NULL; struct addr_tree_node* result; struct addr_tree_node key; key.node.key = &key; memcpy(&key.addr, addr, addrlen); key.addrlen = addrlen; key.net = (addr_is_ip6(addr, addrlen)?128:32); if(rbtree_find_less_equal(tree, &key, &res)) { /* exact */ return (struct addr_tree_node*)res; } else { /* smaller element (or no element) */ int m; result = (struct addr_tree_node*)res; if(!result || result->addrlen != addrlen) return 0; /* count number of bits matched */ m = addr_in_common(&result->addr, result->net, addr, key.net, addrlen); while(result) { /* go up until addr is inside netblock */ if(result->net <= m) break; result = result->parent; } } return result; } struct addr_tree_node* addr_tree_find(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen, int net) { rbnode_type* res = NULL; struct addr_tree_node key; key.node.key = &key; memcpy(&key.addr, addr, addrlen); key.addrlen = addrlen; key.net = net; res = rbtree_search(tree, &key); return (struct addr_tree_node*)res; } int name_tree_next_root(rbtree_type* tree, uint16_t* dclass) { struct name_tree_node key; rbnode_type* n; struct name_tree_node* p; if(*dclass == 0) { /* first root item is first item in tree */ n = rbtree_first(tree); if(n == RBTREE_NULL) return 0; p = (struct name_tree_node*)n; if(dname_is_root(p->name)) { *dclass = p->dclass; return 1; } /* root not first item? search for higher items */ *dclass = p->dclass + 1; return name_tree_next_root(tree, dclass); } /* find class n in tree, we may get a direct hit, or if we don't * this is the last item of the previous class so rbtree_next() takes * us to the next root (if any) */ key.node.key = &key; key.name = (uint8_t*)"\000"; key.len = 1; key.labs = 0; key.dclass = *dclass; n = NULL; if(rbtree_find_less_equal(tree, &key, &n)) { /* exact */ return 1; } else { /* smaller element */ if(!n || n == RBTREE_NULL) return 0; /* nothing found */ n = rbtree_next(n); if(n == RBTREE_NULL) return 0; /* no higher */ p = (struct name_tree_node*)n; if(dname_is_root(p->name)) { *dclass = p->dclass; return 1; } /* not a root node, return next higher item */ *dclass = p->dclass+1; return name_tree_next_root(tree, dclass); } } unbound-1.13.1/util/storage/lookup3.c0000644000175000017500000010752514010434640017072 0ustar wouterwouter/* May 2019(Wouter) patch to enable the valgrind clean implementation all the time. This enables better security audit and checks, which is better than the speedup. Git issue #30. Renamed the define ARRAY_CLEAN_ACCESS. February 2013(Wouter) patch defines for BSD endianness, from Brad Smith. January 2012(Wouter) added randomised initial value, fallout from 28c3. March 2007(Wouter) adapted from lookup3.c original, add config.h include. added #ifdef VALGRIND to remove 298,384,660 'unused variable k8' warnings. added include of lookup3.h to check definitions match declarations. removed include of stdint - config.h takes care of platform independence. added fallthrough comments for new gcc warning suppression. url http://burtleburtle.net/bob/hash/index.html. */ /* ------------------------------------------------------------------------------- lookup3.c, by Bob Jenkins, May 2006, Public Domain. These are functions for producing 32-bit hashes for hash table lookup. hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final() are externally useful functions. Routines to test the hash are included if SELF_TEST is defined. You can use this free for any purpose. It's in the public domain. It has no warranty. You probably want to use hashlittle(). hashlittle() and hashbig() hash byte arrays. hashlittle() is is faster than hashbig() on little-endian machines. Intel and AMD are little-endian machines. On second thought, you probably want hashlittle2(), which is identical to hashlittle() except it returns two 32-bit hashes for the price of one. You could implement hashbig2() if you wanted but I haven't bothered here. If you want to find a hash of, say, exactly 7 integers, do a = i1; b = i2; c = i3; mix(a,b,c); a += i4; b += i5; c += i6; mix(a,b,c); a += i7; final(a,b,c); then use c as the hash value. If you have a variable length array of 4-byte integers to hash, use hashword(). If you have a byte array (like a character string), use hashlittle(). If you have several byte arrays, or a mix of things, see the comments above hashlittle(). Why is this so big? I read 12 bytes at a time into 3 4-byte integers, then mix those integers. This is fast (you can do a lot more thorough mixing with 12*3 instructions on 3 integers than you can with 3 instructions on 1 byte), but shoehorning those bytes into integers efficiently is messy. ------------------------------------------------------------------------------- */ /*#define SELF_TEST 1*/ #define ARRAY_CLEAN_ACCESS 1 #include "config.h" #include "util/storage/lookup3.h" #include /* defines printf for tests */ #include /* defines time_t for timings in the test */ /*#include defines uint32_t etc (from config.h) */ #include /* attempt to define endianness */ #ifdef HAVE_SYS_TYPES_H # include /* attempt to define endianness (solaris) */ #endif #if defined(linux) || defined(__OpenBSD__) # ifdef HAVE_ENDIAN_H # include /* attempt to define endianness */ # else # include /* on older OpenBSD */ # endif #endif #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) #include /* attempt to define endianness */ #endif /* random initial value */ static uint32_t raninit = (uint32_t)0xdeadbeef; void hash_set_raninit(uint32_t v) { raninit = v; } /* * My best guess at if you are big-endian or little-endian. This may * need adjustment. */ #if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \ __BYTE_ORDER == __LITTLE_ENDIAN) || \ (defined(i386) || defined(__i386__) || defined(__i486__) || \ defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL) || defined(__x86)) # define HASH_LITTLE_ENDIAN 1 # define HASH_BIG_ENDIAN 0 #elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \ __BYTE_ORDER == __BIG_ENDIAN) || \ (defined(sparc) || defined(__sparc) || defined(__sparc__) || defined(POWERPC) || defined(mc68000) || defined(sel)) # define HASH_LITTLE_ENDIAN 0 # define HASH_BIG_ENDIAN 1 #elif defined(_MACHINE_ENDIAN_H_) /* test for machine_endian_h protects failure if some are empty strings */ # if defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && _BYTE_ORDER == _BIG_ENDIAN # define HASH_LITTLE_ENDIAN 0 # define HASH_BIG_ENDIAN 1 # endif # if defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && _BYTE_ORDER == _LITTLE_ENDIAN # define HASH_LITTLE_ENDIAN 1 # define HASH_BIG_ENDIAN 0 # endif /* _MACHINE_ENDIAN_H_ */ #else # define HASH_LITTLE_ENDIAN 0 # define HASH_BIG_ENDIAN 0 #endif #define hashsize(n) ((uint32_t)1<<(n)) #define hashmask(n) (hashsize(n)-1) #define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) /* ------------------------------------------------------------------------------- mix -- mix 3 32-bit values reversibly. This is reversible, so any information in (a,b,c) before mix() is still in (a,b,c) after mix(). If four pairs of (a,b,c) inputs are run through mix(), or through mix() in reverse, there are at least 32 bits of the output that are sometimes the same for one pair and different for another pair. This was tested for: * pairs that differed by one bit, by two bits, in any combination of top bits of (a,b,c), or in any combination of bottom bits of (a,b,c). * "differ" is defined as +, -, ^, or ~^. For + and -, I transformed the output delta to a Gray code (a^(a>>1)) so a string of 1's (as is commonly produced by subtraction) look like a single 1-bit difference. * the base values were pseudorandom, all zero but one bit set, or all zero plus a counter that starts at zero. Some k values for my "a-=c; a^=rot(c,k); c+=b;" arrangement that satisfy this are 4 6 8 16 19 4 9 15 3 18 27 15 14 9 3 7 17 3 Well, "9 15 3 18 27 15" didn't quite get 32 bits diffing for "differ" defined as + with a one-bit base and a two-bit delta. I used http://burtleburtle.net/bob/hash/avalanche.html to choose the operations, constants, and arrangements of the variables. This does not achieve avalanche. There are input bits of (a,b,c) that fail to affect some output bits of (a,b,c), especially of a. The most thoroughly mixed value is c, but it doesn't really even achieve avalanche in c. This allows some parallelism. Read-after-writes are good at doubling the number of bits affected, so the goal of mixing pulls in the opposite direction as the goal of parallelism. I did what I could. Rotates seem to cost as much as shifts on every machine I could lay my hands on, and rotates are much kinder to the top and bottom bits, so I used rotates. ------------------------------------------------------------------------------- */ #define mix(a,b,c) \ { \ a -= c; a ^= rot(c, 4); c += b; \ b -= a; b ^= rot(a, 6); a += c; \ c -= b; c ^= rot(b, 8); b += a; \ a -= c; a ^= rot(c,16); c += b; \ b -= a; b ^= rot(a,19); a += c; \ c -= b; c ^= rot(b, 4); b += a; \ } /* ------------------------------------------------------------------------------- final -- final mixing of 3 32-bit values (a,b,c) into c Pairs of (a,b,c) values differing in only a few bits will usually produce values of c that look totally different. This was tested for * pairs that differed by one bit, by two bits, in any combination of top bits of (a,b,c), or in any combination of bottom bits of (a,b,c). * "differ" is defined as +, -, ^, or ~^. For + and -, I transformed the output delta to a Gray code (a^(a>>1)) so a string of 1's (as is commonly produced by subtraction) look like a single 1-bit difference. * the base values were pseudorandom, all zero but one bit set, or all zero plus a counter that starts at zero. These constants passed: 14 11 25 16 4 14 24 12 14 25 16 4 14 24 and these came close: 4 8 15 26 3 22 24 10 8 15 26 3 22 24 11 8 15 26 3 22 24 ------------------------------------------------------------------------------- */ #define final(a,b,c) \ { \ c ^= b; c -= rot(b,14); \ a ^= c; a -= rot(c,11); \ b ^= a; b -= rot(a,25); \ c ^= b; c -= rot(b,16); \ a ^= c; a -= rot(c,4); \ b ^= a; b -= rot(a,14); \ c ^= b; c -= rot(b,24); \ } /* -------------------------------------------------------------------- This works on all machines. To be useful, it requires -- that the key be an array of uint32_t's, and -- that the length be the number of uint32_t's in the key The function hashword() is identical to hashlittle() on little-endian machines, and identical to hashbig() on big-endian machines, except that the length has to be measured in uint32_ts rather than in bytes. hashlittle() is more complicated than hashword() only because hashlittle() has to dance around fitting the key bytes into registers. -------------------------------------------------------------------- */ uint32_t hashword( const uint32_t *k, /* the key, an array of uint32_t values */ size_t length, /* the length of the key, in uint32_ts */ uint32_t initval) /* the previous hash, or an arbitrary value */ { uint32_t a,b,c; /* Set up the internal state */ a = b = c = raninit + (((uint32_t)length)<<2) + initval; /*------------------------------------------------- handle most of the key */ while (length > 3) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); length -= 3; k += 3; } /*------------------------------------------- handle the last 3 uint32_t's */ switch(length) /* all the case statements fall through */ { case 3 : c+=k[2]; /* fallthrough */ case 2 : b+=k[1]; /* fallthrough */ case 1 : a+=k[0]; final(a,b,c); case 0: /* case 0: nothing left to add */ break; } /*------------------------------------------------------ report the result */ return c; } #ifdef SELF_TEST /* -------------------------------------------------------------------- hashword2() -- same as hashword(), but take two seeds and return two 32-bit values. pc and pb must both be nonnull, and *pc and *pb must both be initialized with seeds. If you pass in (*pb)==0, the output (*pc) will be the same as the return value from hashword(). -------------------------------------------------------------------- */ void hashword2 ( const uint32_t *k, /* the key, an array of uint32_t values */ size_t length, /* the length of the key, in uint32_ts */ uint32_t *pc, /* IN: seed OUT: primary hash value */ uint32_t *pb) /* IN: more seed OUT: secondary hash value */ { uint32_t a,b,c; /* Set up the internal state */ a = b = c = raninit + ((uint32_t)(length<<2)) + *pc; c += *pb; /*------------------------------------------------- handle most of the key */ while (length > 3) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); length -= 3; k += 3; } /*------------------------------------------- handle the last 3 uint32_t's */ switch(length) /* all the case statements fall through */ { case 3 : c+=k[2]; case 2 : b+=k[1]; case 1 : a+=k[0]; final(a,b,c); case 0: /* case 0: nothing left to add */ break; } /*------------------------------------------------------ report the result */ *pc=c; *pb=b; } #endif /* SELF_TEST */ /* ------------------------------------------------------------------------------- hashlittle() -- hash a variable-length key into a 32-bit value k : the key (the unaligned variable-length array of bytes) length : the length of the key, counting by bytes initval : can be any 4-byte value Returns a 32-bit value. Every bit of the key affects every bit of the return value. Two keys differing by one or two bits will have totally different hash values. The best hash table sizes are powers of 2. There is no need to do mod a prime (mod is sooo slow!). If you need less than 32 bits, use a bitmask. For example, if you need only 10 bits, do h = (h & hashmask(10)); In which case, the hash table should have hashsize(10) elements. If you are hashing n strings (uint8_t **)k, do it like this: for (i=0, h=0; i 12) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); length -= 12; k += 3; } /*----------------------------- handle the last (probably partial) block */ /* * "k[2]&0xffffff" actually reads beyond the end of the string, but * then masks off the part it's not allowed to read. Because the * string is aligned, the masked-off tail is in the same word as the * rest of the string. Every machine with memory protection I've seen * does it on word boundaries, so is OK with this. But VALGRIND will * still catch it and complain. The masking trick does make the hash * noticeably faster for short strings (like English words). */ #ifndef ARRAY_CLEAN_ACCESS switch(length) { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break; case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break; case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break; case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=k[1]&0xffffff; a+=k[0]; break; case 6 : b+=k[1]&0xffff; a+=k[0]; break; case 5 : b+=k[1]&0xff; a+=k[0]; break; case 4 : a+=k[0]; break; case 3 : a+=k[0]&0xffffff; break; case 2 : a+=k[0]&0xffff; break; case 1 : a+=k[0]&0xff; break; case 0 : return c; /* zero length strings require no mixing */ } #else /* make valgrind happy */ k8 = (const uint8_t *)k; switch(length) { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ case 10: c+=((uint32_t)k8[9])<<8; /* fall through */ case 9 : c+=k8[8]; /* fall through */ case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ case 6 : b+=((uint32_t)k8[5])<<8; /* fall through */ case 5 : b+=k8[4]; /* fall through */ case 4 : a+=k[0]; break; case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ case 2 : a+=((uint32_t)k8[1])<<8; /* fall through */ case 1 : a+=k8[0]; break; case 0 : return c; } #endif /* !valgrind */ } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) { const uint16_t *k = (const uint16_t *)key; /* read 16-bit chunks */ const uint8_t *k8; /*--------------- all but last block: aligned reads and different mixing */ while (length > 12) { a += k[0] + (((uint32_t)k[1])<<16); b += k[2] + (((uint32_t)k[3])<<16); c += k[4] + (((uint32_t)k[5])<<16); mix(a,b,c); length -= 12; k += 6; } /*----------------------------- handle the last (probably partial) block */ k8 = (const uint8_t *)k; switch(length) { case 12: c+=k[4]+(((uint32_t)k[5])<<16); b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ case 10: c+=k[4]; b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 9 : c+=k8[8]; /* fall through */ case 8 : b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ case 6 : b+=k[2]; a+=k[0]+(((uint32_t)k[1])<<16); break; case 5 : b+=k8[4]; /* fall through */ case 4 : a+=k[0]+(((uint32_t)k[1])<<16); break; case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ case 2 : a+=k[0]; break; case 1 : a+=k8[0]; break; case 0 : return c; /* zero length requires no mixing */ } } else { /* need to read the key one byte at a time */ const uint8_t *k = (const uint8_t *)key; /*--------------- all but the last block: affect some 32 bits of (a,b,c) */ while (length > 12) { a += k[0]; a += ((uint32_t)k[1])<<8; a += ((uint32_t)k[2])<<16; a += ((uint32_t)k[3])<<24; b += k[4]; b += ((uint32_t)k[5])<<8; b += ((uint32_t)k[6])<<16; b += ((uint32_t)k[7])<<24; c += k[8]; c += ((uint32_t)k[9])<<8; c += ((uint32_t)k[10])<<16; c += ((uint32_t)k[11])<<24; mix(a,b,c); length -= 12; k += 12; } /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { case 12: c+=((uint32_t)k[11])<<24; /* fallthrough */ case 11: c+=((uint32_t)k[10])<<16; /* fallthrough */ case 10: c+=((uint32_t)k[9])<<8; /* fallthrough */ case 9 : c+=k[8]; /* fallthrough */ case 8 : b+=((uint32_t)k[7])<<24; /* fallthrough */ case 7 : b+=((uint32_t)k[6])<<16; /* fallthrough */ case 6 : b+=((uint32_t)k[5])<<8; /* fallthrough */ case 5 : b+=k[4]; /* fallthrough */ case 4 : a+=((uint32_t)k[3])<<24; /* fallthrough */ case 3 : a+=((uint32_t)k[2])<<16; /* fallthrough */ case 2 : a+=((uint32_t)k[1])<<8; /* fallthrough */ case 1 : a+=k[0]; break; case 0 : return c; } } final(a,b,c); return c; } #ifdef SELF_TEST /* * hashlittle2: return 2 32-bit hash values * * This is identical to hashlittle(), except it returns two 32-bit hash * values instead of just one. This is good enough for hash table * lookup with 2^^64 buckets, or if you want a second hash if you're not * happy with the first, or if you want a probably-unique 64-bit ID for * the key. *pc is better mixed than *pb, so use *pc first. If you want * a 64-bit value do something like "*pc + (((uint64_t)*pb)<<32)". */ void hashlittle2( const void *key, /* the key to hash */ size_t length, /* length of the key */ uint32_t *pc, /* IN: primary initval, OUT: primary hash */ uint32_t *pb) /* IN: secondary initval, OUT: secondary hash */ { uint32_t a,b,c; /* internal state */ union { const void *ptr; size_t i; } u; /* needed for Mac Powerbook G4 */ /* Set up the internal state */ a = b = c = raninit + ((uint32_t)length) + *pc; c += *pb; u.ptr = key; if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) { const uint32_t *k = (const uint32_t *)key; /* read 32-bit chunks */ #ifdef VALGRIND const uint8_t *k8; #endif /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */ while (length > 12) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); length -= 12; k += 3; } /*----------------------------- handle the last (probably partial) block */ /* * "k[2]&0xffffff" actually reads beyond the end of the string, but * then masks off the part it's not allowed to read. Because the * string is aligned, the masked-off tail is in the same word as the * rest of the string. Every machine with memory protection I've seen * does it on word boundaries, so is OK with this. But VALGRIND will * still catch it and complain. The masking trick does make the hash * noticeably faster for short strings (like English words). */ #ifndef VALGRIND switch(length) { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break; case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break; case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break; case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=k[1]&0xffffff; a+=k[0]; break; case 6 : b+=k[1]&0xffff; a+=k[0]; break; case 5 : b+=k[1]&0xff; a+=k[0]; break; case 4 : a+=k[0]; break; case 3 : a+=k[0]&0xffffff; break; case 2 : a+=k[0]&0xffff; break; case 1 : a+=k[0]&0xff; break; case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */ } #else /* make valgrind happy */ k8 = (const uint8_t *)k; switch(length) { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ case 10: c+=((uint32_t)k8[9])<<8; /* fall through */ case 9 : c+=k8[8]; /* fall through */ case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ case 6 : b+=((uint32_t)k8[5])<<8; /* fall through */ case 5 : b+=k8[4]; /* fall through */ case 4 : a+=k[0]; break; case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ case 2 : a+=((uint32_t)k8[1])<<8; /* fall through */ case 1 : a+=k8[0]; break; case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */ } #endif /* !valgrind */ } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) { const uint16_t *k = (const uint16_t *)key; /* read 16-bit chunks */ const uint8_t *k8; /*--------------- all but last block: aligned reads and different mixing */ while (length > 12) { a += k[0] + (((uint32_t)k[1])<<16); b += k[2] + (((uint32_t)k[3])<<16); c += k[4] + (((uint32_t)k[5])<<16); mix(a,b,c); length -= 12; k += 6; } /*----------------------------- handle the last (probably partial) block */ k8 = (const uint8_t *)k; switch(length) { case 12: c+=k[4]+(((uint32_t)k[5])<<16); b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ case 10: c+=k[4]; b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 9 : c+=k8[8]; /* fall through */ case 8 : b+=k[2]+(((uint32_t)k[3])<<16); a+=k[0]+(((uint32_t)k[1])<<16); break; case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ case 6 : b+=k[2]; a+=k[0]+(((uint32_t)k[1])<<16); break; case 5 : b+=k8[4]; /* fall through */ case 4 : a+=k[0]+(((uint32_t)k[1])<<16); break; case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ case 2 : a+=k[0]; break; case 1 : a+=k8[0]; break; case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */ } } else { /* need to read the key one byte at a time */ const uint8_t *k = (const uint8_t *)key; /*--------------- all but the last block: affect some 32 bits of (a,b,c) */ while (length > 12) { a += k[0]; a += ((uint32_t)k[1])<<8; a += ((uint32_t)k[2])<<16; a += ((uint32_t)k[3])<<24; b += k[4]; b += ((uint32_t)k[5])<<8; b += ((uint32_t)k[6])<<16; b += ((uint32_t)k[7])<<24; c += k[8]; c += ((uint32_t)k[9])<<8; c += ((uint32_t)k[10])<<16; c += ((uint32_t)k[11])<<24; mix(a,b,c); length -= 12; k += 12; } /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { case 12: c+=((uint32_t)k[11])<<24; case 11: c+=((uint32_t)k[10])<<16; case 10: c+=((uint32_t)k[9])<<8; case 9 : c+=k[8]; case 8 : b+=((uint32_t)k[7])<<24; case 7 : b+=((uint32_t)k[6])<<16; case 6 : b+=((uint32_t)k[5])<<8; case 5 : b+=k[4]; case 4 : a+=((uint32_t)k[3])<<24; case 3 : a+=((uint32_t)k[2])<<16; case 2 : a+=((uint32_t)k[1])<<8; case 1 : a+=k[0]; break; case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */ } } final(a,b,c); *pc=c; *pb=b; } #endif /* SELF_TEST */ #if 0 /* currently not used */ /* * hashbig(): * This is the same as hashword() on big-endian machines. It is different * from hashlittle() on all machines. hashbig() takes advantage of * big-endian byte ordering. */ uint32_t hashbig( const void *key, size_t length, uint32_t initval) { uint32_t a,b,c; union { const void *ptr; size_t i; } u; /* to cast key to (size_t) happily */ /* Set up the internal state */ a = b = c = raninit + ((uint32_t)length) + initval; u.ptr = key; if (HASH_BIG_ENDIAN && ((u.i & 0x3) == 0)) { const uint32_t *k = (const uint32_t *)key; /* read 32-bit chunks */ #ifdef VALGRIND const uint8_t *k8; #endif /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */ while (length > 12) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); length -= 12; k += 3; } /*----------------------------- handle the last (probably partial) block */ /* * "k[2]<<8" actually reads beyond the end of the string, but * then shifts out the part it's not allowed to read. Because the * string is aligned, the illegal read is in the same word as the * rest of the string. Every machine with memory protection I've seen * does it on word boundaries, so is OK with this. But VALGRIND will * still catch it and complain. The masking trick does make the hash * noticeably faster for short strings (like English words). */ #ifndef VALGRIND switch(length) { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=k[2]&0xffffff00; b+=k[1]; a+=k[0]; break; case 10: c+=k[2]&0xffff0000; b+=k[1]; a+=k[0]; break; case 9 : c+=k[2]&0xff000000; b+=k[1]; a+=k[0]; break; case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=k[1]&0xffffff00; a+=k[0]; break; case 6 : b+=k[1]&0xffff0000; a+=k[0]; break; case 5 : b+=k[1]&0xff000000; a+=k[0]; break; case 4 : a+=k[0]; break; case 3 : a+=k[0]&0xffffff00; break; case 2 : a+=k[0]&0xffff0000; break; case 1 : a+=k[0]&0xff000000; break; case 0 : return c; /* zero length strings require no mixing */ } #else /* make valgrind happy */ k8 = (const uint8_t *)k; switch(length) /* all the case statements fall through */ { case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; case 11: c+=((uint32_t)k8[10])<<8; /* fall through */ case 10: c+=((uint32_t)k8[9])<<16; /* fall through */ case 9 : c+=((uint32_t)k8[8])<<24; /* fall through */ case 8 : b+=k[1]; a+=k[0]; break; case 7 : b+=((uint32_t)k8[6])<<8; /* fall through */ case 6 : b+=((uint32_t)k8[5])<<16; /* fall through */ case 5 : b+=((uint32_t)k8[4])<<24; /* fall through */ case 4 : a+=k[0]; break; case 3 : a+=((uint32_t)k8[2])<<8; /* fall through */ case 2 : a+=((uint32_t)k8[1])<<16; /* fall through */ case 1 : a+=((uint32_t)k8[0])<<24; break; case 0 : return c; } #endif /* !VALGRIND */ } else { /* need to read the key one byte at a time */ const uint8_t *k = (const uint8_t *)key; /*--------------- all but the last block: affect some 32 bits of (a,b,c) */ while (length > 12) { a += ((uint32_t)k[0])<<24; a += ((uint32_t)k[1])<<16; a += ((uint32_t)k[2])<<8; a += ((uint32_t)k[3]); b += ((uint32_t)k[4])<<24; b += ((uint32_t)k[5])<<16; b += ((uint32_t)k[6])<<8; b += ((uint32_t)k[7]); c += ((uint32_t)k[8])<<24; c += ((uint32_t)k[9])<<16; c += ((uint32_t)k[10])<<8; c += ((uint32_t)k[11]); mix(a,b,c); length -= 12; k += 12; } /*-------------------------------- last block: affect all 32 bits of (c) */ switch(length) /* all the case statements fall through */ { case 12: c+=k[11]; case 11: c+=((uint32_t)k[10])<<8; case 10: c+=((uint32_t)k[9])<<16; case 9 : c+=((uint32_t)k[8])<<24; case 8 : b+=k[7]; case 7 : b+=((uint32_t)k[6])<<8; case 6 : b+=((uint32_t)k[5])<<16; case 5 : b+=((uint32_t)k[4])<<24; case 4 : a+=k[3]; case 3 : a+=((uint32_t)k[2])<<8; case 2 : a+=((uint32_t)k[1])<<16; case 1 : a+=((uint32_t)k[0])<<24; break; case 0 : return c; } } final(a,b,c); return c; } #endif /* 0 == currently not used */ #ifdef SELF_TEST /* used for timings */ void driver1(void) { uint8_t buf[256]; uint32_t i; uint32_t h=0; time_t a,z; time(&a); for (i=0; i<256; ++i) buf[i] = 'x'; for (i=0; i<1; ++i) { h = hashlittle(&buf[0],1,h); } time(&z); if (z-a > 0) printf("time %d %.8x\n", z-a, h); } /* check that every input bit changes every output bit half the time */ #define HASHSTATE 1 #define HASHLEN 1 #define MAXPAIR 60 #define MAXLEN 70 void driver2(void) { uint8_t qa[MAXLEN+1], qb[MAXLEN+2], *a = &qa[0], *b = &qb[1]; uint32_t c[HASHSTATE], d[HASHSTATE], i=0, j=0, k, l, m=0, z; uint32_t e[HASHSTATE],f[HASHSTATE],g[HASHSTATE],h[HASHSTATE]; uint32_t x[HASHSTATE],y[HASHSTATE]; uint32_t hlen; printf("No more than %d trials should ever be needed \n",MAXPAIR/2); for (hlen=0; hlen < MAXLEN; ++hlen) { z=0; for (i=0; i>(8-j)); c[0] = hashlittle(a, hlen, m); b[i] ^= ((k+1)<>(8-j)); d[0] = hashlittle(b, hlen, m); /* check every bit is 1, 0, set, and not set at least once */ for (l=0; lz) z=k; if (k==MAXPAIR) { printf("Some bit didn't change: "); printf("%.8x %.8x %.8x %.8x %.8x %.8x ", e[0],f[0],g[0],h[0],x[0],y[0]); printf("i %d j %d m %d len %d\n", i, j, m, hlen); } if (z==MAXPAIR) goto done; } } } done: if (z < MAXPAIR) { printf("Mix success %2d bytes %2d initvals ",i,m); printf("required %d trials\n", z/2); } } printf("\n"); } /* Check for reading beyond the end of the buffer and alignment problems */ void driver3(void) { uint8_t buf[MAXLEN+20], *b; uint32_t len; uint8_t q[] = "This is the time for all good men to come to the aid of their country..."; uint32_t h; uint8_t qq[] = "xThis is the time for all good men to come to the aid of their country..."; uint32_t i; uint8_t qqq[] = "xxThis is the time for all good men to come to the aid of their country..."; uint32_t j; uint8_t qqqq[] = "xxxThis is the time for all good men to come to the aid of their country..."; uint32_t ref,x,y; uint8_t *p; printf("Endianness. These lines should all be the same (for values filled in):\n"); printf("%.8x %.8x %.8x\n", hashword((const uint32_t *)q, (sizeof(q)-1)/4, 13), hashword((const uint32_t *)q, (sizeof(q)-5)/4, 13), hashword((const uint32_t *)q, (sizeof(q)-9)/4, 13)); p = q; printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n", hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13), hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13), hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13), hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13), hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13), hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13)); p = &qq[1]; printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n", hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13), hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13), hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13), hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13), hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13), hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13)); p = &qqq[2]; printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n", hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13), hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13), hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13), hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13), hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13), hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13)); p = &qqqq[3]; printf("%.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x %.8x\n", hashlittle(p, sizeof(q)-1, 13), hashlittle(p, sizeof(q)-2, 13), hashlittle(p, sizeof(q)-3, 13), hashlittle(p, sizeof(q)-4, 13), hashlittle(p, sizeof(q)-5, 13), hashlittle(p, sizeof(q)-6, 13), hashlittle(p, sizeof(q)-7, 13), hashlittle(p, sizeof(q)-8, 13), hashlittle(p, sizeof(q)-9, 13), hashlittle(p, sizeof(q)-10, 13), hashlittle(p, sizeof(q)-11, 13), hashlittle(p, sizeof(q)-12, 13)); printf("\n"); /* check that hashlittle2 and hashlittle produce the same results */ i=47; j=0; hashlittle2(q, sizeof(q), &i, &j); if (hashlittle(q, sizeof(q), 47) != i) printf("hashlittle2 and hashlittle mismatch\n"); /* check that hashword2 and hashword produce the same results */ len = raninit; i=47, j=0; hashword2(&len, 1, &i, &j); if (hashword(&len, 1, 47) != i) printf("hashword2 and hashword mismatch %x %x\n", i, hashword(&len, 1, 47)); /* check hashlittle doesn't read before or after the ends of the string */ for (h=0, b=buf+1; h<8; ++h, ++b) { for (i=0; ilock); table->sizefunc = sizefunc; table->compfunc = compfunc; table->delkeyfunc = delkeyfunc; table->deldatafunc = deldatafunc; table->cb_arg = arg; table->size = start_size; table->size_mask = (int)(start_size-1); table->lru_start = NULL; table->lru_end = NULL; table->num = 0; table->space_used = 0; table->space_max = maxmem; table->array = calloc(table->size, sizeof(struct lruhash_bin)); if(!table->array) { lock_quick_destroy(&table->lock); free(table); return NULL; } bin_init(table->array, table->size); lock_protect(&table->lock, table, sizeof(*table)); lock_protect(&table->lock, table->array, table->size*sizeof(struct lruhash_bin)); return table; } void bin_delete(struct lruhash* table, struct lruhash_bin* bin) { struct lruhash_entry* p, *np; void *d; if(!bin) return; lock_quick_destroy(&bin->lock); p = bin->overflow_list; bin->overflow_list = NULL; while(p) { np = p->overflow_next; d = p->data; (*table->delkeyfunc)(p->key, table->cb_arg); (*table->deldatafunc)(d, table->cb_arg); p = np; } } void bin_split(struct lruhash* table, struct lruhash_bin* newa, int newmask) { size_t i; struct lruhash_entry *p, *np; struct lruhash_bin* newbin; /* move entries to new table. Notice that since hash x is mapped to * bin x & mask, and new mask uses one more bit, so all entries in * one bin will go into the old bin or bin | newbit */ #ifndef THREADS_DISABLED int newbit = newmask - table->size_mask; #endif /* so, really, this task could also be threaded, per bin. */ /* LRU list is not changed */ for(i=0; isize; i++) { lock_quick_lock(&table->array[i].lock); p = table->array[i].overflow_list; /* lock both destination bins */ lock_quick_lock(&newa[i].lock); lock_quick_lock(&newa[newbit|i].lock); while(p) { np = p->overflow_next; /* link into correct new bin */ newbin = &newa[p->hash & newmask]; p->overflow_next = newbin->overflow_list; newbin->overflow_list = p; p=np; } lock_quick_unlock(&newa[i].lock); lock_quick_unlock(&newa[newbit|i].lock); lock_quick_unlock(&table->array[i].lock); } } void lruhash_delete(struct lruhash* table) { size_t i; if(!table) return; /* delete lock on hashtable to force check its OK */ lock_quick_destroy(&table->lock); for(i=0; isize; i++) bin_delete(table, &table->array[i]); free(table->array); free(table); } void bin_overflow_remove(struct lruhash_bin* bin, struct lruhash_entry* entry) { struct lruhash_entry* p = bin->overflow_list; struct lruhash_entry** prevp = &bin->overflow_list; while(p) { if(p == entry) { *prevp = p->overflow_next; return; } prevp = &p->overflow_next; p = p->overflow_next; } } void reclaim_space(struct lruhash* table, struct lruhash_entry** list) { struct lruhash_entry* d; struct lruhash_bin* bin; log_assert(table); /* does not delete MRU entry, so table will not be empty. */ while(table->num > 1 && table->space_used > table->space_max) { /* notice that since we hold the hashtable lock, nobody can change the lru chain. So it cannot be deleted underneath us. We still need the hashbin and entry write lock to make sure we flush all users away from the entry. which is unlikely, since it is LRU, if someone got a rdlock it would be moved to front, but to be sure. */ d = table->lru_end; /* specialised, delete from end of double linked list, and we know num>1, so there is a previous lru entry. */ log_assert(d && d->lru_prev); table->lru_end = d->lru_prev; d->lru_prev->lru_next = NULL; /* schedule entry for deletion */ bin = &table->array[d->hash & table->size_mask]; table->num --; lock_quick_lock(&bin->lock); bin_overflow_remove(bin, d); d->overflow_next = *list; *list = d; lock_rw_wrlock(&d->lock); table->space_used -= table->sizefunc(d->key, d->data); if(table->markdelfunc) (*table->markdelfunc)(d->key); lock_rw_unlock(&d->lock); lock_quick_unlock(&bin->lock); } } struct lruhash_entry* bin_find_entry(struct lruhash* table, struct lruhash_bin* bin, hashvalue_type hash, void* key) { struct lruhash_entry* p = bin->overflow_list; while(p) { if(p->hash == hash && table->compfunc(p->key, key) == 0) return p; p = p->overflow_next; } return NULL; } void table_grow(struct lruhash* table) { struct lruhash_bin* newa; int newmask; size_t i; if(table->size_mask == (int)(((size_t)-1)>>1)) { log_err("hash array malloc: size_t too small"); return; } /* try to allocate new array, if not fail */ newa = calloc(table->size*2, sizeof(struct lruhash_bin)); if(!newa) { log_err("hash grow: malloc failed"); /* continue with smaller array. Though its slower. */ return; } bin_init(newa, table->size*2); newmask = (table->size_mask << 1) | 1; bin_split(table, newa, newmask); /* delete the old bins */ lock_unprotect(&table->lock, table->array); for(i=0; isize; i++) { lock_quick_destroy(&table->array[i].lock); } free(table->array); table->size *= 2; table->size_mask = newmask; table->array = newa; lock_protect(&table->lock, table->array, table->size*sizeof(struct lruhash_bin)); return; } void lru_front(struct lruhash* table, struct lruhash_entry* entry) { entry->lru_prev = NULL; entry->lru_next = table->lru_start; if(!table->lru_start) table->lru_end = entry; else table->lru_start->lru_prev = entry; table->lru_start = entry; } void lru_remove(struct lruhash* table, struct lruhash_entry* entry) { if(entry->lru_prev) entry->lru_prev->lru_next = entry->lru_next; else table->lru_start = entry->lru_next; if(entry->lru_next) entry->lru_next->lru_prev = entry->lru_prev; else table->lru_end = entry->lru_prev; } void lru_touch(struct lruhash* table, struct lruhash_entry* entry) { log_assert(table && entry); if(entry == table->lru_start) return; /* nothing to do */ /* remove from current lru position */ lru_remove(table, entry); /* add at front */ lru_front(table, entry); } void lruhash_insert(struct lruhash* table, hashvalue_type hash, struct lruhash_entry* entry, void* data, void* cb_arg) { struct lruhash_bin* bin; struct lruhash_entry* found, *reclaimlist=NULL; size_t need_size; fptr_ok(fptr_whitelist_hash_sizefunc(table->sizefunc)); fptr_ok(fptr_whitelist_hash_delkeyfunc(table->delkeyfunc)); fptr_ok(fptr_whitelist_hash_deldatafunc(table->deldatafunc)); fptr_ok(fptr_whitelist_hash_compfunc(table->compfunc)); fptr_ok(fptr_whitelist_hash_markdelfunc(table->markdelfunc)); need_size = table->sizefunc(entry->key, data); if(cb_arg == NULL) cb_arg = table->cb_arg; /* find bin */ lock_quick_lock(&table->lock); bin = &table->array[hash & table->size_mask]; lock_quick_lock(&bin->lock); /* see if entry exists already */ if(!(found=bin_find_entry(table, bin, hash, entry->key))) { /* if not: add to bin */ entry->overflow_next = bin->overflow_list; bin->overflow_list = entry; lru_front(table, entry); table->num++; table->space_used += need_size; } else { /* if so: update data - needs a writelock */ table->space_used += need_size - (*table->sizefunc)(found->key, found->data); (*table->delkeyfunc)(entry->key, cb_arg); lru_touch(table, found); lock_rw_wrlock(&found->lock); (*table->deldatafunc)(found->data, cb_arg); found->data = data; lock_rw_unlock(&found->lock); } lock_quick_unlock(&bin->lock); if(table->space_used > table->space_max) reclaim_space(table, &reclaimlist); if(table->num >= table->size) table_grow(table); lock_quick_unlock(&table->lock); /* finish reclaim if any (outside of critical region) */ while(reclaimlist) { struct lruhash_entry* n = reclaimlist->overflow_next; void* d = reclaimlist->data; (*table->delkeyfunc)(reclaimlist->key, cb_arg); (*table->deldatafunc)(d, cb_arg); reclaimlist = n; } } struct lruhash_entry* lruhash_lookup(struct lruhash* table, hashvalue_type hash, void* key, int wr) { struct lruhash_entry* entry; struct lruhash_bin* bin; fptr_ok(fptr_whitelist_hash_compfunc(table->compfunc)); lock_quick_lock(&table->lock); bin = &table->array[hash & table->size_mask]; lock_quick_lock(&bin->lock); if((entry=bin_find_entry(table, bin, hash, key))) lru_touch(table, entry); lock_quick_unlock(&table->lock); if(entry) { if(wr) { lock_rw_wrlock(&entry->lock); } else { lock_rw_rdlock(&entry->lock); } } lock_quick_unlock(&bin->lock); return entry; } void lruhash_remove(struct lruhash* table, hashvalue_type hash, void* key) { struct lruhash_entry* entry; struct lruhash_bin* bin; void *d; fptr_ok(fptr_whitelist_hash_sizefunc(table->sizefunc)); fptr_ok(fptr_whitelist_hash_delkeyfunc(table->delkeyfunc)); fptr_ok(fptr_whitelist_hash_deldatafunc(table->deldatafunc)); fptr_ok(fptr_whitelist_hash_compfunc(table->compfunc)); fptr_ok(fptr_whitelist_hash_markdelfunc(table->markdelfunc)); lock_quick_lock(&table->lock); bin = &table->array[hash & table->size_mask]; lock_quick_lock(&bin->lock); if((entry=bin_find_entry(table, bin, hash, key))) { bin_overflow_remove(bin, entry); lru_remove(table, entry); } else { lock_quick_unlock(&table->lock); lock_quick_unlock(&bin->lock); return; } table->num--; table->space_used -= (*table->sizefunc)(entry->key, entry->data); lock_rw_wrlock(&entry->lock); if(table->markdelfunc) (*table->markdelfunc)(entry->key); lock_rw_unlock(&entry->lock); lock_quick_unlock(&bin->lock); lock_quick_unlock(&table->lock); /* finish removal */ d = entry->data; (*table->delkeyfunc)(entry->key, table->cb_arg); (*table->deldatafunc)(d, table->cb_arg); } /** clear bin, respecting locks, does not do space, LRU */ static void bin_clear(struct lruhash* table, struct lruhash_bin* bin) { struct lruhash_entry* p, *np; void *d; lock_quick_lock(&bin->lock); p = bin->overflow_list; while(p) { lock_rw_wrlock(&p->lock); np = p->overflow_next; d = p->data; if(table->markdelfunc) (*table->markdelfunc)(p->key); lock_rw_unlock(&p->lock); (*table->delkeyfunc)(p->key, table->cb_arg); (*table->deldatafunc)(d, table->cb_arg); p = np; } bin->overflow_list = NULL; lock_quick_unlock(&bin->lock); } void lruhash_clear(struct lruhash* table) { size_t i; if(!table) return; fptr_ok(fptr_whitelist_hash_delkeyfunc(table->delkeyfunc)); fptr_ok(fptr_whitelist_hash_deldatafunc(table->deldatafunc)); fptr_ok(fptr_whitelist_hash_markdelfunc(table->markdelfunc)); lock_quick_lock(&table->lock); for(i=0; isize; i++) { bin_clear(table, &table->array[i]); } table->lru_start = NULL; table->lru_end = NULL; table->num = 0; table->space_used = 0; lock_quick_unlock(&table->lock); } void lruhash_status(struct lruhash* table, const char* id, int extended) { lock_quick_lock(&table->lock); log_info("%s: %u entries, memory %u / %u", id, (unsigned)table->num, (unsigned)table->space_used, (unsigned)table->space_max); log_info(" itemsize %u, array %u, mask %d", (unsigned)(table->num? table->space_used/table->num : 0), (unsigned)table->size, table->size_mask); if(extended) { size_t i; int min=(int)table->size*2, max=-2; for(i=0; isize; i++) { int here = 0; struct lruhash_entry *en; lock_quick_lock(&table->array[i].lock); en = table->array[i].overflow_list; while(en) { here ++; en = en->overflow_next; } lock_quick_unlock(&table->array[i].lock); if(extended >= 2) log_info("bin[%d] %d", (int)i, here); if(here > max) max = here; if(here < min) min = here; } log_info(" bin min %d, avg %.2lf, max %d", min, (double)table->num/(double)table->size, max); } lock_quick_unlock(&table->lock); } size_t lruhash_get_mem(struct lruhash* table) { size_t s; lock_quick_lock(&table->lock); s = sizeof(struct lruhash) + table->space_used; #ifdef USE_THREAD_DEBUG if(table->size != 0) { size_t i; for(i=0; isize; i++) s += sizeof(struct lruhash_bin) + lock_get_mem(&table->array[i].lock); } #else /* no THREAD_DEBUG */ if(table->size != 0) s += (table->size)*(sizeof(struct lruhash_bin) + lock_get_mem(&table->array[0].lock)); #endif lock_quick_unlock(&table->lock); s += lock_get_mem(&table->lock); return s; } void lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_type md) { lock_quick_lock(&table->lock); table->markdelfunc = md; lock_quick_unlock(&table->lock); } void lruhash_traverse(struct lruhash* h, int wr, void (*func)(struct lruhash_entry*, void*), void* arg) { size_t i; struct lruhash_entry* e; lock_quick_lock(&h->lock); for(i=0; isize; i++) { lock_quick_lock(&h->array[i].lock); for(e = h->array[i].overflow_list; e; e = e->overflow_next) { if(wr) { lock_rw_wrlock(&e->lock); } else { lock_rw_rdlock(&e->lock); } (*func)(e, arg); lock_rw_unlock(&e->lock); } lock_quick_unlock(&h->array[i].lock); } lock_quick_unlock(&h->lock); } /* * Demote: the opposite of touch, move an entry to the bottom * of the LRU pile. */ void lru_demote(struct lruhash* table, struct lruhash_entry* entry) { log_assert(table && entry); if (entry == table->lru_end) return; /* nothing to do */ /* remove from current lru position */ lru_remove(table, entry); /* add at end */ entry->lru_next = NULL; entry->lru_prev = table->lru_end; if (table->lru_end == NULL) { table->lru_start = entry; } else { table->lru_end->lru_next = entry; } table->lru_end = entry; } struct lruhash_entry* lruhash_insert_or_retrieve(struct lruhash* table, hashvalue_type hash, struct lruhash_entry* entry, void* data, void* cb_arg) { struct lruhash_bin* bin; struct lruhash_entry* found, *reclaimlist = NULL; size_t need_size; fptr_ok(fptr_whitelist_hash_sizefunc(table->sizefunc)); fptr_ok(fptr_whitelist_hash_delkeyfunc(table->delkeyfunc)); fptr_ok(fptr_whitelist_hash_deldatafunc(table->deldatafunc)); fptr_ok(fptr_whitelist_hash_compfunc(table->compfunc)); fptr_ok(fptr_whitelist_hash_markdelfunc(table->markdelfunc)); need_size = table->sizefunc(entry->key, data); if (cb_arg == NULL) cb_arg = table->cb_arg; /* find bin */ lock_quick_lock(&table->lock); bin = &table->array[hash & table->size_mask]; lock_quick_lock(&bin->lock); /* see if entry exists already */ if ((found = bin_find_entry(table, bin, hash, entry->key)) != NULL) { /* if so: keep the existing data - acquire a writelock */ lock_rw_wrlock(&found->lock); } else { /* if not: add to bin */ entry->overflow_next = bin->overflow_list; bin->overflow_list = entry; lru_front(table, entry); table->num++; table->space_used += need_size; /* return the entry that was presented, and lock it */ found = entry; lock_rw_wrlock(&found->lock); } lock_quick_unlock(&bin->lock); if (table->space_used > table->space_max) reclaim_space(table, &reclaimlist); if (table->num >= table->size) table_grow(table); lock_quick_unlock(&table->lock); /* finish reclaim if any (outside of critical region) */ while (reclaimlist) { struct lruhash_entry* n = reclaimlist->overflow_next; void* d = reclaimlist->data; (*table->delkeyfunc)(reclaimlist->key, cb_arg); (*table->deldatafunc)(d, cb_arg); reclaimlist = n; } /* return the entry that was selected */ return found; } unbound-1.13.1/util/storage/lruhash.h0000644000175000017500000004052714010434640017147 0ustar wouterwouter/* * util/storage/lruhash.h - hashtable, hash function, LRU keeping. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a hashtable with LRU keeping of entries. * * The hash table keeps a maximum memory size. Old entries are removed * to make space for new entries. * * The locking strategy is as follows: * o since (almost) every read also implies a LRU update, the * hashtable lock is a spinlock, not rwlock. * o the idea is to move every thread through the hash lock quickly, * so that the next thread can access the lookup table. * o User performs hash function. * * For read: * o lock hashtable. * o lookup hash bin. * o lock hash bin. * o find entry (if failed, unlock hash, unl bin, exit). * o swizzle pointers for LRU update. * o unlock hashtable. * o lock entry (rwlock). * o unlock hash bin. * o work on entry. * o unlock entry. * * To update an entry, gain writelock and change the entry. * (the entry must keep the same hashvalue, so a data update.) * (you cannot upgrade a readlock to a writelock, because the item may * be deleted, it would cause race conditions. So instead, unlock and * relookup it in the hashtable.) * * To delete an entry: * o unlock the entry if you hold the lock already. * o lock hashtable. * o lookup hash bin. * o lock hash bin. * o find entry (if failed, unlock hash, unl bin, exit). * o remove entry from hashtable bin overflow chain. * o unlock hashtable. * o lock entry (writelock). * o unlock hash bin. * o unlock entry (nobody else should be waiting for this lock, * since you removed it from hashtable, and you got writelock while * holding the hashbinlock so you are the only one.) * Note you are only allowed to obtain a lock while holding hashbinlock. * o delete entry. * * The above sequence is: * o race free, works with read, write and delete. * o but has a queue, imagine someone needing a writelock on an item. * but there are still readlocks. The writelocker waits, but holds * the hashbinlock. The next thread that comes in and needs the same * hashbin will wait for the lock while holding the hashtable lock. * thus halting the entire system on hashtable. * This is because of the delete protection. * Readlocks will be easier on the rwlock on entries. * While the writer is holding writelock, similar problems happen with * a reader or writer needing the same item. * the scenario requires more than three threads. * o so the queue length is 3 threads in a bad situation. The fourth is * unable to use the hashtable. * * If you need to acquire locks on multiple items from the hashtable. * o you MUST release all locks on items from the hashtable before * doing the next lookup/insert/delete/whatever. * o To acquire multiple items you should use a special routine that * obtains the locks on those multiple items in one go. */ #ifndef UTIL_STORAGE_LRUHASH_H #define UTIL_STORAGE_LRUHASH_H #include "util/locks.h" struct lruhash_bin; struct lruhash_entry; /** default start size for hash arrays */ #define HASH_DEFAULT_STARTARRAY 1024 /* entries in array */ /** default max memory for hash arrays */ #define HASH_DEFAULT_MAXMEM 4*1024*1024 /* bytes */ /** the type of a hash value */ typedef uint32_t hashvalue_type; /** * Type of function that calculates the size of an entry. * Result must include the size of struct lruhash_entry. * Keys that are identical must also calculate to the same size. * size = func(key, data). */ typedef size_t (*lruhash_sizefunc_type)(void*, void*); /** type of function that compares two keys. return 0 if equal. */ typedef int (*lruhash_compfunc_type)(void*, void*); /** old keys are deleted. * The RRset type has to revoke its ID number, markdel() is used first. * This function is called: func(key, userarg) */ typedef void (*lruhash_delkeyfunc_type)(void*, void*); /** old data is deleted. This function is called: func(data, userarg). */ typedef void (*lruhash_deldatafunc_type)(void*, void*); /** mark a key as pending to be deleted (and not to be used by anyone). * called: func(key) */ typedef void (*lruhash_markdelfunc_type)(void*); /** * Hash table that keeps LRU list of entries. */ struct lruhash { /** lock for exclusive access, to the lookup array */ lock_quick_type lock; /** the size function for entries in this table */ lruhash_sizefunc_type sizefunc; /** the compare function for entries in this table. */ lruhash_compfunc_type compfunc; /** how to delete keys. */ lruhash_delkeyfunc_type delkeyfunc; /** how to delete data. */ lruhash_deldatafunc_type deldatafunc; /** how to mark a key pending deletion */ lruhash_markdelfunc_type markdelfunc; /** user argument for user functions */ void* cb_arg; /** the size of the lookup array */ size_t size; /** size bitmask - since size is a power of 2 */ int size_mask; /** lookup array of bins */ struct lruhash_bin* array; /** the lru list, start and end, noncyclical double linked list. */ struct lruhash_entry* lru_start; /** lru list end item (least recently used) */ struct lruhash_entry* lru_end; /** the number of entries in the hash table. */ size_t num; /** the amount of space used, roughly the number of bytes in use. */ size_t space_used; /** the amount of space the hash table is maximally allowed to use. */ size_t space_max; }; /** * A single bin with a linked list of entries in it. */ struct lruhash_bin { /** * Lock for exclusive access to the linked list * This lock makes deletion of items safe in this overflow list. */ lock_quick_type lock; /** linked list of overflow entries */ struct lruhash_entry* overflow_list; }; /** * An entry into the hash table. * To change overflow_next you need to hold the bin lock. * To change the lru items you need to hold the hashtable lock. * This structure is designed as part of key struct. And key pointer helps * to get the surrounding structure. Data should be allocated on its own. */ struct lruhash_entry { /** * rwlock for access to the contents of the entry * Note that it does _not_ cover the lru_ and overflow_ ptrs. * Even with a writelock, you cannot change hash and key. * You need to delete it to change hash or key. */ lock_rw_type lock; /** next entry in overflow chain. Covered by hashlock and binlock. */ struct lruhash_entry* overflow_next; /** next entry in lru chain. covered by hashlock. */ struct lruhash_entry* lru_next; /** prev entry in lru chain. covered by hashlock. */ struct lruhash_entry* lru_prev; /** hash value of the key. It may not change, until entry deleted. */ hashvalue_type hash; /** key */ void* key; /** data */ void* data; }; /** * Create new hash table. * @param start_size: size of hashtable array at start, must be power of 2. * @param maxmem: maximum amount of memory this table is allowed to use. * @param sizefunc: calculates memory usage of entries. * @param compfunc: compares entries, 0 on equality. * @param delkeyfunc: deletes key. * Calling both delkey and deldata will also free the struct lruhash_entry. * Make it part of the key structure and delete it in delkeyfunc. * @param deldatafunc: deletes data. * @param arg: user argument that is passed to user function calls. * @return: new hash table or NULL on malloc failure. */ struct lruhash* lruhash_create(size_t start_size, size_t maxmem, lruhash_sizefunc_type sizefunc, lruhash_compfunc_type compfunc, lruhash_delkeyfunc_type delkeyfunc, lruhash_deldatafunc_type deldatafunc, void* arg); /** * Delete hash table. Entries are all deleted. * @param table: to delete. */ void lruhash_delete(struct lruhash* table); /** * Clear hash table. Entries are all deleted, while locking them before * doing so. At end the table is empty. * @param table: to make empty. */ void lruhash_clear(struct lruhash* table); /** * Insert a new element into the hashtable. * If key is already present data pointer in that entry is updated. * The space calculation function is called with the key, data. * If necessary the least recently used entries are deleted to make space. * If necessary the hash array is grown up. * * @param table: hash table. * @param hash: hash value. User calculates the hash. * @param entry: identifies the entry. * If key already present, this entry->key is deleted immediately. * But entry->data is set to NULL before deletion, and put into * the existing entry. The data is then freed. * @param data: the data. * @param cb_override: if not null overrides the cb_arg for the deletefunc. */ void lruhash_insert(struct lruhash* table, hashvalue_type hash, struct lruhash_entry* entry, void* data, void* cb_override); /** * Lookup an entry in the hashtable. * At the end of the function you hold a (read/write)lock on the entry. * The LRU is updated for the entry (if found). * @param table: hash table. * @param hash: hash of key. * @param key: what to look for, compared against entries in overflow chain. * the hash value must be set, and must work with compare function. * @param wr: set to true if you desire a writelock on the entry. * with a writelock you can update the data part. * @return: pointer to the entry or NULL. The entry is locked. * The user must unlock the entry when done. */ struct lruhash_entry* lruhash_lookup(struct lruhash* table, hashvalue_type hash, void* key, int wr); /** * Touch entry, so it becomes the most recently used in the LRU list. * Caller must hold hash table lock. The entry must be inserted already. * @param table: hash table. * @param entry: entry to make first in LRU. */ void lru_touch(struct lruhash* table, struct lruhash_entry* entry); /** * Set the markdelfunction (or NULL) */ void lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_type md); /************************* getdns functions ************************/ /*** these are used by getdns only and not by unbound. ***/ /** * Demote entry, so it becomes the least recently used in the LRU list. * Caller must hold hash table lock. The entry must be inserted already. * @param table: hash table. * @param entry: entry to make last in LRU. */ void lru_demote(struct lruhash* table, struct lruhash_entry* entry); /** * Insert a new element into the hashtable, or retrieve the corresponding * element of it exits. * * If key is already present data pointer in that entry is kept. * If it is not present, a new entry is created. In that case, * the space calculation function is called with the key, data. * If necessary the least recently used entries are deleted to make space. * If necessary the hash array is grown up. * * @param table: hash table. * @param hash: hash value. User calculates the hash. * @param entry: identifies the entry. * @param data: the data. * @param cb_arg: if not null overrides the cb_arg for the deletefunc. * @return: pointer to the existing entry if the key was already present, * or to the entry argument if it was not. */ struct lruhash_entry* lruhash_insert_or_retrieve(struct lruhash* table, hashvalue_type hash, struct lruhash_entry* entry, void* data, void* cb_arg); /************************* Internal functions ************************/ /*** these are only exposed for unit tests. ***/ /** * Remove entry from hashtable. Does nothing if not found in hashtable. * Delfunc is called for the entry. * @param table: hash table. * @param hash: hash of key. * @param key: what to look for. */ void lruhash_remove(struct lruhash* table, hashvalue_type hash, void* key); /** init the hash bins for the table */ void bin_init(struct lruhash_bin* array, size_t size); /** delete the hash bin and entries inside it */ void bin_delete(struct lruhash* table, struct lruhash_bin* bin); /** * Find entry in hash bin. You must have locked the bin. * @param table: hash table with function pointers. * @param bin: hash bin to look into. * @param hash: hash value to look for. * @param key: key to look for. * @return: the entry or NULL if not found. */ struct lruhash_entry* bin_find_entry(struct lruhash* table, struct lruhash_bin* bin, hashvalue_type hash, void* key); /** * Remove entry from bin overflow chain. * You must have locked the bin. * @param bin: hash bin to look into. * @param entry: entry ptr that needs removal. */ void bin_overflow_remove(struct lruhash_bin* bin, struct lruhash_entry* entry); /** * Split hash bin into two new ones. Based on increased size_mask. * Caller must hold hash table lock. * At the end the routine acquires all hashbin locks (in the old array). * This makes it wait for other threads to finish with the bins. * So the bins are ready to be deleted after this function. * @param table: hash table with function pointers. * @param newa: new increased array. * @param newmask: new lookup mask. */ void bin_split(struct lruhash* table, struct lruhash_bin* newa, int newmask); /** * Try to make space available by deleting old entries. * Assumes that the lock on the hashtable is being held by caller. * Caller must not hold bin locks. * @param table: hash table. * @param list: list of entries that are to be deleted later. * Entries have been removed from the hash table and writelock is held. */ void reclaim_space(struct lruhash* table, struct lruhash_entry** list); /** * Grow the table lookup array. Becomes twice as large. * Caller must hold the hash table lock. Must not hold any bin locks. * Tries to grow, on malloc failure, nothing happened. * @param table: hash table. */ void table_grow(struct lruhash* table); /** * Put entry at front of lru. entry must be unlinked from lru. * Caller must hold hash table lock. * @param table: hash table with lru head and tail. * @param entry: entry to make most recently used. */ void lru_front(struct lruhash* table, struct lruhash_entry* entry); /** * Remove entry from lru list. * Caller must hold hash table lock. * @param table: hash table with lru head and tail. * @param entry: entry to remove from lru. */ void lru_remove(struct lruhash* table, struct lruhash_entry* entry); /** * Output debug info to the log as to state of the hash table. * @param table: hash table. * @param id: string printed with table to identify the hash table. * @param extended: set to true to print statistics on overflow bin lengths. */ void lruhash_status(struct lruhash* table, const char* id, int extended); /** * Get memory in use now by the lruhash table. * @param table: hash table. Will be locked before use. And unlocked after. * @return size in bytes. */ size_t lruhash_get_mem(struct lruhash* table); /** * Traverse a lruhash. Call back for every element in the table. * @param h: hash table. Locked before use. * @param wr: if true writelock is obtained on element, otherwise readlock. * @param func: function for every element. Do not lock or unlock elements. * @param arg: user argument to func. */ void lruhash_traverse(struct lruhash* h, int wr, void (*func)(struct lruhash_entry*, void*), void* arg); #endif /* UTIL_STORAGE_LRUHASH_H */ unbound-1.13.1/util/storage/dnstree.h0000644000175000017500000001524414010434640017143 0ustar wouterwouter/* * util/storage/dnstree.h - support for rbtree types suitable for DNS code. * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains structures combining types and functions to * manipulate those structures that help building DNS lookup trees. */ #ifndef UTIL_STORAGE_DNSTREE_H #define UTIL_STORAGE_DNSTREE_H #include "util/rbtree.h" /** * Tree of domain names. Sorted first by class then by name. * This is not sorted canonically, but fast. * This can be looked up to obtain a closest encloser parent name. * * The tree itself is a rbtree_type. * This is the element node put as first entry in the client structure. */ struct name_tree_node { /** rbtree node, key is this struct : dclass and name */ rbnode_type node; /** parent in tree */ struct name_tree_node* parent; /** name in uncompressed wireformat */ uint8_t* name; /** length of name */ size_t len; /** labels in name */ int labs; /** the class of the name (host order) */ uint16_t dclass; }; /** * Tree of IP addresses. Sorted first by protocol, then by bits. * This can be looked up to obtain the enclosing subnet. * * The tree itself is a rbtree_type. * This is the element node put as first entry in the client structure. */ struct addr_tree_node { /** rbtree node, key is this struct : proto and subnet */ rbnode_type node; /** parent in tree */ struct addr_tree_node* parent; /** address */ struct sockaddr_storage addr; /** length of addr */ socklen_t addrlen; /** netblock size */ int net; }; /** * Init a name tree to be empty * @param tree: to init. */ void name_tree_init(rbtree_type* tree); /** * insert element into name tree. * @param tree: name tree * @param node: node element (at start of a structure that caller * has allocated). * @param name: name to insert (wireformat) * this node has been allocated by the caller and it itself inserted. * @param len: length of name * @param labs: labels in name * @param dclass: class of name * @return false on error (duplicate element). */ int name_tree_insert(rbtree_type* tree, struct name_tree_node* node, uint8_t* name, size_t len, int labs, uint16_t dclass); /** * Initialize parent pointers in name tree. * Should be performed after insertions are done, before lookups * @param tree: name tree */ void name_tree_init_parents(rbtree_type* tree); /** * Lookup exact match in name tree * @param tree: name tree * @param name: wireformat name * @param len: length of name * @param labs: labels in name * @param dclass: class of name * @return node or NULL if not found. */ struct name_tree_node* name_tree_find(rbtree_type* tree, uint8_t* name, size_t len, int labs, uint16_t dclass); /** * Lookup closest encloser in name tree. * @param tree: name tree * @param name: wireformat name * @param len: length of name * @param labs: labels in name * @param dclass: class of name * @return closest enclosing node (could be equal) or NULL if not found. */ struct name_tree_node* name_tree_lookup(rbtree_type* tree, uint8_t* name, size_t len, int labs, uint16_t dclass); /** * Find next root item in name tree. * @param tree: the nametree. * @param dclass: the class to look for next (or higher). * @return false if no classes found, true means class put into c. */ int name_tree_next_root(rbtree_type* tree, uint16_t* dclass); /** * Init addr tree to be empty. * @param tree: to init. */ void addr_tree_init(rbtree_type* tree); /** * insert element into addr tree. * @param tree: addr tree * @param node: node element (at start of a structure that caller * has allocated). * @param addr: to insert (copied). * @param addrlen: length of addr * @param net: size of subnet. * @return false on error (duplicate element). */ int addr_tree_insert(rbtree_type* tree, struct addr_tree_node* node, struct sockaddr_storage* addr, socklen_t addrlen, int net); /** * Initialize parent pointers in addr tree. * Should be performed after insertions are done, before lookups * @param tree: addr tree */ void addr_tree_init_parents(rbtree_type* tree); /** * Initialize parent pointers in partial addr tree. * Reinitialize pointer for part of tree, used after node deletion * @param node: node to start parent pointer initialization for. */ void addr_tree_init_parents_node(struct addr_tree_node* node); /** * Lookup closest encloser in addr tree. * @param tree: addr tree * @param addr: to lookup. * @param addrlen: length of addr * @return closest enclosing node (could be equal) or NULL if not found. */ struct addr_tree_node* addr_tree_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen); /** * Find element in addr tree. (search a netblock, not a match for an address) * @param tree: addr tree * @param addr: netblock to lookup. * @param addrlen: length of addr * @param net: size of subnet * @return addr tree element, or NULL if not found. */ struct addr_tree_node* addr_tree_find(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen, int net); /** compare name tree nodes */ int name_tree_compare(const void* k1, const void* k2); /** compare addr tree nodes */ int addr_tree_compare(const void* k1, const void* k2); #endif /* UTIL_STORAGE_DNSTREE_H */ unbound-1.13.1/util/storage/slabhash.h0000644000175000017500000001736414010434640017271 0ustar wouterwouter/* * util/storage/slabhash.h - hashtable consisting of several smaller tables. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * Hash table that consists of smaller hash tables. * It cannot grow, but that gives it the ability to have multiple * locks. Also this means there are multiple LRU lists. */ #ifndef UTIL_STORAGE_SLABHASH_H #define UTIL_STORAGE_SLABHASH_H #include "util/storage/lruhash.h" /** default number of slabs */ #define HASH_DEFAULT_SLABS 4 /** * Hash table formed from several smaller ones. * This results in a partitioned lruhash table, a 'slashtable'. * None of the data inside the slabhash may be altered. * Therefore, no locks are needed to access the structure. */ struct slabhash { /** the size of the array - must be power of 2 */ size_t size; /** size bitmask - uses high bits. */ uint32_t mask; /** shift right this many bits to get index into array. */ unsigned int shift; /** lookup array of hash tables */ struct lruhash** array; }; /** * Create new slabbed hash table. * @param numtables: number of hash tables to use, other parameters used to * initialize these smaller hashtables. * @param start_size: size of hashtable array at start, must be power of 2. * @param maxmem: maximum amount of memory this table is allowed to use. * so every table gets maxmem/numtables to use for itself. * @param sizefunc: calculates memory usage of entries. * @param compfunc: compares entries, 0 on equality. * @param delkeyfunc: deletes key. * @param deldatafunc: deletes data. * @param arg: user argument that is passed to user function calls. * @return: new hash table or NULL on malloc failure. */ struct slabhash* slabhash_create(size_t numtables, size_t start_size, size_t maxmem, lruhash_sizefunc_type sizefunc, lruhash_compfunc_type compfunc, lruhash_delkeyfunc_type delkeyfunc, lruhash_deldatafunc_type deldatafunc, void* arg); /** * Delete hash table. Entries are all deleted. * @param table: to delete. */ void slabhash_delete(struct slabhash* table); /** * Clear hash table. Entries are all deleted. * @param table: to make empty. */ void slabhash_clear(struct slabhash* table); /** * Insert a new element into the hashtable, uses lruhash_insert. * If key is already present data pointer in that entry is updated. * * @param table: hash table. * @param hash: hash value. User calculates the hash. * @param entry: identifies the entry. * If key already present, this entry->key is deleted immediately. * But entry->data is set to NULL before deletion, and put into * the existing entry. The data is then freed. * @param data: the data. * @param cb_override: if not NULL overrides the cb_arg for deletefunc. */ void slabhash_insert(struct slabhash* table, hashvalue_type hash, struct lruhash_entry* entry, void* data, void* cb_override); /** * Lookup an entry in the hashtable. Uses lruhash_lookup. * At the end of the function you hold a (read/write)lock on the entry. * The LRU is updated for the entry (if found). * @param table: hash table. * @param hash: hash of key. * @param key: what to look for, compared against entries in overflow chain. * the hash value must be set, and must work with compare function. * @param wr: set to true if you desire a writelock on the entry. * with a writelock you can update the data part. * @return: pointer to the entry or NULL. The entry is locked. * The user must unlock the entry when done. */ struct lruhash_entry* slabhash_lookup(struct slabhash* table, hashvalue_type hash, void* key, int wr); /** * Remove entry from hashtable. Does nothing if not found in hashtable. * Delfunc is called for the entry. Uses lruhash_remove. * @param table: hash table. * @param hash: hash of key. * @param key: what to look for. */ void slabhash_remove(struct slabhash* table, hashvalue_type hash, void* key); /** * Output debug info to the log as to state of the hash table. * @param table: hash table. * @param id: string printed with table to identify the hash table. * @param extended: set to true to print statistics on overflow bin lengths. */ void slabhash_status(struct slabhash* table, const char* id, int extended); /** * Retrieve slab hash total size. * @param table: hash table. * @return size configured as max. */ size_t slabhash_get_size(struct slabhash* table); /** * See if slabhash is of given (size, slabs) configuration. * @param table: hash table * @param size: max size to test for * @param slabs: slab count to test for. * @return true if equal */ int slabhash_is_size(struct slabhash* table, size_t size, size_t slabs); /** * Retrieve slab hash current memory use. * @param table: hash table. * @return memory in use. */ size_t slabhash_get_mem(struct slabhash* table); /** * Get lruhash table for a given hash value * @param table: slabbed hash table. * @param hash: hash value. * @return the lru hash table. */ struct lruhash* slabhash_gettable(struct slabhash* table, hashvalue_type hash); /** * Set markdel function * @param table: slabbed hash table. * @param md: markdel function ptr. */ void slabhash_setmarkdel(struct slabhash* table, lruhash_markdelfunc_type md); /** * Traverse a slabhash. * @param table: slabbed hash table. * @param wr: if true, writelock is obtained, otherwise readlock. * @param func: function to call for every element. * @param arg: user argument to function. */ void slabhash_traverse(struct slabhash* table, int wr, void (*func)(struct lruhash_entry*, void*), void* arg); /* * Count entries in slabhash. * @param table: slabbed hash table; * @return the number of items */ size_t count_slabhash_entries(struct slabhash* table); /* --- test representation --- */ /** test structure contains test key */ struct slabhash_testkey { /** the key id */ int id; /** the entry */ struct lruhash_entry entry; }; /** test structure contains test data */ struct slabhash_testdata { /** data value */ int data; }; /** test sizefunc for lruhash */ size_t test_slabhash_sizefunc(void*, void*); /** test comparefunc for lruhash */ int test_slabhash_compfunc(void*, void*); /** test delkey for lruhash */ void test_slabhash_delkey(void*, void*); /** test deldata for lruhash */ void test_slabhash_deldata(void*, void*); /* --- end test representation --- */ #endif /* UTIL_STORAGE_SLABHASH_H */ unbound-1.13.1/util/storage/slabhash.c0000644000175000017500000001530314010434640017253 0ustar wouterwouter/* * util/storage/slabhash.c - hashtable consisting of several smaller tables. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * Implementation of hash table that consists of smaller hash tables. * This results in a partitioned lruhash table. * It cannot grow, but that gives it the ability to have multiple * locks. Also this means there are multiple LRU lists. */ #include "config.h" #include "util/storage/slabhash.h" struct slabhash* slabhash_create(size_t numtables, size_t start_size, size_t maxmem, lruhash_sizefunc_type sizefunc, lruhash_compfunc_type compfunc, lruhash_delkeyfunc_type delkeyfunc, lruhash_deldatafunc_type deldatafunc, void* arg) { size_t i; struct slabhash* sl = (struct slabhash*)calloc(1, sizeof(struct slabhash)); if(!sl) return NULL; sl->size = numtables; log_assert(sl->size > 0); sl->array = (struct lruhash**)calloc(sl->size, sizeof(struct lruhash*)); if(!sl->array) { free(sl); return NULL; } sl->mask = (uint32_t)(sl->size - 1); if(sl->mask == 0) { sl->shift = 0; } else { log_assert( (sl->size & sl->mask) == 0 /* size must be power of 2 */ ); sl->shift = 0; while(!(sl->mask & 0x80000000)) { sl->mask <<= 1; sl->shift ++; } } for(i=0; isize; i++) { sl->array[i] = lruhash_create(start_size, maxmem / sl->size, sizefunc, compfunc, delkeyfunc, deldatafunc, arg); if(!sl->array[i]) { slabhash_delete(sl); return NULL; } } return sl; } void slabhash_delete(struct slabhash* sl) { if(!sl) return; if(sl->array) { size_t i; for(i=0; isize; i++) lruhash_delete(sl->array[i]); free(sl->array); } free(sl); } void slabhash_clear(struct slabhash* sl) { size_t i; if(!sl) return; for(i=0; isize; i++) lruhash_clear(sl->array[i]); } /** helper routine to calculate the slabhash index */ static unsigned int slab_idx(struct slabhash* sl, hashvalue_type hash) { return ((hash & sl->mask) >> sl->shift); } void slabhash_insert(struct slabhash* sl, hashvalue_type hash, struct lruhash_entry* entry, void* data, void* arg) { lruhash_insert(sl->array[slab_idx(sl, hash)], hash, entry, data, arg); } struct lruhash_entry* slabhash_lookup(struct slabhash* sl, hashvalue_type hash, void* key, int wr) { return lruhash_lookup(sl->array[slab_idx(sl, hash)], hash, key, wr); } void slabhash_remove(struct slabhash* sl, hashvalue_type hash, void* key) { lruhash_remove(sl->array[slab_idx(sl, hash)], hash, key); } void slabhash_status(struct slabhash* sl, const char* id, int extended) { size_t i; char num[17]; log_info("Slabhash %s: %u tables mask=%x shift=%d", id, (unsigned)sl->size, (unsigned)sl->mask, sl->shift); for(i=0; isize; i++) { snprintf(num, sizeof(num), "table %u", (unsigned)i); lruhash_status(sl->array[i], num, extended); } } size_t slabhash_get_size(struct slabhash* sl) { size_t i, total = 0; for(i=0; isize; i++) { lock_quick_lock(&sl->array[i]->lock); total += sl->array[i]->space_max; lock_quick_unlock(&sl->array[i]->lock); } return total; } int slabhash_is_size(struct slabhash* sl, size_t size, size_t slabs) { /* divide by slabs and then multiply by the number of slabs, * because if the size is not an even multiple of slabs, the * uneven amount needs to be removed for comparison */ if(!sl) return 0; if(sl->size != slabs) return 0; if(slabs == 0) return 0; if( (size/slabs)*slabs == slabhash_get_size(sl)) return 1; return 0; } size_t slabhash_get_mem(struct slabhash* sl) { size_t i, total = sizeof(*sl); total += sizeof(struct lruhash*)*sl->size; for(i=0; isize; i++) { total += lruhash_get_mem(sl->array[i]); } return total; } struct lruhash* slabhash_gettable(struct slabhash* sl, hashvalue_type hash) { return sl->array[slab_idx(sl, hash)]; } /* test code, here to avoid linking problems with fptr_wlist */ /** delete key */ static void delkey(struct slabhash_testkey* k) { lock_rw_destroy(&k->entry.lock); free(k);} /** delete data */ static void deldata(struct slabhash_testdata* d) {free(d);} size_t test_slabhash_sizefunc(void* ATTR_UNUSED(key), void* ATTR_UNUSED(data)) { return sizeof(struct slabhash_testkey) + sizeof(struct slabhash_testdata); } int test_slabhash_compfunc(void* key1, void* key2) { struct slabhash_testkey* k1 = (struct slabhash_testkey*)key1; struct slabhash_testkey* k2 = (struct slabhash_testkey*)key2; if(k1->id == k2->id) return 0; if(k1->id > k2->id) return 1; return -1; } void test_slabhash_delkey(void* key, void* ATTR_UNUSED(arg)) { delkey((struct slabhash_testkey*)key); } void test_slabhash_deldata(void* data, void* ATTR_UNUSED(arg)) { deldata((struct slabhash_testdata*)data); } void slabhash_setmarkdel(struct slabhash* sl, lruhash_markdelfunc_type md) { size_t i; for(i=0; isize; i++) { lruhash_setmarkdel(sl->array[i], md); } } void slabhash_traverse(struct slabhash* sh, int wr, void (*func)(struct lruhash_entry*, void*), void* arg) { size_t i; for(i=0; isize; i++) lruhash_traverse(sh->array[i], wr, func, arg); } size_t count_slabhash_entries(struct slabhash* sh) { size_t slab, cnt = 0; for(slab=0; slabsize; slab++) { lock_quick_lock(&sh->array[slab]->lock); cnt += sh->array[slab]->num; lock_quick_unlock(&sh->array[slab]->lock); } return cnt; } unbound-1.13.1/util/timehist.c0000644000175000017500000001407714010434640015657 0ustar wouterwouter/* * util/timehist.c - make histogram of time values. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to make a histogram of time values. */ #include "config.h" #ifdef HAVE_TIME_H #include #endif #include #include #include "util/timehist.h" #include "util/log.h" /** special timestwo operation for time values in histogram setup */ static void timestwo(struct timeval* v) { #ifndef S_SPLINT_S if(v->tv_sec == 0 && v->tv_usec == 0) { v->tv_usec = 1; return; } v->tv_sec *= 2; v->tv_usec *= 2; if(v->tv_usec == 1024*1024) { /* nice values and easy to compute */ v->tv_sec = 1; v->tv_usec = 0; } #endif } /** do setup exponentially */ static void dosetup(struct timehist* hist) { struct timeval last; size_t i; memset(&last, 0, sizeof(last)); for(i=0; inum; i++) { hist->buckets[i].lower = last; timestwo(&last); hist->buckets[i].upper = last; hist->buckets[i].count = 0; } } struct timehist* timehist_setup(void) { struct timehist* hist = (struct timehist*)calloc(1, sizeof(struct timehist)); if(!hist) return NULL; hist->num = NUM_BUCKETS_HIST; hist->buckets = (struct th_buck*)calloc(hist->num, sizeof(struct th_buck)); if(!hist->buckets) { free(hist); return NULL; } /* setup the buckets */ dosetup(hist); return hist; } void timehist_delete(struct timehist* hist) { if(!hist) return; free(hist->buckets); free(hist); } void timehist_clear(struct timehist* hist) { size_t i; for(i=0; inum; i++) hist->buckets[i].count = 0; } /** histogram compare of time values */ static int timeval_smaller(const struct timeval* x, const struct timeval* y) { #ifndef S_SPLINT_S if(x->tv_sec < y->tv_sec) return 1; else if(x->tv_sec == y->tv_sec) { if(x->tv_usec <= y->tv_usec) return 1; else return 0; } else return 0; #endif } void timehist_insert(struct timehist* hist, struct timeval* tv) { size_t i; for(i=0; inum; i++) { if(timeval_smaller(tv, &hist->buckets[i].upper)) { hist->buckets[i].count++; return; } } /* dump in last bucket */ hist->buckets[hist->num-1].count++; } void timehist_print(struct timehist* hist) { #ifndef S_SPLINT_S size_t i; for(i=0; inum; i++) { if(hist->buckets[i].count != 0) { printf("%4d.%6.6d %4d.%6.6d %u\n", (int)hist->buckets[i].lower.tv_sec, (int)hist->buckets[i].lower.tv_usec, (int)hist->buckets[i].upper.tv_sec, (int)hist->buckets[i].upper.tv_usec, (unsigned)hist->buckets[i].count); } } #endif } void timehist_log(struct timehist* hist, const char* name) { #ifndef S_SPLINT_S size_t i; log_info("[25%%]=%g median[50%%]=%g [75%%]=%g", timehist_quartile(hist, 0.25), timehist_quartile(hist, 0.50), timehist_quartile(hist, 0.75)); /* 0000.000000 0000.000000 0 */ log_info("lower(secs) upper(secs) %s", name); for(i=0; inum; i++) { if(hist->buckets[i].count != 0) { log_info("%4d.%6.6d %4d.%6.6d %u", (int)hist->buckets[i].lower.tv_sec, (int)hist->buckets[i].lower.tv_usec, (int)hist->buckets[i].upper.tv_sec, (int)hist->buckets[i].upper.tv_usec, (unsigned)hist->buckets[i].count); } } #endif } /** total number in histogram */ static size_t timehist_count(struct timehist* hist) { size_t i, res = 0; for(i=0; inum; i++) res += hist->buckets[i].count; return res; } double timehist_quartile(struct timehist* hist, double q) { double lookfor, passed, res; double low = 0, up = 0; size_t i; if(!hist || hist->num == 0) return 0.; /* look for i'th element, interpolated */ lookfor = (double)timehist_count(hist); if(lookfor < 4) return 0.; /* not enough elements for a good estimate */ lookfor *= q; passed = 0; i = 0; while(i+1 < hist->num && passed+(double)hist->buckets[i].count < lookfor) { passed += (double)hist->buckets[i++].count; } /* got the right bucket */ #ifndef S_SPLINT_S low = (double)hist->buckets[i].lower.tv_sec + (double)hist->buckets[i].lower.tv_usec/1000000.; up = (double)hist->buckets[i].upper.tv_sec + (double)hist->buckets[i].upper.tv_usec/1000000.; #endif res = (lookfor - passed)*(up-low)/((double)hist->buckets[i].count); return low+res; } void timehist_export(struct timehist* hist, long long* array, size_t sz) { size_t i; if(!hist) return; if(sz > hist->num) sz = hist->num; for(i=0; ibuckets[i].count; } void timehist_import(struct timehist* hist, long long* array, size_t sz) { size_t i; if(!hist) return; if(sz > hist->num) sz = hist->num; for(i=0; ibuckets[i].count = (size_t)array[i]; } unbound-1.13.1/util/tcp_conn_limit.c0000644000175000017500000001164014010434640017023 0ustar wouterwouter/* * daemon/tcp_conn_limit.c - client TCP connection limit storage for the server. * * Copyright (c) 2018, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file helps the server discard excess TCP connections. */ #include "config.h" #include "util/regional.h" #include "util/log.h" #include "util/config_file.h" #include "util/net_help.h" #include "util/tcp_conn_limit.h" #include "services/localzone.h" #include "sldns/str2wire.h" struct tcl_list* tcl_list_create(void) { struct tcl_list* tcl = (struct tcl_list*)calloc(1, sizeof(struct tcl_list)); if(!tcl) return NULL; tcl->region = regional_create(); if(!tcl->region) { tcl_list_delete(tcl); return NULL; } return tcl; } static void tcl_list_free_node(rbnode_type* node, void* ATTR_UNUSED(arg)) { struct tcl_addr* n = (struct tcl_addr*) node; lock_quick_destroy(&n->lock); #ifdef THREADS_DISABLED (void)n; #endif } void tcl_list_delete(struct tcl_list* tcl) { if(!tcl) return; traverse_postorder(&tcl->tree, tcl_list_free_node, NULL); regional_destroy(tcl->region); free(tcl); } /** insert new address into tcl_list structure */ static struct tcl_addr* tcl_list_insert(struct tcl_list* tcl, struct sockaddr_storage* addr, socklen_t addrlen, int net, uint32_t limit, int complain_duplicates) { struct tcl_addr* node = regional_alloc_zero(tcl->region, sizeof(struct tcl_addr)); if(!node) return NULL; lock_quick_init(&node->lock); node->limit = limit; if(!addr_tree_insert(&tcl->tree, &node->node, addr, addrlen, net)) { if(complain_duplicates) verbose(VERB_QUERY, "duplicate tcl address ignored."); } return node; } /** apply tcl_list string */ static int tcl_list_str_cfg(struct tcl_list* tcl, const char* str, const char* s2, int complain_duplicates) { struct sockaddr_storage addr; int net; socklen_t addrlen; uint32_t limit; if(atoi(s2) < 0) { log_err("bad connection limit %s", s2); return 0; } limit = (uint32_t)atoi(s2); if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse connection limit netblock: %s", str); return 0; } if(!tcl_list_insert(tcl, &addr, addrlen, net, limit, complain_duplicates)) { log_err("out of memory"); return 0; } return 1; } /** read tcl_list config */ static int read_tcl_list(struct tcl_list* tcl, struct config_file* cfg) { struct config_str2list* p; for(p = cfg->tcp_connection_limits; p; p = p->next) { log_assert(p->str && p->str2); if(!tcl_list_str_cfg(tcl, p->str, p->str2, 1)) return 0; } return 1; } int tcl_list_apply_cfg(struct tcl_list* tcl, struct config_file* cfg) { regional_free_all(tcl->region); addr_tree_init(&tcl->tree); if(!read_tcl_list(tcl, cfg)) return 0; addr_tree_init_parents(&tcl->tree); return 1; } int tcl_new_connection(struct tcl_addr* tcl) { if(tcl) { int res = 1; lock_quick_lock(&tcl->lock); if(tcl->count >= tcl->limit) res = 0; else tcl->count++; lock_quick_unlock(&tcl->lock); return res; } return 1; } void tcl_close_connection(struct tcl_addr* tcl) { if(tcl) { lock_quick_lock(&tcl->lock); log_assert(tcl->count > 0); tcl->count--; lock_quick_unlock(&tcl->lock); } } struct tcl_addr* tcl_addr_lookup(struct tcl_list* tcl, struct sockaddr_storage* addr, socklen_t addrlen) { return (struct tcl_addr*)addr_tree_lookup(&tcl->tree, addr, addrlen); } size_t tcl_list_get_mem(struct tcl_list* tcl) { if(!tcl) return 0; return sizeof(*tcl) + regional_get_mem(tcl->region); } unbound-1.13.1/util/locks.h0000644000175000017500000003103614010434640015143 0ustar wouterwouter/** * util/locks.h - unbound locking primitives * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UTIL_LOCKS_H #define UTIL_LOCKS_H /** * \file * Locking primitives. * If pthreads is available, these are used. * If no locking exists, they do nothing. * * The idea is to have different sorts of locks for different tasks. * This allows the locking code to be ported more easily. * * Types of locks that are supported. * o lock_rw: lock that has many readers and one writer (to a data entry). * o lock_basic: simple mutex. Blocking, one person has access only. * This lock is meant for non performance sensitive uses. * o lock_quick: speed lock. For performance sensitive locking of critical * sections. Could be implemented by a mutex or a spinlock. * * Also thread creation and deletion functions are defined here. */ /* if you define your own LOCKRET before including locks.h, you can get most * locking functions without the dependency on log_err. */ #ifndef LOCKRET #include "util/log.h" /** * The following macro is used to check the return value of the * pthread calls. They return 0 on success and an errno on error. * The errno is logged to the logfile with a descriptive comment. */ #define LOCKRET(func) do {\ int lockret_err; \ if( (lockret_err=(func)) != 0) \ log_err("%s at %d could not " #func ": %s", \ __FILE__, __LINE__, strerror(lockret_err)); \ } while(0) #endif /** DEBUG: use thread debug whenever possible */ #if defined(HAVE_PTHREAD) && defined(HAVE_PTHREAD_SPINLOCK_T) && defined(ENABLE_LOCK_CHECKS) # define USE_THREAD_DEBUG #endif #ifdef USE_THREAD_DEBUG /******************* THREAD DEBUG ************************/ /* (some) checking; to detect races and deadlocks. */ #include "testcode/checklocks.h" #else /* USE_THREAD_DEBUG */ #define lock_protect(lock, area, size) /* nop */ #define lock_unprotect(lock, area) /* nop */ #define lock_get_mem(lock) (0) /* nothing */ #define checklock_start() /* nop */ #define checklock_stop() /* nop */ #ifdef HAVE_PTHREAD #include /******************* PTHREAD ************************/ /** use pthread mutex for basic lock */ typedef pthread_mutex_t lock_basic_type; /** small front for pthread init func, NULL is default attrs. */ #define lock_basic_init(lock) LOCKRET(pthread_mutex_init(lock, NULL)) #define lock_basic_destroy(lock) LOCKRET(pthread_mutex_destroy(lock)) #define lock_basic_lock(lock) LOCKRET(pthread_mutex_lock(lock)) #define lock_basic_unlock(lock) LOCKRET(pthread_mutex_unlock(lock)) #ifndef HAVE_PTHREAD_RWLOCK_T /** in case rwlocks are not supported, use a mutex. */ typedef pthread_mutex_t lock_rw_type; #define lock_rw_init(lock) LOCKRET(pthread_mutex_init(lock, NULL)) #define lock_rw_destroy(lock) LOCKRET(pthread_mutex_destroy(lock)) #define lock_rw_rdlock(lock) LOCKRET(pthread_mutex_lock(lock)) #define lock_rw_wrlock(lock) LOCKRET(pthread_mutex_lock(lock)) #define lock_rw_unlock(lock) LOCKRET(pthread_mutex_unlock(lock)) #else /* HAVE_PTHREAD_RWLOCK_T */ /** we use the pthread rwlock */ typedef pthread_rwlock_t lock_rw_type; /** small front for pthread init func, NULL is default attrs. */ #define lock_rw_init(lock) LOCKRET(pthread_rwlock_init(lock, NULL)) #define lock_rw_destroy(lock) LOCKRET(pthread_rwlock_destroy(lock)) #define lock_rw_rdlock(lock) LOCKRET(pthread_rwlock_rdlock(lock)) #define lock_rw_wrlock(lock) LOCKRET(pthread_rwlock_wrlock(lock)) #define lock_rw_unlock(lock) LOCKRET(pthread_rwlock_unlock(lock)) #endif /* HAVE_PTHREAD_RWLOCK_T */ #ifndef HAVE_PTHREAD_SPINLOCK_T /** in case spinlocks are not supported, use a mutex. */ typedef pthread_mutex_t lock_quick_type; /** small front for pthread init func, NULL is default attrs. */ #define lock_quick_init(lock) LOCKRET(pthread_mutex_init(lock, NULL)) #define lock_quick_destroy(lock) LOCKRET(pthread_mutex_destroy(lock)) #define lock_quick_lock(lock) LOCKRET(pthread_mutex_lock(lock)) #define lock_quick_unlock(lock) LOCKRET(pthread_mutex_unlock(lock)) #else /* HAVE_PTHREAD_SPINLOCK_T */ /** use pthread spinlock for the quick lock */ typedef pthread_spinlock_t lock_quick_type; /** * allocate process private since this is available whether * Thread Process-Shared Synchronization is supported or not. * This means only threads inside this process may access the lock. * (not threads from another process that shares memory). * spinlocks are not supported on all pthread platforms. */ #define lock_quick_init(lock) LOCKRET(pthread_spin_init(lock, PTHREAD_PROCESS_PRIVATE)) #define lock_quick_destroy(lock) LOCKRET(pthread_spin_destroy(lock)) #define lock_quick_lock(lock) LOCKRET(pthread_spin_lock(lock)) #define lock_quick_unlock(lock) LOCKRET(pthread_spin_unlock(lock)) #endif /* HAVE SPINLOCK */ /** Thread creation */ typedef pthread_t ub_thread_type; /** On alpine linux default thread stack size is 80 Kb. See http://wiki.musl-libc.org/wiki/Functional_differences_from_glibc#Thread_stack_size This is not enough and cause segfault. Other linux distros have 2 Mb at least. Wrapper for set up thread stack size */ #define PTHREADSTACKSIZE 2*1024*1024 #define PTHREADCREATE(thr, stackrequired, func, arg) do {\ pthread_attr_t attr; \ size_t stacksize; \ LOCKRET(pthread_attr_init(&attr)); \ LOCKRET(pthread_attr_getstacksize(&attr, &stacksize)); \ if (stacksize < stackrequired) { \ LOCKRET(pthread_attr_setstacksize(&attr, stackrequired)); \ LOCKRET(pthread_create(thr, &attr, func, arg)); \ LOCKRET(pthread_attr_getstacksize(&attr, &stacksize)); \ verbose(VERB_ALGO, "Thread stack size set to %u", (unsigned)stacksize); \ } else {LOCKRET(pthread_create(thr, NULL, func, arg));} \ } while(0) /** Use wrapper for set thread stack size on attributes. */ #define ub_thread_create(thr, func, arg) PTHREADCREATE(thr, PTHREADSTACKSIZE, func, arg) /** get self id. */ #define ub_thread_self() pthread_self() /** wait for another thread to terminate */ #define ub_thread_join(thread) LOCKRET(pthread_join(thread, NULL)) typedef pthread_key_t ub_thread_key_type; #define ub_thread_key_create(key, f) LOCKRET(pthread_key_create(key, f)) #define ub_thread_key_set(key, v) LOCKRET(pthread_setspecific(key, v)) #define ub_thread_key_get(key) pthread_getspecific(key) #else /* we do not HAVE_PTHREAD */ #ifdef HAVE_SOLARIS_THREADS /******************* SOLARIS THREADS ************************/ #include #include typedef rwlock_t lock_rw_type; #define lock_rw_init(lock) LOCKRET(rwlock_init(lock, USYNC_THREAD, NULL)) #define lock_rw_destroy(lock) LOCKRET(rwlock_destroy(lock)) #define lock_rw_rdlock(lock) LOCKRET(rw_rdlock(lock)) #define lock_rw_wrlock(lock) LOCKRET(rw_wrlock(lock)) #define lock_rw_unlock(lock) LOCKRET(rw_unlock(lock)) /** use basic mutex */ typedef mutex_t lock_basic_type; #define lock_basic_init(lock) LOCKRET(mutex_init(lock, USYNC_THREAD, NULL)) #define lock_basic_destroy(lock) LOCKRET(mutex_destroy(lock)) #define lock_basic_lock(lock) LOCKRET(mutex_lock(lock)) #define lock_basic_unlock(lock) LOCKRET(mutex_unlock(lock)) /** No spinlocks in solaris threads API. Use a mutex. */ typedef mutex_t lock_quick_type; #define lock_quick_init(lock) LOCKRET(mutex_init(lock, USYNC_THREAD, NULL)) #define lock_quick_destroy(lock) LOCKRET(mutex_destroy(lock)) #define lock_quick_lock(lock) LOCKRET(mutex_lock(lock)) #define lock_quick_unlock(lock) LOCKRET(mutex_unlock(lock)) /** Thread creation, create a default thread. */ typedef thread_t ub_thread_type; #define ub_thread_create(thr, func, arg) LOCKRET(thr_create(NULL, NULL, func, arg, NULL, thr)) #define ub_thread_self() thr_self() #define ub_thread_join(thread) LOCKRET(thr_join(thread, NULL, NULL)) typedef thread_key_t ub_thread_key_type; #define ub_thread_key_create(key, f) LOCKRET(thr_keycreate(key, f)) #define ub_thread_key_set(key, v) LOCKRET(thr_setspecific(key, v)) void* ub_thread_key_get(ub_thread_key_type key); #else /* we do not HAVE_SOLARIS_THREADS and no PTHREADS */ /******************* WINDOWS THREADS ************************/ #ifdef HAVE_WINDOWS_THREADS #include /* Use a mutex */ typedef LONG lock_rw_type; #define lock_rw_init(lock) lock_basic_init(lock) #define lock_rw_destroy(lock) lock_basic_destroy(lock) #define lock_rw_rdlock(lock) lock_basic_lock(lock) #define lock_rw_wrlock(lock) lock_basic_lock(lock) #define lock_rw_unlock(lock) lock_basic_unlock(lock) /** the basic lock is a mutex, implemented opaquely, for error handling. */ typedef LONG lock_basic_type; void lock_basic_init(lock_basic_type* lock); void lock_basic_destroy(lock_basic_type* lock); void lock_basic_lock(lock_basic_type* lock); void lock_basic_unlock(lock_basic_type* lock); /** on windows no spinlock, use mutex too. */ typedef LONG lock_quick_type; #define lock_quick_init(lock) lock_basic_init(lock) #define lock_quick_destroy(lock) lock_basic_destroy(lock) #define lock_quick_lock(lock) lock_basic_lock(lock) #define lock_quick_unlock(lock) lock_basic_unlock(lock) /** Thread creation, create a default thread. */ typedef HANDLE ub_thread_type; void ub_thread_create(ub_thread_type* thr, void* (*func)(void*), void* arg); ub_thread_type ub_thread_self(void); void ub_thread_join(ub_thread_type thr); typedef DWORD ub_thread_key_type; void ub_thread_key_create(ub_thread_key_type* key, void* f); void ub_thread_key_set(ub_thread_key_type key, void* v); void* ub_thread_key_get(ub_thread_key_type key); #else /* we do not HAVE_SOLARIS_THREADS, PTHREADS or WINDOWS_THREADS */ /******************* NO THREADS ************************/ #define THREADS_DISABLED 1 /** In case there is no thread support, define locks to do nothing */ typedef int lock_rw_type; #define lock_rw_init(lock) /* nop */ #define lock_rw_destroy(lock) /* nop */ #define lock_rw_rdlock(lock) /* nop */ #define lock_rw_wrlock(lock) /* nop */ #define lock_rw_unlock(lock) /* nop */ /** define locks to do nothing */ typedef int lock_basic_type; #define lock_basic_init(lock) /* nop */ #define lock_basic_destroy(lock) /* nop */ #define lock_basic_lock(lock) /* nop */ #define lock_basic_unlock(lock) /* nop */ /** define locks to do nothing */ typedef int lock_quick_type; #define lock_quick_init(lock) /* nop */ #define lock_quick_destroy(lock) /* nop */ #define lock_quick_lock(lock) /* nop */ #define lock_quick_unlock(lock) /* nop */ /** Thread creation, threads do not exist */ typedef pid_t ub_thread_type; /** ub_thread_create is simulated with fork (extremely heavy threads, * with no shared memory). */ #define ub_thread_create(thr, func, arg) \ ub_thr_fork_create(thr, func, arg) #define ub_thread_self() getpid() #define ub_thread_join(thread) ub_thr_fork_wait(thread) void ub_thr_fork_wait(ub_thread_type thread); void ub_thr_fork_create(ub_thread_type* thr, void* (*func)(void*), void* arg); typedef void* ub_thread_key_type; #define ub_thread_key_create(key, f) (*(key)) = NULL #define ub_thread_key_set(key, v) (key) = (v) #define ub_thread_key_get(key) (key) #endif /* HAVE_WINDOWS_THREADS */ #endif /* HAVE_SOLARIS_THREADS */ #endif /* HAVE_PTHREAD */ #endif /* USE_THREAD_DEBUG */ /** * Block all signals for this thread. * fatal exit on error. */ void ub_thread_blocksigs(void); /** * unblock one signal for this thread. */ void ub_thread_sig_unblock(int sig); #endif /* UTIL_LOCKS_H */ unbound-1.13.1/util/rtt.c0000644000175000017500000000703214010434640014633 0ustar wouterwouter/* * util/rtt.c - UDP round trip time estimator for resend timeouts. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a data type and functions to help estimate good * round trip times for UDP resend timeout values. */ #include "config.h" #include "util/rtt.h" #include "iterator/iterator.h" /* overwritten by config: infra_cache_min_rtt: */ int RTT_MIN_TIMEOUT = 50; /** calculate RTO from rtt information */ static int calc_rto(const struct rtt_info* rtt) { /* From Stevens, Unix Network Programming, Vol1, 3rd ed., p.598 */ int rto = rtt->srtt + 4*rtt->rttvar; if(rto < RTT_MIN_TIMEOUT) rto = RTT_MIN_TIMEOUT; if(rto > RTT_MAX_TIMEOUT) rto = RTT_MAX_TIMEOUT; return rto; } void rtt_init(struct rtt_info* rtt) { rtt->srtt = 0; rtt->rttvar = UNKNOWN_SERVER_NICENESS/4; rtt->rto = calc_rto(rtt); /* default value from the book is 0 + 4*0.75 = 3 seconds */ /* first RTO is 0 + 4*0.094 = 0.376 seconds */ } int rtt_timeout(const struct rtt_info* rtt) { return rtt->rto; } int rtt_unclamped(const struct rtt_info* rtt) { if(calc_rto(rtt) != rtt->rto) { /* timeout fallback has happened */ return rtt->rto; } /* return unclamped value */ return rtt->srtt + 4*rtt->rttvar; } void rtt_update(struct rtt_info* rtt, int ms) { int delta = ms - rtt->srtt; rtt->srtt += delta / 8; /* g = 1/8 */ if(delta < 0) delta = -delta; /* |delta| */ rtt->rttvar += (delta - rtt->rttvar) / 4; /* h = 1/4 */ rtt->rto = calc_rto(rtt); } void rtt_lost(struct rtt_info* rtt, int orig) { /* exponential backoff */ /* if a query succeeded and put down the rto meanwhile, ignore this */ if(rtt->rto < orig) return; /* the original rto is doubled, not the current one to make sure * that the values in the cache are not increased by lots of * queries simultaneously as they time out at the same time */ orig *= 2; if(rtt->rto <= orig) { rtt->rto = orig; if(rtt->rto > RTT_MAX_TIMEOUT) rtt->rto = RTT_MAX_TIMEOUT; } } int rtt_notimeout(const struct rtt_info* rtt) { return calc_rto(rtt); } unbound-1.13.1/util/as112.c0000644000175000017500000001025014010434640014645 0ustar wouterwouter/* * util/as112.c - list of local zones. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file provides a list of lan zones. */ #include "util/as112.h" static const char* as112_zone_array[] = { "10.in-addr.arpa.", "16.172.in-addr.arpa.", "17.172.in-addr.arpa.", "18.172.in-addr.arpa.", "19.172.in-addr.arpa.", "20.172.in-addr.arpa.", "21.172.in-addr.arpa.", "22.172.in-addr.arpa.", "23.172.in-addr.arpa.", "24.172.in-addr.arpa.", "25.172.in-addr.arpa.", "26.172.in-addr.arpa.", "27.172.in-addr.arpa.", "28.172.in-addr.arpa.", "29.172.in-addr.arpa.", "30.172.in-addr.arpa.", "31.172.in-addr.arpa.", "168.192.in-addr.arpa.", "0.in-addr.arpa.", "64.100.in-addr.arpa.", "65.100.in-addr.arpa.", "66.100.in-addr.arpa.", "67.100.in-addr.arpa.", "68.100.in-addr.arpa.", "69.100.in-addr.arpa.", "70.100.in-addr.arpa.", "71.100.in-addr.arpa.", "72.100.in-addr.arpa.", "73.100.in-addr.arpa.", "74.100.in-addr.arpa.", "75.100.in-addr.arpa.", "76.100.in-addr.arpa.", "77.100.in-addr.arpa.", "78.100.in-addr.arpa.", "79.100.in-addr.arpa.", "80.100.in-addr.arpa.", "81.100.in-addr.arpa.", "82.100.in-addr.arpa.", "83.100.in-addr.arpa.", "84.100.in-addr.arpa.", "85.100.in-addr.arpa.", "86.100.in-addr.arpa.", "87.100.in-addr.arpa.", "88.100.in-addr.arpa.", "89.100.in-addr.arpa.", "90.100.in-addr.arpa.", "91.100.in-addr.arpa.", "92.100.in-addr.arpa.", "93.100.in-addr.arpa.", "94.100.in-addr.arpa.", "95.100.in-addr.arpa.", "96.100.in-addr.arpa.", "97.100.in-addr.arpa.", "98.100.in-addr.arpa.", "99.100.in-addr.arpa.", "100.100.in-addr.arpa.", "101.100.in-addr.arpa.", "102.100.in-addr.arpa.", "103.100.in-addr.arpa.", "104.100.in-addr.arpa.", "105.100.in-addr.arpa.", "106.100.in-addr.arpa.", "107.100.in-addr.arpa.", "108.100.in-addr.arpa.", "109.100.in-addr.arpa.", "110.100.in-addr.arpa.", "111.100.in-addr.arpa.", "112.100.in-addr.arpa.", "113.100.in-addr.arpa.", "114.100.in-addr.arpa.", "115.100.in-addr.arpa.", "116.100.in-addr.arpa.", "117.100.in-addr.arpa.", "118.100.in-addr.arpa.", "119.100.in-addr.arpa.", "120.100.in-addr.arpa.", "121.100.in-addr.arpa.", "122.100.in-addr.arpa.", "123.100.in-addr.arpa.", "124.100.in-addr.arpa.", "125.100.in-addr.arpa.", "126.100.in-addr.arpa.", "127.100.in-addr.arpa.", "254.169.in-addr.arpa.", "2.0.192.in-addr.arpa.", "100.51.198.in-addr.arpa.", "113.0.203.in-addr.arpa.", "255.255.255.255.in-addr.arpa.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.", "d.f.ip6.arpa.", "8.e.f.ip6.arpa.", "9.e.f.ip6.arpa.", "a.e.f.ip6.arpa.", "b.e.f.ip6.arpa.", "8.b.d.0.1.0.0.2.ip6.arpa.", 0 }; const char** as112_zones = as112_zone_array; unbound-1.13.1/util/tube.h0000644000175000017500000002062714010434640014773 0ustar wouterwouter/* * util/tube.h - pipe service * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains pipe service functions. */ #ifndef UTIL_TUBE_H #define UTIL_TUBE_H struct comm_reply; struct comm_point; struct comm_base; struct tube; struct tube_res_list; #ifdef USE_WINSOCK #include "util/locks.h" #endif /** * Callback from pipe listen function * void mycallback(tube, msg, len, error, user_argument); * if error is true (NETEVENT_*), msg is probably NULL. */ typedef void tube_callback_type(struct tube*, uint8_t*, size_t, int, void*); /** * A pipe */ struct tube { #ifndef USE_WINSOCK /** pipe end to read from */ int sr; /** pipe end to write on */ int sw; /** listen commpoint */ struct comm_point* listen_com; /** listen callback */ tube_callback_type* listen_cb; /** listen callback user arg */ void* listen_arg; /** are we currently reading a command, 0 if not, else bytecount */ size_t cmd_read; /** size of current read command, may be partially read */ uint32_t cmd_len; /** the current read command content, malloced, can be partially read*/ uint8_t* cmd_msg; /** background write queue, commpoint to write results back */ struct comm_point* res_com; /** are we currently writing a result, 0 if not, else bytecount into * the res_list first entry. */ size_t res_write; /** list of outstanding results to be written back */ struct tube_res_list* res_list; /** last in list */ struct tube_res_list* res_last; #else /* USE_WINSOCK */ /** listen callback */ tube_callback_type* listen_cb; /** listen callback user arg */ void* listen_arg; /** the windows sockets event (signaled if items in pipe) */ WSAEVENT event; /** winsock event storage when registered with event base */ struct ub_event* ev_listen; /** lock on the list of outstanding items */ lock_basic_type res_lock; /** list of outstanding results on pipe */ struct tube_res_list* res_list; /** last in list */ struct tube_res_list* res_last; #endif /* USE_WINSOCK */ }; /** * List of results (arbitrary command serializations) to write back */ struct tube_res_list { /** next in list */ struct tube_res_list* next; /** serialized buffer to write */ uint8_t* buf; /** length to write */ uint32_t len; }; /** * Create a pipe * @return: new tube struct or NULL on error. */ struct tube* tube_create(void); /** * Delete and destroy a pipe * @param tube: to delete */ void tube_delete(struct tube* tube); /** * Write length bytes followed by message. * @param tube: the tube to write on. * If that tube is a pipe, its write fd is used as * the socket to write on. Is nonblocking. * Set to blocking by the function, * and back to non-blocking at exit of function. * @param buf: the message. * @param len: length of message. * @param nonblock: if set to true, the first write is nonblocking. * If the first write fails the function returns -1. * If set false, the first write is blocking. * @return: all remainder writes are nonblocking. * return 0 on error, in that case blocking/nonblocking of socket is * unknown. * return 1 if all OK. */ int tube_write_msg(struct tube* tube, uint8_t* buf, uint32_t len, int nonblock); /** * Read length bytes followed by message. * @param tube: The tube to read on. * If that tube is a pipe, its read fd is used as * the socket to read on. Is nonblocking. * Set to blocking by the function, * and back to non-blocking at exit of function. * @param buf: the message, malloced. * @param len: length of message, returned. * @param nonblock: if set to true, the first read is nonblocking. * If the first read fails the function returns -1. * If set false, the first read is blocking. * @return: all remainder reads are nonblocking. * return 0 on error, in that case blocking/nonblocking of socket is * unknown. On EOF 0 is returned. * return 1 if all OK. */ int tube_read_msg(struct tube* tube, uint8_t** buf, uint32_t* len, int nonblock); /** * Close read part of the pipe. * The tube can no longer be read from. * @param tube: tube to operate on. */ void tube_close_read(struct tube* tube); /** * Close write part of the pipe. * The tube can no longer be written to. * @param tube: tube to operate on. */ void tube_close_write(struct tube* tube); /** * See if data is ready for reading on the tube without blocking. * @param tube: tube to check for readable items * @return true if readable items are present. False if not (or error). * true on pipe_closed. */ int tube_poll(struct tube* tube); /** * Wait for data to be ready for reading on the tube. is blocking. * No timeout. * @param tube: the tube to wait on. * @return: if there was something to read (false on error). * true on pipe_closed. */ int tube_wait(struct tube* tube); /** * Get FD that is readable when new information arrives. * @param tube * @return file descriptor. */ int tube_read_fd(struct tube* tube); /** * Start listening for information over the pipe. * Background registration of a read listener, callback when read completed. * Do not mix with tube_read_msg style direct reads from the pipe. * @param tube: tube to listen on * @param base: what base to register event callback. * @param cb: callback routine. * @param arg: user argument for callback routine. * @return true if successful, false on error. */ int tube_setup_bg_listen(struct tube* tube, struct comm_base* base, tube_callback_type* cb, void* arg); /** * Remove bg listen setup from event base. * @param tube: what tube to cleanup */ void tube_remove_bg_listen(struct tube* tube); /** * Start background write handler for the pipe. * Do not mix with tube_write_msg style direct writes to the pipe. * @param tube: tube to write on * @param base: what base to register event handler on. * @return true if successful, false on error. */ int tube_setup_bg_write(struct tube* tube, struct comm_base* base); /** * Remove bg write setup from event base. * @param tube: what tube to cleanup */ void tube_remove_bg_write(struct tube* tube); /** * Append data item to background list of writes. * Mallocs a list entry behind the scenes. * Not locked behind the scenes, call from one thread or lock on outside. * @param tube: what tube to queue on. * @param msg: memory message to send. Is free()d after use. * Put at the end of the to-send queue. * @param len: length of item. * @return 0 on failure (msg freed). */ int tube_queue_item(struct tube* tube, uint8_t* msg, size_t len); /** for fptr wlist, callback function */ int tube_handle_listen(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info); /** for fptr wlist, callback function */ int tube_handle_write(struct comm_point* c, void* arg, int error, struct comm_reply* reply_info); /** for fptr wlist, winsock signal event callback function */ void tube_handle_signal(int fd, short events, void* arg); #endif /* UTIL_TUBE_H */ unbound-1.13.1/util/ub_event.h0000644000175000017500000001211214010434640015631 0ustar wouterwouter/* * util/ub_event.h - indirection layer for pluggable events * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains prototypes for event loop functions. * */ #ifndef UB_EVENT_H #define UB_EVENT_H struct ub_event_base; struct ub_event; struct comm_base; struct event_base; /** event timeout */ #define UB_EV_TIMEOUT 0x01 /** event fd readable */ #define UB_EV_READ 0x02 /** event fd writable */ #define UB_EV_WRITE 0x04 /** event signal */ #define UB_EV_SIGNAL 0x08 /** event must persist */ #define UB_EV_PERSIST 0x10 /** Returns event-base type. Could be "mini-event", "winsock-event" for the * daemon compile, and will be "pluggable-event" for * libunbound. */ const char* ub_event_get_version(void); /** Return the name, system and method for the pluggable event base */ void ub_get_event_sys(struct ub_event_base*, const char** n, const char** s, const char** m); /** Return a default event base. In the daemon this will be the only event * bases used. */ struct ub_event_base* ub_default_event_base(int, time_t*, struct timeval*); /** Return an ub_event_base constructed for the given libevent event base */ struct ub_event_base* ub_libevent_event_base(struct event_base*); /** Return the libevent base underlying the given ub_event_base. Will return * NULL when the ub_event_base does not have an underlying libevent event base */ struct event_base* ub_libevent_get_event_base(struct ub_event_base*); /** Free event base. Free events yourself */ void ub_event_base_free(struct ub_event_base*); /** Run the event base */ int ub_event_base_dispatch(struct ub_event_base*); /** exit that loop */ int ub_event_base_loopexit(struct ub_event_base*); /** Create a new ub_event for the event base */ struct ub_event* ub_event_new(struct ub_event_base*, int fd, short bits, void (*cb)(int, short, void*), void* arg); /** Create a new ub_event signal for the event base */ struct ub_event* ub_signal_new(struct ub_event_base*, int fd, void (*cb)(int, short, void*), void* arg); /** Create a new ub_event associated with the wsaevent for the event base */ struct ub_event* ub_winsock_register_wsaevent(struct ub_event_base*, void* wsaevent, void (*cb)(int, short, void*), void* arg); /** Add event bits for this event to fire on */ void ub_event_add_bits(struct ub_event*, short bits); /** Configure the event so it will not longer fire on given bits */ void ub_event_del_bits(struct ub_event*, short bits); /** Change or set the file descriptor on the event */ void ub_event_set_fd(struct ub_event*, int fd); /** free the event */ void ub_event_free(struct ub_event*); /** Activate the event. The given timeval is an timeout value. */ int ub_event_add(struct ub_event*, struct timeval*); /** Deactivate the event */ int ub_event_del(struct ub_event*); /** Reconfigure and activate a timeout event */ int ub_timer_add(struct ub_event*, struct ub_event_base*, void (*cb)(int, short, void*), void* arg, struct timeval*); /** Deactivate the timeout event */ int ub_timer_del(struct ub_event*); /** Activate a signal event */ int ub_signal_add(struct ub_event*, struct timeval*); /** Deactivate a signal event */ int ub_signal_del(struct ub_event*); /** Free a with a wsaevent associated event */ void ub_winsock_unregister_wsaevent(struct ub_event* ev); /** Signal the eventloop when a TCP windows socket will block on next read * or write (given by the eventbits) */ void ub_winsock_tcp_wouldblock(struct ub_event*, int bits); /** Equip the comm_base with the current time */ void ub_comm_base_now(struct comm_base* cb); #endif /* UB_EVENT_H */ unbound-1.13.1/util/net_help.h0000644000175000017500000004016614010434640015632 0ustar wouterwouter/* * util/net_help.h - network help functions * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to perform network related tasks. */ #ifndef NET_HELP_H #define NET_HELP_H #include "util/log.h" struct sock_list; struct regional; struct config_strlist; /** DNS constants for uint16_t style flag manipulation. host byteorder. * 1 1 1 1 1 1 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ * |QR| Opcode |AA|TC|RD|RA| Z|AD|CD| RCODE | * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ */ /** CD flag */ #define BIT_CD 0x0010 /** AD flag */ #define BIT_AD 0x0020 /** Z flag */ #define BIT_Z 0x0040 /** RA flag */ #define BIT_RA 0x0080 /** RD flag */ #define BIT_RD 0x0100 /** TC flag */ #define BIT_TC 0x0200 /** AA flag */ #define BIT_AA 0x0400 /** QR flag */ #define BIT_QR 0x8000 /** get RCODE bits from uint16 flags */ #define FLAGS_GET_RCODE(f) ((f) & 0xf) /** set RCODE bits in uint16 flags */ #define FLAGS_SET_RCODE(f, r) (f = (((f) & 0xfff0) | (r))) /** timeout in milliseconds for UDP queries to auth servers. */ #define UDP_AUTH_QUERY_TIMEOUT 3000 /** timeout in milliseconds for TCP queries to auth servers. */ #define TCP_AUTH_QUERY_TIMEOUT 3000 /** Advertised version of EDNS capabilities */ #define EDNS_ADVERTISED_VERSION 0 /** Advertised size of EDNS capabilities */ extern uint16_t EDNS_ADVERTISED_SIZE; /** bits for EDNS bitfield */ #define EDNS_DO 0x8000 /* Dnssec Ok */ /** byte size of ip4 address */ #define INET_SIZE 4 /** byte size of ip6 address */ #define INET6_SIZE 16 /** DNSKEY zone sign key flag */ #define DNSKEY_BIT_ZSK 0x0100 /** DNSKEY secure entry point, KSK flag */ #define DNSKEY_BIT_SEP 0x0001 /** minimal responses when positive answer */ extern int MINIMAL_RESPONSES; /** rrset order roundrobin */ extern int RRSET_ROUNDROBIN; /** log tag queries with name instead of 'info' for filtering */ extern int LOG_TAG_QUERYREPLY; /** * See if string is ip4 or ip6. * @param str: IP specification. * @return: true if string addr is an ip6 specced address. */ int str_is_ip6(const char* str); /** * Set fd nonblocking. * @param s: file descriptor. * @return: 0 on error (error is printed to log). */ int fd_set_nonblock(int s); /** * Set fd (back to) blocking. * @param s: file descriptor. * @return: 0 on error (error is printed to log). */ int fd_set_block(int s); /** * See if number is a power of 2. * @param num: the value. * @return: true if the number is a power of 2. */ int is_pow2(size_t num); /** * Allocate memory and copy over contents. * @param data: what to copy over. * @param len: length of data. * @return: NULL on malloc failure, or newly malloced data. */ void* memdup(void* data, size_t len); /** * Prints the sockaddr in readable format with log_info. Debug helper. * @param v: at what verbosity level to print this. * @param str: descriptive string printed with it. * @param addr: the sockaddr to print. Can be ip4 or ip6. * @param addrlen: length of addr. */ void log_addr(enum verbosity_value v, const char* str, struct sockaddr_storage* addr, socklen_t addrlen); /** * Prints zone name and sockaddr in readable format with log_info. Debug. * @param v: at what verbosity level to print this. * @param str: descriptive string printed with it. * @param zone: DNS domain name, uncompressed wireformat. * @param addr: the sockaddr to print. Can be ip4 or ip6. * @param addrlen: length of addr. */ void log_name_addr(enum verbosity_value v, const char* str, uint8_t* zone, struct sockaddr_storage* addr, socklen_t addrlen); /** * Log errno and addr. * @param str: descriptive string printed with it. * @param err: errno string to print, i.e. strerror(errno). * @param addr: the sockaddr to print. Can be ip4 or ip6. * @param addrlen: length of addr. */ void log_err_addr(const char* str, const char* err, struct sockaddr_storage* addr, socklen_t addrlen); /** * Convert address string, with "@port" appendix, to sockaddr. * Uses DNS port by default. * @param str: the string * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. * @return 0 on error. */ int extstrtoaddr(const char* str, struct sockaddr_storage* addr, socklen_t* addrlen); /** * Convert ip address string and port to sockaddr. * @param ip: ip4 or ip6 address string. * @param port: port number, host format. * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. * @return 0 on error. */ int ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, socklen_t* addrlen); /** * Convert ip netblock (ip/netsize) string and port to sockaddr. * performs a copy internally to avoid writing over 'ip' string. * @param ip: ip4 or ip6 address string. * @param port: port number, host format. * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. * @param net: netblock size is returned. * @return 0 on error. */ int netblockstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, socklen_t* addrlen, int* net); /** * Convert address string, with "@port" appendix, to sockaddr. * It can also have an "#tls-auth-name" appendix (after the port). * The returned tls-auth-name string is a pointer into the input string. * Uses DNS port by default. * @param str: the string * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. * @param auth_name: returned pointer to tls_auth_name, or NULL if none. * @return 0 on error. */ int authextstrtoaddr(char* str, struct sockaddr_storage* addr, socklen_t* addrlen, char** auth_name); /** * Store port number into sockaddr structure * @param addr: sockaddr structure, ip4 or ip6. * @param addrlen: length of addr. * @param port: port number to put into the addr. */ void sockaddr_store_port(struct sockaddr_storage* addr, socklen_t addrlen, int port); /** * Print string with neat domain name, type and class. * @param v: at what verbosity level to print this. * @param str: string of message. * @param name: domain name uncompressed wireformat. * @param type: host format RR type. * @param dclass: host format RR class. */ void log_nametypeclass(enum verbosity_value v, const char* str, uint8_t* name, uint16_t type, uint16_t dclass); /** * Like log_nametypeclass, but logs with log_query for query logging */ void log_query_in(const char* str, uint8_t* name, uint16_t type, uint16_t dclass); /** * Compare two sockaddrs. Imposes an ordering on the addresses. * Compares address and port. * @param addr1: address 1. * @param len1: lengths of addr1. * @param addr2: address 2. * @param len2: lengths of addr2. * @return: 0 if addr1 == addr2. -1 if addr1 is smaller, +1 if larger. */ int sockaddr_cmp(struct sockaddr_storage* addr1, socklen_t len1, struct sockaddr_storage* addr2, socklen_t len2); /** * Compare two sockaddrs. Compares address, not the port. * @param addr1: address 1. * @param len1: lengths of addr1. * @param addr2: address 2. * @param len2: lengths of addr2. * @return: 0 if addr1 == addr2. -1 if addr1 is smaller, +1 if larger. */ int sockaddr_cmp_addr(struct sockaddr_storage* addr1, socklen_t len1, struct sockaddr_storage* addr2, socklen_t len2); /** * Checkout address family. * @param addr: the sockaddr to examine. * @param len: the length of addr. * @return: true if sockaddr is ip6. */ int addr_is_ip6(struct sockaddr_storage* addr, socklen_t len); /** * Make sure the sockaddr ends in zeroes. For tree insertion and subsequent * comparison. * @param addr: the ip4 or ip6 addr. * @param len: length of addr. * @param net: number of bits to leave untouched, the rest of the netblock * address is zeroed. */ void addr_mask(struct sockaddr_storage* addr, socklen_t len, int net); /** * See how many bits are shared, equal, between two addrs. * @param addr1: first addr. * @param net1: netblock size of first addr. * @param addr2: second addr. * @param net2: netblock size of second addr. * @param addrlen: length of first addr and of second addr. * They must be of the same length (i.e. same type IP4, IP6). * @return: number of bits the same. */ int addr_in_common(struct sockaddr_storage* addr1, int net1, struct sockaddr_storage* addr2, int net2, socklen_t addrlen); /** * Put address into string, works for IPv4 and IPv6. * @param addr: address * @param addrlen: length of address * @param buf: result string stored here * @param len: length of buf. * On failure a string with "error" is stored inside. */ void addr_to_str(struct sockaddr_storage* addr, socklen_t addrlen, char* buf, size_t len); /** * See if sockaddr is an ipv6 mapped ipv4 address, "::ffff:0.0.0.0" * @param addr: address * @param addrlen: length of address * @return true if so */ int addr_is_ip4mapped(struct sockaddr_storage* addr, socklen_t addrlen); /** * See if sockaddr is 255.255.255.255. * @param addr: address * @param addrlen: length of address * @return true if so */ int addr_is_broadcast(struct sockaddr_storage* addr, socklen_t addrlen); /** * See if sockaddr is 0.0.0.0 or ::0. * @param addr: address * @param addrlen: length of address * @return true if so */ int addr_is_any(struct sockaddr_storage* addr, socklen_t addrlen); /** * Insert new socket list item. If fails logs error. * @param list: pointer to pointer to first item. * @param addr: address or NULL if 'cache'. * @param len: length of addr, or 0 if 'cache'. * @param region: where to allocate */ void sock_list_insert(struct sock_list** list, struct sockaddr_storage* addr, socklen_t len, struct regional* region); /** * Append one list to another. Must both be from same qstate(regional). * @param list: pointer to result list that is modified. * @param add: item(s) to add. They are prepended to list. */ void sock_list_prepend(struct sock_list** list, struct sock_list* add); /** * Find addr in list. * @param list: to search in * @param addr: address to look for. * @param len: length. Can be 0, look for 'cache entry'. * @return true if found. */ int sock_list_find(struct sock_list* list, struct sockaddr_storage* addr, socklen_t len); /** * Merge socklist into another socket list. Allocates the new entries * freshly and copies them over, so also performs a region switchover. * Allocation failures are logged. * @param list: the destination list (checked for duplicates) * @param region: where to allocate * @param add: the list of entries to add. */ void sock_list_merge(struct sock_list** list, struct regional* region, struct sock_list* add); /** * Log libcrypto error with descriptive string. Calls log_err(). * @param str: what failed. */ void log_crypto_err(const char* str); /** * Log libcrypto error from errcode with descriptive string, calls log_err. * @param str: what failed. * @param err: error code from ERR_get_error. */ void log_crypto_err_code(const char* str, unsigned long err); /** * Log certificate details verbosity, string, of X509 cert * @param level: verbosity level * @param str: string to prefix on output * @param cert: X509* structure. */ void log_cert(unsigned level, const char* str, void* cert); /** * Set SSL_OP_NOxxx options on SSL context to disable bad crypto * @param ctxt: SSL_CTX* * @return false on failure. */ int listen_sslctx_setup(void* ctxt); /** * Further setup of listening SSL context, after keys loaded. * @param ctxt: SSL_CTX* */ void listen_sslctx_setup_2(void* ctxt); /** * create SSL listen context * @param key: private key file. * @param pem: public key cert. * @param verifypem: if nonNULL, verifylocation file. * return SSL_CTX* or NULL on failure (logged). */ void* listen_sslctx_create(char* key, char* pem, char* verifypem); /** * create SSL connect context * @param key: if nonNULL (also pem nonNULL), the client private key. * @param pem: client public key (or NULL if key is NULL). * @param verifypem: if nonNULL used for verifylocation file. * @param wincert: add system certificate store to ctx (add to verifypem ca * certs). * @return SSL_CTX* or NULL on failure (logged). */ void* connect_sslctx_create(char* key, char* pem, char* verifypem, int wincert); /** * accept a new fd and wrap it in a BIO in SSL * @param sslctx: the SSL_CTX to use (from listen_sslctx_create()). * @param fd: from accept, nonblocking. * @return SSL or NULL on alloc failure. */ void* incoming_ssl_fd(void* sslctx, int fd); /** * connect a new fd and wrap it in a BIO in SSL * @param sslctx: the SSL_CTX to use (from connect_sslctx_create()) * @param fd: from connect. * @return SSL or NULL on alloc failure */ void* outgoing_ssl_fd(void* sslctx, int fd); /** * check if authname SSL functionality is available, false if not * @param auth_name: the name for the remote server, used for error print. * @return false if SSL functionality to check the SSL name is not available. */ int check_auth_name_for_ssl(char* auth_name); /** * set auth name on SSL for verification * @param ssl: SSL* to set * @param auth_name: if NULL nothing happens, otherwise the name to check. * @param use_sni: if SNI will be used. * @return 1 on success or NULL auth_name, 0 on failure. */ int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni); /** * Initialize openssl locking for thread safety * @return false on failure (alloc failure). */ int ub_openssl_lock_init(void); /** * De-init the allocated openssl locks */ void ub_openssl_lock_delete(void); /** * setup TLS session ticket * @param sslctx: the SSL_CTX to use (from connect_sslctx_create()) * @param tls_session_ticket_keys: TLS ticket secret filenames * @return false on failure (alloc failure). */ int listen_sslctx_setup_ticket_keys(void* sslctx, struct config_strlist* tls_session_ticket_keys); /** Free memory used for TLS session ticket keys */ void listen_sslctx_delete_ticket_keys(void); /** * RPZ format netblock to network byte order address and netblock * example RPZ netblock format dnames: * - 24.10.100.51.198.rpz-ip -> 198.51.100.10/24 * - 32.10.zz.db8.2001.rpz-ip -> 2001:db8:0:0:0:0:0:10/32 * @param dname: the dname containing RPZ format netblock * @param dnamelen: length of dname * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. * @param net: where to store netmask * @param af: where to store address family. * @return 0 on error. */ int netblockdnametoaddr(uint8_t* dname, size_t dnamelen, struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af); /** Return strerror or wsastrerror for socket error printout */ char* sock_strerror(int errn); /** close the socket with close, or wsa closesocket */ void sock_close(int socket); #endif /* NET_HELP_H */ unbound-1.13.1/util/edns.c0000644000175000017500000001304314010434640014752 0ustar wouterwouter/* * util/edns.c - handle base EDNS options. * * Copyright (c) 2018, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for base EDNS options. */ #include "config.h" #include "util/edns.h" #include "util/config_file.h" #include "util/netevent.h" #include "util/net_help.h" #include "util/regional.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" struct edns_strings* edns_strings_create(void) { struct edns_strings* edns_strings = calloc(1, sizeof(struct edns_strings)); if(!edns_strings) return NULL; if(!(edns_strings->region = regional_create())) { edns_strings_delete(edns_strings); return NULL; } return edns_strings; } void edns_strings_delete(struct edns_strings* edns_strings) { if(!edns_strings) return; regional_destroy(edns_strings->region); free(edns_strings); } static int edns_strings_client_insert(struct edns_strings* edns_strings, struct sockaddr_storage* addr, socklen_t addrlen, int net, const char* string) { struct edns_string_addr* esa = regional_alloc_zero(edns_strings->region, sizeof(struct edns_string_addr)); if(!esa) return 0; esa->string_len = strlen(string); esa->string = regional_alloc_init(edns_strings->region, string, esa->string_len); if(!esa->string) return 0; if(!addr_tree_insert(&edns_strings->client_strings, &esa->node, addr, addrlen, net)) { verbose(VERB_QUERY, "duplicate EDNS client string ignored."); } return 1; } int edns_strings_apply_cfg(struct edns_strings* edns_strings, struct config_file* config) { struct config_str2list* c; regional_free_all(edns_strings->region); addr_tree_init(&edns_strings->client_strings); for(c=config->edns_client_strings; c; c=c->next) { struct sockaddr_storage addr; socklen_t addrlen; int net; log_assert(c->str && c->str2); if(!netblockstrtoaddr(c->str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse EDNS client string IP netblock: " "%s", c->str); return 0; } if(!edns_strings_client_insert(edns_strings, &addr, addrlen, net, c->str2)) { log_err("out of memory while adding EDNS strings"); return 0; } } edns_strings->client_string_opcode = config->edns_client_string_opcode; addr_tree_init_parents(&edns_strings->client_strings); return 1; } struct edns_string_addr* edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr, socklen_t addrlen) { return (struct edns_string_addr*)addr_tree_lookup(tree, addr, addrlen); } static int edns_keepalive(struct edns_data* edns_out, struct edns_data* edns_in, struct comm_point* c, struct regional* region) { if(c->type == comm_udp) return 1; /* To respond with a Keepalive option, the client connection * must have received one message with a TCP Keepalive EDNS option, * and that option must have 0 length data. Subsequent messages * sent on that connection will have a TCP Keepalive option. */ if(c->tcp_keepalive || edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_KEEPALIVE)) { int keepalive = c->tcp_timeout_msec / 100; uint8_t data[2]; data[0] = (uint8_t)((keepalive >> 8) & 0xff); data[1] = (uint8_t)(keepalive & 0xff); if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_KEEPALIVE, sizeof(data), data, region)) return 0; c->tcp_keepalive = 1; } return 1; } int apply_edns_options(struct edns_data* edns_out, struct edns_data* edns_in, struct config_file* cfg, struct comm_point* c, struct regional* region) { if(cfg->do_tcp_keepalive && !edns_keepalive(edns_out, edns_in, c, region)) return 0; if (cfg->nsid && edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_NSID) && !edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_NSID, cfg->nsid_len, cfg->nsid, region)) return 0; if(!cfg->pad_responses || c->type != comm_tcp || !c->ssl || !edns_opt_list_find(edns_in->opt_list, LDNS_EDNS_PADDING)) { ; /* pass */ } else if(!edns_opt_list_append(&edns_out->opt_list, LDNS_EDNS_PADDING , 0, NULL, region)) return 0; else edns_out->padding_block_size = cfg->pad_responses_block_size; return 1; } unbound-1.13.1/util/log.c0000644000175000017500000004047614010434640014614 0ustar wouterwouter/* * util/log.c - implementation of the log code * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Implementation of log.h. */ #include "config.h" #include "util/log.h" #include "util/locks.h" #include "sldns/sbuffer.h" #include #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_SYSLOG_H # include #else /**define LOG_ constants */ # define LOG_CRIT 2 # define LOG_ERR 3 # define LOG_WARNING 4 # define LOG_NOTICE 5 # define LOG_INFO 6 # define LOG_DEBUG 7 #endif #ifdef UB_ON_WINDOWS # include "winrc/win_svc.h" #endif /* default verbosity */ enum verbosity_value verbosity = NO_VERBOSE; /** the file logged to. */ static FILE* logfile = 0; /** if key has been created */ static int key_created = 0; /** pthread key for thread ids in logfile */ static ub_thread_key_type logkey; #ifndef THREADS_DISABLED /** pthread mutex to protect FILE* */ static lock_basic_type log_lock; #endif /** the identity of this executable/process */ static const char* ident="unbound"; static const char* default_ident="unbound"; #if defined(HAVE_SYSLOG_H) || defined(UB_ON_WINDOWS) /** are we using syslog(3) to log to */ static int logging_to_syslog = 0; #endif /* HAVE_SYSLOG_H */ /** print time in UTC or in secondsfrom1970 */ static int log_time_asc = 0; void log_init(const char* filename, int use_syslog, const char* chrootdir) { FILE *f; if(!key_created) { key_created = 1; ub_thread_key_create(&logkey, NULL); lock_basic_init(&log_lock); } lock_basic_lock(&log_lock); if(logfile #if defined(HAVE_SYSLOG_H) || defined(UB_ON_WINDOWS) || logging_to_syslog #endif ) { lock_basic_unlock(&log_lock); /* verbose() needs the lock */ verbose(VERB_QUERY, "switching log to %s", use_syslog?"syslog":(filename&&filename[0]?filename:"stderr")); lock_basic_lock(&log_lock); } if(logfile && logfile != stderr) { FILE* cl = logfile; logfile = NULL; /* set to NULL before it is closed, so that other threads have a valid logfile or NULL */ fclose(cl); } #ifdef HAVE_SYSLOG_H if(logging_to_syslog) { closelog(); logging_to_syslog = 0; } if(use_syslog) { /* do not delay opening until first write, because we may * chroot and no longer be able to access dev/log and so on */ /* the facility is LOG_DAEMON by default, but * --with-syslog-facility=LOCAL[0-7] can override it */ openlog(ident, LOG_NDELAY, UB_SYSLOG_FACILITY); logging_to_syslog = 1; lock_basic_unlock(&log_lock); return; } #elif defined(UB_ON_WINDOWS) if(logging_to_syslog) { logging_to_syslog = 0; } if(use_syslog) { logging_to_syslog = 1; lock_basic_unlock(&log_lock); return; } #endif /* HAVE_SYSLOG_H */ if(!filename || !filename[0]) { logfile = stderr; lock_basic_unlock(&log_lock); return; } /* open the file for logging */ if(chrootdir && chrootdir[0] && strncmp(filename, chrootdir, strlen(chrootdir)) == 0) filename += strlen(chrootdir); f = fopen(filename, "a"); if(!f) { lock_basic_unlock(&log_lock); log_err("Could not open logfile %s: %s", filename, strerror(errno)); return; } #ifndef UB_ON_WINDOWS /* line buffering does not work on windows */ setvbuf(f, NULL, (int)_IOLBF, 0); #endif logfile = f; lock_basic_unlock(&log_lock); } void log_file(FILE *f) { lock_basic_lock(&log_lock); logfile = f; lock_basic_unlock(&log_lock); } void log_thread_set(int* num) { ub_thread_key_set(logkey, num); } int log_thread_get(void) { unsigned int* tid; if(!key_created) return 0; tid = (unsigned int*)ub_thread_key_get(logkey); return (int)(tid?*tid:0); } void log_ident_set(const char* id) { ident = id; } void log_ident_set_default(const char* id) { default_ident = id; } void log_ident_revert_to_default() { ident = default_ident; } void log_ident_set_or_default(const char* identity) { if(identity == NULL || identity[0] == 0) log_ident_set(default_ident); else log_ident_set(identity); } void log_set_time_asc(int use_asc) { log_time_asc = use_asc; } void* log_get_lock(void) { if(!key_created) return NULL; #ifndef THREADS_DISABLED return (void*)&log_lock; #else return NULL; #endif } void log_vmsg(int pri, const char* type, const char *format, va_list args) { char message[MAXSYSLOGMSGLEN]; unsigned int* tid = (unsigned int*)ub_thread_key_get(logkey); time_t now; #if defined(HAVE_STRFTIME) && defined(HAVE_LOCALTIME_R) char tmbuf[32]; struct tm tm; #elif defined(UB_ON_WINDOWS) char tmbuf[128], dtbuf[128]; #endif (void)pri; vsnprintf(message, sizeof(message), format, args); #ifdef HAVE_SYSLOG_H if(logging_to_syslog) { syslog(pri, "[%d:%x] %s: %s", (int)getpid(), tid?*tid:0, type, message); return; } #elif defined(UB_ON_WINDOWS) if(logging_to_syslog) { char m[32768]; HANDLE* s; LPCTSTR str = m; DWORD tp = MSG_GENERIC_ERR; WORD wt = EVENTLOG_ERROR_TYPE; if(strcmp(type, "info") == 0) { tp=MSG_GENERIC_INFO; wt=EVENTLOG_INFORMATION_TYPE; } else if(strcmp(type, "warning") == 0) { tp=MSG_GENERIC_WARN; wt=EVENTLOG_WARNING_TYPE; } else if(strcmp(type, "notice") == 0 || strcmp(type, "debug") == 0) { tp=MSG_GENERIC_SUCCESS; wt=EVENTLOG_SUCCESS; } snprintf(m, sizeof(m), "[%s:%x] %s: %s", ident, tid?*tid:0, type, message); s = RegisterEventSource(NULL, SERVICE_NAME); if(!s) return; ReportEvent(s, wt, 0, tp, NULL, 1, 0, &str, NULL); DeregisterEventSource(s); return; } #endif /* HAVE_SYSLOG_H */ lock_basic_lock(&log_lock); if(!logfile) { lock_basic_unlock(&log_lock); return; } now = (time_t)time(NULL); #if defined(HAVE_STRFTIME) && defined(HAVE_LOCALTIME_R) if(log_time_asc && strftime(tmbuf, sizeof(tmbuf), "%b %d %H:%M:%S", localtime_r(&now, &tm))%(sizeof(tmbuf)) != 0) { /* %sizeof buf!=0 because old strftime returned max on error */ fprintf(logfile, "%s %s[%d:%x] %s: %s\n", tmbuf, ident, (int)getpid(), tid?*tid:0, type, message); } else #elif defined(UB_ON_WINDOWS) if(log_time_asc && GetTimeFormat(LOCALE_USER_DEFAULT, 0, NULL, NULL, tmbuf, sizeof(tmbuf)) && GetDateFormat(LOCALE_USER_DEFAULT, 0, NULL, NULL, dtbuf, sizeof(dtbuf))) { fprintf(logfile, "%s %s %s[%d:%x] %s: %s\n", dtbuf, tmbuf, ident, (int)getpid(), tid?*tid:0, type, message); } else #endif fprintf(logfile, "[" ARG_LL "d] %s[%d:%x] %s: %s\n", (long long)now, ident, (int)getpid(), tid?*tid:0, type, message); #ifdef UB_ON_WINDOWS /* line buffering does not work on windows */ fflush(logfile); #endif lock_basic_unlock(&log_lock); } /** * implementation of log_info * @param format: format string printf-style. */ void log_info(const char *format, ...) { va_list args; va_start(args, format); log_vmsg(LOG_INFO, "info", format, args); va_end(args); } /** * implementation of log_err * @param format: format string printf-style. */ void log_err(const char *format, ...) { va_list args; va_start(args, format); log_vmsg(LOG_ERR, "error", format, args); va_end(args); } /** * implementation of log_warn * @param format: format string printf-style. */ void log_warn(const char *format, ...) { va_list args; va_start(args, format); log_vmsg(LOG_WARNING, "warning", format, args); va_end(args); } /** * implementation of fatal_exit * @param format: format string printf-style. */ void fatal_exit(const char *format, ...) { va_list args; va_start(args, format); log_vmsg(LOG_CRIT, "fatal error", format, args); va_end(args); exit(1); } /** * implementation of verbose * @param level: verbose level for the message. * @param format: format string printf-style. */ void verbose(enum verbosity_value level, const char* format, ...) { va_list args; va_start(args, format); if(verbosity >= level) { if(level == VERB_OPS) log_vmsg(LOG_NOTICE, "notice", format, args); else if(level == VERB_DETAIL) log_vmsg(LOG_INFO, "info", format, args); else log_vmsg(LOG_DEBUG, "debug", format, args); } va_end(args); } /** log hex data */ static void log_hex_f(enum verbosity_value v, const char* msg, void* data, size_t length) { size_t i, j; uint8_t* data8 = (uint8_t*)data; const char* hexchar = "0123456789ABCDEF"; char buf[1024+1]; /* alloc blocksize hex chars + \0 */ const size_t blocksize = 512; size_t len; if(length == 0) { verbose(v, "%s[%u]", msg, (unsigned)length); return; } for(i=0; i> 4 ]; buf[j*2 + 1] = hexchar[ data8[i+j] & 0xF ]; } buf[len*2] = 0; verbose(v, "%s[%u:%u] %.*s", msg, (unsigned)length, (unsigned)i, (int)len*2, buf); } } void log_hex(const char* msg, void* data, size_t length) { log_hex_f(verbosity, msg, data, length); } void log_query(const char *format, ...) { va_list args; va_start(args, format); log_vmsg(LOG_INFO, "query", format, args); va_end(args); } void log_reply(const char *format, ...) { va_list args; va_start(args, format); log_vmsg(LOG_INFO, "reply", format, args); va_end(args); } void log_buf(enum verbosity_value level, const char* msg, sldns_buffer* buf) { if(verbosity < level) return; log_hex_f(level, msg, sldns_buffer_begin(buf), sldns_buffer_limit(buf)); } #ifdef USE_WINSOCK char* wsa_strerror(DWORD err) { static char unknown[32]; switch(err) { case WSA_INVALID_HANDLE: return "Specified event object handle is invalid."; case WSA_NOT_ENOUGH_MEMORY: return "Insufficient memory available."; case WSA_INVALID_PARAMETER: return "One or more parameters are invalid."; case WSA_OPERATION_ABORTED: return "Overlapped operation aborted."; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state."; case WSA_IO_PENDING: return "Overlapped operations will complete later."; case WSAEINTR: return "Interrupted function call."; case WSAEBADF: return "File handle is not valid."; case WSAEACCES: return "Permission denied."; case WSAEFAULT: return "Bad address."; case WSAEINVAL: return "Invalid argument."; case WSAEMFILE: return "Too many open files."; case WSAEWOULDBLOCK: return "Resource temporarily unavailable."; case WSAEINPROGRESS: return "Operation now in progress."; case WSAEALREADY: return "Operation already in progress."; case WSAENOTSOCK: return "Socket operation on nonsocket."; case WSAEDESTADDRREQ: return "Destination address required."; case WSAEMSGSIZE: return "Message too long."; case WSAEPROTOTYPE: return "Protocol wrong type for socket."; case WSAENOPROTOOPT: return "Bad protocol option."; case WSAEPROTONOSUPPORT: return "Protocol not supported."; case WSAESOCKTNOSUPPORT: return "Socket type not supported."; case WSAEOPNOTSUPP: return "Operation not supported."; case WSAEPFNOSUPPORT: return "Protocol family not supported."; case WSAEAFNOSUPPORT: return "Address family not supported by protocol family."; case WSAEADDRINUSE: return "Address already in use."; case WSAEADDRNOTAVAIL: return "Cannot assign requested address."; case WSAENETDOWN: return "Network is down."; case WSAENETUNREACH: return "Network is unreachable."; case WSAENETRESET: return "Network dropped connection on reset."; case WSAECONNABORTED: return "Software caused connection abort."; case WSAECONNRESET: return "Connection reset by peer."; case WSAENOBUFS: return "No buffer space available."; case WSAEISCONN: return "Socket is already connected."; case WSAENOTCONN: return "Socket is not connected."; case WSAESHUTDOWN: return "Cannot send after socket shutdown."; case WSAETOOMANYREFS: return "Too many references."; case WSAETIMEDOUT: return "Connection timed out."; case WSAECONNREFUSED: return "Connection refused."; case WSAELOOP: return "Cannot translate name."; case WSAENAMETOOLONG: return "Name too long."; case WSAEHOSTDOWN: return "Host is down."; case WSAEHOSTUNREACH: return "No route to host."; case WSAENOTEMPTY: return "Directory not empty."; case WSAEPROCLIM: return "Too many processes."; case WSAEUSERS: return "User quota exceeded."; case WSAEDQUOT: return "Disk quota exceeded."; case WSAESTALE: return "Stale file handle reference."; case WSAEREMOTE: return "Item is remote."; case WSASYSNOTREADY: return "Network subsystem is unavailable."; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range."; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed."; case WSAEDISCON: return "Graceful shutdown in progress."; case WSAENOMORE: return "No more results."; case WSAECANCELLED: return "Call has been canceled."; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid."; case WSAEINVALIDPROVIDER: return "Service provider is invalid."; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize."; case WSASYSCALLFAILURE: return "System call failure."; case WSASERVICE_NOT_FOUND: return "Service not found."; case WSATYPE_NOT_FOUND: return "Class type not found."; case WSA_E_NO_MORE: return "No more results."; case WSA_E_CANCELLED: return "Call was canceled."; case WSAEREFUSED: return "Database query was refused."; case WSAHOST_NOT_FOUND: return "Host not found."; case WSATRY_AGAIN: return "Nonauthoritative host not found."; case WSANO_RECOVERY: return "This is a nonrecoverable error."; case WSANO_DATA: return "Valid name, no data record of requested type."; case WSA_QOS_RECEIVERS: return "QOS receivers."; case WSA_QOS_SENDERS: return "QOS senders."; case WSA_QOS_NO_SENDERS: return "No QOS senders."; case WSA_QOS_NO_RECEIVERS: return "QOS no receivers."; case WSA_QOS_REQUEST_CONFIRMED: return "QOS request confirmed."; case WSA_QOS_ADMISSION_FAILURE: return "QOS admission error."; case WSA_QOS_POLICY_FAILURE: return "QOS policy failure."; case WSA_QOS_BAD_STYLE: return "QOS bad style."; case WSA_QOS_BAD_OBJECT: return "QOS bad object."; case WSA_QOS_TRAFFIC_CTRL_ERROR: return "QOS traffic control error."; case WSA_QOS_GENERIC_ERROR: return "QOS generic error."; case WSA_QOS_ESERVICETYPE: return "QOS service type error."; case WSA_QOS_EFLOWSPEC: return "QOS flowspec error."; case WSA_QOS_EPROVSPECBUF: return "Invalid QOS provider buffer."; case WSA_QOS_EFILTERSTYLE: return "Invalid QOS filter style."; case WSA_QOS_EFILTERTYPE: return "Invalid QOS filter type."; case WSA_QOS_EFILTERCOUNT: return "Incorrect QOS filter count."; case WSA_QOS_EOBJLENGTH: return "Invalid QOS object length."; case WSA_QOS_EFLOWCOUNT: return "Incorrect QOS flow count."; /*case WSA_QOS_EUNKOWNPSOBJ: return "Unrecognized QOS object.";*/ case WSA_QOS_EPOLICYOBJ: return "Invalid QOS policy object."; case WSA_QOS_EFLOWDESC: return "Invalid QOS flow descriptor."; case WSA_QOS_EPSFLOWSPEC: return "Invalid QOS provider-specific flowspec."; case WSA_QOS_EPSFILTERSPEC: return "Invalid QOS provider-specific filterspec."; case WSA_QOS_ESDMODEOBJ: return "Invalid QOS shape discard mode object."; case WSA_QOS_ESHAPERATEOBJ: return "Invalid QOS shaping rate object."; case WSA_QOS_RESERVED_PETYPE: return "Reserved policy QOS element type."; default: snprintf(unknown, sizeof(unknown), "unknown WSA error code %d", (int)err); return unknown; } } #endif /* USE_WINSOCK */ unbound-1.13.1/util/configparser.y0000644000175000017500000031701114010434640016533 0ustar wouterwouter/* * configparser.y -- yacc grammar for unbound configuration files * * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ %{ #include "config.h" #include #include #include #include #include #include "util/configyyrename.h" #include "util/config_file.h" #include "util/net_help.h" int ub_c_lex(void); void ub_c_error(const char *message); static void validate_respip_action(const char* action); /* these need to be global, otherwise they cannot be used inside yacc */ extern struct config_parser_state* cfg_parser; #if 0 #define OUTYY(s) printf s /* used ONLY when debugging */ #else #define OUTYY(s) #endif %} %union { char* str; }; %token SPACE LETTER NEWLINE COMMENT COLON ANY ZONESTR %token STRING_ARG %token VAR_FORCE_TOPLEVEL %token VAR_SERVER VAR_VERBOSITY VAR_NUM_THREADS VAR_PORT %token VAR_OUTGOING_RANGE VAR_INTERFACE VAR_PREFER_IP4 %token VAR_DO_IP4 VAR_DO_IP6 VAR_PREFER_IP6 VAR_DO_UDP VAR_DO_TCP %token VAR_TCP_MSS VAR_OUTGOING_TCP_MSS VAR_TCP_IDLE_TIMEOUT %token VAR_EDNS_TCP_KEEPALIVE VAR_EDNS_TCP_KEEPALIVE_TIMEOUT %token VAR_CHROOT VAR_USERNAME VAR_DIRECTORY VAR_LOGFILE VAR_PIDFILE %token VAR_MSG_CACHE_SIZE VAR_MSG_CACHE_SLABS VAR_NUM_QUERIES_PER_THREAD %token VAR_RRSET_CACHE_SIZE VAR_RRSET_CACHE_SLABS VAR_OUTGOING_NUM_TCP %token VAR_INFRA_HOST_TTL VAR_INFRA_LAME_TTL VAR_INFRA_CACHE_SLABS %token VAR_INFRA_CACHE_NUMHOSTS VAR_INFRA_CACHE_LAME_SIZE VAR_NAME %token VAR_STUB_ZONE VAR_STUB_HOST VAR_STUB_ADDR VAR_TARGET_FETCH_POLICY %token VAR_HARDEN_SHORT_BUFSIZE VAR_HARDEN_LARGE_QUERIES %token VAR_FORWARD_ZONE VAR_FORWARD_HOST VAR_FORWARD_ADDR %token VAR_DO_NOT_QUERY_ADDRESS VAR_HIDE_IDENTITY VAR_HIDE_VERSION %token VAR_IDENTITY VAR_VERSION VAR_HARDEN_GLUE VAR_MODULE_CONF %token VAR_TRUST_ANCHOR_FILE VAR_TRUST_ANCHOR VAR_VAL_OVERRIDE_DATE %token VAR_BOGUS_TTL VAR_VAL_CLEAN_ADDITIONAL VAR_VAL_PERMISSIVE_MODE %token VAR_INCOMING_NUM_TCP VAR_MSG_BUFFER_SIZE VAR_KEY_CACHE_SIZE %token VAR_KEY_CACHE_SLABS VAR_TRUSTED_KEYS_FILE %token VAR_VAL_NSEC3_KEYSIZE_ITERATIONS VAR_USE_SYSLOG %token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST %token VAR_CACHE_MAX_TTL VAR_HARDEN_DNSSEC_STRIPPED VAR_ACCESS_CONTROL %token VAR_LOCAL_ZONE VAR_LOCAL_DATA VAR_INTERFACE_AUTOMATIC %token VAR_STATISTICS_INTERVAL VAR_DO_DAEMONIZE VAR_USE_CAPS_FOR_ID %token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT %token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR %token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS %token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE %token VAR_CONTROL_INTERFACE VAR_CONTROL_PORT VAR_SERVER_KEY_FILE %token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE %token VAR_CONTROL_USE_CERT %token VAR_EXTENDED_STATISTICS VAR_LOCAL_DATA_PTR VAR_JOSTLE_TIMEOUT %token VAR_STUB_PRIME VAR_UNWANTED_REPLY_THRESHOLD VAR_LOG_TIME_ASCII %token VAR_DOMAIN_INSECURE VAR_PYTHON VAR_PYTHON_SCRIPT VAR_VAL_SIG_SKEW_MIN %token VAR_VAL_SIG_SKEW_MAX VAR_CACHE_MIN_TTL VAR_VAL_LOG_LEVEL %token VAR_AUTO_TRUST_ANCHOR_FILE VAR_KEEP_MISSING VAR_ADD_HOLDDOWN %token VAR_DEL_HOLDDOWN VAR_SO_RCVBUF VAR_EDNS_BUFFER_SIZE VAR_PREFETCH %token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_SO_REUSEPORT VAR_HARDEN_BELOW_NXDOMAIN %token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_LOG_REPLIES VAR_LOG_LOCAL_ACTIONS %token VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM %token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST %token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE %token VAR_HTTPS_PORT VAR_HTTP_ENDPOINT VAR_HTTP_MAX_STREAMS %token VAR_HTTP_QUERY_BUFFER_SIZE VAR_HTTP_RESPONSE_BUFFER_SIZE %token VAR_HTTP_NODELAY VAR_HTTP_NOTLS_DOWNSTREAM %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UDP_CONNECT %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES %token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_KEEP_PROBING %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP %token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE %token VAR_DNSTAP_TLS_CLIENT_KEY_FILE VAR_DNSTAP_TLS_CLIENT_CERT_FILE %token VAR_DNSTAP_SEND_IDENTITY VAR_DNSTAP_SEND_VERSION VAR_DNSTAP_BIDIRECTIONAL %token VAR_DNSTAP_IDENTITY VAR_DNSTAP_VERSION %token VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES %token VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES %token VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT %token VAR_IP_DSCP %token VAR_DISABLE_DNSSEC_LAME_CHECK %token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN %token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR %token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE %token VAR_CLIENT_SUBNET_ALWAYS_FORWARD VAR_CLIENT_SUBNET_OPCODE %token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6 %token VAR_MIN_CLIENT_SUBNET_IPV4 VAR_MIN_CLIENT_SUBNET_IPV6 %token VAR_MAX_ECS_TREE_SIZE_IPV4 VAR_MAX_ECS_TREE_SIZE_IPV6 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN %token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND %token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG %token VAR_LOCAL_ZONE_OVERRIDE VAR_ACCESS_CONTROL_TAG_ACTION %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_SERVE_EXPIRED_TTL %token VAR_SERVE_EXPIRED_TTL_RESET VAR_SERVE_EXPIRED_REPLY_TTL %token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_SERVE_ORIGINAL_TTL VAR_FAKE_DSA %token VAR_FAKE_SHA1 VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR %token VAR_TRUST_ANCHOR_SIGNALING VAR_AGGRESSIVE_NSEC VAR_USE_SYSTEMD %token VAR_SHM_ENABLE VAR_SHM_KEY VAR_ROOT_KEY_SENTINEL %token VAR_DNSCRYPT VAR_DNSCRYPT_ENABLE VAR_DNSCRYPT_PORT VAR_DNSCRYPT_PROVIDER %token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT %token VAR_DNSCRYPT_PROVIDER_CERT_ROTATED %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS %token VAR_DNSCRYPT_NONCE_CACHE_SIZE %token VAR_DNSCRYPT_NONCE_CACHE_SLABS %token VAR_PAD_RESPONSES VAR_PAD_RESPONSES_BLOCK_SIZE %token VAR_PAD_QUERIES VAR_PAD_QUERIES_BLOCK_SIZE %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED %token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT %token VAR_CACHEDB_REDISEXPIRERECORDS %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL %token VAR_FAST_SERVER_PERMIL VAR_FAST_SERVER_NUM %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING %token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | dnscstart contents_dnsc | cachedbstart contents_cachedb | ipsetstart contents_ipset | authstart contents_auth | rpzstart contents_rpz | dynlibstart contents_dl | force_toplevel ; force_toplevel: VAR_FORCE_TOPLEVEL { OUTYY(("\nP(force-toplevel)\n")); } ; /* server: declaration */ serverstart: VAR_SERVER { OUTYY(("\nP(server:)\n")); } ; contents_server: contents_server content_server | ; content_server: server_num_threads | server_verbosity | server_port | server_outgoing_range | server_do_ip4 | server_do_ip6 | server_prefer_ip4 | server_prefer_ip6 | server_do_udp | server_do_tcp | server_tcp_mss | server_outgoing_tcp_mss | server_tcp_idle_timeout | server_tcp_keepalive | server_tcp_keepalive_timeout | server_interface | server_chroot | server_username | server_directory | server_logfile | server_pidfile | server_msg_cache_size | server_msg_cache_slabs | server_num_queries_per_thread | server_rrset_cache_size | server_rrset_cache_slabs | server_outgoing_num_tcp | server_infra_host_ttl | server_infra_lame_ttl | server_infra_cache_slabs | server_infra_cache_numhosts | server_infra_cache_lame_size | server_target_fetch_policy | server_harden_short_bufsize | server_harden_large_queries | server_do_not_query_address | server_hide_identity | server_hide_version | server_identity | server_version | server_harden_glue | server_module_conf | server_trust_anchor_file | server_trust_anchor | server_val_override_date | server_bogus_ttl | server_val_clean_additional | server_val_permissive_mode | server_incoming_num_tcp | server_msg_buffer_size | server_key_cache_size | server_key_cache_slabs | server_trusted_keys_file | server_val_nsec3_keysize_iterations | server_use_syslog | server_outgoing_interface | server_root_hints | server_do_not_query_localhost | server_cache_max_ttl | server_harden_dnssec_stripped | server_access_control | server_local_zone | server_local_data | server_interface_automatic | server_statistics_interval | server_do_daemonize | server_use_caps_for_id | server_statistics_cumulative | server_outgoing_port_permit | server_outgoing_port_avoid | server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size | server_harden_referral_path | server_private_address | server_private_domain | server_extended_statistics | server_local_data_ptr | server_jostle_timeout | server_unwanted_reply_threshold | server_log_time_ascii | server_domain_insecure | server_val_sig_skew_min | server_val_sig_skew_max | server_cache_min_ttl | server_val_log_level | server_auto_trust_anchor_file | server_add_holddown | server_del_holddown | server_keep_missing | server_so_rcvbuf | server_edns_buffer_size | server_prefetch | server_prefetch_key | server_so_sndbuf | server_harden_below_nxdomain | server_ignore_cd_flag | server_log_queries | server_log_replies | server_tcp_upstream | server_ssl_upstream | server_log_local_actions | server_ssl_service_key | server_ssl_service_pem | server_ssl_port | server_https_port | server_http_endpoint | server_http_max_streams | server_http_query_buffer_size | server_http_response_buffer_size | server_http_nodelay | server_http_notls_downstream | server_minimal_responses | server_rrset_roundrobin | server_max_udp_size | server_so_reuseport | server_delay_close | server_udp_connect | server_unblock_lan_zones | server_insecure_lan_zones | server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | server_infra_cache_min_rtt | server_harden_algo_downgrade | server_ip_transparent | server_ip_ratelimit | server_ratelimit | server_ip_dscp | server_infra_keep_probing | server_ip_ratelimit_slabs | server_ratelimit_slabs | server_ip_ratelimit_size | server_ratelimit_size | server_ratelimit_for_domain | server_ratelimit_below_domain | server_ratelimit_factor | server_ip_ratelimit_factor | server_send_client_subnet | server_client_subnet_zone | server_client_subnet_always_forward | server_client_subnet_opcode | server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 | server_min_client_subnet_ipv4 | server_min_client_subnet_ipv6 | server_max_ecs_tree_size_ipv4 | server_max_ecs_tree_size_ipv6 | server_caps_whitelist | server_cache_max_negative_ttl | server_permit_small_holddown | server_qname_minimisation | server_ip_freebind | server_define_tag | server_local_zone_tag | server_disable_dnssec_lame_check | server_access_control_tag | server_local_zone_override | server_access_control_tag_action | server_access_control_tag_data | server_access_control_view | server_qname_minimisation_strict | server_pad_responses | server_pad_responses_block_size | server_pad_queries | server_pad_queries_block_size | server_serve_expired | server_serve_expired_ttl | server_serve_expired_ttl_reset | server_serve_expired_reply_ttl | server_serve_expired_client_timeout | server_serve_original_ttl | server_fake_dsa | server_log_identity | server_use_systemd | server_response_ip_tag | server_response_ip | server_response_ip_data | server_shm_enable | server_shm_key | server_fake_sha1 | server_hide_trustanchor | server_trust_anchor_signaling | server_root_key_sentinel | server_ipsecmod_enabled | server_ipsecmod_hook | server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | server_ipsecmod_whitelist | server_ipsecmod_strict | server_udp_upstream_without_downstream | server_aggressive_nsec | server_tls_cert_bundle | server_tls_additional_port | server_low_rtt | server_fast_server_permil | server_fast_server_num | server_tls_win_cert | server_tcp_connection_limit | server_log_servfail | server_deny_any | server_unknown_server_time_limit | server_log_tag_queryreply | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | server_tls_use_sni | server_edns_client_string | server_edns_client_string_opcode | server_nsid ; stubstart: VAR_STUB_ZONE { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->stubs; cfg_parser->cfg->stubs = s; } else yyerror("out of memory"); } ; contents_stub: contents_stub content_stub | ; content_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first | stub_no_cache | stub_ssl_upstream ; forwardstart: VAR_FORWARD_ZONE { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->forwards; cfg_parser->cfg->forwards = s; } else yyerror("out of memory"); } ; contents_forward: contents_forward content_forward | ; content_forward: forward_name | forward_host | forward_addr | forward_first | forward_no_cache | forward_ssl_upstream ; viewstart: VAR_VIEW { struct config_view* s; OUTYY(("\nP(view:)\n")); s = (struct config_view*)calloc(1, sizeof(struct config_view)); if(s) { s->next = cfg_parser->cfg->views; if(s->next && !s->next->name) yyerror("view without name"); cfg_parser->cfg->views = s; } else yyerror("out of memory"); } ; contents_view: contents_view content_view | ; content_view: view_name | view_local_zone | view_local_data | view_first | view_response_ip | view_response_ip_data | view_local_data_ptr ; authstart: VAR_AUTH_ZONE { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; cfg_parser->cfg->auths = s; /* defaults for auth zone */ s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; s->isrpz = 0; } else yyerror("out of memory"); } ; contents_auth: contents_auth content_auth | ; content_auth: auth_name | auth_zonefile | auth_master | auth_url | auth_for_downstream | auth_for_upstream | auth_fallback_enabled | auth_allow_notify ; rpz_tag: VAR_TAGS STRING_ARG { uint8_t* bitlist; size_t len = 0; OUTYY(("P(server_local_zone_tag:%s)\n", $2)); bitlist = config_parse_taglist(cfg_parser->cfg, $2, &len); free($2); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); } if(bitlist) { cfg_parser->cfg->auths->rpz_taglist = bitlist; cfg_parser->cfg->auths->rpz_taglistlen = len; } } ; rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG { OUTYY(("P(rpz_action_override:%s)\n", $2)); if(strcmp($2, "nxdomain")!=0 && strcmp($2, "nodata")!=0 && strcmp($2, "passthru")!=0 && strcmp($2, "drop")!=0 && strcmp($2, "cname")!=0 && strcmp($2, "disabled")!=0) { yyerror("rpz-action-override action: expected nxdomain, " "nodata, passthru, drop, cname or disabled"); free($2); cfg_parser->cfg->auths->rpz_action_override = NULL; } else { cfg_parser->cfg->auths->rpz_action_override = $2; } } ; rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG { OUTYY(("P(rpz_cname_override:%s)\n", $2)); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = $2; } ; rpz_log: VAR_RPZ_LOG STRING_ARG { OUTYY(("P(rpz_log:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->rpz_log = (strcmp($2, "yes")==0); free($2); } ; rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG { OUTYY(("P(rpz_log_name:%s)\n", $2)); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = $2; } ; rpzstart: VAR_RPZ { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; cfg_parser->cfg->auths = s; /* defaults for RPZ auth zone */ s->for_downstream = 0; s->for_upstream = 0; s->fallback_enabled = 0; s->isrpz = 1; } else yyerror("out of memory"); } ; contents_rpz: contents_rpz content_rpz | ; content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | auth_allow_notify | rpz_action_override | rpz_cname_override | rpz_log | rpz_log_name ; server_num_threads: VAR_NUM_THREADS STRING_ARG { OUTYY(("P(server_num_threads:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->num_threads = atoi($2); free($2); } ; server_verbosity: VAR_VERBOSITY STRING_ARG { OUTYY(("P(server_verbosity:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->verbosity = atoi($2); free($2); } ; server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG { OUTYY(("P(server_statistics_interval:%s)\n", $2)); if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) cfg_parser->cfg->stat_interval = 0; else if(atoi($2) == 0) yyerror("number expected"); else cfg_parser->cfg->stat_interval = atoi($2); free($2); } ; server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG { OUTYY(("P(server_statistics_cumulative:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_cumulative = (strcmp($2, "yes")==0); free($2); } ; server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG { OUTYY(("P(server_extended_statistics:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_extended = (strcmp($2, "yes")==0); free($2); } ; server_shm_enable: VAR_SHM_ENABLE STRING_ARG { OUTYY(("P(server_shm_enable:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->shm_enable = (strcmp($2, "yes")==0); free($2); } ; server_shm_key: VAR_SHM_KEY STRING_ARG { OUTYY(("P(server_shm_key:%s)\n", $2)); if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) cfg_parser->cfg->shm_key = 0; else if(atoi($2) == 0) yyerror("number expected"); else cfg_parser->cfg->shm_key = atoi($2); free($2); } ; server_port: VAR_PORT STRING_ARG { OUTYY(("P(server_port:%s)\n", $2)); if(atoi($2) == 0) yyerror("port number expected"); else cfg_parser->cfg->port = atoi($2); free($2); } ; server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, $2)) fatal_exit("out of memory adding client-subnet"); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); free($2); #endif } ; server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, $2)) fatal_exit("out of memory adding client-subnet-zone"); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); free($2); #endif } ; server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->client_subnet_always_forward = (strcmp($2, "yes")==0); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", $2)); OUTYY(("P(Deprecated option, ignoring)\n")); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("IPv4 subnet length expected"); else if (atoi($2) > 32) cfg_parser->cfg->max_client_subnet_ipv4 = 32; else if (atoi($2) < 0) cfg_parser->cfg->max_client_subnet_ipv4 = 0; else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi($2); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("Ipv6 subnet length expected"); else if (atoi($2) > 128) cfg_parser->cfg->max_client_subnet_ipv6 = 128; else if (atoi($2) < 0) cfg_parser->cfg->max_client_subnet_ipv6 = 0; else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi($2); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("IPv4 subnet length expected"); else if (atoi($2) > 32) cfg_parser->cfg->min_client_subnet_ipv4 = 32; else if (atoi($2) < 0) cfg_parser->cfg->min_client_subnet_ipv4 = 0; else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi($2); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("Ipv6 subnet length expected"); else if (atoi($2) > 128) cfg_parser->cfg->min_client_subnet_ipv6 = 128; else if (atoi($2) < 0) cfg_parser->cfg->min_client_subnet_ipv6 = 0; else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi($2); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("IPv4 ECS tree size expected"); else if (atoi($2) < 0) cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0; else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi($2); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("IPv6 ECS tree size expected"); else if (atoi($2) < 0) cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0; else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi($2); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free($2); } ; server_interface: VAR_INTERFACE STRING_ARG { OUTYY(("P(server_interface:%s)\n", $2)); if(cfg_parser->cfg->num_ifs == 0) cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); if(!cfg_parser->cfg->ifs) yyerror("out of memory"); else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = $2; } ; server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG { OUTYY(("P(server_outgoing_interface:%s)\n", $2)); if(cfg_parser->cfg->num_out_ifs == 0) cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); else cfg_parser->cfg->out_ifs = realloc( cfg_parser->cfg->out_ifs, (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); if(!cfg_parser->cfg->out_ifs) yyerror("out of memory"); else cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = $2; } ; server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG { OUTYY(("P(server_outgoing_range:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_ports = atoi($2); free($2); } ; server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG { OUTYY(("P(server_outgoing_port_permit:%s)\n", $2)); if(!cfg_mark_ports($2, 1, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free($2); } ; server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG { OUTYY(("P(server_outgoing_port_avoid:%s)\n", $2)); if(!cfg_mark_ports($2, 0, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free($2); } ; server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG { OUTYY(("P(server_outgoing_num_tcp:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_tcp = atoi($2); free($2); } ; server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG { OUTYY(("P(server_incoming_num_tcp:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->incoming_num_tcp = atoi($2); free($2); } ; server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG { OUTYY(("P(server_interface_automatic:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->if_automatic = (strcmp($2, "yes")==0); free($2); } ; server_do_ip4: VAR_DO_IP4 STRING_ARG { OUTYY(("P(server_do_ip4:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip4 = (strcmp($2, "yes")==0); free($2); } ; server_do_ip6: VAR_DO_IP6 STRING_ARG { OUTYY(("P(server_do_ip6:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip6 = (strcmp($2, "yes")==0); free($2); } ; server_do_udp: VAR_DO_UDP STRING_ARG { OUTYY(("P(server_do_udp:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_udp = (strcmp($2, "yes")==0); free($2); } ; server_do_tcp: VAR_DO_TCP STRING_ARG { OUTYY(("P(server_do_tcp:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp = (strcmp($2, "yes")==0); free($2); } ; server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG { OUTYY(("P(server_prefer_ip4:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip4 = (strcmp($2, "yes")==0); free($2); } ; server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG { OUTYY(("P(server_prefer_ip6:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip6 = (strcmp($2, "yes")==0); free($2); } ; server_tcp_mss: VAR_TCP_MSS STRING_ARG { OUTYY(("P(server_tcp_mss:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->tcp_mss = atoi($2); free($2); } ; server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_tcp_mss = atoi($2); free($2); } ; server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG { OUTYY(("P(server_tcp_idle_timeout:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else if (atoi($2) > 120000) cfg_parser->cfg->tcp_idle_timeout = 120000; else if (atoi($2) < 1) cfg_parser->cfg->tcp_idle_timeout = 1; else cfg_parser->cfg->tcp_idle_timeout = atoi($2); free($2); } ; server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG { OUTYY(("P(server_tcp_keepalive:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp_keepalive = (strcmp($2, "yes")==0); free($2); } ; server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else if (atoi($2) > 6553500) cfg_parser->cfg->tcp_keepalive_timeout = 6553500; else if (atoi($2) < 1) cfg_parser->cfg->tcp_keepalive_timeout = 0; else cfg_parser->cfg->tcp_keepalive_timeout = atoi($2); free($2); } ; server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG { OUTYY(("P(server_tcp_upstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tcp_upstream = (strcmp($2, "yes")==0); free($2); } ; server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp($2, "yes")==0); free($2); } ; server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG { OUTYY(("P(server_ssl_upstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ssl_upstream = (strcmp($2, "yes")==0); free($2); } ; server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG { OUTYY(("P(server_ssl_service_key:%s)\n", $2)); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = $2; } ; server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG { OUTYY(("P(server_ssl_service_pem:%s)\n", $2)); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = $2; } ; server_ssl_port: VAR_SSL_PORT STRING_ARG { OUTYY(("P(server_ssl_port:%s)\n", $2)); if(atoi($2) == 0) yyerror("port number expected"); else cfg_parser->cfg->ssl_port = atoi($2); free($2); } ; server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG { OUTYY(("P(server_tls_cert_bundle:%s)\n", $2)); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = $2; } ; server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG { OUTYY(("P(server_tls_win_cert:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_win_cert = (strcmp($2, "yes")==0); free($2); } ; server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG { OUTYY(("P(server_tls_additional_port:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, $2)) yyerror("out of memory"); } ; server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG { OUTYY(("P(server_tls_ciphers:%s)\n", $2)); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = $2; } ; server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG { OUTYY(("P(server_tls_ciphersuites:%s)\n", $2)); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = $2; } ; server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", $2)); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, $2)) yyerror("out of memory"); } ; server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG { OUTYY(("P(server_tls_use_sni:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_use_sni = (strcmp($2, "yes")==0); free($2); } ; server_https_port: VAR_HTTPS_PORT STRING_ARG { OUTYY(("P(server_https_port:%s)\n", $2)); if(atoi($2) == 0) yyerror("port number expected"); else cfg_parser->cfg->https_port = atoi($2); free($2); }; server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG { OUTYY(("P(server_http_endpoint:%s)\n", $2)); free(cfg_parser->cfg->http_endpoint); if($2 && $2[0] != '/') { cfg_parser->cfg->http_endpoint = malloc(strlen($2)+2); if(!cfg_parser->cfg->http_endpoint) yyerror("out of memory"); cfg_parser->cfg->http_endpoint[0] = '/'; memmove(cfg_parser->cfg->http_endpoint+1, $2, strlen($2)+1); free($2); } else { cfg_parser->cfg->http_endpoint = $2; } }; server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG { OUTYY(("P(server_http_max_streams:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->http_max_streams = atoi($2); free($2); }; server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG { OUTYY(("P(server_http_query_buffer_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->http_query_buffer_size)) yyerror("memory size expected"); free($2); }; server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG { OUTYY(("P(server_http_response_buffer_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->http_response_buffer_size)) yyerror("memory size expected"); free($2); }; server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG { OUTYY(("P(server_http_nodelay:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_nodelay = (strcmp($2, "yes")==0); free($2); } server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG { OUTYY(("P(server_http_notls_downstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_notls_downstream = (strcmp($2, "yes")==0); free($2); }; server_use_systemd: VAR_USE_SYSTEMD STRING_ARG { OUTYY(("P(server_use_systemd:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_systemd = (strcmp($2, "yes")==0); free($2); } ; server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG { OUTYY(("P(server_do_daemonize:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_daemonize = (strcmp($2, "yes")==0); free($2); } ; server_use_syslog: VAR_USE_SYSLOG STRING_ARG { OUTYY(("P(server_use_syslog:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_syslog = (strcmp($2, "yes")==0); #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) if(strcmp($2, "yes") == 0) yyerror("no syslog services are available. " "(reconfigure and compile to add)"); #endif free($2); } ; server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG { OUTYY(("P(server_log_time_ascii:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_time_ascii = (strcmp($2, "yes")==0); free($2); } ; server_log_queries: VAR_LOG_QUERIES STRING_ARG { OUTYY(("P(server_log_queries:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_queries = (strcmp($2, "yes")==0); free($2); } ; server_log_replies: VAR_LOG_REPLIES STRING_ARG { OUTYY(("P(server_log_replies:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0); free($2); } ; server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG { OUTYY(("P(server_log_tag_queryreply:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0); free($2); } ; server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG { OUTYY(("P(server_log_servfail:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_servfail = (strcmp($2, "yes")==0); free($2); } ; server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG { OUTYY(("P(server_log_local_actions:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_local_actions = (strcmp($2, "yes")==0); free($2); } ; server_chroot: VAR_CHROOT STRING_ARG { OUTYY(("P(server_chroot:%s)\n", $2)); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = $2; } ; server_username: VAR_USERNAME STRING_ARG { OUTYY(("P(server_username:%s)\n", $2)); free(cfg_parser->cfg->username); cfg_parser->cfg->username = $2; } ; server_directory: VAR_DIRECTORY STRING_ARG { OUTYY(("P(server_directory:%s)\n", $2)); free(cfg_parser->cfg->directory); cfg_parser->cfg->directory = $2; /* change there right away for includes relative to this */ if($2[0]) { char* d; #ifdef UB_ON_WINDOWS w_config_adjust_directory(cfg_parser->cfg); #endif d = cfg_parser->cfg->directory; /* adjust directory if we have already chroot, * like, we reread after sighup */ if(cfg_parser->chroot && cfg_parser->chroot[0] && strncmp(d, cfg_parser->chroot, strlen( cfg_parser->chroot)) == 0) d += strlen(cfg_parser->chroot); if(d[0]) { if(chdir(d)) log_err("cannot chdir to directory: %s (%s)", d, strerror(errno)); } } } ; server_logfile: VAR_LOGFILE STRING_ARG { OUTYY(("P(server_logfile:%s)\n", $2)); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = $2; cfg_parser->cfg->use_syslog = 0; } ; server_pidfile: VAR_PIDFILE STRING_ARG { OUTYY(("P(server_pidfile:%s)\n", $2)); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = $2; } ; server_root_hints: VAR_ROOT_HINTS STRING_ARG { OUTYY(("P(server_root_hints:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, $2)) yyerror("out of memory"); } ; server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG { OUTYY(("P(server_dlv_anchor_file:%s)\n", $2)); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free($2); } ; server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG { OUTYY(("P(server_dlv_anchor:%s)\n", $2)); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free($2); } ; server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, $2)) yyerror("out of memory"); } ; server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG { OUTYY(("P(server_trust_anchor_file:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, $2)) yyerror("out of memory"); } ; server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG { OUTYY(("P(server_trusted_keys_file:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, $2)) yyerror("out of memory"); } ; server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG { OUTYY(("P(server_trust_anchor:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, $2)) yyerror("out of memory"); } ; server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG { OUTYY(("P(server_trust_anchor_signaling:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->trust_anchor_signaling = (strcmp($2, "yes")==0); free($2); } ; server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG { OUTYY(("P(server_root_key_sentinel:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->root_key_sentinel = (strcmp($2, "yes")==0); free($2); } ; server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG { OUTYY(("P(server_domain_insecure:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, $2)) yyerror("out of memory"); } ; server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG { OUTYY(("P(server_hide_identity:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_identity = (strcmp($2, "yes")==0); free($2); } ; server_hide_version: VAR_HIDE_VERSION STRING_ARG { OUTYY(("P(server_hide_version:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_version = (strcmp($2, "yes")==0); free($2); } ; server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG { OUTYY(("P(server_hide_trustanchor:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_trustanchor = (strcmp($2, "yes")==0); free($2); } ; server_identity: VAR_IDENTITY STRING_ARG { OUTYY(("P(server_identity:%s)\n", $2)); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = $2; } ; server_version: VAR_VERSION STRING_ARG { OUTYY(("P(server_version:%s)\n", $2)); free(cfg_parser->cfg->version); cfg_parser->cfg->version = $2; } ; server_nsid: VAR_NSID STRING_ARG { OUTYY(("P(server_nsid:%s)\n", $2)); free(cfg_parser->cfg->nsid_cfg_str); cfg_parser->cfg->nsid_cfg_str = $2; free(cfg_parser->cfg->nsid); cfg_parser->cfg->nsid = NULL; cfg_parser->cfg->nsid_len = 0; if (*$2 == 0) ; /* pass; empty string is not setting nsid */ else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( $2, &cfg_parser->cfg->nsid_len))) yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } ; server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG { OUTYY(("P(server_so_rcvbuf:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free($2); } ; server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG { OUTYY(("P(server_so_sndbuf:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free($2); } ; server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG { OUTYY(("P(server_so_reuseport:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->so_reuseport = (strcmp($2, "yes")==0); free($2); } ; server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG { OUTYY(("P(server_ip_transparent:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ip_transparent = (strcmp($2, "yes")==0); free($2); } ; server_ip_freebind: VAR_IP_FREEBIND STRING_ARG { OUTYY(("P(server_ip_freebind:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ip_freebind = (strcmp($2, "yes")==0); free($2); } ; server_ip_dscp: VAR_IP_DSCP STRING_ARG { OUTYY(("P(server_ip_dscp:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else if (atoi($2) > 63) yyerror("value too large (max 63)"); else if (atoi($2) < 0) yyerror("value too small (min 0)"); else cfg_parser->cfg->ip_dscp = atoi($2); free($2); } ; server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG { OUTYY(("P(server_stream_wait_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free($2); } ; server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG { OUTYY(("P(server_edns_buffer_size:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else if (atoi($2) < 12) yyerror("edns buffer size too small"); else if (atoi($2) > 65535) cfg_parser->cfg->edns_buffer_size = 65535; else cfg_parser->cfg->edns_buffer_size = atoi($2); free($2); } ; server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG { OUTYY(("P(server_msg_buffer_size:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else if (atoi($2) < 4096) yyerror("message buffer size too small (use 4096)"); else cfg_parser->cfg->msg_buffer_size = atoi($2); free($2); } ; server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG { OUTYY(("P(server_msg_cache_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free($2); } ; server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG { OUTYY(("P(server_msg_cache_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->msg_cache_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) yyerror("must be a power of 2"); } free($2); } ; server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG { OUTYY(("P(server_num_queries_per_thread:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else cfg_parser->cfg->num_queries_per_thread = atoi($2); free($2); } ; server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG { OUTYY(("P(server_jostle_timeout:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->jostle_time = atoi($2); free($2); } ; server_delay_close: VAR_DELAY_CLOSE STRING_ARG { OUTYY(("P(server_delay_close:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->delay_close = atoi($2); free($2); } ; server_udp_connect: VAR_UDP_CONNECT STRING_ARG { OUTYY(("P(server_udp_connect:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->udp_connect = (strcmp($2, "yes")==0); free($2); } ; server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG { OUTYY(("P(server_unblock_lan_zones:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->unblock_lan_zones = (strcmp($2, "yes")==0); free($2); } ; server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG { OUTYY(("P(server_insecure_lan_zones:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->insecure_lan_zones = (strcmp($2, "yes")==0); free($2); } ; server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG { OUTYY(("P(server_rrset_cache_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free($2); } ; server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG { OUTYY(("P(server_rrset_cache_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->rrset_cache_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) yyerror("must be a power of 2"); } free($2); } ; server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG { OUTYY(("P(server_infra_host_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->host_ttl = atoi($2); free($2); } ; server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG { OUTYY(("P(server_infra_lame_ttl:%s)\n", $2)); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", $2); free($2); } ; server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG { OUTYY(("P(server_infra_cache_numhosts:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_numhosts = atoi($2); free($2); } ; server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG { OUTYY(("P(server_infra_cache_lame_size:%s)\n", $2)); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", $2); free($2); } ; server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG { OUTYY(("P(server_infra_cache_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->infra_cache_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) yyerror("must be a power of 2"); } free($2); } ; server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_min_rtt = atoi($2); free($2); } ; server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG { OUTYY(("P(server_infra_keep_probing:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->infra_keep_probing = (strcmp($2, "yes")==0); free($2); } ; server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG { OUTYY(("P(server_target_fetch_policy:%s)\n", $2)); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = $2; } ; server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG { OUTYY(("P(server_harden_short_bufsize:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_short_bufsize = (strcmp($2, "yes")==0); free($2); } ; server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG { OUTYY(("P(server_harden_large_queries:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_large_queries = (strcmp($2, "yes")==0); free($2); } ; server_harden_glue: VAR_HARDEN_GLUE STRING_ARG { OUTYY(("P(server_harden_glue:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_glue = (strcmp($2, "yes")==0); free($2); } ; server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_dnssec_stripped = (strcmp($2, "yes")==0); free($2); } ; server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG { OUTYY(("P(server_harden_below_nxdomain:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_below_nxdomain = (strcmp($2, "yes")==0); free($2); } ; server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG { OUTYY(("P(server_harden_referral_path:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_referral_path = (strcmp($2, "yes")==0); free($2); } ; server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG { OUTYY(("P(server_harden_algo_downgrade:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_algo_downgrade = (strcmp($2, "yes")==0); free($2); } ; server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG { OUTYY(("P(server_use_caps_for_id:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_caps_bits_for_id = (strcmp($2, "yes")==0); free($2); } ; server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG { OUTYY(("P(server_caps_whitelist:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, $2)) yyerror("out of memory"); } ; server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG { OUTYY(("P(server_private_address:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, $2)) yyerror("out of memory"); } ; server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG { OUTYY(("P(server_private_domain:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, $2)) yyerror("out of memory"); } ; server_prefetch: VAR_PREFETCH STRING_ARG { OUTYY(("P(server_prefetch:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch = (strcmp($2, "yes")==0); free($2); } ; server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG { OUTYY(("P(server_prefetch_key:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch_key = (strcmp($2, "yes")==0); free($2); } ; server_deny_any: VAR_DENY_ANY STRING_ARG { OUTYY(("P(server_deny_any:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->deny_any = (strcmp($2, "yes")==0); free($2); } ; server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->unwanted_threshold = atoi($2); free($2); } ; server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG { OUTYY(("P(server_do_not_query_address:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, $2)) yyerror("out of memory"); } ; server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG { OUTYY(("P(server_do_not_query_localhost:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->donotquery_localhost = (strcmp($2, "yes")==0); free($2); } ; server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG { OUTYY(("P(server_access_control:%s %s)\n", $2, $3)); if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && strcmp($3, "deny_non_local")!=0 && strcmp($3, "refuse_non_local")!=0 && strcmp($3, "allow_setrd")!=0 && strcmp($3, "allow")!=0 && strcmp($3, "allow_snoop")!=0) { yyerror("expected deny, refuse, deny_non_local, " "refuse_non_local, allow, allow_setrd or " "allow_snoop in access control action"); free($2); free($3); } else { if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3)) fatal_exit("out of memory adding acl"); } } ; server_module_conf: VAR_MODULE_CONF STRING_ARG { OUTYY(("P(server_module_conf:%s)\n", $2)); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = $2; } ; server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG { OUTYY(("P(server_val_override_date:%s)\n", $2)); if(*$2 == '\0' || strcmp($2, "0") == 0) { cfg_parser->cfg->val_date_override = 0; } else if(strlen($2) == 14) { cfg_parser->cfg->val_date_override = cfg_convert_timeval($2); if(!cfg_parser->cfg->val_date_override) yyerror("bad date/time specification"); } else { if(atoi($2) == 0) yyerror("number expected"); cfg_parser->cfg->val_date_override = atoi($2); } free($2); } ; server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG { OUTYY(("P(server_val_sig_skew_min:%s)\n", $2)); if(*$2 == '\0' || strcmp($2, "0") == 0) { cfg_parser->cfg->val_sig_skew_min = 0; } else { cfg_parser->cfg->val_sig_skew_min = atoi($2); if(!cfg_parser->cfg->val_sig_skew_min) yyerror("number expected"); } free($2); } ; server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG { OUTYY(("P(server_val_sig_skew_max:%s)\n", $2)); if(*$2 == '\0' || strcmp($2, "0") == 0) { cfg_parser->cfg->val_sig_skew_max = 0; } else { cfg_parser->cfg->val_sig_skew_max = atoi($2); if(!cfg_parser->cfg->val_sig_skew_max) yyerror("number expected"); } free($2); } ; server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG { OUTYY(("P(server_cache_max_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_ttl = atoi($2); free($2); } ; server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_negative_ttl = atoi($2); free($2); } ; server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG { OUTYY(("P(server_cache_min_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->min_ttl = atoi($2); free($2); } ; server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG { OUTYY(("P(server_bogus_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->bogus_ttl = atoi($2); free($2); } ; server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG { OUTYY(("P(server_val_clean_additional:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->val_clean_additional = (strcmp($2, "yes")==0); free($2); } ; server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG { OUTYY(("P(server_val_permissive_mode:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->val_permissive_mode = (strcmp($2, "yes")==0); free($2); } ; server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG { OUTYY(("P(server_aggressive_nsec:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->aggressive_nsec = (strcmp($2, "yes")==0); free($2); } ; server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG { OUTYY(("P(server_ignore_cd_flag:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ignore_cd = (strcmp($2, "yes")==0); free($2); } ; server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG { OUTYY(("P(server_serve_expired:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired = (strcmp($2, "yes")==0); free($2); } ; server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG { OUTYY(("P(server_serve_expired_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_ttl = atoi($2); free($2); } ; server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp($2, "yes")==0); free($2); } ; server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_reply_ttl = atoi($2); free($2); } ; server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_client_timeout = atoi($2); free($2); } ; server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG { OUTYY(("P(server_serve_original_ttl:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_original_ttl = (strcmp($2, "yes")==0); free($2); } ; server_fake_dsa: VAR_FAKE_DSA STRING_ARG { OUTYY(("P(server_fake_dsa:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); #if defined(HAVE_SSL) || defined(HAVE_NETTLE) else fake_dsa = (strcmp($2, "yes")==0); if(fake_dsa) log_warn("test option fake_dsa is enabled"); #endif free($2); } ; server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG { OUTYY(("P(server_fake_sha1:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); #if defined(HAVE_SSL) || defined(HAVE_NETTLE) else fake_sha1 = (strcmp($2, "yes")==0); if(fake_sha1) log_warn("test option fake_sha1 is enabled"); #endif free($2); } ; server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG { OUTYY(("P(server_val_log_level:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->val_log_level = atoi($2); free($2); } ; server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", $2)); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = $2; } ; server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG { OUTYY(("P(server_add_holddown:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->add_holddown = atoi($2); free($2); } ; server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG { OUTYY(("P(server_del_holddown:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->del_holddown = atoi($2); free($2); } ; server_keep_missing: VAR_KEEP_MISSING STRING_ARG { OUTYY(("P(server_keep_missing:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->keep_missing = atoi($2); free($2); } ; server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG { OUTYY(("P(server_permit_small_holddown:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->permit_small_holddown = (strcmp($2, "yes")==0); free($2); } server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG { OUTYY(("P(server_key_cache_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free($2); } ; server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG { OUTYY(("P(server_key_cache_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->key_cache_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) yyerror("must be a power of 2"); } free($2); } ; server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG { OUTYY(("P(server_neg_cache_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free($2); } ; server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG { OUTYY(("P(server_local_zone:%s %s)\n", $2, $3)); if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 && strcmp($3, "typetransparent")!=0 && strcmp($3, "always_transparent")!=0 && strcmp($3, "always_refuse")!=0 && strcmp($3, "always_nxdomain")!=0 && strcmp($3, "always_nodata")!=0 && strcmp($3, "always_deny")!=0 && strcmp($3, "always_null")!=0 && strcmp($3, "noview")!=0 && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0 && strcmp($3, "inform_redirect") != 0 && strcmp($3, "ipset") != 0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "inform_redirect, always_transparent, " "always_refuse, always_nxdomain, " "always_nodata, always_deny, always_null, " "noview, nodefault or ipset"); free($2); free($3); } else if(strcmp($3, "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_nodefault, $2)) fatal_exit("out of memory adding local-zone"); free($3); #ifdef USE_IPSET } else if(strcmp($3, "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_ipset, $2)) fatal_exit("out of memory adding local-zone"); free($3); #endif } else { if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, $2, $3)) fatal_exit("out of memory adding local-zone"); } } ; server_local_data: VAR_LOCAL_DATA STRING_ARG { OUTYY(("P(server_local_data:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, $2)) fatal_exit("out of memory adding local-data"); } ; server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", $2)); ptr = cfg_ptr_reverse($2); free($2); if(ptr) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_data, ptr)) fatal_exit("out of memory adding local-data"); } else { yyerror("local-data-ptr could not be reversed"); } } ; server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG { OUTYY(("P(server_minimal_responses:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->minimal_responses = (strcmp($2, "yes")==0); free($2); } ; server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG { OUTYY(("P(server_rrset_roundrobin:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->rrset_roundrobin = (strcmp($2, "yes")==0); free($2); } ; server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG { OUTYY(("P(server_unknown_server_time_limit:%s)\n", $2)); cfg_parser->cfg->unknown_server_time_limit = atoi($2); free($2); } ; server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG { OUTYY(("P(server_max_udp_size:%s)\n", $2)); cfg_parser->cfg->max_udp_size = atoi($2); free($2); } ; server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG { OUTYY(("P(dns64_prefix:%s)\n", $2)); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = $2; } ; server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG { OUTYY(("P(server_dns64_synthall:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dns64_synthall = (strcmp($2, "yes")==0); free($2); } ; server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG { OUTYY(("P(dns64_ignore_aaaa:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, $2)) fatal_exit("out of memory adding dns64-ignore-aaaa"); } ; server_define_tag: VAR_DEFINE_TAG STRING_ARG { char* p, *s = $2; OUTYY(("P(server_define_tag:%s)\n", $2)); while((p=strsep(&s, " \t\n")) != NULL) { if(*p) { if(!config_add_tag(cfg_parser->cfg, p)) yyerror("could not define-tag, " "out of memory"); } } free($2); } ; server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, &len); free($3); OUTYY(("P(server_local_zone_tag:%s)\n", $2)); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); free($2); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->local_zone_tags, $2, bitlist, len)) { yyerror("out of memory"); free($2); } } } ; server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, &len); free($3); OUTYY(("P(server_access_control_tag:%s)\n", $2)); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); free($2); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->acl_tags, $2, bitlist, len)) { yyerror("out of memory"); free($2); } } } ; server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", $2, $3, $4)); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, $2, $3, $4)) { yyerror("out of memory"); free($2); free($3); free($4); } } ; server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", $2, $3, $4)); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, $2, $3, $4)) { yyerror("out of memory"); free($2); free($3); free($4); } } ; server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG { OUTYY(("P(server_local_zone_override:%s %s %s)\n", $2, $3, $4)); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, $2, $3, $4)) { yyerror("out of memory"); free($2); free($3); free($4); } } ; server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG { OUTYY(("P(server_access_control_view:%s %s)\n", $2, $3)); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, $2, $3)) { yyerror("out of memory"); } } ; server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, &len); free($3); OUTYY(("P(response_ip_tag:%s)\n", $2)); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); free($2); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->respip_tags, $2, bitlist, len)) { yyerror("out of memory"); free($2); } } } ; server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG { OUTYY(("P(server_ip_ratelimit:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit = atoi($2); free($2); } ; server_ratelimit: VAR_RATELIMIT STRING_ARG { OUTYY(("P(server_ratelimit:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit = atoi($2); free($2); } ; server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG { OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free($2); } ; server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG { OUTYY(("P(server_ratelimit_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free($2); } ; server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->ip_ratelimit_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs)) yyerror("must be a power of 2"); } free($2); } ; server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG { OUTYY(("P(server_ratelimit_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->ratelimit_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) yyerror("must be a power of 2"); } free($2); } ; server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", $2, $3)); if(atoi($3) == 0 && strcmp($3, "0") != 0) { yyerror("number expected"); free($2); free($3); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> ratelimit_for_domain, $2, $3)) fatal_exit("out of memory adding " "ratelimit-for-domain"); } } ; server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", $2, $3)); if(atoi($3) == 0 && strcmp($3, "0") != 0) { yyerror("number expected"); free($2); free($3); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> ratelimit_below_domain, $2, $3)) fatal_exit("out of memory adding " "ratelimit-below-domain"); } } ; server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit_factor = atoi($2); free($2); } ; server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG { OUTYY(("P(server_ratelimit_factor:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit_factor = atoi($2); free($2); } ; server_low_rtt: VAR_LOW_RTT STRING_ARG { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free($2); } ; server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG { OUTYY(("P(server_fast_server_num:%s)\n", $2)); if(atoi($2) <= 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_num = atoi($2); free($2); } ; server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG { OUTYY(("P(server_fast_server_permil:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_permil = atoi($2); free($2); } ; server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG { OUTYY(("P(server_qname_minimisation:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->qname_minimisation = (strcmp($2, "yes")==0); free($2); } ; server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG { OUTYY(("P(server_qname_minimisation_strict:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->qname_minimisation_strict = (strcmp($2, "yes")==0); free($2); } ; server_pad_responses: VAR_PAD_RESPONSES STRING_ARG { OUTYY(("P(server_pad_responses:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->pad_responses = (strcmp($2, "yes")==0); free($2); } ; server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG { OUTYY(("P(server_pad_responses_block_size:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else cfg_parser->cfg->pad_responses_block_size = atoi($2); free($2); } ; server_pad_queries: VAR_PAD_QUERIES STRING_ARG { OUTYY(("P(server_pad_queries:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->pad_queries = (strcmp($2, "yes")==0); free($2); } ; server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG { OUTYY(("P(server_pad_queries_block_size:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else cfg_parser->cfg->pad_queries_block_size = atoi($2); free($2); } ; server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ipsecmod_enabled = (strcmp($2, "yes")==0); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif free($2); } ; server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp($2, "yes")==0); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif free($2); } ; server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", $2)); free(cfg_parser->cfg->ipsecmod_hook); cfg_parser->cfg->ipsecmod_hook = $2; #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free($2); #endif } ; server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ipsecmod_max_ttl = atoi($2); free($2); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free($2); #endif } ; server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, $2)) yyerror("out of memory"); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free($2); #endif } ; server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ipsecmod_strict = (strcmp($2, "yes")==0); free($2); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free($2); #endif } ; server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG { OUTYY(("P(server_edns_client_string:%s %s)\n", $2, $3)); if(!cfg_str2list_insert( &cfg_parser->cfg->edns_client_strings, $2, $3)) fatal_exit("out of memory adding " "edns-client-string"); } ; server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG { OUTYY(("P(edns_client_string_opcode:%s)\n", $2)); if(atoi($2) == 0 && strcmp($2, "0") != 0) yyerror("option code expected"); else if(atoi($2) > 65535 || atoi($2) < 0) yyerror("option code must be in interval [0, 65535]"); else cfg_parser->cfg->edns_client_string_opcode = atoi($2); free($2); } ; stub_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); if(cfg_parser->cfg->stubs->name) yyerror("stub name override, there must be one name " "for one stub-zone"); free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = $2; } ; stub_host: VAR_STUB_HOST STRING_ARG { OUTYY(("P(stub-host:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, $2)) yyerror("out of memory"); } ; stub_addr: VAR_STUB_ADDR STRING_ARG { OUTYY(("P(stub-addr:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, $2)) yyerror("out of memory"); } ; stub_first: VAR_STUB_FIRST STRING_ARG { OUTYY(("P(stub-first:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->isfirst=(strcmp($2, "yes")==0); free($2); } ; stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG { OUTYY(("P(stub-no-cache:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->no_cache=(strcmp($2, "yes")==0); free($2); } ; stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG { OUTYY(("P(stub-ssl-upstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->ssl_upstream = (strcmp($2, "yes")==0); free($2); } ; stub_prime: VAR_STUB_PRIME STRING_ARG { OUTYY(("P(stub-prime:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->isprime = (strcmp($2, "yes")==0); free($2); } ; forward_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); if(cfg_parser->cfg->forwards->name) yyerror("forward name override, there must be one " "name for one forward-zone"); free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = $2; } ; forward_host: VAR_FORWARD_HOST STRING_ARG { OUTYY(("P(forward-host:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, $2)) yyerror("out of memory"); } ; forward_addr: VAR_FORWARD_ADDR STRING_ARG { OUTYY(("P(forward-addr:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, $2)) yyerror("out of memory"); } ; forward_first: VAR_FORWARD_FIRST STRING_ARG { OUTYY(("P(forward-first:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->isfirst=(strcmp($2, "yes")==0); free($2); } ; forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG { OUTYY(("P(forward-no-cache:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->no_cache=(strcmp($2, "yes")==0); free($2); } ; forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG { OUTYY(("P(forward-ssl-upstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->ssl_upstream = (strcmp($2, "yes")==0); free($2); } ; auth_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); if(cfg_parser->cfg->auths->name) yyerror("auth name override, there must be one name " "for one auth-zone"); free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = $2; } ; auth_zonefile: VAR_ZONEFILE STRING_ARG { OUTYY(("P(zonefile:%s)\n", $2)); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = $2; } ; auth_master: VAR_MASTER STRING_ARG { OUTYY(("P(master:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, $2)) yyerror("out of memory"); } ; auth_url: VAR_URL STRING_ARG { OUTYY(("P(url:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, $2)) yyerror("out of memory"); } ; auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG { OUTYY(("P(allow-notify:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, $2)) yyerror("out of memory"); } ; auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG { OUTYY(("P(for-downstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->for_downstream = (strcmp($2, "yes")==0); free($2); } ; auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG { OUTYY(("P(for-upstream:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->for_upstream = (strcmp($2, "yes")==0); free($2); } ; auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG { OUTYY(("P(fallback-enabled:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->fallback_enabled = (strcmp($2, "yes")==0); free($2); } ; view_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); if(cfg_parser->cfg->views->name) yyerror("view name override, there must be one " "name for one view"); free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = $2; } ; view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG { OUTYY(("P(view_local_zone:%s %s)\n", $2, $3)); if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 && strcmp($3, "typetransparent")!=0 && strcmp($3, "always_transparent")!=0 && strcmp($3, "always_refuse")!=0 && strcmp($3, "always_nxdomain")!=0 && strcmp($3, "noview")!=0 && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " "always_nxdomain, noview or nodefault"); free($2); free($3); } else if(strcmp($3, "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_zones_nodefault, $2)) fatal_exit("out of memory adding local-zone"); free($3); #ifdef USE_IPSET } else if(strcmp($3, "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_zones_ipset, $2)) fatal_exit("out of memory adding local-zone"); free($3); #endif } else { if(!cfg_str2list_insert( &cfg_parser->cfg->views->local_zones, $2, $3)) fatal_exit("out of memory adding local-zone"); } } ; view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG { OUTYY(("P(view_response_ip:%s %s)\n", $2, $3)); validate_respip_action($3); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_actions, $2, $3)) fatal_exit("out of memory adding per-view " "response-ip action"); } ; view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG { OUTYY(("P(view_response_ip_data:%s)\n", $2)); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, $2, $3)) fatal_exit("out of memory adding response-ip-data"); } ; view_local_data: VAR_LOCAL_DATA STRING_ARG { OUTYY(("P(view_local_data:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, $2)) { fatal_exit("out of memory adding local-data"); } } ; view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", $2)); ptr = cfg_ptr_reverse($2); free($2); if(ptr) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_data, ptr)) fatal_exit("out of memory adding local-data"); } else { yyerror("local-data-ptr could not be reversed"); } } ; view_first: VAR_VIEW_FIRST STRING_ARG { OUTYY(("P(view-first:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->views->isfirst=(strcmp($2, "yes")==0); free($2); } ; rcstart: VAR_REMOTE_CONTROL { OUTYY(("\nP(remote-control:)\n")); } ; contents_rc: contents_rc content_rc | ; content_rc: rc_control_enable | rc_control_interface | rc_control_port | rc_server_key_file | rc_server_cert_file | rc_control_key_file | rc_control_cert_file | rc_control_use_cert ; rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG { OUTYY(("P(control_enable:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->remote_control_enable = (strcmp($2, "yes")==0); free($2); } ; rc_control_port: VAR_CONTROL_PORT STRING_ARG { OUTYY(("P(control_port:%s)\n", $2)); if(atoi($2) == 0) yyerror("control port number expected"); else cfg_parser->cfg->control_port = atoi($2); free($2); } ; rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG { OUTYY(("P(control_interface:%s)\n", $2)); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, $2)) yyerror("out of memory"); } ; rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG { OUTYY(("P(control_use_cert:%s)\n", $2)); cfg_parser->cfg->control_use_cert = (strcmp($2, "yes")==0); free($2); } ; rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG { OUTYY(("P(rc_server_key_file:%s)\n", $2)); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = $2; } ; rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG { OUTYY(("P(rc_server_cert_file:%s)\n", $2)); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = $2; } ; rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG { OUTYY(("P(rc_control_key_file:%s)\n", $2)); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = $2; } ; rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG { OUTYY(("P(rc_control_cert_file:%s)\n", $2)); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = $2; } ; dtstart: VAR_DNSTAP { OUTYY(("\nP(dnstap:)\n")); } ; contents_dt: contents_dt content_dt | ; content_dt: dt_dnstap_enable | dt_dnstap_socket_path | dt_dnstap_bidirectional | dt_dnstap_ip | dt_dnstap_tls | dt_dnstap_tls_server_name | dt_dnstap_tls_cert_bundle | dt_dnstap_tls_client_key_file | dt_dnstap_tls_client_cert_file | dt_dnstap_send_identity | dt_dnstap_send_version | dt_dnstap_identity | dt_dnstap_version | dt_dnstap_log_resolver_query_messages | dt_dnstap_log_resolver_response_messages | dt_dnstap_log_client_query_messages | dt_dnstap_log_client_response_messages | dt_dnstap_log_forwarder_query_messages | dt_dnstap_log_forwarder_response_messages ; dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG { OUTYY(("P(dt_dnstap_enable:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_bidirectional = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG { OUTYY(("P(dt_dnstap_socket_path:%s)\n", $2)); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = $2; } ; dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG { OUTYY(("P(dt_dnstap_ip:%s)\n", $2)); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = $2; } ; dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG { OUTYY(("P(dt_dnstap_tls:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_tls = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", $2)); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = $2; } ; dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", $2)); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = $2; } ; dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", $2)); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = $2; } ; dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", $2)); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = $2; } ; dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG { OUTYY(("P(dt_dnstap_send_identity:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG { OUTYY(("P(dt_dnstap_send_version:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG { OUTYY(("P(dt_dnstap_identity:%s)\n", $2)); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = $2; } ; dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG { OUTYY(("P(dt_dnstap_version:%s)\n", $2)); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = $2; } ; dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp($2, "yes")==0); free($2); } ; dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp($2, "yes")==0); free($2); } ; pythonstart: VAR_PYTHON { OUTYY(("\nP(python:)\n")); } ; contents_py: contents_py content_py | ; content_py: py_script ; py_script: VAR_PYTHON_SCRIPT STRING_ARG { OUTYY(("P(python-script:%s)\n", $2)); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2)) yyerror("out of memory"); } dynlibstart: VAR_DYNLIB { OUTYY(("\nP(dynlib:)\n")); } ; contents_dl: contents_dl content_dl | ; content_dl: dl_file ; dl_file: VAR_DYNLIB_FILE STRING_ARG { OUTYY(("P(dynlib-file:%s)\n", $2)); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, $2)) yyerror("out of memory"); } server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG { OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2)); if (strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->disable_dnssec_lame_check = (strcmp($2, "yes")==0); free($2); } ; server_log_identity: VAR_LOG_IDENTITY STRING_ARG { OUTYY(("P(server_log_identity:%s)\n", $2)); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = $2; } ; server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG { OUTYY(("P(server_response_ip:%s %s)\n", $2, $3)); validate_respip_action($3); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, $2, $3)) fatal_exit("out of memory adding response-ip"); } ; server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG { OUTYY(("P(server_response_ip_data:%s)\n", $2)); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, $2, $3)) fatal_exit("out of memory adding response-ip-data"); } ; dnscstart: VAR_DNSCRYPT { OUTYY(("\nP(dnscrypt:)\n")); } ; contents_dnsc: contents_dnsc content_dnsc | ; content_dnsc: dnsc_dnscrypt_enable | dnsc_dnscrypt_port | dnsc_dnscrypt_provider | dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert | dnsc_dnscrypt_provider_cert_rotated | dnsc_dnscrypt_shared_secret_cache_size | dnsc_dnscrypt_shared_secret_cache_slabs | dnsc_dnscrypt_nonce_cache_size | dnsc_dnscrypt_nonce_cache_slabs ; dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnscrypt = (strcmp($2, "yes")==0); free($2); } ; dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", $2)); if(atoi($2) == 0) yyerror("port number expected"); else cfg_parser->cfg->dnscrypt_port = atoi($2); free($2); } ; dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", $2)); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = $2; } ; dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", $2)); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, $2)) log_warn("dnscrypt-provider-cert %s is a duplicate", $2); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, $2)) fatal_exit("out of memory adding dnscrypt-provider-cert"); } ; dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", $2)); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, $2)) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } ; dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", $2)); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, $2)) log_warn("dnscrypt-secret-key: %s is a duplicate", $2); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, $2)) fatal_exit("out of memory adding dnscrypt-secret-key"); } ; dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free($2); } ; dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) yyerror("must be a power of 2"); } free($2); } ; dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2)); if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free($2); } ; dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2)); if(atoi($2) == 0) yyerror("number expected"); else { cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2); if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) yyerror("must be a power of 2"); } free($2); } ; cachedbstart: VAR_CACHEDB { OUTYY(("\nP(cachedb:)\n")); } ; contents_cachedb: contents_cachedb content_cachedb | ; content_cachedb: cachedb_backend_name | cachedb_secret_seed | redis_server_host | redis_server_port | redis_timeout | redis_expire_records ; cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", $2)); free(cfg_parser->cfg->cachedb_backend); cfg_parser->cfg->cachedb_backend = $2; #else OUTYY(("P(Compiled without cachedb, ignoring)\n")); free($2); #endif } ; cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", $2)); free(cfg_parser->cfg->cachedb_secret); cfg_parser->cfg->cachedb_secret = $2; #else OUTYY(("P(Compiled without cachedb, ignoring)\n")); free($2); #endif } ; redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", $2)); free(cfg_parser->cfg->redis_server_host); cfg_parser->cfg->redis_server_host = $2; #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); free($2); #endif } ; redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; OUTYY(("P(redis_server_port:%s)\n", $2)); port = atoi($2); if(port == 0 || port < 0 || port > 65535) yyerror("valid redis server port number expected"); else cfg_parser->cfg->redis_server_port = port; #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif free($2); } ; redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", $2)); if(atoi($2) == 0) yyerror("redis timeout value expected"); else cfg_parser->cfg->redis_timeout = atoi($2); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif free($2); } ; redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", $2)); if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->redis_expire_records = (strcmp($2, "yes")==0); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif free($2); } ; server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", $2, $3)); if (atoi($3) < 0) yyerror("positive number expected"); else { if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, $2, $3)) fatal_exit("out of memory adding tcp connection limit"); } } ; ipsetstart: VAR_IPSET { OUTYY(("\nP(ipset:)\n")); } ; contents_ipset: contents_ipset content_ipset | ; content_ipset: ipset_name_v4 | ipset_name_v6 ; ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", $2)); if(cfg_parser->cfg->ipset_name_v4) yyerror("ipset name v4 override, there must be one " "name for ip v4"); free(cfg_parser->cfg->ipset_name_v4); cfg_parser->cfg->ipset_name_v4 = $2; #else OUTYY(("P(Compiled without ipset, ignoring)\n")); free($2); #endif } ; ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", $2)); if(cfg_parser->cfg->ipset_name_v6) yyerror("ipset name v6 override, there must be one " "name for ip v6"); free(cfg_parser->cfg->ipset_name_v6); cfg_parser->cfg->ipset_name_v6 = $2; #else OUTYY(("P(Compiled without ipset, ignoring)\n")); free($2); #endif } ; %% /* parse helper routines could be here */ static void validate_respip_action(const char* action) { if(strcmp(action, "deny")!=0 && strcmp(action, "redirect")!=0 && strcmp(action, "inform")!=0 && strcmp(action, "inform_deny")!=0 && strcmp(action, "always_transparent")!=0 && strcmp(action, "always_refuse")!=0 && strcmp(action, "always_nxdomain")!=0) { yyerror("response-ip action: expected deny, redirect, " "inform, inform_deny, always_transparent, " "always_refuse or always_nxdomain"); } } unbound-1.13.1/util/rbtree.c0000644000175000017500000004012014010434640015300 0ustar wouterwouter/* * rbtree.c -- generic red black tree * * Copyright (c) 2001-2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * Implementation of a redblack tree. */ #include "config.h" #include "log.h" #include "fptr_wlist.h" #include "util/rbtree.h" /** Node colour black */ #define BLACK 0 /** Node colour red */ #define RED 1 /** the NULL node, global alloc */ rbnode_type rbtree_null_node = { RBTREE_NULL, /* Parent. */ RBTREE_NULL, /* Left. */ RBTREE_NULL, /* Right. */ NULL, /* Key. */ BLACK /* Color. */ }; /** rotate subtree left (to preserve redblack property) */ static void rbtree_rotate_left(rbtree_type *rbtree, rbnode_type *node); /** rotate subtree right (to preserve redblack property) */ static void rbtree_rotate_right(rbtree_type *rbtree, rbnode_type *node); /** Fixup node colours when insert happened */ static void rbtree_insert_fixup(rbtree_type *rbtree, rbnode_type *node); /** Fixup node colours when delete happened */ static void rbtree_delete_fixup(rbtree_type* rbtree, rbnode_type* child, rbnode_type* child_parent); /* * Creates a new red black tree, initializes and returns a pointer to it. * * Return NULL on failure. * */ rbtree_type * rbtree_create (int (*cmpf)(const void *, const void *)) { rbtree_type *rbtree; /* Allocate memory for it */ rbtree = (rbtree_type *) malloc(sizeof(rbtree_type)); if (!rbtree) { return NULL; } /* Initialize it */ rbtree_init(rbtree, cmpf); return rbtree; } void rbtree_init(rbtree_type *rbtree, int (*cmpf)(const void *, const void *)) { /* Initialize it */ rbtree->root = RBTREE_NULL; rbtree->count = 0; rbtree->cmp = cmpf; } /* * Rotates the node to the left. * */ static void rbtree_rotate_left(rbtree_type *rbtree, rbnode_type *node) { rbnode_type *right = node->right; node->right = right->left; if (right->left != RBTREE_NULL) right->left->parent = node; right->parent = node->parent; if (node->parent != RBTREE_NULL) { if (node == node->parent->left) { node->parent->left = right; } else { node->parent->right = right; } } else { rbtree->root = right; } right->left = node; node->parent = right; } /* * Rotates the node to the right. * */ static void rbtree_rotate_right(rbtree_type *rbtree, rbnode_type *node) { rbnode_type *left = node->left; node->left = left->right; if (left->right != RBTREE_NULL) left->right->parent = node; left->parent = node->parent; if (node->parent != RBTREE_NULL) { if (node == node->parent->right) { node->parent->right = left; } else { node->parent->left = left; } } else { rbtree->root = left; } left->right = node; node->parent = left; } static void rbtree_insert_fixup(rbtree_type *rbtree, rbnode_type *node) { rbnode_type *uncle; /* While not at the root and need fixing... */ while (node != rbtree->root && node->parent->color == RED) { /* If our parent is left child of our grandparent... */ if (node->parent == node->parent->parent->left) { uncle = node->parent->parent->right; /* If our uncle is red... */ if (uncle->color == RED) { /* Paint the parent and the uncle black... */ node->parent->color = BLACK; uncle->color = BLACK; /* And the grandparent red... */ node->parent->parent->color = RED; /* And continue fixing the grandparent */ node = node->parent->parent; } else { /* Our uncle is black... */ /* Are we the right child? */ if (node == node->parent->right) { node = node->parent; rbtree_rotate_left(rbtree, node); } /* Now we're the left child, repaint and rotate... */ node->parent->color = BLACK; node->parent->parent->color = RED; rbtree_rotate_right(rbtree, node->parent->parent); } } else { uncle = node->parent->parent->left; /* If our uncle is red... */ if (uncle->color == RED) { /* Paint the parent and the uncle black... */ node->parent->color = BLACK; uncle->color = BLACK; /* And the grandparent red... */ node->parent->parent->color = RED; /* And continue fixing the grandparent */ node = node->parent->parent; } else { /* Our uncle is black... */ /* Are we the right child? */ if (node == node->parent->left) { node = node->parent; rbtree_rotate_right(rbtree, node); } /* Now we're the right child, repaint and rotate... */ node->parent->color = BLACK; node->parent->parent->color = RED; rbtree_rotate_left(rbtree, node->parent->parent); } } } rbtree->root->color = BLACK; } /* * Inserts a node into a red black tree. * * Returns NULL on failure or the pointer to the newly added node * otherwise. */ rbnode_type * rbtree_insert (rbtree_type *rbtree, rbnode_type *data) { /* XXX Not necessary, but keeps compiler quiet... */ int r = 0; /* We start at the root of the tree */ rbnode_type *node = rbtree->root; rbnode_type *parent = RBTREE_NULL; fptr_ok(fptr_whitelist_rbtree_cmp(rbtree->cmp)); /* Lets find the new parent... */ while (node != RBTREE_NULL) { /* Compare two keys, do we have a duplicate? */ if ((r = rbtree->cmp(data->key, node->key)) == 0) { return NULL; } parent = node; if (r < 0) { node = node->left; } else { node = node->right; } } /* Initialize the new node */ data->parent = parent; data->left = data->right = RBTREE_NULL; data->color = RED; rbtree->count++; /* Insert it into the tree... */ if (parent != RBTREE_NULL) { if (r < 0) { parent->left = data; } else { parent->right = data; } } else { rbtree->root = data; } /* Fix up the red-black properties... */ rbtree_insert_fixup(rbtree, data); return data; } /* * Searches the red black tree, returns the data if key is found or NULL otherwise. * */ rbnode_type * rbtree_search (rbtree_type *rbtree, const void *key) { rbnode_type *node; if (rbtree_find_less_equal(rbtree, key, &node)) { return node; } else { return NULL; } } /** helpers for delete: swap node colours */ static void swap_int8(uint8_t* x, uint8_t* y) { uint8_t t = *x; *x = *y; *y = t; } /** helpers for delete: swap node pointers */ static void swap_np(rbnode_type** x, rbnode_type** y) { rbnode_type* t = *x; *x = *y; *y = t; } /** Update parent pointers of child trees of 'parent' */ static void change_parent_ptr(rbtree_type* rbtree, rbnode_type* parent, rbnode_type* old, rbnode_type* new) { if(parent == RBTREE_NULL) { log_assert(rbtree->root == old); if(rbtree->root == old) rbtree->root = new; return; } log_assert(parent->left == old || parent->right == old || parent->left == new || parent->right == new); if(parent->left == old) parent->left = new; if(parent->right == old) parent->right = new; } /** Update parent pointer of a node 'child' */ static void change_child_ptr(rbnode_type* child, rbnode_type* old, rbnode_type* new) { if(child == RBTREE_NULL) return; log_assert(child->parent == old || child->parent == new); if(child->parent == old) child->parent = new; } rbnode_type* rbtree_delete(rbtree_type *rbtree, const void *key) { rbnode_type *to_delete; rbnode_type *child; if((to_delete = rbtree_search(rbtree, key)) == 0) return 0; rbtree->count--; /* make sure we have at most one non-leaf child */ if(to_delete->left != RBTREE_NULL && to_delete->right != RBTREE_NULL) { /* swap with smallest from right subtree (or largest from left) */ rbnode_type *smright = to_delete->right; while(smright->left != RBTREE_NULL) smright = smright->left; /* swap the smright and to_delete elements in the tree, * but the rbnode_type is first part of user data struct * so cannot just swap the keys and data pointers. Instead * readjust the pointers left,right,parent */ /* swap colors - colors are tied to the position in the tree */ swap_int8(&to_delete->color, &smright->color); /* swap child pointers in parents of smright/to_delete */ change_parent_ptr(rbtree, to_delete->parent, to_delete, smright); if(to_delete->right != smright) change_parent_ptr(rbtree, smright->parent, smright, to_delete); /* swap parent pointers in children of smright/to_delete */ change_child_ptr(smright->left, smright, to_delete); change_child_ptr(smright->left, smright, to_delete); change_child_ptr(smright->right, smright, to_delete); change_child_ptr(smright->right, smright, to_delete); change_child_ptr(to_delete->left, to_delete, smright); if(to_delete->right != smright) change_child_ptr(to_delete->right, to_delete, smright); if(to_delete->right == smright) { /* set up so after swap they work */ to_delete->right = to_delete; smright->parent = smright; } /* swap pointers in to_delete/smright nodes */ swap_np(&to_delete->parent, &smright->parent); swap_np(&to_delete->left, &smright->left); swap_np(&to_delete->right, &smright->right); /* now delete to_delete (which is at the location where the smright previously was) */ } log_assert(to_delete->left == RBTREE_NULL || to_delete->right == RBTREE_NULL); if(to_delete->left != RBTREE_NULL) child = to_delete->left; else child = to_delete->right; /* unlink to_delete from the tree, replace to_delete with child */ change_parent_ptr(rbtree, to_delete->parent, to_delete, child); change_child_ptr(child, to_delete, to_delete->parent); if(to_delete->color == RED) { /* if node is red then the child (black) can be swapped in */ } else if(child->color == RED) { /* change child to BLACK, removing a RED node is no problem */ if(child!=RBTREE_NULL) child->color = BLACK; } else rbtree_delete_fixup(rbtree, child, to_delete->parent); /* unlink completely */ to_delete->parent = RBTREE_NULL; to_delete->left = RBTREE_NULL; to_delete->right = RBTREE_NULL; to_delete->color = BLACK; return to_delete; } static void rbtree_delete_fixup(rbtree_type* rbtree, rbnode_type* child, rbnode_type* child_parent) { rbnode_type* sibling; int go_up = 1; /* determine sibling to the node that is one-black short */ if(child_parent->right == child) sibling = child_parent->left; else sibling = child_parent->right; while(go_up) { if(child_parent == RBTREE_NULL) { /* removed parent==black from root, every path, so ok */ return; } if(sibling->color == RED) { /* rotate to get a black sibling */ child_parent->color = RED; sibling->color = BLACK; if(child_parent->right == child) rbtree_rotate_right(rbtree, child_parent); else rbtree_rotate_left(rbtree, child_parent); /* new sibling after rotation */ if(child_parent->right == child) sibling = child_parent->left; else sibling = child_parent->right; } if(child_parent->color == BLACK && sibling->color == BLACK && sibling->left->color == BLACK && sibling->right->color == BLACK) { /* fixup local with recolor of sibling */ if(sibling != RBTREE_NULL) sibling->color = RED; child = child_parent; child_parent = child_parent->parent; /* prepare to go up, new sibling */ if(child_parent->right == child) sibling = child_parent->left; else sibling = child_parent->right; } else go_up = 0; } if(child_parent->color == RED && sibling->color == BLACK && sibling->left->color == BLACK && sibling->right->color == BLACK) { /* move red to sibling to rebalance */ if(sibling != RBTREE_NULL) sibling->color = RED; child_parent->color = BLACK; return; } log_assert(sibling != RBTREE_NULL); /* get a new sibling, by rotating at sibling. See which child of sibling is red */ if(child_parent->right == child && sibling->color == BLACK && sibling->right->color == RED && sibling->left->color == BLACK) { sibling->color = RED; sibling->right->color = BLACK; rbtree_rotate_left(rbtree, sibling); /* new sibling after rotation */ if(child_parent->right == child) sibling = child_parent->left; else sibling = child_parent->right; } else if(child_parent->left == child && sibling->color == BLACK && sibling->left->color == RED && sibling->right->color == BLACK) { sibling->color = RED; sibling->left->color = BLACK; rbtree_rotate_right(rbtree, sibling); /* new sibling after rotation */ if(child_parent->right == child) sibling = child_parent->left; else sibling = child_parent->right; } /* now we have a black sibling with a red child. rotate and exchange colors. */ sibling->color = child_parent->color; child_parent->color = BLACK; if(child_parent->right == child) { log_assert(sibling->left->color == RED); sibling->left->color = BLACK; rbtree_rotate_right(rbtree, child_parent); } else { log_assert(sibling->right->color == RED); sibling->right->color = BLACK; rbtree_rotate_left(rbtree, child_parent); } } int rbtree_find_less_equal(rbtree_type *rbtree, const void *key, rbnode_type **result) { int r; rbnode_type *node; log_assert(result); /* We start at root... */ node = rbtree->root; *result = NULL; fptr_ok(fptr_whitelist_rbtree_cmp(rbtree->cmp)); /* While there are children... */ while (node != RBTREE_NULL) { r = rbtree->cmp(key, node->key); if (r == 0) { /* Exact match */ *result = node; return 1; } if (r < 0) { node = node->left; } else { /* Temporary match */ *result = node; node = node->right; } } return 0; } /* * Finds the first element in the red black tree * */ rbnode_type * rbtree_first (rbtree_type *rbtree) { rbnode_type *node; for (node = rbtree->root; node->left != RBTREE_NULL; node = node->left); return node; } rbnode_type * rbtree_last (rbtree_type *rbtree) { rbnode_type *node; for (node = rbtree->root; node->right != RBTREE_NULL; node = node->right); return node; } /* * Returns the next node... * */ rbnode_type * rbtree_next (rbnode_type *node) { rbnode_type *parent; if (node->right != RBTREE_NULL) { /* One right, then keep on going left... */ for (node = node->right; node->left != RBTREE_NULL; node = node->left); } else { parent = node->parent; while (parent != RBTREE_NULL && node == parent->right) { node = parent; parent = parent->parent; } node = parent; } return node; } rbnode_type * rbtree_previous(rbnode_type *node) { rbnode_type *parent; if (node->left != RBTREE_NULL) { /* One left, then keep on going right... */ for (node = node->left; node->right != RBTREE_NULL; node = node->right); } else { parent = node->parent; while (parent != RBTREE_NULL && node == parent->left) { node = parent; parent = parent->parent; } node = parent; } return node; } /** recursive descent traverse */ static void traverse_post(void (*func)(rbnode_type*, void*), void* arg, rbnode_type* node) { if(!node || node == RBTREE_NULL) return; /* recurse */ traverse_post(func, arg, node->left); traverse_post(func, arg, node->right); /* call user func */ (*func)(node, arg); } void traverse_postorder(rbtree_type* tree, void (*func)(rbnode_type*, void*), void* arg) { traverse_post(func, arg, tree->root); } unbound-1.13.1/util/regional.h0000644000175000017500000001257514010434640015637 0ustar wouterwouter/* * regional.h -- region based memory allocator. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Regional allocator. Allocates small portions of of larger chunks. * Based on region-allocator from NSD, but rewritten to be light. * * Different from (nsd) region-allocator.h * o does not have recycle bin * o does not collect stats; just enough to answer get_mem() in use. * o does not keep cleanup list * o does not have function pointers to setup * o allocs the regional struct inside the first block. * o can take a block to create regional from. * o blocks and large allocations are kept on singly linked lists. */ #ifndef UTIL_REGIONAL_H_ #define UTIL_REGIONAL_H_ /** * the regional* is the first block*. * every block has a ptr to the next in first bytes. * and so does the regional struct, which is the first block. */ struct regional { /** * next chunk. NULL if first chunk is the only chunk. * first inside that chunk is the char* next pointer. * When regional_free_all() has been called this value is NULL. */ char* next; /** first large object, cast to char** to obtain next ptr */ char* large_list; /** total large size */ size_t total_large; /** initial chunk size */ size_t first_size; /** number of bytes available in the current chunk. */ size_t available; /** current chunk data position. */ char* data; /** threshold for outside of chunk allocations */ size_t large_object_size; /** padding for sizeof8 alignment of sizeof(struct regional) * for 32bit systems */ size_t padding; }; /** * Create a new regional. * @return: newly allocated regional. */ struct regional* regional_create(void); /** * Create a new region, with custom settings. * @param size: length of first block. * @return: newly allocated regional. */ struct regional* regional_create_custom(size_t size); /** * Create a new region, with custom settings, that will allocate everything * outside the region chunk. * @param size: length of first block. * @return: newly allocated regional. */ struct regional* regional_create_nochunk(size_t size); /** * Free all memory associated with regional. Only keeps the first block with * the regional inside it. * @param r: the region. */ void regional_free_all(struct regional *r); /** * Destroy regional. All memory associated with regional is freed as if * regional_free_all was called, as well as destroying the regional struct. * @param r: to delete. */ void regional_destroy(struct regional *r); /** * Allocate size bytes of memory inside regional. The memory is * deallocated when region_free_all is called for this region. * @param r: the region. * @param size: number of bytes. * @return: pointer to memory allocated. */ void *regional_alloc(struct regional *r, size_t size); /** * Allocate size bytes of memory inside regional and copy INIT into it. * The memory is deallocated when region_free_all is called for this * region. * @param r: the region. * @param init: to copy. * @param size: number of bytes. * @return: pointer to memory allocated. */ void *regional_alloc_init(struct regional* r, const void *init, size_t size); /** * Allocate size bytes of memory inside regional that are initialized to * 0. The memory is deallocated when region_free_all is called for * this region. * @param r: the region. * @param size: number of bytes. * @return: pointer to memory allocated. */ void *regional_alloc_zero(struct regional *r, size_t size); /** * Duplicate string and allocate the result in regional. * @param r: the region. * @param string: null terminated string. * @return: pointer to memory allocated. */ char *regional_strdup(struct regional *r, const char *string); /** Debug print regional statistics to log */ void regional_log_stats(struct regional *r); /** get total memory size in use by region */ size_t regional_get_mem(struct regional* r); #endif /* UTIL_REGIONAL_H_ */ unbound-1.13.1/util/module.c0000644000175000017500000001621614010434640015313 0ustar wouterwouter/* * util/module.c - module interface * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Implementation of module.h. */ #include "config.h" #include "util/module.h" #include "sldns/wire2str.h" const char* strextstate(enum module_ext_state s) { switch(s) { case module_state_initial: return "module_state_initial"; case module_wait_reply: return "module_wait_reply"; case module_wait_module: return "module_wait_module"; case module_restart_next: return "module_restart_next"; case module_wait_subquery: return "module_wait_subquery"; case module_error: return "module_error"; case module_finished: return "module_finished"; } return "bad_extstate_value"; } const char* strmodulevent(enum module_ev e) { switch(e) { case module_event_new: return "module_event_new"; case module_event_pass: return "module_event_pass"; case module_event_reply: return "module_event_reply"; case module_event_noreply: return "module_event_noreply"; case module_event_capsfail: return "module_event_capsfail"; case module_event_moddone: return "module_event_moddone"; case module_event_error: return "module_event_error"; } return "bad_event_value"; } int edns_known_options_init(struct module_env* env) { env->edns_known_options_num = 0; env->edns_known_options = (struct edns_known_option*)calloc( MAX_KNOWN_EDNS_OPTS, sizeof(struct edns_known_option)); if(!env->edns_known_options) return 0; return 1; } void edns_known_options_delete(struct module_env* env) { free(env->edns_known_options); env->edns_known_options = NULL; env->edns_known_options_num = 0; } int edns_register_option(uint16_t opt_code, int bypass_cache_stage, int no_aggregation, struct module_env* env) { size_t i; if(env->worker) { log_err("invalid edns registration: " "trying to register option after module init phase"); return 0; } /** * Checking if we are full first is faster but it does not provide * the option to change the flags when the array is full. * It only impacts unbound initialization, leave it for now. */ /* Check if the option is already registered. */ for(i=0; iedns_known_options_num; i++) if(env->edns_known_options[i].opt_code == opt_code) break; /* If it is not yet registered check if we have space to add a new one. */ if(i == env->edns_known_options_num) { if(env->edns_known_options_num >= MAX_KNOWN_EDNS_OPTS) { log_err("invalid edns registration: maximum options reached"); return 0; } env->edns_known_options_num++; } env->edns_known_options[i].opt_code = opt_code; env->edns_known_options[i].bypass_cache_stage = bypass_cache_stage; env->edns_known_options[i].no_aggregation = no_aggregation; return 1; } int inplace_cb_register(void* cb, enum inplace_cb_list_type type, void* cbarg, struct module_env* env, int id) { struct inplace_cb* callback; struct inplace_cb** prevp; if(env->worker) { log_err("invalid edns callback registration: " "trying to register callback after module init phase"); return 0; } callback = (struct inplace_cb*)calloc(1, sizeof(*callback)); if(callback == NULL) { log_err("out of memory during edns callback registration."); return 0; } callback->id = id; callback->next = NULL; callback->cb = cb; callback->cb_arg = cbarg; prevp = (struct inplace_cb**) &env->inplace_cb_lists[type]; /* append at end of list */ while(*prevp != NULL) prevp = &((*prevp)->next); *prevp = callback; return 1; } void inplace_cb_delete(struct module_env* env, enum inplace_cb_list_type type, int id) { struct inplace_cb* temp = env->inplace_cb_lists[type]; struct inplace_cb* prev = NULL; while(temp) { if(temp->id == id) { if(!prev) { env->inplace_cb_lists[type] = temp->next; free(temp); temp = env->inplace_cb_lists[type]; } else { prev->next = temp->next; free(temp); temp = prev->next; } } else { prev = temp; temp = temp->next; } } } struct edns_known_option* edns_option_is_known(uint16_t opt_code, struct module_env* env) { size_t i; for(i=0; iedns_known_options_num; i++) if(env->edns_known_options[i].opt_code == opt_code) return env->edns_known_options + i; return NULL; } int edns_bypass_cache_stage(struct edns_option* list, struct module_env* env) { size_t i; for(; list; list=list->next) for(i=0; iedns_known_options_num; i++) if(env->edns_known_options[i].opt_code == list->opt_code && env->edns_known_options[i].bypass_cache_stage == 1) return 1; return 0; } int unique_mesh_state(struct edns_option* list, struct module_env* env) { size_t i; if(env->unique_mesh) return 1; for(; list; list=list->next) for(i=0; iedns_known_options_num; i++) if(env->edns_known_options[i].opt_code == list->opt_code && env->edns_known_options[i].no_aggregation == 1) return 1; return 0; } void log_edns_known_options(enum verbosity_value level, struct module_env* env) { size_t i; char str[32], *s; size_t slen; if(env->edns_known_options_num > 0 && verbosity >= level) { verbose(level, "EDNS known options:"); verbose(level, " Code: Bypass_cache_stage: Aggregate_mesh:"); for(i=0; iedns_known_options_num; i++) { s = str; slen = sizeof(str); (void)sldns_wire2str_edns_option_code_print(&s, &slen, env->edns_known_options[i].opt_code); verbose(level, " %-8.8s %-19s %-15s", str, env->edns_known_options[i].bypass_cache_stage?"YES":"NO", env->edns_known_options[i].no_aggregation?"NO":"YES"); } } } void copy_state_to_super(struct module_qstate* qstate, int ATTR_UNUSED(id), struct module_qstate* super) { /* Overwrite super's was_ratelimited only when it was not set */ if(!super->was_ratelimited) { super->was_ratelimited = qstate->was_ratelimited; } } unbound-1.13.1/util/config_file.h0000644000175000017500000012254014010434640016275 0ustar wouterwouter/* * util/config_file.h - reads and stores the config file for unbound. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for the config file. */ #ifndef UTIL_CONFIG_FILE_H #define UTIL_CONFIG_FILE_H struct config_stub; struct config_auth; struct config_view; struct config_strlist; struct config_str2list; struct config_str3list; struct config_strbytelist; struct module_qstate; struct sock_list; struct ub_packed_rrset_key; struct regional; /** List head for strlist processing, used for append operation. */ struct config_strlist_head { /** first in list of text items */ struct config_strlist* first; /** last in list of text items */ struct config_strlist* last; }; /** * The configuration options. * Strings are malloced. */ struct config_file { /** verbosity level as specified in the config file */ int verbosity; /** statistics interval (in seconds) */ int stat_interval; /** if false, statistics values are reset after printing them */ int stat_cumulative; /** if true, the statistics are kept in greater detail */ int stat_extended; /** number of threads to create */ int num_threads; /** port on which queries are answered. */ int port; /** do ip4 query support. */ int do_ip4; /** do ip6 query support. */ int do_ip6; /** prefer ip4 upstream queries. */ int prefer_ip4; /** prefer ip6 upstream queries. */ int prefer_ip6; /** do udp query support. */ int do_udp; /** do tcp query support. */ int do_tcp; /** tcp upstream queries (no UDP upstream queries) */ int tcp_upstream; /** udp upstream enabled when no UDP downstream is enabled (do_udp no)*/ int udp_upstream_without_downstream; /** maximum segment size of tcp socket which queries are answered */ int tcp_mss; /** maximum segment size of tcp socket for outgoing queries */ int outgoing_tcp_mss; /** tcp idle timeout, in msec */ int tcp_idle_timeout; /** do edns tcp keepalive */ int do_tcp_keepalive; /** tcp keepalive timeout, in msec */ int tcp_keepalive_timeout; /** private key file for dnstcp-ssl service (enabled if not NULL) */ char* ssl_service_key; /** public key file for dnstcp-ssl service */ char* ssl_service_pem; /** port on which to provide ssl service */ int ssl_port; /** if outgoing tcp connections use SSL */ int ssl_upstream; /** cert bundle for outgoing connections */ char* tls_cert_bundle; /** should the system certificate store get added to the cert bundle */ int tls_win_cert; /** additional tls ports */ struct config_strlist* tls_additional_port; /** secret key used to encrypt and decrypt TLS session ticket */ struct config_strlist_head tls_session_ticket_keys; /** TLS ciphers */ char* tls_ciphers; /** TLS chiphersuites (TLSv1.3) */ char* tls_ciphersuites; /** if SNI is to be used */ int tls_use_sni; /** port on which to provide DNS over HTTPS service */ int https_port; /** endpoint for HTTP service */ char* http_endpoint; /** MAX_CONCURRENT_STREAMS HTTP/2 setting */ uint32_t http_max_streams; /** maximum size of all HTTP2 query buffers combined. */ size_t http_query_buffer_size; /** maximum size of all HTTP2 response buffers combined. */ size_t http_response_buffer_size; /** set TCP_NODELAY option for http sockets */ int http_nodelay; /** Disable TLS for http sockets downstream */ int http_notls_downstream; /** outgoing port range number of ports (per thread) */ int outgoing_num_ports; /** number of outgoing tcp buffers per (per thread) */ size_t outgoing_num_tcp; /** number of incoming tcp buffers per (per thread) */ size_t incoming_num_tcp; /** allowed udp port numbers, array with 0 if not allowed */ int* outgoing_avail_ports; /** EDNS buffer size to use */ size_t edns_buffer_size; /** size of the stream wait buffers, max */ size_t stream_wait_size; /** number of bytes buffer size for DNS messages */ size_t msg_buffer_size; /** size of the message cache */ size_t msg_cache_size; /** slabs in the message cache. */ size_t msg_cache_slabs; /** number of queries every thread can service */ size_t num_queries_per_thread; /** number of msec to wait before items can be jostled out */ size_t jostle_time; /** size of the rrset cache */ size_t rrset_cache_size; /** slabs in the rrset cache */ size_t rrset_cache_slabs; /** host cache ttl in seconds */ int host_ttl; /** number of slabs in the infra host cache */ size_t infra_cache_slabs; /** max number of hosts in the infra cache */ size_t infra_cache_numhosts; /** min value for infra cache rtt */ int infra_cache_min_rtt; /** keep probing hosts that are down */ int infra_keep_probing; /** delay close of udp-timeouted ports, if 0 no delayclose. in msec */ int delay_close; /** udp_connect enable uses UDP connect to mitigate ICMP side channel */ int udp_connect; /** the target fetch policy for the iterator */ char* target_fetch_policy; /** percent*10, how many times in 1000 to pick from the fastest * destinations */ int fast_server_permil; /** number of fastest server to select from */ size_t fast_server_num; /** automatic interface for incoming messages. Uses ipv6 remapping, * and recvmsg/sendmsg ancillary data to detect interfaces, boolean */ int if_automatic; /** SO_RCVBUF size to set on port 53 UDP socket */ size_t so_rcvbuf; /** SO_SNDBUF size to set on port 53 UDP socket */ size_t so_sndbuf; /** SO_REUSEPORT requested on port 53 sockets */ int so_reuseport; /** IP_TRANSPARENT socket option requested on port 53 sockets */ int ip_transparent; /** IP_FREEBIND socket option request on port 53 sockets */ int ip_freebind; /** IP_TOS socket option requested on port 53 sockets */ int ip_dscp; /** number of interfaces to open. If 0 default all interfaces. */ int num_ifs; /** interface description strings (IP addresses) */ char **ifs; /** number of outgoing interfaces to open. * If 0 default all interfaces. */ int num_out_ifs; /** outgoing interface description strings (IP addresses) */ char **out_ifs; /** the root hints */ struct config_strlist* root_hints; /** the stub definitions, linked list */ struct config_stub* stubs; /** the forward zone definitions, linked list */ struct config_stub* forwards; /** the auth zone definitions, linked list */ struct config_auth* auths; /** the views definitions, linked list */ struct config_view* views; /** list of donotquery addresses, linked list */ struct config_strlist* donotqueryaddrs; #ifdef CLIENT_SUBNET /** list of servers we send edns-client-subnet option to and * accept option from, linked list */ struct config_strlist* client_subnet; /** list of zones we send edns-client-subnet option for */ struct config_strlist* client_subnet_zone; /** opcode assigned by IANA for edns0-client-subnet option */ uint16_t client_subnet_opcode; /** Do not check whitelist if incoming query contains an ECS record */ int client_subnet_always_forward; /** Subnet length we are willing to give up privacy for */ uint8_t max_client_subnet_ipv4; uint8_t max_client_subnet_ipv6; /** Minimum subnet length we are willing to answer */ uint8_t min_client_subnet_ipv4; uint8_t min_client_subnet_ipv6; /** Max number of nodes in the ECS radix tree */ uint32_t max_ecs_tree_size_ipv4; uint32_t max_ecs_tree_size_ipv6; #endif /** list of access control entries, linked list */ struct config_str2list* acls; /** use default localhost donotqueryaddr entries */ int donotquery_localhost; /** list of tcp connection limitss, linked list */ struct config_str2list* tcp_connection_limits; /** harden against very small edns buffer sizes */ int harden_short_bufsize; /** harden against very large query sizes */ int harden_large_queries; /** harden against spoofed glue (out of zone data) */ int harden_glue; /** harden against receiving no DNSSEC data for trust anchor */ int harden_dnssec_stripped; /** harden against queries that fall under known nxdomain names */ int harden_below_nxdomain; /** harden the referral path, query for NS,A,AAAA and validate */ int harden_referral_path; /** harden against algorithm downgrade */ int harden_algo_downgrade; /** use 0x20 bits in query as random ID bits */ int use_caps_bits_for_id; /** 0x20 whitelist, domains that do not use capsforid */ struct config_strlist* caps_whitelist; /** strip away these private addrs from answers, no DNS Rebinding */ struct config_strlist* private_address; /** allow domain (and subdomains) to use private address space */ struct config_strlist* private_domain; /** what threshold for unwanted action. */ size_t unwanted_threshold; /** the number of seconds maximal TTL used for RRsets and messages */ int max_ttl; /** the number of seconds minimum TTL used for RRsets and messages */ int min_ttl; /** the number of seconds maximal negative TTL for SOA in auth */ int max_negative_ttl; /** if prefetching of messages should be performed. */ int prefetch; /** if prefetching of DNSKEYs should be performed. */ int prefetch_key; /** deny queries of type ANY with an empty answer */ int deny_any; /** chrootdir, if not "" or chroot will be done */ char* chrootdir; /** username to change to, if not "". */ char* username; /** working directory */ char* directory; /** filename to log to. */ char* logfile; /** pidfile to write pid to. */ char* pidfile; /** should log messages be sent to syslogd */ int use_syslog; /** log timestamp in ascii UTC */ int log_time_ascii; /** log queries with one line per query */ int log_queries; /** log replies with one line per reply */ int log_replies; /** tag log_queries and log_replies for filtering */ int log_tag_queryreply; /** log every local-zone hit **/ int log_local_actions; /** log servfails with a reason */ int log_servfail; /** log identity to report */ char* log_identity; /** do not report identity (id.server, hostname.bind) */ int hide_identity; /** do not report version (version.server, version.bind) */ int hide_version; /** do not report trustanchor (trustanchor.unbound) */ int hide_trustanchor; /** identity, hostname is returned if "". */ char* identity; /** version, package version returned if "". */ char* version; /** nsid */ char *nsid_cfg_str; uint8_t *nsid; uint16_t nsid_len; /** the module configuration string */ char* module_conf; /** files with trusted DS and DNSKEYs in zonefile format, list */ struct config_strlist* trust_anchor_file_list; /** list of trustanchor keys, linked list */ struct config_strlist* trust_anchor_list; /** files with 5011 autotrust tracked keys */ struct config_strlist* auto_trust_anchor_file_list; /** files with trusted DNSKEYs in named.conf format, list */ struct config_strlist* trusted_keys_file_list; /** insecure domain list */ struct config_strlist* domain_insecure; /** send key tag query */ int trust_anchor_signaling; /** enable root key sentinel */ int root_key_sentinel; /** if not 0, this value is the validation date for RRSIGs */ int32_t val_date_override; /** the minimum for signature clock skew */ int32_t val_sig_skew_min; /** the maximum for signature clock skew */ int32_t val_sig_skew_max; /** this value sets the number of seconds before revalidating bogus */ int bogus_ttl; /** should validator clean additional section for secure msgs */ int val_clean_additional; /** log bogus messages by the validator */ int val_log_level; /** squelch val_log_level to log - this is library goes to callback */ int val_log_squelch; /** should validator allow bogus messages to go through */ int val_permissive_mode; /** use cached NSEC records to synthesise (negative) answers */ int aggressive_nsec; /** ignore the CD flag in incoming queries and refuse them bogus data */ int ignore_cd; /** serve expired entries and prefetch them */ int serve_expired; /** serve expired entries until TTL after expiration */ int serve_expired_ttl; /** reset serve expired TTL after failed update attempt */ int serve_expired_ttl_reset; /** TTL for the serve expired replies */ int serve_expired_reply_ttl; /** serve expired entries only after trying to update the entries and this * timeout (in milliseconds) is reached */ int serve_expired_client_timeout; /** serve original TTLs rather than decrementing ones */ int serve_original_ttl; /** nsec3 maximum iterations per key size, string */ char* val_nsec3_key_iterations; /** autotrust add holddown time, in seconds */ unsigned int add_holddown; /** autotrust del holddown time, in seconds */ unsigned int del_holddown; /** autotrust keep_missing time, in seconds. 0 is forever. */ unsigned int keep_missing; /** permit small holddown values, allowing 5011 rollover very fast */ int permit_small_holddown; /** size of the key cache */ size_t key_cache_size; /** slabs in the key cache. */ size_t key_cache_slabs; /** size of the neg cache */ size_t neg_cache_size; /** local zones config */ struct config_str2list* local_zones; /** local zones nodefault list */ struct config_strlist* local_zones_nodefault; #ifdef USE_IPSET /** local zones ipset list */ struct config_strlist* local_zones_ipset; #endif /** do not add any default local zone */ int local_zones_disable_default; /** local data RRs configured */ struct config_strlist* local_data; /** local zone override types per netblock */ struct config_str3list* local_zone_overrides; /** unblock lan zones (reverse lookups for AS112 zones) */ int unblock_lan_zones; /** insecure lan zones (don't validate AS112 zones) */ int insecure_lan_zones; /** list of zonename, tagbitlist */ struct config_strbytelist* local_zone_tags; /** list of aclname, tagbitlist */ struct config_strbytelist* acl_tags; /** list of aclname, tagname, localzonetype */ struct config_str3list* acl_tag_actions; /** list of aclname, tagname, redirectdata */ struct config_str3list* acl_tag_datas; /** list of aclname, view*/ struct config_str2list* acl_view; /** list of IP-netblock, tagbitlist */ struct config_strbytelist* respip_tags; /** list of response-driven access control entries, linked list */ struct config_str2list* respip_actions; /** RRs configured for response-driven access controls */ struct config_str2list* respip_data; /** tag list, array with tagname[i] is malloced string */ char** tagname; /** number of items in the taglist */ int num_tags; /** remote control section. enable toggle. */ int remote_control_enable; /** the interfaces the remote control should listen on */ struct config_strlist_head control_ifs; /** if the use-cert option is set */ int control_use_cert; /** port number for the control port */ int control_port; /** private key file for server */ char* server_key_file; /** certificate file for server */ char* server_cert_file; /** private key file for unbound-control */ char* control_key_file; /** certificate file for unbound-control */ char* control_cert_file; /** Python script file */ struct config_strlist* python_script; /** Dynamic library file */ struct config_strlist* dynlib_file; /** Use systemd socket activation. */ int use_systemd; /** daemonize, i.e. fork into the background. */ int do_daemonize; /* minimal response when positive answer */ int minimal_responses; /* RRSet roundrobin */ int rrset_roundrobin; /* wait time for unknown server in msec */ int unknown_server_time_limit; /* maximum UDP response size */ size_t max_udp_size; /* DNS64 prefix */ char* dns64_prefix; /* Synthetize all AAAA record despite the presence of an authoritative one */ int dns64_synthall; /** ignore AAAAs for these domain names and use A record anyway */ struct config_strlist* dns64_ignore_aaaa; /** true to enable dnstap support */ int dnstap; /** using bidirectional frame streams if true */ int dnstap_bidirectional; /** dnstap socket path */ char* dnstap_socket_path; /** dnstap IP */ char* dnstap_ip; /** dnstap TLS enable */ int dnstap_tls; /** dnstap tls server authentication name */ char* dnstap_tls_server_name; /** dnstap server cert bundle */ char* dnstap_tls_cert_bundle; /** dnstap client key for client authentication */ char* dnstap_tls_client_key_file; /** dnstap client cert for client authentication */ char* dnstap_tls_client_cert_file; /** true to send "identity" via dnstap */ int dnstap_send_identity; /** true to send "version" via dnstap */ int dnstap_send_version; /** dnstap "identity", hostname is used if "". */ char* dnstap_identity; /** dnstap "version", package version is used if "". */ char* dnstap_version; /** true to log dnstap RESOLVER_QUERY message events */ int dnstap_log_resolver_query_messages; /** true to log dnstap RESOLVER_RESPONSE message events */ int dnstap_log_resolver_response_messages; /** true to log dnstap CLIENT_QUERY message events */ int dnstap_log_client_query_messages; /** true to log dnstap CLIENT_RESPONSE message events */ int dnstap_log_client_response_messages; /** true to log dnstap FORWARDER_QUERY message events */ int dnstap_log_forwarder_query_messages; /** true to log dnstap FORWARDER_RESPONSE message events */ int dnstap_log_forwarder_response_messages; /** true to disable DNSSEC lameness check in iterator */ int disable_dnssec_lame_check; /** ratelimit for ip addresses. 0 is off, otherwise qps (unless overridden) */ int ip_ratelimit; /** number of slabs for ip_ratelimit cache */ size_t ip_ratelimit_slabs; /** memory size in bytes for ip_ratelimit cache */ size_t ip_ratelimit_size; /** ip_ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */ int ip_ratelimit_factor; /** ratelimit for domains. 0 is off, otherwise qps (unless overridden) */ int ratelimit; /** number of slabs for ratelimit cache */ size_t ratelimit_slabs; /** memory size in bytes for ratelimit cache */ size_t ratelimit_size; /** ratelimits for domain (exact match) */ struct config_str2list* ratelimit_for_domain; /** ratelimits below domain */ struct config_str2list* ratelimit_below_domain; /** ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */ int ratelimit_factor; /** minimise outgoing QNAME and hide original QTYPE if possible */ int qname_minimisation; /** minimise QNAME in strict mode, minimise according to RFC. * Do not apply fallback */ int qname_minimisation_strict; /** SHM data - true if shm is enabled */ int shm_enable; /** SHM data - key for the shm */ int shm_key; /** list of EDNS client string entries, linked list */ struct config_str2list* edns_client_strings; /** EDNS opcode to use for EDNS client strings */ uint16_t edns_client_string_opcode; /** DNSCrypt */ /** true to enable dnscrypt */ int dnscrypt; /** port on which to provide dnscrypt service */ int dnscrypt_port; /** provider name 2.dnscrypt-cert.example.com */ char* dnscrypt_provider; /** dnscrypt secret keys 1.key */ struct config_strlist* dnscrypt_secret_key; /** dnscrypt provider certs 1.cert */ struct config_strlist* dnscrypt_provider_cert; /** dnscrypt provider certs 1.cert which have been rotated and should not be * advertised through DNS's providername TXT record but are required to be * able to handle existing traffic using the old cert. */ struct config_strlist* dnscrypt_provider_cert_rotated; /** memory size in bytes for dnscrypt shared secrets cache */ size_t dnscrypt_shared_secret_cache_size; /** number of slabs for dnscrypt shared secrets cache */ size_t dnscrypt_shared_secret_cache_slabs; /** memory size in bytes for dnscrypt nonces cache */ size_t dnscrypt_nonce_cache_size; /** number of slabs for dnscrypt nonces cache */ size_t dnscrypt_nonce_cache_slabs; /** EDNS padding according to RFC7830 and RFC8467 */ /** true to enable padding of responses (default: on) */ int pad_responses; /** block size with which to pad encrypted responses (default: 468) */ size_t pad_responses_block_size; /** true to enable padding of queries (default: on) */ int pad_queries; /** block size with which to pad encrypted queries (default: 128) */ size_t pad_queries_block_size; /** IPsec module */ #ifdef USE_IPSECMOD /** false to bypass the IPsec module */ int ipsecmod_enabled; /** whitelisted domains for ipsecmod */ struct config_strlist* ipsecmod_whitelist; /** path to external hook */ char* ipsecmod_hook; /** true to proceed even with a bogus IPSECKEY */ int ipsecmod_ignore_bogus; /** max TTL for the A/AAAA records that call the hook */ int ipsecmod_max_ttl; /** false to proceed even when ipsecmod_hook fails */ int ipsecmod_strict; #endif /* cachedb module */ #ifdef USE_CACHEDB /** backend DB name */ char* cachedb_backend; /** secret seed for hash key calculation */ char* cachedb_secret; #ifdef USE_REDIS /** redis server's IP address or host name */ char* redis_server_host; /** redis server's TCP port */ int redis_server_port; /** timeout (in ms) for communication with the redis server */ int redis_timeout; /** set timeout on redis records based on DNS response ttl */ int redis_expire_records; #endif #endif /* ipset module */ #ifdef USE_IPSET char* ipset_name_v4; char* ipset_name_v6; #endif }; /** from cfg username, after daemonize setup performed */ extern uid_t cfg_uid; /** from cfg username, after daemonize setup performed */ extern gid_t cfg_gid; /** debug and enable small timeouts */ extern int autr_permit_small_holddown; /** size (in bytes) of stream wait buffers max */ extern size_t stream_wait_max; /** size (in bytes) of all total HTTP2 query buffers max */ extern size_t http2_query_buffer_max; /** size (in bytes) of all total HTTP2 response buffers max */ extern size_t http2_response_buffer_max; /** * Stub config options */ struct config_stub { /** next in list */ struct config_stub* next; /** domain name (in text) of the stub apex domain */ char* name; /** list of stub nameserver hosts (domain name) */ struct config_strlist* hosts; /** list of stub nameserver addresses (IP address) */ struct config_strlist* addrs; /** if stub-prime is set */ int isprime; /** if forward-first is set (failover to without if fails) */ int isfirst; /** use SSL for queries to this stub */ int ssl_upstream; /*** no cache */ int no_cache; }; /** * Auth config options */ struct config_auth { /** next in list */ struct config_auth* next; /** domain name (in text) of the auth apex domain */ char* name; /** list of masters */ struct config_strlist* masters; /** list of urls */ struct config_strlist* urls; /** list of allow-notify */ struct config_strlist* allow_notify; /** zonefile (or NULL) */ char* zonefile; /** provide downstream answers */ int for_downstream; /** provide upstream answers */ int for_upstream; /** fallback to recursion to authorities if zone expired and other * reasons perhaps (like, query bogus) */ int fallback_enabled; /** this zone is used to create local-zone policies */ int isrpz; /** rpz tags (or NULL) */ uint8_t* rpz_taglist; /** length of the taglist (in bytes) */ size_t rpz_taglistlen; /** Override RPZ action for this zone, regardless of zone content */ char* rpz_action_override; /** Log when this RPZ policy is applied */ int rpz_log; /** Display this name in the log when RPZ policy is applied */ char* rpz_log_name; /** Always reply with this CNAME target if the cname override action is * used */ char* rpz_cname; }; /** * View config options */ struct config_view { /** next in list */ struct config_view* next; /** view name */ char* name; /** local zones */ struct config_str2list* local_zones; /** local data RRs */ struct config_strlist* local_data; /** local zones nodefault list */ struct config_strlist* local_zones_nodefault; #ifdef USE_IPSET /** local zones ipset list */ struct config_strlist* local_zones_ipset; #endif /** Fallback to global local_zones when there is no match in the view * view specific tree. 1 for yes, 0 for no */ int isfirst; /** predefined actions for particular IP address responses */ struct config_str2list* respip_actions; /** data complementing the 'redirect' response IP actions */ struct config_str2list* respip_data; }; /** * List of strings for config options */ struct config_strlist { /** next item in list */ struct config_strlist* next; /** config option string */ char* str; }; /** * List of two strings for config options */ struct config_str2list { /** next item in list */ struct config_str2list* next; /** first string */ char* str; /** second string */ char* str2; }; /** * List of three strings for config options */ struct config_str3list { /** next item in list */ struct config_str3list* next; /** first string */ char* str; /** second string */ char* str2; /** third string */ char* str3; }; /** * List of string, bytestring for config options */ struct config_strbytelist { /** next item in list */ struct config_strbytelist* next; /** first string */ char* str; /** second bytestring */ uint8_t* str2; size_t str2len; }; /** * Create config file structure. Filled with default values. * @return: the new structure or NULL on memory error. */ struct config_file* config_create(void); /** * Create config file structure for library use. Filled with default values. * @return: the new structure or NULL on memory error. */ struct config_file* config_create_forlib(void); /** * Read the config file from the specified filename. * @param config: where options are stored into, must be freshly created. * @param filename: name of configfile. If NULL nothing is done. * @param chroot: if not NULL, the chroot dir currently in use (for include). * @return: false on error. In that case errno is set, ENOENT means * file not found. */ int config_read(struct config_file* config, const char* filename, const char* chroot); /** * Destroy the config file structure. * @param config: to delete. */ void config_delete(struct config_file* config); /** * Apply config to global constants; this routine is called in single thread. * @param config: to apply. Side effect: global constants change. */ void config_apply(struct config_file* config); /** * Find username, sets cfg_uid and cfg_gid. * @param config: the config structure. */ void config_lookup_uid(struct config_file* config); /** * Set the given keyword to the given value. * @param config: where to store config * @param option: option name, including the ':' character. * @param value: value, this string is copied if needed, or parsed. * The caller owns the value string. * @return 0 on error (malloc or syntax error). */ int config_set_option(struct config_file* config, const char* option, const char* value); /** * Call print routine for the given option. * @param cfg: config. * @param opt: option name without trailing :. * This is different from config_set_option. * @param func: print func, called as (str, arg) for every data element. * @param arg: user argument for print func. * @return false if the option name is not supported (syntax error). */ int config_get_option(struct config_file* cfg, const char* opt, void (*func)(char*,void*), void* arg); /** * Get an option and return strlist * @param cfg: config file * @param opt: option name. * @param list: list is returned here. malloced, caller must free it. * @return 0=OK, 1=syntax error, 2=malloc failed. */ int config_get_option_list(struct config_file* cfg, const char* opt, struct config_strlist** list); /** * Get an option and collate results into string * @param cfg: config file * @param opt: option name. * @param str: string. malloced, caller must free it. * @return 0=OK, 1=syntax error, 2=malloc failed. */ int config_get_option_collate(struct config_file* cfg, const char* opt, char** str); /** * function to print to a file, use as func with config_get_option. * @param line: text to print. \n appended. * @param arg: pass a FILE*, like stdout. */ void config_print_func(char* line, void* arg); /** * function to collate the text strings into a strlist_head. * @param line: text to append. * @param arg: pass a strlist_head structure. zeroed on start. */ void config_collate_func(char* line, void* arg); /** * take a strlist_head list and return a malloc string. separated with newline. * @param list: strlist first to collate. zeroes return "". * @return NULL on malloc failure. Or if malloc failure happened in strlist. */ char* config_collate_cat(struct config_strlist* list); /** * Append text at end of list. * @param list: list head. zeroed at start. * @param item: new item. malloced by caller. if NULL the insertion fails. * @return true on success. * on fail the item is free()ed. */ int cfg_strlist_append(struct config_strlist_head* list, char* item); /** * Searches the end of a string list and appends the given text. * @param head: pointer to strlist head variable. * @param item: new item. malloced by caller. if NULL the insertion fails. * @return true on success. */ int cfg_strlist_append_ex(struct config_strlist** head, char* item); /** * Find string in strlist. * @param head: pointer to strlist head variable. * @param item: the item to search for. * @return: the element in the list when found, NULL otherwise. */ struct config_strlist* cfg_strlist_find(struct config_strlist* head, const char* item); /** * Insert string into strlist. * @param head: pointer to strlist head variable. * @param item: new item. malloced by caller. If NULL the insertion fails. * @return: true on success. * on fail, the item is free()d. */ int cfg_strlist_insert(struct config_strlist** head, char* item); /** insert with region for allocation. */ int cfg_region_strlist_insert(struct regional* region, struct config_strlist** head, char* item); /** * Insert string into str2list. * @param head: pointer to str2list head variable. * @param item: new item. malloced by caller. If NULL the insertion fails. * @param i2: 2nd string, malloced by caller. If NULL the insertion fails. * @return: true on success. * on fail, the item and i2 are free()d. */ int cfg_str2list_insert(struct config_str2list** head, char* item, char* i2); /** * Insert string into str3list. * @param head: pointer to str3list head variable. * @param item: new item. malloced by caller. If NULL the insertion fails. * @param i2: 2nd string, malloced by caller. If NULL the insertion fails. * @param i3: 3rd string, malloced by caller. If NULL the insertion fails. * @return: true on success. */ int cfg_str3list_insert(struct config_str3list** head, char* item, char* i2, char* i3); /** * Insert string into strbytelist. * @param head: pointer to strbytelist head variable. * @param item: new item. malloced by caller. If NULL the insertion fails. * @param i2: 2nd string, malloced by caller. If NULL the insertion fails. * @param i2len: length of the i2 bytestring. * @return: true on success. */ int cfg_strbytelist_insert(struct config_strbytelist** head, char* item, uint8_t* i2, size_t i2len); /** * Find stub in config list, also returns prevptr (for deletion). * @param pp: call routine with pointer to a pointer to the start of the list, * if the stub is found, on exit, the value contains a pointer to the * next pointer that points to the found element (or to the list start * pointer if it is the first element). * @param nm: name of stub to find. * @return: pointer to config_stub if found, or NULL if not found. */ struct config_stub* cfg_stub_find(struct config_stub*** pp, const char* nm); /** * Delete items in config string list. * @param list: list. */ void config_delstrlist(struct config_strlist* list); /** * Delete items in config double string list. * @param list: list. */ void config_deldblstrlist(struct config_str2list* list); /** * Delete items in config triple string list. * @param list: list. */ void config_deltrplstrlist(struct config_str3list* list); /** delete string array */ void config_del_strarray(char** array, int num); /** delete stringbytelist */ void config_del_strbytelist(struct config_strbytelist* list); /** * Delete a stub item * @param p: stub item */ void config_delstub(struct config_stub* p); /** * Delete items in config stub list. * @param list: list. */ void config_delstubs(struct config_stub* list); /** * Delete an auth item * @param p: auth item */ void config_delauth(struct config_auth* p); /** * Delete items in config auth list. * @param list: list. */ void config_delauths(struct config_auth* list); /** * Delete a view item * @param p: view item */ void config_delview(struct config_view* p); /** * Delete items in config view list. * @param list: list. */ void config_delviews(struct config_view* list); /** check if config for remote control turns on IP-address interface * with certificates or a named pipe without certificates. */ int options_remote_is_address(struct config_file* cfg); /** * Convert 14digit to time value * @param str: string of 14 digits * @return time value or 0 for error. */ time_t cfg_convert_timeval(const char* str); /** * Count number of values in the string. * format ::= (sp num)+ sp * num ::= [-](0-9)+ * sp ::= (space|tab)* * * @param str: string * @return: 0 on parse error, or empty string, else * number of integer values in the string. */ int cfg_count_numbers(const char* str); /** * Convert a 'nice' memory or file size into a bytecount * From '100k' to 102400. and so on. Understands kKmMgG. * k=1024, m=1024*1024, g=1024*1024*1024. * @param str: string * @param res: result is stored here, size in bytes. * @return: true if parsed correctly, or 0 on a parse error (and an error * is logged). */ int cfg_parse_memsize(const char* str, size_t* res); /** * Parse nsid from string into binary nsid. nsid is either a hexidecimal * string or an ascii string prepended with ascii_ in which case the * characters after ascii_ are simply copied. * @param str: the string to parse. * @param nsid_len: returns length of nsid in bytes. * @return malloced bytes or NULL on parse error or malloc failure. */ uint8_t* cfg_parse_nsid(const char* str, uint16_t* nsid_len); /** * Add a tag name to the config. It is added at the end with a new ID value. * @param cfg: the config structure. * @param tag: string (which is copied) with the name. * @return: false on alloc failure. */ int config_add_tag(struct config_file* cfg, const char* tag); /** * Find tag ID in the tag list. * @param cfg: the config structure. * @param tag: string with tag name to search for. * @return: 0..(num_tags-1) with tag ID, or -1 if tagname is not found. */ int find_tag_id(struct config_file* cfg, const char* tag); /** * parse taglist from string into bytestring with bitlist. * @param cfg: the config structure (with tagnames) * @param str: the string to parse. Parse puts 0 bytes in string. * @param listlen: returns length of in bytes. * @return malloced bytes with a bitlist of the tags. or NULL on parse error * or malloc failure. */ uint8_t* config_parse_taglist(struct config_file* cfg, char* str, size_t* listlen); /** * convert tag bitlist to a malloced string with tag names. For debug output. * @param cfg: the config structure (with tagnames) * @param taglist: the tag bitlist. * @param len: length of the tag bitlist. * @return malloced string or NULL. */ char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, size_t len); /** * see if two taglists intersect (have tags in common). * @param list1: first tag bitlist. * @param list1len: length in bytes of first list. * @param list2: second tag bitlist. * @param list2len: length in bytes of second list. * @return true if there are tags in common, 0 if not. */ int taglist_intersect(uint8_t* list1, size_t list1len, const uint8_t* list2, size_t list2len); /** * Parse local-zone directive into two strings and register it in the config. * @param cfg: to put it in. * @param val: argument strings to local-zone, "example.com nodefault". * @return: false on failure */ int cfg_parse_local_zone(struct config_file* cfg, const char* val); /** * Mark "number" or "low-high" as available or not in ports array. * @param str: string in input * @param allow: give true if this range is permitted. * @param avail: the array from cfg. * @param num: size of the array (65536). * @return: true if parsed correctly, or 0 on a parse error (and an error * is logged). */ int cfg_mark_ports(const char* str, int allow, int* avail, int num); /** * Get a condensed list of ports returned. allocated. * @param cfg: config file. * @param avail: the available ports array is returned here. * @return: number of ports in array or 0 on error. */ int cfg_condense_ports(struct config_file* cfg, int** avail); /** * Scan ports available * @param avail: the array from cfg. * @param num: size of the array (65536). * @return the number of ports available for use. */ int cfg_scan_ports(int* avail, int num); /** * Convert a filename to full pathname in original filesys * @param fname: the path name to convert. * Must not be null or empty. * @param cfg: config struct for chroot and chdir (if set). * @param use_chdir: if false, only chroot is applied. * @return pointer to malloced buffer which is: [chroot][chdir]fname * or NULL on malloc failure. */ char* fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir); /** * Convert a ptr shorthand into a full reverse-notation PTR record. * @param str: input string, "IP name" * @return: malloced string "reversed-ip-name PTR name" */ char* cfg_ptr_reverse(char* str); /** * Append text to the error info for validation. * @param qstate: query state. * @param str: copied into query region and appended. * Failures to allocate are logged. */ void errinf(struct module_qstate* qstate, const char* str); /** * Append text to error info: from 1.2.3.4 * @param qstate: query state. * @param origin: sock list with origin of trouble. * Every element added. * If NULL: nothing is added. * if 0len element: 'from cache' is added. */ void errinf_origin(struct module_qstate* qstate, struct sock_list *origin); /** * Append text to error info: for RRset name type class * @param qstate: query state. * @param rr: rrset_key. */ void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr); /** * Append text to error info: str dname * @param qstate: query state. * @param str: explanation string * @param dname: the dname. */ void errinf_dname(struct module_qstate* qstate, const char* str, uint8_t* dname); /** * Create error info in string. For validation failures. * @param qstate: query state. * @return string or NULL on malloc failure (already logged). * This string is malloced and has to be freed by caller. */ char* errinf_to_str_bogus(struct module_qstate* qstate); /** * Create error info in string. For other servfails. * @param qstate: query state. * @return string or NULL on malloc failure (already logged). * This string is malloced and has to be freed by caller. */ char* errinf_to_str_servfail(struct module_qstate* qstate); /** * Used during options parsing */ struct config_parser_state { /** name of file being parser */ char* filename; /** line number in the file, starts at 1 */ int line; /** number of errors encountered */ int errors; /** the result of parsing is stored here. */ struct config_file* cfg; /** the current chroot dir (or NULL if none) */ const char* chroot; }; /** global config parser object used during config parsing */ extern struct config_parser_state* cfg_parser; /** init lex state */ void init_cfg_parse(void); /** lex in file */ extern FILE* ub_c_in; /** lex out file */ extern FILE* ub_c_out; /** the yacc lex generated parse function */ int ub_c_parse(void); /** the lexer function */ int ub_c_lex(void); /** wrap function */ int ub_c_wrap(void); /** parsing helpers: print error with file and line numbers */ void ub_c_error(const char* msg); /** parsing helpers: print error with file and line numbers */ void ub_c_error_msg(const char* fmt, ...) ATTR_FORMAT(printf, 1, 2); #ifdef UB_ON_WINDOWS /** * Obtain registry string (if it exists). * @param key: key string * @param name: name of value to fetch. * @return malloced string with the result or NULL if it did not * exist on an error (logged with log_err) was encountered. */ char* w_lookup_reg_str(const char* key, const char* name); /** Modify directory in options for module file name */ void w_config_adjust_directory(struct config_file* cfg); #endif /* UB_ON_WINDOWS */ /** debug option for unit tests. */ extern int fake_dsa, fake_sha1; #endif /* UTIL_CONFIG_FILE_H */ unbound-1.13.1/util/alloc.c0000644000175000017500000004407114010434640015120 0ustar wouterwouter/* * util/alloc.c - memory allocation service. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains memory allocation functions. */ #include "config.h" #include "util/alloc.h" #include "util/regional.h" #include "util/data/packed_rrset.h" #include "util/fptr_wlist.h" /** custom size of cached regional blocks */ #define ALLOC_REG_SIZE 16384 /** number of bits for ID part of uint64, rest for number of threads. */ #define THRNUM_SHIFT 48 /* for 65k threads, 2^48 rrsets per thr. */ /** setup new special type */ static void alloc_setup_special(alloc_special_type* t) { memset(t, 0, sizeof(*t)); lock_rw_init(&t->entry.lock); t->entry.key = t; } /** prealloc some entries in the cache. To minimize contention. * Result is 1 lock per alloc_max newly created entries. * @param alloc: the structure to fill up. */ static void prealloc_setup(struct alloc_cache* alloc) { alloc_special_type* p; int i; for(i=0; iquar); alloc->quar = p; alloc->num_quar++; } } /** prealloc region blocks */ static void prealloc_blocks(struct alloc_cache* alloc, size_t num) { size_t i; struct regional* r; for(i=0; inext = (char*)alloc->reg_list; alloc->reg_list = r; alloc->num_reg_blocks ++; } } void alloc_init(struct alloc_cache* alloc, struct alloc_cache* super, int thread_num) { memset(alloc, 0, sizeof(*alloc)); alloc->super = super; alloc->thread_num = thread_num; alloc->next_id = (uint64_t)thread_num; /* in steps, so that type */ alloc->next_id <<= THRNUM_SHIFT; /* of *_id is used. */ alloc->last_id = 1; /* so no 64bit constants, */ alloc->last_id <<= THRNUM_SHIFT; /* or implicit 'int' ops. */ alloc->last_id -= 1; /* for compiler portability. */ alloc->last_id |= alloc->next_id; alloc->next_id += 1; /* because id=0 is special. */ alloc->max_reg_blocks = 100; alloc->num_reg_blocks = 0; alloc->reg_list = NULL; alloc->cleanup = NULL; alloc->cleanup_arg = NULL; if(alloc->super) prealloc_blocks(alloc, alloc->max_reg_blocks); if(!alloc->super) { lock_quick_init(&alloc->lock); lock_protect(&alloc->lock, alloc, sizeof(*alloc)); } } /** free the special list */ static void alloc_clear_special_list(struct alloc_cache* alloc) { alloc_special_type* p, *np; /* free */ p = alloc->quar; while(p) { np = alloc_special_next(p); /* deinit special type */ lock_rw_destroy(&p->entry.lock); free(p); p = np; } } void alloc_clear_special(struct alloc_cache* alloc) { if(!alloc->super) { lock_quick_lock(&alloc->lock); } alloc_clear_special_list(alloc); alloc->quar = 0; alloc->num_quar = 0; if(!alloc->super) { lock_quick_unlock(&alloc->lock); } } void alloc_clear(struct alloc_cache* alloc) { alloc_special_type* p; struct regional* r, *nr; if(!alloc) return; if(!alloc->super) { lock_quick_destroy(&alloc->lock); } if(alloc->super && alloc->quar) { /* push entire list into super */ p = alloc->quar; while(alloc_special_next(p)) /* find last */ p = alloc_special_next(p); lock_quick_lock(&alloc->super->lock); alloc_set_special_next(p, alloc->super->quar); alloc->super->quar = alloc->quar; alloc->super->num_quar += alloc->num_quar; lock_quick_unlock(&alloc->super->lock); } else { alloc_clear_special_list(alloc); } alloc->quar = 0; alloc->num_quar = 0; r = alloc->reg_list; while(r) { nr = (struct regional*)r->next; free(r); r = nr; } alloc->reg_list = NULL; alloc->num_reg_blocks = 0; } uint64_t alloc_get_id(struct alloc_cache* alloc) { uint64_t id = alloc->next_id++; if(id == alloc->last_id) { log_warn("rrset alloc: out of 64bit ids. Clearing cache."); fptr_ok(fptr_whitelist_alloc_cleanup(alloc->cleanup)); (*alloc->cleanup)(alloc->cleanup_arg); /* start back at first number */ /* like in alloc_init*/ alloc->next_id = (uint64_t)alloc->thread_num; alloc->next_id <<= THRNUM_SHIFT; /* in steps for comp. */ alloc->next_id += 1; /* portability. */ /* and generate new and safe id */ id = alloc->next_id++; } return id; } alloc_special_type* alloc_special_obtain(struct alloc_cache* alloc) { alloc_special_type* p; log_assert(alloc); /* see if in local cache */ if(alloc->quar) { p = alloc->quar; alloc->quar = alloc_special_next(p); alloc->num_quar--; p->id = alloc_get_id(alloc); return p; } /* see if in global cache */ if(alloc->super) { /* could maybe grab alloc_max/2 entries in one go, * but really, isn't that just as fast as this code? */ lock_quick_lock(&alloc->super->lock); if((p = alloc->super->quar)) { alloc->super->quar = alloc_special_next(p); alloc->super->num_quar--; } lock_quick_unlock(&alloc->super->lock); if(p) { p->id = alloc_get_id(alloc); return p; } } /* allocate new */ prealloc_setup(alloc); if(!(p = (alloc_special_type*)malloc(sizeof(alloc_special_type)))) { log_err("alloc_special_obtain: out of memory"); return NULL; } alloc_setup_special(p); p->id = alloc_get_id(alloc); return p; } /** push mem and some more items to the super */ static void pushintosuper(struct alloc_cache* alloc, alloc_special_type* mem) { int i; alloc_special_type *p = alloc->quar; log_assert(p); log_assert(alloc && alloc->super && alloc->num_quar >= ALLOC_SPECIAL_MAX); /* push ALLOC_SPECIAL_MAX/2 after mem */ alloc_set_special_next(mem, alloc->quar); for(i=1; iquar = alloc_special_next(p); alloc->num_quar -= ALLOC_SPECIAL_MAX/2; /* dump mem+list into the super quar list */ lock_quick_lock(&alloc->super->lock); alloc_set_special_next(p, alloc->super->quar); alloc->super->quar = mem; alloc->super->num_quar += ALLOC_SPECIAL_MAX/2 + 1; lock_quick_unlock(&alloc->super->lock); /* so 1 lock per mem+alloc/2 deletes */ } void alloc_special_release(struct alloc_cache* alloc, alloc_special_type* mem) { log_assert(alloc); if(!mem) return; if(!alloc->super) { lock_quick_lock(&alloc->lock); /* superalloc needs locking */ } alloc_special_clean(mem); if(alloc->super && alloc->num_quar >= ALLOC_SPECIAL_MAX) { /* push it to the super structure */ pushintosuper(alloc, mem); return; } alloc_set_special_next(mem, alloc->quar); alloc->quar = mem; alloc->num_quar++; if(!alloc->super) { lock_quick_unlock(&alloc->lock); } } void alloc_stats(struct alloc_cache* alloc) { log_info("%salloc: %d in cache, %d blocks.", alloc->super?"":"sup", (int)alloc->num_quar, (int)alloc->num_reg_blocks); } size_t alloc_get_mem(struct alloc_cache* alloc) { alloc_special_type* p; size_t s = sizeof(*alloc); if(!alloc->super) { lock_quick_lock(&alloc->lock); /* superalloc needs locking */ } s += sizeof(alloc_special_type) * alloc->num_quar; for(p = alloc->quar; p; p = alloc_special_next(p)) { s += lock_get_mem(&p->entry.lock); } s += alloc->num_reg_blocks * ALLOC_REG_SIZE; if(!alloc->super) { lock_quick_unlock(&alloc->lock); } return s; } struct regional* alloc_reg_obtain(struct alloc_cache* alloc) { if(alloc->num_reg_blocks > 0) { struct regional* r = alloc->reg_list; alloc->reg_list = (struct regional*)r->next; r->next = NULL; alloc->num_reg_blocks--; return r; } return regional_create_custom(ALLOC_REG_SIZE); } void alloc_reg_release(struct alloc_cache* alloc, struct regional* r) { if(alloc->num_reg_blocks >= alloc->max_reg_blocks) { regional_destroy(r); return; } if(!r) return; regional_free_all(r); log_assert(r->next == NULL); r->next = (char*)alloc->reg_list; alloc->reg_list = r; alloc->num_reg_blocks++; } void alloc_set_id_cleanup(struct alloc_cache* alloc, void (*cleanup)(void*), void* arg) { alloc->cleanup = cleanup; alloc->cleanup_arg = arg; } /** global debug value to keep track of total memory mallocs */ size_t unbound_mem_alloc = 0; /** global debug value to keep track of total memory frees */ size_t unbound_mem_freed = 0; #ifdef UNBOUND_ALLOC_STATS /** special value to know if the memory is being tracked */ uint64_t mem_special = (uint64_t)0xfeed43327766abcdLL; #ifdef malloc #undef malloc #endif /** malloc with stats */ void *unbound_stat_malloc(size_t size) { void* res; if(size == 0) size = 1; log_assert(size <= SIZE_MAX-16); res = malloc(size+16); if(!res) return NULL; unbound_mem_alloc += size; log_info("stat %p=malloc(%u)", res+16, (unsigned)size); memcpy(res, &size, sizeof(size)); memcpy(res+8, &mem_special, sizeof(mem_special)); return res+16; } #ifdef calloc #undef calloc #endif #ifndef INT_MAX #define INT_MAX (((int)-1)>>1) #endif /** calloc with stats */ void *unbound_stat_calloc(size_t nmemb, size_t size) { size_t s; void* res; if(nmemb != 0 && INT_MAX/nmemb < size) return NULL; /* integer overflow check */ s = (nmemb*size==0)?(size_t)1:nmemb*size; log_assert(s <= SIZE_MAX-16); res = calloc(1, s+16); if(!res) return NULL; log_info("stat %p=calloc(%u, %u)", res+16, (unsigned)nmemb, (unsigned)size); unbound_mem_alloc += s; memcpy(res, &s, sizeof(s)); memcpy(res+8, &mem_special, sizeof(mem_special)); return res+16; } #ifdef free #undef free #endif /** free with stats */ void unbound_stat_free(void *ptr) { size_t s; if(!ptr) return; if(memcmp(ptr-8, &mem_special, sizeof(mem_special)) != 0) { free(ptr); return; } ptr-=16; memcpy(&s, ptr, sizeof(s)); log_info("stat free(%p) size %u", ptr+16, (unsigned)s); memset(ptr+8, 0, 8); unbound_mem_freed += s; free(ptr); } #ifdef realloc #undef realloc #endif /** realloc with stats */ void *unbound_stat_realloc(void *ptr, size_t size) { size_t cursz; void* res; if(!ptr) return unbound_stat_malloc(size); if(memcmp(ptr-8, &mem_special, sizeof(mem_special)) != 0) { return realloc(ptr, size); } if(size==0) { unbound_stat_free(ptr); return NULL; } ptr -= 16; memcpy(&cursz, ptr, sizeof(cursz)); if(cursz == size) { /* nothing changes */ return ptr; } log_assert(size <= SIZE_MAX-16); res = malloc(size+16); if(!res) return NULL; unbound_mem_alloc += size; unbound_mem_freed += cursz; log_info("stat realloc(%p, %u) from %u", ptr+16, (unsigned)size, (unsigned)cursz); if(cursz > size) { memcpy(res+16, ptr+16, size); } else if(size > cursz) { memcpy(res+16, ptr+16, cursz); } memset(ptr+8, 0, 8); free(ptr); memcpy(res, &size, sizeof(size)); memcpy(res+8, &mem_special, sizeof(mem_special)); return res+16; } /** log to file where alloc was done */ void *unbound_stat_malloc_log(size_t size, const char* file, int line, const char* func) { log_info("%s:%d %s malloc(%u)", file, line, func, (unsigned)size); return unbound_stat_malloc(size); } /** log to file where alloc was done */ void *unbound_stat_calloc_log(size_t nmemb, size_t size, const char* file, int line, const char* func) { log_info("%s:%d %s calloc(%u, %u)", file, line, func, (unsigned) nmemb, (unsigned)size); return unbound_stat_calloc(nmemb, size); } /** log to file where free was done */ void unbound_stat_free_log(void *ptr, const char* file, int line, const char* func) { if(ptr && memcmp(ptr-8, &mem_special, sizeof(mem_special)) == 0) { size_t s; memcpy(&s, ptr-16, sizeof(s)); log_info("%s:%d %s free(%p) size %u", file, line, func, ptr, (unsigned)s); } else log_info("%s:%d %s unmatched free(%p)", file, line, func, ptr); unbound_stat_free(ptr); } /** log to file where alloc was done */ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file, int line, const char* func) { log_info("%s:%d %s realloc(%p, %u)", file, line, func, ptr, (unsigned)size); return unbound_stat_realloc(ptr, size); } #endif /* UNBOUND_ALLOC_STATS */ #ifdef UNBOUND_ALLOC_LITE #undef malloc #undef calloc #undef free #undef realloc /** length of prefix and suffix */ static size_t lite_pad = 16; /** prefix value to check */ static char* lite_pre = "checkfront123456"; /** suffix value to check */ static char* lite_post= "checkafter123456"; void *unbound_stat_malloc_lite(size_t size, const char* file, int line, const char* func) { /* [prefix .. len .. actual data .. suffix] */ void* res; log_assert(size <= SIZE_MAX-(lite_pad*2+sizeof(size_t))); res = malloc(size+lite_pad*2+sizeof(size_t)); if(!res) return NULL; memmove(res, lite_pre, lite_pad); memmove(res+lite_pad, &size, sizeof(size_t)); memset(res+lite_pad+sizeof(size_t), 0x1a, size); /* init the memory */ memmove(res+lite_pad+size+sizeof(size_t), lite_post, lite_pad); return res+lite_pad+sizeof(size_t); } void *unbound_stat_calloc_lite(size_t nmemb, size_t size, const char* file, int line, const char* func) { size_t req; void* res; if(nmemb != 0 && INT_MAX/nmemb < size) return NULL; /* integer overflow check */ req = nmemb * size; log_assert(req <= SIZE_MAX-(lite_pad*2+sizeof(size_t))); res = malloc(req+lite_pad*2+sizeof(size_t)); if(!res) return NULL; memmove(res, lite_pre, lite_pad); memmove(res+lite_pad, &req, sizeof(size_t)); memset(res+lite_pad+sizeof(size_t), 0, req); memmove(res+lite_pad+req+sizeof(size_t), lite_post, lite_pad); return res+lite_pad+sizeof(size_t); } void unbound_stat_free_lite(void *ptr, const char* file, int line, const char* func) { void* real; size_t orig = 0; if(!ptr) return; real = ptr-lite_pad-sizeof(size_t); if(memcmp(real, lite_pre, lite_pad) != 0) { log_err("free(): prefix failed %s:%d %s", file, line, func); log_hex("prefix here", real, lite_pad); log_hex(" should be", lite_pre, lite_pad); fatal_exit("alloc assertion failed"); } memmove(&orig, real+lite_pad, sizeof(size_t)); if(memcmp(real+lite_pad+orig+sizeof(size_t), lite_post, lite_pad)!=0){ log_err("free(): suffix failed %s:%d %s", file, line, func); log_err("alloc size is %d", (int)orig); log_hex("suffix here", real+lite_pad+orig+sizeof(size_t), lite_pad); log_hex(" should be", lite_post, lite_pad); fatal_exit("alloc assertion failed"); } memset(real, 0xdd, orig+lite_pad*2+sizeof(size_t)); /* mark it */ free(real); } void *unbound_stat_realloc_lite(void *ptr, size_t size, const char* file, int line, const char* func) { /* always free and realloc (no growing) */ void* real, *newa; size_t orig = 0; if(!ptr) { /* like malloc() */ return unbound_stat_malloc_lite(size, file, line, func); } if(!size) { /* like free() */ unbound_stat_free_lite(ptr, file, line, func); return NULL; } /* change allocation size and copy */ real = ptr-lite_pad-sizeof(size_t); if(memcmp(real, lite_pre, lite_pad) != 0) { log_err("realloc(): prefix failed %s:%d %s", file, line, func); log_hex("prefix here", real, lite_pad); log_hex(" should be", lite_pre, lite_pad); fatal_exit("alloc assertion failed"); } memmove(&orig, real+lite_pad, sizeof(size_t)); if(memcmp(real+lite_pad+orig+sizeof(size_t), lite_post, lite_pad)!=0){ log_err("realloc(): suffix failed %s:%d %s", file, line, func); log_err("alloc size is %d", (int)orig); log_hex("suffix here", real+lite_pad+orig+sizeof(size_t), lite_pad); log_hex(" should be", lite_post, lite_pad); fatal_exit("alloc assertion failed"); } /* new alloc and copy over */ newa = unbound_stat_malloc_lite(size, file, line, func); if(!newa) return NULL; if(orig < size) memmove(newa, ptr, orig); else memmove(newa, ptr, size); memset(real, 0xdd, orig+lite_pad*2+sizeof(size_t)); /* mark it */ free(real); return newa; } char* unbound_strdup_lite(const char* s, const char* file, int line, const char* func) { /* this routine is made to make sure strdup() uses the malloc_lite */ size_t l = strlen(s)+1; char* n = (char*)unbound_stat_malloc_lite(l, file, line, func); if(!n) return NULL; memmove(n, s, l); return n; } char* unbound_lite_wrapstr(char* s) { char* n = unbound_strdup_lite(s, __FILE__, __LINE__, __func__); free(s); return n; } #undef sldns_pkt2wire sldns_status unbound_lite_pkt2wire(uint8_t **dest, const sldns_pkt *p, size_t *size) { uint8_t* md = NULL; size_t ms = 0; sldns_status s = sldns_pkt2wire(&md, p, &ms); if(md) { *dest = unbound_stat_malloc_lite(ms, __FILE__, __LINE__, __func__); *size = ms; if(!*dest) { free(md); return LDNS_STATUS_MEM_ERR; } memcpy(*dest, md, ms); free(md); } else { *dest = NULL; *size = 0; } return s; } #undef i2d_DSA_SIG int unbound_lite_i2d_DSA_SIG(DSA_SIG* dsasig, unsigned char** sig) { unsigned char* n = NULL; int r= i2d_DSA_SIG(dsasig, &n); if(n) { *sig = unbound_stat_malloc_lite((size_t)r, __FILE__, __LINE__, __func__); if(!*sig) return -1; memcpy(*sig, n, (size_t)r); free(n); return r; } *sig = NULL; return r; } #endif /* UNBOUND_ALLOC_LITE */ unbound-1.13.1/util/random.c0000644000175000017500000001435014010434640015303 0ustar wouterwouter/* * util/random.c - thread safe random generator, which is reasonably secure. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Thread safe random functions. Similar to arc4random() with an explicit * initialisation routine. * * The code in this file is based on arc4random from * openssh-4.0p1/openbsd-compat/bsd-arc4random.c * That code is also BSD licensed. Here is their statement: * * Copyright (c) 1996, David Mazieres * Copyright (c) 2008, Damien Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "config.h" #include "util/random.h" #include "util/log.h" #include #ifdef HAVE_NSS /* nspr4 */ #include "prerror.h" /* nss3 */ #include "secport.h" #include "pk11pub.h" #elif defined(HAVE_NETTLE) #include "yarrow.h" #endif /** * Max random value. Similar to RAND_MAX, but more portable * (mingw uses only 15 bits random). */ #define MAX_VALUE 0x7fffffff #if defined(HAVE_SSL) || defined(HAVE_LIBBSD) struct ub_randstate* ub_initstate(struct ub_randstate* ATTR_UNUSED(from)) { struct ub_randstate* s = (struct ub_randstate*)malloc(1); if(!s) { log_err("malloc failure in random init"); return NULL; } return s; } long int ub_random(struct ub_randstate* ATTR_UNUSED(s)) { /* This relies on MAX_VALUE being 0x7fffffff. */ return (long)arc4random() & MAX_VALUE; } long int ub_random_max(struct ub_randstate* state, long int x) { (void)state; /* on OpenBSD, this does not need _seed(), or _stir() calls */ return (long)arc4random_uniform((uint32_t)x); } #elif defined(HAVE_NSS) /* not much to remember for NSS since we use its pk11_random, placeholder */ struct ub_randstate { int ready; }; struct ub_randstate* ub_initstate(struct ub_randstate* ATTR_UNUSED(from)) { struct ub_randstate* s = (struct ub_randstate*)calloc(1, sizeof(*s)); if(!s) { log_err("malloc failure in random init"); return NULL; } return s; } long int ub_random(struct ub_randstate* ATTR_UNUSED(state)) { long int x; /* random 31 bit value. */ SECStatus s = PK11_GenerateRandom((unsigned char*)&x, (int)sizeof(x)); if(s != SECSuccess) { /* unbound needs secure randomness for randomized * ID bits and port numbers in packets to upstream servers */ fatal_exit("PK11_GenerateRandom error: %s", PORT_ErrorToString(PORT_GetError())); } return x & MAX_VALUE; } #elif defined(HAVE_NETTLE) /** * libnettle implements a Yarrow-256 generator (SHA256 + AES), * and we have to ensure it is seeded before use. */ struct ub_randstate { struct yarrow256_ctx ctx; int seeded; }; struct ub_randstate* ub_initstate(struct ub_randstate* ATTR_UNUSED(from)) { struct ub_randstate* s = (struct ub_randstate*)calloc(1, sizeof(*s)); uint8_t buf[YARROW256_SEED_FILE_SIZE]; if(!s) { log_err("malloc failure in random init"); return NULL; } /* Setup Yarrow context */ yarrow256_init(&s->ctx, 0, NULL); if(getentropy(buf, sizeof(buf)) != -1) { /* got entropy */ yarrow256_seed(&s->ctx, YARROW256_SEED_FILE_SIZE, buf); s->seeded = yarrow256_is_seeded(&s->ctx); } else { log_err("nettle random(yarrow) cannot initialize, " "getentropy failed: %s", strerror(errno)); free(s); return NULL; } return s; } long int ub_random(struct ub_randstate* s) { /* random 31 bit value. */ long int x = 0; if (!s || !s->seeded) { log_err("Couldn't generate randomness, Yarrow-256 generator not yet seeded"); } else { yarrow256_random(&s->ctx, sizeof(x), (uint8_t *)&x); } return x & MAX_VALUE; } #endif /* HAVE_SSL or HAVE_LIBBSD or HAVE_NSS or HAVE_NETTLE */ #if defined(HAVE_NSS) || defined(HAVE_NETTLE) && !defined(HAVE_LIBBSD) long int ub_random_max(struct ub_randstate* state, long int x) { /* make sure we fetch in a range that is divisible by x. ignore * values from d .. MAX_VALUE, instead draw a new number */ long int d = MAX_VALUE - (MAX_VALUE % x); /* d is divisible by x */ long int v = ub_random(state); while(d <= v) v = ub_random(state); return (v % x); } #endif /* HAVE_NSS or HAVE_NETTLE and !HAVE_LIBBSD */ void ub_randfree(struct ub_randstate* s) { free(s); /* user app must do RAND_cleanup(); */ } unbound-1.13.1/util/timehist.h0000644000175000017500000000750114010434640015656 0ustar wouterwouter/* * util/timehist.h - make histogram of time values. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to make a histogram of time values. */ #ifndef UTIL_TIMEHIST_H #define UTIL_TIMEHIST_H /** Number of buckets in a histogram */ #define NUM_BUCKETS_HIST 40 /** * Bucket of time history information */ struct th_buck { /** lower bound */ struct timeval lower; /** upper bound */ struct timeval upper; /** number of items */ size_t count; }; /** * Keep histogram of time values. */ struct timehist { /** number of buckets */ size_t num; /** bucket array */ struct th_buck* buckets; }; /** * Setup a histogram, default * @return histogram or NULL on malloc failure. */ struct timehist* timehist_setup(void); /** * Delete histogram * @param hist: to delete */ void timehist_delete(struct timehist* hist); /** * Clear histogram * @param hist: to clear all data from */ void timehist_clear(struct timehist* hist); /** * Add time value to histogram. * @param hist: histogram * @param tv: time value */ void timehist_insert(struct timehist* hist, struct timeval* tv); /** * Find time value for given quartile, such as 0.25, 0.50, 0.75. * The looks up the value for the i-th element in the sorted list of time * values, as approximated using the histogram. * @param hist: histogram. Interpolated information is used from it. * @param q: quartile, 0.50 results in the median. Must be >0 and <1. * @return: the time in seconds for that percentage. */ double timehist_quartile(struct timehist* hist, double q); /** * Printout histogram * @param hist: histogram */ void timehist_print(struct timehist* hist); /** * Log histogram, print it to the logfile. * @param hist: histogram * @param name: the name of the value column */ void timehist_log(struct timehist* hist, const char* name); /** * Export histogram to an array. * @param hist: histogram * @param array: the array to export to. * @param sz: number of items in array. */ void timehist_export(struct timehist* hist, long long* array, size_t sz); /** * Import histogram from an array. * @param hist: histogram * @param array: the array to import from. * @param sz: number of items in array. */ void timehist_import(struct timehist* hist, long long* array, size_t sz); #endif /* UTIL_TIMEHIST_H */ unbound-1.13.1/util/config_file.c0000644000175000017500000023653314010434640016300 0ustar wouterwouter/* * util/config_file.c - reads and stores the config file for unbound. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for the config file. */ #include "config.h" #include #include #ifdef HAVE_TIME_H #include #endif #include "util/log.h" #include "util/configyyrename.h" #include "util/config_file.h" #include "util/configparser.h" #include "util/net_help.h" #include "util/data/msgparse.h" #include "util/module.h" #include "util/regional.h" #include "util/fptr_wlist.h" #include "util/data/dname.h" #include "util/rtt.h" #include "services/cache/infra.h" #include "sldns/wire2str.h" #include "sldns/parseutil.h" #include "iterator/iterator.h" #ifdef HAVE_GLOB_H # include #endif #ifdef CLIENT_SUBNET #include "edns-subnet/edns-subnet.h" #endif #ifdef HAVE_PWD_H #include #endif /** from cfg username, after daemonize setup performed */ uid_t cfg_uid = (uid_t)-1; /** from cfg username, after daemonize setup performed */ gid_t cfg_gid = (gid_t)-1; /** for debug allow small timeout values for fast rollovers */ int autr_permit_small_holddown = 0; /** size (in bytes) of stream wait buffers max */ size_t stream_wait_max = 4 * 1024 * 1024; size_t http2_query_buffer_max = 4 * 1024 * 1024; size_t http2_response_buffer_max = 4 * 1024 * 1024; /** global config during parsing */ struct config_parser_state* cfg_parser = 0; /** init ports possible for use */ static void init_outgoing_availports(int* array, int num); struct config_file* config_create(void) { struct config_file* cfg; cfg = (struct config_file*)calloc(1, sizeof(struct config_file)); if(!cfg) return NULL; /* the defaults if no config is present */ cfg->verbosity = 1; cfg->stat_interval = 0; cfg->stat_cumulative = 0; cfg->stat_extended = 0; cfg->num_threads = 1; cfg->port = UNBOUND_DNS_PORT; cfg->do_ip4 = 1; cfg->do_ip6 = 1; cfg->do_udp = 1; cfg->do_tcp = 1; cfg->tcp_upstream = 0; cfg->udp_upstream_without_downstream = 0; cfg->tcp_mss = 0; cfg->outgoing_tcp_mss = 0; cfg->tcp_idle_timeout = 30 * 1000; /* 30s in millisecs */ cfg->do_tcp_keepalive = 0; cfg->tcp_keepalive_timeout = 120 * 1000; /* 120s in millisecs */ cfg->ssl_service_key = NULL; cfg->ssl_service_pem = NULL; cfg->ssl_port = UNBOUND_DNS_OVER_TLS_PORT; cfg->ssl_upstream = 0; cfg->tls_cert_bundle = NULL; cfg->tls_win_cert = 0; cfg->tls_use_sni = 1; cfg->https_port = UNBOUND_DNS_OVER_HTTPS_PORT; if(!(cfg->http_endpoint = strdup("/dns-query"))) goto error_exit; cfg->http_max_streams = 100; cfg->http_query_buffer_size = 4*1024*1024; cfg->http_response_buffer_size = 4*1024*1024; cfg->http_nodelay = 1; cfg->use_syslog = 1; cfg->log_identity = NULL; /* changed later with argv[0] */ cfg->log_time_ascii = 0; cfg->log_queries = 0; cfg->log_replies = 0; cfg->log_tag_queryreply = 0; cfg->log_local_actions = 0; cfg->log_servfail = 0; #ifndef USE_WINSOCK # ifdef USE_MINI_EVENT /* select max 1024 sockets */ cfg->outgoing_num_ports = 960; cfg->num_queries_per_thread = 512; # else /* libevent can use many sockets */ cfg->outgoing_num_ports = 4096; cfg->num_queries_per_thread = 1024; # endif cfg->outgoing_num_tcp = 10; cfg->incoming_num_tcp = 10; #else cfg->outgoing_num_ports = 48; /* windows is limited in num fds */ cfg->num_queries_per_thread = 24; cfg->outgoing_num_tcp = 2; /* leaves 64-52=12 for: 4if,1stop,thread4 */ cfg->incoming_num_tcp = 2; #endif cfg->stream_wait_size = 4 * 1024 * 1024; cfg->edns_buffer_size = 1232; /* from DNS flagday recommendation */ cfg->msg_buffer_size = 65552; /* 64 k + a small margin */ cfg->msg_cache_size = 4 * 1024 * 1024; cfg->msg_cache_slabs = 4; cfg->jostle_time = 200; cfg->rrset_cache_size = 4 * 1024 * 1024; cfg->rrset_cache_slabs = 4; cfg->host_ttl = 900; cfg->bogus_ttl = 60; cfg->min_ttl = 0; cfg->max_ttl = 3600 * 24; cfg->max_negative_ttl = 3600; cfg->prefetch = 0; cfg->prefetch_key = 0; cfg->deny_any = 0; cfg->infra_cache_slabs = 4; cfg->infra_cache_numhosts = 10000; cfg->infra_cache_min_rtt = 50; cfg->infra_keep_probing = 0; cfg->delay_close = 0; cfg->udp_connect = 1; if(!(cfg->outgoing_avail_ports = (int*)calloc(65536, sizeof(int)))) goto error_exit; init_outgoing_availports(cfg->outgoing_avail_ports, 65536); if(!(cfg->username = strdup(UB_USERNAME))) goto error_exit; #ifdef HAVE_CHROOT if(!(cfg->chrootdir = strdup(CHROOT_DIR))) goto error_exit; #endif if(!(cfg->directory = strdup(RUN_DIR))) goto error_exit; if(!(cfg->logfile = strdup(""))) goto error_exit; if(!(cfg->pidfile = strdup(PIDFILE))) goto error_exit; if(!(cfg->target_fetch_policy = strdup("3 2 1 0 0"))) goto error_exit; cfg->fast_server_permil = 0; cfg->fast_server_num = 3; cfg->donotqueryaddrs = NULL; cfg->donotquery_localhost = 1; cfg->root_hints = NULL; cfg->use_systemd = 0; cfg->do_daemonize = 1; cfg->if_automatic = 0; cfg->so_rcvbuf = 0; cfg->so_sndbuf = 0; cfg->so_reuseport = REUSEPORT_DEFAULT; cfg->ip_transparent = 0; cfg->ip_freebind = 0; cfg->ip_dscp = 0; cfg->num_ifs = 0; cfg->ifs = NULL; cfg->num_out_ifs = 0; cfg->out_ifs = NULL; cfg->stubs = NULL; cfg->forwards = NULL; cfg->auths = NULL; #ifdef CLIENT_SUBNET cfg->client_subnet = NULL; cfg->client_subnet_zone = NULL; cfg->client_subnet_opcode = LDNS_EDNS_CLIENT_SUBNET; cfg->client_subnet_always_forward = 0; cfg->max_client_subnet_ipv4 = 24; cfg->max_client_subnet_ipv6 = 56; cfg->min_client_subnet_ipv4 = 0; cfg->min_client_subnet_ipv6 = 0; cfg->max_ecs_tree_size_ipv4 = 100; cfg->max_ecs_tree_size_ipv6 = 100; #endif cfg->views = NULL; cfg->acls = NULL; cfg->tcp_connection_limits = NULL; cfg->harden_short_bufsize = 1; cfg->harden_large_queries = 0; cfg->harden_glue = 1; cfg->harden_dnssec_stripped = 1; cfg->harden_below_nxdomain = 1; cfg->harden_referral_path = 0; cfg->harden_algo_downgrade = 0; cfg->use_caps_bits_for_id = 0; cfg->caps_whitelist = NULL; cfg->private_address = NULL; cfg->private_domain = NULL; cfg->unwanted_threshold = 0; cfg->hide_identity = 0; cfg->hide_version = 0; cfg->hide_trustanchor = 0; cfg->identity = NULL; cfg->version = NULL; cfg->nsid_cfg_str = NULL; cfg->nsid = NULL; cfg->nsid_len = 0; cfg->auto_trust_anchor_file_list = NULL; cfg->trust_anchor_file_list = NULL; cfg->trust_anchor_list = NULL; cfg->trusted_keys_file_list = NULL; cfg->trust_anchor_signaling = 1; cfg->root_key_sentinel = 1; cfg->domain_insecure = NULL; cfg->val_date_override = 0; cfg->val_sig_skew_min = 3600; /* at least daylight savings trouble */ cfg->val_sig_skew_max = 86400; /* at most timezone settings trouble */ cfg->val_clean_additional = 1; cfg->val_log_level = 0; cfg->val_log_squelch = 0; cfg->val_permissive_mode = 0; cfg->aggressive_nsec = 0; cfg->ignore_cd = 0; cfg->serve_expired = 0; cfg->serve_expired_ttl = 0; cfg->serve_expired_ttl_reset = 0; cfg->serve_expired_reply_ttl = 30; cfg->serve_expired_client_timeout = 0; cfg->serve_original_ttl = 0; cfg->add_holddown = 30*24*3600; cfg->del_holddown = 30*24*3600; cfg->keep_missing = 366*24*3600; /* one year plus a little leeway */ cfg->permit_small_holddown = 0; cfg->key_cache_size = 4 * 1024 * 1024; cfg->key_cache_slabs = 4; cfg->neg_cache_size = 1 * 1024 * 1024; cfg->local_zones = NULL; cfg->local_zones_nodefault = NULL; #ifdef USE_IPSET cfg->local_zones_ipset = NULL; #endif cfg->local_zones_disable_default = 0; cfg->local_data = NULL; cfg->local_zone_overrides = NULL; cfg->unblock_lan_zones = 0; cfg->insecure_lan_zones = 0; cfg->python_script = NULL; cfg->dynlib_file = NULL; cfg->remote_control_enable = 0; cfg->control_ifs.first = NULL; cfg->control_ifs.last = NULL; cfg->control_port = UNBOUND_CONTROL_PORT; cfg->control_use_cert = 1; cfg->minimal_responses = 1; cfg->rrset_roundrobin = 1; cfg->unknown_server_time_limit = 376; cfg->max_udp_size = 4096; if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key"))) goto error_exit; if(!(cfg->server_cert_file = strdup(RUN_DIR"/unbound_server.pem"))) goto error_exit; if(!(cfg->control_key_file = strdup(RUN_DIR"/unbound_control.key"))) goto error_exit; if(!(cfg->control_cert_file = strdup(RUN_DIR"/unbound_control.pem"))) goto error_exit; #ifdef CLIENT_SUBNET if(!(cfg->module_conf = strdup("subnetcache validator iterator"))) goto error_exit; #else if(!(cfg->module_conf = strdup("validator iterator"))) goto error_exit; #endif if(!(cfg->val_nsec3_key_iterations = strdup("1024 150 2048 500 4096 2500"))) goto error_exit; #if defined(DNSTAP_SOCKET_PATH) if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH))) goto error_exit; #endif cfg->dnstap_bidirectional = 1; cfg->dnstap_tls = 1; cfg->disable_dnssec_lame_check = 0; cfg->ip_ratelimit = 0; cfg->ratelimit = 0; cfg->ip_ratelimit_slabs = 4; cfg->ratelimit_slabs = 4; cfg->ip_ratelimit_size = 4*1024*1024; cfg->ratelimit_size = 4*1024*1024; cfg->ratelimit_for_domain = NULL; cfg->ratelimit_below_domain = NULL; cfg->ip_ratelimit_factor = 10; cfg->ratelimit_factor = 10; cfg->qname_minimisation = 1; cfg->qname_minimisation_strict = 0; cfg->shm_enable = 0; cfg->shm_key = 11777; cfg->edns_client_strings = NULL; cfg->edns_client_string_opcode = 65001; cfg->dnscrypt = 0; cfg->dnscrypt_port = 0; cfg->dnscrypt_provider = NULL; cfg->dnscrypt_provider_cert = NULL; cfg->dnscrypt_provider_cert_rotated = NULL; cfg->dnscrypt_secret_key = NULL; cfg->dnscrypt_shared_secret_cache_size = 4*1024*1024; cfg->dnscrypt_shared_secret_cache_slabs = 4; cfg->dnscrypt_nonce_cache_size = 4*1024*1024; cfg->dnscrypt_nonce_cache_slabs = 4; cfg->pad_responses = 1; cfg->pad_responses_block_size = 468; /* from RFC8467 */ cfg->pad_queries = 1; cfg->pad_queries_block_size = 128; /* from RFC8467 */ #ifdef USE_IPSECMOD cfg->ipsecmod_enabled = 1; cfg->ipsecmod_ignore_bogus = 0; cfg->ipsecmod_hook = NULL; cfg->ipsecmod_max_ttl = 3600; cfg->ipsecmod_whitelist = NULL; cfg->ipsecmod_strict = 0; #endif #ifdef USE_CACHEDB if(!(cfg->cachedb_backend = strdup("testframe"))) goto error_exit; if(!(cfg->cachedb_secret = strdup("default"))) goto error_exit; #ifdef USE_REDIS if(!(cfg->redis_server_host = strdup("127.0.0.1"))) goto error_exit; cfg->redis_timeout = 100; cfg->redis_server_port = 6379; cfg->redis_expire_records = 0; #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET cfg->ipset_name_v4 = NULL; cfg->ipset_name_v6 = NULL; #endif return cfg; error_exit: config_delete(cfg); return NULL; } struct config_file* config_create_forlib(void) { struct config_file* cfg = config_create(); if(!cfg) return NULL; /* modifications for library use, less verbose, less memory */ free(cfg->chrootdir); cfg->chrootdir = NULL; cfg->verbosity = 0; cfg->outgoing_num_ports = 16; /* in library use, this is 'reasonable' and probably within the ulimit(maxfds) of the user */ cfg->outgoing_num_tcp = 2; cfg->msg_cache_size = 1024*1024; cfg->msg_cache_slabs = 1; cfg->rrset_cache_size = 1024*1024; cfg->rrset_cache_slabs = 1; cfg->infra_cache_slabs = 1; cfg->use_syslog = 0; cfg->key_cache_size = 1024*1024; cfg->key_cache_slabs = 1; cfg->neg_cache_size = 100 * 1024; cfg->donotquery_localhost = 0; /* allow, so that you can ask a forward nameserver running on localhost */ cfg->val_log_level = 2; /* to fill why_bogus with */ cfg->val_log_squelch = 1; cfg->minimal_responses = 0; cfg->harden_short_bufsize = 1; return cfg; } /** check that the value passed is >= 0 */ #define IS_NUMBER_OR_ZERO \ if(atoi(val) == 0 && strcmp(val, "0") != 0) return 0 /** check that the value passed is > 0 */ #define IS_NONZERO_NUMBER \ if(atoi(val) == 0) return 0 /** check that the value passed is not 0 and a power of 2 */ #define IS_POW2_NUMBER \ if(atoi(val) == 0 || !is_pow2((size_t)atoi(val))) return 0 /** check that the value passed is yes or no */ #define IS_YES_OR_NO \ if(strcmp(val, "yes") != 0 && strcmp(val, "no") != 0) return 0 /** put integer_or_zero into variable */ #define S_NUMBER_OR_ZERO(str, var) if(strcmp(opt, str) == 0) \ { IS_NUMBER_OR_ZERO; cfg->var = atoi(val); } /** put integer_nonzero into variable */ #define S_NUMBER_NONZERO(str, var) if(strcmp(opt, str) == 0) \ { IS_NONZERO_NUMBER; cfg->var = atoi(val); } /** put integer_or_zero into unsigned */ #define S_UNSIGNED_OR_ZERO(str, var) if(strcmp(opt, str) == 0) \ { IS_NUMBER_OR_ZERO; cfg->var = (unsigned)atoi(val); } /** put integer_or_zero into size_t */ #define S_SIZET_OR_ZERO(str, var) if(strcmp(opt, str) == 0) \ { IS_NUMBER_OR_ZERO; cfg->var = (size_t)atoi(val); } /** put integer_nonzero into size_t */ #define S_SIZET_NONZERO(str, var) if(strcmp(opt, str) == 0) \ { IS_NONZERO_NUMBER; cfg->var = (size_t)atoi(val); } /** put yesno into variable */ #define S_YNO(str, var) if(strcmp(opt, str) == 0) \ { IS_YES_OR_NO; cfg->var = (strcmp(val, "yes") == 0); } /** put memsize into variable */ #define S_MEMSIZE(str, var) if(strcmp(opt, str)==0) \ { return cfg_parse_memsize(val, &cfg->var); } /** put pow2 number into variable */ #define S_POW2(str, var) if(strcmp(opt, str)==0) \ { IS_POW2_NUMBER; cfg->var = (size_t)atoi(val); } /** put string into variable */ #define S_STR(str, var) if(strcmp(opt, str)==0) \ { free(cfg->var); return (cfg->var = strdup(val)) != NULL; } /** put string into strlist */ #define S_STRLIST(str, var) if(strcmp(opt, str)==0) \ { return cfg_strlist_insert(&cfg->var, strdup(val)); } /** put string into strlist if not present yet*/ #define S_STRLIST_UNIQ(str, var) if(strcmp(opt, str)==0) \ { if(cfg_strlist_find(cfg->var, val)) { return 0;} \ return cfg_strlist_insert(&cfg->var, strdup(val)); } /** append string to strlist */ #define S_STRLIST_APPEND(str, var) if(strcmp(opt, str)==0) \ { return cfg_strlist_append(&cfg->var, strdup(val)); } int config_set_option(struct config_file* cfg, const char* opt, const char* val) { char buf[64]; if(!opt) return 0; if(opt[strlen(opt)-1] != ':' && strlen(opt)+2stat_interval = 0; else if(atoi(val) == 0) return 0; else cfg->stat_interval = atoi(val); } else if(strcmp(opt, "num_threads:") == 0) { /* not supported, library must have 1 thread in bgworker */ return 0; } else if(strcmp(opt, "outgoing-port-permit:") == 0) { return cfg_mark_ports(val, 1, cfg->outgoing_avail_ports, 65536); } else if(strcmp(opt, "outgoing-port-avoid:") == 0) { return cfg_mark_ports(val, 0, cfg->outgoing_avail_ports, 65536); } else if(strcmp(opt, "local-zone:") == 0) { return cfg_parse_local_zone(cfg, val); } else if(strcmp(opt, "val-override-date:") == 0) { if(strcmp(val, "") == 0 || strcmp(val, "0") == 0) { cfg->val_date_override = 0; } else if(strlen(val) == 14) { cfg->val_date_override = cfg_convert_timeval(val); return cfg->val_date_override != 0; } else { if(atoi(val) == 0) return 0; cfg->val_date_override = (uint32_t)atoi(val); } } else if(strcmp(opt, "local-data-ptr:") == 0) { char* ptr = cfg_ptr_reverse((char*)opt); return cfg_strlist_insert(&cfg->local_data, ptr); } else if(strcmp(opt, "logfile:") == 0) { cfg->use_syslog = 0; free(cfg->logfile); return (cfg->logfile = strdup(val)) != NULL; } else if(strcmp(opt, "log-time-ascii:") == 0) { IS_YES_OR_NO; cfg->log_time_ascii = (strcmp(val, "yes") == 0); log_set_time_asc(cfg->log_time_ascii); } else S_SIZET_NONZERO("max-udp-size:", max_udp_size) else S_YNO("use-syslog:", use_syslog) else S_STR("log-identity:", log_identity) else S_YNO("extended-statistics:", stat_extended) else S_YNO("statistics-cumulative:", stat_cumulative) else S_YNO("shm-enable:", shm_enable) else S_NUMBER_OR_ZERO("shm-key:", shm_key) else S_YNO("do-ip4:", do_ip4) else S_YNO("do-ip6:", do_ip6) else S_YNO("do-udp:", do_udp) else S_YNO("do-tcp:", do_tcp) else S_YNO("prefer-ip4:", prefer_ip4) else S_YNO("prefer-ip6:", prefer_ip6) else S_YNO("tcp-upstream:", tcp_upstream) else S_YNO("udp-upstream-without-downstream:", udp_upstream_without_downstream) else S_NUMBER_NONZERO("tcp-mss:", tcp_mss) else S_NUMBER_NONZERO("outgoing-tcp-mss:", outgoing_tcp_mss) else S_NUMBER_NONZERO("tcp-idle-timeout:", tcp_idle_timeout) else S_YNO("edns-tcp-keepalive:", do_tcp_keepalive) else S_NUMBER_NONZERO("edns-tcp-keepalive-timeout:", tcp_keepalive_timeout) else S_YNO("ssl-upstream:", ssl_upstream) else S_STR("ssl-service-key:", ssl_service_key) else S_STR("ssl-service-pem:", ssl_service_pem) else S_NUMBER_NONZERO("ssl-port:", ssl_port) else S_STR("tls-cert-bundle:", tls_cert_bundle) else S_YNO("tls-win-cert:", tls_win_cert) else S_STRLIST("additional-tls-port:", tls_additional_port) else S_STRLIST("tls-additional-ports:", tls_additional_port) else S_STRLIST("tls-additional-port:", tls_additional_port) else S_STRLIST_APPEND("tls-session-ticket-keys:", tls_session_ticket_keys) else S_STR("tls-ciphers:", tls_ciphers) else S_STR("tls-ciphersuites:", tls_ciphersuites) else S_YNO("tls-use-sni:", tls_use_sni) else S_NUMBER_NONZERO("https-port:", https_port) else S_STR("http-endpoint:", http_endpoint) else S_NUMBER_NONZERO("http-max-streams:", http_max_streams) else S_MEMSIZE("http-query-buffer-size:", http_query_buffer_size) else S_MEMSIZE("http-response-buffer-size:", http_response_buffer_size) else S_YNO("http-nodelay:", http_nodelay) else S_YNO("http-notls-downstream:", http_notls_downstream) else S_YNO("interface-automatic:", if_automatic) else S_YNO("use-systemd:", use_systemd) else S_YNO("do-daemonize:", do_daemonize) else S_NUMBER_NONZERO("port:", port) else S_NUMBER_NONZERO("outgoing-range:", outgoing_num_ports) else S_SIZET_OR_ZERO("outgoing-num-tcp:", outgoing_num_tcp) else S_SIZET_OR_ZERO("incoming-num-tcp:", incoming_num_tcp) else S_MEMSIZE("stream-wait-size:", stream_wait_size) else S_SIZET_NONZERO("edns-buffer-size:", edns_buffer_size) else S_SIZET_NONZERO("msg-buffer-size:", msg_buffer_size) else S_MEMSIZE("msg-cache-size:", msg_cache_size) else S_POW2("msg-cache-slabs:", msg_cache_slabs) else S_SIZET_NONZERO("num-queries-per-thread:",num_queries_per_thread) else S_SIZET_OR_ZERO("jostle-timeout:", jostle_time) else S_MEMSIZE("so-rcvbuf:", so_rcvbuf) else S_MEMSIZE("so-sndbuf:", so_sndbuf) else S_YNO("so-reuseport:", so_reuseport) else S_YNO("ip-transparent:", ip_transparent) else S_YNO("ip-freebind:", ip_freebind) else S_NUMBER_OR_ZERO("ip-dscp:", ip_dscp) else S_MEMSIZE("rrset-cache-size:", rrset_cache_size) else S_POW2("rrset-cache-slabs:", rrset_cache_slabs) else S_YNO("prefetch:", prefetch) else S_YNO("prefetch-key:", prefetch_key) else S_YNO("deny-any:", deny_any) else if(strcmp(opt, "cache-max-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->max_ttl = atoi(val); MAX_TTL=(time_t)cfg->max_ttl;} else if(strcmp(opt, "cache-max-negative-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->max_negative_ttl = atoi(val); MAX_NEG_TTL=(time_t)cfg->max_negative_ttl;} else if(strcmp(opt, "cache-min-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=(time_t)cfg->min_ttl;} else if(strcmp(opt, "infra-cache-min-rtt:") == 0) { IS_NUMBER_OR_ZERO; cfg->infra_cache_min_rtt = atoi(val); RTT_MIN_TIMEOUT=cfg->infra_cache_min_rtt; } else S_YNO("infra-keep-probing:", infra_keep_probing) else S_NUMBER_OR_ZERO("infra-host-ttl:", host_ttl) else S_POW2("infra-cache-slabs:", infra_cache_slabs) else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts) else S_NUMBER_OR_ZERO("delay-close:", delay_close) else S_YNO("udp-connect:", udp_connect) else S_STR("chroot:", chrootdir) else S_STR("username:", username) else S_STR("directory:", directory) else S_STR("pidfile:", pidfile) else S_YNO("hide-identity:", hide_identity) else S_YNO("hide-version:", hide_version) else S_YNO("hide-trustanchor:", hide_trustanchor) else S_STR("identity:", identity) else S_STR("version:", version) else if(strcmp(opt, "nsid:") == 0) { free(cfg->nsid_cfg_str); if (!(cfg->nsid_cfg_str = strdup(val))) return 0; /* Empty string is just validly unsetting nsid */ if (*val == 0) { free(cfg->nsid); cfg->nsid = NULL; cfg->nsid_len = 0; return 1; } cfg->nsid = cfg_parse_nsid(val, &cfg->nsid_len); return cfg->nsid != NULL; } else S_STRLIST("root-hints:", root_hints) else S_STR("target-fetch-policy:", target_fetch_policy) else S_YNO("harden-glue:", harden_glue) else S_YNO("harden-short-bufsize:", harden_short_bufsize) else S_YNO("harden-large-queries:", harden_large_queries) else S_YNO("harden-dnssec-stripped:", harden_dnssec_stripped) else S_YNO("harden-below-nxdomain:", harden_below_nxdomain) else S_YNO("harden-referral-path:", harden_referral_path) else S_YNO("harden-algo-downgrade:", harden_algo_downgrade) else S_YNO("use-caps-for-id:", use_caps_bits_for_id) else S_STRLIST("caps-whitelist:", caps_whitelist) else S_SIZET_OR_ZERO("unwanted-reply-threshold:", unwanted_threshold) else S_STRLIST("private-address:", private_address) else S_STRLIST("private-domain:", private_domain) else S_YNO("do-not-query-localhost:", donotquery_localhost) else S_STRLIST("do-not-query-address:", donotqueryaddrs) else S_STRLIST("auto-trust-anchor-file:", auto_trust_anchor_file_list) else S_STRLIST("trust-anchor-file:", trust_anchor_file_list) else S_STRLIST("trust-anchor:", trust_anchor_list) else S_STRLIST("trusted-keys-file:", trusted_keys_file_list) else S_YNO("trust-anchor-signaling:", trust_anchor_signaling) else S_YNO("root-key-sentinel:", root_key_sentinel) else S_STRLIST("domain-insecure:", domain_insecure) else S_NUMBER_OR_ZERO("val-bogus-ttl:", bogus_ttl) else S_YNO("val-clean-additional:", val_clean_additional) else S_NUMBER_OR_ZERO("val-log-level:", val_log_level) else S_YNO("val-log-squelch:", val_log_squelch) else S_YNO("log-queries:", log_queries) else S_YNO("log-replies:", log_replies) else S_YNO("log-tag-queryreply:", log_tag_queryreply) else S_YNO("log-local-actions:", log_local_actions) else S_YNO("log-servfail:", log_servfail) else S_YNO("val-permissive-mode:", val_permissive_mode) else S_YNO("aggressive-nsec:", aggressive_nsec) else S_YNO("ignore-cd-flag:", ignore_cd) else if(strcmp(opt, "serve-expired:") == 0) { IS_YES_OR_NO; cfg->serve_expired = (strcmp(val, "yes") == 0); SERVE_EXPIRED = cfg->serve_expired; } else if(strcmp(opt, "serve-expired-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->serve_expired_ttl = atoi(val); SERVE_EXPIRED_TTL=(time_t)cfg->serve_expired_ttl;} else S_YNO("serve-expired-ttl-reset:", serve_expired_ttl_reset) else if(strcmp(opt, "serve-expired-reply-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->serve_expired_reply_ttl = atoi(val); SERVE_EXPIRED_REPLY_TTL=(time_t)cfg->serve_expired_reply_ttl;} else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout) else S_YNO("serve-original-ttl:", serve_original_ttl) else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations) else S_UNSIGNED_OR_ZERO("add-holddown:", add_holddown) else S_UNSIGNED_OR_ZERO("del-holddown:", del_holddown) else S_UNSIGNED_OR_ZERO("keep-missing:", keep_missing) else if(strcmp(opt, "permit-small-holddown:") == 0) { IS_YES_OR_NO; cfg->permit_small_holddown = (strcmp(val, "yes") == 0); autr_permit_small_holddown = cfg->permit_small_holddown; } else S_MEMSIZE("key-cache-size:", key_cache_size) else S_POW2("key-cache-slabs:", key_cache_slabs) else S_MEMSIZE("neg-cache-size:", neg_cache_size) else S_YNO("minimal-responses:", minimal_responses) else S_YNO("rrset-roundrobin:", rrset_roundrobin) else S_NUMBER_OR_ZERO("unknown-server-time-limit:", unknown_server_time_limit) else S_STRLIST("local-data:", local_data) else S_YNO("unblock-lan-zones:", unblock_lan_zones) else S_YNO("insecure-lan-zones:", insecure_lan_zones) else S_YNO("control-enable:", remote_control_enable) else S_STRLIST_APPEND("control-interface:", control_ifs) else S_NUMBER_NONZERO("control-port:", control_port) else S_STR("server-key-file:", server_key_file) else S_STR("server-cert-file:", server_cert_file) else S_STR("control-key-file:", control_key_file) else S_STR("control-cert-file:", control_cert_file) else S_STR("module-config:", module_conf) else S_STRLIST("python-script:", python_script) else S_STRLIST("dynlib-file:", dynlib_file) else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check) #ifdef CLIENT_SUBNET /* Can't set max subnet prefix here, since that value is used when * generating the address tree. */ /* No client-subnet-always-forward here, module registration depends on * this option. */ #endif #ifdef USE_DNSTAP else S_YNO("dnstap-enable:", dnstap) else S_YNO("dnstap-bidirectional:", dnstap_bidirectional) else S_STR("dnstap-socket-path:", dnstap_socket_path) else S_STR("dnstap-ip:", dnstap_ip) else S_YNO("dnstap-tls:", dnstap_tls) else S_STR("dnstap-tls-server-name:", dnstap_tls_server_name) else S_STR("dnstap-tls-cert-bundle:", dnstap_tls_cert_bundle) else S_STR("dnstap-tls-client-key-file:", dnstap_tls_client_key_file) else S_STR("dnstap-tls-client-cert-file:", dnstap_tls_client_cert_file) else S_YNO("dnstap-send-identity:", dnstap_send_identity) else S_YNO("dnstap-send-version:", dnstap_send_version) else S_STR("dnstap-identity:", dnstap_identity) else S_STR("dnstap-version:", dnstap_version) else S_YNO("dnstap-log-resolver-query-messages:", dnstap_log_resolver_query_messages) else S_YNO("dnstap-log-resolver-response-messages:", dnstap_log_resolver_response_messages) else S_YNO("dnstap-log-client-query-messages:", dnstap_log_client_query_messages) else S_YNO("dnstap-log-client-response-messages:", dnstap_log_client_response_messages) else S_YNO("dnstap-log-forwarder-query-messages:", dnstap_log_forwarder_query_messages) else S_YNO("dnstap-log-forwarder-response-messages:", dnstap_log_forwarder_response_messages) #endif #ifdef USE_DNSCRYPT else S_YNO("dnscrypt-enable:", dnscrypt) else S_NUMBER_NONZERO("dnscrypt-port:", dnscrypt_port) else S_STR("dnscrypt-provider:", dnscrypt_provider) else S_STRLIST_UNIQ("dnscrypt-provider-cert:", dnscrypt_provider_cert) else S_STRLIST("dnscrypt-provider-cert-rotated:", dnscrypt_provider_cert_rotated) else S_STRLIST_UNIQ("dnscrypt-secret-key:", dnscrypt_secret_key) else S_MEMSIZE("dnscrypt-shared-secret-cache-size:", dnscrypt_shared_secret_cache_size) else S_POW2("dnscrypt-shared-secret-cache-slabs:", dnscrypt_shared_secret_cache_slabs) else S_MEMSIZE("dnscrypt-nonce-cache-size:", dnscrypt_nonce_cache_size) else S_POW2("dnscrypt-nonce-cache-slabs:", dnscrypt_nonce_cache_slabs) #endif else if(strcmp(opt, "ip-ratelimit:") == 0) { IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val); infra_ip_ratelimit=cfg->ip_ratelimit; } else if(strcmp(opt, "ratelimit:") == 0) { IS_NUMBER_OR_ZERO; cfg->ratelimit = atoi(val); infra_dp_ratelimit=cfg->ratelimit; } else S_MEMSIZE("ip-ratelimit-size:", ip_ratelimit_size) else S_MEMSIZE("ratelimit-size:", ratelimit_size) else S_POW2("ip-ratelimit-slabs:", ip_ratelimit_slabs) else S_POW2("ratelimit-slabs:", ratelimit_slabs) else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor) else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor) else S_SIZET_NONZERO("fast-server-num:", fast_server_num) else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil) else S_YNO("qname-minimisation:", qname_minimisation) else S_YNO("qname-minimisation-strict:", qname_minimisation_strict) else S_YNO("pad-responses:", pad_responses) else S_SIZET_NONZERO("pad-responses-block-size:", pad_responses_block_size) else S_YNO("pad-queries:", pad_queries) else S_SIZET_NONZERO("pad-queries-block-size:", pad_queries_block_size) #ifdef USE_IPSECMOD else S_YNO("ipsecmod-enabled:", ipsecmod_enabled) else S_YNO("ipsecmod-ignore-bogus:", ipsecmod_ignore_bogus) else if(strcmp(opt, "ipsecmod-max-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->ipsecmod_max_ttl = atoi(val); } else S_YNO("ipsecmod-strict:", ipsecmod_strict) #endif else if(strcmp(opt, "define-tag:") ==0) { return config_add_tag(cfg, val); /* val_sig_skew_min and max are copied into val_env during init, * so this does not update val_env with set_option */ } else if(strcmp(opt, "val-sig-skew-min:") == 0) { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_min = (int32_t)atoi(val); } else if(strcmp(opt, "val-sig-skew-max:") == 0) { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_max = (int32_t)atoi(val); } else if (strcmp(opt, "outgoing-interface:") == 0) { char* d = strdup(val); char** oi = (char**)reallocarray(NULL, (size_t)cfg->num_out_ifs+1, sizeof(char*)); if(!d || !oi) { free(d); free(oi); return -1; } if(cfg->out_ifs && cfg->num_out_ifs) { memmove(oi, cfg->out_ifs, cfg->num_out_ifs*sizeof(char*)); free(cfg->out_ifs); } oi[cfg->num_out_ifs++] = d; cfg->out_ifs = oi; } else { /* unknown or unsupported (from the set_option interface): * interface, outgoing-interface, access-control, * stub-zone, name, stub-addr, stub-host, stub-prime * forward-first, stub-first, forward-ssl-upstream, * stub-ssl-upstream, forward-zone, auth-zone * name, forward-addr, forward-host, * ratelimit-for-domain, ratelimit-below-domain, * local-zone-tag, access-control-view, * send-client-subnet, client-subnet-always-forward, * max-client-subnet-ipv4, max-client-subnet-ipv6, * min-client-subnet-ipv4, min-client-subnet-ipv6, * max-ecs-tree-size-ipv4, max-ecs-tree-size-ipv6, ipsecmod_hook, * ipsecmod_whitelist. */ return 0; } return 1; } void config_print_func(char* line, void* arg) { FILE* f = (FILE*)arg; (void)fprintf(f, "%s\n", line); } /** collate func arg */ struct config_collate_arg { /** list of result items */ struct config_strlist_head list; /** if a malloc error occurred, 0 is OK */ int status; }; void config_collate_func(char* line, void* arg) { struct config_collate_arg* m = (struct config_collate_arg*)arg; if(m->status) return; if(!cfg_strlist_append(&m->list, strdup(line))) m->status = 1; } int config_get_option_list(struct config_file* cfg, const char* opt, struct config_strlist** list) { struct config_collate_arg m; memset(&m, 0, sizeof(m)); *list = NULL; if(!config_get_option(cfg, opt, config_collate_func, &m)) return 1; if(m.status) { config_delstrlist(m.list.first); return 2; } *list = m.list.first; return 0; } int config_get_option_collate(struct config_file* cfg, const char* opt, char** str) { struct config_strlist* list = NULL; int r; *str = NULL; if((r = config_get_option_list(cfg, opt, &list)) != 0) return r; *str = config_collate_cat(list); config_delstrlist(list); if(!*str) return 2; return 0; } char* config_collate_cat(struct config_strlist* list) { size_t total = 0, left; struct config_strlist* s; char *r, *w; if(!list) /* no elements */ return strdup(""); if(list->next == NULL) /* one element , no newline at end. */ return strdup(list->str); /* count total length */ for(s=list; s; s=s->next) total += strlen(s->str) + 1; /* len + newline */ left = total+1; /* one extra for nul at end */ r = malloc(left); if(!r) return NULL; w = r; for(s=list; s; s=s->next) { size_t this = strlen(s->str); if(this+2 > left) { /* sanity check */ free(r); return NULL; } snprintf(w, left, "%s\n", s->str); this = strlen(w); w += this; left -= this; } return r; } /** compare and print decimal option */ #define O_DEC(opt, str, var) if(strcmp(opt, str)==0) \ {snprintf(buf, len, "%d", (int)cfg->var); \ func(buf, arg);} /** compare and print unsigned option */ #define O_UNS(opt, str, var) if(strcmp(opt, str)==0) \ {snprintf(buf, len, "%u", (unsigned)cfg->var); \ func(buf, arg);} /** compare and print yesno option */ #define O_YNO(opt, str, var) if(strcmp(opt, str)==0) \ {func(cfg->var?"yes":"no", arg);} /** compare and print string option */ #define O_STR(opt, str, var) if(strcmp(opt, str)==0) \ {func(cfg->var?cfg->var:"", arg);} /** compare and print array option */ #define O_IFC(opt, str, num, arr) if(strcmp(opt, str)==0) \ {int i; for(i=0; inum; i++) func(cfg->arr[i], arg);} /** compare and print memorysize option */ #define O_MEM(opt, str, var) if(strcmp(opt, str)==0) { \ if(cfg->var > 1024*1024*1024) { \ size_t f=cfg->var/(size_t)1000000, b=cfg->var%(size_t)1000000; \ snprintf(buf, len, "%u%6.6u", (unsigned)f, (unsigned)b); \ } else snprintf(buf, len, "%u", (unsigned)cfg->var); \ func(buf, arg);} /** compare and print list option */ #define O_LST(opt, name, lst) if(strcmp(opt, name)==0) { \ struct config_strlist* p = cfg->lst; \ for(p = cfg->lst; p; p = p->next) \ func(p->str, arg); \ } /** compare and print list option */ #define O_LS2(opt, name, lst) if(strcmp(opt, name)==0) { \ struct config_str2list* p = cfg->lst; \ for(p = cfg->lst; p; p = p->next) { \ snprintf(buf, len, "%s %s", p->str, p->str2); \ func(buf, arg); \ } \ } /** compare and print list option */ #define O_LS3(opt, name, lst) if(strcmp(opt, name)==0) { \ struct config_str3list* p = cfg->lst; \ for(p = cfg->lst; p; p = p->next) { \ snprintf(buf, len, "%s %s %s", p->str, p->str2, p->str3); \ func(buf, arg); \ } \ } /** compare and print taglist option */ #define O_LTG(opt, name, lst) if(strcmp(opt, name)==0) { \ char* tmpstr = NULL; \ struct config_strbytelist *p = cfg->lst; \ for(p = cfg->lst; p; p = p->next) {\ tmpstr = config_taglist2str(cfg, p->str2, p->str2len); \ if(tmpstr) {\ snprintf(buf, len, "%s %s", p->str, tmpstr); \ func(buf, arg); \ free(tmpstr); \ } \ } \ } int config_get_option(struct config_file* cfg, const char* opt, void (*func)(char*,void*), void* arg) { char buf[1024], nopt[64]; size_t len = sizeof(buf); if(!opt) return 0; if(opt && opt[strlen(opt)-1] == ':' && strlen(opt)filename = filename; cfg_parser->line = 1; cfg_parser->errors = 0; cfg_parser->cfg = cfg; cfg_parser->chroot = chroot; init_cfg_parse(); } int config_read(struct config_file* cfg, const char* filename, const char* chroot) { FILE *in; char *fname = (char*)filename; #ifdef HAVE_GLOB glob_t g; size_t i; int r, flags; #endif if(!fname) return 1; /* check for wildcards */ #ifdef HAVE_GLOB if(!(!strchr(fname, '*') && !strchr(fname, '?') && !strchr(fname, '[') && !strchr(fname, '{') && !strchr(fname, '~'))) { verbose(VERB_QUERY, "wildcard found, processing %s", fname); flags = 0 #ifdef GLOB_ERR | GLOB_ERR #endif #ifdef GLOB_NOSORT | GLOB_NOSORT #endif #ifdef GLOB_BRACE | GLOB_BRACE #endif #ifdef GLOB_TILDE | GLOB_TILDE #endif ; memset(&g, 0, sizeof(g)); r = glob(fname, flags, NULL, &g); if(r) { /* some error */ globfree(&g); if(r == GLOB_NOMATCH) { verbose(VERB_QUERY, "include: " "no matches for %s", fname); return 1; } else if(r == GLOB_NOSPACE) { log_err("include: %s: " "fnametern out of memory", fname); } else if(r == GLOB_ABORTED) { log_err("wildcard include: %s: expansion " "aborted (%s)", fname, strerror(errno)); } else { log_err("wildcard include: %s: expansion " "failed (%s)", fname, strerror(errno)); } /* ignore globs that yield no files */ return 1; } /* process files found, if any */ for(i=0; i<(size_t)g.gl_pathc; i++) { if(!config_read(cfg, g.gl_pathv[i], chroot)) { log_err("error reading wildcard " "include: %s", g.gl_pathv[i]); globfree(&g); return 0; } } globfree(&g); return 1; } #endif /* HAVE_GLOB */ in = fopen(fname, "r"); if(!in) { log_err("Could not open %s: %s", fname, strerror(errno)); return 0; } create_cfg_parser(cfg, fname, chroot); ub_c_in = in; ub_c_parse(); fclose(in); if(!cfg->dnscrypt) cfg->dnscrypt_port = 0; if(cfg_parser->errors != 0) { fprintf(stderr, "read %s failed: %d errors in configuration file\n", fname, cfg_parser->errors); errno=EINVAL; return 0; } return 1; } struct config_stub* cfg_stub_find(struct config_stub*** pp, const char* nm) { struct config_stub* p = *(*pp); while(p) { if(strcmp(p->name, nm) == 0) return p; (*pp) = &p->next; p = p->next; } return NULL; } void config_delstrlist(struct config_strlist* p) { struct config_strlist *np; while(p) { np = p->next; free(p->str); free(p); p = np; } } void config_deldblstrlist(struct config_str2list* p) { struct config_str2list *np; while(p) { np = p->next; free(p->str); free(p->str2); free(p); p = np; } } void config_deltrplstrlist(struct config_str3list* p) { struct config_str3list *np; while(p) { np = p->next; free(p->str); free(p->str2); free(p->str3); free(p); p = np; } } void config_delauth(struct config_auth* p) { if(!p) return; free(p->name); config_delstrlist(p->masters); config_delstrlist(p->urls); config_delstrlist(p->allow_notify); free(p->zonefile); free(p->rpz_taglist); free(p->rpz_action_override); free(p->rpz_cname); free(p->rpz_log_name); free(p); } void config_delauths(struct config_auth* p) { struct config_auth* np; while(p) { np = p->next; config_delauth(p); p = np; } } void config_delstub(struct config_stub* p) { if(!p) return; free(p->name); config_delstrlist(p->hosts); config_delstrlist(p->addrs); free(p); } void config_delstubs(struct config_stub* p) { struct config_stub* np; while(p) { np = p->next; config_delstub(p); p = np; } } void config_delview(struct config_view* p) { if(!p) return; free(p->name); config_deldblstrlist(p->local_zones); config_delstrlist(p->local_zones_nodefault); #ifdef USE_IPSET config_delstrlist(p->local_zones_ipset); #endif config_delstrlist(p->local_data); free(p); } void config_delviews(struct config_view* p) { struct config_view* np; while(p) { np = p->next; config_delview(p); p = np; } } void config_del_strarray(char** array, int num) { int i; if(!array) return; for(i=0; inext; free(p->str); free(p->str2); free(p); p = np; } } void config_delete(struct config_file* cfg) { if(!cfg) return; free(cfg->username); free(cfg->chrootdir); free(cfg->directory); free(cfg->logfile); free(cfg->pidfile); free(cfg->target_fetch_policy); free(cfg->ssl_service_key); free(cfg->ssl_service_pem); free(cfg->tls_cert_bundle); config_delstrlist(cfg->tls_additional_port); config_delstrlist(cfg->tls_session_ticket_keys.first); free(cfg->tls_ciphers); free(cfg->tls_ciphersuites); free(cfg->http_endpoint); if(cfg->log_identity) { log_ident_revert_to_default(); free(cfg->log_identity); } config_del_strarray(cfg->ifs, cfg->num_ifs); config_del_strarray(cfg->out_ifs, cfg->num_out_ifs); config_delstubs(cfg->stubs); config_delstubs(cfg->forwards); config_delauths(cfg->auths); config_delviews(cfg->views); config_delstrlist(cfg->donotqueryaddrs); config_delstrlist(cfg->root_hints); #ifdef CLIENT_SUBNET config_delstrlist(cfg->client_subnet); config_delstrlist(cfg->client_subnet_zone); #endif free(cfg->identity); free(cfg->version); free(cfg->nsid_cfg_str); free(cfg->nsid); free(cfg->module_conf); free(cfg->outgoing_avail_ports); config_delstrlist(cfg->caps_whitelist); config_delstrlist(cfg->private_address); config_delstrlist(cfg->private_domain); config_delstrlist(cfg->auto_trust_anchor_file_list); config_delstrlist(cfg->trust_anchor_file_list); config_delstrlist(cfg->trusted_keys_file_list); config_delstrlist(cfg->trust_anchor_list); config_delstrlist(cfg->domain_insecure); config_deldblstrlist(cfg->acls); config_deldblstrlist(cfg->tcp_connection_limits); free(cfg->val_nsec3_key_iterations); config_deldblstrlist(cfg->local_zones); config_delstrlist(cfg->local_zones_nodefault); #ifdef USE_IPSET config_delstrlist(cfg->local_zones_ipset); #endif config_delstrlist(cfg->local_data); config_deltrplstrlist(cfg->local_zone_overrides); config_del_strarray(cfg->tagname, cfg->num_tags); config_del_strbytelist(cfg->local_zone_tags); config_del_strbytelist(cfg->acl_tags); config_del_strbytelist(cfg->respip_tags); config_deltrplstrlist(cfg->acl_tag_actions); config_deltrplstrlist(cfg->acl_tag_datas); config_delstrlist(cfg->control_ifs.first); free(cfg->server_key_file); free(cfg->server_cert_file); free(cfg->control_key_file); free(cfg->control_cert_file); free(cfg->dns64_prefix); config_delstrlist(cfg->dns64_ignore_aaaa); free(cfg->dnstap_socket_path); free(cfg->dnstap_ip); free(cfg->dnstap_tls_server_name); free(cfg->dnstap_tls_cert_bundle); free(cfg->dnstap_tls_client_key_file); free(cfg->dnstap_tls_client_cert_file); free(cfg->dnstap_identity); free(cfg->dnstap_version); config_deldblstrlist(cfg->ratelimit_for_domain); config_deldblstrlist(cfg->ratelimit_below_domain); config_delstrlist(cfg->python_script); config_delstrlist(cfg->dynlib_file); config_deldblstrlist(cfg->edns_client_strings); #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); #endif #ifdef USE_CACHEDB free(cfg->cachedb_backend); free(cfg->cachedb_secret); #ifdef USE_REDIS free(cfg->redis_server_host); #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ #ifdef USE_IPSET free(cfg->ipset_name_v4); free(cfg->ipset_name_v6); #endif free(cfg); } static void init_outgoing_availports(int* a, int num) { /* generated with make iana_update */ const int iana_assigned[] = { #include "util/iana_ports.inc" -1 }; /* end marker to put behind trailing comma */ int i; /* do not use <1024, that could be trouble with the system, privs */ for(i=1024; i= (int)sizeof(buf) ) { log_err("cannot parse port number '%s'", str); return 0; } if(mid > str) memcpy(buf, str, (size_t)(mid-str)); buf[mid-str] = 0; low = atoi(buf); if(low == 0 && strcmp(buf, "0") != 0) { log_err("cannot parse port number '%s'", buf); return 0; } for(i=low; i<=high; i++) { if(i < num) avail[i] = (allow?i:0); } return 1; } return 1; } int cfg_scan_ports(int* avail, int num) { int i; int count = 0; for(i=0; ioutgoing_avail_ports, 65536); int i, at = 0; *avail = NULL; if(num == 0) return 0; *avail = (int*)reallocarray(NULL, (size_t)num, sizeof(int)); if(!*avail) return 0; for(i=0; i<65536; i++) { if(cfg->outgoing_avail_ports[i]) (*avail)[at++] = cfg->outgoing_avail_ports[i]; } log_assert(at == num); return num; } /** print error with file and line number */ static void ub_c_error_va_list(const char *fmt, va_list args) { cfg_parser->errors++; fprintf(stderr, "%s:%d: error: ", cfg_parser->filename, cfg_parser->line); vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); } /** print error with file and line number */ void ub_c_error_msg(const char* fmt, ...) { va_list args; va_start(args, fmt); ub_c_error_va_list(fmt, args); va_end(args); } void ub_c_error(const char *str) { cfg_parser->errors++; fprintf(stderr, "%s:%d: error: %s\n", cfg_parser->filename, cfg_parser->line, str); } int ub_c_wrap(void) { return 1; } int cfg_strlist_append(struct config_strlist_head* list, char* item) { struct config_strlist *s; if(!item || !list) { free(item); return 0; } s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist)); if(!s) { free(item); return 0; } s->str = item; s->next = NULL; if(list->last) list->last->next = s; else list->first = s; list->last = s; return 1; } int cfg_region_strlist_insert(struct regional* region, struct config_strlist** head, char* item) { struct config_strlist *s; if(!item || !head) return 0; s = (struct config_strlist*)regional_alloc_zero(region, sizeof(struct config_strlist)); if(!s) return 0; s->str = item; s->next = *head; *head = s; return 1; } struct config_strlist* cfg_strlist_find(struct config_strlist* head, const char *item) { struct config_strlist *s = head; if(!head){ return NULL; } while(s) { if(strcmp(s->str, item) == 0) { return s; } s = s->next; } return NULL; } int cfg_strlist_insert(struct config_strlist** head, char* item) { struct config_strlist *s; if(!item || !head) { free(item); return 0; } s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist)); if(!s) { free(item); return 0; } s->str = item; s->next = *head; *head = s; return 1; } int cfg_strlist_append_ex(struct config_strlist** head, char* item) { struct config_strlist *s; if(!item || !head) return 0; s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist)); if(!s) return 0; s->str = item; s->next = NULL; if (*head==NULL) { *head = s; } else { struct config_strlist *last = *head; while (last->next!=NULL) { last = last->next; } last->next = s; } return 1; } int cfg_str2list_insert(struct config_str2list** head, char* item, char* i2) { struct config_str2list *s; if(!item || !i2 || !head) { free(item); free(i2); return 0; } s = (struct config_str2list*)calloc(1, sizeof(struct config_str2list)); if(!s) { free(item); free(i2); return 0; } s->str = item; s->str2 = i2; s->next = *head; *head = s; return 1; } int cfg_str3list_insert(struct config_str3list** head, char* item, char* i2, char* i3) { struct config_str3list *s; if(!item || !i2 || !i3 || !head) return 0; s = (struct config_str3list*)calloc(1, sizeof(struct config_str3list)); if(!s) return 0; s->str = item; s->str2 = i2; s->str3 = i3; s->next = *head; *head = s; return 1; } int cfg_strbytelist_insert(struct config_strbytelist** head, char* item, uint8_t* i2, size_t i2len) { struct config_strbytelist* s; if(!item || !i2 || !head) return 0; s = (struct config_strbytelist*)calloc(1, sizeof(*s)); if(!s) return 0; s->str = item; s->str2 = i2; s->str2len = i2len; s->next = *head; *head = s; return 1; } time_t cfg_convert_timeval(const char* str) { time_t t; struct tm tm; memset(&tm, 0, sizeof(tm)); if(strlen(str) < 14) return 0; if(sscanf(str, "%4d%2d%2d%2d%2d%2d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) return 0; tm.tm_year -= 1900; tm.tm_mon--; /* Check values */ if (tm.tm_year < 70) return 0; if (tm.tm_mon < 0 || tm.tm_mon > 11) return 0; if (tm.tm_mday < 1 || tm.tm_mday > 31) return 0; if (tm.tm_hour < 0 || tm.tm_hour > 23) return 0; if (tm.tm_min < 0 || tm.tm_min > 59) return 0; if (tm.tm_sec < 0 || tm.tm_sec > 59) return 0; /* call ldns conversion function */ t = sldns_mktime_from_utc(&tm); return t; } int cfg_count_numbers(const char* s) { /* format ::= (sp num)+ sp */ /* num ::= [-](0-9)+ */ /* sp ::= (space|tab)* */ int num = 0; while(*s) { while(*s && isspace((unsigned char)*s)) s++; if(!*s) /* end of string */ break; if(*s == '-') s++; if(!*s) /* only - not allowed */ return 0; if(!isdigit((unsigned char)*s)) /* bad character */ return 0; while(*s && isdigit((unsigned char)*s)) s++; num++; } return num; } /** all digit number */ static int isalldigit(const char* str, size_t l) { size_t i; for(i=0; i0 && str[len-1]==' ') len--; if(len > 1 && str[len-1] == 'b') len--; else if(len > 1 && str[len-1] == 'B') len--; if(len > 1 && tolower((unsigned char)str[len-1]) == 'g') mult = 1024*1024*1024; else if(len > 1 && tolower((unsigned char)str[len-1]) == 'm') mult = 1024*1024; else if(len > 1 && tolower((unsigned char)str[len-1]) == 'k') mult = 1024; else if(len > 0 && isdigit((unsigned char)str[len-1])) mult = 1; else { log_err("unknown size specifier: '%s'", str); return 0; } while(len>1 && str[len-2]==' ') len--; if(!isalldigit(str, len-1)) { log_err("unknown size specifier: '%s'", str); return 0; } *res = ((size_t)atol(str)) * mult; return 1; } int find_tag_id(struct config_file* cfg, const char* tag) { int i; for(i=0; inum_tags; i++) { if(strcmp(cfg->tagname[i], tag) == 0) return i; } return -1; } int config_add_tag(struct config_file* cfg, const char* tag) { char** newarray; char* newtag; if(find_tag_id(cfg, tag) != -1) return 1; /* nothing to do */ newarray = (char**)malloc(sizeof(char*)*(cfg->num_tags+1)); if(!newarray) return 0; newtag = strdup(tag); if(!newtag) { free(newarray); return 0; } if(cfg->tagname) { memcpy(newarray, cfg->tagname, sizeof(char*)*cfg->num_tags); free(cfg->tagname); } newarray[cfg->num_tags++] = newtag; cfg->tagname = newarray; return 1; } /** set a bit in a bit array */ static void cfg_set_bit(uint8_t* bitlist, size_t len, int id) { int pos = id/8; log_assert((size_t)pos < len); (void)len; bitlist[pos] |= 1<<(id%8); } uint8_t* config_parse_taglist(struct config_file* cfg, char* str, size_t* listlen) { uint8_t* taglist = NULL; size_t len = 0; char* p, *s; /* allocate */ if(cfg->num_tags == 0) { log_err("parse taglist, but no tags defined"); return 0; } len = (size_t)(cfg->num_tags+7)/8; taglist = calloc(1, len); if(!taglist) { log_err("out of memory"); return 0; } /* parse */ s = str; while((p=strsep(&s, " \t\n")) != NULL) { if(*p) { int id = find_tag_id(cfg, p); /* set this bit in the bitlist */ if(id == -1) { log_err("unknown tag: %s", p); free(taglist); return 0; } cfg_set_bit(taglist, len, id); } } *listlen = len; return taglist; } uint8_t* cfg_parse_nsid(const char* str, uint16_t* nsid_len) { uint8_t* nsid = NULL; if (strncasecmp(str, "ascii_", 6) == 0) { if ((nsid = (uint8_t *)strdup(str + 6))) *nsid_len = strlen(str + 6); } else if (strlen(str) % 2) { ; /* hex string has even number of characters */ } else if (*str && (nsid = calloc(1, strlen(str) / 2))) { const char *ch; uint8_t *dp; for ( ch = str, dp = nsid ; isxdigit(ch[0]) && isxdigit(ch[1]) ; ch += 2, dp++) { *dp = (uint8_t)sldns_hexdigit_to_int(ch[0]) * 16; *dp += (uint8_t)sldns_hexdigit_to_int(ch[1]); } if (*ch) { free(nsid); nsid = NULL; } else *nsid_len = strlen(str) / 2; } return nsid; } char* config_taglist2str(struct config_file* cfg, uint8_t* taglist, size_t taglen) { char buf[10240]; size_t i, j, len = 0; buf[0] = 0; for(i=0; itagname[id]); len += strlen(buf+len); } } } return strdup(buf); } int taglist_intersect(uint8_t* list1, size_t list1len, const uint8_t* list2, size_t list2len) { size_t i; if(!list1 || !list2) return 0; for(i=0; imax_ttl; MIN_TTL = (time_t)config->min_ttl; SERVE_EXPIRED = config->serve_expired; SERVE_EXPIRED_TTL = (time_t)config->serve_expired_ttl; SERVE_EXPIRED_REPLY_TTL = (time_t)config->serve_expired_reply_ttl; SERVE_ORIGINAL_TTL = config->serve_original_ttl; MAX_NEG_TTL = (time_t)config->max_negative_ttl; RTT_MIN_TIMEOUT = config->infra_cache_min_rtt; EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size; MINIMAL_RESPONSES = config->minimal_responses; RRSET_ROUNDROBIN = config->rrset_roundrobin; LOG_TAG_QUERYREPLY = config->log_tag_queryreply; UNKNOWN_SERVER_NICENESS = config->unknown_server_time_limit; log_set_time_asc(config->log_time_ascii); autr_permit_small_holddown = config->permit_small_holddown; stream_wait_max = config->stream_wait_size; http2_query_buffer_max = config->http_query_buffer_size; http2_response_buffer_max = config->http_response_buffer_size; } void config_lookup_uid(struct config_file* cfg) { #ifdef HAVE_GETPWNAM /* translate username into uid and gid */ if(cfg->username && cfg->username[0]) { struct passwd *pwd; if((pwd = getpwnam(cfg->username)) != NULL) { cfg_uid = pwd->pw_uid; cfg_gid = pwd->pw_gid; } } #else (void)cfg; #endif } /** * Calculate string length of full pathname in original filesys * @param fname: the path name to convert. * Must not be null or empty. * @param cfg: config struct for chroot and chdir (if set). * @param use_chdir: if false, only chroot is applied. * @return length of string. * remember to allocate one more for 0 at end in mallocs. */ static size_t strlen_after_chroot(const char* fname, struct config_file* cfg, int use_chdir) { size_t len = 0; int slashit = 0; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(cfg->chrootdir, fname, strlen(cfg->chrootdir)) == 0) { /* already full pathname, return it */ return strlen(fname); } /* chroot */ if(cfg->chrootdir && cfg->chrootdir[0]) { /* start with chrootdir */ len += strlen(cfg->chrootdir); slashit = 1; } /* chdir */ #ifdef UB_ON_WINDOWS if(fname[0] != 0 && fname[1] == ':') { /* full path, no chdir */ } else #endif if(fname[0] == '/' || !use_chdir) { /* full path, no chdir */ } else if(cfg->directory && cfg->directory[0]) { /* prepend chdir */ if(slashit && cfg->directory[0] != '/') len++; if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(cfg->chrootdir, cfg->directory, strlen(cfg->chrootdir)) == 0) len += strlen(cfg->directory)-strlen(cfg->chrootdir); else len += strlen(cfg->directory); slashit = 1; } /* fname */ if(slashit && fname[0] != '/') len++; len += strlen(fname); return len; } char* fname_after_chroot(const char* fname, struct config_file* cfg, int use_chdir) { size_t len = strlen_after_chroot(fname, cfg, use_chdir)+1; int slashit = 0; char* buf = (char*)malloc(len); if(!buf) return NULL; buf[0] = 0; /* is fname already in chroot ? */ if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(cfg->chrootdir, fname, strlen(cfg->chrootdir)) == 0) { /* already full pathname, return it */ (void)strlcpy(buf, fname, len); buf[len-1] = 0; return buf; } /* chroot */ if(cfg->chrootdir && cfg->chrootdir[0]) { /* start with chrootdir */ (void)strlcpy(buf, cfg->chrootdir, len); slashit = 1; } #ifdef UB_ON_WINDOWS if(fname[0] != 0 && fname[1] == ':') { /* full path, no chdir */ } else #endif /* chdir */ if(fname[0] == '/' || !use_chdir) { /* full path, no chdir */ } else if(cfg->directory && cfg->directory[0]) { /* prepend chdir */ if(slashit && cfg->directory[0] != '/') (void)strlcat(buf, "/", len); /* is the directory already in the chroot? */ if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(cfg->chrootdir, cfg->directory, strlen(cfg->chrootdir)) == 0) (void)strlcat(buf, cfg->directory+strlen(cfg->chrootdir), len); else (void)strlcat(buf, cfg->directory, len); slashit = 1; } /* fname */ if(slashit && fname[0] != '/') (void)strlcat(buf, "/", len); (void)strlcat(buf, fname, len); buf[len-1] = 0; return buf; } /** return next space character in string */ static char* next_space_pos(const char* str) { char* sp = strchr(str, ' '); char* tab = strchr(str, '\t'); if(!tab && !sp) return NULL; if(!sp) return tab; if(!tab) return sp; return (sptab)?sp:tab; } int cfg_parse_local_zone(struct config_file* cfg, const char* val) { const char *type, *name_end, *name; char buf[256]; /* parse it as: [zone_name] [between stuff] [zone_type] */ name = val; while(*name && isspace((unsigned char)*name)) name++; if(!*name) { log_err("syntax error: too short: %s", val); return 0; } name_end = next_space_pos(name); if(!name_end || !*name_end) { log_err("syntax error: expected zone type: %s", val); return 0; } if (name_end - name > 255) { log_err("syntax error: bad zone name: %s", val); return 0; } (void)strlcpy(buf, name, sizeof(buf)); buf[name_end-name] = '\0'; type = last_space_pos(name_end); while(type && *type && isspace((unsigned char)*type)) type++; if(!type || !*type) { log_err("syntax error: expected zone type: %s", val); return 0; } if(strcmp(type, "nodefault")==0) { return cfg_strlist_insert(&cfg->local_zones_nodefault, strdup(name)); #ifdef USE_IPSET } else if(strcmp(type, "ipset")==0) { return cfg_strlist_insert(&cfg->local_zones_ipset, strdup(name)); #endif } else { return cfg_str2list_insert(&cfg->local_zones, strdup(buf), strdup(type)); } } char* cfg_ptr_reverse(char* str) { char* ip, *ip_end; char* name; char* result; char buf[1024]; struct sockaddr_storage addr; socklen_t addrlen; /* parse it as: [IP] [between stuff] [name] */ ip = str; while(*ip && isspace((unsigned char)*ip)) ip++; if(!*ip) { log_err("syntax error: too short: %s", str); return NULL; } ip_end = next_space_pos(ip); if(!ip_end || !*ip_end) { log_err("syntax error: expected name: %s", str); return NULL; } name = last_space_pos(ip_end); if(!name || !*name) { log_err("syntax error: expected name: %s", str); return NULL; } sscanf(ip, "%100s", buf); buf[sizeof(buf)-1]=0; if(!ipstrtoaddr(buf, UNBOUND_DNS_PORT, &addr, &addrlen)) { log_err("syntax error: cannot parse address: %s", str); return NULL; } /* reverse IPv4: * ddd.ddd.ddd.ddd.in-addr-arpa. * IPv6: (h.){32}.ip6.arpa. */ if(addr_is_ip6(&addr, addrlen)) { uint8_t ad[16]; const char* hex = "0123456789abcdef"; char *p = buf; int i; memmove(ad, &((struct sockaddr_in6*)&addr)->sin6_addr, sizeof(ad)); for(i=15; i>=0; i--) { uint8_t b = ad[i]; *p++ = hex[ (b&0x0f) ]; *p++ = '.'; *p++ = hex[ (b&0xf0) >> 4 ]; *p++ = '.'; } snprintf(buf+16*4, sizeof(buf)-16*4, "ip6.arpa. "); } else { uint8_t ad[4]; memmove(ad, &((struct sockaddr_in*)&addr)->sin_addr, sizeof(ad)); snprintf(buf, sizeof(buf), "%u.%u.%u.%u.in-addr.arpa. ", (unsigned)ad[3], (unsigned)ad[2], (unsigned)ad[1], (unsigned)ad[0]); } /* printed the reverse address, now the between goop and name on end */ while(*ip_end && isspace((unsigned char)*ip_end)) ip_end++; if(name>ip_end) { snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "%.*s", (int)(name-ip_end), ip_end); } snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), " PTR %s", name); result = strdup(buf); if(!result) { log_err("out of memory parsing %s", str); return NULL; } return result; } #ifdef UB_ON_WINDOWS char* w_lookup_reg_str(const char* key, const char* name) { HKEY hk = NULL; DWORD type = 0; BYTE buf[1024]; DWORD len = (DWORD)sizeof(buf); LONG ret; char* result = NULL; ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hk); if(ret == ERROR_FILE_NOT_FOUND) return NULL; /* key does not exist */ else if(ret != ERROR_SUCCESS) { log_err("RegOpenKeyEx failed"); return NULL; } ret = RegQueryValueEx(hk, (LPCTSTR)name, 0, &type, buf, &len); if(RegCloseKey(hk)) log_err("RegCloseKey"); if(ret == ERROR_FILE_NOT_FOUND) return NULL; /* name does not exist */ else if(ret != ERROR_SUCCESS) { log_err("RegQueryValueEx failed"); return NULL; } if(type == REG_SZ || type == REG_MULTI_SZ || type == REG_EXPAND_SZ) { buf[sizeof(buf)-1] = 0; buf[sizeof(buf)-2] = 0; /* for multi_sz */ result = strdup((char*)buf); if(!result) log_err("out of memory"); } return result; } void w_config_adjust_directory(struct config_file* cfg) { if(cfg->directory && cfg->directory[0]) { TCHAR dirbuf[2*MAX_PATH+4]; if(strcmp(cfg->directory, "%EXECUTABLE%") == 0) { /* get executable path, and if that contains * directories, snip off the filename part */ dirbuf[0] = 0; if(!GetModuleFileName(NULL, dirbuf, MAX_PATH)) log_err("could not GetModuleFileName"); if(strrchr(dirbuf, '\\')) { (strrchr(dirbuf, '\\'))[0] = 0; } else log_err("GetModuleFileName had no path"); if(dirbuf[0]) { /* adjust directory for later lookups to work*/ free(cfg->directory); cfg->directory = memdup(dirbuf, strlen(dirbuf)+1); } } } } #endif /* UB_ON_WINDOWS */ void errinf(struct module_qstate* qstate, const char* str) { struct config_strlist* p; if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str) return; p = (struct config_strlist*)regional_alloc(qstate->region, sizeof(*p)); if(!p) { log_err("malloc failure in validator-error-info string"); return; } p->next = NULL; p->str = regional_strdup(qstate->region, str); if(!p->str) { log_err("malloc failure in validator-error-info string"); return; } /* add at end */ if(qstate->errinf) { struct config_strlist* q = qstate->errinf; while(q->next) q = q->next; q->next = p; } else qstate->errinf = p; } void errinf_origin(struct module_qstate* qstate, struct sock_list *origin) { struct sock_list* p; if(qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) return; for(p=origin; p; p=p->next) { char buf[256]; if(p == origin) snprintf(buf, sizeof(buf), "from "); else snprintf(buf, sizeof(buf), "and "); if(p->len == 0) snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "cache"); else addr_to_str(&p->addr, p->len, buf+strlen(buf), sizeof(buf)-strlen(buf)); errinf(qstate, buf); } } char* errinf_to_str_bogus(struct module_qstate* qstate) { char buf[20480]; char* p = buf; size_t left = sizeof(buf); struct config_strlist* s; char dname[LDNS_MAX_DOMAINLEN+1]; char t[16], c[16]; sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t)); sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c)); dname_str(qstate->qinfo.qname, dname); snprintf(p, left, "validation failure <%s %s %s>:", dname, t, c); left -= strlen(p); p += strlen(p); if(!qstate->errinf) snprintf(p, left, " misc failure"); else for(s=qstate->errinf; s; s=s->next) { snprintf(p, left, " %s", s->str); left -= strlen(p); p += strlen(p); } p = strdup(buf); if(!p) log_err("malloc failure in errinf_to_str"); return p; } char* errinf_to_str_servfail(struct module_qstate* qstate) { char buf[20480]; char* p = buf; size_t left = sizeof(buf); struct config_strlist* s; char dname[LDNS_MAX_DOMAINLEN+1]; char t[16], c[16]; sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t)); sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c)); dname_str(qstate->qinfo.qname, dname); snprintf(p, left, "SERVFAIL <%s %s %s>:", dname, t, c); left -= strlen(p); p += strlen(p); if(!qstate->errinf) snprintf(p, left, " misc failure"); else for(s=qstate->errinf; s; s=s->next) { snprintf(p, left, " %s", s->str); left -= strlen(p); p += strlen(p); } p = strdup(buf); if(!p) log_err("malloc failure in errinf_to_str"); return p; } void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr) { char buf[1024]; char dname[LDNS_MAX_DOMAINLEN+1]; char t[16], c[16]; if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !rr) return; sldns_wire2str_type_buf(ntohs(rr->rk.type), t, sizeof(t)); sldns_wire2str_class_buf(ntohs(rr->rk.rrset_class), c, sizeof(c)); dname_str(rr->rk.dname, dname); snprintf(buf, sizeof(buf), "for <%s %s %s>", dname, t, c); errinf(qstate, buf); } void errinf_dname(struct module_qstate* qstate, const char* str, uint8_t* dname) { char b[1024]; char buf[LDNS_MAX_DOMAINLEN+1]; if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str || !dname) return; dname_str(dname, buf); snprintf(b, sizeof(b), "%s %s", str, buf); errinf(qstate, b); } int options_remote_is_address(struct config_file* cfg) { if(!cfg->remote_control_enable) return 0; if(!cfg->control_ifs.first) return 1; if(!cfg->control_ifs.first->str) return 1; if(cfg->control_ifs.first->str[0] == 0) return 1; return (cfg->control_ifs.first->str[0] != '/'); } unbound-1.13.1/util/fptr_wlist.c0000644000175000017500000004610514010434640016223 0ustar wouterwouter/* * util/fptr_wlist.c - function pointer whitelists. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions that check function pointers. * The functions contain a whitelist of known good callback values. * Any other values lead to an error. * * Due to the listing nature, this file violates all the modularization * boundaries in the program. */ #include "config.h" #include "util/fptr_wlist.h" #include "util/mini_event.h" #include "services/outside_network.h" #include "services/mesh.h" #include "services/localzone.h" #include "services/authzone.h" #include "services/cache/infra.h" #include "services/cache/rrset.h" #include "services/view.h" #include "dns64/dns64.h" #include "iterator/iterator.h" #include "iterator/iter_fwd.h" #include "validator/validator.h" #include "validator/val_anchor.h" #include "validator/val_nsec3.h" #include "validator/val_sigcrypt.h" #include "validator/val_kentry.h" #include "validator/val_neg.h" #include "validator/autotrust.h" #include "util/data/msgreply.h" #include "util/data/packed_rrset.h" #include "util/storage/slabhash.h" #include "util/storage/dnstree.h" #include "util/locks.h" #include "libunbound/libworker.h" #include "libunbound/context.h" #include "libunbound/worker.h" #include "util/tube.h" #include "util/config_file.h" #ifdef UB_ON_WINDOWS #include "winrc/win_svc.h" #endif #include "respip/respip.h" #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif #ifdef WITH_DYNLIBMODULE #include "dynlibmod/dynlibmod.h" #endif #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif #ifdef USE_IPSECMOD #include "ipsecmod/ipsecmod.h" #endif #ifdef CLIENT_SUBNET #include "edns-subnet/subnetmod.h" #endif #ifdef USE_IPSET #include "ipset/ipset.h" #endif #ifdef USE_DNSTAP #include "dnstap/dtstream.h" #endif int fptr_whitelist_comm_point(comm_point_callback_type *fptr) { if(fptr == &worker_handle_request) return 1; else if(fptr == &outnet_udp_cb) return 1; else if(fptr == &outnet_tcp_cb) return 1; else if(fptr == &tube_handle_listen) return 1; else if(fptr == &auth_xfer_probe_udp_callback) return 1; else if(fptr == &auth_xfer_transfer_tcp_callback) return 1; else if(fptr == &auth_xfer_transfer_http_callback) return 1; return 0; } int fptr_whitelist_comm_point_raw(comm_point_callback_type *fptr) { if(fptr == &tube_handle_listen) return 1; else if(fptr == &tube_handle_write) return 1; else if(fptr == &remote_accept_callback) return 1; else if(fptr == &remote_control_callback) return 1; return 0; } int fptr_whitelist_comm_timer(void (*fptr)(void*)) { if(fptr == &pending_udp_timer_cb) return 1; else if(fptr == &outnet_tcptimer) return 1; else if(fptr == &pending_udp_timer_delay_cb) return 1; else if(fptr == &worker_stat_timer_cb) return 1; else if(fptr == &worker_probe_timer_cb) return 1; #ifdef UB_ON_WINDOWS else if(fptr == &wsvc_cron_cb) return 1; #endif else if(fptr == &auth_xfer_timer) return 1; else if(fptr == &auth_xfer_probe_timer_callback) return 1; else if(fptr == &auth_xfer_transfer_timer_callback) return 1; else if(fptr == &mesh_serve_expired_callback) return 1; #ifdef USE_DNSTAP else if(fptr == &mq_wakeup_cb) return 1; #endif return 0; } int fptr_whitelist_comm_signal(void (*fptr)(int, void*)) { if(fptr == &worker_sighandler) return 1; return 0; } int fptr_whitelist_start_accept(void (*fptr)(void*)) { if(fptr == &worker_start_accept) return 1; return 0; } int fptr_whitelist_stop_accept(void (*fptr)(void*)) { if(fptr == &worker_stop_accept) return 1; return 0; } int fptr_whitelist_event(void (*fptr)(int, short, void *)) { if(fptr == &comm_point_udp_callback) return 1; else if(fptr == &comm_point_udp_ancil_callback) return 1; else if(fptr == &comm_point_tcp_accept_callback) return 1; else if(fptr == &comm_point_tcp_handle_callback) return 1; else if(fptr == &comm_timer_callback) return 1; else if(fptr == &comm_signal_callback) return 1; else if(fptr == &comm_point_local_handle_callback) return 1; else if(fptr == &comm_point_raw_handle_callback) return 1; else if(fptr == &tube_handle_signal) return 1; else if(fptr == &comm_base_handle_slow_accept) return 1; else if(fptr == &comm_point_http_handle_callback) return 1; #ifdef USE_DNSTAP else if(fptr == &dtio_output_cb) return 1; else if(fptr == &dtio_cmd_cb) return 1; else if(fptr == &dtio_reconnect_timeout_cb) return 1; else if(fptr == &dtio_stop_timer_cb) return 1; else if(fptr == &dtio_stop_ev_cb) return 1; else if(fptr == &dtio_tap_callback) return 1; else if(fptr == &dtio_mainfdcallback) return 1; #endif #ifdef UB_ON_WINDOWS else if(fptr == &worker_win_stop_cb) return 1; #endif return 0; } int fptr_whitelist_pending_udp(comm_point_callback_type *fptr) { if(fptr == &serviced_udp_callback) return 1; else if(fptr == &worker_handle_reply) return 1; else if(fptr == &libworker_handle_reply) return 1; return 0; } int fptr_whitelist_pending_tcp(comm_point_callback_type *fptr) { if(fptr == &serviced_tcp_callback) return 1; else if(fptr == &worker_handle_reply) return 1; else if(fptr == &libworker_handle_reply) return 1; return 0; } int fptr_whitelist_serviced_query(comm_point_callback_type *fptr) { if(fptr == &worker_handle_service_reply) return 1; else if(fptr == &libworker_handle_service_reply) return 1; return 0; } int fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) { if(fptr == &mesh_state_compare) return 1; else if(fptr == &mesh_state_ref_compare) return 1; else if(fptr == &addr_tree_compare) return 1; else if(fptr == &local_zone_cmp) return 1; else if(fptr == &local_data_cmp) return 1; else if(fptr == &fwd_cmp) return 1; else if(fptr == &pending_cmp) return 1; else if(fptr == &serviced_cmp) return 1; else if(fptr == &reuse_cmp) return 1; else if(fptr == &reuse_id_cmp) return 1; else if(fptr == &name_tree_compare) return 1; else if(fptr == &order_lock_cmp) return 1; else if(fptr == &codeline_cmp) return 1; else if(fptr == &nsec3_hash_cmp) return 1; else if(fptr == &mini_ev_cmp) return 1; else if(fptr == &anchor_cmp) return 1; else if(fptr == &canonical_tree_compare) return 1; else if(fptr == &context_query_cmp) return 1; else if(fptr == &val_neg_data_compare) return 1; else if(fptr == &val_neg_zone_compare) return 1; else if(fptr == &probetree_cmp) return 1; else if(fptr == &replay_var_compare) return 1; else if(fptr == &view_cmp) return 1; else if(fptr == &auth_zone_cmp) return 1; else if(fptr == &auth_data_cmp) return 1; else if(fptr == &auth_xfer_cmp) return 1; return 0; } int fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr) { if(fptr == &msgreply_sizefunc) return 1; else if(fptr == &ub_rrset_sizefunc) return 1; else if(fptr == &infra_sizefunc) return 1; else if(fptr == &key_entry_sizefunc) return 1; else if(fptr == &rate_sizefunc) return 1; else if(fptr == &ip_rate_sizefunc) return 1; else if(fptr == &test_slabhash_sizefunc) return 1; #ifdef CLIENT_SUBNET else if(fptr == &msg_cache_sizefunc) return 1; #endif #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_sizefunc) return 1; else if(fptr == &dnsc_nonces_sizefunc) return 1; #endif return 0; } int fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr) { if(fptr == &query_info_compare) return 1; else if(fptr == &ub_rrset_compare) return 1; else if(fptr == &infra_compfunc) return 1; else if(fptr == &key_entry_compfunc) return 1; else if(fptr == &rate_compfunc) return 1; else if(fptr == &ip_rate_compfunc) return 1; else if(fptr == &test_slabhash_compfunc) return 1; #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_compfunc) return 1; else if(fptr == &dnsc_nonces_compfunc) return 1; #endif return 0; } int fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr) { if(fptr == &query_entry_delete) return 1; else if(fptr == &ub_rrset_key_delete) return 1; else if(fptr == &infra_delkeyfunc) return 1; else if(fptr == &key_entry_delkeyfunc) return 1; else if(fptr == &rate_delkeyfunc) return 1; else if(fptr == &ip_rate_delkeyfunc) return 1; else if(fptr == &test_slabhash_delkey) return 1; #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_delkeyfunc) return 1; else if(fptr == &dnsc_nonces_delkeyfunc) return 1; #endif return 0; } int fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr) { if(fptr == &reply_info_delete) return 1; else if(fptr == &rrset_data_delete) return 1; else if(fptr == &infra_deldatafunc) return 1; else if(fptr == &key_entry_deldatafunc) return 1; else if(fptr == &rate_deldatafunc) return 1; else if(fptr == &test_slabhash_deldata) return 1; #ifdef CLIENT_SUBNET else if(fptr == &subnet_data_delete) return 1; #endif #ifdef USE_DNSCRYPT else if(fptr == &dnsc_shared_secrets_deldatafunc) return 1; else if(fptr == &dnsc_nonces_deldatafunc) return 1; #endif return 0; } int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr) { if(fptr == NULL) return 1; else if(fptr == &rrset_markdel) return 1; #ifdef CLIENT_SUBNET else if(fptr == &subnet_markdel) return 1; #endif return 0; } /** whitelist env->send_query callbacks */ int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)( struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q)) { if(fptr == &worker_send_query) return 1; else if(fptr == &libworker_send_query) return 1; return 0; } int fptr_whitelist_modenv_detach_subs(void (*fptr)( struct module_qstate* qstate)) { if(fptr == &mesh_detach_subs) return 1; return 0; } int fptr_whitelist_modenv_attach_sub(int (*fptr)( struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq)) { if(fptr == &mesh_attach_sub) return 1; return 0; } int fptr_whitelist_modenv_add_sub(int (*fptr)( struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq, struct mesh_state** sub)) { if(fptr == &mesh_add_sub) return 1; return 0; } int fptr_whitelist_modenv_kill_sub(void (*fptr)(struct module_qstate* newq)) { if(fptr == &mesh_state_delete) return 1; return 0; } int fptr_whitelist_modenv_detect_cycle(int (*fptr)( struct module_qstate* qstate, struct query_info* qinfo, uint16_t flags, int prime, int valrec)) { if(fptr == &mesh_detect_cycle) return 1; return 0; } int fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)) { if(fptr == &iter_init) return 1; else if(fptr == &val_init) return 1; else if(fptr == &dns64_init) return 1; else if(fptr == &respip_init) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_init) return 1; #endif #ifdef WITH_DYNLIBMODULE else if(fptr == &dynlibmod_init) return 1; #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_init) return 1; #endif #ifdef USE_IPSECMOD else if(fptr == &ipsecmod_init) return 1; #endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_init) return 1; #endif #ifdef USE_IPSET else if(fptr == &ipset_init) return 1; #endif return 0; } int fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)) { if(fptr == &iter_deinit) return 1; else if(fptr == &val_deinit) return 1; else if(fptr == &dns64_deinit) return 1; else if(fptr == &respip_deinit) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_deinit) return 1; #endif #ifdef WITH_DYNLIBMODULE else if(fptr == &dynlibmod_deinit) return 1; #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_deinit) return 1; #endif #ifdef USE_IPSECMOD else if(fptr == &ipsecmod_deinit) return 1; #endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_deinit) return 1; #endif #ifdef USE_IPSET else if(fptr == &ipset_deinit) return 1; #endif return 0; } int fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound)) { if(fptr == &iter_operate) return 1; else if(fptr == &val_operate) return 1; else if(fptr == &dns64_operate) return 1; else if(fptr == &respip_operate) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_operate) return 1; #endif #ifdef WITH_DYNLIBMODULE else if(fptr == &dynlibmod_operate) return 1; #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_operate) return 1; #endif #ifdef USE_IPSECMOD else if(fptr == &ipsecmod_operate) return 1; #endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_operate) return 1; #endif #ifdef USE_IPSET else if(fptr == &ipset_operate) return 1; #endif return 0; } int fptr_whitelist_mod_inform_super(void (*fptr)( struct module_qstate* qstate, int id, struct module_qstate* super)) { if(fptr == &iter_inform_super) return 1; else if(fptr == &val_inform_super) return 1; else if(fptr == &dns64_inform_super) return 1; else if(fptr == &respip_inform_super) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_inform_super) return 1; #endif #ifdef WITH_DYNLIBMODULE else if(fptr == &dynlibmod_inform_super) return 1; #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_inform_super) return 1; #endif #ifdef USE_IPSECMOD else if(fptr == &ipsecmod_inform_super) return 1; #endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_inform_super) return 1; #endif #ifdef USE_IPSET else if(fptr == &ipset_inform_super) return 1; #endif return 0; } int fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, int id)) { if(fptr == &iter_clear) return 1; else if(fptr == &val_clear) return 1; else if(fptr == &dns64_clear) return 1; else if(fptr == &respip_clear) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_clear) return 1; #endif #ifdef WITH_DYNLIBMODULE else if(fptr == &dynlibmod_clear) return 1; #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_clear) return 1; #endif #ifdef USE_IPSECMOD else if(fptr == &ipsecmod_clear) return 1; #endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_clear) return 1; #endif #ifdef USE_IPSET else if(fptr == &ipset_clear) return 1; #endif return 0; } int fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)) { if(fptr == &iter_get_mem) return 1; else if(fptr == &val_get_mem) return 1; else if(fptr == &dns64_get_mem) return 1; else if(fptr == &respip_get_mem) return 1; #ifdef WITH_PYTHONMODULE else if(fptr == &pythonmod_get_mem) return 1; #endif #ifdef WITH_DYNLIBMODULE else if(fptr == &dynlibmod_get_mem) return 1; #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_get_mem) return 1; #endif #ifdef USE_IPSECMOD else if(fptr == &ipsecmod_get_mem) return 1; #endif #ifdef CLIENT_SUBNET else if(fptr == &subnetmod_get_mem) return 1; #endif #ifdef USE_IPSET else if(fptr == &ipset_get_mem) return 1; #endif return 0; } int fptr_whitelist_alloc_cleanup(void (*fptr)(void*)) { if(fptr == &worker_alloc_cleanup) return 1; return 0; } int fptr_whitelist_tube_listen(tube_callback_type* fptr) { if(fptr == &worker_handle_control_cmd) return 1; else if(fptr == &libworker_handle_control_cmd) return 1; return 0; } int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr) { if(fptr == &libworker_fg_done_cb) return 1; else if(fptr == &libworker_bg_done_cb) return 1; else if(fptr == &libworker_event_done_cb) return 1; else if(fptr == &probe_answer_cb) return 1; else if(fptr == &auth_xfer_probe_lookup_callback) return 1; else if(fptr == &auth_xfer_transfer_lookup_callback) return 1; return 0; } int fptr_whitelist_print_func(void (*fptr)(char*,void*)) { if(fptr == &config_print_func) return 1; else if(fptr == &config_collate_func) return 1; else if(fptr == &remote_get_opt_ssl) return 1; return 0; } int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr, enum inplace_cb_list_type type) { #ifndef WITH_PYTHONMODULE (void)fptr; #endif if(type == inplace_cb_reply) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; #endif #ifdef WITH_DYNLIBMODULE if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_cache) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; #endif #ifdef WITH_DYNLIBMODULE if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_local) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; #endif #ifdef WITH_DYNLIBMODULE if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } else if(type == inplace_cb_reply_servfail) { #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_reply_generic) return 1; #endif #ifdef WITH_DYNLIBMODULE if(fptr == &dynlib_inplace_cb_reply_generic) return 1; #endif } return 0; } int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr) { #ifdef CLIENT_SUBNET if(fptr == &ecs_whitelist_check) return 1; #endif #ifdef WITH_PYTHONMODULE if(fptr == &python_inplace_cb_query_generic) return 1; #endif #ifdef WITH_DYNLIBMODULE if(fptr == &dynlib_inplace_cb_query_generic) return 1; #endif (void)fptr; return 0; } int fptr_whitelist_inplace_cb_edns_back_parsed( inplace_cb_edns_back_parsed_func_type* fptr) { #ifdef CLIENT_SUBNET if(fptr == &ecs_edns_back_parsed) return 1; #else (void)fptr; #endif #ifdef WITH_DYNLIBMODULE if(fptr == &dynlib_inplace_cb_edns_back_parsed) return 1; #endif return 0; } int fptr_whitelist_inplace_cb_query_response( inplace_cb_query_response_func_type* fptr) { #ifdef CLIENT_SUBNET if(fptr == &ecs_query_response) return 1; #else (void)fptr; #endif #ifdef WITH_DYNLIBMODULE if(fptr == &dynlib_inplace_cb_query_response) return 1; #endif return 0; } int fptr_whitelist_serve_expired_lookup(serve_expired_lookup_func_type* fptr) { if(fptr == &mesh_serve_expired_lookup) return 1; return 0; } unbound-1.13.1/util/fptr_wlist.h0000644000175000017500000003144314010434640016227 0ustar wouterwouter/* * util/fptr_wlist.h - function pointer whitelists. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions that check function pointers. * The functions contain a whitelist of known good callback values. * Any other values lead to an error. * * This prevent heap overflow based exploits, where the callback pointer * is overwritten by a buffer overflow (apart from this defense, buffer * overflows should be fixed of course). * * Function pointers are used in * o network code callbacks. * o rbtree, lruhash, region data manipulation * in lruhash, the assertions are before the critical regions. * in other places, assertions are before the callback. * o module operations. */ #ifndef UTIL_FPTR_WLIST_H #define UTIL_FPTR_WLIST_H #include "util/netevent.h" #include "util/storage/lruhash.h" #include "util/module.h" #include "util/tube.h" #include "services/mesh.h" /** * Macro to perform an assertion check for fptr wlist checks. * Does not get disabled in optimize mode. Check adds security by layers. */ #if defined(EXPORT_ALL_SYMBOLS) #define fptr_ok(x) /* nothing, dll-exe memory layout on win disables it */ #else #define fptr_ok(x) \ do { if(!(x)) \ fatal_exit("%s:%d: %s: pointer whitelist %s failed", \ __FILE__, __LINE__, __func__, #x); \ } while(0); #endif /** * Check function pointer whitelist for comm_point callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_comm_point(comm_point_callback_type *fptr); /** * Check function pointer whitelist for raw comm_point callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_comm_point_raw(comm_point_callback_type *fptr); /** * Check function pointer whitelist for comm_timer callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_comm_timer(void (*fptr)(void*)); /** * Check function pointer whitelist for comm_signal callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_comm_signal(void (*fptr)(int, void*)); /** * Check function pointer whitelist for start_accept callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_start_accept(void (*fptr)(void*)); /** * Check function pointer whitelist for stop_accept callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_stop_accept(void (*fptr)(void*)); /** * Check function pointer whitelist for event structure callback values. * This is not called by libevent itself, but checked by netevent. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_event(void (*fptr)(int, short, void *)); /** * Check function pointer whitelist for pending udp callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_pending_udp(comm_point_callback_type *fptr); /** * Check function pointer whitelist for pending tcp callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_pending_tcp(comm_point_callback_type *fptr); /** * Check function pointer whitelist for serviced query callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_serviced_query(comm_point_callback_type *fptr); /** * Check function pointer whitelist for rbtree cmp callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)); /** * Check function pointer whitelist for lruhash sizefunc callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr); /** * Check function pointer whitelist for lruhash compfunc callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr); /** * Check function pointer whitelist for lruhash delkeyfunc callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr); /** * Check function pointer whitelist for lruhash deldata callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr); /** * Check function pointer whitelist for lruhash markdel callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr); /** * Check function pointer whitelist for module_env send_query callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)( struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, int ssl_upstream, char* tls_auth_name, struct module_qstate* q)); /** * Check function pointer whitelist for module_env detach_subs callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_modenv_detach_subs(void (*fptr)( struct module_qstate* qstate)); /** * Check function pointer whitelist for module_env attach_sub callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_modenv_attach_sub(int (*fptr)( struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq)); /** * Check function pointer whitelist for module_env add_sub callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_modenv_add_sub(int (*fptr)(struct module_qstate* qstate, struct query_info* qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate** newq, struct mesh_state** sub)); /** * Check function pointer whitelist for module_env kill_sub callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_modenv_kill_sub(void (*fptr)(struct module_qstate* newq)); /** * Check function pointer whitelist for module_env detect_cycle callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_modenv_detect_cycle(int (*fptr)( struct module_qstate* qstate, struct query_info* qinfo, uint16_t flags, int prime, int valrec)); /** * Check function pointer whitelist for module init call values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)); /** * Check function pointer whitelist for module deinit call values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)); /** * Check function pointer whitelist for module operate call values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound)); /** * Check function pointer whitelist for module inform_super call values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_mod_inform_super(void (*fptr)( struct module_qstate* qstate, int id, struct module_qstate* super)); /** * Check function pointer whitelist for module clear call values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, int id)); /** * Check function pointer whitelist for module get_mem call values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)); /** * Check function pointer whitelist for alloc clear on id overflow call values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_alloc_cleanup(void (*fptr)(void*)); /** * Check function pointer whitelist for tube listen handler values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_tube_listen(tube_callback_type* fptr); /** * Check function pointer whitelist for mesh state callback values. * * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr); /** * Check function pointer whitelist for config_get_option func values. * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_print_func(void (*fptr)(char*,void*)); /** * Check function pointer whitelist for inplace_cb_reply, * inplace_cb_reply_cache, inplace_cb_reply_local and inplace_cb_reply_servfail * func values. * @param fptr: function pointer to check. * @param type: the type of the callback function. * @return false if not in whitelist. */ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr, enum inplace_cb_list_type type); /** * Check function pointer whitelist for inplace_cb_query func values. * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr); /** * Check function pointer whitelist for inplace_cb_edns_back_parsed func values. * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_inplace_cb_edns_back_parsed( inplace_cb_edns_back_parsed_func_type* fptr); /** * Check function pointer whitelist for inplace_cb_query_response func values. * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_inplace_cb_query_response( inplace_cb_query_response_func_type* fptr); /** * Check function pointer whitelist for serve_expired_lookup func values. * @param fptr: function pointer to check. * @return false if not in whitelist. */ int fptr_whitelist_serve_expired_lookup(serve_expired_lookup_func_type* fptr); /** Due to module breakage by fptr wlist, these test app declarations * are presented here */ /** * compare two order_ids from lock-verify test app * @param e1: first order_id * @param e2: second order_id * @return compare code -1, 0, +1 (like memcmp). */ int order_lock_cmp(const void* e1, const void* e2); /** * compare two codeline structs for rbtree from memstats test app * @param a: codeline * @param b: codeline * @return compare code -1, 0, +1 (like memcmp). */ int codeline_cmp(const void* a, const void* b); /** compare two replay_vars */ int replay_var_compare(const void* a, const void* b); #endif /* UTIL_FPTR_WLIST_H */ unbound-1.13.1/util/netevent.h0000644000175000017500000010466514010434640015671 0ustar wouterwouter/* * util/netevent.h - event notification * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains event notification functions. * * There are three types of communication points * o UDP socket - perthread buffer. * o TCP-accept socket - array of TCP-sockets, socketcount. * o TCP socket - own buffer, parent-TCPaccept, read/write state, * number of bytes read/written, timeout. * * There are sockets aimed towards our clients and towards the internet. * o frontside - aimed towards our clients, queries come in, answers back. * o behind - aimed towards internet, to the authoritative DNS servers. * * Several event types are available: * o comm_base - for thread safety of the comm points, one per thread. * o comm_point - udp and tcp networking, with callbacks. * o comm_timer - a timeout with callback. * o comm_signal - callbacks when signal is caught. * o comm_reply - holds reply info during networking callback. * */ #ifndef NET_EVENT_H #define NET_EVENT_H #include "dnscrypt/dnscrypt.h" #ifdef HAVE_NGHTTP2_NGHTTP2_H #include #endif struct sldns_buffer; struct comm_point; struct comm_reply; struct tcl_list; struct ub_event_base; struct mesh_state; struct mesh_area; /* internal event notification data storage structure. */ struct internal_event; struct internal_base; struct internal_timer; /* A sub struct of the comm_timer super struct */ enum listen_type; /** callback from communication point function type */ typedef int comm_point_callback_type(struct comm_point*, void*, int, struct comm_reply*); /** to pass no_error to callback function */ #define NETEVENT_NOERROR 0 /** to pass closed connection to callback function */ #define NETEVENT_CLOSED -1 /** to pass timeout happened to callback function */ #define NETEVENT_TIMEOUT -2 /** to pass fallback from capsforID to callback function; 0x20 failed */ #define NETEVENT_CAPSFAIL -3 /** to pass done transfer to callback function; http file is complete */ #define NETEVENT_DONE -4 /** to pass write of the write packet is done to callback function * used when tcp_write_and_read is enabled */ #define NETEVENT_PKT_WRITTEN -5 /** timeout to slow accept calls when not possible, in msec. */ #define NETEVENT_SLOW_ACCEPT_TIME 2000 /** * A communication point dispatcher. Thread specific. */ struct comm_base { /** behind the scenes structure. with say libevent info. alloced */ struct internal_base* eb; /** callback to stop listening on accept sockets, * performed when accept() will not function properly */ void (*stop_accept)(void*); /** callback to start listening on accept sockets, performed * after stop_accept() then a timeout has passed. */ void (*start_accept)(void*); /** user argument for stop_accept and start_accept functions */ void* cb_arg; }; /** * Reply information for a communication point. */ struct comm_reply { /** the comm_point with fd to send reply on to. */ struct comm_point* c; /** the address (for UDP based communication) */ struct sockaddr_storage addr; /** length of address */ socklen_t addrlen; /** return type 0 (none), 4(IP4), 6(IP6) */ int srctype; /* DnsCrypt context */ #ifdef USE_DNSCRYPT uint8_t client_nonce[crypto_box_HALF_NONCEBYTES]; uint8_t nmkey[crypto_box_BEFORENMBYTES]; const dnsccert *dnsc_cert; int is_dnscrypted; #endif /** the return source interface data */ union { #ifdef IPV6_PKTINFO struct in6_pktinfo v6info; #endif #ifdef IP_PKTINFO struct in_pktinfo v4info; #elif defined(IP_RECVDSTADDR) struct in_addr v4addr; #endif } /** variable with return source data */ pktinfo; /** max udp size for udp packets */ size_t max_udp_size; }; /** * Communication point to the network * These behaviours can be accomplished by setting the flags * and passing return values from the callback. * udp frontside: called after readdone. sendafter. * tcp frontside: called readdone, sendafter. close. * udp behind: called after readdone. No send after. * tcp behind: write done, read done, then called. No send after. */ struct comm_point { /** behind the scenes structure, with say libevent info. alloced. */ struct internal_event* ev; /** if the event is added or not */ int event_added; /** file descriptor for communication point */ int fd; /** timeout (NULL if it does not). Malloced. */ struct timeval* timeout; /** buffer pointer. Either to perthread, or own buffer or NULL */ struct sldns_buffer* buffer; /* -------- TCP Handler -------- */ /** Read/Write state for TCP */ int tcp_is_reading; /** The current read/write count for TCP */ size_t tcp_byte_count; /** parent communication point (for TCP sockets) */ struct comm_point* tcp_parent; /** sockaddr from peer, for TCP handlers */ struct comm_reply repinfo; /* -------- TCP Accept -------- */ /** the number of TCP handlers for this tcp-accept socket */ int max_tcp_count; /** current number of tcp handler in-use for this accept socket */ int cur_tcp_count; /** malloced array of tcp handlers for a tcp-accept, of size max_tcp_count. */ struct comm_point** tcp_handlers; /** linked list of free tcp_handlers to use for new queries. For tcp_accept the first entry, for tcp_handlers the next one. */ struct comm_point* tcp_free; /* -------- SSL TCP DNS ------- */ /** the SSL object with rw bio (owned) or for commaccept ctx ref */ void* ssl; /** handshake state for init and renegotiate */ enum { /** no handshake, it has been done */ comm_ssl_shake_none = 0, /** ssl initial handshake wants to read */ comm_ssl_shake_read, /** ssl initial handshake wants to write */ comm_ssl_shake_write, /** ssl_write wants to read */ comm_ssl_shake_hs_read, /** ssl_read wants to write */ comm_ssl_shake_hs_write } ssl_shake_state; /* -------- HTTP ------- */ /** Do not allow connection to use HTTP version lower than this. 0=no * minimum. */ enum { http_version_none = 0, http_version_2 = 2 } http_min_version; /** http endpoint */ char* http_endpoint; /* -------- HTTP/1.1 ------- */ /** Currently reading in http headers */ int http_in_headers; /** Currently reading in chunk headers, 0=not, 1=firstline, 2=unused * (more lines), 3=trailer headers after chunk */ int http_in_chunk_headers; /** chunked transfer */ int http_is_chunked; /** http temp buffer (shared buffer for temporary work) */ struct sldns_buffer* http_temp; /** http stored content in buffer */ size_t http_stored; /* -------- HTTP/2 ------- */ /** http2 session */ struct http2_session* h2_session; /** set to 1 if h2 is negotiated to be used (using alpn) */ int use_h2; /** stream currently being handled */ struct http2_stream* h2_stream; /** maximum allowed query buffer size, per stream */ size_t http2_stream_max_qbuffer_size; /** maximum number of HTTP/2 streams per connection. Send in HTTP/2 * SETTINGS frame. */ uint32_t http2_max_streams; /* -------- dnstap ------- */ /** the dnstap environment */ struct dt_env* dtenv; /** is this a UDP, TCP-accept or TCP socket. */ enum comm_point_type { /** UDP socket - handle datagrams. */ comm_udp, /** TCP accept socket - only creates handlers if readable. */ comm_tcp_accept, /** TCP handler socket - handle byteperbyte readwrite. */ comm_tcp, /** HTTP handler socket */ comm_http, /** AF_UNIX socket - for internal commands. */ comm_local, /** raw - not DNS format - for pipe readers and writers */ comm_raw } /** variable with type of socket, UDP,TCP-accept,TCP,pipe */ type; /* ---------- Behaviour ----------- */ /** if set the connection is NOT closed on delete. */ int do_not_close; /** if set, the connection is closed on error, on timeout, and after read/write completes. No callback is done. */ int tcp_do_close; /** flag that indicates the stream is both written and read from. */ int tcp_write_and_read; /** byte count for written length over write channel, for when * tcp_write_and_read is enabled. When tcp_write_and_read is enabled, * this is the counter for writing, the one for reading is in the * commpoint.buffer sldns buffer. The counter counts from 0 to * 2+tcp_write_pkt_len, and includes the tcp length bytes. */ size_t tcp_write_byte_count; /** packet to write currently over the write channel. for when * tcp_write_and_read is enabled. When tcp_write_and_read is enabled, * this is the buffer for the written packet, the commpoint.buffer * sldns buffer is the buffer for the received packet. */ uint8_t* tcp_write_pkt; /** length of tcp_write_pkt in bytes */ size_t tcp_write_pkt_len; /** if set try to read another packet again (over connection with * multiple packets), once set, tries once, then zero again, * so set it in the packet complete section. * The pointer itself has to be set before the callback is invoked, * when you set things up, and continue to exist also after the * commpoint is closed and deleted in your callback. So that after * the callback cleans up netevent can see what it has to do. * Or leave NULL if it is not used at all. */ int* tcp_more_read_again; /** if set try to write another packet (over connection with * multiple packets), once set, tries once, then zero again, * so set it in the packet complete section. * The pointer itself has to be set before the callback is invoked, * when you set things up, and continue to exist also after the * commpoint is closed and deleted in your callback. So that after * the callback cleans up netevent can see what it has to do. * Or leave NULL if it is not used at all. */ int* tcp_more_write_again; /** if set, read/write completes: read/write state of tcp is toggled. buffer reset/bytecount reset. this flag cleared. So that when that is done the callback is called. */ int tcp_do_toggle_rw; /** timeout in msec for TCP wait times for this connection */ int tcp_timeout_msec; /** if set, tcp keepalive is enabled on this connection */ int tcp_keepalive; /** if set, checks for pending error from nonblocking connect() call.*/ int tcp_check_nb_connect; /** if set, check for connection limit on tcp accept. */ struct tcl_list* tcp_conn_limit; /** the entry for the connection. */ struct tcl_addr* tcl_addr; /** the structure to keep track of open requests on this channel */ struct tcp_req_info* tcp_req_info; #ifdef USE_MSG_FASTOPEN /** used to track if the sendto() call should be done when using TFO. */ int tcp_do_fastopen; #endif #ifdef USE_DNSCRYPT /** Is this a dnscrypt channel */ int dnscrypt; /** encrypted buffer pointer. Either to perthread, or own buffer or NULL */ struct sldns_buffer* dnscrypt_buffer; #endif /** number of queries outstanding on this socket, used by * outside network for udp ports */ int inuse; /** callback when done. tcp_accept does not get called back, is NULL then. If a timeout happens, callback with timeout=1 is called. If an error happens, callback is called with error set nonzero. If not NETEVENT_NOERROR, it is an errno value. If the connection is closed (by remote end) then the callback is called with error set to NETEVENT_CLOSED=-1. If a timeout happens on the connection, the error is set to NETEVENT_TIMEOUT=-2. The reply_info can be copied if the reply needs to happen at a later time. It consists of a struct with commpoint and address. It can be passed to a msg send routine some time later. Note the reply information is temporary and must be copied. NULL is passed for_reply info, in cases where error happened. declare as: int my_callback(struct comm_point* c, void* my_arg, int error, struct comm_reply *reply_info); if the routine returns 0, nothing is done. Notzero, the buffer will be sent back to client. For UDP this is done without changing the commpoint. In TCP it sets write state. */ comm_point_callback_type* callback; /** argument to pass to callback. */ void *cb_arg; }; /** * Structure only for making timeout events. */ struct comm_timer { /** the internal event stuff (derived) */ struct internal_timer* ev_timer; /** callback function, takes user arg only */ void (*callback)(void*); /** callback user argument */ void* cb_arg; }; /** * Structure only for signal events. */ struct comm_signal { /** the communication base */ struct comm_base* base; /** the internal event stuff */ struct internal_signal* ev_signal; /** callback function, takes signal number and user arg */ void (*callback)(int, void*); /** callback user argument */ void* cb_arg; }; /** * Create a new comm base. * @param sigs: if true it attempts to create a default loop for * signal handling. * @return: the new comm base. NULL on error. */ struct comm_base* comm_base_create(int sigs); /** * Create comm base that uses the given ub_event_base (underlying pluggable * event mechanism pointer). * @param base: underlying pluggable event base. * @return: the new comm base. NULL on error. */ struct comm_base* comm_base_create_event(struct ub_event_base* base); /** * Delete comm base structure but not the underlying lib event base. * All comm points must have been deleted. * @param b: the base to delete. */ void comm_base_delete_no_base(struct comm_base* b); /** * Destroy a comm base. * All comm points must have been deleted. * @param b: the base to delete. */ void comm_base_delete(struct comm_base* b); /** * Obtain two pointers. The pointers never change (until base_delete()). * The pointers point to time values that are updated regularly. * @param b: the communication base that will update the time values. * @param tt: pointer to time in seconds is returned. * @param tv: pointer to time in microseconds is returned. */ void comm_base_timept(struct comm_base* b, time_t** tt, struct timeval** tv); /** * Dispatch the comm base events. * @param b: the communication to perform. */ void comm_base_dispatch(struct comm_base* b); /** * Exit from dispatch loop. * @param b: the communication base that is in dispatch(). */ void comm_base_exit(struct comm_base* b); /** * Set the slow_accept mode handlers. You can not provide these if you do * not perform accept() calls. * @param b: comm base * @param stop_accept: function that stops listening to accept fds. * @param start_accept: function that resumes listening to accept fds. * @param arg: callback arg to pass to the functions. */ void comm_base_set_slow_accept_handlers(struct comm_base* b, void (*stop_accept)(void*), void (*start_accept)(void*), void* arg); /** * Access internal data structure (for util/tube.c on windows) * @param b: comm base * @return ub_event_base. */ struct ub_event_base* comm_base_internal(struct comm_base* b); /** * Create an UDP comm point. Calls malloc. * setups the structure with the parameters you provide. * @param base: in which base to alloc the commpoint. * @param fd : file descriptor of open UDP socket. * @param buffer: shared buffer by UDP sockets from this thread. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. * @return: returns the allocated communication point. NULL on error. * Sets timeout to NULL. Turns off TCP options. */ struct comm_point* comm_point_create_udp(struct comm_base* base, int fd, struct sldns_buffer* buffer, comm_point_callback_type* callback, void* callback_arg); /** * Create an UDP with ancillary data comm point. Calls malloc. * Uses recvmsg instead of recv to get udp message. * setups the structure with the parameters you provide. * @param base: in which base to alloc the commpoint. * @param fd : file descriptor of open UDP socket. * @param buffer: shared buffer by UDP sockets from this thread. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. * @return: returns the allocated communication point. NULL on error. * Sets timeout to NULL. Turns off TCP options. */ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, int fd, struct sldns_buffer* buffer, comm_point_callback_type* callback, void* callback_arg); /** * Create a TCP listener comm point. Calls malloc. * Setups the structure with the parameters you provide. * Also Creates TCP Handlers, pre allocated for you. * Uses the parameters you provide. * @param base: in which base to alloc the commpoint. * @param fd: file descriptor of open TCP socket set to listen nonblocking. * @param num: becomes max_tcp_count, the routine allocates that * many tcp handler commpoints. * @param idle_timeout: TCP idle timeout in ms. * @param harden_large_queries: whether query size should be limited. * @param http_max_streams: maximum number of HTTP/2 streams per connection. * @param http_endpoint: HTTP endpoint to service queries on * @param tcp_conn_limit: TCP connection limit info. * @param bufsize: size of buffer to create for handlers. * @param spoolbuf: shared spool buffer for tcp_req_info structures. * or NULL to not create those structures in the tcp handlers. * @param port_type: the type of port we are creating a TCP listener for. Used * to select handler type to use. * @param callback: callback function pointer for TCP handlers. * @param callback_arg: will be passed to your callback function. * @return: returns the TCP listener commpoint. You can find the * TCP handlers in the array inside the listener commpoint. * returns NULL on error. * Inits timeout to NULL. All handlers are on the free list. */ struct comm_point* comm_point_create_tcp(struct comm_base* base, int fd, int num, int idle_timeout, int harden_large_queries, uint32_t http_max_streams, char* http_endpoint, struct tcl_list* tcp_conn_limit, size_t bufsize, struct sldns_buffer* spoolbuf, enum listen_type port_type, comm_point_callback_type* callback, void* callback_arg); /** * Create an outgoing TCP commpoint. No file descriptor is opened, left at -1. * @param base: in which base to alloc the commpoint. * @param bufsize: size of buffer to create for handlers. * @param callback: callback function pointer for the handler. * @param callback_arg: will be passed to your callback function. * @return: the commpoint or NULL on error. */ struct comm_point* comm_point_create_tcp_out(struct comm_base* base, size_t bufsize, comm_point_callback_type* callback, void* callback_arg); /** * Create an outgoing HTTP commpoint. No file descriptor is opened, left at -1. * @param base: in which base to alloc the commpoint. * @param bufsize: size of buffer to create for handlers. * @param callback: callback function pointer for the handler. * @param callback_arg: will be passed to your callback function. * @param temp: sldns buffer, shared between other http_out commpoints, for * temporary data when performing callbacks. * @return: the commpoint or NULL on error. */ struct comm_point* comm_point_create_http_out(struct comm_base* base, size_t bufsize, comm_point_callback_type* callback, void* callback_arg, struct sldns_buffer* temp); /** * Create commpoint to listen to a local domain file descriptor. * @param base: in which base to alloc the commpoint. * @param fd: file descriptor of open AF_UNIX socket set to listen nonblocking. * @param bufsize: size of buffer to create for handlers. * @param callback: callback function pointer for the handler. * @param callback_arg: will be passed to your callback function. * @return: the commpoint or NULL on error. */ struct comm_point* comm_point_create_local(struct comm_base* base, int fd, size_t bufsize, comm_point_callback_type* callback, void* callback_arg); /** * Create commpoint to listen to a local domain pipe descriptor. * @param base: in which base to alloc the commpoint. * @param fd: file descriptor. * @param writing: true if you want to listen to writes, false for reads. * @param callback: callback function pointer for the handler. * @param callback_arg: will be passed to your callback function. * @return: the commpoint or NULL on error. */ struct comm_point* comm_point_create_raw(struct comm_base* base, int fd, int writing, comm_point_callback_type* callback, void* callback_arg); /** * Close a comm point fd. * @param c: comm point to close. */ void comm_point_close(struct comm_point* c); /** * Close and deallocate (free) the comm point. If the comm point is * a tcp-accept point, also its tcp-handler points are deleted. * @param c: comm point to delete. */ void comm_point_delete(struct comm_point* c); /** * Send reply. Put message into commpoint buffer. * @param repinfo: The reply info copied from a commpoint callback call. */ void comm_point_send_reply(struct comm_reply* repinfo); /** * Drop reply. Cleans up. * @param repinfo: The reply info copied from a commpoint callback call. */ void comm_point_drop_reply(struct comm_reply* repinfo); /** * Send an udp message over a commpoint. * @param c: commpoint to send it from. * @param packet: what to send. * @param addr: where to send it to. If NULL, send is performed, * for connected sockets, to the connected address. * @param addrlen: length of addr. * @param is_connected: if the UDP socket is connect()ed. * @return: false on a failure. */ int comm_point_send_udp_msg(struct comm_point* c, struct sldns_buffer* packet, struct sockaddr* addr, socklen_t addrlen,int is_connected); /** * Stop listening for input on the commpoint. No callbacks will happen. * @param c: commpoint to disable. The fd is not closed. */ void comm_point_stop_listening(struct comm_point* c); /** * Start listening again for input on the comm point. * @param c: commpoint to enable again. * @param newfd: new fd, or -1 to leave fd be. * @param msec: timeout in milliseconds, or -1 for no (change to the) timeout. * So seconds*1000. */ void comm_point_start_listening(struct comm_point* c, int newfd, int msec); /** * Stop listening and start listening again for reading or writing. * @param c: commpoint * @param rd: if true, listens for reading. * @param wr: if true, listens for writing. */ void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr); /** * For TCP handlers that use c->tcp_timeout_msec, this routine adjusts * it with the minimum. Otherwise, a 0 value advertised without the * minimum applied moves to a 0 in comm_point_start_listening and that * routine treats it as no timeout, listen forever, which is not wanted. * @param c: comm point to use the tcp_timeout_msec of. * @return adjusted tcp_timeout_msec value with the minimum if smaller. */ int adjusted_tcp_timeout(struct comm_point* c); /** * Get size of memory used by comm point. * For TCP handlers this includes subhandlers. * For UDP handlers, this does not include the (shared) UDP buffer. * @param c: commpoint. * @return size in bytes. */ size_t comm_point_get_mem(struct comm_point* c); /** * create timer. Not active upon creation. * @param base: event handling base. * @param cb: callback function: void myfunc(void* myarg); * @param cb_arg: user callback argument. * @return: the new timer or NULL on error. */ struct comm_timer* comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg); /** * disable timer. Stops callbacks from happening. * @param timer: to disable. */ void comm_timer_disable(struct comm_timer* timer); /** * reset timevalue for timer. * @param timer: timer to (re)set. * @param tv: when the timer should activate. if NULL timer is disabled. */ void comm_timer_set(struct comm_timer* timer, struct timeval* tv); /** * delete timer. * @param timer: to delete. */ void comm_timer_delete(struct comm_timer* timer); /** * see if timeout has been set to a value. * @param timer: the timer to examine. * @return: false if disabled or not set. */ int comm_timer_is_set(struct comm_timer* timer); /** * Get size of memory used by comm timer. * @param timer: the timer to examine. * @return size in bytes. */ size_t comm_timer_get_mem(struct comm_timer* timer); /** * Create a signal handler. Call signal_bind() later to bind to a signal. * @param base: communication base to use. * @param callback: called when signal is caught. * @param cb_arg: user argument to callback * @return: the signal struct or NULL on error. */ struct comm_signal* comm_signal_create(struct comm_base* base, void (*callback)(int, void*), void* cb_arg); /** * Bind signal struct to catch a signal. A signle comm_signal can be bound * to multiple signals, calling comm_signal_bind multiple times. * @param comsig: the communication point, with callback information. * @param sig: signal number. * @return: true on success. false on error. */ int comm_signal_bind(struct comm_signal* comsig, int sig); /** * Delete the signal communication point. * @param comsig: to delete. */ void comm_signal_delete(struct comm_signal* comsig); /** * perform accept(2) with error checking. * @param c: commpoint with accept fd. * @param addr: remote end returned here. * @param addrlen: length of remote end returned here. * @return new fd, or -1 on error. * if -1, error message has been printed if necessary, simply drop * out of the reading handler. */ int comm_point_perform_accept(struct comm_point* c, struct sockaddr_storage* addr, socklen_t* addrlen); /**** internal routines ****/ /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for udp comm point. * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_point_udp_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for udp ancillary data comm point. * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_point_udp_ancil_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for tcp accept comm point * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_point_tcp_accept_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for tcp data comm point * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_point_tcp_handle_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for tcp data comm point * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_point_http_handle_callback(int fd, short event, void* arg); /** * HTTP2 session. HTTP2 related info per comm point. */ struct http2_session { /** first item in list of streams */ struct http2_stream* first_stream; #ifdef HAVE_NGHTTP2 /** nghttp2 session */ nghttp2_session *session; /** store nghttp2 callbacks for easy reuse */ nghttp2_session_callbacks* callbacks; #endif /** comm point containing buffer used to build answer in worker or * module */ struct comm_point* c; /** session is instructed to get dropped (comm port will be closed) */ int is_drop; /** postpone dropping the session, can be used to prevent dropping * while being in a callback */ int postpone_drop; }; /** enum of HTTP status */ enum http_status { HTTP_STATUS_OK = 200, HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_NOT_FOUND = 404, HTTP_STATUS_PAYLOAD_TOO_LARGE = 413, HTTP_STATUS_URI_TOO_LONG = 414, HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415, HTTP_STATUS_NOT_IMPLEMENTED = 501 }; /** * HTTP stream. Part of list of HTTP2 streams per session. */ struct http2_stream { /** next stream in list per session */ struct http2_stream* next; /** previous stream in list per session */ struct http2_stream* prev; /** HTTP2 stream ID is an unsigned 31-bit integer */ int32_t stream_id; /** HTTP method used for this stream */ enum { HTTP_METHOD_POST = 1, HTTP_METHOD_GET, HTTP_METHOD_UNSUPPORTED } http_method; /** message contains invalid content type */ int invalid_content_type; /** message body content type */ size_t content_length; /** HTTP response status */ enum http_status status; /** request for non existing endpoint */ int invalid_endpoint; /** query in request is too large */ int query_too_large; /** buffer to store query into. Can't use session shared buffer as query * can arrive in parts, intertwined with frames for other queries. */ struct sldns_buffer* qbuffer; /** buffer to store response into. Can't use shared buffer as a next * query read callback can overwrite it before it is send out. */ struct sldns_buffer* rbuffer; /** mesh area containing mesh state */ struct mesh_area* mesh; /** mesh state for query. Used to remove mesh reply before closing * stream. */ struct mesh_state* mesh_state; }; #ifdef HAVE_NGHTTP2 /** nghttp2 receive cb. Read from SSL connection into nghttp2 buffer */ ssize_t http2_recv_cb(nghttp2_session* session, uint8_t* buf, size_t len, int flags, void* cb_arg); /** nghttp2 send callback. Send from nghttp2 buffer to ssl socket */ ssize_t http2_send_cb(nghttp2_session* session, const uint8_t* buf, size_t len, int flags, void* cb_arg); /** nghttp2 callback on closing stream */ int http2_stream_close_cb(nghttp2_session* session, int32_t stream_id, uint32_t error_code, void* cb_arg); #endif /** * Create new http2 stream * @param stream_id: ID for stream to create. * @return malloc'ed stream, NULL on error */ struct http2_stream* http2_stream_create(int32_t stream_id); /** * Add new stream to session linked list * @param h2_session: http2 session to add stream to * @param h2_stream: stream to add to session list */ void http2_session_add_stream(struct http2_session* h2_session, struct http2_stream* h2_stream); /** Add mesh state to stream. To be able to remove mesh reply on stream closure */ void http2_stream_add_meshstate(struct http2_stream* h2_stream, struct mesh_area* mesh, struct mesh_state* m); /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for timer comm. * @param fd: file descriptor (always -1). * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_timer structure. */ void comm_timer_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * handle libevent callback for signal comm. * @param fd: file descriptor (used for the signal number). * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the internal commsignal structure. */ void comm_signal_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * libevent callback for AF_UNIX fds * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_point_local_handle_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * libevent callback for raw fd access. * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_point_raw_handle_callback(int fd, short event, void* arg); /** * This routine is published for checks and tests, and is only used internally. * libevent callback for timeout on slow accept. * @param fd: file descriptor. * @param event: event bits from libevent: * EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT. * @param arg: the comm_point structure. */ void comm_base_handle_slow_accept(int fd, short event, void* arg); #ifdef USE_WINSOCK /** * Callback for openssl BIO to on windows detect WSAEWOULDBLOCK and notify * the winsock_event of this for proper TCP nonblocking implementation. * @param c: comm_point, fd must be set its struct event is registered. * @param ssl: openssl SSL, fd must be set so it has a bio. */ void comm_point_tcp_win_bio_cb(struct comm_point* c, void* ssl); #endif /** * See if errno for tcp connect has to be logged or not. This uses errno * @param addr: apart from checking errno, the addr is checked for ip4mapped * and broadcast type, hence passed. * @param addrlen: length of the addr parameter. * @return true if it needs to be logged. */ int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen); #ifdef HAVE_SSL /** * True if the ssl handshake error has to be squelched from the logs * @param err: the error returned by the openssl routine, ERR_get_error. * This is a packed structure with elements that are examined. * @return true if the error is squelched (not logged). */ int squelch_err_ssl_handshake(unsigned long err); #endif #endif /* NET_EVENT_H */ unbound-1.13.1/util/alloc.h0000644000175000017500000002034714010434640015125 0ustar wouterwouter/* * util/alloc.h - memory allocation service. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains memory allocation functions. * * The reasons for this service are: * o Avoid locking costs of getting global lock to call malloc(). * o The packed rrset type needs to be kept on special freelists, * so that they are reused for other packet rrset allocations. * */ #ifndef UTIL_ALLOC_H #define UTIL_ALLOC_H #include "util/locks.h" struct ub_packed_rrset_key; struct regional; /** The special type, packed rrset. Not allowed to be used for other memory */ typedef struct ub_packed_rrset_key alloc_special_type; /** clean the special type. Pass pointer. */ #define alloc_special_clean(x) (x)->id = 0; /** access next pointer. (in available spot). Pass pointer. */ #define alloc_special_next(x) ((alloc_special_type*)((x)->entry.overflow_next)) /** set next pointer. (in available spot). Pass pointers. */ #define alloc_set_special_next(x, y) \ ((x)->entry.overflow_next) = (struct lruhash_entry*)(y); /** how many blocks to cache locally. */ #define ALLOC_SPECIAL_MAX 10 /** * Structure that provides allocation. Use one per thread. * The one on top has a NULL super pointer. */ struct alloc_cache { /** lock, only used for the super. */ lock_quick_type lock; /** global allocator above this one. NULL for none (malloc/free) */ struct alloc_cache* super; /** singly linked lists of special type. These are free for use. */ alloc_special_type* quar; /** number of items in quarantine. */ size_t num_quar; /** thread number for id creation */ int thread_num; /** next id number to pass out */ uint64_t next_id; /** last id number possible */ uint64_t last_id; /** what function to call to cleanup when last id is reached */ void (*cleanup)(void*); /** user arg for cleanup */ void* cleanup_arg; /** how many regional blocks to keep back max */ size_t max_reg_blocks; /** how many regional blocks are kept now */ size_t num_reg_blocks; /** linked list of regional blocks, using regional->next */ struct regional* reg_list; }; /** * Init alloc (zeroes the struct). * @param alloc: this parameter is allocated by the caller. * @param super: super to use (init that before with super_init). * Pass this argument NULL to init the toplevel alloc structure. * @param thread_num: thread number for id creation of special type. */ void alloc_init(struct alloc_cache* alloc, struct alloc_cache* super, int thread_num); /** * Free the alloc. Pushes all the cached items into the super structure. * Or deletes them if alloc->super is NULL. * Does not free the alloc struct itself (it was also allocated by caller). * @param alloc: is almost zeroed on exit (except some stats). */ void alloc_clear(struct alloc_cache* alloc); /** * Free the special alloced items. The rrset and message caches must be * empty, there must be no more references to rrset pointers into the * rrset cache. * @param alloc: the special allocs are freed. */ void alloc_clear_special(struct alloc_cache* alloc); /** * Get a new special_type element. * @param alloc: where to alloc it. * @return: memory block. Will not return NULL (instead fatal_exit). * The block is zeroed. */ alloc_special_type* alloc_special_obtain(struct alloc_cache* alloc); /** * Return special_type back to pool. * The block is cleaned up (zeroed) which also invalidates the ID inside. * @param alloc: where to alloc it. * @param mem: block to free. */ void alloc_special_release(struct alloc_cache* alloc, alloc_special_type* mem); /** * Set ID number of special type to a fresh new ID number. * In case of ID number overflow, the rrset cache has to be cleared. * @param alloc: the alloc cache * @return: fresh id is returned. */ uint64_t alloc_get_id(struct alloc_cache* alloc); /** * Get memory size of alloc cache, alloc structure including special types. * @param alloc: on what alloc. * @return size in bytes. */ size_t alloc_get_mem(struct alloc_cache* alloc); /** * Print debug information (statistics). * @param alloc: on what alloc. */ void alloc_stats(struct alloc_cache* alloc); /** * Get a new regional for query states * @param alloc: where to alloc it. * @return regional for use or NULL on alloc failure. */ struct regional* alloc_reg_obtain(struct alloc_cache* alloc); /** * Put regional for query states back into alloc cache. * @param alloc: where to alloc it. * @param r: regional to put back. */ void alloc_reg_release(struct alloc_cache* alloc, struct regional* r); /** * Set cleanup on ID overflow callback function. This should remove all * RRset ID references from the program. Clear the caches. * @param alloc: the alloc * @param cleanup: the callback function, called as cleanup(arg). * @param arg: user argument to callback function. */ void alloc_set_id_cleanup(struct alloc_cache* alloc, void (*cleanup)(void*), void* arg); #ifdef UNBOUND_ALLOC_LITE # include # include # ifdef HAVE_OPENSSL_SSL_H # include # endif # define malloc(s) unbound_stat_malloc_lite(s, __FILE__, __LINE__, __func__) # define calloc(n,s) unbound_stat_calloc_lite(n, s, __FILE__, __LINE__, __func__) # define free(p) unbound_stat_free_lite(p, __FILE__, __LINE__, __func__) # define realloc(p,s) unbound_stat_realloc_lite(p, s, __FILE__, __LINE__, __func__) void *unbound_stat_malloc_lite(size_t size, const char* file, int line, const char* func); void *unbound_stat_calloc_lite(size_t nmemb, size_t size, const char* file, int line, const char* func); void unbound_stat_free_lite(void *ptr, const char* file, int line, const char* func); void *unbound_stat_realloc_lite(void *ptr, size_t size, const char* file, int line, const char* func); # ifdef strdup # undef strdup # endif # define strdup(s) unbound_strdup_lite(s, __FILE__, __LINE__, __func__) char* unbound_strdup_lite(const char* s, const char* file, int line, const char* func); char* unbound_lite_wrapstr(char* s); # define sldns_rr2str(rr) unbound_lite_wrapstr(sldns_rr2str(rr)) # define sldns_rdf2str(rdf) unbound_lite_wrapstr(sldns_rdf2str(rdf)) # define sldns_rr_type2str(t) unbound_lite_wrapstr(sldns_rr_type2str(t)) # define sldns_rr_class2str(c) unbound_lite_wrapstr(sldns_rr_class2str(c)) # define sldns_rr_list2str(r) unbound_lite_wrapstr(sldns_rr_list2str(r)) # define sldns_pkt2str(p) unbound_lite_wrapstr(sldns_pkt2str(p)) # define sldns_pkt_rcode2str(r) unbound_lite_wrapstr(sldns_pkt_rcode2str(r)) # define sldns_pkt2wire(a, r, s) unbound_lite_pkt2wire(a, r, s) sldns_status unbound_lite_pkt2wire(uint8_t **dest, const sldns_pkt *p, size_t *size); # define i2d_DSA_SIG(d, s) unbound_lite_i2d_DSA_SIG(d, s) int unbound_lite_i2d_DSA_SIG(DSA_SIG* dsasig, unsigned char** sig); #endif /* UNBOUND_ALLOC_LITE */ #endif /* UTIL_ALLOC_H */ unbound-1.13.1/util/configlexer.lex0000644000175000017500000006610614010434640016704 0ustar wouterwouter%{ /* * configlexer.lex - lexical analyzer for unbound config file * * Copyright (c) 2001-2006, NLnet Labs. All rights reserved * * See LICENSE for the license. * */ /* because flex keeps having sign-unsigned compare problems that are unfixed*/ #if defined(__clang__)||(defined(__GNUC__)&&((__GNUC__ >4)||(defined(__GNUC_MINOR__)&&(__GNUC__ ==4)&&(__GNUC_MINOR__ >=2)))) #pragma GCC diagnostic ignored "-Wsign-compare" #endif #include #include #ifdef HAVE_GLOB_H # include #endif #include "util/config_file.h" #include "util/configparser.h" void ub_c_error(const char *message); #if 0 #define LEXOUT(s) printf s /* used ONLY when debugging */ #else #define LEXOUT(s) #endif /** avoid warning in about fwrite return value */ #define ECHO ub_c_error_msg("syntax error at text: %s", yytext) /** A parser variable, this is a statement in the config file which is * of the form variable: value1 value2 ... nargs is the number of values. */ #define YDVAR(nargs, var) \ num_args=(nargs); \ LEXOUT(("v(%s%d) ", yytext, num_args)); \ if(num_args > 0) { BEGIN(val); } \ return (var); struct inc_state { char* filename; int line; YY_BUFFER_STATE buffer; struct inc_state* next; int inc_toplevel; }; static struct inc_state* config_include_stack = NULL; static int inc_depth = 0; static int inc_prev = 0; static int num_args = 0; static int inc_toplevel = 0; void init_cfg_parse(void) { config_include_stack = NULL; inc_depth = 0; inc_prev = 0; num_args = 0; inc_toplevel = 0; } static void config_start_include(const char* filename, int toplevel) { FILE *input; struct inc_state* s; char* nm; if(inc_depth+1 > 100000) { ub_c_error_msg("too many include files"); return; } if(*filename == '\0') { ub_c_error_msg("empty include file name"); return; } s = (struct inc_state*)malloc(sizeof(*s)); if(!s) { ub_c_error_msg("include %s: malloc failure", filename); return; } if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot, strlen(cfg_parser->chroot)) == 0) { filename += strlen(cfg_parser->chroot); } nm = strdup(filename); if(!nm) { ub_c_error_msg("include %s: strdup failure", filename); free(s); return; } input = fopen(filename, "r"); if(!input) { ub_c_error_msg("cannot open include file '%s': %s", filename, strerror(errno)); free(s); free(nm); return; } LEXOUT(("switch_to_include_file(%s)\n", filename)); inc_depth++; s->filename = cfg_parser->filename; s->line = cfg_parser->line; s->buffer = YY_CURRENT_BUFFER; s->inc_toplevel = inc_toplevel; s->next = config_include_stack; config_include_stack = s; cfg_parser->filename = nm; cfg_parser->line = 1; inc_toplevel = toplevel; yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE)); } static void config_start_include_glob(const char* filename, int toplevel) { /* check for wildcards */ #ifdef HAVE_GLOB glob_t g; int i, r, flags; if(!(!strchr(filename, '*') && !strchr(filename, '?') && !strchr(filename, '[') && !strchr(filename, '{') && !strchr(filename, '~'))) { flags = 0 #ifdef GLOB_ERR | GLOB_ERR #endif /* do not set GLOB_NOSORT so the results are sorted and in a predictable order. */ #ifdef GLOB_BRACE | GLOB_BRACE #endif #ifdef GLOB_TILDE | GLOB_TILDE #endif ; memset(&g, 0, sizeof(g)); if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot, strlen(cfg_parser->chroot)) == 0) { filename += strlen(cfg_parser->chroot); } r = glob(filename, flags, NULL, &g); if(r) { /* some error */ globfree(&g); if(r == GLOB_NOMATCH) return; /* no matches for pattern */ config_start_include(filename, toplevel); /* let original deal with it */ return; } /* process files found, if any */ for(i=(int)g.gl_pathc-1; i>=0; i--) { config_start_include(g.gl_pathv[i], toplevel); } globfree(&g); return; } #endif /* HAVE_GLOB */ config_start_include(filename, toplevel); } static void config_end_include(void) { struct inc_state* s = config_include_stack; --inc_depth; if(!s) return; free(cfg_parser->filename); cfg_parser->filename = s->filename; cfg_parser->line = s->line; yy_delete_buffer(YY_CURRENT_BUFFER); yy_switch_to_buffer(s->buffer); config_include_stack = s->next; inc_toplevel = s->inc_toplevel; free(s); } #ifndef yy_set_bol /* compat definition, for flex 2.4.6 */ #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \ } #endif %} %option noinput %option nounput %{ #ifndef YY_NO_UNPUT #define YY_NO_UNPUT 1 #endif #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif %} SPACE [ \t] LETTER [a-zA-Z] UNQUOTEDLETTER [^\'\"\n\r \t\\]|\\. UNQUOTEDLETTER_NOCOLON [^\:\'\"\n\r \t\\]|\\. NEWLINE [\r\n] COMMENT \# COLON \: DQANY [^\"\n\r\\]|\\. SQANY [^\'\n\r\\]|\\. %x quotedstring singlequotedstr include include_quoted val include_toplevel include_toplevel_quoted %% {SPACE}* { LEXOUT(("SP ")); /* ignore */ } {SPACE}*{COMMENT}.* { /* note that flex makes the longest match and '.' is any but not nl */ LEXOUT(("comment(%s) ", yytext)); /* ignore */ } server{COLON} { YDVAR(0, VAR_SERVER) } qname-minimisation{COLON} { YDVAR(1, VAR_QNAME_MINIMISATION) } qname-minimisation-strict{COLON} { YDVAR(1, VAR_QNAME_MINIMISATION_STRICT) } num-threads{COLON} { YDVAR(1, VAR_NUM_THREADS) } verbosity{COLON} { YDVAR(1, VAR_VERBOSITY) } port{COLON} { YDVAR(1, VAR_PORT) } outgoing-range{COLON} { YDVAR(1, VAR_OUTGOING_RANGE) } outgoing-port-permit{COLON} { YDVAR(1, VAR_OUTGOING_PORT_PERMIT) } outgoing-port-avoid{COLON} { YDVAR(1, VAR_OUTGOING_PORT_AVOID) } outgoing-num-tcp{COLON} { YDVAR(1, VAR_OUTGOING_NUM_TCP) } incoming-num-tcp{COLON} { YDVAR(1, VAR_INCOMING_NUM_TCP) } do-ip4{COLON} { YDVAR(1, VAR_DO_IP4) } do-ip6{COLON} { YDVAR(1, VAR_DO_IP6) } prefer-ip4{COLON} { YDVAR(1, VAR_PREFER_IP4) } prefer-ip6{COLON} { YDVAR(1, VAR_PREFER_IP6) } do-udp{COLON} { YDVAR(1, VAR_DO_UDP) } do-tcp{COLON} { YDVAR(1, VAR_DO_TCP) } tcp-upstream{COLON} { YDVAR(1, VAR_TCP_UPSTREAM) } tcp-mss{COLON} { YDVAR(1, VAR_TCP_MSS) } outgoing-tcp-mss{COLON} { YDVAR(1, VAR_OUTGOING_TCP_MSS) } tcp-idle-timeout{COLON} { YDVAR(1, VAR_TCP_IDLE_TIMEOUT) } edns-tcp-keepalive{COLON} { YDVAR(1, VAR_EDNS_TCP_KEEPALIVE) } edns-tcp-keepalive-timeout{COLON} { YDVAR(1, VAR_EDNS_TCP_KEEPALIVE_TIMEOUT) } ssl-upstream{COLON} { YDVAR(1, VAR_SSL_UPSTREAM) } tls-upstream{COLON} { YDVAR(1, VAR_SSL_UPSTREAM) } ssl-service-key{COLON} { YDVAR(1, VAR_SSL_SERVICE_KEY) } tls-service-key{COLON} { YDVAR(1, VAR_SSL_SERVICE_KEY) } ssl-service-pem{COLON} { YDVAR(1, VAR_SSL_SERVICE_PEM) } tls-service-pem{COLON} { YDVAR(1, VAR_SSL_SERVICE_PEM) } ssl-port{COLON} { YDVAR(1, VAR_SSL_PORT) } tls-port{COLON} { YDVAR(1, VAR_SSL_PORT) } ssl-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } tls-cert-bundle{COLON} { YDVAR(1, VAR_TLS_CERT_BUNDLE) } tls-win-cert{COLON} { YDVAR(1, VAR_TLS_WIN_CERT) } additional-ssl-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } additional-tls-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-additional-ports{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-additional-port{COLON} { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } tls-session-ticket-keys{COLON} { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } tls-ciphers{COLON} { YDVAR(1, VAR_TLS_CIPHERS) } tls-ciphersuites{COLON} { YDVAR(1, VAR_TLS_CIPHERSUITES) } tls-use-sni{COLON} { YDVAR(1, VAR_TLS_USE_SNI) } https-port{COLON} { YDVAR(1, VAR_HTTPS_PORT) } http-endpoint{COLON} { YDVAR(1, VAR_HTTP_ENDPOINT) } http-max-streams{COLON} { YDVAR(1, VAR_HTTP_MAX_STREAMS) } http-query-buffer-size{COLON} { YDVAR(1, VAR_HTTP_QUERY_BUFFER_SIZE) } http-response-buffer-size{COLON} { YDVAR(1, VAR_HTTP_RESPONSE_BUFFER_SIZE) } http-nodelay{COLON} { YDVAR(1, VAR_HTTP_NODELAY) } http-notls-downstream{COLON} { YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) } use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) } do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) } interface{COLON} { YDVAR(1, VAR_INTERFACE) } ip-address{COLON} { YDVAR(1, VAR_INTERFACE) } outgoing-interface{COLON} { YDVAR(1, VAR_OUTGOING_INTERFACE) } interface-automatic{COLON} { YDVAR(1, VAR_INTERFACE_AUTOMATIC) } so-rcvbuf{COLON} { YDVAR(1, VAR_SO_RCVBUF) } so-sndbuf{COLON} { YDVAR(1, VAR_SO_SNDBUF) } so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) } ip-transparent{COLON} { YDVAR(1, VAR_IP_TRANSPARENT) } ip-freebind{COLON} { YDVAR(1, VAR_IP_FREEBIND) } ip-dscp{COLON} { YDVAR(1, VAR_IP_DSCP) } chroot{COLON} { YDVAR(1, VAR_CHROOT) } username{COLON} { YDVAR(1, VAR_USERNAME) } directory{COLON} { YDVAR(1, VAR_DIRECTORY) } logfile{COLON} { YDVAR(1, VAR_LOGFILE) } pidfile{COLON} { YDVAR(1, VAR_PIDFILE) } root-hints{COLON} { YDVAR(1, VAR_ROOT_HINTS) } stream-wait-size{COLON} { YDVAR(1, VAR_STREAM_WAIT_SIZE) } edns-buffer-size{COLON} { YDVAR(1, VAR_EDNS_BUFFER_SIZE) } msg-buffer-size{COLON} { YDVAR(1, VAR_MSG_BUFFER_SIZE) } msg-cache-size{COLON} { YDVAR(1, VAR_MSG_CACHE_SIZE) } msg-cache-slabs{COLON} { YDVAR(1, VAR_MSG_CACHE_SLABS) } rrset-cache-size{COLON} { YDVAR(1, VAR_RRSET_CACHE_SIZE) } rrset-cache-slabs{COLON} { YDVAR(1, VAR_RRSET_CACHE_SLABS) } cache-max-ttl{COLON} { YDVAR(1, VAR_CACHE_MAX_TTL) } cache-max-negative-ttl{COLON} { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } cache-min-ttl{COLON} { YDVAR(1, VAR_CACHE_MIN_TTL) } infra-host-ttl{COLON} { YDVAR(1, VAR_INFRA_HOST_TTL) } infra-lame-ttl{COLON} { YDVAR(1, VAR_INFRA_LAME_TTL) } infra-cache-slabs{COLON} { YDVAR(1, VAR_INFRA_CACHE_SLABS) } infra-cache-numhosts{COLON} { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } infra-cache-lame-size{COLON} { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } infra-cache-min-rtt{COLON} { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } infra-keep-probing{COLON} { YDVAR(1, VAR_INFRA_KEEP_PROBING) } num-queries-per-thread{COLON} { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } jostle-timeout{COLON} { YDVAR(1, VAR_JOSTLE_TIMEOUT) } delay-close{COLON} { YDVAR(1, VAR_DELAY_CLOSE) } udp-connect{COLON} { YDVAR(1, VAR_UDP_CONNECT) } target-fetch-policy{COLON} { YDVAR(1, VAR_TARGET_FETCH_POLICY) } harden-short-bufsize{COLON} { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } harden-large-queries{COLON} { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } harden-glue{COLON} { YDVAR(1, VAR_HARDEN_GLUE) } harden-dnssec-stripped{COLON} { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } harden-below-nxdomain{COLON} { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } harden-referral-path{COLON} { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } harden-algo-downgrade{COLON} { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } use-caps-for-id{COLON} { YDVAR(1, VAR_USE_CAPS_FOR_ID) } caps-whitelist{COLON} { YDVAR(1, VAR_CAPS_WHITELIST) } caps-exempt{COLON} { YDVAR(1, VAR_CAPS_WHITELIST) } unwanted-reply-threshold{COLON} { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } private-address{COLON} { YDVAR(1, VAR_PRIVATE_ADDRESS) } private-domain{COLON} { YDVAR(1, VAR_PRIVATE_DOMAIN) } prefetch-key{COLON} { YDVAR(1, VAR_PREFETCH_KEY) } prefetch{COLON} { YDVAR(1, VAR_PREFETCH) } deny-any{COLON} { YDVAR(1, VAR_DENY_ANY) } stub-zone{COLON} { YDVAR(0, VAR_STUB_ZONE) } name{COLON} { YDVAR(1, VAR_NAME) } stub-addr{COLON} { YDVAR(1, VAR_STUB_ADDR) } stub-host{COLON} { YDVAR(1, VAR_STUB_HOST) } stub-prime{COLON} { YDVAR(1, VAR_STUB_PRIME) } stub-first{COLON} { YDVAR(1, VAR_STUB_FIRST) } stub-no-cache{COLON} { YDVAR(1, VAR_STUB_NO_CACHE) } stub-ssl-upstream{COLON} { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } stub-tls-upstream{COLON} { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } forward-zone{COLON} { YDVAR(0, VAR_FORWARD_ZONE) } forward-addr{COLON} { YDVAR(1, VAR_FORWARD_ADDR) } forward-host{COLON} { YDVAR(1, VAR_FORWARD_HOST) } forward-first{COLON} { YDVAR(1, VAR_FORWARD_FIRST) } forward-no-cache{COLON} { YDVAR(1, VAR_FORWARD_NO_CACHE) } forward-ssl-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } forward-tls-upstream{COLON} { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } auth-zone{COLON} { YDVAR(0, VAR_AUTH_ZONE) } rpz{COLON} { YDVAR(0, VAR_RPZ) } tags{COLON} { YDVAR(1, VAR_TAGS) } rpz-action-override{COLON} { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } rpz-cname-override{COLON} { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } rpz-log{COLON} { YDVAR(1, VAR_RPZ_LOG) } rpz-log-name{COLON} { YDVAR(1, VAR_RPZ_LOG_NAME) } zonefile{COLON} { YDVAR(1, VAR_ZONEFILE) } master{COLON} { YDVAR(1, VAR_MASTER) } primary{COLON} { YDVAR(1, VAR_MASTER) } url{COLON} { YDVAR(1, VAR_URL) } allow-notify{COLON} { YDVAR(1, VAR_ALLOW_NOTIFY) } for-downstream{COLON} { YDVAR(1, VAR_FOR_DOWNSTREAM) } for-upstream{COLON} { YDVAR(1, VAR_FOR_UPSTREAM) } fallback-enabled{COLON} { YDVAR(1, VAR_FALLBACK_ENABLED) } view{COLON} { YDVAR(0, VAR_VIEW) } view-first{COLON} { YDVAR(1, VAR_VIEW_FIRST) } do-not-query-address{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } do-not-query-localhost{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } access-control{COLON} { YDVAR(2, VAR_ACCESS_CONTROL) } send-client-subnet{COLON} { YDVAR(1, VAR_SEND_CLIENT_SUBNET) } client-subnet-zone{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } client-subnet-always-forward{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } client-subnet-opcode{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } max-client-subnet-ipv4{COLON} { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } max-client-subnet-ipv6{COLON} { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } min-client-subnet-ipv4{COLON} { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } min-client-subnet-ipv6{COLON} { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } max-ecs-tree-size-ipv4{COLON} { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } max-ecs-tree-size-ipv6{COLON} { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } hide-identity{COLON} { YDVAR(1, VAR_HIDE_IDENTITY) } hide-version{COLON} { YDVAR(1, VAR_HIDE_VERSION) } hide-trustanchor{COLON} { YDVAR(1, VAR_HIDE_TRUSTANCHOR) } identity{COLON} { YDVAR(1, VAR_IDENTITY) } version{COLON} { YDVAR(1, VAR_VERSION) } module-config{COLON} { YDVAR(1, VAR_MODULE_CONF) } dlv-anchor{COLON} { YDVAR(1, VAR_DLV_ANCHOR) } dlv-anchor-file{COLON} { YDVAR(1, VAR_DLV_ANCHOR_FILE) } trust-anchor-file{COLON} { YDVAR(1, VAR_TRUST_ANCHOR_FILE) } auto-trust-anchor-file{COLON} { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } trusted-keys-file{COLON} { YDVAR(1, VAR_TRUSTED_KEYS_FILE) } trust-anchor{COLON} { YDVAR(1, VAR_TRUST_ANCHOR) } trust-anchor-signaling{COLON} { YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } root-key-sentinel{COLON} { YDVAR(1, VAR_ROOT_KEY_SENTINEL) } val-override-date{COLON} { YDVAR(1, VAR_VAL_OVERRIDE_DATE) } val-sig-skew-min{COLON} { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } val-sig-skew-max{COLON} { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } val-bogus-ttl{COLON} { YDVAR(1, VAR_BOGUS_TTL) } val-clean-additional{COLON} { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } val-permissive-mode{COLON} { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } aggressive-nsec{COLON} { YDVAR(1, VAR_AGGRESSIVE_NSEC) } ignore-cd-flag{COLON} { YDVAR(1, VAR_IGNORE_CD_FLAG) } serve-expired{COLON} { YDVAR(1, VAR_SERVE_EXPIRED) } serve-expired-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL) } serve-expired-ttl-reset{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } serve-expired-reply-ttl{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } serve-expired-client-timeout{COLON} { YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } serve-original-ttl{COLON} { YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } fake-dsa{COLON} { YDVAR(1, VAR_FAKE_DSA) } fake-sha1{COLON} { YDVAR(1, VAR_FAKE_SHA1) } val-log-level{COLON} { YDVAR(1, VAR_VAL_LOG_LEVEL) } key-cache-size{COLON} { YDVAR(1, VAR_KEY_CACHE_SIZE) } key-cache-slabs{COLON} { YDVAR(1, VAR_KEY_CACHE_SLABS) } neg-cache-size{COLON} { YDVAR(1, VAR_NEG_CACHE_SIZE) } val-nsec3-keysize-iterations{COLON} { YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } add-holddown{COLON} { YDVAR(1, VAR_ADD_HOLDDOWN) } del-holddown{COLON} { YDVAR(1, VAR_DEL_HOLDDOWN) } keep-missing{COLON} { YDVAR(1, VAR_KEEP_MISSING) } permit-small-holddown{COLON} { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } use-syslog{COLON} { YDVAR(1, VAR_USE_SYSLOG) } log-identity{COLON} { YDVAR(1, VAR_LOG_IDENTITY) } log-time-ascii{COLON} { YDVAR(1, VAR_LOG_TIME_ASCII) } log-queries{COLON} { YDVAR(1, VAR_LOG_QUERIES) } log-replies{COLON} { YDVAR(1, VAR_LOG_REPLIES) } log-tag-queryreply{COLON} { YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } log-local-actions{COLON} { YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } log-servfail{COLON} { YDVAR(1, VAR_LOG_SERVFAIL) } local-zone{COLON} { YDVAR(2, VAR_LOCAL_ZONE) } local-data{COLON} { YDVAR(1, VAR_LOCAL_DATA) } local-data-ptr{COLON} { YDVAR(1, VAR_LOCAL_DATA_PTR) } unblock-lan-zones{COLON} { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } insecure-lan-zones{COLON} { YDVAR(1, VAR_INSECURE_LAN_ZONES) } statistics-interval{COLON} { YDVAR(1, VAR_STATISTICS_INTERVAL) } statistics-cumulative{COLON} { YDVAR(1, VAR_STATISTICS_CUMULATIVE) } extended-statistics{COLON} { YDVAR(1, VAR_EXTENDED_STATISTICS) } shm-enable{COLON} { YDVAR(1, VAR_SHM_ENABLE) } shm-key{COLON} { YDVAR(1, VAR_SHM_KEY) } remote-control{COLON} { YDVAR(0, VAR_REMOTE_CONTROL) } control-enable{COLON} { YDVAR(1, VAR_CONTROL_ENABLE) } control-interface{COLON} { YDVAR(1, VAR_CONTROL_INTERFACE) } control-port{COLON} { YDVAR(1, VAR_CONTROL_PORT) } control-use-cert{COLON} { YDVAR(1, VAR_CONTROL_USE_CERT) } server-key-file{COLON} { YDVAR(1, VAR_SERVER_KEY_FILE) } server-cert-file{COLON} { YDVAR(1, VAR_SERVER_CERT_FILE) } control-key-file{COLON} { YDVAR(1, VAR_CONTROL_KEY_FILE) } control-cert-file{COLON} { YDVAR(1, VAR_CONTROL_CERT_FILE) } python-script{COLON} { YDVAR(1, VAR_PYTHON_SCRIPT) } python{COLON} { YDVAR(0, VAR_PYTHON) } dynlib-file{COLON} { YDVAR(1, VAR_DYNLIB_FILE) } dynlib{COLON} { YDVAR(0, VAR_DYNLIB) } domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) } minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) } rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) } unknown-server-time-limit{COLON} { YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } max-udp-size{COLON} { YDVAR(1, VAR_MAX_UDP_SIZE) } dns64-prefix{COLON} { YDVAR(1, VAR_DNS64_PREFIX) } dns64-synthall{COLON} { YDVAR(1, VAR_DNS64_SYNTHALL) } dns64-ignore-aaaa{COLON} { YDVAR(1, VAR_DNS64_IGNORE_AAAA) } define-tag{COLON} { YDVAR(1, VAR_DEFINE_TAG) } local-zone-tag{COLON} { YDVAR(2, VAR_LOCAL_ZONE_TAG) } access-control-tag{COLON} { YDVAR(2, VAR_ACCESS_CONTROL_TAG) } access-control-tag-action{COLON} { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } access-control-tag-data{COLON} { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } access-control-view{COLON} { YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } local-zone-override{COLON} { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } dnstap{COLON} { YDVAR(0, VAR_DNSTAP) } dnstap-enable{COLON} { YDVAR(1, VAR_DNSTAP_ENABLE) } dnstap-bidirectional{COLON} { YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } dnstap-socket-path{COLON} { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } dnstap-ip{COLON} { YDVAR(1, VAR_DNSTAP_IP) } dnstap-tls{COLON} { YDVAR(1, VAR_DNSTAP_TLS) } dnstap-tls-server-name{COLON} { YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } dnstap-tls-cert-bundle{COLON} { YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } dnstap-tls-client-key-file{COLON} { YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } dnstap-tls-client-cert-file{COLON} { YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } dnstap-send-identity{COLON} { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } dnstap-send-version{COLON} { YDVAR(1, VAR_DNSTAP_SEND_VERSION) } dnstap-identity{COLON} { YDVAR(1, VAR_DNSTAP_IDENTITY) } dnstap-version{COLON} { YDVAR(1, VAR_DNSTAP_VERSION) } dnstap-log-resolver-query-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } dnstap-log-resolver-response-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } dnstap-log-client-query-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } dnstap-log-client-response-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } dnstap-log-forwarder-query-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } dnstap-log-forwarder-response-messages{COLON} { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } disable-dnssec-lame-check{COLON} { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } ip-ratelimit{COLON} { YDVAR(1, VAR_IP_RATELIMIT) } ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) } ip-ratelimit-slabs{COLON} { YDVAR(1, VAR_IP_RATELIMIT_SLABS) } ratelimit-slabs{COLON} { YDVAR(1, VAR_RATELIMIT_SLABS) } ip-ratelimit-size{COLON} { YDVAR(1, VAR_IP_RATELIMIT_SIZE) } ratelimit-size{COLON} { YDVAR(1, VAR_RATELIMIT_SIZE) } ratelimit-for-domain{COLON} { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } ratelimit-below-domain{COLON} { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } ip-ratelimit-factor{COLON} { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) } low-rtt{COLON} { YDVAR(1, VAR_LOW_RTT) } fast-server-num{COLON} { YDVAR(1, VAR_FAST_SERVER_NUM) } low-rtt-pct{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) } low-rtt-permil{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) } fast-server-permil{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) } response-ip-tag{COLON} { YDVAR(2, VAR_RESPONSE_IP_TAG) } response-ip{COLON} { YDVAR(2, VAR_RESPONSE_IP) } response-ip-data{COLON} { YDVAR(2, VAR_RESPONSE_IP_DATA) } dnscrypt{COLON} { YDVAR(0, VAR_DNSCRYPT) } dnscrypt-enable{COLON} { YDVAR(1, VAR_DNSCRYPT_ENABLE) } dnscrypt-port{COLON} { YDVAR(1, VAR_DNSCRYPT_PORT) } dnscrypt-provider{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER) } dnscrypt-secret-key{COLON} { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } dnscrypt-provider-cert{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } dnscrypt-provider-cert-rotated{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } dnscrypt-shared-secret-cache-size{COLON} { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } dnscrypt-shared-secret-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } dnscrypt-nonce-cache-size{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } dnscrypt-nonce-cache-slabs{COLON} { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } pad-responses{COLON} { YDVAR(1, VAR_PAD_RESPONSES) } pad-responses-block-size{COLON} { YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } pad-queries{COLON} { YDVAR(1, VAR_PAD_QUERIES) } pad-queries-block-size{COLON} { YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } ipsecmod-enabled{COLON} { YDVAR(1, VAR_IPSECMOD_ENABLED) } ipsecmod-ignore-bogus{COLON} { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } ipsecmod-hook{COLON} { YDVAR(1, VAR_IPSECMOD_HOOK) } ipsecmod-max-ttl{COLON} { YDVAR(1, VAR_IPSECMOD_MAX_TTL) } ipsecmod-whitelist{COLON} { YDVAR(1, VAR_IPSECMOD_WHITELIST) } ipsecmod-allow{COLON} { YDVAR(1, VAR_IPSECMOD_WHITELIST) } ipsecmod-strict{COLON} { YDVAR(1, VAR_IPSECMOD_STRICT) } cachedb{COLON} { YDVAR(0, VAR_CACHEDB) } backend{COLON} { YDVAR(1, VAR_CACHEDB_BACKEND) } secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) } redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) } redis-timeout{COLON} { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } redis-expire-records{COLON} { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } ipset{COLON} { YDVAR(0, VAR_IPSET) } name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) } edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } nsid{COLON} { YDVAR(1, VAR_NSID ) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ \" { BEGIN(quotedstring); LEXOUT(("QS ")); } <> { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } {DQANY}* { LEXOUT(("STR(%s) ", yytext)); yymore(); } {NEWLINE} { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } \" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } yytext[yyleng - 1] = '\0'; yylval.str = strdup(yytext); if(!yylval.str) yyerror("out of memory"); return STRING_ARG; } /* Single Quoted strings. Strip leading and ending quotes */ \' { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } <> { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } {SQANY}* { LEXOUT(("STR(%s) ", yytext)); yymore(); } {NEWLINE} { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } \' { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } yytext[yyleng - 1] = '\0'; yylval.str = strdup(yytext); if(!yylval.str) yyerror("out of memory"); return STRING_ARG; } /* include: directive */ include{COLON} { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } <> { yyerror("EOF inside include directive"); BEGIN(inc_prev); } {SPACE}* { LEXOUT(("ISP ")); /* ignore */ } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++;} \" { LEXOUT(("IQS ")); BEGIN(include_quoted); } {UNQUOTEDLETTER}* { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); BEGIN(inc_prev); } <> { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } {DQANY}* { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } {NEWLINE} { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } \" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; config_start_include_glob(yytext, 0); BEGIN(inc_prev); } <> { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ if (!config_include_stack) { yyterminate(); } else { int prev_toplevel = inc_toplevel; fclose(yyin); config_end_include(); if(prev_toplevel) return (VAR_FORCE_TOPLEVEL); } } /* include-toplevel: directive */ include-toplevel{COLON} { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } <> { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } {SPACE}* { LEXOUT(("ITSP ")); /* ignore */ } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } \" { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } {UNQUOTEDLETTER}* { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); BEGIN(inc_prev); return (VAR_FORCE_TOPLEVEL); } <> { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } {DQANY}* { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } {NEWLINE} { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } \" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; config_start_include_glob(yytext, 1); BEGIN(inc_prev); return (VAR_FORCE_TOPLEVEL); } {UNQUOTEDLETTER}* { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } {UNQUOTEDLETTER_NOCOLON}* { ub_c_error_msg("unknown keyword '%s'", yytext); } <*>. { ub_c_error_msg("stray '%s'", yytext); } %% unbound-1.13.1/util/tube.c0000644000175000017500000004333214010434640014764 0ustar wouterwouter/* * util/tube.c - pipe service * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains pipe service functions. */ #include "config.h" #include "util/tube.h" #include "util/log.h" #include "util/net_help.h" #include "util/netevent.h" #include "util/fptr_wlist.h" #include "util/ub_event.h" #ifndef USE_WINSOCK /* on unix */ #ifndef HAVE_SOCKETPAIR /** no socketpair() available, like on Minix 3.1.7, use pipe */ #define socketpair(f, t, p, sv) pipe(sv) #endif /* HAVE_SOCKETPAIR */ struct tube* tube_create(void) { struct tube* tube = (struct tube*)calloc(1, sizeof(*tube)); int sv[2]; if(!tube) { int err = errno; log_err("tube_create: out of memory"); errno = err; return NULL; } tube->sr = -1; tube->sw = -1; if(socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == -1) { int err = errno; log_err("socketpair: %s", strerror(errno)); free(tube); errno = err; return NULL; } tube->sr = sv[0]; tube->sw = sv[1]; if(!fd_set_nonblock(tube->sr) || !fd_set_nonblock(tube->sw)) { int err = errno; log_err("tube: cannot set nonblocking"); tube_delete(tube); errno = err; return NULL; } return tube; } void tube_delete(struct tube* tube) { if(!tube) return; tube_remove_bg_listen(tube); tube_remove_bg_write(tube); /* close fds after deleting commpoints, to be sure. * Also epoll does not like closing fd before event_del */ tube_close_read(tube); tube_close_write(tube); free(tube); } void tube_close_read(struct tube* tube) { if(tube->sr != -1) { close(tube->sr); tube->sr = -1; } } void tube_close_write(struct tube* tube) { if(tube->sw != -1) { close(tube->sw); tube->sw = -1; } } void tube_remove_bg_listen(struct tube* tube) { if(tube->listen_com) { comm_point_delete(tube->listen_com); tube->listen_com = NULL; } free(tube->cmd_msg); tube->cmd_msg = NULL; } void tube_remove_bg_write(struct tube* tube) { if(tube->res_com) { comm_point_delete(tube->res_com); tube->res_com = NULL; } if(tube->res_list) { struct tube_res_list* np, *p = tube->res_list; tube->res_list = NULL; tube->res_last = NULL; while(p) { np = p->next; free(p->buf); free(p); p = np; } } } int tube_handle_listen(struct comm_point* c, void* arg, int error, struct comm_reply* ATTR_UNUSED(reply_info)) { struct tube* tube = (struct tube*)arg; ssize_t r; if(error != NETEVENT_NOERROR) { fptr_ok(fptr_whitelist_tube_listen(tube->listen_cb)); (*tube->listen_cb)(tube, NULL, 0, error, tube->listen_arg); return 0; } if(tube->cmd_read < sizeof(tube->cmd_len)) { /* complete reading the length of control msg */ r = read(c->fd, ((uint8_t*)&tube->cmd_len) + tube->cmd_read, sizeof(tube->cmd_len) - tube->cmd_read); if(r==0) { /* error has happened or */ /* parent closed pipe, must have exited somehow */ fptr_ok(fptr_whitelist_tube_listen(tube->listen_cb)); (*tube->listen_cb)(tube, NULL, 0, NETEVENT_CLOSED, tube->listen_arg); return 0; } if(r==-1) { if(errno != EAGAIN && errno != EINTR) { log_err("rpipe error: %s", strerror(errno)); } /* nothing to read now, try later */ return 0; } tube->cmd_read += r; if(tube->cmd_read < sizeof(tube->cmd_len)) { /* not complete, try later */ return 0; } tube->cmd_msg = (uint8_t*)calloc(1, tube->cmd_len); if(!tube->cmd_msg) { log_err("malloc failure"); tube->cmd_read = 0; return 0; } } /* cmd_len has been read, read remainder */ r = read(c->fd, tube->cmd_msg+tube->cmd_read-sizeof(tube->cmd_len), tube->cmd_len - (tube->cmd_read - sizeof(tube->cmd_len))); if(r==0) { /* error has happened or */ /* parent closed pipe, must have exited somehow */ fptr_ok(fptr_whitelist_tube_listen(tube->listen_cb)); (*tube->listen_cb)(tube, NULL, 0, NETEVENT_CLOSED, tube->listen_arg); return 0; } if(r==-1) { /* nothing to read now, try later */ if(errno != EAGAIN && errno != EINTR) { log_err("rpipe error: %s", strerror(errno)); } return 0; } tube->cmd_read += r; if(tube->cmd_read < sizeof(tube->cmd_len) + tube->cmd_len) { /* not complete, try later */ return 0; } tube->cmd_read = 0; fptr_ok(fptr_whitelist_tube_listen(tube->listen_cb)); (*tube->listen_cb)(tube, tube->cmd_msg, tube->cmd_len, NETEVENT_NOERROR, tube->listen_arg); /* also frees the buf */ tube->cmd_msg = NULL; return 0; } int tube_handle_write(struct comm_point* c, void* arg, int error, struct comm_reply* ATTR_UNUSED(reply_info)) { struct tube* tube = (struct tube*)arg; struct tube_res_list* item = tube->res_list; ssize_t r; if(error != NETEVENT_NOERROR) { log_err("tube_handle_write net error %d", error); return 0; } if(!item) { comm_point_stop_listening(c); return 0; } if(tube->res_write < sizeof(item->len)) { r = write(c->fd, ((uint8_t*)&item->len) + tube->res_write, sizeof(item->len) - tube->res_write); if(r == -1) { if(errno != EAGAIN && errno != EINTR) { log_err("wpipe error: %s", strerror(errno)); } return 0; /* try again later */ } if(r == 0) { /* error on pipe, must have exited somehow */ /* cannot signal this to pipe user */ return 0; } tube->res_write += r; if(tube->res_write < sizeof(item->len)) return 0; } r = write(c->fd, item->buf + tube->res_write - sizeof(item->len), item->len - (tube->res_write - sizeof(item->len))); if(r == -1) { if(errno != EAGAIN && errno != EINTR) { log_err("wpipe error: %s", strerror(errno)); } return 0; /* try again later */ } if(r == 0) { /* error on pipe, must have exited somehow */ /* cannot signal this to pipe user */ return 0; } tube->res_write += r; if(tube->res_write < sizeof(item->len) + item->len) return 0; /* done this result, remove it */ free(item->buf); item->buf = NULL; tube->res_list = tube->res_list->next; free(item); if(!tube->res_list) { tube->res_last = NULL; comm_point_stop_listening(c); } tube->res_write = 0; return 0; } int tube_write_msg(struct tube* tube, uint8_t* buf, uint32_t len, int nonblock) { ssize_t r, d; int fd = tube->sw; /* test */ if(nonblock) { r = write(fd, &len, sizeof(len)); if(r == -1) { if(errno==EINTR || errno==EAGAIN) return -1; log_err("tube msg write failed: %s", strerror(errno)); return -1; /* can still continue, perhaps */ } } else r = 0; if(!fd_set_block(fd)) return 0; /* write remainder */ d = r; while(d != (ssize_t)sizeof(len)) { if((r=write(fd, ((char*)&len)+d, sizeof(len)-d)) == -1) { if(errno == EAGAIN) continue; /* temporarily unavail: try again*/ log_err("tube msg write failed: %s", strerror(errno)); (void)fd_set_nonblock(fd); return 0; } d += r; } d = 0; while(d != (ssize_t)len) { if((r=write(fd, buf+d, len-d)) == -1) { if(errno == EAGAIN) continue; /* temporarily unavail: try again*/ log_err("tube msg write failed: %s", strerror(errno)); (void)fd_set_nonblock(fd); return 0; } d += r; } if(!fd_set_nonblock(fd)) return 0; return 1; } int tube_read_msg(struct tube* tube, uint8_t** buf, uint32_t* len, int nonblock) { ssize_t r, d; int fd = tube->sr; /* test */ *len = 0; if(nonblock) { r = read(fd, len, sizeof(*len)); if(r == -1) { if(errno==EINTR || errno==EAGAIN) return -1; log_err("tube msg read failed: %s", strerror(errno)); return -1; /* we can still continue, perhaps */ } if(r == 0) /* EOF */ return 0; } else r = 0; if(!fd_set_block(fd)) return 0; /* read remainder */ d = r; while(d != (ssize_t)sizeof(*len)) { if((r=read(fd, ((char*)len)+d, sizeof(*len)-d)) == -1) { log_err("tube msg read failed: %s", strerror(errno)); (void)fd_set_nonblock(fd); return 0; } if(r == 0) /* EOF */ { (void)fd_set_nonblock(fd); return 0; } d += r; } log_assert(*len < 65536*2); *buf = (uint8_t*)malloc(*len); if(!*buf) { log_err("tube read out of memory"); (void)fd_set_nonblock(fd); return 0; } d = 0; while(d < (ssize_t)*len) { if((r=read(fd, (*buf)+d, (size_t)((ssize_t)*len)-d)) == -1) { log_err("tube msg read failed: %s", strerror(errno)); (void)fd_set_nonblock(fd); free(*buf); return 0; } if(r == 0) { /* EOF */ (void)fd_set_nonblock(fd); free(*buf); return 0; } d += r; } if(!fd_set_nonblock(fd)) { free(*buf); return 0; } return 1; } /** perform a select() on the fd */ static int pollit(int fd, struct timeval* t) { fd_set r; #ifndef S_SPLINT_S FD_ZERO(&r); FD_SET(FD_SET_T fd, &r); #endif if(select(fd+1, &r, NULL, NULL, t) == -1) { return 0; } errno = 0; return (int)(FD_ISSET(fd, &r)); } int tube_poll(struct tube* tube) { struct timeval t; memset(&t, 0, sizeof(t)); return pollit(tube->sr, &t); } int tube_wait(struct tube* tube) { return pollit(tube->sr, NULL); } int tube_read_fd(struct tube* tube) { return tube->sr; } int tube_setup_bg_listen(struct tube* tube, struct comm_base* base, tube_callback_type* cb, void* arg) { tube->listen_cb = cb; tube->listen_arg = arg; if(!(tube->listen_com = comm_point_create_raw(base, tube->sr, 0, tube_handle_listen, tube))) { int err = errno; log_err("tube_setup_bg_l: commpoint creation failed"); errno = err; return 0; } return 1; } int tube_setup_bg_write(struct tube* tube, struct comm_base* base) { if(!(tube->res_com = comm_point_create_raw(base, tube->sw, 1, tube_handle_write, tube))) { int err = errno; log_err("tube_setup_bg_w: commpoint creation failed"); errno = err; return 0; } return 1; } int tube_queue_item(struct tube* tube, uint8_t* msg, size_t len) { struct tube_res_list* item; if(!tube || !tube->res_com) return 0; item = (struct tube_res_list*)malloc(sizeof(*item)); if(!item) { free(msg); log_err("out of memory for async answer"); return 0; } item->buf = msg; item->len = len; item->next = NULL; /* add at back of list, since the first one may be partially written */ if(tube->res_last) tube->res_last->next = item; else tube->res_list = item; tube->res_last = item; if(tube->res_list == tube->res_last) { /* first added item, start the write process */ comm_point_start_listening(tube->res_com, -1, -1); } return 1; } void tube_handle_signal(int ATTR_UNUSED(fd), short ATTR_UNUSED(events), void* ATTR_UNUSED(arg)) { log_assert(0); } #else /* USE_WINSOCK */ /* on windows */ struct tube* tube_create(void) { /* windows does not have forks like unix, so we only support * threads on windows. And thus the pipe need only connect * threads. We use a mutex and a list of datagrams. */ struct tube* tube = (struct tube*)calloc(1, sizeof(*tube)); if(!tube) { int err = errno; log_err("tube_create: out of memory"); errno = err; return NULL; } tube->event = WSACreateEvent(); if(tube->event == WSA_INVALID_EVENT) { free(tube); log_err("WSACreateEvent: %s", wsa_strerror(WSAGetLastError())); } if(!WSAResetEvent(tube->event)) { log_err("WSAResetEvent: %s", wsa_strerror(WSAGetLastError())); } lock_basic_init(&tube->res_lock); verbose(VERB_ALGO, "tube created"); return tube; } void tube_delete(struct tube* tube) { if(!tube) return; tube_remove_bg_listen(tube); tube_remove_bg_write(tube); tube_close_read(tube); tube_close_write(tube); if(!WSACloseEvent(tube->event)) log_err("WSACloseEvent: %s", wsa_strerror(WSAGetLastError())); lock_basic_destroy(&tube->res_lock); verbose(VERB_ALGO, "tube deleted"); free(tube); } void tube_close_read(struct tube* ATTR_UNUSED(tube)) { verbose(VERB_ALGO, "tube close_read"); } void tube_close_write(struct tube* ATTR_UNUSED(tube)) { verbose(VERB_ALGO, "tube close_write"); /* wake up waiting reader with an empty queue */ if(!WSASetEvent(tube->event)) { log_err("WSASetEvent: %s", wsa_strerror(WSAGetLastError())); } } void tube_remove_bg_listen(struct tube* tube) { verbose(VERB_ALGO, "tube remove_bg_listen"); ub_winsock_unregister_wsaevent(tube->ev_listen); } void tube_remove_bg_write(struct tube* tube) { verbose(VERB_ALGO, "tube remove_bg_write"); if(tube->res_list) { struct tube_res_list* np, *p = tube->res_list; tube->res_list = NULL; tube->res_last = NULL; while(p) { np = p->next; free(p->buf); free(p); p = np; } } } int tube_write_msg(struct tube* tube, uint8_t* buf, uint32_t len, int ATTR_UNUSED(nonblock)) { uint8_t* a; verbose(VERB_ALGO, "tube write_msg len %d", (int)len); a = (uint8_t*)memdup(buf, len); if(!a) { log_err("out of memory in tube_write_msg"); return 0; } /* always nonblocking, this pipe cannot get full */ return tube_queue_item(tube, a, len); } int tube_read_msg(struct tube* tube, uint8_t** buf, uint32_t* len, int nonblock) { struct tube_res_list* item = NULL; verbose(VERB_ALGO, "tube read_msg %s", nonblock?"nonblock":"blocking"); *buf = NULL; if(!tube_poll(tube)) { verbose(VERB_ALGO, "tube read_msg nodata"); /* nothing ready right now, wait if we want to */ if(nonblock) return -1; /* would block waiting for items */ if(!tube_wait(tube)) return 0; } lock_basic_lock(&tube->res_lock); if(tube->res_list) { item = tube->res_list; tube->res_list = item->next; if(tube->res_last == item) { /* the list is now empty */ tube->res_last = NULL; verbose(VERB_ALGO, "tube read_msg lastdata"); if(!WSAResetEvent(tube->event)) { log_err("WSAResetEvent: %s", wsa_strerror(WSAGetLastError())); } } } lock_basic_unlock(&tube->res_lock); if(!item) return 0; /* would block waiting for items */ *buf = item->buf; *len = item->len; free(item); verbose(VERB_ALGO, "tube read_msg len %d", (int)*len); return 1; } int tube_poll(struct tube* tube) { struct tube_res_list* item = NULL; lock_basic_lock(&tube->res_lock); item = tube->res_list; lock_basic_unlock(&tube->res_lock); if(item) return 1; return 0; } int tube_wait(struct tube* tube) { /* block on eventhandle */ DWORD res = WSAWaitForMultipleEvents( 1 /* one event in array */, &tube->event /* the event to wait for, our pipe signal */, 0 /* wait for all events is false */, WSA_INFINITE /* wait, no timeout */, 0 /* we are not alertable for IO completion routines */ ); if(res == WSA_WAIT_TIMEOUT) { return 0; } if(res == WSA_WAIT_IO_COMPLETION) { /* a bit unexpected, since we were not alertable */ return 0; } return 1; } int tube_read_fd(struct tube* ATTR_UNUSED(tube)) { /* nothing sensible on Windows */ return -1; } int tube_handle_listen(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int tube_handle_write(struct comm_point* ATTR_UNUSED(c), void* ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply* ATTR_UNUSED(reply_info)) { log_assert(0); return 0; } int tube_setup_bg_listen(struct tube* tube, struct comm_base* base, tube_callback_type* cb, void* arg) { tube->listen_cb = cb; tube->listen_arg = arg; if(!comm_base_internal(base)) return 1; /* ignore when no comm base - testing */ tube->ev_listen = ub_winsock_register_wsaevent( comm_base_internal(base), tube->event, &tube_handle_signal, tube); return tube->ev_listen ? 1 : 0; } int tube_setup_bg_write(struct tube* ATTR_UNUSED(tube), struct comm_base* ATTR_UNUSED(base)) { /* the queue item routine performs the signaling */ return 1; } int tube_queue_item(struct tube* tube, uint8_t* msg, size_t len) { struct tube_res_list* item; if(!tube) return 0; item = (struct tube_res_list*)malloc(sizeof(*item)); verbose(VERB_ALGO, "tube queue_item len %d", (int)len); if(!item) { free(msg); log_err("out of memory for async answer"); return 0; } item->buf = msg; item->len = len; item->next = NULL; lock_basic_lock(&tube->res_lock); /* add at back of list, since the first one may be partially written */ if(tube->res_last) tube->res_last->next = item; else tube->res_list = item; tube->res_last = item; /* signal the eventhandle */ if(!WSASetEvent(tube->event)) { log_err("WSASetEvent: %s", wsa_strerror(WSAGetLastError())); } lock_basic_unlock(&tube->res_lock); return 1; } void tube_handle_signal(int ATTR_UNUSED(fd), short ATTR_UNUSED(events), void* arg) { struct tube* tube = (struct tube*)arg; uint8_t* buf; uint32_t len = 0; verbose(VERB_ALGO, "tube handle_signal"); while(tube_poll(tube)) { if(tube_read_msg(tube, &buf, &len, 1)) { fptr_ok(fptr_whitelist_tube_listen(tube->listen_cb)); (*tube->listen_cb)(tube, buf, len, NETEVENT_NOERROR, tube->listen_arg); } } } #endif /* USE_WINSOCK */ unbound-1.13.1/util/tcp_conn_limit.h0000644000175000017500000000760114010434640017032 0ustar wouterwouter/* * daemon/tcp_conn_limit.h - client TCP connection limit storage for the server. * * Copyright (c) 2018, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file keeps track of the limit on the number of TCP connections * each client makes the server. */ #ifndef DAEMON_TCP_CONN_LIMIT_H #define DAEMON_TCP_CONN_LIMIT_H #include "util/storage/dnstree.h" #include "util/locks.h" struct config_file; struct regional; /** * TCP connection limit storage structure */ struct tcl_list { /** regional for allocation */ struct regional* region; /** * Tree of the addresses that are TCP connection limited. * contents of type tcl_addr. */ rbtree_type tree; }; /** * * An address span with connection limit information */ struct tcl_addr { /** node in address tree */ struct addr_tree_node node; /** lock on structure data */ lock_quick_type lock; /** connection limit on this netblock */ uint32_t limit; /** current connection count on this netblock */ uint32_t count; }; /** * Create TCP connection limit structure * @return new structure or NULL on error. */ struct tcl_list* tcl_list_create(void); /** * Delete TCP connection limit structure. * @param tcl: to delete. */ void tcl_list_delete(struct tcl_list* tcl); /** * Process TCP connection limit config. * @param tcl: where to store. * @param cfg: config options. * @return 0 on error. */ int tcl_list_apply_cfg(struct tcl_list* tcl, struct config_file* cfg); /** * Increment TCP connection count if found, provided the * count was below the limit. * @param tcl: structure for tcl storage, or NULL. * @return: 0 if limit reached, 1 if tcl was NULL or limit not reached. */ int tcl_new_connection(struct tcl_addr* tcl); /** * Decrement TCP connection count if found. * @param tcl: structure for tcl storage, or NULL. */ void tcl_close_connection(struct tcl_addr* tcl); /** * Lookup address to see its TCP connection limit structure * @param tcl: structure for address storage. * @param addr: address to check * @param addrlen: length of addr. * @return: tcl structure from this address. */ struct tcl_addr* tcl_addr_lookup(struct tcl_list* tcl, struct sockaddr_storage* addr, socklen_t addrlen); /** * Get memory used by TCP connection limit structure. * @param tcl: structure for address storage. * @return bytes in use. */ size_t tcl_list_get_mem(struct tcl_list* tcl); #endif /* DAEMON_TCP_CONN_LIMIT_H */ unbound-1.13.1/util/regional.c0000644000175000017500000001437014010434640015625 0ustar wouterwouter/* * regional.c -- region based memory allocator. * * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Regional allocator. Allocates small portions of of larger chunks. */ #include "config.h" #include "util/log.h" #include "util/regional.h" #ifdef ALIGNMENT # undef ALIGNMENT #endif /** increase size until it fits alignment of s bytes */ #define ALIGN_UP(x, s) (((x) + s - 1) & (~(s - 1))) /** what size to align on; make sure a char* fits in it. */ #define ALIGNMENT (sizeof(uint64_t)) /** Default reasonable size for chunks */ #define REGIONAL_CHUNK_SIZE 8192 #ifdef UNBOUND_ALLOC_NONREGIONAL /** All objects allocated outside of chunks, for debug */ #define REGIONAL_LARGE_OBJECT_SIZE 0 #else /** Default size for large objects - allocated outside of chunks. */ #define REGIONAL_LARGE_OBJECT_SIZE 2048 #endif struct regional* regional_create(void) { return regional_create_custom(REGIONAL_CHUNK_SIZE); } /** init regional struct with first block */ static void regional_init(struct regional* r) { size_t a = ALIGN_UP(sizeof(struct regional), ALIGNMENT); r->data = (char*)r + a; r->available = r->first_size - a; r->next = NULL; r->large_list = NULL; r->total_large = 0; } /** * Create a new region, with custom first block and large-object sizes. * @param size: length of first block. * @param large_object_size: outside of chunk allocation threshold. * @return: newly allocated regional. */ static struct regional* regional_create_custom_large_object(size_t size, size_t large_object_size) { struct regional* r; size = ALIGN_UP(size, ALIGNMENT); r = (struct regional*)malloc(size); log_assert(sizeof(struct regional) <= size); if(!r) return NULL; r->first_size = size; r->large_object_size = large_object_size; regional_init(r); return r; } struct regional* regional_create_custom(size_t size) { return regional_create_custom_large_object(size, REGIONAL_LARGE_OBJECT_SIZE); } struct regional* regional_create_nochunk(size_t size) { return regional_create_custom_large_object(size, 0); } void regional_free_all(struct regional *r) { char* p = r->next, *np; while(p) { np = *(char**)p; free(p); p = np; } p = r->large_list; while(p) { np = *(char**)p; free(p); p = np; } regional_init(r); } void regional_destroy(struct regional *r) { if(!r) return; regional_free_all(r); free(r); } void * regional_alloc(struct regional *r, size_t size) { size_t a; void *s; if( #if SIZEOF_SIZE_T == 8 (unsigned long long)size >= 0xffffffffffffff00ULL #else (unsigned)size >= (unsigned)0xffffff00UL #endif ) return NULL; /* protect against integer overflow in malloc and ALIGN_UP */ a = ALIGN_UP(size, ALIGNMENT); /* large objects */ if(a > r->large_object_size) { s = malloc(ALIGNMENT + size); if(!s) return NULL; r->total_large += ALIGNMENT+size; *(char**)s = r->large_list; r->large_list = (char*)s; return (char*)s+ALIGNMENT; } /* create a new chunk */ if(a > r->available) { s = malloc(REGIONAL_CHUNK_SIZE); if(!s) return NULL; *(char**)s = r->next; r->next = (char*)s; r->data = (char*)s + ALIGNMENT; r->available = REGIONAL_CHUNK_SIZE - ALIGNMENT; } /* put in this chunk */ r->available -= a; s = r->data; r->data += a; return s; } void * regional_alloc_init(struct regional* r, const void *init, size_t size) { void *s = regional_alloc(r, size); if(!s) return NULL; memcpy(s, init, size); return s; } void * regional_alloc_zero(struct regional *r, size_t size) { void *s = regional_alloc(r, size); if(!s) return NULL; memset(s, 0, size); return s; } char * regional_strdup(struct regional *r, const char *string) { return (char*)regional_alloc_init(r, string, strlen(string)+1); } /** * reasonably slow, but stats and get_mem are not supposed to be fast * count the number of chunks in use */ static size_t count_chunks(struct regional* r) { size_t c = 1; char* p = r->next; while(p) { c++; p = *(char**)p; } return c; } /** * also reasonably slow, counts the number of large objects */ static size_t count_large(struct regional* r) { size_t c = 0; char* p = r->large_list; while(p) { c++; p = *(char**)p; } return c; } void regional_log_stats(struct regional *r) { /* some basic assertions put here (non time critical code) */ log_assert(ALIGNMENT >= sizeof(char*)); log_assert(REGIONAL_CHUNK_SIZE > ALIGNMENT); log_assert(REGIONAL_CHUNK_SIZE-ALIGNMENT > r->large_object_size); log_assert(REGIONAL_CHUNK_SIZE >= sizeof(struct regional)); /* debug print */ log_info("regional %u chunks, %u large", (unsigned)count_chunks(r), (unsigned)count_large(r)); } size_t regional_get_mem(struct regional* r) { return r->first_size + (count_chunks(r)-1)*REGIONAL_CHUNK_SIZE + r->total_large; } unbound-1.13.1/util/mini_event.c0000644000175000017500000002335514010434640016165 0ustar wouterwouter/* * mini_event.c - implementation of part of libevent api, portably. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /** * \file * fake libevent implementation. Less broad in functionality, and only * supports select(2). */ #include "config.h" #include "util/mini_event.h" #ifdef HAVE_TIME_H #include #endif #include #if defined(USE_MINI_EVENT) && !defined(USE_WINSOCK) #include #include "util/fptr_wlist.h" /** compare events in tree, based on timevalue, ptr for uniqueness */ int mini_ev_cmp(const void* a, const void* b) { const struct event *e = (const struct event*)a; const struct event *f = (const struct event*)b; if(e->ev_timeout.tv_sec < f->ev_timeout.tv_sec) return -1; if(e->ev_timeout.tv_sec > f->ev_timeout.tv_sec) return 1; if(e->ev_timeout.tv_usec < f->ev_timeout.tv_usec) return -1; if(e->ev_timeout.tv_usec > f->ev_timeout.tv_usec) return 1; if(e < f) return -1; if(e > f) return 1; return 0; } /** set time */ static int settime(struct event_base* base) { if(gettimeofday(base->time_tv, NULL) < 0) { return -1; } #ifndef S_SPLINT_S *base->time_secs = (time_t)base->time_tv->tv_sec; #endif return 0; } /** create event base */ void *event_init(time_t* time_secs, struct timeval* time_tv) { struct event_base* base = (struct event_base*)malloc( sizeof(struct event_base)); if(!base) return NULL; memset(base, 0, sizeof(*base)); base->time_secs = time_secs; base->time_tv = time_tv; if(settime(base) < 0) { event_base_free(base); return NULL; } base->times = rbtree_create(mini_ev_cmp); if(!base->times) { event_base_free(base); return NULL; } base->capfd = MAX_FDS; #ifdef FD_SETSIZE if((int)FD_SETSIZE < base->capfd) base->capfd = (int)FD_SETSIZE; #endif base->fds = (struct event**)calloc((size_t)base->capfd, sizeof(struct event*)); if(!base->fds) { event_base_free(base); return NULL; } base->signals = (struct event**)calloc(MAX_SIG, sizeof(struct event*)); if(!base->signals) { event_base_free(base); return NULL; } #ifndef S_SPLINT_S FD_ZERO(&base->reads); FD_ZERO(&base->writes); #endif return base; } /** get version */ const char *event_get_version(void) { return "mini-event-"PACKAGE_VERSION; } /** get polling method, select */ const char *event_get_method(void) { return "select"; } /** call timeouts handlers, and return how long to wait for next one or -1 */ static void handle_timeouts(struct event_base* base, struct timeval* now, struct timeval* wait) { struct event* p; #ifndef S_SPLINT_S wait->tv_sec = (time_t)-1; #endif while((rbnode_type*)(p = (struct event*)rbtree_first(base->times)) !=RBTREE_NULL) { #ifndef S_SPLINT_S if(p->ev_timeout.tv_sec > now->tv_sec || (p->ev_timeout.tv_sec==now->tv_sec && p->ev_timeout.tv_usec > now->tv_usec)) { /* there is a next larger timeout. wait for it */ wait->tv_sec = p->ev_timeout.tv_sec - now->tv_sec; if(now->tv_usec > p->ev_timeout.tv_usec) { wait->tv_sec--; wait->tv_usec = 1000000 - (now->tv_usec - p->ev_timeout.tv_usec); } else { wait->tv_usec = p->ev_timeout.tv_usec - now->tv_usec; } return; } #endif /* event times out, remove it */ (void)rbtree_delete(base->times, p); p->ev_events &= ~EV_TIMEOUT; fptr_ok(fptr_whitelist_event(p->ev_callback)); (*p->ev_callback)(p->ev_fd, EV_TIMEOUT, p->ev_arg); } } /** call select and callbacks for that */ static int handle_select(struct event_base* base, struct timeval* wait) { fd_set r, w; int ret, i; #ifndef S_SPLINT_S if(wait->tv_sec==(time_t)-1) wait = NULL; #endif memmove(&r, &base->reads, sizeof(fd_set)); memmove(&w, &base->writes, sizeof(fd_set)); memmove(&base->ready, &base->content, sizeof(fd_set)); if((ret = select(base->maxfd+1, &r, &w, NULL, wait)) == -1) { ret = errno; if(settime(base) < 0) return -1; errno = ret; if(ret == EAGAIN || ret == EINTR) return 0; return -1; } if(settime(base) < 0) return -1; for(i=0; imaxfd+1; i++) { short bits = 0; if(!base->fds[i] || !(FD_ISSET(i, &base->ready))) { continue; } if(FD_ISSET(i, &r)) { bits |= EV_READ; ret--; } if(FD_ISSET(i, &w)) { bits |= EV_WRITE; ret--; } bits &= base->fds[i]->ev_events; if(bits) { fptr_ok(fptr_whitelist_event( base->fds[i]->ev_callback)); (*base->fds[i]->ev_callback)(base->fds[i]->ev_fd, bits, base->fds[i]->ev_arg); if(ret==0) break; } } return 0; } /** run select in a loop */ int event_base_dispatch(struct event_base* base) { struct timeval wait; if(settime(base) < 0) return -1; while(!base->need_to_exit) { /* see if timeouts need handling */ handle_timeouts(base, base->time_tv, &wait); if(base->need_to_exit) return 0; /* do select */ if(handle_select(base, &wait) < 0) { if(base->need_to_exit) return 0; return -1; } } return 0; } /** exit that loop */ int event_base_loopexit(struct event_base* base, struct timeval* ATTR_UNUSED(tv)) { base->need_to_exit = 1; return 0; } /* free event base, free events yourself */ void event_base_free(struct event_base* base) { if(!base) return; free(base->times); free(base->fds); free(base->signals); free(base); } /** set content of event */ void event_set(struct event* ev, int fd, short bits, void (*cb)(int, short, void *), void* arg) { ev->node.key = ev; ev->ev_fd = fd; ev->ev_events = bits; ev->ev_callback = cb; fptr_ok(fptr_whitelist_event(ev->ev_callback)); ev->ev_arg = arg; ev->added = 0; } /* add event to a base */ int event_base_set(struct event_base* base, struct event* ev) { ev->ev_base = base; ev->added = 0; return 0; } /* add event to make it active, you may not change it with event_set anymore */ int event_add(struct event* ev, struct timeval* tv) { if(ev->added) event_del(ev); if(ev->ev_fd != -1 && ev->ev_fd >= ev->ev_base->capfd) return -1; if( (ev->ev_events&(EV_READ|EV_WRITE)) && ev->ev_fd != -1) { ev->ev_base->fds[ev->ev_fd] = ev; if(ev->ev_events&EV_READ) { FD_SET(FD_SET_T ev->ev_fd, &ev->ev_base->reads); } if(ev->ev_events&EV_WRITE) { FD_SET(FD_SET_T ev->ev_fd, &ev->ev_base->writes); } FD_SET(FD_SET_T ev->ev_fd, &ev->ev_base->content); FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->ready); if(ev->ev_fd > ev->ev_base->maxfd) ev->ev_base->maxfd = ev->ev_fd; } if(tv && (ev->ev_events&EV_TIMEOUT)) { #ifndef S_SPLINT_S struct timeval *now = ev->ev_base->time_tv; ev->ev_timeout.tv_sec = tv->tv_sec + now->tv_sec; ev->ev_timeout.tv_usec = tv->tv_usec + now->tv_usec; while(ev->ev_timeout.tv_usec >= 1000000) { ev->ev_timeout.tv_usec -= 1000000; ev->ev_timeout.tv_sec++; } #endif (void)rbtree_insert(ev->ev_base->times, &ev->node); } ev->added = 1; return 0; } /* remove event, you may change it again */ int event_del(struct event* ev) { if(ev->ev_fd != -1 && ev->ev_fd >= ev->ev_base->capfd) return -1; if((ev->ev_events&EV_TIMEOUT)) (void)rbtree_delete(ev->ev_base->times, &ev->node); if((ev->ev_events&(EV_READ|EV_WRITE)) && ev->ev_fd != -1) { ev->ev_base->fds[ev->ev_fd] = NULL; FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->reads); FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->writes); FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->ready); FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->content); } ev->added = 0; return 0; } /** which base gets to handle signals */ static struct event_base* signal_base = NULL; /** signal handler */ static RETSIGTYPE sigh(int sig) { struct event* ev; if(!signal_base || sig < 0 || sig >= MAX_SIG) return; ev = signal_base->signals[sig]; if(!ev) return; fptr_ok(fptr_whitelist_event(ev->ev_callback)); (*ev->ev_callback)(sig, EV_SIGNAL, ev->ev_arg); } /** install signal handler */ int signal_add(struct event* ev, struct timeval* ATTR_UNUSED(tv)) { if(ev->ev_fd == -1 || ev->ev_fd >= MAX_SIG) return -1; signal_base = ev->ev_base; ev->ev_base->signals[ev->ev_fd] = ev; ev->added = 1; if(signal(ev->ev_fd, sigh) == SIG_ERR) { return -1; } return 0; } /** remove signal handler */ int signal_del(struct event* ev) { if(ev->ev_fd == -1 || ev->ev_fd >= MAX_SIG) return -1; ev->ev_base->signals[ev->ev_fd] = NULL; ev->added = 0; return 0; } #else /* USE_MINI_EVENT */ #ifndef USE_WINSOCK int mini_ev_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) { return 0; } #endif /* not USE_WINSOCK */ #endif /* USE_MINI_EVENT */ unbound-1.13.1/util/net_help.c0000644000175000017500000012546714010434640015635 0ustar wouterwouter/* * util/net_help.c - implementation of the network helper code * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Implementation of net_help.h. */ #include "config.h" #include "util/net_help.h" #include "util/log.h" #include "util/data/dname.h" #include "util/module.h" #include "util/regional.h" #include "util/config_file.h" #include "sldns/parseutil.h" #include "sldns/wire2str.h" #include #ifdef HAVE_OPENSSL_SSL_H #include #include #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif #ifdef HAVE_OPENSSL_CORE_NAMES_H #include #endif #ifdef USE_WINSOCK #include #endif #ifdef HAVE_NGHTTP2_NGHTTP2_H #include #endif /** max length of an IP address (the address portion) that we allow */ #define MAX_ADDR_STRLEN 128 /* characters */ /** default value for EDNS ADVERTISED size */ uint16_t EDNS_ADVERTISED_SIZE = 4096; /** minimal responses when positive answer: default is no */ int MINIMAL_RESPONSES = 0; /** rrset order roundrobin: default is yes */ int RRSET_ROUNDROBIN = 1; /** log tag queries with name instead of 'info' for filtering */ int LOG_TAG_QUERYREPLY = 0; static struct tls_session_ticket_key { unsigned char *key_name; unsigned char *aes_key; unsigned char *hmac_key; } *ticket_keys; #ifdef HAVE_SSL /** * callback TLS session ticket encrypt and decrypt * For use with SSL_CTX_set_tlsext_ticket_key_cb or * SSL_CTX_set_tlsext_ticket_key_evp_cb * @param s: the SSL_CTX to use (from connect_sslctx_create()) * @param key_name: secret name, 16 bytes * @param iv: up to EVP_MAX_IV_LENGTH. * @param evp_ctx: the evp cipher context, function sets this. * @param hmac_ctx: the hmac context, function sets this. * with ..key_cb it is of type HMAC_CTX* * with ..key_evp_cb it is of type EVP_MAC_CTX* * @param enc: 1 is encrypt, 0 is decrypt * @return 0 on no ticket, 1 for okay, and 2 for okay but renew the ticket * (the ticket is decrypt only). and <0 for failures. */ int tls_session_ticket_key_cb(SSL *s, unsigned char* key_name, unsigned char* iv, EVP_CIPHER_CTX *evp_ctx, #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB EVP_MAC_CTX *hmac_ctx, #else HMAC_CTX* hmac_ctx, #endif int enc); #endif /* HAVE_SSL */ /* returns true is string addr is an ip6 specced address */ int str_is_ip6(const char* str) { if(strchr(str, ':')) return 1; else return 0; } int fd_set_nonblock(int s) { #ifdef HAVE_FCNTL int flag; if((flag = fcntl(s, F_GETFL)) == -1) { log_err("can't fcntl F_GETFL: %s", strerror(errno)); flag = 0; } flag |= O_NONBLOCK; if(fcntl(s, F_SETFL, flag) == -1) { log_err("can't fcntl F_SETFL: %s", strerror(errno)); return 0; } #elif defined(HAVE_IOCTLSOCKET) unsigned long on = 1; if(ioctlsocket(s, FIONBIO, &on) != 0) { log_err("can't ioctlsocket FIONBIO on: %s", wsa_strerror(WSAGetLastError())); } #endif return 1; } int fd_set_block(int s) { #ifdef HAVE_FCNTL int flag; if((flag = fcntl(s, F_GETFL)) == -1) { log_err("cannot fcntl F_GETFL: %s", strerror(errno)); flag = 0; } flag &= ~O_NONBLOCK; if(fcntl(s, F_SETFL, flag) == -1) { log_err("cannot fcntl F_SETFL: %s", strerror(errno)); return 0; } #elif defined(HAVE_IOCTLSOCKET) unsigned long off = 0; if(ioctlsocket(s, FIONBIO, &off) != 0) { if(WSAGetLastError() != WSAEINVAL || verbosity >= 4) log_err("can't ioctlsocket FIONBIO off: %s", wsa_strerror(WSAGetLastError())); } #endif return 1; } int is_pow2(size_t num) { if(num == 0) return 1; return (num & (num-1)) == 0; } void* memdup(void* data, size_t len) { void* d; if(!data) return NULL; if(len == 0) return NULL; d = malloc(len); if(!d) return NULL; memcpy(d, data, len); return d; } void log_addr(enum verbosity_value v, const char* str, struct sockaddr_storage* addr, socklen_t addrlen) { uint16_t port; const char* family = "unknown"; char dest[100]; int af = (int)((struct sockaddr_in*)addr)->sin_family; void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr; if(verbosity < v) return; switch(af) { case AF_INET: family="ip4"; break; case AF_INET6: family="ip6"; sinaddr = &((struct sockaddr_in6*)addr)->sin6_addr; break; case AF_LOCAL: dest[0]=0; (void)inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)); verbose(v, "%s local %s", str, dest); return; /* do not continue and try to get port */ default: break; } if(inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)) == 0) { (void)strlcpy(dest, "(inet_ntop error)", sizeof(dest)); } dest[sizeof(dest)-1] = 0; port = ntohs(((struct sockaddr_in*)addr)->sin_port); if(verbosity >= 4) verbose(v, "%s %s %s port %d (len %d)", str, family, dest, (int)port, (int)addrlen); else verbose(v, "%s %s port %d", str, dest, (int)port); } int extstrtoaddr(const char* str, struct sockaddr_storage* addr, socklen_t* addrlen) { char* s; int port = UNBOUND_DNS_PORT; if((s=strchr(str, '@'))) { char buf[MAX_ADDR_STRLEN]; if(s-str >= MAX_ADDR_STRLEN) { return 0; } (void)strlcpy(buf, str, sizeof(buf)); buf[s-str] = 0; port = atoi(s+1); if(port == 0 && strcmp(s+1,"0")!=0) { return 0; } return ipstrtoaddr(buf, port, addr, addrlen); } return ipstrtoaddr(str, port, addr, addrlen); } int ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, socklen_t* addrlen) { uint16_t p; if(!ip) return 0; p = (uint16_t) port; if(str_is_ip6(ip)) { char buf[MAX_ADDR_STRLEN]; char* s; struct sockaddr_in6* sa = (struct sockaddr_in6*)addr; *addrlen = (socklen_t)sizeof(struct sockaddr_in6); memset(sa, 0, *addrlen); sa->sin6_family = AF_INET6; sa->sin6_port = (in_port_t)htons(p); if((s=strchr(ip, '%'))) { /* ip6%interface, rfc 4007 */ if(s-ip >= MAX_ADDR_STRLEN) return 0; (void)strlcpy(buf, ip, sizeof(buf)); buf[s-ip]=0; sa->sin6_scope_id = (uint32_t)atoi(s+1); ip = buf; } if(inet_pton((int)sa->sin6_family, ip, &sa->sin6_addr) <= 0) { return 0; } } else { /* ip4 */ struct sockaddr_in* sa = (struct sockaddr_in*)addr; *addrlen = (socklen_t)sizeof(struct sockaddr_in); memset(sa, 0, *addrlen); sa->sin_family = AF_INET; sa->sin_port = (in_port_t)htons(p); if(inet_pton((int)sa->sin_family, ip, &sa->sin_addr) <= 0) { return 0; } } return 1; } int netblockstrtoaddr(const char* str, int port, struct sockaddr_storage* addr, socklen_t* addrlen, int* net) { char buf[64]; char* s; *net = (str_is_ip6(str)?128:32); if((s=strchr(str, '/'))) { if(atoi(s+1) > *net) { log_err("netblock too large: %s", str); return 0; } *net = atoi(s+1); if(*net == 0 && strcmp(s+1, "0") != 0) { log_err("cannot parse netblock: '%s'", str); return 0; } strlcpy(buf, str, sizeof(buf)); s = strchr(buf, '/'); if(s) *s = 0; s = buf; } if(!ipstrtoaddr(s?s:str, port, addr, addrlen)) { log_err("cannot parse ip address: '%s'", str); return 0; } if(s) { addr_mask(addr, *addrlen, *net); } return 1; } /* RPZ format address dname to network byte order address */ static int ipdnametoaddr(uint8_t* dname, size_t dnamelen, struct sockaddr_storage* addr, socklen_t* addrlen, int* af) { uint8_t* ia; int dnamelabs = dname_count_labels(dname); uint8_t lablen; char* e = NULL; int z = 0; size_t len = 0; int i; *af = AF_INET; /* need 1 byte for label length */ if(dnamelen < 1) return 0; if(dnamelabs > 6 || dname_has_label(dname, dnamelen, (uint8_t*)"\002zz")) { *af = AF_INET6; } len = *dname; lablen = *dname++; i = (*af == AF_INET) ? 3 : 15; if(*af == AF_INET6) { struct sockaddr_in6* sa = (struct sockaddr_in6*)addr; *addrlen = (socklen_t)sizeof(struct sockaddr_in6); memset(sa, 0, *addrlen); sa->sin6_family = AF_INET6; ia = (uint8_t*)&sa->sin6_addr; } else { /* ip4 */ struct sockaddr_in* sa = (struct sockaddr_in*)addr; *addrlen = (socklen_t)sizeof(struct sockaddr_in); memset(sa, 0, *addrlen); sa->sin_family = AF_INET; ia = (uint8_t*)&sa->sin_addr; } while(lablen && i >= 0 && len <= dnamelen) { char buff[LDNS_MAX_LABELLEN+1]; uint16_t chunk; /* big enough to not overflow on IPv6 hextet */ if((*af == AF_INET && (lablen > 3 || dnamelabs > 6)) || (*af == AF_INET6 && (lablen > 4 || dnamelabs > 10))) { return 0; } if(memcmp(dname, "zz", 2) == 0 && *af == AF_INET6) { /* Add one or more 0 labels. Address is initialised at * 0, so just skip the zero part. */ int zl = 11 - dnamelabs; if(z || zl < 0) return 0; z = 1; i -= (zl*2); } else { memcpy(buff, dname, lablen); buff[lablen] = '\0'; chunk = strtol(buff, &e, (*af == AF_INET) ? 10 : 16); if(!e || *e != '\0' || (*af == AF_INET && chunk > 255)) return 0; if(*af == AF_INET) { log_assert(i < 4 && i >= 0); ia[i] = (uint8_t)chunk; i--; } else { log_assert(i < 16 && i >= 1); /* ia in network byte order */ ia[i-1] = (uint8_t)(chunk >> 8); ia[i] = (uint8_t)(chunk & 0x00FF); i -= 2; } } dname += lablen; lablen = *dname++; len += lablen; } if(i != -1) /* input too short */ return 0; return 1; } int netblockdnametoaddr(uint8_t* dname, size_t dnamelen, struct sockaddr_storage* addr, socklen_t* addrlen, int* net, int* af) { char buff[3 /* 3 digit netblock */ + 1]; size_t nlablen; if(dnamelen < 1 || *dname > 3) /* netblock invalid */ return 0; nlablen = *dname; if(dnamelen < 1 + nlablen) return 0; memcpy(buff, dname+1, nlablen); buff[nlablen] = '\0'; *net = atoi(buff); if(*net == 0 && strcmp(buff, "0") != 0) return 0; dname += nlablen; dname++; if(!ipdnametoaddr(dname, dnamelen-1-nlablen, addr, addrlen, af)) return 0; if((*af == AF_INET6 && *net > 128) || (*af == AF_INET && *net > 32)) return 0; return 1; } int authextstrtoaddr(char* str, struct sockaddr_storage* addr, socklen_t* addrlen, char** auth_name) { char* s; int port = UNBOUND_DNS_PORT; if((s=strchr(str, '@'))) { char buf[MAX_ADDR_STRLEN]; size_t len = (size_t)(s-str); char* hash = strchr(s+1, '#'); if(hash) { *auth_name = hash+1; } else { *auth_name = NULL; } if(len >= MAX_ADDR_STRLEN) { return 0; } (void)strlcpy(buf, str, sizeof(buf)); buf[len] = 0; port = atoi(s+1); if(port == 0) { if(!hash && strcmp(s+1,"0")!=0) return 0; if(hash && strncmp(s+1,"0#",2)!=0) return 0; } return ipstrtoaddr(buf, port, addr, addrlen); } if((s=strchr(str, '#'))) { char buf[MAX_ADDR_STRLEN]; size_t len = (size_t)(s-str); if(len >= MAX_ADDR_STRLEN) { return 0; } (void)strlcpy(buf, str, sizeof(buf)); buf[len] = 0; port = UNBOUND_DNS_OVER_TLS_PORT; *auth_name = s+1; return ipstrtoaddr(buf, port, addr, addrlen); } *auth_name = NULL; return ipstrtoaddr(str, port, addr, addrlen); } /** store port number into sockaddr structure */ void sockaddr_store_port(struct sockaddr_storage* addr, socklen_t addrlen, int port) { if(addr_is_ip6(addr, addrlen)) { struct sockaddr_in6* sa = (struct sockaddr_in6*)addr; sa->sin6_port = (in_port_t)htons((uint16_t)port); } else { struct sockaddr_in* sa = (struct sockaddr_in*)addr; sa->sin_port = (in_port_t)htons((uint16_t)port); } } void log_nametypeclass(enum verbosity_value v, const char* str, uint8_t* name, uint16_t type, uint16_t dclass) { char buf[LDNS_MAX_DOMAINLEN+1]; char t[12], c[12]; const char *ts, *cs; if(verbosity < v) return; dname_str(name, buf); if(type == LDNS_RR_TYPE_TSIG) ts = "TSIG"; else if(type == LDNS_RR_TYPE_IXFR) ts = "IXFR"; else if(type == LDNS_RR_TYPE_AXFR) ts = "AXFR"; else if(type == LDNS_RR_TYPE_MAILB) ts = "MAILB"; else if(type == LDNS_RR_TYPE_MAILA) ts = "MAILA"; else if(type == LDNS_RR_TYPE_ANY) ts = "ANY"; else if(sldns_rr_descript(type) && sldns_rr_descript(type)->_name) ts = sldns_rr_descript(type)->_name; else { snprintf(t, sizeof(t), "TYPE%d", (int)type); ts = t; } if(sldns_lookup_by_id(sldns_rr_classes, (int)dclass) && sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name) cs = sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name; else { snprintf(c, sizeof(c), "CLASS%d", (int)dclass); cs = c; } log_info("%s %s %s %s", str, buf, ts, cs); } void log_query_in(const char* str, uint8_t* name, uint16_t type, uint16_t dclass) { char buf[LDNS_MAX_DOMAINLEN+1]; char t[12], c[12]; const char *ts, *cs; dname_str(name, buf); if(type == LDNS_RR_TYPE_TSIG) ts = "TSIG"; else if(type == LDNS_RR_TYPE_IXFR) ts = "IXFR"; else if(type == LDNS_RR_TYPE_AXFR) ts = "AXFR"; else if(type == LDNS_RR_TYPE_MAILB) ts = "MAILB"; else if(type == LDNS_RR_TYPE_MAILA) ts = "MAILA"; else if(type == LDNS_RR_TYPE_ANY) ts = "ANY"; else if(sldns_rr_descript(type) && sldns_rr_descript(type)->_name) ts = sldns_rr_descript(type)->_name; else { snprintf(t, sizeof(t), "TYPE%d", (int)type); ts = t; } if(sldns_lookup_by_id(sldns_rr_classes, (int)dclass) && sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name) cs = sldns_lookup_by_id(sldns_rr_classes, (int)dclass)->name; else { snprintf(c, sizeof(c), "CLASS%d", (int)dclass); cs = c; } if(LOG_TAG_QUERYREPLY) log_query("%s %s %s %s", str, buf, ts, cs); else log_info("%s %s %s %s", str, buf, ts, cs); } void log_name_addr(enum verbosity_value v, const char* str, uint8_t* zone, struct sockaddr_storage* addr, socklen_t addrlen) { uint16_t port; const char* family = "unknown_family "; char namebuf[LDNS_MAX_DOMAINLEN+1]; char dest[100]; int af = (int)((struct sockaddr_in*)addr)->sin_family; void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr; if(verbosity < v) return; switch(af) { case AF_INET: family=""; break; case AF_INET6: family=""; sinaddr = &((struct sockaddr_in6*)addr)->sin6_addr; break; case AF_LOCAL: family="local "; break; default: break; } if(inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)) == 0) { (void)strlcpy(dest, "(inet_ntop error)", sizeof(dest)); } dest[sizeof(dest)-1] = 0; port = ntohs(((struct sockaddr_in*)addr)->sin_port); dname_str(zone, namebuf); if(af != AF_INET && af != AF_INET6) verbose(v, "%s <%s> %s%s#%d (addrlen %d)", str, namebuf, family, dest, (int)port, (int)addrlen); else verbose(v, "%s <%s> %s%s#%d", str, namebuf, family, dest, (int)port); } void log_err_addr(const char* str, const char* err, struct sockaddr_storage* addr, socklen_t addrlen) { uint16_t port; char dest[100]; int af = (int)((struct sockaddr_in*)addr)->sin_family; void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr; if(af == AF_INET6) sinaddr = &((struct sockaddr_in6*)addr)->sin6_addr; if(inet_ntop(af, sinaddr, dest, (socklen_t)sizeof(dest)) == 0) { (void)strlcpy(dest, "(inet_ntop error)", sizeof(dest)); } dest[sizeof(dest)-1] = 0; port = ntohs(((struct sockaddr_in*)addr)->sin_port); if(verbosity >= 4) log_err("%s: %s for %s port %d (len %d)", str, err, dest, (int)port, (int)addrlen); else log_err("%s: %s for %s port %d", str, err, dest, (int)port); } int sockaddr_cmp(struct sockaddr_storage* addr1, socklen_t len1, struct sockaddr_storage* addr2, socklen_t len2) { struct sockaddr_in* p1_in = (struct sockaddr_in*)addr1; struct sockaddr_in* p2_in = (struct sockaddr_in*)addr2; struct sockaddr_in6* p1_in6 = (struct sockaddr_in6*)addr1; struct sockaddr_in6* p2_in6 = (struct sockaddr_in6*)addr2; if(len1 < len2) return -1; if(len1 > len2) return 1; log_assert(len1 == len2); if( p1_in->sin_family < p2_in->sin_family) return -1; if( p1_in->sin_family > p2_in->sin_family) return 1; log_assert( p1_in->sin_family == p2_in->sin_family ); /* compare ip4 */ if( p1_in->sin_family == AF_INET ) { /* just order it, ntohs not required */ if(p1_in->sin_port < p2_in->sin_port) return -1; if(p1_in->sin_port > p2_in->sin_port) return 1; log_assert(p1_in->sin_port == p2_in->sin_port); return memcmp(&p1_in->sin_addr, &p2_in->sin_addr, INET_SIZE); } else if (p1_in6->sin6_family == AF_INET6) { /* just order it, ntohs not required */ if(p1_in6->sin6_port < p2_in6->sin6_port) return -1; if(p1_in6->sin6_port > p2_in6->sin6_port) return 1; log_assert(p1_in6->sin6_port == p2_in6->sin6_port); return memcmp(&p1_in6->sin6_addr, &p2_in6->sin6_addr, INET6_SIZE); } else { /* eek unknown type, perform this comparison for sanity. */ return memcmp(addr1, addr2, len1); } } int sockaddr_cmp_addr(struct sockaddr_storage* addr1, socklen_t len1, struct sockaddr_storage* addr2, socklen_t len2) { struct sockaddr_in* p1_in = (struct sockaddr_in*)addr1; struct sockaddr_in* p2_in = (struct sockaddr_in*)addr2; struct sockaddr_in6* p1_in6 = (struct sockaddr_in6*)addr1; struct sockaddr_in6* p2_in6 = (struct sockaddr_in6*)addr2; if(len1 < len2) return -1; if(len1 > len2) return 1; log_assert(len1 == len2); if( p1_in->sin_family < p2_in->sin_family) return -1; if( p1_in->sin_family > p2_in->sin_family) return 1; log_assert( p1_in->sin_family == p2_in->sin_family ); /* compare ip4 */ if( p1_in->sin_family == AF_INET ) { return memcmp(&p1_in->sin_addr, &p2_in->sin_addr, INET_SIZE); } else if (p1_in6->sin6_family == AF_INET6) { return memcmp(&p1_in6->sin6_addr, &p2_in6->sin6_addr, INET6_SIZE); } else { /* eek unknown type, perform this comparison for sanity. */ return memcmp(addr1, addr2, len1); } } int addr_is_ip6(struct sockaddr_storage* addr, socklen_t len) { if(len == (socklen_t)sizeof(struct sockaddr_in6) && ((struct sockaddr_in6*)addr)->sin6_family == AF_INET6) return 1; else return 0; } void addr_mask(struct sockaddr_storage* addr, socklen_t len, int net) { uint8_t mask[8] = {0x0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe}; int i, max; uint8_t* s; if(addr_is_ip6(addr, len)) { s = (uint8_t*)&((struct sockaddr_in6*)addr)->sin6_addr; max = 128; } else { s = (uint8_t*)&((struct sockaddr_in*)addr)->sin_addr; max = 32; } if(net >= max) return; for(i=net/8+1; isin6_addr; s2 = (uint8_t*)&((struct sockaddr_in6*)addr2)->sin6_addr; to = 16; } else { s1 = (uint8_t*)&((struct sockaddr_in*)addr1)->sin_addr; s2 = (uint8_t*)&((struct sockaddr_in*)addr2)->sin_addr; to = 4; } /* match = bits_in_common(s1, s2, to); */ for(i=0; i min) match = min; return match; } void addr_to_str(struct sockaddr_storage* addr, socklen_t addrlen, char* buf, size_t len) { int af = (int)((struct sockaddr_in*)addr)->sin_family; void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr; if(addr_is_ip6(addr, addrlen)) sinaddr = &((struct sockaddr_in6*)addr)->sin6_addr; if(inet_ntop(af, sinaddr, buf, (socklen_t)len) == 0) { snprintf(buf, len, "(inet_ntop_error)"); } } int addr_is_ip4mapped(struct sockaddr_storage* addr, socklen_t addrlen) { /* prefix for ipv4 into ipv6 mapping is ::ffff:x.x.x.x */ const uint8_t map_prefix[16] = {0,0,0,0, 0,0,0,0, 0,0,0xff,0xff, 0,0,0,0}; uint8_t* s; if(!addr_is_ip6(addr, addrlen)) return 0; /* s is 16 octet ipv6 address string */ s = (uint8_t*)&((struct sockaddr_in6*)addr)->sin6_addr; return (memcmp(s, map_prefix, 12) == 0); } int addr_is_broadcast(struct sockaddr_storage* addr, socklen_t addrlen) { int af = (int)((struct sockaddr_in*)addr)->sin_family; void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr; return af == AF_INET && addrlen>=(socklen_t)sizeof(struct sockaddr_in) && memcmp(sinaddr, "\377\377\377\377", 4) == 0; } int addr_is_any(struct sockaddr_storage* addr, socklen_t addrlen) { int af = (int)((struct sockaddr_in*)addr)->sin_family; void* sinaddr = &((struct sockaddr_in*)addr)->sin_addr; void* sin6addr = &((struct sockaddr_in6*)addr)->sin6_addr; if(af == AF_INET && addrlen>=(socklen_t)sizeof(struct sockaddr_in) && memcmp(sinaddr, "\000\000\000\000", 4) == 0) return 1; else if(af==AF_INET6 && addrlen>=(socklen_t)sizeof(struct sockaddr_in6) && memcmp(sin6addr, "\000\000\000\000\000\000\000\000" "\000\000\000\000\000\000\000\000", 16) == 0) return 1; return 0; } void sock_list_insert(struct sock_list** list, struct sockaddr_storage* addr, socklen_t len, struct regional* region) { struct sock_list* add = (struct sock_list*)regional_alloc(region, sizeof(*add) - sizeof(add->addr) + (size_t)len); if(!add) { log_err("out of memory in socketlist insert"); return; } log_assert(list); add->next = *list; add->len = len; *list = add; if(len) memmove(&add->addr, addr, len); } void sock_list_prepend(struct sock_list** list, struct sock_list* add) { struct sock_list* last = add; if(!last) return; while(last->next) last = last->next; last->next = *list; *list = add; } int sock_list_find(struct sock_list* list, struct sockaddr_storage* addr, socklen_t len) { while(list) { if(len == list->len) { if(len == 0 || sockaddr_cmp_addr(addr, len, &list->addr, list->len) == 0) return 1; } list = list->next; } return 0; } void sock_list_merge(struct sock_list** list, struct regional* region, struct sock_list* add) { struct sock_list* p; for(p=add; p; p=p->next) { if(!sock_list_find(*list, &p->addr, p->len)) sock_list_insert(list, &p->addr, p->len, region); } } void log_crypto_err(const char* str) { #ifdef HAVE_SSL log_crypto_err_code(str, ERR_get_error()); #else (void)str; #endif /* HAVE_SSL */ } void log_crypto_err_code(const char* str, unsigned long err) { #ifdef HAVE_SSL /* error:[error code]:[library name]:[function name]:[reason string] */ char buf[128]; unsigned long e; ERR_error_string_n(err, buf, sizeof(buf)); log_err("%s crypto %s", str, buf); while( (e=ERR_get_error()) ) { ERR_error_string_n(e, buf, sizeof(buf)); log_err("and additionally crypto %s", buf); } #else (void)str; (void)err; #endif /* HAVE_SSL */ } #ifdef HAVE_SSL /** log certificate details */ void log_cert(unsigned level, const char* str, void* cert) { BIO* bio; char nul = 0; char* pp = NULL; long len; if(verbosity < level) return; bio = BIO_new(BIO_s_mem()); if(!bio) return; X509_print_ex(bio, (X509*)cert, 0, (unsigned long)-1 ^(X509_FLAG_NO_SUBJECT |X509_FLAG_NO_ISSUER|X509_FLAG_NO_VALIDITY |X509_FLAG_NO_EXTENSIONS|X509_FLAG_NO_AUX |X509_FLAG_NO_ATTRIBUTES)); BIO_write(bio, &nul, (int)sizeof(nul)); len = BIO_get_mem_data(bio, &pp); if(len != 0 && pp) { verbose(level, "%s: \n%s", str, pp); } BIO_free(bio); } #endif /* HAVE_SSL */ #if defined(HAVE_SSL) && defined(HAVE_NGHTTP2) static int alpn_select_cb(SSL* ATTR_UNUSED(ssl), const unsigned char** out, unsigned char* outlen, const unsigned char* in, unsigned int inlen, void* ATTR_UNUSED(arg)) { int rv = nghttp2_select_next_protocol((unsigned char **)out, outlen, in, inlen); if(rv == -1) { return SSL_TLSEXT_ERR_NOACK; } /* either http/1.1 or h2 selected */ return SSL_TLSEXT_ERR_OK; } #endif int listen_sslctx_setup(void* ctxt) { #ifdef HAVE_SSL SSL_CTX* ctx = (SSL_CTX*)ctxt; /* no SSLv2, SSLv3 because has defects */ #if SSL_OP_NO_SSLv2 != 0 if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2) != SSL_OP_NO_SSLv2){ log_crypto_err("could not set SSL_OP_NO_SSLv2"); return 0; } #endif if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) != SSL_OP_NO_SSLv3){ log_crypto_err("could not set SSL_OP_NO_SSLv3"); return 0; } #if defined(SSL_OP_NO_TLSv1) && defined(SSL_OP_NO_TLSv1_1) /* if we have tls 1.1 disable 1.0 */ if((SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1) & SSL_OP_NO_TLSv1) != SSL_OP_NO_TLSv1){ log_crypto_err("could not set SSL_OP_NO_TLSv1"); return 0; } #endif #if defined(SSL_OP_NO_TLSv1_1) && defined(SSL_OP_NO_TLSv1_2) /* if we have tls 1.2 disable 1.1 */ if((SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1_1) & SSL_OP_NO_TLSv1_1) != SSL_OP_NO_TLSv1_1){ log_crypto_err("could not set SSL_OP_NO_TLSv1_1"); return 0; } #endif #if defined(SSL_OP_NO_RENEGOTIATION) /* disable client renegotiation */ if((SSL_CTX_set_options(ctx, SSL_OP_NO_RENEGOTIATION) & SSL_OP_NO_RENEGOTIATION) != SSL_OP_NO_RENEGOTIATION) { log_crypto_err("could not set SSL_OP_NO_RENEGOTIATION"); return 0; } #endif #if defined(SHA256_DIGEST_LENGTH) && defined(USE_ECDSA) /* if we have sha256, set the cipher list to have no known vulns */ if(!SSL_CTX_set_cipher_list(ctx, "TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256")) log_crypto_err("could not set cipher list with SSL_CTX_set_cipher_list"); #endif if((SSL_CTX_set_options(ctx, SSL_OP_CIPHER_SERVER_PREFERENCE) & SSL_OP_CIPHER_SERVER_PREFERENCE) != SSL_OP_CIPHER_SERVER_PREFERENCE) { log_crypto_err("could not set SSL_OP_CIPHER_SERVER_PREFERENCE"); return 0; } #ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL SSL_CTX_set_security_level(ctx, 0); #endif #if defined(HAVE_SSL_CTX_SET_ALPN_SELECT_CB) && defined(HAVE_NGHTTP2) SSL_CTX_set_alpn_select_cb(ctx, alpn_select_cb, NULL); #endif #else (void)ctxt; #endif /* HAVE_SSL */ return 1; } void listen_sslctx_setup_2(void* ctxt) { #ifdef HAVE_SSL SSL_CTX* ctx = (SSL_CTX*)ctxt; (void)ctx; #if HAVE_DECL_SSL_CTX_SET_ECDH_AUTO if(!SSL_CTX_set_ecdh_auto(ctx,1)) { log_crypto_err("Error in SSL_CTX_ecdh_auto, not enabling ECDHE"); } #elif defined(USE_ECDSA) if(1) { EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1); if (!ecdh) { log_crypto_err("could not find p256, not enabling ECDHE"); } else { if (1 != SSL_CTX_set_tmp_ecdh (ctx, ecdh)) { log_crypto_err("Error in SSL_CTX_set_tmp_ecdh, not enabling ECDHE"); } EC_KEY_free (ecdh); } } #endif #else (void)ctxt; #endif /* HAVE_SSL */ } void* listen_sslctx_create(char* key, char* pem, char* verifypem) { #ifdef HAVE_SSL SSL_CTX* ctx = SSL_CTX_new(SSLv23_server_method()); if(!ctx) { log_crypto_err("could not SSL_CTX_new"); return NULL; } if(!key || key[0] == 0) { log_err("error: no tls-service-key file specified"); SSL_CTX_free(ctx); return NULL; } if(!pem || pem[0] == 0) { log_err("error: no tls-service-pem file specified"); SSL_CTX_free(ctx); return NULL; } if(!listen_sslctx_setup(ctx)) { SSL_CTX_free(ctx); return NULL; } if(!SSL_CTX_use_certificate_chain_file(ctx, pem)) { log_err("error for cert file: %s", pem); log_crypto_err("error in SSL_CTX use_certificate_chain_file"); SSL_CTX_free(ctx); return NULL; } if(!SSL_CTX_use_PrivateKey_file(ctx, key, SSL_FILETYPE_PEM)) { log_err("error for private key file: %s", key); log_crypto_err("Error in SSL_CTX use_PrivateKey_file"); SSL_CTX_free(ctx); return NULL; } if(!SSL_CTX_check_private_key(ctx)) { log_err("error for key file: %s", key); log_crypto_err("Error in SSL_CTX check_private_key"); SSL_CTX_free(ctx); return NULL; } listen_sslctx_setup_2(ctx); if(verifypem && verifypem[0]) { if(!SSL_CTX_load_verify_locations(ctx, verifypem, NULL)) { log_crypto_err("Error in SSL_CTX verify locations"); SSL_CTX_free(ctx); return NULL; } SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file( verifypem)); SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); } return ctx; #else (void)key; (void)pem; (void)verifypem; return NULL; #endif } #ifdef USE_WINSOCK /* For windows, the CA trust store is not read by openssl. Add code to open the trust store using wincrypt API and add the root certs into openssl trust store */ static int add_WIN_cacerts_to_openssl_store(SSL_CTX* tls_ctx) { HCERTSTORE hSystemStore; PCCERT_CONTEXT pTargetCert = NULL; X509_STORE* store; verbose(VERB_ALGO, "Adding Windows certificates from system root store to CA store"); /* load just once per context lifetime for this version TODO: dynamically update CA trust changes as they are available */ if (!tls_ctx) return 0; /* Call wincrypt's CertOpenStore to open the CA root store. */ if ((hSystemStore = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, 0, /* NOTE: mingw does not have this const: replace with 1 << 16 from code CERT_SYSTEM_STORE_CURRENT_USER, */ 1 << 16, L"root")) == 0) { return 0; } store = SSL_CTX_get_cert_store(tls_ctx); if (!store) return 0; /* failure if the CA store is empty or the call fails */ if ((pTargetCert = CertEnumCertificatesInStore( hSystemStore, pTargetCert)) == 0) { verbose(VERB_ALGO, "CA certificate store for Windows is empty."); return 0; } /* iterate over the windows cert store and add to openssl store */ do { X509 *cert1 = d2i_X509(NULL, (const unsigned char **)&pTargetCert->pbCertEncoded, pTargetCert->cbCertEncoded); if (!cert1) { /* return error if a cert fails */ verbose(VERB_ALGO, "%s %d:%s", "Unable to parse certificate in memory", (int)ERR_get_error(), ERR_error_string(ERR_get_error(), NULL)); return 0; } else { /* return error if a cert add to store fails */ if (X509_STORE_add_cert(store, cert1) == 0) { unsigned long error = ERR_peek_last_error(); /* Ignore error X509_R_CERT_ALREADY_IN_HASH_TABLE which means the * certificate is already in the store. */ if(ERR_GET_LIB(error) != ERR_LIB_X509 || ERR_GET_REASON(error) != X509_R_CERT_ALREADY_IN_HASH_TABLE) { verbose(VERB_ALGO, "%s %d:%s\n", "Error adding certificate", (int)ERR_get_error(), ERR_error_string(ERR_get_error(), NULL)); X509_free(cert1); return 0; } } X509_free(cert1); } } while ((pTargetCert = CertEnumCertificatesInStore( hSystemStore, pTargetCert)) != 0); /* Clean up memory and quit. */ if (pTargetCert) CertFreeCertificateContext(pTargetCert); if (hSystemStore) { if (!CertCloseStore( hSystemStore, 0)) return 0; } verbose(VERB_ALGO, "Completed adding Windows certificates to CA store successfully"); return 1; } #endif /* USE_WINSOCK */ void* connect_sslctx_create(char* key, char* pem, char* verifypem, int wincert) { #ifdef HAVE_SSL SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method()); if(!ctx) { log_crypto_err("could not allocate SSL_CTX pointer"); return NULL; } #if SSL_OP_NO_SSLv2 != 0 if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2) != SSL_OP_NO_SSLv2) { log_crypto_err("could not set SSL_OP_NO_SSLv2"); SSL_CTX_free(ctx); return NULL; } #endif if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) != SSL_OP_NO_SSLv3) { log_crypto_err("could not set SSL_OP_NO_SSLv3"); SSL_CTX_free(ctx); return NULL; } #if defined(SSL_OP_NO_RENEGOTIATION) /* disable client renegotiation */ if((SSL_CTX_set_options(ctx, SSL_OP_NO_RENEGOTIATION) & SSL_OP_NO_RENEGOTIATION) != SSL_OP_NO_RENEGOTIATION) { log_crypto_err("could not set SSL_OP_NO_RENEGOTIATION"); return 0; } #endif if(key && key[0]) { if(!SSL_CTX_use_certificate_chain_file(ctx, pem)) { log_err("error in client certificate %s", pem); log_crypto_err("error in certificate file"); SSL_CTX_free(ctx); return NULL; } if(!SSL_CTX_use_PrivateKey_file(ctx, key, SSL_FILETYPE_PEM)) { log_err("error in client private key %s", key); log_crypto_err("error in key file"); SSL_CTX_free(ctx); return NULL; } if(!SSL_CTX_check_private_key(ctx)) { log_err("error in client key %s", key); log_crypto_err("error in SSL_CTX_check_private_key"); SSL_CTX_free(ctx); return NULL; } } if((verifypem && verifypem[0]) || wincert) { if(verifypem && verifypem[0]) { if(!SSL_CTX_load_verify_locations(ctx, verifypem, NULL)) { log_crypto_err("error in SSL_CTX verify"); SSL_CTX_free(ctx); return NULL; } } #ifdef USE_WINSOCK if(wincert) { if(!add_WIN_cacerts_to_openssl_store(ctx)) { log_crypto_err("error in add_WIN_cacerts_to_openssl_store"); SSL_CTX_free(ctx); return NULL; } } #else (void)wincert; #endif SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); } return ctx; #else (void)key; (void)pem; (void)verifypem; (void)wincert; return NULL; #endif } void* incoming_ssl_fd(void* sslctx, int fd) { #ifdef HAVE_SSL SSL* ssl = SSL_new((SSL_CTX*)sslctx); if(!ssl) { log_crypto_err("could not SSL_new"); return NULL; } SSL_set_accept_state(ssl); (void)SSL_set_mode(ssl, (long)SSL_MODE_AUTO_RETRY); if(!SSL_set_fd(ssl, fd)) { log_crypto_err("could not SSL_set_fd"); SSL_free(ssl); return NULL; } return ssl; #else (void)sslctx; (void)fd; return NULL; #endif } void* outgoing_ssl_fd(void* sslctx, int fd) { #ifdef HAVE_SSL SSL* ssl = SSL_new((SSL_CTX*)sslctx); if(!ssl) { log_crypto_err("could not SSL_new"); return NULL; } SSL_set_connect_state(ssl); (void)SSL_set_mode(ssl, (long)SSL_MODE_AUTO_RETRY); if(!SSL_set_fd(ssl, fd)) { log_crypto_err("could not SSL_set_fd"); SSL_free(ssl); return NULL; } return ssl; #else (void)sslctx; (void)fd; return NULL; #endif } int check_auth_name_for_ssl(char* auth_name) { if(!auth_name) return 1; #if defined(HAVE_SSL) && !defined(HAVE_SSL_SET1_HOST) && !defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) log_err("the query has an auth_name %s, but libssl has no call to " "perform TLS authentication. Remove that name from config " "or upgrade the ssl crypto library.", auth_name); return 0; #else return 1; #endif } /** set the authname on an SSL structure, SSL* ssl */ int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni) { if(!auth_name) return 1; #ifdef HAVE_SSL if(use_sni) { (void)SSL_set_tlsext_host_name(ssl, auth_name); } #else (void)ssl; (void)use_sni; #endif #ifdef HAVE_SSL_SET1_HOST SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL); /* setting the hostname makes openssl verify the * host name in the x509 certificate in the * SSL connection*/ if(!SSL_set1_host(ssl, auth_name)) { log_err("SSL_set1_host failed"); return 0; } #elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST) /* openssl 1.0.2 has this function that can be used for * set1_host like verification */ if(auth_name) { X509_VERIFY_PARAM* param = SSL_get0_param(ssl); # ifdef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS); # endif if(!X509_VERIFY_PARAM_set1_host(param, auth_name, strlen(auth_name))) { log_err("X509_VERIFY_PARAM_set1_host failed"); return 0; } SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL); } #else verbose(VERB_ALGO, "the query has an auth_name, but libssl has no call to perform TLS authentication"); #endif /* HAVE_SSL_SET1_HOST */ return 1; } #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK) && OPENSSL_VERSION_NUMBER < 0x10100000L /** global lock list for openssl locks */ static lock_basic_type *ub_openssl_locks = NULL; /** callback that gets thread id for openssl */ #ifdef HAVE_CRYPTO_THREADID_SET_CALLBACK static void ub_crypto_id_cb(CRYPTO_THREADID *id) { CRYPTO_THREADID_set_numeric(id, (unsigned long)log_thread_get()); } #else static unsigned long ub_crypto_id_cb(void) { return (unsigned long)log_thread_get(); } #endif static void ub_crypto_lock_cb(int mode, int type, const char *ATTR_UNUSED(file), int ATTR_UNUSED(line)) { if((mode&CRYPTO_LOCK)) { lock_basic_lock(&ub_openssl_locks[type]); } else { lock_basic_unlock(&ub_openssl_locks[type]); } } #endif /* OPENSSL_THREADS */ int ub_openssl_lock_init(void) { #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK) && OPENSSL_VERSION_NUMBER < 0x10100000L int i; ub_openssl_locks = (lock_basic_type*)reallocarray( NULL, (size_t)CRYPTO_num_locks(), sizeof(lock_basic_type)); if(!ub_openssl_locks) return 0; for(i=0; inext) { s++; } keys = calloc(s, sizeof(struct tls_session_ticket_key)); if(!keys) return 0; memset(keys, 0, s*sizeof(*keys)); ticket_keys = keys; for(p = tls_session_ticket_keys; p; p = p->next) { size_t n; unsigned char *data; FILE *f; data = (unsigned char *)malloc(80); if(!data) return 0; f = fopen(p->str, "rb"); if(!f) { log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno)); free(data); return 0; } n = fread(data, 1, 80, f); fclose(f); if(n != 80) { log_err("tls-session-ticket-key %s is %d bytes, must be 80 bytes", p->str, (int)n); free(data); return 0; } verbose(VERB_OPS, "read tls-session-ticket-key: %s", p->str); keys->key_name = data; keys->aes_key = data + 16; keys->hmac_key = data + 48; keys++; } /* terminate array with NULL key name entry */ keys->key_name = NULL; # ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB if(SSL_CTX_set_tlsext_ticket_key_evp_cb(sslctx, tls_session_ticket_key_cb) == 0) { log_err("no support for TLS session ticket"); return 0; } # else if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) { log_err("no support for TLS session ticket"); return 0; } # endif return 1; #else (void)sslctx; (void)tls_session_ticket_keys; return 0; #endif } #ifdef HAVE_SSL int tls_session_ticket_key_cb(SSL *ATTR_UNUSED(sslctx), unsigned char* key_name, unsigned char* iv, EVP_CIPHER_CTX *evp_sctx, #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB EVP_MAC_CTX *hmac_ctx, #else HMAC_CTX* hmac_ctx, #endif int enc) { #ifdef HAVE_SSL # ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB OSSL_PARAM params[3]; # else const EVP_MD *digest; # endif const EVP_CIPHER *cipher; int evp_cipher_length; # ifndef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB digest = EVP_sha256(); # endif cipher = EVP_aes_256_cbc(); evp_cipher_length = EVP_CIPHER_iv_length(cipher); if( enc == 1 ) { /* encrypt */ verbose(VERB_CLIENT, "start session encrypt"); memcpy(key_name, ticket_keys->key_name, 16); if (RAND_bytes(iv, evp_cipher_length) != 1) { verbose(VERB_CLIENT, "RAND_bytes failed"); return -1; } if (EVP_EncryptInit_ex(evp_sctx, cipher, NULL, ticket_keys->aes_key, iv) != 1) { verbose(VERB_CLIENT, "EVP_EncryptInit_ex failed"); return -1; } #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB params[0] = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, ticket_keys->hmac_key, 32); params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, "sha256", 0); params[2] = OSSL_PARAM_construct_end(); #ifdef HAVE_EVP_MAC_CTX_SET_PARAMS EVP_MAC_CTX_set_params(hmac_ctx, params); #else EVP_MAC_set_ctx_params(hmac_ctx, params); #endif #elif !defined(HMAC_INIT_EX_RETURNS_VOID) if (HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL) != 1) { verbose(VERB_CLIENT, "HMAC_Init_ex failed"); return -1; } #else HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL); #endif return 1; } else if (enc == 0) { /* decrypt */ struct tls_session_ticket_key *key; verbose(VERB_CLIENT, "start session decrypt"); for(key = ticket_keys; key->key_name != NULL; key++) { if (!memcmp(key_name, key->key_name, 16)) { verbose(VERB_CLIENT, "Found session_key"); break; } } if(key->key_name == NULL) { verbose(VERB_CLIENT, "Not found session_key"); return 0; } #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB params[0] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY, key->hmac_key, 32); params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, "sha256", 0); params[2] = OSSL_PARAM_construct_end(); #ifdef HAVE_EVP_MAC_CTX_SET_PARAMS EVP_MAC_CTX_set_params(hmac_ctx, params); #else EVP_MAC_set_ctx_params(hmac_ctx, params); #endif #elif !defined(HMAC_INIT_EX_RETURNS_VOID) if (HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL) != 1) { verbose(VERB_CLIENT, "HMAC_Init_ex failed"); return -1; } #else HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL); #endif if (EVP_DecryptInit_ex(evp_sctx, cipher, NULL, key->aes_key, iv) != 1) { log_err("EVP_DecryptInit_ex failed"); return -1; } return (key == ticket_keys) ? 1 : 2; } return -1; #else (void)key_name; (void)iv; (void)evp_sctx; (void)hmac_ctx; (void)enc; return 0; #endif } #endif /* HAVE_SSL */ void listen_sslctx_delete_ticket_keys(void) { struct tls_session_ticket_key *key; if(!ticket_keys) return; for(key = ticket_keys; key->key_name != NULL; key++) { /* wipe key data from memory*/ #ifdef HAVE_EXPLICIT_BZERO explicit_bzero(key->key_name, 80); #else memset(key->key_name, 0xdd, 80); #endif free(key->key_name); } free(ticket_keys); ticket_keys = NULL; } # ifndef USE_WINSOCK char* sock_strerror(int errn) { return strerror(errn); } void sock_close(int socket) { close(socket); } # else char* sock_strerror(int ATTR_UNUSED(errn)) { return wsa_strerror(WSAGetLastError()); } void sock_close(int socket) { closesocket(socket); } # endif /* USE_WINSOCK */ unbound-1.13.1/util/as112.h0000644000175000017500000000433714010434640014663 0ustar wouterwouter/* * util/as112.c - list of local zones. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file provides a list of lan zones */ #ifndef UTIL_AS112_H #define UTIL_AS112_H /** * Array of text-format domain names of the AS112 zones. * The array ends with NULL. "AS112" is a service on the internet that * that this array is named after. The names in this list (or some of them) * are null-routed by this service to avoid load on central servers caused by * mistaken lookups for local content on the global internet. * * This is the list of names that unbound should not normally be sending * on towards the internet, because they are local-use. */ extern const char** as112_zones; #endif unbound-1.13.1/util/rtt.h0000644000175000017500000000711314010434640014640 0ustar wouterwouter/* * util/rtt.h - UDP round trip time estimator for resend timeouts. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a data type and functions to help estimate good * round trip times for UDP resend timeout values. */ #ifndef UTIL_RTT_H #define UTIL_RTT_H /** * RTT information. Keeps packet Round Trip Time. */ struct rtt_info { /** smoothed rtt estimator, in milliseconds */ int srtt; /** smoothed mean deviation, in milliseconds */ int rttvar; /** current RTO in use, in milliseconds */ int rto; }; /** min retransmit timeout value, in milliseconds */ extern int RTT_MIN_TIMEOUT; /** max retransmit timeout value, in milliseconds */ #define RTT_MAX_TIMEOUT 120000 /** * Initialize RTT estimators. * @param rtt: The structure. Caller is responsible for allocation of it. */ void rtt_init(struct rtt_info* rtt); /** * Get timeout to use for sending a UDP packet. * @param rtt: round trip statistics structure. * @return: timeout to use in milliseconds. Relative time value. */ int rtt_timeout(const struct rtt_info* rtt); /** * Get unclamped timeout to use for server selection. * Recent timeouts are reflected in the returned value. * @param rtt: round trip statistics structure. * @return: value to use in milliseconds. */ int rtt_unclamped(const struct rtt_info* rtt); /** * RTT for valid responses. Without timeouts. * @param rtt: round trip statistics structure. * @return: value in msec. */ int rtt_notimeout(const struct rtt_info* rtt); /** * Update the statistics with a new roundtrip estimate observation. * @param rtt: round trip statistics structure. * @param ms: estimate of roundtrip time in milliseconds. */ void rtt_update(struct rtt_info* rtt, int ms); /** * Update the statistics with a new timeout expired observation. * @param rtt: round trip statistics structure. * @param orig: original rtt time given for the query that timed out. * Used to calculate the maximum responsible backed off time that * can reasonably be applied. */ void rtt_lost(struct rtt_info* rtt, int orig); #endif /* UTIL_RTT_H */ unbound-1.13.1/util/configparser.c0000644000175000017500000111071514010434646016516 0ustar wouterwouter/* A Bison parser, made by GNU Bison 3.6.4. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.6.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* First part of user prologue. */ #line 38 "util/configparser.y" #include "config.h" #include #include #include #include #include #include "util/configyyrename.h" #include "util/config_file.h" #include "util/net_help.h" int ub_c_lex(void); void ub_c_error(const char *message); static void validate_respip_action(const char* action); /* these need to be global, otherwise they cannot be used inside yacc */ extern struct config_parser_state* cfg_parser; #if 0 #define OUTYY(s) printf s /* used ONLY when debugging */ #else #define OUTYY(s) #endif #line 100 "util/configparser.c" # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Use api.header.include to #include this header instead of duplicating it here. */ #ifndef YY_YY_UTIL_CONFIGPARSER_H_INCLUDED # define YY_YY_UTIL_CONFIGPARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ SPACE = 258, /* SPACE */ LETTER = 259, /* LETTER */ NEWLINE = 260, /* NEWLINE */ COMMENT = 261, /* COMMENT */ COLON = 262, /* COLON */ ANY = 263, /* ANY */ ZONESTR = 264, /* ZONESTR */ STRING_ARG = 265, /* STRING_ARG */ VAR_FORCE_TOPLEVEL = 266, /* VAR_FORCE_TOPLEVEL */ VAR_SERVER = 267, /* VAR_SERVER */ VAR_VERBOSITY = 268, /* VAR_VERBOSITY */ VAR_NUM_THREADS = 269, /* VAR_NUM_THREADS */ VAR_PORT = 270, /* VAR_PORT */ VAR_OUTGOING_RANGE = 271, /* VAR_OUTGOING_RANGE */ VAR_INTERFACE = 272, /* VAR_INTERFACE */ VAR_PREFER_IP4 = 273, /* VAR_PREFER_IP4 */ VAR_DO_IP4 = 274, /* VAR_DO_IP4 */ VAR_DO_IP6 = 275, /* VAR_DO_IP6 */ VAR_PREFER_IP6 = 276, /* VAR_PREFER_IP6 */ VAR_DO_UDP = 277, /* VAR_DO_UDP */ VAR_DO_TCP = 278, /* VAR_DO_TCP */ VAR_TCP_MSS = 279, /* VAR_TCP_MSS */ VAR_OUTGOING_TCP_MSS = 280, /* VAR_OUTGOING_TCP_MSS */ VAR_TCP_IDLE_TIMEOUT = 281, /* VAR_TCP_IDLE_TIMEOUT */ VAR_EDNS_TCP_KEEPALIVE = 282, /* VAR_EDNS_TCP_KEEPALIVE */ VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ VAR_CHROOT = 284, /* VAR_CHROOT */ VAR_USERNAME = 285, /* VAR_USERNAME */ VAR_DIRECTORY = 286, /* VAR_DIRECTORY */ VAR_LOGFILE = 287, /* VAR_LOGFILE */ VAR_PIDFILE = 288, /* VAR_PIDFILE */ VAR_MSG_CACHE_SIZE = 289, /* VAR_MSG_CACHE_SIZE */ VAR_MSG_CACHE_SLABS = 290, /* VAR_MSG_CACHE_SLABS */ VAR_NUM_QUERIES_PER_THREAD = 291, /* VAR_NUM_QUERIES_PER_THREAD */ VAR_RRSET_CACHE_SIZE = 292, /* VAR_RRSET_CACHE_SIZE */ VAR_RRSET_CACHE_SLABS = 293, /* VAR_RRSET_CACHE_SLABS */ VAR_OUTGOING_NUM_TCP = 294, /* VAR_OUTGOING_NUM_TCP */ VAR_INFRA_HOST_TTL = 295, /* VAR_INFRA_HOST_TTL */ VAR_INFRA_LAME_TTL = 296, /* VAR_INFRA_LAME_TTL */ VAR_INFRA_CACHE_SLABS = 297, /* VAR_INFRA_CACHE_SLABS */ VAR_INFRA_CACHE_NUMHOSTS = 298, /* VAR_INFRA_CACHE_NUMHOSTS */ VAR_INFRA_CACHE_LAME_SIZE = 299, /* VAR_INFRA_CACHE_LAME_SIZE */ VAR_NAME = 300, /* VAR_NAME */ VAR_STUB_ZONE = 301, /* VAR_STUB_ZONE */ VAR_STUB_HOST = 302, /* VAR_STUB_HOST */ VAR_STUB_ADDR = 303, /* VAR_STUB_ADDR */ VAR_TARGET_FETCH_POLICY = 304, /* VAR_TARGET_FETCH_POLICY */ VAR_HARDEN_SHORT_BUFSIZE = 305, /* VAR_HARDEN_SHORT_BUFSIZE */ VAR_HARDEN_LARGE_QUERIES = 306, /* VAR_HARDEN_LARGE_QUERIES */ VAR_FORWARD_ZONE = 307, /* VAR_FORWARD_ZONE */ VAR_FORWARD_HOST = 308, /* VAR_FORWARD_HOST */ VAR_FORWARD_ADDR = 309, /* VAR_FORWARD_ADDR */ VAR_DO_NOT_QUERY_ADDRESS = 310, /* VAR_DO_NOT_QUERY_ADDRESS */ VAR_HIDE_IDENTITY = 311, /* VAR_HIDE_IDENTITY */ VAR_HIDE_VERSION = 312, /* VAR_HIDE_VERSION */ VAR_IDENTITY = 313, /* VAR_IDENTITY */ VAR_VERSION = 314, /* VAR_VERSION */ VAR_HARDEN_GLUE = 315, /* VAR_HARDEN_GLUE */ VAR_MODULE_CONF = 316, /* VAR_MODULE_CONF */ VAR_TRUST_ANCHOR_FILE = 317, /* VAR_TRUST_ANCHOR_FILE */ VAR_TRUST_ANCHOR = 318, /* VAR_TRUST_ANCHOR */ VAR_VAL_OVERRIDE_DATE = 319, /* VAR_VAL_OVERRIDE_DATE */ VAR_BOGUS_TTL = 320, /* VAR_BOGUS_TTL */ VAR_VAL_CLEAN_ADDITIONAL = 321, /* VAR_VAL_CLEAN_ADDITIONAL */ VAR_VAL_PERMISSIVE_MODE = 322, /* VAR_VAL_PERMISSIVE_MODE */ VAR_INCOMING_NUM_TCP = 323, /* VAR_INCOMING_NUM_TCP */ VAR_MSG_BUFFER_SIZE = 324, /* VAR_MSG_BUFFER_SIZE */ VAR_KEY_CACHE_SIZE = 325, /* VAR_KEY_CACHE_SIZE */ VAR_KEY_CACHE_SLABS = 326, /* VAR_KEY_CACHE_SLABS */ VAR_TRUSTED_KEYS_FILE = 327, /* VAR_TRUSTED_KEYS_FILE */ VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ VAR_USE_SYSLOG = 329, /* VAR_USE_SYSLOG */ VAR_OUTGOING_INTERFACE = 330, /* VAR_OUTGOING_INTERFACE */ VAR_ROOT_HINTS = 331, /* VAR_ROOT_HINTS */ VAR_DO_NOT_QUERY_LOCALHOST = 332, /* VAR_DO_NOT_QUERY_LOCALHOST */ VAR_CACHE_MAX_TTL = 333, /* VAR_CACHE_MAX_TTL */ VAR_HARDEN_DNSSEC_STRIPPED = 334, /* VAR_HARDEN_DNSSEC_STRIPPED */ VAR_ACCESS_CONTROL = 335, /* VAR_ACCESS_CONTROL */ VAR_LOCAL_ZONE = 336, /* VAR_LOCAL_ZONE */ VAR_LOCAL_DATA = 337, /* VAR_LOCAL_DATA */ VAR_INTERFACE_AUTOMATIC = 338, /* VAR_INTERFACE_AUTOMATIC */ VAR_STATISTICS_INTERVAL = 339, /* VAR_STATISTICS_INTERVAL */ VAR_DO_DAEMONIZE = 340, /* VAR_DO_DAEMONIZE */ VAR_USE_CAPS_FOR_ID = 341, /* VAR_USE_CAPS_FOR_ID */ VAR_STATISTICS_CUMULATIVE = 342, /* VAR_STATISTICS_CUMULATIVE */ VAR_OUTGOING_PORT_PERMIT = 343, /* VAR_OUTGOING_PORT_PERMIT */ VAR_OUTGOING_PORT_AVOID = 344, /* VAR_OUTGOING_PORT_AVOID */ VAR_DLV_ANCHOR_FILE = 345, /* VAR_DLV_ANCHOR_FILE */ VAR_DLV_ANCHOR = 346, /* VAR_DLV_ANCHOR */ VAR_NEG_CACHE_SIZE = 347, /* VAR_NEG_CACHE_SIZE */ VAR_HARDEN_REFERRAL_PATH = 348, /* VAR_HARDEN_REFERRAL_PATH */ VAR_PRIVATE_ADDRESS = 349, /* VAR_PRIVATE_ADDRESS */ VAR_PRIVATE_DOMAIN = 350, /* VAR_PRIVATE_DOMAIN */ VAR_REMOTE_CONTROL = 351, /* VAR_REMOTE_CONTROL */ VAR_CONTROL_ENABLE = 352, /* VAR_CONTROL_ENABLE */ VAR_CONTROL_INTERFACE = 353, /* VAR_CONTROL_INTERFACE */ VAR_CONTROL_PORT = 354, /* VAR_CONTROL_PORT */ VAR_SERVER_KEY_FILE = 355, /* VAR_SERVER_KEY_FILE */ VAR_SERVER_CERT_FILE = 356, /* VAR_SERVER_CERT_FILE */ VAR_CONTROL_KEY_FILE = 357, /* VAR_CONTROL_KEY_FILE */ VAR_CONTROL_CERT_FILE = 358, /* VAR_CONTROL_CERT_FILE */ VAR_CONTROL_USE_CERT = 359, /* VAR_CONTROL_USE_CERT */ VAR_EXTENDED_STATISTICS = 360, /* VAR_EXTENDED_STATISTICS */ VAR_LOCAL_DATA_PTR = 361, /* VAR_LOCAL_DATA_PTR */ VAR_JOSTLE_TIMEOUT = 362, /* VAR_JOSTLE_TIMEOUT */ VAR_STUB_PRIME = 363, /* VAR_STUB_PRIME */ VAR_UNWANTED_REPLY_THRESHOLD = 364, /* VAR_UNWANTED_REPLY_THRESHOLD */ VAR_LOG_TIME_ASCII = 365, /* VAR_LOG_TIME_ASCII */ VAR_DOMAIN_INSECURE = 366, /* VAR_DOMAIN_INSECURE */ VAR_PYTHON = 367, /* VAR_PYTHON */ VAR_PYTHON_SCRIPT = 368, /* VAR_PYTHON_SCRIPT */ VAR_VAL_SIG_SKEW_MIN = 369, /* VAR_VAL_SIG_SKEW_MIN */ VAR_VAL_SIG_SKEW_MAX = 370, /* VAR_VAL_SIG_SKEW_MAX */ VAR_CACHE_MIN_TTL = 371, /* VAR_CACHE_MIN_TTL */ VAR_VAL_LOG_LEVEL = 372, /* VAR_VAL_LOG_LEVEL */ VAR_AUTO_TRUST_ANCHOR_FILE = 373, /* VAR_AUTO_TRUST_ANCHOR_FILE */ VAR_KEEP_MISSING = 374, /* VAR_KEEP_MISSING */ VAR_ADD_HOLDDOWN = 375, /* VAR_ADD_HOLDDOWN */ VAR_DEL_HOLDDOWN = 376, /* VAR_DEL_HOLDDOWN */ VAR_SO_RCVBUF = 377, /* VAR_SO_RCVBUF */ VAR_EDNS_BUFFER_SIZE = 378, /* VAR_EDNS_BUFFER_SIZE */ VAR_PREFETCH = 379, /* VAR_PREFETCH */ VAR_PREFETCH_KEY = 380, /* VAR_PREFETCH_KEY */ VAR_SO_SNDBUF = 381, /* VAR_SO_SNDBUF */ VAR_SO_REUSEPORT = 382, /* VAR_SO_REUSEPORT */ VAR_HARDEN_BELOW_NXDOMAIN = 383, /* VAR_HARDEN_BELOW_NXDOMAIN */ VAR_IGNORE_CD_FLAG = 384, /* VAR_IGNORE_CD_FLAG */ VAR_LOG_QUERIES = 385, /* VAR_LOG_QUERIES */ VAR_LOG_REPLIES = 386, /* VAR_LOG_REPLIES */ VAR_LOG_LOCAL_ACTIONS = 387, /* VAR_LOG_LOCAL_ACTIONS */ VAR_TCP_UPSTREAM = 388, /* VAR_TCP_UPSTREAM */ VAR_SSL_UPSTREAM = 389, /* VAR_SSL_UPSTREAM */ VAR_SSL_SERVICE_KEY = 390, /* VAR_SSL_SERVICE_KEY */ VAR_SSL_SERVICE_PEM = 391, /* VAR_SSL_SERVICE_PEM */ VAR_SSL_PORT = 392, /* VAR_SSL_PORT */ VAR_FORWARD_FIRST = 393, /* VAR_FORWARD_FIRST */ VAR_STUB_SSL_UPSTREAM = 394, /* VAR_STUB_SSL_UPSTREAM */ VAR_FORWARD_SSL_UPSTREAM = 395, /* VAR_FORWARD_SSL_UPSTREAM */ VAR_TLS_CERT_BUNDLE = 396, /* VAR_TLS_CERT_BUNDLE */ VAR_HTTPS_PORT = 397, /* VAR_HTTPS_PORT */ VAR_HTTP_ENDPOINT = 398, /* VAR_HTTP_ENDPOINT */ VAR_HTTP_MAX_STREAMS = 399, /* VAR_HTTP_MAX_STREAMS */ VAR_HTTP_QUERY_BUFFER_SIZE = 400, /* VAR_HTTP_QUERY_BUFFER_SIZE */ VAR_HTTP_RESPONSE_BUFFER_SIZE = 401, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ VAR_HTTP_NODELAY = 402, /* VAR_HTTP_NODELAY */ VAR_HTTP_NOTLS_DOWNSTREAM = 403, /* VAR_HTTP_NOTLS_DOWNSTREAM */ VAR_STUB_FIRST = 404, /* VAR_STUB_FIRST */ VAR_MINIMAL_RESPONSES = 405, /* VAR_MINIMAL_RESPONSES */ VAR_RRSET_ROUNDROBIN = 406, /* VAR_RRSET_ROUNDROBIN */ VAR_MAX_UDP_SIZE = 407, /* VAR_MAX_UDP_SIZE */ VAR_DELAY_CLOSE = 408, /* VAR_DELAY_CLOSE */ VAR_UDP_CONNECT = 409, /* VAR_UDP_CONNECT */ VAR_UNBLOCK_LAN_ZONES = 410, /* VAR_UNBLOCK_LAN_ZONES */ VAR_INSECURE_LAN_ZONES = 411, /* VAR_INSECURE_LAN_ZONES */ VAR_INFRA_CACHE_MIN_RTT = 412, /* VAR_INFRA_CACHE_MIN_RTT */ VAR_INFRA_KEEP_PROBING = 413, /* VAR_INFRA_KEEP_PROBING */ VAR_DNS64_PREFIX = 414, /* VAR_DNS64_PREFIX */ VAR_DNS64_SYNTHALL = 415, /* VAR_DNS64_SYNTHALL */ VAR_DNS64_IGNORE_AAAA = 416, /* VAR_DNS64_IGNORE_AAAA */ VAR_DNSTAP = 417, /* VAR_DNSTAP */ VAR_DNSTAP_ENABLE = 418, /* VAR_DNSTAP_ENABLE */ VAR_DNSTAP_SOCKET_PATH = 419, /* VAR_DNSTAP_SOCKET_PATH */ VAR_DNSTAP_IP = 420, /* VAR_DNSTAP_IP */ VAR_DNSTAP_TLS = 421, /* VAR_DNSTAP_TLS */ VAR_DNSTAP_TLS_SERVER_NAME = 422, /* VAR_DNSTAP_TLS_SERVER_NAME */ VAR_DNSTAP_TLS_CERT_BUNDLE = 423, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 424, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 425, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ VAR_DNSTAP_SEND_IDENTITY = 426, /* VAR_DNSTAP_SEND_IDENTITY */ VAR_DNSTAP_SEND_VERSION = 427, /* VAR_DNSTAP_SEND_VERSION */ VAR_DNSTAP_BIDIRECTIONAL = 428, /* VAR_DNSTAP_BIDIRECTIONAL */ VAR_DNSTAP_IDENTITY = 429, /* VAR_DNSTAP_IDENTITY */ VAR_DNSTAP_VERSION = 430, /* VAR_DNSTAP_VERSION */ VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 431, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 432, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 433, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 434, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 435, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 436, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ VAR_RESPONSE_IP_TAG = 437, /* VAR_RESPONSE_IP_TAG */ VAR_RESPONSE_IP = 438, /* VAR_RESPONSE_IP */ VAR_RESPONSE_IP_DATA = 439, /* VAR_RESPONSE_IP_DATA */ VAR_HARDEN_ALGO_DOWNGRADE = 440, /* VAR_HARDEN_ALGO_DOWNGRADE */ VAR_IP_TRANSPARENT = 441, /* VAR_IP_TRANSPARENT */ VAR_IP_DSCP = 442, /* VAR_IP_DSCP */ VAR_DISABLE_DNSSEC_LAME_CHECK = 443, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ VAR_IP_RATELIMIT = 444, /* VAR_IP_RATELIMIT */ VAR_IP_RATELIMIT_SLABS = 445, /* VAR_IP_RATELIMIT_SLABS */ VAR_IP_RATELIMIT_SIZE = 446, /* VAR_IP_RATELIMIT_SIZE */ VAR_RATELIMIT = 447, /* VAR_RATELIMIT */ VAR_RATELIMIT_SLABS = 448, /* VAR_RATELIMIT_SLABS */ VAR_RATELIMIT_SIZE = 449, /* VAR_RATELIMIT_SIZE */ VAR_RATELIMIT_FOR_DOMAIN = 450, /* VAR_RATELIMIT_FOR_DOMAIN */ VAR_RATELIMIT_BELOW_DOMAIN = 451, /* VAR_RATELIMIT_BELOW_DOMAIN */ VAR_IP_RATELIMIT_FACTOR = 452, /* VAR_IP_RATELIMIT_FACTOR */ VAR_RATELIMIT_FACTOR = 453, /* VAR_RATELIMIT_FACTOR */ VAR_SEND_CLIENT_SUBNET = 454, /* VAR_SEND_CLIENT_SUBNET */ VAR_CLIENT_SUBNET_ZONE = 455, /* VAR_CLIENT_SUBNET_ZONE */ VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 456, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ VAR_CLIENT_SUBNET_OPCODE = 457, /* VAR_CLIENT_SUBNET_OPCODE */ VAR_MAX_CLIENT_SUBNET_IPV4 = 458, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ VAR_MAX_CLIENT_SUBNET_IPV6 = 459, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ VAR_MIN_CLIENT_SUBNET_IPV4 = 460, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ VAR_MIN_CLIENT_SUBNET_IPV6 = 461, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ VAR_MAX_ECS_TREE_SIZE_IPV4 = 462, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ VAR_MAX_ECS_TREE_SIZE_IPV6 = 463, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ VAR_CAPS_WHITELIST = 464, /* VAR_CAPS_WHITELIST */ VAR_CACHE_MAX_NEGATIVE_TTL = 465, /* VAR_CACHE_MAX_NEGATIVE_TTL */ VAR_PERMIT_SMALL_HOLDDOWN = 466, /* VAR_PERMIT_SMALL_HOLDDOWN */ VAR_QNAME_MINIMISATION = 467, /* VAR_QNAME_MINIMISATION */ VAR_QNAME_MINIMISATION_STRICT = 468, /* VAR_QNAME_MINIMISATION_STRICT */ VAR_IP_FREEBIND = 469, /* VAR_IP_FREEBIND */ VAR_DEFINE_TAG = 470, /* VAR_DEFINE_TAG */ VAR_LOCAL_ZONE_TAG = 471, /* VAR_LOCAL_ZONE_TAG */ VAR_ACCESS_CONTROL_TAG = 472, /* VAR_ACCESS_CONTROL_TAG */ VAR_LOCAL_ZONE_OVERRIDE = 473, /* VAR_LOCAL_ZONE_OVERRIDE */ VAR_ACCESS_CONTROL_TAG_ACTION = 474, /* VAR_ACCESS_CONTROL_TAG_ACTION */ VAR_ACCESS_CONTROL_TAG_DATA = 475, /* VAR_ACCESS_CONTROL_TAG_DATA */ VAR_VIEW = 476, /* VAR_VIEW */ VAR_ACCESS_CONTROL_VIEW = 477, /* VAR_ACCESS_CONTROL_VIEW */ VAR_VIEW_FIRST = 478, /* VAR_VIEW_FIRST */ VAR_SERVE_EXPIRED = 479, /* VAR_SERVE_EXPIRED */ VAR_SERVE_EXPIRED_TTL = 480, /* VAR_SERVE_EXPIRED_TTL */ VAR_SERVE_EXPIRED_TTL_RESET = 481, /* VAR_SERVE_EXPIRED_TTL_RESET */ VAR_SERVE_EXPIRED_REPLY_TTL = 482, /* VAR_SERVE_EXPIRED_REPLY_TTL */ VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 483, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ VAR_SERVE_ORIGINAL_TTL = 484, /* VAR_SERVE_ORIGINAL_TTL */ VAR_FAKE_DSA = 485, /* VAR_FAKE_DSA */ VAR_FAKE_SHA1 = 486, /* VAR_FAKE_SHA1 */ VAR_LOG_IDENTITY = 487, /* VAR_LOG_IDENTITY */ VAR_HIDE_TRUSTANCHOR = 488, /* VAR_HIDE_TRUSTANCHOR */ VAR_TRUST_ANCHOR_SIGNALING = 489, /* VAR_TRUST_ANCHOR_SIGNALING */ VAR_AGGRESSIVE_NSEC = 490, /* VAR_AGGRESSIVE_NSEC */ VAR_USE_SYSTEMD = 491, /* VAR_USE_SYSTEMD */ VAR_SHM_ENABLE = 492, /* VAR_SHM_ENABLE */ VAR_SHM_KEY = 493, /* VAR_SHM_KEY */ VAR_ROOT_KEY_SENTINEL = 494, /* VAR_ROOT_KEY_SENTINEL */ VAR_DNSCRYPT = 495, /* VAR_DNSCRYPT */ VAR_DNSCRYPT_ENABLE = 496, /* VAR_DNSCRYPT_ENABLE */ VAR_DNSCRYPT_PORT = 497, /* VAR_DNSCRYPT_PORT */ VAR_DNSCRYPT_PROVIDER = 498, /* VAR_DNSCRYPT_PROVIDER */ VAR_DNSCRYPT_SECRET_KEY = 499, /* VAR_DNSCRYPT_SECRET_KEY */ VAR_DNSCRYPT_PROVIDER_CERT = 500, /* VAR_DNSCRYPT_PROVIDER_CERT */ VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 501, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 502, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 503, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ VAR_DNSCRYPT_NONCE_CACHE_SIZE = 504, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ VAR_DNSCRYPT_NONCE_CACHE_SLABS = 505, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ VAR_PAD_RESPONSES = 506, /* VAR_PAD_RESPONSES */ VAR_PAD_RESPONSES_BLOCK_SIZE = 507, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ VAR_PAD_QUERIES = 508, /* VAR_PAD_QUERIES */ VAR_PAD_QUERIES_BLOCK_SIZE = 509, /* VAR_PAD_QUERIES_BLOCK_SIZE */ VAR_IPSECMOD_ENABLED = 510, /* VAR_IPSECMOD_ENABLED */ VAR_IPSECMOD_HOOK = 511, /* VAR_IPSECMOD_HOOK */ VAR_IPSECMOD_IGNORE_BOGUS = 512, /* VAR_IPSECMOD_IGNORE_BOGUS */ VAR_IPSECMOD_MAX_TTL = 513, /* VAR_IPSECMOD_MAX_TTL */ VAR_IPSECMOD_WHITELIST = 514, /* VAR_IPSECMOD_WHITELIST */ VAR_IPSECMOD_STRICT = 515, /* VAR_IPSECMOD_STRICT */ VAR_CACHEDB = 516, /* VAR_CACHEDB */ VAR_CACHEDB_BACKEND = 517, /* VAR_CACHEDB_BACKEND */ VAR_CACHEDB_SECRETSEED = 518, /* VAR_CACHEDB_SECRETSEED */ VAR_CACHEDB_REDISHOST = 519, /* VAR_CACHEDB_REDISHOST */ VAR_CACHEDB_REDISPORT = 520, /* VAR_CACHEDB_REDISPORT */ VAR_CACHEDB_REDISTIMEOUT = 521, /* VAR_CACHEDB_REDISTIMEOUT */ VAR_CACHEDB_REDISEXPIRERECORDS = 522, /* VAR_CACHEDB_REDISEXPIRERECORDS */ VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 523, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ VAR_FOR_UPSTREAM = 524, /* VAR_FOR_UPSTREAM */ VAR_AUTH_ZONE = 525, /* VAR_AUTH_ZONE */ VAR_ZONEFILE = 526, /* VAR_ZONEFILE */ VAR_MASTER = 527, /* VAR_MASTER */ VAR_URL = 528, /* VAR_URL */ VAR_FOR_DOWNSTREAM = 529, /* VAR_FOR_DOWNSTREAM */ VAR_FALLBACK_ENABLED = 530, /* VAR_FALLBACK_ENABLED */ VAR_TLS_ADDITIONAL_PORT = 531, /* VAR_TLS_ADDITIONAL_PORT */ VAR_LOW_RTT = 532, /* VAR_LOW_RTT */ VAR_LOW_RTT_PERMIL = 533, /* VAR_LOW_RTT_PERMIL */ VAR_FAST_SERVER_PERMIL = 534, /* VAR_FAST_SERVER_PERMIL */ VAR_FAST_SERVER_NUM = 535, /* VAR_FAST_SERVER_NUM */ VAR_ALLOW_NOTIFY = 536, /* VAR_ALLOW_NOTIFY */ VAR_TLS_WIN_CERT = 537, /* VAR_TLS_WIN_CERT */ VAR_TCP_CONNECTION_LIMIT = 538, /* VAR_TCP_CONNECTION_LIMIT */ VAR_FORWARD_NO_CACHE = 539, /* VAR_FORWARD_NO_CACHE */ VAR_STUB_NO_CACHE = 540, /* VAR_STUB_NO_CACHE */ VAR_LOG_SERVFAIL = 541, /* VAR_LOG_SERVFAIL */ VAR_DENY_ANY = 542, /* VAR_DENY_ANY */ VAR_UNKNOWN_SERVER_TIME_LIMIT = 543, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ VAR_LOG_TAG_QUERYREPLY = 544, /* VAR_LOG_TAG_QUERYREPLY */ VAR_STREAM_WAIT_SIZE = 545, /* VAR_STREAM_WAIT_SIZE */ VAR_TLS_CIPHERS = 546, /* VAR_TLS_CIPHERS */ VAR_TLS_CIPHERSUITES = 547, /* VAR_TLS_CIPHERSUITES */ VAR_TLS_USE_SNI = 548, /* VAR_TLS_USE_SNI */ VAR_IPSET = 549, /* VAR_IPSET */ VAR_IPSET_NAME_V4 = 550, /* VAR_IPSET_NAME_V4 */ VAR_IPSET_NAME_V6 = 551, /* VAR_IPSET_NAME_V6 */ VAR_TLS_SESSION_TICKET_KEYS = 552, /* VAR_TLS_SESSION_TICKET_KEYS */ VAR_RPZ = 553, /* VAR_RPZ */ VAR_TAGS = 554, /* VAR_TAGS */ VAR_RPZ_ACTION_OVERRIDE = 555, /* VAR_RPZ_ACTION_OVERRIDE */ VAR_RPZ_CNAME_OVERRIDE = 556, /* VAR_RPZ_CNAME_OVERRIDE */ VAR_RPZ_LOG = 557, /* VAR_RPZ_LOG */ VAR_RPZ_LOG_NAME = 558, /* VAR_RPZ_LOG_NAME */ VAR_DYNLIB = 559, /* VAR_DYNLIB */ VAR_DYNLIB_FILE = 560, /* VAR_DYNLIB_FILE */ VAR_EDNS_CLIENT_STRING = 561, /* VAR_EDNS_CLIENT_STRING */ VAR_EDNS_CLIENT_STRING_OPCODE = 562, /* VAR_EDNS_CLIENT_STRING_OPCODE */ VAR_NSID = 563 /* VAR_NSID */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Token kinds. */ #define YYEOF 0 #define YYerror 256 #define YYUNDEF 257 #define SPACE 258 #define LETTER 259 #define NEWLINE 260 #define COMMENT 261 #define COLON 262 #define ANY 263 #define ZONESTR 264 #define STRING_ARG 265 #define VAR_FORCE_TOPLEVEL 266 #define VAR_SERVER 267 #define VAR_VERBOSITY 268 #define VAR_NUM_THREADS 269 #define VAR_PORT 270 #define VAR_OUTGOING_RANGE 271 #define VAR_INTERFACE 272 #define VAR_PREFER_IP4 273 #define VAR_DO_IP4 274 #define VAR_DO_IP6 275 #define VAR_PREFER_IP6 276 #define VAR_DO_UDP 277 #define VAR_DO_TCP 278 #define VAR_TCP_MSS 279 #define VAR_OUTGOING_TCP_MSS 280 #define VAR_TCP_IDLE_TIMEOUT 281 #define VAR_EDNS_TCP_KEEPALIVE 282 #define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283 #define VAR_CHROOT 284 #define VAR_USERNAME 285 #define VAR_DIRECTORY 286 #define VAR_LOGFILE 287 #define VAR_PIDFILE 288 #define VAR_MSG_CACHE_SIZE 289 #define VAR_MSG_CACHE_SLABS 290 #define VAR_NUM_QUERIES_PER_THREAD 291 #define VAR_RRSET_CACHE_SIZE 292 #define VAR_RRSET_CACHE_SLABS 293 #define VAR_OUTGOING_NUM_TCP 294 #define VAR_INFRA_HOST_TTL 295 #define VAR_INFRA_LAME_TTL 296 #define VAR_INFRA_CACHE_SLABS 297 #define VAR_INFRA_CACHE_NUMHOSTS 298 #define VAR_INFRA_CACHE_LAME_SIZE 299 #define VAR_NAME 300 #define VAR_STUB_ZONE 301 #define VAR_STUB_HOST 302 #define VAR_STUB_ADDR 303 #define VAR_TARGET_FETCH_POLICY 304 #define VAR_HARDEN_SHORT_BUFSIZE 305 #define VAR_HARDEN_LARGE_QUERIES 306 #define VAR_FORWARD_ZONE 307 #define VAR_FORWARD_HOST 308 #define VAR_FORWARD_ADDR 309 #define VAR_DO_NOT_QUERY_ADDRESS 310 #define VAR_HIDE_IDENTITY 311 #define VAR_HIDE_VERSION 312 #define VAR_IDENTITY 313 #define VAR_VERSION 314 #define VAR_HARDEN_GLUE 315 #define VAR_MODULE_CONF 316 #define VAR_TRUST_ANCHOR_FILE 317 #define VAR_TRUST_ANCHOR 318 #define VAR_VAL_OVERRIDE_DATE 319 #define VAR_BOGUS_TTL 320 #define VAR_VAL_CLEAN_ADDITIONAL 321 #define VAR_VAL_PERMISSIVE_MODE 322 #define VAR_INCOMING_NUM_TCP 323 #define VAR_MSG_BUFFER_SIZE 324 #define VAR_KEY_CACHE_SIZE 325 #define VAR_KEY_CACHE_SLABS 326 #define VAR_TRUSTED_KEYS_FILE 327 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328 #define VAR_USE_SYSLOG 329 #define VAR_OUTGOING_INTERFACE 330 #define VAR_ROOT_HINTS 331 #define VAR_DO_NOT_QUERY_LOCALHOST 332 #define VAR_CACHE_MAX_TTL 333 #define VAR_HARDEN_DNSSEC_STRIPPED 334 #define VAR_ACCESS_CONTROL 335 #define VAR_LOCAL_ZONE 336 #define VAR_LOCAL_DATA 337 #define VAR_INTERFACE_AUTOMATIC 338 #define VAR_STATISTICS_INTERVAL 339 #define VAR_DO_DAEMONIZE 340 #define VAR_USE_CAPS_FOR_ID 341 #define VAR_STATISTICS_CUMULATIVE 342 #define VAR_OUTGOING_PORT_PERMIT 343 #define VAR_OUTGOING_PORT_AVOID 344 #define VAR_DLV_ANCHOR_FILE 345 #define VAR_DLV_ANCHOR 346 #define VAR_NEG_CACHE_SIZE 347 #define VAR_HARDEN_REFERRAL_PATH 348 #define VAR_PRIVATE_ADDRESS 349 #define VAR_PRIVATE_DOMAIN 350 #define VAR_REMOTE_CONTROL 351 #define VAR_CONTROL_ENABLE 352 #define VAR_CONTROL_INTERFACE 353 #define VAR_CONTROL_PORT 354 #define VAR_SERVER_KEY_FILE 355 #define VAR_SERVER_CERT_FILE 356 #define VAR_CONTROL_KEY_FILE 357 #define VAR_CONTROL_CERT_FILE 358 #define VAR_CONTROL_USE_CERT 359 #define VAR_EXTENDED_STATISTICS 360 #define VAR_LOCAL_DATA_PTR 361 #define VAR_JOSTLE_TIMEOUT 362 #define VAR_STUB_PRIME 363 #define VAR_UNWANTED_REPLY_THRESHOLD 364 #define VAR_LOG_TIME_ASCII 365 #define VAR_DOMAIN_INSECURE 366 #define VAR_PYTHON 367 #define VAR_PYTHON_SCRIPT 368 #define VAR_VAL_SIG_SKEW_MIN 369 #define VAR_VAL_SIG_SKEW_MAX 370 #define VAR_CACHE_MIN_TTL 371 #define VAR_VAL_LOG_LEVEL 372 #define VAR_AUTO_TRUST_ANCHOR_FILE 373 #define VAR_KEEP_MISSING 374 #define VAR_ADD_HOLDDOWN 375 #define VAR_DEL_HOLDDOWN 376 #define VAR_SO_RCVBUF 377 #define VAR_EDNS_BUFFER_SIZE 378 #define VAR_PREFETCH 379 #define VAR_PREFETCH_KEY 380 #define VAR_SO_SNDBUF 381 #define VAR_SO_REUSEPORT 382 #define VAR_HARDEN_BELOW_NXDOMAIN 383 #define VAR_IGNORE_CD_FLAG 384 #define VAR_LOG_QUERIES 385 #define VAR_LOG_REPLIES 386 #define VAR_LOG_LOCAL_ACTIONS 387 #define VAR_TCP_UPSTREAM 388 #define VAR_SSL_UPSTREAM 389 #define VAR_SSL_SERVICE_KEY 390 #define VAR_SSL_SERVICE_PEM 391 #define VAR_SSL_PORT 392 #define VAR_FORWARD_FIRST 393 #define VAR_STUB_SSL_UPSTREAM 394 #define VAR_FORWARD_SSL_UPSTREAM 395 #define VAR_TLS_CERT_BUNDLE 396 #define VAR_HTTPS_PORT 397 #define VAR_HTTP_ENDPOINT 398 #define VAR_HTTP_MAX_STREAMS 399 #define VAR_HTTP_QUERY_BUFFER_SIZE 400 #define VAR_HTTP_RESPONSE_BUFFER_SIZE 401 #define VAR_HTTP_NODELAY 402 #define VAR_HTTP_NOTLS_DOWNSTREAM 403 #define VAR_STUB_FIRST 404 #define VAR_MINIMAL_RESPONSES 405 #define VAR_RRSET_ROUNDROBIN 406 #define VAR_MAX_UDP_SIZE 407 #define VAR_DELAY_CLOSE 408 #define VAR_UDP_CONNECT 409 #define VAR_UNBLOCK_LAN_ZONES 410 #define VAR_INSECURE_LAN_ZONES 411 #define VAR_INFRA_CACHE_MIN_RTT 412 #define VAR_INFRA_KEEP_PROBING 413 #define VAR_DNS64_PREFIX 414 #define VAR_DNS64_SYNTHALL 415 #define VAR_DNS64_IGNORE_AAAA 416 #define VAR_DNSTAP 417 #define VAR_DNSTAP_ENABLE 418 #define VAR_DNSTAP_SOCKET_PATH 419 #define VAR_DNSTAP_IP 420 #define VAR_DNSTAP_TLS 421 #define VAR_DNSTAP_TLS_SERVER_NAME 422 #define VAR_DNSTAP_TLS_CERT_BUNDLE 423 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 424 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 425 #define VAR_DNSTAP_SEND_IDENTITY 426 #define VAR_DNSTAP_SEND_VERSION 427 #define VAR_DNSTAP_BIDIRECTIONAL 428 #define VAR_DNSTAP_IDENTITY 429 #define VAR_DNSTAP_VERSION 430 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 431 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 432 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 433 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 434 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 435 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 436 #define VAR_RESPONSE_IP_TAG 437 #define VAR_RESPONSE_IP 438 #define VAR_RESPONSE_IP_DATA 439 #define VAR_HARDEN_ALGO_DOWNGRADE 440 #define VAR_IP_TRANSPARENT 441 #define VAR_IP_DSCP 442 #define VAR_DISABLE_DNSSEC_LAME_CHECK 443 #define VAR_IP_RATELIMIT 444 #define VAR_IP_RATELIMIT_SLABS 445 #define VAR_IP_RATELIMIT_SIZE 446 #define VAR_RATELIMIT 447 #define VAR_RATELIMIT_SLABS 448 #define VAR_RATELIMIT_SIZE 449 #define VAR_RATELIMIT_FOR_DOMAIN 450 #define VAR_RATELIMIT_BELOW_DOMAIN 451 #define VAR_IP_RATELIMIT_FACTOR 452 #define VAR_RATELIMIT_FACTOR 453 #define VAR_SEND_CLIENT_SUBNET 454 #define VAR_CLIENT_SUBNET_ZONE 455 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 456 #define VAR_CLIENT_SUBNET_OPCODE 457 #define VAR_MAX_CLIENT_SUBNET_IPV4 458 #define VAR_MAX_CLIENT_SUBNET_IPV6 459 #define VAR_MIN_CLIENT_SUBNET_IPV4 460 #define VAR_MIN_CLIENT_SUBNET_IPV6 461 #define VAR_MAX_ECS_TREE_SIZE_IPV4 462 #define VAR_MAX_ECS_TREE_SIZE_IPV6 463 #define VAR_CAPS_WHITELIST 464 #define VAR_CACHE_MAX_NEGATIVE_TTL 465 #define VAR_PERMIT_SMALL_HOLDDOWN 466 #define VAR_QNAME_MINIMISATION 467 #define VAR_QNAME_MINIMISATION_STRICT 468 #define VAR_IP_FREEBIND 469 #define VAR_DEFINE_TAG 470 #define VAR_LOCAL_ZONE_TAG 471 #define VAR_ACCESS_CONTROL_TAG 472 #define VAR_LOCAL_ZONE_OVERRIDE 473 #define VAR_ACCESS_CONTROL_TAG_ACTION 474 #define VAR_ACCESS_CONTROL_TAG_DATA 475 #define VAR_VIEW 476 #define VAR_ACCESS_CONTROL_VIEW 477 #define VAR_VIEW_FIRST 478 #define VAR_SERVE_EXPIRED 479 #define VAR_SERVE_EXPIRED_TTL 480 #define VAR_SERVE_EXPIRED_TTL_RESET 481 #define VAR_SERVE_EXPIRED_REPLY_TTL 482 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 483 #define VAR_SERVE_ORIGINAL_TTL 484 #define VAR_FAKE_DSA 485 #define VAR_FAKE_SHA1 486 #define VAR_LOG_IDENTITY 487 #define VAR_HIDE_TRUSTANCHOR 488 #define VAR_TRUST_ANCHOR_SIGNALING 489 #define VAR_AGGRESSIVE_NSEC 490 #define VAR_USE_SYSTEMD 491 #define VAR_SHM_ENABLE 492 #define VAR_SHM_KEY 493 #define VAR_ROOT_KEY_SENTINEL 494 #define VAR_DNSCRYPT 495 #define VAR_DNSCRYPT_ENABLE 496 #define VAR_DNSCRYPT_PORT 497 #define VAR_DNSCRYPT_PROVIDER 498 #define VAR_DNSCRYPT_SECRET_KEY 499 #define VAR_DNSCRYPT_PROVIDER_CERT 500 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 501 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 502 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 503 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 504 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 505 #define VAR_PAD_RESPONSES 506 #define VAR_PAD_RESPONSES_BLOCK_SIZE 507 #define VAR_PAD_QUERIES 508 #define VAR_PAD_QUERIES_BLOCK_SIZE 509 #define VAR_IPSECMOD_ENABLED 510 #define VAR_IPSECMOD_HOOK 511 #define VAR_IPSECMOD_IGNORE_BOGUS 512 #define VAR_IPSECMOD_MAX_TTL 513 #define VAR_IPSECMOD_WHITELIST 514 #define VAR_IPSECMOD_STRICT 515 #define VAR_CACHEDB 516 #define VAR_CACHEDB_BACKEND 517 #define VAR_CACHEDB_SECRETSEED 518 #define VAR_CACHEDB_REDISHOST 519 #define VAR_CACHEDB_REDISPORT 520 #define VAR_CACHEDB_REDISTIMEOUT 521 #define VAR_CACHEDB_REDISEXPIRERECORDS 522 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 523 #define VAR_FOR_UPSTREAM 524 #define VAR_AUTH_ZONE 525 #define VAR_ZONEFILE 526 #define VAR_MASTER 527 #define VAR_URL 528 #define VAR_FOR_DOWNSTREAM 529 #define VAR_FALLBACK_ENABLED 530 #define VAR_TLS_ADDITIONAL_PORT 531 #define VAR_LOW_RTT 532 #define VAR_LOW_RTT_PERMIL 533 #define VAR_FAST_SERVER_PERMIL 534 #define VAR_FAST_SERVER_NUM 535 #define VAR_ALLOW_NOTIFY 536 #define VAR_TLS_WIN_CERT 537 #define VAR_TCP_CONNECTION_LIMIT 538 #define VAR_FORWARD_NO_CACHE 539 #define VAR_STUB_NO_CACHE 540 #define VAR_LOG_SERVFAIL 541 #define VAR_DENY_ANY 542 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 543 #define VAR_LOG_TAG_QUERYREPLY 544 #define VAR_STREAM_WAIT_SIZE 545 #define VAR_TLS_CIPHERS 546 #define VAR_TLS_CIPHERSUITES 547 #define VAR_TLS_USE_SNI 548 #define VAR_IPSET 549 #define VAR_IPSET_NAME_V4 550 #define VAR_IPSET_NAME_V6 551 #define VAR_TLS_SESSION_TICKET_KEYS 552 #define VAR_RPZ 553 #define VAR_TAGS 554 #define VAR_RPZ_ACTION_OVERRIDE 555 #define VAR_RPZ_CNAME_OVERRIDE 556 #define VAR_RPZ_LOG 557 #define VAR_RPZ_LOG_NAME 558 #define VAR_DYNLIB 559 #define VAR_DYNLIB_FILE 560 #define VAR_EDNS_CLIENT_STRING 561 #define VAR_EDNS_CLIENT_STRING_OPCODE 562 #define VAR_NSID 563 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 66 "util/configparser.y" char* str; #line 772 "util/configparser.c" }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ /* Symbol kind. */ enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, YYSYMBOL_YYEOF = 0, /* "end of file" */ YYSYMBOL_YYerror = 1, /* error */ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ YYSYMBOL_SPACE = 3, /* SPACE */ YYSYMBOL_LETTER = 4, /* LETTER */ YYSYMBOL_NEWLINE = 5, /* NEWLINE */ YYSYMBOL_COMMENT = 6, /* COMMENT */ YYSYMBOL_COLON = 7, /* COLON */ YYSYMBOL_ANY = 8, /* ANY */ YYSYMBOL_ZONESTR = 9, /* ZONESTR */ YYSYMBOL_STRING_ARG = 10, /* STRING_ARG */ YYSYMBOL_VAR_FORCE_TOPLEVEL = 11, /* VAR_FORCE_TOPLEVEL */ YYSYMBOL_VAR_SERVER = 12, /* VAR_SERVER */ YYSYMBOL_VAR_VERBOSITY = 13, /* VAR_VERBOSITY */ YYSYMBOL_VAR_NUM_THREADS = 14, /* VAR_NUM_THREADS */ YYSYMBOL_VAR_PORT = 15, /* VAR_PORT */ YYSYMBOL_VAR_OUTGOING_RANGE = 16, /* VAR_OUTGOING_RANGE */ YYSYMBOL_VAR_INTERFACE = 17, /* VAR_INTERFACE */ YYSYMBOL_VAR_PREFER_IP4 = 18, /* VAR_PREFER_IP4 */ YYSYMBOL_VAR_DO_IP4 = 19, /* VAR_DO_IP4 */ YYSYMBOL_VAR_DO_IP6 = 20, /* VAR_DO_IP6 */ YYSYMBOL_VAR_PREFER_IP6 = 21, /* VAR_PREFER_IP6 */ YYSYMBOL_VAR_DO_UDP = 22, /* VAR_DO_UDP */ YYSYMBOL_VAR_DO_TCP = 23, /* VAR_DO_TCP */ YYSYMBOL_VAR_TCP_MSS = 24, /* VAR_TCP_MSS */ YYSYMBOL_VAR_OUTGOING_TCP_MSS = 25, /* VAR_OUTGOING_TCP_MSS */ YYSYMBOL_VAR_TCP_IDLE_TIMEOUT = 26, /* VAR_TCP_IDLE_TIMEOUT */ YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE = 27, /* VAR_EDNS_TCP_KEEPALIVE */ YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 28, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT */ YYSYMBOL_VAR_CHROOT = 29, /* VAR_CHROOT */ YYSYMBOL_VAR_USERNAME = 30, /* VAR_USERNAME */ YYSYMBOL_VAR_DIRECTORY = 31, /* VAR_DIRECTORY */ YYSYMBOL_VAR_LOGFILE = 32, /* VAR_LOGFILE */ YYSYMBOL_VAR_PIDFILE = 33, /* VAR_PIDFILE */ YYSYMBOL_VAR_MSG_CACHE_SIZE = 34, /* VAR_MSG_CACHE_SIZE */ YYSYMBOL_VAR_MSG_CACHE_SLABS = 35, /* VAR_MSG_CACHE_SLABS */ YYSYMBOL_VAR_NUM_QUERIES_PER_THREAD = 36, /* VAR_NUM_QUERIES_PER_THREAD */ YYSYMBOL_VAR_RRSET_CACHE_SIZE = 37, /* VAR_RRSET_CACHE_SIZE */ YYSYMBOL_VAR_RRSET_CACHE_SLABS = 38, /* VAR_RRSET_CACHE_SLABS */ YYSYMBOL_VAR_OUTGOING_NUM_TCP = 39, /* VAR_OUTGOING_NUM_TCP */ YYSYMBOL_VAR_INFRA_HOST_TTL = 40, /* VAR_INFRA_HOST_TTL */ YYSYMBOL_VAR_INFRA_LAME_TTL = 41, /* VAR_INFRA_LAME_TTL */ YYSYMBOL_VAR_INFRA_CACHE_SLABS = 42, /* VAR_INFRA_CACHE_SLABS */ YYSYMBOL_VAR_INFRA_CACHE_NUMHOSTS = 43, /* VAR_INFRA_CACHE_NUMHOSTS */ YYSYMBOL_VAR_INFRA_CACHE_LAME_SIZE = 44, /* VAR_INFRA_CACHE_LAME_SIZE */ YYSYMBOL_VAR_NAME = 45, /* VAR_NAME */ YYSYMBOL_VAR_STUB_ZONE = 46, /* VAR_STUB_ZONE */ YYSYMBOL_VAR_STUB_HOST = 47, /* VAR_STUB_HOST */ YYSYMBOL_VAR_STUB_ADDR = 48, /* VAR_STUB_ADDR */ YYSYMBOL_VAR_TARGET_FETCH_POLICY = 49, /* VAR_TARGET_FETCH_POLICY */ YYSYMBOL_VAR_HARDEN_SHORT_BUFSIZE = 50, /* VAR_HARDEN_SHORT_BUFSIZE */ YYSYMBOL_VAR_HARDEN_LARGE_QUERIES = 51, /* VAR_HARDEN_LARGE_QUERIES */ YYSYMBOL_VAR_FORWARD_ZONE = 52, /* VAR_FORWARD_ZONE */ YYSYMBOL_VAR_FORWARD_HOST = 53, /* VAR_FORWARD_HOST */ YYSYMBOL_VAR_FORWARD_ADDR = 54, /* VAR_FORWARD_ADDR */ YYSYMBOL_VAR_DO_NOT_QUERY_ADDRESS = 55, /* VAR_DO_NOT_QUERY_ADDRESS */ YYSYMBOL_VAR_HIDE_IDENTITY = 56, /* VAR_HIDE_IDENTITY */ YYSYMBOL_VAR_HIDE_VERSION = 57, /* VAR_HIDE_VERSION */ YYSYMBOL_VAR_IDENTITY = 58, /* VAR_IDENTITY */ YYSYMBOL_VAR_VERSION = 59, /* VAR_VERSION */ YYSYMBOL_VAR_HARDEN_GLUE = 60, /* VAR_HARDEN_GLUE */ YYSYMBOL_VAR_MODULE_CONF = 61, /* VAR_MODULE_CONF */ YYSYMBOL_VAR_TRUST_ANCHOR_FILE = 62, /* VAR_TRUST_ANCHOR_FILE */ YYSYMBOL_VAR_TRUST_ANCHOR = 63, /* VAR_TRUST_ANCHOR */ YYSYMBOL_VAR_VAL_OVERRIDE_DATE = 64, /* VAR_VAL_OVERRIDE_DATE */ YYSYMBOL_VAR_BOGUS_TTL = 65, /* VAR_BOGUS_TTL */ YYSYMBOL_VAR_VAL_CLEAN_ADDITIONAL = 66, /* VAR_VAL_CLEAN_ADDITIONAL */ YYSYMBOL_VAR_VAL_PERMISSIVE_MODE = 67, /* VAR_VAL_PERMISSIVE_MODE */ YYSYMBOL_VAR_INCOMING_NUM_TCP = 68, /* VAR_INCOMING_NUM_TCP */ YYSYMBOL_VAR_MSG_BUFFER_SIZE = 69, /* VAR_MSG_BUFFER_SIZE */ YYSYMBOL_VAR_KEY_CACHE_SIZE = 70, /* VAR_KEY_CACHE_SIZE */ YYSYMBOL_VAR_KEY_CACHE_SLABS = 71, /* VAR_KEY_CACHE_SLABS */ YYSYMBOL_VAR_TRUSTED_KEYS_FILE = 72, /* VAR_TRUSTED_KEYS_FILE */ YYSYMBOL_VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 73, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS */ YYSYMBOL_VAR_USE_SYSLOG = 74, /* VAR_USE_SYSLOG */ YYSYMBOL_VAR_OUTGOING_INTERFACE = 75, /* VAR_OUTGOING_INTERFACE */ YYSYMBOL_VAR_ROOT_HINTS = 76, /* VAR_ROOT_HINTS */ YYSYMBOL_VAR_DO_NOT_QUERY_LOCALHOST = 77, /* VAR_DO_NOT_QUERY_LOCALHOST */ YYSYMBOL_VAR_CACHE_MAX_TTL = 78, /* VAR_CACHE_MAX_TTL */ YYSYMBOL_VAR_HARDEN_DNSSEC_STRIPPED = 79, /* VAR_HARDEN_DNSSEC_STRIPPED */ YYSYMBOL_VAR_ACCESS_CONTROL = 80, /* VAR_ACCESS_CONTROL */ YYSYMBOL_VAR_LOCAL_ZONE = 81, /* VAR_LOCAL_ZONE */ YYSYMBOL_VAR_LOCAL_DATA = 82, /* VAR_LOCAL_DATA */ YYSYMBOL_VAR_INTERFACE_AUTOMATIC = 83, /* VAR_INTERFACE_AUTOMATIC */ YYSYMBOL_VAR_STATISTICS_INTERVAL = 84, /* VAR_STATISTICS_INTERVAL */ YYSYMBOL_VAR_DO_DAEMONIZE = 85, /* VAR_DO_DAEMONIZE */ YYSYMBOL_VAR_USE_CAPS_FOR_ID = 86, /* VAR_USE_CAPS_FOR_ID */ YYSYMBOL_VAR_STATISTICS_CUMULATIVE = 87, /* VAR_STATISTICS_CUMULATIVE */ YYSYMBOL_VAR_OUTGOING_PORT_PERMIT = 88, /* VAR_OUTGOING_PORT_PERMIT */ YYSYMBOL_VAR_OUTGOING_PORT_AVOID = 89, /* VAR_OUTGOING_PORT_AVOID */ YYSYMBOL_VAR_DLV_ANCHOR_FILE = 90, /* VAR_DLV_ANCHOR_FILE */ YYSYMBOL_VAR_DLV_ANCHOR = 91, /* VAR_DLV_ANCHOR */ YYSYMBOL_VAR_NEG_CACHE_SIZE = 92, /* VAR_NEG_CACHE_SIZE */ YYSYMBOL_VAR_HARDEN_REFERRAL_PATH = 93, /* VAR_HARDEN_REFERRAL_PATH */ YYSYMBOL_VAR_PRIVATE_ADDRESS = 94, /* VAR_PRIVATE_ADDRESS */ YYSYMBOL_VAR_PRIVATE_DOMAIN = 95, /* VAR_PRIVATE_DOMAIN */ YYSYMBOL_VAR_REMOTE_CONTROL = 96, /* VAR_REMOTE_CONTROL */ YYSYMBOL_VAR_CONTROL_ENABLE = 97, /* VAR_CONTROL_ENABLE */ YYSYMBOL_VAR_CONTROL_INTERFACE = 98, /* VAR_CONTROL_INTERFACE */ YYSYMBOL_VAR_CONTROL_PORT = 99, /* VAR_CONTROL_PORT */ YYSYMBOL_VAR_SERVER_KEY_FILE = 100, /* VAR_SERVER_KEY_FILE */ YYSYMBOL_VAR_SERVER_CERT_FILE = 101, /* VAR_SERVER_CERT_FILE */ YYSYMBOL_VAR_CONTROL_KEY_FILE = 102, /* VAR_CONTROL_KEY_FILE */ YYSYMBOL_VAR_CONTROL_CERT_FILE = 103, /* VAR_CONTROL_CERT_FILE */ YYSYMBOL_VAR_CONTROL_USE_CERT = 104, /* VAR_CONTROL_USE_CERT */ YYSYMBOL_VAR_EXTENDED_STATISTICS = 105, /* VAR_EXTENDED_STATISTICS */ YYSYMBOL_VAR_LOCAL_DATA_PTR = 106, /* VAR_LOCAL_DATA_PTR */ YYSYMBOL_VAR_JOSTLE_TIMEOUT = 107, /* VAR_JOSTLE_TIMEOUT */ YYSYMBOL_VAR_STUB_PRIME = 108, /* VAR_STUB_PRIME */ YYSYMBOL_VAR_UNWANTED_REPLY_THRESHOLD = 109, /* VAR_UNWANTED_REPLY_THRESHOLD */ YYSYMBOL_VAR_LOG_TIME_ASCII = 110, /* VAR_LOG_TIME_ASCII */ YYSYMBOL_VAR_DOMAIN_INSECURE = 111, /* VAR_DOMAIN_INSECURE */ YYSYMBOL_VAR_PYTHON = 112, /* VAR_PYTHON */ YYSYMBOL_VAR_PYTHON_SCRIPT = 113, /* VAR_PYTHON_SCRIPT */ YYSYMBOL_VAR_VAL_SIG_SKEW_MIN = 114, /* VAR_VAL_SIG_SKEW_MIN */ YYSYMBOL_VAR_VAL_SIG_SKEW_MAX = 115, /* VAR_VAL_SIG_SKEW_MAX */ YYSYMBOL_VAR_CACHE_MIN_TTL = 116, /* VAR_CACHE_MIN_TTL */ YYSYMBOL_VAR_VAL_LOG_LEVEL = 117, /* VAR_VAL_LOG_LEVEL */ YYSYMBOL_VAR_AUTO_TRUST_ANCHOR_FILE = 118, /* VAR_AUTO_TRUST_ANCHOR_FILE */ YYSYMBOL_VAR_KEEP_MISSING = 119, /* VAR_KEEP_MISSING */ YYSYMBOL_VAR_ADD_HOLDDOWN = 120, /* VAR_ADD_HOLDDOWN */ YYSYMBOL_VAR_DEL_HOLDDOWN = 121, /* VAR_DEL_HOLDDOWN */ YYSYMBOL_VAR_SO_RCVBUF = 122, /* VAR_SO_RCVBUF */ YYSYMBOL_VAR_EDNS_BUFFER_SIZE = 123, /* VAR_EDNS_BUFFER_SIZE */ YYSYMBOL_VAR_PREFETCH = 124, /* VAR_PREFETCH */ YYSYMBOL_VAR_PREFETCH_KEY = 125, /* VAR_PREFETCH_KEY */ YYSYMBOL_VAR_SO_SNDBUF = 126, /* VAR_SO_SNDBUF */ YYSYMBOL_VAR_SO_REUSEPORT = 127, /* VAR_SO_REUSEPORT */ YYSYMBOL_VAR_HARDEN_BELOW_NXDOMAIN = 128, /* VAR_HARDEN_BELOW_NXDOMAIN */ YYSYMBOL_VAR_IGNORE_CD_FLAG = 129, /* VAR_IGNORE_CD_FLAG */ YYSYMBOL_VAR_LOG_QUERIES = 130, /* VAR_LOG_QUERIES */ YYSYMBOL_VAR_LOG_REPLIES = 131, /* VAR_LOG_REPLIES */ YYSYMBOL_VAR_LOG_LOCAL_ACTIONS = 132, /* VAR_LOG_LOCAL_ACTIONS */ YYSYMBOL_VAR_TCP_UPSTREAM = 133, /* VAR_TCP_UPSTREAM */ YYSYMBOL_VAR_SSL_UPSTREAM = 134, /* VAR_SSL_UPSTREAM */ YYSYMBOL_VAR_SSL_SERVICE_KEY = 135, /* VAR_SSL_SERVICE_KEY */ YYSYMBOL_VAR_SSL_SERVICE_PEM = 136, /* VAR_SSL_SERVICE_PEM */ YYSYMBOL_VAR_SSL_PORT = 137, /* VAR_SSL_PORT */ YYSYMBOL_VAR_FORWARD_FIRST = 138, /* VAR_FORWARD_FIRST */ YYSYMBOL_VAR_STUB_SSL_UPSTREAM = 139, /* VAR_STUB_SSL_UPSTREAM */ YYSYMBOL_VAR_FORWARD_SSL_UPSTREAM = 140, /* VAR_FORWARD_SSL_UPSTREAM */ YYSYMBOL_VAR_TLS_CERT_BUNDLE = 141, /* VAR_TLS_CERT_BUNDLE */ YYSYMBOL_VAR_HTTPS_PORT = 142, /* VAR_HTTPS_PORT */ YYSYMBOL_VAR_HTTP_ENDPOINT = 143, /* VAR_HTTP_ENDPOINT */ YYSYMBOL_VAR_HTTP_MAX_STREAMS = 144, /* VAR_HTTP_MAX_STREAMS */ YYSYMBOL_VAR_HTTP_QUERY_BUFFER_SIZE = 145, /* VAR_HTTP_QUERY_BUFFER_SIZE */ YYSYMBOL_VAR_HTTP_RESPONSE_BUFFER_SIZE = 146, /* VAR_HTTP_RESPONSE_BUFFER_SIZE */ YYSYMBOL_VAR_HTTP_NODELAY = 147, /* VAR_HTTP_NODELAY */ YYSYMBOL_VAR_HTTP_NOTLS_DOWNSTREAM = 148, /* VAR_HTTP_NOTLS_DOWNSTREAM */ YYSYMBOL_VAR_STUB_FIRST = 149, /* VAR_STUB_FIRST */ YYSYMBOL_VAR_MINIMAL_RESPONSES = 150, /* VAR_MINIMAL_RESPONSES */ YYSYMBOL_VAR_RRSET_ROUNDROBIN = 151, /* VAR_RRSET_ROUNDROBIN */ YYSYMBOL_VAR_MAX_UDP_SIZE = 152, /* VAR_MAX_UDP_SIZE */ YYSYMBOL_VAR_DELAY_CLOSE = 153, /* VAR_DELAY_CLOSE */ YYSYMBOL_VAR_UDP_CONNECT = 154, /* VAR_UDP_CONNECT */ YYSYMBOL_VAR_UNBLOCK_LAN_ZONES = 155, /* VAR_UNBLOCK_LAN_ZONES */ YYSYMBOL_VAR_INSECURE_LAN_ZONES = 156, /* VAR_INSECURE_LAN_ZONES */ YYSYMBOL_VAR_INFRA_CACHE_MIN_RTT = 157, /* VAR_INFRA_CACHE_MIN_RTT */ YYSYMBOL_VAR_INFRA_KEEP_PROBING = 158, /* VAR_INFRA_KEEP_PROBING */ YYSYMBOL_VAR_DNS64_PREFIX = 159, /* VAR_DNS64_PREFIX */ YYSYMBOL_VAR_DNS64_SYNTHALL = 160, /* VAR_DNS64_SYNTHALL */ YYSYMBOL_VAR_DNS64_IGNORE_AAAA = 161, /* VAR_DNS64_IGNORE_AAAA */ YYSYMBOL_VAR_DNSTAP = 162, /* VAR_DNSTAP */ YYSYMBOL_VAR_DNSTAP_ENABLE = 163, /* VAR_DNSTAP_ENABLE */ YYSYMBOL_VAR_DNSTAP_SOCKET_PATH = 164, /* VAR_DNSTAP_SOCKET_PATH */ YYSYMBOL_VAR_DNSTAP_IP = 165, /* VAR_DNSTAP_IP */ YYSYMBOL_VAR_DNSTAP_TLS = 166, /* VAR_DNSTAP_TLS */ YYSYMBOL_VAR_DNSTAP_TLS_SERVER_NAME = 167, /* VAR_DNSTAP_TLS_SERVER_NAME */ YYSYMBOL_VAR_DNSTAP_TLS_CERT_BUNDLE = 168, /* VAR_DNSTAP_TLS_CERT_BUNDLE */ YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 169, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE */ YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 170, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE */ YYSYMBOL_VAR_DNSTAP_SEND_IDENTITY = 171, /* VAR_DNSTAP_SEND_IDENTITY */ YYSYMBOL_VAR_DNSTAP_SEND_VERSION = 172, /* VAR_DNSTAP_SEND_VERSION */ YYSYMBOL_VAR_DNSTAP_BIDIRECTIONAL = 173, /* VAR_DNSTAP_BIDIRECTIONAL */ YYSYMBOL_VAR_DNSTAP_IDENTITY = 174, /* VAR_DNSTAP_IDENTITY */ YYSYMBOL_VAR_DNSTAP_VERSION = 175, /* VAR_DNSTAP_VERSION */ YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 176, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES */ YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 177, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES */ YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 178, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES */ YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 179, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES */ YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 180, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES */ YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 181, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES */ YYSYMBOL_VAR_RESPONSE_IP_TAG = 182, /* VAR_RESPONSE_IP_TAG */ YYSYMBOL_VAR_RESPONSE_IP = 183, /* VAR_RESPONSE_IP */ YYSYMBOL_VAR_RESPONSE_IP_DATA = 184, /* VAR_RESPONSE_IP_DATA */ YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 185, /* VAR_HARDEN_ALGO_DOWNGRADE */ YYSYMBOL_VAR_IP_TRANSPARENT = 186, /* VAR_IP_TRANSPARENT */ YYSYMBOL_VAR_IP_DSCP = 187, /* VAR_IP_DSCP */ YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 188, /* VAR_DISABLE_DNSSEC_LAME_CHECK */ YYSYMBOL_VAR_IP_RATELIMIT = 189, /* VAR_IP_RATELIMIT */ YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 190, /* VAR_IP_RATELIMIT_SLABS */ YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 191, /* VAR_IP_RATELIMIT_SIZE */ YYSYMBOL_VAR_RATELIMIT = 192, /* VAR_RATELIMIT */ YYSYMBOL_VAR_RATELIMIT_SLABS = 193, /* VAR_RATELIMIT_SLABS */ YYSYMBOL_VAR_RATELIMIT_SIZE = 194, /* VAR_RATELIMIT_SIZE */ YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 195, /* VAR_RATELIMIT_FOR_DOMAIN */ YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 196, /* VAR_RATELIMIT_BELOW_DOMAIN */ YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 197, /* VAR_IP_RATELIMIT_FACTOR */ YYSYMBOL_VAR_RATELIMIT_FACTOR = 198, /* VAR_RATELIMIT_FACTOR */ YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 199, /* VAR_SEND_CLIENT_SUBNET */ YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 200, /* VAR_CLIENT_SUBNET_ZONE */ YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 201, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */ YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 202, /* VAR_CLIENT_SUBNET_OPCODE */ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 203, /* VAR_MAX_CLIENT_SUBNET_IPV4 */ YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 204, /* VAR_MAX_CLIENT_SUBNET_IPV6 */ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 205, /* VAR_MIN_CLIENT_SUBNET_IPV4 */ YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 206, /* VAR_MIN_CLIENT_SUBNET_IPV6 */ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 207, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */ YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 208, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */ YYSYMBOL_VAR_CAPS_WHITELIST = 209, /* VAR_CAPS_WHITELIST */ YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 210, /* VAR_CACHE_MAX_NEGATIVE_TTL */ YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 211, /* VAR_PERMIT_SMALL_HOLDDOWN */ YYSYMBOL_VAR_QNAME_MINIMISATION = 212, /* VAR_QNAME_MINIMISATION */ YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 213, /* VAR_QNAME_MINIMISATION_STRICT */ YYSYMBOL_VAR_IP_FREEBIND = 214, /* VAR_IP_FREEBIND */ YYSYMBOL_VAR_DEFINE_TAG = 215, /* VAR_DEFINE_TAG */ YYSYMBOL_VAR_LOCAL_ZONE_TAG = 216, /* VAR_LOCAL_ZONE_TAG */ YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 217, /* VAR_ACCESS_CONTROL_TAG */ YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 218, /* VAR_LOCAL_ZONE_OVERRIDE */ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 219, /* VAR_ACCESS_CONTROL_TAG_ACTION */ YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 220, /* VAR_ACCESS_CONTROL_TAG_DATA */ YYSYMBOL_VAR_VIEW = 221, /* VAR_VIEW */ YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 222, /* VAR_ACCESS_CONTROL_VIEW */ YYSYMBOL_VAR_VIEW_FIRST = 223, /* VAR_VIEW_FIRST */ YYSYMBOL_VAR_SERVE_EXPIRED = 224, /* VAR_SERVE_EXPIRED */ YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 225, /* VAR_SERVE_EXPIRED_TTL */ YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 226, /* VAR_SERVE_EXPIRED_TTL_RESET */ YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 227, /* VAR_SERVE_EXPIRED_REPLY_TTL */ YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 228, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */ YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 229, /* VAR_SERVE_ORIGINAL_TTL */ YYSYMBOL_VAR_FAKE_DSA = 230, /* VAR_FAKE_DSA */ YYSYMBOL_VAR_FAKE_SHA1 = 231, /* VAR_FAKE_SHA1 */ YYSYMBOL_VAR_LOG_IDENTITY = 232, /* VAR_LOG_IDENTITY */ YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 233, /* VAR_HIDE_TRUSTANCHOR */ YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 234, /* VAR_TRUST_ANCHOR_SIGNALING */ YYSYMBOL_VAR_AGGRESSIVE_NSEC = 235, /* VAR_AGGRESSIVE_NSEC */ YYSYMBOL_VAR_USE_SYSTEMD = 236, /* VAR_USE_SYSTEMD */ YYSYMBOL_VAR_SHM_ENABLE = 237, /* VAR_SHM_ENABLE */ YYSYMBOL_VAR_SHM_KEY = 238, /* VAR_SHM_KEY */ YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 239, /* VAR_ROOT_KEY_SENTINEL */ YYSYMBOL_VAR_DNSCRYPT = 240, /* VAR_DNSCRYPT */ YYSYMBOL_VAR_DNSCRYPT_ENABLE = 241, /* VAR_DNSCRYPT_ENABLE */ YYSYMBOL_VAR_DNSCRYPT_PORT = 242, /* VAR_DNSCRYPT_PORT */ YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 243, /* VAR_DNSCRYPT_PROVIDER */ YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 244, /* VAR_DNSCRYPT_SECRET_KEY */ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 245, /* VAR_DNSCRYPT_PROVIDER_CERT */ YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 246, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 247, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */ YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 248, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 249, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */ YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 250, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */ YYSYMBOL_VAR_PAD_RESPONSES = 251, /* VAR_PAD_RESPONSES */ YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 252, /* VAR_PAD_RESPONSES_BLOCK_SIZE */ YYSYMBOL_VAR_PAD_QUERIES = 253, /* VAR_PAD_QUERIES */ YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 254, /* VAR_PAD_QUERIES_BLOCK_SIZE */ YYSYMBOL_VAR_IPSECMOD_ENABLED = 255, /* VAR_IPSECMOD_ENABLED */ YYSYMBOL_VAR_IPSECMOD_HOOK = 256, /* VAR_IPSECMOD_HOOK */ YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 257, /* VAR_IPSECMOD_IGNORE_BOGUS */ YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 258, /* VAR_IPSECMOD_MAX_TTL */ YYSYMBOL_VAR_IPSECMOD_WHITELIST = 259, /* VAR_IPSECMOD_WHITELIST */ YYSYMBOL_VAR_IPSECMOD_STRICT = 260, /* VAR_IPSECMOD_STRICT */ YYSYMBOL_VAR_CACHEDB = 261, /* VAR_CACHEDB */ YYSYMBOL_VAR_CACHEDB_BACKEND = 262, /* VAR_CACHEDB_BACKEND */ YYSYMBOL_VAR_CACHEDB_SECRETSEED = 263, /* VAR_CACHEDB_SECRETSEED */ YYSYMBOL_VAR_CACHEDB_REDISHOST = 264, /* VAR_CACHEDB_REDISHOST */ YYSYMBOL_VAR_CACHEDB_REDISPORT = 265, /* VAR_CACHEDB_REDISPORT */ YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 266, /* VAR_CACHEDB_REDISTIMEOUT */ YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 267, /* VAR_CACHEDB_REDISEXPIRERECORDS */ YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 268, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */ YYSYMBOL_VAR_FOR_UPSTREAM = 269, /* VAR_FOR_UPSTREAM */ YYSYMBOL_VAR_AUTH_ZONE = 270, /* VAR_AUTH_ZONE */ YYSYMBOL_VAR_ZONEFILE = 271, /* VAR_ZONEFILE */ YYSYMBOL_VAR_MASTER = 272, /* VAR_MASTER */ YYSYMBOL_VAR_URL = 273, /* VAR_URL */ YYSYMBOL_VAR_FOR_DOWNSTREAM = 274, /* VAR_FOR_DOWNSTREAM */ YYSYMBOL_VAR_FALLBACK_ENABLED = 275, /* VAR_FALLBACK_ENABLED */ YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 276, /* VAR_TLS_ADDITIONAL_PORT */ YYSYMBOL_VAR_LOW_RTT = 277, /* VAR_LOW_RTT */ YYSYMBOL_VAR_LOW_RTT_PERMIL = 278, /* VAR_LOW_RTT_PERMIL */ YYSYMBOL_VAR_FAST_SERVER_PERMIL = 279, /* VAR_FAST_SERVER_PERMIL */ YYSYMBOL_VAR_FAST_SERVER_NUM = 280, /* VAR_FAST_SERVER_NUM */ YYSYMBOL_VAR_ALLOW_NOTIFY = 281, /* VAR_ALLOW_NOTIFY */ YYSYMBOL_VAR_TLS_WIN_CERT = 282, /* VAR_TLS_WIN_CERT */ YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 283, /* VAR_TCP_CONNECTION_LIMIT */ YYSYMBOL_VAR_FORWARD_NO_CACHE = 284, /* VAR_FORWARD_NO_CACHE */ YYSYMBOL_VAR_STUB_NO_CACHE = 285, /* VAR_STUB_NO_CACHE */ YYSYMBOL_VAR_LOG_SERVFAIL = 286, /* VAR_LOG_SERVFAIL */ YYSYMBOL_VAR_DENY_ANY = 287, /* VAR_DENY_ANY */ YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 288, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 289, /* VAR_LOG_TAG_QUERYREPLY */ YYSYMBOL_VAR_STREAM_WAIT_SIZE = 290, /* VAR_STREAM_WAIT_SIZE */ YYSYMBOL_VAR_TLS_CIPHERS = 291, /* VAR_TLS_CIPHERS */ YYSYMBOL_VAR_TLS_CIPHERSUITES = 292, /* VAR_TLS_CIPHERSUITES */ YYSYMBOL_VAR_TLS_USE_SNI = 293, /* VAR_TLS_USE_SNI */ YYSYMBOL_VAR_IPSET = 294, /* VAR_IPSET */ YYSYMBOL_VAR_IPSET_NAME_V4 = 295, /* VAR_IPSET_NAME_V4 */ YYSYMBOL_VAR_IPSET_NAME_V6 = 296, /* VAR_IPSET_NAME_V6 */ YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 297, /* VAR_TLS_SESSION_TICKET_KEYS */ YYSYMBOL_VAR_RPZ = 298, /* VAR_RPZ */ YYSYMBOL_VAR_TAGS = 299, /* VAR_TAGS */ YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 300, /* VAR_RPZ_ACTION_OVERRIDE */ YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 301, /* VAR_RPZ_CNAME_OVERRIDE */ YYSYMBOL_VAR_RPZ_LOG = 302, /* VAR_RPZ_LOG */ YYSYMBOL_VAR_RPZ_LOG_NAME = 303, /* VAR_RPZ_LOG_NAME */ YYSYMBOL_VAR_DYNLIB = 304, /* VAR_DYNLIB */ YYSYMBOL_VAR_DYNLIB_FILE = 305, /* VAR_DYNLIB_FILE */ YYSYMBOL_VAR_EDNS_CLIENT_STRING = 306, /* VAR_EDNS_CLIENT_STRING */ YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 307, /* VAR_EDNS_CLIENT_STRING_OPCODE */ YYSYMBOL_VAR_NSID = 308, /* VAR_NSID */ YYSYMBOL_YYACCEPT = 309, /* $accept */ YYSYMBOL_toplevelvars = 310, /* toplevelvars */ YYSYMBOL_toplevelvar = 311, /* toplevelvar */ YYSYMBOL_force_toplevel = 312, /* force_toplevel */ YYSYMBOL_serverstart = 313, /* serverstart */ YYSYMBOL_contents_server = 314, /* contents_server */ YYSYMBOL_content_server = 315, /* content_server */ YYSYMBOL_stubstart = 316, /* stubstart */ YYSYMBOL_contents_stub = 317, /* contents_stub */ YYSYMBOL_content_stub = 318, /* content_stub */ YYSYMBOL_forwardstart = 319, /* forwardstart */ YYSYMBOL_contents_forward = 320, /* contents_forward */ YYSYMBOL_content_forward = 321, /* content_forward */ YYSYMBOL_viewstart = 322, /* viewstart */ YYSYMBOL_contents_view = 323, /* contents_view */ YYSYMBOL_content_view = 324, /* content_view */ YYSYMBOL_authstart = 325, /* authstart */ YYSYMBOL_contents_auth = 326, /* contents_auth */ YYSYMBOL_content_auth = 327, /* content_auth */ YYSYMBOL_rpz_tag = 328, /* rpz_tag */ YYSYMBOL_rpz_action_override = 329, /* rpz_action_override */ YYSYMBOL_rpz_cname_override = 330, /* rpz_cname_override */ YYSYMBOL_rpz_log = 331, /* rpz_log */ YYSYMBOL_rpz_log_name = 332, /* rpz_log_name */ YYSYMBOL_rpzstart = 333, /* rpzstart */ YYSYMBOL_contents_rpz = 334, /* contents_rpz */ YYSYMBOL_content_rpz = 335, /* content_rpz */ YYSYMBOL_server_num_threads = 336, /* server_num_threads */ YYSYMBOL_server_verbosity = 337, /* server_verbosity */ YYSYMBOL_server_statistics_interval = 338, /* server_statistics_interval */ YYSYMBOL_server_statistics_cumulative = 339, /* server_statistics_cumulative */ YYSYMBOL_server_extended_statistics = 340, /* server_extended_statistics */ YYSYMBOL_server_shm_enable = 341, /* server_shm_enable */ YYSYMBOL_server_shm_key = 342, /* server_shm_key */ YYSYMBOL_server_port = 343, /* server_port */ YYSYMBOL_server_send_client_subnet = 344, /* server_send_client_subnet */ YYSYMBOL_server_client_subnet_zone = 345, /* server_client_subnet_zone */ YYSYMBOL_server_client_subnet_always_forward = 346, /* server_client_subnet_always_forward */ YYSYMBOL_server_client_subnet_opcode = 347, /* server_client_subnet_opcode */ YYSYMBOL_server_max_client_subnet_ipv4 = 348, /* server_max_client_subnet_ipv4 */ YYSYMBOL_server_max_client_subnet_ipv6 = 349, /* server_max_client_subnet_ipv6 */ YYSYMBOL_server_min_client_subnet_ipv4 = 350, /* server_min_client_subnet_ipv4 */ YYSYMBOL_server_min_client_subnet_ipv6 = 351, /* server_min_client_subnet_ipv6 */ YYSYMBOL_server_max_ecs_tree_size_ipv4 = 352, /* server_max_ecs_tree_size_ipv4 */ YYSYMBOL_server_max_ecs_tree_size_ipv6 = 353, /* server_max_ecs_tree_size_ipv6 */ YYSYMBOL_server_interface = 354, /* server_interface */ YYSYMBOL_server_outgoing_interface = 355, /* server_outgoing_interface */ YYSYMBOL_server_outgoing_range = 356, /* server_outgoing_range */ YYSYMBOL_server_outgoing_port_permit = 357, /* server_outgoing_port_permit */ YYSYMBOL_server_outgoing_port_avoid = 358, /* server_outgoing_port_avoid */ YYSYMBOL_server_outgoing_num_tcp = 359, /* server_outgoing_num_tcp */ YYSYMBOL_server_incoming_num_tcp = 360, /* server_incoming_num_tcp */ YYSYMBOL_server_interface_automatic = 361, /* server_interface_automatic */ YYSYMBOL_server_do_ip4 = 362, /* server_do_ip4 */ YYSYMBOL_server_do_ip6 = 363, /* server_do_ip6 */ YYSYMBOL_server_do_udp = 364, /* server_do_udp */ YYSYMBOL_server_do_tcp = 365, /* server_do_tcp */ YYSYMBOL_server_prefer_ip4 = 366, /* server_prefer_ip4 */ YYSYMBOL_server_prefer_ip6 = 367, /* server_prefer_ip6 */ YYSYMBOL_server_tcp_mss = 368, /* server_tcp_mss */ YYSYMBOL_server_outgoing_tcp_mss = 369, /* server_outgoing_tcp_mss */ YYSYMBOL_server_tcp_idle_timeout = 370, /* server_tcp_idle_timeout */ YYSYMBOL_server_tcp_keepalive = 371, /* server_tcp_keepalive */ YYSYMBOL_server_tcp_keepalive_timeout = 372, /* server_tcp_keepalive_timeout */ YYSYMBOL_server_tcp_upstream = 373, /* server_tcp_upstream */ YYSYMBOL_server_udp_upstream_without_downstream = 374, /* server_udp_upstream_without_downstream */ YYSYMBOL_server_ssl_upstream = 375, /* server_ssl_upstream */ YYSYMBOL_server_ssl_service_key = 376, /* server_ssl_service_key */ YYSYMBOL_server_ssl_service_pem = 377, /* server_ssl_service_pem */ YYSYMBOL_server_ssl_port = 378, /* server_ssl_port */ YYSYMBOL_server_tls_cert_bundle = 379, /* server_tls_cert_bundle */ YYSYMBOL_server_tls_win_cert = 380, /* server_tls_win_cert */ YYSYMBOL_server_tls_additional_port = 381, /* server_tls_additional_port */ YYSYMBOL_server_tls_ciphers = 382, /* server_tls_ciphers */ YYSYMBOL_server_tls_ciphersuites = 383, /* server_tls_ciphersuites */ YYSYMBOL_server_tls_session_ticket_keys = 384, /* server_tls_session_ticket_keys */ YYSYMBOL_server_tls_use_sni = 385, /* server_tls_use_sni */ YYSYMBOL_server_https_port = 386, /* server_https_port */ YYSYMBOL_server_http_endpoint = 387, /* server_http_endpoint */ YYSYMBOL_server_http_max_streams = 388, /* server_http_max_streams */ YYSYMBOL_server_http_query_buffer_size = 389, /* server_http_query_buffer_size */ YYSYMBOL_server_http_response_buffer_size = 390, /* server_http_response_buffer_size */ YYSYMBOL_server_http_nodelay = 391, /* server_http_nodelay */ YYSYMBOL_server_http_notls_downstream = 392, /* server_http_notls_downstream */ YYSYMBOL_server_use_systemd = 393, /* server_use_systemd */ YYSYMBOL_server_do_daemonize = 394, /* server_do_daemonize */ YYSYMBOL_server_use_syslog = 395, /* server_use_syslog */ YYSYMBOL_server_log_time_ascii = 396, /* server_log_time_ascii */ YYSYMBOL_server_log_queries = 397, /* server_log_queries */ YYSYMBOL_server_log_replies = 398, /* server_log_replies */ YYSYMBOL_server_log_tag_queryreply = 399, /* server_log_tag_queryreply */ YYSYMBOL_server_log_servfail = 400, /* server_log_servfail */ YYSYMBOL_server_log_local_actions = 401, /* server_log_local_actions */ YYSYMBOL_server_chroot = 402, /* server_chroot */ YYSYMBOL_server_username = 403, /* server_username */ YYSYMBOL_server_directory = 404, /* server_directory */ YYSYMBOL_server_logfile = 405, /* server_logfile */ YYSYMBOL_server_pidfile = 406, /* server_pidfile */ YYSYMBOL_server_root_hints = 407, /* server_root_hints */ YYSYMBOL_server_dlv_anchor_file = 408, /* server_dlv_anchor_file */ YYSYMBOL_server_dlv_anchor = 409, /* server_dlv_anchor */ YYSYMBOL_server_auto_trust_anchor_file = 410, /* server_auto_trust_anchor_file */ YYSYMBOL_server_trust_anchor_file = 411, /* server_trust_anchor_file */ YYSYMBOL_server_trusted_keys_file = 412, /* server_trusted_keys_file */ YYSYMBOL_server_trust_anchor = 413, /* server_trust_anchor */ YYSYMBOL_server_trust_anchor_signaling = 414, /* server_trust_anchor_signaling */ YYSYMBOL_server_root_key_sentinel = 415, /* server_root_key_sentinel */ YYSYMBOL_server_domain_insecure = 416, /* server_domain_insecure */ YYSYMBOL_server_hide_identity = 417, /* server_hide_identity */ YYSYMBOL_server_hide_version = 418, /* server_hide_version */ YYSYMBOL_server_hide_trustanchor = 419, /* server_hide_trustanchor */ YYSYMBOL_server_identity = 420, /* server_identity */ YYSYMBOL_server_version = 421, /* server_version */ YYSYMBOL_server_nsid = 422, /* server_nsid */ YYSYMBOL_server_so_rcvbuf = 423, /* server_so_rcvbuf */ YYSYMBOL_server_so_sndbuf = 424, /* server_so_sndbuf */ YYSYMBOL_server_so_reuseport = 425, /* server_so_reuseport */ YYSYMBOL_server_ip_transparent = 426, /* server_ip_transparent */ YYSYMBOL_server_ip_freebind = 427, /* server_ip_freebind */ YYSYMBOL_server_ip_dscp = 428, /* server_ip_dscp */ YYSYMBOL_server_stream_wait_size = 429, /* server_stream_wait_size */ YYSYMBOL_server_edns_buffer_size = 430, /* server_edns_buffer_size */ YYSYMBOL_server_msg_buffer_size = 431, /* server_msg_buffer_size */ YYSYMBOL_server_msg_cache_size = 432, /* server_msg_cache_size */ YYSYMBOL_server_msg_cache_slabs = 433, /* server_msg_cache_slabs */ YYSYMBOL_server_num_queries_per_thread = 434, /* server_num_queries_per_thread */ YYSYMBOL_server_jostle_timeout = 435, /* server_jostle_timeout */ YYSYMBOL_server_delay_close = 436, /* server_delay_close */ YYSYMBOL_server_udp_connect = 437, /* server_udp_connect */ YYSYMBOL_server_unblock_lan_zones = 438, /* server_unblock_lan_zones */ YYSYMBOL_server_insecure_lan_zones = 439, /* server_insecure_lan_zones */ YYSYMBOL_server_rrset_cache_size = 440, /* server_rrset_cache_size */ YYSYMBOL_server_rrset_cache_slabs = 441, /* server_rrset_cache_slabs */ YYSYMBOL_server_infra_host_ttl = 442, /* server_infra_host_ttl */ YYSYMBOL_server_infra_lame_ttl = 443, /* server_infra_lame_ttl */ YYSYMBOL_server_infra_cache_numhosts = 444, /* server_infra_cache_numhosts */ YYSYMBOL_server_infra_cache_lame_size = 445, /* server_infra_cache_lame_size */ YYSYMBOL_server_infra_cache_slabs = 446, /* server_infra_cache_slabs */ YYSYMBOL_server_infra_cache_min_rtt = 447, /* server_infra_cache_min_rtt */ YYSYMBOL_server_infra_keep_probing = 448, /* server_infra_keep_probing */ YYSYMBOL_server_target_fetch_policy = 449, /* server_target_fetch_policy */ YYSYMBOL_server_harden_short_bufsize = 450, /* server_harden_short_bufsize */ YYSYMBOL_server_harden_large_queries = 451, /* server_harden_large_queries */ YYSYMBOL_server_harden_glue = 452, /* server_harden_glue */ YYSYMBOL_server_harden_dnssec_stripped = 453, /* server_harden_dnssec_stripped */ YYSYMBOL_server_harden_below_nxdomain = 454, /* server_harden_below_nxdomain */ YYSYMBOL_server_harden_referral_path = 455, /* server_harden_referral_path */ YYSYMBOL_server_harden_algo_downgrade = 456, /* server_harden_algo_downgrade */ YYSYMBOL_server_use_caps_for_id = 457, /* server_use_caps_for_id */ YYSYMBOL_server_caps_whitelist = 458, /* server_caps_whitelist */ YYSYMBOL_server_private_address = 459, /* server_private_address */ YYSYMBOL_server_private_domain = 460, /* server_private_domain */ YYSYMBOL_server_prefetch = 461, /* server_prefetch */ YYSYMBOL_server_prefetch_key = 462, /* server_prefetch_key */ YYSYMBOL_server_deny_any = 463, /* server_deny_any */ YYSYMBOL_server_unwanted_reply_threshold = 464, /* server_unwanted_reply_threshold */ YYSYMBOL_server_do_not_query_address = 465, /* server_do_not_query_address */ YYSYMBOL_server_do_not_query_localhost = 466, /* server_do_not_query_localhost */ YYSYMBOL_server_access_control = 467, /* server_access_control */ YYSYMBOL_server_module_conf = 468, /* server_module_conf */ YYSYMBOL_server_val_override_date = 469, /* server_val_override_date */ YYSYMBOL_server_val_sig_skew_min = 470, /* server_val_sig_skew_min */ YYSYMBOL_server_val_sig_skew_max = 471, /* server_val_sig_skew_max */ YYSYMBOL_server_cache_max_ttl = 472, /* server_cache_max_ttl */ YYSYMBOL_server_cache_max_negative_ttl = 473, /* server_cache_max_negative_ttl */ YYSYMBOL_server_cache_min_ttl = 474, /* server_cache_min_ttl */ YYSYMBOL_server_bogus_ttl = 475, /* server_bogus_ttl */ YYSYMBOL_server_val_clean_additional = 476, /* server_val_clean_additional */ YYSYMBOL_server_val_permissive_mode = 477, /* server_val_permissive_mode */ YYSYMBOL_server_aggressive_nsec = 478, /* server_aggressive_nsec */ YYSYMBOL_server_ignore_cd_flag = 479, /* server_ignore_cd_flag */ YYSYMBOL_server_serve_expired = 480, /* server_serve_expired */ YYSYMBOL_server_serve_expired_ttl = 481, /* server_serve_expired_ttl */ YYSYMBOL_server_serve_expired_ttl_reset = 482, /* server_serve_expired_ttl_reset */ YYSYMBOL_server_serve_expired_reply_ttl = 483, /* server_serve_expired_reply_ttl */ YYSYMBOL_server_serve_expired_client_timeout = 484, /* server_serve_expired_client_timeout */ YYSYMBOL_server_serve_original_ttl = 485, /* server_serve_original_ttl */ YYSYMBOL_server_fake_dsa = 486, /* server_fake_dsa */ YYSYMBOL_server_fake_sha1 = 487, /* server_fake_sha1 */ YYSYMBOL_server_val_log_level = 488, /* server_val_log_level */ YYSYMBOL_server_val_nsec3_keysize_iterations = 489, /* server_val_nsec3_keysize_iterations */ YYSYMBOL_server_add_holddown = 490, /* server_add_holddown */ YYSYMBOL_server_del_holddown = 491, /* server_del_holddown */ YYSYMBOL_server_keep_missing = 492, /* server_keep_missing */ YYSYMBOL_server_permit_small_holddown = 493, /* server_permit_small_holddown */ YYSYMBOL_server_key_cache_size = 494, /* server_key_cache_size */ YYSYMBOL_server_key_cache_slabs = 495, /* server_key_cache_slabs */ YYSYMBOL_server_neg_cache_size = 496, /* server_neg_cache_size */ YYSYMBOL_server_local_zone = 497, /* server_local_zone */ YYSYMBOL_server_local_data = 498, /* server_local_data */ YYSYMBOL_server_local_data_ptr = 499, /* server_local_data_ptr */ YYSYMBOL_server_minimal_responses = 500, /* server_minimal_responses */ YYSYMBOL_server_rrset_roundrobin = 501, /* server_rrset_roundrobin */ YYSYMBOL_server_unknown_server_time_limit = 502, /* server_unknown_server_time_limit */ YYSYMBOL_server_max_udp_size = 503, /* server_max_udp_size */ YYSYMBOL_server_dns64_prefix = 504, /* server_dns64_prefix */ YYSYMBOL_server_dns64_synthall = 505, /* server_dns64_synthall */ YYSYMBOL_server_dns64_ignore_aaaa = 506, /* server_dns64_ignore_aaaa */ YYSYMBOL_server_define_tag = 507, /* server_define_tag */ YYSYMBOL_server_local_zone_tag = 508, /* server_local_zone_tag */ YYSYMBOL_server_access_control_tag = 509, /* server_access_control_tag */ YYSYMBOL_server_access_control_tag_action = 510, /* server_access_control_tag_action */ YYSYMBOL_server_access_control_tag_data = 511, /* server_access_control_tag_data */ YYSYMBOL_server_local_zone_override = 512, /* server_local_zone_override */ YYSYMBOL_server_access_control_view = 513, /* server_access_control_view */ YYSYMBOL_server_response_ip_tag = 514, /* server_response_ip_tag */ YYSYMBOL_server_ip_ratelimit = 515, /* server_ip_ratelimit */ YYSYMBOL_server_ratelimit = 516, /* server_ratelimit */ YYSYMBOL_server_ip_ratelimit_size = 517, /* server_ip_ratelimit_size */ YYSYMBOL_server_ratelimit_size = 518, /* server_ratelimit_size */ YYSYMBOL_server_ip_ratelimit_slabs = 519, /* server_ip_ratelimit_slabs */ YYSYMBOL_server_ratelimit_slabs = 520, /* server_ratelimit_slabs */ YYSYMBOL_server_ratelimit_for_domain = 521, /* server_ratelimit_for_domain */ YYSYMBOL_server_ratelimit_below_domain = 522, /* server_ratelimit_below_domain */ YYSYMBOL_server_ip_ratelimit_factor = 523, /* server_ip_ratelimit_factor */ YYSYMBOL_server_ratelimit_factor = 524, /* server_ratelimit_factor */ YYSYMBOL_server_low_rtt = 525, /* server_low_rtt */ YYSYMBOL_server_fast_server_num = 526, /* server_fast_server_num */ YYSYMBOL_server_fast_server_permil = 527, /* server_fast_server_permil */ YYSYMBOL_server_qname_minimisation = 528, /* server_qname_minimisation */ YYSYMBOL_server_qname_minimisation_strict = 529, /* server_qname_minimisation_strict */ YYSYMBOL_server_pad_responses = 530, /* server_pad_responses */ YYSYMBOL_server_pad_responses_block_size = 531, /* server_pad_responses_block_size */ YYSYMBOL_server_pad_queries = 532, /* server_pad_queries */ YYSYMBOL_server_pad_queries_block_size = 533, /* server_pad_queries_block_size */ YYSYMBOL_server_ipsecmod_enabled = 534, /* server_ipsecmod_enabled */ YYSYMBOL_server_ipsecmod_ignore_bogus = 535, /* server_ipsecmod_ignore_bogus */ YYSYMBOL_server_ipsecmod_hook = 536, /* server_ipsecmod_hook */ YYSYMBOL_server_ipsecmod_max_ttl = 537, /* server_ipsecmod_max_ttl */ YYSYMBOL_server_ipsecmod_whitelist = 538, /* server_ipsecmod_whitelist */ YYSYMBOL_server_ipsecmod_strict = 539, /* server_ipsecmod_strict */ YYSYMBOL_server_edns_client_string = 540, /* server_edns_client_string */ YYSYMBOL_server_edns_client_string_opcode = 541, /* server_edns_client_string_opcode */ YYSYMBOL_stub_name = 542, /* stub_name */ YYSYMBOL_stub_host = 543, /* stub_host */ YYSYMBOL_stub_addr = 544, /* stub_addr */ YYSYMBOL_stub_first = 545, /* stub_first */ YYSYMBOL_stub_no_cache = 546, /* stub_no_cache */ YYSYMBOL_stub_ssl_upstream = 547, /* stub_ssl_upstream */ YYSYMBOL_stub_prime = 548, /* stub_prime */ YYSYMBOL_forward_name = 549, /* forward_name */ YYSYMBOL_forward_host = 550, /* forward_host */ YYSYMBOL_forward_addr = 551, /* forward_addr */ YYSYMBOL_forward_first = 552, /* forward_first */ YYSYMBOL_forward_no_cache = 553, /* forward_no_cache */ YYSYMBOL_forward_ssl_upstream = 554, /* forward_ssl_upstream */ YYSYMBOL_auth_name = 555, /* auth_name */ YYSYMBOL_auth_zonefile = 556, /* auth_zonefile */ YYSYMBOL_auth_master = 557, /* auth_master */ YYSYMBOL_auth_url = 558, /* auth_url */ YYSYMBOL_auth_allow_notify = 559, /* auth_allow_notify */ YYSYMBOL_auth_for_downstream = 560, /* auth_for_downstream */ YYSYMBOL_auth_for_upstream = 561, /* auth_for_upstream */ YYSYMBOL_auth_fallback_enabled = 562, /* auth_fallback_enabled */ YYSYMBOL_view_name = 563, /* view_name */ YYSYMBOL_view_local_zone = 564, /* view_local_zone */ YYSYMBOL_view_response_ip = 565, /* view_response_ip */ YYSYMBOL_view_response_ip_data = 566, /* view_response_ip_data */ YYSYMBOL_view_local_data = 567, /* view_local_data */ YYSYMBOL_view_local_data_ptr = 568, /* view_local_data_ptr */ YYSYMBOL_view_first = 569, /* view_first */ YYSYMBOL_rcstart = 570, /* rcstart */ YYSYMBOL_contents_rc = 571, /* contents_rc */ YYSYMBOL_content_rc = 572, /* content_rc */ YYSYMBOL_rc_control_enable = 573, /* rc_control_enable */ YYSYMBOL_rc_control_port = 574, /* rc_control_port */ YYSYMBOL_rc_control_interface = 575, /* rc_control_interface */ YYSYMBOL_rc_control_use_cert = 576, /* rc_control_use_cert */ YYSYMBOL_rc_server_key_file = 577, /* rc_server_key_file */ YYSYMBOL_rc_server_cert_file = 578, /* rc_server_cert_file */ YYSYMBOL_rc_control_key_file = 579, /* rc_control_key_file */ YYSYMBOL_rc_control_cert_file = 580, /* rc_control_cert_file */ YYSYMBOL_dtstart = 581, /* dtstart */ YYSYMBOL_contents_dt = 582, /* contents_dt */ YYSYMBOL_content_dt = 583, /* content_dt */ YYSYMBOL_dt_dnstap_enable = 584, /* dt_dnstap_enable */ YYSYMBOL_dt_dnstap_bidirectional = 585, /* dt_dnstap_bidirectional */ YYSYMBOL_dt_dnstap_socket_path = 586, /* dt_dnstap_socket_path */ YYSYMBOL_dt_dnstap_ip = 587, /* dt_dnstap_ip */ YYSYMBOL_dt_dnstap_tls = 588, /* dt_dnstap_tls */ YYSYMBOL_dt_dnstap_tls_server_name = 589, /* dt_dnstap_tls_server_name */ YYSYMBOL_dt_dnstap_tls_cert_bundle = 590, /* dt_dnstap_tls_cert_bundle */ YYSYMBOL_dt_dnstap_tls_client_key_file = 591, /* dt_dnstap_tls_client_key_file */ YYSYMBOL_dt_dnstap_tls_client_cert_file = 592, /* dt_dnstap_tls_client_cert_file */ YYSYMBOL_dt_dnstap_send_identity = 593, /* dt_dnstap_send_identity */ YYSYMBOL_dt_dnstap_send_version = 594, /* dt_dnstap_send_version */ YYSYMBOL_dt_dnstap_identity = 595, /* dt_dnstap_identity */ YYSYMBOL_dt_dnstap_version = 596, /* dt_dnstap_version */ YYSYMBOL_dt_dnstap_log_resolver_query_messages = 597, /* dt_dnstap_log_resolver_query_messages */ YYSYMBOL_dt_dnstap_log_resolver_response_messages = 598, /* dt_dnstap_log_resolver_response_messages */ YYSYMBOL_dt_dnstap_log_client_query_messages = 599, /* dt_dnstap_log_client_query_messages */ YYSYMBOL_dt_dnstap_log_client_response_messages = 600, /* dt_dnstap_log_client_response_messages */ YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 601, /* dt_dnstap_log_forwarder_query_messages */ YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 602, /* dt_dnstap_log_forwarder_response_messages */ YYSYMBOL_pythonstart = 603, /* pythonstart */ YYSYMBOL_contents_py = 604, /* contents_py */ YYSYMBOL_content_py = 605, /* content_py */ YYSYMBOL_py_script = 606, /* py_script */ YYSYMBOL_dynlibstart = 607, /* dynlibstart */ YYSYMBOL_contents_dl = 608, /* contents_dl */ YYSYMBOL_content_dl = 609, /* content_dl */ YYSYMBOL_dl_file = 610, /* dl_file */ YYSYMBOL_server_disable_dnssec_lame_check = 611, /* server_disable_dnssec_lame_check */ YYSYMBOL_server_log_identity = 612, /* server_log_identity */ YYSYMBOL_server_response_ip = 613, /* server_response_ip */ YYSYMBOL_server_response_ip_data = 614, /* server_response_ip_data */ YYSYMBOL_dnscstart = 615, /* dnscstart */ YYSYMBOL_contents_dnsc = 616, /* contents_dnsc */ YYSYMBOL_content_dnsc = 617, /* content_dnsc */ YYSYMBOL_dnsc_dnscrypt_enable = 618, /* dnsc_dnscrypt_enable */ YYSYMBOL_dnsc_dnscrypt_port = 619, /* dnsc_dnscrypt_port */ YYSYMBOL_dnsc_dnscrypt_provider = 620, /* dnsc_dnscrypt_provider */ YYSYMBOL_dnsc_dnscrypt_provider_cert = 621, /* dnsc_dnscrypt_provider_cert */ YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 622, /* dnsc_dnscrypt_provider_cert_rotated */ YYSYMBOL_dnsc_dnscrypt_secret_key = 623, /* dnsc_dnscrypt_secret_key */ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 624, /* dnsc_dnscrypt_shared_secret_cache_size */ YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 625, /* dnsc_dnscrypt_shared_secret_cache_slabs */ YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 626, /* dnsc_dnscrypt_nonce_cache_size */ YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 627, /* dnsc_dnscrypt_nonce_cache_slabs */ YYSYMBOL_cachedbstart = 628, /* cachedbstart */ YYSYMBOL_contents_cachedb = 629, /* contents_cachedb */ YYSYMBOL_content_cachedb = 630, /* content_cachedb */ YYSYMBOL_cachedb_backend_name = 631, /* cachedb_backend_name */ YYSYMBOL_cachedb_secret_seed = 632, /* cachedb_secret_seed */ YYSYMBOL_redis_server_host = 633, /* redis_server_host */ YYSYMBOL_redis_server_port = 634, /* redis_server_port */ YYSYMBOL_redis_timeout = 635, /* redis_timeout */ YYSYMBOL_redis_expire_records = 636, /* redis_expire_records */ YYSYMBOL_server_tcp_connection_limit = 637, /* server_tcp_connection_limit */ YYSYMBOL_ipsetstart = 638, /* ipsetstart */ YYSYMBOL_contents_ipset = 639, /* contents_ipset */ YYSYMBOL_content_ipset = 640, /* content_ipset */ YYSYMBOL_ipset_name_v4 = 641, /* ipset_name_v4 */ YYSYMBOL_ipset_name_v6 = 642 /* ipset_name_v6 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; #ifdef short # undef short #endif /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure and (if available) are included so that the code can choose integer types of a good width. */ #ifndef __PTRDIFF_MAX__ # include /* INFRINGES ON USER NAME SPACE */ # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YY_STDINT_H # endif #endif /* Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic. */ #ifdef __INT_LEAST8_MAX__ typedef __INT_LEAST8_TYPE__ yytype_int8; #elif defined YY_STDINT_H typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef __INT_LEAST16_MAX__ typedef __INT_LEAST16_TYPE__ yytype_int16; #elif defined YY_STDINT_H typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ && UINT_LEAST8_MAX <= INT_MAX) typedef uint_least8_t yytype_uint8; #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX typedef unsigned char yytype_uint8; #else typedef short yytype_uint8; #endif #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ typedef __UINT_LEAST16_TYPE__ yytype_uint16; #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ && UINT_LEAST16_MAX <= INT_MAX) typedef uint_least16_t yytype_uint16; #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX typedef unsigned short yytype_uint16; #else typedef int yytype_uint16; #endif #ifndef YYPTRDIFF_T # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ # define YYPTRDIFF_T __PTRDIFF_TYPE__ # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ # elif defined PTRDIFF_MAX # ifndef ptrdiff_t # include /* INFRINGES ON USER NAME SPACE */ # endif # define YYPTRDIFF_T ptrdiff_t # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX # else # define YYPTRDIFF_T long # define YYPTRDIFF_MAXIMUM LONG_MAX # endif #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned # endif #endif #define YYSIZE_MAXIMUM \ YY_CAST (YYPTRDIFF_T, \ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ ? YYPTRDIFF_MAXIMUM \ : YY_CAST (YYSIZE_T, -1))) #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) /* Stored state numbers (used for stacks). */ typedef yytype_int16 yy_state_t; /* State numbers in computations. */ typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif #define YY_ASSERT(E) ((void) (0 && (E))) #if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* !defined yyoverflow */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 652 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 309 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 334 /* YYNRULES -- Number of rules. */ #define YYNRULES 644 /* YYNSTATES -- Number of states. */ #define YYNSTATES 957 #define YYMAXUTOK 563 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ (0 <= (YYX) && (YYX) <= YYMAXUTOK \ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_int16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { 0, 187, 187, 187, 188, 188, 189, 189, 190, 190, 190, 191, 191, 192, 192, 193, 193, 194, 196, 202, 207, 208, 209, 209, 209, 210, 210, 211, 211, 211, 212, 212, 213, 213, 213, 214, 214, 215, 215, 215, 216, 216, 216, 217, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, 225, 225, 226, 226, 226, 227, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 232, 233, 233, 234, 234, 235, 235, 235, 236, 236, 237, 237, 238, 238, 239, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 250, 251, 252, 252, 252, 253, 253, 253, 254, 254, 255, 255, 256, 256, 256, 257, 257, 257, 258, 258, 259, 259, 259, 260, 260, 261, 261, 261, 262, 262, 263, 263, 264, 264, 265, 266, 266, 267, 267, 268, 268, 269, 270, 270, 271, 271, 272, 272, 273, 273, 274, 274, 275, 275, 275, 276, 276, 277, 277, 278, 278, 279, 280, 280, 281, 281, 282, 283, 283, 284, 284, 285, 285, 286, 286, 287, 287, 287, 288, 288, 288, 289, 289, 290, 291, 291, 292, 292, 293, 293, 294, 294, 295, 295, 295, 296, 296, 296, 297, 297, 297, 298, 298, 299, 299, 300, 300, 301, 301, 302, 302, 304, 316, 317, 318, 318, 318, 318, 318, 319, 319, 321, 333, 334, 335, 335, 335, 335, 336, 336, 338, 352, 353, 354, 354, 354, 354, 355, 355, 355, 357, 374, 375, 376, 376, 376, 376, 377, 377, 377, 378, 381, 400, 417, 425, 435, 443, 460, 461, 462, 462, 462, 462, 462, 463, 463, 463, 464, 464, 466, 475, 484, 495, 504, 513, 522, 533, 542, 554, 568, 583, 594, 611, 628, 645, 662, 677, 692, 705, 720, 729, 738, 747, 756, 765, 774, 783, 792, 801, 810, 819, 828, 837, 846, 859, 868, 881, 890, 899, 908, 915, 922, 931, 938, 947, 955, 962, 969, 977, 986, 994, 1010, 1018, 1026, 1034, 1042, 1050, 1059, 1068, 1082, 1091, 1100, 1109, 1118, 1127, 1136, 1143, 1150, 1176, 1184, 1191, 1198, 1205, 1212, 1220, 1228, 1236, 1243, 1254, 1265, 1272, 1281, 1290, 1299, 1306, 1313, 1329, 1337, 1345, 1355, 1365, 1375, 1389, 1397, 1410, 1421, 1429, 1442, 1451, 1460, 1469, 1478, 1488, 1498, 1506, 1519, 1528, 1536, 1545, 1553, 1566, 1575, 1585, 1592, 1602, 1612, 1622, 1632, 1642, 1652, 1662, 1672, 1679, 1686, 1693, 1702, 1711, 1720, 1729, 1736, 1746, 1766, 1773, 1791, 1804, 1817, 1826, 1835, 1844, 1853, 1863, 1873, 1884, 1893, 1902, 1911, 1920, 1929, 1938, 1947, 1960, 1973, 1982, 1989, 1998, 2007, 2016, 2025, 2033, 2046, 2054, 2099, 2106, 2121, 2131, 2141, 2148, 2155, 2162, 2171, 2179, 2193, 2214, 2235, 2247, 2259, 2271, 2280, 2301, 2311, 2320, 2328, 2336, 2349, 2362, 2377, 2392, 2401, 2410, 2416, 2425, 2434, 2444, 2454, 2464, 2473, 2483, 2492, 2505, 2518, 2530, 2544, 2556, 2570, 2579, 2591, 2601, 2608, 2615, 2624, 2633, 2643, 2653, 2663, 2670, 2677, 2686, 2695, 2705, 2715, 2722, 2729, 2736, 2744, 2754, 2764, 2774, 2784, 2823, 2833, 2841, 2849, 2864, 2873, 2878, 2879, 2880, 2880, 2880, 2881, 2881, 2881, 2882, 2882, 2884, 2894, 2903, 2910, 2917, 2924, 2931, 2938, 2945, 2950, 2951, 2952, 2952, 2952, 2953, 2953, 2953, 2954, 2955, 2955, 2956, 2956, 2957, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2965, 2974, 2984, 2991, 2998, 3007, 3014, 3021, 3028, 3035, 3044, 3053, 3060, 3067, 3077, 3087, 3097, 3107, 3117, 3127, 3132, 3133, 3134, 3136, 3142, 3147, 3148, 3149, 3151, 3157, 3167, 3174, 3183, 3191, 3196, 3197, 3199, 3199, 3199, 3200, 3200, 3201, 3202, 3203, 3204, 3205, 3207, 3217, 3226, 3233, 3242, 3249, 3258, 3266, 3279, 3287, 3300, 3305, 3306, 3307, 3307, 3308, 3308, 3308, 3309, 3311, 3323, 3335, 3347, 3362, 3375, 3388, 3399, 3404, 3405, 3406, 3406, 3408, 3423 }; #endif /** Accessing symbol of state STATE. */ #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) #if YYDEBUG || 0 /* The user-facing name of the symbol whose (internal) number is YYSYMBOL. No bounds checking. */ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "\"end of file\"", "error", "\"invalid token\"", "SPACE", "LETTER", "NEWLINE", "COMMENT", "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_FORCE_TOPLEVEL", "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", "VAR_DO_IP4", "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS", "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE", "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_CHROOT", "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE", "VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS", "VAR_NUM_QUERIES_PER_THREAD", "VAR_RRSET_CACHE_SIZE", "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", "VAR_INFRA_HOST_TTL", "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS", "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME", "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR", "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE", "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST", "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY", "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE", "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR", "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL", "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE", "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE", "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG", "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST", "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNSSEC_STRIPPED", "VAR_ACCESS_CONTROL", "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC", "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID", "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT", "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR", "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS", "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE", "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE", "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE", "VAR_CONTROL_USE_CERT", "VAR_EXTENDED_STATISTICS", "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT", "VAR_STUB_PRIME", "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII", "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT", "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "VAR_CACHE_MIN_TTL", "VAR_VAL_LOG_LEVEL", "VAR_AUTO_TRUST_ANCHOR_FILE", "VAR_KEEP_MISSING", "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN", "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH", "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT", "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES", "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM", "VAR_SSL_UPSTREAM", "VAR_SSL_SERVICE_KEY", "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST", "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM", "VAR_TLS_CERT_BUNDLE", "VAR_HTTPS_PORT", "VAR_HTTP_ENDPOINT", "VAR_HTTP_MAX_STREAMS", "VAR_HTTP_QUERY_BUFFER_SIZE", "VAR_HTTP_RESPONSE_BUFFER_SIZE", "VAR_HTTP_NODELAY", "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES", "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE", "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES", "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL", "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_BIDIRECTIONAL", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION", "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES", "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES", "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES", "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG", "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE", "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK", "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR", "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE", "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE", "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6", "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6", "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6", "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL", "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL", "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_SERVE_ORIGINAL_TTL", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_TRUST_ANCHOR_SIGNALING", "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT", "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED", "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE", "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS", "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS", "VAR_PAD_RESPONSES", "VAR_PAD_RESPONSES_BLOCK_SIZE", "VAR_PAD_QUERIES", "VAR_PAD_QUERIES_BLOCK_SIZE", "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST", "VAR_CACHEDB_REDISPORT", "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", "$accept", "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", "contents_server", "content_server", "stubstart", "contents_stub", "content_stub", "forwardstart", "contents_forward", "content_forward", "viewstart", "contents_view", "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6", "server_interface", "server_outgoing_interface", "server_outgoing_range", "server_outgoing_port_permit", "server_outgoing_port_avoid", "server_outgoing_num_tcp", "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4", "server_do_ip6", "server_do_udp", "server_do_tcp", "server_prefer_ip4", "server_prefer_ip6", "server_tcp_mss", "server_outgoing_tcp_mss", "server_tcp_idle_timeout", "server_tcp_keepalive", "server_tcp_keepalive_timeout", "server_tcp_upstream", "server_udp_upstream_without_downstream", "server_ssl_upstream", "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle", "server_tls_win_cert", "server_tls_additional_port", "server_tls_ciphers", "server_tls_ciphersuites", "server_tls_session_ticket_keys", "server_tls_use_sni", "server_https_port", "server_http_endpoint", "server_http_max_streams", "server_http_query_buffer_size", "server_http_response_buffer_size", "server_http_nodelay", "server_http_notls_downstream", "server_use_systemd", "server_do_daemonize", "server_use_syslog", "server_log_time_ascii", "server_log_queries", "server_log_replies", "server_log_tag_queryreply", "server_log_servfail", "server_log_local_actions", "server_chroot", "server_username", "server_directory", "server_logfile", "server_pidfile", "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor", "server_auto_trust_anchor_file", "server_trust_anchor_file", "server_trusted_keys_file", "server_trust_anchor", "server_trust_anchor_signaling", "server_root_key_sentinel", "server_domain_insecure", "server_hide_identity", "server_hide_version", "server_hide_trustanchor", "server_identity", "server_version", "server_nsid", "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent", "server_ip_freebind", "server_ip_dscp", "server_stream_wait_size", "server_edns_buffer_size", "server_msg_buffer_size", "server_msg_cache_size", "server_msg_cache_slabs", "server_num_queries_per_thread", "server_jostle_timeout", "server_delay_close", "server_udp_connect", "server_unblock_lan_zones", "server_insecure_lan_zones", "server_rrset_cache_size", "server_rrset_cache_slabs", "server_infra_host_ttl", "server_infra_lame_ttl", "server_infra_cache_numhosts", "server_infra_cache_lame_size", "server_infra_cache_slabs", "server_infra_cache_min_rtt", "server_infra_keep_probing", "server_target_fetch_policy", "server_harden_short_bufsize", "server_harden_large_queries", "server_harden_glue", "server_harden_dnssec_stripped", "server_harden_below_nxdomain", "server_harden_referral_path", "server_harden_algo_downgrade", "server_use_caps_for_id", "server_caps_whitelist", "server_private_address", "server_private_domain", "server_prefetch", "server_prefetch_key", "server_deny_any", "server_unwanted_reply_threshold", "server_do_not_query_address", "server_do_not_query_localhost", "server_access_control", "server_module_conf", "server_val_override_date", "server_val_sig_skew_min", "server_val_sig_skew_max", "server_cache_max_ttl", "server_cache_max_negative_ttl", "server_cache_min_ttl", "server_bogus_ttl", "server_val_clean_additional", "server_val_permissive_mode", "server_aggressive_nsec", "server_ignore_cd_flag", "server_serve_expired", "server_serve_expired_ttl", "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout", "server_serve_original_ttl", "server_fake_dsa", "server_fake_sha1", "server_val_log_level", "server_val_nsec3_keysize_iterations", "server_add_holddown", "server_del_holddown", "server_keep_missing", "server_permit_small_holddown", "server_key_cache_size", "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone", "server_local_data", "server_local_data_ptr", "server_minimal_responses", "server_rrset_roundrobin", "server_unknown_server_time_limit", "server_max_udp_size", "server_dns64_prefix", "server_dns64_synthall", "server_dns64_ignore_aaaa", "server_define_tag", "server_local_zone_tag", "server_access_control_tag", "server_access_control_tag_action", "server_access_control_tag_data", "server_local_zone_override", "server_access_control_view", "server_response_ip_tag", "server_ip_ratelimit", "server_ratelimit", "server_ip_ratelimit_size", "server_ratelimit_size", "server_ip_ratelimit_slabs", "server_ratelimit_slabs", "server_ratelimit_for_domain", "server_ratelimit_below_domain", "server_ip_ratelimit_factor", "server_ratelimit_factor", "server_low_rtt", "server_fast_server_num", "server_fast_server_permil", "server_qname_minimisation", "server_qname_minimisation_strict", "server_pad_responses", "server_pad_responses_block_size", "server_pad_queries", "server_pad_queries_block_size", "server_ipsecmod_enabled", "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook", "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist", "server_ipsecmod_strict", "server_edns_client_string", "server_edns_client_string_opcode", "stub_name", "stub_host", "stub_addr", "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_prime", "forward_name", "forward_host", "forward_addr", "forward_first", "forward_no_cache", "forward_ssl_upstream", "auth_name", "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify", "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled", "view_name", "view_local_zone", "view_response_ip", "view_response_ip_data", "view_local_data", "view_local_data_ptr", "view_first", "rcstart", "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip", "dt_dnstap_tls", "dt_dnstap_tls_server_name", "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file", "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity", "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version", "dt_dnstap_log_resolver_query_messages", "dt_dnstap_log_resolver_response_messages", "dt_dnstap_log_client_query_messages", "dt_dnstap_log_client_response_messages", "dt_dnstap_log_forwarder_query_messages", "dt_dnstap_log_forwarder_response_messages", "pythonstart", "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl", "content_dl", "dl_file", "server_disable_dnssec_lame_check", "server_log_identity", "server_response_ip", "server_response_ip_data", "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider", "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated", "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size", "dnsc_dnscrypt_shared_secret_cache_slabs", "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs", "cachedbstart", "contents_cachedb", "content_cachedb", "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", "redis_server_port", "redis_timeout", "redis_expire_records", "server_tcp_connection_limit", "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; static const char * yysymbol_name (yysymbol_kind_t yysymbol) { return yytname[yysymbol]; } #endif #ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563 }; #endif #define YYPACT_NINF (-296) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) #define YYTABLE_NINF (-1) #define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { -296, 0, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 292, -42, -38, -43, -21, -44, -11, -96, -109, -295, -216, -245, -287, 3, 4, 13, 25, 26, 27, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55, 84, 85, 88, 89, 91, 93, 94, 95, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 212, 213, 214, 215, 216, 220, 221, 222, 223, 224, 225, 226, 228, 229, 231, 232, 234, 235, 237, 239, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, 286, 287, 289, 290, 291, 293, 327, 328, 329, 330, 334, 335, 336, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 378, 379, 380, 381, 382, 383, 384, -296, -296, -296, -296, -296, -296, -296, -296, 385, 386, 390, 394, 395, 420, -296, -296, -296, -296, -296, -296, -296, 421, 422, 431, 444, 445, 446, 447, -296, -296, -296, -296, -296, -296, -296, -296, 448, 449, 450, 451, 452, 453, 454, 455, -296, -296, -296, -296, -296, -296, -296, -296, -296, 456, 457, 458, 459, 460, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 461, 462, 463, 503, 505, 522, 523, 524, -296, -296, -296, -296, -296, -296, -296, -296, -296, 525, 526, 527, 528, 529, 530, 531, 532, 543, 544, 545, 546, 547, 548, 549, 551, 552, 553, 554, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 555, -296, -296, 556, -296, -296, 557, 560, 563, 566, 567, 576, 577, 578, 580, 581, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 582, 583, 584, 585, 586, 587, -296, -296, -296, -296, -296, -296, -296, 591, 592, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 593, 594, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 595, 596, 597, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 598, 599, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 600, 601, 602, 603, 604, 605, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 606, -296, -296, -296, -296, -296, -296, -296, -296, -296, 607, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 608, -296, -296, 609, 610, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 611, 612, 613, -296, -296, -296, -296, -296, -296, -296, -296, -296 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_int16 yydefact[] = { 2, 0, 1, 18, 19, 233, 243, 525, 585, 544, 252, 599, 622, 262, 638, 278, 590, 3, 17, 21, 235, 245, 254, 264, 280, 527, 546, 587, 592, 601, 624, 640, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 22, 23, 86, 89, 98, 200, 201, 24, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 37, 77, 25, 90, 91, 48, 70, 85, 26, 27, 30, 31, 28, 29, 32, 33, 34, 35, 36, 121, 212, 122, 124, 125, 126, 214, 219, 215, 226, 227, 228, 229, 127, 128, 129, 130, 131, 132, 133, 196, 87, 76, 102, 119, 120, 224, 221, 123, 38, 39, 40, 41, 42, 78, 92, 93, 108, 64, 74, 65, 204, 205, 103, 58, 59, 203, 60, 61, 232, 112, 116, 137, 147, 174, 150, 225, 113, 71, 43, 44, 45, 100, 138, 139, 140, 141, 46, 47, 49, 50, 52, 53, 51, 145, 151, 54, 55, 56, 62, 81, 117, 95, 146, 88, 170, 96, 97, 114, 115, 222, 101, 57, 79, 82, 63, 66, 104, 105, 80, 171, 106, 67, 68, 69, 213, 118, 188, 189, 190, 191, 192, 193, 194, 202, 107, 75, 109, 110, 111, 172, 72, 73, 94, 83, 84, 99, 134, 135, 223, 136, 142, 143, 144, 175, 176, 178, 180, 181, 179, 182, 197, 148, 149, 154, 155, 152, 153, 156, 157, 159, 158, 216, 218, 217, 173, 183, 184, 185, 186, 187, 206, 208, 207, 209, 210, 211, 230, 231, 177, 195, 198, 199, 220, 0, 0, 0, 0, 0, 0, 0, 234, 236, 237, 238, 240, 241, 242, 239, 0, 0, 0, 0, 0, 0, 244, 246, 247, 248, 249, 250, 251, 0, 0, 0, 0, 0, 0, 0, 253, 255, 256, 259, 260, 257, 261, 258, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 266, 267, 268, 272, 269, 270, 271, 0, 0, 0, 0, 0, 283, 287, 288, 289, 290, 279, 281, 282, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 526, 528, 530, 529, 535, 531, 532, 533, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 545, 547, 549, 548, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 0, 586, 588, 0, 591, 593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 600, 602, 603, 604, 606, 607, 605, 608, 609, 610, 611, 0, 0, 0, 0, 0, 0, 623, 625, 626, 627, 628, 629, 630, 0, 0, 639, 641, 642, 292, 291, 298, 311, 309, 321, 317, 318, 322, 319, 320, 323, 324, 325, 326, 327, 357, 358, 359, 360, 361, 387, 388, 389, 395, 396, 314, 397, 398, 401, 399, 400, 404, 405, 406, 420, 372, 373, 375, 376, 407, 423, 366, 368, 424, 430, 431, 432, 315, 386, 449, 450, 367, 444, 350, 310, 362, 421, 427, 408, 0, 0, 453, 316, 293, 349, 412, 294, 312, 313, 363, 364, 451, 410, 414, 415, 295, 454, 390, 419, 351, 371, 425, 426, 429, 443, 365, 447, 445, 446, 378, 385, 416, 417, 379, 380, 409, 434, 352, 353, 356, 328, 330, 331, 332, 333, 334, 341, 342, 343, 344, 345, 346, 347, 455, 456, 458, 391, 392, 393, 394, 402, 403, 459, 460, 461, 0, 0, 0, 411, 381, 383, 595, 470, 474, 472, 471, 475, 473, 0, 0, 478, 479, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 413, 428, 448, 483, 484, 382, 462, 0, 0, 0, 0, 0, 0, 435, 436, 437, 438, 439, 440, 441, 442, 596, 374, 369, 433, 348, 296, 297, 370, 485, 486, 487, 488, 489, 491, 490, 492, 493, 494, 329, 336, 480, 482, 481, 335, 0, 355, 418, 457, 354, 384, 337, 338, 340, 339, 0, 496, 377, 497, 498, 499, 503, 502, 500, 501, 504, 505, 506, 507, 509, 508, 518, 0, 522, 523, 0, 0, 524, 510, 516, 511, 512, 513, 515, 517, 514, 273, 274, 275, 276, 277, 536, 538, 537, 540, 541, 542, 543, 539, 566, 568, 569, 570, 571, 572, 573, 574, 575, 576, 567, 577, 578, 579, 580, 581, 582, 583, 584, 589, 594, 612, 613, 614, 617, 615, 616, 618, 619, 620, 621, 631, 632, 633, 634, 635, 636, 643, 644, 422, 452, 469, 597, 598, 476, 477, 463, 464, 0, 0, 0, 468, 637, 495, 519, 520, 521, 467, 465, 466 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, 588, 589, 590, 614, 615, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, -296 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 17, 18, 19, 32, 256, 20, 33, 475, 21, 34, 489, 22, 35, 503, 23, 36, 519, 533, 534, 535, 536, 537, 24, 37, 538, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 476, 477, 478, 479, 480, 481, 482, 490, 491, 492, 493, 494, 495, 520, 521, 522, 523, 524, 525, 526, 527, 504, 505, 506, 507, 508, 509, 510, 25, 38, 552, 553, 554, 555, 556, 557, 558, 559, 560, 26, 39, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 27, 40, 601, 602, 28, 41, 604, 605, 463, 464, 465, 466, 29, 42, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 30, 43, 633, 634, 635, 636, 637, 638, 639, 467, 31, 44, 642, 643, 644 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 2, 511, 496, 468, 600, 469, 470, 483, 640, 641, 603, 3, 4, 645, 646, 484, 485, 627, 628, 629, 630, 631, 632, 647, 511, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 648, 649, 650, 497, 498, 651, 652, 653, 654, 655, 656, 5, 657, 658, 659, 660, 661, 6, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 499, 672, 673, 471, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 544, 545, 546, 547, 548, 549, 550, 551, 674, 675, 7, 472, 676, 677, 486, 678, 487, 679, 680, 681, 682, 473, 683, 684, 685, 686, 8, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 500, 501, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 9, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 502, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 10, 791, 792, 793, 794, 795, 513, 514, 515, 796, 797, 798, 799, 800, 801, 802, 518, 803, 804, 11, 805, 806, 474, 807, 808, 488, 809, 512, 810, 513, 514, 515, 516, 517, 528, 529, 530, 531, 532, 518, 12, 811, 812, 813, 814, 815, 816, 817, 818, 13, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 14, 842, 843, 844, 15, 845, 846, 847, 0, 848, 16, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 849, 850, 851, 852, 77, 78, 79, 853, 854, 855, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 856, 857, 858, 859, 860, 861, 862, 863, 864, 121, 122, 123, 865, 124, 125, 126, 866, 867, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 868, 869, 870, 151, 152, 153, 154, 155, 156, 157, 158, 871, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 892, 210, 893, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 905, 906, 907, 908, 909, 910, 911, 237, 912, 913, 914, 915, 916, 917, 918, 238, 239, 919, 240, 241, 920, 242, 243, 921, 922, 244, 245, 246, 247, 248, 249, 250, 251, 923, 924, 925, 252, 926, 927, 928, 929, 930, 931, 932, 933, 253, 254, 255, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 0, 539, 540, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 542, 543 }; static const yytype_int16 yycheck[] = { 0, 45, 45, 45, 113, 47, 48, 45, 295, 296, 305, 11, 12, 10, 10, 53, 54, 262, 263, 264, 265, 266, 267, 10, 45, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 10, 10, 10, 81, 82, 10, 10, 10, 10, 10, 10, 46, 10, 10, 10, 10, 10, 52, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 106, 10, 10, 108, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 97, 98, 99, 100, 101, 102, 103, 104, 10, 10, 96, 139, 10, 10, 138, 10, 140, 10, 10, 10, 10, 149, 10, 10, 10, 10, 112, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 183, 184, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 162, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 223, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 221, 10, 10, 10, 10, 10, 271, 272, 273, 10, 10, 10, 10, 10, 10, 10, 281, 10, 10, 240, 10, 10, 285, 10, 10, 284, 10, 269, 10, 271, 272, 273, 274, 275, 299, 300, 301, 302, 303, 281, 261, 10, 10, 10, 10, 10, 10, 10, 10, 270, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 294, 10, 10, 10, 298, 10, 10, 10, -1, 10, 304, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 10, 10, 10, 10, 49, 50, 51, 10, 10, 10, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 10, 10, 10, 10, 10, 10, 10, 10, 10, 105, 106, 107, 10, 109, 110, 111, 10, 10, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 10, 10, 10, 141, 142, 143, 144, 145, 146, 147, 148, 10, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 10, 222, 10, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 10, 10, 10, 10, 10, 10, 10, 268, 10, 10, 10, 10, 10, 10, 10, 276, 277, 10, 279, 280, 10, 282, 283, 10, 10, 286, 287, 288, 289, 290, 291, 292, 293, 10, 10, 10, 297, 10, 10, 10, 10, 10, 10, 10, 10, 306, 307, 308, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, 37, 37, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, 37 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { 0, 310, 0, 11, 12, 46, 52, 96, 112, 162, 221, 240, 261, 270, 294, 298, 304, 311, 312, 313, 316, 319, 322, 325, 333, 570, 581, 603, 607, 615, 628, 638, 314, 317, 320, 323, 326, 334, 571, 582, 604, 608, 616, 629, 639, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 105, 106, 107, 109, 110, 111, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 222, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 268, 276, 277, 279, 280, 282, 283, 286, 287, 288, 289, 290, 291, 292, 293, 297, 306, 307, 308, 315, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 611, 612, 613, 614, 637, 45, 47, 48, 108, 139, 149, 285, 318, 542, 543, 544, 545, 546, 547, 548, 45, 53, 54, 138, 140, 284, 321, 549, 550, 551, 552, 553, 554, 45, 81, 82, 106, 183, 184, 223, 324, 563, 564, 565, 566, 567, 568, 569, 45, 269, 271, 272, 273, 274, 275, 281, 327, 555, 556, 557, 558, 559, 560, 561, 562, 299, 300, 301, 302, 303, 328, 329, 330, 331, 332, 335, 555, 556, 557, 558, 559, 97, 98, 99, 100, 101, 102, 103, 104, 572, 573, 574, 575, 576, 577, 578, 579, 580, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 113, 605, 606, 305, 609, 610, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 262, 263, 264, 265, 266, 267, 630, 631, 632, 633, 634, 635, 636, 295, 296, 640, 641, 642, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { 0, 309, 310, 310, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 312, 313, 314, 314, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 316, 317, 317, 318, 318, 318, 318, 318, 318, 318, 319, 320, 320, 321, 321, 321, 321, 321, 321, 322, 323, 323, 324, 324, 324, 324, 324, 324, 324, 325, 326, 326, 327, 327, 327, 327, 327, 327, 327, 327, 328, 329, 330, 331, 332, 333, 334, 334, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 571, 572, 572, 572, 572, 572, 572, 572, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 582, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 604, 605, 606, 607, 608, 608, 609, 610, 611, 612, 613, 614, 615, 616, 616, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 629, 630, 630, 630, 630, 630, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 639, 640, 640, 641, 642 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_int8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 2, 1, 2, 0, 1, 2, 2, 2, 3, 3, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 1, 2, 0, 1, 1, 2, 2 }; enum { YYENOMEM = -2 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Backward compatibility with an undocumented macro. Use YYerror or YYUNDEF. */ #define YYERRCODE YYUNDEF /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ # ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Kind, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { FILE *yyoutput = yyo; YYUSE (yyoutput); if (!yyvaluep) return; # ifdef YYPRINT if (yykind < YYNTOKENS) YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { YYFPRINTF (yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); yy_symbol_value_print (yyo, yykind, yyvaluep); YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), &yyvsp[(yyi + 1) - (yynrhs)]); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) ((void) 0) # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep) { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ int yyparse (void) { yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* Their size. */ YYPTRDIFF_T yystacksize; /* The state stack. */ yy_state_t yyssa[YYINITDEPTH]; yy_state_t *yyss; yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; int yyn; /* The return value of yyparse. */ int yyresult; /* Lookahead token as an internal (translated) token number. */ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yynerrs = 0; yystate = 0; yyerrstatus = 0; yystacksize = YYINITDEPTH; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; YYDPRINTF ((stderr, "Starting parse\n")); yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST (yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYPTRDIFF_T yysize = yyssp - yyss + 1; # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF (*yyssp), &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yy_state_t *yyss1 = yyss; union yyalloc *yyptr = YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF ((stderr, "Stack size increased to %ld\n", YY_CAST (long, yystacksize))); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token\n")); yychar = yylex (); } if (yychar <= YYEOF) { yychar = YYEOF; yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else if (yychar == YYerror) { /* The scanner already issued an error message, process directly to error recovery. But do not keep the error token as lookahead, it is too special and may lead us to an endless loop in error recovery. */ yychar = YYUNDEF; yytoken = YYSYMBOL_YYerror; goto yyerrlab1; } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 18: #line 197 "util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); } #line 3367 "util/configparser.c" break; case 19: #line 203 "util/configparser.y" { OUTYY(("\nP(server:)\n")); } #line 3375 "util/configparser.c" break; case 233: #line 305 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->stubs; cfg_parser->cfg->stubs = s; } else yyerror("out of memory"); } #line 3390 "util/configparser.c" break; case 243: #line 322 "util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); if(s) { s->next = cfg_parser->cfg->forwards; cfg_parser->cfg->forwards = s; } else yyerror("out of memory"); } #line 3405 "util/configparser.c" break; case 252: #line 339 "util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); s = (struct config_view*)calloc(1, sizeof(struct config_view)); if(s) { s->next = cfg_parser->cfg->views; if(s->next && !s->next->name) yyerror("view without name"); cfg_parser->cfg->views = s; } else yyerror("out of memory"); } #line 3422 "util/configparser.c" break; case 262: #line 358 "util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; cfg_parser->cfg->auths = s; /* defaults for auth zone */ s->for_downstream = 1; s->for_upstream = 1; s->fallback_enabled = 0; s->isrpz = 0; } else yyerror("out of memory"); } #line 3442 "util/configparser.c" break; case 273: #line 382 "util/configparser.y" { uint8_t* bitlist; size_t len = 0; OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str))); bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); free((yyvsp[0].str)); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); } if(bitlist) { cfg_parser->cfg->auths->rpz_taglist = bitlist; cfg_parser->cfg->auths->rpz_taglistlen = len; } } #line 3463 "util/configparser.c" break; case 274: #line 401 "util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 && strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) { yyerror("rpz-action-override action: expected nxdomain, " "nodata, passthru, drop, cname or disabled"); free((yyvsp[0].str)); cfg_parser->cfg->auths->rpz_action_override = NULL; } else { cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } #line 3482 "util/configparser.c" break; case 275: #line 418 "util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } #line 3492 "util/configparser.c" break; case 276: #line 426 "util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3504 "util/configparser.c" break; case 277: #line 436 "util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } #line 3514 "util/configparser.c" break; case 278: #line 444 "util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); if(s) { s->next = cfg_parser->cfg->auths; cfg_parser->cfg->auths = s; /* defaults for RPZ auth zone */ s->for_downstream = 0; s->for_upstream = 0; s->fallback_enabled = 0; s->isrpz = 1; } else yyerror("out of memory"); } #line 3534 "util/configparser.c" break; case 291: #line 467 "util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3546 "util/configparser.c" break; case 292: #line 476 "util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3558 "util/configparser.c" break; case 293: #line 485 "util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) cfg_parser->cfg->stat_interval = 0; else if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3572 "util/configparser.c" break; case 294: #line 496 "util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3584 "util/configparser.c" break; case 295: #line 505 "util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3596 "util/configparser.c" break; case 296: #line 514 "util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3608 "util/configparser.c" break; case 297: #line 523 "util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) cfg_parser->cfg->shm_key = 0; else if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3622 "util/configparser.c" break; case 298: #line 534 "util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3634 "util/configparser.c" break; case 299: #line 543 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str))) fatal_exit("out of memory adding client-subnet"); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 3649 "util/configparser.c" break; case 300: #line 555 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, (yyvsp[0].str))) fatal_exit("out of memory adding client-subnet-zone"); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 3665 "util/configparser.c" break; case 301: #line 569 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->client_subnet_always_forward = (strcmp((yyvsp[0].str), "yes")==0); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3683 "util/configparser.c" break; case 302: #line 584 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); OUTYY(("P(Deprecated option, ignoring)\n")); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3697 "util/configparser.c" break; case 303: #line 595 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("IPv4 subnet length expected"); else if (atoi((yyvsp[0].str)) > 32) cfg_parser->cfg->max_client_subnet_ipv4 = 32; else if (atoi((yyvsp[0].str)) < 0) cfg_parser->cfg->max_client_subnet_ipv4 = 0; else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3717 "util/configparser.c" break; case 304: #line 612 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("Ipv6 subnet length expected"); else if (atoi((yyvsp[0].str)) > 128) cfg_parser->cfg->max_client_subnet_ipv6 = 128; else if (atoi((yyvsp[0].str)) < 0) cfg_parser->cfg->max_client_subnet_ipv6 = 0; else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3737 "util/configparser.c" break; case 305: #line 629 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("IPv4 subnet length expected"); else if (atoi((yyvsp[0].str)) > 32) cfg_parser->cfg->min_client_subnet_ipv4 = 32; else if (atoi((yyvsp[0].str)) < 0) cfg_parser->cfg->min_client_subnet_ipv4 = 0; else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3757 "util/configparser.c" break; case 306: #line 646 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("Ipv6 subnet length expected"); else if (atoi((yyvsp[0].str)) > 128) cfg_parser->cfg->min_client_subnet_ipv6 = 128; else if (atoi((yyvsp[0].str)) < 0) cfg_parser->cfg->min_client_subnet_ipv6 = 0; else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3777 "util/configparser.c" break; case 307: #line 663 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("IPv4 ECS tree size expected"); else if (atoi((yyvsp[0].str)) < 0) cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0; else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3795 "util/configparser.c" break; case 308: #line 678 "util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("IPv6 ECS tree size expected"); else if (atoi((yyvsp[0].str)) < 0) cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0; else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 3813 "util/configparser.c" break; case 309: #line 693 "util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); if(!cfg_parser->cfg->ifs) yyerror("out of memory"); else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } #line 3829 "util/configparser.c" break; case 310: #line 706 "util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); else cfg_parser->cfg->out_ifs = realloc( cfg_parser->cfg->out_ifs, (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); if(!cfg_parser->cfg->out_ifs) yyerror("out of memory"); else cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } #line 3847 "util/configparser.c" break; case 311: #line 721 "util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3859 "util/configparser.c" break; case 312: #line 730 "util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } #line 3871 "util/configparser.c" break; case 313: #line 739 "util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, cfg_parser->cfg->outgoing_avail_ports, 65536)) yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } #line 3883 "util/configparser.c" break; case 314: #line 748 "util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3895 "util/configparser.c" break; case 315: #line 757 "util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 3907 "util/configparser.c" break; case 316: #line 766 "util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3919 "util/configparser.c" break; case 317: #line 775 "util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3931 "util/configparser.c" break; case 318: #line 784 "util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3943 "util/configparser.c" break; case 319: #line 793 "util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3955 "util/configparser.c" break; case 320: #line 802 "util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3967 "util/configparser.c" break; case 321: #line 811 "util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3979 "util/configparser.c" break; case 322: #line 820 "util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 3991 "util/configparser.c" break; case 323: #line 829 "util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4003 "util/configparser.c" break; case 324: #line 838 "util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4015 "util/configparser.c" break; case 325: #line 847 "util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else if (atoi((yyvsp[0].str)) > 120000) cfg_parser->cfg->tcp_idle_timeout = 120000; else if (atoi((yyvsp[0].str)) < 1) cfg_parser->cfg->tcp_idle_timeout = 1; else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4031 "util/configparser.c" break; case 326: #line 860 "util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4043 "util/configparser.c" break; case 327: #line 869 "util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else if (atoi((yyvsp[0].str)) > 6553500) cfg_parser->cfg->tcp_keepalive_timeout = 6553500; else if (atoi((yyvsp[0].str)) < 1) cfg_parser->cfg->tcp_keepalive_timeout = 0; else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4059 "util/configparser.c" break; case 328: #line 882 "util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4071 "util/configparser.c" break; case 329: #line 891 "util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4083 "util/configparser.c" break; case 330: #line 900 "util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4095 "util/configparser.c" break; case 331: #line 909 "util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } #line 4105 "util/configparser.c" break; case 332: #line 916 "util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } #line 4115 "util/configparser.c" break; case 333: #line 923 "util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4127 "util/configparser.c" break; case 334: #line 932 "util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } #line 4137 "util/configparser.c" break; case 335: #line 939 "util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4149 "util/configparser.c" break; case 336: #line 948 "util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } #line 4160 "util/configparser.c" break; case 337: #line 956 "util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } #line 4170 "util/configparser.c" break; case 338: #line 963 "util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } #line 4180 "util/configparser.c" break; case 339: #line 970 "util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } #line 4191 "util/configparser.c" break; case 340: #line 978 "util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4203 "util/configparser.c" break; case 341: #line 987 "util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4215 "util/configparser.c" break; case 342: #line 995 "util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') { cfg_parser->cfg->http_endpoint = malloc(strlen((yyvsp[0].str))+2); if(!cfg_parser->cfg->http_endpoint) yyerror("out of memory"); cfg_parser->cfg->http_endpoint[0] = '/'; memmove(cfg_parser->cfg->http_endpoint+1, (yyvsp[0].str), strlen((yyvsp[0].str))+1); free((yyvsp[0].str)); } else { cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } #line 4235 "util/configparser.c" break; case 343: #line 1011 "util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4247 "util/configparser.c" break; case 344: #line 1019 "util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->http_query_buffer_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 4259 "util/configparser.c" break; case 345: #line 1027 "util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->http_response_buffer_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 4271 "util/configparser.c" break; case 346: #line 1035 "util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4283 "util/configparser.c" break; case 347: #line 1043 "util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4295 "util/configparser.c" break; case 348: #line 1051 "util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4307 "util/configparser.c" break; case 349: #line 1060 "util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4319 "util/configparser.c" break; case 350: #line 1069 "util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0); #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) if(strcmp((yyvsp[0].str), "yes") == 0) yyerror("no syslog services are available. " "(reconfigure and compile to add)"); #endif free((yyvsp[0].str)); } #line 4336 "util/configparser.c" break; case 351: #line 1083 "util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4348 "util/configparser.c" break; case 352: #line 1092 "util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4360 "util/configparser.c" break; case 353: #line 1101 "util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4372 "util/configparser.c" break; case 354: #line 1110 "util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4384 "util/configparser.c" break; case 355: #line 1119 "util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4396 "util/configparser.c" break; case 356: #line 1128 "util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4408 "util/configparser.c" break; case 357: #line 1137 "util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } #line 4418 "util/configparser.c" break; case 358: #line 1144 "util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } #line 4428 "util/configparser.c" break; case 359: #line 1151 "util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); cfg_parser->cfg->directory = (yyvsp[0].str); /* change there right away for includes relative to this */ if((yyvsp[0].str)[0]) { char* d; #ifdef UB_ON_WINDOWS w_config_adjust_directory(cfg_parser->cfg); #endif d = cfg_parser->cfg->directory; /* adjust directory if we have already chroot, * like, we reread after sighup */ if(cfg_parser->chroot && cfg_parser->chroot[0] && strncmp(d, cfg_parser->chroot, strlen( cfg_parser->chroot)) == 0) d += strlen(cfg_parser->chroot); if(d[0]) { if(chdir(d)) log_err("cannot chdir to directory: %s (%s)", d, strerror(errno)); } } } #line 4457 "util/configparser.c" break; case 360: #line 1177 "util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } #line 4468 "util/configparser.c" break; case 361: #line 1185 "util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } #line 4478 "util/configparser.c" break; case 362: #line 1192 "util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } #line 4488 "util/configparser.c" break; case 363: #line 1199 "util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } #line 4498 "util/configparser.c" break; case 364: #line 1206 "util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } #line 4508 "util/configparser.c" break; case 365: #line 1213 "util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } #line 4519 "util/configparser.c" break; case 366: #line 1221 "util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } #line 4530 "util/configparser.c" break; case 367: #line 1229 "util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } #line 4541 "util/configparser.c" break; case 368: #line 1237 "util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } #line 4551 "util/configparser.c" break; case 369: #line 1244 "util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->trust_anchor_signaling = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4565 "util/configparser.c" break; case 370: #line 1255 "util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->root_key_sentinel = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4579 "util/configparser.c" break; case 371: #line 1266 "util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } #line 4589 "util/configparser.c" break; case 372: #line 1273 "util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4601 "util/configparser.c" break; case 373: #line 1282 "util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4613 "util/configparser.c" break; case 374: #line 1291 "util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4625 "util/configparser.c" break; case 375: #line 1300 "util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } #line 4635 "util/configparser.c" break; case 376: #line 1307 "util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } #line 4645 "util/configparser.c" break; case 377: #line 1314 "util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->nsid_cfg_str); cfg_parser->cfg->nsid_cfg_str = (yyvsp[0].str); free(cfg_parser->cfg->nsid); cfg_parser->cfg->nsid = NULL; cfg_parser->cfg->nsid_len = 0; if (*(yyvsp[0].str) == 0) ; /* pass; empty string is not setting nsid */ else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( (yyvsp[0].str), &cfg_parser->cfg->nsid_len))) yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } #line 4664 "util/configparser.c" break; case 378: #line 1330 "util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } #line 4675 "util/configparser.c" break; case 379: #line 1338 "util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } #line 4686 "util/configparser.c" break; case 380: #line 1346 "util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->so_reuseport = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4699 "util/configparser.c" break; case 381: #line 1356 "util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ip_transparent = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4712 "util/configparser.c" break; case 382: #line 1366 "util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ip_freebind = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4725 "util/configparser.c" break; case 383: #line 1376 "util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else if (atoi((yyvsp[0].str)) > 63) yyerror("value too large (max 63)"); else if (atoi((yyvsp[0].str)) < 0) yyerror("value too small (min 0)"); else cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4742 "util/configparser.c" break; case 384: #line 1390 "util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 4753 "util/configparser.c" break; case 385: #line 1398 "util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else if (atoi((yyvsp[0].str)) < 12) yyerror("edns buffer size too small"); else if (atoi((yyvsp[0].str)) > 65535) cfg_parser->cfg->edns_buffer_size = 65535; else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4769 "util/configparser.c" break; case 386: #line 1411 "util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else if (atoi((yyvsp[0].str)) < 4096) yyerror("message buffer size too small (use 4096)"); else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4783 "util/configparser.c" break; case 387: #line 1422 "util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 4794 "util/configparser.c" break; case 388: #line 1430 "util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 4810 "util/configparser.c" break; case 389: #line 1443 "util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4822 "util/configparser.c" break; case 390: #line 1452 "util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4834 "util/configparser.c" break; case 391: #line 1461 "util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4846 "util/configparser.c" break; case 392: #line 1470 "util/configparser.y" { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4858 "util/configparser.c" break; case 393: #line 1479 "util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->unblock_lan_zones = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4871 "util/configparser.c" break; case 394: #line 1489 "util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->insecure_lan_zones = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4884 "util/configparser.c" break; case 395: #line 1499 "util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 4895 "util/configparser.c" break; case 396: #line 1507 "util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 4911 "util/configparser.c" break; case 397: #line 1520 "util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4923 "util/configparser.c" break; case 398: #line 1529 "util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } #line 4934 "util/configparser.c" break; case 399: #line 1537 "util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4946 "util/configparser.c" break; case 400: #line 1546 "util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } #line 4957 "util/configparser.c" break; case 401: #line 1554 "util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 4973 "util/configparser.c" break; case 402: #line 1567 "util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 4985 "util/configparser.c" break; case 403: #line 1576 "util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->infra_keep_probing = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 4998 "util/configparser.c" break; case 404: #line 1586 "util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } #line 5008 "util/configparser.c" break; case 405: #line 1593 "util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_short_bufsize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5021 "util/configparser.c" break; case 406: #line 1603 "util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_large_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5034 "util/configparser.c" break; case 407: #line 1613 "util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_glue = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5047 "util/configparser.c" break; case 408: #line 1623 "util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_dnssec_stripped = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5060 "util/configparser.c" break; case 409: #line 1633 "util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_below_nxdomain = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5073 "util/configparser.c" break; case 410: #line 1643 "util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_referral_path = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5086 "util/configparser.c" break; case 411: #line 1653 "util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->harden_algo_downgrade = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5099 "util/configparser.c" break; case 412: #line 1663 "util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->use_caps_bits_for_id = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5112 "util/configparser.c" break; case 413: #line 1673 "util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } #line 5122 "util/configparser.c" break; case 414: #line 1680 "util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } #line 5132 "util/configparser.c" break; case 415: #line 1687 "util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } #line 5142 "util/configparser.c" break; case 416: #line 1694 "util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5154 "util/configparser.c" break; case 417: #line 1703 "util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5166 "util/configparser.c" break; case 418: #line 1712 "util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5178 "util/configparser.c" break; case 419: #line 1721 "util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5190 "util/configparser.c" break; case 420: #line 1730 "util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } #line 5200 "util/configparser.c" break; case 421: #line 1737 "util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->donotquery_localhost = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5213 "util/configparser.c" break; case 422: #line 1747 "util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "deny_non_local")!=0 && strcmp((yyvsp[0].str), "refuse_non_local")!=0 && strcmp((yyvsp[0].str), "allow_setrd")!=0 && strcmp((yyvsp[0].str), "allow")!=0 && strcmp((yyvsp[0].str), "allow_snoop")!=0) { yyerror("expected deny, refuse, deny_non_local, " "refuse_non_local, allow, allow_setrd or " "allow_snoop in access control action"); free((yyvsp[-1].str)); free((yyvsp[0].str)); } else { if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } } #line 5236 "util/configparser.c" break; case 423: #line 1767 "util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } #line 5246 "util/configparser.c" break; case 424: #line 1774 "util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_date_override = 0; } else if(strlen((yyvsp[0].str)) == 14) { cfg_parser->cfg->val_date_override = cfg_convert_timeval((yyvsp[0].str)); if(!cfg_parser->cfg->val_date_override) yyerror("bad date/time specification"); } else { if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str)); } free((yyvsp[0].str)); } #line 5267 "util/configparser.c" break; case 425: #line 1792 "util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_sig_skew_min = 0; } else { cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str)); if(!cfg_parser->cfg->val_sig_skew_min) yyerror("number expected"); } free((yyvsp[0].str)); } #line 5283 "util/configparser.c" break; case 426: #line 1805 "util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { cfg_parser->cfg->val_sig_skew_max = 0; } else { cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str)); if(!cfg_parser->cfg->val_sig_skew_max) yyerror("number expected"); } free((yyvsp[0].str)); } #line 5299 "util/configparser.c" break; case 427: #line 1818 "util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5311 "util/configparser.c" break; case 428: #line 1827 "util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5323 "util/configparser.c" break; case 429: #line 1836 "util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5335 "util/configparser.c" break; case 430: #line 1845 "util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5347 "util/configparser.c" break; case 431: #line 1854 "util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->val_clean_additional = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5360 "util/configparser.c" break; case 432: #line 1864 "util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->val_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5373 "util/configparser.c" break; case 433: #line 1874 "util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->aggressive_nsec = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5387 "util/configparser.c" break; case 434: #line 1885 "util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5399 "util/configparser.c" break; case 435: #line 1894 "util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5411 "util/configparser.c" break; case 436: #line 1903 "util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5423 "util/configparser.c" break; case 437: #line 1912 "util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5435 "util/configparser.c" break; case 438: #line 1921 "util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5447 "util/configparser.c" break; case 439: #line 1930 "util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5459 "util/configparser.c" break; case 440: #line 1939 "util/configparser.y" { OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5471 "util/configparser.c" break; case 441: #line 1948 "util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); #if defined(HAVE_SSL) || defined(HAVE_NETTLE) else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0); if(fake_dsa) log_warn("test option fake_dsa is enabled"); #endif free((yyvsp[0].str)); } #line 5487 "util/configparser.c" break; case 442: #line 1961 "util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); #if defined(HAVE_SSL) || defined(HAVE_NETTLE) else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0); if(fake_sha1) log_warn("test option fake_sha1 is enabled"); #endif free((yyvsp[0].str)); } #line 5503 "util/configparser.c" break; case 443: #line 1974 "util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5515 "util/configparser.c" break; case 444: #line 1983 "util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } #line 5525 "util/configparser.c" break; case 445: #line 1990 "util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5537 "util/configparser.c" break; case 446: #line 1999 "util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5549 "util/configparser.c" break; case 447: #line 2008 "util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5561 "util/configparser.c" break; case 448: #line 2017 "util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->permit_small_holddown = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5574 "util/configparser.c" break; case 449: #line 2026 "util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 5585 "util/configparser.c" break; case 450: #line 2034 "util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 5601 "util/configparser.c" break; case 451: #line 2047 "util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 5612 "util/configparser.c" break; case 452: #line 2055 "util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0 && strcmp((yyvsp[0].str), "typetransparent")!=0 && strcmp((yyvsp[0].str), "always_transparent")!=0 && strcmp((yyvsp[0].str), "always_refuse")!=0 && strcmp((yyvsp[0].str), "always_nxdomain")!=0 && strcmp((yyvsp[0].str), "always_nodata")!=0 && strcmp((yyvsp[0].str), "always_deny")!=0 && strcmp((yyvsp[0].str), "always_null")!=0 && strcmp((yyvsp[0].str), "noview")!=0 && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0 && strcmp((yyvsp[0].str), "inform_redirect") != 0 && strcmp((yyvsp[0].str), "ipset") != 0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "inform_redirect, always_transparent, " "always_refuse, always_nxdomain, " "always_nodata, always_deny, always_null, " "noview, nodefault or ipset"); free((yyvsp[-1].str)); free((yyvsp[0].str)); } else if(strcmp((yyvsp[0].str), "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_nodefault, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); free((yyvsp[0].str)); #ifdef USE_IPSET } else if(strcmp((yyvsp[0].str), "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_zones_ipset, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); free((yyvsp[0].str)); #endif } else { if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding local-zone"); } } #line 5660 "util/configparser.c" break; case 453: #line 2100 "util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } #line 5670 "util/configparser.c" break; case 454: #line 2107 "util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); ptr = cfg_ptr_reverse((yyvsp[0].str)); free((yyvsp[0].str)); if(ptr) { if(!cfg_strlist_insert(&cfg_parser->cfg-> local_data, ptr)) fatal_exit("out of memory adding local-data"); } else { yyerror("local-data-ptr could not be reversed"); } } #line 5688 "util/configparser.c" break; case 455: #line 2122 "util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->minimal_responses = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5701 "util/configparser.c" break; case 456: #line 2132 "util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->rrset_roundrobin = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5714 "util/configparser.c" break; case 457: #line 2142 "util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5724 "util/configparser.c" break; case 458: #line 2149 "util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5734 "util/configparser.c" break; case 459: #line 2156 "util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } #line 5744 "util/configparser.c" break; case 460: #line 2163 "util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 5756 "util/configparser.c" break; case 461: #line 2172 "util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } #line 5767 "util/configparser.c" break; case 462: #line 2180 "util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); while((p=strsep(&s, " \t\n")) != NULL) { if(*p) { if(!config_add_tag(cfg_parser->cfg, p)) yyerror("could not define-tag, " "out of memory"); } } free((yyvsp[0].str)); } #line 5784 "util/configparser.c" break; case 463: #line 2194 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); free((yyvsp[0].str)); OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str))); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); free((yyvsp[-1].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->local_zone_tags, (yyvsp[-1].str), bitlist, len)) { yyerror("out of memory"); free((yyvsp[-1].str)); } } } #line 5808 "util/configparser.c" break; case 464: #line 2215 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); free((yyvsp[0].str)); OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str))); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); free((yyvsp[-1].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->acl_tags, (yyvsp[-1].str), bitlist, len)) { yyerror("out of memory"); free((yyvsp[-1].str)); } } } #line 5832 "util/configparser.c" break; case 465: #line 2236 "util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); free((yyvsp[-2].str)); free((yyvsp[-1].str)); free((yyvsp[0].str)); } } #line 5847 "util/configparser.c" break; case 466: #line 2248 "util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); free((yyvsp[-2].str)); free((yyvsp[-1].str)); free((yyvsp[0].str)); } } #line 5862 "util/configparser.c" break; case 467: #line 2260 "util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); free((yyvsp[-2].str)); free((yyvsp[-1].str)); free((yyvsp[0].str)); } } #line 5877 "util/configparser.c" break; case 468: #line 2272 "util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, (yyvsp[-1].str), (yyvsp[0].str))) { yyerror("out of memory"); } } #line 5889 "util/configparser.c" break; case 469: #line 2281 "util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), &len); free((yyvsp[0].str)); OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str))); if(!bitlist) { yyerror("could not parse tags, (define-tag them first)"); free((yyvsp[-1].str)); } if(bitlist) { if(!cfg_strbytelist_insert( &cfg_parser->cfg->respip_tags, (yyvsp[-1].str), bitlist, len)) { yyerror("out of memory"); free((yyvsp[-1].str)); } } } #line 5913 "util/configparser.c" break; case 470: #line 2302 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5925 "util/configparser.c" break; case 471: #line 2312 "util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 5937 "util/configparser.c" break; case 472: #line 2321 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 5948 "util/configparser.c" break; case 473: #line 2329 "util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 5959 "util/configparser.c" break; case 474: #line 2337 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 5975 "util/configparser.c" break; case 475: #line 2350 "util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 5991 "util/configparser.c" break; case 476: #line 2363 "util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { yyerror("number expected"); free((yyvsp[-1].str)); free((yyvsp[0].str)); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding " "ratelimit-for-domain"); } } #line 6009 "util/configparser.c" break; case 477: #line 2378 "util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { yyerror("number expected"); free((yyvsp[-1].str)); free((yyvsp[0].str)); } else { if(!cfg_str2list_insert(&cfg_parser->cfg-> ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding " "ratelimit-below-domain"); } } #line 6027 "util/configparser.c" break; case 478: #line 2393 "util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6039 "util/configparser.c" break; case 479: #line 2402 "util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6051 "util/configparser.c" break; case 480: #line 2411 "util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } #line 6060 "util/configparser.c" break; case 481: #line 2417 "util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6072 "util/configparser.c" break; case 482: #line 2426 "util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6084 "util/configparser.c" break; case 483: #line 2435 "util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->qname_minimisation = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6097 "util/configparser.c" break; case 484: #line 2445 "util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->qname_minimisation_strict = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6110 "util/configparser.c" break; case 485: #line 2455 "util/configparser.y" { OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->pad_responses = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6123 "util/configparser.c" break; case 486: #line 2465 "util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6135 "util/configparser.c" break; case 487: #line 2474 "util/configparser.y" { OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->pad_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6148 "util/configparser.c" break; case 488: #line 2484 "util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6160 "util/configparser.c" break; case 489: #line 2493 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 6176 "util/configparser.c" break; case 490: #line 2506 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 6192 "util/configparser.c" break; case 491: #line 2519 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ipsecmod_hook); cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 6207 "util/configparser.c" break; case 492: #line 2531 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("number expected"); else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 6224 "util/configparser.c" break; case 493: #line 2545 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str))) yyerror("out of memory"); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 6239 "util/configparser.c" break; case 494: #line 2557 "util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); #else OUTYY(("P(Compiled without IPsec module, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 6256 "util/configparser.c" break; case 495: #line 2571 "util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding " "edns-client-string"); } #line 6268 "util/configparser.c" break; case 496: #line 2580 "util/configparser.y" { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) yyerror("option code expected"); else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0) yyerror("option code must be in interval [0, 65535]"); else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6283 "util/configparser.c" break; case 497: #line 2592 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) yyerror("stub name override, there must be one name " "for one stub-zone"); free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } #line 6296 "util/configparser.c" break; case 498: #line 2602 "util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } #line 6306 "util/configparser.c" break; case 499: #line 2609 "util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } #line 6316 "util/configparser.c" break; case 500: #line 2616 "util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6328 "util/configparser.c" break; case 501: #line 2625 "util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6340 "util/configparser.c" break; case 502: #line 2634 "util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6353 "util/configparser.c" break; case 503: #line 2644 "util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->stubs->isprime = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6366 "util/configparser.c" break; case 504: #line 2654 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) yyerror("forward name override, there must be one " "name for one forward-zone"); free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } #line 6379 "util/configparser.c" break; case 505: #line 2664 "util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } #line 6389 "util/configparser.c" break; case 506: #line 2671 "util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } #line 6399 "util/configparser.c" break; case 507: #line 2678 "util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6411 "util/configparser.c" break; case 508: #line 2687 "util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6423 "util/configparser.c" break; case 509: #line 2696 "util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->forwards->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6436 "util/configparser.c" break; case 510: #line 2706 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) yyerror("auth name override, there must be one name " "for one auth-zone"); free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } #line 6449 "util/configparser.c" break; case 511: #line 2716 "util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } #line 6459 "util/configparser.c" break; case 512: #line 2723 "util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } #line 6469 "util/configparser.c" break; case 513: #line 2730 "util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } #line 6479 "util/configparser.c" break; case 514: #line 2737 "util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } #line 6490 "util/configparser.c" break; case 515: #line 2745 "util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->for_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6503 "util/configparser.c" break; case 516: #line 2755 "util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->for_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6516 "util/configparser.c" break; case 517: #line 2765 "util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->auths->fallback_enabled = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6529 "util/configparser.c" break; case 518: #line 2775 "util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) yyerror("view name override, there must be one " "name for one view"); free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } #line 6542 "util/configparser.c" break; case 519: #line 2785 "util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 && strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0 && strcmp((yyvsp[0].str), "typetransparent")!=0 && strcmp((yyvsp[0].str), "always_transparent")!=0 && strcmp((yyvsp[0].str), "always_refuse")!=0 && strcmp((yyvsp[0].str), "always_nxdomain")!=0 && strcmp((yyvsp[0].str), "noview")!=0 && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0) { yyerror("local-zone type: expected static, deny, " "refuse, redirect, transparent, " "typetransparent, inform, inform_deny, " "always_transparent, always_refuse, " "always_nxdomain, noview or nodefault"); free((yyvsp[-1].str)); free((yyvsp[0].str)); } else if(strcmp((yyvsp[0].str), "nodefault")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_zones_nodefault, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); free((yyvsp[0].str)); #ifdef USE_IPSET } else if(strcmp((yyvsp[0].str), "ipset")==0) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_zones_ipset, (yyvsp[-1].str))) fatal_exit("out of memory adding local-zone"); free((yyvsp[0].str)); #endif } else { if(!cfg_str2list_insert( &cfg_parser->cfg->views->local_zones, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding local-zone"); } } #line 6584 "util/configparser.c" break; case 520: #line 2824 "util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding per-view " "response-ip action"); } #line 6597 "util/configparser.c" break; case 521: #line 2834 "util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } #line 6608 "util/configparser.c" break; case 522: #line 2842 "util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } #line 6619 "util/configparser.c" break; case 523: #line 2850 "util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); ptr = cfg_ptr_reverse((yyvsp[0].str)); free((yyvsp[0].str)); if(ptr) { if(!cfg_strlist_insert(&cfg_parser->cfg->views-> local_data, ptr)) fatal_exit("out of memory adding local-data"); } else { yyerror("local-data-ptr could not be reversed"); } } #line 6637 "util/configparser.c" break; case 524: #line 2865 "util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6649 "util/configparser.c" break; case 525: #line 2874 "util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); } #line 6657 "util/configparser.c" break; case 536: #line 2885 "util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->remote_control_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6670 "util/configparser.c" break; case 537: #line 2895 "util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("control port number expected"); else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 6682 "util/configparser.c" break; case 538: #line 2904 "util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } #line 6692 "util/configparser.c" break; case 539: #line 2911 "util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6702 "util/configparser.c" break; case 540: #line 2918 "util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } #line 6712 "util/configparser.c" break; case 541: #line 2925 "util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } #line 6722 "util/configparser.c" break; case 542: #line 2932 "util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } #line 6732 "util/configparser.c" break; case 543: #line 2939 "util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } #line 6742 "util/configparser.c" break; case 544: #line 2946 "util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); } #line 6750 "util/configparser.c" break; case 566: #line 2966 "util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6762 "util/configparser.c" break; case 567: #line 2975 "util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_bidirectional = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6775 "util/configparser.c" break; case 568: #line 2985 "util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } #line 6785 "util/configparser.c" break; case 569: #line 2992 "util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } #line 6795 "util/configparser.c" break; case 570: #line 2999 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6807 "util/configparser.c" break; case 571: #line 3008 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } #line 6817 "util/configparser.c" break; case 572: #line 3015 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } #line 6827 "util/configparser.c" break; case 573: #line 3022 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } #line 6837 "util/configparser.c" break; case 574: #line 3029 "util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } #line 6847 "util/configparser.c" break; case 575: #line 3036 "util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6859 "util/configparser.c" break; case 576: #line 3045 "util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6871 "util/configparser.c" break; case 577: #line 3054 "util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } #line 6881 "util/configparser.c" break; case 578: #line 3061 "util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } #line 6891 "util/configparser.c" break; case 579: #line 3068 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6904 "util/configparser.c" break; case 580: #line 3078 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6917 "util/configparser.c" break; case 581: #line 3088 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6930 "util/configparser.c" break; case 582: #line 3098 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6943 "util/configparser.c" break; case 583: #line 3108 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6956 "util/configparser.c" break; case 584: #line 3118 "util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 6969 "util/configparser.c" break; case 585: #line 3128 "util/configparser.y" { OUTYY(("\nP(python:)\n")); } #line 6977 "util/configparser.c" break; case 589: #line 3137 "util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } #line 6987 "util/configparser.c" break; case 590: #line 3143 "util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); } #line 6995 "util/configparser.c" break; case 594: #line 3152 "util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } #line 7005 "util/configparser.c" break; case 595: #line 3158 "util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->disable_dnssec_lame_check = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 7018 "util/configparser.c" break; case 596: #line 3168 "util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } #line 7028 "util/configparser.c" break; case 597: #line 3175 "util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } #line 7040 "util/configparser.c" break; case 598: #line 3184 "util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } #line 7051 "util/configparser.c" break; case 599: #line 3192 "util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); } #line 7059 "util/configparser.c" break; case 612: #line 3208 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } #line 7071 "util/configparser.c" break; case 613: #line 3218 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("port number expected"); else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } #line 7083 "util/configparser.c" break; case 614: #line 3227 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } #line 7093 "util/configparser.c" break; case 615: #line 3234 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } #line 7105 "util/configparser.c" break; case 616: #line 3243 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } #line 7115 "util/configparser.c" break; case 617: #line 3250 "util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str)); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } #line 7127 "util/configparser.c" break; case 618: #line 3259 "util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 7138 "util/configparser.c" break; case 619: #line 3267 "util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 7154 "util/configparser.c" break; case 620: #line 3280 "util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } #line 7165 "util/configparser.c" break; case 621: #line 3288 "util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("number expected"); else { cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str)); if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) yyerror("must be a power of 2"); } free((yyvsp[0].str)); } #line 7181 "util/configparser.c" break; case 622: #line 3301 "util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); } #line 7189 "util/configparser.c" break; case 631: #line 3312 "util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_backend); cfg_parser->cfg->cachedb_backend = (yyvsp[0].str); #else OUTYY(("P(Compiled without cachedb, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 7204 "util/configparser.c" break; case 632: #line 3324 "util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->cachedb_secret); cfg_parser->cfg->cachedb_secret = (yyvsp[0].str); #else OUTYY(("P(Compiled without cachedb, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 7219 "util/configparser.c" break; case 633: #line 3336 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->redis_server_host); cfg_parser->cfg->redis_server_host = (yyvsp[0].str); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 7234 "util/configparser.c" break; case 634: #line 3348 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str))); port = atoi((yyvsp[0].str)); if(port == 0 || port < 0 || port > 65535) yyerror("valid redis server port number expected"); else cfg_parser->cfg->redis_server_port = port; #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 7252 "util/configparser.c" break; case 635: #line 3363 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) yyerror("redis timeout value expected"); else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str)); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 7268 "util/configparser.c" break; case 636: #line 3376 "util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0); #else OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); #endif free((yyvsp[0].str)); } #line 7284 "util/configparser.c" break; case 637: #line 3389 "util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) yyerror("positive number expected"); else { if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding tcp connection limit"); } } #line 7298 "util/configparser.c" break; case 638: #line 3400 "util/configparser.y" { OUTYY(("\nP(ipset:)\n")); } #line 7306 "util/configparser.c" break; case 643: #line 3409 "util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->ipset_name_v4) yyerror("ipset name v4 override, there must be one " "name for ip v4"); free(cfg_parser->cfg->ipset_name_v4); cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str); #else OUTYY(("P(Compiled without ipset, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 7324 "util/configparser.c" break; case 644: #line 3424 "util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->ipset_name_v6) yyerror("ipset name v6 override, there must be one " "name for ip v6"); free(cfg_parser->cfg->ipset_name_v6); cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str); #else OUTYY(("P(Compiled without ipset, ignoring)\n")); free((yyvsp[0].str)); #endif } #line 7342 "util/configparser.c" break; #line 7346 "util/configparser.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; yyerror (YY_("syntax error")); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYSYMBOL_YYerror; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", YY_ACCESSING_SYMBOL (yystate), yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif return yyresult; } #line 3438 "util/configparser.y" /* parse helper routines could be here */ static void validate_respip_action(const char* action) { if(strcmp(action, "deny")!=0 && strcmp(action, "redirect")!=0 && strcmp(action, "inform")!=0 && strcmp(action, "inform_deny")!=0 && strcmp(action, "always_transparent")!=0 && strcmp(action, "always_refuse")!=0 && strcmp(action, "always_nxdomain")!=0) { yyerror("response-ip action: expected deny, redirect, " "inform, inform_deny, always_transparent, " "always_refuse or always_nxdomain"); } } unbound-1.13.1/util/mini_event.h0000644000175000017500000001501714010434640016166 0ustar wouterwouter/* * mini-event.h - micro implementation of libevent api, using select() only. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * This file implements part of the event(3) libevent api. * The back end is only select. Max number of fds is limited. * Max number of signals is limited, one handler per signal only. * And one handler per fd. * * Although limited to select() and a max (1024) open fds, it * is efficient: * o dispatch call caches fd_sets to use. * o handler calling takes time ~ to the number of fds. * o timeouts are stored in a redblack tree, sorted, so take log(n). * Timeouts are only accurate to the second (no subsecond accuracy). * To avoid cpu hogging, fractional timeouts are rounded up to a whole second. */ #ifndef MINI_EVENT_H #define MINI_EVENT_H #if defined(USE_MINI_EVENT) && !defined(USE_WINSOCK) #ifdef HAVE_SYS_SELECT_H /* for fd_set on OpenBSD */ #include #endif #include #ifndef HAVE_EVENT_BASE_FREE #define HAVE_EVENT_BASE_FREE #endif /* redefine to use our own namespace so that on platforms where * linkers crosslink library-private symbols with other symbols, it works */ #define event_init minievent_init #define event_get_version minievent_get_version #define event_get_method minievent_get_method #define event_base_dispatch minievent_base_dispatch #define event_base_loopexit minievent_base_loopexit #define event_base_free minievent_base_free #define event_set minievent_set #define event_base_set minievent_base_set #define event_add minievent_add #define event_del minievent_del #define signal_add minisignal_add #define signal_del minisignal_del /** event timeout */ #define EV_TIMEOUT 0x01 /** event fd readable */ #define EV_READ 0x02 /** event fd writable */ #define EV_WRITE 0x04 /** event signal */ #define EV_SIGNAL 0x08 /** event must persist */ #define EV_PERSIST 0x10 /* needs our redblack tree */ #include "rbtree.h" /** max number of file descriptors to support */ #define MAX_FDS 1024 /** max number of signals to support */ #define MAX_SIG 32 /** event base */ struct event_base { /** sorted by timeout (absolute), ptr */ rbtree_type* times; /** array of 0 - maxfd of ptr to event for it */ struct event** fds; /** max fd in use */ int maxfd; /** capacity - size of the fds array */ int capfd; /* fdset for read write, for fds ready, and added */ fd_set /** fds for reading */ reads, /** fds for writing */ writes, /** fds determined ready for use */ ready, /** ready plus newly added events. */ content; /** array of 0 - maxsig of ptr to event for it */ struct event** signals; /** if we need to exit */ int need_to_exit; /** where to store time in seconds */ time_t* time_secs; /** where to store time in microseconds */ struct timeval* time_tv; }; /** * Event structure. Has some of the event elements. */ struct event { /** node in timeout rbtree */ rbnode_type node; /** is event already added */ int added; /** event base it belongs to */ struct event_base *ev_base; /** fd to poll or -1 for timeouts. signal number for sigs. */ int ev_fd; /** what events this event is interested in, see EV_.. above. */ short ev_events; /** timeout value */ struct timeval ev_timeout; /** callback to call: fd, eventbits, userarg */ void (*ev_callback)(int, short, void *arg); /** callback user arg */ void *ev_arg; }; /* function prototypes (some are as they appear in event.h) */ /** create event base */ void *event_init(time_t* time_secs, struct timeval* time_tv); /** get version */ const char *event_get_version(void); /** get polling method, select */ const char *event_get_method(void); /** run select in a loop */ int event_base_dispatch(struct event_base *); /** exit that loop */ int event_base_loopexit(struct event_base *, struct timeval *); /** free event base. Free events yourself */ void event_base_free(struct event_base *); /** set content of event */ void event_set(struct event *, int, short, void (*)(int, short, void *), void *); /** add event to a base. You *must* call this for every event. */ int event_base_set(struct event_base *, struct event *); /** add event to make it active. You may not change it with event_set anymore */ int event_add(struct event *, struct timeval *); /** remove event. You may change it again */ int event_del(struct event *); /** add a timer */ #define evtimer_add(ev, tv) event_add(ev, tv) /** remove a timer */ #define evtimer_del(ev) event_del(ev) /* uses different implementation. Cannot mix fd/timeouts and signals inside * the same struct event. create several event structs for that. */ /** install signal handler */ int signal_add(struct event *, struct timeval *); /** set signal event contents */ #define signal_set(ev, x, cb, arg) \ event_set(ev, x, EV_SIGNAL|EV_PERSIST, cb, arg) /** remove signal handler */ int signal_del(struct event *); #endif /* USE_MINI_EVENT and not USE_WINSOCK */ /** compare events in tree, based on timevalue, ptr for uniqueness */ int mini_ev_cmp(const void* a, const void* b); #endif /* MINI_EVENT_H */ unbound-1.13.1/util/iana_ports.inc0000644000175000017500000007747714010434640016534 0ustar wouterwouter1, 2, 3, 5, 7, 9, 11, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31, 33, 35, 37, 38, 39, 41, 42, 43, 44, 45, 46, 48, 49, 50, 52, 53, 54, 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 242, 243, 244, 245, 246, 247, 248, 256, 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 280, 281, 282, 283, 284, 286, 287, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 333, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 704, 705, 706, 707, 709, 710, 711, 712, 713, 714, 715, 716, 729, 730, 731, 741, 742, 744, 747, 748, 749, 750, 751, 752, 753, 754, 758, 759, 760, 761, 762, 763, 764, 765, 767, 769, 770, 771, 772, 773, 774, 775, 776, 777, 780, 800, 801, 802, 810, 828, 829, 830, 831, 832, 833, 847, 848, 853, 854, 860, 861, 862, 873, 886, 887, 888, 900, 901, 902, 903, 910, 911, 912, 913, 989, 990, 991, 992, 993, 995, 996, 997, 998, 999, 1000, 1008, 1010, 1021, 1022, 1025, 1026, 1027, 1029, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2190, 2191, 2192, 2193, 2197, 2198, 2199, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2370, 2372, 2378, 2381, 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821, 2822, 2823, 2824, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 3000, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3093, 3094, 3095, 3096, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3122, 3123, 3124, 3125, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691, 3692, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3842, 3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859, 3860, 3861, 3862, 3863, 3865, 3866, 3867, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4079, 4080, 4081, 4082, 4083, 4084, 4086, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4172, 4173, 4174, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4188, 4191, 4192, 4195, 4197, 4199, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4320, 4321, 4322, 4323, 4325, 4326, 4327, 4328, 4333, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359, 4361, 4362, 4366, 4368, 4369, 4370, 4371, 4372, 4373, 4375, 4376, 4377, 4378, 4379, 4389, 4390, 4394, 4395, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 4412, 4413, 4416, 4418, 4420, 4425, 4426, 4430, 4432, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4484, 4486, 4488, 4500, 4534, 4535, 4536, 4537, 4538, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4554, 4555, 4556, 4557, 4558, 4559, 4566, 4567, 4568, 4569, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601, 4621, 4646, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4700, 4701, 4702, 4711, 4725, 4726, 4727, 4728, 4729, 4730, 4732, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4784, 4785, 4789, 4790, 4791, 4800, 4801, 4802, 4803, 4804, 4827, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4867, 4868, 4869, 4870, 4871, 4876, 4877, 4878, 4881, 4882, 4884, 4885, 4894, 4899, 4900, 4914, 4936, 4937, 4940, 4941, 4942, 4949, 4950, 4951, 4952, 4969, 4970, 4980, 4986, 4987, 4988, 4989, 4990, 4991, 4999, 5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5029, 5030, 5031, 5042, 5043, 5044, 5046, 5047, 5049, 5050, 5051, 5052, 5053, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5064, 5065, 5066, 5067, 5069, 5070, 5071, 5072, 5073, 5074, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5092, 5093, 5094, 5099, 5100, 5101, 5102, 5104, 5105, 5111, 5112, 5116, 5120, 5133, 5136, 5137, 5145, 5150, 5151, 5152, 5154, 5155, 5164, 5165, 5166, 5167, 5168, 5190, 5191, 5192, 5193, 5200, 5201, 5202, 5203, 5223, 5224, 5225, 5226, 5227, 5234, 5235, 5236, 5237, 5245, 5246, 5247, 5248, 5249, 5250, 5251, 5252, 5264, 5265, 5270, 5271, 5272, 5282, 5298, 5299, 5300, 5301, 5302, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5310, 5312, 5313, 5314, 5315, 5343, 5344, 5349, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, 5364, 5397, 5398, 5399, 5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, 5410, 5411, 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5443, 5450, 5453, 5454, 5455, 5456, 5461, 5462, 5463, 5464, 5465, 5474, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 5553, 5554, 5555, 5556, 5567, 5568, 5569, 5573, 5580, 5581, 5582, 5583, 5584, 5585, 5597, 5598, 5599, 5600, 5601, 5602, 5603, 5604, 5605, 5627, 5628, 5629, 5630, 5631, 5632, 5633, 5634, 5670, 5671, 5672, 5673, 5674, 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5687, 5688, 5689, 5713, 5714, 5715, 5716, 5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, 5728, 5729, 5730, 5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, 5750, 5755, 5757, 5766, 5767, 5768, 5769, 5770, 5771, 5777, 5781, 5782, 5783, 5784, 5785, 5786, 5787, 5793, 5794, 5813, 5814, 5859, 5863, 5900, 5910, 5911, 5912, 5913, 5963, 5968, 5969, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 5999, 6000, 6064, 6065, 6066, 6069, 6070, 6071, 6072, 6073, 6074, 6080, 6081, 6082, 6083, 6085, 6086, 6087, 6088, 6100, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6110, 6111, 6112, 6118, 6122, 6123, 6124, 6133, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 6160, 6161, 6162, 6163, 6200, 6201, 6209, 6222, 6241, 6242, 6243, 6244, 6251, 6252, 6253, 6268, 6269, 6300, 6301, 6306, 6315, 6316, 6317, 6320, 6321, 6322, 6324, 6343, 6346, 6347, 6350, 6355, 6360, 6363, 6370, 6382, 6389, 6390, 6417, 6419, 6420, 6421, 6443, 6444, 6445, 6446, 6455, 6456, 6464, 6471, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 6487, 6488, 6489, 6500, 6501, 6502, 6503, 6505, 6506, 6507, 6508, 6509, 6510, 6511, 6514, 6515, 6543, 6544, 6547, 6548, 6549, 6550, 6551, 6558, 6566, 6568, 6579, 6580, 6581, 6582, 6583, 6619, 6620, 6621, 6622, 6623, 6626, 6627, 6628, 6629, 6633, 6634, 6635, 6636, 6653, 6657, 6670, 6671, 6672, 6673, 6678, 6679, 6689, 6696, 6699, 6701, 6702, 6703, 6714, 6715, 6767, 6768, 6769, 6770, 6771, 6784, 6785, 6786, 6787, 6788, 6790, 6791, 6801, 6831, 6841, 6842, 6850, 6868, 6888, 6924, 6935, 6936, 6946, 6951, 6961, 6962, 6963, 6964, 6965, 6966, 6969, 6997, 6998, 6999, 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7030, 7040, 7070, 7071, 7072, 7080, 7088, 7095, 7099, 7100, 7101, 7107, 7121, 7128, 7129, 7161, 7162, 7163, 7164, 7165, 7166, 7169, 7170, 7171, 7174, 7181, 7200, 7201, 7227, 7235, 7244, 7262, 7272, 7273, 7274, 7275, 7276, 7277, 7278, 7279, 7280, 7281, 7282, 7365, 7391, 7392, 7393, 7394, 7395, 7397, 7400, 7401, 7402, 7410, 7411, 7420, 7421, 7426, 7427, 7428, 7429, 7430, 7431, 7437, 7443, 7473, 7491, 7500, 7501, 7510, 7511, 7542, 7543, 7544, 7545, 7546, 7547, 7548, 7549, 7550, 7560, 7566, 7570, 7574, 7588, 7606, 7624, 7627, 7628, 7629, 7633, 7648, 7663, 7674, 7675, 7676, 7677, 7680, 7689, 7697, 7707, 7708, 7720, 7724, 7725, 7726, 7727, 7728, 7734, 7738, 7741, 7743, 7744, 7747, 7777, 7778, 7779, 7781, 7784, 7786, 7787, 7789, 7794, 7797, 7798, 7799, 7800, 7801, 7802, 7810, 7845, 7846, 7872, 7880, 7887, 7900, 7901, 7902, 7903, 7913, 7932, 7933, 7962, 7967, 7979, 7980, 7982, 7998, 7999, 8000, 8001, 8002, 8003, 8005, 8006, 8007, 8008, 8019, 8020, 8021, 8022, 8023, 8025, 8026, 8027, 8032, 8033, 8034, 8040, 8041, 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8074, 8080, 8081, 8082, 8083, 8086, 8087, 8088, 8097, 8100, 8111, 8115, 8116, 8118, 8121, 8122, 8128, 8129, 8130, 8131, 8132, 8148, 8149, 8160, 8161, 8182, 8184, 8192, 8194, 8195, 8199, 8200, 8201, 8202, 8204, 8205, 8206, 8207, 8208, 8211, 8230, 8231, 8232, 8243, 8266, 8276, 8280, 8282, 8292, 8294, 8300, 8301, 8320, 8321, 8322, 8351, 8376, 8377, 8378, 8379, 8380, 8383, 8384, 8400, 8401, 8402, 8403, 8416, 8417, 8442, 8443, 8444, 8445, 8450, 8472, 8473, 8474, 8500, 8501, 8503, 8554, 8555, 8567, 8600, 8609, 8610, 8611, 8612, 8613, 8614, 8675, 8686, 8732, 8733, 8763, 8764, 8765, 8766, 8770, 8786, 8787, 8793, 8800, 8804, 8805, 8807, 8808, 8809, 8873, 8880, 8883, 8888, 8889, 8890, 8891, 8892, 8893, 8894, 8899, 8900, 8901, 8910, 8911, 8912, 8913, 8954, 8980, 8981, 8989, 8990, 8991, 8999, 9000, 9001, 9002, 9006, 9007, 9009, 9011, 9020, 9021, 9022, 9023, 9024, 9025, 9026, 9060, 9080, 9081, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 9111, 9119, 9131, 9160, 9161, 9162, 9163, 9164, 9191, 9200, 9201, 9202, 9203, 9204, 9205, 9206, 9207, 9208, 9209, 9210, 9211, 9212, 9213, 9214, 9215, 9216, 9217, 9222, 9255, 9277, 9278, 9279, 9280, 9281, 9282, 9283, 9284, 9285, 9286, 9287, 9292, 9293, 9294, 9295, 9300, 9318, 9321, 9343, 9344, 9346, 9374, 9380, 9396, 9397, 9400, 9401, 9402, 9418, 9443, 9444, 9450, 9500, 9522, 9535, 9536, 9555, 9592, 9593, 9594, 9595, 9596, 9597, 9598, 9599, 9600, 9612, 9618, 9628, 9629, 9632, 9667, 9668, 9694, 9695, 9700, 9747, 9750, 9753, 9762, 9800, 9801, 9802, 9875, 9878, 9888, 9889, 9898, 9899, 9900, 9901, 9903, 9909, 9911, 9950, 9951, 9952, 9953, 9955, 9956, 9966, 9987, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999, 10000, 10001, 10002, 10003, 10007, 10008, 10009, 10023, 10050, 10051, 10080, 10081, 10100, 10101, 10102, 10103, 10104, 10107, 10110, 10111, 10113, 10114, 10115, 10116, 10117, 10128, 10160, 10161, 10162, 10200, 10201, 10252, 10253, 10260, 10288, 10439, 10500, 10540, 10541, 10542, 10543, 10544, 10800, 10805, 10810, 10860, 10880, 10990, 11000, 11001, 11095, 11106, 11108, 11111, 11112, 11161, 11162, 11163, 11164, 11165, 11171, 11201, 11208, 11211, 11319, 11320, 11321, 11367, 11371, 11430, 11600, 11720, 11723, 11751, 11796, 11876, 11877, 11967, 12000, 12001, 12002, 12003, 12004, 12005, 12006, 12007, 12008, 12009, 12012, 12013, 12109, 12121, 12168, 12172, 12300, 12321, 12322, 12345, 12753, 13160, 13216, 13217, 13218, 13223, 13224, 13400, 13720, 13721, 13722, 13724, 13782, 13783, 13785, 13786, 13818, 13819, 13820, 13821, 13822, 13894, 13929, 14000, 14001, 14002, 14033, 14034, 14141, 14142, 14145, 14149, 14154, 14250, 14414, 14936, 14937, 15000, 15118, 15345, 15363, 15555, 15660, 15740, 15998, 16003, 16161, 16309, 16310, 16311, 16360, 16361, 16367, 16368, 16384, 16666, 16900, 16950, 16991, 16992, 16993, 16994, 16995, 17007, 17185, 17219, 17220, 17221, 17222, 17224, 17225, 17234, 17235, 17500, 17729, 17754, 17755, 17756, 18000, 18181, 18182, 18183, 18184, 18185, 18186, 18187, 18241, 18262, 18463, 18516, 18634, 18635, 18668, 18769, 18881, 18888, 19000, 19007, 19191, 19194, 19220, 19283, 19315, 19398, 19410, 19411, 19412, 19539, 19540, 19541, 19788, 19999, 20000, 20001, 20002, 20003, 20005, 20012, 20014, 20034, 20046, 20048, 20049, 20167, 20202, 20222, 20480, 20670, 20999, 21000, 21554, 21590, 21800, 21845, 21846, 21847, 21848, 21849, 22000, 22001, 22002, 22003, 22004, 22005, 22273, 22305, 22333, 22335, 22343, 22347, 22350, 22555, 22763, 22800, 22951, 23000, 23001, 23002, 23003, 23004, 23005, 23272, 23294, 23333, 23400, 23401, 23402, 24000, 24001, 24002, 24003, 24004, 24005, 24006, 24242, 24249, 24321, 24322, 24386, 24465, 24554, 24577, 24676, 24677, 24678, 24680, 24850, 24922, 25000, 25001, 25002, 25003, 25004, 25005, 25006, 25007, 25008, 25009, 25793, 25900, 25901, 25902, 25903, 25954, 25955, 26000, 26133, 26208, 26260, 26261, 26262, 26263, 26486, 26487, 26489, 27345, 27442, 27504, 27782, 27999, 28000, 28119, 28200, 28240, 29167, 30001, 30002, 30003, 30004, 30260, 30832, 30999, 31016, 31029, 31416, 31457, 31620, 31765, 31948, 31949, 32034, 32249, 32483, 32635, 32636, 32767, 32768, 32769, 32770, 32771, 32772, 32773, 32774, 32775, 32776, 32777, 32801, 32896, 33123, 33331, 33334, 33434, 33435, 33656, 34249, 34378, 34379, 34567, 34962, 34963, 34964, 34980, 35001, 35004, 35100, 35355, 36001, 36411, 36865, 37475, 37654, 38002, 38201, 38202, 38203, 39681, 40000, 40023, 40841, 40842, 40843, 40853, 41111, 41230, 41794, 41795, 42508, 42509, 42510, 43000, 43188, 43189, 43190, 43210, 43438, 43439, 43440, 43441, 44321, 44322, 44544, 44553, 44600, 44818, 44900, 45000, 45054, 45514, 45678, 45825, 45966, 46999, 47000, 47100, 47557, 47624, 47806, 47808, 47809, 48000, 48001, 48002, 48003, 48128, 48129, 48556, 48619, 48653, 49001, unbound-1.13.1/util/random.h0000644000175000017500000000575314010434640015317 0ustar wouterwouter/* * util/random.h - thread safe random generator, which is reasonably secure. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UTIL_RANDOM_H #define UTIL_RANDOM_H /** * \file * Thread safe random functions. Similar to arc4random() with an explicit * initialisation routine. */ /** * random state structure. */ struct ub_randstate; /** * Initialize a random generator state for use * @param from: if not NULL, the seed is taken from this random structure. * can be used to seed random states via a parent-random-state that * is itself seeded with entropy. * @return new state or NULL alloc failure. */ struct ub_randstate* ub_initstate(struct ub_randstate* from); /** * Generate next random number from the state passed along. * Thread safe, so random numbers are repeatable. * @param state: must have been initialised with ub_initstate. * @return: random 31 bit value. */ long int ub_random(struct ub_randstate* state); /** * Generate random number between 0 and x-1. No modulo bias. * @param state: must have been initialised with ub_initstate. * @param x: an upper limit. not (negative or zero). must be smaller than 2**31. * @return: random value between 0..x-1. Possibly more than one * random number is picked from the random stream to satisfy this. */ long int ub_random_max(struct ub_randstate* state, long int x); /** * Delete the random state. * @param state: to delete. */ void ub_randfree(struct ub_randstate* state); #endif /* UTIL_RANDOM_H */ unbound-1.13.1/util/netevent.c0000644000175000017500000035147514010434640015667 0ustar wouterwouter/* * util/netevent.c - event notification * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains event notification functions. */ #include "config.h" #include "util/netevent.h" #include "util/ub_event.h" #include "util/log.h" #include "util/net_help.h" #include "util/tcp_conn_limit.h" #include "util/fptr_wlist.h" #include "sldns/pkthdr.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #include "dnstap/dnstap.h" #include "dnscrypt/dnscrypt.h" #include "services/listen_dnsport.h" #ifdef HAVE_OPENSSL_SSL_H #include #endif #ifdef HAVE_OPENSSL_ERR_H #include #endif /* -------- Start of local definitions -------- */ /** if CMSG_ALIGN is not defined on this platform, a workaround */ #ifndef CMSG_ALIGN # ifdef __CMSG_ALIGN # define CMSG_ALIGN(n) __CMSG_ALIGN(n) # elif defined(CMSG_DATA_ALIGN) # define CMSG_ALIGN _CMSG_DATA_ALIGN # else # define CMSG_ALIGN(len) (((len)+sizeof(long)-1) & ~(sizeof(long)-1)) # endif #endif /** if CMSG_LEN is not defined on this platform, a workaround */ #ifndef CMSG_LEN # define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr))+(len)) #endif /** if CMSG_SPACE is not defined on this platform, a workaround */ #ifndef CMSG_SPACE # ifdef _CMSG_HDR_ALIGN # define CMSG_SPACE(l) (CMSG_ALIGN(l)+_CMSG_HDR_ALIGN(sizeof(struct cmsghdr))) # else # define CMSG_SPACE(l) (CMSG_ALIGN(l)+CMSG_ALIGN(sizeof(struct cmsghdr))) # endif #endif /** The TCP writing query timeout in milliseconds */ #define TCP_QUERY_TIMEOUT 120000 /** The minimum actual TCP timeout to use, regardless of what we advertise, * in msec */ #define TCP_QUERY_TIMEOUT_MINIMUM 200 #ifndef NONBLOCKING_IS_BROKEN /** number of UDP reads to perform per read indication from select */ #define NUM_UDP_PER_SELECT 100 #else #define NUM_UDP_PER_SELECT 1 #endif /** * The internal event structure for keeping ub_event info for the event. * Possibly other structures (list, tree) this is part of. */ struct internal_event { /** the comm base */ struct comm_base* base; /** ub_event event type */ struct ub_event* ev; }; /** * Internal base structure, so that every thread has its own events. */ struct internal_base { /** ub_event event_base type. */ struct ub_event_base* base; /** seconds time pointer points here */ time_t secs; /** timeval with current time */ struct timeval now; /** the event used for slow_accept timeouts */ struct ub_event* slow_accept; /** true if slow_accept is enabled */ int slow_accept_enabled; }; /** * Internal timer structure, to store timer event in. */ struct internal_timer { /** the super struct from which derived */ struct comm_timer super; /** the comm base */ struct comm_base* base; /** ub_event event type */ struct ub_event* ev; /** is timer enabled */ uint8_t enabled; }; /** * Internal signal structure, to store signal event in. */ struct internal_signal { /** ub_event event type */ struct ub_event* ev; /** next in signal list */ struct internal_signal* next; }; /** create a tcp handler with a parent */ static struct comm_point* comm_point_create_tcp_handler( struct comm_base *base, struct comm_point* parent, size_t bufsize, struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, void* callback_arg); /* -------- End of local definitions -------- */ struct comm_base* comm_base_create(int sigs) { struct comm_base* b = (struct comm_base*)calloc(1, sizeof(struct comm_base)); const char *evnm="event", *evsys="", *evmethod=""; if(!b) return NULL; b->eb = (struct internal_base*)calloc(1, sizeof(struct internal_base)); if(!b->eb) { free(b); return NULL; } b->eb->base = ub_default_event_base(sigs, &b->eb->secs, &b->eb->now); if(!b->eb->base) { free(b->eb); free(b); return NULL; } ub_comm_base_now(b); ub_get_event_sys(b->eb->base, &evnm, &evsys, &evmethod); verbose(VERB_ALGO, "%s %s uses %s method.", evnm, evsys, evmethod); return b; } struct comm_base* comm_base_create_event(struct ub_event_base* base) { struct comm_base* b = (struct comm_base*)calloc(1, sizeof(struct comm_base)); if(!b) return NULL; b->eb = (struct internal_base*)calloc(1, sizeof(struct internal_base)); if(!b->eb) { free(b); return NULL; } b->eb->base = base; ub_comm_base_now(b); return b; } void comm_base_delete(struct comm_base* b) { if(!b) return; if(b->eb->slow_accept_enabled) { if(ub_event_del(b->eb->slow_accept) != 0) { log_err("could not event_del slow_accept"); } ub_event_free(b->eb->slow_accept); } ub_event_base_free(b->eb->base); b->eb->base = NULL; free(b->eb); free(b); } void comm_base_delete_no_base(struct comm_base* b) { if(!b) return; if(b->eb->slow_accept_enabled) { if(ub_event_del(b->eb->slow_accept) != 0) { log_err("could not event_del slow_accept"); } ub_event_free(b->eb->slow_accept); } b->eb->base = NULL; free(b->eb); free(b); } void comm_base_timept(struct comm_base* b, time_t** tt, struct timeval** tv) { *tt = &b->eb->secs; *tv = &b->eb->now; } void comm_base_dispatch(struct comm_base* b) { int retval; retval = ub_event_base_dispatch(b->eb->base); if(retval < 0) { fatal_exit("event_dispatch returned error %d, " "errno is %s", retval, strerror(errno)); } } void comm_base_exit(struct comm_base* b) { if(ub_event_base_loopexit(b->eb->base) != 0) { log_err("Could not loopexit"); } } void comm_base_set_slow_accept_handlers(struct comm_base* b, void (*stop_acc)(void*), void (*start_acc)(void*), void* arg) { b->stop_accept = stop_acc; b->start_accept = start_acc; b->cb_arg = arg; } struct ub_event_base* comm_base_internal(struct comm_base* b) { return b->eb->base; } /** see if errno for udp has to be logged or not uses globals */ static int udp_send_errno_needs_log(struct sockaddr* addr, socklen_t addrlen) { /* do not log transient errors (unless high verbosity) */ #if defined(ENETUNREACH) || defined(EHOSTDOWN) || defined(EHOSTUNREACH) || defined(ENETDOWN) switch(errno) { # ifdef ENETUNREACH case ENETUNREACH: # endif # ifdef EHOSTDOWN case EHOSTDOWN: # endif # ifdef EHOSTUNREACH case EHOSTUNREACH: # endif # ifdef ENETDOWN case ENETDOWN: # endif if(verbosity < VERB_ALGO) return 0; default: break; } #endif /* permission denied is gotten for every send if the * network is disconnected (on some OS), squelch it */ if( ((errno == EPERM) # ifdef EADDRNOTAVAIL /* 'Cannot assign requested address' also when disconnected */ || (errno == EADDRNOTAVAIL) # endif ) && verbosity < VERB_DETAIL) return 0; # ifdef EADDRINUSE /* If SO_REUSEADDR is set, we could try to connect to the same server * from the same source port twice. */ if(errno == EADDRINUSE && verbosity < VERB_DETAIL) return 0; # endif /* squelch errors where people deploy AAAA ::ffff:bla for * authority servers, which we try for intranets. */ if(errno == EINVAL && addr_is_ip4mapped( (struct sockaddr_storage*)addr, addrlen) && verbosity < VERB_DETAIL) return 0; /* SO_BROADCAST sockopt can give access to 255.255.255.255, * but a dns cache does not need it. */ if(errno == EACCES && addr_is_broadcast( (struct sockaddr_storage*)addr, addrlen) && verbosity < VERB_DETAIL) return 0; return 1; } int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen) { return udp_send_errno_needs_log(addr, addrlen); } /* send a UDP reply */ int comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, struct sockaddr* addr, socklen_t addrlen, int is_connected) { ssize_t sent; log_assert(c->fd != -1); #ifdef UNBOUND_DEBUG if(sldns_buffer_remaining(packet) == 0) log_err("error: send empty UDP packet"); #endif log_assert(addr && addrlen > 0); if(!is_connected) { sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), sldns_buffer_remaining(packet), 0, addr, addrlen); } else { sent = send(c->fd, (void*)sldns_buffer_begin(packet), sldns_buffer_remaining(packet), 0); } if(sent == -1) { /* try again and block, waiting for IO to complete, * we want to send the answer, and we will wait for * the ethernet interface buffer to have space. */ #ifndef USE_WINSOCK if(errno == EAGAIN || # ifdef EWOULDBLOCK errno == EWOULDBLOCK || # endif errno == ENOBUFS) { #else if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK) { #endif int e; fd_set_block(c->fd); if (!is_connected) { sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), sldns_buffer_remaining(packet), 0, addr, addrlen); } else { sent = send(c->fd, (void*)sldns_buffer_begin(packet), sldns_buffer_remaining(packet), 0); } e = errno; fd_set_nonblock(c->fd); errno = e; } } if(sent == -1) { if(!udp_send_errno_needs_log(addr, addrlen)) return 0; if (!is_connected) { verbose(VERB_OPS, "sendto failed: %s", sock_strerror(errno)); } else { verbose(VERB_OPS, "send failed: %s", sock_strerror(errno)); } if(addr) log_addr(VERB_OPS, "remote address is", (struct sockaddr_storage*)addr, addrlen); return 0; } else if((size_t)sent != sldns_buffer_remaining(packet)) { log_err("sent %d in place of %d bytes", (int)sent, (int)sldns_buffer_remaining(packet)); return 0; } return 1; } #if defined(AF_INET6) && defined(IPV6_PKTINFO) && (defined(HAVE_RECVMSG) || defined(HAVE_SENDMSG)) /** print debug ancillary info */ static void p_ancil(const char* str, struct comm_reply* r) { if(r->srctype != 4 && r->srctype != 6) { log_info("%s: unknown srctype %d", str, r->srctype); return; } if(r->srctype == 6) { char buf[1024]; if(inet_ntop(AF_INET6, &r->pktinfo.v6info.ipi6_addr, buf, (socklen_t)sizeof(buf)) == 0) { (void)strlcpy(buf, "(inet_ntop error)", sizeof(buf)); } buf[sizeof(buf)-1]=0; log_info("%s: %s %d", str, buf, r->pktinfo.v6info.ipi6_ifindex); } else if(r->srctype == 4) { #ifdef IP_PKTINFO char buf1[1024], buf2[1024]; if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_addr, buf1, (socklen_t)sizeof(buf1)) == 0) { (void)strlcpy(buf1, "(inet_ntop error)", sizeof(buf1)); } buf1[sizeof(buf1)-1]=0; #ifdef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST if(inet_ntop(AF_INET, &r->pktinfo.v4info.ipi_spec_dst, buf2, (socklen_t)sizeof(buf2)) == 0) { (void)strlcpy(buf2, "(inet_ntop error)", sizeof(buf2)); } buf2[sizeof(buf2)-1]=0; #else buf2[0]=0; #endif log_info("%s: %d %s %s", str, r->pktinfo.v4info.ipi_ifindex, buf1, buf2); #elif defined(IP_RECVDSTADDR) char buf1[1024]; if(inet_ntop(AF_INET, &r->pktinfo.v4addr, buf1, (socklen_t)sizeof(buf1)) == 0) { (void)strlcpy(buf1, "(inet_ntop error)", sizeof(buf1)); } buf1[sizeof(buf1)-1]=0; log_info("%s: %s", str, buf1); #endif /* IP_PKTINFO or PI_RECVDSTDADDR */ } } #endif /* AF_INET6 && IPV6_PKTINFO && HAVE_RECVMSG||HAVE_SENDMSG */ /** send a UDP reply over specified interface*/ static int comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, struct sockaddr* addr, socklen_t addrlen, struct comm_reply* r) { #if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_SENDMSG) ssize_t sent; struct msghdr msg; struct iovec iov[1]; union { struct cmsghdr hdr; char buf[256]; } control; #ifndef S_SPLINT_S struct cmsghdr *cmsg; #endif /* S_SPLINT_S */ log_assert(c->fd != -1); #ifdef UNBOUND_DEBUG if(sldns_buffer_remaining(packet) == 0) log_err("error: send empty UDP packet"); #endif log_assert(addr && addrlen > 0); msg.msg_name = addr; msg.msg_namelen = addrlen; iov[0].iov_base = sldns_buffer_begin(packet); iov[0].iov_len = sldns_buffer_remaining(packet); msg.msg_iov = iov; msg.msg_iovlen = 1; msg.msg_control = control.buf; #ifndef S_SPLINT_S msg.msg_controllen = sizeof(control.buf); #endif /* S_SPLINT_S */ msg.msg_flags = 0; #ifndef S_SPLINT_S cmsg = CMSG_FIRSTHDR(&msg); if(r->srctype == 4) { #ifdef IP_PKTINFO void* cmsg_data; msg.msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo)); log_assert(msg.msg_controllen <= sizeof(control.buf)); cmsg->cmsg_level = IPPROTO_IP; cmsg->cmsg_type = IP_PKTINFO; memmove(CMSG_DATA(cmsg), &r->pktinfo.v4info, sizeof(struct in_pktinfo)); /* unset the ifindex to not bypass the routing tables */ cmsg_data = CMSG_DATA(cmsg); ((struct in_pktinfo *) cmsg_data)->ipi_ifindex = 0; cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo)); #elif defined(IP_SENDSRCADDR) msg.msg_controllen = CMSG_SPACE(sizeof(struct in_addr)); log_assert(msg.msg_controllen <= sizeof(control.buf)); cmsg->cmsg_level = IPPROTO_IP; cmsg->cmsg_type = IP_SENDSRCADDR; memmove(CMSG_DATA(cmsg), &r->pktinfo.v4addr, sizeof(struct in_addr)); cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr)); #else verbose(VERB_ALGO, "no IP_PKTINFO or IP_SENDSRCADDR"); msg.msg_control = NULL; #endif /* IP_PKTINFO or IP_SENDSRCADDR */ } else if(r->srctype == 6) { void* cmsg_data; msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo)); log_assert(msg.msg_controllen <= sizeof(control.buf)); cmsg->cmsg_level = IPPROTO_IPV6; cmsg->cmsg_type = IPV6_PKTINFO; memmove(CMSG_DATA(cmsg), &r->pktinfo.v6info, sizeof(struct in6_pktinfo)); /* unset the ifindex to not bypass the routing tables */ cmsg_data = CMSG_DATA(cmsg); ((struct in6_pktinfo *) cmsg_data)->ipi6_ifindex = 0; cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo)); } else { /* try to pass all 0 to use default route */ msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo)); log_assert(msg.msg_controllen <= sizeof(control.buf)); cmsg->cmsg_level = IPPROTO_IPV6; cmsg->cmsg_type = IPV6_PKTINFO; memset(CMSG_DATA(cmsg), 0, sizeof(struct in6_pktinfo)); cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo)); } #endif /* S_SPLINT_S */ if(verbosity >= VERB_ALGO) p_ancil("send_udp over interface", r); sent = sendmsg(c->fd, &msg, 0); if(sent == -1) { /* try again and block, waiting for IO to complete, * we want to send the answer, and we will wait for * the ethernet interface buffer to have space. */ #ifndef USE_WINSOCK if(errno == EAGAIN || # ifdef EWOULDBLOCK errno == EWOULDBLOCK || # endif errno == ENOBUFS) { #else if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK) { #endif int e; fd_set_block(c->fd); sent = sendmsg(c->fd, &msg, 0); e = errno; fd_set_nonblock(c->fd); errno = e; } } if(sent == -1) { if(!udp_send_errno_needs_log(addr, addrlen)) return 0; verbose(VERB_OPS, "sendmsg failed: %s", strerror(errno)); log_addr(VERB_OPS, "remote address is", (struct sockaddr_storage*)addr, addrlen); #ifdef __NetBSD__ /* netbsd 7 has IP_PKTINFO for recv but not send */ if(errno == EINVAL && r->srctype == 4) log_err("sendmsg: No support for sendmsg(IP_PKTINFO). " "Please disable interface-automatic"); #endif return 0; } else if((size_t)sent != sldns_buffer_remaining(packet)) { log_err("sent %d in place of %d bytes", (int)sent, (int)sldns_buffer_remaining(packet)); return 0; } return 1; #else (void)c; (void)packet; (void)addr; (void)addrlen; (void)r; log_err("sendmsg: IPV6_PKTINFO not supported"); return 0; #endif /* AF_INET6 && IPV6_PKTINFO && HAVE_SENDMSG */ } /** return true is UDP receive error needs to be logged */ static int udp_recv_needs_log(int err) { switch(err) { case EACCES: /* some hosts send ICMP 'Permission Denied' */ #ifndef USE_WINSOCK case ECONNREFUSED: # ifdef ENETUNREACH case ENETUNREACH: # endif # ifdef EHOSTDOWN case EHOSTDOWN: # endif # ifdef EHOSTUNREACH case EHOSTUNREACH: # endif # ifdef ENETDOWN case ENETDOWN: # endif #else /* USE_WINSOCK */ case WSAECONNREFUSED: case WSAENETUNREACH: case WSAEHOSTDOWN: case WSAEHOSTUNREACH: case WSAENETDOWN: #endif if(verbosity >= VERB_ALGO) return 1; return 0; default: break; } return 1; } void comm_point_udp_ancil_callback(int fd, short event, void* arg) { #if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG) struct comm_reply rep; struct msghdr msg; struct iovec iov[1]; ssize_t rcv; union { struct cmsghdr hdr; char buf[256]; } ancil; int i; #ifndef S_SPLINT_S struct cmsghdr* cmsg; #endif /* S_SPLINT_S */ rep.c = (struct comm_point*)arg; log_assert(rep.c->type == comm_udp); if(!(event&UB_EV_READ)) return; log_assert(rep.c && rep.c->buffer && rep.c->fd == fd); ub_comm_base_now(rep.c->ev->base); for(i=0; ibuffer); rep.addrlen = (socklen_t)sizeof(rep.addr); log_assert(fd != -1); log_assert(sldns_buffer_remaining(rep.c->buffer) > 0); msg.msg_name = &rep.addr; msg.msg_namelen = (socklen_t)sizeof(rep.addr); iov[0].iov_base = sldns_buffer_begin(rep.c->buffer); iov[0].iov_len = sldns_buffer_remaining(rep.c->buffer); msg.msg_iov = iov; msg.msg_iovlen = 1; msg.msg_control = ancil.buf; #ifndef S_SPLINT_S msg.msg_controllen = sizeof(ancil.buf); #endif /* S_SPLINT_S */ msg.msg_flags = 0; rcv = recvmsg(fd, &msg, 0); if(rcv == -1) { if(errno != EAGAIN && errno != EINTR && udp_recv_needs_log(errno)) { log_err("recvmsg failed: %s", strerror(errno)); } return; } rep.addrlen = msg.msg_namelen; sldns_buffer_skip(rep.c->buffer, rcv); sldns_buffer_flip(rep.c->buffer); rep.srctype = 0; #ifndef S_SPLINT_S for(cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg, cmsg)) { if( cmsg->cmsg_level == IPPROTO_IPV6 && cmsg->cmsg_type == IPV6_PKTINFO) { rep.srctype = 6; memmove(&rep.pktinfo.v6info, CMSG_DATA(cmsg), sizeof(struct in6_pktinfo)); break; #ifdef IP_PKTINFO } else if( cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_PKTINFO) { rep.srctype = 4; memmove(&rep.pktinfo.v4info, CMSG_DATA(cmsg), sizeof(struct in_pktinfo)); break; #elif defined(IP_RECVDSTADDR) } else if( cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_RECVDSTADDR) { rep.srctype = 4; memmove(&rep.pktinfo.v4addr, CMSG_DATA(cmsg), sizeof(struct in_addr)); break; #endif /* IP_PKTINFO or IP_RECVDSTADDR */ } } if(verbosity >= VERB_ALGO) p_ancil("receive_udp on interface", &rep); #endif /* S_SPLINT_S */ fptr_ok(fptr_whitelist_comm_point(rep.c->callback)); if((*rep.c->callback)(rep.c, rep.c->cb_arg, NETEVENT_NOERROR, &rep)) { /* send back immediate reply */ (void)comm_point_send_udp_msg_if(rep.c, rep.c->buffer, (struct sockaddr*)&rep.addr, rep.addrlen, &rep); } if(!rep.c || rep.c->fd == -1) /* commpoint closed */ break; } #else (void)fd; (void)event; (void)arg; fatal_exit("recvmsg: No support for IPV6_PKTINFO; IP_PKTINFO or IP_RECVDSTADDR. " "Please disable interface-automatic"); #endif /* AF_INET6 && IPV6_PKTINFO && HAVE_RECVMSG */ } void comm_point_udp_callback(int fd, short event, void* arg) { struct comm_reply rep; ssize_t rcv; int i; struct sldns_buffer *buffer; rep.c = (struct comm_point*)arg; log_assert(rep.c->type == comm_udp); if(!(event&UB_EV_READ)) return; log_assert(rep.c && rep.c->buffer && rep.c->fd == fd); ub_comm_base_now(rep.c->ev->base); for(i=0; ibuffer); rep.addrlen = (socklen_t)sizeof(rep.addr); log_assert(fd != -1); log_assert(sldns_buffer_remaining(rep.c->buffer) > 0); rcv = recvfrom(fd, (void*)sldns_buffer_begin(rep.c->buffer), sldns_buffer_remaining(rep.c->buffer), 0, (struct sockaddr*)&rep.addr, &rep.addrlen); if(rcv == -1) { #ifndef USE_WINSOCK if(errno != EAGAIN && errno != EINTR && udp_recv_needs_log(errno)) log_err("recvfrom %d failed: %s", fd, strerror(errno)); #else if(WSAGetLastError() != WSAEINPROGRESS && WSAGetLastError() != WSAECONNRESET && WSAGetLastError()!= WSAEWOULDBLOCK && udp_recv_needs_log(WSAGetLastError())) log_err("recvfrom failed: %s", wsa_strerror(WSAGetLastError())); #endif return; } sldns_buffer_skip(rep.c->buffer, rcv); sldns_buffer_flip(rep.c->buffer); rep.srctype = 0; fptr_ok(fptr_whitelist_comm_point(rep.c->callback)); if((*rep.c->callback)(rep.c, rep.c->cb_arg, NETEVENT_NOERROR, &rep)) { /* send back immediate reply */ #ifdef USE_DNSCRYPT buffer = rep.c->dnscrypt_buffer; #else buffer = rep.c->buffer; #endif (void)comm_point_send_udp_msg(rep.c, buffer, (struct sockaddr*)&rep.addr, rep.addrlen, 0); } if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for another UDP port. Note rep.c cannot be reused with TCP fd. */ break; } } int adjusted_tcp_timeout(struct comm_point* c) { if(c->tcp_timeout_msec < TCP_QUERY_TIMEOUT_MINIMUM) return TCP_QUERY_TIMEOUT_MINIMUM; return c->tcp_timeout_msec; } /** Use a new tcp handler for new query fd, set to read query */ static void setup_tcp_handler(struct comm_point* c, int fd, int cur, int max) { int handler_usage; log_assert(c->type == comm_tcp || c->type == comm_http); log_assert(c->fd == -1); sldns_buffer_clear(c->buffer); #ifdef USE_DNSCRYPT if (c->dnscrypt) sldns_buffer_clear(c->dnscrypt_buffer); #endif c->tcp_is_reading = 1; c->tcp_byte_count = 0; /* if more than half the tcp handlers are in use, use a shorter * timeout for this TCP connection, we need to make space for * other connections to be able to get attention */ /* If > 50% TCP handler structures in use, set timeout to 1/100th * configured value. * If > 65%TCP handler structures in use, set to 1/500th configured * value. * If > 80% TCP handler structures in use, set to 0. * * If the timeout to use falls below 200 milliseconds, an actual * timeout of 200ms is used. */ handler_usage = (cur * 100) / max; if(handler_usage > 50 && handler_usage <= 65) c->tcp_timeout_msec /= 100; else if (handler_usage > 65 && handler_usage <= 80) c->tcp_timeout_msec /= 500; else if (handler_usage > 80) c->tcp_timeout_msec = 0; comm_point_start_listening(c, fd, adjusted_tcp_timeout(c)); } void comm_base_handle_slow_accept(int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void* arg) { struct comm_base* b = (struct comm_base*)arg; /* timeout for the slow accept, re-enable accepts again */ if(b->start_accept) { verbose(VERB_ALGO, "wait is over, slow accept disabled"); fptr_ok(fptr_whitelist_start_accept(b->start_accept)); (*b->start_accept)(b->cb_arg); b->eb->slow_accept_enabled = 0; } } int comm_point_perform_accept(struct comm_point* c, struct sockaddr_storage* addr, socklen_t* addrlen) { int new_fd; *addrlen = (socklen_t)sizeof(*addr); #ifndef HAVE_ACCEPT4 new_fd = accept(c->fd, (struct sockaddr*)addr, addrlen); #else /* SOCK_NONBLOCK saves extra calls to fcntl for the same result */ new_fd = accept4(c->fd, (struct sockaddr*)addr, addrlen, SOCK_NONBLOCK); #endif if(new_fd == -1) { #ifndef USE_WINSOCK /* EINTR is signal interrupt. others are closed connection. */ if( errno == EINTR || errno == EAGAIN #ifdef EWOULDBLOCK || errno == EWOULDBLOCK #endif #ifdef ECONNABORTED || errno == ECONNABORTED #endif #ifdef EPROTO || errno == EPROTO #endif /* EPROTO */ ) return -1; #if defined(ENFILE) && defined(EMFILE) if(errno == ENFILE || errno == EMFILE) { /* out of file descriptors, likely outside of our * control. stop accept() calls for some time */ if(c->ev->base->stop_accept) { struct comm_base* b = c->ev->base; struct timeval tv; verbose(VERB_ALGO, "out of file descriptors: " "slow accept"); b->eb->slow_accept_enabled = 1; fptr_ok(fptr_whitelist_stop_accept( b->stop_accept)); (*b->stop_accept)(b->cb_arg); /* set timeout, no mallocs */ tv.tv_sec = NETEVENT_SLOW_ACCEPT_TIME/1000; tv.tv_usec = (NETEVENT_SLOW_ACCEPT_TIME%1000)*1000; b->eb->slow_accept = ub_event_new(b->eb->base, -1, UB_EV_TIMEOUT, comm_base_handle_slow_accept, b); if(b->eb->slow_accept == NULL) { /* we do not want to log here, because * that would spam the logfiles. * error: "event_base_set failed." */ } else if(ub_event_add(b->eb->slow_accept, &tv) != 0) { /* we do not want to log here, * error: "event_add failed." */ } } return -1; } #endif #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAECONNRESET) return -1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); return -1; } #endif log_err_addr("accept failed", sock_strerror(errno), addr, *addrlen); return -1; } if(c->tcp_conn_limit && c->type == comm_tcp_accept) { c->tcl_addr = tcl_addr_lookup(c->tcp_conn_limit, addr, *addrlen); if(!tcl_new_connection(c->tcl_addr)) { if(verbosity >= 3) log_err_addr("accept rejected", "connection limit exceeded", addr, *addrlen); close(new_fd); return -1; } } #ifndef HAVE_ACCEPT4 fd_set_nonblock(new_fd); #endif return new_fd; } #ifdef USE_WINSOCK static long win_bio_cb(BIO *b, int oper, const char* ATTR_UNUSED(argp), int ATTR_UNUSED(argi), long argl, long retvalue) { int wsa_err = WSAGetLastError(); /* store errcode before it is gone */ verbose(VERB_ALGO, "bio_cb %d, %s %s %s", oper, (oper&BIO_CB_RETURN)?"return":"before", (oper&BIO_CB_READ)?"read":((oper&BIO_CB_WRITE)?"write":"other"), wsa_err==WSAEWOULDBLOCK?"wsawb":""); /* on windows, check if previous operation caused EWOULDBLOCK */ if( (oper == (BIO_CB_READ|BIO_CB_RETURN) && argl == 0) || (oper == (BIO_CB_GETS|BIO_CB_RETURN) && argl == 0)) { if(wsa_err == WSAEWOULDBLOCK) ub_winsock_tcp_wouldblock((struct ub_event*) BIO_get_callback_arg(b), UB_EV_READ); } if( (oper == (BIO_CB_WRITE|BIO_CB_RETURN) && argl == 0) || (oper == (BIO_CB_PUTS|BIO_CB_RETURN) && argl == 0)) { if(wsa_err == WSAEWOULDBLOCK) ub_winsock_tcp_wouldblock((struct ub_event*) BIO_get_callback_arg(b), UB_EV_WRITE); } /* return original return value */ return retvalue; } /** set win bio callbacks for nonblocking operations */ void comm_point_tcp_win_bio_cb(struct comm_point* c, void* thessl) { SSL* ssl = (SSL*)thessl; /* set them both just in case, but usually they are the same BIO */ BIO_set_callback(SSL_get_rbio(ssl), &win_bio_cb); BIO_set_callback_arg(SSL_get_rbio(ssl), (char*)c->ev->ev); BIO_set_callback(SSL_get_wbio(ssl), &win_bio_cb); BIO_set_callback_arg(SSL_get_wbio(ssl), (char*)c->ev->ev); } #endif #ifdef HAVE_NGHTTP2 /** Create http2 session server. Per connection, after TCP accepted.*/ static int http2_session_server_create(struct http2_session* h2_session) { log_assert(h2_session->callbacks); h2_session->is_drop = 0; if(nghttp2_session_server_new(&h2_session->session, h2_session->callbacks, h2_session) == NGHTTP2_ERR_NOMEM) { log_err("failed to create nghttp2 session server"); return 0; } return 1; } /** Submit http2 setting to session. Once per session. */ static int http2_submit_settings(struct http2_session* h2_session) { int ret; nghttp2_settings_entry settings[1] = { {NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, h2_session->c->http2_max_streams}}; ret = nghttp2_submit_settings(h2_session->session, NGHTTP2_FLAG_NONE, settings, 1); if(ret) { verbose(VERB_QUERY, "http2: submit_settings failed, " "error: %s", nghttp2_strerror(ret)); return 0; } return 1; } #endif /* HAVE_NGHTTP2 */ void comm_point_tcp_accept_callback(int fd, short event, void* arg) { struct comm_point* c = (struct comm_point*)arg, *c_hdl; int new_fd; log_assert(c->type == comm_tcp_accept); if(!(event & UB_EV_READ)) { log_info("ignoring tcp accept event %d", (int)event); return; } ub_comm_base_now(c->ev->base); /* find free tcp handler. */ if(!c->tcp_free) { log_warn("accepted too many tcp, connections full"); return; } /* accept incoming connection. */ c_hdl = c->tcp_free; /* clear leftover flags from previous use, and then set the * correct event base for the event structure for libevent */ ub_event_free(c_hdl->ev->ev); if((c_hdl->type == comm_tcp && c_hdl->tcp_req_info) || c_hdl->type == comm_local || c_hdl->type == comm_raw) c_hdl->tcp_do_toggle_rw = 0; else c_hdl->tcp_do_toggle_rw = 1; if(c_hdl->type == comm_http) { #ifdef HAVE_NGHTTP2 if(!c_hdl->h2_session || !http2_session_server_create(c_hdl->h2_session)) { log_warn("failed to create nghttp2"); return; } if(!c_hdl->h2_session || !http2_submit_settings(c_hdl->h2_session)) { log_warn("failed to submit http2 settings"); return; } if(!c->ssl) { c_hdl->tcp_do_toggle_rw = 0; c_hdl->use_h2 = 1; } #endif c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1, UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT, comm_point_http_handle_callback, c_hdl); } else { c_hdl->ev->ev = ub_event_new(c_hdl->ev->base->eb->base, -1, UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT, comm_point_tcp_handle_callback, c_hdl); } if(!c_hdl->ev->ev) { log_warn("could not ub_event_new, dropped tcp"); return; } log_assert(fd != -1); (void)fd; new_fd = comm_point_perform_accept(c, &c_hdl->repinfo.addr, &c_hdl->repinfo.addrlen); if(new_fd == -1) return; if(c->ssl) { c_hdl->ssl = incoming_ssl_fd(c->ssl, new_fd); if(!c_hdl->ssl) { c_hdl->fd = new_fd; comm_point_close(c_hdl); return; } c_hdl->ssl_shake_state = comm_ssl_shake_read; #ifdef USE_WINSOCK comm_point_tcp_win_bio_cb(c_hdl, c_hdl->ssl); #endif } /* grab the tcp handler buffers */ c->cur_tcp_count++; c->tcp_free = c_hdl->tcp_free; if(!c->tcp_free) { /* stop accepting incoming queries for now. */ comm_point_stop_listening(c); } setup_tcp_handler(c_hdl, new_fd, c->cur_tcp_count, c->max_tcp_count); } /** Make tcp handler free for next assignment */ static void reclaim_tcp_handler(struct comm_point* c) { log_assert(c->type == comm_tcp); if(c->ssl) { #ifdef HAVE_SSL SSL_shutdown(c->ssl); SSL_free(c->ssl); c->ssl = NULL; #endif } comm_point_close(c); if(c->tcp_parent) { c->tcp_parent->cur_tcp_count--; c->tcp_free = c->tcp_parent->tcp_free; c->tcp_parent->tcp_free = c; if(!c->tcp_free) { /* re-enable listening on accept socket */ comm_point_start_listening(c->tcp_parent, -1, -1); } } c->tcp_more_read_again = NULL; c->tcp_more_write_again = NULL; } /** do the callback when writing is done */ static void tcp_callback_writer(struct comm_point* c) { log_assert(c->type == comm_tcp); if(!c->tcp_write_and_read) { sldns_buffer_clear(c->buffer); c->tcp_byte_count = 0; } if(c->tcp_do_toggle_rw) c->tcp_is_reading = 1; /* switch from listening(write) to listening(read) */ if(c->tcp_req_info) { tcp_req_info_handle_writedone(c->tcp_req_info); } else { comm_point_stop_listening(c); if(c->tcp_write_and_read) { fptr_ok(fptr_whitelist_comm_point(c->callback)); if( (*c->callback)(c, c->cb_arg, NETEVENT_PKT_WRITTEN, &c->repinfo) ) { comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); } } else { comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); } } } /** do the callback when reading is done */ static void tcp_callback_reader(struct comm_point* c) { log_assert(c->type == comm_tcp || c->type == comm_local); sldns_buffer_flip(c->buffer); if(c->tcp_do_toggle_rw) c->tcp_is_reading = 0; c->tcp_byte_count = 0; if(c->tcp_req_info) { tcp_req_info_handle_readdone(c->tcp_req_info); } else { if(c->type == comm_tcp) comm_point_stop_listening(c); fptr_ok(fptr_whitelist_comm_point(c->callback)); if( (*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &c->repinfo) ) { comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); } } } #ifdef HAVE_SSL /** true if the ssl handshake error has to be squelched from the logs */ int squelch_err_ssl_handshake(unsigned long err) { if(verbosity >= VERB_QUERY) return 0; /* only squelch on low verbosity */ /* this is very specific, we could filter on ERR_GET_REASON() * (the third element in ERR_PACK) */ if(err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GET_RECORD, SSL_R_HTTPS_PROXY_REQUEST) || err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GET_RECORD, SSL_R_HTTP_REQUEST) || err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER) || err == ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_READ_BYTES, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE) #ifdef SSL_F_TLS_POST_PROCESS_CLIENT_HELLO || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_POST_PROCESS_CLIENT_HELLO, SSL_R_NO_SHARED_CIPHER) #endif #ifdef SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, SSL_R_UNKNOWN_PROTOCOL) || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, SSL_R_UNSUPPORTED_PROTOCOL) # ifdef SSL_R_VERSION_TOO_LOW || err == ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, SSL_R_VERSION_TOO_LOW) # endif #endif ) return 1; return 0; } #endif /* HAVE_SSL */ /** continue ssl handshake */ #ifdef HAVE_SSL static int ssl_handshake(struct comm_point* c) { int r; if(c->ssl_shake_state == comm_ssl_shake_hs_read) { /* read condition satisfied back to writing */ comm_point_listen_for_rw(c, 1, 1); c->ssl_shake_state = comm_ssl_shake_none; return 1; } if(c->ssl_shake_state == comm_ssl_shake_hs_write) { /* write condition satisfied, back to reading */ comm_point_listen_for_rw(c, 1, 0); c->ssl_shake_state = comm_ssl_shake_none; return 1; } ERR_clear_error(); r = SSL_do_handshake(c->ssl); if(r != 1) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_WANT_READ) { if(c->ssl_shake_state == comm_ssl_shake_read) return 1; c->ssl_shake_state = comm_ssl_shake_read; comm_point_listen_for_rw(c, 1, 0); return 1; } else if(want == SSL_ERROR_WANT_WRITE) { if(c->ssl_shake_state == comm_ssl_shake_write) return 1; c->ssl_shake_state = comm_ssl_shake_write; comm_point_listen_for_rw(c, 0, 1); return 1; } else if(r == 0) { return 0; /* closed */ } else if(want == SSL_ERROR_SYSCALL) { /* SYSCALL and errno==0 means closed uncleanly */ #ifdef EPIPE if(errno == EPIPE && verbosity < 2) return 0; /* silence 'broken pipe' */ #endif #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif if(errno != 0) log_err("SSL_handshake syscall: %s", strerror(errno)); return 0; } else { unsigned long err = ERR_get_error(); if(!squelch_err_ssl_handshake(err)) { log_crypto_err_code("ssl handshake failed", err); log_addr(VERB_OPS, "ssl handshake failed", &c->repinfo.addr, c->repinfo.addrlen); } return 0; } } /* this is where peer verification could take place */ if((SSL_get_verify_mode(c->ssl)&SSL_VERIFY_PEER)) { /* verification */ if(SSL_get_verify_result(c->ssl) == X509_V_OK) { X509* x = SSL_get_peer_certificate(c->ssl); if(!x) { log_addr(VERB_ALGO, "SSL connection failed: " "no certificate", &c->repinfo.addr, c->repinfo.addrlen); return 0; } log_cert(VERB_ALGO, "peer certificate", x); #ifdef HAVE_SSL_GET0_PEERNAME if(SSL_get0_peername(c->ssl)) { char buf[255]; snprintf(buf, sizeof(buf), "SSL connection " "to %s authenticated", SSL_get0_peername(c->ssl)); log_addr(VERB_ALGO, buf, &c->repinfo.addr, c->repinfo.addrlen); } else { #endif log_addr(VERB_ALGO, "SSL connection " "authenticated", &c->repinfo.addr, c->repinfo.addrlen); #ifdef HAVE_SSL_GET0_PEERNAME } #endif X509_free(x); } else { X509* x = SSL_get_peer_certificate(c->ssl); if(x) { log_cert(VERB_ALGO, "peer certificate", x); X509_free(x); } log_addr(VERB_ALGO, "SSL connection failed: " "failed to authenticate", &c->repinfo.addr, c->repinfo.addrlen); return 0; } } else { /* unauthenticated, the verify peer flag was not set * in c->ssl when the ssl object was created from ssl_ctx */ log_addr(VERB_ALGO, "SSL connection", &c->repinfo.addr, c->repinfo.addrlen); } /* check if http2 use is negotiated */ if(c->type == comm_http && c->h2_session) { const unsigned char *alpn; unsigned int alpnlen = 0; SSL_get0_alpn_selected(c->ssl, &alpn, &alpnlen); if(alpnlen == 2 && memcmp("h2", alpn, 2) == 0) { /* connection upgraded to HTTP2 */ c->tcp_do_toggle_rw = 0; c->use_h2 = 1; } } /* setup listen rw correctly */ if(c->tcp_is_reading) { if(c->ssl_shake_state != comm_ssl_shake_read) comm_point_listen_for_rw(c, 1, 0); } else { comm_point_listen_for_rw(c, 1, 1); } c->ssl_shake_state = comm_ssl_shake_none; return 1; } #endif /* HAVE_SSL */ /** ssl read callback on TCP */ static int ssl_handle_read(struct comm_point* c) { #ifdef HAVE_SSL int r; if(c->ssl_shake_state != comm_ssl_shake_none) { if(!ssl_handshake(c)) return 0; if(c->ssl_shake_state != comm_ssl_shake_none) return 1; } if(c->tcp_byte_count < sizeof(uint16_t)) { /* read length bytes */ ERR_clear_error(); if((r=SSL_read(c->ssl, (void*)sldns_buffer_at(c->buffer, c->tcp_byte_count), (int)(sizeof(uint16_t) - c->tcp_byte_count))) <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { if(c->tcp_req_info) return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; /* shutdown, closed */ } else if(want == SSL_ERROR_WANT_READ) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); return 1; /* read more later */ } else if(want == SSL_ERROR_WANT_WRITE) { c->ssl_shake_state = comm_ssl_shake_hs_write; comm_point_listen_for_rw(c, 0, 1); return 1; } else if(want == SSL_ERROR_SYSCALL) { #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif if(errno != 0) log_err("SSL_read syscall: %s", strerror(errno)); return 0; } log_crypto_err("could not SSL_read"); return 0; } c->tcp_byte_count += r; if(c->tcp_byte_count < sizeof(uint16_t)) return 1; if(sldns_buffer_read_u16_at(c->buffer, 0) > sldns_buffer_capacity(c->buffer)) { verbose(VERB_QUERY, "ssl: dropped larger than buffer"); return 0; } sldns_buffer_set_limit(c->buffer, sldns_buffer_read_u16_at(c->buffer, 0)); if(sldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) { verbose(VERB_QUERY, "ssl: dropped bogus too short."); return 0; } sldns_buffer_skip(c->buffer, (ssize_t)(c->tcp_byte_count-sizeof(uint16_t))); verbose(VERB_ALGO, "Reading ssl tcp query of length %d", (int)sldns_buffer_limit(c->buffer)); } if(sldns_buffer_remaining(c->buffer) > 0) { ERR_clear_error(); r = SSL_read(c->ssl, (void*)sldns_buffer_current(c->buffer), (int)sldns_buffer_remaining(c->buffer)); if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { if(c->tcp_req_info) return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; /* shutdown, closed */ } else if(want == SSL_ERROR_WANT_READ) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); return 1; /* read more later */ } else if(want == SSL_ERROR_WANT_WRITE) { c->ssl_shake_state = comm_ssl_shake_hs_write; comm_point_listen_for_rw(c, 0, 1); return 1; } else if(want == SSL_ERROR_SYSCALL) { #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif if(errno != 0) log_err("SSL_read syscall: %s", strerror(errno)); return 0; } log_crypto_err("could not SSL_read"); return 0; } sldns_buffer_skip(c->buffer, (ssize_t)r); } if(sldns_buffer_remaining(c->buffer) <= 0) { tcp_callback_reader(c); } return 1; #else (void)c; return 0; #endif /* HAVE_SSL */ } /** ssl write callback on TCP */ static int ssl_handle_write(struct comm_point* c) { #ifdef HAVE_SSL int r; if(c->ssl_shake_state != comm_ssl_shake_none) { if(!ssl_handshake(c)) return 0; if(c->ssl_shake_state != comm_ssl_shake_none) return 1; } /* ignore return, if fails we may simply block */ (void)SSL_set_mode(c->ssl, (long)SSL_MODE_ENABLE_PARTIAL_WRITE); if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) { uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(c->buffer)); ERR_clear_error(); if(c->tcp_write_and_read) { if(c->tcp_write_pkt_len + 2 < LDNS_RR_BUF_SIZE) { /* combine the tcp length and the query for * write, this emulates writev */ uint8_t buf[LDNS_RR_BUF_SIZE]; memmove(buf, &len, sizeof(uint16_t)); memmove(buf+sizeof(uint16_t), c->tcp_write_pkt, c->tcp_write_pkt_len); r = SSL_write(c->ssl, (void*)(buf+c->tcp_write_byte_count), c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count); } else { r = SSL_write(c->ssl, (void*)(((uint8_t*)&len)+c->tcp_write_byte_count), (int)(sizeof(uint16_t)-c->tcp_write_byte_count)); } } else if(sizeof(uint16_t)+sldns_buffer_remaining(c->buffer) < LDNS_RR_BUF_SIZE) { /* combine the tcp length and the query for write, * this emulates writev */ uint8_t buf[LDNS_RR_BUF_SIZE]; memmove(buf, &len, sizeof(uint16_t)); memmove(buf+sizeof(uint16_t), sldns_buffer_current(c->buffer), sldns_buffer_remaining(c->buffer)); r = SSL_write(c->ssl, (void*)(buf+c->tcp_byte_count), (int)(sizeof(uint16_t)+ sldns_buffer_remaining(c->buffer) - c->tcp_byte_count)); } else { r = SSL_write(c->ssl, (void*)(((uint8_t*)&len)+c->tcp_byte_count), (int)(sizeof(uint16_t)-c->tcp_byte_count)); } if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return 0; /* closed */ } else if(want == SSL_ERROR_WANT_READ) { c->ssl_shake_state = comm_ssl_shake_hs_read; comm_point_listen_for_rw(c, 1, 0); return 1; /* wait for read condition */ } else if(want == SSL_ERROR_WANT_WRITE) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; /* write more later */ } else if(want == SSL_ERROR_SYSCALL) { #ifdef EPIPE if(errno == EPIPE && verbosity < 2) return 0; /* silence 'broken pipe' */ #endif if(errno != 0) log_err("SSL_write syscall: %s", strerror(errno)); return 0; } log_crypto_err("could not SSL_write"); return 0; } if(c->tcp_write_and_read) { c->tcp_write_byte_count += r; if(c->tcp_write_byte_count < sizeof(uint16_t)) return 1; } else { c->tcp_byte_count += r; if(c->tcp_byte_count < sizeof(uint16_t)) return 1; sldns_buffer_set_position(c->buffer, c->tcp_byte_count - sizeof(uint16_t)); } if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } } log_assert(c->tcp_write_and_read || sldns_buffer_remaining(c->buffer) > 0); log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2); ERR_clear_error(); if(c->tcp_write_and_read) { r = SSL_write(c->ssl, (void*)(c->tcp_write_pkt + c->tcp_write_byte_count - 2), (int)(c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count)); } else { r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer), (int)sldns_buffer_remaining(c->buffer)); } if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return 0; /* closed */ } else if(want == SSL_ERROR_WANT_READ) { c->ssl_shake_state = comm_ssl_shake_hs_read; comm_point_listen_for_rw(c, 1, 0); return 1; /* wait for read condition */ } else if(want == SSL_ERROR_WANT_WRITE) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; /* write more later */ } else if(want == SSL_ERROR_SYSCALL) { #ifdef EPIPE if(errno == EPIPE && verbosity < 2) return 0; /* silence 'broken pipe' */ #endif if(errno != 0) log_err("SSL_write syscall: %s", strerror(errno)); return 0; } log_crypto_err("could not SSL_write"); return 0; } if(c->tcp_write_and_read) { c->tcp_write_byte_count += r; } else { sldns_buffer_skip(c->buffer, (ssize_t)r); } if((!c->tcp_write_and_read && sldns_buffer_remaining(c->buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); } return 1; #else (void)c; return 0; #endif /* HAVE_SSL */ } /** handle ssl tcp connection with dns contents */ static int ssl_handle_it(struct comm_point* c, int is_write) { /* handle case where renegotiation wants read during write call * or write during read calls */ if(is_write && c->ssl_shake_state == comm_ssl_shake_hs_write) return ssl_handle_read(c); else if(!is_write && c->ssl_shake_state == comm_ssl_shake_hs_read) return ssl_handle_write(c); /* handle read events for read operation and write events for a * write operation */ else if(!is_write) return ssl_handle_read(c); return ssl_handle_write(c); } /** Handle tcp reading callback. * @param fd: file descriptor of socket. * @param c: comm point to read from into buffer. * @param short_ok: if true, very short packets are OK (for comm_local). * @return: 0 on error */ static int comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) { ssize_t r; log_assert(c->type == comm_tcp || c->type == comm_local); if(c->ssl) return ssl_handle_it(c, 0); if(!c->tcp_is_reading && !c->tcp_write_and_read) return 0; log_assert(fd != -1); if(c->tcp_byte_count < sizeof(uint16_t)) { /* read length bytes */ r = recv(fd,(void*)sldns_buffer_at(c->buffer,c->tcp_byte_count), sizeof(uint16_t)-c->tcp_byte_count, 0); if(r == 0) { if(c->tcp_req_info) return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; } else if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif #ifdef ENETUNREACH if(errno == ENETUNREACH && verbosity < 2) return 0; /* silence it */ #endif #ifdef EHOSTDOWN if(errno == EHOSTDOWN && verbosity < 2) return 0; /* silence it */ #endif #ifdef EHOSTUNREACH if(errno == EHOSTUNREACH && verbosity < 2) return 0; /* silence it */ #endif #ifdef ENETDOWN if(errno == ENETDOWN && verbosity < 2) return 0; /* silence it */ #endif #ifdef EACCES if(errno == EACCES && verbosity < 2) return 0; /* silence it */ #endif #ifdef ENOTCONN if(errno == ENOTCONN) { log_err_addr("read (in tcp s) failed and this could be because TCP Fast Open is enabled [--disable-tfo-client --disable-tfo-server] but does not work", sock_strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } #endif #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAECONNRESET) return 0; if(WSAGetLastError() == WSAEINPROGRESS) return 1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); return 1; } #endif log_err_addr("read (in tcp s)", sock_strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } c->tcp_byte_count += r; if(c->tcp_byte_count != sizeof(uint16_t)) return 1; if(sldns_buffer_read_u16_at(c->buffer, 0) > sldns_buffer_capacity(c->buffer)) { verbose(VERB_QUERY, "tcp: dropped larger than buffer"); return 0; } sldns_buffer_set_limit(c->buffer, sldns_buffer_read_u16_at(c->buffer, 0)); if(!short_ok && sldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) { verbose(VERB_QUERY, "tcp: dropped bogus too short."); return 0; } verbose(VERB_ALGO, "Reading tcp query of length %d", (int)sldns_buffer_limit(c->buffer)); } log_assert(sldns_buffer_remaining(c->buffer) > 0); r = recv(fd, (void*)sldns_buffer_current(c->buffer), sldns_buffer_remaining(c->buffer), 0); if(r == 0) { if(c->tcp_req_info) return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; } else if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAECONNRESET) return 0; if(WSAGetLastError() == WSAEINPROGRESS) return 1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); return 1; } #endif log_err_addr("read (in tcp r)", sock_strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } sldns_buffer_skip(c->buffer, r); if(sldns_buffer_remaining(c->buffer) <= 0) { tcp_callback_reader(c); } return 1; } /** * Handle tcp writing callback. * @param fd: file descriptor of socket. * @param c: comm point to write buffer out of. * @return: 0 on error */ static int comm_point_tcp_handle_write(int fd, struct comm_point* c) { ssize_t r; struct sldns_buffer *buffer; log_assert(c->type == comm_tcp); #ifdef USE_DNSCRYPT buffer = c->dnscrypt_buffer; #else buffer = c->buffer; #endif if(c->tcp_is_reading && !c->ssl && !c->tcp_write_and_read) return 0; log_assert(fd != -1); if(((!c->tcp_write_and_read && c->tcp_byte_count == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == 0)) && c->tcp_check_nb_connect) { /* check for pending error from nonblocking connect */ /* from Stevens, unix network programming, vol1, 3rd ed, p450*/ int error = 0; socklen_t len = (socklen_t)sizeof(error); if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error, &len) < 0){ #ifndef USE_WINSOCK error = errno; /* on solaris errno is error */ #else /* USE_WINSOCK */ error = WSAGetLastError(); #endif } #ifndef USE_WINSOCK #if defined(EINPROGRESS) && defined(EWOULDBLOCK) if(error == EINPROGRESS || error == EWOULDBLOCK) return 1; /* try again later */ else #endif if(error != 0 && verbosity < 2) return 0; /* silence lots of chatter in the logs */ else if(error != 0) { log_err_addr("tcp connect", strerror(error), &c->repinfo.addr, c->repinfo.addrlen); #else /* USE_WINSOCK */ /* examine error */ if(error == WSAEINPROGRESS) return 1; else if(error == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; } else if(error != 0 && verbosity < 2) return 0; else if(error != 0) { log_err_addr("tcp connect", wsa_strerror(error), &c->repinfo.addr, c->repinfo.addrlen); #endif /* USE_WINSOCK */ return 0; } } if(c->ssl) return ssl_handle_it(c, 1); #ifdef USE_MSG_FASTOPEN /* Only try this on first use of a connection that uses tfo, otherwise fall through to normal write */ /* Also, TFO support on WINDOWS not implemented at the moment */ if(c->tcp_do_fastopen == 1) { /* this form of sendmsg() does both a connect() and send() so need to look for various flavours of error*/ uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer)); struct msghdr msg; struct iovec iov[2]; c->tcp_do_fastopen = 0; memset(&msg, 0, sizeof(msg)); if(c->tcp_write_and_read) { iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count; iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count; iov[1].iov_base = c->tcp_write_pkt; iov[1].iov_len = c->tcp_write_pkt_len; } else { iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; iov[1].iov_base = sldns_buffer_begin(buffer); iov[1].iov_len = sldns_buffer_limit(buffer); } log_assert(iov[0].iov_len > 0); msg.msg_name = &c->repinfo.addr; msg.msg_namelen = c->repinfo.addrlen; msg.msg_iov = iov; msg.msg_iovlen = 2; r = sendmsg(fd, &msg, MSG_FASTOPEN); if (r == -1) { #if defined(EINPROGRESS) && defined(EWOULDBLOCK) /* Handshake is underway, maybe because no TFO cookie available. Come back to write the message*/ if(errno == EINPROGRESS || errno == EWOULDBLOCK) return 1; #endif if(errno == EINTR || errno == EAGAIN) return 1; /* Not handling EISCONN here as shouldn't ever hit that case.*/ if(errno != EPIPE && errno != 0 && verbosity < 2) return 0; /* silence lots of chatter in the logs */ if(errno != EPIPE && errno != 0) { log_err_addr("tcp sendmsg", strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } /* fallthrough to nonFASTOPEN * (MSG_FASTOPEN on Linux 3 produces EPIPE) * we need to perform connect() */ if(connect(fd, (struct sockaddr *)&c->repinfo.addr, c->repinfo.addrlen) == -1) { #ifdef EINPROGRESS if(errno == EINPROGRESS) return 1; /* wait until connect done*/ #endif #ifdef USE_WINSOCK if(WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK) return 1; /* wait until connect done*/ #endif if(tcp_connect_errno_needs_log( (struct sockaddr *)&c->repinfo.addr, c->repinfo.addrlen)) { log_err_addr("outgoing tcp: connect after EPIPE for fastopen", strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); } return 0; } } else { if(c->tcp_write_and_read) { c->tcp_write_byte_count += r; if(c->tcp_write_byte_count < sizeof(uint16_t)) return 1; } else { c->tcp_byte_count += r; if(c->tcp_byte_count < sizeof(uint16_t)) return 1; sldns_buffer_set_position(buffer, c->tcp_byte_count - sizeof(uint16_t)); } if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } } } #endif /* USE_MSG_FASTOPEN */ if((c->tcp_write_and_read?c->tcp_write_byte_count:c->tcp_byte_count) < sizeof(uint16_t)) { uint16_t len = htons(c->tcp_write_and_read?c->tcp_write_pkt_len:sldns_buffer_limit(buffer)); #ifdef HAVE_WRITEV struct iovec iov[2]; if(c->tcp_write_and_read) { iov[0].iov_base = (uint8_t*)&len + c->tcp_write_byte_count; iov[0].iov_len = sizeof(uint16_t) - c->tcp_write_byte_count; iov[1].iov_base = c->tcp_write_pkt; iov[1].iov_len = c->tcp_write_pkt_len; } else { iov[0].iov_base = (uint8_t*)&len + c->tcp_byte_count; iov[0].iov_len = sizeof(uint16_t) - c->tcp_byte_count; iov[1].iov_base = sldns_buffer_begin(buffer); iov[1].iov_len = sldns_buffer_limit(buffer); } log_assert(iov[0].iov_len > 0); r = writev(fd, iov, 2); #else /* HAVE_WRITEV */ if(c->tcp_write_and_read) { r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_write_byte_count), sizeof(uint16_t)-c->tcp_write_byte_count, 0); } else { r = send(fd, (void*)(((uint8_t*)&len)+c->tcp_byte_count), sizeof(uint16_t)-c->tcp_byte_count, 0); } #endif /* HAVE_WRITEV */ if(r == -1) { #ifndef USE_WINSOCK # ifdef EPIPE if(errno == EPIPE && verbosity < 2) return 0; /* silence 'broken pipe' */ #endif if(errno == EINTR || errno == EAGAIN) return 1; #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif # ifdef HAVE_WRITEV log_err_addr("tcp writev", strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); # else /* HAVE_WRITEV */ log_err_addr("tcp send s", strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); # endif /* HAVE_WRITEV */ #else if(WSAGetLastError() == WSAENOTCONN) return 1; if(WSAGetLastError() == WSAEINPROGRESS) return 1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; } if(WSAGetLastError() == WSAECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ log_err_addr("tcp send s", wsa_strerror(WSAGetLastError()), &c->repinfo.addr, c->repinfo.addrlen); #endif return 0; } if(c->tcp_write_and_read) { c->tcp_write_byte_count += r; if(c->tcp_write_byte_count < sizeof(uint16_t)) return 1; } else { c->tcp_byte_count += r; if(c->tcp_byte_count < sizeof(uint16_t)) return 1; sldns_buffer_set_position(buffer, c->tcp_byte_count - sizeof(uint16_t)); } if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); return 1; } } log_assert(c->tcp_write_and_read || sldns_buffer_remaining(buffer) > 0); log_assert(!c->tcp_write_and_read || c->tcp_write_byte_count < c->tcp_write_pkt_len + 2); if(c->tcp_write_and_read) { r = send(fd, (void*)(c->tcp_write_pkt + c->tcp_write_byte_count - 2), c->tcp_write_pkt_len + 2 - c->tcp_write_byte_count, 0); } else { r = send(fd, (void*)sldns_buffer_current(buffer), sldns_buffer_remaining(buffer), 0); } if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif #else if(WSAGetLastError() == WSAEINPROGRESS) return 1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; } if(WSAGetLastError() == WSAECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif log_err_addr("tcp send r", sock_strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } if(c->tcp_write_and_read) { c->tcp_write_byte_count += r; } else { sldns_buffer_skip(buffer, r); } if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); } return 1; } /** read again to drain buffers when there could be more to read */ static void tcp_req_info_read_again(int fd, struct comm_point* c) { while(c->tcp_req_info->read_again) { int r; c->tcp_req_info->read_again = 0; if(c->tcp_is_reading) r = comm_point_tcp_handle_read(fd, c, 0); else r = comm_point_tcp_handle_write(fd, c); if(!r) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; } } } /** read again to drain buffers when there could be more to read */ static void tcp_more_read_again(int fd, struct comm_point* c) { /* if the packet is done, but another one could be waiting on * the connection, the callback signals this, and we try again */ /* this continues until the read routines get EAGAIN or so, * and thus does not call the callback, and the bool is 0 */ int* moreread = c->tcp_more_read_again; while(moreread && *moreread) { *moreread = 0; if(!comm_point_tcp_handle_read(fd, c, 0)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; } } } /** write again to fill up when there could be more to write */ static void tcp_more_write_again(int fd, struct comm_point* c) { /* if the packet is done, but another is waiting to be written, * the callback signals it and we try again. */ /* this continues until the write routines get EAGAIN or so, * and thus does not call the callback, and the bool is 0 */ int* morewrite = c->tcp_more_write_again; while(morewrite && *morewrite) { *morewrite = 0; if(!comm_point_tcp_handle_write(fd, c)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; } } } void comm_point_tcp_handle_callback(int fd, short event, void* arg) { struct comm_point* c = (struct comm_point*)arg; log_assert(c->type == comm_tcp); ub_comm_base_now(c->ev->base); #ifdef USE_DNSCRYPT /* Initialize if this is a dnscrypt socket */ if(c->tcp_parent) { c->dnscrypt = c->tcp_parent->dnscrypt; } if(c->dnscrypt && c->dnscrypt_buffer == c->buffer) { c->dnscrypt_buffer = sldns_buffer_new(sldns_buffer_capacity(c->buffer)); if(!c->dnscrypt_buffer) { log_err("Could not allocate dnscrypt buffer"); reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; } } #endif if(event&UB_EV_TIMEOUT) { verbose(VERB_QUERY, "tcp took too long, dropped"); reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_TIMEOUT, NULL); } return; } if(event&UB_EV_READ #ifdef USE_MSG_FASTOPEN && !(c->tcp_do_fastopen && (event&UB_EV_WRITE)) #endif ) { int has_tcpq = (c->tcp_req_info != NULL); int* moreread = c->tcp_more_read_again; if(!comm_point_tcp_handle_read(fd, c, 0)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; } if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); if(moreread && *moreread) tcp_more_read_again(fd, c); return; } if(event&UB_EV_WRITE) { int has_tcpq = (c->tcp_req_info != NULL); int* morewrite = c->tcp_more_write_again; if(!comm_point_tcp_handle_write(fd, c)) { reclaim_tcp_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; } if(has_tcpq && c->tcp_req_info && c->tcp_req_info->read_again) tcp_req_info_read_again(fd, c); if(morewrite && *morewrite) tcp_more_write_again(fd, c); return; } log_err("Ignored event %d for tcphdl.", event); } /** Make http handler free for next assignment */ static void reclaim_http_handler(struct comm_point* c) { log_assert(c->type == comm_http); if(c->ssl) { #ifdef HAVE_SSL SSL_shutdown(c->ssl); SSL_free(c->ssl); c->ssl = NULL; #endif } comm_point_close(c); if(c->tcp_parent) { c->tcp_parent->cur_tcp_count--; c->tcp_free = c->tcp_parent->tcp_free; c->tcp_parent->tcp_free = c; if(!c->tcp_free) { /* re-enable listening on accept socket */ comm_point_start_listening(c->tcp_parent, -1, -1); } } } /** read more data for http (with ssl) */ static int ssl_http_read_more(struct comm_point* c) { #ifdef HAVE_SSL int r; log_assert(sldns_buffer_remaining(c->buffer) > 0); ERR_clear_error(); r = SSL_read(c->ssl, (void*)sldns_buffer_current(c->buffer), (int)sldns_buffer_remaining(c->buffer)); if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return 0; /* shutdown, closed */ } else if(want == SSL_ERROR_WANT_READ) { return 1; /* read more later */ } else if(want == SSL_ERROR_WANT_WRITE) { c->ssl_shake_state = comm_ssl_shake_hs_write; comm_point_listen_for_rw(c, 0, 1); return 1; } else if(want == SSL_ERROR_SYSCALL) { #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ #endif if(errno != 0) log_err("SSL_read syscall: %s", strerror(errno)); return 0; } log_crypto_err("could not SSL_read"); return 0; } sldns_buffer_skip(c->buffer, (ssize_t)r); return 1; #else (void)c; return 0; #endif /* HAVE_SSL */ } /** read more data for http */ static int http_read_more(int fd, struct comm_point* c) { ssize_t r; log_assert(sldns_buffer_remaining(c->buffer) > 0); r = recv(fd, (void*)sldns_buffer_current(c->buffer), sldns_buffer_remaining(c->buffer), 0); if(r == 0) { return 0; } else if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAECONNRESET) return 0; if(WSAGetLastError() == WSAEINPROGRESS) return 1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); return 1; } #endif log_err_addr("read (in http r)", sock_strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } sldns_buffer_skip(c->buffer, r); return 1; } /** return true if http header has been read (one line complete) */ static int http_header_done(sldns_buffer* buf) { size_t i; for(i=sldns_buffer_position(buf); ibuffer); if(!line) return 1; verbose(VERB_ALGO, "http header: %s", line); if(strncasecmp(line, "HTTP/1.1 ", 9) == 0) { /* check returncode */ if(line[9] != '2') { verbose(VERB_ALGO, "http bad status %s", line+9); return 0; } } else if(strncasecmp(line, "Content-Length: ", 16) == 0) { if(!c->http_is_chunked) c->tcp_byte_count = (size_t)atoi(line+16); } else if(strncasecmp(line, "Transfer-Encoding: chunked", 19+7) == 0) { c->tcp_byte_count = 0; c->http_is_chunked = 1; } else if(line[0] == 0) { /* end of initial headers */ c->http_in_headers = 0; if(c->http_is_chunked) c->http_in_chunk_headers = 1; /* remove header text from front of buffer * the buffer is going to be used to return the data segment * itself and we don't want the header to get returned * prepended with it */ http_moveover_buffer(c->buffer); sldns_buffer_flip(c->buffer); return 1; } /* ignore other headers */ return 1; } /** a chunk header is complete, process it, return 0=fail, 1=continue next * header line, 2=done with chunked transfer*/ static int http_process_chunk_header(struct comm_point* c) { char* line = http_header_line(c->buffer); if(!line) return 1; if(c->http_in_chunk_headers == 3) { verbose(VERB_ALGO, "http chunk trailer: %s", line); /* are we done ? */ if(line[0] == 0 && c->tcp_byte_count == 0) { /* callback of http reader when NETEVENT_DONE, * end of data, with no data in buffer */ sldns_buffer_set_position(c->buffer, 0); sldns_buffer_set_limit(c->buffer, 0); fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_DONE, NULL); /* return that we are done */ return 2; } if(line[0] == 0) { /* continue with header of the next chunk */ c->http_in_chunk_headers = 1; /* remove header text from front of buffer */ http_moveover_buffer(c->buffer); sldns_buffer_flip(c->buffer); return 1; } /* ignore further trail headers */ return 1; } verbose(VERB_ALGO, "http chunk header: %s", line); if(c->http_in_chunk_headers == 1) { /* read chunked start line */ char* end = NULL; c->tcp_byte_count = (size_t)strtol(line, &end, 16); if(end == line) return 0; c->http_in_chunk_headers = 0; /* remove header text from front of buffer */ http_moveover_buffer(c->buffer); sldns_buffer_flip(c->buffer); if(c->tcp_byte_count == 0) { /* done with chunks, process chunk_trailer lines */ c->http_in_chunk_headers = 3; } return 1; } /* ignore other headers */ return 1; } /** handle nonchunked data segment */ static int http_nonchunk_segment(struct comm_point* c) { /* c->buffer at position..limit has new data we read in. * the buffer itself is full of nonchunked data. * we are looking to read tcp_byte_count more data * and then the transfer is done. */ size_t remainbufferlen; size_t got_now = sldns_buffer_limit(c->buffer) - c->http_stored; if(c->tcp_byte_count <= got_now) { /* done, this is the last data fragment */ c->http_stored = 0; sldns_buffer_set_position(c->buffer, 0); fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_DONE, NULL); return 1; } c->tcp_byte_count -= got_now; /* if we have the buffer space, * read more data collected into the buffer */ remainbufferlen = sldns_buffer_capacity(c->buffer) - sldns_buffer_limit(c->buffer); if(remainbufferlen >= c->tcp_byte_count || remainbufferlen >= 2048) { size_t total = sldns_buffer_limit(c->buffer); sldns_buffer_clear(c->buffer); sldns_buffer_set_position(c->buffer, total); c->http_stored = total; /* return and wait to read more */ return 1; } /* call callback with this data amount, then * wait for more */ c->http_stored = 0; sldns_buffer_set_position(c->buffer, 0); fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, NULL); /* c->callback has to buffer_clear(c->buffer). */ /* return and wait to read more */ return 1; } /** handle chunked data segment, return 0=fail, 1=wait, 2=process more */ static int http_chunked_segment(struct comm_point* c) { /* the c->buffer has from position..limit new data we read. */ /* the current chunk has length tcp_byte_count. * once we read that read more chunk headers. */ size_t remainbufferlen; size_t got_now = sldns_buffer_limit(c->buffer) - c->http_stored; verbose(VERB_ALGO, "http_chunked_segment: got now %d, tcpbytcount %d, http_stored %d, buffer pos %d, buffer limit %d", (int)got_now, (int)c->tcp_byte_count, (int)c->http_stored, (int)sldns_buffer_position(c->buffer), (int)sldns_buffer_limit(c->buffer)); if(c->tcp_byte_count <= got_now) { /* the chunk has completed (with perhaps some extra data * from next chunk header and next chunk) */ /* save too much info into temp buffer */ size_t fraglen; struct comm_reply repinfo; c->http_stored = 0; sldns_buffer_skip(c->buffer, (ssize_t)c->tcp_byte_count); sldns_buffer_clear(c->http_temp); sldns_buffer_write(c->http_temp, sldns_buffer_current(c->buffer), sldns_buffer_remaining(c->buffer)); sldns_buffer_flip(c->http_temp); /* callback with this fragment */ fraglen = sldns_buffer_position(c->buffer); sldns_buffer_set_position(c->buffer, 0); sldns_buffer_set_limit(c->buffer, fraglen); repinfo = c->repinfo; fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, &repinfo); /* c->callback has to buffer_clear(). */ /* is commpoint deleted? */ if(!repinfo.c) { return 1; } /* copy waiting info */ sldns_buffer_clear(c->buffer); sldns_buffer_write(c->buffer, sldns_buffer_begin(c->http_temp), sldns_buffer_remaining(c->http_temp)); sldns_buffer_flip(c->buffer); /* process end of chunk trailer header lines, until * an empty line */ c->http_in_chunk_headers = 3; /* process more data in buffer (if any) */ return 2; } c->tcp_byte_count -= got_now; /* if we have the buffer space, * read more data collected into the buffer */ remainbufferlen = sldns_buffer_capacity(c->buffer) - sldns_buffer_limit(c->buffer); if(remainbufferlen >= c->tcp_byte_count || remainbufferlen >= 2048) { size_t total = sldns_buffer_limit(c->buffer); sldns_buffer_clear(c->buffer); sldns_buffer_set_position(c->buffer, total); c->http_stored = total; /* return and wait to read more */ return 1; } /* callback of http reader for a new part of the data */ c->http_stored = 0; sldns_buffer_set_position(c->buffer, 0); fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_NOERROR, NULL); /* c->callback has to buffer_clear(c->buffer). */ /* return and wait to read more */ return 1; } #ifdef HAVE_NGHTTP2 /** Create new http2 session. Called when creating handling comm point. */ static struct http2_session* http2_session_create(struct comm_point* c) { struct http2_session* session = calloc(1, sizeof(*session)); if(!session) { log_err("malloc failure while creating http2 session"); return NULL; } session->c = c; return session; } #endif /** Delete http2 session. After closing connection or on error */ static void http2_session_delete(struct http2_session* h2_session) { #ifdef HAVE_NGHTTP2 if(h2_session->callbacks) nghttp2_session_callbacks_del(h2_session->callbacks); free(h2_session); #else (void)h2_session; #endif } #ifdef HAVE_NGHTTP2 struct http2_stream* http2_stream_create(int32_t stream_id) { struct http2_stream* h2_stream = calloc(1, sizeof(*h2_stream)); if(!h2_stream) { log_err("malloc failure while creating http2 stream"); return NULL; } h2_stream->stream_id = stream_id; return h2_stream; } /** Delete http2 stream. After session delete or stream close callback */ static void http2_stream_delete(struct http2_session* h2_session, struct http2_stream* h2_stream) { if(h2_stream->mesh_state) { mesh_state_remove_reply(h2_stream->mesh, h2_stream->mesh_state, h2_session->c); h2_stream->mesh_state = NULL; } http2_req_stream_clear(h2_stream); free(h2_stream); } #endif void http2_stream_add_meshstate(struct http2_stream* h2_stream, struct mesh_area* mesh, struct mesh_state* m) { h2_stream->mesh = mesh; h2_stream->mesh_state = m; } /** delete http2 session server. After closing connection. */ static void http2_session_server_delete(struct http2_session* h2_session) { #ifdef HAVE_NGHTTP2 struct http2_stream* h2_stream, *next; nghttp2_session_del(h2_session->session); /* NULL input is fine */ h2_session->session = NULL; for(h2_stream = h2_session->first_stream; h2_stream;) { next = h2_stream->next; http2_stream_delete(h2_session, h2_stream); h2_stream = next; } h2_session->first_stream = NULL; h2_session->is_drop = 0; h2_session->postpone_drop = 0; h2_session->c->h2_stream = NULL; #endif (void)h2_session; } #ifdef HAVE_NGHTTP2 void http2_session_add_stream(struct http2_session* h2_session, struct http2_stream* h2_stream) { if(h2_session->first_stream) h2_session->first_stream->prev = h2_stream; h2_stream->next = h2_session->first_stream; h2_session->first_stream = h2_stream; } /** remove stream from session linked list. After stream close callback or * closing connection */ static void http2_session_remove_stream(struct http2_session* h2_session, struct http2_stream* h2_stream) { if(h2_stream->prev) h2_stream->prev->next = h2_stream->next; else h2_session->first_stream = h2_stream->next; if(h2_stream->next) h2_stream->next->prev = h2_stream->prev; } int http2_stream_close_cb(nghttp2_session* ATTR_UNUSED(session), int32_t stream_id, uint32_t ATTR_UNUSED(error_code), void* cb_arg) { struct http2_stream* h2_stream; struct http2_session* h2_session = (struct http2_session*)cb_arg; if(!(h2_stream = nghttp2_session_get_stream_user_data( h2_session->session, stream_id))) { return 0; } http2_session_remove_stream(h2_session, h2_stream); http2_stream_delete(h2_session, h2_stream); return 0; } ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, size_t len, int ATTR_UNUSED(flags), void* cb_arg) { struct http2_session* h2_session = (struct http2_session*)cb_arg; ssize_t ret; log_assert(h2_session->c->type == comm_http); log_assert(h2_session->c->h2_session); #ifdef HAVE_SSL if(h2_session->c->ssl) { int r; ERR_clear_error(); r = SSL_read(h2_session->c->ssl, buf, len); if(r <= 0) { int want = SSL_get_error(h2_session->c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return NGHTTP2_ERR_EOF; } else if(want == SSL_ERROR_WANT_READ) { return NGHTTP2_ERR_WOULDBLOCK; } else if(want == SSL_ERROR_WANT_WRITE) { h2_session->c->ssl_shake_state = comm_ssl_shake_hs_write; comm_point_listen_for_rw(h2_session->c, 0, 1); return NGHTTP2_ERR_WOULDBLOCK; } else if(want == SSL_ERROR_SYSCALL) { #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return NGHTTP2_ERR_CALLBACK_FAILURE; #endif if(errno != 0) log_err("SSL_read syscall: %s", strerror(errno)); return NGHTTP2_ERR_CALLBACK_FAILURE; } log_crypto_err("could not SSL_read"); return NGHTTP2_ERR_CALLBACK_FAILURE; } return r; } #endif /* HAVE_SSL */ ret = recv(h2_session->c->fd, buf, len, 0); if(ret == 0) { return NGHTTP2_ERR_EOF; } else if(ret < 0) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return NGHTTP2_ERR_WOULDBLOCK; #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return NGHTTP2_ERR_CALLBACK_FAILURE; #endif log_err_addr("could not http2 recv: %s", strerror(errno), &h2_session->c->repinfo.addr, h2_session->c->repinfo.addrlen); #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAECONNRESET) return NGHTTP2_ERR_CALLBACK_FAILURE; if(WSAGetLastError() == WSAEINPROGRESS) return NGHTTP2_ERR_WOULDBLOCK; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(h2_session->c->ev->ev, UB_EV_READ); return NGHTTP2_ERR_WOULDBLOCK; } log_err_addr("could not http2 recv: %s", wsa_strerror(WSAGetLastError()), &h2_session->c->repinfo.addr, h2_session->c->repinfo.addrlen); #endif return NGHTTP2_ERR_CALLBACK_FAILURE; } return ret; } #endif /* HAVE_NGHTTP2 */ /** Handle http2 read */ static int comm_point_http2_handle_read(int ATTR_UNUSED(fd), struct comm_point* c) { #ifdef HAVE_NGHTTP2 int ret; log_assert(c->h2_session); /* reading until recv cb returns NGHTTP2_ERR_WOULDBLOCK */ ret = nghttp2_session_recv(c->h2_session->session); if(ret) { if(ret != NGHTTP2_ERR_EOF && ret != NGHTTP2_ERR_CALLBACK_FAILURE) { char a[256]; addr_to_str(&c->repinfo.addr, c->repinfo.addrlen, a, sizeof(a)); verbose(VERB_QUERY, "http2: session_recv from %s failed, " "error: %s", a, nghttp2_strerror(ret)); } return 0; } if(nghttp2_session_want_write(c->h2_session->session)) { c->tcp_is_reading = 0; comm_point_stop_listening(c); comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); } else if(!nghttp2_session_want_read(c->h2_session->session)) return 0; /* connection can be closed */ return 1; #else (void)c; return 0; #endif } /** * Handle http reading callback. * @param fd: file descriptor of socket. * @param c: comm point to read from into buffer. * @return: 0 on error */ static int comm_point_http_handle_read(int fd, struct comm_point* c) { log_assert(c->type == comm_http); log_assert(fd != -1); /* if we are in ssl handshake, handle SSL handshake */ #ifdef HAVE_SSL if(c->ssl && c->ssl_shake_state != comm_ssl_shake_none) { if(!ssl_handshake(c)) return 0; if(c->ssl_shake_state != comm_ssl_shake_none) return 1; } #endif /* HAVE_SSL */ if(!c->tcp_is_reading) return 1; if(c->use_h2) { return comm_point_http2_handle_read(fd, c); } /* http version is <= http/1.1 */ if(c->http_min_version >= http_version_2) { /* HTTP/2 failed, not allowed to use lower version. */ return 0; } /* read more data */ if(c->ssl) { if(!ssl_http_read_more(c)) return 0; } else { if(!http_read_more(fd, c)) return 0; } sldns_buffer_flip(c->buffer); /* if we are partway in a segment of data, position us at the point * where we left off previously */ if(c->http_stored < sldns_buffer_limit(c->buffer)) sldns_buffer_set_position(c->buffer, c->http_stored); else sldns_buffer_set_position(c->buffer, sldns_buffer_limit(c->buffer)); while(sldns_buffer_remaining(c->buffer) > 0) { /* Handle HTTP/1.x data */ /* if we are reading headers, read more headers */ if(c->http_in_headers || c->http_in_chunk_headers) { /* if header is done, process the header */ if(!http_header_done(c->buffer)) { /* copy remaining data to front of buffer * and set rest for writing into it */ http_moveover_buffer(c->buffer); /* return and wait to read more */ return 1; } if(!c->http_in_chunk_headers) { /* process initial headers */ if(!http_process_initial_header(c)) return 0; } else { /* process chunk headers */ int r = http_process_chunk_header(c); if(r == 0) return 0; if(r == 2) return 1; /* done */ /* r == 1, continue */ } /* see if we have more to process */ continue; } if(!c->http_is_chunked) { /* if we are reading nonchunks, process that*/ return http_nonchunk_segment(c); } else { /* if we are reading chunks, read the chunk */ int r = http_chunked_segment(c); if(r == 0) return 0; if(r == 1) return 1; continue; } } /* broke out of the loop; could not process header instead need * to read more */ /* moveover any remaining data and read more data */ http_moveover_buffer(c->buffer); /* return and wait to read more */ return 1; } /** check pending connect for http */ static int http_check_connect(int fd, struct comm_point* c) { /* check for pending error from nonblocking connect */ /* from Stevens, unix network programming, vol1, 3rd ed, p450*/ int error = 0; socklen_t len = (socklen_t)sizeof(error); if(getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&error, &len) < 0){ #ifndef USE_WINSOCK error = errno; /* on solaris errno is error */ #else /* USE_WINSOCK */ error = WSAGetLastError(); #endif } #ifndef USE_WINSOCK #if defined(EINPROGRESS) && defined(EWOULDBLOCK) if(error == EINPROGRESS || error == EWOULDBLOCK) return 1; /* try again later */ else #endif if(error != 0 && verbosity < 2) return 0; /* silence lots of chatter in the logs */ else if(error != 0) { log_err_addr("http connect", strerror(error), &c->repinfo.addr, c->repinfo.addrlen); #else /* USE_WINSOCK */ /* examine error */ if(error == WSAEINPROGRESS) return 1; else if(error == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; } else if(error != 0 && verbosity < 2) return 0; else if(error != 0) { log_err_addr("http connect", wsa_strerror(error), &c->repinfo.addr, c->repinfo.addrlen); #endif /* USE_WINSOCK */ return 0; } /* keep on processing this socket */ return 2; } /** write more data for http (with ssl) */ static int ssl_http_write_more(struct comm_point* c) { #ifdef HAVE_SSL int r; log_assert(sldns_buffer_remaining(c->buffer) > 0); ERR_clear_error(); r = SSL_write(c->ssl, (void*)sldns_buffer_current(c->buffer), (int)sldns_buffer_remaining(c->buffer)); if(r <= 0) { int want = SSL_get_error(c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return 0; /* closed */ } else if(want == SSL_ERROR_WANT_READ) { c->ssl_shake_state = comm_ssl_shake_hs_read; comm_point_listen_for_rw(c, 1, 0); return 1; /* wait for read condition */ } else if(want == SSL_ERROR_WANT_WRITE) { return 1; /* write more later */ } else if(want == SSL_ERROR_SYSCALL) { #ifdef EPIPE if(errno == EPIPE && verbosity < 2) return 0; /* silence 'broken pipe' */ #endif if(errno != 0) log_err("SSL_write syscall: %s", strerror(errno)); return 0; } log_crypto_err("could not SSL_write"); return 0; } sldns_buffer_skip(c->buffer, (ssize_t)r); return 1; #else (void)c; return 0; #endif /* HAVE_SSL */ } /** write more data for http */ static int http_write_more(int fd, struct comm_point* c) { ssize_t r; log_assert(sldns_buffer_remaining(c->buffer) > 0); r = send(fd, (void*)sldns_buffer_current(c->buffer), sldns_buffer_remaining(c->buffer), 0); if(r == -1) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return 1; #else if(WSAGetLastError() == WSAEINPROGRESS) return 1; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); return 1; } #endif log_err_addr("http send r", sock_strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } sldns_buffer_skip(c->buffer, r); return 1; } #ifdef HAVE_NGHTTP2 ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf, size_t len, int ATTR_UNUSED(flags), void* cb_arg) { ssize_t ret; struct http2_session* h2_session = (struct http2_session*)cb_arg; log_assert(h2_session->c->type == comm_http); log_assert(h2_session->c->h2_session); #ifdef HAVE_SSL if(h2_session->c->ssl) { int r; ERR_clear_error(); r = SSL_write(h2_session->c->ssl, buf, len); if(r <= 0) { int want = SSL_get_error(h2_session->c->ssl, r); if(want == SSL_ERROR_ZERO_RETURN) { return NGHTTP2_ERR_CALLBACK_FAILURE; } else if(want == SSL_ERROR_WANT_READ) { h2_session->c->ssl_shake_state = comm_ssl_shake_hs_read; comm_point_listen_for_rw(h2_session->c, 1, 0); return NGHTTP2_ERR_WOULDBLOCK; } else if(want == SSL_ERROR_WANT_WRITE) { return NGHTTP2_ERR_WOULDBLOCK; } else if(want == SSL_ERROR_SYSCALL) { #ifdef EPIPE if(errno == EPIPE && verbosity < 2) return NGHTTP2_ERR_CALLBACK_FAILURE; #endif if(errno != 0) log_err("SSL_write syscall: %s", strerror(errno)); return NGHTTP2_ERR_CALLBACK_FAILURE; } log_crypto_err("could not SSL_write"); return NGHTTP2_ERR_CALLBACK_FAILURE; } return r; } #endif /* HAVE_SSL */ ret = send(h2_session->c->fd, buf, len, 0); if(ret == 0) { return NGHTTP2_ERR_CALLBACK_FAILURE; } else if(ret < 0) { #ifndef USE_WINSOCK if(errno == EINTR || errno == EAGAIN) return NGHTTP2_ERR_WOULDBLOCK; #ifdef EPIPE if(errno == EPIPE && verbosity < 2) return NGHTTP2_ERR_CALLBACK_FAILURE; #endif #ifdef ECONNRESET if(errno == ECONNRESET && verbosity < 2) return NGHTTP2_ERR_CALLBACK_FAILURE; #endif log_err_addr("could not http2 write: %s", strerror(errno), &h2_session->c->repinfo.addr, h2_session->c->repinfo.addrlen); #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAENOTCONN) return NGHTTP2_ERR_WOULDBLOCK; if(WSAGetLastError() == WSAEINPROGRESS) return NGHTTP2_ERR_WOULDBLOCK; if(WSAGetLastError() == WSAEWOULDBLOCK) { ub_winsock_tcp_wouldblock(h2_session->c->ev->ev, UB_EV_WRITE); return NGHTTP2_ERR_WOULDBLOCK; } if(WSAGetLastError() == WSAECONNRESET && verbosity < 2) return NGHTTP2_ERR_CALLBACK_FAILURE; log_err_addr("could not http2 write: %s", wsa_strerror(WSAGetLastError()), &h2_session->c->repinfo.addr, h2_session->c->repinfo.addrlen); #endif return NGHTTP2_ERR_CALLBACK_FAILURE; } return ret; } #endif /* HAVE_NGHTTP2 */ /** Handle http2 writing */ static int comm_point_http2_handle_write(int ATTR_UNUSED(fd), struct comm_point* c) { #ifdef HAVE_NGHTTP2 int ret; log_assert(c->h2_session); ret = nghttp2_session_send(c->h2_session->session); if(ret) { verbose(VERB_QUERY, "http2: session_send failed, " "error: %s", nghttp2_strerror(ret)); return 0; } if(nghttp2_session_want_read(c->h2_session->session)) { c->tcp_is_reading = 1; comm_point_stop_listening(c); comm_point_start_listening(c, -1, adjusted_tcp_timeout(c)); } else if(!nghttp2_session_want_write(c->h2_session->session)) return 0; /* connection can be closed */ return 1; #else (void)c; return 0; #endif } /** * Handle http writing callback. * @param fd: file descriptor of socket. * @param c: comm point to write buffer out of. * @return: 0 on error */ static int comm_point_http_handle_write(int fd, struct comm_point* c) { log_assert(c->type == comm_http); log_assert(fd != -1); /* check pending connect errors, if that fails, we wait for more, * or we can continue to write contents */ if(c->tcp_check_nb_connect) { int r = http_check_connect(fd, c); if(r == 0) return 0; if(r == 1) return 1; c->tcp_check_nb_connect = 0; } /* if we are in ssl handshake, handle SSL handshake */ #ifdef HAVE_SSL if(c->ssl && c->ssl_shake_state != comm_ssl_shake_none) { if(!ssl_handshake(c)) return 0; if(c->ssl_shake_state != comm_ssl_shake_none) return 1; } #endif /* HAVE_SSL */ if(c->tcp_is_reading) return 1; if(c->use_h2) { return comm_point_http2_handle_write(fd, c); } /* http version is <= http/1.1 */ if(c->http_min_version >= http_version_2) { /* HTTP/2 failed, not allowed to use lower version. */ return 0; } /* if we are writing, write more */ if(c->ssl) { if(!ssl_http_write_more(c)) return 0; } else { if(!http_write_more(fd, c)) return 0; } /* we write a single buffer contents, that can contain * the http request, and then flip to read the results */ /* see if write is done */ if(sldns_buffer_remaining(c->buffer) == 0) { sldns_buffer_clear(c->buffer); if(c->tcp_do_toggle_rw) c->tcp_is_reading = 1; c->tcp_byte_count = 0; /* switch from listening(write) to listening(read) */ comm_point_stop_listening(c); comm_point_start_listening(c, -1, -1); } return 1; } void comm_point_http_handle_callback(int fd, short event, void* arg) { struct comm_point* c = (struct comm_point*)arg; log_assert(c->type == comm_http); ub_comm_base_now(c->ev->base); if(event&UB_EV_TIMEOUT) { verbose(VERB_QUERY, "http took too long, dropped"); reclaim_http_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_TIMEOUT, NULL); } return; } if(event&UB_EV_READ) { if(!comm_point_http_handle_read(fd, c)) { reclaim_http_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } } return; } if(event&UB_EV_WRITE) { if(!comm_point_http_handle_write(fd, c)) { reclaim_http_handler(c); if(!c->tcp_do_close) { fptr_ok(fptr_whitelist_comm_point( c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } } return; } log_err("Ignored event %d for httphdl.", event); } void comm_point_local_handle_callback(int fd, short event, void* arg) { struct comm_point* c = (struct comm_point*)arg; log_assert(c->type == comm_local); ub_comm_base_now(c->ev->base); if(event&UB_EV_READ) { if(!comm_point_tcp_handle_read(fd, c, 1)) { fptr_ok(fptr_whitelist_comm_point(c->callback)); (void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED, NULL); } return; } log_err("Ignored event %d for localhdl.", event); } void comm_point_raw_handle_callback(int ATTR_UNUSED(fd), short event, void* arg) { struct comm_point* c = (struct comm_point*)arg; int err = NETEVENT_NOERROR; log_assert(c->type == comm_raw); ub_comm_base_now(c->ev->base); if(event&UB_EV_TIMEOUT) err = NETEVENT_TIMEOUT; fptr_ok(fptr_whitelist_comm_point_raw(c->callback)); (void)(*c->callback)(c, c->cb_arg, err, NULL); } struct comm_point* comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = fd; c->buffer = buffer; c->timeout = NULL; c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_parent = NULL; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_udp; c->tcp_do_close = 0; c->do_not_close = 0; c->tcp_do_toggle_rw = 0; c->tcp_check_nb_connect = 0; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 0; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = buffer; #endif c->inuse = 0; c->callback = callback; c->cb_arg = callback_arg; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_udp_callback, c); if(c->ev->ev == NULL) { log_err("could not baseset udp event"); comm_point_delete(c); return NULL; } if(fd!=-1 && ub_event_add(c->ev->ev, c->timeout) != 0 ) { log_err("could not add udp event"); comm_point_delete(c); return NULL; } c->event_added = 1; return c; } struct comm_point* comm_point_create_udp_ancil(struct comm_base *base, int fd, sldns_buffer* buffer, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = fd; c->buffer = buffer; c->timeout = NULL; c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_parent = NULL; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_udp; c->tcp_do_close = 0; c->do_not_close = 0; #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = buffer; #endif c->inuse = 0; c->tcp_do_toggle_rw = 0; c->tcp_check_nb_connect = 0; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 0; #endif c->callback = callback; c->cb_arg = callback_arg; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_udp_ancil_callback, c); if(c->ev->ev == NULL) { log_err("could not baseset udp event"); comm_point_delete(c); return NULL; } if(fd!=-1 && ub_event_add(c->ev->ev, c->timeout) != 0 ) { log_err("could not add udp event"); comm_point_delete(c); return NULL; } c->event_added = 1; return c; } static struct comm_point* comm_point_create_tcp_handler(struct comm_base *base, struct comm_point* parent, size_t bufsize, struct sldns_buffer* spoolbuf, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = -1; c->buffer = sldns_buffer_new(bufsize); if(!c->buffer) { free(c->ev); free(c); return NULL; } c->timeout = (struct timeval*)malloc(sizeof(struct timeval)); if(!c->timeout) { sldns_buffer_free(c->buffer); free(c->ev); free(c); return NULL; } c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_parent = parent; c->tcp_timeout_msec = parent->tcp_timeout_msec; c->tcp_conn_limit = parent->tcp_conn_limit; c->tcl_addr = NULL; c->tcp_keepalive = 0; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_tcp; c->tcp_do_close = 0; c->do_not_close = 0; c->tcp_do_toggle_rw = 1; c->tcp_check_nb_connect = 0; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 0; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; /* We don't know just yet if this is a dnscrypt channel. Allocation * will be done when handling the callback. */ c->dnscrypt_buffer = c->buffer; #endif c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; if(spoolbuf) { c->tcp_req_info = tcp_req_info_create(spoolbuf); if(!c->tcp_req_info) { log_err("could not create tcp commpoint"); sldns_buffer_free(c->buffer); free(c->timeout); free(c->ev); free(c); return NULL; } c->tcp_req_info->cp = c; c->tcp_do_close = 1; c->tcp_do_toggle_rw = 0; } /* add to parent free list */ c->tcp_free = parent->tcp_free; parent->tcp_free = c; /* ub_event stuff */ evbits = UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_tcp_handle_callback, c); if(c->ev->ev == NULL) { log_err("could not basetset tcphdl event"); parent->tcp_free = c->tcp_free; tcp_req_info_delete(c->tcp_req_info); sldns_buffer_free(c->buffer); free(c->timeout); free(c->ev); free(c); return NULL; } return c; } static struct comm_point* comm_point_create_http_handler(struct comm_base *base, struct comm_point* parent, size_t bufsize, int harden_large_queries, uint32_t http_max_streams, char* http_endpoint, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = -1; c->buffer = sldns_buffer_new(bufsize); if(!c->buffer) { free(c->ev); free(c); return NULL; } c->timeout = (struct timeval*)malloc(sizeof(struct timeval)); if(!c->timeout) { sldns_buffer_free(c->buffer); free(c->ev); free(c); return NULL; } c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_parent = parent; c->tcp_timeout_msec = parent->tcp_timeout_msec; c->tcp_conn_limit = parent->tcp_conn_limit; c->tcl_addr = NULL; c->tcp_keepalive = 0; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_http; c->tcp_do_close = 1; c->do_not_close = 0; c->tcp_do_toggle_rw = 1; /* will be set to 0 after http2 upgrade */ c->tcp_check_nb_connect = 0; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 0; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = NULL; #endif c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; c->http_min_version = http_version_2; c->http2_stream_max_qbuffer_size = bufsize; if(harden_large_queries && bufsize > 512) c->http2_stream_max_qbuffer_size = 512; c->http2_max_streams = http_max_streams; if(!(c->http_endpoint = strdup(http_endpoint))) { log_err("could not strdup http_endpoint"); sldns_buffer_free(c->buffer); free(c->timeout); free(c->ev); free(c); return NULL; } c->use_h2 = 0; #ifdef HAVE_NGHTTP2 if(!(c->h2_session = http2_session_create(c))) { log_err("could not create http2 session"); free(c->http_endpoint); sldns_buffer_free(c->buffer); free(c->timeout); free(c->ev); free(c); return NULL; } if(!(c->h2_session->callbacks = http2_req_callbacks_create())) { log_err("could not create http2 callbacks"); http2_session_delete(c->h2_session); free(c->http_endpoint); sldns_buffer_free(c->buffer); free(c->timeout); free(c->ev); free(c); return NULL; } #endif /* add to parent free list */ c->tcp_free = parent->tcp_free; parent->tcp_free = c; /* ub_event stuff */ evbits = UB_EV_PERSIST | UB_EV_READ | UB_EV_TIMEOUT; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_http_handle_callback, c); if(c->ev->ev == NULL) { log_err("could not set http handler event"); parent->tcp_free = c->tcp_free; http2_session_delete(c->h2_session); sldns_buffer_free(c->buffer); free(c->timeout); free(c->ev); free(c); return NULL; } return c; } struct comm_point* comm_point_create_tcp(struct comm_base *base, int fd, int num, int idle_timeout, int harden_large_queries, uint32_t http_max_streams, char* http_endpoint, struct tcl_list* tcp_conn_limit, size_t bufsize, struct sldns_buffer* spoolbuf, enum listen_type port_type, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; int i; /* first allocate the TCP accept listener */ if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = fd; c->buffer = NULL; c->timeout = NULL; c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_timeout_msec = idle_timeout; c->tcp_conn_limit = tcp_conn_limit; c->tcl_addr = NULL; c->tcp_keepalive = 0; c->tcp_parent = NULL; c->max_tcp_count = num; c->cur_tcp_count = 0; c->tcp_handlers = (struct comm_point**)calloc((size_t)num, sizeof(struct comm_point*)); if(!c->tcp_handlers) { free(c->ev); free(c); return NULL; } c->tcp_free = NULL; c->type = comm_tcp_accept; c->tcp_do_close = 0; c->do_not_close = 0; c->tcp_do_toggle_rw = 0; c->tcp_check_nb_connect = 0; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 0; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = NULL; #endif c->callback = NULL; c->cb_arg = NULL; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_tcp_accept_callback, c); if(c->ev->ev == NULL) { log_err("could not baseset tcpacc event"); comm_point_delete(c); return NULL; } if (ub_event_add(c->ev->ev, c->timeout) != 0) { log_err("could not add tcpacc event"); comm_point_delete(c); return NULL; } c->event_added = 1; /* now prealloc the handlers */ for(i=0; itcp_handlers[i] = comm_point_create_tcp_handler(base, c, bufsize, spoolbuf, callback, callback_arg); } else if(port_type == listen_type_http) { c->tcp_handlers[i] = comm_point_create_http_handler( base, c, bufsize, harden_large_queries, http_max_streams, http_endpoint, callback, callback_arg); } else { log_err("could not create tcp handler, unknown listen " "type"); return NULL; } if(!c->tcp_handlers[i]) { comm_point_delete(c); return NULL; } } return c; } struct comm_point* comm_point_create_tcp_out(struct comm_base *base, size_t bufsize, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = -1; c->buffer = sldns_buffer_new(bufsize); if(!c->buffer) { free(c->ev); free(c); return NULL; } c->timeout = NULL; c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_timeout_msec = TCP_QUERY_TIMEOUT; c->tcp_conn_limit = NULL; c->tcl_addr = NULL; c->tcp_keepalive = 0; c->tcp_parent = NULL; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_tcp; c->tcp_do_close = 0; c->do_not_close = 0; c->tcp_do_toggle_rw = 1; c->tcp_check_nb_connect = 1; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 1; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = c->buffer; #endif c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; evbits = UB_EV_PERSIST | UB_EV_WRITE; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_tcp_handle_callback, c); if(c->ev->ev == NULL) { log_err("could not baseset tcpout event"); sldns_buffer_free(c->buffer); free(c->ev); free(c); return NULL; } return c; } struct comm_point* comm_point_create_http_out(struct comm_base *base, size_t bufsize, comm_point_callback_type* callback, void* callback_arg, sldns_buffer* temp) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = -1; c->buffer = sldns_buffer_new(bufsize); if(!c->buffer) { free(c->ev); free(c); return NULL; } c->timeout = NULL; c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_parent = NULL; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_http; c->tcp_do_close = 0; c->do_not_close = 0; c->tcp_do_toggle_rw = 1; c->tcp_check_nb_connect = 1; c->http_in_headers = 1; c->http_in_chunk_headers = 0; c->http_is_chunked = 0; c->http_temp = temp; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 1; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = c->buffer; #endif c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; evbits = UB_EV_PERSIST | UB_EV_WRITE; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_http_handle_callback, c); if(c->ev->ev == NULL) { log_err("could not baseset tcpout event"); #ifdef HAVE_SSL SSL_free(c->ssl); #endif sldns_buffer_free(c->buffer); free(c->ev); free(c); return NULL; } return c; } struct comm_point* comm_point_create_local(struct comm_base *base, int fd, size_t bufsize, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = fd; c->buffer = sldns_buffer_new(bufsize); if(!c->buffer) { free(c->ev); free(c); return NULL; } c->timeout = NULL; c->tcp_is_reading = 1; c->tcp_byte_count = 0; c->tcp_parent = NULL; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_local; c->tcp_do_close = 0; c->do_not_close = 1; c->tcp_do_toggle_rw = 0; c->tcp_check_nb_connect = 0; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 0; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = c->buffer; #endif c->callback = callback; c->cb_arg = callback_arg; /* ub_event stuff */ evbits = UB_EV_PERSIST | UB_EV_READ; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_local_handle_callback, c); if(c->ev->ev == NULL) { log_err("could not baseset localhdl event"); free(c->ev); free(c); return NULL; } if (ub_event_add(c->ev->ev, c->timeout) != 0) { log_err("could not add localhdl event"); ub_event_free(c->ev->ev); free(c->ev); free(c); return NULL; } c->event_added = 1; return c; } struct comm_point* comm_point_create_raw(struct comm_base* base, int fd, int writing, comm_point_callback_type* callback, void* callback_arg) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); short evbits; if(!c) return NULL; c->ev = (struct internal_event*)calloc(1, sizeof(struct internal_event)); if(!c->ev) { free(c); return NULL; } c->ev->base = base; c->fd = fd; c->buffer = NULL; c->timeout = NULL; c->tcp_is_reading = 0; c->tcp_byte_count = 0; c->tcp_parent = NULL; c->max_tcp_count = 0; c->cur_tcp_count = 0; c->tcp_handlers = NULL; c->tcp_free = NULL; c->type = comm_raw; c->tcp_do_close = 0; c->do_not_close = 1; c->tcp_do_toggle_rw = 0; c->tcp_check_nb_connect = 0; #ifdef USE_MSG_FASTOPEN c->tcp_do_fastopen = 0; #endif #ifdef USE_DNSCRYPT c->dnscrypt = 0; c->dnscrypt_buffer = c->buffer; #endif c->callback = callback; c->cb_arg = callback_arg; /* ub_event stuff */ if(writing) evbits = UB_EV_PERSIST | UB_EV_WRITE; else evbits = UB_EV_PERSIST | UB_EV_READ; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_raw_handle_callback, c); if(c->ev->ev == NULL) { log_err("could not baseset rawhdl event"); free(c->ev); free(c); return NULL; } if (ub_event_add(c->ev->ev, c->timeout) != 0) { log_err("could not add rawhdl event"); ub_event_free(c->ev->ev); free(c->ev); free(c); return NULL; } c->event_added = 1; return c; } void comm_point_close(struct comm_point* c) { if(!c) return; if(c->fd != -1) { verbose(5, "comm_point_close of %d: event_del", c->fd); if(c->event_added) { if(ub_event_del(c->ev->ev) != 0) { log_err("could not event_del on close"); } c->event_added = 0; } } tcl_close_connection(c->tcl_addr); if(c->tcp_req_info) tcp_req_info_clear(c->tcp_req_info); if(c->h2_session) http2_session_server_delete(c->h2_session); /* close fd after removing from event lists, or epoll.. is messed up */ if(c->fd != -1 && !c->do_not_close) { if(c->type == comm_tcp || c->type == comm_http) { /* delete sticky events for the fd, it gets closed */ ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_WRITE); } verbose(VERB_ALGO, "close fd %d", c->fd); sock_close(c->fd); } c->fd = -1; } void comm_point_delete(struct comm_point* c) { if(!c) return; if((c->type == comm_tcp || c->type == comm_http) && c->ssl) { #ifdef HAVE_SSL SSL_shutdown(c->ssl); SSL_free(c->ssl); #endif } if(c->type == comm_http && c->http_endpoint) { free(c->http_endpoint); c->http_endpoint = NULL; } comm_point_close(c); if(c->tcp_handlers) { int i; for(i=0; imax_tcp_count; i++) comm_point_delete(c->tcp_handlers[i]); free(c->tcp_handlers); } free(c->timeout); if(c->type == comm_tcp || c->type == comm_local || c->type == comm_http) { sldns_buffer_free(c->buffer); #ifdef USE_DNSCRYPT if(c->dnscrypt && c->dnscrypt_buffer != c->buffer) { sldns_buffer_free(c->dnscrypt_buffer); } #endif if(c->tcp_req_info) { tcp_req_info_delete(c->tcp_req_info); } if(c->h2_session) { http2_session_delete(c->h2_session); } } ub_event_free(c->ev->ev); free(c->ev); free(c); } void comm_point_send_reply(struct comm_reply *repinfo) { struct sldns_buffer* buffer; log_assert(repinfo && repinfo->c); #ifdef USE_DNSCRYPT buffer = repinfo->c->dnscrypt_buffer; if(!dnsc_handle_uncurved_request(repinfo)) { return; } #else buffer = repinfo->c->buffer; #endif if(repinfo->c->type == comm_udp) { if(repinfo->srctype) comm_point_send_udp_msg_if(repinfo->c, buffer, (struct sockaddr*)&repinfo->addr, repinfo->addrlen, repinfo); else comm_point_send_udp_msg(repinfo->c, buffer, (struct sockaddr*)&repinfo->addr, repinfo->addrlen, 0); #ifdef USE_DNSTAP if(repinfo->c->dtenv != NULL && repinfo->c->dtenv->log_client_response_messages) dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->addr, repinfo->c->type, repinfo->c->buffer); #endif } else { #ifdef USE_DNSTAP if(repinfo->c->tcp_parent->dtenv != NULL && repinfo->c->tcp_parent->dtenv->log_client_response_messages) dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, repinfo->c->type, ( repinfo->c->tcp_req_info ? repinfo->c->tcp_req_info->spool_buffer : repinfo->c->buffer )); #endif if(repinfo->c->tcp_req_info) { tcp_req_info_send_reply(repinfo->c->tcp_req_info); } else if(repinfo->c->use_h2) { if(!http2_submit_dns_response(repinfo->c->h2_session)) { comm_point_drop_reply(repinfo); return; } repinfo->c->h2_stream = NULL; repinfo->c->tcp_is_reading = 0; comm_point_stop_listening(repinfo->c); comm_point_start_listening(repinfo->c, -1, adjusted_tcp_timeout(repinfo->c)); return; } else { comm_point_start_listening(repinfo->c, -1, adjusted_tcp_timeout(repinfo->c)); } } } void comm_point_drop_reply(struct comm_reply* repinfo) { if(!repinfo) return; log_assert(repinfo->c); log_assert(repinfo->c->type != comm_tcp_accept); if(repinfo->c->type == comm_udp) return; if(repinfo->c->tcp_req_info) repinfo->c->tcp_req_info->is_drop = 1; if(repinfo->c->type == comm_http) { if(repinfo->c->h2_session) { repinfo->c->h2_session->is_drop = 1; if(!repinfo->c->h2_session->postpone_drop) reclaim_http_handler(repinfo->c); return; } reclaim_http_handler(repinfo->c); return; } reclaim_tcp_handler(repinfo->c); } void comm_point_stop_listening(struct comm_point* c) { verbose(VERB_ALGO, "comm point stop listening %d", c->fd); if(c->event_added) { if(ub_event_del(c->ev->ev) != 0) { log_err("event_del error to stoplisten"); } c->event_added = 0; } } void comm_point_start_listening(struct comm_point* c, int newfd, int msec) { verbose(VERB_ALGO, "comm point start listening %d (%d msec)", c->fd==-1?newfd:c->fd, msec); if(c->type == comm_tcp_accept && !c->tcp_free) { /* no use to start listening no free slots. */ return; } if(c->event_added) { if(ub_event_del(c->ev->ev) != 0) { log_err("event_del error to startlisten"); } c->event_added = 0; } if(msec != -1 && msec != 0) { if(!c->timeout) { c->timeout = (struct timeval*)malloc(sizeof( struct timeval)); if(!c->timeout) { log_err("cpsl: malloc failed. No net read."); return; } } ub_event_add_bits(c->ev->ev, UB_EV_TIMEOUT); #ifndef S_SPLINT_S /* splint fails on struct timeval. */ c->timeout->tv_sec = msec/1000; c->timeout->tv_usec = (msec%1000)*1000; #endif /* S_SPLINT_S */ } if(c->type == comm_tcp || c->type == comm_http) { ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); if(c->tcp_write_and_read) { verbose(5, "startlistening %d mode rw", (newfd==-1?c->fd:newfd)); ub_event_add_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); } else if(c->tcp_is_reading) { verbose(5, "startlistening %d mode r", (newfd==-1?c->fd:newfd)); ub_event_add_bits(c->ev->ev, UB_EV_READ); } else { verbose(5, "startlistening %d mode w", (newfd==-1?c->fd:newfd)); ub_event_add_bits(c->ev->ev, UB_EV_WRITE); } } if(newfd != -1) { if(c->fd != -1 && c->fd != newfd) { verbose(5, "cpsl close of fd %d for %d", c->fd, newfd); sock_close(c->fd); } c->fd = newfd; ub_event_set_fd(c->ev->ev, c->fd); } if(ub_event_add(c->ev->ev, msec==0?NULL:c->timeout) != 0) { log_err("event_add failed. in cpsl."); } c->event_added = 1; } void comm_point_listen_for_rw(struct comm_point* c, int rd, int wr) { verbose(VERB_ALGO, "comm point listen_for_rw %d %d", c->fd, wr); if(c->event_added) { if(ub_event_del(c->ev->ev) != 0) { log_err("event_del error to cplf"); } c->event_added = 0; } ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); if(rd) ub_event_add_bits(c->ev->ev, UB_EV_READ); if(wr) ub_event_add_bits(c->ev->ev, UB_EV_WRITE); if(ub_event_add(c->ev->ev, c->timeout) != 0) { log_err("event_add failed. in cplf."); } c->event_added = 1; } size_t comm_point_get_mem(struct comm_point* c) { size_t s; if(!c) return 0; s = sizeof(*c) + sizeof(*c->ev); if(c->timeout) s += sizeof(*c->timeout); if(c->type == comm_tcp || c->type == comm_local) { s += sizeof(*c->buffer) + sldns_buffer_capacity(c->buffer); #ifdef USE_DNSCRYPT s += sizeof(*c->dnscrypt_buffer); if(c->buffer != c->dnscrypt_buffer) { s += sldns_buffer_capacity(c->dnscrypt_buffer); } #endif } if(c->type == comm_tcp_accept) { int i; for(i=0; imax_tcp_count; i++) s += comm_point_get_mem(c->tcp_handlers[i]); } return s; } struct comm_timer* comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg) { struct internal_timer *tm = (struct internal_timer*)calloc(1, sizeof(struct internal_timer)); if(!tm) { log_err("malloc failed"); return NULL; } tm->super.ev_timer = tm; tm->base = base; tm->super.callback = cb; tm->super.cb_arg = cb_arg; tm->ev = ub_event_new(base->eb->base, -1, UB_EV_TIMEOUT, comm_timer_callback, &tm->super); if(tm->ev == NULL) { log_err("timer_create: event_base_set failed."); free(tm); return NULL; } return &tm->super; } void comm_timer_disable(struct comm_timer* timer) { if(!timer) return; ub_timer_del(timer->ev_timer->ev); timer->ev_timer->enabled = 0; } void comm_timer_set(struct comm_timer* timer, struct timeval* tv) { log_assert(tv); if(timer->ev_timer->enabled) comm_timer_disable(timer); if(ub_timer_add(timer->ev_timer->ev, timer->ev_timer->base->eb->base, comm_timer_callback, timer, tv) != 0) log_err("comm_timer_set: evtimer_add failed."); timer->ev_timer->enabled = 1; } void comm_timer_delete(struct comm_timer* timer) { if(!timer) return; comm_timer_disable(timer); /* Free the sub struct timer->ev_timer derived from the super struct timer. * i.e. assert(timer == timer->ev_timer) */ ub_event_free(timer->ev_timer->ev); free(timer->ev_timer); } void comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg) { struct comm_timer* tm = (struct comm_timer*)arg; if(!(event&UB_EV_TIMEOUT)) return; ub_comm_base_now(tm->ev_timer->base); tm->ev_timer->enabled = 0; fptr_ok(fptr_whitelist_comm_timer(tm->callback)); (*tm->callback)(tm->cb_arg); } int comm_timer_is_set(struct comm_timer* timer) { return (int)timer->ev_timer->enabled; } size_t comm_timer_get_mem(struct comm_timer* ATTR_UNUSED(timer)) { return sizeof(struct internal_timer); } struct comm_signal* comm_signal_create(struct comm_base* base, void (*callback)(int, void*), void* cb_arg) { struct comm_signal* com = (struct comm_signal*)malloc( sizeof(struct comm_signal)); if(!com) { log_err("malloc failed"); return NULL; } com->base = base; com->callback = callback; com->cb_arg = cb_arg; com->ev_signal = NULL; return com; } void comm_signal_callback(int sig, short event, void* arg) { struct comm_signal* comsig = (struct comm_signal*)arg; if(!(event & UB_EV_SIGNAL)) return; ub_comm_base_now(comsig->base); fptr_ok(fptr_whitelist_comm_signal(comsig->callback)); (*comsig->callback)(sig, comsig->cb_arg); } int comm_signal_bind(struct comm_signal* comsig, int sig) { struct internal_signal* entry = (struct internal_signal*)calloc(1, sizeof(struct internal_signal)); if(!entry) { log_err("malloc failed"); return 0; } log_assert(comsig); /* add signal event */ entry->ev = ub_signal_new(comsig->base->eb->base, sig, comm_signal_callback, comsig); if(entry->ev == NULL) { log_err("Could not create signal event"); free(entry); return 0; } if(ub_signal_add(entry->ev, NULL) != 0) { log_err("Could not add signal handler"); ub_event_free(entry->ev); free(entry); return 0; } /* link into list */ entry->next = comsig->ev_signal; comsig->ev_signal = entry; return 1; } void comm_signal_delete(struct comm_signal* comsig) { struct internal_signal* p, *np; if(!comsig) return; p=comsig->ev_signal; while(p) { np = p->next; ub_signal_del(p->ev); ub_event_free(p->ev); free(p); p = np; } free(comsig); } unbound-1.13.1/util/configlexer.c0000644000175000017500000103545514010434645016347 0ustar wouterwouter#include "config.h" #include "util/configyyrename.h" #line 2 "" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = NULL; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart ( FILE *input_file ); void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); void yy_delete_buffer ( YY_BUFFER_STATE b ); void yy_flush_buffer ( YY_BUFFER_STATE b ); void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); void yypop_buffer_state ( void ); static void yyensure_buffer_stack ( void ); static void yy_load_buffer_state ( void ); static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); void *yyalloc ( yy_size_t ); void *yyrealloc ( void *, yy_size_t ); void yyfree ( void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef flex_uint8_t YY_CHAR; FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #ifdef yytext_ptr #undef yytext_ptr #endif #define yytext_ptr yytext static yy_state_type yy_get_previous_state ( void ); static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); static int yy_get_next_buffer ( void ); static void yynoreturn yy_fatal_error ( const char* msg ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ (yytext_ptr) -= (yy_more_len); \ yyleng = (int) (yy_cp - (yytext_ptr)); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 343 #define YY_END_OF_BUFFER 344 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_accept[3354] = { 0, 1, 1, 317, 317, 321, 321, 325, 325, 329, 329, 1, 1, 333, 333, 337, 337, 344, 341, 1, 315, 315, 342, 2, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 342, 317, 318, 318, 319, 342, 321, 322, 322, 323, 342, 328, 325, 326, 326, 327, 342, 329, 330, 330, 331, 342, 340, 316, 2, 320, 340, 342, 336, 333, 334, 334, 335, 342, 337, 338, 338, 339, 342, 341, 0, 1, 2, 2, 2, 2, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 317, 0, 321, 0, 328, 0, 325, 329, 0, 340, 0, 2, 2, 340, 336, 0, 333, 337, 0, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 125, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 134, 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 109, 341, 314, 341, 341, 341, 341, 341, 341, 341, 8, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 126, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 139, 341, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 307, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 64, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 239, 341, 14, 15, 341, 19, 18, 341, 341, 223, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 132, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 221, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 3, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, 341, 341, 341, 341, 301, 341, 341, 300, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 324, 341, 341, 341, 341, 341, 341, 341, 341, 63, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 67, 341, 270, 341, 341, 341, 341, 341, 341, 341, 341, 308, 309, 341, 341, 341, 341, 341, 341, 341, 68, 341, 341, 133, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 129, 341, 341, 341, 341, 341, 341, 341, 341, 341, 210, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 21, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 158, 341, 341, 340, 324, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 107, 341, 341, 341, 341, 341, 341, 341, 278, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 182, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 157, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 106, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 32, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 33, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 65, 341, 341, 341, 341, 341, 341, 341, 341, 341, 131, 340, 341, 341, 341, 341, 341, 124, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 66, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 243, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 183, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 54, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 261, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 58, 341, 59, 341, 341, 341, 341, 341, 110, 341, 111, 341, 341, 341, 341, 108, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 7, 341, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 232, 341, 341, 341, 341, 160, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 244, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 45, 341, 341, 341, 341, 341, 341, 341, 341, 341, 55, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 202, 341, 201, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 16, 17, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 69, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 209, 341, 341, 341, 341, 341, 341, 113, 341, 112, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 193, 341, 341, 341, 341, 341, 341, 341, 341, 140, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 101, 341, 341, 341, 341, 341, 341, 341, 341, 341, 89, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 222, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 94, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 62, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 196, 197, 341, 341, 341, 272, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 6, 341, 341, 341, 341, 341, 341, 291, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 276, 341, 341, 341, 341, 341, 341, 302, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 42, 341, 341, 341, 341, 44, 341, 341, 341, 90, 341, 341, 341, 341, 341, 52, 341, 341, 341, 341, 341, 341, 341, 340, 341, 189, 341, 341, 341, 135, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 214, 341, 190, 341, 341, 341, 229, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 53, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 137, 118, 341, 119, 341, 341, 341, 117, 341, 341, 341, 341, 341, 341, 341, 341, 155, 341, 341, 50, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 260, 341, 341, 341, 341, 341, 341, 341, 341, 341, 191, 341, 341, 341, 341, 341, 194, 341, 200, 341, 341, 341, 341, 341, 228, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 105, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 130, 341, 341, 341, 341, 341, 341, 341, 60, 341, 341, 341, 26, 341, 341, 341, 341, 341, 341, 341, 341, 341, 20, 341, 341, 341, 341, 341, 341, 27, 36, 341, 165, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, 341, 341, 341, 77, 79, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 280, 341, 341, 341, 341, 240, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 120, 341, 341, 341, 341, 341, 341, 341, 341, 341, 154, 341, 46, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 295, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 159, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 289, 341, 341, 341, 220, 341, 341, 341, 341, 341, 341, 341, 341, 341, 305, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 176, 341, 341, 341, 341, 341, 341, 341, 341, 341, 114, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 171, 341, 184, 341, 341, 341, 341, 340, 341, 143, 341, 341, 341, 341, 341, 100, 341, 341, 341, 341, 212, 341, 341, 341, 341, 341, 341, 230, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 252, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 136, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 175, 341, 341, 341, 341, 341, 341, 80, 341, 81, 341, 341, 341, 341, 341, 61, 298, 341, 341, 341, 341, 341, 88, 185, 341, 203, 341, 233, 341, 341, 195, 273, 341, 341, 341, 341, 341, 73, 341, 187, 341, 341, 341, 341, 341, 9, 341, 341, 341, 341, 341, 104, 341, 341, 341, 341, 265, 341, 341, 341, 341, 211, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, 341, 174, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 161, 341, 279, 341, 341, 341, 341, 341, 251, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 224, 341, 341, 341, 341, 341, 271, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 299, 341, 186, 341, 341, 341, 341, 341, 341, 341, 72, 74, 341, 341, 341, 341, 341, 341, 341, 341, 341, 103, 341, 341, 341, 341, 263, 341, 341, 341, 341, 275, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 216, 34, 28, 30, 341, 341, 341, 341, 341, 341, 341, 341, 341, 35, 341, 29, 31, 341, 341, 341, 341, 341, 341, 341, 341, 99, 341, 341, 341, 341, 341, 341, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 218, 215, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 71, 341, 341, 341, 138, 341, 121, 341, 341, 341, 341, 341, 341, 341, 341, 156, 47, 341, 341, 341, 332, 13, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 293, 341, 296, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 12, 341, 341, 22, 341, 341, 341, 341, 341, 269, 341, 341, 341, 341, 277, 341, 341, 341, 75, 341, 226, 341, 341, 341, 341, 341, 217, 341, 341, 70, 341, 341, 341, 341, 23, 341, 43, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 170, 169, 332, 341, 341, 341, 341, 341, 341, 341, 341, 341, 219, 213, 341, 231, 341, 341, 281, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 82, 341, 341, 341, 341, 264, 341, 341, 341, 341, 199, 341, 341, 341, 341, 225, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 303, 304, 167, 341, 341, 76, 341, 341, 341, 341, 177, 341, 341, 341, 115, 116, 341, 341, 341, 341, 162, 341, 164, 341, 204, 341, 341, 341, 341, 168, 341, 341, 234, 341, 341, 341, 341, 341, 341, 341, 145, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 242, 341, 341, 341, 341, 341, 341, 341, 312, 341, 24, 341, 274, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 86, 205, 341, 341, 262, 341, 297, 341, 198, 341, 341, 341, 341, 56, 341, 341, 341, 341, 341, 341, 4, 341, 341, 341, 341, 128, 144, 341, 341, 341, 181, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 237, 37, 38, 341, 341, 341, 341, 341, 341, 341, 282, 341, 341, 341, 341, 341, 341, 341, 250, 341, 341, 341, 341, 341, 341, 341, 341, 208, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 85, 341, 57, 268, 341, 238, 341, 341, 341, 341, 11, 341, 341, 341, 341, 341, 341, 341, 341, 127, 341, 341, 341, 341, 206, 91, 341, 40, 341, 341, 341, 341, 341, 341, 341, 341, 173, 341, 341, 341, 341, 341, 147, 341, 341, 341, 341, 241, 341, 341, 341, 341, 341, 249, 341, 341, 341, 341, 141, 341, 341, 341, 122, 123, 341, 341, 341, 93, 97, 92, 341, 341, 341, 341, 83, 341, 341, 341, 341, 341, 10, 341, 341, 341, 341, 341, 266, 306, 341, 341, 341, 341, 311, 39, 341, 341, 341, 341, 341, 172, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 98, 96, 341, 51, 341, 341, 84, 294, 341, 341, 341, 341, 341, 341, 341, 341, 341, 192, 341, 341, 341, 341, 341, 207, 341, 341, 341, 341, 341, 341, 341, 341, 163, 78, 341, 341, 341, 341, 341, 283, 341, 341, 341, 341, 341, 341, 341, 246, 341, 341, 245, 142, 341, 341, 95, 48, 341, 148, 149, 152, 153, 150, 151, 87, 292, 341, 341, 267, 341, 341, 341, 341, 166, 341, 341, 341, 341, 341, 236, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 179, 178, 41, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 290, 341, 341, 341, 341, 102, 341, 235, 341, 259, 287, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 313, 341, 49, 5, 341, 341, 227, 341, 341, 288, 341, 341, 341, 341, 341, 341, 341, 341, 341, 247, 25, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 248, 341, 341, 341, 146, 341, 341, 341, 341, 341, 341, 341, 341, 180, 341, 188, 341, 341, 341, 341, 341, 341, 341, 341, 341, 284, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 310, 341, 341, 255, 341, 341, 341, 341, 341, 285, 341, 341, 341, 341, 341, 341, 286, 341, 341, 341, 253, 341, 256, 257, 341, 341, 341, 341, 341, 254, 258, 0 } ; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 6, 1, 1, 1, 7, 1, 1, 1, 1, 1, 8, 1, 1, 1, 9, 1, 10, 11, 1, 12, 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 1, 40, 1, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static const YY_CHAR yy_meta[67] = { 0, 1, 2, 3, 4, 5, 1, 6, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static const flex_int16_t yy_base[3372] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, 131, 137, 112, 118, 123, 142, 429, 383, 96, 9568, 9568, 9568, 160, 185, 116, 183, 229, 132, 175, 173, 232, 50, 66, 120, 263, 275, 151, 323, 134, 375, 416, 286, 308, 283, 126, 237, 374, 9568, 9568, 9568, 95, 372, 9568, 9568, 9568, 186, 361, 373, 9568, 9568, 9568, 258, 309, 9568, 9568, 9568, 104, 293, 9568, 266, 9568, 167, 351, 281, 311, 9568, 9568, 9568, 369, 268, 9568, 9568, 9568, 146, 252, 378, 177, 0, 392, 0, 0, 303, 270, 235, 317, 362, 344, 384, 178, 177, 226, 420, 377, 330, 379, 402, 414, 419, 410, 453, 319, 367, 440, 429, 447, 454, 463, 459, 458, 489, 495, 484, 474, 493, 499, 460, 500, 504, 510, 492, 524, 520, 532, 525, 537, 529, 412, 533, 558, 539, 531, 548, 565, 559, 250, 505, 587, 575, 574, 584, 570, 580, 610, 601, 595, 604, 607, 614, 615, 208, 294, 205, 236, 194, 670, 225, 180, 326, 158, 674, 678, 0, 623, 152, 682, 176, 130, 653, 650, 680, 661, 609, 675, 670, 676, 666, 671, 682, 672, 691, 720, 697, 696, 703, 256, 726, 770, 731, 723, 714, 734, 737, 724, 718, 745, 740, 749, 759, 766, 728, 773, 760, 772, 787, 819, 789, 762, 797, 339, 802, 827, 378, 808, 443, 832, 805, 699, 829, 725, 838, 836, 844, 843, 835, 852, 847, 866, 860, 849, 864, 875, 874, 871, 865, 868, 911, 885, 878, 893, 892, 894, 907, 908, 902, 913, 781, 909, 920, 921, 935, 912, 937, 930, 919, 943, 950, 948, 956, 957, 938, 958, 955, 953, 960, 954, 973, 969, 984, 994, 986, 993, 1002, 989, 995, 988, 996, 999, 987, 1013, 1014, 1022, 1026, 144, 1020, 1029, 1031, 1019, 1028, 1039, 1041, 1051, 1052, 1053, 1036, 1057, 1062, 1072, 1069, 1070, 1076, 1079, 1088, 1055, 1067, 1065, 1082, 1092, 1098, 1087, 1100, 1091, 1103, 1115, 1106, 1120, 1099, 1134, 1132, 1127, 1159, 1136, 1128, 1148, 1180, 1154, 1147, 1170, 1162, 1193, 1187, 1169, 1191, 1198, 1204, 1206, 1207, 1199, 1197, 1218, 1226, 1217, 1225, 1224, 1220, 1235, 1241, 1242, 1264, 9568, 1250, 1253, 1246, 1266, 1273, 1269, 1261, 1301, 1280, 1259, 1286, 1223, 1303, 1306, 1354, 1294, 1331, 1297, 1311, 1296, 9568, 1337, 1318, 1403, 1336, 1353, 1365, 1360, 1347, 1367, 1361, 1363, 1382, 1323, 1381, 1394, 1371, 1416, 1430, 1404, 1409, 1410, 1364, 1412, 1421, 1437, 1439, 1428, 1436, 1431, 1443, 1263, 1455, 1473, 1449, 1458, 1462, 1461, 1477, 1488, 1480, 1493, 1482, 1494, 1499, 1476, 1498, 1509, 1522, 1567, 1466, 1518, 1524, 1526, 1519, 1537, 1538, 1541, 1548, 1560, 1556, 1546, 1569, 1549, 1533, 1573, 1564, 1591, 1587, 1594, 1586, 1582, 1590, 1597, 1614, 1604, 1600, 1608, 1621, 1607, 1628, 1624, 1637, 1634, 1619, 1643, 1627, 9568, 1651, 9568, 1635, 1650, 1648, 1647, 1664, 1653, 1660, 9568, 1670, 1671, 1666, 1667, 1687, 1683, 1706, 1697, 1691, 1696, 1700, 1695, 1710, 1711, 1701, 1717, 1731, 1726, 1730, 1719, 1718, 1738, 1745, 1728, 1746, 1744, 1737, 1748, 1788, 9568, 1754, 1764, 1755, 1765, 1782, 1786, 1813, 1770, 1800, 1817, 1801, 1825, 1811, 1823, 1816, 1824, 1828, 1841, 1829, 1857, 1844, 1849, 1850, 1843, 1845, 1868, 1855, 1860, 1863, 1874, 9568, 1884, 1892, 1768, 1871, 1882, 1885, 1888, 1898, 1881, 1910, 1890, 1916, 1908, 1919, 1921, 1933, 1922, 1938, 1924, 1939, 1930, 1935, 1947, 1953, 1959, 1954, 1958, 1960, 1955, 1964, 1972, 1976, 1984, 1977, 1993, 1969, 1980, 1986, 1996, 1979, 2000, 1991, 2004, 1987, 2003, 2011, 2017, 2020, 2014, 2021, 2019, 2028, 2025, 2018, 2038, 2034, 2037, 2059, 2053, 2048, 2060, 2051, 2073, 2061, 2065, 2077, 2078, 2080, 2076, 9568, 2098, 2088, 2099, 2107, 2108, 2109, 2114, 2100, 2104, 2110, 2115, 2118, 2127, 2130, 2139, 2132, 2136, 2144, 2146, 2137, 2150, 2159, 2169, 2167, 2160, 2154, 2168, 2171, 2142, 2189, 2185, 2196, 2197, 2177, 2188, 2206, 2192, 2194, 2217, 2213, 2199, 2216, 2223, 2211, 2229, 2232, 2243, 2215, 2235, 2260, 2253, 2240, 2244, 2249, 2258, 2252, 2264, 2266, 2268, 2270, 2263, 2299, 2294, 2291, 2288, 2290, 2296, 2293, 2295, 2304, 2306, 2310, 2316, 2317, 2321, 2325, 2320, 2326, 2327, 2331, 2341, 2330, 2347, 2358, 2362, 2356, 2352, 2353, 2367, 2368, 2374, 2365, 2369, 2392, 2397, 2396, 2400, 2401, 2386, 2407, 2409, 2398, 2411, 2410, 2416, 2432, 2436, 2428, 2437, 2429, 2438, 2430, 2272, 2449, 2453, 2455, 2445, 9568, 2447, 2380, 2441, 2471, 2472, 2464, 2465, 2383, 2478, 2463, 2476, 2479, 2480, 2530, 9568, 2481, 9568, 9568, 2492, 9568, 9568, 2511, 2495, 9568, 2518, 2517, 2498, 2529, 2536, 2545, 2543, 2516, 2541, 2538, 2553, 2585, 2566, 2557, 2556, 2563, 2564, 2591, 2594, 2581, 2602, 2582, 2593, 2633, 2618, 2609, 2620, 2627, 2638, 2636, 2637, 2643, 2575, 2644, 2630, 2631, 2645, 2654, 2634, 2670, 2655, 2664, 2671, 2683, 2668, 2675, 2666, 2694, 2691, 2690, 2699, 9568, 2695, 2697, 2708, 2702, 2709, 2713, 2714, 2711, 2725, 2728, 2722, 2715, 2726, 2732, 2727, 2721, 2742, 2744, 2741, 2743, 2756, 2767, 2746, 9568, 2754, 2766, 2752, 2769, 2771, 2779, 2781, 2770, 2760, 2790, 2778, 2800, 2788, 2795, 2801, 2805, 2797, 2807, 2827, 9568, 2802, 2819, 2812, 2818, 2815, 2824, 2829, 2813, 2839, 2834, 2841, 2851, 2840, 2850, 2877, 2865, 2861, 2856, 2866, 2878, 2867, 2882, 2879, 2870, 2886, 2883, 2891, 2892, 2893, 2897, 2901, 2928, 2930, 2913, 2934, 2917, 2918, 2937, 2939, 2929, 2922, 2947, 2945, 2925, 2935, 2942, 2948, 2952, 2958, 2981, 2960, 2982, 2965, 2979, 2993, 2974, 2986, 2994, 2969, 2985, 2997, 2996, 9568, 2976, 3011, 9568, 3001, 2999, 3009, 3055, 3034, 3036, 3028, 3004, 3020, 3046, 3038, 3042, 3054, 3061, 3079, 3069, 3070, 3085, 3077, 3094, 3083, 3102, 3086, 3087, 3103, 3106, 3112, 3119, 3125, 3128, 3131, 381, 3130, 3110, 3121, 3120, 3167, 3137, 3145, 3129, 3151, 3152, 3156, 3174, 3157, 3170, 3172, 3169, 3165, 3198, 3192, 3188, 3194, 3199, 3205, 3207, 3202, 9568, 3212, 3220, 3208, 3219, 3215, 3241, 3235, 3226, 9568, 3234, 3239, 3236, 3246, 3247, 3238, 3253, 3244, 3255, 3261, 3265, 3251, 3267, 3280, 3272, 3295, 9568, 3282, 9568, 3279, 3285, 3283, 3287, 3297, 3296, 3312, 3313, 9568, 9568, 3314, 3321, 3299, 3326, 3322, 3320, 3323, 9568, 3327, 3356, 9568, 3333, 3349, 3341, 3339, 3351, 3347, 3358, 3354, 3377, 3353, 3380, 3372, 3379, 3374, 9568, 3386, 3370, 3385, 3397, 3392, 3394, 3400, 3404, 3383, 9568, 3414, 3407, 3419, 3431, 3428, 3424, 3421, 3434, 3441, 3422, 3426, 3436, 3435, 3430, 3449, 3459, 3466, 3468, 3469, 3464, 9568, 3457, 3458, 3482, 3476, 3479, 3480, 3483, 3470, 3485, 3484, 3491, 3502, 3512, 3505, 3508, 3503, 3529, 3530, 3511, 3528, 3527, 3515, 3531, 3524, 91, 3519, 3532, 3543, 3540, 9568, 3547, 3548, 3549, 128, 3557, 3558, 3567, 3572, 3574, 3578, 3560, 3586, 3587, 3575, 3585, 3593, 3592, 3589, 3594, 3604, 3596, 3606, 3619, 3600, 3610, 9568, 3628, 3618, 3616, 3624, 3635, 3620, 3644, 9568, 3646, 3647, 3652, 3654, 3662, 3651, 3661, 3653, 3668, 3673, 3678, 3674, 3685, 3689, 3684, 3691, 3687, 9568, 3703, 3699, 3710, 3707, 3712, 3718, 3714, 3713, 3720, 3719, 3724, 3733, 3725, 3731, 3734, 3745, 3746, 3750, 3742, 3747, 3751, 3759, 3761, 3760, 3769, 3763, 3772, 3774, 3765, 9568, 3805, 3787, 3790, 3799, 3791, 3794, 3808, 3803, 3825, 3800, 3809, 3820, 3821, 3860, 3826, 3835, 3848, 3827, 3840, 3849, 3862, 3854, 3872, 3863, 3853, 3881, 3900, 3887, 3866, 3885, 3893, 3892, 3888, 3898, 3922, 3923, 3921, 3924, 3947, 3930, 3917, 3932, 3939, 3941, 9568, 3942, 3836, 3927, 3955, 3975, 3962, 3954, 3972, 3966, 3969, 3968, 3981, 3970, 3990, 3985, 3993, 3992, 4004, 3996, 4007, 4008, 4003, 3997, 4013, 4025, 4011, 4029, 4030, 9568, 4036, 4041, 4028, 4035, 4050, 4031, 4054, 4059, 4056, 4043, 4048, 4065, 4052, 4073, 4062, 4075, 4058, 4088, 4066, 9568, 4092, 4083, 4096, 4091, 4099, 4089, 4103, 4109, 4115, 4113, 4116, 4111, 4100, 4127, 4124, 9568, 4118, 4149, 4141, 4154, 4143, 4131, 4142, 4155, 4139, 9568, 4145, 4147, 4148, 4162, 4168, 4172, 9568, 4170, 4176, 4164, 4165, 4181, 4174, 4182, 4201, 4186, 4189, 4192, 4199, 4207, 4195, 4216, 9568, 4205, 4230, 4217, 4227, 4231, 4226, 4223, 4234, 4251, 4233, 4244, 4241, 9568, 4269, 4243, 4261, 4280, 4258, 4263, 4266, 4276, 4282, 4273, 4274, 4290, 4278, 9568, 4283, 4288, 4301, 4311, 4309, 4302, 4304, 4307, 4314, 4308, 4316, 4317, 4322, 4329, 4340, 4335, 4346, 4334, 4349, 4354, 4350, 4357, 4343, 4359, 4373, 4376, 4369, 4374, 4382, 4364, 4368, 4392, 4399, 4403, 4404, 4401, 4405, 9568, 4408, 4407, 4409, 4394, 4410, 4400, 4398, 4416, 4419, 4424, 4434, 4443, 4438, 4435, 4458, 4460, 4436, 4463, 4440, 4447, 4467, 4468, 4453, 4457, 4470, 4462, 4487, 4475, 4483, 4479, 4490, 4510, 4489, 4493, 4494, 4499, 4495, 4503, 4514, 4506, 4528, 4519, 4523, 4520, 4527, 4543, 4539, 4545, 4535, 4551, 4540, 4555, 9568, 4546, 4558, 4562, 4559, 4565, 4568, 4578, 4598, 4582, 4586, 4589, 4592, 4603, 4591, 4602, 4605, 4595, 4608, 4600, 9568, 4610, 9568, 4612, 4626, 4616, 4641, 4625, 9568, 4640, 9568, 4643, 4648, 4634, 4635, 9568, 4653, 4637, 4654, 4658, 4661, 4644, 4647, 4664, 4668, 4678, 4680, 4681, 4683, 4675, 4667, 4696, 4690, 4693, 4707, 4686, 4715, 4714, 4702, 4720, 4708, 4725, 4728, 4724, 4735, 9568, 4719, 4717, 4738, 4723, 4734, 4744, 4741, 4768, 4767, 4755, 4757, 4773, 4765, 4771, 4759, 4785, 4783, 4794, 4770, 4796, 9568, 4791, 4807, 4789, 4803, 9568, 4806, 4795, 4812, 4823, 4814, 4802, 4810, 4839, 4826, 4830, 4831, 4829, 4856, 4836, 4840, 4841, 9568, 4852, 4868, 4853, 4879, 4864, 4870, 4886, 4872, 4883, 4889, 4897, 4880, 4881, 4875, 4895, 4876, 4912, 4903, 4923, 4920, 4924, 4904, 4921, 4928, 4929, 4917, 4913, 4916, 4918, 4943, 4944, 4919, 4940, 4945, 4964, 4950, 9568, 4956, 4961, 4962, 4979, 4960, 4970, 4974, 4976, 4977, 9568, 4978, 4988, 5004, 4987, 5010, 4997, 5002, 4995, 5000, 5014, 5005, 5021, 5040, 5017, 9568, 5036, 9568, 5032, 5031, 5042, 5053, 5050, 5046, 5063, 5054, 5055, 5067, 5060, 5069, 5078, 5072, 5076, 5079, 5095, 5091, 5045, 5075, 5089, 5101, 5090, 5096, 5103, 5126, 5106, 5117, 9568, 9568, 5115, 5121, 5131, 5127, 5136, 5142, 5149, 5148, 5146, 5134, 5141, 5153, 5186, 9568, 5168, 5170, 5161, 5187, 5195, 5175, 5194, 5201, 5198, 5190, 5205, 5200, 9568, 5188, 5197, 5210, 5213, 5220, 5212, 9568, 5228, 9568, 5215, 5222, 5235, 5237, 5231, 5232, 5238, 5240, 5248, 5256, 5262, 5247, 5266, 5257, 5258, 5259, 5280, 5275, 5287, 5268, 5281, 5273, 9568, 5292, 5274, 5295, 5293, 5301, 5304, 5302, 5289, 9568, 5315, 5308, 5310, 5313, 5318, 5322, 5334, 5329, 5337, 5335, 5336, 9568, 5333, 5326, 5356, 5353, 5340, 5349, 5366, 5369, 5377, 9568, 5373, 5375, 5374, 5381, 5376, 5385, 5383, 5370, 5367, 5380, 5391, 5401, 5414, 5411, 5410, 5408, 5416, 5417, 5404, 5440, 5427, 5415, 5429, 5400, 5413, 9568, 5436, 5441, 5442, 5444, 5463, 5459, 5461, 5470, 5474, 5456, 5477, 5479, 5457, 5472, 5481, 5490, 5500, 5495, 9568, 5501, 5491, 5515, 5486, 5513, 5512, 5499, 5518, 5514, 5517, 5503, 5526, 5528, 5530, 5520, 5551, 5534, 5542, 5546, 5553, 5547, 9568, 5576, 5558, 5562, 5573, 5541, 5568, 5587, 5579, 5578, 5580, 5584, 5582, 5585, 5596, 5595, 5618, 5620, 5604, 9568, 9568, 5621, 5602, 5623, 9568, 5625, 5609, 5631, 5633, 5628, 5626, 5635, 5629, 5613, 5636, 5644, 5651, 9568, 5668, 5677, 5654, 5672, 5680, 5681, 9568, 5663, 5685, 5684, 5686, 5678, 5669, 5696, 5690, 5695, 5701, 5694, 5723, 5708, 5731, 5707, 5717, 5729, 9568, 5710, 5714, 5734, 5738, 5721, 5728, 9568, 5726, 5748, 5761, 5758, 5759, 5769, 5767, 5766, 5773, 5753, 5770, 5780, 5776, 5763, 5785, 5792, 5787, 5801, 5813, 5814, 5812, 9568, 5808, 5807, 5800, 5821, 9568, 5822, 5830, 5797, 9568, 5836, 5811, 5841, 5839, 5857, 9568, 5842, 5849, 5843, 5831, 5864, 5838, 5866, 5862, 5859, 9568, 5863, 5858, 5869, 9568, 5876, 5887, 5872, 5892, 5880, 5902, 5889, 5903, 5899, 5901, 9568, 5904, 9568, 5914, 5906, 5911, 9568, 5913, 5922, 5915, 5921, 5937, 5938, 5945, 5948, 5953, 5935, 5947, 5936, 5939, 5963, 5952, 5964, 5942, 5959, 5970, 5962, 9568, 5992, 5978, 5989, 5979, 6000, 6002, 5995, 5987, 6005, 6017, 9568, 9568, 6009, 9568, 6015, 5997, 6023, 9568, 6006, 6027, 6022, 6026, 6045, 6049, 6047, 6044, 9568, 6055, 6057, 9568, 6033, 6053, 6066, 6060, 6042, 6061, 6062, 6068, 6071, 6084, 6085, 6086, 6087, 6076, 6090, 6103, 9568, 6080, 6083, 6104, 6115, 6107, 6117, 6118, 6130, 6119, 9568, 6133, 6145, 6123, 6146, 6148, 9568, 6131, 9568, 6136, 6144, 6149, 6157, 6150, 9568, 6168, 6165, 6156, 6163, 6180, 6191, 6182, 6194, 6183, 6178, 6196, 6195, 6190, 6192, 6213, 6207, 9568, 6205, 6219, 6202, 6210, 6220, 6216, 6244, 6240, 6239, 6230, 6242, 6249, 6243, 6251, 6253, 6247, 6259, 6266, 9568, 6278, 6271, 6267, 6297, 6277, 6286, 6291, 9568, 6294, 6296, 6302, 9568, 6299, 6300, 6310, 6308, 6313, 6314, 6309, 6324, 6327, 9568, 6333, 6336, 6323, 6339, 6350, 6340, 9568, 9568, 6362, 9568, 6347, 6334, 6358, 6360, 6361, 6370, 6356, 6382, 6390, 6374, 6388, 6389, 6383, 6376, 6404, 6407, 6412, 6408, 6406, 6402, 9568, 9568, 6424, 6427, 6421, 6432, 6435, 6425, 6429, 6417, 6438, 6439, 6445, 6441, 6431, 9568, 6456, 6451, 6457, 6455, 9568, 6452, 6476, 6462, 6478, 6486, 6472, 6479, 6474, 6487, 6488, 6496, 6503, 6482, 6506, 6499, 6509, 6504, 6513, 6523, 6522, 6521, 6529, 9568, 6533, 6526, 6538, 6519, 6520, 6548, 6537, 6549, 6552, 9568, 6536, 9568, 6564, 6556, 6568, 6578, 6581, 6582, 6583, 6576, 6579, 6585, 6591, 6590, 6594, 6599, 6600, 6609, 6601, 6621, 6611, 6624, 6626, 9568, 6627, 6614, 6617, 6623, 6639, 6640, 6628, 6643, 6638, 6645, 6648, 6641, 6652, 6669, 6657, 6667, 6664, 6658, 9568, 6675, 6681, 6668, 6682, 6670, 6683, 6690, 6685, 6692, 6699, 6696, 6698, 9568, 6706, 6703, 6724, 9568, 6709, 6708, 6717, 6730, 6737, 6720, 6735, 6726, 6727, 9568, 6743, 6745, 6748, 6736, 6753, 6756, 6752, 6759, 6764, 6779, 6791, 9568, 6757, 6776, 6780, 6790, 6772, 6783, 6792, 6799, 6763, 9568, 6815, 6822, 6787, 6798, 6807, 6835, 6832, 6834, 6808, 6830, 6838, 6836, 6842, 6844, 6847, 6859, 6849, 6855, 6848, 9568, 6857, 9568, 6858, 6880, 6863, 6886, 6883, 6869, 9568, 6876, 6882, 6893, 6884, 6896, 9568, 6885, 6890, 6912, 6909, 9568, 6925, 6924, 6910, 6919, 6934, 6937, 9568, 6935, 6939, 6936, 6945, 6948, 6940, 6944, 6933, 6952, 6958, 6959, 6962, 6976, 6955, 6964, 6979, 9568, 6983, 6985, 6990, 6989, 6986, 6992, 6982, 7003, 6993, 7005, 9568, 7019, 7006, 7011, 7009, 7021, 7015, 7022, 7042, 7033, 7029, 7036, 7038, 7054, 7040, 9568, 7052, 7056, 7063, 7046, 7062, 7069, 9568, 7066, 9568, 7073, 7076, 7082, 7079, 7091, 9568, 9568, 7090, 7049, 7089, 7080, 7099, 9568, 9568, 7110, 9568, 7093, 9568, 7109, 7097, 9568, 9568, 7117, 7103, 7120, 7126, 7115, 9568, 7127, 9568, 7138, 7133, 7130, 7121, 7136, 9568, 7132, 7142, 7150, 7152, 7139, 9568, 7158, 7160, 7153, 7159, 9568, 7175, 7173, 7163, 7165, 9568, 7180, 7184, 7188, 7177, 7187, 7192, 7203, 7185, 7202, 7194, 7208, 7198, 7207, 7212, 7228, 7231, 7236, 7237, 7226, 7223, 7242, 7245, 7248, 7239, 7240, 7250, 7244, 7256, 7261, 7257, 7259, 7271, 7269, 7278, 7277, 7272, 7286, 7273, 7274, 7290, 7297, 7276, 7295, 7298, 7299, 7300, 7316, 7309, 7321, 7317, 7319, 9568, 7313, 7325, 7312, 7342, 7337, 7344, 7348, 7354, 7356, 7359, 9568, 7362, 9568, 7364, 7350, 7355, 7369, 7352, 9568, 7377, 7380, 7378, 7379, 7375, 7381, 7383, 7389, 7395, 7396, 7402, 9568, 7417, 7404, 7410, 7411, 7419, 9568, 7412, 7433, 7416, 7424, 7428, 7437, 7431, 7436, 7440, 7438, 7450, 7453, 7446, 7460, 7462, 7470, 7471, 7477, 7464, 7459, 7469, 7476, 7480, 7472, 7486, 7489, 7473, 7508, 7509, 7510, 9568, 7495, 9568, 7515, 7499, 7513, 7500, 7523, 7512, 7527, 9568, 9568, 7529, 7531, 7530, 7533, 7526, 7543, 7551, 7550, 7559, 9568, 7552, 7560, 7566, 7555, 9568, 7554, 7577, 7578, 7572, 9568, 7573, 7574, 7576, 7584, 7587, 7588, 7603, 7593, 7600, 7601, 7599, 7609, 9568, 9568, 9568, 9568, 7617, 7610, 7621, 7625, 7626, 7614, 7622, 7634, 7627, 9568, 7647, 9568, 9568, 7646, 7650, 7643, 7658, 7648, 7641, 7653, 7659, 9568, 7649, 7666, 7674, 7673, 7672, 7681, 7692, 7689, 7690, 7684, 7685, 7709, 7700, 7706, 7682, 7708, 7710, 7714, 9568, 9568, 7712, 7718, 7717, 7726, 7723, 7733, 7729, 7736, 7742, 7744, 7739, 7747, 7750, 7730, 7759, 7764, 7756, 7755, 9568, 7765, 7763, 7776, 9568, 7769, 9568, 7775, 7782, 7766, 7785, 7788, 7791, 7803, 7792, 9568, 9568, 7795, 7810, 7811, 9568, 9568, 7802, 7796, 7807, 7820, 7825, 7814, 7827, 7824, 7835, 7823, 9568, 7830, 9568, 7829, 7851, 7846, 7840, 7863, 7866, 7869, 7868, 7862, 7872, 9568, 7871, 7861, 9568, 7876, 7878, 7875, 7873, 7894, 9568, 7883, 7867, 7886, 7891, 9568, 7915, 7912, 7914, 9568, 7917, 9568, 7900, 7918, 7910, 7929, 7913, 9568, 7906, 7927, 9568, 7930, 7931, 7932, 7921, 9568, 7933, 9568, 7943, 7938, 7965, 7964, 7952, 7968, 7956, 7953, 7958, 7978, 7974, 7973, 9568, 9568, 73, 7981, 7959, 7983, 7986, 7991, 7980, 7962, 7984, 8002, 9568, 9568, 8007, 9568, 8008, 8014, 9568, 7994, 8020, 8021, 8009, 8032, 8013, 8005, 8024, 8028, 8042, 8057, 8047, 8043, 8055, 8071, 8072, 8054, 8075, 8076, 8078, 8084, 8090, 8070, 8087, 8074, 8081, 8088, 8097, 8104, 8101, 8102, 8103, 9568, 8125, 8126, 8124, 8114, 9568, 8133, 8128, 8138, 8134, 9568, 8140, 8136, 8137, 8147, 9568, 8130, 8142, 8154, 8159, 8151, 8160, 8161, 8182, 8166, 8175, 8185, 9568, 9568, 9568, 8186, 8180, 9568, 8190, 8178, 8169, 8181, 9568, 8200, 8195, 8198, 9568, 9568, 8203, 8205, 8209, 8206, 9568, 8208, 9568, 8213, 9568, 8218, 8219, 8237, 8230, 9568, 8243, 8258, 9568, 8215, 8244, 8249, 8245, 8233, 8250, 8247, 9568, 8263, 8268, 8277, 8267, 8260, 8271, 8270, 8279, 8274, 8293, 8287, 8299, 9568, 8298, 8303, 8310, 8306, 8294, 8301, 8309, 9568, 8311, 9568, 8317, 9568, 8314, 8319, 8318, 8338, 8334, 8329, 8344, 8355, 8356, 8353, 8345, 8340, 8364, 8349, 9568, 9568, 8369, 8370, 9568, 8365, 9568, 8373, 9568, 8372, 8378, 8382, 8376, 9568, 8385, 8384, 8392, 8328, 8379, 8391, 9568, 8406, 8400, 8397, 8417, 9568, 9568, 8403, 8425, 8421, 9568, 8413, 8422, 8432, 8418, 8436, 8431, 8430, 8427, 8451, 8437, 8448, 8441, 8467, 8468, 8469, 9568, 9568, 9568, 8464, 8452, 8478, 8477, 8481, 8485, 8474, 9568, 8488, 8486, 8495, 8483, 8490, 8489, 8509, 9568, 8511, 8503, 8499, 8501, 8518, 8512, 8516, 8526, 9568, 8525, 8537, 8539, 8528, 8541, 8540, 8547, 8549, 8543, 8534, 8559, 8552, 9568, 8563, 9568, 9568, 8553, 9568, 8555, 8566, 8567, 8564, 9568, 8575, 8569, 8578, 8571, 8580, 8592, 8581, 8603, 9568, 8583, 8586, 8590, 8613, 9568, 9568, 8611, 9568, 8614, 8615, 8607, 8628, 8617, 8623, 8625, 8627, 9568, 8619, 8633, 8630, 8637, 8645, 9568, 8655, 8642, 8647, 8648, 9568, 8652, 8657, 8669, 8644, 8672, 9568, 8676, 8671, 8688, 8680, 9568, 8682, 8690, 8692, 9568, 9568, 8689, 8701, 8706, 9568, 9568, 9568, 8711, 8716, 8703, 8723, 9568, 8724, 4983, 8727, 8736, 8735, 9568, 8726, 8732, 8740, 8728, 8730, 9568, 9568, 8725, 8749, 8751, 8747, 9568, 9568, 8750, 8753, 8757, 8755, 8766, 9568, 8752, 8776, 8788, 8765, 8786, 8779, 8790, 8792, 8805, 8803, 8782, 8784, 8793, 8813, 8819, 8806, 8810, 8828, 8821, 8829, 8835, 8823, 8831, 9568, 9568, 8839, 9568, 8842, 8834, 9568, 9568, 8844, 8847, 8849, 8853, 8857, 8859, 8860, 8864, 8841, 9568, 8863, 8873, 8866, 8865, 8858, 9568, 8862, 8879, 8868, 8869, 8876, 8896, 8886, 8898, 9568, 9568, 8889, 8908, 8891, 8913, 8894, 9568, 8916, 8925, 8915, 8921, 8903, 8909, 8931, 9568, 8939, 8923, 9568, 9568, 8933, 8936, 9568, 9568, 8935, 9568, 9568, 9568, 9568, 9568, 9568, 9568, 9568, 8950, 8954, 9568, 8952, 8967, 8968, 8969, 9568, 8948, 8964, 8966, 8956, 8972, 9568, 8962, 8979, 8975, 8999, 8989, 9007, 8992, 8991, 8993, 8998, 8996, 9000, 9013, 8997, 9024, 9012, 9025, 9043, 9026, 9039, 9568, 9568, 9568, 9031, 9027, 9050, 9052, 9055, 9058, 9062, 9063, 9048, 9049, 9065, 9073, 9075, 9056, 9072, 9070, 9077, 9086, 9079, 9093, 9083, 9101, 9568, 9109, 9097, 9096, 9116, 9568, 9102, 9568, 9104, 9568, 9568, 9119, 9120, 9118, 9108, 9137, 9138, 9136, 9128, 9132, 9129, 9140, 9568, 9152, 9568, 9568, 9139, 9142, 9568, 9143, 9154, 9568, 9153, 9166, 9155, 9159, 9163, 9156, 9183, 9186, 9192, 9568, 9568, 9177, 9178, 9187, 9194, 9190, 9212, 9207, 9204, 9211, 9215, 9210, 9217, 9568, 9225, 9221, 9227, 9568, 9224, 9213, 9223, 9222, 9239, 9250, 9242, 9233, 9568, 9262, 9568, 9264, 9266, 9260, 9252, 9253, 9254, 9269, 9277, 9273, 9568, 9257, 9294, 9284, 9300, 9305, 9302, 9308, 9293, 9314, 9311, 9317, 9318, 9324, 9329, 9321, 9320, 9330, 9568, 9323, 9334, 9568, 9332, 9350, 9335, 9341, 9364, 9568, 9366, 9351, 9352, 9368, 9372, 9367, 9568, 9373, 9375, 9376, 9568, 9379, 9568, 9568, 9380, 9386, 9389, 9388, 9390, 9568, 9568, 9568, 9448, 9455, 9462, 9469, 9476, 9483, 9490, 102, 9497, 9504, 9511, 9518, 9525, 9532, 9539, 9546, 9553, 9560 } ; static const flex_int16_t yy_def[3372] = { 0, 3353, 1, 3354, 3354, 3355, 3355, 3356, 3356, 3357, 3357, 3358, 3358, 3359, 3359, 3360, 3360, 3353, 3361, 3353, 3353, 3353, 3353, 3362, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3363, 3353, 3353, 3353, 3363, 3364, 3353, 3353, 3353, 3364, 3365, 3353, 3353, 3353, 3353, 3365, 3366, 3353, 3353, 3353, 3366, 3367, 3353, 3368, 3353, 3367, 3367, 3369, 3353, 3353, 3353, 3353, 3369, 3370, 3353, 3353, 3353, 3370, 3361, 3361, 3353, 3371, 3362, 3371, 3362, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3363, 3363, 3364, 3364, 3365, 3365, 3353, 3366, 3366, 3367, 3367, 3368, 3368, 3367, 3369, 3369, 3353, 3370, 3370, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3353, 3361, 3353, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3367, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3367, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3367, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, 3353, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3367, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3353, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3353, 3353, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3353, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3353, 3361, 3361, 3353, 3353, 3361, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3353, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3361, 3361, 3361, 3353, 3361, 3361, 3361, 3353, 3361, 3353, 3353, 3361, 3361, 3361, 3361, 3361, 3353, 3353, 0, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353 } ; static const flex_int16_t yy_nxt[9635] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 18, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 18, 18, 18, 45, 46, 24, 25, 26, 27, 28, 29, 18, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 18, 18, 18, 45, 48, 49, 50, 48, 49, 50, 53, 54, 53, 54, 55, 119, 55, 58, 59, 60, 61, 120, 22, 58, 59, 60, 61, 86, 22, 64, 65, 66, 64, 65, 66, 87, 160, 160, 1291, 88, 85, 51, 119, 86, 51, 167, 167, 56, 120, 56, 170, 75, 76, 77, 78, 62, 22, 75, 76, 77, 78, 62, 22, 81, 82, 83, 67, 97, 86, 67, 19, 20, 21, 69, 70, 71, 19, 20, 21, 69, 70, 71, 81, 82, 83, 121, 108, 177, 177, 79, 72, 159, 409, 86, 97, 79, 72, 86, 137, 90, 84, 90, 90, 86, 90, 170, 109, 178, 73, 86, 90, 86, 121, 108, 73, 176, 87, 72, 159, 84, 88, 86, 130, 72, 112, 137, 110, 162, 86, 175, 162, 173, 113, 109, 98, 170, 188, 91, 92, 93, 111, 99, 94, 114, 170, 100, 187, 95, 101, 130, 86, 112, 86, 110, 86, 86, 96, 168, 173, 113, 86, 98, 86, 188, 166, 92, 93, 111, 99, 94, 114, 165, 100, 187, 95, 101, 85, 162, 85, 85, 162, 85, 163, 96, 102, 161, 115, 85, 103, 116, 189, 104, 181, 105, 106, 252, 117, 164, 118, 164, 164, 292, 164, 86, 107, 90, 86, 90, 90, 86, 90, 102, 86, 115, 122, 103, 116, 189, 104, 181, 105, 106, 123, 117, 180, 118, 126, 86, 124, 86, 127, 107, 125, 86, 156, 160, 160, 148, 157, 149, 86, 122, 158, 172, 128, 178, 129, 86, 150, 123, 176, 180, 86, 126, 151, 124, 179, 127, 175, 125, 86, 156, 152, 86, 148, 157, 149, 167, 167, 158, 170, 128, 153, 129, 131, 150, 154, 155, 132, 182, 86, 151, 133, 179, 328, 86, 168, 205, 134, 152, 169, 135, 169, 169, 86, 169, 86, 184, 136, 153, 86, 131, 195, 154, 155, 132, 182, 86, 174, 133, 174, 174, 166, 174, 205, 134, 86, 85, 135, 85, 85, 86, 85, 332, 184, 136, 138, 1148, 85, 195, 139, 90, 183, 90, 90, 206, 90, 185, 165, 86, 140, 141, 90, 142, 86, 193, 194, 197, 196, 163, 186, 161, 86, 138, 86, 86, 86, 139, 86, 183, 86, 86, 206, 240, 185, 198, 3353, 140, 141, 91, 142, 143, 193, 194, 144, 196, 190, 186, 199, 86, 201, 145, 191, 200, 192, 146, 147, 86, 334, 86, 240, 86, 198, 86, 207, 3353, 86, 86, 143, 208, 3353, 144, 209, 190, 215, 199, 86, 201, 145, 191, 200, 192, 146, 147, 202, 203, 211, 86, 210, 212, 86, 207, 204, 228, 86, 3353, 208, 217, 216, 209, 86, 86, 213, 214, 3353, 86, 86, 86, 225, 3353, 86, 202, 203, 211, 218, 210, 212, 226, 220, 204, 228, 86, 221, 223, 217, 216, 227, 229, 224, 213, 214, 86, 232, 230, 219, 225, 86, 253, 222, 86, 86, 218, 86, 231, 226, 220, 86, 86, 233, 221, 223, 86, 86, 227, 229, 224, 235, 86, 234, 232, 230, 219, 237, 236, 253, 222, 238, 86, 3353, 239, 231, 86, 86, 241, 245, 233, 86, 246, 86, 86, 86, 3353, 242, 235, 86, 234, 86, 247, 248, 237, 236, 243, 251, 238, 3353, 86, 239, 244, 3353, 249, 241, 245, 257, 250, 246, 86, 86, 3353, 254, 242, 259, 261, 86, 258, 247, 248, 262, 86, 243, 251, 267, 86, 86, 260, 244, 255, 249, 86, 256, 257, 250, 86, 263, 266, 86, 254, 268, 259, 261, 270, 258, 264, 86, 262, 277, 269, 272, 267, 86, 271, 260, 86, 255, 265, 86, 256, 86, 86, 3353, 263, 266, 86, 86, 268, 177, 177, 270, 3353, 264, 3353, 170, 277, 269, 272, 3353, 273, 271, 3353, 3353, 164, 265, 164, 164, 169, 164, 169, 169, 90, 169, 90, 90, 174, 90, 174, 174, 274, 174, 86, 3353, 276, 3353, 280, 273, 278, 281, 282, 283, 284, 86, 275, 279, 3353, 285, 86, 338, 3353, 3353, 86, 86, 86, 286, 290, 86, 86, 291, 172, 276, 86, 280, 86, 278, 281, 282, 283, 284, 287, 275, 279, 86, 285, 340, 288, 289, 86, 86, 293, 86, 286, 290, 294, 86, 291, 301, 303, 3353, 302, 306, 3353, 307, 304, 308, 86, 305, 314, 310, 86, 295, 86, 288, 289, 86, 86, 86, 86, 311, 86, 294, 3353, 86, 301, 303, 86, 302, 306, 86, 307, 304, 86, 309, 305, 314, 310, 86, 295, 296, 312, 86, 318, 317, 297, 313, 311, 326, 370, 298, 315, 86, 86, 316, 86, 299, 300, 319, 86, 325, 309, 3353, 86, 3353, 86, 86, 296, 312, 329, 318, 317, 297, 313, 86, 326, 370, 298, 315, 327, 86, 316, 86, 299, 300, 319, 320, 325, 330, 321, 86, 322, 337, 335, 333, 86, 329, 342, 86, 331, 339, 86, 3353, 323, 344, 324, 327, 336, 341, 3353, 3353, 3353, 86, 320, 345, 3353, 321, 343, 322, 337, 86, 333, 86, 351, 346, 86, 331, 339, 86, 86, 323, 86, 324, 347, 336, 341, 86, 86, 348, 349, 86, 345, 86, 352, 343, 86, 353, 356, 350, 354, 351, 346, 355, 86, 357, 364, 360, 86, 86, 86, 347, 86, 361, 362, 86, 348, 349, 86, 86, 367, 352, 86, 358, 353, 356, 350, 354, 359, 86, 355, 363, 357, 373, 360, 369, 86, 86, 86, 368, 361, 362, 365, 366, 372, 371, 86, 374, 375, 376, 378, 86, 86, 86, 3353, 86, 86, 86, 363, 377, 381, 379, 369, 86, 86, 86, 368, 380, 383, 365, 366, 372, 371, 3353, 86, 375, 384, 378, 386, 86, 387, 86, 86, 382, 388, 390, 377, 86, 379, 389, 3353, 391, 86, 385, 86, 392, 394, 86, 86, 170, 86, 86, 86, 384, 86, 386, 395, 387, 396, 393, 382, 388, 390, 86, 398, 397, 389, 86, 391, 3353, 385, 399, 392, 401, 403, 405, 400, 402, 86, 404, 86, 86, 86, 86, 406, 396, 393, 86, 86, 86, 86, 407, 397, 86, 408, 3353, 86, 411, 399, 412, 401, 403, 413, 400, 402, 410, 404, 86, 86, 415, 414, 406, 416, 86, 86, 419, 86, 420, 407, 421, 86, 408, 86, 86, 411, 86, 412, 417, 418, 413, 86, 422, 410, 86, 423, 86, 415, 414, 426, 416, 424, 428, 431, 3353, 420, 86, 86, 86, 427, 86, 429, 86, 432, 433, 417, 418, 86, 425, 422, 86, 435, 86, 434, 86, 86, 426, 86, 424, 436, 431, 86, 438, 437, 86, 430, 427, 86, 439, 445, 432, 433, 86, 86, 441, 425, 86, 86, 435, 440, 434, 443, 442, 86, 86, 86, 436, 446, 86, 438, 437, 86, 430, 447, 3353, 439, 445, 448, 444, 3353, 86, 441, 3353, 455, 456, 86, 440, 3353, 443, 442, 3353, 457, 86, 86, 3353, 461, 3353, 86, 462, 86, 447, 86, 464, 465, 448, 444, 449, 469, 3353, 450, 455, 456, 86, 86, 451, 452, 453, 454, 457, 86, 463, 458, 461, 459, 86, 462, 466, 86, 468, 464, 465, 467, 3353, 449, 86, 86, 450, 477, 3353, 460, 478, 451, 452, 453, 454, 86, 470, 463, 458, 471, 459, 472, 86, 475, 476, 468, 86, 479, 86, 473, 474, 507, 86, 86, 86, 480, 460, 478, 482, 86, 481, 86, 86, 470, 483, 487, 471, 484, 472, 493, 475, 476, 86, 86, 479, 86, 473, 474, 86, 86, 86, 86, 480, 485, 486, 482, 492, 481, 505, 3353, 86, 483, 3353, 488, 484, 489, 86, 86, 491, 494, 497, 86, 498, 499, 490, 86, 495, 565, 86, 506, 485, 486, 496, 492, 86, 505, 86, 504, 86, 86, 488, 86, 489, 3353, 86, 491, 494, 497, 86, 498, 499, 490, 500, 495, 565, 86, 508, 509, 524, 496, 522, 86, 519, 510, 504, 501, 545, 511, 502, 86, 503, 86, 86, 3353, 523, 512, 86, 3353, 86, 500, 527, 86, 520, 508, 509, 524, 86, 522, 525, 519, 510, 3353, 501, 86, 511, 502, 3353, 503, 86, 535, 521, 523, 512, 513, 526, 514, 86, 527, 537, 520, 536, 86, 86, 538, 539, 525, 540, 556, 515, 3353, 543, 516, 170, 517, 542, 518, 535, 521, 86, 86, 513, 526, 514, 548, 541, 86, 86, 536, 86, 86, 86, 539, 86, 540, 556, 515, 86, 543, 516, 544, 517, 542, 518, 528, 529, 546, 86, 86, 3353, 549, 548, 541, 547, 530, 558, 531, 532, 533, 550, 86, 534, 3353, 553, 555, 563, 557, 544, 554, 86, 86, 528, 529, 546, 551, 86, 86, 559, 86, 561, 547, 530, 86, 531, 532, 533, 550, 86, 534, 562, 553, 555, 552, 557, 86, 554, 86, 86, 560, 566, 594, 551, 86, 86, 559, 86, 561, 564, 569, 86, 567, 568, 3353, 570, 572, 86, 562, 571, 573, 552, 3353, 86, 580, 577, 86, 560, 566, 86, 86, 574, 575, 583, 86, 3353, 564, 569, 578, 3353, 3353, 86, 570, 572, 86, 86, 571, 573, 86, 576, 86, 580, 577, 579, 581, 582, 86, 584, 574, 575, 583, 86, 86, 3353, 585, 578, 86, 86, 595, 598, 596, 597, 586, 599, 608, 3353, 576, 86, 3353, 3353, 579, 581, 582, 587, 584, 588, 86, 86, 601, 3353, 86, 585, 86, 602, 86, 595, 598, 596, 597, 586, 600, 86, 604, 607, 603, 86, 86, 605, 3353, 86, 587, 606, 588, 589, 86, 601, 86, 86, 610, 609, 602, 590, 591, 612, 86, 592, 593, 600, 86, 604, 607, 603, 86, 611, 605, 86, 616, 86, 606, 613, 589, 86, 614, 617, 615, 610, 609, 3353, 590, 591, 86, 624, 592, 593, 86, 86, 618, 620, 86, 86, 611, 621, 86, 616, 619, 86, 613, 622, 86, 614, 617, 615, 86, 625, 623, 86, 86, 626, 624, 627, 628, 629, 86, 618, 620, 630, 3353, 86, 621, 86, 631, 619, 86, 632, 622, 86, 86, 633, 635, 634, 625, 623, 86, 86, 626, 86, 627, 628, 629, 636, 637, 86, 630, 639, 638, 86, 86, 631, 86, 86, 632, 86, 644, 645, 633, 635, 634, 643, 86, 640, 642, 641, 86, 646, 86, 86, 636, 637, 86, 86, 639, 638, 647, 648, 652, 650, 649, 655, 651, 644, 653, 86, 3353, 3353, 643, 86, 640, 642, 641, 86, 646, 657, 656, 86, 86, 86, 654, 658, 86, 86, 648, 652, 650, 649, 86, 651, 661, 653, 86, 86, 663, 660, 662, 664, 666, 86, 86, 86, 657, 656, 659, 665, 667, 654, 86, 3353, 86, 669, 86, 86, 681, 668, 670, 661, 714, 86, 86, 663, 660, 662, 664, 666, 86, 86, 86, 679, 86, 659, 665, 667, 680, 3353, 86, 86, 669, 682, 687, 681, 668, 670, 671, 684, 86, 86, 3353, 672, 86, 673, 86, 683, 3353, 3353, 679, 674, 3353, 675, 688, 680, 676, 677, 86, 691, 682, 687, 86, 678, 86, 671, 684, 685, 696, 692, 672, 686, 673, 3353, 683, 694, 86, 86, 674, 693, 675, 688, 689, 676, 677, 690, 691, 86, 695, 86, 678, 699, 86, 86, 685, 696, 697, 698, 686, 86, 86, 86, 694, 700, 86, 86, 693, 701, 702, 689, 703, 705, 690, 708, 704, 695, 706, 86, 699, 86, 86, 86, 707, 697, 698, 86, 86, 710, 709, 711, 700, 86, 715, 86, 701, 702, 86, 703, 705, 86, 708, 704, 712, 706, 86, 713, 716, 86, 720, 707, 86, 718, 722, 717, 710, 709, 711, 86, 86, 715, 86, 86, 719, 721, 86, 3353, 86, 723, 170, 712, 726, 3353, 713, 716, 86, 720, 725, 727, 718, 722, 717, 724, 729, 728, 86, 730, 86, 3353, 3353, 719, 721, 731, 86, 732, 723, 86, 3353, 86, 86, 733, 86, 734, 740, 725, 743, 735, 86, 741, 724, 86, 728, 86, 730, 744, 86, 86, 745, 736, 731, 739, 732, 748, 742, 86, 737, 746, 733, 738, 734, 86, 86, 86, 735, 747, 86, 86, 86, 749, 753, 751, 86, 752, 750, 757, 736, 86, 739, 755, 86, 742, 754, 737, 86, 86, 738, 86, 86, 756, 758, 759, 86, 762, 86, 86, 761, 753, 751, 86, 752, 86, 757, 760, 86, 763, 755, 765, 86, 754, 767, 86, 86, 764, 766, 3353, 756, 758, 759, 86, 769, 768, 86, 761, 770, 86, 86, 86, 86, 86, 760, 771, 763, 86, 765, 773, 86, 767, 772, 774, 764, 766, 86, 775, 776, 86, 86, 769, 768, 777, 780, 770, 778, 779, 3353, 781, 86, 3353, 771, 86, 782, 86, 783, 784, 785, 772, 774, 86, 86, 86, 775, 776, 787, 86, 788, 786, 777, 780, 789, 778, 779, 86, 781, 790, 86, 86, 86, 782, 86, 783, 784, 785, 791, 794, 793, 3353, 86, 796, 798, 787, 795, 3353, 786, 797, 800, 789, 86, 86, 86, 799, 790, 802, 86, 808, 792, 86, 86, 86, 86, 791, 794, 793, 86, 86, 796, 798, 86, 795, 801, 803, 797, 800, 804, 805, 806, 86, 799, 809, 86, 807, 86, 792, 818, 810, 86, 86, 814, 86, 811, 812, 86, 813, 86, 815, 86, 801, 803, 817, 86, 804, 805, 806, 86, 816, 809, 819, 807, 86, 86, 818, 810, 820, 821, 814, 824, 86, 86, 86, 813, 86, 815, 822, 825, 823, 817, 86, 827, 826, 828, 832, 816, 841, 3353, 86, 3353, 3353, 86, 86, 820, 833, 86, 824, 86, 829, 86, 86, 834, 86, 822, 835, 823, 837, 836, 827, 86, 828, 3353, 830, 831, 86, 838, 86, 847, 86, 86, 86, 833, 839, 842, 845, 829, 86, 849, 834, 846, 851, 835, 86, 837, 836, 86, 3353, 840, 86, 830, 831, 843, 838, 86, 847, 848, 86, 86, 909, 839, 842, 844, 86, 850, 849, 86, 86, 851, 852, 856, 853, 86, 854, 86, 840, 855, 86, 86, 843, 86, 857, 86, 848, 86, 858, 86, 859, 866, 844, 860, 850, 861, 3353, 864, 3353, 852, 856, 853, 863, 854, 862, 86, 855, 86, 86, 865, 86, 86, 86, 86, 867, 858, 86, 859, 868, 871, 860, 86, 861, 86, 864, 878, 869, 86, 872, 863, 870, 862, 873, 86, 86, 874, 865, 86, 86, 875, 876, 867, 86, 86, 86, 868, 871, 86, 86, 880, 877, 879, 878, 869, 884, 872, 881, 870, 86, 873, 882, 883, 874, 886, 86, 916, 875, 876, 922, 86, 86, 885, 889, 86, 888, 86, 880, 877, 879, 86, 887, 884, 86, 881, 86, 86, 86, 882, 883, 890, 886, 86, 891, 892, 895, 893, 894, 86, 885, 889, 86, 888, 898, 86, 896, 3353, 3353, 887, 897, 86, 899, 901, 900, 86, 86, 86, 890, 86, 86, 891, 892, 895, 893, 894, 86, 902, 86, 86, 86, 898, 903, 896, 904, 170, 906, 897, 905, 899, 901, 900, 910, 908, 907, 912, 914, 86, 86, 86, 911, 86, 913, 917, 902, 86, 86, 86, 915, 903, 86, 904, 924, 906, 86, 905, 86, 918, 86, 910, 908, 907, 86, 914, 86, 921, 919, 911, 923, 913, 917, 920, 86, 86, 86, 915, 925, 3353, 935, 924, 86, 86, 927, 938, 918, 86, 926, 86, 86, 86, 86, 936, 921, 919, 3353, 923, 941, 3353, 920, 3353, 3353, 86, 937, 925, 86, 935, 939, 86, 940, 927, 938, 3353, 3353, 926, 928, 942, 946, 929, 936, 943, 86, 930, 3353, 941, 931, 86, 86, 86, 944, 937, 949, 932, 933, 939, 934, 940, 945, 947, 86, 86, 948, 928, 942, 946, 929, 86, 943, 86, 930, 960, 86, 931, 86, 957, 86, 944, 959, 979, 932, 933, 958, 934, 86, 945, 947, 86, 86, 948, 950, 951, 961, 952, 86, 86, 953, 86, 960, 962, 968, 954, 957, 964, 965, 959, 86, 955, 956, 958, 3353, 967, 86, 86, 972, 963, 86, 950, 951, 961, 952, 966, 86, 953, 86, 86, 962, 968, 954, 971, 964, 965, 969, 86, 955, 956, 974, 970, 967, 973, 86, 972, 963, 975, 977, 976, 981, 3353, 966, 86, 980, 86, 978, 983, 982, 3353, 971, 985, 86, 3353, 987, 86, 86, 974, 86, 86, 973, 86, 86, 86, 975, 977, 976, 981, 86, 86, 86, 980, 984, 978, 983, 982, 986, 988, 985, 86, 86, 987, 990, 989, 991, 992, 993, 994, 996, 86, 1000, 86, 997, 86, 995, 86, 86, 998, 999, 984, 86, 1001, 1003, 986, 988, 1002, 3353, 3353, 86, 990, 989, 991, 992, 993, 1004, 86, 86, 1006, 1005, 86, 86, 995, 86, 1007, 86, 999, 1008, 86, 1009, 1011, 3353, 1010, 1002, 86, 86, 1014, 86, 1012, 86, 86, 86, 1004, 1016, 1013, 1006, 1005, 86, 86, 1017, 1018, 86, 86, 86, 86, 1019, 1009, 1011, 86, 1010, 1015, 1020, 1022, 1014, 1021, 1012, 3353, 86, 86, 86, 86, 1013, 86, 1025, 1023, 1024, 1017, 1018, 86, 1026, 86, 1027, 86, 1029, 1030, 1028, 86, 1015, 1035, 1022, 1032, 1021, 86, 86, 1033, 86, 86, 86, 1031, 1034, 1025, 1023, 1024, 1043, 86, 86, 1026, 86, 1027, 1036, 1029, 1030, 1028, 1038, 86, 1035, 86, 1032, 1044, 1037, 1039, 86, 1046, 86, 1040, 1031, 86, 86, 86, 1041, 1043, 86, 1045, 86, 1050, 1047, 1036, 1042, 86, 86, 1038, 86, 1052, 1048, 86, 86, 1037, 1039, 1049, 1046, 86, 1040, 3353, 86, 1054, 86, 1041, 1055, 1051, 1045, 86, 1050, 1047, 1053, 1042, 86, 86, 86, 1056, 1052, 1048, 1057, 1059, 1058, 1060, 1049, 86, 86, 1065, 1061, 1063, 1054, 86, 1062, 1055, 1051, 1064, 86, 3353, 1066, 1053, 86, 86, 86, 1067, 1056, 86, 3353, 1069, 1059, 1058, 1060, 1068, 86, 86, 86, 1061, 1063, 86, 86, 1062, 1070, 86, 1064, 1071, 1072, 1066, 86, 86, 86, 1073, 1067, 1074, 86, 1075, 1069, 1076, 86, 1077, 1068, 1078, 1080, 1082, 1081, 3353, 1088, 1089, 1079, 1070, 86, 1083, 1071, 1072, 86, 86, 1087, 3353, 1073, 86, 1086, 1090, 86, 3353, 1076, 86, 86, 86, 1078, 1084, 1082, 86, 86, 1088, 86, 1079, 86, 1085, 1083, 86, 1091, 1092, 86, 1087, 86, 86, 1093, 1086, 1090, 86, 1094, 3353, 1095, 1096, 1097, 86, 1084, 86, 1098, 1100, 1101, 1103, 86, 1099, 1085, 1102, 86, 1091, 1092, 3353, 1107, 86, 1105, 86, 1121, 1104, 86, 1094, 86, 86, 1096, 1097, 86, 86, 1109, 1106, 1100, 1101, 1103, 1110, 170, 86, 1102, 86, 86, 1108, 86, 1107, 86, 1105, 1111, 86, 1104, 3353, 3353, 1118, 86, 3353, 86, 3353, 1119, 1109, 1106, 1120, 3353, 1122, 1110, 86, 3353, 3353, 1123, 3353, 1108, 1124, 3353, 86, 1125, 1111, 1112, 1126, 1113, 86, 1118, 86, 1114, 86, 1115, 1119, 3353, 86, 1120, 1116, 1122, 86, 1128, 1127, 1117, 1123, 1130, 1129, 1124, 86, 86, 1125, 1131, 1112, 1126, 1113, 86, 1132, 3353, 1114, 1134, 1115, 3353, 1137, 86, 86, 1116, 1135, 1139, 1133, 1127, 1117, 86, 1130, 86, 1138, 1140, 1136, 86, 1131, 86, 86, 86, 1142, 1132, 1141, 1143, 1134, 1145, 86, 1137, 1146, 1144, 1149, 1135, 1139, 1133, 86, 86, 1147, 1150, 86, 1138, 1140, 1136, 86, 1152, 86, 1151, 3353, 1142, 1162, 1141, 1143, 86, 86, 86, 1160, 1161, 1144, 86, 1164, 3353, 86, 86, 86, 86, 1150, 1171, 1165, 3353, 1163, 86, 1152, 3353, 1151, 1153, 3353, 1162, 1167, 86, 1154, 3353, 1155, 1160, 1161, 86, 86, 1164, 1156, 1166, 86, 86, 1170, 1157, 1158, 1165, 1168, 1163, 1169, 86, 1159, 86, 1153, 86, 86, 1167, 86, 1154, 86, 1155, 1172, 1173, 1177, 1174, 1180, 1156, 1166, 1175, 1178, 1170, 1157, 1158, 86, 1168, 1176, 1169, 86, 1159, 86, 1179, 1181, 1183, 86, 86, 1182, 1184, 86, 1172, 1173, 86, 1174, 86, 86, 1185, 1175, 1178, 86, 1186, 1191, 86, 1188, 1176, 1187, 86, 86, 1189, 1179, 1181, 1183, 1190, 86, 1182, 1184, 1192, 1193, 1194, 3353, 1199, 86, 86, 86, 1195, 86, 86, 1186, 86, 1196, 1188, 86, 1187, 86, 86, 1189, 1200, 1198, 86, 1190, 86, 1197, 86, 1192, 1193, 1194, 1201, 1199, 86, 1202, 1203, 1195, 86, 1205, 86, 3353, 1196, 3353, 1204, 86, 1215, 1208, 1207, 1200, 1198, 1206, 86, 86, 1197, 86, 86, 1210, 86, 1201, 86, 1209, 1202, 1211, 1212, 1213, 1205, 1216, 86, 86, 86, 1204, 86, 1215, 1208, 1207, 1214, 1217, 1206, 3353, 1223, 1218, 1219, 1224, 1210, 86, 86, 86, 1209, 1220, 1211, 1212, 1213, 86, 86, 86, 86, 1221, 1225, 86, 86, 1226, 1222, 1214, 1217, 1227, 86, 1223, 1218, 1219, 1224, 1229, 86, 1228, 86, 1231, 1220, 1230, 1232, 1233, 86, 1234, 86, 3353, 86, 1225, 86, 86, 1226, 86, 1236, 86, 1227, 1235, 1237, 1238, 1240, 1239, 1229, 3353, 1228, 1246, 1231, 86, 1230, 86, 1233, 86, 1241, 1243, 86, 1244, 86, 86, 1242, 1245, 86, 1236, 86, 86, 1235, 1237, 1238, 1240, 1239, 86, 1247, 86, 1246, 1248, 86, 1249, 1250, 86, 1251, 1241, 1243, 86, 1244, 1252, 86, 1242, 1245, 1254, 1259, 1253, 1256, 86, 1255, 1260, 1261, 1257, 86, 1247, 86, 86, 1248, 86, 1249, 86, 1262, 86, 1258, 86, 86, 1266, 1252, 86, 86, 86, 1254, 1259, 1253, 1256, 86, 1255, 1260, 1263, 1257, 1264, 1265, 1267, 86, 1269, 1268, 1271, 3353, 1270, 3353, 1258, 86, 86, 86, 1276, 1274, 1272, 3353, 86, 1273, 86, 1277, 86, 86, 86, 1263, 3353, 1264, 1265, 1267, 86, 1275, 1268, 86, 86, 1270, 86, 86, 86, 86, 1278, 1276, 1274, 1272, 1279, 86, 1273, 1281, 1277, 1282, 1280, 1283, 1284, 1285, 1287, 3353, 86, 86, 1275, 86, 1286, 1288, 86, 1290, 1292, 86, 86, 1278, 1293, 86, 3353, 1279, 1289, 86, 1281, 1297, 1282, 1280, 86, 3353, 1285, 86, 86, 86, 86, 86, 86, 1286, 1288, 1294, 1290, 1292, 1295, 1296, 86, 1293, 1298, 86, 1299, 1289, 1300, 86, 86, 170, 1302, 1304, 1301, 1305, 1306, 1307, 1303, 86, 86, 3353, 86, 3353, 1294, 1309, 1308, 1295, 1296, 86, 1310, 1298, 1311, 1299, 86, 1300, 86, 86, 1312, 1302, 86, 1301, 1305, 1313, 1314, 1303, 1315, 86, 86, 86, 1318, 86, 1309, 1308, 86, 86, 86, 1310, 86, 1311, 1316, 1317, 86, 1320, 1319, 1312, 86, 1321, 86, 1322, 1313, 1314, 86, 1315, 1323, 1325, 1324, 1318, 86, 3353, 86, 86, 86, 1331, 1326, 1330, 86, 1316, 1317, 1333, 86, 1319, 1332, 1327, 1321, 1328, 1322, 86, 1329, 1336, 1335, 1323, 1325, 1324, 1334, 3353, 86, 1337, 86, 86, 1331, 1326, 1330, 86, 86, 86, 86, 1339, 1340, 1332, 1327, 1338, 1328, 86, 86, 1329, 1336, 1335, 1341, 1343, 86, 1334, 1342, 1344, 1337, 86, 86, 1345, 1347, 1348, 86, 1346, 3353, 3353, 1339, 1340, 86, 86, 1338, 86, 1349, 86, 1351, 86, 3353, 1341, 1343, 1352, 1353, 1342, 1344, 86, 1350, 1354, 1345, 86, 1348, 1359, 1346, 86, 1355, 1357, 86, 1356, 86, 86, 86, 1349, 1360, 1351, 86, 86, 86, 1358, 1352, 1353, 86, 86, 1361, 1350, 1354, 1364, 1365, 86, 1359, 86, 86, 1355, 1357, 1363, 1356, 1362, 1366, 1368, 86, 1360, 1367, 86, 86, 86, 1358, 1369, 86, 86, 1370, 1361, 1371, 1372, 1364, 1365, 1375, 86, 86, 86, 1374, 86, 1363, 86, 1362, 1366, 1368, 86, 1373, 1367, 86, 1376, 86, 1377, 1369, 1378, 3353, 1370, 1379, 1371, 1372, 1381, 1380, 1375, 1382, 86, 1383, 1374, 86, 86, 1386, 1384, 86, 1389, 1387, 1373, 1385, 86, 86, 1400, 1377, 86, 1378, 86, 1388, 1379, 86, 86, 1381, 1380, 1397, 1382, 3353, 1383, 1399, 1398, 1401, 1386, 86, 86, 1389, 1387, 1434, 86, 86, 86, 1400, 3353, 1403, 1402, 1404, 1388, 1390, 86, 86, 1406, 1391, 1397, 86, 1392, 1393, 3353, 1398, 1401, 1394, 1407, 86, 86, 1405, 1434, 1395, 86, 86, 1408, 1396, 1412, 1402, 1404, 86, 1390, 86, 86, 1406, 1391, 86, 1413, 1392, 1393, 1415, 3353, 86, 1394, 1407, 1416, 1409, 1405, 1410, 1395, 1411, 86, 1408, 1396, 1412, 86, 1414, 86, 86, 1417, 1418, 1419, 86, 86, 1413, 3353, 3353, 1415, 86, 1420, 86, 1421, 1416, 1409, 1428, 1410, 1429, 1411, 1427, 3353, 1430, 1431, 3353, 1414, 3353, 3353, 1417, 86, 1435, 1433, 3353, 86, 86, 86, 86, 1432, 1420, 86, 1421, 1422, 86, 1428, 86, 1429, 1423, 1427, 1424, 1436, 1425, 86, 1426, 86, 86, 1437, 1439, 1435, 1433, 86, 1438, 1440, 1441, 1443, 1432, 1442, 86, 86, 1422, 1446, 1447, 1448, 1444, 1423, 86, 1424, 1436, 1425, 86, 1426, 86, 86, 86, 1439, 86, 1445, 1449, 86, 1440, 1441, 1443, 1450, 1442, 86, 1451, 1452, 1446, 86, 1448, 1444, 1454, 1453, 86, 1457, 86, 86, 1455, 1456, 86, 86, 1458, 1459, 1445, 1449, 1460, 86, 86, 1461, 1450, 86, 86, 1451, 1452, 86, 1462, 86, 3353, 1454, 1453, 1465, 1457, 1463, 1464, 1455, 1456, 1466, 1467, 86, 1459, 1468, 86, 86, 86, 86, 1461, 1469, 1470, 86, 86, 1471, 1473, 1462, 1478, 86, 1472, 86, 1465, 1474, 1463, 1464, 86, 1475, 86, 1467, 86, 1477, 86, 1476, 86, 1480, 86, 86, 1469, 1470, 86, 1479, 1471, 86, 86, 1478, 1481, 1472, 1486, 1482, 1474, 86, 1483, 86, 1475, 1485, 1484, 1493, 1477, 1487, 1476, 86, 1480, 1488, 1496, 1490, 86, 86, 1479, 86, 86, 1489, 1491, 1481, 86, 1486, 1482, 86, 86, 1483, 1492, 86, 1485, 1484, 1493, 1494, 1487, 86, 1495, 86, 1488, 86, 1490, 86, 86, 1497, 86, 1498, 1489, 1491, 1499, 1501, 86, 1500, 1502, 86, 1503, 1492, 1508, 86, 1504, 1505, 1494, 3353, 1509, 1495, 1511, 86, 1506, 86, 86, 86, 1507, 170, 1498, 86, 86, 86, 1501, 1510, 1500, 1502, 86, 86, 3353, 1514, 1515, 1504, 1505, 1517, 86, 1512, 86, 86, 1516, 1506, 86, 1513, 86, 1507, 86, 1518, 86, 1519, 86, 1523, 1510, 1520, 1524, 86, 86, 1522, 1514, 1515, 86, 1521, 1517, 86, 1512, 1525, 86, 1516, 1526, 86, 1513, 1527, 1528, 86, 1518, 86, 1519, 1529, 1523, 86, 1520, 86, 1530, 1531, 1522, 1534, 1532, 1533, 1521, 1539, 86, 86, 1525, 1540, 1543, 1526, 1535, 86, 1527, 1536, 86, 86, 1541, 1537, 86, 86, 1538, 86, 86, 1530, 1531, 1542, 1534, 1532, 1533, 86, 1539, 86, 86, 1544, 1540, 1543, 1545, 1535, 1547, 86, 1536, 1546, 1550, 1541, 1537, 1549, 86, 1538, 1551, 86, 1548, 86, 1552, 3353, 86, 1553, 1554, 86, 1556, 1555, 1544, 86, 86, 1563, 86, 1547, 86, 1557, 86, 1550, 86, 86, 1549, 1559, 1560, 1551, 86, 1548, 86, 1552, 1558, 1561, 1553, 1554, 1562, 1556, 1555, 1564, 1565, 86, 86, 1566, 86, 1567, 1557, 86, 86, 86, 1568, 86, 1559, 1560, 86, 1571, 86, 86, 1570, 1558, 1561, 1569, 86, 1562, 1572, 1573, 1564, 1565, 1575, 86, 1566, 1574, 1567, 1579, 86, 86, 1578, 1568, 1576, 1577, 86, 1580, 1571, 86, 1581, 1570, 86, 1583, 1569, 86, 86, 1572, 1573, 1585, 86, 1575, 1582, 86, 1574, 86, 1579, 1584, 1586, 1578, 86, 1576, 1577, 1588, 86, 86, 1587, 1589, 1590, 86, 86, 1591, 86, 3353, 3353, 1592, 1585, 1593, 86, 1582, 1594, 1596, 1599, 1598, 1584, 1586, 3353, 1595, 86, 1601, 86, 1597, 1600, 1587, 86, 86, 86, 86, 1591, 86, 86, 86, 1592, 86, 86, 86, 86, 1594, 1596, 1599, 1598, 1603, 86, 1602, 1595, 86, 1601, 1604, 1597, 1600, 86, 1605, 1607, 1606, 1609, 1611, 1620, 1608, 1613, 1610, 86, 86, 86, 1612, 86, 1614, 86, 3353, 1603, 86, 1602, 1617, 1616, 86, 1604, 1615, 1618, 1623, 1605, 86, 1606, 3353, 1611, 86, 86, 1613, 86, 1619, 86, 86, 1612, 1621, 1614, 86, 86, 1625, 86, 1624, 1617, 1616, 1622, 86, 1615, 1618, 1626, 86, 1634, 1627, 1631, 86, 3353, 1628, 1629, 86, 1619, 86, 86, 1630, 1621, 86, 86, 86, 1625, 1632, 1624, 86, 1639, 1622, 1633, 86, 1635, 1638, 86, 1634, 1627, 1631, 86, 1636, 1628, 1629, 86, 1637, 1640, 1641, 1630, 86, 86, 1643, 1642, 86, 1632, 3353, 1645, 86, 86, 1633, 1646, 1635, 1638, 1644, 1647, 86, 1650, 1649, 1636, 86, 86, 1654, 1637, 86, 1641, 86, 86, 1648, 1643, 1642, 1651, 86, 1652, 1645, 1653, 86, 1655, 1646, 86, 86, 1644, 1647, 86, 1650, 1649, 86, 1656, 1659, 86, 1660, 1657, 3353, 1658, 1667, 1648, 3353, 1666, 1651, 86, 1652, 1661, 1653, 86, 1655, 1662, 3353, 86, 1664, 1665, 86, 1671, 86, 86, 1663, 1659, 86, 1660, 1657, 86, 1658, 86, 1668, 86, 86, 1670, 86, 1669, 1661, 86, 1672, 86, 1662, 86, 1674, 1664, 1665, 86, 1671, 1673, 1675, 1663, 1676, 3353, 1677, 1678, 86, 86, 3353, 1668, 1679, 1680, 1670, 1682, 1669, 86, 86, 1681, 86, 1684, 1685, 86, 86, 1686, 86, 86, 1673, 1675, 86, 86, 1683, 1677, 1678, 1688, 86, 86, 1687, 1679, 1680, 86, 1682, 1693, 86, 1689, 1681, 86, 1684, 1685, 86, 86, 1686, 1694, 1691, 1690, 1692, 1698, 86, 1683, 1695, 86, 1688, 86, 86, 1687, 86, 1696, 1697, 86, 1693, 1699, 1689, 86, 1700, 1708, 86, 1702, 1701, 86, 1694, 1691, 1690, 1692, 1698, 86, 1703, 1695, 1705, 1709, 86, 86, 1704, 1711, 1696, 1697, 1707, 86, 86, 1706, 170, 1700, 86, 86, 1702, 1701, 86, 86, 86, 1712, 1713, 86, 1710, 1703, 1714, 1705, 1709, 86, 86, 1704, 1711, 86, 1715, 1707, 86, 1716, 1706, 86, 1717, 1720, 1721, 1718, 1722, 1719, 3353, 1723, 1712, 1713, 86, 1710, 86, 1714, 86, 1724, 1725, 1726, 1727, 1728, 86, 1715, 86, 86, 1716, 86, 86, 1717, 86, 1721, 1718, 1722, 1719, 1729, 1723, 1730, 1731, 1732, 86, 1733, 86, 1735, 1724, 1725, 86, 1727, 86, 1734, 1738, 86, 86, 86, 1736, 1739, 3353, 1741, 1737, 86, 86, 1748, 1729, 86, 86, 1731, 1732, 86, 1733, 86, 1735, 86, 1740, 1743, 1750, 1749, 1734, 1738, 1742, 1744, 86, 1736, 1739, 86, 1741, 1737, 86, 86, 86, 1745, 1751, 1752, 1746, 86, 1756, 1757, 86, 86, 86, 1740, 1743, 1750, 1749, 1753, 1747, 1742, 1744, 1759, 1754, 86, 86, 1758, 1755, 86, 1760, 1763, 1745, 1751, 1752, 1746, 1761, 86, 1762, 1765, 1764, 86, 1767, 86, 1769, 86, 1753, 1747, 86, 86, 1759, 1754, 86, 86, 86, 1755, 86, 1760, 1763, 86, 1766, 1768, 86, 1761, 1770, 1772, 1765, 1764, 86, 1767, 86, 1771, 1774, 1773, 1775, 3353, 86, 86, 1780, 1778, 1776, 1777, 1779, 1783, 3353, 86, 86, 1766, 1768, 86, 86, 86, 86, 86, 86, 1785, 86, 86, 1771, 1774, 1773, 86, 86, 1781, 1782, 1780, 1778, 1776, 1777, 1779, 1783, 1784, 1786, 86, 1788, 1787, 86, 86, 86, 1789, 1791, 1790, 1785, 86, 1797, 3353, 1792, 3108, 3109, 86, 1781, 1782, 1793, 86, 86, 86, 1795, 86, 1784, 1786, 1794, 1788, 1787, 86, 1796, 1800, 1789, 86, 1790, 86, 86, 86, 86, 1792, 1798, 1799, 86, 1801, 1802, 1793, 86, 86, 1803, 1795, 1805, 1804, 1807, 1794, 86, 1806, 86, 1796, 1800, 86, 1808, 86, 3353, 86, 86, 1811, 1815, 1798, 1799, 86, 1801, 1802, 1833, 86, 1816, 1803, 86, 1805, 1804, 1807, 86, 1809, 1806, 1812, 1810, 1817, 1821, 1808, 1813, 1814, 86, 86, 1811, 1815, 1818, 86, 1819, 1824, 1820, 86, 1822, 86, 3353, 3353, 86, 86, 1825, 1834, 1809, 86, 1812, 1810, 86, 86, 86, 1813, 1814, 1828, 1823, 86, 1827, 1818, 86, 1819, 1824, 1820, 86, 1822, 86, 1826, 1829, 86, 1832, 1825, 86, 86, 1830, 86, 86, 1831, 1837, 1835, 1838, 1842, 1828, 1823, 1836, 1827, 86, 86, 86, 1839, 3353, 1840, 86, 86, 1826, 1829, 1841, 1832, 86, 1843, 86, 1830, 1846, 86, 1831, 1837, 1835, 1838, 1842, 1845, 1844, 1836, 86, 1847, 86, 1848, 1839, 1849, 86, 3353, 1850, 1854, 1855, 86, 86, 3353, 1843, 1852, 86, 1846, 1853, 86, 1856, 86, 1851, 3353, 1845, 1844, 86, 86, 1847, 1857, 1848, 86, 1849, 86, 86, 1850, 1854, 1855, 86, 1858, 1860, 1862, 1852, 1861, 1859, 1853, 86, 1856, 1864, 1851, 1863, 1865, 1866, 86, 1867, 86, 1857, 3353, 1870, 3353, 86, 1868, 1869, 1874, 1871, 1878, 1872, 1860, 1862, 1873, 1861, 86, 86, 86, 3353, 86, 3353, 1863, 1865, 86, 86, 1876, 86, 86, 1875, 86, 86, 1877, 1868, 1869, 86, 1871, 1880, 1872, 1879, 86, 1873, 86, 86, 1881, 86, 1882, 1884, 1885, 1883, 86, 1888, 86, 1876, 1890, 1886, 1875, 1887, 86, 1877, 1891, 86, 86, 1892, 1880, 86, 1879, 86, 86, 1893, 86, 1881, 1889, 1882, 1884, 1885, 1883, 86, 86, 1895, 1894, 1896, 1886, 1897, 1887, 1899, 86, 86, 86, 86, 1892, 1898, 86, 1900, 1902, 1903, 86, 1904, 86, 1889, 1901, 1906, 1905, 86, 86, 86, 1895, 1894, 1896, 1907, 86, 86, 1908, 1913, 1909, 1910, 3353, 86, 1898, 86, 1900, 1902, 86, 86, 1904, 86, 1912, 1901, 1906, 1905, 1911, 86, 86, 1915, 86, 1914, 1907, 1917, 86, 1908, 86, 1909, 1910, 86, 1916, 170, 1918, 1919, 86, 1923, 1920, 1921, 86, 1912, 1924, 1922, 86, 1911, 1927, 86, 1915, 1926, 1914, 86, 86, 86, 86, 86, 1925, 1928, 86, 1916, 1933, 1918, 1919, 1929, 1923, 1920, 1921, 86, 1930, 1931, 1922, 86, 1934, 1927, 86, 1932, 1926, 1937, 1936, 1935, 1939, 1938, 3353, 1925, 86, 86, 1956, 86, 86, 1940, 1929, 86, 86, 86, 86, 86, 1931, 1942, 86, 86, 1941, 86, 1932, 86, 1937, 1936, 1935, 1939, 1938, 86, 1943, 1944, 1947, 1945, 1946, 1950, 1940, 1948, 86, 86, 1955, 1954, 86, 1953, 1942, 1957, 86, 1941, 86, 86, 1949, 86, 86, 86, 86, 86, 1951, 1943, 1944, 1947, 1945, 1946, 1950, 1952, 1948, 86, 1958, 86, 1954, 1960, 1953, 1959, 1957, 1965, 86, 1961, 1962, 1949, 86, 86, 86, 1966, 86, 1951, 1963, 1967, 1964, 1968, 1969, 1971, 1952, 1970, 1973, 1958, 86, 86, 1960, 86, 1959, 86, 1965, 86, 1961, 1962, 1972, 1974, 1975, 1977, 86, 1976, 86, 1963, 86, 1964, 1968, 86, 1971, 86, 1970, 86, 1978, 1979, 1980, 1982, 86, 1985, 1991, 1981, 86, 86, 1983, 1972, 1974, 86, 1984, 1987, 1976, 86, 86, 86, 1989, 86, 1988, 1986, 3353, 3353, 1990, 1978, 3353, 1980, 86, 86, 86, 86, 1981, 86, 86, 1983, 86, 1999, 3353, 1984, 1987, 2006, 86, 1996, 86, 1989, 86, 1988, 1986, 1997, 86, 1990, 1992, 1993, 1994, 1998, 2000, 86, 86, 1995, 2001, 2003, 86, 86, 2005, 2002, 2004, 86, 2006, 86, 1996, 2008, 2007, 2012, 86, 2014, 1997, 2009, 86, 1992, 1993, 1994, 1998, 2000, 86, 3353, 1995, 2010, 2003, 86, 2011, 2005, 86, 2004, 86, 86, 86, 2013, 86, 2007, 86, 86, 2014, 86, 2009, 2015, 2016, 3353, 2017, 2018, 2020, 86, 86, 2019, 2010, 2025, 2021, 2011, 86, 2024, 86, 2022, 2026, 2023, 2013, 86, 2032, 2030, 2031, 86, 2028, 2029, 2015, 2016, 86, 2017, 86, 86, 2027, 86, 2019, 86, 86, 2021, 86, 86, 2024, 86, 2022, 86, 2023, 86, 86, 2032, 2030, 2031, 2034, 2028, 2029, 2033, 86, 2036, 2035, 2037, 2039, 2027, 3353, 86, 2038, 2042, 86, 2041, 2040, 2043, 3353, 3353, 2045, 3353, 2046, 86, 2044, 3353, 3353, 2034, 86, 86, 2033, 2049, 86, 2035, 2037, 2048, 2053, 86, 86, 2038, 86, 86, 2041, 2040, 86, 86, 86, 2045, 2047, 2046, 86, 2044, 2050, 2051, 86, 86, 86, 2052, 2049, 2054, 2055, 86, 2048, 2059, 3353, 2056, 2057, 86, 86, 2060, 86, 2062, 2061, 2063, 86, 2047, 2064, 86, 2065, 2050, 2051, 86, 2058, 86, 2052, 2066, 86, 2055, 86, 86, 2059, 86, 2056, 2057, 86, 2067, 2060, 2068, 86, 2061, 2063, 2069, 2070, 2064, 2071, 2065, 2074, 2075, 86, 2058, 2072, 3353, 2066, 86, 2078, 2073, 2079, 2076, 86, 86, 2081, 86, 2067, 86, 2068, 2095, 86, 86, 2069, 86, 86, 2071, 2077, 86, 2075, 2082, 86, 2072, 2080, 2083, 86, 2078, 2073, 2079, 2076, 86, 2084, 86, 2085, 2086, 2087, 2088, 86, 2090, 2091, 2092, 2089, 86, 2093, 2077, 86, 86, 2082, 2094, 2096, 2080, 2083, 86, 86, 3353, 2097, 86, 86, 86, 86, 2085, 2086, 2087, 2088, 2098, 2090, 86, 86, 2089, 2099, 2100, 2102, 2101, 2103, 2104, 86, 86, 2105, 2106, 2107, 3353, 86, 2097, 86, 86, 2108, 86, 86, 86, 2109, 2115, 2098, 2112, 2110, 86, 2111, 2099, 2113, 2102, 2101, 2103, 2104, 86, 86, 86, 2106, 2114, 170, 86, 86, 2116, 86, 2108, 2119, 86, 2118, 2109, 86, 2117, 2112, 2110, 86, 2111, 2121, 2113, 86, 2120, 2123, 2122, 3353, 2126, 3353, 86, 2114, 86, 2124, 2125, 86, 2129, 2130, 2119, 3353, 3353, 2127, 86, 2117, 86, 86, 86, 86, 2121, 86, 2128, 2120, 2123, 2122, 86, 2126, 86, 86, 86, 2132, 2124, 2125, 2131, 2129, 86, 86, 2133, 2134, 2127, 2135, 2138, 2136, 2137, 2141, 2139, 2142, 2143, 2128, 86, 86, 86, 86, 86, 2140, 2144, 86, 2132, 3353, 86, 2131, 86, 86, 2146, 2133, 2134, 86, 86, 2138, 2136, 2137, 2141, 2139, 86, 2143, 2145, 86, 86, 86, 3353, 2147, 2140, 2144, 2149, 86, 2150, 2151, 3353, 2152, 3353, 2146, 2148, 86, 86, 2154, 2155, 2158, 2156, 2153, 3353, 2160, 86, 2145, 86, 2164, 2159, 86, 2147, 2162, 86, 2149, 86, 2150, 2151, 86, 2152, 86, 2157, 2148, 86, 86, 2154, 2155, 86, 2156, 2153, 2161, 2160, 2163, 86, 2165, 86, 2159, 2166, 2168, 2162, 86, 86, 2167, 2169, 86, 86, 2170, 2172, 2157, 2171, 2173, 86, 2174, 3353, 2178, 2176, 3353, 2161, 2175, 2163, 86, 2165, 86, 86, 2166, 86, 3353, 86, 2179, 2167, 2169, 86, 2177, 86, 2172, 86, 2171, 2173, 86, 86, 86, 2178, 2176, 2180, 86, 2175, 86, 2181, 2182, 86, 2184, 2189, 2183, 2185, 86, 2179, 2186, 2190, 86, 2177, 2187, 86, 86, 86, 86, 86, 2192, 2191, 86, 3353, 2180, 3353, 2195, 2188, 2181, 2182, 2193, 2184, 2189, 2183, 2185, 86, 86, 2186, 2190, 86, 2196, 2187, 2194, 2198, 2197, 2203, 2200, 86, 2191, 86, 86, 86, 2199, 2195, 2188, 86, 2201, 2193, 2205, 2204, 2202, 2211, 86, 86, 2207, 86, 2206, 2196, 86, 2194, 2198, 2197, 2203, 2200, 2208, 2209, 86, 86, 86, 2199, 86, 86, 86, 2201, 2210, 2205, 2204, 2202, 86, 86, 2213, 2207, 2215, 2206, 2212, 86, 2219, 86, 2214, 3353, 86, 2208, 2209, 2218, 2216, 2220, 2217, 2228, 2221, 2222, 86, 2210, 86, 2223, 86, 86, 2229, 2213, 2224, 2215, 2225, 2212, 86, 86, 86, 2214, 86, 86, 86, 2226, 2218, 2216, 2220, 2217, 86, 2221, 2222, 86, 2227, 86, 2230, 2231, 86, 2229, 2232, 86, 2234, 2225, 86, 3353, 2233, 86, 86, 2235, 2238, 2236, 2226, 2240, 3353, 2241, 2239, 2242, 86, 2237, 3353, 2227, 3353, 2230, 2231, 2243, 3353, 86, 86, 2234, 86, 86, 86, 2233, 2247, 86, 2235, 86, 2236, 86, 2240, 86, 2241, 2239, 2242, 2244, 2237, 86, 2245, 2248, 2251, 2246, 2243, 2249, 86, 86, 2252, 3353, 2250, 86, 3353, 2247, 2255, 3353, 2253, 86, 86, 2254, 2256, 2260, 3353, 3353, 2244, 2257, 86, 2245, 2248, 2251, 2246, 86, 2259, 2258, 86, 2252, 86, 86, 2263, 86, 86, 2255, 86, 2253, 2261, 2262, 2254, 2256, 86, 86, 86, 2264, 2257, 86, 86, 2265, 2268, 2269, 2266, 2259, 2258, 2267, 2271, 86, 86, 2263, 2274, 86, 2270, 2280, 2275, 2261, 2262, 86, 86, 3353, 86, 3353, 2264, 86, 86, 2272, 2265, 2268, 2269, 2266, 2276, 86, 2267, 2271, 86, 2277, 2279, 2274, 2273, 2270, 86, 2275, 86, 2278, 86, 86, 86, 2282, 2281, 2284, 2283, 2285, 2272, 2286, 86, 2287, 2288, 2276, 86, 2290, 170, 2289, 2277, 2279, 2291, 2273, 86, 86, 2292, 2304, 2278, 2293, 86, 86, 86, 2281, 2284, 2283, 2285, 2294, 2286, 2295, 2287, 2309, 3353, 2296, 86, 2299, 86, 2300, 86, 86, 86, 2301, 2302, 2292, 86, 2306, 2293, 2297, 2305, 86, 2307, 2308, 2303, 86, 2294, 3353, 86, 86, 2298, 86, 2296, 86, 2299, 86, 86, 2310, 2312, 86, 2301, 2302, 86, 86, 2306, 86, 2297, 2305, 2311, 86, 2308, 2303, 2313, 3353, 2314, 86, 86, 2298, 2315, 86, 86, 86, 2316, 3353, 2310, 2312, 86, 2319, 2318, 2322, 2317, 2321, 2320, 2324, 2326, 2311, 86, 3353, 86, 2313, 86, 2314, 86, 86, 2325, 2315, 86, 2323, 2327, 2316, 86, 86, 86, 2330, 2319, 2318, 2322, 2317, 2321, 2320, 86, 2326, 2328, 86, 2329, 2332, 2335, 86, 86, 2331, 86, 2325, 2333, 86, 2323, 2327, 2334, 86, 2336, 2339, 2330, 2340, 2337, 86, 86, 86, 86, 86, 2345, 2328, 86, 2329, 2332, 86, 2338, 2342, 2331, 86, 2343, 2333, 86, 86, 86, 2334, 2341, 2336, 2339, 2347, 2340, 2337, 2344, 2348, 86, 86, 2346, 2345, 86, 2349, 2350, 3353, 86, 2338, 2342, 2352, 2351, 2343, 2353, 2357, 86, 2356, 2354, 2341, 86, 2358, 2347, 2355, 2359, 2344, 2348, 2362, 86, 2346, 86, 86, 2349, 86, 86, 86, 2365, 86, 2352, 2351, 2360, 2353, 86, 86, 2356, 2354, 86, 2361, 2358, 2366, 2355, 86, 86, 86, 2362, 2363, 2367, 2368, 2364, 2369, 2371, 86, 2370, 86, 2372, 2373, 86, 2360, 2375, 86, 2377, 2379, 2374, 86, 2361, 86, 86, 2380, 86, 86, 86, 2376, 2363, 2367, 2368, 2364, 2369, 2371, 2378, 2370, 86, 86, 86, 86, 2381, 86, 2382, 86, 2379, 2374, 86, 2383, 2385, 2384, 86, 2386, 2387, 2389, 2376, 86, 86, 2393, 2388, 2390, 2391, 2378, 86, 2395, 2392, 86, 86, 86, 86, 2382, 3353, 2398, 2394, 86, 2383, 2385, 2384, 3353, 2386, 86, 86, 86, 2397, 86, 2393, 2388, 2390, 2391, 86, 2396, 86, 2392, 2399, 2400, 86, 2401, 86, 86, 2398, 2394, 2402, 86, 2403, 2404, 86, 2405, 86, 86, 2406, 2397, 2407, 2408, 2409, 2410, 2411, 86, 2396, 3353, 86, 2399, 2400, 2414, 86, 2424, 86, 86, 2413, 2402, 86, 2403, 2404, 2418, 2405, 86, 86, 86, 2412, 2407, 2408, 2409, 2410, 86, 2415, 86, 2419, 2416, 86, 3353, 2414, 2417, 86, 86, 2420, 2413, 86, 86, 2426, 86, 2418, 2425, 2432, 86, 86, 2412, 2436, 2421, 2427, 2429, 2428, 2415, 86, 2419, 2416, 2435, 86, 2431, 2417, 86, 86, 2420, 2422, 86, 2423, 2426, 2430, 86, 2425, 2432, 86, 86, 86, 2433, 2421, 2427, 2429, 2428, 86, 86, 2434, 2437, 2435, 2438, 2431, 3353, 2441, 86, 86, 2422, 2439, 2423, 2440, 2430, 2443, 86, 2442, 2449, 2444, 3353, 2433, 3353, 86, 2450, 2445, 2451, 2446, 2434, 2437, 2447, 86, 2455, 86, 2441, 86, 86, 86, 2439, 86, 2440, 2453, 2443, 86, 2442, 86, 2444, 2448, 86, 86, 86, 2452, 2445, 2451, 2446, 2454, 86, 2447, 86, 86, 86, 2456, 2458, 2459, 86, 2460, 2461, 2463, 2453, 2457, 86, 2466, 2462, 2464, 2448, 3353, 3353, 86, 2452, 2465, 2467, 86, 2454, 86, 170, 86, 86, 86, 2456, 2458, 2459, 86, 2460, 2461, 86, 2469, 2457, 86, 2466, 2462, 2464, 2468, 2470, 2471, 2472, 2473, 2465, 2467, 2474, 2476, 86, 86, 2475, 86, 2479, 2478, 2477, 2480, 2482, 3353, 86, 2483, 2469, 2481, 2489, 86, 86, 2484, 2468, 2470, 2471, 2472, 2473, 3353, 86, 86, 86, 86, 86, 2475, 86, 86, 2478, 2477, 2485, 86, 86, 2486, 2483, 86, 2481, 2488, 2490, 86, 2484, 2487, 86, 3353, 2491, 86, 86, 2492, 2493, 86, 2494, 86, 3353, 2500, 2495, 2496, 3353, 2485, 3353, 3353, 2486, 2497, 2498, 86, 2488, 2490, 86, 2499, 2487, 86, 86, 2491, 86, 86, 2492, 2493, 86, 86, 2501, 86, 86, 2495, 2496, 2505, 2502, 2506, 2503, 2508, 2497, 2498, 86, 2504, 86, 86, 2499, 2507, 86, 2509, 86, 2510, 3353, 2519, 86, 3353, 2529, 2501, 86, 2511, 86, 86, 2505, 2502, 2506, 2503, 2508, 2512, 86, 2513, 2504, 2514, 86, 2515, 2507, 86, 2516, 86, 2510, 86, 2518, 86, 2520, 2521, 2517, 86, 2511, 2522, 86, 2524, 3353, 86, 2531, 86, 2512, 86, 2513, 2525, 2514, 2523, 2515, 86, 86, 2516, 2527, 86, 2528, 2518, 86, 2520, 2521, 2517, 86, 2530, 2522, 86, 2524, 2526, 86, 86, 2532, 86, 2533, 2534, 2525, 2536, 2523, 2541, 86, 86, 86, 2527, 86, 2528, 2537, 2535, 86, 2539, 86, 2542, 2530, 2538, 86, 2540, 2526, 2543, 2544, 2532, 86, 86, 2534, 2552, 2536, 2547, 86, 2546, 86, 2549, 2545, 86, 86, 2537, 2535, 2548, 2539, 86, 86, 2554, 2538, 86, 2540, 86, 86, 2544, 2550, 86, 2551, 86, 86, 2553, 2547, 86, 2546, 2555, 2549, 2545, 2556, 2557, 2558, 86, 2548, 86, 86, 2561, 2559, 2560, 2562, 86, 86, 86, 3353, 2550, 86, 2551, 86, 2563, 2553, 2564, 2565, 2566, 2555, 2568, 86, 2556, 86, 2558, 86, 2567, 2570, 86, 2561, 2559, 2560, 86, 86, 2571, 86, 86, 2569, 2574, 2572, 86, 2563, 86, 2564, 2565, 2566, 86, 2568, 2573, 2575, 86, 86, 2576, 2567, 2570, 86, 86, 2577, 2578, 2579, 86, 2571, 2580, 3353, 2569, 2574, 2572, 2582, 2581, 3353, 2583, 86, 2584, 2585, 86, 2573, 86, 2588, 2590, 86, 2591, 2587, 3353, 3353, 86, 86, 2579, 86, 86, 2580, 86, 2586, 86, 86, 2582, 2581, 86, 2583, 86, 2584, 2585, 2589, 2593, 2592, 86, 86, 2594, 86, 2587, 86, 2595, 2600, 2597, 2596, 2598, 2599, 3353, 86, 2586, 86, 86, 86, 86, 2602, 86, 86, 86, 2601, 2589, 2593, 2592, 2608, 2604, 2594, 86, 2606, 2603, 2595, 86, 2597, 2596, 2598, 2599, 86, 2605, 86, 86, 86, 86, 2607, 2602, 2609, 2612, 2610, 2601, 2611, 2614, 86, 2608, 2604, 86, 86, 2606, 2603, 170, 86, 2615, 86, 2613, 86, 2617, 2605, 2616, 86, 2618, 2619, 2607, 2620, 2609, 2612, 2610, 2621, 2611, 2614, 2622, 86, 2623, 2625, 2627, 2624, 86, 3353, 86, 2615, 3353, 2613, 86, 2617, 86, 2616, 86, 2618, 86, 86, 86, 2632, 2634, 86, 2621, 2626, 86, 2622, 86, 2623, 2625, 2627, 2624, 86, 2628, 2629, 2631, 2630, 2633, 86, 2638, 86, 86, 86, 86, 86, 2635, 86, 2632, 2634, 2636, 2637, 2626, 86, 2639, 2640, 2643, 2642, 2644, 86, 86, 2628, 2629, 2631, 2630, 2633, 86, 2638, 86, 2641, 2645, 2646, 2648, 2635, 86, 86, 86, 2636, 2637, 2647, 86, 86, 2640, 86, 2642, 2644, 2650, 2654, 86, 2649, 2655, 2651, 86, 2652, 2653, 86, 2641, 86, 2646, 2648, 86, 86, 86, 2656, 86, 2658, 2647, 2659, 2660, 2661, 86, 2663, 2670, 2650, 86, 2657, 2649, 86, 2651, 2662, 2652, 2653, 2666, 86, 86, 2664, 86, 2665, 86, 2667, 2656, 2669, 2658, 86, 86, 86, 86, 86, 2663, 2670, 86, 86, 2657, 2668, 86, 2671, 2662, 2673, 2672, 2666, 86, 2674, 2664, 86, 2665, 2676, 2667, 2678, 2669, 86, 3353, 2675, 2677, 86, 86, 2679, 3353, 2684, 3353, 2680, 2668, 2683, 86, 86, 86, 2672, 86, 86, 2674, 86, 2687, 2686, 2676, 2681, 2678, 2685, 2682, 86, 2675, 2677, 86, 86, 2679, 86, 86, 86, 2680, 86, 2683, 2688, 2690, 2692, 2689, 2693, 2691, 2694, 2695, 86, 2686, 2698, 2681, 3353, 2685, 2682, 86, 86, 86, 2701, 86, 86, 2700, 2702, 2699, 86, 86, 2704, 2688, 2690, 2692, 2689, 86, 2691, 2694, 2695, 2696, 2697, 86, 86, 86, 2706, 86, 86, 86, 2703, 2701, 2705, 2710, 2700, 86, 2699, 2708, 86, 86, 2707, 3353, 2711, 2709, 86, 2713, 3353, 2716, 2696, 2697, 86, 86, 86, 2706, 86, 2717, 2712, 2703, 2718, 2705, 86, 86, 2714, 2715, 2708, 86, 2719, 2707, 86, 2711, 2709, 2720, 86, 86, 2716, 2721, 86, 86, 86, 2722, 2725, 2723, 2717, 2712, 2726, 86, 2727, 2724, 2729, 2714, 2715, 2728, 86, 2719, 86, 2730, 2733, 86, 86, 86, 86, 86, 2721, 2731, 86, 2734, 2722, 2725, 2723, 86, 86, 2726, 2732, 2727, 2724, 2729, 2735, 86, 2728, 2737, 2736, 2743, 2730, 86, 86, 86, 2738, 2739, 2740, 2741, 2731, 2742, 86, 86, 2745, 86, 86, 2744, 2746, 2732, 86, 86, 2748, 170, 2749, 2750, 2737, 2736, 2743, 2747, 2751, 86, 2752, 2738, 2739, 2755, 2741, 86, 2742, 86, 86, 86, 2753, 86, 2744, 86, 3353, 2754, 86, 86, 2756, 2749, 2758, 2757, 86, 2761, 2747, 86, 2762, 2752, 86, 86, 2760, 2763, 86, 2764, 2759, 86, 3353, 2753, 86, 2765, 2767, 86, 2754, 86, 2766, 2756, 86, 2758, 2757, 86, 2761, 2768, 2770, 2769, 86, 86, 2772, 2760, 86, 2771, 2764, 2759, 86, 86, 86, 86, 2765, 2767, 86, 2774, 2773, 2766, 2775, 2777, 86, 86, 2776, 2779, 2768, 2770, 2769, 86, 3353, 2772, 86, 2778, 2771, 86, 2782, 2780, 86, 86, 2784, 2781, 86, 86, 2774, 2773, 2783, 2775, 2777, 86, 86, 2776, 2785, 2786, 86, 2789, 2787, 86, 86, 2788, 2778, 86, 2790, 2782, 2780, 2791, 2794, 86, 2781, 2792, 86, 86, 86, 2783, 86, 2793, 86, 86, 2796, 2785, 2786, 2797, 86, 2787, 2798, 2795, 2788, 86, 2799, 2790, 2800, 2804, 2791, 86, 2803, 3353, 2792, 2801, 86, 2806, 2802, 2805, 2793, 3353, 2809, 2810, 2811, 2807, 86, 86, 86, 2812, 2795, 86, 86, 86, 86, 2800, 86, 86, 86, 2803, 86, 86, 2801, 86, 2806, 2802, 2805, 2808, 86, 2809, 2810, 86, 2807, 2813, 2814, 2816, 86, 2815, 2817, 86, 2819, 2818, 2820, 2822, 2823, 86, 2824, 2821, 2825, 2826, 3353, 86, 2828, 2827, 2808, 86, 2831, 86, 86, 86, 86, 2814, 86, 86, 2815, 2817, 86, 2819, 2818, 2829, 2822, 2823, 86, 2824, 86, 86, 86, 86, 86, 2828, 2827, 2830, 2833, 86, 2832, 2834, 2835, 2836, 86, 2837, 2838, 2839, 2840, 2848, 2842, 2841, 2829, 86, 86, 2843, 2844, 86, 3353, 86, 86, 2849, 2850, 86, 2830, 86, 86, 2832, 2834, 86, 2836, 2847, 2837, 2838, 86, 86, 2851, 2845, 2841, 86, 2846, 86, 86, 2844, 86, 86, 2852, 86, 2849, 2850, 2853, 2854, 86, 2855, 3353, 86, 2857, 2856, 2847, 2862, 2858, 2859, 2864, 86, 2845, 2861, 86, 2846, 86, 86, 86, 2860, 2863, 2852, 86, 86, 3353, 2853, 2854, 3353, 2855, 86, 86, 2857, 2856, 86, 2862, 2858, 2859, 86, 2865, 3353, 2861, 86, 2866, 2868, 2869, 2870, 2860, 2863, 2871, 2873, 2867, 86, 86, 2872, 2874, 2875, 86, 2876, 3353, 2877, 3353, 2878, 3353, 86, 86, 2865, 86, 2879, 2881, 2866, 2868, 2869, 2870, 2880, 2882, 2885, 2883, 2867, 3353, 86, 86, 86, 2875, 86, 86, 86, 2877, 86, 2878, 2884, 86, 2887, 2888, 86, 2879, 2881, 86, 86, 2886, 86, 2880, 2882, 2885, 2883, 2889, 2890, 86, 2891, 2892, 2893, 86, 86, 86, 86, 2894, 2895, 2884, 2896, 2887, 2888, 2897, 2898, 2899, 86, 2904, 2886, 3353, 2900, 2901, 3353, 2903, 2889, 2890, 86, 86, 86, 2893, 86, 2902, 86, 2905, 2894, 86, 86, 2896, 86, 86, 86, 2898, 86, 2906, 86, 2907, 2908, 2900, 2901, 86, 2903, 2909, 2910, 86, 2912, 2916, 86, 2911, 2902, 2913, 2905, 86, 86, 86, 2914, 2917, 2915, 2918, 86, 2919, 2906, 86, 2907, 2908, 2920, 2921, 2927, 86, 2909, 2922, 86, 2912, 86, 86, 86, 2923, 2913, 86, 86, 2925, 2937, 2914, 86, 2915, 2918, 2928, 2919, 86, 2930, 2931, 86, 2920, 86, 2924, 2926, 86, 2922, 86, 86, 2929, 86, 86, 2923, 2932, 2933, 86, 2925, 86, 3353, 2938, 86, 86, 2928, 2934, 2939, 2930, 2931, 2943, 2941, 2940, 2924, 2926, 86, 2944, 2935, 86, 2929, 2936, 3353, 86, 2932, 2933, 2947, 3353, 2942, 86, 86, 86, 2945, 86, 2934, 86, 86, 2948, 2943, 2941, 2940, 2946, 2949, 2951, 86, 2935, 86, 2953, 2936, 86, 2950, 2952, 3353, 86, 86, 2942, 86, 86, 2955, 2945, 86, 2956, 3353, 86, 2948, 86, 2959, 2957, 2946, 2949, 2951, 2954, 2960, 86, 2958, 2961, 2964, 2950, 2952, 86, 86, 2967, 2990, 2962, 86, 86, 2965, 86, 2956, 86, 2963, 2966, 86, 2959, 2957, 86, 86, 86, 2954, 2960, 86, 2958, 2961, 86, 86, 86, 2968, 2970, 2967, 2969, 2962, 2971, 3353, 2965, 86, 86, 2973, 2963, 2966, 2972, 86, 2974, 2975, 2977, 86, 2976, 86, 2978, 2979, 2980, 86, 86, 2982, 2968, 2970, 86, 2969, 3353, 2971, 86, 2986, 86, 86, 2973, 2987, 2981, 2972, 2983, 2974, 2975, 86, 86, 2976, 2984, 2978, 86, 86, 2985, 86, 86, 2989, 2991, 86, 2988, 86, 86, 2993, 2986, 86, 2992, 86, 86, 2981, 2994, 2983, 2995, 2996, 86, 86, 2998, 2984, 3001, 2997, 86, 2985, 2999, 86, 2989, 2991, 86, 2988, 3002, 86, 2993, 3000, 3004, 2992, 3003, 3007, 86, 2994, 3006, 2995, 86, 86, 3009, 3008, 86, 86, 2997, 3353, 86, 2999, 86, 3005, 3010, 86, 86, 86, 3011, 3012, 3000, 86, 86, 3003, 3007, 3013, 86, 3006, 3015, 3014, 3017, 3018, 3008, 86, 3016, 3019, 86, 86, 3021, 3353, 3005, 3010, 3020, 3027, 3024, 3011, 3012, 3353, 3353, 86, 3022, 3023, 86, 86, 86, 3015, 3014, 3017, 3025, 86, 3026, 3016, 86, 86, 3028, 3029, 86, 3030, 86, 3020, 86, 86, 3034, 86, 86, 86, 3035, 3022, 3023, 3032, 86, 3031, 3033, 3039, 86, 3025, 86, 3026, 86, 3036, 3037, 3028, 3029, 3038, 86, 3040, 86, 86, 3044, 3034, 3042, 86, 3041, 86, 3043, 3045, 3032, 3046, 3031, 3033, 86, 86, 3049, 86, 3047, 3050, 3036, 3037, 3048, 86, 3038, 3051, 86, 3056, 86, 86, 86, 3042, 86, 3041, 3052, 3043, 86, 3057, 86, 3053, 3065, 86, 86, 3063, 86, 3047, 3050, 3060, 86, 3048, 3054, 3055, 86, 86, 3056, 86, 86, 3058, 86, 3059, 86, 3052, 3061, 3062, 86, 3064, 3053, 86, 3066, 86, 86, 3067, 86, 3069, 3060, 86, 3070, 3054, 3055, 86, 3068, 86, 3071, 3072, 3058, 3073, 3059, 3076, 3353, 3061, 3062, 3074, 86, 3075, 3077, 3066, 86, 3080, 3067, 3353, 86, 3078, 86, 86, 86, 3353, 86, 3068, 86, 3071, 3072, 3081, 86, 3082, 86, 3079, 86, 86, 3074, 86, 3075, 3077, 86, 3084, 3080, 3083, 86, 3091, 3078, 3085, 3086, 86, 3087, 86, 86, 3088, 86, 86, 3081, 3092, 3082, 86, 3079, 3093, 86, 3095, 86, 3096, 3089, 3090, 3084, 3100, 3083, 3094, 3091, 3098, 3085, 3086, 86, 3087, 86, 86, 3088, 3101, 3097, 86, 3092, 3099, 3353, 86, 3093, 86, 3102, 3103, 3096, 3089, 3090, 86, 86, 86, 3094, 86, 3098, 3104, 3105, 3106, 3107, 3110, 3111, 3353, 86, 3097, 86, 3115, 3099, 86, 3112, 3113, 3353, 3102, 86, 3114, 3117, 3116, 3353, 86, 3119, 3120, 3118, 3123, 3104, 3105, 86, 86, 86, 86, 86, 86, 3122, 86, 3115, 86, 3125, 3126, 86, 86, 3127, 3132, 3114, 86, 3116, 3121, 3129, 3119, 3120, 3118, 86, 3124, 86, 86, 86, 86, 86, 3128, 86, 3122, 86, 3130, 3133, 3125, 3126, 3131, 3353, 3127, 86, 86, 3134, 3135, 3121, 3129, 3140, 3142, 3138, 3136, 3124, 86, 3137, 3139, 86, 3141, 3128, 86, 3147, 86, 3130, 86, 3143, 86, 3131, 86, 3144, 86, 86, 3134, 3135, 3148, 3145, 3146, 3142, 3149, 3136, 3150, 86, 3137, 86, 86, 3141, 3151, 3153, 86, 3152, 3154, 86, 3143, 3155, 3156, 3157, 3144, 86, 3158, 86, 3159, 86, 3145, 3146, 3160, 3149, 86, 86, 3161, 86, 3162, 3163, 86, 86, 3153, 3164, 3152, 86, 3165, 86, 86, 3156, 86, 3166, 3167, 86, 3168, 86, 3169, 3170, 3172, 86, 3171, 3174, 3173, 86, 86, 86, 86, 3175, 86, 86, 86, 86, 86, 3165, 86, 86, 3176, 3178, 3166, 86, 3177, 3168, 86, 3169, 3170, 86, 3179, 3171, 3174, 3173, 3180, 3183, 86, 3182, 3175, 86, 3181, 86, 3184, 3185, 86, 3188, 86, 3176, 86, 3187, 3189, 3177, 3186, 86, 3353, 3192, 3353, 3179, 86, 86, 3193, 3180, 3183, 86, 3182, 86, 86, 3181, 3191, 3184, 3190, 86, 3188, 86, 3194, 86, 3187, 3189, 3196, 3186, 3197, 86, 3192, 86, 3195, 86, 86, 3193, 3198, 86, 3199, 3200, 3201, 3204, 3202, 3191, 3203, 3190, 86, 3205, 86, 3194, 86, 3209, 86, 3196, 86, 3197, 3207, 3206, 3353, 3195, 86, 3208, 86, 3198, 86, 86, 86, 86, 3204, 3202, 86, 3203, 3210, 86, 3205, 3211, 3213, 86, 3209, 3212, 3220, 3214, 3215, 3207, 3206, 3216, 3218, 86, 3208, 86, 86, 86, 3217, 3219, 86, 86, 86, 86, 86, 3210, 3221, 3223, 3211, 3213, 3222, 86, 3212, 3220, 3214, 3215, 86, 86, 3216, 3218, 3224, 3226, 3227, 3225, 3228, 3217, 3219, 3229, 86, 86, 86, 86, 3231, 3221, 3223, 86, 3232, 3222, 3230, 3233, 3234, 3353, 3242, 86, 3235, 3237, 3236, 86, 3226, 3227, 3225, 3228, 86, 86, 86, 3238, 86, 3239, 3240, 86, 86, 3245, 86, 3232, 3241, 3230, 86, 86, 3243, 86, 3246, 3235, 3237, 3236, 86, 3244, 86, 86, 3248, 86, 3247, 86, 3238, 86, 3239, 3240, 3249, 86, 3245, 3250, 86, 3241, 3251, 3252, 3253, 3243, 3255, 86, 3256, 3254, 86, 86, 3244, 3257, 3258, 86, 86, 3247, 86, 3259, 3260, 3264, 86, 86, 3353, 3353, 3250, 3265, 3262, 3251, 86, 3253, 86, 86, 86, 3256, 3254, 3261, 3263, 3266, 3257, 3258, 86, 86, 3269, 3270, 86, 3267, 3264, 3268, 86, 86, 86, 86, 86, 3262, 86, 86, 3272, 3274, 3271, 3273, 3276, 3275, 3261, 3263, 86, 86, 86, 86, 86, 3269, 3270, 86, 3267, 3277, 3268, 86, 3278, 3279, 86, 3283, 3284, 3281, 3280, 3272, 3274, 3271, 3273, 3276, 3275, 86, 86, 3282, 3285, 3286, 3287, 86, 3353, 3291, 86, 86, 3277, 3288, 86, 3278, 86, 3289, 86, 3284, 3281, 3280, 3292, 3293, 3294, 3295, 3290, 3297, 86, 3296, 3282, 86, 3286, 3287, 86, 86, 86, 86, 3298, 86, 3288, 86, 3300, 3302, 3289, 86, 86, 86, 86, 86, 3293, 86, 3295, 3290, 3297, 3299, 3296, 86, 3301, 3353, 3303, 3304, 3307, 86, 3310, 3298, 86, 3311, 3308, 3309, 3302, 3353, 3305, 3353, 86, 3306, 86, 86, 86, 3312, 3314, 86, 3299, 3313, 86, 3301, 86, 3303, 86, 3307, 86, 3310, 3315, 86, 3311, 3308, 3309, 86, 3317, 3305, 3316, 86, 3306, 3318, 3319, 3353, 3312, 3314, 86, 3321, 3313, 3322, 3320, 3323, 3353, 3325, 3324, 86, 86, 3315, 3331, 3353, 3329, 3353, 86, 3317, 86, 3316, 3326, 86, 3318, 3319, 86, 3327, 3333, 86, 3321, 3328, 86, 3320, 3323, 86, 86, 3324, 86, 86, 3330, 86, 86, 3329, 3332, 3335, 3334, 86, 86, 3326, 86, 3336, 86, 86, 3327, 3333, 3337, 3338, 3328, 86, 3341, 3339, 3340, 3342, 3344, 3343, 3345, 3330, 86, 86, 86, 3332, 3335, 3334, 3346, 3347, 3348, 3353, 3336, 3351, 3353, 3352, 86, 3337, 86, 86, 86, 3341, 3339, 3340, 86, 86, 3343, 86, 86, 3353, 3349, 86, 86, 3350, 3353, 3346, 3347, 3348, 86, 3353, 86, 86, 86, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3349, 3353, 3353, 3350, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, 74, 74, 74, 74, 74, 80, 80, 80, 80, 80, 80, 80, 89, 89, 3353, 89, 89, 89, 89, 160, 160, 3353, 3353, 3353, 160, 160, 162, 162, 3353, 3353, 162, 3353, 162, 164, 3353, 3353, 3353, 3353, 3353, 164, 167, 167, 3353, 3353, 3353, 167, 167, 169, 3353, 3353, 3353, 3353, 3353, 169, 171, 171, 3353, 171, 171, 171, 171, 174, 3353, 3353, 3353, 3353, 3353, 174, 177, 177, 3353, 3353, 3353, 177, 177, 90, 90, 3353, 90, 90, 90, 90, 17, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353 } ; static const flex_int16_t yy_chk[9635] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 5, 32, 6, 7, 7, 7, 7, 33, 7, 8, 8, 8, 8, 32, 8, 9, 9, 9, 10, 10, 10, 19, 51, 51, 1090, 19, 3361, 3, 32, 33, 4, 67, 67, 5, 33, 6, 2735, 13, 13, 13, 13, 7, 13, 14, 14, 14, 14, 8, 14, 15, 15, 15, 9, 25, 1090, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 16, 16, 16, 34, 28, 84, 84, 13, 11, 45, 293, 25, 25, 14, 12, 34, 39, 23, 15, 23, 23, 45, 23, 1099, 28, 177, 11, 28, 23, 39, 34, 28, 12, 176, 87, 11, 45, 16, 87, 293, 37, 12, 30, 39, 29, 56, 37, 174, 56, 72, 30, 28, 26, 169, 100, 23, 24, 24, 29, 26, 24, 30, 72, 26, 99, 24, 26, 37, 30, 30, 29, 29, 100, 99, 24, 167, 72, 30, 26, 26, 24, 100, 166, 24, 24, 29, 26, 24, 30, 164, 26, 99, 24, 26, 46, 163, 46, 46, 163, 46, 162, 24, 27, 160, 31, 46, 27, 31, 101, 27, 94, 27, 27, 145, 31, 62, 31, 62, 62, 195, 62, 101, 27, 70, 27, 70, 70, 31, 70, 27, 94, 31, 35, 27, 31, 101, 27, 94, 27, 27, 35, 31, 93, 31, 36, 145, 35, 85, 36, 27, 35, 195, 44, 161, 161, 42, 44, 42, 35, 35, 44, 70, 36, 80, 36, 93, 42, 35, 75, 93, 36, 36, 42, 35, 92, 36, 74, 35, 44, 44, 43, 42, 42, 44, 42, 168, 168, 44, 68, 36, 43, 36, 38, 42, 43, 43, 38, 95, 92, 42, 38, 92, 219, 43, 63, 111, 38, 43, 73, 38, 73, 73, 95, 73, 111, 97, 38, 43, 38, 38, 104, 43, 43, 38, 95, 104, 79, 38, 79, 79, 58, 79, 111, 38, 219, 86, 38, 86, 86, 97, 86, 222, 97, 38, 40, 944, 86, 104, 40, 89, 96, 89, 89, 112, 89, 98, 57, 96, 40, 40, 89, 40, 112, 103, 103, 106, 105, 52, 98, 47, 40, 40, 103, 222, 105, 40, 944, 96, 18, 98, 112, 137, 98, 106, 17, 40, 40, 89, 40, 41, 103, 103, 41, 105, 102, 98, 107, 106, 109, 41, 102, 108, 102, 41, 41, 109, 224, 137, 137, 107, 106, 41, 113, 0, 108, 102, 41, 114, 0, 41, 115, 102, 118, 107, 114, 109, 41, 102, 108, 102, 41, 41, 110, 110, 117, 113, 116, 117, 224, 113, 110, 126, 115, 0, 114, 119, 118, 115, 110, 116, 117, 117, 0, 119, 118, 126, 123, 0, 117, 110, 110, 117, 120, 116, 117, 124, 121, 110, 126, 123, 121, 122, 119, 118, 125, 127, 122, 117, 117, 122, 130, 128, 120, 123, 120, 146, 121, 130, 124, 120, 121, 129, 124, 121, 125, 127, 131, 121, 122, 128, 146, 125, 127, 122, 133, 129, 132, 130, 128, 120, 135, 134, 146, 121, 135, 132, 0, 136, 129, 131, 134, 138, 140, 131, 136, 141, 141, 133, 138, 0, 139, 133, 135, 132, 140, 142, 143, 135, 134, 139, 144, 135, 0, 142, 136, 139, 0, 143, 138, 140, 148, 143, 141, 139, 144, 0, 147, 139, 149, 151, 143, 148, 142, 143, 152, 151, 139, 144, 155, 149, 148, 150, 139, 147, 143, 152, 147, 148, 143, 150, 153, 154, 147, 147, 156, 149, 151, 158, 148, 153, 155, 152, 182, 157, 173, 155, 154, 159, 150, 156, 147, 153, 157, 147, 182, 153, 0, 153, 154, 158, 159, 156, 178, 178, 158, 0, 153, 0, 173, 182, 157, 173, 0, 179, 159, 0, 0, 165, 153, 165, 165, 170, 165, 170, 170, 171, 170, 171, 171, 175, 171, 175, 175, 180, 175, 179, 0, 181, 0, 184, 179, 183, 185, 186, 187, 188, 181, 180, 183, 0, 189, 186, 227, 0, 0, 184, 187, 189, 190, 193, 183, 185, 194, 171, 181, 180, 184, 188, 183, 185, 186, 187, 188, 191, 180, 183, 190, 189, 229, 191, 192, 193, 192, 196, 227, 190, 193, 196, 194, 194, 198, 200, 0, 199, 203, 0, 204, 201, 205, 200, 202, 210, 206, 204, 196, 191, 191, 192, 199, 203, 229, 196, 207, 210, 196, 0, 198, 198, 200, 201, 199, 203, 202, 204, 201, 206, 205, 202, 210, 206, 205, 196, 197, 208, 207, 213, 212, 197, 209, 207, 217, 256, 197, 211, 208, 212, 211, 217, 197, 197, 214, 209, 216, 205, 0, 197, 0, 213, 211, 197, 208, 220, 213, 212, 197, 209, 256, 217, 256, 197, 211, 218, 214, 211, 216, 197, 197, 214, 215, 216, 221, 215, 218, 215, 226, 225, 223, 220, 220, 231, 226, 221, 228, 223, 0, 215, 233, 215, 218, 225, 230, 0, 0, 0, 215, 215, 234, 0, 215, 232, 215, 226, 221, 223, 228, 239, 235, 225, 221, 228, 234, 231, 215, 230, 215, 236, 225, 230, 233, 232, 237, 238, 236, 234, 239, 240, 232, 235, 241, 244, 238, 242, 239, 235, 243, 238, 245, 251, 247, 240, 244, 237, 236, 245, 248, 249, 243, 237, 238, 242, 241, 253, 240, 248, 246, 241, 244, 238, 242, 246, 247, 243, 250, 245, 259, 247, 255, 250, 249, 251, 254, 248, 249, 252, 252, 258, 257, 254, 260, 261, 262, 264, 252, 253, 257, 0, 246, 261, 255, 250, 263, 267, 265, 255, 264, 258, 259, 254, 266, 268, 252, 252, 258, 257, 0, 263, 261, 269, 264, 270, 260, 271, 262, 270, 267, 272, 274, 263, 265, 265, 273, 0, 275, 267, 269, 266, 276, 278, 273, 275, 272, 268, 269, 271, 269, 274, 270, 279, 271, 280, 277, 267, 272, 274, 277, 282, 281, 273, 276, 275, 0, 269, 283, 276, 285, 287, 289, 284, 286, 278, 288, 280, 288, 285, 283, 290, 280, 277, 281, 279, 284, 286, 291, 281, 287, 292, 0, 282, 295, 283, 296, 285, 287, 297, 284, 286, 294, 288, 289, 290, 299, 298, 290, 300, 297, 294, 303, 291, 304, 291, 305, 292, 292, 298, 295, 295, 296, 296, 301, 302, 297, 304, 306, 294, 299, 307, 300, 299, 298, 309, 300, 308, 311, 313, 0, 304, 301, 302, 303, 310, 313, 312, 305, 314, 315, 301, 302, 306, 308, 306, 315, 317, 314, 316, 308, 309, 309, 307, 308, 318, 313, 310, 320, 319, 311, 312, 310, 316, 321, 326, 314, 315, 319, 312, 323, 308, 321, 317, 317, 322, 316, 325, 324, 318, 326, 320, 318, 327, 322, 320, 319, 324, 312, 328, 0, 321, 326, 329, 325, 0, 323, 323, 0, 331, 332, 325, 322, 0, 325, 324, 0, 333, 329, 332, 0, 335, 0, 328, 336, 327, 328, 331, 338, 338, 329, 325, 330, 341, 0, 330, 331, 332, 336, 333, 330, 330, 330, 330, 333, 335, 337, 334, 335, 334, 330, 336, 339, 338, 340, 338, 338, 339, 0, 330, 341, 337, 330, 347, 0, 334, 348, 330, 330, 330, 330, 334, 342, 337, 334, 342, 334, 343, 340, 345, 346, 340, 342, 349, 339, 344, 344, 371, 348, 343, 347, 350, 334, 348, 352, 344, 351, 345, 346, 342, 353, 357, 342, 354, 343, 362, 345, 346, 351, 349, 349, 354, 344, 344, 371, 353, 352, 350, 350, 355, 356, 352, 361, 351, 369, 0, 355, 353, 0, 358, 354, 358, 356, 357, 360, 363, 365, 362, 365, 366, 358, 360, 364, 411, 361, 370, 355, 356, 364, 361, 369, 369, 366, 368, 411, 358, 358, 363, 358, 0, 365, 360, 363, 365, 364, 365, 366, 358, 367, 364, 411, 368, 372, 373, 379, 364, 377, 370, 375, 373, 368, 367, 393, 373, 367, 375, 367, 379, 377, 0, 378, 373, 367, 0, 372, 367, 382, 373, 376, 372, 373, 379, 378, 377, 381, 375, 373, 0, 367, 382, 373, 367, 0, 367, 393, 384, 376, 378, 373, 374, 381, 374, 376, 382, 386, 376, 385, 384, 381, 386, 387, 381, 388, 402, 374, 0, 391, 374, 388, 374, 390, 374, 384, 376, 385, 374, 374, 381, 374, 396, 389, 387, 390, 385, 391, 402, 386, 387, 389, 388, 402, 374, 396, 391, 374, 392, 374, 390, 374, 383, 383, 394, 394, 392, 0, 397, 396, 389, 395, 383, 404, 383, 383, 383, 397, 395, 383, 0, 399, 401, 409, 403, 392, 400, 383, 399, 383, 383, 394, 398, 400, 401, 405, 403, 407, 395, 383, 397, 383, 383, 383, 397, 404, 383, 408, 399, 401, 398, 403, 407, 400, 398, 409, 406, 412, 430, 398, 408, 405, 405, 406, 407, 410, 414, 410, 413, 413, 0, 415, 417, 414, 408, 416, 418, 398, 0, 412, 422, 420, 415, 406, 412, 417, 416, 419, 419, 425, 430, 0, 410, 414, 421, 0, 0, 413, 415, 417, 425, 418, 416, 418, 420, 419, 422, 422, 420, 421, 423, 424, 419, 426, 419, 419, 425, 421, 423, 0, 427, 421, 426, 424, 431, 434, 432, 433, 428, 435, 444, 0, 419, 427, 0, 0, 421, 423, 424, 428, 426, 428, 431, 434, 437, 0, 428, 427, 432, 438, 433, 431, 434, 432, 433, 428, 436, 444, 440, 443, 439, 435, 436, 441, 0, 437, 428, 442, 428, 429, 441, 437, 438, 443, 446, 445, 438, 429, 429, 448, 440, 429, 429, 436, 439, 440, 443, 439, 446, 447, 441, 429, 452, 442, 442, 449, 429, 445, 450, 453, 451, 446, 445, 0, 429, 429, 451, 459, 429, 429, 450, 448, 454, 455, 452, 447, 447, 456, 449, 452, 454, 453, 449, 457, 456, 450, 453, 451, 455, 460, 458, 459, 457, 461, 459, 462, 463, 464, 454, 454, 455, 465, 0, 464, 456, 458, 466, 454, 461, 468, 457, 466, 460, 470, 472, 471, 460, 458, 463, 470, 461, 462, 462, 463, 464, 473, 474, 465, 465, 476, 475, 473, 472, 466, 471, 468, 468, 475, 481, 482, 470, 472, 471, 480, 476, 478, 479, 478, 474, 483, 480, 481, 473, 474, 478, 479, 476, 475, 484, 485, 488, 487, 486, 491, 487, 481, 489, 483, 0, 0, 480, 482, 478, 479, 478, 486, 483, 493, 492, 489, 487, 485, 490, 494, 488, 492, 485, 488, 487, 486, 484, 487, 496, 489, 490, 491, 498, 495, 497, 499, 501, 493, 498, 497, 493, 492, 494, 500, 502, 490, 495, 0, 501, 504, 496, 494, 510, 503, 505, 496, 541, 504, 499, 498, 495, 497, 499, 501, 503, 500, 502, 508, 505, 494, 500, 502, 509, 0, 508, 510, 504, 511, 515, 510, 503, 505, 506, 513, 509, 511, 0, 506, 541, 506, 515, 512, 0, 0, 508, 506, 0, 506, 516, 509, 506, 506, 512, 518, 511, 515, 513, 506, 506, 506, 513, 514, 522, 519, 506, 514, 506, 0, 512, 520, 516, 518, 506, 519, 506, 516, 517, 506, 506, 517, 518, 520, 521, 514, 506, 525, 522, 517, 514, 522, 523, 524, 514, 521, 523, 519, 520, 526, 524, 526, 519, 527, 528, 517, 529, 531, 517, 534, 530, 521, 532, 525, 525, 531, 528, 532, 533, 523, 524, 529, 530, 536, 535, 537, 526, 534, 542, 527, 527, 528, 535, 529, 531, 536, 534, 530, 539, 532, 533, 540, 543, 542, 547, 533, 537, 545, 549, 544, 536, 535, 537, 547, 543, 542, 539, 544, 546, 548, 545, 0, 549, 550, 540, 539, 553, 0, 540, 543, 546, 547, 552, 554, 545, 549, 544, 551, 556, 555, 551, 557, 548, 0, 0, 546, 548, 558, 550, 559, 550, 552, 0, 553, 555, 560, 557, 561, 565, 552, 567, 562, 559, 565, 551, 554, 555, 560, 557, 568, 556, 558, 569, 563, 558, 564, 559, 572, 566, 561, 563, 570, 560, 563, 561, 562, 564, 567, 562, 571, 565, 563, 566, 573, 576, 574, 568, 575, 573, 580, 563, 574, 564, 578, 569, 566, 577, 563, 570, 572, 563, 578, 575, 579, 581, 582, 571, 585, 576, 582, 584, 576, 574, 580, 575, 573, 580, 583, 577, 586, 578, 588, 579, 577, 590, 583, 581, 587, 589, 0, 579, 581, 582, 584, 592, 591, 587, 584, 593, 585, 592, 589, 586, 588, 583, 594, 586, 591, 588, 596, 590, 590, 595, 597, 587, 589, 594, 598, 599, 595, 593, 592, 591, 599, 600, 593, 599, 599, 0, 601, 598, 0, 594, 600, 602, 597, 603, 604, 605, 595, 597, 596, 599, 602, 598, 599, 607, 603, 609, 606, 599, 600, 610, 599, 599, 601, 601, 611, 607, 604, 605, 602, 606, 603, 604, 605, 612, 614, 613, 0, 610, 616, 618, 607, 615, 0, 606, 617, 620, 610, 609, 611, 616, 619, 611, 622, 617, 628, 612, 612, 613, 614, 618, 612, 614, 613, 615, 619, 616, 618, 620, 615, 621, 623, 617, 620, 624, 625, 626, 621, 619, 629, 622, 627, 624, 612, 637, 630, 625, 628, 633, 623, 631, 631, 637, 632, 626, 634, 627, 621, 623, 636, 629, 624, 625, 626, 634, 635, 629, 638, 627, 630, 633, 637, 630, 639, 640, 633, 643, 632, 635, 631, 632, 636, 634, 641, 644, 642, 636, 642, 645, 644, 646, 648, 635, 656, 0, 639, 0, 0, 643, 638, 639, 649, 645, 643, 646, 647, 640, 641, 650, 649, 641, 651, 642, 653, 652, 645, 644, 646, 0, 647, 647, 652, 654, 648, 660, 656, 650, 647, 649, 655, 657, 659, 647, 651, 662, 650, 659, 664, 651, 653, 653, 652, 654, 0, 655, 657, 647, 647, 658, 654, 660, 660, 661, 655, 661, 721, 655, 657, 658, 662, 663, 662, 664, 659, 664, 665, 669, 666, 663, 667, 658, 655, 668, 669, 665, 658, 666, 670, 667, 661, 668, 671, 721, 672, 679, 658, 673, 663, 674, 0, 677, 0, 665, 669, 666, 676, 667, 675, 673, 668, 674, 672, 678, 676, 671, 677, 675, 680, 671, 670, 672, 681, 684, 673, 678, 674, 679, 677, 690, 682, 680, 685, 676, 683, 675, 686, 681, 682, 687, 678, 685, 683, 688, 688, 680, 684, 686, 687, 681, 684, 690, 688, 692, 689, 691, 690, 682, 696, 685, 693, 683, 689, 686, 694, 695, 687, 698, 691, 728, 688, 688, 734, 695, 696, 697, 701, 694, 700, 692, 692, 689, 691, 693, 699, 696, 700, 693, 697, 698, 701, 694, 695, 702, 698, 699, 703, 704, 707, 705, 706, 728, 697, 701, 734, 700, 710, 707, 708, 0, 0, 699, 709, 702, 711, 713, 712, 704, 703, 710, 702, 705, 706, 703, 704, 707, 705, 706, 708, 714, 709, 712, 711, 710, 715, 708, 716, 713, 718, 709, 717, 711, 713, 712, 722, 720, 719, 723, 725, 716, 718, 720, 722, 714, 724, 729, 714, 715, 717, 719, 727, 715, 729, 716, 736, 718, 725, 717, 727, 730, 722, 722, 720, 719, 723, 725, 724, 733, 731, 722, 735, 724, 729, 732, 736, 732, 733, 727, 737, 0, 742, 736, 730, 731, 739, 749, 730, 737, 738, 735, 738, 739, 742, 745, 733, 731, 0, 735, 753, 0, 732, 0, 0, 745, 748, 737, 749, 742, 751, 753, 752, 739, 749, 0, 0, 738, 740, 754, 758, 740, 745, 755, 748, 740, 0, 753, 740, 758, 752, 751, 756, 748, 761, 740, 740, 751, 740, 752, 757, 759, 754, 740, 760, 740, 754, 758, 740, 755, 755, 760, 740, 766, 759, 740, 757, 763, 756, 756, 765, 783, 740, 740, 764, 740, 761, 757, 759, 765, 764, 760, 762, 762, 767, 762, 766, 767, 762, 763, 766, 768, 773, 762, 763, 769, 770, 765, 783, 762, 762, 764, 0, 772, 770, 772, 776, 768, 762, 762, 762, 767, 762, 771, 768, 762, 773, 769, 768, 773, 762, 775, 769, 770, 774, 771, 762, 762, 778, 774, 772, 777, 776, 776, 768, 779, 781, 780, 785, 0, 771, 775, 784, 777, 782, 787, 786, 0, 775, 789, 778, 0, 791, 785, 786, 778, 774, 789, 777, 780, 781, 779, 779, 781, 780, 785, 782, 784, 787, 784, 788, 782, 787, 786, 790, 792, 789, 788, 791, 791, 794, 793, 795, 796, 797, 798, 800, 792, 804, 797, 801, 795, 799, 790, 793, 801, 803, 788, 796, 805, 807, 790, 792, 806, 0, 0, 794, 794, 793, 795, 796, 797, 808, 800, 799, 810, 809, 798, 803, 799, 804, 811, 801, 803, 812, 806, 813, 815, 0, 814, 806, 805, 807, 818, 810, 816, 808, 809, 814, 808, 820, 817, 810, 809, 818, 813, 821, 822, 811, 815, 817, 812, 823, 813, 815, 816, 814, 819, 824, 827, 818, 825, 816, 0, 821, 819, 822, 820, 817, 825, 830, 828, 829, 821, 822, 829, 831, 827, 832, 823, 834, 835, 833, 835, 819, 839, 827, 837, 825, 828, 824, 838, 830, 834, 831, 836, 838, 830, 828, 829, 847, 837, 832, 831, 833, 832, 840, 834, 835, 833, 842, 839, 839, 836, 837, 848, 841, 843, 840, 850, 843, 844, 836, 838, 841, 847, 845, 847, 842, 849, 844, 854, 851, 840, 845, 849, 854, 842, 851, 856, 852, 850, 848, 841, 843, 853, 850, 852, 844, 0, 845, 858, 853, 845, 859, 855, 849, 856, 854, 851, 857, 845, 855, 859, 857, 860, 856, 852, 861, 863, 862, 864, 853, 860, 858, 869, 865, 867, 858, 864, 866, 859, 855, 868, 863, 0, 870, 857, 862, 865, 867, 871, 860, 870, 0, 873, 863, 862, 864, 872, 861, 866, 869, 865, 867, 868, 872, 866, 874, 871, 868, 875, 876, 870, 873, 874, 875, 877, 871, 878, 876, 879, 873, 880, 877, 881, 872, 882, 884, 886, 885, 0, 891, 892, 883, 874, 880, 887, 875, 876, 882, 883, 890, 0, 877, 887, 889, 893, 890, 0, 880, 878, 886, 879, 882, 888, 886, 881, 891, 891, 884, 883, 885, 888, 887, 892, 894, 895, 889, 890, 888, 893, 896, 889, 893, 894, 897, 0, 898, 899, 900, 895, 888, 897, 901, 902, 903, 905, 899, 901, 888, 904, 905, 894, 895, 0, 910, 902, 907, 910, 920, 906, 900, 897, 896, 898, 899, 900, 906, 903, 913, 908, 902, 903, 905, 914, 901, 904, 904, 908, 907, 911, 914, 910, 913, 907, 915, 920, 906, 0, 0, 917, 915, 0, 911, 0, 918, 913, 908, 919, 0, 921, 914, 921, 0, 0, 922, 0, 911, 923, 0, 919, 924, 915, 916, 925, 916, 917, 917, 918, 916, 923, 916, 918, 0, 924, 919, 916, 921, 922, 927, 926, 916, 922, 928, 927, 923, 925, 916, 924, 929, 916, 925, 916, 926, 930, 0, 916, 931, 916, 0, 933, 928, 929, 916, 932, 935, 930, 926, 916, 931, 928, 927, 934, 936, 932, 933, 929, 930, 935, 936, 938, 930, 937, 939, 931, 941, 932, 933, 942, 940, 945, 932, 935, 930, 934, 937, 943, 946, 938, 934, 936, 932, 946, 948, 939, 947, 0, 938, 952, 937, 939, 940, 948, 947, 950, 951, 940, 941, 954, 0, 942, 952, 945, 943, 946, 961, 955, 0, 953, 950, 948, 0, 947, 949, 0, 952, 957, 951, 949, 0, 949, 950, 951, 953, 954, 954, 949, 956, 955, 957, 960, 949, 949, 955, 958, 953, 959, 961, 949, 949, 949, 960, 958, 957, 959, 949, 956, 949, 962, 963, 967, 964, 971, 949, 956, 965, 968, 960, 949, 949, 964, 958, 966, 959, 963, 949, 965, 969, 972, 974, 962, 966, 973, 975, 969, 962, 963, 967, 964, 968, 973, 976, 965, 968, 971, 977, 983, 975, 980, 966, 978, 974, 972, 981, 969, 972, 974, 982, 978, 973, 975, 984, 985, 986, 0, 991, 980, 977, 982, 987, 985, 981, 977, 976, 988, 980, 987, 978, 983, 984, 981, 992, 990, 991, 982, 986, 989, 988, 984, 985, 986, 993, 991, 989, 994, 995, 987, 990, 999, 992, 0, 988, 0, 997, 994, 1011, 1002, 1001, 992, 990, 1000, 999, 993, 989, 997, 1001, 1004, 1000, 993, 1002, 1003, 994, 1005, 1006, 1009, 999, 1012, 995, 1004, 1003, 997, 1011, 1011, 1002, 1001, 1010, 1013, 1000, 0, 1020, 1014, 1015, 1020, 1004, 1005, 1006, 1009, 1003, 1017, 1005, 1006, 1009, 1014, 1010, 1013, 1015, 1018, 1021, 1012, 1017, 1022, 1018, 1010, 1013, 1023, 1020, 1020, 1014, 1015, 1020, 1025, 1023, 1024, 1022, 1027, 1017, 1026, 1028, 1029, 1025, 1030, 1021, 0, 1024, 1021, 1029, 1027, 1022, 1018, 1032, 1026, 1023, 1031, 1033, 1035, 1037, 1036, 1025, 0, 1024, 1043, 1027, 1036, 1026, 1031, 1029, 1033, 1038, 1040, 1028, 1041, 1032, 1030, 1039, 1042, 1043, 1032, 1037, 1035, 1031, 1033, 1035, 1037, 1036, 1039, 1045, 1040, 1043, 1046, 1038, 1047, 1048, 1041, 1049, 1038, 1040, 1042, 1041, 1050, 1046, 1039, 1042, 1052, 1057, 1051, 1054, 1045, 1053, 1058, 1059, 1055, 1047, 1045, 1051, 1054, 1046, 1050, 1047, 1055, 1060, 1049, 1056, 1058, 1048, 1064, 1050, 1052, 1057, 1056, 1052, 1057, 1051, 1054, 1053, 1053, 1058, 1061, 1055, 1062, 1063, 1066, 1059, 1068, 1067, 1070, 0, 1069, 0, 1056, 1066, 1067, 1060, 1075, 1073, 1071, 0, 1064, 1072, 1061, 1076, 1062, 1063, 1073, 1061, 0, 1062, 1063, 1066, 1069, 1074, 1067, 1070, 1071, 1069, 1068, 1072, 1075, 1074, 1077, 1075, 1073, 1071, 1078, 1076, 1072, 1080, 1076, 1081, 1079, 1082, 1083, 1084, 1086, 0, 1077, 1081, 1074, 1079, 1085, 1087, 1080, 1089, 1091, 1084, 1078, 1077, 1092, 1087, 0, 1078, 1088, 1091, 1080, 1097, 1081, 1079, 1089, 0, 1084, 1086, 1085, 1082, 1083, 1088, 1092, 1085, 1087, 1093, 1089, 1091, 1094, 1096, 1094, 1092, 1098, 1093, 1100, 1088, 1101, 1096, 1097, 1098, 1103, 1105, 1102, 1106, 1107, 1108, 1104, 1100, 1101, 0, 1106, 0, 1093, 1110, 1109, 1094, 1096, 1102, 1111, 1098, 1112, 1100, 1103, 1101, 1104, 1109, 1113, 1103, 1105, 1102, 1106, 1114, 1115, 1104, 1116, 1110, 1107, 1108, 1119, 1113, 1110, 1109, 1112, 1111, 1114, 1111, 1116, 1112, 1117, 1118, 1119, 1122, 1120, 1113, 1115, 1123, 1117, 1124, 1114, 1115, 1120, 1116, 1125, 1127, 1126, 1119, 1124, 0, 1123, 1118, 1127, 1131, 1128, 1130, 1125, 1117, 1118, 1133, 1122, 1120, 1132, 1128, 1123, 1128, 1124, 1126, 1128, 1136, 1135, 1125, 1127, 1126, 1134, 0, 1128, 1137, 1130, 1131, 1131, 1128, 1130, 1135, 1132, 1137, 1133, 1139, 1140, 1132, 1128, 1138, 1128, 1136, 1134, 1128, 1136, 1135, 1141, 1143, 1138, 1134, 1142, 1144, 1137, 1139, 1141, 1145, 1148, 1149, 1140, 1146, 0, 0, 1139, 1140, 1144, 1142, 1138, 1146, 1150, 1143, 1152, 1145, 0, 1141, 1143, 1153, 1154, 1142, 1144, 1149, 1151, 1155, 1145, 1148, 1149, 1160, 1146, 1151, 1156, 1158, 1150, 1157, 1152, 1155, 1154, 1150, 1161, 1152, 1153, 1157, 1156, 1159, 1153, 1154, 1158, 1160, 1162, 1151, 1155, 1165, 1166, 1161, 1160, 1159, 1162, 1156, 1158, 1164, 1157, 1163, 1167, 1169, 1166, 1161, 1168, 1163, 1164, 1167, 1159, 1170, 1165, 1168, 1171, 1162, 1172, 1173, 1165, 1166, 1176, 1169, 1171, 1170, 1175, 1173, 1164, 1176, 1163, 1167, 1169, 1172, 1174, 1168, 1174, 1178, 1175, 1179, 1170, 1180, 0, 1171, 1181, 1172, 1173, 1183, 1182, 1176, 1184, 1179, 1185, 1175, 1180, 1182, 1187, 1186, 1183, 1190, 1188, 1174, 1186, 1181, 1187, 1195, 1179, 1185, 1180, 1178, 1189, 1181, 1184, 1188, 1183, 1182, 1192, 1184, 0, 1185, 1194, 1193, 1196, 1187, 1189, 1190, 1190, 1188, 1224, 1186, 1192, 1195, 1195, 0, 1198, 1197, 1199, 1189, 1191, 1193, 1224, 1201, 1191, 1192, 1196, 1191, 1191, 0, 1193, 1196, 1191, 1202, 1194, 1197, 1200, 1224, 1191, 1202, 1199, 1203, 1191, 1206, 1197, 1199, 1191, 1191, 1198, 1201, 1201, 1191, 1206, 1207, 1191, 1191, 1209, 0, 1200, 1191, 1202, 1210, 1204, 1200, 1204, 1191, 1205, 1203, 1203, 1191, 1206, 1207, 1208, 1205, 1210, 1211, 1212, 1213, 1209, 1208, 1207, 0, 0, 1209, 1211, 1214, 1204, 1215, 1210, 1204, 1218, 1204, 1219, 1205, 1217, 0, 1220, 1220, 0, 1208, 0, 0, 1211, 1218, 1225, 1223, 0, 1214, 1212, 1213, 1215, 1221, 1214, 1225, 1215, 1216, 1217, 1218, 1219, 1219, 1216, 1217, 1216, 1226, 1216, 1220, 1216, 1221, 1223, 1227, 1228, 1225, 1223, 1216, 1227, 1229, 1230, 1232, 1221, 1231, 1229, 1226, 1216, 1235, 1236, 1237, 1233, 1216, 1228, 1216, 1226, 1216, 1231, 1216, 1233, 1232, 1235, 1228, 1230, 1234, 1238, 1227, 1229, 1230, 1232, 1239, 1231, 1234, 1240, 1241, 1235, 1237, 1237, 1233, 1243, 1242, 1236, 1246, 1239, 1238, 1244, 1245, 1241, 1245, 1247, 1248, 1234, 1238, 1249, 1244, 1240, 1250, 1239, 1242, 1243, 1240, 1241, 1248, 1252, 1246, 0, 1243, 1242, 1255, 1246, 1253, 1254, 1244, 1245, 1256, 1257, 1247, 1248, 1258, 1254, 1249, 1250, 1257, 1250, 1259, 1260, 1255, 1252, 1261, 1263, 1252, 1268, 1253, 1262, 1261, 1255, 1264, 1253, 1254, 1262, 1265, 1256, 1257, 1264, 1267, 1258, 1266, 1260, 1270, 1268, 1259, 1259, 1260, 1266, 1269, 1261, 1263, 1270, 1268, 1272, 1262, 1277, 1273, 1264, 1265, 1274, 1267, 1265, 1276, 1275, 1284, 1267, 1278, 1266, 1273, 1270, 1279, 1288, 1281, 1269, 1277, 1269, 1275, 1272, 1280, 1282, 1272, 1274, 1277, 1273, 1276, 1284, 1274, 1283, 1278, 1276, 1275, 1284, 1285, 1278, 1279, 1286, 1283, 1279, 1281, 1281, 1280, 1282, 1289, 1288, 1290, 1280, 1282, 1291, 1293, 1286, 1292, 1294, 1285, 1295, 1283, 1301, 1293, 1296, 1298, 1285, 0, 1302, 1286, 1305, 1296, 1299, 1290, 1294, 1292, 1300, 1298, 1290, 1299, 1300, 1289, 1293, 1303, 1292, 1294, 1291, 1295, 0, 1307, 1308, 1296, 1298, 1310, 1301, 1306, 1307, 1308, 1309, 1299, 1302, 1306, 1305, 1300, 1303, 1311, 1310, 1312, 1306, 1316, 1303, 1313, 1317, 1309, 1311, 1315, 1307, 1308, 1313, 1314, 1310, 1314, 1306, 1318, 1315, 1309, 1319, 1318, 1306, 1321, 1322, 1316, 1311, 1312, 1312, 1322, 1316, 1321, 1313, 1317, 1323, 1324, 1315, 1327, 1325, 1326, 1314, 1330, 1319, 1323, 1318, 1331, 1335, 1319, 1328, 1327, 1321, 1328, 1326, 1324, 1332, 1329, 1322, 1325, 1329, 1330, 1328, 1323, 1324, 1334, 1327, 1325, 1326, 1332, 1330, 1335, 1331, 1336, 1331, 1335, 1337, 1328, 1338, 1329, 1328, 1337, 1341, 1332, 1329, 1340, 1338, 1329, 1342, 1336, 1339, 1339, 1343, 0, 1340, 1344, 1345, 1334, 1348, 1346, 1336, 1343, 1344, 1355, 1341, 1338, 1346, 1349, 1337, 1341, 1342, 1348, 1340, 1351, 1352, 1342, 1349, 1339, 1345, 1343, 1350, 1353, 1344, 1345, 1354, 1348, 1346, 1356, 1357, 1350, 1353, 1358, 1354, 1359, 1349, 1355, 1357, 1352, 1360, 1351, 1351, 1352, 1356, 1363, 1358, 1359, 1362, 1350, 1353, 1361, 1360, 1354, 1364, 1365, 1356, 1357, 1367, 1361, 1358, 1366, 1359, 1371, 1365, 1363, 1370, 1360, 1368, 1369, 1362, 1372, 1363, 1370, 1373, 1362, 1364, 1375, 1361, 1366, 1368, 1364, 1365, 1377, 1367, 1367, 1374, 1369, 1366, 1371, 1371, 1376, 1378, 1370, 1377, 1368, 1369, 1380, 1378, 1374, 1379, 1381, 1382, 1372, 1375, 1383, 1373, 0, 0, 1384, 1377, 1386, 1376, 1374, 1387, 1389, 1392, 1391, 1376, 1378, 0, 1388, 1379, 1394, 1389, 1390, 1393, 1379, 1392, 1380, 1391, 1383, 1383, 1381, 1382, 1384, 1384, 1387, 1386, 1388, 1390, 1387, 1389, 1392, 1391, 1396, 1393, 1395, 1388, 1394, 1394, 1397, 1390, 1393, 1395, 1398, 1400, 1399, 1401, 1402, 1411, 1400, 1404, 1401, 1396, 1399, 1402, 1403, 1398, 1405, 1404, 0, 1396, 1397, 1395, 1408, 1407, 1405, 1397, 1406, 1409, 1414, 1398, 1408, 1399, 0, 1402, 1409, 1400, 1404, 1401, 1410, 1411, 1403, 1403, 1412, 1405, 1406, 1407, 1416, 1410, 1415, 1408, 1407, 1413, 1413, 1406, 1409, 1417, 1415, 1425, 1418, 1422, 1414, 0, 1419, 1420, 1412, 1410, 1418, 1416, 1421, 1412, 1419, 1420, 1422, 1416, 1423, 1415, 1421, 1430, 1413, 1424, 1423, 1426, 1429, 1425, 1425, 1418, 1422, 1417, 1427, 1419, 1420, 1424, 1428, 1431, 1432, 1421, 1427, 1429, 1434, 1433, 1428, 1423, 0, 1436, 1430, 1426, 1424, 1437, 1426, 1429, 1435, 1437, 1434, 1440, 1439, 1427, 1432, 1436, 1444, 1428, 1431, 1432, 1433, 1439, 1437, 1434, 1433, 1441, 1435, 1442, 1436, 1443, 1437, 1445, 1437, 1440, 1442, 1435, 1437, 1441, 1440, 1439, 1443, 1446, 1449, 1444, 1450, 1447, 0, 1448, 1457, 1437, 0, 1456, 1441, 1445, 1442, 1451, 1443, 1447, 1445, 1452, 0, 1448, 1454, 1455, 1449, 1463, 1452, 1450, 1453, 1449, 1455, 1450, 1447, 1446, 1448, 1457, 1459, 1453, 1451, 1462, 1454, 1461, 1451, 1456, 1464, 1459, 1452, 1461, 1467, 1454, 1455, 1463, 1463, 1465, 1469, 1453, 1470, 0, 1471, 1472, 1465, 1462, 0, 1459, 1474, 1475, 1462, 1477, 1461, 1471, 1472, 1476, 1475, 1479, 1480, 1467, 1464, 1481, 1469, 1479, 1465, 1469, 1480, 1470, 1478, 1471, 1472, 1483, 1474, 1476, 1482, 1474, 1475, 1477, 1477, 1488, 1478, 1484, 1476, 1481, 1479, 1480, 1488, 1482, 1481, 1489, 1486, 1485, 1487, 1493, 1487, 1478, 1490, 1483, 1483, 1484, 1485, 1482, 1486, 1491, 1492, 1493, 1488, 1494, 1484, 1490, 1495, 1504, 1491, 1497, 1496, 1489, 1489, 1486, 1485, 1487, 1493, 1496, 1498, 1490, 1500, 1505, 1492, 1498, 1499, 1507, 1491, 1492, 1502, 1495, 1494, 1501, 1505, 1495, 1504, 1497, 1497, 1496, 1507, 1501, 1499, 1508, 1508, 1500, 1506, 1498, 1509, 1500, 1505, 1508, 1502, 1499, 1507, 1506, 1510, 1502, 1510, 1511, 1501, 1509, 1512, 1515, 1516, 1513, 1517, 1514, 0, 1518, 1508, 1508, 1513, 1506, 1514, 1509, 1518, 1519, 1520, 1521, 1522, 1523, 1516, 1510, 1512, 1511, 1511, 1522, 1517, 1512, 1515, 1516, 1513, 1517, 1514, 1525, 1518, 1526, 1527, 1528, 1520, 1530, 1519, 1532, 1519, 1520, 1527, 1522, 1525, 1531, 1535, 1521, 1531, 1523, 1533, 1536, 0, 1538, 1534, 1535, 1528, 1543, 1525, 1530, 1526, 1527, 1528, 1536, 1530, 1532, 1532, 1534, 1537, 1540, 1545, 1544, 1531, 1535, 1539, 1541, 1533, 1533, 1536, 1538, 1538, 1534, 1541, 1539, 1540, 1542, 1545, 1547, 1542, 1543, 1551, 1552, 1537, 1544, 1545, 1537, 1540, 1545, 1544, 1548, 1542, 1539, 1541, 1554, 1549, 1547, 1549, 1553, 1550, 1542, 1555, 1558, 1542, 1545, 1547, 1542, 1556, 1551, 1557, 1560, 1559, 1548, 1562, 1552, 1564, 1554, 1548, 1542, 1560, 1562, 1554, 1549, 1550, 1558, 1559, 1550, 1555, 1555, 1558, 1553, 1561, 1563, 1556, 1556, 1565, 1567, 1560, 1559, 1561, 1562, 1557, 1566, 1569, 1568, 1570, 0, 1564, 1568, 1575, 1573, 1571, 1572, 1574, 1578, 0, 1563, 1573, 1561, 1563, 1574, 1572, 1575, 1578, 1566, 1569, 1580, 1565, 1567, 1566, 1569, 1568, 1570, 1571, 1576, 1577, 1575, 1573, 1571, 1572, 1574, 1578, 1579, 1581, 1579, 1584, 1582, 1576, 1577, 1580, 1585, 1587, 1586, 1580, 1582, 1594, 0, 1588, 3053, 3053, 1584, 1576, 1577, 1589, 1588, 1585, 1586, 1591, 1581, 1579, 1581, 1590, 1584, 1582, 1589, 1592, 1597, 1585, 1590, 1586, 1591, 1592, 1594, 1587, 1588, 1595, 1596, 3053, 1598, 1599, 1589, 1597, 1595, 1600, 1591, 1602, 1601, 1604, 1590, 1601, 1603, 1599, 1592, 1597, 1602, 1605, 1600, 0, 1596, 1604, 1607, 1612, 1595, 1596, 1598, 1598, 1599, 1629, 1603, 1613, 1600, 1607, 1602, 1601, 1604, 1605, 1606, 1603, 1609, 1606, 1614, 1618, 1605, 1609, 1611, 1612, 1611, 1607, 1612, 1615, 1609, 1616, 1621, 1617, 1606, 1619, 1613, 0, 0, 1629, 1616, 1622, 1630, 1606, 1615, 1609, 1606, 1614, 1618, 1619, 1609, 1611, 1625, 1620, 1621, 1624, 1615, 1617, 1616, 1621, 1617, 1620, 1619, 1622, 1623, 1626, 1624, 1628, 1622, 1630, 1625, 1627, 1623, 1626, 1627, 1633, 1631, 1634, 1637, 1625, 1620, 1632, 1624, 1631, 1633, 1628, 1635, 0, 1636, 1627, 1634, 1623, 1626, 1636, 1628, 1632, 1638, 1635, 1627, 1643, 1637, 1627, 1633, 1631, 1634, 1637, 1642, 1641, 1632, 1641, 1644, 1638, 1645, 1635, 1646, 1642, 0, 1647, 1649, 1650, 1636, 1644, 0, 1638, 1648, 1643, 1643, 1648, 1650, 1651, 1645, 1647, 0, 1642, 1641, 1651, 1646, 1644, 1652, 1645, 1649, 1646, 1648, 1647, 1647, 1649, 1650, 1652, 1653, 1655, 1657, 1648, 1656, 1653, 1648, 1657, 1651, 1659, 1647, 1658, 1660, 1661, 1655, 1662, 1656, 1652, 0, 1665, 0, 1660, 1663, 1664, 1670, 1666, 1673, 1668, 1655, 1657, 1669, 1656, 1653, 1658, 1668, 0, 1664, 0, 1658, 1660, 1661, 1659, 1672, 1669, 1663, 1671, 1666, 1662, 1672, 1663, 1664, 1665, 1666, 1677, 1668, 1675, 1670, 1669, 1673, 1671, 1678, 1677, 1679, 1681, 1682, 1680, 1672, 1685, 1678, 1672, 1686, 1683, 1671, 1684, 1675, 1672, 1687, 1681, 1682, 1688, 1677, 1679, 1675, 1680, 1683, 1689, 1684, 1678, 1685, 1679, 1681, 1682, 1680, 1688, 1685, 1691, 1690, 1692, 1683, 1693, 1684, 1695, 1686, 1690, 1691, 1692, 1688, 1694, 1687, 1696, 1698, 1700, 1689, 1701, 1696, 1685, 1697, 1703, 1702, 1698, 1701, 1694, 1691, 1690, 1692, 1704, 1693, 1697, 1705, 1711, 1706, 1707, 0, 1695, 1694, 1707, 1696, 1698, 1700, 1703, 1701, 1702, 1710, 1697, 1703, 1702, 1709, 1704, 1706, 1713, 1705, 1712, 1704, 1715, 1710, 1705, 1711, 1706, 1707, 1712, 1714, 1709, 1716, 1717, 1713, 1722, 1718, 1719, 1714, 1710, 1723, 1721, 1722, 1709, 1726, 1716, 1713, 1725, 1712, 1721, 1715, 1718, 1719, 1717, 1724, 1727, 1725, 1714, 1733, 1716, 1717, 1728, 1722, 1718, 1719, 1726, 1729, 1731, 1721, 1724, 1734, 1726, 1723, 1732, 1725, 1737, 1736, 1735, 1739, 1738, 0, 1724, 1727, 1739, 1754, 1728, 1738, 1740, 1728, 1731, 1733, 1732, 1735, 1729, 1731, 1742, 1740, 1734, 1741, 1737, 1732, 1736, 1737, 1736, 1735, 1739, 1738, 1741, 1743, 1744, 1747, 1745, 1746, 1749, 1740, 1748, 1754, 1742, 1753, 1752, 1749, 1751, 1742, 1755, 1746, 1741, 1745, 1744, 1748, 1755, 1743, 1752, 1747, 1748, 1750, 1743, 1744, 1747, 1745, 1746, 1749, 1750, 1748, 1751, 1757, 1753, 1752, 1759, 1751, 1758, 1755, 1763, 1757, 1760, 1761, 1748, 1750, 1758, 1759, 1764, 1760, 1750, 1762, 1765, 1762, 1766, 1767, 1769, 1750, 1768, 1771, 1757, 1766, 1769, 1759, 1762, 1758, 1763, 1763, 1761, 1760, 1761, 1770, 1772, 1773, 1776, 1764, 1774, 1770, 1762, 1765, 1762, 1766, 1767, 1769, 1768, 1768, 1771, 1777, 1778, 1779, 1781, 1779, 1784, 1790, 1780, 1772, 1777, 1782, 1770, 1772, 1774, 1783, 1786, 1774, 1782, 1773, 1776, 1788, 1786, 1787, 1785, 0, 0, 1789, 1777, 0, 1779, 1781, 1780, 1784, 1778, 1780, 1785, 1783, 1782, 1790, 1795, 0, 1783, 1786, 1802, 1787, 1792, 1788, 1788, 1789, 1787, 1785, 1793, 1792, 1789, 1791, 1791, 1791, 1794, 1796, 1802, 1793, 1791, 1798, 1799, 1794, 1796, 1801, 1798, 1800, 1791, 1802, 1795, 1792, 1804, 1803, 1808, 1799, 1810, 1793, 1805, 1800, 1791, 1791, 1791, 1794, 1796, 1803, 0, 1791, 1806, 1799, 1801, 1807, 1801, 1798, 1800, 1806, 1805, 1807, 1809, 1809, 1803, 1808, 1810, 1810, 1804, 1805, 1811, 1812, 0, 1813, 1814, 1818, 1812, 1811, 1815, 1806, 1824, 1819, 1807, 1819, 1823, 1815, 1820, 1825, 1822, 1809, 1823, 1831, 1829, 1830, 1830, 1827, 1828, 1811, 1812, 1813, 1813, 1814, 1818, 1826, 1820, 1815, 1822, 1827, 1819, 1826, 1829, 1823, 1824, 1820, 1825, 1822, 1828, 1831, 1831, 1829, 1830, 1833, 1827, 1828, 1832, 1832, 1836, 1835, 1837, 1839, 1826, 0, 1833, 1838, 1843, 1837, 1842, 1840, 1844, 0, 0, 1846, 0, 1847, 1842, 1845, 0, 0, 1833, 1835, 1847, 1832, 1850, 1838, 1835, 1837, 1849, 1854, 1836, 1846, 1838, 1839, 1840, 1842, 1840, 1844, 1843, 1845, 1846, 1848, 1847, 1849, 1845, 1851, 1852, 1852, 1850, 1848, 1853, 1850, 1855, 1856, 1851, 1849, 1860, 0, 1857, 1858, 1856, 1854, 1861, 1860, 1863, 1862, 1864, 1861, 1848, 1865, 1857, 1867, 1851, 1852, 1864, 1858, 1853, 1853, 1868, 1867, 1856, 1865, 1858, 1860, 1855, 1857, 1858, 1862, 1869, 1861, 1870, 1863, 1862, 1864, 1871, 1872, 1865, 1873, 1867, 1875, 1876, 1868, 1858, 1874, 0, 1868, 1876, 1879, 1874, 1880, 1877, 1870, 1871, 1882, 1869, 1869, 1880, 1870, 1896, 1874, 1873, 1871, 1872, 1877, 1873, 1878, 1875, 1876, 1883, 1879, 1874, 1881, 1884, 1878, 1879, 1874, 1880, 1877, 1881, 1885, 1883, 1886, 1887, 1889, 1890, 1882, 1891, 1892, 1894, 1890, 1896, 1895, 1878, 1891, 1884, 1883, 1895, 1898, 1881, 1884, 1890, 1889, 0, 1899, 1899, 1887, 1885, 1886, 1886, 1887, 1889, 1890, 1900, 1891, 1892, 1894, 1890, 1901, 1902, 1905, 1904, 1906, 1907, 1895, 1907, 1908, 1909, 1910, 0, 1898, 1899, 1909, 1901, 1911, 1900, 1904, 1906, 1912, 1920, 1900, 1916, 1914, 1905, 1915, 1901, 1918, 1905, 1904, 1906, 1907, 1902, 1915, 1912, 1909, 1919, 1911, 1914, 1908, 1921, 1910, 1911, 1924, 1916, 1923, 1912, 1920, 1922, 1916, 1914, 1918, 1915, 1926, 1918, 1922, 1925, 1929, 1927, 0, 1933, 0, 1919, 1919, 1924, 1931, 1932, 1921, 1937, 1938, 1924, 0, 0, 1935, 1926, 1922, 1927, 1923, 1925, 1929, 1926, 1932, 1936, 1925, 1929, 1927, 1933, 1933, 1935, 1931, 1937, 1940, 1931, 1932, 1939, 1937, 1938, 1936, 1941, 1942, 1935, 1943, 1946, 1944, 1945, 1949, 1947, 1950, 1951, 1936, 1944, 1946, 1939, 1940, 1947, 1948, 1952, 1951, 1940, 0, 1941, 1939, 1945, 1942, 1954, 1941, 1942, 1949, 1943, 1946, 1944, 1945, 1949, 1947, 1952, 1951, 1953, 1954, 1948, 1950, 0, 1956, 1948, 1952, 1957, 1953, 1958, 1959, 0, 1960, 0, 1954, 1956, 1957, 1959, 1962, 1963, 1968, 1964, 1961, 0, 1971, 1963, 1953, 1958, 1976, 1970, 1956, 1956, 1974, 1962, 1957, 1971, 1958, 1959, 1960, 1960, 1961, 1965, 1956, 1964, 1974, 1962, 1963, 1968, 1964, 1961, 1972, 1971, 1975, 1970, 1977, 1965, 1970, 1978, 1980, 1974, 1976, 1972, 1979, 1981, 1977, 1975, 1983, 1986, 1965, 1984, 1987, 1986, 1988, 0, 1992, 1990, 0, 1972, 1989, 1975, 1990, 1977, 1981, 1978, 1978, 1980, 0, 1979, 1993, 1979, 1981, 1987, 1991, 1983, 1986, 1984, 1984, 1987, 1989, 1991, 1992, 1992, 1990, 1994, 1988, 1989, 1993, 1995, 1996, 1994, 1998, 2003, 1997, 1999, 1999, 1993, 2000, 2004, 2003, 1991, 2001, 2004, 1995, 1996, 1997, 1998, 2006, 2005, 2000, 0, 1994, 0, 2009, 2001, 1995, 1996, 2007, 1998, 2003, 1997, 1999, 2001, 2005, 2000, 2004, 2007, 2010, 2001, 2008, 2013, 2011, 2019, 2015, 2006, 2005, 2008, 2009, 2011, 2014, 2009, 2001, 2015, 2016, 2007, 2022, 2021, 2017, 2029, 2010, 2019, 2024, 2013, 2023, 2010, 2021, 2008, 2013, 2011, 2019, 2015, 2025, 2027, 2022, 2014, 2016, 2014, 2017, 2023, 2025, 2016, 2028, 2022, 2021, 2017, 2029, 2024, 2031, 2024, 2033, 2023, 2030, 2030, 2037, 2028, 2032, 0, 2027, 2025, 2027, 2036, 2034, 2038, 2035, 2046, 2039, 2040, 2036, 2028, 2031, 2041, 2033, 2035, 2047, 2031, 2041, 2033, 2042, 2030, 2039, 2032, 2040, 2032, 2034, 2038, 2037, 2044, 2036, 2034, 2038, 2035, 2046, 2039, 2040, 2044, 2045, 2042, 2048, 2049, 2047, 2047, 2050, 2041, 2052, 2042, 2049, 0, 2051, 2045, 2048, 2053, 2055, 2054, 2044, 2057, 0, 2058, 2056, 2059, 2053, 2054, 0, 2045, 0, 2048, 2049, 2060, 0, 2052, 2051, 2052, 2054, 2056, 2050, 2051, 2064, 2059, 2053, 2055, 2054, 2057, 2057, 2058, 2058, 2056, 2059, 2061, 2054, 2060, 2063, 2065, 2067, 2063, 2060, 2066, 2061, 2065, 2068, 0, 2066, 2064, 0, 2064, 2072, 0, 2069, 2067, 2063, 2071, 2073, 2078, 0, 0, 2061, 2075, 2068, 2063, 2065, 2067, 2063, 2069, 2077, 2076, 2071, 2068, 2072, 2066, 2081, 2075, 2076, 2072, 2073, 2069, 2079, 2080, 2071, 2073, 2078, 2081, 2077, 2082, 2075, 2079, 2080, 2083, 2087, 2088, 2085, 2077, 2076, 2086, 2090, 2087, 2082, 2081, 2095, 2083, 2089, 2101, 2096, 2079, 2080, 2085, 2096, 0, 2086, 0, 2082, 2088, 2090, 2093, 2083, 2087, 2088, 2085, 2097, 2095, 2086, 2090, 2089, 2098, 2100, 2095, 2093, 2089, 2101, 2096, 2097, 2099, 2098, 2099, 2093, 2103, 2102, 2105, 2104, 2106, 2093, 2107, 2100, 2108, 2109, 2097, 2104, 2110, 2108, 2109, 2098, 2100, 2111, 2093, 2102, 2107, 2112, 2124, 2099, 2113, 2105, 2106, 2103, 2102, 2105, 2104, 2106, 2114, 2107, 2117, 2108, 2129, 0, 2118, 2114, 2119, 2109, 2120, 2113, 2110, 2112, 2121, 2122, 2112, 2111, 2126, 2113, 2118, 2125, 2124, 2127, 2128, 2123, 2119, 2114, 0, 2117, 2122, 2118, 2118, 2118, 2123, 2119, 2129, 2120, 2131, 2133, 2121, 2121, 2122, 2125, 2126, 2126, 2128, 2118, 2125, 2132, 2127, 2128, 2123, 2134, 0, 2136, 2132, 2136, 2118, 2137, 2134, 2131, 2133, 2138, 0, 2131, 2133, 2138, 2141, 2140, 2144, 2139, 2143, 2142, 2146, 2148, 2132, 2141, 0, 2143, 2134, 2137, 2136, 2139, 2142, 2147, 2137, 2148, 2145, 2149, 2138, 2140, 2144, 2145, 2152, 2141, 2140, 2144, 2139, 2143, 2142, 2146, 2148, 2150, 2150, 2151, 2154, 2157, 2147, 2152, 2153, 2149, 2147, 2155, 2151, 2145, 2149, 2156, 2153, 2159, 2162, 2152, 2163, 2160, 2162, 2163, 2156, 2155, 2154, 2169, 2150, 2160, 2151, 2154, 2157, 2161, 2165, 2153, 2159, 2166, 2155, 2169, 2165, 2161, 2156, 2164, 2159, 2162, 2172, 2163, 2160, 2167, 2173, 2164, 2166, 2171, 2169, 2167, 2174, 2175, 0, 2172, 2161, 2165, 2177, 2176, 2166, 2178, 2182, 2171, 2181, 2179, 2164, 2173, 2183, 2172, 2180, 2184, 2167, 2173, 2187, 2178, 2171, 2174, 2179, 2174, 2175, 2176, 2177, 2189, 2180, 2177, 2176, 2185, 2178, 2182, 2181, 2181, 2179, 2183, 2186, 2183, 2190, 2180, 2184, 2185, 2187, 2187, 2188, 2191, 2193, 2188, 2194, 2196, 2186, 2195, 2189, 2197, 2198, 2194, 2185, 2200, 2195, 2202, 2204, 2199, 2188, 2186, 2196, 2190, 2205, 2191, 2193, 2199, 2201, 2188, 2191, 2193, 2188, 2194, 2196, 2203, 2195, 2201, 2197, 2198, 2204, 2206, 2200, 2207, 2202, 2204, 2199, 2203, 2208, 2210, 2209, 2205, 2212, 2213, 2215, 2201, 2207, 2210, 2219, 2214, 2216, 2217, 2203, 2209, 2220, 2218, 2208, 2214, 2206, 2216, 2207, 0, 2223, 2219, 2212, 2208, 2210, 2209, 0, 2212, 2213, 2215, 2217, 2222, 2219, 2219, 2214, 2216, 2217, 2218, 2221, 2220, 2218, 2225, 2226, 2222, 2227, 2223, 2221, 2223, 2219, 2229, 2226, 2230, 2231, 2225, 2232, 2230, 2229, 2233, 2222, 2234, 2235, 2236, 2237, 2239, 2231, 2221, 0, 2234, 2225, 2226, 2242, 2227, 2251, 2236, 2237, 2241, 2229, 2232, 2230, 2231, 2246, 2232, 2235, 2242, 2233, 2240, 2234, 2235, 2236, 2237, 2239, 2243, 2240, 2247, 2244, 2241, 0, 2242, 2245, 2245, 2243, 2248, 2241, 2244, 2251, 2253, 2246, 2246, 2252, 2259, 2259, 2247, 2240, 2264, 2249, 2254, 2256, 2255, 2243, 2255, 2247, 2244, 2263, 2252, 2258, 2245, 2248, 2253, 2248, 2249, 2256, 2249, 2253, 2257, 2263, 2252, 2259, 2254, 2249, 2257, 2261, 2249, 2254, 2256, 2255, 2264, 2258, 2262, 2265, 2263, 2266, 2258, 0, 2269, 2265, 2269, 2249, 2267, 2249, 2268, 2257, 2271, 2261, 2270, 2277, 2272, 0, 2261, 0, 2262, 2278, 2273, 2279, 2274, 2262, 2265, 2275, 2270, 2285, 2267, 2269, 2268, 2266, 2272, 2267, 2271, 2268, 2283, 2271, 2273, 2270, 2274, 2272, 2276, 2275, 2279, 2277, 2281, 2273, 2279, 2274, 2284, 2278, 2275, 2281, 2283, 2276, 2286, 2287, 2288, 2285, 2288, 2290, 2292, 2283, 2286, 2288, 2296, 2291, 2293, 2276, 0, 0, 2290, 2281, 2294, 2297, 2284, 2284, 2291, 2287, 2293, 2296, 2286, 2286, 2287, 2288, 2297, 2288, 2290, 2292, 2299, 2286, 2294, 2296, 2291, 2293, 2298, 2301, 2302, 2303, 2304, 2294, 2297, 2305, 2308, 2299, 2303, 2306, 2298, 2311, 2310, 2309, 2312, 2314, 0, 2304, 2315, 2299, 2313, 2321, 2302, 2301, 2316, 2298, 2301, 2302, 2303, 2304, 0, 2315, 2305, 2308, 2310, 2306, 2306, 2309, 2313, 2310, 2309, 2317, 2314, 2311, 2318, 2315, 2312, 2313, 2320, 2322, 2316, 2316, 2319, 2321, 0, 2323, 2317, 2318, 2325, 2326, 2319, 2327, 2322, 0, 2333, 2328, 2329, 0, 2317, 0, 0, 2318, 2330, 2331, 2320, 2320, 2322, 2323, 2332, 2319, 2331, 2325, 2323, 2326, 2329, 2325, 2326, 2328, 2327, 2334, 2330, 2333, 2328, 2329, 2339, 2336, 2340, 2337, 2342, 2330, 2331, 2332, 2338, 2334, 2337, 2332, 2341, 2339, 2343, 2338, 2344, 0, 2354, 2341, 0, 2368, 2334, 2336, 2345, 2340, 2342, 2339, 2336, 2340, 2337, 2342, 2346, 2345, 2347, 2338, 2348, 2344, 2349, 2341, 2346, 2351, 2347, 2344, 2349, 2353, 2343, 2355, 2356, 2352, 2354, 2345, 2358, 2368, 2361, 0, 2351, 2370, 2348, 2346, 2352, 2347, 2362, 2348, 2360, 2349, 2355, 2353, 2351, 2364, 2358, 2367, 2353, 2356, 2355, 2356, 2352, 2360, 2369, 2358, 2361, 2361, 2363, 2363, 2370, 2371, 2362, 2374, 2376, 2362, 2379, 2360, 2386, 2369, 2367, 2364, 2364, 2376, 2367, 2382, 2378, 2379, 2384, 2371, 2388, 2369, 2383, 2383, 2385, 2363, 2390, 2391, 2371, 2378, 2374, 2376, 2400, 2379, 2394, 2386, 2393, 2382, 2397, 2392, 2384, 2393, 2382, 2378, 2396, 2384, 2385, 2388, 2403, 2383, 2392, 2385, 2396, 2391, 2391, 2398, 2394, 2399, 2390, 2400, 2402, 2394, 2397, 2393, 2404, 2397, 2392, 2405, 2407, 2408, 2398, 2396, 2399, 2404, 2412, 2409, 2410, 2413, 2402, 2405, 2403, 0, 2398, 2409, 2399, 2410, 2414, 2402, 2415, 2416, 2417, 2404, 2419, 2408, 2405, 2407, 2408, 2415, 2418, 2421, 2412, 2412, 2409, 2410, 2413, 2419, 2422, 2416, 2414, 2420, 2425, 2423, 2417, 2414, 2421, 2415, 2416, 2417, 2423, 2419, 2424, 2426, 2420, 2418, 2427, 2418, 2421, 2424, 2422, 2428, 2429, 2430, 2425, 2422, 2431, 0, 2420, 2425, 2423, 2433, 2432, 0, 2434, 2431, 2435, 2436, 2430, 2424, 2426, 2439, 2441, 2427, 2442, 2438, 0, 0, 2428, 2429, 2430, 2435, 2436, 2431, 2432, 2437, 2438, 2433, 2433, 2432, 2434, 2434, 2437, 2435, 2436, 2440, 2444, 2443, 2439, 2441, 2445, 2442, 2438, 2440, 2446, 2451, 2448, 2447, 2449, 2450, 0, 2444, 2437, 2443, 2447, 2449, 2450, 2453, 2453, 2446, 2445, 2452, 2440, 2444, 2443, 2459, 2455, 2445, 2448, 2457, 2454, 2446, 2451, 2448, 2447, 2449, 2450, 2454, 2456, 2452, 2455, 2456, 2457, 2458, 2453, 2460, 2464, 2461, 2452, 2462, 2466, 2459, 2459, 2455, 2466, 2464, 2457, 2454, 2458, 2461, 2467, 2462, 2465, 2460, 2469, 2456, 2468, 2465, 2470, 2471, 2458, 2472, 2460, 2464, 2461, 2473, 2462, 2466, 2475, 2468, 2477, 2479, 2481, 2478, 2467, 0, 2469, 2467, 0, 2465, 2470, 2469, 2478, 2468, 2481, 2470, 2471, 2479, 2472, 2487, 2489, 2473, 2473, 2480, 2475, 2475, 2477, 2477, 2479, 2481, 2478, 2480, 2483, 2484, 2486, 2485, 2488, 2487, 2493, 2483, 2485, 2486, 2484, 2488, 2490, 2489, 2487, 2489, 2491, 2492, 2480, 2490, 2495, 2496, 2499, 2498, 2501, 2491, 2492, 2483, 2484, 2486, 2485, 2488, 2493, 2493, 2496, 2497, 2502, 2503, 2505, 2490, 2497, 2498, 2501, 2491, 2492, 2504, 2503, 2495, 2496, 2499, 2498, 2501, 2507, 2511, 2504, 2506, 2512, 2508, 2505, 2509, 2510, 2507, 2497, 2502, 2503, 2505, 2508, 2506, 2510, 2513, 2509, 2515, 2504, 2516, 2517, 2518, 2513, 2520, 2527, 2507, 2511, 2514, 2506, 2512, 2508, 2519, 2509, 2510, 2523, 2520, 2514, 2521, 2515, 2522, 2519, 2524, 2513, 2526, 2515, 2521, 2516, 2517, 2524, 2527, 2520, 2527, 2522, 2518, 2514, 2525, 2523, 2528, 2519, 2530, 2529, 2523, 2525, 2532, 2521, 2526, 2522, 2535, 2524, 2537, 2526, 2532, 0, 2534, 2536, 2535, 2537, 2538, 0, 2545, 0, 2539, 2525, 2544, 2528, 2529, 2530, 2529, 2539, 2536, 2532, 2534, 2548, 2547, 2535, 2540, 2537, 2546, 2543, 2538, 2534, 2536, 2547, 2540, 2538, 2543, 2545, 2544, 2539, 2546, 2544, 2549, 2551, 2554, 2550, 2555, 2553, 2556, 2558, 2548, 2547, 2561, 2540, 0, 2546, 2543, 2550, 2549, 2553, 2565, 2558, 2556, 2564, 2566, 2563, 2551, 2554, 2568, 2549, 2551, 2554, 2550, 2555, 2553, 2556, 2558, 2559, 2560, 2561, 2563, 2564, 2570, 2565, 2559, 2560, 2567, 2565, 2569, 2574, 2564, 2566, 2563, 2572, 2567, 2568, 2571, 0, 2579, 2573, 2570, 2581, 0, 2584, 2559, 2560, 2573, 2571, 2572, 2570, 2569, 2585, 2580, 2567, 2586, 2569, 2574, 2580, 2582, 2583, 2572, 2584, 2587, 2571, 2579, 2579, 2573, 2589, 2581, 2585, 2584, 2592, 2582, 2583, 2587, 2593, 2596, 2594, 2585, 2580, 2597, 2586, 2598, 2595, 2601, 2582, 2583, 2599, 2597, 2587, 2594, 2602, 2605, 2592, 2589, 2596, 2601, 2593, 2592, 2603, 2598, 2606, 2593, 2596, 2594, 2595, 2599, 2597, 2604, 2598, 2595, 2601, 2607, 2602, 2599, 2609, 2608, 2615, 2602, 2605, 2604, 2603, 2610, 2611, 2612, 2613, 2603, 2614, 2606, 2615, 2617, 2610, 2611, 2616, 2618, 2604, 2608, 2609, 2622, 2607, 2623, 2624, 2609, 2608, 2615, 2621, 2624, 2613, 2625, 2610, 2611, 2628, 2613, 2614, 2614, 2616, 2612, 2617, 2626, 2621, 2616, 2618, 0, 2627, 2623, 2622, 2629, 2623, 2631, 2630, 2625, 2634, 2621, 2624, 2635, 2625, 2627, 2634, 2633, 2636, 2626, 2637, 2632, 2628, 0, 2626, 2631, 2638, 2641, 2629, 2627, 2630, 2640, 2629, 2632, 2631, 2630, 2633, 2634, 2642, 2646, 2644, 2638, 2637, 2648, 2633, 2635, 2647, 2637, 2632, 2641, 2636, 2640, 2648, 2638, 2641, 2644, 2650, 2649, 2640, 2651, 2653, 2646, 2642, 2652, 2657, 2642, 2646, 2644, 2647, 0, 2648, 2649, 2656, 2647, 2650, 2662, 2658, 2651, 2653, 2664, 2661, 2656, 2662, 2650, 2649, 2663, 2651, 2653, 2661, 2652, 2652, 2665, 2666, 2663, 2669, 2667, 2657, 2658, 2668, 2656, 2666, 2670, 2662, 2658, 2672, 2676, 2664, 2661, 2674, 2670, 2668, 2665, 2663, 2667, 2675, 2674, 2672, 2678, 2665, 2666, 2679, 2669, 2667, 2680, 2677, 2668, 2677, 2681, 2670, 2682, 2688, 2672, 2676, 2686, 0, 2674, 2683, 2675, 2690, 2685, 2689, 2675, 0, 2694, 2695, 2696, 2691, 2686, 2682, 2678, 2697, 2677, 2679, 2695, 2681, 2680, 2682, 2685, 2683, 2691, 2686, 2690, 2688, 2683, 2689, 2690, 2685, 2689, 2692, 2694, 2694, 2695, 2696, 2691, 2699, 2700, 2703, 2697, 2701, 2705, 2692, 2707, 2706, 2708, 2709, 2711, 2705, 2712, 2708, 2714, 2715, 0, 2711, 2717, 2716, 2692, 2707, 2722, 2700, 2709, 2701, 2699, 2700, 2703, 2706, 2701, 2705, 2717, 2707, 2706, 2719, 2709, 2711, 2712, 2712, 2708, 2714, 2715, 2716, 2719, 2717, 2716, 2721, 2724, 2722, 2723, 2725, 2726, 2727, 2721, 2728, 2729, 2730, 2731, 2741, 2736, 2732, 2719, 2725, 2728, 2736, 2737, 2727, 0, 2729, 2737, 2742, 2743, 2742, 2721, 2724, 2723, 2723, 2725, 2726, 2727, 2740, 2728, 2729, 2732, 2731, 2744, 2738, 2732, 2730, 2739, 2741, 2736, 2737, 2738, 2743, 2747, 2739, 2742, 2743, 2749, 2750, 2740, 2752, 0, 2752, 2754, 2753, 2740, 2758, 2755, 2755, 2760, 2744, 2738, 2757, 2758, 2739, 2747, 2749, 2755, 2756, 2759, 2747, 2757, 2750, 0, 2749, 2750, 0, 2752, 2753, 2754, 2754, 2753, 2759, 2758, 2755, 2755, 2760, 2761, 0, 2757, 2756, 2762, 2763, 2764, 2765, 2756, 2759, 2766, 2767, 2762, 2761, 2764, 2766, 2767, 2768, 2763, 2769, 0, 2770, 0, 2771, 0, 2768, 2765, 2761, 2762, 2772, 2774, 2762, 2763, 2764, 2765, 2773, 2775, 2778, 2776, 2762, 0, 2774, 2766, 2767, 2768, 2776, 2769, 2770, 2770, 2771, 2771, 2777, 2777, 2780, 2781, 2772, 2772, 2774, 2775, 2778, 2779, 2773, 2773, 2775, 2778, 2776, 2782, 2783, 2779, 2785, 2786, 2787, 2781, 2782, 2783, 2780, 2788, 2790, 2777, 2791, 2780, 2781, 2792, 2793, 2795, 2788, 2801, 2779, 0, 2796, 2797, 0, 2800, 2782, 2783, 2787, 2785, 2786, 2787, 2791, 2798, 2800, 2802, 2788, 2790, 2793, 2791, 2796, 2797, 2792, 2793, 2795, 2803, 2801, 2804, 2805, 2796, 2797, 2798, 2800, 2806, 2807, 2804, 2808, 2815, 2802, 2807, 2798, 2809, 2802, 2803, 2805, 2806, 2810, 2817, 2814, 2818, 2808, 2819, 2803, 2819, 2804, 2805, 2820, 2822, 2830, 2809, 2806, 2823, 2818, 2808, 2815, 2820, 2807, 2824, 2809, 2810, 2814, 2828, 2844, 2810, 2817, 2814, 2818, 2832, 2819, 2823, 2836, 2837, 2824, 2820, 2822, 2827, 2829, 2827, 2823, 2828, 2830, 2834, 2832, 2829, 2824, 2838, 2839, 2834, 2828, 2844, 0, 2845, 2836, 2837, 2832, 2841, 2846, 2836, 2837, 2850, 2848, 2847, 2827, 2829, 2839, 2852, 2842, 2848, 2834, 2842, 0, 2838, 2838, 2839, 2855, 0, 2849, 2841, 2845, 2847, 2853, 2850, 2841, 2846, 2849, 2856, 2850, 2848, 2847, 2854, 2857, 2859, 2842, 2842, 2856, 2861, 2842, 2852, 2858, 2860, 0, 2855, 2853, 2849, 2858, 2857, 2863, 2853, 2860, 2865, 0, 2854, 2856, 2859, 2868, 2866, 2854, 2857, 2859, 2862, 2869, 2862, 2867, 2870, 2875, 2858, 2860, 2861, 2869, 2879, 2908, 2871, 2865, 2863, 2877, 2870, 2865, 2866, 2873, 2878, 2868, 2868, 2866, 2871, 2867, 2873, 2862, 2869, 2877, 2867, 2870, 2875, 2879, 2878, 2880, 2882, 2879, 2881, 2871, 2883, 0, 2877, 2908, 2882, 2885, 2873, 2878, 2884, 2881, 2886, 2887, 2889, 2880, 2888, 2888, 2890, 2893, 2894, 2883, 2887, 2898, 2880, 2882, 2890, 2881, 0, 2883, 2886, 2903, 2884, 2885, 2885, 2905, 2896, 2884, 2900, 2886, 2887, 2889, 2896, 2888, 2901, 2890, 2893, 2894, 2902, 2900, 2898, 2907, 2909, 2903, 2906, 2901, 2909, 2912, 2903, 2902, 2910, 2906, 2905, 2896, 2913, 2900, 2914, 2915, 2910, 2907, 2919, 2901, 2923, 2918, 2914, 2902, 2920, 2913, 2907, 2909, 2918, 2906, 2924, 2912, 2912, 2922, 2926, 2910, 2925, 2928, 2922, 2913, 2927, 2914, 2915, 2925, 2930, 2929, 2920, 2923, 2918, 0, 2919, 2920, 2929, 2926, 2931, 2928, 2927, 2924, 2932, 2933, 2922, 2926, 2931, 2925, 2928, 2934, 2933, 2927, 2936, 2935, 2941, 2942, 2929, 2932, 2940, 2943, 2930, 2941, 2945, 0, 2926, 2931, 2944, 2952, 2949, 2932, 2933, 0, 0, 2940, 2946, 2948, 2934, 2935, 2936, 2936, 2935, 2941, 2950, 2946, 2951, 2940, 2943, 2942, 2953, 2953, 2944, 2954, 2951, 2944, 2945, 2949, 2959, 2948, 2953, 2952, 2960, 2946, 2948, 2957, 2950, 2956, 2958, 2965, 2958, 2950, 2959, 2951, 2957, 2961, 2962, 2953, 2953, 2963, 2954, 2966, 2956, 2961, 2970, 2959, 2968, 2962, 2967, 2960, 2969, 2971, 2957, 2972, 2956, 2958, 2965, 2963, 2975, 2968, 2973, 2976, 2961, 2962, 2974, 2974, 2963, 2978, 2966, 2986, 2967, 2970, 2969, 2968, 2973, 2967, 2981, 2969, 2971, 2988, 2972, 2983, 2997, 2976, 2981, 2994, 2983, 2973, 2976, 2991, 2975, 2974, 2984, 2985, 2978, 2986, 2986, 2984, 2985, 2989, 2989, 2990, 2991, 2981, 2992, 2993, 2988, 2995, 2983, 2990, 2998, 2992, 2994, 2999, 2997, 3003, 2991, 2998, 3005, 2984, 2985, 2999, 3000, 2993, 3006, 3007, 2989, 3008, 2990, 3011, 0, 2992, 2993, 3009, 2995, 3010, 3012, 2998, 3007, 3016, 2999, 0, 3003, 3014, 3000, 3005, 3006, 0, 3009, 3000, 3014, 3006, 3007, 3017, 3010, 3018, 3011, 3015, 3012, 3008, 3009, 3016, 3010, 3012, 3015, 3021, 3016, 3020, 3017, 3028, 3014, 3022, 3023, 3021, 3025, 3028, 3018, 3026, 3022, 3023, 3017, 3029, 3018, 3025, 3015, 3031, 3020, 3033, 3026, 3034, 3027, 3027, 3021, 3041, 3020, 3032, 3028, 3037, 3022, 3023, 3027, 3025, 3032, 3029, 3026, 3042, 3036, 3031, 3029, 3038, 0, 3034, 3031, 3036, 3043, 3047, 3034, 3027, 3027, 3033, 3041, 3037, 3032, 3038, 3037, 3048, 3049, 3050, 3052, 3054, 3054, 0, 3042, 3036, 3049, 3058, 3038, 3043, 3055, 3055, 0, 3043, 3047, 3056, 3060, 3059, 0, 3048, 3062, 3065, 3061, 3068, 3048, 3049, 3050, 3052, 3065, 3058, 3054, 3061, 3067, 3062, 3058, 3059, 3072, 3073, 3056, 3055, 3074, 3080, 3056, 3060, 3059, 3066, 3077, 3062, 3065, 3061, 3068, 3071, 3066, 3071, 3067, 3077, 3072, 3075, 3074, 3067, 3073, 3078, 3081, 3072, 3073, 3079, 0, 3074, 3080, 3075, 3082, 3083, 3066, 3077, 3086, 3088, 3085, 3084, 3071, 3078, 3084, 3085, 3082, 3087, 3075, 3087, 3093, 3088, 3078, 3081, 3089, 3079, 3079, 3083, 3090, 3084, 3089, 3082, 3083, 3094, 3091, 3092, 3088, 3095, 3084, 3096, 3086, 3084, 3085, 3092, 3087, 3097, 3099, 3093, 3098, 3102, 3090, 3089, 3104, 3105, 3108, 3090, 3091, 3109, 3095, 3110, 3098, 3091, 3092, 3111, 3095, 3094, 3096, 3112, 3099, 3113, 3114, 3105, 3097, 3099, 3115, 3098, 3102, 3116, 3116, 3104, 3105, 3108, 3118, 3119, 3109, 3120, 3110, 3121, 3122, 3125, 3111, 3124, 3127, 3126, 3112, 3122, 3113, 3114, 3128, 3124, 3118, 3115, 3121, 3120, 3116, 3126, 3127, 3129, 3131, 3118, 3119, 3130, 3120, 3128, 3121, 3122, 3125, 3134, 3124, 3127, 3126, 3135, 3138, 3130, 3137, 3128, 3134, 3136, 3136, 3140, 3141, 3138, 3144, 3129, 3129, 3131, 3143, 3145, 3130, 3142, 3144, 0, 3149, 0, 3134, 3135, 3145, 3152, 3135, 3138, 3137, 3137, 3142, 3140, 3136, 3148, 3140, 3146, 3143, 3144, 3149, 3153, 3141, 3143, 3145, 3165, 3142, 3166, 3146, 3149, 3152, 3156, 3156, 3153, 3152, 3168, 3148, 3169, 3170, 3171, 3175, 3173, 3148, 3174, 3146, 3173, 3176, 3165, 3153, 3168, 3181, 3166, 3165, 3176, 3166, 3179, 3177, 0, 3156, 3179, 3180, 3174, 3168, 3175, 3169, 3170, 3171, 3175, 3173, 3177, 3174, 3182, 3181, 3176, 3183, 3185, 3180, 3181, 3184, 3192, 3186, 3187, 3179, 3177, 3188, 3190, 3183, 3180, 3186, 3185, 3187, 3189, 3191, 3189, 3192, 3188, 3182, 3190, 3182, 3193, 3195, 3183, 3185, 3194, 3184, 3184, 3192, 3186, 3187, 3194, 3191, 3188, 3190, 3196, 3198, 3202, 3197, 3203, 3189, 3191, 3204, 3193, 3195, 3197, 3203, 3206, 3193, 3195, 3202, 3207, 3194, 3205, 3208, 3209, 0, 3217, 3198, 3210, 3212, 3211, 3196, 3198, 3202, 3197, 3203, 3210, 3211, 3204, 3213, 3205, 3214, 3215, 3206, 3215, 3220, 3207, 3207, 3216, 3205, 3208, 3209, 3218, 3212, 3221, 3210, 3212, 3211, 3217, 3219, 3216, 3213, 3223, 3214, 3222, 3218, 3213, 3220, 3214, 3215, 3225, 3222, 3220, 3226, 3219, 3216, 3227, 3228, 3230, 3218, 3235, 3221, 3236, 3232, 3227, 3226, 3219, 3237, 3238, 3223, 3230, 3222, 3232, 3239, 3240, 3244, 3238, 3225, 0, 0, 3226, 3245, 3242, 3227, 3228, 3230, 3237, 3235, 3236, 3236, 3232, 3241, 3243, 3247, 3237, 3238, 3242, 3244, 3253, 3254, 3243, 3250, 3244, 3251, 3241, 3239, 3240, 3250, 3245, 3242, 3251, 3253, 3257, 3259, 3256, 3258, 3261, 3260, 3241, 3243, 3247, 3256, 3254, 3258, 3261, 3253, 3254, 3259, 3250, 3262, 3251, 3260, 3263, 3264, 3257, 3270, 3271, 3268, 3267, 3257, 3259, 3256, 3258, 3261, 3260, 3267, 3268, 3269, 3272, 3273, 3274, 3262, 0, 3278, 3263, 3269, 3262, 3275, 3271, 3263, 3264, 3276, 3270, 3271, 3268, 3267, 3280, 3281, 3282, 3284, 3277, 3286, 3274, 3285, 3269, 3273, 3273, 3274, 3277, 3275, 3272, 3285, 3287, 3276, 3275, 3278, 3289, 3291, 3276, 3281, 3287, 3286, 3284, 3280, 3281, 3282, 3284, 3277, 3286, 3288, 3285, 3291, 3290, 0, 3293, 3295, 3297, 3288, 3300, 3287, 3290, 3301, 3298, 3299, 3291, 0, 3296, 0, 3289, 3296, 3298, 3299, 3300, 3302, 3305, 3305, 3288, 3303, 3297, 3290, 3293, 3293, 3295, 3297, 3296, 3300, 3306, 3301, 3301, 3298, 3299, 3303, 3308, 3296, 3307, 3302, 3296, 3309, 3310, 0, 3302, 3305, 3307, 3312, 3303, 3313, 3311, 3314, 0, 3316, 3315, 3312, 3306, 3306, 3323, 0, 3320, 0, 3308, 3308, 3310, 3307, 3317, 3309, 3309, 3310, 3311, 3318, 3326, 3314, 3312, 3319, 3313, 3311, 3314, 3315, 3316, 3315, 3320, 3319, 3321, 3323, 3317, 3320, 3324, 3328, 3327, 3318, 3321, 3317, 3326, 3329, 3324, 3328, 3318, 3326, 3330, 3332, 3319, 3329, 3335, 3333, 3334, 3336, 3339, 3337, 3340, 3321, 3327, 3333, 3334, 3324, 3328, 3327, 3341, 3343, 3346, 0, 3329, 3349, 0, 3350, 3330, 3330, 3332, 3337, 3335, 3335, 3333, 3334, 3336, 3339, 3337, 3340, 3341, 0, 3347, 3343, 3346, 3348, 0, 3341, 3343, 3346, 3347, 0, 3349, 3348, 3350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3347, 0, 0, 3348, 3354, 3354, 3354, 3354, 3354, 3354, 3354, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3356, 3356, 3356, 3356, 3356, 3356, 3356, 3357, 3357, 3357, 3357, 3357, 3357, 3357, 3358, 3358, 3358, 3358, 3358, 3358, 3358, 3359, 3359, 3359, 3359, 3359, 3359, 3359, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3362, 3362, 0, 3362, 3362, 3362, 3362, 3363, 3363, 0, 0, 0, 3363, 3363, 3364, 3364, 0, 0, 3364, 0, 3364, 3365, 0, 0, 0, 0, 0, 3365, 3366, 3366, 0, 0, 0, 3366, 3366, 3367, 0, 0, 0, 0, 0, 3367, 3368, 3368, 0, 3368, 3368, 3368, 3368, 3369, 0, 0, 0, 0, 0, 3369, 3370, 3370, 0, 0, 0, 3370, 3370, 3371, 3371, 0, 3371, 3371, 3371, 3371, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected static int yy_more_flag = 0; static int yy_more_len = 0; #define yymore() ((yy_more_flag) = 1) #define YY_MORE_ADJ (yy_more_len) #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "util/configlexer.lex" #line 2 "util/configlexer.lex" /* * configlexer.lex - lexical analyzer for unbound config file * * Copyright (c) 2001-2006, NLnet Labs. All rights reserved * * See LICENSE for the license. * */ /* because flex keeps having sign-unsigned compare problems that are unfixed*/ #if defined(__clang__)||(defined(__GNUC__)&&((__GNUC__ >4)||(defined(__GNUC_MINOR__)&&(__GNUC__ ==4)&&(__GNUC_MINOR__ >=2)))) #pragma GCC diagnostic ignored "-Wsign-compare" #endif #include #include #ifdef HAVE_GLOB_H # include #endif #include "util/config_file.h" #include "util/configparser.h" void ub_c_error(const char *message); #if 0 #define LEXOUT(s) printf s /* used ONLY when debugging */ #else #define LEXOUT(s) #endif /** avoid warning in about fwrite return value */ #define ECHO ub_c_error_msg("syntax error at text: %s", yytext) /** A parser variable, this is a statement in the config file which is * of the form variable: value1 value2 ... nargs is the number of values. */ #define YDVAR(nargs, var) \ num_args=(nargs); \ LEXOUT(("v(%s%d) ", yytext, num_args)); \ if(num_args > 0) { BEGIN(val); } \ return (var); struct inc_state { char* filename; int line; YY_BUFFER_STATE buffer; struct inc_state* next; int inc_toplevel; }; static struct inc_state* config_include_stack = NULL; static int inc_depth = 0; static int inc_prev = 0; static int num_args = 0; static int inc_toplevel = 0; void init_cfg_parse(void) { config_include_stack = NULL; inc_depth = 0; inc_prev = 0; num_args = 0; inc_toplevel = 0; } static void config_start_include(const char* filename, int toplevel) { FILE *input; struct inc_state* s; char* nm; if(inc_depth+1 > 100000) { ub_c_error_msg("too many include files"); return; } if(*filename == '\0') { ub_c_error_msg("empty include file name"); return; } s = (struct inc_state*)malloc(sizeof(*s)); if(!s) { ub_c_error_msg("include %s: malloc failure", filename); return; } if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot, strlen(cfg_parser->chroot)) == 0) { filename += strlen(cfg_parser->chroot); } nm = strdup(filename); if(!nm) { ub_c_error_msg("include %s: strdup failure", filename); free(s); return; } input = fopen(filename, "r"); if(!input) { ub_c_error_msg("cannot open include file '%s': %s", filename, strerror(errno)); free(s); free(nm); return; } LEXOUT(("switch_to_include_file(%s)\n", filename)); inc_depth++; s->filename = cfg_parser->filename; s->line = cfg_parser->line; s->buffer = YY_CURRENT_BUFFER; s->inc_toplevel = inc_toplevel; s->next = config_include_stack; config_include_stack = s; cfg_parser->filename = nm; cfg_parser->line = 1; inc_toplevel = toplevel; yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE)); } static void config_start_include_glob(const char* filename, int toplevel) { /* check for wildcards */ #ifdef HAVE_GLOB glob_t g; int i, r, flags; if(!(!strchr(filename, '*') && !strchr(filename, '?') && !strchr(filename, '[') && !strchr(filename, '{') && !strchr(filename, '~'))) { flags = 0 #ifdef GLOB_ERR | GLOB_ERR #endif /* do not set GLOB_NOSORT so the results are sorted and in a predictable order. */ #ifdef GLOB_BRACE | GLOB_BRACE #endif #ifdef GLOB_TILDE | GLOB_TILDE #endif ; memset(&g, 0, sizeof(g)); if(cfg_parser->chroot && strncmp(filename, cfg_parser->chroot, strlen(cfg_parser->chroot)) == 0) { filename += strlen(cfg_parser->chroot); } r = glob(filename, flags, NULL, &g); if(r) { /* some error */ globfree(&g); if(r == GLOB_NOMATCH) return; /* no matches for pattern */ config_start_include(filename, toplevel); /* let original deal with it */ return; } /* process files found, if any */ for(i=(int)g.gl_pathc-1; i>=0; i--) { config_start_include(g.gl_pathv[i], toplevel); } globfree(&g); return; } #endif /* HAVE_GLOB */ config_start_include(filename, toplevel); } static void config_end_include(void) { struct inc_state* s = config_include_stack; --inc_depth; if(!s) return; free(cfg_parser->filename); cfg_parser->filename = s->filename; cfg_parser->line = s->line; yy_delete_buffer(YY_CURRENT_BUFFER); yy_switch_to_buffer(s->buffer); config_include_stack = s->next; inc_toplevel = s->inc_toplevel; free(s); } #ifndef yy_set_bol /* compat definition, for flex 2.4.6 */ #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_ch_buf[0] = ((at_bol)?'\n':' '); \ } #endif #line 3861 "" #define YY_NO_INPUT 1 #line 191 "util/configlexer.lex" #ifndef YY_NO_UNPUT #define YY_NO_UNPUT 1 #endif #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif #line 3870 "" #line 3872 "" #define INITIAL 0 #define quotedstring 1 #define singlequotedstr 2 #define include 3 #define include_quoted 4 #define val 5 #define include_toplevel 6 #define include_toplevel_quoted 7 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals ( void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy ( void ); int yyget_debug ( void ); void yyset_debug ( int debug_flag ); YY_EXTRA_TYPE yyget_extra ( void ); void yyset_extra ( YY_EXTRA_TYPE user_defined ); FILE *yyget_in ( void ); void yyset_in ( FILE * _in_str ); FILE *yyget_out ( void ); void yyset_out ( FILE * _out_str ); int yyget_leng ( void ); char *yyget_text ( void ); int yyget_lineno ( void ); void yyset_lineno ( int _line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap ( void ); #else extern int yywrap ( void ); #endif #endif #ifndef YY_NO_UNPUT #endif #ifndef yytext_ptr static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput ( void ); #else static int input ( void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex (void); #define YY_DECL int yylex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } { #line 211 "util/configlexer.lex" #line 4096 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { (yy_more_len) = 0; if ( (yy_more_flag) ) { (yy_more_len) = (int) ((yy_c_buf_p) - (yytext_ptr)); (yy_more_flag) = 0; } yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 3354 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 9568 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 212 "util/configlexer.lex" { LEXOUT(("SP ")); /* ignore */ } YY_BREAK case 2: YY_RULE_SETUP #line 214 "util/configlexer.lex" { /* note that flex makes the longest match and '.' is any but not nl */ LEXOUT(("comment(%s) ", yytext)); /* ignore */ } YY_BREAK case 3: YY_RULE_SETUP #line 217 "util/configlexer.lex" { YDVAR(0, VAR_SERVER) } YY_BREAK case 4: YY_RULE_SETUP #line 218 "util/configlexer.lex" { YDVAR(1, VAR_QNAME_MINIMISATION) } YY_BREAK case 5: YY_RULE_SETUP #line 219 "util/configlexer.lex" { YDVAR(1, VAR_QNAME_MINIMISATION_STRICT) } YY_BREAK case 6: YY_RULE_SETUP #line 220 "util/configlexer.lex" { YDVAR(1, VAR_NUM_THREADS) } YY_BREAK case 7: YY_RULE_SETUP #line 221 "util/configlexer.lex" { YDVAR(1, VAR_VERBOSITY) } YY_BREAK case 8: YY_RULE_SETUP #line 222 "util/configlexer.lex" { YDVAR(1, VAR_PORT) } YY_BREAK case 9: YY_RULE_SETUP #line 223 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_RANGE) } YY_BREAK case 10: YY_RULE_SETUP #line 224 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_PORT_PERMIT) } YY_BREAK case 11: YY_RULE_SETUP #line 225 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_PORT_AVOID) } YY_BREAK case 12: YY_RULE_SETUP #line 226 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_NUM_TCP) } YY_BREAK case 13: YY_RULE_SETUP #line 227 "util/configlexer.lex" { YDVAR(1, VAR_INCOMING_NUM_TCP) } YY_BREAK case 14: YY_RULE_SETUP #line 228 "util/configlexer.lex" { YDVAR(1, VAR_DO_IP4) } YY_BREAK case 15: YY_RULE_SETUP #line 229 "util/configlexer.lex" { YDVAR(1, VAR_DO_IP6) } YY_BREAK case 16: YY_RULE_SETUP #line 230 "util/configlexer.lex" { YDVAR(1, VAR_PREFER_IP4) } YY_BREAK case 17: YY_RULE_SETUP #line 231 "util/configlexer.lex" { YDVAR(1, VAR_PREFER_IP6) } YY_BREAK case 18: YY_RULE_SETUP #line 232 "util/configlexer.lex" { YDVAR(1, VAR_DO_UDP) } YY_BREAK case 19: YY_RULE_SETUP #line 233 "util/configlexer.lex" { YDVAR(1, VAR_DO_TCP) } YY_BREAK case 20: YY_RULE_SETUP #line 234 "util/configlexer.lex" { YDVAR(1, VAR_TCP_UPSTREAM) } YY_BREAK case 21: YY_RULE_SETUP #line 235 "util/configlexer.lex" { YDVAR(1, VAR_TCP_MSS) } YY_BREAK case 22: YY_RULE_SETUP #line 236 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_TCP_MSS) } YY_BREAK case 23: YY_RULE_SETUP #line 237 "util/configlexer.lex" { YDVAR(1, VAR_TCP_IDLE_TIMEOUT) } YY_BREAK case 24: YY_RULE_SETUP #line 238 "util/configlexer.lex" { YDVAR(1, VAR_EDNS_TCP_KEEPALIVE) } YY_BREAK case 25: YY_RULE_SETUP #line 239 "util/configlexer.lex" { YDVAR(1, VAR_EDNS_TCP_KEEPALIVE_TIMEOUT) } YY_BREAK case 26: YY_RULE_SETUP #line 240 "util/configlexer.lex" { YDVAR(1, VAR_SSL_UPSTREAM) } YY_BREAK case 27: YY_RULE_SETUP #line 241 "util/configlexer.lex" { YDVAR(1, VAR_SSL_UPSTREAM) } YY_BREAK case 28: YY_RULE_SETUP #line 242 "util/configlexer.lex" { YDVAR(1, VAR_SSL_SERVICE_KEY) } YY_BREAK case 29: YY_RULE_SETUP #line 243 "util/configlexer.lex" { YDVAR(1, VAR_SSL_SERVICE_KEY) } YY_BREAK case 30: YY_RULE_SETUP #line 244 "util/configlexer.lex" { YDVAR(1, VAR_SSL_SERVICE_PEM) } YY_BREAK case 31: YY_RULE_SETUP #line 245 "util/configlexer.lex" { YDVAR(1, VAR_SSL_SERVICE_PEM) } YY_BREAK case 32: YY_RULE_SETUP #line 246 "util/configlexer.lex" { YDVAR(1, VAR_SSL_PORT) } YY_BREAK case 33: YY_RULE_SETUP #line 247 "util/configlexer.lex" { YDVAR(1, VAR_SSL_PORT) } YY_BREAK case 34: YY_RULE_SETUP #line 248 "util/configlexer.lex" { YDVAR(1, VAR_TLS_CERT_BUNDLE) } YY_BREAK case 35: YY_RULE_SETUP #line 249 "util/configlexer.lex" { YDVAR(1, VAR_TLS_CERT_BUNDLE) } YY_BREAK case 36: YY_RULE_SETUP #line 250 "util/configlexer.lex" { YDVAR(1, VAR_TLS_WIN_CERT) } YY_BREAK case 37: YY_RULE_SETUP #line 251 "util/configlexer.lex" { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 38: YY_RULE_SETUP #line 252 "util/configlexer.lex" { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 39: YY_RULE_SETUP #line 253 "util/configlexer.lex" { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 40: YY_RULE_SETUP #line 254 "util/configlexer.lex" { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) } YY_BREAK case 41: YY_RULE_SETUP #line 255 "util/configlexer.lex" { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) } YY_BREAK case 42: YY_RULE_SETUP #line 256 "util/configlexer.lex" { YDVAR(1, VAR_TLS_CIPHERS) } YY_BREAK case 43: YY_RULE_SETUP #line 257 "util/configlexer.lex" { YDVAR(1, VAR_TLS_CIPHERSUITES) } YY_BREAK case 44: YY_RULE_SETUP #line 258 "util/configlexer.lex" { YDVAR(1, VAR_TLS_USE_SNI) } YY_BREAK case 45: YY_RULE_SETUP #line 259 "util/configlexer.lex" { YDVAR(1, VAR_HTTPS_PORT) } YY_BREAK case 46: YY_RULE_SETUP #line 260 "util/configlexer.lex" { YDVAR(1, VAR_HTTP_ENDPOINT) } YY_BREAK case 47: YY_RULE_SETUP #line 261 "util/configlexer.lex" { YDVAR(1, VAR_HTTP_MAX_STREAMS) } YY_BREAK case 48: YY_RULE_SETUP #line 262 "util/configlexer.lex" { YDVAR(1, VAR_HTTP_QUERY_BUFFER_SIZE) } YY_BREAK case 49: YY_RULE_SETUP #line 263 "util/configlexer.lex" { YDVAR(1, VAR_HTTP_RESPONSE_BUFFER_SIZE) } YY_BREAK case 50: YY_RULE_SETUP #line 264 "util/configlexer.lex" { YDVAR(1, VAR_HTTP_NODELAY) } YY_BREAK case 51: YY_RULE_SETUP #line 265 "util/configlexer.lex" { YDVAR(1, VAR_HTTP_NOTLS_DOWNSTREAM) } YY_BREAK case 52: YY_RULE_SETUP #line 266 "util/configlexer.lex" { YDVAR(1, VAR_USE_SYSTEMD) } YY_BREAK case 53: YY_RULE_SETUP #line 267 "util/configlexer.lex" { YDVAR(1, VAR_DO_DAEMONIZE) } YY_BREAK case 54: YY_RULE_SETUP #line 268 "util/configlexer.lex" { YDVAR(1, VAR_INTERFACE) } YY_BREAK case 55: YY_RULE_SETUP #line 269 "util/configlexer.lex" { YDVAR(1, VAR_INTERFACE) } YY_BREAK case 56: YY_RULE_SETUP #line 270 "util/configlexer.lex" { YDVAR(1, VAR_OUTGOING_INTERFACE) } YY_BREAK case 57: YY_RULE_SETUP #line 271 "util/configlexer.lex" { YDVAR(1, VAR_INTERFACE_AUTOMATIC) } YY_BREAK case 58: YY_RULE_SETUP #line 272 "util/configlexer.lex" { YDVAR(1, VAR_SO_RCVBUF) } YY_BREAK case 59: YY_RULE_SETUP #line 273 "util/configlexer.lex" { YDVAR(1, VAR_SO_SNDBUF) } YY_BREAK case 60: YY_RULE_SETUP #line 274 "util/configlexer.lex" { YDVAR(1, VAR_SO_REUSEPORT) } YY_BREAK case 61: YY_RULE_SETUP #line 275 "util/configlexer.lex" { YDVAR(1, VAR_IP_TRANSPARENT) } YY_BREAK case 62: YY_RULE_SETUP #line 276 "util/configlexer.lex" { YDVAR(1, VAR_IP_FREEBIND) } YY_BREAK case 63: YY_RULE_SETUP #line 277 "util/configlexer.lex" { YDVAR(1, VAR_IP_DSCP) } YY_BREAK case 64: YY_RULE_SETUP #line 278 "util/configlexer.lex" { YDVAR(1, VAR_CHROOT) } YY_BREAK case 65: YY_RULE_SETUP #line 279 "util/configlexer.lex" { YDVAR(1, VAR_USERNAME) } YY_BREAK case 66: YY_RULE_SETUP #line 280 "util/configlexer.lex" { YDVAR(1, VAR_DIRECTORY) } YY_BREAK case 67: YY_RULE_SETUP #line 281 "util/configlexer.lex" { YDVAR(1, VAR_LOGFILE) } YY_BREAK case 68: YY_RULE_SETUP #line 282 "util/configlexer.lex" { YDVAR(1, VAR_PIDFILE) } YY_BREAK case 69: YY_RULE_SETUP #line 283 "util/configlexer.lex" { YDVAR(1, VAR_ROOT_HINTS) } YY_BREAK case 70: YY_RULE_SETUP #line 284 "util/configlexer.lex" { YDVAR(1, VAR_STREAM_WAIT_SIZE) } YY_BREAK case 71: YY_RULE_SETUP #line 285 "util/configlexer.lex" { YDVAR(1, VAR_EDNS_BUFFER_SIZE) } YY_BREAK case 72: YY_RULE_SETUP #line 286 "util/configlexer.lex" { YDVAR(1, VAR_MSG_BUFFER_SIZE) } YY_BREAK case 73: YY_RULE_SETUP #line 287 "util/configlexer.lex" { YDVAR(1, VAR_MSG_CACHE_SIZE) } YY_BREAK case 74: YY_RULE_SETUP #line 288 "util/configlexer.lex" { YDVAR(1, VAR_MSG_CACHE_SLABS) } YY_BREAK case 75: YY_RULE_SETUP #line 289 "util/configlexer.lex" { YDVAR(1, VAR_RRSET_CACHE_SIZE) } YY_BREAK case 76: YY_RULE_SETUP #line 290 "util/configlexer.lex" { YDVAR(1, VAR_RRSET_CACHE_SLABS) } YY_BREAK case 77: YY_RULE_SETUP #line 291 "util/configlexer.lex" { YDVAR(1, VAR_CACHE_MAX_TTL) } YY_BREAK case 78: YY_RULE_SETUP #line 292 "util/configlexer.lex" { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } YY_BREAK case 79: YY_RULE_SETUP #line 293 "util/configlexer.lex" { YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 80: YY_RULE_SETUP #line 294 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 81: YY_RULE_SETUP #line 295 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 82: YY_RULE_SETUP #line 296 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 83: YY_RULE_SETUP #line 297 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 84: YY_RULE_SETUP #line 298 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 85: YY_RULE_SETUP #line 299 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 86: YY_RULE_SETUP #line 300 "util/configlexer.lex" { YDVAR(1, VAR_INFRA_KEEP_PROBING) } YY_BREAK case 87: YY_RULE_SETUP #line 301 "util/configlexer.lex" { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 88: YY_RULE_SETUP #line 302 "util/configlexer.lex" { YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 89: YY_RULE_SETUP #line 303 "util/configlexer.lex" { YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 90: YY_RULE_SETUP #line 304 "util/configlexer.lex" { YDVAR(1, VAR_UDP_CONNECT) } YY_BREAK case 91: YY_RULE_SETUP #line 305 "util/configlexer.lex" { YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 92: YY_RULE_SETUP #line 306 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 93: YY_RULE_SETUP #line 307 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 94: YY_RULE_SETUP #line 308 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 95: YY_RULE_SETUP #line 309 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 96: YY_RULE_SETUP #line 310 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 97: YY_RULE_SETUP #line 311 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 98: YY_RULE_SETUP #line 312 "util/configlexer.lex" { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 99: YY_RULE_SETUP #line 313 "util/configlexer.lex" { YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 100: YY_RULE_SETUP #line 314 "util/configlexer.lex" { YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 101: YY_RULE_SETUP #line 315 "util/configlexer.lex" { YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 102: YY_RULE_SETUP #line 316 "util/configlexer.lex" { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 103: YY_RULE_SETUP #line 317 "util/configlexer.lex" { YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 104: YY_RULE_SETUP #line 318 "util/configlexer.lex" { YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 105: YY_RULE_SETUP #line 319 "util/configlexer.lex" { YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 106: YY_RULE_SETUP #line 320 "util/configlexer.lex" { YDVAR(1, VAR_PREFETCH) } YY_BREAK case 107: YY_RULE_SETUP #line 321 "util/configlexer.lex" { YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 108: YY_RULE_SETUP #line 322 "util/configlexer.lex" { YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 109: YY_RULE_SETUP #line 323 "util/configlexer.lex" { YDVAR(1, VAR_NAME) } YY_BREAK case 110: YY_RULE_SETUP #line 324 "util/configlexer.lex" { YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 111: YY_RULE_SETUP #line 325 "util/configlexer.lex" { YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 112: YY_RULE_SETUP #line 326 "util/configlexer.lex" { YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 113: YY_RULE_SETUP #line 327 "util/configlexer.lex" { YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 114: YY_RULE_SETUP #line 328 "util/configlexer.lex" { YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 115: YY_RULE_SETUP #line 329 "util/configlexer.lex" { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 116: YY_RULE_SETUP #line 330 "util/configlexer.lex" { YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 117: YY_RULE_SETUP #line 331 "util/configlexer.lex" { YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 118: YY_RULE_SETUP #line 332 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 119: YY_RULE_SETUP #line 333 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 120: YY_RULE_SETUP #line 334 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 121: YY_RULE_SETUP #line 335 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 122: YY_RULE_SETUP #line 336 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 123: YY_RULE_SETUP #line 337 "util/configlexer.lex" { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 124: YY_RULE_SETUP #line 338 "util/configlexer.lex" { YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 125: YY_RULE_SETUP #line 339 "util/configlexer.lex" { YDVAR(0, VAR_RPZ) } YY_BREAK case 126: YY_RULE_SETUP #line 340 "util/configlexer.lex" { YDVAR(1, VAR_TAGS) } YY_BREAK case 127: YY_RULE_SETUP #line 341 "util/configlexer.lex" { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 128: YY_RULE_SETUP #line 342 "util/configlexer.lex" { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 129: YY_RULE_SETUP #line 343 "util/configlexer.lex" { YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 130: YY_RULE_SETUP #line 344 "util/configlexer.lex" { YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 131: YY_RULE_SETUP #line 345 "util/configlexer.lex" { YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 132: YY_RULE_SETUP #line 346 "util/configlexer.lex" { YDVAR(1, VAR_MASTER) } YY_BREAK case 133: YY_RULE_SETUP #line 347 "util/configlexer.lex" { YDVAR(1, VAR_MASTER) } YY_BREAK case 134: YY_RULE_SETUP #line 348 "util/configlexer.lex" { YDVAR(1, VAR_URL) } YY_BREAK case 135: YY_RULE_SETUP #line 349 "util/configlexer.lex" { YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 136: YY_RULE_SETUP #line 350 "util/configlexer.lex" { YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 137: YY_RULE_SETUP #line 351 "util/configlexer.lex" { YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 138: YY_RULE_SETUP #line 352 "util/configlexer.lex" { YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 139: YY_RULE_SETUP #line 353 "util/configlexer.lex" { YDVAR(0, VAR_VIEW) } YY_BREAK case 140: YY_RULE_SETUP #line 354 "util/configlexer.lex" { YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 141: YY_RULE_SETUP #line 355 "util/configlexer.lex" { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 142: YY_RULE_SETUP #line 356 "util/configlexer.lex" { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 143: YY_RULE_SETUP #line 357 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 144: YY_RULE_SETUP #line 358 "util/configlexer.lex" { YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 145: YY_RULE_SETUP #line 359 "util/configlexer.lex" { YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 146: YY_RULE_SETUP #line 360 "util/configlexer.lex" { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 147: YY_RULE_SETUP #line 361 "util/configlexer.lex" { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 148: YY_RULE_SETUP #line 362 "util/configlexer.lex" { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 149: YY_RULE_SETUP #line 363 "util/configlexer.lex" { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 150: YY_RULE_SETUP #line 364 "util/configlexer.lex" { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 151: YY_RULE_SETUP #line 365 "util/configlexer.lex" { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 152: YY_RULE_SETUP #line 366 "util/configlexer.lex" { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 153: YY_RULE_SETUP #line 367 "util/configlexer.lex" { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 154: YY_RULE_SETUP #line 368 "util/configlexer.lex" { YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 155: YY_RULE_SETUP #line 369 "util/configlexer.lex" { YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 156: YY_RULE_SETUP #line 370 "util/configlexer.lex" { YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 157: YY_RULE_SETUP #line 371 "util/configlexer.lex" { YDVAR(1, VAR_IDENTITY) } YY_BREAK case 158: YY_RULE_SETUP #line 372 "util/configlexer.lex" { YDVAR(1, VAR_VERSION) } YY_BREAK case 159: YY_RULE_SETUP #line 373 "util/configlexer.lex" { YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 160: YY_RULE_SETUP #line 374 "util/configlexer.lex" { YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 161: YY_RULE_SETUP #line 375 "util/configlexer.lex" { YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 162: YY_RULE_SETUP #line 376 "util/configlexer.lex" { YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 163: YY_RULE_SETUP #line 377 "util/configlexer.lex" { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 164: YY_RULE_SETUP #line 378 "util/configlexer.lex" { YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 165: YY_RULE_SETUP #line 379 "util/configlexer.lex" { YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 166: YY_RULE_SETUP #line 380 "util/configlexer.lex" { YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 167: YY_RULE_SETUP #line 381 "util/configlexer.lex" { YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 168: YY_RULE_SETUP #line 382 "util/configlexer.lex" { YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 169: YY_RULE_SETUP #line 383 "util/configlexer.lex" { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 170: YY_RULE_SETUP #line 384 "util/configlexer.lex" { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 171: YY_RULE_SETUP #line 385 "util/configlexer.lex" { YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 172: YY_RULE_SETUP #line 386 "util/configlexer.lex" { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 173: YY_RULE_SETUP #line 387 "util/configlexer.lex" { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 174: YY_RULE_SETUP #line 388 "util/configlexer.lex" { YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 175: YY_RULE_SETUP #line 389 "util/configlexer.lex" { YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 176: YY_RULE_SETUP #line 390 "util/configlexer.lex" { YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 177: YY_RULE_SETUP #line 391 "util/configlexer.lex" { YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 178: YY_RULE_SETUP #line 392 "util/configlexer.lex" { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 179: YY_RULE_SETUP #line 393 "util/configlexer.lex" { YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 180: YY_RULE_SETUP #line 394 "util/configlexer.lex" { YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 181: YY_RULE_SETUP #line 395 "util/configlexer.lex" { YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 182: YY_RULE_SETUP #line 396 "util/configlexer.lex" { YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 183: YY_RULE_SETUP #line 397 "util/configlexer.lex" { YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 184: YY_RULE_SETUP #line 398 "util/configlexer.lex" { YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 185: YY_RULE_SETUP #line 399 "util/configlexer.lex" { YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 186: YY_RULE_SETUP #line 400 "util/configlexer.lex" { YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 187: YY_RULE_SETUP #line 401 "util/configlexer.lex" { YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 188: YY_RULE_SETUP #line 402 "util/configlexer.lex" { YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 189: YY_RULE_SETUP #line 404 "util/configlexer.lex" { YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 190: YY_RULE_SETUP #line 405 "util/configlexer.lex" { YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 191: YY_RULE_SETUP #line 406 "util/configlexer.lex" { YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 192: YY_RULE_SETUP #line 407 "util/configlexer.lex" { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 193: YY_RULE_SETUP #line 408 "util/configlexer.lex" { YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 194: YY_RULE_SETUP #line 409 "util/configlexer.lex" { YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 195: YY_RULE_SETUP #line 410 "util/configlexer.lex" { YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 196: YY_RULE_SETUP #line 411 "util/configlexer.lex" { YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 197: YY_RULE_SETUP #line 412 "util/configlexer.lex" { YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 198: YY_RULE_SETUP #line 413 "util/configlexer.lex" { YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 199: YY_RULE_SETUP #line 414 "util/configlexer.lex" { YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 200: YY_RULE_SETUP #line 415 "util/configlexer.lex" { YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 201: YY_RULE_SETUP #line 416 "util/configlexer.lex" { YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 202: YY_RULE_SETUP #line 417 "util/configlexer.lex" { YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "util/configlexer.lex" { YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "util/configlexer.lex" { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "util/configlexer.lex" { YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "util/configlexer.lex" { YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "util/configlexer.lex" { YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "util/configlexer.lex" { YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "util/configlexer.lex" { YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "util/configlexer.lex" { YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "util/configlexer.lex" { YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "util/configlexer.lex" { YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "util/configlexer.lex" { YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "util/configlexer.lex" { YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "util/configlexer.lex" { YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "util/configlexer.lex" { YDVAR(0, VAR_PYTHON) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "util/configlexer.lex" { YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "util/configlexer.lex" { YDVAR(0, VAR_DYNLIB) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "util/configlexer.lex" { YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "util/configlexer.lex" { YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "util/configlexer.lex" { YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "util/configlexer.lex" { YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "util/configlexer.lex" { YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "util/configlexer.lex" { YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "util/configlexer.lex" { YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "util/configlexer.lex" { YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "util/configlexer.lex" { YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "util/configlexer.lex" { YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "util/configlexer.lex" { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "util/configlexer.lex" { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "util/configlexer.lex" { YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "util/configlexer.lex" { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "util/configlexer.lex" { YDVAR(0, VAR_DNSTAP) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 248: YY_RULE_SETUP #line 464 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 249: YY_RULE_SETUP #line 466 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 250: YY_RULE_SETUP #line 467 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 251: YY_RULE_SETUP #line 468 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 252: YY_RULE_SETUP #line 469 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 253: YY_RULE_SETUP #line 470 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 254: YY_RULE_SETUP #line 472 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 255: YY_RULE_SETUP #line 474 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 256: YY_RULE_SETUP #line 476 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 257: YY_RULE_SETUP #line 478 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 258: YY_RULE_SETUP #line 480 "util/configlexer.lex" { YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 259: YY_RULE_SETUP #line 482 "util/configlexer.lex" { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 260: YY_RULE_SETUP #line 483 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 261: YY_RULE_SETUP #line 484 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 262: YY_RULE_SETUP #line 485 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 263: YY_RULE_SETUP #line 486 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 264: YY_RULE_SETUP #line 487 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 265: YY_RULE_SETUP #line 488 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 266: YY_RULE_SETUP #line 489 "util/configlexer.lex" { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 267: YY_RULE_SETUP #line 490 "util/configlexer.lex" { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 268: YY_RULE_SETUP #line 491 "util/configlexer.lex" { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 269: YY_RULE_SETUP #line 492 "util/configlexer.lex" { YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 270: YY_RULE_SETUP #line 493 "util/configlexer.lex" { YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 271: YY_RULE_SETUP #line 494 "util/configlexer.lex" { YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 272: YY_RULE_SETUP #line 495 "util/configlexer.lex" { YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 273: YY_RULE_SETUP #line 496 "util/configlexer.lex" { YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 274: YY_RULE_SETUP #line 497 "util/configlexer.lex" { YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 275: YY_RULE_SETUP #line 498 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 276: YY_RULE_SETUP #line 499 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 277: YY_RULE_SETUP #line 500 "util/configlexer.lex" { YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 278: YY_RULE_SETUP #line 501 "util/configlexer.lex" { YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 279: YY_RULE_SETUP #line 502 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 284: YY_RULE_SETUP #line 507 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 285: YY_RULE_SETUP #line 508 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 286: YY_RULE_SETUP #line 510 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 287: YY_RULE_SETUP #line 512 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 288: YY_RULE_SETUP #line 513 "util/configlexer.lex" { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 289: YY_RULE_SETUP #line 514 "util/configlexer.lex" { YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 290: YY_RULE_SETUP #line 515 "util/configlexer.lex" { YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 291: YY_RULE_SETUP #line 516 "util/configlexer.lex" { YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 292: YY_RULE_SETUP #line 517 "util/configlexer.lex" { YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 293: YY_RULE_SETUP #line 518 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 294: YY_RULE_SETUP #line 519 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 295: YY_RULE_SETUP #line 520 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 296: YY_RULE_SETUP #line 521 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 297: YY_RULE_SETUP #line 522 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 298: YY_RULE_SETUP #line 523 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 299: YY_RULE_SETUP #line 524 "util/configlexer.lex" { YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 300: YY_RULE_SETUP #line 525 "util/configlexer.lex" { YDVAR(0, VAR_CACHEDB) } YY_BREAK case 301: YY_RULE_SETUP #line 526 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 302: YY_RULE_SETUP #line 527 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 303: YY_RULE_SETUP #line 528 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 304: YY_RULE_SETUP #line 529 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 305: YY_RULE_SETUP #line 530 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 306: YY_RULE_SETUP #line 531 "util/configlexer.lex" { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 307: YY_RULE_SETUP #line 532 "util/configlexer.lex" { YDVAR(0, VAR_IPSET) } YY_BREAK case 308: YY_RULE_SETUP #line 533 "util/configlexer.lex" { YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 309: YY_RULE_SETUP #line 534 "util/configlexer.lex" { YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 310: YY_RULE_SETUP #line 535 "util/configlexer.lex" { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 311: YY_RULE_SETUP #line 536 "util/configlexer.lex" { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 312: YY_RULE_SETUP #line 537 "util/configlexer.lex" { YDVAR(2, VAR_EDNS_CLIENT_STRING) } YY_BREAK case 313: YY_RULE_SETUP #line 538 "util/configlexer.lex" { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } YY_BREAK case 314: YY_RULE_SETUP #line 539 "util/configlexer.lex" { YDVAR(1, VAR_NSID ) } YY_BREAK case 315: /* rule 315 can match eol */ YY_RULE_SETUP #line 540 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ case 316: YY_RULE_SETUP #line 543 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): #line 544 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK case 317: YY_RULE_SETUP #line 549 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK case 318: /* rule 318 can match eol */ YY_RULE_SETUP #line 550 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK case 319: YY_RULE_SETUP #line 552 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } yytext[yyleng - 1] = '\0'; yylval.str = strdup(yytext); if(!yylval.str) yyerror("out of memory"); return STRING_ARG; } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ case 320: YY_RULE_SETUP #line 564 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): #line 565 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK case 321: YY_RULE_SETUP #line 570 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK case 322: /* rule 322 can match eol */ YY_RULE_SETUP #line 571 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK case 323: YY_RULE_SETUP #line 573 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } yytext[yyleng - 1] = '\0'; yylval.str = strdup(yytext); if(!yylval.str) yyerror("out of memory"); return STRING_ARG; } YY_BREAK /* include: directive */ case 324: YY_RULE_SETUP #line 585 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): #line 587 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK case 325: YY_RULE_SETUP #line 591 "util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 326: /* rule 326 can match eol */ YY_RULE_SETUP #line 592 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 327: YY_RULE_SETUP #line 593 "util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK case 328: YY_RULE_SETUP #line 594 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); BEGIN(inc_prev); } YY_BREAK case YY_STATE_EOF(include_quoted): #line 599 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK case 329: YY_RULE_SETUP #line 603 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK case 330: /* rule 330 can match eol */ YY_RULE_SETUP #line 604 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK case 331: YY_RULE_SETUP #line 606 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; config_start_include_glob(yytext, 0); BEGIN(inc_prev); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): #line 612 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ if (!config_include_stack) { yyterminate(); } else { int prev_toplevel = inc_toplevel; fclose(yyin); config_end_include(); if(prev_toplevel) return (VAR_FORCE_TOPLEVEL); } } YY_BREAK /* include-toplevel: directive */ case 332: YY_RULE_SETUP #line 626 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): #line 629 "util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK case 333: YY_RULE_SETUP #line 633 "util/configlexer.lex" { LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 334: /* rule 334 can match eol */ YY_RULE_SETUP #line 634 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK case 335: YY_RULE_SETUP #line 635 "util/configlexer.lex" { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } YY_BREAK case 336: YY_RULE_SETUP #line 636 "util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); BEGIN(inc_prev); return (VAR_FORCE_TOPLEVEL); } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): #line 642 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK case 337: YY_RULE_SETUP #line 646 "util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK case 338: /* rule 338 can match eol */ YY_RULE_SETUP #line 647 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK case 339: YY_RULE_SETUP #line 651 "util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; config_start_include_glob(yytext, 1); BEGIN(inc_prev); return (VAR_FORCE_TOPLEVEL); } YY_BREAK case 340: YY_RULE_SETUP #line 659 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK case 341: YY_RULE_SETUP #line 663 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK case 342: YY_RULE_SETUP #line 667 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK case 343: YY_RULE_SETUP #line 671 "util/configlexer.lex" ECHO; YY_BREAK #line 6012 "" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc( (void *) b->yy_ch_buf, (yy_size_t) (b->yy_buf_size + 2) ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { yy_state_type yy_current_state; char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 3354 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { int yy_is_jam; char *yy_cp = (yy_c_buf_p); YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 3354 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 3353); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree( (void *) b->yy_ch_buf ); yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (const char * yystr ) { return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); buf = (char *) yyalloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yynoreturn yy_fatal_error (const char* msg ) { fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param _line_number line number * */ void yyset_lineno (int _line_number ) { yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * _in_str ) { yyin = _in_str ; } void yyset_out (FILE * _out_str ) { yyout = _out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int _bdebug ) { yy_flex_debug = _bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, const char * s2, int n ) { int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (const char * s ) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return malloc(size); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 671 "util/configlexer.lex" unbound-1.13.1/util/log.h0000644000175000017500000001677314010434640014624 0ustar wouterwouter/* * util/log.h - logging service * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains logging functions. */ #ifndef UTIL_LOG_H #define UTIL_LOG_H struct sldns_buffer; /** * verbosity value: */ enum verbosity_value { /** 0 - no verbose messages */ NO_VERBOSE = 0, /** 1 - operational information */ VERB_OPS, /** 2 - detailed information */ VERB_DETAIL, /** 3 - query level information */ VERB_QUERY, /** 4 - algorithm level information */ VERB_ALGO, /** 5 - querier client information */ VERB_CLIENT }; /** The global verbosity setting */ extern enum verbosity_value verbosity; /** * log a verbose message, pass the level for this message. * It has printf formatted arguments. No trailing newline is needed. * @param level: verbosity level for this message, compared to global * verbosity setting. * @param format: printf-style format string. Arguments follow. */ void verbose(enum verbosity_value level, const char* format, ...) ATTR_FORMAT(printf, 2, 3); /** * call this to initialize logging services. * @param filename: if NULL stderr is used. * @param use_syslog: set to true to ignore filename and use syslog(3). * @param chrootdir: to which directory we have been chrooted, if any. */ void log_init(const char* filename, int use_syslog, const char* chrootdir); /** * Set logging to go to the specified file *. * This setting does not affect the use_syslog setting. * @param f: to that file, or pass NULL to disable logging. */ void log_file(FILE *f); /** * Init a thread (will print this number for the thread log entries). * Must be called from the thread itself. If not called 0 is printed. * @param num: number to print for this thread. Owned by caller, must * continue to exist. */ void log_thread_set(int* num); /** * Get the thread id from logging system. Set after log_init is * initialised, or log_thread_set for newly created threads. * This initialisation happens in unbound as a daemon, in daemon * startup code, when that spawns threads. * @return thread number, from 0 and up. Before initialised, returns 0. */ int log_thread_get(void); /** * Set identity to print, default is 'unbound'. * @param id: string to print. Name of executable. */ void log_ident_set(const char* id); /** * Set default identity to print, default is 'unbound'. * @param id: string to print. Name of executable. */ void log_ident_set_default(const char* id); /** * Revert identity to print, back to the recorded default value. */ void log_ident_revert_to_default(void); /** * Set identity to print if there is an identity, otherwise * set the default. * @param identity: the identity to set. */ void log_ident_set_or_default(const char* identity); /** * Set if the time value is printed ascii or decimal in log entries. * @param use_asc: if true, ascii is printed, otherwise decimal. * If the conversion fails or you have no time functions, * decimal is printed. */ void log_set_time_asc(int use_asc); /** get log lock */ void* log_get_lock(void); /** * Log informational message. * Pass printf formatted arguments. No trailing newline is needed. * @param format: printf-style format string. Arguments follow. */ void log_info(const char* format, ...) ATTR_FORMAT(printf, 1, 2); /** * Log error message. * Pass printf formatted arguments. No trailing newline is needed. * @param format: printf-style format string. Arguments follow. */ void log_err(const char* format, ...) ATTR_FORMAT(printf, 1, 2); /** * Log warning message. * Pass printf formatted arguments. No trailing newline is needed. * @param format: printf-style format string. Arguments follow. */ void log_warn(const char* format, ...) ATTR_FORMAT(printf, 1, 2); /** * Log a hex-string to the log. Can be any length. * performs mallocs to do so, slow. But debug useful. * @param msg: string desc to accompany the hexdump. * @param data: data to dump in hex format. * @param length: length of data. */ void log_hex(const char* msg, void* data, size_t length); /** * Log query. * Pass printf formatted arguments. No trailing newline is needed. * @param format: printf-style format string. Arguments follow. */ void log_query(const char* format, ...) ATTR_FORMAT(printf, 1, 2); /** * Log reply. * Pass printf formatted arguments. No trailing newline is needed. * @param format: printf-style format string. Arguments follow. */ void log_reply(const char* format, ...) ATTR_FORMAT(printf, 1, 2); /** * Easy alternative for log_hex, takes a sldns_buffer. * @param level: verbosity level for this message, compared to global * verbosity setting. * @param msg: string desc to print * @param buf: the buffer. */ void log_buf(enum verbosity_value level, const char* msg, struct sldns_buffer* buf); /** * Log fatal error message, and exit the current process. * Pass printf formatted arguments. No trailing newline is needed. * @param format: printf-style format string. Arguments follow. */ void fatal_exit(const char* format, ...) ATTR_FORMAT(printf, 1, 2) ATTR_NORETURN; /** * va_list argument version of log_info. * @param pri: priority type, for example 5 (INFO). * @param type: string to designate type of message (info, error). * @param format: the printf style format to print. no newline. * @param args: arguments for format string. */ void log_vmsg(int pri, const char* type, const char* format, va_list args); /** * an assertion that is thrown to the logfile. */ #ifdef UNBOUND_DEBUG #ifdef __clang_analyzer__ /* clang analyzer needs to know that log_assert is an assertion, otherwise * it could complain about the nullptr the assert is guarding against. */ #define log_assert(x) assert(x) #else # define log_assert(x) \ do { if(!(x)) \ fatal_exit("%s:%d: %s: assertion %s failed", \ __FILE__, __LINE__, __func__, #x); \ } while(0); #endif #else # define log_assert(x) /*nothing*/ #endif #ifdef USE_WINSOCK /** * Convert WSA error into string. * @param err: from WSAGetLastError() * @return: string. */ char* wsa_strerror(DWORD err); #endif /* USE_WINSOCK */ #endif /* UTIL_LOG_H */ unbound-1.13.1/util/locks.c0000644000175000017500000001760314010434640015142 0ustar wouterwouter/** * util/locks.c - unbound locking primitives * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Implementation of locking and threading support. * A place for locking debug code since most locking functions are macros. */ #include "config.h" #include "util/locks.h" #include #ifdef HAVE_SYS_WAIT_H #include #endif /** block all signals, masks them away. */ void ub_thread_blocksigs(void) { #if defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS) || defined(HAVE_SIGPROCMASK) # if defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS) int err; # endif sigset_t sigset; sigfillset(&sigset); #ifdef HAVE_PTHREAD if((err=pthread_sigmask(SIG_SETMASK, &sigset, NULL))) fatal_exit("pthread_sigmask: %s", strerror(err)); #else # ifdef HAVE_SOLARIS_THREADS if((err=thr_sigsetmask(SIG_SETMASK, &sigset, NULL))) fatal_exit("thr_sigsetmask: %s", strerror(err)); # else /* have nothing, do single process signal mask */ if(sigprocmask(SIG_SETMASK, &sigset, NULL)) fatal_exit("sigprocmask: %s", strerror(errno)); # endif /* HAVE_SOLARIS_THREADS */ #endif /* HAVE_PTHREAD */ #endif /* have signal stuff */ } /** unblock one signal, so we can catch it */ void ub_thread_sig_unblock(int sig) { #if defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS) || defined(HAVE_SIGPROCMASK) # if defined(HAVE_PTHREAD) || defined(HAVE_SOLARIS_THREADS) int err; # endif sigset_t sigset; sigemptyset(&sigset); sigaddset(&sigset, sig); #ifdef HAVE_PTHREAD if((err=pthread_sigmask(SIG_UNBLOCK, &sigset, NULL))) fatal_exit("pthread_sigmask: %s", strerror(err)); #else # ifdef HAVE_SOLARIS_THREADS if((err=thr_sigsetmask(SIG_UNBLOCK, &sigset, NULL))) fatal_exit("thr_sigsetmask: %s", strerror(err)); # else /* have nothing, do single thread case */ if(sigprocmask(SIG_UNBLOCK, &sigset, NULL)) fatal_exit("sigprocmask: %s", strerror(errno)); # endif /* HAVE_SOLARIS_THREADS */ #endif /* HAVE_PTHREAD */ #else (void)sig; #endif /* have signal stuff */ } #if !defined(HAVE_PTHREAD) && !defined(HAVE_SOLARIS_THREADS) && !defined(HAVE_WINDOWS_THREADS) /** * No threading available: fork a new process. * This means no shared data structure, and no locking. * Only the main thread ever returns. Exits on errors. * @param thr: the location where to store the thread-id. * @param func: function body of the thread. Return value of func is lost. * @param arg: user argument to func. */ void ub_thr_fork_create(ub_thread_type* thr, void* (*func)(void*), void* arg) { pid_t pid = fork(); switch(pid) { default: /* main */ *thr = (ub_thread_type)pid; return; case 0: /* child */ *thr = (ub_thread_type)getpid(); (void)(*func)(arg); exit(0); case -1: /* error */ fatal_exit("could not fork: %s", strerror(errno)); } } /** * There is no threading. Wait for a process to terminate. * Note that ub_thread_type is defined as pid_t. * @param thread: the process id to wait for. */ void ub_thr_fork_wait(ub_thread_type thread) { int status = 0; if(waitpid((pid_t)thread, &status, 0) == -1) log_err("waitpid(%d): %s", (int)thread, strerror(errno)); if(status != 0) log_warn("process %d abnormal exit with status %d", (int)thread, status); } #endif /* !defined(HAVE_PTHREAD) && !defined(HAVE_SOLARIS_THREADS) && !defined(HAVE_WINDOWS_THREADS) */ #ifdef HAVE_SOLARIS_THREADS void* ub_thread_key_get(ub_thread_key_type key) { void* ret=NULL; LOCKRET(thr_getspecific(key, &ret)); return ret; } #endif #ifdef HAVE_WINDOWS_THREADS /** log a windows GetLastError message */ static void log_win_err(const char* str, DWORD err) { LPTSTR buf; if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, err, 0, (LPTSTR)&buf, 0, NULL) == 0) { /* could not format error message */ log_err("%s, GetLastError=%d", str, (int)err); return; } log_err("%s, (err=%d): %s", str, (int)err, buf); LocalFree(buf); } void lock_basic_init(lock_basic_type* lock) { /* implement own lock, because windows HANDLE as Mutex usage * uses too many handles and would bog down the whole system. */ (void)InterlockedExchange(lock, 0); } void lock_basic_destroy(lock_basic_type* lock) { (void)InterlockedExchange(lock, 0); } void lock_basic_lock(lock_basic_type* lock) { LONG wait = 1; /* wait 1 msec at first */ while(InterlockedExchange(lock, 1)) { /* if the old value was 1 then if was already locked */ Sleep(wait); /* wait with sleep */ wait *= 2; /* exponential backoff for waiting */ } /* the old value was 0, but we inserted 1, we locked it! */ } void lock_basic_unlock(lock_basic_type* lock) { /* unlock it by inserting the value of 0. xchg for cache coherency. */ (void)InterlockedExchange(lock, 0); } void ub_thread_key_create(ub_thread_key_type* key, void* f) { *key = TlsAlloc(); if(*key == TLS_OUT_OF_INDEXES) { *key = 0; log_win_err("TlsAlloc Failed(OUT_OF_INDEXES)", GetLastError()); } else ub_thread_key_set(*key, f); } void ub_thread_key_set(ub_thread_key_type key, void* v) { if(!TlsSetValue(key, v)) { log_win_err("TlsSetValue failed", GetLastError()); } } void* ub_thread_key_get(ub_thread_key_type key) { void* ret = (void*)TlsGetValue(key); if(ret == NULL && GetLastError() != ERROR_SUCCESS) { log_win_err("TlsGetValue failed", GetLastError()); } return ret; } void ub_thread_create(ub_thread_type* thr, void* (*func)(void*), void* arg) { #ifndef HAVE__BEGINTHREADEX *thr = CreateThread(NULL, /* default security (no inherit handle) */ 0, /* default stack size */ (LPTHREAD_START_ROUTINE)func, arg, 0, /* default flags, run immediately */ NULL); /* do not store thread identifier anywhere */ #else /* the beginthreadex routine setups for the C lib; aligns stack */ *thr=(ub_thread_type)_beginthreadex(NULL, 0, (void*)func, arg, 0, NULL); #endif if(*thr == NULL) { log_win_err("CreateThread failed", GetLastError()); fatal_exit("thread create failed"); } } ub_thread_type ub_thread_self(void) { return GetCurrentThread(); } void ub_thread_join(ub_thread_type thr) { DWORD ret = WaitForSingleObject(thr, INFINITE); if(ret == WAIT_FAILED) { log_win_err("WaitForSingleObject(Thread):WAIT_FAILED", GetLastError()); } else if(ret == WAIT_TIMEOUT) { log_win_err("WaitForSingleObject(Thread):WAIT_TIMEOUT", GetLastError()); } /* and close the handle to the thread */ if(!CloseHandle(thr)) { log_win_err("CloseHandle(Thread) failed", GetLastError()); } } #endif /* HAVE_WINDOWS_THREADS */ unbound-1.13.1/util/data/0000755000175000017500000000000014010434640014565 5ustar wouterwouterunbound-1.13.1/util/data/packed_rrset.h0000644000175000017500000004002114010434640017401 0ustar wouterwouter/* * util/data/packed_rrset.h - data storage for a set of resource records. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the data storage for RRsets. */ #ifndef UTIL_DATA_PACKED_RRSET_H #define UTIL_DATA_PACKED_RRSET_H #include "util/storage/lruhash.h" struct alloc_cache; struct regional; /** type used to uniquely identify rrsets. Cannot be reused without * clearing the cache. */ typedef uint64_t rrset_id_type; /** this rrset is NSEC and is at zone apex (at child side of zonecut) */ #define PACKED_RRSET_NSEC_AT_APEX 0x1 /** this rrset is A/AAAA and is in-zone-glue (from parent side of zonecut) */ #define PACKED_RRSET_PARENT_SIDE 0x2 /** this rrset is SOA and has the negative ttl (from nxdomain or nodata), * this is set on SOA rrsets in the authority section, to keep its TTL separate * from the SOA in the answer section from a direct SOA query or ANY query. */ #define PACKED_RRSET_SOA_NEG 0x4 /** This rrset is considered to have a fixed TTL; its TTL doesn't have to be * updated on encoding in a reply. This flag is not expected to be set in * cached data. */ #define PACKED_RRSET_FIXEDTTL 0x80000000 /** number of rrs and rrsets for integer overflow protection. More than * this is not really possible (64K packet has much less RRs and RRsets) in * a message. And this is small enough that also multiplied there is no * integer overflow. */ #define RR_COUNT_MAX 0xffffff /** * The identifying information for an RRset. */ struct packed_rrset_key { /** * The domain name. If not null (for id=0) it is allocated, and * contains the wireformat domain name. * This dname is not canonicalized. */ uint8_t* dname; /** * Length of the domain name, including last 0 root octet. */ size_t dname_len; /** * Flags. 32bit to be easy for hashing: * o PACKED_RRSET_NSEC_AT_APEX * o PACKED_RRSET_PARENT_SIDE * o PACKED_RRSET_SOA_NEG * o PACKED_RRSET_FIXEDTTL (not supposed to be cached) */ uint32_t flags; /** the rrset type in network format */ uint16_t type; /** the rrset class in network format */ uint16_t rrset_class; }; /** * This structure contains an RRset. A set of resource records that * share the same domain name, type and class. * * Due to memory management and threading, the key structure cannot be * deleted, although the data can be. The id can be set to 0 to store and the * structure can be recycled with a new id. */ struct ub_packed_rrset_key { /** * entry into hashtable. Note the lock is never destroyed, * even when this key is retired to the cache. * the data pointer (if not null) points to a struct packed_rrset. */ struct lruhash_entry entry; /** * the ID of this rrset. unique, based on threadid + sequenceno. * ids are not reused, except after flushing the cache. * zero is an unused entry, and never a valid id. * Check this value after getting entry.lock. * The other values in this struct may only be altered after changing * the id (which needs a writelock on entry.lock). */ rrset_id_type id; /** key data: dname, type and class */ struct packed_rrset_key rk; }; /** * RRset trustworthiness. Bigger value is more trust. RFC 2181. * The rrset_trust_add_noAA, rrset_trust_auth_noAA, rrset_trust_add_AA, * are mentioned as the same trustworthiness in 2181, but split up here * for ease of processing. * * rrset_trust_nonauth_ans_AA, rrset_trust_ans_noAA * are also mentioned as the same trustworthiness in 2181, but split up here * for ease of processing. * * Added trust_none for a sane initial value, smaller than anything else. * Added validated and ultimate trust for keys and rrsig validated content. */ enum rrset_trust { /** initial value for trust */ rrset_trust_none = 0, /** Additional information from non-authoritative answers */ rrset_trust_add_noAA, /** Data from the authority section of a non-authoritative answer */ rrset_trust_auth_noAA, /** Additional information from an authoritative answer */ rrset_trust_add_AA, /** non-authoritative data from the answer section of authoritative * answers */ rrset_trust_nonauth_ans_AA, /** Data from the answer section of a non-authoritative answer */ rrset_trust_ans_noAA, /** Glue from a primary zone, or glue from a zone transfer */ rrset_trust_glue, /** Data from the authority section of an authoritative answer */ rrset_trust_auth_AA, /** The authoritative data included in the answer section of an * authoritative reply */ rrset_trust_ans_AA, /** Data from a zone transfer, other than glue */ rrset_trust_sec_noglue, /** Data from a primary zone file, other than glue data */ rrset_trust_prim_noglue, /** DNSSEC(rfc4034) validated with trusted keys */ rrset_trust_validated, /** ultimately trusted, no more trust is possible; * trusted keys from the unbound configuration setup. */ rrset_trust_ultimate }; /** * Security status from validation for data. * The order is significant; more secure, more proven later. */ enum sec_status { /** UNCHECKED means that object has yet to be validated. */ sec_status_unchecked = 0, /** BOGUS means that the object (RRset or message) failed to validate * (according to local policy), but should have validated. */ sec_status_bogus, /** INDETERMINATE means that the object is insecure, but not * authoritatively so. Generally this means that the RRset is not * below a configured trust anchor. */ sec_status_indeterminate, /** INSECURE means that the object is authoritatively known to be * insecure. Generally this means that this RRset is below a trust * anchor, but also below a verified, insecure delegation. */ sec_status_insecure, /** SECURE_SENTINEL_FAIL means that the object (RRset or message) * validated according to local policy but did not succeed in the root * KSK sentinel test (draft-ietf-dnsop-kskroll-sentinel). */ sec_status_secure_sentinel_fail, /** SECURE means that the object (RRset or message) validated * according to local policy. */ sec_status_secure }; /** * RRset data. * * The data is packed, stored contiguously in memory. * * It is not always stored contiguously, in that case, an unpacked-packed * rrset has the arrays separate. A bunch of routines work on that, but * the packed rrset that is contiguous is for the rrset-cache and the * cache-response routines in daemon/worker.c. * * memory layout: * o base struct * o rr_len size_t array * o rr_data uint8_t* array * o rr_ttl time_t array (after size_t and ptrs because those may be * 64bit and this array before those would make them unaligned). * Since the stuff before is 32/64bit, rr_ttl is 32 bit aligned. * o rr_data rdata wireformats * o rrsig_data rdata wireformat(s) * * Rdata is stored in wireformat. The dname is stored in wireformat. * TTLs are stored as absolute values (and could be expired). * * RRSIGs are stored in the arrays after the regular rrs. * * You need the packed_rrset_key to know dname, type, class of the * resource records in this RRset. (if signed the rrsig gives the type too). * * On the wire an RR is: * name, type, class, ttl, rdlength, rdata. * So we need to send the following per RR: * key.dname, ttl, rr_data[i]. * since key.dname ends with type and class. * and rr_data starts with the rdlength. * the ttl value to send changes due to time. */ struct packed_rrset_data { /** Timestamp added to TTLs in the packed data. * Needed to support serving original TTLs. */ time_t ttl_add; /** TTL (in seconds like time()) of the rrset. * Same for all RRs see rfc2181(5.2). */ time_t ttl; /** number of rrs. */ size_t count; /** number of rrsigs, if 0 no rrsigs */ size_t rrsig_count; /** the trustworthiness of the rrset data */ enum rrset_trust trust; /** security status of the rrset data */ enum sec_status security; /** length of every rr's rdata, rr_len[i] is size of rr_data[i]. */ size_t* rr_len; /** ttl of every rr. rr_ttl[i] ttl of rr i. */ time_t *rr_ttl; /** * Array of pointers to every rr's rdata. * The rr_data[i] rdata is stored in uncompressed wireformat. * The first uint16_t of rr_data[i] is network format rdlength. * * rr_data[count] to rr_data[count+rrsig_count] contain the rrsig data. */ uint8_t** rr_data; }; /** * An RRset can be represented using both key and data together. * Split into key and data structures to simplify implementation of * caching schemes. */ struct packed_rrset { /** domain name, type and class */ struct packed_rrset_key* k; /** ttl, count and rdatas (and rrsig) */ struct packed_rrset_data* d; }; /** * list of packed rrsets */ struct packed_rrset_list { /** next in list */ struct packed_rrset_list* next; /** rrset key and data */ struct packed_rrset rrset; }; /** * Delete packed rrset key and data, not entered in hashtables yet. * Used during parsing. * @param pkey: rrset key structure with locks, key and data pointers. * @param alloc: where to return the unfree-able key structure. */ void ub_packed_rrset_parsedelete(struct ub_packed_rrset_key* pkey, struct alloc_cache* alloc); /** * Memory size of rrset data. RRset data must be filled in correctly. * @param data: data to examine. * @return size in bytes. */ size_t packed_rrset_sizeof(struct packed_rrset_data* data); /** * Get TTL of rrset. RRset data must be filled in correctly. * @param key: rrset key, with data to examine. * @return ttl value. */ time_t ub_packed_rrset_ttl(struct ub_packed_rrset_key* key); /** * Calculate memory size of rrset entry. For hash table usage. * @param key: struct ub_packed_rrset_key*. * @param data: struct packed_rrset_data*. * @return size in bytes. */ size_t ub_rrset_sizefunc(void* key, void* data); /** * compares two rrset keys. * @param k1: struct ub_packed_rrset_key*. * @param k2: struct ub_packed_rrset_key*. * @return 0 if equal. */ int ub_rrset_compare(void* k1, void* k2); /** * compare two rrset data structures. * Compared rdata and rrsigdata, not the trust or ttl value. * @param d1: data to compare. * @param d2: data to compare. * @return 1 if equal. */ int rrsetdata_equal(struct packed_rrset_data* d1, struct packed_rrset_data* d2); /** * Old key to be deleted. RRset keys are recycled via alloc. * The id is set to 0. So that other threads, after acquiring a lock always * get the correct value, in this case the 0 deleted-special value. * @param key: struct ub_packed_rrset_key*. * @param userdata: alloc structure to use for recycling. */ void ub_rrset_key_delete(void* key, void* userdata); /** * Old data to be deleted. * @param data: what to delete. * @param userdata: user data ptr. */ void rrset_data_delete(void* data, void* userdata); /** * Calculate hash value for a packed rrset key. * @param key: the rrset key with name, type, class, flags. * @return hash value. */ hashvalue_type rrset_key_hash(struct packed_rrset_key* key); /** * Fixup pointers in fixed data packed_rrset_data blob. * After a memcpy of the data for example. Will set internal pointers right. * @param data: rrset data structure. Otherwise correctly filled in. */ void packed_rrset_ptr_fixup(struct packed_rrset_data* data); /** * Fixup TTLs in fixed data packed_rrset_data blob. * @param data: rrset data structure. Otherwise correctly filled in. * @param add: how many seconds to add, pass time(0) for example. */ void packed_rrset_ttl_add(struct packed_rrset_data* data, time_t add); /** * Utility procedure to extract CNAME target name from its rdata. * Failsafes; it will change passed dname to a valid dname or do nothing. * @param rrset: the rrset structure. Must be a CNAME. * Only first RR is used (multiple RRs are technically illegal anyway). * Also works on type DNAME. Returns target name. * @param dname: this pointer is updated to point into the cname rdata. * If a failsafe fails, nothing happens to the pointer (such as the * rdata was not a valid dname, not a CNAME, ...). * @param dname_len: length of dname is returned. */ void get_cname_target(struct ub_packed_rrset_key* rrset, uint8_t** dname, size_t* dname_len); /** * Get a printable string for a rrset trust value * @param s: rrset trust value * @return printable string. */ const char* rrset_trust_to_string(enum rrset_trust s); /** * Get a printable string for a security status value * @param s: security status * @return printable string. */ const char* sec_status_to_string(enum sec_status s); /** * Print string with neat domain name, type, class from rrset. * @param v: at what verbosity level to print this. * @param str: string of message. * @param rrset: structure with name, type and class. */ void log_rrset_key(enum verbosity_value v, const char* str, struct ub_packed_rrset_key* rrset); /** * Convert RR from RRset to string. * @param rrset: structure with data. * @param i: index of rr or RRSIG. * @param now: time that is subtracted from ttl before printout. Can be 0. * @param dest: destination string buffer. Must be nonNULL. * @param dest_len: length of dest buffer (>0). * @return false on failure. */ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i, time_t now, char* dest, size_t dest_len); /** * Print the string with prefix, one rr per line. * @param v: at what verbosity level to print this. * @param str: string of message. * @param rrset: with name, and rdata, and rrsigs. */ void log_packed_rrset(enum verbosity_value v, const char* str, struct ub_packed_rrset_key* rrset); /** * Allocate rrset in region - no more locks needed * @param key: a (just from rrset cache looked up) rrset key + valid, * packed data record. * @param region: where to alloc the copy * @param now: adjust the TTLs to be relative (subtract from all TTLs). * @return new region-alloced rrset key or NULL on alloc failure. */ struct ub_packed_rrset_key* packed_rrset_copy_region( struct ub_packed_rrset_key* key, struct regional* region, time_t now); /** * Allocate rrset with malloc (from region or you are holding the lock). * @param key: key with data entry. * @param alloc: alloc_cache to create rrset_keys * @param now: adjust the TTLs to be absolute (add to all TTLs). * @return new region-alloced rrset key or NULL on alloc failure. */ struct ub_packed_rrset_key* packed_rrset_copy_alloc( struct ub_packed_rrset_key* key, struct alloc_cache* alloc, time_t now); /** * Find RR index in packed rrset * Raw comparison, does not canonicalize RDATA * @param d: packed rrset * @param rdata: RDATA of RR to find * @param len: length of rdata * @param index: pointer to int to store index of found RR * @return 1 if RR found, 0 otherwise */ int packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, size_t* index); #endif /* UTIL_DATA_PACKED_RRSET_H */ unbound-1.13.1/util/data/msgencode.h0000644000175000017500000001263714010434640016713 0ustar wouterwouter/* * util/data/msgencode.h - encode compressed DNS messages. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains temporary data structures and routines to create * compressed DNS messages. */ #ifndef UTIL_DATA_MSGENCODE_H #define UTIL_DATA_MSGENCODE_H struct sldns_buffer; struct query_info; struct reply_info; struct regional; struct edns_data; /** * Generate answer from reply_info. * @param qinf: query information that provides query section in packet. * @param rep: reply to fill in. * @param id: id word from the query. * @param qflags: flags word from the query. * @param dest: buffer to put message into; will truncate if it does not fit. * @param timenow: time to subtract. * @param cached: set true if a cached reply (so no AA bit). * set false for the first reply. * @param region: where to allocate temp variables (for compression). * @param udpsize: size of the answer, 512, from EDNS, or 64k for TCP. * @param edns: EDNS data included in the answer, NULL for none. * or if edns_present = 0, it is not included. * @param dnssec: if 0 DNSSEC records are omitted from the answer. * @param secure: if 1, the AD bit is set in the reply. * @return: 0 on error (server failure). */ int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, uint16_t id, uint16_t qflags, struct sldns_buffer* dest, time_t timenow, int cached, struct regional* region, uint16_t udpsize, struct edns_data* edns, int dnssec, int secure); /** * Regenerate the wireformat from the stored msg reply. * If the buffer is too small then the message is truncated at a whole * rrset and the TC bit set, or whole rrsets are left out of the additional * and the TC bit is not set. * @param qinfo: query info to store. * @param rep: reply to store. * @param id: id value to store, network order. * @param flags: flags value to store, host order. * @param buffer: buffer to store the packet into. * @param timenow: time now, to adjust ttl values. * @param region: to store temporary data in. * @param udpsize: size of the answer, 512, from EDNS, or 64k for TCP. * @param dnssec: if 0 DNSSEC records are omitted from the answer. * @param minimise: if true, the answer is a minimal response, with * authority and additional removed if possible. * @return: nonzero is success, or * 0 on error: malloc failure (no log_err has been done). */ int reply_info_encode(struct query_info* qinfo, struct reply_info* rep, uint16_t id, uint16_t flags, struct sldns_buffer* buffer, time_t timenow, struct regional* region, uint16_t udpsize, int dnssec, int minimise); /** * Encode query packet. Assumes the buffer is large enough. * @param pkt: where to store the packet. * @param qinfo: query info. */ void qinfo_query_encode(struct sldns_buffer* pkt, struct query_info* qinfo); /** * Estimate size of EDNS record in packet. EDNS record will be no larger. * @param edns: edns data or NULL. * @return octets to reserve for EDNS. */ uint16_t calc_edns_field_size(struct edns_data* edns); /** * Attach EDNS record to buffer. Buffer has complete packet. There must * be enough room left for the EDNS record. * @param pkt: packet added to. * @param edns: if NULL or present=0, nothing is added to the packet. */ void attach_edns_record(struct sldns_buffer* pkt, struct edns_data* edns); /** * Encode an error. With QR and RA set. * * @param pkt: where to store the packet. * @param r: RCODE value to encode. * @param qinfo: if not NULL, the query is included. * @param qid: query ID to set in packet. network order. * @param qflags: original query flags (to copy RD and CD bits). host order. * @param edns: if not NULL, this is the query edns info, * and an edns reply is attached. Only attached if EDNS record fits reply. */ void error_encode(struct sldns_buffer* pkt, int r, struct query_info* qinfo, uint16_t qid, uint16_t qflags, struct edns_data* edns); #endif /* UTIL_DATA_MSGENCODE_H */ unbound-1.13.1/util/data/msgparse.h0000644000175000017500000002763714010434640016576 0ustar wouterwouter/* * util/data/msgparse.h - parse wireformat DNS messages. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Contains message parsing data structures. * These point back into the packet buffer. * * During parsing RRSIGS are put together with the rrsets they (claim to) sign. * This process works as follows: * o if RRSIG follows the data rrset, it is added to the rrset rrsig list. * o if no matching data rrset is found, the RRSIG becomes a new rrset. * o If the data rrset later follows the RRSIG * o See if the RRSIG rrset contains multiple types, and needs to * have the rrsig(s) for that data type split off. * o Put the data rr as data type in the rrset and rrsig in list. * o RRSIGs are allowed to move to a different section. The section of * the data item is used for the final rrset. * o multiple signatures over an RRset are possible. * * For queries of qtype=RRSIG, some special handling is needed, to avoid * splitting the RRSIG in the answer section. * o duplicate, not split, RRSIGs from the answer section, if qtype=RRSIG. * o check for doubles in the rrsig list when adding an RRSIG to data, * so that a data rrset is signed by RRSIGs with different rdata. * when qtype=RRSIG. * This will move the RRSIG from the answer section to sign the data further * in the packet (if possible). If then after that, more RRSIGs are found * that sign the data as well, doubles are removed. */ #ifndef UTIL_DATA_MSGPARSE_H #define UTIL_DATA_MSGPARSE_H #include "util/storage/lruhash.h" #include "sldns/pkthdr.h" #include "sldns/rrdef.h" struct sldns_buffer; struct rrset_parse; struct rr_parse; struct regional; struct edns_option; /** number of buckets in parse rrset hash table. Must be power of 2. */ #define PARSE_TABLE_SIZE 32 /** Maximum TTL that is allowed. */ extern time_t MAX_TTL; /** Minimum TTL that is allowed. */ extern time_t MIN_TTL; /** Maximum Negative TTL that is allowed */ extern time_t MAX_NEG_TTL; /** If we serve expired entries and prefetch them */ extern int SERVE_EXPIRED; /** Time to serve records after expiration */ extern time_t SERVE_EXPIRED_TTL; /** TTL to use for expired records */ extern time_t SERVE_EXPIRED_REPLY_TTL; /** Negative cache time (for entries without any RRs.) */ #define NORR_TTL 5 /* seconds */ /** If we serve the original TTL or decrementing TTLs */ extern int SERVE_ORIGINAL_TTL; /** * Data stored in scratch pad memory during parsing. * Stores the data that will enter into the msgreply and packet result. */ struct msg_parse { /** id from message, network format. */ uint16_t id; /** flags from message, host format. */ uint16_t flags; /** count of RRs, host format */ uint16_t qdcount; /** count of RRs, host format */ uint16_t ancount; /** count of RRs, host format */ uint16_t nscount; /** count of RRs, host format */ uint16_t arcount; /** count of RRsets per section. */ size_t an_rrsets; /** count of RRsets per section. */ size_t ns_rrsets; /** count of RRsets per section. */ size_t ar_rrsets; /** total number of rrsets found. */ size_t rrset_count; /** query dname (pointer to start location in packet, NULL if none */ uint8_t* qname; /** length of query dname in octets, 0 if none */ size_t qname_len; /** query type, host order. 0 if qdcount=0 */ uint16_t qtype; /** query class, host order. 0 if qdcount=0 */ uint16_t qclass; /** * Hash table array used during parsing to lookup rrset types. * Based on name, type, class. Same hash value as in rrset cache. */ struct rrset_parse* hashtable[PARSE_TABLE_SIZE]; /** linked list of rrsets that have been found (in order). */ struct rrset_parse* rrset_first; /** last element of rrset list. */ struct rrset_parse* rrset_last; }; /** * Data stored for an rrset during parsing. */ struct rrset_parse { /** next in hash bucket */ struct rrset_parse* rrset_bucket_next; /** next in list of all rrsets */ struct rrset_parse* rrset_all_next; /** hash value of rrset */ hashvalue_type hash; /** which section was it found in: one of * LDNS_SECTION_ANSWER, LDNS_SECTION_AUTHORITY, LDNS_SECTION_ADDITIONAL */ sldns_pkt_section section; /** start of (possibly compressed) dname in packet */ uint8_t* dname; /** length of the dname uncompressed wireformat */ size_t dname_len; /** type, host order. */ uint16_t type; /** class, network order. var name so that it is not a c++ keyword. */ uint16_t rrset_class; /** the flags for the rrset, like for packedrrset */ uint32_t flags; /** number of RRs in the rr list */ size_t rr_count; /** sum of RR rdata sizes */ size_t size; /** linked list of RRs in this rrset. */ struct rr_parse* rr_first; /** last in list of RRs in this rrset. */ struct rr_parse* rr_last; /** number of RRSIGs over this rrset. */ size_t rrsig_count; /** linked list of RRsig RRs over this rrset. */ struct rr_parse* rrsig_first; /** last in list of RRSIG RRs over this rrset. */ struct rr_parse* rrsig_last; }; /** * Data stored for an RR during parsing. */ struct rr_parse { /** * Pointer to the RR. Points to start of TTL value in the packet. * Rdata length and rdata follow it. * its dname, type and class are the same and stored for the rrset. */ uint8_t* ttl_data; /** true if ttl_data is not part of the packet, but elsewhere in mem. * Set for generated CNAMEs for DNAMEs. */ int outside_packet; /** the length of the rdata if allocated (with no dname compression)*/ size_t size; /** next in list of RRs. */ struct rr_parse* next; }; /** Check if label length is first octet of a compression pointer, pass u8. */ #define LABEL_IS_PTR(x) ( ((x)&0xc0) == 0xc0 ) /** Calculate destination offset of a compression pointer. pass first and * second octets of the compression pointer. */ #define PTR_OFFSET(x, y) ( ((x)&0x3f)<<8 | (y) ) /** create a compression pointer to the given offset. */ #define PTR_CREATE(offset) ((uint16_t)(0xc000 | (offset))) /** error codes, extended with EDNS, so > 15. */ #define EDNS_RCODE_BADVERS 16 /** bad EDNS version */ /** largest valid compression offset */ #define PTR_MAX_OFFSET 0x3fff /** * EDNS data storage * rdata is parsed in a list (has accessor functions). allocated in a * region. */ struct edns_data { /** if EDNS OPT record was present */ int edns_present; /** Extended RCODE */ uint8_t ext_rcode; /** The EDNS version number */ uint8_t edns_version; /** the EDNS bits field from ttl (host order): Z */ uint16_t bits; /** UDP reassembly size. */ uint16_t udp_size; /** rdata element list, or NULL if none */ struct edns_option* opt_list; /** block size to pad */ uint16_t padding_block_size; }; /** * EDNS option */ struct edns_option { /** next item in list */ struct edns_option* next; /** type of this edns option */ uint16_t opt_code; /** length of this edns option (cannot exceed uint16 in encoding) */ size_t opt_len; /** data of this edns option; allocated in region, or NULL if len=0 */ uint8_t* opt_data; }; /** * Obtain size in the packet of an rr type, that is before dname type. * Do TYPE_DNAME, and type STR, yourself. Gives size for most regular types. * @param rdf: the rdf type from the descriptor. * @return: size in octets. 0 on failure. */ size_t get_rdf_size(sldns_rdf_type rdf); /** * Parse the packet. * @param pkt: packet, position at call must be at start of packet. * at end position is after packet. * @param msg: where to store results. * @param region: how to alloc results. * @return: 0 if OK, or rcode on error. */ int parse_packet(struct sldns_buffer* pkt, struct msg_parse* msg, struct regional* region); /** * After parsing the packet, extract EDNS data from packet. * If not present this is noted in the data structure. * If a parse error happens, an error code is returned. * * Quirks: * o ignores OPT rdata. * o ignores OPT owner name. * o ignores extra OPT records, except the last one in the packet. * * @param msg: parsed message structure. Modified on exit, if EDNS was present * it is removed from the additional section. * @param edns: the edns data is stored here. Does not have to be initialised. * @param region: region to alloc results in (edns option contents) * @return: 0 on success. or an RCODE on an error. * RCODE formerr if OPT in wrong section, and so on. */ int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns, struct regional* region); /** * If EDNS data follows a query section, extract it and initialize edns struct. * @param pkt: the packet. position at start must be right after the query * section. At end, right after EDNS data or no movement if failed. * @param edns: the edns data allocated by the caller. Does not have to be * initialised. * @param region: region to alloc results in (edns option contents) * @return: 0 on success, or an RCODE on error. * RCODE formerr if OPT is badly formatted and so on. */ int parse_edns_from_pkt(struct sldns_buffer* pkt, struct edns_data* edns, struct regional* region); /** * Calculate hash value for rrset in packet. * @param pkt: the packet. * @param dname: pointer to uncompressed dname, or compressed dname in packet. * @param type: rrset type in host order. * @param dclass: rrset class in network order. * @param rrset_flags: rrset flags (same as packed_rrset flags). * @return hash value */ hashvalue_type pkt_hash_rrset(struct sldns_buffer* pkt, uint8_t* dname, uint16_t type, uint16_t dclass, uint32_t rrset_flags); /** * Lookup in msg hashtable to find a rrset. * @param msg: with the hashtable. * @param pkt: packet for compressed names. * @param h: hash value * @param rrset_flags: flags of rrset sought for. * @param dname: name of rrset sought for. * @param dnamelen: len of dname. * @param type: rrset type, host order. * @param dclass: rrset class, network order. * @return NULL or the rrset_parse if found. */ struct rrset_parse* msgparse_hashtable_lookup(struct msg_parse* msg, struct sldns_buffer* pkt, hashvalue_type h, uint32_t rrset_flags, uint8_t* dname, size_t dnamelen, uint16_t type, uint16_t dclass); /** * Remove rrset from hash table. * @param msg: with hashtable. * @param rrset: with hash value and id info. */ void msgparse_bucket_remove(struct msg_parse* msg, struct rrset_parse* rrset); /** * Log the edns options in the edns option list. * @param level: the verbosity level. * @param info_str: the informational string to be printed before the options. * @param list: the edns option list. */ void log_edns_opt_list(enum verbosity_value level, const char* info_str, struct edns_option* list); #endif /* UTIL_DATA_MSGPARSE_H */ unbound-1.13.1/util/data/packed_rrset.c0000644000175000017500000002741514010434640017410 0ustar wouterwouter/* * util/data/packed_rrset.c - data storage for a set of resource records. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains the data storage for RRsets. */ #include "config.h" #include "util/data/msgparse.h" #include "util/data/packed_rrset.h" #include "util/data/dname.h" #include "util/storage/lookup3.h" #include "util/log.h" #include "util/alloc.h" #include "util/regional.h" #include "util/net_help.h" #include "sldns/rrdef.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" void ub_packed_rrset_parsedelete(struct ub_packed_rrset_key* pkey, struct alloc_cache* alloc) { if(!pkey) return; free(pkey->entry.data); pkey->entry.data = NULL; free(pkey->rk.dname); pkey->rk.dname = NULL; pkey->id = 0; alloc_special_release(alloc, pkey); } size_t ub_rrset_sizefunc(void* key, void* data) { struct ub_packed_rrset_key* k = (struct ub_packed_rrset_key*)key; struct packed_rrset_data* d = (struct packed_rrset_data*)data; size_t s = sizeof(struct ub_packed_rrset_key) + k->rk.dname_len; s += packed_rrset_sizeof(d) + lock_get_mem(&k->entry.lock); return s; } size_t packed_rrset_sizeof(struct packed_rrset_data* d) { size_t s; if(d->rrsig_count > 0) { s = ((uint8_t*)d->rr_data[d->count+d->rrsig_count-1] - (uint8_t*)d) + d->rr_len[d->count+d->rrsig_count-1]; } else { log_assert(d->count > 0); s = ((uint8_t*)d->rr_data[d->count-1] - (uint8_t*)d) + d->rr_len[d->count-1]; } return s; } int ub_rrset_compare(void* k1, void* k2) { struct ub_packed_rrset_key* key1 = (struct ub_packed_rrset_key*)k1; struct ub_packed_rrset_key* key2 = (struct ub_packed_rrset_key*)k2; int c; if(key1 == key2) return 0; if(key1->rk.type != key2->rk.type) { if(key1->rk.type < key2->rk.type) return -1; return 1; } if(key1->rk.dname_len != key2->rk.dname_len) { if(key1->rk.dname_len < key2->rk.dname_len) return -1; return 1; } if((c=query_dname_compare(key1->rk.dname, key2->rk.dname)) != 0) return c; if(key1->rk.rrset_class != key2->rk.rrset_class) { if(key1->rk.rrset_class < key2->rk.rrset_class) return -1; return 1; } if(key1->rk.flags != key2->rk.flags) { if(key1->rk.flags < key2->rk.flags) return -1; return 1; } return 0; } void ub_rrset_key_delete(void* key, void* userdata) { struct ub_packed_rrset_key* k = (struct ub_packed_rrset_key*)key; struct alloc_cache* a = (struct alloc_cache*)userdata; k->id = 0; free(k->rk.dname); k->rk.dname = NULL; alloc_special_release(a, k); } void rrset_data_delete(void* data, void* ATTR_UNUSED(userdata)) { struct packed_rrset_data* d = (struct packed_rrset_data*)data; free(d); } int rrsetdata_equal(struct packed_rrset_data* d1, struct packed_rrset_data* d2) { size_t i; size_t total; if(d1->count != d2->count || d1->rrsig_count != d2->rrsig_count) return 0; total = d1->count + d1->rrsig_count; for(i=0; irr_len[i] != d2->rr_len[i]) return 0; if(memcmp(d1->rr_data[i], d2->rr_data[i], d1->rr_len[i]) != 0) return 0; } return 1; } hashvalue_type rrset_key_hash(struct packed_rrset_key* key) { /* type is hashed in host order */ uint16_t t = ntohs(key->type); /* Note this MUST be identical to pkt_hash_rrset in msgparse.c */ /* this routine does not have a compressed name */ hashvalue_type h = 0xab; h = dname_query_hash(key->dname, h); h = hashlittle(&t, sizeof(t), h); h = hashlittle(&key->rrset_class, sizeof(uint16_t), h); h = hashlittle(&key->flags, sizeof(uint32_t), h); return h; } void packed_rrset_ptr_fixup(struct packed_rrset_data* data) { size_t i; size_t total = data->count + data->rrsig_count; uint8_t* nextrdata; /* fixup pointers in packed rrset data */ data->rr_len = (size_t*)((uint8_t*)data + sizeof(struct packed_rrset_data)); data->rr_data = (uint8_t**)&(data->rr_len[total]); data->rr_ttl = (time_t*)&(data->rr_data[total]); nextrdata = (uint8_t*)&(data->rr_ttl[total]); for(i=0; irr_data[i] = nextrdata; nextrdata += data->rr_len[i]; } } void get_cname_target(struct ub_packed_rrset_key* rrset, uint8_t** dname, size_t* dname_len) { struct packed_rrset_data* d; size_t len; if(ntohs(rrset->rk.type) != LDNS_RR_TYPE_CNAME && ntohs(rrset->rk.type) != LDNS_RR_TYPE_DNAME) return; d = (struct packed_rrset_data*)rrset->entry.data; if(d->count < 1) return; if(d->rr_len[0] < 3) /* at least rdatalen + 0byte root label */ return; len = sldns_read_uint16(d->rr_data[0]); if(len != d->rr_len[0] - sizeof(uint16_t)) return; if(dname_valid(d->rr_data[0]+sizeof(uint16_t), len) != len) return; *dname = d->rr_data[0]+sizeof(uint16_t); *dname_len = len; } void packed_rrset_ttl_add(struct packed_rrset_data* data, time_t add) { size_t i; size_t total = data->count + data->rrsig_count; data->ttl_add = add; data->ttl += add; for(i=0; irr_ttl[i] += add; } const char* rrset_trust_to_string(enum rrset_trust s) { switch(s) { case rrset_trust_none: return "rrset_trust_none"; case rrset_trust_add_noAA: return "rrset_trust_add_noAA"; case rrset_trust_auth_noAA: return "rrset_trust_auth_noAA"; case rrset_trust_add_AA: return "rrset_trust_add_AA"; case rrset_trust_nonauth_ans_AA:return "rrset_trust_nonauth_ans_AA"; case rrset_trust_ans_noAA: return "rrset_trust_ans_noAA"; case rrset_trust_glue: return "rrset_trust_glue"; case rrset_trust_auth_AA: return "rrset_trust_auth_AA"; case rrset_trust_ans_AA: return "rrset_trust_ans_AA"; case rrset_trust_sec_noglue: return "rrset_trust_sec_noglue"; case rrset_trust_prim_noglue: return "rrset_trust_prim_noglue"; case rrset_trust_validated: return "rrset_trust_validated"; case rrset_trust_ultimate: return "rrset_trust_ultimate"; } return "unknown_rrset_trust_value"; } const char* sec_status_to_string(enum sec_status s) { switch(s) { case sec_status_unchecked: return "sec_status_unchecked"; case sec_status_bogus: return "sec_status_bogus"; case sec_status_indeterminate: return "sec_status_indeterminate"; case sec_status_insecure: return "sec_status_insecure"; case sec_status_secure_sentinel_fail: return "sec_status_secure_sentinel_fail"; case sec_status_secure: return "sec_status_secure"; } return "unknown_sec_status_value"; } void log_rrset_key(enum verbosity_value v, const char* str, struct ub_packed_rrset_key* rrset) { if(verbosity >= v) log_nametypeclass(v, str, rrset->rk.dname, ntohs(rrset->rk.type), ntohs(rrset->rk.rrset_class)); } int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i, time_t now, char* dest, size_t dest_len) { struct packed_rrset_data* d = (struct packed_rrset_data*)rrset-> entry.data; uint8_t rr[65535]; size_t rlen = rrset->rk.dname_len + 2 + 2 + 4 + d->rr_len[i]; time_t adjust = 0; log_assert(dest_len > 0 && dest); if(rlen > dest_len) { dest[0] = 0; return 0; } memmove(rr, rrset->rk.dname, rrset->rk.dname_len); if(i < d->count) memmove(rr+rrset->rk.dname_len, &rrset->rk.type, 2); else sldns_write_uint16(rr+rrset->rk.dname_len, LDNS_RR_TYPE_RRSIG); memmove(rr+rrset->rk.dname_len+2, &rrset->rk.rrset_class, 2); adjust = SERVE_ORIGINAL_TTL ? d->ttl_add : now; if (d->rr_ttl[i] < adjust) adjust = d->rr_ttl[i]; /* Prevent negative TTL overflow */ sldns_write_uint32(rr+rrset->rk.dname_len+4, (uint32_t)(d->rr_ttl[i]-adjust)); memmove(rr+rrset->rk.dname_len+8, d->rr_data[i], d->rr_len[i]); if(sldns_wire2str_rr_buf(rr, rlen, dest, dest_len) == -1) { log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest); dest[0] = 0; return 0; } return 1; } void log_packed_rrset(enum verbosity_value v, const char* str, struct ub_packed_rrset_key* rrset) { struct packed_rrset_data* d = (struct packed_rrset_data*)rrset-> entry.data; char buf[65535]; size_t i; if(verbosity < v) return; for(i=0; icount+d->rrsig_count; i++) { if(!packed_rr_to_string(rrset, i, 0, buf, sizeof(buf))) { log_info("%s: rr %d wire2str-error", str, (int)i); } else { log_info("%s: %s", str, buf); } } } time_t ub_packed_rrset_ttl(struct ub_packed_rrset_key* key) { struct packed_rrset_data* d = (struct packed_rrset_data*)key-> entry.data; return d->ttl; } struct ub_packed_rrset_key* packed_rrset_copy_region(struct ub_packed_rrset_key* key, struct regional* region, time_t now) { struct ub_packed_rrset_key* ck = regional_alloc(region, sizeof(struct ub_packed_rrset_key)); struct packed_rrset_data* d; struct packed_rrset_data* data = (struct packed_rrset_data*) key->entry.data; size_t dsize, i; time_t adjust = 0; if(!ck) return NULL; ck->id = key->id; memset(&ck->entry, 0, sizeof(ck->entry)); ck->entry.hash = key->entry.hash; ck->entry.key = ck; ck->rk = key->rk; ck->rk.dname = regional_alloc_init(region, key->rk.dname, key->rk.dname_len); if(!ck->rk.dname) return NULL; dsize = packed_rrset_sizeof(data); d = (struct packed_rrset_data*)regional_alloc_init(region, data, dsize); if(!d) return NULL; ck->entry.data = d; packed_rrset_ptr_fixup(d); /* make TTLs relative - once per rrset */ adjust = SERVE_ORIGINAL_TTL ? data->ttl_add : now; for(i=0; icount + d->rrsig_count; i++) { if(d->rr_ttl[i] < adjust) d->rr_ttl[i] = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; else d->rr_ttl[i] -= adjust; } if(d->ttl < adjust) d->ttl = SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0; else d->ttl -= adjust; d->ttl_add = 0; /* TTLs have been made relative */ return ck; } struct ub_packed_rrset_key* packed_rrset_copy_alloc(struct ub_packed_rrset_key* key, struct alloc_cache* alloc, time_t now) { struct packed_rrset_data* fd, *dd; struct ub_packed_rrset_key* dk = alloc_special_obtain(alloc); if(!dk) return NULL; fd = (struct packed_rrset_data*)key->entry.data; dk->entry.hash = key->entry.hash; dk->rk = key->rk; dk->rk.dname = (uint8_t*)memdup(key->rk.dname, key->rk.dname_len); if(!dk->rk.dname) { alloc_special_release(alloc, dk); return NULL; } dd = (struct packed_rrset_data*)memdup(fd, packed_rrset_sizeof(fd)); if(!dd) { free(dk->rk.dname); alloc_special_release(alloc, dk); return NULL; } packed_rrset_ptr_fixup(dd); dk->entry.data = (void*)dd; packed_rrset_ttl_add(dd, now); return dk; } int packed_rrset_find_rr(struct packed_rrset_data* d, uint8_t* rdata, size_t len, size_t* index) { size_t i; for(i=0; icount; i++) { if(d->rr_len[i] != len) continue; if(memcmp(d->rr_data[i], rdata, len) == 0) { *index = i; return 1; } } return 0; } unbound-1.13.1/util/data/msgreply.c0000644000175000017500000010703414010434640016600 0ustar wouterwouter/* * util/data/msgreply.c - store message and reply data. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a data structure to store a message and its reply. */ #include "config.h" #include "util/data/msgreply.h" #include "util/storage/lookup3.h" #include "util/log.h" #include "util/alloc.h" #include "util/netevent.h" #include "util/net_help.h" #include "util/data/dname.h" #include "util/regional.h" #include "util/data/msgparse.h" #include "util/data/msgencode.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "util/module.h" #include "util/fptr_wlist.h" /** MAX TTL default for messages and rrsets */ time_t MAX_TTL = 3600 * 24 * 10; /* ten days */ /** MIN TTL default for messages and rrsets */ time_t MIN_TTL = 0; /** MAX Negative TTL, for SOA records in authority section */ time_t MAX_NEG_TTL = 3600; /* one hour */ /** If we serve expired entries and prefetch them */ int SERVE_EXPIRED = 0; /** Time to serve records after expiration */ time_t SERVE_EXPIRED_TTL = 0; /** TTL to use for expired records */ time_t SERVE_EXPIRED_REPLY_TTL = 30; /** If we serve the original TTL or decrementing TTLs */ int SERVE_ORIGINAL_TTL = 0; /** allocate qinfo, return 0 on error */ static int parse_create_qinfo(sldns_buffer* pkt, struct msg_parse* msg, struct query_info* qinf, struct regional* region) { if(msg->qname) { if(region) qinf->qname = (uint8_t*)regional_alloc(region, msg->qname_len); else qinf->qname = (uint8_t*)malloc(msg->qname_len); if(!qinf->qname) return 0; dname_pkt_copy(pkt, qinf->qname, msg->qname); } else qinf->qname = 0; qinf->qname_len = msg->qname_len; qinf->qtype = msg->qtype; qinf->qclass = msg->qclass; qinf->local_alias = NULL; return 1; } /** constructor for replyinfo */ struct reply_info* construct_reply_info_base(struct regional* region, uint16_t flags, size_t qd, time_t ttl, time_t prettl, time_t expttl, size_t an, size_t ns, size_t ar, size_t total, enum sec_status sec) { struct reply_info* rep; /* rrset_count-1 because the first ref is part of the struct. */ size_t s = sizeof(struct reply_info) - sizeof(struct rrset_ref) + sizeof(struct ub_packed_rrset_key*) * total; if(total >= RR_COUNT_MAX) return NULL; /* sanity check on numRRS*/ if(region) rep = (struct reply_info*)regional_alloc(region, s); else rep = (struct reply_info*)malloc(s + sizeof(struct rrset_ref) * (total)); if(!rep) return NULL; rep->flags = flags; rep->qdcount = qd; rep->ttl = ttl; rep->prefetch_ttl = prettl; rep->serve_expired_ttl = expttl; rep->an_numrrsets = an; rep->ns_numrrsets = ns; rep->ar_numrrsets = ar; rep->rrset_count = total; rep->security = sec; rep->authoritative = 0; /* array starts after the refs */ if(region) rep->rrsets = (struct ub_packed_rrset_key**)&(rep->ref[0]); else rep->rrsets = (struct ub_packed_rrset_key**)&(rep->ref[total]); /* zero the arrays to assist cleanup in case of malloc failure */ memset( rep->rrsets, 0, sizeof(struct ub_packed_rrset_key*) * total); if(!region) memset( &rep->ref[0], 0, sizeof(struct rrset_ref) * total); return rep; } /** allocate replyinfo, return 0 on error */ static int parse_create_repinfo(struct msg_parse* msg, struct reply_info** rep, struct regional* region) { *rep = construct_reply_info_base(region, msg->flags, msg->qdcount, 0, 0, 0, msg->an_rrsets, msg->ns_rrsets, msg->ar_rrsets, msg->rrset_count, sec_status_unchecked); if(!*rep) return 0; return 1; } int reply_info_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc, struct regional* region) { size_t i; for(i=0; irrset_count; i++) { if(region) { rep->rrsets[i] = (struct ub_packed_rrset_key*) regional_alloc(region, sizeof(struct ub_packed_rrset_key)); if(rep->rrsets[i]) { memset(rep->rrsets[i], 0, sizeof(struct ub_packed_rrset_key)); rep->rrsets[i]->entry.key = rep->rrsets[i]; } } else rep->rrsets[i] = alloc_special_obtain(alloc); if(!rep->rrsets[i]) return 0; rep->rrsets[i]->entry.data = NULL; } return 1; } /** find the minimumttl in the rdata of SOA record */ static time_t soa_find_minttl(struct rr_parse* rr) { uint16_t rlen = sldns_read_uint16(rr->ttl_data+4); if(rlen < 20) return 0; /* rdata too small for SOA (dname, dname, 5*32bit) */ /* minimum TTL is the last 32bit value in the rdata of the record */ /* at position ttl_data + 4(ttl) + 2(rdatalen) + rdatalen - 4(timeval)*/ return (time_t)sldns_read_uint32(rr->ttl_data+6+rlen-4); } /** do the rdata copy */ static int rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to, struct rr_parse* rr, time_t* rr_ttl, uint16_t type, sldns_pkt_section section) { uint16_t pkt_len; const sldns_rr_descriptor* desc; *rr_ttl = sldns_read_uint32(rr->ttl_data); /* RFC 2181 Section 8. if msb of ttl is set treat as if zero. */ if(*rr_ttl & 0x80000000U) *rr_ttl = 0; if(type == LDNS_RR_TYPE_SOA && section == LDNS_SECTION_AUTHORITY) { /* negative response. see if TTL of SOA record larger than the * minimum-ttl in the rdata of the SOA record */ if(*rr_ttl > soa_find_minttl(rr)) *rr_ttl = soa_find_minttl(rr); if(*rr_ttl > MAX_NEG_TTL) *rr_ttl = MAX_NEG_TTL; } if(!SERVE_ORIGINAL_TTL && (*rr_ttl < MIN_TTL)) *rr_ttl = MIN_TTL; if(!SERVE_ORIGINAL_TTL && (*rr_ttl > MAX_TTL)) *rr_ttl = MAX_TTL; if(*rr_ttl < data->ttl) data->ttl = *rr_ttl; if(rr->outside_packet) { /* uncompressed already, only needs copy */ memmove(to, rr->ttl_data+sizeof(uint32_t), rr->size); return 1; } sldns_buffer_set_position(pkt, (size_t) (rr->ttl_data - sldns_buffer_begin(pkt) + sizeof(uint32_t))); /* insert decompressed size into rdata len stored in memory */ /* -2 because rdatalen bytes are not included. */ pkt_len = htons(rr->size - 2); memmove(to, &pkt_len, sizeof(uint16_t)); to += 2; /* read packet rdata len */ pkt_len = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < pkt_len) return 0; desc = sldns_rr_descript(type); if(pkt_len > 0 && desc && desc->_dname_count > 0) { int count = (int)desc->_dname_count; int rdf = 0; size_t len; size_t oldpos; /* decompress dnames. */ while(pkt_len > 0 && count) { switch(desc->_wireformat[rdf]) { case LDNS_RDF_TYPE_DNAME: oldpos = sldns_buffer_position(pkt); dname_pkt_copy(pkt, to, sldns_buffer_current(pkt)); to += pkt_dname_len(pkt); pkt_len -= sldns_buffer_position(pkt)-oldpos; count--; len = 0; break; case LDNS_RDF_TYPE_STR: len = sldns_buffer_current(pkt)[0] + 1; break; default: len = get_rdf_size(desc->_wireformat[rdf]); break; } if(len) { log_assert(len <= pkt_len); memmove(to, sldns_buffer_current(pkt), len); to += len; sldns_buffer_skip(pkt, (ssize_t)len); pkt_len -= len; } rdf++; } } /* copy remaining rdata */ if(pkt_len > 0) memmove(to, sldns_buffer_current(pkt), pkt_len); return 1; } /** copy over the data into packed rrset */ static int parse_rr_copy(sldns_buffer* pkt, struct rrset_parse* pset, struct packed_rrset_data* data) { size_t i; struct rr_parse* rr = pset->rr_first; uint8_t* nextrdata; size_t total = pset->rr_count + pset->rrsig_count; data->ttl = MAX_TTL; data->count = pset->rr_count; data->rrsig_count = pset->rrsig_count; data->trust = rrset_trust_none; data->security = sec_status_unchecked; /* layout: struct - rr_len - rr_data - rr_ttl - rdata - rrsig */ data->rr_len = (size_t*)((uint8_t*)data + sizeof(struct packed_rrset_data)); data->rr_data = (uint8_t**)&(data->rr_len[total]); data->rr_ttl = (time_t*)&(data->rr_data[total]); nextrdata = (uint8_t*)&(data->rr_ttl[total]); for(i=0; icount; i++) { data->rr_len[i] = rr->size; data->rr_data[i] = nextrdata; nextrdata += rr->size; if(!rdata_copy(pkt, data, data->rr_data[i], rr, &data->rr_ttl[i], pset->type, pset->section)) return 0; rr = rr->next; } /* if rrsig, its rdata is at nextrdata */ rr = pset->rrsig_first; for(i=data->count; irr_len[i] = rr->size; data->rr_data[i] = nextrdata; nextrdata += rr->size; if(!rdata_copy(pkt, data, data->rr_data[i], rr, &data->rr_ttl[i], LDNS_RR_TYPE_RRSIG, pset->section)) return 0; rr = rr->next; } return 1; } /** create rrset return 0 on failure */ static int parse_create_rrset(sldns_buffer* pkt, struct rrset_parse* pset, struct packed_rrset_data** data, struct regional* region) { /* allocate */ size_t s; if(pset->rr_count > RR_COUNT_MAX || pset->rrsig_count > RR_COUNT_MAX || pset->size > RR_COUNT_MAX) return 0; /* protect against integer overflow */ s = sizeof(struct packed_rrset_data) + (pset->rr_count + pset->rrsig_count) * (sizeof(size_t)+sizeof(uint8_t*)+sizeof(time_t)) + pset->size; if(region) *data = regional_alloc_zero(region, s); else *data = calloc(1, s); if(!*data) return 0; /* copy & decompress */ if(!parse_rr_copy(pkt, pset, *data)) { if(!region) free(*data); return 0; } return 1; } /** get trust value for rrset */ static enum rrset_trust get_rrset_trust(struct msg_parse* msg, struct rrset_parse* rrset) { uint16_t AA = msg->flags & BIT_AA; if(rrset->section == LDNS_SECTION_ANSWER) { if(AA) { /* RFC2181 says remainder of CNAME chain is nonauth*/ if(msg->rrset_first && msg->rrset_first->section==LDNS_SECTION_ANSWER && msg->rrset_first->type==LDNS_RR_TYPE_CNAME){ if(rrset == msg->rrset_first) return rrset_trust_ans_AA; else return rrset_trust_ans_noAA; } if(msg->rrset_first && msg->rrset_first->section==LDNS_SECTION_ANSWER && msg->rrset_first->type==LDNS_RR_TYPE_DNAME){ if(rrset == msg->rrset_first || rrset == msg->rrset_first->rrset_all_next) return rrset_trust_ans_AA; else return rrset_trust_ans_noAA; } return rrset_trust_ans_AA; } else return rrset_trust_ans_noAA; } else if(rrset->section == LDNS_SECTION_AUTHORITY) { if(AA) return rrset_trust_auth_AA; else return rrset_trust_auth_noAA; } else { /* addit section */ if(AA) return rrset_trust_add_AA; else return rrset_trust_add_noAA; } /* NOTREACHED */ return rrset_trust_none; } int parse_copy_decompress_rrset(sldns_buffer* pkt, struct msg_parse* msg, struct rrset_parse *pset, struct regional* region, struct ub_packed_rrset_key* pk) { struct packed_rrset_data* data; pk->rk.flags = pset->flags; pk->rk.dname_len = pset->dname_len; if(region) pk->rk.dname = (uint8_t*)regional_alloc( region, pset->dname_len); else pk->rk.dname = (uint8_t*)malloc(pset->dname_len); if(!pk->rk.dname) return 0; /** copy & decompress dname */ dname_pkt_copy(pkt, pk->rk.dname, pset->dname); /** copy over type and class */ pk->rk.type = htons(pset->type); pk->rk.rrset_class = pset->rrset_class; /** read data part. */ if(!parse_create_rrset(pkt, pset, &data, region)) return 0; pk->entry.data = (void*)data; pk->entry.key = (void*)pk; pk->entry.hash = pset->hash; data->trust = get_rrset_trust(msg, pset); return 1; } /** * Copy and decompress rrs * @param pkt: the packet for compression pointer resolution. * @param msg: the parsed message * @param rep: reply info to put rrs into. * @param region: if not NULL, used for allocation. * @return 0 on failure. */ static int parse_copy_decompress(sldns_buffer* pkt, struct msg_parse* msg, struct reply_info* rep, struct regional* region) { size_t i; struct rrset_parse *pset = msg->rrset_first; struct packed_rrset_data* data; log_assert(rep); rep->ttl = MAX_TTL; rep->security = sec_status_unchecked; if(rep->rrset_count == 0) rep->ttl = NORR_TTL; for(i=0; irrset_count; i++) { if(!parse_copy_decompress_rrset(pkt, msg, pset, region, rep->rrsets[i])) return 0; data = (struct packed_rrset_data*)rep->rrsets[i]->entry.data; if(data->ttl < rep->ttl) rep->ttl = data->ttl; pset = pset->rrset_all_next; } rep->prefetch_ttl = PREFETCH_TTL_CALC(rep->ttl); rep->serve_expired_ttl = rep->ttl + SERVE_EXPIRED_TTL; return 1; } int parse_create_msg(sldns_buffer* pkt, struct msg_parse* msg, struct alloc_cache* alloc, struct query_info* qinf, struct reply_info** rep, struct regional* region) { log_assert(pkt && msg); if(!parse_create_qinfo(pkt, msg, qinf, region)) return 0; if(!parse_create_repinfo(msg, rep, region)) return 0; if(!reply_info_alloc_rrset_keys(*rep, alloc, region)) { if(!region) reply_info_parsedelete(*rep, alloc); return 0; } if(!parse_copy_decompress(pkt, msg, *rep, region)) { if(!region) reply_info_parsedelete(*rep, alloc); return 0; } return 1; } int reply_info_parse(sldns_buffer* pkt, struct alloc_cache* alloc, struct query_info* qinf, struct reply_info** rep, struct regional* region, struct edns_data* edns) { /* use scratch pad region-allocator during parsing. */ struct msg_parse* msg; int ret; qinf->qname = NULL; qinf->local_alias = NULL; *rep = NULL; if(!(msg = regional_alloc(region, sizeof(*msg)))) { return LDNS_RCODE_SERVFAIL; } memset(msg, 0, sizeof(*msg)); sldns_buffer_set_position(pkt, 0); if((ret = parse_packet(pkt, msg, region)) != 0) { return ret; } if((ret = parse_extract_edns(msg, edns, region)) != 0) return ret; /* parse OK, allocate return structures */ /* this also performs dname decompression */ if(!parse_create_msg(pkt, msg, alloc, qinf, rep, NULL)) { query_info_clear(qinf); reply_info_parsedelete(*rep, alloc); *rep = NULL; return LDNS_RCODE_SERVFAIL; } return 0; } /** helper compare function to sort in lock order */ static int reply_info_sortref_cmp(const void* a, const void* b) { struct rrset_ref* x = (struct rrset_ref*)a; struct rrset_ref* y = (struct rrset_ref*)b; if(x->key < y->key) return -1; if(x->key > y->key) return 1; return 0; } void reply_info_sortref(struct reply_info* rep) { qsort(&rep->ref[0], rep->rrset_count, sizeof(struct rrset_ref), reply_info_sortref_cmp); } void reply_info_set_ttls(struct reply_info* rep, time_t timenow) { size_t i, j; rep->ttl += timenow; rep->prefetch_ttl += timenow; rep->serve_expired_ttl += timenow; for(i=0; irrset_count; i++) { struct packed_rrset_data* data = (struct packed_rrset_data*) rep->ref[i].key->entry.data; if(i>0 && rep->ref[i].key == rep->ref[i-1].key) continue; data->ttl += timenow; for(j=0; jcount + data->rrsig_count; j++) { data->rr_ttl[j] += timenow; } data->ttl_add = timenow; } } void reply_info_parsedelete(struct reply_info* rep, struct alloc_cache* alloc) { size_t i; if(!rep) return; /* no need to lock, since not shared in hashtables. */ for(i=0; irrset_count; i++) { ub_packed_rrset_parsedelete(rep->rrsets[i], alloc); } free(rep); } int query_info_parse(struct query_info* m, sldns_buffer* query) { uint8_t* q = sldns_buffer_begin(query); /* minimum size: header + \0 + qtype + qclass */ if(sldns_buffer_limit(query) < LDNS_HEADER_SIZE + 5) return 0; if((LDNS_OPCODE_WIRE(q) != LDNS_PACKET_QUERY && LDNS_OPCODE_WIRE(q) != LDNS_PACKET_NOTIFY) || LDNS_QDCOUNT(q) != 1 || sldns_buffer_position(query) != 0) return 0; sldns_buffer_skip(query, LDNS_HEADER_SIZE); m->qname = sldns_buffer_current(query); if((m->qname_len = query_dname_len(query)) == 0) return 0; /* parse error */ if(sldns_buffer_remaining(query) < 4) return 0; /* need qtype, qclass */ m->qtype = sldns_buffer_read_u16(query); m->qclass = sldns_buffer_read_u16(query); m->local_alias = NULL; return 1; } /** tiny subroutine for msgreply_compare */ #define COMPARE_IT(x, y) \ if( (x) < (y) ) return -1; \ else if( (x) > (y) ) return +1; \ log_assert( (x) == (y) ); int query_info_compare(void* m1, void* m2) { struct query_info* msg1 = (struct query_info*)m1; struct query_info* msg2 = (struct query_info*)m2; int mc; /* from most different to least different for speed */ COMPARE_IT(msg1->qtype, msg2->qtype); if((mc = query_dname_compare(msg1->qname, msg2->qname)) != 0) return mc; log_assert(msg1->qname_len == msg2->qname_len); COMPARE_IT(msg1->qclass, msg2->qclass); return 0; #undef COMPARE_IT } void query_info_clear(struct query_info* m) { free(m->qname); m->qname = NULL; } size_t msgreply_sizefunc(void* k, void* d) { struct msgreply_entry* q = (struct msgreply_entry*)k; struct reply_info* r = (struct reply_info*)d; size_t s = sizeof(struct msgreply_entry) + sizeof(struct reply_info) + q->key.qname_len + lock_get_mem(&q->entry.lock) - sizeof(struct rrset_ref); s += r->rrset_count * sizeof(struct rrset_ref); s += r->rrset_count * sizeof(struct ub_packed_rrset_key*); return s; } void query_entry_delete(void *k, void* ATTR_UNUSED(arg)) { struct msgreply_entry* q = (struct msgreply_entry*)k; lock_rw_destroy(&q->entry.lock); query_info_clear(&q->key); free(q); } void reply_info_delete(void* d, void* ATTR_UNUSED(arg)) { struct reply_info* r = (struct reply_info*)d; free(r); } hashvalue_type query_info_hash(struct query_info *q, uint16_t flags) { hashvalue_type h = 0xab; h = hashlittle(&q->qtype, sizeof(q->qtype), h); if(q->qtype == LDNS_RR_TYPE_AAAA && (flags&BIT_CD)) h++; h = hashlittle(&q->qclass, sizeof(q->qclass), h); h = dname_query_hash(q->qname, h); return h; } struct msgreply_entry* query_info_entrysetup(struct query_info* q, struct reply_info* r, hashvalue_type h) { struct msgreply_entry* e = (struct msgreply_entry*)malloc( sizeof(struct msgreply_entry)); if(!e) return NULL; memcpy(&e->key, q, sizeof(*q)); e->entry.hash = h; e->entry.key = e; e->entry.data = r; lock_rw_init(&e->entry.lock); lock_protect(&e->entry.lock, &e->key.qname, sizeof(e->key.qname)); lock_protect(&e->entry.lock, &e->key.qname_len, sizeof(e->key.qname_len)); lock_protect(&e->entry.lock, &e->key.qtype, sizeof(e->key.qtype)); lock_protect(&e->entry.lock, &e->key.qclass, sizeof(e->key.qclass)); lock_protect(&e->entry.lock, &e->key.local_alias, sizeof(e->key.local_alias)); lock_protect(&e->entry.lock, &e->entry.hash, sizeof(e->entry.hash)); lock_protect(&e->entry.lock, &e->entry.key, sizeof(e->entry.key)); lock_protect(&e->entry.lock, &e->entry.data, sizeof(e->entry.data)); lock_protect(&e->entry.lock, e->key.qname, e->key.qname_len); q->qname = NULL; return e; } /** copy rrsets from replyinfo to dest replyinfo */ static int repinfo_copy_rrsets(struct reply_info* dest, struct reply_info* from, struct regional* region) { size_t i, s; struct packed_rrset_data* fd, *dd; struct ub_packed_rrset_key* fk, *dk; for(i=0; irrset_count; i++) { fk = from->rrsets[i]; dk = dest->rrsets[i]; fd = (struct packed_rrset_data*)fk->entry.data; dk->entry.hash = fk->entry.hash; dk->rk = fk->rk; if(region) { dk->id = fk->id; dk->rk.dname = (uint8_t*)regional_alloc_init(region, fk->rk.dname, fk->rk.dname_len); } else dk->rk.dname = (uint8_t*)memdup(fk->rk.dname, fk->rk.dname_len); if(!dk->rk.dname) return 0; s = packed_rrset_sizeof(fd); if(region) dd = (struct packed_rrset_data*)regional_alloc_init( region, fd, s); else dd = (struct packed_rrset_data*)memdup(fd, s); if(!dd) return 0; packed_rrset_ptr_fixup(dd); dk->entry.data = (void*)dd; } return 1; } struct reply_info* reply_info_copy(struct reply_info* rep, struct alloc_cache* alloc, struct regional* region) { struct reply_info* cp; cp = construct_reply_info_base(region, rep->flags, rep->qdcount, rep->ttl, rep->prefetch_ttl, rep->serve_expired_ttl, rep->an_numrrsets, rep->ns_numrrsets, rep->ar_numrrsets, rep->rrset_count, rep->security); if(!cp) return NULL; /* allocate ub_key structures special or not */ if(!reply_info_alloc_rrset_keys(cp, alloc, region)) { if(!region) reply_info_parsedelete(cp, alloc); return NULL; } if(!repinfo_copy_rrsets(cp, rep, region)) { if(!region) reply_info_parsedelete(cp, alloc); return NULL; } return cp; } uint8_t* reply_find_final_cname_target(struct query_info* qinfo, struct reply_info* rep) { uint8_t* sname = qinfo->qname; size_t snamelen = qinfo->qname_len; size_t i; for(i=0; ian_numrrsets; i++) { struct ub_packed_rrset_key* s = rep->rrsets[i]; /* follow CNAME chain (if any) */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && ntohs(s->rk.rrset_class) == qinfo->qclass && snamelen == s->rk.dname_len && query_dname_compare(sname, s->rk.dname) == 0) { get_cname_target(s, &sname, &snamelen); } } if(sname != qinfo->qname) return sname; return NULL; } struct ub_packed_rrset_key* reply_find_answer_rrset(struct query_info* qinfo, struct reply_info* rep) { uint8_t* sname = qinfo->qname; size_t snamelen = qinfo->qname_len; size_t i; for(i=0; ian_numrrsets; i++) { struct ub_packed_rrset_key* s = rep->rrsets[i]; /* first match type, for query of qtype cname */ if(ntohs(s->rk.type) == qinfo->qtype && ntohs(s->rk.rrset_class) == qinfo->qclass && snamelen == s->rk.dname_len && query_dname_compare(sname, s->rk.dname) == 0) { return s; } /* follow CNAME chain (if any) */ if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && ntohs(s->rk.rrset_class) == qinfo->qclass && snamelen == s->rk.dname_len && query_dname_compare(sname, s->rk.dname) == 0) { get_cname_target(s, &sname, &snamelen); } } return NULL; } struct ub_packed_rrset_key* reply_find_rrset_section_an(struct reply_info* rep, uint8_t* name, size_t namelen, uint16_t type, uint16_t dclass) { size_t i; for(i=0; ian_numrrsets; i++) { struct ub_packed_rrset_key* s = rep->rrsets[i]; if(ntohs(s->rk.type) == type && ntohs(s->rk.rrset_class) == dclass && namelen == s->rk.dname_len && query_dname_compare(name, s->rk.dname) == 0) { return s; } } return NULL; } struct ub_packed_rrset_key* reply_find_rrset_section_ns(struct reply_info* rep, uint8_t* name, size_t namelen, uint16_t type, uint16_t dclass) { size_t i; for(i=rep->an_numrrsets; ian_numrrsets+rep->ns_numrrsets; i++) { struct ub_packed_rrset_key* s = rep->rrsets[i]; if(ntohs(s->rk.type) == type && ntohs(s->rk.rrset_class) == dclass && namelen == s->rk.dname_len && query_dname_compare(name, s->rk.dname) == 0) { return s; } } return NULL; } struct ub_packed_rrset_key* reply_find_rrset(struct reply_info* rep, uint8_t* name, size_t namelen, uint16_t type, uint16_t dclass) { size_t i; for(i=0; irrset_count; i++) { struct ub_packed_rrset_key* s = rep->rrsets[i]; if(ntohs(s->rk.type) == type && ntohs(s->rk.rrset_class) == dclass && namelen == s->rk.dname_len && query_dname_compare(name, s->rk.dname) == 0) { return s; } } return NULL; } void log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep) { /* not particularly fast but flexible, make wireformat and print */ sldns_buffer* buf = sldns_buffer_new(65535); struct regional* region = regional_create(); if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0, region, 65535, 1, 0)) { log_info("%s: log_dns_msg: out of memory", str); } else { char* s = sldns_wire2str_pkt(sldns_buffer_begin(buf), sldns_buffer_limit(buf)); if(!s) { log_info("%s: log_dns_msg: ldns tostr failed", str); } else { log_info("%s %s", str, s); } free(s); } sldns_buffer_free(buf); regional_destroy(region); } void log_reply_info(enum verbosity_value v, struct query_info *qinf, struct sockaddr_storage *addr, socklen_t addrlen, struct timeval dur, int cached, struct sldns_buffer *rmsg) { char qname_buf[LDNS_MAX_DOMAINLEN+1]; char clientip_buf[128]; char rcode_buf[16]; char type_buf[16]; char class_buf[16]; size_t pktlen; uint16_t rcode = FLAGS_GET_RCODE(sldns_buffer_read_u16_at(rmsg, 2)); if(verbosity < v) return; sldns_wire2str_rcode_buf((int)rcode, rcode_buf, sizeof(rcode_buf)); addr_to_str(addr, addrlen, clientip_buf, sizeof(clientip_buf)); if(rcode == LDNS_RCODE_FORMERR) { if(LOG_TAG_QUERYREPLY) log_reply("%s - - - %s - - - ", clientip_buf, rcode_buf); else log_info("%s - - - %s - - - ", clientip_buf, rcode_buf); } else { if(qinf->qname) dname_str(qinf->qname, qname_buf); else snprintf(qname_buf, sizeof(qname_buf), "null"); pktlen = sldns_buffer_limit(rmsg); sldns_wire2str_type_buf(qinf->qtype, type_buf, sizeof(type_buf)); sldns_wire2str_class_buf(qinf->qclass, class_buf, sizeof(class_buf)); if(LOG_TAG_QUERYREPLY) log_reply("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d", clientip_buf, qname_buf, type_buf, class_buf, rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec, cached, (int)pktlen); else log_info("%s %s %s %s %s " ARG_LL "d.%6.6d %d %d", clientip_buf, qname_buf, type_buf, class_buf, rcode_buf, (long long)dur.tv_sec, (int)dur.tv_usec, cached, (int)pktlen); } } void log_query_info(enum verbosity_value v, const char* str, struct query_info* qinf) { log_nametypeclass(v, str, qinf->qname, qinf->qtype, qinf->qclass); } int reply_check_cname_chain(struct query_info* qinfo, struct reply_info* rep) { /* check only answer section rrs for matching cname chain. * the cache may return changed rdata, but owner names are untouched.*/ size_t i; uint8_t* sname = qinfo->qname; size_t snamelen = qinfo->qname_len; for(i=0; ian_numrrsets; i++) { uint16_t t = ntohs(rep->rrsets[i]->rk.type); if(t == LDNS_RR_TYPE_DNAME) continue; /* skip dnames; note TTL 0 not cached */ /* verify that owner matches current sname */ if(query_dname_compare(sname, rep->rrsets[i]->rk.dname) != 0){ /* cname chain broken */ return 0; } /* if this is a cname; move on */ if(t == LDNS_RR_TYPE_CNAME) { get_cname_target(rep->rrsets[i], &sname, &snamelen); } } return 1; } int reply_all_rrsets_secure(struct reply_info* rep) { size_t i; for(i=0; irrset_count; i++) { if( ((struct packed_rrset_data*)rep->rrsets[i]->entry.data) ->security != sec_status_secure ) return 0; } return 1; } struct reply_info* parse_reply_in_temp_region(sldns_buffer* pkt, struct regional* region, struct query_info* qi) { struct reply_info* rep; struct msg_parse* msg; if(!(msg = regional_alloc(region, sizeof(*msg)))) { return NULL; } memset(msg, 0, sizeof(*msg)); sldns_buffer_set_position(pkt, 0); if(parse_packet(pkt, msg, region) != 0){ return 0; } if(!parse_create_msg(pkt, msg, NULL, qi, &rep, region)) { return 0; } return rep; } int edns_opt_append(struct edns_data* edns, struct regional* region, uint16_t code, size_t len, uint8_t* data) { struct edns_option** prevp; struct edns_option* opt; /* allocate new element */ opt = (struct edns_option*)regional_alloc(region, sizeof(*opt)); if(!opt) return 0; opt->next = NULL; opt->opt_code = code; opt->opt_len = len; opt->opt_data = NULL; if(len > 0) { opt->opt_data = regional_alloc_init(region, data, len); if(!opt->opt_data) return 0; } /* append at end of list */ prevp = &edns->opt_list; while(*prevp != NULL) prevp = &((*prevp)->next); *prevp = opt; return 1; } int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len, uint8_t* data, struct regional* region) { struct edns_option** prevp; struct edns_option* opt; /* allocate new element */ opt = (struct edns_option*)regional_alloc(region, sizeof(*opt)); if(!opt) return 0; opt->next = NULL; opt->opt_code = code; opt->opt_len = len; opt->opt_data = NULL; if(len > 0) { opt->opt_data = regional_alloc_init(region, data, len); if(!opt->opt_data) return 0; } /* append at end of list */ prevp = list; while(*prevp != NULL) { prevp = &((*prevp)->next); } *prevp = opt; return 1; } int edns_opt_list_remove(struct edns_option** list, uint16_t code) { /* The list should already be allocated in a region. Freeing the * allocated space in a region is not possible. We just unlink the * required elements and they will be freed together with the region. */ struct edns_option* prev; struct edns_option* curr; if(!list || !(*list)) return 0; /* Unlink and repoint if the element(s) are first in list */ while(list && *list && (*list)->opt_code == code) { *list = (*list)->next; } if(!list || !(*list)) return 1; /* Unlink elements and reattach the list */ prev = *list; curr = (*list)->next; while(curr != NULL) { if(curr->opt_code == code) { prev->next = curr->next; curr = curr->next; } else { prev = curr; curr = curr->next; } } return 1; } static int inplace_cb_reply_call_generic( struct inplace_cb* callback_list, enum inplace_cb_list_type type, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time) { struct inplace_cb* cb; struct edns_option* opt_list_out = NULL; #if defined(EXPORT_ALL_SYMBOLS) (void)type; /* param not used when fptr_ok disabled */ #endif if(qstate) opt_list_out = qstate->edns_opts_front_out; for(cb=callback_list; cb; cb=cb->next) { fptr_ok(fptr_whitelist_inplace_cb_reply_generic( (inplace_cb_reply_func_type*)cb->cb, type)); (void)(*(inplace_cb_reply_func_type*)cb->cb)(qinfo, qstate, rep, rcode, edns, &opt_list_out, repinfo, region, start_time, cb->id, cb->cb_arg); } edns->opt_list = opt_list_out; return 1; } int inplace_cb_reply_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time) { return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply], inplace_cb_reply, qinfo, qstate, rep, rcode, edns, repinfo, region, start_time); } int inplace_cb_reply_cache_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time) { return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply_cache], inplace_cb_reply_cache, qinfo, qstate, rep, rcode, edns, repinfo, region, start_time); } int inplace_cb_reply_local_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time) { return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply_local], inplace_cb_reply_local, qinfo, qstate, rep, rcode, edns, repinfo, region, start_time); } int inplace_cb_reply_servfail_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time) { /* We are going to servfail. Remove any potential edns options. */ if(qstate) qstate->edns_opts_front_out = NULL; return inplace_cb_reply_call_generic( env->inplace_cb_lists[inplace_cb_reply_servfail], inplace_cb_reply_servfail, qinfo, qstate, rep, rcode, edns, repinfo, region, start_time); } int inplace_cb_query_call(struct module_env* env, struct query_info* qinfo, uint16_t flags, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct module_qstate* qstate, struct regional* region) { struct inplace_cb* cb = env->inplace_cb_lists[inplace_cb_query]; for(; cb; cb=cb->next) { fptr_ok(fptr_whitelist_inplace_cb_query( (inplace_cb_query_func_type*)cb->cb)); (void)(*(inplace_cb_query_func_type*)cb->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, cb->id, cb->cb_arg); } return 1; } int inplace_cb_edns_back_parsed_call(struct module_env* env, struct module_qstate* qstate) { struct inplace_cb* cb = env->inplace_cb_lists[inplace_cb_edns_back_parsed]; for(; cb; cb=cb->next) { fptr_ok(fptr_whitelist_inplace_cb_edns_back_parsed( (inplace_cb_edns_back_parsed_func_type*)cb->cb)); (void)(*(inplace_cb_edns_back_parsed_func_type*)cb->cb)(qstate, cb->id, cb->cb_arg); } return 1; } int inplace_cb_query_response_call(struct module_env* env, struct module_qstate* qstate, struct dns_msg* response) { struct inplace_cb* cb = env->inplace_cb_lists[inplace_cb_query_response]; for(; cb; cb=cb->next) { fptr_ok(fptr_whitelist_inplace_cb_query_response( (inplace_cb_query_response_func_type*)cb->cb)); (void)(*(inplace_cb_query_response_func_type*)cb->cb)(qstate, response, cb->id, cb->cb_arg); } return 1; } struct edns_option* edns_opt_copy_region(struct edns_option* list, struct regional* region) { struct edns_option* result = NULL, *cur = NULL, *s; while(list) { /* copy edns option structure */ s = regional_alloc_init(region, list, sizeof(*list)); if(!s) return NULL; s->next = NULL; /* copy option data */ if(s->opt_data) { s->opt_data = regional_alloc_init(region, s->opt_data, s->opt_len); if(!s->opt_data) return NULL; } /* link into list */ if(cur) cur->next = s; else result = s; cur = s; /* examine next element */ list = list->next; } return result; } int edns_opt_compare(struct edns_option* p, struct edns_option* q) { if(!p && !q) return 0; if(!p) return -1; if(!q) return 1; log_assert(p && q); if(p->opt_code != q->opt_code) return (int)q->opt_code - (int)p->opt_code; if(p->opt_len != q->opt_len) return (int)q->opt_len - (int)p->opt_len; if(p->opt_len != 0) return memcmp(p->opt_data, q->opt_data, p->opt_len); return 0; } int edns_opt_list_compare(struct edns_option* p, struct edns_option* q) { int r; while(p && q) { r = edns_opt_compare(p, q); if(r != 0) return r; p = p->next; q = q->next; } if(p || q) { /* uneven length lists */ if(p) return 1; if(q) return -1; } return 0; } void edns_opt_list_free(struct edns_option* list) { struct edns_option* n; while(list) { free(list->opt_data); n = list->next; free(list); list = n; } } struct edns_option* edns_opt_copy_alloc(struct edns_option* list) { struct edns_option* result = NULL, *cur = NULL, *s; while(list) { /* copy edns option structure */ s = memdup(list, sizeof(*list)); if(!s) { edns_opt_list_free(result); return NULL; } s->next = NULL; /* copy option data */ if(s->opt_data) { s->opt_data = memdup(s->opt_data, s->opt_len); if(!s->opt_data) { free(s); edns_opt_list_free(result); return NULL; } } /* link into list */ if(cur) cur->next = s; else result = s; cur = s; /* examine next element */ list = list->next; } return result; } struct edns_option* edns_opt_list_find(struct edns_option* list, uint16_t code) { struct edns_option* p; for(p=list; p; p=p->next) { if(p->opt_code == code) return p; } return NULL; } unbound-1.13.1/util/data/msgencode.c0000644000175000017500000007461314010434640016710 0ustar wouterwouter/* * util/data/msgencode.c - Encode DNS messages, queries and replies. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a routines to encode DNS messages. */ #include "config.h" #include "util/data/msgencode.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" #include "util/data/dname.h" #include "util/log.h" #include "util/regional.h" #include "util/net_help.h" #include "sldns/sbuffer.h" #include "services/localzone.h" #ifdef HAVE_TIME_H #include #endif #include /** return code that means the function ran out of memory. negative so it does * not conflict with DNS rcodes. */ #define RETVAL_OUTMEM -2 /** return code that means the data did not fit (completely) in the packet */ #define RETVAL_TRUNC -4 /** return code that means all is peachy keen. Equal to DNS rcode NOERROR */ #define RETVAL_OK 0 /** * Data structure to help domain name compression in outgoing messages. * A tree of dnames and their offsets in the packet is kept. * It is kept sorted, not canonical, but by label at least, so that after * a lookup of a name you know its closest match, and the parent from that * closest match. These are possible compression targets. * * It is a binary tree, not a rbtree or balanced tree, as the effort * of keeping it balanced probably outweighs usefulness (given typical * DNS packet size). */ struct compress_tree_node { /** left node in tree, all smaller to this */ struct compress_tree_node* left; /** right node in tree, all larger than this */ struct compress_tree_node* right; /** the parent node - not for tree, but zone parent. One less label */ struct compress_tree_node* parent; /** the domain name for this node. Pointer to uncompressed memory. */ uint8_t* dname; /** number of labels in domain name, kept to help compare func. */ int labs; /** offset in packet that points to this dname */ size_t offset; }; /** * Find domain name in tree, returns exact and closest match. * @param tree: root of tree. * @param dname: pointer to uncompressed dname. * @param labs: number of labels in domain name. * @param match: closest or exact match. * guaranteed to be smaller or equal to the sought dname. * can be null if the tree is empty. * @param matchlabels: number of labels that match with closest match. * can be zero is there is no match. * @param insertpt: insert location for dname, if not found. * @return: 0 if no exact match. */ static int compress_tree_search(struct compress_tree_node** tree, uint8_t* dname, int labs, struct compress_tree_node** match, int* matchlabels, struct compress_tree_node*** insertpt) { int c, n, closen=0; struct compress_tree_node* p = *tree; struct compress_tree_node* close = 0; struct compress_tree_node** prev = tree; while(p) { if((c = dname_lab_cmp(dname, labs, p->dname, p->labs, &n)) == 0) { *matchlabels = n; *match = p; return 1; } if(c<0) { prev = &p->left; p = p->left; } else { closen = n; close = p; /* p->dname is smaller than dname */ prev = &p->right; p = p->right; } } *insertpt = prev; *matchlabels = closen; *match = close; return 0; } /** * Lookup a domain name in compression tree. * @param tree: root of tree (not the node with '.'). * @param dname: pointer to uncompressed dname. * @param labs: number of labels in domain name. * @param insertpt: insert location for dname, if not found. * @return: 0 if not found or compress treenode with best compression. */ static struct compress_tree_node* compress_tree_lookup(struct compress_tree_node** tree, uint8_t* dname, int labs, struct compress_tree_node*** insertpt) { struct compress_tree_node* p; int m; if(labs <= 1) return 0; /* do not compress root node */ if(compress_tree_search(tree, dname, labs, &p, &m, insertpt)) { /* exact match */ return p; } /* return some ancestor of p that compresses well. */ if(m>1) { /* www.example.com. (labs=4) matched foo.example.com.(labs=4) * then matchcount = 3. need to go up. */ while(p && p->labs > m) p = p->parent; return p; } return 0; } /** * Create node for domain name compression tree. * @param dname: pointer to uncompressed dname (stored in tree). * @param labs: number of labels in dname. * @param offset: offset into packet for dname. * @param region: how to allocate memory for new node. * @return new node or 0 on malloc failure. */ static struct compress_tree_node* compress_tree_newnode(uint8_t* dname, int labs, size_t offset, struct regional* region) { struct compress_tree_node* n = (struct compress_tree_node*) regional_alloc(region, sizeof(struct compress_tree_node)); if(!n) return 0; n->left = 0; n->right = 0; n->parent = 0; n->dname = dname; n->labs = labs; n->offset = offset; return n; } /** * Store domain name and ancestors into compression tree. * @param dname: pointer to uncompressed dname (stored in tree). * @param labs: number of labels in dname. * @param offset: offset into packet for dname. * @param region: how to allocate memory for new node. * @param closest: match from previous lookup, used to compress dname. * may be NULL if no previous match. * if the tree has an ancestor of dname already, this must be it. * @param insertpt: where to insert the dname in tree. * @return: 0 on memory error. */ static int compress_tree_store(uint8_t* dname, int labs, size_t offset, struct regional* region, struct compress_tree_node* closest, struct compress_tree_node** insertpt) { uint8_t lablen; struct compress_tree_node* newnode; struct compress_tree_node* prevnode = NULL; int uplabs = labs-1; /* does not store root in tree */ if(closest) uplabs = labs - closest->labs; log_assert(uplabs >= 0); /* algorithms builds up a vine of dname-labels to hang into tree */ while(uplabs--) { if(offset > PTR_MAX_OFFSET) { /* insertion failed, drop vine */ return 1; /* compression pointer no longer useful */ } if(!(newnode = compress_tree_newnode(dname, labs, offset, region))) { /* insertion failed, drop vine */ return 0; } if(prevnode) { /* chain nodes together, last one has one label more, * so is larger than newnode, thus goes right. */ newnode->right = prevnode; prevnode->parent = newnode; } /* next label */ lablen = *dname++; dname += lablen; offset += lablen+1; prevnode = newnode; labs--; } /* if we have a vine, hang the vine into the tree */ if(prevnode) { *insertpt = prevnode; prevnode->parent = closest; } return 1; } /** compress a domain name */ static int write_compressed_dname(sldns_buffer* pkt, uint8_t* dname, int labs, struct compress_tree_node* p) { /* compress it */ int labcopy = labs - p->labs; uint8_t lablen; uint16_t ptr; if(labs == 1) { /* write root label */ if(sldns_buffer_remaining(pkt) < 1) return 0; sldns_buffer_write_u8(pkt, 0); return 1; } /* copy the first couple of labels */ while(labcopy--) { lablen = *dname++; if(sldns_buffer_remaining(pkt) < (size_t)lablen+1) return 0; sldns_buffer_write_u8(pkt, lablen); sldns_buffer_write(pkt, dname, lablen); dname += lablen; } /* insert compression ptr */ if(sldns_buffer_remaining(pkt) < 2) return 0; ptr = PTR_CREATE(p->offset); sldns_buffer_write_u16(pkt, ptr); return 1; } /** compress owner name of RR, return RETVAL_OUTMEM RETVAL_TRUNC */ static int compress_owner(struct ub_packed_rrset_key* key, sldns_buffer* pkt, struct regional* region, struct compress_tree_node** tree, size_t owner_pos, uint16_t* owner_ptr, int owner_labs) { struct compress_tree_node* p; struct compress_tree_node** insertpt = NULL; if(!*owner_ptr) { /* compress first time dname */ if((p = compress_tree_lookup(tree, key->rk.dname, owner_labs, &insertpt))) { if(p->labs == owner_labs) /* avoid ptr chains, since some software is * not capable of decoding ptr after a ptr. */ *owner_ptr = htons(PTR_CREATE(p->offset)); if(!write_compressed_dname(pkt, key->rk.dname, owner_labs, p)) return RETVAL_TRUNC; /* check if typeclass+4 ttl + rdatalen is available */ if(sldns_buffer_remaining(pkt) < 4+4+2) return RETVAL_TRUNC; } else { /* no compress */ if(sldns_buffer_remaining(pkt) < key->rk.dname_len+4+4+2) return RETVAL_TRUNC; sldns_buffer_write(pkt, key->rk.dname, key->rk.dname_len); if(owner_pos <= PTR_MAX_OFFSET) *owner_ptr = htons(PTR_CREATE(owner_pos)); } if(!compress_tree_store(key->rk.dname, owner_labs, owner_pos, region, p, insertpt)) return RETVAL_OUTMEM; } else { /* always compress 2nd-further RRs in RRset */ if(owner_labs == 1) { if(sldns_buffer_remaining(pkt) < 1+4+4+2) return RETVAL_TRUNC; sldns_buffer_write_u8(pkt, 0); } else { if(sldns_buffer_remaining(pkt) < 2+4+4+2) return RETVAL_TRUNC; sldns_buffer_write(pkt, owner_ptr, 2); } } return RETVAL_OK; } /** compress any domain name to the packet, return RETVAL_* */ static int compress_any_dname(uint8_t* dname, sldns_buffer* pkt, int labs, struct regional* region, struct compress_tree_node** tree) { struct compress_tree_node* p; struct compress_tree_node** insertpt = NULL; size_t pos = sldns_buffer_position(pkt); if((p = compress_tree_lookup(tree, dname, labs, &insertpt))) { if(!write_compressed_dname(pkt, dname, labs, p)) return RETVAL_TRUNC; } else { if(!dname_buffer_write(pkt, dname)) return RETVAL_TRUNC; } if(!compress_tree_store(dname, labs, pos, region, p, insertpt)) return RETVAL_OUTMEM; return RETVAL_OK; } /** return true if type needs domain name compression in rdata */ static const sldns_rr_descriptor* type_rdata_compressable(struct ub_packed_rrset_key* key) { uint16_t t = ntohs(key->rk.type); if(sldns_rr_descript(t) && sldns_rr_descript(t)->_compress == LDNS_RR_COMPRESS) return sldns_rr_descript(t); return 0; } /** compress domain names in rdata, return RETVAL_* */ static int compress_rdata(sldns_buffer* pkt, uint8_t* rdata, size_t todolen, struct regional* region, struct compress_tree_node** tree, const sldns_rr_descriptor* desc) { int labs, r, rdf = 0; size_t dname_len, len, pos = sldns_buffer_position(pkt); uint8_t count = desc->_dname_count; sldns_buffer_skip(pkt, 2); /* rdata len fill in later */ /* space for rdatalen checked for already */ rdata += 2; todolen -= 2; while(todolen > 0 && count) { switch(desc->_wireformat[rdf]) { case LDNS_RDF_TYPE_DNAME: labs = dname_count_size_labels(rdata, &dname_len); if((r=compress_any_dname(rdata, pkt, labs, region, tree)) != RETVAL_OK) return r; rdata += dname_len; todolen -= dname_len; count--; len = 0; break; case LDNS_RDF_TYPE_STR: len = *rdata + 1; break; default: len = get_rdf_size(desc->_wireformat[rdf]); } if(len) { /* copy over */ if(sldns_buffer_remaining(pkt) < len) return RETVAL_TRUNC; sldns_buffer_write(pkt, rdata, len); todolen -= len; rdata += len; } rdf++; } /* copy remainder */ if(todolen > 0) { if(sldns_buffer_remaining(pkt) < todolen) return RETVAL_TRUNC; sldns_buffer_write(pkt, rdata, todolen); } /* set rdata len */ sldns_buffer_write_u16_at(pkt, pos, sldns_buffer_position(pkt)-pos-2); return RETVAL_OK; } /** Returns true if RR type should be included */ static int rrset_belongs_in_reply(sldns_pkt_section s, uint16_t rrtype, uint16_t qtype, int dnssec) { if(dnssec) return 1; /* skip non DNSSEC types, except if directly queried for */ if(s == LDNS_SECTION_ANSWER) { if(qtype == LDNS_RR_TYPE_ANY || qtype == rrtype) return 1; } /* check DNSSEC-ness */ switch(rrtype) { case LDNS_RR_TYPE_SIG: case LDNS_RR_TYPE_KEY: case LDNS_RR_TYPE_NXT: case LDNS_RR_TYPE_DS: case LDNS_RR_TYPE_RRSIG: case LDNS_RR_TYPE_NSEC: case LDNS_RR_TYPE_DNSKEY: case LDNS_RR_TYPE_NSEC3: case LDNS_RR_TYPE_NSEC3PARAMS: return 0; } return 1; } /** store rrset in buffer in wireformat, return RETVAL_* */ static int packed_rrset_encode(struct ub_packed_rrset_key* key, sldns_buffer* pkt, uint16_t* num_rrs, time_t timenow, struct regional* region, int do_data, int do_sig, struct compress_tree_node** tree, sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset) { size_t i, j, owner_pos; int r, owner_labs; uint16_t owner_ptr = 0; time_t adjust = 0; struct packed_rrset_data* data = (struct packed_rrset_data*) key->entry.data; /* does this RR type belong in the answer? */ if(!rrset_belongs_in_reply(s, ntohs(key->rk.type), qtype, dnssec)) return RETVAL_OK; owner_labs = dname_count_labels(key->rk.dname); owner_pos = sldns_buffer_position(pkt); /** Determine relative time adjustment for TTL values. * For an rrset with a fixed TTL, use the rrset's TTL as given. */ if((key->rk.flags & PACKED_RRSET_FIXEDTTL) != 0) adjust = 0; else adjust = SERVE_ORIGINAL_TTL ? data->ttl_add : timenow; if(do_data) { const sldns_rr_descriptor* c = type_rdata_compressable(key); for(i=0; icount; i++) { /* rrset roundrobin */ j = (i + rr_offset) % data->count; if((r=compress_owner(key, pkt, region, tree, owner_pos, &owner_ptr, owner_labs)) != RETVAL_OK) return r; sldns_buffer_write(pkt, &key->rk.type, 2); sldns_buffer_write(pkt, &key->rk.rrset_class, 2); if(data->rr_ttl[j] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); else sldns_buffer_write_u32(pkt, data->rr_ttl[j]-adjust); if(c) { if((r=compress_rdata(pkt, data->rr_data[j], data->rr_len[j], region, tree, c)) != RETVAL_OK) return r; } else { if(sldns_buffer_remaining(pkt) < data->rr_len[j]) return RETVAL_TRUNC; sldns_buffer_write(pkt, data->rr_data[j], data->rr_len[j]); } } } /* insert rrsigs */ if(do_sig && dnssec) { size_t total = data->count+data->rrsig_count; for(i=data->count; irr_len[i]) return RETVAL_TRUNC; sldns_buffer_write(pkt, &owner_ptr, 2); } else { if((r=compress_any_dname(key->rk.dname, pkt, owner_labs, region, tree)) != RETVAL_OK) return r; if(sldns_buffer_remaining(pkt) < 4+4+data->rr_len[i]) return RETVAL_TRUNC; } sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_RRSIG); sldns_buffer_write(pkt, &key->rk.rrset_class, 2); if(data->rr_ttl[i] < adjust) sldns_buffer_write_u32(pkt, SERVE_EXPIRED?SERVE_EXPIRED_REPLY_TTL:0); else sldns_buffer_write_u32(pkt, data->rr_ttl[i]-adjust); /* rrsig rdata cannot be compressed, perform 100+ byte * memcopy. */ sldns_buffer_write(pkt, data->rr_data[i], data->rr_len[i]); } } /* change rrnum only after we are sure it fits */ if(do_data) *num_rrs += data->count; if(do_sig && dnssec) *num_rrs += data->rrsig_count; return RETVAL_OK; } /** store msg section in wireformat buffer, return RETVAL_* */ static int insert_section(struct reply_info* rep, size_t num_rrsets, uint16_t* num_rrs, sldns_buffer* pkt, size_t rrsets_before, time_t timenow, struct regional* region, struct compress_tree_node** tree, sldns_pkt_section s, uint16_t qtype, int dnssec, size_t rr_offset) { int r; size_t i, setstart; /* we now allow this function to be called multiple times for the * same section, incrementally updating num_rrs. The caller is * responsible for initializing it (which is the case in the current * implementation). */ if(s != LDNS_SECTION_ADDITIONAL) { if(s == LDNS_SECTION_ANSWER && qtype == LDNS_RR_TYPE_ANY) dnssec = 1; /* include all types in ANY answer */ for(i=0; irrsets[rrsets_before+i], pkt, num_rrs, timenow, region, 1, 1, tree, s, qtype, dnssec, rr_offset)) != RETVAL_OK) { /* Bad, but if due to size must set TC bit */ /* trim off the rrset neatly. */ sldns_buffer_set_position(pkt, setstart); return r; } } } else { for(i=0; irrsets[rrsets_before+i], pkt, num_rrs, timenow, region, 1, 0, tree, s, qtype, dnssec, rr_offset)) != RETVAL_OK) { sldns_buffer_set_position(pkt, setstart); return r; } } if(dnssec) for(i=0; irrsets[rrsets_before+i], pkt, num_rrs, timenow, region, 0, 1, tree, s, qtype, dnssec, rr_offset)) != RETVAL_OK) { sldns_buffer_set_position(pkt, setstart); return r; } } } return RETVAL_OK; } /** store query section in wireformat buffer, return RETVAL */ static int insert_query(struct query_info* qinfo, struct compress_tree_node** tree, sldns_buffer* buffer, struct regional* region) { uint8_t* qname = qinfo->local_alias ? qinfo->local_alias->rrset->rk.dname : qinfo->qname; size_t qname_len = qinfo->local_alias ? qinfo->local_alias->rrset->rk.dname_len : qinfo->qname_len; if(sldns_buffer_remaining(buffer) < qinfo->qname_len+sizeof(uint16_t)*2) return RETVAL_TRUNC; /* buffer too small */ /* the query is the first name inserted into the tree */ if(!compress_tree_store(qname, dname_count_labels(qname), sldns_buffer_position(buffer), region, NULL, tree)) return RETVAL_OUTMEM; if(sldns_buffer_current(buffer) == qname) sldns_buffer_skip(buffer, (ssize_t)qname_len); else sldns_buffer_write(buffer, qname, qname_len); sldns_buffer_write_u16(buffer, qinfo->qtype); sldns_buffer_write_u16(buffer, qinfo->qclass); return RETVAL_OK; } static int positive_answer(struct reply_info* rep, uint16_t qtype) { size_t i; if (FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NOERROR) return 0; for(i=0;ian_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == qtype) { /* for priming queries, type NS, include addresses */ if(qtype == LDNS_RR_TYPE_NS) return 0; /* in case it is a wildcard with DNSSEC, there will * be NSEC/NSEC3 records in the authority section * that we cannot remove */ for(i=rep->an_numrrsets; ian_numrrsets+ rep->ns_numrrsets; i++) { if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC || ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NSEC3) return 0; } return 1; } } return 0; } static int negative_answer(struct reply_info* rep) { size_t i; int ns_seen = 0; if(FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN) return 1; if(FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR && rep->an_numrrsets != 0) return 0; /* positive */ if(FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NOERROR && FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NXDOMAIN) return 0; for(i=rep->an_numrrsets; ian_numrrsets+rep->ns_numrrsets; i++){ if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_SOA) return 1; if(ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS) ns_seen = 1; } if(ns_seen) return 0; /* could be referral, NS, but no SOA */ return 1; } int reply_info_encode(struct query_info* qinfo, struct reply_info* rep, uint16_t id, uint16_t flags, sldns_buffer* buffer, time_t timenow, struct regional* region, uint16_t udpsize, int dnssec, int minimise) { uint16_t ancount=0, nscount=0, arcount=0; struct compress_tree_node* tree = 0; int r; size_t rr_offset; sldns_buffer_clear(buffer); if(udpsize < sldns_buffer_limit(buffer)) sldns_buffer_set_limit(buffer, udpsize); if(sldns_buffer_remaining(buffer) < LDNS_HEADER_SIZE) return 0; sldns_buffer_write(buffer, &id, sizeof(uint16_t)); sldns_buffer_write_u16(buffer, flags); sldns_buffer_write_u16(buffer, rep->qdcount); /* set an, ns, ar counts to zero in case of small packets */ sldns_buffer_write(buffer, "\000\000\000\000\000\000", 6); /* insert query section */ if(rep->qdcount) { if((r=insert_query(qinfo, &tree, buffer, region)) != RETVAL_OK) { if(r == RETVAL_TRUNC) { /* create truncated message */ sldns_buffer_write_u16_at(buffer, 4, 0); LDNS_TC_SET(sldns_buffer_begin(buffer)); sldns_buffer_flip(buffer); return 1; } return 0; } } /* roundrobin offset. using query id for random number. With ntohs * for different roundrobins for sequential id client senders. */ rr_offset = RRSET_ROUNDROBIN?ntohs(id)+(timenow?timenow:time(NULL)):0; /* "prepend" any local alias records in the answer section if this * response is supposed to be authoritative. Currently it should * be a single CNAME record (sanity-checked in worker_handle_request()) * but it can be extended if and when we support more variations of * aliases. */ if(qinfo->local_alias && (flags & BIT_AA)) { struct reply_info arep; time_t timezero = 0; /* to use the 'authoritative' TTL */ memset(&arep, 0, sizeof(arep)); arep.flags = rep->flags; arep.an_numrrsets = 1; arep.rrset_count = 1; arep.rrsets = &qinfo->local_alias->rrset; if((r=insert_section(&arep, 1, &ancount, buffer, 0, timezero, region, &tree, LDNS_SECTION_ANSWER, qinfo->qtype, dnssec, rr_offset)) != RETVAL_OK) { if(r == RETVAL_TRUNC) { /* create truncated message */ sldns_buffer_write_u16_at(buffer, 6, ancount); LDNS_TC_SET(sldns_buffer_begin(buffer)); sldns_buffer_flip(buffer); return 1; } return 0; } } /* insert answer section */ if((r=insert_section(rep, rep->an_numrrsets, &ancount, buffer, 0, timenow, region, &tree, LDNS_SECTION_ANSWER, qinfo->qtype, dnssec, rr_offset)) != RETVAL_OK) { if(r == RETVAL_TRUNC) { /* create truncated message */ sldns_buffer_write_u16_at(buffer, 6, ancount); LDNS_TC_SET(sldns_buffer_begin(buffer)); sldns_buffer_flip(buffer); return 1; } return 0; } sldns_buffer_write_u16_at(buffer, 6, ancount); /* if response is positive answer, auth/add sections are not required */ if( ! (minimise && positive_answer(rep, qinfo->qtype)) ) { /* insert auth section */ if((r=insert_section(rep, rep->ns_numrrsets, &nscount, buffer, rep->an_numrrsets, timenow, region, &tree, LDNS_SECTION_AUTHORITY, qinfo->qtype, dnssec, rr_offset)) != RETVAL_OK) { if(r == RETVAL_TRUNC) { /* create truncated message */ sldns_buffer_write_u16_at(buffer, 8, nscount); LDNS_TC_SET(sldns_buffer_begin(buffer)); sldns_buffer_flip(buffer); return 1; } return 0; } sldns_buffer_write_u16_at(buffer, 8, nscount); if(! (minimise && negative_answer(rep))) { /* insert add section */ if((r=insert_section(rep, rep->ar_numrrsets, &arcount, buffer, rep->an_numrrsets + rep->ns_numrrsets, timenow, region, &tree, LDNS_SECTION_ADDITIONAL, qinfo->qtype, dnssec, rr_offset)) != RETVAL_OK) { if(r == RETVAL_TRUNC) { /* no need to set TC bit, this is the additional */ sldns_buffer_write_u16_at(buffer, 10, arcount); sldns_buffer_flip(buffer); return 1; } return 0; } sldns_buffer_write_u16_at(buffer, 10, arcount); } } sldns_buffer_flip(buffer); return 1; } uint16_t calc_edns_field_size(struct edns_data* edns) { size_t rdatalen = 0; struct edns_option* opt; if(!edns || !edns->edns_present) return 0; for(opt = edns->opt_list; opt; opt = opt->next) { rdatalen += 4 + opt->opt_len; } /* domain root '.' + type + class + ttl + rdatalen */ return 1 + 2 + 2 + 4 + 2 + rdatalen; } static void attach_edns_record_max_msg_sz(sldns_buffer* pkt, struct edns_data* edns, uint16_t max_msg_sz) { size_t len; size_t rdatapos; struct edns_option* opt; struct edns_option* padding_option = NULL; /* inc additional count */ sldns_buffer_write_u16_at(pkt, 10, sldns_buffer_read_u16_at(pkt, 10) + 1); len = sldns_buffer_limit(pkt); sldns_buffer_clear(pkt); sldns_buffer_set_position(pkt, len); /* write EDNS record */ sldns_buffer_write_u8(pkt, 0); /* '.' label */ sldns_buffer_write_u16(pkt, LDNS_RR_TYPE_OPT); /* type */ sldns_buffer_write_u16(pkt, edns->udp_size); /* class */ sldns_buffer_write_u8(pkt, edns->ext_rcode); /* ttl */ sldns_buffer_write_u8(pkt, edns->edns_version); sldns_buffer_write_u16(pkt, edns->bits); rdatapos = sldns_buffer_position(pkt); sldns_buffer_write_u16(pkt, 0); /* rdatalen */ /* write rdata */ for(opt=edns->opt_list; opt; opt=opt->next) { if (opt->opt_code == LDNS_EDNS_PADDING) { padding_option = opt; continue; } sldns_buffer_write_u16(pkt, opt->opt_code); sldns_buffer_write_u16(pkt, opt->opt_len); if(opt->opt_len != 0) sldns_buffer_write(pkt, opt->opt_data, opt->opt_len); } if (padding_option && edns->padding_block_size ) { size_t pad_pos = sldns_buffer_position(pkt); size_t msg_sz = ((pad_pos + 3) / edns->padding_block_size + 1) * edns->padding_block_size; size_t pad_sz; if (msg_sz > max_msg_sz) msg_sz = max_msg_sz; /* By use of calc_edns_field_size, calling functions should * have made sure that there is enough space for at least a * zero sized padding option. */ log_assert(pad_pos + 4 <= msg_sz); pad_sz = msg_sz - pad_pos - 4; sldns_buffer_write_u16(pkt, LDNS_EDNS_PADDING); sldns_buffer_write_u16(pkt, pad_sz); if (pad_sz) { memset(sldns_buffer_current(pkt), 0, pad_sz); sldns_buffer_skip(pkt, pad_sz); } } if(edns->opt_list) sldns_buffer_write_u16_at(pkt, rdatapos, sldns_buffer_position(pkt)-rdatapos-2); sldns_buffer_flip(pkt); } void attach_edns_record(sldns_buffer* pkt, struct edns_data* edns) { if(!edns || !edns->edns_present) return; attach_edns_record_max_msg_sz(pkt, edns, edns->udp_size); } int reply_info_answer_encode(struct query_info* qinf, struct reply_info* rep, uint16_t id, uint16_t qflags, sldns_buffer* pkt, time_t timenow, int cached, struct regional* region, uint16_t udpsize, struct edns_data* edns, int dnssec, int secure) { uint16_t flags; unsigned int attach_edns = 0; if(!cached || rep->authoritative) { /* original flags, copy RD and CD bits from query. */ flags = rep->flags | (qflags & (BIT_RD|BIT_CD)); } else { /* remove AA bit, copy RD and CD bits from query. */ flags = (rep->flags & ~BIT_AA) | (qflags & (BIT_RD|BIT_CD)); } if(secure && (dnssec || (qflags&BIT_AD))) flags |= BIT_AD; /* restore AA bit if we have a local alias and the response can be * authoritative. Also clear AD bit if set as the local data is the * primary answer. */ if(qinf->local_alias && (FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NOERROR || FLAGS_GET_RCODE(rep->flags) == LDNS_RCODE_NXDOMAIN)) { flags |= BIT_AA; flags &= ~BIT_AD; } log_assert(flags & BIT_QR); /* QR bit must be on in our replies */ if(udpsize < LDNS_HEADER_SIZE) return 0; if(sldns_buffer_capacity(pkt) < udpsize) udpsize = sldns_buffer_capacity(pkt); if(udpsize < LDNS_HEADER_SIZE + calc_edns_field_size(edns)) { /* packet too small to contain edns, omit it. */ attach_edns = 0; } else { /* reserve space for edns record */ attach_edns = (unsigned int)calc_edns_field_size(edns); udpsize -= attach_edns; } if(!reply_info_encode(qinf, rep, id, flags, pkt, timenow, region, udpsize, dnssec, MINIMAL_RESPONSES)) { log_err("reply encode: out of memory"); return 0; } if(attach_edns && sldns_buffer_capacity(pkt) >= sldns_buffer_limit(pkt)+attach_edns) attach_edns_record_max_msg_sz(pkt, edns, udpsize+attach_edns); return 1; } void qinfo_query_encode(sldns_buffer* pkt, struct query_info* qinfo) { uint16_t flags = 0; /* QUERY, NOERROR */ const uint8_t* qname = qinfo->local_alias ? qinfo->local_alias->rrset->rk.dname : qinfo->qname; size_t qname_len = qinfo->local_alias ? qinfo->local_alias->rrset->rk.dname_len : qinfo->qname_len; sldns_buffer_clear(pkt); log_assert(sldns_buffer_remaining(pkt) >= 12+255+4/*max query*/); sldns_buffer_skip(pkt, 2); /* id done later */ sldns_buffer_write_u16(pkt, flags); sldns_buffer_write_u16(pkt, 1); /* query count */ sldns_buffer_write(pkt, "\000\000\000\000\000\000", 6); /* counts */ sldns_buffer_write(pkt, qname, qname_len); sldns_buffer_write_u16(pkt, qinfo->qtype); sldns_buffer_write_u16(pkt, qinfo->qclass); sldns_buffer_flip(pkt); } void error_encode(sldns_buffer* buf, int r, struct query_info* qinfo, uint16_t qid, uint16_t qflags, struct edns_data* edns) { uint16_t flags; sldns_buffer_clear(buf); sldns_buffer_write(buf, &qid, sizeof(uint16_t)); flags = (uint16_t)(BIT_QR | BIT_RA | r); /* QR and retcode*/ flags |= (qflags & (BIT_RD|BIT_CD)); /* copy RD and CD bit */ sldns_buffer_write_u16(buf, flags); if(qinfo) flags = 1; else flags = 0; sldns_buffer_write_u16(buf, flags); flags = 0; sldns_buffer_write(buf, &flags, sizeof(uint16_t)); sldns_buffer_write(buf, &flags, sizeof(uint16_t)); sldns_buffer_write(buf, &flags, sizeof(uint16_t)); if(qinfo) { const uint8_t* qname = qinfo->local_alias ? qinfo->local_alias->rrset->rk.dname : qinfo->qname; size_t qname_len = qinfo->local_alias ? qinfo->local_alias->rrset->rk.dname_len : qinfo->qname_len; if(sldns_buffer_current(buf) == qname) sldns_buffer_skip(buf, (ssize_t)qname_len); else sldns_buffer_write(buf, qname, qname_len); sldns_buffer_write_u16(buf, qinfo->qtype); sldns_buffer_write_u16(buf, qinfo->qclass); } sldns_buffer_flip(buf); if(edns) { struct edns_data es = *edns; es.edns_version = EDNS_ADVERTISED_VERSION; es.udp_size = EDNS_ADVERTISED_SIZE; es.ext_rcode = 0; es.bits &= EDNS_DO; if(sldns_buffer_limit(buf) + calc_edns_field_size(&es) > edns->udp_size) return; attach_edns_record(buf, &es); } } unbound-1.13.1/util/data/dname.h0000644000175000017500000002763514010434640016037 0ustar wouterwouter/* * util/data/dname.h - domain name routines * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions to deal with domain names (dnames). * * Some of the functions deal with domain names as a wireformat buffer, * with a length. */ #ifndef UTIL_DATA_DNAME_H #define UTIL_DATA_DNAME_H #include "util/storage/lruhash.h" struct sldns_buffer; /** max number of compression ptrs to follow */ #define MAX_COMPRESS_PTRS 256 /** * Determine length of dname in buffer, no compression ptrs allowed, * @param query: the ldns buffer, current position at start of dname. * at end, position is at end of the dname. * @return: 0 on parse failure, or length including ending 0 of dname. */ size_t query_dname_len(struct sldns_buffer* query); /** * Determine if dname in memory is correct. no compression ptrs allowed. * @param dname: where dname starts in memory. * @param len: dname is not allowed to exceed this length (i.e. of allocation). * @return length of dname if dname is ok, 0 on a parse error. */ size_t dname_valid(uint8_t* dname, size_t len); /** lowercase query dname */ void query_dname_tolower(uint8_t* dname); /** * lowercase pkt dname (follows compression pointers) * @param pkt: the packet, used to follow compression pointers. Position * is unchanged. * @param dname: start of dname in packet. */ void pkt_dname_tolower(struct sldns_buffer* pkt, uint8_t* dname); /** * Compare query dnames (uncompressed storage). The Dnames passed do not * have to be lowercased, comparison routine does this. * * This routine is special, in that the comparison that it does corresponds * with the canonical comparison needed when comparing dnames inside rdata * for RR types that need canonicalization. That means that the first byte * that is smaller (possibly after lowercasing) makes an RR smaller, or the * shortest name makes an RR smaller. * * This routine does not compute the canonical order needed for NSEC * processing. * * Dnames have to be valid format. * @param d1: dname to compare * @param d2: dname to compare * @return: -1, 0, or +1 depending on comparison results. * Sort order is first difference found. not the canonical ordering. */ int query_dname_compare(uint8_t* d1, uint8_t* d2); /** * Determine correct, compressed, dname present in packet. * Checks for parse errors. * @param pkt: packet to read from (from current start position). * @return: 0 on parse error. * At exit the position is right after the (compressed) dname. * Compression pointers are followed and checked for loops. * The uncompressed wireformat length is returned. */ size_t pkt_dname_len(struct sldns_buffer* pkt); /** * Compare dnames in packet (compressed). Dnames must be valid. * routine performs lowercasing, so the packet casing is preserved. * @param pkt: packet, used to resolve compression pointers. * @param d1: dname to compare * @param d2: dname to compare * @return: -1, 0, or +1 depending on comparison results. * Sort order is first difference found. not the canonical ordering. */ int dname_pkt_compare(struct sldns_buffer* pkt, uint8_t* d1, uint8_t* d2); /** * Hash dname, label by label, lowercasing, into hashvalue. * Dname in query format (not compressed). * @param dname: dname to hash. * @param h: initial hash value. * @return: result hash value. */ hashvalue_type dname_query_hash(uint8_t* dname, hashvalue_type h); /** * Hash dname, label by label, lowercasing, into hashvalue. * Dname in pkt format (compressed). * @param pkt: packet, for resolving compression pointers. * @param dname: dname to hash, pointer to the pkt buffer. * Must be valid format. No loops, etc. * @param h: initial hash value. * @return: result hash value. * Result is the same as dname_query_hash, even if compression is used. */ hashvalue_type dname_pkt_hash(struct sldns_buffer* pkt, uint8_t* dname, hashvalue_type h); /** * Copy over a valid dname and decompress it. * @param pkt: packet to resolve compression pointers. * @param to: buffer of size from pkt_len function to hold result. * @param dname: pointer into packet where dname starts. */ void dname_pkt_copy(struct sldns_buffer* pkt, uint8_t* to, uint8_t* dname); /** * Copy over a valid dname to a packet. * @param pkt: packet to copy to. * @param dname: dname to copy. * @return: 0 if not enough space in buffer. */ int dname_buffer_write(struct sldns_buffer* pkt, uint8_t* dname); /** * Count the number of labels in an uncompressed dname in memory. * @param dname: pointer to uncompressed dname. * @return: count of labels, including root label, "com." has 2 labels. */ int dname_count_labels(uint8_t* dname); /** * Count labels and dname length both, for uncompressed dname in memory. * @param dname: pointer to uncompressed dname. * @param size: length of dname, including root label. * @return: count of labels, including root label, "com." has 2 labels. */ int dname_count_size_labels(uint8_t* dname, size_t* size); /** * Compare dnames, sorted not canonical, but by label. * Such that zone contents follows zone apex. * @param d1: first dname. pointer to uncompressed wireformat. * @param labs1: number of labels in first dname. * @param d2: second dname. pointer to uncompressed wireformat. * @param labs2: number of labels in second dname. * @param mlabs: number of labels that matched exactly (the shared topdomain). * @return: 0 for equal, -1 smaller, or +1 d1 larger than d2. */ int dname_lab_cmp(uint8_t* d1, int labs1, uint8_t* d2, int labs2, int* mlabs); /** * Check if labels starts with given prefix * @param label: dname label * @param prefix: the string to match label with, null terminated. * @param endptr: pointer to location in label after prefix, only if return * value is 1. NULL if nothing in the label after the prefix, i.e. prefix * and label are the same. * @return: 1 if label starts with prefix, else 0 */ int dname_lab_startswith(uint8_t* label, char* prefix, char** endptr); /** * Check if dname contains label * @param dname: dname * @param dnamelen: length of dname * @param label: label to be checked for presence in dname * @return: 1 if dname has this label, 0 otherwise */ int dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label); /** * See if domain name d1 is a strict subdomain of d2. * That is a subdomain, but not equal. * @param d1: domain name, uncompressed wireformat * @param labs1: number of labels in d1, including root label. * @param d2: domain name, uncompressed wireformat * @param labs2: number of labels in d2, including root label. * @return true if d1 is a subdomain of d2, but not equal to d2. */ int dname_strict_subdomain(uint8_t* d1, int labs1, uint8_t* d2, int labs2); /** * Like dname_strict_subdomain but counts labels * @param d1: domain name, uncompressed wireformat * @param d2: domain name, uncompressed wireformat * @return true if d1 is a subdomain of d2, but not equal to d2. */ int dname_strict_subdomain_c(uint8_t* d1, uint8_t* d2); /** * Counts labels. Tests is d1 is a subdomain of d2. * @param d1: domain name, uncompressed wireformat * @param d2: domain name, uncompressed wireformat * @return true if d1 is a subdomain of d2. */ int dname_subdomain_c(uint8_t* d1, uint8_t* d2); /** * Debug helper. Print wireformat dname to output. * @param out: like stdout or a file. * @param pkt: if not NULL, the packet for resolving compression ptrs. * @param dname: pointer to (start of) dname. */ void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname); /** * Debug helper. Print dname to given string buffer (string buffer must * be at least 255 chars + 1 for the 0, in printable form. * This may lose information (? for nonprintable characters, or & if * the name is too long, # for a bad label length). * @param dname: uncompressed wireformat. * @param str: buffer of 255+1 length. */ void dname_str(uint8_t* dname, char* str); /** * Returns true if the uncompressed wireformat dname is the root "." * @param dname: the dname to check * @return true if ".", false if not. */ int dname_is_root(uint8_t* dname); /** * Snip off first label from a dname, returning the parent zone. * @param dname: from what to strip off. uncompressed wireformat. * @param len: length, adjusted to become less. * @return stripped off, or "." if input was ".". */ void dname_remove_label(uint8_t** dname, size_t* len); /** * Snip off first N labels from a dname, returning the parent zone. * @param dname: from what to strip off. uncompressed wireformat. * @param len: length, adjusted to become less. * @param n: number of labels to strip off (from the left). * if 0, nothing happens. * @return stripped off, or "." if input was ".". */ void dname_remove_labels(uint8_t** dname, size_t* len, int n); /** * Count labels for the RRSIG signature label field. * Like a normal labelcount, but "*" wildcard and "." root are not counted. * @param dname: valid uncompressed wireformat. * @return number of labels like in RRSIG; '*' and '.' are not counted. */ int dname_signame_label_count(uint8_t* dname); /** * Return true if the label is a wildcard, *.example.com. * @param dname: valid uncompressed wireformat. * @return true if wildcard, or false. */ int dname_is_wild(uint8_t* dname); /** * Compare dnames, Canonical in rfc4034 sense, but by label. * Such that zone contents follows zone apex. * * @param d1: first dname. pointer to uncompressed wireformat. * @param labs1: number of labels in first dname. * @param d2: second dname. pointer to uncompressed wireformat. * @param labs2: number of labels in second dname. * @param mlabs: number of labels that matched exactly (the shared topdomain). * @return: 0 for equal, -1 smaller, or +1 d1 larger than d2. */ int dname_canon_lab_cmp(uint8_t* d1, int labs1, uint8_t* d2, int labs2, int* mlabs); /** * Canonical dname compare. Takes care of counting labels. * Per rfc 4034 canonical order. * * @param d1: first dname. pointer to uncompressed wireformat. * @param d2: second dname. pointer to uncompressed wireformat. * @return: 0 for equal, -1 smaller, or +1 d1 larger than d2. */ int dname_canonical_compare(uint8_t* d1, uint8_t* d2); /** * Get the shared topdomain between two names. Root "." or longer. * @param d1: first dname. pointer to uncompressed wireformat. * @param d2: second dname. pointer to uncompressed wireformat. * @return pointer to shared topdomain. Ptr to a part of d1. */ uint8_t* dname_get_shared_topdomain(uint8_t* d1, uint8_t* d2); #endif /* UTIL_DATA_DNAME_H */ unbound-1.13.1/util/data/msgreply.h0000644000175000017500000006341214010434640016606 0ustar wouterwouter/* * util/data/msgreply.h - store message and reply data. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a data structure to store a message and its reply. */ #ifndef UTIL_DATA_MSGREPLY_H #define UTIL_DATA_MSGREPLY_H #include "util/storage/lruhash.h" #include "util/data/packed_rrset.h" struct sldns_buffer; struct comm_reply; struct alloc_cache; struct iovec; struct regional; struct edns_data; struct edns_option; struct inplace_cb; struct module_qstate; struct module_env; struct msg_parse; struct rrset_parse; struct local_rrset; struct dns_msg; /** calculate the prefetch TTL as 90% of original. Calculation * without numerical overflow (uin32_t) */ #define PREFETCH_TTL_CALC(ttl) ((ttl) - (ttl)/10) /** * Structure to store query information that makes answers to queries * different. */ struct query_info { /** * Salient data on the query: qname, in wireformat. * can be allocated or a pointer to outside buffer. * User has to keep track on the status of this. */ uint8_t* qname; /** length of qname (including last 0 octet) */ size_t qname_len; /** qtype, host byte order */ uint16_t qtype; /** qclass, host byte order */ uint16_t qclass; /** * Alias local answer(s) for the qname. If 'qname' is an alias defined * in a local zone, this field will be set to the corresponding local * RRset when the alias is determined. * In the initial implementation this can only be a single CNAME RR * (or NULL), but it could possibly be extended to be a DNAME or a * chain of aliases. * Users of this structure are responsible to initialize this field * to be NULL; otherwise other part of query handling code may be * confused. * Users also have to be careful about the lifetime of data. On return * from local zone lookup, it may point to data derived from * configuration that may be dynamically invalidated or data allocated * in an ephemeral regional allocator. A deep copy of the data may * have to be generated if it has to be kept during iterative * resolution. */ struct local_rrset* local_alias; }; /** * Information to reference an rrset */ struct rrset_ref { /** the key with lock, and ptr to packed data. */ struct ub_packed_rrset_key* key; /** id needed */ rrset_id_type id; }; /** * Structure to store DNS query and the reply packet. * To use it, copy over the flags from reply and modify using flags from * the query (RD,CD if not AA). prepend ID. * * Memory layout is: * o struct * o rrset_ref array * o packed_rrset_key* array. * * Memory layout is sometimes not packed, when the message is synthesized, * for easy of the generation. It is allocated packed when it is copied * from the region allocation to the malloc allocation. */ struct reply_info { /** the flags for the answer, host byte order. */ uint16_t flags; /** * This flag informs unbound the answer is authoritative and * the AA flag should be preserved. */ uint8_t authoritative; /** * Number of RRs in the query section. * If qdcount is not 0, then it is 1, and the data that appears * in the reply is the same as the query_info. * Host byte order. */ uint8_t qdcount; /** 32 bit padding to pad struct member alignment to 64 bits. */ uint32_t padding; /** * TTL of the entire reply (for negative caching). * only for use when there are 0 RRsets in this message. * if there are RRsets, check those instead. */ time_t ttl; /** * TTL for prefetch. After it has expired, a prefetch is suitable. * Smaller than the TTL, otherwise the prefetch would not happen. */ time_t prefetch_ttl; /** * Reply TTL extended with serve expired TTL, to limit time to serve * expired message. */ time_t serve_expired_ttl; /** * The security status from DNSSEC validation of this message. */ enum sec_status security; /** * Number of RRsets in each section. * The answer section. Add up the RRs in every RRset to calculate * the number of RRs, and the count for the dns packet. * The number of RRs in RRsets can change due to RRset updates. */ size_t an_numrrsets; /** Count of authority section RRsets */ size_t ns_numrrsets; /** Count of additional section RRsets */ size_t ar_numrrsets; /** number of RRsets: an_numrrsets + ns_numrrsets + ar_numrrsets */ size_t rrset_count; /** * List of pointers (only) to the rrsets in the order in which * they appear in the reply message. * Number of elements is ancount+nscount+arcount RRsets. * This is a pointer to that array. * Use the accessor function for access. */ struct ub_packed_rrset_key** rrsets; /** * Packed array of ids (see counts) and pointers to packed_rrset_key. * The number equals ancount+nscount+arcount RRsets. * These are sorted in ascending pointer, the locking order. So * this list can be locked (and id, ttl checked), to see if * all the data is available and recent enough. * * This is defined as an array of size 1, so that the compiler * associates the identifier with this position in the structure. * Array bound overflow on this array then gives access to the further * elements of the array, which are allocated after the main structure. * * It could be more pure to define as array of size 0, ref[0]. * But ref[1] may be less confusing for compilers. * Use the accessor function for access. */ struct rrset_ref ref[1]; }; /** * Structure to keep hash table entry for message replies. */ struct msgreply_entry { /** the hash table key */ struct query_info key; /** the hash table entry, data is struct reply_info* */ struct lruhash_entry entry; }; /** * Constructor for replyinfo. * @param region: where to allocate the results, pass NULL to use malloc. * @param flags: flags for the replyinfo. * @param qd: qd count * @param ttl: TTL of replyinfo * @param prettl: prefetch ttl * @param expttl: serve expired ttl * @param an: an count * @param ns: ns count * @param ar: ar count * @param total: total rrset count (presumably an+ns+ar). * @param sec: security status of the reply info. * @return the reply_info base struct with the array for putting the rrsets * in. The array has been zeroed. Returns NULL on malloc failure. */ struct reply_info* construct_reply_info_base(struct regional* region, uint16_t flags, size_t qd, time_t ttl, time_t prettl, time_t expttl, size_t an, size_t ns, size_t ar, size_t total, enum sec_status sec); /** * Parse wire query into a queryinfo structure, return 0 on parse error. * initialises the (prealloced) queryinfo structure as well. * This query structure contains a pointer back info the buffer! * This pointer avoids memory allocation. allocqname does memory allocation. * @param m: the prealloced queryinfo structure to put query into. * must be unused, or _clear()ed. * @param query: the wireformat packet query. starts with ID. * @return: 0 on format error. */ int query_info_parse(struct query_info* m, struct sldns_buffer* query); /** * Parse query reply. * Fills in preallocated query_info structure (with ptr into buffer). * Allocates reply_info and packed_rrsets. These are not yet added to any * caches or anything, this is only parsing. Returns formerror on qdcount > 1. * @param pkt: the packet buffer. Must be positioned after the query section. * @param alloc: creates packed rrset key structures. * @param rep: allocated reply_info is returned (only on no error). * @param qinf: query_info is returned (only on no error). * @param region: where to store temporary data (for parsing). * @param edns: where to store edns information, does not need to be inited. * @return: zero is OK, or DNS error code in case of error * o FORMERR for parse errors. * o SERVFAIL for memory allocation errors. */ int reply_info_parse(struct sldns_buffer* pkt, struct alloc_cache* alloc, struct query_info* qinf, struct reply_info** rep, struct regional* region, struct edns_data* edns); /** * Allocate and decompress parsed message and rrsets. * @param pkt: for name decompression. * @param msg: parsed message in scratch region. * @param alloc: alloc cache for special rrset key structures. * Not used if region!=NULL, it can be NULL in that case. * @param qinf: where to store query info. * qinf itself is allocated by the caller. * @param rep: reply info is allocated and returned. * @param region: if this parameter is NULL then malloc and the alloc is used. * otherwise, everything is allocated in this region. * In a region, no special rrset key structures are needed (not shared), * and no rrset_ref array in the reply is built up. * @return 0 if allocation failed. */ int parse_create_msg(struct sldns_buffer* pkt, struct msg_parse* msg, struct alloc_cache* alloc, struct query_info* qinf, struct reply_info** rep, struct regional* region); /** get msg reply struct (in temp region) */ struct reply_info* parse_reply_in_temp_region(struct sldns_buffer* pkt, struct regional* region, struct query_info* qi); /** * Sorts the ref array. * @param rep: reply info. rrsets must be filled in. */ void reply_info_sortref(struct reply_info* rep); /** * Set TTLs inside the replyinfo to absolute values. * @param rep: reply info. rrsets must be filled in. * Also refs must be filled in. * @param timenow: the current time. */ void reply_info_set_ttls(struct reply_info* rep, time_t timenow); /** * Delete reply_info and packed_rrsets (while they are not yet added to the * hashtables.). Returns rrsets to the alloc cache. * @param rep: reply_info to delete. * @param alloc: where to return rrset structures to. */ void reply_info_parsedelete(struct reply_info* rep, struct alloc_cache* alloc); /** * Compare two queryinfo structures, on query and type, class. * It is _not_ sorted in canonical ordering. * @param m1: struct query_info* , void* here to ease use as function pointer. * @param m2: struct query_info* , void* here to ease use as function pointer. * @return: 0 = same, -1 m1 is smaller, +1 m1 is larger. */ int query_info_compare(void* m1, void* m2); /** clear out query info structure */ void query_info_clear(struct query_info* m); /** calculate size of struct query_info + reply_info */ size_t msgreply_sizefunc(void* k, void* d); /** delete msgreply_entry key structure */ void query_entry_delete(void *q, void* arg); /** delete reply_info data structure */ void reply_info_delete(void* d, void* arg); /** calculate hash value of query_info, lowercases the qname, * uses CD flag for AAAA qtype */ hashvalue_type query_info_hash(struct query_info *q, uint16_t flags); /** * Setup query info entry * @param q: query info to copy. Emptied as if clear is called. * @param r: reply to init data. * @param h: hash value. * @return: newly allocated message reply cache item. */ struct msgreply_entry* query_info_entrysetup(struct query_info* q, struct reply_info* r, hashvalue_type h); /** * Copy reply_info and all rrsets in it and allocate. * @param rep: what to copy, probably inside region, no ref[] array in it. * @param alloc: how to allocate rrset keys. * Not used if region!=NULL, it can be NULL in that case. * @param region: if this parameter is NULL then malloc and the alloc is used. * otherwise, everything is allocated in this region. * In a region, no special rrset key structures are needed (not shared), * and no rrset_ref array in the reply is built up. * @return new reply info or NULL on memory error. */ struct reply_info* reply_info_copy(struct reply_info* rep, struct alloc_cache* alloc, struct regional* region); /** * Allocate (special) rrset keys. * @param rep: reply info in which the rrset keys to be allocated, rrset[] * array should have bee allocated with NULL pointers. * @param alloc: how to allocate rrset keys. * Not used if region!=NULL, it can be NULL in that case. * @param region: if this parameter is NULL then the alloc is used. * otherwise, rrset keys are allocated in this region. * In a region, no special rrset key structures are needed (not shared). * and no rrset_ref array in the reply needs to be built up. * @return 1 on success, 0 on error */ int reply_info_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc, struct regional* region); /** * Copy a parsed rrset into given key, decompressing and allocating rdata. * @param pkt: packet for decompression * @param msg: the parser message (for flags for trust). * @param pset: the parsed rrset to copy. * @param region: if NULL - malloc, else data is allocated in this region. * @param pk: a freshly obtained rrsetkey structure. No dname is set yet, * will be set on return. * Note that TTL will still be relative on return. * @return false on alloc failure. */ int parse_copy_decompress_rrset(struct sldns_buffer* pkt, struct msg_parse* msg, struct rrset_parse *pset, struct regional* region, struct ub_packed_rrset_key* pk); /** * Find final cname target in reply, the one matching qinfo. Follows CNAMEs. * @param qinfo: what to start with. * @param rep: looks in answer section of this message. * @return: pointer dname, or NULL if not found. */ uint8_t* reply_find_final_cname_target(struct query_info* qinfo, struct reply_info* rep); /** * Check if cname chain in cached reply is still valid. * @param qinfo: query info with query name. * @param rep: reply to check. * @return: true if valid, false if invalid. */ int reply_check_cname_chain(struct query_info* qinfo, struct reply_info* rep); /** * Check security status of all RRs in the message. * @param rep: reply to check * @return: true if all RRs are secure. False if not. * True if there are zero RRs. */ int reply_all_rrsets_secure(struct reply_info* rep); /** * Find answer rrset in reply, the one matching qinfo. Follows CNAMEs, so the * result may have a different owner name. * @param qinfo: what to look for. * @param rep: looks in answer section of this message. * @return: pointer to rrset, or NULL if not found. */ struct ub_packed_rrset_key* reply_find_answer_rrset(struct query_info* qinfo, struct reply_info* rep); /** * Find rrset in reply, inside the answer section. Does not follow CNAMEs. * @param rep: looks in answer section of this message. * @param name: what to look for. * @param namelen: length of name. * @param type: looks for (host order). * @param dclass: looks for (host order). * @return: pointer to rrset, or NULL if not found. */ struct ub_packed_rrset_key* reply_find_rrset_section_an(struct reply_info* rep, uint8_t* name, size_t namelen, uint16_t type, uint16_t dclass); /** * Find rrset in reply, inside the authority section. Does not follow CNAMEs. * @param rep: looks in authority section of this message. * @param name: what to look for. * @param namelen: length of name. * @param type: looks for (host order). * @param dclass: looks for (host order). * @return: pointer to rrset, or NULL if not found. */ struct ub_packed_rrset_key* reply_find_rrset_section_ns(struct reply_info* rep, uint8_t* name, size_t namelen, uint16_t type, uint16_t dclass); /** * Find rrset in reply, inside any section. Does not follow CNAMEs. * @param rep: looks in answer,authority and additional section of this message. * @param name: what to look for. * @param namelen: length of name. * @param type: looks for (host order). * @param dclass: looks for (host order). * @return: pointer to rrset, or NULL if not found. */ struct ub_packed_rrset_key* reply_find_rrset(struct reply_info* rep, uint8_t* name, size_t namelen, uint16_t type, uint16_t dclass); /** * Debug send the query info and reply info to the log in readable form. * @param str: descriptive string printed with packet content. * @param qinfo: query section. * @param rep: rest of message. */ void log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep); /** * Print string with neat domain name, type, class, * status code from, and size of a query response. * * @param v: at what verbosity level to print this. * @param qinf: query section. * @param addr: address of the client. * @param addrlen: length of the client address. * @param dur: how long it took to complete the query. * @param cached: whether or not the reply is coming from * the cache, or an outside network. * @param rmsg: sldns buffer packet. */ void log_reply_info(enum verbosity_value v, struct query_info *qinf, struct sockaddr_storage *addr, socklen_t addrlen, struct timeval dur, int cached, struct sldns_buffer *rmsg); /** * Print string with neat domain name, type, class from query info. * @param v: at what verbosity level to print this. * @param str: string of message. * @param qinf: query info structure with name, type and class. */ void log_query_info(enum verbosity_value v, const char* str, struct query_info* qinf); /** * Append edns option to edns data structure * @param edns: the edns data structure to append the edns option to. * @param region: region to allocate the new edns option. * @param code: the edns option's code. * @param len: the edns option's length. * @param data: the edns option's data. * @return false on failure. */ int edns_opt_append(struct edns_data* edns, struct regional* region, uint16_t code, size_t len, uint8_t* data); /** * Append edns option to edns option list * @param list: the edns option list to append the edns option to. * @param code: the edns option's code. * @param len: the edns option's length. * @param data: the edns option's data. * @param region: region to allocate the new edns option. * @return false on failure. */ int edns_opt_list_append(struct edns_option** list, uint16_t code, size_t len, uint8_t* data, struct regional* region); /** * Remove any option found on the edns option list that matches the code. * @param list: the list of edns options. * @param code: the opt code to remove. * @return true when at least one edns option was removed, false otherwise. */ int edns_opt_list_remove(struct edns_option** list, uint16_t code); /** * Find edns option in edns list * @param list: list of edns options (eg. edns.opt_list) * @param code: opt code to find. * @return NULL or the edns_option element. */ struct edns_option* edns_opt_list_find(struct edns_option* list, uint16_t code); /** * Call the registered functions in the inplace_cb_reply linked list. * This function is going to get called while answering with a resolved query. * @param env: module environment. * @param qinfo: query info. * @param qstate: module qstate. * @param rep: Reply info. Could be NULL. * @param rcode: return code. * @param edns: edns data of the reply. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. * @param start_time: the start time of recursion, when the packet arrived, * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time); /** * Call the registered functions in the inplace_cb_reply_cache linked list. * This function is going to get called while answering from cache. * @param env: module environment. * @param qinfo: query info. * @param qstate: module qstate. NULL when replying from cache. * @param rep: Reply info. * @param rcode: return code. * @param edns: edns data of the reply. Edns input can be found here. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. * @param start_time: the start time of recursion, when the packet arrived, * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_cache_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time); /** * Call the registered functions in the inplace_cb_reply_local linked list. * This function is going to get called while answering with local data. * @param env: module environment. * @param qinfo: query info. * @param qstate: module qstate. NULL when replying from cache. * @param rep: Reply info. * @param rcode: return code. * @param edns: edns data of the reply. Edns input can be found here. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. * @param start_time: the start time of recursion, when the packet arrived, * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_local_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time); /** * Call the registered functions in the inplace_cb_reply linked list. * This function is going to get called while answering with a servfail. * @param env: module environment. * @param qinfo: query info. * @param qstate: module qstate. Contains the edns option lists. Could be NULL. * @param rep: Reply info. NULL when servfail. * @param rcode: return code. LDNS_RCODE_SERVFAIL. * @param edns: edns data of the reply. Edns input can be found here if qstate * is NULL. * @param repinfo: comm_reply. Reply information for a communication point. * @param region: region to store data. * @param start_time: the start time of recursion, when the packet arrived, * or the current time for cache responses. * @return false on failure (a callback function returned an error). */ int inplace_cb_reply_servfail_call(struct module_env* env, struct query_info* qinfo, struct module_qstate* qstate, struct reply_info* rep, int rcode, struct edns_data* edns, struct comm_reply* repinfo, struct regional* region, struct timeval* start_time); /** * Call the registered functions in the inplace_cb_query linked list. * This function is going to get called just before sending a query to a * nameserver. * @param env: module environment. * @param qinfo: query info. * @param flags: flags of the query. * @param addr: to which server to send the query. * @param addrlen: length of addr. * @param zone: name of the zone of the delegation point. wireformat dname. * This is the delegation point name for which the server is deemed * authoritative. * @param zonelen: length of zone. * @param qstate: module qstate. * @param region: region to store data. * @return false on failure (a callback function returned an error). */ int inplace_cb_query_call(struct module_env* env, struct query_info* qinfo, uint16_t flags, struct sockaddr_storage* addr, socklen_t addrlen, uint8_t* zone, size_t zonelen, struct module_qstate* qstate, struct regional* region); /** * Call the registered functions in the inplace_cb_edns_back_parsed linked list. * This function is going to get called after parsing the EDNS data on the * reply from a nameserver. * @param env: module environment. * @param qstate: module qstate. * @return false on failure (a callback function returned an error). */ int inplace_cb_edns_back_parsed_call(struct module_env* env, struct module_qstate* qstate); /** * Call the registered functions in the inplace_cb_query_response linked list. * This function is going to get called after receiving a reply from a * nameserver. * @param env: module environment. * @param qstate: module qstate. * @param response: received response * @return false on failure (a callback function returned an error). */ int inplace_cb_query_response_call(struct module_env* env, struct module_qstate* qstate, struct dns_msg* response); /** * Copy edns option list allocated to the new region */ struct edns_option* edns_opt_copy_region(struct edns_option* list, struct regional* region); /** * Copy edns option list allocated with malloc */ struct edns_option* edns_opt_copy_alloc(struct edns_option* list); /** * Free edns option list allocated with malloc */ void edns_opt_list_free(struct edns_option* list); /** * Compare an edns option. (not entire list). Also compares contents. */ int edns_opt_compare(struct edns_option* p, struct edns_option* q); /** * Compare edns option lists, also the order and contents of edns-options. */ int edns_opt_list_compare(struct edns_option* p, struct edns_option* q); #endif /* UTIL_DATA_MSGREPLY_H */ unbound-1.13.1/util/data/msgparse.c0000644000175000017500000010230314010434640016551 0ustar wouterwouter/* * util/data/msgparse.c - parse wireformat DNS messages. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * Routines for message parsing a packet buffer to a descriptive structure. */ #include "config.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" #include "util/data/dname.h" #include "util/data/packed_rrset.h" #include "util/storage/lookup3.h" #include "util/regional.h" #include "sldns/rrdef.h" #include "sldns/sbuffer.h" #include "sldns/parseutil.h" #include "sldns/wire2str.h" /** smart comparison of (compressed, valid) dnames from packet */ static int smart_compare(sldns_buffer* pkt, uint8_t* dnow, uint8_t* dprfirst, uint8_t* dprlast) { if(LABEL_IS_PTR(*dnow)) { /* ptr points to a previous dname */ uint8_t* p; if((size_t)PTR_OFFSET(dnow[0], dnow[1]) >= sldns_buffer_limit(pkt)) return -1; p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); if( p == dprfirst || p == dprlast ) return 0; /* prev dname is also a ptr, both ptrs are the same. */ if(LABEL_IS_PTR(*dprlast) && dprlast[0] == dnow[0] && dprlast[1] == dnow[1]) return 0; } return dname_pkt_compare(pkt, dnow, dprlast); } /** * Allocate new rrset in region, fill with data. */ static struct rrset_parse* new_rrset(struct msg_parse* msg, uint8_t* dname, size_t dnamelen, uint16_t type, uint16_t dclass, hashvalue_type hash, uint32_t rrset_flags, sldns_pkt_section section, struct regional* region) { struct rrset_parse* p = regional_alloc(region, sizeof(*p)); if(!p) return NULL; p->rrset_bucket_next = msg->hashtable[hash & (PARSE_TABLE_SIZE-1)]; msg->hashtable[hash & (PARSE_TABLE_SIZE-1)] = p; p->rrset_all_next = 0; if(msg->rrset_last) msg->rrset_last->rrset_all_next = p; else msg->rrset_first = p; msg->rrset_last = p; p->hash = hash; p->section = section; p->dname = dname; p->dname_len = dnamelen; p->type = type; p->rrset_class = dclass; p->flags = rrset_flags; p->rr_count = 0; p->size = 0; p->rr_first = 0; p->rr_last = 0; p->rrsig_count = 0; p->rrsig_first = 0; p->rrsig_last = 0; return p; } /** See if next rrset is nsec at zone apex */ static int nsec_at_apex(sldns_buffer* pkt) { /* we are at ttl position in packet. */ size_t pos = sldns_buffer_position(pkt); uint16_t rdatalen; if(sldns_buffer_remaining(pkt) < 7) /* ttl+len+root */ return 0; /* eek! */ sldns_buffer_skip(pkt, 4); /* ttl */; rdatalen = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rdatalen) { sldns_buffer_set_position(pkt, pos); return 0; /* parse error happens later */ } /* must validate the nsec next domain name format */ if(pkt_dname_len(pkt) == 0) { sldns_buffer_set_position(pkt, pos); return 0; /* parse error */ } /* see if SOA bit is set. */ if(sldns_buffer_position(pkt) < pos+4+rdatalen) { /* nsec type bitmap contains items */ uint8_t win, blen, bits; /* need: windownum, bitmap len, firstbyte */ if(sldns_buffer_position(pkt)+3 > pos+4+rdatalen) { sldns_buffer_set_position(pkt, pos); return 0; /* malformed nsec */ } win = sldns_buffer_read_u8(pkt); blen = sldns_buffer_read_u8(pkt); bits = sldns_buffer_read_u8(pkt); /* 0window always first window. bitlen >=1 or parse error really. bit 0x2 is SOA. */ if(win == 0 && blen >= 1 && (bits & 0x02)) { sldns_buffer_set_position(pkt, pos); return 1; } } sldns_buffer_set_position(pkt, pos); return 0; } /** Calculate rrset flags */ static uint32_t pkt_rrset_flags(sldns_buffer* pkt, uint16_t type, sldns_pkt_section sec) { uint32_t f = 0; if(type == LDNS_RR_TYPE_NSEC && nsec_at_apex(pkt)) { f |= PACKED_RRSET_NSEC_AT_APEX; } else if(type == LDNS_RR_TYPE_SOA && sec == LDNS_SECTION_AUTHORITY) { f |= PACKED_RRSET_SOA_NEG; } return f; } hashvalue_type pkt_hash_rrset(sldns_buffer* pkt, uint8_t* dname, uint16_t type, uint16_t dclass, uint32_t rrset_flags) { /* note this MUST be identical to rrset_key_hash in packed_rrset.c */ /* this routine handles compressed names */ hashvalue_type h = 0xab; h = dname_pkt_hash(pkt, dname, h); h = hashlittle(&type, sizeof(type), h); /* host order */ h = hashlittle(&dclass, sizeof(dclass), h); /* netw order */ h = hashlittle(&rrset_flags, sizeof(uint32_t), h); return h; } /** create partial dname hash for rrset hash */ static hashvalue_type pkt_hash_rrset_first(sldns_buffer* pkt, uint8_t* dname) { /* works together with pkt_hash_rrset_rest */ /* note this MUST be identical to rrset_key_hash in packed_rrset.c */ /* this routine handles compressed names */ hashvalue_type h = 0xab; h = dname_pkt_hash(pkt, dname, h); return h; } /** create a rrset hash from a partial dname hash */ static hashvalue_type pkt_hash_rrset_rest(hashvalue_type dname_h, uint16_t type, uint16_t dclass, uint32_t rrset_flags) { /* works together with pkt_hash_rrset_first */ /* note this MUST be identical to rrset_key_hash in packed_rrset.c */ hashvalue_type h; h = hashlittle(&type, sizeof(type), dname_h); /* host order */ h = hashlittle(&dclass, sizeof(dclass), h); /* netw order */ h = hashlittle(&rrset_flags, sizeof(uint32_t), h); return h; } /** compare rrset_parse with data */ static int rrset_parse_equals(struct rrset_parse* p, sldns_buffer* pkt, hashvalue_type h, uint32_t rrset_flags, uint8_t* dname, size_t dnamelen, uint16_t type, uint16_t dclass) { if(p->hash == h && p->dname_len == dnamelen && p->type == type && p->rrset_class == dclass && p->flags == rrset_flags && dname_pkt_compare(pkt, dname, p->dname) == 0) return 1; return 0; } struct rrset_parse* msgparse_hashtable_lookup(struct msg_parse* msg, sldns_buffer* pkt, hashvalue_type h, uint32_t rrset_flags, uint8_t* dname, size_t dnamelen, uint16_t type, uint16_t dclass) { struct rrset_parse* p = msg->hashtable[h & (PARSE_TABLE_SIZE-1)]; while(p) { if(rrset_parse_equals(p, pkt, h, rrset_flags, dname, dnamelen, type, dclass)) return p; p = p->rrset_bucket_next; } return NULL; } /** return type networkformat that rrsig in packet covers */ static int pkt_rrsig_covered(sldns_buffer* pkt, uint8_t* here, uint16_t* type) { size_t pos = sldns_buffer_position(pkt); sldns_buffer_set_position(pkt, (size_t)(here-sldns_buffer_begin(pkt))); /* ttl + len + size of small rrsig(rootlabel, no signature) */ if(sldns_buffer_remaining(pkt) < 4+2+19) return 0; sldns_buffer_skip(pkt, 4); /* ttl */ if(sldns_buffer_read_u16(pkt) < 19) /* too short */ { sldns_buffer_set_position(pkt, pos); return 0; } *type = sldns_buffer_read_u16(pkt); sldns_buffer_set_position(pkt, pos); return 1; } /** true if covered type equals prevtype */ static int pkt_rrsig_covered_equals(sldns_buffer* pkt, uint8_t* here, uint16_t type) { uint16_t t; if(pkt_rrsig_covered(pkt, here, &t) && t == type) return 1; return 0; } void msgparse_bucket_remove(struct msg_parse* msg, struct rrset_parse* rrset) { struct rrset_parse** p; p = &msg->hashtable[ rrset->hash & (PARSE_TABLE_SIZE-1) ]; while(*p) { if(*p == rrset) { *p = rrset->rrset_bucket_next; return; } p = &( (*p)->rrset_bucket_next ); } } /** change section of rrset from previous to current section */ static void change_section(struct msg_parse* msg, struct rrset_parse* rrset, sldns_pkt_section section) { struct rrset_parse *p, *prev; /* remove from list */ if(section == rrset->section) return; p = msg->rrset_first; prev = 0; while(p) { if(p == rrset) { if(prev) prev->rrset_all_next = p->rrset_all_next; else msg->rrset_first = p->rrset_all_next; if(msg->rrset_last == rrset) msg->rrset_last = prev; break; } prev = p; p = p->rrset_all_next; } /* remove from count */ switch(rrset->section) { case LDNS_SECTION_ANSWER: msg->an_rrsets--; break; case LDNS_SECTION_AUTHORITY: msg->ns_rrsets--; break; case LDNS_SECTION_ADDITIONAL: msg->ar_rrsets--; break; default: log_assert(0); } /* insert at end of list */ rrset->rrset_all_next = 0; if(msg->rrset_last) msg->rrset_last->rrset_all_next = rrset; else msg->rrset_first = rrset; msg->rrset_last = rrset; /* up count of new section */ switch(section) { case LDNS_SECTION_AUTHORITY: msg->ns_rrsets++; break; case LDNS_SECTION_ADDITIONAL: msg->ar_rrsets++; break; default: log_assert(0); } rrset->section = section; } /** see if rrset of type RRSIG contains sig over given type */ static int rrset_has_sigover(sldns_buffer* pkt, struct rrset_parse* rrset, uint16_t type, int* hasother) { int res = 0; struct rr_parse* rr = rrset->rr_first; log_assert( rrset->type == LDNS_RR_TYPE_RRSIG ); while(rr) { if(pkt_rrsig_covered_equals(pkt, rr->ttl_data, type)) res = 1; else *hasother = 1; rr = rr->next; } return res; } /** move rrsigs from sigset to dataset */ static int moveover_rrsigs(sldns_buffer* pkt, struct regional* region, struct rrset_parse* sigset, struct rrset_parse* dataset, int duplicate) { struct rr_parse* sig = sigset->rr_first; struct rr_parse* prev = NULL; struct rr_parse* insert; struct rr_parse* nextsig; while(sig) { nextsig = sig->next; if(pkt_rrsig_covered_equals(pkt, sig->ttl_data, dataset->type)) { if(duplicate) { /* new */ insert = (struct rr_parse*)regional_alloc( region, sizeof(struct rr_parse)); if(!insert) return 0; insert->outside_packet = 0; insert->ttl_data = sig->ttl_data; insert->size = sig->size; /* prev not used */ } else { /* remove from sigset */ if(prev) prev->next = sig->next; else sigset->rr_first = sig->next; if(sigset->rr_last == sig) sigset->rr_last = prev; sigset->rr_count--; sigset->size -= sig->size; insert = sig; /* prev not changed */ } /* add to dataset */ dataset->rrsig_count++; insert->next = 0; if(dataset->rrsig_last) dataset->rrsig_last->next = insert; else dataset->rrsig_first = insert; dataset->rrsig_last = insert; dataset->size += insert->size; } else { prev = sig; } sig = nextsig; } return 1; } /** change an rrsig rrset for use as data rrset */ static struct rrset_parse* change_rrsig_rrset(struct rrset_parse* sigset, struct msg_parse* msg, sldns_buffer* pkt, uint16_t datatype, uint32_t rrset_flags, int hasother, sldns_pkt_section section, struct regional* region) { struct rrset_parse* dataset = sigset; hashvalue_type hash = pkt_hash_rrset(pkt, sigset->dname, datatype, sigset->rrset_class, rrset_flags); log_assert( sigset->type == LDNS_RR_TYPE_RRSIG ); log_assert( datatype != LDNS_RR_TYPE_RRSIG ); if(hasother) { /* need to make new rrset to hold data type */ dataset = new_rrset(msg, sigset->dname, sigset->dname_len, datatype, sigset->rrset_class, hash, rrset_flags, section, region); if(!dataset) return NULL; switch(section) { case LDNS_SECTION_ANSWER: msg->an_rrsets++; break; case LDNS_SECTION_AUTHORITY: msg->ns_rrsets++; break; case LDNS_SECTION_ADDITIONAL: msg->ar_rrsets++; break; default: log_assert(0); } if(!moveover_rrsigs(pkt, region, sigset, dataset, msg->qtype == LDNS_RR_TYPE_RRSIG || (msg->qtype == LDNS_RR_TYPE_ANY && section != LDNS_SECTION_ANSWER) )) return NULL; return dataset; } /* changeover the type of the rrset to data set */ msgparse_bucket_remove(msg, dataset); /* insert into new hash bucket */ dataset->rrset_bucket_next = msg->hashtable[hash&(PARSE_TABLE_SIZE-1)]; msg->hashtable[hash&(PARSE_TABLE_SIZE-1)] = dataset; dataset->hash = hash; /* use section of data item for result */ change_section(msg, dataset, section); dataset->type = datatype; dataset->flags = rrset_flags; dataset->rrsig_count += dataset->rr_count; dataset->rr_count = 0; /* move sigs to end of siglist */ if(dataset->rrsig_last) dataset->rrsig_last->next = dataset->rr_first; else dataset->rrsig_first = dataset->rr_first; dataset->rrsig_last = dataset->rr_last; dataset->rr_first = 0; dataset->rr_last = 0; return dataset; } /** Find rrset. If equal to previous it is fast. hash if not so. * @param msg: the message with hash table. * @param pkt: the packet in wireformat (needed for compression ptrs). * @param dname: pointer to start of dname (compressed) in packet. * @param dnamelen: uncompressed wirefmt length of dname. * @param type: type of current rr. * @param dclass: class of current rr. * @param hash: hash value is returned if the rrset could not be found. * @param rrset_flags: is returned if the rrset could not be found. * @param prev_dname_first: dname of last seen RR. First seen dname. * @param prev_dname_last: dname of last seen RR. Last seen dname. * @param prev_dnamelen: dname len of last seen RR. * @param prev_type: type of last seen RR. * @param prev_dclass: class of last seen RR. * @param rrset_prev: last seen RRset. * @param section: the current section in the packet. * @param region: used to allocate temporary parsing data. * @return 0 on out of memory. */ static int find_rrset(struct msg_parse* msg, sldns_buffer* pkt, uint8_t* dname, size_t dnamelen, uint16_t type, uint16_t dclass, hashvalue_type* hash, uint32_t* rrset_flags, uint8_t** prev_dname_first, uint8_t** prev_dname_last, size_t* prev_dnamelen, uint16_t* prev_type, uint16_t* prev_dclass, struct rrset_parse** rrset_prev, sldns_pkt_section section, struct regional* region) { hashvalue_type dname_h = pkt_hash_rrset_first(pkt, dname); uint16_t covtype; if(*rrset_prev) { /* check if equal to previous item */ if(type == *prev_type && dclass == *prev_dclass && dnamelen == *prev_dnamelen && smart_compare(pkt, dname, *prev_dname_first, *prev_dname_last) == 0 && type != LDNS_RR_TYPE_RRSIG) { /* same as previous */ *prev_dname_last = dname; return 1; } /* check if rrsig over previous item */ if(type == LDNS_RR_TYPE_RRSIG && dclass == *prev_dclass && pkt_rrsig_covered_equals(pkt, sldns_buffer_current(pkt), *prev_type) && smart_compare(pkt, dname, *prev_dname_first, *prev_dname_last) == 0) { /* covers previous */ *prev_dname_last = dname; return 1; } } /* find by hashing and lookup in hashtable */ *rrset_flags = pkt_rrset_flags(pkt, type, section); /* if rrsig - try to lookup matching data set first */ if(type == LDNS_RR_TYPE_RRSIG && pkt_rrsig_covered(pkt, sldns_buffer_current(pkt), &covtype)) { *hash = pkt_hash_rrset_rest(dname_h, covtype, dclass, *rrset_flags); *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, *rrset_flags, dname, dnamelen, covtype, dclass); if(!*rrset_prev && covtype == LDNS_RR_TYPE_NSEC) { /* if NSEC try with NSEC apex bit twiddled */ *rrset_flags ^= PACKED_RRSET_NSEC_AT_APEX; *hash = pkt_hash_rrset_rest(dname_h, covtype, dclass, *rrset_flags); *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, *rrset_flags, dname, dnamelen, covtype, dclass); if(!*rrset_prev) /* untwiddle if not found */ *rrset_flags ^= PACKED_RRSET_NSEC_AT_APEX; } if(!*rrset_prev && covtype == LDNS_RR_TYPE_SOA) { /* if SOA try with SOA neg flag twiddled */ *rrset_flags ^= PACKED_RRSET_SOA_NEG; *hash = pkt_hash_rrset_rest(dname_h, covtype, dclass, *rrset_flags); *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, *rrset_flags, dname, dnamelen, covtype, dclass); if(!*rrset_prev) /* untwiddle if not found */ *rrset_flags ^= PACKED_RRSET_SOA_NEG; } if(*rrset_prev) { *prev_dname_first = (*rrset_prev)->dname; *prev_dname_last = dname; *prev_dnamelen = dnamelen; *prev_type = covtype; *prev_dclass = dclass; return 1; } } if(type != LDNS_RR_TYPE_RRSIG) { int hasother = 0; /* find matching rrsig */ *hash = pkt_hash_rrset_rest(dname_h, LDNS_RR_TYPE_RRSIG, dclass, 0); *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, 0, dname, dnamelen, LDNS_RR_TYPE_RRSIG, dclass); if(*rrset_prev && rrset_has_sigover(pkt, *rrset_prev, type, &hasother)) { /* yes! */ *prev_dname_first = (*rrset_prev)->dname; *prev_dname_last = dname; *prev_dnamelen = dnamelen; *prev_type = type; *prev_dclass = dclass; *rrset_prev = change_rrsig_rrset(*rrset_prev, msg, pkt, type, *rrset_flags, hasother, section, region); if(!*rrset_prev) return 0; return 1; } } *hash = pkt_hash_rrset_rest(dname_h, type, dclass, *rrset_flags); *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, *rrset_flags, dname, dnamelen, type, dclass); if(*rrset_prev) *prev_dname_first = (*rrset_prev)->dname; else *prev_dname_first = dname; *prev_dname_last = dname; *prev_dnamelen = dnamelen; *prev_type = type; *prev_dclass = dclass; return 1; } /** * Parse query section. * @param pkt: packet, position at call must be at start of query section. * at end position is after query section. * @param msg: store results here. * @return: 0 if OK, or rcode on error. */ static int parse_query_section(sldns_buffer* pkt, struct msg_parse* msg) { if(msg->qdcount == 0) return 0; if(msg->qdcount > 1) return LDNS_RCODE_FORMERR; log_assert(msg->qdcount == 1); if(sldns_buffer_remaining(pkt) <= 0) return LDNS_RCODE_FORMERR; msg->qname = sldns_buffer_current(pkt); if((msg->qname_len = pkt_dname_len(pkt)) == 0) return LDNS_RCODE_FORMERR; if(sldns_buffer_remaining(pkt) < sizeof(uint16_t)*2) return LDNS_RCODE_FORMERR; msg->qtype = sldns_buffer_read_u16(pkt); msg->qclass = sldns_buffer_read_u16(pkt); return 0; } size_t get_rdf_size(sldns_rdf_type rdf) { switch(rdf) { case LDNS_RDF_TYPE_CLASS: case LDNS_RDF_TYPE_ALG: case LDNS_RDF_TYPE_INT8: return 1; break; case LDNS_RDF_TYPE_INT16: case LDNS_RDF_TYPE_TYPE: case LDNS_RDF_TYPE_CERT_ALG: return 2; break; case LDNS_RDF_TYPE_INT32: case LDNS_RDF_TYPE_TIME: case LDNS_RDF_TYPE_A: case LDNS_RDF_TYPE_PERIOD: return 4; break; case LDNS_RDF_TYPE_TSIGTIME: return 6; break; case LDNS_RDF_TYPE_AAAA: return 16; break; default: log_assert(0); /* add type above */ /* only types that appear before a domain * * name are needed. rest is simply copied. */ } return 0; } /** calculate the size of one rr */ static int calc_size(sldns_buffer* pkt, uint16_t type, struct rr_parse* rr) { const sldns_rr_descriptor* desc; uint16_t pkt_len; /* length of rr inside the packet */ rr->size = sizeof(uint16_t); /* the rdatalen */ sldns_buffer_skip(pkt, 4); /* skip ttl */ pkt_len = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < pkt_len) return 0; desc = sldns_rr_descript(type); if(pkt_len > 0 && desc && desc->_dname_count > 0) { int count = (int)desc->_dname_count; int rdf = 0; size_t len; size_t oldpos; /* skip first part. */ while(pkt_len > 0 && count) { switch(desc->_wireformat[rdf]) { case LDNS_RDF_TYPE_DNAME: /* decompress every domain name */ oldpos = sldns_buffer_position(pkt); if((len = pkt_dname_len(pkt)) == 0) return 0; /* malformed dname */ if(sldns_buffer_position(pkt)-oldpos > pkt_len) return 0; /* dname exceeds rdata */ pkt_len -= sldns_buffer_position(pkt)-oldpos; rr->size += len; count--; len = 0; break; case LDNS_RDF_TYPE_STR: if(pkt_len < 1) { /* NOTREACHED, due to 'while(>0)' */ return 0; /* len byte exceeds rdata */ } len = sldns_buffer_current(pkt)[0] + 1; break; default: len = get_rdf_size(desc->_wireformat[rdf]); } if(len) { if(pkt_len < len) return 0; /* exceeds rdata */ pkt_len -= len; sldns_buffer_skip(pkt, (ssize_t)len); rr->size += len; } rdf++; } } /* remaining rdata */ rr->size += pkt_len; sldns_buffer_skip(pkt, (ssize_t)pkt_len); return 1; } /** skip rr ttl and rdata */ static int skip_ttl_rdata(sldns_buffer* pkt) { uint16_t rdatalen; if(sldns_buffer_remaining(pkt) < 6) /* ttl + rdatalen */ return 0; sldns_buffer_skip(pkt, 4); /* ttl */ rdatalen = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rdatalen) return 0; sldns_buffer_skip(pkt, (ssize_t)rdatalen); return 1; } /** see if RRSIG is a duplicate of another */ static int sig_is_double(sldns_buffer* pkt, struct rrset_parse* rrset, uint8_t* ttldata) { uint16_t rlen, siglen; size_t pos = sldns_buffer_position(pkt); struct rr_parse* sig; if(sldns_buffer_remaining(pkt) < 6) return 0; sldns_buffer_skip(pkt, 4); /* ttl */ rlen = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rlen) { sldns_buffer_set_position(pkt, pos); return 0; } sldns_buffer_set_position(pkt, pos); sig = rrset->rrsig_first; while(sig) { /* check if rdatalen is same */ memmove(&siglen, sig->ttl_data+4, sizeof(siglen)); siglen = ntohs(siglen); /* checks if data in packet is exactly the same, this means * also dname in rdata is the same, but rrsig is not allowed * to have compressed dnames anyway. If it is compressed anyway * it will lead to duplicate rrs for qtype=RRSIG. (or ANY). * * Cannot use sig->size because size of the other one is not * calculated yet. */ if(siglen == rlen) { if(siglen>0 && memcmp(sig->ttl_data+6, ttldata+6, siglen) == 0) { /* same! */ return 1; } } sig = sig->next; } return 0; } /** Add rr (from packet here) to rrset, skips rr */ static int add_rr_to_rrset(struct rrset_parse* rrset, sldns_buffer* pkt, struct msg_parse* msg, struct regional* region, sldns_pkt_section section, uint16_t type) { struct rr_parse* rr; /* check section of rrset. */ if(rrset->section != section && type != LDNS_RR_TYPE_RRSIG && rrset->type != LDNS_RR_TYPE_RRSIG) { /* silently drop it - we drop the last part, since * trust in rr data depends on the section it is in. * the less trustworthy part is discarded. * also the last part is more likely to be incomplete. * RFC 2181: must put RRset only once in response. */ /* verbose(VERB_QUERY, "Packet contains rrset data in " "multiple sections, dropped last part."); log_buf(VERB_QUERY, "packet was", pkt); */ /* forwards */ if(!skip_ttl_rdata(pkt)) return LDNS_RCODE_FORMERR; return 0; } if( (msg->qtype == LDNS_RR_TYPE_RRSIG || msg->qtype == LDNS_RR_TYPE_ANY) && sig_is_double(pkt, rrset, sldns_buffer_current(pkt))) { if(!skip_ttl_rdata(pkt)) return LDNS_RCODE_FORMERR; return 0; } /* create rr */ if(!(rr = (struct rr_parse*)regional_alloc(region, sizeof(*rr)))) return LDNS_RCODE_SERVFAIL; rr->outside_packet = 0; rr->ttl_data = sldns_buffer_current(pkt); rr->next = 0; if(type == LDNS_RR_TYPE_RRSIG && rrset->type != LDNS_RR_TYPE_RRSIG) { if(rrset->rrsig_last) rrset->rrsig_last->next = rr; else rrset->rrsig_first = rr; rrset->rrsig_last = rr; rrset->rrsig_count++; } else { if(rrset->rr_last) rrset->rr_last->next = rr; else rrset->rr_first = rr; rrset->rr_last = rr; rrset->rr_count++; } /* calc decompressed size */ if(!calc_size(pkt, type, rr)) return LDNS_RCODE_FORMERR; rrset->size += rr->size; return 0; } /** * Parse packet RR section, for answer, authority and additional sections. * @param pkt: packet, position at call must be at start of section. * at end position is after section. * @param msg: store results here. * @param region: how to alloc results. * @param section: section enum. * @param num_rrs: how many rrs are in the section. * @param num_rrsets: returns number of rrsets in the section. * @return: 0 if OK, or rcode on error. */ static int parse_section(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region, sldns_pkt_section section, uint16_t num_rrs, size_t* num_rrsets) { uint16_t i; uint8_t* dname, *prev_dname_f = NULL, *prev_dname_l = NULL; size_t dnamelen, prev_dnamelen = 0; uint16_t type, prev_type = 0; uint16_t dclass, prev_dclass = 0; uint32_t rrset_flags = 0; hashvalue_type hash = 0; struct rrset_parse* rrset = NULL; int r; if(num_rrs == 0) return 0; if(sldns_buffer_remaining(pkt) <= 0) return LDNS_RCODE_FORMERR; for(i=0; i_name: "??", (int)type, sldns_rr_descript(t)? sldns_rr_descript(t)->_name: "??", (int)t); } else fprintf(stderr, "parse of %s(%d)", sldns_rr_descript(type)? sldns_rr_descript(type)->_name: "??", (int)type); fprintf(stderr, " %s(%d) ", sldns_lookup_by_id(sldns_rr_classes, (int)ntohs(dclass))?sldns_lookup_by_id( sldns_rr_classes, (int)ntohs(dclass))->name: "??", (int)ntohs(dclass)); dname_print(stderr, pkt, dname); fprintf(stderr, "\n"); } /* see if it is part of an existing RR set */ if(!find_rrset(msg, pkt, dname, dnamelen, type, dclass, &hash, &rrset_flags, &prev_dname_f, &prev_dname_l, &prev_dnamelen, &prev_type, &prev_dclass, &rrset, section, region)) return LDNS_RCODE_SERVFAIL; if(!rrset) { /* it is a new RR set. hash&flags already calculated.*/ (*num_rrsets)++; rrset = new_rrset(msg, dname, dnamelen, type, dclass, hash, rrset_flags, section, region); if(!rrset) return LDNS_RCODE_SERVFAIL; } else if(0) { fprintf(stderr, "is part of existing: "); dname_print(stderr, pkt, rrset->dname); fprintf(stderr, " type %s(%d)\n", sldns_rr_descript(rrset->type)? sldns_rr_descript(rrset->type)->_name: "??", (int)rrset->type); } /* add to rrset. */ if((r=add_rr_to_rrset(rrset, pkt, msg, region, section, type)) != 0) return r; } return 0; } int parse_packet(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region) { int ret; if(sldns_buffer_remaining(pkt) < LDNS_HEADER_SIZE) return LDNS_RCODE_FORMERR; /* read the header */ sldns_buffer_read(pkt, &msg->id, sizeof(uint16_t)); msg->flags = sldns_buffer_read_u16(pkt); msg->qdcount = sldns_buffer_read_u16(pkt); msg->ancount = sldns_buffer_read_u16(pkt); msg->nscount = sldns_buffer_read_u16(pkt); msg->arcount = sldns_buffer_read_u16(pkt); if(msg->qdcount > 1) return LDNS_RCODE_FORMERR; if((ret = parse_query_section(pkt, msg)) != 0) return ret; if((ret = parse_section(pkt, msg, region, LDNS_SECTION_ANSWER, msg->ancount, &msg->an_rrsets)) != 0) return ret; if((ret = parse_section(pkt, msg, region, LDNS_SECTION_AUTHORITY, msg->nscount, &msg->ns_rrsets)) != 0) return ret; if(sldns_buffer_remaining(pkt) == 0 && msg->arcount == 1) { /* BIND accepts leniently that an EDNS record is missing. * so, we do too. */ } else if((ret = parse_section(pkt, msg, region, LDNS_SECTION_ADDITIONAL, msg->arcount, &msg->ar_rrsets)) != 0) return ret; /* if(sldns_buffer_remaining(pkt) > 0) { */ /* there is spurious data at end of packet. ignore */ /* } */ msg->rrset_count = msg->an_rrsets + msg->ns_rrsets + msg->ar_rrsets; return 0; } /** parse EDNS options from EDNS wireformat rdata */ static int parse_edns_options(uint8_t* rdata_ptr, size_t rdata_len, struct edns_data* edns, struct regional* region) { /* while still more options, and have code+len to read */ /* ignores partial content (i.e. rdata len 3) */ while(rdata_len >= 4) { uint16_t opt_code = sldns_read_uint16(rdata_ptr); uint16_t opt_len = sldns_read_uint16(rdata_ptr+2); rdata_ptr += 4; rdata_len -= 4; if(opt_len > rdata_len) break; /* option code partial */ if(!edns_opt_append(edns, region, opt_code, opt_len, rdata_ptr)) { log_err("out of memory"); return 0; } rdata_ptr += opt_len; rdata_len -= opt_len; } return 1; } int parse_extract_edns(struct msg_parse* msg, struct edns_data* edns, struct regional* region) { struct rrset_parse* rrset = msg->rrset_first; struct rrset_parse* prev = 0; struct rrset_parse* found = 0; struct rrset_parse* found_prev = 0; size_t rdata_len; uint8_t* rdata_ptr; /* since the class encodes the UDP size, we cannot use hash table to * find the EDNS OPT record. Scan the packet. */ while(rrset) { if(rrset->type == LDNS_RR_TYPE_OPT) { /* only one OPT RR allowed. */ if(found) return LDNS_RCODE_FORMERR; /* found it! */ found_prev = prev; found = rrset; } prev = rrset; rrset = rrset->rrset_all_next; } if(!found) { memset(edns, 0, sizeof(*edns)); edns->udp_size = 512; return 0; } /* check the found RRset */ /* most lenient check possible. ignore dname, use last opt */ if(found->section != LDNS_SECTION_ADDITIONAL) return LDNS_RCODE_FORMERR; if(found->rr_count == 0) return LDNS_RCODE_FORMERR; if(0) { /* strict checking of dname and RRcount */ if(found->dname_len != 1 || !found->dname || found->dname[0] != 0) return LDNS_RCODE_FORMERR; if(found->rr_count != 1) return LDNS_RCODE_FORMERR; } log_assert(found->rr_first && found->rr_last); /* remove from packet */ if(found_prev) found_prev->rrset_all_next = found->rrset_all_next; else msg->rrset_first = found->rrset_all_next; if(found == msg->rrset_last) msg->rrset_last = found_prev; msg->arcount --; msg->ar_rrsets --; msg->rrset_count --; /* take the data ! */ edns->edns_present = 1; edns->ext_rcode = found->rr_last->ttl_data[0]; edns->edns_version = found->rr_last->ttl_data[1]; edns->bits = sldns_read_uint16(&found->rr_last->ttl_data[2]); edns->udp_size = ntohs(found->rrset_class); edns->opt_list = NULL; edns->padding_block_size = 0; /* take the options */ rdata_len = found->rr_first->size-2; rdata_ptr = found->rr_first->ttl_data+6; if(!parse_edns_options(rdata_ptr, rdata_len, edns, region)) return 0; /* ignore rrsigs */ return 0; } /** skip RR in packet */ static int skip_pkt_rr(sldns_buffer* pkt) { if(sldns_buffer_remaining(pkt) < 1) return 0; if(!pkt_dname_len(pkt)) return 0; if(sldns_buffer_remaining(pkt) < 4) return 0; sldns_buffer_skip(pkt, 4); /* type and class */ if(!skip_ttl_rdata(pkt)) return 0; return 1; } /** skip RRs from packet */ static int skip_pkt_rrs(sldns_buffer* pkt, int num) { int i; for(i=0; i 1) { return LDNS_RCODE_FORMERR; } if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) == 0) { edns->udp_size = 512; return 0; } /* domain name must be the root of length 1. */ if(pkt_dname_len(pkt) != 1) return LDNS_RCODE_FORMERR; if(sldns_buffer_remaining(pkt) < 10) /* type, class, ttl, rdatalen */ return LDNS_RCODE_FORMERR; if(sldns_buffer_read_u16(pkt) != LDNS_RR_TYPE_OPT) return LDNS_RCODE_FORMERR; edns->edns_present = 1; edns->udp_size = sldns_buffer_read_u16(pkt); /* class is udp size */ edns->ext_rcode = sldns_buffer_read_u8(pkt); /* ttl used for bits */ edns->edns_version = sldns_buffer_read_u8(pkt); edns->bits = sldns_buffer_read_u16(pkt); edns->opt_list = NULL; edns->padding_block_size = 0; /* take the options */ rdata_len = sldns_buffer_read_u16(pkt); if(sldns_buffer_remaining(pkt) < rdata_len) return LDNS_RCODE_FORMERR; rdata_ptr = sldns_buffer_current(pkt); if(!parse_edns_options(rdata_ptr, rdata_len, edns, region)) return LDNS_RCODE_SERVFAIL; /* ignore rrsigs */ return 0; } void log_edns_opt_list(enum verbosity_value level, const char* info_str, struct edns_option* list) { if(verbosity >= level && list) { char str[128], *s; size_t slen; verbose(level, "%s", info_str); while(list) { s = str; slen = sizeof(str); (void)sldns_wire2str_edns_option_print(&s, &slen, list->opt_code, list->opt_data, list->opt_len); verbose(level, " %s", str); list = list->next; } } } unbound-1.13.1/util/data/dname.c0000644000175000017500000004624614010434640016031 0ustar wouterwouter/* * util/data/dname.h - domain name handling * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains domain name handling functions. */ #include "config.h" #include #include "util/data/dname.h" #include "util/data/msgparse.h" #include "util/log.h" #include "util/storage/lookup3.h" #include "sldns/sbuffer.h" /* determine length of a dname in buffer, no compression pointers allowed */ size_t query_dname_len(sldns_buffer* query) { size_t len = 0; size_t labellen; while(1) { if(sldns_buffer_remaining(query) < 1) return 0; /* parse error, need label len */ labellen = sldns_buffer_read_u8(query); if(labellen&0xc0) return 0; /* no compression allowed in queries */ len += labellen + 1; if(len > LDNS_MAX_DOMAINLEN) return 0; /* too long */ if(labellen == 0) return len; if(sldns_buffer_remaining(query) < labellen) return 0; /* parse error, need content */ sldns_buffer_skip(query, (ssize_t)labellen); } } size_t dname_valid(uint8_t* dname, size_t maxlen) { size_t len = 0; size_t labellen; if(maxlen == 0) return 0; /* too short, shortest is '0' root label */ labellen = *dname++; while(labellen) { if(labellen&0xc0) return 0; /* no compression ptrs allowed */ len += labellen + 1; if(len >= LDNS_MAX_DOMAINLEN) return 0; /* too long */ if(len > maxlen) return 0; /* does not fit in memory allocation */ dname += labellen; labellen = *dname++; } len += 1; if(len > maxlen) return 0; /* does not fit in memory allocation */ return len; } /** compare uncompressed, noncanonical, registers are hints for speed */ int query_dname_compare(register uint8_t* d1, register uint8_t* d2) { register uint8_t lab1, lab2; log_assert(d1 && d2); lab1 = *d1++; lab2 = *d2++; while( lab1 != 0 || lab2 != 0 ) { /* compare label length */ /* if one dname ends, it has labellength 0 */ if(lab1 != lab2) { if(lab1 < lab2) return -1; return 1; } log_assert(lab1 == lab2 && lab1 != 0); /* compare lowercased labels. */ while(lab1--) { /* compare bytes first for speed */ if(*d1 != *d2 && tolower((unsigned char)*d1) != tolower((unsigned char)*d2)) { if(tolower((unsigned char)*d1) < tolower((unsigned char)*d2)) return -1; return 1; } d1++; d2++; } /* next pair of labels. */ lab1 = *d1++; lab2 = *d2++; } return 0; } void query_dname_tolower(uint8_t* dname) { /* the dname is stored uncompressed */ uint8_t labellen; labellen = *dname; while(labellen) { dname++; while(labellen--) { *dname = (uint8_t)tolower((unsigned char)*dname); dname++; } labellen = *dname; } } void pkt_dname_tolower(sldns_buffer* pkt, uint8_t* dname) { uint8_t lablen; int count = 0; if(dname >= sldns_buffer_end(pkt)) return; lablen = *dname++; while(lablen) { if(LABEL_IS_PTR(lablen)) { if((size_t)PTR_OFFSET(lablen, *dname) >= sldns_buffer_limit(pkt)) return; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; if(count++ > MAX_COMPRESS_PTRS) return; continue; } if(dname+lablen >= sldns_buffer_end(pkt)) return; while(lablen--) { *dname = (uint8_t)tolower((unsigned char)*dname); dname++; } if(dname >= sldns_buffer_end(pkt)) return; lablen = *dname++; } } size_t pkt_dname_len(sldns_buffer* pkt) { size_t len = 0; int ptrcount = 0; uint8_t labellen; size_t endpos = 0; /* read dname and determine length */ /* check compression pointers, loops, out of bounds */ while(1) { /* read next label */ if(sldns_buffer_remaining(pkt) < 1) return 0; labellen = sldns_buffer_read_u8(pkt); if(LABEL_IS_PTR(labellen)) { /* compression ptr */ uint16_t ptr; if(sldns_buffer_remaining(pkt) < 1) return 0; ptr = PTR_OFFSET(labellen, sldns_buffer_read_u8(pkt)); if(ptrcount++ > MAX_COMPRESS_PTRS) return 0; /* loop! */ if(sldns_buffer_limit(pkt) <= ptr) return 0; /* out of bounds! */ if(!endpos) endpos = sldns_buffer_position(pkt); sldns_buffer_set_position(pkt, ptr); } else { /* label contents */ if(labellen > 0x3f) return 0; /* label too long */ len += 1 + labellen; if(len > LDNS_MAX_DOMAINLEN) return 0; if(labellen == 0) { /* end of dname */ break; } if(sldns_buffer_remaining(pkt) < labellen) return 0; sldns_buffer_skip(pkt, (ssize_t)labellen); } } if(endpos) sldns_buffer_set_position(pkt, endpos); return len; } int dname_pkt_compare(sldns_buffer* pkt, uint8_t* d1, uint8_t* d2) { uint8_t len1, len2; int count1 = 0, count2 = 0; log_assert(pkt && d1 && d2); len1 = *d1++; len2 = *d2++; while( len1 != 0 || len2 != 0 ) { /* resolve ptrs */ if(LABEL_IS_PTR(len1)) { if((size_t)PTR_OFFSET(len1, *d1) >= sldns_buffer_limit(pkt)) return -1; if(count1++ > MAX_COMPRESS_PTRS) return -1; d1 = sldns_buffer_at(pkt, PTR_OFFSET(len1, *d1)); len1 = *d1++; continue; } if(LABEL_IS_PTR(len2)) { if((size_t)PTR_OFFSET(len2, *d2) >= sldns_buffer_limit(pkt)) return 1; if(count2++ > MAX_COMPRESS_PTRS) return 1; d2 = sldns_buffer_at(pkt, PTR_OFFSET(len2, *d2)); len2 = *d2++; continue; } /* check label length */ log_assert(len1 <= LDNS_MAX_LABELLEN); log_assert(len2 <= LDNS_MAX_LABELLEN); if(len1 != len2) { if(len1 < len2) return -1; return 1; } log_assert(len1 == len2 && len1 != 0); /* compare labels */ while(len1--) { if(tolower((unsigned char)*d1) != tolower((unsigned char)*d2)) { if(tolower((unsigned char)*d1) < tolower((unsigned char)*d2)) return -1; return 1; } d1++; d2++; } len1 = *d1++; len2 = *d2++; } return 0; } hashvalue_type dname_query_hash(uint8_t* dname, hashvalue_type h) { uint8_t labuf[LDNS_MAX_LABELLEN+1]; uint8_t lablen; int i; /* preserve case of query, make hash label by label */ lablen = *dname++; while(lablen) { log_assert(lablen <= LDNS_MAX_LABELLEN); labuf[0] = lablen; i=0; while(lablen--) { labuf[++i] = (uint8_t)tolower((unsigned char)*dname); dname++; } h = hashlittle(labuf, labuf[0] + 1, h); lablen = *dname++; } return h; } hashvalue_type dname_pkt_hash(sldns_buffer* pkt, uint8_t* dname, hashvalue_type h) { uint8_t labuf[LDNS_MAX_LABELLEN+1]; uint8_t lablen; int i; int count = 0; /* preserve case of query, make hash label by label */ lablen = *dname++; while(lablen) { if(LABEL_IS_PTR(lablen)) { /* follow pointer */ if((size_t)PTR_OFFSET(lablen, *dname) >= sldns_buffer_limit(pkt)) return h; if(count++ > MAX_COMPRESS_PTRS) return h; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; } log_assert(lablen <= LDNS_MAX_LABELLEN); labuf[0] = lablen; i=0; while(lablen--) { labuf[++i] = (uint8_t)tolower((unsigned char)*dname); dname++; } h = hashlittle(labuf, labuf[0] + 1, h); lablen = *dname++; } return h; } void dname_pkt_copy(sldns_buffer* pkt, uint8_t* to, uint8_t* dname) { /* copy over the dname and decompress it at the same time */ size_t comprcount = 0; size_t len = 0; uint8_t lablen; lablen = *dname++; while(lablen) { if(LABEL_IS_PTR(lablen)) { if(comprcount++ > MAX_COMPRESS_PTRS) { /* too many compression pointers */ *to = 0; /* end the result prematurely */ return; } /* follow pointer */ if((size_t)PTR_OFFSET(lablen, *dname) >= sldns_buffer_limit(pkt)) return; dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; } if(lablen > LDNS_MAX_LABELLEN) { *to = 0; /* end the result prematurely */ return; } log_assert(lablen <= LDNS_MAX_LABELLEN); len += (size_t)lablen+1; if(len >= LDNS_MAX_DOMAINLEN) { *to = 0; /* end the result prematurely */ log_err("bad dname in dname_pkt_copy"); return; } *to++ = lablen; memmove(to, dname, lablen); dname += lablen; to += lablen; lablen = *dname++; } /* copy last \0 */ *to = 0; } void dname_print(FILE* out, struct sldns_buffer* pkt, uint8_t* dname) { uint8_t lablen; int count = 0; if(!out) out = stdout; if(!dname) return; lablen = *dname++; if(!lablen) fputc('.', out); while(lablen) { if(LABEL_IS_PTR(lablen)) { /* follow pointer */ if(!pkt) { fputs("??compressionptr??", out); return; } if((size_t)PTR_OFFSET(lablen, *dname) >= sldns_buffer_limit(pkt)) { fputs("??compressionptr??", out); return; } if(count++ > MAX_COMPRESS_PTRS) { fputs("??compressionptr??", out); return; } dname = sldns_buffer_at(pkt, PTR_OFFSET(lablen, *dname)); lablen = *dname++; continue; } if(lablen > LDNS_MAX_LABELLEN) { fputs("??extendedlabel??", out); return; } while(lablen--) fputc((int)*dname++, out); fputc('.', out); lablen = *dname++; } } int dname_count_labels(uint8_t* dname) { uint8_t lablen; int labs = 1; lablen = *dname++; while(lablen) { labs++; dname += lablen; lablen = *dname++; } return labs; } int dname_count_size_labels(uint8_t* dname, size_t* size) { uint8_t lablen; int labs = 1; size_t sz = 1; lablen = *dname++; while(lablen) { labs++; sz += lablen+1; dname += lablen; lablen = *dname++; } *size = sz; return labs; } /** * Compare labels in memory, lowercase while comparing. * @param p1: label 1 * @param p2: label 2 * @param len: number of bytes to compare. * @return: 0, -1, +1 comparison result. */ static int memlowercmp(uint8_t* p1, uint8_t* p2, uint8_t len) { while(len--) { if(*p1 != *p2 && tolower((unsigned char)*p1) != tolower((unsigned char)*p2)) { if(tolower((unsigned char)*p1) < tolower((unsigned char)*p2)) return -1; return 1; } p1++; p2++; } return 0; } int dname_lab_cmp(uint8_t* d1, int labs1, uint8_t* d2, int labs2, int* mlabs) { uint8_t len1, len2; int atlabel = labs1; int lastmlabs; int lastdiff = 0; /* first skip so that we compare same label. */ if(labs1 > labs2) { while(atlabel > labs2) { len1 = *d1++; d1 += len1; atlabel--; } log_assert(atlabel == labs2); } else if(labs1 < labs2) { atlabel = labs2; while(atlabel > labs1) { len2 = *d2++; d2 += len2; atlabel--; } log_assert(atlabel == labs1); } lastmlabs = atlabel+1; /* now at same label in d1 and d2, atlabel */ /* www.example.com. */ /* 4 3 2 1 atlabel number */ /* repeat until at root label (which is always the same) */ while(atlabel > 1) { len1 = *d1++; len2 = *d2++; if(len1 != len2) { log_assert(len1 != 0 && len2 != 0); if(len1 com. */ if(labs1 > labs2) return 1; else if(labs1 < labs2) return -1; } return lastdiff; } int dname_lab_startswith(uint8_t* label, char* prefix, char** endptr) { size_t plen = strlen(prefix); size_t orig_plen = plen; size_t lablen = (size_t)*label; if(plen > lablen) return 0; label++; while(plen--) { if(*prefix != tolower((unsigned char)*label)) { return 0; } prefix++; label++; } if(orig_plen < lablen) *endptr = (char *)label; else /* prefix length == label length */ *endptr = NULL; return 1; } int dname_has_label(uint8_t* dname, size_t dnamelen, uint8_t* label) { size_t len; /* 1 byte needed for the label length */ if(dnamelen < 1) return 0; len = *dname; while(len <= dnamelen) { if(!(*dname)) { if(*dname == *label) return 1; /* empty label match */ /* termination label found, stop iterating */ return 0; } if(*dname == *label && *label && memlowercmp(dname+1, label+1, *dname) == 0) return 1; len += *dname; dname += *dname; dname++; len++; } return 0; } int dname_buffer_write(sldns_buffer* pkt, uint8_t* dname) { uint8_t lablen; if(sldns_buffer_remaining(pkt) < 1) return 0; lablen = *dname++; sldns_buffer_write_u8(pkt, lablen); while(lablen) { if(sldns_buffer_remaining(pkt) < (size_t)lablen+1) return 0; sldns_buffer_write(pkt, dname, lablen); dname += lablen; lablen = *dname++; sldns_buffer_write_u8(pkt, lablen); } return 1; } void dname_str(uint8_t* dname, char* str) { size_t len = 0; uint8_t lablen = 0; char* s = str; if(!dname || !*dname) { *s++ = '.'; *s = 0; return; } lablen = *dname++; while(lablen) { if(lablen > LDNS_MAX_LABELLEN) { *s++ = '#'; *s = 0; return; } len += lablen+1; if(len >= LDNS_MAX_DOMAINLEN-1) { *s++ = '&'; *s = 0; return; } while(lablen--) { if(isalnum((unsigned char)*dname) || *dname == '-' || *dname == '_' || *dname == '*') *s++ = *(char*)dname++; else { *s++ = '?'; dname++; } } *s++ = '.'; lablen = *dname++; } *s = 0; } int dname_strict_subdomain(uint8_t* d1, int labs1, uint8_t* d2, int labs2) { int m; /* check subdomain: d1: www.example.com. and d2: example.com. */ if(labs2 >= labs1) return 0; if(dname_lab_cmp(d1, labs1, d2, labs2, &m) > 0) { /* subdomain if all labels match */ return (m == labs2); } return 0; } int dname_strict_subdomain_c(uint8_t* d1, uint8_t* d2) { return dname_strict_subdomain(d1, dname_count_labels(d1), d2, dname_count_labels(d2)); } int dname_subdomain_c(uint8_t* d1, uint8_t* d2) { int m; /* check subdomain: d1: www.example.com. and d2: example.com. */ /* or d1: example.com. and d2: example.com. */ int labs1 = dname_count_labels(d1); int labs2 = dname_count_labels(d2); if(labs2 > labs1) return 0; if(dname_lab_cmp(d1, labs1, d2, labs2, &m) < 0) { /* must have been example.com , www.example.com - wrong */ /* or otherwise different dnames */ return 0; } return (m == labs2); } int dname_is_root(uint8_t* dname) { uint8_t len; log_assert(dname); len = dname[0]; log_assert(!LABEL_IS_PTR(len)); return (len == 0); } void dname_remove_label(uint8_t** dname, size_t* len) { size_t lablen; log_assert(dname && *dname && len); lablen = (*dname)[0]; log_assert(!LABEL_IS_PTR(lablen)); log_assert(*len > lablen); if(lablen == 0) return; /* do not modify root label */ *len -= lablen+1; *dname += lablen+1; } void dname_remove_labels(uint8_t** dname, size_t* len, int n) { int i; for(i=0; i len2) return 1; return 0; } int dname_canon_lab_cmp(uint8_t* d1, int labs1, uint8_t* d2, int labs2, int* mlabs) { /* like dname_lab_cmp, but with different label comparison, * empty character sorts before \000. * So ylyly is before z. */ uint8_t len1, len2; int atlabel = labs1; int lastmlabs; int lastdiff = 0; int c; /* first skip so that we compare same label. */ if(labs1 > labs2) { while(atlabel > labs2) { len1 = *d1++; d1 += len1; atlabel--; } log_assert(atlabel == labs2); } else if(labs1 < labs2) { atlabel = labs2; while(atlabel > labs1) { len2 = *d2++; d2 += len2; atlabel--; } log_assert(atlabel == labs1); } lastmlabs = atlabel+1; /* now at same label in d1 and d2, atlabel */ /* www.example.com. */ /* 4 3 2 1 atlabel number */ /* repeat until at root label (which is always the same) */ while(atlabel > 1) { len1 = *d1++; len2 = *d2++; if((c=memcanoncmp(d1, len1, d2, len2)) != 0) { if(c<0) lastdiff = -1; else lastdiff = 1; lastmlabs = atlabel; } d1 += len1; d2 += len2; atlabel--; } /* last difference atlabel number, so number of labels matching, * at the right side, is one less. */ *mlabs = lastmlabs-1; if(lastdiff == 0) { /* all labels compared were equal, check if one has more * labels, so that example.com. > com. */ if(labs1 > labs2) return 1; else if(labs1 < labs2) return -1; } return lastdiff; } int dname_canonical_compare(uint8_t* d1, uint8_t* d2) { int labs1, labs2, m; labs1 = dname_count_labels(d1); labs2 = dname_count_labels(d2); return dname_canon_lab_cmp(d1, labs1, d2, labs2, &m); } uint8_t* dname_get_shared_topdomain(uint8_t* d1, uint8_t* d2) { int labs1, labs2, m; size_t len = LDNS_MAX_DOMAINLEN; labs1 = dname_count_labels(d1); labs2 = dname_count_labels(d2); (void)dname_lab_cmp(d1, labs1, d2, labs2, &m); dname_remove_labels(&d1, &len, labs1-m); return d1; } unbound-1.13.1/util/shm_side/0000755000175000017500000000000014010434640015447 5ustar wouterwouterunbound-1.13.1/util/shm_side/shm_main.h0000644000175000017500000000450614010434640017420 0ustar wouterwouter/* * util/shm_side/shm_main.h - control the shared memory for unbound. * * Copyright (c) 2007, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for the SHM side. */ #ifndef UTIL_SHM_SIDE_MAIN_H #define UTIL_SHM_SIDE_MAIN_H struct daemon; struct worker; /* get struct ub_shm_stat_info */ #include "libunbound/unbound.h" /** * The SHM info. */ struct shm_main_info { /** stats_info array, shared memory segment. * [0] is totals, [1..thread_num] are per-thread stats */ struct ub_stats_info* ptr_arr; /** the global stats block, shared memory segment */ struct ub_shm_stat_info* ptr_ctl; int key; int id_ctl; int id_arr; }; int shm_main_init(struct daemon* daemon); void shm_main_shutdown(struct daemon* daemon); void shm_main_run(struct worker *worker); #endif /* UTIL_SHM_SIDE_MAIN_H */ unbound-1.13.1/util/shm_side/shm_main.c0000644000175000017500000002205314010434640017410 0ustar wouterwouter/* * util/shm_side/shm_main.c - SHM for statistics transport * * Copyright (c) 2017, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains functions for the SHM implementation. */ #include "config.h" #include #include #ifdef HAVE_SYS_IPC_H #include #endif #ifdef HAVE_SYS_SHM_H #include #endif #include #include #include "shm_main.h" #include "daemon/daemon.h" #include "daemon/worker.h" #include "daemon/stats.h" #include "services/mesh.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" #include "validator/validator.h" #include "util/config_file.h" #include "util/fptr_wlist.h" #include "util/log.h" #ifdef HAVE_SHMGET /** subtract timers and the values do not overflow or become negative */ static void stat_timeval_subtract(long long *d_sec, long long *d_usec, const struct timeval* end, const struct timeval* start) { #ifndef S_SPLINT_S time_t end_usec = end->tv_usec; *d_sec = end->tv_sec - start->tv_sec; if(end_usec < start->tv_usec) { end_usec += 1000000; (*d_sec)--; } *d_usec = end_usec - start->tv_usec; #endif } #endif /* HAVE_SHMGET */ int shm_main_init(struct daemon* daemon) { #ifdef HAVE_SHMGET struct ub_shm_stat_info *shm_stat; size_t shm_size; /* sanitize */ if(!daemon) return 0; if(!daemon->cfg->shm_enable) return 1; if(daemon->cfg->stat_interval == 0) log_warn("shm-enable is yes but statistics-interval is 0"); /* Statistics to maintain the number of thread + total */ shm_size = (sizeof(struct ub_stats_info) * (daemon->num + 1)); /* Allocation of needed memory */ daemon->shm_info = (struct shm_main_info*)calloc(1, shm_size); /* Sanitize */ if(!daemon->shm_info) { log_err("shm fail: malloc failure"); return 0; } daemon->shm_info->key = daemon->cfg->shm_key; /* Check for previous create SHM */ daemon->shm_info->id_ctl = shmget(daemon->shm_info->key, sizeof(int), SHM_R); daemon->shm_info->id_arr = shmget(daemon->shm_info->key + 1, sizeof(int), SHM_R); /* Destroy previous SHM */ if (daemon->shm_info->id_ctl >= 0) shmctl(daemon->shm_info->id_ctl, IPC_RMID, NULL); /* Destroy previous SHM */ if (daemon->shm_info->id_arr >= 0) shmctl(daemon->shm_info->id_arr, IPC_RMID, NULL); /* SHM: Create the segment */ daemon->shm_info->id_ctl = shmget(daemon->shm_info->key, sizeof(struct ub_shm_stat_info), IPC_CREAT | 0644); if (daemon->shm_info->id_ctl < 0) { log_err("SHM failed(id_ctl) cannot shmget(key %d) %s", daemon->shm_info->key, strerror(errno)); /* Just release memory unused */ free(daemon->shm_info); return 0; } daemon->shm_info->id_arr = shmget(daemon->shm_info->key + 1, shm_size, IPC_CREAT | 0644); if (daemon->shm_info->id_arr < 0) { log_err("SHM failed(id_arr) cannot shmget(key %d + 1) %s", daemon->shm_info->key, strerror(errno)); /* Just release memory unused */ free(daemon->shm_info); return 0; } /* SHM: attach the segment */ daemon->shm_info->ptr_ctl = (struct ub_shm_stat_info*) shmat(daemon->shm_info->id_ctl, NULL, 0); if(daemon->shm_info->ptr_ctl == (void *) -1) { log_err("SHM failed(ctl) cannot shmat(%d) %s", daemon->shm_info->id_ctl, strerror(errno)); /* Just release memory unused */ free(daemon->shm_info); return 0; } daemon->shm_info->ptr_arr = (struct ub_stats_info*) shmat(daemon->shm_info->id_arr, NULL, 0); if (daemon->shm_info->ptr_arr == (void *) -1) { log_err("SHM failed(arr) cannot shmat(%d) %s", daemon->shm_info->id_arr, strerror(errno)); /* Just release memory unused */ free(daemon->shm_info); return 0; } /* Zero fill SHM to stand clean while is not filled by other events */ memset(daemon->shm_info->ptr_ctl, 0, sizeof(struct ub_shm_stat_info)); memset(daemon->shm_info->ptr_arr, 0, shm_size); shm_stat = daemon->shm_info->ptr_ctl; shm_stat->num_threads = daemon->num; #else (void)daemon; #endif /* HAVE_SHMGET */ return 1; } void shm_main_shutdown(struct daemon* daemon) { #ifdef HAVE_SHMGET /* web are OK, just disabled */ if(!daemon->cfg->shm_enable) return; verbose(VERB_DETAIL, "SHM shutdown - KEY [%d] - ID CTL [%d] ARR [%d] - PTR CTL [%p] ARR [%p]", daemon->shm_info->key, daemon->shm_info->id_ctl, daemon->shm_info->id_arr, daemon->shm_info->ptr_ctl, daemon->shm_info->ptr_arr); /* Destroy previous SHM */ if (daemon->shm_info->id_ctl >= 0) shmctl(daemon->shm_info->id_ctl, IPC_RMID, NULL); if (daemon->shm_info->id_arr >= 0) shmctl(daemon->shm_info->id_arr, IPC_RMID, NULL); if (daemon->shm_info->ptr_ctl) shmdt(daemon->shm_info->ptr_ctl); if (daemon->shm_info->ptr_arr) shmdt(daemon->shm_info->ptr_arr); #else (void)daemon; #endif /* HAVE_SHMGET */ } void shm_main_run(struct worker *worker) { #ifdef HAVE_SHMGET struct ub_shm_stat_info *shm_stat; struct ub_stats_info *stat_total; struct ub_stats_info *stat_info; int offset; #ifndef S_SPLINT_S verbose(VERB_DETAIL, "SHM run - worker [%d] - daemon [%p] - timenow(%u) - timeboot(%u)", worker->thread_num, worker->daemon, (unsigned)worker->env.now_tv->tv_sec, (unsigned)worker->daemon->time_boot.tv_sec); #endif offset = worker->thread_num + 1; stat_total = worker->daemon->shm_info->ptr_arr; stat_info = worker->daemon->shm_info->ptr_arr + offset; /* Copy data to the current position */ server_stats_compile(worker, stat_info, 0); /* First thread, zero fill total, and copy general info */ if (worker->thread_num == 0) { /* Copy data to the current position */ memset(stat_total, 0, sizeof(struct ub_stats_info)); /* Point to data into SHM */ #ifndef S_SPLINT_S shm_stat = worker->daemon->shm_info->ptr_ctl; shm_stat->time.now_sec = (long long)worker->env.now_tv->tv_sec; shm_stat->time.now_usec = (long long)worker->env.now_tv->tv_usec; #endif stat_timeval_subtract(&shm_stat->time.up_sec, &shm_stat->time.up_usec, worker->env.now_tv, &worker->daemon->time_boot); stat_timeval_subtract(&shm_stat->time.elapsed_sec, &shm_stat->time.elapsed_usec, worker->env.now_tv, &worker->daemon->time_last_stat); shm_stat->mem.msg = (long long)slabhash_get_mem(worker->env.msg_cache); shm_stat->mem.rrset = (long long)slabhash_get_mem(&worker->env.rrset_cache->table); shm_stat->mem.dnscrypt_shared_secret = 0; #ifdef USE_DNSCRYPT if(worker->daemon->dnscenv) { shm_stat->mem.dnscrypt_shared_secret = (long long)slabhash_get_mem( worker->daemon->dnscenv->shared_secrets_cache); shm_stat->mem.dnscrypt_nonce = (long long)slabhash_get_mem( worker->daemon->dnscenv->nonces_cache); } #endif shm_stat->mem.val = (long long)mod_get_mem(&worker->env, "validator"); shm_stat->mem.iter = (long long)mod_get_mem(&worker->env, "iterator"); shm_stat->mem.respip = (long long)mod_get_mem(&worker->env, "respip"); /* subnet mem value is available in shm, also when not enabled, * to make the struct easier to memmap by other applications, * independent of the configuration of unbound */ shm_stat->mem.subnet = 0; #ifdef CLIENT_SUBNET shm_stat->mem.subnet = (long long)mod_get_mem(&worker->env, "subnet"); #endif /* ipsecmod mem value is available in shm, also when not enabled, * to make the struct easier to memmap by other applications, * independent of the configuration of unbound */ shm_stat->mem.ipsecmod = 0; #ifdef USE_IPSECMOD shm_stat->mem.ipsecmod = (long long)mod_get_mem(&worker->env, "ipsecmod"); #endif #ifdef WITH_DYNLIBMODULE shm_stat->mem.dynlib = (long long)mod_get_mem(&worker->env, "dynlib"); #endif } server_stats_add(stat_total, stat_info); /* print the thread statistics */ stat_total->mesh_time_median /= (double)worker->daemon->num; #else (void)worker; #endif /* HAVE_SHMGET */ } unbound-1.13.1/util/winsock_event.h0000644000175000017500000002427714010434640016717 0ustar wouterwouter/* * util/winsock_event.h - unbound event handling for winsock on windows * * Copyright (c) 2008, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains interface functions with the WinSock2 API on Windows. * It uses the winsock WSAWaitForMultipleEvents interface on a number of * sockets. * * Note that windows can only wait for max 64 events at one time. * * Also, file descriptors cannot be waited for. * * Named pipes are not easily available (and are not usable in select() ). * For interprocess communication, it is possible to wait for a hEvent to * be signaled by another thread. * * When a socket becomes readable, then it will not be flagged as * readable again until you have gotten WOULDBLOCK from a recv routine. * That means the event handler must store the readability (edge notify) * and process the incoming data until it blocks. * The function performing recv then has to inform the event handler that * the socket has blocked, and the event handler can mark it as such. * Thus, this file transforms the edge notify from windows to a level notify * that is compatible with UNIX. * The WSAEventSelect page says that it does do level notify, as long * as you call a recv/write/accept at least once when it is signalled. * This last bit is not true, even though documented in server2008 api docs * from microsoft, it does not happen at all. Instead you have to test for * WSAEWOULDBLOCK on a tcp stream, and only then retest the socket. * And before that remember the previous result as still valid. * * To stay 'fair', instead of emptying a socket completely, the event handler * can test the other (marked as blocking) sockets for new events. * * Additionally, TCP accept sockets get special event support. * * Socket numbers are not starting small, they can be any number (say 33060). * Therefore, bitmaps are not used, but arrays. * * on winsock, you must use recv() and send() for TCP reads and writes, * not read() and write(), those work only on files. * * Also fseek and fseeko do not work if a FILE is not fopen-ed in binary mode. * * When under a high load windows gives out lots of errors, from recvfrom * on udp sockets for example (WSAECONNRESET). Even though the udp socket * has no connection per se. */ #ifndef UTIL_WINSOCK_EVENT_H #define UTIL_WINSOCK_EVENT_H #ifdef USE_WINSOCK #ifndef HAVE_EVENT_BASE_FREE #define HAVE_EVENT_BASE_FREE #endif /* redefine the calls to different names so that there is no name * collision with other code that uses libevent names. (that uses libunbound)*/ #define event_init winsockevent_init #define event_get_version winsockevent_get_version #define event_get_method winsockevent_get_method #define event_base_dispatch winsockevent_base_dispatch #define event_base_loopexit winsockevent_base_loopexit #define event_base_free winsockevent_base_free #define event_set winsockevent_set #define event_base_set winsockevent_base_set #define event_add winsockevent_add #define event_del winsockevent_del #define signal_add winsocksignal_add #define signal_del winsocksignal_del /** event timeout */ #define EV_TIMEOUT 0x01 /** event fd readable */ #define EV_READ 0x02 /** event fd writable */ #define EV_WRITE 0x04 /** event signal */ #define EV_SIGNAL 0x08 /** event must persist */ #define EV_PERSIST 0x10 /* needs our redblack tree */ #include "rbtree.h" /** max number of signals to support */ #define MAX_SIG 32 /** The number of items that the winsock event handler can service. * Windows cannot handle more anyway */ #define WSK_MAX_ITEMS 64 /** * event base for winsock event handler */ struct event_base { /** sorted by timeout (absolute), ptr */ rbtree_type* times; /** array (first part in use) of handles to work on */ struct event** items; /** number of items in use in array */ int max; /** capacity of array, size of array in items */ int cap; /** array of 0 - maxsig of ptr to event for it */ struct event** signals; /** if we need to exit */ int need_to_exit; /** where to store time in seconds */ time_t* time_secs; /** where to store time in microseconds */ struct timeval* time_tv; /** * TCP streams have sticky events to them, these are not * reported by the windows event system anymore, we have to * keep reporting those events as present until wouldblock() is * signalled by the handler back to use. */ int tcp_stickies; /** * should next cycle process reinvigorated stickies, * these are stickies that have been stored, but due to a new * event_add a sudden interest in the event has incepted. */ int tcp_reinvigorated; /** The list of events that is currently being processed. */ WSAEVENT waitfor[WSK_MAX_ITEMS]; }; /** * Event structure. Has some of the event elements. */ struct event { /** node in timeout rbtree */ rbnode_type node; /** is event already added */ int added; /** event base it belongs to */ struct event_base *ev_base; /** fd to poll or -1 for timeouts. signal number for sigs. */ int ev_fd; /** what events this event is interested in, see EV_.. above. */ short ev_events; /** timeout value */ struct timeval ev_timeout; /** callback to call: fd, eventbits, userarg */ void (*ev_callback)(int, short, void *); /** callback user arg */ void *ev_arg; /* ----- nonpublic part, for winsock_event only ----- */ /** index of this event in the items array (if added) */ int idx; /** the event handle to wait for new events to become ready */ WSAEVENT hEvent; /** true if this filedes is a TCP socket and needs special attention */ int is_tcp; /** remembered EV_ values */ short old_events; /** should remembered EV_ values be used for TCP streams. * Reset after WOULDBLOCK is signaled using the function. */ int stick_events; /** true if this event is a signaling WSAEvent by the user. * User created and user closed WSAEvent. Only signaled/unsignaled, * no read/write/distinctions needed. */ int is_signal; /** used during callbacks to see which events were just checked */ int just_checked; }; /** create event base */ void *event_init(time_t* time_secs, struct timeval* time_tv); /** get version */ const char *event_get_version(void); /** get polling method (select,epoll) */ const char *event_get_method(void); /** run select in a loop */ int event_base_dispatch(struct event_base *); /** exit that loop */ int event_base_loopexit(struct event_base *, struct timeval *); /** free event base. Free events yourself */ void event_base_free(struct event_base *); /** set content of event */ void event_set(struct event *, int, short, void (*)(int, short, void *), void *); /** add event to a base. You *must* call this for every event. */ int event_base_set(struct event_base *, struct event *); /** add event to make it active. You may not change it with event_set anymore */ int event_add(struct event *, struct timeval *); /** remove event. You may change it again */ int event_del(struct event *); #define evtimer_add(ev, tv) event_add(ev, tv) #define evtimer_del(ev) event_del(ev) /* uses different implementation. Cannot mix fd/timeouts and signals inside * the same struct event. create several event structs for that. */ /** install signal handler */ int signal_add(struct event *, struct timeval *); /** set signal event contents */ #define signal_set(ev, x, cb, arg) \ event_set(ev, x, EV_SIGNAL|EV_PERSIST, cb, arg) /** remove signal handler */ int signal_del(struct event *); /** compare events in tree, based on timevalue, ptr for uniqueness */ int mini_ev_cmp(const void* a, const void* b); /** * Routine for windows only, where the handling layer can signal that * a TCP stream encountered WSAEWOULDBLOCK for a stream and thus needs * retesting the event. * Pass if EV_READ or EV_WRITE gave wouldblock. */ void winsock_tcp_wouldblock(struct event* ev, int eventbit); /** * Routine for windows only. where you pass a signal WSAEvent that * you wait for. When the event is signaled, the callback gets called. * The callback has to WSAResetEvent to disable the signal. * @param base: the event base. * @param ev: the event structure for data storage * can be passed uninitialised. * @param wsaevent: the WSAEvent that gets signaled. * @param cb: callback routine. * @param arg: user argument to callback routine. * @return false on error. */ int winsock_register_wsaevent(struct event_base* base, struct event* ev, WSAEVENT wsaevent, void (*cb)(int, short, void*), void* arg); /** * Unregister a wsaevent. User has to close the WSAEVENT itself. * @param ev: event data storage. */ void winsock_unregister_wsaevent(struct event* ev); #endif /* USE_WINSOCK */ #endif /* UTIL_WINSOCK_EVENT_H */ unbound-1.13.1/cachedb/0000755000175000017500000000000014010434640014250 5ustar wouterwouterunbound-1.13.1/cachedb/cachedb.h0000644000175000017500000000744714010434640016006 0ustar wouterwouter/* * cachedb/cachedb.h - cache from a database external to the program module * * Copyright (c) 2016, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that uses an external database to cache * dns responses. */ #include "util/module.h" struct cachedb_backend; /** * The global variable environment contents for the cachedb * Shared between threads, this represents long term information. * Like database connections. */ struct cachedb_env { /** true is cachedb is enabled, the backend is turned on */ int enabled; /** the backend routines */ struct cachedb_backend* backend; /** backend specific data here */ void* backend_data; }; /** * Per query state for the cachedb module. */ struct cachedb_qstate { int todo; }; /** * Backend call routines */ struct cachedb_backend { /** backend name */ const char* name; /** Init(env, cachedb_env): false on setup failure */ int (*init)(struct module_env*, struct cachedb_env*); /** Deinit - close db for program exit */ void (*deinit)(struct module_env*, struct cachedb_env*); /** Lookup (env, cachedb_env, key, result_buffer): true if found */ int (*lookup)(struct module_env*, struct cachedb_env*, char*, struct sldns_buffer*); /** Store (env, cachedb_env, key, data, data_len) */ void (*store)(struct module_env*, struct cachedb_env*, char*, uint8_t*, size_t, time_t); }; #define CACHEDB_HASHSIZE 256 /* bit hash */ /** Init the cachedb module */ int cachedb_init(struct module_env* env, int id); /** Deinit the cachedb module */ void cachedb_deinit(struct module_env* env, int id); /** Operate on an event on a query (in qstate). */ void cachedb_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** Subordinate query done, inform this super request of its conclusion */ void cachedb_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** clear the cachedb query-specific contents out of qstate */ void cachedb_clear(struct module_qstate* qstate, int id); /** return memory estimate for cachedb module */ size_t cachedb_get_mem(struct module_env* env, int id); /** * Get the function block with pointers to the cachedb functions * @return the function block for "cachedb". */ struct module_func_block* cachedb_get_funcblock(void); unbound-1.13.1/cachedb/cachedb.c0000644000175000017500000006276614010434640016006 0ustar wouterwouter/* * cachedb/cachedb.c - cache from a database external to the program module * * Copyright (c) 2016, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that uses an external database to cache * dns responses. */ #include "config.h" #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #include "cachedb/redis.h" #include "util/regional.h" #include "util/net_help.h" #include "util/config_file.h" #include "util/data/msgreply.h" #include "util/data/msgencode.h" #include "services/cache/dns.h" #include "validator/val_neg.h" #include "validator/val_secalgo.h" #include "iterator/iter_utils.h" #include "sldns/parseutil.h" #include "sldns/wire2str.h" #include "sldns/sbuffer.h" /* header file for htobe64 */ #ifdef HAVE_ENDIAN_H # include #endif #ifdef HAVE_SYS_ENDIAN_H # include #endif #ifndef HAVE_HTOBE64 # ifdef HAVE_LIBKERN_OSBYTEORDER_H /* In practice this is specific to MacOS X. We assume it doesn't have * htobe64/be64toh but has alternatives with a different name. */ # include # define htobe64(x) OSSwapHostToBigInt64(x) # define be64toh(x) OSSwapBigToHostInt64(x) # else /* not OSX */ /* Some compilers do not define __BYTE_ORDER__, like IBM XLC on AIX */ # if __BIG_ENDIAN__ # define be64toh(n) (n) # define htobe64(n) (n) # else # define be64toh(n) (((uint64_t)htonl((n) & 0xFFFFFFFF) << 32) | htonl((n) >> 32)) # define htobe64(n) (((uint64_t)htonl((n) & 0xFFFFFFFF) << 32) | htonl((n) >> 32)) # endif /* _ENDIAN */ # endif /* HAVE_LIBKERN_OSBYTEORDER_H */ #endif /* HAVE_BE64TOH */ /** the unit test testframe for cachedb, its module state contains * a cache for a couple queries (in memory). */ struct testframe_moddata { /** lock for mutex */ lock_basic_type lock; /** key for single stored data element, NULL if none */ char* stored_key; /** data for single stored data element, NULL if none */ uint8_t* stored_data; /** length of stored data */ size_t stored_datalen; }; static int testframe_init(struct module_env* env, struct cachedb_env* cachedb_env) { struct testframe_moddata* d; (void)env; verbose(VERB_ALGO, "testframe_init"); d = (struct testframe_moddata*)calloc(1, sizeof(struct testframe_moddata)); cachedb_env->backend_data = (void*)d; if(!cachedb_env->backend_data) { log_err("out of memory"); return 0; } lock_basic_init(&d->lock); lock_protect(&d->lock, d, sizeof(*d)); return 1; } static void testframe_deinit(struct module_env* env, struct cachedb_env* cachedb_env) { struct testframe_moddata* d = (struct testframe_moddata*) cachedb_env->backend_data; (void)env; verbose(VERB_ALGO, "testframe_deinit"); if(!d) return; lock_basic_destroy(&d->lock); free(d->stored_key); free(d->stored_data); free(d); } static int testframe_lookup(struct module_env* env, struct cachedb_env* cachedb_env, char* key, struct sldns_buffer* result_buffer) { struct testframe_moddata* d = (struct testframe_moddata*) cachedb_env->backend_data; (void)env; verbose(VERB_ALGO, "testframe_lookup of %s", key); lock_basic_lock(&d->lock); if(d->stored_key && strcmp(d->stored_key, key) == 0) { if(d->stored_datalen > sldns_buffer_capacity(result_buffer)) { lock_basic_unlock(&d->lock); return 0; /* too large */ } verbose(VERB_ALGO, "testframe_lookup found %d bytes", (int)d->stored_datalen); sldns_buffer_clear(result_buffer); sldns_buffer_write(result_buffer, d->stored_data, d->stored_datalen); sldns_buffer_flip(result_buffer); lock_basic_unlock(&d->lock); return 1; } lock_basic_unlock(&d->lock); return 0; } static void testframe_store(struct module_env* env, struct cachedb_env* cachedb_env, char* key, uint8_t* data, size_t data_len, time_t ATTR_UNUSED(ttl)) { struct testframe_moddata* d = (struct testframe_moddata*) cachedb_env->backend_data; (void)env; lock_basic_lock(&d->lock); verbose(VERB_ALGO, "testframe_store %s (%d bytes)", key, (int)data_len); /* free old data element (if any) */ free(d->stored_key); d->stored_key = NULL; free(d->stored_data); d->stored_data = NULL; d->stored_datalen = 0; d->stored_data = memdup(data, data_len); if(!d->stored_data) { lock_basic_unlock(&d->lock); log_err("out of memory"); return; } d->stored_datalen = data_len; d->stored_key = strdup(key); if(!d->stored_key) { free(d->stored_data); d->stored_data = NULL; d->stored_datalen = 0; lock_basic_unlock(&d->lock); return; } lock_basic_unlock(&d->lock); /* (key,data) successfully stored */ } /** The testframe backend is for unit tests */ static struct cachedb_backend testframe_backend = { "testframe", testframe_init, testframe_deinit, testframe_lookup, testframe_store }; /** find a particular backend from possible backends */ static struct cachedb_backend* cachedb_find_backend(const char* str) { #ifdef USE_REDIS if(strcmp(str, redis_backend.name) == 0) return &redis_backend; #endif if(strcmp(str, testframe_backend.name) == 0) return &testframe_backend; /* TODO add more backends here */ return NULL; } /** apply configuration to cachedb module 'global' state */ static int cachedb_apply_cfg(struct cachedb_env* cachedb_env, struct config_file* cfg) { const char* backend_str = cfg->cachedb_backend; cachedb_env->backend = cachedb_find_backend(backend_str); if(!cachedb_env->backend) { log_err("cachedb: cannot find backend name '%s'", backend_str); return 0; } /* TODO see if more configuration needs to be applied or not */ return 1; } int cachedb_init(struct module_env* env, int id) { struct cachedb_env* cachedb_env = (struct cachedb_env*)calloc(1, sizeof(struct cachedb_env)); if(!cachedb_env) { log_err("malloc failure"); return 0; } env->modinfo[id] = (void*)cachedb_env; if(!cachedb_apply_cfg(cachedb_env, env->cfg)) { log_err("cachedb: could not apply configuration settings."); free(cachedb_env); env->modinfo[id] = NULL; return 0; } /* see if a backend is selected */ if(!cachedb_env->backend || !cachedb_env->backend->name) return 1; if(!(*cachedb_env->backend->init)(env, cachedb_env)) { log_err("cachedb: could not init %s backend", cachedb_env->backend->name); free(cachedb_env); env->modinfo[id] = NULL; return 0; } cachedb_env->enabled = 1; if(env->cfg->serve_expired_reply_ttl) log_warn( "cachedb: serve-expired-reply-ttl is set but not working for data " "originating from the external cache; 0 TLL is used for those."); if(env->cfg->serve_expired_client_timeout) log_warn( "cachedb: serve-expired-client-timeout is set but not working for " "data originating from the external cache; expired data are used " "in the reply without first trying to refresh the data."); return 1; } void cachedb_deinit(struct module_env* env, int id) { struct cachedb_env* cachedb_env; if(!env || !env->modinfo[id]) return; cachedb_env = (struct cachedb_env*)env->modinfo[id]; /* free contents */ /* TODO */ if(cachedb_env->enabled) { (*cachedb_env->backend->deinit)(env, cachedb_env); } free(cachedb_env); env->modinfo[id] = NULL; } /** new query for cachedb */ static int cachedb_new(struct module_qstate* qstate, int id) { struct cachedb_qstate* iq = (struct cachedb_qstate*)regional_alloc( qstate->region, sizeof(struct cachedb_qstate)); qstate->minfo[id] = iq; if(!iq) return 0; memset(iq, 0, sizeof(*iq)); /* initialise it */ /* TODO */ return 1; } /** * Return an error * @param qstate: our query state * @param id: module id * @param rcode: error code (DNS errcode). * @return: 0 for use by caller, to make notation easy, like: * return error_response(..). */ static int error_response(struct module_qstate* qstate, int id, int rcode) { verbose(VERB_QUERY, "return error response %s", sldns_lookup_by_id(sldns_rcodes, rcode)? sldns_lookup_by_id(sldns_rcodes, rcode)->name:"??"); qstate->return_rcode = rcode; qstate->return_msg = NULL; qstate->ext_state[id] = module_finished; return 0; } /** * Hash the query name, type, class and dbacess-secret into lookup buffer. * @param qstate: query state with query info * and env->cfg with secret. * @param buf: returned buffer with hash to lookup * @param len: length of the buffer. */ static void calc_hash(struct module_qstate* qstate, char* buf, size_t len) { uint8_t clear[1024]; size_t clen = 0; uint8_t hash[CACHEDB_HASHSIZE/8]; const char* hex = "0123456789ABCDEF"; const char* secret = qstate->env->cfg->cachedb_secret; size_t i; /* copy the hash info into the clear buffer */ if(clen + qstate->qinfo.qname_len < sizeof(clear)) { memmove(clear+clen, qstate->qinfo.qname, qstate->qinfo.qname_len); clen += qstate->qinfo.qname_len; } if(clen + 4 < sizeof(clear)) { uint16_t t = htons(qstate->qinfo.qtype); uint16_t c = htons(qstate->qinfo.qclass); memmove(clear+clen, &t, 2); memmove(clear+clen+2, &c, 2); clen += 4; } if(secret && secret[0] && clen + strlen(secret) < sizeof(clear)) { memmove(clear+clen, secret, strlen(secret)); clen += strlen(secret); } /* hash the buffer */ secalgo_hash_sha256(clear, clen, hash); #ifdef HAVE_EXPLICIT_BZERO explicit_bzero(clear, clen); #else memset(clear, 0, clen); #endif /* hex encode output for portability (some online dbs need * no nulls, no control characters, and so on) */ log_assert(len >= sizeof(hash)*2 + 1); (void)len; for(i=0; i>4]; buf[i*2+1] = hex[hash[i]&0x0f]; } buf[sizeof(hash)*2] = 0; } /** convert data from return_msg into the data buffer */ static int prep_data(struct module_qstate* qstate, struct sldns_buffer* buf) { uint64_t timestamp, expiry; size_t oldlim; struct edns_data edns; memset(&edns, 0, sizeof(edns)); edns.edns_present = 1; edns.bits = EDNS_DO; edns.ext_rcode = 0; edns.edns_version = EDNS_ADVERTISED_VERSION; edns.udp_size = EDNS_ADVERTISED_SIZE; if(!qstate->return_msg || !qstate->return_msg->rep) return 0; /* We don't store the reply if its TTL is 0 unless serve-expired is * enabled. Such a reply won't be reusable and simply be a waste for * the backend. It's also compatible with the default behavior of * dns_cache_store_msg(). */ if(qstate->return_msg->rep->ttl == 0 && !qstate->env->cfg->serve_expired) return 0; if(verbosity >= VERB_ALGO) log_dns_msg("cachedb encoding", &qstate->return_msg->qinfo, qstate->return_msg->rep); if(!reply_info_answer_encode(&qstate->return_msg->qinfo, qstate->return_msg->rep, 0, qstate->query_flags, buf, 0, 1, qstate->env->scratch, 65535, &edns, 1, 0)) return 0; /* TTLs in the return_msg are relative to time(0) so we have to * store that, we also store the smallest ttl in the packet+time(0) * as the packet expiry time */ /* qstate->return_msg->rep->ttl contains that relative shortest ttl */ timestamp = (uint64_t)*qstate->env->now; expiry = timestamp + (uint64_t)qstate->return_msg->rep->ttl; timestamp = htobe64(timestamp); expiry = htobe64(expiry); oldlim = sldns_buffer_limit(buf); if(oldlim + sizeof(timestamp)+sizeof(expiry) >= sldns_buffer_capacity(buf)) return 0; /* doesn't fit. */ sldns_buffer_set_limit(buf, oldlim + sizeof(timestamp)+sizeof(expiry)); sldns_buffer_write_at(buf, oldlim, ×tamp, sizeof(timestamp)); sldns_buffer_write_at(buf, oldlim+sizeof(timestamp), &expiry, sizeof(expiry)); return 1; } /** check expiry, return true if matches OK */ static int good_expiry_and_qinfo(struct module_qstate* qstate, struct sldns_buffer* buf) { uint64_t expiry; /* the expiry time is the last bytes of the buffer */ if(sldns_buffer_limit(buf) < sizeof(expiry)) return 0; sldns_buffer_read_at(buf, sldns_buffer_limit(buf)-sizeof(expiry), &expiry, sizeof(expiry)); expiry = be64toh(expiry); /* Check if we are allowed to return expired entries: * - serve_expired needs to be set * - if SERVE_EXPIRED_TTL is set make sure that the record is not older * than that. */ if((time_t)expiry < *qstate->env->now && (!qstate->env->cfg->serve_expired || (SERVE_EXPIRED_TTL && *qstate->env->now - (time_t)expiry > SERVE_EXPIRED_TTL))) return 0; return 1; } /* Adjust the TTL of the given RRset by 'subtract'. If 'subtract' is * negative, set the TTL to 0. */ static void packed_rrset_ttl_subtract(struct packed_rrset_data* data, time_t subtract) { size_t i; size_t total = data->count + data->rrsig_count; if(subtract >= 0 && data->ttl > subtract) data->ttl -= subtract; else data->ttl = 0; for(i=0; i= 0 && data->rr_ttl[i] > subtract) data->rr_ttl[i] -= subtract; else data->rr_ttl[i] = 0; } data->ttl_add = (subtract < data->ttl_add) ? (data->ttl_add - subtract) : 0; } /* Adjust the TTL of a DNS message and its RRs by 'adjust'. If 'adjust' is * negative, set the TTLs to 0. */ static void adjust_msg_ttl(struct dns_msg* msg, time_t adjust) { size_t i; if(adjust >= 0 && msg->rep->ttl > adjust) msg->rep->ttl -= adjust; else msg->rep->ttl = 0; msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl); msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL; for(i=0; irep->rrset_count; i++) { packed_rrset_ttl_subtract((struct packed_rrset_data*)msg-> rep->rrsets[i]->entry.data, adjust); } } /** convert dns message in buffer to return_msg */ static int parse_data(struct module_qstate* qstate, struct sldns_buffer* buf) { struct msg_parse* prs; struct edns_data edns; uint64_t timestamp, expiry; time_t adjust; size_t lim = sldns_buffer_limit(buf); if(lim < LDNS_HEADER_SIZE+sizeof(timestamp)+sizeof(expiry)) return 0; /* too short */ /* remove timestamp and expiry from end */ sldns_buffer_read_at(buf, lim-sizeof(expiry), &expiry, sizeof(expiry)); sldns_buffer_read_at(buf, lim-sizeof(expiry)-sizeof(timestamp), ×tamp, sizeof(timestamp)); expiry = be64toh(expiry); timestamp = be64toh(timestamp); /* parse DNS packet */ regional_free_all(qstate->env->scratch); prs = (struct msg_parse*)regional_alloc(qstate->env->scratch, sizeof(struct msg_parse)); if(!prs) return 0; /* out of memory */ memset(prs, 0, sizeof(*prs)); memset(&edns, 0, sizeof(edns)); sldns_buffer_set_limit(buf, lim - sizeof(expiry)-sizeof(timestamp)); if(parse_packet(buf, prs, qstate->env->scratch) != LDNS_RCODE_NOERROR) { sldns_buffer_set_limit(buf, lim); return 0; } if(parse_extract_edns(prs, &edns, qstate->env->scratch) != LDNS_RCODE_NOERROR) { sldns_buffer_set_limit(buf, lim); return 0; } qstate->return_msg = dns_alloc_msg(buf, prs, qstate->region); sldns_buffer_set_limit(buf, lim); if(!qstate->return_msg) return 0; qstate->return_rcode = LDNS_RCODE_NOERROR; /* see how much of the TTL expired, and remove it */ if(*qstate->env->now <= (time_t)timestamp) { verbose(VERB_ALGO, "cachedb msg adjust by zero"); return 1; /* message from the future (clock skew?) */ } adjust = *qstate->env->now - (time_t)timestamp; if(qstate->return_msg->rep->ttl < adjust) { verbose(VERB_ALGO, "cachedb msg expired"); /* If serve-expired is enabled, we still use an expired message * setting the TTL to 0. */ if(qstate->env->cfg->serve_expired) adjust = -1; else return 0; /* message expired */ } verbose(VERB_ALGO, "cachedb msg adjusted down by %d", (int)adjust); adjust_msg_ttl(qstate->return_msg, adjust); /* Similar to the unbound worker, if serve-expired is enabled and * the msg would be considered to be expired, mark the state so a * refetch will be scheduled. The comparison between 'expiry' and * 'now' should be redundant given how these values were calculated, * but we check it just in case as does good_expiry_and_qinfo(). */ if(qstate->env->cfg->serve_expired && (adjust == -1 || (time_t)expiry < *qstate->env->now)) { qstate->need_refetch = 1; } return 1; } /** * Lookup the qstate.qinfo in extcache, store in qstate.return_msg. * return true if lookup was successful. */ static int cachedb_extcache_lookup(struct module_qstate* qstate, struct cachedb_env* ie) { char key[(CACHEDB_HASHSIZE/8)*2+1]; calc_hash(qstate, key, sizeof(key)); /* call backend to fetch data for key into scratch buffer */ if( !(*ie->backend->lookup)(qstate->env, ie, key, qstate->env->scratch_buffer)) { return 0; } /* check expiry date and check if query-data matches */ if( !good_expiry_and_qinfo(qstate, qstate->env->scratch_buffer) ) { return 0; } /* parse dns message into return_msg */ if( !parse_data(qstate, qstate->env->scratch_buffer) ) { return 0; } return 1; } /** * Store the qstate.return_msg in extcache for key qstate.info */ static void cachedb_extcache_store(struct module_qstate* qstate, struct cachedb_env* ie) { char key[(CACHEDB_HASHSIZE/8)*2+1]; calc_hash(qstate, key, sizeof(key)); /* prepare data in scratch buffer */ if(!prep_data(qstate, qstate->env->scratch_buffer)) return; /* call backend */ (*ie->backend->store)(qstate->env, ie, key, sldns_buffer_begin(qstate->env->scratch_buffer), sldns_buffer_limit(qstate->env->scratch_buffer), qstate->return_msg->rep->ttl); } /** * See if unbound's internal cache can answer the query */ static int cachedb_intcache_lookup(struct module_qstate* qstate) { struct dns_msg* msg; msg = dns_cache_lookup(qstate->env, qstate->qinfo.qname, qstate->qinfo.qname_len, qstate->qinfo.qtype, qstate->qinfo.qclass, qstate->query_flags, qstate->region, qstate->env->scratch, 1 /* no partial messages with only a CNAME */ ); if(!msg && qstate->env->neg_cache && iter_qname_indicates_dnssec(qstate->env, &qstate->qinfo)) { /* lookup in negative cache; may result in * NOERROR/NODATA or NXDOMAIN answers that need validation */ msg = val_neg_getmsg(qstate->env->neg_cache, &qstate->qinfo, qstate->region, qstate->env->rrset_cache, qstate->env->scratch_buffer, *qstate->env->now, 1/*add SOA*/, NULL, qstate->env->cfg); } if(!msg) return 0; /* this is the returned msg */ qstate->return_rcode = LDNS_RCODE_NOERROR; qstate->return_msg = msg; return 1; } /** * Store query into the internal cache of unbound. */ static void cachedb_intcache_store(struct module_qstate* qstate) { uint32_t store_flags = qstate->query_flags; if(qstate->env->cfg->serve_expired) store_flags |= DNSCACHE_STORE_ZEROTTL; if(!qstate->return_msg) return; (void)dns_cache_store(qstate->env, &qstate->qinfo, qstate->return_msg->rep, 0, qstate->prefetch_leeway, 0, qstate->region, store_flags); } /** * Handle a cachedb module event with a query * @param qstate: query state (from the mesh), passed between modules. * contains qstate->env module environment with global caches and so on. * @param iq: query state specific for this module. per-query. * @param ie: environment specific for this module. global. * @param id: module id. */ static void cachedb_handle_query(struct module_qstate* qstate, struct cachedb_qstate* ATTR_UNUSED(iq), struct cachedb_env* ie, int id) { /* check if we are enabled, and skip if so */ if(!ie->enabled) { /* pass request to next module */ qstate->ext_state[id] = module_wait_module; return; } if(qstate->blacklist || qstate->no_cache_lookup) { /* cache is blacklisted or we are instructed from edns to not look */ /* pass request to next module */ qstate->ext_state[id] = module_wait_module; return; } /* lookup inside unbound's internal cache. * This does not look for expired entries. */ if(cachedb_intcache_lookup(qstate)) { if(verbosity >= VERB_ALGO) { if(qstate->return_msg->rep) log_dns_msg("cachedb internal cache lookup", &qstate->return_msg->qinfo, qstate->return_msg->rep); else log_info("cachedb internal cache lookup: rcode %s", sldns_lookup_by_id(sldns_rcodes, qstate->return_rcode) ?sldns_lookup_by_id(sldns_rcodes, qstate->return_rcode)->name :"??"); } /* we are done with the query */ qstate->ext_state[id] = module_finished; return; } /* ask backend cache to see if we have data */ if(cachedb_extcache_lookup(qstate, ie)) { if(verbosity >= VERB_ALGO) log_dns_msg(ie->backend->name, &qstate->return_msg->qinfo, qstate->return_msg->rep); /* store this result in internal cache */ cachedb_intcache_store(qstate); /* In case we have expired data but there is a client timer for expired * answers, pass execution to next module in order to try updating the * data first. * TODO: this needs revisit. The expired data stored from cachedb has * 0 TTL which is picked up by iterator later when looking in the cache. * Document that ext cachedb does not work properly with * serve_stale_reply_ttl yet. */ if(qstate->need_refetch && qstate->serve_expired_data && qstate->serve_expired_data->timer) { qstate->return_msg = NULL; qstate->ext_state[id] = module_wait_module; return; } /* we are done with the query */ qstate->ext_state[id] = module_finished; return; } /* no cache fetches */ /* pass request to next module */ qstate->ext_state[id] = module_wait_module; } /** * Handle a cachedb module event with a response from the iterator. * @param qstate: query state (from the mesh), passed between modules. * contains qstate->env module environment with global caches and so on. * @param iq: query state specific for this module. per-query. * @param ie: environment specific for this module. global. * @param id: module id. */ static void cachedb_handle_response(struct module_qstate* qstate, struct cachedb_qstate* ATTR_UNUSED(iq), struct cachedb_env* ie, int id) { /* check if we are not enabled or instructed to not cache, and skip */ if(!ie->enabled || qstate->no_cache_store) { /* we are done with the query */ qstate->ext_state[id] = module_finished; return; } /* store the item into the backend cache */ cachedb_extcache_store(qstate, ie); /* we are done with the query */ qstate->ext_state[id] = module_finished; } void cachedb_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound) { struct cachedb_env* ie = (struct cachedb_env*)qstate->env->modinfo[id]; struct cachedb_qstate* iq = (struct cachedb_qstate*)qstate->minfo[id]; verbose(VERB_QUERY, "cachedb[module %d] operate: extstate:%s event:%s", id, strextstate(qstate->ext_state[id]), strmodulevent(event)); if(iq) log_query_info(VERB_QUERY, "cachedb operate: query", &qstate->qinfo); /* perform cachedb state machine */ if((event == module_event_new || event == module_event_pass) && iq == NULL) { if(!cachedb_new(qstate, id)) { (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } iq = (struct cachedb_qstate*)qstate->minfo[id]; } if(iq && (event == module_event_pass || event == module_event_new)) { cachedb_handle_query(qstate, iq, ie, id); return; } if(iq && (event == module_event_moddone)) { cachedb_handle_response(qstate, iq, ie, id); return; } if(iq && outbound) { /* cachedb does not need to process responses at this time * ignore it. cachedb_process_response(qstate, iq, ie, id, outbound, event); */ return; } if(event == module_event_error) { verbose(VERB_ALGO, "got called with event error, giving up"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } if(!iq && (event == module_event_moddone)) { /* during priming, module done but we never started */ qstate->ext_state[id] = module_finished; return; } log_err("bad event for cachedb"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); } void cachedb_inform_super(struct module_qstate* ATTR_UNUSED(qstate), int ATTR_UNUSED(id), struct module_qstate* ATTR_UNUSED(super)) { /* cachedb does not use subordinate requests at this time */ verbose(VERB_ALGO, "cachedb inform_super was called"); } void cachedb_clear(struct module_qstate* qstate, int id) { struct cachedb_qstate* iq; if(!qstate) return; iq = (struct cachedb_qstate*)qstate->minfo[id]; if(iq) { /* free contents of iq */ /* TODO */ } qstate->minfo[id] = NULL; } size_t cachedb_get_mem(struct module_env* env, int id) { struct cachedb_env* ie = (struct cachedb_env*)env->modinfo[id]; if(!ie) return 0; return sizeof(*ie); /* TODO - more mem */ } /** * The cachedb function block */ static struct module_func_block cachedb_block = { "cachedb", &cachedb_init, &cachedb_deinit, &cachedb_operate, &cachedb_inform_super, &cachedb_clear, &cachedb_get_mem }; struct module_func_block* cachedb_get_funcblock(void) { return &cachedb_block; } #endif /* USE_CACHEDB */ unbound-1.13.1/cachedb/redis.h0000644000175000017500000000352514010434640015534 0ustar wouterwouter/* * cachedb/redis.h - cachedb redis module * * Copyright (c) 2018, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that uses the redis database to cache * dns responses. */ /** the redis backend definition, contains callable functions * and name string */ extern struct cachedb_backend redis_backend; unbound-1.13.1/cachedb/redis.c0000644000175000017500000002403614010434640015527 0ustar wouterwouter/* * cachedb/redis.c - cachedb redis module * * Copyright (c) 2018, NLnet Labs. All rights reserved. * * This software is open source. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the NLNET LABS nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * \file * * This file contains a module that uses the redis database to cache * dns responses. */ #include "config.h" #ifdef USE_CACHEDB #include "cachedb/redis.h" #include "cachedb/cachedb.h" #include "util/alloc.h" #include "util/config_file.h" #include "sldns/sbuffer.h" #ifdef USE_REDIS #include "hiredis/hiredis.h" struct redis_moddata { redisContext** ctxs; /* thread-specific redis contexts */ int numctxs; /* number of ctx entries */ const char* server_host; /* server's IP address or host name */ int server_port; /* server's TCP port */ struct timeval timeout; /* timeout for connection setup and commands */ }; static redisReply* redis_command(struct module_env*, struct cachedb_env*, const char*, const uint8_t*, size_t); static redisContext* redis_connect(const struct redis_moddata* moddata) { redisContext* ctx; ctx = redisConnectWithTimeout(moddata->server_host, moddata->server_port, moddata->timeout); if(!ctx || ctx->err) { const char *errstr = "out of memory"; if(ctx) errstr = ctx->errstr; log_err("failed to connect to redis server: %s", errstr); goto fail; } if(redisSetTimeout(ctx, moddata->timeout) != REDIS_OK) { log_err("failed to set redis timeout"); goto fail; } return ctx; fail: if(ctx) redisFree(ctx); return NULL; } static int redis_init(struct module_env* env, struct cachedb_env* cachedb_env) { int i; struct redis_moddata* moddata = NULL; verbose(VERB_ALGO, "redis_init"); moddata = calloc(1, sizeof(struct redis_moddata)); if(!moddata) { log_err("out of memory"); return 0; } moddata->numctxs = env->cfg->num_threads; moddata->ctxs = calloc(env->cfg->num_threads, sizeof(redisContext*)); if(!moddata->ctxs) { log_err("out of memory"); free(moddata); return 0; } /* note: server_host is a shallow reference to configured string. * we don't have to free it in this module. */ moddata->server_host = env->cfg->redis_server_host; moddata->server_port = env->cfg->redis_server_port; moddata->timeout.tv_sec = env->cfg->redis_timeout / 1000; moddata->timeout.tv_usec = (env->cfg->redis_timeout % 1000) * 1000; for(i = 0; i < moddata->numctxs; i++) moddata->ctxs[i] = redis_connect(moddata); cachedb_env->backend_data = moddata; if(env->cfg->redis_expire_records) { redisReply* rep = NULL; int redis_reply_type = 0; /** check if setex command is supported */ rep = redis_command(env, cachedb_env, "SETEX __UNBOUND_REDIS_CHECK__ 1 none", NULL, 0); if(!rep) { /** init failed, no response from redis server*/ log_err("redis_init: failed to init redis, the " "redis-expire-records option requires the SETEX command " "(redis >= 2.0.0)"); return 0; } redis_reply_type = rep->type; freeReplyObject(rep); switch(redis_reply_type) { case REDIS_REPLY_STATUS: break; default: /** init failed, setex command not supported */ log_err("redis_init: failed to init redis, the " "redis-expire-records option requires the SETEX command " "(redis >= 2.0.0)"); return 0; } } return 1; } static void redis_deinit(struct module_env* env, struct cachedb_env* cachedb_env) { struct redis_moddata* moddata = (struct redis_moddata*) cachedb_env->backend_data; (void)env; verbose(VERB_ALGO, "redis_deinit"); if(!moddata) return; if(moddata->ctxs) { int i; for(i = 0; i < moddata->numctxs; i++) { if(moddata->ctxs[i]) redisFree(moddata->ctxs[i]); } free(moddata->ctxs); } free(moddata); } /* * Send a redis command and get a reply. Unified so that it can be used for * both SET and GET. If 'data' is non-NULL the command is supposed to be * SET and GET otherwise, but the implementation of this function is agnostic * about the semantics (except for logging): 'command', 'data', and 'data_len' * are opaquely passed to redisCommand(). * This function first checks whether a connection with a redis server has * been established; if not it tries to set up a new one. * It returns redisReply returned from redisCommand() or NULL if some low * level error happens. The caller is responsible to check the return value, * if it's non-NULL, it has to free it with freeReplyObject(). */ static redisReply* redis_command(struct module_env* env, struct cachedb_env* cachedb_env, const char* command, const uint8_t* data, size_t data_len) { redisContext* ctx; redisReply* rep; struct redis_moddata* d = (struct redis_moddata*) cachedb_env->backend_data; /* We assume env->alloc->thread_num is a unique ID for each thread * in [0, num-of-threads). We could treat it as an error condition * if the assumption didn't hold, but it seems to be a fundamental * assumption throughout the unbound architecture, so we simply assert * it. */ log_assert(env->alloc->thread_num < d->numctxs); ctx = d->ctxs[env->alloc->thread_num]; /* If we've not established a connection to the server or we've closed * it on a failure, try to re-establish a new one. Failures will be * logged in redis_connect(). */ if(!ctx) { ctx = redis_connect(d); d->ctxs[env->alloc->thread_num] = ctx; } if(!ctx) return NULL; /* Send the command and get a reply, synchronously. */ rep = (redisReply*)redisCommand(ctx, command, data, data_len); if(!rep) { /* Once an error as a NULL-reply is returned the context cannot * be reused and we'll need to set up a new connection. */ log_err("redis_command: failed to receive a reply, " "closing connection: %s", ctx->errstr); redisFree(ctx); d->ctxs[env->alloc->thread_num] = NULL; return NULL; } /* Check error in reply to unify logging in that case. * The caller may perform context-dependent checks and logging. */ if(rep->type == REDIS_REPLY_ERROR) log_err("redis: %s resulted in an error: %s", data ? "set" : "get", rep->str); return rep; } static int redis_lookup(struct module_env* env, struct cachedb_env* cachedb_env, char* key, struct sldns_buffer* result_buffer) { redisReply* rep; char cmdbuf[4+(CACHEDB_HASHSIZE/8)*2+1]; /* "GET " + key */ int n; int ret = 0; verbose(VERB_ALGO, "redis_lookup of %s", key); n = snprintf(cmdbuf, sizeof(cmdbuf), "GET %s", key); if(n < 0 || n >= (int)sizeof(cmdbuf)) { log_err("redis_lookup: unexpected failure to build command"); return 0; } rep = redis_command(env, cachedb_env, cmdbuf, NULL, 0); if(!rep) return 0; switch(rep->type) { case REDIS_REPLY_NIL: verbose(VERB_ALGO, "redis_lookup: no data cached"); break; case REDIS_REPLY_STRING: verbose(VERB_ALGO, "redis_lookup found %d bytes", (int)rep->len); if((size_t)rep->len > sldns_buffer_capacity(result_buffer)) { log_err("redis_lookup: replied data too long: %lu", (size_t)rep->len); break; } sldns_buffer_clear(result_buffer); sldns_buffer_write(result_buffer, rep->str, rep->len); sldns_buffer_flip(result_buffer); ret = 1; break; case REDIS_REPLY_ERROR: break; /* already logged */ default: log_err("redis_lookup: unexpected type of reply for (%d)", rep->type); break; } freeReplyObject(rep); return ret; } static void redis_store(struct module_env* env, struct cachedb_env* cachedb_env, char* key, uint8_t* data, size_t data_len, time_t ttl) { redisReply* rep; int n; int set_ttl = (env->cfg->redis_expire_records && (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0)); /* Supported commands: * - "SET " + key + " %b" * - "SETEX " + key + " " + ttl + " %b" */ char cmdbuf[6+(CACHEDB_HASHSIZE/8)*2+11+3+1]; if (!set_ttl) { verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len); /* build command to set to a binary safe string */ n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key); } else { /* add expired ttl time to redis ttl to avoid premature eviction of key */ ttl += env->cfg->serve_expired_ttl; verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %u", key, (int)data_len, (uint32_t)ttl); /* build command to set to a binary safe string */ n = snprintf(cmdbuf, sizeof(cmdbuf), "SETEX %s %u %%b", key, (uint32_t)ttl); } if(n < 0 || n >= (int)sizeof(cmdbuf)) { log_err("redis_store: unexpected failure to build command"); return; } rep = redis_command(env, cachedb_env, cmdbuf, data, data_len); if(rep) { verbose(VERB_ALGO, "redis_store set completed"); if(rep->type != REDIS_REPLY_STATUS && rep->type != REDIS_REPLY_ERROR) { log_err("redis_store: unexpected type of reply (%d)", rep->type); } freeReplyObject(rep); } } struct cachedb_backend redis_backend = { "redis", redis_init, redis_deinit, redis_lookup, redis_store }; #endif /* USE_REDIS */ #endif /* USE_CACHEDB */ unbound-1.13.1/aclocal.m40000644000175000017500000124240214010434645014551 0ustar wouterwouter# generated automatically by aclocal 1.16.2 -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 11 (pkg-config-0.29.1) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 2006-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) unbound-1.13.1/ltmain.sh0000644000175000017500000117106714010434640014534 0ustar wouterwouter#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.6 package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: unbound-1.13.1/ipset/0000755000175000017500000000000014010434640014023 5ustar wouterwouterunbound-1.13.1/ipset/ipset.c0000644000175000017500000002252314010434640015317 0ustar wouterwouter/** * \file * This file implements the ipset module. It can handle packets by putting * the A and AAAA addresses that are configured in unbound.conf as type * ipset (local-zone statements) into a firewall rule IPSet. For firewall * blacklist and whitelist usage. */ #include "config.h" #include "ipset/ipset.h" #include "util/regional.h" #include "util/net_help.h" #include "util/config_file.h" #include "services/cache/dns.h" #include "sldns/sbuffer.h" #include "sldns/wire2str.h" #include "sldns/parseutil.h" #include #include #include #define BUFF_LEN 256 /** * Return an error * @param qstate: our query state * @param id: module id * @param rcode: error code (DNS errcode). * @return: 0 for use by caller, to make notation easy, like: * return error_response(..). */ static int error_response(struct module_qstate* qstate, int id, int rcode) { verbose(VERB_QUERY, "return error response %s", sldns_lookup_by_id(sldns_rcodes, rcode)? sldns_lookup_by_id(sldns_rcodes, rcode)->name:"??"); qstate->return_rcode = rcode; qstate->return_msg = NULL; qstate->ext_state[id] = module_finished; return 0; } static struct mnl_socket * open_mnl_socket() { struct mnl_socket *mnl; mnl = mnl_socket_open(NETLINK_NETFILTER); if (!mnl) { log_err("ipset: could not open netfilter."); return NULL; } if (mnl_socket_bind(mnl, 0, MNL_SOCKET_AUTOPID) < 0) { mnl_socket_close(mnl); log_err("ipset: could not bind netfilter."); return NULL; } return mnl; } static int add_to_ipset(struct mnl_socket *mnl, const char *setname, const void *ipaddr, int af) { struct nlmsghdr *nlh; struct nfgenmsg *nfg; struct nlattr *nested[2]; static char buffer[BUFF_LEN]; if (strlen(setname) >= IPSET_MAXNAMELEN) { errno = ENAMETOOLONG; return -1; } if (af != AF_INET && af != AF_INET6) { errno = EAFNOSUPPORT; return -1; } nlh = mnl_nlmsg_put_header(buffer); nlh->nlmsg_type = IPSET_CMD_ADD | (NFNL_SUBSYS_IPSET << 8); nlh->nlmsg_flags = NLM_F_REQUEST|NLM_F_ACK|NLM_F_EXCL; nfg = mnl_nlmsg_put_extra_header(nlh, sizeof(struct nfgenmsg)); nfg->nfgen_family = af; nfg->version = NFNETLINK_V0; nfg->res_id = htons(0); mnl_attr_put_u8(nlh, IPSET_ATTR_PROTOCOL, IPSET_PROTOCOL); mnl_attr_put(nlh, IPSET_ATTR_SETNAME, strlen(setname) + 1, setname); nested[0] = mnl_attr_nest_start(nlh, IPSET_ATTR_DATA); nested[1] = mnl_attr_nest_start(nlh, IPSET_ATTR_IP); mnl_attr_put(nlh, (af == AF_INET ? IPSET_ATTR_IPADDR_IPV4 : IPSET_ATTR_IPADDR_IPV6) | NLA_F_NET_BYTEORDER, (af == AF_INET ? sizeof(struct in_addr) : sizeof(struct in6_addr)), ipaddr); mnl_attr_nest_end(nlh, nested[1]); mnl_attr_nest_end(nlh, nested[0]); if (mnl_socket_sendto(mnl, nlh, nlh->nlmsg_len) < 0) { return -1; } return 0; } static void ipset_add_rrset_data(struct ipset_env *ie, struct mnl_socket *mnl, struct packed_rrset_data *d, const char* setname, int af, const char* dname) { int ret; size_t j, rr_len, rd_len; uint8_t *rr_data; /* to d->count, not d->rrsig_count, because we do not want to add the RRSIGs, only the addresses */ for (j = 0; j < d->count; j++) { rr_len = d->rr_len[j]; rr_data = d->rr_data[j]; rd_len = sldns_read_uint16(rr_data); if(af == AF_INET && rd_len != INET_SIZE) continue; if(af == AF_INET6 && rd_len != INET6_SIZE) continue; if (rr_len - 2 >= rd_len) { if(verbosity >= VERB_QUERY) { char ip[128]; if(inet_ntop(af, rr_data+2, ip, (socklen_t)sizeof(ip)) == 0) snprintf(ip, sizeof(ip), "(inet_ntop_error)"); verbose(VERB_QUERY, "ipset: add %s to %s for %s", ip, setname, dname); } ret = add_to_ipset(mnl, setname, rr_data + 2, af); if (ret < 0) { log_err("ipset: could not add %s into %s", dname, setname); mnl_socket_close(mnl); ie->mnl = NULL; break; } } } } static int ipset_check_zones_for_rrset(struct module_env *env, struct ipset_env *ie, struct mnl_socket *mnl, struct ub_packed_rrset_key *rrset, const char *setname, int af) { static char dname[BUFF_LEN]; const char *s; int dlen, plen; struct config_strlist *p; struct packed_rrset_data *d; dlen = sldns_wire2str_dname_buf(rrset->rk.dname, rrset->rk.dname_len, dname, BUFF_LEN); if (dlen == 0) { log_err("bad domain name"); return -1; } if (dname[dlen - 1] == '.') { dlen--; } for (p = env->cfg->local_zones_ipset; p; p = p->next) { plen = strlen(p->str); if (dlen >= plen) { s = dname + (dlen - plen); if (strncasecmp(p->str, s, plen) == 0) { d = (struct packed_rrset_data*)rrset->entry.data; ipset_add_rrset_data(ie, mnl, d, setname, af, dname); break; } } } return 0; } static int ipset_update(struct module_env *env, struct dns_msg *return_msg, struct ipset_env *ie) { struct mnl_socket *mnl; size_t i; const char *setname; struct ub_packed_rrset_key *rrset; int af; mnl = (struct mnl_socket *)ie->mnl; if (!mnl) { // retry to create mnl socket mnl = open_mnl_socket(); if (!mnl) { return -1; } ie->mnl = mnl; } for (i = 0; i < return_msg->rep->rrset_count; ++i) { setname = NULL; rrset = return_msg->rep->rrsets[i]; if (rrset->rk.type == htons(LDNS_RR_TYPE_A)) { af = AF_INET; if ((ie->v4_enabled == 1)) { setname = ie->name_v4; } } else { af = AF_INET6; if ((ie->v6_enabled == 1)) { setname = ie->name_v6; } } if (setname) { if(ipset_check_zones_for_rrset(env, ie, mnl, rrset, setname, af) == -1) return -1; } } return 0; } int ipset_init(struct module_env* env, int id) { struct ipset_env *ipset_env; ipset_env = (struct ipset_env *)calloc(1, sizeof(struct ipset_env)); if (!ipset_env) { log_err("malloc failure"); return 0; } env->modinfo[id] = (void *)ipset_env; ipset_env->mnl = NULL; ipset_env->name_v4 = env->cfg->ipset_name_v4; ipset_env->name_v6 = env->cfg->ipset_name_v6; ipset_env->v4_enabled = !ipset_env->name_v4 || (strlen(ipset_env->name_v4) == 0) ? 0 : 1; ipset_env->v6_enabled = !ipset_env->name_v6 || (strlen(ipset_env->name_v6) == 0) ? 0 : 1; if ((ipset_env->v4_enabled < 1) && (ipset_env->v6_enabled < 1)) { log_err("ipset: set name no configuration?"); return 0; } return 1; } void ipset_deinit(struct module_env *env, int id) { struct mnl_socket *mnl; struct ipset_env *ipset_env; if (!env || !env->modinfo[id]) { return; } ipset_env = (struct ipset_env *)env->modinfo[id]; mnl = (struct mnl_socket *)ipset_env->mnl; if (mnl) { mnl_socket_close(mnl); ipset_env->mnl = NULL; } free(ipset_env); env->modinfo[id] = NULL; } static int ipset_new(struct module_qstate* qstate, int id) { struct ipset_qstate *iq = (struct ipset_qstate *)regional_alloc( qstate->region, sizeof(struct ipset_qstate)); qstate->minfo[id] = iq; if (!iq) { return 0; } memset(iq, 0, sizeof(*iq)); /* initialise it */ /* TODO */ return 1; } void ipset_operate(struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound) { struct ipset_env *ie = (struct ipset_env *)qstate->env->modinfo[id]; struct ipset_qstate *iq = (struct ipset_qstate *)qstate->minfo[id]; verbose(VERB_QUERY, "ipset[module %d] operate: extstate:%s event:%s", id, strextstate(qstate->ext_state[id]), strmodulevent(event)); if (iq) { log_query_info(VERB_QUERY, "ipset operate: query", &qstate->qinfo); } /* perform ipset state machine */ if ((event == module_event_new || event == module_event_pass) && !iq) { if (!ipset_new(qstate, id)) { (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } iq = (struct ipset_qstate*)qstate->minfo[id]; } if (iq && (event == module_event_pass || event == module_event_new)) { qstate->ext_state[id] = module_wait_module; return; } if (iq && (event == module_event_moddone)) { if (qstate->return_msg && qstate->return_msg->rep) { ipset_update(qstate->env, qstate->return_msg, ie); } qstate->ext_state[id] = module_finished; return; } if (iq && outbound) { /* ipset does not need to process responses at this time * ignore it. ipset_process_response(qstate, iq, ie, id, outbound, event); */ return; } if (event == module_event_error) { verbose(VERB_ALGO, "got called with event error, giving up"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return; } if (!iq && (event == module_event_moddone)) { /* during priming, module done but we never started */ qstate->ext_state[id] = module_finished; return; } log_err("bad event for ipset"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); } void ipset_inform_super(struct module_qstate *ATTR_UNUSED(qstate), int ATTR_UNUSED(id), struct module_qstate *ATTR_UNUSED(super)) { /* ipset does not use subordinate requests at this time */ verbose(VERB_ALGO, "ipset inform_super was called"); } void ipset_clear(struct module_qstate *qstate, int id) { struct cachedb_qstate *iq; if (!qstate) { return; } iq = (struct cachedb_qstate *)qstate->minfo[id]; if (iq) { /* free contents of iq */ /* TODO */ } qstate->minfo[id] = NULL; } size_t ipset_get_mem(struct module_env *env, int id) { struct ipset_env *ie = (struct ipset_env *)env->modinfo[id]; if (!ie) { return 0; } return sizeof(*ie); } /** * The ipset function block */ static struct module_func_block ipset_block = { "ipset", &ipset_init, &ipset_deinit, &ipset_operate, &ipset_inform_super, &ipset_clear, &ipset_get_mem }; struct module_func_block * ipset_get_funcblock(void) { return &ipset_block; } unbound-1.13.1/ipset/ipset.h0000644000175000017500000000426514010434640015327 0ustar wouterwouter/** * ipset.h * * Author: Kevin Chou * Email: k9982874@gmail.com */ #ifndef IPSET_H #define IPSET_H /** \file * * This file implements the ipset module. It can handle packets by putting * the A and AAAA addresses that are configured in unbound.conf as type * ipset (local-zone statements) into a firewall rule IPSet. For firewall * blacklist and whitelist usage. * * To use the IPset module, install the libmnl-dev (or libmnl-devel) package * and configure with --enable-ipset. And compile. Then enable the ipset * module in unbound.conf with module-config: "ipset validator iterator" * then create it with ipset -N blacklist iphash and then add * local-zone: "example.com." ipset * statements for the zones where you want the addresses of the names * looked up added to the set. * * Set the name of the set with * ipset: * name-v4: "blacklist" * name-v6: "blacklist6" * in unbound.conf. The set can be used in this way: * iptables -A INPUT -m set --set blacklist src -j DROP * ip6tables -A INPUT -m set --set blacklist6 src -j DROP */ #include "util/module.h" #ifdef __cplusplus extern "C" { #endif struct ipset_env { void* mnl; int v4_enabled; int v6_enabled; const char *name_v4; const char *name_v6; }; struct ipset_qstate { int dummy; }; /** Init the ipset module */ int ipset_init(struct module_env* env, int id); /** Deinit the ipset module */ void ipset_deinit(struct module_env* env, int id); /** Operate on an event on a query (in qstate). */ void ipset_operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* outbound); /** Subordinate query done, inform this super request of its conclusion */ void ipset_inform_super(struct module_qstate* qstate, int id, struct module_qstate* super); /** clear the ipset query-specific contents out of qstate */ void ipset_clear(struct module_qstate* qstate, int id); /** return memory estimate for ipset module */ size_t ipset_get_mem(struct module_env* env, int id); /** * Get the function block with pointers to the ipset functions * @return the function block for "ipset". */ struct module_func_block* ipset_get_funcblock(void); #ifdef __cplusplus } #endif #endif /* IPSET_H */